Compare commits

..
9 Commits
57 changed files with 7706 additions and 9179 deletions
+3 -2
View File
@@ -9,14 +9,15 @@
"plugin:import/errors",
"plugin:import/warnings",
"plugin:import/typescript",
"plugin:prettier/recommended"
"plugin:prettier/recommended",
"prettier/@typescript-eslint"
],
"plugins": ["@typescript-eslint", "simple-import-sort", "jest"],
"rules": {
"import/first": "error",
"import/newline-after-import": "error",
"import/no-duplicates": "error",
"simple-import-sort/imports": "error",
"simple-import-sort/sort": "error",
"sort-imports": "off"
}
}
+1 -2
View File
@@ -1,2 +1 @@
.licenses/** -diff linguist-generated=true
* text=auto eol=lf
.licenses/** -diff linguist-generated=true
+1 -1
View File
@@ -1 +1 @@
* @actions/actions-cache
* @artifacts-actions
-52
View File
@@ -1,52 +0,0 @@
# `dist/index.js` is a special file in Actions.
# When you reference an action with `uses:` in a workflow,
# `index.js` is the code that will run.
# For our project, we generate this file through a build process
# from other source files.
# We need to make sure the checked-in `index.js` actually matches what we expect it to be.
name: Check dist/
on:
push:
branches:
- main
paths-ignore:
- '**.md'
pull_request:
paths-ignore:
- '**.md'
workflow_dispatch:
jobs:
check-dist:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v2
- name: Set Node.js 12.x
uses: actions/setup-node@v1
with:
node-version: 12.x
- name: Install dependencies
run: npm ci
- name: Rebuild the dist/ directory
run: npm run build
- name: Compare the expected and actual dist/ directories
run: |
if [ "$(git diff --ignore-space-at-eol dist/ | wc -l)" -gt "0" ]; then
echo "Detected uncommitted changes after build. See status below:"
git diff
exit 1
fi
id: diff
# If index.js was different than expected, upload the expected version as an artifact
- uses: actions/upload-artifact@v2
if: ${{ failure() && steps.diff.conclusion == 'failure' }}
with:
name: dist
path: dist/
@@ -1,22 +0,0 @@
name: Close inactive issues
on:
schedule:
- cron: "30 8 * * *"
jobs:
close-issues:
runs-on: ubuntu-latest
permissions:
issues: write
pull-requests: write
steps:
- uses: actions/stale@v3
with:
days-before-issue-stale: 365
days-before-issue-close: 5
stale-issue-label: "stale"
stale-issue-message: "This issue is stale because it has been open for 365 days with no activity. Leave a comment to avoid closing this issue in 5 days."
close-issue-message: "This issue was closed because it has been inactive for 5 days since being marked as stale."
days-before-pr-stale: -1
days-before-pr-close: -1
repo-token: ${{ secrets.GITHUB_TOKEN }}
+3 -7
View File
@@ -1,12 +1,8 @@
name: Licensed
on:
push:
branches:
- main
pull_request:
branches:
- main
push: {branches: main}
pull_request: {branches: main}
jobs:
test:
@@ -21,4 +17,4 @@ jobs:
curl -Lfs -o licensed.tar.gz https://github.com/github/licensed/releases/download/2.12.2/licensed-2.12.2-linux-x64.tar.gz
sudo tar -xzf licensed.tar.gz
sudo mv licensed /usr/local/bin/licensed
- run: licensed status
- run: licensed status
+14 -3
View File
@@ -19,7 +19,7 @@ jobs:
build:
strategy:
matrix:
os: [ubuntu-latest, windows-latest, macOS-latest]
os: [ubuntu-latest, ubuntu-16.04, windows-latest, macOS-latest]
fail-fast: false
runs-on: ${{ matrix.os }}
steps:
@@ -47,12 +47,23 @@ jobs:
run: npm run lint
- name: Build & Test
run: npm run test
- name: Ensure dist/ folder is up-to-date
if: ${{ runner.os == 'Linux' }}
shell: bash
run: |
npm run build
if [ "$(git diff --ignore-space-at-eol | wc -l)" -gt "0" ]; then
echo "Detected uncommitted changes after build. See status below:"
git diff
exit 1
fi
# End to end save and restore
test-save:
strategy:
matrix:
os: [ubuntu-latest, windows-latest, macOS-latest]
os: [ubuntu-latest, ubuntu-16.04, windows-latest, macOS-latest]
fail-fast: false
runs-on: ${{ matrix.os }}
steps:
@@ -75,7 +86,7 @@ jobs:
needs: test-save
strategy:
matrix:
os: [ubuntu-latest, windows-latest, macOS-latest]
os: [ubuntu-latest, ubuntu-16.04, windows-latest, macOS-latest]
fail-fast: false
runs-on: ${{ matrix.os }}
steps:
+1 -1
View File
@@ -1,6 +1,6 @@
---
name: "@actions/cache"
version: 1.0.9
version: 1.0.4
type: npm
summary: Actions cache lib
homepage: https://github.com/actions/toolkit/tree/main/packages/cache
+1 -1
View File
@@ -1,6 +1,6 @@
---
name: "@actions/core"
version: 1.6.0
version: 1.2.6
type: npm
summary: Actions core lib
homepage: https://github.com/actions/toolkit/tree/main/packages/core
+20 -10
View File
@@ -1,20 +1,30 @@
---
name: "@actions/exec"
version: 1.1.0
version: 1.0.4
type: npm
summary: Actions exec lib
homepage: https://github.com/actions/toolkit/tree/main/packages/exec
homepage: https://github.com/actions/toolkit/tree/master/packages/exec
license: mit
licenses:
- sources: LICENSE.md
text: |-
The MIT License (MIT)
- sources: Auto-generated MIT license text
text: |
MIT License
Copyright 2019 GitHub
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:
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 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.
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.
notices: []
+20 -10
View File
@@ -1,20 +1,30 @@
---
name: "@actions/glob"
version: 0.1.2
version: 0.1.0
type: npm
summary: Actions glob lib
homepage: https://github.com/actions/toolkit/tree/main/packages/glob
homepage: https://github.com/actions/toolkit/tree/master/packages/glob
license: mit
licenses:
- sources: LICENSE.md
text: |-
The MIT License (MIT)
- sources: Auto-generated MIT license text
text: |
MIT License
Copyright 2019 GitHub
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:
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 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.
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.
notices: []
+1 -1
View File
@@ -1,6 +1,6 @@
---
name: "@actions/http-client"
version: 1.0.11
version: 1.0.9
type: npm
summary: Actions Http Client
homepage: https://github.com/actions/http-client#readme
+20 -10
View File
@@ -1,20 +1,30 @@
---
name: "@actions/io"
version: 1.1.1
version: 1.0.2
type: npm
summary: Actions io lib
homepage: https://github.com/actions/toolkit/tree/main/packages/io
homepage: https://github.com/actions/toolkit/tree/master/packages/io
license: mit
licenses:
- sources: LICENSE.md
text: |-
The MIT License (MIT)
- sources: Auto-generated MIT license text
text: |
MIT License
Copyright 2019 GitHub
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:
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 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.
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.
notices: []
+20 -20
View File
@@ -1,32 +1,32 @@
---
name: "@azure/abort-controller"
version: 1.0.4
version: 1.0.1
type: npm
summary: Microsoft Azure SDK for JavaScript - Aborter
homepage: https://github.com/Azure/azure-sdk-for-js/tree/master/sdk/core/abort-controller/README.md
homepage: https://github.com/Azure/azure-sdk-for-js/tree/master/sdk/core/abort-controller
license: mit
licenses:
- sources: LICENSE
text: |
The MIT License (MIT)
text: |2
MIT License
Copyright (c) 2020 Microsoft
Copyright (c) Microsoft Corporation. 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:
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 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.
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
notices: []
+2 -2
View File
@@ -1,10 +1,10 @@
---
name: "@azure/core-auth"
version: 1.3.2
version: 1.1.3
type: npm
summary: Provides low-level interfaces and helper methods for authentication in Azure
SDK
homepage: https://github.com/Azure/azure-sdk-for-js/blob/main/sdk/core/core-auth/README.md
homepage: https://github.com/Azure/azure-sdk-for-js/blob/master/sdk/core/core-auth/README.md
license: mit
licenses:
- sources: LICENSE
+2 -2
View File
@@ -1,10 +1,10 @@
---
name: "@azure/core-http"
version: 2.2.4
version: 1.1.9
type: npm
summary: Isomorphic client Runtime for Typescript/node.js/browser javascript client
libraries generated using AutoRest
homepage: https://github.com/Azure/azure-sdk-for-js/blob/main/sdk/core/core-http/README.md
homepage: https://github.com/Azure/azure-sdk-for-js/blob/master/sdk/core/core-http/README.md
license: mit
licenses:
- sources: LICENSE
+3 -4
View File
@@ -1,10 +1,9 @@
---
name: "@azure/core-lro"
version: 2.2.3
version: 1.0.2
type: npm
summary: Isomorphic client library for supporting long-running operations in node.js
and browser.
homepage: https://github.com/Azure/azure-sdk-for-js/blob/main/sdk/core/core-lro/README.md
summary: LRO Polling strtegy for the Azure SDK in TypeScript
homepage: https://github.com/Azure/azure-sdk-for-js/blob/master/sdk/core/core-lro
license: mit
licenses:
- sources: LICENSE
+2 -2
View File
@@ -1,9 +1,9 @@
---
name: "@azure/core-paging"
version: 1.2.1
version: 1.1.3
type: npm
summary: Core types for paging async iterable iterators
homepage: https://github.com/Azure/azure-sdk-for-js/tree/main/sdk/core/core-paging/README.md
homepage: https://github.com/Azure/azure-sdk-for-js/tree/master/sdk/core/core-paging/README.md
license: mit
licenses:
- sources: LICENSE
@@ -1,9 +1,9 @@
---
name: "@azure/core-tracing"
version: 1.0.0-preview.13
version: 1.0.0-preview.8
type: npm
summary: Provides low-level interfaces and helper methods for tracing in Azure SDK
homepage: https://github.com/Azure/azure-sdk-for-js/blob/main/sdk/core/core-tracing/README.md
homepage: https://github.com/azure/azure-sdk-for-js/tree/master/sdk/core/core-tracing
license: mit
licenses:
- sources: LICENSE
@@ -1,14 +1,16 @@
---
name: tr46
version: 0.0.3
name: "@azure/core-tracing"
version: 1.0.0-preview.9
type: npm
summary: An implementation of the Unicode TR46 spec
homepage: https://github.com/Sebmaster/tr46.js#readme
summary: Provides low-level interfaces and helper methods for tracing in Azure SDK
homepage: https://github.com/Azure/azure-sdk-for-js/blob/master/sdk/core/core-tracing/README.md
license: mit
licenses:
- sources: Auto-generated MIT license text
- sources: LICENSE
text: |
MIT License
The MIT License (MIT)
Copyright (c) 2020 Microsoft
Permission is hereby granted, free of charge, to any person obtaining a copy
of this software and associated documentation files (the "Software"), to deal
+20 -20
View File
@@ -1,32 +1,32 @@
---
name: "@azure/logger"
version: 1.0.3
version: 1.0.0
type: npm
summary: Microsoft Azure SDK for JavaScript - Logger
homepage: https://github.com/Azure/azure-sdk-for-js/tree/main/sdk/core/logger/README.md
homepage: https://github.com/Azure/azure-sdk-for-js/tree/master/sdk/core/logger
license: mit
licenses:
- sources: LICENSE
text: |
The MIT License (MIT)
text: |2
MIT License
Copyright (c) 2020 Microsoft
Copyright (c) Microsoft Corporation. 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:
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 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.
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
notices: []
+1 -1
View File
@@ -1,6 +1,6 @@
---
name: "@azure/ms-rest-js"
version: 2.6.0
version: 2.1.0
type: npm
summary: Isomorphic client Runtime for Typescript/node.js/browser javascript client
libraries generated using AutoRest
+2 -2
View File
@@ -1,9 +1,9 @@
---
name: "@azure/storage-blob"
version: 12.8.0
version: 12.2.1
type: npm
summary: Microsoft Azure Storage SDK for JavaScript - Blob
homepage: https://github.com/Azure/azure-sdk-for-js/blob/main/sdk/storage/storage-blob/
homepage: https://github.com/Azure/azure-sdk-for-js#readme
license: mit
licenses:
- sources: LICENSE
@@ -1,13 +1,15 @@
---
name: "@opentelemetry/api"
version: 1.0.4
name: "@opencensus/web-types"
version: 0.0.7
type: npm
summary: Public API for OpenTelemetry
homepage: https://github.com/open-telemetry/opentelemetry-js-api#readme
summary: OpenCensus Web types is a slightly-patched copy of the `types.ts` files from
`@opencensus/core` so that they can be easily imported in web-specific packages.
homepage: https://github.com/census-instrumentation/opencensus-web#readme
license: apache-2.0
licenses:
- sources: LICENSE
text: |2
Apache License
Version 2.0, January 2004
http://www.apache.org/licenses/
@@ -213,13 +215,12 @@ licenses:
text: |-
Apache 2.0 - See [LICENSE][license-url] for more information.
[opentelemetry-js]: https://github.com/open-telemetry/opentelemetry-js
[discussions-url]: https://github.com/open-telemetry/opentelemetry-js/discussions
[license-url]: https://github.com/open-telemetry/opentelemetry-js-api/blob/main/LICENSE
[license-image]: https://img.shields.io/badge/license-Apache_2.0-green.svg?style=flat
[npm-url]: https://www.npmjs.com/package/@opentelemetry/api
[npm-img]: https://badge.fury.io/js/%40opentelemetry%2Fapi.svg
[docs-tracing]: https://github.com/open-telemetry/opentelemetry-js-api/blob/main/docs/tracing.md
[docs-sdk-registration]: https://github.com/open-telemetry/opentelemetry-js-api/blob/main/docs/sdk-registration.md
[gitter-image]: https://badges.gitter.im/census-instrumentation/lobby.svg
[gitter-url]: https://gitter.im/census-instrumentation/lobby
[opencensus-core-url]: https://github.com/census-instrumentation/opencensus-node/tree/master/packages/opencensus-core
[oc-web-readme-url]: https://github.com/census-instrumentation/opencensus-web/blob/master/README.md
[license-url]: https://github.com/census-instrumentation/opencensus-web/blob/master/packages/opencensus-web-instrumentation-perf/LICENSE
[rules-typescript-url]: https://github.com/bazelbuild/rules_typescript
[tsickle-url]: https://github.com/angular/tsickle
[closure-url]: https://github.com/google/closure-compiler
notices: []
+238
View File
@@ -0,0 +1,238 @@
---
name: "@opentelemetry/api"
version: 0.10.2
type: npm
summary: Public API for OpenTelemetry
homepage: https://github.com/open-telemetry/opentelemetry-js#readme
license: apache-2.0
licenses:
- sources: LICENSE
text: |2
Apache License
Version 2.0, January 2004
http://www.apache.org/licenses/
TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION
1. Definitions.
"License" shall mean the terms and conditions for use, reproduction,
and distribution as defined by Sections 1 through 9 of this document.
"Licensor" shall mean the copyright owner or entity authorized by
the copyright owner that is granting the License.
"Legal Entity" shall mean the union of the acting entity and all
other entities that control, are controlled by, or are under common
control with that entity. For the purposes of this definition,
"control" means (i) the power, direct or indirect, to cause the
direction or management of such entity, whether by contract or
otherwise, or (ii) ownership of fifty percent (50%) or more of the
outstanding shares, or (iii) beneficial ownership of such entity.
"You" (or "Your") shall mean an individual or Legal Entity
exercising permissions granted by this License.
"Source" form shall mean the preferred form for making modifications,
including but not limited to software source code, documentation
source, and configuration files.
"Object" form shall mean any form resulting from mechanical
transformation or translation of a Source form, including but
not limited to compiled object code, generated documentation,
and conversions to other media types.
"Work" shall mean the work of authorship, whether in Source or
Object form, made available under the License, as indicated by a
copyright notice that is included in or attached to the work
(an example is provided in the Appendix below).
"Derivative Works" shall mean any work, whether in Source or Object
form, that is based on (or derived from) the Work and for which the
editorial revisions, annotations, elaborations, or other modifications
represent, as a whole, an original work of authorship. For the purposes
of this License, Derivative Works shall not include works that remain
separable from, or merely link (or bind by name) to the interfaces of,
the Work and Derivative Works thereof.
"Contribution" shall mean any work of authorship, including
the original version of the Work and any modifications or additions
to that Work or Derivative Works thereof, that is intentionally
submitted to Licensor for inclusion in the Work by the copyright owner
or by an individual or Legal Entity authorized to submit on behalf of
the copyright owner. For the purposes of this definition, "submitted"
means any form of electronic, verbal, or written communication sent
to the Licensor or its representatives, including but not limited to
communication on electronic mailing lists, source code control systems,
and issue tracking systems that are managed by, or on behalf of, the
Licensor for the purpose of discussing and improving the Work, but
excluding communication that is conspicuously marked or otherwise
designated in writing by the copyright owner as "Not a Contribution."
"Contributor" shall mean Licensor and any individual or Legal Entity
on behalf of whom a Contribution has been received by Licensor and
subsequently incorporated within the Work.
2. Grant of Copyright License. Subject to the terms and conditions of
this License, each Contributor hereby grants to You a perpetual,
worldwide, non-exclusive, no-charge, royalty-free, irrevocable
copyright license to reproduce, prepare Derivative Works of,
publicly display, publicly perform, sublicense, and distribute the
Work and such Derivative Works in Source or Object form.
3. Grant of Patent License. Subject to the terms and conditions of
this License, each Contributor hereby grants to You a perpetual,
worldwide, non-exclusive, no-charge, royalty-free, irrevocable
(except as stated in this section) patent license to make, have made,
use, offer to sell, sell, import, and otherwise transfer the Work,
where such license applies only to those patent claims licensable
by such Contributor that are necessarily infringed by their
Contribution(s) alone or by combination of their Contribution(s)
with the Work to which such Contribution(s) was submitted. If You
institute patent litigation against any entity (including a
cross-claim or counterclaim in a lawsuit) alleging that the Work
or a Contribution incorporated within the Work constitutes direct
or contributory patent infringement, then any patent licenses
granted to You under this License for that Work shall terminate
as of the date such litigation is filed.
4. Redistribution. You may reproduce and distribute copies of the
Work or Derivative Works thereof in any medium, with or without
modifications, and in Source or Object form, provided that You
meet the following conditions:
(a) You must give any other recipients of the Work or
Derivative Works a copy of this License; and
(b) You must cause any modified files to carry prominent notices
stating that You changed the files; and
(c) You must retain, in the Source form of any Derivative Works
that You distribute, all copyright, patent, trademark, and
attribution notices from the Source form of the Work,
excluding those notices that do not pertain to any part of
the Derivative Works; and
(d) If the Work includes a "NOTICE" text file as part of its
distribution, then any Derivative Works that You distribute must
include a readable copy of the attribution notices contained
within such NOTICE file, excluding those notices that do not
pertain to any part of the Derivative Works, in at least one
of the following places: within a NOTICE text file distributed
as part of the Derivative Works; within the Source form or
documentation, if provided along with the Derivative Works; or,
within a display generated by the Derivative Works, if and
wherever such third-party notices normally appear. The contents
of the NOTICE file are for informational purposes only and
do not modify the License. You may add Your own attribution
notices within Derivative Works that You distribute, alongside
or as an addendum to the NOTICE text from the Work, provided
that such additional attribution notices cannot be construed
as modifying the License.
You may add Your own copyright statement to Your modifications and
may provide additional or different license terms and conditions
for use, reproduction, or distribution of Your modifications, or
for any such Derivative Works as a whole, provided Your use,
reproduction, and distribution of the Work otherwise complies with
the conditions stated in this License.
5. Submission of Contributions. Unless You explicitly state otherwise,
any Contribution intentionally submitted for inclusion in the Work
by You to the Licensor shall be under the terms and conditions of
this License, without any additional terms or conditions.
Notwithstanding the above, nothing herein shall supersede or modify
the terms of any separate license agreement you may have executed
with Licensor regarding such Contributions.
6. Trademarks. This License does not grant permission to use the trade
names, trademarks, service marks, or product names of the Licensor,
except as required for reasonable and customary use in describing the
origin of the Work and reproducing the content of the NOTICE file.
7. Disclaimer of Warranty. Unless required by applicable law or
agreed to in writing, Licensor provides the Work (and each
Contributor provides its Contributions) on an "AS IS" BASIS,
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or
implied, including, without limitation, any warranties or conditions
of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A
PARTICULAR PURPOSE. You are solely responsible for determining the
appropriateness of using or redistributing the Work and assume any
risks associated with Your exercise of permissions under this License.
8. Limitation of Liability. In no event and under no legal theory,
whether in tort (including negligence), contract, or otherwise,
unless required by applicable law (such as deliberate and grossly
negligent acts) or agreed to in writing, shall any Contributor be
liable to You for damages, including any direct, indirect, special,
incidental, or consequential damages of any character arising as a
result of this License or out of the use or inability to use the
Work (including but not limited to damages for loss of goodwill,
work stoppage, computer failure or malfunction, or any and all
other commercial damages or losses), even if such Contributor
has been advised of the possibility of such damages.
9. Accepting Warranty or Additional Liability. While redistributing
the Work or Derivative Works thereof, You may choose to offer,
and charge a fee for, acceptance of support, warranty, indemnity,
or other liability obligations and/or rights consistent with this
License. However, in accepting such obligations, You may act only
on Your own behalf and on Your sole responsibility, not on behalf
of any other Contributor, and only if You agree to indemnify,
defend, and hold each Contributor harmless for any liability
incurred by, or claims asserted against, such Contributor by reason
of your accepting any such warranty or additional liability.
END OF TERMS AND CONDITIONS
APPENDIX: How to apply the Apache License to your work.
To apply the Apache License to your work, attach the following
boilerplate notice, with the fields enclosed by brackets "[]"
replaced with your own identifying information. (Don't include
the brackets!) The text should be enclosed in the appropriate
comment syntax for the file format. We also recommend that a
file or class name and description of purpose be included on the
same "printed page" as the copyright notice for easier
identification within third-party archives.
Copyright [yyyy] [name of copyright owner]
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
http://www.apache.org/licenses/LICENSE-2.0
Unless required by applicable law or agreed to in writing, software
distributed under the License is distributed on an "AS IS" BASIS,
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
See the License for the specific language governing permissions and
limitations under the License.
- sources: README.md
text: |-
Apache 2.0 - See [LICENSE][license-url] for more information.
[gitter-image]: https://badges.gitter.im/open-telemetry/opentelemetry-js.svg
[gitter-url]: https://gitter.im/open-telemetry/opentelemetry-node?utm_source=badge&utm_medium=badge&utm_campaign=pr-badge&utm_content=badge
[license-url]: https://github.com/open-telemetry/opentelemetry-js/blob/master/LICENSE
[license-image]: https://img.shields.io/badge/license-Apache_2.0-green.svg?style=flat
[dependencies-image]: https://david-dm.org/open-telemetry/opentelemetry-js/status.svg?path=packages/opentelemetry-api
[dependencies-url]: https://david-dm.org/open-telemetry/opentelemetry-js?path=packages%2Fopentelemetry-api
[devDependencies-image]: https://david-dm.org/open-telemetry/opentelemetry-js/dev-status.svg?path=packages/opentelemetry-api
[devDependencies-url]: https://david-dm.org/open-telemetry/opentelemetry-js?path=packages%2Fopentelemetry-api&type=dev
[npm-url]: https://www.npmjs.com/package/@opentelemetry/api
[npm-img]: https://badge.fury.io/js/%40opentelemetry%2Fapi.svg
[trace-api-docs]: https://open-telemetry.github.io/opentelemetry-js/classes/traceapi.html
[metrics-api-docs]: https://open-telemetry.github.io/opentelemetry-js/classes/metricsapi.html
[propagation-api-docs]: https://open-telemetry.github.io/opentelemetry-js/classes/propagationapi.html
[context-api-docs]: https://open-telemetry.github.io/opentelemetry-js/classes/contextapi.html
[web]: https://github.com/open-telemetry/opentelemetry-js/tree/master/packages/opentelemetry-web
[tracing]: https://github.com/open-telemetry/opentelemetry-js/tree/master/packages/opentelemetry-tracing
[node]: https://github.com/open-telemetry/opentelemetry-js/tree/master/packages/opentelemetry-node
[metrics]: https://github.com/open-telemetry/opentelemetry-js/tree/master/packages/opentelemetry-metrics
[other-tracing-backends]: https://github.com/open-telemetry/opentelemetry-js#trace-exporters
notices: []
+238
View File
@@ -0,0 +1,238 @@
---
name: "@opentelemetry/api"
version: 0.6.1
type: npm
summary: Public API for OpenTelemetry
homepage: https://github.com/open-telemetry/opentelemetry-js#readme
license: apache-2.0
licenses:
- sources: LICENSE
text: |2
Apache License
Version 2.0, January 2004
http://www.apache.org/licenses/
TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION
1. Definitions.
"License" shall mean the terms and conditions for use, reproduction,
and distribution as defined by Sections 1 through 9 of this document.
"Licensor" shall mean the copyright owner or entity authorized by
the copyright owner that is granting the License.
"Legal Entity" shall mean the union of the acting entity and all
other entities that control, are controlled by, or are under common
control with that entity. For the purposes of this definition,
"control" means (i) the power, direct or indirect, to cause the
direction or management of such entity, whether by contract or
otherwise, or (ii) ownership of fifty percent (50%) or more of the
outstanding shares, or (iii) beneficial ownership of such entity.
"You" (or "Your") shall mean an individual or Legal Entity
exercising permissions granted by this License.
"Source" form shall mean the preferred form for making modifications,
including but not limited to software source code, documentation
source, and configuration files.
"Object" form shall mean any form resulting from mechanical
transformation or translation of a Source form, including but
not limited to compiled object code, generated documentation,
and conversions to other media types.
"Work" shall mean the work of authorship, whether in Source or
Object form, made available under the License, as indicated by a
copyright notice that is included in or attached to the work
(an example is provided in the Appendix below).
"Derivative Works" shall mean any work, whether in Source or Object
form, that is based on (or derived from) the Work and for which the
editorial revisions, annotations, elaborations, or other modifications
represent, as a whole, an original work of authorship. For the purposes
of this License, Derivative Works shall not include works that remain
separable from, or merely link (or bind by name) to the interfaces of,
the Work and Derivative Works thereof.
"Contribution" shall mean any work of authorship, including
the original version of the Work and any modifications or additions
to that Work or Derivative Works thereof, that is intentionally
submitted to Licensor for inclusion in the Work by the copyright owner
or by an individual or Legal Entity authorized to submit on behalf of
the copyright owner. For the purposes of this definition, "submitted"
means any form of electronic, verbal, or written communication sent
to the Licensor or its representatives, including but not limited to
communication on electronic mailing lists, source code control systems,
and issue tracking systems that are managed by, or on behalf of, the
Licensor for the purpose of discussing and improving the Work, but
excluding communication that is conspicuously marked or otherwise
designated in writing by the copyright owner as "Not a Contribution."
"Contributor" shall mean Licensor and any individual or Legal Entity
on behalf of whom a Contribution has been received by Licensor and
subsequently incorporated within the Work.
2. Grant of Copyright License. Subject to the terms and conditions of
this License, each Contributor hereby grants to You a perpetual,
worldwide, non-exclusive, no-charge, royalty-free, irrevocable
copyright license to reproduce, prepare Derivative Works of,
publicly display, publicly perform, sublicense, and distribute the
Work and such Derivative Works in Source or Object form.
3. Grant of Patent License. Subject to the terms and conditions of
this License, each Contributor hereby grants to You a perpetual,
worldwide, non-exclusive, no-charge, royalty-free, irrevocable
(except as stated in this section) patent license to make, have made,
use, offer to sell, sell, import, and otherwise transfer the Work,
where such license applies only to those patent claims licensable
by such Contributor that are necessarily infringed by their
Contribution(s) alone or by combination of their Contribution(s)
with the Work to which such Contribution(s) was submitted. If You
institute patent litigation against any entity (including a
cross-claim or counterclaim in a lawsuit) alleging that the Work
or a Contribution incorporated within the Work constitutes direct
or contributory patent infringement, then any patent licenses
granted to You under this License for that Work shall terminate
as of the date such litigation is filed.
4. Redistribution. You may reproduce and distribute copies of the
Work or Derivative Works thereof in any medium, with or without
modifications, and in Source or Object form, provided that You
meet the following conditions:
(a) You must give any other recipients of the Work or
Derivative Works a copy of this License; and
(b) You must cause any modified files to carry prominent notices
stating that You changed the files; and
(c) You must retain, in the Source form of any Derivative Works
that You distribute, all copyright, patent, trademark, and
attribution notices from the Source form of the Work,
excluding those notices that do not pertain to any part of
the Derivative Works; and
(d) If the Work includes a "NOTICE" text file as part of its
distribution, then any Derivative Works that You distribute must
include a readable copy of the attribution notices contained
within such NOTICE file, excluding those notices that do not
pertain to any part of the Derivative Works, in at least one
of the following places: within a NOTICE text file distributed
as part of the Derivative Works; within the Source form or
documentation, if provided along with the Derivative Works; or,
within a display generated by the Derivative Works, if and
wherever such third-party notices normally appear. The contents
of the NOTICE file are for informational purposes only and
do not modify the License. You may add Your own attribution
notices within Derivative Works that You distribute, alongside
or as an addendum to the NOTICE text from the Work, provided
that such additional attribution notices cannot be construed
as modifying the License.
You may add Your own copyright statement to Your modifications and
may provide additional or different license terms and conditions
for use, reproduction, or distribution of Your modifications, or
for any such Derivative Works as a whole, provided Your use,
reproduction, and distribution of the Work otherwise complies with
the conditions stated in this License.
5. Submission of Contributions. Unless You explicitly state otherwise,
any Contribution intentionally submitted for inclusion in the Work
by You to the Licensor shall be under the terms and conditions of
this License, without any additional terms or conditions.
Notwithstanding the above, nothing herein shall supersede or modify
the terms of any separate license agreement you may have executed
with Licensor regarding such Contributions.
6. Trademarks. This License does not grant permission to use the trade
names, trademarks, service marks, or product names of the Licensor,
except as required for reasonable and customary use in describing the
origin of the Work and reproducing the content of the NOTICE file.
7. Disclaimer of Warranty. Unless required by applicable law or
agreed to in writing, Licensor provides the Work (and each
Contributor provides its Contributions) on an "AS IS" BASIS,
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or
implied, including, without limitation, any warranties or conditions
of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A
PARTICULAR PURPOSE. You are solely responsible for determining the
appropriateness of using or redistributing the Work and assume any
risks associated with Your exercise of permissions under this License.
8. Limitation of Liability. In no event and under no legal theory,
whether in tort (including negligence), contract, or otherwise,
unless required by applicable law (such as deliberate and grossly
negligent acts) or agreed to in writing, shall any Contributor be
liable to You for damages, including any direct, indirect, special,
incidental, or consequential damages of any character arising as a
result of this License or out of the use or inability to use the
Work (including but not limited to damages for loss of goodwill,
work stoppage, computer failure or malfunction, or any and all
other commercial damages or losses), even if such Contributor
has been advised of the possibility of such damages.
9. Accepting Warranty or Additional Liability. While redistributing
the Work or Derivative Works thereof, You may choose to offer,
and charge a fee for, acceptance of support, warranty, indemnity,
or other liability obligations and/or rights consistent with this
License. However, in accepting such obligations, You may act only
on Your own behalf and on Your sole responsibility, not on behalf
of any other Contributor, and only if You agree to indemnify,
defend, and hold each Contributor harmless for any liability
incurred by, or claims asserted against, such Contributor by reason
of your accepting any such warranty or additional liability.
END OF TERMS AND CONDITIONS
APPENDIX: How to apply the Apache License to your work.
To apply the Apache License to your work, attach the following
boilerplate notice, with the fields enclosed by brackets "[]"
replaced with your own identifying information. (Don't include
the brackets!) The text should be enclosed in the appropriate
comment syntax for the file format. We also recommend that a
file or class name and description of purpose be included on the
same "printed page" as the copyright notice for easier
identification within third-party archives.
Copyright [yyyy] [name of copyright owner]
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
http://www.apache.org/licenses/LICENSE-2.0
Unless required by applicable law or agreed to in writing, software
distributed under the License is distributed on an "AS IS" BASIS,
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
See the License for the specific language governing permissions and
limitations under the License.
- sources: README.md
text: |-
Apache 2.0 - See [LICENSE][license-url] for more information.
[gitter-image]: https://badges.gitter.im/open-telemetry/opentelemetry-js.svg
[gitter-url]: https://gitter.im/open-telemetry/opentelemetry-node?utm_source=badge&utm_medium=badge&utm_campaign=pr-badge&utm_content=badge
[license-url]: https://github.com/open-telemetry/opentelemetry-js/blob/master/LICENSE
[license-image]: https://img.shields.io/badge/license-Apache_2.0-green.svg?style=flat
[dependencies-image]: https://david-dm.org/open-telemetry/opentelemetry-js/status.svg?path=packages/opentelemetry-api
[dependencies-url]: https://david-dm.org/open-telemetry/opentelemetry-js?path=packages%2Fopentelemetry-api
[devDependencies-image]: https://david-dm.org/open-telemetry/opentelemetry-js/dev-status.svg?path=packages/opentelemetry-api
[devDependencies-url]: https://david-dm.org/open-telemetry/opentelemetry-js?path=packages%2Fopentelemetry-api&type=dev
[npm-url]: https://www.npmjs.com/package/@opentelemetry/api
[npm-img]: https://badge.fury.io/js/%40opentelemetry%2Fapi.svg
[trace-api-docs]: https://open-telemetry.github.io/opentelemetry-js/classes/traceapi.html
[metrics-api-docs]: https://open-telemetry.github.io/opentelemetry-js/classes/metricsapi.html
[propagation-api-docs]: https://open-telemetry.github.io/opentelemetry-js/classes/propagationapi.html
[context-api-docs]: https://open-telemetry.github.io/opentelemetry-js/classes/contextapi.html
[web]: https://github.com/open-telemetry/opentelemetry-js/tree/master/packages/opentelemetry-web
[tracing]: https://github.com/open-telemetry/opentelemetry-js/tree/master/packages/opentelemetry-tracing
[node]: https://github.com/open-telemetry/opentelemetry-js/tree/master/packages/opentelemetry-node
[metrics]: https://github.com/open-telemetry/opentelemetry-js/tree/master/packages/opentelemetry-metrics
[other-tracing-backends]: https://github.com/open-telemetry/opentelemetry-js#trace-exporters
notices: []
+227
View File
@@ -0,0 +1,227 @@
---
name: "@opentelemetry/context-base"
version: 0.10.2
type: npm
summary: OpenTelemetry Base Context Manager
homepage: https://github.com/open-telemetry/opentelemetry-js#readme
license: apache-2.0
licenses:
- sources: LICENSE
text: |2
Apache License
Version 2.0, January 2004
http://www.apache.org/licenses/
TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION
1. Definitions.
"License" shall mean the terms and conditions for use, reproduction,
and distribution as defined by Sections 1 through 9 of this document.
"Licensor" shall mean the copyright owner or entity authorized by
the copyright owner that is granting the License.
"Legal Entity" shall mean the union of the acting entity and all
other entities that control, are controlled by, or are under common
control with that entity. For the purposes of this definition,
"control" means (i) the power, direct or indirect, to cause the
direction or management of such entity, whether by contract or
otherwise, or (ii) ownership of fifty percent (50%) or more of the
outstanding shares, or (iii) beneficial ownership of such entity.
"You" (or "Your") shall mean an individual or Legal Entity
exercising permissions granted by this License.
"Source" form shall mean the preferred form for making modifications,
including but not limited to software source code, documentation
source, and configuration files.
"Object" form shall mean any form resulting from mechanical
transformation or translation of a Source form, including but
not limited to compiled object code, generated documentation,
and conversions to other media types.
"Work" shall mean the work of authorship, whether in Source or
Object form, made available under the License, as indicated by a
copyright notice that is included in or attached to the work
(an example is provided in the Appendix below).
"Derivative Works" shall mean any work, whether in Source or Object
form, that is based on (or derived from) the Work and for which the
editorial revisions, annotations, elaborations, or other modifications
represent, as a whole, an original work of authorship. For the purposes
of this License, Derivative Works shall not include works that remain
separable from, or merely link (or bind by name) to the interfaces of,
the Work and Derivative Works thereof.
"Contribution" shall mean any work of authorship, including
the original version of the Work and any modifications or additions
to that Work or Derivative Works thereof, that is intentionally
submitted to Licensor for inclusion in the Work by the copyright owner
or by an individual or Legal Entity authorized to submit on behalf of
the copyright owner. For the purposes of this definition, "submitted"
means any form of electronic, verbal, or written communication sent
to the Licensor or its representatives, including but not limited to
communication on electronic mailing lists, source code control systems,
and issue tracking systems that are managed by, or on behalf of, the
Licensor for the purpose of discussing and improving the Work, but
excluding communication that is conspicuously marked or otherwise
designated in writing by the copyright owner as "Not a Contribution."
"Contributor" shall mean Licensor and any individual or Legal Entity
on behalf of whom a Contribution has been received by Licensor and
subsequently incorporated within the Work.
2. Grant of Copyright License. Subject to the terms and conditions of
this License, each Contributor hereby grants to You a perpetual,
worldwide, non-exclusive, no-charge, royalty-free, irrevocable
copyright license to reproduce, prepare Derivative Works of,
publicly display, publicly perform, sublicense, and distribute the
Work and such Derivative Works in Source or Object form.
3. Grant of Patent License. Subject to the terms and conditions of
this License, each Contributor hereby grants to You a perpetual,
worldwide, non-exclusive, no-charge, royalty-free, irrevocable
(except as stated in this section) patent license to make, have made,
use, offer to sell, sell, import, and otherwise transfer the Work,
where such license applies only to those patent claims licensable
by such Contributor that are necessarily infringed by their
Contribution(s) alone or by combination of their Contribution(s)
with the Work to which such Contribution(s) was submitted. If You
institute patent litigation against any entity (including a
cross-claim or counterclaim in a lawsuit) alleging that the Work
or a Contribution incorporated within the Work constitutes direct
or contributory patent infringement, then any patent licenses
granted to You under this License for that Work shall terminate
as of the date such litigation is filed.
4. Redistribution. You may reproduce and distribute copies of the
Work or Derivative Works thereof in any medium, with or without
modifications, and in Source or Object form, provided that You
meet the following conditions:
(a) You must give any other recipients of the Work or
Derivative Works a copy of this License; and
(b) You must cause any modified files to carry prominent notices
stating that You changed the files; and
(c) You must retain, in the Source form of any Derivative Works
that You distribute, all copyright, patent, trademark, and
attribution notices from the Source form of the Work,
excluding those notices that do not pertain to any part of
the Derivative Works; and
(d) If the Work includes a "NOTICE" text file as part of its
distribution, then any Derivative Works that You distribute must
include a readable copy of the attribution notices contained
within such NOTICE file, excluding those notices that do not
pertain to any part of the Derivative Works, in at least one
of the following places: within a NOTICE text file distributed
as part of the Derivative Works; within the Source form or
documentation, if provided along with the Derivative Works; or,
within a display generated by the Derivative Works, if and
wherever such third-party notices normally appear. The contents
of the NOTICE file are for informational purposes only and
do not modify the License. You may add Your own attribution
notices within Derivative Works that You distribute, alongside
or as an addendum to the NOTICE text from the Work, provided
that such additional attribution notices cannot be construed
as modifying the License.
You may add Your own copyright statement to Your modifications and
may provide additional or different license terms and conditions
for use, reproduction, or distribution of Your modifications, or
for any such Derivative Works as a whole, provided Your use,
reproduction, and distribution of the Work otherwise complies with
the conditions stated in this License.
5. Submission of Contributions. Unless You explicitly state otherwise,
any Contribution intentionally submitted for inclusion in the Work
by You to the Licensor shall be under the terms and conditions of
this License, without any additional terms or conditions.
Notwithstanding the above, nothing herein shall supersede or modify
the terms of any separate license agreement you may have executed
with Licensor regarding such Contributions.
6. Trademarks. This License does not grant permission to use the trade
names, trademarks, service marks, or product names of the Licensor,
except as required for reasonable and customary use in describing the
origin of the Work and reproducing the content of the NOTICE file.
7. Disclaimer of Warranty. Unless required by applicable law or
agreed to in writing, Licensor provides the Work (and each
Contributor provides its Contributions) on an "AS IS" BASIS,
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or
implied, including, without limitation, any warranties or conditions
of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A
PARTICULAR PURPOSE. You are solely responsible for determining the
appropriateness of using or redistributing the Work and assume any
risks associated with Your exercise of permissions under this License.
8. Limitation of Liability. In no event and under no legal theory,
whether in tort (including negligence), contract, or otherwise,
unless required by applicable law (such as deliberate and grossly
negligent acts) or agreed to in writing, shall any Contributor be
liable to You for damages, including any direct, indirect, special,
incidental, or consequential damages of any character arising as a
result of this License or out of the use or inability to use the
Work (including but not limited to damages for loss of goodwill,
work stoppage, computer failure or malfunction, or any and all
other commercial damages or losses), even if such Contributor
has been advised of the possibility of such damages.
9. Accepting Warranty or Additional Liability. While redistributing
the Work or Derivative Works thereof, You may choose to offer,
and charge a fee for, acceptance of support, warranty, indemnity,
or other liability obligations and/or rights consistent with this
License. However, in accepting such obligations, You may act only
on Your own behalf and on Your sole responsibility, not on behalf
of any other Contributor, and only if You agree to indemnify,
defend, and hold each Contributor harmless for any liability
incurred by, or claims asserted against, such Contributor by reason
of your accepting any such warranty or additional liability.
END OF TERMS AND CONDITIONS
APPENDIX: How to apply the Apache License to your work.
To apply the Apache License to your work, attach the following
boilerplate notice, with the fields enclosed by brackets "[]"
replaced with your own identifying information. (Don't include
the brackets!) The text should be enclosed in the appropriate
comment syntax for the file format. We also recommend that a
file or class name and description of purpose be included on the
same "printed page" as the copyright notice for easier
identification within third-party archives.
Copyright [yyyy] [name of copyright owner]
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
http://www.apache.org/licenses/LICENSE-2.0
Unless required by applicable law or agreed to in writing, software
distributed under the License is distributed on an "AS IS" BASIS,
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
See the License for the specific language governing permissions and
limitations under the License.
- sources: README.md
text: |-
Apache 2.0 - See [LICENSE][license-url] for more information.
[gitter-image]: https://badges.gitter.im/open-telemetry/opentelemetry-js.svg
[gitter-url]: https://gitter.im/open-telemetry/opentelemetry-node?utm_source=badge&utm_medium=badge&utm_campaign=pr-badge&utm_content=badge
[license-url]: https://github.com/open-telemetry/opentelemetry-js/blob/master/LICENSE
[license-image]: https://img.shields.io/badge/license-Apache_2.0-green.svg?style=flat
[dependencies-image]: https://david-dm.org/open-telemetry/opentelemetry-js/status.svg?path=packages/opentelemetry-context-base
[dependencies-url]: https://david-dm.org/open-telemetry/opentelemetry-js?path=packages%2Fopentelemetry-context-base
[devDependencies-image]: https://david-dm.org/open-telemetry/opentelemetry-js/dev-status.svg?path=packages/opentelemetry-context-base
[devDependencies-url]: https://david-dm.org/open-telemetry/opentelemetry-js?path=packages%2Fopentelemetry-context-base&type=dev
[ah-context-manager]: https://github.com/open-telemetry/opentelemetry-js/tree/master/packages/opentelemetry-context-async-hooks
[npm-url]: https://www.npmjs.com/package/@opentelemetry/context-base
[npm-img]: https://badge.fury.io/js/%40opentelemetry%2Fcontext-base.svg
notices: []
+227
View File
@@ -0,0 +1,227 @@
---
name: "@opentelemetry/context-base"
version: 0.6.1
type: npm
summary: OpenTelemetry Base Context Manager
homepage: https://github.com/open-telemetry/opentelemetry-js#readme
license: apache-2.0
licenses:
- sources: LICENSE
text: |2
Apache License
Version 2.0, January 2004
http://www.apache.org/licenses/
TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION
1. Definitions.
"License" shall mean the terms and conditions for use, reproduction,
and distribution as defined by Sections 1 through 9 of this document.
"Licensor" shall mean the copyright owner or entity authorized by
the copyright owner that is granting the License.
"Legal Entity" shall mean the union of the acting entity and all
other entities that control, are controlled by, or are under common
control with that entity. For the purposes of this definition,
"control" means (i) the power, direct or indirect, to cause the
direction or management of such entity, whether by contract or
otherwise, or (ii) ownership of fifty percent (50%) or more of the
outstanding shares, or (iii) beneficial ownership of such entity.
"You" (or "Your") shall mean an individual or Legal Entity
exercising permissions granted by this License.
"Source" form shall mean the preferred form for making modifications,
including but not limited to software source code, documentation
source, and configuration files.
"Object" form shall mean any form resulting from mechanical
transformation or translation of a Source form, including but
not limited to compiled object code, generated documentation,
and conversions to other media types.
"Work" shall mean the work of authorship, whether in Source or
Object form, made available under the License, as indicated by a
copyright notice that is included in or attached to the work
(an example is provided in the Appendix below).
"Derivative Works" shall mean any work, whether in Source or Object
form, that is based on (or derived from) the Work and for which the
editorial revisions, annotations, elaborations, or other modifications
represent, as a whole, an original work of authorship. For the purposes
of this License, Derivative Works shall not include works that remain
separable from, or merely link (or bind by name) to the interfaces of,
the Work and Derivative Works thereof.
"Contribution" shall mean any work of authorship, including
the original version of the Work and any modifications or additions
to that Work or Derivative Works thereof, that is intentionally
submitted to Licensor for inclusion in the Work by the copyright owner
or by an individual or Legal Entity authorized to submit on behalf of
the copyright owner. For the purposes of this definition, "submitted"
means any form of electronic, verbal, or written communication sent
to the Licensor or its representatives, including but not limited to
communication on electronic mailing lists, source code control systems,
and issue tracking systems that are managed by, or on behalf of, the
Licensor for the purpose of discussing and improving the Work, but
excluding communication that is conspicuously marked or otherwise
designated in writing by the copyright owner as "Not a Contribution."
"Contributor" shall mean Licensor and any individual or Legal Entity
on behalf of whom a Contribution has been received by Licensor and
subsequently incorporated within the Work.
2. Grant of Copyright License. Subject to the terms and conditions of
this License, each Contributor hereby grants to You a perpetual,
worldwide, non-exclusive, no-charge, royalty-free, irrevocable
copyright license to reproduce, prepare Derivative Works of,
publicly display, publicly perform, sublicense, and distribute the
Work and such Derivative Works in Source or Object form.
3. Grant of Patent License. Subject to the terms and conditions of
this License, each Contributor hereby grants to You a perpetual,
worldwide, non-exclusive, no-charge, royalty-free, irrevocable
(except as stated in this section) patent license to make, have made,
use, offer to sell, sell, import, and otherwise transfer the Work,
where such license applies only to those patent claims licensable
by such Contributor that are necessarily infringed by their
Contribution(s) alone or by combination of their Contribution(s)
with the Work to which such Contribution(s) was submitted. If You
institute patent litigation against any entity (including a
cross-claim or counterclaim in a lawsuit) alleging that the Work
or a Contribution incorporated within the Work constitutes direct
or contributory patent infringement, then any patent licenses
granted to You under this License for that Work shall terminate
as of the date such litigation is filed.
4. Redistribution. You may reproduce and distribute copies of the
Work or Derivative Works thereof in any medium, with or without
modifications, and in Source or Object form, provided that You
meet the following conditions:
(a) You must give any other recipients of the Work or
Derivative Works a copy of this License; and
(b) You must cause any modified files to carry prominent notices
stating that You changed the files; and
(c) You must retain, in the Source form of any Derivative Works
that You distribute, all copyright, patent, trademark, and
attribution notices from the Source form of the Work,
excluding those notices that do not pertain to any part of
the Derivative Works; and
(d) If the Work includes a "NOTICE" text file as part of its
distribution, then any Derivative Works that You distribute must
include a readable copy of the attribution notices contained
within such NOTICE file, excluding those notices that do not
pertain to any part of the Derivative Works, in at least one
of the following places: within a NOTICE text file distributed
as part of the Derivative Works; within the Source form or
documentation, if provided along with the Derivative Works; or,
within a display generated by the Derivative Works, if and
wherever such third-party notices normally appear. The contents
of the NOTICE file are for informational purposes only and
do not modify the License. You may add Your own attribution
notices within Derivative Works that You distribute, alongside
or as an addendum to the NOTICE text from the Work, provided
that such additional attribution notices cannot be construed
as modifying the License.
You may add Your own copyright statement to Your modifications and
may provide additional or different license terms and conditions
for use, reproduction, or distribution of Your modifications, or
for any such Derivative Works as a whole, provided Your use,
reproduction, and distribution of the Work otherwise complies with
the conditions stated in this License.
5. Submission of Contributions. Unless You explicitly state otherwise,
any Contribution intentionally submitted for inclusion in the Work
by You to the Licensor shall be under the terms and conditions of
this License, without any additional terms or conditions.
Notwithstanding the above, nothing herein shall supersede or modify
the terms of any separate license agreement you may have executed
with Licensor regarding such Contributions.
6. Trademarks. This License does not grant permission to use the trade
names, trademarks, service marks, or product names of the Licensor,
except as required for reasonable and customary use in describing the
origin of the Work and reproducing the content of the NOTICE file.
7. Disclaimer of Warranty. Unless required by applicable law or
agreed to in writing, Licensor provides the Work (and each
Contributor provides its Contributions) on an "AS IS" BASIS,
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or
implied, including, without limitation, any warranties or conditions
of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A
PARTICULAR PURPOSE. You are solely responsible for determining the
appropriateness of using or redistributing the Work and assume any
risks associated with Your exercise of permissions under this License.
8. Limitation of Liability. In no event and under no legal theory,
whether in tort (including negligence), contract, or otherwise,
unless required by applicable law (such as deliberate and grossly
negligent acts) or agreed to in writing, shall any Contributor be
liable to You for damages, including any direct, indirect, special,
incidental, or consequential damages of any character arising as a
result of this License or out of the use or inability to use the
Work (including but not limited to damages for loss of goodwill,
work stoppage, computer failure or malfunction, or any and all
other commercial damages or losses), even if such Contributor
has been advised of the possibility of such damages.
9. Accepting Warranty or Additional Liability. While redistributing
the Work or Derivative Works thereof, You may choose to offer,
and charge a fee for, acceptance of support, warranty, indemnity,
or other liability obligations and/or rights consistent with this
License. However, in accepting such obligations, You may act only
on Your own behalf and on Your sole responsibility, not on behalf
of any other Contributor, and only if You agree to indemnify,
defend, and hold each Contributor harmless for any liability
incurred by, or claims asserted against, such Contributor by reason
of your accepting any such warranty or additional liability.
END OF TERMS AND CONDITIONS
APPENDIX: How to apply the Apache License to your work.
To apply the Apache License to your work, attach the following
boilerplate notice, with the fields enclosed by brackets "[]"
replaced with your own identifying information. (Don't include
the brackets!) The text should be enclosed in the appropriate
comment syntax for the file format. We also recommend that a
file or class name and description of purpose be included on the
same "printed page" as the copyright notice for easier
identification within third-party archives.
Copyright [yyyy] [name of copyright owner]
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
http://www.apache.org/licenses/LICENSE-2.0
Unless required by applicable law or agreed to in writing, software
distributed under the License is distributed on an "AS IS" BASIS,
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
See the License for the specific language governing permissions and
limitations under the License.
- sources: README.md
text: |-
Apache 2.0 - See [LICENSE][license-url] for more information.
[gitter-image]: https://badges.gitter.im/open-telemetry/opentelemetry-js.svg
[gitter-url]: https://gitter.im/open-telemetry/opentelemetry-node?utm_source=badge&utm_medium=badge&utm_campaign=pr-badge&utm_content=badge
[license-url]: https://github.com/open-telemetry/opentelemetry-js/blob/master/LICENSE
[license-image]: https://img.shields.io/badge/license-Apache_2.0-green.svg?style=flat
[dependencies-image]: https://david-dm.org/open-telemetry/opentelemetry-js/status.svg?path=packages/opentelemetry-context-base
[dependencies-url]: https://david-dm.org/open-telemetry/opentelemetry-js?path=packages%2Fopentelemetry-context-base
[devDependencies-image]: https://david-dm.org/open-telemetry/opentelemetry-js/dev-status.svg?path=packages/opentelemetry-context-base
[devDependencies-url]: https://david-dm.org/open-telemetry/opentelemetry-js?path=packages%2Fopentelemetry-context-base&type=dev
[ah-context-manager]: https://github.com/open-telemetry/opentelemetry-js/tree/master/packages/opentelemetry-context-async-hooks
[npm-url]: https://www.npmjs.com/package/@opentelemetry/context-base
[npm-img]: https://badge.fury.io/js/%40opentelemetry%2Fcontext-base.svg
notices: []
+2 -2
View File
@@ -1,9 +1,9 @@
---
name: "@types/node-fetch"
version: 2.5.12
version: 2.5.7
type: npm
summary: TypeScript definitions for node-fetch
homepage: https://github.com/DefinitelyTyped/DefinitelyTyped/tree/master/types/node-fetch
homepage: https://github.com/DefinitelyTyped/DefinitelyTyped#readme
license: mit
licenses:
- sources: LICENSE
+2 -2
View File
@@ -1,9 +1,9 @@
---
name: "@types/node"
version: 12.20.42
version: 12.12.40
type: npm
summary: TypeScript definitions for Node.js
homepage: https://github.com/DefinitelyTyped/DefinitelyTyped/tree/master/types/node
homepage: https://github.com/DefinitelyTyped/DefinitelyTyped#readme
license: mit
licenses:
- sources: LICENSE
+18 -24
View File
@@ -1,32 +1,26 @@
---
name: "@types/tunnel"
version: 0.0.3
version: 0.0.1
type: npm
summary: TypeScript definitions for tunnel
homepage: https://github.com/DefinitelyTyped/DefinitelyTyped/tree/master/types/tunnel
homepage: https://github.com/DefinitelyTyped/DefinitelyTyped#readme
license: mit
licenses:
- sources: LICENSE
text: |2
MIT License
Copyright (c) Microsoft Corporation.
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
text: " MIT License\r\n\r\n Copyright (c) Microsoft Corporation. All rights
reserved.\r\n\r\n Permission is hereby granted, free of charge, to any person
obtaining a copy\r\n of this software and associated documentation files (the
\"Software\"), to deal\r\n in the Software without restriction, including without
limitation the rights\r\n to use, copy, modify, merge, publish, distribute,
sublicense, and/or sell\r\n copies of the Software, and to permit persons to
whom the Software is\r\n furnished to do so, subject to the following conditions:\r\n\r\n
\ The above copyright notice and this permission notice shall be included in
all\r\n copies or substantial portions of the Software.\r\n\r\n THE SOFTWARE
IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\r\n IMPLIED,
INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\r\n FITNESS
FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\r\n AUTHORS
OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\r\n LIABILITY,
WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\r\n OUT
OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE\r\n
\ SOFTWARE\r\n"
notices: []
+1 -1
View File
@@ -1,6 +1,6 @@
---
name: balanced-match
version: 1.0.2
version: 1.0.0
type: npm
summary: Match balanced character pairs, like "{" and "}"
homepage: https://github.com/juliangruber/balanced-match
+1 -2
View File
@@ -1,6 +1,6 @@
---
name: events
version: 3.3.0
version: 3.2.0
type: npm
summary: Node's event emitter for all engines.
homepage: https://github.com/Gozala/events#readme
@@ -33,6 +33,5 @@ licenses:
- sources: Readme.md
text: |-
[MIT](./LICENSE)
[node.js docs]: https://nodejs.org/dist/v11.13.0/docs/api/events.html
notices: []
@@ -1,6 +1,6 @@
---
name: form-data
version: 3.0.1
version: 3.0.0
type: npm
summary: A library to create readable "multipart/form-data" streams. Can be used to
submit forms and file uploads to other web applications.
@@ -28,6 +28,6 @@ licenses:
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.
- sources: Readme.md
- sources: README.md
text: Form-Data is released under the [MIT](License) license.
notices: []
-33
View File
@@ -1,33 +0,0 @@
---
name: form-data
version: 4.0.0
type: npm
summary: A library to create readable "multipart/form-data" streams. Can be used to
submit forms and file uploads to other web applications.
homepage: https://github.com/form-data/form-data#readme
license: mit
licenses:
- sources: License
text: |
Copyright (c) 2012 Felix Geisendörfer (felix@debuggable.com) 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.
- sources: Readme.md
text: Form-Data is released under the [MIT](License) license.
notices: []
+1 -1
View File
@@ -1,6 +1,6 @@
---
name: mime-db
version: 1.51.0
version: 1.44.0
type: npm
summary: Media Type Database
homepage: https://github.com/jshttp/mime-db#readme
+3 -3
View File
@@ -1,6 +1,6 @@
---
name: mime-types
version: 2.1.34
version: 2.1.27
type: npm
summary: The ultimate javascript content-type utility.
homepage: https://github.com/jshttp/mime-types#readme
@@ -35,8 +35,6 @@ licenses:
text: |-
[MIT](LICENSE)
[ci-image]: https://badgen.net/github/checks/jshttp/mime-types/master?label=ci
[ci-url]: https://github.com/jshttp/mime-types/actions?query=workflow%3Aci
[coveralls-image]: https://badgen.net/coveralls/c/github/jshttp/mime-types/master
[coveralls-url]: https://coveralls.io/r/jshttp/mime-types?branch=master
[node-version-image]: https://badgen.net/npm/node/mime-types
@@ -44,4 +42,6 @@ licenses:
[npm-downloads-image]: https://badgen.net/npm/dm/mime-types
[npm-url]: https://npmjs.org/package/mime-types
[npm-version-image]: https://badgen.net/npm/v/mime-types
[travis-image]: https://badgen.net/travis/jshttp/mime-types/master
[travis-url]: https://travis-ci.org/jshttp/mime-types
notices: []
+1 -1
View File
@@ -1,6 +1,6 @@
---
name: node-fetch
version: 2.6.7
version: 2.6.1
type: npm
summary: A light-weight module that brings window.fetch to node.js
homepage: https://github.com/bitinn/node-fetch
+31
View File
@@ -0,0 +1,31 @@
---
name: tslib
version: 1.13.0
type: npm
summary: Runtime library for TypeScript helper functions
homepage: https://www.typescriptlang.org/
license: 0bsd
licenses:
- sources: LICENSE.txt
text: "Copyright (c) Microsoft Corporation.\r\n\r\nPermission to use, copy, modify,
and/or distribute this software for any\r\npurpose with or without fee is hereby
granted.\r\n\r\nTHE SOFTWARE IS PROVIDED \"AS IS\" AND THE AUTHOR DISCLAIMS ALL
WARRANTIES WITH\r\nREGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF
MERCHANTABILITY\r\nAND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY
SPECIAL, DIRECT,\r\nINDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER
RESULTING FROM\r\nLOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT,
NEGLIGENCE OR\r\nOTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE
USE OR\r\nPERFORMANCE OF THIS SOFTWARE."
notices:
- sources: CopyrightNotice.txt
text: "/*! *****************************************************************************\r\nCopyright
(c) Microsoft Corporation.\r\n\r\nPermission to use, copy, modify, and/or distribute
this software for any\r\npurpose with or without fee is hereby granted.\r\n\r\nTHE
SOFTWARE IS PROVIDED \"AS IS\" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH\r\nREGARD
TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY\r\nAND FITNESS.
IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT,\r\nINDIRECT, OR
CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM\r\nLOSS OF USE,
DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR\r\nOTHER TORTIOUS
ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR\r\nPERFORMANCE OF THIS
SOFTWARE.\r\n*****************************************************************************
*/"
+9 -13
View File
@@ -7,19 +7,15 @@ homepage: https://www.typescriptlang.org/
license: 0bsd
licenses:
- sources: LICENSE.txt
text: |-
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.
text: "Copyright (c) Microsoft Corporation.\r\n\r\nPermission to use, copy, modify,
and/or distribute this software for any\r\npurpose with or without fee is hereby
granted.\r\n\r\nTHE SOFTWARE IS PROVIDED \"AS IS\" AND THE AUTHOR DISCLAIMS ALL
WARRANTIES WITH\r\nREGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF
MERCHANTABILITY\r\nAND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY
SPECIAL, DIRECT,\r\nINDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER
RESULTING FROM\r\nLOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT,
NEGLIGENCE OR\r\nOTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE
USE OR\r\nPERFORMANCE OF THIS SOFTWARE."
notices:
- sources: CopyrightNotice.txt
text: "/*! *****************************************************************************\r\nCopyright
@@ -1,25 +1,21 @@
---
name: tslib
version: 2.3.1
version: 2.0.3
type: npm
summary: Runtime library for TypeScript helper functions
homepage: https://www.typescriptlang.org/
license: 0bsd
licenses:
- sources: LICENSE.txt
text: |-
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.
text: "Copyright (c) Microsoft Corporation.\r\n\r\nPermission to use, copy, modify,
and/or distribute this software for any\r\npurpose with or without fee is hereby
granted.\r\n\r\nTHE SOFTWARE IS PROVIDED \"AS IS\" AND THE AUTHOR DISCLAIMS ALL
WARRANTIES WITH\r\nREGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF
MERCHANTABILITY\r\nAND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY
SPECIAL, DIRECT,\r\nINDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER
RESULTING FROM\r\nLOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT,
NEGLIGENCE OR\r\nOTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE
USE OR\r\nPERFORMANCE OF THIS SOFTWARE."
notices:
- sources: CopyrightNotice.txt
text: "/*! *****************************************************************************\r\nCopyright
@@ -1,6 +1,6 @@
---
name: uuid
version: 8.3.2
version: 8.3.1
type: npm
summary: RFC4122 (v1, v4, and v5) UUIDs
homepage: https://github.com/uuidjs/uuid#readme
-23
View File
@@ -1,23 +0,0 @@
---
name: webidl-conversions
version: 3.0.1
type: npm
summary: Implements the WebIDL algorithms for converting to and from JavaScript values
homepage: https://github.com/jsdom/webidl-conversions#readme
license: bsd-2-clause
licenses:
- sources: LICENSE.md
text: |
# The BSD 2-Clause License
Copyright (c) 2014, Domenic Denicola
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.
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.
notices: []
-32
View File
@@ -1,32 +0,0 @@
---
name: whatwg-url
version: 5.0.0
type: npm
summary: An implementation of the WHATWG URL Standard's URL API and parsing machinery
homepage: https://github.com/jsdom/whatwg-url#readme
license: mit
licenses:
- sources: LICENSE.txt
text: |
The MIT License (MIT)
Copyright (c) 20152016 Sebastian Mayr
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.
notices: []
+2 -10
View File
@@ -19,6 +19,7 @@ See ["Caching dependencies to speed up workflows"](https://help.github.com/githu
path: |
~/cache
!~/cache/exclude
**/node_modules
key: ${{ runner.os }}-${{ hashFiles('**/lockfiles') }}
```
@@ -34,8 +35,6 @@ Refer [here](https://github.com/actions/cache/blob/v1/README.md) for previous ve
### Pre-requisites
Create a workflow `.yml` file in your repositories `.github/workflows` directory. An [example workflow](#example-workflow) is available below. For more information, reference the GitHub Help Documentation for [Creating a workflow file](https://help.github.com/en/articles/configuring-a-workflow#creating-a-workflow-file).
If you are using this inside a container, a POSIX-compliant `tar` needs to be included and accessible in the execution path.
### Inputs
* `path` - A list of files, directories, and wildcard patterns to cache and restore. See [`@actions/glob`](https://github.com/actions/toolkit/tree/main/packages/glob) for supported patterns.
@@ -101,7 +100,6 @@ See [Examples](examples.md) for a list of `actions/cache` implementations for us
- [OCaml/Reason - esy](./examples.md#ocamlreason---esy)
- [PHP - Composer](./examples.md#php---composer)
- [Python - pip](./examples.md#python---pip)
- [Python - pipenv](./examples.md#python---pipenv)
- [R - renv](./examples.md#r---renv)
- [Ruby - Bundler](./examples.md#ruby---bundler)
- [Rust - Cargo](./examples.md#rust---cargo)
@@ -145,7 +143,7 @@ See [Using contexts to create cache keys](https://help.github.com/en/actions/con
## Cache Limits
A repository can have up to 10GB of caches. Once the 10GB limit is reached, older caches will be evicted based on when the cache was last accessed. Caches that are not accessed within the last week will also be evicted.
A repository can have up to 5GB of caches. Once the 5GB limit is reached, older caches will be evicted based on when the cache was last accessed. Caches that are not accessed within the last week will also be evicted.
## Skipping steps based on cache-hit
@@ -169,12 +167,6 @@ steps:
> Note: The `id` defined in `actions/cache` must match the `id` in the `if` statement (i.e. `steps.[ID].outputs.cache-hit`)
## Known limitation
- `action/cache` is currently not supported on GitHub Enterprise Server. <https://github.com/github/roadmap/issues/273> is tracking this.
Since GitHub Enterprise Server uses self-hosted runners, dependencies are typically cached on the runner by whatever dependency management tool is being used (npm, maven, etc.). This eliminates the need for explicit caching in some scenarios.
## Contributing
We would love for you to contribute to `actions/cache`, pull requests are welcome! Please see the [CONTRIBUTING.md](CONTRIBUTING.md) for more information.
+34 -1
View File
@@ -26,7 +26,7 @@ test("isGhes returns true if server url is not github.com", () => {
}
});
test("isGhes returns false when server url is github.com", () => {
test("isGhes returns true when server url is github.com", () => {
try {
process.env["GITHUB_SERVER_URL"] = "http://github.com";
expect(actionUtils.isGhes()).toBe(false);
@@ -213,6 +213,39 @@ test("getInputAsArray handles empty lines correctly", () => {
expect(actionUtils.getInputAsArray("foo")).toEqual(["bar", "baz"]);
});
test("getInputAsArray sorts files correctly", () => {
testUtils.setInput(
"foo",
"bar\n!baz\nwaldo\nqux\nquux\ncorge\ngrault\ngarply"
);
expect(actionUtils.getInputAsArray("foo")).toEqual([
"!baz",
"bar",
"corge",
"garply",
"grault",
"quux",
"qux",
"waldo"
]);
});
test("getInputAsArray removes spaces after ! at the beginning", () => {
testUtils.setInput(
"foo",
"! bar\n! baz\n! qux\n!quux\ncorge\ngrault! garply\n!\r\t waldo"
);
expect(actionUtils.getInputAsArray("foo")).toEqual([
"!bar",
"!baz",
"!quux",
"!qux",
"!waldo",
"corge",
"grault! garply"
]);
});
test("getInputAsInt returns undefined if input not set", () => {
expect(actionUtils.getInputAsInt("undefined")).toBeUndefined();
});
+2 -2
View File
@@ -68,7 +68,7 @@ test("restore on GHES should no-op", async () => {
expect(setCacheHitOutputMock).toHaveBeenCalledTimes(1);
expect(setCacheHitOutputMock).toHaveBeenCalledWith(false);
expect(logWarningMock).toHaveBeenCalledWith(
"Cache action is not supported on GHES. See https://github.com/actions/cache/issues/505 for more details"
"Cache action is not supported on GHES"
);
});
@@ -97,7 +97,7 @@ test("restore with no key", async () => {
test("restore with too many keys should fail", async () => {
const path = "node_modules";
const key = "node-test";
const restoreKeys = [...Array(20).keys()].map(x => x.toString());
const restoreKeys = [...Array(20).keys()].map(x => x.toString()).sort();
testUtils.setInputs({
path: path,
key,
+1 -1
View File
@@ -111,7 +111,7 @@ test("save on GHES should no-op", async () => {
expect(saveCacheMock).toHaveBeenCalledTimes(0);
expect(logWarningMock).toHaveBeenCalledWith(
"Cache action is not supported on GHES. See https://github.com/actions/cache/issues/505 for more details"
"Cache action is not supported on GHES"
);
});
+1235 -1533
View File
@@ -3419,15 +3419,14 @@ var DiagAPI = /** @class */ (function () {
function DiagAPI() {
function _logProxy(funcName) {
return function () {
var args = [];
for (var _i = 0; _i < arguments.length; _i++) {
args[_i] = arguments[_i];
}
var logger = global_utils_1.getGlobal('diag');
// shortcut if logger not set
if (!logger)
return;
return logger[funcName].apply(logger, args);
return logger[funcName].apply(logger,
// work around Function.prototype.apply types
// eslint-disable-next-line @typescript-eslint/no-explicit-any
arguments);
};
}
// Using self local variable for minification purposes as 'this' cannot be minified
@@ -5112,22 +5111,17 @@ var DiagConsoleLogger = /** @class */ (function () {
function DiagConsoleLogger() {
function _consoleFunc(funcName) {
return function () {
var args = [];
for (var _i = 0; _i < arguments.length; _i++) {
args[_i] = arguments[_i];
}
var orgArguments = arguments;
if (console) {
// Some environments only expose the console when the F12 developer console is open
// eslint-disable-next-line no-console
var theFunc = console[funcName];
if (typeof theFunc !== 'function') {
// Not all environments support all functions
// eslint-disable-next-line no-console
theFunc = console.log;
}
// One last final check
if (typeof theFunc === 'function') {
return theFunc.apply(console, args);
return theFunc.apply(console, orgArguments);
}
}
};
@@ -8953,7 +8947,7 @@ function expand(str, isTop) {
XMLDocumentCB = __webpack_require__(768);
XMLStringWriter = __webpack_require__(750);
XMLStringWriter = __webpack_require__(347);
XMLStreamWriter = __webpack_require__(458);
@@ -9401,7 +9395,47 @@ var SamplingDecision;
/* 344 */,
/* 345 */,
/* 346 */,
/* 347 */,
/* 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) {
@@ -36347,8 +36381,9 @@ function getInputAsArray(name, options) {
return core
.getInput(name, options)
.split("\n")
.map(s => s.trim())
.filter(x => x !== "");
.map(s => s.replace(/^!\s+/, "!").trim())
.filter(x => x !== "")
.sort();
}
exports.getInputAsArray = getInputAsArray;
function getInputAsInt(name, options) {
@@ -37869,17 +37904,9 @@ AbortError.prototype = Object.create(Error.prototype);
AbortError.prototype.constructor = AbortError;
AbortError.prototype.name = 'AbortError';
const URL$1 = Url.URL || whatwgUrl.URL;
// fix an issue where "PassThrough", "resolve" aren't a named export for node <10
const PassThrough$1 = Stream.PassThrough;
const isDomainOrSubdomain = function isDomainOrSubdomain(destination, original) {
const orig = new URL$1(original).hostname;
const dest = new URL$1(destination).hostname;
return orig === dest || orig[orig.length - dest.length - 1] === '.' && orig.endsWith(dest);
};
const resolve_url = Url.resolve;
/**
* Fetch function
@@ -37967,19 +37994,7 @@ function fetch(url, opts) {
const location = headers.get('Location');
// HTTP fetch step 5.3
let locationURL = null;
try {
locationURL = location === null ? null : new URL$1(location, request.url).toString();
} catch (err) {
// error here can only be invalid URL in Location: header
// do not throw when options.redirect == manual
// let the user extract the errorneous redirect URL
if (request.redirect !== 'manual') {
reject(new FetchError(`uri requested responds with an invalid redirect URL: ${location}`, 'invalid-redirect'));
finalize();
return;
}
}
const locationURL = location === null ? null : resolve_url(request.url, location);
// HTTP fetch step 5.5
switch (request.redirect) {
@@ -38027,12 +38042,6 @@ function fetch(url, opts) {
size: request.size
};
if (!isDomainOrSubdomain(request.url, locationURL)) {
for (const name of ['authorization', 'www-authenticate', 'cookie', 'cookie2']) {
requestOpts.headers.delete(name);
}
}
// 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'));
@@ -39174,7 +39183,7 @@ function getPagedAsyncIterator(pagedResult) {
},
byPage: (_a = pagedResult === null || pagedResult === void 0 ? void 0 : pagedResult.byPage) !== null && _a !== void 0 ? _a : ((settings) => {
return getPageAsyncIterator(pagedResult, settings === null || settings === void 0 ? void 0 : settings.maxPageSize);
}),
})
};
}
function getItemAsyncIterator(pagedResult, maxPageSize) {
@@ -40394,7 +40403,7 @@ CombinedStream.prototype._emitError = function(err) {
XMLStringifier = __webpack_require__(602);
XMLStringWriter = __webpack_require__(750);
XMLStringWriter = __webpack_require__(347);
module.exports = XMLDocument = (function(superClass) {
extend(XMLDocument, superClass);
@@ -40686,7 +40695,7 @@ exports.baggageEntryMetadataSymbol = Symbol('BaggageEntryMetadata');
* POSSIBILITY OF SUCH DAMAGE.
*/
const psl = __webpack_require__(632);
const psl = __webpack_require__(750);
function getPublicSuffix(domain) {
return psl.get(domain);
@@ -41939,282 +41948,7 @@ exports.wrapSpanContext = wrapSpanContext;
module.exports = require("net");
/***/ }),
/* 632 */
/***/ (function(__unusedmodule, exports, __webpack_require__) {
"use strict";
/*eslint no-var:0, prefer-arrow-callback: 0, object-shorthand: 0 */
var Punycode = __webpack_require__(815);
var internals = {};
//
// Read rules from file.
//
internals.rules = __webpack_require__(50).map(function (rule) {
return {
rule: rule,
suffix: rule.replace(/^(\*\.|\!)/, ''),
punySuffix: -1,
wildcard: rule.charAt(0) === '*',
exception: rule.charAt(0) === '!'
};
});
//
// Check is given string ends with `suffix`.
//
internals.endsWith = function (str, suffix) {
return str.indexOf(suffix, str.length - suffix.length) !== -1;
};
//
// Find rule for a given domain.
//
internals.findRule = function (domain) {
var punyDomain = Punycode.toASCII(domain);
return internals.rules.reduce(function (memo, rule) {
if (rule.punySuffix === -1){
rule.punySuffix = Punycode.toASCII(rule.suffix);
}
if (!internals.endsWith(punyDomain, '.' + rule.punySuffix) && punyDomain !== rule.punySuffix) {
return memo;
}
// This has been commented out as it never seems to run. This is because
// sub tlds always appear after their parents and we never find a shorter
// match.
//if (memo) {
// var memoSuffix = Punycode.toASCII(memo.suffix);
// if (memoSuffix.length >= punySuffix.length) {
// return memo;
// }
//}
return rule;
}, null);
};
//
// Error codes and messages.
//
exports.errorCodes = {
DOMAIN_TOO_SHORT: 'Domain name too short.',
DOMAIN_TOO_LONG: 'Domain name too long. It should be no more than 255 chars.',
LABEL_STARTS_WITH_DASH: 'Domain name label can not start with a dash.',
LABEL_ENDS_WITH_DASH: 'Domain name label can not end with a dash.',
LABEL_TOO_LONG: 'Domain name label should be at most 63 chars long.',
LABEL_TOO_SHORT: 'Domain name label should be at least 1 character long.',
LABEL_INVALID_CHARS: 'Domain name label can only contain alphanumeric characters or dashes.'
};
//
// Validate domain name and throw if not valid.
//
// From wikipedia:
//
// Hostnames are composed of series of labels concatenated with dots, as are all
// domain names. Each label must be between 1 and 63 characters long, and the
// entire hostname (including the delimiting dots) has a maximum of 255 chars.
//
// Allowed chars:
//
// * `a-z`
// * `0-9`
// * `-` but not as a starting or ending character
// * `.` as a separator for the textual portions of a domain name
//
// * http://en.wikipedia.org/wiki/Domain_name
// * http://en.wikipedia.org/wiki/Hostname
//
internals.validate = function (input) {
// Before we can validate we need to take care of IDNs with unicode chars.
var ascii = Punycode.toASCII(input);
if (ascii.length < 1) {
return 'DOMAIN_TOO_SHORT';
}
if (ascii.length > 255) {
return 'DOMAIN_TOO_LONG';
}
// Check each part's length and allowed chars.
var labels = ascii.split('.');
var label;
for (var i = 0; i < labels.length; ++i) {
label = labels[i];
if (!label.length) {
return 'LABEL_TOO_SHORT';
}
if (label.length > 63) {
return 'LABEL_TOO_LONG';
}
if (label.charAt(0) === '-') {
return 'LABEL_STARTS_WITH_DASH';
}
if (label.charAt(label.length - 1) === '-') {
return 'LABEL_ENDS_WITH_DASH';
}
if (!/^[a-z0-9\-]+$/.test(label)) {
return 'LABEL_INVALID_CHARS';
}
}
};
//
// Public API
//
//
// Parse domain.
//
exports.parse = function (input) {
if (typeof input !== 'string') {
throw new TypeError('Domain name must be a string.');
}
// Force domain to lowercase.
var domain = input.slice(0).toLowerCase();
// Handle FQDN.
// TODO: Simply remove trailing dot?
if (domain.charAt(domain.length - 1) === '.') {
domain = domain.slice(0, domain.length - 1);
}
// Validate and sanitise input.
var error = internals.validate(domain);
if (error) {
return {
input: input,
error: {
message: exports.errorCodes[error],
code: error
}
};
}
var parsed = {
input: input,
tld: null,
sld: null,
domain: null,
subdomain: null,
listed: false
};
var domainParts = domain.split('.');
// Non-Internet TLD
if (domainParts[domainParts.length - 1] === 'local') {
return parsed;
}
var handlePunycode = function () {
if (!/xn--/.test(domain)) {
return parsed;
}
if (parsed.domain) {
parsed.domain = Punycode.toASCII(parsed.domain);
}
if (parsed.subdomain) {
parsed.subdomain = Punycode.toASCII(parsed.subdomain);
}
return parsed;
};
var rule = internals.findRule(domain);
// Unlisted tld.
if (!rule) {
if (domainParts.length < 2) {
return parsed;
}
parsed.tld = domainParts.pop();
parsed.sld = domainParts.pop();
parsed.domain = [parsed.sld, parsed.tld].join('.');
if (domainParts.length) {
parsed.subdomain = domainParts.pop();
}
return handlePunycode();
}
// At this point we know the public suffix is listed.
parsed.listed = true;
var tldParts = rule.suffix.split('.');
var privateParts = domainParts.slice(0, domainParts.length - tldParts.length);
if (rule.exception) {
privateParts.push(tldParts.shift());
}
parsed.tld = tldParts.join('.');
if (!privateParts.length) {
return handlePunycode();
}
if (rule.wildcard) {
tldParts.unshift(privateParts.pop());
parsed.tld = tldParts.join('.');
}
if (!privateParts.length) {
return handlePunycode();
}
parsed.sld = privateParts.pop();
parsed.domain = [parsed.sld, parsed.tld].join('.');
if (privateParts.length) {
parsed.subdomain = privateParts.join('.');
}
return handlePunycode();
};
//
// Get domain.
//
exports.get = function (domain) {
if (!domain) {
return null;
}
return exports.parse(domain).domain || null;
};
//
// Check whether domain belongs to a known public suffix.
//
exports.isValid = function (domain) {
var parsed = exports.parse(domain);
return Boolean(parsed.domain && parsed.listed);
};
/***/ }),
/* 632 */,
/* 633 */,
/* 634 */,
/* 635 */,
@@ -46017,43 +45751,278 @@ module.exports = require("fs");
/* 748 */,
/* 749 */,
/* 750 */
/***/ (function(module, __unusedexports, __webpack_require__) {
/***/ (function(__unusedmodule, exports, __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;
"use strict";
/*eslint no-var:0, prefer-arrow-callback: 0, object-shorthand: 0 */
XMLWriterBase = __webpack_require__(423);
module.exports = XMLStringWriter = (function(superClass) {
extend(XMLStringWriter, superClass);
function XMLStringWriter(options) {
XMLStringWriter.__super__.constructor.call(this, options);
var Punycode = __webpack_require__(815);
var internals = {};
//
// Read rules from file.
//
internals.rules = __webpack_require__(50).map(function (rule) {
return {
rule: rule,
suffix: rule.replace(/^(\*\.|\!)/, ''),
punySuffix: -1,
wildcard: rule.charAt(0) === '*',
exception: rule.charAt(0) === '!'
};
});
//
// Check is given string ends with `suffix`.
//
internals.endsWith = function (str, suffix) {
return str.indexOf(suffix, str.length - suffix.length) !== -1;
};
//
// Find rule for a given domain.
//
internals.findRule = function (domain) {
var punyDomain = Punycode.toASCII(domain);
return internals.rules.reduce(function (memo, rule) {
if (rule.punySuffix === -1){
rule.punySuffix = Punycode.toASCII(rule.suffix);
}
if (!internals.endsWith(punyDomain, '.' + rule.punySuffix) && punyDomain !== rule.punySuffix) {
return memo;
}
// This has been commented out as it never seems to run. This is because
// sub tlds always appear after their parents and we never find a shorter
// match.
//if (memo) {
// var memoSuffix = Punycode.toASCII(memo.suffix);
// if (memoSuffix.length >= punySuffix.length) {
// return memo;
// }
//}
return rule;
}, null);
};
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);
//
// Error codes and messages.
//
exports.errorCodes = {
DOMAIN_TOO_SHORT: 'Domain name too short.',
DOMAIN_TOO_LONG: 'Domain name too long. It should be no more than 255 chars.',
LABEL_STARTS_WITH_DASH: 'Domain name label can not start with a dash.',
LABEL_ENDS_WITH_DASH: 'Domain name label can not end with a dash.',
LABEL_TOO_LONG: 'Domain name label should be at most 63 chars long.',
LABEL_TOO_SHORT: 'Domain name label should be at least 1 character long.',
LABEL_INVALID_CHARS: 'Domain name label can only contain alphanumeric characters or dashes.'
};
//
// Validate domain name and throw if not valid.
//
// From wikipedia:
//
// Hostnames are composed of series of labels concatenated with dots, as are all
// domain names. Each label must be between 1 and 63 characters long, and the
// entire hostname (including the delimiting dots) has a maximum of 255 chars.
//
// Allowed chars:
//
// * `a-z`
// * `0-9`
// * `-` but not as a starting or ending character
// * `.` as a separator for the textual portions of a domain name
//
// * http://en.wikipedia.org/wiki/Domain_name
// * http://en.wikipedia.org/wiki/Hostname
//
internals.validate = function (input) {
// Before we can validate we need to take care of IDNs with unicode chars.
var ascii = Punycode.toASCII(input);
if (ascii.length < 1) {
return 'DOMAIN_TOO_SHORT';
}
if (ascii.length > 255) {
return 'DOMAIN_TOO_LONG';
}
// Check each part's length and allowed chars.
var labels = ascii.split('.');
var label;
for (var i = 0; i < labels.length; ++i) {
label = labels[i];
if (!label.length) {
return 'LABEL_TOO_SHORT';
}
if (label.length > 63) {
return 'LABEL_TOO_LONG';
}
if (label.charAt(0) === '-') {
return 'LABEL_STARTS_WITH_DASH';
}
if (label.charAt(label.length - 1) === '-') {
return 'LABEL_ENDS_WITH_DASH';
}
if (!/^[a-z0-9\-]+$/.test(label)) {
return 'LABEL_INVALID_CHARS';
}
}
};
//
// Public API
//
//
// Parse domain.
//
exports.parse = function (input) {
if (typeof input !== 'string') {
throw new TypeError('Domain name must be a string.');
}
// Force domain to lowercase.
var domain = input.slice(0).toLowerCase();
// Handle FQDN.
// TODO: Simply remove trailing dot?
if (domain.charAt(domain.length - 1) === '.') {
domain = domain.slice(0, domain.length - 1);
}
// Validate and sanitise input.
var error = internals.validate(domain);
if (error) {
return {
input: input,
error: {
message: exports.errorCodes[error],
code: error
}
if (options.pretty && r.slice(-options.newline.length) === options.newline) {
r = r.slice(0, -options.newline.length);
}
return r;
};
}
return XMLStringWriter;
var parsed = {
input: input,
tld: null,
sld: null,
domain: null,
subdomain: null,
listed: false
};
})(XMLWriterBase);
var domainParts = domain.split('.');
}).call(this);
// Non-Internet TLD
if (domainParts[domainParts.length - 1] === 'local') {
return parsed;
}
var handlePunycode = function () {
if (!/xn--/.test(domain)) {
return parsed;
}
if (parsed.domain) {
parsed.domain = Punycode.toASCII(parsed.domain);
}
if (parsed.subdomain) {
parsed.subdomain = Punycode.toASCII(parsed.subdomain);
}
return parsed;
};
var rule = internals.findRule(domain);
// Unlisted tld.
if (!rule) {
if (domainParts.length < 2) {
return parsed;
}
parsed.tld = domainParts.pop();
parsed.sld = domainParts.pop();
parsed.domain = [parsed.sld, parsed.tld].join('.');
if (domainParts.length) {
parsed.subdomain = domainParts.pop();
}
return handlePunycode();
}
// At this point we know the public suffix is listed.
parsed.listed = true;
var tldParts = rule.suffix.split('.');
var privateParts = domainParts.slice(0, domainParts.length - tldParts.length);
if (rule.exception) {
privateParts.push(tldParts.shift());
}
parsed.tld = tldParts.join('.');
if (!privateParts.length) {
return handlePunycode();
}
if (rule.wildcard) {
tldParts.unshift(privateParts.pop());
parsed.tld = tldParts.join('.');
}
if (!privateParts.length) {
return handlePunycode();
}
parsed.sld = privateParts.pop();
parsed.domain = [parsed.sld, parsed.tld].join('.');
if (privateParts.length) {
parsed.subdomain = privateParts.join('.');
}
return handlePunycode();
};
//
// Get domain.
//
exports.get = function (domain) {
if (!domain) {
return null;
}
return exports.parse(domain).domain || null;
};
//
// Check whether domain belongs to a known public suffix.
//
exports.isValid = function (domain) {
var parsed = exports.parse(domain);
return Boolean(parsed.domain && parsed.listed);
};
/***/ }),
@@ -46209,7 +46178,7 @@ module.exports = function(dst, src) {
XMLStringifier = __webpack_require__(602);
XMLStringWriter = __webpack_require__(750);
XMLStringWriter = __webpack_require__(347);
WriterState = __webpack_require__(541);
@@ -46752,7 +46721,7 @@ function run() {
return __awaiter(this, void 0, void 0, function* () {
try {
if (utils.isGhes()) {
utils.logWarning("Cache action is not supported on GHES. See https://github.com/actions/cache/issues/505 for more details");
utils.logWarning("Cache action is not supported on GHES");
utils.setCacheHitOutput(false);
return;
}
@@ -48285,7 +48254,7 @@ module.exports = v4;
Object.defineProperty(exports, "__esModule", { value: true });
exports.VERSION = void 0;
// this is autogenerated file, see scripts/version-update.js
exports.VERSION = '1.0.4';
exports.VERSION = '1.0.3';
//# sourceMappingURL=version.js.map
/***/ }),
@@ -49603,7 +49572,7 @@ class Poller {
if (!this.isDone()) {
this.operation = await this.operation.update({
abortSignal: options.abortSignal,
fireProgress: this.fireProgress.bind(this),
fireProgress: this.fireProgress.bind(this)
});
if (this.isDone() && this.resolve) {
// If the poller has finished polling, this means we now have a result.
@@ -49802,6 +49771,13 @@ class Poller {
}
}
// Copyright (c) Microsoft Corporation.
/**
* The `@azure/logger` configuration for this package.
* @internal
*/
const logger = logger$1.createClientLogger("core-lro");
// Copyright (c) Microsoft Corporation.
// Licensed under the MIT license.
/**
@@ -49829,20 +49805,20 @@ function inferLroMode(requestPath, requestMethod, rawResponse) {
mode: "AzureAsync",
resourceLocation: requestMethod === "PUT"
? requestPath
: requestMethod === "POST" || requestMethod === "PATCH"
: requestMethod === "POST"
? getLocation(rawResponse)
: undefined,
: undefined
};
}
else if (getLocation(rawResponse) !== undefined ||
getOperationLocation(rawResponse) !== undefined) {
return {
mode: "Location",
mode: "Location"
};
}
else if (["PUT", "PATCH"].includes(requestMethod)) {
return {
mode: "Body",
mode: "Body"
};
}
return {};
@@ -49875,35 +49851,6 @@ function isUnexpectedPollingResponse(rawResponse) {
const successStates = ["succeeded"];
const failureStates = ["failed", "canceled", "cancelled"];
// Copyright (c) Microsoft Corporation.
function getProvisioningState(rawResponse) {
var _a, _b;
const { properties, provisioningState } = (_a = rawResponse.body) !== null && _a !== void 0 ? _a : {};
const state = (_b = properties === null || properties === void 0 ? void 0 : properties.provisioningState) !== null && _b !== void 0 ? _b : provisioningState;
return typeof state === "string" ? state.toLowerCase() : "succeeded";
}
function isBodyPollingDone(rawResponse) {
const state = getProvisioningState(rawResponse);
if (isUnexpectedPollingResponse(rawResponse) || failureStates.includes(state)) {
throw new Error(`The long running operation has failed. The provisioning state: ${state}.`);
}
return successStates.includes(state);
}
/**
* Creates a polling strategy based on BodyPolling which uses the provisioning state
* from the result to determine the current operation state
*/
function processBodyPollingOperationResult(response) {
return Object.assign(Object.assign({}, response), { done: isBodyPollingDone(response.rawResponse) });
}
// Copyright (c) Microsoft Corporation.
/**
* The `@azure/logger` configuration for this package.
* @internal
*/
const logger = logger$1.createClientLogger("core-lro");
// Copyright (c) Microsoft Corporation.
function getResponseStatus(rawResponse) {
var _a;
@@ -49948,6 +49895,28 @@ function processAzureAsyncOperationResult(lro, resourceLocation, lroResourceLoca
};
}
// Copyright (c) Microsoft Corporation.
function getProvisioningState(rawResponse) {
var _a, _b;
const { properties, provisioningState } = (_a = rawResponse.body) !== null && _a !== void 0 ? _a : {};
const state = (_b = properties === null || properties === void 0 ? void 0 : properties.provisioningState) !== null && _b !== void 0 ? _b : provisioningState;
return typeof state === "string" ? state.toLowerCase() : "succeeded";
}
function isBodyPollingDone(rawResponse) {
const state = getProvisioningState(rawResponse);
if (isUnexpectedPollingResponse(rawResponse) || failureStates.includes(state)) {
throw new Error(`The long running operation has failed. The provisioning state: ${state}.`);
}
return successStates.includes(state);
}
/**
* Creates a polling strategy based on BodyPolling which uses the provisioning state
* from the result to determine the current operation state
*/
function processBodyPollingOperationResult(response) {
return Object.assign(Object.assign({}, response), { done: isBodyPollingDone(response.rawResponse) });
}
// Copyright (c) Microsoft Corporation.
function isLocationPollingDone(rawResponse) {
return !isUnexpectedPollingResponse(rawResponse) && rawResponse.statusCode !== 202;
@@ -49990,11 +49959,10 @@ function createPoll(lroPrimitives) {
const response = await lroPrimitives.sendPollRequest(path);
const retryAfter = response.rawResponse.headers["retry-after"];
if (retryAfter !== undefined) {
// Retry-After header value is either in HTTP date format, or in seconds
const retryAfterInSeconds = parseInt(retryAfter);
pollerConfig.intervalInMs = isNaN(retryAfterInSeconds)
const retryAfterInMs = parseInt(retryAfter);
pollerConfig.intervalInMs = isNaN(retryAfterInMs)
? calculatePollingIntervalFromDate(new Date(retryAfter), pollerConfig.intervalInMs)
: retryAfterInSeconds * 1000;
: retryAfterInMs;
}
return getLroStatusFromResponse(response);
};
@@ -50117,7 +50085,7 @@ class GenericPollOperation {
*/
toString() {
return JSON.stringify({
state: this.state,
state: this.state
});
}
}
@@ -53411,54 +53379,27 @@ exports.isCompatible = _makeCompatibilityCheck(version_1.VERSION);
Object.defineProperty(exports, '__esModule', { value: true });
function _interopDefault (ex) { return (ex && (typeof ex === 'object') && 'default' in ex) ? ex['default'] : ex; }
var uuid = __webpack_require__(585);
var util = __webpack_require__(669);
var tslib = __webpack_require__(865);
var xml2js = __webpack_require__(992);
var abortController = __webpack_require__(106);
var logger$1 = __webpack_require__(928);
var coreAuth = __webpack_require__(229);
var os = __webpack_require__(87);
var tough = __webpack_require__(393);
var http = __webpack_require__(605);
var https = __webpack_require__(211);
var tough = __webpack_require__(393);
var tunnel = __webpack_require__(413);
var stream = __webpack_require__(794);
var FormData = __webpack_require__(790);
var node_fetch = __webpack_require__(454);
var coreTracing = __webpack_require__(263);
var node_fetch = _interopDefault(__webpack_require__(454));
var abortController = __webpack_require__(106);
var FormData = _interopDefault(__webpack_require__(790));
var util = __webpack_require__(669);
var url = __webpack_require__(835);
var stream = __webpack_require__(794);
var logger$1 = __webpack_require__(928);
var tunnel = __webpack_require__(413);
var tslib = __webpack_require__(865);
var coreAuth = __webpack_require__(229);
var xml2js = __webpack_require__(992);
var os = __webpack_require__(87);
var coreTracing = __webpack_require__(263);
__webpack_require__(71);
function _interopDefaultLegacy (e) { return e && typeof e === 'object' && 'default' in e ? e : { 'default': e }; }
function _interopNamespace(e) {
if (e && e.__esModule) return e;
var n = Object.create(null);
if (e) {
Object.keys(e).forEach(function (k) {
if (k !== 'default') {
var d = Object.getOwnPropertyDescriptor(e, k);
Object.defineProperty(n, k, d.get ? d : {
enumerable: true,
get: function () { return e[k]; }
});
}
});
}
n["default"] = e;
return Object.freeze(n);
}
var xml2js__namespace = /*#__PURE__*/_interopNamespace(xml2js);
var os__namespace = /*#__PURE__*/_interopNamespace(os);
var http__namespace = /*#__PURE__*/_interopNamespace(http);
var https__namespace = /*#__PURE__*/_interopNamespace(https);
var tough__namespace = /*#__PURE__*/_interopNamespace(tough);
var tunnel__namespace = /*#__PURE__*/_interopNamespace(tunnel);
var FormData__default = /*#__PURE__*/_interopDefaultLegacy(FormData);
var node_fetch__default = /*#__PURE__*/_interopDefaultLegacy(node_fetch);
// Copyright (c) Microsoft Corporation.
// Licensed under the MIT license.
/**
@@ -53506,7 +53447,7 @@ class HttpHeaders {
set(headerName, headerValue) {
this._headersMap[getHeaderKey(headerName)] = {
name: headerName,
value: headerValue.toString(),
value: headerValue.toString()
};
}
/**
@@ -53538,7 +53479,12 @@ class HttpHeaders {
* Get the headers that are contained this collection as an object.
*/
rawHeaders() {
return this.toJson({ preserveCase: true });
const result = {};
for (const headerKey in this._headersMap) {
const header = this._headersMap[headerKey];
result[header.name.toLowerCase()] = header.value;
}
return result;
}
/**
* Get the headers that are contained in this collection as an array.
@@ -53575,27 +53521,14 @@ class HttpHeaders {
/**
* Get the JSON object representation of this HTTP header collection.
*/
toJson(options = {}) {
const result = {};
if (options.preserveCase) {
for (const headerKey in this._headersMap) {
const header = this._headersMap[headerKey];
result[header.name] = header.value;
}
}
else {
for (const headerKey in this._headersMap) {
const header = this._headersMap[headerKey];
result[getHeaderKey(header.name)] = header.value;
}
}
return result;
toJson() {
return this.rawHeaders();
}
/**
* Get the string representation of this HTTP header collection.
*/
toString() {
return JSON.stringify(this.toJson({ preserveCase: true }));
return JSON.stringify(this.toJson());
}
/**
* Create a deep clone/copy of this HttpHeaders collection.
@@ -53639,14 +53572,11 @@ function decodeString(value) {
// Copyright (c) Microsoft Corporation.
// Licensed under the MIT license.
/**
* A set of constants used internally when processing requests.
*/
const Constants = {
/**
* The core-http version
*/
coreHttpVersion: "2.2.4",
coreHttpVersion: "2.2.2",
/**
* Specifies HTTP.
*/
@@ -53682,12 +53612,12 @@ const Constants = {
POST: "POST",
MERGE: "MERGE",
HEAD: "HEAD",
PATCH: "PATCH",
PATCH: "PATCH"
},
StatusCodes: {
TooManyRequests: 429,
ServiceUnavailable: 503,
},
ServiceUnavailable: 503
}
},
/**
* Defines constants for use with HTTP headers.
@@ -53707,8 +53637,8 @@ const Constants = {
/**
* The UserAgent header.
*/
USER_AGENT: "User-Agent",
},
USER_AGENT: "User-Agent"
}
};
// Copyright (c) Microsoft Corporation.
@@ -53923,38 +53853,18 @@ function isObject(input) {
}
// Copyright (c) Microsoft Corporation.
// This file contains utility code to serialize and deserialize network operations according to `OperationSpec` objects generated by AutoRest.TypeScript from OpenAPI specifications.
/**
* Used to map raw response objects to final shapes.
* Helps packing and unpacking Dates and other encoded types that are not intrinsic to JSON.
* Also allows pulling values from headers, as well as inserting default values and constants.
*/
class Serializer {
constructor(
/**
* The provided model mapper.
*/
modelMappers = {},
/**
* Whether the contents are XML or not.
*/
isXML) {
constructor(modelMappers = {}, isXML) {
this.modelMappers = modelMappers;
this.isXML = isXML;
}
/**
* Validates constraints, if any. This function will throw if the provided value does not respect those constraints.
* @param mapper - The definition of data models.
* @param value - The value.
* @param objectName - Name of the object. Used in the error messages.
*/
validateConstraints(mapper, value, objectName) {
const failValidation = (constraintName, constraintValue) => {
throw new Error(`"${objectName}" with value "${value}" should satisfy the constraint "${constraintName}": ${constraintValue}.`);
};
if (mapper.constraints && value != undefined) {
const valueAsNumber = value;
const { ExclusiveMaximum, ExclusiveMinimum, InclusiveMaximum, InclusiveMinimum, MaxItems, MaxLength, MinItems, MinLength, MultipleOf, Pattern, UniqueItems, } = mapper.constraints;
const { ExclusiveMaximum, ExclusiveMinimum, InclusiveMaximum, InclusiveMinimum, MaxItems, MaxLength, MinItems, MinLength, MultipleOf, Pattern, UniqueItems } = mapper.constraints;
if (ExclusiveMaximum != undefined && valueAsNumber >= ExclusiveMaximum) {
failValidation("ExclusiveMaximum", ExclusiveMaximum);
}
@@ -53996,20 +53906,20 @@ class Serializer {
}
}
/**
* Serialize the given object based on its metadata defined in the mapper.
* Serialize the given object based on its metadata defined in the mapper
*
* @param mapper - The mapper which defines the metadata of the serializable object.
* @param object - A valid Javascript object to be serialized.
* @param objectName - Name of the serialized object.
* @param options - additional options to deserialization.
* @returns A valid serialized Javascript object.
* @param mapper - The mapper which defines the metadata of the serializable object
* @param object - A valid Javascript object to be serialized
* @param objectName - Name of the serialized object
* @param options - additional options to deserialization
* @returns A valid serialized Javascript object
*/
serialize(mapper, object, objectName, options = {}) {
var _a, _b, _c;
const updatedOptions = {
rootName: (_a = options.rootName) !== null && _a !== void 0 ? _a : "",
includeRoot: (_b = options.includeRoot) !== null && _b !== void 0 ? _b : false,
xmlCharKey: (_c = options.xmlCharKey) !== null && _c !== void 0 ? _c : XML_CHARKEY,
xmlCharKey: (_c = options.xmlCharKey) !== null && _c !== void 0 ? _c : XML_CHARKEY
};
let payload = {};
const mapperType = mapper.type.name;
@@ -54079,20 +53989,20 @@ class Serializer {
return payload;
}
/**
* Deserialize the given object based on its metadata defined in the mapper.
* Deserialize the given object based on its metadata defined in the mapper
*
* @param mapper - The mapper which defines the metadata of the serializable object.
* @param responseBody - A valid Javascript entity to be deserialized.
* @param objectName - Name of the deserialized object.
* @param mapper - The mapper which defines the metadata of the serializable object
* @param responseBody - A valid Javascript entity to be deserialized
* @param objectName - Name of the deserialized object
* @param options - Controls behavior of XML parser and builder.
* @returns A valid deserialized Javascript object.
* @returns A valid deserialized Javascript object
*/
deserialize(mapper, responseBody, objectName, options = {}) {
var _a, _b, _c;
const updatedOptions = {
rootName: (_a = options.rootName) !== null && _a !== void 0 ? _a : "",
includeRoot: (_b = options.includeRoot) !== null && _b !== void 0 ? _b : false,
xmlCharKey: (_c = options.xmlCharKey) !== null && _c !== void 0 ? _c : XML_CHARKEY,
xmlCharKey: (_c = options.xmlCharKey) !== null && _c !== void 0 ? _c : XML_CHARKEY
};
if (responseBody == undefined) {
if (this.isXML && mapper.type.name === "Sequence" && !mapper.xmlIsWrapped) {
@@ -54191,7 +54101,9 @@ function bufferToBase64Url(buffer) {
// Uint8Array to Base64.
const str = encodeByteArray(buffer);
// Base64 to Base64Url.
return trimEnd(str, "=").replace(/\+/g, "-").replace(/\//g, "_");
return trimEnd(str, "=")
.replace(/\+/g, "-")
.replace(/\//g, "_");
}
function base64UrlToByteArray(str) {
if (!str) {
@@ -54407,10 +54319,10 @@ function serializeDictionaryType(serializer, mapper, object, objectName, isXml,
return tempDictionary;
}
/**
* Resolves the additionalProperties property from a referenced mapper.
* @param serializer - The serializer containing the entire set of mappers.
* @param mapper - The composite mapper to resolve.
* @param objectName - Name of the object being serialized.
* Resolves the additionalProperties property from a referenced mapper
* @param serializer - The serializer containing the entire set of mappers
* @param mapper - The composite mapper to resolve
* @param objectName - Name of the object being serialized
*/
function resolveAdditionalProperties(serializer, mapper, objectName) {
const additionalProperties = mapper.type.additionalProperties;
@@ -54421,7 +54333,7 @@ function resolveAdditionalProperties(serializer, mapper, objectName) {
return additionalProperties;
}
/**
* Finds the mapper referenced by `className`.
* Finds the mapper referenced by className
* @param serializer - The serializer containing the entire set of mappers
* @param mapper - The composite mapper to resolve
* @param objectName - Name of the object being serialized
@@ -54760,9 +54672,7 @@ function getPolymorphicDiscriminatorSafely(serializer, typeName) {
serializer.modelMappers[typeName] &&
serializer.modelMappers[typeName].type.polymorphicDiscriminator);
}
/**
* Utility function that serializes an object that might contain binary information into a plain object, array or a string.
*/
// TODO: why is this here?
function serializeObject(toSerialize) {
const castToSerialize = toSerialize;
if (toSerialize == undefined)
@@ -54800,9 +54710,6 @@ function strEnum(o) {
}
return result;
}
/**
* String enum containing the string types of property mappers.
*/
// eslint-disable-next-line @typescript-eslint/no-redeclare
const MapperType = strEnum([
"Base64Url",
@@ -54820,7 +54727,7 @@ const MapperType = strEnum([
"String",
"Stream",
"TimeSpan",
"UnixTime",
"UnixTime"
]);
// Copyright (c) Microsoft Corporation.
@@ -55083,6 +54990,9 @@ class WebResource {
}
}
// Copyright (c) Microsoft Corporation.
const custom = util.inspect.custom;
// Copyright (c) Microsoft Corporation.
/**
* A class that handles the query portion of a URLBuilder.
@@ -55380,10 +55290,6 @@ class URLBuilder {
}
}
}
/**
* Serializes the URL as a string.
* @returns the URL as a string.
*/
toString() {
let result = "";
if (this._scheme) {
@@ -55419,9 +55325,6 @@ class URLBuilder {
this.setQuery(replaceAll(this.getQuery(), searchValue, replaceValue));
}
}
/**
* Parses a given string URL into a new {@link URLBuilder}.
*/
static parse(text) {
const result = new URLBuilder();
result.set(text, "SCHEME_OR_HOST");
@@ -55678,60 +55581,6 @@ function nextQuery(tokenizer) {
tokenizer._currentState = "DONE";
}
// Copyright (c) Microsoft Corporation.
function createProxyAgent(requestUrl, proxySettings, headers) {
const host = URLBuilder.parse(proxySettings.host).getHost();
if (!host) {
throw new Error("Expecting a non-empty host in proxy settings.");
}
if (!isValidPort(proxySettings.port)) {
throw new Error("Expecting a valid port number in the range of [0, 65535] in proxy settings.");
}
const tunnelOptions = {
proxy: {
host: host,
port: proxySettings.port,
headers: (headers && headers.rawHeaders()) || {},
},
};
if (proxySettings.username && proxySettings.password) {
tunnelOptions.proxy.proxyAuth = `${proxySettings.username}:${proxySettings.password}`;
}
else if (proxySettings.username) {
tunnelOptions.proxy.proxyAuth = `${proxySettings.username}`;
}
const isRequestHttps = isUrlHttps(requestUrl);
const isProxyHttps = isUrlHttps(proxySettings.host);
const proxyAgent = {
isHttps: isRequestHttps,
agent: createTunnel(isRequestHttps, isProxyHttps, tunnelOptions),
};
return proxyAgent;
}
function isUrlHttps(url) {
const urlScheme = URLBuilder.parse(url).getScheme() || "";
return urlScheme.toLowerCase() === "https";
}
function createTunnel(isRequestHttps, isProxyHttps, tunnelOptions) {
if (isRequestHttps && isProxyHttps) {
return tunnel__namespace.httpsOverHttps(tunnelOptions);
}
else if (isRequestHttps && !isProxyHttps) {
return tunnel__namespace.httpsOverHttp(tunnelOptions);
}
else if (!isRequestHttps && isProxyHttps) {
return tunnel__namespace.httpOverHttps(tunnelOptions);
}
else {
return tunnel__namespace.httpOverHttp(tunnelOptions);
}
}
function isValidPort(port) {
// any port in 0-65535 range is valid (RFC 793) even though almost all implementations
// will reserve 0 for a specific purpose, and a range of numbers for ephemeral ports
return 0 <= port && port <= 65535;
}
// Copyright (c) Microsoft Corporation.
const RedactedString = "REDACTED";
const defaultAllowedHeaderNames = [
@@ -55772,7 +55621,7 @@ const defaultAllowedHeaderNames = [
"Retry-After",
"Server",
"Transfer-Encoding",
"User-Agent",
"User-Agent"
];
const defaultAllowedQueryParameters = ["api-version"];
class Sanitizer {
@@ -55865,14 +55714,8 @@ class Sanitizer {
}
}
// Copyright (c) Microsoft Corporation.
const custom = util.inspect.custom;
// Copyright (c) Microsoft Corporation.
const errorSanitizer = new Sanitizer();
/**
* An error resulting from an HTTP request to a service endpoint.
*/
class RestError extends Error {
constructor(message, code, statusCode, request, response) {
super(message);
@@ -55890,22 +55733,13 @@ class RestError extends Error {
return `RestError: ${this.message} \n ${errorSanitizer.sanitize(this)}`;
}
}
/**
* A constant string to identify errors that may arise when making an HTTP request that indicates an issue with the transport layer (e.g. the hostname of the URL cannot be resolved via DNS.)
*/
RestError.REQUEST_SEND_ERROR = "REQUEST_SEND_ERROR";
/**
* A constant string to identify errors that may arise from parsing an incoming HTTP response. Usually indicates a malformed HTTP body, such as an encoded JSON payload that is incomplete.
*/
RestError.PARSE_ERROR = "PARSE_ERROR";
// Copyright (c) Microsoft Corporation.
const logger = logger$1.createClientLogger("core-http");
// Copyright (c) Microsoft Corporation.
function getCachedAgent(isHttps, agentCache) {
return isHttps ? agentCache.httpsAgent : agentCache.httpAgent;
}
class ReportTransform extends stream.Transform {
constructor(progressCallback) {
super();
@@ -55919,44 +55753,7 @@ class ReportTransform extends stream.Transform {
callback(undefined);
}
}
function isReadableStream(body) {
return body && typeof body.pipe === "function";
}
function isStreamComplete(stream, aborter) {
return new Promise((resolve) => {
stream.once("close", () => {
aborter === null || aborter === void 0 ? void 0 : aborter.abort();
resolve();
});
stream.once("end", resolve);
stream.once("error", resolve);
});
}
/**
* Transforms a set of headers into the key/value pair defined by {@link HttpHeadersLike}
*/
function parseHeaders(headers) {
const httpHeaders = new HttpHeaders();
headers.forEach((value, key) => {
httpHeaders.set(key, value);
});
return httpHeaders;
}
/**
* An HTTP client that uses `node-fetch`.
*/
class NodeFetchHttpClient {
constructor() {
// a mapping of proxy settings string `${host}:${port}:${username}:${password}` to agent
this.proxyAgentMap = new Map();
this.keepAliveAgents = {};
this.cookieJar = new tough__namespace.CookieJar(undefined, { looseMode: true });
}
/**
* Provides minimum viable error handling and the logic that executes the abstract methods.
* @param httpRequest - Object representing the outgoing HTTP request.
* @returns An object representing the incoming HTTP response.
*/
class FetchHttpClient {
async sendRequest(httpRequest) {
var _a;
if (!httpRequest && typeof httpRequest !== "object") {
@@ -55982,7 +55779,7 @@ class NodeFetchHttpClient {
}
if (httpRequest.formData) {
const formData = httpRequest.formData;
const requestForm = new FormData__default["default"]();
const requestForm = new FormData();
const appendFormValue = (key, value) => {
// value function probably returns a stream so we can provide a fresh stream on each retry
if (typeof value === "function") {
@@ -56052,7 +55849,7 @@ class NodeFetchHttpClient {
readableStreamBody: streaming
? response.body
: undefined,
bodyAsText: !streaming ? await response.text() : undefined,
bodyAsText: !streaming ? await response.text() : undefined
};
const onDownloadProgress = httpRequest.onDownloadProgress;
if (onDownloadProgress) {
@@ -56106,6 +55903,94 @@ class NodeFetchHttpClient {
}
}
}
}
function isReadableStream(body) {
return body && typeof body.pipe === "function";
}
function isStreamComplete(stream, aborter) {
return new Promise((resolve) => {
stream.once("close", () => {
aborter === null || aborter === void 0 ? void 0 : aborter.abort();
resolve();
});
stream.once("end", resolve);
stream.once("error", resolve);
});
}
function parseHeaders(headers) {
const httpHeaders = new HttpHeaders();
headers.forEach((value, key) => {
httpHeaders.set(key, value);
});
return httpHeaders;
}
// Copyright (c) Microsoft Corporation.
function createProxyAgent(requestUrl, proxySettings, headers) {
const host = URLBuilder.parse(proxySettings.host).getHost();
if (!host) {
throw new Error("Expecting a non-empty host in proxy settings.");
}
if (!isValidPort(proxySettings.port)) {
throw new Error("Expecting a valid port number in the range of [0, 65535] in proxy settings.");
}
const tunnelOptions = {
proxy: {
host: host,
port: proxySettings.port,
headers: (headers && headers.rawHeaders()) || {}
}
};
if (proxySettings.username && proxySettings.password) {
tunnelOptions.proxy.proxyAuth = `${proxySettings.username}:${proxySettings.password}`;
}
else if (proxySettings.username) {
tunnelOptions.proxy.proxyAuth = `${proxySettings.username}`;
}
const isRequestHttps = isUrlHttps(requestUrl);
const isProxyHttps = isUrlHttps(proxySettings.host);
const proxyAgent = {
isHttps: isRequestHttps,
agent: createTunnel(isRequestHttps, isProxyHttps, tunnelOptions)
};
return proxyAgent;
}
function isUrlHttps(url) {
const urlScheme = URLBuilder.parse(url).getScheme() || "";
return urlScheme.toLowerCase() === "https";
}
function createTunnel(isRequestHttps, isProxyHttps, tunnelOptions) {
if (isRequestHttps && isProxyHttps) {
return tunnel.httpsOverHttps(tunnelOptions);
}
else if (isRequestHttps && !isProxyHttps) {
return tunnel.httpsOverHttp(tunnelOptions);
}
else if (!isRequestHttps && isProxyHttps) {
return tunnel.httpOverHttps(tunnelOptions);
}
else {
return tunnel.httpOverHttp(tunnelOptions);
}
}
function isValidPort(port) {
// any port in 0-65535 range is valid (RFC 793) even though almost all implementations
// will reserve 0 for a specific purpose, and a range of numbers for ephemeral ports
return 0 <= port && port <= 65535;
}
// Copyright (c) Microsoft Corporation.
function getCachedAgent(isHttps, agentCache) {
return isHttps ? agentCache.httpsAgent : agentCache.httpAgent;
}
class NodeFetchHttpClient extends FetchHttpClient {
constructor() {
super(...arguments);
// a mapping of proxy settings string `${host}:${port}:${username}:${password}` to agent
this.proxyAgentMap = new Map();
this.keepAliveAgents = {};
this.cookieJar = new tough.CookieJar(undefined, { looseMode: true });
}
getOrCreateAgent(httpRequest) {
var _a;
const isHttps = isUrlHttps(httpRequest.url);
@@ -56137,30 +56022,24 @@ class NodeFetchHttpClient {
return agent;
}
const agentOptions = {
keepAlive: httpRequest.keepAlive,
keepAlive: httpRequest.keepAlive
};
if (isHttps) {
agent = this.keepAliveAgents.httpsAgent = new https__namespace.Agent(agentOptions);
agent = this.keepAliveAgents.httpsAgent = new https.Agent(agentOptions);
}
else {
agent = this.keepAliveAgents.httpAgent = new http__namespace.Agent(agentOptions);
agent = this.keepAliveAgents.httpAgent = new http.Agent(agentOptions);
}
return agent;
}
else {
return isHttps ? https__namespace.globalAgent : http__namespace.globalAgent;
return isHttps ? https.globalAgent : http.globalAgent;
}
}
/**
* Uses `node-fetch` to perform the request.
*/
// eslint-disable-next-line @azure/azure-sdk/ts-apisurface-standardized-verbs
async fetch(input, init) {
return node_fetch__default["default"](input, init);
return node_fetch(input, init);
}
/**
* Prepares a request based on the provided web resource.
*/
async prepareRequest(httpRequest) {
const requestInit = {};
if (this.cookieJar && !httpRequest.headers.get("Cookie")) {
@@ -56181,9 +56060,6 @@ class NodeFetchHttpClient {
requestInit.compress = httpRequest.decompressResponse;
return requestInit;
}
/**
* Process an HTTP response. Handles persisting a cookie for subsequent requests if the response has a "Set-Cookie" header.
*/
async processRequest(operationResponse) {
if (this.cookieJar) {
const setCookieHeader = operationResponse.headers.get("Set-Cookie");
@@ -56204,11 +56080,6 @@ class NodeFetchHttpClient {
}
// Copyright (c) Microsoft Corporation.
// Licensed under the MIT license.
/**
* The different levels of logs that can be used with the HttpPipelineLogger.
*/
exports.HttpPipelineLogLevel = void 0;
(function (HttpPipelineLogLevel) {
/**
* A log level that indicates that no logs will be logged.
@@ -56228,7 +56099,6 @@ exports.HttpPipelineLogLevel = void 0;
HttpPipelineLogLevel[HttpPipelineLogLevel["INFO"] = 3] = "INFO";
})(exports.HttpPipelineLogLevel || (exports.HttpPipelineLogLevel = {}));
// Copyright (c) Microsoft Corporation.
/**
* Converts an OperationOptions to a RequestOptionsBase
*
@@ -56250,22 +56120,8 @@ function operationOptionsToRequestOptionsBase(opts) {
}
// Copyright (c) Microsoft Corporation.
/**
* The base class from which all request policies derive.
*/
class BaseRequestPolicy {
/**
* The main method to implement that manipulates a request/response.
*/
constructor(
/**
* The next policy in the pipeline. Each policy is responsible for executing the next one if the request is to continue through the pipeline.
*/
_nextPolicy,
/**
* The options that can be passed to a given request policy.
*/
_options) {
constructor(_nextPolicy, _options) {
this._nextPolicy = _nextPolicy;
this._options = _options;
}
@@ -56317,6 +56173,113 @@ class RequestPolicyOptions {
}
}
// Copyright (c) Microsoft Corporation.
function logPolicy(loggingOptions = {}) {
return {
create: (nextPolicy, options) => {
return new LogPolicy(nextPolicy, options, loggingOptions);
}
};
}
class LogPolicy extends BaseRequestPolicy {
constructor(nextPolicy, options, { logger: logger$1 = logger.info, allowedHeaderNames = [], allowedQueryParameters = [] } = {}) {
super(nextPolicy, options);
this.logger = logger$1;
this.sanitizer = new Sanitizer({ allowedHeaderNames, allowedQueryParameters });
}
/**
* Header names whose values will be logged when logging is enabled. Defaults to
* Date, traceparent, x-ms-client-request-id, and x-ms-request id. Any headers
* specified in this field will be added to that list. Any other values will
* be written to logs as "REDACTED".
* @deprecated Pass these into the constructor instead.
*/
get allowedHeaderNames() {
return this.sanitizer.allowedHeaderNames;
}
/**
* Header names whose values will be logged when logging is enabled. Defaults to
* Date, traceparent, x-ms-client-request-id, and x-ms-request id. Any headers
* specified in this field will be added to that list. Any other values will
* be written to logs as "REDACTED".
* @deprecated Pass these into the constructor instead.
*/
set allowedHeaderNames(allowedHeaderNames) {
this.sanitizer.allowedHeaderNames = allowedHeaderNames;
}
/**
* Query string names whose values will be logged when logging is enabled. By default no
* query string values are logged.
* @deprecated Pass these into the constructor instead.
*/
get allowedQueryParameters() {
return this.sanitizer.allowedQueryParameters;
}
/**
* Query string names whose values will be logged when logging is enabled. By default no
* query string values are logged.
* @deprecated Pass these into the constructor instead.
*/
set allowedQueryParameters(allowedQueryParameters) {
this.sanitizer.allowedQueryParameters = allowedQueryParameters;
}
sendRequest(request) {
if (!this.logger.enabled)
return this._nextPolicy.sendRequest(request);
this.logRequest(request);
return this._nextPolicy.sendRequest(request).then((response) => this.logResponse(response));
}
logRequest(request) {
this.logger(`Request: ${this.sanitizer.sanitize(request)}`);
}
logResponse(response) {
this.logger(`Response status code: ${response.status}`);
this.logger(`Headers: ${this.sanitizer.sanitize(response.headers)}`);
return response;
}
}
// Copyright (c) Microsoft Corporation.
// Licensed under the MIT license.
/**
* Get the path to this parameter's value as a dotted string (a.b.c).
* @param parameter - The parameter to get the path string for.
* @returns The path to this parameter's value as a dotted string.
*/
function getPathStringFromParameter(parameter) {
return getPathStringFromParameterPath(parameter.parameterPath, parameter.mapper);
}
function getPathStringFromParameterPath(parameterPath, mapper) {
let result;
if (typeof parameterPath === "string") {
result = parameterPath;
}
else if (Array.isArray(parameterPath)) {
result = parameterPath.join(".");
}
else {
result = mapper.serializedName;
}
return result;
}
// Copyright (c) Microsoft Corporation.
/**
* Gets the list of status codes for streaming responses.
* @internal
*/
function getStreamResponseStatusCodes(operationSpec) {
const result = new Set();
for (const statusCode in operationSpec.responses) {
const operationResponse = operationSpec.responses[statusCode];
if (operationResponse.bodyMapper &&
operationResponse.bodyMapper.type.name === MapperType.Stream) {
result.add(Number(statusCode));
}
}
return result;
}
// Copyright (c) Microsoft Corporation.
// Note: The reason we re-define all of the xml2js default settings (version 2.0) here is because the default settings object exposed
// by the xm2js library is mutable. See https://github.com/Leonidas-from-XIV/node-xml2js/issues/536
@@ -56349,18 +56312,18 @@ const xml2jsDefaultOptionsV2 = {
xmldec: {
version: "1.0",
encoding: "UTF-8",
standalone: true,
standalone: true
},
doctype: undefined,
renderOpts: {
pretty: true,
indent: " ",
newline: "\n",
newline: "\n"
},
headless: false,
chunkSize: 10000,
emptyTag: "",
cdata: false,
cdata: false
};
// The xml2js settings for general XML parsing operations.
const xml2jsParserSettings = Object.assign({}, xml2jsDefaultOptionsV2);
@@ -56369,7 +56332,7 @@ xml2jsParserSettings.explicitArray = false;
const xml2jsBuilderSettings = Object.assign({}, xml2jsDefaultOptionsV2);
xml2jsBuilderSettings.explicitArray = false;
xml2jsBuilderSettings.renderOpts = {
pretty: false,
pretty: false
};
/**
* Converts given JSON object to XML string
@@ -56380,7 +56343,7 @@ function stringifyXML(obj, opts = {}) {
var _a;
xml2jsBuilderSettings.rootName = opts.rootName;
xml2jsBuilderSettings.charkey = (_a = opts.xmlCharKey) !== null && _a !== void 0 ? _a : XML_CHARKEY;
const builder = new xml2js__namespace.Builder(xml2jsBuilderSettings);
const builder = new xml2js.Builder(xml2jsBuilderSettings);
return builder.buildObject(obj);
}
/**
@@ -56392,7 +56355,7 @@ function parseXML(str, opts = {}) {
var _a;
xml2jsParserSettings.explicitRoot = !!opts.includeRoot;
xml2jsParserSettings.charkey = (_a = opts.xmlCharKey) !== null && _a !== void 0 ? _a : XML_CHARKEY;
const xmlParser = new xml2js__namespace.Parser(xml2jsParserSettings);
const xmlParser = new xml2js.Parser(xml2jsParserSettings);
return new Promise((resolve, reject) => {
if (!str) {
reject(new Error("Document is empty"));
@@ -56419,7 +56382,7 @@ function deserializationPolicy(deserializationContentTypes, parsingOptions) {
return {
create: (nextPolicy, options) => {
return new DeserializationPolicy(nextPolicy, options, deserializationContentTypes, parsingOptions);
},
}
};
}
const defaultJsonContentTypes = ["application/json", "text/json"];
@@ -56427,8 +56390,8 @@ const defaultXmlContentTypes = ["application/xml", "application/atom+xml"];
const DefaultDeserializationOptions = {
expectedContentTypes: {
json: defaultJsonContentTypes,
xml: defaultXmlContentTypes,
},
xml: defaultXmlContentTypes
}
};
/**
* A RequestPolicy that will deserialize HTTP response bodies and headers as they pass through the
@@ -56446,7 +56409,7 @@ class DeserializationPolicy extends BaseRequestPolicy {
}
async sendRequest(request) {
return this._nextPolicy.sendRequest(request).then((response) => deserializeResponseBody(this.jsonContentTypes, this.xmlContentTypes, response, {
xmlCharKey: this.xmlCharKey,
xmlCharKey: this.xmlCharKey
}));
}
}
@@ -56479,20 +56442,12 @@ function shouldDeserializeResponse(parsedResponse) {
}
return result;
}
/**
* Given a particular set of content types to parse as either JSON or XML, consumes the HTTP response to produce the result object defined by the request's {@link OperationSpec}.
* @param jsonContentTypes - Response content types to parse the body as JSON.
* @param xmlContentTypes - Response content types to parse the body as XML.
* @param response - HTTP Response from the pipeline.
* @param options - Options to the serializer, mostly for configuring the XML parser if needed.
* @returns A parsed {@link HttpOperationResponse} object that can be returned by the {@link ServiceClient}.
*/
function deserializeResponseBody(jsonContentTypes, xmlContentTypes, response, options = {}) {
var _a, _b, _c;
const updatedOptions = {
rootName: (_a = options.rootName) !== null && _a !== void 0 ? _a : "",
includeRoot: (_b = options.includeRoot) !== null && _b !== void 0 ? _b : false,
xmlCharKey: (_c = options.xmlCharKey) !== null && _c !== void 0 ? _c : XML_CHARKEY,
xmlCharKey: (_c = options.xmlCharKey) !== null && _c !== void 0 ? _c : XML_CHARKEY
};
return parse(jsonContentTypes, xmlContentTypes, response, updatedOptions).then((parsedResponse) => {
if (!shouldDeserializeResponse(parsedResponse)) {
@@ -56643,113 +56598,6 @@ function parse(jsonContentTypes, xmlContentTypes, operationResponse, opts) {
return Promise.resolve(operationResponse);
}
// Copyright (c) Microsoft Corporation.
/**
* By default, HTTP connections are maintained for future requests.
*/
const DefaultKeepAliveOptions = {
enable: true,
};
/**
* Creates a policy that controls whether HTTP connections are maintained on future requests.
* @param keepAliveOptions - Keep alive options. By default, HTTP connections are maintained for future requests.
* @returns An instance of the {@link KeepAlivePolicy}
*/
function keepAlivePolicy(keepAliveOptions) {
return {
create: (nextPolicy, options) => {
return new KeepAlivePolicy(nextPolicy, options, keepAliveOptions || DefaultKeepAliveOptions);
},
};
}
/**
* KeepAlivePolicy is a policy used to control keep alive settings for every request.
*/
class KeepAlivePolicy extends BaseRequestPolicy {
/**
* Creates an instance of KeepAlivePolicy.
*
* @param nextPolicy -
* @param options -
* @param keepAliveOptions -
*/
constructor(nextPolicy, options, keepAliveOptions) {
super(nextPolicy, options);
this.keepAliveOptions = keepAliveOptions;
}
/**
* Sends out request.
*
* @param request -
* @returns
*/
async sendRequest(request) {
request.keepAlive = this.keepAliveOptions.enable;
return this._nextPolicy.sendRequest(request);
}
}
// Copyright (c) Microsoft Corporation.
/**
* Methods that are allowed to follow redirects 301 and 302
*/
const allowedRedirect = ["GET", "HEAD"];
const DefaultRedirectOptions = {
handleRedirects: true,
maxRetries: 20,
};
/**
* Creates a redirect policy, which sends a repeats the request to a new destination if a response arrives with a "location" header, and a status code between 300 and 307.
* @param maximumRetries - Maximum number of redirects to follow.
* @returns An instance of the {@link RedirectPolicy}
*/
function redirectPolicy(maximumRetries = 20) {
return {
create: (nextPolicy, options) => {
return new RedirectPolicy(nextPolicy, options, maximumRetries);
},
};
}
/**
* Resends the request to a new destination if a response arrives with a "location" header, and a status code between 300 and 307.
*/
class RedirectPolicy extends BaseRequestPolicy {
constructor(nextPolicy, options, maxRetries = 20) {
super(nextPolicy, options);
this.maxRetries = maxRetries;
}
sendRequest(request) {
return this._nextPolicy
.sendRequest(request)
.then((response) => handleRedirect(this, response, 0));
}
}
function handleRedirect(policy, response, currentRetries) {
const { request, status } = response;
const locationHeader = response.headers.get("location");
if (locationHeader &&
(status === 300 ||
(status === 301 && allowedRedirect.includes(request.method)) ||
(status === 302 && allowedRedirect.includes(request.method)) ||
(status === 303 && request.method === "POST") ||
status === 307) &&
(!policy.maxRetries || currentRetries < policy.maxRetries)) {
const builder = URLBuilder.parse(request.url);
builder.setPath(locationHeader);
request.url = builder.toString();
// POST request with Status code 303 should be converted into a
// redirected GET request if the redirect url is present in the location header
if (status === 303) {
request.method = "GET";
delete request.body;
}
return policy._nextPolicy
.sendRequest(request)
.then((res) => handleRedirect(policy, res, currentRetries + 1));
}
return Promise.resolve(response);
}
// Copyright (c) Microsoft Corporation.
// Licensed under the MIT license.
const DEFAULT_CLIENT_RETRY_COUNT = 3;
@@ -56813,7 +56661,7 @@ function isDefined(thing) {
}
// Copyright (c) Microsoft Corporation.
const StandardAbortMessage$1 = "The operation was aborted.";
const StandardAbortMessage = "The operation was aborted.";
/**
* A wrapper for setTimeout that resolves a promise after delayInMs milliseconds.
* @param delayInMs - The number of milliseconds to be delayed.
@@ -56828,7 +56676,7 @@ function delay(delayInMs, value, options) {
let timer = undefined;
let onAborted = undefined;
const rejectOnAbort = () => {
return reject(new abortController.AbortError((options === null || options === void 0 ? void 0 : options.abortErrorMsg) ? options === null || options === void 0 ? void 0 : options.abortErrorMsg : StandardAbortMessage$1));
return reject(new abortController.AbortError((options === null || options === void 0 ? void 0 : options.abortErrorMsg) ? options === null || options === void 0 ? void 0 : options.abortErrorMsg : StandardAbortMessage));
};
const removeListeners = () => {
if ((options === null || options === void 0 ? void 0 : options.abortSignal) && onAborted) {
@@ -56856,34 +56704,20 @@ function delay(delayInMs, value, options) {
}
// Copyright (c) Microsoft Corporation.
/**
* Policy that retries the request as many times as configured for as long as the max retry time interval specified, each retry waiting longer to begin than the last time.
* @param retryCount - Maximum number of retries.
* @param retryInterval - Base time between retries.
* @param maxRetryInterval - Maximum time to wait between retries.
*/
function exponentialRetryPolicy(retryCount, retryInterval, maxRetryInterval) {
return {
create: (nextPolicy, options) => {
return new ExponentialRetryPolicy(nextPolicy, options, retryCount, retryInterval, maxRetryInterval);
},
}
};
}
/**
* Describes the Retry Mode type. Currently supporting only Exponential.
*/
exports.RetryMode = void 0;
(function (RetryMode) {
/**
* Currently supported retry mode.
* Each time a retry happens, it will take exponentially more time than the last time.
*/
RetryMode[RetryMode["Exponential"] = 0] = "Exponential";
})(exports.RetryMode || (exports.RetryMode = {}));
const DefaultRetryOptions = {
maxRetries: DEFAULT_CLIENT_RETRY_COUNT,
retryDelayInMs: DEFAULT_CLIENT_RETRY_INTERVAL,
maxRetryDelayInMs: DEFAULT_CLIENT_MAX_RETRY_INTERVAL,
maxRetryDelayInMs: DEFAULT_CLIENT_MAX_RETRY_INTERVAL
};
/**
* Instantiates a new "ExponentialRetryPolicyFilter" instance.
@@ -56908,11 +56742,11 @@ class ExponentialRetryPolicy extends BaseRequestPolicy {
sendRequest(request) {
return this._nextPolicy
.sendRequest(request.clone())
.then((response) => retry$1(this, request, response))
.catch((error) => retry$1(this, request, error.response, undefined, error));
.then((response) => retry(this, request, response))
.catch((error) => retry(this, request, error.response, undefined, error));
}
}
async function retry$1(policy, request, response, retryData, requestError) {
async function retry(policy, request, response, retryData, requestError) {
function shouldPolicyRetry(responseParam) {
const statusCode = responseParam === null || responseParam === void 0 ? void 0 : responseParam.status;
if (statusCode === 503 && (response === null || response === void 0 ? void 0 : response.headers.get(Constants.HeaderConstants.RETRY_AFTER))) {
@@ -56929,7 +56763,7 @@ async function retry$1(policy, request, response, retryData, requestError) {
retryData = updateRetryData({
retryInterval: policy.retryInterval,
minRetryInterval: 0,
maxRetryInterval: policy.maxRetryInterval,
maxRetryInterval: policy.maxRetryInterval
}, retryData, requestError);
const isAborted = request.abortSignal && request.abortSignal.aborted;
if (!isAborted && shouldRetry(policy.retryCount, shouldPolicyRetry, retryData, response)) {
@@ -56937,10 +56771,10 @@ async function retry$1(policy, request, response, retryData, requestError) {
try {
await delay(retryData.retryInterval);
const res = await policy._nextPolicy.sendRequest(request.clone());
return retry$1(policy, request, res, retryData);
return retry(policy, request, res, retryData);
}
catch (err) {
return retry$1(policy, request, response, retryData, err);
return retry(policy, request, response, retryData, err);
}
}
else if (isAborted || requestError || !response) {
@@ -56955,467 +56789,11 @@ async function retry$1(policy, request, response, retryData, requestError) {
}
// Copyright (c) Microsoft Corporation.
/**
* Creates a policy that logs information about the outgoing request and the incoming responses.
* @param loggingOptions - Logging options.
* @returns An instance of the {@link LogPolicy}
*/
function logPolicy(loggingOptions = {}) {
return {
create: (nextPolicy, options) => {
return new LogPolicy(nextPolicy, options, loggingOptions);
},
};
}
/**
* A policy that logs information about the outgoing request and the incoming responses.
*/
class LogPolicy extends BaseRequestPolicy {
constructor(nextPolicy, options, { logger: logger$1 = logger.info, allowedHeaderNames = [], allowedQueryParameters = [], } = {}) {
super(nextPolicy, options);
this.logger = logger$1;
this.sanitizer = new Sanitizer({ allowedHeaderNames, allowedQueryParameters });
}
/**
* Header names whose values will be logged when logging is enabled. Defaults to
* Date, traceparent, x-ms-client-request-id, and x-ms-request id. Any headers
* specified in this field will be added to that list. Any other values will
* be written to logs as "REDACTED".
* @deprecated Pass these into the constructor instead.
*/
get allowedHeaderNames() {
return this.sanitizer.allowedHeaderNames;
}
/**
* Header names whose values will be logged when logging is enabled. Defaults to
* Date, traceparent, x-ms-client-request-id, and x-ms-request id. Any headers
* specified in this field will be added to that list. Any other values will
* be written to logs as "REDACTED".
* @deprecated Pass these into the constructor instead.
*/
set allowedHeaderNames(allowedHeaderNames) {
this.sanitizer.allowedHeaderNames = allowedHeaderNames;
}
/**
* Query string names whose values will be logged when logging is enabled. By default no
* query string values are logged.
* @deprecated Pass these into the constructor instead.
*/
get allowedQueryParameters() {
return this.sanitizer.allowedQueryParameters;
}
/**
* Query string names whose values will be logged when logging is enabled. By default no
* query string values are logged.
* @deprecated Pass these into the constructor instead.
*/
set allowedQueryParameters(allowedQueryParameters) {
this.sanitizer.allowedQueryParameters = allowedQueryParameters;
}
sendRequest(request) {
if (!this.logger.enabled)
return this._nextPolicy.sendRequest(request);
this.logRequest(request);
return this._nextPolicy.sendRequest(request).then((response) => this.logResponse(response));
}
logRequest(request) {
this.logger(`Request: ${this.sanitizer.sanitize(request)}`);
}
logResponse(response) {
this.logger(`Response status code: ${response.status}`);
this.logger(`Headers: ${this.sanitizer.sanitize(response.headers)}`);
return response;
}
}
// Copyright (c) Microsoft Corporation.
// Licensed under the MIT license.
/**
* Get the path to this parameter's value as a dotted string (a.b.c).
* @param parameter - The parameter to get the path string for.
* @returns The path to this parameter's value as a dotted string.
*/
function getPathStringFromParameter(parameter) {
return getPathStringFromParameterPath(parameter.parameterPath, parameter.mapper);
}
function getPathStringFromParameterPath(parameterPath, mapper) {
let result;
if (typeof parameterPath === "string") {
result = parameterPath;
}
else if (Array.isArray(parameterPath)) {
result = parameterPath.join(".");
}
else {
result = mapper.serializedName;
}
return result;
}
// Copyright (c) Microsoft Corporation.
/**
* Gets the list of status codes for streaming responses.
* @internal
*/
function getStreamResponseStatusCodes(operationSpec) {
const result = new Set();
for (const statusCode in operationSpec.responses) {
const operationResponse = operationSpec.responses[statusCode];
if (operationResponse.bodyMapper &&
operationResponse.bodyMapper.type.name === MapperType.Stream) {
result.add(Number(statusCode));
}
}
return result;
}
// Copyright (c) Microsoft Corporation.
function getDefaultUserAgentKey() {
return Constants.HeaderConstants.USER_AGENT;
}
function getPlatformSpecificData() {
const runtimeInfo = {
key: "Node",
value: process.version,
};
const osInfo = {
key: "OS",
value: `(${os__namespace.arch()}-${os__namespace.type()}-${os__namespace.release()})`,
};
return [runtimeInfo, osInfo];
}
// Copyright (c) Microsoft Corporation.
function getRuntimeInfo() {
const msRestRuntime = {
key: "core-http",
value: Constants.coreHttpVersion,
};
return [msRestRuntime];
}
function getUserAgentString(telemetryInfo, keySeparator = " ", valueSeparator = "/") {
return telemetryInfo
.map((info) => {
const value = info.value ? `${valueSeparator}${info.value}` : "";
return `${info.key}${value}`;
})
.join(keySeparator);
}
const getDefaultUserAgentHeaderName = getDefaultUserAgentKey;
/**
* The default approach to generate user agents.
* Uses static information from this package, plus system information available from the runtime.
*/
function getDefaultUserAgentValue() {
const runtimeInfo = getRuntimeInfo();
const platformSpecificData = getPlatformSpecificData();
const userAgent = getUserAgentString(runtimeInfo.concat(platformSpecificData));
return userAgent;
}
/**
* Returns a policy that adds the user agent header to outgoing requests based on the given {@link TelemetryInfo}.
* @param userAgentData - Telemetry information.
* @returns A new {@link UserAgentPolicy}.
*/
function userAgentPolicy(userAgentData) {
const key = !userAgentData || userAgentData.key === undefined || userAgentData.key === null
? getDefaultUserAgentKey()
: userAgentData.key;
const value = !userAgentData || userAgentData.value === undefined || userAgentData.value === null
? getDefaultUserAgentValue()
: userAgentData.value;
return {
create: (nextPolicy, options) => {
return new UserAgentPolicy(nextPolicy, options, key, value);
},
};
}
/**
* A policy that adds the user agent header to outgoing requests based on the given {@link TelemetryInfo}.
*/
class UserAgentPolicy extends BaseRequestPolicy {
constructor(_nextPolicy, _options, headerKey, headerValue) {
super(_nextPolicy, _options);
this._nextPolicy = _nextPolicy;
this._options = _options;
this.headerKey = headerKey;
this.headerValue = headerValue;
}
sendRequest(request) {
this.addUserAgentHeader(request);
return this._nextPolicy.sendRequest(request);
}
/**
* Adds the user agent header to the outgoing request.
*/
addUserAgentHeader(request) {
if (!request.headers) {
request.headers = new HttpHeaders();
}
if (!request.headers.get(this.headerKey) && this.headerValue) {
request.headers.set(this.headerKey, this.headerValue);
}
}
}
// Copyright (c) Microsoft Corporation.
// Licensed under the MIT license.
/**
* The format that will be used to join an array of values together for a query parameter value.
*/
exports.QueryCollectionFormat = void 0;
(function (QueryCollectionFormat) {
/**
* CSV: Each pair of segments joined by a single comma.
*/
QueryCollectionFormat["Csv"] = ",";
/**
* SSV: Each pair of segments joined by a single space character.
*/
QueryCollectionFormat["Ssv"] = " ";
/**
* TSV: Each pair of segments joined by a single tab character.
*/
QueryCollectionFormat["Tsv"] = "\t";
/**
* Pipes: Each pair of segments joined by a single pipe character.
*/
QueryCollectionFormat["Pipes"] = "|";
/**
* Denotes this is an array of values that should be passed to the server in multiple key/value pairs, e.g. `?queryParam=value1&queryParam=value2`
*/
QueryCollectionFormat["Multi"] = "Multi";
})(exports.QueryCollectionFormat || (exports.QueryCollectionFormat = {}));
// Copyright (c) Microsoft Corporation.
// Default options for the cycler if none are provided
const DEFAULT_CYCLER_OPTIONS = {
forcedRefreshWindowInMs: 1000,
retryIntervalInMs: 3000,
refreshWindowInMs: 1000 * 60 * 2, // Start refreshing 2m before expiry
};
/**
* Converts an an unreliable access token getter (which may resolve with null)
* into an AccessTokenGetter by retrying the unreliable getter in a regular
* interval.
*
* @param getAccessToken - a function that produces a promise of an access
* token that may fail by returning null
* @param retryIntervalInMs - the time (in milliseconds) to wait between retry
* attempts
* @param timeoutInMs - the timestamp after which the refresh attempt will fail,
* throwing an exception
* @returns - a promise that, if it resolves, will resolve with an access token
*/
async function beginRefresh(getAccessToken, retryIntervalInMs, timeoutInMs) {
// This wrapper handles exceptions gracefully as long as we haven't exceeded
// the timeout.
async function tryGetAccessToken() {
if (Date.now() < timeoutInMs) {
try {
return await getAccessToken();
}
catch (_a) {
return null;
}
}
else {
const finalToken = await getAccessToken();
// Timeout is up, so throw if it's still null
if (finalToken === null) {
throw new Error("Failed to refresh access token.");
}
return finalToken;
}
}
let token = await tryGetAccessToken();
while (token === null) {
await delay(retryIntervalInMs);
token = await tryGetAccessToken();
}
return token;
}
/**
* Creates a token cycler from a credential, scopes, and optional settings.
*
* A token cycler represents a way to reliably retrieve a valid access token
* from a TokenCredential. It will handle initializing the token, refreshing it
* when it nears expiration, and synchronizes refresh attempts to avoid
* concurrency hazards.
*
* @param credential - the underlying TokenCredential that provides the access
* token
* @param scopes - the scopes to request authorization for
* @param tokenCyclerOptions - optionally override default settings for the cycler
*
* @returns - a function that reliably produces a valid access token
*/
function createTokenCycler(credential, scopes, tokenCyclerOptions) {
let refreshWorker = null;
let token = null;
const options = Object.assign(Object.assign({}, DEFAULT_CYCLER_OPTIONS), tokenCyclerOptions);
/**
* This little holder defines several predicates that we use to construct
* the rules of refreshing the token.
*/
const cycler = {
/**
* Produces true if a refresh job is currently in progress.
*/
get isRefreshing() {
return refreshWorker !== null;
},
/**
* Produces true if the cycler SHOULD refresh (we are within the refresh
* window and not already refreshing)
*/
get shouldRefresh() {
var _a;
return (!cycler.isRefreshing &&
((_a = token === null || token === void 0 ? void 0 : token.expiresOnTimestamp) !== null && _a !== void 0 ? _a : 0) - options.refreshWindowInMs < Date.now());
},
/**
* Produces true if the cycler MUST refresh (null or nearly-expired
* token).
*/
get mustRefresh() {
return (token === null || token.expiresOnTimestamp - options.forcedRefreshWindowInMs < Date.now());
},
};
/**
* Starts a refresh job or returns the existing job if one is already
* running.
*/
function refresh(getTokenOptions) {
var _a;
if (!cycler.isRefreshing) {
// We bind `scopes` here to avoid passing it around a lot
const tryGetAccessToken = () => credential.getToken(scopes, getTokenOptions);
// Take advantage of promise chaining to insert an assignment to `token`
// before the refresh can be considered done.
refreshWorker = beginRefresh(tryGetAccessToken, options.retryIntervalInMs,
// If we don't have a token, then we should timeout immediately
(_a = token === null || token === void 0 ? void 0 : token.expiresOnTimestamp) !== null && _a !== void 0 ? _a : Date.now())
.then((_token) => {
refreshWorker = null;
token = _token;
return token;
})
.catch((reason) => {
// We also should reset the refresher if we enter a failed state. All
// existing awaiters will throw, but subsequent requests will start a
// new retry chain.
refreshWorker = null;
token = null;
throw reason;
});
}
return refreshWorker;
}
return async (tokenOptions) => {
//
// Simple rules:
// - If we MUST refresh, then return the refresh task, blocking
// the pipeline until a token is available.
// - If we SHOULD refresh, then run refresh but don't return it
// (we can still use the cached token).
// - Return the token, since it's fine if we didn't return in
// step 1.
//
if (cycler.mustRefresh)
return refresh(tokenOptions);
if (cycler.shouldRefresh) {
refresh(tokenOptions);
}
return token;
};
}
// #endregion
/**
* Creates a new factory for a RequestPolicy that applies a bearer token to
* the requests' `Authorization` headers.
*
* @param credential - The TokenCredential implementation that can supply the bearer token.
* @param scopes - The scopes for which the bearer token applies.
*/
function bearerTokenAuthenticationPolicy(credential, scopes) {
// This simple function encapsulates the entire process of reliably retrieving the token
const getToken = createTokenCycler(credential, scopes /* , options */);
class BearerTokenAuthenticationPolicy extends BaseRequestPolicy {
constructor(nextPolicy, options) {
super(nextPolicy, options);
}
async sendRequest(webResource) {
if (!webResource.url.toLowerCase().startsWith("https://")) {
throw new Error("Bearer token authentication is not permitted for non-TLS protected (non-https) URLs.");
}
const { token } = await getToken({
abortSignal: webResource.abortSignal,
tracingOptions: {
tracingContext: webResource.tracingContext,
},
});
webResource.headers.set(Constants.HeaderConstants.AUTHORIZATION, `Bearer ${token}`);
return this._nextPolicy.sendRequest(webResource);
}
}
return {
create: (nextPolicy, options) => {
return new BearerTokenAuthenticationPolicy(nextPolicy, options);
},
};
}
// Copyright (c) Microsoft Corporation.
/**
* Returns a request policy factory that can be used to create an instance of
* {@link DisableResponseDecompressionPolicy}.
*/
function disableResponseDecompressionPolicy() {
return {
create: (nextPolicy, options) => {
return new DisableResponseDecompressionPolicy(nextPolicy, options);
},
};
}
/**
* A policy to disable response decompression according to Accept-Encoding header
* https://developer.mozilla.org/en-US/docs/Web/HTTP/Headers/Accept-Encoding
*/
class DisableResponseDecompressionPolicy extends BaseRequestPolicy {
/**
* Creates an instance of DisableResponseDecompressionPolicy.
*
* @param nextPolicy -
* @param options -
*/
// The parent constructor is protected.
/* eslint-disable-next-line @typescript-eslint/no-useless-constructor */
constructor(nextPolicy, options) {
super(nextPolicy, options);
}
/**
* Sends out request.
*
* @param request -
* @returns
*/
async sendRequest(request) {
request.decompressResponse = false;
return this._nextPolicy.sendRequest(request);
}
}
// Copyright (c) Microsoft Corporation.
/**
* Creates a policy that assigns a unique request id to outgoing requests.
* @param requestIdHeaderName - The name of the header to use when assigning the unique id to the request.
*/
function generateClientRequestIdPolicy(requestIdHeaderName = "x-ms-client-request-id") {
return {
create: (nextPolicy, options) => {
return new GenerateClientRequestIdPolicy(nextPolicy, options, requestIdHeaderName);
},
}
};
}
class GenerateClientRequestIdPolicy extends BaseRequestPolicy {
@@ -57432,198 +56810,138 @@ class GenerateClientRequestIdPolicy extends BaseRequestPolicy {
}
// Copyright (c) Microsoft Corporation.
let cachedHttpClient;
function getCachedDefaultHttpClient() {
if (!cachedHttpClient) {
cachedHttpClient = new NodeFetchHttpClient();
}
return cachedHttpClient;
function getDefaultUserAgentKey() {
return Constants.HeaderConstants.USER_AGENT;
}
function getPlatformSpecificData() {
const runtimeInfo = {
key: "Node",
value: process.version
};
const osInfo = {
key: "OS",
value: `(${os.arch()}-${os.type()}-${os.release()})`
};
return [runtimeInfo, osInfo];
}
// Copyright (c) Microsoft Corporation.
function ndJsonPolicy() {
function getRuntimeInfo() {
const msRestRuntime = {
key: "core-http",
value: Constants.coreHttpVersion
};
return [msRestRuntime];
}
function getUserAgentString(telemetryInfo, keySeparator = " ", valueSeparator = "/") {
return telemetryInfo
.map((info) => {
const value = info.value ? `${valueSeparator}${info.value}` : "";
return `${info.key}${value}`;
})
.join(keySeparator);
}
const getDefaultUserAgentHeaderName = getDefaultUserAgentKey;
function getDefaultUserAgentValue() {
const runtimeInfo = getRuntimeInfo();
const platformSpecificData = getPlatformSpecificData();
const userAgent = getUserAgentString(runtimeInfo.concat(platformSpecificData));
return userAgent;
}
function userAgentPolicy(userAgentData) {
const key = !userAgentData || userAgentData.key === undefined || userAgentData.key === null
? getDefaultUserAgentKey()
: userAgentData.key;
const value = !userAgentData || userAgentData.value === undefined || userAgentData.value === null
? getDefaultUserAgentValue()
: userAgentData.value;
return {
create: (nextPolicy, options) => {
return new NdJsonPolicy(nextPolicy, options);
},
return new UserAgentPolicy(nextPolicy, options, key, value);
}
};
}
/**
* NdJsonPolicy that formats a JSON array as newline-delimited JSON
*/
class NdJsonPolicy extends BaseRequestPolicy {
/**
* Creates an instance of KeepAlivePolicy.
*/
constructor(nextPolicy, options) {
super(nextPolicy, options);
class UserAgentPolicy extends BaseRequestPolicy {
constructor(_nextPolicy, _options, headerKey, headerValue) {
super(_nextPolicy, _options);
this._nextPolicy = _nextPolicy;
this._options = _options;
this.headerKey = headerKey;
this.headerValue = headerValue;
}
/**
* Sends a request.
*/
async sendRequest(request) {
// There currently isn't a good way to bypass the serializer
if (typeof request.body === "string" && request.body.startsWith("[")) {
const body = JSON.parse(request.body);
if (Array.isArray(body)) {
request.body = body.map((item) => JSON.stringify(item) + "\n").join("");
}
}
sendRequest(request) {
this.addUserAgentHeader(request);
return this._nextPolicy.sendRequest(request);
}
addUserAgentHeader(request) {
if (!request.headers) {
request.headers = new HttpHeaders();
}
if (!request.headers.get(this.headerKey) && this.headerValue) {
request.headers.set(this.headerKey, this.headerValue);
}
}
}
// Copyright (c) Microsoft Corporation.
/**
* Stores the patterns specified in NO_PROXY environment variable.
* @internal
* Methods that are allowed to follow redirects 301 and 302
*/
const globalNoProxyList = [];
let noProxyListLoaded = false;
/** A cache of whether a host should bypass the proxy. */
const globalBypassedMap = new Map();
function loadEnvironmentProxyValue() {
if (!process) {
return undefined;
}
const httpsProxy = getEnvironmentValue(Constants.HTTPS_PROXY);
const allProxy = getEnvironmentValue(Constants.ALL_PROXY);
const httpProxy = getEnvironmentValue(Constants.HTTP_PROXY);
return httpsProxy || allProxy || httpProxy;
}
/**
* Check whether the host of a given `uri` matches any pattern in the no proxy list.
* If there's a match, any request sent to the same host shouldn't have the proxy settings set.
* This implementation is a port of https://github.com/Azure/azure-sdk-for-net/blob/8cca811371159e527159c7eb65602477898683e2/sdk/core/Azure.Core/src/Pipeline/Internal/HttpEnvironmentProxy.cs#L210
*/
function isBypassed(uri, noProxyList, bypassedMap) {
if (noProxyList.length === 0) {
return false;
}
const host = URLBuilder.parse(uri).getHost();
if (bypassedMap === null || bypassedMap === void 0 ? void 0 : bypassedMap.has(host)) {
return bypassedMap.get(host);
}
let isBypassedFlag = false;
for (const pattern of noProxyList) {
if (pattern[0] === ".") {
// This should match either domain it self or any subdomain or host
// .foo.com will match foo.com it self or *.foo.com
if (host.endsWith(pattern)) {
isBypassedFlag = true;
}
else {
if (host.length === pattern.length - 1 && host === pattern.slice(1)) {
isBypassedFlag = true;
}
}
}
else {
if (host === pattern) {
isBypassedFlag = true;
}
}
}
bypassedMap === null || bypassedMap === void 0 ? void 0 : bypassedMap.set(host, isBypassedFlag);
return isBypassedFlag;
}
/**
* @internal
*/
function loadNoProxy() {
const noProxy = getEnvironmentValue(Constants.NO_PROXY);
noProxyListLoaded = true;
if (noProxy) {
return noProxy
.split(",")
.map((item) => item.trim())
.filter((item) => item.length);
}
return [];
}
/**
* Converts a given URL of a proxy server into `ProxySettings` or attempts to retrieve `ProxySettings` from the current environment if one is not passed.
* @param proxyUrl - URL of the proxy
* @returns The default proxy settings, or undefined.
*/
function getDefaultProxySettings(proxyUrl) {
if (!proxyUrl) {
proxyUrl = loadEnvironmentProxyValue();
if (!proxyUrl) {
return undefined;
}
}
const { username, password, urlWithoutAuth } = extractAuthFromUrl(proxyUrl);
const parsedUrl = URLBuilder.parse(urlWithoutAuth);
const schema = parsedUrl.getScheme() ? parsedUrl.getScheme() + "://" : "";
const allowedRedirect = ["GET", "HEAD"];
const DefaultRedirectOptions = {
handleRedirects: true,
maxRetries: 20
};
function redirectPolicy(maximumRetries = 20) {
return {
host: schema + parsedUrl.getHost(),
port: Number.parseInt(parsedUrl.getPort() || "80"),
username,
password,
create: (nextPolicy, options) => {
return new RedirectPolicy(nextPolicy, options, maximumRetries);
}
};
}
/**
* A policy that allows one to apply proxy settings to all requests.
* If not passed static settings, they will be retrieved from the HTTPS_PROXY
* or HTTP_PROXY environment variables.
* @param proxySettings - ProxySettings to use on each request.
* @param options - additional settings, for example, custom NO_PROXY patterns
*/
function proxyPolicy(proxySettings, options) {
if (!proxySettings) {
proxySettings = getDefaultProxySettings();
}
if (!noProxyListLoaded) {
globalNoProxyList.push(...loadNoProxy());
}
return {
create: (nextPolicy, requestPolicyOptions) => {
return new ProxyPolicy(nextPolicy, requestPolicyOptions, proxySettings, options === null || options === void 0 ? void 0 : options.customNoProxyList);
},
};
}
function extractAuthFromUrl(url) {
const atIndex = url.indexOf("@");
if (atIndex === -1) {
return { urlWithoutAuth: url };
}
const schemeIndex = url.indexOf("://");
const authStart = schemeIndex !== -1 ? schemeIndex + 3 : 0;
const auth = url.substring(authStart, atIndex);
const colonIndex = auth.indexOf(":");
const hasPassword = colonIndex !== -1;
const username = hasPassword ? auth.substring(0, colonIndex) : auth;
const password = hasPassword ? auth.substring(colonIndex + 1) : undefined;
const urlWithoutAuth = url.substring(0, authStart) + url.substring(atIndex + 1);
return {
username,
password,
urlWithoutAuth,
};
}
class ProxyPolicy extends BaseRequestPolicy {
constructor(nextPolicy, options, proxySettings, customNoProxyList) {
class RedirectPolicy extends BaseRequestPolicy {
constructor(nextPolicy, options, maxRetries = 20) {
super(nextPolicy, options);
this.proxySettings = proxySettings;
this.customNoProxyList = customNoProxyList;
this.maxRetries = maxRetries;
}
sendRequest(request) {
var _a;
if (!request.proxySettings &&
!isBypassed(request.url, (_a = this.customNoProxyList) !== null && _a !== void 0 ? _a : globalNoProxyList, this.customNoProxyList ? undefined : globalBypassedMap)) {
request.proxySettings = this.proxySettings;
}
return this._nextPolicy.sendRequest(request);
return this._nextPolicy
.sendRequest(request)
.then((response) => handleRedirect(this, response, 0));
}
}
function handleRedirect(policy, response, currentRetries) {
const { request, status } = response;
const locationHeader = response.headers.get("location");
if (locationHeader &&
(status === 300 ||
(status === 301 && allowedRedirect.includes(request.method)) ||
(status === 302 && allowedRedirect.includes(request.method)) ||
(status === 303 && request.method === "POST") ||
status === 307) &&
(!policy.maxRetries || currentRetries < policy.maxRetries)) {
const builder = URLBuilder.parse(request.url);
builder.setPath(locationHeader);
request.url = builder.toString();
// POST request with Status code 303 should be converted into a
// redirected GET request if the redirect url is present in the location header
if (status === 303) {
request.method = "GET";
delete request.body;
}
return policy._nextPolicy
.sendRequest(request)
.then((res) => handleRedirect(policy, res, currentRetries + 1));
}
return Promise.resolve(response);
}
// Copyright (c) Microsoft Corporation.
function rpRegistrationPolicy(retryTimeout = 30) {
return {
create: (nextPolicy, options) => {
return new RPRegistrationPolicy(nextPolicy, options, retryTimeout);
},
}
};
}
class RPRegistrationPolicy extends BaseRequestPolicy {
@@ -57768,52 +57086,193 @@ async function getRegistrationStatus(policy, url, originalRequest) {
}
// Copyright (c) Microsoft Corporation.
// Default options for the cycler if none are provided
const DEFAULT_CYCLER_OPTIONS = {
forcedRefreshWindowInMs: 1000,
retryIntervalInMs: 3000,
refreshWindowInMs: 1000 * 60 * 2 // Start refreshing 2m before expiry
};
/**
* Creates a policy that signs outgoing requests by calling to the provided `authenticationProvider`'s `signRequest` method.
* @param authenticationProvider - The authentication provider.
* @returns An instance of the {@link SigningPolicy}.
* Converts an an unreliable access token getter (which may resolve with null)
* into an AccessTokenGetter by retrying the unreliable getter in a regular
* interval.
*
* @param getAccessToken - a function that produces a promise of an access
* token that may fail by returning null
* @param retryIntervalInMs - the time (in milliseconds) to wait between retry
* attempts
* @param timeoutInMs - the timestamp after which the refresh attempt will fail,
* throwing an exception
* @returns - a promise that, if it resolves, will resolve with an access token
*/
function signingPolicy(authenticationProvider) {
return {
create: (nextPolicy, options) => {
return new SigningPolicy(nextPolicy, options, authenticationProvider);
},
};
async function beginRefresh(getAccessToken, retryIntervalInMs, timeoutInMs) {
// This wrapper handles exceptions gracefully as long as we haven't exceeded
// the timeout.
async function tryGetAccessToken() {
if (Date.now() < timeoutInMs) {
try {
return await getAccessToken();
}
catch (_a) {
return null;
}
}
else {
const finalToken = await getAccessToken();
// Timeout is up, so throw if it's still null
if (finalToken === null) {
throw new Error("Failed to refresh access token.");
}
return finalToken;
}
}
let token = await tryGetAccessToken();
while (token === null) {
await delay(retryIntervalInMs);
token = await tryGetAccessToken();
}
return token;
}
/**
* A policy that signs outgoing requests by calling to the provided `authenticationProvider`'s `signRequest` method.
* Creates a token cycler from a credential, scopes, and optional settings.
*
* A token cycler represents a way to reliably retrieve a valid access token
* from a TokenCredential. It will handle initializing the token, refreshing it
* when it nears expiration, and synchronizes refresh attempts to avoid
* concurrency hazards.
*
* @param credential - the underlying TokenCredential that provides the access
* token
* @param scopes - the scopes to request authorization for
* @param tokenCyclerOptions - optionally override default settings for the cycler
*
* @returns - a function that reliably produces a valid access token
*/
class SigningPolicy extends BaseRequestPolicy {
constructor(nextPolicy, options, authenticationProvider) {
super(nextPolicy, options);
this.authenticationProvider = authenticationProvider;
function createTokenCycler(credential, scopes, tokenCyclerOptions) {
let refreshWorker = null;
let token = null;
const options = Object.assign(Object.assign({}, DEFAULT_CYCLER_OPTIONS), tokenCyclerOptions);
/**
* This little holder defines several predicates that we use to construct
* the rules of refreshing the token.
*/
const cycler = {
/**
* Produces true if a refresh job is currently in progress.
*/
get isRefreshing() {
return refreshWorker !== null;
},
/**
* Produces true if the cycler SHOULD refresh (we are within the refresh
* window and not already refreshing)
*/
get shouldRefresh() {
var _a;
return (!cycler.isRefreshing &&
((_a = token === null || token === void 0 ? void 0 : token.expiresOnTimestamp) !== null && _a !== void 0 ? _a : 0) - options.refreshWindowInMs < Date.now());
},
/**
* Produces true if the cycler MUST refresh (null or nearly-expired
* token).
*/
get mustRefresh() {
return (token === null || token.expiresOnTimestamp - options.forcedRefreshWindowInMs < Date.now());
}
};
/**
* Starts a refresh job or returns the existing job if one is already
* running.
*/
function refresh(getTokenOptions) {
var _a;
if (!cycler.isRefreshing) {
// We bind `scopes` here to avoid passing it around a lot
const tryGetAccessToken = () => credential.getToken(scopes, getTokenOptions);
// Take advantage of promise chaining to insert an assignment to `token`
// before the refresh can be considered done.
refreshWorker = beginRefresh(tryGetAccessToken, options.retryIntervalInMs,
// If we don't have a token, then we should timeout immediately
(_a = token === null || token === void 0 ? void 0 : token.expiresOnTimestamp) !== null && _a !== void 0 ? _a : Date.now())
.then((_token) => {
refreshWorker = null;
token = _token;
return token;
})
.catch((reason) => {
// We also should reset the refresher if we enter a failed state. All
// existing awaiters will throw, but subsequent requests will start a
// new retry chain.
refreshWorker = null;
token = null;
throw reason;
});
}
return refreshWorker;
}
signRequest(request) {
return this.authenticationProvider.signRequest(request);
}
sendRequest(request) {
return this.signRequest(request).then((nextRequest) => this._nextPolicy.sendRequest(nextRequest));
return async (tokenOptions) => {
//
// Simple rules:
// - If we MUST refresh, then return the refresh task, blocking
// the pipeline until a token is available.
// - If we SHOULD refresh, then run refresh but don't return it
// (we can still use the cached token).
// - Return the token, since it's fine if we didn't return in
// step 1.
//
if (cycler.mustRefresh)
return refresh(tokenOptions);
if (cycler.shouldRefresh) {
refresh(tokenOptions);
}
return token;
};
}
// #endregion
/**
* Creates a new factory for a RequestPolicy that applies a bearer token to
* the requests' `Authorization` headers.
*
* @param credential - The TokenCredential implementation that can supply the bearer token.
* @param scopes - The scopes for which the bearer token applies.
*/
function bearerTokenAuthenticationPolicy(credential, scopes) {
// This simple function encapsulates the entire process of reliably retrieving the token
const getToken = createTokenCycler(credential, scopes /* , options */);
class BearerTokenAuthenticationPolicy extends BaseRequestPolicy {
constructor(nextPolicy, options) {
super(nextPolicy, options);
}
async sendRequest(webResource) {
if (!webResource.url.toLowerCase().startsWith("https://")) {
throw new Error("Bearer token authentication is not permitted for non-TLS protected (non-https) URLs.");
}
const { token } = await getToken({
abortSignal: webResource.abortSignal,
tracingOptions: {
tracingContext: webResource.tracingContext
}
});
webResource.headers.set(Constants.HeaderConstants.AUTHORIZATION, `Bearer ${token}`);
return this._nextPolicy.sendRequest(webResource);
}
}
return {
create: (nextPolicy, options) => {
return new BearerTokenAuthenticationPolicy(nextPolicy, options);
}
};
}
// Copyright (c) Microsoft Corporation.
/**
* A policy that retries when there's a system error, identified by the codes "ETIMEDOUT", "ESOCKETTIMEDOUT", "ECONNREFUSED", "ECONNRESET" or "ENOENT".
* @param retryCount - Maximum number of retries.
* @param retryInterval - The client retry interval, in milliseconds.
* @param minRetryInterval - The minimum retry interval, in milliseconds.
* @param maxRetryInterval - The maximum retry interval, in milliseconds.
* @returns An instance of the {@link SystemErrorRetryPolicy}
*/
function systemErrorRetryPolicy(retryCount, retryInterval, minRetryInterval, maxRetryInterval) {
return {
create: (nextPolicy, options) => {
return new SystemErrorRetryPolicy(nextPolicy, options, retryCount, retryInterval, minRetryInterval, maxRetryInterval);
},
}
};
}
/**
* A policy that retries when there's a system error, identified by the codes "ETIMEDOUT", "ESOCKETTIMEDOUT", "ECONNREFUSED", "ECONNRESET" or "ENOENT".
* @param retryCount - The client retry count.
* @param retryInterval - The client retry interval, in milliseconds.
* @param minRetryInterval - The minimum retry interval, in milliseconds.
@@ -57834,10 +57293,10 @@ class SystemErrorRetryPolicy extends BaseRequestPolicy {
sendRequest(request) {
return this._nextPolicy
.sendRequest(request.clone())
.catch((error) => retry(this, request, error.response, error));
.catch((error) => retry$1(this, request, error.response, error));
}
}
async function retry(policy, request, operationResponse, err, retryData) {
async function retry$1(policy, request, operationResponse, err, retryData) {
retryData = updateRetryData(policy, retryData, err);
function shouldPolicyRetry(_response, error) {
if (error &&
@@ -57858,7 +57317,7 @@ async function retry(policy, request, operationResponse, err, retryData) {
return policy._nextPolicy.sendRequest(request.clone());
}
catch (nestedErr) {
return retry(policy, request, operationResponse, nestedErr, retryData);
return retry$1(policy, request, operationResponse, nestedErr, retryData);
}
}
else {
@@ -57870,6 +57329,155 @@ async function retry(policy, request, operationResponse, err, retryData) {
}
}
// Copyright (c) Microsoft Corporation.
(function (QueryCollectionFormat) {
QueryCollectionFormat["Csv"] = ",";
QueryCollectionFormat["Ssv"] = " ";
QueryCollectionFormat["Tsv"] = "\t";
QueryCollectionFormat["Pipes"] = "|";
QueryCollectionFormat["Multi"] = "Multi";
})(exports.QueryCollectionFormat || (exports.QueryCollectionFormat = {}));
// Copyright (c) Microsoft Corporation.
/**
* Stores the patterns specified in NO_PROXY environment variable.
* @internal
*/
const globalNoProxyList = [];
let noProxyListLoaded = false;
/** A cache of whether a host should bypass the proxy. */
const globalBypassedMap = new Map();
function loadEnvironmentProxyValue() {
if (!process) {
return undefined;
}
const httpsProxy = getEnvironmentValue(Constants.HTTPS_PROXY);
const allProxy = getEnvironmentValue(Constants.ALL_PROXY);
const httpProxy = getEnvironmentValue(Constants.HTTP_PROXY);
return httpsProxy || allProxy || httpProxy;
}
/**
* Check whether the host of a given `uri` matches any pattern in the no proxy list.
* If there's a match, any request sent to the same host shouldn't have the proxy settings set.
* This implementation is a port of https://github.com/Azure/azure-sdk-for-net/blob/8cca811371159e527159c7eb65602477898683e2/sdk/core/Azure.Core/src/Pipeline/Internal/HttpEnvironmentProxy.cs#L210
*/
function isBypassed(uri, noProxyList, bypassedMap) {
if (noProxyList.length === 0) {
return false;
}
const host = URLBuilder.parse(uri).getHost();
if (bypassedMap === null || bypassedMap === void 0 ? void 0 : bypassedMap.has(host)) {
return bypassedMap.get(host);
}
let isBypassedFlag = false;
for (const pattern of noProxyList) {
if (pattern[0] === ".") {
// This should match either domain it self or any subdomain or host
// .foo.com will match foo.com it self or *.foo.com
if (host.endsWith(pattern)) {
isBypassedFlag = true;
}
else {
if (host.length === pattern.length - 1 && host === pattern.slice(1)) {
isBypassedFlag = true;
}
}
}
else {
if (host === pattern) {
isBypassedFlag = true;
}
}
}
bypassedMap === null || bypassedMap === void 0 ? void 0 : bypassedMap.set(host, isBypassedFlag);
return isBypassedFlag;
}
/**
* @internal
*/
function loadNoProxy() {
const noProxy = getEnvironmentValue(Constants.NO_PROXY);
noProxyListLoaded = true;
if (noProxy) {
return noProxy
.split(",")
.map((item) => item.trim())
.filter((item) => item.length);
}
return [];
}
function getDefaultProxySettings(proxyUrl) {
if (!proxyUrl) {
proxyUrl = loadEnvironmentProxyValue();
if (!proxyUrl) {
return undefined;
}
}
const { username, password, urlWithoutAuth } = extractAuthFromUrl(proxyUrl);
const parsedUrl = URLBuilder.parse(urlWithoutAuth);
const schema = parsedUrl.getScheme() ? parsedUrl.getScheme() + "://" : "";
return {
host: schema + parsedUrl.getHost(),
port: Number.parseInt(parsedUrl.getPort() || "80"),
username,
password
};
}
/**
* A policy that allows one to apply proxy settings to all requests.
* If not passed static settings, they will be retrieved from the HTTPS_PROXY
* or HTTP_PROXY environment variables.
* @param proxySettings - ProxySettings to use on each request.
* @param options - additional settings, for example, custom NO_PROXY patterns
*/
function proxyPolicy(proxySettings, options) {
if (!proxySettings) {
proxySettings = getDefaultProxySettings();
}
if (!noProxyListLoaded) {
globalNoProxyList.push(...loadNoProxy());
}
return {
create: (nextPolicy, requestPolicyOptions) => {
return new ProxyPolicy(nextPolicy, requestPolicyOptions, proxySettings, options === null || options === void 0 ? void 0 : options.customNoProxyList);
}
};
}
function extractAuthFromUrl(url) {
const atIndex = url.indexOf("@");
if (atIndex === -1) {
return { urlWithoutAuth: url };
}
const schemeIndex = url.indexOf("://");
const authStart = schemeIndex !== -1 ? schemeIndex + 3 : 0;
const auth = url.substring(authStart, atIndex);
const colonIndex = auth.indexOf(":");
const hasPassword = colonIndex !== -1;
const username = hasPassword ? auth.substring(0, colonIndex) : auth;
const password = hasPassword ? auth.substring(colonIndex + 1) : undefined;
const urlWithoutAuth = url.substring(0, authStart) + url.substring(atIndex + 1);
return {
username,
password,
urlWithoutAuth
};
}
class ProxyPolicy extends BaseRequestPolicy {
constructor(nextPolicy, options, proxySettings, customNoProxyList) {
super(nextPolicy, options);
this.proxySettings = proxySettings;
this.customNoProxyList = customNoProxyList;
}
sendRequest(request) {
var _a;
if (!request.proxySettings &&
!isBypassed(request.url, (_a = this.customNoProxyList) !== null && _a !== void 0 ? _a : globalNoProxyList, this.customNoProxyList ? undefined : globalBypassedMap)) {
request.proxySettings = this.proxySettings;
}
return this._nextPolicy.sendRequest(request);
}
}
// Copyright (c) Microsoft Corporation.
// Licensed under the MIT license.
/**
@@ -57879,28 +57487,15 @@ const DEFAULT_CLIENT_MAX_RETRY_COUNT = 3;
// Copyright (c) Microsoft Corporation.
const StatusCodes = Constants.HttpConstants.StatusCodes;
/**
* Creates a policy that re-sends the request if the response indicates the request failed because of throttling reasons.
* For example, if the response contains a `Retry-After` header, it will retry sending the request based on the value of that header.
*
* To learn more, please refer to
* https://docs.microsoft.com/en-us/azure/azure-resource-manager/resource-manager-request-limits,
* https://docs.microsoft.com/en-us/azure/azure-subscription-service-limits and
* https://docs.microsoft.com/en-us/azure/virtual-machines/troubleshooting/troubleshooting-throttling-errors
* @returns
*/
function throttlingRetryPolicy() {
return {
create: (nextPolicy, options) => {
return new ThrottlingRetryPolicy(nextPolicy, options);
},
}
};
}
const StandardAbortMessage = "The operation was aborted.";
const StandardAbortMessage$1 = "The operation was aborted.";
/**
* Creates a policy that re-sends the request if the response indicates the request failed because of throttling reasons.
* For example, if the response contains a `Retry-After` header, it will retry sending the request based on the value of that header.
*
* To learn more, please refer to
* https://docs.microsoft.com/en-us/azure/azure-resource-manager/resource-manager-request-limits,
* https://docs.microsoft.com/en-us/azure/azure-subscription-service-limits and
@@ -57931,10 +57526,10 @@ class ThrottlingRetryPolicy extends BaseRequestPolicy {
this.numberOfRetries += 1;
await delay(delayInMs, undefined, {
abortSignal: httpRequest.abortSignal,
abortErrorMsg: StandardAbortMessage,
abortErrorMsg: StandardAbortMessage$1
});
if ((_a = httpRequest.abortSignal) === null || _a === void 0 ? void 0 : _a.aborted) {
throw new abortController.AbortError(StandardAbortMessage);
throw new abortController.AbortError(StandardAbortMessage$1);
}
if (this.numberOfRetries < DEFAULT_CLIENT_MAX_RETRY_COUNT) {
return this.sendRequest(httpRequest);
@@ -57968,26 +57563,77 @@ class ThrottlingRetryPolicy extends BaseRequestPolicy {
}
}
// Copyright (c) Microsoft Corporation.
function signingPolicy(authenticationProvider) {
return {
create: (nextPolicy, options) => {
return new SigningPolicy(nextPolicy, options, authenticationProvider);
}
};
}
class SigningPolicy extends BaseRequestPolicy {
constructor(nextPolicy, options, authenticationProvider) {
super(nextPolicy, options);
this.authenticationProvider = authenticationProvider;
}
signRequest(request) {
return this.authenticationProvider.signRequest(request);
}
sendRequest(request) {
return this.signRequest(request).then((nextRequest) => this._nextPolicy.sendRequest(nextRequest));
}
}
// Copyright (c) Microsoft Corporation.
const DefaultKeepAliveOptions = {
enable: true
};
function keepAlivePolicy(keepAliveOptions) {
return {
create: (nextPolicy, options) => {
return new KeepAlivePolicy(nextPolicy, options, keepAliveOptions || DefaultKeepAliveOptions);
}
};
}
/**
* KeepAlivePolicy is a policy used to control keep alive settings for every request.
*/
class KeepAlivePolicy extends BaseRequestPolicy {
/**
* Creates an instance of KeepAlivePolicy.
*
* @param nextPolicy -
* @param options -
* @param keepAliveOptions -
*/
constructor(nextPolicy, options, keepAliveOptions) {
super(nextPolicy, options);
this.keepAliveOptions = keepAliveOptions;
}
/**
* Sends out request.
*
* @param request -
* @returns
*/
async sendRequest(request) {
request.keepAlive = this.keepAliveOptions.enable;
return this._nextPolicy.sendRequest(request);
}
}
// Copyright (c) Microsoft Corporation.
const createSpan = coreTracing.createSpanFunction({
packagePrefix: "",
namespace: "",
namespace: ""
});
/**
* Creates a policy that wraps outgoing requests with a tracing span.
* @param tracingOptions - Tracing options.
* @returns An instance of the {@link TracingPolicy} class.
*/
function tracingPolicy(tracingOptions = {}) {
return {
create(nextPolicy, options) {
return new TracingPolicy(nextPolicy, options, tracingOptions);
},
}
};
}
/**
* A policy that wraps outgoing requests with a tracing span.
*/
class TracingPolicy extends BaseRequestPolicy {
constructor(nextPolicy, options, tracingOptions) {
super(nextPolicy, options);
@@ -58014,13 +57660,14 @@ class TracingPolicy extends BaseRequestPolicy {
tryCreateSpan(request) {
var _a;
try {
const path = URLBuilder.parse(request.url).getPath() || "/";
// Passing spanOptions as part of tracingOptions to maintain compatibility @azure/core-tracing@preview.13 and earlier.
// We can pass this as a separate parameter once we upgrade to the latest core-tracing.
const { span } = createSpan(`HTTP ${request.method}`, {
const { span } = createSpan(path, {
tracingOptions: {
spanOptions: Object.assign(Object.assign({}, request.spanOptions), { kind: coreTracing.SpanKind.CLIENT }),
tracingContext: request.tracingContext,
},
tracingContext: request.tracingContext
}
});
// If the span is not recording, don't do any more work.
if (!span.isRecording()) {
@@ -58034,7 +57681,7 @@ class TracingPolicy extends BaseRequestPolicy {
span.setAttributes({
"http.method": request.method,
"http.url": request.url,
requestId: request.requestId,
requestId: request.requestId
});
if (this.userAgent) {
span.setAttribute("http.user_agent", this.userAgent);
@@ -58061,7 +57708,7 @@ class TracingPolicy extends BaseRequestPolicy {
try {
span.setStatus({
code: coreTracing.SpanStatusCode.ERROR,
message: err.message,
message: err.message
});
if (err.statusCode) {
span.setAttribute("http.status_code", err.statusCode);
@@ -58080,7 +57727,7 @@ class TracingPolicy extends BaseRequestPolicy {
span.setAttribute("serviceRequestId", serviceRequestId);
}
span.setStatus({
code: coreTracing.SpanStatusCode.OK,
code: coreTracing.SpanStatusCode.OK
});
span.end();
}
@@ -58090,6 +57737,88 @@ class TracingPolicy extends BaseRequestPolicy {
}
}
// Copyright (c) Microsoft Corporation.
/**
* Returns a request policy factory that can be used to create an instance of
* {@link DisableResponseDecompressionPolicy}.
*/
function disableResponseDecompressionPolicy() {
return {
create: (nextPolicy, options) => {
return new DisableResponseDecompressionPolicy(nextPolicy, options);
}
};
}
/**
* A policy to disable response decompression according to Accept-Encoding header
* https://developer.mozilla.org/en-US/docs/Web/HTTP/Headers/Accept-Encoding
*/
class DisableResponseDecompressionPolicy extends BaseRequestPolicy {
/**
* Creates an instance of DisableResponseDecompressionPolicy.
*
* @param nextPolicy -
* @param options -
*/
// The parent constructor is protected.
/* eslint-disable-next-line @typescript-eslint/no-useless-constructor */
constructor(nextPolicy, options) {
super(nextPolicy, options);
}
/**
* Sends out request.
*
* @param request -
* @returns
*/
async sendRequest(request) {
request.decompressResponse = false;
return this._nextPolicy.sendRequest(request);
}
}
// Copyright (c) Microsoft Corporation.
function ndJsonPolicy() {
return {
create: (nextPolicy, options) => {
return new NdJsonPolicy(nextPolicy, options);
}
};
}
/**
* NdJsonPolicy that formats a JSON array as newline-delimited JSON
*/
class NdJsonPolicy extends BaseRequestPolicy {
/**
* Creates an instance of KeepAlivePolicy.
*/
constructor(nextPolicy, options) {
super(nextPolicy, options);
}
/**
* Sends a request.
*/
async sendRequest(request) {
// There currently isn't a good way to bypass the serializer
if (typeof request.body === "string" && request.body.startsWith("[")) {
const body = JSON.parse(request.body);
if (Array.isArray(body)) {
request.body = body.map((item) => JSON.stringify(item) + "\n").join("");
}
}
return this._nextPolicy.sendRequest(request);
}
}
// Copyright (c) Microsoft Corporation.
let cachedHttpClient;
function getCachedDefaultHttpClient() {
if (!cachedHttpClient) {
cachedHttpClient = new NodeFetchHttpClient();
}
return cachedHttpClient;
}
// Copyright (c) Microsoft Corporation.
/**
* ServiceClient sends service requests and receives responses.
@@ -58139,7 +57868,7 @@ class ServiceClient {
bearerTokenPolicyFactory = bearerTokenAuthenticationPolicy(credentials, credentialScopes);
}
return bearerTokenPolicyFactory.create(nextPolicy, createOptions);
},
}
};
};
authPolicyFactory = wrappedPolicyFactory();
@@ -58374,7 +58103,7 @@ function serializeRequestBody(serviceClient, httpRequest, operationArguments, op
const updatedOptions = {
rootName: (_c = serializerOptions.rootName) !== null && _c !== void 0 ? _c : "",
includeRoot: (_d = serializerOptions.includeRoot) !== null && _d !== void 0 ? _d : false,
xmlCharKey: (_e = serializerOptions.xmlCharKey) !== null && _e !== void 0 ? _e : XML_CHARKEY,
xmlCharKey: (_e = serializerOptions.xmlCharKey) !== null && _e !== void 0 ? _e : XML_CHARKEY
};
const xmlCharKey = serializerOptions.xmlCharKey;
if (operationSpec.requestBody && operationSpec.requestBody.mapper) {
@@ -58393,13 +58122,13 @@ function serializeRequestBody(serviceClient, httpRequest, operationArguments, op
if (typeName === MapperType.Sequence) {
httpRequest.body = stringifyXML(prepareXMLRootList(value, xmlElementName || xmlName || serializedName, xmlnsKey, xmlNamespace), {
rootName: xmlName || serializedName,
xmlCharKey,
xmlCharKey
});
}
else if (!isStream) {
httpRequest.body = stringifyXML(value, {
rootName: xmlName || serializedName,
xmlCharKey,
xmlCharKey
});
}
}
@@ -58483,12 +58212,6 @@ function createDefaultRequestPolicyFactories(authPolicyFactory, options) {
factories.push(logPolicy({ logger: logger.info }));
return factories;
}
/**
* Creates an HTTP pipeline based on the given options.
* @param pipelineOptions - Defines options that are used to configure policies in the HTTP pipeline for an SDK client.
* @param authPolicyFactory - An optional authentication policy factory to use for signing requests.
* @returns A set of options that can be passed to create a new {@link ServiceClient}.
*/
function createPipelineFromOptions(pipelineOptions, authPolicyFactory) {
const requestPolicyFactories = [];
if (pipelineOptions.sendStreamingJson) {
@@ -58527,7 +58250,7 @@ function createPipelineFromOptions(pipelineOptions, authPolicyFactory) {
}
return {
httpClient: pipelineOptions.httpClient,
requestPolicyFactories,
requestPolicyFactories
};
}
function getOperationArgumentValueFromParameter(serviceClient, operationArguments, parameter, serializer) {
@@ -58603,18 +58326,12 @@ function getPropertyFromParameterPath(parent, parameterPath) {
}
return result;
}
/**
* Parses an {@link HttpOperationResponse} into a normalized HTTP response object ({@link RestResponse}).
* @param _response - Wrapper object for http response.
* @param responseSpec - Mappers for how to parse the response properties.
* @returns - A normalized response object.
*/
function flattenResponse(_response, responseSpec) {
const parsedHeaders = _response.parsedHeaders;
const bodyMapper = responseSpec && responseSpec.bodyMapper;
const addOperationResponse = (obj) => {
return Object.defineProperty(obj, "_response", {
value: _response,
value: _response
});
};
if (bodyMapper) {
@@ -58700,16 +58417,9 @@ class ExpiringAccessTokenCache {
this.cachedToken = undefined;
this.tokenRefreshBufferMs = tokenRefreshBufferMs;
}
/**
* Saves an access token into the internal in-memory cache.
* @param accessToken - Access token or undefined to clear the cache.
*/
setCachedToken(accessToken) {
this.cachedToken = accessToken;
}
/**
* Returns the cached access token, or `undefined` if one is not cached or the cached one is expiring soon.
*/
getCachedToken() {
if (this.cachedToken &&
Date.now() + this.tokenRefreshBufferMs >= this.cachedToken.expiresOnTimestamp) {
@@ -58768,9 +58478,6 @@ class AccessTokenRefresher {
// Copyright (c) Microsoft Corporation.
const HeaderConstants = Constants.HeaderConstants;
const DEFAULT_AUTHORIZATION_SCHEME = "Basic";
/**
* A simple {@link ServiceClientCredential} that authenticates with a username and a password.
*/
class BasicAuthenticationCredentials {
/**
* Creates a new BasicAuthenticationCredentials object.
@@ -58780,10 +58487,6 @@ class BasicAuthenticationCredentials {
* @param authorizationScheme - The authorization scheme.
*/
constructor(userName, password, authorizationScheme = DEFAULT_AUTHORIZATION_SCHEME) {
/**
* Authorization scheme. Defaults to "Basic".
* More information about authorization schemes is available here: https://developer.mozilla.org/docs/Web/HTTP/Authentication#authentication_schemes
*/
this.authorizationScheme = DEFAULT_AUTHORIZATION_SCHEME;
if (userName === null || userName === undefined || typeof userName.valueOf() !== "string") {
throw new Error("userName cannot be null or undefined and must be of type string.");
@@ -58863,9 +58566,6 @@ class ApiKeyCredentials {
}
// Copyright (c) Microsoft Corporation.
/**
* A {@link TopicCredentials} object used for Azure Event Grid.
*/
class TopicCredentials extends ApiKeyCredentials {
/**
* Creates a new EventGrid TopicCredentials object.
@@ -58878,8 +58578,8 @@ class TopicCredentials extends ApiKeyCredentials {
}
const options = {
inHeader: {
"aeg-sas-key": topicKey,
},
"aeg-sas-key": topicKey
}
};
super(options);
}
@@ -58887,7 +58587,9 @@ class TopicCredentials extends ApiKeyCredentials {
Object.defineProperty(exports, 'isTokenCredential', {
enumerable: true,
get: function () { return coreAuth.isTokenCredential; }
get: function () {
return coreAuth.isTokenCredential;
}
});
exports.AccessTokenRefresher = AccessTokenRefresher;
exports.ApiKeyCredentials = ApiKeyCredentials;
+1235 -1538
View File
@@ -3419,15 +3419,14 @@ var DiagAPI = /** @class */ (function () {
function DiagAPI() {
function _logProxy(funcName) {
return function () {
var args = [];
for (var _i = 0; _i < arguments.length; _i++) {
args[_i] = arguments[_i];
}
var logger = global_utils_1.getGlobal('diag');
// shortcut if logger not set
if (!logger)
return;
return logger[funcName].apply(logger, args);
return logger[funcName].apply(logger,
// work around Function.prototype.apply types
// eslint-disable-next-line @typescript-eslint/no-explicit-any
arguments);
};
}
// Using self local variable for minification purposes as 'this' cannot be minified
@@ -5112,22 +5111,17 @@ var DiagConsoleLogger = /** @class */ (function () {
function DiagConsoleLogger() {
function _consoleFunc(funcName) {
return function () {
var args = [];
for (var _i = 0; _i < arguments.length; _i++) {
args[_i] = arguments[_i];
}
var orgArguments = arguments;
if (console) {
// Some environments only expose the console when the F12 developer console is open
// eslint-disable-next-line no-console
var theFunc = console[funcName];
if (typeof theFunc !== 'function') {
// Not all environments support all functions
// eslint-disable-next-line no-console
theFunc = console.log;
}
// One last final check
if (typeof theFunc === 'function') {
return theFunc.apply(console, args);
return theFunc.apply(console, orgArguments);
}
}
};
@@ -8953,7 +8947,7 @@ function expand(str, isTop) {
XMLDocumentCB = __webpack_require__(768);
XMLStringWriter = __webpack_require__(750);
XMLStringWriter = __webpack_require__(347);
XMLStreamWriter = __webpack_require__(458);
@@ -9401,7 +9395,47 @@ var SamplingDecision;
/* 344 */,
/* 345 */,
/* 346 */,
/* 347 */,
/* 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) {
@@ -36347,8 +36381,9 @@ function getInputAsArray(name, options) {
return core
.getInput(name, options)
.split("\n")
.map(s => s.trim())
.filter(x => x !== "");
.map(s => s.replace(/^!\s+/, "!").trim())
.filter(x => x !== "")
.sort();
}
exports.getInputAsArray = getInputAsArray;
function getInputAsInt(name, options) {
@@ -37869,17 +37904,9 @@ AbortError.prototype = Object.create(Error.prototype);
AbortError.prototype.constructor = AbortError;
AbortError.prototype.name = 'AbortError';
const URL$1 = Url.URL || whatwgUrl.URL;
// fix an issue where "PassThrough", "resolve" aren't a named export for node <10
const PassThrough$1 = Stream.PassThrough;
const isDomainOrSubdomain = function isDomainOrSubdomain(destination, original) {
const orig = new URL$1(original).hostname;
const dest = new URL$1(destination).hostname;
return orig === dest || orig[orig.length - dest.length - 1] === '.' && orig.endsWith(dest);
};
const resolve_url = Url.resolve;
/**
* Fetch function
@@ -37967,19 +37994,7 @@ function fetch(url, opts) {
const location = headers.get('Location');
// HTTP fetch step 5.3
let locationURL = null;
try {
locationURL = location === null ? null : new URL$1(location, request.url).toString();
} catch (err) {
// error here can only be invalid URL in Location: header
// do not throw when options.redirect == manual
// let the user extract the errorneous redirect URL
if (request.redirect !== 'manual') {
reject(new FetchError(`uri requested responds with an invalid redirect URL: ${location}`, 'invalid-redirect'));
finalize();
return;
}
}
const locationURL = location === null ? null : resolve_url(request.url, location);
// HTTP fetch step 5.5
switch (request.redirect) {
@@ -38027,12 +38042,6 @@ function fetch(url, opts) {
size: request.size
};
if (!isDomainOrSubdomain(request.url, locationURL)) {
for (const name of ['authorization', 'www-authenticate', 'cookie', 'cookie2']) {
requestOpts.headers.delete(name);
}
}
// 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'));
@@ -39174,7 +39183,7 @@ function getPagedAsyncIterator(pagedResult) {
},
byPage: (_a = pagedResult === null || pagedResult === void 0 ? void 0 : pagedResult.byPage) !== null && _a !== void 0 ? _a : ((settings) => {
return getPageAsyncIterator(pagedResult, settings === null || settings === void 0 ? void 0 : settings.maxPageSize);
}),
})
};
}
function getItemAsyncIterator(pagedResult, maxPageSize) {
@@ -40394,7 +40403,7 @@ CombinedStream.prototype._emitError = function(err) {
XMLStringifier = __webpack_require__(602);
XMLStringWriter = __webpack_require__(750);
XMLStringWriter = __webpack_require__(347);
module.exports = XMLDocument = (function(superClass) {
extend(XMLDocument, superClass);
@@ -40686,7 +40695,7 @@ exports.baggageEntryMetadataSymbol = Symbol('BaggageEntryMetadata');
* POSSIBILITY OF SUCH DAMAGE.
*/
const psl = __webpack_require__(632);
const psl = __webpack_require__(750);
function getPublicSuffix(domain) {
return psl.get(domain);
@@ -41939,282 +41948,7 @@ exports.wrapSpanContext = wrapSpanContext;
module.exports = require("net");
/***/ }),
/* 632 */
/***/ (function(__unusedmodule, exports, __webpack_require__) {
"use strict";
/*eslint no-var:0, prefer-arrow-callback: 0, object-shorthand: 0 */
var Punycode = __webpack_require__(815);
var internals = {};
//
// Read rules from file.
//
internals.rules = __webpack_require__(50).map(function (rule) {
return {
rule: rule,
suffix: rule.replace(/^(\*\.|\!)/, ''),
punySuffix: -1,
wildcard: rule.charAt(0) === '*',
exception: rule.charAt(0) === '!'
};
});
//
// Check is given string ends with `suffix`.
//
internals.endsWith = function (str, suffix) {
return str.indexOf(suffix, str.length - suffix.length) !== -1;
};
//
// Find rule for a given domain.
//
internals.findRule = function (domain) {
var punyDomain = Punycode.toASCII(domain);
return internals.rules.reduce(function (memo, rule) {
if (rule.punySuffix === -1){
rule.punySuffix = Punycode.toASCII(rule.suffix);
}
if (!internals.endsWith(punyDomain, '.' + rule.punySuffix) && punyDomain !== rule.punySuffix) {
return memo;
}
// This has been commented out as it never seems to run. This is because
// sub tlds always appear after their parents and we never find a shorter
// match.
//if (memo) {
// var memoSuffix = Punycode.toASCII(memo.suffix);
// if (memoSuffix.length >= punySuffix.length) {
// return memo;
// }
//}
return rule;
}, null);
};
//
// Error codes and messages.
//
exports.errorCodes = {
DOMAIN_TOO_SHORT: 'Domain name too short.',
DOMAIN_TOO_LONG: 'Domain name too long. It should be no more than 255 chars.',
LABEL_STARTS_WITH_DASH: 'Domain name label can not start with a dash.',
LABEL_ENDS_WITH_DASH: 'Domain name label can not end with a dash.',
LABEL_TOO_LONG: 'Domain name label should be at most 63 chars long.',
LABEL_TOO_SHORT: 'Domain name label should be at least 1 character long.',
LABEL_INVALID_CHARS: 'Domain name label can only contain alphanumeric characters or dashes.'
};
//
// Validate domain name and throw if not valid.
//
// From wikipedia:
//
// Hostnames are composed of series of labels concatenated with dots, as are all
// domain names. Each label must be between 1 and 63 characters long, and the
// entire hostname (including the delimiting dots) has a maximum of 255 chars.
//
// Allowed chars:
//
// * `a-z`
// * `0-9`
// * `-` but not as a starting or ending character
// * `.` as a separator for the textual portions of a domain name
//
// * http://en.wikipedia.org/wiki/Domain_name
// * http://en.wikipedia.org/wiki/Hostname
//
internals.validate = function (input) {
// Before we can validate we need to take care of IDNs with unicode chars.
var ascii = Punycode.toASCII(input);
if (ascii.length < 1) {
return 'DOMAIN_TOO_SHORT';
}
if (ascii.length > 255) {
return 'DOMAIN_TOO_LONG';
}
// Check each part's length and allowed chars.
var labels = ascii.split('.');
var label;
for (var i = 0; i < labels.length; ++i) {
label = labels[i];
if (!label.length) {
return 'LABEL_TOO_SHORT';
}
if (label.length > 63) {
return 'LABEL_TOO_LONG';
}
if (label.charAt(0) === '-') {
return 'LABEL_STARTS_WITH_DASH';
}
if (label.charAt(label.length - 1) === '-') {
return 'LABEL_ENDS_WITH_DASH';
}
if (!/^[a-z0-9\-]+$/.test(label)) {
return 'LABEL_INVALID_CHARS';
}
}
};
//
// Public API
//
//
// Parse domain.
//
exports.parse = function (input) {
if (typeof input !== 'string') {
throw new TypeError('Domain name must be a string.');
}
// Force domain to lowercase.
var domain = input.slice(0).toLowerCase();
// Handle FQDN.
// TODO: Simply remove trailing dot?
if (domain.charAt(domain.length - 1) === '.') {
domain = domain.slice(0, domain.length - 1);
}
// Validate and sanitise input.
var error = internals.validate(domain);
if (error) {
return {
input: input,
error: {
message: exports.errorCodes[error],
code: error
}
};
}
var parsed = {
input: input,
tld: null,
sld: null,
domain: null,
subdomain: null,
listed: false
};
var domainParts = domain.split('.');
// Non-Internet TLD
if (domainParts[domainParts.length - 1] === 'local') {
return parsed;
}
var handlePunycode = function () {
if (!/xn--/.test(domain)) {
return parsed;
}
if (parsed.domain) {
parsed.domain = Punycode.toASCII(parsed.domain);
}
if (parsed.subdomain) {
parsed.subdomain = Punycode.toASCII(parsed.subdomain);
}
return parsed;
};
var rule = internals.findRule(domain);
// Unlisted tld.
if (!rule) {
if (domainParts.length < 2) {
return parsed;
}
parsed.tld = domainParts.pop();
parsed.sld = domainParts.pop();
parsed.domain = [parsed.sld, parsed.tld].join('.');
if (domainParts.length) {
parsed.subdomain = domainParts.pop();
}
return handlePunycode();
}
// At this point we know the public suffix is listed.
parsed.listed = true;
var tldParts = rule.suffix.split('.');
var privateParts = domainParts.slice(0, domainParts.length - tldParts.length);
if (rule.exception) {
privateParts.push(tldParts.shift());
}
parsed.tld = tldParts.join('.');
if (!privateParts.length) {
return handlePunycode();
}
if (rule.wildcard) {
tldParts.unshift(privateParts.pop());
parsed.tld = tldParts.join('.');
}
if (!privateParts.length) {
return handlePunycode();
}
parsed.sld = privateParts.pop();
parsed.domain = [parsed.sld, parsed.tld].join('.');
if (privateParts.length) {
parsed.subdomain = privateParts.join('.');
}
return handlePunycode();
};
//
// Get domain.
//
exports.get = function (domain) {
if (!domain) {
return null;
}
return exports.parse(domain).domain || null;
};
//
// Check whether domain belongs to a known public suffix.
//
exports.isValid = function (domain) {
var parsed = exports.parse(domain);
return Boolean(parsed.domain && parsed.listed);
};
/***/ }),
/* 632 */,
/* 633 */,
/* 634 */,
/* 635 */,
@@ -45165,15 +44899,11 @@ const cache = __importStar(__webpack_require__(692));
const core = __importStar(__webpack_require__(470));
const constants_1 = __webpack_require__(196);
const utils = __importStar(__webpack_require__(443));
// Catch and log any unhandled exceptions. These exceptions can leak out of the uploadChunk method in
// @actions/toolkit when a failed upload closes the file descriptor causing any in-process reads to
// throw an uncaught exception. Instead of failing this action, just warn.
process.on("uncaughtException", e => utils.logWarning(e.message));
function run() {
return __awaiter(this, void 0, void 0, function* () {
try {
if (utils.isGhes()) {
utils.logWarning("Cache action is not supported on GHES. See https://github.com/actions/cache/issues/505 for more details");
utils.logWarning("Cache action is not supported on GHES");
return;
}
if (!utils.isValidEvent()) {
@@ -45198,7 +44928,6 @@ function run() {
yield cache.saveCache(cachePaths, primaryKey, {
uploadChunkSize: utils.getInputAsInt(constants_1.Inputs.UploadChunkSize)
});
core.info(`Cache saved with key: ${primaryKey}`);
}
catch (error) {
if (error.name === cache.ValidationError.name) {
@@ -46111,43 +45840,278 @@ module.exports = require("fs");
/* 748 */,
/* 749 */,
/* 750 */
/***/ (function(module, __unusedexports, __webpack_require__) {
/***/ (function(__unusedmodule, exports, __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;
"use strict";
/*eslint no-var:0, prefer-arrow-callback: 0, object-shorthand: 0 */
XMLWriterBase = __webpack_require__(423);
module.exports = XMLStringWriter = (function(superClass) {
extend(XMLStringWriter, superClass);
function XMLStringWriter(options) {
XMLStringWriter.__super__.constructor.call(this, options);
var Punycode = __webpack_require__(815);
var internals = {};
//
// Read rules from file.
//
internals.rules = __webpack_require__(50).map(function (rule) {
return {
rule: rule,
suffix: rule.replace(/^(\*\.|\!)/, ''),
punySuffix: -1,
wildcard: rule.charAt(0) === '*',
exception: rule.charAt(0) === '!'
};
});
//
// Check is given string ends with `suffix`.
//
internals.endsWith = function (str, suffix) {
return str.indexOf(suffix, str.length - suffix.length) !== -1;
};
//
// Find rule for a given domain.
//
internals.findRule = function (domain) {
var punyDomain = Punycode.toASCII(domain);
return internals.rules.reduce(function (memo, rule) {
if (rule.punySuffix === -1){
rule.punySuffix = Punycode.toASCII(rule.suffix);
}
if (!internals.endsWith(punyDomain, '.' + rule.punySuffix) && punyDomain !== rule.punySuffix) {
return memo;
}
// This has been commented out as it never seems to run. This is because
// sub tlds always appear after their parents and we never find a shorter
// match.
//if (memo) {
// var memoSuffix = Punycode.toASCII(memo.suffix);
// if (memoSuffix.length >= punySuffix.length) {
// return memo;
// }
//}
return rule;
}, null);
};
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);
//
// Error codes and messages.
//
exports.errorCodes = {
DOMAIN_TOO_SHORT: 'Domain name too short.',
DOMAIN_TOO_LONG: 'Domain name too long. It should be no more than 255 chars.',
LABEL_STARTS_WITH_DASH: 'Domain name label can not start with a dash.',
LABEL_ENDS_WITH_DASH: 'Domain name label can not end with a dash.',
LABEL_TOO_LONG: 'Domain name label should be at most 63 chars long.',
LABEL_TOO_SHORT: 'Domain name label should be at least 1 character long.',
LABEL_INVALID_CHARS: 'Domain name label can only contain alphanumeric characters or dashes.'
};
//
// Validate domain name and throw if not valid.
//
// From wikipedia:
//
// Hostnames are composed of series of labels concatenated with dots, as are all
// domain names. Each label must be between 1 and 63 characters long, and the
// entire hostname (including the delimiting dots) has a maximum of 255 chars.
//
// Allowed chars:
//
// * `a-z`
// * `0-9`
// * `-` but not as a starting or ending character
// * `.` as a separator for the textual portions of a domain name
//
// * http://en.wikipedia.org/wiki/Domain_name
// * http://en.wikipedia.org/wiki/Hostname
//
internals.validate = function (input) {
// Before we can validate we need to take care of IDNs with unicode chars.
var ascii = Punycode.toASCII(input);
if (ascii.length < 1) {
return 'DOMAIN_TOO_SHORT';
}
if (ascii.length > 255) {
return 'DOMAIN_TOO_LONG';
}
// Check each part's length and allowed chars.
var labels = ascii.split('.');
var label;
for (var i = 0; i < labels.length; ++i) {
label = labels[i];
if (!label.length) {
return 'LABEL_TOO_SHORT';
}
if (label.length > 63) {
return 'LABEL_TOO_LONG';
}
if (label.charAt(0) === '-') {
return 'LABEL_STARTS_WITH_DASH';
}
if (label.charAt(label.length - 1) === '-') {
return 'LABEL_ENDS_WITH_DASH';
}
if (!/^[a-z0-9\-]+$/.test(label)) {
return 'LABEL_INVALID_CHARS';
}
}
};
//
// Public API
//
//
// Parse domain.
//
exports.parse = function (input) {
if (typeof input !== 'string') {
throw new TypeError('Domain name must be a string.');
}
// Force domain to lowercase.
var domain = input.slice(0).toLowerCase();
// Handle FQDN.
// TODO: Simply remove trailing dot?
if (domain.charAt(domain.length - 1) === '.') {
domain = domain.slice(0, domain.length - 1);
}
// Validate and sanitise input.
var error = internals.validate(domain);
if (error) {
return {
input: input,
error: {
message: exports.errorCodes[error],
code: error
}
if (options.pretty && r.slice(-options.newline.length) === options.newline) {
r = r.slice(0, -options.newline.length);
}
return r;
};
}
return XMLStringWriter;
var parsed = {
input: input,
tld: null,
sld: null,
domain: null,
subdomain: null,
listed: false
};
})(XMLWriterBase);
var domainParts = domain.split('.');
}).call(this);
// Non-Internet TLD
if (domainParts[domainParts.length - 1] === 'local') {
return parsed;
}
var handlePunycode = function () {
if (!/xn--/.test(domain)) {
return parsed;
}
if (parsed.domain) {
parsed.domain = Punycode.toASCII(parsed.domain);
}
if (parsed.subdomain) {
parsed.subdomain = Punycode.toASCII(parsed.subdomain);
}
return parsed;
};
var rule = internals.findRule(domain);
// Unlisted tld.
if (!rule) {
if (domainParts.length < 2) {
return parsed;
}
parsed.tld = domainParts.pop();
parsed.sld = domainParts.pop();
parsed.domain = [parsed.sld, parsed.tld].join('.');
if (domainParts.length) {
parsed.subdomain = domainParts.pop();
}
return handlePunycode();
}
// At this point we know the public suffix is listed.
parsed.listed = true;
var tldParts = rule.suffix.split('.');
var privateParts = domainParts.slice(0, domainParts.length - tldParts.length);
if (rule.exception) {
privateParts.push(tldParts.shift());
}
parsed.tld = tldParts.join('.');
if (!privateParts.length) {
return handlePunycode();
}
if (rule.wildcard) {
tldParts.unshift(privateParts.pop());
parsed.tld = tldParts.join('.');
}
if (!privateParts.length) {
return handlePunycode();
}
parsed.sld = privateParts.pop();
parsed.domain = [parsed.sld, parsed.tld].join('.');
if (privateParts.length) {
parsed.subdomain = privateParts.join('.');
}
return handlePunycode();
};
//
// Get domain.
//
exports.get = function (domain) {
if (!domain) {
return null;
}
return exports.parse(domain).domain || null;
};
//
// Check whether domain belongs to a known public suffix.
//
exports.isValid = function (domain) {
var parsed = exports.parse(domain);
return Boolean(parsed.domain && parsed.listed);
};
/***/ }),
@@ -46303,7 +46267,7 @@ module.exports = function(dst, src) {
XMLStringifier = __webpack_require__(602);
XMLStringWriter = __webpack_require__(750);
XMLStringWriter = __webpack_require__(347);
WriterState = __webpack_require__(541);
@@ -48288,7 +48252,7 @@ module.exports = v4;
Object.defineProperty(exports, "__esModule", { value: true });
exports.VERSION = void 0;
// this is autogenerated file, see scripts/version-update.js
exports.VERSION = '1.0.4';
exports.VERSION = '1.0.3';
//# sourceMappingURL=version.js.map
/***/ }),
@@ -49606,7 +49570,7 @@ class Poller {
if (!this.isDone()) {
this.operation = await this.operation.update({
abortSignal: options.abortSignal,
fireProgress: this.fireProgress.bind(this),
fireProgress: this.fireProgress.bind(this)
});
if (this.isDone() && this.resolve) {
// If the poller has finished polling, this means we now have a result.
@@ -49805,6 +49769,13 @@ class Poller {
}
}
// Copyright (c) Microsoft Corporation.
/**
* The `@azure/logger` configuration for this package.
* @internal
*/
const logger = logger$1.createClientLogger("core-lro");
// Copyright (c) Microsoft Corporation.
// Licensed under the MIT license.
/**
@@ -49832,20 +49803,20 @@ function inferLroMode(requestPath, requestMethod, rawResponse) {
mode: "AzureAsync",
resourceLocation: requestMethod === "PUT"
? requestPath
: requestMethod === "POST" || requestMethod === "PATCH"
: requestMethod === "POST"
? getLocation(rawResponse)
: undefined,
: undefined
};
}
else if (getLocation(rawResponse) !== undefined ||
getOperationLocation(rawResponse) !== undefined) {
return {
mode: "Location",
mode: "Location"
};
}
else if (["PUT", "PATCH"].includes(requestMethod)) {
return {
mode: "Body",
mode: "Body"
};
}
return {};
@@ -49878,35 +49849,6 @@ function isUnexpectedPollingResponse(rawResponse) {
const successStates = ["succeeded"];
const failureStates = ["failed", "canceled", "cancelled"];
// Copyright (c) Microsoft Corporation.
function getProvisioningState(rawResponse) {
var _a, _b;
const { properties, provisioningState } = (_a = rawResponse.body) !== null && _a !== void 0 ? _a : {};
const state = (_b = properties === null || properties === void 0 ? void 0 : properties.provisioningState) !== null && _b !== void 0 ? _b : provisioningState;
return typeof state === "string" ? state.toLowerCase() : "succeeded";
}
function isBodyPollingDone(rawResponse) {
const state = getProvisioningState(rawResponse);
if (isUnexpectedPollingResponse(rawResponse) || failureStates.includes(state)) {
throw new Error(`The long running operation has failed. The provisioning state: ${state}.`);
}
return successStates.includes(state);
}
/**
* Creates a polling strategy based on BodyPolling which uses the provisioning state
* from the result to determine the current operation state
*/
function processBodyPollingOperationResult(response) {
return Object.assign(Object.assign({}, response), { done: isBodyPollingDone(response.rawResponse) });
}
// Copyright (c) Microsoft Corporation.
/**
* The `@azure/logger` configuration for this package.
* @internal
*/
const logger = logger$1.createClientLogger("core-lro");
// Copyright (c) Microsoft Corporation.
function getResponseStatus(rawResponse) {
var _a;
@@ -49951,6 +49893,28 @@ function processAzureAsyncOperationResult(lro, resourceLocation, lroResourceLoca
};
}
// Copyright (c) Microsoft Corporation.
function getProvisioningState(rawResponse) {
var _a, _b;
const { properties, provisioningState } = (_a = rawResponse.body) !== null && _a !== void 0 ? _a : {};
const state = (_b = properties === null || properties === void 0 ? void 0 : properties.provisioningState) !== null && _b !== void 0 ? _b : provisioningState;
return typeof state === "string" ? state.toLowerCase() : "succeeded";
}
function isBodyPollingDone(rawResponse) {
const state = getProvisioningState(rawResponse);
if (isUnexpectedPollingResponse(rawResponse) || failureStates.includes(state)) {
throw new Error(`The long running operation has failed. The provisioning state: ${state}.`);
}
return successStates.includes(state);
}
/**
* Creates a polling strategy based on BodyPolling which uses the provisioning state
* from the result to determine the current operation state
*/
function processBodyPollingOperationResult(response) {
return Object.assign(Object.assign({}, response), { done: isBodyPollingDone(response.rawResponse) });
}
// Copyright (c) Microsoft Corporation.
function isLocationPollingDone(rawResponse) {
return !isUnexpectedPollingResponse(rawResponse) && rawResponse.statusCode !== 202;
@@ -49993,11 +49957,10 @@ function createPoll(lroPrimitives) {
const response = await lroPrimitives.sendPollRequest(path);
const retryAfter = response.rawResponse.headers["retry-after"];
if (retryAfter !== undefined) {
// Retry-After header value is either in HTTP date format, or in seconds
const retryAfterInSeconds = parseInt(retryAfter);
pollerConfig.intervalInMs = isNaN(retryAfterInSeconds)
const retryAfterInMs = parseInt(retryAfter);
pollerConfig.intervalInMs = isNaN(retryAfterInMs)
? calculatePollingIntervalFromDate(new Date(retryAfter), pollerConfig.intervalInMs)
: retryAfterInSeconds * 1000;
: retryAfterInMs;
}
return getLroStatusFromResponse(response);
};
@@ -50120,7 +50083,7 @@ class GenericPollOperation {
*/
toString() {
return JSON.stringify({
state: this.state,
state: this.state
});
}
}
@@ -53414,54 +53377,27 @@ exports.isCompatible = _makeCompatibilityCheck(version_1.VERSION);
Object.defineProperty(exports, '__esModule', { value: true });
function _interopDefault (ex) { return (ex && (typeof ex === 'object') && 'default' in ex) ? ex['default'] : ex; }
var uuid = __webpack_require__(585);
var util = __webpack_require__(669);
var tslib = __webpack_require__(865);
var xml2js = __webpack_require__(992);
var abortController = __webpack_require__(106);
var logger$1 = __webpack_require__(928);
var coreAuth = __webpack_require__(229);
var os = __webpack_require__(87);
var tough = __webpack_require__(393);
var http = __webpack_require__(605);
var https = __webpack_require__(211);
var tough = __webpack_require__(393);
var tunnel = __webpack_require__(413);
var stream = __webpack_require__(794);
var FormData = __webpack_require__(790);
var node_fetch = __webpack_require__(454);
var coreTracing = __webpack_require__(263);
var node_fetch = _interopDefault(__webpack_require__(454));
var abortController = __webpack_require__(106);
var FormData = _interopDefault(__webpack_require__(790));
var util = __webpack_require__(669);
var url = __webpack_require__(835);
var stream = __webpack_require__(794);
var logger$1 = __webpack_require__(928);
var tunnel = __webpack_require__(413);
var tslib = __webpack_require__(865);
var coreAuth = __webpack_require__(229);
var xml2js = __webpack_require__(992);
var os = __webpack_require__(87);
var coreTracing = __webpack_require__(263);
__webpack_require__(71);
function _interopDefaultLegacy (e) { return e && typeof e === 'object' && 'default' in e ? e : { 'default': e }; }
function _interopNamespace(e) {
if (e && e.__esModule) return e;
var n = Object.create(null);
if (e) {
Object.keys(e).forEach(function (k) {
if (k !== 'default') {
var d = Object.getOwnPropertyDescriptor(e, k);
Object.defineProperty(n, k, d.get ? d : {
enumerable: true,
get: function () { return e[k]; }
});
}
});
}
n["default"] = e;
return Object.freeze(n);
}
var xml2js__namespace = /*#__PURE__*/_interopNamespace(xml2js);
var os__namespace = /*#__PURE__*/_interopNamespace(os);
var http__namespace = /*#__PURE__*/_interopNamespace(http);
var https__namespace = /*#__PURE__*/_interopNamespace(https);
var tough__namespace = /*#__PURE__*/_interopNamespace(tough);
var tunnel__namespace = /*#__PURE__*/_interopNamespace(tunnel);
var FormData__default = /*#__PURE__*/_interopDefaultLegacy(FormData);
var node_fetch__default = /*#__PURE__*/_interopDefaultLegacy(node_fetch);
// Copyright (c) Microsoft Corporation.
// Licensed under the MIT license.
/**
@@ -53509,7 +53445,7 @@ class HttpHeaders {
set(headerName, headerValue) {
this._headersMap[getHeaderKey(headerName)] = {
name: headerName,
value: headerValue.toString(),
value: headerValue.toString()
};
}
/**
@@ -53541,7 +53477,12 @@ class HttpHeaders {
* Get the headers that are contained this collection as an object.
*/
rawHeaders() {
return this.toJson({ preserveCase: true });
const result = {};
for (const headerKey in this._headersMap) {
const header = this._headersMap[headerKey];
result[header.name.toLowerCase()] = header.value;
}
return result;
}
/**
* Get the headers that are contained in this collection as an array.
@@ -53578,27 +53519,14 @@ class HttpHeaders {
/**
* Get the JSON object representation of this HTTP header collection.
*/
toJson(options = {}) {
const result = {};
if (options.preserveCase) {
for (const headerKey in this._headersMap) {
const header = this._headersMap[headerKey];
result[header.name] = header.value;
}
}
else {
for (const headerKey in this._headersMap) {
const header = this._headersMap[headerKey];
result[getHeaderKey(header.name)] = header.value;
}
}
return result;
toJson() {
return this.rawHeaders();
}
/**
* Get the string representation of this HTTP header collection.
*/
toString() {
return JSON.stringify(this.toJson({ preserveCase: true }));
return JSON.stringify(this.toJson());
}
/**
* Create a deep clone/copy of this HttpHeaders collection.
@@ -53642,14 +53570,11 @@ function decodeString(value) {
// Copyright (c) Microsoft Corporation.
// Licensed under the MIT license.
/**
* A set of constants used internally when processing requests.
*/
const Constants = {
/**
* The core-http version
*/
coreHttpVersion: "2.2.4",
coreHttpVersion: "2.2.2",
/**
* Specifies HTTP.
*/
@@ -53685,12 +53610,12 @@ const Constants = {
POST: "POST",
MERGE: "MERGE",
HEAD: "HEAD",
PATCH: "PATCH",
PATCH: "PATCH"
},
StatusCodes: {
TooManyRequests: 429,
ServiceUnavailable: 503,
},
ServiceUnavailable: 503
}
},
/**
* Defines constants for use with HTTP headers.
@@ -53710,8 +53635,8 @@ const Constants = {
/**
* The UserAgent header.
*/
USER_AGENT: "User-Agent",
},
USER_AGENT: "User-Agent"
}
};
// Copyright (c) Microsoft Corporation.
@@ -53926,38 +53851,18 @@ function isObject(input) {
}
// Copyright (c) Microsoft Corporation.
// This file contains utility code to serialize and deserialize network operations according to `OperationSpec` objects generated by AutoRest.TypeScript from OpenAPI specifications.
/**
* Used to map raw response objects to final shapes.
* Helps packing and unpacking Dates and other encoded types that are not intrinsic to JSON.
* Also allows pulling values from headers, as well as inserting default values and constants.
*/
class Serializer {
constructor(
/**
* The provided model mapper.
*/
modelMappers = {},
/**
* Whether the contents are XML or not.
*/
isXML) {
constructor(modelMappers = {}, isXML) {
this.modelMappers = modelMappers;
this.isXML = isXML;
}
/**
* Validates constraints, if any. This function will throw if the provided value does not respect those constraints.
* @param mapper - The definition of data models.
* @param value - The value.
* @param objectName - Name of the object. Used in the error messages.
*/
validateConstraints(mapper, value, objectName) {
const failValidation = (constraintName, constraintValue) => {
throw new Error(`"${objectName}" with value "${value}" should satisfy the constraint "${constraintName}": ${constraintValue}.`);
};
if (mapper.constraints && value != undefined) {
const valueAsNumber = value;
const { ExclusiveMaximum, ExclusiveMinimum, InclusiveMaximum, InclusiveMinimum, MaxItems, MaxLength, MinItems, MinLength, MultipleOf, Pattern, UniqueItems, } = mapper.constraints;
const { ExclusiveMaximum, ExclusiveMinimum, InclusiveMaximum, InclusiveMinimum, MaxItems, MaxLength, MinItems, MinLength, MultipleOf, Pattern, UniqueItems } = mapper.constraints;
if (ExclusiveMaximum != undefined && valueAsNumber >= ExclusiveMaximum) {
failValidation("ExclusiveMaximum", ExclusiveMaximum);
}
@@ -53999,20 +53904,20 @@ class Serializer {
}
}
/**
* Serialize the given object based on its metadata defined in the mapper.
* Serialize the given object based on its metadata defined in the mapper
*
* @param mapper - The mapper which defines the metadata of the serializable object.
* @param object - A valid Javascript object to be serialized.
* @param objectName - Name of the serialized object.
* @param options - additional options to deserialization.
* @returns A valid serialized Javascript object.
* @param mapper - The mapper which defines the metadata of the serializable object
* @param object - A valid Javascript object to be serialized
* @param objectName - Name of the serialized object
* @param options - additional options to deserialization
* @returns A valid serialized Javascript object
*/
serialize(mapper, object, objectName, options = {}) {
var _a, _b, _c;
const updatedOptions = {
rootName: (_a = options.rootName) !== null && _a !== void 0 ? _a : "",
includeRoot: (_b = options.includeRoot) !== null && _b !== void 0 ? _b : false,
xmlCharKey: (_c = options.xmlCharKey) !== null && _c !== void 0 ? _c : XML_CHARKEY,
xmlCharKey: (_c = options.xmlCharKey) !== null && _c !== void 0 ? _c : XML_CHARKEY
};
let payload = {};
const mapperType = mapper.type.name;
@@ -54082,20 +53987,20 @@ class Serializer {
return payload;
}
/**
* Deserialize the given object based on its metadata defined in the mapper.
* Deserialize the given object based on its metadata defined in the mapper
*
* @param mapper - The mapper which defines the metadata of the serializable object.
* @param responseBody - A valid Javascript entity to be deserialized.
* @param objectName - Name of the deserialized object.
* @param mapper - The mapper which defines the metadata of the serializable object
* @param responseBody - A valid Javascript entity to be deserialized
* @param objectName - Name of the deserialized object
* @param options - Controls behavior of XML parser and builder.
* @returns A valid deserialized Javascript object.
* @returns A valid deserialized Javascript object
*/
deserialize(mapper, responseBody, objectName, options = {}) {
var _a, _b, _c;
const updatedOptions = {
rootName: (_a = options.rootName) !== null && _a !== void 0 ? _a : "",
includeRoot: (_b = options.includeRoot) !== null && _b !== void 0 ? _b : false,
xmlCharKey: (_c = options.xmlCharKey) !== null && _c !== void 0 ? _c : XML_CHARKEY,
xmlCharKey: (_c = options.xmlCharKey) !== null && _c !== void 0 ? _c : XML_CHARKEY
};
if (responseBody == undefined) {
if (this.isXML && mapper.type.name === "Sequence" && !mapper.xmlIsWrapped) {
@@ -54194,7 +54099,9 @@ function bufferToBase64Url(buffer) {
// Uint8Array to Base64.
const str = encodeByteArray(buffer);
// Base64 to Base64Url.
return trimEnd(str, "=").replace(/\+/g, "-").replace(/\//g, "_");
return trimEnd(str, "=")
.replace(/\+/g, "-")
.replace(/\//g, "_");
}
function base64UrlToByteArray(str) {
if (!str) {
@@ -54410,10 +54317,10 @@ function serializeDictionaryType(serializer, mapper, object, objectName, isXml,
return tempDictionary;
}
/**
* Resolves the additionalProperties property from a referenced mapper.
* @param serializer - The serializer containing the entire set of mappers.
* @param mapper - The composite mapper to resolve.
* @param objectName - Name of the object being serialized.
* Resolves the additionalProperties property from a referenced mapper
* @param serializer - The serializer containing the entire set of mappers
* @param mapper - The composite mapper to resolve
* @param objectName - Name of the object being serialized
*/
function resolveAdditionalProperties(serializer, mapper, objectName) {
const additionalProperties = mapper.type.additionalProperties;
@@ -54424,7 +54331,7 @@ function resolveAdditionalProperties(serializer, mapper, objectName) {
return additionalProperties;
}
/**
* Finds the mapper referenced by `className`.
* Finds the mapper referenced by className
* @param serializer - The serializer containing the entire set of mappers
* @param mapper - The composite mapper to resolve
* @param objectName - Name of the object being serialized
@@ -54763,9 +54670,7 @@ function getPolymorphicDiscriminatorSafely(serializer, typeName) {
serializer.modelMappers[typeName] &&
serializer.modelMappers[typeName].type.polymorphicDiscriminator);
}
/**
* Utility function that serializes an object that might contain binary information into a plain object, array or a string.
*/
// TODO: why is this here?
function serializeObject(toSerialize) {
const castToSerialize = toSerialize;
if (toSerialize == undefined)
@@ -54803,9 +54708,6 @@ function strEnum(o) {
}
return result;
}
/**
* String enum containing the string types of property mappers.
*/
// eslint-disable-next-line @typescript-eslint/no-redeclare
const MapperType = strEnum([
"Base64Url",
@@ -54823,7 +54725,7 @@ const MapperType = strEnum([
"String",
"Stream",
"TimeSpan",
"UnixTime",
"UnixTime"
]);
// Copyright (c) Microsoft Corporation.
@@ -55086,6 +54988,9 @@ class WebResource {
}
}
// Copyright (c) Microsoft Corporation.
const custom = util.inspect.custom;
// Copyright (c) Microsoft Corporation.
/**
* A class that handles the query portion of a URLBuilder.
@@ -55383,10 +55288,6 @@ class URLBuilder {
}
}
}
/**
* Serializes the URL as a string.
* @returns the URL as a string.
*/
toString() {
let result = "";
if (this._scheme) {
@@ -55422,9 +55323,6 @@ class URLBuilder {
this.setQuery(replaceAll(this.getQuery(), searchValue, replaceValue));
}
}
/**
* Parses a given string URL into a new {@link URLBuilder}.
*/
static parse(text) {
const result = new URLBuilder();
result.set(text, "SCHEME_OR_HOST");
@@ -55681,60 +55579,6 @@ function nextQuery(tokenizer) {
tokenizer._currentState = "DONE";
}
// Copyright (c) Microsoft Corporation.
function createProxyAgent(requestUrl, proxySettings, headers) {
const host = URLBuilder.parse(proxySettings.host).getHost();
if (!host) {
throw new Error("Expecting a non-empty host in proxy settings.");
}
if (!isValidPort(proxySettings.port)) {
throw new Error("Expecting a valid port number in the range of [0, 65535] in proxy settings.");
}
const tunnelOptions = {
proxy: {
host: host,
port: proxySettings.port,
headers: (headers && headers.rawHeaders()) || {},
},
};
if (proxySettings.username && proxySettings.password) {
tunnelOptions.proxy.proxyAuth = `${proxySettings.username}:${proxySettings.password}`;
}
else if (proxySettings.username) {
tunnelOptions.proxy.proxyAuth = `${proxySettings.username}`;
}
const isRequestHttps = isUrlHttps(requestUrl);
const isProxyHttps = isUrlHttps(proxySettings.host);
const proxyAgent = {
isHttps: isRequestHttps,
agent: createTunnel(isRequestHttps, isProxyHttps, tunnelOptions),
};
return proxyAgent;
}
function isUrlHttps(url) {
const urlScheme = URLBuilder.parse(url).getScheme() || "";
return urlScheme.toLowerCase() === "https";
}
function createTunnel(isRequestHttps, isProxyHttps, tunnelOptions) {
if (isRequestHttps && isProxyHttps) {
return tunnel__namespace.httpsOverHttps(tunnelOptions);
}
else if (isRequestHttps && !isProxyHttps) {
return tunnel__namespace.httpsOverHttp(tunnelOptions);
}
else if (!isRequestHttps && isProxyHttps) {
return tunnel__namespace.httpOverHttps(tunnelOptions);
}
else {
return tunnel__namespace.httpOverHttp(tunnelOptions);
}
}
function isValidPort(port) {
// any port in 0-65535 range is valid (RFC 793) even though almost all implementations
// will reserve 0 for a specific purpose, and a range of numbers for ephemeral ports
return 0 <= port && port <= 65535;
}
// Copyright (c) Microsoft Corporation.
const RedactedString = "REDACTED";
const defaultAllowedHeaderNames = [
@@ -55775,7 +55619,7 @@ const defaultAllowedHeaderNames = [
"Retry-After",
"Server",
"Transfer-Encoding",
"User-Agent",
"User-Agent"
];
const defaultAllowedQueryParameters = ["api-version"];
class Sanitizer {
@@ -55868,14 +55712,8 @@ class Sanitizer {
}
}
// Copyright (c) Microsoft Corporation.
const custom = util.inspect.custom;
// Copyright (c) Microsoft Corporation.
const errorSanitizer = new Sanitizer();
/**
* An error resulting from an HTTP request to a service endpoint.
*/
class RestError extends Error {
constructor(message, code, statusCode, request, response) {
super(message);
@@ -55893,22 +55731,13 @@ class RestError extends Error {
return `RestError: ${this.message} \n ${errorSanitizer.sanitize(this)}`;
}
}
/**
* A constant string to identify errors that may arise when making an HTTP request that indicates an issue with the transport layer (e.g. the hostname of the URL cannot be resolved via DNS.)
*/
RestError.REQUEST_SEND_ERROR = "REQUEST_SEND_ERROR";
/**
* A constant string to identify errors that may arise from parsing an incoming HTTP response. Usually indicates a malformed HTTP body, such as an encoded JSON payload that is incomplete.
*/
RestError.PARSE_ERROR = "PARSE_ERROR";
// Copyright (c) Microsoft Corporation.
const logger = logger$1.createClientLogger("core-http");
// Copyright (c) Microsoft Corporation.
function getCachedAgent(isHttps, agentCache) {
return isHttps ? agentCache.httpsAgent : agentCache.httpAgent;
}
class ReportTransform extends stream.Transform {
constructor(progressCallback) {
super();
@@ -55922,44 +55751,7 @@ class ReportTransform extends stream.Transform {
callback(undefined);
}
}
function isReadableStream(body) {
return body && typeof body.pipe === "function";
}
function isStreamComplete(stream, aborter) {
return new Promise((resolve) => {
stream.once("close", () => {
aborter === null || aborter === void 0 ? void 0 : aborter.abort();
resolve();
});
stream.once("end", resolve);
stream.once("error", resolve);
});
}
/**
* Transforms a set of headers into the key/value pair defined by {@link HttpHeadersLike}
*/
function parseHeaders(headers) {
const httpHeaders = new HttpHeaders();
headers.forEach((value, key) => {
httpHeaders.set(key, value);
});
return httpHeaders;
}
/**
* An HTTP client that uses `node-fetch`.
*/
class NodeFetchHttpClient {
constructor() {
// a mapping of proxy settings string `${host}:${port}:${username}:${password}` to agent
this.proxyAgentMap = new Map();
this.keepAliveAgents = {};
this.cookieJar = new tough__namespace.CookieJar(undefined, { looseMode: true });
}
/**
* Provides minimum viable error handling and the logic that executes the abstract methods.
* @param httpRequest - Object representing the outgoing HTTP request.
* @returns An object representing the incoming HTTP response.
*/
class FetchHttpClient {
async sendRequest(httpRequest) {
var _a;
if (!httpRequest && typeof httpRequest !== "object") {
@@ -55985,7 +55777,7 @@ class NodeFetchHttpClient {
}
if (httpRequest.formData) {
const formData = httpRequest.formData;
const requestForm = new FormData__default["default"]();
const requestForm = new FormData();
const appendFormValue = (key, value) => {
// value function probably returns a stream so we can provide a fresh stream on each retry
if (typeof value === "function") {
@@ -56055,7 +55847,7 @@ class NodeFetchHttpClient {
readableStreamBody: streaming
? response.body
: undefined,
bodyAsText: !streaming ? await response.text() : undefined,
bodyAsText: !streaming ? await response.text() : undefined
};
const onDownloadProgress = httpRequest.onDownloadProgress;
if (onDownloadProgress) {
@@ -56109,6 +55901,94 @@ class NodeFetchHttpClient {
}
}
}
}
function isReadableStream(body) {
return body && typeof body.pipe === "function";
}
function isStreamComplete(stream, aborter) {
return new Promise((resolve) => {
stream.once("close", () => {
aborter === null || aborter === void 0 ? void 0 : aborter.abort();
resolve();
});
stream.once("end", resolve);
stream.once("error", resolve);
});
}
function parseHeaders(headers) {
const httpHeaders = new HttpHeaders();
headers.forEach((value, key) => {
httpHeaders.set(key, value);
});
return httpHeaders;
}
// Copyright (c) Microsoft Corporation.
function createProxyAgent(requestUrl, proxySettings, headers) {
const host = URLBuilder.parse(proxySettings.host).getHost();
if (!host) {
throw new Error("Expecting a non-empty host in proxy settings.");
}
if (!isValidPort(proxySettings.port)) {
throw new Error("Expecting a valid port number in the range of [0, 65535] in proxy settings.");
}
const tunnelOptions = {
proxy: {
host: host,
port: proxySettings.port,
headers: (headers && headers.rawHeaders()) || {}
}
};
if (proxySettings.username && proxySettings.password) {
tunnelOptions.proxy.proxyAuth = `${proxySettings.username}:${proxySettings.password}`;
}
else if (proxySettings.username) {
tunnelOptions.proxy.proxyAuth = `${proxySettings.username}`;
}
const isRequestHttps = isUrlHttps(requestUrl);
const isProxyHttps = isUrlHttps(proxySettings.host);
const proxyAgent = {
isHttps: isRequestHttps,
agent: createTunnel(isRequestHttps, isProxyHttps, tunnelOptions)
};
return proxyAgent;
}
function isUrlHttps(url) {
const urlScheme = URLBuilder.parse(url).getScheme() || "";
return urlScheme.toLowerCase() === "https";
}
function createTunnel(isRequestHttps, isProxyHttps, tunnelOptions) {
if (isRequestHttps && isProxyHttps) {
return tunnel.httpsOverHttps(tunnelOptions);
}
else if (isRequestHttps && !isProxyHttps) {
return tunnel.httpsOverHttp(tunnelOptions);
}
else if (!isRequestHttps && isProxyHttps) {
return tunnel.httpOverHttps(tunnelOptions);
}
else {
return tunnel.httpOverHttp(tunnelOptions);
}
}
function isValidPort(port) {
// any port in 0-65535 range is valid (RFC 793) even though almost all implementations
// will reserve 0 for a specific purpose, and a range of numbers for ephemeral ports
return 0 <= port && port <= 65535;
}
// Copyright (c) Microsoft Corporation.
function getCachedAgent(isHttps, agentCache) {
return isHttps ? agentCache.httpsAgent : agentCache.httpAgent;
}
class NodeFetchHttpClient extends FetchHttpClient {
constructor() {
super(...arguments);
// a mapping of proxy settings string `${host}:${port}:${username}:${password}` to agent
this.proxyAgentMap = new Map();
this.keepAliveAgents = {};
this.cookieJar = new tough.CookieJar(undefined, { looseMode: true });
}
getOrCreateAgent(httpRequest) {
var _a;
const isHttps = isUrlHttps(httpRequest.url);
@@ -56140,30 +56020,24 @@ class NodeFetchHttpClient {
return agent;
}
const agentOptions = {
keepAlive: httpRequest.keepAlive,
keepAlive: httpRequest.keepAlive
};
if (isHttps) {
agent = this.keepAliveAgents.httpsAgent = new https__namespace.Agent(agentOptions);
agent = this.keepAliveAgents.httpsAgent = new https.Agent(agentOptions);
}
else {
agent = this.keepAliveAgents.httpAgent = new http__namespace.Agent(agentOptions);
agent = this.keepAliveAgents.httpAgent = new http.Agent(agentOptions);
}
return agent;
}
else {
return isHttps ? https__namespace.globalAgent : http__namespace.globalAgent;
return isHttps ? https.globalAgent : http.globalAgent;
}
}
/**
* Uses `node-fetch` to perform the request.
*/
// eslint-disable-next-line @azure/azure-sdk/ts-apisurface-standardized-verbs
async fetch(input, init) {
return node_fetch__default["default"](input, init);
return node_fetch(input, init);
}
/**
* Prepares a request based on the provided web resource.
*/
async prepareRequest(httpRequest) {
const requestInit = {};
if (this.cookieJar && !httpRequest.headers.get("Cookie")) {
@@ -56184,9 +56058,6 @@ class NodeFetchHttpClient {
requestInit.compress = httpRequest.decompressResponse;
return requestInit;
}
/**
* Process an HTTP response. Handles persisting a cookie for subsequent requests if the response has a "Set-Cookie" header.
*/
async processRequest(operationResponse) {
if (this.cookieJar) {
const setCookieHeader = operationResponse.headers.get("Set-Cookie");
@@ -56207,11 +56078,6 @@ class NodeFetchHttpClient {
}
// Copyright (c) Microsoft Corporation.
// Licensed under the MIT license.
/**
* The different levels of logs that can be used with the HttpPipelineLogger.
*/
exports.HttpPipelineLogLevel = void 0;
(function (HttpPipelineLogLevel) {
/**
* A log level that indicates that no logs will be logged.
@@ -56231,7 +56097,6 @@ exports.HttpPipelineLogLevel = void 0;
HttpPipelineLogLevel[HttpPipelineLogLevel["INFO"] = 3] = "INFO";
})(exports.HttpPipelineLogLevel || (exports.HttpPipelineLogLevel = {}));
// Copyright (c) Microsoft Corporation.
/**
* Converts an OperationOptions to a RequestOptionsBase
*
@@ -56253,22 +56118,8 @@ function operationOptionsToRequestOptionsBase(opts) {
}
// Copyright (c) Microsoft Corporation.
/**
* The base class from which all request policies derive.
*/
class BaseRequestPolicy {
/**
* The main method to implement that manipulates a request/response.
*/
constructor(
/**
* The next policy in the pipeline. Each policy is responsible for executing the next one if the request is to continue through the pipeline.
*/
_nextPolicy,
/**
* The options that can be passed to a given request policy.
*/
_options) {
constructor(_nextPolicy, _options) {
this._nextPolicy = _nextPolicy;
this._options = _options;
}
@@ -56320,6 +56171,113 @@ class RequestPolicyOptions {
}
}
// Copyright (c) Microsoft Corporation.
function logPolicy(loggingOptions = {}) {
return {
create: (nextPolicy, options) => {
return new LogPolicy(nextPolicy, options, loggingOptions);
}
};
}
class LogPolicy extends BaseRequestPolicy {
constructor(nextPolicy, options, { logger: logger$1 = logger.info, allowedHeaderNames = [], allowedQueryParameters = [] } = {}) {
super(nextPolicy, options);
this.logger = logger$1;
this.sanitizer = new Sanitizer({ allowedHeaderNames, allowedQueryParameters });
}
/**
* Header names whose values will be logged when logging is enabled. Defaults to
* Date, traceparent, x-ms-client-request-id, and x-ms-request id. Any headers
* specified in this field will be added to that list. Any other values will
* be written to logs as "REDACTED".
* @deprecated Pass these into the constructor instead.
*/
get allowedHeaderNames() {
return this.sanitizer.allowedHeaderNames;
}
/**
* Header names whose values will be logged when logging is enabled. Defaults to
* Date, traceparent, x-ms-client-request-id, and x-ms-request id. Any headers
* specified in this field will be added to that list. Any other values will
* be written to logs as "REDACTED".
* @deprecated Pass these into the constructor instead.
*/
set allowedHeaderNames(allowedHeaderNames) {
this.sanitizer.allowedHeaderNames = allowedHeaderNames;
}
/**
* Query string names whose values will be logged when logging is enabled. By default no
* query string values are logged.
* @deprecated Pass these into the constructor instead.
*/
get allowedQueryParameters() {
return this.sanitizer.allowedQueryParameters;
}
/**
* Query string names whose values will be logged when logging is enabled. By default no
* query string values are logged.
* @deprecated Pass these into the constructor instead.
*/
set allowedQueryParameters(allowedQueryParameters) {
this.sanitizer.allowedQueryParameters = allowedQueryParameters;
}
sendRequest(request) {
if (!this.logger.enabled)
return this._nextPolicy.sendRequest(request);
this.logRequest(request);
return this._nextPolicy.sendRequest(request).then((response) => this.logResponse(response));
}
logRequest(request) {
this.logger(`Request: ${this.sanitizer.sanitize(request)}`);
}
logResponse(response) {
this.logger(`Response status code: ${response.status}`);
this.logger(`Headers: ${this.sanitizer.sanitize(response.headers)}`);
return response;
}
}
// Copyright (c) Microsoft Corporation.
// Licensed under the MIT license.
/**
* Get the path to this parameter's value as a dotted string (a.b.c).
* @param parameter - The parameter to get the path string for.
* @returns The path to this parameter's value as a dotted string.
*/
function getPathStringFromParameter(parameter) {
return getPathStringFromParameterPath(parameter.parameterPath, parameter.mapper);
}
function getPathStringFromParameterPath(parameterPath, mapper) {
let result;
if (typeof parameterPath === "string") {
result = parameterPath;
}
else if (Array.isArray(parameterPath)) {
result = parameterPath.join(".");
}
else {
result = mapper.serializedName;
}
return result;
}
// Copyright (c) Microsoft Corporation.
/**
* Gets the list of status codes for streaming responses.
* @internal
*/
function getStreamResponseStatusCodes(operationSpec) {
const result = new Set();
for (const statusCode in operationSpec.responses) {
const operationResponse = operationSpec.responses[statusCode];
if (operationResponse.bodyMapper &&
operationResponse.bodyMapper.type.name === MapperType.Stream) {
result.add(Number(statusCode));
}
}
return result;
}
// Copyright (c) Microsoft Corporation.
// Note: The reason we re-define all of the xml2js default settings (version 2.0) here is because the default settings object exposed
// by the xm2js library is mutable. See https://github.com/Leonidas-from-XIV/node-xml2js/issues/536
@@ -56352,18 +56310,18 @@ const xml2jsDefaultOptionsV2 = {
xmldec: {
version: "1.0",
encoding: "UTF-8",
standalone: true,
standalone: true
},
doctype: undefined,
renderOpts: {
pretty: true,
indent: " ",
newline: "\n",
newline: "\n"
},
headless: false,
chunkSize: 10000,
emptyTag: "",
cdata: false,
cdata: false
};
// The xml2js settings for general XML parsing operations.
const xml2jsParserSettings = Object.assign({}, xml2jsDefaultOptionsV2);
@@ -56372,7 +56330,7 @@ xml2jsParserSettings.explicitArray = false;
const xml2jsBuilderSettings = Object.assign({}, xml2jsDefaultOptionsV2);
xml2jsBuilderSettings.explicitArray = false;
xml2jsBuilderSettings.renderOpts = {
pretty: false,
pretty: false
};
/**
* Converts given JSON object to XML string
@@ -56383,7 +56341,7 @@ function stringifyXML(obj, opts = {}) {
var _a;
xml2jsBuilderSettings.rootName = opts.rootName;
xml2jsBuilderSettings.charkey = (_a = opts.xmlCharKey) !== null && _a !== void 0 ? _a : XML_CHARKEY;
const builder = new xml2js__namespace.Builder(xml2jsBuilderSettings);
const builder = new xml2js.Builder(xml2jsBuilderSettings);
return builder.buildObject(obj);
}
/**
@@ -56395,7 +56353,7 @@ function parseXML(str, opts = {}) {
var _a;
xml2jsParserSettings.explicitRoot = !!opts.includeRoot;
xml2jsParserSettings.charkey = (_a = opts.xmlCharKey) !== null && _a !== void 0 ? _a : XML_CHARKEY;
const xmlParser = new xml2js__namespace.Parser(xml2jsParserSettings);
const xmlParser = new xml2js.Parser(xml2jsParserSettings);
return new Promise((resolve, reject) => {
if (!str) {
reject(new Error("Document is empty"));
@@ -56422,7 +56380,7 @@ function deserializationPolicy(deserializationContentTypes, parsingOptions) {
return {
create: (nextPolicy, options) => {
return new DeserializationPolicy(nextPolicy, options, deserializationContentTypes, parsingOptions);
},
}
};
}
const defaultJsonContentTypes = ["application/json", "text/json"];
@@ -56430,8 +56388,8 @@ const defaultXmlContentTypes = ["application/xml", "application/atom+xml"];
const DefaultDeserializationOptions = {
expectedContentTypes: {
json: defaultJsonContentTypes,
xml: defaultXmlContentTypes,
},
xml: defaultXmlContentTypes
}
};
/**
* A RequestPolicy that will deserialize HTTP response bodies and headers as they pass through the
@@ -56449,7 +56407,7 @@ class DeserializationPolicy extends BaseRequestPolicy {
}
async sendRequest(request) {
return this._nextPolicy.sendRequest(request).then((response) => deserializeResponseBody(this.jsonContentTypes, this.xmlContentTypes, response, {
xmlCharKey: this.xmlCharKey,
xmlCharKey: this.xmlCharKey
}));
}
}
@@ -56482,20 +56440,12 @@ function shouldDeserializeResponse(parsedResponse) {
}
return result;
}
/**
* Given a particular set of content types to parse as either JSON or XML, consumes the HTTP response to produce the result object defined by the request's {@link OperationSpec}.
* @param jsonContentTypes - Response content types to parse the body as JSON.
* @param xmlContentTypes - Response content types to parse the body as XML.
* @param response - HTTP Response from the pipeline.
* @param options - Options to the serializer, mostly for configuring the XML parser if needed.
* @returns A parsed {@link HttpOperationResponse} object that can be returned by the {@link ServiceClient}.
*/
function deserializeResponseBody(jsonContentTypes, xmlContentTypes, response, options = {}) {
var _a, _b, _c;
const updatedOptions = {
rootName: (_a = options.rootName) !== null && _a !== void 0 ? _a : "",
includeRoot: (_b = options.includeRoot) !== null && _b !== void 0 ? _b : false,
xmlCharKey: (_c = options.xmlCharKey) !== null && _c !== void 0 ? _c : XML_CHARKEY,
xmlCharKey: (_c = options.xmlCharKey) !== null && _c !== void 0 ? _c : XML_CHARKEY
};
return parse(jsonContentTypes, xmlContentTypes, response, updatedOptions).then((parsedResponse) => {
if (!shouldDeserializeResponse(parsedResponse)) {
@@ -56646,113 +56596,6 @@ function parse(jsonContentTypes, xmlContentTypes, operationResponse, opts) {
return Promise.resolve(operationResponse);
}
// Copyright (c) Microsoft Corporation.
/**
* By default, HTTP connections are maintained for future requests.
*/
const DefaultKeepAliveOptions = {
enable: true,
};
/**
* Creates a policy that controls whether HTTP connections are maintained on future requests.
* @param keepAliveOptions - Keep alive options. By default, HTTP connections are maintained for future requests.
* @returns An instance of the {@link KeepAlivePolicy}
*/
function keepAlivePolicy(keepAliveOptions) {
return {
create: (nextPolicy, options) => {
return new KeepAlivePolicy(nextPolicy, options, keepAliveOptions || DefaultKeepAliveOptions);
},
};
}
/**
* KeepAlivePolicy is a policy used to control keep alive settings for every request.
*/
class KeepAlivePolicy extends BaseRequestPolicy {
/**
* Creates an instance of KeepAlivePolicy.
*
* @param nextPolicy -
* @param options -
* @param keepAliveOptions -
*/
constructor(nextPolicy, options, keepAliveOptions) {
super(nextPolicy, options);
this.keepAliveOptions = keepAliveOptions;
}
/**
* Sends out request.
*
* @param request -
* @returns
*/
async sendRequest(request) {
request.keepAlive = this.keepAliveOptions.enable;
return this._nextPolicy.sendRequest(request);
}
}
// Copyright (c) Microsoft Corporation.
/**
* Methods that are allowed to follow redirects 301 and 302
*/
const allowedRedirect = ["GET", "HEAD"];
const DefaultRedirectOptions = {
handleRedirects: true,
maxRetries: 20,
};
/**
* Creates a redirect policy, which sends a repeats the request to a new destination if a response arrives with a "location" header, and a status code between 300 and 307.
* @param maximumRetries - Maximum number of redirects to follow.
* @returns An instance of the {@link RedirectPolicy}
*/
function redirectPolicy(maximumRetries = 20) {
return {
create: (nextPolicy, options) => {
return new RedirectPolicy(nextPolicy, options, maximumRetries);
},
};
}
/**
* Resends the request to a new destination if a response arrives with a "location" header, and a status code between 300 and 307.
*/
class RedirectPolicy extends BaseRequestPolicy {
constructor(nextPolicy, options, maxRetries = 20) {
super(nextPolicy, options);
this.maxRetries = maxRetries;
}
sendRequest(request) {
return this._nextPolicy
.sendRequest(request)
.then((response) => handleRedirect(this, response, 0));
}
}
function handleRedirect(policy, response, currentRetries) {
const { request, status } = response;
const locationHeader = response.headers.get("location");
if (locationHeader &&
(status === 300 ||
(status === 301 && allowedRedirect.includes(request.method)) ||
(status === 302 && allowedRedirect.includes(request.method)) ||
(status === 303 && request.method === "POST") ||
status === 307) &&
(!policy.maxRetries || currentRetries < policy.maxRetries)) {
const builder = URLBuilder.parse(request.url);
builder.setPath(locationHeader);
request.url = builder.toString();
// POST request with Status code 303 should be converted into a
// redirected GET request if the redirect url is present in the location header
if (status === 303) {
request.method = "GET";
delete request.body;
}
return policy._nextPolicy
.sendRequest(request)
.then((res) => handleRedirect(policy, res, currentRetries + 1));
}
return Promise.resolve(response);
}
// Copyright (c) Microsoft Corporation.
// Licensed under the MIT license.
const DEFAULT_CLIENT_RETRY_COUNT = 3;
@@ -56816,7 +56659,7 @@ function isDefined(thing) {
}
// Copyright (c) Microsoft Corporation.
const StandardAbortMessage$1 = "The operation was aborted.";
const StandardAbortMessage = "The operation was aborted.";
/**
* A wrapper for setTimeout that resolves a promise after delayInMs milliseconds.
* @param delayInMs - The number of milliseconds to be delayed.
@@ -56831,7 +56674,7 @@ function delay(delayInMs, value, options) {
let timer = undefined;
let onAborted = undefined;
const rejectOnAbort = () => {
return reject(new abortController.AbortError((options === null || options === void 0 ? void 0 : options.abortErrorMsg) ? options === null || options === void 0 ? void 0 : options.abortErrorMsg : StandardAbortMessage$1));
return reject(new abortController.AbortError((options === null || options === void 0 ? void 0 : options.abortErrorMsg) ? options === null || options === void 0 ? void 0 : options.abortErrorMsg : StandardAbortMessage));
};
const removeListeners = () => {
if ((options === null || options === void 0 ? void 0 : options.abortSignal) && onAborted) {
@@ -56859,34 +56702,20 @@ function delay(delayInMs, value, options) {
}
// Copyright (c) Microsoft Corporation.
/**
* Policy that retries the request as many times as configured for as long as the max retry time interval specified, each retry waiting longer to begin than the last time.
* @param retryCount - Maximum number of retries.
* @param retryInterval - Base time between retries.
* @param maxRetryInterval - Maximum time to wait between retries.
*/
function exponentialRetryPolicy(retryCount, retryInterval, maxRetryInterval) {
return {
create: (nextPolicy, options) => {
return new ExponentialRetryPolicy(nextPolicy, options, retryCount, retryInterval, maxRetryInterval);
},
}
};
}
/**
* Describes the Retry Mode type. Currently supporting only Exponential.
*/
exports.RetryMode = void 0;
(function (RetryMode) {
/**
* Currently supported retry mode.
* Each time a retry happens, it will take exponentially more time than the last time.
*/
RetryMode[RetryMode["Exponential"] = 0] = "Exponential";
})(exports.RetryMode || (exports.RetryMode = {}));
const DefaultRetryOptions = {
maxRetries: DEFAULT_CLIENT_RETRY_COUNT,
retryDelayInMs: DEFAULT_CLIENT_RETRY_INTERVAL,
maxRetryDelayInMs: DEFAULT_CLIENT_MAX_RETRY_INTERVAL,
maxRetryDelayInMs: DEFAULT_CLIENT_MAX_RETRY_INTERVAL
};
/**
* Instantiates a new "ExponentialRetryPolicyFilter" instance.
@@ -56911,11 +56740,11 @@ class ExponentialRetryPolicy extends BaseRequestPolicy {
sendRequest(request) {
return this._nextPolicy
.sendRequest(request.clone())
.then((response) => retry$1(this, request, response))
.catch((error) => retry$1(this, request, error.response, undefined, error));
.then((response) => retry(this, request, response))
.catch((error) => retry(this, request, error.response, undefined, error));
}
}
async function retry$1(policy, request, response, retryData, requestError) {
async function retry(policy, request, response, retryData, requestError) {
function shouldPolicyRetry(responseParam) {
const statusCode = responseParam === null || responseParam === void 0 ? void 0 : responseParam.status;
if (statusCode === 503 && (response === null || response === void 0 ? void 0 : response.headers.get(Constants.HeaderConstants.RETRY_AFTER))) {
@@ -56932,7 +56761,7 @@ async function retry$1(policy, request, response, retryData, requestError) {
retryData = updateRetryData({
retryInterval: policy.retryInterval,
minRetryInterval: 0,
maxRetryInterval: policy.maxRetryInterval,
maxRetryInterval: policy.maxRetryInterval
}, retryData, requestError);
const isAborted = request.abortSignal && request.abortSignal.aborted;
if (!isAborted && shouldRetry(policy.retryCount, shouldPolicyRetry, retryData, response)) {
@@ -56940,10 +56769,10 @@ async function retry$1(policy, request, response, retryData, requestError) {
try {
await delay(retryData.retryInterval);
const res = await policy._nextPolicy.sendRequest(request.clone());
return retry$1(policy, request, res, retryData);
return retry(policy, request, res, retryData);
}
catch (err) {
return retry$1(policy, request, response, retryData, err);
return retry(policy, request, response, retryData, err);
}
}
else if (isAborted || requestError || !response) {
@@ -56958,467 +56787,11 @@ async function retry$1(policy, request, response, retryData, requestError) {
}
// Copyright (c) Microsoft Corporation.
/**
* Creates a policy that logs information about the outgoing request and the incoming responses.
* @param loggingOptions - Logging options.
* @returns An instance of the {@link LogPolicy}
*/
function logPolicy(loggingOptions = {}) {
return {
create: (nextPolicy, options) => {
return new LogPolicy(nextPolicy, options, loggingOptions);
},
};
}
/**
* A policy that logs information about the outgoing request and the incoming responses.
*/
class LogPolicy extends BaseRequestPolicy {
constructor(nextPolicy, options, { logger: logger$1 = logger.info, allowedHeaderNames = [], allowedQueryParameters = [], } = {}) {
super(nextPolicy, options);
this.logger = logger$1;
this.sanitizer = new Sanitizer({ allowedHeaderNames, allowedQueryParameters });
}
/**
* Header names whose values will be logged when logging is enabled. Defaults to
* Date, traceparent, x-ms-client-request-id, and x-ms-request id. Any headers
* specified in this field will be added to that list. Any other values will
* be written to logs as "REDACTED".
* @deprecated Pass these into the constructor instead.
*/
get allowedHeaderNames() {
return this.sanitizer.allowedHeaderNames;
}
/**
* Header names whose values will be logged when logging is enabled. Defaults to
* Date, traceparent, x-ms-client-request-id, and x-ms-request id. Any headers
* specified in this field will be added to that list. Any other values will
* be written to logs as "REDACTED".
* @deprecated Pass these into the constructor instead.
*/
set allowedHeaderNames(allowedHeaderNames) {
this.sanitizer.allowedHeaderNames = allowedHeaderNames;
}
/**
* Query string names whose values will be logged when logging is enabled. By default no
* query string values are logged.
* @deprecated Pass these into the constructor instead.
*/
get allowedQueryParameters() {
return this.sanitizer.allowedQueryParameters;
}
/**
* Query string names whose values will be logged when logging is enabled. By default no
* query string values are logged.
* @deprecated Pass these into the constructor instead.
*/
set allowedQueryParameters(allowedQueryParameters) {
this.sanitizer.allowedQueryParameters = allowedQueryParameters;
}
sendRequest(request) {
if (!this.logger.enabled)
return this._nextPolicy.sendRequest(request);
this.logRequest(request);
return this._nextPolicy.sendRequest(request).then((response) => this.logResponse(response));
}
logRequest(request) {
this.logger(`Request: ${this.sanitizer.sanitize(request)}`);
}
logResponse(response) {
this.logger(`Response status code: ${response.status}`);
this.logger(`Headers: ${this.sanitizer.sanitize(response.headers)}`);
return response;
}
}
// Copyright (c) Microsoft Corporation.
// Licensed under the MIT license.
/**
* Get the path to this parameter's value as a dotted string (a.b.c).
* @param parameter - The parameter to get the path string for.
* @returns The path to this parameter's value as a dotted string.
*/
function getPathStringFromParameter(parameter) {
return getPathStringFromParameterPath(parameter.parameterPath, parameter.mapper);
}
function getPathStringFromParameterPath(parameterPath, mapper) {
let result;
if (typeof parameterPath === "string") {
result = parameterPath;
}
else if (Array.isArray(parameterPath)) {
result = parameterPath.join(".");
}
else {
result = mapper.serializedName;
}
return result;
}
// Copyright (c) Microsoft Corporation.
/**
* Gets the list of status codes for streaming responses.
* @internal
*/
function getStreamResponseStatusCodes(operationSpec) {
const result = new Set();
for (const statusCode in operationSpec.responses) {
const operationResponse = operationSpec.responses[statusCode];
if (operationResponse.bodyMapper &&
operationResponse.bodyMapper.type.name === MapperType.Stream) {
result.add(Number(statusCode));
}
}
return result;
}
// Copyright (c) Microsoft Corporation.
function getDefaultUserAgentKey() {
return Constants.HeaderConstants.USER_AGENT;
}
function getPlatformSpecificData() {
const runtimeInfo = {
key: "Node",
value: process.version,
};
const osInfo = {
key: "OS",
value: `(${os__namespace.arch()}-${os__namespace.type()}-${os__namespace.release()})`,
};
return [runtimeInfo, osInfo];
}
// Copyright (c) Microsoft Corporation.
function getRuntimeInfo() {
const msRestRuntime = {
key: "core-http",
value: Constants.coreHttpVersion,
};
return [msRestRuntime];
}
function getUserAgentString(telemetryInfo, keySeparator = " ", valueSeparator = "/") {
return telemetryInfo
.map((info) => {
const value = info.value ? `${valueSeparator}${info.value}` : "";
return `${info.key}${value}`;
})
.join(keySeparator);
}
const getDefaultUserAgentHeaderName = getDefaultUserAgentKey;
/**
* The default approach to generate user agents.
* Uses static information from this package, plus system information available from the runtime.
*/
function getDefaultUserAgentValue() {
const runtimeInfo = getRuntimeInfo();
const platformSpecificData = getPlatformSpecificData();
const userAgent = getUserAgentString(runtimeInfo.concat(platformSpecificData));
return userAgent;
}
/**
* Returns a policy that adds the user agent header to outgoing requests based on the given {@link TelemetryInfo}.
* @param userAgentData - Telemetry information.
* @returns A new {@link UserAgentPolicy}.
*/
function userAgentPolicy(userAgentData) {
const key = !userAgentData || userAgentData.key === undefined || userAgentData.key === null
? getDefaultUserAgentKey()
: userAgentData.key;
const value = !userAgentData || userAgentData.value === undefined || userAgentData.value === null
? getDefaultUserAgentValue()
: userAgentData.value;
return {
create: (nextPolicy, options) => {
return new UserAgentPolicy(nextPolicy, options, key, value);
},
};
}
/**
* A policy that adds the user agent header to outgoing requests based on the given {@link TelemetryInfo}.
*/
class UserAgentPolicy extends BaseRequestPolicy {
constructor(_nextPolicy, _options, headerKey, headerValue) {
super(_nextPolicy, _options);
this._nextPolicy = _nextPolicy;
this._options = _options;
this.headerKey = headerKey;
this.headerValue = headerValue;
}
sendRequest(request) {
this.addUserAgentHeader(request);
return this._nextPolicy.sendRequest(request);
}
/**
* Adds the user agent header to the outgoing request.
*/
addUserAgentHeader(request) {
if (!request.headers) {
request.headers = new HttpHeaders();
}
if (!request.headers.get(this.headerKey) && this.headerValue) {
request.headers.set(this.headerKey, this.headerValue);
}
}
}
// Copyright (c) Microsoft Corporation.
// Licensed under the MIT license.
/**
* The format that will be used to join an array of values together for a query parameter value.
*/
exports.QueryCollectionFormat = void 0;
(function (QueryCollectionFormat) {
/**
* CSV: Each pair of segments joined by a single comma.
*/
QueryCollectionFormat["Csv"] = ",";
/**
* SSV: Each pair of segments joined by a single space character.
*/
QueryCollectionFormat["Ssv"] = " ";
/**
* TSV: Each pair of segments joined by a single tab character.
*/
QueryCollectionFormat["Tsv"] = "\t";
/**
* Pipes: Each pair of segments joined by a single pipe character.
*/
QueryCollectionFormat["Pipes"] = "|";
/**
* Denotes this is an array of values that should be passed to the server in multiple key/value pairs, e.g. `?queryParam=value1&queryParam=value2`
*/
QueryCollectionFormat["Multi"] = "Multi";
})(exports.QueryCollectionFormat || (exports.QueryCollectionFormat = {}));
// Copyright (c) Microsoft Corporation.
// Default options for the cycler if none are provided
const DEFAULT_CYCLER_OPTIONS = {
forcedRefreshWindowInMs: 1000,
retryIntervalInMs: 3000,
refreshWindowInMs: 1000 * 60 * 2, // Start refreshing 2m before expiry
};
/**
* Converts an an unreliable access token getter (which may resolve with null)
* into an AccessTokenGetter by retrying the unreliable getter in a regular
* interval.
*
* @param getAccessToken - a function that produces a promise of an access
* token that may fail by returning null
* @param retryIntervalInMs - the time (in milliseconds) to wait between retry
* attempts
* @param timeoutInMs - the timestamp after which the refresh attempt will fail,
* throwing an exception
* @returns - a promise that, if it resolves, will resolve with an access token
*/
async function beginRefresh(getAccessToken, retryIntervalInMs, timeoutInMs) {
// This wrapper handles exceptions gracefully as long as we haven't exceeded
// the timeout.
async function tryGetAccessToken() {
if (Date.now() < timeoutInMs) {
try {
return await getAccessToken();
}
catch (_a) {
return null;
}
}
else {
const finalToken = await getAccessToken();
// Timeout is up, so throw if it's still null
if (finalToken === null) {
throw new Error("Failed to refresh access token.");
}
return finalToken;
}
}
let token = await tryGetAccessToken();
while (token === null) {
await delay(retryIntervalInMs);
token = await tryGetAccessToken();
}
return token;
}
/**
* Creates a token cycler from a credential, scopes, and optional settings.
*
* A token cycler represents a way to reliably retrieve a valid access token
* from a TokenCredential. It will handle initializing the token, refreshing it
* when it nears expiration, and synchronizes refresh attempts to avoid
* concurrency hazards.
*
* @param credential - the underlying TokenCredential that provides the access
* token
* @param scopes - the scopes to request authorization for
* @param tokenCyclerOptions - optionally override default settings for the cycler
*
* @returns - a function that reliably produces a valid access token
*/
function createTokenCycler(credential, scopes, tokenCyclerOptions) {
let refreshWorker = null;
let token = null;
const options = Object.assign(Object.assign({}, DEFAULT_CYCLER_OPTIONS), tokenCyclerOptions);
/**
* This little holder defines several predicates that we use to construct
* the rules of refreshing the token.
*/
const cycler = {
/**
* Produces true if a refresh job is currently in progress.
*/
get isRefreshing() {
return refreshWorker !== null;
},
/**
* Produces true if the cycler SHOULD refresh (we are within the refresh
* window and not already refreshing)
*/
get shouldRefresh() {
var _a;
return (!cycler.isRefreshing &&
((_a = token === null || token === void 0 ? void 0 : token.expiresOnTimestamp) !== null && _a !== void 0 ? _a : 0) - options.refreshWindowInMs < Date.now());
},
/**
* Produces true if the cycler MUST refresh (null or nearly-expired
* token).
*/
get mustRefresh() {
return (token === null || token.expiresOnTimestamp - options.forcedRefreshWindowInMs < Date.now());
},
};
/**
* Starts a refresh job or returns the existing job if one is already
* running.
*/
function refresh(getTokenOptions) {
var _a;
if (!cycler.isRefreshing) {
// We bind `scopes` here to avoid passing it around a lot
const tryGetAccessToken = () => credential.getToken(scopes, getTokenOptions);
// Take advantage of promise chaining to insert an assignment to `token`
// before the refresh can be considered done.
refreshWorker = beginRefresh(tryGetAccessToken, options.retryIntervalInMs,
// If we don't have a token, then we should timeout immediately
(_a = token === null || token === void 0 ? void 0 : token.expiresOnTimestamp) !== null && _a !== void 0 ? _a : Date.now())
.then((_token) => {
refreshWorker = null;
token = _token;
return token;
})
.catch((reason) => {
// We also should reset the refresher if we enter a failed state. All
// existing awaiters will throw, but subsequent requests will start a
// new retry chain.
refreshWorker = null;
token = null;
throw reason;
});
}
return refreshWorker;
}
return async (tokenOptions) => {
//
// Simple rules:
// - If we MUST refresh, then return the refresh task, blocking
// the pipeline until a token is available.
// - If we SHOULD refresh, then run refresh but don't return it
// (we can still use the cached token).
// - Return the token, since it's fine if we didn't return in
// step 1.
//
if (cycler.mustRefresh)
return refresh(tokenOptions);
if (cycler.shouldRefresh) {
refresh(tokenOptions);
}
return token;
};
}
// #endregion
/**
* Creates a new factory for a RequestPolicy that applies a bearer token to
* the requests' `Authorization` headers.
*
* @param credential - The TokenCredential implementation that can supply the bearer token.
* @param scopes - The scopes for which the bearer token applies.
*/
function bearerTokenAuthenticationPolicy(credential, scopes) {
// This simple function encapsulates the entire process of reliably retrieving the token
const getToken = createTokenCycler(credential, scopes /* , options */);
class BearerTokenAuthenticationPolicy extends BaseRequestPolicy {
constructor(nextPolicy, options) {
super(nextPolicy, options);
}
async sendRequest(webResource) {
if (!webResource.url.toLowerCase().startsWith("https://")) {
throw new Error("Bearer token authentication is not permitted for non-TLS protected (non-https) URLs.");
}
const { token } = await getToken({
abortSignal: webResource.abortSignal,
tracingOptions: {
tracingContext: webResource.tracingContext,
},
});
webResource.headers.set(Constants.HeaderConstants.AUTHORIZATION, `Bearer ${token}`);
return this._nextPolicy.sendRequest(webResource);
}
}
return {
create: (nextPolicy, options) => {
return new BearerTokenAuthenticationPolicy(nextPolicy, options);
},
};
}
// Copyright (c) Microsoft Corporation.
/**
* Returns a request policy factory that can be used to create an instance of
* {@link DisableResponseDecompressionPolicy}.
*/
function disableResponseDecompressionPolicy() {
return {
create: (nextPolicy, options) => {
return new DisableResponseDecompressionPolicy(nextPolicy, options);
},
};
}
/**
* A policy to disable response decompression according to Accept-Encoding header
* https://developer.mozilla.org/en-US/docs/Web/HTTP/Headers/Accept-Encoding
*/
class DisableResponseDecompressionPolicy extends BaseRequestPolicy {
/**
* Creates an instance of DisableResponseDecompressionPolicy.
*
* @param nextPolicy -
* @param options -
*/
// The parent constructor is protected.
/* eslint-disable-next-line @typescript-eslint/no-useless-constructor */
constructor(nextPolicy, options) {
super(nextPolicy, options);
}
/**
* Sends out request.
*
* @param request -
* @returns
*/
async sendRequest(request) {
request.decompressResponse = false;
return this._nextPolicy.sendRequest(request);
}
}
// Copyright (c) Microsoft Corporation.
/**
* Creates a policy that assigns a unique request id to outgoing requests.
* @param requestIdHeaderName - The name of the header to use when assigning the unique id to the request.
*/
function generateClientRequestIdPolicy(requestIdHeaderName = "x-ms-client-request-id") {
return {
create: (nextPolicy, options) => {
return new GenerateClientRequestIdPolicy(nextPolicy, options, requestIdHeaderName);
},
}
};
}
class GenerateClientRequestIdPolicy extends BaseRequestPolicy {
@@ -57435,198 +56808,138 @@ class GenerateClientRequestIdPolicy extends BaseRequestPolicy {
}
// Copyright (c) Microsoft Corporation.
let cachedHttpClient;
function getCachedDefaultHttpClient() {
if (!cachedHttpClient) {
cachedHttpClient = new NodeFetchHttpClient();
}
return cachedHttpClient;
function getDefaultUserAgentKey() {
return Constants.HeaderConstants.USER_AGENT;
}
function getPlatformSpecificData() {
const runtimeInfo = {
key: "Node",
value: process.version
};
const osInfo = {
key: "OS",
value: `(${os.arch()}-${os.type()}-${os.release()})`
};
return [runtimeInfo, osInfo];
}
// Copyright (c) Microsoft Corporation.
function ndJsonPolicy() {
function getRuntimeInfo() {
const msRestRuntime = {
key: "core-http",
value: Constants.coreHttpVersion
};
return [msRestRuntime];
}
function getUserAgentString(telemetryInfo, keySeparator = " ", valueSeparator = "/") {
return telemetryInfo
.map((info) => {
const value = info.value ? `${valueSeparator}${info.value}` : "";
return `${info.key}${value}`;
})
.join(keySeparator);
}
const getDefaultUserAgentHeaderName = getDefaultUserAgentKey;
function getDefaultUserAgentValue() {
const runtimeInfo = getRuntimeInfo();
const platformSpecificData = getPlatformSpecificData();
const userAgent = getUserAgentString(runtimeInfo.concat(platformSpecificData));
return userAgent;
}
function userAgentPolicy(userAgentData) {
const key = !userAgentData || userAgentData.key === undefined || userAgentData.key === null
? getDefaultUserAgentKey()
: userAgentData.key;
const value = !userAgentData || userAgentData.value === undefined || userAgentData.value === null
? getDefaultUserAgentValue()
: userAgentData.value;
return {
create: (nextPolicy, options) => {
return new NdJsonPolicy(nextPolicy, options);
},
return new UserAgentPolicy(nextPolicy, options, key, value);
}
};
}
/**
* NdJsonPolicy that formats a JSON array as newline-delimited JSON
*/
class NdJsonPolicy extends BaseRequestPolicy {
/**
* Creates an instance of KeepAlivePolicy.
*/
constructor(nextPolicy, options) {
super(nextPolicy, options);
class UserAgentPolicy extends BaseRequestPolicy {
constructor(_nextPolicy, _options, headerKey, headerValue) {
super(_nextPolicy, _options);
this._nextPolicy = _nextPolicy;
this._options = _options;
this.headerKey = headerKey;
this.headerValue = headerValue;
}
/**
* Sends a request.
*/
async sendRequest(request) {
// There currently isn't a good way to bypass the serializer
if (typeof request.body === "string" && request.body.startsWith("[")) {
const body = JSON.parse(request.body);
if (Array.isArray(body)) {
request.body = body.map((item) => JSON.stringify(item) + "\n").join("");
}
}
sendRequest(request) {
this.addUserAgentHeader(request);
return this._nextPolicy.sendRequest(request);
}
addUserAgentHeader(request) {
if (!request.headers) {
request.headers = new HttpHeaders();
}
if (!request.headers.get(this.headerKey) && this.headerValue) {
request.headers.set(this.headerKey, this.headerValue);
}
}
}
// Copyright (c) Microsoft Corporation.
/**
* Stores the patterns specified in NO_PROXY environment variable.
* @internal
* Methods that are allowed to follow redirects 301 and 302
*/
const globalNoProxyList = [];
let noProxyListLoaded = false;
/** A cache of whether a host should bypass the proxy. */
const globalBypassedMap = new Map();
function loadEnvironmentProxyValue() {
if (!process) {
return undefined;
}
const httpsProxy = getEnvironmentValue(Constants.HTTPS_PROXY);
const allProxy = getEnvironmentValue(Constants.ALL_PROXY);
const httpProxy = getEnvironmentValue(Constants.HTTP_PROXY);
return httpsProxy || allProxy || httpProxy;
}
/**
* Check whether the host of a given `uri` matches any pattern in the no proxy list.
* If there's a match, any request sent to the same host shouldn't have the proxy settings set.
* This implementation is a port of https://github.com/Azure/azure-sdk-for-net/blob/8cca811371159e527159c7eb65602477898683e2/sdk/core/Azure.Core/src/Pipeline/Internal/HttpEnvironmentProxy.cs#L210
*/
function isBypassed(uri, noProxyList, bypassedMap) {
if (noProxyList.length === 0) {
return false;
}
const host = URLBuilder.parse(uri).getHost();
if (bypassedMap === null || bypassedMap === void 0 ? void 0 : bypassedMap.has(host)) {
return bypassedMap.get(host);
}
let isBypassedFlag = false;
for (const pattern of noProxyList) {
if (pattern[0] === ".") {
// This should match either domain it self or any subdomain or host
// .foo.com will match foo.com it self or *.foo.com
if (host.endsWith(pattern)) {
isBypassedFlag = true;
}
else {
if (host.length === pattern.length - 1 && host === pattern.slice(1)) {
isBypassedFlag = true;
}
}
}
else {
if (host === pattern) {
isBypassedFlag = true;
}
}
}
bypassedMap === null || bypassedMap === void 0 ? void 0 : bypassedMap.set(host, isBypassedFlag);
return isBypassedFlag;
}
/**
* @internal
*/
function loadNoProxy() {
const noProxy = getEnvironmentValue(Constants.NO_PROXY);
noProxyListLoaded = true;
if (noProxy) {
return noProxy
.split(",")
.map((item) => item.trim())
.filter((item) => item.length);
}
return [];
}
/**
* Converts a given URL of a proxy server into `ProxySettings` or attempts to retrieve `ProxySettings` from the current environment if one is not passed.
* @param proxyUrl - URL of the proxy
* @returns The default proxy settings, or undefined.
*/
function getDefaultProxySettings(proxyUrl) {
if (!proxyUrl) {
proxyUrl = loadEnvironmentProxyValue();
if (!proxyUrl) {
return undefined;
}
}
const { username, password, urlWithoutAuth } = extractAuthFromUrl(proxyUrl);
const parsedUrl = URLBuilder.parse(urlWithoutAuth);
const schema = parsedUrl.getScheme() ? parsedUrl.getScheme() + "://" : "";
const allowedRedirect = ["GET", "HEAD"];
const DefaultRedirectOptions = {
handleRedirects: true,
maxRetries: 20
};
function redirectPolicy(maximumRetries = 20) {
return {
host: schema + parsedUrl.getHost(),
port: Number.parseInt(parsedUrl.getPort() || "80"),
username,
password,
create: (nextPolicy, options) => {
return new RedirectPolicy(nextPolicy, options, maximumRetries);
}
};
}
/**
* A policy that allows one to apply proxy settings to all requests.
* If not passed static settings, they will be retrieved from the HTTPS_PROXY
* or HTTP_PROXY environment variables.
* @param proxySettings - ProxySettings to use on each request.
* @param options - additional settings, for example, custom NO_PROXY patterns
*/
function proxyPolicy(proxySettings, options) {
if (!proxySettings) {
proxySettings = getDefaultProxySettings();
}
if (!noProxyListLoaded) {
globalNoProxyList.push(...loadNoProxy());
}
return {
create: (nextPolicy, requestPolicyOptions) => {
return new ProxyPolicy(nextPolicy, requestPolicyOptions, proxySettings, options === null || options === void 0 ? void 0 : options.customNoProxyList);
},
};
}
function extractAuthFromUrl(url) {
const atIndex = url.indexOf("@");
if (atIndex === -1) {
return { urlWithoutAuth: url };
}
const schemeIndex = url.indexOf("://");
const authStart = schemeIndex !== -1 ? schemeIndex + 3 : 0;
const auth = url.substring(authStart, atIndex);
const colonIndex = auth.indexOf(":");
const hasPassword = colonIndex !== -1;
const username = hasPassword ? auth.substring(0, colonIndex) : auth;
const password = hasPassword ? auth.substring(colonIndex + 1) : undefined;
const urlWithoutAuth = url.substring(0, authStart) + url.substring(atIndex + 1);
return {
username,
password,
urlWithoutAuth,
};
}
class ProxyPolicy extends BaseRequestPolicy {
constructor(nextPolicy, options, proxySettings, customNoProxyList) {
class RedirectPolicy extends BaseRequestPolicy {
constructor(nextPolicy, options, maxRetries = 20) {
super(nextPolicy, options);
this.proxySettings = proxySettings;
this.customNoProxyList = customNoProxyList;
this.maxRetries = maxRetries;
}
sendRequest(request) {
var _a;
if (!request.proxySettings &&
!isBypassed(request.url, (_a = this.customNoProxyList) !== null && _a !== void 0 ? _a : globalNoProxyList, this.customNoProxyList ? undefined : globalBypassedMap)) {
request.proxySettings = this.proxySettings;
}
return this._nextPolicy.sendRequest(request);
return this._nextPolicy
.sendRequest(request)
.then((response) => handleRedirect(this, response, 0));
}
}
function handleRedirect(policy, response, currentRetries) {
const { request, status } = response;
const locationHeader = response.headers.get("location");
if (locationHeader &&
(status === 300 ||
(status === 301 && allowedRedirect.includes(request.method)) ||
(status === 302 && allowedRedirect.includes(request.method)) ||
(status === 303 && request.method === "POST") ||
status === 307) &&
(!policy.maxRetries || currentRetries < policy.maxRetries)) {
const builder = URLBuilder.parse(request.url);
builder.setPath(locationHeader);
request.url = builder.toString();
// POST request with Status code 303 should be converted into a
// redirected GET request if the redirect url is present in the location header
if (status === 303) {
request.method = "GET";
delete request.body;
}
return policy._nextPolicy
.sendRequest(request)
.then((res) => handleRedirect(policy, res, currentRetries + 1));
}
return Promise.resolve(response);
}
// Copyright (c) Microsoft Corporation.
function rpRegistrationPolicy(retryTimeout = 30) {
return {
create: (nextPolicy, options) => {
return new RPRegistrationPolicy(nextPolicy, options, retryTimeout);
},
}
};
}
class RPRegistrationPolicy extends BaseRequestPolicy {
@@ -57771,52 +57084,193 @@ async function getRegistrationStatus(policy, url, originalRequest) {
}
// Copyright (c) Microsoft Corporation.
// Default options for the cycler if none are provided
const DEFAULT_CYCLER_OPTIONS = {
forcedRefreshWindowInMs: 1000,
retryIntervalInMs: 3000,
refreshWindowInMs: 1000 * 60 * 2 // Start refreshing 2m before expiry
};
/**
* Creates a policy that signs outgoing requests by calling to the provided `authenticationProvider`'s `signRequest` method.
* @param authenticationProvider - The authentication provider.
* @returns An instance of the {@link SigningPolicy}.
* Converts an an unreliable access token getter (which may resolve with null)
* into an AccessTokenGetter by retrying the unreliable getter in a regular
* interval.
*
* @param getAccessToken - a function that produces a promise of an access
* token that may fail by returning null
* @param retryIntervalInMs - the time (in milliseconds) to wait between retry
* attempts
* @param timeoutInMs - the timestamp after which the refresh attempt will fail,
* throwing an exception
* @returns - a promise that, if it resolves, will resolve with an access token
*/
function signingPolicy(authenticationProvider) {
return {
create: (nextPolicy, options) => {
return new SigningPolicy(nextPolicy, options, authenticationProvider);
},
};
async function beginRefresh(getAccessToken, retryIntervalInMs, timeoutInMs) {
// This wrapper handles exceptions gracefully as long as we haven't exceeded
// the timeout.
async function tryGetAccessToken() {
if (Date.now() < timeoutInMs) {
try {
return await getAccessToken();
}
catch (_a) {
return null;
}
}
else {
const finalToken = await getAccessToken();
// Timeout is up, so throw if it's still null
if (finalToken === null) {
throw new Error("Failed to refresh access token.");
}
return finalToken;
}
}
let token = await tryGetAccessToken();
while (token === null) {
await delay(retryIntervalInMs);
token = await tryGetAccessToken();
}
return token;
}
/**
* A policy that signs outgoing requests by calling to the provided `authenticationProvider`'s `signRequest` method.
* Creates a token cycler from a credential, scopes, and optional settings.
*
* A token cycler represents a way to reliably retrieve a valid access token
* from a TokenCredential. It will handle initializing the token, refreshing it
* when it nears expiration, and synchronizes refresh attempts to avoid
* concurrency hazards.
*
* @param credential - the underlying TokenCredential that provides the access
* token
* @param scopes - the scopes to request authorization for
* @param tokenCyclerOptions - optionally override default settings for the cycler
*
* @returns - a function that reliably produces a valid access token
*/
class SigningPolicy extends BaseRequestPolicy {
constructor(nextPolicy, options, authenticationProvider) {
super(nextPolicy, options);
this.authenticationProvider = authenticationProvider;
function createTokenCycler(credential, scopes, tokenCyclerOptions) {
let refreshWorker = null;
let token = null;
const options = Object.assign(Object.assign({}, DEFAULT_CYCLER_OPTIONS), tokenCyclerOptions);
/**
* This little holder defines several predicates that we use to construct
* the rules of refreshing the token.
*/
const cycler = {
/**
* Produces true if a refresh job is currently in progress.
*/
get isRefreshing() {
return refreshWorker !== null;
},
/**
* Produces true if the cycler SHOULD refresh (we are within the refresh
* window and not already refreshing)
*/
get shouldRefresh() {
var _a;
return (!cycler.isRefreshing &&
((_a = token === null || token === void 0 ? void 0 : token.expiresOnTimestamp) !== null && _a !== void 0 ? _a : 0) - options.refreshWindowInMs < Date.now());
},
/**
* Produces true if the cycler MUST refresh (null or nearly-expired
* token).
*/
get mustRefresh() {
return (token === null || token.expiresOnTimestamp - options.forcedRefreshWindowInMs < Date.now());
}
};
/**
* Starts a refresh job or returns the existing job if one is already
* running.
*/
function refresh(getTokenOptions) {
var _a;
if (!cycler.isRefreshing) {
// We bind `scopes` here to avoid passing it around a lot
const tryGetAccessToken = () => credential.getToken(scopes, getTokenOptions);
// Take advantage of promise chaining to insert an assignment to `token`
// before the refresh can be considered done.
refreshWorker = beginRefresh(tryGetAccessToken, options.retryIntervalInMs,
// If we don't have a token, then we should timeout immediately
(_a = token === null || token === void 0 ? void 0 : token.expiresOnTimestamp) !== null && _a !== void 0 ? _a : Date.now())
.then((_token) => {
refreshWorker = null;
token = _token;
return token;
})
.catch((reason) => {
// We also should reset the refresher if we enter a failed state. All
// existing awaiters will throw, but subsequent requests will start a
// new retry chain.
refreshWorker = null;
token = null;
throw reason;
});
}
return refreshWorker;
}
signRequest(request) {
return this.authenticationProvider.signRequest(request);
}
sendRequest(request) {
return this.signRequest(request).then((nextRequest) => this._nextPolicy.sendRequest(nextRequest));
return async (tokenOptions) => {
//
// Simple rules:
// - If we MUST refresh, then return the refresh task, blocking
// the pipeline until a token is available.
// - If we SHOULD refresh, then run refresh but don't return it
// (we can still use the cached token).
// - Return the token, since it's fine if we didn't return in
// step 1.
//
if (cycler.mustRefresh)
return refresh(tokenOptions);
if (cycler.shouldRefresh) {
refresh(tokenOptions);
}
return token;
};
}
// #endregion
/**
* Creates a new factory for a RequestPolicy that applies a bearer token to
* the requests' `Authorization` headers.
*
* @param credential - The TokenCredential implementation that can supply the bearer token.
* @param scopes - The scopes for which the bearer token applies.
*/
function bearerTokenAuthenticationPolicy(credential, scopes) {
// This simple function encapsulates the entire process of reliably retrieving the token
const getToken = createTokenCycler(credential, scopes /* , options */);
class BearerTokenAuthenticationPolicy extends BaseRequestPolicy {
constructor(nextPolicy, options) {
super(nextPolicy, options);
}
async sendRequest(webResource) {
if (!webResource.url.toLowerCase().startsWith("https://")) {
throw new Error("Bearer token authentication is not permitted for non-TLS protected (non-https) URLs.");
}
const { token } = await getToken({
abortSignal: webResource.abortSignal,
tracingOptions: {
tracingContext: webResource.tracingContext
}
});
webResource.headers.set(Constants.HeaderConstants.AUTHORIZATION, `Bearer ${token}`);
return this._nextPolicy.sendRequest(webResource);
}
}
return {
create: (nextPolicy, options) => {
return new BearerTokenAuthenticationPolicy(nextPolicy, options);
}
};
}
// Copyright (c) Microsoft Corporation.
/**
* A policy that retries when there's a system error, identified by the codes "ETIMEDOUT", "ESOCKETTIMEDOUT", "ECONNREFUSED", "ECONNRESET" or "ENOENT".
* @param retryCount - Maximum number of retries.
* @param retryInterval - The client retry interval, in milliseconds.
* @param minRetryInterval - The minimum retry interval, in milliseconds.
* @param maxRetryInterval - The maximum retry interval, in milliseconds.
* @returns An instance of the {@link SystemErrorRetryPolicy}
*/
function systemErrorRetryPolicy(retryCount, retryInterval, minRetryInterval, maxRetryInterval) {
return {
create: (nextPolicy, options) => {
return new SystemErrorRetryPolicy(nextPolicy, options, retryCount, retryInterval, minRetryInterval, maxRetryInterval);
},
}
};
}
/**
* A policy that retries when there's a system error, identified by the codes "ETIMEDOUT", "ESOCKETTIMEDOUT", "ECONNREFUSED", "ECONNRESET" or "ENOENT".
* @param retryCount - The client retry count.
* @param retryInterval - The client retry interval, in milliseconds.
* @param minRetryInterval - The minimum retry interval, in milliseconds.
@@ -57837,10 +57291,10 @@ class SystemErrorRetryPolicy extends BaseRequestPolicy {
sendRequest(request) {
return this._nextPolicy
.sendRequest(request.clone())
.catch((error) => retry(this, request, error.response, error));
.catch((error) => retry$1(this, request, error.response, error));
}
}
async function retry(policy, request, operationResponse, err, retryData) {
async function retry$1(policy, request, operationResponse, err, retryData) {
retryData = updateRetryData(policy, retryData, err);
function shouldPolicyRetry(_response, error) {
if (error &&
@@ -57861,7 +57315,7 @@ async function retry(policy, request, operationResponse, err, retryData) {
return policy._nextPolicy.sendRequest(request.clone());
}
catch (nestedErr) {
return retry(policy, request, operationResponse, nestedErr, retryData);
return retry$1(policy, request, operationResponse, nestedErr, retryData);
}
}
else {
@@ -57873,6 +57327,155 @@ async function retry(policy, request, operationResponse, err, retryData) {
}
}
// Copyright (c) Microsoft Corporation.
(function (QueryCollectionFormat) {
QueryCollectionFormat["Csv"] = ",";
QueryCollectionFormat["Ssv"] = " ";
QueryCollectionFormat["Tsv"] = "\t";
QueryCollectionFormat["Pipes"] = "|";
QueryCollectionFormat["Multi"] = "Multi";
})(exports.QueryCollectionFormat || (exports.QueryCollectionFormat = {}));
// Copyright (c) Microsoft Corporation.
/**
* Stores the patterns specified in NO_PROXY environment variable.
* @internal
*/
const globalNoProxyList = [];
let noProxyListLoaded = false;
/** A cache of whether a host should bypass the proxy. */
const globalBypassedMap = new Map();
function loadEnvironmentProxyValue() {
if (!process) {
return undefined;
}
const httpsProxy = getEnvironmentValue(Constants.HTTPS_PROXY);
const allProxy = getEnvironmentValue(Constants.ALL_PROXY);
const httpProxy = getEnvironmentValue(Constants.HTTP_PROXY);
return httpsProxy || allProxy || httpProxy;
}
/**
* Check whether the host of a given `uri` matches any pattern in the no proxy list.
* If there's a match, any request sent to the same host shouldn't have the proxy settings set.
* This implementation is a port of https://github.com/Azure/azure-sdk-for-net/blob/8cca811371159e527159c7eb65602477898683e2/sdk/core/Azure.Core/src/Pipeline/Internal/HttpEnvironmentProxy.cs#L210
*/
function isBypassed(uri, noProxyList, bypassedMap) {
if (noProxyList.length === 0) {
return false;
}
const host = URLBuilder.parse(uri).getHost();
if (bypassedMap === null || bypassedMap === void 0 ? void 0 : bypassedMap.has(host)) {
return bypassedMap.get(host);
}
let isBypassedFlag = false;
for (const pattern of noProxyList) {
if (pattern[0] === ".") {
// This should match either domain it self or any subdomain or host
// .foo.com will match foo.com it self or *.foo.com
if (host.endsWith(pattern)) {
isBypassedFlag = true;
}
else {
if (host.length === pattern.length - 1 && host === pattern.slice(1)) {
isBypassedFlag = true;
}
}
}
else {
if (host === pattern) {
isBypassedFlag = true;
}
}
}
bypassedMap === null || bypassedMap === void 0 ? void 0 : bypassedMap.set(host, isBypassedFlag);
return isBypassedFlag;
}
/**
* @internal
*/
function loadNoProxy() {
const noProxy = getEnvironmentValue(Constants.NO_PROXY);
noProxyListLoaded = true;
if (noProxy) {
return noProxy
.split(",")
.map((item) => item.trim())
.filter((item) => item.length);
}
return [];
}
function getDefaultProxySettings(proxyUrl) {
if (!proxyUrl) {
proxyUrl = loadEnvironmentProxyValue();
if (!proxyUrl) {
return undefined;
}
}
const { username, password, urlWithoutAuth } = extractAuthFromUrl(proxyUrl);
const parsedUrl = URLBuilder.parse(urlWithoutAuth);
const schema = parsedUrl.getScheme() ? parsedUrl.getScheme() + "://" : "";
return {
host: schema + parsedUrl.getHost(),
port: Number.parseInt(parsedUrl.getPort() || "80"),
username,
password
};
}
/**
* A policy that allows one to apply proxy settings to all requests.
* If not passed static settings, they will be retrieved from the HTTPS_PROXY
* or HTTP_PROXY environment variables.
* @param proxySettings - ProxySettings to use on each request.
* @param options - additional settings, for example, custom NO_PROXY patterns
*/
function proxyPolicy(proxySettings, options) {
if (!proxySettings) {
proxySettings = getDefaultProxySettings();
}
if (!noProxyListLoaded) {
globalNoProxyList.push(...loadNoProxy());
}
return {
create: (nextPolicy, requestPolicyOptions) => {
return new ProxyPolicy(nextPolicy, requestPolicyOptions, proxySettings, options === null || options === void 0 ? void 0 : options.customNoProxyList);
}
};
}
function extractAuthFromUrl(url) {
const atIndex = url.indexOf("@");
if (atIndex === -1) {
return { urlWithoutAuth: url };
}
const schemeIndex = url.indexOf("://");
const authStart = schemeIndex !== -1 ? schemeIndex + 3 : 0;
const auth = url.substring(authStart, atIndex);
const colonIndex = auth.indexOf(":");
const hasPassword = colonIndex !== -1;
const username = hasPassword ? auth.substring(0, colonIndex) : auth;
const password = hasPassword ? auth.substring(colonIndex + 1) : undefined;
const urlWithoutAuth = url.substring(0, authStart) + url.substring(atIndex + 1);
return {
username,
password,
urlWithoutAuth
};
}
class ProxyPolicy extends BaseRequestPolicy {
constructor(nextPolicy, options, proxySettings, customNoProxyList) {
super(nextPolicy, options);
this.proxySettings = proxySettings;
this.customNoProxyList = customNoProxyList;
}
sendRequest(request) {
var _a;
if (!request.proxySettings &&
!isBypassed(request.url, (_a = this.customNoProxyList) !== null && _a !== void 0 ? _a : globalNoProxyList, this.customNoProxyList ? undefined : globalBypassedMap)) {
request.proxySettings = this.proxySettings;
}
return this._nextPolicy.sendRequest(request);
}
}
// Copyright (c) Microsoft Corporation.
// Licensed under the MIT license.
/**
@@ -57882,28 +57485,15 @@ const DEFAULT_CLIENT_MAX_RETRY_COUNT = 3;
// Copyright (c) Microsoft Corporation.
const StatusCodes = Constants.HttpConstants.StatusCodes;
/**
* Creates a policy that re-sends the request if the response indicates the request failed because of throttling reasons.
* For example, if the response contains a `Retry-After` header, it will retry sending the request based on the value of that header.
*
* To learn more, please refer to
* https://docs.microsoft.com/en-us/azure/azure-resource-manager/resource-manager-request-limits,
* https://docs.microsoft.com/en-us/azure/azure-subscription-service-limits and
* https://docs.microsoft.com/en-us/azure/virtual-machines/troubleshooting/troubleshooting-throttling-errors
* @returns
*/
function throttlingRetryPolicy() {
return {
create: (nextPolicy, options) => {
return new ThrottlingRetryPolicy(nextPolicy, options);
},
}
};
}
const StandardAbortMessage = "The operation was aborted.";
const StandardAbortMessage$1 = "The operation was aborted.";
/**
* Creates a policy that re-sends the request if the response indicates the request failed because of throttling reasons.
* For example, if the response contains a `Retry-After` header, it will retry sending the request based on the value of that header.
*
* To learn more, please refer to
* https://docs.microsoft.com/en-us/azure/azure-resource-manager/resource-manager-request-limits,
* https://docs.microsoft.com/en-us/azure/azure-subscription-service-limits and
@@ -57934,10 +57524,10 @@ class ThrottlingRetryPolicy extends BaseRequestPolicy {
this.numberOfRetries += 1;
await delay(delayInMs, undefined, {
abortSignal: httpRequest.abortSignal,
abortErrorMsg: StandardAbortMessage,
abortErrorMsg: StandardAbortMessage$1
});
if ((_a = httpRequest.abortSignal) === null || _a === void 0 ? void 0 : _a.aborted) {
throw new abortController.AbortError(StandardAbortMessage);
throw new abortController.AbortError(StandardAbortMessage$1);
}
if (this.numberOfRetries < DEFAULT_CLIENT_MAX_RETRY_COUNT) {
return this.sendRequest(httpRequest);
@@ -57971,26 +57561,77 @@ class ThrottlingRetryPolicy extends BaseRequestPolicy {
}
}
// Copyright (c) Microsoft Corporation.
function signingPolicy(authenticationProvider) {
return {
create: (nextPolicy, options) => {
return new SigningPolicy(nextPolicy, options, authenticationProvider);
}
};
}
class SigningPolicy extends BaseRequestPolicy {
constructor(nextPolicy, options, authenticationProvider) {
super(nextPolicy, options);
this.authenticationProvider = authenticationProvider;
}
signRequest(request) {
return this.authenticationProvider.signRequest(request);
}
sendRequest(request) {
return this.signRequest(request).then((nextRequest) => this._nextPolicy.sendRequest(nextRequest));
}
}
// Copyright (c) Microsoft Corporation.
const DefaultKeepAliveOptions = {
enable: true
};
function keepAlivePolicy(keepAliveOptions) {
return {
create: (nextPolicy, options) => {
return new KeepAlivePolicy(nextPolicy, options, keepAliveOptions || DefaultKeepAliveOptions);
}
};
}
/**
* KeepAlivePolicy is a policy used to control keep alive settings for every request.
*/
class KeepAlivePolicy extends BaseRequestPolicy {
/**
* Creates an instance of KeepAlivePolicy.
*
* @param nextPolicy -
* @param options -
* @param keepAliveOptions -
*/
constructor(nextPolicy, options, keepAliveOptions) {
super(nextPolicy, options);
this.keepAliveOptions = keepAliveOptions;
}
/**
* Sends out request.
*
* @param request -
* @returns
*/
async sendRequest(request) {
request.keepAlive = this.keepAliveOptions.enable;
return this._nextPolicy.sendRequest(request);
}
}
// Copyright (c) Microsoft Corporation.
const createSpan = coreTracing.createSpanFunction({
packagePrefix: "",
namespace: "",
namespace: ""
});
/**
* Creates a policy that wraps outgoing requests with a tracing span.
* @param tracingOptions - Tracing options.
* @returns An instance of the {@link TracingPolicy} class.
*/
function tracingPolicy(tracingOptions = {}) {
return {
create(nextPolicy, options) {
return new TracingPolicy(nextPolicy, options, tracingOptions);
},
}
};
}
/**
* A policy that wraps outgoing requests with a tracing span.
*/
class TracingPolicy extends BaseRequestPolicy {
constructor(nextPolicy, options, tracingOptions) {
super(nextPolicy, options);
@@ -58017,13 +57658,14 @@ class TracingPolicy extends BaseRequestPolicy {
tryCreateSpan(request) {
var _a;
try {
const path = URLBuilder.parse(request.url).getPath() || "/";
// Passing spanOptions as part of tracingOptions to maintain compatibility @azure/core-tracing@preview.13 and earlier.
// We can pass this as a separate parameter once we upgrade to the latest core-tracing.
const { span } = createSpan(`HTTP ${request.method}`, {
const { span } = createSpan(path, {
tracingOptions: {
spanOptions: Object.assign(Object.assign({}, request.spanOptions), { kind: coreTracing.SpanKind.CLIENT }),
tracingContext: request.tracingContext,
},
tracingContext: request.tracingContext
}
});
// If the span is not recording, don't do any more work.
if (!span.isRecording()) {
@@ -58037,7 +57679,7 @@ class TracingPolicy extends BaseRequestPolicy {
span.setAttributes({
"http.method": request.method,
"http.url": request.url,
requestId: request.requestId,
requestId: request.requestId
});
if (this.userAgent) {
span.setAttribute("http.user_agent", this.userAgent);
@@ -58064,7 +57706,7 @@ class TracingPolicy extends BaseRequestPolicy {
try {
span.setStatus({
code: coreTracing.SpanStatusCode.ERROR,
message: err.message,
message: err.message
});
if (err.statusCode) {
span.setAttribute("http.status_code", err.statusCode);
@@ -58083,7 +57725,7 @@ class TracingPolicy extends BaseRequestPolicy {
span.setAttribute("serviceRequestId", serviceRequestId);
}
span.setStatus({
code: coreTracing.SpanStatusCode.OK,
code: coreTracing.SpanStatusCode.OK
});
span.end();
}
@@ -58093,6 +57735,88 @@ class TracingPolicy extends BaseRequestPolicy {
}
}
// Copyright (c) Microsoft Corporation.
/**
* Returns a request policy factory that can be used to create an instance of
* {@link DisableResponseDecompressionPolicy}.
*/
function disableResponseDecompressionPolicy() {
return {
create: (nextPolicy, options) => {
return new DisableResponseDecompressionPolicy(nextPolicy, options);
}
};
}
/**
* A policy to disable response decompression according to Accept-Encoding header
* https://developer.mozilla.org/en-US/docs/Web/HTTP/Headers/Accept-Encoding
*/
class DisableResponseDecompressionPolicy extends BaseRequestPolicy {
/**
* Creates an instance of DisableResponseDecompressionPolicy.
*
* @param nextPolicy -
* @param options -
*/
// The parent constructor is protected.
/* eslint-disable-next-line @typescript-eslint/no-useless-constructor */
constructor(nextPolicy, options) {
super(nextPolicy, options);
}
/**
* Sends out request.
*
* @param request -
* @returns
*/
async sendRequest(request) {
request.decompressResponse = false;
return this._nextPolicy.sendRequest(request);
}
}
// Copyright (c) Microsoft Corporation.
function ndJsonPolicy() {
return {
create: (nextPolicy, options) => {
return new NdJsonPolicy(nextPolicy, options);
}
};
}
/**
* NdJsonPolicy that formats a JSON array as newline-delimited JSON
*/
class NdJsonPolicy extends BaseRequestPolicy {
/**
* Creates an instance of KeepAlivePolicy.
*/
constructor(nextPolicy, options) {
super(nextPolicy, options);
}
/**
* Sends a request.
*/
async sendRequest(request) {
// There currently isn't a good way to bypass the serializer
if (typeof request.body === "string" && request.body.startsWith("[")) {
const body = JSON.parse(request.body);
if (Array.isArray(body)) {
request.body = body.map((item) => JSON.stringify(item) + "\n").join("");
}
}
return this._nextPolicy.sendRequest(request);
}
}
// Copyright (c) Microsoft Corporation.
let cachedHttpClient;
function getCachedDefaultHttpClient() {
if (!cachedHttpClient) {
cachedHttpClient = new NodeFetchHttpClient();
}
return cachedHttpClient;
}
// Copyright (c) Microsoft Corporation.
/**
* ServiceClient sends service requests and receives responses.
@@ -58142,7 +57866,7 @@ class ServiceClient {
bearerTokenPolicyFactory = bearerTokenAuthenticationPolicy(credentials, credentialScopes);
}
return bearerTokenPolicyFactory.create(nextPolicy, createOptions);
},
}
};
};
authPolicyFactory = wrappedPolicyFactory();
@@ -58377,7 +58101,7 @@ function serializeRequestBody(serviceClient, httpRequest, operationArguments, op
const updatedOptions = {
rootName: (_c = serializerOptions.rootName) !== null && _c !== void 0 ? _c : "",
includeRoot: (_d = serializerOptions.includeRoot) !== null && _d !== void 0 ? _d : false,
xmlCharKey: (_e = serializerOptions.xmlCharKey) !== null && _e !== void 0 ? _e : XML_CHARKEY,
xmlCharKey: (_e = serializerOptions.xmlCharKey) !== null && _e !== void 0 ? _e : XML_CHARKEY
};
const xmlCharKey = serializerOptions.xmlCharKey;
if (operationSpec.requestBody && operationSpec.requestBody.mapper) {
@@ -58396,13 +58120,13 @@ function serializeRequestBody(serviceClient, httpRequest, operationArguments, op
if (typeName === MapperType.Sequence) {
httpRequest.body = stringifyXML(prepareXMLRootList(value, xmlElementName || xmlName || serializedName, xmlnsKey, xmlNamespace), {
rootName: xmlName || serializedName,
xmlCharKey,
xmlCharKey
});
}
else if (!isStream) {
httpRequest.body = stringifyXML(value, {
rootName: xmlName || serializedName,
xmlCharKey,
xmlCharKey
});
}
}
@@ -58486,12 +58210,6 @@ function createDefaultRequestPolicyFactories(authPolicyFactory, options) {
factories.push(logPolicy({ logger: logger.info }));
return factories;
}
/**
* Creates an HTTP pipeline based on the given options.
* @param pipelineOptions - Defines options that are used to configure policies in the HTTP pipeline for an SDK client.
* @param authPolicyFactory - An optional authentication policy factory to use for signing requests.
* @returns A set of options that can be passed to create a new {@link ServiceClient}.
*/
function createPipelineFromOptions(pipelineOptions, authPolicyFactory) {
const requestPolicyFactories = [];
if (pipelineOptions.sendStreamingJson) {
@@ -58530,7 +58248,7 @@ function createPipelineFromOptions(pipelineOptions, authPolicyFactory) {
}
return {
httpClient: pipelineOptions.httpClient,
requestPolicyFactories,
requestPolicyFactories
};
}
function getOperationArgumentValueFromParameter(serviceClient, operationArguments, parameter, serializer) {
@@ -58606,18 +58324,12 @@ function getPropertyFromParameterPath(parent, parameterPath) {
}
return result;
}
/**
* Parses an {@link HttpOperationResponse} into a normalized HTTP response object ({@link RestResponse}).
* @param _response - Wrapper object for http response.
* @param responseSpec - Mappers for how to parse the response properties.
* @returns - A normalized response object.
*/
function flattenResponse(_response, responseSpec) {
const parsedHeaders = _response.parsedHeaders;
const bodyMapper = responseSpec && responseSpec.bodyMapper;
const addOperationResponse = (obj) => {
return Object.defineProperty(obj, "_response", {
value: _response,
value: _response
});
};
if (bodyMapper) {
@@ -58703,16 +58415,9 @@ class ExpiringAccessTokenCache {
this.cachedToken = undefined;
this.tokenRefreshBufferMs = tokenRefreshBufferMs;
}
/**
* Saves an access token into the internal in-memory cache.
* @param accessToken - Access token or undefined to clear the cache.
*/
setCachedToken(accessToken) {
this.cachedToken = accessToken;
}
/**
* Returns the cached access token, or `undefined` if one is not cached or the cached one is expiring soon.
*/
getCachedToken() {
if (this.cachedToken &&
Date.now() + this.tokenRefreshBufferMs >= this.cachedToken.expiresOnTimestamp) {
@@ -58771,9 +58476,6 @@ class AccessTokenRefresher {
// Copyright (c) Microsoft Corporation.
const HeaderConstants = Constants.HeaderConstants;
const DEFAULT_AUTHORIZATION_SCHEME = "Basic";
/**
* A simple {@link ServiceClientCredential} that authenticates with a username and a password.
*/
class BasicAuthenticationCredentials {
/**
* Creates a new BasicAuthenticationCredentials object.
@@ -58783,10 +58485,6 @@ class BasicAuthenticationCredentials {
* @param authorizationScheme - The authorization scheme.
*/
constructor(userName, password, authorizationScheme = DEFAULT_AUTHORIZATION_SCHEME) {
/**
* Authorization scheme. Defaults to "Basic".
* More information about authorization schemes is available here: https://developer.mozilla.org/docs/Web/HTTP/Authentication#authentication_schemes
*/
this.authorizationScheme = DEFAULT_AUTHORIZATION_SCHEME;
if (userName === null || userName === undefined || typeof userName.valueOf() !== "string") {
throw new Error("userName cannot be null or undefined and must be of type string.");
@@ -58866,9 +58564,6 @@ class ApiKeyCredentials {
}
// Copyright (c) Microsoft Corporation.
/**
* A {@link TopicCredentials} object used for Azure Event Grid.
*/
class TopicCredentials extends ApiKeyCredentials {
/**
* Creates a new EventGrid TopicCredentials object.
@@ -58881,8 +58576,8 @@ class TopicCredentials extends ApiKeyCredentials {
}
const options = {
inHeader: {
"aeg-sas-key": topicKey,
},
"aeg-sas-key": topicKey
}
};
super(options);
}
@@ -58890,7 +58585,9 @@ class TopicCredentials extends ApiKeyCredentials {
Object.defineProperty(exports, 'isTokenCredential', {
enumerable: true,
get: function () { return coreAuth.isTokenCredential; }
get: function () {
return coreAuth.isTokenCredential;
}
});
exports.AccessTokenRefresher = AccessTokenRefresher;
exports.ApiKeyCredentials = ApiKeyCredentials;
+114 -162
View File
@@ -1,44 +1,38 @@
# Examples
- [C# - NuGet](#c---nuget)
- [D - DUB](#d---dub)
- [POSIX](#posix)
- [Windows](#windows)
- [Elixir - Mix](#elixir---mix)
- [Go - Modules](#go---modules)
- [Linux](#linux)
- [macOS](#macos)
- [Windows](#windows-1)
- [Haskell - Cabal](#haskell---cabal)
- [Java - Gradle](#java---gradle)
- [Java - Maven](#java---maven)
- [Node - npm](#node---npm)
- [macOS and Ubuntu](#macos-and-ubuntu)
- [Windows](#windows-2)
- [Using multiple systems and `npm config`](#using-multiple-systems-and-npm-config)
- [Node - Lerna](#node---lerna)
- [Node - Yarn](#node---yarn)
- [Node - Yarn 2](#node---yarn-2)
- [OCaml/Reason - esy](#ocamlreason---esy)
- [PHP - Composer](#php---composer)
- [Python - pip](#python---pip)
- [Simple example](#simple-example)
- [Multiple OS's in a workflow](#multiple-oss-in-a-workflow)
- [Multiple OS's in a workflow with a matrix](#multiple-oss-in-a-workflow-with-a-matrix)
- [Using pip to get cache location](#using-pip-to-get-cache-location)
- [Python - pipenv](#python---pipenv)
- [R - renv](#r---renv)
- [Simple example](#simple-example-1)
- [Multiple OS's in a workflow](#multiple-oss-in-a-workflow-1)
- [Ruby - Bundler](#ruby---bundler)
- [Rust - Cargo](#rust---cargo)
- [Scala - SBT](#scala---sbt)
- [Swift, Objective-C - Carthage](#swift-objective-c---carthage)
- [Swift, Objective-C - CocoaPods](#swift-objective-c---cocoapods)
- [Swift - Swift Package Manager](#swift---swift-package-manager)
- [Examples](#examples)
- [C# - NuGet](#c---nuget)
- [D - DUB](#d---dub)
- [Elixir - Mix](#elixir---mix)
- [Go - Modules](#go---modules)
- [Haskell - Cabal](#haskell---cabal)
- [Java - Gradle](#java---gradle)
- [Java - Maven](#java---maven)
- [Node - npm](#node---npm)
- [macOS and Ubuntu](#macos-and-ubuntu)
- [Windows](#windows)
- [Using multiple systems and `npm config`](#using-multiple-systems-and-npm-config)
- [Node - Lerna](#node---lerna)
- [Node - Yarn](#node---yarn)
- [Node - Yarn 2](#node---yarn-2)
- [OCaml/Reason - esy](#ocamlreason---esy)
- [PHP - Composer](#php---composer)
- [Python - pip](#python---pip)
- [Simple example](#simple-example)
- [Multiple OSes in a workflow](#multiple-oss-in-a-workflow)
- [Using pip to get cache location](#using-pip-to-get-cache-location)
- [Using a script to get cache location](#using-a-script-to-get-cache-location)
- [R - renv](#r---renv)
- [Simple example](#simple-example-1)
- [Multiple OSes in a workflow](#multiple-oss-in-a-workflow-1)
- [Ruby - Bundler](#ruby---bundler)
- [Rust - Cargo](#rust---cargo)
- [Scala - SBT](#scala---sbt)
- [Swift, Objective-C - Carthage](#swift-objective-c---carthage)
- [Swift, Objective-C - CocoaPods](#swift-objective-c---cocoapods)
- [Swift - Swift Package Manager](#swift---swift-package-manager)
## C# - NuGet
Using [NuGet lock files](https://docs.microsoft.com/nuget/consume-packages/package-references-in-project-files#locking-dependencies):
```yaml
@@ -52,11 +46,10 @@ Using [NuGet lock files](https://docs.microsoft.com/nuget/consume-packages/packa
Depending on the environment, huge packages might be pre-installed in the global cache folder.
With `actions/cache@v2` you can now exclude unwanted packages with [exclude pattern](https://github.com/actions/toolkit/tree/main/packages/glob#exclude-patterns)
```yaml
- uses: actions/cache@v2
with:
path: |
path: |
~/.nuget/packages
!~/.nuget/packages/unwanted
key: ${{ runner.os }}-nuget-${{ hashFiles('**/packages.lock.json') }}
@@ -103,54 +96,21 @@ steps:
```
## Elixir - Mix
```yaml
- uses: actions/cache@v2
with:
path: |
deps
_build
key: ${{ runner.os }}-mix-${{ hashFiles('**/mix.lock') }}
path: deps
key: ${{ runner.os }}-mix-${{ hashFiles(format('{0}{1}', github.workspace, '/mix.lock')) }}
restore-keys: |
${{ runner.os }}-mix-
```
## Go - Modules
### Linux
```yaml
- uses: actions/cache@v2
with:
path: |
~/.cache/go-build
~/go/pkg/mod
key: ${{ runner.os }}-go-${{ hashFiles('**/go.sum') }}
restore-keys: |
${{ runner.os }}-go-
```
### macOS
```yaml
- uses: actions/cache@v2
with:
path: |
~/Library/Caches/go-build
~/go/pkg/mod
key: ${{ runner.os }}-go-${{ hashFiles('**/go.sum') }}
restore-keys: |
${{ runner.os }}-go-
```
### Windows
```yaml
- uses: actions/cache@v2
with:
path: |
%LocalAppData%\go-build
~/go/pkg/mod
path: ~/go/pkg/mod
key: ${{ runner.os }}-go-${{ hashFiles('**/go.sum') }}
restore-keys: |
${{ runner.os }}-go-
@@ -168,21 +128,18 @@ We cache the elements of the Cabal store separately, as the entirety of `~/.caba
~/.cabal/packages
~/.cabal/store
dist-newstyle
key: ${{ runner.os }}-${{ matrix.ghc }}-${{ hashFiles('**/*.cabal', '**/cabal.project', '**/cabal.project.freeze') }}
restore-keys: ${{ runner.os }}-${{ matrix.ghc }}-
key: ${{ runner.os }}-${{ matrix.ghc }}
```
## Java - Gradle
>Note: Ensure no Gradle daemons are running anymore when your workflow completes. Creating the cache package might fail due to locks being held by Gradle. Refer to the [Gradle Daemon documentation](https://docs.gradle.org/current/userguide/gradle_daemon.html) on how to disable or stop the Gradle Daemons.
```yaml
- uses: actions/cache@v2
with:
path: |
~/.gradle/caches
~/.gradle/wrapper
key: ${{ runner.os }}-gradle-${{ hashFiles('**/*.gradle*', '**/gradle-wrapper.properties') }}
key: ${{ runner.os }}-gradle-${{ hashFiles('**/*.gradle*') }}
restore-keys: |
${{ runner.os }}-gradle-
```
@@ -237,13 +194,12 @@ If using `npm config` to retrieve the cache directory, ensure you run [actions/s
```yaml
- name: Get npm cache directory
id: npm-cache-dir
id: npm-cache
run: |
echo "::set-output name=dir::$(npm config get cache)"
- uses: actions/cache@v2
id: npm-cache # use this to check for `cache-hit` ==> if: steps.npm-cache.outputs.cache-hit != 'true'
with:
path: ${{ steps.npm-cache-dir.outputs.dir }}
path: ${{ steps.npm-cache.outputs.dir }}
key: ${{ runner.os }}-node-${{ hashFiles('**/package-lock.json') }}
restore-keys: |
${{ runner.os }}-node-
@@ -278,8 +234,8 @@ The yarn cache directory will depend on your operating system and version of `ya
${{ runner.os }}-yarn-
```
## Node - Yarn 2
## Node - Yarn 2
The yarn 2 cache directory will depend on your config. See https://yarnpkg.com/configuration/yarnrc#cacheFolder for more info.
```yaml
@@ -297,7 +253,6 @@ The yarn 2 cache directory will depend on your config. See https://yarnpkg.com/c
```
## OCaml/Reason - esy
Esy allows you to export built dependencies and import pre-built dependencies.
```yaml
- name: Restore Cache
@@ -318,12 +273,13 @@ Esy allows you to export built dependencies and import pre-built dependencies.
...(Build job)...
# Re-export dependencies if anything has changed or if it is the first time
- name: Setting dependency cache
- name: Setting dependency cache
run: |
esy export-dependencies
if: steps.restore-cache.outputs.cache-hit != 'true'
```
## PHP - Composer
```yaml
@@ -344,13 +300,11 @@ Esy allows you to export built dependencies and import pre-built dependencies.
For pip, the cache directory will vary by OS. See https://pip.pypa.io/en/stable/reference/pip_install/#caching
Locations:
- Ubuntu: `~/.cache/pip`
- Windows: `~\AppData\Local\pip\Cache`
- macOS: `~/Library/Caches/pip`
- Ubuntu: `~/.cache/pip`
- Windows: `~\AppData\Local\pip\Cache`
- macOS: `~/Library/Caches/pip`
### Simple example
```yaml
- uses: actions/cache@v2
with:
@@ -390,31 +344,6 @@ Replace `~/.cache/pip` with the correct `path` if not using Ubuntu.
${{ runner.os }}-pip-
```
### Multiple OS's in a workflow with a matrix
``` yaml
jobs:
build:
runs-on: ${{ matrix.os }}
strategy:
matrix:
os: [ubuntu-latest, macos-latest, windows-latest]
include:
- os: ubuntu-latest
path: ~/.cache/pip
- os: macos-latest
path: ~/Library/Caches/pip
- os: windows-latest
path: ~\AppData\Local\pip\Cache
steps:
- uses: actions/cache@v2
with:
path: ${{ matrix.path }}
key: ${{ runner.os }}-pip-${{ hashFiles('**/requirements.txt') }}
restore-keys: |
${{ runner.os }}-pip-
```
### Using pip to get cache location
> Note: This requires pip 20.1+
@@ -433,64 +362,89 @@ jobs:
${{ runner.os }}-pip-
```
## Python - pipenv
### Using a script to get cache location
> Note: This uses an internal pip API and may not always work
```yaml
- name: Set up Python
# The actions/cache step below uses this id to get the exact python version
id: setup-python
uses: actions/setup-python@v2
- name: Get pip cache dir
id: pip-cache
run: |
python -c "from pip._internal.locations import USER_CACHE_DIR; print('::set-output name=dir::' + USER_CACHE_DIR)"
- uses: actions/cache@v2
with:
path: ~/.local/share/virtualenvs
key: ${{ runner.os }}-python-${{ steps.setup-python.outputs.python-version }}-pipenv-${{ hashFiles('Pipfile.lock') }}
path: ${{ steps.pip-cache.outputs.dir }}
key: ${{ runner.os }}-pip-${{ hashFiles('**/requirements.txt') }}
restore-keys: |
${{ runner.os }}-pip-
```
## R - renv
For renv, the cache directory will vary by OS. The `RENV_PATHS_ROOT` environment variable is used to set the cache location. Have a look at https://rstudio.github.io/renv/reference/paths.html#details for more details.
For renv, the cache directory will vary by OS. Look at https://rstudio.github.io/renv/articles/renv.html#cache
Locations:
- Ubuntu: `~/.local/share/renv`
- macOS: `~/Library/Application Support/renv`
- Windows: `%LOCALAPPDATA%/renv`
### Simple example
```yaml
- uses: actions/cache@v2
with:
path: ~/.local/share/renv
key: ${{ runner.os }}-renv-${{ hashFiles('**/renv.lock') }}
restore-keys: |
${{ runner.os }}-renv-
```
Replace `~/.local/share/renv` with the correct `path` if not using Ubuntu.
### Multiple OS's in a workflow
```yaml
- name: Set RENV_PATHS_ROOT
shell: bash
run: |
echo "RENV_PATHS_ROOT=${{ runner.temp }}/renv" >> $GITHUB_ENV
- name: Install and activate renv
run: |
install.packages("renv")
renv::activate()
shell: Rscript {0}
- name: Get R and OS version
id: get-version
run: |
cat("##[set-output name=os-version;]", sessionInfo()$running, "\n", sep = "")
cat("##[set-output name=r-version;]", R.Version()$version.string, sep = "")
shell: Rscript {0}
- name: Restore Renv package cache
uses: actions/cache@v2
- uses: actions/cache@v2
if: startsWith(runner.os, 'Linux')
with:
path: ${{ env.RENV_PATHS_ROOT }}
key: ${{ steps.get-version.outputs.os-version }}-${{ steps.get-version.outputs.r-version }}-${{ inputs.cache-version }}-${{ hashFiles('renv.lock') }}
restore-keys: ${{ steps.get-version.outputs.os-version }}-${{ steps.get-version.outputs.r-version }}-${{inputs.cache-version }}-
path: ~/.local/share/renv
key: ${{ runner.os }}-renv-${{ hashFiles('**/renv.lock') }}
restore-keys: |
${{ runner.os }}-renv-
- uses: actions/cache@v2
if: startsWith(runner.os, 'macOS')
with:
path: ~/Library/Application Support/renv
key: ${{ runner.os }}-renv-${{ hashFiles('**/renv.lock') }}
restore-keys: |
${{ runner.os }}-renv-
- uses: actions/cache@v2
if: startsWith(runner.os, 'Windows')
with:
path: ~\AppData\Local\renv
key: ${{ runner.os }}-renv-${{ hashFiles('**/renv.lock') }}
restore-keys: |
${{ runner.os }}-renv-
```
## Ruby - Bundler
Caching gems with Bundler correctly is not trivial and just using `actions/cache`
is [not enough](https://github.com/ruby/setup-ruby#caching-bundle-install-manually).
Instead, it is recommended to use `ruby/setup-ruby`'s
[`bundler-cache: true` option](https://github.com/ruby/setup-ruby#caching-bundle-install-automatically)
whenever possible:
```yaml
- uses: actions/cache@v2
with:
path: vendor/bundle
key: ${{ runner.os }}-gems-${{ hashFiles('**/Gemfile.lock') }}
restore-keys: |
${{ runner.os }}-gems-
```
When dependencies are installed later in the workflow, we must specify the same path for the bundler.
```yaml
- uses: ruby/setup-ruby@v1
with:
ruby-version: ...
bundler-cache: true
- name: Bundle install
run: |
bundle config path vendor/bundle
bundle install --jobs 4 --retry 3
```
## Rust - Cargo
@@ -499,11 +453,9 @@ whenever possible:
- uses: actions/cache@v2
with:
path: |
~/.cargo/bin/
~/.cargo/registry/index/
~/.cargo/registry/cache/
~/.cargo/git/db/
target/
~/.cargo/registry
~/.cargo/git
target
key: ${{ runner.os }}-cargo-${{ hashFiles('**/Cargo.lock') }}
```
@@ -513,7 +465,7 @@ whenever possible:
- name: Cache SBT
uses: actions/cache@v2
with:
path: |
path: |
~/.ivy2/cache
~/.sbt
key: ${{ runner.os }}-sbt-${{ hashFiles('**/build.sbt') }}
+1 -1
View File
@@ -17,7 +17,7 @@ const processStdoutWrite = process.stdout.write.bind(process.stdout);
process.stdout.write = (str, encoding, cb) => {
// Core library will directly call process.stdout.write for commands
// We don't want :: commands to be executed by the runner during tests
if (!String(str).match(/^::/)) {
if (!str.match(/^::/)) {
return processStdoutWrite(str, encoding, cb);
}
};
+3886 -5549
View File
File diff suppressed because it is too large Load Diff
+18 -18
View File
@@ -1,6 +1,6 @@
{
"name": "cache",
"version": "2.1.7",
"version": "2.1.3",
"private": true,
"description": "Cache dependencies and build outputs",
"main": "dist/restore/index.js",
@@ -23,29 +23,29 @@
"author": "GitHub",
"license": "MIT",
"dependencies": {
"@actions/cache": "^1.0.9",
"@actions/cache": "^1.0.4",
"@actions/core": "^1.2.6",
"@actions/exec": "^1.0.1",
"@actions/io": "^1.1.0"
"@actions/io": "^1.0.1"
},
"devDependencies": {
"@types/jest": "^27.4.0",
"@types/jest": "^24.0.13",
"@types/nock": "^11.1.0",
"@types/node": "^12.20.42",
"@typescript-eslint/eslint-plugin": "^5.10.1",
"@typescript-eslint/parser": "^5.10.1",
"@types/node": "^12.0.4",
"@typescript-eslint/eslint-plugin": "^2.7.0",
"@typescript-eslint/parser": "^2.7.0",
"@zeit/ncc": "^0.20.5",
"eslint": "^8.8.0",
"eslint-config-prettier": "^8.3.0",
"eslint-plugin-import": "^2.25.4",
"eslint-plugin-jest": "^26.0.0",
"eslint-plugin-prettier": "^4.0.0",
"eslint-plugin-simple-import-sort": "^7.0.0",
"jest": "^27.4.7",
"jest-circus": "^27.4.6",
"eslint": "^6.6.0",
"eslint-config-prettier": "^6.5.0",
"eslint-plugin-import": "^2.18.2",
"eslint-plugin-jest": "^23.0.3",
"eslint-plugin-prettier": "^3.1.1",
"eslint-plugin-simple-import-sort": "^5.0.2",
"jest": "^24.8.0",
"jest-circus": "^24.7.1",
"nock": "^11.7.0",
"prettier": "^2.5.1",
"ts-jest": "^27.1.3",
"typescript": "^3.9.9"
"prettier": "^1.19.1",
"ts-jest": "^24.0.2",
"typescript": "^3.7.3"
}
}
+1 -3
View File
@@ -7,9 +7,7 @@ import * as utils from "./utils/actionUtils";
async function run(): Promise<void> {
try {
if (utils.isGhes()) {
utils.logWarning(
"Cache action is not supported on GHES. See https://github.com/actions/cache/issues/505 for more details"
);
utils.logWarning("Cache action is not supported on GHES");
utils.setCacheHitOutput(false);
return;
}
+1 -9
View File
@@ -4,17 +4,10 @@ import * as core from "@actions/core";
import { Events, Inputs, State } from "./constants";
import * as utils from "./utils/actionUtils";
// Catch and log any unhandled exceptions. These exceptions can leak out of the uploadChunk method in
// @actions/toolkit when a failed upload closes the file descriptor causing any in-process reads to
// throw an uncaught exception. Instead of failing this action, just warn.
process.on("uncaughtException", e => utils.logWarning(e.message));
async function run(): Promise<void> {
try {
if (utils.isGhes()) {
utils.logWarning(
"Cache action is not supported on GHES. See https://github.com/actions/cache/issues/505 for more details"
);
utils.logWarning("Cache action is not supported on GHES");
return;
}
@@ -51,7 +44,6 @@ async function run(): Promise<void> {
await cache.saveCache(cachePaths, primaryKey, {
uploadChunkSize: utils.getInputAsInt(Inputs.UploadChunkSize)
});
core.info(`Cache saved with key: ${primaryKey}`);
} catch (error) {
if (error.name === cache.ValidationError.name) {
throw error;
+3 -2
View File
@@ -60,8 +60,9 @@ export function getInputAsArray(
return core
.getInput(name, options)
.split("\n")
.map(s => s.trim())
.filter(x => x !== "");
.map(s => s.replace(/^!\s+/, "!").trim())
.filter(x => x !== "")
.sort();
}
export function getInputAsInt(