├── .dockerignore
├── .gitignore
├── .vscode
└── settings.json
├── Dockerfile
├── LICENSE
├── README.md
├── builder
├── Dockerfile
├── build-functions.sh
└── build.sh
├── docker-compose.yml
├── ecosystem.config.js
├── frontend
├── .babelrc
├── assets
│ ├── building-status.svg
│ ├── error-status.svg
│ ├── failed-status.svg
│ ├── logo.png
│ ├── logo.svg
│ └── success-status.svg
├── package.json
├── src
│ ├── index.html
│ └── index.tsx
├── tsconfig.json
└── yarn.lock
├── install.sh
└── server
├── .env example
├── package.json
├── src
├── BuildProcesses
│ └── index.ts
├── build
│ └── index.ts
├── config.ts
├── docker
│ ├── buildImage.ts
│ ├── checkBuilderImage.ts
│ ├── createBuilderContainer.ts
│ ├── helpers.ts
│ └── index.ts
├── env.ts
├── index.ts
├── middlewares
│ ├── index.ts
│ └── withAuth.ts
├── routes
│ ├── authenticate.ts
│ ├── badge.ts
│ ├── build.ts
│ ├── builds.ts
│ ├── createSite.ts
│ ├── delSite.ts
│ ├── events.ts
│ └── getSite.ts
├── sql
│ ├── Event.ts
│ ├── Site.ts
│ └── index.ts
├── types
│ └── index.ts
└── util
│ └── index.ts
├── tsconfig.json
└── yarn.lock
/.dockerignore:
--------------------------------------------------------------------------------
1 | db
2 | mongodb
3 | sites-public
4 | builds-out
5 | node_modules
6 | dist
7 | .cache
8 | .vscode
9 | resources
10 | .gitignore
11 | LICENSE
12 | README.md
--------------------------------------------------------------------------------
/.gitignore:
--------------------------------------------------------------------------------
1 |
2 | # Created by https://www.gitignore.io/api/node,code,react,macos
3 | # Edit at https://www.gitignore.io/?templates=node,code,react,macos
4 |
5 | ### Code ###
6 | .vscode/*
7 | !.vscode/settings.json
8 | !.vscode/tasks.json
9 | !.vscode/launch.json
10 | !.vscode/extensions.json
11 |
12 | ### macOS ###
13 | # General
14 | .DS_Store
15 | .AppleDouble
16 | .LSOverride
17 |
18 | # Icon must end with two \r
19 | Icon
20 |
21 | # Thumbnails
22 | ._*
23 |
24 | # Files that might appear in the root of a volume
25 | .DocumentRevisions-V100
26 | .fseventsd
27 | .Spotlight-V100
28 | .TemporaryItems
29 | .Trashes
30 | .VolumeIcon.icns
31 | .com.apple.timemachine.donotpresent
32 |
33 | # Directories potentially created on remote AFP share
34 | .AppleDB
35 | .AppleDesktop
36 | Network Trash Folder
37 | Temporary Items
38 | .apdisk
39 |
40 | ### Node ###
41 | # Logs
42 | logs
43 | *.log
44 | npm-debug.log*
45 | yarn-debug.log*
46 | yarn-error.log*
47 | lerna-debug.log*
48 |
49 | # Diagnostic reports (https://nodejs.org/api/report.html)
50 | report.[0-9]*.[0-9]*.[0-9]*.[0-9]*.json
51 |
52 | # Runtime data
53 | pids
54 | *.pid
55 | *.seed
56 | *.pid.lock
57 |
58 | # Directory for instrumented libs generated by jscoverage/JSCover
59 | lib-cov
60 |
61 | # Coverage directory used by tools like istanbul
62 | coverage
63 | *.lcov
64 |
65 | # nyc test coverage
66 | .nyc_output
67 |
68 | # Grunt intermediate storage (https://gruntjs.com/creating-plugins#storing-task-files)
69 | .grunt
70 |
71 | # Bower dependency directory (https://bower.io/)
72 | bower_components
73 |
74 | # node-waf configuration
75 | .lock-wscript
76 |
77 | # Compiled binary addons (https://nodejs.org/api/addons.html)
78 | build/Release
79 |
80 | # Dependency directories
81 | node_modules/
82 | jspm_packages/
83 |
84 | # TypeScript v1 declaration files
85 | typings/
86 |
87 | # TypeScript cache
88 | *.tsbuildinfo
89 |
90 | # Optional npm cache directory
91 | .npm
92 |
93 | # Optional eslint cache
94 | .eslintcache
95 |
96 | # Optional REPL history
97 | .node_repl_history
98 |
99 | # Output of 'npm pack'
100 | *.tgz
101 |
102 | # Yarn Integrity file
103 | .yarn-integrity
104 |
105 | # dotenv environment variables file
106 | .env
107 | .env.test
108 |
109 | # parcel-bundler cache (https://parceljs.org/)
110 | .cache
111 |
112 | # next.js build output
113 | .next
114 |
115 | # nuxt.js build output
116 | .nuxt
117 |
118 | # react / gatsby
119 | public/
120 | dist/
121 |
122 | # vuepress build output
123 | .vuepress/dist
124 |
125 | # Serverless directories
126 | .serverless/
127 |
128 | # FuseBox cache
129 | .fusebox/
130 |
131 | # DynamoDB Local files
132 | .dynamodb/
133 |
134 | ### react ###
135 | .DS_*
136 | **/*.backup.*
137 | **/*.back.*
138 |
139 | node_modules
140 | bower_componets
141 |
142 | *.sublime*
143 |
144 | psd
145 | thumb
146 | sketch
147 |
148 | # End of https://www.gitignore.io/api/node,code,react,macos
149 |
150 | builder/tmp/**/*
151 | db
152 | .devcontainer/
153 | sites-public/
154 | build-cache/
--------------------------------------------------------------------------------
/.vscode/settings.json:
--------------------------------------------------------------------------------
1 | {
2 | "editor.formatOnSave": true
3 | }
--------------------------------------------------------------------------------
/Dockerfile:
--------------------------------------------------------------------------------
1 | FROM node:lts-alpine3.11
2 |
3 | WORKDIR /home
4 |
5 | COPY . .
6 |
7 | RUN cd frontend && \
8 | yarn install && \
9 | yarn build && \
10 | cd ../server && \
11 | yarn install && \
12 | yarn build
13 |
14 | ENV DOCKER=true
15 | ENV PORT=80
16 |
17 | EXPOSE 80
18 | VOLUME [ "/volumes/db", "/volumes/builds-out", "/var/run/docker.sock" ]
19 |
20 | ENTRYPOINT [ "node", "server/dist" ]
21 |
--------------------------------------------------------------------------------
/LICENSE:
--------------------------------------------------------------------------------
1 | MIT License
2 |
3 | Copyright (c) 2019 Alexander Hörl
4 |
5 | Permission is hereby granted, free of charge, to any person obtaining a copy
6 | of this software and associated documentation files (the "Software"), to deal
7 | in the Software without restriction, including without limitation the rights
8 | to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
9 | copies of the Software, and to permit persons to whom the Software is
10 | furnished to do so, subject to the following conditions:
11 |
12 | The above copyright notice and this permission notice shall be included in all
13 | copies or substantial portions of the Software.
14 |
15 | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
16 | IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
17 | FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
18 | AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
19 | LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
20 | OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
21 | SOFTWARE.
22 |
--------------------------------------------------------------------------------
/README.md:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 | JAMStackBox
6 |
7 |
8 | Your own self hosted continuous deployment solution for JAM Stack websites.
9 |
10 | It takes GitHub repositories containing GatsbyJS sites and builts them once an POST request to a specific URL has been called.
11 |
12 | The build happens inside a Docker container to assure that a stable enviroment is provided. Once the build is finished the static files are saved to a dedicated folder inside of `sites-public`.
13 |
14 | Feel free to contact me on Twitter [@alexanderhorl](https://twitter.com/alexanderhorl) or send me a mail (on my GitHub profile) if you like this project or would want to know more about it.
15 |
16 | ## ⚠️ Prerequisites
17 |
18 | - You need to have a running Docker instance on your machine.
19 | Currently only Docker on Linux or MacOS is supported.
20 | - Currently only sites based on [GatsbyJS](https://www.gatsbyjs.org) are supported.
21 | Feel free to contribute by editing the builder to support other static site generators.
22 |
23 | ## 🚀 Quick Start
24 |
25 | 1. **Download this repo**
26 |
27 | ```sh
28 | git clone https://github.com/AlexanderProd/jam-stack-box
29 | ```
30 |
31 | 2. **Install packages and build server**
32 |
33 | Simply run the install script in the downloaded directory.
34 |
35 | ```sh
36 | $ bash install.sh
37 | ```
38 |
39 | 3. **Create .env file from example**
40 |
41 | Use the `.env example` file to a create a file called `.env` in the server directory. This file contains all the necessary enviroment variables like the admin password.
42 |
43 | 4. **Start the server process**
44 |
45 | The server process is a NodeJS server listening to a specific port, default `3000`.
46 | You can change the port by providing a `PORT` enviroment variable.
47 |
48 | The server process can be started manually.
49 |
50 | ```sh
51 | $ node server/dist/index.js
52 | ```
53 |
54 | Or using the [PM2 process manager](https://pm2.keymetrics.io) by running the following command in the downloaded directory.
55 |
56 | ```sh
57 | $ pm2 start
58 | ```
59 |
60 | or
61 |
62 | ```sh
63 | $ pm2 start --env production
64 | ```
65 |
66 | ## Usage
67 |
68 | Since this project is currently in development theres no frontend to control your sites yet. Though you can still use it simply by doing requests agains the rest server.
69 |
70 | When a new site gets added all parameters get saves to the DB and the sites gets a unique 6 digit alphanumeric string as ID.
71 |
72 | A new site gets created by posting a POST request against `/site` and a build gets triggered with a POST to `/build/[id]`.
73 |
74 | ## REST Endpoints
75 |
76 | The most important API endpoints are the following, checkout index.js in the server directory for the rest.
77 | The default development port is 3000. It can be changed with a either PORT enviroment variable or in the config file in the server directory.
78 |
79 | ### POST `/site`
80 |
81 | Creates a new site instance and saves it to the database, returns the id of the site.
82 | Expects content type `x-www-form-urlencoded`.
83 |
84 | | field | required | description |
85 | | ------ | -------- | ------------------------------------------------------------------------------------------------------------------------- |
86 | | name | true | Name of the site, only used for front-end purposes. |
87 | | source | true | GitHub link to a repository with the site content.
( e.g. https://github.com/AlexanderProd/gatsby-shopify-starter ) |
88 |
89 | If you want to use a private repo as source you have to supply a GitHub OAuth token in the source URL, like this. `https://@github.com/owner/repo.git`. JamStackBox is using [this technique](https://docs.github.com/en/github/extending-github/git-automation-with-oauth-tokens) to clone private repos.
90 | You can read how to create a personal OAuth token [here](https://docs.github.com/en/github/authenticating-to-github/keeping-your-account-and-data-secure/creating-a-personal-access-token).
91 |
92 | ### POST `/build/[id or name]`
93 |
94 | Triggers a new build for the site with the ID.
95 |
96 | ### GET `/sites`
97 |
98 | Returns a JSON array with all sites in the database.
99 |
100 | ### GET `/sites/[id]`
101 |
102 | Returns all details of a specific site.
103 |
104 | ### DELETE `/site/[id]`
105 |
106 | Deletes the site with given ID.
107 |
108 | ### GET `/badge/[id or name]`
109 |
110 | Returns an svg image with the current state of a site, for example building or success.
111 |
112 |
113 |
114 | ## 📌 ToDo
115 |
116 | - [x] Use dynamic NodeJS version in Builder using NVM.
117 | - [ ] Remote Deployment
118 | - [ ] Add frontend to control sites and builds.
119 | - [ ] Add support for other static site generators than Gatsby.
120 | - [ ] Implement a message broker.
121 | - [x] Deploy status badge.
122 | - [x] Split server and builder into dedicated docker containers.
123 |
--------------------------------------------------------------------------------
/builder/Dockerfile:
--------------------------------------------------------------------------------
1 | FROM ubuntu:20.04
2 |
3 | LABEL maintainer="@alexanderhorl"
4 |
5 | ENV LANGUAGE=en_US:en
6 | ENV LANG=en_US.UTF-8
7 | ENV LC_ALL=en_US.UTF-8
8 |
9 | RUN export DEBIAN_FRONTEND=noninteractive && \
10 | apt-get -y update && \
11 | apt-get install -y --no-install-recommends software-properties-common language-pack-en-base apt-transport-https && \
12 | echo 'Acquire::Languages {"none";};' > /etc/apt/apt.conf.d/60language && \
13 | echo 'LANG="en_US.UTF-8"' > /etc/default/locale && \
14 | echo 'LANGUAGE="en_US:en"' >> /etc/default/locale && \
15 | locale-gen en_US.UTF-8 && \
16 | update-locale en_US.UTF-8 && \
17 | add-apt-repository -y ppa:git-core/ppa && \
18 | #add-apt-repository -y ppa:rwky/graphicsmagick && \
19 | add-apt-repository -y ppa:deadsnakes/ppa && \
20 | apt-get -y update && \
21 | apt-get install -y --no-install-recommends \
22 | advancecomp \
23 | apt-utils \
24 | autoconf \
25 | automake \
26 | bison \
27 | build-essential \
28 | bzr \
29 | cmake \
30 | curl \
31 | doxygen \
32 | elixir \
33 | expect \
34 | fontconfig \
35 | fontconfig-config \
36 | g++ \
37 | gawk \
38 | git \
39 | git-lfs \
40 | gifsicle \
41 | gobject-introspection \
42 | graphicsmagick \
43 | graphviz \
44 | gtk-doc-tools \
45 | gnupg2 \
46 | imagemagick \
47 | jpegoptim \
48 | jq \
49 | libasound2 \
50 | libcurl4 \
51 | libenchant1c2a \
52 | libexif-dev \
53 | libffi-dev \
54 | libfontconfig1 \
55 | libgconf-2-4 \
56 | libgd-dev \
57 | libgdbm-dev \
58 | libgif-dev \
59 | libglib2.0-dev \
60 | libgmp3-dev \
61 | libgsl-dev \
62 | libgtk-3-0 \
63 | libgtk2.0-0 \
64 | libicu-dev \
65 | libimage-exiftool-perl \
66 | libjpeg-progs \
67 | libjpeg-turbo8-dev \
68 | libmagickwand-dev \
69 | libmcrypt-dev \
70 | libncurses5-dev \
71 | libnss3 \
72 | libreadline6-dev \
73 | librsvg2-bin \
74 | libsm6 \
75 | libsqlite3-dev \
76 | libssl-dev \
77 | libtiff5-dev \
78 | libwebp-dev \
79 | libxml2-dev \
80 | libxrender1 \
81 | libxslt-dev \
82 | libxss1 \
83 | libxtst6 \
84 | libyaml-dev \
85 | mercurial \
86 | nasm \
87 | optipng \
88 | pngcrush \
89 | rsync \
90 | software-properties-common \
91 | strace \
92 | swig \
93 | tree \
94 | unzip \
95 | xfonts-base \
96 | xfonts-75dpi \
97 | xvfb \
98 | zip
99 |
100 | ARG user=jamstackbox
101 | ARG group=jamstackbox
102 | ARG uid=1000
103 | ARG gid=1000
104 |
105 | RUN groupadd -g ${gid} ${group}
106 | RUN useradd -u ${uid} -g ${group} -s /bin/bash -m ${user}
107 |
108 | USER ${uid}:${gid}
109 |
110 | RUN curl -o- https://raw.githubusercontent.com/nvm-sh/nvm/v0.39.3/install.sh | bash && \
111 | export NVM_DIR="$HOME/.nvm" && \
112 | [ -s "$NVM_DIR/nvm.sh" ] && \. "$NVM_DIR/nvm.sh" && \
113 | [ -s "$NVM_DIR/bash_completion" ] && \. "$NVM_DIR/bash_completion" && \
114 | nvm install --lts && \
115 | npm install -g node-gyp
116 |
117 | WORKDIR /home/${user}
118 |
119 | COPY . .
120 |
121 | VOLUME [ "/sites-public", "/build-cache" ]
122 |
123 | CMD [ "./build.sh" ]
--------------------------------------------------------------------------------
/builder/build-functions.sh:
--------------------------------------------------------------------------------
1 | #!/bin/bash
2 |
3 | run_custom_command() {
4 | if $BUILD_COMMAND; then
5 | echo "Successfully build with custom command \"$BUILD_COMMAND\"."
6 | else
7 | echo "Custom build command \"$BUILD_COMMAND\" failed."
8 | exit 1
9 | fi
10 | }
11 |
12 | link_node_modules() {
13 | if ! mkdir -p /build-cache/$SITE_ID/node_modules; then
14 | echo "Creating node_modules cache failed!"
15 | exit 1
16 | fi
17 |
18 | if ! ln -s /build-cache/$SITE_ID/node_modules $(pwd)/node_modules; then
19 | echo "Linking node_modules cache failed!"
20 | exit 1
21 | fi
22 | }
23 |
24 | run_yarn() {
25 | if ! npm install -g yarn; then
26 | echo "Failed installing yarn!"
27 | exit 1
28 | fi
29 |
30 | if yarn install; then
31 | echo "Sucessfully installed packages with yarn."
32 | else
33 | echo "Installing packages with yarn $(yarn --version) failed."
34 | exit 1
35 | fi
36 |
37 | if [ "$BUILD_COMMAND" != "undefined" ]; then
38 | run_custom_command
39 | else
40 | if yarn build; then
41 | echo "Sucessfully build with yarn."
42 | else
43 | echo "Build with yarn failed."
44 | exit 1
45 | fi
46 | fi
47 | }
48 |
49 | run_npm() {
50 | if npm install; then
51 | echo "Sucessfully installed packages with npm."
52 | else
53 | echo "Installing packages with npm ($(npm --version)) failed."
54 | exit 1
55 | fi
56 |
57 | if [ "$BUILD_COMMAND" != "undefined" ]; then
58 | run_custom_command
59 | else
60 | if npm run build; then
61 | echo "Sucessfully build with npm."
62 | else
63 | echo "Build with npm failed."
64 | exit 1
65 | fi
66 | fi
67 | }
68 |
69 | switch_node_version() {
70 | if ! nvm install $NODE_VERSION; then
71 | echo "Switching to node version $NODE_VERSION failed!"
72 | echo "Using node version $(node -v)."
73 | fi
74 | }
75 |
76 | copy_build_cache() {
77 | if rsync -aru --delete $(pwd)/.cache /build-cache/$SITE_ID; then
78 | echo "Sucessfully copied .cache to /build-cache/$SITE_ID."
79 | else
80 | echo "Copying .cache to /build-cache/$SITE_ID failed!"
81 | fi
82 |
83 | if rsync -aru --delete $(pwd)/$BUILD_DIR /build-cache/$SITE_ID; then
84 | echo "Sucessfully copied $BUILD_DIR to /build-cache/$SITE_ID."
85 | else
86 | echo "Copying $BUILD_DIR to /build-cache/$SITE_ID failed!"
87 | fi
88 | }
89 |
90 | restore_build_cache() {
91 | if rsync -aru --delete /build-cache/$SITE_ID/.cache $(pwd); then
92 | echo "Sucessfully restored .cache from /build-cache/$SITE_ID."
93 | else
94 | echo "Restoring .cache from /build-cache/$SITE_ID failed!"
95 | fi
96 |
97 | if rsync -aru --delete /build-cache/$SITE_ID/$BUILD_DIR $(pwd); then
98 | echo "Sucessfully restored $BUILD_DIR from /build-cache/$SITE_ID."
99 | else
100 | echo "Restoring $BUILD_DIR from /build-cache/$SITE_ID failed!"
101 | fi
102 | }
103 |
104 | deploy_files() {
105 | if ! mkdir -p $DEPLOY_DIR; then
106 | echo "Creating $DEPLOY_DIR failed!"
107 | exit 1
108 | fi
109 |
110 | if rsync -aru --delete ./$BUILD_DIR/ $DEPLOY_DIR; then
111 | echo "Sucessfully deployed!"
112 | exit 0
113 | else
114 | echo "Deploy failed!"
115 | exit 1
116 | fi
117 | }
--------------------------------------------------------------------------------
/builder/build.sh:
--------------------------------------------------------------------------------
1 | #!/bin/bash
2 |
3 | export LANG=en_US.UTF-8
4 | export LANGUAGE=en_US:en
5 | export LC_ALL=en_US.UTF-8
6 | export FORCE_COLOR=0
7 | export NO_COLOR=1
8 |
9 | . $HOME/.nvm/nvm.sh
10 | . ./build-functions.sh --source-only
11 |
12 | main() {
13 | if [ "$REPO_URL" == "undefined" ]; then
14 | echo "No repository URL provided."
15 | exit 0
16 | fi
17 |
18 | mkdir $SITE_ID
19 | cd $SITE_ID
20 |
21 | echo git clone $REPO_URL
22 | if git clone $REPO_URL .; then
23 | echo "Cloned $REPO_URL."
24 | else
25 | echo "Cloning $REPO_URL failed!"
26 | exit 1
27 | fi
28 |
29 | if [ "$USE_CACHE" == "true" ]; then
30 | echo "Using cache for $SITE_ID."
31 | link_node_modules
32 | restore_build_cache
33 | fi
34 |
35 | if [ "$NODE_VERSION" != "undefined" ]; then
36 | switch_node_version
37 | fi
38 |
39 | if [ -f "yarn.lock" ]; then
40 | run_yarn
41 | else
42 | run_npm
43 | fi
44 |
45 | copy_build_cache
46 | deploy_files
47 | }
48 |
49 | main "$@"
50 |
--------------------------------------------------------------------------------
/docker-compose.yml:
--------------------------------------------------------------------------------
1 | version: "3.7"
2 | services:
3 | server:
4 | build: .
5 | restart: unless-stopped
6 | ports:
7 | - "3000:80"
8 | volumes:
9 | - "/var/run/docker.sock:/var/run/docker.sock"
10 | - "./db:/home/db"
11 | - "./builds-out:/home/builds-out"
12 | - "./sites-public:/home/sites-public"
13 |
14 | mongo:
15 | image: mongo
16 | volumes:
17 | - "./mongodb:/data/db"
18 |
--------------------------------------------------------------------------------
/ecosystem.config.js:
--------------------------------------------------------------------------------
1 | module.exports = {
2 | apps: [
3 | {
4 | name: "JAMStackBox",
5 | script: "server/dist/index.js",
6 |
7 | // Options reference: https://pm2.io/doc/en/runtime/reference/ecosystem-file/
8 | instances: 1,
9 | autorestart: true,
10 | watch: false,
11 | max_memory_restart: "1G",
12 | log_date_format: "HH:mm:ss DD-MM-YY",
13 | },
14 | ],
15 | };
16 |
--------------------------------------------------------------------------------
/frontend/.babelrc:
--------------------------------------------------------------------------------
1 | {
2 | "presets": ["env", "react"]
3 | }
4 |
--------------------------------------------------------------------------------
/frontend/assets/building-status.svg:
--------------------------------------------------------------------------------
1 |
70 |
--------------------------------------------------------------------------------
/frontend/assets/error-status.svg:
--------------------------------------------------------------------------------
1 |
57 |
--------------------------------------------------------------------------------
/frontend/assets/failed-status.svg:
--------------------------------------------------------------------------------
1 |
62 |
--------------------------------------------------------------------------------
/frontend/assets/logo.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/AlexanderProd/jam-stack-box/28bd4744dd5fb09414f83c55e09263010c3a9e05/frontend/assets/logo.png
--------------------------------------------------------------------------------
/frontend/assets/logo.svg:
--------------------------------------------------------------------------------
1 |
2 |
3 |
133 |
--------------------------------------------------------------------------------
/frontend/assets/success-status.svg:
--------------------------------------------------------------------------------
1 |
66 |
--------------------------------------------------------------------------------
/frontend/package.json:
--------------------------------------------------------------------------------
1 | {
2 | "name": "frontend",
3 | "version": "1.0.0",
4 | "main": "index.js",
5 | "license": "MIT",
6 | "scripts": {
7 | "dev": "parcel src/index.html",
8 | "build": "rm -rf dist .cache && parcel build src/index.html --public-url ./"
9 | },
10 | "dependencies": {
11 | "@emotion/core": "^10.0.22",
12 | "@emotion/styled": "^10.0.23",
13 | "react": "^16.12.0",
14 | "react-dom": "^16.12.0"
15 | },
16 | "devDependencies": {
17 | "@types/react": "^16.9.19",
18 | "@types/react-dom": "^16.9.5",
19 | "babel-core": "^6.26.3",
20 | "babel-preset-env": "^1.7.0",
21 | "babel-preset-react": "^6.24.1",
22 | "parcel-bundler": "^1.12.4",
23 | "typescript": "^3.7.5"
24 | },
25 | "prettier": {
26 | "trailingComma": "es5",
27 | "tabWidth": 2,
28 | "semi": false,
29 | "singleQuote": true,
30 | "arrowParens": "avoid"
31 | }
32 | }
33 |
--------------------------------------------------------------------------------
/frontend/src/index.html:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 | React Parcel Demo
6 |
7 |
8 |
9 |
10 |
11 |
12 |
--------------------------------------------------------------------------------
/frontend/src/index.tsx:
--------------------------------------------------------------------------------
1 | import React from 'react'
2 | import styled from '@emotion/styled'
3 | import { render } from 'react-dom'
4 |
5 | const Hello = styled.h1`
6 | color: blue;
7 | `
8 |
9 | const App = () => {
10 | return (
11 |
12 | Hello Parcel
13 |
14 | )
15 | }
16 |
17 | render(, document.getElementById('app'))
18 |
--------------------------------------------------------------------------------
/frontend/tsconfig.json:
--------------------------------------------------------------------------------
1 | {
2 | "compilerOptions": {
3 | "target": "es5",
4 | "module": "es2015",
5 | "jsx": "react",
6 | "moduleResolution": "node",
7 | "allowSyntheticDefaultImports": true,
8 | "lib": ["dom", "es5", "es6"]
9 | },
10 | "include": ["src/**/*"]
11 | }
12 |
--------------------------------------------------------------------------------
/install.sh:
--------------------------------------------------------------------------------
1 | cd frontend
2 | yarn install
3 | yarn build
4 |
5 | cd ../server
6 | yarn install
7 | yarn build
--------------------------------------------------------------------------------
/server/.env example:
--------------------------------------------------------------------------------
1 | PORT=3000
2 | SECRET=yHSHGuYkD4YMryOU1mJUId4zUihMNg
3 | PASSWORD=admin
4 | NODE_ENV=development
--------------------------------------------------------------------------------
/server/package.json:
--------------------------------------------------------------------------------
1 | {
2 | "name": "server",
3 | "version": "1.0.0",
4 | "main": "src/index.js",
5 | "license": "MIT",
6 | "scripts": {
7 | "start": "yarn build && DOCKER=false node dist/index.js",
8 | "build": "rm -rf dist; tsc",
9 | "dev": "DOCKER=false ts-node-dev --respawn ./src/index.ts"
10 | },
11 | "dependencies": {
12 | "@types/dockerode": "^2.5.21",
13 | "@types/express": "4.17.8",
14 | "@types/jsonwebtoken": "^8.3.8",
15 | "body-parser": "^1.20.2",
16 | "dockerode": "^3.1.0",
17 | "dotenv": "^8.2.0",
18 | "express": "^4.19.2",
19 | "jsonwebtoken": "^8.5.1",
20 | "mariadb": "^3.3.1",
21 | "reflect-metadata": "^0.1.13",
22 | "sequelize": "^6.37.3",
23 | "sequelize-typescript": "^2.1.6",
24 | "sqlite3": "^5.1.7"
25 | },
26 | "devDependencies": {
27 | "@types/validator": "^13.12.0",
28 | "prettier": "^3.3.3",
29 | "ts-node": "^10.9.2",
30 | "ts-node-dev": "^2.0.0",
31 | "typescript": "^5.5.4"
32 | },
33 | "prettier": {
34 | "trailingComma": "es5",
35 | "tabWidth": 2,
36 | "semi": true,
37 | "singleQuote": true,
38 | "arrowParens": "avoid"
39 | }
40 | }
41 |
--------------------------------------------------------------------------------
/server/src/BuildProcesses/index.ts:
--------------------------------------------------------------------------------
1 | import { BuildProcess } from '../types';
2 |
3 | const BuildProcesses = (() => {
4 | let processes: BuildProcess = {};
5 |
6 | const get = (): BuildProcess => {
7 | return processes;
8 | };
9 |
10 | const set = (process: BuildProcess) => {
11 | processes = {
12 | ...processes,
13 | ...process,
14 | };
15 | };
16 |
17 | const del = (id: string) => {
18 | delete processes[id];
19 | };
20 |
21 | return { get, set, del };
22 | })();
23 |
24 | export default BuildProcesses;
25 |
--------------------------------------------------------------------------------
/server/src/build/index.ts:
--------------------------------------------------------------------------------
1 | import { exec } from 'child_process';
2 | import { join } from 'path';
3 |
4 | import BuildProcesses from '../BuildProcesses';
5 | import { createBuilderContainer } from '../docker';
6 | import { BuildEnvVars } from '../types';
7 | import { saveBuildLog } from '../util';
8 | import { Site, Event } from '../sql';
9 | import { docker } from '..';
10 |
11 | const startBuild = async (site: Site) => {
12 | const { id, envVariables } = site;
13 |
14 | const buildEnvVars: BuildEnvVars = {
15 | SITE_ID: site.id ? site.id : 'undefined',
16 | REPO_URL: site.source ? site.source : 'undefined',
17 | BUILD_COMMAND: site.buildCommand ? site.buildCommand : 'undefined',
18 | NODE_VERSION: site.nodeVersion ? site.nodeVersion : 'undefined',
19 | BUILD_DIR: site.buildDir ? site.buildDir : 'public',
20 | DEPLOY_DIR: join('/sites-public/', site.name),
21 | GITHUB_ACCESS_TOKEN: site.githubAccessToken
22 | ? site.githubAccessToken
23 | : 'undefined',
24 | USE_CACHE: true,
25 | ...envVariables,
26 | };
27 |
28 | let event: Event;
29 |
30 | /**
31 | * Check if theres already one build process for this site running.
32 | * If the active build process is in prepare stage return
33 | * otherwise stop running build and start a new one.
34 | */
35 | if (BuildProcesses.get()[id] !== undefined) {
36 | const runningBuild = BuildProcesses.get()[id];
37 |
38 | if (runningBuild.status === 'preparing') {
39 | return;
40 | }
41 |
42 | BuildProcesses.set({
43 | [id]: { ...runningBuild, status: 'preparing' },
44 | });
45 | event = await site.$create('event', {
46 | siteId: site.id,
47 | status: 'preparing',
48 | });
49 |
50 | try {
51 | const container = docker.getContainer(runningBuild.container.id);
52 | await container.stop();
53 | await runningBuild.event.update({ status: 'stopped' });
54 | BuildProcesses.del(id);
55 | } catch (error) {
56 | console.error(error);
57 | }
58 | } else {
59 | event = await site.$create('event', {
60 | siteId: site.id,
61 | status: 'preparing',
62 | });
63 | }
64 |
65 | try {
66 | const container = await createBuilderContainer(
67 | buildEnvVars,
68 | site.containerHostConfig,
69 | site.containerCreationOptions
70 | );
71 | const stream = await container.attach({
72 | stream: true,
73 | stdout: true,
74 | stderr: true,
75 | tty: false,
76 | });
77 |
78 | BuildProcesses.set({ [id]: { status: 'building', container, event } });
79 | await event.update({ status: 'building' });
80 |
81 | saveBuildLog(event, stream);
82 |
83 | stream.on('end', async () => {
84 | BuildProcesses.del(id);
85 | const {
86 | State: { ExitCode },
87 | } = await container.inspect();
88 |
89 | if (ExitCode === 0) {
90 | event.update({
91 | status: 'success',
92 | });
93 |
94 | if (site.postBuildCommand) {
95 | exec(site.postBuildCommand);
96 | }
97 |
98 | container.remove();
99 | } else {
100 | if (event.status !== 'stopped')
101 | event.update({
102 | status: 'failed',
103 | });
104 |
105 | container.remove();
106 | }
107 | });
108 | stream.on('error', code => {
109 | const errorMessage = `Container returned error code ${code}`;
110 |
111 | console.log(errorMessage);
112 | BuildProcesses.del(id);
113 | event.update({ status: 'failed', description: errorMessage });
114 |
115 | container.remove();
116 | });
117 |
118 | container.start();
119 | } catch (error) {
120 | console.error(error);
121 | }
122 | };
123 |
124 | export default startBuild;
125 |
--------------------------------------------------------------------------------
/server/src/config.ts:
--------------------------------------------------------------------------------
1 | import { join } from 'path';
2 |
3 | const constants = {
4 | PORT: process.env.PORT ? process.env.PORT : 3000,
5 | FRONTEND_DIR: join(__dirname, '/../../frontend/dist/'),
6 | BUILDER_PATH: join(__dirname, '/../../builder/'),
7 | SITES_DIR: join(__dirname, '/../../sites-public/'),
8 | BUILD_CACHE_DIR: join(__dirname, '/../../build-cache/'),
9 | BUILDER_IMAGE_TAG: 'jamstackbox_builder',
10 | DB_DIALECT: process.env.DB_DIALECT ? process.env.DB_DIALECT : 'sqlite',
11 | DB_DIR: join(__dirname, '/../../db/'),
12 | DB_HOST: process.env.DB_HOST ? process.env.DB_HOST : undefined,
13 | DB_NAME: process.env.DB_NAME ? process.env.DB_NAME : 'main.db',
14 | DB_PORT: process.env.DB_PORT ? process.env.DB_PORT : 3306,
15 | DB_USER: process.env.DB_USER ? process.env.DB_USER : undefined,
16 | DB_PASSWORD: process.env.DB_PASSWORD ? process.env.DB_PASSWORD : undefined,
17 | MIGRATE_DB: process.env.MIGRATE_DB ? process.env.MIGRATE_DB : 'false',
18 | };
19 |
20 | export default constants;
21 |
--------------------------------------------------------------------------------
/server/src/docker/buildImage.ts:
--------------------------------------------------------------------------------
1 | import { docker } from '..';
2 | import constants from '../config';
3 |
4 | const buildImage = (): Promise => {
5 | return new Promise(async (resolve, reject) => {
6 | try {
7 | const stream = await docker.buildImage(
8 | {
9 | context: constants.BUILDER_PATH,
10 | src: ['Dockerfile', 'build.sh', 'build-functions.sh'],
11 | },
12 | {
13 | t: constants.BUILDER_IMAGE_TAG,
14 | }
15 | );
16 |
17 | stream.setEncoding('utf8');
18 | stream.on('data', data => {
19 | try {
20 | console.log(JSON.parse(data.toString()).stream);
21 | } catch (error) {
22 | return;
23 | }
24 | });
25 |
26 | stream.on('end', () => {
27 | resolve();
28 | });
29 | } catch (error) {
30 | reject(error);
31 | }
32 | });
33 | };
34 |
35 | export default buildImage;
36 |
--------------------------------------------------------------------------------
/server/src/docker/checkBuilderImage.ts:
--------------------------------------------------------------------------------
1 | import { docker } from '..';
2 |
3 | import constants from '../config';
4 |
5 | const checkBuilderImage = (): Promise => {
6 | return new Promise(async (resolve, reject) => {
7 | try {
8 | const dockerImages = await docker.listImages();
9 | dockerImages.forEach(image => {
10 | if (image.RepoTags[0].includes(constants.BUILDER_IMAGE_TAG)) {
11 | resolve(true);
12 | }
13 | resolve(false);
14 | });
15 | resolve(false);
16 | } catch (error) {
17 | reject(error);
18 | }
19 | });
20 | };
21 |
22 | export default checkBuilderImage;
23 |
--------------------------------------------------------------------------------
/server/src/docker/createBuilderContainer.ts:
--------------------------------------------------------------------------------
1 | import { Container, HostConfig, ContainerCreateOptions } from 'dockerode';
2 |
3 | import { docker } from '..';
4 | import constants from '../config';
5 | import { BuildEnvVars } from '../types';
6 |
7 | const createBuilderContainer = (
8 | env: BuildEnvVars,
9 | hostConfig?: HostConfig,
10 | containerCreationOptions?: ContainerCreateOptions
11 | ): Promise => {
12 | const envStrings: Array = [];
13 |
14 | for (const [key, value] of Object.entries(env)) {
15 | envStrings.push(`${key}=${value}`);
16 | }
17 |
18 | return new Promise(async (resolve, reject) => {
19 | try {
20 | const container = await docker.createContainer({
21 | Image: constants.BUILDER_IMAGE_TAG,
22 | Env: envStrings,
23 | Volumes: {
24 | '/sites-public': {},
25 | '/build-cache': {},
26 | },
27 | HostConfig: {
28 | ...hostConfig,
29 | Binds: [
30 | `${constants.SITES_DIR}:/sites-public`,
31 | `${constants.BUILD_CACHE_DIR}:/build-cache`,
32 | ],
33 | AutoRemove: false,
34 | },
35 | ...containerCreationOptions,
36 | });
37 |
38 | resolve(container);
39 | } catch (error) {
40 | console.error(error);
41 | reject(error);
42 | }
43 | });
44 | };
45 |
46 | export default createBuilderContainer;
47 |
--------------------------------------------------------------------------------
/server/src/docker/helpers.ts:
--------------------------------------------------------------------------------
1 | import { exec } from 'child_process';
2 |
3 | import { docker } from '../';
4 |
5 | /**
6 | * Returns own Docker container ID.
7 | */
8 | export const getSelfCID = (): Promise => {
9 | return new Promise((resolve, reject) => {
10 | exec('cat /etc/hostname', (error, stdout) => {
11 | if (error) {
12 | reject(error);
13 | }
14 | resolve(stdout);
15 | });
16 | });
17 | };
18 |
19 | /**
20 | * Returns the path on the host machine for a given volume directory.
21 | * @param destination The path to the mounted volume inside the container: e.g. /db
22 | */
23 | export const getHostMountPath = (): Promise => {
24 | return new Promise(async (resolve, reject) => {
25 | try {
26 | const thisContainer = docker.getContainer(await getSelfCID());
27 |
28 | resolve(thisContainer.id);
29 | /* const { Mounts } = await thisContainer.inspect();
30 |
31 | Mounts.forEach(({ Destination, Source }) => {
32 | if (Destination === destination) {
33 | resolve(Source);
34 | }
35 | });
36 | reject(new Error(`No volume with destination ${destination} found`)); */
37 | } catch (error) {
38 | reject(error);
39 | }
40 | });
41 | };
42 |
--------------------------------------------------------------------------------
/server/src/docker/index.ts:
--------------------------------------------------------------------------------
1 | import checkBuilderImage from './checkBuilderImage';
2 | import buildImage from './buildImage';
3 | import createBuilderContainer from './createBuilderContainer';
4 |
5 | export * from './helpers';
6 | export { checkBuilderImage, buildImage, createBuilderContainer };
7 |
--------------------------------------------------------------------------------
/server/src/env.ts:
--------------------------------------------------------------------------------
1 | import dotenv from 'dotenv';
2 | import { join } from 'path';
3 |
4 | const envResult = dotenv.config({ path: join(__dirname, '/../', '.env') });
5 | if (envResult.error) throw envResult.error;
6 |
--------------------------------------------------------------------------------
/server/src/index.ts:
--------------------------------------------------------------------------------
1 | import 'dotenv/config';
2 | import express from 'express';
3 | import bodyParser from 'body-parser';
4 | import Docker from 'dockerode';
5 | import { existsSync, mkdirSync } from 'fs';
6 |
7 | import createSite from './routes/createSite';
8 | import getSite from './routes/getSite';
9 | import delSite from './routes/delSite';
10 | import build from './routes/build';
11 | import builds from './routes/builds';
12 | import events from './routes/events';
13 | import authenticate from './routes/authenticate';
14 | import badge from './routes/badge';
15 | import constants from './config';
16 | import { checkBuilderImage, buildImage } from './docker';
17 | import { withAuth } from './middlewares';
18 | import { stopRunningBuilds } from './util';
19 |
20 | const { PORT, FRONTEND_DIR, DB_DIR, SITES_DIR } = constants;
21 |
22 | const app = express();
23 | export const docker = new Docker({
24 | socketPath: process.env.DOCKER_HOST ?? '/var/run/docker.sock',
25 | });
26 |
27 | const main = async () => {
28 | try {
29 | const isAvailable = await checkBuilderImage();
30 |
31 | if (!isAvailable) {
32 | await buildImage();
33 | }
34 |
35 | if (!existsSync(DB_DIR)) {
36 | mkdirSync(DB_DIR);
37 | }
38 |
39 | if (!existsSync(SITES_DIR)) {
40 | mkdirSync(SITES_DIR);
41 | }
42 |
43 | if (!existsSync(constants.BUILD_CACHE_DIR)) {
44 | mkdirSync(constants.BUILD_CACHE_DIR);
45 | }
46 | } catch (error) {
47 | console.error(error);
48 | process.exit(1);
49 | }
50 |
51 | app.use(bodyParser.urlencoded({ extended: false }));
52 | app.use('/', express.static(FRONTEND_DIR));
53 |
54 | app.post('/site', withAuth, createSite);
55 | app.get('/sites/:id', getSite);
56 | app.get('/sites', getSite);
57 | app.delete('/site/:id', withAuth, delSite);
58 | app.post('/build/:id', build);
59 | app.get('/builds', builds);
60 | app.get('/events', events);
61 | app.post('/authenticate', authenticate);
62 | app.get('/badge/:id', badge);
63 |
64 | app.listen(PORT, () =>
65 | console.log(`App listening on port ${PORT} in ${process.env.NODE_ENV}!`)
66 | );
67 |
68 | // make sure build processes stop gracefully once node app stops.
69 | process.on('exit', code => {
70 | stopRunningBuilds(code);
71 | process.exit(code);
72 | });
73 | };
74 |
75 | main();
76 |
--------------------------------------------------------------------------------
/server/src/middlewares/index.ts:
--------------------------------------------------------------------------------
1 | import withAuth from './withAuth';
2 |
3 | export { withAuth };
4 |
--------------------------------------------------------------------------------
/server/src/middlewares/withAuth.ts:
--------------------------------------------------------------------------------
1 | import { Request, Response, NextFunction } from 'express';
2 | import jwt from 'jsonwebtoken';
3 |
4 | import { isProd } from '../util';
5 |
6 | const withAuth = (req: Request, res: Response, next: NextFunction) => {
7 | const token =
8 | req.body?.token ||
9 | req.query?.token ||
10 | req.cookies?.token ||
11 | req.headers['x-access-token'];
12 |
13 | /**
14 | * Auth checking is disabled in development mode.
15 | */
16 | if (!isProd) {
17 | return next();
18 | }
19 |
20 | if (token) {
21 | jwt.verify(token, process.env.SECRET, (err: Error) => {
22 | if (err) {
23 | res.status(401).json({ error: 'Unauthorized: Invalid token' });
24 | } else {
25 | return next();
26 | }
27 | });
28 | } else {
29 | res.status(401).json({ error: 'Unauthorized: No token provided' });
30 | }
31 | };
32 |
33 | export default withAuth;
34 |
--------------------------------------------------------------------------------
/server/src/routes/authenticate.ts:
--------------------------------------------------------------------------------
1 | import { Request, Response } from 'express';
2 | import jwt from 'jsonwebtoken';
3 |
4 | const authenticate = (req: Request, res: Response) => {
5 | const { password } = req.body;
6 | const payload = { loggedIn: true };
7 |
8 | if (password === process.env.PASSWORD) {
9 | const token = jwt.sign(payload, process.env.SECRET, {
10 | expiresIn: '1h',
11 | });
12 | res.cookie('token', token, { httpOnly: false }).sendStatus(200);
13 | } else {
14 | res.status(401).json({ error: 'Unauthorized: Incorrect password!' });
15 | }
16 | };
17 |
18 | export default authenticate;
19 |
--------------------------------------------------------------------------------
/server/src/routes/badge.ts:
--------------------------------------------------------------------------------
1 | import { Request, Response } from 'express';
2 | import { promisify } from 'util';
3 | import { Op } from 'sequelize';
4 | import { readFile } from 'fs';
5 | import { join } from 'path';
6 |
7 | import constants from '../config';
8 | import { Site } from '../sql';
9 |
10 | const assetsFolder = join(constants.FRONTEND_DIR, '/../', 'assets');
11 | const readFilePromise = promisify(readFile);
12 |
13 | const badge = async (req: Request, res: Response) => {
14 | const { id } = req.params;
15 |
16 | const header = {
17 | 'Cache-Control': 'private',
18 | 'Content-Type': 'image/svg+xml',
19 | };
20 |
21 | const condition = {
22 | [Op.or]: [{ id: { [Op.eq]: id } }, { name: { [Op.eq]: id } }],
23 | };
24 |
25 | try {
26 | const site = await Site.findOne({ where: condition });
27 | const lastEvent = await site.$get('events', {
28 | limit: 1,
29 | attributes: ['status'],
30 | order: [['updatedAt', 'DESC']],
31 | });
32 |
33 | switch (lastEvent[0].status) {
34 | case 'success': {
35 | const succesBadge = String(
36 | await readFilePromise(join(assetsFolder, 'success-status.svg'))
37 | );
38 | return res
39 | .header(header)
40 | .send(succesBadge)
41 | .status(200);
42 | }
43 |
44 | case 'failed':
45 | const failedBadge = String(
46 | await readFilePromise(join(assetsFolder, 'failed-status.svg'))
47 | );
48 | return res
49 | .header(header)
50 | .send(failedBadge)
51 | .status(200);
52 |
53 | case 'preparing': {
54 | const buildingBade = String(
55 | await readFilePromise(join(assetsFolder, 'building-status.svg'))
56 | );
57 | return res
58 | .header(header)
59 | .send(buildingBade)
60 | .status(200);
61 | }
62 |
63 | case 'building': {
64 | const buildingBade = String(
65 | await readFilePromise(join(assetsFolder, 'building-status.svg'))
66 | );
67 | return res
68 | .header(header)
69 | .send(buildingBade)
70 | .status(200);
71 | }
72 |
73 | default: {
74 | const succesBadge = String(
75 | await readFilePromise(join(assetsFolder, 'success-status.svg'))
76 | );
77 | return res
78 | .header(header)
79 | .send(succesBadge)
80 | .status(200);
81 | }
82 | }
83 | } catch (error) {
84 | const errorBadge = String(
85 | await readFilePromise(join(assetsFolder, 'error-status.svg'))
86 | );
87 | return res
88 | .header(header)
89 | .send(errorBadge)
90 | .status(200);
91 | }
92 | };
93 |
94 | export default badge;
95 |
--------------------------------------------------------------------------------
/server/src/routes/build.ts:
--------------------------------------------------------------------------------
1 | import { Request, Response } from 'express';
2 | import { Op } from 'sequelize';
3 |
4 | import startBuild from '../build';
5 | import { Site } from '../sql';
6 |
7 | const build = async (req: Request, res: Response) => {
8 | const { id } = req.params;
9 | let site: Site;
10 |
11 | if (!id) {
12 | return res.status(404).json({ error: 'No siteID provided!' });
13 | }
14 |
15 | const condition = {
16 | [Op.or]: [{ id: { [Op.eq]: id } }, { name: { [Op.eq]: id } }],
17 | };
18 |
19 | try {
20 | site = await Site.findOne({ where: condition });
21 | } catch (error) {
22 | return res.status(500).json({ error });
23 | }
24 |
25 | if (!site) {
26 | return res.status(404).json({ error: 'Site not found!' });
27 | }
28 | res.sendStatus(200);
29 |
30 | startBuild(site);
31 | };
32 |
33 | export default build;
34 |
--------------------------------------------------------------------------------
/server/src/routes/builds.ts:
--------------------------------------------------------------------------------
1 | import { Request, Response } from 'express';
2 |
3 | import BuildProcesses from '../BuildProcesses';
4 |
5 | const builds = (req: Request, res: Response) => {
6 | res.json(BuildProcesses.get());
7 | };
8 |
9 | export default builds;
10 |
--------------------------------------------------------------------------------
/server/src/routes/createSite.ts:
--------------------------------------------------------------------------------
1 | import { Request, Response } from 'express';
2 |
3 | import { Site } from '../sql';
4 | import { sanitizeName, sanitizeBuildDir } from '../util';
5 |
6 | const createSite = async (req: Request, res: Response) => {
7 | const data: Site = {
8 | ...req.body,
9 | name: sanitizeName(req.body.name),
10 | buildDir: req.body.buildDir
11 | ? sanitizeBuildDir(req.body.buildDir)
12 | : 'public',
13 | displayName: req.body.name,
14 | };
15 |
16 | /**
17 | * Check if site name has been used already.
18 | */
19 | try {
20 | const result = await Site.findOne({
21 | where: { name: data.name },
22 | rejectOnEmpty: false,
23 | });
24 | if (result) {
25 | return res.status(500).json({ error: 'Site name already used!' });
26 | }
27 | } catch (error) {
28 | return res.status(500).json({ error: String(error) });
29 | }
30 |
31 | try {
32 | const newSite = await Site.create(data);
33 | res
34 | .status(200)
35 | .json({ siteCreated: { id: newSite.id, name: newSite.name } });
36 | } catch (error) {
37 | return res.status(500).json({ error: String(error) });
38 | }
39 | };
40 |
41 | export default createSite;
42 |
--------------------------------------------------------------------------------
/server/src/routes/delSite.ts:
--------------------------------------------------------------------------------
1 | import { Request, Response } from 'express';
2 |
3 | import BuildProcesses from '../BuildProcesses';
4 | import { Site } from '../sql';
5 |
6 | const delSite = async (req: Request, res: Response) => {
7 | const { id } = req.params;
8 |
9 | if (!id) {
10 | return res.status(404).json({ error: 'No siteID provided!' });
11 | }
12 |
13 | if (BuildProcesses.get()[id] !== undefined) {
14 | return res.json({
15 | error: 'There is an active build process with this site.',
16 | });
17 | }
18 |
19 | try {
20 | const site = await Site.findByPk(id);
21 | await site.destroy();
22 | } catch (error) {
23 | return res.status(500).json({ error });
24 | }
25 |
26 | res.sendStatus(200);
27 | };
28 |
29 | export default delSite;
30 |
--------------------------------------------------------------------------------
/server/src/routes/events.ts:
--------------------------------------------------------------------------------
1 | import { Request, Response } from 'express';
2 |
3 | import { Event, Site } from '../sql';
4 |
5 | const events = async (req: Request, res: Response) => {
6 | const { limit, skip, siteId } = req.query;
7 | let data: {
8 | count: number;
9 | rows: Event[];
10 | };
11 |
12 | let limitNumber = limit ? Number(limit) : undefined;
13 | let skipNumber = skip ? Number(skip) : undefined;
14 |
15 | try {
16 | data = await Event.findAndCountAll({
17 | limit: limitNumber,
18 | offset: skipNumber,
19 | attributes: [
20 | 'id',
21 | 'name',
22 | 'status',
23 | 'description',
24 | 'createdAt',
25 | 'updatedAt',
26 | 'siteId',
27 | ],
28 | order: [['createdAt', 'DESC']],
29 | //@ts-ignore
30 | include: [{ model: Site, attributes: ['name'] }],
31 | where: siteId ? { siteId: String(siteId) } : {},
32 | });
33 |
34 | if (!data) {
35 | return res.status(404).json({ error: 'No events found!' });
36 | }
37 | res.status(200).json(data);
38 | } catch (error) {
39 | return res.status(500).json({ error: error });
40 | }
41 | };
42 |
43 | export default events;
44 |
--------------------------------------------------------------------------------
/server/src/routes/getSite.ts:
--------------------------------------------------------------------------------
1 | import { Request, Response } from 'express';
2 |
3 | import { Site } from '../sql';
4 |
5 | const getSite = async (req: Request, res: Response) => {
6 | const { id } = req.params;
7 | let data: Site | Site[];
8 |
9 | try {
10 | if (id) {
11 | data = await Site.findByPk(id);
12 | } else {
13 | data = await Site.findAll();
14 | }
15 |
16 | if (!data) {
17 | return res.status(404).json({ error: 'Site not found!' });
18 | }
19 | res.status(200).json(data);
20 | } catch (error) {
21 | return res.status(500).json({ error });
22 | }
23 | };
24 |
25 | export default getSite;
26 |
--------------------------------------------------------------------------------
/server/src/sql/Event.ts:
--------------------------------------------------------------------------------
1 | import {
2 | Table,
3 | Model,
4 | Column,
5 | DataType,
6 | ForeignKey,
7 | BelongsTo,
8 | } from 'sequelize-typescript';
9 | import { Optional } from 'sequelize';
10 | import Site from './Site';
11 |
12 | export type EventStatus =
13 | | 'preparing'
14 | | 'building'
15 | | 'failed'
16 | | 'success'
17 | | 'stopped';
18 |
19 | interface EventAttributes {
20 | id: number;
21 | name: string | null;
22 | status: EventStatus;
23 | description: string | null;
24 | log: string | null;
25 | siteId: string;
26 | }
27 |
28 | interface EventCreationAttributes
29 | extends Optional {}
30 |
31 | @Table({ tableName: 'events' })
32 | class Event extends Model {
33 | @Column({
34 | primaryKey: true,
35 | autoIncrement: true,
36 | allowNull: false,
37 | })
38 | id: number;
39 |
40 | @Column({ allowNull: true })
41 | name: string | null;
42 |
43 | @Column({ type: DataType.STRING, allowNull: false })
44 | status: EventStatus;
45 |
46 | @Column({ type: DataType.TEXT, allowNull: true })
47 | description: string | null;
48 |
49 | @Column({ type: DataType.TEXT, allowNull: true })
50 | log: string | null;
51 |
52 | @ForeignKey(() => Site)
53 | @Column({ allowNull: false })
54 | siteId: string;
55 |
56 | @BelongsTo(() => Site, { foreignKey: 'siteId' })
57 | site: Site;
58 | }
59 |
60 | export default Event;
61 |
--------------------------------------------------------------------------------
/server/src/sql/Site.ts:
--------------------------------------------------------------------------------
1 | import { Table, Model, Column, HasMany, DataType } from 'sequelize-typescript';
2 | import { HostConfig, ContainerCreateOptions } from 'dockerode';
3 | import { Optional } from 'sequelize';
4 |
5 | import { createSiteID } from '../util';
6 | import Event from './Event';
7 |
8 | interface SiteAttributes {
9 | id: string;
10 | name: string;
11 | displayName: string | null;
12 | source: string;
13 | buildCommand: string | null;
14 | nodeVersion: string | null;
15 | buildDir: string | null;
16 | githubAccessToken: string | null;
17 | siteURL: string | null;
18 | postBuildCommand: string | null;
19 | hostConfig: HostConfig | null;
20 | envVariables: { [key: string]: string };
21 | }
22 |
23 | interface SiteCreationAttributes
24 | extends Optional<
25 | SiteAttributes,
26 | | 'id'
27 | | 'displayName'
28 | | 'buildCommand'
29 | | 'buildDir'
30 | | 'githubAccessToken'
31 | | 'siteURL'
32 | | 'postBuildCommand'
33 | | 'hostConfig'
34 | > {}
35 |
36 | @Table({ tableName: 'sites' })
37 | class Site extends Model {
38 | @Column({
39 | defaultValue: () => createSiteID(),
40 | primaryKey: true,
41 | })
42 | id: string;
43 |
44 | @Column({
45 | unique: true,
46 | allowNull: false,
47 | })
48 | name: string;
49 |
50 | @Column({ allowNull: true })
51 | displayName: string;
52 |
53 | @Column({ allowNull: true })
54 | source: string;
55 |
56 | @Column({ allowNull: true })
57 | buildCommand!: string;
58 |
59 | @Column({ allowNull: true })
60 | nodeVersion!: string;
61 |
62 | @Column({ allowNull: true })
63 | buildDir: string;
64 |
65 | @Column({ allowNull: true })
66 | githubAccessToken: string;
67 |
68 | @Column({ allowNull: true })
69 | siteURL: string;
70 |
71 | @Column({ allowNull: true })
72 | postBuildCommand: string;
73 |
74 | @Column({ type: DataType.JSON, allowNull: true })
75 | containerHostConfig: HostConfig;
76 |
77 | @Column({ type: DataType.JSON, allowNull: true })
78 | containerCreationOptions: ContainerCreateOptions;
79 |
80 | @Column({ type: DataType.JSON, allowNull: true })
81 | envVariables: { [key: string]: string };
82 |
83 | @HasMany(() => Event)
84 | events: Event[];
85 | }
86 |
87 | export default Site;
88 |
--------------------------------------------------------------------------------
/server/src/sql/index.ts:
--------------------------------------------------------------------------------
1 | import { Sequelize } from 'sequelize-typescript';
2 | import { Dialect } from 'sequelize';
3 | import { join } from 'path';
4 |
5 | import constants from '../config';
6 | import Event from './Event';
7 | import Site from './Site';
8 |
9 | const sequelize = new Sequelize({
10 | dialect: constants.DB_DIALECT as Dialect,
11 | host: constants.DB_HOST,
12 | username: constants.DB_USER,
13 | password: constants.DB_PASSWORD,
14 | database: constants.DB_NAME,
15 | storage: join(constants.DB_DIR, constants.DB_NAME),
16 | models: [Site, Event],
17 | logging: false,
18 | });
19 |
20 | sequelize.sync({ alter: constants.MIGRATE_DB === 'true' });
21 |
22 | export { Event, Site };
23 |
--------------------------------------------------------------------------------
/server/src/types/index.ts:
--------------------------------------------------------------------------------
1 | import { Container } from 'dockerode';
2 |
3 | import { Event } from '../sql';
4 |
5 | export interface BuildEnvVars {
6 | SITE_ID: string;
7 | REPO_URL: string;
8 | BUILD_COMMAND: string;
9 | NODE_VERSION: string;
10 | BUILD_DIR: string; // for Gatsby public, create-react-app usually dist
11 | DEPLOY_DIR: string;
12 | GITHUB_ACCESS_TOKEN: string;
13 | USE_CACHE?: boolean;
14 | [key: string]: string | boolean;
15 | }
16 |
17 | export interface BuildProcess {
18 | [key: string]: {
19 | status: 'preparing' | 'building';
20 | container?: Container;
21 | event?: Event;
22 | };
23 | }
24 |
25 | export interface BuildProcessesType {
26 | processes: BuildProcess[];
27 | get: Function;
28 | set: Function;
29 | del: Function;
30 | }
31 |
--------------------------------------------------------------------------------
/server/src/util/index.ts:
--------------------------------------------------------------------------------
1 | import { Event } from '../sql';
2 | import BuildProcesses from '../BuildProcesses';
3 | import { docker } from '..';
4 |
5 | export const isProd = process.env.NODE_ENV === 'production';
6 |
7 | export const createSiteID = (): string => {
8 | return Math.random().toString(36).substring(2, 8);
9 | };
10 |
11 | export const saveBuildLog = (
12 | event: Event,
13 | stream: NodeJS.ReadWriteStream
14 | ): void => {
15 | let log: string = '';
16 |
17 | stream.on('data', chunk => {
18 | log += removeAnsiEscapeCodes(chunk.toString('utf8'));
19 | console.log(removeAnsiEscapeCodes(chunk.toString('utf8')));
20 | });
21 | stream.on('error', error => console.error(error));
22 | stream.on('end', () => {
23 | event.update({ log });
24 | });
25 | };
26 |
27 | export const sanitizeName = (name: string) =>
28 | name.trim().replace(/\s/g, '-').toLowerCase().substr(0, 40);
29 |
30 | /**
31 | * Recursively removes dots, slashes and whitespaces from the start and end of the string.
32 | * @param input A string which represents the directory where to build output is located.
33 | */
34 | export const sanitizeBuildDir = (input: string): string => {
35 | let inputArr = input.split('');
36 |
37 | if (inputArr[0].match(/(\/|\.|\/|\\| )/gi) !== null) {
38 | inputArr.shift();
39 | }
40 |
41 | if (inputArr[inputArr.length - 1].match(/(\/|\.|\/|\\| )/gi) !== null) {
42 | inputArr.pop();
43 | }
44 |
45 | if (
46 | inputArr[0].match(/(\/|\.|\/|\\| )/gi) !== null ||
47 | inputArr[inputArr.length - 1].match(/(\/|\.|\/|\\| )/gi) !== null
48 | ) {
49 | return sanitizeBuildDir(inputArr.join(''));
50 | } else {
51 | return inputArr.join('');
52 | }
53 | };
54 |
55 | /*
56 | ** This stops the currently running build processes in case of a termination signal to the app.
57 | */
58 | export const stopRunningBuilds = (code: number) => {
59 | const runningBuilds = BuildProcesses.get();
60 |
61 | for (const id in runningBuilds) {
62 | if (runningBuilds[id].container !== undefined) {
63 | const container = docker.getContainer(runningBuilds[id].container.id);
64 | container.kill({ signal: code });
65 | }
66 | }
67 | };
68 |
69 | export const calcuateBuildTime = (event: Event): number => {
70 | try {
71 | const milliseconds = Date.now() - event.createdAt.getTime();
72 | const seconds = Math.round(milliseconds / 1000);
73 | return seconds;
74 | /*if (seconds < 60) {
75 | return `0m ${seconds}s`;
76 | } else {
77 | const minutes = Math.round(seconds / 60);
78 | seconds = Math.round(seconds % 60);
79 | return `${minutes}m ${seconds}s`;
80 | } */
81 | } catch (error) {
82 | console.error(error);
83 | }
84 | };
85 |
86 | export const removeAnsiEscapeCodes = (text: string): string => {
87 | const ansiEscape =
88 | /[\u001b\u009b][[()#;?]*(?:[0-9]{1,4}(?:;[0-9]{0,4})*)?[0-9A-ORZcf-nqry=><]/g;
89 | return text.replace(ansiEscape, '');
90 | };
91 |
--------------------------------------------------------------------------------
/server/tsconfig.json:
--------------------------------------------------------------------------------
1 | {
2 | "compilerOptions": {
3 | "module": "commonjs",
4 | "esModuleInterop": true,
5 | "allowSyntheticDefaultImports": true,
6 | "target": "es6",
7 | "experimentalDecorators": true,
8 | "emitDecoratorMetadata": true,
9 | "noImplicitAny": true,
10 | "moduleResolution": "node",
11 | "sourceMap": true,
12 | "outDir": "dist",
13 | "baseUrl": ".",
14 | "paths": {
15 | "*": [
16 | "node_modules/*",
17 | "src/types/*"
18 | ]
19 | }
20 | },
21 | "include": [
22 | "src/**/*"
23 | ]
24 | }
--------------------------------------------------------------------------------
/server/yarn.lock:
--------------------------------------------------------------------------------
1 | # THIS IS AN AUTOGENERATED FILE. DO NOT EDIT THIS FILE DIRECTLY.
2 | # yarn lockfile v1
3 |
4 |
5 | "@cspotcode/source-map-support@^0.8.0":
6 | version "0.8.1"
7 | resolved "https://registry.npmjs.org/@cspotcode/source-map-support/-/source-map-support-0.8.1.tgz"
8 | integrity sha512-IchNf6dN4tHoMFIn/7OE8LWZ19Y6q/67Bmf6vnGREv8RSbBVb9LPJxEcnwrcwX6ixSvaiGoomAUvu4YSxXrVgw==
9 | dependencies:
10 | "@jridgewell/trace-mapping" "0.3.9"
11 |
12 | "@gar/promisify@^1.0.1":
13 | version "1.1.3"
14 | resolved "https://registry.npmjs.org/@gar/promisify/-/promisify-1.1.3.tgz"
15 | integrity sha512-k2Ty1JcVojjJFwrg/ThKi2ujJ7XNLYaFGNB/bWT9wGR+oSMJHMa5w+CUq6p/pVrKeNNgA7pCqEcjSnHVoqJQFw==
16 |
17 | "@jridgewell/resolve-uri@^3.0.3":
18 | version "3.1.2"
19 | resolved "https://registry.npmjs.org/@jridgewell/resolve-uri/-/resolve-uri-3.1.2.tgz"
20 | integrity sha512-bRISgCIjP20/tbWSPWMEi54QVPRZExkuD9lJL+UIxUKtwVJA8wW1Trb1jMs1RFXo1CBTNZ/5hpC9QvmKWdopKw==
21 |
22 | "@jridgewell/sourcemap-codec@^1.4.10":
23 | version "1.4.15"
24 | resolved "https://registry.npmjs.org/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.4.15.tgz"
25 | integrity sha512-eF2rxCRulEKXHTRiDrDy6erMYWqNw4LPdQ8UQA4huuxaQsVeRPFl2oM8oDGxMFhJUWZf9McpLtJasDDZb/Bpeg==
26 |
27 | "@jridgewell/trace-mapping@0.3.9":
28 | version "0.3.9"
29 | resolved "https://registry.npmjs.org/@jridgewell/trace-mapping/-/trace-mapping-0.3.9.tgz"
30 | integrity sha512-3Belt6tdc8bPgAtbcmdtNJlirVoTmEb5e2gC94PnkwEW9jI6CAHUeoG85tjWP5WquqfavoMtMwiG4P926ZKKuQ==
31 | dependencies:
32 | "@jridgewell/resolve-uri" "^3.0.3"
33 | "@jridgewell/sourcemap-codec" "^1.4.10"
34 |
35 | "@npmcli/fs@^1.0.0":
36 | version "1.1.1"
37 | resolved "https://registry.npmjs.org/@npmcli/fs/-/fs-1.1.1.tgz"
38 | integrity sha512-8KG5RD0GVP4ydEzRn/I4BNDuxDtqVbOdm8675T49OIG/NGhaK0pjPX7ZcDlvKYbA+ulvVK3ztfcF4uBdOxuJbQ==
39 | dependencies:
40 | "@gar/promisify" "^1.0.1"
41 | semver "^7.3.5"
42 |
43 | "@npmcli/move-file@^1.0.1":
44 | version "1.1.2"
45 | resolved "https://registry.npmjs.org/@npmcli/move-file/-/move-file-1.1.2.tgz"
46 | integrity sha512-1SUf/Cg2GzGDyaf15aR9St9TWlb+XvbZXWpDx8YKs7MLzMH/BCeopv+y9vzrzgkfykCGuWOlSu3mZhj2+FQcrg==
47 | dependencies:
48 | mkdirp "^1.0.4"
49 | rimraf "^3.0.2"
50 |
51 | "@tootallnate/once@1":
52 | version "1.1.2"
53 | resolved "https://registry.npmjs.org/@tootallnate/once/-/once-1.1.2.tgz"
54 | integrity sha512-RbzJvlNzmRq5c3O09UipeuXno4tA1FE6ikOjxZK0tuxVv3412l64l5t1W5pj4+rJq9vpkm/kwiR07aZXnsKPxw==
55 |
56 | "@tsconfig/node10@^1.0.7":
57 | version "1.0.9"
58 | resolved "https://registry.npmjs.org/@tsconfig/node10/-/node10-1.0.9.tgz"
59 | integrity sha512-jNsYVVxU8v5g43Erja32laIDHXeoNvFEpX33OK4d6hljo3jDhCBDhx5dhCCTMWUojscpAagGiRkBKxpdl9fxqA==
60 |
61 | "@tsconfig/node12@^1.0.7":
62 | version "1.0.11"
63 | resolved "https://registry.npmjs.org/@tsconfig/node12/-/node12-1.0.11.tgz"
64 | integrity sha512-cqefuRsh12pWyGsIoBKJA9luFu3mRxCA+ORZvA4ktLSzIuCUtWVxGIuXigEwO5/ywWFMZ2QEGKWvkZG1zDMTag==
65 |
66 | "@tsconfig/node14@^1.0.0":
67 | version "1.0.3"
68 | resolved "https://registry.npmjs.org/@tsconfig/node14/-/node14-1.0.3.tgz"
69 | integrity sha512-ysT8mhdixWK6Hw3i1V2AeRqZ5WfXg1G43mqoYlM2nc6388Fq5jcXyr5mRsqViLx/GJYdoL0bfXD8nmF+Zn/Iow==
70 |
71 | "@tsconfig/node16@^1.0.2":
72 | version "1.0.4"
73 | resolved "https://registry.npmjs.org/@tsconfig/node16/-/node16-1.0.4.tgz"
74 | integrity sha512-vxhUy4J8lyeyinH7Azl1pdd43GJhZH/tP2weN8TntQblOY+A0XbT8DJk1/oCPuOOyg/Ja757rG0CgHcWC8OfMA==
75 |
76 | "@types/body-parser@*":
77 | version "1.17.1"
78 | resolved "https://registry.npmjs.org/@types/body-parser/-/body-parser-1.17.1.tgz"
79 | integrity sha512-RoX2EZjMiFMjZh9lmYrwgoP9RTpAjSHiJxdp4oidAQVO02T7HER3xj9UKue5534ULWeqVEkujhWcyvUce+d68w==
80 | dependencies:
81 | "@types/connect" "*"
82 | "@types/node" "*"
83 |
84 | "@types/connect@*":
85 | version "3.4.32"
86 | resolved "https://registry.npmjs.org/@types/connect/-/connect-3.4.32.tgz"
87 | integrity sha512-4r8qa0quOvh7lGD0pre62CAb1oni1OO6ecJLGCezTmhQ8Fz50Arx9RUszryR8KlgK6avuSXvviL6yWyViQABOg==
88 | dependencies:
89 | "@types/node" "*"
90 |
91 | "@types/debug@^4.1.8":
92 | version "4.1.12"
93 | resolved "https://registry.npmjs.org/@types/debug/-/debug-4.1.12.tgz"
94 | integrity sha512-vIChWdVG3LG1SMxEvI/AK+FWJthlrqlTu7fbrlywTkkaONwk/UAGaULXRlf8vkzFBLVm0zkMdCquhL5aOjhXPQ==
95 | dependencies:
96 | "@types/ms" "*"
97 |
98 | "@types/dockerode@^2.5.21":
99 | version "2.5.21"
100 | resolved "https://registry.npmjs.org/@types/dockerode/-/dockerode-2.5.21.tgz"
101 | integrity sha512-Y9kVV7Umw0SAOsGVp06VGjlAiZbjALNhDIw69NeWNEqfI++7nQijzjWsepOkUjKHr5CrJWgK4v++6a+Ms0G/6A==
102 | dependencies:
103 | "@types/node" "*"
104 |
105 | "@types/express-serve-static-core@*":
106 | version "4.19.5"
107 | resolved "https://registry.npmjs.org/@types/express-serve-static-core/-/express-serve-static-core-4.19.5.tgz"
108 | integrity sha512-y6W03tvrACO72aijJ5uF02FRq5cgDR9lUxddQ8vyF+GvmjJQqbzDcJngEjURc+ZsG31VI3hODNZJ2URj86pzmg==
109 | dependencies:
110 | "@types/node" "*"
111 | "@types/qs" "*"
112 | "@types/range-parser" "*"
113 | "@types/send" "*"
114 |
115 | "@types/express@4.17.8":
116 | version "4.17.8"
117 | resolved "https://registry.yarnpkg.com/@types/express/-/express-4.17.8.tgz#3df4293293317e61c60137d273a2e96cd8d5f27a"
118 | integrity sha512-wLhcKh3PMlyA2cNAB9sjM1BntnhPMiM0JOBwPBqttjHev2428MLEB4AYVN+d8s2iyCVZac+o41Pflm/ZH5vLXQ==
119 | dependencies:
120 | "@types/body-parser" "*"
121 | "@types/express-serve-static-core" "*"
122 | "@types/qs" "*"
123 | "@types/serve-static" "*"
124 |
125 | "@types/geojson@^7946.0.14":
126 | version "7946.0.14"
127 | resolved "https://registry.yarnpkg.com/@types/geojson/-/geojson-7946.0.14.tgz#319b63ad6df705ee2a65a73ef042c8271e696613"
128 | integrity sha512-WCfD5Ht3ZesJUsONdhvm84dmzWOiOzOAqOncN0++w0lBw1o8OuDNJF2McvvCef/yBqb/HYRahp1BYtODFQ8bRg==
129 |
130 | "@types/jsonwebtoken@^8.3.8":
131 | version "8.3.8"
132 | resolved "https://registry.npmjs.org/@types/jsonwebtoken/-/jsonwebtoken-8.3.8.tgz"
133 | integrity sha512-g2ke5+AR/RKYpQxd+HJ2yisLHGuOV0uourOcPtKlcT5Zqv4wFg9vKhFpXEztN4H/6Y6RSUKioz/2PTFPP30CTA==
134 | dependencies:
135 | "@types/node" "*"
136 |
137 | "@types/mime@*":
138 | version "2.0.1"
139 | resolved "https://registry.npmjs.org/@types/mime/-/mime-2.0.1.tgz"
140 | integrity sha512-FwI9gX75FgVBJ7ywgnq/P7tw+/o1GUbtP0KzbtusLigAOgIgNISRK0ZPl4qertvXSIE8YbsVJueQ90cDt9YYyw==
141 |
142 | "@types/mime@^1":
143 | version "1.3.5"
144 | resolved "https://registry.npmjs.org/@types/mime/-/mime-1.3.5.tgz"
145 | integrity sha512-/pyBZWSLD2n0dcHE3hq8s8ZvcETHtEuF+3E7XVt0Ig2nvsVQXdghHVcEkIWjy9A0wKfTn97a/PSDYohKIlnP/w==
146 |
147 | "@types/ms@*":
148 | version "0.7.34"
149 | resolved "https://registry.npmjs.org/@types/ms/-/ms-0.7.34.tgz"
150 | integrity sha512-nG96G3Wp6acyAgJqGasjODb+acrI7KltPiRxzHPXnP3NgI28bpQDRv53olbqGXbfcgF5aiiHmO3xpwEpS5Ld9g==
151 |
152 | "@types/node@*":
153 | version "12.12.14"
154 | resolved "https://registry.npmjs.org/@types/node/-/node-12.12.14.tgz"
155 | integrity sha512-u/SJDyXwuihpwjXy7hOOghagLEV1KdAST6syfnOk6QZAMzZuWZqXy5aYYZbh8Jdpd4escVFP0MvftHNDb9pruA==
156 |
157 | "@types/node@^20.11.17":
158 | version "20.14.14"
159 | resolved "https://registry.yarnpkg.com/@types/node/-/node-20.14.14.tgz#6b655d4a88623b0edb98300bb9dd2107225f885e"
160 | integrity sha512-d64f00982fS9YoOgJkAMolK7MN8Iq3TDdVjchbYHdEmjth/DHowx82GnoA+tVUAN+7vxfYUgAzi+JXbKNd2SDQ==
161 | dependencies:
162 | undici-types "~5.26.4"
163 |
164 | "@types/qs@*":
165 | version "6.9.15"
166 | resolved "https://registry.npmjs.org/@types/qs/-/qs-6.9.15.tgz"
167 | integrity sha512-uXHQKES6DQKKCLh441Xv/dwxOq1TVS3JPUMlEqoEglvlhR6Mxnlew/Xq/LRVHpLyk7iK3zODe1qYHIMltO7XGg==
168 |
169 | "@types/range-parser@*":
170 | version "1.2.3"
171 | resolved "https://registry.npmjs.org/@types/range-parser/-/range-parser-1.2.3.tgz"
172 | integrity sha512-ewFXqrQHlFsgc09MK5jP5iR7vumV/BYayNC6PgJO2LPe8vrnNFyjQjSppfEngITi0qvfKtzFvgKymGheFM9UOA==
173 |
174 | "@types/send@*":
175 | version "0.17.4"
176 | resolved "https://registry.npmjs.org/@types/send/-/send-0.17.4.tgz"
177 | integrity sha512-x2EM6TJOybec7c52BX0ZspPodMsQUd5L6PRwOunVyVUhXiBSKf3AezDL8Dgvgt5o0UfKNfuA0eMLr2wLT4AiBA==
178 | dependencies:
179 | "@types/mime" "^1"
180 | "@types/node" "*"
181 |
182 | "@types/serve-static@*":
183 | version "1.13.3"
184 | resolved "https://registry.npmjs.org/@types/serve-static/-/serve-static-1.13.3.tgz"
185 | integrity sha512-oprSwp094zOglVrXdlo/4bAHtKTAxX6VT8FOZlBKrmyLbNvE1zxZyJ6yikMVtHIvwP45+ZQGJn+FdXGKTozq0g==
186 | dependencies:
187 | "@types/express-serve-static-core" "*"
188 | "@types/mime" "*"
189 |
190 | "@types/strip-bom@^3.0.0":
191 | version "3.0.0"
192 | resolved "https://registry.npmjs.org/@types/strip-bom/-/strip-bom-3.0.0.tgz"
193 | integrity sha1-FKjsOVbC6B7bdSB5CuzyHCkK69I=
194 |
195 | "@types/strip-json-comments@0.0.30":
196 | version "0.0.30"
197 | resolved "https://registry.npmjs.org/@types/strip-json-comments/-/strip-json-comments-0.0.30.tgz"
198 | integrity sha512-7NQmHra/JILCd1QqpSzl8+mJRc8ZHz3uDm8YV1Ks9IhK0epEiTw8aIErbvH9PI+6XbqhyIQy3462nEsn7UVzjQ==
199 |
200 | "@types/validator@^13.12.0", "@types/validator@^13.7.17":
201 | version "13.12.0"
202 | resolved "https://registry.npmjs.org/@types/validator/-/validator-13.12.0.tgz"
203 | integrity sha512-nH45Lk7oPIJ1RVOF6JgFI6Dy0QpHEzq4QecZhvguxYPDwT8c93prCMqAtiIttm39voZ+DDR+qkNnMpJmMBRqag==
204 |
205 | abbrev@1:
206 | version "1.1.1"
207 | resolved "https://registry.npmjs.org/abbrev/-/abbrev-1.1.1.tgz"
208 | integrity sha512-nne9/IiQ/hzIhY6pdDnbBtz7DjPTKrY00P/zvPSm5pOFkl6xuGrGnXn/VtTNNfNtAfZ9/1RtehkszU9qcTii0Q==
209 |
210 | accepts@~1.3.8:
211 | version "1.3.8"
212 | resolved "https://registry.npmjs.org/accepts/-/accepts-1.3.8.tgz"
213 | integrity sha512-PYAthTa2m2VKxuvSD3DPC/Gy+U+sOA1LAuT8mkmRuvw+NACSaeXEQ+NHcVF7rONl6qcaxV3Uuemwawk+7+SJLw==
214 | dependencies:
215 | mime-types "~2.1.34"
216 | negotiator "0.6.3"
217 |
218 | acorn-walk@^8.1.1:
219 | version "8.3.2"
220 | resolved "https://registry.npmjs.org/acorn-walk/-/acorn-walk-8.3.2.tgz"
221 | integrity sha512-cjkyv4OtNCIeqhHrfS81QWXoCBPExR/J62oyEqepVw8WaQeSqpW2uhuLPh1m9eWhDuOo/jUXVTlifvesOWp/4A==
222 |
223 | acorn@^8.4.1:
224 | version "8.11.3"
225 | resolved "https://registry.npmjs.org/acorn/-/acorn-8.11.3.tgz"
226 | integrity sha512-Y9rRfJG5jcKOE0CLisYbojUjIrIEE7AGMzA/Sm4BslANhbS+cDMpgBdcPT91oJ7OuJ9hYJBx59RjbhxVnrF8Xg==
227 |
228 | agent-base@6, agent-base@^6.0.2:
229 | version "6.0.2"
230 | resolved "https://registry.npmjs.org/agent-base/-/agent-base-6.0.2.tgz"
231 | integrity sha512-RZNwNclF7+MS/8bDg70amg32dyeZGZxiDuQmZxKLAlQjr3jGyLx+4Kkk58UO7D2QdgFIQCovuSuZESne6RG6XQ==
232 | dependencies:
233 | debug "4"
234 |
235 | agentkeepalive@^4.1.3:
236 | version "4.5.0"
237 | resolved "https://registry.npmjs.org/agentkeepalive/-/agentkeepalive-4.5.0.tgz"
238 | integrity sha512-5GG/5IbQQpC9FpkRGsSvZI5QYeSCzlJHdpBQntCsuTOxhKD8lqKhrleg2Yi7yvMIf82Ycmmqln9U8V9qwEiJew==
239 | dependencies:
240 | humanize-ms "^1.2.1"
241 |
242 | aggregate-error@^3.0.0:
243 | version "3.1.0"
244 | resolved "https://registry.npmjs.org/aggregate-error/-/aggregate-error-3.1.0.tgz"
245 | integrity sha512-4I7Td01quW/RpocfNayFdFVk1qSuoh0E7JrbRJ16nH01HhKFQ88INq9Sd+nd72zqRySlr9BmDA8xlEJ6vJMrYA==
246 | dependencies:
247 | clean-stack "^2.0.0"
248 | indent-string "^4.0.0"
249 |
250 | ansi-regex@^5.0.1:
251 | version "5.0.1"
252 | resolved "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz"
253 | integrity sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==
254 |
255 | anymatch@~3.1.2:
256 | version "3.1.3"
257 | resolved "https://registry.npmjs.org/anymatch/-/anymatch-3.1.3.tgz"
258 | integrity sha512-KMReFUr0B4t+D+OBkjR3KYqvocp2XaSzO55UcB6mgQMd3KbcE+mWTyvVV7D/zsdEbNnV6acZUutkiHQXvTr1Rw==
259 | dependencies:
260 | normalize-path "^3.0.0"
261 | picomatch "^2.0.4"
262 |
263 | "aproba@^1.0.3 || ^2.0.0":
264 | version "2.0.0"
265 | resolved "https://registry.npmjs.org/aproba/-/aproba-2.0.0.tgz"
266 | integrity sha512-lYe4Gx7QT+MKGbDsA+Z+he/Wtef0BiwDOlK/XkBrdfsh9J/jPPXbX0tE9x9cl27Tmu5gg3QUbUrQYa/y+KOHPQ==
267 |
268 | are-we-there-yet@^3.0.0:
269 | version "3.0.1"
270 | resolved "https://registry.npmjs.org/are-we-there-yet/-/are-we-there-yet-3.0.1.tgz"
271 | integrity sha512-QZW4EDmGwlYur0Yyf/b2uGucHQMa8aFUP7eu9ddR73vvhFyt4V0Vl3QHPcTNJ8l6qYOBdxgXdnBXQrHilfRQBg==
272 | dependencies:
273 | delegates "^1.0.0"
274 | readable-stream "^3.6.0"
275 |
276 | arg@^4.1.0:
277 | version "4.1.2"
278 | resolved "https://registry.npmjs.org/arg/-/arg-4.1.2.tgz"
279 | integrity sha512-+ytCkGcBtHZ3V2r2Z06AncYO8jz46UEamcspGoU8lHcEbpn6J77QK0vdWvChsclg/tM5XIJC5tnjmPp7Eq6Obg==
280 |
281 | array-flatten@1.1.1:
282 | version "1.1.1"
283 | resolved "https://registry.npmjs.org/array-flatten/-/array-flatten-1.1.1.tgz"
284 | integrity sha1-ml9pkFGx5wczKPKgCJaLZOopVdI=
285 |
286 | asn1@~0.2.0:
287 | version "0.2.4"
288 | resolved "https://registry.npmjs.org/asn1/-/asn1-0.2.4.tgz"
289 | integrity sha512-jxwzQpLQjSmWXgwaCZE9Nz+glAG01yF1QnWgbhGwHI5A6FRIEY6IVqtHhIepHqI7/kyEyQEagBC5mBEFlIYvdg==
290 | dependencies:
291 | safer-buffer "~2.1.0"
292 |
293 | balanced-match@^1.0.0:
294 | version "1.0.0"
295 | resolved "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.0.tgz"
296 | integrity sha1-ibTRmasr7kneFk6gK4nORi1xt2c=
297 |
298 | base64-js@^1.3.1:
299 | version "1.5.1"
300 | resolved "https://registry.npmjs.org/base64-js/-/base64-js-1.5.1.tgz"
301 | integrity sha512-AKpaYlHn8t4SVbOHCy+b5+KKgvR4vrsD8vbvrbiQJps7fKDTkjkDry6ji0rUJjC0kzbNePLwzxq8iypo41qeWA==
302 |
303 | bcrypt-pbkdf@^1.0.2:
304 | version "1.0.2"
305 | resolved "https://registry.npmjs.org/bcrypt-pbkdf/-/bcrypt-pbkdf-1.0.2.tgz"
306 | integrity sha1-pDAdOJtqQ/m2f/PKEaP2Y342Dp4=
307 | dependencies:
308 | tweetnacl "^0.14.3"
309 |
310 | binary-extensions@^2.0.0:
311 | version "2.2.0"
312 | resolved "https://registry.npmjs.org/binary-extensions/-/binary-extensions-2.2.0.tgz"
313 | integrity sha512-jDctJ/IVQbZoJykoeHbhXpOlNBqGNcwXJKJog42E5HDPUwQTSdjCHdihjj0DlnheQ7blbT6dHOafNAiS8ooQKA==
314 |
315 | bindings@^1.5.0:
316 | version "1.5.0"
317 | resolved "https://registry.npmjs.org/bindings/-/bindings-1.5.0.tgz"
318 | integrity sha512-p2q/t/mhvuOj/UeLlV6566GD/guowlr0hHxClI0W9m7MWYkL1F0hLo+0Aexs9HSPCtR1SXQ0TD3MMKrXZajbiQ==
319 | dependencies:
320 | file-uri-to-path "1.0.0"
321 |
322 | bl@^3.0.0:
323 | version "3.0.1"
324 | resolved "https://registry.npmjs.org/bl/-/bl-3.0.1.tgz"
325 | integrity sha512-jrCW5ZhfQ/Vt07WX1Ngs+yn9BDqPL/gw28S7s9H6QK/gupnizNzJAss5akW20ISgOrbLTlXOOCTJeNUQqruAWQ==
326 | dependencies:
327 | readable-stream "^3.0.1"
328 |
329 | bl@^4.0.3:
330 | version "4.1.0"
331 | resolved "https://registry.npmjs.org/bl/-/bl-4.1.0.tgz"
332 | integrity sha512-1W07cM9gS6DcLperZfFSj+bWLtaPGSOHWhPiGzXmvVJbRLdG82sH/Kn8EtW1VqWVA54AKf2h5k5BbnIbwF3h6w==
333 | dependencies:
334 | buffer "^5.5.0"
335 | inherits "^2.0.4"
336 | readable-stream "^3.4.0"
337 |
338 | body-parser@1.20.2, body-parser@^1.20.2:
339 | version "1.20.2"
340 | resolved "https://registry.npmjs.org/body-parser/-/body-parser-1.20.2.tgz"
341 | integrity sha512-ml9pReCu3M61kGlqoTm2umSXTlRTuGTx0bfYj+uIUKKYycG5NtSbeetV3faSU6R7ajOPw0g/J1PvK4qNy7s5bA==
342 | dependencies:
343 | bytes "3.1.2"
344 | content-type "~1.0.5"
345 | debug "2.6.9"
346 | depd "2.0.0"
347 | destroy "1.2.0"
348 | http-errors "2.0.0"
349 | iconv-lite "0.4.24"
350 | on-finished "2.4.1"
351 | qs "6.11.0"
352 | raw-body "2.5.2"
353 | type-is "~1.6.18"
354 | unpipe "1.0.0"
355 |
356 | brace-expansion@^1.1.7:
357 | version "1.1.11"
358 | resolved "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz"
359 | integrity sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==
360 | dependencies:
361 | balanced-match "^1.0.0"
362 | concat-map "0.0.1"
363 |
364 | braces@~3.0.2:
365 | version "3.0.2"
366 | resolved "https://registry.npmjs.org/braces/-/braces-3.0.2.tgz"
367 | integrity sha512-b8um+L1RzM3WDSzvhm6gIz1yfTbBt6YTlcEKAvsmqCZZFw46z626lVj9j1yEPW33H5H+lBQpZMP1k8l+78Ha0A==
368 | dependencies:
369 | fill-range "^7.0.1"
370 |
371 | buffer-equal-constant-time@1.0.1:
372 | version "1.0.1"
373 | resolved "https://registry.npmjs.org/buffer-equal-constant-time/-/buffer-equal-constant-time-1.0.1.tgz"
374 | integrity sha1-+OcRMvf/5uAaXJaXpMbz5I1cyBk=
375 |
376 | buffer-from@^1.0.0:
377 | version "1.1.1"
378 | resolved "https://registry.npmjs.org/buffer-from/-/buffer-from-1.1.1.tgz"
379 | integrity sha512-MQcXEUbCKtEo7bhqEs6560Hyd4XaovZlO/k9V3hjVUF/zwW7KBVdSK4gIt/bzwS9MbR5qob+F5jusZsb0YQK2A==
380 |
381 | buffer@^5.5.0:
382 | version "5.7.1"
383 | resolved "https://registry.npmjs.org/buffer/-/buffer-5.7.1.tgz"
384 | integrity sha512-EHcyIPBQ4BSGlvjB16k5KgAJ27CIsHY/2JBmCRReo48y9rQ3MaUzWX3KVlBa4U7MyX02HdVj0K7C3WaB3ju7FQ==
385 | dependencies:
386 | base64-js "^1.3.1"
387 | ieee754 "^1.1.13"
388 |
389 | bytes@3.1.2:
390 | version "3.1.2"
391 | resolved "https://registry.npmjs.org/bytes/-/bytes-3.1.2.tgz"
392 | integrity sha512-/Nf7TyzTx6S3yRJObOAV7956r8cr2+Oj8AC5dt8wSP3BQAoeX58NoHyCU8P8zGkNXStjTSi6fzO6F0pBdcYbEg==
393 |
394 | cacache@^15.2.0:
395 | version "15.3.0"
396 | resolved "https://registry.npmjs.org/cacache/-/cacache-15.3.0.tgz"
397 | integrity sha512-VVdYzXEn+cnbXpFgWs5hTT7OScegHVmLhJIR8Ufqk3iFD6A6j5iSX1KuBTfNEv4tdJWE2PzA6IVFtcLC7fN9wQ==
398 | dependencies:
399 | "@npmcli/fs" "^1.0.0"
400 | "@npmcli/move-file" "^1.0.1"
401 | chownr "^2.0.0"
402 | fs-minipass "^2.0.0"
403 | glob "^7.1.4"
404 | infer-owner "^1.0.4"
405 | lru-cache "^6.0.0"
406 | minipass "^3.1.1"
407 | minipass-collect "^1.0.2"
408 | minipass-flush "^1.0.5"
409 | minipass-pipeline "^1.2.2"
410 | mkdirp "^1.0.3"
411 | p-map "^4.0.0"
412 | promise-inflight "^1.0.1"
413 | rimraf "^3.0.2"
414 | ssri "^8.0.1"
415 | tar "^6.0.2"
416 | unique-filename "^1.1.1"
417 |
418 | call-bind@^1.0.7:
419 | version "1.0.7"
420 | resolved "https://registry.npmjs.org/call-bind/-/call-bind-1.0.7.tgz"
421 | integrity sha512-GHTSNSYICQ7scH7sZ+M2rFopRoLh8t2bLSW6BbgrtLsahOIB5iyAVJf9GjWK3cYTDaMj4XdBpM1cA6pIS0Kv2w==
422 | dependencies:
423 | es-define-property "^1.0.0"
424 | es-errors "^1.3.0"
425 | function-bind "^1.1.2"
426 | get-intrinsic "^1.2.4"
427 | set-function-length "^1.2.1"
428 |
429 | chokidar@^3.5.1:
430 | version "3.6.0"
431 | resolved "https://registry.npmjs.org/chokidar/-/chokidar-3.6.0.tgz"
432 | integrity sha512-7VT13fmjotKpGipCW9JEQAusEPE+Ei8nl6/g4FBAmIm0GOOLMua9NDDo/DWp0ZAxCr3cPq5ZpBqmPAQgDda2Pw==
433 | dependencies:
434 | anymatch "~3.1.2"
435 | braces "~3.0.2"
436 | glob-parent "~5.1.2"
437 | is-binary-path "~2.1.0"
438 | is-glob "~4.0.1"
439 | normalize-path "~3.0.0"
440 | readdirp "~3.6.0"
441 | optionalDependencies:
442 | fsevents "~2.3.2"
443 |
444 | chownr@^1.1.1:
445 | version "1.1.3"
446 | resolved "https://registry.npmjs.org/chownr/-/chownr-1.1.3.tgz"
447 | integrity sha512-i70fVHhmV3DtTl6nqvZOnIjbY0Pe4kAUjwHj8z0zAdgBtYrJyYwLKCCuRBQ5ppkyL0AkN7HKRnETdmdp1zqNXw==
448 |
449 | chownr@^2.0.0:
450 | version "2.0.0"
451 | resolved "https://registry.npmjs.org/chownr/-/chownr-2.0.0.tgz"
452 | integrity sha512-bIomtDF5KGpdogkLd9VspvFzk9KfpyyGlS8YFVZl7TGPBHL5snIOnxeshwVgPteQ9b4Eydl+pVbIyE1DcvCWgQ==
453 |
454 | clean-stack@^2.0.0:
455 | version "2.2.0"
456 | resolved "https://registry.npmjs.org/clean-stack/-/clean-stack-2.2.0.tgz"
457 | integrity sha512-4diC9HaTE+KRAMWhDhrGOECgWZxoevMc5TlkObMqNSsVU62PYzXZ/SMTjzyGAFF1YusgxGcSWTEXBhp0CPwQ1A==
458 |
459 | color-support@^1.1.3:
460 | version "1.1.3"
461 | resolved "https://registry.npmjs.org/color-support/-/color-support-1.1.3.tgz"
462 | integrity sha512-qiBjkpbMLO/HL68y+lh4q0/O1MZFj2RX6X/KmMa3+gJD3z+WwI1ZzDHysvqHGS3mP6mznPckpXmw1nI9cJjyRg==
463 |
464 | concat-map@0.0.1:
465 | version "0.0.1"
466 | resolved "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz"
467 | integrity sha1-2Klr13/Wjfd5OnMDajug1UBdR3s=
468 |
469 | concat-stream@~2.0.0:
470 | version "2.0.0"
471 | resolved "https://registry.npmjs.org/concat-stream/-/concat-stream-2.0.0.tgz"
472 | integrity sha512-MWufYdFw53ccGjCA+Ol7XJYpAlW6/prSMzuPOTRnJGcGzuhLn4Scrz7qf6o8bROZ514ltazcIFJZevcfbo0x7A==
473 | dependencies:
474 | buffer-from "^1.0.0"
475 | inherits "^2.0.3"
476 | readable-stream "^3.0.2"
477 | typedarray "^0.0.6"
478 |
479 | console-control-strings@^1.1.0:
480 | version "1.1.0"
481 | resolved "https://registry.npmjs.org/console-control-strings/-/console-control-strings-1.1.0.tgz"
482 | integrity sha512-ty/fTekppD2fIwRvnZAVdeOiGd1c7YXEixbgJTNzqcxJWKQnjJ/V1bNEEE6hygpM3WjwHFUVK6HTjWSzV4a8sQ==
483 |
484 | content-disposition@0.5.4:
485 | version "0.5.4"
486 | resolved "https://registry.npmjs.org/content-disposition/-/content-disposition-0.5.4.tgz"
487 | integrity sha512-FveZTNuGw04cxlAiWbzi6zTAL/lhehaWbTtgluJh4/E95DqMwTmha3KZN1aAWA8cFIhHzMZUvLevkw5Rqk+tSQ==
488 | dependencies:
489 | safe-buffer "5.2.1"
490 |
491 | content-type@~1.0.4:
492 | version "1.0.4"
493 | resolved "https://registry.npmjs.org/content-type/-/content-type-1.0.4.tgz"
494 | integrity sha512-hIP3EEPs8tB9AT1L+NUqtwOAps4mk2Zob89MWXMHjHWg9milF/j4osnnQLXBCBFBk/tvIG/tUc9mOUJiPBhPXA==
495 |
496 | content-type@~1.0.5:
497 | version "1.0.5"
498 | resolved "https://registry.npmjs.org/content-type/-/content-type-1.0.5.tgz"
499 | integrity sha512-nTjqfcBFEipKdXCv4YDQWCfmcLZKm81ldF0pAopTvyrFGVbcR6P/VAAd5G7N+0tTr8QqiU0tFadD6FK4NtJwOA==
500 |
501 | cookie-signature@1.0.6:
502 | version "1.0.6"
503 | resolved "https://registry.npmjs.org/cookie-signature/-/cookie-signature-1.0.6.tgz"
504 | integrity sha1-4wOogrNCzD7oylE6eZmXNNqzriw=
505 |
506 | cookie@0.6.0:
507 | version "0.6.0"
508 | resolved "https://registry.npmjs.org/cookie/-/cookie-0.6.0.tgz"
509 | integrity sha512-U71cyTamuh1CRNCfpGY6to28lxvNwPG4Guz/EVjgf3Jmzv0vlDp1atT9eS5dDjMYHucpHbWns6Lwf3BKz6svdw==
510 |
511 | create-require@^1.1.0:
512 | version "1.1.1"
513 | resolved "https://registry.npmjs.org/create-require/-/create-require-1.1.1.tgz"
514 | integrity sha512-dcKFX3jn0MpIaXjisoRvexIJVEKzaq7z2rZKxf+MSr9TkdmHmsU4m2lcLojrj/FHl8mk5VxMmYA+ftRkP/3oKQ==
515 |
516 | debug@2.6.9:
517 | version "2.6.9"
518 | resolved "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz"
519 | integrity sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==
520 | dependencies:
521 | ms "2.0.0"
522 |
523 | debug@4, debug@^4.1.1, debug@^4.3.3, debug@^4.3.4:
524 | version "4.3.4"
525 | resolved "https://registry.npmjs.org/debug/-/debug-4.3.4.tgz"
526 | integrity sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==
527 | dependencies:
528 | ms "2.1.2"
529 |
530 | decompress-response@^6.0.0:
531 | version "6.0.0"
532 | resolved "https://registry.npmjs.org/decompress-response/-/decompress-response-6.0.0.tgz"
533 | integrity sha512-aW35yZM6Bb/4oJlZncMH2LCoZtJXTRxES17vE3hoRiowU2kWHaJKFkSBDnDR+cm9J+9QhXmREyIfv0pji9ejCQ==
534 | dependencies:
535 | mimic-response "^3.1.0"
536 |
537 | deep-extend@^0.6.0:
538 | version "0.6.0"
539 | resolved "https://registry.npmjs.org/deep-extend/-/deep-extend-0.6.0.tgz"
540 | integrity sha512-LOHxIOaPYdHlJRtCQfDIVZtfw/ufM8+rVj649RIHzcm/vGwQRXFt6OPqIFWsm2XEMrNIEtWR64sY1LEKD2vAOA==
541 |
542 | define-data-property@^1.1.4:
543 | version "1.1.4"
544 | resolved "https://registry.npmjs.org/define-data-property/-/define-data-property-1.1.4.tgz"
545 | integrity sha512-rBMvIzlpA8v6E+SJZoo++HAYqsLrkg7MSfIinMPFhmkorw7X+dOXVJQs+QT69zGkzMyfDnIMN2Wid1+NbL3T+A==
546 | dependencies:
547 | es-define-property "^1.0.0"
548 | es-errors "^1.3.0"
549 | gopd "^1.0.1"
550 |
551 | delegates@^1.0.0:
552 | version "1.0.0"
553 | resolved "https://registry.npmjs.org/delegates/-/delegates-1.0.0.tgz"
554 | integrity sha1-hMbhWbgZBP3KWaDvRM2HDTElD5o=
555 |
556 | denque@^2.1.0:
557 | version "2.1.0"
558 | resolved "https://registry.yarnpkg.com/denque/-/denque-2.1.0.tgz#e93e1a6569fb5e66f16a3c2a2964617d349d6ab1"
559 | integrity sha512-HVQE3AAb/pxF8fQAoiqpvg9i3evqug3hoiwakOyZAwJm+6vZehbkYXZ0l4JxS+I3QxM97v5aaRNhj8v5oBhekw==
560 |
561 | depd@2.0.0:
562 | version "2.0.0"
563 | resolved "https://registry.npmjs.org/depd/-/depd-2.0.0.tgz"
564 | integrity sha512-g7nH6P6dyDioJogAAGprGpCtVImJhpPk/roCzdb3fIh61/s/nPsfR6onyMwkCAR/OlC3yBC0lESvUoQEAssIrw==
565 |
566 | destroy@1.2.0:
567 | version "1.2.0"
568 | resolved "https://registry.npmjs.org/destroy/-/destroy-1.2.0.tgz"
569 | integrity sha512-2sJGJTaXIIaR1w4iJSNoN0hnMY7Gpc/n8D4qSCJw8QqFWXf7cuAgnEHxBpweaVcPevC2l3KpjYCx3NypQQgaJg==
570 |
571 | detect-libc@^2.0.0:
572 | version "2.0.2"
573 | resolved "https://registry.npmjs.org/detect-libc/-/detect-libc-2.0.2.tgz"
574 | integrity sha512-UX6sGumvvqSaXgdKGUsgZWqcUyIXZ/vZTrlRT/iobiKhGL0zL4d3osHj3uqllWJK+i+sixDS/3COVEOFbupFyw==
575 |
576 | diff@^4.0.1:
577 | version "4.0.1"
578 | resolved "https://registry.npmjs.org/diff/-/diff-4.0.1.tgz"
579 | integrity sha512-s2+XdvhPCOF01LRQBC8hf4vhbVmI2CGS5aZnxLJlT5FtdhPCDFq80q++zK2KlrVorVDdL5BOGZ/VfLrVtYNF+Q==
580 |
581 | docker-modem@^2.1.0:
582 | version "2.1.1"
583 | resolved "https://registry.npmjs.org/docker-modem/-/docker-modem-2.1.1.tgz"
584 | integrity sha512-zSFwYN4AP38LJhTIOpZMjiDbAqSJbv8+u9i/Xq5XABIeTzgp83VF63epu6sVHWxe+6tfhMXqgV+sYjZWh/UzSQ==
585 | dependencies:
586 | debug "^4.1.1"
587 | readable-stream "^3.5.0"
588 | split-ca "^1.0.1"
589 | ssh2 "^0.8.7"
590 |
591 | dockerode@^3.1.0:
592 | version "3.1.0"
593 | resolved "https://registry.npmjs.org/dockerode/-/dockerode-3.1.0.tgz"
594 | integrity sha512-E0KknBBTlIVEvtt2XJRZ3he59u2UN8Yr1A08Sey/BKIox+WlwnJp5fL5SKyhPgNmSXgamPEuKYCJxMi31uj0Nw==
595 | dependencies:
596 | concat-stream "~2.0.0"
597 | docker-modem "^2.1.0"
598 | tar-fs "~2.0.0"
599 |
600 | dotenv@^8.2.0:
601 | version "8.2.0"
602 | resolved "https://registry.npmjs.org/dotenv/-/dotenv-8.2.0.tgz"
603 | integrity sha512-8sJ78ElpbDJBHNeBzUbUVLsqKdccaa/BXF1uPTw3GrvQTBgrQrtObr2mUrE38vzYd8cEv+m/JBfDLioYcfXoaw==
604 |
605 | dottie@^2.0.6:
606 | version "2.0.6"
607 | resolved "https://registry.npmjs.org/dottie/-/dottie-2.0.6.tgz"
608 | integrity sha512-iGCHkfUc5kFekGiqhe8B/mdaurD+lakO9txNnTvKtA6PISrw86LgqHvRzWYPyoE2Ph5aMIrCw9/uko6XHTKCwA==
609 |
610 | dynamic-dedupe@^0.3.0:
611 | version "0.3.0"
612 | resolved "https://registry.npmjs.org/dynamic-dedupe/-/dynamic-dedupe-0.3.0.tgz"
613 | integrity sha1-BuRMIj9eTpTXjvnbI6ZRXOL5YqE=
614 | dependencies:
615 | xtend "^4.0.0"
616 |
617 | ecdsa-sig-formatter@1.0.11:
618 | version "1.0.11"
619 | resolved "https://registry.npmjs.org/ecdsa-sig-formatter/-/ecdsa-sig-formatter-1.0.11.tgz"
620 | integrity sha512-nagl3RYrbNv6kQkeJIpt6NJZy8twLB/2vtz6yN9Z4vRKHN4/QZJIEbqohALSgwKdnksuY3k5Addp5lg8sVoVcQ==
621 | dependencies:
622 | safe-buffer "^5.0.1"
623 |
624 | ee-first@1.1.1:
625 | version "1.1.1"
626 | resolved "https://registry.npmjs.org/ee-first/-/ee-first-1.1.1.tgz"
627 | integrity sha1-WQxhFWsK4vTwJVcyoViyZrxWsh0=
628 |
629 | emoji-regex@^8.0.0:
630 | version "8.0.0"
631 | resolved "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz"
632 | integrity sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==
633 |
634 | encodeurl@~1.0.2:
635 | version "1.0.2"
636 | resolved "https://registry.npmjs.org/encodeurl/-/encodeurl-1.0.2.tgz"
637 | integrity sha1-rT/0yG7C0CkyL1oCw6mmBslbP1k=
638 |
639 | encoding@^0.1.12:
640 | version "0.1.13"
641 | resolved "https://registry.npmjs.org/encoding/-/encoding-0.1.13.tgz"
642 | integrity sha512-ETBauow1T35Y/WZMkio9jiM0Z5xjHHmJ4XmjZOq1l/dXz3lr2sRn87nJy20RupqSh1F2m3HHPSp8ShIPQJrJ3A==
643 | dependencies:
644 | iconv-lite "^0.6.2"
645 |
646 | end-of-stream@^1.1.0, end-of-stream@^1.4.1:
647 | version "1.4.4"
648 | resolved "https://registry.npmjs.org/end-of-stream/-/end-of-stream-1.4.4.tgz"
649 | integrity sha512-+uw1inIHVPQoaVuHzRyXd21icM+cnt4CzD5rW+NC1wjOUSTOs+Te7FOv7AhN7vS9x/oIyhLP5PR1H+phQAHu5Q==
650 | dependencies:
651 | once "^1.4.0"
652 |
653 | env-paths@^2.2.0:
654 | version "2.2.1"
655 | resolved "https://registry.npmjs.org/env-paths/-/env-paths-2.2.1.tgz"
656 | integrity sha512-+h1lkLKhZMTYjog1VEpJNG7NZJWcuc2DDk/qsqSTRRCOXiLjeQ1d1/udrUGhqMxUgAlwKNZ0cf2uqan5GLuS2A==
657 |
658 | err-code@^2.0.2:
659 | version "2.0.3"
660 | resolved "https://registry.npmjs.org/err-code/-/err-code-2.0.3.tgz"
661 | integrity sha512-2bmlRpNKBxT/CRmPOlyISQpNj+qSeYvcym/uT0Jx2bMOlKLtSy1ZmLuVxSEKKyor/N5yhvp/ZiG1oE3DEYMSFA==
662 |
663 | es-define-property@^1.0.0:
664 | version "1.0.0"
665 | resolved "https://registry.npmjs.org/es-define-property/-/es-define-property-1.0.0.tgz"
666 | integrity sha512-jxayLKShrEqqzJ0eumQbVhTYQM27CfT1T35+gCgDFoL82JLsXqTJ76zv6A0YLOgEnLUMvLzsDsGIrl8NFpT2gQ==
667 | dependencies:
668 | get-intrinsic "^1.2.4"
669 |
670 | es-errors@^1.3.0:
671 | version "1.3.0"
672 | resolved "https://registry.npmjs.org/es-errors/-/es-errors-1.3.0.tgz"
673 | integrity sha512-Zf5H2Kxt2xjTvbJvP2ZWLEICxA6j+hAmMzIlypy4xcBg1vKVnx89Wy0GbS+kf5cwCVFFzdCFh2XSCFNULS6csw==
674 |
675 | escape-html@~1.0.3:
676 | version "1.0.3"
677 | resolved "https://registry.npmjs.org/escape-html/-/escape-html-1.0.3.tgz"
678 | integrity sha1-Aljq5NPQwJdN4cFpGI7wBR0dGYg=
679 |
680 | etag@~1.8.1:
681 | version "1.8.1"
682 | resolved "https://registry.npmjs.org/etag/-/etag-1.8.1.tgz"
683 | integrity sha1-Qa4u62XvpiJorr/qg6x9eSmbCIc=
684 |
685 | expand-template@^2.0.3:
686 | version "2.0.3"
687 | resolved "https://registry.npmjs.org/expand-template/-/expand-template-2.0.3.tgz"
688 | integrity sha512-XYfuKMvj4O35f/pOXLObndIRvyQ+/+6AhODh+OKWj9S9498pHHn/IMszH+gt0fBCRWMNfk1ZSp5x3AifmnI2vg==
689 |
690 | express@^4.19.2:
691 | version "4.19.2"
692 | resolved "https://registry.npmjs.org/express/-/express-4.19.2.tgz"
693 | integrity sha512-5T6nhjsT+EOMzuck8JjBHARTHfMht0POzlA60WV2pMD3gyXw2LZnZ+ueGdNxG+0calOJcWKbpFcuzLZ91YWq9Q==
694 | dependencies:
695 | accepts "~1.3.8"
696 | array-flatten "1.1.1"
697 | body-parser "1.20.2"
698 | content-disposition "0.5.4"
699 | content-type "~1.0.4"
700 | cookie "0.6.0"
701 | cookie-signature "1.0.6"
702 | debug "2.6.9"
703 | depd "2.0.0"
704 | encodeurl "~1.0.2"
705 | escape-html "~1.0.3"
706 | etag "~1.8.1"
707 | finalhandler "1.2.0"
708 | fresh "0.5.2"
709 | http-errors "2.0.0"
710 | merge-descriptors "1.0.1"
711 | methods "~1.1.2"
712 | on-finished "2.4.1"
713 | parseurl "~1.3.3"
714 | path-to-regexp "0.1.7"
715 | proxy-addr "~2.0.7"
716 | qs "6.11.0"
717 | range-parser "~1.2.1"
718 | safe-buffer "5.2.1"
719 | send "0.18.0"
720 | serve-static "1.15.0"
721 | setprototypeof "1.2.0"
722 | statuses "2.0.1"
723 | type-is "~1.6.18"
724 | utils-merge "1.0.1"
725 | vary "~1.1.2"
726 |
727 | file-uri-to-path@1.0.0:
728 | version "1.0.0"
729 | resolved "https://registry.npmjs.org/file-uri-to-path/-/file-uri-to-path-1.0.0.tgz"
730 | integrity sha512-0Zt+s3L7Vf1biwWZ29aARiVYLx7iMGnEUl9x33fbB/j3jR81u/O2LbqK+Bm1CDSNDKVtJ/YjwY7TUd5SkeLQLw==
731 |
732 | fill-range@^7.0.1:
733 | version "7.0.1"
734 | resolved "https://registry.npmjs.org/fill-range/-/fill-range-7.0.1.tgz"
735 | integrity sha512-qOo9F+dMUmC2Lcb4BbVvnKJxTPjCm+RRpe4gDuGrzkL7mEVl/djYSu2OdQ2Pa302N4oqkSg9ir6jaLWJ2USVpQ==
736 | dependencies:
737 | to-regex-range "^5.0.1"
738 |
739 | finalhandler@1.2.0:
740 | version "1.2.0"
741 | resolved "https://registry.npmjs.org/finalhandler/-/finalhandler-1.2.0.tgz"
742 | integrity sha512-5uXcUVftlQMFnWC9qu/svkWv3GTd2PfUhK/3PLkYNAe7FbqJMt3515HaxE6eRL74GdsriiwujiawdaB1BpEISg==
743 | dependencies:
744 | debug "2.6.9"
745 | encodeurl "~1.0.2"
746 | escape-html "~1.0.3"
747 | on-finished "2.4.1"
748 | parseurl "~1.3.3"
749 | statuses "2.0.1"
750 | unpipe "~1.0.0"
751 |
752 | forwarded@0.2.0:
753 | version "0.2.0"
754 | resolved "https://registry.npmjs.org/forwarded/-/forwarded-0.2.0.tgz"
755 | integrity sha512-buRG0fpBtRHSTCOASe6hD258tEubFoRLb4ZNA6NxMVHNw2gOcwHo9wyablzMzOA5z9xA9L1KNjk/Nt6MT9aYow==
756 |
757 | fresh@0.5.2:
758 | version "0.5.2"
759 | resolved "https://registry.npmjs.org/fresh/-/fresh-0.5.2.tgz"
760 | integrity sha1-PYyt2Q2XZWn6g1qx+OSyOhBWBac=
761 |
762 | fs-constants@^1.0.0:
763 | version "1.0.0"
764 | resolved "https://registry.npmjs.org/fs-constants/-/fs-constants-1.0.0.tgz"
765 | integrity sha512-y6OAwoSIf7FyjMIv94u+b5rdheZEjzR63GTyZJm5qh4Bi+2YgwLCcI/fPFZkL5PSixOt6ZNKm+w+Hfp/Bciwow==
766 |
767 | fs-minipass@^2.0.0:
768 | version "2.1.0"
769 | resolved "https://registry.npmjs.org/fs-minipass/-/fs-minipass-2.1.0.tgz"
770 | integrity sha512-V/JgOLFCS+R6Vcq0slCuaeWEdNC3ouDlJMNIsacH2VtALiu9mV4LPrHc5cDl8k5aw6J8jwgWWpiTo5RYhmIzvg==
771 | dependencies:
772 | minipass "^3.0.0"
773 |
774 | fs.realpath@^1.0.0:
775 | version "1.0.0"
776 | resolved "https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz"
777 | integrity sha1-FQStJSMVjKpA20onh8sBQRmU6k8=
778 |
779 | fsevents@~2.3.2:
780 | version "2.3.3"
781 | resolved "https://registry.npmjs.org/fsevents/-/fsevents-2.3.3.tgz"
782 | integrity sha512-5xoDfX+fL7faATnagmWPpbFtwh/R77WmMMqqHGS65C3vvB0YHrgF+B1YmZ3441tMj5n63k0212XNoJwzlhffQw==
783 |
784 | function-bind@^1.1.2:
785 | version "1.1.2"
786 | resolved "https://registry.npmjs.org/function-bind/-/function-bind-1.1.2.tgz"
787 | integrity sha512-7XHNxH7qX9xG5mIwxkhumTox/MIRNcOgDrxWsMt2pAr23WHp6MrRlN7FBSFpCpr+oVO0F744iUgR82nJMfG2SA==
788 |
789 | gauge@^4.0.3:
790 | version "4.0.4"
791 | resolved "https://registry.npmjs.org/gauge/-/gauge-4.0.4.tgz"
792 | integrity sha512-f9m+BEN5jkg6a0fZjleidjN51VE1X+mPFQ2DJ0uv1V39oCLCbsGe6yjbBnp7eK7z/+GAon99a3nHuqbuuthyPg==
793 | dependencies:
794 | aproba "^1.0.3 || ^2.0.0"
795 | color-support "^1.1.3"
796 | console-control-strings "^1.1.0"
797 | has-unicode "^2.0.1"
798 | signal-exit "^3.0.7"
799 | string-width "^4.2.3"
800 | strip-ansi "^6.0.1"
801 | wide-align "^1.1.5"
802 |
803 | get-intrinsic@^1.1.3, get-intrinsic@^1.2.4:
804 | version "1.2.4"
805 | resolved "https://registry.npmjs.org/get-intrinsic/-/get-intrinsic-1.2.4.tgz"
806 | integrity sha512-5uYhsJH8VJBTv7oslg4BznJYhDoRI6waYCxMmCdnTrcCrHA/fCFKoTFz2JKKE0HdDFUF7/oQuhzumXJK7paBRQ==
807 | dependencies:
808 | es-errors "^1.3.0"
809 | function-bind "^1.1.2"
810 | has-proto "^1.0.1"
811 | has-symbols "^1.0.3"
812 | hasown "^2.0.0"
813 |
814 | github-from-package@0.0.0:
815 | version "0.0.0"
816 | resolved "https://registry.npmjs.org/github-from-package/-/github-from-package-0.0.0.tgz"
817 | integrity sha512-SyHy3T1v2NUXn29OsWdxmK6RwHD+vkj3v8en8AOBZ1wBQ/hCAQ5bAQTD02kW4W9tUp/3Qh6J8r9EvntiyCmOOw==
818 |
819 | glob-parent@~5.1.2:
820 | version "5.1.2"
821 | resolved "https://registry.npmjs.org/glob-parent/-/glob-parent-5.1.2.tgz"
822 | integrity sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==
823 | dependencies:
824 | is-glob "^4.0.1"
825 |
826 | glob@7.2.0:
827 | version "7.2.0"
828 | resolved "https://registry.npmjs.org/glob/-/glob-7.2.0.tgz"
829 | integrity sha512-lmLf6gtyrPq8tTjSmrO94wBeQbFR3HbLHbuyD69wuyQkImp2hWqMGB47OX65FBkPffO641IP9jWa1z4ivqG26Q==
830 | dependencies:
831 | fs.realpath "^1.0.0"
832 | inflight "^1.0.4"
833 | inherits "2"
834 | minimatch "^3.0.4"
835 | once "^1.3.0"
836 | path-is-absolute "^1.0.0"
837 |
838 | glob@^7.1.3:
839 | version "7.1.6"
840 | resolved "https://registry.npmjs.org/glob/-/glob-7.1.6.tgz"
841 | integrity sha512-LwaxwyZ72Lk7vZINtNNrywX0ZuLyStrdDtabefZKAY5ZGJhVtgdznluResxNmPitE0SAO+O26sWTHeKSI2wMBA==
842 | dependencies:
843 | fs.realpath "^1.0.0"
844 | inflight "^1.0.4"
845 | inherits "2"
846 | minimatch "^3.0.4"
847 | once "^1.3.0"
848 | path-is-absolute "^1.0.0"
849 |
850 | glob@^7.1.4:
851 | version "7.2.3"
852 | resolved "https://registry.npmjs.org/glob/-/glob-7.2.3.tgz"
853 | integrity sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q==
854 | dependencies:
855 | fs.realpath "^1.0.0"
856 | inflight "^1.0.4"
857 | inherits "2"
858 | minimatch "^3.1.1"
859 | once "^1.3.0"
860 | path-is-absolute "^1.0.0"
861 |
862 | gopd@^1.0.1:
863 | version "1.0.1"
864 | resolved "https://registry.npmjs.org/gopd/-/gopd-1.0.1.tgz"
865 | integrity sha512-d65bNlIadxvpb/A2abVdlqKqV563juRnZ1Wtk6s1sIR8uNsXR70xqIzVqxVf1eTqDunwT2MkczEeaezCKTZhwA==
866 | dependencies:
867 | get-intrinsic "^1.1.3"
868 |
869 | graceful-fs@^4.2.6:
870 | version "4.2.11"
871 | resolved "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.11.tgz"
872 | integrity sha512-RbJ5/jmFcNNCcDV5o9eTnBLJ/HszWV0P73bc+Ff4nS/rJj+YaS6IGyiOL0VoBYX+l1Wrl3k63h/KrH+nhJ0XvQ==
873 |
874 | has-property-descriptors@^1.0.2:
875 | version "1.0.2"
876 | resolved "https://registry.npmjs.org/has-property-descriptors/-/has-property-descriptors-1.0.2.tgz"
877 | integrity sha512-55JNKuIW+vq4Ke1BjOTjM2YctQIvCT7GFzHwmfZPGo5wnrgkid0YQtnAleFSqumZm4az3n2BS+erby5ipJdgrg==
878 | dependencies:
879 | es-define-property "^1.0.0"
880 |
881 | has-proto@^1.0.1:
882 | version "1.0.3"
883 | resolved "https://registry.npmjs.org/has-proto/-/has-proto-1.0.3.tgz"
884 | integrity sha512-SJ1amZAJUiZS+PhsVLf5tGydlaVB8EdFpaSO4gmiUKUOxk8qzn5AIy4ZeJUmh22znIdk/uMAUT2pl3FxzVUH+Q==
885 |
886 | has-symbols@^1.0.3:
887 | version "1.0.3"
888 | resolved "https://registry.npmjs.org/has-symbols/-/has-symbols-1.0.3.tgz"
889 | integrity sha512-l3LCuF6MgDNwTDKkdYGEihYjt5pRPbEg46rtlmnSPlUbgmB8LOIrKJbYYFBSbnPaJexMKtiPO8hmeRjRz2Td+A==
890 |
891 | has-unicode@^2.0.1:
892 | version "2.0.1"
893 | resolved "https://registry.npmjs.org/has-unicode/-/has-unicode-2.0.1.tgz"
894 | integrity sha512-8Rf9Y83NBReMnx0gFzA8JImQACstCYWUplepDa9xprwwtmgEZUF0h/i5xSA625zB/I37EtrswSST6OXxwaaIJQ==
895 |
896 | hasown@^2.0.0:
897 | version "2.0.2"
898 | resolved "https://registry.npmjs.org/hasown/-/hasown-2.0.2.tgz"
899 | integrity sha512-0hJU9SCPvmMzIBdZFqNPXWa6dqh7WdH0cII9y+CyS8rG3nL48Bclra9HmKhVVUHyPWNH5Y7xDwAB7bfgSjkUMQ==
900 | dependencies:
901 | function-bind "^1.1.2"
902 |
903 | http-cache-semantics@^4.1.0:
904 | version "4.1.1"
905 | resolved "https://registry.npmjs.org/http-cache-semantics/-/http-cache-semantics-4.1.1.tgz"
906 | integrity sha512-er295DKPVsV82j5kw1Gjt+ADA/XYHsajl82cGNQG2eyoPkvgUhX+nDIyelzhIWbbsXP39EHcI6l5tYs2FYqYXQ==
907 |
908 | http-errors@2.0.0:
909 | version "2.0.0"
910 | resolved "https://registry.npmjs.org/http-errors/-/http-errors-2.0.0.tgz"
911 | integrity sha512-FtwrG/euBzaEjYeRqOgly7G0qviiXoJWnvEH2Z1plBdXgbyjv34pHTSb9zoeHMyDy33+DWy5Wt9Wo+TURtOYSQ==
912 | dependencies:
913 | depd "2.0.0"
914 | inherits "2.0.4"
915 | setprototypeof "1.2.0"
916 | statuses "2.0.1"
917 | toidentifier "1.0.1"
918 |
919 | http-proxy-agent@^4.0.1:
920 | version "4.0.1"
921 | resolved "https://registry.npmjs.org/http-proxy-agent/-/http-proxy-agent-4.0.1.tgz"
922 | integrity sha512-k0zdNgqWTGA6aeIRVpvfVob4fL52dTfaehylg0Y4UvSySvOq/Y+BOyPrgpUrA7HylqvU8vIZGsRuXmspskV0Tg==
923 | dependencies:
924 | "@tootallnate/once" "1"
925 | agent-base "6"
926 | debug "4"
927 |
928 | https-proxy-agent@^5.0.0:
929 | version "5.0.1"
930 | resolved "https://registry.npmjs.org/https-proxy-agent/-/https-proxy-agent-5.0.1.tgz"
931 | integrity sha512-dFcAjpTQFgoLMzC2VwU+C/CbS7uRL0lWmxDITmqm7C+7F0Odmj6s9l6alZc6AELXhrnggM2CeWSXHGOdX2YtwA==
932 | dependencies:
933 | agent-base "6"
934 | debug "4"
935 |
936 | humanize-ms@^1.2.1:
937 | version "1.2.1"
938 | resolved "https://registry.npmjs.org/humanize-ms/-/humanize-ms-1.2.1.tgz"
939 | integrity sha512-Fl70vYtsAFb/C06PTS9dZBo7ihau+Tu/DNCk/OyHhea07S+aeMWpFFkUaXRa8fI+ScZbEI8dfSxwY7gxZ9SAVQ==
940 | dependencies:
941 | ms "^2.0.0"
942 |
943 | iconv-lite@0.4.24:
944 | version "0.4.24"
945 | resolved "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.4.24.tgz"
946 | integrity sha512-v3MXnZAcvnywkTUEZomIActle7RXXeedOR31wwl7VlyoXO4Qi9arvSenNQWne1TcRwhCL1HwLI21bEqdpj8/rA==
947 | dependencies:
948 | safer-buffer ">= 2.1.2 < 3"
949 |
950 | iconv-lite@^0.6.2, iconv-lite@^0.6.3:
951 | version "0.6.3"
952 | resolved "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.6.3.tgz"
953 | integrity sha512-4fCk79wshMdzMp2rH06qWrJE4iolqLhCUH+OiuIgU++RB0+94NlDL81atO7GX55uUKueo0txHNtvEyI6D7WdMw==
954 | dependencies:
955 | safer-buffer ">= 2.1.2 < 3.0.0"
956 |
957 | ieee754@^1.1.13:
958 | version "1.2.1"
959 | resolved "https://registry.npmjs.org/ieee754/-/ieee754-1.2.1.tgz"
960 | integrity sha512-dcyqhDvX1C46lXZcVqCpK+FtMRQVdIMN6/Df5js2zouUsqG7I6sFxitIC+7KYK29KdXOLHdu9zL4sFnoVQnqaA==
961 |
962 | imurmurhash@^0.1.4:
963 | version "0.1.4"
964 | resolved "https://registry.npmjs.org/imurmurhash/-/imurmurhash-0.1.4.tgz"
965 | integrity sha512-JmXMZ6wuvDmLiHEml9ykzqO6lwFbof0GG4IkcGaENdCRDDmMVnny7s5HsIgHCbaq0w2MyPhDqkhTUgS2LU2PHA==
966 |
967 | indent-string@^4.0.0:
968 | version "4.0.0"
969 | resolved "https://registry.npmjs.org/indent-string/-/indent-string-4.0.0.tgz"
970 | integrity sha512-EdDDZu4A2OyIK7Lr/2zG+w5jmbuk1DVBnEwREQvBzspBJkCEbRa8GxU1lghYcaGJCnRWibjDXlq779X1/y5xwg==
971 |
972 | infer-owner@^1.0.4:
973 | version "1.0.4"
974 | resolved "https://registry.npmjs.org/infer-owner/-/infer-owner-1.0.4.tgz"
975 | integrity sha512-IClj+Xz94+d7irH5qRyfJonOdfTzuDaifE6ZPWfx0N0+/ATZCbuTPq2prFl526urkQd90WyUKIh1DfBQ2hMz9A==
976 |
977 | inflection@^1.13.4:
978 | version "1.13.4"
979 | resolved "https://registry.npmjs.org/inflection/-/inflection-1.13.4.tgz"
980 | integrity sha512-6I/HUDeYFfuNCVS3td055BaXBwKYuzw7K3ExVMStBowKo9oOAMJIXIHvdyR3iboTCp1b+1i5DSkIZTcwIktuDw==
981 |
982 | inflight@^1.0.4:
983 | version "1.0.6"
984 | resolved "https://registry.npmjs.org/inflight/-/inflight-1.0.6.tgz"
985 | integrity sha1-Sb1jMdfQLQwJvJEKEHW6gWW1bfk=
986 | dependencies:
987 | once "^1.3.0"
988 | wrappy "1"
989 |
990 | inherits@2, inherits@2.0.4, inherits@^2.0.3, inherits@^2.0.4:
991 | version "2.0.4"
992 | resolved "https://registry.npmjs.org/inherits/-/inherits-2.0.4.tgz"
993 | integrity sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==
994 |
995 | ini@~1.3.0:
996 | version "1.3.8"
997 | resolved "https://registry.npmjs.org/ini/-/ini-1.3.8.tgz"
998 | integrity sha512-JV/yugV2uzW5iMRSiZAyDtQd+nxtUnjeLt0acNdw98kKLrvuRVyB80tsREOE7yvGVgalhZ6RNXCmEHkUKBKxew==
999 |
1000 | ip-address@^9.0.5:
1001 | version "9.0.5"
1002 | resolved "https://registry.npmjs.org/ip-address/-/ip-address-9.0.5.tgz"
1003 | integrity sha512-zHtQzGojZXTwZTHQqra+ETKd4Sn3vgi7uBmlPoXVWZqYvuKmtI0l/VZTjqGmJY9x88GGOaZ9+G9ES8hC4T4X8g==
1004 | dependencies:
1005 | jsbn "1.1.0"
1006 | sprintf-js "^1.1.3"
1007 |
1008 | ipaddr.js@1.9.1:
1009 | version "1.9.1"
1010 | resolved "https://registry.npmjs.org/ipaddr.js/-/ipaddr.js-1.9.1.tgz"
1011 | integrity sha512-0KI/607xoxSToH7GjN1FfSbLoU0+btTicjsQSWQlh/hZykN8KpmMf7uYwPW3R+akZ6R/w18ZlXSHBYXiYUPO3g==
1012 |
1013 | is-binary-path@~2.1.0:
1014 | version "2.1.0"
1015 | resolved "https://registry.npmjs.org/is-binary-path/-/is-binary-path-2.1.0.tgz"
1016 | integrity sha512-ZMERYes6pDydyuGidse7OsHxtbI7WVeUEozgR/g7rd0xUimYNlvZRE/K2MgZTjWy725IfelLeVcEM97mmtRGXw==
1017 | dependencies:
1018 | binary-extensions "^2.0.0"
1019 |
1020 | is-extglob@^2.1.1:
1021 | version "2.1.1"
1022 | resolved "https://registry.npmjs.org/is-extglob/-/is-extglob-2.1.1.tgz"
1023 | integrity sha512-SbKbANkN603Vi4jEZv49LeVJMn4yGwsbzZworEoyEiutsN3nJYdbO36zfhGJ6QEDpOZIFkDtnq5JRxmvl3jsoQ==
1024 |
1025 | is-fullwidth-code-point@^3.0.0:
1026 | version "3.0.0"
1027 | resolved "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz"
1028 | integrity sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==
1029 |
1030 | is-glob@^4.0.1, is-glob@~4.0.1:
1031 | version "4.0.3"
1032 | resolved "https://registry.npmjs.org/is-glob/-/is-glob-4.0.3.tgz"
1033 | integrity sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg==
1034 | dependencies:
1035 | is-extglob "^2.1.1"
1036 |
1037 | is-lambda@^1.0.1:
1038 | version "1.0.1"
1039 | resolved "https://registry.npmjs.org/is-lambda/-/is-lambda-1.0.1.tgz"
1040 | integrity sha512-z7CMFGNrENq5iFB9Bqo64Xk6Y9sg+epq1myIcdHaGnbMTYOxvzsEtdYqQUylB7LxfkvgrrjP32T6Ywciio9UIQ==
1041 |
1042 | is-number@^7.0.0:
1043 | version "7.0.0"
1044 | resolved "https://registry.npmjs.org/is-number/-/is-number-7.0.0.tgz"
1045 | integrity sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==
1046 |
1047 | isexe@^2.0.0:
1048 | version "2.0.0"
1049 | resolved "https://registry.npmjs.org/isexe/-/isexe-2.0.0.tgz"
1050 | integrity sha1-6PvzdNxVb/iUehDcsFctYz8s+hA=
1051 |
1052 | jsbn@1.1.0:
1053 | version "1.1.0"
1054 | resolved "https://registry.npmjs.org/jsbn/-/jsbn-1.1.0.tgz"
1055 | integrity sha512-4bYVV3aAMtDTTu4+xsDYa6sy9GyJ69/amsu9sYF2zqjiEoZA5xJi3BrfX3uY+/IekIu7MwdObdbDWpoZdBv3/A==
1056 |
1057 | jsonwebtoken@^8.5.1:
1058 | version "8.5.1"
1059 | resolved "https://registry.npmjs.org/jsonwebtoken/-/jsonwebtoken-8.5.1.tgz"
1060 | integrity sha512-XjwVfRS6jTMsqYs0EsuJ4LGxXV14zQybNd4L2r0UvbVnSF9Af8x7p5MzbJ90Ioz/9TI41/hTCvznF/loiSzn8w==
1061 | dependencies:
1062 | jws "^3.2.2"
1063 | lodash.includes "^4.3.0"
1064 | lodash.isboolean "^3.0.3"
1065 | lodash.isinteger "^4.0.4"
1066 | lodash.isnumber "^3.0.3"
1067 | lodash.isplainobject "^4.0.6"
1068 | lodash.isstring "^4.0.1"
1069 | lodash.once "^4.0.0"
1070 | ms "^2.1.1"
1071 | semver "^5.6.0"
1072 |
1073 | jwa@^1.4.1:
1074 | version "1.4.1"
1075 | resolved "https://registry.npmjs.org/jwa/-/jwa-1.4.1.tgz"
1076 | integrity sha512-qiLX/xhEEFKUAJ6FiBMbes3w9ATzyk5W7Hvzpa/SLYdxNtng+gcurvrI7TbACjIXlsJyr05/S1oUhZrc63evQA==
1077 | dependencies:
1078 | buffer-equal-constant-time "1.0.1"
1079 | ecdsa-sig-formatter "1.0.11"
1080 | safe-buffer "^5.0.1"
1081 |
1082 | jws@^3.2.2:
1083 | version "3.2.2"
1084 | resolved "https://registry.npmjs.org/jws/-/jws-3.2.2.tgz"
1085 | integrity sha512-YHlZCB6lMTllWDtSPHz/ZXTsi8S00usEV6v1tjq8tOUZzw7DpSDWVXjXDre6ed1w/pd495ODpHZYSdkRTsa0HA==
1086 | dependencies:
1087 | jwa "^1.4.1"
1088 | safe-buffer "^5.0.1"
1089 |
1090 | lodash.includes@^4.3.0:
1091 | version "4.3.0"
1092 | resolved "https://registry.npmjs.org/lodash.includes/-/lodash.includes-4.3.0.tgz"
1093 | integrity sha1-YLuYqHy5I8aMoeUTJUgzFISfVT8=
1094 |
1095 | lodash.isboolean@^3.0.3:
1096 | version "3.0.3"
1097 | resolved "https://registry.npmjs.org/lodash.isboolean/-/lodash.isboolean-3.0.3.tgz"
1098 | integrity sha1-bC4XHbKiV82WgC/UOwGyDV9YcPY=
1099 |
1100 | lodash.isinteger@^4.0.4:
1101 | version "4.0.4"
1102 | resolved "https://registry.npmjs.org/lodash.isinteger/-/lodash.isinteger-4.0.4.tgz"
1103 | integrity sha1-YZwK89A/iwTDH1iChAt3sRzWg0M=
1104 |
1105 | lodash.isnumber@^3.0.3:
1106 | version "3.0.3"
1107 | resolved "https://registry.npmjs.org/lodash.isnumber/-/lodash.isnumber-3.0.3.tgz"
1108 | integrity sha1-POdoEMWSjQM1IwGsKHMX8RwLH/w=
1109 |
1110 | lodash.isplainobject@^4.0.6:
1111 | version "4.0.6"
1112 | resolved "https://registry.npmjs.org/lodash.isplainobject/-/lodash.isplainobject-4.0.6.tgz"
1113 | integrity sha1-fFJqUtibRcRcxpC4gWO+BJf1UMs=
1114 |
1115 | lodash.isstring@^4.0.1:
1116 | version "4.0.1"
1117 | resolved "https://registry.npmjs.org/lodash.isstring/-/lodash.isstring-4.0.1.tgz"
1118 | integrity sha1-1SfftUVuynzJu5XV2ur4i6VKVFE=
1119 |
1120 | lodash.once@^4.0.0:
1121 | version "4.1.1"
1122 | resolved "https://registry.npmjs.org/lodash.once/-/lodash.once-4.1.1.tgz"
1123 | integrity sha1-DdOXEhPHxW34gJd9UEyI+0cal6w=
1124 |
1125 | lodash@^4.17.21:
1126 | version "4.17.21"
1127 | resolved "https://registry.npmjs.org/lodash/-/lodash-4.17.21.tgz"
1128 | integrity sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg==
1129 |
1130 | lru-cache@^10.2.0:
1131 | version "10.4.3"
1132 | resolved "https://registry.yarnpkg.com/lru-cache/-/lru-cache-10.4.3.tgz#410fc8a17b70e598013df257c2446b7f3383f119"
1133 | integrity sha512-JNAzZcXrCt42VGLuYz0zfAzDfAvJWW6AfYlDBQyDV5DClI2m5sAmK+OIO7s59XfsRsWHp02jAJrRadPRGTt6SQ==
1134 |
1135 | lru-cache@^6.0.0:
1136 | version "6.0.0"
1137 | resolved "https://registry.npmjs.org/lru-cache/-/lru-cache-6.0.0.tgz"
1138 | integrity sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==
1139 | dependencies:
1140 | yallist "^4.0.0"
1141 |
1142 | make-error@^1.1.1:
1143 | version "1.3.5"
1144 | resolved "https://registry.npmjs.org/make-error/-/make-error-1.3.5.tgz"
1145 | integrity sha512-c3sIjNUow0+8swNwVpqoH4YCShKNFkMaw6oH1mNS2haDZQqkeZFlHS3dhoeEbKKmJB4vXpJucU6oH75aDYeE9g==
1146 |
1147 | make-fetch-happen@^9.1.0:
1148 | version "9.1.0"
1149 | resolved "https://registry.npmjs.org/make-fetch-happen/-/make-fetch-happen-9.1.0.tgz"
1150 | integrity sha512-+zopwDy7DNknmwPQplem5lAZX/eCOzSvSNNcSKm5eVwTkOBzoktEfXsa9L23J/GIRhxRsaxzkPEhrJEpE2F4Gg==
1151 | dependencies:
1152 | agentkeepalive "^4.1.3"
1153 | cacache "^15.2.0"
1154 | http-cache-semantics "^4.1.0"
1155 | http-proxy-agent "^4.0.1"
1156 | https-proxy-agent "^5.0.0"
1157 | is-lambda "^1.0.1"
1158 | lru-cache "^6.0.0"
1159 | minipass "^3.1.3"
1160 | minipass-collect "^1.0.2"
1161 | minipass-fetch "^1.3.2"
1162 | minipass-flush "^1.0.5"
1163 | minipass-pipeline "^1.2.4"
1164 | negotiator "^0.6.2"
1165 | promise-retry "^2.0.1"
1166 | socks-proxy-agent "^6.0.0"
1167 | ssri "^8.0.0"
1168 |
1169 | mariadb@^3.3.1:
1170 | version "3.3.1"
1171 | resolved "https://registry.yarnpkg.com/mariadb/-/mariadb-3.3.1.tgz#3ee361242411ba4cf4a80b06e304d1c68c97ad90"
1172 | integrity sha512-L8bh4iuZU3J8H7Co7rQ6OY9FDLItAN1rGy8kPA7Dyxo8AiHADuuONoypKKp1pE09drs6e5LR7UW9luLZ/A4znA==
1173 | dependencies:
1174 | "@types/geojson" "^7946.0.14"
1175 | "@types/node" "^20.11.17"
1176 | denque "^2.1.0"
1177 | iconv-lite "^0.6.3"
1178 | lru-cache "^10.2.0"
1179 |
1180 | media-typer@0.3.0:
1181 | version "0.3.0"
1182 | resolved "https://registry.npmjs.org/media-typer/-/media-typer-0.3.0.tgz"
1183 | integrity sha1-hxDXrwqmJvj/+hzgAWhUUmMlV0g=
1184 |
1185 | merge-descriptors@1.0.1:
1186 | version "1.0.1"
1187 | resolved "https://registry.npmjs.org/merge-descriptors/-/merge-descriptors-1.0.1.tgz"
1188 | integrity sha1-sAqqVW3YtEVoFQ7J0blT8/kMu2E=
1189 |
1190 | methods@~1.1.2:
1191 | version "1.1.2"
1192 | resolved "https://registry.npmjs.org/methods/-/methods-1.1.2.tgz"
1193 | integrity sha1-VSmk1nZUE07cxSZmVoNbD4Ua/O4=
1194 |
1195 | mime-db@1.42.0:
1196 | version "1.42.0"
1197 | resolved "https://registry.npmjs.org/mime-db/-/mime-db-1.42.0.tgz"
1198 | integrity sha512-UbfJCR4UAVRNgMpfImz05smAXK7+c+ZntjaA26ANtkXLlOe947Aag5zdIcKQULAiF9Cq4WxBi9jUs5zkA84bYQ==
1199 |
1200 | mime-db@1.52.0:
1201 | version "1.52.0"
1202 | resolved "https://registry.npmjs.org/mime-db/-/mime-db-1.52.0.tgz"
1203 | integrity sha512-sPU4uV7dYlvtWJxwwxHD0PuihVNiE7TyAbQ5SWxDCB9mUYvOgroQOwYQQOKPJ8CIbE+1ETVlOoK1UC2nU3gYvg==
1204 |
1205 | mime-types@~2.1.24:
1206 | version "2.1.25"
1207 | resolved "https://registry.npmjs.org/mime-types/-/mime-types-2.1.25.tgz"
1208 | integrity sha512-5KhStqB5xpTAeGqKBAMgwaYMnQik7teQN4IAzC7npDv6kzeU6prfkR67bc87J1kWMPGkoaZSq1npmexMgkmEVg==
1209 | dependencies:
1210 | mime-db "1.42.0"
1211 |
1212 | mime-types@~2.1.34:
1213 | version "2.1.35"
1214 | resolved "https://registry.npmjs.org/mime-types/-/mime-types-2.1.35.tgz"
1215 | integrity sha512-ZDY+bPm5zTTF+YpCrAU9nK0UgICYPT0QtT1NZWFv4s++TNkcgVaT0g6+4R2uI4MjQjzysHB1zxuWL50hzaeXiw==
1216 | dependencies:
1217 | mime-db "1.52.0"
1218 |
1219 | mime@1.6.0:
1220 | version "1.6.0"
1221 | resolved "https://registry.npmjs.org/mime/-/mime-1.6.0.tgz"
1222 | integrity sha512-x0Vn8spI+wuJ1O6S7gnbaQg8Pxh4NNHb7KSINmEWKiPE4RKOplvijn+NkmYmmRgP68mc70j2EbeTFRsrswaQeg==
1223 |
1224 | mimic-response@^3.1.0:
1225 | version "3.1.0"
1226 | resolved "https://registry.npmjs.org/mimic-response/-/mimic-response-3.1.0.tgz"
1227 | integrity sha512-z0yWI+4FDrrweS8Zmt4Ej5HdJmky15+L2e6Wgn3+iK5fWzb6T3fhNFq2+MeTRb064c6Wr4N/wv0DzQTjNzHNGQ==
1228 |
1229 | minimatch@^3.0.4:
1230 | version "3.0.4"
1231 | resolved "https://registry.npmjs.org/minimatch/-/minimatch-3.0.4.tgz"
1232 | integrity sha512-yJHVQEhyqPLUTgt9B83PXu6W3rx4MvvHvSUvToogpwoGDOUQ+yDrR0HRot+yOCdCO7u4hX3pWft6kWBBcqh0UA==
1233 | dependencies:
1234 | brace-expansion "^1.1.7"
1235 |
1236 | minimatch@^3.1.1:
1237 | version "3.1.2"
1238 | resolved "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz"
1239 | integrity sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==
1240 | dependencies:
1241 | brace-expansion "^1.1.7"
1242 |
1243 | minimist@0.0.8:
1244 | version "0.0.8"
1245 | resolved "https://registry.npmjs.org/minimist/-/minimist-0.0.8.tgz"
1246 | integrity sha1-hX/Kv8M5fSYluCKCYuhqp6ARsF0=
1247 |
1248 | minimist@^1.2.0, minimist@^1.2.3, minimist@^1.2.6:
1249 | version "1.2.8"
1250 | resolved "https://registry.npmjs.org/minimist/-/minimist-1.2.8.tgz"
1251 | integrity sha512-2yyAR8qBkN3YuheJanUpWC5U3bb5osDywNB8RzDVlDwDHbocAJveqqj1u8+SVD7jkWT4yvsHCpWqqWqAxb0zCA==
1252 |
1253 | minipass-collect@^1.0.2:
1254 | version "1.0.2"
1255 | resolved "https://registry.npmjs.org/minipass-collect/-/minipass-collect-1.0.2.tgz"
1256 | integrity sha512-6T6lH0H8OG9kITm/Jm6tdooIbogG9e0tLgpY6mphXSm/A9u8Nq1ryBG+Qspiub9LjWlBPsPS3tWQ/Botq4FdxA==
1257 | dependencies:
1258 | minipass "^3.0.0"
1259 |
1260 | minipass-fetch@^1.3.2:
1261 | version "1.4.1"
1262 | resolved "https://registry.npmjs.org/minipass-fetch/-/minipass-fetch-1.4.1.tgz"
1263 | integrity sha512-CGH1eblLq26Y15+Azk7ey4xh0J/XfJfrCox5LDJiKqI2Q2iwOLOKrlmIaODiSQS8d18jalF6y2K2ePUm0CmShw==
1264 | dependencies:
1265 | minipass "^3.1.0"
1266 | minipass-sized "^1.0.3"
1267 | minizlib "^2.0.0"
1268 | optionalDependencies:
1269 | encoding "^0.1.12"
1270 |
1271 | minipass-flush@^1.0.5:
1272 | version "1.0.5"
1273 | resolved "https://registry.npmjs.org/minipass-flush/-/minipass-flush-1.0.5.tgz"
1274 | integrity sha512-JmQSYYpPUqX5Jyn1mXaRwOda1uQ8HP5KAT/oDSLCzt1BYRhQU0/hDtsB1ufZfEEzMZ9aAVmsBw8+FWsIXlClWw==
1275 | dependencies:
1276 | minipass "^3.0.0"
1277 |
1278 | minipass-pipeline@^1.2.2, minipass-pipeline@^1.2.4:
1279 | version "1.2.4"
1280 | resolved "https://registry.npmjs.org/minipass-pipeline/-/minipass-pipeline-1.2.4.tgz"
1281 | integrity sha512-xuIq7cIOt09RPRJ19gdi4b+RiNvDFYe5JH+ggNvBqGqpQXcru3PcRmOZuHBKWK1Txf9+cQ+HMVN4d6z46LZP7A==
1282 | dependencies:
1283 | minipass "^3.0.0"
1284 |
1285 | minipass-sized@^1.0.3:
1286 | version "1.0.3"
1287 | resolved "https://registry.npmjs.org/minipass-sized/-/minipass-sized-1.0.3.tgz"
1288 | integrity sha512-MbkQQ2CTiBMlA2Dm/5cY+9SWFEN8pzzOXi6rlM5Xxq0Yqbda5ZQy9sU75a673FE9ZK0Zsbr6Y5iP6u9nktfg2g==
1289 | dependencies:
1290 | minipass "^3.0.0"
1291 |
1292 | minipass@^3.0.0, minipass@^3.1.0, minipass@^3.1.1, minipass@^3.1.3:
1293 | version "3.3.6"
1294 | resolved "https://registry.npmjs.org/minipass/-/minipass-3.3.6.tgz"
1295 | integrity sha512-DxiNidxSEK+tHG6zOIklvNOwm3hvCrbUrdtzY74U6HKTJxvIDfOUL5W5P2Ghd3DTkhhKPYGqeNUIh5qcM4YBfw==
1296 | dependencies:
1297 | yallist "^4.0.0"
1298 |
1299 | minipass@^5.0.0:
1300 | version "5.0.0"
1301 | resolved "https://registry.npmjs.org/minipass/-/minipass-5.0.0.tgz"
1302 | integrity sha512-3FnjYuehv9k6ovOEbyOswadCDPX1piCfhV8ncmYtHOjuPwylVWsghTLo7rabjC3Rx5xD4HDx8Wm1xnMF7S5qFQ==
1303 |
1304 | minizlib@^2.0.0, minizlib@^2.1.1:
1305 | version "2.1.2"
1306 | resolved "https://registry.npmjs.org/minizlib/-/minizlib-2.1.2.tgz"
1307 | integrity sha512-bAxsR8BVfj60DWXHE3u30oHzfl4G7khkSuPW+qvpd7jFRHm7dLxOjUk1EHACJ/hxLY8phGJ0YhYHZo7jil7Qdg==
1308 | dependencies:
1309 | minipass "^3.0.0"
1310 | yallist "^4.0.0"
1311 |
1312 | mkdirp-classic@^0.5.2, mkdirp-classic@^0.5.3:
1313 | version "0.5.3"
1314 | resolved "https://registry.npmjs.org/mkdirp-classic/-/mkdirp-classic-0.5.3.tgz"
1315 | integrity sha512-gKLcREMhtuZRwRAfqP3RFW+TK4JqApVBtOIftVgjuABpAtpxhPGaDcfvbhNvD0B8iD1oUr/txX35NjcaY6Ns/A==
1316 |
1317 | mkdirp@^0.5.1:
1318 | version "0.5.1"
1319 | resolved "https://registry.npmjs.org/mkdirp/-/mkdirp-0.5.1.tgz"
1320 | integrity sha1-MAV0OOrGz3+MR2fzhkjWaX11yQM=
1321 | dependencies:
1322 | minimist "0.0.8"
1323 |
1324 | mkdirp@^1.0.3, mkdirp@^1.0.4:
1325 | version "1.0.4"
1326 | resolved "https://registry.npmjs.org/mkdirp/-/mkdirp-1.0.4.tgz"
1327 | integrity sha512-vVqVZQyf3WLx2Shd0qJ9xuvqgAyKPLAiqITEtqW0oIUjzo3PePDd6fW9iFz30ef7Ysp/oiWqbhszeGWW2T6Gzw==
1328 |
1329 | moment-timezone@^0.5.43:
1330 | version "0.5.45"
1331 | resolved "https://registry.npmjs.org/moment-timezone/-/moment-timezone-0.5.45.tgz"
1332 | integrity sha512-HIWmqA86KcmCAhnMAN0wuDOARV/525R2+lOLotuGFzn4HO+FH+/645z2wx0Dt3iDv6/p61SIvKnDstISainhLQ==
1333 | dependencies:
1334 | moment "^2.29.4"
1335 |
1336 | moment@^2.29.4:
1337 | version "2.30.1"
1338 | resolved "https://registry.npmjs.org/moment/-/moment-2.30.1.tgz"
1339 | integrity sha512-uEmtNhbDOrWPFS+hdjFCBfy9f2YoyzRpwcl+DqpC6taX21FzsTLQVbMV/W7PzNSX6x/bhC1zA3c2UQ5NzH6how==
1340 |
1341 | ms@2.0.0:
1342 | version "2.0.0"
1343 | resolved "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz"
1344 | integrity sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=
1345 |
1346 | ms@2.1.2, ms@^2.1.1:
1347 | version "2.1.2"
1348 | resolved "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz"
1349 | integrity sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==
1350 |
1351 | ms@2.1.3, ms@^2.0.0:
1352 | version "2.1.3"
1353 | resolved "https://registry.npmjs.org/ms/-/ms-2.1.3.tgz"
1354 | integrity sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==
1355 |
1356 | napi-build-utils@^1.0.1:
1357 | version "1.0.2"
1358 | resolved "https://registry.npmjs.org/napi-build-utils/-/napi-build-utils-1.0.2.tgz"
1359 | integrity sha512-ONmRUqK7zj7DWX0D9ADe03wbwOBZxNAfF20PlGfCWQcD3+/MakShIHrMqx9YwPTfxDdF1zLeL+RGZiR9kGMLdg==
1360 |
1361 | negotiator@0.6.3, negotiator@^0.6.2:
1362 | version "0.6.3"
1363 | resolved "https://registry.npmjs.org/negotiator/-/negotiator-0.6.3.tgz"
1364 | integrity sha512-+EUsqGPLsM+j/zdChZjsnX51g4XrHFOIXwfnCVPGlQk/k5giakcKsuxCObBRu6DSm9opw/O6slWbJdghQM4bBg==
1365 |
1366 | node-abi@^3.3.0:
1367 | version "3.56.0"
1368 | resolved "https://registry.npmjs.org/node-abi/-/node-abi-3.56.0.tgz"
1369 | integrity sha512-fZjdhDOeRcaS+rcpve7XuwHBmktS1nS1gzgghwKUQQ8nTy2FdSDr6ZT8k6YhvlJeHmmQMYiT/IH9hfco5zeW2Q==
1370 | dependencies:
1371 | semver "^7.3.5"
1372 |
1373 | node-addon-api@^7.0.0:
1374 | version "7.1.0"
1375 | resolved "https://registry.npmjs.org/node-addon-api/-/node-addon-api-7.1.0.tgz"
1376 | integrity sha512-mNcltoe1R8o7STTegSOHdnJNN7s5EUvhoS7ShnTHDyOSd+8H+UdWODq6qSv67PjC8Zc5JRT8+oLAMCr0SIXw7g==
1377 |
1378 | node-gyp@8.x:
1379 | version "8.4.1"
1380 | resolved "https://registry.npmjs.org/node-gyp/-/node-gyp-8.4.1.tgz"
1381 | integrity sha512-olTJRgUtAb/hOXG0E93wZDs5YiJlgbXxTwQAFHyNlRsXQnYzUaF2aGgujZbw+hR8aF4ZG/rST57bWMWD16jr9w==
1382 | dependencies:
1383 | env-paths "^2.2.0"
1384 | glob "^7.1.4"
1385 | graceful-fs "^4.2.6"
1386 | make-fetch-happen "^9.1.0"
1387 | nopt "^5.0.0"
1388 | npmlog "^6.0.0"
1389 | rimraf "^3.0.2"
1390 | semver "^7.3.5"
1391 | tar "^6.1.2"
1392 | which "^2.0.2"
1393 |
1394 | nopt@^5.0.0:
1395 | version "5.0.0"
1396 | resolved "https://registry.npmjs.org/nopt/-/nopt-5.0.0.tgz"
1397 | integrity sha512-Tbj67rffqceeLpcRXrT7vKAN8CwfPeIBgM7E6iBkmKLV7bEMwpGgYLGv0jACUsECaa/vuxP0IjEont6umdMgtQ==
1398 | dependencies:
1399 | abbrev "1"
1400 |
1401 | normalize-path@^3.0.0, normalize-path@~3.0.0:
1402 | version "3.0.0"
1403 | resolved "https://registry.npmjs.org/normalize-path/-/normalize-path-3.0.0.tgz"
1404 | integrity sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA==
1405 |
1406 | npmlog@^6.0.0:
1407 | version "6.0.2"
1408 | resolved "https://registry.npmjs.org/npmlog/-/npmlog-6.0.2.tgz"
1409 | integrity sha512-/vBvz5Jfr9dT/aFWd0FIRf+T/Q2WBsLENygUaFUqstqsycmZAP/t5BvFJTK0viFmSUxiUKTUplWy5vt+rvKIxg==
1410 | dependencies:
1411 | are-we-there-yet "^3.0.0"
1412 | console-control-strings "^1.1.0"
1413 | gauge "^4.0.3"
1414 | set-blocking "^2.0.0"
1415 |
1416 | object-inspect@^1.13.1:
1417 | version "1.13.2"
1418 | resolved "https://registry.npmjs.org/object-inspect/-/object-inspect-1.13.2.tgz"
1419 | integrity sha512-IRZSRuzJiynemAXPYtPe5BoI/RESNYR7TYm50MC5Mqbd3Jmw5y790sErYw3V6SryFJD64b74qQQs9wn5Bg/k3g==
1420 |
1421 | on-finished@2.4.1:
1422 | version "2.4.1"
1423 | resolved "https://registry.npmjs.org/on-finished/-/on-finished-2.4.1.tgz"
1424 | integrity sha512-oVlzkg3ENAhCk2zdv7IJwd/QUD4z2RxRwpkcGY8psCVcCYZNq4wYnVWALHM+brtuJjePWiYF/ClmuDr8Ch5+kg==
1425 | dependencies:
1426 | ee-first "1.1.1"
1427 |
1428 | once@^1.3.0, once@^1.3.1, once@^1.4.0:
1429 | version "1.4.0"
1430 | resolved "https://registry.npmjs.org/once/-/once-1.4.0.tgz"
1431 | integrity sha1-WDsap3WWHUsROsF9nFC6753Xa9E=
1432 | dependencies:
1433 | wrappy "1"
1434 |
1435 | p-map@^4.0.0:
1436 | version "4.0.0"
1437 | resolved "https://registry.npmjs.org/p-map/-/p-map-4.0.0.tgz"
1438 | integrity sha512-/bjOqmgETBYB5BoEeGVea8dmvHb2m9GLy1E9W43yeyfP6QQCZGFNa+XRceJEuDB6zqr+gKpIAmlLebMpykw/MQ==
1439 | dependencies:
1440 | aggregate-error "^3.0.0"
1441 |
1442 | parseurl@~1.3.3:
1443 | version "1.3.3"
1444 | resolved "https://registry.npmjs.org/parseurl/-/parseurl-1.3.3.tgz"
1445 | integrity sha512-CiyeOxFT/JZyN5m0z9PfXw4SCBJ6Sygz1Dpl0wqjlhDEGGBP1GnsUVEL0p63hoG1fcj3fHynXi9NYO4nWOL+qQ==
1446 |
1447 | path-is-absolute@^1.0.0:
1448 | version "1.0.1"
1449 | resolved "https://registry.npmjs.org/path-is-absolute/-/path-is-absolute-1.0.1.tgz"
1450 | integrity sha1-F0uSaHNVNP+8es5r9TpanhtcX18=
1451 |
1452 | path-parse@^1.0.6:
1453 | version "1.0.6"
1454 | resolved "https://registry.npmjs.org/path-parse/-/path-parse-1.0.6.tgz"
1455 | integrity sha512-GSmOT2EbHrINBf9SR7CDELwlJ8AENk3Qn7OikK4nFYAu3Ote2+JYNVvkpAEQm3/TLNEJFD/xZJjzyxg3KBWOzw==
1456 |
1457 | path-to-regexp@0.1.7:
1458 | version "0.1.7"
1459 | resolved "https://registry.npmjs.org/path-to-regexp/-/path-to-regexp-0.1.7.tgz"
1460 | integrity sha1-32BBeABfUi8V60SQ5yR6G/qmf4w=
1461 |
1462 | pg-connection-string@^2.6.1:
1463 | version "2.6.2"
1464 | resolved "https://registry.npmjs.org/pg-connection-string/-/pg-connection-string-2.6.2.tgz"
1465 | integrity sha512-ch6OwaeaPYcova4kKZ15sbJ2hKb/VP48ZD2gE7i1J+L4MspCtBMAx8nMgz7bksc7IojCIIWuEhHibSMFH8m8oA==
1466 |
1467 | picomatch@^2.0.4, picomatch@^2.2.1:
1468 | version "2.3.1"
1469 | resolved "https://registry.npmjs.org/picomatch/-/picomatch-2.3.1.tgz"
1470 | integrity sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==
1471 |
1472 | prebuild-install@^7.1.1:
1473 | version "7.1.2"
1474 | resolved "https://registry.npmjs.org/prebuild-install/-/prebuild-install-7.1.2.tgz"
1475 | integrity sha512-UnNke3IQb6sgarcZIDU3gbMeTp/9SSU1DAIkil7PrqG1vZlBtY5msYccSKSHDqa3hNg436IXK+SNImReuA1wEQ==
1476 | dependencies:
1477 | detect-libc "^2.0.0"
1478 | expand-template "^2.0.3"
1479 | github-from-package "0.0.0"
1480 | minimist "^1.2.3"
1481 | mkdirp-classic "^0.5.3"
1482 | napi-build-utils "^1.0.1"
1483 | node-abi "^3.3.0"
1484 | pump "^3.0.0"
1485 | rc "^1.2.7"
1486 | simple-get "^4.0.0"
1487 | tar-fs "^2.0.0"
1488 | tunnel-agent "^0.6.0"
1489 |
1490 | prettier@^3.3.3:
1491 | version "3.3.3"
1492 | resolved "https://registry.npmjs.org/prettier/-/prettier-3.3.3.tgz"
1493 | integrity sha512-i2tDNA0O5IrMO757lfrdQZCc2jPNDVntV0m/+4whiDfWaTKfMNgR7Qz0NAeGz/nRqF4m5/6CLzbP4/liHt12Ew==
1494 |
1495 | promise-inflight@^1.0.1:
1496 | version "1.0.1"
1497 | resolved "https://registry.npmjs.org/promise-inflight/-/promise-inflight-1.0.1.tgz"
1498 | integrity sha512-6zWPyEOFaQBJYcGMHBKTKJ3u6TBsnMFOIZSa6ce1e/ZrrsOlnHRHbabMjLiBYKp+n44X9eUI6VUPaukCXHuG4g==
1499 |
1500 | promise-retry@^2.0.1:
1501 | version "2.0.1"
1502 | resolved "https://registry.npmjs.org/promise-retry/-/promise-retry-2.0.1.tgz"
1503 | integrity sha512-y+WKFlBR8BGXnsNlIHFGPZmyDf3DFMoLhaflAnyZgV6rG6xu+JwesTo2Q9R6XwYmtmwAFCkAk3e35jEdoeh/3g==
1504 | dependencies:
1505 | err-code "^2.0.2"
1506 | retry "^0.12.0"
1507 |
1508 | proxy-addr@~2.0.7:
1509 | version "2.0.7"
1510 | resolved "https://registry.npmjs.org/proxy-addr/-/proxy-addr-2.0.7.tgz"
1511 | integrity sha512-llQsMLSUDUPT44jdrU/O37qlnifitDP+ZwrmmZcoSKyLKvtZxpyV0n2/bD/N4tBAAZ/gJEdZU7KMraoK1+XYAg==
1512 | dependencies:
1513 | forwarded "0.2.0"
1514 | ipaddr.js "1.9.1"
1515 |
1516 | pump@^3.0.0:
1517 | version "3.0.0"
1518 | resolved "https://registry.npmjs.org/pump/-/pump-3.0.0.tgz"
1519 | integrity sha512-LwZy+p3SFs1Pytd/jYct4wpv49HiYCqd9Rlc5ZVdk0V+8Yzv6jR5Blk3TRmPL1ft69TxP0IMZGJ+WPFU2BFhww==
1520 | dependencies:
1521 | end-of-stream "^1.1.0"
1522 | once "^1.3.1"
1523 |
1524 | qs@6.11.0:
1525 | version "6.11.0"
1526 | resolved "https://registry.npmjs.org/qs/-/qs-6.11.0.tgz"
1527 | integrity sha512-MvjoMCJwEarSbUYk5O+nmoSzSutSsTwF85zcHPQ9OrlFoZOYIjaqBAJIqIXjptyD5vThxGq52Xu/MaJzRkIk4Q==
1528 | dependencies:
1529 | side-channel "^1.0.4"
1530 |
1531 | range-parser@~1.2.1:
1532 | version "1.2.1"
1533 | resolved "https://registry.npmjs.org/range-parser/-/range-parser-1.2.1.tgz"
1534 | integrity sha512-Hrgsx+orqoygnmhFbKaHE6c296J+HTAQXoxEF6gNupROmmGJRoyzfG3ccAveqCBrwr/2yxQ5BVd/GTl5agOwSg==
1535 |
1536 | raw-body@2.5.2:
1537 | version "2.5.2"
1538 | resolved "https://registry.npmjs.org/raw-body/-/raw-body-2.5.2.tgz"
1539 | integrity sha512-8zGqypfENjCIqGhgXToC8aB2r7YrBX+AQAfIPs/Mlk+BtPTztOvTS01NRW/3Eh60J+a48lt8qsCzirQ6loCVfA==
1540 | dependencies:
1541 | bytes "3.1.2"
1542 | http-errors "2.0.0"
1543 | iconv-lite "0.4.24"
1544 | unpipe "1.0.0"
1545 |
1546 | rc@^1.2.7:
1547 | version "1.2.8"
1548 | resolved "https://registry.npmjs.org/rc/-/rc-1.2.8.tgz"
1549 | integrity sha512-y3bGgqKj3QBdxLbLkomlohkvsA8gdAiUQlSBJnBhfn+BPxg4bc62d8TcBW15wavDfgexCgccckhcZvywyQYPOw==
1550 | dependencies:
1551 | deep-extend "^0.6.0"
1552 | ini "~1.3.0"
1553 | minimist "^1.2.0"
1554 | strip-json-comments "~2.0.1"
1555 |
1556 | readable-stream@^3.0.1, readable-stream@^3.0.2, readable-stream@^3.1.1, readable-stream@^3.5.0:
1557 | version "3.6.0"
1558 | resolved "https://registry.npmjs.org/readable-stream/-/readable-stream-3.6.0.tgz"
1559 | integrity sha512-BViHy7LKeTz4oNnkcLJ+lVSL6vpiFeX6/d3oSH8zCW7UxP2onchk+vTGB143xuFjHS3deTgkKoXXymXqymiIdA==
1560 | dependencies:
1561 | inherits "^2.0.3"
1562 | string_decoder "^1.1.1"
1563 | util-deprecate "^1.0.1"
1564 |
1565 | readable-stream@^3.4.0, readable-stream@^3.6.0:
1566 | version "3.6.2"
1567 | resolved "https://registry.npmjs.org/readable-stream/-/readable-stream-3.6.2.tgz"
1568 | integrity sha512-9u/sniCrY3D5WdsERHzHE4G2YCXqoG5FTHUiCC4SIbr6XcLZBY05ya9EKjYek9O5xOAwjGq+1JdGBAS7Q9ScoA==
1569 | dependencies:
1570 | inherits "^2.0.3"
1571 | string_decoder "^1.1.1"
1572 | util-deprecate "^1.0.1"
1573 |
1574 | readdirp@~3.6.0:
1575 | version "3.6.0"
1576 | resolved "https://registry.npmjs.org/readdirp/-/readdirp-3.6.0.tgz"
1577 | integrity sha512-hOS089on8RduqdbhvQ5Z37A0ESjsqz6qnRcffsMU3495FuTdqSm+7bhJ29JvIOsBDEEnan5DPu9t3To9VRlMzA==
1578 | dependencies:
1579 | picomatch "^2.2.1"
1580 |
1581 | reflect-metadata@^0.1.13:
1582 | version "0.1.13"
1583 | resolved "https://registry.npmjs.org/reflect-metadata/-/reflect-metadata-0.1.13.tgz"
1584 | integrity sha512-Ts1Y/anZELhSsjMcU605fU9RE4Oi3p5ORujwbIKXfWa+0Zxs510Qrmrce5/Jowq3cHSZSJqBjypxmHarc+vEWg==
1585 |
1586 | resolve@^1.0.0:
1587 | version "1.15.1"
1588 | resolved "https://registry.npmjs.org/resolve/-/resolve-1.15.1.tgz"
1589 | integrity sha512-84oo6ZTtoTUpjgNEr5SJyzQhzL72gaRodsSfyxC/AXRvwu0Yse9H8eF9IpGo7b8YetZhlI6v7ZQ6bKBFV/6S7w==
1590 | dependencies:
1591 | path-parse "^1.0.6"
1592 |
1593 | retry-as-promised@^7.0.4:
1594 | version "7.0.4"
1595 | resolved "https://registry.npmjs.org/retry-as-promised/-/retry-as-promised-7.0.4.tgz"
1596 | integrity sha512-XgmCoxKWkDofwH8WddD0w85ZfqYz+ZHlr5yo+3YUCfycWawU56T5ckWXsScsj5B8tqUcIG67DxXByo3VUgiAdA==
1597 |
1598 | retry@^0.12.0:
1599 | version "0.12.0"
1600 | resolved "https://registry.npmjs.org/retry/-/retry-0.12.0.tgz"
1601 | integrity sha512-9LkiTwjUh6rT555DtE9rTX+BKByPfrMzEAtnlEtdEwr3Nkffwiihqe2bWADg+OQRjt9gl6ICdmB/ZFDCGAtSow==
1602 |
1603 | rimraf@^2.6.1:
1604 | version "2.7.1"
1605 | resolved "https://registry.npmjs.org/rimraf/-/rimraf-2.7.1.tgz"
1606 | integrity sha512-uWjbaKIK3T1OSVptzX7Nl6PvQ3qAGtKEtVRjRuazjfL3Bx5eI409VZSqgND+4UNnmzLVdPj9FqFJNPqBZFve4w==
1607 | dependencies:
1608 | glob "^7.1.3"
1609 |
1610 | rimraf@^3.0.2:
1611 | version "3.0.2"
1612 | resolved "https://registry.npmjs.org/rimraf/-/rimraf-3.0.2.tgz"
1613 | integrity sha512-JZkJMZkAGFFPP2YqXZXPbMlMBgsxzE8ILs4lMIX/2o0L9UBw9O/Y3o6wFw/i9YLapcUJWwqbi3kdxIPdC62TIA==
1614 | dependencies:
1615 | glob "^7.1.3"
1616 |
1617 | safe-buffer@5.2.1, safe-buffer@~5.2.0:
1618 | version "5.2.1"
1619 | resolved "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.2.1.tgz"
1620 | integrity sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ==
1621 |
1622 | safe-buffer@^5.0.1:
1623 | version "5.2.0"
1624 | resolved "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.2.0.tgz"
1625 | integrity sha512-fZEwUGbVl7kouZs1jCdMLdt95hdIv0ZeHg6L7qPeciMZhZ+/gdesW4wgTARkrFWEpspjEATAzUGPG8N2jJiwbg==
1626 |
1627 | "safer-buffer@>= 2.1.2 < 3", "safer-buffer@>= 2.1.2 < 3.0.0", safer-buffer@~2.1.0:
1628 | version "2.1.2"
1629 | resolved "https://registry.npmjs.org/safer-buffer/-/safer-buffer-2.1.2.tgz"
1630 | integrity sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg==
1631 |
1632 | semver@^5.6.0:
1633 | version "5.7.1"
1634 | resolved "https://registry.npmjs.org/semver/-/semver-5.7.1.tgz"
1635 | integrity sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ==
1636 |
1637 | semver@^7.3.5, semver@^7.5.4:
1638 | version "7.6.0"
1639 | resolved "https://registry.npmjs.org/semver/-/semver-7.6.0.tgz"
1640 | integrity sha512-EnwXhrlwXMk9gKu5/flx5sv/an57AkRplG3hTK68W7FRDN+k+OWBj65M7719OkA82XLBxrcX0KSHj+X5COhOVg==
1641 | dependencies:
1642 | lru-cache "^6.0.0"
1643 |
1644 | send@0.18.0:
1645 | version "0.18.0"
1646 | resolved "https://registry.npmjs.org/send/-/send-0.18.0.tgz"
1647 | integrity sha512-qqWzuOjSFOuqPjFe4NOsMLafToQQwBSOEpS+FwEt3A2V3vKubTquT3vmLTQpFgMXp8AlFWFuP1qKaJZOtPpVXg==
1648 | dependencies:
1649 | debug "2.6.9"
1650 | depd "2.0.0"
1651 | destroy "1.2.0"
1652 | encodeurl "~1.0.2"
1653 | escape-html "~1.0.3"
1654 | etag "~1.8.1"
1655 | fresh "0.5.2"
1656 | http-errors "2.0.0"
1657 | mime "1.6.0"
1658 | ms "2.1.3"
1659 | on-finished "2.4.1"
1660 | range-parser "~1.2.1"
1661 | statuses "2.0.1"
1662 |
1663 | sequelize-pool@^7.1.0:
1664 | version "7.1.0"
1665 | resolved "https://registry.npmjs.org/sequelize-pool/-/sequelize-pool-7.1.0.tgz"
1666 | integrity sha512-G9c0qlIWQSK29pR/5U2JF5dDQeqqHRragoyahj/Nx4KOOQ3CPPfzxnfqFPCSB7x5UgjOgnZ61nSxz+fjDpRlJg==
1667 |
1668 | sequelize-typescript@^2.1.6:
1669 | version "2.1.6"
1670 | resolved "https://registry.npmjs.org/sequelize-typescript/-/sequelize-typescript-2.1.6.tgz"
1671 | integrity sha512-Vc2N++3en346RsbGjL3h7tgAl2Y7V+2liYTAOZ8XL0KTw3ahFHsyAUzOwct51n+g70I1TOUDgs06Oh6+XGcFkQ==
1672 | dependencies:
1673 | glob "7.2.0"
1674 |
1675 | sequelize@^6.37.3:
1676 | version "6.37.3"
1677 | resolved "https://registry.npmjs.org/sequelize/-/sequelize-6.37.3.tgz"
1678 | integrity sha512-V2FTqYpdZjPy3VQrZvjTPnOoLm0KudCRXfGWp48QwhyPPp2yW8z0p0sCYZd/em847Tl2dVxJJ1DR+hF+O77T7A==
1679 | dependencies:
1680 | "@types/debug" "^4.1.8"
1681 | "@types/validator" "^13.7.17"
1682 | debug "^4.3.4"
1683 | dottie "^2.0.6"
1684 | inflection "^1.13.4"
1685 | lodash "^4.17.21"
1686 | moment "^2.29.4"
1687 | moment-timezone "^0.5.43"
1688 | pg-connection-string "^2.6.1"
1689 | retry-as-promised "^7.0.4"
1690 | semver "^7.5.4"
1691 | sequelize-pool "^7.1.0"
1692 | toposort-class "^1.0.1"
1693 | uuid "^8.3.2"
1694 | validator "^13.9.0"
1695 | wkx "^0.5.0"
1696 |
1697 | serve-static@1.15.0:
1698 | version "1.15.0"
1699 | resolved "https://registry.npmjs.org/serve-static/-/serve-static-1.15.0.tgz"
1700 | integrity sha512-XGuRDNjXUijsUL0vl6nSD7cwURuzEgglbOaFuZM9g3kwDXOWVTck0jLzjPzGD+TazWbboZYu52/9/XPdUgne9g==
1701 | dependencies:
1702 | encodeurl "~1.0.2"
1703 | escape-html "~1.0.3"
1704 | parseurl "~1.3.3"
1705 | send "0.18.0"
1706 |
1707 | set-blocking@^2.0.0:
1708 | version "2.0.0"
1709 | resolved "https://registry.npmjs.org/set-blocking/-/set-blocking-2.0.0.tgz"
1710 | integrity sha512-KiKBS8AnWGEyLzofFfmvKwpdPzqiy16LvQfK3yv/fVH7Bj13/wl3JSR1J+rfgRE9q7xUJK4qvgS8raSOeLUehw==
1711 |
1712 | set-function-length@^1.2.1:
1713 | version "1.2.2"
1714 | resolved "https://registry.npmjs.org/set-function-length/-/set-function-length-1.2.2.tgz"
1715 | integrity sha512-pgRc4hJ4/sNjWCSS9AmnS40x3bNMDTknHgL5UaMBTMyJnU90EgWh1Rz+MC9eFu4BuN/UwZjKQuY/1v3rM7HMfg==
1716 | dependencies:
1717 | define-data-property "^1.1.4"
1718 | es-errors "^1.3.0"
1719 | function-bind "^1.1.2"
1720 | get-intrinsic "^1.2.4"
1721 | gopd "^1.0.1"
1722 | has-property-descriptors "^1.0.2"
1723 |
1724 | setprototypeof@1.2.0:
1725 | version "1.2.0"
1726 | resolved "https://registry.npmjs.org/setprototypeof/-/setprototypeof-1.2.0.tgz"
1727 | integrity sha512-E5LDX7Wrp85Kil5bhZv46j8jOeboKq5JMmYM3gVGdGH8xFpPWXUMsNrlODCrkoxMEeNi/XZIwuRvY4XNwYMJpw==
1728 |
1729 | side-channel@^1.0.4:
1730 | version "1.0.6"
1731 | resolved "https://registry.npmjs.org/side-channel/-/side-channel-1.0.6.tgz"
1732 | integrity sha512-fDW/EZ6Q9RiO8eFG8Hj+7u/oW+XrPTIChwCOM2+th2A6OblDtYYIpve9m+KvI9Z4C9qSEXlaGR6bTEYHReuglA==
1733 | dependencies:
1734 | call-bind "^1.0.7"
1735 | es-errors "^1.3.0"
1736 | get-intrinsic "^1.2.4"
1737 | object-inspect "^1.13.1"
1738 |
1739 | signal-exit@^3.0.7:
1740 | version "3.0.7"
1741 | resolved "https://registry.npmjs.org/signal-exit/-/signal-exit-3.0.7.tgz"
1742 | integrity sha512-wnD2ZE+l+SPC/uoS0vXeE9L1+0wuaMqKlfz9AMUo38JsyLSBWSFcHR1Rri62LZc12vLr1gb3jl7iwQhgwpAbGQ==
1743 |
1744 | simple-concat@^1.0.0:
1745 | version "1.0.1"
1746 | resolved "https://registry.npmjs.org/simple-concat/-/simple-concat-1.0.1.tgz"
1747 | integrity sha512-cSFtAPtRhljv69IK0hTVZQ+OfE9nePi/rtJmw5UjHeVyVroEqJXP1sFztKUy1qU+xvz3u/sfYJLa947b7nAN2Q==
1748 |
1749 | simple-get@^4.0.0:
1750 | version "4.0.1"
1751 | resolved "https://registry.npmjs.org/simple-get/-/simple-get-4.0.1.tgz"
1752 | integrity sha512-brv7p5WgH0jmQJr1ZDDfKDOSeWWg+OVypG99A/5vYGPqJ6pxiaHLy8nxtFjBA7oMa01ebA9gfh1uMCFqOuXxvA==
1753 | dependencies:
1754 | decompress-response "^6.0.0"
1755 | once "^1.3.1"
1756 | simple-concat "^1.0.0"
1757 |
1758 | smart-buffer@^4.2.0:
1759 | version "4.2.0"
1760 | resolved "https://registry.npmjs.org/smart-buffer/-/smart-buffer-4.2.0.tgz"
1761 | integrity sha512-94hK0Hh8rPqQl2xXc3HsaBoOXKV20MToPkcXvwbISWLEs+64sBq5kFgn2kJDHb1Pry9yrP0dxrCI9RRci7RXKg==
1762 |
1763 | socks-proxy-agent@^6.0.0:
1764 | version "6.2.1"
1765 | resolved "https://registry.npmjs.org/socks-proxy-agent/-/socks-proxy-agent-6.2.1.tgz"
1766 | integrity sha512-a6KW9G+6B3nWZ1yB8G7pJwL3ggLy1uTzKAgCb7ttblwqdz9fMGJUuTy3uFzEP48FAs9FLILlmzDlE2JJhVQaXQ==
1767 | dependencies:
1768 | agent-base "^6.0.2"
1769 | debug "^4.3.3"
1770 | socks "^2.6.2"
1771 |
1772 | socks@^2.6.2:
1773 | version "2.8.1"
1774 | resolved "https://registry.npmjs.org/socks/-/socks-2.8.1.tgz"
1775 | integrity sha512-B6w7tkwNid7ToxjZ08rQMT8M9BJAf8DKx8Ft4NivzH0zBUfd6jldGcisJn/RLgxcX3FPNDdNQCUEMMT79b+oCQ==
1776 | dependencies:
1777 | ip-address "^9.0.5"
1778 | smart-buffer "^4.2.0"
1779 |
1780 | source-map-support@^0.5.12:
1781 | version "0.5.16"
1782 | resolved "https://registry.npmjs.org/source-map-support/-/source-map-support-0.5.16.tgz"
1783 | integrity sha512-efyLRJDr68D9hBBNIPWFjhpFzURh+KJykQwvMyW5UiZzYwoF6l4YMMDIJJEyFWxWCqfyxLzz6tSfUFR+kXXsVQ==
1784 | dependencies:
1785 | buffer-from "^1.0.0"
1786 | source-map "^0.6.0"
1787 |
1788 | source-map@^0.6.0:
1789 | version "0.6.1"
1790 | resolved "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz"
1791 | integrity sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==
1792 |
1793 | split-ca@^1.0.1:
1794 | version "1.0.1"
1795 | resolved "https://registry.npmjs.org/split-ca/-/split-ca-1.0.1.tgz"
1796 | integrity sha1-bIOv82kvphJW4M0ZfgXp3hV2kaY=
1797 |
1798 | sprintf-js@^1.1.3:
1799 | version "1.1.3"
1800 | resolved "https://registry.npmjs.org/sprintf-js/-/sprintf-js-1.1.3.tgz"
1801 | integrity sha512-Oo+0REFV59/rz3gfJNKQiBlwfHaSESl1pcGyABQsnnIfWOFt6JNj5gCog2U6MLZ//IGYD+nA8nI+mTShREReaA==
1802 |
1803 | sqlite3@^5.1.7:
1804 | version "5.1.7"
1805 | resolved "https://registry.npmjs.org/sqlite3/-/sqlite3-5.1.7.tgz"
1806 | integrity sha512-GGIyOiFaG+TUra3JIfkI/zGP8yZYLPQ0pl1bH+ODjiX57sPhrLU5sQJn1y9bDKZUFYkX1crlrPfSYt0BKKdkog==
1807 | dependencies:
1808 | bindings "^1.5.0"
1809 | node-addon-api "^7.0.0"
1810 | prebuild-install "^7.1.1"
1811 | tar "^6.1.11"
1812 | optionalDependencies:
1813 | node-gyp "8.x"
1814 |
1815 | ssh2-streams@~0.4.8:
1816 | version "0.4.8"
1817 | resolved "https://registry.npmjs.org/ssh2-streams/-/ssh2-streams-0.4.8.tgz"
1818 | integrity sha512-auxXfgYySz2vYw7TMU7PK7vFI7EPvhvTH8/tZPgGaWocK4p/vwCMiV3icz9AEkb0R40kOKZtFtqYIxDJyJiytw==
1819 | dependencies:
1820 | asn1 "~0.2.0"
1821 | bcrypt-pbkdf "^1.0.2"
1822 | streamsearch "~0.1.2"
1823 |
1824 | ssh2@^0.8.7:
1825 | version "0.8.7"
1826 | resolved "https://registry.npmjs.org/ssh2/-/ssh2-0.8.7.tgz"
1827 | integrity sha512-/u1BO12kb0lDVxJXejWB9pxyF3/ncgRqI9vPCZuPzo05pdNDzqUeQRavScwSPsfMGK+5H/VRqp1IierIx0Bcxw==
1828 | dependencies:
1829 | ssh2-streams "~0.4.8"
1830 |
1831 | ssri@^8.0.0, ssri@^8.0.1:
1832 | version "8.0.1"
1833 | resolved "https://registry.npmjs.org/ssri/-/ssri-8.0.1.tgz"
1834 | integrity sha512-97qShzy1AiyxvPNIkLWoGua7xoQzzPjQ0HAH4B0rWKo7SZ6USuPcrUiAFrws0UH8RrbWmgq3LMTObhPIHbbBeQ==
1835 | dependencies:
1836 | minipass "^3.1.1"
1837 |
1838 | statuses@2.0.1:
1839 | version "2.0.1"
1840 | resolved "https://registry.npmjs.org/statuses/-/statuses-2.0.1.tgz"
1841 | integrity sha512-RwNA9Z/7PrK06rYLIzFMlaF+l73iwpzsqRIFgbMLbTcLD6cOao82TaWefPXQvB2fOC4AjuYSEndS7N/mTCbkdQ==
1842 |
1843 | streamsearch@~0.1.2:
1844 | version "0.1.2"
1845 | resolved "https://registry.npmjs.org/streamsearch/-/streamsearch-0.1.2.tgz"
1846 | integrity sha1-gIudDlb8Jz2Am6VzOOkpkZoanxo=
1847 |
1848 | "string-width@^1.0.2 || 2 || 3 || 4", string-width@^4.2.3:
1849 | version "4.2.3"
1850 | resolved "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz"
1851 | integrity sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==
1852 | dependencies:
1853 | emoji-regex "^8.0.0"
1854 | is-fullwidth-code-point "^3.0.0"
1855 | strip-ansi "^6.0.1"
1856 |
1857 | string_decoder@^1.1.1:
1858 | version "1.3.0"
1859 | resolved "https://registry.npmjs.org/string_decoder/-/string_decoder-1.3.0.tgz"
1860 | integrity sha512-hkRX8U1WjJFd8LsDJ2yQ/wWWxaopEsABU1XfkM8A+j0+85JAGppt16cr1Whg6KIbb4okU6Mql6BOj+uup/wKeA==
1861 | dependencies:
1862 | safe-buffer "~5.2.0"
1863 |
1864 | strip-ansi@^6.0.1:
1865 | version "6.0.1"
1866 | resolved "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz"
1867 | integrity sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==
1868 | dependencies:
1869 | ansi-regex "^5.0.1"
1870 |
1871 | strip-bom@^3.0.0:
1872 | version "3.0.0"
1873 | resolved "https://registry.npmjs.org/strip-bom/-/strip-bom-3.0.0.tgz"
1874 | integrity sha1-IzTBjpx1n3vdVv3vfprj1YjmjtM=
1875 |
1876 | strip-json-comments@^2.0.0, strip-json-comments@~2.0.1:
1877 | version "2.0.1"
1878 | resolved "https://registry.npmjs.org/strip-json-comments/-/strip-json-comments-2.0.1.tgz"
1879 | integrity sha1-PFMZQukIwml8DsNEhYwobHygpgo=
1880 |
1881 | tar-fs@^2.0.0:
1882 | version "2.1.1"
1883 | resolved "https://registry.npmjs.org/tar-fs/-/tar-fs-2.1.1.tgz"
1884 | integrity sha512-V0r2Y9scmbDRLCNex/+hYzvp/zyYjvFbHPNgVTKfQvVrb6guiE/fxP+XblDNR011utopbkex2nM4dHNV6GDsng==
1885 | dependencies:
1886 | chownr "^1.1.1"
1887 | mkdirp-classic "^0.5.2"
1888 | pump "^3.0.0"
1889 | tar-stream "^2.1.4"
1890 |
1891 | tar-fs@~2.0.0:
1892 | version "2.0.0"
1893 | resolved "https://registry.npmjs.org/tar-fs/-/tar-fs-2.0.0.tgz"
1894 | integrity sha512-vaY0obB6Om/fso8a8vakQBzwholQ7v5+uy+tF3Ozvxv1KNezmVQAiWtcNmMHFSFPqL3dJA8ha6gdtFbfX9mcxA==
1895 | dependencies:
1896 | chownr "^1.1.1"
1897 | mkdirp "^0.5.1"
1898 | pump "^3.0.0"
1899 | tar-stream "^2.0.0"
1900 |
1901 | tar-stream@^2.0.0:
1902 | version "2.1.0"
1903 | resolved "https://registry.npmjs.org/tar-stream/-/tar-stream-2.1.0.tgz"
1904 | integrity sha512-+DAn4Nb4+gz6WZigRzKEZl1QuJVOLtAwwF+WUxy1fJ6X63CaGaUAxJRD2KEn1OMfcbCjySTYpNC6WmfQoIEOdw==
1905 | dependencies:
1906 | bl "^3.0.0"
1907 | end-of-stream "^1.4.1"
1908 | fs-constants "^1.0.0"
1909 | inherits "^2.0.3"
1910 | readable-stream "^3.1.1"
1911 |
1912 | tar-stream@^2.1.4:
1913 | version "2.2.0"
1914 | resolved "https://registry.npmjs.org/tar-stream/-/tar-stream-2.2.0.tgz"
1915 | integrity sha512-ujeqbceABgwMZxEJnk2HDY2DlnUZ+9oEcb1KzTVfYHio0UE6dG71n60d8D2I4qNvleWrrXpmjpt7vZeF1LnMZQ==
1916 | dependencies:
1917 | bl "^4.0.3"
1918 | end-of-stream "^1.4.1"
1919 | fs-constants "^1.0.0"
1920 | inherits "^2.0.3"
1921 | readable-stream "^3.1.1"
1922 |
1923 | tar@^6.0.2, tar@^6.1.11, tar@^6.1.2:
1924 | version "6.2.0"
1925 | resolved "https://registry.npmjs.org/tar/-/tar-6.2.0.tgz"
1926 | integrity sha512-/Wo7DcT0u5HUV486xg675HtjNd3BXZ6xDbzsCUZPt5iw8bTQ63bP0Raut3mvro9u+CUyq7YQd8Cx55fsZXxqLQ==
1927 | dependencies:
1928 | chownr "^2.0.0"
1929 | fs-minipass "^2.0.0"
1930 | minipass "^5.0.0"
1931 | minizlib "^2.1.1"
1932 | mkdirp "^1.0.3"
1933 | yallist "^4.0.0"
1934 |
1935 | to-regex-range@^5.0.1:
1936 | version "5.0.1"
1937 | resolved "https://registry.npmjs.org/to-regex-range/-/to-regex-range-5.0.1.tgz"
1938 | integrity sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==
1939 | dependencies:
1940 | is-number "^7.0.0"
1941 |
1942 | toidentifier@1.0.1:
1943 | version "1.0.1"
1944 | resolved "https://registry.npmjs.org/toidentifier/-/toidentifier-1.0.1.tgz"
1945 | integrity sha512-o5sSPKEkg/DIQNmH43V0/uerLrpzVedkUh8tGNvaeXpfpuwjKenlSox/2O/BTlZUtEe+JG7s5YhEz608PlAHRA==
1946 |
1947 | toposort-class@^1.0.1:
1948 | version "1.0.1"
1949 | resolved "https://registry.npmjs.org/toposort-class/-/toposort-class-1.0.1.tgz"
1950 | integrity sha1-f/0feMi+KMO6Rc1OGj9e4ZO9mYg=
1951 |
1952 | tree-kill@^1.2.2:
1953 | version "1.2.2"
1954 | resolved "https://registry.npmjs.org/tree-kill/-/tree-kill-1.2.2.tgz"
1955 | integrity sha512-L0Orpi8qGpRG//Nd+H90vFB+3iHnue1zSSGmNOOCh1GLJ7rUKVwV2HvijphGQS2UmhUZewS9VgvxYIdgr+fG1A==
1956 |
1957 | ts-node-dev@^2.0.0:
1958 | version "2.0.0"
1959 | resolved "https://registry.npmjs.org/ts-node-dev/-/ts-node-dev-2.0.0.tgz"
1960 | integrity sha512-ywMrhCfH6M75yftYvrvNarLEY+SUXtUvU8/0Z6llrHQVBx12GiFk5sStF8UdfE/yfzk9IAq7O5EEbTQsxlBI8w==
1961 | dependencies:
1962 | chokidar "^3.5.1"
1963 | dynamic-dedupe "^0.3.0"
1964 | minimist "^1.2.6"
1965 | mkdirp "^1.0.4"
1966 | resolve "^1.0.0"
1967 | rimraf "^2.6.1"
1968 | source-map-support "^0.5.12"
1969 | tree-kill "^1.2.2"
1970 | ts-node "^10.4.0"
1971 | tsconfig "^7.0.0"
1972 |
1973 | ts-node@^10.4.0, ts-node@^10.9.2:
1974 | version "10.9.2"
1975 | resolved "https://registry.npmjs.org/ts-node/-/ts-node-10.9.2.tgz"
1976 | integrity sha512-f0FFpIdcHgn8zcPSbf1dRevwt047YMnaiJM3u2w2RewrB+fob/zePZcrOyQoLMMO7aBIddLcQIEK5dYjkLnGrQ==
1977 | dependencies:
1978 | "@cspotcode/source-map-support" "^0.8.0"
1979 | "@tsconfig/node10" "^1.0.7"
1980 | "@tsconfig/node12" "^1.0.7"
1981 | "@tsconfig/node14" "^1.0.0"
1982 | "@tsconfig/node16" "^1.0.2"
1983 | acorn "^8.4.1"
1984 | acorn-walk "^8.1.1"
1985 | arg "^4.1.0"
1986 | create-require "^1.1.0"
1987 | diff "^4.0.1"
1988 | make-error "^1.1.1"
1989 | v8-compile-cache-lib "^3.0.1"
1990 | yn "3.1.1"
1991 |
1992 | tsconfig@^7.0.0:
1993 | version "7.0.0"
1994 | resolved "https://registry.npmjs.org/tsconfig/-/tsconfig-7.0.0.tgz"
1995 | integrity sha512-vZXmzPrL+EmC4T/4rVlT2jNVMWCi/O4DIiSj3UHg1OE5kCKbk4mfrXc6dZksLgRM/TZlKnousKH9bbTazUWRRw==
1996 | dependencies:
1997 | "@types/strip-bom" "^3.0.0"
1998 | "@types/strip-json-comments" "0.0.30"
1999 | strip-bom "^3.0.0"
2000 | strip-json-comments "^2.0.0"
2001 |
2002 | tunnel-agent@^0.6.0:
2003 | version "0.6.0"
2004 | resolved "https://registry.npmjs.org/tunnel-agent/-/tunnel-agent-0.6.0.tgz"
2005 | integrity sha1-J6XeoGs2sEoKmWZ3SykIaPD8QP0=
2006 | dependencies:
2007 | safe-buffer "^5.0.1"
2008 |
2009 | tweetnacl@^0.14.3:
2010 | version "0.14.5"
2011 | resolved "https://registry.npmjs.org/tweetnacl/-/tweetnacl-0.14.5.tgz"
2012 | integrity sha1-WuaBd/GS1EViadEIr6k/+HQ/T2Q=
2013 |
2014 | type-is@~1.6.18:
2015 | version "1.6.18"
2016 | resolved "https://registry.npmjs.org/type-is/-/type-is-1.6.18.tgz"
2017 | integrity sha512-TkRKr9sUTxEH8MdfuCSP7VizJyzRNMjj2J2do2Jr3Kym598JVdEksuzPQCnlFPW4ky9Q+iA+ma9BGm06XQBy8g==
2018 | dependencies:
2019 | media-typer "0.3.0"
2020 | mime-types "~2.1.24"
2021 |
2022 | typedarray@^0.0.6:
2023 | version "0.0.6"
2024 | resolved "https://registry.npmjs.org/typedarray/-/typedarray-0.0.6.tgz"
2025 | integrity sha1-hnrHTjhkGHsdPUfZlqeOxciDB3c=
2026 |
2027 | typescript@^5.5.4:
2028 | version "5.5.4"
2029 | resolved "https://registry.npmjs.org/typescript/-/typescript-5.5.4.tgz"
2030 | integrity sha512-Mtq29sKDAEYP7aljRgtPOpTvOfbwRWlS6dPRzwjdE+C0R4brX/GUyhHSecbHMFLNBLcJIPt9nl9yG5TZ1weH+Q==
2031 |
2032 | undici-types@~5.26.4:
2033 | version "5.26.5"
2034 | resolved "https://registry.yarnpkg.com/undici-types/-/undici-types-5.26.5.tgz#bcd539893d00b56e964fd2657a4866b221a65617"
2035 | integrity sha512-JlCMO+ehdEIKqlFxk6IfVoAUVmgz7cU7zD/h9XZ0qzeosSHmUJVOzSQvvYSYWXkFXC+IfLKSIffhv0sVZup6pA==
2036 |
2037 | unique-filename@^1.1.1:
2038 | version "1.1.1"
2039 | resolved "https://registry.npmjs.org/unique-filename/-/unique-filename-1.1.1.tgz"
2040 | integrity sha512-Vmp0jIp2ln35UTXuryvjzkjGdRyf9b2lTXuSYUiPmzRcl3FDtYqAwOnTJkAngD9SWhnoJzDbTKwaOrZ+STtxNQ==
2041 | dependencies:
2042 | unique-slug "^2.0.0"
2043 |
2044 | unique-slug@^2.0.0:
2045 | version "2.0.2"
2046 | resolved "https://registry.npmjs.org/unique-slug/-/unique-slug-2.0.2.tgz"
2047 | integrity sha512-zoWr9ObaxALD3DOPfjPSqxt4fnZiWblxHIgeWqW8x7UqDzEtHEQLzji2cuJYQFCU6KmoJikOYAZlrTHHebjx2w==
2048 | dependencies:
2049 | imurmurhash "^0.1.4"
2050 |
2051 | unpipe@1.0.0, unpipe@~1.0.0:
2052 | version "1.0.0"
2053 | resolved "https://registry.npmjs.org/unpipe/-/unpipe-1.0.0.tgz"
2054 | integrity sha1-sr9O6FFKrmFltIF4KdIbLvSZBOw=
2055 |
2056 | util-deprecate@^1.0.1:
2057 | version "1.0.2"
2058 | resolved "https://registry.npmjs.org/util-deprecate/-/util-deprecate-1.0.2.tgz"
2059 | integrity sha1-RQ1Nyfpw3nMnYvvS1KKJgUGaDM8=
2060 |
2061 | utils-merge@1.0.1:
2062 | version "1.0.1"
2063 | resolved "https://registry.npmjs.org/utils-merge/-/utils-merge-1.0.1.tgz"
2064 | integrity sha1-n5VxD1CiZ5R7LMwSR0HBAoQn5xM=
2065 |
2066 | uuid@^8.3.2:
2067 | version "8.3.2"
2068 | resolved "https://registry.npmjs.org/uuid/-/uuid-8.3.2.tgz"
2069 | integrity sha512-+NYs2QeMWy+GWFOEm9xnn6HCDp0l7QBD7ml8zLUmJ+93Q5NF0NocErnwkTkXVFNiX3/fpC6afS8Dhb/gz7R7eg==
2070 |
2071 | v8-compile-cache-lib@^3.0.1:
2072 | version "3.0.1"
2073 | resolved "https://registry.npmjs.org/v8-compile-cache-lib/-/v8-compile-cache-lib-3.0.1.tgz"
2074 | integrity sha512-wa7YjyUGfNZngI/vtK0UHAN+lgDCxBPCylVXGp0zu59Fz5aiGtNXaq3DhIov063MorB+VfufLh3JlF2KdTK3xg==
2075 |
2076 | validator@^13.9.0:
2077 | version "13.11.0"
2078 | resolved "https://registry.npmjs.org/validator/-/validator-13.11.0.tgz"
2079 | integrity sha512-Ii+sehpSfZy+At5nPdnyMhx78fEoPDkR2XW/zimHEL3MyGJQOCQ7WeP20jPYRz7ZCpcKLB21NxuXHF3bxjStBQ==
2080 |
2081 | vary@~1.1.2:
2082 | version "1.1.2"
2083 | resolved "https://registry.npmjs.org/vary/-/vary-1.1.2.tgz"
2084 | integrity sha1-IpnwLG3tMNSllhsLn3RSShj2NPw=
2085 |
2086 | which@^2.0.2:
2087 | version "2.0.2"
2088 | resolved "https://registry.npmjs.org/which/-/which-2.0.2.tgz"
2089 | integrity sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==
2090 | dependencies:
2091 | isexe "^2.0.0"
2092 |
2093 | wide-align@^1.1.5:
2094 | version "1.1.5"
2095 | resolved "https://registry.npmjs.org/wide-align/-/wide-align-1.1.5.tgz"
2096 | integrity sha512-eDMORYaPNZ4sQIuuYPDHdQvf4gyCF9rEEV/yPxGfwPkRodwEgiMUUXTx/dex+Me0wxx53S+NgUHaP7y3MGlDmg==
2097 | dependencies:
2098 | string-width "^1.0.2 || 2 || 3 || 4"
2099 |
2100 | wkx@^0.5.0:
2101 | version "0.5.0"
2102 | resolved "https://registry.npmjs.org/wkx/-/wkx-0.5.0.tgz"
2103 | integrity sha512-Xng/d4Ichh8uN4l0FToV/258EjMGU9MGcA0HV2d9B/ZpZB3lqQm7nkOdZdm5GhKtLLhAE7PiVQwN4eN+2YJJUg==
2104 | dependencies:
2105 | "@types/node" "*"
2106 |
2107 | wrappy@1:
2108 | version "1.0.2"
2109 | resolved "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz"
2110 | integrity sha1-tSQ9jz7BqjXxNkYFvA0QNuMKtp8=
2111 |
2112 | xtend@^4.0.0:
2113 | version "4.0.2"
2114 | resolved "https://registry.npmjs.org/xtend/-/xtend-4.0.2.tgz"
2115 | integrity sha512-LKYU1iAXJXUgAXn9URjiu+MWhyUXHsvfp7mcuYm9dSUKK0/CjtrUwFAxD82/mCWbtLsGjFIad0wIsod4zrTAEQ==
2116 |
2117 | yallist@^4.0.0:
2118 | version "4.0.0"
2119 | resolved "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz"
2120 | integrity sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==
2121 |
2122 | yn@3.1.1:
2123 | version "3.1.1"
2124 | resolved "https://registry.npmjs.org/yn/-/yn-3.1.1.tgz"
2125 | integrity sha512-Ux4ygGWsu2c7isFWe8Yu1YluJmqVhxqK2cLXNQA5AcC3QfbGNpM7fu0Y8b/z16pXLnFxZYvWhd3fhBY9DLmC6Q==
2126 |
--------------------------------------------------------------------------------