diff --git a/.github/workflows/makefile.yml b/.github/workflows/makefile.yml
index 577ddf7a..e500bacb 100644
--- a/.github/workflows/makefile.yml
+++ b/.github/workflows/makefile.yml
@@ -40,3 +40,15 @@ jobs:
name: assets
compression-level: 9
path: ./minio
+
+ - name: Publishing
+ uses: burnett01/rsync-deployments@7.0.2
+ with:
+ path: ./minio/
+ switches: --mkpath -rv --delete
+ remote_path: ${{ secrets.DEPLOY_PATH }}/${{ github.event.pull_request.head.ref }}
+ remote_host: ${{ secrets.DEPLOY_HOST }}
+ remote_port: ${{ secrets.DEPLOY_PORT }}
+ remote_user: ${{ secrets.DEPLOY_USER }}
+ remote_key: ${{ secrets.DEPLOY_KEY }}
+ remote_key_pass: ${{ secrets.DEPLOY_KEY_PASS }}
\ No newline at end of file
diff --git a/.github/workflows/minimal-build.yml b/.github/workflows/minimal-build.yml
deleted file mode 100644
index c421cfa3..00000000
--- a/.github/workflows/minimal-build.yml
+++ /dev/null
@@ -1,42 +0,0 @@
-name: Makefile CI
-
-on:
- pull_request:
- types: [opened, reopened, synchronize]
-
-jobs:
- build:
-
- runs-on: ubuntu-latest
-
- steps:
- - name: checkout
- uses: actions/checkout@v4
-
- - name: install-python
- uses: actions/setup-python@v5
- with:
- python-version: '3.12'
-
- - name: pip-requirements
- run: pip install -r requirements.txt
-
- - name: npm-setup
- uses: actions/setup-node@v4
- with:
- node-version: 20
-
- - name: npm-install-setup
- uses: bahmutov/npm-install@v1
- with:
- working-directory: ./
-
- - name: build-docs
- run: ./build-docs-ci-minimal.sh
-
- - name: upload-artifact
- uses: actions/upload-artifact@v4
- with:
- name: linux-k8s-builds
- compression-level: 9
- path: ./minio
diff --git a/.github/workflows/pr-ci-cd.yml b/.github/workflows/pr-ci-cd.yml
new file mode 100644
index 00000000..43e2526f
--- /dev/null
+++ b/.github/workflows/pr-ci-cd.yml
@@ -0,0 +1,61 @@
+name: Staging
+
+on:
+ pull_request:
+ type: ["opened","synchronize"]
+
+jobs:
+ build-and-stage:
+
+ runs-on: ubuntu-latest
+
+ steps:
+ - name: checkout
+ uses: actions/checkout@v4
+
+ - name: install-python
+ uses: actions/setup-python@v5
+ with:
+ python-version: '3.12'
+
+ - name: pip-requirements
+ run: pip install -r requirements.txt
+
+ - name: npm-setup
+ uses: actions/setup-node@v4
+ with:
+ node-version: 20
+
+ - name: npm-install-setup
+ uses: bahmutov/npm-install@v1
+ with:
+ working-directory: ./
+
+ - name: build-docs
+ run: ./build-docs-ci.sh
+
+ - name: Staging
+ uses: burnett01/rsync-deployments@7.0.2
+ with:
+ path: ./minio/
+ switches: --mkpath -rv --delete
+ remote_path: ${{ secrets.DEPLOY_PATH }}/${{ github.event.pull_request.head.ref }}
+ remote_host: ${{ secrets.DEPLOY_HOST_STAGING }}
+ remote_port: ${{ secrets.DEPLOY_PORT }}
+ remote_user: ${{ secrets.DEPLOY_USER_STAGING }}
+ remote_key: ${{ secrets.DEPLOY_KEY_STAGING }}
+ remote_key_pass: ${{ secrets.DEPLOY_KEY_STAGING_PASS }}
+
+ - name: comment
+ uses: actions/github-script@v7
+ with:
+ github-token: ${{secrets.GITHUB_TOKEN}}
+ script: |
+ github.rest.issues.createComment({
+ issue_number: context.issue.number,
+ owner: context.repo.owner,
+ repo: context.repo.repo,
+ body: "Staged at ${{ secrets.STAGING_URL }}/${{ github.event.pull_request.head.ref }}"
+ })
+
+
diff --git a/Makefile b/Makefile
index 8339c9e0..20854a9a 100644
--- a/Makefile
+++ b/Makefile
@@ -34,24 +34,9 @@ stage-%:
exit 1; \
fi
- @if [ ! $(shell command -v mc) ]; then \
- echo "mc not found on this host, exiting" ; \
- exit 1; \
- fi
- @if [ $(shell mc alias list --json docs-staging | jq '.status') = "error" ]; then \
- echo "doc-staging alias not found on for host mc configuration, exiting" ; \
- exit 1; \
- fi
+ @(./stage.sh)
- @if [ $(shell mc stat --json docs-staging/staging | jq '.status') = "error" ]; then \
- echo "docs-staging/staging bucket not found, exiting" ; \
- exit 1; \
- fi
-
- @echo "Copying contents of $(BUILDDIR)/$(GITDIR)/$*/html/* to docs-staging/staging/$(GITDIR)/$*/"
- @mc cp -r $(BUILDDIR)/$(GITDIR)/$*/html/* docs-staging/staging/$(GITDIR)/$*/
- @echo "Copy complete, visit $(STAGINGURL)/$(GITDIR)/$*/index.html"
# Commenting out the older method
# python -m http.server --directory $(BUILDDIR)/$(GITDIR)/$*/html/
@@ -65,12 +50,14 @@ stage-%:
# - Compile SCSS
# - Build docs via Sphinx
-linux:
+mindocs:
@echo "--------------------------------------"
- @echo "Building for $@ Platform"
+ @echo " Building for MinIO "
@echo "--------------------------------------"
@cp source/default-conf.py source/conf.py
@make sync-deps
+ @make sync-operator-version
+ @make sync-deps
ifeq ($(SYNC_SDK),TRUE)
@make sync-sdks
else
@@ -80,91 +67,6 @@ endif
@$(SPHINXBUILD) -M html "$(SOURCEDIR)" "$(BUILDDIR)/$(GITDIR)/$@" $(SPHINXOPTS) $(O) -t $@
@echo -e "Building $@ Complete\n--------------------------------------\n"
-windows:
- @echo "--------------------------------------"
- @echo "Building for $@ Platform"
- @echo "--------------------------------------"
- @cp source/default-conf.py source/conf.py
- @make sync-deps
- @npm run build
- @$(SPHINXBUILD) -M html "$(SOURCEDIR)" "$(BUILDDIR)/$(GITDIR)/$@" $(SPHINXOPTS) $(O) -t $@
- @echo -e "Building $@ Complete\n--------------------------------------\n"
-
-macos:
- @echo "--------------------------------------"
- @echo "Building for $@ Platform"
- @echo "--------------------------------------"
- @cp source/default-conf.py source/conf.py
- @make sync-deps
- @npm run build
- @$(SPHINXBUILD) -M html "$(SOURCEDIR)" "$(BUILDDIR)/$(GITDIR)/$@" $(SPHINXOPTS) $(O) -t $@
- @echo -e "Building $@ Complete\n--------------------------------------\n"
-
-k8s:
- @echo "--------------------------------------"
- @echo "Building for $@ Platform"
- @echo "--------------------------------------"
- @cp source/default-conf.py source/conf.py
- @make sync-operator-version
- @make sync-deps
- @npm run build
- @$(SPHINXBUILD) -M html "$(SOURCEDIR)" "$(BUILDDIR)/$(GITDIR)/$@" $(SPHINXOPTS) $(O) -t $@
- @echo -e "Building $@ Complete\n--------------------------------------\n"
-
-openshift:
- @echo "--------------------------------------"
- @echo "Building for $@ Platform"
- @echo "--------------------------------------"
- @cp source/default-conf.py source/conf.py
- @make sync-operator-version
- @make sync-deps
- @npm run build
- @$(SPHINXBUILD) -M html "$(SOURCEDIR)" "$(BUILDDIR)/$(GITDIR)/$@" $(SPHINXOPTS) $(O) -t $@ -t k8s
- @echo -e "Building $@ Complete\n--------------------------------------\n"
-
-eks:
- @echo "--------------------------------------"
- @echo "Building for $@ Platform"
- @echo "--------------------------------------"
- @cp source/default-conf.py source/conf.py
- @make sync-operator-version
- @make sync-deps
- @npm run build
- @$(SPHINXBUILD) -M html "$(SOURCEDIR)" "$(BUILDDIR)/$(GITDIR)/$@" $(SPHINXOPTS) $(O) -t $@ -t k8s
- @echo -e "Building $@ Complete\n--------------------------------------\n"
-
-gke:
- @echo "--------------------------------------"
- @echo "Building for $@ Platform"
- @echo "--------------------------------------"
- @cp source/default-conf.py source/conf.py
- @make sync-operator-version
- @make sync-deps
- @npm run build
- @$(SPHINXBUILD) -M html "$(SOURCEDIR)" "$(BUILDDIR)/$(GITDIR)/$@" $(SPHINXOPTS) $(O) -t $@ -t k8s
- @echo -e "Building $@ Complete\n--------------------------------------\n"
-
-aks:
- @echo "--------------------------------------"
- @echo "Building for $@ Platform"
- @echo "--------------------------------------"
- @cp source/default-conf.py source/conf.py
- @make sync-operator-version
- @make sync-deps
- @npm run build
- @$(SPHINXBUILD) -M html "$(SOURCEDIR)" "$(BUILDDIR)/$(GITDIR)/$@" $(SPHINXOPTS) $(O) -t $@ -t k8s
- @echo -e "Building $@ Complete\n--------------------------------------\n"
-
-container:
- @echo "--------------------------------------"
- @echo "Building for $@ Platform"
- @echo "--------------------------------------"
- @cp source/default-conf.py source/conf.py
- @make sync-deps
- @npm run build
- @$(SPHINXBUILD) -M html "$(SOURCEDIR)" "$(BUILDDIR)/$(GITDIR)/$@" $(SPHINXOPTS) $(O) -t $@
- @echo -e "Building $@ Complete\n--------------------------------------\n"
-
# Synchronization targets
# Note that the @case statements are required to account for differences between Linux and MacOS binaries
# Specifically, MacOS does not use GNU utils, so syntax is slightly different for things like sed
@@ -213,31 +115,8 @@ sync-minio-server-docs:
@(./sync-minio-server-docs.sh)
sync-minio-version:
- @echo "Retrieving current MinIO version"
- $(eval DEB = $(shell curl -s https://min.io/assets/downloads-minio.json | jq '.Linux."MinIO Server".amd64.DEB.download' | sed "s|linux-amd64|linux-amd64/archive|g"))
- $(eval RPM = $(shell curl -s https://min.io/assets/downloads-minio.json | jq '.Linux."MinIO Server".amd64.RPM.download' | sed "s|linux-amd64|linux-amd64/archive|g"))
- $(eval DEBARM64 = $(shell curl -s https://min.io/assets/downloads-minio.json | jq '.Linux."MinIO Server".arm64.DEB.download' | sed "s|linux-arm64|linux-arm64/archive|g"))
- $(eval RPMARM64 = $(shell curl -s https://min.io/assets/downloads-minio.json | jq '.Linux."MinIO Server".arm64.RPM.download' | sed "s|linux-arm64|linux-arm64/archive|g"))
- $(eval MINIO = $(shell curl --retry 10 -Ls -o /dev/null -w "%{url_effective}" https://github.com/minio/minio/releases/latest | sed "s/https:\/\/github.com\/minio\/minio\/releases\/tag\///"))
-
- @$(eval kname = $(shell uname -s))
-
- @case "${kname}" in \
- "Darwin") \
- sed -i "" "s|MINIOLATEST|${MINIO}|g" source/conf.py; \
- sed -i "" "s|DEBURL|${DEB}|g" source/conf.py; \
- sed -i "" "s|RPMURL|${RPM}|g" source/conf.py; \
- sed -i "" "s|DEBARM64URL|${DEBARM64}|g" source/conf.py; \
- sed -i "" "s|RPMARM64URL|${RPMARM64}|g" source/conf.py; \
- ;; \
- *) \
- sed -i "s|MINIOLATEST|${MINIO}|g" source/conf.py; \
- sed -i "s|DEBURL|${DEB}|g" source/conf.py; \
- sed -i "s|RPMURL|${RPM}|g" source/conf.py; \
- sed -i "s|DEBARM64URL|${DEBARM64}|g" source/conf.py; \
- sed -i "s|RPMARM64URL|${RPMARM64}|g" source/conf.py; \
- ;; \
- esac
+ @echo "Retrieving MinIO latest version and download URLs"
+ @(./sync-minio-version.sh)
sync-sdks:
@(./sync-docs.sh)
@@ -249,7 +128,7 @@ sync-operator-crd:
sync-deps:
# C++ and Rust repos do not have any releases yet.
@echo "Synchronizing all external dependencies"
- @make sync-minio-version
+# @make sync-minio-version
@make sync-kes-version
@make sync-minio-server-docs
diff --git a/build-docs-ci-minimal.sh b/build-docs-ci-minimal.sh
deleted file mode 100755
index 4de1e31d..00000000
--- a/build-docs-ci-minimal.sh
+++ /dev/null
@@ -1,16 +0,0 @@
-#!/bin/bash
-
-set -ex
-
-export PATH=${PATH}:${HOME}/.local/bin
-export GITDIR=HEAD
-
-
-make SYNC_SDK=TRUE linux
-make k8s
-
-mkdir -p minio/kubernetes/upstream
-cp -vr build/${GITDIR}/k8s/html/* ./minio/kubernetes/upstream/
-
-mkdir -p minio/linux
-cp -vr build/${GITDIR}/linux/html/* ./minio/linux/
diff --git a/build-docs-ci.sh b/build-docs-ci.sh
index 6cace285..3ad98b8d 100755
--- a/build-docs-ci.sh
+++ b/build-docs-ci.sh
@@ -3,36 +3,10 @@
set -ex
export PATH=${PATH}:${HOME}/.local/bin
-export GITDIR=main
+export GITDIR=$(git rev-parse --symbolic-full-name --abbrev-ref HEAD)
-make SYNC_SDK=TRUE linux
-make windows macos container k8s openshift eks aks gke
+make SYNC_SDK=TRUE mindocs
-mkdir -p minio/kubernetes/upstream
-cp -vr build/${GITDIR}/k8s/html/* ./minio/kubernetes/upstream/
-
-mkdir -p minio/kubernetes/eks
-cp -vr build/${GITDIR}/eks/html/* ./minio/kubernetes/eks/
-
-
-mkdir -p minio/kubernetes/gke
-cp -vr build/${GITDIR}/gke/html/* ./minio/kubernetes/gke/
-
-mkdir -p minio/kubernetes/aks
-cp -vr build/${GITDIR}/aks/html/* ./minio/kubernetes/aks/
-
-mkdir -p minio/kubernetes/openshift
-cp -vr build/${GITDIR}/openshift/html/* ./minio/kubernetes/openshift/
-
-mkdir -p minio/container
-cp -vr build/${GITDIR}/container/html/* ./minio/container/
-
-mkdir -p minio/linux
-cp -vr build/${GITDIR}/linux/html/* ./minio/linux/
-
-mkdir -p minio/macos
-cp -vr build/${GITDIR}/macos/html/* ./minio/macos/
-
-mkdir -p minio/windows
-cp -vr build/${GITDIR}/windows/html/* ./minio/windows/
+mkdir -p minio/
+cp -vr build/${GITDIR}/mindocs/html/* ./minio/
diff --git a/package-lock.json b/package-lock.json
index 940f8c97..c3928991 100644
--- a/package-lock.json
+++ b/package-lock.json
@@ -1,7 +1,7 @@
{
"name": "minio-documentation",
"version": "1.0.0",
- "lockfileVersion": 2,
+ "lockfileVersion": 3,
"requires": true,
"packages": {
"": {
@@ -685,7 +685,6 @@
"version": "2.1.8",
"resolved": "https://registry.npmjs.org/chokidar/-/chokidar-2.1.8.tgz",
"integrity": "sha512-ZmZUazfOzf0Nve7duiCKD23PFSCs4JPoYyccjUFF3aQkQadqBhfzhjkwBH2mNOG9cTBwhamM37EIsIkZw3nRgg==",
- "deprecated": "Chokidar 2 does not receive security updates since 2019. Upgrade to chokidar 3 with 15x fewer dependencies",
"dev": true,
"dependencies": {
"anymatch": "^2.0.0",
@@ -829,6 +828,7 @@
"version": "0.1.6",
"resolved": "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-0.1.6.tgz",
"integrity": "sha1-qeEss66Nh2cn7u84Q/igiXtcmNY=",
+ "deprecated": "Please upgrade to v0.1.7",
"dev": true,
"dependencies": {
"kind-of": "^3.0.2"
@@ -853,6 +853,7 @@
"version": "0.1.4",
"resolved": "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-0.1.4.tgz",
"integrity": "sha1-C17mSDiOLIYCgueT8YVv7D8wG1Y=",
+ "deprecated": "Please upgrade to v0.1.5",
"dev": true,
"dependencies": {
"kind-of": "^3.0.2"
@@ -1513,6 +1514,7 @@
"version": "0.1.6",
"resolved": "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-0.1.6.tgz",
"integrity": "sha1-qeEss66Nh2cn7u84Q/igiXtcmNY=",
+ "deprecated": "Please upgrade to v0.1.7",
"dev": true,
"dependencies": {
"kind-of": "^3.0.2"
@@ -1537,6 +1539,7 @@
"version": "0.1.4",
"resolved": "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-0.1.4.tgz",
"integrity": "sha1-C17mSDiOLIYCgueT8YVv7D8wG1Y=",
+ "deprecated": "Please upgrade to v0.1.5",
"dev": true,
"dependencies": {
"kind-of": "^3.0.2"
@@ -1959,7 +1962,7 @@
"version": "1.2.13",
"resolved": "https://registry.npmjs.org/fsevents/-/fsevents-1.2.13.tgz",
"integrity": "sha512-oWb1Z6mkHIskLzEJ/XWX0srkpkTQ7vaopMQkyaEIoq0fmtFVxOthb8cCxeT+p3ynTdkk/RZwbgG4brR5BeWECw==",
- "deprecated": "fsevents 1 will break on node v14+ and could be using insecure binaries. Upgrade to fsevents 2.",
+ "deprecated": "Upgrade to fsevents v2 to mitigate potential security issues",
"dev": true,
"hasInstallScript": true,
"optional": true,
@@ -2013,6 +2016,7 @@
"version": "7.2.0",
"resolved": "https://registry.npmjs.org/glob/-/glob-7.2.0.tgz",
"integrity": "sha512-lmLf6gtyrPq8tTjSmrO94wBeQbFR3HbLHbuyD69wuyQkImp2hWqMGB47OX65FBkPffO641IP9jWa1z4ivqG26Q==",
+ "deprecated": "Glob versions prior to v9 are no longer supported",
"dev": true,
"dependencies": {
"fs.realpath": "^1.0.0",
@@ -2518,6 +2522,7 @@
"version": "1.0.6",
"resolved": "https://registry.npmjs.org/inflight/-/inflight-1.0.6.tgz",
"integrity": "sha1-Sb1jMdfQLQwJvJEKEHW6gWW1bfk=",
+ "deprecated": "This module is not supported, and leaks memory. Do not use it. Check out lru-cache if you want a good and tested way to coalesce async requests by a key value, which is much more comprehensive and powerful.",
"dev": true,
"dependencies": {
"once": "^1.3.0",
@@ -2571,6 +2576,7 @@
"version": "1.0.0",
"resolved": "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-1.0.0.tgz",
"integrity": "sha512-m5hnHTkcVsPfqx3AKlyttIPb7J+XykHvJP2B9bZDjlhLIoEq4XoK64Vg7boZlVWYK6LUY94dYPEE7Lh0ZkZKcQ==",
+ "deprecated": "Please upgrade to v1.0.1",
"dev": true,
"dependencies": {
"kind-of": "^6.0.0"
@@ -2628,6 +2634,7 @@
"version": "1.0.0",
"resolved": "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-1.0.0.tgz",
"integrity": "sha512-jbRXy1FmtAoCjQkVmIVYwuuqDFUbaOeDjmed1tOGPrsMhtJA4rD9tkgA0F1qJ3gRFRXcHYVkdeaP50Q5rE/jLQ==",
+ "deprecated": "Please upgrade to v1.0.1",
"dev": true,
"dependencies": {
"kind-of": "^6.0.0"
@@ -3586,6 +3593,7 @@
"version": "0.1.6",
"resolved": "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-0.1.6.tgz",
"integrity": "sha1-qeEss66Nh2cn7u84Q/igiXtcmNY=",
+ "deprecated": "Please upgrade to v0.1.7",
"dev": true,
"dependencies": {
"kind-of": "^3.0.2"
@@ -3598,6 +3606,7 @@
"version": "0.1.4",
"resolved": "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-0.1.4.tgz",
"integrity": "sha1-C17mSDiOLIYCgueT8YVv7D8wG1Y=",
+ "deprecated": "Please upgrade to v0.1.5",
"dev": true,
"dependencies": {
"kind-of": "^3.0.2"
@@ -5016,6 +5025,7 @@
"version": "0.1.6",
"resolved": "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-0.1.6.tgz",
"integrity": "sha1-qeEss66Nh2cn7u84Q/igiXtcmNY=",
+ "deprecated": "Please upgrade to v0.1.7",
"dev": true,
"dependencies": {
"kind-of": "^3.0.2"
@@ -5040,6 +5050,7 @@
"version": "0.1.4",
"resolved": "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-0.1.4.tgz",
"integrity": "sha1-C17mSDiOLIYCgueT8YVv7D8wG1Y=",
+ "deprecated": "Please upgrade to v0.1.5",
"dev": true,
"dependencies": {
"kind-of": "^3.0.2"
@@ -5232,6 +5243,7 @@
"version": "0.1.6",
"resolved": "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-0.1.6.tgz",
"integrity": "sha1-qeEss66Nh2cn7u84Q/igiXtcmNY=",
+ "deprecated": "Please upgrade to v0.1.7",
"dev": true,
"dependencies": {
"kind-of": "^3.0.2"
@@ -5256,6 +5268,7 @@
"version": "0.1.4",
"resolved": "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-0.1.4.tgz",
"integrity": "sha1-C17mSDiOLIYCgueT8YVv7D8wG1Y=",
+ "deprecated": "Please upgrade to v0.1.5",
"dev": true,
"dependencies": {
"kind-of": "^3.0.2"
@@ -6137,5035 +6150,5 @@
"object.assign": "^4.1.0"
}
}
- },
- "dependencies": {
- "accepts": {
- "version": "1.3.7",
- "resolved": "https://registry.npmjs.org/accepts/-/accepts-1.3.7.tgz",
- "integrity": "sha512-Il80Qs2WjYlJIBNzNkK6KYqlVMTbZLXgHx2oT0pU/fjRHyEp+PEfEPY0R3WCwAGVOtauxh1hOxNgIf5bv7dQpA==",
- "dev": true,
- "requires": {
- "mime-types": "~2.1.24",
- "negotiator": "0.6.2"
- }
- },
- "ansi-colors": {
- "version": "1.1.0",
- "resolved": "https://registry.npmjs.org/ansi-colors/-/ansi-colors-1.1.0.tgz",
- "integrity": "sha512-SFKX67auSNoVR38N3L+nvsPjOE0bybKTYbkf5tRvushrAPQ9V75huw0ZxBkKVeRU9kqH3d6HA4xTckbwZ4ixmA==",
- "dev": true,
- "requires": {
- "ansi-wrap": "^0.1.0"
- }
- },
- "ansi-gray": {
- "version": "0.1.1",
- "resolved": "https://registry.npmjs.org/ansi-gray/-/ansi-gray-0.1.1.tgz",
- "integrity": "sha1-KWLPVOyXksSFEKPetSRDaGHvclE=",
- "dev": true,
- "requires": {
- "ansi-wrap": "0.1.0"
- }
- },
- "ansi-regex": {
- "version": "5.0.1",
- "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz",
- "integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==",
- "dev": true
- },
- "ansi-wrap": {
- "version": "0.1.0",
- "resolved": "https://registry.npmjs.org/ansi-wrap/-/ansi-wrap-0.1.0.tgz",
- "integrity": "sha1-qCJQ3bABXponyoLoLqYDu/pF768=",
- "dev": true
- },
- "anymatch": {
- "version": "2.0.0",
- "resolved": "https://registry.npmjs.org/anymatch/-/anymatch-2.0.0.tgz",
- "integrity": "sha512-5teOsQWABXHHBFP9y3skS5P3d/WfWXpv3FUpy+LorMrNYaT9pI4oLMQX7jzQ2KklNpGpWHzdCXTDT2Y3XGlZBw==",
- "dev": true,
- "requires": {
- "micromatch": "^3.1.4",
- "normalize-path": "^2.1.1"
- },
- "dependencies": {
- "braces": {
- "version": "2.3.2",
- "resolved": "https://registry.npmjs.org/braces/-/braces-2.3.2.tgz",
- "integrity": "sha512-aNdbnj9P8PjdXU4ybaWLK2IF3jc/EoDYbC7AazW6to3TRsfXxscC9UXOB5iDiEQrkyIbWp2SLQda4+QAa7nc3w==",
- "dev": true,
- "requires": {
- "arr-flatten": "^1.1.0",
- "array-unique": "^0.3.2",
- "extend-shallow": "^2.0.1",
- "fill-range": "^4.0.0",
- "isobject": "^3.0.1",
- "repeat-element": "^1.1.2",
- "snapdragon": "^0.8.1",
- "snapdragon-node": "^2.0.1",
- "split-string": "^3.0.2",
- "to-regex": "^3.0.1"
- },
- "dependencies": {
- "extend-shallow": {
- "version": "2.0.1",
- "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz",
- "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=",
- "dev": true,
- "requires": {
- "is-extendable": "^0.1.0"
- }
- }
- }
- },
- "fill-range": {
- "version": "4.0.0",
- "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-4.0.0.tgz",
- "integrity": "sha1-1USBHUKPmOsGpj3EAtJAPDKMOPc=",
- "dev": true,
- "requires": {
- "extend-shallow": "^2.0.1",
- "is-number": "^3.0.0",
- "repeat-string": "^1.6.1",
- "to-regex-range": "^2.1.0"
- },
- "dependencies": {
- "extend-shallow": {
- "version": "2.0.1",
- "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz",
- "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=",
- "dev": true,
- "requires": {
- "is-extendable": "^0.1.0"
- }
- }
- }
- },
- "is-extendable": {
- "version": "0.1.1",
- "resolved": "https://registry.npmjs.org/is-extendable/-/is-extendable-0.1.1.tgz",
- "integrity": "sha1-YrEQ4omkcUGOPsNqYX1HLjAd/Ik=",
- "dev": true
- },
- "is-number": {
- "version": "3.0.0",
- "resolved": "https://registry.npmjs.org/is-number/-/is-number-3.0.0.tgz",
- "integrity": "sha1-JP1iAaR4LPUFYcgQJ2r8fRLXEZU=",
- "dev": true,
- "requires": {
- "kind-of": "^3.0.2"
- },
- "dependencies": {
- "kind-of": {
- "version": "3.2.2",
- "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz",
- "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=",
- "dev": true,
- "requires": {
- "is-buffer": "^1.1.5"
- }
- }
- }
- },
- "kind-of": {
- "version": "6.0.3",
- "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-6.0.3.tgz",
- "integrity": "sha512-dcS1ul+9tmeD95T+x28/ehLgd9mENa3LsvDTtzm3vyBEO7RPptvAD+t44WVXaUjTBRcrpFeFlC8WCruUR456hw==",
- "dev": true
- },
- "micromatch": {
- "version": "3.1.10",
- "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-3.1.10.tgz",
- "integrity": "sha512-MWikgl9n9M3w+bpsY3He8L+w9eF9338xRl8IAO5viDizwSzziFEyUzo2xrrloB64ADbTf8uA8vRqqttDTOmccg==",
- "dev": true,
- "requires": {
- "arr-diff": "^4.0.0",
- "array-unique": "^0.3.2",
- "braces": "^2.3.1",
- "define-property": "^2.0.2",
- "extend-shallow": "^3.0.2",
- "extglob": "^2.0.4",
- "fragment-cache": "^0.2.1",
- "kind-of": "^6.0.2",
- "nanomatch": "^1.2.9",
- "object.pick": "^1.3.0",
- "regex-not": "^1.0.0",
- "snapdragon": "^0.8.1",
- "to-regex": "^3.0.2"
- }
- },
- "normalize-path": {
- "version": "2.1.1",
- "resolved": "https://registry.npmjs.org/normalize-path/-/normalize-path-2.1.1.tgz",
- "integrity": "sha1-GrKLVW4Zg2Oowab35vogE3/mrtk=",
- "dev": true,
- "requires": {
- "remove-trailing-separator": "^1.0.1"
- }
- },
- "to-regex-range": {
- "version": "2.1.1",
- "resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-2.1.1.tgz",
- "integrity": "sha1-fIDBe53+vlmeJzZ+DU3VWQFB2zg=",
- "dev": true,
- "requires": {
- "is-number": "^3.0.0",
- "repeat-string": "^1.6.1"
- }
- }
- }
- },
- "append-buffer": {
- "version": "1.0.2",
- "resolved": "https://registry.npmjs.org/append-buffer/-/append-buffer-1.0.2.tgz",
- "integrity": "sha1-2CIM9GYIFSXv6lBhTz3mUU36WPE=",
- "dev": true,
- "requires": {
- "buffer-equal": "^1.0.0"
- }
- },
- "archy": {
- "version": "1.0.0",
- "resolved": "https://registry.npmjs.org/archy/-/archy-1.0.0.tgz",
- "integrity": "sha1-+cjBN1fMHde8N5rHeyxipcKGjEA=",
- "dev": true
- },
- "arr-diff": {
- "version": "4.0.0",
- "resolved": "https://registry.npmjs.org/arr-diff/-/arr-diff-4.0.0.tgz",
- "integrity": "sha1-1kYQdP6/7HHn4VI1dhoyml3HxSA=",
- "dev": true
- },
- "arr-filter": {
- "version": "1.1.2",
- "resolved": "https://registry.npmjs.org/arr-filter/-/arr-filter-1.1.2.tgz",
- "integrity": "sha1-Q/3d0JHo7xGqTEXZzcGOLf8XEe4=",
- "dev": true,
- "requires": {
- "make-iterator": "^1.0.0"
- }
- },
- "arr-flatten": {
- "version": "1.1.0",
- "resolved": "https://registry.npmjs.org/arr-flatten/-/arr-flatten-1.1.0.tgz",
- "integrity": "sha512-L3hKV5R/p5o81R7O02IGnwpDmkp6E982XhtbuwSe3O4qOtMMMtodicASA1Cny2U+aCXcNpml+m4dPsvsJ3jatg==",
- "dev": true
- },
- "arr-map": {
- "version": "2.0.2",
- "resolved": "https://registry.npmjs.org/arr-map/-/arr-map-2.0.2.tgz",
- "integrity": "sha1-Onc0X/wc814qkYJWAfnljy4kysQ=",
- "dev": true,
- "requires": {
- "make-iterator": "^1.0.0"
- }
- },
- "arr-union": {
- "version": "3.1.0",
- "resolved": "https://registry.npmjs.org/arr-union/-/arr-union-3.1.0.tgz",
- "integrity": "sha1-45sJrqne+Gao8gbiiK9jkZuuOcQ=",
- "dev": true
- },
- "array-each": {
- "version": "1.0.1",
- "resolved": "https://registry.npmjs.org/array-each/-/array-each-1.0.1.tgz",
- "integrity": "sha1-p5SvDAWrF1KEbudTofIRoFugxE8=",
- "dev": true
- },
- "array-initial": {
- "version": "1.1.0",
- "resolved": "https://registry.npmjs.org/array-initial/-/array-initial-1.1.0.tgz",
- "integrity": "sha1-L6dLJnOTccOUe9enrcc74zSz15U=",
- "dev": true,
- "requires": {
- "array-slice": "^1.0.0",
- "is-number": "^4.0.0"
- },
- "dependencies": {
- "is-number": {
- "version": "4.0.0",
- "resolved": "https://registry.npmjs.org/is-number/-/is-number-4.0.0.tgz",
- "integrity": "sha512-rSklcAIlf1OmFdyAqbnWTLVelsQ58uvZ66S/ZyawjWqIviTWCjg2PzVGw8WUA+nNuPTqb4wgA+NszrJ+08LlgQ==",
- "dev": true
- }
- }
- },
- "array-last": {
- "version": "1.3.0",
- "resolved": "https://registry.npmjs.org/array-last/-/array-last-1.3.0.tgz",
- "integrity": "sha512-eOCut5rXlI6aCOS7Z7kCplKRKyiFQ6dHFBem4PwlwKeNFk2/XxTrhRh5T9PyaEWGy/NHTZWbY+nsZlNFJu9rYg==",
- "dev": true,
- "requires": {
- "is-number": "^4.0.0"
- },
- "dependencies": {
- "is-number": {
- "version": "4.0.0",
- "resolved": "https://registry.npmjs.org/is-number/-/is-number-4.0.0.tgz",
- "integrity": "sha512-rSklcAIlf1OmFdyAqbnWTLVelsQ58uvZ66S/ZyawjWqIviTWCjg2PzVGw8WUA+nNuPTqb4wgA+NszrJ+08LlgQ==",
- "dev": true
- }
- }
- },
- "array-slice": {
- "version": "1.1.0",
- "resolved": "https://registry.npmjs.org/array-slice/-/array-slice-1.1.0.tgz",
- "integrity": "sha512-B1qMD3RBP7O8o0H2KbrXDyB0IccejMF15+87Lvlor12ONPRHP6gTjXMNkt/d3ZuOGbAe66hFmaCfECI24Ufp6w==",
- "dev": true
- },
- "array-sort": {
- "version": "1.0.0",
- "resolved": "https://registry.npmjs.org/array-sort/-/array-sort-1.0.0.tgz",
- "integrity": "sha512-ihLeJkonmdiAsD7vpgN3CRcx2J2S0TiYW+IS/5zHBI7mKUq3ySvBdzzBfD236ubDBQFiiyG3SWCPc+msQ9KoYg==",
- "dev": true,
- "requires": {
- "default-compare": "^1.0.0",
- "get-value": "^2.0.6",
- "kind-of": "^5.0.2"
- }
- },
- "array-unique": {
- "version": "0.3.2",
- "resolved": "https://registry.npmjs.org/array-unique/-/array-unique-0.3.2.tgz",
- "integrity": "sha1-qJS3XUvE9s1nnvMkSp/Y9Gri1Cg=",
- "dev": true
- },
- "assign-symbols": {
- "version": "1.0.0",
- "resolved": "https://registry.npmjs.org/assign-symbols/-/assign-symbols-1.0.0.tgz",
- "integrity": "sha1-WWZ/QfrdTyDMvCu5a41Pf3jsA2c=",
- "dev": true
- },
- "async-done": {
- "version": "1.3.2",
- "resolved": "https://registry.npmjs.org/async-done/-/async-done-1.3.2.tgz",
- "integrity": "sha512-uYkTP8dw2og1tu1nmza1n1CMW0qb8gWWlwqMmLb7MhBVs4BXrFziT6HXUd+/RlRA/i4H9AkofYloUbs1fwMqlw==",
- "dev": true,
- "requires": {
- "end-of-stream": "^1.1.0",
- "once": "^1.3.2",
- "process-nextick-args": "^2.0.0",
- "stream-exhaust": "^1.0.1"
- }
- },
- "async-each": {
- "version": "1.0.3",
- "resolved": "https://registry.npmjs.org/async-each/-/async-each-1.0.3.tgz",
- "integrity": "sha512-z/WhQ5FPySLdvREByI2vZiTWwCnF0moMJ1hK9YQwDTHKh6I7/uSckMetoRGb5UBZPC1z0jlw+n/XCgjeH7y1AQ==",
- "dev": true
- },
- "async-settle": {
- "version": "1.0.0",
- "resolved": "https://registry.npmjs.org/async-settle/-/async-settle-1.0.0.tgz",
- "integrity": "sha1-HQqRS7Aldb7IqPOnTlCA9yssDGs=",
- "dev": true,
- "requires": {
- "async-done": "^1.2.2"
- }
- },
- "atob": {
- "version": "2.1.2",
- "resolved": "https://registry.npmjs.org/atob/-/atob-2.1.2.tgz",
- "integrity": "sha512-Wm6ukoaOGJi/73p/cl2GvLjTI5JM1k/O14isD73YML8StrH/7/lRFgmg8nICZgD3bZZvjwCGxtMOD3wWNAu8cg==",
- "dev": true
- },
- "autoprefixer": {
- "version": "10.4.2",
- "resolved": "https://registry.npmjs.org/autoprefixer/-/autoprefixer-10.4.2.tgz",
- "integrity": "sha512-9fOPpHKuDW1w/0EKfRmVnxTDt8166MAnLI3mgZ1JCnhNtYWxcJ6Ud5CO/AVOZi/AvFa8DY9RTy3h3+tFBlrrdQ==",
- "dev": true,
- "requires": {
- "browserslist": "^4.19.1",
- "caniuse-lite": "^1.0.30001297",
- "fraction.js": "^4.1.2",
- "normalize-range": "^0.1.2",
- "picocolors": "^1.0.0",
- "postcss-value-parser": "^4.2.0"
- }
- },
- "bach": {
- "version": "1.2.0",
- "resolved": "https://registry.npmjs.org/bach/-/bach-1.2.0.tgz",
- "integrity": "sha1-Szzpa/JxNPeaG0FKUcFONMO9mIA=",
- "dev": true,
- "requires": {
- "arr-filter": "^1.1.1",
- "arr-flatten": "^1.0.1",
- "arr-map": "^2.0.0",
- "array-each": "^1.0.0",
- "array-initial": "^1.0.0",
- "array-last": "^1.1.1",
- "async-done": "^1.2.2",
- "async-settle": "^1.0.0",
- "now-and-later": "^2.0.0"
- }
- },
- "balanced-match": {
- "version": "1.0.2",
- "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.2.tgz",
- "integrity": "sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==",
- "dev": true
- },
- "base": {
- "version": "0.11.2",
- "resolved": "https://registry.npmjs.org/base/-/base-0.11.2.tgz",
- "integrity": "sha512-5T6P4xPgpp0YDFvSWwEZ4NoE3aM4QBQXDzmVbraCkFj8zHM+mba8SyqB5DbZWyR7mYHo6Y7BdQo3MoA4m0TeQg==",
- "dev": true,
- "requires": {
- "cache-base": "^1.0.1",
- "class-utils": "^0.3.5",
- "component-emitter": "^1.2.1",
- "define-property": "^1.0.0",
- "isobject": "^3.0.1",
- "mixin-deep": "^1.2.0",
- "pascalcase": "^0.1.1"
- },
- "dependencies": {
- "define-property": {
- "version": "1.0.0",
- "resolved": "https://registry.npmjs.org/define-property/-/define-property-1.0.0.tgz",
- "integrity": "sha1-dp66rz9KY6rTr56NMEybvnm/sOY=",
- "dev": true,
- "requires": {
- "is-descriptor": "^1.0.0"
- }
- }
- }
- },
- "batch": {
- "version": "0.6.1",
- "resolved": "https://registry.npmjs.org/batch/-/batch-0.6.1.tgz",
- "integrity": "sha1-3DQxT05nkxgJP8dgJyUl+UvyXBY=",
- "dev": true
- },
- "binary-extensions": {
- "version": "1.13.1",
- "resolved": "https://registry.npmjs.org/binary-extensions/-/binary-extensions-1.13.1.tgz",
- "integrity": "sha512-Un7MIEDdUC5gNpcGDV97op1Ywk748MpHcFTHoYs6qnj1Z3j7I53VG3nwZhKzoBZmbdRNnb6WRdFlwl7tSDuZGw==",
- "dev": true
- },
- "bindings": {
- "version": "1.5.0",
- "resolved": "https://registry.npmjs.org/bindings/-/bindings-1.5.0.tgz",
- "integrity": "sha512-p2q/t/mhvuOj/UeLlV6566GD/guowlr0hHxClI0W9m7MWYkL1F0hLo+0Aexs9HSPCtR1SXQ0TD3MMKrXZajbiQ==",
- "dev": true,
- "optional": true,
- "requires": {
- "file-uri-to-path": "1.0.0"
- }
- },
- "body": {
- "version": "5.1.0",
- "resolved": "https://registry.npmjs.org/body/-/body-5.1.0.tgz",
- "integrity": "sha1-5LoM5BCkaTYyM2dgnstOZVMSUGk=",
- "dev": true,
- "requires": {
- "continuable-cache": "^0.3.1",
- "error": "^7.0.0",
- "raw-body": "~1.1.0",
- "safe-json-parse": "~1.0.1"
- }
- },
- "brace-expansion": {
- "version": "1.1.11",
- "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz",
- "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==",
- "dev": true,
- "requires": {
- "balanced-match": "^1.0.0",
- "concat-map": "0.0.1"
- }
- },
- "braces": {
- "version": "3.0.2",
- "resolved": "https://registry.npmjs.org/braces/-/braces-3.0.2.tgz",
- "integrity": "sha512-b8um+L1RzM3WDSzvhm6gIz1yfTbBt6YTlcEKAvsmqCZZFw46z626lVj9j1yEPW33H5H+lBQpZMP1k8l+78Ha0A==",
- "dev": true,
- "requires": {
- "fill-range": "^7.0.1"
- }
- },
- "browserslist": {
- "version": "4.19.1",
- "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-4.19.1.tgz",
- "integrity": "sha512-u2tbbG5PdKRTUoctO3NBD8FQ5HdPh1ZXPHzp1rwaa5jTc+RV9/+RlWiAIKmjRPQF+xbGM9Kklj5bZQFa2s/38A==",
- "dev": true,
- "requires": {
- "caniuse-lite": "^1.0.30001286",
- "electron-to-chromium": "^1.4.17",
- "escalade": "^3.1.1",
- "node-releases": "^2.0.1",
- "picocolors": "^1.0.0"
- }
- },
- "buffer-equal": {
- "version": "1.0.0",
- "resolved": "https://registry.npmjs.org/buffer-equal/-/buffer-equal-1.0.0.tgz",
- "integrity": "sha1-WWFrSYME1Var1GaWayLu2j7KX74=",
- "dev": true
- },
- "buffer-from": {
- "version": "1.1.2",
- "resolved": "https://registry.npmjs.org/buffer-from/-/buffer-from-1.1.2.tgz",
- "integrity": "sha512-E+XQCRwSbaaiChtv6k6Dwgc+bx+Bs6vuKJHHl5kox/BaKbhiXzqQOwK4cO22yElGp2OCmjwVhT3HmxgyPGnJfQ==",
- "dev": true
- },
- "bytes": {
- "version": "1.0.0",
- "resolved": "https://registry.npmjs.org/bytes/-/bytes-1.0.0.tgz",
- "integrity": "sha1-NWnt6Lo0MV+rmcPpLLBMciDeH6g=",
- "dev": true
- },
- "cache-base": {
- "version": "1.0.1",
- "resolved": "https://registry.npmjs.org/cache-base/-/cache-base-1.0.1.tgz",
- "integrity": "sha512-AKcdTnFSWATd5/GCPRxr2ChwIJ85CeyrEyjRHlKxQ56d4XJMGym0uAiKn0xbLOGOl3+yRpOTi484dVCEc5AUzQ==",
- "dev": true,
- "requires": {
- "collection-visit": "^1.0.0",
- "component-emitter": "^1.2.1",
- "get-value": "^2.0.6",
- "has-value": "^1.0.0",
- "isobject": "^3.0.1",
- "set-value": "^2.0.0",
- "to-object-path": "^0.3.0",
- "union-value": "^1.0.0",
- "unset-value": "^1.0.0"
- }
- },
- "call-bind": {
- "version": "1.0.2",
- "resolved": "https://registry.npmjs.org/call-bind/-/call-bind-1.0.2.tgz",
- "integrity": "sha512-7O+FbCihrB5WGbFYesctwmTKae6rOiIzmz1icreWJ+0aA7LJfuqhEso2T9ncpcFtzMQtzXf2QGGueWJGTYsqrA==",
- "dev": true,
- "requires": {
- "function-bind": "^1.1.1",
- "get-intrinsic": "^1.0.2"
- }
- },
- "camelcase": {
- "version": "3.0.0",
- "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-3.0.0.tgz",
- "integrity": "sha1-MvxLn82vhF/N9+c7uXysImHwqwo=",
- "dev": true
- },
- "caniuse-lite": {
- "version": "1.0.30001304",
- "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001304.tgz",
- "integrity": "sha512-bdsfZd6K6ap87AGqSHJP/s1V+U6Z5lyrcbBu3ovbCCf8cSYpwTtGrCBObMpJqwxfTbLW6YTIdbb1jEeTelcpYQ==",
- "dev": true
- },
- "chokidar": {
- "version": "2.1.8",
- "resolved": "https://registry.npmjs.org/chokidar/-/chokidar-2.1.8.tgz",
- "integrity": "sha512-ZmZUazfOzf0Nve7duiCKD23PFSCs4JPoYyccjUFF3aQkQadqBhfzhjkwBH2mNOG9cTBwhamM37EIsIkZw3nRgg==",
- "dev": true,
- "requires": {
- "anymatch": "^2.0.0",
- "async-each": "^1.0.1",
- "braces": "^2.3.2",
- "fsevents": "^1.2.7",
- "glob-parent": "^3.1.0",
- "inherits": "^2.0.3",
- "is-binary-path": "^1.0.0",
- "is-glob": "^4.0.0",
- "normalize-path": "^3.0.0",
- "path-is-absolute": "^1.0.0",
- "readdirp": "^2.2.1",
- "upath": "^1.1.1"
- },
- "dependencies": {
- "braces": {
- "version": "2.3.2",
- "resolved": "https://registry.npmjs.org/braces/-/braces-2.3.2.tgz",
- "integrity": "sha512-aNdbnj9P8PjdXU4ybaWLK2IF3jc/EoDYbC7AazW6to3TRsfXxscC9UXOB5iDiEQrkyIbWp2SLQda4+QAa7nc3w==",
- "dev": true,
- "requires": {
- "arr-flatten": "^1.1.0",
- "array-unique": "^0.3.2",
- "extend-shallow": "^2.0.1",
- "fill-range": "^4.0.0",
- "isobject": "^3.0.1",
- "repeat-element": "^1.1.2",
- "snapdragon": "^0.8.1",
- "snapdragon-node": "^2.0.1",
- "split-string": "^3.0.2",
- "to-regex": "^3.0.1"
- }
- },
- "extend-shallow": {
- "version": "2.0.1",
- "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz",
- "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=",
- "dev": true,
- "requires": {
- "is-extendable": "^0.1.0"
- }
- },
- "fill-range": {
- "version": "4.0.0",
- "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-4.0.0.tgz",
- "integrity": "sha1-1USBHUKPmOsGpj3EAtJAPDKMOPc=",
- "dev": true,
- "requires": {
- "extend-shallow": "^2.0.1",
- "is-number": "^3.0.0",
- "repeat-string": "^1.6.1",
- "to-regex-range": "^2.1.0"
- }
- },
- "is-extendable": {
- "version": "0.1.1",
- "resolved": "https://registry.npmjs.org/is-extendable/-/is-extendable-0.1.1.tgz",
- "integrity": "sha1-YrEQ4omkcUGOPsNqYX1HLjAd/Ik=",
- "dev": true
- },
- "is-number": {
- "version": "3.0.0",
- "resolved": "https://registry.npmjs.org/is-number/-/is-number-3.0.0.tgz",
- "integrity": "sha1-JP1iAaR4LPUFYcgQJ2r8fRLXEZU=",
- "dev": true,
- "requires": {
- "kind-of": "^3.0.2"
- }
- },
- "kind-of": {
- "version": "3.2.2",
- "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz",
- "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=",
- "dev": true,
- "requires": {
- "is-buffer": "^1.1.5"
- }
- },
- "to-regex-range": {
- "version": "2.1.1",
- "resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-2.1.1.tgz",
- "integrity": "sha1-fIDBe53+vlmeJzZ+DU3VWQFB2zg=",
- "dev": true,
- "requires": {
- "is-number": "^3.0.0",
- "repeat-string": "^1.6.1"
- }
- }
- }
- },
- "class-utils": {
- "version": "0.3.6",
- "resolved": "https://registry.npmjs.org/class-utils/-/class-utils-0.3.6.tgz",
- "integrity": "sha512-qOhPa/Fj7s6TY8H8esGu5QNpMMQxz79h+urzrNYN6mn+9BnxlDGf5QZ+XeCDsxSjPqsSR56XOZOJmpeurnLMeg==",
- "dev": true,
- "requires": {
- "arr-union": "^3.1.0",
- "define-property": "^0.2.5",
- "isobject": "^3.0.0",
- "static-extend": "^0.1.1"
- },
- "dependencies": {
- "define-property": {
- "version": "0.2.5",
- "resolved": "https://registry.npmjs.org/define-property/-/define-property-0.2.5.tgz",
- "integrity": "sha1-w1se+RjsPJkPmlvFe+BKrOxcgRY=",
- "dev": true,
- "requires": {
- "is-descriptor": "^0.1.0"
- }
- },
- "is-accessor-descriptor": {
- "version": "0.1.6",
- "resolved": "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-0.1.6.tgz",
- "integrity": "sha1-qeEss66Nh2cn7u84Q/igiXtcmNY=",
- "dev": true,
- "requires": {
- "kind-of": "^3.0.2"
- },
- "dependencies": {
- "kind-of": {
- "version": "3.2.2",
- "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz",
- "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=",
- "dev": true,
- "requires": {
- "is-buffer": "^1.1.5"
- }
- }
- }
- },
- "is-data-descriptor": {
- "version": "0.1.4",
- "resolved": "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-0.1.4.tgz",
- "integrity": "sha1-C17mSDiOLIYCgueT8YVv7D8wG1Y=",
- "dev": true,
- "requires": {
- "kind-of": "^3.0.2"
- },
- "dependencies": {
- "kind-of": {
- "version": "3.2.2",
- "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz",
- "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=",
- "dev": true,
- "requires": {
- "is-buffer": "^1.1.5"
- }
- }
- }
- },
- "is-descriptor": {
- "version": "0.1.6",
- "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-0.1.6.tgz",
- "integrity": "sha512-avDYr0SB3DwO9zsMov0gKCESFYqCnE4hq/4z3TdUlukEy5t9C0YRq7HLrsN52NAcqXKaepeCD0n+B0arnVG3Hg==",
- "dev": true,
- "requires": {
- "is-accessor-descriptor": "^0.1.6",
- "is-data-descriptor": "^0.1.4",
- "kind-of": "^5.0.0"
- }
- }
- }
- },
- "clean-css": {
- "version": "4.2.3",
- "resolved": "https://registry.npmjs.org/clean-css/-/clean-css-4.2.3.tgz",
- "integrity": "sha512-VcMWDN54ZN/DS+g58HYL5/n4Zrqe8vHJpGA8KdgUXFU4fuP/aHNw8eld9SyEIyabIMJX/0RaY/fplOo5hYLSFA==",
- "dev": true,
- "requires": {
- "source-map": "~0.6.0"
- },
- "dependencies": {
- "source-map": {
- "version": "0.6.1",
- "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz",
- "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==",
- "dev": true
- }
- }
- },
- "cliui": {
- "version": "3.2.0",
- "resolved": "https://registry.npmjs.org/cliui/-/cliui-3.2.0.tgz",
- "integrity": "sha1-EgYBU3qRbSmUD5NNo7SNWFo5IT0=",
- "dev": true,
- "requires": {
- "string-width": "^1.0.1",
- "strip-ansi": "^3.0.1",
- "wrap-ansi": "^2.0.0"
- },
- "dependencies": {
- "ansi-regex": {
- "version": "2.1.1",
- "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-2.1.1.tgz",
- "integrity": "sha1-w7M6te42DYbg5ijwRorn7yfWVN8=",
- "dev": true
- },
- "strip-ansi": {
- "version": "3.0.1",
- "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-3.0.1.tgz",
- "integrity": "sha1-ajhfuIU9lS1f8F0Oiq+UJ43GPc8=",
- "dev": true,
- "requires": {
- "ansi-regex": "^2.0.0"
- }
- }
- }
- },
- "clone": {
- "version": "2.1.2",
- "resolved": "https://registry.npmjs.org/clone/-/clone-2.1.2.tgz",
- "integrity": "sha1-G39Ln1kfHo+DZwQBYANFoCiHQ18=",
- "dev": true
- },
- "clone-buffer": {
- "version": "1.0.0",
- "resolved": "https://registry.npmjs.org/clone-buffer/-/clone-buffer-1.0.0.tgz",
- "integrity": "sha1-4+JbIHrE5wGvch4staFnksrD3Fg=",
- "dev": true
- },
- "clone-stats": {
- "version": "1.0.0",
- "resolved": "https://registry.npmjs.org/clone-stats/-/clone-stats-1.0.0.tgz",
- "integrity": "sha1-s3gt/4u1R04Yuba/D9/ngvh3doA=",
- "dev": true
- },
- "cloneable-readable": {
- "version": "1.1.3",
- "resolved": "https://registry.npmjs.org/cloneable-readable/-/cloneable-readable-1.1.3.tgz",
- "integrity": "sha512-2EF8zTQOxYq70Y4XKtorQupqF0m49MBz2/yf5Bj+MHjvpG3Hy7sImifnqD6UA+TKYxeSV+u6qqQPawN5UvnpKQ==",
- "dev": true,
- "requires": {
- "inherits": "^2.0.1",
- "process-nextick-args": "^2.0.0",
- "readable-stream": "^2.3.5"
- },
- "dependencies": {
- "readable-stream": {
- "version": "2.3.7",
- "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.7.tgz",
- "integrity": "sha512-Ebho8K4jIbHAxnuxi7o42OrZgF/ZTNcsZj6nRKyUmkhLFq8CHItp/fy6hQZuZmP/n3yZ9VBUbp4zz/mX8hmYPw==",
- "dev": true,
- "requires": {
- "core-util-is": "~1.0.0",
- "inherits": "~2.0.3",
- "isarray": "~1.0.0",
- "process-nextick-args": "~2.0.0",
- "safe-buffer": "~5.1.1",
- "string_decoder": "~1.1.1",
- "util-deprecate": "~1.0.1"
- }
- },
- "safe-buffer": {
- "version": "5.1.2",
- "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz",
- "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==",
- "dev": true
- },
- "string_decoder": {
- "version": "1.1.1",
- "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz",
- "integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==",
- "dev": true,
- "requires": {
- "safe-buffer": "~5.1.0"
- }
- }
- }
- },
- "code-point-at": {
- "version": "1.1.0",
- "resolved": "https://registry.npmjs.org/code-point-at/-/code-point-at-1.1.0.tgz",
- "integrity": "sha1-DQcLTQQ6W+ozovGkDi7bPZpMz3c=",
- "dev": true
- },
- "collection-map": {
- "version": "1.0.0",
- "resolved": "https://registry.npmjs.org/collection-map/-/collection-map-1.0.0.tgz",
- "integrity": "sha1-rqDwb40mx4DCt1SUOFVEsiVa8Yw=",
- "dev": true,
- "requires": {
- "arr-map": "^2.0.2",
- "for-own": "^1.0.0",
- "make-iterator": "^1.0.0"
- }
- },
- "collection-visit": {
- "version": "1.0.0",
- "resolved": "https://registry.npmjs.org/collection-visit/-/collection-visit-1.0.0.tgz",
- "integrity": "sha1-S8A3PBZLwykbTTaMgpzxqApZ3KA=",
- "dev": true,
- "requires": {
- "map-visit": "^1.0.0",
- "object-visit": "^1.0.0"
- }
- },
- "color-support": {
- "version": "1.1.3",
- "resolved": "https://registry.npmjs.org/color-support/-/color-support-1.1.3.tgz",
- "integrity": "sha512-qiBjkpbMLO/HL68y+lh4q0/O1MZFj2RX6X/KmMa3+gJD3z+WwI1ZzDHysvqHGS3mP6mznPckpXmw1nI9cJjyRg==",
- "dev": true
- },
- "commander": {
- "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
- },
- "component-emitter": {
- "version": "1.3.0",
- "resolved": "https://registry.npmjs.org/component-emitter/-/component-emitter-1.3.0.tgz",
- "integrity": "sha512-Rd3se6QB+sO1TwqZjscQrurpEPIfO0/yYnSin6Q/rD3mOutHvUrCAhJub3r90uNb+SESBuE0QYoB90YdfatsRg==",
- "dev": true
- },
- "concat-map": {
- "version": "0.0.1",
- "resolved": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz",
- "integrity": "sha1-2Klr13/Wjfd5OnMDajug1UBdR3s=",
- "dev": true
- },
- "concat-stream": {
- "version": "1.6.2",
- "resolved": "https://registry.npmjs.org/concat-stream/-/concat-stream-1.6.2.tgz",
- "integrity": "sha512-27HBghJxjiZtIk3Ycvn/4kbJk/1uZuJFfuPEns6LaEvpvG1f0hTea8lilrouyo9mVc2GWdcEZ8OLoGmSADlrCw==",
- "dev": true,
- "requires": {
- "buffer-from": "^1.0.0",
- "inherits": "^2.0.3",
- "readable-stream": "^2.2.2",
- "typedarray": "^0.0.6"
- },
- "dependencies": {
- "readable-stream": {
- "version": "2.3.7",
- "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.7.tgz",
- "integrity": "sha512-Ebho8K4jIbHAxnuxi7o42OrZgF/ZTNcsZj6nRKyUmkhLFq8CHItp/fy6hQZuZmP/n3yZ9VBUbp4zz/mX8hmYPw==",
- "dev": true,
- "requires": {
- "core-util-is": "~1.0.0",
- "inherits": "~2.0.3",
- "isarray": "~1.0.0",
- "process-nextick-args": "~2.0.0",
- "safe-buffer": "~5.1.1",
- "string_decoder": "~1.1.1",
- "util-deprecate": "~1.0.1"
- }
- },
- "safe-buffer": {
- "version": "5.1.2",
- "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz",
- "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==",
- "dev": true
- },
- "string_decoder": {
- "version": "1.1.1",
- "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz",
- "integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==",
- "dev": true,
- "requires": {
- "safe-buffer": "~5.1.0"
- }
- }
- }
- },
- "connect": {
- "version": "3.7.0",
- "resolved": "https://registry.npmjs.org/connect/-/connect-3.7.0.tgz",
- "integrity": "sha512-ZqRXc+tZukToSNmh5C2iWMSoV3X1YUcPbqEM4DkEG5tNQXrQUZCNVGGv3IuicnkMtPfGf3Xtp8WCXs295iQ1pQ==",
- "dev": true,
- "requires": {
- "debug": "2.6.9",
- "finalhandler": "1.1.2",
- "parseurl": "~1.3.3",
- "utils-merge": "1.0.1"
- }
- },
- "connect-livereload": {
- "version": "0.6.1",
- "resolved": "https://registry.npmjs.org/connect-livereload/-/connect-livereload-0.6.1.tgz",
- "integrity": "sha512-3R0kMOdL7CjJpU66fzAkCe6HNtd3AavCS4m+uW4KtJjrdGPT0SQEZieAYd+cm+lJoBznNQ4lqipYWkhBMgk00g==",
- "dev": true
- },
- "continuable-cache": {
- "version": "0.3.1",
- "resolved": "https://registry.npmjs.org/continuable-cache/-/continuable-cache-0.3.1.tgz",
- "integrity": "sha1-vXJ6f67XfnH/OYWskzUakSczrQ8=",
- "dev": true
- },
- "convert-source-map": {
- "version": "1.8.0",
- "resolved": "https://registry.npmjs.org/convert-source-map/-/convert-source-map-1.8.0.tgz",
- "integrity": "sha512-+OQdjP49zViI/6i7nIJpA8rAl4sV/JdPfU9nZs3VqOwGIgizICvuN2ru6fMd+4llL0tar18UYJXfZ/TWtmhUjA==",
- "dev": true,
- "requires": {
- "safe-buffer": "~5.1.1"
- },
- "dependencies": {
- "safe-buffer": {
- "version": "5.1.2",
- "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz",
- "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==",
- "dev": true
- }
- }
- },
- "copy-descriptor": {
- "version": "0.1.1",
- "resolved": "https://registry.npmjs.org/copy-descriptor/-/copy-descriptor-0.1.1.tgz",
- "integrity": "sha1-Z29us8OZl8LuGsOpJP1hJHSPV40=",
- "dev": true
- },
- "copy-props": {
- "version": "2.0.5",
- "resolved": "https://registry.npmjs.org/copy-props/-/copy-props-2.0.5.tgz",
- "integrity": "sha512-XBlx8HSqrT0ObQwmSzM7WE5k8FxTV75h1DX1Z3n6NhQ/UYYAvInWYmG06vFt7hQZArE2fuO62aihiWIVQwh1sw==",
- "dev": true,
- "requires": {
- "each-props": "^1.3.2",
- "is-plain-object": "^5.0.0"
- },
- "dependencies": {
- "is-plain-object": {
- "version": "5.0.0",
- "resolved": "https://registry.npmjs.org/is-plain-object/-/is-plain-object-5.0.0.tgz",
- "integrity": "sha512-VRSzKkbMm5jMDoKLbltAkFQ5Qr7VDiTFGXxYFXXowVj387GeGNOCsOH6Msy00SGZ3Fp84b1Naa1psqgcCIEP5Q==",
- "dev": true
- }
- }
- },
- "core-util-is": {
- "version": "1.0.3",
- "resolved": "https://registry.npmjs.org/core-util-is/-/core-util-is-1.0.3.tgz",
- "integrity": "sha512-ZQBvi1DcpJ4GDqanjucZ2Hj3wEO5pZDS89BWbkcrvdxksJorwUDDZamX9ldFkp9aw2lmBDLgkObEA4DWNJ9FYQ==",
- "dev": true
- },
- "d": {
- "version": "1.0.1",
- "resolved": "https://registry.npmjs.org/d/-/d-1.0.1.tgz",
- "integrity": "sha512-m62ShEObQ39CfralilEQRjH6oAMtNCV1xJyEx5LpRYUVN+EviphDgUc/F3hnYbADmkiNs67Y+3ylmlG7Lnu+FA==",
- "dev": true,
- "requires": {
- "es5-ext": "^0.10.50",
- "type": "^1.0.1"
- }
- },
- "debug": {
- "version": "2.6.9",
- "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz",
- "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==",
- "dev": true,
- "requires": {
- "ms": "2.0.0"
- }
- },
- "decamelize": {
- "version": "1.2.0",
- "resolved": "https://registry.npmjs.org/decamelize/-/decamelize-1.2.0.tgz",
- "integrity": "sha1-9lNNFRSCabIDUue+4m9QH5oZEpA=",
- "dev": true
- },
- "decode-uri-component": {
- "version": "0.2.0",
- "resolved": "https://registry.npmjs.org/decode-uri-component/-/decode-uri-component-0.2.0.tgz",
- "integrity": "sha1-6zkTMzRYd1y4TNGh+uBiEGu4dUU=",
- "dev": true
- },
- "default-compare": {
- "version": "1.0.0",
- "resolved": "https://registry.npmjs.org/default-compare/-/default-compare-1.0.0.tgz",
- "integrity": "sha512-QWfXlM0EkAbqOCbD/6HjdwT19j7WCkMyiRhWilc4H9/5h/RzTF9gv5LYh1+CmDV5d1rki6KAWLtQale0xt20eQ==",
- "dev": true,
- "requires": {
- "kind-of": "^5.0.2"
- }
- },
- "default-resolution": {
- "version": "2.0.0",
- "resolved": "https://registry.npmjs.org/default-resolution/-/default-resolution-2.0.0.tgz",
- "integrity": "sha1-vLgrqnKtebQmp2cy8aga1t8m1oQ=",
- "dev": true
- },
- "define-properties": {
- "version": "1.1.3",
- "resolved": "https://registry.npmjs.org/define-properties/-/define-properties-1.1.3.tgz",
- "integrity": "sha512-3MqfYKj2lLzdMSf8ZIZE/V+Zuy+BgD6f164e8K2w7dgnpKArBDerGYpM46IYYcjnkdPNMjPk9A6VFB8+3SKlXQ==",
- "dev": true,
- "requires": {
- "object-keys": "^1.0.12"
- }
- },
- "define-property": {
- "version": "2.0.2",
- "resolved": "https://registry.npmjs.org/define-property/-/define-property-2.0.2.tgz",
- "integrity": "sha512-jwK2UV4cnPpbcG7+VRARKTZPUWowwXA8bzH5NP6ud0oeAxyYPuGZUAC7hMugpCdz4BeSZl2Dl9k66CHJ/46ZYQ==",
- "dev": true,
- "requires": {
- "is-descriptor": "^1.0.2",
- "isobject": "^3.0.1"
- }
- },
- "depd": {
- "version": "1.1.2",
- "resolved": "https://registry.npmjs.org/depd/-/depd-1.1.2.tgz",
- "integrity": "sha1-m81S4UwJd2PnSbJ0xDRu0uVgtak=",
- "dev": true
- },
- "destroy": {
- "version": "1.0.4",
- "resolved": "https://registry.npmjs.org/destroy/-/destroy-1.0.4.tgz",
- "integrity": "sha1-l4hXRCxEdJ5CBmE+N5RiBYJqvYA=",
- "dev": true
- },
- "detect-file": {
- "version": "1.0.0",
- "resolved": "https://registry.npmjs.org/detect-file/-/detect-file-1.0.0.tgz",
- "integrity": "sha1-8NZtA2cqglyxtzvbP+YjEMjlUrc=",
- "dev": true
- },
- "duplexify": {
- "version": "3.7.1",
- "resolved": "https://registry.npmjs.org/duplexify/-/duplexify-3.7.1.tgz",
- "integrity": "sha512-07z8uv2wMyS51kKhD1KsdXJg5WQ6t93RneqRxUHnskXVtlYYkLqM0gqStQZ3pj073g687jPCHrqNfCzawLYh5g==",
- "dev": true,
- "requires": {
- "end-of-stream": "^1.0.0",
- "inherits": "^2.0.1",
- "readable-stream": "^2.0.0",
- "stream-shift": "^1.0.0"
- },
- "dependencies": {
- "readable-stream": {
- "version": "2.3.7",
- "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.7.tgz",
- "integrity": "sha512-Ebho8K4jIbHAxnuxi7o42OrZgF/ZTNcsZj6nRKyUmkhLFq8CHItp/fy6hQZuZmP/n3yZ9VBUbp4zz/mX8hmYPw==",
- "dev": true,
- "requires": {
- "core-util-is": "~1.0.0",
- "inherits": "~2.0.3",
- "isarray": "~1.0.0",
- "process-nextick-args": "~2.0.0",
- "safe-buffer": "~5.1.1",
- "string_decoder": "~1.1.1",
- "util-deprecate": "~1.0.1"
- }
- },
- "safe-buffer": {
- "version": "5.1.2",
- "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz",
- "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==",
- "dev": true
- },
- "string_decoder": {
- "version": "1.1.1",
- "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz",
- "integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==",
- "dev": true,
- "requires": {
- "safe-buffer": "~5.1.0"
- }
- }
- }
- },
- "each-props": {
- "version": "1.3.2",
- "resolved": "https://registry.npmjs.org/each-props/-/each-props-1.3.2.tgz",
- "integrity": "sha512-vV0Hem3zAGkJAyU7JSjixeU66rwdynTAa1vofCrSA5fEln+m67Az9CcnkVD776/fsN/UjIWmBDoNRS6t6G9RfA==",
- "dev": true,
- "requires": {
- "is-plain-object": "^2.0.1",
- "object.defaults": "^1.1.0"
- }
- },
- "ee-first": {
- "version": "1.1.1",
- "resolved": "https://registry.npmjs.org/ee-first/-/ee-first-1.1.1.tgz",
- "integrity": "sha1-WQxhFWsK4vTwJVcyoViyZrxWsh0=",
- "dev": true
- },
- "electron-to-chromium": {
- "version": "1.4.57",
- "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.4.57.tgz",
- "integrity": "sha512-FNC+P5K1n6pF+M0zIK+gFCoXcJhhzDViL3DRIGy2Fv5PohuSES1JHR7T+GlwxSxlzx4yYbsuzCZvHxcBSRCIOw==",
- "dev": true
- },
- "encodeurl": {
- "version": "1.0.2",
- "resolved": "https://registry.npmjs.org/encodeurl/-/encodeurl-1.0.2.tgz",
- "integrity": "sha1-rT/0yG7C0CkyL1oCw6mmBslbP1k=",
- "dev": true
- },
- "end-of-stream": {
- "version": "1.4.4",
- "resolved": "https://registry.npmjs.org/end-of-stream/-/end-of-stream-1.4.4.tgz",
- "integrity": "sha512-+uw1inIHVPQoaVuHzRyXd21icM+cnt4CzD5rW+NC1wjOUSTOs+Te7FOv7AhN7vS9x/oIyhLP5PR1H+phQAHu5Q==",
- "dev": true,
- "requires": {
- "once": "^1.4.0"
- }
- },
- "error": {
- "version": "7.2.1",
- "resolved": "https://registry.npmjs.org/error/-/error-7.2.1.tgz",
- "integrity": "sha512-fo9HBvWnx3NGUKMvMwB/CBCMMrfEJgbDTVDEkPygA3Bdd3lM1OyCd+rbQ8BwnpF6GdVeOLDNmyL4N5Bg80ZvdA==",
- "dev": true,
- "requires": {
- "string-template": "~0.2.1"
- }
- },
- "error-ex": {
- "version": "1.3.2",
- "resolved": "https://registry.npmjs.org/error-ex/-/error-ex-1.3.2.tgz",
- "integrity": "sha512-7dFHNmqeFSEt2ZBsCriorKnn3Z2pj+fd9kmI6QoWw4//DL+icEBfc0U7qJCisqrTsKTjw4fNFy2pW9OqStD84g==",
- "dev": true,
- "requires": {
- "is-arrayish": "^0.2.1"
- }
- },
- "es5-ext": {
- "version": "0.10.53",
- "resolved": "https://registry.npmjs.org/es5-ext/-/es5-ext-0.10.53.tgz",
- "integrity": "sha512-Xs2Stw6NiNHWypzRTY1MtaG/uJlwCk8kH81920ma8mvN8Xq1gsfhZvpkImLQArw8AHnv8MT2I45J3c0R8slE+Q==",
- "dev": true,
- "requires": {
- "es6-iterator": "~2.0.3",
- "es6-symbol": "~3.1.3",
- "next-tick": "~1.0.0"
- }
- },
- "es6-iterator": {
- "version": "2.0.3",
- "resolved": "https://registry.npmjs.org/es6-iterator/-/es6-iterator-2.0.3.tgz",
- "integrity": "sha1-p96IkUGgWpSwhUQDstCg+/qY87c=",
- "dev": true,
- "requires": {
- "d": "1",
- "es5-ext": "^0.10.35",
- "es6-symbol": "^3.1.1"
- }
- },
- "es6-symbol": {
- "version": "3.1.3",
- "resolved": "https://registry.npmjs.org/es6-symbol/-/es6-symbol-3.1.3.tgz",
- "integrity": "sha512-NJ6Yn3FuDinBaBRWl/q5X/s4koRHBrgKAu+yGI6JCBeiu3qrcbJhwT2GeR/EXVfylRk8dpQVJoLEFhK+Mu31NA==",
- "dev": true,
- "requires": {
- "d": "^1.0.1",
- "ext": "^1.1.2"
- }
- },
- "es6-weak-map": {
- "version": "2.0.3",
- "resolved": "https://registry.npmjs.org/es6-weak-map/-/es6-weak-map-2.0.3.tgz",
- "integrity": "sha512-p5um32HOTO1kP+w7PRnB+5lQ43Z6muuMuIMffvDN8ZB4GcnjLBV6zGStpbASIMk4DCAvEaamhe2zhyCb/QXXsA==",
- "dev": true,
- "requires": {
- "d": "1",
- "es5-ext": "^0.10.46",
- "es6-iterator": "^2.0.3",
- "es6-symbol": "^3.1.1"
- }
- },
- "escalade": {
- "version": "3.1.1",
- "resolved": "https://registry.npmjs.org/escalade/-/escalade-3.1.1.tgz",
- "integrity": "sha512-k0er2gUkLf8O0zKJiAhmkTnJlTvINGv7ygDNPbeIsX/TJjGJZHuh9B2UxbsaEkmlEo9MfhrSzmhIlhRlI2GXnw==",
- "dev": true
- },
- "escape-html": {
- "version": "1.0.3",
- "resolved": "https://registry.npmjs.org/escape-html/-/escape-html-1.0.3.tgz",
- "integrity": "sha1-Aljq5NPQwJdN4cFpGI7wBR0dGYg=",
- "dev": true
- },
- "etag": {
- "version": "1.8.1",
- "resolved": "https://registry.npmjs.org/etag/-/etag-1.8.1.tgz",
- "integrity": "sha1-Qa4u62XvpiJorr/qg6x9eSmbCIc=",
- "dev": true
- },
- "expand-brackets": {
- "version": "2.1.4",
- "resolved": "https://registry.npmjs.org/expand-brackets/-/expand-brackets-2.1.4.tgz",
- "integrity": "sha1-t3c14xXOMPa27/D4OwQVGiJEliI=",
- "dev": true,
- "requires": {
- "debug": "^2.3.3",
- "define-property": "^0.2.5",
- "extend-shallow": "^2.0.1",
- "posix-character-classes": "^0.1.0",
- "regex-not": "^1.0.0",
- "snapdragon": "^0.8.1",
- "to-regex": "^3.0.1"
- },
- "dependencies": {
- "define-property": {
- "version": "0.2.5",
- "resolved": "https://registry.npmjs.org/define-property/-/define-property-0.2.5.tgz",
- "integrity": "sha1-w1se+RjsPJkPmlvFe+BKrOxcgRY=",
- "dev": true,
- "requires": {
- "is-descriptor": "^0.1.0"
- }
- },
- "extend-shallow": {
- "version": "2.0.1",
- "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz",
- "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=",
- "dev": true,
- "requires": {
- "is-extendable": "^0.1.0"
- }
- },
- "is-accessor-descriptor": {
- "version": "0.1.6",
- "resolved": "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-0.1.6.tgz",
- "integrity": "sha1-qeEss66Nh2cn7u84Q/igiXtcmNY=",
- "dev": true,
- "requires": {
- "kind-of": "^3.0.2"
- },
- "dependencies": {
- "kind-of": {
- "version": "3.2.2",
- "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz",
- "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=",
- "dev": true,
- "requires": {
- "is-buffer": "^1.1.5"
- }
- }
- }
- },
- "is-data-descriptor": {
- "version": "0.1.4",
- "resolved": "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-0.1.4.tgz",
- "integrity": "sha1-C17mSDiOLIYCgueT8YVv7D8wG1Y=",
- "dev": true,
- "requires": {
- "kind-of": "^3.0.2"
- },
- "dependencies": {
- "kind-of": {
- "version": "3.2.2",
- "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz",
- "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=",
- "dev": true,
- "requires": {
- "is-buffer": "^1.1.5"
- }
- }
- }
- },
- "is-descriptor": {
- "version": "0.1.6",
- "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-0.1.6.tgz",
- "integrity": "sha512-avDYr0SB3DwO9zsMov0gKCESFYqCnE4hq/4z3TdUlukEy5t9C0YRq7HLrsN52NAcqXKaepeCD0n+B0arnVG3Hg==",
- "dev": true,
- "requires": {
- "is-accessor-descriptor": "^0.1.6",
- "is-data-descriptor": "^0.1.4",
- "kind-of": "^5.0.0"
- }
- },
- "is-extendable": {
- "version": "0.1.1",
- "resolved": "https://registry.npmjs.org/is-extendable/-/is-extendable-0.1.1.tgz",
- "integrity": "sha1-YrEQ4omkcUGOPsNqYX1HLjAd/Ik=",
- "dev": true
- }
- }
- },
- "expand-tilde": {
- "version": "2.0.2",
- "resolved": "https://registry.npmjs.org/expand-tilde/-/expand-tilde-2.0.2.tgz",
- "integrity": "sha1-l+gBqgUt8CRU3kawK/YhZCzchQI=",
- "dev": true,
- "requires": {
- "homedir-polyfill": "^1.0.1"
- }
- },
- "ext": {
- "version": "1.6.0",
- "resolved": "https://registry.npmjs.org/ext/-/ext-1.6.0.tgz",
- "integrity": "sha512-sdBImtzkq2HpkdRLtlLWDa6w4DX22ijZLKx8BMPUuKe1c5lbN6xwQDQCxSfxBQnHZ13ls/FH0MQZx/q/gr6FQg==",
- "dev": true,
- "requires": {
- "type": "^2.5.0"
- },
- "dependencies": {
- "type": {
- "version": "2.5.0",
- "resolved": "https://registry.npmjs.org/type/-/type-2.5.0.tgz",
- "integrity": "sha512-180WMDQaIMm3+7hGXWf12GtdniDEy7nYcyFMKJn/eZz/6tSLXrUN9V0wKSbMjej0I1WHWbpREDEKHtqPQa9NNw==",
- "dev": true
- }
- }
- },
- "extend": {
- "version": "3.0.2",
- "resolved": "https://registry.npmjs.org/extend/-/extend-3.0.2.tgz",
- "integrity": "sha512-fjquC59cD7CyW6urNXK0FBufkZcoiGG80wTuPujX590cB5Ttln20E2UB4S/WARVqhXffZl2LNgS+gQdPIIim/g==",
- "dev": true
- },
- "extend-shallow": {
- "version": "3.0.2",
- "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-3.0.2.tgz",
- "integrity": "sha1-Jqcarwc7OfshJxcnRhMcJwQCjbg=",
- "dev": true,
- "requires": {
- "assign-symbols": "^1.0.0",
- "is-extendable": "^1.0.1"
- }
- },
- "extglob": {
- "version": "2.0.4",
- "resolved": "https://registry.npmjs.org/extglob/-/extglob-2.0.4.tgz",
- "integrity": "sha512-Nmb6QXkELsuBr24CJSkilo6UHHgbekK5UiZgfE6UHD3Eb27YC6oD+bhcT+tJ6cl8dmsgdQxnWlcry8ksBIBLpw==",
- "dev": true,
- "requires": {
- "array-unique": "^0.3.2",
- "define-property": "^1.0.0",
- "expand-brackets": "^2.1.4",
- "extend-shallow": "^2.0.1",
- "fragment-cache": "^0.2.1",
- "regex-not": "^1.0.0",
- "snapdragon": "^0.8.1",
- "to-regex": "^3.0.1"
- },
- "dependencies": {
- "define-property": {
- "version": "1.0.0",
- "resolved": "https://registry.npmjs.org/define-property/-/define-property-1.0.0.tgz",
- "integrity": "sha1-dp66rz9KY6rTr56NMEybvnm/sOY=",
- "dev": true,
- "requires": {
- "is-descriptor": "^1.0.0"
- }
- },
- "extend-shallow": {
- "version": "2.0.1",
- "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz",
- "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=",
- "dev": true,
- "requires": {
- "is-extendable": "^0.1.0"
- }
- },
- "is-extendable": {
- "version": "0.1.1",
- "resolved": "https://registry.npmjs.org/is-extendable/-/is-extendable-0.1.1.tgz",
- "integrity": "sha1-YrEQ4omkcUGOPsNqYX1HLjAd/Ik=",
- "dev": true
- }
- }
- },
- "fancy-log": {
- "version": "1.3.3",
- "resolved": "https://registry.npmjs.org/fancy-log/-/fancy-log-1.3.3.tgz",
- "integrity": "sha512-k9oEhlyc0FrVh25qYuSELjr8oxsCoc4/LEZfg2iJJrfEk/tZL9bCoJE47gqAvI2m/AUjluCS4+3I0eTx8n3AEw==",
- "dev": true,
- "requires": {
- "ansi-gray": "^0.1.1",
- "color-support": "^1.1.3",
- "parse-node-version": "^1.0.0",
- "time-stamp": "^1.0.0"
- }
- },
- "fast-levenshtein": {
- "version": "1.1.4",
- "resolved": "https://registry.npmjs.org/fast-levenshtein/-/fast-levenshtein-1.1.4.tgz",
- "integrity": "sha1-5qdUzI8V5YmHqpy9J69m/W9OWvk=",
- "dev": true
- },
- "faye-websocket": {
- "version": "0.10.0",
- "resolved": "https://registry.npmjs.org/faye-websocket/-/faye-websocket-0.10.0.tgz",
- "integrity": "sha1-TkkvjQTftviQA1B/btvy1QHnxvQ=",
- "dev": true,
- "requires": {
- "websocket-driver": ">=0.5.1"
- }
- },
- "file-uri-to-path": {
- "version": "1.0.0",
- "resolved": "https://registry.npmjs.org/file-uri-to-path/-/file-uri-to-path-1.0.0.tgz",
- "integrity": "sha512-0Zt+s3L7Vf1biwWZ29aARiVYLx7iMGnEUl9x33fbB/j3jR81u/O2LbqK+Bm1CDSNDKVtJ/YjwY7TUd5SkeLQLw==",
- "dev": true,
- "optional": true
- },
- "fill-range": {
- "version": "7.0.1",
- "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-7.0.1.tgz",
- "integrity": "sha512-qOo9F+dMUmC2Lcb4BbVvnKJxTPjCm+RRpe4gDuGrzkL7mEVl/djYSu2OdQ2Pa302N4oqkSg9ir6jaLWJ2USVpQ==",
- "dev": true,
- "requires": {
- "to-regex-range": "^5.0.1"
- }
- },
- "finalhandler": {
- "version": "1.1.2",
- "resolved": "https://registry.npmjs.org/finalhandler/-/finalhandler-1.1.2.tgz",
- "integrity": "sha512-aAWcW57uxVNrQZqFXjITpW3sIUQmHGG3qSb9mUah9MgMC4NeWhNOlNjXEYq3HjRAvL6arUviZGGJsBg6z0zsWA==",
- "dev": true,
- "requires": {
- "debug": "2.6.9",
- "encodeurl": "~1.0.2",
- "escape-html": "~1.0.3",
- "on-finished": "~2.3.0",
- "parseurl": "~1.3.3",
- "statuses": "~1.5.0",
- "unpipe": "~1.0.0"
- }
- },
- "find-up": {
- "version": "1.1.2",
- "resolved": "https://registry.npmjs.org/find-up/-/find-up-1.1.2.tgz",
- "integrity": "sha1-ay6YIrGizgpgq2TWEOzK1TyyTQ8=",
- "dev": true,
- "requires": {
- "path-exists": "^2.0.0",
- "pinkie-promise": "^2.0.0"
- }
- },
- "findup-sync": {
- "version": "4.0.0",
- "resolved": "https://registry.npmjs.org/findup-sync/-/findup-sync-4.0.0.tgz",
- "integrity": "sha512-6jvvn/12IC4quLBL1KNokxC7wWTvYncaVUYSoxWw7YykPLuRrnv4qdHcSOywOI5RpkOVGeQRtWM8/q+G6W6qfQ==",
- "dev": true,
- "requires": {
- "detect-file": "^1.0.0",
- "is-glob": "^4.0.0",
- "micromatch": "^4.0.2",
- "resolve-dir": "^1.0.1"
- }
- },
- "fined": {
- "version": "1.2.0",
- "resolved": "https://registry.npmjs.org/fined/-/fined-1.2.0.tgz",
- "integrity": "sha512-ZYDqPLGxDkDhDZBjZBb+oD1+j0rA4E0pXY50eplAAOPg2N/gUBSSk5IM1/QhPfyVo19lJ+CvXpqfvk+b2p/8Ng==",
- "dev": true,
- "requires": {
- "expand-tilde": "^2.0.2",
- "is-plain-object": "^2.0.3",
- "object.defaults": "^1.1.0",
- "object.pick": "^1.2.0",
- "parse-filepath": "^1.0.1"
- }
- },
- "flagged-respawn": {
- "version": "1.0.1",
- "resolved": "https://registry.npmjs.org/flagged-respawn/-/flagged-respawn-1.0.1.tgz",
- "integrity": "sha512-lNaHNVymajmk0OJMBn8fVUAU1BtDeKIqKoVhk4xAALB57aALg6b4W0MfJ/cUE0g9YBXy5XhSlPIpYIJ7HaY/3Q==",
- "dev": true
- },
- "flush-write-stream": {
- "version": "1.1.1",
- "resolved": "https://registry.npmjs.org/flush-write-stream/-/flush-write-stream-1.1.1.tgz",
- "integrity": "sha512-3Z4XhFZ3992uIq0XOqb9AreonueSYphE6oYbpt5+3u06JWklbsPkNv3ZKkP9Bz/r+1MWCaMoSQ28P85+1Yc77w==",
- "dev": true,
- "requires": {
- "inherits": "^2.0.3",
- "readable-stream": "^2.3.6"
- },
- "dependencies": {
- "readable-stream": {
- "version": "2.3.7",
- "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.7.tgz",
- "integrity": "sha512-Ebho8K4jIbHAxnuxi7o42OrZgF/ZTNcsZj6nRKyUmkhLFq8CHItp/fy6hQZuZmP/n3yZ9VBUbp4zz/mX8hmYPw==",
- "dev": true,
- "requires": {
- "core-util-is": "~1.0.0",
- "inherits": "~2.0.3",
- "isarray": "~1.0.0",
- "process-nextick-args": "~2.0.0",
- "safe-buffer": "~5.1.1",
- "string_decoder": "~1.1.1",
- "util-deprecate": "~1.0.1"
- }
- },
- "safe-buffer": {
- "version": "5.1.2",
- "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz",
- "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==",
- "dev": true
- },
- "string_decoder": {
- "version": "1.1.1",
- "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz",
- "integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==",
- "dev": true,
- "requires": {
- "safe-buffer": "~5.1.0"
- }
- }
- }
- },
- "for-in": {
- "version": "1.0.2",
- "resolved": "https://registry.npmjs.org/for-in/-/for-in-1.0.2.tgz",
- "integrity": "sha1-gQaNKVqBQuwKxybG4iAMMPttXoA=",
- "dev": true
- },
- "for-own": {
- "version": "1.0.0",
- "resolved": "https://registry.npmjs.org/for-own/-/for-own-1.0.0.tgz",
- "integrity": "sha1-xjMy9BXO3EsE2/5wz4NklMU8tEs=",
- "dev": true,
- "requires": {
- "for-in": "^1.0.1"
- }
- },
- "fraction.js": {
- "version": "4.1.2",
- "resolved": "https://registry.npmjs.org/fraction.js/-/fraction.js-4.1.2.tgz",
- "integrity": "sha512-o2RiJQ6DZaR/5+Si0qJUIy637QMRudSi9kU/FFzx9EZazrIdnBgpU+3sEWCxAVhH2RtxW2Oz+T4p2o8uOPVcgA==",
- "dev": true
- },
- "fragment-cache": {
- "version": "0.2.1",
- "resolved": "https://registry.npmjs.org/fragment-cache/-/fragment-cache-0.2.1.tgz",
- "integrity": "sha1-QpD60n8T6Jvn8zeZxrxaCr//DRk=",
- "dev": true,
- "requires": {
- "map-cache": "^0.2.2"
- }
- },
- "fresh": {
- "version": "0.5.2",
- "resolved": "https://registry.npmjs.org/fresh/-/fresh-0.5.2.tgz",
- "integrity": "sha1-PYyt2Q2XZWn6g1qx+OSyOhBWBac=",
- "dev": true
- },
- "fs-mkdirp-stream": {
- "version": "1.0.0",
- "resolved": "https://registry.npmjs.org/fs-mkdirp-stream/-/fs-mkdirp-stream-1.0.0.tgz",
- "integrity": "sha1-C3gV/DIBxqaeFNuYzgmMFpNSWes=",
- "dev": true,
- "requires": {
- "graceful-fs": "^4.1.11",
- "through2": "^2.0.3"
- },
- "dependencies": {
- "readable-stream": {
- "version": "2.3.7",
- "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.7.tgz",
- "integrity": "sha512-Ebho8K4jIbHAxnuxi7o42OrZgF/ZTNcsZj6nRKyUmkhLFq8CHItp/fy6hQZuZmP/n3yZ9VBUbp4zz/mX8hmYPw==",
- "dev": true,
- "requires": {
- "core-util-is": "~1.0.0",
- "inherits": "~2.0.3",
- "isarray": "~1.0.0",
- "process-nextick-args": "~2.0.0",
- "safe-buffer": "~5.1.1",
- "string_decoder": "~1.1.1",
- "util-deprecate": "~1.0.1"
- }
- },
- "safe-buffer": {
- "version": "5.1.2",
- "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz",
- "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==",
- "dev": true
- },
- "string_decoder": {
- "version": "1.1.1",
- "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz",
- "integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==",
- "dev": true,
- "requires": {
- "safe-buffer": "~5.1.0"
- }
- },
- "through2": {
- "version": "2.0.5",
- "resolved": "https://registry.npmjs.org/through2/-/through2-2.0.5.tgz",
- "integrity": "sha512-/mrRod8xqpA+IHSLyGCQ2s8SPHiCDEeQJSep1jqLYeEUClOFG2Qsh+4FU6G9VeqpZnGW/Su8LQGc4YKni5rYSQ==",
- "dev": true,
- "requires": {
- "readable-stream": "~2.3.6",
- "xtend": "~4.0.1"
- }
- }
- }
- },
- "fs.realpath": {
- "version": "1.0.0",
- "resolved": "https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz",
- "integrity": "sha1-FQStJSMVjKpA20onh8sBQRmU6k8=",
- "dev": true
- },
- "fsevents": {
- "version": "1.2.13",
- "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-1.2.13.tgz",
- "integrity": "sha512-oWb1Z6mkHIskLzEJ/XWX0srkpkTQ7vaopMQkyaEIoq0fmtFVxOthb8cCxeT+p3ynTdkk/RZwbgG4brR5BeWECw==",
- "dev": true,
- "optional": true,
- "requires": {
- "bindings": "^1.5.0",
- "nan": "^2.12.1"
- }
- },
- "function-bind": {
- "version": "1.1.1",
- "resolved": "https://registry.npmjs.org/function-bind/-/function-bind-1.1.1.tgz",
- "integrity": "sha512-yIovAzMX49sF8Yl58fSCWJ5svSLuaibPxXQJFLmBObTuCr0Mf1KiPopGM9NiFjiYBCbfaa2Fh6breQ6ANVTI0A==",
- "dev": true
- },
- "get-caller-file": {
- "version": "1.0.3",
- "resolved": "https://registry.npmjs.org/get-caller-file/-/get-caller-file-1.0.3.tgz",
- "integrity": "sha512-3t6rVToeoZfYSGd8YoLFR2DJkiQrIiUrGcjvFX2mDw3bn6k2OtwHN0TNCLbBO+w8qTvimhDkv+LSscbJY1vE6w==",
- "dev": true
- },
- "get-intrinsic": {
- "version": "1.1.1",
- "resolved": "https://registry.npmjs.org/get-intrinsic/-/get-intrinsic-1.1.1.tgz",
- "integrity": "sha512-kWZrnVM42QCiEA2Ig1bG8zjoIMOgxWwYCEeNdwY6Tv/cOSeGpcoX4pXHfKUxNKVoArnrEr2e9srnAxxGIraS9Q==",
- "dev": true,
- "requires": {
- "function-bind": "^1.1.1",
- "has": "^1.0.3",
- "has-symbols": "^1.0.1"
- }
- },
- "get-value": {
- "version": "2.0.6",
- "resolved": "https://registry.npmjs.org/get-value/-/get-value-2.0.6.tgz",
- "integrity": "sha1-3BXKHGcjh8p2vTesCjlbogQqLCg=",
- "dev": true
- },
- "glob": {
- "version": "7.2.0",
- "resolved": "https://registry.npmjs.org/glob/-/glob-7.2.0.tgz",
- "integrity": "sha512-lmLf6gtyrPq8tTjSmrO94wBeQbFR3HbLHbuyD69wuyQkImp2hWqMGB47OX65FBkPffO641IP9jWa1z4ivqG26Q==",
- "dev": true,
- "requires": {
- "fs.realpath": "^1.0.0",
- "inflight": "^1.0.4",
- "inherits": "2",
- "minimatch": "^3.0.4",
- "once": "^1.3.0",
- "path-is-absolute": "^1.0.0"
- }
- },
- "glob-parent": {
- "version": "3.1.0",
- "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-3.1.0.tgz",
- "integrity": "sha1-nmr2KZ2NO9K9QEMIMr0RPfkGxa4=",
- "dev": true,
- "requires": {
- "is-glob": "^3.1.0",
- "path-dirname": "^1.0.0"
- },
- "dependencies": {
- "is-glob": {
- "version": "3.1.0",
- "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-3.1.0.tgz",
- "integrity": "sha1-e6WuJCF4BKxwcHuWkiVnSGzD6Eo=",
- "dev": true,
- "requires": {
- "is-extglob": "^2.1.0"
- }
- }
- }
- },
- "glob-stream": {
- "version": "6.1.0",
- "resolved": "https://registry.npmjs.org/glob-stream/-/glob-stream-6.1.0.tgz",
- "integrity": "sha1-cEXJlBOz65SIjYOrRtC0BMx73eQ=",
- "dev": true,
- "requires": {
- "extend": "^3.0.0",
- "glob": "^7.1.1",
- "glob-parent": "^3.1.0",
- "is-negated-glob": "^1.0.0",
- "ordered-read-streams": "^1.0.0",
- "pumpify": "^1.3.5",
- "readable-stream": "^2.1.5",
- "remove-trailing-separator": "^1.0.1",
- "to-absolute-glob": "^2.0.0",
- "unique-stream": "^2.0.2"
- },
- "dependencies": {
- "readable-stream": {
- "version": "2.3.7",
- "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.7.tgz",
- "integrity": "sha512-Ebho8K4jIbHAxnuxi7o42OrZgF/ZTNcsZj6nRKyUmkhLFq8CHItp/fy6hQZuZmP/n3yZ9VBUbp4zz/mX8hmYPw==",
- "dev": true,
- "requires": {
- "core-util-is": "~1.0.0",
- "inherits": "~2.0.3",
- "isarray": "~1.0.0",
- "process-nextick-args": "~2.0.0",
- "safe-buffer": "~5.1.1",
- "string_decoder": "~1.1.1",
- "util-deprecate": "~1.0.1"
- }
- },
- "safe-buffer": {
- "version": "5.1.2",
- "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz",
- "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==",
- "dev": true
- },
- "string_decoder": {
- "version": "1.1.1",
- "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz",
- "integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==",
- "dev": true,
- "requires": {
- "safe-buffer": "~5.1.0"
- }
- }
- }
- },
- "glob-watcher": {
- "version": "5.0.5",
- "resolved": "https://registry.npmjs.org/glob-watcher/-/glob-watcher-5.0.5.tgz",
- "integrity": "sha512-zOZgGGEHPklZNjZQaZ9f41i7F2YwE+tS5ZHrDhbBCk3stwahn5vQxnFmBJZHoYdusR6R1bLSXeGUy/BhctwKzw==",
- "dev": true,
- "requires": {
- "anymatch": "^2.0.0",
- "async-done": "^1.2.0",
- "chokidar": "^2.0.0",
- "is-negated-glob": "^1.0.0",
- "just-debounce": "^1.0.0",
- "normalize-path": "^3.0.0",
- "object.defaults": "^1.1.0"
- }
- },
- "global-modules": {
- "version": "1.0.0",
- "resolved": "https://registry.npmjs.org/global-modules/-/global-modules-1.0.0.tgz",
- "integrity": "sha512-sKzpEkf11GpOFuw0Zzjzmt4B4UZwjOcG757PPvrfhxcLFbq0wpsgpOqxpxtxFiCG4DtG93M6XRVbF2oGdev7bg==",
- "dev": true,
- "requires": {
- "global-prefix": "^1.0.1",
- "is-windows": "^1.0.1",
- "resolve-dir": "^1.0.0"
- }
- },
- "global-prefix": {
- "version": "1.0.2",
- "resolved": "https://registry.npmjs.org/global-prefix/-/global-prefix-1.0.2.tgz",
- "integrity": "sha1-2/dDxsFJklk8ZVVoy2btMsASLr4=",
- "dev": true,
- "requires": {
- "expand-tilde": "^2.0.2",
- "homedir-polyfill": "^1.0.1",
- "ini": "^1.3.4",
- "is-windows": "^1.0.1",
- "which": "^1.2.14"
- }
- },
- "glogg": {
- "version": "1.0.2",
- "resolved": "https://registry.npmjs.org/glogg/-/glogg-1.0.2.tgz",
- "integrity": "sha512-5mwUoSuBk44Y4EshyiqcH95ZntbDdTQqA3QYSrxmzj28Ai0vXBGMH1ApSANH14j2sIRtqCEyg6PfsuP7ElOEDA==",
- "dev": true,
- "requires": {
- "sparkles": "^1.0.0"
- }
- },
- "graceful-fs": {
- "version": "4.2.9",
- "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.9.tgz",
- "integrity": "sha512-NtNxqUcXgpW2iMrfqSfR73Glt39K+BLwWsPs94yR63v45T0Wbej7eRmL5cWfwEgqXnmjQp3zaJTshdRW/qC2ZQ==",
- "dev": true
- },
- "gulp": {
- "version": "4.0.2",
- "resolved": "https://registry.npmjs.org/gulp/-/gulp-4.0.2.tgz",
- "integrity": "sha512-dvEs27SCZt2ibF29xYgmnwwCYZxdxhQ/+LFWlbAW8y7jt68L/65402Lz3+CKy0Ov4rOs+NERmDq7YlZaDqUIfA==",
- "dev": true,
- "requires": {
- "glob-watcher": "^5.0.3",
- "gulp-cli": "^2.2.0",
- "undertaker": "^1.2.1",
- "vinyl-fs": "^3.0.0"
- }
- },
- "gulp-autoprefixer": {
- "version": "8.0.0",
- "resolved": "https://registry.npmjs.org/gulp-autoprefixer/-/gulp-autoprefixer-8.0.0.tgz",
- "integrity": "sha512-sVR++PIaXpa81p52dmmA/jt50bw0egmylK5mjagfgOJ8uLDGaF9tHyzvetkY9Uo0gBZUS5sVqN3kX/GlUKOyog==",
- "dev": true,
- "requires": {
- "autoprefixer": "^10.2.6",
- "fancy-log": "^1.3.3",
- "plugin-error": "^1.0.1",
- "postcss": "^8.3.0",
- "through2": "^4.0.2",
- "vinyl-sourcemaps-apply": "^0.2.1"
- }
- },
- "gulp-clean-css": {
- "version": "4.3.0",
- "resolved": "https://registry.npmjs.org/gulp-clean-css/-/gulp-clean-css-4.3.0.tgz",
- "integrity": "sha512-mGyeT3qqFXTy61j0zOIciS4MkYziF2U594t2Vs9rUnpkEHqfu6aDITMp8xOvZcvdX61Uz3y1mVERRYmjzQF5fg==",
- "dev": true,
- "requires": {
- "clean-css": "4.2.3",
- "plugin-error": "1.0.1",
- "through2": "3.0.1",
- "vinyl-sourcemaps-apply": "0.2.1"
- },
- "dependencies": {
- "through2": {
- "version": "3.0.1",
- "resolved": "https://registry.npmjs.org/through2/-/through2-3.0.1.tgz",
- "integrity": "sha512-M96dvTalPT3YbYLaKaCuwu+j06D/8Jfib0o/PxbVt6Amhv3dUAtW6rTV1jPgJSBG83I/e04Y6xkVdVhSRhi0ww==",
- "dev": true,
- "requires": {
- "readable-stream": "2 || 3"
- }
- }
- }
- },
- "gulp-cli": {
- "version": "2.3.0",
- "resolved": "https://registry.npmjs.org/gulp-cli/-/gulp-cli-2.3.0.tgz",
- "integrity": "sha512-zzGBl5fHo0EKSXsHzjspp3y5CONegCm8ErO5Qh0UzFzk2y4tMvzLWhoDokADbarfZRL2pGpRp7yt6gfJX4ph7A==",
- "dev": true,
- "requires": {
- "ansi-colors": "^1.0.1",
- "archy": "^1.0.0",
- "array-sort": "^1.0.0",
- "color-support": "^1.1.3",
- "concat-stream": "^1.6.0",
- "copy-props": "^2.0.1",
- "fancy-log": "^1.3.2",
- "gulplog": "^1.0.0",
- "interpret": "^1.4.0",
- "isobject": "^3.0.1",
- "liftoff": "^3.1.0",
- "matchdep": "^2.0.0",
- "mute-stdout": "^1.0.0",
- "pretty-hrtime": "^1.0.0",
- "replace-homedir": "^1.0.0",
- "semver-greatest-satisfied-range": "^1.1.0",
- "v8flags": "^3.2.0",
- "yargs": "^7.1.0"
- }
- },
- "gulp-connect": {
- "version": "5.7.0",
- "resolved": "https://registry.npmjs.org/gulp-connect/-/gulp-connect-5.7.0.tgz",
- "integrity": "sha512-8tRcC6wgXMLakpPw9M7GRJIhxkYdgZsXwn7n56BA2bQYGLR9NOPhMzx7js+qYDy6vhNkbApGKURjAw1FjY4pNA==",
- "dev": true,
- "requires": {
- "ansi-colors": "^2.0.5",
- "connect": "^3.6.6",
- "connect-livereload": "^0.6.0",
- "fancy-log": "^1.3.2",
- "map-stream": "^0.0.7",
- "send": "^0.16.2",
- "serve-index": "^1.9.1",
- "serve-static": "^1.13.2",
- "tiny-lr": "^1.1.1"
- },
- "dependencies": {
- "ansi-colors": {
- "version": "2.0.5",
- "resolved": "https://registry.npmjs.org/ansi-colors/-/ansi-colors-2.0.5.tgz",
- "integrity": "sha512-yAdfUZ+c2wetVNIFsNRn44THW+Lty6S5TwMpUfLA/UaGhiXbBv/F8E60/1hMLd0cnF/CDoWH8vzVaI5bAcHCjw==",
- "dev": true
- }
- }
- },
- "gulp-load-plugins": {
- "version": "2.0.7",
- "resolved": "https://registry.npmjs.org/gulp-load-plugins/-/gulp-load-plugins-2.0.7.tgz",
- "integrity": "sha512-/3nl/p7s9O03Yv6SSEqN2dXEbDE0+JpsKfJl6h/GgCLqqnkZT0bF+JWcz87HzcTBeh/MVzMosAJx4kLDTWrTNQ==",
- "dev": true,
- "requires": {
- "array-unique": "^0.3.2",
- "fancy-log": "^1.2.0",
- "findup-sync": "^4.0.0",
- "gulplog": "^1.0.0",
- "has-gulplog": "^0.1.0",
- "micromatch": "^4.0.2",
- "resolve": "^1.17.0"
- }
- },
- "gulp-rename": {
- "version": "2.0.0",
- "resolved": "https://registry.npmjs.org/gulp-rename/-/gulp-rename-2.0.0.tgz",
- "integrity": "sha512-97Vba4KBzbYmR5VBs9mWmK+HwIf5mj+/zioxfZhOKeXtx5ZjBk57KFlePf5nxq9QsTtFl0ejnHE3zTC9MHXqyQ==",
- "dev": true
- },
- "gulp-sass": {
- "version": "5.1.0",
- "resolved": "https://registry.npmjs.org/gulp-sass/-/gulp-sass-5.1.0.tgz",
- "integrity": "sha512-7VT0uaF+VZCmkNBglfe1b34bxn/AfcssquLKVDYnCDJ3xNBaW7cUuI3p3BQmoKcoKFrs9jdzUxyb+u+NGfL4OQ==",
- "dev": true,
- "requires": {
- "lodash.clonedeep": "^4.5.0",
- "picocolors": "^1.0.0",
- "plugin-error": "^1.0.1",
- "replace-ext": "^2.0.0",
- "strip-ansi": "^6.0.1",
- "vinyl-sourcemaps-apply": "^0.2.1"
- }
- },
- "gulp-terser": {
- "version": "2.1.0",
- "resolved": "https://registry.npmjs.org/gulp-terser/-/gulp-terser-2.1.0.tgz",
- "integrity": "sha512-lQ3+JUdHDVISAlUIUSZ/G9Dz/rBQHxOiYDQ70IVWFQeh4b33TC1MCIU+K18w07PS3rq/CVc34aQO4SUbdaNMPQ==",
- "dev": true,
- "requires": {
- "plugin-error": "^1.0.1",
- "terser": "^5.9.0",
- "through2": "^4.0.2",
- "vinyl-sourcemaps-apply": "^0.2.1"
- }
- },
- "gulplog": {
- "version": "1.0.0",
- "resolved": "https://registry.npmjs.org/gulplog/-/gulplog-1.0.0.tgz",
- "integrity": "sha1-4oxNRdBey77YGDY86PnFkmIp/+U=",
- "dev": true,
- "requires": {
- "glogg": "^1.0.0"
- }
- },
- "has": {
- "version": "1.0.3",
- "resolved": "https://registry.npmjs.org/has/-/has-1.0.3.tgz",
- "integrity": "sha512-f2dvO0VU6Oej7RkWJGrehjbzMAjFp5/VKPp5tTpWIV4JHHZK1/BxbFRtf/siA2SWTe09caDmVtYYzWEIbBS4zw==",
- "dev": true,
- "requires": {
- "function-bind": "^1.1.1"
- }
- },
- "has-gulplog": {
- "version": "0.1.0",
- "resolved": "https://registry.npmjs.org/has-gulplog/-/has-gulplog-0.1.0.tgz",
- "integrity": "sha1-ZBTIKRNpfaUVkDl9r7EvIpZ4Ec4=",
- "dev": true,
- "requires": {
- "sparkles": "^1.0.0"
- }
- },
- "has-symbols": {
- "version": "1.0.2",
- "resolved": "https://registry.npmjs.org/has-symbols/-/has-symbols-1.0.2.tgz",
- "integrity": "sha512-chXa79rL/UC2KlX17jo3vRGz0azaWEx5tGqZg5pO3NUyEJVB17dMruQlzCCOfUvElghKcm5194+BCRvi2Rv/Gw==",
- "dev": true
- },
- "has-value": {
- "version": "1.0.0",
- "resolved": "https://registry.npmjs.org/has-value/-/has-value-1.0.0.tgz",
- "integrity": "sha1-GLKB2lhbHFxR3vJMkw7SmgvmsXc=",
- "dev": true,
- "requires": {
- "get-value": "^2.0.6",
- "has-values": "^1.0.0",
- "isobject": "^3.0.0"
- }
- },
- "has-values": {
- "version": "1.0.0",
- "resolved": "https://registry.npmjs.org/has-values/-/has-values-1.0.0.tgz",
- "integrity": "sha1-lbC2P+whRmGab+V/51Yo1aOe/k8=",
- "dev": true,
- "requires": {
- "is-number": "^3.0.0",
- "kind-of": "^4.0.0"
- },
- "dependencies": {
- "is-number": {
- "version": "3.0.0",
- "resolved": "https://registry.npmjs.org/is-number/-/is-number-3.0.0.tgz",
- "integrity": "sha1-JP1iAaR4LPUFYcgQJ2r8fRLXEZU=",
- "dev": true,
- "requires": {
- "kind-of": "^3.0.2"
- },
- "dependencies": {
- "kind-of": {
- "version": "3.2.2",
- "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz",
- "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=",
- "dev": true,
- "requires": {
- "is-buffer": "^1.1.5"
- }
- }
- }
- },
- "kind-of": {
- "version": "4.0.0",
- "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-4.0.0.tgz",
- "integrity": "sha1-IIE989cSkosgc3hpGkUGb65y3Vc=",
- "dev": true,
- "requires": {
- "is-buffer": "^1.1.5"
- }
- }
- }
- },
- "homedir-polyfill": {
- "version": "1.0.3",
- "resolved": "https://registry.npmjs.org/homedir-polyfill/-/homedir-polyfill-1.0.3.tgz",
- "integrity": "sha512-eSmmWE5bZTK2Nou4g0AI3zZ9rswp7GRKoKXS1BLUkvPviOqs4YTN1djQIqrXy9k5gEtdLPy86JjRwsNM9tnDcA==",
- "dev": true,
- "requires": {
- "parse-passwd": "^1.0.0"
- }
- },
- "hosted-git-info": {
- "version": "2.8.9",
- "resolved": "https://registry.npmjs.org/hosted-git-info/-/hosted-git-info-2.8.9.tgz",
- "integrity": "sha512-mxIDAb9Lsm6DoOJ7xH+5+X4y1LU/4Hi50L9C5sIswK3JzULS4bwk1FvjdBgvYR4bzT4tuUQiC15FE2f5HbLvYw==",
- "dev": true
- },
- "http-errors": {
- "version": "1.6.3",
- "resolved": "https://registry.npmjs.org/http-errors/-/http-errors-1.6.3.tgz",
- "integrity": "sha1-i1VoC7S+KDoLW/TqLjhYC+HZMg0=",
- "dev": true,
- "requires": {
- "depd": "~1.1.2",
- "inherits": "2.0.3",
- "setprototypeof": "1.1.0",
- "statuses": ">= 1.4.0 < 2"
- },
- "dependencies": {
- "inherits": {
- "version": "2.0.3",
- "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.3.tgz",
- "integrity": "sha1-Yzwsg+PaQqUC9SRmAiSA9CCCYd4=",
- "dev": true
- }
- }
- },
- "http-parser-js": {
- "version": "0.5.5",
- "resolved": "https://registry.npmjs.org/http-parser-js/-/http-parser-js-0.5.5.tgz",
- "integrity": "sha512-x+JVEkO2PoM8qqpbPbOL3cqHPwerep7OwzK7Ay+sMQjKzaKCqWvjoXm5tqMP9tXWWTnTzAjIhXg+J99XYuPhPA==",
- "dev": true
- },
- "immutable": {
- "version": "4.0.0",
- "resolved": "https://registry.npmjs.org/immutable/-/immutable-4.0.0.tgz",
- "integrity": "sha512-zIE9hX70qew5qTUjSS7wi1iwj/l7+m54KWU247nhM3v806UdGj1yDndXj+IOYxxtW9zyLI+xqFNZjTuDaLUqFw==",
- "dev": true
- },
- "inflight": {
- "version": "1.0.6",
- "resolved": "https://registry.npmjs.org/inflight/-/inflight-1.0.6.tgz",
- "integrity": "sha1-Sb1jMdfQLQwJvJEKEHW6gWW1bfk=",
- "dev": true,
- "requires": {
- "once": "^1.3.0",
- "wrappy": "1"
- }
- },
- "inherits": {
- "version": "2.0.4",
- "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.4.tgz",
- "integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==",
- "dev": true
- },
- "ini": {
- "version": "1.3.8",
- "resolved": "https://registry.npmjs.org/ini/-/ini-1.3.8.tgz",
- "integrity": "sha512-JV/yugV2uzW5iMRSiZAyDtQd+nxtUnjeLt0acNdw98kKLrvuRVyB80tsREOE7yvGVgalhZ6RNXCmEHkUKBKxew==",
- "dev": true
- },
- "interpret": {
- "version": "1.4.0",
- "resolved": "https://registry.npmjs.org/interpret/-/interpret-1.4.0.tgz",
- "integrity": "sha512-agE4QfB2Lkp9uICn7BAqoscw4SZP9kTE2hxiFI3jBPmXJfdqiahTbUuKGsMoN2GtqL9AxhYioAcVvgsb1HvRbA==",
- "dev": true
- },
- "invert-kv": {
- "version": "1.0.0",
- "resolved": "https://registry.npmjs.org/invert-kv/-/invert-kv-1.0.0.tgz",
- "integrity": "sha1-EEqOSqym09jNFXqO+L+rLXo//bY=",
- "dev": true
- },
- "is-absolute": {
- "version": "1.0.0",
- "resolved": "https://registry.npmjs.org/is-absolute/-/is-absolute-1.0.0.tgz",
- "integrity": "sha512-dOWoqflvcydARa360Gvv18DZ/gRuHKi2NU/wU5X1ZFzdYfH29nkiNZsF3mp4OJ3H4yo9Mx8A/uAGNzpzPN3yBA==",
- "dev": true,
- "requires": {
- "is-relative": "^1.0.0",
- "is-windows": "^1.0.1"
- }
- },
- "is-accessor-descriptor": {
- "version": "1.0.0",
- "resolved": "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-1.0.0.tgz",
- "integrity": "sha512-m5hnHTkcVsPfqx3AKlyttIPb7J+XykHvJP2B9bZDjlhLIoEq4XoK64Vg7boZlVWYK6LUY94dYPEE7Lh0ZkZKcQ==",
- "dev": true,
- "requires": {
- "kind-of": "^6.0.0"
- },
- "dependencies": {
- "kind-of": {
- "version": "6.0.3",
- "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-6.0.3.tgz",
- "integrity": "sha512-dcS1ul+9tmeD95T+x28/ehLgd9mENa3LsvDTtzm3vyBEO7RPptvAD+t44WVXaUjTBRcrpFeFlC8WCruUR456hw==",
- "dev": true
- }
- }
- },
- "is-arrayish": {
- "version": "0.2.1",
- "resolved": "https://registry.npmjs.org/is-arrayish/-/is-arrayish-0.2.1.tgz",
- "integrity": "sha1-d8mYQFJ6qOyxqLppe4BkWnqSap0=",
- "dev": true
- },
- "is-binary-path": {
- "version": "1.0.1",
- "resolved": "https://registry.npmjs.org/is-binary-path/-/is-binary-path-1.0.1.tgz",
- "integrity": "sha1-dfFmQrSA8YenEcgUFh/TpKdlWJg=",
- "dev": true,
- "requires": {
- "binary-extensions": "^1.0.0"
- }
- },
- "is-buffer": {
- "version": "1.1.6",
- "resolved": "https://registry.npmjs.org/is-buffer/-/is-buffer-1.1.6.tgz",
- "integrity": "sha512-NcdALwpXkTm5Zvvbk7owOUSvVvBKDgKP5/ewfXEznmQFfs4ZRmanOeKBTjRVjka3QFoN6XJ+9F3USqfHqTaU5w==",
- "dev": true
- },
- "is-core-module": {
- "version": "2.8.1",
- "resolved": "https://registry.npmjs.org/is-core-module/-/is-core-module-2.8.1.tgz",
- "integrity": "sha512-SdNCUs284hr40hFTFP6l0IfZ/RSrMXF3qgoRHd3/79unUTvrFO/JoXwkGm+5J/Oe3E/b5GsnG330uUNgRpu1PA==",
- "dev": true,
- "requires": {
- "has": "^1.0.3"
- }
- },
- "is-data-descriptor": {
- "version": "1.0.0",
- "resolved": "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-1.0.0.tgz",
- "integrity": "sha512-jbRXy1FmtAoCjQkVmIVYwuuqDFUbaOeDjmed1tOGPrsMhtJA4rD9tkgA0F1qJ3gRFRXcHYVkdeaP50Q5rE/jLQ==",
- "dev": true,
- "requires": {
- "kind-of": "^6.0.0"
- },
- "dependencies": {
- "kind-of": {
- "version": "6.0.3",
- "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-6.0.3.tgz",
- "integrity": "sha512-dcS1ul+9tmeD95T+x28/ehLgd9mENa3LsvDTtzm3vyBEO7RPptvAD+t44WVXaUjTBRcrpFeFlC8WCruUR456hw==",
- "dev": true
- }
- }
- },
- "is-descriptor": {
- "version": "1.0.2",
- "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-1.0.2.tgz",
- "integrity": "sha512-2eis5WqQGV7peooDyLmNEPUrps9+SXX5c9pL3xEB+4e9HnGuDa7mB7kHxHw4CbqS9k1T2hOH3miL8n8WtiYVtg==",
- "dev": true,
- "requires": {
- "is-accessor-descriptor": "^1.0.0",
- "is-data-descriptor": "^1.0.0",
- "kind-of": "^6.0.2"
- },
- "dependencies": {
- "kind-of": {
- "version": "6.0.3",
- "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-6.0.3.tgz",
- "integrity": "sha512-dcS1ul+9tmeD95T+x28/ehLgd9mENa3LsvDTtzm3vyBEO7RPptvAD+t44WVXaUjTBRcrpFeFlC8WCruUR456hw==",
- "dev": true
- }
- }
- },
- "is-extendable": {
- "version": "1.0.1",
- "resolved": "https://registry.npmjs.org/is-extendable/-/is-extendable-1.0.1.tgz",
- "integrity": "sha512-arnXMxT1hhoKo9k1LZdmlNyJdDDfy2v0fXjFlmok4+i8ul/6WlbVge9bhM74OpNPQPMGUToDtz+KXa1PneJxOA==",
- "dev": true,
- "requires": {
- "is-plain-object": "^2.0.4"
- }
- },
- "is-extglob": {
- "version": "2.1.1",
- "resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-2.1.1.tgz",
- "integrity": "sha1-qIwCU1eR8C7TfHahueqXc8gz+MI=",
- "dev": true
- },
- "is-fullwidth-code-point": {
- "version": "1.0.0",
- "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-1.0.0.tgz",
- "integrity": "sha1-754xOG8DGn8NZDr4L95QxFfvAMs=",
- "dev": true,
- "requires": {
- "number-is-nan": "^1.0.0"
- }
- },
- "is-glob": {
- "version": "4.0.3",
- "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-4.0.3.tgz",
- "integrity": "sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg==",
- "dev": true,
- "requires": {
- "is-extglob": "^2.1.1"
- }
- },
- "is-negated-glob": {
- "version": "1.0.0",
- "resolved": "https://registry.npmjs.org/is-negated-glob/-/is-negated-glob-1.0.0.tgz",
- "integrity": "sha1-aRC8pdqMleeEtXUbl2z1oQ/uNtI=",
- "dev": true
- },
- "is-number": {
- "version": "7.0.0",
- "resolved": "https://registry.npmjs.org/is-number/-/is-number-7.0.0.tgz",
- "integrity": "sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==",
- "dev": true
- },
- "is-plain-object": {
- "version": "2.0.4",
- "resolved": "https://registry.npmjs.org/is-plain-object/-/is-plain-object-2.0.4.tgz",
- "integrity": "sha512-h5PpgXkWitc38BBMYawTYMWJHFZJVnBquFE57xFpjB8pJFiF6gZ+bU+WyI/yqXiFR5mdLsgYNaPe8uao6Uv9Og==",
- "dev": true,
- "requires": {
- "isobject": "^3.0.1"
- }
- },
- "is-relative": {
- "version": "1.0.0",
- "resolved": "https://registry.npmjs.org/is-relative/-/is-relative-1.0.0.tgz",
- "integrity": "sha512-Kw/ReK0iqwKeu0MITLFuj0jbPAmEiOsIwyIXvvbfa6QfmN9pkD1M+8pdk7Rl/dTKbH34/XBFMbgD4iMJhLQbGA==",
- "dev": true,
- "requires": {
- "is-unc-path": "^1.0.0"
- }
- },
- "is-unc-path": {
- "version": "1.0.0",
- "resolved": "https://registry.npmjs.org/is-unc-path/-/is-unc-path-1.0.0.tgz",
- "integrity": "sha512-mrGpVd0fs7WWLfVsStvgF6iEJnbjDFZh9/emhRDcGWTduTfNHd9CHeUwH3gYIjdbwo4On6hunkztwOaAw0yllQ==",
- "dev": true,
- "requires": {
- "unc-path-regex": "^0.1.2"
- }
- },
- "is-utf8": {
- "version": "0.2.1",
- "resolved": "https://registry.npmjs.org/is-utf8/-/is-utf8-0.2.1.tgz",
- "integrity": "sha1-Sw2hRCEE0bM2NA6AeX6GXPOffXI=",
- "dev": true
- },
- "is-valid-glob": {
- "version": "1.0.0",
- "resolved": "https://registry.npmjs.org/is-valid-glob/-/is-valid-glob-1.0.0.tgz",
- "integrity": "sha1-Kb8+/3Ab4tTTFdusw5vDn+j2Aao=",
- "dev": true
- },
- "is-windows": {
- "version": "1.0.2",
- "resolved": "https://registry.npmjs.org/is-windows/-/is-windows-1.0.2.tgz",
- "integrity": "sha512-eXK1UInq2bPmjyX6e3VHIzMLobc4J94i4AWn+Hpq3OU5KkrRC96OAcR3PRJ/pGu6m8TRnBHP9dkXQVsT/COVIA==",
- "dev": true
- },
- "isarray": {
- "version": "1.0.0",
- "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz",
- "integrity": "sha1-u5NdSFgsuhaMBoNJV6VKPgcSTxE=",
- "dev": true
- },
- "isexe": {
- "version": "2.0.0",
- "resolved": "https://registry.npmjs.org/isexe/-/isexe-2.0.0.tgz",
- "integrity": "sha1-6PvzdNxVb/iUehDcsFctYz8s+hA=",
- "dev": true
- },
- "isobject": {
- "version": "3.0.1",
- "resolved": "https://registry.npmjs.org/isobject/-/isobject-3.0.1.tgz",
- "integrity": "sha1-TkMekrEalzFjaqH5yNHMvP2reN8=",
- "dev": true
- },
- "json-stable-stringify-without-jsonify": {
- "version": "1.0.1",
- "resolved": "https://registry.npmjs.org/json-stable-stringify-without-jsonify/-/json-stable-stringify-without-jsonify-1.0.1.tgz",
- "integrity": "sha1-nbe1lJatPzz+8wp1FC0tkwrXJlE=",
- "dev": true
- },
- "just-debounce": {
- "version": "1.1.0",
- "resolved": "https://registry.npmjs.org/just-debounce/-/just-debounce-1.1.0.tgz",
- "integrity": "sha512-qpcRocdkUmf+UTNBYx5w6dexX5J31AKK1OmPwH630a83DdVVUIngk55RSAiIGpQyoH0dlr872VHfPjnQnK1qDQ==",
- "dev": true
- },
- "kind-of": {
- "version": "5.1.0",
- "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-5.1.0.tgz",
- "integrity": "sha512-NGEErnH6F2vUuXDh+OlbcKW7/wOcfdRHaZ7VWtqCztfHri/++YKmP51OdWeGPuqCOba6kk2OTe5d02VmTB80Pw==",
- "dev": true
- },
- "last-run": {
- "version": "1.1.1",
- "resolved": "https://registry.npmjs.org/last-run/-/last-run-1.1.1.tgz",
- "integrity": "sha1-RblpQsF7HHnHchmCWbqUO+v4yls=",
- "dev": true,
- "requires": {
- "default-resolution": "^2.0.0",
- "es6-weak-map": "^2.0.1"
- }
- },
- "lazystream": {
- "version": "1.0.1",
- "resolved": "https://registry.npmjs.org/lazystream/-/lazystream-1.0.1.tgz",
- "integrity": "sha512-b94GiNHQNy6JNTrt5w6zNyffMrNkXZb3KTkCZJb2V1xaEGCk093vkZ2jk3tpaeP33/OiXC+WvK9AxUebnf5nbw==",
- "dev": true,
- "requires": {
- "readable-stream": "^2.0.5"
- },
- "dependencies": {
- "readable-stream": {
- "version": "2.3.7",
- "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.7.tgz",
- "integrity": "sha512-Ebho8K4jIbHAxnuxi7o42OrZgF/ZTNcsZj6nRKyUmkhLFq8CHItp/fy6hQZuZmP/n3yZ9VBUbp4zz/mX8hmYPw==",
- "dev": true,
- "requires": {
- "core-util-is": "~1.0.0",
- "inherits": "~2.0.3",
- "isarray": "~1.0.0",
- "process-nextick-args": "~2.0.0",
- "safe-buffer": "~5.1.1",
- "string_decoder": "~1.1.1",
- "util-deprecate": "~1.0.1"
- }
- },
- "safe-buffer": {
- "version": "5.1.2",
- "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz",
- "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==",
- "dev": true
- },
- "string_decoder": {
- "version": "1.1.1",
- "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz",
- "integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==",
- "dev": true,
- "requires": {
- "safe-buffer": "~5.1.0"
- }
- }
- }
- },
- "lcid": {
- "version": "1.0.0",
- "resolved": "https://registry.npmjs.org/lcid/-/lcid-1.0.0.tgz",
- "integrity": "sha1-MIrMr6C8SDo4Z7S28rlQYlHRuDU=",
- "dev": true,
- "requires": {
- "invert-kv": "^1.0.0"
- }
- },
- "lead": {
- "version": "1.0.0",
- "resolved": "https://registry.npmjs.org/lead/-/lead-1.0.0.tgz",
- "integrity": "sha1-bxT5mje+Op3XhPVJVpDlkDRm7kI=",
- "dev": true,
- "requires": {
- "flush-write-stream": "^1.0.2"
- }
- },
- "liftoff": {
- "version": "3.1.0",
- "resolved": "https://registry.npmjs.org/liftoff/-/liftoff-3.1.0.tgz",
- "integrity": "sha512-DlIPlJUkCV0Ips2zf2pJP0unEoT1kwYhiiPUGF3s/jtxTCjziNLoiVVh+jqWOWeFi6mmwQ5fNxvAUyPad4Dfog==",
- "dev": true,
- "requires": {
- "extend": "^3.0.0",
- "findup-sync": "^3.0.0",
- "fined": "^1.0.1",
- "flagged-respawn": "^1.0.0",
- "is-plain-object": "^2.0.4",
- "object.map": "^1.0.0",
- "rechoir": "^0.6.2",
- "resolve": "^1.1.7"
- },
- "dependencies": {
- "braces": {
- "version": "2.3.2",
- "resolved": "https://registry.npmjs.org/braces/-/braces-2.3.2.tgz",
- "integrity": "sha512-aNdbnj9P8PjdXU4ybaWLK2IF3jc/EoDYbC7AazW6to3TRsfXxscC9UXOB5iDiEQrkyIbWp2SLQda4+QAa7nc3w==",
- "dev": true,
- "requires": {
- "arr-flatten": "^1.1.0",
- "array-unique": "^0.3.2",
- "extend-shallow": "^2.0.1",
- "fill-range": "^4.0.0",
- "isobject": "^3.0.1",
- "repeat-element": "^1.1.2",
- "snapdragon": "^0.8.1",
- "snapdragon-node": "^2.0.1",
- "split-string": "^3.0.2",
- "to-regex": "^3.0.1"
- },
- "dependencies": {
- "extend-shallow": {
- "version": "2.0.1",
- "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz",
- "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=",
- "dev": true,
- "requires": {
- "is-extendable": "^0.1.0"
- }
- }
- }
- },
- "fill-range": {
- "version": "4.0.0",
- "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-4.0.0.tgz",
- "integrity": "sha1-1USBHUKPmOsGpj3EAtJAPDKMOPc=",
- "dev": true,
- "requires": {
- "extend-shallow": "^2.0.1",
- "is-number": "^3.0.0",
- "repeat-string": "^1.6.1",
- "to-regex-range": "^2.1.0"
- },
- "dependencies": {
- "extend-shallow": {
- "version": "2.0.1",
- "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz",
- "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=",
- "dev": true,
- "requires": {
- "is-extendable": "^0.1.0"
- }
- }
- }
- },
- "findup-sync": {
- "version": "3.0.0",
- "resolved": "https://registry.npmjs.org/findup-sync/-/findup-sync-3.0.0.tgz",
- "integrity": "sha512-YbffarhcicEhOrm4CtrwdKBdCuz576RLdhJDsIfvNtxUuhdRet1qZcsMjqbePtAseKdAnDyM/IyXbu7PRPRLYg==",
- "dev": true,
- "requires": {
- "detect-file": "^1.0.0",
- "is-glob": "^4.0.0",
- "micromatch": "^3.0.4",
- "resolve-dir": "^1.0.1"
- }
- },
- "is-extendable": {
- "version": "0.1.1",
- "resolved": "https://registry.npmjs.org/is-extendable/-/is-extendable-0.1.1.tgz",
- "integrity": "sha1-YrEQ4omkcUGOPsNqYX1HLjAd/Ik=",
- "dev": true
- },
- "is-number": {
- "version": "3.0.0",
- "resolved": "https://registry.npmjs.org/is-number/-/is-number-3.0.0.tgz",
- "integrity": "sha1-JP1iAaR4LPUFYcgQJ2r8fRLXEZU=",
- "dev": true,
- "requires": {
- "kind-of": "^3.0.2"
- },
- "dependencies": {
- "kind-of": {
- "version": "3.2.2",
- "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz",
- "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=",
- "dev": true,
- "requires": {
- "is-buffer": "^1.1.5"
- }
- }
- }
- },
- "kind-of": {
- "version": "6.0.3",
- "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-6.0.3.tgz",
- "integrity": "sha512-dcS1ul+9tmeD95T+x28/ehLgd9mENa3LsvDTtzm3vyBEO7RPptvAD+t44WVXaUjTBRcrpFeFlC8WCruUR456hw==",
- "dev": true
- },
- "micromatch": {
- "version": "3.1.10",
- "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-3.1.10.tgz",
- "integrity": "sha512-MWikgl9n9M3w+bpsY3He8L+w9eF9338xRl8IAO5viDizwSzziFEyUzo2xrrloB64ADbTf8uA8vRqqttDTOmccg==",
- "dev": true,
- "requires": {
- "arr-diff": "^4.0.0",
- "array-unique": "^0.3.2",
- "braces": "^2.3.1",
- "define-property": "^2.0.2",
- "extend-shallow": "^3.0.2",
- "extglob": "^2.0.4",
- "fragment-cache": "^0.2.1",
- "kind-of": "^6.0.2",
- "nanomatch": "^1.2.9",
- "object.pick": "^1.3.0",
- "regex-not": "^1.0.0",
- "snapdragon": "^0.8.1",
- "to-regex": "^3.0.2"
- }
- },
- "to-regex-range": {
- "version": "2.1.1",
- "resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-2.1.1.tgz",
- "integrity": "sha1-fIDBe53+vlmeJzZ+DU3VWQFB2zg=",
- "dev": true,
- "requires": {
- "is-number": "^3.0.0",
- "repeat-string": "^1.6.1"
- }
- }
- }
- },
- "livereload-js": {
- "version": "2.4.0",
- "resolved": "https://registry.npmjs.org/livereload-js/-/livereload-js-2.4.0.tgz",
- "integrity": "sha512-XPQH8Z2GDP/Hwz2PCDrh2mth4yFejwA1OZ/81Ti3LgKyhDcEjsSsqFWZojHG0va/duGd+WyosY7eXLDoOyqcPw==",
- "dev": true
- },
- "load-json-file": {
- "version": "1.1.0",
- "resolved": "https://registry.npmjs.org/load-json-file/-/load-json-file-1.1.0.tgz",
- "integrity": "sha1-lWkFcI1YtLq0wiYbBPWfMcmTdMA=",
- "dev": true,
- "requires": {
- "graceful-fs": "^4.1.2",
- "parse-json": "^2.2.0",
- "pify": "^2.0.0",
- "pinkie-promise": "^2.0.0",
- "strip-bom": "^2.0.0"
- }
- },
- "lodash.clonedeep": {
- "version": "4.5.0",
- "resolved": "https://registry.npmjs.org/lodash.clonedeep/-/lodash.clonedeep-4.5.0.tgz",
- "integrity": "sha1-4j8/nE+Pvd6HJSnBBxhXoIblzO8=",
- "dev": true
- },
- "make-iterator": {
- "version": "1.0.1",
- "resolved": "https://registry.npmjs.org/make-iterator/-/make-iterator-1.0.1.tgz",
- "integrity": "sha512-pxiuXh0iVEq7VM7KMIhs5gxsfxCux2URptUQaXo4iZZJxBAzTPOLE2BumO5dbfVYq/hBJFBR/a1mFDmOx5AGmw==",
- "dev": true,
- "requires": {
- "kind-of": "^6.0.2"
- },
- "dependencies": {
- "kind-of": {
- "version": "6.0.3",
- "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-6.0.3.tgz",
- "integrity": "sha512-dcS1ul+9tmeD95T+x28/ehLgd9mENa3LsvDTtzm3vyBEO7RPptvAD+t44WVXaUjTBRcrpFeFlC8WCruUR456hw==",
- "dev": true
- }
- }
- },
- "map-cache": {
- "version": "0.2.2",
- "resolved": "https://registry.npmjs.org/map-cache/-/map-cache-0.2.2.tgz",
- "integrity": "sha1-wyq9C9ZSXZsFFkW7TyasXcmKDb8=",
- "dev": true
- },
- "map-stream": {
- "version": "0.0.7",
- "resolved": "https://registry.npmjs.org/map-stream/-/map-stream-0.0.7.tgz",
- "integrity": "sha1-ih8HiW2CsQkmvTdEokIACfiJdKg=",
- "dev": true
- },
- "map-visit": {
- "version": "1.0.0",
- "resolved": "https://registry.npmjs.org/map-visit/-/map-visit-1.0.0.tgz",
- "integrity": "sha1-7Nyo8TFE5mDxtb1B8S80edmN+48=",
- "dev": true,
- "requires": {
- "object-visit": "^1.0.0"
- }
- },
- "matchdep": {
- "version": "2.0.0",
- "resolved": "https://registry.npmjs.org/matchdep/-/matchdep-2.0.0.tgz",
- "integrity": "sha1-xvNINKDY28OzfCfui7yyfHd1WC4=",
- "dev": true,
- "requires": {
- "findup-sync": "^2.0.0",
- "micromatch": "^3.0.4",
- "resolve": "^1.4.0",
- "stack-trace": "0.0.10"
- },
- "dependencies": {
- "braces": {
- "version": "2.3.2",
- "resolved": "https://registry.npmjs.org/braces/-/braces-2.3.2.tgz",
- "integrity": "sha512-aNdbnj9P8PjdXU4ybaWLK2IF3jc/EoDYbC7AazW6to3TRsfXxscC9UXOB5iDiEQrkyIbWp2SLQda4+QAa7nc3w==",
- "dev": true,
- "requires": {
- "arr-flatten": "^1.1.0",
- "array-unique": "^0.3.2",
- "extend-shallow": "^2.0.1",
- "fill-range": "^4.0.0",
- "isobject": "^3.0.1",
- "repeat-element": "^1.1.2",
- "snapdragon": "^0.8.1",
- "snapdragon-node": "^2.0.1",
- "split-string": "^3.0.2",
- "to-regex": "^3.0.1"
- },
- "dependencies": {
- "extend-shallow": {
- "version": "2.0.1",
- "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz",
- "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=",
- "dev": true,
- "requires": {
- "is-extendable": "^0.1.0"
- }
- }
- }
- },
- "fill-range": {
- "version": "4.0.0",
- "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-4.0.0.tgz",
- "integrity": "sha1-1USBHUKPmOsGpj3EAtJAPDKMOPc=",
- "dev": true,
- "requires": {
- "extend-shallow": "^2.0.1",
- "is-number": "^3.0.0",
- "repeat-string": "^1.6.1",
- "to-regex-range": "^2.1.0"
- },
- "dependencies": {
- "extend-shallow": {
- "version": "2.0.1",
- "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz",
- "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=",
- "dev": true,
- "requires": {
- "is-extendable": "^0.1.0"
- }
- }
- }
- },
- "findup-sync": {
- "version": "2.0.0",
- "resolved": "https://registry.npmjs.org/findup-sync/-/findup-sync-2.0.0.tgz",
- "integrity": "sha1-kyaxSIwi0aYIhlCoaQGy2akKLLw=",
- "dev": true,
- "requires": {
- "detect-file": "^1.0.0",
- "is-glob": "^3.1.0",
- "micromatch": "^3.0.4",
- "resolve-dir": "^1.0.1"
- }
- },
- "is-extendable": {
- "version": "0.1.1",
- "resolved": "https://registry.npmjs.org/is-extendable/-/is-extendable-0.1.1.tgz",
- "integrity": "sha1-YrEQ4omkcUGOPsNqYX1HLjAd/Ik=",
- "dev": true
- },
- "is-glob": {
- "version": "3.1.0",
- "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-3.1.0.tgz",
- "integrity": "sha1-e6WuJCF4BKxwcHuWkiVnSGzD6Eo=",
- "dev": true,
- "requires": {
- "is-extglob": "^2.1.0"
- }
- },
- "is-number": {
- "version": "3.0.0",
- "resolved": "https://registry.npmjs.org/is-number/-/is-number-3.0.0.tgz",
- "integrity": "sha1-JP1iAaR4LPUFYcgQJ2r8fRLXEZU=",
- "dev": true,
- "requires": {
- "kind-of": "^3.0.2"
- },
- "dependencies": {
- "kind-of": {
- "version": "3.2.2",
- "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz",
- "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=",
- "dev": true,
- "requires": {
- "is-buffer": "^1.1.5"
- }
- }
- }
- },
- "kind-of": {
- "version": "6.0.3",
- "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-6.0.3.tgz",
- "integrity": "sha512-dcS1ul+9tmeD95T+x28/ehLgd9mENa3LsvDTtzm3vyBEO7RPptvAD+t44WVXaUjTBRcrpFeFlC8WCruUR456hw==",
- "dev": true
- },
- "micromatch": {
- "version": "3.1.10",
- "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-3.1.10.tgz",
- "integrity": "sha512-MWikgl9n9M3w+bpsY3He8L+w9eF9338xRl8IAO5viDizwSzziFEyUzo2xrrloB64ADbTf8uA8vRqqttDTOmccg==",
- "dev": true,
- "requires": {
- "arr-diff": "^4.0.0",
- "array-unique": "^0.3.2",
- "braces": "^2.3.1",
- "define-property": "^2.0.2",
- "extend-shallow": "^3.0.2",
- "extglob": "^2.0.4",
- "fragment-cache": "^0.2.1",
- "kind-of": "^6.0.2",
- "nanomatch": "^1.2.9",
- "object.pick": "^1.3.0",
- "regex-not": "^1.0.0",
- "snapdragon": "^0.8.1",
- "to-regex": "^3.0.2"
- }
- },
- "to-regex-range": {
- "version": "2.1.1",
- "resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-2.1.1.tgz",
- "integrity": "sha1-fIDBe53+vlmeJzZ+DU3VWQFB2zg=",
- "dev": true,
- "requires": {
- "is-number": "^3.0.0",
- "repeat-string": "^1.6.1"
- }
- }
- }
- },
- "micromatch": {
- "version": "4.0.4",
- "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-4.0.4.tgz",
- "integrity": "sha512-pRmzw/XUcwXGpD9aI9q/0XOwLNygjETJ8y0ao0wdqprrzDa4YnxLcz7fQRZr8voh8V10kGhABbNcHVk5wHgWwg==",
- "dev": true,
- "requires": {
- "braces": "^3.0.1",
- "picomatch": "^2.2.3"
- }
- },
- "mime": {
- "version": "1.4.1",
- "resolved": "https://registry.npmjs.org/mime/-/mime-1.4.1.tgz",
- "integrity": "sha512-KI1+qOZu5DcW6wayYHSzR/tXKCDC5Om4s1z2QJjDULzLcmf3DvzS7oluY4HCTrc+9FiKmWUgeNLg7W3uIQvxtQ==",
- "dev": true
- },
- "mime-db": {
- "version": "1.51.0",
- "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.51.0.tgz",
- "integrity": "sha512-5y8A56jg7XVQx2mbv1lu49NR4dokRnhZYTtL+KGfaa27uq4pSTXkwQkFJl4pkRMyNFz/EtYDSkiiEHx3F7UN6g==",
- "dev": true
- },
- "mime-types": {
- "version": "2.1.34",
- "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.34.tgz",
- "integrity": "sha512-6cP692WwGIs9XXdOO4++N+7qjqv0rqxxVvJ3VHPh/Sc9mVZcQP+ZGhkKiTvWMQRr2tbHkJP/Yn7Y0npb3ZBs4A==",
- "dev": true,
- "requires": {
- "mime-db": "1.51.0"
- }
- },
- "minimatch": {
- "version": "3.0.4",
- "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.0.4.tgz",
- "integrity": "sha512-yJHVQEhyqPLUTgt9B83PXu6W3rx4MvvHvSUvToogpwoGDOUQ+yDrR0HRot+yOCdCO7u4hX3pWft6kWBBcqh0UA==",
- "dev": true,
- "requires": {
- "brace-expansion": "^1.1.7"
- }
- },
- "mixin-deep": {
- "version": "1.3.2",
- "resolved": "https://registry.npmjs.org/mixin-deep/-/mixin-deep-1.3.2.tgz",
- "integrity": "sha512-WRoDn//mXBiJ1H40rqa3vH0toePwSsGb45iInWlTySa+Uu4k3tYUSxa2v1KqAiLtvlrSzaExqS1gtk96A9zvEA==",
- "dev": true,
- "requires": {
- "for-in": "^1.0.2",
- "is-extendable": "^1.0.1"
- }
- },
- "ms": {
- "version": "2.0.0",
- "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz",
- "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=",
- "dev": true
- },
- "mute-stdout": {
- "version": "1.0.1",
- "resolved": "https://registry.npmjs.org/mute-stdout/-/mute-stdout-1.0.1.tgz",
- "integrity": "sha512-kDcwXR4PS7caBpuRYYBUz9iVixUk3anO3f5OYFiIPwK/20vCzKCHyKoulbiDY1S53zD2bxUpxN/IJ+TnXjfvxg==",
- "dev": true
- },
- "nan": {
- "version": "2.15.0",
- "resolved": "https://registry.npmjs.org/nan/-/nan-2.15.0.tgz",
- "integrity": "sha512-8ZtvEnA2c5aYCZYd1cvgdnU6cqwixRoYg70xPLWUws5ORTa/lnw+u4amixRS/Ac5U5mQVgp9pnlSUnbNWFaWZQ==",
- "dev": true,
- "optional": true
- },
- "nanoid": {
- "version": "3.2.0",
- "resolved": "https://registry.npmjs.org/nanoid/-/nanoid-3.2.0.tgz",
- "integrity": "sha512-fmsZYa9lpn69Ad5eDn7FMcnnSR+8R34W9qJEijxYhTbfOWzr22n1QxCMzXLK+ODyW2973V3Fux959iQoUxzUIA==",
- "dev": true
- },
- "nanomatch": {
- "version": "1.2.13",
- "resolved": "https://registry.npmjs.org/nanomatch/-/nanomatch-1.2.13.tgz",
- "integrity": "sha512-fpoe2T0RbHwBTBUOftAfBPaDEi06ufaUai0mE6Yn1kacc3SnTErfb/h+X94VXzI64rKFHYImXSvdwGGCmwOqCA==",
- "dev": true,
- "requires": {
- "arr-diff": "^4.0.0",
- "array-unique": "^0.3.2",
- "define-property": "^2.0.2",
- "extend-shallow": "^3.0.2",
- "fragment-cache": "^0.2.1",
- "is-windows": "^1.0.2",
- "kind-of": "^6.0.2",
- "object.pick": "^1.3.0",
- "regex-not": "^1.0.0",
- "snapdragon": "^0.8.1",
- "to-regex": "^3.0.1"
- },
- "dependencies": {
- "kind-of": {
- "version": "6.0.3",
- "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-6.0.3.tgz",
- "integrity": "sha512-dcS1ul+9tmeD95T+x28/ehLgd9mENa3LsvDTtzm3vyBEO7RPptvAD+t44WVXaUjTBRcrpFeFlC8WCruUR456hw==",
- "dev": true
- }
- }
- },
- "negotiator": {
- "version": "0.6.2",
- "resolved": "https://registry.npmjs.org/negotiator/-/negotiator-0.6.2.tgz",
- "integrity": "sha512-hZXc7K2e+PgeI1eDBe/10Ard4ekbfrrqG8Ep+8Jmf4JID2bNg7NvCPOZN+kfF574pFQI7mum2AUqDidoKqcTOw==",
- "dev": true
- },
- "next-tick": {
- "version": "1.0.0",
- "resolved": "https://registry.npmjs.org/next-tick/-/next-tick-1.0.0.tgz",
- "integrity": "sha1-yobR/ogoFpsBICCOPchCS524NCw=",
- "dev": true
- },
- "node-releases": {
- "version": "2.0.1",
- "resolved": "https://registry.npmjs.org/node-releases/-/node-releases-2.0.1.tgz",
- "integrity": "sha512-CqyzN6z7Q6aMeF/ktcMVTzhAHCEpf8SOarwpzpf8pNBY2k5/oM34UHldUwp8VKI7uxct2HxSRdJjBaZeESzcxA==",
- "dev": true
- },
- "normalize-package-data": {
- "version": "2.5.0",
- "resolved": "https://registry.npmjs.org/normalize-package-data/-/normalize-package-data-2.5.0.tgz",
- "integrity": "sha512-/5CMN3T0R4XTj4DcGaexo+roZSdSFW/0AOOTROrjxzCG1wrWXEsGbRKevjlIL+ZDE4sZlJr5ED4YW0yqmkK+eA==",
- "dev": true,
- "requires": {
- "hosted-git-info": "^2.1.4",
- "resolve": "^1.10.0",
- "semver": "2 || 3 || 4 || 5",
- "validate-npm-package-license": "^3.0.1"
- }
- },
- "normalize-path": {
- "version": "3.0.0",
- "resolved": "https://registry.npmjs.org/normalize-path/-/normalize-path-3.0.0.tgz",
- "integrity": "sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA==",
- "dev": true
- },
- "normalize-range": {
- "version": "0.1.2",
- "resolved": "https://registry.npmjs.org/normalize-range/-/normalize-range-0.1.2.tgz",
- "integrity": "sha1-LRDAa9/TEuqXd2laTShDlFa3WUI=",
- "dev": true
- },
- "now-and-later": {
- "version": "2.0.1",
- "resolved": "https://registry.npmjs.org/now-and-later/-/now-and-later-2.0.1.tgz",
- "integrity": "sha512-KGvQ0cB70AQfg107Xvs/Fbu+dGmZoTRJp2TaPwcwQm3/7PteUyN2BCgk8KBMPGBUXZdVwyWS8fDCGFygBm19UQ==",
- "dev": true,
- "requires": {
- "once": "^1.3.2"
- }
- },
- "number-is-nan": {
- "version": "1.0.1",
- "resolved": "https://registry.npmjs.org/number-is-nan/-/number-is-nan-1.0.1.tgz",
- "integrity": "sha1-CXtgK1NCKlIsGvuHkDGDNpQaAR0=",
- "dev": true
- },
- "object-assign": {
- "version": "4.1.1",
- "resolved": "https://registry.npmjs.org/object-assign/-/object-assign-4.1.1.tgz",
- "integrity": "sha1-IQmtx5ZYh8/AXLvUQsrIv7s2CGM=",
- "dev": true
- },
- "object-copy": {
- "version": "0.1.0",
- "resolved": "https://registry.npmjs.org/object-copy/-/object-copy-0.1.0.tgz",
- "integrity": "sha1-fn2Fi3gb18mRpBupde04EnVOmYw=",
- "dev": true,
- "requires": {
- "copy-descriptor": "^0.1.0",
- "define-property": "^0.2.5",
- "kind-of": "^3.0.3"
- },
- "dependencies": {
- "define-property": {
- "version": "0.2.5",
- "resolved": "https://registry.npmjs.org/define-property/-/define-property-0.2.5.tgz",
- "integrity": "sha1-w1se+RjsPJkPmlvFe+BKrOxcgRY=",
- "dev": true,
- "requires": {
- "is-descriptor": "^0.1.0"
- }
- },
- "is-accessor-descriptor": {
- "version": "0.1.6",
- "resolved": "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-0.1.6.tgz",
- "integrity": "sha1-qeEss66Nh2cn7u84Q/igiXtcmNY=",
- "dev": true,
- "requires": {
- "kind-of": "^3.0.2"
- }
- },
- "is-data-descriptor": {
- "version": "0.1.4",
- "resolved": "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-0.1.4.tgz",
- "integrity": "sha1-C17mSDiOLIYCgueT8YVv7D8wG1Y=",
- "dev": true,
- "requires": {
- "kind-of": "^3.0.2"
- }
- },
- "is-descriptor": {
- "version": "0.1.6",
- "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-0.1.6.tgz",
- "integrity": "sha512-avDYr0SB3DwO9zsMov0gKCESFYqCnE4hq/4z3TdUlukEy5t9C0YRq7HLrsN52NAcqXKaepeCD0n+B0arnVG3Hg==",
- "dev": true,
- "requires": {
- "is-accessor-descriptor": "^0.1.6",
- "is-data-descriptor": "^0.1.4",
- "kind-of": "^5.0.0"
- },
- "dependencies": {
- "kind-of": {
- "version": "5.1.0",
- "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-5.1.0.tgz",
- "integrity": "sha512-NGEErnH6F2vUuXDh+OlbcKW7/wOcfdRHaZ7VWtqCztfHri/++YKmP51OdWeGPuqCOba6kk2OTe5d02VmTB80Pw==",
- "dev": true
- }
- }
- },
- "kind-of": {
- "version": "3.2.2",
- "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz",
- "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=",
- "dev": true,
- "requires": {
- "is-buffer": "^1.1.5"
- }
- }
- }
- },
- "object-inspect": {
- "version": "1.12.0",
- "resolved": "https://registry.npmjs.org/object-inspect/-/object-inspect-1.12.0.tgz",
- "integrity": "sha512-Ho2z80bVIvJloH+YzRmpZVQe87+qASmBUKZDWgx9cu+KDrX2ZDH/3tMy+gXbZETVGs2M8YdxObOh7XAtim9Y0g==",
- "dev": true
- },
- "object-keys": {
- "version": "1.1.1",
- "resolved": "https://registry.npmjs.org/object-keys/-/object-keys-1.1.1.tgz",
- "integrity": "sha512-NuAESUOUMrlIXOfHKzD6bpPu3tYt3xvjNdRIQ+FeT0lNb4K8WR70CaDxhuNguS2XG+GjkyMwOzsN5ZktImfhLA==",
- "dev": true
- },
- "object-visit": {
- "version": "1.0.1",
- "resolved": "https://registry.npmjs.org/object-visit/-/object-visit-1.0.1.tgz",
- "integrity": "sha1-95xEk68MU3e1n+OdOV5BBC3QRbs=",
- "dev": true,
- "requires": {
- "isobject": "^3.0.0"
- }
- },
- "object.assign": {
- "version": "4.1.2",
- "resolved": "https://registry.npmjs.org/object.assign/-/object.assign-4.1.2.tgz",
- "integrity": "sha512-ixT2L5THXsApyiUPYKmW+2EHpXXe5Ii3M+f4e+aJFAHao5amFRW6J0OO6c/LU8Be47utCx2GL89hxGB6XSmKuQ==",
- "dev": true,
- "requires": {
- "call-bind": "^1.0.0",
- "define-properties": "^1.1.3",
- "has-symbols": "^1.0.1",
- "object-keys": "^1.1.1"
- }
- },
- "object.defaults": {
- "version": "1.1.0",
- "resolved": "https://registry.npmjs.org/object.defaults/-/object.defaults-1.1.0.tgz",
- "integrity": "sha1-On+GgzS0B96gbaFtiNXNKeQ1/s8=",
- "dev": true,
- "requires": {
- "array-each": "^1.0.1",
- "array-slice": "^1.0.0",
- "for-own": "^1.0.0",
- "isobject": "^3.0.0"
- }
- },
- "object.map": {
- "version": "1.0.1",
- "resolved": "https://registry.npmjs.org/object.map/-/object.map-1.0.1.tgz",
- "integrity": "sha1-z4Plncj8wK1fQlDh94s7gb2AHTc=",
- "dev": true,
- "requires": {
- "for-own": "^1.0.0",
- "make-iterator": "^1.0.0"
- }
- },
- "object.pick": {
- "version": "1.3.0",
- "resolved": "https://registry.npmjs.org/object.pick/-/object.pick-1.3.0.tgz",
- "integrity": "sha1-h6EKxMFpS9Lhy/U1kaZhQftd10c=",
- "dev": true,
- "requires": {
- "isobject": "^3.0.1"
- }
- },
- "object.reduce": {
- "version": "1.0.1",
- "resolved": "https://registry.npmjs.org/object.reduce/-/object.reduce-1.0.1.tgz",
- "integrity": "sha1-b+NI8qx/oPlcpiEiZZkJaCW7A60=",
- "dev": true,
- "requires": {
- "for-own": "^1.0.0",
- "make-iterator": "^1.0.0"
- }
- },
- "on-finished": {
- "version": "2.3.0",
- "resolved": "https://registry.npmjs.org/on-finished/-/on-finished-2.3.0.tgz",
- "integrity": "sha1-IPEzZIGwg811M3mSoWlxqi2QaUc=",
- "dev": true,
- "requires": {
- "ee-first": "1.1.1"
- }
- },
- "once": {
- "version": "1.4.0",
- "resolved": "https://registry.npmjs.org/once/-/once-1.4.0.tgz",
- "integrity": "sha1-WDsap3WWHUsROsF9nFC6753Xa9E=",
- "dev": true,
- "requires": {
- "wrappy": "1"
- }
- },
- "ordered-read-streams": {
- "version": "1.0.1",
- "resolved": "https://registry.npmjs.org/ordered-read-streams/-/ordered-read-streams-1.0.1.tgz",
- "integrity": "sha1-d8DLN8QVJdZBZtmQ/61+xqDhNj4=",
- "dev": true,
- "requires": {
- "readable-stream": "^2.0.1"
- },
- "dependencies": {
- "readable-stream": {
- "version": "2.3.7",
- "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.7.tgz",
- "integrity": "sha512-Ebho8K4jIbHAxnuxi7o42OrZgF/ZTNcsZj6nRKyUmkhLFq8CHItp/fy6hQZuZmP/n3yZ9VBUbp4zz/mX8hmYPw==",
- "dev": true,
- "requires": {
- "core-util-is": "~1.0.0",
- "inherits": "~2.0.3",
- "isarray": "~1.0.0",
- "process-nextick-args": "~2.0.0",
- "safe-buffer": "~5.1.1",
- "string_decoder": "~1.1.1",
- "util-deprecate": "~1.0.1"
- }
- },
- "safe-buffer": {
- "version": "5.1.2",
- "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz",
- "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==",
- "dev": true
- },
- "string_decoder": {
- "version": "1.1.1",
- "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz",
- "integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==",
- "dev": true,
- "requires": {
- "safe-buffer": "~5.1.0"
- }
- }
- }
- },
- "os-locale": {
- "version": "1.4.0",
- "resolved": "https://registry.npmjs.org/os-locale/-/os-locale-1.4.0.tgz",
- "integrity": "sha1-IPnxeuKe00XoveWDsT0gCYA8FNk=",
- "dev": true,
- "requires": {
- "lcid": "^1.0.0"
- }
- },
- "parse-filepath": {
- "version": "1.0.2",
- "resolved": "https://registry.npmjs.org/parse-filepath/-/parse-filepath-1.0.2.tgz",
- "integrity": "sha1-pjISf1Oq89FYdvWHLz/6x2PWyJE=",
- "dev": true,
- "requires": {
- "is-absolute": "^1.0.0",
- "map-cache": "^0.2.0",
- "path-root": "^0.1.1"
- }
- },
- "parse-json": {
- "version": "2.2.0",
- "resolved": "https://registry.npmjs.org/parse-json/-/parse-json-2.2.0.tgz",
- "integrity": "sha1-9ID0BDTvgHQfhGkJn43qGPVaTck=",
- "dev": true,
- "requires": {
- "error-ex": "^1.2.0"
- }
- },
- "parse-node-version": {
- "version": "1.0.1",
- "resolved": "https://registry.npmjs.org/parse-node-version/-/parse-node-version-1.0.1.tgz",
- "integrity": "sha512-3YHlOa/JgH6Mnpr05jP9eDG254US9ek25LyIxZlDItp2iJtwyaXQb57lBYLdT3MowkUFYEV2XXNAYIPlESvJlA==",
- "dev": true
- },
- "parse-passwd": {
- "version": "1.0.0",
- "resolved": "https://registry.npmjs.org/parse-passwd/-/parse-passwd-1.0.0.tgz",
- "integrity": "sha1-bVuTSkVpk7I9N/QKOC1vFmao5cY=",
- "dev": true
- },
- "parseurl": {
- "version": "1.3.3",
- "resolved": "https://registry.npmjs.org/parseurl/-/parseurl-1.3.3.tgz",
- "integrity": "sha512-CiyeOxFT/JZyN5m0z9PfXw4SCBJ6Sygz1Dpl0wqjlhDEGGBP1GnsUVEL0p63hoG1fcj3fHynXi9NYO4nWOL+qQ==",
- "dev": true
- },
- "pascalcase": {
- "version": "0.1.1",
- "resolved": "https://registry.npmjs.org/pascalcase/-/pascalcase-0.1.1.tgz",
- "integrity": "sha1-s2PlXoAGym/iF4TS2yK9FdeRfxQ=",
- "dev": true
- },
- "path-dirname": {
- "version": "1.0.2",
- "resolved": "https://registry.npmjs.org/path-dirname/-/path-dirname-1.0.2.tgz",
- "integrity": "sha1-zDPSTVJeCZpTiMAzbG4yuRYGCeA=",
- "dev": true
- },
- "path-exists": {
- "version": "2.1.0",
- "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-2.1.0.tgz",
- "integrity": "sha1-D+tsZPD8UY2adU3V77YscCJ2H0s=",
- "dev": true,
- "requires": {
- "pinkie-promise": "^2.0.0"
- }
- },
- "path-is-absolute": {
- "version": "1.0.1",
- "resolved": "https://registry.npmjs.org/path-is-absolute/-/path-is-absolute-1.0.1.tgz",
- "integrity": "sha1-F0uSaHNVNP+8es5r9TpanhtcX18=",
- "dev": true
- },
- "path-parse": {
- "version": "1.0.7",
- "resolved": "https://registry.npmjs.org/path-parse/-/path-parse-1.0.7.tgz",
- "integrity": "sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw==",
- "dev": true
- },
- "path-root": {
- "version": "0.1.1",
- "resolved": "https://registry.npmjs.org/path-root/-/path-root-0.1.1.tgz",
- "integrity": "sha1-mkpoFMrBwM1zNgqV8yCDyOpHRbc=",
- "dev": true,
- "requires": {
- "path-root-regex": "^0.1.0"
- }
- },
- "path-root-regex": {
- "version": "0.1.2",
- "resolved": "https://registry.npmjs.org/path-root-regex/-/path-root-regex-0.1.2.tgz",
- "integrity": "sha1-v8zcjfWxLcUsi0PsONGNcsBLqW0=",
- "dev": true
- },
- "path-type": {
- "version": "1.1.0",
- "resolved": "https://registry.npmjs.org/path-type/-/path-type-1.1.0.tgz",
- "integrity": "sha1-WcRPfuSR2nBNpBXaWkBwuk+P5EE=",
- "dev": true,
- "requires": {
- "graceful-fs": "^4.1.2",
- "pify": "^2.0.0",
- "pinkie-promise": "^2.0.0"
- }
- },
- "picocolors": {
- "version": "1.0.0",
- "resolved": "https://registry.npmjs.org/picocolors/-/picocolors-1.0.0.tgz",
- "integrity": "sha512-1fygroTLlHu66zi26VoTDv8yRgm0Fccecssto+MhsZ0D/DGW2sm8E8AjW7NU5VVTRt5GxbeZ5qBuJr+HyLYkjQ==",
- "dev": true
- },
- "picomatch": {
- "version": "2.3.1",
- "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-2.3.1.tgz",
- "integrity": "sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==",
- "dev": true
- },
- "pify": {
- "version": "2.3.0",
- "resolved": "https://registry.npmjs.org/pify/-/pify-2.3.0.tgz",
- "integrity": "sha1-7RQaasBDqEnqWISY59yosVMw6Qw=",
- "dev": true
- },
- "pinkie": {
- "version": "2.0.4",
- "resolved": "https://registry.npmjs.org/pinkie/-/pinkie-2.0.4.tgz",
- "integrity": "sha1-clVrgM+g1IqXToDnckjoDtT3+HA=",
- "dev": true
- },
- "pinkie-promise": {
- "version": "2.0.1",
- "resolved": "https://registry.npmjs.org/pinkie-promise/-/pinkie-promise-2.0.1.tgz",
- "integrity": "sha1-ITXW36ejWMBprJsXh3YogihFD/o=",
- "dev": true,
- "requires": {
- "pinkie": "^2.0.0"
- }
- },
- "plugin-error": {
- "version": "1.0.1",
- "resolved": "https://registry.npmjs.org/plugin-error/-/plugin-error-1.0.1.tgz",
- "integrity": "sha512-L1zP0dk7vGweZME2i+EeakvUNqSrdiI3F91TwEoYiGrAfUXmVv6fJIq4g82PAXxNsWOp0J7ZqQy/3Szz0ajTxA==",
- "dev": true,
- "requires": {
- "ansi-colors": "^1.0.1",
- "arr-diff": "^4.0.0",
- "arr-union": "^3.1.0",
- "extend-shallow": "^3.0.2"
- }
- },
- "posix-character-classes": {
- "version": "0.1.1",
- "resolved": "https://registry.npmjs.org/posix-character-classes/-/posix-character-classes-0.1.1.tgz",
- "integrity": "sha1-AerA/jta9xoqbAL+q7jB/vfgDqs=",
- "dev": true
- },
- "postcss": {
- "version": "8.4.5",
- "resolved": "https://registry.npmjs.org/postcss/-/postcss-8.4.5.tgz",
- "integrity": "sha512-jBDboWM8qpaqwkMwItqTQTiFikhs/67OYVvblFFTM7MrZjt6yMKd6r2kgXizEbTTljacm4NldIlZnhbjr84QYg==",
- "dev": true,
- "requires": {
- "nanoid": "^3.1.30",
- "picocolors": "^1.0.0",
- "source-map-js": "^1.0.1"
- }
- },
- "postcss-value-parser": {
- "version": "4.2.0",
- "resolved": "https://registry.npmjs.org/postcss-value-parser/-/postcss-value-parser-4.2.0.tgz",
- "integrity": "sha512-1NNCs6uurfkVbeXG4S8JFT9t19m45ICnif8zWLd5oPSZ50QnwMfK+H3jv408d4jw/7Bttv5axS5IiHoLaVNHeQ==",
- "dev": true
- },
- "pretty-hrtime": {
- "version": "1.0.3",
- "resolved": "https://registry.npmjs.org/pretty-hrtime/-/pretty-hrtime-1.0.3.tgz",
- "integrity": "sha1-t+PqQkNaTJsnWdmeDyAesZWALuE=",
- "dev": true
- },
- "process-nextick-args": {
- "version": "2.0.1",
- "resolved": "https://registry.npmjs.org/process-nextick-args/-/process-nextick-args-2.0.1.tgz",
- "integrity": "sha512-3ouUOpQhtgrbOa17J7+uxOTpITYWaGP7/AhoR3+A+/1e9skrzelGi/dXzEYyvbxubEF6Wn2ypscTKiKJFFn1ag==",
- "dev": true
- },
- "pump": {
- "version": "2.0.1",
- "resolved": "https://registry.npmjs.org/pump/-/pump-2.0.1.tgz",
- "integrity": "sha512-ruPMNRkN3MHP1cWJc9OWr+T/xDP0jhXYCLfJcBuX54hhfIBnaQmAUMfDcG4DM5UMWByBbJY69QSphm3jtDKIkA==",
- "dev": true,
- "requires": {
- "end-of-stream": "^1.1.0",
- "once": "^1.3.1"
- }
- },
- "pumpify": {
- "version": "1.5.1",
- "resolved": "https://registry.npmjs.org/pumpify/-/pumpify-1.5.1.tgz",
- "integrity": "sha512-oClZI37HvuUJJxSKKrC17bZ9Cu0ZYhEAGPsPUy9KlMUmv9dKX2o77RUmq7f3XjIxbwyGwYzbzQ1L2Ks8sIradQ==",
- "dev": true,
- "requires": {
- "duplexify": "^3.6.0",
- "inherits": "^2.0.3",
- "pump": "^2.0.0"
- }
- },
- "qs": {
- "version": "6.10.3",
- "resolved": "https://registry.npmjs.org/qs/-/qs-6.10.3.tgz",
- "integrity": "sha512-wr7M2E0OFRfIfJZjKGieI8lBKb7fRCH4Fv5KNPEs7gJ8jadvotdsS08PzOKR7opXhZ/Xkjtt3WF9g38drmyRqQ==",
- "dev": true,
- "requires": {
- "side-channel": "^1.0.4"
- }
- },
- "range-parser": {
- "version": "1.2.1",
- "resolved": "https://registry.npmjs.org/range-parser/-/range-parser-1.2.1.tgz",
- "integrity": "sha512-Hrgsx+orqoygnmhFbKaHE6c296J+HTAQXoxEF6gNupROmmGJRoyzfG3ccAveqCBrwr/2yxQ5BVd/GTl5agOwSg==",
- "dev": true
- },
- "raw-body": {
- "version": "1.1.7",
- "resolved": "https://registry.npmjs.org/raw-body/-/raw-body-1.1.7.tgz",
- "integrity": "sha1-HQJ8K/oRasxmI7yo8AAWVyqH1CU=",
- "dev": true,
- "requires": {
- "bytes": "1",
- "string_decoder": "0.10"
- },
- "dependencies": {
- "string_decoder": {
- "version": "0.10.31",
- "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-0.10.31.tgz",
- "integrity": "sha1-YuIDvEF2bGwoyfyEMB2rHFMQ+pQ=",
- "dev": true
- }
- }
- },
- "read-pkg": {
- "version": "1.1.0",
- "resolved": "https://registry.npmjs.org/read-pkg/-/read-pkg-1.1.0.tgz",
- "integrity": "sha1-9f+qXs0pyzHAR0vKfXVra7KePyg=",
- "dev": true,
- "requires": {
- "load-json-file": "^1.0.0",
- "normalize-package-data": "^2.3.2",
- "path-type": "^1.0.0"
- }
- },
- "read-pkg-up": {
- "version": "1.0.1",
- "resolved": "https://registry.npmjs.org/read-pkg-up/-/read-pkg-up-1.0.1.tgz",
- "integrity": "sha1-nWPBMnbAZZGNV/ACpX9AobZD+wI=",
- "dev": true,
- "requires": {
- "find-up": "^1.0.0",
- "read-pkg": "^1.0.0"
- }
- },
- "readable-stream": {
- "version": "3.6.0",
- "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-3.6.0.tgz",
- "integrity": "sha512-BViHy7LKeTz4oNnkcLJ+lVSL6vpiFeX6/d3oSH8zCW7UxP2onchk+vTGB143xuFjHS3deTgkKoXXymXqymiIdA==",
- "dev": true,
- "requires": {
- "inherits": "^2.0.3",
- "string_decoder": "^1.1.1",
- "util-deprecate": "^1.0.1"
- }
- },
- "readdirp": {
- "version": "2.2.1",
- "resolved": "https://registry.npmjs.org/readdirp/-/readdirp-2.2.1.tgz",
- "integrity": "sha512-1JU/8q+VgFZyxwrJ+SVIOsh+KywWGpds3NTqikiKpDMZWScmAYyKIgqkO+ARvNWJfXeXR1zxz7aHF4u4CyH6vQ==",
- "dev": true,
- "requires": {
- "graceful-fs": "^4.1.11",
- "micromatch": "^3.1.10",
- "readable-stream": "^2.0.2"
- },
- "dependencies": {
- "braces": {
- "version": "2.3.2",
- "resolved": "https://registry.npmjs.org/braces/-/braces-2.3.2.tgz",
- "integrity": "sha512-aNdbnj9P8PjdXU4ybaWLK2IF3jc/EoDYbC7AazW6to3TRsfXxscC9UXOB5iDiEQrkyIbWp2SLQda4+QAa7nc3w==",
- "dev": true,
- "requires": {
- "arr-flatten": "^1.1.0",
- "array-unique": "^0.3.2",
- "extend-shallow": "^2.0.1",
- "fill-range": "^4.0.0",
- "isobject": "^3.0.1",
- "repeat-element": "^1.1.2",
- "snapdragon": "^0.8.1",
- "snapdragon-node": "^2.0.1",
- "split-string": "^3.0.2",
- "to-regex": "^3.0.1"
- },
- "dependencies": {
- "extend-shallow": {
- "version": "2.0.1",
- "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz",
- "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=",
- "dev": true,
- "requires": {
- "is-extendable": "^0.1.0"
- }
- }
- }
- },
- "fill-range": {
- "version": "4.0.0",
- "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-4.0.0.tgz",
- "integrity": "sha1-1USBHUKPmOsGpj3EAtJAPDKMOPc=",
- "dev": true,
- "requires": {
- "extend-shallow": "^2.0.1",
- "is-number": "^3.0.0",
- "repeat-string": "^1.6.1",
- "to-regex-range": "^2.1.0"
- },
- "dependencies": {
- "extend-shallow": {
- "version": "2.0.1",
- "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz",
- "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=",
- "dev": true,
- "requires": {
- "is-extendable": "^0.1.0"
- }
- }
- }
- },
- "is-extendable": {
- "version": "0.1.1",
- "resolved": "https://registry.npmjs.org/is-extendable/-/is-extendable-0.1.1.tgz",
- "integrity": "sha1-YrEQ4omkcUGOPsNqYX1HLjAd/Ik=",
- "dev": true
- },
- "is-number": {
- "version": "3.0.0",
- "resolved": "https://registry.npmjs.org/is-number/-/is-number-3.0.0.tgz",
- "integrity": "sha1-JP1iAaR4LPUFYcgQJ2r8fRLXEZU=",
- "dev": true,
- "requires": {
- "kind-of": "^3.0.2"
- },
- "dependencies": {
- "kind-of": {
- "version": "3.2.2",
- "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz",
- "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=",
- "dev": true,
- "requires": {
- "is-buffer": "^1.1.5"
- }
- }
- }
- },
- "kind-of": {
- "version": "6.0.3",
- "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-6.0.3.tgz",
- "integrity": "sha512-dcS1ul+9tmeD95T+x28/ehLgd9mENa3LsvDTtzm3vyBEO7RPptvAD+t44WVXaUjTBRcrpFeFlC8WCruUR456hw==",
- "dev": true
- },
- "micromatch": {
- "version": "3.1.10",
- "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-3.1.10.tgz",
- "integrity": "sha512-MWikgl9n9M3w+bpsY3He8L+w9eF9338xRl8IAO5viDizwSzziFEyUzo2xrrloB64ADbTf8uA8vRqqttDTOmccg==",
- "dev": true,
- "requires": {
- "arr-diff": "^4.0.0",
- "array-unique": "^0.3.2",
- "braces": "^2.3.1",
- "define-property": "^2.0.2",
- "extend-shallow": "^3.0.2",
- "extglob": "^2.0.4",
- "fragment-cache": "^0.2.1",
- "kind-of": "^6.0.2",
- "nanomatch": "^1.2.9",
- "object.pick": "^1.3.0",
- "regex-not": "^1.0.0",
- "snapdragon": "^0.8.1",
- "to-regex": "^3.0.2"
- }
- },
- "readable-stream": {
- "version": "2.3.7",
- "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.7.tgz",
- "integrity": "sha512-Ebho8K4jIbHAxnuxi7o42OrZgF/ZTNcsZj6nRKyUmkhLFq8CHItp/fy6hQZuZmP/n3yZ9VBUbp4zz/mX8hmYPw==",
- "dev": true,
- "requires": {
- "core-util-is": "~1.0.0",
- "inherits": "~2.0.3",
- "isarray": "~1.0.0",
- "process-nextick-args": "~2.0.0",
- "safe-buffer": "~5.1.1",
- "string_decoder": "~1.1.1",
- "util-deprecate": "~1.0.1"
- }
- },
- "safe-buffer": {
- "version": "5.1.2",
- "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz",
- "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==",
- "dev": true
- },
- "string_decoder": {
- "version": "1.1.1",
- "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz",
- "integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==",
- "dev": true,
- "requires": {
- "safe-buffer": "~5.1.0"
- }
- },
- "to-regex-range": {
- "version": "2.1.1",
- "resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-2.1.1.tgz",
- "integrity": "sha1-fIDBe53+vlmeJzZ+DU3VWQFB2zg=",
- "dev": true,
- "requires": {
- "is-number": "^3.0.0",
- "repeat-string": "^1.6.1"
- }
- }
- }
- },
- "rechoir": {
- "version": "0.6.2",
- "resolved": "https://registry.npmjs.org/rechoir/-/rechoir-0.6.2.tgz",
- "integrity": "sha1-hSBLVNuoLVdC4oyWdW70OvUOM4Q=",
- "dev": true,
- "requires": {
- "resolve": "^1.1.6"
- }
- },
- "regex-not": {
- "version": "1.0.2",
- "resolved": "https://registry.npmjs.org/regex-not/-/regex-not-1.0.2.tgz",
- "integrity": "sha512-J6SDjUgDxQj5NusnOtdFxDwN/+HWykR8GELwctJ7mdqhcyy1xEc4SRFHUXvxTp661YaVKAjfRLZ9cCqS6tn32A==",
- "dev": true,
- "requires": {
- "extend-shallow": "^3.0.2",
- "safe-regex": "^1.1.0"
- }
- },
- "remove-bom-buffer": {
- "version": "3.0.0",
- "resolved": "https://registry.npmjs.org/remove-bom-buffer/-/remove-bom-buffer-3.0.0.tgz",
- "integrity": "sha512-8v2rWhaakv18qcvNeli2mZ/TMTL2nEyAKRvzo1WtnZBl15SHyEhrCu2/xKlJyUFKHiHgfXIyuY6g2dObJJycXQ==",
- "dev": true,
- "requires": {
- "is-buffer": "^1.1.5",
- "is-utf8": "^0.2.1"
- }
- },
- "remove-bom-stream": {
- "version": "1.2.0",
- "resolved": "https://registry.npmjs.org/remove-bom-stream/-/remove-bom-stream-1.2.0.tgz",
- "integrity": "sha1-BfGlk/FuQuH7kOv1nejlaVJflSM=",
- "dev": true,
- "requires": {
- "remove-bom-buffer": "^3.0.0",
- "safe-buffer": "^5.1.0",
- "through2": "^2.0.3"
- },
- "dependencies": {
- "readable-stream": {
- "version": "2.3.7",
- "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.7.tgz",
- "integrity": "sha512-Ebho8K4jIbHAxnuxi7o42OrZgF/ZTNcsZj6nRKyUmkhLFq8CHItp/fy6hQZuZmP/n3yZ9VBUbp4zz/mX8hmYPw==",
- "dev": true,
- "requires": {
- "core-util-is": "~1.0.0",
- "inherits": "~2.0.3",
- "isarray": "~1.0.0",
- "process-nextick-args": "~2.0.0",
- "safe-buffer": "~5.1.1",
- "string_decoder": "~1.1.1",
- "util-deprecate": "~1.0.1"
- }
- },
- "safe-buffer": {
- "version": "5.1.2",
- "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz",
- "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==",
- "dev": true
- },
- "string_decoder": {
- "version": "1.1.1",
- "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz",
- "integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==",
- "dev": true,
- "requires": {
- "safe-buffer": "~5.1.0"
- }
- },
- "through2": {
- "version": "2.0.5",
- "resolved": "https://registry.npmjs.org/through2/-/through2-2.0.5.tgz",
- "integrity": "sha512-/mrRod8xqpA+IHSLyGCQ2s8SPHiCDEeQJSep1jqLYeEUClOFG2Qsh+4FU6G9VeqpZnGW/Su8LQGc4YKni5rYSQ==",
- "dev": true,
- "requires": {
- "readable-stream": "~2.3.6",
- "xtend": "~4.0.1"
- }
- }
- }
- },
- "remove-trailing-separator": {
- "version": "1.1.0",
- "resolved": "https://registry.npmjs.org/remove-trailing-separator/-/remove-trailing-separator-1.1.0.tgz",
- "integrity": "sha1-wkvOKig62tW8P1jg1IJJuSN52O8=",
- "dev": true
- },
- "repeat-element": {
- "version": "1.1.4",
- "resolved": "https://registry.npmjs.org/repeat-element/-/repeat-element-1.1.4.tgz",
- "integrity": "sha512-LFiNfRcSu7KK3evMyYOuCzv3L10TW7yC1G2/+StMjK8Y6Vqd2MG7r/Qjw4ghtuCOjFvlnms/iMmLqpvW/ES/WQ==",
- "dev": true
- },
- "repeat-string": {
- "version": "1.6.1",
- "resolved": "https://registry.npmjs.org/repeat-string/-/repeat-string-1.6.1.tgz",
- "integrity": "sha1-jcrkcOHIirwtYA//Sndihtp15jc=",
- "dev": true
- },
- "replace-ext": {
- "version": "2.0.0",
- "resolved": "https://registry.npmjs.org/replace-ext/-/replace-ext-2.0.0.tgz",
- "integrity": "sha512-UszKE5KVK6JvyD92nzMn9cDapSk6w/CaFZ96CnmDMUqH9oowfxF/ZjRITD25H4DnOQClLA4/j7jLGXXLVKxAug==",
- "dev": true
- },
- "replace-homedir": {
- "version": "1.0.0",
- "resolved": "https://registry.npmjs.org/replace-homedir/-/replace-homedir-1.0.0.tgz",
- "integrity": "sha1-6H9tUTuSjd6AgmDBK+f+xv9ueYw=",
- "dev": true,
- "requires": {
- "homedir-polyfill": "^1.0.1",
- "is-absolute": "^1.0.0",
- "remove-trailing-separator": "^1.1.0"
- }
- },
- "require-directory": {
- "version": "2.1.1",
- "resolved": "https://registry.npmjs.org/require-directory/-/require-directory-2.1.1.tgz",
- "integrity": "sha1-jGStX9MNqxyXbiNE/+f3kqam30I=",
- "dev": true
- },
- "require-main-filename": {
- "version": "1.0.1",
- "resolved": "https://registry.npmjs.org/require-main-filename/-/require-main-filename-1.0.1.tgz",
- "integrity": "sha1-l/cXtp1IeE9fUmpsWqj/3aBVpNE=",
- "dev": true
- },
- "resolve": {
- "version": "1.22.0",
- "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.22.0.tgz",
- "integrity": "sha512-Hhtrw0nLeSrFQ7phPp4OOcVjLPIeMnRlr5mcnVuMe7M/7eBn98A3hmFRLoFo3DLZkivSYwhRUJTyPyWAk56WLw==",
- "dev": true,
- "requires": {
- "is-core-module": "^2.8.1",
- "path-parse": "^1.0.7",
- "supports-preserve-symlinks-flag": "^1.0.0"
- }
- },
- "resolve-dir": {
- "version": "1.0.1",
- "resolved": "https://registry.npmjs.org/resolve-dir/-/resolve-dir-1.0.1.tgz",
- "integrity": "sha1-eaQGRMNivoLybv/nOcm7U4IEb0M=",
- "dev": true,
- "requires": {
- "expand-tilde": "^2.0.0",
- "global-modules": "^1.0.0"
- }
- },
- "resolve-options": {
- "version": "1.1.0",
- "resolved": "https://registry.npmjs.org/resolve-options/-/resolve-options-1.1.0.tgz",
- "integrity": "sha1-MrueOcBtZzONyTeMDW1gdFZq0TE=",
- "dev": true,
- "requires": {
- "value-or-function": "^3.0.0"
- }
- },
- "resolve-url": {
- "version": "0.2.1",
- "resolved": "https://registry.npmjs.org/resolve-url/-/resolve-url-0.2.1.tgz",
- "integrity": "sha1-LGN/53yJOv0qZj/iGqkIAGjiBSo=",
- "dev": true
- },
- "ret": {
- "version": "0.1.15",
- "resolved": "https://registry.npmjs.org/ret/-/ret-0.1.15.tgz",
- "integrity": "sha512-TTlYpa+OL+vMMNG24xSlQGEJ3B/RzEfUlLct7b5G/ytav+wPrplCpVMFuwzXbkecJrb6IYo1iFb0S9v37754mg==",
- "dev": true
- },
- "safe-buffer": {
- "version": "5.2.1",
- "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.2.1.tgz",
- "integrity": "sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ==",
- "dev": true
- },
- "safe-json-parse": {
- "version": "1.0.1",
- "resolved": "https://registry.npmjs.org/safe-json-parse/-/safe-json-parse-1.0.1.tgz",
- "integrity": "sha1-PnZyPjjf3aE8mx0poeB//uSzC1c=",
- "dev": true
- },
- "safe-regex": {
- "version": "1.1.0",
- "resolved": "https://registry.npmjs.org/safe-regex/-/safe-regex-1.1.0.tgz",
- "integrity": "sha1-QKNmnzsHfR6UPURinhV91IAjvy4=",
- "dev": true,
- "requires": {
- "ret": "~0.1.10"
- }
- },
- "sass": {
- "version": "1.49.0",
- "resolved": "https://registry.npmjs.org/sass/-/sass-1.49.0.tgz",
- "integrity": "sha512-TVwVdNDj6p6b4QymJtNtRS2YtLJ/CqZriGg0eIAbAKMlN8Xy6kbv33FsEZSF7FufFFM705SQviHjjThfaQ4VNw==",
- "dev": true,
- "requires": {
- "chokidar": ">=3.0.0 <4.0.0",
- "immutable": "^4.0.0",
- "source-map-js": ">=0.6.2 <2.0.0"
- },
- "dependencies": {
- "anymatch": {
- "version": "3.1.2",
- "resolved": "https://registry.npmjs.org/anymatch/-/anymatch-3.1.2.tgz",
- "integrity": "sha512-P43ePfOAIupkguHUycrc4qJ9kz8ZiuOUijaETwX7THt0Y/GNK7v0aa8rY816xWjZ7rJdA5XdMcpVFTKMq+RvWg==",
- "dev": true,
- "requires": {
- "normalize-path": "^3.0.0",
- "picomatch": "^2.0.4"
- }
- },
- "binary-extensions": {
- "version": "2.2.0",
- "resolved": "https://registry.npmjs.org/binary-extensions/-/binary-extensions-2.2.0.tgz",
- "integrity": "sha512-jDctJ/IVQbZoJykoeHbhXpOlNBqGNcwXJKJog42E5HDPUwQTSdjCHdihjj0DlnheQ7blbT6dHOafNAiS8ooQKA==",
- "dev": true
- },
- "chokidar": {
- "version": "3.5.3",
- "resolved": "https://registry.npmjs.org/chokidar/-/chokidar-3.5.3.tgz",
- "integrity": "sha512-Dr3sfKRP6oTcjf2JmUmFJfeVMvXBdegxB0iVQ5eb2V10uFJUCAS8OByZdVAyVb8xXNz3GjjTgj9kLWsZTqE6kw==",
- "dev": true,
- "requires": {
- "anymatch": "~3.1.2",
- "braces": "~3.0.2",
- "fsevents": "~2.3.2",
- "glob-parent": "~5.1.2",
- "is-binary-path": "~2.1.0",
- "is-glob": "~4.0.1",
- "normalize-path": "~3.0.0",
- "readdirp": "~3.6.0"
- }
- },
- "fsevents": {
- "version": "2.3.2",
- "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-2.3.2.tgz",
- "integrity": "sha512-xiqMQR4xAeHTuB9uWm+fFRcIOgKBMiOBP+eXiyT7jsgVCq1bkVygt00oASowB7EdtpOHaaPgKt812P9ab+DDKA==",
- "dev": true,
- "optional": true
- },
- "glob-parent": {
- "version": "5.1.2",
- "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-5.1.2.tgz",
- "integrity": "sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==",
- "dev": true,
- "requires": {
- "is-glob": "^4.0.1"
- }
- },
- "is-binary-path": {
- "version": "2.1.0",
- "resolved": "https://registry.npmjs.org/is-binary-path/-/is-binary-path-2.1.0.tgz",
- "integrity": "sha512-ZMERYes6pDydyuGidse7OsHxtbI7WVeUEozgR/g7rd0xUimYNlvZRE/K2MgZTjWy725IfelLeVcEM97mmtRGXw==",
- "dev": true,
- "requires": {
- "binary-extensions": "^2.0.0"
- }
- },
- "readdirp": {
- "version": "3.6.0",
- "resolved": "https://registry.npmjs.org/readdirp/-/readdirp-3.6.0.tgz",
- "integrity": "sha512-hOS089on8RduqdbhvQ5Z37A0ESjsqz6qnRcffsMU3495FuTdqSm+7bhJ29JvIOsBDEEnan5DPu9t3To9VRlMzA==",
- "dev": true,
- "requires": {
- "picomatch": "^2.2.1"
- }
- }
- }
- },
- "semver": {
- "version": "5.7.1",
- "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.1.tgz",
- "integrity": "sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ==",
- "dev": true
- },
- "semver-greatest-satisfied-range": {
- "version": "1.1.0",
- "resolved": "https://registry.npmjs.org/semver-greatest-satisfied-range/-/semver-greatest-satisfied-range-1.1.0.tgz",
- "integrity": "sha1-E+jCZYq5aRywzXEJMkAoDTb3els=",
- "dev": true,
- "requires": {
- "sver-compat": "^1.5.0"
- }
- },
- "send": {
- "version": "0.16.2",
- "resolved": "https://registry.npmjs.org/send/-/send-0.16.2.tgz",
- "integrity": "sha512-E64YFPUssFHEFBvpbbjr44NCLtI1AohxQ8ZSiJjQLskAdKuriYEP6VyGEsRDH8ScozGpkaX1BGvhanqCwkcEZw==",
- "dev": true,
- "requires": {
- "debug": "2.6.9",
- "depd": "~1.1.2",
- "destroy": "~1.0.4",
- "encodeurl": "~1.0.2",
- "escape-html": "~1.0.3",
- "etag": "~1.8.1",
- "fresh": "0.5.2",
- "http-errors": "~1.6.2",
- "mime": "1.4.1",
- "ms": "2.0.0",
- "on-finished": "~2.3.0",
- "range-parser": "~1.2.0",
- "statuses": "~1.4.0"
- },
- "dependencies": {
- "statuses": {
- "version": "1.4.0",
- "resolved": "https://registry.npmjs.org/statuses/-/statuses-1.4.0.tgz",
- "integrity": "sha512-zhSCtt8v2NDrRlPQpCNtw/heZLtfUDqxBM1udqikb/Hbk52LK4nQSwr10u77iopCW5LsyHpuXS0GnEc48mLeew==",
- "dev": true
- }
- }
- },
- "serve-index": {
- "version": "1.9.1",
- "resolved": "https://registry.npmjs.org/serve-index/-/serve-index-1.9.1.tgz",
- "integrity": "sha1-03aNabHn2C5c4FD/9bRTvqEqkjk=",
- "dev": true,
- "requires": {
- "accepts": "~1.3.4",
- "batch": "0.6.1",
- "debug": "2.6.9",
- "escape-html": "~1.0.3",
- "http-errors": "~1.6.2",
- "mime-types": "~2.1.17",
- "parseurl": "~1.3.2"
- }
- },
- "serve-static": {
- "version": "1.14.2",
- "resolved": "https://registry.npmjs.org/serve-static/-/serve-static-1.14.2.tgz",
- "integrity": "sha512-+TMNA9AFxUEGuC0z2mevogSnn9MXKb4fa7ngeRMJaaGv8vTwnIEkKi+QGvPt33HSnf8pRS+WGM0EbMtCJLKMBQ==",
- "dev": true,
- "requires": {
- "encodeurl": "~1.0.2",
- "escape-html": "~1.0.3",
- "parseurl": "~1.3.3",
- "send": "0.17.2"
- },
- "dependencies": {
- "http-errors": {
- "version": "1.8.1",
- "resolved": "https://registry.npmjs.org/http-errors/-/http-errors-1.8.1.tgz",
- "integrity": "sha512-Kpk9Sm7NmI+RHhnj6OIWDI1d6fIoFAtFt9RLaTMRlg/8w49juAStsrBgp0Dp4OdxdVbRIeKhtCUvoi/RuAhO4g==",
- "dev": true,
- "requires": {
- "depd": "~1.1.2",
- "inherits": "2.0.4",
- "setprototypeof": "1.2.0",
- "statuses": ">= 1.5.0 < 2",
- "toidentifier": "1.0.1"
- }
- },
- "mime": {
- "version": "1.6.0",
- "resolved": "https://registry.npmjs.org/mime/-/mime-1.6.0.tgz",
- "integrity": "sha512-x0Vn8spI+wuJ1O6S7gnbaQg8Pxh4NNHb7KSINmEWKiPE4RKOplvijn+NkmYmmRgP68mc70j2EbeTFRsrswaQeg==",
- "dev": true
- },
- "ms": {
- "version": "2.1.3",
- "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.3.tgz",
- "integrity": "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==",
- "dev": true
- },
- "send": {
- "version": "0.17.2",
- "resolved": "https://registry.npmjs.org/send/-/send-0.17.2.tgz",
- "integrity": "sha512-UJYB6wFSJE3G00nEivR5rgWp8c2xXvJ3OPWPhmuteU0IKj8nKbG3DrjiOmLwpnHGYWAVwA69zmTm++YG0Hmwww==",
- "dev": true,
- "requires": {
- "debug": "2.6.9",
- "depd": "~1.1.2",
- "destroy": "~1.0.4",
- "encodeurl": "~1.0.2",
- "escape-html": "~1.0.3",
- "etag": "~1.8.1",
- "fresh": "0.5.2",
- "http-errors": "1.8.1",
- "mime": "1.6.0",
- "ms": "2.1.3",
- "on-finished": "~2.3.0",
- "range-parser": "~1.2.1",
- "statuses": "~1.5.0"
- }
- },
- "setprototypeof": {
- "version": "1.2.0",
- "resolved": "https://registry.npmjs.org/setprototypeof/-/setprototypeof-1.2.0.tgz",
- "integrity": "sha512-E5LDX7Wrp85Kil5bhZv46j8jOeboKq5JMmYM3gVGdGH8xFpPWXUMsNrlODCrkoxMEeNi/XZIwuRvY4XNwYMJpw==",
- "dev": true
- }
- }
- },
- "set-blocking": {
- "version": "2.0.0",
- "resolved": "https://registry.npmjs.org/set-blocking/-/set-blocking-2.0.0.tgz",
- "integrity": "sha1-BF+XgtARrppoA93TgrJDkrPYkPc=",
- "dev": true
- },
- "set-value": {
- "version": "2.0.1",
- "resolved": "https://registry.npmjs.org/set-value/-/set-value-2.0.1.tgz",
- "integrity": "sha512-JxHc1weCN68wRY0fhCoXpyK55m/XPHafOmK4UWD7m2CI14GMcFypt4w/0+NV5f/ZMby2F6S2wwA7fgynh9gWSw==",
- "dev": true,
- "requires": {
- "extend-shallow": "^2.0.1",
- "is-extendable": "^0.1.1",
- "is-plain-object": "^2.0.3",
- "split-string": "^3.0.1"
- },
- "dependencies": {
- "extend-shallow": {
- "version": "2.0.1",
- "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz",
- "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=",
- "dev": true,
- "requires": {
- "is-extendable": "^0.1.0"
- }
- },
- "is-extendable": {
- "version": "0.1.1",
- "resolved": "https://registry.npmjs.org/is-extendable/-/is-extendable-0.1.1.tgz",
- "integrity": "sha1-YrEQ4omkcUGOPsNqYX1HLjAd/Ik=",
- "dev": true
- }
- }
- },
- "setprototypeof": {
- "version": "1.1.0",
- "resolved": "https://registry.npmjs.org/setprototypeof/-/setprototypeof-1.1.0.tgz",
- "integrity": "sha512-BvE/TwpZX4FXExxOxZyRGQQv651MSwmWKZGqvmPcRIjDqWub67kTKuIMx43cZZrS/cBBzwBcNDWoFxt2XEFIpQ==",
- "dev": true
- },
- "side-channel": {
- "version": "1.0.4",
- "resolved": "https://registry.npmjs.org/side-channel/-/side-channel-1.0.4.tgz",
- "integrity": "sha512-q5XPytqFEIKHkGdiMIrY10mvLRvnQh42/+GoBlFW3b2LXLE2xxJpZFdm94we0BaoV3RwJyGqg5wS7epxTv0Zvw==",
- "dev": true,
- "requires": {
- "call-bind": "^1.0.0",
- "get-intrinsic": "^1.0.2",
- "object-inspect": "^1.9.0"
- }
- },
- "snapdragon": {
- "version": "0.8.2",
- "resolved": "https://registry.npmjs.org/snapdragon/-/snapdragon-0.8.2.tgz",
- "integrity": "sha512-FtyOnWN/wCHTVXOMwvSv26d+ko5vWlIDD6zoUJ7LW8vh+ZBC8QdljveRP+crNrtBwioEUWy/4dMtbBjA4ioNlg==",
- "dev": true,
- "requires": {
- "base": "^0.11.1",
- "debug": "^2.2.0",
- "define-property": "^0.2.5",
- "extend-shallow": "^2.0.1",
- "map-cache": "^0.2.2",
- "source-map": "^0.5.6",
- "source-map-resolve": "^0.5.0",
- "use": "^3.1.0"
- },
- "dependencies": {
- "define-property": {
- "version": "0.2.5",
- "resolved": "https://registry.npmjs.org/define-property/-/define-property-0.2.5.tgz",
- "integrity": "sha1-w1se+RjsPJkPmlvFe+BKrOxcgRY=",
- "dev": true,
- "requires": {
- "is-descriptor": "^0.1.0"
- }
- },
- "extend-shallow": {
- "version": "2.0.1",
- "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz",
- "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=",
- "dev": true,
- "requires": {
- "is-extendable": "^0.1.0"
- }
- },
- "is-accessor-descriptor": {
- "version": "0.1.6",
- "resolved": "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-0.1.6.tgz",
- "integrity": "sha1-qeEss66Nh2cn7u84Q/igiXtcmNY=",
- "dev": true,
- "requires": {
- "kind-of": "^3.0.2"
- },
- "dependencies": {
- "kind-of": {
- "version": "3.2.2",
- "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz",
- "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=",
- "dev": true,
- "requires": {
- "is-buffer": "^1.1.5"
- }
- }
- }
- },
- "is-data-descriptor": {
- "version": "0.1.4",
- "resolved": "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-0.1.4.tgz",
- "integrity": "sha1-C17mSDiOLIYCgueT8YVv7D8wG1Y=",
- "dev": true,
- "requires": {
- "kind-of": "^3.0.2"
- },
- "dependencies": {
- "kind-of": {
- "version": "3.2.2",
- "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz",
- "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=",
- "dev": true,
- "requires": {
- "is-buffer": "^1.1.5"
- }
- }
- }
- },
- "is-descriptor": {
- "version": "0.1.6",
- "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-0.1.6.tgz",
- "integrity": "sha512-avDYr0SB3DwO9zsMov0gKCESFYqCnE4hq/4z3TdUlukEy5t9C0YRq7HLrsN52NAcqXKaepeCD0n+B0arnVG3Hg==",
- "dev": true,
- "requires": {
- "is-accessor-descriptor": "^0.1.6",
- "is-data-descriptor": "^0.1.4",
- "kind-of": "^5.0.0"
- }
- },
- "is-extendable": {
- "version": "0.1.1",
- "resolved": "https://registry.npmjs.org/is-extendable/-/is-extendable-0.1.1.tgz",
- "integrity": "sha1-YrEQ4omkcUGOPsNqYX1HLjAd/Ik=",
- "dev": true
- }
- }
- },
- "snapdragon-node": {
- "version": "2.1.1",
- "resolved": "https://registry.npmjs.org/snapdragon-node/-/snapdragon-node-2.1.1.tgz",
- "integrity": "sha512-O27l4xaMYt/RSQ5TR3vpWCAB5Kb/czIcqUFOM/C4fYcLnbZUc1PkjTAMjof2pBWaSTwOUd6qUHcFGVGj7aIwnw==",
- "dev": true,
- "requires": {
- "define-property": "^1.0.0",
- "isobject": "^3.0.0",
- "snapdragon-util": "^3.0.1"
- },
- "dependencies": {
- "define-property": {
- "version": "1.0.0",
- "resolved": "https://registry.npmjs.org/define-property/-/define-property-1.0.0.tgz",
- "integrity": "sha1-dp66rz9KY6rTr56NMEybvnm/sOY=",
- "dev": true,
- "requires": {
- "is-descriptor": "^1.0.0"
- }
- }
- }
- },
- "snapdragon-util": {
- "version": "3.0.1",
- "resolved": "https://registry.npmjs.org/snapdragon-util/-/snapdragon-util-3.0.1.tgz",
- "integrity": "sha512-mbKkMdQKsjX4BAL4bRYTj21edOf8cN7XHdYUJEe+Zn99hVEYcMvKPct1IqNe7+AZPirn8BCDOQBHQZknqmKlZQ==",
- "dev": true,
- "requires": {
- "kind-of": "^3.2.0"
- },
- "dependencies": {
- "kind-of": {
- "version": "3.2.2",
- "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz",
- "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=",
- "dev": true,
- "requires": {
- "is-buffer": "^1.1.5"
- }
- }
- }
- },
- "source-map": {
- "version": "0.5.7",
- "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.5.7.tgz",
- "integrity": "sha1-igOdLRAh0i0eoUyA2OpGi6LvP8w=",
- "dev": true
- },
- "source-map-js": {
- "version": "1.0.2",
- "resolved": "https://registry.npmjs.org/source-map-js/-/source-map-js-1.0.2.tgz",
- "integrity": "sha512-R0XvVJ9WusLiqTCEiGCmICCMplcCkIwwR11mOSD9CR5u+IXYdiseeEuXCVAjS54zqwkLcPNnmU4OeJ6tUrWhDw==",
- "dev": true
- },
- "source-map-resolve": {
- "version": "0.5.3",
- "resolved": "https://registry.npmjs.org/source-map-resolve/-/source-map-resolve-0.5.3.tgz",
- "integrity": "sha512-Htz+RnsXWk5+P2slx5Jh3Q66vhQj1Cllm0zvnaY98+NFx+Dv2CF/f5O/t8x+KaNdrdIAsruNzoh/KpialbqAnw==",
- "dev": true,
- "requires": {
- "atob": "^2.1.2",
- "decode-uri-component": "^0.2.0",
- "resolve-url": "^0.2.1",
- "source-map-url": "^0.4.0",
- "urix": "^0.1.0"
- }
- },
- "source-map-support": {
- "version": "0.5.21",
- "resolved": "https://registry.npmjs.org/source-map-support/-/source-map-support-0.5.21.tgz",
- "integrity": "sha512-uBHU3L3czsIyYXKX88fdrGovxdSCoTGDRZ6SYXtSRxLZUzHg5P/66Ht6uoUlHu9EZod+inXhKo3qQgwXUT/y1w==",
- "dev": true,
- "requires": {
- "buffer-from": "^1.0.0",
- "source-map": "^0.6.0"
- },
- "dependencies": {
- "source-map": {
- "version": "0.6.1",
- "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz",
- "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==",
- "dev": true
- }
- }
- },
- "source-map-url": {
- "version": "0.4.1",
- "resolved": "https://registry.npmjs.org/source-map-url/-/source-map-url-0.4.1.tgz",
- "integrity": "sha512-cPiFOTLUKvJFIg4SKVScy4ilPPW6rFgMgfuZJPNoDuMs3nC1HbMUycBoJw77xFIp6z1UJQJOfx6C9GMH80DiTw==",
- "dev": true
- },
- "sparkles": {
- "version": "1.0.1",
- "resolved": "https://registry.npmjs.org/sparkles/-/sparkles-1.0.1.tgz",
- "integrity": "sha512-dSO0DDYUahUt/0/pD/Is3VIm5TGJjludZ0HVymmhYF6eNA53PVLhnUk0znSYbH8IYBuJdCE+1luR22jNLMaQdw==",
- "dev": true
- },
- "spdx-correct": {
- "version": "3.1.1",
- "resolved": "https://registry.npmjs.org/spdx-correct/-/spdx-correct-3.1.1.tgz",
- "integrity": "sha512-cOYcUWwhCuHCXi49RhFRCyJEK3iPj1Ziz9DpViV3tbZOwXD49QzIN3MpOLJNxh2qwq2lJJZaKMVw9qNi4jTC0w==",
- "dev": true,
- "requires": {
- "spdx-expression-parse": "^3.0.0",
- "spdx-license-ids": "^3.0.0"
- }
- },
- "spdx-exceptions": {
- "version": "2.3.0",
- "resolved": "https://registry.npmjs.org/spdx-exceptions/-/spdx-exceptions-2.3.0.tgz",
- "integrity": "sha512-/tTrYOC7PPI1nUAgx34hUpqXuyJG+DTHJTnIULG4rDygi4xu/tfgmq1e1cIRwRzwZgo4NLySi+ricLkZkw4i5A==",
- "dev": true
- },
- "spdx-expression-parse": {
- "version": "3.0.1",
- "resolved": "https://registry.npmjs.org/spdx-expression-parse/-/spdx-expression-parse-3.0.1.tgz",
- "integrity": "sha512-cbqHunsQWnJNE6KhVSMsMeH5H/L9EpymbzqTQ3uLwNCLZ1Q481oWaofqH7nO6V07xlXwY6PhQdQ2IedWx/ZK4Q==",
- "dev": true,
- "requires": {
- "spdx-exceptions": "^2.1.0",
- "spdx-license-ids": "^3.0.0"
- }
- },
- "spdx-license-ids": {
- "version": "3.0.11",
- "resolved": "https://registry.npmjs.org/spdx-license-ids/-/spdx-license-ids-3.0.11.tgz",
- "integrity": "sha512-Ctl2BrFiM0X3MANYgj3CkygxhRmr9mi6xhejbdO960nF6EDJApTYpn0BQnDKlnNBULKiCN1n3w9EBkHK8ZWg+g==",
- "dev": true
- },
- "split-string": {
- "version": "3.1.0",
- "resolved": "https://registry.npmjs.org/split-string/-/split-string-3.1.0.tgz",
- "integrity": "sha512-NzNVhJDYpwceVVii8/Hu6DKfD2G+NrQHlS/V/qgv763EYudVwEcMQNxd2lh+0VrUByXN/oJkl5grOhYWvQUYiw==",
- "dev": true,
- "requires": {
- "extend-shallow": "^3.0.0"
- }
- },
- "stack-trace": {
- "version": "0.0.10",
- "resolved": "https://registry.npmjs.org/stack-trace/-/stack-trace-0.0.10.tgz",
- "integrity": "sha1-VHxws0fo0ytOEI6hoqFZ5f3eGcA=",
- "dev": true
- },
- "static-extend": {
- "version": "0.1.2",
- "resolved": "https://registry.npmjs.org/static-extend/-/static-extend-0.1.2.tgz",
- "integrity": "sha1-YICcOcv/VTNyJv1eC1IPNB8ftcY=",
- "dev": true,
- "requires": {
- "define-property": "^0.2.5",
- "object-copy": "^0.1.0"
- },
- "dependencies": {
- "define-property": {
- "version": "0.2.5",
- "resolved": "https://registry.npmjs.org/define-property/-/define-property-0.2.5.tgz",
- "integrity": "sha1-w1se+RjsPJkPmlvFe+BKrOxcgRY=",
- "dev": true,
- "requires": {
- "is-descriptor": "^0.1.0"
- }
- },
- "is-accessor-descriptor": {
- "version": "0.1.6",
- "resolved": "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-0.1.6.tgz",
- "integrity": "sha1-qeEss66Nh2cn7u84Q/igiXtcmNY=",
- "dev": true,
- "requires": {
- "kind-of": "^3.0.2"
- },
- "dependencies": {
- "kind-of": {
- "version": "3.2.2",
- "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz",
- "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=",
- "dev": true,
- "requires": {
- "is-buffer": "^1.1.5"
- }
- }
- }
- },
- "is-data-descriptor": {
- "version": "0.1.4",
- "resolved": "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-0.1.4.tgz",
- "integrity": "sha1-C17mSDiOLIYCgueT8YVv7D8wG1Y=",
- "dev": true,
- "requires": {
- "kind-of": "^3.0.2"
- },
- "dependencies": {
- "kind-of": {
- "version": "3.2.2",
- "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz",
- "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=",
- "dev": true,
- "requires": {
- "is-buffer": "^1.1.5"
- }
- }
- }
- },
- "is-descriptor": {
- "version": "0.1.6",
- "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-0.1.6.tgz",
- "integrity": "sha512-avDYr0SB3DwO9zsMov0gKCESFYqCnE4hq/4z3TdUlukEy5t9C0YRq7HLrsN52NAcqXKaepeCD0n+B0arnVG3Hg==",
- "dev": true,
- "requires": {
- "is-accessor-descriptor": "^0.1.6",
- "is-data-descriptor": "^0.1.4",
- "kind-of": "^5.0.0"
- }
- }
- }
- },
- "statuses": {
- "version": "1.5.0",
- "resolved": "https://registry.npmjs.org/statuses/-/statuses-1.5.0.tgz",
- "integrity": "sha1-Fhx9rBd2Wf2YEfQ3cfqZOBR4Yow=",
- "dev": true
- },
- "stream-exhaust": {
- "version": "1.0.2",
- "resolved": "https://registry.npmjs.org/stream-exhaust/-/stream-exhaust-1.0.2.tgz",
- "integrity": "sha512-b/qaq/GlBK5xaq1yrK9/zFcyRSTNxmcZwFLGSTG0mXgZl/4Z6GgiyYOXOvY7N3eEvFRAG1bkDRz5EPGSvPYQlw==",
- "dev": true
- },
- "stream-shift": {
- "version": "1.0.1",
- "resolved": "https://registry.npmjs.org/stream-shift/-/stream-shift-1.0.1.tgz",
- "integrity": "sha512-AiisoFqQ0vbGcZgQPY1cdP2I76glaVA/RauYR4G4thNFgkTqr90yXTo4LYX60Jl+sIlPNHHdGSwo01AvbKUSVQ==",
- "dev": true
- },
- "string_decoder": {
- "version": "1.3.0",
- "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.3.0.tgz",
- "integrity": "sha512-hkRX8U1WjJFd8LsDJ2yQ/wWWxaopEsABU1XfkM8A+j0+85JAGppt16cr1Whg6KIbb4okU6Mql6BOj+uup/wKeA==",
- "dev": true,
- "requires": {
- "safe-buffer": "~5.2.0"
- }
- },
- "string-template": {
- "version": "0.2.1",
- "resolved": "https://registry.npmjs.org/string-template/-/string-template-0.2.1.tgz",
- "integrity": "sha1-QpMuWYo1LQH8IuwzZ9nYTuxsmt0=",
- "dev": true
- },
- "string-width": {
- "version": "1.0.2",
- "resolved": "https://registry.npmjs.org/string-width/-/string-width-1.0.2.tgz",
- "integrity": "sha1-EYvfW4zcUaKn5w0hHgfisLmxB9M=",
- "dev": true,
- "requires": {
- "code-point-at": "^1.0.0",
- "is-fullwidth-code-point": "^1.0.0",
- "strip-ansi": "^3.0.0"
- },
- "dependencies": {
- "ansi-regex": {
- "version": "2.1.1",
- "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-2.1.1.tgz",
- "integrity": "sha1-w7M6te42DYbg5ijwRorn7yfWVN8=",
- "dev": true
- },
- "strip-ansi": {
- "version": "3.0.1",
- "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-3.0.1.tgz",
- "integrity": "sha1-ajhfuIU9lS1f8F0Oiq+UJ43GPc8=",
- "dev": true,
- "requires": {
- "ansi-regex": "^2.0.0"
- }
- }
- }
- },
- "strip-ansi": {
- "version": "6.0.1",
- "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz",
- "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==",
- "dev": true,
- "requires": {
- "ansi-regex": "^5.0.1"
- }
- },
- "strip-bom": {
- "version": "2.0.0",
- "resolved": "https://registry.npmjs.org/strip-bom/-/strip-bom-2.0.0.tgz",
- "integrity": "sha1-YhmoVhZSBJHzV4i9vxRHqZx+aw4=",
- "dev": true,
- "requires": {
- "is-utf8": "^0.2.0"
- }
- },
- "supports-preserve-symlinks-flag": {
- "version": "1.0.0",
- "resolved": "https://registry.npmjs.org/supports-preserve-symlinks-flag/-/supports-preserve-symlinks-flag-1.0.0.tgz",
- "integrity": "sha512-ot0WnXS9fgdkgIcePe6RHNk1WA8+muPa6cSjeR3V8K27q9BB1rTE3R1p7Hv0z1ZyAc8s6Vvv8DIyWf681MAt0w==",
- "dev": true
- },
- "sver-compat": {
- "version": "1.5.0",
- "resolved": "https://registry.npmjs.org/sver-compat/-/sver-compat-1.5.0.tgz",
- "integrity": "sha1-PPh9/rTQe0o/FIJ7wYaz/QxkXNg=",
- "dev": true,
- "requires": {
- "es6-iterator": "^2.0.1",
- "es6-symbol": "^3.1.1"
- }
- },
- "terser": {
- "version": "5.10.0",
- "resolved": "https://registry.npmjs.org/terser/-/terser-5.10.0.tgz",
- "integrity": "sha512-AMmF99DMfEDiRJfxfY5jj5wNH/bYO09cniSqhfoyxc8sFoYIgkJy86G04UoZU5VjlpnplVu0K6Tx6E9b5+DlHA==",
- "dev": true,
- "requires": {
- "commander": "^2.20.0",
- "source-map": "~0.7.2",
- "source-map-support": "~0.5.20"
- },
- "dependencies": {
- "source-map": {
- "version": "0.7.3",
- "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.7.3.tgz",
- "integrity": "sha512-CkCj6giN3S+n9qrYiBTX5gystlENnRW5jZeNLHpe6aue+SrHcG5VYwujhW9s4dY31mEGsxBDrHR6oI69fTXsaQ==",
- "dev": true
- }
- }
- },
- "through2": {
- "version": "4.0.2",
- "resolved": "https://registry.npmjs.org/through2/-/through2-4.0.2.tgz",
- "integrity": "sha512-iOqSav00cVxEEICeD7TjLB1sueEL+81Wpzp2bY17uZjZN0pWZPuo4suZ/61VujxmqSGFfgOcNuTZ85QJwNZQpw==",
- "dev": true,
- "requires": {
- "readable-stream": "3"
- }
- },
- "through2-filter": {
- "version": "3.0.0",
- "resolved": "https://registry.npmjs.org/through2-filter/-/through2-filter-3.0.0.tgz",
- "integrity": "sha512-jaRjI2WxN3W1V8/FMZ9HKIBXixtiqs3SQSX4/YGIiP3gL6djW48VoZq9tDqeCWs3MT8YY5wb/zli8VW8snY1CA==",
- "dev": true,
- "requires": {
- "through2": "~2.0.0",
- "xtend": "~4.0.0"
- },
- "dependencies": {
- "readable-stream": {
- "version": "2.3.7",
- "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.7.tgz",
- "integrity": "sha512-Ebho8K4jIbHAxnuxi7o42OrZgF/ZTNcsZj6nRKyUmkhLFq8CHItp/fy6hQZuZmP/n3yZ9VBUbp4zz/mX8hmYPw==",
- "dev": true,
- "requires": {
- "core-util-is": "~1.0.0",
- "inherits": "~2.0.3",
- "isarray": "~1.0.0",
- "process-nextick-args": "~2.0.0",
- "safe-buffer": "~5.1.1",
- "string_decoder": "~1.1.1",
- "util-deprecate": "~1.0.1"
- }
- },
- "safe-buffer": {
- "version": "5.1.2",
- "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz",
- "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==",
- "dev": true
- },
- "string_decoder": {
- "version": "1.1.1",
- "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz",
- "integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==",
- "dev": true,
- "requires": {
- "safe-buffer": "~5.1.0"
- }
- },
- "through2": {
- "version": "2.0.5",
- "resolved": "https://registry.npmjs.org/through2/-/through2-2.0.5.tgz",
- "integrity": "sha512-/mrRod8xqpA+IHSLyGCQ2s8SPHiCDEeQJSep1jqLYeEUClOFG2Qsh+4FU6G9VeqpZnGW/Su8LQGc4YKni5rYSQ==",
- "dev": true,
- "requires": {
- "readable-stream": "~2.3.6",
- "xtend": "~4.0.1"
- }
- }
- }
- },
- "time-stamp": {
- "version": "1.1.0",
- "resolved": "https://registry.npmjs.org/time-stamp/-/time-stamp-1.1.0.tgz",
- "integrity": "sha1-dkpaEa9QVhkhsTPztE5hhofg9cM=",
- "dev": true
- },
- "tiny-lr": {
- "version": "1.1.1",
- "resolved": "https://registry.npmjs.org/tiny-lr/-/tiny-lr-1.1.1.tgz",
- "integrity": "sha512-44yhA3tsaRoMOjQQ+5v5mVdqef+kH6Qze9jTpqtVufgYjYt08zyZAwNwwVBj3i1rJMnR52IxOW0LK0vBzgAkuA==",
- "dev": true,
- "requires": {
- "body": "^5.1.0",
- "debug": "^3.1.0",
- "faye-websocket": "~0.10.0",
- "livereload-js": "^2.3.0",
- "object-assign": "^4.1.0",
- "qs": "^6.4.0"
- },
- "dependencies": {
- "debug": {
- "version": "3.2.7",
- "resolved": "https://registry.npmjs.org/debug/-/debug-3.2.7.tgz",
- "integrity": "sha512-CFjzYYAi4ThfiQvizrFQevTTXHtnCqWfe7x1AhgEscTz6ZbLbfoLRLPugTQyBth6f8ZERVUSyWHFD/7Wu4t1XQ==",
- "dev": true,
- "requires": {
- "ms": "^2.1.1"
- }
- },
- "ms": {
- "version": "2.1.3",
- "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.3.tgz",
- "integrity": "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==",
- "dev": true
- }
- }
- },
- "to-absolute-glob": {
- "version": "2.0.2",
- "resolved": "https://registry.npmjs.org/to-absolute-glob/-/to-absolute-glob-2.0.2.tgz",
- "integrity": "sha1-GGX0PZ50sIItufFFt4z/fQ98hJs=",
- "dev": true,
- "requires": {
- "is-absolute": "^1.0.0",
- "is-negated-glob": "^1.0.0"
- }
- },
- "to-object-path": {
- "version": "0.3.0",
- "resolved": "https://registry.npmjs.org/to-object-path/-/to-object-path-0.3.0.tgz",
- "integrity": "sha1-KXWIt7Dn4KwI4E5nL4XB9JmeF68=",
- "dev": true,
- "requires": {
- "kind-of": "^3.0.2"
- },
- "dependencies": {
- "kind-of": {
- "version": "3.2.2",
- "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz",
- "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=",
- "dev": true,
- "requires": {
- "is-buffer": "^1.1.5"
- }
- }
- }
- },
- "to-regex": {
- "version": "3.0.2",
- "resolved": "https://registry.npmjs.org/to-regex/-/to-regex-3.0.2.tgz",
- "integrity": "sha512-FWtleNAtZ/Ki2qtqej2CXTOayOH9bHDQF+Q48VpWyDXjbYxA4Yz8iDB31zXOBUlOHHKidDbqGVrTUvQMPmBGBw==",
- "dev": true,
- "requires": {
- "define-property": "^2.0.2",
- "extend-shallow": "^3.0.2",
- "regex-not": "^1.0.2",
- "safe-regex": "^1.1.0"
- }
- },
- "to-regex-range": {
- "version": "5.0.1",
- "resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-5.0.1.tgz",
- "integrity": "sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==",
- "dev": true,
- "requires": {
- "is-number": "^7.0.0"
- }
- },
- "to-through": {
- "version": "2.0.0",
- "resolved": "https://registry.npmjs.org/to-through/-/to-through-2.0.0.tgz",
- "integrity": "sha1-/JKtq6ByZHvAtn1rA2ZKoZUJOvY=",
- "dev": true,
- "requires": {
- "through2": "^2.0.3"
- },
- "dependencies": {
- "readable-stream": {
- "version": "2.3.7",
- "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.7.tgz",
- "integrity": "sha512-Ebho8K4jIbHAxnuxi7o42OrZgF/ZTNcsZj6nRKyUmkhLFq8CHItp/fy6hQZuZmP/n3yZ9VBUbp4zz/mX8hmYPw==",
- "dev": true,
- "requires": {
- "core-util-is": "~1.0.0",
- "inherits": "~2.0.3",
- "isarray": "~1.0.0",
- "process-nextick-args": "~2.0.0",
- "safe-buffer": "~5.1.1",
- "string_decoder": "~1.1.1",
- "util-deprecate": "~1.0.1"
- }
- },
- "safe-buffer": {
- "version": "5.1.2",
- "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz",
- "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==",
- "dev": true
- },
- "string_decoder": {
- "version": "1.1.1",
- "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz",
- "integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==",
- "dev": true,
- "requires": {
- "safe-buffer": "~5.1.0"
- }
- },
- "through2": {
- "version": "2.0.5",
- "resolved": "https://registry.npmjs.org/through2/-/through2-2.0.5.tgz",
- "integrity": "sha512-/mrRod8xqpA+IHSLyGCQ2s8SPHiCDEeQJSep1jqLYeEUClOFG2Qsh+4FU6G9VeqpZnGW/Su8LQGc4YKni5rYSQ==",
- "dev": true,
- "requires": {
- "readable-stream": "~2.3.6",
- "xtend": "~4.0.1"
- }
- }
- }
- },
- "toidentifier": {
- "version": "1.0.1",
- "resolved": "https://registry.npmjs.org/toidentifier/-/toidentifier-1.0.1.tgz",
- "integrity": "sha512-o5sSPKEkg/DIQNmH43V0/uerLrpzVedkUh8tGNvaeXpfpuwjKenlSox/2O/BTlZUtEe+JG7s5YhEz608PlAHRA==",
- "dev": true
- },
- "type": {
- "version": "1.2.0",
- "resolved": "https://registry.npmjs.org/type/-/type-1.2.0.tgz",
- "integrity": "sha512-+5nt5AAniqsCnu2cEQQdpzCAh33kVx8n0VoFidKpB1dVVLAN/F+bgVOqOJqOnEnrhp222clB5p3vUlD+1QAnfg==",
- "dev": true
- },
- "typedarray": {
- "version": "0.0.6",
- "resolved": "https://registry.npmjs.org/typedarray/-/typedarray-0.0.6.tgz",
- "integrity": "sha1-hnrHTjhkGHsdPUfZlqeOxciDB3c=",
- "dev": true
- },
- "unc-path-regex": {
- "version": "0.1.2",
- "resolved": "https://registry.npmjs.org/unc-path-regex/-/unc-path-regex-0.1.2.tgz",
- "integrity": "sha1-5z3T17DXxe2G+6xrCufYxqadUPo=",
- "dev": true
- },
- "undertaker": {
- "version": "1.3.0",
- "resolved": "https://registry.npmjs.org/undertaker/-/undertaker-1.3.0.tgz",
- "integrity": "sha512-/RXwi5m/Mu3H6IHQGww3GNt1PNXlbeCuclF2QYR14L/2CHPz3DFZkvB5hZ0N/QUkiXWCACML2jXViIQEQc2MLg==",
- "dev": true,
- "requires": {
- "arr-flatten": "^1.0.1",
- "arr-map": "^2.0.0",
- "bach": "^1.0.0",
- "collection-map": "^1.0.0",
- "es6-weak-map": "^2.0.1",
- "fast-levenshtein": "^1.0.0",
- "last-run": "^1.1.0",
- "object.defaults": "^1.0.0",
- "object.reduce": "^1.0.0",
- "undertaker-registry": "^1.0.0"
- }
- },
- "undertaker-registry": {
- "version": "1.0.1",
- "resolved": "https://registry.npmjs.org/undertaker-registry/-/undertaker-registry-1.0.1.tgz",
- "integrity": "sha1-XkvaMI5KiirlhPm5pDWaSZglzFA=",
- "dev": true
- },
- "union-value": {
- "version": "1.0.1",
- "resolved": "https://registry.npmjs.org/union-value/-/union-value-1.0.1.tgz",
- "integrity": "sha512-tJfXmxMeWYnczCVs7XAEvIV7ieppALdyepWMkHkwciRpZraG/xwT+s2JN8+pr1+8jCRf80FFzvr+MpQeeoF4Xg==",
- "dev": true,
- "requires": {
- "arr-union": "^3.1.0",
- "get-value": "^2.0.6",
- "is-extendable": "^0.1.1",
- "set-value": "^2.0.1"
- },
- "dependencies": {
- "is-extendable": {
- "version": "0.1.1",
- "resolved": "https://registry.npmjs.org/is-extendable/-/is-extendable-0.1.1.tgz",
- "integrity": "sha1-YrEQ4omkcUGOPsNqYX1HLjAd/Ik=",
- "dev": true
- }
- }
- },
- "unique-stream": {
- "version": "2.3.1",
- "resolved": "https://registry.npmjs.org/unique-stream/-/unique-stream-2.3.1.tgz",
- "integrity": "sha512-2nY4TnBE70yoxHkDli7DMazpWiP7xMdCYqU2nBRO0UB+ZpEkGsSija7MvmvnZFUeC+mrgiUfcHSr3LmRFIg4+A==",
- "dev": true,
- "requires": {
- "json-stable-stringify-without-jsonify": "^1.0.1",
- "through2-filter": "^3.0.0"
- }
- },
- "unpipe": {
- "version": "1.0.0",
- "resolved": "https://registry.npmjs.org/unpipe/-/unpipe-1.0.0.tgz",
- "integrity": "sha1-sr9O6FFKrmFltIF4KdIbLvSZBOw=",
- "dev": true
- },
- "unset-value": {
- "version": "1.0.0",
- "resolved": "https://registry.npmjs.org/unset-value/-/unset-value-1.0.0.tgz",
- "integrity": "sha1-g3aHP30jNRef+x5vw6jtDfyKtVk=",
- "dev": true,
- "requires": {
- "has-value": "^0.3.1",
- "isobject": "^3.0.0"
- },
- "dependencies": {
- "has-value": {
- "version": "0.3.1",
- "resolved": "https://registry.npmjs.org/has-value/-/has-value-0.3.1.tgz",
- "integrity": "sha1-ex9YutpiyoJ+wKIHgCVlSEWZXh8=",
- "dev": true,
- "requires": {
- "get-value": "^2.0.3",
- "has-values": "^0.1.4",
- "isobject": "^2.0.0"
- },
- "dependencies": {
- "isobject": {
- "version": "2.1.0",
- "resolved": "https://registry.npmjs.org/isobject/-/isobject-2.1.0.tgz",
- "integrity": "sha1-8GVWEJaj8dou9GJy+BXIQNh+DIk=",
- "dev": true,
- "requires": {
- "isarray": "1.0.0"
- }
- }
- }
- },
- "has-values": {
- "version": "0.1.4",
- "resolved": "https://registry.npmjs.org/has-values/-/has-values-0.1.4.tgz",
- "integrity": "sha1-bWHeldkd/Km5oCCJrThL/49it3E=",
- "dev": true
- }
- }
- },
- "upath": {
- "version": "1.2.0",
- "resolved": "https://registry.npmjs.org/upath/-/upath-1.2.0.tgz",
- "integrity": "sha512-aZwGpamFO61g3OlfT7OQCHqhGnW43ieH9WZeP7QxN/G/jS4jfqUkZxoryvJgVPEcrl5NL/ggHsSmLMHuH64Lhg==",
- "dev": true
- },
- "urix": {
- "version": "0.1.0",
- "resolved": "https://registry.npmjs.org/urix/-/urix-0.1.0.tgz",
- "integrity": "sha1-2pN/emLiH+wf0Y1Js1wpNQZ6bHI=",
- "dev": true
- },
- "use": {
- "version": "3.1.1",
- "resolved": "https://registry.npmjs.org/use/-/use-3.1.1.tgz",
- "integrity": "sha512-cwESVXlO3url9YWlFW/TA9cshCEhtu7IKJ/p5soJ/gGpj7vbvFrAY/eIioQ6Dw23KjZhYgiIo8HOs1nQ2vr/oQ==",
- "dev": true
- },
- "util-deprecate": {
- "version": "1.0.2",
- "resolved": "https://registry.npmjs.org/util-deprecate/-/util-deprecate-1.0.2.tgz",
- "integrity": "sha1-RQ1Nyfpw3nMnYvvS1KKJgUGaDM8=",
- "dev": true
- },
- "utils-merge": {
- "version": "1.0.1",
- "resolved": "https://registry.npmjs.org/utils-merge/-/utils-merge-1.0.1.tgz",
- "integrity": "sha1-n5VxD1CiZ5R7LMwSR0HBAoQn5xM=",
- "dev": true
- },
- "v8flags": {
- "version": "3.2.0",
- "resolved": "https://registry.npmjs.org/v8flags/-/v8flags-3.2.0.tgz",
- "integrity": "sha512-mH8etigqMfiGWdeXpaaqGfs6BndypxusHHcv2qSHyZkGEznCd/qAXCWWRzeowtL54147cktFOC4P5y+kl8d8Jg==",
- "dev": true,
- "requires": {
- "homedir-polyfill": "^1.0.1"
- }
- },
- "validate-npm-package-license": {
- "version": "3.0.4",
- "resolved": "https://registry.npmjs.org/validate-npm-package-license/-/validate-npm-package-license-3.0.4.tgz",
- "integrity": "sha512-DpKm2Ui/xN7/HQKCtpZxoRWBhZ9Z0kqtygG8XCgNQ8ZlDnxuQmWhj566j8fN4Cu3/JmbhsDo7fcAJq4s9h27Ew==",
- "dev": true,
- "requires": {
- "spdx-correct": "^3.0.0",
- "spdx-expression-parse": "^3.0.0"
- }
- },
- "value-or-function": {
- "version": "3.0.0",
- "resolved": "https://registry.npmjs.org/value-or-function/-/value-or-function-3.0.0.tgz",
- "integrity": "sha1-HCQ6ULWVwb5Up1S/7OhWO5/42BM=",
- "dev": true
- },
- "vinyl": {
- "version": "2.2.1",
- "resolved": "https://registry.npmjs.org/vinyl/-/vinyl-2.2.1.tgz",
- "integrity": "sha512-LII3bXRFBZLlezoG5FfZVcXflZgWP/4dCwKtxd5ky9+LOtM4CS3bIRQsmR1KMnMW07jpE8fqR2lcxPZ+8sJIcw==",
- "dev": true,
- "requires": {
- "clone": "^2.1.1",
- "clone-buffer": "^1.0.0",
- "clone-stats": "^1.0.0",
- "cloneable-readable": "^1.0.0",
- "remove-trailing-separator": "^1.0.1",
- "replace-ext": "^1.0.0"
- },
- "dependencies": {
- "replace-ext": {
- "version": "1.0.1",
- "resolved": "https://registry.npmjs.org/replace-ext/-/replace-ext-1.0.1.tgz",
- "integrity": "sha512-yD5BHCe7quCgBph4rMQ+0KkIRKwWCrHDOX1p1Gp6HwjPM5kVoCdKGNhN7ydqqsX6lJEnQDKZ/tFMiEdQ1dvPEw==",
- "dev": true
- }
- }
- },
- "vinyl-fs": {
- "version": "3.0.3",
- "resolved": "https://registry.npmjs.org/vinyl-fs/-/vinyl-fs-3.0.3.tgz",
- "integrity": "sha512-vIu34EkyNyJxmP0jscNzWBSygh7VWhqun6RmqVfXePrOwi9lhvRs//dOaGOTRUQr4tx7/zd26Tk5WeSVZitgng==",
- "dev": true,
- "requires": {
- "fs-mkdirp-stream": "^1.0.0",
- "glob-stream": "^6.1.0",
- "graceful-fs": "^4.0.0",
- "is-valid-glob": "^1.0.0",
- "lazystream": "^1.0.0",
- "lead": "^1.0.0",
- "object.assign": "^4.0.4",
- "pumpify": "^1.3.5",
- "readable-stream": "^2.3.3",
- "remove-bom-buffer": "^3.0.0",
- "remove-bom-stream": "^1.2.0",
- "resolve-options": "^1.1.0",
- "through2": "^2.0.0",
- "to-through": "^2.0.0",
- "value-or-function": "^3.0.0",
- "vinyl": "^2.0.0",
- "vinyl-sourcemap": "^1.1.0"
- },
- "dependencies": {
- "readable-stream": {
- "version": "2.3.7",
- "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.7.tgz",
- "integrity": "sha512-Ebho8K4jIbHAxnuxi7o42OrZgF/ZTNcsZj6nRKyUmkhLFq8CHItp/fy6hQZuZmP/n3yZ9VBUbp4zz/mX8hmYPw==",
- "dev": true,
- "requires": {
- "core-util-is": "~1.0.0",
- "inherits": "~2.0.3",
- "isarray": "~1.0.0",
- "process-nextick-args": "~2.0.0",
- "safe-buffer": "~5.1.1",
- "string_decoder": "~1.1.1",
- "util-deprecate": "~1.0.1"
- }
- },
- "safe-buffer": {
- "version": "5.1.2",
- "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz",
- "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==",
- "dev": true
- },
- "string_decoder": {
- "version": "1.1.1",
- "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz",
- "integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==",
- "dev": true,
- "requires": {
- "safe-buffer": "~5.1.0"
- }
- },
- "through2": {
- "version": "2.0.5",
- "resolved": "https://registry.npmjs.org/through2/-/through2-2.0.5.tgz",
- "integrity": "sha512-/mrRod8xqpA+IHSLyGCQ2s8SPHiCDEeQJSep1jqLYeEUClOFG2Qsh+4FU6G9VeqpZnGW/Su8LQGc4YKni5rYSQ==",
- "dev": true,
- "requires": {
- "readable-stream": "~2.3.6",
- "xtend": "~4.0.1"
- }
- }
- }
- },
- "vinyl-sourcemap": {
- "version": "1.1.0",
- "resolved": "https://registry.npmjs.org/vinyl-sourcemap/-/vinyl-sourcemap-1.1.0.tgz",
- "integrity": "sha1-kqgAWTo4cDqM2xHYswCtS+Y7PhY=",
- "dev": true,
- "requires": {
- "append-buffer": "^1.0.2",
- "convert-source-map": "^1.5.0",
- "graceful-fs": "^4.1.6",
- "normalize-path": "^2.1.1",
- "now-and-later": "^2.0.0",
- "remove-bom-buffer": "^3.0.0",
- "vinyl": "^2.0.0"
- },
- "dependencies": {
- "normalize-path": {
- "version": "2.1.1",
- "resolved": "https://registry.npmjs.org/normalize-path/-/normalize-path-2.1.1.tgz",
- "integrity": "sha1-GrKLVW4Zg2Oowab35vogE3/mrtk=",
- "dev": true,
- "requires": {
- "remove-trailing-separator": "^1.0.1"
- }
- }
- }
- },
- "vinyl-sourcemaps-apply": {
- "version": "0.2.1",
- "resolved": "https://registry.npmjs.org/vinyl-sourcemaps-apply/-/vinyl-sourcemaps-apply-0.2.1.tgz",
- "integrity": "sha1-q2VJ1h0XLCsbh75cUI0jnI74dwU=",
- "dev": true,
- "requires": {
- "source-map": "^0.5.1"
- }
- },
- "websocket-driver": {
- "version": "0.7.4",
- "resolved": "https://registry.npmjs.org/websocket-driver/-/websocket-driver-0.7.4.tgz",
- "integrity": "sha512-b17KeDIQVjvb0ssuSDF2cYXSg2iztliJ4B9WdsuB6J952qCPKmnVq4DyW5motImXHDC1cBT/1UezrJVsKw5zjg==",
- "dev": true,
- "requires": {
- "http-parser-js": ">=0.5.1",
- "safe-buffer": ">=5.1.0",
- "websocket-extensions": ">=0.1.1"
- }
- },
- "websocket-extensions": {
- "version": "0.1.4",
- "resolved": "https://registry.npmjs.org/websocket-extensions/-/websocket-extensions-0.1.4.tgz",
- "integrity": "sha512-OqedPIGOfsDlo31UNwYbCFMSaO9m9G/0faIHj5/dZFDMFqPTcx6UwqyOy3COEaEOg/9VsGIpdqn62W5KhoKSpg==",
- "dev": true
- },
- "which": {
- "version": "1.3.1",
- "resolved": "https://registry.npmjs.org/which/-/which-1.3.1.tgz",
- "integrity": "sha512-HxJdYWq1MTIQbJ3nw0cqssHoTNU267KlrDuGZ1WYlxDStUtKUhOaJmh112/TZmHxxUfuJqPXSOm7tDyas0OSIQ==",
- "dev": true,
- "requires": {
- "isexe": "^2.0.0"
- }
- },
- "which-module": {
- "version": "1.0.0",
- "resolved": "https://registry.npmjs.org/which-module/-/which-module-1.0.0.tgz",
- "integrity": "sha1-u6Y8qGGUiZT/MHc2CJ47lgJsKk8=",
- "dev": true
- },
- "wrap-ansi": {
- "version": "2.1.0",
- "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-2.1.0.tgz",
- "integrity": "sha1-2Pw9KE3QV5T+hJc8rs3Rz4JP3YU=",
- "dev": true,
- "requires": {
- "string-width": "^1.0.1",
- "strip-ansi": "^3.0.1"
- },
- "dependencies": {
- "ansi-regex": {
- "version": "2.1.1",
- "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-2.1.1.tgz",
- "integrity": "sha1-w7M6te42DYbg5ijwRorn7yfWVN8=",
- "dev": true
- },
- "strip-ansi": {
- "version": "3.0.1",
- "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-3.0.1.tgz",
- "integrity": "sha1-ajhfuIU9lS1f8F0Oiq+UJ43GPc8=",
- "dev": true,
- "requires": {
- "ansi-regex": "^2.0.0"
- }
- }
- }
- },
- "wrappy": {
- "version": "1.0.2",
- "resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz",
- "integrity": "sha1-tSQ9jz7BqjXxNkYFvA0QNuMKtp8=",
- "dev": true
- },
- "xtend": {
- "version": "4.0.2",
- "resolved": "https://registry.npmjs.org/xtend/-/xtend-4.0.2.tgz",
- "integrity": "sha512-LKYU1iAXJXUgAXn9URjiu+MWhyUXHsvfp7mcuYm9dSUKK0/CjtrUwFAxD82/mCWbtLsGjFIad0wIsod4zrTAEQ==",
- "dev": true
- },
- "y18n": {
- "version": "3.2.2",
- "resolved": "https://registry.npmjs.org/y18n/-/y18n-3.2.2.tgz",
- "integrity": "sha512-uGZHXkHnhF0XeeAPgnKfPv1bgKAYyVvmNL1xlKsPYZPaIHxGti2hHqvOCQv71XMsLxu1QjergkqogUnms5D3YQ==",
- "dev": true
- },
- "yargs": {
- "version": "7.1.2",
- "resolved": "https://registry.npmjs.org/yargs/-/yargs-7.1.2.tgz",
- "integrity": "sha512-ZEjj/dQYQy0Zx0lgLMLR8QuaqTihnxirir7EwUHp1Axq4e3+k8jXU5K0VLbNvedv1f4EWtBonDIZm0NUr+jCcA==",
- "dev": true,
- "requires": {
- "camelcase": "^3.0.0",
- "cliui": "^3.2.0",
- "decamelize": "^1.1.1",
- "get-caller-file": "^1.0.1",
- "os-locale": "^1.4.0",
- "read-pkg-up": "^1.0.1",
- "require-directory": "^2.1.1",
- "require-main-filename": "^1.0.1",
- "set-blocking": "^2.0.0",
- "string-width": "^1.0.2",
- "which-module": "^1.0.0",
- "y18n": "^3.2.1",
- "yargs-parser": "^5.0.1"
- }
- },
- "yargs-parser": {
- "version": "5.0.1",
- "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-5.0.1.tgz",
- "integrity": "sha512-wpav5XYiddjXxirPoCTUPbqM0PXvJ9hiBMvuJgInvo4/lAOTZzUprArw17q2O1P2+GHhbBr18/iQwjL5Z9BqfA==",
- "dev": true,
- "requires": {
- "camelcase": "^3.0.0",
- "object.assign": "^4.1.0"
- }
- }
}
}
diff --git a/source/_static/js/main.js b/source/_static/js/main.js
index b3915fa4..21538e3a 100644
--- a/source/_static/js/main.js
+++ b/source/_static/js/main.js
@@ -318,7 +318,7 @@ window.addEventListener("DOMContentLoaded", (event) => {
else if (page_title === "Software Development Kits (SDK)") {
list[i].insertAdjacentElement('beforebegin',developerPersona);
}
- else if (page_title === "MinIO Client") {
+ else if (page_title === "Kubernetes Reference") {
list[i].insertAdjacentElement('beforebegin',referencePersona);
}
}
diff --git a/source/_templates/head.html b/source/_templates/head.html
index e37df0ad..754aefe9 100644
--- a/source/_templates/head.html
+++ b/source/_templates/head.html
@@ -1,7 +1,5 @@
-
-
diff --git a/source/_templates/header.html b/source/_templates/header.html
index 049139a9..77e4ca86 100644
--- a/source/_templates/header.html
+++ b/source/_templates/header.html
@@ -35,7 +35,7 @@
{% endif %}
- {%- include "platform-navigation.html" %}
+
{%- if pagename != "search" %}
diff --git a/source/_templates/platform-navigation.html b/source/_templates/platform-navigation.html
index 8fc04768..4807c187 100644
--- a/source/_templates/platform-navigation.html
+++ b/source/_templates/platform-navigation.html
@@ -1,27 +1,7 @@
diff --git a/source/administration/console/security-and-access.rst b/source/administration/console/security-and-access.rst
index 8694db86..42301323 100644
--- a/source/administration/console/security-and-access.rst
+++ b/source/administration/console/security-and-access.rst
@@ -1,7 +1,7 @@
-
-
.. _minio-console-security-access:
+
:orphan:
+
===================
Security and Access
===================
diff --git a/source/administration/identity-access-management/policy-based-access-control.rst b/source/administration/identity-access-management/policy-based-access-control.rst
index 7e9e0cf3..2f2f08f4 100644
--- a/source/administration/identity-access-management/policy-based-access-control.rst
+++ b/source/administration/identity-access-management/policy-based-access-control.rst
@@ -970,7 +970,7 @@ To select all of the available kms policy actions, use ``kms:*``.
For example, the following policy document allows a user to list keys, create new keys, and check the status of keys for any resource that begins with ``keys-abc-`` or ``myuser-``.
- .. codeblock:: shell
+ .. code-block:: shell
:class: copyable
{
diff --git a/source/administration/object-management.rst b/source/administration/object-management.rst
index b61815fe..0ae736d8 100644
--- a/source/administration/object-management.rst
+++ b/source/administration/object-management.rst
@@ -97,11 +97,6 @@ Administrators typically control the creation and configuration of buckets.
Client applications can then use :ref:`S3-compatible SDKs
` to create, list, retrieve, and :ref:`delete ` objects on the MinIO deployment.
Clients therefore drive the overall hierarchy of data within a given bucket or prefix, where Administrators can exercise control using :ref:`policies ` to grant or deny access to an action or resource.
-.. cond:: windows
-
- MinIO does not support the ``\`` or ``:`` characters in object names, regardless of support for those characters in Windows filesystems.
- Use ``/`` as a delimiter in object names to have MinIO automatically create a folder structure using :term:`prefixes `.
-
MinIO has no hard :ref:`thresholds ` on the number of buckets, objects, or prefixes on a given deployment.
The relative performance of the hardware and networking underlying the MinIO deployment may create a practical limit to the number of objects in a given prefix or bucket.
Specifically, hardware using slower drives or network infrastructures tend to exhibit poor performance in buckets or prefixes with a flat hierarchy of objects.
@@ -117,8 +112,13 @@ Consider the following points as general guidance for client applications worklo
For a deeper discussion on the benefits of limiting prefix contents, see the article on :s3-docs:`optimizing S3 performance `.
+.. note::
+
+ MinIO does not support the ``\`` or ``:`` characters in object names, regardless of support for those characters in Windows filesystems.
+ Use ``/`` as a delimiter in object names to have MinIO automatically create a folder structure using :term:`prefixes `.
+
Object Versioning
------------------
+-----------------
.. image:: /images/retention/minio-versioning-multiple-versions.svg
:alt: Object with Multiple Versions
diff --git a/source/default-conf.py b/source/default-conf.py
index 7d5ac30d..8c3d78eb 100644
--- a/source/default-conf.py
+++ b/source/default-conf.py
@@ -71,6 +71,7 @@ extlinks = {
'eks-docs' : ('https://docs.aws.amazon.com/eks/latest/userguide/%s', None),
'minio-web' : ('https://min.io/%s?ref=docs', None),
'minio-docs' : ('https://min.io/docs/%s?ref=docs-internal', None),
+ 'minio-blog' : ('https://blog.min.io/%s?ref=docs', None),
'gke-docs' : ('https://cloud.google.com/kubernetes-engine/docs/%s', None),
'gcp-docs' : ('https://cloud.google.com/compute/docs/%s', None),
'gcs-docs' : ('https://cloud.google.com/storage/docs/%s', None),
@@ -106,78 +107,6 @@ sitemap_url_scheme = "{link}"
excludes = []
-if tags.has("linux"):
- html_baseurl = 'https://min.io/docs/minio/linux/'
- with open('url-excludes.yaml','r') as f:
- for i in (yaml.safe_load_all(f)):
- if i['tag'] == 'linux':
- excludes = i['excludes']
- break
-
-elif tags.has("macos"):
- html_baseurl = 'https://min.io/docs/minio/macos/'
- with open('url-excludes.yaml','r') as f:
- for i in (yaml.safe_load_all(f)):
- if i['tag'] == 'macos':
- excludes = i['excludes']
- break
-
-elif tags.has("windows"):
- # html_baseurl is used for generating the sitemap.xml for each platform. These are combined in a sitemapindex.xml.
- html_baseurl = 'https://min.io/docs/minio/windows/'
- with open('url-excludes.yaml','r') as f:
- for i in (yaml.safe_load_all(f)):
- if i['tag'] == 'windows':
- excludes = i['excludes']
- break
-
-elif tags.has("container"):
- html_baseurl = 'https://min.io/docs/minio/container/'
- with open('url-excludes.yaml','r') as f:
- for i in (yaml.safe_load_all(f)):
- if i['tag'] == 'container':
- excludes = i['excludes']
- break
-
-elif tags.has("k8s") and not (tags.has("openshift") or tags.has("eks") or tags.has("gke") or tags.has("aks")):
- html_baseurl = 'https://min.io/docs/minio/kubernetes/upstream/'
- with open('url-excludes.yaml','r') as f:
- for i in (yaml.safe_load_all(f)):
- if i['tag'] == 'k8s':
- excludes = i['excludes']
- break
-
-elif tags.has("openshift"):
- html_baseurl = 'https://min.io/docs/minio/kubernetes/openshift/'
- with open('url-excludes.yaml','r') as f:
- for i in (yaml.safe_load_all(f)):
- if i['tag'] == 'openshift':
- excludes = i['excludes']
- break
-
-elif tags.has("eks"):
- html_baseurl = 'https://min.io/docs/minio/kubernetes/eks/'
- with open('url-excludes.yaml','r') as f:
- for i in (yaml.safe_load_all(f)):
- if i['tag'] == 'eks':
- excludes = i['excludes']
- break
-
-elif tags.has("gke"):
- html_baseurl = 'https://min.io/docs/minio/kubernetes/gke/'
- with open('url-excludes.yaml','r') as f:
- for i in (yaml.safe_load_all(f)):
- if i['tag'] == 'gke':
- excludes = i['excludes']
- break
-
-elif tags.has("aks"):
- html_baseurl = 'https://min.io/docs/minio/kubernetes/aks/'
- with open('url-excludes.yaml','r') as f:
- for i in (yaml.safe_load_all(f)):
- if i['tag'] == 'aks':
- excludes = i['excludes']
- break
exclude_patterns.extend(excludes)
@@ -246,56 +175,20 @@ html_js_files = [
# Add https://www.min.io/robots.txt to html_extra_path list once available.
html_extra_path = [ 'extra']
+html_baseurl = 'https://docs.min.io/community/minio-object-store'
+
# -- Project information -----------------------------------------------------
-# We assume a single tag, since we control the builder
-platform = list(tags.tags.keys())[0]
-
-platform_fmt = ""
-
-if platform == "k8s":
- platform_fmt = "Kubernetes"
-elif platform == "macos":
- platform_fmt = "MacOS"
-elif platform == "openshift":
- platform_fmt = "OpenShift"
-elif platform == "eks":
- platform_fmt = "Elastic Kubernetes Service"
-elif platform == "gke":
- platform_fmt = "Google Kubernetes Engine"
-elif platform == "aks":
- platform_fmt = "Azure Kubernetes Service"
-else:
- platform_fmt = platform.capitalize()
-
-project = 'MinIO Documentation for ' + platform_fmt
+project = 'Documentation for MinIO Object Storage'
copyright = '2020-Present, MinIO, Inc. '
author = 'MinIO Documentation Team'
-html_title = 'MinIO Object Storage for ' + platform_fmt
-html_short_title = 'MinIO Object Storage for ' + platform_fmt
+html_title = 'MinIO Object Storage (AGPLv3)'
+html_short_title = 'MinIO Object Storage'
html_permalinks_icon = ''
html_context = {
- 'doc_platform': platform.lower(),
- 'docs': [
- # The first item has to be the current docs site #
- {
- 'name': 'MinIO Server',
- 'current': True
- },
- {
- 'name': 'DirectPV',
- 'url': 'https://min.io/docs/directpv',
- 'external': True
- },
- {
- 'name': 'KES',
- 'url': 'https://min.io/docs/kes',
- 'external': True
- }
- ]
}
# -- Options for Sphinx Tabs -------------------------------------------------
@@ -306,14 +199,9 @@ sphinx_tabs_disable_css_loading = True
# k8s is temporary until integrating the references here
-intersphinx_mapping = {
- 'linux' : ('https://min.io/docs/minio/linux/', None),
- 'kubernetes' : ('https://min.io/docs/minio/kubernetes/upstream/',None)
-}
-
rst_prolog = """
-.. |platform| replace:: %s
+.. |platform| replace:: 'foo'
.. |podman| replace:: `Podman `__
@@ -323,10 +211,18 @@ rst_prolog = """
.. |minio-latest| replace:: MINIOLATEST
.. |minio-rpm| replace:: RPMURL
.. |minio-deb| replace:: DEBURL
-.. |minio-rpmarm64| replace:: RPMARM64URL
-.. |minio-debarm64| replace:: DEBARM64URL
-.. |subnet| replace:: `MinIO pricing `__
-.. |subnet-short| replace:: `pricing `__
+.. |minio-binary| replace:: MINIOURL
+.. |minio-rpm-arm64| replace:: RPMARM64URL
+.. |minio-deb-arm64| replace:: DEBARM64URL
+.. |minio-binary-arm64| replace:: MINIOARM64URL
+.. |minio-rpm-ppc64le| replace:: RPMPPC64LEURL
+.. |minio-deb-ppc64le| replace:: DEBPPC64LEURL
+.. |minio-binary-ppc64le| replace:: MINIOPPC64LEURL
+.. |minio-rpms-390x| replace:: RPMS390XURL
+.. |minio-debs-390x| replace:: DEBS390XURL
+.. |minio-binarys-390x| replace:: MINIOS390XURL
+.. |subnet| replace:: `MinIO SUBNET `__
+.. |subnet-short| replace:: `SUBNET `__
.. |SNSD| replace:: :abbr:`SNSD (Single-Node Single-Drive)`
.. |SNMD| replace:: :abbr:`SNMD (Single-Node Multi-Drive)`
.. |MNMD| replace:: :abbr:`MNMD (Multi-Node Multi-Drive)`
@@ -348,4 +244,4 @@ rst_prolog = """
.. |rust-sdk-version| replace:: RUSTVERSION
-""" % platform_fmt
+"""
diff --git a/source/design.rst b/source/design.rst
index 9f09e888..4e472589 100644
--- a/source/design.rst
+++ b/source/design.rst
@@ -219,7 +219,7 @@ Grids
Header 1
--------
-.. cond:: linux
+.. cond:: mindocs
.. include:: /includes/common/common-design.rst
diff --git a/source/developers/file-transfer-protocol.rst b/source/developers/file-transfer-protocol.rst
index 3148cc9d..fa729eba 100644
--- a/source/developers/file-transfer-protocol.rst
+++ b/source/developers/file-transfer-protocol.rst
@@ -12,13 +12,211 @@ File Transfer Protocol (FTP/SFTP)
.. contents:: Table of Contents
:local:
- :depth: 1
+ :depth: 2
-.. cond:: not k8s
+.. tab-set::
- .. include:: /includes/linux/file-transfer-protocol-not-k8s.rst
+ .. tab-item:: Kubernetes
+ :sync: k8s
-.. cond:: k8s and not (openshift or eks or gke or aks)
+ Starting with Operator 5.0.7 and :minio-release:`MinIO Server RELEASE.2023-04-20T17-56-55Z `, you can use the SSH File Transfer Protocol (SFTP) to interact with the objects on a MinIO Operator Tenant deployment.
- .. include:: /includes/k8s/file-transfer-protocol-k8s.rst
+ SFTP is defined by the Internet Engineering Task Force (IETF) as an extension of SSH 2.0.
+ It allows file transfer over SSH for use with :ref:`Transport Layer Security (TLS) ` and virtual private network (VPN) applications.
+
+ Enabling SFTP does not affect other MinIO features.
+
+ .. tab-item:: Baremetal
+ :sync: baremetal
+
+ Starting with :minio-release:`MinIO Server RELEASE.2023-04-20T17-56-55Z `, you can use the File Transfer Protocol (FTP) to interact with the objects on a MinIO deployment.
+
+ You must specifically enable FTP or SFTP when starting the server.
+ Enabling either server type does not affect other MinIO features.
+
+ This page uses the abbreviation FTP throughout, but you can use any of the supported FTP protocols described below.
+
+Supported Protocols
+-------------------
+
+.. tab-set::
+
+ .. tab-item:: Kubernetes
+ :sync: k8s
+
+ The MinIO Operator only supports configuring SSH File Transfer Protocol (SFTP).
+
+ .. tab-item:: Baremetal
+ :sync: baremetal
+
+ When enabled, MinIO supports FTP access over the following protocols:
+
+ - SSH File Transfer Protocol (SFTP)
+
+ SFTP is defined by the Internet Engineering Task Force (IETF) as an extension of SSH 2.0.
+ SFTP allows file transfer over SSH for use with :ref:`Transport Layer Security (TLS) ` and virtual private network (VPN) applications.
+
+ Your FTP client must support SFTP.
+
+ - File Transfer Protocol over SSL/TLS (FTPS)
+
+ FTPS allows for encrypted FTP communication with TLS certificates over the standard FTP communication channel.
+ FTPS should not be confused with SFTP, as FTPS does not communicate over a Secure Shell (SSH).
+
+ Your FTP client must support FTPS.
+
+ - File Transfer Protocol (FTP)
+
+ Unencrypted file transfer.
+
+ MinIO does **not** recommend using unencrypted FTP for file transfer.
+
+Supported Commands
+------------------
+
+When enabled, MinIO supports the following SFTP operations:
+
+- ``get``
+- ``put``
+- ``ls``
+- ``mkdir``
+- ``rmdir``
+- ``delete``
+
+MinIO does not support either ``append`` or ``rename`` operations.
+
+Considerations
+--------------
+
+Versioning
+~~~~~~~~~~
+
+SFTP clients can only operate on the :ref:`latest version ` of an object.
+Specifically:
+
+- For read operations, MinIO only returns the latest version of the requested object(s) to the SFTP client.
+- For write operations, MinIO applies normal versioning behavior and creates a new object version at the specified namespace.
+ ``rm`` and ``rmdir`` operations create ``DeleteMarker`` objects.
+
+Authentication and Access
+~~~~~~~~~~~~~~~~~~~~~~~~~
+
+SFTP access requires the same authentication as any other S3 client.
+MinIO supports the following authentication providers:
+
+- :ref:`MinIO IDP ` users and their service accounts
+- :ref:`Active Directory/LDAP ` users and their service accounts
+- :ref:`OpenID/OIDC ` service accounts
+
+:ref:`STS ` credentials **cannot** access buckets or objects over SFTP.
+
+Authenticated users can access buckets and objects based on the :ref:`policies ` assigned to the user or parent user account.
+
+The SFTP protocol does not require any of the ``admin:*`` :ref:`permissions `.
+You may not perform other MinIO admin actions with SFTP.
+
+Prerequisites
+-------------
+
+.. tab-set::
+
+ .. tab-item:: Kubernetes
+ :sync: k8s
+
+ - MinIO Operator v5.0.7 or later.
+ - Enable an SFTP port (8022) for the server.
+ - A port to use for the SFTP commands and a range of ports to allow the SFTP server to request to use for the data transfer.
+
+ .. tab-item:: Baremetal
+ :sync: baremetal
+
+ - MinIO RELEASE.2023-04-20T17-56-55Z or later.
+ - Enable an FTP or SFTP port for the server.
+ - A port to use for the FTP commands and a range of ports to allow the FTP server to request to use for the data transfer.
+
+Procedure
+---------
+
+.. tab-set::
+
+ .. tab-item:: Kubernetes
+ :sync: k8s
+
+ .. include:: /includes/k8s/file-transfer-protocol-k8s.rst
+
+ .. tab-item:: Baremetal
+ :sync: baremetal
+
+ .. include:: /includes/linux/file-transfer-protocol-not-k8s.rst
+
+.. _minio-certificate-key-file-sftp-k8s:
+
+Connect to MinIO Using SFTP with a Certificate Key File
+-------------------------------------------------------
+
+.. versionadded:: RELEASE.2024-05-07T06-41-25Z
+
+
+MinIO supports mutual TLS (mTLS) certificate-based authentication on SFTP, where both the server and the client verify the authenticity of each other.
+
+This type of authentication requires the following:
+
+1. Public key file for the trusted certificate authority
+2. Public key file for the MinIO Server minted and signed by the trusted certificate authority
+3. Public key file for the user minted and signed by the trusted certificate authority for the client connecting by SFTP and located in the user's ``.ssh`` folder (or equivalent for the operating system)
+
+The keys must include a `principals list `__ of the user(s) that can authenticate with the key:
+
+.. code-block:: shell
+ :class: copyable
+
+ ssh-keygen -s ~/.ssh/ca_user_key -I miniouser -n miniouser -V +1h -z 1 miniouser1.pub
+
+- ``-s`` specifies the path to the certificate authority public key to use for generating this key.
+ The specified public key must have a ``principals`` list that includes this user.
+- ``-I`` specifies the key identity for the public key.
+- ``-n`` creates the ``user principals`` list for which this key is valid.
+ You must include the user for which this key is valid, and the user must match the username in MinIO.
+- ``-V`` limits the duration for which the generated key is valid.
+ In this example, the key is valid for one hour.
+ Adjust the duration for your requirements.
+- ``-z`` adds a serial number to the key to distinguish this generated public key from other keys signed by the same certificate authority public key.
+
+MinIO requires specifying the Certificate Authority used to sign the certificates for SFTP access.
+Start or restart the MinIO Server and specify the path to the trusted certificate authority's public key using an ``--sftp="trusted-user-ca-key=PATH"`` flag:
+
+.. code-block:: shell
+ :class: copyable
+
+ minio server {path-to-server} --sftp="trusted-user-ca-key=/path/to/.ssh/ca_user_key.pub" {...other flags}
+
+When connecting to the MinIO Server with SFTP, the client verifies the MinIO Server's certificate.
+The client then passes its own certificate to the MinIO Server.
+The MinIO Server verifies the key created above by comparing its value to the the known public key from the certificate authority provided at server startup.
+
+Once the MinIO Server verifies the client's certificate, the user can connect to the MinIO server over SFTP:
+
+.. code-block:: bash
+ :class: copyable:
+
+ sftp -P
+
+Require service account or LDAP for authentication
+~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+
+To force authentication to SFTP using LDAP or service account credentials, append a suffix to the username.
+Valid suffixes are either ``=ldap`` or ``=svc``.
+
+.. code-block:: console
+
+ > sftp -P 8022 my-ldap-user=ldap@[minio@localhost]:/bucket
+
+
+.. code-block:: console
+
+ > sftp -P 8022 my-ldap-user=svc@[minio@localhost]:/bucket
+
+
+- Replace ``my-ldap-user`` with the username to use.
+- Replace ``[minio@localhost]`` with the address of the MinIO server.
diff --git a/source/developers/security-token-service.rst b/source/developers/security-token-service.rst
index 17c53d15..dcd5bfb1 100644
--- a/source/developers/security-token-service.rst
+++ b/source/developers/security-token-service.rst
@@ -45,4 +45,5 @@ MinIO supports the following STS API endpoints:
:hidden:
:glob:
- /developers/security-token-service/*
\ No newline at end of file
+ /developers/security-token-service/*
+ /developers/sts-for-operator
diff --git a/source/includes/aks/deploy-minio-on-azure-kubernetes-service.rst b/source/includes/aks/deploy-minio-on-azure-kubernetes-service.rst
deleted file mode 100644
index 9502f601..00000000
--- a/source/includes/aks/deploy-minio-on-azure-kubernetes-service.rst
+++ /dev/null
@@ -1,53 +0,0 @@
-
-.. _deploy-operator-gke:
-
-=================================================
-Deploy MinIO Operator on Azure Kubernetes Service
-=================================================
-
-.. default-domain:: minio
-
-.. contents:: Table of Contents
- :local:
- :depth: 1
-
-Overview
---------
-
-`Azure Kubernetes Engine `__ (AKS) is a highly available, secure, and fully managed Kubernetes service from Microsoft Azure.
-The MinIO Kubernetes Operator supports deploying MinIO Tenants onto AKS infrastructure using the MinIO Operator Console or `kustomize `__ for :minio-git:`YAML-defined deployments `.
-
-:minio-web:`Through the AKS Marketplace `
- MinIO maintains an `AKS Marketplace listing `__ through which you can register your AKS cluster with |subnet|.
- Any MinIO tenant you deploy through Marketplace-connected clusters can take advantage of SUBNET registration, including 24/7 access to MinIO engineers.
-
-This page documents deploying the MinIO Operator through the CLI using Kustomize.
-For instructions on deploying the MinIO Operator through the AKS Marketplace, see :minio-web:`Deploy MinIO through AKS `
-
-This documentation assumes familiarity with all referenced Kubernetes and Azure Kubernetes Service concepts, utilities, and procedures.
-While this documentation *may* provide guidance for configuring or deploying Kubernetes-related or Azure Kubernetes Service-related resources on a best-effort basis, it is not a replacement for the official :kube-docs:`Kubernetes Documentation <>`.
-
-Prerequisites
--------------
-
-Existing AKS Cluster
-~~~~~~~~~~~~~~~~~~~~
-
-This procedure assumes an existing :abbr:`AKS (Azure Kubernetes Service)` cluster onto which you can deploy the MinIO Operator.
-
-The Operator by default deploys pods and services with two replicas each and pod anti-affinity.
-The AKS cluster should therefore have at least two nodes available for scheduling Operator pods and services.
-While these nodes *may* be the same nodes intended for use by MinIO Tenants, co-locating Operator and Tenant pods may increase the risk of service interruptions due to the loss of any one node.
-
-``kubectl`` Access to the AKS Cluster
-~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
-
-Ensure your host machine has a ``kubectl`` installation compatible with the target AKS cluster.
-For guidance on connecting ``kubectl`` to AKS, see :aks-docs:`Install kubectl and configure cluster access `.
-
-Procedure
----------
-
-The following steps deploy Operator using Kustomize and a ``kustomization.yaml`` file from the MinIO Operator GitHub repository.
-
-.. include:: /includes/common/common-install-operator-kustomize.rst
diff --git a/source/includes/baremetal/steps-configure-ad-ldap-external-identity-management.rst b/source/includes/baremetal/steps-configure-ad-ldap-external-identity-management.rst
new file mode 100644
index 00000000..ecfbe9b1
--- /dev/null
+++ b/source/includes/baremetal/steps-configure-ad-ldap-external-identity-management.rst
@@ -0,0 +1,146 @@
+1. Set the Active Directory / LDAP Configuration Settings
+
+ Configure the AD/LDAP provider using one of the following:
+
+ * MinIO Client
+ * Environment variables
+
+ All methods require starting/restarting the MinIO deployment to apply changes.
+
+ The following tabs provide a quick reference for the available configuration methods:
+
+ .. tab-set::
+
+ .. tab-item:: MinIO Client
+
+ MinIO supports specifying the AD/LDAP provider settings using :mc:`mc idp ldap` commands.
+
+ For distributed deployments, the :mc:`mc idp ldap` command applies the configuration to all nodes in the deployment.
+
+ The following example code sets *all* configuration settings related to configuring an AD/LDAP provider for external identity management.
+ The minimum *required* settings are:
+
+ - :mc-conf:`server_addr `
+ - :mc-conf:`lookup_bind_dn `
+ - :mc-conf:`lookup_bind_password `
+ - :mc-conf:`user_dn_search_base_dn `
+ - :mc-conf:`user_dn_search_filter `
+
+ .. code-block:: shell
+ :class: copyable
+
+ mc idp ldap add ALIAS \
+ server_addr="ldaps.example.net:636" \
+ lookup_bind_dn="CN=xxxxx,OU=xxxxx,OU=xxxxx,DC=example,DC=net" \
+ lookup_bind_password="xxxxxxxx" \
+ user_dn_search_base_dn="DC=example,DC=net" \
+ user_dn_search_filter="(&(objectCategory=user)(sAMAccountName=%s))" \
+ group_search_filter= "(&(objectClass=group)(member=%d))" \
+ group_search_base_dn="ou=MinIO Users,dc=example,dc=net" \
+ tls_skip_verify="off" \
+ server_insecure=off \
+ server_starttls="off" \
+ srv_record_name="" \
+ comment="Test LDAP server"
+
+ For Kubernetes deployments, ensure the `ALIAS` corresponds to the externally accessible hostname for the MinIO Tenant.
+
+ For more complete documentation on these settings, see :mc:`mc idp ldap`.
+
+ .. admonition:: :mc:`mc idp ldap` recommended
+ :class: note
+
+ :mc:`mc idp ldap` offers additional features and improved validation over :mc-cmd:`mc admin config set` runtime configuration settings.
+ :mc:`mc idp ldap` supports the same settings as :mc:`mc admin config` and the :mc-conf:`identity_ldap` configuration key.
+
+ The :mc-conf:`identity_ldap` configuration key remains available for existing scripts and tools.
+
+ .. tab-item:: Environment Variables
+
+ MinIO supports specifying the AD/LDAP provider settings using :ref:`environment variables `.
+ The :mc:`minio server` process applies the specified settings on its next startup.
+ For distributed deployments, specify these settings across all nodes in the deployment using the *same* values.
+ Any differences in server configurations between nodes will result in startup or configuration failures.
+
+ The following example code sets *all* environment variables related to configuring an AD/LDAP provider for external identity management. The minimum *required* variable are:
+
+ - :envvar:`MINIO_IDENTITY_LDAP_SERVER_ADDR`
+ - :envvar:`MINIO_IDENTITY_LDAP_LOOKUP_BIND_DN`
+ - :envvar:`MINIO_IDENTITY_LDAP_LOOKUP_BIND_PASSWORD`
+ - :envvar:`MINIO_IDENTITY_LDAP_USER_DN_SEARCH_BASE_DN`
+ - :envvar:`MINIO_IDENTITY_LDAP_USER_DN_SEARCH_FILTER`
+
+ .. code-block:: shell
+ :class: copyable
+
+ export MINIO_IDENTITY_LDAP_SERVER_ADDR="ldaps.example.net:636"
+ export MINIO_IDENTITY_LDAP_LOOKUP_BIND_DN="CN=xxxxx,OU=xxxxx,OU=xxxxx,DC=example,DC=net"
+ export MINIO_IDENTITY_LDAP_USER_DN_SEARCH_BASE_DN="dc=example,dc=net"
+ export MINIO_IDENTITY_LDAP_USER_DN_SEARCH_FILTER="(&(objectCategory=user)(sAMAccountName=%s))"
+ export MINIO_IDENTITY_LDAP_LOOKUP_BIND_PASSWORD="xxxxxxxxx"
+ export MINIO_IDENTITY_LDAP_GROUP_SEARCH_FILTER="(&(objectClass=group)(member=%d))"
+ export MINIO_IDENTITY_LDAP_GROUP_SEARCH_BASE_DN="ou=MinIO Users,dc=example,dc=net"
+ export MINIO_IDENTITY_LDAP_TLS_SKIP_VERIFY="off"
+ export MINIO_IDENTITY_LDAP_SERVER_INSECURE="off"
+ export MINIO_IDENTITY_LDAP_SERVER_STARTTLS="off"
+ export MINIO_IDENTITY_LDAP_SRV_RECORD_NAME=""
+ export MINIO_IDENTITY_LDAP_COMMENT="LDAP test server"
+
+ For complete documentation on these variables, see :ref:`minio-server-envvar-external-identity-management-ad-ldap`.
+
+#. Restart the MinIO Deployment
+
+ You must restart the MinIO deployment to apply the configuration changes.
+
+ If you configured AD/LDAP from the MinIO Console, no additional action is required.
+ The MinIO Console automatically restarts the deployment after saving the new AD/LDAP configuration.
+
+ For MinIO Client and environment variable configuration, use the :mc-cmd:`mc admin service restart` command to restart the deployment:
+
+ .. code-block:: shell
+ :class: copyable
+
+ mc admin service restart ALIAS
+
+ Replace ``ALIAS`` with the :ref:`alias ` of the deployment to restart.
+
+#. Use the MinIO Console to Log In with AD/LDAP Credentials
+
+ The MinIO Console supports the full workflow of authenticating to the AD/LDAP provider, generating temporary credentials using the MinIO :ref:`minio-sts-assumerolewithldapidentity` Security Token Service (STS) endpoint, and logging the user into the MinIO deployment.
+
+ You can access the Console by opening the root URL for the MinIO cluster. For example, ``https://minio.example.net:9000``.
+
+ Once logged in, you can perform any action for which the authenticated user is :ref:`authorized `.
+
+ You can also create :ref:`access keys ` for supporting applications which must perform operations on MinIO.
+ Access Keys are long-lived credentials which inherit their privileges from the parent user.
+ The parent user can further restrict those privileges while creating the service account.
+
+#. Generate S3-Compatible Temporary Credentials using AD/LDAP Credentials
+
+ MinIO requires clients to authenticate using :s3-api:`AWS Signature Version 4 protocol ` with support for the deprecated Signature Version 2 protocol.
+ Specifically, clients must present a valid access key and secret key to access any S3 or MinIO administrative API, such as ``PUT``, ``GET``, and ``DELETE`` operations.
+
+ Applications can generate temporary access credentials as-needed using the :ref:`minio-sts-assumerolewithldapidentity` Security Token Service (STS) API endpoint and AD/LDAP user credentials.
+ MinIO provides an example Go application :minio-git:`ldap.go ` that manages this workflow.
+
+ .. code-block:: shell
+
+ POST https://minio.example.net?Action=AssumeRoleWithLDAPIdentity
+ &LDAPUsername=USERNAME
+ &LDAPPassword=PASSWORD
+ &Version=2011-06-15
+ &Policy={}
+
+ - Replace the ``LDAPUsername`` with the username of the AD/LDAP user.
+
+ - Replace the ``LDAPPassword`` with the password of the AD/LDAP user.
+
+ - Replace the ``Policy`` with an inline URL-encoded JSON :ref:`policy ` that further restricts the permissions associated to the temporary credentials.
+
+ Omit to use the :ref:`policy whose name matches ` the Distinguished Name (DN) of the AD/LDAP user.
+
+ The API response consists of an XML document containing the access key, secret key, session token, and expiration date.
+ Applications can use the access key and secret key to access and perform operations on MinIO.
+
+ See the :ref:`minio-sts-assumerolewithldapidentity` for reference documentation.
\ No newline at end of file
diff --git a/source/includes/baremetal/steps-configure-keycloak-identity-management.rst b/source/includes/baremetal/steps-configure-keycloak-identity-management.rst
new file mode 100644
index 00000000..0276a39c
--- /dev/null
+++ b/source/includes/baremetal/steps-configure-keycloak-identity-management.rst
@@ -0,0 +1,78 @@
+.. |KEYCLOAK_URL| replace:: keycloak-url.example.net:8080
+.. |MINIO_S3_URL| replace:: minio-url.example.net:9000
+.. |MINIO_CONSOLE_URL| replace:: minio-url.example.net:9001
+
+#. Configure or Create a Client for Accessing Keycloak
+
+ Authenticate to the Keycloak :guilabel:`Administrative Console` and navigate to :guilabel:`Clients`.
+
+ .. include:: /includes/common/common-configure-keycloak-identity-management.rst
+ :start-after: start-configure-keycloak-client
+ :end-before: end-configure-keycloak-client
+
+#. Create Client Scope for MinIO Client
+
+ Client scopes allow Keycloak to map user attributes as part of the JSON Web Token (JWT) returned in authentication requests.
+ This allows MinIO to reference those attributes when assigning policies to the user.
+ This step creates the necessary client scope to support MinIO authorization after successful Keycloak authentication.
+
+ .. include:: /includes/common/common-configure-keycloak-identity-management.rst
+ :start-after: start-configure-keycloak-client-scope
+ :end-before: end-configure-keycloak-client-scope
+
+#. Apply the Necessary Attribute to Keycloak Users/Groups
+
+ You must assign an attribute named ``policy`` to the Keycloak Users or Groups.
+ Set the value to any :ref:`policy ` on the MinIO deployment.
+
+ .. include:: /includes/common/common-configure-keycloak-identity-management.rst
+ :start-after: start-configure-keycloak-user-group-attributes
+ :end-before: end-configure-keycloak-user-group-attributes
+
+#. Configure MinIO for Keycloak Authentication
+
+ MinIO supports multiple methods for configuring Keycloak authentication:
+
+ - Using a terminal/shell and the :mc:`mc idp openid` command
+ - Using environment variables set prior to starting MinIO
+
+ .. tab-set::
+
+ .. tab-item:: CLI
+
+ .. include:: /includes/common/common-configure-keycloak-identity-management.rst
+ :start-after: start-configure-keycloak-minio-cli
+ :end-before: end-configure-keycloak-minio-cli
+
+ .. tab-item:: Environment Variables
+
+ .. include:: /includes/common/common-configure-keycloak-identity-management.rst
+ :start-after: start-configure-keycloak-minio-envvar
+ :end-before: end-configure-keycloak-minio-envvar
+
+ Restart the MinIO deployment for the changes to apply.
+
+ Check the MinIO logs and verify that startup succeeded with no errors related to the OIDC configuration.
+
+ If you attempt to log in with the Console, you should now see an (SSO) button using the configured :guilabel:`Display Name`.
+
+ Specify a configured user and attempt to log in.
+ MinIO should automatically redirect you to the Keycloak login entry.
+ Upon successful authentication, Keycloak should redirect you back to the MinIO Console using either the originating Console URL *or* the :guilabel:`Redirect URI` if configured.
+
+#. Generate Application Credentials using the Security Token Service (STS)
+
+ .. include:: /includes/common/common-configure-keycloak-identity-management.rst
+ :start-after: start-configure-keycloak-sts
+ :end-before: end-configure-keycloak-sts
+
+#. Next Steps
+
+ Applications should implement the :ref:`STS AssumeRoleWithWebIdentity ` flow using their :ref:`SDK ` of choice.
+ When STS credentials expire, applications should have logic in place to regenerate the JWT token, STS token, and MinIO credentials before retrying and continuing operations.
+
+ Alternatively, users can generate :ref:`access keys ` through the MinIO Console for the purpose of creating long-lived API-key like access using their Keycloak credentials.
+
+
+
+
diff --git a/source/includes/baremetal/steps-configure-openid-external-identity-management.rst b/source/includes/baremetal/steps-configure-openid-external-identity-management.rst
new file mode 100644
index 00000000..6ae638ad
--- /dev/null
+++ b/source/includes/baremetal/steps-configure-openid-external-identity-management.rst
@@ -0,0 +1,131 @@
+1. Set the OpenID Configuration Settings
+
+ You can configure the :abbr:`OIDC (OpenID Connect)` provider using either
+ environment variables *or* server runtime configuration settings. Both
+ methods require starting/restarting the MinIO deployment to apply changes. The
+ following tabs provide a quick reference of all required and optional
+ environment variables and configuration settings respectively:
+
+ .. tab-set::
+
+ .. tab-item:: Environment Variables
+
+ MinIO supports specifying the :abbr:`OIDC (OpenID Connect)` provider
+ settings using :ref:`environment variables
+ `. The
+ :mc:`minio server` process applies the specified settings on its next
+ startup. For distributed deployments, specify these settings across all
+ nodes in the deployment using the *same* values consistently.
+
+ The following example code sets *all* environment variables related to
+ configuring an :abbr:`OIDC (OpenID Connect)` provider for external
+ identity management. The minimum *required* variable is
+ :envvar:`MINIO_IDENTITY_OPENID_CONFIG_URL`:
+
+ .. code-block:: shell
+ :class: copyable
+
+ export MINIO_IDENTITY_OPENID_CONFIG_URL="https://openid-provider.example.net/.well-known/openid-configuration"
+ export MINIO_IDENTITY_OPENID_CLIENT_ID=""
+ export MINIO_IDENTITY_OPENID_CLIENT_SECRET=""
+ export MINIO_IDENTITY_OPENID_CLAIM_NAME=""
+ export MINIO_IDENTITY_OPENID_CLAIM_PREFIX=""
+ export MINIO_IDENTITY_OPENID_SCOPES=""
+ export MINIO_IDENTITY_OPENID_REDIRECT_URI=""
+ export MINIO_IDENTITY_OPENID_COMMENT=""
+
+ Replace the ``MINIO_IDENTITY_OPENID_CONFIG_URL`` with the URL endpoint of
+ the :abbr:`OIDC (OpenID Connect)` provider discovery document.
+
+ For complete documentation on these variables, see
+ :ref:`minio-server-envvar-external-identity-management-openid`
+
+ .. tab-item:: Configuration Settings
+
+ MinIO supports specifying the :abbr:`OIDC (OpenID Connect)` provider
+ settings using :mc-conf:`configuration settings `. The
+ :mc:`minio server` process applies the specified settings on its next
+ startup. For distributed deployments, the :mc:`mc admin config`
+ command applies the configuration to all nodes in the deployment.
+
+ The following example code sets *all* configuration settings related to
+ configuring an :abbr:`OIDC (OpenID Connect)` provider for external
+ identity management. The minimum *required* setting is
+ :mc-conf:`identity_openid config_url `:
+
+ .. code-block:: shell
+ :class: copyable
+
+ mc admin config set ALIAS/ identity_openid \
+ config_url="https://openid-provider.example.net/.well-known/openid-configuration" \
+ client_id="" \
+ client_secret="" \
+ claim_name="" \
+ claim_prefix="" \
+ scopes="" \
+ redirect_uri=""
+
+ Replace the ``config_url`` with the URL endpoint of the
+ :abbr:`OIDC (OpenID Connect)` provider discovery document.
+
+ For more complete documentation on these settings, see
+ :mc-conf:`identity_openid`.
+
+#. Restart the MinIO Deployment
+
+ You must restart the MinIO deployment to apply the configuration changes.
+ Use the :mc-cmd:`mc admin service restart` command to restart the deployment.
+
+ .. code-block:: shell
+ :class: copyable
+
+ mc admin service restart ALIAS
+
+ Replace ``ALIAS`` with the :ref:`alias ` of the deployment to
+ restart.
+
+#. Generate S3-Compatible Temporary Credentials using OIDC Credentials
+
+ MinIO requires clients authenticate using :s3-api:`AWS Signature Version 4
+ protocol ` with support for the deprecated
+ Signature Version 2 protocol. Specifically, clients must present a valid access
+ key and secret key to access any S3 or MinIO administrative API, such as
+ ``PUT``, ``GET``, and ``DELETE`` operations.
+
+ Applications can generate temporary access credentials as-needed using the
+ :ref:`minio-sts-assumerolewithwebidentity` Security Token Service (STS)
+ API endpoint and the JSON Web Token (JWT) returned by the
+ :abbr:`OIDC (OpenID Connect)` provider.
+
+ The application must provide a workflow for logging into the
+ :abbr:`OIDC (OpenID Connect)` provider and retrieving the
+ JSON Web Token (JWT) associated to the authentication session. Defer to the
+ provider documentation for obtaining and parsing the JWT token after successful
+ authentication. MinIO provides an example Go application
+ :minio-git:`web-identity.go ` with
+ an example of managing this workflow.
+
+ Once the application retrieves the JWT token, use the
+ ``AssumeRoleWithWebIdentity`` endpoint to generate the temporary credentials:
+
+ .. code-block:: shell
+ :class: copyable
+
+ POST https://minio.example.net?Action=AssumeRoleWithWebIdentity
+ &WebIdentityToken=TOKEN
+ &Version=2011-06-15
+ &DurationSeconds=86400
+ &Policy=Policy
+
+ - Replace the ``TOKEN`` with the JWT token returned in the previous step.
+ - Replace the ``DurationSeconds`` with the duration in seconds until the temporary credentials expire. The example above specifies a period of ``86400`` seconds, or 24 hours.
+ - Replace the ``Policy`` with an inline URL-encoded JSON :ref:`policy ` that further restricts the permissions associated to the temporary credentials.
+
+ Omit to use the policy associated to the OpenID user :ref:`policy claim `.
+
+ The API response consists of an XML document containing the
+ access key, secret key, session token, and expiration date. Applications
+ can use the access key and secret key to access and perform operations on
+ MinIO.
+
+ See the :ref:`minio-sts-assumerolewithwebidentity` for reference documentation.
\ No newline at end of file
diff --git a/source/includes/common-installation.rst b/source/includes/common-installation.rst
index 385afdd0..47eb3200 100644
--- a/source/includes/common-installation.rst
+++ b/source/includes/common-installation.rst
@@ -3,7 +3,7 @@
The following tabs provide examples of installing MinIO onto 64-bit Linux operating systems using RPM, DEB, or binary.
The RPM and DEB packages automatically install MinIO to the necessary system paths and create a ``minio`` service for ``systemctl``.
MinIO strongly recommends using the RPM or DEB installation routes.
-To update deployments managed using ``systemctl``, see :ref:`minio-upgrade-systemctl`.
+To update deployments managed using ``systemctl``, see :ref:`minio-upgrade`.
.. tab-set::
diff --git a/source/includes/common/common-configure-keycloak-identity-management.rst b/source/includes/common/common-configure-keycloak-identity-management.rst
index 7207ebcf..79e2ff45 100644
--- a/source/includes/common/common-configure-keycloak-identity-management.rst
+++ b/source/includes/common/common-configure-keycloak-identity-management.rst
@@ -322,7 +322,7 @@ The following example code sets the minimum required environment variables relat
:class: copyable
:substitutions:
- MINIO_IDENTITY_OPENID_CONFIG_URL_PRIMARY_IAM="https://|KEYCLOAK_URL|/.well-known/openid-configuration"
+ MINIO_IDENTITY_OPENID_CONFIG_URL_PRIMARY_IAM="https://|KEYCLOAK_URL|/realms/REALM/.well-known/openid-configuration"
MINIO_IDENTITY_OPENID_CLIENT_ID_PRIMARY_IAM="MINIO_CLIENT"
MINIO_IDENTITY_OPENID_CLIENT_SECRET_PRIMARY_IAM="MINIO_CLIENT_SECRET"
MINIO_IDENTITY_OPENID_DISPLAY_NAME_PRIMARY_IAM="SSO_IDENTIFIER"
diff --git a/source/includes/common/common-k8s-connect-operator-console-no-plugin.rst b/source/includes/common/common-k8s-connect-operator-console-no-plugin.rst
deleted file mode 100644
index 64c2bff9..00000000
--- a/source/includes/common/common-k8s-connect-operator-console-no-plugin.rst
+++ /dev/null
@@ -1,35 +0,0 @@
-The Operator Console service does not automatically bind or expose itself for external access on the Kubernetes cluster.
-Instead, you must configure a network control plane component, such as a load balancer or ingress, to grant external access.
-
-For testing purposes or short-term access, expose the Operator Console service through a NodePort using the following patch:
-
-.. code-block:: shell
- :class: copyable
-
- kubectl patch service -n minio-operator console -p '
- {
- "spec": {
- "ports": [
- {
- "name": "http",
- "port": 9090,
- "protocol": "TCP",
- "targetPort": 9090,
- "nodePort": 30090
- },
- {
- "name": "https",
- "port": 9443,
- "protocol": "TCP",
- "targetPort": 9443,
- "nodePort": 30433
- }
- ],
- "type": "NodePort"
- }
- }'
-
-After applying the path, you can access the service through port ``30433`` on any of the Kubernetes worker nodes.
-
-Append the ``nodePort`` value to the externally-accessible IP address of a worker node in your Kubernetes cluster.
-Use the appropriate ``http`` or ``https`` port depending on whether you deployed Operator Console with TLS.
diff --git a/source/includes/common/common-k8s-connect-operator-console.rst b/source/includes/common/common-k8s-connect-operator-console.rst
deleted file mode 100644
index b8c50dca..00000000
--- a/source/includes/common/common-k8s-connect-operator-console.rst
+++ /dev/null
@@ -1,60 +0,0 @@
-.. dropdown:: Port Forwarding
- :open:
-
- The :ref:`Operator Console service ` does not automatically bind or expose itself for external access on the Kubernetes cluster.
- Instead, configure a network control plane component, such as a load balancer or ingress, to grant external access.
-
- .. cond:: k8s and not openshift
-
- For testing purposes or short-term access, expose the Operator Console service through a NodePort using the following patch:
-
- .. code-block:: shell
- :class: copyable
-
- kubectl patch service -n minio-operator console -p '
- {
- "spec": {
- "ports": [
- {
- "name": "http",
- "port": 9090,
- "protocol": "TCP",
- "targetPort": 9090,
- "nodePort": 30090
- },
- {
- "name": "https",
- "port": 9443,
- "protocol": "TCP",
- "targetPort": 9443,
- "nodePort": 30433
- }
- ],
- "type": "NodePort"
- }
- }'
-
- The patch command should output ``service/console patched``.
- You can now access the service through ports ``30433`` (HTTPS) or ``30090`` (HTTP) on any of your Kubernetes worker nodes.
-
- For example, a Kubernetes cluster with the following Operator nodes might be accessed at ``https://172.18.0.2:30443``:
-
- .. code-block:: shell
-
- kubectl get nodes -o custom-columns=IP:.status.addresses[:]
- IP
- map[address:172.18.0.5 type:InternalIP],map[address:k3d-MINIO-agent-3 type:Hostname]
- map[address:172.18.0.6 type:InternalIP],map[address:k3d-MINIO-agent-2 type:Hostname]
- map[address:172.18.0.2 type:InternalIP],map[address:k3d-MINIO-server-0 type:Hostname]
- map[address:172.18.0.4 type:InternalIP],map[address:k3d-MINIO-agent-1 type:Hostname]
- map[address:172.18.0.3 type:InternalIP],map[address:k3d-MINIO-agent-0 type:Hostname]
-
- Use the following command to retrieve the JWT token necessary for logging into the Operator Console:
-
- .. code-block:: shell
- :class: copyable
-
- kubectl get secret/console-sa-secret -n minio-operator -o json | jq -r '.data.token' | base64 -d
-
- If your local host does not have the ``jq`` utility installed, you can run the ``kubectl`` part of this command (before ``| jq``) and locate the ``data.token`` section of the output.
-
diff --git a/source/includes/common/installation.rst b/source/includes/common/installation.rst
deleted file mode 100644
index 815448d6..00000000
--- a/source/includes/common/installation.rst
+++ /dev/null
@@ -1,147 +0,0 @@
-.. _minio-installation:
-
-========================
-Install and Deploy MinIO
-========================
-
-.. default-domain:: minio
-
-.. contents:: Table of Contents
- :local:
- :depth: 1
-
-.. meta::
- :description: MinIO Deployment Topologies and Installation Instructions
- :keywords: MinIO, Deploy, Architecture, Topology, Distributed, Replication, Install
-
-.. container:: extlinks-video
-
- - `Installing and Running MinIO on Linux `__
-
- - `Object Storage Essentials `__
-
- - `How to Connect to MinIO with JavaScript `__
-
-MinIO is a software-defined high performance distributed object storage server.
-You can run MinIO on consumer or enterprise-grade hardware and a variety
-of operating systems and architectures.
-
-All MinIO deployments implement :ref:`Erasure Coding ` backends.
-You can deploy MinIO using one of the following topologies:
-
-.. _minio-installation-comparison:
-
-:ref:`Single-Node Single-Drive ` (SNSD or "Standalone")
- Local development and evaluation with no/limited reliability
-
-:ref:`Single-Node Multi-Drive ` (SNMD or "Standalone Multi-Drive")
- Workloads with lower performance, scale, and capacity requirements
-
- Drive-level reliability with configurable tolerance for loss of up to 1/2 all drives
-
- Evaluation of multi-drive topologies and failover behavior.
-
-:ref:`Multi-Node Multi-Drive ` (MNMD or "Distributed")
- Enterprise-grade high-performance object storage
-
- Multi Node/Drive level reliability with configurable tolerance for loss of up to 1/2 all nodes/drives
-
- Primary storage for AI/ML, Distributed Query, Analytics, and other Data Lake components
-
- Scalable for Petabyte+ workloads - both storage capacity and performance
-
-.. cond:: macos or windows
-
- .. note::
-
- Use |platform|-based MinIO deployments for early development and evaluation.
- MinIO provides no guarantee of support for :abbr:`SNMD (Single-Node Multi-Drive)` or :abbr:`MNMD (Multi-Node Multi-Drive)` topologies on |platform|.
-
- MinIO strongly recommends :minio-docs:`Linux (RHEL, Ubuntu) ` or :minio-docs:`Kubernetes (Upstream, OpenShift) ` for long-term development and production environments.
-
-Site Replication
-----------------
-
-Site replication expands the features of bucket replication to include IAM, security tokens, access keys, and bucket features the same across all sites.
-
-:ref:`Site replication ` links multiple MinIO deployments together and keeps the buckets, objects, and Identity and Access Management (IAM) settings in sync across all connected sites.
-
-.. include:: /includes/common-replication.rst
- :start-after: start-mc-admin-replicate-what-replicates
- :end-before: end-mc-admin-replicate-what-replicates
-
-.. cond:: macos or windows
-
- MinIO does not recommend using |platform| hosts for site replication outside of early development, evaluation, or general experimentation.
- For production, use :minio-docs:`Linux ` or :minio-docs:`Kubernetes `.
-
-What Does Not Replicate?
-~~~~~~~~~~~~~~~~~~~~~~~~
-
-Not everything replicates across sites.
-
-.. include:: /includes/common-replication.rst
- :start-after: start-mc-admin-replicate-what-does-not-replicate
- :end-before: end-mc-admin-replicate-what-does-not-replicate
-
-.. _minio-installation-platform-support:
-
-Platform Support
-----------------
-
-.. cond:: linux
-
- MinIO provides builds of the MinIO server (:mc:`minio`) and the
- MinIO :abbr:`CLI (Command Line Interface)` (:mc:`mc`) for the following
- platforms.
-
- - Red Hat Enterprise Linux 8.5+ (including all binary-compatible RHEL alternatives)
- - Ubuntu 18.04+
-
- MinIO provides builds for the following architectures:
-
- - AMD64
- - ARM64
- - PowerPC 64 LE
- - S390X
-
-.. cond:: macos
-
- MinIO recommends non-EOL macOS versions (10.14+).
-
-For unlisted platforms or architectures, please reach out to MinIO at
-hello@min.io for additional support and guidance. You can build MinIO from
-:minio-git:`source ` and
-`cross-compile
-`__
-for your platform and architecture combo. MinIO generally does not recommend
-source-based installations in production environments.
-
-.. cond:: linux
-
- .. toctree::
- :titlesonly:
- :hidden:
-
- /operations/install-deploy-manage/deploy-minio-single-node-single-drive
- /operations/install-deploy-manage/deploy-minio-single-node-multi-drive
- /operations/install-deploy-manage/deploy-minio-multi-node-multi-drive
- /operations/install-deploy-manage/multi-site-replication
-
-.. cond:: windows
-
- .. toctree::
- :titlesonly:
- :hidden:
-
- /operations/install-deploy-manage/deploy-minio-single-node-single-drive
-
-.. cond:: macos
-
- .. toctree::
- :titlesonly:
- :hidden:
-
- /operations/install-deploy-manage/deploy-minio-single-node-single-drive
- /operations/install-deploy-manage/deploy-minio-single-node-multi-drive
- /operations/install-deploy-manage/multi-site-replication
\ No newline at end of file
diff --git a/source/includes/container/installation.rst b/source/includes/container/installation.rst
deleted file mode 100644
index 1af9050a..00000000
--- a/source/includes/container/installation.rst
+++ /dev/null
@@ -1,96 +0,0 @@
-.. _minio-installation:
-
-========================
-Install and Deploy MinIO
-========================
-
-.. default-domain:: minio
-
-.. contents:: Table of Contents
- :local:
- :depth: 1
-
-.. container:: extlinks-video
-
- - `Installing and Running MinIO: Overview `__
- - `Installing and Running MinIO: Installation Lab `__
- - `Installing and Running MinIO: Docker Compose Overview `__
- - `Installing and Running MinIO: Docker Compose Lab: `__
-
-MinIO is a software-defined high performance distributed object storage server.
-You can run MinIO on consumer or enterprise-grade hardware and a variety of operating systems and architectures.
-
-MinIO supports three deployment topologies:
-
-Single-Node Single-Drive (SNSD or "Standalone")
- A single MinIO server with a single storage volume or folder.
- |SNSD| deployment provides failover protections. Drive-level reliability and failover depends on the underlying storage volume.
-
- |SNSD| deployments are best suited for evaluation and initial development of applications using MinIO for object storage.
-
- |SNSD| deployments implement a zero-parity erasure coding backend and include support for the following erasure-coding dependent features:
-
- - :ref:`Versioning `
- - :ref:`Object Locking / Retention `
-
-Single-Node Multi-Drive (SNMD or "Standalone Multi-Drive")
- A single MinIO server with four or more storage volumes.
- |SNMD| deployments provide drive-level reliability and failover only.
-
-Multi-Node Multi-Drive (MNMD or "Distributed")
- Multiple MinIO servers with at least four drives across all servers.
- The distributed |MNMD| topology supports production-grade object storage with drive and node-level availability and resiliency.
-
-.. note::
-
- This documentation provides instructions for |SNSD| and |SNMD| for supporting local development and evaluation of MinIO on a single host machine **only**.
- For |MNMD| deployments, use the MinIO Kubernetes Operator to :minio-docs:`deploy and manage MinIO tenants in a containerized and orchestrated environment `.
-
-Site Replication
-----------------
-
-:ref:`Site replication ` links multiple MinIO deployments together and keeps the buckets, objects, and Identity and Access Management (IAM) settings in sync across all connected sites.
-
-.. include:: /includes/common-replication.rst
- :start-after: start-mc-admin-replicate-what-replicates
- :end-before: end-mc-admin-replicate-what-replicates
-
-.. important::
-
- MinIO does not recommend using |platform| hosts for site replication outside of early development, evaluation, or general experimentation.
- For production, use :minio-docs:`Kubernetes ` for an orchestrated container environment.
-
-What Does Not Replicate?
-~~~~~~~~~~~~~~~~~~~~~~~~
-
-Not everything replicates across sites.
-
-.. include:: /includes/common-replication.rst
- :start-after: start-mc-admin-replicate-what-does-not-replicate
- :end-before: end-mc-admin-replicate-what-does-not-replicate
-
-.. _minio-installation-platform-support:
-
-Platform Support
-----------------
-
-MinIO provides container images at the following repositories:
-
-- https://hub.docker.com/r/minio/minio
-- https://quay.io/repository/minio/minio?tab=info
-
-.. versionchanged:: RELEASE.2022-12-02T19-19-22Z
-
- These images include the :ref:`MinIO Client ` command line tool built in for container-level debugging.
- However, to regularly interact with a container MinIO install, :ref:`install the MinIO Client ` on your computer and define an :mc:`alias ` to the container instead.
-
-Use of MinIO images from any other repository, host, or organization is at your own risk.
-
-The :ref:`Single-Node Single-Drive ` and :ref:`Single-Node Multi-Drive ` tutorials provide instructions for the `Docker `__ and :podman-docs:`Podman <>` container managers.
-
-.. toctree::
- :titlesonly:
- :hidden:
-
- /operations/install-deploy-manage/deploy-minio-single-node-single-drive
- /operations/install-deploy-manage/deploy-minio-single-node-multi-drive
diff --git a/source/includes/container/steps-upgrade-minio-deployment.rst b/source/includes/container/steps-upgrade-minio-deployment.rst
deleted file mode 100644
index 9d09e4a4..00000000
--- a/source/includes/container/steps-upgrade-minio-deployment.rst
+++ /dev/null
@@ -1,142 +0,0 @@
-MinIO uses an update-then-restart methodology for upgrading a deployment to a newer release:
-
-1. Update the container MinIO image with the newer release.
-2. Restart the container.
-
-This procedure does not require taking downtime and is non-disruptive to ongoing operations.
-
-Considerations
---------------
-
-Upgrades Are Non-Disruptive
-~~~~~~~~~~~~~~~~~~~~~~~~~~~
-
-MinIO's upgrade-then-restart procedure does *not* require taking downtime or scheduling a maintenance period.
-MinIO restarts are fast, such that restarting all server processes in parallel typically completes in a few seconds.
-MinIO operations are atomic and strictly consistent, such that applications using MinIO or S3 SDKs can rely on the built-in :aws-docs:`transparent retry ` without further client-side logic.
-This ensures upgrades are non-disruptive to ongoing operations.
-
-Check Release Notes
-~~~~~~~~~~~~~~~~~~~
-
-MinIO publishes :minio-git:`Release Notes ` for your reference as part of identifying the changes applied in each release.
-Review the associated release notes between your current MinIO version and the newer release so you have a complete view of any changes.
-
-Pay particular attention to any releases that are *not* backwards compatible.
-You cannot trivially downgrade from any such release.
-
-Procedure
----------
-
-You can run the ``podman container inspect`` or ``docker inspect`` command to inspect the container and validate the current container image:
-
-.. code-block:: shell
- :class: copyable
-
- # For docker, use docker inspect
- podman container inspect --format='{{.Config.Image}}' CONTAINER_NAME
-
-The following output indicates the container was created using the most recent stable image tag:
-
-.. code-block:: shell
-
- quay.io/minio/minio:latest
-
-Use the :ref:`minio-upgrade-latest-tag` steps to upgrade your container.
-
-The following output indicates the container was created using a specific image tag:
-
-.. code-block:: shell
-
- quay.io/minio/minio:RELEASE.2023-07-21T21-12-44Z
-
-Use the :ref:`minio-upgrade-specific-tag` steps to upgrade your container.
-
-.. _minio-upgrade-latest-tag:
-
-Upgrade Containers using Latest Image Tag
-~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
-
-1. Update your image registry
-
- Pull the latest stable MinIO image for the configured image repository:
-
- .. code-block:: shell
- :class: copyable
-
- # For docker, use docker pull
- podman pull quay.io/minio/minio:latest
-
-#. Restart the container
-
- You must restart the container to load the new image binary for use by MinIO:
-
- .. code-block:: shell
- :class: copyable
-
- # For docker, use docker restart
- podman container restart CONTAINER_NAME
-
-#. Validate the Upgrade
-
- Use the :mc:`mc admin info` command to check that the MinIO container is online, operational, and reflects the installed MinIO version.
-
-#. Update MinIO Client
-
- You should upgrade your :mc:`mc` binary to match or closely follow the MinIO server release.
- You can use the :mc:`mc update` command to update the binary to the latest stable release:
-
- .. code-block:: shell
- :class: copyable
-
- mc update
-
-.. _minio-upgrade-specific-tag:
-
-Upgrade Containers using Specific Image Tag
-~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
-
-1. Update your local image registry
-
- Pull the desired image you want to use for updating the container.
- The following example uses the latest stable version of MinIO:
-
- .. code-block:: shell
- :class: copyable
- :substitutions:
-
- # For docker, use docker pull
- podman pull quay.io/minio/minio:|minio-tag|
-
-#. Modify the container start script or configuration
-
- Specify the new MinIO tag to the container start script or configuration.
- For Docker, this might be the Compose file used to start MinIO.
- For Podman, this might be a YAML file used to create the container or pod.
-
- Ensure the ``image: `` matches the newly pulled image tag.
-
-#. Restart or re-create the container
-
- If you started the container using CLI commands, you may need to completely stop, remove, and re-create the container.
- Use a script to perform this procedure to minimize potential downtime.
-
- For Docker, this might require running ``docker compose restart``.
-
-#. Validate the Upgrade
-
- Use the :mc:`mc admin info` command to check that the MinIO container is online, operational, and reflects the installed MinIO version.
-
-#. Update MinIO Client
-
- You should upgrade your :mc:`mc` binary to match or closely follow the MinIO server release.
- You can use the :mc:`mc update` command to update the binary to the latest stable release:
-
- .. code-block:: shell
- :class: copyable
-
- mc update
-
-
-
-
diff --git a/source/includes/eks/deploy-minio-on-elastic-kubernetes-service.rst b/source/includes/eks/deploy-minio-on-elastic-kubernetes-service.rst
deleted file mode 100644
index 0fbefc5d..00000000
--- a/source/includes/eks/deploy-minio-on-elastic-kubernetes-service.rst
+++ /dev/null
@@ -1,58 +0,0 @@
-.. _deploy-operator-eks:
-
-==========================================================
-Deploy MinIO Operator on Amazon Elastic Kubernetes Service
-==========================================================
-
-.. default-domain:: minio
-
-.. contents:: Table of Contents
- :local:
- :depth: 1
-
-Overview
---------
-
-:eks-docs:`Amazon® Elastic Kubernetes Service® ` (EKS) is an enterprise-ready Kubernetes container platform with full-stack automated operations to manage hybrid cloud, multi-cloud, and edge deployments.
-The MinIO Kubernetes Operator supports deploying MinIO Tenants onto EKS infrastructure using the MinIO Operator Console or by using `kustomize `__ for :minio-git:`YAML-defined deployments `.
-
-MinIO supports the following methods for installing the MinIO Operator onto your :abbr:`EKS (Elastic Kubernetes Service)` clusters:
-
-:minio-web:`Through the AWS Marketplace `
- MinIO maintains an `AWS Marketplace listing `__ through which you can register your EKS cluster with |subnet|.
- Any tenant you deploy through Marketplace-connected clusters can take advantage of SUBNET registration, including 24/7 direct access to MinIO engineers.
-
-This page documents deploying the MinIO Operator through the CLI using Kustomize.
-For instructions on deploying the MinIO Operator through the AWS Marketplace, see :minio-web:`Deploy MinIO through EKS `
-
-This documentation assumes familiarity with all referenced Kubernetes and Elastic Kubernetes Service concepts, utilities, and procedures.
-While this documentation *may* provide guidance for configuring or deploying Kubernetes-related or Elastic Kubernetes Service-related resources on a best-effort basis, it is not a replacement for the official :kube-docs:`Kubernetes Documentation <>`.
-
-Prerequisites
--------------
-
-Existing EKS Cluster
-~~~~~~~~~~~~~~~~~~~~
-
-This procedure assumes an existing :abbr:`EKS (Elastic Kubernetes Service)` cluster onto which you can deploy the MinIO Operator.
-
-The Operator by default deploys pods and services with two replicas each and pod anti-affinity.
-The GKE cluster should therefore have at least two nodes available for scheduling Operator pods and services.
-While these nodes *may* be the same nodes intended for use by MinIO Tenants, co-locating Operator and Tenant pods may increase the risk of service interruptions due to the loss of any one node.
-
-``kubectl`` Access to the EKS Cluster
-~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
-
-Ensure your host machine has a ``kubectl`` installation compatible with the target EKS cluster.
-For guidance on connecting ``kubectl`` to EKS, see :aws-docs:`Creating or updating a kubeconfig file for an Amazon EKS cluster `.
-
-Your ``kubectl`` configuration must include authentication as a user with the correct permissions.
-MinIO provides an example IAM policy for Marketplace-based installations in the MinIO Operator :minio-git:`github repository `.
-You can use this policy as a baseline for manual Operator installations.
-
-Procedure
----------
-
-The following steps deploy Operator using Kustomize and a ``kustomization.yaml`` file from the MinIO Operator GitHub repository.
-
-.. include:: /includes/common/common-install-operator-kustomize.rst
diff --git a/source/includes/gke/deploy-minio-on-google-kubernetes-engine.rst b/source/includes/gke/deploy-minio-on-google-kubernetes-engine.rst
deleted file mode 100644
index 2a0ecd2d..00000000
--- a/source/includes/gke/deploy-minio-on-google-kubernetes-engine.rst
+++ /dev/null
@@ -1,56 +0,0 @@
-.. _deploy-operator-gke:
-
-=================================================
-Deploy MinIO Operator on Google Kubernetes Engine
-=================================================
-
-.. default-domain:: minio
-
-.. contents:: Table of Contents
- :local:
- :depth: 1
-
-Overview
---------
-
-`Google Kubernetes Engine `__ (GKE) offers a highly automated secure and fully managed Kubernetes platform.
-The MinIO Kubernetes Operator supports deploying MinIO Tenants onto GKE infrastructure using the MinIO Operator Console or `kustomize `__ for :minio-git:`YAML-defined deployments `.
-
-:minio-web:`Through the GKE Marketplace `
- MinIO maintains an `GKE Marketplace listing `__ through which you can register your GKE cluster with |subnet|.
- Any MinIO tenant you deploy through Marketplace-connected clusters can take advantage of SUBNET registration, including 24/7 direct access to MinIO engineers.
-
-Using the MinIO ``kubectl`` Plugin
- MinIO provides a ``kubectl`` plugin for installing and managing the MinIO Operator and Tenants through a terminal or shell (CLI) environment.
- You can manually register these tenants with |subnet| at any time.
-
-This page documents deploying the MinIO Operator through the CLI using Kustomize.
-For instructions on deploying the MinIO Operator through the GKE Marketplace, see :minio-web:`Deploy MinIO through GKE `
-
-This documentation assumes familiarity with all referenced Kubernetes and Google Kubernetes Engine concepts, utilities, and procedures.
-While this documentation *may* provide guidance for configuring or deploying Kubernetes-related or Google Kubernetes Engine-related resources on a best-effort basis, it is not a replacement for the official :kube-docs:`Kubernetes Documentation <>`.
-
-Prerequisites
--------------
-
-Existing GKE Cluster
-~~~~~~~~~~~~~~~~~~~~
-
-This procedure assumes an existing :abbr:`GKE (Google Kubernetes Engine)` cluster onto which you can deploy the MinIO Operator.
-
-The Operator by default deploys pods and services with two replicas each and pod anti-affinity.
-The GKE cluster should therefore have at least two nodes available for scheduling Operator pods and services.
-While these nodes *may* be the same nodes intended for use by MinIO Tenants, co-locating Operator and Tenant pods may increase the risk of service interruptions due to the loss of any one node.
-
-``kubectl`` Access to the GKE Cluster
-~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
-
-Ensure your host machine has a ``kubectl`` installation compatible with the target GKE cluster.
-For guidance on connecting ``kubectl`` to GKE, see :gke-docs:`Install kubectl and configure cluster access `.
-
-Procedure
----------
-
-The following steps deploy Operator using Kustomize and a ``kustomization.yaml`` file from the MinIO Operator GitHub repository.
-
-.. include:: /includes/common/common-install-operator-kustomize.rst
diff --git a/source/includes/k8s/file-transfer-protocol-k8s.rst b/source/includes/k8s/file-transfer-protocol-k8s.rst
index 6096eebc..f4010cb2 100644
--- a/source/includes/k8s/file-transfer-protocol-k8s.rst
+++ b/source/includes/k8s/file-transfer-protocol-k8s.rst
@@ -1,153 +1,67 @@
-.. versionadded:: Operator v5.0.7
-
-Overview
---------
-
-Starting with Operator 5.0.7 and :minio-release:`MinIO Server RELEASE.2023-04-20T17-56-55Z `, you can use the SSH File Transfer Protocol (SFTP) to interact with the objects on a MinIO Operator Tenant deployment.
-
-SFTP is defined by the Internet Engineering Task Force (IETF) as an extension of SSH 2.0.
-It allows file transfer over SSH for use with :ref:`Transport Layer Security (TLS) ` and virtual private network (VPN) applications.
-
-Enabling SFTP does not affect other MinIO features.
-
-
-Supported Commands
-~~~~~~~~~~~~~~~~~~
-
-When enabled, MinIO supports the following SFTP operations:
-
-- ``get``
-- ``put``
-- ``ls``
-- ``mkdir``
-- ``rmdir``
-- ``delete``
-
-MinIO does not support either ``append`` or ``rename`` operations.
-
-MinIO Operator only supports the SFTP file transfer protocol.
-Other protocols, such as FTP, are not supported for accessing Tenants.
-
-
-Considerations
---------------
-
-
-Versioning
-~~~~~~~~~~
-
-SFTP clients can only operate on the :ref:`latest version ` of an object.
-Specifically:
-
-- For read operations, MinIO only returns the latest version of the requested object(s) to the SFTP client.
-- For write operations, MinIO applies normal versioning behavior and creates a new object version at the specified namespace.
- ``rm`` and ``rmdir`` operations create ``DeleteMarker`` objects.
-
-
-Authentication and Access
-~~~~~~~~~~~~~~~~~~~~~~~~~
-
-SFTP access requires the same authentication as any other S3 client.
-MinIO supports the following authentication providers:
-
-- :ref:`MinIO IDP ` users and their service accounts
-- :ref:`Active Directory/LDAP ` users and their service accounts
-- :ref:`OpenID/OIDC ` service accounts
-- :ref:`Certificate Key File `
-
-:ref:`STS ` credentials **cannot** access buckets or objects over SFTP.
-
-Authenticated users can access buckets and objects based on the :ref:`policies ` assigned to the user or parent user account.
-
-The SFTP protocol does not require any of the ``admin:*`` :ref:`permissions `.
-You may not perform other MinIO admin actions with SFTP.
-
-
-Prerequisites
--------------
-
-- MinIO Operator v5.0.7 or later.
-- Enable an SFTP port (8022) for the server.
-- A port to use for the SFTP commands and a range of ports to allow the SFTP server to request to use for the data transfer.
-
-
-Procedure
----------
-
#. Enable SFTP for the desired Tenant:
- .. tab-set::
+ Use the following Kubectl command to edit the Tenant YAML configuration:
- .. tab-item:: Operator Console
+ .. code-block:: yaml
- - In the Operator Console, click on the Tenant for which to enable SFTP.
- - In the :guilabel:`Configuration` tab, toggle :guilabel:`SFTP` to :guilabel:`Enabled`.
- - Click :guilabel:`Save`.
- - Click :guilabel:`Restart` to restart MinIO and apply your changes.
+ kubectl edit tenants/my-tenant -n my-tenant-ns
- .. tab-item:: Kubectl
+ Replace ``my-tenant`` and ``my-tenant-ns`` with the desired Tenant and namespace.
- Use the following Kubectl command to edit the Tenant YAML configuration:
+ In the ``features:`` section, set the value of ``enableSFTP`` to ``true``:
- .. code-block:: yaml
+ .. code-block:: yaml
- kubectl edit tenants/my-tenant -n my-tenant-ns
+ spec:
+ configuration:
+ name: my-tenant-env-configuration
+ credsSecret:
+ name: my-tenant-secret
+ exposeServices:
+ console: true
+ minio: true
+ features:
+ enableSFTP: true
- Replace ``my-tenant`` and ``my-tenant-ns`` with the desired Tenant and namespace.
+ Kubectl restarts MinIO to apply the change.
- In the ``features:`` section, set the value of ``enableSFTP`` to ``true``:
-
- .. code-block:: yaml
-
- spec:
- configuration:
- name: my-tenant-env-configuration
- exposeServices:
- console: true
- minio: true
- features:
- enableSFTP: true
-
- Kubectl restarts MinIO to apply the change.
-
- You may also set ``enableSFTP`` in your `Helm chart `__ or `Kustomize configuration `__ to enable SFTP for newly created Tenants.
+ You may also set ``enableSFTP`` in your `Helm chart `__ or `Kustomize configuration `__ to enable SFTP for newly created Tenants.
#. If needed, configure ingress for the SFTP port according to your local policies.
+#. Validate the configuration
+
+ The following ``kubectl get`` command uses `yq `__ to display the value of ``enableSFTP``, indicating whether SFTP is enabled:
+
+ .. code-block:: console
+ :class: copyable
+
+ kubectl get tenants/my-tenant -n my-tenant-ns -o yaml | yq '.spec.features'
+
+ Replace ``my-tenant`` and ``my-tenant-ns`` with the desired Tenant and namespace.
+
+ If SFTP is enabled, the output resembles the following:
+
+ .. code-block:: console
+
+ enableSFTP: true
+
#. Use your preferred SFTP client to connect to the MinIO deployment.
You must connect as a user whose :ref:`policies ` allow access to the desired buckets and objects.
The specifics of connecting to the MinIO deployment depend on your SFTP client.
Refer to the documentation for your client.
+ The following example connects to the MinIO Tenant SFTP server forwarded to the local host system, and lists the contents of a bucket named ``runner``.
-Examples
---------
+ .. code-block:: console
-The following examples use the `SFTP CLI client `__ on a Linux system.
-
-Connect to MinIO Using SFTP
-~~~~~~~~~~~~~~~~~~~~~~~~~~~
-
-The following example connects to an SFTP server, lists the contents of a bucket named ``test-bucket``, and downloads an object.
-
-.. code-block:: console
-
- sftp -P 8022 my-access-key@localhost
- my-access-key@localhost's password:
- Connected to localhost.
- sftp> ls
- test-bucket
- sftp> ls test-bucket
- test-bucket/test-file.txt
- sftp> get test-bucket/test-file.txt
- Fetching /test-bucket/test-file.txt to test-file.txt
- test-file.txt 100% 6 1.3KB/s 00:00
-
-
-Check if SFTP is Enabled for a Tenant
-~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+ > sftp -P 8022 minio@localhost
+ minio@localhost's password:
+ Connected to localhost.
+ sftp> ls runner/
+ chunkdocs testdir
The following ``kubectl get`` command uses `yq `__ to display the value of ``enableSFTP``, indicating whether SFTP is enabled:
@@ -164,73 +78,3 @@ If SFTP is enabled, the output resembles the following:
enableSFTP: true
-.. _minio-certificate-key-file-sftp-k8s:
-
-Connect to MinIO Using SFTP with a Certificate Key File
-~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
-
-.. versionadded:: RELEASE.2024-05-07T06-41-25Z
-
-
-MinIO supports mutual TLS (mTLS) certificate-based authentication on SFTP, where both the server and the client verify the authenticity of each other.
-
-This type of authentication requires the following:
-
-1. Public key file for the trusted certificate authority
-2. Public key file for the MinIO Server minted and signed by the trusted certificate authority
-3. Public key file for the user minted and signed by the trusted certificate authority for the client connecting by SFTP and located in the user's ``.ssh`` folder (or equivalent for the operating system)
-
-The keys must include a `principals list `__ of the user(s) that can authenticate with the key:
-
-.. code-block:: console
- :class: copyable
-
- ssh-keygen -s ~/.ssh/ca_user_key -I miniouser -n miniouser -V +1h -z 1 miniouser1.pub
-
-- ``-s`` specifies the path to the certificate authority public key to use for generating this key.
- The specified public key must have a ``principals`` list that includes this user.
-- ``-I`` specifies the key identity for the public key.
-- ``-n`` creates the ``user principals`` list for which this key is valid.
- You must include the user for which this key is valid, and the user must match the username in MinIO.
-- ``-V`` limits the duration for which the generated key is valid.
- In this example, the key is valid for one hour.
- Adjust the duration for your requirements.
-- ``-z`` adds a serial number to the key to distinguish this generated public key from other keys signed by the same certificate authority public key.
-
-MinIO requires specifying the Certificate Authority used to sign the certificates for SFTP access.
-Start or restart the MinIO Server and specify the path to the trusted certificate authority's public key using an ``--sftp="trusted-user-ca-key=PATH"`` flag:
-
- .. code-block:: console
- :class: copyable
-
- minio server {path-to-server} --sftp="trusted-user-ca-key=/path/to/.ssh/ca_user_key.pub" {...other flags}
-
-When connecting to the MinIO Server with SFTP, the client verifies the MinIO Server's certificate.
-The client then passes its own certificate to the MinIO Server.
-The MinIO Server verifies the key created above by comparing its value to the the known public key from the certificate authority provided at server startup.
-
-Once the MinIO Server verifies the client's certificate, the user can connect to the MinIO server over SFTP:
-
-.. code-block:: bash
- :class: copyable:
-
- sftp -P
-
-Require service account or LDAP for authentication
-~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
-
-To force authentication to SFTP using LDAP or service account credentials, append a suffix to the username.
-Valid suffixes are either ``=ldap`` or ``=svc``.
-
-.. code-block:: console
-
- > sftp -P 8022 my-ldap-user=ldap@[minio@localhost]:/bucket
-
-
-.. code-block:: console
-
- > sftp -P 8022 my-ldap-user=svc@[minio@localhost]:/bucket
-
-
-- Replace ``my-ldap-user`` with the username to use.
-- Replace ``[minio@localhost]`` with the address of the MinIO server.
\ No newline at end of file
diff --git a/source/includes/k8s/steps-configure-ad-ldap-external-identity-management.rst b/source/includes/k8s/steps-configure-ad-ldap-external-identity-management.rst
index 7e6ca901..0b1cf7eb 100644
--- a/source/includes/k8s/steps-configure-ad-ldap-external-identity-management.rst
+++ b/source/includes/k8s/steps-configure-ad-ldap-external-identity-management.rst
@@ -1,109 +1,102 @@
-Deploy MinIO Tenant with Active Directory / LDAP Identity Management
---------------------------------------------------------------------
+#. Access the Operator Console
-1) Access the Operator Console
-~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+ Temporarily forward traffic between the local host machine and the MinIO Operator Console and retrieve the JWT token for your Operator deployment.
+ For instructions, see :ref:`Configure access to the Operator Console service `.
-Temporarily forward traffic between the local host machine and the MinIO Operator Console and retrieve the JWT token for your Operator deployment.
-For instructions, see :ref:`Configure access to the Operator Console service `.
+ Open your browser to the temporary URL and enter the JWT Token into the login page.
+ You should see the :guilabel:`Tenants` page:
-Open your browser to the temporary URL and enter the JWT Token into the login page.
-You should see the :guilabel:`Tenants` page:
+ .. image:: /images/k8s/operator-dashboard.png
+ :align: center
+ :width: 70%
+ :class: no-scaled-link
+ :alt: MinIO Operator Console
-.. image:: /images/k8s/operator-dashboard.png
- :align: center
- :width: 70%
- :class: no-scaled-link
- :alt: MinIO Operator Console
+ To deploy a new MinIO Tenant with AD/LDAP external identity management, select the :guilabel:`+ Create Tenant` button.
-Click the :guilabel:`+ Create Tenant` to start creating a MinIO Tenant.
+ To configure an existing MinIO Tenant with AD/LDAP external identity management select that Tenant from the displayed list.
+ The following steps reference the necessary sections and configuration settings for existing Tenants.
-If you are modifying an existing Tenant, select that Tenant from the list.
-The following steps reference the necessary sections and configuration settings for existing Tenants.
+#. Complete the :guilabel:`Identity Provider` Section
-2) Complete the :guilabel:`Identity Provider` Section
-~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+ To enable external identity management with an Active Directory / LDAP provider, select the :guilabel:`Identity Provider` section.
+ You can then change the radio button to :guilabel:`Active Directory` to display the configuration settings.
-To enable external identity management with an Active Directory / LDAP provider, select the :guilabel:`Identity Provider` section.
-You can then change the radio button to :guilabel:`Active Directory` to display the configuration settings.
+ .. image:: /images/k8s/operator-create-tenant-identity-provider-adldap.png
+ :align: center
+ :width: 70%
+ :class: no-scaled-link
+ :alt: MinIO Operator Console - Create a Tenant - External Identity Provider Section - Active Directory / LDAP
-.. image:: /images/k8s/operator-create-tenant-identity-provider-adldap.png
- :align: center
- :width: 70%
- :class: no-scaled-link
- :alt: MinIO Operator Console - Create a Tenant - External Identity Provider Section - Active Directory / LDAP
+ An asterisk ``*`` marks required fields.
+ The following table provides general guidance for those fields:
-An asterisk ``*`` marks required fields.
-The following table provides general guidance for those fields:
+ .. list-table::
+ :header-rows: 1
+ :widths: 40 60
+ :width: 100%
-.. list-table::
- :header-rows: 1
- :widths: 40 60
- :width: 100%
+ * - Field
+ - Description
- * - Field
- - Description
+ * - LDAP Server Address
+ - The hostname of the Active Directory or LDAP server.
- * - LDAP Server Address
- - The hostname of the Active Directory or LDAP server.
+ * - Lookup Bind DN
+ - The Distinguished Name MinIO uses to authenticate and query the AD/LDAP server.
- * - Lookup Bind DN
- - The Distinguished Name MinIO uses to authenticate and query the AD/LDAP server.
+ See :ref:`minio-external-identity-management-ad-ldap-lookup-bind` for more information.
- See :ref:`minio-external-identity-management-ad-ldap-lookup-bind` for more information.
+ * - List of user DNs (Distinguished Names) to be Tenant Administrators
+ - Specify a user :abbr:`DNs (Distinguished Names)` which MinIO assigns a :ref:`policy ` with administrative permissions for the Tenant.
+ You can specify multiple :abbr:`DNs (Distinguished Names)` by selecting the plus :octicon:`plus-circle` icon.
+ You can delete a DN by selecting the trash can :octicon:`trash` icon for that DN.
- * - List of user DNs (Distinguished Names) to be Tenant Administrators
- - Specify a user :abbr:`DNs (Distinguished Names)` which MinIO assigns a :ref:`policy ` with administrative permissions for the Tenant.
- You can specify multiple :abbr:`DNs (Distinguished Names)` by selecting the plus :octicon:`plus-circle` icon.
- You can delete a DN by selecting the trash can :octicon:`trash` icon for that DN.
+ Once you complete the section, you can finish any other required sections of :ref:`Tenant Deployment `.
-Once you complete the section, you can finish any other required sections of :ref:`Tenant Deployment `.
+#. Assign Policies to AD/LDAP Users
-3) Assign Policies to AD/LDAP Users
-~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+ MinIO by default assigns no :ref:`policies ` to AD/LDAP users or groups.
+ You must explicitly assign MinIO policies to a given user or group Distinguished Name (DN) to grant that user or group access to the MinIO deployment.
-MinIO by default assigns no :ref:`policies ` to AD/LDAP users or groups.
-You must explicitly assign MinIO policies to a given user or group Distinguished Name (DN) to grant that user or group access to the MinIO deployment.
+ The following example assumes an existing :ref:`alias ` configured for the MinIO Tenant.
-The following example assumes an existing :ref:`alias ` configured for the MinIO Tenant.
+ Use the :mc:`mc idp ldap policy attach` command to assign a user or group DN to an existing MinIO Policy:
-Use the :mc:`mc idp ldap policy attach` command to assign a user or group DN to an existing MinIO Policy:
+ .. code-block:: shell
+ :class: copyable
-.. code-block:: shell
- :class: copyable
+ mc idp ldap policy attach minio-tenant POLICY --user='uid=primary,cn=applications,dc=domain,dc=com'
+ mc idp ldap policy attach minio-tenant POLICY --group='cn=applications,ou=groups,dc=domain,dc=com'
- mc idp ldap policy attach minio-tenant POLICY --user='uid=primary,cn=applications,dc=domain,dc=com'
- mc idp ldap policy attach minio-tenant POLICY --group='cn=applications,ou=groups,dc=domain,dc=com'
+ Replace ``POLICY`` with the name of the MinIO policy to assign to the user or group DN.
-Replace ``POLICY`` with the name of the MinIO policy to assign to the user or group DN.
+ See :ref:`minio-external-identity-management-ad-ldap-access-control` for more information on access control with AD/LDAP users and groups.
-See :ref:`minio-external-identity-management-ad-ldap-access-control` for more information on access control with AD/LDAP users and groups.
+#. Generate S3-Compatible Temporary Credentials using AD/LDAP Credentials
-4) Generate S3-Compatible Temporary Credentials using AD/LDAP Credentials
-~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+ Applications can use an AD/LDAP user credential to generate temporary S3-compatible credentials as-needed using the :ref:`minio-sts-assumerolewithldapidentity` Security Token Service (STS) API endpoint.
+ MinIO provides an example Go application :minio-git:`ldap.go ` with an example of managing this workflow.
-Applications can use an AD/LDAP user credential to generate temporary S3-compatible credentials as-needed using the :ref:`minio-sts-assumerolewithldapidentity` Security Token Service (STS) API endpoint.
-MinIO provides an example Go application :minio-git:`ldap.go ` with an example of managing this workflow.
+ .. code-block:: shell
-.. code-block:: shell
+ POST https://minio.example.net?Action=AssumeRoleWithLDAPIdentity
+ &LDAPUsername=USERNAME
+ &LDAPPassword=PASSWORD
+ &Version=2011-06-15
+ &Policy={}
- POST https://minio.example.net?Action=AssumeRoleWithLDAPIdentity
- &LDAPUsername=USERNAME
- &LDAPPassword=PASSWORD
- &Version=2011-06-15
- &Policy={}
+ - Replace ``minio.example.net`` with the hostname or URL for the MinIO Tenant service.
-- Replace ``minio.example.net`` with the hostname or URL for the MinIO Tenant service.
+ - Replace the ``LDAPUsername`` with the username of the AD/LDAP user.
-- Replace the ``LDAPUsername`` with the username of the AD/LDAP user.
+ - Replace the ``LDAPPassword`` with the password of the AD/LDAP user.
-- Replace the ``LDAPPassword`` with the password of the AD/LDAP user.
+ - Replace the ``Policy`` with an inline URL-encoded JSON :ref:`policy ` that further restricts the permissions associated to the temporary credentials.
-- Replace the ``Policy`` with an inline URL-encoded JSON :ref:`policy ` that further restricts the permissions associated to the temporary credentials.
+ Omit to use the :ref:`policy whose name matches ` the Distinguished Name (DN) of the AD/LDAP user.
- Omit to use the :ref:`policy whose name matches ` the Distinguished Name (DN) of the AD/LDAP user.
+ The API response consists of an XML document containing the access key, secret key, session token, and expiration date.
+ Applications can use the access key and secret key to access and perform operations on MinIO.
-The API response consists of an XML document containing the access key, secret key, session token, and expiration date.
-Applications can use the access key and secret key to access and perform operations on MinIO.
-
-See the :ref:`minio-sts-assumerolewithldapidentity` for reference documentation.
+ See the :ref:`minio-sts-assumerolewithldapidentity` for reference documentation.
diff --git a/source/includes/k8s/steps-configure-keycloak-identity-management.rst b/source/includes/k8s/steps-configure-keycloak-identity-management.rst
index 94e3f8d9..229c667e 100644
--- a/source/includes/k8s/steps-configure-keycloak-identity-management.rst
+++ b/source/includes/k8s/steps-configure-keycloak-identity-management.rst
@@ -2,38 +2,34 @@
.. |MINIO_S3_URL| replace:: minio.minio-tenant.svc.cluster-domain.example
.. |MINIO_CONSOLE_URL| replace:: minio-console.minio-tenant.svc.cluster-domain.example
-1) Configure or Create a Client for Accessing Keycloak
-~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+#. Configure or Create a Client for Accessing Keycloak
-Authenticate to the Keycloak :guilabel:`Administrative Console` and navigate to :guilabel:`Clients`.
+ Authenticate to the Keycloak :guilabel:`Administrative Console` and navigate to :guilabel:`Clients`.
-.. include:: /includes/common/common-configure-keycloak-identity-management.rst
- :start-after: start-configure-keycloak-client
- :end-before: end-configure-keycloak-client
+ .. include:: /includes/common/common-configure-keycloak-identity-management.rst
+ :start-after: start-configure-keycloak-client
+ :end-before: end-configure-keycloak-client
-2) Create Client Scope for MinIO Client
-~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+#. Create Client Scope for MinIO Client
-Client scopes allow Keycloak to map user attributes as part of the JSON Web Token (JWT) returned in authentication requests.
-This allows MinIO to reference those attributes when assigning policies to the user.
-This step creates the necessary client scope to support MinIO authorization after successful Keycloak authentication.
+ Client scopes allow Keycloak to map user attributes as part of the JSON Web Token (JWT) returned in authentication requests.
+ This allows MinIO to reference those attributes when assigning policies to the user.
+ This step creates the necessary client scope to support MinIO authorization after successful Keycloak authentication.
-.. include:: /includes/common/common-configure-keycloak-identity-management.rst
- :start-after: start-configure-keycloak-client-scope
- :end-before: end-configure-keycloak-client-scope
+ .. include:: /includes/common/common-configure-keycloak-identity-management.rst
+ :start-after: start-configure-keycloak-client-scope
+ :end-before: end-configure-keycloak-client-scope
-3) Apply the Necessary Attribute to Keycloak Users/Groups
-~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+#. Apply the Necessary Attribute to Keycloak Users/Groups
-You must assign an attribute named ``policy`` to the Keycloak Users or Groups.
-Set the value to any :ref:`policy ` on the MinIO deployment.
+ You must assign an attribute named ``policy`` to the Keycloak Users or Groups.
+ Set the value to any :ref:`policy ` on the MinIO deployment.
-.. include:: /includes/common/common-configure-keycloak-identity-management.rst
- :start-after: start-configure-keycloak-user-group-attributes
- :end-before: end-configure-keycloak-user-group-attributes
+ .. include:: /includes/common/common-configure-keycloak-identity-management.rst
+ :start-after: start-configure-keycloak-user-group-attributes
+ :end-before: end-configure-keycloak-user-group-attributes
-4) Configure MinIO for Keycloak Authentication
-~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+#. Configure MinIO for Keycloak Authentication
.. include:: /includes/common/common-configure-keycloak-identity-management.rst
:start-after: start-configure-keycloak-minio-cli
@@ -44,16 +40,14 @@ Restart the MinIO deployment for the changes to apply.
Check the MinIO logs and verify that startup succeeded with no errors related to the OIDC configuration.
-5) Generate Application Credentials using the Security Token Service (STS)
-~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+#. Generate Application Credentials using the Security Token Service (STS)
+ .. include:: /includes/common/common-configure-keycloak-identity-management.rst
+ :start-after: start-configure-keycloak-sts
+ :end-before: end-configure-keycloak-sts
-.. include:: /includes/common/common-configure-keycloak-identity-management.rst
- :start-after: start-configure-keycloak-sts
- :end-before: end-configure-keycloak-sts
+#. Next Steps
-Next Steps
-~~~~~~~~~~
Applications should implement the :ref:`STS AssumeRoleWithWebIdentity ` flow using their :ref:`SDK ` of choice.
When STS credentials expire, applications should have logic in place to regenerate the JWT token, STS token, and MinIO credentials before retrying and continuing operations.
diff --git a/source/includes/k8s/steps-configure-minio-kes-hashicorp.rst b/source/includes/k8s/steps-configure-minio-kes-hashicorp.rst
index e1f94c98..f105fe96 100644
--- a/source/includes/k8s/steps-configure-minio-kes-hashicorp.rst
+++ b/source/includes/k8s/steps-configure-minio-kes-hashicorp.rst
@@ -1,53 +1,41 @@
-Deploy MinIO Tenant with Server-Side Encryption
------------------------------------------------
+#. Review the Tenant CRD
-1) Access the Operator Console
-~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+ Review the :ref:`Tenant CRD ` ``TenantSpec.kes`` object, the ``TenantSpec.configuration`` object, and the :minio-docs:`KES Configuration reference`.
-Temporarily forward traffic between the local host machine and the MinIO Operator Console and retrieve the JWT token for your Operator deployment.
-For instructions, see :ref:`Configure access to the Operator Console service `.
+ You must prepare all necessary configurations associated to your external Key Management Service of choice before proceeding.
-Open your browser to the temporary URL and enter the JWT Token into the login page.
-You should see the :guilabel:`Tenants` page:
+#. Create or Modify your Tenant YAML to set the values of ``KesConfig`` as necessary:
-.. image:: /images/k8s/operator-dashboard.png
- :align: center
- :width: 70%
- :class: no-scaled-link
- :alt: MinIO Operator Console
+ You must modify your Tenant YAML or ``Kustomize`` templates to reflect the necessary KES configuration.
+ The following example is taken from the :minio-git:`MinIO Operator Kustomize examples `
-Click the :guilabel:`+ Create Tenant` to start creating a MinIO Tenant.
+ .. code-block:: yaml
-2) Complete the :guilabel:`Encryption` Section
-~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+ kes:
+ image: "" # minio/kes:2024-06-17T15-47-05Z
+ env: [ ]
+ replicas: 2
+ kesSecret:
+ name: kes-configuration
+ imagePullPolicy: "IfNotPresent"
-Reference the :ref:`Deploy a MinIO Tenant ` procedure for complete documentation of other Tenant settings.
+ The ``kes-configuration`` secret must reference a Kubernetes Opaque Secret which contains a ``stringData`` object with the full KES configuration as ``server-config.yaml``.
+ The ``keystore`` field must contain the full configuration associated with your preferred Key Management System.
-To enable |SSE| with a :kes-docs:`supported KMS target <#supported-kms-targets>` during Tenant deployment, select the :guilabel:`Encryption` section and toggle the switch to :guilabel:`Enabled`.
-You can then select the Radio button for the chosen KMS provider to display configuration settings for that provider.
+ Reference :minio-git:`the Kustomize example ` for additional guidance.
-.. image:: /images/k8s/operator-create-tenant-encryption.png
- :align: center
- :width: 70%
- :class: no-scaled-link
- :alt: MinIO Operator Console - Create a Tenant - Encryption Section
+#. Create or Modify your Tenant YAML to set the values of ``TenantSpec.configuration`` as necessary.
-An asterisk ``*`` marks required fields.
+ TODO
-Refer to the Configuration References section of the tutorial for your chosen :kes-docs:`supported KMS target <#supported-kms-targets>` for more information on the configuration options for your KMS.
+#. Generate a New Encryption Key
-Once you have completed the configuration, you can finish any remaining sections of :ref:`Tenant Deployment `.
+ .. include:: /includes/k8s/common-minio-kes.rst
+ :start-after: start-kes-generate-key-desc
+ :end-before: end-kes-generate-key-desc
-3) Generate a New Encryption Key
-~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+#. Enable SSE-KMS for a Bucket
-.. include:: /includes/k8s/common-minio-kes.rst
- :start-after: start-kes-generate-key-desc
- :end-before: end-kes-generate-key-desc
-
-4) Enable SSE-KMS for a Bucket
-~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
-
-.. include:: /includes/k8s/common-minio-kes.rst
- :start-after: start-kes-enable-sse-kms-desc
- :end-before: end-kes-enable-sse-kms-desc
+ .. include:: /includes/k8s/common-minio-kes.rst
+ :start-after: start-kes-enable-sse-kms-desc
+ :end-before: end-kes-enable-sse-kms-desc
diff --git a/source/includes/k8s/steps-configure-openid-external-identity-management.rst b/source/includes/k8s/steps-configure-openid-external-identity-management.rst
index 6bdfe0ea..bb930ab2 100644
--- a/source/includes/k8s/steps-configure-openid-external-identity-management.rst
+++ b/source/includes/k8s/steps-configure-openid-external-identity-management.rst
@@ -1,131 +1,124 @@
-Deploy MinIO Tenant with OpenID Connect Identity Management
------------------------------------------------------------
+1. Access the Operator Console
-1) Access the Operator Console
-~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+ Temporarily forward traffic between the local host machine and the MinIO Operator Console and retrieve the JWT token for your Operator deployment.
+ For instructions, see :ref:`Configure access to the Operator Console service `.
-Temporarily forward traffic between the local host machine and the MinIO Operator Console and retrieve the JWT token for your Operator deployment.
-For instructions, see :ref:`Configure access to the Operator Console service `.
+ Open your browser to the temporary URL and enter the JWT Token into the login page.
+ You should see the :guilabel:`Tenants` page:
-Open your browser to the temporary URL and enter the JWT Token into the login page.
-You should see the :guilabel:`Tenants` page:
+ .. image:: /images/k8s/operator-dashboard.png
+ :align: center
+ :width: 70%
+ :class: no-scaled-link
+ :alt: MinIO Operator Console
-.. image:: /images/k8s/operator-dashboard.png
- :align: center
- :width: 70%
- :class: no-scaled-link
- :alt: MinIO Operator Console
+ To deploy a new MinIO Tenant with OIDC external identity management, select the :guilabel:`+ Create Tenant` button.
-Click the :guilabel:`+ Create Tenant` to start creating a MinIO Tenant.
+ TO configure an existing MinIO Tenant with OIDC external identity management select that Tenant from the displayed list.
+ The following steps reference the necessary sections and configuration settings for existing Tenants.
-If you are modifying an existing Tenant, select that Tenant from the list.
-The following steps reference the necessary sections and configuration settings for existing Tenants.
+#. Complete the :guilabel:`Identity Provider` Section
-2) Complete the :guilabel:`Identity Provider` Section
-~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+ To enable external identity management with an OIDC select the :guilabel:`Identity Provider` section.
+ You can then change the radio button to :guilabel:`OIDC` to display the configuration settings.
-To enable external identity management with an OIDC select the :guilabel:`Identity Provider` section.
-You can then change the radio button to :guilabel:`OIDC` to display the configuration settings.
+ .. image:: /images/k8s/operator-create-tenant-identity-provider-openid.png
+ :align: center
+ :width: 70%
+ :class: no-scaled-link
+ :alt: MinIO Operator Console - Create a Tenant - External Identity Provider Section - OpenID
-.. image:: /images/k8s/operator-create-tenant-identity-provider-openid.png
- :align: center
- :width: 70%
- :class: no-scaled-link
- :alt: MinIO Operator Console - Create a Tenant - External Identity Provider Section - OpenID
+ An asterisk ``*`` marks required fields.
+ The following table provides general guidance for those fields:
-An asterisk ``*`` marks required fields.
-The following table provides general guidance for those fields:
+ .. list-table::
+ :header-rows: 1
+ :widths: 40 60
+ :width: 100%
-.. list-table::
- :header-rows: 1
- :widths: 40 60
- :width: 100%
+ * - Field
+ - Description
- * - Field
- - Description
+ * - Configuration URL
+ - The hostname of the OpenID ``.well-known/openid-configuration`` file.
- * - Configuration URL
- - The hostname of the OpenID ``.well-known/openid-configuration`` file.
+ * - | Client ID
+ | Secret ID
+ - The Client and Secret ID MinIO uses when authenticating OIDC user credentials against OIDC service.
- * - | Client ID
- | Secret ID
- - The Client and Secret ID MinIO uses when authenticating OIDC user credentials against OIDC service.
+ * - Claim Name
+ - The OIDC Claim MinIO uses for identifying the :ref:`policies ` to attach to the authenticated user.
- * - Claim Name
- - The OIDC Claim MinIO uses for identifying the :ref:`policies ` to attach to the authenticated user.
+ Once you complete the section, you can finish any other required sections of :ref:`Tenant Deployment `.
-Once you complete the section, you can finish any other required sections of :ref:`Tenant Deployment `.
+#. Assign Policies to OIDC Users
-3) Assign Policies to OIDC Users
-~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+ MinIO by default assigns no :ref:`policies ` to OIDC users.
+ MinIO uses the specified user Claim to identify one or more policies to attach to the authenticated user.
+ If the Claim is empty or specifies policies which do not exist on the deployment, the authenticated user has no permissions on the Tenant.
-MinIO by default assigns no :ref:`policies ` to OIDC users.
-MinIO uses the specified user Claim to identify one or more policies to attach to the authenticated user.
-If the Claim is empty or specifies policies which do not exist on the deployment, the authenticated user has no permissions on the Tenant.
+ The following example assumes an existing :ref:`alias ` configured for the MinIO Tenant.
-The following example assumes an existing :ref:`alias ` configured for the MinIO Tenant.
+ Consider the following example policy that grants general S3 API access on only the ``data`` bucket:
-Consider the following example policy that grants general S3 API access on only the ``data`` bucket:
+ .. code-block:: json
+ :class: copyable
-.. code-block:: json
- :class: copyable
+ {
+ "Version": "2012-10-17",
+ "Statement": [
+ {
+ "Effect": "Allow",
+ "Action": [
+ "s3:*"
+ ],
+ "Resource": [
+ "arn:aws:s3:::data",
+ "arn:aws:s3:::data/*"
+ ]
+ }
+ ]
+ }
- {
- "Version": "2012-10-17",
- "Statement": [
- {
- "Effect": "Allow",
- "Action": [
- "s3:*"
- ],
- "Resource": [
- "arn:aws:s3:::data",
- "arn:aws:s3:::data/*"
- ]
- }
- ]
- }
+ Use the :mc:`mc admin policy create` command to create a policy for use by an OIDC user:
-Use the :mc:`mc admin policy create` command to create a policy for use by an OIDC user:
+ .. code-block:: shell
+ :class: copyable
-.. code-block:: shell
- :class: copyable
+ mc admin policy create minio-tenant datareadonly /path/to/datareadonly.json
- mc admin policy create minio-tenant datareadonly /path/to/datareadonly.json
+ MinIO attaches the ``datareadonly`` policy to any authenticated OIDC user with ``datareadonly`` included in the configured claim.
-MinIO attaches the ``datareadonly`` policy to any authenticated OIDC user with ``datareadonly`` included in the configured claim.
+ See :ref:`minio-external-identity-management-openid-access-control` for more information on access control with OIDC users and groups.
-See :ref:`minio-external-identity-management-openid-access-control` for more information on access control with OIDC users and groups.
+#. Generate S3-Compatible Temporary Credentials using OIDC Credentials
-4) Generate S3-Compatible Temporary Credentials using OIDC Credentials
-~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+ Applications can generate temporary access credentials as-needed using the :ref:`minio-sts-assumerolewithwebidentity` Security Token Service (STS) API endpoint and the JSON Web Token (JWT) returned by the :abbr:`OIDC (OpenID Connect)` provider.
-Applications can generate temporary access credentials as-needed using the :ref:`minio-sts-assumerolewithwebidentity` Security Token Service (STS) API endpoint and the JSON Web Token (JWT) returned by the :abbr:`OIDC (OpenID Connect)` provider.
-
-The application must provide a workflow for logging into the :abbr:`OIDC (OpenID Connect)` provider and retrieving the JSON Web Token (JWT) associated to the authentication session.
-Defer to the provider documentation for obtaining and parsing the JWT token after successful authentication.
-MinIO provides an example Go application :minio-git:`web-identity.go ` with an example of managing this workflow.
+ The application must provide a workflow for logging into the :abbr:`OIDC (OpenID Connect)` provider and retrieving the JSON Web Token (JWT) associated to the authentication session.
+ Defer to the provider documentation for obtaining and parsing the JWT token after successful authentication.
+ MinIO provides an example Go application :minio-git:`web-identity.go ` with an example of managing this workflow.
-Once the application retrieves the JWT token, use the ``AssumeRoleWithWebIdentity`` endpoint to generate the temporary credentials:
+ Once the application retrieves the JWT token, use the ``AssumeRoleWithWebIdentity`` endpoint to generate the temporary credentials:
-.. code-block:: shell
- :class: copyable
+ .. code-block:: shell
+ :class: copyable
- POST https://minio.example.net?Action=AssumeRoleWithWebIdentity
- &WebIdentityToken=TOKEN
- &Version=2011-06-15
- &DurationSeconds=86400
- &Policy=Policy
+ POST https://minio.example.net?Action=AssumeRoleWithWebIdentity
+ &WebIdentityToken=TOKEN
+ &Version=2011-06-15
+ &DurationSeconds=86400
+ &Policy=Policy
-- Replace ``minio.example.net`` with the hostname or URL of the MinIO Tenant service.
-- Replace the ``TOKEN`` with the JWT token returned in the previous step.
-- Replace the ``DurationSeconds`` with the duration in seconds until the temporary credentials expire. The example above specifies a period of ``86400`` seconds, or 24 hours.
-- Replace the ``Policy`` with an inline URL-encoded JSON :ref:`policy ` that further restricts the permissions associated to the temporary credentials.
+ - Replace ``minio.example.net`` with the hostname or URL of the MinIO Tenant service.
+ - Replace the ``TOKEN`` with the JWT token returned in the previous step.
+ - Replace the ``DurationSeconds`` with the duration in seconds until the temporary credentials expire. The example above specifies a period of ``86400`` seconds, or 24 hours.
+ - Replace the ``Policy`` with an inline URL-encoded JSON :ref:`policy ` that further restricts the permissions associated to the temporary credentials.
- Omit to use the policy associated to the OpenID user :ref:`policy claim `.
+ Omit to use the policy associated to the OpenID user :ref:`policy claim `.
-The API response consists of an XML document containing the access key, secret key, session token, and expiration date.
-Applications can use the access key and secret key to access and perform operations on MinIO.
+ The API response consists of an XML document containing the access key, secret key, session token, and expiration date.
+ Applications can use the access key and secret key to access and perform operations on MinIO.
-See the :ref:`minio-sts-assumerolewithwebidentity` for reference documentation.
+ See the :ref:`minio-sts-assumerolewithwebidentity` for reference documentation.
diff --git a/source/includes/linux/file-transfer-protocol-not-k8s.rst b/source/includes/linux/file-transfer-protocol-not-k8s.rst
index 7661be1e..ae165aff 100644
--- a/source/includes/linux/file-transfer-protocol-not-k8s.rst
+++ b/source/includes/linux/file-transfer-protocol-not-k8s.rst
@@ -1,123 +1,49 @@
-.. versionadded:: MinIO RELEASE.2023-04-20T17-56-55Z
-
-Overview
---------
-
-Starting with :minio-release:`MinIO Server RELEASE.2023-04-20T17-56-55Z `, you can use the File Transfer Protocol (FTP) or SSH File Transfer Protocol (SFTP) to interact with the objects on a MinIO deployment.
-
-You must specifically enable FTP or SFTP when starting the server.
-Enabling either server type does not affect other MinIO features.
-
-This page uses the abbreviation FTP throughout, but you can use any of the supported FTP protocols described below.
-
-Supported Protocols
-~~~~~~~~~~~~~~~~~~~
-
-When enabled, MinIO supports FTP access over the following protocols:
-
-- SSH File Transfer Protocol (SFTP)
-
- SFTP is defined by the Internet Engineering Task Force (IETF) as an extension of SSH 2.0.
- SFTP allows file transfer over SSH for use with :ref:`Transport Layer Security (TLS) ` and virtual private network (VPN) applications.
-
- Your FTP client must support SFTP.
-
-- File Transfer Protocol over SSL/TLS (FTPS)
-
- FTPS allows for encrypted FTP communication with TLS certificates over the standard FTP communication channel.
- FTPS should not be confused with SFTP, as FTPS does not communicate over a Secure Shell (SSH).
-
- Your FTP client must support FTPS.
-
-- File Transfer Protocol (FTP)
-
- Unencrypted file transfer.
-
- MinIO does **not** recommend using unencrypted FTP for file transfer.
-
-.. admonition:: MinIO Operator Tenants only support SFTP
- :class: note
-
- MinIO Tenants deployed with Operator only support SFTP.
- For details, see `File Transfer Protocol for Tenants `__.
-
-
-Supported Commands
-~~~~~~~~~~~~~~~~~~
-
-When enabled, MinIO supports the following FTP operations:
-
-- ``get``
-- ``put``
-- ``ls``
-- ``mkdir``
-- ``rmdir``
-- ``delete``
-
-MinIO does not support either ``append`` or ``rename`` operations.
-
-Considerations
---------------
-
-Versioning
-~~~~~~~~~~
-
-SFTP clients can only operate on the :ref:`latest version ` of an object.
-Specifically:
-
-- For read operations, MinIO only returns the latest version of the requested object(s) to the FTP client.
-- For write operations, MinIO applies normal versioning behavior and creates a new object version at the specified namespace.
- ``delete`` and ``rmdir`` operations create ``DeleteMarker`` objects.
-
-
-Authentication and Access
-~~~~~~~~~~~~~~~~~~~~~~~~~
-
-FTP access requires the same authentication as any other S3 client.
-MinIO supports the following authentication providers:
-
-- :ref:`MinIO IDP ` users and their service accounts
-- :ref:`Active Directory/LDAP ` users and their service accounts
-- :ref:`OpenID/OIDC ` service accounts
-
-:ref:`STS ` credentials **cannot** access buckets or objects over FTP.
-
-Authenticated users can access buckets and objects based on the :ref:`policies ` assigned to the user or parent user account.
-
-The FTP protocol does not require any of the ``admin:*`` :ref:`permissions `.
-The FTP protocols do not support any of the MinIO admin actions.
-
-Prerequisites
--------------
-
-- MinIO RELEASE.2023-04-20T17-56-55Z or later.
-- Enable an FTP or SFTP port for the server.
-- A port to use for the FTP commands and a range of ports to allow the FTP server to request to use for the data transfer.
-
-Procedure
----------
-
1. Start MinIO with an FTP and/or SFTP port enabled.
- .. code-block:: shell
- :class: copyable
+ .. tab-set::
- minio server http://server{1...4}/disk{1...4} \
- --ftp="address=:8021" \
- --ftp="passive-port-range=30000-40000" \
- --sftp="address=:8022" \
- --sftp="ssh-private-key=/home/miniouser/.ssh/id_rsa" \
- ...
+ .. tab-item:: FTPS
+ :sync: ftps
+
+ The following example starts MinIO with FTPS enabled.
+
+ .. code-block:: shell
+ :class: copyable
+
+ minio server http://server{1...4}/disk{1...4} \
+ --ftp="address=:8021" \
+ --ftp="passive-port-range=30000-40000" \
+ --ftp="tls-private-key=path/to/private.key" \
+ --ftp="tls-public-cert=path/to/public.crt" \
+ ...
+
+ .. note::
+
+ Omit ``tls-private-key`` and ``tls-public-cert`` to use the MinIO default TLS keys for FTPS.
+ For more information, see the :ref:`TLS on MinIO documentation `.
+
+ .. tab-item:: SFTP/FTP
+ :sync: sftp
+
+ .. code-block:: shell
+ :class: copyable
+
+ minio server http://server{1...4}/disk{1...4} \
+ --ftp="address=:8021" \
+ --ftp="passive-port-range=30000-40000" \
+ --sftp="address=:8022" \
+ --sftp="ssh-private-key=/home/miniouser/.ssh/id_rsa" \
+ ...
- See the :mc-cmd:`minio server --ftp` and :mc-cmd:`minio server --sftp` for details on using these flags to start the MinIO service.
- To connect to the an FTP port with TLS (FTPS), pass the ``tls-private-key`` and ``tls-public-cert`` keys and values, as well, unless using the MinIO default TLS keys.
+ See the :mc-cmd:`minio server --ftp` and :mc-cmd:`minio server --sftp` for details on using these flags to start the MinIO service.
+ To connect to the an FTP port with TLS (FTPS), pass the ``tls-private-key`` and ``tls-public-cert`` keys and values, as well, unless using the MinIO default TLS keys.
- The output of the command should return a response that resembles the following:
+ The output of the command should return a response that resembles the following:
- .. code-block:: shell
+ .. code-block:: shell
- MinIO FTP Server listening on :8021
- MinIO SFTP Server listening on :8022
+ MinIO FTP Server listening on :8021
+ MinIO SFTP Server listening on :8022
2. Use your preferred FTP client to connect to the MinIO deployment.
You must connect as a user whose :ref:`policies ` allow access to the desired buckets and objects.
@@ -127,213 +53,97 @@ Procedure
To connect over TLS or through SSH, you must use a client that supports the desired protocol.
-Examples
---------
+3. Connect to MinIO
-The following examples use the `FTP CLI client `__ on a Linux system.
+ .. tab-set::
+
+ .. tab-item:: SFTP/FTP
+ :sync: sftp
-Connect to MinIO Using FTP
-~~~~~~~~~~~~~~~~~~~~~~~~~~
+ The following example connects to an SFTP server, and lists the contents of a bucket named ``runner``.
-The following example connects to a server using ``minio`` credentials to list contents in a bucket named ``runner``
+ .. code-block:: console
-.. code-block:: shell
-
- > ftp localhost -P 8021
- Connected to localhost.
- 220 Welcome to MinIO FTP Server
- Name (localhost:user): minio
- 331 User name ok, password required
- Password:
- 230 Password ok, continue
- Remote system type is UNIX.
- Using binary mode to transfer files.
- ftp> ls runner/
- 229 Entering Extended Passive Mode (|||39155|)
- 150 Opening ASCII mode data connection for file list
- drwxrwxrwx 1 nobody nobody 0 Jan 1 00:00 chunkdocs/
- drwxrwxrwx 1 nobody nobody 0 Jan 1 00:00 testdir/
- ...
-
-Start MinIO with FTP over TLS (FTPS) Enabled
-~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
-
-The following example starts MinIO with FTPS enabled.
-
-.. code-block:: shell
- :class: copyable
-
- minio server http://server{1...4}/disk{1...4} \
- --ftp="address=:8021" \
- --ftp="passive-port-range=30000-40000" \
- --ftp="tls-private-key=path/to/private.key" \
- --ftp="tls-public-cert=path/to/public.crt" \
- ...
-
-.. note::
-
- Omit ``tls-private-key`` and ``tls-public-cert`` to use the MinIO default TLS keys for FTPS.
- For more information, see the :ref:`TLS on MinIO documentation `.
-
-Download an Object over FTP
-~~~~~~~~~~~~~~~~~~~~~~~~~~~
-
-This example lists items in a bucket, then downloads the contents of the bucket.
-
-.. code-block:: console
-
- > ftp localhost -P 8021
- Connected to localhost.
- 220 Welcome to MinIO FTP Server
- Name (localhost:user): minio
- 331 User name ok, password required
- Password:
- 230 Password ok, continue
- Remote system type is UNIX.
- Using binary mode to transfer files.ftp> ls runner/chunkdocs/metadata
- 229 Entering Extended Passive Mode (|||44269|)
- 150 Opening ASCII mode data connection for file list
- -rwxrwxrwx 1 nobody nobody 45 Apr 1 06:13 chunkdocs/metadata
- 226 Closing data connection, sent 75 bytes
- ftp> get
- (remote-file) runner/chunkdocs/metadata
- (local-file) test
- local: test remote: runner/chunkdocs/metadata
- 229 Entering Extended Passive Mode (|||37785|)
- 150 Data transfer starting 45 bytes
- 45 3.58 KiB/s
- 226 Closing data connection, sent 45 bytes
- 45 bytes received in 00:00 (3.55 KiB/s)
- ...
-
-Connect to MinIO Using SFTP
-~~~~~~~~~~~~~~~~~~~~~~~~~~~
-
-The following example connects to an SFTP server, lists the contents of a bucket named ``runner``, and downloads an object.
-
-.. code-block:: console
-
- > sftp -P 8022 minio@localhost
- minio@localhost's password:
- Connected to localhost.
- sftp> ls runner/
- chunkdocs testdir
- sftp> get runner/chunkdocs/metadata metadata
- Fetching /runner/chunkdocs/metadata to metadata
- metadata 100% 226 16.6KB/s 00:00
-
-Connect to MinIO Using SFTP with a Certificate Key File
-~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
-
-.. versionadded:: RELEASE.2024-05-07T06-41-25Z
+ > sftp -P 8022 minio@localhost
+ minio@localhost's password:
+ Connected to localhost.
+ sftp> ls runner/
+ chunkdocs testdir
-MinIO supports mutual TLS (mTLS) certificate-based authentication on SFTP, where both the server and the client verify the authenticity of each other.
+ .. tab-item:: FTPS
+ :sync: ftps
-This type of authentication requires the following:
+ The following uses the Linux uses the `FTP CLI client `__ to connect to the MinIO server using ``minio`` credentials to list contents in a bucket named ``runner``
-1. Public key file for the trusted certificate authority
-2. Public key file for the MinIO Server minted and signed by the trusted certificate authority
-3. Public key file for the user minted and signed by the trusted certificate authority for the client connecting by SFTP and located in the user's ``.ssh`` folder (or equivalent for the operating system)
-
-The keys must include a `principals list `__ of the user(s) that can authenticate with the key:
+ .. code-block:: shell
-.. code-block:: console
- :class: copyable
-
- ssh-keygen -s ~/.ssh/ca_user_key -I miniouser -n miniouser -V +1h -z 1 miniouser1.pub
-
-- ``-s`` specifies the path to the certificate authority public key to use for generating this key.
- The specified public key must have a ``principals`` list that includes this user.
-- ``-I`` specifies the key identity for the public key.
-- ``-n`` creates the ``user principals`` list for which this key is valid.
- You must include the user for which this key is valid, and the user must match the username in MinIO.
-- ``-V`` limits the duration for which the generated key is valid.
- In this example, the key is valid for one hour.
- Adjust the duration for your requirements.
-- ``-z`` adds a serial number to the key to distinguish this generated public key from other keys signed by the same certificate authority public key.
-
-MinIO requires specifying the Certificate Authority used to sign the certificates for SFTP access.
-Start or restart the MinIO Server and specify the path to the trusted certificate authority's public key using an ``--sftp="trusted-user-ca-key=PATH"`` flag:
-
- .. code-block:: console
- :class: copyable
-
- minio server {path-to-server} --sftp="trusted-user-ca-key=/path/to/.ssh/ca_user_key.pub" {...other flags}
-
-When connecting to the MinIO Server with SFTP, the client verifies the MinIO Server's certificate.
-The client then passes its own certificate to the MinIO Server.
-The MinIO Server verifies the key created above by comparing its value to the the known public key from the certificate authority provided at server startup.
-
-Once the MinIO Server verifies the client's certificate, the user can connect to the MinIO server over SFTP:
-
-.. code-block:: bash
- :class: copyable:
-
- sftp -P
+ > ftp localhost -P 8021
+ Connected to localhost.
+ 220 Welcome to MinIO FTP Server
+ Name (localhost:user): minio
+ 331 User name ok, password required
+ Password:
+ 230 Password ok, continue
+ Remote system type is UNIX.
+ Using binary mode to transfer files.
+ ftp> ls runner/
+ 229 Entering Extended Passive Mode (|||39155|)
+ 150 Opening ASCII mode data connection for file list
+ drwxrwxrwx 1 nobody nobody 0 Jan 1 00:00 chunkdocs/
+ drwxrwxrwx 1 nobody nobody 0 Jan 1 00:00 testdir/
+ ...
-Procedure
-+++++++++
+4. Download an Object
-The following procedure generates two key-value pairs, signs one with the other, then uses the resulting signed key to log in to the SFTP server.
+ .. tab-set::
-1. Generate a key-value pair for the MinIO Server
-
- .. code-block:: bash
- :class: copyable
+ .. tab-item:: SFTP/FTP
+ :sync: sftp
- ssh-keygen -f ./ca_user_key
+ This example lists items in a bucket, then downloads the contents of the bucket.
-2. Generate a key-value pair for the user
+ .. code-block:: console
- .. code-block:: bash
- :class: copyable
+ > sftp -P 8022 minio@localhost
+ minio@localhost's password:
+ Connected to localhost.
+ sftp> ls runner/
+ chunkdocs testdir
+ sftp> get runner/chunkdocs/metadata metadata
+ Fetching /runner/chunkdocs/metadata to metadata
+ metadata 100% 226 16.6KB/s 00:00
+ sftp>
- ssh-keygen -f ./minioadmin
+ .. tab-item:: FTPS
+ :sync: ftps
- Replace ``minioadmin`` with the user accessing the MinIO Server by SFTP.
+ This example lists items in a bucket, then downloads the contents of the bucket.
-3. Sign the user key-value pair key with the MinIO Server key-value pair key
+ .. code-block:: console
- .. code-block:: bash
- :class: copyable
-
- ssh-keygen -s ca_user_key -I minioadmin -n minioadmin -V +30d -z 1 minioadmin.pub
-
- Move the ``minioadmin.pub`` key to the same directory as ``minioadmin`` key-value pair, such as ``~/.ssh/meaningful-directory``.
-
-4. Start or restart the MinIO Server passing the generated public keys
-
- .. code-block:: bash
- :class: copyable
-
- minio server --sftp="address=:8022" --sftp="ssh-private-key=/path/to/ca_user_key" --sftp="trusted-user-ca-key=/path/to/ca_user_key.pub"
-
-5. Connect to the MinIO Server by sftp
-
- .. code-block:: bash
- :class: copyable
-
- sftp -i ./minioadmin -oPort=8022 minioadmin@localhost
-
-
-Require service account or LDAP for authentication
-~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
-
-To force authentication to SFTP using LDAP or service account credentials, append a suffix to the username.
-Valid suffixes are either ``=ldap`` or ``=svc``.
-
-.. code-block:: console
-
- > sftp -P 8022 my-ldap-user=ldap@[minio@localhost]:/bucket
-
-
-.. code-block:: console
-
- > sftp -P 8022 my-ldap-user=svc@[minio@localhost]:/bucket
-
-
-- Replace ``my-ldap-user`` with the username to use.
-- Replace ``[minio@localhost]`` with the address of the MinIO server.
+ > ftp localhost -P 8021
+ Connected to localhost.
+ 220 Welcome to MinIO FTP Server
+ Name (localhost:user): minio
+ 331 User name ok, password required
+ Password:
+ 230 Password ok, continue
+ Remote system type is UNIX.
+ Using binary mode to transfer files.ftp> ls runner/chunkdocs/metadata
+ 229 Entering Extended Passive Mode (|||44269|)
+ 150 Opening ASCII mode data connection for file list
+ -rwxrwxrwx 1 nobody nobody 45 Apr 1 06:13 chunkdocs/metadata
+ 226 Closing data connection, sent 75 bytes
+ ftp> get
+ (remote-file) runner/chunkdocs/metadata
+ (local-file) test
+ local: test remote: runner/chunkdocs/metadata
+ 229 Entering Extended Passive Mode (|||37785|)
+ 150 Data transfer starting 45 bytes
+ 45 3.58 KiB/s
+ 226 Closing data connection, sent 45 bytes
+ 45 bytes received in 00:00 (3.55 KiB/s)
+ ...
diff --git a/source/includes/linux/steps-configure-minio-kes-hashicorp.rst b/source/includes/linux/steps-configure-minio-kes-hashicorp.rst
index 32fe355f..3302f1c9 100644
--- a/source/includes/linux/steps-configure-minio-kes-hashicorp.rst
+++ b/source/includes/linux/steps-configure-minio-kes-hashicorp.rst
@@ -1,79 +1,53 @@
-Procedure
----------
+#. Generate a KES API Key for use by MinIO
-This procedure provides instructions for configuring and enabling Server-Side Encryption using your selected `supported KMS solution `__ in production environments.
-Specifically, this procedure assumes the following:
+ Use the :kes-docs:`kes identity new ` command to generate a new API key for use by the MinIO Server:
-- An existing production-grade KMS target
-- One or more KES servers connected to the KMS target
-- One or more hosts for a new or existing MinIO deployment
+ .. code-block:: shell
+ :class: copyable
-Prerequisite
-~~~~~~~~~~~~
+ kes identity new
-Depending on your chosen :kes-docs:`supported KMS target <#supported-kms-targets>` configuration, you may need to pass the ``kes-server.cert`` as a trusted Certificate Authority (CA).
-Defer to the client documentation for instructions on trusting a third-party CA.
+ The output includes both the API Key for use with MinIO and the Identity hash for use with the :kes-docs:`KES Policy configuration `.
-1) Generate a KES API Key for use by MinIO
-~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+#. Configure the MinIO Environment File
-Starting with KES version :minio-git:`2023-02-15T14-54-37Z `, you can generate an API key to use for authenticating to the KES server.
+ Create or modify the MinIO Server environment file for all hosts in the target deployment to include the following environment variables:
-Use the :kes-docs:`kes identity new ` command to generate a new API key for use by the MinIO Server:
+ .. include:: /includes/common/common-minio-kes.rst
+ :start-after: start-kes-configuration-minio-desc
+ :end-before: end-kes-configuration-minio-desc
-.. code-block:: shell
- :class: copyable
+ MinIO defaults to expecting this file at ``/etc/default/minio``.
+ If you modified your deployment to use a different location for the environment file, modify the file at that location.
- kes identity new
+#. Start MinIO
-The output includes both the API Key for use with MinIO and the Identity hash for use with the :kes-docs:`KES Policy configuration `.
+ .. admonition:: KES Operations Requires Unsealed Vault
+ :class: important
-2) Create the MinIO Configurations
-~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+ Depending on your selected KMS solution, you may need to unseal the key instance to allow normal cryptographic operations, including key creation or retrieval.
+ KES requires an unsealed key target to perform its operations.
+
+ Refer to the :kes-docs:`documentation for your chosen KMS solution <#supported-kms-targets>` for information regarding whether sealing and unsealing the instance is required for operations.
-Configure the MinIO Environment File
+ You must start KES *before* starting MinIO.
+ The MinIO deployment requires access to KES as part of its startup.
-Create or modify the MinIO Server environment file for all hosts in the target deployment to include the following environment variables:
+ You can use the :mc:`mc admin service restart` command to restart MinIO:
-.. include:: /includes/common/common-minio-kes.rst
- :start-after: start-kes-configuration-minio-desc
- :end-before: end-kes-configuration-minio-desc
+ .. code-block:: shell
+ :class: copyable
-MinIO defaults to expecting this file at ``/etc/default/minio``.
-If you modified your deployment to use a different location for the environment file, modify the file at that location.
+ mc admin service restart ALIAS
-3) Start MinIO
-~~~~~~~~~~~~~~
+#. Generate a New Encryption Key
-.. admonition:: KES Operations Requires Unsealed Vault
- :class: important
+ .. include:: /includes/common/common-minio-kes.rst
+ :start-after: start-kes-generate-key-desc
+ :end-before: end-kes-generate-key-desc
- Depending on your selected KMS solution, you may need to unseal the key instance to allow normal cryptographic operations, including key creation or retrieval.
- KES requires an unsealed key target to perform its operations.
-
- Refer to the :kes-docs:`documentation for your chosen KMS solution <#supported-kms-targets>` for information regarding whether sealing and unsealing the instance is required for operations.
+#. Enable SSE-KMS for a Bucket
- You must start KES *before* starting MinIO.
- The MinIO deployment requires access to KES as part of its startup.
-
-This step uses ``systemd`` for starting and managing the MinIO server processes:
-
-Start the MinIO Server
-
-.. include:: /includes/linux/common-minio-kes.rst
- :start-after: start-kes-minio-start-service-desc
- :end-before: end-kes-minio-start-service-desc
-
-4) Generate a New Encryption Key
-~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
-
-.. include:: /includes/common/common-minio-kes.rst
- :start-after: start-kes-generate-key-desc
- :end-before: end-kes-generate-key-desc
-
-5) Enable SSE-KMS for a Bucket
-~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
-
-.. include:: /includes/common/common-minio-kes.rst
- :start-after: start-kes-enable-sse-kms-desc
- :end-before: end-kes-enable-sse-kms-desc
+ .. include:: /includes/common/common-minio-kes.rst
+ :start-after: start-kes-enable-sse-kms-desc
+ :end-before: end-kes-enable-sse-kms-desc
diff --git a/source/includes/macos/common-installation.rst b/source/includes/macos/common-installation.rst
deleted file mode 100644
index 33826c5c..00000000
--- a/source/includes/macos/common-installation.rst
+++ /dev/null
@@ -1,77 +0,0 @@
-.. start-install-minio-binary-desc
-
-.. tab-set::
-
- .. tab-item:: Homebrew
-
- Open a Terminal and run the following command to install the latest stable MinIO package using `Homebrew `_.
-
- .. code-block:: shell
- :class: copyable
-
- brew install minio/stable/minio
-
- .. important::
-
- If you previously installed the MinIO server using ``brew install minio``, then we recommend that you reinstall from ``minio/stable/minio`` instead.
-
- .. code-block:: shell
- :class: copyable
-
- brew uninstall minio
- brew install minio/stable/minio
-
- .. tab-item:: Binary - arm64
-
- Open a Terminal, then use the following commands to download the latest stable MinIO binary, set it to executable, and install it to the system ``$PATH``:
-
- .. code-block:: shell
- :class: copyable
-
- curl -O https://dl.min.io/server/minio/release/darwin-arm64/minio
- chmod +x ./minio
- sudo mv ./minio /usr/local/bin/
-
- .. tab-item:: Binary - amd64
-
- Open a Terminal, then use the following commands to download the latest stable MinIO binary, set it to executable, and install it to the system ``$PATH``:
-
- .. code-block:: shell
- :class: copyable
-
- curl -O https://dl.min.io/server/minio/release/darwin-amd64/minio
- chmod +x ./minio
- sudo mv ./minio /usr/local/bin/
-
-.. end-install-minio-binary-desc
-
-.. start-run-minio-binary-desc
-
-From the Terminal, use the :mc:`minio server` to start a local MinIO instance in the ``~/data`` folder.
-If desired, you can replace ``~/data`` with another location to which the user has read, write, and delete access for the MinIO instance.
-
-.. code-block:: shell
- :class: copyable
-
- export MINIO_CONFIG_ENV_FILE=/etc/default/minio
- minio server --console-address :9001
-
-.. code-block:: shell
-
- Status: 1 Online, 0 Offline.
- API: http://192.168.2.100:9000 http://127.0.0.1:9000
- RootUser: myminioadmin
- RootPass: minio-secret-key-change-me
- Console: http://192.168.2.100:9001 http://127.0.0.1:9001
- RootUser: myminioadmin
- RootPass: minio-secret-key-change-me
-
- Command-line: https://min.io/docs/minio/linux/reference/minio-mc.html
- $ mc alias set myminio http://10.0.2.100:9000 myminioadmin minio-secret-key-change-me
-
- Documentation: https://min.io/docs/minio/linux/index.html
-
-The ``API`` block lists the network interfaces and port on which clients can access the MinIO S3 API.
-The ``Console`` block lists the network interfaces and port on which clients can access the MinIO Web Console.
-
-.. end-run-minio-binary-desc
\ No newline at end of file
diff --git a/source/includes/macos/steps-deploy-minio-single-node-multi-drive.rst b/source/includes/macos/steps-deploy-minio-single-node-multi-drive.rst
deleted file mode 100644
index f189a219..00000000
--- a/source/includes/macos/steps-deploy-minio-single-node-multi-drive.rst
+++ /dev/null
@@ -1,34 +0,0 @@
-1) Download the MinIO Server
-~~~~~~~~~~~~~~~~~~~~~~~~~~~~
-
-.. include:: /includes/macos/common-installation.rst
- :start-after: start-install-minio-binary-desc
- :end-before: end-install-minio-binary-desc
-
-2) Create the Environment Variable File
-~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
-
-.. include:: /includes/common/common-deploy.rst
- :start-after: start-common-deploy-create-environment-file-multi-drive
- :end-before: end-common-deploy-create-environment-file-multi-drive
-
-.. include:: /includes/common/common-deploy.rst
- :start-after: start-common-deploy-create-unique-root-credentials
- :end-before: end-common-deploy-create-unique-root-credentials
-
-3) Start the MinIO Deployment
-~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
-
-Issue the following command on the local host to start the MinIO |SNSD| deployment as a foreground process.
-You must keep the shell or terminal session open to keep the process running.
-
-.. include:: /includes/macos/common-installation.rst
- :start-after: start-run-minio-binary-desc
- :end-before: end-run-minio-binary-desc
-
-4) Connect to the MinIO Deployment
-~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
-
-.. include:: /includes/common/common-deploy.rst
- :start-after: start-common-deploy-connect-to-minio-deployment
- :end-before: end-common-deploy-connect-to-minio-deployment
\ No newline at end of file
diff --git a/source/includes/macos/steps-deploy-minio-single-node-single-drive.rst b/source/includes/macos/steps-deploy-minio-single-node-single-drive.rst
deleted file mode 100644
index e1ed2f0b..00000000
--- a/source/includes/macos/steps-deploy-minio-single-node-single-drive.rst
+++ /dev/null
@@ -1,34 +0,0 @@
-1) Download the MinIO Server
-~~~~~~~~~~~~~~~~~~~~~~~~~~~~
-
-.. include:: /includes/macos/common-installation.rst
- :start-after: start-install-minio-binary-desc
- :end-before: end-install-minio-binary-desc
-
-2) Create the Environment Variable File
-~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
-
-.. include:: /includes/common/common-deploy.rst
- :start-after: start-common-deploy-create-environment-file-single-drive
- :end-before: end-common-deploy-create-environment-file-single-drive
-
-.. include:: /includes/common/common-deploy.rst
- :start-after: start-common-deploy-create-unique-root-credentials
- :end-before: end-common-deploy-create-unique-root-credentials
-
-3) Start the MinIO Deployment
-~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
-
-Issue the following command on the local host to start the MinIO |SNSD| deployment as a foreground process.
-You must keep the shell or terminal session open to keep the process running.
-
-.. include:: /includes/macos/common-installation.rst
- :start-after: start-run-minio-binary-desc
- :end-before: end-run-minio-binary-desc
-
-4) Connect to the MinIO Deployment
-~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
-
-.. include:: /includes/common/common-deploy.rst
- :start-after: start-common-deploy-connect-to-minio-deployment
- :end-before: end-common-deploy-connect-to-minio-deployment
diff --git a/source/includes/macos/steps-upgrade-minio-deployment.rst b/source/includes/macos/steps-upgrade-minio-deployment.rst
deleted file mode 100644
index 8da02196..00000000
--- a/source/includes/macos/steps-upgrade-minio-deployment.rst
+++ /dev/null
@@ -1,78 +0,0 @@
-MinIO uses an update-then-restart methodology for upgrading a deployment to a newer release:
-
-1. Update the MinIO binary with the newer release.
-2. Restart the deployment using :mc-cmd:`mc admin service restart`.
-
-This procedure does not require taking downtime and is non-disruptive to ongoing operations.
-
-This page documents methods for upgrading using the update-then-restart method for both ``systemctl`` and user-managed MinIO deployments.
-Deployments using Ansible, Terraform, or other management tools can use the procedures here as guidance for implementation within the existing automation framework.
-
-Considerations
---------------
-
-Upgrades Are Non-Disruptive
-~~~~~~~~~~~~~~~~~~~~~~~~~~~
-
-MinIO's upgrade-then-restart procedure does *not* require taking downtime or scheduling a maintenance period.
-MinIO restarts are fast, such that restarting all server processes in parallel typically completes in a few seconds.
-MinIO operations are atomic and strictly consistent, such that applications using MinIO or S3 SDKs can rely on the built-in :aws-docs:`transparent retry ` without further client-side logic.
-This ensures upgrades are non-disruptive to ongoing operations.
-
-"Rolling" or serial "one-at-a-time" upgrade methods do not provide any advantage over the recommended "parallel" procedure, and can introduce unnecessary complexity to the upgrade procedure.
-For virtualized environments which *require* rolling updates, you should modify the recommended procedure as follows:
-
-1. Update the MinIO Binary in the virtual machine or container one at a time.
-2. Restart the MinIO deployment using :mc-cmd:`mc admin service restart`.
-3. Update the virtual machine/container configuration to use the matching newer MinIO image.
-4. Perform the rolling restart of each machine/container with the updated image.
-
-Check Release Notes
-~~~~~~~~~~~~~~~~~~~
-
-MinIO publishes :minio-git:`Release Notes ` for your reference as part of identifying the changes applied in each release.
-Review the associated release notes between your current MinIO version and the newer release so you have a complete view of any changes.
-
-Pay particular attention to any releases that are *not* backwards compatible.
-You cannot trivially downgrade from any such release.
-
-Update Using Homebrew
----------------------
-
-For Homebrew installations, you can use homebrew to update the cask:
-
-.. code-block:: shell
- :class: copyable
-
- brew upgrade minio/stable/minio
-
-Restart the MinIO process to complete the update.
-
-Update using Binary Replacement
--------------------------------
-
-.. tab-set::
-
- .. tab-item:: Binary - arm64
-
- Open a Terminal, then use the following commands to download the latest stable MinIO binary, set it to executable, and install it to the system ``$PATH``:
-
- .. code-block:: shell
- :class: copyable
-
- curl -O https://dl.min.io/server/minio/release/darwin-arm64/minio
- chmod +x ./minio
- sudo mv ./minio /usr/local/bin/
-
- .. tab-item:: Binary - amd64
-
- Open a Terminal, then use the following commands to download the latest stable MinIO binary, set it to executable, and install it to the system ``$PATH``:
-
- .. code-block:: shell
- :class: copyable
-
- curl -O https://dl.min.io/server/minio/release/darwin-amd64/minio
- chmod +x ./minio
- sudo mv ./minio /usr/local/bin/
-
-Restart the MinIO process to complete the update.
\ No newline at end of file
diff --git a/source/includes/windows/steps-configure-minio-kes-hashicorp.rst b/source/includes/windows/steps-configure-minio-kes-hashicorp.rst
deleted file mode 100644
index 6ac6bbcd..00000000
--- a/source/includes/windows/steps-configure-minio-kes-hashicorp.rst
+++ /dev/null
@@ -1,63 +0,0 @@
-Deploy MinIO and KES with Server-Side Encryption
-------------------------------------------------
-
-Prior to starting these steps, create the following folders:
-
-.. code-block:: powershell
- :class: copyable
- :substitutions:
-
- New-Item -Path "|kescertpath|" -ItemType "directory"
- New-Item -Path "|kesconfigpath|" -ItemType "directory"
- New-Item -Path "|miniodatapath|" -ItemType "directory"
-
-Prerequisite
-~~~~~~~~~~~~
-
-Depending on your chosen :kes-docs:`supported KMS target <#supported-kms-targets>` configuration, you may need to pass the ``kes-server.cert`` as a trusted Certificate Authority (CA).
-Defer to the client documentation for instructions on trusting a third-party CA.
-
-1) Create the MinIO Configurations
-~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
-
-Create the MinIO Environment File
-
-Create the environment file using your preferred text editor.
-The following example uses the Windows Notepad program:
-
-.. code-block:: powershell
- :substitutions:
-
- notepad |minioconfigpath|\minio
-
-.. include:: /includes/windows/common-minio-kes.rst
- :start-after: start-kes-configuration-minio-desc
- :end-before: end-kes-configuration-minio-desc
-
-2) Start the MinIO Server
-~~~~~~~~~~~~~~~~~~~~~~~~~
-
-.. note::
-
- You **must** start KES *before* starting MinIO.
- The MinIO deployment requires access to KES as part of its startup.
-
-Start the MinIO Server
-
-.. include:: /includes/windows/common-minio-kes.rst
- :start-after: start-kes-minio-start-server-desc
- :end-before: end-kes-minio-start-server-desc
-
-3) Generate a New Encryption Key
-~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
-
-.. include:: /includes/windows/common-minio-kes.rst
- :start-after: start-kes-generate-key-desc
- :end-before: end-kes-generate-key-desc
-
-4) Enable SSE-KMS for a Bucket
-~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
-
-.. include:: /includes/common/common-minio-kes.rst
- :start-after: start-kes-enable-sse-kms-desc
- :end-before: end-kes-enable-sse-kms-desc
diff --git a/source/includes/windows/steps-deploy-minio-single-node-single-drive.rst b/source/includes/windows/steps-deploy-minio-single-node-single-drive.rst
deleted file mode 100644
index eced268c..00000000
--- a/source/includes/windows/steps-deploy-minio-single-node-single-drive.rst
+++ /dev/null
@@ -1,53 +0,0 @@
-1) Download the MinIO Server
-~~~~~~~~~~~~~~~~~~~~~~~~~~~~
-
- Download the MinIO executable from the following URL:
-
- .. code-block:: shell
- :class: copyable
-
- https://dl.min.io/server/minio/release/windows-amd64/minio.exe
-
- The next step includes instructions for running the executable.
- You cannot run the executable from the Explorer or by double clicking the file.
- Instead, you call the executable to launch the server.
-
-2) Prepare the Data Path for MinIO
-~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
-
-Ensure the data path is empty and contains no existing files, including any hidden or Windows system files.
-
-If specifying a drive not dedicated for use by MinIO, consider creating a dedicated folder for storing MinIO data such as ``D:/Minio``.
-
-3) Start the MinIO Server
-~~~~~~~~~~~~~~~~~~~~~~~~~~
-
-Open the Command Prompt or PowerShell and issue the following command to start the MinIO |SNSD| deployment in that session:
-
-.. code-block:: shell
- :class: copyable
-
- minio.exe server D:/minio --console-address ":9001"
-
-The output should resemble the following:
-
-.. code-block:: shell
-
- Status: 1 Online, 0 Offline.
- API: http://192.168.2.100:9000 http://127.0.0.1:9000
- Console: http://192.168.2.100:9001 http://127.0.0.1:9001
-
- Command-line: https://min.io/docs/minio/linux/reference/minio-mc.html
- $ mc alias set myminio http://10.0.2.100:9000 minioadmin minioadmin
-
- Documentation: https://min.io/docs/minio/linux/index.html
-
-The ``API`` block lists the network interfaces and port on which clients can access the MinIO S3 API.
-The ``Console`` block lists the network interfaces and port on which clients can access the MinIO Web Console.
-
-4) Connect to the MinIO Server
-~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
-
-.. include:: /includes/common/common-deploy.rst
- :start-after: start-common-deploy-connect-to-minio-deployment
- :end-before: end-common-deploy-connect-to-minio-deployment
diff --git a/source/index.rst b/source/index.rst
index 6fb0bf1a..8079c3d7 100644
--- a/source/index.rst
+++ b/source/index.rst
@@ -1,10 +1,10 @@
-================================================================================
-MinIO Object Storage for |platform|
-================================================================================
+=====================================
+MinIO High Performance Object Storage
+=====================================
.. default-domain:: minio
-.. cond:: container
+.. cond:: mindocs
.. container:: extlinks-video
@@ -14,263 +14,113 @@ MinIO Object Storage for |platform|
- `How to Connect to MinIO with JavaScript `__
-.. cond:: k8s
-
- .. container:: extlinks-video
-
- - `Object Storage Essentials `__
-
- - `How to Connect to MinIO with JavaScript `__
-
-.. cond:: linux
-
- .. container:: extlinks-video
-
- - `Installing and Running MinIO on Linux `__
-
- - `Object Storage Essentials `__
-
- - `How to Connect to MinIO with JavaScript `__
-
-.. cond:: macos
-
- .. container:: extlinks-video
-
- - `Object Storage Essentials `__
-
- - `How to Connect to MinIO with JavaScript `__
-
-.. cond:: windows
-
- .. container:: extlinks-video
-
- - `Object Storage Essentials `__
-
- - `How to Connect to MinIO with JavaScript `__
-
.. contents:: Table of Contents
:local:
:depth: 2
-MinIO is an object storage solution that provides an Amazon Web Services S3-compatible API and supports all core S3 features.
-MinIO is built to deploy anywhere - public or private cloud, baremetal infrastructure, orchestrated environments, and edge infrastructure.
+MinIO is a Kubernetes-native S3-compatible object storage solution designed to deploy wherever your applications are - on premises, in the private cloud, in the public cloud, and edge infrastructure.
+MinIO is designed to support modern application workload patterns where high performance distributed computing meets petabyte-scale storage requirements.
-.. cond:: linux
+This site documents Operations, Administration, and Development of MinIO Community Object Storage deployments on supported platforms.
- This site documents Operations, Administration, and Development of MinIO deployments on Linux platforms for the latest stable version of MinIO: |minio-tag|.
+.. todo: More marketing/SEO below?
-.. cond:: windows
+Quickstart
+----------
- This site documents Operations, Administration, and Development of MinIO deployments on Windows platforms for the latest stable version of MinIO: |minio-tag|.
+.. tab-set::
-.. cond:: macos
+ .. tab-item:: Sandbox
- This site documents Operations, Administration, and Development of MinIO deployments on macOS platforms for the latest stable version of MinIO: |minio-tag|.
+ MinIO maintains a sandbox instance of the community server at https://play.min.io.
+ You can use this instance for experimenting or evaluating the MinIO product on your local system.
-.. cond:: container
+ Follow the :mc:`mc` CLI :ref:`installation guide ` to install the utility on your local host.
- This site documents Operations, Administration, and Development of MinIO deployments on Containers for the latest stable version of MinIO: |minio-tag|.
+ :mc:`mc` includes a pre-configured ``play`` alias for connecting to the sandbox.
+ For example, you can use the following commands to create a bucket and copy objects to ``play``:
-.. cond:: k8s and not (openshift or eks or gke or aks)
+ .. code-block:: shell
+ :class: copyable
- This site documents Operations, Administration, and Development of MinIO deployments on Kubernetes platform for the latest stable version of the MinIO Operator: |operator-version-stable|.
+ mc mb play/mynewbucket
-.. cond:: openshift
+ mc cp /path/to/file play/mynewbucket/prefix/filename.extension
- This site documents Operations, Administration, and Development of MinIO deployments on Red Hat Kubernetes distributions for the latest stable version of the MinIO Operator: |operator-version-stable|.
+ mc stat play/mynewbucket/prefix/filename.extension
- .. important::
+ .. important::
- Support for deploying the MinIO Operator via the RedHat Marketplace or OperatorHub was removed in 2024.
- MinIO AIStor fully supports installation via the Marketplace and OperatorHub onto enterprise RedHat Kubernetes distributions like OpenShift Container Platform (OCP).
- |subnet| customers can open an issue for further clarification and instructions on migrating to `AIStor `__.
+ MinIO's Play sandbox is an ephemeral public-facing deployment with well-known access credentials.
+ Any private, confidential, internal, secured, or other important data uploaded to Play is effectively made public.
+ Exercise caution and discretion in any data you upload to Play.
-.. cond:: eks
+ .. tab-item:: Baremetal
- This site documents Operations, Administration, and Development of MinIO deployments on `Amazon Elastic Kubernetes Service `__ for the latest stable version of the MinIO Operator: |operator-version-stable|.
+ 1. Download the MinIO Server Process for your Operating System
-.. cond:: gke
+ Follow the instructions on the `MinIO Download Page `__ for your operating system to download and install the :mc:`minio server` process.
- This site documents Operations, Administration, and Development of MinIO deployments on `Google Kubernetes Engine `__ for the latest stable version of the MinIO Operator: |operator-version-stable|.
+ 2. Create a folder for use with MinIO
-.. cond:: aks
+ For example, create a folder ``~/minio`` in Linux/MacOS or ``C:\minio`` in Windows.
- This site documents Operations, Administration, and Development of MinIO deployments on `Azure Kubernetes Engine `__ for the latest stable version of the MinIO Operator: |operator-version-stable|.
+ 3. Start the MinIO Server
-.. cond:: not (eks or aks or gke)
+ Run the :mc:`minio server` specifying the path to the directory and the :mc:`~minio server --console-address` parameter to set a static console listen path:
- MinIO is released under dual license `GNU Affero General Public License v3.0 `__ and `MinIO Commercial License `__.
- Deployments registered through |SUBNET| use the commercial license and include access to 24/7 MinIO support.
+ .. code-block:: shell
+ :class: copyable
-.. cond:: eks
+ minio server ~/minio --console-address :9001
+ # For windows, use minio.exe server ~/minio --console-address :9001`
- MinIO is released under dual license `GNU Affero General Public License v3.0 `__ and `MinIO Commercial License `__.
- Deploying MinIO through the :minio-web:`AWS Marketplace ` includes the commercial license and access to 24/7 MinIO support through |SUBNET|.
+ The output includes connection instructions for both :mc:`mc` and connecting to the Console using your browser.
-.. cond:: gke
+ .. tab-item:: Kubernetes
- MinIO is released under dual license `GNU Affero General Public License v3.0 `__ and `MinIO Commercial License `__.
- Deploying MinIO through the :minio-web:`GKE Marketplace ` includes the commercial license and access to 24/7 MinIO support through |SUBNET|.
+ Download `minio-dev.yaml `__ to your host machine:
-.. cond:: aks
+ .. code-block:: shell
+ :class: copyable
- MinIO is released under dual license `GNU Affero General Public License v3.0 `__ and `MinIO Commercial License `__.
- Deploying MinIO through the :minio-web:`AKS Marketplace ` includes the commercial license and access to 24/7 MinIO support through |SUBNET|.
+ curl https://raw.githubusercontent.com/minio/docs/master/source/extra/examples/minio-dev.yaml -O
-You can get started exploring MinIO features using the :ref:`minio-console` and our ``play`` server at https://play.min.io.
-``play`` is a *public* MinIO cluster running the latest stable MinIO server.
-Any file uploaded to ``play`` should be considered public and non-protected.
-For more about connecting to ``play``, see :ref:`MinIO Console play Login `.
+ The file describes two Kubernetes resources:
-.. cond:: linux
+ - A new namespace ``minio-dev``, and
+ - A MinIO pod using a drive or volume on the Worker Node for serving data
- .. include:: /includes/linux/quickstart.rst
-
-.. cond:: macos
-
- .. include:: /includes/macos/quickstart.rst
-
-.. cond:: windows
-
- .. include:: /includes/windows/quickstart.rst
-
-.. cond:: k8s
-
- .. include:: /includes/k8s/quickstart.rst
-
-.. cond:: container
-
- .. include:: /includes/container/quickstart.rst
-
-.. cond:: k8s
-
- .. toctree::
- :titlesonly:
- :hidden:
-
- /operations/installation
- /operations/install-deploy-manage/upgrade-minio-operator
- /operations/deploy-manage-tenants
- /operations/concepts
- /operations/monitoring
- /operations/external-iam
- /operations/server-side-encryption
- /operations/network-encryption
- /operations/cert-manager
- /operations/checklists
- /operations/data-recovery
- /operations/troubleshooting
- /administration/minio-console
- /administration/object-management
- /administration/monitoring
- /administration/identity-access-management
- /administration/server-side-encryption
- /administration/bucket-replication
- /administration/batch-framework
- /administration/concepts
-
-.. cond:: windows
-
- .. toctree::
- :titlesonly:
- :hidden:
-
- /operations/installation
- /operations/concepts
- /operations/monitoring
- /operations/external-iam
- /operations/server-side-encryption
- /operations/network-encryption
- /operations/checklists
- /operations/data-recovery
- /operations/troubleshooting
- /administration/minio-console
- /administration/object-management
- /administration/monitoring
- /administration/identity-access-management
- /administration/server-side-encryption
- /administration/bucket-replication
- /administration/batch-framework
- /administration/concepts
-
-.. cond:: linux or macos or container
-
- .. toctree::
- :titlesonly:
- :hidden:
-
- /operations/installation
- /operations/manage-existing-deployments
- /operations/concepts
- /operations/monitoring
- /operations/external-iam
- /operations/server-side-encryption
- /operations/network-encryption
- /operations/checklists
- /operations/data-recovery
- /operations/troubleshooting
- /administration/minio-console
- /administration/object-management
- /administration/monitoring
- /administration/identity-access-management
- /administration/server-side-encryption
- /administration/bucket-replication
- /administration/batch-framework
- /administration/concepts
-
-.. cond:: not (linux or k8s)
-
- .. toctree::
- :titlesonly:
- :hidden:
-
- Software Development Kits (SDK)
- Security Token Service (STS)
- Object Lambda
- File Transfer Protocol
- MinIO Client
- MinIO Admin Client
- S3 API Compatibility
- Integrations
-
-.. cond:: linux
-
- .. toctree::
- :titlesonly:
- :hidden:
-
- /developers/minio-drivers
- /developers/security-token-service
- /developers/transforms-with-object-lambda
- /developers/file-transfer-protocol
- /reference/minio-mc
- /reference/minio-mc-admin
- /reference/minio-mc-deprecated
- /reference/minio-server/minio-server
- /reference/s3-api-compatibility
- /integrations/integrations
-
-.. cond:: k8s
-
- .. toctree::
- :titlesonly:
- :hidden:
-
- Software Development Kits (SDK)
- /developers/sts-for-operator
- Object Lambda
- /developers/file-transfer-protocol
- MinIO Client
- MinIO Admin Client
- S3 API Compatibility
- Integrations
- /reference/operator-crd
- /reference/operator-chart-values
- /reference/tenant-chart-values
- /reference/operator-environment-variables
+ Use ``kubectl port-forward`` to access the Pod, or create a service for the pod for which you can configure Ingress, Load Balancing, or similar Kubernetes-level networking.
.. toctree::
:titlesonly:
:hidden:
+ /operations/deployments/installation
+ /operations/replication/multi-site-replication
+ /operations/concepts
+ /operations/monitoring
+ /operations/external-iam
+ /operations/server-side-encryption
+ /operations/network-encryption
+ /operations/checklists
+ /operations/data-recovery
+ /operations/troubleshooting
+ /administration/minio-console
+ /administration/object-management
+ /administration/monitoring
+ /administration/identity-access-management
+ /administration/server-side-encryption
+ /administration/bucket-replication
+ /administration/batch-framework
+ /administration/concepts
+ /developers/minio-drivers
+ /developers/security-token-service
+ /developers/transforms-with-object-lambda
+ /developers/file-transfer-protocol
+ /reference/kubernetes
+ /reference/baremetal
+ /reference/s3-api-compatibility
/glossary
+ /integrations/integrations
diff --git a/source/operations/checklists/hardware.rst b/source/operations/checklists/hardware.rst
index 7bedbc8e..3998cb6b 100644
--- a/source/operations/checklists/hardware.rst
+++ b/source/operations/checklists/hardware.rst
@@ -43,17 +43,22 @@ Workloads that benefit from storing aged data on lower-cost hardware should inst
See our `Reference Hardware `__ page for a curated selection of servers and storage components from our hardware partners.
-.. cond:: k8s
+.. tab-set::
+ :class: parent
- .. include:: /includes/common/common-checklist.rst
- :start-after: start-k8s-hardware-checklist
- :end-before: end-k8s-hardware-checklist
+ .. tab-item:: Kubernetes
+ :sync: k8s
-.. cond:: not k8s
+ .. include:: /includes/common/common-checklist.rst
+ :start-after: start-k8s-hardware-checklist
+ :end-before: end-k8s-hardware-checklist
- .. include:: /includes/common/common-checklist.rst
- :start-after: start-linux-hardware-checklist
- :end-before: end-linux-hardware-checklist
+ .. tab-item:: Baremetal
+ :sync: baremetal
+
+ .. include:: /includes/common/common-checklist.rst
+ :start-after: start-linux-hardware-checklist
+ :end-before: end-linux-hardware-checklist
.. important::
@@ -202,142 +207,193 @@ Storage
:start-after: start-exclusive-drive-access
:end-before: end-exclusive-drive-access
-.. cond:: k8s
+Recommended Storage Mediums
++++++++++++++++++++++++++++
- MinIO recommends provisioning a storage class for each MinIO Tenant that meets the performance objectives for that tenant.
-
- Where possible, configure the Storage Class, CSI, or other provisioner underlying the PV to format volumes as XFS to ensure best performance.
-
- Ensure a consistent underlying storage type (NVMe, SSD, HDD) for all PVs provisioned in a Tenant.
+.. tab-set::
- Ensure the same presented capacity of each PV across all nodes in each Tenant :ref:`server pool `.
- MinIO limits the maximum usable size per PV to the smallest PV in the pool.
- For example, if a pool has 15 10TB PVs and 1 1TB PV, MinIO limits the per-PV capacity to 1TB.
-.. cond:: not k8s
+ .. tab-item:: Kubernetes
+ :sync: k8s
- Recommended Storage Mediums
- +++++++++++++++++++++++++++
+ MinIO recommends provisioning a storage class for each MinIO Tenant that meets the performance objectives for that tenant.
- MinIO recommends using flash-based storage (NVMe or SSD) for all workload types and scales.
- Workloads that require high performance should prefer NVMe over SSD.
+ Where possible, configure the Storage Class, CSI, or other provisioner underlying the PV to format volumes as XFS to ensure best performance.
- MinIO deployments using HDD-based storage are best suited as cold-tier targets for :ref:`Object Transition ("Tiering") ` of aged data.
- HDD storage typically does not provide the necessary performance to meet the expectations of modern workloads, and any cost efficiencies at scale are offset by the performance constraints of the medium.
-
- Use Direct-Attached "Local" Storage (DAS)
- +++++++++++++++++++++++++++++++++++++++++
-
- :abbr:`DAS (Direct-Attached Storage)`, such as locally-attached JBOD (Just a Bunch of Disks) arrays, provide significant performance and consistency advantages over networked (NAS, SAN, NFS) storage.
-
- .. dropdown:: Network File System Volumes Break Consistency Guarantees
- :class-title: note
-
- MinIO's strict **read-after-write** and **list-after-write** consistency model requires local drive filesystems.
- MinIO cannot provide consistency guarantees if the underlying storage volumes are NFS or a similar network-attached storage volume.
-
- Use XFS-Formatted Drives with Labels
- ++++++++++++++++++++++++++++++++++++
-
- Format drives as XFS and present them to MinIO as a :abbr:`JBOD (Just a Bunch of Disks)` array with no RAID or other pooling configurations.
- Using any other type of backing storage (SAN/NAS, ext4, RAID, LVM) typically results in a reduction in performance, reliability, predictability, and consistency.
-
- When formatting XFS drives, apply a unique label per drive.
- For example, the following command formats four drives as XFS and applies a corresponding drive label.
-
- .. code-block:: shell
-
- mkfs.xfs /dev/sdb -L MINIODRIVE1
- mkfs.xfs /dev/sdc -L MINIODRIVE2
- mkfs.xfs /dev/sdd -L MINIODRIVE3
- mkfs.xfs /dev/sde -L MINIODRIVE4
-
- Mount Drives using ``/etc/fstab``
- +++++++++++++++++++++++++++++++++
-
- MinIO **requires** that drives maintain their ordering at the mounted position across restarts.
- MinIO **does not** support arbitrary migration of a drive with existing MinIO data to a new mount position, whether intentional or as the result of OS-level behavior.
-
- You **must** use ``/etc/fstab`` or a similar mount control system to mount drives at a consistent path.
- For example:
-
- .. code-block:: shell
- :class: copyable
-
- $ nano /etc/fstab
-
- #
- LABEL=MINIODRIVE1 /mnt/drive-1 xfs defaults,noatime 0 2
- LABEL=MINIODRIVE2 /mnt/drive-2 xfs defaults,noatime 0 2
- LABEL=MINIODRIVE3 /mnt/drive-3 xfs defaults,noatime 0 2
- LABEL=MINIODRIVE4 /mnt/drive-4 xfs defaults,noatime 0 2
-
- You can use ``mount -a`` to mount those drives at those paths during initial setup.
- The Operating System should otherwise mount these drives as part of the node startup process.
-
- MinIO **strongly recommends** using label-based mounting rules over UUID-based rules.
- Label-based rules allow swapping an unhealthy or non-working drive with a replacement that has matching format and label.
- UUID-based rules require editing the ``/etc/fstab`` file to replace mappings with the new drive UUID.
-
- .. note::
-
- Cloud environment instances which depend on mounted external storage may encounter boot failure if one or more of the remote file mounts return errors or failure.
- For example, an AWS ECS instance with mounted persistent EBS volumes may not boot with the standard ``/etc/fstab`` configuration if one or more EBS volumes fail to mount.
-
- You can set the ``nofail`` option to silence error reporting at boot and allow the instance to boot with one or more mount issues.
+ Ensure a consistent underlying storage type (NVMe, SSD, HDD) for all PVs provisioned in a Tenant.
- You should not use this option on systems with locally attached disks, as silencing drive errors prevents both MinIO and the OS from responding to those errors in a normal fashion.
+ Ensure the same presented capacity of each PV across all nodes in each Tenant :ref:`server pool `.
+ MinIO limits the maximum usable size per PV to the smallest PV in the pool.
+ For example, if a pool has 15 10TB PVs and 1 1TB PV, MinIO limits the per-PV capacity to 1TB.
- Disable XFS Retry On Error
- ++++++++++++++++++++++++++
+ .. tab-item:: Baremetal
+ :sync: baremetal
- MinIO **strongly recommends** disabling `retry-on-error `__ behavior using the ``max_retries`` configuration for the following error classes:
+ MinIO recommends using flash-based storage (NVMe or SSD) for all workload types and scales.
+ Workloads that require high performance should prefer NVMe over SSD.
+
+ MinIO does not recommends HDD storage for production environments.
+ HDD storage typically does not provide the necessary performance to meet the expectations of modern workloads, and any cost efficiencies at scale are offset by the performance constraints of the medium.
+
+Prefer Direct-Attached "Local" Storage (DAS)
+++++++++++++++++++++++++++++++++++++++++++++
+
+:abbr:`DAS (Direct-Attached Storage)`, such as locally-attached JBOD (Just a Bunch of Disks) arrays, provide significant performance and consistency advantages over networked (NAS, SAN, NFS) storage.
+
+.. tab-set::
- - ``EIO`` Error when reading or writing
- - ``ENOSPC`` Error no space left on device
- - ``default`` All other errors
- The default ``max_retries`` setting typically directs the filesystem to retry-on-error indefinitely instead of propagating the error.
- MinIO can handle XFS errors appropriately, such that the retry-on-error behavior introduces at most unnecessary latency or performance degradation.
+ .. tab-item:: Kubernetes
+ :sync: k8s
- The following script iterates through all drives at the specified mount path and sets the XFS ``max_retries`` setting to ``0`` or "fail immediately on error" for the recommended error classes.
- The script ignores any drives not mounted, either manually or through ``/etc/fstab``.
- Modify the ``/mnt/drive`` line to match the pattern used for your MinIO drives.
+ While MinIO Tenants can make use of remote Persistent Volume (PV) resources, the cost of performing I/O over the network typically constrains overall performance.
- .. code-block:: bash
- :class: copyable
+ MinIO strongly recommends using CSIs which can provision storage attached to the worker node on which Kubernetes schedules your MinIO pods, such as :minio-docs:`MinIO DirectPV `.
- #!/bin/bash
+ For all other cases, make every effort possible to select a CSI which presents the storage to MinIO as if it were a locally-attached filesystem.
+ CSIs which add layers of software or translations between MinIO and the OS-level storage access APIs necessarily increase the complexity of the syste and can contribute to unexpected or undesired behavior.
- for i in $(df -h | grep /mnt/drive | awk '{ print $1 }'); do
- mountPath="$(df -h | grep $i | awk '{ print $6 }')"
- deviceName="$(basename $i)"
- echo "Modifying xfs max_retries and retry_timeout_seconds for drive $i mounted at $mountPath"
- echo 0 > /sys/fs/xfs/$deviceName/error/metadata/EIO/max_retries
- echo 0 > /sys/fs/xfs/$deviceName/error/metadata/ENOSPC/max_retries
- echo 0 > /sys/fs/xfs/$deviceName/error/metadata/default/max_retries
- done
- exit 0
+ .. tab-item:: Baremetal
+ :sync: baremetal
- You must run this script on all MinIO nodes and configure the script to re-run on reboot, as Linux Operating Systems do not typically persist these changes.
- You can use a ``cron`` job with the ``@reboot`` timing to run the above script whenever the node restarts and ensure all drives have retry-on-error disabled.
- Use ``crontab -e`` to create the following job, modifying the script path to match that on each node:
+ Configure the JBOD arrays without any RAID, pooling, or similar software-level layers, such that the storage is presented directly to MinIO.
- .. code-block:: shell
- :class: copyable
+ For virtual machines or systems that require provising storage as a virtual volume, MinIO recommends using thick LUNs only.
- @reboot /opt/minio/xfs-retry-settings.sh
+.. dropdown:: Network File System Volumes Break Consistency Guarantees
+ :class-title: note
- Use Consistent Drive Type and Capacity
- ++++++++++++++++++++++++++++++++++++++
+ MinIO's strict **read-after-write** and **list-after-write** consistency model requires local drive filesystems.
+ MinIO cannot provide consistency guarantees if the underlying storage volumes are NFS or a similar network-attached storage volume.
- Ensure a consistent drive type (NVMe, SSD, HDD) for the underlying storage in a MinIO deployment.
- MinIO does not distinguish between storage types and does not support configuring "hot" or "warm" drives within a single deployment.
- Mixing drive types typically results in performance degradation, as the slowest drives in the deployment become a bottleneck regardless of the capabilities of the faster drives.
- Use the same capacity and type of drive across all nodes in each MinIO :ref:`server pool `.
- MinIO limits the maximum usable size per drive to the smallest size in the deployment.
- For example, if a deployment has 15 10TB drives and 1 1TB drive, MinIO limits the per-drive capacity to 1TB.
+Use XFS-Formatted Drives with Consistent Mounting
++++++++++++++++++++++++++++++++++++++++++++++++++
+
+.. tab-set::
+
+ .. tab-item:: Kubernetes
+ :sync: k8s
+
+ MinIO recommends formatting the drives underlying MinIO Persistent Volumes as ``xfs``.
+
+ If using a CSI, review the documentation for that CSI and ensure it supports specifying the ``xfs`` filesystem.
+ MinIO strongly recommends avoiding any CSI which formats drives as ``ext4``, ``btrfs`` or other filesystems.
+
+ MinIO expects all provisioned Persistent Volumes (PV) to be intended for its exclusive use, where the underlying storage medium guarantees access to the stored data at the assigned mount path.
+ Modifications to the underlying storage medium, including but not limited to external or third-party applications or the arbitrary re-mounting of locally-attached storage, may result in unexpected behavior or data loss.
+
+ .. tab-item:: Baremetal
+ :sync: baremetal
+
+ Format drives as XFS and present them to MinIO as a :abbr:`JBOD (Just a Bunch of Disks)` array with no RAID or other pooling configurations.
+ Using any other type of backing storage (SAN/NAS, ext4, RAID, LVM) typically results in a reduction in performance, reliability, predictability, and consistency.
+
+ When formatting XFS drives, apply a unique label per drive.
+ For example, the following command formats four drives as XFS and applies a corresponding drive label.
+
+ .. code-block:: shell
+
+ mkfs.xfs /dev/sdb -L MINIODRIVE1
+ mkfs.xfs /dev/sdc -L MINIODRIVE2
+ mkfs.xfs /dev/sdd -L MINIODRIVE3
+ mkfs.xfs /dev/sde -L MINIODRIVE4
+
+ MinIO **requires** that drives maintain their ordering at the mounted position across restarts.
+ MinIO **does not** support arbitrary migration of a drive with existing MinIO data to a new mount position, whether intentional or as the result of OS-level behavior.
+
+ You **must** use ``/etc/fstab`` or a similar mount control system to mount drives at a consistent path.
+ For example:
+
+ .. code-block:: shell
+ :class: copyable
+
+ $ nano /etc/fstab
+
+ #
+ LABEL=MINIODRIVE1 /mnt/drive-1 xfs defaults,noatime 0 2
+ LABEL=MINIODRIVE2 /mnt/drive-2 xfs defaults,noatime 0 2
+ LABEL=MINIODRIVE3 /mnt/drive-3 xfs defaults,noatime 0 2
+ LABEL=MINIODRIVE4 /mnt/drive-4 xfs defaults,noatime 0 2
+
+ You can use ``mount -a`` to mount those drives at those paths during initial setup.
+ The Operating System should otherwise mount these drives as part of the node startup process.
+
+ MinIO **strongly recommends** using label-based mounting rules over UUID-based rules.
+ Label-based rules allow swapping an unhealthy or non-working drive with a replacement that has matching format and label.
+ UUID-based rules require editing the ``/etc/fstab`` file to replace mappings with the new drive UUID.
+
+ .. note::
+
+ Cloud environment instances which depend on mounted external storage may encounter boot failure if one or more of the remote file mounts return errors or failure.
+ For example, an AWS ECS instance with mounted persistent EBS volumes may not boot with the standard ``/etc/fstab`` configuration if one or more EBS volumes fail to mount.
+
+ You can set the ``nofail`` option to silence error reporting at boot and allow the instance to boot with one or more mount issues.
+
+ You should not use this option on systems with locally attached disks, as silencing drive errors prevents both MinIO and the OS from responding to those errors in a normal fashion.
+
+Disable XFS Retry On Error
+++++++++++++++++++++++++++
+
+MinIO **strongly recommends** disabling `retry-on-error `__ behavior using the ``max_retries`` configuration for the following error classes:
+
+- ``EIO`` Error when reading or writing
+- ``ENOSPC`` Error no space left on device
+- ``default`` All other errors
+
+The default ``max_retries`` setting typically directs the filesystem to retry-on-error indefinitely instead of propagating the error.
+MinIO can handle XFS errors appropriately, such that the retry-on-error behavior introduces at most unnecessary latency or performance degradation.
+
+
+.. tab-set::
+
+
+ .. tab-item:: Kubernetes
+ :sync: k8s
+
+ Defer to the documentation for your preferred CSI or StorageClass on options for configuring filesystem-level settings.
+
+ .. tab-item:: Baremetal
+ :sync: baremetal
+
+ The following script iterates through all drives at the specified mount path and sets the XFS ``max_retries`` setting to ``0`` or "fail immediately on error" for the recommended error classes.
+ The script ignores any drives not mounted, either manually or through ``/etc/fstab``.
+ Modify the ``/mnt/drive`` line to match the pattern used for your MinIO drives.
+
+ .. code-block:: bash
+ :class: copyable
+
+ #!/bin/bash
+
+ for i in $(df -h | grep /mnt/drive | awk '{ print $1 }'); do
+ mountPath="$(df -h | grep $i | awk '{ print $6 }')"
+ deviceName="$(basename $i)"
+ echo "Modifying xfs max_retries and retry_timeout_seconds for drive $i mounted at $mountPath"
+ echo 0 > /sys/fs/xfs/$deviceName/error/metadata/EIO/max_retries
+ echo 0 > /sys/fs/xfs/$deviceName/error/metadata/ENOSPC/max_retries
+ echo 0 > /sys/fs/xfs/$deviceName/error/metadata/default/max_retries
+ done
+ exit 0
+
+ You must run this script on all MinIO nodes and configure the script to re-run on reboot, as Linux Operating Systems do not typically persist these changes.
+ You can use a ``cron`` job with the ``@reboot`` timing to run the above script whenever the node restarts and ensure all drives have retry-on-error disabled.
+ Use ``crontab -e`` to create the following job, modifying the script path to match that on each node:
+
+ .. code-block:: shell
+ :class: copyable
+
+ @reboot /opt/minio/xfs-retry-settings.sh
+
+Use Consistent Drive Type and Capacity
+++++++++++++++++++++++++++++++++++++++
+
+Ensure a consistent drive type (NVMe, SSD, HDD) for the underlying storage in a MinIO deployment.
+MinIO does not distinguish between storage types and does not support configuring "hot" or "warm" drives within a single deployment.
+Mixing drive types typically results in performance degradation, as the slowest drives in the deployment become a bottleneck regardless of the capabilities of the faster drives.
+
+Use the same capacity and type of drive across all nodes in each MinIO :ref:`server pool `.
+MinIO limits the maximum usable size per drive to the smallest size in the deployment.
+For example, if a deployment has 15 10TB drives and 1 1TB drive, MinIO limits the per-drive capacity to 1TB.
Recommended Hardware Tests
--------------------------
diff --git a/source/operations/checklists/software.rst b/source/operations/checklists/software.rst
index 6dab174d..b6732c05 100644
--- a/source/operations/checklists/software.rst
+++ b/source/operations/checklists/software.rst
@@ -68,20 +68,7 @@ MinIO Pre-requisites
MinIO Install
-------------
-Install the MinIO server binary across all nodes, ensuring that each node uses the same version of that binary.
-
-.. cond:: linux
-
- See the :ref:`Multi Node Multi Drive deployment guide ` for more information.
-
-.. cond:: container or macos or windows
-
- See the :ref:`Single Node Single Drive deployment guide ` for more information.
-
-.. cond:: k8s
-
- See the :ref:`Deploy MinIO Operator ` and :ref:`Minio Tenant deployment guide ` for more information.
-
+Install a matching version of MinIO across all nodes in the deployment.
Post Install Tasks
------------------
diff --git a/source/operations/concepts.rst b/source/operations/concepts.rst
index 45f0ce7b..6c2f1ba3 100644
--- a/source/operations/concepts.rst
+++ b/source/operations/concepts.rst
@@ -37,13 +37,9 @@ MinIO can deploy to three types of topologies:
#. :ref:`Multi Node Multi Drive `, multiple MinIO servers with multiple mounted drives or volumes for data
- .. cond:: linux
+ For Baremetal infrastructure, you can install and manage distributed MinIO deployments using Ansible, Terraform, or manual processes
- For example, a production deployment using Ansible, Terraform, or manual processes
-
- .. cond:: k8s
-
- For example, a production deployment using Kubernetes to manage and deploy pods and their associated persistent volume claims.
+ For Kubernetes infrastructure, use the MinIO Operator to manage and deploy distributed MinIO Tenants.
How does a distributed MinIO deployment work?
---------------------------------------------
@@ -109,13 +105,7 @@ Expansion consists of adding one or more :ref:`server pools ` for more information
-
-.. cond:: k8s
-
- See :ref:`Expand a MinIO Tenant ` for more information.
+See :ref:`Baremetal: Expand a MinIO deployment ` and :ref:`Kubernetes: Expand a MinIO Tenant ` for more information on expansion in Baremetal and Kubernetes infrastructures respectively.
For deployments which have multiple server pools, you can :ref:`decommission ` the older pools and migrate that data to the newer pools in the deployment.
Once started, decommissioning cannot be stopped.
diff --git a/source/operations/data-recovery/recover-after-drive-failure.rst b/source/operations/data-recovery/recover-after-drive-failure.rst
index 483b041e..6578699c 100644
--- a/source/operations/data-recovery/recover-after-drive-failure.rst
+++ b/source/operations/data-recovery/recover-after-drive-failure.rst
@@ -39,7 +39,7 @@ command unmounts the drive at ``/dev/sdb``:
Remove the failed drive(s) from the node hardware and replace it with known
healthy drive(s). Replacement drives *must* meet the following requirements:
-- :ref:`XFS formatted ` and empty.
+- :ref:`XFS formatted ` and empty.
- Same drive type (e.g. HDD, SSD, NVMe).
- Equal or greater performance.
- Equal or greater capacity.
diff --git a/source/operations/deploy-manage-tenants.rst b/source/operations/deploy-manage-tenants.rst
deleted file mode 100644
index ed8ec7a7..00000000
--- a/source/operations/deploy-manage-tenants.rst
+++ /dev/null
@@ -1,50 +0,0 @@
-.. _minio-installation:
-
-===============================
-Deploy and Manage MinIO Tenants
-===============================
-
-.. default-domain:: minio
-
-.. contents:: Table of Contents
- :local:
- :depth: 1
-
-The MinIO Kubernetes Operator supports deploying and managing MinIO Tenants onto your Kubernetes cluster through the Operator Console web interface.
-
-
-The following tutorials provide steps for tenant management via the Operator Console and Kustomize:
-
-.. list-table::
- :stub-columns: 1
- :widths: 40 60
- :width: 100%
-
- * - :ref:`minio-k8s-deploy-minio-tenant`
- - Deploy a new MinIO Tenant onto the Kubernetes cluster.
-
- * - :ref:`minio-k8s-modify-minio-tenant`
- - Modify the configuration or topology settings of a MinIO Tenant.
-
- * - :ref:`minio-k8s-upgrade-minio-tenant`
- - Upgrade the MinIO Server version used by a MinIO Tenant.
-
- * - :ref:`minio-k8s-expand-minio-tenant`
- - Increase the available storage capacity of an existing MinIO Tenant.
-
- * - :ref:`minio-k8s-delete-minio-tenant`
- - Delete an existing MinIO Tenant.
-
- * - :ref:`minio-site-replication-overview`
- - Configure two or more MinIO Tenants as peers for MinIO Site Replication
-
-.. toctree::
- :titlesonly:
- :hidden:
-
- /operations/install-deploy-manage/deploy-minio-tenant
- /operations/install-deploy-manage/modify-minio-tenant
- /operations/install-deploy-manage/upgrade-minio-tenant
- /operations/install-deploy-manage/expand-minio-tenant
- /operations/install-deploy-manage/delete-minio-tenant
- /operations/install-deploy-manage/multi-site-replication
diff --git a/source/operations/install-deploy-manage/decommission-server-pool.rst b/source/operations/deployments/baremetal-decommission-server-pool.rst
similarity index 100%
rename from source/operations/install-deploy-manage/decommission-server-pool.rst
rename to source/operations/deployments/baremetal-decommission-server-pool.rst
diff --git a/source/operations/deployments/baremetal-deploy-minio-as-a-container.rst b/source/operations/deployments/baremetal-deploy-minio-as-a-container.rst
new file mode 100644
index 00000000..9d4855b8
--- /dev/null
+++ b/source/operations/deployments/baremetal-deploy-minio-as-a-container.rst
@@ -0,0 +1,191 @@
+.. _deploy-minio-container:
+
+===========================
+Deploy MinIO as a Container
+===========================
+
+.. default-domain:: minio
+
+.. contents:: Table of Contents
+ :local:
+ :depth: 1
+
+This page documents deploying MinIO as a Container onto any operating system that supports containerized processes.
+
+This documentation assumes installation of Docker, Podman, or a similar runtime which supports the standard container image format.
+MinIO images use `Red Hat Universal Base Image 9 Micro `__.
+
+Functionality and performance of the MinIO container may be constrained by the base OS.
+
+The procedure includes guidance for deploying Single-Node Multi-Drive (SNMD) and Single-Node Single-Drive (SNSD) topologies in support of early development and evaluation environments.
+
+.. important::
+
+ MinIO officially supports containerized Multi-Node Multi-Drive (MNMD) "Distributed" configurations on Kubernetes infrastructures through the MinIO Kubernetes Operator.
+
+ MinIO does not support nor provide instruction for deploying distributed clusters using Docker Swarm, Docker Compose, or any other orchestrated container environment.
+
+Considerations
+--------------
+
+Review Checklists
+~~~~~~~~~~~~~~~~~
+
+Ensure you have reviewed our published Hardware, Software, and Security checklists before attempting this procedure.
+
+Erasure Coding Parity
+~~~~~~~~~~~~~~~~~~~~~
+
+MinIO automatically determines the default :ref:`erasure coding ` configuration for the cluster based on the total number of nodes and drives in the topology.
+You can configure the per-object :term:`parity` setting when you set up the cluster *or* let MinIO select the default (``EC:4`` for production-grade clusters).
+
+Parity controls the relationship between object availability and storage on disk.
+Use the MinIO `Erasure Code Calculator `__ for guidance in selecting the appropriate erasure code parity level for your cluster.
+
+While you can change erasure parity settings at any time, objects written with a given parity do **not** automatically update to the new parity settings.
+
+Container Storage
+~~~~~~~~~~~~~~~~~
+
+This procedure assumes you mount one or more dedicated storage devices to the container to act as persistent storage for MinIO.
+
+Data stored on ephemeral container paths is lost when the container restarts or is deleted.
+Use any such paths at your own risk.
+
+Procedure
+---------
+
+1. Start the Container
+
+This procedure provides instructions for Podman and Docker in rootfull mode.
+For rootless deployments, defer to documentation by each runtime for configuration and container startup.
+
+For all other container runtimes, follow the documentation for that runtime and specify the equivalent options, parameters, or configurations.
+
+.. tab-set::
+
+ .. tab-item:: Podman
+
+ The following command creates a folder in your home directory, then starts the MinIO container using Podman:
+
+ .. code-block:: shell
+ :class: copyable
+
+ mkdir -p ~/minio/data
+
+ podman run \
+ -p 9000:9000 \
+ -p 9001:9001 \
+ --name minio \
+ -v ~/minio/data:/data \
+ -e "MINIO_ROOT_USER=ROOTNAME" \
+ -e "MINIO_ROOT_PASSWORD=CHANGEME123" \
+ quay.io/minio/minio server /data --console-address ":9001"
+
+ The command binds ports ``9000`` and ``9001`` to the MinIO S3 API and Web Console respectively.
+
+ The local drive ``~/minio/data`` is mounted to the ``/data`` folder on the container.
+ You can modify the :envvar:`MINIO_ROOT_USER` and :envvar:`MINIO_ROOT_PASSWORD` variables to change the root login as needed.
+
+ For multi-drive deployments, bind each local drive or folder it's on sequentially-numbered path on the remote.
+ You can then modify the :mc:`minio server` startup to specify those paths:
+
+ .. code-block:: shell
+ :class: copyable
+
+ mkdir -p ~/minio/data-{1..4}
+
+ podman run \
+ -p 9000:9000 \
+ -p 9001:9001 \
+ --name minio \
+ -v /mnt/drive-1:/mnt/drive-1 \
+ -v /mnt/drive-2:/mnt/drive-2 \
+ -v /mnt/drive-3:/mnt/drive-3 \
+ -v /mnt/drive-4:/mnt/drive-4 \
+ -e "MINIO_ROOT_USER=ROOTNAME" \
+ -e "MINIO_ROOT_PASSWORD=CHANGEME123" \
+ quay.io/minio/minio server http://localhost:9000/mnt/drive-{1...4} --console-address ":9001"
+
+ For Windows hosts, specify the local folder path using Windows filesystem semantics ``C:\minio\:/data``.
+
+ .. tab-item:: Docker
+
+ The following command creates a folder in your home directory, then starts the MinIO container using Docker:
+
+ .. code-block:: shell
+ :class: copyable
+
+ mkdir -p ~/minio/data
+
+ docker run \
+ -p 9000:9000 \
+ -p 9001:9001 \
+ --name minio \
+ -v ~/minio/data:/data \
+ -e "MINIO_ROOT_USER=ROOTNAME" \
+ -e "MINIO_ROOT_PASSWORD=CHANGEME123" \
+ quay.io/minio/minio server /data --console-address ":9001"
+
+ The command binds ports ``9000`` and ``9001`` to the MinIO S3 API and Web Console respectively.
+
+ The local drive ``~/minio/data`` is mounted to the ``/data`` folder on the container.
+ You can modify the :envvar:`MINIO_ROOT_USER` and :envvar:`MINIO_ROOT_PASSWORD` variables to change the root login as needed.
+
+ For multi-drive deployments, bind each local drive or folder it's on sequentially-numbered path on the remote.
+ You can then modify the :mc:`minio server` startup to specify those paths:
+
+ .. code-block:: shell
+ :class: copyable
+
+ mkdir -p ~/minio/data-{1..4}
+
+ docker run \
+ -p 9000:9000 \
+ -p 9001:9001 \
+ --name minio \
+ -v /mnt/drive-1:/mnt/drive-1 \
+ -v /mnt/drive-2:/mnt/drive-2 \
+ -v /mnt/drive-3:/mnt/drive-3 \
+ -v /mnt/drive-4:/mnt/drive-4 \
+ -e "MINIO_ROOT_USER=ROOTNAME" \
+ -e "MINIO_ROOT_PASSWORD=CHANGEME123" \
+ quay.io/minio/minio server http://localhost:9000/mnt/drive-{1...4} --console-address ":9001"
+
+ For Windows hosts, specify the local folder path using Windows filesystem semantics ``C:\minio\:/data``.
+
+2. Connect to the Deployment
+~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+
+.. tab-set::
+
+ .. tab-item:: Console
+
+ Open your browser to http://localhost:9000 to open the :ref:`MinIO Console ` login page.
+
+ Log in with the :guilabel:`MINIO_ROOT_USER` and :guilabel:`MINIO_ROOT_PASSWORD`
+ from the previous step.
+
+ .. image:: /images/minio-console/console-login.png
+ :width: 600px
+ :alt: MinIO Console Login Page
+ :align: center
+
+ You can use the MinIO Console for general administration tasks like Identity and Access Management, Metrics and Log Monitoring, or Server Configuration.
+ Each MinIO server includes its own embedded MinIO Console.
+
+ .. tab-item:: CLI
+
+ Follow the :ref:`installation instructions ` for ``mc`` on your local host.
+ Run ``mc --version`` to verify the installation.
+
+ Once installed, create an alias for the MinIO deployment:
+
+ .. code-block:: shell
+ :class: copyable
+
+ mc alias set myminio http://localhost:9000 USERNAME PASSWORD
+
+ Change the hostname, username, and password to reflect your deployment.
+
+
diff --git a/source/operations/deployments/baremetal-deploy-minio-on-macos.rst b/source/operations/deployments/baremetal-deploy-minio-on-macos.rst
new file mode 100644
index 00000000..41be24e5
--- /dev/null
+++ b/source/operations/deployments/baremetal-deploy-minio-on-macos.rst
@@ -0,0 +1,315 @@
+.. _deploy-minio-macos:
+
+=====================
+Deploy MinIO on MacOS
+=====================
+
+.. default-domain:: minio
+
+.. container:: extlinks-video
+
+ - `Object Storage Essentials `__
+
+ - `How to Connect to MinIO with JavaScript `__
+
+This page documents deploying MinIO onto Apple MacOS hosts.
+
+MinIO officially supports MacOS operating systems in service status, which is typically 3 years from initial release.
+At the time of writing, that includes:
+
+- macOS 14 (Sonoma) (**Recommended**)
+- macOS 13 (Ventura)
+- macOS 12 (Monterey)
+
+MinIO *may* run on older or out-of-support macOS releases, with limited support or troubleshooting from either MinIO or RedHat.
+
+MinIO supports both Intel and ARM-based macOS hardware and provides distinct binaries for each architecture.
+Ensure you download the correct binary as per the documentation for your host system.
+
+The procedure includes guidance for deploying Single-Node Multi-Drive (SNMD) and Single-Node Single-Drive (SNSD) topologies in support of early development and evaluation environments.
+
+MinIO does not officially support Multi-Node Multi-Drive (MNMD) "Distributed" configurations on MacOS hosts.
+
+Considerations
+--------------
+
+Review Checklists
+~~~~~~~~~~~~~~~~~
+
+Ensure you have reviewed our published Hardware, Software, and Security checklists before attempting this procedure.
+
+Erasure Coding Parity
+~~~~~~~~~~~~~~~~~~~~~
+
+MinIO automatically determines the default :ref:`erasure coding ` configuration for the cluster based on the total number of nodes and drives in the topology.
+You can configure the per-object :term:`parity` setting when you set up the cluster *or* let MinIO select the default (``EC:4`` for production-grade clusters).
+
+Parity controls the relationship between object availability and storage on disk.
+Use the MinIO `Erasure Code Calculator `__ for guidance in selecting the appropriate erasure code parity level for your cluster.
+
+While you can change erasure parity settings at any time, objects written with a given parity do **not** automatically update to the new parity settings.
+
+Procedure
+---------
+
+1. Download the MinIO Binary
+~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+
+.. tab-set::
+
+ .. tab-item:: Homebrew
+
+ Open a Terminal and run the following command to install the latest stable MinIO package using `Homebrew `_.
+
+ .. code-block:: shell
+ :class: copyable
+
+ brew install minio/stable/minio
+
+ .. important::
+
+ If you previously installed the MinIO server using ``brew install minio``, then we recommend that you reinstall from ``minio/stable/minio`` instead.
+
+ .. code-block:: shell
+ :class: copyable
+
+ brew uninstall minio
+ brew install minio/stable/minio
+
+ .. tab-item:: Binary - arm64
+
+ Open a Terminal, then use the following commands to download the latest stable MinIO binary, set it to executable, and install it to the system ``$PATH``:
+
+ .. code-block:: shell
+ :class: copyable
+
+ curl -O https://dl.min.io/server/minio/release/darwin-arm64/minio
+ chmod +x ./minio
+ sudo mv ./minio /usr/local/bin/
+
+ .. tab-item:: Binary - amd64
+
+ Open a Terminal, then use the following commands to download the latest stable MinIO binary, set it to executable, and install it to the system ``$PATH``:
+
+ .. code-block:: shell
+ :class: copyable
+
+ curl -O https://dl.min.io/server/minio/release/darwin-amd64/minio
+ chmod +x ./minio
+ sudo mv ./minio /usr/local/bin/
+
+2. Enable TLS Connectivity
+~~~~~~~~~~~~~~~~~~~~~~~~~~
+
+You can skip this step to deploy without TLS enabled.
+MinIO strongly recommends *against* non-TLS deployments outside of early development.
+
+Create or provide :ref:`Transport Layer Security (TLS) ` certificates to MinIO to automatically enable HTTPS-secured connections between the server and clients.
+
+MinIO expects the default certificate names of ``private.key`` and ``public.crt`` for the private and public keys respectively.
+Place the certificates in a dedicated directory:
+
+.. code-block:: shell
+ :class: copyable
+
+ mkdir -P /opt/minio/certs
+
+ cp private.key /opt/minio/certs
+ cp public.crt /opt/minio/certs
+
+
+MinIO verifies client certificates against the OS/System's default list of trusted Certificate Authorities.
+To enable verification of third-party or internally-signed certificates, place the CA file in the ``/opt/minio/certs/CAs`` folder.
+The CA file should include the full chain of trust from leaf to root to ensure successful verification.
+
+For more specific guidance on configuring MinIO for TLS, including multi-domain support via Server Name Indication (SNI), see :ref:`minio-tls`.
+
+.. dropdown:: Certificates for Early Development
+
+ For local testing or development environments, you can use the MinIO :minio-git:`certgen ` to mint self-signed certificates.
+ For example, the following command generates a self-signed certificate with a set of IP and DNS Subject Alternate Names (SANs) associated to the MinIO Server hosts:
+
+ .. code-block:: shell
+
+ certgen -host "localhost,minio-*.example.net"
+
+ Place the generated ``public.crt`` and ``private.key`` into the ``/path/to/certs`` directory to enable TLS for the MinIO deployment.
+ Applications can use the ``public.crt`` as a trusted Certificate Authority to allow connections to the MinIO deployment without disabling certificate validation.
+
+3. Create the MinIO Environment File
+~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+
+Create an environment file at ``/etc/default/minio``.
+The MinIO service uses this file as the source of all :ref:`environment variables ` used by MinIO *and* the ``minio.service`` file.
+
+Modify the example to reflect your deployment topology.
+
+.. tab-set::
+
+ .. tab-item:: Single-Node Multi-Drive
+
+ Use Single-Node Multi-Drive deployments in development and evaluation environments.
+ You can also use them for smaller storage workloads which can tolerate data loss or unavailability due to node downtime.
+
+ .. code-block:: shell
+ :class: copyable
+
+ # Set the volumes MinIO uses at startup
+ # The command uses MinIO expansion notation {x...y} to denote a
+ # sequential series.
+ #
+ # The following specifies a single host with 4 drives at the specified location
+ #
+ # The command includes the port that the MinIO server listens on
+ # (default 9000).
+ # If you run without TLS, change https -> http
+
+ MINIO_VOLUMES="https://minio1.example.net:9000/mnt/drive{1...4}/minio"
+
+ # Set all MinIO server command-line options
+ #
+ # The following explicitly sets the MinIO Console listen address to
+ # port 9001 on all network interfaces.
+ # The default behavior is dynamic port selection.
+
+ MINIO_OPTS="--console-address :9001 --certs-dir /opt/minio/certs"
+
+ # Set the root username.
+ # This user has unrestricted permissions to perform S3 and
+ # administrative API operations on any resource in the deployment.
+ #
+ # Defer to your organizations requirements for superadmin user name.
+
+ MINIO_ROOT_USER=minioadmin
+
+ # Set the root password
+ #
+ # Use a long, random, unique string that meets your organizations
+ # requirements for passwords.
+
+ MINIO_ROOT_PASSWORD=minio-secret-key-CHANGE-ME
+
+ .. tab-item:: Single-Node Single-Drive
+
+ Use Single-Node Single-Drive ("Standalone") deployments in early development and evaluation environments.
+ MinIO does not recommend Standalone deployments in production, as the loss of the node or its storage medium results in data loss.
+
+ .. code-block:: shell
+ :class: copyable
+
+ # Set the volume MinIO uses at startup
+ #
+ # The following specifies the drive or folder path
+
+ MINIO_VOLUMES="/mnt/drive1/minio"
+
+ # Set all MinIO server command-line options
+ #
+ # The following explicitly sets the MinIO Console listen address to
+ # port 9001 on all network interfaces.
+ # The default behavior is dynamic port selection.
+
+ MINIO_OPTS="--console-address :9001 --certs-dir /opt/minio/certs"
+
+ # Set the root username.
+ # This user has unrestricted permissions to perform S3 and
+ # administrative API operations on any resource in the deployment.
+ #
+ # Defer to your organizations requirements for superadmin user name.
+
+ MINIO_ROOT_USER=minioadmin
+
+ # Set the root password
+ #
+ # Use a long, random, unique string that meets your organizations
+ # requirements for passwords.
+
+ MINIO_ROOT_PASSWORD=minio-secret-key-CHANGE-ME
+
+Specify any other :ref:`environment variables ` or server command-line options as required by your deployment.
+
+4. Start the MinIO Server
+~~~~~~~~~~~~~~~~~~~~~~~~~
+
+The following command starts the MinIO Server attached to the current terminal/shell window:
+
+.. code-block:: shell
+ :class: copyable
+
+ export MINIO_CONFIG_ENV_FILE=/etc/default/minio
+ minio server --console-address :9001
+
+The command output resembles the following:
+
+.. code-block:: shell
+
+.. code-block:: shell
+
+ MinIO Object Storage Server
+ Copyright: 2015-2024 MinIO, Inc.
+ License: GNU AGPLv3 - https://www.gnu.org/licenses/agpl-3.0.html
+ Version: RELEASE.2024-06-07T16-42-07Z (go1.22.4 linux/amd64)
+
+ API: https://minio-1.example.net:9000 https://203.0.113.10:9000 https://127.0.0.1:9000
+ RootUser: minioadmin
+ RootPass: minioadmin
+
+ WebUI: https://minio-1.example.net:9001 https://203.0.113.10:9001 https://127.0.0.1:9001
+ RootUser: minioadmin
+ RootPass: minioadmin
+
+ CLI: https://min.io/docs/minio/linux/reference/minio-mc.html#quickstart
+ $ mc alias set 'myminio' 'https://minio-1.example.net:9000' 'minioadmin' 'minioadmin'
+
+ Docs: https://min.io/docs/minio/linux/index.html
+ Status: 1 Online, 0 Offline.
+
+The ``API`` block lists the network interfaces and port on which clients can access the MinIO S3 API.
+The ``Console`` block lists the network interfaces and port on which clients can access the MinIO Web Console.
+
+To run the MinIO server process in the background or as a daemon, defer to your MacOS OS documentation for best practices and procedures.
+
+5. Connect to the Deployment
+~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+
+.. tab-set::
+
+ .. tab-item:: Console
+
+ Open your browser and access any of the MinIO hostnames at port ``:9001`` to open the :ref:`MinIO Console ` login page.
+ For example, ``https://minio1.example.com:9001``.
+
+ Log in with the :guilabel:`MINIO_ROOT_USER` and :guilabel:`MINIO_ROOT_PASSWORD`
+ from the previous step.
+
+ .. image:: /images/minio-console/console-login.png
+ :width: 600px
+ :alt: MinIO Console Login Page
+ :align: center
+
+ You can use the MinIO Console for general administration tasks like Identity and Access Management, Metrics and Log Monitoring, or Server Configuration.
+ Each MinIO server includes its own embedded MinIO Console.
+
+ .. tab-item:: CLI
+
+ Follow the :ref:`installation instructions ` for ``mc`` on your local host.
+ Run ``mc --version`` to verify the installation.
+
+ If your MinIO deployment uses third-party or self-signed TLS certificates, copy the :abbr:`CA (Certificate Authority)` files to ``~/.mc/certs/CAs`` to allow ``mc``
+
+
+ Once installed, create an alias for the MinIO deployment:
+
+ .. code-block:: shell
+ :class: copyable
+
+ mc alias set myminio https://minio-1.example.net:9000 USERNAME PASSWORD
+
+ Change the hostname, username, and password to reflect your deployment.
+ The hostname can be any MinIO node in the deployment.
+ You can also specify the hostname load balancer, reverse proxy, or similar network control plane that handles connections to the deployment.
+
+6. Next Steps
+~~~~~~~~~~~~~
+
+TODO
\ No newline at end of file
diff --git a/source/operations/deployments/baremetal-deploy-minio-on-redhat-linux.rst b/source/operations/deployments/baremetal-deploy-minio-on-redhat-linux.rst
new file mode 100644
index 00000000..1c00780b
--- /dev/null
+++ b/source/operations/deployments/baremetal-deploy-minio-on-redhat-linux.rst
@@ -0,0 +1,442 @@
+.. _deploy-minio-rhel:
+
+============================
+Deploy MinIO on RedHat Linux
+============================
+
+.. default-domain:: minio
+
+.. contents:: Table of Contents
+ :local:
+ :depth: 1
+
+This page documents deploying MinIO on RedHat Linux operating systems, including distributions that are binary-compatible with RHEL.
+This page makes no distinction or special remarks between RHEL and those distributions, and guidance given for RHEL can typically be applied to those distributions.
+
+MinIO strongly recommends that production deployments use RHEL versions in the **Full Support** or **Maintenance Support** phases of the Red Hat life cycle.
+At the time of writing, that includes:
+
+- RHEL 9.5+ (**Recommended**)
+- RHEL 8.10+
+
+Your organization should have the necessary service contracts with Red Hat to ensure end-to-end supportability of your deployments.
+
+MinIO *may* run on versions of RHEL no longer supported by Red Hat Linux, with limited support or troubleshooting from either MinIO or RedHat.
+
+The procedure focuses on production-grade Multi-Node Multi-Drive (MNMD) "Distributed" configurations.
+|MNMD| deployments provide enterprise-grade performance, availability, and scalability and are the recommended topology for all production workloads.
+
+The procedure includes guidance for deploying Single-Node Multi-Drive (SNMD) and Single-Node Single-Drive (SNSD) topologies in support of early development and evaluation environments.
+
+Considerations
+--------------
+
+Review Checklists
+~~~~~~~~~~~~~~~~~
+
+Ensure you have reviewed our published Hardware, Software, and Security checklists before attempting this procedure.
+
+
+Erasure Coding Parity
+~~~~~~~~~~~~~~~~~~~~~
+
+MinIO automatically determines the default :ref:`erasure coding ` configuration for the cluster based on the total number of nodes and drives in the topology.
+You can configure the per-object :term:`parity` setting when you set up the cluster *or* let MinIO select the default (``EC:4`` for production-grade clusters).
+
+Parity controls the relationship between object availability and storage on disk.
+Use the MinIO `Erasure Code Calculator `__ for guidance in selecting the appropriate erasure code parity level for your cluster.
+
+While you can change erasure parity settings at any time, objects written with a given parity do **not** automatically update to the new parity settings.
+
+Capacity-Based Planning
+~~~~~~~~~~~~~~~~~~~~~~~
+
+MinIO recommends planning storage capacity sufficient to store **at least** 2 years of data before reaching 70% usage.
+Performing :ref:`server pool expansion ` more frequently or on a "just-in-time" basis generally indicates an architecture or planning issue.
+
+For example, consider an application suite expected to produce at least 100 TiB of data per year and a 3 year target before expansion.
+By ensuring the deployment has ~500TiB of usable storage up front, the cluster can safely meet the 70% threshold with additional buffer for growth in data storage output per year.
+
+Consider using the MinIO `Erasure Code Calculator `__ for guidance in planning capacity around specific erasure code settings.
+
+Procedure
+---------
+
+1. Download the MinIO RPM
+~~~~~~~~~~~~~~~~~~~~~~~~~
+
+MinIO provides builds for the following architectures:
+
+- AMD64
+- ARM64
+- PowerPC 64 LE
+- S390X
+
+Use the following commands to download the latest stable MinIO RPM for your host architecture and install it.
+
+.. tab-set::
+
+ .. tab-item:: AMD64
+
+ .. code-block:: shell
+ :class: copyable
+ :substitutions:
+
+ wget |minio-rpm| -O minio.rpm
+ sudo dnf install minio.rpm
+
+ .. tab-item:: ARM64
+
+ .. code-block:: shell
+ :class: copyable
+ :substitutions:
+
+ wget |minio-rpm-arm64| -O minio.rpm
+ sudo dnf install minio.rpm
+
+ .. tab-item:: PPC64LE
+
+ .. code-block:: shell
+ :class: copyable
+ :substitutions:
+
+ wget |minio-rpm-ppc64le| -O minio.rpm
+ sudo dnf install minio.rpm
+
+
+
+2. Review the ``systemd`` Service File
+~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+
+The ``.rpm`` package install the following `systemd `__ service file to ``/usr/lib/systemd/system/minio.service``:
+
+.. code-block:: shell
+ :class: copyable
+
+ [Unit]
+ Description=MinIO
+ Documentation=https://min.io/docs/minio/linux/index.html
+ Wants=network-online.target
+ After=network-online.target
+ AssertFileIsExecutable=/usr/local/bin/minio
+
+ [Service]
+ WorkingDirectory=/usr/local
+
+ User=minio-user
+ Group=minio-user
+ ProtectProc=invisible
+
+ EnvironmentFile=-/etc/default/minio
+ ExecStartPre=/bin/bash -c "if [ -z \"${MINIO_VOLUMES}\" ]; then echo \"Variable MINIO_VOLUMES not set in /etc/default/minio\"; exit 1; fi"
+ ExecStart=/usr/local/bin/minio server $MINIO_OPTS $MINIO_VOLUMES
+
+ # MinIO RELEASE.2023-05-04T21-44-30Z adds support for Type=notify (https://www.freedesktop.org/software/systemd/man/systemd.service.html#Type=)
+ # This may improve systemctl setups where other services use `After=minio.server`
+ # Uncomment the line to enable the functionality
+ # Type=notify
+
+ # Let systemd restart this service always
+ Restart=always
+
+ # Specifies the maximum file descriptor number that can be opened by this process
+ LimitNOFILE=65536
+
+ # Specifies the maximum number of threads this process can create
+ TasksMax=infinity
+
+ # Disable timeout logic and wait until process is stopped
+ TimeoutStopSec=infinity
+ SendSIGKILL=no
+
+ [Install]
+ WantedBy=multi-user.target
+
+ # Built for ${project.name}-${project.version} (${project.name})
+
+3. Create a User and Group for MinIO
+~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+
+The ``minio.service`` file runs as the ``minio-user`` User and Group by default.
+You can create the user and group using the ``groupadd`` and ``useradd`` commands.
+The following example creates the user, group, and sets permissions to access the folder paths intended for use by MinIO.
+These commands typically require root (``sudo``) permissions.
+
+.. code-block:: shell
+ :class: copyable
+
+ groupadd -r minio-user
+ useradd -M -r -g minio-user minio-user
+
+The command above creates the user **without** a home directory, as is typical for system service accounts.
+
+You **must** ``chown`` the drive paths you intend to use with MinIO.
+If the ``minio-user`` user or group cannot read, write, or list contents of any drive, the MinIO process returns errors on startup.
+
+For example, the following command sets ``minio-user:minio-user`` as the user-group owner of all drives at ``/mnt/drives-n`` where ``n`` is between 1 and 16 inclusive:
+
+.. code-block:: shell
+ :class: copyable
+
+ chown -R minio-user:minio-user /mnt/drives-{1...16}
+
+4. Enable TLS Connectivity
+~~~~~~~~~~~~~~~~~~~~~~~~~~
+
+Create or provide :ref:`Transport Layer Security (TLS) ` certificates to MinIO to automatically enable HTTPS-secured connections between the server and clients.
+
+Place the certificates in a directory accessible by the ``minio-user`` user/group:
+
+.. code-block:: shell
+ :class: copyable
+
+ mkdir -P /opt/minio/certs
+ chown -R minio-user:minio-user /opt/minio/certs
+
+ cp private.key /opt/minio/certs
+ cp public.crt /opt/minio/certs
+
+For local testing or development environments, you can use the MinIO :minio-git:`certgen ` to mint self-signed certificates.
+For example, the following command generates a self-signed certificate with a set of IP and DNS Subject Alternate Names (SANs) associated to the MinIO Server hosts:
+
+.. code-block:: shell
+
+ certgen -host "localhost,minio-*.example.net"
+
+Place the generated ``public.crt`` and ``private.key`` into the ``/path/to/certs`` directory to enable TLS for the MinIO deployment.
+Applications can use the ``public.crt`` as a trusted Certificate Authority to allow connections to the MinIO deployment without disabling certificate validation.
+
+When MinIO runs with TLS enabled, it also verifies connecting client certificates against the OS list of trusted Certificate Authorities.
+To enable verification of third-party or internally-signed certificates, place the CA file in the ``/opt/minio/certs/CAs`` folder.
+The CA file should include the full chain of trust from leaf to root to ensure successful verification.
+
+For more specific guidance on configuring MinIO for TLS, including multi-domain support via Server Name Indication (SNI), see :ref:`minio-tls`.
+You can optionally skip this step to deploy without TLS enabled. MinIO strongly recommends *against* non-TLS deployments outside of early development.
+
+5. Create the MinIO Environment File
+~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+
+Create an environment file at ``/etc/default/minio``.
+The MinIO service uses this file as the source of all :ref:`environment variables