From 398adb23e8785c92478c4d80c944e60e9278ffdf Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E0=A4=95=E0=A4=BE=E0=A4=B0=E0=A4=A4=E0=A5=8B=E0=A4=AB?= =?UTF-8?q?=E0=A5=8D=E0=A4=AB=E0=A5=87=E0=A4=B2=E0=A4=B8=E0=A5=8D=E0=A4=95?= =?UTF-8?q?=E0=A5=8D=E0=A4=B0=E0=A4=BF=E0=A4=AA=E0=A5=8D=E0=A4=9F=E2=84=A2?= Date: Wed, 31 Aug 2022 15:25:52 +0200 Subject: [PATCH] feat(docker): reduce the size of alpine docker images (#3973) * reduce redundant code between the two alpine Dockerfiles * reduce the docker image build times * reduce the `n8n` image size from 1.17GB to 462MB * reduce the `n8n-custom` image size from 671MB to 460MB * reduce the size of npm tree by making all typing packages devDependencies Partially resolves this ticket: N8N-3252 --- .dockerignore | 4 + .github/workflows/docker-base-image.yml | 35 +++ .github/workflows/docker-images-nightly.yml | 2 +- docker/images/n8n-base/.npmrc | 4 + docker/images/n8n-base/Dockerfile | 20 ++ docker/images/n8n-custom/Dockerfile | 73 ++---- docker/images/n8n-custom/docker-entrypoint.sh | 15 +- docker/images/n8n/Dockerfile | 48 ++-- docker/images/n8n/docker-entrypoint.sh | 13 +- package-lock.json | 224 ++++++++++++------ packages/cli/package.json | 14 +- packages/node-dev/package.json | 4 +- packages/nodes-base/package.json | 6 +- 13 files changed, 277 insertions(+), 185 deletions(-) create mode 100644 .github/workflows/docker-base-image.yml create mode 100644 docker/images/n8n-base/.npmrc create mode 100644 docker/images/n8n-base/Dockerfile diff --git a/.dockerignore b/.dockerignore index a484c17049..f8d3d08e69 100644 --- a/.dockerignore +++ b/.dockerignore @@ -1,3 +1,7 @@ +**/.env node_modules +packages/node-dev packages/*/node_modules packages/*/dist +packages/*/.turbo +.git diff --git a/.github/workflows/docker-base-image.yml b/.github/workflows/docker-base-image.yml new file mode 100644 index 0000000000..35072ae7fd --- /dev/null +++ b/.github/workflows/docker-base-image.yml @@ -0,0 +1,35 @@ +name: Docker Base Image CI + +on: + workflow_dispatch: + inputs: + node_version: + description: 'Node.js version to build this image with.' + type: string + required: true + default: '16' + +jobs: + build: + runs-on: ubuntu-latest + steps: + - uses: actions/checkout@v1 + - name: Set up QEMU + uses: docker/setup-qemu-action@v1 + - name: Set up Docker Buildx + uses: docker/setup-buildx-action@v1 + - name: Login to DockerHub + uses: docker/login-action@v1 + with: + username: ${{ secrets.DOCKER_USERNAME }} + password: ${{ secrets.DOCKER_PASSWORD }} + - name: Build + uses: docker/build-push-action@v2 + with: + context: ./docker/images/n8n-base + build-args: | + NODE_VERSION=${{github.event.inputs.node_version}} + platforms: linux/amd64,linux/arm64,linux/arm/v7 + push: true + tags: | + ${{ secrets.DOCKER_USERNAME }}/base:${{ github.event.inputs.node_version }} diff --git a/.github/workflows/docker-images-nightly.yml b/.github/workflows/docker-images-nightly.yml index 23c6047267..281d5dacca 100644 --- a/.github/workflows/docker-images-nightly.yml +++ b/.github/workflows/docker-images-nightly.yml @@ -57,7 +57,7 @@ jobs: file: ./docker/images/n8n-custom/Dockerfile platforms: linux/amd64 push: true - tags: n8nio/n8n:${{ github.event.inputs.tag || 'nightly' }} + tags: ${{ secrets.DOCKER_USERNAME }}/n8n:${{ github.event.inputs.tag || 'nightly' }} no-cache: true - name: Call Success URL - optionally run: | diff --git a/docker/images/n8n-base/.npmrc b/docker/images/n8n-base/.npmrc new file mode 100644 index 0000000000..7a650526cf --- /dev/null +++ b/docker/images/n8n-base/.npmrc @@ -0,0 +1,4 @@ +audit = false +fund = false +loglevel = warn +update-notifier = false diff --git a/docker/images/n8n-base/Dockerfile b/docker/images/n8n-base/Dockerfile new file mode 100644 index 0000000000..5f2de6c3c2 --- /dev/null +++ b/docker/images/n8n-base/Dockerfile @@ -0,0 +1,20 @@ +ARG NODE_VERSION=16 +FROM node:${NODE_VERSION}-alpine + +WORKDIR /home/node +COPY .npmrc /usr/local/etc/npmrc + +RUN \ + apk add --update graphicsmagick tini tzdata ca-certificates && \ + npm install -g npm@latest full-icu && \ + rm -rf /var/cache/apk/* /root/.npm /tmp/* && \ + # Install fonts + apk --no-cache add --virtual fonts msttcorefonts-installer fontconfig && \ + update-ms-fonts && \ + fc-cache -f && \ + apk del fonts && \ + find /usr/share/fonts/truetype/msttcorefonts/ -type l -exec unlink {} \; && \ + rm -rf /var/cache/apk/* /tmp/* + +ENV NODE_ICU_DATA /usr/local/lib/node_modules/full-icu +EXPOSE 5678/tcp diff --git a/docker/images/n8n-custom/Dockerfile b/docker/images/n8n-custom/Dockerfile index 4485daac2f..829bc98c40 100644 --- a/docker/images/n8n-custom/Dockerfile +++ b/docker/images/n8n-custom/Dockerfile @@ -1,55 +1,34 @@ +ARG NODE_VERSION=16 + # 1. Create an image to build n8n -FROM node:16-alpine as builder +FROM n8nio/base:${NODE_VERSION} as builder -# Update everything and install needed dependencies -USER root +RUN \ + apk --no-cache add git && \ + npm install -g run-script-os turbo -# Install all needed dependencies -RUN apk --update add --virtual build-dependencies python3 build-base ca-certificates git && \ - npm_config_user=root npm install -g npm@latest run-script-os turbo - -WORKDIR /data - -COPY turbo.json . -COPY package.json . -COPY package-lock.json . -COPY packages/cli/ ./packages/cli/ -COPY packages/core/ ./packages/core/ -COPY packages/design-system/ ./packages/design-system/ -COPY packages/editor-ui/ ./packages/editor-ui/ -COPY packages/nodes-base/ ./packages/nodes-base/ -COPY packages/workflow/ ./packages/workflow/ -RUN rm -rf node_modules packages/*/node_modules packages/*/dist +COPY turbo.json package.json package-lock.json ./ +COPY packages ./packages +RUN chown -R node:node . RUN npm config set legacy-peer-deps true -RUN npm install --loglevel notice -RUN npm run build + +USER node + +RUN \ + npm ci && \ + npm run build && \ + # TODO: removing dev dependecies is deleting `bn.js`, which breaks the Snowflake node + npm prune --omit=dev && \ + npm i --omit=dev bn.js && \ + find . -type f -name "*.ts" -o -name "*.js.map" -o -name "*.vue" | xargs rm &&\ + rm -rf node_modules/.cache packages/*/node_modules/.cache packages/*/.turbo .config .npm /tmp/* # 2. Start with a new clean image with just the code that is needed to run n8n -FROM node:16-alpine - -USER root - -RUN apk add --update graphicsmagick tzdata tini su-exec git - -WORKDIR /data - -# Install all needed dependencies -RUN npm_config_user=root npm install -g npm@latest full-icu - -# Install fonts -RUN apk --no-cache add --virtual fonts msttcorefonts-installer fontconfig && \ - update-ms-fonts && \ - fc-cache -f && \ - apk del fonts && \ - find /usr/share/fonts/truetype/msttcorefonts/ -type l -exec unlink {} \; - -ENV NODE_ICU_DATA /usr/local/lib/node_modules/full-icu - -COPY --from=builder /data ./ - -COPY docker/images/n8n-custom/docker-entrypoint.sh /docker-entrypoint.sh -ENTRYPOINT ["tini", "--", "/docker-entrypoint.sh"] - -EXPOSE 5678/tcp +FROM n8nio/base:${NODE_VERSION} +COPY --from=builder /home/node ./ +COPY docker/images/n8n-custom/docker-entrypoint.sh ./ +USER node +ENV NODE_ENV=production +ENTRYPOINT ["tini", "--", "./docker-entrypoint.sh"] diff --git a/docker/images/n8n-custom/docker-entrypoint.sh b/docker/images/n8n-custom/docker-entrypoint.sh index ab947c25bf..c92ce184ed 100755 --- a/docker/images/n8n-custom/docker-entrypoint.sh +++ b/docker/images/n8n-custom/docker-entrypoint.sh @@ -1,25 +1,16 @@ #!/bin/sh - -if [ -d /root/.n8n ] ; then - chmod o+rx /root - chown -R node /root/.n8n - ln -s /root/.n8n /home/node/ -fi - -chown -R node /home/node - if [ "$#" -gt 0 ]; then # Got started with arguments COMMAND=$1; if [[ "$COMMAND" == "n8n" ]]; then shift - (cd packages/cli; exec su-exec node ./bin/n8n "$@") + (cd packages/cli; exec node ./bin/n8n "$@") else - exec su-exec node "$@" + exec node "$@" fi else # Got started without arguments -exec su-exec node ./packages/cli/bin/n8n +cd packages/cli; exec node ./bin/n8n fi diff --git a/docker/images/n8n/Dockerfile b/docker/images/n8n/Dockerfile index e1b1a7a449..30faade846 100644 --- a/docker/images/n8n/Dockerfile +++ b/docker/images/n8n/Dockerfile @@ -1,36 +1,22 @@ -FROM node:16-alpine +ARG NODE_VERSION=16 +FROM n8nio/base:${NODE_VERSION} ARG N8N_VERSION - RUN if [ -z "$N8N_VERSION" ] ; then echo "The N8N_VERSION argument is missing!" ; exit 1; fi -# Update everything and install needed dependencies -RUN apk add --update graphicsmagick tzdata git tini su-exec +ENV NODE_ENV=production +RUN set -eux; \ + apkArch="$(apk --print-arch)"; \ + case "$apkArch" in \ + 'armv7') apk --no-cache add --virtual build-dependencies python3 build-base;; \ + esac && \ + npm install --loglevel=info -g --omit=dev n8n@${N8N_VERSION} && \ + case "$apkArch" in \ + 'armv7') apk del build-dependencies;; \ + esac && \ + find /usr/local/lib/node_modules/n8n -type f -name "*.ts" -o -name "*.js.map" -o -name "*.vue" | xargs rm && \ + rm -rf /root/.npm -# # Set a custom user to not have n8n run as root -USER root - -# Install n8n and the also temporary all the packages -# it needs to build it correctly. -RUN apk --update add --virtual build-dependencies python3 build-base ca-certificates && \ - npm config set python "$(which python3)" && \ - npm_config_user=root npm install -g npm@latest full-icu n8n@${N8N_VERSION} && \ - apk del build-dependencies \ - && rm -rf /root /tmp/* /var/cache/apk/* && mkdir /root; - -# Install fonts -RUN apk --no-cache add --virtual fonts msttcorefonts-installer fontconfig && \ - update-ms-fonts && \ - fc-cache -f && \ - apk del fonts && \ - find /usr/share/fonts/truetype/msttcorefonts/ -type l -exec unlink {} \; \ - && rm -rf /root /tmp/* /var/cache/apk/* && mkdir /root - -ENV NODE_ICU_DATA /usr/local/lib/node_modules/full-icu - -WORKDIR /data - -COPY docker-entrypoint.sh /docker-entrypoint.sh -ENTRYPOINT ["tini", "--", "/docker-entrypoint.sh"] - -EXPOSE 5678/tcp +USER node +COPY docker-entrypoint.sh ./ +ENTRYPOINT ["tini", "--", "./docker-entrypoint.sh"] diff --git a/docker/images/n8n/docker-entrypoint.sh b/docker/images/n8n/docker-entrypoint.sh index fa81b3713c..57811eb0ab 100755 --- a/docker/images/n8n/docker-entrypoint.sh +++ b/docker/images/n8n/docker-entrypoint.sh @@ -1,17 +1,8 @@ #!/bin/sh - -if [ -d /root/.n8n ] ; then - chmod o+rx /root - chown -R node /root/.n8n - ln -s /root/.n8n /home/node/ -fi - -chown -R node /home/node - if [ "$#" -gt 0 ]; then # Got started with arguments - exec su-exec node "$@" + exec node "$@" else # Got started without arguments - exec su-exec node n8n + exec n8n fi diff --git a/package-lock.json b/package-lock.json index cc390709ca..bd764dd118 100644 --- a/package-lock.json +++ b/package-lock.json @@ -1,12 +1,12 @@ { "name": "n8n", - "version": "0.191.1", + "version": "0.192.1", "lockfileVersion": 2, "requires": true, "packages": { "": { "name": "n8n", - "version": "0.191.1", + "version": "0.192.1", "workspaces": [ "packages/*" ], @@ -53,6 +53,7 @@ "version": "8.0.0", "resolved": "https://registry.npmjs.org/@apidevtools/json-schema-ref-parser/-/json-schema-ref-parser-8.0.0.tgz", "integrity": "sha512-n4YBtwQhdpLto1BaUCyAeflizmIbaloGShsPyRtFf5qdFJxfssj+GgLavczgKJFa3Bq+3St2CKcpRJdjtB4EBw==", + "dev": true, "dependencies": { "@jsdevtools/ono": "^7.1.0", "call-me-maybe": "^1.0.1", @@ -63,6 +64,7 @@ "version": "2.1.0", "resolved": "https://registry.npmjs.org/@apidevtools/openapi-schemas/-/openapi-schemas-2.1.0.tgz", "integrity": "sha512-Zc1AlqrJlX3SlpupFGpiLi2EbteyP7fXmUOGup6/DnkRgjP9bgMM/ag+n91rsv0U1Gpz0H3VILA/o3bW7Ua6BQ==", + "dev": true, "engines": { "node": ">=10" } @@ -71,6 +73,7 @@ "version": "4.0.0", "resolved": "https://registry.npmjs.org/@apidevtools/swagger-cli/-/swagger-cli-4.0.0.tgz", "integrity": "sha512-8jDHtZxEkxFNMfqeNhyHjxiS9P3BlSj1WpetsMExs4N+PIa3d0vSNch4Fk9OlgT/2oClCK0YSc+dmmdVpHh0hg==", + "dev": true, "dependencies": { "@apidevtools/swagger-parser": "^9.0.0", "chalk": "^3.0.0", @@ -87,12 +90,14 @@ "node_modules/@apidevtools/swagger-methods": { "version": "3.0.2", "resolved": "https://registry.npmjs.org/@apidevtools/swagger-methods/-/swagger-methods-3.0.2.tgz", - "integrity": "sha512-QAkD5kK2b1WfjDS/UQn/qQkbwF31uqRjPTrsCs5ZG9BQGAkjwvqGFjjPqAuzac/IYzpPtRzjCP1WrTuAIjMrXg==" + "integrity": "sha512-QAkD5kK2b1WfjDS/UQn/qQkbwF31uqRjPTrsCs5ZG9BQGAkjwvqGFjjPqAuzac/IYzpPtRzjCP1WrTuAIjMrXg==", + "dev": true }, "node_modules/@apidevtools/swagger-parser": { "version": "9.0.1", "resolved": "https://registry.npmjs.org/@apidevtools/swagger-parser/-/swagger-parser-9.0.1.tgz", "integrity": "sha512-Irqybg4dQrcHhZcxJc/UM4vO7Ksoj1Id5e+K94XUOzllqX1n47HEA50EKiXTCQbykxuJ4cYGIivjx/MRSTC5OA==", + "dev": true, "dependencies": { "@apidevtools/json-schema-ref-parser": "^8.0.0", "@apidevtools/openapi-schemas": "^2.0.2", @@ -106,7 +111,8 @@ "node_modules/@apidevtools/swagger-parser/node_modules/openapi-types": { "version": "1.3.5", "resolved": "https://registry.npmjs.org/openapi-types/-/openapi-types-1.3.5.tgz", - "integrity": "sha512-11oi4zYorsgvg5yBarZplAqbpev5HkuVNPlZaPTknPDzAynq+lnJdXAmruGWP0s+dNYZS7bjM+xrTpJw7184Fg==" + "integrity": "sha512-11oi4zYorsgvg5yBarZplAqbpev5HkuVNPlZaPTknPDzAynq+lnJdXAmruGWP0s+dNYZS7bjM+xrTpJw7184Fg==", + "dev": true }, "node_modules/@azure/abort-controller": { "version": "1.1.0", @@ -7168,7 +7174,8 @@ "node_modules/@types/bluebird": { "version": "3.5.36", "resolved": "https://registry.npmjs.org/@types/bluebird/-/bluebird-3.5.36.tgz", - "integrity": "sha512-HBNx4lhkxN7bx6P0++W8E289foSu8kO8GCk2unhuVggO+cE7rh9DhZUyPhUxNRG9m+5B5BTKxZQ5ZP92x/mx9Q==" + "integrity": "sha512-HBNx4lhkxN7bx6P0++W8E289foSu8kO8GCk2unhuVggO+cE7rh9DhZUyPhUxNRG9m+5B5BTKxZQ5ZP92x/mx9Q==", + "dev": true }, "node_modules/@types/body-parser": { "version": "1.19.2", @@ -7412,6 +7419,7 @@ "version": "0.3.33", "resolved": "https://registry.npmjs.org/@types/ftp/-/ftp-0.3.33.tgz", "integrity": "sha512-L7wFlX3t9GsGgNS0oxLt6zbAZZGgsdptMmciL4cdxHmbL3Hz4Lysh8YqAR34eHsJ1uacJITcZBBDl5XpQlxPpQ==", + "dev": true, "dependencies": { "@types/node": "*" } @@ -7420,6 +7428,7 @@ "version": "3.1.11", "resolved": "https://registry.npmjs.org/@types/generic-pool/-/generic-pool-3.1.11.tgz", "integrity": "sha512-3mcD3ewmaKPbiAZglGj8We4ohlSMfw/xS+bbYUhTv/ALgqrrtJjyL4Ju9IgapXooBCTFEew5LAKQqzZV6/43xg==", + "dev": true, "dependencies": { "@types/node": "*" } @@ -7428,6 +7437,7 @@ "version": "7.2.0", "resolved": "https://registry.npmjs.org/@types/glob/-/glob-7.2.0.tgz", "integrity": "sha512-ZUxbzKl0IfJILTS6t7ip5fQQM/J3TJYubDm3nMbgubNNYS62eXeUpoLUC8/7fJNiFYHTrGPQn7hspDUzIHX3UA==", + "dev": true, "dependencies": { "@types/minimatch": "*", "@types/node": "*" @@ -7588,7 +7598,8 @@ "node_modules/@types/json-diff": { "version": "0.5.2", "resolved": "https://registry.npmjs.org/@types/json-diff/-/json-diff-0.5.2.tgz", - "integrity": "sha512-2oqXStJYYLDHCciNAClY277Ti3kXT+JLvPD7lLm/490i+B7g0GR6M4qiW+bd2V5vpB+yMKY8IelbsHMAYX1D0A==" + "integrity": "sha512-2oqXStJYYLDHCciNAClY277Ti3kXT+JLvPD7lLm/490i+B7g0GR6M4qiW+bd2V5vpB+yMKY8IelbsHMAYX1D0A==", + "dev": true }, "node_modules/@types/json-schema": { "version": "7.0.11", @@ -7605,6 +7616,7 @@ "version": "8.5.9", "resolved": "https://registry.npmjs.org/@types/jsonwebtoken/-/jsonwebtoken-8.5.9.tgz", "integrity": "sha512-272FMnFGzAVMGtu9tkr29hRL6bZj4Zs1KZNeHLnKqAvp06tAIcarTMwOh8/8bz4FmKRcMxZhZNeUAQsNLoiPhg==", + "dev": true, "dependencies": { "@types/node": "*" } @@ -7648,6 +7660,7 @@ "version": "4.4.7", "resolved": "https://registry.npmjs.org/@types/lodash.intersection/-/lodash.intersection-4.4.7.tgz", "integrity": "sha512-7ukD2s54bmRNNpiH9ApEErO4H6mB8+WmXFr/6RpP3e/n7h3UFhEJC7QwLcoWAqOrYCIRFMAAwDf3ambSsW8c5Q==", + "dev": true, "dependencies": { "@types/lodash": "*" } @@ -7700,7 +7713,8 @@ "node_modules/@types/lossless-json": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/@types/lossless-json/-/lossless-json-1.0.1.tgz", - "integrity": "sha512-zPE8kmpeL5/6L5gtTQHSOkAW/OSYYNTDRt6/2oEgLO1Zd3Rj5WVDoMloTtLJxQJhZGLGbL4pktKSh3NbzdaWdw==" + "integrity": "sha512-zPE8kmpeL5/6L5gtTQHSOkAW/OSYYNTDRt6/2oEgLO1Zd3Rj5WVDoMloTtLJxQJhZGLGbL4pktKSh3NbzdaWdw==", + "dev": true }, "node_modules/@types/luxon": { "version": "2.4.0", @@ -7756,7 +7770,8 @@ "node_modules/@types/minimatch": { "version": "5.1.0", "resolved": "https://registry.npmjs.org/@types/minimatch/-/minimatch-5.1.0.tgz", - "integrity": "sha512-0RJHq5FqDWo17kdHe+SMDJLfxmLaqHbWnqZ6gNKzDvStUlrmx/eKIY17+ifLS1yybo7X86aUshQMlittDOVNnw==" + "integrity": "sha512-0RJHq5FqDWo17kdHe+SMDJLfxmLaqHbWnqZ6gNKzDvStUlrmx/eKIY17+ifLS1yybo7X86aUshQMlittDOVNnw==", + "dev": true }, "node_modules/@types/minimist": { "version": "1.2.2", @@ -7937,6 +7952,7 @@ "version": "1.3.4", "resolved": "https://registry.npmjs.org/@types/promise-ftp/-/promise-ftp-1.3.4.tgz", "integrity": "sha512-fCIX7I84e25RX6bZ+qiIv0Puu5axWhCj9+El+4Kz1gZZyO/NvwdGTNQ33y6jdrPuTn3Df3kg7nMi1HohjNQLog==", + "dev": true, "dependencies": { "@types/bluebird": "*", "@types/ftp": "*", @@ -7947,7 +7963,8 @@ "node_modules/@types/promise-ftp-common": { "version": "1.1.0", "resolved": "https://registry.npmjs.org/@types/promise-ftp-common/-/promise-ftp-common-1.1.0.tgz", - "integrity": "sha512-mqo6D4qdiJdzeqlzFwEIchQQZk2hZacjssmjoAX7nClcREmRUUsnmgbWXEfA2qK986rwOPqepfRoSu7rsjAKag==" + "integrity": "sha512-mqo6D4qdiJdzeqlzFwEIchQQZk2hZacjssmjoAX7nClcREmRUUsnmgbWXEfA2qK986rwOPqepfRoSu7rsjAKag==", + "dev": true }, "node_modules/@types/psl": { "version": "1.1.0", @@ -8047,6 +8064,7 @@ "version": "0.8.11", "resolved": "https://registry.npmjs.org/@types/shelljs/-/shelljs-0.8.11.tgz", "integrity": "sha512-x9yaMvEh5BEaZKeVQC4vp3l+QoFj3BXcd4aYfuKSzIIyihjdVARAadYy3SMNIz0WCCdS2vB9JL/U6GQk5PaxQw==", + "dev": true, "dependencies": { "@types/glob": "*", "@types/node": "*" @@ -8062,6 +8080,7 @@ "version": "1.6.7", "resolved": "https://registry.npmjs.org/@types/snowflake-sdk/-/snowflake-sdk-1.6.7.tgz", "integrity": "sha512-qFObD4B02XTgVX1LsAdehdoxzhvJIn2WB5I7oJBr53JC+1X/0AzaUXm7tenuf53FWg6wyVuBgG79yxxBIJpKFA==", + "dev": true, "dependencies": { "@types/generic-pool": "*", "@types/node": "*" @@ -8132,6 +8151,7 @@ "version": "4.1.3", "resolved": "https://registry.npmjs.org/@types/swagger-ui-express/-/swagger-ui-express-4.1.3.tgz", "integrity": "sha512-jqCjGU/tGEaqIplPy3WyQg+Nrp6y80DCFnDEAvVKWkJyv0VivSSDCChkppHRHAablvInZe6pijDFMnavtN0vqA==", + "dev": true, "dependencies": { "@types/express": "*", "@types/serve-static": "*" @@ -8294,7 +8314,8 @@ "node_modules/@types/yamljs": { "version": "0.2.31", "resolved": "https://registry.npmjs.org/@types/yamljs/-/yamljs-0.2.31.tgz", - "integrity": "sha512-QcJ5ZczaXAqbVD3o8mw/mEBhRvO5UAdTtbvgwL/OgoWubvNBh6/MxLBAigtcgIFaq3shon9m3POIxQaLQt4fxQ==" + "integrity": "sha512-QcJ5ZczaXAqbVD3o8mw/mEBhRvO5UAdTtbvgwL/OgoWubvNBh6/MxLBAigtcgIFaq3shon9m3POIxQaLQt4fxQ==", + "dev": true }, "node_modules/@types/yargs": { "version": "15.0.14", @@ -17306,6 +17327,7 @@ "version": "3.0.0", "resolved": "https://registry.npmjs.org/chalk/-/chalk-3.0.0.tgz", "integrity": "sha512-4D3B6Wf41KOYRFdszmDqMCGq5VV/uMAB273JILmO+3jAlh8X4qDtdtgCR3fxtbLEMzSx22QdhnDcJvu2u1fVwg==", + "dev": true, "dependencies": { "ansi-styles": "^4.1.0", "supports-color": "^7.1.0" @@ -17318,6 +17340,7 @@ "version": "7.2.0", "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", + "dev": true, "dependencies": { "has-flag": "^4.0.0" }, @@ -18023,6 +18046,7 @@ "version": "6.0.0", "resolved": "https://registry.npmjs.org/cliui/-/cliui-6.0.0.tgz", "integrity": "sha512-t6wbgtoCXvAzst7QgXxJYqPt0usEfbgQdftEPbLL/cvv6HPE5VgvqCuAIDR0NgU52ds6rFwqrgakNLrHEjCbrQ==", + "dev": true, "dependencies": { "string-width": "^4.2.0", "strip-ansi": "^6.0.0", @@ -18033,6 +18057,7 @@ "version": "6.2.0", "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-6.2.0.tgz", "integrity": "sha512-r6lPcBGxZXlIcymEu7InxDMhdW0KDxpLgoFLcguasxCaJ/SOIZwINatK9KY/tf+ZrlywOKU0UDj3ATXUBfxJXA==", + "dev": true, "dependencies": { "ansi-styles": "^4.0.0", "string-width": "^4.1.0", @@ -20512,6 +20537,7 @@ "version": "1.2.0", "resolved": "https://registry.npmjs.org/decamelize/-/decamelize-1.2.0.tgz", "integrity": "sha512-z2S+W9X73hAUUki+N+9Za2lBlun89zigOyGrsax+KUQ6wKW4ZoWpEYBkGhQjwAjjDCkWxhY0VKEhk8wzY7F5cA==", + "dev": true, "engines": { "node": ">=0.10.0" } @@ -39305,6 +39331,7 @@ "version": "2.3.0", "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-2.3.0.tgz", "integrity": "sha512-//88mFWSJx8lxCzwdAABTJL2MyWB12+eIY7MDL2SqLmAkeKU9qxRvWuSyTjm3FUmpBEMuFfckAIqEaVGUDxb6w==", + "dev": true, "dependencies": { "p-try": "^2.0.0" }, @@ -39393,6 +39420,7 @@ "version": "2.2.0", "resolved": "https://registry.npmjs.org/p-try/-/p-try-2.2.0.tgz", "integrity": "sha512-R4nPAVTAU0B9D35/Gk3uJf/7XYbQcyohSKdvAxIRSNghFl4e71hVoGnBNQz9cWaXxO2I10KTC+3jMdvvoKw6dQ==", + "dev": true, "engines": { "node": ">=6" } @@ -39861,6 +39889,7 @@ "version": "4.0.0", "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-4.0.0.tgz", "integrity": "sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w==", + "dev": true, "engines": { "node": ">=8" } @@ -43443,7 +43472,8 @@ "node_modules/require-main-filename": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/require-main-filename/-/require-main-filename-2.0.0.tgz", - "integrity": "sha512-NKN5kMDylKuldxYLSUfrbo5Tuzh4hd+2E8NPPX02mZtn1VuREQToYe/ZdlJy+J3uCpfaiGF05e7B8W0iXbQHmg==" + "integrity": "sha512-NKN5kMDylKuldxYLSUfrbo5Tuzh4hd+2E8NPPX02mZtn1VuREQToYe/ZdlJy+J3uCpfaiGF05e7B8W0iXbQHmg==", + "dev": true }, "node_modules/requires-port": { "version": "1.0.0", @@ -52846,7 +52876,8 @@ "node_modules/which-module": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/which-module/-/which-module-2.0.0.tgz", - "integrity": "sha512-B+enWhmw6cjfVC7kS8Pj9pCrKSc5txArRyaYGe088shv/FGWH+0Rjx/xPgtsWfsUtS27FkP697E4DDhgrgoc0Q==" + "integrity": "sha512-B+enWhmw6cjfVC7kS8Pj9pCrKSc5txArRyaYGe088shv/FGWH+0Rjx/xPgtsWfsUtS27FkP697E4DDhgrgoc0Q==", + "dev": true }, "node_modules/which-typed-array": { "version": "1.1.8", @@ -53256,7 +53287,8 @@ "node_modules/y18n": { "version": "4.0.3", "resolved": "https://registry.npmjs.org/y18n/-/y18n-4.0.3.tgz", - "integrity": "sha512-JKhqTOwSrqNA1NY5lSztJ1GrBiUodLMmIZuLiDaMRJ+itFd+ABVE8XBjOvIWL+rSqNDC74LCSFmlb/U4UZ4hJQ==" + "integrity": "sha512-JKhqTOwSrqNA1NY5lSztJ1GrBiUodLMmIZuLiDaMRJ+itFd+ABVE8XBjOvIWL+rSqNDC74LCSFmlb/U4UZ4hJQ==", + "dev": true }, "node_modules/yallist": { "version": "3.1.1", @@ -53289,6 +53321,7 @@ "version": "15.4.1", "resolved": "https://registry.npmjs.org/yargs/-/yargs-15.4.1.tgz", "integrity": "sha512-aePbxDmcYW++PaqBsJ+HYUFwCdv4LVvdnhBy78E57PIor8/OVvhMrADFFEDh8DHDFRv/O9i3lPhsENjO7QX0+A==", + "dev": true, "dependencies": { "cliui": "^6.0.0", "decamelize": "^1.2.0", @@ -53318,6 +53351,7 @@ "version": "5.3.1", "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-5.3.1.tgz", "integrity": "sha512-L28STB170nwWS63UjtlEOE3dldQApaJXZkOI1uMFfzf3rRuPegHaHesyee+YxQ+W6SvRDQV6UrdOdRiR153wJg==", + "dev": true, "engines": { "node": ">=6" } @@ -53326,6 +53360,7 @@ "version": "4.1.0", "resolved": "https://registry.npmjs.org/find-up/-/find-up-4.1.0.tgz", "integrity": "sha512-PpOwAdQ/YlXQ2vj8a3h8IipDuYRi3wceVQQGYWxNINccq40Anw7BlsEXCMbt1Zt+OLA6Fq9suIpIWD0OsnISlw==", + "dev": true, "dependencies": { "locate-path": "^5.0.0", "path-exists": "^4.0.0" @@ -53338,6 +53373,7 @@ "version": "2.0.5", "resolved": "https://registry.npmjs.org/get-caller-file/-/get-caller-file-2.0.5.tgz", "integrity": "sha512-DyFP3BM/3YHTQOCUL/w0OZHR0lpKeGrxotcHWcqNEdnltqFwXVfhEBQ94eIo34AfQpo0rGki4cyIiftY06h2Fg==", + "dev": true, "engines": { "node": "6.* || 8.* || >= 10.*" } @@ -53346,6 +53382,7 @@ "version": "5.0.0", "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-5.0.0.tgz", "integrity": "sha512-t7hw9pI+WvuwNJXwk5zVHpyhIqzg2qTlklJOf0mVxGSbe3Fp2VieZcduNYjaLDoy6p9uGpQEGWG87WpMKlNq8g==", + "dev": true, "dependencies": { "p-locate": "^4.1.0" }, @@ -53357,6 +53394,7 @@ "version": "4.1.0", "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-4.1.0.tgz", "integrity": "sha512-R79ZZ/0wAxKGu3oYMlz8jy/kbhsNrS7SKZ7PxEHBgJ5+F2mtFW2fK2cOtBh1cHYkQsbzFV7I+EoRKe6Yt0oK7A==", + "dev": true, "dependencies": { "p-limit": "^2.2.0" }, @@ -53368,6 +53406,7 @@ "version": "18.1.3", "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-18.1.3.tgz", "integrity": "sha512-o50j0JeToy/4K6OZcaQmW6lyXXKhq7csREXcDwk2omFPJEwUNOVtJKvmDr9EI1fAJZUyZcRF7kxGBWmRXudrCQ==", + "dev": true, "dependencies": { "camelcase": "^5.0.0", "decamelize": "^1.2.0" @@ -53557,6 +53596,7 @@ "version": "4.2.4", "resolved": "https://registry.npmjs.org/z-schema/-/z-schema-4.2.4.tgz", "integrity": "sha512-YvBeW5RGNeNzKOUJs3rTL4+9rpcvHXt5I051FJbOcitV8bl40pEfcG0Q+dWSwS0/BIYrMZ/9HHoqLllMkFhD0w==", + "dev": true, "dependencies": { "lodash.get": "^4.4.2", "lodash.isequal": "^4.5.0", @@ -53576,6 +53616,7 @@ "version": "2.20.3", "resolved": "https://registry.npmjs.org/commander/-/commander-2.20.3.tgz", "integrity": "sha512-GpVkmM8vF2vQUkj2LvZmD35JxeJOLCwJ9cUkugyk2nuhbv3+mJvpLYYt+0+USMxE+oj+ey/lJEnhZw75x/OMcQ==", + "dev": true, "optional": true }, "node_modules/zen-observable": { @@ -53604,20 +53645,13 @@ }, "packages/cli": { "name": "n8n", - "version": "0.191.1", + "version": "0.192.2", "license": "SEE LICENSE IN LICENSE.md", "dependencies": { - "@apidevtools/swagger-cli": "4.0.0", "@oclif/command": "^1.5.18", "@oclif/core": "^1.9.3", "@oclif/errors": "^1.2.2", "@rudderstack/rudder-sdk-node": "1.0.6", - "@types/json-diff": "^0.5.1", - "@types/jsonwebtoken": "^8.5.2", - "@types/lodash.intersection": "^4.4.7", - "@types/shelljs": "^0.8.11", - "@types/swagger-ui-express": "^4.1.3", - "@types/yamljs": "^0.2.31", "axios": "^0.21.1", "basic-auth": "^2.0.1", "bcryptjs": "^2.4.3", @@ -53655,10 +53689,10 @@ "lodash.split": "^4.4.2", "lodash.unset": "^4.5.2", "mysql2": "~2.3.0", - "n8n-core": "~0.131.0", - "n8n-editor-ui": "~0.157.1", - "n8n-nodes-base": "~0.189.0", - "n8n-workflow": "~0.113.0", + "n8n-core": "~0.132.0", + "n8n-editor-ui": "~0.158.2", + "n8n-nodes-base": "~0.190.0", + "n8n-workflow": "~0.114.0", "nodemailer": "^6.7.1", "oauth-1.0a": "^2.2.6", "open": "^7.0.0", @@ -53686,6 +53720,7 @@ "n8n": "bin/n8n" }, "devDependencies": { + "@apidevtools/swagger-cli": "4.0.0", "@oclif/dev-cli": "^1.22.2", "@types/basic-auth": "^1.1.2", "@types/bcryptjs": "^2.4.2", @@ -53697,8 +53732,11 @@ "@types/dotenv": "^8.2.0", "@types/express": "^4.17.6", "@types/jest": "^27.4.0", + "@types/json-diff": "^0.5.1", + "@types/jsonwebtoken": "^8.5.2", "@types/localtunnel": "^1.9.0", "@types/lodash.get": "^4.4.6", + "@types/lodash.intersection": "^4.4.7", "@types/lodash.merge": "^4.6.6", "@types/lodash.omit": "^4.5.7", "@types/lodash.set": "^4.3.6", @@ -53709,10 +53747,13 @@ "@types/parseurl": "^1.3.1", "@types/passport-jwt": "^3.0.6", "@types/psl": "^1.1.0", + "@types/shelljs": "^0.8.11", "@types/superagent": "4.1.13", "@types/supertest": "^2.0.11", + "@types/swagger-ui-express": "^4.1.3", "@types/uuid": "^8.3.2", "@types/validator": "^13.7.0", + "@types/yamljs": "^0.2.31", "concurrently": "^5.1.0", "jest": "^27.4.7", "jest-mock": "^28.1.3", @@ -53729,7 +53770,7 @@ }, "packages/core": { "name": "n8n-core", - "version": "0.131.0", + "version": "0.132.0", "license": "SEE LICENSE IN LICENSE.md", "dependencies": { "axios": "^0.21.1", @@ -53741,7 +53782,7 @@ "form-data": "^4.0.0", "lodash.get": "^4.4.2", "mime-types": "^2.1.27", - "n8n-workflow": "~0.113.0", + "n8n-workflow": "~0.114.0", "oauth-1.0a": "^2.2.6", "p-cancelable": "^2.0.0", "qs": "^6.10.1", @@ -53767,7 +53808,7 @@ }, "packages/design-system": { "name": "n8n-design-system", - "version": "0.31.0", + "version": "0.32.0", "license": "SEE LICENSE IN LICENSE.md", "dependencies": { "element-ui": "~2.15.7", @@ -53843,14 +53884,14 @@ }, "packages/editor-ui": { "name": "n8n-editor-ui", - "version": "0.157.1", + "version": "0.158.2", "license": "SEE LICENSE IN LICENSE.md", "dependencies": { "@fontsource/open-sans": "^4.5.0", "@fortawesome/free-regular-svg-icons": "^6.1.1", "luxon": "^2.3.0", "monaco-editor": "^0.30.1", - "n8n-design-system": "~0.31.0", + "n8n-design-system": "~0.32.0", "timeago.js": "^4.0.2", "v-click-outside": "^3.1.2", "vue-fragment": "1.5.1", @@ -53902,7 +53943,7 @@ "lodash.get": "^4.4.2", "lodash.set": "^4.3.2", "monaco-editor-webpack-plugin": "^5.0.0", - "n8n-workflow": "~0.113.0", + "n8n-workflow": "~0.114.0", "normalize-wheel": "^1.0.1", "prismjs": "^1.17.1", "quill": "^2.0.0-dev.3", @@ -53928,18 +53969,16 @@ }, "packages/node-dev": { "name": "n8n-node-dev", - "version": "0.70.0", + "version": "0.71.0", "license": "SEE LICENSE IN LICENSE.md", "dependencies": { "@oclif/command": "^1.5.18", "@oclif/errors": "^1.2.2", - "@types/express": "^4.17.6", - "@types/node": "^16.11.22", "change-case": "^4.1.1", "copyfiles": "^2.1.1", "inquirer": "^7.0.1", - "n8n-core": "~0.131.0", - "n8n-workflow": "~0.113.0", + "n8n-core": "~0.132.0", + "n8n-workflow": "~0.114.0", "oauth-1.0a": "^2.2.6", "replace-in-file": "^6.0.0", "request": "^2.88.2", @@ -53952,20 +53991,19 @@ "devDependencies": { "@oclif/dev-cli": "^1.22.2", "@types/copyfiles": "^2.1.1", + "@types/express": "^4.17.6", "@types/inquirer": "^6.5.0", + "@types/node": "^16.11.22", "@types/tmp": "^0.2.0", "@types/vorpal": "^1.11.0" } }, "packages/nodes-base": { "name": "n8n-nodes-base", - "version": "0.189.0", + "version": "0.190.0", "license": "SEE LICENSE IN LICENSE.md", "dependencies": { "@kafkajs/confluent-schema-registry": "1.0.6", - "@types/lossless-json": "^1.0.0", - "@types/promise-ftp": "^1.3.4", - "@types/snowflake-sdk": "^1.5.1", "amqplib": "^0.8.0", "aws4": "^1.8.0", "basic-auth": "^2.0.1", @@ -53997,7 +54035,7 @@ "mqtt": "4.2.6", "mssql": "^8.1.2", "mysql2": "~2.3.0", - "n8n-core": "~0.131.0", + "n8n-core": "~0.132.0", "node-html-markdown": "^1.1.3", "node-ssh": "^12.0.0", "nodemailer": "^6.7.1", @@ -54033,6 +54071,7 @@ "@types/jest": "^27.4.0", "@types/jsonwebtoken": "^8.5.2", "@types/lodash.set": "^4.3.6", + "@types/lossless-json": "^1.0.0", "@types/mailparser": "^2.7.3", "@types/mime-types": "^2.1.0", "@types/moment-timezone": "^0.5.12", @@ -54041,9 +54080,11 @@ "@types/mssql": "^6.0.2", "@types/node": "^16.11.22", "@types/nodemailer": "^6.4.0", + "@types/promise-ftp": "^1.3.4", "@types/redis": "^2.8.11", "@types/request-promise-native": "~1.0.15", "@types/showdown": "^1.9.4", + "@types/snowflake-sdk": "^1.5.1", "@types/ssh2-sftp-client": "^5.1.0", "@types/tmp": "^0.2.0", "@types/uuid": "^8.3.2", @@ -54051,7 +54092,7 @@ "eslint-plugin-n8n-nodes-base": "^1.5.4", "gulp": "^4.0.0", "jest": "^27.4.7", - "n8n-workflow": "~0.113.0", + "n8n-workflow": "~0.114.0", "ts-jest": "^27.1.3", "tslint": "^6.1.2", "typescript": "~4.6.0" @@ -54059,7 +54100,7 @@ }, "packages/workflow": { "name": "n8n-workflow", - "version": "0.113.0", + "version": "0.114.0", "license": "SEE LICENSE IN LICENSE.md", "dependencies": { "@n8n_io/riot-tmpl": "^1.0.1", @@ -54128,6 +54169,7 @@ "version": "8.0.0", "resolved": "https://registry.npmjs.org/@apidevtools/json-schema-ref-parser/-/json-schema-ref-parser-8.0.0.tgz", "integrity": "sha512-n4YBtwQhdpLto1BaUCyAeflizmIbaloGShsPyRtFf5qdFJxfssj+GgLavczgKJFa3Bq+3St2CKcpRJdjtB4EBw==", + "dev": true, "requires": { "@jsdevtools/ono": "^7.1.0", "call-me-maybe": "^1.0.1", @@ -54137,12 +54179,14 @@ "@apidevtools/openapi-schemas": { "version": "2.1.0", "resolved": "https://registry.npmjs.org/@apidevtools/openapi-schemas/-/openapi-schemas-2.1.0.tgz", - "integrity": "sha512-Zc1AlqrJlX3SlpupFGpiLi2EbteyP7fXmUOGup6/DnkRgjP9bgMM/ag+n91rsv0U1Gpz0H3VILA/o3bW7Ua6BQ==" + "integrity": "sha512-Zc1AlqrJlX3SlpupFGpiLi2EbteyP7fXmUOGup6/DnkRgjP9bgMM/ag+n91rsv0U1Gpz0H3VILA/o3bW7Ua6BQ==", + "dev": true }, "@apidevtools/swagger-cli": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/@apidevtools/swagger-cli/-/swagger-cli-4.0.0.tgz", "integrity": "sha512-8jDHtZxEkxFNMfqeNhyHjxiS9P3BlSj1WpetsMExs4N+PIa3d0vSNch4Fk9OlgT/2oClCK0YSc+dmmdVpHh0hg==", + "dev": true, "requires": { "@apidevtools/swagger-parser": "^9.0.0", "chalk": "^3.0.0", @@ -54153,12 +54197,14 @@ "@apidevtools/swagger-methods": { "version": "3.0.2", "resolved": "https://registry.npmjs.org/@apidevtools/swagger-methods/-/swagger-methods-3.0.2.tgz", - "integrity": "sha512-QAkD5kK2b1WfjDS/UQn/qQkbwF31uqRjPTrsCs5ZG9BQGAkjwvqGFjjPqAuzac/IYzpPtRzjCP1WrTuAIjMrXg==" + "integrity": "sha512-QAkD5kK2b1WfjDS/UQn/qQkbwF31uqRjPTrsCs5ZG9BQGAkjwvqGFjjPqAuzac/IYzpPtRzjCP1WrTuAIjMrXg==", + "dev": true }, "@apidevtools/swagger-parser": { "version": "9.0.1", "resolved": "https://registry.npmjs.org/@apidevtools/swagger-parser/-/swagger-parser-9.0.1.tgz", "integrity": "sha512-Irqybg4dQrcHhZcxJc/UM4vO7Ksoj1Id5e+K94XUOzllqX1n47HEA50EKiXTCQbykxuJ4cYGIivjx/MRSTC5OA==", + "dev": true, "requires": { "@apidevtools/json-schema-ref-parser": "^8.0.0", "@apidevtools/openapi-schemas": "^2.0.2", @@ -54172,7 +54218,8 @@ "openapi-types": { "version": "1.3.5", "resolved": "https://registry.npmjs.org/openapi-types/-/openapi-types-1.3.5.tgz", - "integrity": "sha512-11oi4zYorsgvg5yBarZplAqbpev5HkuVNPlZaPTknPDzAynq+lnJdXAmruGWP0s+dNYZS7bjM+xrTpJw7184Fg==" + "integrity": "sha512-11oi4zYorsgvg5yBarZplAqbpev5HkuVNPlZaPTknPDzAynq+lnJdXAmruGWP0s+dNYZS7bjM+xrTpJw7184Fg==", + "dev": true } } }, @@ -59474,7 +59521,8 @@ "@types/bluebird": { "version": "3.5.36", "resolved": "https://registry.npmjs.org/@types/bluebird/-/bluebird-3.5.36.tgz", - "integrity": "sha512-HBNx4lhkxN7bx6P0++W8E289foSu8kO8GCk2unhuVggO+cE7rh9DhZUyPhUxNRG9m+5B5BTKxZQ5ZP92x/mx9Q==" + "integrity": "sha512-HBNx4lhkxN7bx6P0++W8E289foSu8kO8GCk2unhuVggO+cE7rh9DhZUyPhUxNRG9m+5B5BTKxZQ5ZP92x/mx9Q==", + "dev": true }, "@types/body-parser": { "version": "1.19.2", @@ -59716,6 +59764,7 @@ "version": "0.3.33", "resolved": "https://registry.npmjs.org/@types/ftp/-/ftp-0.3.33.tgz", "integrity": "sha512-L7wFlX3t9GsGgNS0oxLt6zbAZZGgsdptMmciL4cdxHmbL3Hz4Lysh8YqAR34eHsJ1uacJITcZBBDl5XpQlxPpQ==", + "dev": true, "requires": { "@types/node": "*" } @@ -59724,6 +59773,7 @@ "version": "3.1.11", "resolved": "https://registry.npmjs.org/@types/generic-pool/-/generic-pool-3.1.11.tgz", "integrity": "sha512-3mcD3ewmaKPbiAZglGj8We4ohlSMfw/xS+bbYUhTv/ALgqrrtJjyL4Ju9IgapXooBCTFEew5LAKQqzZV6/43xg==", + "dev": true, "requires": { "@types/node": "*" } @@ -59732,6 +59782,7 @@ "version": "7.2.0", "resolved": "https://registry.npmjs.org/@types/glob/-/glob-7.2.0.tgz", "integrity": "sha512-ZUxbzKl0IfJILTS6t7ip5fQQM/J3TJYubDm3nMbgubNNYS62eXeUpoLUC8/7fJNiFYHTrGPQn7hspDUzIHX3UA==", + "dev": true, "requires": { "@types/minimatch": "*", "@types/node": "*" @@ -59885,7 +59936,8 @@ "@types/json-diff": { "version": "0.5.2", "resolved": "https://registry.npmjs.org/@types/json-diff/-/json-diff-0.5.2.tgz", - "integrity": "sha512-2oqXStJYYLDHCciNAClY277Ti3kXT+JLvPD7lLm/490i+B7g0GR6M4qiW+bd2V5vpB+yMKY8IelbsHMAYX1D0A==" + "integrity": "sha512-2oqXStJYYLDHCciNAClY277Ti3kXT+JLvPD7lLm/490i+B7g0GR6M4qiW+bd2V5vpB+yMKY8IelbsHMAYX1D0A==", + "dev": true }, "@types/json-schema": { "version": "7.0.11", @@ -59902,6 +59954,7 @@ "version": "8.5.9", "resolved": "https://registry.npmjs.org/@types/jsonwebtoken/-/jsonwebtoken-8.5.9.tgz", "integrity": "sha512-272FMnFGzAVMGtu9tkr29hRL6bZj4Zs1KZNeHLnKqAvp06tAIcarTMwOh8/8bz4FmKRcMxZhZNeUAQsNLoiPhg==", + "dev": true, "requires": { "@types/node": "*" } @@ -59945,6 +59998,7 @@ "version": "4.4.7", "resolved": "https://registry.npmjs.org/@types/lodash.intersection/-/lodash.intersection-4.4.7.tgz", "integrity": "sha512-7ukD2s54bmRNNpiH9ApEErO4H6mB8+WmXFr/6RpP3e/n7h3UFhEJC7QwLcoWAqOrYCIRFMAAwDf3ambSsW8c5Q==", + "dev": true, "requires": { "@types/lodash": "*" } @@ -59997,7 +60051,8 @@ "@types/lossless-json": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/@types/lossless-json/-/lossless-json-1.0.1.tgz", - "integrity": "sha512-zPE8kmpeL5/6L5gtTQHSOkAW/OSYYNTDRt6/2oEgLO1Zd3Rj5WVDoMloTtLJxQJhZGLGbL4pktKSh3NbzdaWdw==" + "integrity": "sha512-zPE8kmpeL5/6L5gtTQHSOkAW/OSYYNTDRt6/2oEgLO1Zd3Rj5WVDoMloTtLJxQJhZGLGbL4pktKSh3NbzdaWdw==", + "dev": true }, "@types/luxon": { "version": "2.4.0", @@ -60053,7 +60108,8 @@ "@types/minimatch": { "version": "5.1.0", "resolved": "https://registry.npmjs.org/@types/minimatch/-/minimatch-5.1.0.tgz", - "integrity": "sha512-0RJHq5FqDWo17kdHe+SMDJLfxmLaqHbWnqZ6gNKzDvStUlrmx/eKIY17+ifLS1yybo7X86aUshQMlittDOVNnw==" + "integrity": "sha512-0RJHq5FqDWo17kdHe+SMDJLfxmLaqHbWnqZ6gNKzDvStUlrmx/eKIY17+ifLS1yybo7X86aUshQMlittDOVNnw==", + "dev": true }, "@types/minimist": { "version": "1.2.2", @@ -60230,6 +60286,7 @@ "version": "1.3.4", "resolved": "https://registry.npmjs.org/@types/promise-ftp/-/promise-ftp-1.3.4.tgz", "integrity": "sha512-fCIX7I84e25RX6bZ+qiIv0Puu5axWhCj9+El+4Kz1gZZyO/NvwdGTNQ33y6jdrPuTn3Df3kg7nMi1HohjNQLog==", + "dev": true, "requires": { "@types/bluebird": "*", "@types/ftp": "*", @@ -60240,7 +60297,8 @@ "@types/promise-ftp-common": { "version": "1.1.0", "resolved": "https://registry.npmjs.org/@types/promise-ftp-common/-/promise-ftp-common-1.1.0.tgz", - "integrity": "sha512-mqo6D4qdiJdzeqlzFwEIchQQZk2hZacjssmjoAX7nClcREmRUUsnmgbWXEfA2qK986rwOPqepfRoSu7rsjAKag==" + "integrity": "sha512-mqo6D4qdiJdzeqlzFwEIchQQZk2hZacjssmjoAX7nClcREmRUUsnmgbWXEfA2qK986rwOPqepfRoSu7rsjAKag==", + "dev": true }, "@types/psl": { "version": "1.1.0", @@ -60339,6 +60397,7 @@ "version": "0.8.11", "resolved": "https://registry.npmjs.org/@types/shelljs/-/shelljs-0.8.11.tgz", "integrity": "sha512-x9yaMvEh5BEaZKeVQC4vp3l+QoFj3BXcd4aYfuKSzIIyihjdVARAadYy3SMNIz0WCCdS2vB9JL/U6GQk5PaxQw==", + "dev": true, "requires": { "@types/glob": "*", "@types/node": "*" @@ -60354,6 +60413,7 @@ "version": "1.6.7", "resolved": "https://registry.npmjs.org/@types/snowflake-sdk/-/snowflake-sdk-1.6.7.tgz", "integrity": "sha512-qFObD4B02XTgVX1LsAdehdoxzhvJIn2WB5I7oJBr53JC+1X/0AzaUXm7tenuf53FWg6wyVuBgG79yxxBIJpKFA==", + "dev": true, "requires": { "@types/generic-pool": "*", "@types/node": "*" @@ -60424,6 +60484,7 @@ "version": "4.1.3", "resolved": "https://registry.npmjs.org/@types/swagger-ui-express/-/swagger-ui-express-4.1.3.tgz", "integrity": "sha512-jqCjGU/tGEaqIplPy3WyQg+Nrp6y80DCFnDEAvVKWkJyv0VivSSDCChkppHRHAablvInZe6pijDFMnavtN0vqA==", + "dev": true, "requires": { "@types/express": "*", "@types/serve-static": "*" @@ -60585,7 +60646,8 @@ "@types/yamljs": { "version": "0.2.31", "resolved": "https://registry.npmjs.org/@types/yamljs/-/yamljs-0.2.31.tgz", - "integrity": "sha512-QcJ5ZczaXAqbVD3o8mw/mEBhRvO5UAdTtbvgwL/OgoWubvNBh6/MxLBAigtcgIFaq3shon9m3POIxQaLQt4fxQ==" + "integrity": "sha512-QcJ5ZczaXAqbVD3o8mw/mEBhRvO5UAdTtbvgwL/OgoWubvNBh6/MxLBAigtcgIFaq3shon9m3POIxQaLQt4fxQ==", + "dev": true }, "@types/yargs": { "version": "15.0.14", @@ -67825,6 +67887,7 @@ "version": "3.0.0", "resolved": "https://registry.npmjs.org/chalk/-/chalk-3.0.0.tgz", "integrity": "sha512-4D3B6Wf41KOYRFdszmDqMCGq5VV/uMAB273JILmO+3jAlh8X4qDtdtgCR3fxtbLEMzSx22QdhnDcJvu2u1fVwg==", + "dev": true, "requires": { "ansi-styles": "^4.1.0", "supports-color": "^7.1.0" @@ -67834,6 +67897,7 @@ "version": "7.2.0", "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", + "dev": true, "requires": { "has-flag": "^4.0.0" } @@ -68387,6 +68451,7 @@ "version": "6.0.0", "resolved": "https://registry.npmjs.org/cliui/-/cliui-6.0.0.tgz", "integrity": "sha512-t6wbgtoCXvAzst7QgXxJYqPt0usEfbgQdftEPbLL/cvv6HPE5VgvqCuAIDR0NgU52ds6rFwqrgakNLrHEjCbrQ==", + "dev": true, "requires": { "string-width": "^4.2.0", "strip-ansi": "^6.0.0", @@ -68397,6 +68462,7 @@ "version": "6.2.0", "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-6.2.0.tgz", "integrity": "sha512-r6lPcBGxZXlIcymEu7InxDMhdW0KDxpLgoFLcguasxCaJ/SOIZwINatK9KY/tf+ZrlywOKU0UDj3ATXUBfxJXA==", + "dev": true, "requires": { "ansi-styles": "^4.0.0", "string-width": "^4.1.0", @@ -70428,7 +70494,8 @@ "decamelize": { "version": "1.2.0", "resolved": "https://registry.npmjs.org/decamelize/-/decamelize-1.2.0.tgz", - "integrity": "sha512-z2S+W9X73hAUUki+N+9Za2lBlun89zigOyGrsax+KUQ6wKW4ZoWpEYBkGhQjwAjjDCkWxhY0VKEhk8wzY7F5cA==" + "integrity": "sha512-z2S+W9X73hAUUki+N+9Za2lBlun89zigOyGrsax+KUQ6wKW4ZoWpEYBkGhQjwAjjDCkWxhY0VKEhk8wzY7F5cA==", + "dev": true }, "decimal.js": { "version": "10.4.0", @@ -83976,10 +84043,10 @@ "lodash.split": "^4.4.2", "lodash.unset": "^4.5.2", "mysql2": "~2.3.0", - "n8n-core": "~0.131.0", - "n8n-editor-ui": "~0.157.1", - "n8n-nodes-base": "~0.189.0", - "n8n-workflow": "~0.113.0", + "n8n-core": "~0.132.0", + "n8n-editor-ui": "~0.158.2", + "n8n-nodes-base": "~0.190.0", + "n8n-workflow": "~0.114.0", "nodemailer": "^6.7.1", "nodemon": "^2.0.2", "oauth-1.0a": "^2.2.6", @@ -84032,7 +84099,7 @@ "jest": "^27.4.7", "lodash.get": "^4.4.2", "mime-types": "^2.1.27", - "n8n-workflow": "~0.113.0", + "n8n-workflow": "~0.114.0", "oauth-1.0a": "^2.2.6", "p-cancelable": "^2.0.0", "qs": "^6.10.1", @@ -84158,8 +84225,8 @@ "luxon": "^2.3.0", "monaco-editor": "^0.30.1", "monaco-editor-webpack-plugin": "^5.0.0", - "n8n-design-system": "~0.31.0", - "n8n-workflow": "~0.113.0", + "n8n-design-system": "~0.32.0", + "n8n-workflow": "~0.114.0", "normalize-wheel": "^1.0.1", "prismjs": "^1.17.1", "quill": "^2.0.0-dev.3", @@ -84205,8 +84272,8 @@ "change-case": "^4.1.1", "copyfiles": "^2.1.1", "inquirer": "^7.0.1", - "n8n-core": "~0.131.0", - "n8n-workflow": "~0.113.0", + "n8n-core": "~0.132.0", + "n8n-workflow": "~0.114.0", "oauth-1.0a": "^2.2.6", "replace-in-file": "^6.0.0", "request": "^2.88.2", @@ -84283,8 +84350,8 @@ "mqtt": "4.2.6", "mssql": "^8.1.2", "mysql2": "~2.3.0", - "n8n-core": "~0.131.0", - "n8n-workflow": "~0.113.0", + "n8n-core": "~0.132.0", + "n8n-workflow": "~0.114.0", "node-html-markdown": "^1.1.3", "node-ssh": "^12.0.0", "nodemailer": "^6.7.1", @@ -85686,6 +85753,7 @@ "version": "2.3.0", "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-2.3.0.tgz", "integrity": "sha512-//88mFWSJx8lxCzwdAABTJL2MyWB12+eIY7MDL2SqLmAkeKU9qxRvWuSyTjm3FUmpBEMuFfckAIqEaVGUDxb6w==", + "dev": true, "requires": { "p-try": "^2.0.0" } @@ -85745,7 +85813,8 @@ "p-try": { "version": "2.2.0", "resolved": "https://registry.npmjs.org/p-try/-/p-try-2.2.0.tgz", - "integrity": "sha512-R4nPAVTAU0B9D35/Gk3uJf/7XYbQcyohSKdvAxIRSNghFl4e71hVoGnBNQz9cWaXxO2I10KTC+3jMdvvoKw6dQ==" + "integrity": "sha512-R4nPAVTAU0B9D35/Gk3uJf/7XYbQcyohSKdvAxIRSNghFl4e71hVoGnBNQz9cWaXxO2I10KTC+3jMdvvoKw6dQ==", + "dev": true }, "pac-proxy-agent": { "version": "5.0.0", @@ -86138,7 +86207,8 @@ "path-exists": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-4.0.0.tgz", - "integrity": "sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w==" + "integrity": "sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w==", + "dev": true }, "path-is-absolute": { "version": "1.0.1", @@ -89026,7 +89096,8 @@ "require-main-filename": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/require-main-filename/-/require-main-filename-2.0.0.tgz", - "integrity": "sha512-NKN5kMDylKuldxYLSUfrbo5Tuzh4hd+2E8NPPX02mZtn1VuREQToYe/ZdlJy+J3uCpfaiGF05e7B8W0iXbQHmg==" + "integrity": "sha512-NKN5kMDylKuldxYLSUfrbo5Tuzh4hd+2E8NPPX02mZtn1VuREQToYe/ZdlJy+J3uCpfaiGF05e7B8W0iXbQHmg==", + "dev": true }, "requires-port": { "version": "1.0.0", @@ -96361,7 +96432,8 @@ "which-module": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/which-module/-/which-module-2.0.0.tgz", - "integrity": "sha512-B+enWhmw6cjfVC7kS8Pj9pCrKSc5txArRyaYGe088shv/FGWH+0Rjx/xPgtsWfsUtS27FkP697E4DDhgrgoc0Q==" + "integrity": "sha512-B+enWhmw6cjfVC7kS8Pj9pCrKSc5txArRyaYGe088shv/FGWH+0Rjx/xPgtsWfsUtS27FkP697E4DDhgrgoc0Q==", + "dev": true }, "which-typed-array": { "version": "1.1.8", @@ -96664,7 +96736,8 @@ "y18n": { "version": "4.0.3", "resolved": "https://registry.npmjs.org/y18n/-/y18n-4.0.3.tgz", - "integrity": "sha512-JKhqTOwSrqNA1NY5lSztJ1GrBiUodLMmIZuLiDaMRJ+itFd+ABVE8XBjOvIWL+rSqNDC74LCSFmlb/U4UZ4hJQ==" + "integrity": "sha512-JKhqTOwSrqNA1NY5lSztJ1GrBiUodLMmIZuLiDaMRJ+itFd+ABVE8XBjOvIWL+rSqNDC74LCSFmlb/U4UZ4hJQ==", + "dev": true }, "yallist": { "version": "3.1.1", @@ -96690,6 +96763,7 @@ "version": "15.4.1", "resolved": "https://registry.npmjs.org/yargs/-/yargs-15.4.1.tgz", "integrity": "sha512-aePbxDmcYW++PaqBsJ+HYUFwCdv4LVvdnhBy78E57PIor8/OVvhMrADFFEDh8DHDFRv/O9i3lPhsENjO7QX0+A==", + "dev": true, "requires": { "cliui": "^6.0.0", "decamelize": "^1.2.0", @@ -96707,12 +96781,14 @@ "camelcase": { "version": "5.3.1", "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-5.3.1.tgz", - "integrity": "sha512-L28STB170nwWS63UjtlEOE3dldQApaJXZkOI1uMFfzf3rRuPegHaHesyee+YxQ+W6SvRDQV6UrdOdRiR153wJg==" + "integrity": "sha512-L28STB170nwWS63UjtlEOE3dldQApaJXZkOI1uMFfzf3rRuPegHaHesyee+YxQ+W6SvRDQV6UrdOdRiR153wJg==", + "dev": true }, "find-up": { "version": "4.1.0", "resolved": "https://registry.npmjs.org/find-up/-/find-up-4.1.0.tgz", "integrity": "sha512-PpOwAdQ/YlXQ2vj8a3h8IipDuYRi3wceVQQGYWxNINccq40Anw7BlsEXCMbt1Zt+OLA6Fq9suIpIWD0OsnISlw==", + "dev": true, "requires": { "locate-path": "^5.0.0", "path-exists": "^4.0.0" @@ -96721,12 +96797,14 @@ "get-caller-file": { "version": "2.0.5", "resolved": "https://registry.npmjs.org/get-caller-file/-/get-caller-file-2.0.5.tgz", - "integrity": "sha512-DyFP3BM/3YHTQOCUL/w0OZHR0lpKeGrxotcHWcqNEdnltqFwXVfhEBQ94eIo34AfQpo0rGki4cyIiftY06h2Fg==" + "integrity": "sha512-DyFP3BM/3YHTQOCUL/w0OZHR0lpKeGrxotcHWcqNEdnltqFwXVfhEBQ94eIo34AfQpo0rGki4cyIiftY06h2Fg==", + "dev": true }, "locate-path": { "version": "5.0.0", "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-5.0.0.tgz", "integrity": "sha512-t7hw9pI+WvuwNJXwk5zVHpyhIqzg2qTlklJOf0mVxGSbe3Fp2VieZcduNYjaLDoy6p9uGpQEGWG87WpMKlNq8g==", + "dev": true, "requires": { "p-locate": "^4.1.0" } @@ -96735,6 +96813,7 @@ "version": "4.1.0", "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-4.1.0.tgz", "integrity": "sha512-R79ZZ/0wAxKGu3oYMlz8jy/kbhsNrS7SKZ7PxEHBgJ5+F2mtFW2fK2cOtBh1cHYkQsbzFV7I+EoRKe6Yt0oK7A==", + "dev": true, "requires": { "p-limit": "^2.2.0" } @@ -96743,6 +96822,7 @@ "version": "18.1.3", "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-18.1.3.tgz", "integrity": "sha512-o50j0JeToy/4K6OZcaQmW6lyXXKhq7csREXcDwk2omFPJEwUNOVtJKvmDr9EI1fAJZUyZcRF7kxGBWmRXudrCQ==", + "dev": true, "requires": { "camelcase": "^5.0.0", "decamelize": "^1.2.0" @@ -96898,6 +96978,7 @@ "version": "4.2.4", "resolved": "https://registry.npmjs.org/z-schema/-/z-schema-4.2.4.tgz", "integrity": "sha512-YvBeW5RGNeNzKOUJs3rTL4+9rpcvHXt5I051FJbOcitV8bl40pEfcG0Q+dWSwS0/BIYrMZ/9HHoqLllMkFhD0w==", + "dev": true, "requires": { "commander": "^2.7.1", "lodash.get": "^4.4.2", @@ -96909,6 +96990,7 @@ "version": "2.20.3", "resolved": "https://registry.npmjs.org/commander/-/commander-2.20.3.tgz", "integrity": "sha512-GpVkmM8vF2vQUkj2LvZmD35JxeJOLCwJ9cUkugyk2nuhbv3+mJvpLYYt+0+USMxE+oj+ey/lJEnhZw75x/OMcQ==", + "dev": true, "optional": true } } diff --git a/packages/cli/package.json b/packages/cli/package.json index f52acaafd6..f6cc8d334f 100644 --- a/packages/cli/package.json +++ b/packages/cli/package.json @@ -58,6 +58,7 @@ "oclif.manifest.json" ], "devDependencies": { + "@apidevtools/swagger-cli": "4.0.0", "@oclif/dev-cli": "^1.22.2", "@types/basic-auth": "^1.1.2", "@types/bcryptjs": "^2.4.2", @@ -69,8 +70,11 @@ "@types/dotenv": "^8.2.0", "@types/express": "^4.17.6", "@types/jest": "^27.4.0", + "@types/json-diff": "^0.5.1", + "@types/jsonwebtoken": "^8.5.2", "@types/localtunnel": "^1.9.0", "@types/lodash.get": "^4.4.6", + "@types/lodash.intersection": "^4.4.7", "@types/lodash.merge": "^4.6.6", "@types/lodash.omit": "^4.5.7", "@types/lodash.set": "^4.3.6", @@ -81,10 +85,13 @@ "@types/parseurl": "^1.3.1", "@types/passport-jwt": "^3.0.6", "@types/psl": "^1.1.0", + "@types/shelljs": "^0.8.11", "@types/superagent": "4.1.13", "@types/supertest": "^2.0.11", + "@types/swagger-ui-express": "^4.1.3", "@types/uuid": "^8.3.2", "@types/validator": "^13.7.0", + "@types/yamljs": "^0.2.31", "concurrently": "^5.1.0", "jest": "^27.4.7", "jest-mock": "^28.1.3", @@ -96,17 +103,10 @@ "typescript": "~4.6.0" }, "dependencies": { - "@apidevtools/swagger-cli": "4.0.0", "@oclif/command": "^1.5.18", "@oclif/core": "^1.9.3", "@oclif/errors": "^1.2.2", "@rudderstack/rudder-sdk-node": "1.0.6", - "@types/json-diff": "^0.5.1", - "@types/jsonwebtoken": "^8.5.2", - "@types/lodash.intersection": "^4.4.7", - "@types/shelljs": "^0.8.11", - "@types/swagger-ui-express": "^4.1.3", - "@types/yamljs": "^0.2.31", "axios": "^0.21.1", "basic-auth": "^2.0.1", "bcryptjs": "^2.4.3", diff --git a/packages/node-dev/package.json b/packages/node-dev/package.json index 4a8098fc41..11156574bc 100644 --- a/packages/node-dev/package.json +++ b/packages/node-dev/package.json @@ -48,15 +48,15 @@ "devDependencies": { "@oclif/dev-cli": "^1.22.2", "@types/copyfiles": "^2.1.1", + "@types/express": "^4.17.6", "@types/inquirer": "^6.5.0", + "@types/node": "^16.11.22", "@types/tmp": "^0.2.0", "@types/vorpal": "^1.11.0" }, "dependencies": { "@oclif/command": "^1.5.18", "@oclif/errors": "^1.2.2", - "@types/express": "^4.17.6", - "@types/node": "^16.11.22", "change-case": "^4.1.1", "copyfiles": "^2.1.1", "inquirer": "^7.0.1", diff --git a/packages/nodes-base/package.json b/packages/nodes-base/package.json index 9e5ca6da58..e689f80cf1 100644 --- a/packages/nodes-base/package.json +++ b/packages/nodes-base/package.json @@ -711,6 +711,7 @@ "@types/jest": "^27.4.0", "@types/jsonwebtoken": "^8.5.2", "@types/lodash.set": "^4.3.6", + "@types/lossless-json": "^1.0.0", "@types/mailparser": "^2.7.3", "@types/mime-types": "^2.1.0", "@types/moment-timezone": "^0.5.12", @@ -719,9 +720,11 @@ "@types/mssql": "^6.0.2", "@types/node": "^16.11.22", "@types/nodemailer": "^6.4.0", + "@types/promise-ftp": "^1.3.4", "@types/redis": "^2.8.11", "@types/request-promise-native": "~1.0.15", "@types/showdown": "^1.9.4", + "@types/snowflake-sdk": "^1.5.1", "@types/ssh2-sftp-client": "^5.1.0", "@types/tmp": "^0.2.0", "@types/uuid": "^8.3.2", @@ -736,9 +739,6 @@ }, "dependencies": { "@kafkajs/confluent-schema-registry": "1.0.6", - "@types/lossless-json": "^1.0.0", - "@types/promise-ftp": "^1.3.4", - "@types/snowflake-sdk": "^1.5.1", "amqplib": "^0.8.0", "aws4": "^1.8.0", "basic-auth": "^2.0.1",