diff --git a/.eslintignore b/.eslintignore
index 42ceb9a..0b2e7d4 100644
--- a/.eslintignore
+++ b/.eslintignore
@@ -1,4 +1,3 @@
-dist/
lib/
node_modules/
jest.config.js
diff --git a/.gitattributes b/.gitattributes
index 2e051e1..e69de29 100644
--- a/.gitattributes
+++ b/.gitattributes
@@ -1 +0,0 @@
-dist/** -diff linguist-generated=true
\ No newline at end of file
diff --git a/.github/dependabot.yml b/.github/dependabot.yml
index 3e5659d..4abda36 100644
--- a/.github/dependabot.yml
+++ b/.github/dependabot.yml
@@ -1,11 +1,5 @@
version: 2
updates:
- - package-ecosystem: github-actions
- directory: /
- schedule:
- interval: daily
- open-pull-requests-limit: 0
-
- package-ecosystem: npm
directory: /
schedule:
diff --git a/.github/workflows/check-dist.yml b/.github/workflows/check-dist.yml
index 3cacc49..0762649 100644
--- a/.github/workflows/check-dist.yml
+++ b/.github/workflows/check-dist.yml
@@ -21,7 +21,7 @@ jobs:
runs-on: ubuntu-latest
steps:
- - uses: actions/checkout@v2
+ - uses: actions/checkout@v3
- name: Set Node.js 16.x
uses: actions/setup-node@v3.5.1
@@ -34,20 +34,12 @@ jobs:
- name: Rebuild the dist/ directory
run: |
npm run build
- npm run package
- name: Compare the expected and actual dist/ directories
run: |
- if [ "$(git diff --ignore-space-at-eol dist/ | wc -l)" -gt "0" ]; then
+ if [ "$(git diff --ignore-space-at-eol lib/ | 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/
+ id: diff
\ No newline at end of file
diff --git a/.github/workflows/codeql-analysis.yml b/.github/workflows/codeql-analysis.yml
index f39fafb..18474c9 100644
--- a/.github/workflows/codeql-analysis.yml
+++ b/.github/workflows/codeql-analysis.yml
@@ -42,7 +42,7 @@ jobs:
# Initializes the CodeQL tools for scanning.
- name: Initialize CodeQL
- uses: github/codeql-action/init@v1
+ uses: github/codeql-action/init@v2
with:
languages: ${{ matrix.language }}
source-root: src
diff --git a/.github/workflows/test.yml b/.github/workflows/test.yml
index ef07cd0..eeffba7 100644
--- a/.github/workflows/test.yml
+++ b/.github/workflows/test.yml
@@ -1,24 +1,18 @@
name: 'build-test'
-on: # rebuild any PRs and main branch changes
+on:
pull_request:
+ workflow_dispatch:
push:
branches:
- main
- 'releases/*'
jobs:
- build: # make sure build/ci work properly
+ build:
runs-on: ubuntu-latest
steps:
- - uses: actions/checkout@v2
+ - uses: actions/checkout@v3
- run: |
npm install
- run: |
- npm run all
- test: # make sure the action works on a clean machine without building
- runs-on: ubuntu-latest
- steps:
- - uses: actions/checkout@v2
- - uses: ./
- with:
- milliseconds: 1000
+ npm run all
\ No newline at end of file
diff --git a/.gitignore b/.gitignore
index daddb33..a671a96 100644
--- a/.gitignore
+++ b/.gitignore
@@ -97,5 +97,4 @@ typings/
Thumbs.db
# Ignore built ts files
-__tests__/runner/*
-lib/**/*
\ No newline at end of file
+__tests__/runner/*
\ No newline at end of file
diff --git a/.prettierignore b/.prettierignore
index 2186947..46f1072 100644
--- a/.prettierignore
+++ b/.prettierignore
@@ -1,3 +1,2 @@
-dist/
lib/
node_modules/
\ No newline at end of file
diff --git a/LICENSE b/LICENSE
index a426ef2..019e8f2 100644
--- a/LICENSE
+++ b/LICENSE
@@ -1,7 +1,6 @@
+MIT License
-The MIT License (MIT)
-
-Copyright (c) 2018 GitHub, Inc. and contributors
+Copyright (c) 2022 Veertu Inc.
Permission is hereby granted, free of charge, to any person obtaining a copy
of this software and associated documentation files (the "Software"), to deal
@@ -10,13 +9,13 @@ 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.
\ No newline at end of file
+OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
+SOFTWARE.
\ No newline at end of file
diff --git a/README.md b/README.md
index fac1dd6..0f15cf3 100644
--- a/README.md
+++ b/README.md
@@ -1,105 +1 @@
-
-
-
-
-# Create a JavaScript Action using TypeScript
-
-Use this template to bootstrap the creation of a TypeScript action.:rocket:
-
-This template includes compilation support, tests, a validation workflow, publishing, and versioning guidance.
-
-If you are new, there's also a simpler introduction. See the [Hello World JavaScript Action](https://github.com/actions/hello-world-javascript-action)
-
-## Create an action from this template
-
-Click the `Use this Template` and provide the new repo details for your action
-
-## Code in Main
-
-> First, you'll need to have a reasonably modern version of `node` handy. This won't work with versions older than 9, for instance.
-
-Install the dependencies
-```bash
-$ npm install
-```
-
-Build the typescript and package it for distribution
-```bash
-$ npm run build && npm run package
-```
-
-Run the tests :heavy_check_mark:
-```bash
-$ npm test
-
- PASS ./index.test.js
- ✓ throws invalid number (3ms)
- ✓ wait 500 ms (504ms)
- ✓ test runs (95ms)
-
-...
-```
-
-## Change action.yml
-
-The action.yml defines the inputs and output for your action.
-
-Update the action.yml with your name, description, inputs and outputs for your action.
-
-See the [documentation](https://help.github.com/en/articles/metadata-syntax-for-github-actions)
-
-## Change the Code
-
-Most toolkit and CI/CD operations involve async operations so the action is run in an async function.
-
-```javascript
-import * as core from '@actions/core';
-...
-
-async function run() {
- try {
- ...
- }
- catch (error) {
- core.setFailed(error.message);
- }
-}
-
-run()
-```
-
-See the [toolkit documentation](https://github.com/actions/toolkit/blob/master/README.md#packages) for the various packages.
-
-## Publish to a distribution branch
-
-Actions are run from GitHub repos so we will checkin the packed dist folder.
-
-Then run [ncc](https://github.com/zeit/ncc) and push the results:
-```bash
-$ npm run package
-$ git add dist
-$ git commit -a -m "prod dependencies"
-$ git push origin releases/v1
-```
-
-Note: We recommend using the `--license` option for ncc, which will create a license file for all of the production node modules used in your project.
-
-Your action is now published! :rocket:
-
-See the [versioning documentation](https://github.com/actions/toolkit/blob/master/docs/action-versioning.md)
-
-## Validate
-
-You can now validate the action by referencing `./` in a workflow in your repo (see [test.yml](.github/workflows/test.yml))
-
-```yaml
-uses: ./
-with:
- milliseconds: 1000
-```
-
-See the [actions tab](https://github.com/actions/typescript-action/actions) for runs of this action! :rocket:
-
-## Usage:
-
-After testing you can [create a v1 tag](https://github.com/actions/toolkit/blob/master/docs/action-versioning.md) to reference the stable and latest V1 action
+# anka-actions-common
diff --git a/__tests__/fixtures/list-vm-multiple.json b/__tests__/fixtures/list-vm-multiple.json
new file mode 100644
index 0000000..f2d4528
--- /dev/null
+++ b/__tests__/fixtures/list-vm-multiple.json
@@ -0,0 +1,47 @@
+{
+ "status": "OK",
+ "message": "",
+ "body": [
+ {
+ "external_id": "0651d321-bf5a-4d8f-b926-1c2cf27744d5",
+ "instance_id": "cd1937fd-68e7-4d5b-6b75-5ac3260b40f7",
+ "name": null,
+ "vm": {
+ "instance_id": "cd1937fd-68e7-4d5b-6b75-5ac3260b40f7",
+ "instance_state": "Started",
+ "anka_registry": "https://18.198.188.108:8089",
+ "vmid": "4c641deb-9822-4718-a757-5775799d9bc8",
+ "tag": "latest",
+ "vminfo": {
+ "uuid": "bbfa4979-f748-4731-a6f4-4c8d85ec34de",
+ "name": "mgmtManaged-monterey-1666889320540357000",
+ "cpu_cores": 2,
+ "ram": "8G",
+ "status": "running",
+ "node_id": "f9673afe-dc07-4683-b625-2bbf9f35f566",
+ "host_ip": "192.168.1.28",
+ "ip": "192.168.64.19",
+ "vnc_port": 0,
+ "vnc_connection_string": "vnc://:@192.168.1.28:0",
+ "creation_date": "2022-10-11T10:12:05Z",
+ "stop_date": "0001-01-01T00:00:00Z",
+ "version": ""
+ },
+ "node_id": "f9673afe-dc07-4683-b625-2bbf9f35f566",
+ "inflight_reqid": "dc3b8af8-5d14-4ec8-5422-15ebe40ac568",
+ "ts": "2022-10-27T16:49:35.435875889Z",
+ "cr_time": "2022-10-27T16:48:39.879143718Z",
+ "progress": 0,
+ "external_id": "0651d321-bf5a-4d8f-b926-1c2cf27744d5",
+ "arch": "arm64",
+ "vlan": "",
+ "startup_script": {
+ "return_code": 0,
+ "did_timeout": false,
+ "stdout": "\n--------------------------------------------------------------------------------\n| ____ _ _ _ _ _ _ _ _ |\n| / ___(_) |_| | | |_ _| |__ / \\ ___| |_(_) ___ _ __ ___ |\n| | | _| | __| |_| | | | | '_ \\ / _ \\ / __| __| |/ _ \\| '_ \\/ __| |\n| | |_| | | |_| _ | |_| | |_) | / ___ \\ (__| |_| | (_) | | | \\__ \\ |\n| \\____|_|\\__|_| |_|\\__,_|_.__/ /_/ \\_\\___|\\__|_|\\___/|_| |_|___/ |\n| |\n| Self-hosted runner registration |\n| |\n--------------------------------------------------------------------------------\n\n# Authentication\n\n\n√ Connected to GitHub\n\n# Runner Registration\n\n\n\n\n√ Runner successfully added\n√ Runner connection is good\n\n# Runner settings\n\n\n√ Settings Saved.\n\nCreating launch runner in /Users/anka/Library/LaunchAgents/actions.runner.veertuinc-anka-actions-demo.0651d321-bf5a-4d8f-b926-1c2cf27744d5.plist\nCreating /Users/anka/Library/Logs/actions.runner.veertuinc-anka-actions-demo.0651d321-bf5a-4d8f-b926-1c2cf27744d5\nCreating /Users/anka/Library/LaunchAgents/actions.runner.veertuinc-anka-actions-demo.0651d321-bf5a-4d8f-b926-1c2cf27744d5.plist\nCreating runsvc.sh\nCreating .service\nsvc install complete\nstarting actions.runner.veertuinc-anka-actions-demo.0651d321-bf5a-4d8f-b926-1c2cf27744d5\nstatus actions.runner.veertuinc-anka-actions-demo.0651d321-bf5a-4d8f-b926-1c2cf27744d5:\n\n/Users/anka/Library/LaunchAgents/actions.runner.veertuinc-anka-actions-demo.0651d321-bf5a-4d8f-b926-1c2cf27744d5.plist\n\nStarted:\n592 0 actions.runner.veertuinc-anka-actions-demo.0651d321-bf5a-4d8f-b926-1c2cf27744d5\n\n",
+ "stderr": ""
+ }
+ }
+ }
+ ]
+}
\ No newline at end of file
diff --git a/__tests__/fixtures/list-vm-single-startup-script-error.json b/__tests__/fixtures/list-vm-single-startup-script-error.json
new file mode 100644
index 0000000..efb425c
--- /dev/null
+++ b/__tests__/fixtures/list-vm-single-startup-script-error.json
@@ -0,0 +1,41 @@
+{
+ "status": "OK",
+ "message": "",
+ "body": {
+ "instance_id": "7b3421d9-764c-481c-5e74-8cbd741d3930",
+ "instance_state": "Error",
+ "message": "startup script exit code 127",
+ "anka_registry": "https://19.188.188.108:8089",
+ "vmid": "4c641deb-9822-4718-a757-5775799d9bc8",
+ "tag": "latest",
+ "vminfo": {
+ "uuid": "2971ce7d-4c76-49eb-8e58-0c75dddd8af3",
+ "name": "mgmtManaged-monterey-1666774975892452000",
+ "cpu_cores": 2,
+ "ram": "8G",
+ "status": "running",
+ "node_id": "f9673afe-dc07-4683-b625-2bbf9f35f566",
+ "host_ip": "192.168.1.28",
+ "ip": "192.168.64.3",
+ "vnc_port": 0,
+ "vnc_connection_string": "vnc://:@192.168.1.28:0",
+ "creation_date": "2022-10-11T10:12:05Z",
+ "stop_date": "0001-01-01T00:00:00Z",
+ "version": ""
+ },
+ "node_id": "f9673afe-dc07-4683-b625-2bbf9f35f566",
+ "inflight_reqid": "3b6435cb-37d1-4401-7dcd-b78cf181917d",
+ "ts": "2022-10-26T09:03:24.141596234Z",
+ "cr_time": "2022-10-26T09:02:44.646758236Z",
+ "progress": 1,
+ "external_id": "f3015250-99fb-415b-a8ee-5c16f3e58514",
+ "arch": "arm64",
+ "vlan": "",
+ "startup_script": {
+ "return_code": 127,
+ "did_timeout": false,
+ "stdout": "",
+ "stderr": "sh: line 1: asdadfasdflakdsmnflaksdnfaklsdnf!@#$: command not found\n"
+ }
+ }
+}
\ No newline at end of file
diff --git a/__tests__/fixtures/list-vm-single-state-scheduling.json b/__tests__/fixtures/list-vm-single-state-scheduling.json
new file mode 100644
index 0000000..5a6feab
--- /dev/null
+++ b/__tests__/fixtures/list-vm-single-state-scheduling.json
@@ -0,0 +1,18 @@
+{
+ "status": "OK",
+ "message": "",
+ "body": {
+ "instance_id": "7b3421d9-764c-481c-5e74-8cbd741d3930",
+ "instance_state": "Scheduling",
+ "anka_registry": "https://19.188.188.108:8089",
+ "vmid": "4c641deb-9822-4718-a757-5775799d9bc8",
+ "tag": "latest",
+ "inflight_reqid": "3b6435cb-37d1-4401-7dcd-b78cf181917d",
+ "ts": "2022-10-26T09:02:44.646756913Z",
+ "cr_time": "2022-10-26T09:02:44.646758236Z",
+ "progress": 0,
+ "external_id": "f3015250-99fb-415b-a8ee-5c16f3e58514",
+ "arch": "arm64",
+ "vlan": ""
+ }
+}
\ No newline at end of file
diff --git a/__tests__/fixtures/start-vm-error.json b/__tests__/fixtures/start-vm-error.json
new file mode 100644
index 0000000..17a582e
--- /dev/null
+++ b/__tests__/fixtures/start-vm-error.json
@@ -0,0 +1,4 @@
+{
+ "status": "FAIL",
+ "message": "VM not in the registry"
+}
\ No newline at end of file
diff --git a/__tests__/fixtures/start-vm-ok.json b/__tests__/fixtures/start-vm-ok.json
new file mode 100644
index 0000000..8f62f18
--- /dev/null
+++ b/__tests__/fixtures/start-vm-ok.json
@@ -0,0 +1,7 @@
+{
+ "status": "OK",
+ "message": "",
+ "body": [
+ "b7fed205-ceab-4938-60cd-1369a3cc0d4f"
+ ]
+}
\ No newline at end of file
diff --git a/__tests__/fixtures/terminate-vm.json b/__tests__/fixtures/terminate-vm.json
new file mode 100644
index 0000000..3f7aac9
--- /dev/null
+++ b/__tests__/fixtures/terminate-vm.json
@@ -0,0 +1,4 @@
+{
+ "status": "OK",
+ "message": ""
+}
\ No newline at end of file
diff --git a/__tests__/instance.test.ts b/__tests__/instance.test.ts
new file mode 100644
index 0000000..9a01a1f
--- /dev/null
+++ b/__tests__/instance.test.ts
@@ -0,0 +1,254 @@
+import * as crypto from 'crypto'
+import * as http from 'http'
+import * as fs from 'fs'
+import {StartVMRequest, VM} from '../src/instance'
+import {expect, test} from '@jest/globals'
+
+test('starts VM successfully', async () => {
+ const body: StartVMRequest = {
+ vmid: 'templateid'
+ }
+
+ const server = http.createServer(function (req, res) {
+ const chunks: Array = []
+ req.on('data', chunk => {
+ chunks.push(chunk)
+ })
+ req.on('end', () => {
+ const data = Buffer.concat(chunks)
+ expect(req.method).toEqual('POST')
+ expect(req.url).toEqual(`/api/v1/vm`)
+ expect(data.toString()).toEqual('{"vmid":"templateid"}')
+ })
+
+ res.setHeader('Content-Type', 'application/json')
+ res.end(Buffer.from(fs.readFileSync('__tests__/fixtures/start-vm-ok.json')))
+ })
+
+ return new Promise((resolve, reject) => {
+ server.listen(4444, () => {
+ const vm = new VM('http://127.0.0.1:4444')
+ expect(
+ vm.start(
+ crypto.randomUUID(),
+ 'veertu/anka-actions-common',
+ 'ABC123',
+ '/Users/anka/actions-runner',
+ body
+ )
+ )
+ .resolves.toBeTruthy()
+ .then(result => {
+ server.close()
+ resolve(result)
+ })
+ .catch(reason => {
+ server.close()
+ reject(reason)
+ })
+ })
+ })
+})
+
+test('fails to start VM', async () => {
+ const body: StartVMRequest = {
+ vmid: 'templateid'
+ }
+
+ const server = http.createServer(function (req, res) {
+ const chunks: Array = []
+ req.on('data', chunk => {
+ chunks.push(chunk)
+ })
+ req.on('end', () => {
+ const data = Buffer.concat(chunks)
+ expect(req.method).toEqual('POST')
+ expect(req.url).toEqual(`/api/v1/vm`)
+ expect(data.toString()).toEqual('{"vmid":"templateid"}')
+ })
+
+ res.setHeader('Content-Type', 'application/json')
+ res.end(
+ Buffer.from(fs.readFileSync('__tests__/fixtures/start-vm-error.json'))
+ )
+ })
+
+ return new Promise((resolve, reject) => {
+ server.listen(4444, () => {
+ const vm = new VM('http://127.0.0.1:4444')
+ expect(
+ vm.start(
+ crypto.randomUUID(),
+ 'veertu/anka-actions-common',
+ 'ABC123',
+ '/Users/anka/actions-runner',
+ body
+ )
+ )
+ .rejects.toThrowError(new Error('API response status:FAIL'))
+ .then(result => {
+ server.close()
+ resolve(result)
+ })
+ .catch(reason => {
+ server.close()
+ reject(reason)
+ })
+ })
+ })
+})
+
+test('get VM state successful', async () => {
+ const server = http.createServer(function (req, res) {
+ const chunks: Array = []
+ req.on('data', chunk => {
+ chunks.push(chunk)
+ })
+ req.on('end', () => {
+ const data = Buffer.concat(chunks)
+ expect(req.method).toEqual('GET')
+ expect(req.url).toEqual(`/api/v1/vm?id=vmid`)
+ })
+
+ res.setHeader('Content-Type', 'application/json')
+ res.end(
+ Buffer.from(
+ fs.readFileSync(
+ '__tests__/fixtures/list-vm-single-state-scheduling.json'
+ )
+ )
+ )
+ })
+
+ return new Promise((resolve, reject) => {
+ server.listen(4444, () => {
+ const vm = new VM('http://127.0.0.1:4444')
+ expect(vm.getState('vmid'))
+ .resolves.toEqual('Scheduling')
+ .then(result => {
+ server.close()
+ resolve(result)
+ })
+ .catch(reason => {
+ server.close()
+ reject(reason)
+ })
+ })
+ })
+})
+
+test('get VM state error', async () => {
+ const server = http.createServer(function (req, res) {
+ const chunks: Array = []
+ req.on('data', chunk => {
+ chunks.push(chunk)
+ })
+ req.on('end', () => {
+ const data = Buffer.concat(chunks)
+ expect(req.method).toEqual('GET')
+ expect(req.url).toEqual(`/api/v1/vm?id=vmid`)
+ })
+
+ res.setHeader('Content-Type', 'application/json')
+ res.end(
+ Buffer.from(
+ fs.readFileSync(
+ '__tests__/fixtures/list-vm-single-startup-script-error.json'
+ )
+ )
+ )
+ })
+
+ return new Promise((resolve, reject) => {
+ server.listen(4444, () => {
+ const vm = new VM('http://127.0.0.1:4444')
+ expect(vm.getState('vmid'))
+ .rejects.toThrowError(
+ new Error(
+ `VM failed to start: startup script exit code 127: sh: line 1: asdadfasdflakdsmnflaksdnfaklsdnf!@#$: command not found`
+ )
+ )
+ .then(result => {
+ server.close()
+ resolve(result)
+ })
+ .catch(reason => {
+ server.close()
+ reject(reason)
+ })
+ })
+ })
+})
+
+test('get instance id', async () => {
+ const server = http.createServer(function (req, res) {
+ const chunks: Array = []
+ req.on('data', chunk => {
+ chunks.push(chunk)
+ })
+ req.on('end', () => {
+ const data = Buffer.concat(chunks)
+ expect(req.method).toEqual('GET')
+ expect(req.url).toEqual(`/api/v1/vm`)
+ })
+
+ res.setHeader('Content-Type', 'application/json')
+ res.end(
+ Buffer.from(fs.readFileSync('__tests__/fixtures/list-vm-multiple.json'))
+ )
+ })
+
+ return new Promise((resolve, reject) => {
+ server.listen(4444, () => {
+ const vm = new VM('http://127.0.0.1:4444')
+ expect(vm.getInstanceId('0651d321-bf5a-4d8f-b926-1c2cf27744d5'))
+ .resolves.toEqual('cd1937fd-68e7-4d5b-6b75-5ac3260b40f7')
+ .then(result => {
+ server.close()
+ resolve(result)
+ })
+ .catch(reason => {
+ server.close()
+ reject(reason)
+ })
+ })
+ })
+})
+
+test('terminate instance', async () => {
+ const server = http.createServer(function (req, res) {
+ const chunks: Array = []
+ req.on('data', chunk => {
+ chunks.push(chunk)
+ })
+ req.on('end', () => {
+ const data = Buffer.concat(chunks)
+ expect(req.method).toEqual('DELETE')
+ expect(req.url).toEqual(`/api/v1/vm`)
+ expect(JSON.parse(data.toString()).id).toEqual(
+ `0651d321-bf5a-4d8f-b926-1c2cf27744d5`
+ )
+ })
+
+ res.setHeader('Content-Type', 'application/json')
+ res.end(
+ Buffer.from(fs.readFileSync('__tests__/fixtures/terminate-vm.json'))
+ )
+ })
+
+ return new Promise((resolve, reject) => {
+ server.listen(4444, () => {
+ const vm = new VM('http://127.0.0.1:4444')
+ expect(vm.terminate('0651d321-bf5a-4d8f-b926-1c2cf27744d5'))
+ .resolves.toBeUndefined()
+ .then(result => {
+ server.close()
+ resolve(result)
+ })
+ .catch(reason => {
+ server.close()
+ reject(reason)
+ })
+ })
+ })
+})
diff --git a/__tests__/log.test.ts b/__tests__/log.test.ts
new file mode 100644
index 0000000..8f75a7f
--- /dev/null
+++ b/__tests__/log.test.ts
@@ -0,0 +1,32 @@
+import * as core from '@actions/core'
+const spyDebug = jest.spyOn(core, 'debug')
+const spyInfo = jest.spyOn(core, 'info')
+const spyError = jest.spyOn(core, 'error')
+
+import {expect, test} from '@jest/globals'
+import {logDebug, logError, logInfo} from '../lib/log'
+
+beforeEach(() => {
+ jest.clearAllMocks()
+ jest.useFakeTimers().setSystemTime(new Date(2020, 0, 1, 0, 0, 0, 0))
+})
+
+afterEach(() => {
+ jest.runOnlyPendingTimers()
+ jest.useRealTimers()
+})
+
+test('can log debug', async () => {
+ logDebug('message')
+ expect(spyDebug).toHaveBeenCalledWith('[1/1/2020, 12:00:00 AM] message')
+})
+
+test('can log info', async () => {
+ logInfo('message')
+ expect(spyInfo).toHaveBeenCalledWith('[1/1/2020, 12:00:00 AM] message')
+})
+
+test('can log error', async () => {
+ logError('message')
+ expect(spyError).toHaveBeenCalledWith('[1/1/2020, 12:00:00 AM] message')
+})
diff --git a/__tests__/runner.test.ts b/__tests__/runner.test.ts
new file mode 100644
index 0000000..d217f61
--- /dev/null
+++ b/__tests__/runner.test.ts
@@ -0,0 +1,124 @@
+import {expect, test} from '@jest/globals'
+import {RestEndpointMethods} from '@octokit/plugin-rest-endpoint-methods/dist-types/generated/method-types'
+import {PaginateInterface} from '@octokit/plugin-paginate-rest'
+import {Api} from '@octokit/plugin-rest-endpoint-methods/dist-types/types'
+import {Octokit} from '@octokit/rest'
+import {Runner} from '../src/runner'
+import {OctokitResponse} from '@octokit/types'
+
+type mocktype = Octokit & {paginate: PaginateInterface} & RestEndpointMethods &
+ Api
+
+test('create token', async () => {
+ const mock = {
+ actions: {
+ createRegistrationTokenForRepo: (
+ args: object
+ ): Promise> =>
+ new Promise((resolve, reject) => {
+ expect(args).toEqual({
+ owner: 'owner',
+ repo: 'repo'
+ })
+
+ const resp: OctokitResponse = {
+ headers: {},
+ status: 0,
+ url: '',
+ data: {
+ token: 'token',
+ expires_at: '2020-01-29T12:13:35.123-08:00'
+ }
+ }
+ resolve(resp)
+ })
+ }
+ }
+
+ const runner = new Runner(mock as unknown as mocktype, 'owner', 'repo')
+ expect(await runner.createToken()).toEqual('token')
+})
+
+test('get runner by action id', async () => {
+ const mock = {
+ actions: {
+ listSelfHostedRunnersForRepo: (
+ args: object
+ ): Promise> =>
+ new Promise((resolve, reject) => {
+ expect(args).toEqual({
+ owner: 'owner',
+ repo: 'repo'
+ })
+
+ const resp: OctokitResponse = {
+ headers: {},
+ status: 0,
+ url: '',
+ data: {
+ total_count: 2,
+ runners: [
+ {
+ id: 23,
+ name: 'linux_runner',
+ os: 'linux',
+ status: 'online',
+ busy: true,
+ labels: [
+ {
+ id: 5,
+ name: 'self-hosted',
+ type: 'read-only'
+ },
+ {
+ id: 7,
+ name: 'X64',
+ type: 'read-only'
+ }
+ ]
+ },
+ {
+ id: 24,
+ name: 'mac_runner',
+ os: 'macos',
+ status: 'offline',
+ busy: false,
+ labels: [
+ {
+ id: 5,
+ name: 'self-hosted',
+ type: 'read-only'
+ }
+ ]
+ }
+ ]
+ }
+ }
+ resolve(resp)
+ })
+ }
+ }
+
+ const runner = new Runner(mock as unknown as mocktype, 'owner', 'repo')
+ expect(await runner.getRunnerByName('linux_runner')).toEqual(23)
+})
+
+test('delete', async () => {
+ const mock = {
+ actions: {
+ deleteSelfHostedRunnerFromRepo: (args: object): Promise =>
+ new Promise((resolve, reject) => {
+ expect(args).toEqual({
+ owner: 'owner',
+ repo: 'repo',
+ runner_id: 7
+ })
+
+ resolve()
+ })
+ }
+ }
+
+ const runner = new Runner(mock as unknown as mocktype, 'owner', 'repo')
+ expect(await runner.delete(7)).toBeUndefined()
+})
diff --git a/__tests__/timeout.test.ts b/__tests__/timeout.test.ts
new file mode 100644
index 0000000..8fe3433
--- /dev/null
+++ b/__tests__/timeout.test.ts
@@ -0,0 +1,20 @@
+import {sleep, timeout, HardTimeoutError} from '../lib/timeout'
+import {expect, test} from '@jest/globals'
+
+test('sleep 500 ms', async () => {
+ const start = new Date()
+ await sleep(500)
+ const end = new Date()
+ const delta = Math.abs(end.getTime() - start.getTime())
+ expect(delta).toBeGreaterThan(450)
+})
+
+test('timeout 500 ms', async () => {
+ const start = new Date()
+ await expect(timeout(500, 'hard-timeout!')).rejects.toThrow(
+ new HardTimeoutError('hard-timeout!')
+ )
+ const end = new Date()
+ const delta = Math.abs(end.getTime() - start.getTime())
+ expect(delta).toBeGreaterThan(450)
+})
diff --git a/action.yml b/action.yml
deleted file mode 100644
index 345e2f4..0000000
--- a/action.yml
+++ /dev/null
@@ -1,11 +0,0 @@
-name: 'Your name here'
-description: 'Provide a description here'
-author: 'Your name or organization here'
-inputs:
- milliseconds: # change this
- required: true
- description: 'input description here'
- default: 'default value if applicable'
-runs:
- using: 'node16'
- main: 'dist/index.js'
diff --git a/dist/index.js b/dist/index.js
deleted file mode 100644
index b3128ff..0000000
--- a/dist/index.js
+++ /dev/null
@@ -1,14 +0,0 @@
-require('./sourcemap-register.js');/******/ (() => { // webpackBootstrap
-/******/ "use strict";
-/******/ /* webpack/runtime/compat */
-/******/
-/******/ if (typeof __nccwpck_require__ !== 'undefined') __nccwpck_require__.ab = __dirname + "/";
-/******/
-/************************************************************************/
-var __webpack_exports__ = {};
-
-
-module.exports = __webpack_exports__;
-/******/ })()
-;
-//# sourceMappingURL=index.js.map
\ No newline at end of file
diff --git a/dist/index.js.map b/dist/index.js.map
deleted file mode 100644
index cf018ed..0000000
--- a/dist/index.js.map
+++ /dev/null
@@ -1 +0,0 @@
-{"version":3,"file":"index.js","mappings":";;;AAAA;AACA;;;;ACDA","sources":["../webpack://typescript-action/webpack/runtime/compat","../webpack://typescript-action/./lib/main.js"],"sourcesContent":["\nif (typeof __webpack_require__ !== 'undefined') __webpack_require__.ab = __dirname + \"/\";","\"use strict\";\n"],"names":[],"sourceRoot":""}
\ No newline at end of file
diff --git a/dist/sourcemap-register.js b/dist/sourcemap-register.js
deleted file mode 100644
index 466141d..0000000
--- a/dist/sourcemap-register.js
+++ /dev/null
@@ -1 +0,0 @@
-(()=>{var e={650:e=>{var r=Object.prototype.toString;var n=typeof Buffer.alloc==="function"&&typeof Buffer.allocUnsafe==="function"&&typeof Buffer.from==="function";function isArrayBuffer(e){return r.call(e).slice(8,-1)==="ArrayBuffer"}function fromArrayBuffer(e,r,t){r>>>=0;var o=e.byteLength-r;if(o<0){throw new RangeError("'offset' is out of bounds")}if(t===undefined){t=o}else{t>>>=0;if(t>o){throw new RangeError("'length' is out of bounds")}}return n?Buffer.from(e.slice(r,r+t)):new Buffer(new Uint8Array(e.slice(r,r+t)))}function fromString(e,r){if(typeof r!=="string"||r===""){r="utf8"}if(!Buffer.isEncoding(r)){throw new TypeError('"encoding" must be a valid string encoding')}return n?Buffer.from(e,r):new Buffer(e,r)}function bufferFrom(e,r,t){if(typeof e==="number"){throw new TypeError('"value" argument must not be a number')}if(isArrayBuffer(e)){return fromArrayBuffer(e,r,t)}if(typeof e==="string"){return fromString(e,r)}return n?Buffer.from(e):new Buffer(e)}e.exports=bufferFrom},274:(e,r,n)=>{var t=n(339);var o=Object.prototype.hasOwnProperty;var i=typeof Map!=="undefined";function ArraySet(){this._array=[];this._set=i?new Map:Object.create(null)}ArraySet.fromArray=function ArraySet_fromArray(e,r){var n=new ArraySet;for(var t=0,o=e.length;t=0){return r}}else{var n=t.toSetString(e);if(o.call(this._set,n)){return this._set[n]}}throw new Error('"'+e+'" is not in the set.')};ArraySet.prototype.at=function ArraySet_at(e){if(e>=0&&e{var t=n(190);var o=5;var i=1<>1;return r?-n:n}r.encode=function base64VLQ_encode(e){var r="";var n;var i=toVLQSigned(e);do{n=i&a;i>>>=o;if(i>0){n|=u}r+=t.encode(n)}while(i>0);return r};r.decode=function base64VLQ_decode(e,r,n){var i=e.length;var s=0;var l=0;var c,p;do{if(r>=i){throw new Error("Expected more digits in base 64 VLQ value.")}p=t.decode(e.charCodeAt(r++));if(p===-1){throw new Error("Invalid base64 digit: "+e.charAt(r-1))}c=!!(p&u);p&=a;s=s+(p<{var n="ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/".split("");r.encode=function(e){if(0<=e&&e{r.GREATEST_LOWER_BOUND=1;r.LEAST_UPPER_BOUND=2;function recursiveSearch(e,n,t,o,i,a){var u=Math.floor((n-e)/2)+e;var s=i(t,o[u],true);if(s===0){return u}else if(s>0){if(n-u>1){return recursiveSearch(u,n,t,o,i,a)}if(a==r.LEAST_UPPER_BOUND){return n1){return recursiveSearch(e,u,t,o,i,a)}if(a==r.LEAST_UPPER_BOUND){return u}else{return e<0?-1:e}}}r.search=function search(e,n,t,o){if(n.length===0){return-1}var i=recursiveSearch(-1,n.length,e,n,t,o||r.GREATEST_LOWER_BOUND);if(i<0){return-1}while(i-1>=0){if(t(n[i],n[i-1],true)!==0){break}--i}return i}},680:(e,r,n)=>{var t=n(339);function generatedPositionAfter(e,r){var n=e.generatedLine;var o=r.generatedLine;var i=e.generatedColumn;var a=r.generatedColumn;return o>n||o==n&&a>=i||t.compareByGeneratedPositionsInflated(e,r)<=0}function MappingList(){this._array=[];this._sorted=true;this._last={generatedLine:-1,generatedColumn:0}}MappingList.prototype.unsortedForEach=function MappingList_forEach(e,r){this._array.forEach(e,r)};MappingList.prototype.add=function MappingList_add(e){if(generatedPositionAfter(this._last,e)){this._last=e;this._array.push(e)}else{this._sorted=false;this._array.push(e)}};MappingList.prototype.toArray=function MappingList_toArray(){if(!this._sorted){this._array.sort(t.compareByGeneratedPositionsInflated);this._sorted=true}return this._array};r.H=MappingList},758:(e,r)=>{function swap(e,r,n){var t=e[r];e[r]=e[n];e[n]=t}function randomIntInRange(e,r){return Math.round(e+Math.random()*(r-e))}function doQuickSort(e,r,n,t){if(n{var t;var o=n(339);var i=n(345);var a=n(274).I;var u=n(449);var s=n(758).U;function SourceMapConsumer(e,r){var n=e;if(typeof e==="string"){n=o.parseSourceMapInput(e)}return n.sections!=null?new IndexedSourceMapConsumer(n,r):new BasicSourceMapConsumer(n,r)}SourceMapConsumer.fromSourceMap=function(e,r){return BasicSourceMapConsumer.fromSourceMap(e,r)};SourceMapConsumer.prototype._version=3;SourceMapConsumer.prototype.__generatedMappings=null;Object.defineProperty(SourceMapConsumer.prototype,"_generatedMappings",{configurable:true,enumerable:true,get:function(){if(!this.__generatedMappings){this._parseMappings(this._mappings,this.sourceRoot)}return this.__generatedMappings}});SourceMapConsumer.prototype.__originalMappings=null;Object.defineProperty(SourceMapConsumer.prototype,"_originalMappings",{configurable:true,enumerable:true,get:function(){if(!this.__originalMappings){this._parseMappings(this._mappings,this.sourceRoot)}return this.__originalMappings}});SourceMapConsumer.prototype._charIsMappingSeparator=function SourceMapConsumer_charIsMappingSeparator(e,r){var n=e.charAt(r);return n===";"||n===","};SourceMapConsumer.prototype._parseMappings=function SourceMapConsumer_parseMappings(e,r){throw new Error("Subclasses must implement _parseMappings")};SourceMapConsumer.GENERATED_ORDER=1;SourceMapConsumer.ORIGINAL_ORDER=2;SourceMapConsumer.GREATEST_LOWER_BOUND=1;SourceMapConsumer.LEAST_UPPER_BOUND=2;SourceMapConsumer.prototype.eachMapping=function SourceMapConsumer_eachMapping(e,r,n){var t=r||null;var i=n||SourceMapConsumer.GENERATED_ORDER;var a;switch(i){case SourceMapConsumer.GENERATED_ORDER:a=this._generatedMappings;break;case SourceMapConsumer.ORIGINAL_ORDER:a=this._originalMappings;break;default:throw new Error("Unknown order of iteration.")}var u=this.sourceRoot;a.map((function(e){var r=e.source===null?null:this._sources.at(e.source);r=o.computeSourceURL(u,r,this._sourceMapURL);return{source:r,generatedLine:e.generatedLine,generatedColumn:e.generatedColumn,originalLine:e.originalLine,originalColumn:e.originalColumn,name:e.name===null?null:this._names.at(e.name)}}),this).forEach(e,t)};SourceMapConsumer.prototype.allGeneratedPositionsFor=function SourceMapConsumer_allGeneratedPositionsFor(e){var r=o.getArg(e,"line");var n={source:o.getArg(e,"source"),originalLine:r,originalColumn:o.getArg(e,"column",0)};n.source=this._findSourceIndex(n.source);if(n.source<0){return[]}var t=[];var a=this._findMapping(n,this._originalMappings,"originalLine","originalColumn",o.compareByOriginalPositions,i.LEAST_UPPER_BOUND);if(a>=0){var u=this._originalMappings[a];if(e.column===undefined){var s=u.originalLine;while(u&&u.originalLine===s){t.push({line:o.getArg(u,"generatedLine",null),column:o.getArg(u,"generatedColumn",null),lastColumn:o.getArg(u,"lastGeneratedColumn",null)});u=this._originalMappings[++a]}}else{var l=u.originalColumn;while(u&&u.originalLine===r&&u.originalColumn==l){t.push({line:o.getArg(u,"generatedLine",null),column:o.getArg(u,"generatedColumn",null),lastColumn:o.getArg(u,"lastGeneratedColumn",null)});u=this._originalMappings[++a]}}}return t};r.SourceMapConsumer=SourceMapConsumer;function BasicSourceMapConsumer(e,r){var n=e;if(typeof e==="string"){n=o.parseSourceMapInput(e)}var t=o.getArg(n,"version");var i=o.getArg(n,"sources");var u=o.getArg(n,"names",[]);var s=o.getArg(n,"sourceRoot",null);var l=o.getArg(n,"sourcesContent",null);var c=o.getArg(n,"mappings");var p=o.getArg(n,"file",null);if(t!=this._version){throw new Error("Unsupported version: "+t)}if(s){s=o.normalize(s)}i=i.map(String).map(o.normalize).map((function(e){return s&&o.isAbsolute(s)&&o.isAbsolute(e)?o.relative(s,e):e}));this._names=a.fromArray(u.map(String),true);this._sources=a.fromArray(i,true);this._absoluteSources=this._sources.toArray().map((function(e){return o.computeSourceURL(s,e,r)}));this.sourceRoot=s;this.sourcesContent=l;this._mappings=c;this._sourceMapURL=r;this.file=p}BasicSourceMapConsumer.prototype=Object.create(SourceMapConsumer.prototype);BasicSourceMapConsumer.prototype.consumer=SourceMapConsumer;BasicSourceMapConsumer.prototype._findSourceIndex=function(e){var r=e;if(this.sourceRoot!=null){r=o.relative(this.sourceRoot,r)}if(this._sources.has(r)){return this._sources.indexOf(r)}var n;for(n=0;n1){v.source=l+_[1];l+=_[1];v.originalLine=i+_[2];i=v.originalLine;v.originalLine+=1;v.originalColumn=a+_[3];a=v.originalColumn;if(_.length>4){v.name=c+_[4];c+=_[4]}}m.push(v);if(typeof v.originalLine==="number"){d.push(v)}}}s(m,o.compareByGeneratedPositionsDeflated);this.__generatedMappings=m;s(d,o.compareByOriginalPositions);this.__originalMappings=d};BasicSourceMapConsumer.prototype._findMapping=function SourceMapConsumer_findMapping(e,r,n,t,o,a){if(e[n]<=0){throw new TypeError("Line must be greater than or equal to 1, got "+e[n])}if(e[t]<0){throw new TypeError("Column must be greater than or equal to 0, got "+e[t])}return i.search(e,r,o,a)};BasicSourceMapConsumer.prototype.computeColumnSpans=function SourceMapConsumer_computeColumnSpans(){for(var e=0;e=0){var t=this._generatedMappings[n];if(t.generatedLine===r.generatedLine){var i=o.getArg(t,"source",null);if(i!==null){i=this._sources.at(i);i=o.computeSourceURL(this.sourceRoot,i,this._sourceMapURL)}var a=o.getArg(t,"name",null);if(a!==null){a=this._names.at(a)}return{source:i,line:o.getArg(t,"originalLine",null),column:o.getArg(t,"originalColumn",null),name:a}}}return{source:null,line:null,column:null,name:null}};BasicSourceMapConsumer.prototype.hasContentsOfAllSources=function BasicSourceMapConsumer_hasContentsOfAllSources(){if(!this.sourcesContent){return false}return this.sourcesContent.length>=this._sources.size()&&!this.sourcesContent.some((function(e){return e==null}))};BasicSourceMapConsumer.prototype.sourceContentFor=function SourceMapConsumer_sourceContentFor(e,r){if(!this.sourcesContent){return null}var n=this._findSourceIndex(e);if(n>=0){return this.sourcesContent[n]}var t=e;if(this.sourceRoot!=null){t=o.relative(this.sourceRoot,t)}var i;if(this.sourceRoot!=null&&(i=o.urlParse(this.sourceRoot))){var a=t.replace(/^file:\/\//,"");if(i.scheme=="file"&&this._sources.has(a)){return this.sourcesContent[this._sources.indexOf(a)]}if((!i.path||i.path=="/")&&this._sources.has("/"+t)){return this.sourcesContent[this._sources.indexOf("/"+t)]}}if(r){return null}else{throw new Error('"'+t+'" is not in the SourceMap.')}};BasicSourceMapConsumer.prototype.generatedPositionFor=function SourceMapConsumer_generatedPositionFor(e){var r=o.getArg(e,"source");r=this._findSourceIndex(r);if(r<0){return{line:null,column:null,lastColumn:null}}var n={source:r,originalLine:o.getArg(e,"line"),originalColumn:o.getArg(e,"column")};var t=this._findMapping(n,this._originalMappings,"originalLine","originalColumn",o.compareByOriginalPositions,o.getArg(e,"bias",SourceMapConsumer.GREATEST_LOWER_BOUND));if(t>=0){var i=this._originalMappings[t];if(i.source===n.source){return{line:o.getArg(i,"generatedLine",null),column:o.getArg(i,"generatedColumn",null),lastColumn:o.getArg(i,"lastGeneratedColumn",null)}}}return{line:null,column:null,lastColumn:null}};t=BasicSourceMapConsumer;function IndexedSourceMapConsumer(e,r){var n=e;if(typeof e==="string"){n=o.parseSourceMapInput(e)}var t=o.getArg(n,"version");var i=o.getArg(n,"sections");if(t!=this._version){throw new Error("Unsupported version: "+t)}this._sources=new a;this._names=new a;var u={line:-1,column:0};this._sections=i.map((function(e){if(e.url){throw new Error("Support for url field in sections not implemented.")}var n=o.getArg(e,"offset");var t=o.getArg(n,"line");var i=o.getArg(n,"column");if(t{var t=n(449);var o=n(339);var i=n(274).I;var a=n(680).H;function SourceMapGenerator(e){if(!e){e={}}this._file=o.getArg(e,"file",null);this._sourceRoot=o.getArg(e,"sourceRoot",null);this._skipValidation=o.getArg(e,"skipValidation",false);this._sources=new i;this._names=new i;this._mappings=new a;this._sourcesContents=null}SourceMapGenerator.prototype._version=3;SourceMapGenerator.fromSourceMap=function SourceMapGenerator_fromSourceMap(e){var r=e.sourceRoot;var n=new SourceMapGenerator({file:e.file,sourceRoot:r});e.eachMapping((function(e){var t={generated:{line:e.generatedLine,column:e.generatedColumn}};if(e.source!=null){t.source=e.source;if(r!=null){t.source=o.relative(r,t.source)}t.original={line:e.originalLine,column:e.originalColumn};if(e.name!=null){t.name=e.name}}n.addMapping(t)}));e.sources.forEach((function(t){var i=t;if(r!==null){i=o.relative(r,t)}if(!n._sources.has(i)){n._sources.add(i)}var a=e.sourceContentFor(t);if(a!=null){n.setSourceContent(t,a)}}));return n};SourceMapGenerator.prototype.addMapping=function SourceMapGenerator_addMapping(e){var r=o.getArg(e,"generated");var n=o.getArg(e,"original",null);var t=o.getArg(e,"source",null);var i=o.getArg(e,"name",null);if(!this._skipValidation){this._validateMapping(r,n,t,i)}if(t!=null){t=String(t);if(!this._sources.has(t)){this._sources.add(t)}}if(i!=null){i=String(i);if(!this._names.has(i)){this._names.add(i)}}this._mappings.add({generatedLine:r.line,generatedColumn:r.column,originalLine:n!=null&&n.line,originalColumn:n!=null&&n.column,source:t,name:i})};SourceMapGenerator.prototype.setSourceContent=function SourceMapGenerator_setSourceContent(e,r){var n=e;if(this._sourceRoot!=null){n=o.relative(this._sourceRoot,n)}if(r!=null){if(!this._sourcesContents){this._sourcesContents=Object.create(null)}this._sourcesContents[o.toSetString(n)]=r}else if(this._sourcesContents){delete this._sourcesContents[o.toSetString(n)];if(Object.keys(this._sourcesContents).length===0){this._sourcesContents=null}}};SourceMapGenerator.prototype.applySourceMap=function SourceMapGenerator_applySourceMap(e,r,n){var t=r;if(r==null){if(e.file==null){throw new Error("SourceMapGenerator.prototype.applySourceMap requires either an explicit source file, "+'or the source map\'s "file" property. Both were omitted.')}t=e.file}var a=this._sourceRoot;if(a!=null){t=o.relative(a,t)}var u=new i;var s=new i;this._mappings.unsortedForEach((function(r){if(r.source===t&&r.originalLine!=null){var i=e.originalPositionFor({line:r.originalLine,column:r.originalColumn});if(i.source!=null){r.source=i.source;if(n!=null){r.source=o.join(n,r.source)}if(a!=null){r.source=o.relative(a,r.source)}r.originalLine=i.line;r.originalColumn=i.column;if(i.name!=null){r.name=i.name}}}var l=r.source;if(l!=null&&!u.has(l)){u.add(l)}var c=r.name;if(c!=null&&!s.has(c)){s.add(c)}}),this);this._sources=u;this._names=s;e.sources.forEach((function(r){var t=e.sourceContentFor(r);if(t!=null){if(n!=null){r=o.join(n,r)}if(a!=null){r=o.relative(a,r)}this.setSourceContent(r,t)}}),this)};SourceMapGenerator.prototype._validateMapping=function SourceMapGenerator_validateMapping(e,r,n,t){if(r&&typeof r.line!=="number"&&typeof r.column!=="number"){throw new Error("original.line and original.column are not numbers -- you probably meant to omit "+"the original mapping entirely and only map the generated position. If so, pass "+"null for the original mapping instead of an object with empty or null values.")}if(e&&"line"in e&&"column"in e&&e.line>0&&e.column>=0&&!r&&!n&&!t){return}else if(e&&"line"in e&&"column"in e&&r&&"line"in r&&"column"in r&&e.line>0&&e.column>=0&&r.line>0&&r.column>=0&&n){return}else{throw new Error("Invalid mapping: "+JSON.stringify({generated:e,source:n,original:r,name:t}))}};SourceMapGenerator.prototype._serializeMappings=function SourceMapGenerator_serializeMappings(){var e=0;var r=1;var n=0;var i=0;var a=0;var u=0;var s="";var l;var c;var p;var f;var g=this._mappings.toArray();for(var h=0,d=g.length;h0){if(!o.compareByGeneratedPositionsInflated(c,g[h-1])){continue}l+=","}}l+=t.encode(c.generatedColumn-e);e=c.generatedColumn;if(c.source!=null){f=this._sources.indexOf(c.source);l+=t.encode(f-u);u=f;l+=t.encode(c.originalLine-1-i);i=c.originalLine-1;l+=t.encode(c.originalColumn-n);n=c.originalColumn;if(c.name!=null){p=this._names.indexOf(c.name);l+=t.encode(p-a);a=p}}s+=l}return s};SourceMapGenerator.prototype._generateSourcesContent=function SourceMapGenerator_generateSourcesContent(e,r){return e.map((function(e){if(!this._sourcesContents){return null}if(r!=null){e=o.relative(r,e)}var n=o.toSetString(e);return Object.prototype.hasOwnProperty.call(this._sourcesContents,n)?this._sourcesContents[n]:null}),this)};SourceMapGenerator.prototype.toJSON=function SourceMapGenerator_toJSON(){var e={version:this._version,sources:this._sources.toArray(),names:this._names.toArray(),mappings:this._serializeMappings()};if(this._file!=null){e.file=this._file}if(this._sourceRoot!=null){e.sourceRoot=this._sourceRoot}if(this._sourcesContents){e.sourcesContent=this._generateSourcesContent(e.sources,e.sourceRoot)}return e};SourceMapGenerator.prototype.toString=function SourceMapGenerator_toString(){return JSON.stringify(this.toJSON())};r.h=SourceMapGenerator},351:(e,r,n)=>{var t;var o=n(591).h;var i=n(339);var a=/(\r?\n)/;var u=10;var s="$$$isSourceNode$$$";function SourceNode(e,r,n,t,o){this.children=[];this.sourceContents={};this.line=e==null?null:e;this.column=r==null?null:r;this.source=n==null?null:n;this.name=o==null?null:o;this[s]=true;if(t!=null)this.add(t)}SourceNode.fromStringWithSourceMap=function SourceNode_fromStringWithSourceMap(e,r,n){var t=new SourceNode;var o=e.split(a);var u=0;var shiftNextLine=function(){var e=getNextLine();var r=getNextLine()||"";return e+r;function getNextLine(){return u=0;r--){this.prepend(e[r])}}else if(e[s]||typeof e==="string"){this.children.unshift(e)}else{throw new TypeError("Expected a SourceNode, string, or an array of SourceNodes and strings. Got "+e)}return this};SourceNode.prototype.walk=function SourceNode_walk(e){var r;for(var n=0,t=this.children.length;n0){r=[];for(n=0;n{function getArg(e,r,n){if(r in e){return e[r]}else if(arguments.length===3){return n}else{throw new Error('"'+r+'" is a required argument.')}}r.getArg=getArg;var n=/^(?:([\w+\-.]+):)?\/\/(?:(\w+:\w+)@)?([\w.-]*)(?::(\d+))?(.*)$/;var t=/^data:.+\,.+$/;function urlParse(e){var r=e.match(n);if(!r){return null}return{scheme:r[1],auth:r[2],host:r[3],port:r[4],path:r[5]}}r.urlParse=urlParse;function urlGenerate(e){var r="";if(e.scheme){r+=e.scheme+":"}r+="//";if(e.auth){r+=e.auth+"@"}if(e.host){r+=e.host}if(e.port){r+=":"+e.port}if(e.path){r+=e.path}return r}r.urlGenerate=urlGenerate;function normalize(e){var n=e;var t=urlParse(e);if(t){if(!t.path){return e}n=t.path}var o=r.isAbsolute(n);var i=n.split(/\/+/);for(var a,u=0,s=i.length-1;s>=0;s--){a=i[s];if(a==="."){i.splice(s,1)}else if(a===".."){u++}else if(u>0){if(a===""){i.splice(s+1,u);u=0}else{i.splice(s,2);u--}}}n=i.join("/");if(n===""){n=o?"/":"."}if(t){t.path=n;return urlGenerate(t)}return n}r.normalize=normalize;function join(e,r){if(e===""){e="."}if(r===""){r="."}var n=urlParse(r);var o=urlParse(e);if(o){e=o.path||"/"}if(n&&!n.scheme){if(o){n.scheme=o.scheme}return urlGenerate(n)}if(n||r.match(t)){return r}if(o&&!o.host&&!o.path){o.host=r;return urlGenerate(o)}var i=r.charAt(0)==="/"?r:normalize(e.replace(/\/+$/,"")+"/"+r);if(o){o.path=i;return urlGenerate(o)}return i}r.join=join;r.isAbsolute=function(e){return e.charAt(0)==="/"||n.test(e)};function relative(e,r){if(e===""){e="."}e=e.replace(/\/$/,"");var n=0;while(r.indexOf(e+"/")!==0){var t=e.lastIndexOf("/");if(t<0){return r}e=e.slice(0,t);if(e.match(/^([^\/]+:\/)?\/*$/)){return r}++n}return Array(n+1).join("../")+r.substr(e.length+1)}r.relative=relative;var o=function(){var e=Object.create(null);return!("__proto__"in e)}();function identity(e){return e}function toSetString(e){if(isProtoString(e)){return"$"+e}return e}r.toSetString=o?identity:toSetString;function fromSetString(e){if(isProtoString(e)){return e.slice(1)}return e}r.fromSetString=o?identity:fromSetString;function isProtoString(e){if(!e){return false}var r=e.length;if(r<9){return false}if(e.charCodeAt(r-1)!==95||e.charCodeAt(r-2)!==95||e.charCodeAt(r-3)!==111||e.charCodeAt(r-4)!==116||e.charCodeAt(r-5)!==111||e.charCodeAt(r-6)!==114||e.charCodeAt(r-7)!==112||e.charCodeAt(r-8)!==95||e.charCodeAt(r-9)!==95){return false}for(var n=r-10;n>=0;n--){if(e.charCodeAt(n)!==36){return false}}return true}function compareByOriginalPositions(e,r,n){var t=strcmp(e.source,r.source);if(t!==0){return t}t=e.originalLine-r.originalLine;if(t!==0){return t}t=e.originalColumn-r.originalColumn;if(t!==0||n){return t}t=e.generatedColumn-r.generatedColumn;if(t!==0){return t}t=e.generatedLine-r.generatedLine;if(t!==0){return t}return strcmp(e.name,r.name)}r.compareByOriginalPositions=compareByOriginalPositions;function compareByGeneratedPositionsDeflated(e,r,n){var t=e.generatedLine-r.generatedLine;if(t!==0){return t}t=e.generatedColumn-r.generatedColumn;if(t!==0||n){return t}t=strcmp(e.source,r.source);if(t!==0){return t}t=e.originalLine-r.originalLine;if(t!==0){return t}t=e.originalColumn-r.originalColumn;if(t!==0){return t}return strcmp(e.name,r.name)}r.compareByGeneratedPositionsDeflated=compareByGeneratedPositionsDeflated;function strcmp(e,r){if(e===r){return 0}if(e===null){return 1}if(r===null){return-1}if(e>r){return 1}return-1}function compareByGeneratedPositionsInflated(e,r){var n=e.generatedLine-r.generatedLine;if(n!==0){return n}n=e.generatedColumn-r.generatedColumn;if(n!==0){return n}n=strcmp(e.source,r.source);if(n!==0){return n}n=e.originalLine-r.originalLine;if(n!==0){return n}n=e.originalColumn-r.originalColumn;if(n!==0){return n}return strcmp(e.name,r.name)}r.compareByGeneratedPositionsInflated=compareByGeneratedPositionsInflated;function parseSourceMapInput(e){return JSON.parse(e.replace(/^\)]}'[^\n]*\n/,""))}r.parseSourceMapInput=parseSourceMapInput;function computeSourceURL(e,r,n){r=r||"";if(e){if(e[e.length-1]!=="/"&&r[0]!=="/"){e+="/"}r=e+r}if(n){var t=urlParse(n);if(!t){throw new Error("sourceMapURL could not be parsed")}if(t.path){var o=t.path.lastIndexOf("/");if(o>=0){t.path=t.path.substring(0,o+1)}}r=join(urlGenerate(t),r)}return normalize(r)}r.computeSourceURL=computeSourceURL},997:(e,r,n)=>{n(591).h;r.SourceMapConsumer=n(952).SourceMapConsumer;n(351)},284:(e,r,n)=>{e=n.nmd(e);var t=n(997).SourceMapConsumer;var o=n(17);var i;try{i=n(147);if(!i.existsSync||!i.readFileSync){i=null}}catch(e){}var a=n(650);function dynamicRequire(e,r){return e.require(r)}var u=false;var s=false;var l=false;var c="auto";var p={};var f={};var g=/^data:application\/json[^,]+base64,/;var h=[];var d=[];function isInBrowser(){if(c==="browser")return true;if(c==="node")return false;return typeof window!=="undefined"&&typeof XMLHttpRequest==="function"&&!(window.require&&window.module&&window.process&&window.process.type==="renderer")}function hasGlobalProcessEventEmitter(){return typeof process==="object"&&process!==null&&typeof process.on==="function"}function globalProcessVersion(){if(typeof process==="object"&&process!==null){return process.version}else{return""}}function globalProcessStderr(){if(typeof process==="object"&&process!==null){return process.stderr}}function globalProcessExit(e){if(typeof process==="object"&&process!==null&&typeof process.exit==="function"){return process.exit(e)}}function handlerExec(e){return function(r){for(var n=0;n"}var n=this.getLineNumber();if(n!=null){r+=":"+n;var t=this.getColumnNumber();if(t){r+=":"+t}}}var o="";var i=this.getFunctionName();var a=true;var u=this.isConstructor();var s=!(this.isToplevel()||u);if(s){var l=this.getTypeName();if(l==="[object Object]"){l="null"}var c=this.getMethodName();if(i){if(l&&i.indexOf(l)!=0){o+=l+"."}o+=i;if(c&&i.indexOf("."+c)!=i.length-c.length-1){o+=" [as "+c+"]"}}else{o+=l+"."+(c||"")}}else if(u){o+="new "+(i||"")}else if(i){o+=i}else{o+=r;a=false}if(a){o+=" ("+r+")"}return o}function cloneCallSite(e){var r={};Object.getOwnPropertyNames(Object.getPrototypeOf(e)).forEach((function(n){r[n]=/^(?:is|get)/.test(n)?function(){return e[n].call(e)}:e[n]}));r.toString=CallSiteToString;return r}function wrapCallSite(e,r){if(r===undefined){r={nextPosition:null,curPosition:null}}if(e.isNative()){r.curPosition=null;return e}var n=e.getFileName()||e.getScriptNameOrSourceURL();if(n){var t=e.getLineNumber();var o=e.getColumnNumber()-1;var i=/^v(10\.1[6-9]|10\.[2-9][0-9]|10\.[0-9]{3,}|1[2-9]\d*|[2-9]\d|\d{3,}|11\.11)/;var a=i.test(globalProcessVersion())?0:62;if(t===1&&o>a&&!isInBrowser()&&!e.isEval()){o-=a}var u=mapSourcePosition({source:n,line:t,column:o});r.curPosition=u;e=cloneCallSite(e);var s=e.getFunctionName;e.getFunctionName=function(){if(r.nextPosition==null){return s()}return r.nextPosition.name||s()};e.getFileName=function(){return u.source};e.getLineNumber=function(){return u.line};e.getColumnNumber=function(){return u.column+1};e.getScriptNameOrSourceURL=function(){return u.source};return e}var l=e.isEval()&&e.getEvalOrigin();if(l){l=mapEvalOrigin(l);e=cloneCallSite(e);e.getEvalOrigin=function(){return l};return e}return e}function prepareStackTrace(e,r){if(l){p={};f={}}var n=e.name||"Error";var t=e.message||"";var o=n+": "+t;var i={nextPosition:null,curPosition:null};var a=[];for(var u=r.length-1;u>=0;u--){a.push("\n at "+wrapCallSite(r[u],i));i.nextPosition=i.curPosition}i.curPosition=i.nextPosition=null;return o+a.reverse().join("")}function getErrorSource(e){var r=/\n at [^(]+ \((.*):(\d+):(\d+)\)/.exec(e.stack);if(r){var n=r[1];var t=+r[2];var o=+r[3];var a=p[n];if(!a&&i&&i.existsSync(n)){try{a=i.readFileSync(n,"utf8")}catch(e){a=""}}if(a){var u=a.split(/(?:\r\n|\r|\n)/)[t-1];if(u){return n+":"+t+"\n"+u+"\n"+new Array(o).join(" ")+"^"}}}return null}function printErrorAndExit(e){var r=getErrorSource(e);var n=globalProcessStderr();if(n&&n._handle&&n._handle.setBlocking){n._handle.setBlocking(true)}if(r){console.error();console.error(r)}console.error(e.stack);globalProcessExit(1)}function shimEmitUncaughtException(){var e=process.emit;process.emit=function(r){if(r==="uncaughtException"){var n=arguments[1]&&arguments[1].stack;var t=this.listeners(r).length>0;if(n&&!t){return printErrorAndExit(arguments[1])}}return e.apply(this,arguments)}}var S=h.slice(0);var _=d.slice(0);r.wrapCallSite=wrapCallSite;r.getErrorSource=getErrorSource;r.mapSourcePosition=mapSourcePosition;r.retrieveSourceMap=v;r.install=function(r){r=r||{};if(r.environment){c=r.environment;if(["node","browser","auto"].indexOf(c)===-1){throw new Error("environment "+c+" was unknown. Available options are {auto, browser, node}")}}if(r.retrieveFile){if(r.overrideRetrieveFile){h.length=0}h.unshift(r.retrieveFile)}if(r.retrieveSourceMap){if(r.overrideRetrieveSourceMap){d.length=0}d.unshift(r.retrieveSourceMap)}if(r.hookRequire&&!isInBrowser()){var n=dynamicRequire(e,"module");var t=n.prototype._compile;if(!t.__sourceMapSupport){n.prototype._compile=function(e,r){p[r]=e;f[r]=undefined;return t.call(this,e,r)};n.prototype._compile.__sourceMapSupport=true}}if(!l){l="emptyCacheBetweenOperations"in r?r.emptyCacheBetweenOperations:false}if(!u){u=true;Error.prepareStackTrace=prepareStackTrace}if(!s){var o="handleUncaughtExceptions"in r?r.handleUncaughtExceptions:true;try{var i=dynamicRequire(e,"worker_threads");if(i.isMainThread===false){o=false}}catch(e){}if(o&&hasGlobalProcessEventEmitter()){s=true;shimEmitUncaughtException()}}};r.resetRetrieveHandlers=function(){h.length=0;d.length=0;h=S.slice(0);d=_.slice(0);v=handlerExec(d);m=handlerExec(h)}},147:e=>{"use strict";e.exports=require("fs")},17:e=>{"use strict";e.exports=require("path")}};var r={};function __webpack_require__(n){var t=r[n];if(t!==undefined){return t.exports}var o=r[n]={id:n,loaded:false,exports:{}};var i=true;try{e[n](o,o.exports,__webpack_require__);i=false}finally{if(i)delete r[n]}o.loaded=true;return o.exports}(()=>{__webpack_require__.nmd=e=>{e.paths=[];if(!e.children)e.children=[];return e}})();if(typeof __webpack_require__!=="undefined")__webpack_require__.ab=__dirname+"/";var n={};(()=>{__webpack_require__(284).install()})();module.exports=n})();
\ No newline at end of file
diff --git a/lib/instance.d.ts b/lib/instance.d.ts
new file mode 100644
index 0000000..2e00cb5
--- /dev/null
+++ b/lib/instance.d.ts
@@ -0,0 +1,94 @@
+export declare const API_STATUS_OK = "OK";
+export declare const INSTANCE_STATE_STARTED = "Started";
+export declare const INSTANCE_STATE_ERROR = "Error";
+export declare type StartVMRequest = {
+ vmid: string;
+ tag?: string;
+ version?: number;
+ name?: string;
+ external_id?: string;
+ count?: number;
+ node_id?: string;
+ startup_script?: string;
+ startup_script_condition?: number;
+ script_monitoring?: boolean;
+ script_timeout?: number;
+ script_fail_handler?: number;
+ name_template?: string;
+ group_id?: string;
+ priority?: number;
+ usb_device?: string;
+ vcpu?: number;
+ vram?: number;
+ metadata?: object;
+ mac_address?: string;
+ vlan_tag?: string;
+ video_controller?: string;
+ csr_active_config?: string;
+ hvapic?: string;
+};
+export interface StartVMResponse {
+ status: string;
+ message: string;
+ body: string[];
+}
+interface Instance {
+ instance_id: string;
+ instance_state: string;
+ message?: string;
+ anka_registry: string;
+ vmid: string;
+ tag: string;
+ vminfo: {
+ uuid: string;
+ name: string;
+ cpu_cores: number;
+ ram: string;
+ status: string;
+ node_id: string;
+ host_ip: string;
+ ip: string;
+ tag: string;
+ vnc_port: number;
+ creation_date: string;
+ stop_date: string;
+ version: string;
+ };
+ node_id: string;
+ inflight_reqid: string;
+ ts: string;
+ cr_time: string;
+ progress: number;
+ external_id: string;
+ arch: string;
+ vlan: string;
+ startup_script: {
+ return_code: number;
+ did_timeout: boolean;
+ stdout: string;
+ stderr: string;
+ };
+}
+export interface TerminateVMResponse {
+ status: string;
+ message: string;
+}
+export interface ListVMResponse {
+ status: string;
+ message: string;
+ body: Instance[];
+}
+export interface ListVMResponseSingle {
+ status: string;
+ message: string;
+ body: Instance;
+}
+export declare class VM {
+ private client;
+ constructor(baseURL: string, rootToken?: string, httpsAgentCa?: string, httpsAgentCert?: string, httpsAgentKey?: string, httpsAgentPassphrase?: string, httpsAgentSkipCertVerify?: boolean);
+ start(actionId: string, repoUrl: string, runnerToken: string, templateRunnerDir: string, body: StartVMRequest): Promise;
+ getState(vmid: string): Promise;
+ getInstanceId(actionId: string): Promise;
+ terminate(instanceId: string): Promise;
+}
+export {};
diff --git a/lib/instance.js b/lib/instance.js
new file mode 100644
index 0000000..b8784e4
--- /dev/null
+++ b/lib/instance.js
@@ -0,0 +1,181 @@
+"use strict";
+var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
+ if (k2 === undefined) k2 = k;
+ var desc = Object.getOwnPropertyDescriptor(m, k);
+ if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
+ desc = { enumerable: true, get: function() { return m[k]; } };
+ }
+ Object.defineProperty(o, k2, desc);
+}) : (function(o, m, k, k2) {
+ if (k2 === undefined) k2 = k;
+ o[k2] = m[k];
+}));
+var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
+ Object.defineProperty(o, "default", { enumerable: true, value: v });
+}) : function(o, v) {
+ o["default"] = v;
+});
+var __importStar = (this && this.__importStar) || function (mod) {
+ if (mod && mod.__esModule) return mod;
+ var result = {};
+ if (mod != null) for (var k in mod) if (k !== "default" && Object.prototype.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k);
+ __setModuleDefault(result, mod);
+ return result;
+};
+var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
+ function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
+ return new (P || (P = Promise))(function (resolve, reject) {
+ function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
+ function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
+ function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
+ step((generator = generator.apply(thisArg, _arguments || [])).next());
+ });
+};
+var __importDefault = (this && this.__importDefault) || function (mod) {
+ return (mod && mod.__esModule) ? mod : { "default": mod };
+};
+Object.defineProperty(exports, "__esModule", { value: true });
+exports.VM = exports.INSTANCE_STATE_ERROR = exports.INSTANCE_STATE_STARTED = exports.API_STATUS_OK = void 0;
+const axios = __importStar(require("axios"));
+const https_1 = __importDefault(require("https"));
+const log_1 = require("./log");
+exports.API_STATUS_OK = 'OK';
+exports.INSTANCE_STATE_STARTED = 'Started';
+exports.INSTANCE_STATE_ERROR = 'Error';
+class VM {
+ constructor(baseURL, rootToken, httpsAgentCa, httpsAgentCert, httpsAgentKey, httpsAgentPassphrase, httpsAgentSkipCertVerify) {
+ const config = { baseURL };
+ if (rootToken) {
+ config.auth = {
+ username: '',
+ password: rootToken
+ };
+ }
+ if (httpsAgentCa ||
+ httpsAgentCert ||
+ httpsAgentKey ||
+ httpsAgentPassphrase ||
+ httpsAgentSkipCertVerify) {
+ const agentOpts = {};
+ if (httpsAgentCa) {
+ agentOpts.ca = httpsAgentCa;
+ }
+ if (httpsAgentCert) {
+ agentOpts.cert = httpsAgentCert;
+ }
+ if (httpsAgentKey) {
+ agentOpts.key = httpsAgentKey;
+ }
+ if (httpsAgentPassphrase) {
+ agentOpts.passphrase = httpsAgentPassphrase;
+ }
+ if (httpsAgentSkipCertVerify) {
+ agentOpts.rejectUnauthorized = false;
+ }
+ config.httpsAgent = new https_1.default.Agent(agentOpts);
+ }
+ this.client = axios.default.create(config);
+ }
+ start(actionId, repoUrl, runnerToken, templateRunnerDir, body) {
+ return __awaiter(this, void 0, void 0, function* () {
+ const startupScriptWithEnv = `cd ${templateRunnerDir} \
+ && ./config.sh --url "${repoUrl}" --token "${runnerToken}" --labels "${actionId}" --runnergroup "Default" --name "${actionId}" --work "_work" \
+ && ./svc.sh install \
+ && ./svc.sh start`;
+ (0, log_1.logDebug)(`startupScriptWithEnv: ${startupScriptWithEnv}`);
+ const reqBody = JSON.stringify(body);
+ (0, log_1.logDebug)(`StartVMRequest body: ${reqBody}`);
+ try {
+ const response = yield this.client.post('/api/v1/vm', reqBody);
+ (0, log_1.logDebug)(`StartVMResponse ${JSON.stringify(response.data)}`);
+ if (response.data.status !== exports.API_STATUS_OK) {
+ throw new Error(`API response status:${response.data.status}`);
+ }
+ if (!response.data.body.length) {
+ throw new Error(`API response body: ${JSON.stringify(response.data.body)}`);
+ }
+ return response.data.body[0];
+ }
+ catch (error) {
+ throw createError(error);
+ }
+ });
+ }
+ getState(vmid) {
+ return __awaiter(this, void 0, void 0, function* () {
+ try {
+ const response = yield this.client.get(`/api/v1/vm?id=${encodeURIComponent(vmid)}`);
+ (0, log_1.logDebug)(`ListVMResponse status: ${response.status}; body: ${JSON.stringify(response.data)}`);
+ if (response.data.status !== exports.API_STATUS_OK) {
+ throw new Error(`API response status:${response.data.status}`);
+ }
+ if (!response.data.body.instance_state) {
+ throw new Error(`API response body: ${JSON.stringify(response.data.body)}`);
+ }
+ if (response.data.body.instance_state === exports.INSTANCE_STATE_ERROR) {
+ let errorMsg = `VM failed to start: ${response.data.body.message}`;
+ if (response.data.body.startup_script) {
+ errorMsg = `${errorMsg}: ${response.data.body.startup_script.stderr}`;
+ }
+ throw new Error(errorMsg.trim());
+ }
+ return response.data.body.instance_state;
+ }
+ catch (error) {
+ throw createError(error);
+ }
+ });
+ }
+ getInstanceId(actionId) {
+ return __awaiter(this, void 0, void 0, function* () {
+ try {
+ const response = yield this.client.get(`/api/v1/vm`);
+ (0, log_1.logDebug)(`ListVMResponse status: ${response.status}; body: ${JSON.stringify(response.data)}`);
+ if (response.data.status !== exports.API_STATUS_OK) {
+ throw new Error(`API response status:${response.data.status}`);
+ }
+ const instances = response.data.body.filter(instance => instance.external_id === actionId);
+ if (instances.length) {
+ return instances[0].instance_id;
+ }
+ return null;
+ }
+ catch (error) {
+ throw createError(error);
+ }
+ });
+ }
+ terminate(instanceId) {
+ return __awaiter(this, void 0, void 0, function* () {
+ try {
+ const response = yield this.client.delete(`/api/v1/vm`, {
+ data: {
+ id: instanceId
+ }
+ });
+ (0, log_1.logDebug)(`TerminateVMResponse status: ${response.status}; body: ${JSON.stringify(response.data)}`);
+ if (response.data.status !== exports.API_STATUS_OK) {
+ throw new Error(`API response status:${response.data.status}`);
+ }
+ }
+ catch (error) {
+ throw createError(error);
+ }
+ });
+ }
+}
+exports.VM = VM;
+function createError(error) {
+ if (error instanceof axios.AxiosError && error.response) {
+ if (error.response.status === 400) {
+ throw new Error(`Controller responded with an error: ${JSON.stringify(error.response.data)}`);
+ }
+ else {
+ throw new Error(`HTTP request failed: status: ${error.response.status}, data: ${JSON.stringify(error.response.data)}`);
+ }
+ }
+ else if (error instanceof axios.AxiosError && error.request) {
+ throw new Error(`Controller request failed: ${error.cause}`);
+ }
+ throw error;
+}
diff --git a/lib/log.d.ts b/lib/log.d.ts
new file mode 100644
index 0000000..9907ff0
--- /dev/null
+++ b/lib/log.d.ts
@@ -0,0 +1,3 @@
+export declare const logDebug: (message: string) => void;
+export declare const logInfo: (message: string) => void;
+export declare const logError: (message: string) => void;
diff --git a/lib/log.js b/lib/log.js
new file mode 100644
index 0000000..21cb117
--- /dev/null
+++ b/lib/log.js
@@ -0,0 +1,32 @@
+"use strict";
+var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
+ if (k2 === undefined) k2 = k;
+ var desc = Object.getOwnPropertyDescriptor(m, k);
+ if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
+ desc = { enumerable: true, get: function() { return m[k]; } };
+ }
+ Object.defineProperty(o, k2, desc);
+}) : (function(o, m, k, k2) {
+ if (k2 === undefined) k2 = k;
+ o[k2] = m[k];
+}));
+var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
+ Object.defineProperty(o, "default", { enumerable: true, value: v });
+}) : function(o, v) {
+ o["default"] = v;
+});
+var __importStar = (this && this.__importStar) || function (mod) {
+ if (mod && mod.__esModule) return mod;
+ var result = {};
+ if (mod != null) for (var k in mod) if (k !== "default" && Object.prototype.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k);
+ __setModuleDefault(result, mod);
+ return result;
+};
+Object.defineProperty(exports, "__esModule", { value: true });
+exports.logError = exports.logInfo = exports.logDebug = void 0;
+const core = __importStar(require("@actions/core"));
+const logDecorator = (logFn, decFn) => (message) => logFn(decFn(message));
+const dateTimeDecorator = (m) => `[${new Date().toLocaleString()}] ${m}`;
+exports.logDebug = logDecorator(core.debug, dateTimeDecorator);
+exports.logInfo = logDecorator(core.info, dateTimeDecorator);
+exports.logError = logDecorator(core.error, dateTimeDecorator);
diff --git a/lib/main.d.ts b/lib/main.d.ts
new file mode 100644
index 0000000..f331463
--- /dev/null
+++ b/lib/main.d.ts
@@ -0,0 +1,4 @@
+export * from './instance';
+export * from './log';
+export * from './runner';
+export * from './timeout';
diff --git a/lib/main.js b/lib/main.js
new file mode 100644
index 0000000..fc115f1
--- /dev/null
+++ b/lib/main.js
@@ -0,0 +1,20 @@
+"use strict";
+var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
+ if (k2 === undefined) k2 = k;
+ var desc = Object.getOwnPropertyDescriptor(m, k);
+ if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
+ desc = { enumerable: true, get: function() { return m[k]; } };
+ }
+ Object.defineProperty(o, k2, desc);
+}) : (function(o, m, k, k2) {
+ if (k2 === undefined) k2 = k;
+ o[k2] = m[k];
+}));
+var __exportStar = (this && this.__exportStar) || function(m, exports) {
+ for (var p in m) if (p !== "default" && !Object.prototype.hasOwnProperty.call(exports, p)) __createBinding(exports, m, p);
+};
+Object.defineProperty(exports, "__esModule", { value: true });
+__exportStar(require("./instance"), exports);
+__exportStar(require("./log"), exports);
+__exportStar(require("./runner"), exports);
+__exportStar(require("./timeout"), exports);
diff --git a/lib/runner.d.ts b/lib/runner.d.ts
new file mode 100644
index 0000000..9dfa82d
--- /dev/null
+++ b/lib/runner.d.ts
@@ -0,0 +1,10 @@
+import { Octokit } from '@octokit/rest';
+export declare class Runner {
+ private octokit;
+ private owner;
+ private repo;
+ constructor(octokit: Octokit, owner: string, repo: string);
+ getRunnerByName(name: string): Promise;
+ createToken(): Promise;
+ delete(runnerId: number): Promise;
+}
diff --git a/lib/runner.js b/lib/runner.js
new file mode 100644
index 0000000..9e3aedb
--- /dev/null
+++ b/lib/runner.js
@@ -0,0 +1,51 @@
+"use strict";
+var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
+ function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
+ return new (P || (P = Promise))(function (resolve, reject) {
+ function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
+ function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
+ function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
+ step((generator = generator.apply(thisArg, _arguments || [])).next());
+ });
+};
+Object.defineProperty(exports, "__esModule", { value: true });
+exports.Runner = void 0;
+class Runner {
+ constructor(octokit, owner, repo) {
+ this.octokit = octokit;
+ this.owner = owner;
+ this.repo = repo;
+ }
+ getRunnerByName(name) {
+ return __awaiter(this, void 0, void 0, function* () {
+ const runnerListResp = yield this.octokit.actions.listSelfHostedRunnersForRepo({
+ owner: this.owner,
+ repo: this.repo
+ });
+ const found = runnerListResp.data.runners.filter(runner => runner.name === name);
+ if (found.length) {
+ return found[0].id;
+ }
+ return null;
+ });
+ }
+ createToken() {
+ return __awaiter(this, void 0, void 0, function* () {
+ const tokenResp = yield this.octokit.actions.createRegistrationTokenForRepo({
+ owner: this.owner,
+ repo: this.repo
+ });
+ return tokenResp.data.token;
+ });
+ }
+ delete(runnerId) {
+ return __awaiter(this, void 0, void 0, function* () {
+ yield this.octokit.actions.deleteSelfHostedRunnerFromRepo({
+ owner: this.owner,
+ repo: this.repo,
+ runner_id: runnerId
+ });
+ });
+ }
+}
+exports.Runner = Runner;
diff --git a/lib/timeout.d.ts b/lib/timeout.d.ts
new file mode 100644
index 0000000..2e65015
--- /dev/null
+++ b/lib/timeout.d.ts
@@ -0,0 +1,4 @@
+export declare class HardTimeoutError extends Error {
+}
+export declare const sleep: (waitTimeInMs: number) => Promise;
+export declare const timeout: (ms: number, message: string) => Promise;
diff --git a/lib/timeout.js b/lib/timeout.js
new file mode 100644
index 0000000..54bc6a5
--- /dev/null
+++ b/lib/timeout.js
@@ -0,0 +1,27 @@
+"use strict";
+var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
+ function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
+ return new (P || (P = Promise))(function (resolve, reject) {
+ function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
+ function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
+ function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
+ step((generator = generator.apply(thisArg, _arguments || [])).next());
+ });
+};
+Object.defineProperty(exports, "__esModule", { value: true });
+exports.timeout = exports.sleep = exports.HardTimeoutError = void 0;
+class HardTimeoutError extends Error {
+}
+exports.HardTimeoutError = HardTimeoutError;
+const sleep = (waitTimeInMs) => __awaiter(void 0, void 0, void 0, function* () { return new Promise(resolve => setTimeout(resolve, waitTimeInMs)); });
+exports.sleep = sleep;
+const timeout = (ms, message) => __awaiter(void 0, void 0, void 0, function* () {
+ return new Promise((_, reject) => {
+ const id = setTimeout(() => {
+ reject(new HardTimeoutError(message));
+ }, ms);
+ // let timer to not block Nodejs process to exit naturally
+ id.unref();
+ });
+});
+exports.timeout = timeout;
diff --git a/package-lock.json b/package-lock.json
index 2a735a8..f9afc8e 100644
--- a/package-lock.json
+++ b/package-lock.json
@@ -1,26 +1,29 @@
{
- "name": "typescript-action",
- "version": "0.0.0",
+ "name": "anka-actions-common",
+ "version": "1.0.0",
"lockfileVersion": 2,
"requires": true,
"packages": {
"": {
- "name": "typescript-action",
- "version": "0.0.0",
+ "name": "anka-actions-common",
+ "version": "1.0.0",
"license": "MIT",
"dependencies": {
"@actions/core": "^1.10.0",
+ "@octokit/core": "^4.1.0",
"@octokit/rest": "^19.0.5",
- "axios": "^1.1.2"
+ "axios": "^1.1.3"
},
"devDependencies": {
- "@types/node": "^18.8.5",
- "@typescript-eslint/parser": "^5.40.0",
+ "@types/http-server": "^0.12.1",
+ "@types/jest": "^29.2.0",
+ "@types/node": "^18.11.6",
+ "@typescript-eslint/parser": "^5.41.0",
"@vercel/ncc": "^0.34.0",
- "eslint": "^8.25.0",
+ "eslint": "^8.26.0",
"eslint-plugin-github": "^4.4.0",
- "eslint-plugin-jest": "^27.1.1",
- "jest": "^29.1.2",
+ "eslint-plugin-jest": "^27.1.3",
+ "jest": "^29.2.2",
"js-yaml": "^4.1.0",
"prettier": "2.7.1",
"ts-jest": "^29.0.3",
@@ -668,9 +671,9 @@
"dev": true
},
"node_modules/@humanwhocodes/config-array": {
- "version": "0.10.7",
- "resolved": "https://registry.npmjs.org/@humanwhocodes/config-array/-/config-array-0.10.7.tgz",
- "integrity": "sha512-MDl6D6sBsaV452/QSdX+4CXIjZhIcI0PELsxUjk4U828yd58vk3bTIvk/6w5FY+4hIy9sLW0sfrV7K7Kc++j/w==",
+ "version": "0.11.6",
+ "resolved": "https://registry.npmjs.org/@humanwhocodes/config-array/-/config-array-0.11.6.tgz",
+ "integrity": "sha512-jJr+hPTJYKyDILJfhNSHsjiwXYf26Flsz8DvNndOsHs5pwSnpGUEy8yzF0JYhCEvTDdV2vuOK5tt8BVhwO5/hg==",
"dev": true,
"dependencies": {
"@humanwhocodes/object-schema": "^1.2.1",
@@ -827,16 +830,16 @@
}
},
"node_modules/@jest/console": {
- "version": "29.1.2",
- "resolved": "https://registry.npmjs.org/@jest/console/-/console-29.1.2.tgz",
- "integrity": "sha512-ujEBCcYs82BTmRxqfHMQggSlkUZP63AE5YEaTPj7eFyJOzukkTorstOUC7L6nE3w5SYadGVAnTsQ/ZjTGL0qYQ==",
+ "version": "29.2.1",
+ "resolved": "https://registry.npmjs.org/@jest/console/-/console-29.2.1.tgz",
+ "integrity": "sha512-MF8Adcw+WPLZGBiNxn76DOuczG3BhODTcMlDCA4+cFi41OkaY/lyI0XUUhi73F88Y+7IHoGmD80pN5CtxQUdSw==",
"dev": true,
"dependencies": {
- "@jest/types": "^29.1.2",
+ "@jest/types": "^29.2.1",
"@types/node": "*",
"chalk": "^4.0.0",
- "jest-message-util": "^29.1.2",
- "jest-util": "^29.1.2",
+ "jest-message-util": "^29.2.1",
+ "jest-util": "^29.2.1",
"slash": "^3.0.0"
},
"engines": {
@@ -844,37 +847,37 @@
}
},
"node_modules/@jest/core": {
- "version": "29.1.2",
- "resolved": "https://registry.npmjs.org/@jest/core/-/core-29.1.2.tgz",
- "integrity": "sha512-sCO2Va1gikvQU2ynDN8V4+6wB7iVrD2CvT0zaRst4rglf56yLly0NQ9nuRRAWFeimRf+tCdFsb1Vk1N9LrrMPA==",
+ "version": "29.2.2",
+ "resolved": "https://registry.npmjs.org/@jest/core/-/core-29.2.2.tgz",
+ "integrity": "sha512-susVl8o2KYLcZhhkvSB+b7xX575CX3TmSvxfeDjpRko7KmT89rHkXj6XkDkNpSeFMBzIENw5qIchO9HC9Sem+A==",
"dev": true,
"dependencies": {
- "@jest/console": "^29.1.2",
- "@jest/reporters": "^29.1.2",
- "@jest/test-result": "^29.1.2",
- "@jest/transform": "^29.1.2",
- "@jest/types": "^29.1.2",
+ "@jest/console": "^29.2.1",
+ "@jest/reporters": "^29.2.2",
+ "@jest/test-result": "^29.2.1",
+ "@jest/transform": "^29.2.2",
+ "@jest/types": "^29.2.1",
"@types/node": "*",
"ansi-escapes": "^4.2.1",
"chalk": "^4.0.0",
"ci-info": "^3.2.0",
"exit": "^0.1.2",
"graceful-fs": "^4.2.9",
- "jest-changed-files": "^29.0.0",
- "jest-config": "^29.1.2",
- "jest-haste-map": "^29.1.2",
- "jest-message-util": "^29.1.2",
- "jest-regex-util": "^29.0.0",
- "jest-resolve": "^29.1.2",
- "jest-resolve-dependencies": "^29.1.2",
- "jest-runner": "^29.1.2",
- "jest-runtime": "^29.1.2",
- "jest-snapshot": "^29.1.2",
- "jest-util": "^29.1.2",
- "jest-validate": "^29.1.2",
- "jest-watcher": "^29.1.2",
+ "jest-changed-files": "^29.2.0",
+ "jest-config": "^29.2.2",
+ "jest-haste-map": "^29.2.1",
+ "jest-message-util": "^29.2.1",
+ "jest-regex-util": "^29.2.0",
+ "jest-resolve": "^29.2.2",
+ "jest-resolve-dependencies": "^29.2.2",
+ "jest-runner": "^29.2.2",
+ "jest-runtime": "^29.2.2",
+ "jest-snapshot": "^29.2.2",
+ "jest-util": "^29.2.1",
+ "jest-validate": "^29.2.2",
+ "jest-watcher": "^29.2.2",
"micromatch": "^4.0.4",
- "pretty-format": "^29.1.2",
+ "pretty-format": "^29.2.1",
"slash": "^3.0.0",
"strip-ansi": "^6.0.0"
},
@@ -891,88 +894,88 @@
}
},
"node_modules/@jest/environment": {
- "version": "29.1.2",
- "resolved": "https://registry.npmjs.org/@jest/environment/-/environment-29.1.2.tgz",
- "integrity": "sha512-rG7xZ2UeOfvOVzoLIJ0ZmvPl4tBEQ2n73CZJSlzUjPw4or1oSWC0s0Rk0ZX+pIBJ04aVr6hLWFn1DFtrnf8MhQ==",
+ "version": "29.2.2",
+ "resolved": "https://registry.npmjs.org/@jest/environment/-/environment-29.2.2.tgz",
+ "integrity": "sha512-OWn+Vhu0I1yxuGBJEFFekMYc8aGBGrY4rt47SOh/IFaI+D7ZHCk7pKRiSoZ2/Ml7b0Ony3ydmEHRx/tEOC7H1A==",
"dev": true,
"dependencies": {
- "@jest/fake-timers": "^29.1.2",
- "@jest/types": "^29.1.2",
+ "@jest/fake-timers": "^29.2.2",
+ "@jest/types": "^29.2.1",
"@types/node": "*",
- "jest-mock": "^29.1.2"
+ "jest-mock": "^29.2.2"
},
"engines": {
"node": "^14.15.0 || ^16.10.0 || >=18.0.0"
}
},
"node_modules/@jest/expect": {
- "version": "29.1.2",
- "resolved": "https://registry.npmjs.org/@jest/expect/-/expect-29.1.2.tgz",
- "integrity": "sha512-FXw/UmaZsyfRyvZw3M6POgSNqwmuOXJuzdNiMWW9LCYo0GRoRDhg+R5iq5higmRTHQY7hx32+j7WHwinRmoILQ==",
+ "version": "29.2.2",
+ "resolved": "https://registry.npmjs.org/@jest/expect/-/expect-29.2.2.tgz",
+ "integrity": "sha512-zwblIZnrIVt8z/SiEeJ7Q9wKKuB+/GS4yZe9zw7gMqfGf4C5hBLGrVyxu1SzDbVSqyMSlprKl3WL1r80cBNkgg==",
"dev": true,
"dependencies": {
- "expect": "^29.1.2",
- "jest-snapshot": "^29.1.2"
+ "expect": "^29.2.2",
+ "jest-snapshot": "^29.2.2"
},
"engines": {
"node": "^14.15.0 || ^16.10.0 || >=18.0.0"
}
},
"node_modules/@jest/expect-utils": {
- "version": "29.1.2",
- "resolved": "https://registry.npmjs.org/@jest/expect-utils/-/expect-utils-29.1.2.tgz",
- "integrity": "sha512-4a48bhKfGj/KAH39u0ppzNTABXQ8QPccWAFUFobWBaEMSMp+sB31Z2fK/l47c4a/Mu1po2ffmfAIPxXbVTXdtg==",
+ "version": "29.2.2",
+ "resolved": "https://registry.npmjs.org/@jest/expect-utils/-/expect-utils-29.2.2.tgz",
+ "integrity": "sha512-vwnVmrVhTmGgQzyvcpze08br91OL61t9O0lJMDyb6Y/D8EKQ9V7rGUb/p7PDt0GPzK0zFYqXWFo4EO2legXmkg==",
"dev": true,
"dependencies": {
- "jest-get-type": "^29.0.0"
+ "jest-get-type": "^29.2.0"
},
"engines": {
"node": "^14.15.0 || ^16.10.0 || >=18.0.0"
}
},
"node_modules/@jest/fake-timers": {
- "version": "29.1.2",
- "resolved": "https://registry.npmjs.org/@jest/fake-timers/-/fake-timers-29.1.2.tgz",
- "integrity": "sha512-GppaEqS+QQYegedxVMpCe2xCXxxeYwQ7RsNx55zc8f+1q1qevkZGKequfTASI7ejmg9WwI+SJCrHe9X11bLL9Q==",
+ "version": "29.2.2",
+ "resolved": "https://registry.npmjs.org/@jest/fake-timers/-/fake-timers-29.2.2.tgz",
+ "integrity": "sha512-nqaW3y2aSyZDl7zQ7t1XogsxeavNpH6kkdq+EpXncIDvAkjvFD7hmhcIs1nWloengEWUoWqkqSA6MSbf9w6DgA==",
"dev": true,
"dependencies": {
- "@jest/types": "^29.1.2",
+ "@jest/types": "^29.2.1",
"@sinonjs/fake-timers": "^9.1.2",
"@types/node": "*",
- "jest-message-util": "^29.1.2",
- "jest-mock": "^29.1.2",
- "jest-util": "^29.1.2"
+ "jest-message-util": "^29.2.1",
+ "jest-mock": "^29.2.2",
+ "jest-util": "^29.2.1"
},
"engines": {
"node": "^14.15.0 || ^16.10.0 || >=18.0.0"
}
},
"node_modules/@jest/globals": {
- "version": "29.1.2",
- "resolved": "https://registry.npmjs.org/@jest/globals/-/globals-29.1.2.tgz",
- "integrity": "sha512-uMgfERpJYoQmykAd0ffyMq8wignN4SvLUG6orJQRe9WAlTRc9cdpCaE/29qurXixYJVZWUqIBXhSk8v5xN1V9g==",
+ "version": "29.2.2",
+ "resolved": "https://registry.npmjs.org/@jest/globals/-/globals-29.2.2.tgz",
+ "integrity": "sha512-/nt+5YMh65kYcfBhj38B3Hm0Trk4IsuMXNDGKE/swp36yydBWfz3OXkLqkSvoAtPW8IJMSJDFCbTM2oj5SNprw==",
"dev": true,
"dependencies": {
- "@jest/environment": "^29.1.2",
- "@jest/expect": "^29.1.2",
- "@jest/types": "^29.1.2",
- "jest-mock": "^29.1.2"
+ "@jest/environment": "^29.2.2",
+ "@jest/expect": "^29.2.2",
+ "@jest/types": "^29.2.1",
+ "jest-mock": "^29.2.2"
},
"engines": {
"node": "^14.15.0 || ^16.10.0 || >=18.0.0"
}
},
"node_modules/@jest/reporters": {
- "version": "29.1.2",
- "resolved": "https://registry.npmjs.org/@jest/reporters/-/reporters-29.1.2.tgz",
- "integrity": "sha512-X4fiwwyxy9mnfpxL0g9DD0KcTmEIqP0jUdnc2cfa9riHy+I6Gwwp5vOZiwyg0vZxfSDxrOlK9S4+340W4d+DAA==",
+ "version": "29.2.2",
+ "resolved": "https://registry.npmjs.org/@jest/reporters/-/reporters-29.2.2.tgz",
+ "integrity": "sha512-AzjL2rl2zJC0njIzcooBvjA4sJjvdoq98sDuuNs4aNugtLPSQ+91nysGKRF0uY1to5k0MdGMdOBggUsPqvBcpA==",
"dev": true,
"dependencies": {
"@bcoe/v8-coverage": "^0.2.3",
- "@jest/console": "^29.1.2",
- "@jest/test-result": "^29.1.2",
- "@jest/transform": "^29.1.2",
- "@jest/types": "^29.1.2",
+ "@jest/console": "^29.2.1",
+ "@jest/test-result": "^29.2.1",
+ "@jest/transform": "^29.2.2",
+ "@jest/types": "^29.2.1",
"@jridgewell/trace-mapping": "^0.3.15",
"@types/node": "*",
"chalk": "^4.0.0",
@@ -985,13 +988,12 @@
"istanbul-lib-report": "^3.0.0",
"istanbul-lib-source-maps": "^4.0.0",
"istanbul-reports": "^3.1.3",
- "jest-message-util": "^29.1.2",
- "jest-util": "^29.1.2",
- "jest-worker": "^29.1.2",
+ "jest-message-util": "^29.2.1",
+ "jest-util": "^29.2.1",
+ "jest-worker": "^29.2.1",
"slash": "^3.0.0",
"string-length": "^4.0.1",
"strip-ansi": "^6.0.0",
- "terminal-link": "^2.0.0",
"v8-to-istanbul": "^9.0.1"
},
"engines": {
@@ -1019,9 +1021,9 @@
}
},
"node_modules/@jest/source-map": {
- "version": "29.0.0",
- "resolved": "https://registry.npmjs.org/@jest/source-map/-/source-map-29.0.0.tgz",
- "integrity": "sha512-nOr+0EM8GiHf34mq2GcJyz/gYFyLQ2INDhAylrZJ9mMWoW21mLBfZa0BUVPPMxVYrLjeiRe2Z7kWXOGnS0TFhQ==",
+ "version": "29.2.0",
+ "resolved": "https://registry.npmjs.org/@jest/source-map/-/source-map-29.2.0.tgz",
+ "integrity": "sha512-1NX9/7zzI0nqa6+kgpSdKPK+WU1p+SJk3TloWZf5MzPbxri9UEeXX5bWZAPCzbQcyuAzubcdUHA7hcNznmRqWQ==",
"dev": true,
"dependencies": {
"@jridgewell/trace-mapping": "^0.3.15",
@@ -1033,13 +1035,13 @@
}
},
"node_modules/@jest/test-result": {
- "version": "29.1.2",
- "resolved": "https://registry.npmjs.org/@jest/test-result/-/test-result-29.1.2.tgz",
- "integrity": "sha512-jjYYjjumCJjH9hHCoMhA8PCl1OxNeGgAoZ7yuGYILRJX9NjgzTN0pCT5qAoYR4jfOP8htIByvAlz9vfNSSBoVg==",
+ "version": "29.2.1",
+ "resolved": "https://registry.npmjs.org/@jest/test-result/-/test-result-29.2.1.tgz",
+ "integrity": "sha512-lS4+H+VkhbX6z64tZP7PAUwPqhwj3kbuEHcaLuaBuB+riyaX7oa1txe0tXgrFj5hRWvZKvqO7LZDlNWeJ7VTPA==",
"dev": true,
"dependencies": {
- "@jest/console": "^29.1.2",
- "@jest/types": "^29.1.2",
+ "@jest/console": "^29.2.1",
+ "@jest/types": "^29.2.1",
"@types/istanbul-lib-coverage": "^2.0.0",
"collect-v8-coverage": "^1.0.0"
},
@@ -1048,14 +1050,14 @@
}
},
"node_modules/@jest/test-sequencer": {
- "version": "29.1.2",
- "resolved": "https://registry.npmjs.org/@jest/test-sequencer/-/test-sequencer-29.1.2.tgz",
- "integrity": "sha512-fU6dsUqqm8sA+cd85BmeF7Gu9DsXVWFdGn9taxM6xN1cKdcP/ivSgXh5QucFRFz1oZxKv3/9DYYbq0ULly3P/Q==",
+ "version": "29.2.2",
+ "resolved": "https://registry.npmjs.org/@jest/test-sequencer/-/test-sequencer-29.2.2.tgz",
+ "integrity": "sha512-Cuc1znc1pl4v9REgmmLf0jBd3Y65UXJpioGYtMr/JNpQEIGEzkmHhy6W6DLbSsXeUA13TDzymPv0ZGZ9jH3eIw==",
"dev": true,
"dependencies": {
- "@jest/test-result": "^29.1.2",
+ "@jest/test-result": "^29.2.1",
"graceful-fs": "^4.2.9",
- "jest-haste-map": "^29.1.2",
+ "jest-haste-map": "^29.2.1",
"slash": "^3.0.0"
},
"engines": {
@@ -1063,22 +1065,22 @@
}
},
"node_modules/@jest/transform": {
- "version": "29.1.2",
- "resolved": "https://registry.npmjs.org/@jest/transform/-/transform-29.1.2.tgz",
- "integrity": "sha512-2uaUuVHTitmkx1tHF+eBjb4p7UuzBG7SXIaA/hNIkaMP6K+gXYGxP38ZcrofzqN0HeZ7A90oqsOa97WU7WZkSw==",
+ "version": "29.2.2",
+ "resolved": "https://registry.npmjs.org/@jest/transform/-/transform-29.2.2.tgz",
+ "integrity": "sha512-aPe6rrletyuEIt2axxgdtxljmzH8O/nrov4byy6pDw9S8inIrTV+2PnjyP/oFHMSynzGxJ2s6OHowBNMXp/Jzg==",
"dev": true,
"dependencies": {
"@babel/core": "^7.11.6",
- "@jest/types": "^29.1.2",
+ "@jest/types": "^29.2.1",
"@jridgewell/trace-mapping": "^0.3.15",
"babel-plugin-istanbul": "^6.1.1",
"chalk": "^4.0.0",
"convert-source-map": "^1.4.0",
"fast-json-stable-stringify": "^2.1.0",
"graceful-fs": "^4.2.9",
- "jest-haste-map": "^29.1.2",
- "jest-regex-util": "^29.0.0",
- "jest-util": "^29.1.2",
+ "jest-haste-map": "^29.2.1",
+ "jest-regex-util": "^29.2.0",
+ "jest-util": "^29.2.1",
"micromatch": "^4.0.4",
"pirates": "^4.0.4",
"slash": "^3.0.0",
@@ -1089,9 +1091,9 @@
}
},
"node_modules/@jest/types": {
- "version": "29.1.2",
- "resolved": "https://registry.npmjs.org/@jest/types/-/types-29.1.2.tgz",
- "integrity": "sha512-DcXGtoTykQB5jiwCmVr8H4vdg2OJhQex3qPkG+ISyDO7xQXbt/4R6dowcRyPemRnkH7JoHvZuxPBdlq+9JxFCg==",
+ "version": "29.2.1",
+ "resolved": "https://registry.npmjs.org/@jest/types/-/types-29.2.1.tgz",
+ "integrity": "sha512-O/QNDQODLnINEPAI0cl9U6zUIDXEWXt6IC1o2N2QENuos7hlGUIthlKyV4p6ki3TvXFX071blj8HUhgLGquPjw==",
"dev": true,
"dependencies": {
"@jest/schemas": "^29.0.0",
@@ -1438,6 +1440,15 @@
"@babel/types": "^7.3.0"
}
},
+ "node_modules/@types/connect": {
+ "version": "3.4.35",
+ "resolved": "https://registry.npmjs.org/@types/connect/-/connect-3.4.35.tgz",
+ "integrity": "sha512-cdeYyv4KWoEgpBISTxWvqYsVy444DOqehiF3fM3ne10AmJ62RSyNkUnxMJXHQWRQQX2eR94m5y1IZyDwBjV9FQ==",
+ "dev": true,
+ "dependencies": {
+ "@types/node": "*"
+ }
+ },
"node_modules/@types/graceful-fs": {
"version": "4.1.5",
"resolved": "https://registry.npmjs.org/@types/graceful-fs/-/graceful-fs-4.1.5.tgz",
@@ -1447,6 +1458,15 @@
"@types/node": "*"
}
},
+ "node_modules/@types/http-server": {
+ "version": "0.12.1",
+ "resolved": "https://registry.npmjs.org/@types/http-server/-/http-server-0.12.1.tgz",
+ "integrity": "sha512-OJ8zs0o8JuHo92KCCsLq4BqkHPi1+Aj2yoPQXJ18LPUxOA1lqKfgBLtHNAQTwwPzeBqyo+HDkWD91MkfOGvNJg==",
+ "dev": true,
+ "dependencies": {
+ "@types/connect": "*"
+ }
+ },
"node_modules/@types/istanbul-lib-coverage": {
"version": "2.0.4",
"resolved": "https://registry.npmjs.org/@types/istanbul-lib-coverage/-/istanbul-lib-coverage-2.0.4.tgz",
@@ -1471,6 +1491,16 @@
"@types/istanbul-lib-report": "*"
}
},
+ "node_modules/@types/jest": {
+ "version": "29.2.0",
+ "resolved": "https://registry.npmjs.org/@types/jest/-/jest-29.2.0.tgz",
+ "integrity": "sha512-KO7bPV21d65PKwv3LLsD8Jn3E05pjNjRZvkm+YTacWhVmykAb07wW6IkZUmQAltwQafNcDUEUrMO2h3jeBSisg==",
+ "dev": true,
+ "dependencies": {
+ "expect": "^29.0.0",
+ "pretty-format": "^29.0.0"
+ }
+ },
"node_modules/@types/json-schema": {
"version": "7.0.9",
"resolved": "https://registry.npmjs.org/@types/json-schema/-/json-schema-7.0.9.tgz",
@@ -1484,9 +1514,9 @@
"dev": true
},
"node_modules/@types/node": {
- "version": "18.8.5",
- "resolved": "https://registry.npmjs.org/@types/node/-/node-18.8.5.tgz",
- "integrity": "sha512-Bq7G3AErwe5A/Zki5fdD3O6+0zDChhg671NfPjtIcbtzDNZTv4NPKMRFr7gtYPG7y+B8uTiNK4Ngd9T0FTar6Q==",
+ "version": "18.11.6",
+ "resolved": "https://registry.npmjs.org/@types/node/-/node-18.11.6.tgz",
+ "integrity": "sha512-j3CEDa2vd96K0AXF8Wur7UucACvnjkk8hYyQAHhUNciabZLDl9nfAEVUSwmh245OOZV15bRA3Y590Gi5jUcDJg==",
"dev": true
},
"node_modules/@types/prettier": {
@@ -1564,14 +1594,14 @@
}
},
"node_modules/@typescript-eslint/parser": {
- "version": "5.40.0",
- "resolved": "https://registry.npmjs.org/@typescript-eslint/parser/-/parser-5.40.0.tgz",
- "integrity": "sha512-Ah5gqyX2ySkiuYeOIDg7ap51/b63QgWZA7w6AHtFrag7aH0lRQPbLzUjk0c9o5/KZ6JRkTTDKShL4AUrQa6/hw==",
+ "version": "5.41.0",
+ "resolved": "https://registry.npmjs.org/@typescript-eslint/parser/-/parser-5.41.0.tgz",
+ "integrity": "sha512-HQVfix4+RL5YRWZboMD1pUfFN8MpRH4laziWkkAzyO1fvNOY/uinZcvo3QiFJVS/siNHupV8E5+xSwQZrl6PZA==",
"dev": true,
"dependencies": {
- "@typescript-eslint/scope-manager": "5.40.0",
- "@typescript-eslint/types": "5.40.0",
- "@typescript-eslint/typescript-estree": "5.40.0",
+ "@typescript-eslint/scope-manager": "5.41.0",
+ "@typescript-eslint/types": "5.41.0",
+ "@typescript-eslint/typescript-estree": "5.41.0",
"debug": "^4.3.4"
},
"engines": {
@@ -1590,6 +1620,95 @@
}
}
},
+ "node_modules/@typescript-eslint/parser/node_modules/@typescript-eslint/scope-manager": {
+ "version": "5.41.0",
+ "resolved": "https://registry.npmjs.org/@typescript-eslint/scope-manager/-/scope-manager-5.41.0.tgz",
+ "integrity": "sha512-xOxPJCnuktUkY2xoEZBKXO5DBCugFzjrVndKdUnyQr3+9aDWZReKq9MhaoVnbL+maVwWJu/N0SEtrtEUNb62QQ==",
+ "dev": true,
+ "dependencies": {
+ "@typescript-eslint/types": "5.41.0",
+ "@typescript-eslint/visitor-keys": "5.41.0"
+ },
+ "engines": {
+ "node": "^12.22.0 || ^14.17.0 || >=16.0.0"
+ },
+ "funding": {
+ "type": "opencollective",
+ "url": "https://opencollective.com/typescript-eslint"
+ }
+ },
+ "node_modules/@typescript-eslint/parser/node_modules/@typescript-eslint/types": {
+ "version": "5.41.0",
+ "resolved": "https://registry.npmjs.org/@typescript-eslint/types/-/types-5.41.0.tgz",
+ "integrity": "sha512-5BejraMXMC+2UjefDvrH0Fo/eLwZRV6859SXRg+FgbhA0R0l6lDqDGAQYhKbXhPN2ofk2kY5sgGyLNL907UXpA==",
+ "dev": true,
+ "engines": {
+ "node": "^12.22.0 || ^14.17.0 || >=16.0.0"
+ },
+ "funding": {
+ "type": "opencollective",
+ "url": "https://opencollective.com/typescript-eslint"
+ }
+ },
+ "node_modules/@typescript-eslint/parser/node_modules/@typescript-eslint/typescript-estree": {
+ "version": "5.41.0",
+ "resolved": "https://registry.npmjs.org/@typescript-eslint/typescript-estree/-/typescript-estree-5.41.0.tgz",
+ "integrity": "sha512-SlzFYRwFSvswzDSQ/zPkIWcHv8O5y42YUskko9c4ki+fV6HATsTODUPbRbcGDFYP86gaJL5xohUEytvyNNcXWg==",
+ "dev": true,
+ "dependencies": {
+ "@typescript-eslint/types": "5.41.0",
+ "@typescript-eslint/visitor-keys": "5.41.0",
+ "debug": "^4.3.4",
+ "globby": "^11.1.0",
+ "is-glob": "^4.0.3",
+ "semver": "^7.3.7",
+ "tsutils": "^3.21.0"
+ },
+ "engines": {
+ "node": "^12.22.0 || ^14.17.0 || >=16.0.0"
+ },
+ "funding": {
+ "type": "opencollective",
+ "url": "https://opencollective.com/typescript-eslint"
+ },
+ "peerDependenciesMeta": {
+ "typescript": {
+ "optional": true
+ }
+ }
+ },
+ "node_modules/@typescript-eslint/parser/node_modules/@typescript-eslint/visitor-keys": {
+ "version": "5.41.0",
+ "resolved": "https://registry.npmjs.org/@typescript-eslint/visitor-keys/-/visitor-keys-5.41.0.tgz",
+ "integrity": "sha512-vilqeHj267v8uzzakbm13HkPMl7cbYpKVjgFWZPIOHIJHZtinvypUhJ5xBXfWYg4eFKqztbMMpOgFpT9Gfx4fw==",
+ "dev": true,
+ "dependencies": {
+ "@typescript-eslint/types": "5.41.0",
+ "eslint-visitor-keys": "^3.3.0"
+ },
+ "engines": {
+ "node": "^12.22.0 || ^14.17.0 || >=16.0.0"
+ },
+ "funding": {
+ "type": "opencollective",
+ "url": "https://opencollective.com/typescript-eslint"
+ }
+ },
+ "node_modules/@typescript-eslint/parser/node_modules/semver": {
+ "version": "7.3.8",
+ "resolved": "https://registry.npmjs.org/semver/-/semver-7.3.8.tgz",
+ "integrity": "sha512-NB1ctGL5rlHrPJtFDVIVzTyQylMLu9N9VICA6HSFJo8MCGVTMW6gfpicwKmmK/dAjTOrqu5l63JJOpDSrAis3A==",
+ "dev": true,
+ "dependencies": {
+ "lru-cache": "^6.0.0"
+ },
+ "bin": {
+ "semver": "bin/semver.js"
+ },
+ "engines": {
+ "node": ">=10"
+ }
+ },
"node_modules/@typescript-eslint/scope-manager": {
"version": "5.40.0",
"resolved": "https://registry.npmjs.org/@typescript-eslint/scope-manager/-/scope-manager-5.40.0.tgz",
@@ -1960,9 +2079,9 @@
}
},
"node_modules/axios": {
- "version": "1.1.2",
- "resolved": "https://registry.npmjs.org/axios/-/axios-1.1.2.tgz",
- "integrity": "sha512-bznQyETwElsXl2RK7HLLwb5GPpOLlycxHCtrpDR/4RqqBzjARaOTo3jz4IgtntWUYee7Ne4S8UHd92VCuzPaWA==",
+ "version": "1.1.3",
+ "resolved": "https://registry.npmjs.org/axios/-/axios-1.1.3.tgz",
+ "integrity": "sha512-00tXVRwKx/FZr/IDVFt4C+f9FYairX517WoGCL6dpOntqLkZofjhu43F/Xl44UOpqa+9sLFDrG/XAnFsUYgkDA==",
"dependencies": {
"follow-redirects": "^1.15.0",
"form-data": "^4.0.0",
@@ -1989,15 +2108,15 @@
"dev": true
},
"node_modules/babel-jest": {
- "version": "29.1.2",
- "resolved": "https://registry.npmjs.org/babel-jest/-/babel-jest-29.1.2.tgz",
- "integrity": "sha512-IuG+F3HTHryJb7gacC7SQ59A9kO56BctUsT67uJHp1mMCHUOMXpDwOHWGifWqdWVknN2WNkCVQELPjXx0aLJ9Q==",
+ "version": "29.2.2",
+ "resolved": "https://registry.npmjs.org/babel-jest/-/babel-jest-29.2.2.tgz",
+ "integrity": "sha512-kkq2QSDIuvpgfoac3WZ1OOcHsQQDU5xYk2Ql7tLdJ8BVAYbefEXal+NfS45Y5LVZA7cxC8KYcQMObpCt1J025w==",
"dev": true,
"dependencies": {
- "@jest/transform": "^29.1.2",
+ "@jest/transform": "^29.2.2",
"@types/babel__core": "^7.1.14",
"babel-plugin-istanbul": "^6.1.1",
- "babel-preset-jest": "^29.0.2",
+ "babel-preset-jest": "^29.2.0",
"chalk": "^4.0.0",
"graceful-fs": "^4.2.9",
"slash": "^3.0.0"
@@ -2026,9 +2145,9 @@
}
},
"node_modules/babel-plugin-jest-hoist": {
- "version": "29.0.2",
- "resolved": "https://registry.npmjs.org/babel-plugin-jest-hoist/-/babel-plugin-jest-hoist-29.0.2.tgz",
- "integrity": "sha512-eBr2ynAEFjcebVvu8Ktx580BD1QKCrBG1XwEUTXJe285p9HA/4hOhfWCFRQhTKSyBV0VzjhG7H91Eifz9s29hg==",
+ "version": "29.2.0",
+ "resolved": "https://registry.npmjs.org/babel-plugin-jest-hoist/-/babel-plugin-jest-hoist-29.2.0.tgz",
+ "integrity": "sha512-TnspP2WNiR3GLfCsUNHqeXw0RoQ2f9U5hQ5L3XFpwuO8htQmSrhh8qsB6vi5Yi8+kuynN1yjDjQsPfkebmB6ZA==",
"dev": true,
"dependencies": {
"@babel/template": "^7.3.3",
@@ -2064,12 +2183,12 @@
}
},
"node_modules/babel-preset-jest": {
- "version": "29.0.2",
- "resolved": "https://registry.npmjs.org/babel-preset-jest/-/babel-preset-jest-29.0.2.tgz",
- "integrity": "sha512-BeVXp7rH5TK96ofyEnHjznjLMQ2nAeDJ+QzxKnHAAMs0RgrQsCywjAN8m4mOm5Di0pxU//3AoEeJJrerMH5UeA==",
+ "version": "29.2.0",
+ "resolved": "https://registry.npmjs.org/babel-preset-jest/-/babel-preset-jest-29.2.0.tgz",
+ "integrity": "sha512-z9JmMJppMxNv8N7fNRHvhMg9cvIkMxQBXgFkane3yKVEvEOP+kB50lk8DFRvF9PGqbyXxlmebKWhuDORO8RgdA==",
"dev": true,
"dependencies": {
- "babel-plugin-jest-hoist": "^29.0.2",
+ "babel-plugin-jest-hoist": "^29.2.0",
"babel-preset-current-node-syntax": "^1.0.0"
},
"engines": {
@@ -2430,9 +2549,9 @@
}
},
"node_modules/diff-sequences": {
- "version": "29.0.0",
- "resolved": "https://registry.npmjs.org/diff-sequences/-/diff-sequences-29.0.0.tgz",
- "integrity": "sha512-7Qe/zd1wxSDL4D/X/FPjOMB+ZMDt71W94KYaq05I2l0oQqgXgs7s4ftYYmV38gBSrPz2vcygxfs1xn0FT+rKNA==",
+ "version": "29.2.0",
+ "resolved": "https://registry.npmjs.org/diff-sequences/-/diff-sequences-29.2.0.tgz",
+ "integrity": "sha512-413SY5JpYeSBZxmenGEmCVQ8mCgtFJF0w9PROdaS6z987XC2Pd2GOKqOITLtMftmyFZqgtCOb/QA7/Z3ZXfzIw==",
"dev": true,
"engines": {
"node": "^14.15.0 || ^16.10.0 || >=18.0.0"
@@ -2478,9 +2597,9 @@
"dev": true
},
"node_modules/emittery": {
- "version": "0.10.2",
- "resolved": "https://registry.npmjs.org/emittery/-/emittery-0.10.2.tgz",
- "integrity": "sha512-aITqOwnLanpHLNXZJENbOgjUBeHocD+xsSJmNrjovKBW5HbSpW3d1pEls7GFQPUWXiwG9+0P4GtHfEqC/4M0Iw==",
+ "version": "0.13.1",
+ "resolved": "https://registry.npmjs.org/emittery/-/emittery-0.13.1.tgz",
+ "integrity": "sha512-DeWwawk6r5yR9jFgnDKYt4sLS0LmHJJi3ZOnb5/JdbYwj3nW+FxQnHIjhBKz8YLC7oRNPVM9NQ47I3CVx34eqQ==",
"dev": true,
"engines": {
"node": ">=12"
@@ -2504,12 +2623,6 @@
"is-arrayish": "^0.2.1"
}
},
- "node_modules/error-ex/node_modules/is-arrayish": {
- "version": "0.2.1",
- "resolved": "https://registry.npmjs.org/is-arrayish/-/is-arrayish-0.2.1.tgz",
- "integrity": "sha512-zz06S8t0ozoDXMG+ube26zeCTNXcKIPJZJi8hBrF4idCLms4CG9QtK7qBl1boi5ODzFpjswb5JPmHCbMpjaYzg==",
- "dev": true
- },
"node_modules/es-abstract": {
"version": "1.20.4",
"resolved": "https://registry.npmjs.org/es-abstract/-/es-abstract-1.20.4.tgz",
@@ -2584,14 +2697,15 @@
}
},
"node_modules/eslint": {
- "version": "8.25.0",
- "resolved": "https://registry.npmjs.org/eslint/-/eslint-8.25.0.tgz",
- "integrity": "sha512-DVlJOZ4Pn50zcKW5bYH7GQK/9MsoQG2d5eDH0ebEkE8PbgzTTmtt/VTH9GGJ4BfeZCpBLqFfvsjX35UacUL83A==",
+ "version": "8.26.0",
+ "resolved": "https://registry.npmjs.org/eslint/-/eslint-8.26.0.tgz",
+ "integrity": "sha512-kzJkpaw1Bfwheq4VXUezFriD1GxszX6dUekM7Z3aC2o4hju+tsR/XyTC3RcoSD7jmy9VkPU3+N6YjVU2e96Oyg==",
"dev": true,
"dependencies": {
"@eslint/eslintrc": "^1.3.3",
- "@humanwhocodes/config-array": "^0.10.5",
+ "@humanwhocodes/config-array": "^0.11.6",
"@humanwhocodes/module-importer": "^1.0.1",
+ "@nodelib/fs.walk": "^1.2.8",
"ajv": "^6.10.0",
"chalk": "^4.0.0",
"cross-spawn": "^7.0.2",
@@ -2607,14 +2721,14 @@
"fast-deep-equal": "^3.1.3",
"file-entry-cache": "^6.0.1",
"find-up": "^5.0.0",
- "glob-parent": "^6.0.1",
+ "glob-parent": "^6.0.2",
"globals": "^13.15.0",
- "globby": "^11.1.0",
"grapheme-splitter": "^1.0.4",
"ignore": "^5.2.0",
"import-fresh": "^3.0.0",
"imurmurhash": "^0.1.4",
"is-glob": "^4.0.0",
+ "is-path-inside": "^3.0.3",
"js-sdsl": "^4.1.4",
"js-yaml": "^4.1.0",
"json-stable-stringify-without-jsonify": "^1.0.1",
@@ -2832,9 +2946,9 @@
"dev": true
},
"node_modules/eslint-plugin-jest": {
- "version": "27.1.1",
- "resolved": "https://registry.npmjs.org/eslint-plugin-jest/-/eslint-plugin-jest-27.1.1.tgz",
- "integrity": "sha512-vuSuXGKHHi/UAffIM46QKm4g0tQP+6n52nRxUpMq6x6x9rhnv5WM7ktSu3h9cTnXE4b0Y0ODQTgRlCm9rdRLvg==",
+ "version": "27.1.3",
+ "resolved": "https://registry.npmjs.org/eslint-plugin-jest/-/eslint-plugin-jest-27.1.3.tgz",
+ "integrity": "sha512-7DrIfYRQPa7JQd1Le8G/BJsfYHVUKQdJQ/6vULSp/4NjKZmSMJ/605G2hhScEra++SiH68zPEjLnrO74nHrMLg==",
"dev": true,
"dependencies": {
"@typescript-eslint/utils": "^5.10.0"
@@ -3293,16 +3407,16 @@
}
},
"node_modules/expect": {
- "version": "29.1.2",
- "resolved": "https://registry.npmjs.org/expect/-/expect-29.1.2.tgz",
- "integrity": "sha512-AuAGn1uxva5YBbBlXb+2JPxJRuemZsmlGcapPXWNSBNsQtAULfjioREGBWuI0EOvYUKjDnrCy8PW5Zlr1md5mw==",
+ "version": "29.2.2",
+ "resolved": "https://registry.npmjs.org/expect/-/expect-29.2.2.tgz",
+ "integrity": "sha512-hE09QerxZ5wXiOhqkXy5d2G9ar+EqOyifnCXCpMNu+vZ6DG9TJ6CO2c2kPDSLqERTTWrO7OZj8EkYHQqSd78Yw==",
"dev": true,
"dependencies": {
- "@jest/expect-utils": "^29.1.2",
- "jest-get-type": "^29.0.0",
- "jest-matcher-utils": "^29.1.2",
- "jest-message-util": "^29.1.2",
- "jest-util": "^29.1.2"
+ "@jest/expect-utils": "^29.2.2",
+ "jest-get-type": "^29.2.0",
+ "jest-matcher-utils": "^29.2.2",
+ "jest-message-util": "^29.2.1",
+ "jest-util": "^29.2.1"
},
"engines": {
"node": "^14.15.0 || ^16.10.0 || >=18.0.0"
@@ -3884,6 +3998,12 @@
"node": ">= 0.4"
}
},
+ "node_modules/is-arrayish": {
+ "version": "0.2.1",
+ "resolved": "https://registry.npmjs.org/is-arrayish/-/is-arrayish-0.2.1.tgz",
+ "integrity": "sha512-zz06S8t0ozoDXMG+ube26zeCTNXcKIPJZJi8hBrF4idCLms4CG9QtK7qBl1boi5ODzFpjswb5JPmHCbMpjaYzg==",
+ "dev": true
+ },
"node_modules/is-bigint": {
"version": "1.0.4",
"resolved": "https://registry.npmjs.org/is-bigint/-/is-bigint-1.0.4.tgz",
@@ -4026,6 +4146,15 @@
"url": "https://github.com/sponsors/ljharb"
}
},
+ "node_modules/is-path-inside": {
+ "version": "3.0.3",
+ "resolved": "https://registry.npmjs.org/is-path-inside/-/is-path-inside-3.0.3.tgz",
+ "integrity": "sha512-Fd4gABb+ycGAmKou8eMftCupSir5lRxqf4aD/vd0cD2qc4HL07OjCeuHMr8Ro4CoMaeCKDB0/ECBOVWjTwUvPQ==",
+ "dev": true,
+ "engines": {
+ "node": ">=8"
+ }
+ },
"node_modules/is-plain-object": {
"version": "5.0.0",
"resolved": "https://registry.npmjs.org/is-plain-object/-/is-plain-object-5.0.0.tgz",
@@ -4189,15 +4318,15 @@
}
},
"node_modules/jest": {
- "version": "29.1.2",
- "resolved": "https://registry.npmjs.org/jest/-/jest-29.1.2.tgz",
- "integrity": "sha512-5wEIPpCezgORnqf+rCaYD1SK+mNN7NsstWzIsuvsnrhR/hSxXWd82oI7DkrbJ+XTD28/eG8SmxdGvukrGGK6Tw==",
+ "version": "29.2.2",
+ "resolved": "https://registry.npmjs.org/jest/-/jest-29.2.2.tgz",
+ "integrity": "sha512-r+0zCN9kUqoON6IjDdjbrsWobXM/09Nd45kIPRD8kloaRh1z5ZCMdVsgLXGxmlL7UpAJsvCYOQNO+NjvG/gqiQ==",
"dev": true,
"dependencies": {
- "@jest/core": "^29.1.2",
- "@jest/types": "^29.1.2",
+ "@jest/core": "^29.2.2",
+ "@jest/types": "^29.2.1",
"import-local": "^3.0.2",
- "jest-cli": "^29.1.2"
+ "jest-cli": "^29.2.2"
},
"bin": {
"jest": "bin/jest.js"
@@ -4215,9 +4344,9 @@
}
},
"node_modules/jest-changed-files": {
- "version": "29.0.0",
- "resolved": "https://registry.npmjs.org/jest-changed-files/-/jest-changed-files-29.0.0.tgz",
- "integrity": "sha512-28/iDMDrUpGoCitTURuDqUzWQoWmOmOKOFST1mi2lwh62X4BFf6khgH3uSuo1e49X/UDjuApAj3w0wLOex4VPQ==",
+ "version": "29.2.0",
+ "resolved": "https://registry.npmjs.org/jest-changed-files/-/jest-changed-files-29.2.0.tgz",
+ "integrity": "sha512-qPVmLLyBmvF5HJrY7krDisx6Voi8DmlV3GZYX0aFNbaQsZeoz1hfxcCMbqDGuQCxU1dJy9eYc2xscE8QrCCYaA==",
"dev": true,
"dependencies": {
"execa": "^5.0.0",
@@ -4243,28 +4372,28 @@
}
},
"node_modules/jest-circus": {
- "version": "29.1.2",
- "resolved": "https://registry.npmjs.org/jest-circus/-/jest-circus-29.1.2.tgz",
- "integrity": "sha512-ajQOdxY6mT9GtnfJRZBRYS7toNIJayiiyjDyoZcnvPRUPwJ58JX0ci0PKAKUo2C1RyzlHw0jabjLGKksO42JGA==",
+ "version": "29.2.2",
+ "resolved": "https://registry.npmjs.org/jest-circus/-/jest-circus-29.2.2.tgz",
+ "integrity": "sha512-upSdWxx+Mh4DV7oueuZndJ1NVdgtTsqM4YgywHEx05UMH5nxxA2Qu9T9T9XVuR021XxqSoaKvSmmpAbjwwwxMw==",
"dev": true,
"dependencies": {
- "@jest/environment": "^29.1.2",
- "@jest/expect": "^29.1.2",
- "@jest/test-result": "^29.1.2",
- "@jest/types": "^29.1.2",
+ "@jest/environment": "^29.2.2",
+ "@jest/expect": "^29.2.2",
+ "@jest/test-result": "^29.2.1",
+ "@jest/types": "^29.2.1",
"@types/node": "*",
"chalk": "^4.0.0",
"co": "^4.6.0",
"dedent": "^0.7.0",
"is-generator-fn": "^2.0.0",
- "jest-each": "^29.1.2",
- "jest-matcher-utils": "^29.1.2",
- "jest-message-util": "^29.1.2",
- "jest-runtime": "^29.1.2",
- "jest-snapshot": "^29.1.2",
- "jest-util": "^29.1.2",
+ "jest-each": "^29.2.1",
+ "jest-matcher-utils": "^29.2.2",
+ "jest-message-util": "^29.2.1",
+ "jest-runtime": "^29.2.2",
+ "jest-snapshot": "^29.2.2",
+ "jest-util": "^29.2.1",
"p-limit": "^3.1.0",
- "pretty-format": "^29.1.2",
+ "pretty-format": "^29.2.1",
"slash": "^3.0.0",
"stack-utils": "^2.0.3"
},
@@ -4288,21 +4417,21 @@
}
},
"node_modules/jest-cli": {
- "version": "29.1.2",
- "resolved": "https://registry.npmjs.org/jest-cli/-/jest-cli-29.1.2.tgz",
- "integrity": "sha512-vsvBfQ7oS2o4MJdAH+4u9z76Vw5Q8WBQF5MchDbkylNknZdrPTX1Ix7YRJyTlOWqRaS7ue/cEAn+E4V1MWyMzw==",
+ "version": "29.2.2",
+ "resolved": "https://registry.npmjs.org/jest-cli/-/jest-cli-29.2.2.tgz",
+ "integrity": "sha512-R45ygnnb2CQOfd8rTPFR+/fls0d+1zXS6JPYTBBrnLPrhr58SSuPTiA5Tplv8/PXpz4zXR/AYNxmwIj6J6nrvg==",
"dev": true,
"dependencies": {
- "@jest/core": "^29.1.2",
- "@jest/test-result": "^29.1.2",
- "@jest/types": "^29.1.2",
+ "@jest/core": "^29.2.2",
+ "@jest/test-result": "^29.2.1",
+ "@jest/types": "^29.2.1",
"chalk": "^4.0.0",
"exit": "^0.1.2",
"graceful-fs": "^4.2.9",
"import-local": "^3.0.2",
- "jest-config": "^29.1.2",
- "jest-util": "^29.1.2",
- "jest-validate": "^29.1.2",
+ "jest-config": "^29.2.2",
+ "jest-util": "^29.2.1",
+ "jest-validate": "^29.2.2",
"prompts": "^2.0.1",
"yargs": "^17.3.1"
},
@@ -4322,31 +4451,31 @@
}
},
"node_modules/jest-config": {
- "version": "29.1.2",
- "resolved": "https://registry.npmjs.org/jest-config/-/jest-config-29.1.2.tgz",
- "integrity": "sha512-EC3Zi86HJUOz+2YWQcJYQXlf0zuBhJoeyxLM6vb6qJsVmpP7KcCP1JnyF0iaqTaXdBP8Rlwsvs7hnKWQWWLwwA==",
+ "version": "29.2.2",
+ "resolved": "https://registry.npmjs.org/jest-config/-/jest-config-29.2.2.tgz",
+ "integrity": "sha512-Q0JX54a5g1lP63keRfKR8EuC7n7wwny2HoTRDb8cx78IwQOiaYUVZAdjViY3WcTxpR02rPUpvNVmZ1fkIlZPcw==",
"dev": true,
"dependencies": {
"@babel/core": "^7.11.6",
- "@jest/test-sequencer": "^29.1.2",
- "@jest/types": "^29.1.2",
- "babel-jest": "^29.1.2",
+ "@jest/test-sequencer": "^29.2.2",
+ "@jest/types": "^29.2.1",
+ "babel-jest": "^29.2.2",
"chalk": "^4.0.0",
"ci-info": "^3.2.0",
"deepmerge": "^4.2.2",
"glob": "^7.1.3",
"graceful-fs": "^4.2.9",
- "jest-circus": "^29.1.2",
- "jest-environment-node": "^29.1.2",
- "jest-get-type": "^29.0.0",
- "jest-regex-util": "^29.0.0",
- "jest-resolve": "^29.1.2",
- "jest-runner": "^29.1.2",
- "jest-util": "^29.1.2",
- "jest-validate": "^29.1.2",
+ "jest-circus": "^29.2.2",
+ "jest-environment-node": "^29.2.2",
+ "jest-get-type": "^29.2.0",
+ "jest-regex-util": "^29.2.0",
+ "jest-resolve": "^29.2.2",
+ "jest-runner": "^29.2.2",
+ "jest-util": "^29.2.1",
+ "jest-validate": "^29.2.2",
"micromatch": "^4.0.4",
"parse-json": "^5.2.0",
- "pretty-format": "^29.1.2",
+ "pretty-format": "^29.2.1",
"slash": "^3.0.0",
"strip-json-comments": "^3.1.1"
},
@@ -4367,24 +4496,24 @@
}
},
"node_modules/jest-diff": {
- "version": "29.1.2",
- "resolved": "https://registry.npmjs.org/jest-diff/-/jest-diff-29.1.2.tgz",
- "integrity": "sha512-4GQts0aUopVvecIT4IwD/7xsBaMhKTYoM4/njE/aVw9wpw+pIUVp8Vab/KnSzSilr84GnLBkaP3JLDnQYCKqVQ==",
+ "version": "29.2.1",
+ "resolved": "https://registry.npmjs.org/jest-diff/-/jest-diff-29.2.1.tgz",
+ "integrity": "sha512-gfh/SMNlQmP3MOUgdzxPOd4XETDJifADpT937fN1iUGz+9DgOu2eUPHH25JDkLVcLwwqxv3GzVyK4VBUr9fjfA==",
"dev": true,
"dependencies": {
"chalk": "^4.0.0",
- "diff-sequences": "^29.0.0",
- "jest-get-type": "^29.0.0",
- "pretty-format": "^29.1.2"
+ "diff-sequences": "^29.2.0",
+ "jest-get-type": "^29.2.0",
+ "pretty-format": "^29.2.1"
},
"engines": {
"node": "^14.15.0 || ^16.10.0 || >=18.0.0"
}
},
"node_modules/jest-docblock": {
- "version": "29.0.0",
- "resolved": "https://registry.npmjs.org/jest-docblock/-/jest-docblock-29.0.0.tgz",
- "integrity": "sha512-s5Kpra/kLzbqu9dEjov30kj1n4tfu3e7Pl8v+f8jOkeWNqM6Ds8jRaJfZow3ducoQUrf2Z4rs2N5S3zXnb83gw==",
+ "version": "29.2.0",
+ "resolved": "https://registry.npmjs.org/jest-docblock/-/jest-docblock-29.2.0.tgz",
+ "integrity": "sha512-bkxUsxTgWQGbXV5IENmfiIuqZhJcyvF7tU4zJ/7ioTutdz4ToB5Yx6JOFBpgI+TphRY4lhOyCWGNH/QFQh5T6A==",
"dev": true,
"dependencies": {
"detect-newline": "^3.0.0"
@@ -4394,62 +4523,62 @@
}
},
"node_modules/jest-each": {
- "version": "29.1.2",
- "resolved": "https://registry.npmjs.org/jest-each/-/jest-each-29.1.2.tgz",
- "integrity": "sha512-AmTQp9b2etNeEwMyr4jc0Ql/LIX/dhbgP21gHAizya2X6rUspHn2gysMXaj6iwWuOJ2sYRgP8c1P4cXswgvS1A==",
+ "version": "29.2.1",
+ "resolved": "https://registry.npmjs.org/jest-each/-/jest-each-29.2.1.tgz",
+ "integrity": "sha512-sGP86H/CpWHMyK3qGIGFCgP6mt+o5tu9qG4+tobl0LNdgny0aitLXs9/EBacLy3Bwqy+v4uXClqJgASJWcruYw==",
"dev": true,
"dependencies": {
- "@jest/types": "^29.1.2",
+ "@jest/types": "^29.2.1",
"chalk": "^4.0.0",
- "jest-get-type": "^29.0.0",
- "jest-util": "^29.1.2",
- "pretty-format": "^29.1.2"
+ "jest-get-type": "^29.2.0",
+ "jest-util": "^29.2.1",
+ "pretty-format": "^29.2.1"
},
"engines": {
"node": "^14.15.0 || ^16.10.0 || >=18.0.0"
}
},
"node_modules/jest-environment-node": {
- "version": "29.1.2",
- "resolved": "https://registry.npmjs.org/jest-environment-node/-/jest-environment-node-29.1.2.tgz",
- "integrity": "sha512-C59yVbdpY8682u6k/lh8SUMDJPbOyCHOTgLVVi1USWFxtNV+J8fyIwzkg+RJIVI30EKhKiAGNxYaFr3z6eyNhQ==",
+ "version": "29.2.2",
+ "resolved": "https://registry.npmjs.org/jest-environment-node/-/jest-environment-node-29.2.2.tgz",
+ "integrity": "sha512-B7qDxQjkIakQf+YyrqV5dICNs7tlCO55WJ4OMSXsqz1lpI/0PmeuXdx2F7eU8rnPbRkUR/fItSSUh0jvE2y/tw==",
"dev": true,
"dependencies": {
- "@jest/environment": "^29.1.2",
- "@jest/fake-timers": "^29.1.2",
- "@jest/types": "^29.1.2",
+ "@jest/environment": "^29.2.2",
+ "@jest/fake-timers": "^29.2.2",
+ "@jest/types": "^29.2.1",
"@types/node": "*",
- "jest-mock": "^29.1.2",
- "jest-util": "^29.1.2"
+ "jest-mock": "^29.2.2",
+ "jest-util": "^29.2.1"
},
"engines": {
"node": "^14.15.0 || ^16.10.0 || >=18.0.0"
}
},
"node_modules/jest-get-type": {
- "version": "29.0.0",
- "resolved": "https://registry.npmjs.org/jest-get-type/-/jest-get-type-29.0.0.tgz",
- "integrity": "sha512-83X19z/HuLKYXYHskZlBAShO7UfLFXu/vWajw9ZNJASN32li8yHMaVGAQqxFW1RCFOkB7cubaL6FaJVQqqJLSw==",
+ "version": "29.2.0",
+ "resolved": "https://registry.npmjs.org/jest-get-type/-/jest-get-type-29.2.0.tgz",
+ "integrity": "sha512-uXNJlg8hKFEnDgFsrCjznB+sTxdkuqiCL6zMgA75qEbAJjJYTs9XPrvDctrEig2GDow22T/LvHgO57iJhXB/UA==",
"dev": true,
"engines": {
"node": "^14.15.0 || ^16.10.0 || >=18.0.0"
}
},
"node_modules/jest-haste-map": {
- "version": "29.1.2",
- "resolved": "https://registry.npmjs.org/jest-haste-map/-/jest-haste-map-29.1.2.tgz",
- "integrity": "sha512-xSjbY8/BF11Jh3hGSPfYTa/qBFrm3TPM7WU8pU93m2gqzORVLkHFWvuZmFsTEBPRKndfewXhMOuzJNHyJIZGsw==",
+ "version": "29.2.1",
+ "resolved": "https://registry.npmjs.org/jest-haste-map/-/jest-haste-map-29.2.1.tgz",
+ "integrity": "sha512-wF460rAFmYc6ARcCFNw4MbGYQjYkvjovb9GBT+W10Um8q5nHq98jD6fHZMDMO3tA56S8XnmNkM8GcA8diSZfnA==",
"dev": true,
"dependencies": {
- "@jest/types": "^29.1.2",
+ "@jest/types": "^29.2.1",
"@types/graceful-fs": "^4.1.3",
"@types/node": "*",
"anymatch": "^3.0.3",
"fb-watchman": "^2.0.0",
"graceful-fs": "^4.2.9",
- "jest-regex-util": "^29.0.0",
- "jest-util": "^29.1.2",
- "jest-worker": "^29.1.2",
+ "jest-regex-util": "^29.2.0",
+ "jest-util": "^29.2.1",
+ "jest-worker": "^29.2.1",
"micromatch": "^4.0.4",
"walker": "^1.0.8"
},
@@ -4461,46 +4590,46 @@
}
},
"node_modules/jest-leak-detector": {
- "version": "29.1.2",
- "resolved": "https://registry.npmjs.org/jest-leak-detector/-/jest-leak-detector-29.1.2.tgz",
- "integrity": "sha512-TG5gAZJpgmZtjb6oWxBLf2N6CfQ73iwCe6cofu/Uqv9iiAm6g502CAnGtxQaTfpHECBdVEMRBhomSXeLnoKjiQ==",
+ "version": "29.2.1",
+ "resolved": "https://registry.npmjs.org/jest-leak-detector/-/jest-leak-detector-29.2.1.tgz",
+ "integrity": "sha512-1YvSqYoiurxKOJtySc+CGVmw/e1v4yNY27BjWTVzp0aTduQeA7pdieLiW05wTYG/twlKOp2xS/pWuikQEmklug==",
"dev": true,
"dependencies": {
- "jest-get-type": "^29.0.0",
- "pretty-format": "^29.1.2"
+ "jest-get-type": "^29.2.0",
+ "pretty-format": "^29.2.1"
},
"engines": {
"node": "^14.15.0 || ^16.10.0 || >=18.0.0"
}
},
"node_modules/jest-matcher-utils": {
- "version": "29.1.2",
- "resolved": "https://registry.npmjs.org/jest-matcher-utils/-/jest-matcher-utils-29.1.2.tgz",
- "integrity": "sha512-MV5XrD3qYSW2zZSHRRceFzqJ39B2z11Qv0KPyZYxnzDHFeYZGJlgGi0SW+IXSJfOewgJp/Km/7lpcFT+cgZypw==",
+ "version": "29.2.2",
+ "resolved": "https://registry.npmjs.org/jest-matcher-utils/-/jest-matcher-utils-29.2.2.tgz",
+ "integrity": "sha512-4DkJ1sDPT+UX2MR7Y3od6KtvRi9Im1ZGLGgdLFLm4lPexbTaCgJW5NN3IOXlQHF7NSHY/VHhflQ+WoKtD/vyCw==",
"dev": true,
"dependencies": {
"chalk": "^4.0.0",
- "jest-diff": "^29.1.2",
- "jest-get-type": "^29.0.0",
- "pretty-format": "^29.1.2"
+ "jest-diff": "^29.2.1",
+ "jest-get-type": "^29.2.0",
+ "pretty-format": "^29.2.1"
},
"engines": {
"node": "^14.15.0 || ^16.10.0 || >=18.0.0"
}
},
"node_modules/jest-message-util": {
- "version": "29.1.2",
- "resolved": "https://registry.npmjs.org/jest-message-util/-/jest-message-util-29.1.2.tgz",
- "integrity": "sha512-9oJ2Os+Qh6IlxLpmvshVbGUiSkZVc2FK+uGOm6tghafnB2RyjKAxMZhtxThRMxfX1J1SOMhTn9oK3/MutRWQJQ==",
+ "version": "29.2.1",
+ "resolved": "https://registry.npmjs.org/jest-message-util/-/jest-message-util-29.2.1.tgz",
+ "integrity": "sha512-Dx5nEjw9V8C1/Yj10S/8ivA8F439VS8vTq1L7hEgwHFn9ovSKNpYW/kwNh7UglaEgXO42XxzKJB+2x0nSglFVw==",
"dev": true,
"dependencies": {
"@babel/code-frame": "^7.12.13",
- "@jest/types": "^29.1.2",
+ "@jest/types": "^29.2.1",
"@types/stack-utils": "^2.0.0",
"chalk": "^4.0.0",
"graceful-fs": "^4.2.9",
"micromatch": "^4.0.4",
- "pretty-format": "^29.1.2",
+ "pretty-format": "^29.2.1",
"slash": "^3.0.0",
"stack-utils": "^2.0.3"
},
@@ -4509,14 +4638,14 @@
}
},
"node_modules/jest-mock": {
- "version": "29.1.2",
- "resolved": "https://registry.npmjs.org/jest-mock/-/jest-mock-29.1.2.tgz",
- "integrity": "sha512-PFDAdjjWbjPUtQPkQufvniXIS3N9Tv7tbibePEjIIprzjgo0qQlyUiVMrT4vL8FaSJo1QXifQUOuPH3HQC/aMA==",
+ "version": "29.2.2",
+ "resolved": "https://registry.npmjs.org/jest-mock/-/jest-mock-29.2.2.tgz",
+ "integrity": "sha512-1leySQxNAnivvbcx0sCB37itu8f4OX2S/+gxLAV4Z62shT4r4dTG9tACDywUAEZoLSr36aYUTsVp3WKwWt4PMQ==",
"dev": true,
"dependencies": {
- "@jest/types": "^29.1.2",
+ "@jest/types": "^29.2.1",
"@types/node": "*",
- "jest-util": "^29.1.2"
+ "jest-util": "^29.2.1"
},
"engines": {
"node": "^14.15.0 || ^16.10.0 || >=18.0.0"
@@ -4540,26 +4669,26 @@
}
},
"node_modules/jest-regex-util": {
- "version": "29.0.0",
- "resolved": "https://registry.npmjs.org/jest-regex-util/-/jest-regex-util-29.0.0.tgz",
- "integrity": "sha512-BV7VW7Sy0fInHWN93MMPtlClweYv2qrSCwfeFWmpribGZtQPWNvRSq9XOVgOEjU1iBGRKXUZil0o2AH7Iy9Lug==",
+ "version": "29.2.0",
+ "resolved": "https://registry.npmjs.org/jest-regex-util/-/jest-regex-util-29.2.0.tgz",
+ "integrity": "sha512-6yXn0kg2JXzH30cr2NlThF+70iuO/3irbaB4mh5WyqNIvLLP+B6sFdluO1/1RJmslyh/f9osnefECflHvTbwVA==",
"dev": true,
"engines": {
"node": "^14.15.0 || ^16.10.0 || >=18.0.0"
}
},
"node_modules/jest-resolve": {
- "version": "29.1.2",
- "resolved": "https://registry.npmjs.org/jest-resolve/-/jest-resolve-29.1.2.tgz",
- "integrity": "sha512-7fcOr+k7UYSVRJYhSmJHIid3AnDBcLQX3VmT9OSbPWsWz1MfT7bcoerMhADKGvKCoMpOHUQaDHtQoNp/P9JMGg==",
+ "version": "29.2.2",
+ "resolved": "https://registry.npmjs.org/jest-resolve/-/jest-resolve-29.2.2.tgz",
+ "integrity": "sha512-3gaLpiC3kr14rJR3w7vWh0CBX2QAhfpfiQTwrFPvVrcHe5VUBtIXaR004aWE/X9B2CFrITOQAp5gxLONGrk6GA==",
"dev": true,
"dependencies": {
"chalk": "^4.0.0",
"graceful-fs": "^4.2.9",
- "jest-haste-map": "^29.1.2",
+ "jest-haste-map": "^29.2.1",
"jest-pnp-resolver": "^1.2.2",
- "jest-util": "^29.1.2",
- "jest-validate": "^29.1.2",
+ "jest-util": "^29.2.1",
+ "jest-validate": "^29.2.2",
"resolve": "^1.20.0",
"resolve.exports": "^1.1.0",
"slash": "^3.0.0"
@@ -4569,43 +4698,43 @@
}
},
"node_modules/jest-resolve-dependencies": {
- "version": "29.1.2",
- "resolved": "https://registry.npmjs.org/jest-resolve-dependencies/-/jest-resolve-dependencies-29.1.2.tgz",
- "integrity": "sha512-44yYi+yHqNmH3OoWZvPgmeeiwKxhKV/0CfrzaKLSkZG9gT973PX8i+m8j6pDrTYhhHoiKfF3YUFg/6AeuHw4HQ==",
+ "version": "29.2.2",
+ "resolved": "https://registry.npmjs.org/jest-resolve-dependencies/-/jest-resolve-dependencies-29.2.2.tgz",
+ "integrity": "sha512-wWOmgbkbIC2NmFsq8Lb+3EkHuW5oZfctffTGvwsA4JcJ1IRk8b2tg+hz44f0lngvRTeHvp3Kyix9ACgudHH9aQ==",
"dev": true,
"dependencies": {
- "jest-regex-util": "^29.0.0",
- "jest-snapshot": "^29.1.2"
+ "jest-regex-util": "^29.2.0",
+ "jest-snapshot": "^29.2.2"
},
"engines": {
"node": "^14.15.0 || ^16.10.0 || >=18.0.0"
}
},
"node_modules/jest-runner": {
- "version": "29.1.2",
- "resolved": "https://registry.npmjs.org/jest-runner/-/jest-runner-29.1.2.tgz",
- "integrity": "sha512-yy3LEWw8KuBCmg7sCGDIqKwJlULBuNIQa2eFSVgVASWdXbMYZ9H/X0tnXt70XFoGf92W2sOQDOIFAA6f2BG04Q==",
+ "version": "29.2.2",
+ "resolved": "https://registry.npmjs.org/jest-runner/-/jest-runner-29.2.2.tgz",
+ "integrity": "sha512-1CpUxXDrbsfy9Hr9/1zCUUhT813kGGK//58HeIw/t8fa/DmkecEwZSWlb1N/xDKXg3uCFHQp1GCvlSClfImMxg==",
"dev": true,
"dependencies": {
- "@jest/console": "^29.1.2",
- "@jest/environment": "^29.1.2",
- "@jest/test-result": "^29.1.2",
- "@jest/transform": "^29.1.2",
- "@jest/types": "^29.1.2",
+ "@jest/console": "^29.2.1",
+ "@jest/environment": "^29.2.2",
+ "@jest/test-result": "^29.2.1",
+ "@jest/transform": "^29.2.2",
+ "@jest/types": "^29.2.1",
"@types/node": "*",
"chalk": "^4.0.0",
- "emittery": "^0.10.2",
+ "emittery": "^0.13.1",
"graceful-fs": "^4.2.9",
- "jest-docblock": "^29.0.0",
- "jest-environment-node": "^29.1.2",
- "jest-haste-map": "^29.1.2",
- "jest-leak-detector": "^29.1.2",
- "jest-message-util": "^29.1.2",
- "jest-resolve": "^29.1.2",
- "jest-runtime": "^29.1.2",
- "jest-util": "^29.1.2",
- "jest-watcher": "^29.1.2",
- "jest-worker": "^29.1.2",
+ "jest-docblock": "^29.2.0",
+ "jest-environment-node": "^29.2.2",
+ "jest-haste-map": "^29.2.1",
+ "jest-leak-detector": "^29.2.1",
+ "jest-message-util": "^29.2.1",
+ "jest-resolve": "^29.2.2",
+ "jest-runtime": "^29.2.2",
+ "jest-util": "^29.2.1",
+ "jest-watcher": "^29.2.2",
+ "jest-worker": "^29.2.1",
"p-limit": "^3.1.0",
"source-map-support": "0.5.13"
},
@@ -4629,31 +4758,31 @@
}
},
"node_modules/jest-runtime": {
- "version": "29.1.2",
- "resolved": "https://registry.npmjs.org/jest-runtime/-/jest-runtime-29.1.2.tgz",
- "integrity": "sha512-jr8VJLIf+cYc+8hbrpt412n5jX3tiXmpPSYTGnwcvNemY+EOuLNiYnHJ3Kp25rkaAcTWOEI4ZdOIQcwYcXIAZw==",
- "dev": true,
- "dependencies": {
- "@jest/environment": "^29.1.2",
- "@jest/fake-timers": "^29.1.2",
- "@jest/globals": "^29.1.2",
- "@jest/source-map": "^29.0.0",
- "@jest/test-result": "^29.1.2",
- "@jest/transform": "^29.1.2",
- "@jest/types": "^29.1.2",
+ "version": "29.2.2",
+ "resolved": "https://registry.npmjs.org/jest-runtime/-/jest-runtime-29.2.2.tgz",
+ "integrity": "sha512-TpR1V6zRdLynckKDIQaY41od4o0xWL+KOPUCZvJK2bu5P1UXhjobt5nJ2ICNeIxgyj9NGkO0aWgDqYPVhDNKjA==",
+ "dev": true,
+ "dependencies": {
+ "@jest/environment": "^29.2.2",
+ "@jest/fake-timers": "^29.2.2",
+ "@jest/globals": "^29.2.2",
+ "@jest/source-map": "^29.2.0",
+ "@jest/test-result": "^29.2.1",
+ "@jest/transform": "^29.2.2",
+ "@jest/types": "^29.2.1",
"@types/node": "*",
"chalk": "^4.0.0",
"cjs-module-lexer": "^1.0.0",
"collect-v8-coverage": "^1.0.0",
"glob": "^7.1.3",
"graceful-fs": "^4.2.9",
- "jest-haste-map": "^29.1.2",
- "jest-message-util": "^29.1.2",
- "jest-mock": "^29.1.2",
- "jest-regex-util": "^29.0.0",
- "jest-resolve": "^29.1.2",
- "jest-snapshot": "^29.1.2",
- "jest-util": "^29.1.2",
+ "jest-haste-map": "^29.2.1",
+ "jest-message-util": "^29.2.1",
+ "jest-mock": "^29.2.2",
+ "jest-regex-util": "^29.2.0",
+ "jest-resolve": "^29.2.2",
+ "jest-snapshot": "^29.2.2",
+ "jest-util": "^29.2.1",
"slash": "^3.0.0",
"strip-bom": "^4.0.0"
},
@@ -4671,9 +4800,9 @@
}
},
"node_modules/jest-snapshot": {
- "version": "29.1.2",
- "resolved": "https://registry.npmjs.org/jest-snapshot/-/jest-snapshot-29.1.2.tgz",
- "integrity": "sha512-rYFomGpVMdBlfwTYxkUp3sjD6usptvZcONFYNqVlaz4EpHPnDvlWjvmOQ9OCSNKqYZqLM2aS3wq01tWujLg7gg==",
+ "version": "29.2.2",
+ "resolved": "https://registry.npmjs.org/jest-snapshot/-/jest-snapshot-29.2.2.tgz",
+ "integrity": "sha512-GfKJrpZ5SMqhli3NJ+mOspDqtZfJBryGA8RIBxF+G+WbDoC7HCqKaeAss4Z/Sab6bAW11ffasx8/vGsj83jyjA==",
"dev": true,
"dependencies": {
"@babel/core": "^7.11.6",
@@ -4682,23 +4811,23 @@
"@babel/plugin-syntax-typescript": "^7.7.2",
"@babel/traverse": "^7.7.2",
"@babel/types": "^7.3.3",
- "@jest/expect-utils": "^29.1.2",
- "@jest/transform": "^29.1.2",
- "@jest/types": "^29.1.2",
+ "@jest/expect-utils": "^29.2.2",
+ "@jest/transform": "^29.2.2",
+ "@jest/types": "^29.2.1",
"@types/babel__traverse": "^7.0.6",
"@types/prettier": "^2.1.5",
"babel-preset-current-node-syntax": "^1.0.0",
"chalk": "^4.0.0",
- "expect": "^29.1.2",
+ "expect": "^29.2.2",
"graceful-fs": "^4.2.9",
- "jest-diff": "^29.1.2",
- "jest-get-type": "^29.0.0",
- "jest-haste-map": "^29.1.2",
- "jest-matcher-utils": "^29.1.2",
- "jest-message-util": "^29.1.2",
- "jest-util": "^29.1.2",
+ "jest-diff": "^29.2.1",
+ "jest-get-type": "^29.2.0",
+ "jest-haste-map": "^29.2.1",
+ "jest-matcher-utils": "^29.2.2",
+ "jest-message-util": "^29.2.1",
+ "jest-util": "^29.2.1",
"natural-compare": "^1.4.0",
- "pretty-format": "^29.1.2",
+ "pretty-format": "^29.2.1",
"semver": "^7.3.5"
},
"engines": {
@@ -4721,12 +4850,12 @@
}
},
"node_modules/jest-util": {
- "version": "29.1.2",
- "resolved": "https://registry.npmjs.org/jest-util/-/jest-util-29.1.2.tgz",
- "integrity": "sha512-vPCk9F353i0Ymx3WQq3+a4lZ07NXu9Ca8wya6o4Fe4/aO1e1awMMprZ3woPFpKwghEOW+UXgd15vVotuNN9ONQ==",
+ "version": "29.2.1",
+ "resolved": "https://registry.npmjs.org/jest-util/-/jest-util-29.2.1.tgz",
+ "integrity": "sha512-P5VWDj25r7kj7kl4pN2rG/RN2c1TLfYYYZYULnS/35nFDjBai+hBeo3MDrYZS7p6IoY3YHZnt2vq4L6mKnLk0g==",
"dev": true,
"dependencies": {
- "@jest/types": "^29.1.2",
+ "@jest/types": "^29.2.1",
"@types/node": "*",
"chalk": "^4.0.0",
"ci-info": "^3.2.0",
@@ -4738,17 +4867,17 @@
}
},
"node_modules/jest-validate": {
- "version": "29.1.2",
- "resolved": "https://registry.npmjs.org/jest-validate/-/jest-validate-29.1.2.tgz",
- "integrity": "sha512-k71pOslNlV8fVyI+mEySy2pq9KdXdgZtm7NHrBX8LghJayc3wWZH0Yr0mtYNGaCU4F1OLPXRkwZR0dBm/ClshA==",
+ "version": "29.2.2",
+ "resolved": "https://registry.npmjs.org/jest-validate/-/jest-validate-29.2.2.tgz",
+ "integrity": "sha512-eJXATaKaSnOuxNfs8CLHgdABFgUrd0TtWS8QckiJ4L/QVDF4KVbZFBBOwCBZHOS0Rc5fOxqngXeGXE3nGQkpQA==",
"dev": true,
"dependencies": {
- "@jest/types": "^29.1.2",
+ "@jest/types": "^29.2.1",
"camelcase": "^6.2.0",
"chalk": "^4.0.0",
- "jest-get-type": "^29.0.0",
+ "jest-get-type": "^29.2.0",
"leven": "^3.1.0",
- "pretty-format": "^29.1.2"
+ "pretty-format": "^29.2.1"
},
"engines": {
"node": "^14.15.0 || ^16.10.0 || >=18.0.0"
@@ -4767,18 +4896,18 @@
}
},
"node_modules/jest-watcher": {
- "version": "29.1.2",
- "resolved": "https://registry.npmjs.org/jest-watcher/-/jest-watcher-29.1.2.tgz",
- "integrity": "sha512-6JUIUKVdAvcxC6bM8/dMgqY2N4lbT+jZVsxh0hCJRbwkIEnbr/aPjMQ28fNDI5lB51Klh00MWZZeVf27KBUj5w==",
+ "version": "29.2.2",
+ "resolved": "https://registry.npmjs.org/jest-watcher/-/jest-watcher-29.2.2.tgz",
+ "integrity": "sha512-j2otfqh7mOvMgN2WlJ0n7gIx9XCMWntheYGlBK7+5g3b1Su13/UAK7pdKGyd4kDlrLwtH2QPvRv5oNIxWvsJ1w==",
"dev": true,
"dependencies": {
- "@jest/test-result": "^29.1.2",
- "@jest/types": "^29.1.2",
+ "@jest/test-result": "^29.2.1",
+ "@jest/types": "^29.2.1",
"@types/node": "*",
"ansi-escapes": "^4.2.1",
"chalk": "^4.0.0",
- "emittery": "^0.10.2",
- "jest-util": "^29.1.2",
+ "emittery": "^0.13.1",
+ "jest-util": "^29.2.1",
"string-length": "^4.0.1"
},
"engines": {
@@ -4786,13 +4915,13 @@
}
},
"node_modules/jest-worker": {
- "version": "29.1.2",
- "resolved": "https://registry.npmjs.org/jest-worker/-/jest-worker-29.1.2.tgz",
- "integrity": "sha512-AdTZJxKjTSPHbXT/AIOjQVmoFx0LHFcVabWu0sxI7PAy7rFf8c0upyvgBKgguVXdM4vY74JdwkyD4hSmpTW8jA==",
+ "version": "29.2.1",
+ "resolved": "https://registry.npmjs.org/jest-worker/-/jest-worker-29.2.1.tgz",
+ "integrity": "sha512-ROHTZ+oj7sBrgtv46zZ84uWky71AoYi0vEV9CdEtc1FQunsoAGe5HbQmW76nI5QWdvECVPrSi1MCVUmizSavMg==",
"dev": true,
"dependencies": {
"@types/node": "*",
- "jest-util": "^29.1.2",
+ "jest-util": "^29.2.1",
"merge-stream": "^2.0.0",
"supports-color": "^8.0.0"
},
@@ -5420,9 +5549,9 @@
}
},
"node_modules/pretty-format": {
- "version": "29.1.2",
- "resolved": "https://registry.npmjs.org/pretty-format/-/pretty-format-29.1.2.tgz",
- "integrity": "sha512-CGJ6VVGXVRP2o2Dorl4mAwwvDWT25luIsYhkyVQW32E4nL+TgW939J7LlKT/npq5Cpq6j3s+sy+13yk7xYpBmg==",
+ "version": "29.2.1",
+ "resolved": "https://registry.npmjs.org/pretty-format/-/pretty-format-29.2.1.tgz",
+ "integrity": "sha512-Y41Sa4aLCtKAXvwuIpTvcFBkyeYp2gdFWzXGA+ZNES3VwURIB165XO/z7CjETwzCCS53MjW/rLMyyqEnTtaOfA==",
"dev": true,
"dependencies": {
"@jest/schemas": "^29.0.0",
@@ -5882,19 +6011,6 @@
"node": ">=8"
}
},
- "node_modules/supports-hyperlinks": {
- "version": "2.3.0",
- "resolved": "https://registry.npmjs.org/supports-hyperlinks/-/supports-hyperlinks-2.3.0.tgz",
- "integrity": "sha512-RpsAZlpWcDwOPQA22aCH4J0t7L8JmAvsCxfOSEwm7cQs3LshN36QaTkwd70DnBOXDWGssw2eUoc8CaRWT0XunA==",
- "dev": true,
- "dependencies": {
- "has-flag": "^4.0.0",
- "supports-color": "^7.0.0"
- },
- "engines": {
- "node": ">=8"
- }
- },
"node_modules/svg-element-attributes": {
"version": "1.3.1",
"resolved": "https://registry.npmjs.org/svg-element-attributes/-/svg-element-attributes-1.3.1.tgz",
@@ -5905,22 +6021,6 @@
"url": "https://github.com/sponsors/wooorm"
}
},
- "node_modules/terminal-link": {
- "version": "2.1.1",
- "resolved": "https://registry.npmjs.org/terminal-link/-/terminal-link-2.1.1.tgz",
- "integrity": "sha512-un0FmiRUQNr5PJqy9kP7c40F5BOfpGlYTrxonDChEZB7pzZxRNp/bt+ymiy9/npwXya9KH99nJ/GXFIiUkYGFQ==",
- "dev": true,
- "dependencies": {
- "ansi-escapes": "^4.2.1",
- "supports-hyperlinks": "^2.0.0"
- },
- "engines": {
- "node": ">=8"
- },
- "funding": {
- "url": "https://github.com/sponsors/sindresorhus"
- }
- },
"node_modules/test-exclude": {
"version": "6.0.0",
"resolved": "https://registry.npmjs.org/test-exclude/-/test-exclude-6.0.0.tgz",
@@ -6814,9 +6914,9 @@
"dev": true
},
"@humanwhocodes/config-array": {
- "version": "0.10.7",
- "resolved": "https://registry.npmjs.org/@humanwhocodes/config-array/-/config-array-0.10.7.tgz",
- "integrity": "sha512-MDl6D6sBsaV452/QSdX+4CXIjZhIcI0PELsxUjk4U828yd58vk3bTIvk/6w5FY+4hIy9sLW0sfrV7K7Kc++j/w==",
+ "version": "0.11.6",
+ "resolved": "https://registry.npmjs.org/@humanwhocodes/config-array/-/config-array-0.11.6.tgz",
+ "integrity": "sha512-jJr+hPTJYKyDILJfhNSHsjiwXYf26Flsz8DvNndOsHs5pwSnpGUEy8yzF0JYhCEvTDdV2vuOK5tt8BVhwO5/hg==",
"dev": true,
"requires": {
"@humanwhocodes/object-schema": "^1.2.1",
@@ -6932,123 +7032,123 @@
"dev": true
},
"@jest/console": {
- "version": "29.1.2",
- "resolved": "https://registry.npmjs.org/@jest/console/-/console-29.1.2.tgz",
- "integrity": "sha512-ujEBCcYs82BTmRxqfHMQggSlkUZP63AE5YEaTPj7eFyJOzukkTorstOUC7L6nE3w5SYadGVAnTsQ/ZjTGL0qYQ==",
+ "version": "29.2.1",
+ "resolved": "https://registry.npmjs.org/@jest/console/-/console-29.2.1.tgz",
+ "integrity": "sha512-MF8Adcw+WPLZGBiNxn76DOuczG3BhODTcMlDCA4+cFi41OkaY/lyI0XUUhi73F88Y+7IHoGmD80pN5CtxQUdSw==",
"dev": true,
"requires": {
- "@jest/types": "^29.1.2",
+ "@jest/types": "^29.2.1",
"@types/node": "*",
"chalk": "^4.0.0",
- "jest-message-util": "^29.1.2",
- "jest-util": "^29.1.2",
+ "jest-message-util": "^29.2.1",
+ "jest-util": "^29.2.1",
"slash": "^3.0.0"
}
},
"@jest/core": {
- "version": "29.1.2",
- "resolved": "https://registry.npmjs.org/@jest/core/-/core-29.1.2.tgz",
- "integrity": "sha512-sCO2Va1gikvQU2ynDN8V4+6wB7iVrD2CvT0zaRst4rglf56yLly0NQ9nuRRAWFeimRf+tCdFsb1Vk1N9LrrMPA==",
+ "version": "29.2.2",
+ "resolved": "https://registry.npmjs.org/@jest/core/-/core-29.2.2.tgz",
+ "integrity": "sha512-susVl8o2KYLcZhhkvSB+b7xX575CX3TmSvxfeDjpRko7KmT89rHkXj6XkDkNpSeFMBzIENw5qIchO9HC9Sem+A==",
"dev": true,
"requires": {
- "@jest/console": "^29.1.2",
- "@jest/reporters": "^29.1.2",
- "@jest/test-result": "^29.1.2",
- "@jest/transform": "^29.1.2",
- "@jest/types": "^29.1.2",
+ "@jest/console": "^29.2.1",
+ "@jest/reporters": "^29.2.2",
+ "@jest/test-result": "^29.2.1",
+ "@jest/transform": "^29.2.2",
+ "@jest/types": "^29.2.1",
"@types/node": "*",
"ansi-escapes": "^4.2.1",
"chalk": "^4.0.0",
"ci-info": "^3.2.0",
"exit": "^0.1.2",
"graceful-fs": "^4.2.9",
- "jest-changed-files": "^29.0.0",
- "jest-config": "^29.1.2",
- "jest-haste-map": "^29.1.2",
- "jest-message-util": "^29.1.2",
- "jest-regex-util": "^29.0.0",
- "jest-resolve": "^29.1.2",
- "jest-resolve-dependencies": "^29.1.2",
- "jest-runner": "^29.1.2",
- "jest-runtime": "^29.1.2",
- "jest-snapshot": "^29.1.2",
- "jest-util": "^29.1.2",
- "jest-validate": "^29.1.2",
- "jest-watcher": "^29.1.2",
+ "jest-changed-files": "^29.2.0",
+ "jest-config": "^29.2.2",
+ "jest-haste-map": "^29.2.1",
+ "jest-message-util": "^29.2.1",
+ "jest-regex-util": "^29.2.0",
+ "jest-resolve": "^29.2.2",
+ "jest-resolve-dependencies": "^29.2.2",
+ "jest-runner": "^29.2.2",
+ "jest-runtime": "^29.2.2",
+ "jest-snapshot": "^29.2.2",
+ "jest-util": "^29.2.1",
+ "jest-validate": "^29.2.2",
+ "jest-watcher": "^29.2.2",
"micromatch": "^4.0.4",
- "pretty-format": "^29.1.2",
+ "pretty-format": "^29.2.1",
"slash": "^3.0.0",
"strip-ansi": "^6.0.0"
}
},
"@jest/environment": {
- "version": "29.1.2",
- "resolved": "https://registry.npmjs.org/@jest/environment/-/environment-29.1.2.tgz",
- "integrity": "sha512-rG7xZ2UeOfvOVzoLIJ0ZmvPl4tBEQ2n73CZJSlzUjPw4or1oSWC0s0Rk0ZX+pIBJ04aVr6hLWFn1DFtrnf8MhQ==",
+ "version": "29.2.2",
+ "resolved": "https://registry.npmjs.org/@jest/environment/-/environment-29.2.2.tgz",
+ "integrity": "sha512-OWn+Vhu0I1yxuGBJEFFekMYc8aGBGrY4rt47SOh/IFaI+D7ZHCk7pKRiSoZ2/Ml7b0Ony3ydmEHRx/tEOC7H1A==",
"dev": true,
"requires": {
- "@jest/fake-timers": "^29.1.2",
- "@jest/types": "^29.1.2",
+ "@jest/fake-timers": "^29.2.2",
+ "@jest/types": "^29.2.1",
"@types/node": "*",
- "jest-mock": "^29.1.2"
+ "jest-mock": "^29.2.2"
}
},
"@jest/expect": {
- "version": "29.1.2",
- "resolved": "https://registry.npmjs.org/@jest/expect/-/expect-29.1.2.tgz",
- "integrity": "sha512-FXw/UmaZsyfRyvZw3M6POgSNqwmuOXJuzdNiMWW9LCYo0GRoRDhg+R5iq5higmRTHQY7hx32+j7WHwinRmoILQ==",
+ "version": "29.2.2",
+ "resolved": "https://registry.npmjs.org/@jest/expect/-/expect-29.2.2.tgz",
+ "integrity": "sha512-zwblIZnrIVt8z/SiEeJ7Q9wKKuB+/GS4yZe9zw7gMqfGf4C5hBLGrVyxu1SzDbVSqyMSlprKl3WL1r80cBNkgg==",
"dev": true,
"requires": {
- "expect": "^29.1.2",
- "jest-snapshot": "^29.1.2"
+ "expect": "^29.2.2",
+ "jest-snapshot": "^29.2.2"
}
},
"@jest/expect-utils": {
- "version": "29.1.2",
- "resolved": "https://registry.npmjs.org/@jest/expect-utils/-/expect-utils-29.1.2.tgz",
- "integrity": "sha512-4a48bhKfGj/KAH39u0ppzNTABXQ8QPccWAFUFobWBaEMSMp+sB31Z2fK/l47c4a/Mu1po2ffmfAIPxXbVTXdtg==",
+ "version": "29.2.2",
+ "resolved": "https://registry.npmjs.org/@jest/expect-utils/-/expect-utils-29.2.2.tgz",
+ "integrity": "sha512-vwnVmrVhTmGgQzyvcpze08br91OL61t9O0lJMDyb6Y/D8EKQ9V7rGUb/p7PDt0GPzK0zFYqXWFo4EO2legXmkg==",
"dev": true,
"requires": {
- "jest-get-type": "^29.0.0"
+ "jest-get-type": "^29.2.0"
}
},
"@jest/fake-timers": {
- "version": "29.1.2",
- "resolved": "https://registry.npmjs.org/@jest/fake-timers/-/fake-timers-29.1.2.tgz",
- "integrity": "sha512-GppaEqS+QQYegedxVMpCe2xCXxxeYwQ7RsNx55zc8f+1q1qevkZGKequfTASI7ejmg9WwI+SJCrHe9X11bLL9Q==",
+ "version": "29.2.2",
+ "resolved": "https://registry.npmjs.org/@jest/fake-timers/-/fake-timers-29.2.2.tgz",
+ "integrity": "sha512-nqaW3y2aSyZDl7zQ7t1XogsxeavNpH6kkdq+EpXncIDvAkjvFD7hmhcIs1nWloengEWUoWqkqSA6MSbf9w6DgA==",
"dev": true,
"requires": {
- "@jest/types": "^29.1.2",
+ "@jest/types": "^29.2.1",
"@sinonjs/fake-timers": "^9.1.2",
"@types/node": "*",
- "jest-message-util": "^29.1.2",
- "jest-mock": "^29.1.2",
- "jest-util": "^29.1.2"
+ "jest-message-util": "^29.2.1",
+ "jest-mock": "^29.2.2",
+ "jest-util": "^29.2.1"
}
},
"@jest/globals": {
- "version": "29.1.2",
- "resolved": "https://registry.npmjs.org/@jest/globals/-/globals-29.1.2.tgz",
- "integrity": "sha512-uMgfERpJYoQmykAd0ffyMq8wignN4SvLUG6orJQRe9WAlTRc9cdpCaE/29qurXixYJVZWUqIBXhSk8v5xN1V9g==",
+ "version": "29.2.2",
+ "resolved": "https://registry.npmjs.org/@jest/globals/-/globals-29.2.2.tgz",
+ "integrity": "sha512-/nt+5YMh65kYcfBhj38B3Hm0Trk4IsuMXNDGKE/swp36yydBWfz3OXkLqkSvoAtPW8IJMSJDFCbTM2oj5SNprw==",
"dev": true,
"requires": {
- "@jest/environment": "^29.1.2",
- "@jest/expect": "^29.1.2",
- "@jest/types": "^29.1.2",
- "jest-mock": "^29.1.2"
+ "@jest/environment": "^29.2.2",
+ "@jest/expect": "^29.2.2",
+ "@jest/types": "^29.2.1",
+ "jest-mock": "^29.2.2"
}
},
"@jest/reporters": {
- "version": "29.1.2",
- "resolved": "https://registry.npmjs.org/@jest/reporters/-/reporters-29.1.2.tgz",
- "integrity": "sha512-X4fiwwyxy9mnfpxL0g9DD0KcTmEIqP0jUdnc2cfa9riHy+I6Gwwp5vOZiwyg0vZxfSDxrOlK9S4+340W4d+DAA==",
+ "version": "29.2.2",
+ "resolved": "https://registry.npmjs.org/@jest/reporters/-/reporters-29.2.2.tgz",
+ "integrity": "sha512-AzjL2rl2zJC0njIzcooBvjA4sJjvdoq98sDuuNs4aNugtLPSQ+91nysGKRF0uY1to5k0MdGMdOBggUsPqvBcpA==",
"dev": true,
"requires": {
"@bcoe/v8-coverage": "^0.2.3",
- "@jest/console": "^29.1.2",
- "@jest/test-result": "^29.1.2",
- "@jest/transform": "^29.1.2",
- "@jest/types": "^29.1.2",
+ "@jest/console": "^29.2.1",
+ "@jest/test-result": "^29.2.1",
+ "@jest/transform": "^29.2.2",
+ "@jest/types": "^29.2.1",
"@jridgewell/trace-mapping": "^0.3.15",
"@types/node": "*",
"chalk": "^4.0.0",
@@ -7061,13 +7161,12 @@
"istanbul-lib-report": "^3.0.0",
"istanbul-lib-source-maps": "^4.0.0",
"istanbul-reports": "^3.1.3",
- "jest-message-util": "^29.1.2",
- "jest-util": "^29.1.2",
- "jest-worker": "^29.1.2",
+ "jest-message-util": "^29.2.1",
+ "jest-util": "^29.2.1",
+ "jest-worker": "^29.2.1",
"slash": "^3.0.0",
"string-length": "^4.0.1",
"strip-ansi": "^6.0.0",
- "terminal-link": "^2.0.0",
"v8-to-istanbul": "^9.0.1"
}
},
@@ -7081,9 +7180,9 @@
}
},
"@jest/source-map": {
- "version": "29.0.0",
- "resolved": "https://registry.npmjs.org/@jest/source-map/-/source-map-29.0.0.tgz",
- "integrity": "sha512-nOr+0EM8GiHf34mq2GcJyz/gYFyLQ2INDhAylrZJ9mMWoW21mLBfZa0BUVPPMxVYrLjeiRe2Z7kWXOGnS0TFhQ==",
+ "version": "29.2.0",
+ "resolved": "https://registry.npmjs.org/@jest/source-map/-/source-map-29.2.0.tgz",
+ "integrity": "sha512-1NX9/7zzI0nqa6+kgpSdKPK+WU1p+SJk3TloWZf5MzPbxri9UEeXX5bWZAPCzbQcyuAzubcdUHA7hcNznmRqWQ==",
"dev": true,
"requires": {
"@jridgewell/trace-mapping": "^0.3.15",
@@ -7092,46 +7191,46 @@
}
},
"@jest/test-result": {
- "version": "29.1.2",
- "resolved": "https://registry.npmjs.org/@jest/test-result/-/test-result-29.1.2.tgz",
- "integrity": "sha512-jjYYjjumCJjH9hHCoMhA8PCl1OxNeGgAoZ7yuGYILRJX9NjgzTN0pCT5qAoYR4jfOP8htIByvAlz9vfNSSBoVg==",
+ "version": "29.2.1",
+ "resolved": "https://registry.npmjs.org/@jest/test-result/-/test-result-29.2.1.tgz",
+ "integrity": "sha512-lS4+H+VkhbX6z64tZP7PAUwPqhwj3kbuEHcaLuaBuB+riyaX7oa1txe0tXgrFj5hRWvZKvqO7LZDlNWeJ7VTPA==",
"dev": true,
"requires": {
- "@jest/console": "^29.1.2",
- "@jest/types": "^29.1.2",
+ "@jest/console": "^29.2.1",
+ "@jest/types": "^29.2.1",
"@types/istanbul-lib-coverage": "^2.0.0",
"collect-v8-coverage": "^1.0.0"
}
},
"@jest/test-sequencer": {
- "version": "29.1.2",
- "resolved": "https://registry.npmjs.org/@jest/test-sequencer/-/test-sequencer-29.1.2.tgz",
- "integrity": "sha512-fU6dsUqqm8sA+cd85BmeF7Gu9DsXVWFdGn9taxM6xN1cKdcP/ivSgXh5QucFRFz1oZxKv3/9DYYbq0ULly3P/Q==",
+ "version": "29.2.2",
+ "resolved": "https://registry.npmjs.org/@jest/test-sequencer/-/test-sequencer-29.2.2.tgz",
+ "integrity": "sha512-Cuc1znc1pl4v9REgmmLf0jBd3Y65UXJpioGYtMr/JNpQEIGEzkmHhy6W6DLbSsXeUA13TDzymPv0ZGZ9jH3eIw==",
"dev": true,
"requires": {
- "@jest/test-result": "^29.1.2",
+ "@jest/test-result": "^29.2.1",
"graceful-fs": "^4.2.9",
- "jest-haste-map": "^29.1.2",
+ "jest-haste-map": "^29.2.1",
"slash": "^3.0.0"
}
},
"@jest/transform": {
- "version": "29.1.2",
- "resolved": "https://registry.npmjs.org/@jest/transform/-/transform-29.1.2.tgz",
- "integrity": "sha512-2uaUuVHTitmkx1tHF+eBjb4p7UuzBG7SXIaA/hNIkaMP6K+gXYGxP38ZcrofzqN0HeZ7A90oqsOa97WU7WZkSw==",
+ "version": "29.2.2",
+ "resolved": "https://registry.npmjs.org/@jest/transform/-/transform-29.2.2.tgz",
+ "integrity": "sha512-aPe6rrletyuEIt2axxgdtxljmzH8O/nrov4byy6pDw9S8inIrTV+2PnjyP/oFHMSynzGxJ2s6OHowBNMXp/Jzg==",
"dev": true,
"requires": {
"@babel/core": "^7.11.6",
- "@jest/types": "^29.1.2",
+ "@jest/types": "^29.2.1",
"@jridgewell/trace-mapping": "^0.3.15",
"babel-plugin-istanbul": "^6.1.1",
"chalk": "^4.0.0",
"convert-source-map": "^1.4.0",
"fast-json-stable-stringify": "^2.1.0",
"graceful-fs": "^4.2.9",
- "jest-haste-map": "^29.1.2",
- "jest-regex-util": "^29.0.0",
- "jest-util": "^29.1.2",
+ "jest-haste-map": "^29.2.1",
+ "jest-regex-util": "^29.2.0",
+ "jest-util": "^29.2.1",
"micromatch": "^4.0.4",
"pirates": "^4.0.4",
"slash": "^3.0.0",
@@ -7139,9 +7238,9 @@
}
},
"@jest/types": {
- "version": "29.1.2",
- "resolved": "https://registry.npmjs.org/@jest/types/-/types-29.1.2.tgz",
- "integrity": "sha512-DcXGtoTykQB5jiwCmVr8H4vdg2OJhQex3qPkG+ISyDO7xQXbt/4R6dowcRyPemRnkH7JoHvZuxPBdlq+9JxFCg==",
+ "version": "29.2.1",
+ "resolved": "https://registry.npmjs.org/@jest/types/-/types-29.2.1.tgz",
+ "integrity": "sha512-O/QNDQODLnINEPAI0cl9U6zUIDXEWXt6IC1o2N2QENuos7hlGUIthlKyV4p6ki3TvXFX071blj8HUhgLGquPjw==",
"dev": true,
"requires": {
"@jest/schemas": "^29.0.0",
@@ -7438,6 +7537,15 @@
"@babel/types": "^7.3.0"
}
},
+ "@types/connect": {
+ "version": "3.4.35",
+ "resolved": "https://registry.npmjs.org/@types/connect/-/connect-3.4.35.tgz",
+ "integrity": "sha512-cdeYyv4KWoEgpBISTxWvqYsVy444DOqehiF3fM3ne10AmJ62RSyNkUnxMJXHQWRQQX2eR94m5y1IZyDwBjV9FQ==",
+ "dev": true,
+ "requires": {
+ "@types/node": "*"
+ }
+ },
"@types/graceful-fs": {
"version": "4.1.5",
"resolved": "https://registry.npmjs.org/@types/graceful-fs/-/graceful-fs-4.1.5.tgz",
@@ -7447,6 +7555,15 @@
"@types/node": "*"
}
},
+ "@types/http-server": {
+ "version": "0.12.1",
+ "resolved": "https://registry.npmjs.org/@types/http-server/-/http-server-0.12.1.tgz",
+ "integrity": "sha512-OJ8zs0o8JuHo92KCCsLq4BqkHPi1+Aj2yoPQXJ18LPUxOA1lqKfgBLtHNAQTwwPzeBqyo+HDkWD91MkfOGvNJg==",
+ "dev": true,
+ "requires": {
+ "@types/connect": "*"
+ }
+ },
"@types/istanbul-lib-coverage": {
"version": "2.0.4",
"resolved": "https://registry.npmjs.org/@types/istanbul-lib-coverage/-/istanbul-lib-coverage-2.0.4.tgz",
@@ -7471,6 +7588,16 @@
"@types/istanbul-lib-report": "*"
}
},
+ "@types/jest": {
+ "version": "29.2.0",
+ "resolved": "https://registry.npmjs.org/@types/jest/-/jest-29.2.0.tgz",
+ "integrity": "sha512-KO7bPV21d65PKwv3LLsD8Jn3E05pjNjRZvkm+YTacWhVmykAb07wW6IkZUmQAltwQafNcDUEUrMO2h3jeBSisg==",
+ "dev": true,
+ "requires": {
+ "expect": "^29.0.0",
+ "pretty-format": "^29.0.0"
+ }
+ },
"@types/json-schema": {
"version": "7.0.9",
"resolved": "https://registry.npmjs.org/@types/json-schema/-/json-schema-7.0.9.tgz",
@@ -7484,9 +7611,9 @@
"dev": true
},
"@types/node": {
- "version": "18.8.5",
- "resolved": "https://registry.npmjs.org/@types/node/-/node-18.8.5.tgz",
- "integrity": "sha512-Bq7G3AErwe5A/Zki5fdD3O6+0zDChhg671NfPjtIcbtzDNZTv4NPKMRFr7gtYPG7y+B8uTiNK4Ngd9T0FTar6Q==",
+ "version": "18.11.6",
+ "resolved": "https://registry.npmjs.org/@types/node/-/node-18.11.6.tgz",
+ "integrity": "sha512-j3CEDa2vd96K0AXF8Wur7UucACvnjkk8hYyQAHhUNciabZLDl9nfAEVUSwmh245OOZV15bRA3Y590Gi5jUcDJg==",
"dev": true
},
"@types/prettier": {
@@ -7544,15 +7671,67 @@
}
},
"@typescript-eslint/parser": {
- "version": "5.40.0",
- "resolved": "https://registry.npmjs.org/@typescript-eslint/parser/-/parser-5.40.0.tgz",
- "integrity": "sha512-Ah5gqyX2ySkiuYeOIDg7ap51/b63QgWZA7w6AHtFrag7aH0lRQPbLzUjk0c9o5/KZ6JRkTTDKShL4AUrQa6/hw==",
+ "version": "5.41.0",
+ "resolved": "https://registry.npmjs.org/@typescript-eslint/parser/-/parser-5.41.0.tgz",
+ "integrity": "sha512-HQVfix4+RL5YRWZboMD1pUfFN8MpRH4laziWkkAzyO1fvNOY/uinZcvo3QiFJVS/siNHupV8E5+xSwQZrl6PZA==",
"dev": true,
"requires": {
- "@typescript-eslint/scope-manager": "5.40.0",
- "@typescript-eslint/types": "5.40.0",
- "@typescript-eslint/typescript-estree": "5.40.0",
+ "@typescript-eslint/scope-manager": "5.41.0",
+ "@typescript-eslint/types": "5.41.0",
+ "@typescript-eslint/typescript-estree": "5.41.0",
"debug": "^4.3.4"
+ },
+ "dependencies": {
+ "@typescript-eslint/scope-manager": {
+ "version": "5.41.0",
+ "resolved": "https://registry.npmjs.org/@typescript-eslint/scope-manager/-/scope-manager-5.41.0.tgz",
+ "integrity": "sha512-xOxPJCnuktUkY2xoEZBKXO5DBCugFzjrVndKdUnyQr3+9aDWZReKq9MhaoVnbL+maVwWJu/N0SEtrtEUNb62QQ==",
+ "dev": true,
+ "requires": {
+ "@typescript-eslint/types": "5.41.0",
+ "@typescript-eslint/visitor-keys": "5.41.0"
+ }
+ },
+ "@typescript-eslint/types": {
+ "version": "5.41.0",
+ "resolved": "https://registry.npmjs.org/@typescript-eslint/types/-/types-5.41.0.tgz",
+ "integrity": "sha512-5BejraMXMC+2UjefDvrH0Fo/eLwZRV6859SXRg+FgbhA0R0l6lDqDGAQYhKbXhPN2ofk2kY5sgGyLNL907UXpA==",
+ "dev": true
+ },
+ "@typescript-eslint/typescript-estree": {
+ "version": "5.41.0",
+ "resolved": "https://registry.npmjs.org/@typescript-eslint/typescript-estree/-/typescript-estree-5.41.0.tgz",
+ "integrity": "sha512-SlzFYRwFSvswzDSQ/zPkIWcHv8O5y42YUskko9c4ki+fV6HATsTODUPbRbcGDFYP86gaJL5xohUEytvyNNcXWg==",
+ "dev": true,
+ "requires": {
+ "@typescript-eslint/types": "5.41.0",
+ "@typescript-eslint/visitor-keys": "5.41.0",
+ "debug": "^4.3.4",
+ "globby": "^11.1.0",
+ "is-glob": "^4.0.3",
+ "semver": "^7.3.7",
+ "tsutils": "^3.21.0"
+ }
+ },
+ "@typescript-eslint/visitor-keys": {
+ "version": "5.41.0",
+ "resolved": "https://registry.npmjs.org/@typescript-eslint/visitor-keys/-/visitor-keys-5.41.0.tgz",
+ "integrity": "sha512-vilqeHj267v8uzzakbm13HkPMl7cbYpKVjgFWZPIOHIJHZtinvypUhJ5xBXfWYg4eFKqztbMMpOgFpT9Gfx4fw==",
+ "dev": true,
+ "requires": {
+ "@typescript-eslint/types": "5.41.0",
+ "eslint-visitor-keys": "^3.3.0"
+ }
+ },
+ "semver": {
+ "version": "7.3.8",
+ "resolved": "https://registry.npmjs.org/semver/-/semver-7.3.8.tgz",
+ "integrity": "sha512-NB1ctGL5rlHrPJtFDVIVzTyQylMLu9N9VICA6HSFJo8MCGVTMW6gfpicwKmmK/dAjTOrqu5l63JJOpDSrAis3A==",
+ "dev": true,
+ "requires": {
+ "lru-cache": "^6.0.0"
+ }
+ }
}
},
"@typescript-eslint/scope-manager": {
@@ -7800,9 +7979,9 @@
"dev": true
},
"axios": {
- "version": "1.1.2",
- "resolved": "https://registry.npmjs.org/axios/-/axios-1.1.2.tgz",
- "integrity": "sha512-bznQyETwElsXl2RK7HLLwb5GPpOLlycxHCtrpDR/4RqqBzjARaOTo3jz4IgtntWUYee7Ne4S8UHd92VCuzPaWA==",
+ "version": "1.1.3",
+ "resolved": "https://registry.npmjs.org/axios/-/axios-1.1.3.tgz",
+ "integrity": "sha512-00tXVRwKx/FZr/IDVFt4C+f9FYairX517WoGCL6dpOntqLkZofjhu43F/Xl44UOpqa+9sLFDrG/XAnFsUYgkDA==",
"requires": {
"follow-redirects": "^1.15.0",
"form-data": "^4.0.0",
@@ -7828,15 +8007,15 @@
"dev": true
},
"babel-jest": {
- "version": "29.1.2",
- "resolved": "https://registry.npmjs.org/babel-jest/-/babel-jest-29.1.2.tgz",
- "integrity": "sha512-IuG+F3HTHryJb7gacC7SQ59A9kO56BctUsT67uJHp1mMCHUOMXpDwOHWGifWqdWVknN2WNkCVQELPjXx0aLJ9Q==",
+ "version": "29.2.2",
+ "resolved": "https://registry.npmjs.org/babel-jest/-/babel-jest-29.2.2.tgz",
+ "integrity": "sha512-kkq2QSDIuvpgfoac3WZ1OOcHsQQDU5xYk2Ql7tLdJ8BVAYbefEXal+NfS45Y5LVZA7cxC8KYcQMObpCt1J025w==",
"dev": true,
"requires": {
- "@jest/transform": "^29.1.2",
+ "@jest/transform": "^29.2.2",
"@types/babel__core": "^7.1.14",
"babel-plugin-istanbul": "^6.1.1",
- "babel-preset-jest": "^29.0.2",
+ "babel-preset-jest": "^29.2.0",
"chalk": "^4.0.0",
"graceful-fs": "^4.2.9",
"slash": "^3.0.0"
@@ -7856,9 +8035,9 @@
}
},
"babel-plugin-jest-hoist": {
- "version": "29.0.2",
- "resolved": "https://registry.npmjs.org/babel-plugin-jest-hoist/-/babel-plugin-jest-hoist-29.0.2.tgz",
- "integrity": "sha512-eBr2ynAEFjcebVvu8Ktx580BD1QKCrBG1XwEUTXJe285p9HA/4hOhfWCFRQhTKSyBV0VzjhG7H91Eifz9s29hg==",
+ "version": "29.2.0",
+ "resolved": "https://registry.npmjs.org/babel-plugin-jest-hoist/-/babel-plugin-jest-hoist-29.2.0.tgz",
+ "integrity": "sha512-TnspP2WNiR3GLfCsUNHqeXw0RoQ2f9U5hQ5L3XFpwuO8htQmSrhh8qsB6vi5Yi8+kuynN1yjDjQsPfkebmB6ZA==",
"dev": true,
"requires": {
"@babel/template": "^7.3.3",
@@ -7888,12 +8067,12 @@
}
},
"babel-preset-jest": {
- "version": "29.0.2",
- "resolved": "https://registry.npmjs.org/babel-preset-jest/-/babel-preset-jest-29.0.2.tgz",
- "integrity": "sha512-BeVXp7rH5TK96ofyEnHjznjLMQ2nAeDJ+QzxKnHAAMs0RgrQsCywjAN8m4mOm5Di0pxU//3AoEeJJrerMH5UeA==",
+ "version": "29.2.0",
+ "resolved": "https://registry.npmjs.org/babel-preset-jest/-/babel-preset-jest-29.2.0.tgz",
+ "integrity": "sha512-z9JmMJppMxNv8N7fNRHvhMg9cvIkMxQBXgFkane3yKVEvEOP+kB50lk8DFRvF9PGqbyXxlmebKWhuDORO8RgdA==",
"dev": true,
"requires": {
- "babel-plugin-jest-hoist": "^29.0.2",
+ "babel-plugin-jest-hoist": "^29.2.0",
"babel-preset-current-node-syntax": "^1.0.0"
}
},
@@ -8157,9 +8336,9 @@
"dev": true
},
"diff-sequences": {
- "version": "29.0.0",
- "resolved": "https://registry.npmjs.org/diff-sequences/-/diff-sequences-29.0.0.tgz",
- "integrity": "sha512-7Qe/zd1wxSDL4D/X/FPjOMB+ZMDt71W94KYaq05I2l0oQqgXgs7s4ftYYmV38gBSrPz2vcygxfs1xn0FT+rKNA==",
+ "version": "29.2.0",
+ "resolved": "https://registry.npmjs.org/diff-sequences/-/diff-sequences-29.2.0.tgz",
+ "integrity": "sha512-413SY5JpYeSBZxmenGEmCVQ8mCgtFJF0w9PROdaS6z987XC2Pd2GOKqOITLtMftmyFZqgtCOb/QA7/Z3ZXfzIw==",
"dev": true
},
"dir-glob": {
@@ -8195,9 +8374,9 @@
"dev": true
},
"emittery": {
- "version": "0.10.2",
- "resolved": "https://registry.npmjs.org/emittery/-/emittery-0.10.2.tgz",
- "integrity": "sha512-aITqOwnLanpHLNXZJENbOgjUBeHocD+xsSJmNrjovKBW5HbSpW3d1pEls7GFQPUWXiwG9+0P4GtHfEqC/4M0Iw==",
+ "version": "0.13.1",
+ "resolved": "https://registry.npmjs.org/emittery/-/emittery-0.13.1.tgz",
+ "integrity": "sha512-DeWwawk6r5yR9jFgnDKYt4sLS0LmHJJi3ZOnb5/JdbYwj3nW+FxQnHIjhBKz8YLC7oRNPVM9NQ47I3CVx34eqQ==",
"dev": true
},
"emoji-regex": {
@@ -8213,14 +8392,6 @@
"dev": true,
"requires": {
"is-arrayish": "^0.2.1"
- },
- "dependencies": {
- "is-arrayish": {
- "version": "0.2.1",
- "resolved": "https://registry.npmjs.org/is-arrayish/-/is-arrayish-0.2.1.tgz",
- "integrity": "sha512-zz06S8t0ozoDXMG+ube26zeCTNXcKIPJZJi8hBrF4idCLms4CG9QtK7qBl1boi5ODzFpjswb5JPmHCbMpjaYzg==",
- "dev": true
- }
}
},
"es-abstract": {
@@ -8279,14 +8450,15 @@
"dev": true
},
"eslint": {
- "version": "8.25.0",
- "resolved": "https://registry.npmjs.org/eslint/-/eslint-8.25.0.tgz",
- "integrity": "sha512-DVlJOZ4Pn50zcKW5bYH7GQK/9MsoQG2d5eDH0ebEkE8PbgzTTmtt/VTH9GGJ4BfeZCpBLqFfvsjX35UacUL83A==",
+ "version": "8.26.0",
+ "resolved": "https://registry.npmjs.org/eslint/-/eslint-8.26.0.tgz",
+ "integrity": "sha512-kzJkpaw1Bfwheq4VXUezFriD1GxszX6dUekM7Z3aC2o4hju+tsR/XyTC3RcoSD7jmy9VkPU3+N6YjVU2e96Oyg==",
"dev": true,
"requires": {
"@eslint/eslintrc": "^1.3.3",
- "@humanwhocodes/config-array": "^0.10.5",
+ "@humanwhocodes/config-array": "^0.11.6",
"@humanwhocodes/module-importer": "^1.0.1",
+ "@nodelib/fs.walk": "^1.2.8",
"ajv": "^6.10.0",
"chalk": "^4.0.0",
"cross-spawn": "^7.0.2",
@@ -8302,14 +8474,14 @@
"fast-deep-equal": "^3.1.3",
"file-entry-cache": "^6.0.1",
"find-up": "^5.0.0",
- "glob-parent": "^6.0.1",
+ "glob-parent": "^6.0.2",
"globals": "^13.15.0",
- "globby": "^11.1.0",
"grapheme-splitter": "^1.0.4",
"ignore": "^5.2.0",
"import-fresh": "^3.0.0",
"imurmurhash": "^0.1.4",
"is-glob": "^4.0.0",
+ "is-path-inside": "^3.0.3",
"js-sdsl": "^4.1.4",
"js-yaml": "^4.1.0",
"json-stable-stringify-without-jsonify": "^1.0.1",
@@ -8608,9 +8780,9 @@
}
},
"eslint-plugin-jest": {
- "version": "27.1.1",
- "resolved": "https://registry.npmjs.org/eslint-plugin-jest/-/eslint-plugin-jest-27.1.1.tgz",
- "integrity": "sha512-vuSuXGKHHi/UAffIM46QKm4g0tQP+6n52nRxUpMq6x6x9rhnv5WM7ktSu3h9cTnXE4b0Y0ODQTgRlCm9rdRLvg==",
+ "version": "27.1.3",
+ "resolved": "https://registry.npmjs.org/eslint-plugin-jest/-/eslint-plugin-jest-27.1.3.tgz",
+ "integrity": "sha512-7DrIfYRQPa7JQd1Le8G/BJsfYHVUKQdJQ/6vULSp/4NjKZmSMJ/605G2hhScEra++SiH68zPEjLnrO74nHrMLg==",
"dev": true,
"requires": {
"@typescript-eslint/utils": "^5.10.0"
@@ -8794,16 +8966,16 @@
"dev": true
},
"expect": {
- "version": "29.1.2",
- "resolved": "https://registry.npmjs.org/expect/-/expect-29.1.2.tgz",
- "integrity": "sha512-AuAGn1uxva5YBbBlXb+2JPxJRuemZsmlGcapPXWNSBNsQtAULfjioREGBWuI0EOvYUKjDnrCy8PW5Zlr1md5mw==",
+ "version": "29.2.2",
+ "resolved": "https://registry.npmjs.org/expect/-/expect-29.2.2.tgz",
+ "integrity": "sha512-hE09QerxZ5wXiOhqkXy5d2G9ar+EqOyifnCXCpMNu+vZ6DG9TJ6CO2c2kPDSLqERTTWrO7OZj8EkYHQqSd78Yw==",
"dev": true,
"requires": {
- "@jest/expect-utils": "^29.1.2",
- "jest-get-type": "^29.0.0",
- "jest-matcher-utils": "^29.1.2",
- "jest-message-util": "^29.1.2",
- "jest-util": "^29.1.2"
+ "@jest/expect-utils": "^29.2.2",
+ "jest-get-type": "^29.2.0",
+ "jest-matcher-utils": "^29.2.2",
+ "jest-message-util": "^29.2.1",
+ "jest-util": "^29.2.1"
}
},
"fast-deep-equal": {
@@ -9222,6 +9394,12 @@
"side-channel": "^1.0.4"
}
},
+ "is-arrayish": {
+ "version": "0.2.1",
+ "resolved": "https://registry.npmjs.org/is-arrayish/-/is-arrayish-0.2.1.tgz",
+ "integrity": "sha512-zz06S8t0ozoDXMG+ube26zeCTNXcKIPJZJi8hBrF4idCLms4CG9QtK7qBl1boi5ODzFpjswb5JPmHCbMpjaYzg==",
+ "dev": true
+ },
"is-bigint": {
"version": "1.0.4",
"resolved": "https://registry.npmjs.org/is-bigint/-/is-bigint-1.0.4.tgz",
@@ -9313,6 +9491,12 @@
"has-tostringtag": "^1.0.0"
}
},
+ "is-path-inside": {
+ "version": "3.0.3",
+ "resolved": "https://registry.npmjs.org/is-path-inside/-/is-path-inside-3.0.3.tgz",
+ "integrity": "sha512-Fd4gABb+ycGAmKou8eMftCupSir5lRxqf4aD/vd0cD2qc4HL07OjCeuHMr8Ro4CoMaeCKDB0/ECBOVWjTwUvPQ==",
+ "dev": true
+ },
"is-plain-object": {
"version": "5.0.0",
"resolved": "https://registry.npmjs.org/is-plain-object/-/is-plain-object-5.0.0.tgz",
@@ -9428,21 +9612,21 @@
}
},
"jest": {
- "version": "29.1.2",
- "resolved": "https://registry.npmjs.org/jest/-/jest-29.1.2.tgz",
- "integrity": "sha512-5wEIPpCezgORnqf+rCaYD1SK+mNN7NsstWzIsuvsnrhR/hSxXWd82oI7DkrbJ+XTD28/eG8SmxdGvukrGGK6Tw==",
+ "version": "29.2.2",
+ "resolved": "https://registry.npmjs.org/jest/-/jest-29.2.2.tgz",
+ "integrity": "sha512-r+0zCN9kUqoON6IjDdjbrsWobXM/09Nd45kIPRD8kloaRh1z5ZCMdVsgLXGxmlL7UpAJsvCYOQNO+NjvG/gqiQ==",
"dev": true,
"requires": {
- "@jest/core": "^29.1.2",
- "@jest/types": "^29.1.2",
+ "@jest/core": "^29.2.2",
+ "@jest/types": "^29.2.1",
"import-local": "^3.0.2",
- "jest-cli": "^29.1.2"
+ "jest-cli": "^29.2.2"
}
},
"jest-changed-files": {
- "version": "29.0.0",
- "resolved": "https://registry.npmjs.org/jest-changed-files/-/jest-changed-files-29.0.0.tgz",
- "integrity": "sha512-28/iDMDrUpGoCitTURuDqUzWQoWmOmOKOFST1mi2lwh62X4BFf6khgH3uSuo1e49X/UDjuApAj3w0wLOex4VPQ==",
+ "version": "29.2.0",
+ "resolved": "https://registry.npmjs.org/jest-changed-files/-/jest-changed-files-29.2.0.tgz",
+ "integrity": "sha512-qPVmLLyBmvF5HJrY7krDisx6Voi8DmlV3GZYX0aFNbaQsZeoz1hfxcCMbqDGuQCxU1dJy9eYc2xscE8QrCCYaA==",
"dev": true,
"requires": {
"execa": "^5.0.0",
@@ -9461,28 +9645,28 @@
}
},
"jest-circus": {
- "version": "29.1.2",
- "resolved": "https://registry.npmjs.org/jest-circus/-/jest-circus-29.1.2.tgz",
- "integrity": "sha512-ajQOdxY6mT9GtnfJRZBRYS7toNIJayiiyjDyoZcnvPRUPwJ58JX0ci0PKAKUo2C1RyzlHw0jabjLGKksO42JGA==",
+ "version": "29.2.2",
+ "resolved": "https://registry.npmjs.org/jest-circus/-/jest-circus-29.2.2.tgz",
+ "integrity": "sha512-upSdWxx+Mh4DV7oueuZndJ1NVdgtTsqM4YgywHEx05UMH5nxxA2Qu9T9T9XVuR021XxqSoaKvSmmpAbjwwwxMw==",
"dev": true,
"requires": {
- "@jest/environment": "^29.1.2",
- "@jest/expect": "^29.1.2",
- "@jest/test-result": "^29.1.2",
- "@jest/types": "^29.1.2",
+ "@jest/environment": "^29.2.2",
+ "@jest/expect": "^29.2.2",
+ "@jest/test-result": "^29.2.1",
+ "@jest/types": "^29.2.1",
"@types/node": "*",
"chalk": "^4.0.0",
"co": "^4.6.0",
"dedent": "^0.7.0",
"is-generator-fn": "^2.0.0",
- "jest-each": "^29.1.2",
- "jest-matcher-utils": "^29.1.2",
- "jest-message-util": "^29.1.2",
- "jest-runtime": "^29.1.2",
- "jest-snapshot": "^29.1.2",
- "jest-util": "^29.1.2",
+ "jest-each": "^29.2.1",
+ "jest-matcher-utils": "^29.2.2",
+ "jest-message-util": "^29.2.1",
+ "jest-runtime": "^29.2.2",
+ "jest-snapshot": "^29.2.2",
+ "jest-util": "^29.2.1",
"p-limit": "^3.1.0",
- "pretty-format": "^29.1.2",
+ "pretty-format": "^29.2.1",
"slash": "^3.0.0",
"stack-utils": "^2.0.3"
},
@@ -9499,177 +9683,177 @@
}
},
"jest-cli": {
- "version": "29.1.2",
- "resolved": "https://registry.npmjs.org/jest-cli/-/jest-cli-29.1.2.tgz",
- "integrity": "sha512-vsvBfQ7oS2o4MJdAH+4u9z76Vw5Q8WBQF5MchDbkylNknZdrPTX1Ix7YRJyTlOWqRaS7ue/cEAn+E4V1MWyMzw==",
+ "version": "29.2.2",
+ "resolved": "https://registry.npmjs.org/jest-cli/-/jest-cli-29.2.2.tgz",
+ "integrity": "sha512-R45ygnnb2CQOfd8rTPFR+/fls0d+1zXS6JPYTBBrnLPrhr58SSuPTiA5Tplv8/PXpz4zXR/AYNxmwIj6J6nrvg==",
"dev": true,
"requires": {
- "@jest/core": "^29.1.2",
- "@jest/test-result": "^29.1.2",
- "@jest/types": "^29.1.2",
+ "@jest/core": "^29.2.2",
+ "@jest/test-result": "^29.2.1",
+ "@jest/types": "^29.2.1",
"chalk": "^4.0.0",
"exit": "^0.1.2",
"graceful-fs": "^4.2.9",
"import-local": "^3.0.2",
- "jest-config": "^29.1.2",
- "jest-util": "^29.1.2",
- "jest-validate": "^29.1.2",
+ "jest-config": "^29.2.2",
+ "jest-util": "^29.2.1",
+ "jest-validate": "^29.2.2",
"prompts": "^2.0.1",
"yargs": "^17.3.1"
}
},
"jest-config": {
- "version": "29.1.2",
- "resolved": "https://registry.npmjs.org/jest-config/-/jest-config-29.1.2.tgz",
- "integrity": "sha512-EC3Zi86HJUOz+2YWQcJYQXlf0zuBhJoeyxLM6vb6qJsVmpP7KcCP1JnyF0iaqTaXdBP8Rlwsvs7hnKWQWWLwwA==",
+ "version": "29.2.2",
+ "resolved": "https://registry.npmjs.org/jest-config/-/jest-config-29.2.2.tgz",
+ "integrity": "sha512-Q0JX54a5g1lP63keRfKR8EuC7n7wwny2HoTRDb8cx78IwQOiaYUVZAdjViY3WcTxpR02rPUpvNVmZ1fkIlZPcw==",
"dev": true,
"requires": {
"@babel/core": "^7.11.6",
- "@jest/test-sequencer": "^29.1.2",
- "@jest/types": "^29.1.2",
- "babel-jest": "^29.1.2",
+ "@jest/test-sequencer": "^29.2.2",
+ "@jest/types": "^29.2.1",
+ "babel-jest": "^29.2.2",
"chalk": "^4.0.0",
"ci-info": "^3.2.0",
"deepmerge": "^4.2.2",
"glob": "^7.1.3",
"graceful-fs": "^4.2.9",
- "jest-circus": "^29.1.2",
- "jest-environment-node": "^29.1.2",
- "jest-get-type": "^29.0.0",
- "jest-regex-util": "^29.0.0",
- "jest-resolve": "^29.1.2",
- "jest-runner": "^29.1.2",
- "jest-util": "^29.1.2",
- "jest-validate": "^29.1.2",
+ "jest-circus": "^29.2.2",
+ "jest-environment-node": "^29.2.2",
+ "jest-get-type": "^29.2.0",
+ "jest-regex-util": "^29.2.0",
+ "jest-resolve": "^29.2.2",
+ "jest-runner": "^29.2.2",
+ "jest-util": "^29.2.1",
+ "jest-validate": "^29.2.2",
"micromatch": "^4.0.4",
"parse-json": "^5.2.0",
- "pretty-format": "^29.1.2",
+ "pretty-format": "^29.2.1",
"slash": "^3.0.0",
"strip-json-comments": "^3.1.1"
}
},
"jest-diff": {
- "version": "29.1.2",
- "resolved": "https://registry.npmjs.org/jest-diff/-/jest-diff-29.1.2.tgz",
- "integrity": "sha512-4GQts0aUopVvecIT4IwD/7xsBaMhKTYoM4/njE/aVw9wpw+pIUVp8Vab/KnSzSilr84GnLBkaP3JLDnQYCKqVQ==",
+ "version": "29.2.1",
+ "resolved": "https://registry.npmjs.org/jest-diff/-/jest-diff-29.2.1.tgz",
+ "integrity": "sha512-gfh/SMNlQmP3MOUgdzxPOd4XETDJifADpT937fN1iUGz+9DgOu2eUPHH25JDkLVcLwwqxv3GzVyK4VBUr9fjfA==",
"dev": true,
"requires": {
"chalk": "^4.0.0",
- "diff-sequences": "^29.0.0",
- "jest-get-type": "^29.0.0",
- "pretty-format": "^29.1.2"
+ "diff-sequences": "^29.2.0",
+ "jest-get-type": "^29.2.0",
+ "pretty-format": "^29.2.1"
}
},
"jest-docblock": {
- "version": "29.0.0",
- "resolved": "https://registry.npmjs.org/jest-docblock/-/jest-docblock-29.0.0.tgz",
- "integrity": "sha512-s5Kpra/kLzbqu9dEjov30kj1n4tfu3e7Pl8v+f8jOkeWNqM6Ds8jRaJfZow3ducoQUrf2Z4rs2N5S3zXnb83gw==",
+ "version": "29.2.0",
+ "resolved": "https://registry.npmjs.org/jest-docblock/-/jest-docblock-29.2.0.tgz",
+ "integrity": "sha512-bkxUsxTgWQGbXV5IENmfiIuqZhJcyvF7tU4zJ/7ioTutdz4ToB5Yx6JOFBpgI+TphRY4lhOyCWGNH/QFQh5T6A==",
"dev": true,
"requires": {
"detect-newline": "^3.0.0"
}
},
"jest-each": {
- "version": "29.1.2",
- "resolved": "https://registry.npmjs.org/jest-each/-/jest-each-29.1.2.tgz",
- "integrity": "sha512-AmTQp9b2etNeEwMyr4jc0Ql/LIX/dhbgP21gHAizya2X6rUspHn2gysMXaj6iwWuOJ2sYRgP8c1P4cXswgvS1A==",
+ "version": "29.2.1",
+ "resolved": "https://registry.npmjs.org/jest-each/-/jest-each-29.2.1.tgz",
+ "integrity": "sha512-sGP86H/CpWHMyK3qGIGFCgP6mt+o5tu9qG4+tobl0LNdgny0aitLXs9/EBacLy3Bwqy+v4uXClqJgASJWcruYw==",
"dev": true,
"requires": {
- "@jest/types": "^29.1.2",
+ "@jest/types": "^29.2.1",
"chalk": "^4.0.0",
- "jest-get-type": "^29.0.0",
- "jest-util": "^29.1.2",
- "pretty-format": "^29.1.2"
+ "jest-get-type": "^29.2.0",
+ "jest-util": "^29.2.1",
+ "pretty-format": "^29.2.1"
}
},
"jest-environment-node": {
- "version": "29.1.2",
- "resolved": "https://registry.npmjs.org/jest-environment-node/-/jest-environment-node-29.1.2.tgz",
- "integrity": "sha512-C59yVbdpY8682u6k/lh8SUMDJPbOyCHOTgLVVi1USWFxtNV+J8fyIwzkg+RJIVI30EKhKiAGNxYaFr3z6eyNhQ==",
+ "version": "29.2.2",
+ "resolved": "https://registry.npmjs.org/jest-environment-node/-/jest-environment-node-29.2.2.tgz",
+ "integrity": "sha512-B7qDxQjkIakQf+YyrqV5dICNs7tlCO55WJ4OMSXsqz1lpI/0PmeuXdx2F7eU8rnPbRkUR/fItSSUh0jvE2y/tw==",
"dev": true,
"requires": {
- "@jest/environment": "^29.1.2",
- "@jest/fake-timers": "^29.1.2",
- "@jest/types": "^29.1.2",
+ "@jest/environment": "^29.2.2",
+ "@jest/fake-timers": "^29.2.2",
+ "@jest/types": "^29.2.1",
"@types/node": "*",
- "jest-mock": "^29.1.2",
- "jest-util": "^29.1.2"
+ "jest-mock": "^29.2.2",
+ "jest-util": "^29.2.1"
}
},
"jest-get-type": {
- "version": "29.0.0",
- "resolved": "https://registry.npmjs.org/jest-get-type/-/jest-get-type-29.0.0.tgz",
- "integrity": "sha512-83X19z/HuLKYXYHskZlBAShO7UfLFXu/vWajw9ZNJASN32li8yHMaVGAQqxFW1RCFOkB7cubaL6FaJVQqqJLSw==",
+ "version": "29.2.0",
+ "resolved": "https://registry.npmjs.org/jest-get-type/-/jest-get-type-29.2.0.tgz",
+ "integrity": "sha512-uXNJlg8hKFEnDgFsrCjznB+sTxdkuqiCL6zMgA75qEbAJjJYTs9XPrvDctrEig2GDow22T/LvHgO57iJhXB/UA==",
"dev": true
},
"jest-haste-map": {
- "version": "29.1.2",
- "resolved": "https://registry.npmjs.org/jest-haste-map/-/jest-haste-map-29.1.2.tgz",
- "integrity": "sha512-xSjbY8/BF11Jh3hGSPfYTa/qBFrm3TPM7WU8pU93m2gqzORVLkHFWvuZmFsTEBPRKndfewXhMOuzJNHyJIZGsw==",
+ "version": "29.2.1",
+ "resolved": "https://registry.npmjs.org/jest-haste-map/-/jest-haste-map-29.2.1.tgz",
+ "integrity": "sha512-wF460rAFmYc6ARcCFNw4MbGYQjYkvjovb9GBT+W10Um8q5nHq98jD6fHZMDMO3tA56S8XnmNkM8GcA8diSZfnA==",
"dev": true,
"requires": {
- "@jest/types": "^29.1.2",
+ "@jest/types": "^29.2.1",
"@types/graceful-fs": "^4.1.3",
"@types/node": "*",
"anymatch": "^3.0.3",
"fb-watchman": "^2.0.0",
"fsevents": "^2.3.2",
"graceful-fs": "^4.2.9",
- "jest-regex-util": "^29.0.0",
- "jest-util": "^29.1.2",
- "jest-worker": "^29.1.2",
+ "jest-regex-util": "^29.2.0",
+ "jest-util": "^29.2.1",
+ "jest-worker": "^29.2.1",
"micromatch": "^4.0.4",
"walker": "^1.0.8"
}
},
"jest-leak-detector": {
- "version": "29.1.2",
- "resolved": "https://registry.npmjs.org/jest-leak-detector/-/jest-leak-detector-29.1.2.tgz",
- "integrity": "sha512-TG5gAZJpgmZtjb6oWxBLf2N6CfQ73iwCe6cofu/Uqv9iiAm6g502CAnGtxQaTfpHECBdVEMRBhomSXeLnoKjiQ==",
+ "version": "29.2.1",
+ "resolved": "https://registry.npmjs.org/jest-leak-detector/-/jest-leak-detector-29.2.1.tgz",
+ "integrity": "sha512-1YvSqYoiurxKOJtySc+CGVmw/e1v4yNY27BjWTVzp0aTduQeA7pdieLiW05wTYG/twlKOp2xS/pWuikQEmklug==",
"dev": true,
"requires": {
- "jest-get-type": "^29.0.0",
- "pretty-format": "^29.1.2"
+ "jest-get-type": "^29.2.0",
+ "pretty-format": "^29.2.1"
}
},
"jest-matcher-utils": {
- "version": "29.1.2",
- "resolved": "https://registry.npmjs.org/jest-matcher-utils/-/jest-matcher-utils-29.1.2.tgz",
- "integrity": "sha512-MV5XrD3qYSW2zZSHRRceFzqJ39B2z11Qv0KPyZYxnzDHFeYZGJlgGi0SW+IXSJfOewgJp/Km/7lpcFT+cgZypw==",
+ "version": "29.2.2",
+ "resolved": "https://registry.npmjs.org/jest-matcher-utils/-/jest-matcher-utils-29.2.2.tgz",
+ "integrity": "sha512-4DkJ1sDPT+UX2MR7Y3od6KtvRi9Im1ZGLGgdLFLm4lPexbTaCgJW5NN3IOXlQHF7NSHY/VHhflQ+WoKtD/vyCw==",
"dev": true,
"requires": {
"chalk": "^4.0.0",
- "jest-diff": "^29.1.2",
- "jest-get-type": "^29.0.0",
- "pretty-format": "^29.1.2"
+ "jest-diff": "^29.2.1",
+ "jest-get-type": "^29.2.0",
+ "pretty-format": "^29.2.1"
}
},
"jest-message-util": {
- "version": "29.1.2",
- "resolved": "https://registry.npmjs.org/jest-message-util/-/jest-message-util-29.1.2.tgz",
- "integrity": "sha512-9oJ2Os+Qh6IlxLpmvshVbGUiSkZVc2FK+uGOm6tghafnB2RyjKAxMZhtxThRMxfX1J1SOMhTn9oK3/MutRWQJQ==",
+ "version": "29.2.1",
+ "resolved": "https://registry.npmjs.org/jest-message-util/-/jest-message-util-29.2.1.tgz",
+ "integrity": "sha512-Dx5nEjw9V8C1/Yj10S/8ivA8F439VS8vTq1L7hEgwHFn9ovSKNpYW/kwNh7UglaEgXO42XxzKJB+2x0nSglFVw==",
"dev": true,
"requires": {
"@babel/code-frame": "^7.12.13",
- "@jest/types": "^29.1.2",
+ "@jest/types": "^29.2.1",
"@types/stack-utils": "^2.0.0",
"chalk": "^4.0.0",
"graceful-fs": "^4.2.9",
"micromatch": "^4.0.4",
- "pretty-format": "^29.1.2",
+ "pretty-format": "^29.2.1",
"slash": "^3.0.0",
"stack-utils": "^2.0.3"
}
},
"jest-mock": {
- "version": "29.1.2",
- "resolved": "https://registry.npmjs.org/jest-mock/-/jest-mock-29.1.2.tgz",
- "integrity": "sha512-PFDAdjjWbjPUtQPkQufvniXIS3N9Tv7tbibePEjIIprzjgo0qQlyUiVMrT4vL8FaSJo1QXifQUOuPH3HQC/aMA==",
+ "version": "29.2.2",
+ "resolved": "https://registry.npmjs.org/jest-mock/-/jest-mock-29.2.2.tgz",
+ "integrity": "sha512-1leySQxNAnivvbcx0sCB37itu8f4OX2S/+gxLAV4Z62shT4r4dTG9tACDywUAEZoLSr36aYUTsVp3WKwWt4PMQ==",
"dev": true,
"requires": {
- "@jest/types": "^29.1.2",
+ "@jest/types": "^29.2.1",
"@types/node": "*",
- "jest-util": "^29.1.2"
+ "jest-util": "^29.2.1"
}
},
"jest-pnp-resolver": {
@@ -9680,63 +9864,63 @@
"requires": {}
},
"jest-regex-util": {
- "version": "29.0.0",
- "resolved": "https://registry.npmjs.org/jest-regex-util/-/jest-regex-util-29.0.0.tgz",
- "integrity": "sha512-BV7VW7Sy0fInHWN93MMPtlClweYv2qrSCwfeFWmpribGZtQPWNvRSq9XOVgOEjU1iBGRKXUZil0o2AH7Iy9Lug==",
+ "version": "29.2.0",
+ "resolved": "https://registry.npmjs.org/jest-regex-util/-/jest-regex-util-29.2.0.tgz",
+ "integrity": "sha512-6yXn0kg2JXzH30cr2NlThF+70iuO/3irbaB4mh5WyqNIvLLP+B6sFdluO1/1RJmslyh/f9osnefECflHvTbwVA==",
"dev": true
},
"jest-resolve": {
- "version": "29.1.2",
- "resolved": "https://registry.npmjs.org/jest-resolve/-/jest-resolve-29.1.2.tgz",
- "integrity": "sha512-7fcOr+k7UYSVRJYhSmJHIid3AnDBcLQX3VmT9OSbPWsWz1MfT7bcoerMhADKGvKCoMpOHUQaDHtQoNp/P9JMGg==",
+ "version": "29.2.2",
+ "resolved": "https://registry.npmjs.org/jest-resolve/-/jest-resolve-29.2.2.tgz",
+ "integrity": "sha512-3gaLpiC3kr14rJR3w7vWh0CBX2QAhfpfiQTwrFPvVrcHe5VUBtIXaR004aWE/X9B2CFrITOQAp5gxLONGrk6GA==",
"dev": true,
"requires": {
"chalk": "^4.0.0",
"graceful-fs": "^4.2.9",
- "jest-haste-map": "^29.1.2",
+ "jest-haste-map": "^29.2.1",
"jest-pnp-resolver": "^1.2.2",
- "jest-util": "^29.1.2",
- "jest-validate": "^29.1.2",
+ "jest-util": "^29.2.1",
+ "jest-validate": "^29.2.2",
"resolve": "^1.20.0",
"resolve.exports": "^1.1.0",
"slash": "^3.0.0"
}
},
"jest-resolve-dependencies": {
- "version": "29.1.2",
- "resolved": "https://registry.npmjs.org/jest-resolve-dependencies/-/jest-resolve-dependencies-29.1.2.tgz",
- "integrity": "sha512-44yYi+yHqNmH3OoWZvPgmeeiwKxhKV/0CfrzaKLSkZG9gT973PX8i+m8j6pDrTYhhHoiKfF3YUFg/6AeuHw4HQ==",
+ "version": "29.2.2",
+ "resolved": "https://registry.npmjs.org/jest-resolve-dependencies/-/jest-resolve-dependencies-29.2.2.tgz",
+ "integrity": "sha512-wWOmgbkbIC2NmFsq8Lb+3EkHuW5oZfctffTGvwsA4JcJ1IRk8b2tg+hz44f0lngvRTeHvp3Kyix9ACgudHH9aQ==",
"dev": true,
"requires": {
- "jest-regex-util": "^29.0.0",
- "jest-snapshot": "^29.1.2"
+ "jest-regex-util": "^29.2.0",
+ "jest-snapshot": "^29.2.2"
}
},
"jest-runner": {
- "version": "29.1.2",
- "resolved": "https://registry.npmjs.org/jest-runner/-/jest-runner-29.1.2.tgz",
- "integrity": "sha512-yy3LEWw8KuBCmg7sCGDIqKwJlULBuNIQa2eFSVgVASWdXbMYZ9H/X0tnXt70XFoGf92W2sOQDOIFAA6f2BG04Q==",
+ "version": "29.2.2",
+ "resolved": "https://registry.npmjs.org/jest-runner/-/jest-runner-29.2.2.tgz",
+ "integrity": "sha512-1CpUxXDrbsfy9Hr9/1zCUUhT813kGGK//58HeIw/t8fa/DmkecEwZSWlb1N/xDKXg3uCFHQp1GCvlSClfImMxg==",
"dev": true,
"requires": {
- "@jest/console": "^29.1.2",
- "@jest/environment": "^29.1.2",
- "@jest/test-result": "^29.1.2",
- "@jest/transform": "^29.1.2",
- "@jest/types": "^29.1.2",
+ "@jest/console": "^29.2.1",
+ "@jest/environment": "^29.2.2",
+ "@jest/test-result": "^29.2.1",
+ "@jest/transform": "^29.2.2",
+ "@jest/types": "^29.2.1",
"@types/node": "*",
"chalk": "^4.0.0",
- "emittery": "^0.10.2",
+ "emittery": "^0.13.1",
"graceful-fs": "^4.2.9",
- "jest-docblock": "^29.0.0",
- "jest-environment-node": "^29.1.2",
- "jest-haste-map": "^29.1.2",
- "jest-leak-detector": "^29.1.2",
- "jest-message-util": "^29.1.2",
- "jest-resolve": "^29.1.2",
- "jest-runtime": "^29.1.2",
- "jest-util": "^29.1.2",
- "jest-watcher": "^29.1.2",
- "jest-worker": "^29.1.2",
+ "jest-docblock": "^29.2.0",
+ "jest-environment-node": "^29.2.2",
+ "jest-haste-map": "^29.2.1",
+ "jest-leak-detector": "^29.2.1",
+ "jest-message-util": "^29.2.1",
+ "jest-resolve": "^29.2.2",
+ "jest-runtime": "^29.2.2",
+ "jest-util": "^29.2.1",
+ "jest-watcher": "^29.2.2",
+ "jest-worker": "^29.2.1",
"p-limit": "^3.1.0",
"source-map-support": "0.5.13"
},
@@ -9753,31 +9937,31 @@
}
},
"jest-runtime": {
- "version": "29.1.2",
- "resolved": "https://registry.npmjs.org/jest-runtime/-/jest-runtime-29.1.2.tgz",
- "integrity": "sha512-jr8VJLIf+cYc+8hbrpt412n5jX3tiXmpPSYTGnwcvNemY+EOuLNiYnHJ3Kp25rkaAcTWOEI4ZdOIQcwYcXIAZw==",
- "dev": true,
- "requires": {
- "@jest/environment": "^29.1.2",
- "@jest/fake-timers": "^29.1.2",
- "@jest/globals": "^29.1.2",
- "@jest/source-map": "^29.0.0",
- "@jest/test-result": "^29.1.2",
- "@jest/transform": "^29.1.2",
- "@jest/types": "^29.1.2",
+ "version": "29.2.2",
+ "resolved": "https://registry.npmjs.org/jest-runtime/-/jest-runtime-29.2.2.tgz",
+ "integrity": "sha512-TpR1V6zRdLynckKDIQaY41od4o0xWL+KOPUCZvJK2bu5P1UXhjobt5nJ2ICNeIxgyj9NGkO0aWgDqYPVhDNKjA==",
+ "dev": true,
+ "requires": {
+ "@jest/environment": "^29.2.2",
+ "@jest/fake-timers": "^29.2.2",
+ "@jest/globals": "^29.2.2",
+ "@jest/source-map": "^29.2.0",
+ "@jest/test-result": "^29.2.1",
+ "@jest/transform": "^29.2.2",
+ "@jest/types": "^29.2.1",
"@types/node": "*",
"chalk": "^4.0.0",
"cjs-module-lexer": "^1.0.0",
"collect-v8-coverage": "^1.0.0",
"glob": "^7.1.3",
"graceful-fs": "^4.2.9",
- "jest-haste-map": "^29.1.2",
- "jest-message-util": "^29.1.2",
- "jest-mock": "^29.1.2",
- "jest-regex-util": "^29.0.0",
- "jest-resolve": "^29.1.2",
- "jest-snapshot": "^29.1.2",
- "jest-util": "^29.1.2",
+ "jest-haste-map": "^29.2.1",
+ "jest-message-util": "^29.2.1",
+ "jest-mock": "^29.2.2",
+ "jest-regex-util": "^29.2.0",
+ "jest-resolve": "^29.2.2",
+ "jest-snapshot": "^29.2.2",
+ "jest-util": "^29.2.1",
"slash": "^3.0.0",
"strip-bom": "^4.0.0"
},
@@ -9791,9 +9975,9 @@
}
},
"jest-snapshot": {
- "version": "29.1.2",
- "resolved": "https://registry.npmjs.org/jest-snapshot/-/jest-snapshot-29.1.2.tgz",
- "integrity": "sha512-rYFomGpVMdBlfwTYxkUp3sjD6usptvZcONFYNqVlaz4EpHPnDvlWjvmOQ9OCSNKqYZqLM2aS3wq01tWujLg7gg==",
+ "version": "29.2.2",
+ "resolved": "https://registry.npmjs.org/jest-snapshot/-/jest-snapshot-29.2.2.tgz",
+ "integrity": "sha512-GfKJrpZ5SMqhli3NJ+mOspDqtZfJBryGA8RIBxF+G+WbDoC7HCqKaeAss4Z/Sab6bAW11ffasx8/vGsj83jyjA==",
"dev": true,
"requires": {
"@babel/core": "^7.11.6",
@@ -9802,23 +9986,23 @@
"@babel/plugin-syntax-typescript": "^7.7.2",
"@babel/traverse": "^7.7.2",
"@babel/types": "^7.3.3",
- "@jest/expect-utils": "^29.1.2",
- "@jest/transform": "^29.1.2",
- "@jest/types": "^29.1.2",
+ "@jest/expect-utils": "^29.2.2",
+ "@jest/transform": "^29.2.2",
+ "@jest/types": "^29.2.1",
"@types/babel__traverse": "^7.0.6",
"@types/prettier": "^2.1.5",
"babel-preset-current-node-syntax": "^1.0.0",
"chalk": "^4.0.0",
- "expect": "^29.1.2",
+ "expect": "^29.2.2",
"graceful-fs": "^4.2.9",
- "jest-diff": "^29.1.2",
- "jest-get-type": "^29.0.0",
- "jest-haste-map": "^29.1.2",
- "jest-matcher-utils": "^29.1.2",
- "jest-message-util": "^29.1.2",
- "jest-util": "^29.1.2",
+ "jest-diff": "^29.2.1",
+ "jest-get-type": "^29.2.0",
+ "jest-haste-map": "^29.2.1",
+ "jest-matcher-utils": "^29.2.2",
+ "jest-message-util": "^29.2.1",
+ "jest-util": "^29.2.1",
"natural-compare": "^1.4.0",
- "pretty-format": "^29.1.2",
+ "pretty-format": "^29.2.1",
"semver": "^7.3.5"
},
"dependencies": {
@@ -9834,12 +10018,12 @@
}
},
"jest-util": {
- "version": "29.1.2",
- "resolved": "https://registry.npmjs.org/jest-util/-/jest-util-29.1.2.tgz",
- "integrity": "sha512-vPCk9F353i0Ymx3WQq3+a4lZ07NXu9Ca8wya6o4Fe4/aO1e1awMMprZ3woPFpKwghEOW+UXgd15vVotuNN9ONQ==",
+ "version": "29.2.1",
+ "resolved": "https://registry.npmjs.org/jest-util/-/jest-util-29.2.1.tgz",
+ "integrity": "sha512-P5VWDj25r7kj7kl4pN2rG/RN2c1TLfYYYZYULnS/35nFDjBai+hBeo3MDrYZS7p6IoY3YHZnt2vq4L6mKnLk0g==",
"dev": true,
"requires": {
- "@jest/types": "^29.1.2",
+ "@jest/types": "^29.2.1",
"@types/node": "*",
"chalk": "^4.0.0",
"ci-info": "^3.2.0",
@@ -9848,17 +10032,17 @@
}
},
"jest-validate": {
- "version": "29.1.2",
- "resolved": "https://registry.npmjs.org/jest-validate/-/jest-validate-29.1.2.tgz",
- "integrity": "sha512-k71pOslNlV8fVyI+mEySy2pq9KdXdgZtm7NHrBX8LghJayc3wWZH0Yr0mtYNGaCU4F1OLPXRkwZR0dBm/ClshA==",
+ "version": "29.2.2",
+ "resolved": "https://registry.npmjs.org/jest-validate/-/jest-validate-29.2.2.tgz",
+ "integrity": "sha512-eJXATaKaSnOuxNfs8CLHgdABFgUrd0TtWS8QckiJ4L/QVDF4KVbZFBBOwCBZHOS0Rc5fOxqngXeGXE3nGQkpQA==",
"dev": true,
"requires": {
- "@jest/types": "^29.1.2",
+ "@jest/types": "^29.2.1",
"camelcase": "^6.2.0",
"chalk": "^4.0.0",
- "jest-get-type": "^29.0.0",
+ "jest-get-type": "^29.2.0",
"leven": "^3.1.0",
- "pretty-format": "^29.1.2"
+ "pretty-format": "^29.2.1"
},
"dependencies": {
"camelcase": {
@@ -9870,29 +10054,29 @@
}
},
"jest-watcher": {
- "version": "29.1.2",
- "resolved": "https://registry.npmjs.org/jest-watcher/-/jest-watcher-29.1.2.tgz",
- "integrity": "sha512-6JUIUKVdAvcxC6bM8/dMgqY2N4lbT+jZVsxh0hCJRbwkIEnbr/aPjMQ28fNDI5lB51Klh00MWZZeVf27KBUj5w==",
+ "version": "29.2.2",
+ "resolved": "https://registry.npmjs.org/jest-watcher/-/jest-watcher-29.2.2.tgz",
+ "integrity": "sha512-j2otfqh7mOvMgN2WlJ0n7gIx9XCMWntheYGlBK7+5g3b1Su13/UAK7pdKGyd4kDlrLwtH2QPvRv5oNIxWvsJ1w==",
"dev": true,
"requires": {
- "@jest/test-result": "^29.1.2",
- "@jest/types": "^29.1.2",
+ "@jest/test-result": "^29.2.1",
+ "@jest/types": "^29.2.1",
"@types/node": "*",
"ansi-escapes": "^4.2.1",
"chalk": "^4.0.0",
- "emittery": "^0.10.2",
- "jest-util": "^29.1.2",
+ "emittery": "^0.13.1",
+ "jest-util": "^29.2.1",
"string-length": "^4.0.1"
}
},
"jest-worker": {
- "version": "29.1.2",
- "resolved": "https://registry.npmjs.org/jest-worker/-/jest-worker-29.1.2.tgz",
- "integrity": "sha512-AdTZJxKjTSPHbXT/AIOjQVmoFx0LHFcVabWu0sxI7PAy7rFf8c0upyvgBKgguVXdM4vY74JdwkyD4hSmpTW8jA==",
+ "version": "29.2.1",
+ "resolved": "https://registry.npmjs.org/jest-worker/-/jest-worker-29.2.1.tgz",
+ "integrity": "sha512-ROHTZ+oj7sBrgtv46zZ84uWky71AoYi0vEV9CdEtc1FQunsoAGe5HbQmW76nI5QWdvECVPrSi1MCVUmizSavMg==",
"dev": true,
"requires": {
"@types/node": "*",
- "jest-util": "^29.1.2",
+ "jest-util": "^29.2.1",
"merge-stream": "^2.0.0",
"supports-color": "^8.0.0"
},
@@ -10369,9 +10553,9 @@
}
},
"pretty-format": {
- "version": "29.1.2",
- "resolved": "https://registry.npmjs.org/pretty-format/-/pretty-format-29.1.2.tgz",
- "integrity": "sha512-CGJ6VVGXVRP2o2Dorl4mAwwvDWT25luIsYhkyVQW32E4nL+TgW939J7LlKT/npq5Cpq6j3s+sy+13yk7xYpBmg==",
+ "version": "29.2.1",
+ "resolved": "https://registry.npmjs.org/pretty-format/-/pretty-format-29.2.1.tgz",
+ "integrity": "sha512-Y41Sa4aLCtKAXvwuIpTvcFBkyeYp2gdFWzXGA+ZNES3VwURIB165XO/z7CjETwzCCS53MjW/rLMyyqEnTtaOfA==",
"dev": true,
"requires": {
"@jest/schemas": "^29.0.0",
@@ -10697,32 +10881,12 @@
"has-flag": "^4.0.0"
}
},
- "supports-hyperlinks": {
- "version": "2.3.0",
- "resolved": "https://registry.npmjs.org/supports-hyperlinks/-/supports-hyperlinks-2.3.0.tgz",
- "integrity": "sha512-RpsAZlpWcDwOPQA22aCH4J0t7L8JmAvsCxfOSEwm7cQs3LshN36QaTkwd70DnBOXDWGssw2eUoc8CaRWT0XunA==",
- "dev": true,
- "requires": {
- "has-flag": "^4.0.0",
- "supports-color": "^7.0.0"
- }
- },
"svg-element-attributes": {
"version": "1.3.1",
"resolved": "https://registry.npmjs.org/svg-element-attributes/-/svg-element-attributes-1.3.1.tgz",
"integrity": "sha512-Bh05dSOnJBf3miNMqpsormfNtfidA/GxQVakhtn0T4DECWKeXQRQUceYjJ+OxYiiLdGe4Jo9iFV8wICFapFeIA==",
"dev": true
},
- "terminal-link": {
- "version": "2.1.1",
- "resolved": "https://registry.npmjs.org/terminal-link/-/terminal-link-2.1.1.tgz",
- "integrity": "sha512-un0FmiRUQNr5PJqy9kP7c40F5BOfpGlYTrxonDChEZB7pzZxRNp/bt+ymiy9/npwXya9KH99nJ/GXFIiUkYGFQ==",
- "dev": true,
- "requires": {
- "ansi-escapes": "^4.2.1",
- "supports-hyperlinks": "^2.0.0"
- }
- },
"test-exclude": {
"version": "6.0.0",
"resolved": "https://registry.npmjs.org/test-exclude/-/test-exclude-6.0.0.tgz",
diff --git a/package.json b/package.json
index 2a6e8e5..b68bcb3 100644
--- a/package.json
+++ b/package.json
@@ -1,42 +1,44 @@
{
- "name": "typescript-action",
- "version": "0.0.0",
- "private": true,
- "description": "TypeScript template action",
+ "name": "anka-actions-common",
+ "version": "1.0.0",
+ "private": false,
+ "description": "Anka actions common lib",
"main": "lib/main.js",
+ "types": "lib/main.d.js",
"scripts": {
"build": "tsc",
"format": "prettier --write '**/*.ts'",
"format-check": "prettier --check '**/*.ts'",
"lint": "eslint src/**/*.ts",
- "package": "ncc build --source-map --license licenses.txt",
- "test": "jest",
- "all": "npm run build && npm run format && npm run lint && npm run package && npm test"
+ "test": "jest --passWithNoTests",
+ "all": "npm run build && npm run format && npm run lint && npm test"
},
"repository": {
"type": "git",
- "url": "git+https://github.com/actions/typescript-action.git"
+ "url": "git+https://github.com/veertuinc/anka-actions-common.git"
},
"keywords": [
- "actions",
- "node",
- "setup"
+ "anka",
+ "actions"
],
- "author": "",
+ "author": "Veertu Inc.",
"license": "MIT",
"dependencies": {
"@actions/core": "^1.10.0",
+ "@octokit/core": "^4.1.0",
"@octokit/rest": "^19.0.5",
- "axios": "^1.1.2"
+ "axios": "^1.1.3"
},
"devDependencies": {
- "@types/node": "^18.8.5",
- "@typescript-eslint/parser": "^5.40.0",
+ "@types/http-server": "^0.12.1",
+ "@types/jest": "^29.2.0",
+ "@types/node": "^18.11.6",
+ "@typescript-eslint/parser": "^5.41.0",
"@vercel/ncc": "^0.34.0",
- "eslint": "^8.25.0",
+ "eslint": "^8.26.0",
"eslint-plugin-github": "^4.4.0",
- "eslint-plugin-jest": "^27.1.1",
- "jest": "^29.1.2",
+ "eslint-plugin-jest": "^27.1.3",
+ "jest": "^29.2.2",
"js-yaml": "^4.1.0",
"prettier": "2.7.1",
"ts-jest": "^29.0.3",
diff --git a/src/instance.ts b/src/instance.ts
new file mode 100644
index 0000000..dce3dd6
--- /dev/null
+++ b/src/instance.ts
@@ -0,0 +1,302 @@
+import * as axios from 'axios'
+import https from 'https'
+import {logDebug} from './log'
+
+export const API_STATUS_OK = 'OK'
+export const INSTANCE_STATE_STARTED = 'Started'
+export const INSTANCE_STATE_ERROR = 'Error'
+
+export type StartVMRequest = {
+ vmid: string
+ tag?: string
+ version?: number
+ name?: string
+ external_id?: string
+ count?: number
+ node_id?: string
+ startup_script?: string
+ startup_script_condition?: number
+ script_monitoring?: boolean
+ script_timeout?: number
+ script_fail_handler?: number
+ name_template?: string
+ group_id?: string
+ priority?: number
+ usb_device?: string
+ vcpu?: number
+ vram?: number
+ metadata?: object
+ mac_address?: string
+ vlan_tag?: string
+ video_controller?: string
+ csr_active_config?: string
+ hvapic?: string
+}
+
+export interface StartVMResponse {
+ status: string
+ message: string
+ body: string[]
+}
+
+interface Instance {
+ instance_id: string
+ instance_state: string
+ message?: string
+ anka_registry: string
+ vmid: string
+ tag: string
+ vminfo: {
+ uuid: string
+ name: string
+ cpu_cores: number
+ ram: string
+ status: string
+ node_id: string
+ host_ip: string
+ ip: string
+ tag: string
+ vnc_port: number
+ creation_date: string
+ stop_date: string
+ version: string
+ }
+ node_id: string
+ inflight_reqid: string
+ ts: string
+ cr_time: string
+ progress: number
+ external_id: string
+ arch: string
+ vlan: string
+ startup_script: {
+ return_code: number
+ did_timeout: boolean
+ stdout: string
+ stderr: string
+ }
+}
+
+export interface TerminateVMResponse {
+ status: string
+ message: string
+}
+
+export interface ListVMResponse {
+ status: string
+ message: string
+ body: Instance[]
+}
+
+export interface ListVMResponseSingle {
+ status: string
+ message: string
+ body: Instance
+}
+
+export class VM {
+ private client: axios.AxiosInstance
+
+ constructor(
+ baseURL: string,
+ rootToken?: string,
+ httpsAgentCa?: string,
+ httpsAgentCert?: string,
+ httpsAgentKey?: string,
+ httpsAgentPassphrase?: string,
+ httpsAgentSkipCertVerify?: boolean
+ ) {
+ const config: axios.CreateAxiosDefaults = {baseURL}
+
+ if (rootToken) {
+ config.auth = {
+ username: '',
+ password: rootToken
+ }
+ }
+
+ if (
+ httpsAgentCa ||
+ httpsAgentCert ||
+ httpsAgentKey ||
+ httpsAgentPassphrase ||
+ httpsAgentSkipCertVerify
+ ) {
+ const agentOpts: https.AgentOptions = {}
+
+ if (httpsAgentCa) {
+ agentOpts.ca = httpsAgentCa
+ }
+
+ if (httpsAgentCert) {
+ agentOpts.cert = httpsAgentCert
+ }
+
+ if (httpsAgentKey) {
+ agentOpts.key = httpsAgentKey
+ }
+
+ if (httpsAgentPassphrase) {
+ agentOpts.passphrase = httpsAgentPassphrase
+ }
+
+ if (httpsAgentSkipCertVerify) {
+ agentOpts.rejectUnauthorized = false
+ }
+
+ config.httpsAgent = new https.Agent(agentOpts)
+ }
+
+ this.client = axios.default.create(config)
+ }
+
+ async start(
+ actionId: string,
+ repoUrl: string,
+ runnerToken: string,
+ templateRunnerDir: string,
+ body: StartVMRequest
+ ): Promise {
+ const startupScriptWithEnv = `cd ${templateRunnerDir} \
+ && ./config.sh --url "${repoUrl}" --token "${runnerToken}" --labels "${actionId}" --runnergroup "Default" --name "${actionId}" --work "_work" \
+ && ./svc.sh install \
+ && ./svc.sh start`
+
+ logDebug(`startupScriptWithEnv: ${startupScriptWithEnv}`)
+
+ const reqBody = JSON.stringify(body)
+ logDebug(`StartVMRequest body: ${reqBody}`)
+
+ try {
+ const response = await this.client.post(
+ '/api/v1/vm',
+ reqBody
+ )
+ logDebug(`StartVMResponse ${JSON.stringify(response.data)}`)
+
+ if (response.data.status !== API_STATUS_OK) {
+ throw new Error(`API response status:${response.data.status}`)
+ }
+
+ if (!response.data.body.length) {
+ throw new Error(
+ `API response body: ${JSON.stringify(response.data.body)}`
+ )
+ }
+
+ return response.data.body[0]
+ } catch (error) {
+ throw createError(error)
+ }
+ }
+
+ async getState(vmid: string): Promise {
+ try {
+ const response = await this.client.get(
+ `/api/v1/vm?id=${encodeURIComponent(vmid)}`
+ )
+ logDebug(
+ `ListVMResponse status: ${response.status}; body: ${JSON.stringify(
+ response.data
+ )}`
+ )
+
+ if (response.data.status !== API_STATUS_OK) {
+ throw new Error(`API response status:${response.data.status}`)
+ }
+
+ if (!response.data.body.instance_state) {
+ throw new Error(
+ `API response body: ${JSON.stringify(response.data.body)}`
+ )
+ }
+
+ if (response.data.body.instance_state === INSTANCE_STATE_ERROR) {
+ let errorMsg = `VM failed to start: ${response.data.body.message}`
+
+ if (response.data.body.startup_script) {
+ errorMsg = `${errorMsg}: ${response.data.body.startup_script.stderr}`
+ }
+
+ throw new Error(errorMsg.trim())
+ }
+
+ return response.data.body.instance_state
+ } catch (error) {
+ throw createError(error)
+ }
+ }
+
+ async getInstanceId(actionId: string): Promise {
+ try {
+ const response = await this.client.get(`/api/v1/vm`)
+ logDebug(
+ `ListVMResponse status: ${response.status}; body: ${JSON.stringify(
+ response.data
+ )}`
+ )
+
+ if (response.data.status !== API_STATUS_OK) {
+ throw new Error(`API response status:${response.data.status}`)
+ }
+
+ const instances = response.data.body.filter(
+ instance => instance.external_id === actionId
+ )
+
+ if (instances.length) {
+ return instances[0].instance_id
+ }
+
+ return null
+ } catch (error) {
+ throw createError(error)
+ }
+ }
+
+ async terminate(instanceId: string): Promise {
+ try {
+ const response = await this.client.delete(
+ `/api/v1/vm`,
+ {
+ data: {
+ id: instanceId
+ }
+ }
+ )
+ logDebug(
+ `TerminateVMResponse status: ${response.status}; body: ${JSON.stringify(
+ response.data
+ )}`
+ )
+
+ if (response.data.status !== API_STATUS_OK) {
+ throw new Error(`API response status:${response.data.status}`)
+ }
+ } catch (error) {
+ throw createError(error)
+ }
+ }
+}
+
+function createError(error: any): Error {
+ if (error instanceof axios.AxiosError && error.response) {
+ if (error.response.status === 400) {
+ throw new Error(
+ `Controller responded with an error: ${JSON.stringify(
+ error.response.data
+ )}`
+ )
+ } else {
+ throw new Error(
+ `HTTP request failed: status: ${
+ error.response.status
+ }, data: ${JSON.stringify(error.response.data)}`
+ )
+ }
+ } else if (error instanceof axios.AxiosError && error.request) {
+ throw new Error(`Controller request failed: ${error.cause}`)
+ }
+
+ throw error
+}
diff --git a/src/log.ts b/src/log.ts
new file mode 100644
index 0000000..59236a3
--- /dev/null
+++ b/src/log.ts
@@ -0,0 +1,16 @@
+import * as core from '@actions/core'
+
+const logDecorator =
+ (
+ logFn: (message: string) => void,
+ decFn: (message: string) => string
+ ): ((message: string) => void) =>
+ (message: string) =>
+ logFn(decFn(message))
+
+const dateTimeDecorator = (m: string): string =>
+ `[${new Date().toLocaleString()}] ${m}`
+
+export const logDebug = logDecorator(core.debug, dateTimeDecorator)
+export const logInfo = logDecorator(core.info, dateTimeDecorator)
+export const logError = logDecorator(core.error, dateTimeDecorator)
diff --git a/src/main.ts b/src/main.ts
index 8b13789..7b1cafb 100644
--- a/src/main.ts
+++ b/src/main.ts
@@ -1 +1,4 @@
-
+export * from './instance'
+export * from './log'
+export * from './runner'
+export * from './timeout'
diff --git a/src/runner.ts b/src/runner.ts
new file mode 100644
index 0000000..e367ea2
--- /dev/null
+++ b/src/runner.ts
@@ -0,0 +1,50 @@
+import {Octokit} from '@octokit/rest'
+
+export class Runner {
+ private octokit: Octokit
+ private owner: string
+ private repo: string
+
+ constructor(octokit: Octokit, owner: string, repo: string) {
+ this.octokit = octokit
+ this.owner = owner
+ this.repo = repo
+ }
+
+ async getRunnerByName(name: string): Promise {
+ const runnerListResp =
+ await this.octokit.actions.listSelfHostedRunnersForRepo({
+ owner: this.owner,
+ repo: this.repo
+ })
+
+ const found = runnerListResp.data.runners.filter(
+ runner => runner.name === name
+ )
+
+ if (found.length) {
+ return found[0].id
+ }
+
+ return null
+ }
+
+ async createToken(): Promise {
+ const tokenResp = await this.octokit.actions.createRegistrationTokenForRepo(
+ {
+ owner: this.owner,
+ repo: this.repo
+ }
+ )
+
+ return tokenResp.data.token
+ }
+
+ async delete(runnerId: number): Promise {
+ await this.octokit.actions.deleteSelfHostedRunnerFromRepo({
+ owner: this.owner,
+ repo: this.repo,
+ runner_id: runnerId
+ })
+ }
+}
diff --git a/src/timeout.ts b/src/timeout.ts
new file mode 100644
index 0000000..0d038d2
--- /dev/null
+++ b/src/timeout.ts
@@ -0,0 +1,13 @@
+export class HardTimeoutError extends Error {}
+
+export const sleep = async (waitTimeInMs: number): Promise =>
+ new Promise(resolve => setTimeout(resolve, waitTimeInMs))
+
+export const timeout = async (ms: number, message: string): Promise =>
+ new Promise((_, reject) => {
+ const id = setTimeout(() => {
+ reject(new HardTimeoutError(message))
+ }, ms)
+ // let timer to not block Nodejs process to exit naturally
+ id.unref()
+ })
diff --git a/tsconfig.json b/tsconfig.json
index f6e7cb5..26d43bd 100644
--- a/tsconfig.json
+++ b/tsconfig.json
@@ -1,12 +1,12 @@
{
"compilerOptions": {
+ "declaration": true,
"target": "es6", /* Specify ECMAScript target version: 'ES3' (default), 'ES5', 'ES2015', 'ES2016', 'ES2017', 'ES2018', 'ES2019' or 'ESNEXT'. */
"module": "commonjs", /* Specify module code generation: 'none', 'commonjs', 'amd', 'system', 'umd', 'es2015', or 'ESNext'. */
"outDir": "./lib", /* Redirect output structure to the directory. */
- "rootDir": "./src", /* Specify the root directory of input files. Use to control the output directory structure with --outDir. */
"strict": true, /* Enable all strict type-checking options. */
"noImplicitAny": true, /* Raise error on expressions and declarations with an implied 'any' type. */
"esModuleInterop": true /* Enables emit interoperability between CommonJS and ES Modules via creation of namespace objects for all imports. Implies 'allowSyntheticDefaultImports'. */
},
- "exclude": ["node_modules", "**/*.test.ts"]
+ "exclude": ["node_modules", "**/*.test.ts", "./lib"]
}