--- /dev/null
+include/config.h
+server/config.h
\ No newline at end of file
-.nyc_output/**
-.env
\ No newline at end of file
+workouts
+server/workouts-server
+workouts*/
+workouts*.tar.gz
+*.o
+
+# autoconf/automake
+.deps
+.dirstamp
+aclocal.m4
+autom4te.cache/
+build-aux/
+config.h
+config.h.in
+config.h.in~
+config.log
+config.status
+configure
+Makefile
+Makefile.in
+stamp-h1
\ No newline at end of file
-FROM node:latest as builder
-WORKDIR /app
+FROM debian:latest as base
+
+RUN apt-get update
+RUN apt-get install -y libsqlite3-dev autoconf automake gcc make
+
+FROM base as unit-tester
+
+RUN apt-get install -y gdb sqlite3 valgrind
+
+FROM base as core
+ARG VERSION
+
+WORKDIR /
+RUN test -n "${VERSION}"
+ADD workouts-${VERSION}.tar.gz .
+WORKDIR /workouts-${VERSION}/
+
+RUN autoreconf -ivf
+RUN ./configure
+RUN make
+# RUN make distcheck
+RUN make install
+
+FROM unit-tester
+ARG VERSION
+
+WORKDIR /build
+COPY --from=core /workouts-${VERSION}/ /build/
+
+RUN ./configure
+RUN make check
+
+WORKDIR /build/test/unit
+RUN make memcheck
-COPY package.json .
-COPY package-lock.json .
+FROM node:latest as integration-tester
+ARG VERSION
+
+USER node
+WORKDIR /home/node/
+
+COPY --from=core --chown=node:node /workouts-${VERSION}/workouts .
+COPY --from=core --chown=node:node /workouts-${VERSION}/test/integration/index.js .
+COPY --from=core --chown=node:node /workouts-${VERSION}/test/integration/package.json .
+COPY --from=core --chown=node:node /workouts-${VERSION}/test/integration/package-lock.json .
RUN npm install
-FROM node:latest as app
-WORKDIR /home/node/app
-COPY --from=builder /app/node_modules ./node_modules/
-COPY package.json .
-COPY package-lock.json .
-COPY src/ src/
-COPY test/ test/
-COPY index.html .
-COPY webpack.config.js .
-COPY webpack.dev.config.js .
-COPY webpack.prod.config.js .
-COPY workouts.json .
+COPY --from=core /workouts-${VERSION}/test/integration/test/ test/
+
+RUN npm test
+
+FROM node:latest as builder
+ARG VERSION
+
+USER node
+WORKDIR /home/node/
+
+COPY --from=core --chown=node:node /workouts-${VERSION}/gui/ .
+RUN npm install
RUN npm run build
-# RUN npm run test
+FROM core
+
+WORKDIR /data
+COPY --from=builder /home/node/index.html .
+COPY --from=builder /home/node/workouts.js .
+
+RUN workouts attr add lower
+RUN workouts attr add upper
+RUN workouts new "P90X - Kenpo X"
+RUN workouts new "P90X - Kenpo X2"
+RUN workouts toggle "P90X - Kenpo X" lower
+RUN workouts toggle "P90X - Kenpo X2" upper
+RUN workouts add "P90X - Kenpo X" 2020-07-01
-ENTRYPOINT npm run start
\ No newline at end of file
+ENTRYPOINT workouts-server
\ No newline at end of file
+++ /dev/null
-build:
- docker build -t workouts .
-
-run:
- docker run -d -p "8080:8080" --read-only -v `pwd`/src/:/home/node/app/src/ --name workouts-test workouts
-
-extract: build run
- docker cp workouts-test:/home/node/app/workouts.min.js ./workouts.min.js
- $(MAKE) stop
-
-start: build
- -docker run -it --rm -p "8080:8080" --read-only -v `pwd`/src/:/home/node/app/src/ --name workouts-test workouts
-
-stop:
- docker stop workouts-test
- docker rm workouts-test
-
-package_init:
- docker run -d --name workouts_package_init node:latest tail -f /dev/null
- docker cp package.json workouts_package_init:/home/node/
- docker cp package-lock.json workouts_package_init:/home/node/
-
-package_extract:
- docker cp workouts_package_init:/home/node/package.json ./package.json
- docker cp workouts_package_init:/home/node/package-lock.json ./package-lock.json
- $(MAKE) -s package_stop
-
-package_stop:
- docker stop workouts_package_init
- docker rm workouts_package_init
-
-outdated: package_init
- -docker exec -it -w /home/node $$(docker container ls -q -f name=workouts_package_init) npm outdated
- $(MAKE) -s package_stop
-
-update: package_init
- -docker exec -it -w /home/node $$(docker container ls -q -f name=workouts_package_init) /bin/bash
- $(MAKE) -s package_extract
-
-inspect:
- docker exec -it $$(docker container ls -q -f name=workouts_package_init) /bin/bash
\ No newline at end of file
--- /dev/null
+AM_CPPFLAGS = -I$(top_builddir)/include/ -I$(top_srcdir)/include/
+
+bin_PROGRAMS = workouts
+workouts_SOURCES = \
+ src/add.c \
+ src/attr.c \
+ src/data/attr.c \
+ src/default.c \
+ src/ls.c \
+ src/main.c \
+ src/new.c \
+ src/opt.c \
+ src/recent.c \
+ src/toggle.c \
+ src/usage.c \
+ src/data/recent.c \
+ src/data/setup.c \
+ src/data/workout.c \
+ src/opt/homedir.c \
+ src/opt/rows.c \
+ src/opt/verbose.c
+workouts_SOURCES += \
+ include/add.h \
+ include/attr.h \
+ include/data.h \
+ include/default.h \
+ include/ls.h \
+ include/main.h \
+ include/new.h \
+ include/opt.h \
+ include/recent.h \
+ include/toggle.h \
+ include/usage.h
+
+SUBDIRS = gui server test/integration test/unit
+
+if HAVE_DOCKER
+IMAGE_NAME=workouts
+CONTAINER_NAME=workouts-test
+build:
+ make dist
+ docker build -t $(IMAGE_NAME) --build-arg VERSION=$(VERSION) .
+
+run: build
+ docker run -d \
+ -p "8080:8080" \
+ --cap-add=SYS_PTRACE --security-opt seccomp=unconfined \
+ --name $(CONTAINER_NAME) \
+ $(IMAGE_NAME)
+
+start: build
+ -docker run -it --rm \
+ -p "8080:8080" \
+ --cap-add=SYS_PTRACE --security-opt seccomp=unconfined \
+ $(IMAGE_NAME)
+
+stop:
+ docker stop $(CONTAINER_NAME)
+ docker rm $(CONTAINER_NAME);
+else
+build: missing-local
+run: missing-local
+start: missing-local
+stop: missing-local
+missing-local:
+ @echo "docker not found"
+endif
\ No newline at end of file
### Workout Management Tool
-Tool for quickly and easily managing and keeping track of workouts.
+Tool for managing and keeping track of workouts.
### To Do:
-- [x] move nyc to devdependcies
-- [x] update default sort order in recent
-- [x] fix scrolling css
-- [ ] fix tests
-- [ ] make updates to attributes/new workouts update automatically
- - [ ] currently update in the background and wait for reload of view
-- [ ] upgrade npm packages to next major versions
- - [ ] makefile command to do automatically?
- - [ ] upgrade
- - [ ] verify & pass tests
\ No newline at end of file
+- [ ] workouts rm [!name] [!date]
+- [ ] update date of recent workout from cli
+ - [ ] rm then add
+- [ ] make attributes customizable
+ - [ ] modify workout.js
+- [ ] add delete functionality
+- [ ] add attribute add functionality to gui
+- [ ] workouts rm attr [!name]
+- [ ] rename workouts functionality
+
+### Later
+- [ ] add --format option to ls commands
+- [ ] bash completion
\ No newline at end of file
--- /dev/null
+AC_PREREQ([2.69])
+AC_INIT([workouts], [0.0.1])
+
+# Store build files not in main directory
+AC_CONFIG_AUX_DIR([build-aux])
+
+AM_INIT_AUTOMAKE([foreign subdir-objects nostdinc -Wall -Werror])
+
+AC_CONFIG_SRCDIR([src/main.c])
+AC_CONFIG_HEADERS([include/config.h])
+
+AC_ARG_ENABLE([gui],
+ [AS_HELP_STRING([--disable-gui],
+ [disable gui (enabled by default if node is present)])],
+ [enable_gui=$enableval],
+ [enable_gui=yes])
+
+AC_ARG_ENABLE([tests],
+ [AS_HELP_STRING([--disable-tests],
+ [disable tests (enabled by default)])],
+ [enable_tests=$enableval],
+ [enable_tests=yes])
+
+AC_ARG_ENABLE([memcheck],
+ [AS_HELP_STRING([--disable-memcheck],
+ [disable valgrind (enabled by default)])],
+ [enable_memcheck=$enableval],
+ [enable_memcheck=yes])
+
+AC_PATH_PROG([DOCKER], [docker])
+AM_CONDITIONAL([HAVE_DOCKER], [test -n "$DOCKER"])
+AC_PATH_PROG([NODE], [node])
+AM_CONDITIONAL([HAVE_NODE], [test -n "$NODE"])
+AC_PATH_PROG([VALGRIND], [valgrind])
+AM_CONDITIONAL([HAVE_VALGRIND], [test -n "$VALGRIND"])
+
+dnl disable gui if neither docker nor node are found
+if test "x$enable_gui" = "xyes"; then
+ if test -z "$NODE"; then
+ if test -z "$DOCKER"; then
+ enable_gui=no
+ fi
+ fi
+fi
+
+AC_MSG_CHECKING([if gui should be enabled])
+if test x$enable_gui != xno; then
+ AC_MSG_RESULT(yes)
+else
+ AC_MSG_RESULT(no)
+fi
+
+AM_CONDITIONAL([ENABLE_GUI],[test x$enable_gui = xyes])
+
+dnl disable memcheck if valgrind not found
+if test "x$enable_memcheck" != "xyes"; then
+ if test -n "$HAVE_VALGRIND"; then
+ enable_memcheck=no
+ fi
+fi
+
+AC_MSG_CHECKING([if memcheck should be enabled])
+if test x$enable_memcheck != xno; then
+ AC_MSG_RESULT(yes)
+else
+ AC_MSG_RESULT(no)
+fi
+
+AM_CONDITIONAL([ENABLE_MEMCHECK],[test x$enable_memcheck = xyes])
+
+# Checks for programs.
+AC_PROG_CC
+
+# Checks for libraries.
+AC_CHECK_LIB([sqlite3], [sqlite3_open_v2])
+
+# Checks for header files.
+AC_CHECK_HEADERS([stdlib.h string.h])
+
+# Checks for typedefs, structures, and compiler characteristics.
+
+# Checks for library functions.
+AC_FUNC_MALLOC
+AC_CHECK_FUNCS([strtoul])
+
+AC_CONFIG_FILES([Makefile
+ gui/Makefile
+ test/integration/Makefile
+ test/unit/Makefile])
+AC_CONFIG_SUBDIRS([server])
+AC_OUTPUT
+++ /dev/null
-version: "3.7"
-
-services:
- workouts:
- build:
- args:
- BUILD_CONFIGURATION: ${BUILD_CONFIGURATION}
- context: .
- env_file: .env
- image: workouts
- ports:
- - "8080:8080"
- volumes:
- - type: bind
- source: ./src
- target: /home/node/app/src
\ No newline at end of file
--- /dev/null
+{
+ "presets": ["@babel/preset-env"]
+}
\ No newline at end of file
--- /dev/null
+FROM node:latest as builder
+WORKDIR /app
+
+COPY package.json .
+COPY package-lock.json .
+
+RUN npm install
+
+FROM node:latest as app
+WORKDIR /home/node/app
+COPY --from=builder /app/node_modules ./node_modules/
+COPY package.json .
+COPY package-lock.json .
+COPY src/ src/
+COPY test/ test/
+COPY index.html .
+COPY webpack.config.js .
+COPY webpack.dev.config.js .
+COPY webpack.prod.config.js .
+COPY .babelrc .
+COPY workouts.json .
+
+RUN npm run build
+
+RUN npm run test
+
+ENTRYPOINT npm run start
\ No newline at end of file
--- /dev/null
+EXTRA_DIST = \
+ .babelrc \
+ index.html \
+ Makefile.am \
+ package.json \
+ package-lock.json \
+ src/classes/workout.js \
+ src/components/days.ago/days.ago.component.js \
+ src/components/days.ago/days.ago.css \
+ src/components/days.ago/days.ago.js \
+ src/components/header/header.component.js \
+ src/components/header/header.css \
+ src/components/header/header.js \
+ src/components/main/main.component.js \
+ src/components/main/main.css \
+ src/components/main/main.js \
+ src/components/manage/manage.component.js \
+ src/components/manage/manage.css \
+ src/components/manage/manage.js \
+ src/components/manage.row/manage.row.css \
+ src/components/manage.row/manage.row.js \
+ src/components/recent/recent.component.js \
+ src/components/recent/recent.css \
+ src/components/recent/recent.js \
+ src/components/recent.row/recent.row.css \
+ src/components/recent.row/recent.row.js \
+ src/constants.js \
+ src/data/action.js \
+ src/data/attributes.js \
+ src/data/load.js \
+ src/data/recent.js \
+ src/data/workouts.js \
+ src/index.js \
+ src/reducers/combined.js \
+ src/reducers/sync.js \
+ src/reducers/view.js \
+ src/reducers/workouts.js \
+ src/util/request.js \
+ src/util/backend.js \
+ test/data.action.tests.js \
+ test/sync.reducer.tests.js \
+ test/view.reducer.tests.js \
+ test/workouts.reducer.tests.js \
+ test/workout.tests.js \
+ webpack.config.js \
+ webpack.dev.config.js \
+ webpack.prod.config.js \
+ workouts.json
+
+if ENABLE_GUI
+
+if HAVE_DOCKER
+IMAGE_NAME=workouts
+CONTAINER_NAME=workouts-test
+
+PACKAGE_CONTAINER_NAME=workouts_package_init
+EXTRACTION_TARGET=workouts.js
+
+build:
+ docker build -t $(IMAGE_NAME) .
+
+run:
+ docker run -d -p "8080:8080" --read-only -v `pwd`/src/:/home/node/app/src/ --name $(CONTAINER_NAME) $(IMAGE_NAME)
+
+extract: build run
+ docker cp $(CONTAINER_NAME):/home/node/app/$(EXTRACTION_TARGET) ./$(EXTRACTION_TARGET)
+ $(MAKE) stop
+
+start: build
+ -docker run -it --rm -p "8080:8080" --read-only -v `pwd`/src/:/home/node/app/src/ --name $(CONTAINER_NAME) $(IMAGE_NAME)
+
+stop:
+ docker stop $(CONTAINER_NAME)
+ docker rm $(CONTAINER_NAME)
+
+package_init:
+ docker run -d --name $(PACKAGE_CONTAINER_NAME) node:latest tail -f /dev/null
+ docker cp package.json $(PACKAGE_CONTAINER_NAME):/home/node/
+ docker cp package-lock.json $(PACKAGE_CONTAINER_NAME):/home/node/
+
+package_extract:
+ docker cp $(PACKAGE_CONTAINER_NAME):/home/node/package.json ./package.json
+ docker cp $(PACKAGE_CONTAINER_NAME):/home/node/package-lock.json ./package-lock.json
+ $(MAKE) -s package_stop
+
+package_stop:
+ docker stop $(PACKAGE_CONTAINER_NAME)
+ docker rm $(PACKAGE_CONTAINER_NAME)
+
+outdated: buid package_init
+ -docker exec -it -w /home/node $$(docker container ls -q -f name=$(PACKAGE_CONTAINER_NAME)) npm outdated
+ $(MAKE) -s package_stop
+
+update: build package_init
+ -docker exec -it -w /home/node $$(docker container ls -q -f name=$(PACKAGE_CONTAINER_NAME)) /bin/bash
+ $(MAKE) -s package_extract
+
+inspect:
+ docker exec -it $$(docker container ls -q -f name=$(PACKAGE_CONTAINER_NAME)) /bin/bash
+
+else
+build: missing-local
+run: missing-local
+extract: missing-local
+start: missing-local
+stop: missing-local
+package_init: missing-local
+package_extract: missing-local
+package_stop: missing-local
+outdated: missing-local
+update: missing-local
+inspect: missing-local
+missing-local:
+ @echo "docker not found"
+endif
+
+if HAVE_NODE
+all-local:
+ npm install
+ npm run build
+
+clean-local:
+ rm -f workouts.js
+
+check-local:
+ npm run test
+else
+all-local: missing-local
+check-local: missing-local
+missing-local:
+ @echo "node not found"
+endif
+
+else
+all-local:
+ @echo "gui not enabled"
+endif
\ No newline at end of file
"requires": true,
"dependencies": {
"@babel/code-frame": {
- "version": "7.8.3",
- "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.8.3.tgz",
- "integrity": "sha512-a9gxpmdXtZEInkCSHUJDLHZVBgb1QS0jhss4cPP93EW7s+uC5bikET2twEF3KV+7rDblJcmNvTR7VJejqd2C2g==",
+ "version": "7.10.4",
+ "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.10.4.tgz",
+ "integrity": "sha512-vG6SvB6oYEhvgisZNFRmRCUkLz11c7rp+tbNTynGqc6mS1d5ATd/sGyV6W0KZZnXRKMTzZDRgQT3Ou9jhpAfUg==",
"dev": true,
"requires": {
- "@babel/highlight": "^7.8.3"
+ "@babel/highlight": "^7.10.4"
},
"dependencies": {
"@babel/highlight": {
- "version": "7.8.3",
- "resolved": "https://registry.npmjs.org/@babel/highlight/-/highlight-7.8.3.tgz",
- "integrity": "sha512-PX4y5xQUvy0fnEVHrYOarRPXVWafSjTW9T0Hab8gVIawpl2Sj0ORyrygANq+KjcNlSSTw0YCLSNA8OyZ1I4yEg==",
+ "version": "7.10.4",
+ "resolved": "https://registry.npmjs.org/@babel/highlight/-/highlight-7.10.4.tgz",
+ "integrity": "sha512-i6rgnR/YgPEQzZZnbTHHuZdlE8qyoBNalD6F+q4vAFlcMEcqmkoG+mPqJYJCo63qPf74+Y1UZsl3l6f7/RIkmA==",
"dev": true,
"requires": {
+ "@babel/helper-validator-identifier": "^7.10.4",
"chalk": "^2.0.0",
- "esutils": "^2.0.2",
"js-tokens": "^4.0.0"
}
}
}
},
"@babel/compat-data": {
- "version": "7.8.5",
- "resolved": "https://registry.npmjs.org/@babel/compat-data/-/compat-data-7.8.5.tgz",
- "integrity": "sha512-jWYUqQX/ObOhG1UiEkbH5SANsE/8oKXiQWjj7p7xgj9Zmnt//aUvyz4dBkK0HNsS8/cbyC5NmmH87VekW+mXFg==",
+ "version": "7.10.4",
+ "resolved": "https://registry.npmjs.org/@babel/compat-data/-/compat-data-7.10.4.tgz",
+ "integrity": "sha512-t+rjExOrSVvjQQXNp5zAIYDp00KjdvGl/TpDX5REPr0S9IAIPQMTilcfG6q8c0QFmj9lSTVySV2VTsyggvtNIw==",
"dev": true,
"requires": {
- "browserslist": "^4.8.5",
+ "browserslist": "^4.12.0",
"invariant": "^2.2.4",
"semver": "^5.5.0"
}
},
"@babel/core": {
- "version": "7.8.4",
- "resolved": "https://registry.npmjs.org/@babel/core/-/core-7.8.4.tgz",
- "integrity": "sha512-0LiLrB2PwrVI+a2/IEskBopDYSd8BCb3rOvH7D5tzoWd696TBEduBvuLVm4Nx6rltrLZqvI3MCalB2K2aVzQjA==",
- "dev": true,
- "requires": {
- "@babel/code-frame": "^7.8.3",
- "@babel/generator": "^7.8.4",
- "@babel/helpers": "^7.8.4",
- "@babel/parser": "^7.8.4",
- "@babel/template": "^7.8.3",
- "@babel/traverse": "^7.8.4",
- "@babel/types": "^7.8.3",
+ "version": "7.10.5",
+ "resolved": "https://registry.npmjs.org/@babel/core/-/core-7.10.5.tgz",
+ "integrity": "sha512-O34LQooYVDXPl7QWCdW9p4NR+QlzOr7xShPPJz8GsuCU3/8ua/wqTr7gmnxXv+WBESiGU/G5s16i6tUvHkNb+w==",
+ "dev": true,
+ "requires": {
+ "@babel/code-frame": "^7.10.4",
+ "@babel/generator": "^7.10.5",
+ "@babel/helper-module-transforms": "^7.10.5",
+ "@babel/helpers": "^7.10.4",
+ "@babel/parser": "^7.10.5",
+ "@babel/template": "^7.10.4",
+ "@babel/traverse": "^7.10.5",
+ "@babel/types": "^7.10.5",
"convert-source-map": "^1.7.0",
"debug": "^4.1.0",
"gensync": "^1.0.0-beta.1",
- "json5": "^2.1.0",
- "lodash": "^4.17.13",
+ "json5": "^2.1.2",
+ "lodash": "^4.17.19",
"resolve": "^1.3.2",
"semver": "^5.4.1",
"source-map": "^0.5.0"
},
"dependencies": {
- "@babel/generator": {
- "version": "7.8.4",
- "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.8.4.tgz",
- "integrity": "sha512-PwhclGdRpNAf3IxZb0YVuITPZmmrXz9zf6fH8lT4XbrmfQKr6ryBzhv593P5C6poJRciFCL/eHGW2NuGrgEyxA==",
- "dev": true,
- "requires": {
- "@babel/types": "^7.8.3",
- "jsesc": "^2.5.1",
- "lodash": "^4.17.13",
- "source-map": "^0.5.0"
- }
- },
- "@babel/helper-split-export-declaration": {
- "version": "7.8.3",
- "resolved": "https://registry.npmjs.org/@babel/helper-split-export-declaration/-/helper-split-export-declaration-7.8.3.tgz",
- "integrity": "sha512-3x3yOeyBhW851hroze7ElzdkeRXQYQbFIb7gLK1WQYsw2GWDay5gAJNw1sWJ0VFP6z5J1whqeXH/WCdCjZv6dA==",
+ "@babel/helper-module-transforms": {
+ "version": "7.10.5",
+ "resolved": "https://registry.npmjs.org/@babel/helper-module-transforms/-/helper-module-transforms-7.10.5.tgz",
+ "integrity": "sha512-4P+CWMJ6/j1W915ITJaUkadLObmCRRSC234uctJfn/vHrsLNxsR8dwlcXv9ZhJWzl77awf+mWXSZEKt5t0OnlA==",
"dev": true,
"requires": {
- "@babel/types": "^7.8.3"
+ "@babel/helper-module-imports": "^7.10.4",
+ "@babel/helper-replace-supers": "^7.10.4",
+ "@babel/helper-simple-access": "^7.10.4",
+ "@babel/helper-split-export-declaration": "^7.10.4",
+ "@babel/template": "^7.10.4",
+ "@babel/types": "^7.10.5",
+ "lodash": "^4.17.19"
}
},
- "@babel/traverse": {
- "version": "7.8.4",
- "resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.8.4.tgz",
- "integrity": "sha512-NGLJPZwnVEyBPLI+bl9y9aSnxMhsKz42so7ApAv9D+b4vAFPpY013FTS9LdKxcABoIYFU52HcYga1pPlx454mg==",
+ "@babel/types": {
+ "version": "7.10.5",
+ "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.10.5.tgz",
+ "integrity": "sha512-ixV66KWfCI6GKoA/2H9v6bQdbfXEwwpOdQ8cRvb4F+eyvhlaHxWFMQB4+3d9QFJXZsiiiqVrewNV0DFEQpyT4Q==",
"dev": true,
"requires": {
- "@babel/code-frame": "^7.8.3",
- "@babel/generator": "^7.8.4",
- "@babel/helper-function-name": "^7.8.3",
- "@babel/helper-split-export-declaration": "^7.8.3",
- "@babel/parser": "^7.8.4",
- "@babel/types": "^7.8.3",
- "debug": "^4.1.0",
- "globals": "^11.1.0",
- "lodash": "^4.17.13"
+ "@babel/helper-validator-identifier": "^7.10.4",
+ "lodash": "^4.17.19",
+ "to-fast-properties": "^2.0.0"
}
}
}
},
"@babel/generator": {
- "version": "7.7.7",
- "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.7.7.tgz",
- "integrity": "sha512-/AOIBpHh/JU1l0ZFS4kiRCBnLi6OTHzh0RPk3h9isBxkkqELtQNFi1Vr/tiG9p1yfoUdKVwISuXWQR+hwwM4VQ==",
+ "version": "7.10.5",
+ "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.10.5.tgz",
+ "integrity": "sha512-3vXxr3FEW7E7lJZiWQ3bM4+v/Vyr9C+hpolQ8BGFr9Y8Ri2tFLWTixmwKBafDujO1WVah4fhZBeU1bieKdghig==",
"dev": true,
"requires": {
- "@babel/types": "^7.7.4",
+ "@babel/types": "^7.10.5",
"jsesc": "^2.5.1",
- "lodash": "^4.17.13",
"source-map": "^0.5.0"
},
"dependencies": {
"@babel/types": {
- "version": "7.7.4",
- "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.7.4.tgz",
- "integrity": "sha512-cz5Ji23KCi4T+YIE/BolWosrJuSmoZeN1EFnRtBwF+KKLi8GG/Z2c2hOJJeCXPk4mwk4QFvTmwIodJowXgttRA==",
+ "version": "7.10.5",
+ "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.10.5.tgz",
+ "integrity": "sha512-ixV66KWfCI6GKoA/2H9v6bQdbfXEwwpOdQ8cRvb4F+eyvhlaHxWFMQB4+3d9QFJXZsiiiqVrewNV0DFEQpyT4Q==",
"dev": true,
"requires": {
- "esutils": "^2.0.2",
- "lodash": "^4.17.13",
+ "@babel/helper-validator-identifier": "^7.10.4",
+ "lodash": "^4.17.19",
"to-fast-properties": "^2.0.0"
}
}
}
},
"@babel/helper-annotate-as-pure": {
- "version": "7.8.3",
- "resolved": "https://registry.npmjs.org/@babel/helper-annotate-as-pure/-/helper-annotate-as-pure-7.8.3.tgz",
- "integrity": "sha512-6o+mJrZBxOoEX77Ezv9zwW7WV8DdluouRKNY/IR5u/YTMuKHgugHOzYWlYvYLpLA9nPsQCAAASpCIbjI9Mv+Uw==",
+ "version": "7.10.4",
+ "resolved": "https://registry.npmjs.org/@babel/helper-annotate-as-pure/-/helper-annotate-as-pure-7.10.4.tgz",
+ "integrity": "sha512-XQlqKQP4vXFB7BN8fEEerrmYvHp3fK/rBkRFz9jaJbzK0B1DSfej9Kc7ZzE8Z/OnId1jpJdNAZ3BFQjWG68rcA==",
"dev": true,
"requires": {
- "@babel/types": "^7.8.3"
+ "@babel/types": "^7.10.4"
+ },
+ "dependencies": {
+ "@babel/types": {
+ "version": "7.10.4",
+ "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.10.4.tgz",
+ "integrity": "sha512-UTCFOxC3FsFHb7lkRMVvgLzaRVamXuAs2Tz4wajva4WxtVY82eZeaUBtC2Zt95FU9TiznuC0Zk35tsim8jeVpg==",
+ "dev": true,
+ "requires": {
+ "@babel/helper-validator-identifier": "^7.10.4",
+ "lodash": "^4.17.13",
+ "to-fast-properties": "^2.0.0"
+ }
+ }
}
},
"@babel/helper-builder-binary-assignment-operator-visitor": {
- "version": "7.8.3",
- "resolved": "https://registry.npmjs.org/@babel/helper-builder-binary-assignment-operator-visitor/-/helper-builder-binary-assignment-operator-visitor-7.8.3.tgz",
- "integrity": "sha512-5eFOm2SyFPK4Rh3XMMRDjN7lBH0orh3ss0g3rTYZnBQ+r6YPj7lgDyCvPphynHvUrobJmeMignBr6Acw9mAPlw==",
- "dev": true,
- "requires": {
- "@babel/helper-explode-assignable-expression": "^7.8.3",
- "@babel/types": "^7.8.3"
- }
- },
- "@babel/helper-call-delegate": {
- "version": "7.8.3",
- "resolved": "https://registry.npmjs.org/@babel/helper-call-delegate/-/helper-call-delegate-7.8.3.tgz",
- "integrity": "sha512-6Q05px0Eb+N4/GTyKPPvnkig7Lylw+QzihMpws9iiZQv7ZImf84ZsZpQH7QoWN4n4tm81SnSzPgHw2qtO0Zf3A==",
+ "version": "7.10.4",
+ "resolved": "https://registry.npmjs.org/@babel/helper-builder-binary-assignment-operator-visitor/-/helper-builder-binary-assignment-operator-visitor-7.10.4.tgz",
+ "integrity": "sha512-L0zGlFrGWZK4PbT8AszSfLTM5sDU1+Az/En9VrdT8/LmEiJt4zXt+Jve9DCAnQcbqDhCI+29y/L93mrDzddCcg==",
"dev": true,
"requires": {
- "@babel/helper-hoist-variables": "^7.8.3",
- "@babel/traverse": "^7.8.3",
- "@babel/types": "^7.8.3"
+ "@babel/helper-explode-assignable-expression": "^7.10.4",
+ "@babel/types": "^7.10.4"
},
"dependencies": {
- "@babel/generator": {
- "version": "7.8.4",
- "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.8.4.tgz",
- "integrity": "sha512-PwhclGdRpNAf3IxZb0YVuITPZmmrXz9zf6fH8lT4XbrmfQKr6ryBzhv593P5C6poJRciFCL/eHGW2NuGrgEyxA==",
+ "@babel/types": {
+ "version": "7.10.4",
+ "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.10.4.tgz",
+ "integrity": "sha512-UTCFOxC3FsFHb7lkRMVvgLzaRVamXuAs2Tz4wajva4WxtVY82eZeaUBtC2Zt95FU9TiznuC0Zk35tsim8jeVpg==",
"dev": true,
"requires": {
- "@babel/types": "^7.8.3",
- "jsesc": "^2.5.1",
+ "@babel/helper-validator-identifier": "^7.10.4",
"lodash": "^4.17.13",
- "source-map": "^0.5.0"
- }
- },
- "@babel/helper-split-export-declaration": {
- "version": "7.8.3",
- "resolved": "https://registry.npmjs.org/@babel/helper-split-export-declaration/-/helper-split-export-declaration-7.8.3.tgz",
- "integrity": "sha512-3x3yOeyBhW851hroze7ElzdkeRXQYQbFIb7gLK1WQYsw2GWDay5gAJNw1sWJ0VFP6z5J1whqeXH/WCdCjZv6dA==",
- "dev": true,
- "requires": {
- "@babel/types": "^7.8.3"
- }
- },
- "@babel/traverse": {
- "version": "7.8.4",
- "resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.8.4.tgz",
- "integrity": "sha512-NGLJPZwnVEyBPLI+bl9y9aSnxMhsKz42so7ApAv9D+b4vAFPpY013FTS9LdKxcABoIYFU52HcYga1pPlx454mg==",
- "dev": true,
- "requires": {
- "@babel/code-frame": "^7.8.3",
- "@babel/generator": "^7.8.4",
- "@babel/helper-function-name": "^7.8.3",
- "@babel/helper-split-export-declaration": "^7.8.3",
- "@babel/parser": "^7.8.4",
- "@babel/types": "^7.8.3",
- "debug": "^4.1.0",
- "globals": "^11.1.0",
- "lodash": "^4.17.13"
+ "to-fast-properties": "^2.0.0"
}
}
}
},
"@babel/helper-compilation-targets": {
- "version": "7.8.4",
- "resolved": "https://registry.npmjs.org/@babel/helper-compilation-targets/-/helper-compilation-targets-7.8.4.tgz",
- "integrity": "sha512-3k3BsKMvPp5bjxgMdrFyq0UaEO48HciVrOVF0+lon8pp95cyJ2ujAh0TrBHNMnJGT2rr0iKOJPFFbSqjDyf/Pg==",
+ "version": "7.10.4",
+ "resolved": "https://registry.npmjs.org/@babel/helper-compilation-targets/-/helper-compilation-targets-7.10.4.tgz",
+ "integrity": "sha512-a3rYhlsGV0UHNDvrtOXBg8/OpfV0OKTkxKPzIplS1zpx7CygDcWWxckxZeDd3gzPzC4kUT0A4nVFDK0wGMh4MQ==",
"dev": true,
"requires": {
- "@babel/compat-data": "^7.8.4",
- "browserslist": "^4.8.5",
+ "@babel/compat-data": "^7.10.4",
+ "browserslist": "^4.12.0",
"invariant": "^2.2.4",
"levenary": "^1.1.1",
"semver": "^5.5.0"
}
},
+ "@babel/helper-create-class-features-plugin": {
+ "version": "7.10.4",
+ "resolved": "https://registry.npmjs.org/@babel/helper-create-class-features-plugin/-/helper-create-class-features-plugin-7.10.4.tgz",
+ "integrity": "sha512-9raUiOsXPxzzLjCXeosApJItoMnX3uyT4QdM2UldffuGApNrF8e938MwNpDCK9CPoyxrEoCgT+hObJc3mZa6lQ==",
+ "dev": true,
+ "requires": {
+ "@babel/helper-function-name": "^7.10.4",
+ "@babel/helper-member-expression-to-functions": "^7.10.4",
+ "@babel/helper-optimise-call-expression": "^7.10.4",
+ "@babel/helper-plugin-utils": "^7.10.4",
+ "@babel/helper-replace-supers": "^7.10.4",
+ "@babel/helper-split-export-declaration": "^7.10.4"
+ },
+ "dependencies": {
+ "@babel/helper-split-export-declaration": {
+ "version": "7.10.4",
+ "resolved": "https://registry.npmjs.org/@babel/helper-split-export-declaration/-/helper-split-export-declaration-7.10.4.tgz",
+ "integrity": "sha512-pySBTeoUff56fL5CBU2hWm9TesA4r/rOkI9DyJLvvgz09MB9YtfIYe3iBriVaYNaPe+Alua0vBIOVOLs2buWhg==",
+ "dev": true,
+ "requires": {
+ "@babel/types": "^7.10.4"
+ }
+ },
+ "@babel/types": {
+ "version": "7.10.4",
+ "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.10.4.tgz",
+ "integrity": "sha512-UTCFOxC3FsFHb7lkRMVvgLzaRVamXuAs2Tz4wajva4WxtVY82eZeaUBtC2Zt95FU9TiznuC0Zk35tsim8jeVpg==",
+ "dev": true,
+ "requires": {
+ "@babel/helper-validator-identifier": "^7.10.4",
+ "lodash": "^4.17.13",
+ "to-fast-properties": "^2.0.0"
+ }
+ }
+ }
+ },
"@babel/helper-create-regexp-features-plugin": {
- "version": "7.8.3",
- "resolved": "https://registry.npmjs.org/@babel/helper-create-regexp-features-plugin/-/helper-create-regexp-features-plugin-7.8.3.tgz",
- "integrity": "sha512-Gcsm1OHCUr9o9TcJln57xhWHtdXbA2pgQ58S0Lxlks0WMGNXuki4+GLfX0p+L2ZkINUGZvfkz8rzoqJQSthI+Q==",
+ "version": "7.10.4",
+ "resolved": "https://registry.npmjs.org/@babel/helper-create-regexp-features-plugin/-/helper-create-regexp-features-plugin-7.10.4.tgz",
+ "integrity": "sha512-2/hu58IEPKeoLF45DBwx3XFqsbCXmkdAay4spVr2x0jYgRxrSNp+ePwvSsy9g6YSaNDcKIQVPXk1Ov8S2edk2g==",
"dev": true,
"requires": {
- "@babel/helper-regex": "^7.8.3",
- "regexpu-core": "^4.6.0"
+ "@babel/helper-annotate-as-pure": "^7.10.4",
+ "@babel/helper-regex": "^7.10.4",
+ "regexpu-core": "^4.7.0"
}
},
"@babel/helper-define-map": {
- "version": "7.8.3",
- "resolved": "https://registry.npmjs.org/@babel/helper-define-map/-/helper-define-map-7.8.3.tgz",
- "integrity": "sha512-PoeBYtxoZGtct3md6xZOCWPcKuMuk3IHhgxsRRNtnNShebf4C8YonTSblsK4tvDbm+eJAw2HAPOfCr+Q/YRG/g==",
+ "version": "7.10.4",
+ "resolved": "https://registry.npmjs.org/@babel/helper-define-map/-/helper-define-map-7.10.4.tgz",
+ "integrity": "sha512-nIij0oKErfCnLUCWaCaHW0Bmtl2RO9cN7+u2QT8yqTywgALKlyUVOvHDElh+b5DwVC6YB1FOYFOTWcN/+41EDA==",
"dev": true,
"requires": {
- "@babel/helper-function-name": "^7.8.3",
- "@babel/types": "^7.8.3",
+ "@babel/helper-function-name": "^7.10.4",
+ "@babel/types": "^7.10.4",
"lodash": "^4.17.13"
+ },
+ "dependencies": {
+ "@babel/types": {
+ "version": "7.10.4",
+ "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.10.4.tgz",
+ "integrity": "sha512-UTCFOxC3FsFHb7lkRMVvgLzaRVamXuAs2Tz4wajva4WxtVY82eZeaUBtC2Zt95FU9TiznuC0Zk35tsim8jeVpg==",
+ "dev": true,
+ "requires": {
+ "@babel/helper-validator-identifier": "^7.10.4",
+ "lodash": "^4.17.13",
+ "to-fast-properties": "^2.0.0"
+ }
+ }
}
},
"@babel/helper-explode-assignable-expression": {
- "version": "7.8.3",
- "resolved": "https://registry.npmjs.org/@babel/helper-explode-assignable-expression/-/helper-explode-assignable-expression-7.8.3.tgz",
- "integrity": "sha512-N+8eW86/Kj147bO9G2uclsg5pwfs/fqqY5rwgIL7eTBklgXjcOJ3btzS5iM6AitJcftnY7pm2lGsrJVYLGjzIw==",
+ "version": "7.10.4",
+ "resolved": "https://registry.npmjs.org/@babel/helper-explode-assignable-expression/-/helper-explode-assignable-expression-7.10.4.tgz",
+ "integrity": "sha512-4K71RyRQNPRrR85sr5QY4X3VwG4wtVoXZB9+L3r1Gp38DhELyHCtovqydRi7c1Ovb17eRGiQ/FD5s8JdU0Uy5A==",
"dev": true,
"requires": {
- "@babel/traverse": "^7.8.3",
- "@babel/types": "^7.8.3"
+ "@babel/traverse": "^7.10.4",
+ "@babel/types": "^7.10.4"
},
"dependencies": {
"@babel/generator": {
- "version": "7.8.4",
- "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.8.4.tgz",
- "integrity": "sha512-PwhclGdRpNAf3IxZb0YVuITPZmmrXz9zf6fH8lT4XbrmfQKr6ryBzhv593P5C6poJRciFCL/eHGW2NuGrgEyxA==",
+ "version": "7.10.4",
+ "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.10.4.tgz",
+ "integrity": "sha512-toLIHUIAgcQygFZRAQcsLQV3CBuX6yOIru1kJk/qqqvcRmZrYe6WavZTSG+bB8MxhnL9YPf+pKQfuiP161q7ng==",
"dev": true,
"requires": {
- "@babel/types": "^7.8.3",
+ "@babel/types": "^7.10.4",
"jsesc": "^2.5.1",
"lodash": "^4.17.13",
"source-map": "^0.5.0"
}
},
"@babel/helper-split-export-declaration": {
- "version": "7.8.3",
- "resolved": "https://registry.npmjs.org/@babel/helper-split-export-declaration/-/helper-split-export-declaration-7.8.3.tgz",
- "integrity": "sha512-3x3yOeyBhW851hroze7ElzdkeRXQYQbFIb7gLK1WQYsw2GWDay5gAJNw1sWJ0VFP6z5J1whqeXH/WCdCjZv6dA==",
+ "version": "7.10.4",
+ "resolved": "https://registry.npmjs.org/@babel/helper-split-export-declaration/-/helper-split-export-declaration-7.10.4.tgz",
+ "integrity": "sha512-pySBTeoUff56fL5CBU2hWm9TesA4r/rOkI9DyJLvvgz09MB9YtfIYe3iBriVaYNaPe+Alua0vBIOVOLs2buWhg==",
"dev": true,
"requires": {
- "@babel/types": "^7.8.3"
+ "@babel/types": "^7.10.4"
}
},
+ "@babel/parser": {
+ "version": "7.10.4",
+ "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.10.4.tgz",
+ "integrity": "sha512-8jHII4hf+YVDsskTF6WuMB3X4Eh+PsUkC2ljq22so5rHvH+T8BzyL94VOdyFLNR8tBSVXOTbNHOKpR4TfRxVtA==",
+ "dev": true
+ },
"@babel/traverse": {
- "version": "7.8.4",
- "resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.8.4.tgz",
- "integrity": "sha512-NGLJPZwnVEyBPLI+bl9y9aSnxMhsKz42so7ApAv9D+b4vAFPpY013FTS9LdKxcABoIYFU52HcYga1pPlx454mg==",
+ "version": "7.10.4",
+ "resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.10.4.tgz",
+ "integrity": "sha512-aSy7p5THgSYm4YyxNGz6jZpXf+Ok40QF3aA2LyIONkDHpAcJzDUqlCKXv6peqYUs2gmic849C/t2HKw2a2K20Q==",
"dev": true,
"requires": {
- "@babel/code-frame": "^7.8.3",
- "@babel/generator": "^7.8.4",
- "@babel/helper-function-name": "^7.8.3",
- "@babel/helper-split-export-declaration": "^7.8.3",
- "@babel/parser": "^7.8.4",
- "@babel/types": "^7.8.3",
+ "@babel/code-frame": "^7.10.4",
+ "@babel/generator": "^7.10.4",
+ "@babel/helper-function-name": "^7.10.4",
+ "@babel/helper-split-export-declaration": "^7.10.4",
+ "@babel/parser": "^7.10.4",
+ "@babel/types": "^7.10.4",
"debug": "^4.1.0",
"globals": "^11.1.0",
"lodash": "^4.17.13"
}
+ },
+ "@babel/types": {
+ "version": "7.10.4",
+ "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.10.4.tgz",
+ "integrity": "sha512-UTCFOxC3FsFHb7lkRMVvgLzaRVamXuAs2Tz4wajva4WxtVY82eZeaUBtC2Zt95FU9TiznuC0Zk35tsim8jeVpg==",
+ "dev": true,
+ "requires": {
+ "@babel/helper-validator-identifier": "^7.10.4",
+ "lodash": "^4.17.13",
+ "to-fast-properties": "^2.0.0"
+ }
}
}
},
"@babel/helper-function-name": {
- "version": "7.8.3",
- "resolved": "https://registry.npmjs.org/@babel/helper-function-name/-/helper-function-name-7.8.3.tgz",
- "integrity": "sha512-BCxgX1BC2hD/oBlIFUgOCQDOPV8nSINxCwM3o93xP4P9Fq6aV5sgv2cOOITDMtCfQ+3PvHp3l689XZvAM9QyOA==",
+ "version": "7.10.4",
+ "resolved": "https://registry.npmjs.org/@babel/helper-function-name/-/helper-function-name-7.10.4.tgz",
+ "integrity": "sha512-YdaSyz1n8gY44EmN7x44zBn9zQ1Ry2Y+3GTA+3vH6Mizke1Vw0aWDM66FOYEPw8//qKkmqOckrGgTYa+6sceqQ==",
"dev": true,
"requires": {
- "@babel/helper-get-function-arity": "^7.8.3",
- "@babel/template": "^7.8.3",
- "@babel/types": "^7.8.3"
+ "@babel/helper-get-function-arity": "^7.10.4",
+ "@babel/template": "^7.10.4",
+ "@babel/types": "^7.10.4"
+ },
+ "dependencies": {
+ "@babel/parser": {
+ "version": "7.10.4",
+ "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.10.4.tgz",
+ "integrity": "sha512-8jHII4hf+YVDsskTF6WuMB3X4Eh+PsUkC2ljq22so5rHvH+T8BzyL94VOdyFLNR8tBSVXOTbNHOKpR4TfRxVtA==",
+ "dev": true
+ },
+ "@babel/template": {
+ "version": "7.10.4",
+ "resolved": "https://registry.npmjs.org/@babel/template/-/template-7.10.4.tgz",
+ "integrity": "sha512-ZCjD27cGJFUB6nmCB1Enki3r+L5kJveX9pq1SvAUKoICy6CZ9yD8xO086YXdYhvNjBdnekm4ZnaP5yC8Cs/1tA==",
+ "dev": true,
+ "requires": {
+ "@babel/code-frame": "^7.10.4",
+ "@babel/parser": "^7.10.4",
+ "@babel/types": "^7.10.4"
+ }
+ },
+ "@babel/types": {
+ "version": "7.10.4",
+ "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.10.4.tgz",
+ "integrity": "sha512-UTCFOxC3FsFHb7lkRMVvgLzaRVamXuAs2Tz4wajva4WxtVY82eZeaUBtC2Zt95FU9TiznuC0Zk35tsim8jeVpg==",
+ "dev": true,
+ "requires": {
+ "@babel/helper-validator-identifier": "^7.10.4",
+ "lodash": "^4.17.13",
+ "to-fast-properties": "^2.0.0"
+ }
+ }
}
},
"@babel/helper-get-function-arity": {
- "version": "7.8.3",
- "resolved": "https://registry.npmjs.org/@babel/helper-get-function-arity/-/helper-get-function-arity-7.8.3.tgz",
- "integrity": "sha512-FVDR+Gd9iLjUMY1fzE2SR0IuaJToR4RkCDARVfsBBPSP53GEqSFjD8gNyxg246VUyc/ALRxFaAK8rVG7UT7xRA==",
+ "version": "7.10.4",
+ "resolved": "https://registry.npmjs.org/@babel/helper-get-function-arity/-/helper-get-function-arity-7.10.4.tgz",
+ "integrity": "sha512-EkN3YDB+SRDgiIUnNgcmiD361ti+AVbL3f3Henf6dqqUyr5dMsorno0lJWJuLhDhkI5sYEpgj6y9kB8AOU1I2A==",
"dev": true,
"requires": {
- "@babel/types": "^7.8.3"
+ "@babel/types": "^7.10.4"
+ },
+ "dependencies": {
+ "@babel/types": {
+ "version": "7.10.4",
+ "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.10.4.tgz",
+ "integrity": "sha512-UTCFOxC3FsFHb7lkRMVvgLzaRVamXuAs2Tz4wajva4WxtVY82eZeaUBtC2Zt95FU9TiznuC0Zk35tsim8jeVpg==",
+ "dev": true,
+ "requires": {
+ "@babel/helper-validator-identifier": "^7.10.4",
+ "lodash": "^4.17.13",
+ "to-fast-properties": "^2.0.0"
+ }
+ }
}
},
"@babel/helper-hoist-variables": {
- "version": "7.8.3",
- "resolved": "https://registry.npmjs.org/@babel/helper-hoist-variables/-/helper-hoist-variables-7.8.3.tgz",
- "integrity": "sha512-ky1JLOjcDUtSc+xkt0xhYff7Z6ILTAHKmZLHPxAhOP0Nd77O+3nCsd6uSVYur6nJnCI029CrNbYlc0LoPfAPQg==",
+ "version": "7.10.4",
+ "resolved": "https://registry.npmjs.org/@babel/helper-hoist-variables/-/helper-hoist-variables-7.10.4.tgz",
+ "integrity": "sha512-wljroF5PgCk2juF69kanHVs6vrLwIPNp6DLD+Lrl3hoQ3PpPPikaDRNFA+0t81NOoMt2DL6WW/mdU8k4k6ZzuA==",
"dev": true,
"requires": {
- "@babel/types": "^7.8.3"
+ "@babel/types": "^7.10.4"
+ },
+ "dependencies": {
+ "@babel/types": {
+ "version": "7.10.4",
+ "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.10.4.tgz",
+ "integrity": "sha512-UTCFOxC3FsFHb7lkRMVvgLzaRVamXuAs2Tz4wajva4WxtVY82eZeaUBtC2Zt95FU9TiznuC0Zk35tsim8jeVpg==",
+ "dev": true,
+ "requires": {
+ "@babel/helper-validator-identifier": "^7.10.4",
+ "lodash": "^4.17.13",
+ "to-fast-properties": "^2.0.0"
+ }
+ }
}
},
"@babel/helper-member-expression-to-functions": {
- "version": "7.8.3",
- "resolved": "https://registry.npmjs.org/@babel/helper-member-expression-to-functions/-/helper-member-expression-to-functions-7.8.3.tgz",
- "integrity": "sha512-fO4Egq88utkQFjbPrSHGmGLFqmrshs11d46WI+WZDESt7Wu7wN2G2Iu+NMMZJFDOVRHAMIkB5SNh30NtwCA7RA==",
+ "version": "7.10.4",
+ "resolved": "https://registry.npmjs.org/@babel/helper-member-expression-to-functions/-/helper-member-expression-to-functions-7.10.4.tgz",
+ "integrity": "sha512-m5j85pK/KZhuSdM/8cHUABQTAslV47OjfIB9Cc7P+PvlAoBzdb79BGNfw8RhT5Mq3p+xGd0ZfAKixbrUZx0C7A==",
"dev": true,
"requires": {
- "@babel/types": "^7.8.3"
+ "@babel/types": "^7.10.4"
+ },
+ "dependencies": {
+ "@babel/types": {
+ "version": "7.10.4",
+ "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.10.4.tgz",
+ "integrity": "sha512-UTCFOxC3FsFHb7lkRMVvgLzaRVamXuAs2Tz4wajva4WxtVY82eZeaUBtC2Zt95FU9TiznuC0Zk35tsim8jeVpg==",
+ "dev": true,
+ "requires": {
+ "@babel/helper-validator-identifier": "^7.10.4",
+ "lodash": "^4.17.13",
+ "to-fast-properties": "^2.0.0"
+ }
+ }
}
},
"@babel/helper-module-imports": {
- "version": "7.8.3",
- "resolved": "https://registry.npmjs.org/@babel/helper-module-imports/-/helper-module-imports-7.8.3.tgz",
- "integrity": "sha512-R0Bx3jippsbAEtzkpZ/6FIiuzOURPcMjHp+Z6xPe6DtApDJx+w7UYyOLanZqO8+wKR9G10s/FmHXvxaMd9s6Kg==",
+ "version": "7.10.4",
+ "resolved": "https://registry.npmjs.org/@babel/helper-module-imports/-/helper-module-imports-7.10.4.tgz",
+ "integrity": "sha512-nEQJHqYavI217oD9+s5MUBzk6x1IlvoS9WTPfgG43CbMEeStE0v+r+TucWdx8KFGowPGvyOkDT9+7DHedIDnVw==",
"dev": true,
"requires": {
- "@babel/types": "^7.8.3"
+ "@babel/types": "^7.10.4"
+ },
+ "dependencies": {
+ "@babel/types": {
+ "version": "7.10.4",
+ "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.10.4.tgz",
+ "integrity": "sha512-UTCFOxC3FsFHb7lkRMVvgLzaRVamXuAs2Tz4wajva4WxtVY82eZeaUBtC2Zt95FU9TiznuC0Zk35tsim8jeVpg==",
+ "dev": true,
+ "requires": {
+ "@babel/helper-validator-identifier": "^7.10.4",
+ "lodash": "^4.17.13",
+ "to-fast-properties": "^2.0.0"
+ }
+ }
}
},
"@babel/helper-module-transforms": {
- "version": "7.8.3",
- "resolved": "https://registry.npmjs.org/@babel/helper-module-transforms/-/helper-module-transforms-7.8.3.tgz",
- "integrity": "sha512-C7NG6B7vfBa/pwCOshpMbOYUmrYQDfCpVL/JCRu0ek8B5p8kue1+BCXpg2vOYs7w5ACB9GTOBYQ5U6NwrMg+3Q==",
+ "version": "7.10.4",
+ "resolved": "https://registry.npmjs.org/@babel/helper-module-transforms/-/helper-module-transforms-7.10.4.tgz",
+ "integrity": "sha512-Er2FQX0oa3nV7eM1o0tNCTx7izmQtwAQsIiaLRWtavAAEcskb0XJ5OjJbVrYXWOTr8om921Scabn4/tzlx7j1Q==",
"dev": true,
"requires": {
- "@babel/helper-module-imports": "^7.8.3",
- "@babel/helper-simple-access": "^7.8.3",
- "@babel/helper-split-export-declaration": "^7.8.3",
- "@babel/template": "^7.8.3",
- "@babel/types": "^7.8.3",
+ "@babel/helper-module-imports": "^7.10.4",
+ "@babel/helper-replace-supers": "^7.10.4",
+ "@babel/helper-simple-access": "^7.10.4",
+ "@babel/helper-split-export-declaration": "^7.10.4",
+ "@babel/template": "^7.10.4",
+ "@babel/types": "^7.10.4",
"lodash": "^4.17.13"
},
"dependencies": {
"@babel/helper-split-export-declaration": {
- "version": "7.8.3",
- "resolved": "https://registry.npmjs.org/@babel/helper-split-export-declaration/-/helper-split-export-declaration-7.8.3.tgz",
- "integrity": "sha512-3x3yOeyBhW851hroze7ElzdkeRXQYQbFIb7gLK1WQYsw2GWDay5gAJNw1sWJ0VFP6z5J1whqeXH/WCdCjZv6dA==",
+ "version": "7.10.4",
+ "resolved": "https://registry.npmjs.org/@babel/helper-split-export-declaration/-/helper-split-export-declaration-7.10.4.tgz",
+ "integrity": "sha512-pySBTeoUff56fL5CBU2hWm9TesA4r/rOkI9DyJLvvgz09MB9YtfIYe3iBriVaYNaPe+Alua0vBIOVOLs2buWhg==",
+ "dev": true,
+ "requires": {
+ "@babel/types": "^7.10.4"
+ }
+ },
+ "@babel/parser": {
+ "version": "7.10.4",
+ "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.10.4.tgz",
+ "integrity": "sha512-8jHII4hf+YVDsskTF6WuMB3X4Eh+PsUkC2ljq22so5rHvH+T8BzyL94VOdyFLNR8tBSVXOTbNHOKpR4TfRxVtA==",
+ "dev": true
+ },
+ "@babel/template": {
+ "version": "7.10.4",
+ "resolved": "https://registry.npmjs.org/@babel/template/-/template-7.10.4.tgz",
+ "integrity": "sha512-ZCjD27cGJFUB6nmCB1Enki3r+L5kJveX9pq1SvAUKoICy6CZ9yD8xO086YXdYhvNjBdnekm4ZnaP5yC8Cs/1tA==",
+ "dev": true,
+ "requires": {
+ "@babel/code-frame": "^7.10.4",
+ "@babel/parser": "^7.10.4",
+ "@babel/types": "^7.10.4"
+ }
+ },
+ "@babel/types": {
+ "version": "7.10.4",
+ "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.10.4.tgz",
+ "integrity": "sha512-UTCFOxC3FsFHb7lkRMVvgLzaRVamXuAs2Tz4wajva4WxtVY82eZeaUBtC2Zt95FU9TiznuC0Zk35tsim8jeVpg==",
"dev": true,
"requires": {
- "@babel/types": "^7.8.3"
+ "@babel/helper-validator-identifier": "^7.10.4",
+ "lodash": "^4.17.13",
+ "to-fast-properties": "^2.0.0"
}
+ },
+ "lodash": {
+ "version": "4.17.19",
+ "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.19.tgz",
+ "integrity": "sha512-JNvd8XER9GQX0v2qJgsaN/mzFCNA5BRe/j8JN9d+tWyGLSodKQHKFicdwNYzWwI3wjRnaKPsGj1XkBjx/F96DQ==",
+ "dev": true
}
}
},
"@babel/helper-optimise-call-expression": {
- "version": "7.8.3",
- "resolved": "https://registry.npmjs.org/@babel/helper-optimise-call-expression/-/helper-optimise-call-expression-7.8.3.tgz",
- "integrity": "sha512-Kag20n86cbO2AvHca6EJsvqAd82gc6VMGule4HwebwMlwkpXuVqrNRj6CkCV2sKxgi9MyAUnZVnZ6lJ1/vKhHQ==",
+ "version": "7.10.4",
+ "resolved": "https://registry.npmjs.org/@babel/helper-optimise-call-expression/-/helper-optimise-call-expression-7.10.4.tgz",
+ "integrity": "sha512-n3UGKY4VXwXThEiKrgRAoVPBMqeoPgHVqiHZOanAJCG9nQUL2pLRQirUzl0ioKclHGpGqRgIOkgcIJaIWLpygg==",
"dev": true,
"requires": {
- "@babel/types": "^7.8.3"
+ "@babel/types": "^7.10.4"
+ },
+ "dependencies": {
+ "@babel/types": {
+ "version": "7.10.4",
+ "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.10.4.tgz",
+ "integrity": "sha512-UTCFOxC3FsFHb7lkRMVvgLzaRVamXuAs2Tz4wajva4WxtVY82eZeaUBtC2Zt95FU9TiznuC0Zk35tsim8jeVpg==",
+ "dev": true,
+ "requires": {
+ "@babel/helper-validator-identifier": "^7.10.4",
+ "lodash": "^4.17.13",
+ "to-fast-properties": "^2.0.0"
+ }
+ }
}
},
"@babel/helper-plugin-utils": {
- "version": "7.8.3",
- "resolved": "https://registry.npmjs.org/@babel/helper-plugin-utils/-/helper-plugin-utils-7.8.3.tgz",
- "integrity": "sha512-j+fq49Xds2smCUNYmEHF9kGNkhbet6yVIBp4e6oeQpH1RUs/Ir06xUKzDjDkGcaaokPiTNs2JBWHjaE4csUkZQ==",
+ "version": "7.10.4",
+ "resolved": "https://registry.npmjs.org/@babel/helper-plugin-utils/-/helper-plugin-utils-7.10.4.tgz",
+ "integrity": "sha512-O4KCvQA6lLiMU9l2eawBPMf1xPP8xPfB3iEQw150hOVTqj/rfXz0ThTb4HEzqQfs2Bmo5Ay8BzxfzVtBrr9dVg==",
"dev": true
},
"@babel/helper-regex": {
- "version": "7.8.3",
- "resolved": "https://registry.npmjs.org/@babel/helper-regex/-/helper-regex-7.8.3.tgz",
- "integrity": "sha512-BWt0QtYv/cg/NecOAZMdcn/waj/5P26DR4mVLXfFtDokSR6fyuG0Pj+e2FqtSME+MqED1khnSMulkmGl8qWiUQ==",
+ "version": "7.10.4",
+ "resolved": "https://registry.npmjs.org/@babel/helper-regex/-/helper-regex-7.10.4.tgz",
+ "integrity": "sha512-inWpnHGgtg5NOF0eyHlC0/74/VkdRITY9dtTpB2PrxKKn+AkVMRiZz/Adrx+Ssg+MLDesi2zohBW6MVq6b4pOQ==",
"dev": true,
"requires": {
"lodash": "^4.17.13"
}
},
"@babel/helper-remap-async-to-generator": {
- "version": "7.8.3",
- "resolved": "https://registry.npmjs.org/@babel/helper-remap-async-to-generator/-/helper-remap-async-to-generator-7.8.3.tgz",
- "integrity": "sha512-kgwDmw4fCg7AVgS4DukQR/roGp+jP+XluJE5hsRZwxCYGg+Rv9wSGErDWhlI90FODdYfd4xG4AQRiMDjjN0GzA==",
+ "version": "7.10.4",
+ "resolved": "https://registry.npmjs.org/@babel/helper-remap-async-to-generator/-/helper-remap-async-to-generator-7.10.4.tgz",
+ "integrity": "sha512-86Lsr6NNw3qTNl+TBcF1oRZMaVzJtbWTyTko+CQL/tvNvcGYEFKbLXDPxtW0HKk3McNOk4KzY55itGWCAGK5tg==",
"dev": true,
"requires": {
- "@babel/helper-annotate-as-pure": "^7.8.3",
- "@babel/helper-wrap-function": "^7.8.3",
- "@babel/template": "^7.8.3",
- "@babel/traverse": "^7.8.3",
- "@babel/types": "^7.8.3"
+ "@babel/helper-annotate-as-pure": "^7.10.4",
+ "@babel/helper-wrap-function": "^7.10.4",
+ "@babel/template": "^7.10.4",
+ "@babel/traverse": "^7.10.4",
+ "@babel/types": "^7.10.4"
},
"dependencies": {
"@babel/generator": {
- "version": "7.8.4",
- "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.8.4.tgz",
- "integrity": "sha512-PwhclGdRpNAf3IxZb0YVuITPZmmrXz9zf6fH8lT4XbrmfQKr6ryBzhv593P5C6poJRciFCL/eHGW2NuGrgEyxA==",
+ "version": "7.10.4",
+ "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.10.4.tgz",
+ "integrity": "sha512-toLIHUIAgcQygFZRAQcsLQV3CBuX6yOIru1kJk/qqqvcRmZrYe6WavZTSG+bB8MxhnL9YPf+pKQfuiP161q7ng==",
"dev": true,
"requires": {
- "@babel/types": "^7.8.3",
+ "@babel/types": "^7.10.4",
"jsesc": "^2.5.1",
"lodash": "^4.17.13",
"source-map": "^0.5.0"
}
},
"@babel/helper-split-export-declaration": {
- "version": "7.8.3",
- "resolved": "https://registry.npmjs.org/@babel/helper-split-export-declaration/-/helper-split-export-declaration-7.8.3.tgz",
- "integrity": "sha512-3x3yOeyBhW851hroze7ElzdkeRXQYQbFIb7gLK1WQYsw2GWDay5gAJNw1sWJ0VFP6z5J1whqeXH/WCdCjZv6dA==",
+ "version": "7.10.4",
+ "resolved": "https://registry.npmjs.org/@babel/helper-split-export-declaration/-/helper-split-export-declaration-7.10.4.tgz",
+ "integrity": "sha512-pySBTeoUff56fL5CBU2hWm9TesA4r/rOkI9DyJLvvgz09MB9YtfIYe3iBriVaYNaPe+Alua0vBIOVOLs2buWhg==",
+ "dev": true,
+ "requires": {
+ "@babel/types": "^7.10.4"
+ }
+ },
+ "@babel/parser": {
+ "version": "7.10.4",
+ "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.10.4.tgz",
+ "integrity": "sha512-8jHII4hf+YVDsskTF6WuMB3X4Eh+PsUkC2ljq22so5rHvH+T8BzyL94VOdyFLNR8tBSVXOTbNHOKpR4TfRxVtA==",
+ "dev": true
+ },
+ "@babel/template": {
+ "version": "7.10.4",
+ "resolved": "https://registry.npmjs.org/@babel/template/-/template-7.10.4.tgz",
+ "integrity": "sha512-ZCjD27cGJFUB6nmCB1Enki3r+L5kJveX9pq1SvAUKoICy6CZ9yD8xO086YXdYhvNjBdnekm4ZnaP5yC8Cs/1tA==",
"dev": true,
"requires": {
- "@babel/types": "^7.8.3"
+ "@babel/code-frame": "^7.10.4",
+ "@babel/parser": "^7.10.4",
+ "@babel/types": "^7.10.4"
}
},
"@babel/traverse": {
- "version": "7.8.4",
- "resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.8.4.tgz",
- "integrity": "sha512-NGLJPZwnVEyBPLI+bl9y9aSnxMhsKz42so7ApAv9D+b4vAFPpY013FTS9LdKxcABoIYFU52HcYga1pPlx454mg==",
+ "version": "7.10.4",
+ "resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.10.4.tgz",
+ "integrity": "sha512-aSy7p5THgSYm4YyxNGz6jZpXf+Ok40QF3aA2LyIONkDHpAcJzDUqlCKXv6peqYUs2gmic849C/t2HKw2a2K20Q==",
"dev": true,
"requires": {
- "@babel/code-frame": "^7.8.3",
- "@babel/generator": "^7.8.4",
- "@babel/helper-function-name": "^7.8.3",
- "@babel/helper-split-export-declaration": "^7.8.3",
- "@babel/parser": "^7.8.4",
- "@babel/types": "^7.8.3",
+ "@babel/code-frame": "^7.10.4",
+ "@babel/generator": "^7.10.4",
+ "@babel/helper-function-name": "^7.10.4",
+ "@babel/helper-split-export-declaration": "^7.10.4",
+ "@babel/parser": "^7.10.4",
+ "@babel/types": "^7.10.4",
"debug": "^4.1.0",
"globals": "^11.1.0",
"lodash": "^4.17.13"
}
+ },
+ "@babel/types": {
+ "version": "7.10.4",
+ "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.10.4.tgz",
+ "integrity": "sha512-UTCFOxC3FsFHb7lkRMVvgLzaRVamXuAs2Tz4wajva4WxtVY82eZeaUBtC2Zt95FU9TiznuC0Zk35tsim8jeVpg==",
+ "dev": true,
+ "requires": {
+ "@babel/helper-validator-identifier": "^7.10.4",
+ "lodash": "^4.17.13",
+ "to-fast-properties": "^2.0.0"
+ }
}
}
},
"@babel/helper-replace-supers": {
- "version": "7.8.3",
- "resolved": "https://registry.npmjs.org/@babel/helper-replace-supers/-/helper-replace-supers-7.8.3.tgz",
- "integrity": "sha512-xOUssL6ho41U81etpLoT2RTdvdus4VfHamCuAm4AHxGr+0it5fnwoVdwUJ7GFEqCsQYzJUhcbsN9wB9apcYKFA==",
+ "version": "7.10.4",
+ "resolved": "https://registry.npmjs.org/@babel/helper-replace-supers/-/helper-replace-supers-7.10.4.tgz",
+ "integrity": "sha512-sPxZfFXocEymYTdVK1UNmFPBN+Hv5mJkLPsYWwGBxZAxaWfFu+xqp7b6qWD0yjNuNL2VKc6L5M18tOXUP7NU0A==",
"dev": true,
"requires": {
- "@babel/helper-member-expression-to-functions": "^7.8.3",
- "@babel/helper-optimise-call-expression": "^7.8.3",
- "@babel/traverse": "^7.8.3",
- "@babel/types": "^7.8.3"
+ "@babel/helper-member-expression-to-functions": "^7.10.4",
+ "@babel/helper-optimise-call-expression": "^7.10.4",
+ "@babel/traverse": "^7.10.4",
+ "@babel/types": "^7.10.4"
},
"dependencies": {
"@babel/generator": {
- "version": "7.8.4",
- "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.8.4.tgz",
- "integrity": "sha512-PwhclGdRpNAf3IxZb0YVuITPZmmrXz9zf6fH8lT4XbrmfQKr6ryBzhv593P5C6poJRciFCL/eHGW2NuGrgEyxA==",
+ "version": "7.10.4",
+ "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.10.4.tgz",
+ "integrity": "sha512-toLIHUIAgcQygFZRAQcsLQV3CBuX6yOIru1kJk/qqqvcRmZrYe6WavZTSG+bB8MxhnL9YPf+pKQfuiP161q7ng==",
"dev": true,
"requires": {
- "@babel/types": "^7.8.3",
+ "@babel/types": "^7.10.4",
"jsesc": "^2.5.1",
"lodash": "^4.17.13",
"source-map": "^0.5.0"
}
},
"@babel/helper-split-export-declaration": {
- "version": "7.8.3",
- "resolved": "https://registry.npmjs.org/@babel/helper-split-export-declaration/-/helper-split-export-declaration-7.8.3.tgz",
- "integrity": "sha512-3x3yOeyBhW851hroze7ElzdkeRXQYQbFIb7gLK1WQYsw2GWDay5gAJNw1sWJ0VFP6z5J1whqeXH/WCdCjZv6dA==",
+ "version": "7.10.4",
+ "resolved": "https://registry.npmjs.org/@babel/helper-split-export-declaration/-/helper-split-export-declaration-7.10.4.tgz",
+ "integrity": "sha512-pySBTeoUff56fL5CBU2hWm9TesA4r/rOkI9DyJLvvgz09MB9YtfIYe3iBriVaYNaPe+Alua0vBIOVOLs2buWhg==",
"dev": true,
"requires": {
- "@babel/types": "^7.8.3"
+ "@babel/types": "^7.10.4"
}
},
+ "@babel/parser": {
+ "version": "7.10.4",
+ "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.10.4.tgz",
+ "integrity": "sha512-8jHII4hf+YVDsskTF6WuMB3X4Eh+PsUkC2ljq22so5rHvH+T8BzyL94VOdyFLNR8tBSVXOTbNHOKpR4TfRxVtA==",
+ "dev": true
+ },
"@babel/traverse": {
- "version": "7.8.4",
- "resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.8.4.tgz",
- "integrity": "sha512-NGLJPZwnVEyBPLI+bl9y9aSnxMhsKz42so7ApAv9D+b4vAFPpY013FTS9LdKxcABoIYFU52HcYga1pPlx454mg==",
+ "version": "7.10.4",
+ "resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.10.4.tgz",
+ "integrity": "sha512-aSy7p5THgSYm4YyxNGz6jZpXf+Ok40QF3aA2LyIONkDHpAcJzDUqlCKXv6peqYUs2gmic849C/t2HKw2a2K20Q==",
"dev": true,
"requires": {
- "@babel/code-frame": "^7.8.3",
- "@babel/generator": "^7.8.4",
- "@babel/helper-function-name": "^7.8.3",
- "@babel/helper-split-export-declaration": "^7.8.3",
- "@babel/parser": "^7.8.4",
- "@babel/types": "^7.8.3",
+ "@babel/code-frame": "^7.10.4",
+ "@babel/generator": "^7.10.4",
+ "@babel/helper-function-name": "^7.10.4",
+ "@babel/helper-split-export-declaration": "^7.10.4",
+ "@babel/parser": "^7.10.4",
+ "@babel/types": "^7.10.4",
"debug": "^4.1.0",
"globals": "^11.1.0",
"lodash": "^4.17.13"
}
+ },
+ "@babel/types": {
+ "version": "7.10.4",
+ "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.10.4.tgz",
+ "integrity": "sha512-UTCFOxC3FsFHb7lkRMVvgLzaRVamXuAs2Tz4wajva4WxtVY82eZeaUBtC2Zt95FU9TiznuC0Zk35tsim8jeVpg==",
+ "dev": true,
+ "requires": {
+ "@babel/helper-validator-identifier": "^7.10.4",
+ "lodash": "^4.17.13",
+ "to-fast-properties": "^2.0.0"
+ }
}
}
},
"@babel/helper-simple-access": {
- "version": "7.8.3",
- "resolved": "https://registry.npmjs.org/@babel/helper-simple-access/-/helper-simple-access-7.8.3.tgz",
- "integrity": "sha512-VNGUDjx5cCWg4vvCTR8qQ7YJYZ+HBjxOgXEl7ounz+4Sn7+LMD3CFrCTEU6/qXKbA2nKg21CwhhBzO0RpRbdCw==",
+ "version": "7.10.4",
+ "resolved": "https://registry.npmjs.org/@babel/helper-simple-access/-/helper-simple-access-7.10.4.tgz",
+ "integrity": "sha512-0fMy72ej/VEvF8ULmX6yb5MtHG4uH4Dbd6I/aHDb/JVg0bbivwt9Wg+h3uMvX+QSFtwr5MeItvazbrc4jtRAXw==",
"dev": true,
"requires": {
- "@babel/template": "^7.8.3",
- "@babel/types": "^7.8.3"
+ "@babel/template": "^7.10.4",
+ "@babel/types": "^7.10.4"
+ },
+ "dependencies": {
+ "@babel/parser": {
+ "version": "7.10.4",
+ "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.10.4.tgz",
+ "integrity": "sha512-8jHII4hf+YVDsskTF6WuMB3X4Eh+PsUkC2ljq22so5rHvH+T8BzyL94VOdyFLNR8tBSVXOTbNHOKpR4TfRxVtA==",
+ "dev": true
+ },
+ "@babel/template": {
+ "version": "7.10.4",
+ "resolved": "https://registry.npmjs.org/@babel/template/-/template-7.10.4.tgz",
+ "integrity": "sha512-ZCjD27cGJFUB6nmCB1Enki3r+L5kJveX9pq1SvAUKoICy6CZ9yD8xO086YXdYhvNjBdnekm4ZnaP5yC8Cs/1tA==",
+ "dev": true,
+ "requires": {
+ "@babel/code-frame": "^7.10.4",
+ "@babel/parser": "^7.10.4",
+ "@babel/types": "^7.10.4"
+ }
+ },
+ "@babel/types": {
+ "version": "7.10.4",
+ "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.10.4.tgz",
+ "integrity": "sha512-UTCFOxC3FsFHb7lkRMVvgLzaRVamXuAs2Tz4wajva4WxtVY82eZeaUBtC2Zt95FU9TiznuC0Zk35tsim8jeVpg==",
+ "dev": true,
+ "requires": {
+ "@babel/helper-validator-identifier": "^7.10.4",
+ "lodash": "^4.17.13",
+ "to-fast-properties": "^2.0.0"
+ }
+ }
}
},
"@babel/helper-split-export-declaration": {
- "version": "7.7.4",
- "resolved": "https://registry.npmjs.org/@babel/helper-split-export-declaration/-/helper-split-export-declaration-7.7.4.tgz",
- "integrity": "sha512-guAg1SXFcVr04Guk9eq0S4/rWS++sbmyqosJzVs8+1fH5NI+ZcmkaSkc7dmtAFbHFva6yRJnjW3yAcGxjueDug==",
+ "version": "7.10.4",
+ "resolved": "https://registry.npmjs.org/@babel/helper-split-export-declaration/-/helper-split-export-declaration-7.10.4.tgz",
+ "integrity": "sha512-pySBTeoUff56fL5CBU2hWm9TesA4r/rOkI9DyJLvvgz09MB9YtfIYe3iBriVaYNaPe+Alua0vBIOVOLs2buWhg==",
"dev": true,
"requires": {
- "@babel/types": "^7.7.4"
+ "@babel/types": "^7.10.4"
},
"dependencies": {
"@babel/types": {
- "version": "7.7.4",
- "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.7.4.tgz",
- "integrity": "sha512-cz5Ji23KCi4T+YIE/BolWosrJuSmoZeN1EFnRtBwF+KKLi8GG/Z2c2hOJJeCXPk4mwk4QFvTmwIodJowXgttRA==",
+ "version": "7.10.5",
+ "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.10.5.tgz",
+ "integrity": "sha512-ixV66KWfCI6GKoA/2H9v6bQdbfXEwwpOdQ8cRvb4F+eyvhlaHxWFMQB4+3d9QFJXZsiiiqVrewNV0DFEQpyT4Q==",
"dev": true,
"requires": {
- "esutils": "^2.0.2",
- "lodash": "^4.17.13",
+ "@babel/helper-validator-identifier": "^7.10.4",
+ "lodash": "^4.17.19",
"to-fast-properties": "^2.0.0"
}
}
}
},
+ "@babel/helper-validator-identifier": {
+ "version": "7.10.4",
+ "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.10.4.tgz",
+ "integrity": "sha512-3U9y+43hz7ZM+rzG24Qe2mufW5KhvFg/NhnNph+i9mgCtdTCtMJuI1TMkrIUiK7Ix4PYlRF9I5dhqaLYA/ADXw==",
+ "dev": true
+ },
"@babel/helper-wrap-function": {
- "version": "7.8.3",
- "resolved": "https://registry.npmjs.org/@babel/helper-wrap-function/-/helper-wrap-function-7.8.3.tgz",
- "integrity": "sha512-LACJrbUET9cQDzb6kG7EeD7+7doC3JNvUgTEQOx2qaO1fKlzE/Bf05qs9w1oXQMmXlPO65lC3Tq9S6gZpTErEQ==",
+ "version": "7.10.4",
+ "resolved": "https://registry.npmjs.org/@babel/helper-wrap-function/-/helper-wrap-function-7.10.4.tgz",
+ "integrity": "sha512-6py45WvEF0MhiLrdxtRjKjufwLL1/ob2qDJgg5JgNdojBAZSAKnAjkyOCNug6n+OBl4VW76XjvgSFTdaMcW0Ug==",
"dev": true,
"requires": {
- "@babel/helper-function-name": "^7.8.3",
- "@babel/template": "^7.8.3",
- "@babel/traverse": "^7.8.3",
- "@babel/types": "^7.8.3"
+ "@babel/helper-function-name": "^7.10.4",
+ "@babel/template": "^7.10.4",
+ "@babel/traverse": "^7.10.4",
+ "@babel/types": "^7.10.4"
},
"dependencies": {
"@babel/generator": {
- "version": "7.8.4",
- "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.8.4.tgz",
- "integrity": "sha512-PwhclGdRpNAf3IxZb0YVuITPZmmrXz9zf6fH8lT4XbrmfQKr6ryBzhv593P5C6poJRciFCL/eHGW2NuGrgEyxA==",
+ "version": "7.10.4",
+ "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.10.4.tgz",
+ "integrity": "sha512-toLIHUIAgcQygFZRAQcsLQV3CBuX6yOIru1kJk/qqqvcRmZrYe6WavZTSG+bB8MxhnL9YPf+pKQfuiP161q7ng==",
"dev": true,
"requires": {
- "@babel/types": "^7.8.3",
+ "@babel/types": "^7.10.4",
"jsesc": "^2.5.1",
"lodash": "^4.17.13",
"source-map": "^0.5.0"
}
},
"@babel/helper-split-export-declaration": {
- "version": "7.8.3",
- "resolved": "https://registry.npmjs.org/@babel/helper-split-export-declaration/-/helper-split-export-declaration-7.8.3.tgz",
- "integrity": "sha512-3x3yOeyBhW851hroze7ElzdkeRXQYQbFIb7gLK1WQYsw2GWDay5gAJNw1sWJ0VFP6z5J1whqeXH/WCdCjZv6dA==",
+ "version": "7.10.4",
+ "resolved": "https://registry.npmjs.org/@babel/helper-split-export-declaration/-/helper-split-export-declaration-7.10.4.tgz",
+ "integrity": "sha512-pySBTeoUff56fL5CBU2hWm9TesA4r/rOkI9DyJLvvgz09MB9YtfIYe3iBriVaYNaPe+Alua0vBIOVOLs2buWhg==",
+ "dev": true,
+ "requires": {
+ "@babel/types": "^7.10.4"
+ }
+ },
+ "@babel/parser": {
+ "version": "7.10.4",
+ "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.10.4.tgz",
+ "integrity": "sha512-8jHII4hf+YVDsskTF6WuMB3X4Eh+PsUkC2ljq22so5rHvH+T8BzyL94VOdyFLNR8tBSVXOTbNHOKpR4TfRxVtA==",
+ "dev": true
+ },
+ "@babel/template": {
+ "version": "7.10.4",
+ "resolved": "https://registry.npmjs.org/@babel/template/-/template-7.10.4.tgz",
+ "integrity": "sha512-ZCjD27cGJFUB6nmCB1Enki3r+L5kJveX9pq1SvAUKoICy6CZ9yD8xO086YXdYhvNjBdnekm4ZnaP5yC8Cs/1tA==",
"dev": true,
"requires": {
- "@babel/types": "^7.8.3"
+ "@babel/code-frame": "^7.10.4",
+ "@babel/parser": "^7.10.4",
+ "@babel/types": "^7.10.4"
}
},
"@babel/traverse": {
- "version": "7.8.4",
- "resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.8.4.tgz",
- "integrity": "sha512-NGLJPZwnVEyBPLI+bl9y9aSnxMhsKz42so7ApAv9D+b4vAFPpY013FTS9LdKxcABoIYFU52HcYga1pPlx454mg==",
+ "version": "7.10.4",
+ "resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.10.4.tgz",
+ "integrity": "sha512-aSy7p5THgSYm4YyxNGz6jZpXf+Ok40QF3aA2LyIONkDHpAcJzDUqlCKXv6peqYUs2gmic849C/t2HKw2a2K20Q==",
"dev": true,
"requires": {
- "@babel/code-frame": "^7.8.3",
- "@babel/generator": "^7.8.4",
- "@babel/helper-function-name": "^7.8.3",
- "@babel/helper-split-export-declaration": "^7.8.3",
- "@babel/parser": "^7.8.4",
- "@babel/types": "^7.8.3",
+ "@babel/code-frame": "^7.10.4",
+ "@babel/generator": "^7.10.4",
+ "@babel/helper-function-name": "^7.10.4",
+ "@babel/helper-split-export-declaration": "^7.10.4",
+ "@babel/parser": "^7.10.4",
+ "@babel/types": "^7.10.4",
"debug": "^4.1.0",
"globals": "^11.1.0",
"lodash": "^4.17.13"
}
+ },
+ "@babel/types": {
+ "version": "7.10.4",
+ "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.10.4.tgz",
+ "integrity": "sha512-UTCFOxC3FsFHb7lkRMVvgLzaRVamXuAs2Tz4wajva4WxtVY82eZeaUBtC2Zt95FU9TiznuC0Zk35tsim8jeVpg==",
+ "dev": true,
+ "requires": {
+ "@babel/helper-validator-identifier": "^7.10.4",
+ "lodash": "^4.17.13",
+ "to-fast-properties": "^2.0.0"
+ }
}
}
},
"@babel/helpers": {
- "version": "7.8.4",
- "resolved": "https://registry.npmjs.org/@babel/helpers/-/helpers-7.8.4.tgz",
- "integrity": "sha512-VPbe7wcQ4chu4TDQjimHv/5tj73qz88o12EPkO2ValS2QiQS/1F2SsjyIGNnAD0vF/nZS6Cf9i+vW6HIlnaR8w==",
+ "version": "7.10.4",
+ "resolved": "https://registry.npmjs.org/@babel/helpers/-/helpers-7.10.4.tgz",
+ "integrity": "sha512-L2gX/XeUONeEbI78dXSrJzGdz4GQ+ZTA/aazfUsFaWjSe95kiCuOZ5HsXvkiw3iwF+mFHSRUfJU8t6YavocdXA==",
"dev": true,
"requires": {
- "@babel/template": "^7.8.3",
- "@babel/traverse": "^7.8.4",
- "@babel/types": "^7.8.3"
+ "@babel/template": "^7.10.4",
+ "@babel/traverse": "^7.10.4",
+ "@babel/types": "^7.10.4"
},
"dependencies": {
- "@babel/generator": {
- "version": "7.8.4",
- "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.8.4.tgz",
- "integrity": "sha512-PwhclGdRpNAf3IxZb0YVuITPZmmrXz9zf6fH8lT4XbrmfQKr6ryBzhv593P5C6poJRciFCL/eHGW2NuGrgEyxA==",
+ "@babel/types": {
+ "version": "7.10.5",
+ "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.10.5.tgz",
+ "integrity": "sha512-ixV66KWfCI6GKoA/2H9v6bQdbfXEwwpOdQ8cRvb4F+eyvhlaHxWFMQB4+3d9QFJXZsiiiqVrewNV0DFEQpyT4Q==",
"dev": true,
"requires": {
- "@babel/types": "^7.8.3",
- "jsesc": "^2.5.1",
- "lodash": "^4.17.13",
- "source-map": "^0.5.0"
- }
- },
- "@babel/helper-split-export-declaration": {
- "version": "7.8.3",
- "resolved": "https://registry.npmjs.org/@babel/helper-split-export-declaration/-/helper-split-export-declaration-7.8.3.tgz",
- "integrity": "sha512-3x3yOeyBhW851hroze7ElzdkeRXQYQbFIb7gLK1WQYsw2GWDay5gAJNw1sWJ0VFP6z5J1whqeXH/WCdCjZv6dA==",
- "dev": true,
- "requires": {
- "@babel/types": "^7.8.3"
- }
- },
- "@babel/traverse": {
- "version": "7.8.4",
- "resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.8.4.tgz",
- "integrity": "sha512-NGLJPZwnVEyBPLI+bl9y9aSnxMhsKz42so7ApAv9D+b4vAFPpY013FTS9LdKxcABoIYFU52HcYga1pPlx454mg==",
- "dev": true,
- "requires": {
- "@babel/code-frame": "^7.8.3",
- "@babel/generator": "^7.8.4",
- "@babel/helper-function-name": "^7.8.3",
- "@babel/helper-split-export-declaration": "^7.8.3",
- "@babel/parser": "^7.8.4",
- "@babel/types": "^7.8.3",
- "debug": "^4.1.0",
- "globals": "^11.1.0",
- "lodash": "^4.17.13"
+ "@babel/helper-validator-identifier": "^7.10.4",
+ "lodash": "^4.17.19",
+ "to-fast-properties": "^2.0.0"
}
}
}
},
- "@babel/highlight": {
- "version": "7.0.0",
- "resolved": "https://registry.npmjs.org/@babel/highlight/-/highlight-7.0.0.tgz",
- "integrity": "sha512-UFMC4ZeFC48Tpvj7C8UgLvtkaUuovQX+5xNWrsIoMG8o2z+XFKjKaN9iVmS84dPwVN00W4wPmqvYoZF3EGAsfw==",
- "dev": true,
- "requires": {
- "chalk": "^2.0.0",
- "esutils": "^2.0.2",
- "js-tokens": "^4.0.0"
- }
- },
"@babel/parser": {
- "version": "7.8.4",
- "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.8.4.tgz",
- "integrity": "sha512-0fKu/QqildpXmPVaRBoXOlyBb3MC+J0A66x97qEfLOMkn3u6nfY5esWogQwi/K0BjASYy4DbnsEWnpNL6qT5Mw==",
+ "version": "7.10.5",
+ "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.10.5.tgz",
+ "integrity": "sha512-wfryxy4bE1UivvQKSQDU4/X6dr+i8bctjUjj8Zyt3DQy7NtPizJXT8M52nqpNKL+nq2PW8lxk4ZqLj0fD4B4hQ==",
"dev": true
},
"@babel/plugin-proposal-async-generator-functions": {
- "version": "7.8.3",
- "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-async-generator-functions/-/plugin-proposal-async-generator-functions-7.8.3.tgz",
- "integrity": "sha512-NZ9zLv848JsV3hs8ryEh7Uaz/0KsmPLqv0+PdkDJL1cJy0K4kOCFa8zc1E3mp+RHPQcpdfb/6GovEsW4VDrOMw==",
+ "version": "7.10.4",
+ "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-async-generator-functions/-/plugin-proposal-async-generator-functions-7.10.4.tgz",
+ "integrity": "sha512-MJbxGSmejEFVOANAezdO39SObkURO5o/8b6fSH6D1pi9RZQt+ldppKPXfqgUWpSQ9asM6xaSaSJIaeWMDRP0Zg==",
"dev": true,
"requires": {
- "@babel/helper-plugin-utils": "^7.8.3",
- "@babel/helper-remap-async-to-generator": "^7.8.3",
+ "@babel/helper-plugin-utils": "^7.10.4",
+ "@babel/helper-remap-async-to-generator": "^7.10.4",
"@babel/plugin-syntax-async-generators": "^7.8.0"
}
},
+ "@babel/plugin-proposal-class-properties": {
+ "version": "7.10.4",
+ "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-class-properties/-/plugin-proposal-class-properties-7.10.4.tgz",
+ "integrity": "sha512-vhwkEROxzcHGNu2mzUC0OFFNXdZ4M23ib8aRRcJSsW8BZK9pQMD7QB7csl97NBbgGZO7ZyHUyKDnxzOaP4IrCg==",
+ "dev": true,
+ "requires": {
+ "@babel/helper-create-class-features-plugin": "^7.10.4",
+ "@babel/helper-plugin-utils": "^7.10.4"
+ }
+ },
"@babel/plugin-proposal-dynamic-import": {
- "version": "7.8.3",
- "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-dynamic-import/-/plugin-proposal-dynamic-import-7.8.3.tgz",
- "integrity": "sha512-NyaBbyLFXFLT9FP+zk0kYlUlA8XtCUbehs67F0nnEg7KICgMc2mNkIeu9TYhKzyXMkrapZFwAhXLdnt4IYHy1w==",
+ "version": "7.10.4",
+ "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-dynamic-import/-/plugin-proposal-dynamic-import-7.10.4.tgz",
+ "integrity": "sha512-up6oID1LeidOOASNXgv/CFbgBqTuKJ0cJjz6An5tWD+NVBNlp3VNSBxv2ZdU7SYl3NxJC7agAQDApZusV6uFwQ==",
"dev": true,
"requires": {
- "@babel/helper-plugin-utils": "^7.8.3",
+ "@babel/helper-plugin-utils": "^7.10.4",
"@babel/plugin-syntax-dynamic-import": "^7.8.0"
}
},
"@babel/plugin-proposal-json-strings": {
- "version": "7.8.3",
- "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-json-strings/-/plugin-proposal-json-strings-7.8.3.tgz",
- "integrity": "sha512-KGhQNZ3TVCQG/MjRbAUwuH+14y9q0tpxs1nWWs3pbSleRdDro9SAMMDyye8HhY1gqZ7/NqIc8SKhya0wRDgP1Q==",
+ "version": "7.10.4",
+ "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-json-strings/-/plugin-proposal-json-strings-7.10.4.tgz",
+ "integrity": "sha512-fCL7QF0Jo83uy1K0P2YXrfX11tj3lkpN7l4dMv9Y9VkowkhkQDwFHFd8IiwyK5MZjE8UpbgokkgtcReH88Abaw==",
"dev": true,
"requires": {
- "@babel/helper-plugin-utils": "^7.8.3",
+ "@babel/helper-plugin-utils": "^7.10.4",
"@babel/plugin-syntax-json-strings": "^7.8.0"
}
},
"@babel/plugin-proposal-nullish-coalescing-operator": {
- "version": "7.8.3",
- "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-nullish-coalescing-operator/-/plugin-proposal-nullish-coalescing-operator-7.8.3.tgz",
- "integrity": "sha512-TS9MlfzXpXKt6YYomudb/KU7nQI6/xnapG6in1uZxoxDghuSMZsPb6D2fyUwNYSAp4l1iR7QtFOjkqcRYcUsfw==",
+ "version": "7.10.4",
+ "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-nullish-coalescing-operator/-/plugin-proposal-nullish-coalescing-operator-7.10.4.tgz",
+ "integrity": "sha512-wq5n1M3ZUlHl9sqT2ok1T2/MTt6AXE0e1Lz4WzWBr95LsAZ5qDXe4KnFuauYyEyLiohvXFMdbsOTMyLZs91Zlw==",
"dev": true,
"requires": {
- "@babel/helper-plugin-utils": "^7.8.3",
+ "@babel/helper-plugin-utils": "^7.10.4",
"@babel/plugin-syntax-nullish-coalescing-operator": "^7.8.0"
}
},
+ "@babel/plugin-proposal-numeric-separator": {
+ "version": "7.10.4",
+ "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-numeric-separator/-/plugin-proposal-numeric-separator-7.10.4.tgz",
+ "integrity": "sha512-73/G7QoRoeNkLZFxsoCCvlg4ezE4eM+57PnOqgaPOozd5myfj7p0muD1mRVJvbUWbOzD+q3No2bWbaKy+DJ8DA==",
+ "dev": true,
+ "requires": {
+ "@babel/helper-plugin-utils": "^7.10.4",
+ "@babel/plugin-syntax-numeric-separator": "^7.10.4"
+ }
+ },
"@babel/plugin-proposal-object-rest-spread": {
- "version": "7.8.3",
- "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-object-rest-spread/-/plugin-proposal-object-rest-spread-7.8.3.tgz",
- "integrity": "sha512-8qvuPwU/xxUCt78HocNlv0mXXo0wdh9VT1R04WU8HGOfaOob26pF+9P5/lYjN/q7DHOX1bvX60hnhOvuQUJdbA==",
+ "version": "7.10.4",
+ "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-object-rest-spread/-/plugin-proposal-object-rest-spread-7.10.4.tgz",
+ "integrity": "sha512-6vh4SqRuLLarjgeOf4EaROJAHjvu9Gl+/346PbDH9yWbJyfnJ/ah3jmYKYtswEyCoWZiidvVHjHshd4WgjB9BA==",
"dev": true,
"requires": {
- "@babel/helper-plugin-utils": "^7.8.3",
- "@babel/plugin-syntax-object-rest-spread": "^7.8.0"
+ "@babel/helper-plugin-utils": "^7.10.4",
+ "@babel/plugin-syntax-object-rest-spread": "^7.8.0",
+ "@babel/plugin-transform-parameters": "^7.10.4"
}
},
"@babel/plugin-proposal-optional-catch-binding": {
- "version": "7.8.3",
- "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-optional-catch-binding/-/plugin-proposal-optional-catch-binding-7.8.3.tgz",
- "integrity": "sha512-0gkX7J7E+AtAw9fcwlVQj8peP61qhdg/89D5swOkjYbkboA2CVckn3kiyum1DE0wskGb7KJJxBdyEBApDLLVdw==",
+ "version": "7.10.4",
+ "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-optional-catch-binding/-/plugin-proposal-optional-catch-binding-7.10.4.tgz",
+ "integrity": "sha512-LflT6nPh+GK2MnFiKDyLiqSqVHkQnVf7hdoAvyTnnKj9xB3docGRsdPuxp6qqqW19ifK3xgc9U5/FwrSaCNX5g==",
"dev": true,
"requires": {
- "@babel/helper-plugin-utils": "^7.8.3",
+ "@babel/helper-plugin-utils": "^7.10.4",
"@babel/plugin-syntax-optional-catch-binding": "^7.8.0"
}
},
"@babel/plugin-proposal-optional-chaining": {
- "version": "7.8.3",
- "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-optional-chaining/-/plugin-proposal-optional-chaining-7.8.3.tgz",
- "integrity": "sha512-QIoIR9abkVn+seDE3OjA08jWcs3eZ9+wJCKSRgo3WdEU2csFYgdScb+8qHB3+WXsGJD55u+5hWCISI7ejXS+kg==",
+ "version": "7.10.4",
+ "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-optional-chaining/-/plugin-proposal-optional-chaining-7.10.4.tgz",
+ "integrity": "sha512-ZIhQIEeavTgouyMSdZRap4VPPHqJJ3NEs2cuHs5p0erH+iz6khB0qfgU8g7UuJkG88+fBMy23ZiU+nuHvekJeQ==",
"dev": true,
"requires": {
- "@babel/helper-plugin-utils": "^7.8.3",
+ "@babel/helper-plugin-utils": "^7.10.4",
"@babel/plugin-syntax-optional-chaining": "^7.8.0"
}
},
+ "@babel/plugin-proposal-private-methods": {
+ "version": "7.10.4",
+ "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-private-methods/-/plugin-proposal-private-methods-7.10.4.tgz",
+ "integrity": "sha512-wh5GJleuI8k3emgTg5KkJK6kHNsGEr0uBTDBuQUBJwckk9xs1ez79ioheEVVxMLyPscB0LfkbVHslQqIzWV6Bw==",
+ "dev": true,
+ "requires": {
+ "@babel/helper-create-class-features-plugin": "^7.10.4",
+ "@babel/helper-plugin-utils": "^7.10.4"
+ }
+ },
"@babel/plugin-proposal-unicode-property-regex": {
- "version": "7.8.3",
- "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-unicode-property-regex/-/plugin-proposal-unicode-property-regex-7.8.3.tgz",
- "integrity": "sha512-1/1/rEZv2XGweRwwSkLpY+s60za9OZ1hJs4YDqFHCw0kYWYwL5IFljVY1MYBL+weT1l9pokDO2uhSTLVxzoHkQ==",
+ "version": "7.10.4",
+ "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-unicode-property-regex/-/plugin-proposal-unicode-property-regex-7.10.4.tgz",
+ "integrity": "sha512-H+3fOgPnEXFL9zGYtKQe4IDOPKYlZdF1kqFDQRRb8PK4B8af1vAGK04tF5iQAAsui+mHNBQSAtd2/ndEDe9wuA==",
"dev": true,
"requires": {
- "@babel/helper-create-regexp-features-plugin": "^7.8.3",
- "@babel/helper-plugin-utils": "^7.8.3"
+ "@babel/helper-create-regexp-features-plugin": "^7.10.4",
+ "@babel/helper-plugin-utils": "^7.10.4"
}
},
"@babel/plugin-syntax-async-generators": {
"@babel/helper-plugin-utils": "^7.8.0"
}
},
+ "@babel/plugin-syntax-class-properties": {
+ "version": "7.10.4",
+ "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-class-properties/-/plugin-syntax-class-properties-7.10.4.tgz",
+ "integrity": "sha512-GCSBF7iUle6rNugfURwNmCGG3Z/2+opxAMLs1nND4bhEG5PuxTIggDBoeYYSujAlLtsupzOHYJQgPS3pivwXIA==",
+ "dev": true,
+ "requires": {
+ "@babel/helper-plugin-utils": "^7.10.4"
+ }
+ },
"@babel/plugin-syntax-dynamic-import": {
"version": "7.8.3",
"resolved": "https://registry.npmjs.org/@babel/plugin-syntax-dynamic-import/-/plugin-syntax-dynamic-import-7.8.3.tgz",
"@babel/helper-plugin-utils": "^7.8.0"
}
},
+ "@babel/plugin-syntax-numeric-separator": {
+ "version": "7.10.4",
+ "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-numeric-separator/-/plugin-syntax-numeric-separator-7.10.4.tgz",
+ "integrity": "sha512-9H6YdfkcK/uOnY/K7/aA2xpzaAgkQn37yzWUMRK7OaPOqOpGS1+n0H5hxT9AUw9EsSjPW8SVyMJwYRtWs3X3ug==",
+ "dev": true,
+ "requires": {
+ "@babel/helper-plugin-utils": "^7.10.4"
+ }
+ },
"@babel/plugin-syntax-object-rest-spread": {
"version": "7.8.3",
"resolved": "https://registry.npmjs.org/@babel/plugin-syntax-object-rest-spread/-/plugin-syntax-object-rest-spread-7.8.3.tgz",
}
},
"@babel/plugin-syntax-top-level-await": {
- "version": "7.8.3",
- "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-top-level-await/-/plugin-syntax-top-level-await-7.8.3.tgz",
- "integrity": "sha512-kwj1j9lL/6Wd0hROD3b/OZZ7MSrZLqqn9RAZ5+cYYsflQ9HZBIKCUkr3+uL1MEJ1NePiUbf98jjiMQSv0NMR9g==",
+ "version": "7.10.4",
+ "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-top-level-await/-/plugin-syntax-top-level-await-7.10.4.tgz",
+ "integrity": "sha512-ni1brg4lXEmWyafKr0ccFWkJG0CeMt4WV1oyeBW6EFObF4oOHclbkj5cARxAPQyAQ2UTuplJyK4nfkXIMMFvsQ==",
"dev": true,
"requires": {
- "@babel/helper-plugin-utils": "^7.8.3"
+ "@babel/helper-plugin-utils": "^7.10.4"
}
},
"@babel/plugin-transform-arrow-functions": {
- "version": "7.8.3",
- "resolved": "https://registry.npmjs.org/@babel/plugin-transform-arrow-functions/-/plugin-transform-arrow-functions-7.8.3.tgz",
- "integrity": "sha512-0MRF+KC8EqH4dbuITCWwPSzsyO3HIWWlm30v8BbbpOrS1B++isGxPnnuq/IZvOX5J2D/p7DQalQm+/2PnlKGxg==",
+ "version": "7.10.4",
+ "resolved": "https://registry.npmjs.org/@babel/plugin-transform-arrow-functions/-/plugin-transform-arrow-functions-7.10.4.tgz",
+ "integrity": "sha512-9J/oD1jV0ZCBcgnoFWFq1vJd4msoKb/TCpGNFyyLt0zABdcvgK3aYikZ8HjzB14c26bc7E3Q1yugpwGy2aTPNA==",
"dev": true,
"requires": {
- "@babel/helper-plugin-utils": "^7.8.3"
+ "@babel/helper-plugin-utils": "^7.10.4"
}
},
"@babel/plugin-transform-async-to-generator": {
- "version": "7.8.3",
- "resolved": "https://registry.npmjs.org/@babel/plugin-transform-async-to-generator/-/plugin-transform-async-to-generator-7.8.3.tgz",
- "integrity": "sha512-imt9tFLD9ogt56Dd5CI/6XgpukMwd/fLGSrix2httihVe7LOGVPhyhMh1BU5kDM7iHD08i8uUtmV2sWaBFlHVQ==",
+ "version": "7.10.4",
+ "resolved": "https://registry.npmjs.org/@babel/plugin-transform-async-to-generator/-/plugin-transform-async-to-generator-7.10.4.tgz",
+ "integrity": "sha512-F6nREOan7J5UXTLsDsZG3DXmZSVofr2tGNwfdrVwkDWHfQckbQXnXSPfD7iO+c/2HGqycwyLST3DnZ16n+cBJQ==",
"dev": true,
"requires": {
- "@babel/helper-module-imports": "^7.8.3",
- "@babel/helper-plugin-utils": "^7.8.3",
- "@babel/helper-remap-async-to-generator": "^7.8.3"
+ "@babel/helper-module-imports": "^7.10.4",
+ "@babel/helper-plugin-utils": "^7.10.4",
+ "@babel/helper-remap-async-to-generator": "^7.10.4"
}
},
"@babel/plugin-transform-block-scoped-functions": {
- "version": "7.8.3",
- "resolved": "https://registry.npmjs.org/@babel/plugin-transform-block-scoped-functions/-/plugin-transform-block-scoped-functions-7.8.3.tgz",
- "integrity": "sha512-vo4F2OewqjbB1+yaJ7k2EJFHlTP3jR634Z9Cj9itpqNjuLXvhlVxgnjsHsdRgASR8xYDrx6onw4vW5H6We0Jmg==",
+ "version": "7.10.4",
+ "resolved": "https://registry.npmjs.org/@babel/plugin-transform-block-scoped-functions/-/plugin-transform-block-scoped-functions-7.10.4.tgz",
+ "integrity": "sha512-WzXDarQXYYfjaV1szJvN3AD7rZgZzC1JtjJZ8dMHUyiK8mxPRahynp14zzNjU3VkPqPsO38CzxiWO1c9ARZ8JA==",
"dev": true,
"requires": {
- "@babel/helper-plugin-utils": "^7.8.3"
+ "@babel/helper-plugin-utils": "^7.10.4"
}
},
"@babel/plugin-transform-block-scoping": {
- "version": "7.8.3",
- "resolved": "https://registry.npmjs.org/@babel/plugin-transform-block-scoping/-/plugin-transform-block-scoping-7.8.3.tgz",
- "integrity": "sha512-pGnYfm7RNRgYRi7bids5bHluENHqJhrV4bCZRwc5GamaWIIs07N4rZECcmJL6ZClwjDz1GbdMZFtPs27hTB06w==",
+ "version": "7.10.4",
+ "resolved": "https://registry.npmjs.org/@babel/plugin-transform-block-scoping/-/plugin-transform-block-scoping-7.10.4.tgz",
+ "integrity": "sha512-J3b5CluMg3hPUii2onJDRiaVbPtKFPLEaV5dOPY5OeAbDi1iU/UbbFFTgwb7WnanaDy7bjU35kc26W3eM5Qa0A==",
"dev": true,
"requires": {
- "@babel/helper-plugin-utils": "^7.8.3",
+ "@babel/helper-plugin-utils": "^7.10.4",
"lodash": "^4.17.13"
}
},
"@babel/plugin-transform-classes": {
- "version": "7.8.3",
- "resolved": "https://registry.npmjs.org/@babel/plugin-transform-classes/-/plugin-transform-classes-7.8.3.tgz",
- "integrity": "sha512-SjT0cwFJ+7Rbr1vQsvphAHwUHvSUPmMjMU/0P59G8U2HLFqSa082JO7zkbDNWs9kH/IUqpHI6xWNesGf8haF1w==",
- "dev": true,
- "requires": {
- "@babel/helper-annotate-as-pure": "^7.8.3",
- "@babel/helper-define-map": "^7.8.3",
- "@babel/helper-function-name": "^7.8.3",
- "@babel/helper-optimise-call-expression": "^7.8.3",
- "@babel/helper-plugin-utils": "^7.8.3",
- "@babel/helper-replace-supers": "^7.8.3",
- "@babel/helper-split-export-declaration": "^7.8.3",
+ "version": "7.10.4",
+ "resolved": "https://registry.npmjs.org/@babel/plugin-transform-classes/-/plugin-transform-classes-7.10.4.tgz",
+ "integrity": "sha512-2oZ9qLjt161dn1ZE0Ms66xBncQH4In8Sqw1YWgBUZuGVJJS5c0OFZXL6dP2MRHrkU/eKhWg8CzFJhRQl50rQxA==",
+ "dev": true,
+ "requires": {
+ "@babel/helper-annotate-as-pure": "^7.10.4",
+ "@babel/helper-define-map": "^7.10.4",
+ "@babel/helper-function-name": "^7.10.4",
+ "@babel/helper-optimise-call-expression": "^7.10.4",
+ "@babel/helper-plugin-utils": "^7.10.4",
+ "@babel/helper-replace-supers": "^7.10.4",
+ "@babel/helper-split-export-declaration": "^7.10.4",
"globals": "^11.1.0"
},
"dependencies": {
"@babel/helper-split-export-declaration": {
- "version": "7.8.3",
- "resolved": "https://registry.npmjs.org/@babel/helper-split-export-declaration/-/helper-split-export-declaration-7.8.3.tgz",
- "integrity": "sha512-3x3yOeyBhW851hroze7ElzdkeRXQYQbFIb7gLK1WQYsw2GWDay5gAJNw1sWJ0VFP6z5J1whqeXH/WCdCjZv6dA==",
+ "version": "7.10.4",
+ "resolved": "https://registry.npmjs.org/@babel/helper-split-export-declaration/-/helper-split-export-declaration-7.10.4.tgz",
+ "integrity": "sha512-pySBTeoUff56fL5CBU2hWm9TesA4r/rOkI9DyJLvvgz09MB9YtfIYe3iBriVaYNaPe+Alua0vBIOVOLs2buWhg==",
+ "dev": true,
+ "requires": {
+ "@babel/types": "^7.10.4"
+ }
+ },
+ "@babel/types": {
+ "version": "7.10.4",
+ "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.10.4.tgz",
+ "integrity": "sha512-UTCFOxC3FsFHb7lkRMVvgLzaRVamXuAs2Tz4wajva4WxtVY82eZeaUBtC2Zt95FU9TiznuC0Zk35tsim8jeVpg==",
"dev": true,
"requires": {
- "@babel/types": "^7.8.3"
+ "@babel/helper-validator-identifier": "^7.10.4",
+ "lodash": "^4.17.13",
+ "to-fast-properties": "^2.0.0"
}
}
}
},
"@babel/plugin-transform-computed-properties": {
- "version": "7.8.3",
- "resolved": "https://registry.npmjs.org/@babel/plugin-transform-computed-properties/-/plugin-transform-computed-properties-7.8.3.tgz",
- "integrity": "sha512-O5hiIpSyOGdrQZRQ2ccwtTVkgUDBBiCuK//4RJ6UfePllUTCENOzKxfh6ulckXKc0DixTFLCfb2HVkNA7aDpzA==",
+ "version": "7.10.4",
+ "resolved": "https://registry.npmjs.org/@babel/plugin-transform-computed-properties/-/plugin-transform-computed-properties-7.10.4.tgz",
+ "integrity": "sha512-JFwVDXcP/hM/TbyzGq3l/XWGut7p46Z3QvqFMXTfk6/09m7xZHJUN9xHfsv7vqqD4YnfI5ueYdSJtXqqBLyjBw==",
"dev": true,
"requires": {
- "@babel/helper-plugin-utils": "^7.8.3"
+ "@babel/helper-plugin-utils": "^7.10.4"
}
},
"@babel/plugin-transform-destructuring": {
- "version": "7.8.3",
- "resolved": "https://registry.npmjs.org/@babel/plugin-transform-destructuring/-/plugin-transform-destructuring-7.8.3.tgz",
- "integrity": "sha512-H4X646nCkiEcHZUZaRkhE2XVsoz0J/1x3VVujnn96pSoGCtKPA99ZZA+va+gK+92Zycd6OBKCD8tDb/731bhgQ==",
+ "version": "7.10.4",
+ "resolved": "https://registry.npmjs.org/@babel/plugin-transform-destructuring/-/plugin-transform-destructuring-7.10.4.tgz",
+ "integrity": "sha512-+WmfvyfsyF603iPa6825mq6Qrb7uLjTOsa3XOFzlYcYDHSS4QmpOWOL0NNBY5qMbvrcf3tq0Cw+v4lxswOBpgA==",
"dev": true,
"requires": {
- "@babel/helper-plugin-utils": "^7.8.3"
+ "@babel/helper-plugin-utils": "^7.10.4"
}
},
"@babel/plugin-transform-dotall-regex": {
- "version": "7.8.3",
- "resolved": "https://registry.npmjs.org/@babel/plugin-transform-dotall-regex/-/plugin-transform-dotall-regex-7.8.3.tgz",
- "integrity": "sha512-kLs1j9Nn4MQoBYdRXH6AeaXMbEJFaFu/v1nQkvib6QzTj8MZI5OQzqmD83/2jEM1z0DLilra5aWO5YpyC0ALIw==",
+ "version": "7.10.4",
+ "resolved": "https://registry.npmjs.org/@babel/plugin-transform-dotall-regex/-/plugin-transform-dotall-regex-7.10.4.tgz",
+ "integrity": "sha512-ZEAVvUTCMlMFAbASYSVQoxIbHm2OkG2MseW6bV2JjIygOjdVv8tuxrCTzj1+Rynh7ODb8GivUy7dzEXzEhuPaA==",
"dev": true,
"requires": {
- "@babel/helper-create-regexp-features-plugin": "^7.8.3",
- "@babel/helper-plugin-utils": "^7.8.3"
+ "@babel/helper-create-regexp-features-plugin": "^7.10.4",
+ "@babel/helper-plugin-utils": "^7.10.4"
}
},
"@babel/plugin-transform-duplicate-keys": {
- "version": "7.8.3",
- "resolved": "https://registry.npmjs.org/@babel/plugin-transform-duplicate-keys/-/plugin-transform-duplicate-keys-7.8.3.tgz",
- "integrity": "sha512-s8dHiBUbcbSgipS4SMFuWGqCvyge5V2ZeAWzR6INTVC3Ltjig/Vw1G2Gztv0vU/hRG9X8IvKvYdoksnUfgXOEQ==",
+ "version": "7.10.4",
+ "resolved": "https://registry.npmjs.org/@babel/plugin-transform-duplicate-keys/-/plugin-transform-duplicate-keys-7.10.4.tgz",
+ "integrity": "sha512-GL0/fJnmgMclHiBTTWXNlYjYsA7rDrtsazHG6mglaGSTh0KsrW04qml+Bbz9FL0LcJIRwBWL5ZqlNHKTkU3xAA==",
"dev": true,
"requires": {
- "@babel/helper-plugin-utils": "^7.8.3"
+ "@babel/helper-plugin-utils": "^7.10.4"
}
},
"@babel/plugin-transform-exponentiation-operator": {
- "version": "7.8.3",
- "resolved": "https://registry.npmjs.org/@babel/plugin-transform-exponentiation-operator/-/plugin-transform-exponentiation-operator-7.8.3.tgz",
- "integrity": "sha512-zwIpuIymb3ACcInbksHaNcR12S++0MDLKkiqXHl3AzpgdKlFNhog+z/K0+TGW+b0w5pgTq4H6IwV/WhxbGYSjQ==",
+ "version": "7.10.4",
+ "resolved": "https://registry.npmjs.org/@babel/plugin-transform-exponentiation-operator/-/plugin-transform-exponentiation-operator-7.10.4.tgz",
+ "integrity": "sha512-S5HgLVgkBcRdyQAHbKj+7KyuWx8C6t5oETmUuwz1pt3WTWJhsUV0WIIXuVvfXMxl/QQyHKlSCNNtaIamG8fysw==",
"dev": true,
"requires": {
- "@babel/helper-builder-binary-assignment-operator-visitor": "^7.8.3",
- "@babel/helper-plugin-utils": "^7.8.3"
+ "@babel/helper-builder-binary-assignment-operator-visitor": "^7.10.4",
+ "@babel/helper-plugin-utils": "^7.10.4"
}
},
"@babel/plugin-transform-for-of": {
- "version": "7.8.4",
- "resolved": "https://registry.npmjs.org/@babel/plugin-transform-for-of/-/plugin-transform-for-of-7.8.4.tgz",
- "integrity": "sha512-iAXNlOWvcYUYoV8YIxwS7TxGRJcxyl8eQCfT+A5j8sKUzRFvJdcyjp97jL2IghWSRDaL2PU2O2tX8Cu9dTBq5A==",
+ "version": "7.10.4",
+ "resolved": "https://registry.npmjs.org/@babel/plugin-transform-for-of/-/plugin-transform-for-of-7.10.4.tgz",
+ "integrity": "sha512-ItdQfAzu9AlEqmusA/65TqJ79eRcgGmpPPFvBnGILXZH975G0LNjP1yjHvGgfuCxqrPPueXOPe+FsvxmxKiHHQ==",
"dev": true,
"requires": {
- "@babel/helper-plugin-utils": "^7.8.3"
+ "@babel/helper-plugin-utils": "^7.10.4"
}
},
"@babel/plugin-transform-function-name": {
- "version": "7.8.3",
- "resolved": "https://registry.npmjs.org/@babel/plugin-transform-function-name/-/plugin-transform-function-name-7.8.3.tgz",
- "integrity": "sha512-rO/OnDS78Eifbjn5Py9v8y0aR+aSYhDhqAwVfsTl0ERuMZyr05L1aFSCJnbv2mmsLkit/4ReeQ9N2BgLnOcPCQ==",
+ "version": "7.10.4",
+ "resolved": "https://registry.npmjs.org/@babel/plugin-transform-function-name/-/plugin-transform-function-name-7.10.4.tgz",
+ "integrity": "sha512-OcDCq2y5+E0dVD5MagT5X+yTRbcvFjDI2ZVAottGH6tzqjx/LKpgkUepu3hp/u4tZBzxxpNGwLsAvGBvQ2mJzg==",
"dev": true,
"requires": {
- "@babel/helper-function-name": "^7.8.3",
- "@babel/helper-plugin-utils": "^7.8.3"
+ "@babel/helper-function-name": "^7.10.4",
+ "@babel/helper-plugin-utils": "^7.10.4"
}
},
"@babel/plugin-transform-literals": {
- "version": "7.8.3",
- "resolved": "https://registry.npmjs.org/@babel/plugin-transform-literals/-/plugin-transform-literals-7.8.3.tgz",
- "integrity": "sha512-3Tqf8JJ/qB7TeldGl+TT55+uQei9JfYaregDcEAyBZ7akutriFrt6C/wLYIer6OYhleVQvH/ntEhjE/xMmy10A==",
+ "version": "7.10.4",
+ "resolved": "https://registry.npmjs.org/@babel/plugin-transform-literals/-/plugin-transform-literals-7.10.4.tgz",
+ "integrity": "sha512-Xd/dFSTEVuUWnyZiMu76/InZxLTYilOSr1UlHV+p115Z/Le2Fi1KXkJUYz0b42DfndostYlPub3m8ZTQlMaiqQ==",
"dev": true,
"requires": {
- "@babel/helper-plugin-utils": "^7.8.3"
+ "@babel/helper-plugin-utils": "^7.10.4"
}
},
"@babel/plugin-transform-member-expression-literals": {
- "version": "7.8.3",
- "resolved": "https://registry.npmjs.org/@babel/plugin-transform-member-expression-literals/-/plugin-transform-member-expression-literals-7.8.3.tgz",
- "integrity": "sha512-3Wk2EXhnw+rP+IDkK6BdtPKsUE5IeZ6QOGrPYvw52NwBStw9V1ZVzxgK6fSKSxqUvH9eQPR3tm3cOq79HlsKYA==",
+ "version": "7.10.4",
+ "resolved": "https://registry.npmjs.org/@babel/plugin-transform-member-expression-literals/-/plugin-transform-member-expression-literals-7.10.4.tgz",
+ "integrity": "sha512-0bFOvPyAoTBhtcJLr9VcwZqKmSjFml1iVxvPL0ReomGU53CX53HsM4h2SzckNdkQcHox1bpAqzxBI1Y09LlBSw==",
"dev": true,
"requires": {
- "@babel/helper-plugin-utils": "^7.8.3"
+ "@babel/helper-plugin-utils": "^7.10.4"
}
},
"@babel/plugin-transform-modules-amd": {
- "version": "7.8.3",
- "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-amd/-/plugin-transform-modules-amd-7.8.3.tgz",
- "integrity": "sha512-MadJiU3rLKclzT5kBH4yxdry96odTUwuqrZM+GllFI/VhxfPz+k9MshJM+MwhfkCdxxclSbSBbUGciBngR+kEQ==",
+ "version": "7.10.4",
+ "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-amd/-/plugin-transform-modules-amd-7.10.4.tgz",
+ "integrity": "sha512-3Fw+H3WLUrTlzi3zMiZWp3AR4xadAEMv6XRCYnd5jAlLM61Rn+CRJaZMaNvIpcJpQ3vs1kyifYvEVPFfoSkKOA==",
"dev": true,
"requires": {
- "@babel/helper-module-transforms": "^7.8.3",
- "@babel/helper-plugin-utils": "^7.8.3",
- "babel-plugin-dynamic-import-node": "^2.3.0"
+ "@babel/helper-module-transforms": "^7.10.4",
+ "@babel/helper-plugin-utils": "^7.10.4",
+ "babel-plugin-dynamic-import-node": "^2.3.3"
}
},
"@babel/plugin-transform-modules-commonjs": {
- "version": "7.8.3",
- "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-commonjs/-/plugin-transform-modules-commonjs-7.8.3.tgz",
- "integrity": "sha512-JpdMEfA15HZ/1gNuB9XEDlZM1h/gF/YOH7zaZzQu2xCFRfwc01NXBMHHSTT6hRjlXJJs5x/bfODM3LiCk94Sxg==",
+ "version": "7.10.4",
+ "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-commonjs/-/plugin-transform-modules-commonjs-7.10.4.tgz",
+ "integrity": "sha512-Xj7Uq5o80HDLlW64rVfDBhao6OX89HKUmb+9vWYaLXBZOma4gA6tw4Ni1O5qVDoZWUV0fxMYA0aYzOawz0l+1w==",
"dev": true,
"requires": {
- "@babel/helper-module-transforms": "^7.8.3",
- "@babel/helper-plugin-utils": "^7.8.3",
- "@babel/helper-simple-access": "^7.8.3",
- "babel-plugin-dynamic-import-node": "^2.3.0"
+ "@babel/helper-module-transforms": "^7.10.4",
+ "@babel/helper-plugin-utils": "^7.10.4",
+ "@babel/helper-simple-access": "^7.10.4",
+ "babel-plugin-dynamic-import-node": "^2.3.3"
}
},
"@babel/plugin-transform-modules-systemjs": {
- "version": "7.8.3",
- "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-systemjs/-/plugin-transform-modules-systemjs-7.8.3.tgz",
- "integrity": "sha512-8cESMCJjmArMYqa9AO5YuMEkE4ds28tMpZcGZB/jl3n0ZzlsxOAi3mC+SKypTfT8gjMupCnd3YiXCkMjj2jfOg==",
+ "version": "7.10.4",
+ "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-systemjs/-/plugin-transform-modules-systemjs-7.10.4.tgz",
+ "integrity": "sha512-Tb28LlfxrTiOTGtZFsvkjpyjCl9IoaRI52AEU/VIwOwvDQWtbNJsAqTXzh+5R7i74e/OZHH2c2w2fsOqAfnQYQ==",
"dev": true,
"requires": {
- "@babel/helper-hoist-variables": "^7.8.3",
- "@babel/helper-module-transforms": "^7.8.3",
- "@babel/helper-plugin-utils": "^7.8.3",
- "babel-plugin-dynamic-import-node": "^2.3.0"
+ "@babel/helper-hoist-variables": "^7.10.4",
+ "@babel/helper-module-transforms": "^7.10.4",
+ "@babel/helper-plugin-utils": "^7.10.4",
+ "babel-plugin-dynamic-import-node": "^2.3.3"
}
},
"@babel/plugin-transform-modules-umd": {
- "version": "7.8.3",
- "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-umd/-/plugin-transform-modules-umd-7.8.3.tgz",
- "integrity": "sha512-evhTyWhbwbI3/U6dZAnx/ePoV7H6OUG+OjiJFHmhr9FPn0VShjwC2kdxqIuQ/+1P50TMrneGzMeyMTFOjKSnAw==",
+ "version": "7.10.4",
+ "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-umd/-/plugin-transform-modules-umd-7.10.4.tgz",
+ "integrity": "sha512-mohW5q3uAEt8T45YT7Qc5ws6mWgJAaL/8BfWD9Dodo1A3RKWli8wTS+WiQ/knF+tXlPirW/1/MqzzGfCExKECA==",
"dev": true,
"requires": {
- "@babel/helper-module-transforms": "^7.8.3",
- "@babel/helper-plugin-utils": "^7.8.3"
+ "@babel/helper-module-transforms": "^7.10.4",
+ "@babel/helper-plugin-utils": "^7.10.4"
}
},
"@babel/plugin-transform-named-capturing-groups-regex": {
- "version": "7.8.3",
- "resolved": "https://registry.npmjs.org/@babel/plugin-transform-named-capturing-groups-regex/-/plugin-transform-named-capturing-groups-regex-7.8.3.tgz",
- "integrity": "sha512-f+tF/8UVPU86TrCb06JoPWIdDpTNSGGcAtaD9mLP0aYGA0OS0j7j7DHJR0GTFrUZPUU6loZhbsVZgTh0N+Qdnw==",
+ "version": "7.10.4",
+ "resolved": "https://registry.npmjs.org/@babel/plugin-transform-named-capturing-groups-regex/-/plugin-transform-named-capturing-groups-regex-7.10.4.tgz",
+ "integrity": "sha512-V6LuOnD31kTkxQPhKiVYzYC/Jgdq53irJC/xBSmqcNcqFGV+PER4l6rU5SH2Vl7bH9mLDHcc0+l9HUOe4RNGKA==",
"dev": true,
"requires": {
- "@babel/helper-create-regexp-features-plugin": "^7.8.3"
+ "@babel/helper-create-regexp-features-plugin": "^7.10.4"
}
},
"@babel/plugin-transform-new-target": {
- "version": "7.8.3",
- "resolved": "https://registry.npmjs.org/@babel/plugin-transform-new-target/-/plugin-transform-new-target-7.8.3.tgz",
- "integrity": "sha512-QuSGysibQpyxexRyui2vca+Cmbljo8bcRckgzYV4kRIsHpVeyeC3JDO63pY+xFZ6bWOBn7pfKZTqV4o/ix9sFw==",
+ "version": "7.10.4",
+ "resolved": "https://registry.npmjs.org/@babel/plugin-transform-new-target/-/plugin-transform-new-target-7.10.4.tgz",
+ "integrity": "sha512-YXwWUDAH/J6dlfwqlWsztI2Puz1NtUAubXhOPLQ5gjR/qmQ5U96DY4FQO8At33JN4XPBhrjB8I4eMmLROjjLjw==",
"dev": true,
"requires": {
- "@babel/helper-plugin-utils": "^7.8.3"
+ "@babel/helper-plugin-utils": "^7.10.4"
}
},
"@babel/plugin-transform-object-super": {
- "version": "7.8.3",
- "resolved": "https://registry.npmjs.org/@babel/plugin-transform-object-super/-/plugin-transform-object-super-7.8.3.tgz",
- "integrity": "sha512-57FXk+gItG/GejofIyLIgBKTas4+pEU47IXKDBWFTxdPd7F80H8zybyAY7UoblVfBhBGs2EKM+bJUu2+iUYPDQ==",
+ "version": "7.10.4",
+ "resolved": "https://registry.npmjs.org/@babel/plugin-transform-object-super/-/plugin-transform-object-super-7.10.4.tgz",
+ "integrity": "sha512-5iTw0JkdRdJvr7sY0vHqTpnruUpTea32JHmq/atIWqsnNussbRzjEDyWep8UNztt1B5IusBYg8Irb0bLbiEBCQ==",
"dev": true,
"requires": {
- "@babel/helper-plugin-utils": "^7.8.3",
- "@babel/helper-replace-supers": "^7.8.3"
+ "@babel/helper-plugin-utils": "^7.10.4",
+ "@babel/helper-replace-supers": "^7.10.4"
}
},
"@babel/plugin-transform-parameters": {
- "version": "7.8.4",
- "resolved": "https://registry.npmjs.org/@babel/plugin-transform-parameters/-/plugin-transform-parameters-7.8.4.tgz",
- "integrity": "sha512-IsS3oTxeTsZlE5KqzTbcC2sV0P9pXdec53SU+Yxv7o/6dvGM5AkTotQKhoSffhNgZ/dftsSiOoxy7evCYJXzVA==",
+ "version": "7.10.4",
+ "resolved": "https://registry.npmjs.org/@babel/plugin-transform-parameters/-/plugin-transform-parameters-7.10.4.tgz",
+ "integrity": "sha512-RurVtZ/D5nYfEg0iVERXYKEgDFeesHrHfx8RT05Sq57ucj2eOYAP6eu5fynL4Adju4I/mP/I6SO0DqNWAXjfLQ==",
"dev": true,
"requires": {
- "@babel/helper-call-delegate": "^7.8.3",
- "@babel/helper-get-function-arity": "^7.8.3",
- "@babel/helper-plugin-utils": "^7.8.3"
+ "@babel/helper-get-function-arity": "^7.10.4",
+ "@babel/helper-plugin-utils": "^7.10.4"
}
},
"@babel/plugin-transform-property-literals": {
- "version": "7.8.3",
- "resolved": "https://registry.npmjs.org/@babel/plugin-transform-property-literals/-/plugin-transform-property-literals-7.8.3.tgz",
- "integrity": "sha512-uGiiXAZMqEoQhRWMK17VospMZh5sXWg+dlh2soffpkAl96KAm+WZuJfa6lcELotSRmooLqg0MWdH6UUq85nmmg==",
+ "version": "7.10.4",
+ "resolved": "https://registry.npmjs.org/@babel/plugin-transform-property-literals/-/plugin-transform-property-literals-7.10.4.tgz",
+ "integrity": "sha512-ofsAcKiUxQ8TY4sScgsGeR2vJIsfrzqvFb9GvJ5UdXDzl+MyYCaBj/FGzXuv7qE0aJcjWMILny1epqelnFlz8g==",
"dev": true,
"requires": {
- "@babel/helper-plugin-utils": "^7.8.3"
+ "@babel/helper-plugin-utils": "^7.10.4"
}
},
"@babel/plugin-transform-regenerator": {
- "version": "7.8.3",
- "resolved": "https://registry.npmjs.org/@babel/plugin-transform-regenerator/-/plugin-transform-regenerator-7.8.3.tgz",
- "integrity": "sha512-qt/kcur/FxrQrzFR432FGZznkVAjiyFtCOANjkAKwCbt465L6ZCiUQh2oMYGU3Wo8LRFJxNDFwWn106S5wVUNA==",
+ "version": "7.10.4",
+ "resolved": "https://registry.npmjs.org/@babel/plugin-transform-regenerator/-/plugin-transform-regenerator-7.10.4.tgz",
+ "integrity": "sha512-3thAHwtor39A7C04XucbMg17RcZ3Qppfxr22wYzZNcVIkPHfpM9J0SO8zuCV6SZa265kxBJSrfKTvDCYqBFXGw==",
"dev": true,
"requires": {
- "regenerator-transform": "^0.14.0"
+ "regenerator-transform": "^0.14.2"
}
},
"@babel/plugin-transform-reserved-words": {
- "version": "7.8.3",
- "resolved": "https://registry.npmjs.org/@babel/plugin-transform-reserved-words/-/plugin-transform-reserved-words-7.8.3.tgz",
- "integrity": "sha512-mwMxcycN3omKFDjDQUl+8zyMsBfjRFr0Zn/64I41pmjv4NJuqcYlEtezwYtw9TFd9WR1vN5kiM+O0gMZzO6L0A==",
+ "version": "7.10.4",
+ "resolved": "https://registry.npmjs.org/@babel/plugin-transform-reserved-words/-/plugin-transform-reserved-words-7.10.4.tgz",
+ "integrity": "sha512-hGsw1O6Rew1fkFbDImZIEqA8GoidwTAilwCyWqLBM9f+e/u/sQMQu7uX6dyokfOayRuuVfKOW4O7HvaBWM+JlQ==",
"dev": true,
"requires": {
- "@babel/helper-plugin-utils": "^7.8.3"
+ "@babel/helper-plugin-utils": "^7.10.4"
}
},
"@babel/plugin-transform-shorthand-properties": {
- "version": "7.8.3",
- "resolved": "https://registry.npmjs.org/@babel/plugin-transform-shorthand-properties/-/plugin-transform-shorthand-properties-7.8.3.tgz",
- "integrity": "sha512-I9DI6Odg0JJwxCHzbzW08ggMdCezoWcuQRz3ptdudgwaHxTjxw5HgdFJmZIkIMlRymL6YiZcped4TTCB0JcC8w==",
+ "version": "7.10.4",
+ "resolved": "https://registry.npmjs.org/@babel/plugin-transform-shorthand-properties/-/plugin-transform-shorthand-properties-7.10.4.tgz",
+ "integrity": "sha512-AC2K/t7o07KeTIxMoHneyX90v3zkm5cjHJEokrPEAGEy3UCp8sLKfnfOIGdZ194fyN4wfX/zZUWT9trJZ0qc+Q==",
"dev": true,
"requires": {
- "@babel/helper-plugin-utils": "^7.8.3"
+ "@babel/helper-plugin-utils": "^7.10.4"
}
},
"@babel/plugin-transform-spread": {
- "version": "7.8.3",
- "resolved": "https://registry.npmjs.org/@babel/plugin-transform-spread/-/plugin-transform-spread-7.8.3.tgz",
- "integrity": "sha512-CkuTU9mbmAoFOI1tklFWYYbzX5qCIZVXPVy0jpXgGwkplCndQAa58s2jr66fTeQnA64bDox0HL4U56CFYoyC7g==",
+ "version": "7.10.4",
+ "resolved": "https://registry.npmjs.org/@babel/plugin-transform-spread/-/plugin-transform-spread-7.10.4.tgz",
+ "integrity": "sha512-1e/51G/Ni+7uH5gktbWv+eCED9pP8ZpRhZB3jOaI3mmzfvJTWHkuyYTv0Z5PYtyM+Tr2Ccr9kUdQxn60fI5WuQ==",
"dev": true,
"requires": {
- "@babel/helper-plugin-utils": "^7.8.3"
+ "@babel/helper-plugin-utils": "^7.10.4"
}
},
"@babel/plugin-transform-sticky-regex": {
- "version": "7.8.3",
- "resolved": "https://registry.npmjs.org/@babel/plugin-transform-sticky-regex/-/plugin-transform-sticky-regex-7.8.3.tgz",
- "integrity": "sha512-9Spq0vGCD5Bb4Z/ZXXSK5wbbLFMG085qd2vhL1JYu1WcQ5bXqZBAYRzU1d+p79GcHs2szYv5pVQCX13QgldaWw==",
+ "version": "7.10.4",
+ "resolved": "https://registry.npmjs.org/@babel/plugin-transform-sticky-regex/-/plugin-transform-sticky-regex-7.10.4.tgz",
+ "integrity": "sha512-Ddy3QZfIbEV0VYcVtFDCjeE4xwVTJWTmUtorAJkn6u/92Z/nWJNV+mILyqHKrUxXYKA2EoCilgoPePymKL4DvQ==",
"dev": true,
"requires": {
- "@babel/helper-plugin-utils": "^7.8.3",
- "@babel/helper-regex": "^7.8.3"
+ "@babel/helper-plugin-utils": "^7.10.4",
+ "@babel/helper-regex": "^7.10.4"
}
},
"@babel/plugin-transform-template-literals": {
- "version": "7.8.3",
- "resolved": "https://registry.npmjs.org/@babel/plugin-transform-template-literals/-/plugin-transform-template-literals-7.8.3.tgz",
- "integrity": "sha512-820QBtykIQOLFT8NZOcTRJ1UNuztIELe4p9DCgvj4NK+PwluSJ49we7s9FB1HIGNIYT7wFUJ0ar2QpCDj0escQ==",
+ "version": "7.10.4",
+ "resolved": "https://registry.npmjs.org/@babel/plugin-transform-template-literals/-/plugin-transform-template-literals-7.10.4.tgz",
+ "integrity": "sha512-4NErciJkAYe+xI5cqfS8pV/0ntlY5N5Ske/4ImxAVX7mk9Rxt2bwDTGv1Msc2BRJvWQcmYEC+yoMLdX22aE4VQ==",
"dev": true,
"requires": {
- "@babel/helper-annotate-as-pure": "^7.8.3",
- "@babel/helper-plugin-utils": "^7.8.3"
+ "@babel/helper-annotate-as-pure": "^7.10.4",
+ "@babel/helper-plugin-utils": "^7.10.4"
}
},
"@babel/plugin-transform-typeof-symbol": {
- "version": "7.8.4",
- "resolved": "https://registry.npmjs.org/@babel/plugin-transform-typeof-symbol/-/plugin-transform-typeof-symbol-7.8.4.tgz",
- "integrity": "sha512-2QKyfjGdvuNfHsb7qnBBlKclbD4CfshH2KvDabiijLMGXPHJXGxtDzwIF7bQP+T0ysw8fYTtxPafgfs/c1Lrqg==",
+ "version": "7.10.4",
+ "resolved": "https://registry.npmjs.org/@babel/plugin-transform-typeof-symbol/-/plugin-transform-typeof-symbol-7.10.4.tgz",
+ "integrity": "sha512-QqNgYwuuW0y0H+kUE/GWSR45t/ccRhe14Fs/4ZRouNNQsyd4o3PG4OtHiIrepbM2WKUBDAXKCAK/Lk4VhzTaGA==",
+ "dev": true,
+ "requires": {
+ "@babel/helper-plugin-utils": "^7.10.4"
+ }
+ },
+ "@babel/plugin-transform-unicode-escapes": {
+ "version": "7.10.4",
+ "resolved": "https://registry.npmjs.org/@babel/plugin-transform-unicode-escapes/-/plugin-transform-unicode-escapes-7.10.4.tgz",
+ "integrity": "sha512-y5XJ9waMti2J+e7ij20e+aH+fho7Wb7W8rNuu72aKRwCHFqQdhkdU2lo3uZ9tQuboEJcUFayXdARhcxLQ3+6Fg==",
"dev": true,
"requires": {
- "@babel/helper-plugin-utils": "^7.8.3"
+ "@babel/helper-plugin-utils": "^7.10.4"
}
},
"@babel/plugin-transform-unicode-regex": {
- "version": "7.8.3",
- "resolved": "https://registry.npmjs.org/@babel/plugin-transform-unicode-regex/-/plugin-transform-unicode-regex-7.8.3.tgz",
- "integrity": "sha512-+ufgJjYdmWfSQ+6NS9VGUR2ns8cjJjYbrbi11mZBTaWm+Fui/ncTLFF28Ei1okavY+xkojGr1eJxNsWYeA5aZw==",
+ "version": "7.10.4",
+ "resolved": "https://registry.npmjs.org/@babel/plugin-transform-unicode-regex/-/plugin-transform-unicode-regex-7.10.4.tgz",
+ "integrity": "sha512-wNfsc4s8N2qnIwpO/WP2ZiSyjfpTamT2C9V9FDH/Ljub9zw6P3SjkXcFmc0RQUt96k2fmIvtla2MMjgTwIAC+A==",
+ "dev": true,
+ "requires": {
+ "@babel/helper-create-regexp-features-plugin": "^7.10.4",
+ "@babel/helper-plugin-utils": "^7.10.4"
+ }
+ },
+ "@babel/polyfill": {
+ "version": "7.10.4",
+ "resolved": "https://registry.npmjs.org/@babel/polyfill/-/polyfill-7.10.4.tgz",
+ "integrity": "sha512-8BYcnVqQ5kMD2HXoHInBH7H1b/uP3KdnwCYXOqFnXqguOyuu443WXusbIUbWEfY3Z0Txk0M1uG/8YuAMhNl6zg==",
"dev": true,
"requires": {
- "@babel/helper-create-regexp-features-plugin": "^7.8.3",
- "@babel/helper-plugin-utils": "^7.8.3"
+ "core-js": "^2.6.5",
+ "regenerator-runtime": "^0.13.4"
}
},
"@babel/preset-env": {
- "version": "7.8.4",
- "resolved": "https://registry.npmjs.org/@babel/preset-env/-/preset-env-7.8.4.tgz",
- "integrity": "sha512-HihCgpr45AnSOHRbS5cWNTINs0TwaR8BS8xIIH+QwiW8cKL0llV91njQMpeMReEPVs+1Ao0x3RLEBLtt1hOq4w==",
- "dev": true,
- "requires": {
- "@babel/compat-data": "^7.8.4",
- "@babel/helper-compilation-targets": "^7.8.4",
- "@babel/helper-module-imports": "^7.8.3",
- "@babel/helper-plugin-utils": "^7.8.3",
- "@babel/plugin-proposal-async-generator-functions": "^7.8.3",
- "@babel/plugin-proposal-dynamic-import": "^7.8.3",
- "@babel/plugin-proposal-json-strings": "^7.8.3",
- "@babel/plugin-proposal-nullish-coalescing-operator": "^7.8.3",
- "@babel/plugin-proposal-object-rest-spread": "^7.8.3",
- "@babel/plugin-proposal-optional-catch-binding": "^7.8.3",
- "@babel/plugin-proposal-optional-chaining": "^7.8.3",
- "@babel/plugin-proposal-unicode-property-regex": "^7.8.3",
+ "version": "7.10.4",
+ "resolved": "https://registry.npmjs.org/@babel/preset-env/-/preset-env-7.10.4.tgz",
+ "integrity": "sha512-tcmuQ6vupfMZPrLrc38d0sF2OjLT3/bZ0dry5HchNCQbrokoQi4reXqclvkkAT5b+gWc23meVWpve5P/7+w/zw==",
+ "dev": true,
+ "requires": {
+ "@babel/compat-data": "^7.10.4",
+ "@babel/helper-compilation-targets": "^7.10.4",
+ "@babel/helper-module-imports": "^7.10.4",
+ "@babel/helper-plugin-utils": "^7.10.4",
+ "@babel/plugin-proposal-async-generator-functions": "^7.10.4",
+ "@babel/plugin-proposal-class-properties": "^7.10.4",
+ "@babel/plugin-proposal-dynamic-import": "^7.10.4",
+ "@babel/plugin-proposal-json-strings": "^7.10.4",
+ "@babel/plugin-proposal-nullish-coalescing-operator": "^7.10.4",
+ "@babel/plugin-proposal-numeric-separator": "^7.10.4",
+ "@babel/plugin-proposal-object-rest-spread": "^7.10.4",
+ "@babel/plugin-proposal-optional-catch-binding": "^7.10.4",
+ "@babel/plugin-proposal-optional-chaining": "^7.10.4",
+ "@babel/plugin-proposal-private-methods": "^7.10.4",
+ "@babel/plugin-proposal-unicode-property-regex": "^7.10.4",
"@babel/plugin-syntax-async-generators": "^7.8.0",
+ "@babel/plugin-syntax-class-properties": "^7.10.4",
"@babel/plugin-syntax-dynamic-import": "^7.8.0",
"@babel/plugin-syntax-json-strings": "^7.8.0",
"@babel/plugin-syntax-nullish-coalescing-operator": "^7.8.0",
+ "@babel/plugin-syntax-numeric-separator": "^7.10.4",
"@babel/plugin-syntax-object-rest-spread": "^7.8.0",
"@babel/plugin-syntax-optional-catch-binding": "^7.8.0",
"@babel/plugin-syntax-optional-chaining": "^7.8.0",
- "@babel/plugin-syntax-top-level-await": "^7.8.3",
- "@babel/plugin-transform-arrow-functions": "^7.8.3",
- "@babel/plugin-transform-async-to-generator": "^7.8.3",
- "@babel/plugin-transform-block-scoped-functions": "^7.8.3",
- "@babel/plugin-transform-block-scoping": "^7.8.3",
- "@babel/plugin-transform-classes": "^7.8.3",
- "@babel/plugin-transform-computed-properties": "^7.8.3",
- "@babel/plugin-transform-destructuring": "^7.8.3",
- "@babel/plugin-transform-dotall-regex": "^7.8.3",
- "@babel/plugin-transform-duplicate-keys": "^7.8.3",
- "@babel/plugin-transform-exponentiation-operator": "^7.8.3",
- "@babel/plugin-transform-for-of": "^7.8.4",
- "@babel/plugin-transform-function-name": "^7.8.3",
- "@babel/plugin-transform-literals": "^7.8.3",
- "@babel/plugin-transform-member-expression-literals": "^7.8.3",
- "@babel/plugin-transform-modules-amd": "^7.8.3",
- "@babel/plugin-transform-modules-commonjs": "^7.8.3",
- "@babel/plugin-transform-modules-systemjs": "^7.8.3",
- "@babel/plugin-transform-modules-umd": "^7.8.3",
- "@babel/plugin-transform-named-capturing-groups-regex": "^7.8.3",
- "@babel/plugin-transform-new-target": "^7.8.3",
- "@babel/plugin-transform-object-super": "^7.8.3",
- "@babel/plugin-transform-parameters": "^7.8.4",
- "@babel/plugin-transform-property-literals": "^7.8.3",
- "@babel/plugin-transform-regenerator": "^7.8.3",
- "@babel/plugin-transform-reserved-words": "^7.8.3",
- "@babel/plugin-transform-shorthand-properties": "^7.8.3",
- "@babel/plugin-transform-spread": "^7.8.3",
- "@babel/plugin-transform-sticky-regex": "^7.8.3",
- "@babel/plugin-transform-template-literals": "^7.8.3",
- "@babel/plugin-transform-typeof-symbol": "^7.8.4",
- "@babel/plugin-transform-unicode-regex": "^7.8.3",
- "@babel/types": "^7.8.3",
- "browserslist": "^4.8.5",
+ "@babel/plugin-syntax-top-level-await": "^7.10.4",
+ "@babel/plugin-transform-arrow-functions": "^7.10.4",
+ "@babel/plugin-transform-async-to-generator": "^7.10.4",
+ "@babel/plugin-transform-block-scoped-functions": "^7.10.4",
+ "@babel/plugin-transform-block-scoping": "^7.10.4",
+ "@babel/plugin-transform-classes": "^7.10.4",
+ "@babel/plugin-transform-computed-properties": "^7.10.4",
+ "@babel/plugin-transform-destructuring": "^7.10.4",
+ "@babel/plugin-transform-dotall-regex": "^7.10.4",
+ "@babel/plugin-transform-duplicate-keys": "^7.10.4",
+ "@babel/plugin-transform-exponentiation-operator": "^7.10.4",
+ "@babel/plugin-transform-for-of": "^7.10.4",
+ "@babel/plugin-transform-function-name": "^7.10.4",
+ "@babel/plugin-transform-literals": "^7.10.4",
+ "@babel/plugin-transform-member-expression-literals": "^7.10.4",
+ "@babel/plugin-transform-modules-amd": "^7.10.4",
+ "@babel/plugin-transform-modules-commonjs": "^7.10.4",
+ "@babel/plugin-transform-modules-systemjs": "^7.10.4",
+ "@babel/plugin-transform-modules-umd": "^7.10.4",
+ "@babel/plugin-transform-named-capturing-groups-regex": "^7.10.4",
+ "@babel/plugin-transform-new-target": "^7.10.4",
+ "@babel/plugin-transform-object-super": "^7.10.4",
+ "@babel/plugin-transform-parameters": "^7.10.4",
+ "@babel/plugin-transform-property-literals": "^7.10.4",
+ "@babel/plugin-transform-regenerator": "^7.10.4",
+ "@babel/plugin-transform-reserved-words": "^7.10.4",
+ "@babel/plugin-transform-shorthand-properties": "^7.10.4",
+ "@babel/plugin-transform-spread": "^7.10.4",
+ "@babel/plugin-transform-sticky-regex": "^7.10.4",
+ "@babel/plugin-transform-template-literals": "^7.10.4",
+ "@babel/plugin-transform-typeof-symbol": "^7.10.4",
+ "@babel/plugin-transform-unicode-escapes": "^7.10.4",
+ "@babel/plugin-transform-unicode-regex": "^7.10.4",
+ "@babel/preset-modules": "^0.1.3",
+ "@babel/types": "^7.10.4",
+ "browserslist": "^4.12.0",
"core-js-compat": "^3.6.2",
"invariant": "^2.2.2",
"levenary": "^1.1.1",
"semver": "^5.5.0"
+ },
+ "dependencies": {
+ "@babel/types": {
+ "version": "7.10.4",
+ "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.10.4.tgz",
+ "integrity": "sha512-UTCFOxC3FsFHb7lkRMVvgLzaRVamXuAs2Tz4wajva4WxtVY82eZeaUBtC2Zt95FU9TiznuC0Zk35tsim8jeVpg==",
+ "dev": true,
+ "requires": {
+ "@babel/helper-validator-identifier": "^7.10.4",
+ "lodash": "^4.17.13",
+ "to-fast-properties": "^2.0.0"
+ }
+ }
+ }
+ },
+ "@babel/preset-modules": {
+ "version": "0.1.3",
+ "resolved": "https://registry.npmjs.org/@babel/preset-modules/-/preset-modules-0.1.3.tgz",
+ "integrity": "sha512-Ra3JXOHBq2xd56xSF7lMKXdjBn3T772Y1Wet3yWnkDly9zHvJki029tAFzvAAK5cf4YV3yoxuP61crYRol6SVg==",
+ "dev": true,
+ "requires": {
+ "@babel/helper-plugin-utils": "^7.0.0",
+ "@babel/plugin-proposal-unicode-property-regex": "^7.4.4",
+ "@babel/plugin-transform-dotall-regex": "^7.4.4",
+ "@babel/types": "^7.4.4",
+ "esutils": "^2.0.2"
}
},
"@babel/register": {
- "version": "7.8.3",
- "resolved": "https://registry.npmjs.org/@babel/register/-/register-7.8.3.tgz",
- "integrity": "sha512-t7UqebaWwo9nXWClIPLPloa5pN33A2leVs8Hf0e9g9YwUP8/H9NeR7DJU+4CXo23QtjChQv5a3DjEtT83ih1rg==",
+ "version": "7.10.5",
+ "resolved": "https://registry.npmjs.org/@babel/register/-/register-7.10.5.tgz",
+ "integrity": "sha512-eYHdLv43nyvmPn9bfNfrcC4+iYNwdQ8Pxk1MFJuU/U5LpSYl/PH4dFMazCYZDFVi8ueG3shvO+AQfLrxpYulQw==",
"dev": true,
"requires": {
"find-cache-dir": "^2.0.0",
- "lodash": "^4.17.13",
+ "lodash": "^4.17.19",
"make-dir": "^2.1.0",
"pirates": "^4.0.0",
"source-map-support": "^0.5.16"
}
},
"@babel/runtime": {
- "version": "7.9.2",
- "resolved": "https://registry.npmjs.org/@babel/runtime/-/runtime-7.9.2.tgz",
- "integrity": "sha512-NE2DtOdufG7R5vnfQUTehdTfNycfUANEtCa9PssN9O/xmTzP4E08UI797ixaei6hBEVL9BI/PsdJS5x7mWoB9Q==",
+ "version": "7.10.4",
+ "resolved": "https://registry.npmjs.org/@babel/runtime/-/runtime-7.10.4.tgz",
+ "integrity": "sha512-UpTN5yUJr9b4EX2CnGNWIvER7Ab83ibv0pcvvHc4UOdrBI5jb8bj+32cCwPX6xu0mt2daFNjYhoi+X7beH0RSw==",
"requires": {
"regenerator-runtime": "^0.13.4"
}
},
"@babel/template": {
- "version": "7.8.3",
- "resolved": "https://registry.npmjs.org/@babel/template/-/template-7.8.3.tgz",
- "integrity": "sha512-04m87AcQgAFdvuoyiQ2kgELr2tV8B4fP/xJAVUL3Yb3bkNdMedD3d0rlSQr3PegP0cms3eHjl1F7PWlvWbU8FQ==",
+ "version": "7.10.4",
+ "resolved": "https://registry.npmjs.org/@babel/template/-/template-7.10.4.tgz",
+ "integrity": "sha512-ZCjD27cGJFUB6nmCB1Enki3r+L5kJveX9pq1SvAUKoICy6CZ9yD8xO086YXdYhvNjBdnekm4ZnaP5yC8Cs/1tA==",
"dev": true,
"requires": {
- "@babel/code-frame": "^7.8.3",
- "@babel/parser": "^7.8.3",
- "@babel/types": "^7.8.3"
+ "@babel/code-frame": "^7.10.4",
+ "@babel/parser": "^7.10.4",
+ "@babel/types": "^7.10.4"
},
"dependencies": {
- "@babel/code-frame": {
- "version": "7.8.3",
- "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.8.3.tgz",
- "integrity": "sha512-a9gxpmdXtZEInkCSHUJDLHZVBgb1QS0jhss4cPP93EW7s+uC5bikET2twEF3KV+7rDblJcmNvTR7VJejqd2C2g==",
- "dev": true,
- "requires": {
- "@babel/highlight": "^7.8.3"
- }
- },
- "@babel/highlight": {
- "version": "7.8.3",
- "resolved": "https://registry.npmjs.org/@babel/highlight/-/highlight-7.8.3.tgz",
- "integrity": "sha512-PX4y5xQUvy0fnEVHrYOarRPXVWafSjTW9T0Hab8gVIawpl2Sj0ORyrygANq+KjcNlSSTw0YCLSNA8OyZ1I4yEg==",
+ "@babel/types": {
+ "version": "7.10.5",
+ "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.10.5.tgz",
+ "integrity": "sha512-ixV66KWfCI6GKoA/2H9v6bQdbfXEwwpOdQ8cRvb4F+eyvhlaHxWFMQB4+3d9QFJXZsiiiqVrewNV0DFEQpyT4Q==",
"dev": true,
"requires": {
- "chalk": "^2.0.0",
- "esutils": "^2.0.2",
- "js-tokens": "^4.0.0"
+ "@babel/helper-validator-identifier": "^7.10.4",
+ "lodash": "^4.17.19",
+ "to-fast-properties": "^2.0.0"
}
}
}
},
"@babel/traverse": {
- "version": "7.7.4",
- "resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.7.4.tgz",
- "integrity": "sha512-P1L58hQyupn8+ezVA2z5KBm4/Zr4lCC8dwKCMYzsa5jFMDMQAzaBNy9W5VjB+KAmBjb40U7a/H6ao+Xo+9saIw==",
+ "version": "7.10.5",
+ "resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.10.5.tgz",
+ "integrity": "sha512-yc/fyv2gUjPqzTz0WHeRJH2pv7jA9kA7mBX2tXl/x5iOE81uaVPuGPtaYk7wmkx4b67mQ7NqI8rmT2pF47KYKQ==",
"dev": true,
"requires": {
- "@babel/code-frame": "^7.5.5",
- "@babel/generator": "^7.7.4",
- "@babel/helper-function-name": "^7.7.4",
- "@babel/helper-split-export-declaration": "^7.7.4",
- "@babel/parser": "^7.7.4",
- "@babel/types": "^7.7.4",
+ "@babel/code-frame": "^7.10.4",
+ "@babel/generator": "^7.10.5",
+ "@babel/helper-function-name": "^7.10.4",
+ "@babel/helper-split-export-declaration": "^7.10.4",
+ "@babel/parser": "^7.10.5",
+ "@babel/types": "^7.10.5",
"debug": "^4.1.0",
"globals": "^11.1.0",
- "lodash": "^4.17.13"
+ "lodash": "^4.17.19"
},
"dependencies": {
- "@babel/code-frame": {
- "version": "7.5.5",
- "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.5.5.tgz",
- "integrity": "sha512-27d4lZoomVyo51VegxI20xZPuSHusqbQag/ztrBC7wegWoQ1nLREPVSKSW8byhTlzTKyNE4ifaTA6lCp7JjpFw==",
+ "@babel/types": {
+ "version": "7.10.5",
+ "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.10.5.tgz",
+ "integrity": "sha512-ixV66KWfCI6GKoA/2H9v6bQdbfXEwwpOdQ8cRvb4F+eyvhlaHxWFMQB4+3d9QFJXZsiiiqVrewNV0DFEQpyT4Q==",
"dev": true,
"requires": {
- "@babel/highlight": "^7.0.0"
+ "@babel/helper-validator-identifier": "^7.10.4",
+ "lodash": "^4.17.19",
+ "to-fast-properties": "^2.0.0"
}
+ }
+ }
+ },
+ "@babel/types": {
+ "version": "7.8.3",
+ "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.8.3.tgz",
+ "integrity": "sha512-jBD+G8+LWpMBBWvVcdr4QysjUE4mU/syrhN17o1u3gx0/WzJB1kwiVZAXRtWbsIPOwW8pF/YJV5+nmetPzepXg==",
+ "dev": true,
+ "requires": {
+ "esutils": "^2.0.2",
+ "lodash": "^4.17.13",
+ "to-fast-properties": "^2.0.0"
+ }
+ },
+ "@istanbuljs/load-nyc-config": {
+ "version": "1.1.0",
+ "resolved": "https://registry.npmjs.org/@istanbuljs/load-nyc-config/-/load-nyc-config-1.1.0.tgz",
+ "integrity": "sha512-VjeHSlIzpv/NyD3N0YuHfXOPDIixcA1q2ZV98wsMqcYlPmv2n3Yb2lYP9XMElnaFVXg5A7YLTeLu6V84uQDjmQ==",
+ "dev": true,
+ "requires": {
+ "camelcase": "^5.3.1",
+ "find-up": "^4.1.0",
+ "get-package-type": "^0.1.0",
+ "js-yaml": "^3.13.1",
+ "resolve-from": "^5.0.0"
+ },
+ "dependencies": {
+ "camelcase": {
+ "version": "5.3.1",
+ "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-5.3.1.tgz",
+ "integrity": "sha512-L28STB170nwWS63UjtlEOE3dldQApaJXZkOI1uMFfzf3rRuPegHaHesyee+YxQ+W6SvRDQV6UrdOdRiR153wJg==",
+ "dev": true
},
- "@babel/helper-function-name": {
- "version": "7.7.4",
- "resolved": "https://registry.npmjs.org/@babel/helper-function-name/-/helper-function-name-7.7.4.tgz",
- "integrity": "sha512-AnkGIdiBhEuiwdoMnKm7jfPfqItZhgRaZfMg1XX3bS25INOnLPjPG1Ppnajh8eqgt5kPJnfqrRHqFqmjKDZLzQ==",
+ "find-up": {
+ "version": "4.1.0",
+ "resolved": "https://registry.npmjs.org/find-up/-/find-up-4.1.0.tgz",
+ "integrity": "sha512-PpOwAdQ/YlXQ2vj8a3h8IipDuYRi3wceVQQGYWxNINccq40Anw7BlsEXCMbt1Zt+OLA6Fq9suIpIWD0OsnISlw==",
"dev": true,
"requires": {
- "@babel/helper-get-function-arity": "^7.7.4",
- "@babel/template": "^7.7.4",
- "@babel/types": "^7.7.4"
+ "locate-path": "^5.0.0",
+ "path-exists": "^4.0.0"
}
},
- "@babel/helper-get-function-arity": {
- "version": "7.7.4",
- "resolved": "https://registry.npmjs.org/@babel/helper-get-function-arity/-/helper-get-function-arity-7.7.4.tgz",
- "integrity": "sha512-QTGKEdCkjgzgfJ3bAyRwF4yyT3pg+vDgan8DSivq1eS0gwi+KGKE5x8kRcbeFTb/673mkO5SN1IZfmCfA5o+EA==",
+ "locate-path": {
+ "version": "5.0.0",
+ "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-5.0.0.tgz",
+ "integrity": "sha512-t7hw9pI+WvuwNJXwk5zVHpyhIqzg2qTlklJOf0mVxGSbe3Fp2VieZcduNYjaLDoy6p9uGpQEGWG87WpMKlNq8g==",
"dev": true,
"requires": {
- "@babel/types": "^7.7.4"
+ "p-locate": "^4.1.0"
}
},
- "@babel/parser": {
- "version": "7.7.7",
- "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.7.7.tgz",
- "integrity": "sha512-WtTZMZAZLbeymhkd/sEaPD8IQyGAhmuTuvTzLiCFM7iXiVdY0gc0IaI+cW0fh1BnSMbJSzXX6/fHllgHKwHhXw==",
- "dev": true
- },
- "@babel/template": {
- "version": "7.7.4",
- "resolved": "https://registry.npmjs.org/@babel/template/-/template-7.7.4.tgz",
- "integrity": "sha512-qUzihgVPguAzXCK7WXw8pqs6cEwi54s3E+HrejlkuWO6ivMKx9hZl3Y2fSXp9i5HgyWmj7RKP+ulaYnKM4yYxw==",
+ "p-locate": {
+ "version": "4.1.0",
+ "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-4.1.0.tgz",
+ "integrity": "sha512-R79ZZ/0wAxKGu3oYMlz8jy/kbhsNrS7SKZ7PxEHBgJ5+F2mtFW2fK2cOtBh1cHYkQsbzFV7I+EoRKe6Yt0oK7A==",
"dev": true,
"requires": {
- "@babel/code-frame": "^7.0.0",
- "@babel/parser": "^7.7.4",
- "@babel/types": "^7.7.4"
+ "p-limit": "^2.2.0"
}
},
- "@babel/types": {
- "version": "7.7.4",
- "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.7.4.tgz",
- "integrity": "sha512-cz5Ji23KCi4T+YIE/BolWosrJuSmoZeN1EFnRtBwF+KKLi8GG/Z2c2hOJJeCXPk4mwk4QFvTmwIodJowXgttRA==",
- "dev": true,
- "requires": {
- "esutils": "^2.0.2",
- "lodash": "^4.17.13",
- "to-fast-properties": "^2.0.0"
- }
+ "path-exists": {
+ "version": "4.0.0",
+ "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-4.0.0.tgz",
+ "integrity": "sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w==",
+ "dev": true
+ },
+ "resolve-from": {
+ "version": "5.0.0",
+ "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-5.0.0.tgz",
+ "integrity": "sha512-qYg9KP24dD5qka9J47d0aVky0N+b4fTU89LN9iDnjB5waksiC49rvMB0PrUJQGoTmH50XPiqOvAjDfaijGxYZw==",
+ "dev": true
}
}
},
- "@babel/types": {
- "version": "7.8.3",
- "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.8.3.tgz",
- "integrity": "sha512-jBD+G8+LWpMBBWvVcdr4QysjUE4mU/syrhN17o1u3gx0/WzJB1kwiVZAXRtWbsIPOwW8pF/YJV5+nmetPzepXg==",
- "dev": true,
- "requires": {
- "esutils": "^2.0.2",
- "lodash": "^4.17.13",
- "to-fast-properties": "^2.0.0"
- }
+ "@istanbuljs/schema": {
+ "version": "0.1.2",
+ "resolved": "https://registry.npmjs.org/@istanbuljs/schema/-/schema-0.1.2.tgz",
+ "integrity": "sha512-tsAQNx32a8CoFhjhijUIhI4kccIAgmGhy8LZMZgGfmXcpMbPRUqn5LWmgRttILi6yeGmBJd2xsPkFMs0PzgPCw==",
+ "dev": true
},
- "@types/events": {
- "version": "3.0.0",
- "resolved": "https://registry.npmjs.org/@types/events/-/events-3.0.0.tgz",
- "integrity": "sha512-EaObqwIvayI5a8dCzhFrjKzVwKLxjoG9T6Ppd5CEo07LRKfQ8Yokw54r5+Wq7FaBQ+yXRvQAYPrHwya1/UFt9g==",
+ "@types/color-name": {
+ "version": "1.1.1",
+ "resolved": "https://registry.npmjs.org/@types/color-name/-/color-name-1.1.1.tgz",
+ "integrity": "sha512-rr+OQyAjxze7GgWrSaJwydHStIhHq2lvY3BOC2Mj7KnzI7XK0Uw1TOOdI9lDoajEbSWLiYgoo4f1R51erQfhPQ==",
"dev": true
},
"@types/glob": {
- "version": "7.1.1",
- "resolved": "https://registry.npmjs.org/@types/glob/-/glob-7.1.1.tgz",
- "integrity": "sha512-1Bh06cbWJUHMC97acuD6UMG29nMt0Aqz1vF3guLfG+kHHJhy3AyohZFFxYk2f7Q1SQIrNwvncxAE0N/9s70F2w==",
+ "version": "7.1.3",
+ "resolved": "https://registry.npmjs.org/@types/glob/-/glob-7.1.3.tgz",
+ "integrity": "sha512-SEYeGAIQIQX8NN6LDKprLjbrd5dARM5EXsd8GI/A5l0apYI1fGMWgPHSe4ZKL4eozlAyI+doUE9XbYS4xCkQ1w==",
"dev": true,
"requires": {
- "@types/events": "*",
"@types/minimatch": "*",
"@types/node": "*"
}
},
+ "@types/json-schema": {
+ "version": "7.0.5",
+ "resolved": "https://registry.npmjs.org/@types/json-schema/-/json-schema-7.0.5.tgz",
+ "integrity": "sha512-7+2BITlgjgDhH0vvwZU/HZJVyk+2XUlvxXe8dFMedNX/aMkaOq++rMAFXc0tM7ij15QaWlbdQASBR9dihi+bDQ==",
+ "dev": true
+ },
"@types/minimatch": {
"version": "3.0.3",
"resolved": "https://registry.npmjs.org/@types/minimatch/-/minimatch-3.0.3.tgz",
"dev": true
},
"@types/node": {
- "version": "13.7.0",
- "resolved": "https://registry.npmjs.org/@types/node/-/node-13.7.0.tgz",
- "integrity": "sha512-GnZbirvmqZUzMgkFn70c74OQpTTUcCzlhQliTzYjQMqg+hVKcDnxdL19Ne3UdYzdMA/+W3eb646FWn/ZaT1NfQ==",
+ "version": "14.0.22",
+ "resolved": "https://registry.npmjs.org/@types/node/-/node-14.0.22.tgz",
+ "integrity": "sha512-emeGcJvdiZ4Z3ohbmw93E/64jRzUHAItSHt8nF7M4TGgQTiWqFVGB8KNpLGFmUHmHLvjvBgFwVlqNcq+VuGv9g==",
"dev": true
},
"@webassemblyjs/ast": {
- "version": "1.8.5",
- "resolved": "https://registry.npmjs.org/@webassemblyjs/ast/-/ast-1.8.5.tgz",
- "integrity": "sha512-aJMfngIZ65+t71C3y2nBBg5FFG0Okt9m0XEgWZ7Ywgn1oMAT8cNwx00Uv1cQyHtidq0Xn94R4TAywO+LCQ+ZAQ==",
+ "version": "1.9.0",
+ "resolved": "https://registry.npmjs.org/@webassemblyjs/ast/-/ast-1.9.0.tgz",
+ "integrity": "sha512-C6wW5L+b7ogSDVqymbkkvuW9kruN//YisMED04xzeBBqjHa2FYnmvOlS6Xj68xWQRgWvI9cIglsjFowH/RJyEA==",
"dev": true,
"requires": {
- "@webassemblyjs/helper-module-context": "1.8.5",
- "@webassemblyjs/helper-wasm-bytecode": "1.8.5",
- "@webassemblyjs/wast-parser": "1.8.5"
+ "@webassemblyjs/helper-module-context": "1.9.0",
+ "@webassemblyjs/helper-wasm-bytecode": "1.9.0",
+ "@webassemblyjs/wast-parser": "1.9.0"
}
},
"@webassemblyjs/floating-point-hex-parser": {
- "version": "1.8.5",
- "resolved": "https://registry.npmjs.org/@webassemblyjs/floating-point-hex-parser/-/floating-point-hex-parser-1.8.5.tgz",
- "integrity": "sha512-9p+79WHru1oqBh9ewP9zW95E3XAo+90oth7S5Re3eQnECGq59ly1Ri5tsIipKGpiStHsUYmY3zMLqtk3gTcOtQ==",
+ "version": "1.9.0",
+ "resolved": "https://registry.npmjs.org/@webassemblyjs/floating-point-hex-parser/-/floating-point-hex-parser-1.9.0.tgz",
+ "integrity": "sha512-TG5qcFsS8QB4g4MhrxK5TqfdNe7Ey/7YL/xN+36rRjl/BlGE/NcBvJcqsRgCP6Z92mRE+7N50pRIi8SmKUbcQA==",
"dev": true
},
"@webassemblyjs/helper-api-error": {
- "version": "1.8.5",
- "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-api-error/-/helper-api-error-1.8.5.tgz",
- "integrity": "sha512-Za/tnzsvnqdaSPOUXHyKJ2XI7PDX64kWtURyGiJJZKVEdFOsdKUCPTNEVFZq3zJ2R0G5wc2PZ5gvdTRFgm81zA==",
+ "version": "1.9.0",
+ "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-api-error/-/helper-api-error-1.9.0.tgz",
+ "integrity": "sha512-NcMLjoFMXpsASZFxJ5h2HZRcEhDkvnNFOAKneP5RbKRzaWJN36NC4jqQHKwStIhGXu5mUWlUUk7ygdtrO8lbmw==",
"dev": true
},
"@webassemblyjs/helper-buffer": {
- "version": "1.8.5",
- "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-buffer/-/helper-buffer-1.8.5.tgz",
- "integrity": "sha512-Ri2R8nOS0U6G49Q86goFIPNgjyl6+oE1abW1pS84BuhP1Qcr5JqMwRFT3Ah3ADDDYGEgGs1iyb1DGX+kAi/c/Q==",
+ "version": "1.9.0",
+ "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-buffer/-/helper-buffer-1.9.0.tgz",
+ "integrity": "sha512-qZol43oqhq6yBPx7YM3m9Bv7WMV9Eevj6kMi6InKOuZxhw+q9hOkvq5e/PpKSiLfyetpaBnogSbNCfBwyB00CA==",
"dev": true
},
"@webassemblyjs/helper-code-frame": {
- "version": "1.8.5",
- "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-code-frame/-/helper-code-frame-1.8.5.tgz",
- "integrity": "sha512-VQAadSubZIhNpH46IR3yWO4kZZjMxN1opDrzePLdVKAZ+DFjkGD/rf4v1jap744uPVU6yjL/smZbRIIJTOUnKQ==",
+ "version": "1.9.0",
+ "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-code-frame/-/helper-code-frame-1.9.0.tgz",
+ "integrity": "sha512-ERCYdJBkD9Vu4vtjUYe8LZruWuNIToYq/ME22igL+2vj2dQ2OOujIZr3MEFvfEaqKoVqpsFKAGsRdBSBjrIvZA==",
"dev": true,
"requires": {
- "@webassemblyjs/wast-printer": "1.8.5"
+ "@webassemblyjs/wast-printer": "1.9.0"
}
},
"@webassemblyjs/helper-fsm": {
- "version": "1.8.5",
- "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-fsm/-/helper-fsm-1.8.5.tgz",
- "integrity": "sha512-kRuX/saORcg8se/ft6Q2UbRpZwP4y7YrWsLXPbbmtepKr22i8Z4O3V5QE9DbZK908dh5Xya4Un57SDIKwB9eow==",
+ "version": "1.9.0",
+ "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-fsm/-/helper-fsm-1.9.0.tgz",
+ "integrity": "sha512-OPRowhGbshCb5PxJ8LocpdX9Kl0uB4XsAjl6jH/dWKlk/mzsANvhwbiULsaiqT5GZGT9qinTICdj6PLuM5gslw==",
"dev": true
},
"@webassemblyjs/helper-module-context": {
- "version": "1.8.5",
- "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-module-context/-/helper-module-context-1.8.5.tgz",
- "integrity": "sha512-/O1B236mN7UNEU4t9X7Pj38i4VoU8CcMHyy3l2cV/kIF4U5KoHXDVqcDuOs1ltkac90IM4vZdHc52t1x8Yfs3g==",
+ "version": "1.9.0",
+ "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-module-context/-/helper-module-context-1.9.0.tgz",
+ "integrity": "sha512-MJCW8iGC08tMk2enck1aPW+BE5Cw8/7ph/VGZxwyvGbJwjktKkDK7vy7gAmMDx88D7mhDTCNKAW5tED+gZ0W8g==",
"dev": true,
"requires": {
- "@webassemblyjs/ast": "1.8.5",
- "mamacro": "^0.0.3"
+ "@webassemblyjs/ast": "1.9.0"
}
},
"@webassemblyjs/helper-wasm-bytecode": {
- "version": "1.8.5",
- "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-wasm-bytecode/-/helper-wasm-bytecode-1.8.5.tgz",
- "integrity": "sha512-Cu4YMYG3Ddl72CbmpjU/wbP6SACcOPVbHN1dI4VJNJVgFwaKf1ppeFJrwydOG3NDHxVGuCfPlLZNyEdIYlQ6QQ==",
+ "version": "1.9.0",
+ "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-wasm-bytecode/-/helper-wasm-bytecode-1.9.0.tgz",
+ "integrity": "sha512-R7FStIzyNcd7xKxCZH5lE0Bqy+hGTwS3LJjuv1ZVxd9O7eHCedSdrId/hMOd20I+v8wDXEn+bjfKDLzTepoaUw==",
"dev": true
},
"@webassemblyjs/helper-wasm-section": {
- "version": "1.8.5",
- "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-wasm-section/-/helper-wasm-section-1.8.5.tgz",
- "integrity": "sha512-VV083zwR+VTrIWWtgIUpqfvVdK4ff38loRmrdDBgBT8ADXYsEZ5mPQ4Nde90N3UYatHdYoDIFb7oHzMncI02tA==",
+ "version": "1.9.0",
+ "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-wasm-section/-/helper-wasm-section-1.9.0.tgz",
+ "integrity": "sha512-XnMB8l3ek4tvrKUUku+IVaXNHz2YsJyOOmz+MMkZvh8h1uSJpSen6vYnw3IoQ7WwEuAhL8Efjms1ZWjqh2agvw==",
"dev": true,
"requires": {
- "@webassemblyjs/ast": "1.8.5",
- "@webassemblyjs/helper-buffer": "1.8.5",
- "@webassemblyjs/helper-wasm-bytecode": "1.8.5",
- "@webassemblyjs/wasm-gen": "1.8.5"
+ "@webassemblyjs/ast": "1.9.0",
+ "@webassemblyjs/helper-buffer": "1.9.0",
+ "@webassemblyjs/helper-wasm-bytecode": "1.9.0",
+ "@webassemblyjs/wasm-gen": "1.9.0"
}
},
"@webassemblyjs/ieee754": {
- "version": "1.8.5",
- "resolved": "https://registry.npmjs.org/@webassemblyjs/ieee754/-/ieee754-1.8.5.tgz",
- "integrity": "sha512-aaCvQYrvKbY/n6wKHb/ylAJr27GglahUO89CcGXMItrOBqRarUMxWLJgxm9PJNuKULwN5n1csT9bYoMeZOGF3g==",
+ "version": "1.9.0",
+ "resolved": "https://registry.npmjs.org/@webassemblyjs/ieee754/-/ieee754-1.9.0.tgz",
+ "integrity": "sha512-dcX8JuYU/gvymzIHc9DgxTzUUTLexWwt8uCTWP3otys596io0L5aW02Gb1RjYpx2+0Jus1h4ZFqjla7umFniTg==",
"dev": true,
"requires": {
"@xtuc/ieee754": "^1.2.0"
}
},
"@webassemblyjs/leb128": {
- "version": "1.8.5",
- "resolved": "https://registry.npmjs.org/@webassemblyjs/leb128/-/leb128-1.8.5.tgz",
- "integrity": "sha512-plYUuUwleLIziknvlP8VpTgO4kqNaH57Y3JnNa6DLpu/sGcP6hbVdfdX5aHAV716pQBKrfuU26BJK29qY37J7A==",
+ "version": "1.9.0",
+ "resolved": "https://registry.npmjs.org/@webassemblyjs/leb128/-/leb128-1.9.0.tgz",
+ "integrity": "sha512-ENVzM5VwV1ojs9jam6vPys97B/S65YQtv/aanqnU7D8aSoHFX8GyhGg0CMfyKNIHBuAVjy3tlzd5QMMINa7wpw==",
"dev": true,
"requires": {
"@xtuc/long": "4.2.2"
}
},
"@webassemblyjs/utf8": {
- "version": "1.8.5",
- "resolved": "https://registry.npmjs.org/@webassemblyjs/utf8/-/utf8-1.8.5.tgz",
- "integrity": "sha512-U7zgftmQriw37tfD934UNInokz6yTmn29inT2cAetAsaU9YeVCveWEwhKL1Mg4yS7q//NGdzy79nlXh3bT8Kjw==",
+ "version": "1.9.0",
+ "resolved": "https://registry.npmjs.org/@webassemblyjs/utf8/-/utf8-1.9.0.tgz",
+ "integrity": "sha512-GZbQlWtopBTP0u7cHrEx+73yZKrQoBMpwkGEIqlacljhXCkVM1kMQge/Mf+csMJAjEdSwhOyLAS0AoR3AG5P8w==",
"dev": true
},
"@webassemblyjs/wasm-edit": {
- "version": "1.8.5",
- "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-edit/-/wasm-edit-1.8.5.tgz",
- "integrity": "sha512-A41EMy8MWw5yvqj7MQzkDjU29K7UJq1VrX2vWLzfpRHt3ISftOXqrtojn7nlPsZ9Ijhp5NwuODuycSvfAO/26Q==",
+ "version": "1.9.0",
+ "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-edit/-/wasm-edit-1.9.0.tgz",
+ "integrity": "sha512-FgHzBm80uwz5M8WKnMTn6j/sVbqilPdQXTWraSjBwFXSYGirpkSWE2R9Qvz9tNiTKQvoKILpCuTjBKzOIm0nxw==",
"dev": true,
"requires": {
- "@webassemblyjs/ast": "1.8.5",
- "@webassemblyjs/helper-buffer": "1.8.5",
- "@webassemblyjs/helper-wasm-bytecode": "1.8.5",
- "@webassemblyjs/helper-wasm-section": "1.8.5",
- "@webassemblyjs/wasm-gen": "1.8.5",
- "@webassemblyjs/wasm-opt": "1.8.5",
- "@webassemblyjs/wasm-parser": "1.8.5",
- "@webassemblyjs/wast-printer": "1.8.5"
+ "@webassemblyjs/ast": "1.9.0",
+ "@webassemblyjs/helper-buffer": "1.9.0",
+ "@webassemblyjs/helper-wasm-bytecode": "1.9.0",
+ "@webassemblyjs/helper-wasm-section": "1.9.0",
+ "@webassemblyjs/wasm-gen": "1.9.0",
+ "@webassemblyjs/wasm-opt": "1.9.0",
+ "@webassemblyjs/wasm-parser": "1.9.0",
+ "@webassemblyjs/wast-printer": "1.9.0"
}
},
"@webassemblyjs/wasm-gen": {
- "version": "1.8.5",
- "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-gen/-/wasm-gen-1.8.5.tgz",
- "integrity": "sha512-BCZBT0LURC0CXDzj5FXSc2FPTsxwp3nWcqXQdOZE4U7h7i8FqtFK5Egia6f9raQLpEKT1VL7zr4r3+QX6zArWg==",
+ "version": "1.9.0",
+ "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-gen/-/wasm-gen-1.9.0.tgz",
+ "integrity": "sha512-cPE3o44YzOOHvlsb4+E9qSqjc9Qf9Na1OO/BHFy4OI91XDE14MjFN4lTMezzaIWdPqHnsTodGGNP+iRSYfGkjA==",
"dev": true,
"requires": {
- "@webassemblyjs/ast": "1.8.5",
- "@webassemblyjs/helper-wasm-bytecode": "1.8.5",
- "@webassemblyjs/ieee754": "1.8.5",
- "@webassemblyjs/leb128": "1.8.5",
- "@webassemblyjs/utf8": "1.8.5"
+ "@webassemblyjs/ast": "1.9.0",
+ "@webassemblyjs/helper-wasm-bytecode": "1.9.0",
+ "@webassemblyjs/ieee754": "1.9.0",
+ "@webassemblyjs/leb128": "1.9.0",
+ "@webassemblyjs/utf8": "1.9.0"
}
},
"@webassemblyjs/wasm-opt": {
- "version": "1.8.5",
- "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-opt/-/wasm-opt-1.8.5.tgz",
- "integrity": "sha512-HKo2mO/Uh9A6ojzu7cjslGaHaUU14LdLbGEKqTR7PBKwT6LdPtLLh9fPY33rmr5wcOMrsWDbbdCHq4hQUdd37Q==",
+ "version": "1.9.0",
+ "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-opt/-/wasm-opt-1.9.0.tgz",
+ "integrity": "sha512-Qkjgm6Anhm+OMbIL0iokO7meajkzQD71ioelnfPEj6r4eOFuqm4YC3VBPqXjFyyNwowzbMD+hizmprP/Fwkl2A==",
"dev": true,
"requires": {
- "@webassemblyjs/ast": "1.8.5",
- "@webassemblyjs/helper-buffer": "1.8.5",
- "@webassemblyjs/wasm-gen": "1.8.5",
- "@webassemblyjs/wasm-parser": "1.8.5"
+ "@webassemblyjs/ast": "1.9.0",
+ "@webassemblyjs/helper-buffer": "1.9.0",
+ "@webassemblyjs/wasm-gen": "1.9.0",
+ "@webassemblyjs/wasm-parser": "1.9.0"
}
},
"@webassemblyjs/wasm-parser": {
- "version": "1.8.5",
- "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-parser/-/wasm-parser-1.8.5.tgz",
- "integrity": "sha512-pi0SYE9T6tfcMkthwcgCpL0cM9nRYr6/6fjgDtL6q/ZqKHdMWvxitRi5JcZ7RI4SNJJYnYNaWy5UUrHQy998lw==",
+ "version": "1.9.0",
+ "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-parser/-/wasm-parser-1.9.0.tgz",
+ "integrity": "sha512-9+wkMowR2AmdSWQzsPEjFU7njh8HTO5MqO8vjwEHuM+AMHioNqSBONRdr0NQQ3dVQrzp0s8lTcYqzUdb7YgELA==",
"dev": true,
"requires": {
- "@webassemblyjs/ast": "1.8.5",
- "@webassemblyjs/helper-api-error": "1.8.5",
- "@webassemblyjs/helper-wasm-bytecode": "1.8.5",
- "@webassemblyjs/ieee754": "1.8.5",
- "@webassemblyjs/leb128": "1.8.5",
- "@webassemblyjs/utf8": "1.8.5"
+ "@webassemblyjs/ast": "1.9.0",
+ "@webassemblyjs/helper-api-error": "1.9.0",
+ "@webassemblyjs/helper-wasm-bytecode": "1.9.0",
+ "@webassemblyjs/ieee754": "1.9.0",
+ "@webassemblyjs/leb128": "1.9.0",
+ "@webassemblyjs/utf8": "1.9.0"
}
},
"@webassemblyjs/wast-parser": {
- "version": "1.8.5",
- "resolved": "https://registry.npmjs.org/@webassemblyjs/wast-parser/-/wast-parser-1.8.5.tgz",
- "integrity": "sha512-daXC1FyKWHF1i11obK086QRlsMsY4+tIOKgBqI1lxAnkp9xe9YMcgOxm9kLe+ttjs5aWV2KKE1TWJCN57/Btsg==",
+ "version": "1.9.0",
+ "resolved": "https://registry.npmjs.org/@webassemblyjs/wast-parser/-/wast-parser-1.9.0.tgz",
+ "integrity": "sha512-qsqSAP3QQ3LyZjNC/0jBJ/ToSxfYJ8kYyuiGvtn/8MK89VrNEfwj7BPQzJVHi0jGTRK2dGdJ5PRqhtjzoww+bw==",
"dev": true,
"requires": {
- "@webassemblyjs/ast": "1.8.5",
- "@webassemblyjs/floating-point-hex-parser": "1.8.5",
- "@webassemblyjs/helper-api-error": "1.8.5",
- "@webassemblyjs/helper-code-frame": "1.8.5",
- "@webassemblyjs/helper-fsm": "1.8.5",
+ "@webassemblyjs/ast": "1.9.0",
+ "@webassemblyjs/floating-point-hex-parser": "1.9.0",
+ "@webassemblyjs/helper-api-error": "1.9.0",
+ "@webassemblyjs/helper-code-frame": "1.9.0",
+ "@webassemblyjs/helper-fsm": "1.9.0",
"@xtuc/long": "4.2.2"
}
},
"@webassemblyjs/wast-printer": {
- "version": "1.8.5",
- "resolved": "https://registry.npmjs.org/@webassemblyjs/wast-printer/-/wast-printer-1.8.5.tgz",
- "integrity": "sha512-w0U0pD4EhlnvRyeJzBqaVSJAo9w/ce7/WPogeXLzGkO6hzhr4GnQIZ4W4uUt5b9ooAaXPtnXlj0gzsXEOUNYMg==",
+ "version": "1.9.0",
+ "resolved": "https://registry.npmjs.org/@webassemblyjs/wast-printer/-/wast-printer-1.9.0.tgz",
+ "integrity": "sha512-2J0nE95rHXHyQ24cWjMKJ1tqB/ds8z/cyeOZxJhcb+rW+SQASVjuznUSmdz5GpVJTzU8JkhYut0D3siFDD6wsA==",
"dev": true,
"requires": {
- "@webassemblyjs/ast": "1.8.5",
- "@webassemblyjs/wast-parser": "1.8.5",
+ "@webassemblyjs/ast": "1.9.0",
+ "@webassemblyjs/wast-parser": "1.9.0",
"@xtuc/long": "4.2.2"
}
},
"integrity": "sha512-ZVA9k326Nwrj3Cj9jlh3wGFutC2ZornPNARZwsNYqQYgN0EsV2d53w5RN/co65Ohn4sUAUtb1rSUAOD6XN9idA==",
"dev": true
},
+ "aggregate-error": {
+ "version": "3.0.1",
+ "resolved": "https://registry.npmjs.org/aggregate-error/-/aggregate-error-3.0.1.tgz",
+ "integrity": "sha512-quoaXsZ9/BLNae5yiNoUz+Nhkwz83GhWwtYFglcjEQB2NDHCIpApbqXxIFnm4Pq/Nvhrsq5sYJFyohrrxnTGAA==",
+ "dev": true,
+ "requires": {
+ "clean-stack": "^2.0.0",
+ "indent-string": "^4.0.0"
+ }
+ },
"ajv": {
"version": "6.10.0",
"resolved": "https://registry.npmjs.org/ajv/-/ajv-6.10.0.tgz",
}
},
"anymatch": {
- "version": "2.0.0",
- "resolved": "https://registry.npmjs.org/anymatch/-/anymatch-2.0.0.tgz",
- "integrity": "sha512-5teOsQWABXHHBFP9y3skS5P3d/WfWXpv3FUpy+LorMrNYaT9pI4oLMQX7jzQ2KklNpGpWHzdCXTDT2Y3XGlZBw==",
+ "version": "3.1.1",
+ "resolved": "https://registry.npmjs.org/anymatch/-/anymatch-3.1.1.tgz",
+ "integrity": "sha512-mM8522psRCqzV+6LhomX5wgp25YVibjh8Wj23I5RPkPppSVSjyKD2A2mBJmWGa+KN7f2D6LNh9jkBCeyLktzjg==",
"dev": true,
"requires": {
- "micromatch": "^3.1.4",
- "normalize-path": "^2.1.1"
- },
- "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"
- }
- }
+ "normalize-path": "^3.0.0",
+ "picomatch": "^2.0.4"
}
},
"append-transform": {
- "version": "1.0.0",
- "resolved": "https://registry.npmjs.org/append-transform/-/append-transform-1.0.0.tgz",
- "integrity": "sha512-P009oYkeHyU742iSZJzZZywj4QRJdnTWffaKuJQLablCZ1uz6/cW4yaRgcDaoQ+uwOxxnt0gRUcwfsNP2ri0gw==",
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/append-transform/-/append-transform-2.0.0.tgz",
+ "integrity": "sha512-7yeyCEurROLQJFv5Xj4lEGTy0borxepjFv1g22oAdqFu//SrAlDl1O1Nxx15SH1RoliUml6p8dwJW9jvZughhg==",
"dev": true,
"requires": {
- "default-require-extensions": "^2.0.0"
+ "default-require-extensions": "^3.0.0"
}
},
"aproba": {
"integrity": "sha1-qJS3XUvE9s1nnvMkSp/Y9Gri1Cg=",
"dev": true
},
+ "array.prototype.map": {
+ "version": "1.0.2",
+ "resolved": "https://registry.npmjs.org/array.prototype.map/-/array.prototype.map-1.0.2.tgz",
+ "integrity": "sha512-Az3OYxgsa1g7xDYp86l0nnN4bcmuEITGe1rbdEBVkrqkzMgDcbdQ2R7r41pNzti+4NMces3H8gMmuioZUilLgw==",
+ "dev": true,
+ "requires": {
+ "define-properties": "^1.1.3",
+ "es-abstract": "^1.17.0-next.1",
+ "es-array-method-boxes-properly": "^1.0.0",
+ "is-string": "^1.0.4"
+ }
+ },
"asn1.js": {
"version": "4.10.1",
"resolved": "https://registry.npmjs.org/asn1.js/-/asn1.js-4.10.1.tgz",
"bn.js": "^4.0.0",
"inherits": "^2.0.1",
"minimalistic-assert": "^1.0.0"
+ },
+ "dependencies": {
+ "bn.js": {
+ "version": "4.11.9",
+ "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-4.11.9.tgz",
+ "integrity": "sha512-E6QoYqCKZfgatHTdHzs1RRKP7ip4vvm+EyRUeE2RF0NblwVvb0p6jSVeNTOFxPn26QXN2o6SMfNxKp6kU8zQaw==",
+ "dev": true
+ }
}
},
"assert": {
"dev": true
},
"babel-plugin-dynamic-import-node": {
- "version": "2.3.0",
- "resolved": "https://registry.npmjs.org/babel-plugin-dynamic-import-node/-/babel-plugin-dynamic-import-node-2.3.0.tgz",
- "integrity": "sha512-o6qFkpeQEBxcqt0XYlWzAVxNCSCZdUgcR8IRlhD/8DylxjjO4foPcvTW0GGKa/cVt3rvxZ7o5ippJ+/0nvLhlQ==",
+ "version": "2.3.3",
+ "resolved": "https://registry.npmjs.org/babel-plugin-dynamic-import-node/-/babel-plugin-dynamic-import-node-2.3.3.tgz",
+ "integrity": "sha512-jZVI+s9Zg3IqA/kdi0i6UDCybUI3aSBLnglhYbSSjKlV7yF1F/5LWv8MakQmvYpnbJDS6fcBL2KzHSxNCMtWSQ==",
"dev": true,
"requires": {
"object.assign": "^4.1.0"
"dev": true
},
"binary-extensions": {
- "version": "1.13.1",
- "resolved": "https://registry.npmjs.org/binary-extensions/-/binary-extensions-1.13.1.tgz",
- "integrity": "sha512-Un7MIEDdUC5gNpcGDV97op1Ywk748MpHcFTHoYs6qnj1Z3j7I53VG3nwZhKzoBZmbdRNnb6WRdFlwl7tSDuZGw==",
+ "version": "2.1.0",
+ "resolved": "https://registry.npmjs.org/binary-extensions/-/binary-extensions-2.1.0.tgz",
+ "integrity": "sha512-1Yj8h9Q+QDF5FzhMs/c9+6UntbD5MkRfRwac8DoEm9ZfUBZ7tZ55YcGVAzEe4bXsdQHEk+s9S5wsOKVdZrw0tQ==",
"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"
- }
- },
"bluebird": {
"version": "3.7.2",
"resolved": "https://registry.npmjs.org/bluebird/-/bluebird-3.7.2.tgz",
"dev": true
},
"bn.js": {
- "version": "4.11.8",
- "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-4.11.8.tgz",
- "integrity": "sha512-ItfYfPLkWHUjckQCk8xC+LwxgK8NYcXywGigJgSwOP8Y2iyWT4f2vsZnoOXTTbo+o5yXmIUJ4gn5538SO5S3gA==",
+ "version": "5.1.2",
+ "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-5.1.2.tgz",
+ "integrity": "sha512-40rZaf3bUNKTVYu9sIeeEGOg7g14Yvnj9kH7b50EiwX0Q7A6umbvfI5tvHaOERH0XigqKkfLkFQxzb4e6CIXnA==",
"dev": true
},
"body-parser": {
"requires": {
"bn.js": "^4.1.0",
"randombytes": "^2.0.1"
+ },
+ "dependencies": {
+ "bn.js": {
+ "version": "4.11.9",
+ "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-4.11.9.tgz",
+ "integrity": "sha512-E6QoYqCKZfgatHTdHzs1RRKP7ip4vvm+EyRUeE2RF0NblwVvb0p6jSVeNTOFxPn26QXN2o6SMfNxKp6kU8zQaw==",
+ "dev": true
+ }
}
},
"browserify-sign": {
- "version": "4.0.4",
- "resolved": "https://registry.npmjs.org/browserify-sign/-/browserify-sign-4.0.4.tgz",
- "integrity": "sha1-qk62jl17ZYuqa/alfmMMvXqT0pg=",
- "dev": true,
- "requires": {
- "bn.js": "^4.1.1",
- "browserify-rsa": "^4.0.0",
- "create-hash": "^1.1.0",
- "create-hmac": "^1.1.2",
- "elliptic": "^6.0.0",
- "inherits": "^2.0.1",
- "parse-asn1": "^5.0.0"
- }
- },
- "browserify-zlib": {
- "version": "0.2.0",
+ "version": "4.2.0",
+ "resolved": "https://registry.npmjs.org/browserify-sign/-/browserify-sign-4.2.0.tgz",
+ "integrity": "sha512-hEZC1KEeYuoHRqhGhTy6gWrpJA3ZDjFWv0DE61643ZnOXAKJb3u7yWcrU0mMc9SwAqK1n7myPGndkp0dFG7NFA==",
+ "dev": true,
+ "requires": {
+ "bn.js": "^5.1.1",
+ "browserify-rsa": "^4.0.1",
+ "create-hash": "^1.2.0",
+ "create-hmac": "^1.1.7",
+ "elliptic": "^6.5.2",
+ "inherits": "^2.0.4",
+ "parse-asn1": "^5.1.5",
+ "readable-stream": "^3.6.0",
+ "safe-buffer": "^5.2.0"
+ },
+ "dependencies": {
+ "inherits": {
+ "version": "2.0.4",
+ "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.4.tgz",
+ "integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==",
+ "dev": true
+ },
+ "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"
+ }
+ },
+ "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
+ }
+ }
+ },
+ "browserify-zlib": {
+ "version": "0.2.0",
"resolved": "https://registry.npmjs.org/browserify-zlib/-/browserify-zlib-0.2.0.tgz",
"integrity": "sha512-Z942RysHXmJrhqk88FmKBVq/v5tqmSkDz7p54G/MGyjMnCFFnC79XWNbg+Vta8W6Wb2qtSZTSxIGkJrRpCFEiA==",
"dev": true,
}
},
"browserslist": {
- "version": "4.8.6",
- "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-4.8.6.tgz",
- "integrity": "sha512-ZHao85gf0eZ0ESxLfCp73GG9O/VTytYDIkIiZDlURppLTI9wErSM/5yAKEq6rcUdxBLjMELmrYUJGg5sxGKMHg==",
+ "version": "4.13.0",
+ "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-4.13.0.tgz",
+ "integrity": "sha512-MINatJ5ZNrLnQ6blGvePd/QOz9Xtu+Ne+x29iQSCHfkU5BugKVJwZKn/iiL8UbpIpa3JhviKjz+XxMo0m2caFQ==",
"dev": true,
"requires": {
- "caniuse-lite": "^1.0.30001023",
- "electron-to-chromium": "^1.3.341",
- "node-releases": "^1.1.47"
+ "caniuse-lite": "^1.0.30001093",
+ "electron-to-chromium": "^1.3.488",
+ "escalade": "^3.0.1",
+ "node-releases": "^1.1.58"
}
},
"buffer": {
}
},
"caching-transform": {
- "version": "3.0.2",
- "resolved": "https://registry.npmjs.org/caching-transform/-/caching-transform-3.0.2.tgz",
- "integrity": "sha512-Mtgcv3lh3U0zRii/6qVgQODdPA4G3zhG+jtbCWj39RXuUFTMzH0vcdMtaJS1jPowd+It2Pqr6y3NJMQqOqCE2w==",
+ "version": "4.0.0",
+ "resolved": "https://registry.npmjs.org/caching-transform/-/caching-transform-4.0.0.tgz",
+ "integrity": "sha512-kpqOvwXnjjN44D89K5ccQC+RUrsy7jB/XLlRrx0D7/2HNcTPqzsb6XgYoErwko6QsV184CA2YgS1fxDiiDZMWA==",
"dev": true,
"requires": {
- "hasha": "^3.0.0",
- "make-dir": "^2.0.0",
- "package-hash": "^3.0.0",
- "write-file-atomic": "^2.4.2"
+ "hasha": "^5.0.0",
+ "make-dir": "^3.0.0",
+ "package-hash": "^4.0.0",
+ "write-file-atomic": "^3.0.0"
+ },
+ "dependencies": {
+ "make-dir": {
+ "version": "3.1.0",
+ "resolved": "https://registry.npmjs.org/make-dir/-/make-dir-3.1.0.tgz",
+ "integrity": "sha512-g3FeP20LNwhALb/6Cz6Dd4F2ngze0jz7tbzrD2wAV+o9FeNHe4rL+yK2md0J/fiSf1sa1ADhXqi5+oVwOM/eGw==",
+ "dev": true,
+ "requires": {
+ "semver": "^6.0.0"
+ }
+ },
+ "semver": {
+ "version": "6.3.0",
+ "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz",
+ "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==",
+ "dev": true
+ }
}
},
"camelcase": {
"dev": true
},
"caniuse-lite": {
- "version": "1.0.30001024",
- "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001024.tgz",
- "integrity": "sha512-LubRSEPpOlKlhZw9wGlLHo8ZVj6ugGU3xGUfLPneNBledSd9lIM5cCGZ9Mz/mMCJUhEt4jZpYteZNVRdJw5FRA==",
+ "version": "1.0.30001097",
+ "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001097.tgz",
+ "integrity": "sha512-TeuSleKt/vWXaPkLVFqGDnbweYfq4IaZ6rUugFf3rWY6dlII8StUZ8Ddin0PkADfgYZ4wRqCdO2ORl4Rn5eZIA==",
"dev": true
},
"chalk": {
}
},
"chokidar": {
- "version": "2.1.8",
- "resolved": "https://registry.npmjs.org/chokidar/-/chokidar-2.1.8.tgz",
- "integrity": "sha512-ZmZUazfOzf0Nve7duiCKD23PFSCs4JPoYyccjUFF3aQkQadqBhfzhjkwBH2mNOG9cTBwhamM37EIsIkZw3nRgg==",
+ "version": "3.4.0",
+ "resolved": "https://registry.npmjs.org/chokidar/-/chokidar-3.4.0.tgz",
+ "integrity": "sha512-aXAaho2VJtisB/1fg1+3nlLJqGOuewTzQpd/Tz0yTg2R0e4IGtshYvtjowyEumcBv2z+y4+kc75Mz7j5xJskcQ==",
"dev": true,
+ "optional": 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"
+ "anymatch": "~3.1.1",
+ "braces": "~3.0.2",
+ "fsevents": "~2.1.2",
+ "glob-parent": "~5.1.0",
+ "is-binary-path": "~2.1.0",
+ "is-glob": "~4.0.1",
+ "normalize-path": "~3.0.0",
+ "readdirp": "~3.4.0"
+ },
+ "dependencies": {
+ "braces": {
+ "version": "3.0.2",
+ "resolved": "https://registry.npmjs.org/braces/-/braces-3.0.2.tgz",
+ "integrity": "sha512-b8um+L1RzM3WDSzvhm6gIz1yfTbBt6YTlcEKAvsmqCZZFw46z626lVj9j1yEPW33H5H+lBQpZMP1k8l+78Ha0A==",
+ "dev": true,
+ "optional": true,
+ "requires": {
+ "fill-range": "^7.0.1"
+ }
+ },
+ "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,
+ "optional": true,
+ "requires": {
+ "to-regex-range": "^5.0.1"
+ }
+ },
+ "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,
+ "optional": true
+ },
+ "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,
+ "optional": true,
+ "requires": {
+ "is-number": "^7.0.0"
+ }
+ }
}
},
"chownr": {
}
}
},
+ "clean-stack": {
+ "version": "2.2.0",
+ "resolved": "https://registry.npmjs.org/clean-stack/-/clean-stack-2.2.0.tgz",
+ "integrity": "sha512-4diC9HaTE+KRAMWhDhrGOECgWZxoevMc5TlkObMqNSsVU62PYzXZ/SMTjzyGAFF1YusgxGcSWTEXBhp0CPwQ1A==",
+ "dev": true
+ },
"cliui": {
- "version": "4.1.0",
- "resolved": "https://registry.npmjs.org/cliui/-/cliui-4.1.0.tgz",
- "integrity": "sha512-4FG+RSG9DL7uEwRUZXZn3SS34DiDPfzP0VOiEwtUWlE+AR2EIg+hSyvrIgUUfhdgR/UkAeW2QHgeP+hWrXs7jQ==",
+ "version": "5.0.0",
+ "resolved": "https://registry.npmjs.org/cliui/-/cliui-5.0.0.tgz",
+ "integrity": "sha512-PYeGSEmmHM6zvoef2w8TPzlrnNpXIjTipYK780YswmIP9vjxmd6Y2a3CB2Ks6/AU8NHjZugXvo8w3oWM2qnwXA==",
"dev": true,
"requires": {
- "string-width": "^2.1.1",
- "strip-ansi": "^4.0.0",
- "wrap-ansi": "^2.0.0"
+ "string-width": "^3.1.0",
+ "strip-ansi": "^5.2.0",
+ "wrap-ansi": "^5.1.0"
+ },
+ "dependencies": {
+ "ansi-regex": {
+ "version": "4.1.0",
+ "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-4.1.0.tgz",
+ "integrity": "sha512-1apePfXM1UOSqw0o9IiFAovVz9M5S1Dg+4TrDwfMewQ6p/rmMueb7tWZjQ1rx4Loy1ArBggoqGpfqqdI4rondg==",
+ "dev": true
+ },
+ "string-width": {
+ "version": "3.1.0",
+ "resolved": "https://registry.npmjs.org/string-width/-/string-width-3.1.0.tgz",
+ "integrity": "sha512-vafcv6KjVZKSgz06oM/H6GDBrAtz8vdhQakGjFIvNrHA6y3HCF1CInLy+QLq8dTJPQ1b+KDUqDFctkdRW44e1w==",
+ "dev": true,
+ "requires": {
+ "emoji-regex": "^7.0.1",
+ "is-fullwidth-code-point": "^2.0.0",
+ "strip-ansi": "^5.1.0"
+ }
+ },
+ "strip-ansi": {
+ "version": "5.2.0",
+ "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-5.2.0.tgz",
+ "integrity": "sha512-DuRs1gKbBqsMKIZlrffwlug8MHkcnpjs5VPmL1PAh+mA30U0DTotfDZ0d2UUsXpPmPmMMJ6W773MaA3J+lbiWA==",
+ "dev": true,
+ "requires": {
+ "ansi-regex": "^4.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
+ "clone-deep": {
+ "version": "4.0.1",
+ "resolved": "https://registry.npmjs.org/clone-deep/-/clone-deep-4.0.1.tgz",
+ "integrity": "sha512-neHB9xuzh/wk0dIHweyAXv2aPGZIVk3pLMe+/RNzINf17fe0OG96QroktYAUm7SM1PBnzTabaLboqqxDyMU+SQ==",
+ "dev": true,
+ "requires": {
+ "is-plain-object": "^2.0.4",
+ "kind-of": "^6.0.2",
+ "shallow-clone": "^3.0.0"
+ }
},
"collection-visit": {
"version": "1.0.0",
"integrity": "sha1-Z29us8OZl8LuGsOpJP1hJHSPV40=",
"dev": true
},
+ "core-js": {
+ "version": "2.6.11",
+ "resolved": "https://registry.npmjs.org/core-js/-/core-js-2.6.11.tgz",
+ "integrity": "sha512-5wjnpaT/3dV+XB4borEsnAYQchn00XSgTAWKDkEqv+K8KevjbzmofK6hfJ9TZIlpj2N0xQpazy7PiRQiWHqzWg==",
+ "dev": true
+ },
"core-js-compat": {
- "version": "3.6.4",
- "resolved": "https://registry.npmjs.org/core-js-compat/-/core-js-compat-3.6.4.tgz",
- "integrity": "sha512-zAa3IZPvsJ0slViBQ2z+vgyyTuhd3MFn1rBQjZSKVEgB0UMYhUkCj9jJUVPgGTGqWvsBVmfnruXgTcNyTlEiSA==",
+ "version": "3.6.5",
+ "resolved": "https://registry.npmjs.org/core-js-compat/-/core-js-compat-3.6.5.tgz",
+ "integrity": "sha512-7ItTKOhOZbznhXAQ2g/slGg1PJV5zDO/WdkTwi7UEOJmkvsE32PWvx6mKtDjiMpjnR2CNf6BAD6sSxIlv7ptng==",
"dev": true,
"requires": {
- "browserslist": "^4.8.3",
+ "browserslist": "^4.8.5",
"semver": "7.0.0"
},
"dependencies": {
"integrity": "sha1-tf1UIgqivFq1eqtxQMlAdUUDwac=",
"dev": true
},
- "cp-file": {
- "version": "6.2.0",
- "resolved": "https://registry.npmjs.org/cp-file/-/cp-file-6.2.0.tgz",
- "integrity": "sha512-fmvV4caBnofhPe8kOcitBwSn2f39QLjnAnGq3gO9dfd75mUytzKNZB1hde6QHunW2Rt+OwuBOMc3i1tNElbszA==",
- "dev": true,
- "requires": {
- "graceful-fs": "^4.1.2",
- "make-dir": "^2.0.0",
- "nested-error-stacks": "^2.0.0",
- "pify": "^4.0.1",
- "safe-buffer": "^5.0.1"
- }
- },
"create-ecdh": {
"version": "4.0.3",
"resolved": "https://registry.npmjs.org/create-ecdh/-/create-ecdh-4.0.3.tgz",
"requires": {
"bn.js": "^4.1.0",
"elliptic": "^6.0.0"
+ },
+ "dependencies": {
+ "bn.js": {
+ "version": "4.11.9",
+ "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-4.11.9.tgz",
+ "integrity": "sha512-E6QoYqCKZfgatHTdHzs1RRKP7ip4vvm+EyRUeE2RF0NblwVvb0p6jSVeNTOFxPn26QXN2o6SMfNxKp6kU8zQaw==",
+ "dev": true
+ }
}
},
"create-hash": {
}
},
"css-loader": {
- "version": "2.1.1",
- "resolved": "https://registry.npmjs.org/css-loader/-/css-loader-2.1.1.tgz",
- "integrity": "sha512-OcKJU/lt232vl1P9EEDamhoO9iKY3tIjY5GU+XDLblAykTdgs6Ux9P1hTHve8nFKy5KPpOXOsVI/hIwi3841+w==",
+ "version": "3.6.0",
+ "resolved": "https://registry.npmjs.org/css-loader/-/css-loader-3.6.0.tgz",
+ "integrity": "sha512-M5lSukoWi1If8dhQAUCvj4H8vUt3vOnwbQBH9DdTm/s4Ym2B/3dPMtYZeJmq7Q3S3Pa+I94DcZ7pc9bP14cWIQ==",
"dev": true,
"requires": {
- "camelcase": "^5.2.0",
- "icss-utils": "^4.1.0",
+ "camelcase": "^5.3.1",
+ "cssesc": "^3.0.0",
+ "icss-utils": "^4.1.1",
"loader-utils": "^1.2.3",
"normalize-path": "^3.0.0",
- "postcss": "^7.0.14",
+ "postcss": "^7.0.32",
"postcss-modules-extract-imports": "^2.0.0",
- "postcss-modules-local-by-default": "^2.0.6",
- "postcss-modules-scope": "^2.1.0",
- "postcss-modules-values": "^2.0.0",
- "postcss-value-parser": "^3.3.0",
- "schema-utils": "^1.0.0"
+ "postcss-modules-local-by-default": "^3.0.2",
+ "postcss-modules-scope": "^2.2.0",
+ "postcss-modules-values": "^3.0.0",
+ "postcss-value-parser": "^4.1.0",
+ "schema-utils": "^2.7.0",
+ "semver": "^6.3.0"
+ },
+ "dependencies": {
+ "ajv": {
+ "version": "6.12.3",
+ "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.12.3.tgz",
+ "integrity": "sha512-4K0cK3L1hsqk9xIb2z9vs/XU+PGJZ9PNpJRDS9YLzmNdX6jmVPfamLvTJr0aDAusnHyCHO6MjzlkAsgtqp9teA==",
+ "dev": true,
+ "requires": {
+ "fast-deep-equal": "^3.1.1",
+ "fast-json-stable-stringify": "^2.0.0",
+ "json-schema-traverse": "^0.4.1",
+ "uri-js": "^4.2.2"
+ }
+ },
+ "ajv-keywords": {
+ "version": "3.5.1",
+ "resolved": "https://registry.npmjs.org/ajv-keywords/-/ajv-keywords-3.5.1.tgz",
+ "integrity": "sha512-KWcq3xN8fDjSB+IMoh2VaXVhRI0BBGxoYp3rx7Pkb6z0cFjYR9Q9l4yZqqals0/zsioCmocC5H6UvsGD4MoIBA==",
+ "dev": true
+ },
+ "camelcase": {
+ "version": "5.3.1",
+ "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-5.3.1.tgz",
+ "integrity": "sha512-L28STB170nwWS63UjtlEOE3dldQApaJXZkOI1uMFfzf3rRuPegHaHesyee+YxQ+W6SvRDQV6UrdOdRiR153wJg==",
+ "dev": true
+ },
+ "fast-deep-equal": {
+ "version": "3.1.3",
+ "resolved": "https://registry.npmjs.org/fast-deep-equal/-/fast-deep-equal-3.1.3.tgz",
+ "integrity": "sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q==",
+ "dev": true
+ },
+ "schema-utils": {
+ "version": "2.7.0",
+ "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-2.7.0.tgz",
+ "integrity": "sha512-0ilKFI6QQF5nxDZLFn2dMjvc4hjg/Wkg7rHd3jK6/A4a1Hl9VFdQWvgB1UMGoU94pad1P/8N7fMcEnLnSiju8A==",
+ "dev": true,
+ "requires": {
+ "@types/json-schema": "^7.0.4",
+ "ajv": "^6.12.2",
+ "ajv-keywords": "^3.4.1"
+ }
+ },
+ "semver": {
+ "version": "6.3.0",
+ "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz",
+ "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==",
+ "dev": true
+ }
}
},
"cssesc": {
}
},
"default-require-extensions": {
- "version": "2.0.0",
- "resolved": "https://registry.npmjs.org/default-require-extensions/-/default-require-extensions-2.0.0.tgz",
- "integrity": "sha1-9fj7sYp9bVCyH2QfZJ67Uiz+JPc=",
+ "version": "3.0.0",
+ "resolved": "https://registry.npmjs.org/default-require-extensions/-/default-require-extensions-3.0.0.tgz",
+ "integrity": "sha512-ek6DpXq/SCpvjhpFsLFRVtIxJCRw6fUR42lYMVZuUMK7n8eMz4Uh5clckdBjEpLhn/gEBZo7hDJnJcwdKLKQjg==",
"dev": true,
"requires": {
- "strip-bom": "^3.0.0"
+ "strip-bom": "^4.0.0"
}
},
"define-properties": {
"dev": true
},
"diff": {
- "version": "3.5.0",
- "resolved": "https://registry.npmjs.org/diff/-/diff-3.5.0.tgz",
- "integrity": "sha512-A46qtFgd+g7pDZinpnwiRJtxbC1hpgf0uzP3iG89scHk0AUC7A1TGxf5OiiOUv/JMZR8GOt8hL900hV0bOy5xA==",
+ "version": "4.0.2",
+ "resolved": "https://registry.npmjs.org/diff/-/diff-4.0.2.tgz",
+ "integrity": "sha512-58lmxKSA4BNyLz+HHMUzlOEpg09FV+ev6ZMe3vJihgdxzgcwZ8VoEEPmALCZG9LmqfVoNMMKpttIYTVG6uDY7A==",
"dev": true
},
"diffie-hellman": {
"bn.js": "^4.1.0",
"miller-rabin": "^4.0.0",
"randombytes": "^2.0.0"
+ },
+ "dependencies": {
+ "bn.js": {
+ "version": "4.11.9",
+ "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-4.11.9.tgz",
+ "integrity": "sha512-E6QoYqCKZfgatHTdHzs1RRKP7ip4vvm+EyRUeE2RF0NblwVvb0p6jSVeNTOFxPn26QXN2o6SMfNxKp6kU8zQaw==",
+ "dev": true
+ }
}
},
"dns-equal": {
"dev": true
},
"electron-to-chromium": {
- "version": "1.3.345",
- "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.3.345.tgz",
- "integrity": "sha512-f8nx53+Z9Y+SPWGg3YdHrbYYfIJAtbUjpFfW4X1RwTZ94iUG7geg9tV8HqzAXX7XTNgyWgAFvce4yce8ZKxKmg==",
+ "version": "1.3.496",
+ "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.3.496.tgz",
+ "integrity": "sha512-TXY4mwoyowwi4Lsrq9vcTUYBThyc1b2hXaTZI13p8/FRhY2CTaq5lK+DVjhYkKiTLsKt569Xes+0J5JsVXFurQ==",
"dev": true
},
"elliptic": {
- "version": "6.5.2",
- "resolved": "https://registry.npmjs.org/elliptic/-/elliptic-6.5.2.tgz",
- "integrity": "sha512-f4x70okzZbIQl/NSRLkI/+tteV/9WqL98zx+SQ69KbXxmVrmjwsNUPn/gYJJ0sHvEak24cZgHIPegRePAtA/xw==",
+ "version": "6.5.3",
+ "resolved": "https://registry.npmjs.org/elliptic/-/elliptic-6.5.3.tgz",
+ "integrity": "sha512-IMqzv5wNQf+E6aHeIqATs0tOLeOTwj1QKbRcS3jBbYkl5oLAserA8yJTT7/VyHUYG91PRmPyeQDObKLPpeS4dw==",
"dev": true,
"requires": {
"bn.js": "^4.4.0",
"inherits": "^2.0.1",
"minimalistic-assert": "^1.0.0",
"minimalistic-crypto-utils": "^1.0.0"
+ },
+ "dependencies": {
+ "bn.js": {
+ "version": "4.11.9",
+ "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-4.11.9.tgz",
+ "integrity": "sha512-E6QoYqCKZfgatHTdHzs1RRKP7ip4vvm+EyRUeE2RF0NblwVvb0p6jSVeNTOFxPn26QXN2o6SMfNxKp6kU8zQaw==",
+ "dev": true
+ }
}
},
"emoji-regex": {
"dev": true
},
"end-of-stream": {
- "version": "1.4.1",
- "resolved": "https://registry.npmjs.org/end-of-stream/-/end-of-stream-1.4.1.tgz",
- "integrity": "sha512-1MkrZNvWTKCaigbn+W15elq2BB/L22nqrSY5DKlo3X6+vclJm8Bb5djXJBmEX6fS3+zCh/F4VBK5Z2KxJt4s2Q==",
+ "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"
}
},
"enhanced-resolve": {
- "version": "4.1.1",
- "resolved": "https://registry.npmjs.org/enhanced-resolve/-/enhanced-resolve-4.1.1.tgz",
- "integrity": "sha512-98p2zE+rL7/g/DzMHMTF4zZlCgeVdJ7yr6xzEpJRYwFYrGi9ANdn5DnJURg6RpBkyk60XYDnWIv51VfIhfNGuA==",
+ "version": "4.2.0",
+ "resolved": "https://registry.npmjs.org/enhanced-resolve/-/enhanced-resolve-4.2.0.tgz",
+ "integrity": "sha512-S7eiFb/erugyd1rLb6mQ3Vuq+EXHv5cpCkNqqIkYkBgN2QdFnyCZzFBleqwGEx4lgNGYij81BWnCrFNK7vxvjQ==",
"dev": true,
"requires": {
"graceful-fs": "^4.1.2",
"prr": "~1.0.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"
- }
- },
"es-abstract": {
- "version": "1.17.0",
- "resolved": "https://registry.npmjs.org/es-abstract/-/es-abstract-1.17.0.tgz",
- "integrity": "sha512-yYkE07YF+6SIBmg1MsJ9dlub5L48Ek7X0qz+c/CPCHS9EBXfESorzng4cJQjJW5/pB6vDF41u7F8vUhLVDqIug==",
+ "version": "1.17.6",
+ "resolved": "https://registry.npmjs.org/es-abstract/-/es-abstract-1.17.6.tgz",
+ "integrity": "sha512-Fr89bON3WFyUi5EvAeI48QTWX0AyekGgLA8H+c+7fbfCkJwRWRMLd8CQedNEyJuoYYhmtEqY92pgte1FAhBlhw==",
"dev": true,
"requires": {
"es-to-primitive": "^1.2.1",
"function-bind": "^1.1.1",
"has": "^1.0.3",
"has-symbols": "^1.0.1",
- "is-callable": "^1.1.5",
- "is-regex": "^1.0.5",
+ "is-callable": "^1.2.0",
+ "is-regex": "^1.1.0",
"object-inspect": "^1.7.0",
"object-keys": "^1.1.1",
"object.assign": "^4.1.0",
- "string.prototype.trimleft": "^2.1.1",
- "string.prototype.trimright": "^2.1.1"
+ "string.prototype.trimend": "^1.0.1",
+ "string.prototype.trimstart": "^1.0.1"
+ }
+ },
+ "es-array-method-boxes-properly": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/es-array-method-boxes-properly/-/es-array-method-boxes-properly-1.0.0.tgz",
+ "integrity": "sha512-wd6JXUmyHmt8T5a2xreUwKcGPq6f1f+WwIJkijUqiGcJz1qqnZgP6XIK+QyIWU5lT7imeNxUll48bziG+TSYcA==",
+ "dev": true
+ },
+ "es-get-iterator": {
+ "version": "1.1.0",
+ "resolved": "https://registry.npmjs.org/es-get-iterator/-/es-get-iterator-1.1.0.tgz",
+ "integrity": "sha512-UfrmHuWQlNMTs35e1ypnvikg6jCz3SK8v8ImvmDsh36fCVUR1MqoFDiyn0/k52C8NqO3YsO8Oe0azeesNuqSsQ==",
+ "dev": true,
+ "requires": {
+ "es-abstract": "^1.17.4",
+ "has-symbols": "^1.0.1",
+ "is-arguments": "^1.0.4",
+ "is-map": "^2.0.1",
+ "is-set": "^2.0.1",
+ "is-string": "^1.0.5",
+ "isarray": "^2.0.5"
+ },
+ "dependencies": {
+ "isarray": {
+ "version": "2.0.5",
+ "resolved": "https://registry.npmjs.org/isarray/-/isarray-2.0.5.tgz",
+ "integrity": "sha512-xHjhDr3cNBK0BzdUJSPXZntQUx/mwMS5Rw4A7lPJ90XGAO6ISP/ePDNuo0vhqOZU+UD5JoodwCAAoZQd3FeAKw==",
+ "dev": true
+ }
}
},
"es-to-primitive": {
"integrity": "sha512-Um/+FxMr9CISWh0bi5Zv0iOD+4cFh5qLeks1qhAopKVAJw3drgKbKySikp7wGhDL0HPeaja0P5ULZrxLkniUVg==",
"dev": true
},
+ "escalade": {
+ "version": "3.0.1",
+ "resolved": "https://registry.npmjs.org/escalade/-/escalade-3.0.1.tgz",
+ "integrity": "sha512-DR6NO3h9niOT+MZs7bjxlj2a1k+POu5RN8CLTPX2+i78bRi9eLe7+0zXgUHMnGXWybYcL61E9hGhPKqedy8tQA==",
+ "dev": true
+ },
"escape-html": {
"version": "1.0.3",
"resolved": "https://registry.npmjs.org/escape-html/-/escape-html-1.0.3.tgz",
"dev": true
},
"eventemitter3": {
- "version": "4.0.0",
- "resolved": "https://registry.npmjs.org/eventemitter3/-/eventemitter3-4.0.0.tgz",
- "integrity": "sha512-qerSRB0p+UDEssxTtm6EDKcE7W4OaoisfIMl4CngyEhjpYglocpNg6UEqCvemdGhosAsg4sO2dXJOdyBifPGCg==",
+ "version": "4.0.4",
+ "resolved": "https://registry.npmjs.org/eventemitter3/-/eventemitter3-4.0.4.tgz",
+ "integrity": "sha512-rlaVLnVxtxvoyLsQQFBx53YmXHDxRIzzTLbdfxqi4yocpSjAxXwkU0cScM5JgSKMqEhrZpnvQ2D9gjylR0AimQ==",
"dev": true
},
"events": {
- "version": "3.0.0",
- "resolved": "https://registry.npmjs.org/events/-/events-3.0.0.tgz",
- "integrity": "sha512-Dc381HFWJzEOhQ+d8pkNon++bk9h6cdAoAj4iE6Q4y6xgTzySWXlKn05/TVNpjnfRqi/X0EpJEJohPjNI3zpVA==",
+ "version": "3.1.0",
+ "resolved": "https://registry.npmjs.org/events/-/events-3.1.0.tgz",
+ "integrity": "sha512-Rv+u8MLHNOdMjTAFeT3nCjHn2aGlx435FP/sDHNaRhDEMwyI/aB22Kj2qIN8R0cw3z28psEQLYwxVKLsKrMgWg==",
"dev": true
},
"eventsource": {
"integrity": "sha512-0btnI/H8f2pavGMN8w40mlSKOfTK2SVJmBfBeVIj3kNw0swwgzyRq0d5TJVOwodFmtvpPeWPN/MCcfuWF0Ezbw==",
"dev": true
},
- "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": "4.0.0",
"resolved": "https://registry.npmjs.org/fill-range/-/fill-range-4.0.0.tgz",
}
},
"follow-redirects": {
- "version": "1.10.0",
- "resolved": "https://registry.npmjs.org/follow-redirects/-/follow-redirects-1.10.0.tgz",
- "integrity": "sha512-4eyLK6s6lH32nOvLLwlIOnr9zrL8Sm+OvW4pVTJNoXeGzYIkHVf+pADQi+OJ0E67hiuSLezPVPyBcIZO50TmmQ==",
- "dev": true,
- "requires": {
- "debug": "^3.0.0"
- },
- "dependencies": {
- "debug": {
- "version": "3.2.6",
- "resolved": "https://registry.npmjs.org/debug/-/debug-3.2.6.tgz",
- "integrity": "sha512-mel+jf7nrtEl5Pn1Qx46zARXKDpBbvzezse7p7LqINmdoIk8PYP5SySaxEmYv6TZ0JyEKA1hsCId6DIhgITtWQ==",
- "dev": true,
- "requires": {
- "ms": "^2.1.1"
- }
- }
- }
+ "version": "1.12.1",
+ "resolved": "https://registry.npmjs.org/follow-redirects/-/follow-redirects-1.12.1.tgz",
+ "integrity": "sha512-tmRv0AVuR7ZyouUHLeNSiO6pqulF7dYa3s19c6t+wz9LD69/uSzdMxJ2S91nTI9U3rt/IldxpzMOFejp6f0hjg==",
+ "dev": true
},
"for-in": {
"version": "1.0.2",
"dev": true
},
"foreground-child": {
- "version": "1.5.6",
- "resolved": "https://registry.npmjs.org/foreground-child/-/foreground-child-1.5.6.tgz",
- "integrity": "sha1-T9ca0t/elnibmApcCilZN8svXOk=",
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/foreground-child/-/foreground-child-2.0.0.tgz",
+ "integrity": "sha512-dCIq9FpEcyQyXKCkyzmlPTFNgrCzPudOe+mhvJU5zAtlBnGVy2yKxtfsxK2tQBThwq225jcvBjpw1Gr40uzZCA==",
"dev": true,
"requires": {
- "cross-spawn": "^4",
- "signal-exit": "^3.0.0"
+ "cross-spawn": "^7.0.0",
+ "signal-exit": "^3.0.2"
},
"dependencies": {
"cross-spawn": {
- "version": "4.0.2",
- "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-4.0.2.tgz",
- "integrity": "sha1-e5JHYhwjrf3ThWAEqCPL45dCTUE=",
+ "version": "7.0.3",
+ "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-7.0.3.tgz",
+ "integrity": "sha512-iRDPJKUPVEND7dHPO8rkbOnPpyDygcDFtWjpeWNCgy8WP2rXcxXL8TskReQl6OrB2G7+UJrags1q15Fudc7G6w==",
"dev": true,
"requires": {
- "lru-cache": "^4.0.1",
- "which": "^1.2.9"
+ "path-key": "^3.1.0",
+ "shebang-command": "^2.0.0",
+ "which": "^2.0.1"
}
},
- "lru-cache": {
- "version": "4.1.5",
- "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-4.1.5.tgz",
- "integrity": "sha512-sWZlbEP2OsHNkXrMl5GYk/jKk70MBng6UU4YI/qGDYbgf6YbP4EvmqISbXCoJiRKs+1bSpFHVgQxvJ17F2li5g==",
+ "path-key": {
+ "version": "3.1.1",
+ "resolved": "https://registry.npmjs.org/path-key/-/path-key-3.1.1.tgz",
+ "integrity": "sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q==",
+ "dev": true
+ },
+ "shebang-command": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/shebang-command/-/shebang-command-2.0.0.tgz",
+ "integrity": "sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA==",
"dev": true,
"requires": {
- "pseudomap": "^1.0.2",
- "yallist": "^2.1.2"
+ "shebang-regex": "^3.0.0"
}
},
- "yallist": {
- "version": "2.1.2",
- "resolved": "https://registry.npmjs.org/yallist/-/yallist-2.1.2.tgz",
- "integrity": "sha1-HBH5IY8HYImkfdUS+TxmmaaoHVI=",
+ "shebang-regex": {
+ "version": "3.0.0",
+ "resolved": "https://registry.npmjs.org/shebang-regex/-/shebang-regex-3.0.0.tgz",
+ "integrity": "sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A==",
"dev": true
+ },
+ "which": {
+ "version": "2.0.2",
+ "resolved": "https://registry.npmjs.org/which/-/which-2.0.2.tgz",
+ "integrity": "sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==",
+ "dev": true,
+ "requires": {
+ "isexe": "^2.0.0"
+ }
}
}
},
"readable-stream": "^2.0.0"
}
},
- "fs-write-stream-atomic": {
- "version": "1.0.10",
- "resolved": "https://registry.npmjs.org/fs-write-stream-atomic/-/fs-write-stream-atomic-1.0.10.tgz",
- "integrity": "sha1-tH31NJPvkR33VzHnCp3tAYnbQMk=",
- "dev": true,
- "requires": {
- "graceful-fs": "^4.1.2",
- "iferr": "^0.1.5",
- "imurmurhash": "^0.1.4",
- "readable-stream": "1 || 2"
- }
- },
- "fs.realpath": {
- "version": "1.0.0",
- "resolved": "https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz",
- "integrity": "sha1-FQStJSMVjKpA20onh8sBQRmU6k8=",
+ "fromentries": {
+ "version": "1.2.0",
+ "resolved": "https://registry.npmjs.org/fromentries/-/fromentries-1.2.0.tgz",
+ "integrity": "sha512-33X7H/wdfO99GdRLLgkjUrD4geAFdq/Uv0kl3HD4da6HDixd2GUg8Mw7dahLCV9r/EARkmtYBB6Tch4EEokFTQ==",
"dev": true
},
- "fsevents": {
- "version": "1.2.11",
- "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-1.2.11.tgz",
- "integrity": "sha512-+ux3lx6peh0BpvY0JebGyZoiR4D+oYzdPZMKJwkZ+sFkNJzpL7tXc/wehS49gUAxg3tmMHPHZkA8JU2rhhgDHw==",
- "dev": true,
- "optional": true,
- "requires": {
- "bindings": "^1.5.0",
- "nan": "^2.12.1",
- "node-pre-gyp": "*"
- },
- "dependencies": {
- "abbrev": {
- "version": "1.1.1",
- "bundled": true,
- "dev": true,
- "optional": true
- },
- "ansi-regex": {
- "version": "2.1.1",
- "bundled": true,
- "dev": true,
- "optional": true
- },
- "aproba": {
- "version": "1.2.0",
- "bundled": true,
- "dev": true,
- "optional": true
- },
- "are-we-there-yet": {
- "version": "1.1.5",
- "bundled": true,
- "dev": true,
- "optional": true,
- "requires": {
- "delegates": "^1.0.0",
- "readable-stream": "^2.0.6"
- }
- },
- "balanced-match": {
- "version": "1.0.0",
- "bundled": true,
- "dev": true,
- "optional": true
- },
- "brace-expansion": {
- "version": "1.1.11",
- "bundled": true,
- "dev": true,
- "optional": true,
- "requires": {
- "balanced-match": "^1.0.0",
- "concat-map": "0.0.1"
- }
- },
- "chownr": {
- "version": "1.1.3",
- "bundled": true,
- "dev": true,
- "optional": true
- },
- "code-point-at": {
- "version": "1.1.0",
- "bundled": true,
- "dev": true,
- "optional": true
- },
- "concat-map": {
- "version": "0.0.1",
- "bundled": true,
- "dev": true,
- "optional": true
- },
- "console-control-strings": {
- "version": "1.1.0",
- "bundled": true,
- "dev": true,
- "optional": true
- },
- "core-util-is": {
- "version": "1.0.2",
- "bundled": true,
- "dev": true,
- "optional": true
- },
- "debug": {
- "version": "3.2.6",
- "bundled": true,
- "dev": true,
- "optional": true,
- "requires": {
- "ms": "^2.1.1"
- }
- },
- "deep-extend": {
- "version": "0.6.0",
- "bundled": true,
- "dev": true,
- "optional": true
- },
- "delegates": {
- "version": "1.0.0",
- "bundled": true,
- "dev": true,
- "optional": true
- },
- "detect-libc": {
- "version": "1.0.3",
- "bundled": true,
- "dev": true,
- "optional": true
- },
- "fs-minipass": {
- "version": "1.2.7",
- "bundled": true,
- "dev": true,
- "optional": true,
- "requires": {
- "minipass": "^2.6.0"
- }
- },
- "fs.realpath": {
- "version": "1.0.0",
- "bundled": true,
- "dev": true,
- "optional": true
- },
- "gauge": {
- "version": "2.7.4",
- "bundled": true,
- "dev": true,
- "optional": true,
- "requires": {
- "aproba": "^1.0.3",
- "console-control-strings": "^1.0.0",
- "has-unicode": "^2.0.0",
- "object-assign": "^4.1.0",
- "signal-exit": "^3.0.0",
- "string-width": "^1.0.1",
- "strip-ansi": "^3.0.1",
- "wide-align": "^1.1.0"
- }
- },
- "glob": {
- "version": "7.1.6",
- "bundled": true,
- "dev": true,
- "optional": 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"
- }
- },
- "has-unicode": {
- "version": "2.0.1",
- "bundled": true,
- "dev": true,
- "optional": true
- },
- "iconv-lite": {
- "version": "0.4.24",
- "bundled": true,
- "dev": true,
- "optional": true,
- "requires": {
- "safer-buffer": ">= 2.1.2 < 3"
- }
- },
- "ignore-walk": {
- "version": "3.0.3",
- "bundled": true,
- "dev": true,
- "optional": true,
- "requires": {
- "minimatch": "^3.0.4"
- }
- },
- "inflight": {
- "version": "1.0.6",
- "bundled": true,
- "dev": true,
- "optional": true,
- "requires": {
- "once": "^1.3.0",
- "wrappy": "1"
- }
- },
- "inherits": {
- "version": "2.0.4",
- "bundled": true,
- "dev": true,
- "optional": true
- },
- "ini": {
- "version": "1.3.5",
- "bundled": true,
- "dev": true,
- "optional": true
- },
- "is-fullwidth-code-point": {
- "version": "1.0.0",
- "bundled": true,
- "dev": true,
- "optional": true,
- "requires": {
- "number-is-nan": "^1.0.0"
- }
- },
- "isarray": {
- "version": "1.0.0",
- "bundled": true,
- "dev": true,
- "optional": true
- },
- "minimatch": {
- "version": "3.0.4",
- "bundled": true,
- "dev": true,
- "optional": true,
- "requires": {
- "brace-expansion": "^1.1.7"
- }
- },
- "minimist": {
- "version": "0.0.8",
- "bundled": true,
- "dev": true,
- "optional": true
- },
- "minipass": {
- "version": "2.9.0",
- "bundled": true,
- "dev": true,
- "optional": true,
- "requires": {
- "safe-buffer": "^5.1.2",
- "yallist": "^3.0.0"
- }
- },
- "minizlib": {
- "version": "1.3.3",
- "bundled": true,
- "dev": true,
- "optional": true,
- "requires": {
- "minipass": "^2.9.0"
- }
- },
- "mkdirp": {
- "version": "0.5.1",
- "bundled": true,
- "dev": true,
- "optional": true,
- "requires": {
- "minimist": "0.0.8"
- }
- },
- "ms": {
- "version": "2.1.2",
- "bundled": true,
- "dev": true,
- "optional": true
- },
- "needle": {
- "version": "2.4.0",
- "bundled": true,
- "dev": true,
- "optional": true,
- "requires": {
- "debug": "^3.2.6",
- "iconv-lite": "^0.4.4",
- "sax": "^1.2.4"
- }
- },
- "node-pre-gyp": {
- "version": "0.14.0",
- "bundled": true,
- "dev": true,
- "optional": true,
- "requires": {
- "detect-libc": "^1.0.2",
- "mkdirp": "^0.5.1",
- "needle": "^2.2.1",
- "nopt": "^4.0.1",
- "npm-packlist": "^1.1.6",
- "npmlog": "^4.0.2",
- "rc": "^1.2.7",
- "rimraf": "^2.6.1",
- "semver": "^5.3.0",
- "tar": "^4.4.2"
- }
- },
- "nopt": {
- "version": "4.0.1",
- "bundled": true,
- "dev": true,
- "optional": true,
- "requires": {
- "abbrev": "1",
- "osenv": "^0.1.4"
- }
- },
- "npm-bundled": {
- "version": "1.1.1",
- "bundled": true,
- "dev": true,
- "optional": true,
- "requires": {
- "npm-normalize-package-bin": "^1.0.1"
- }
- },
- "npm-normalize-package-bin": {
- "version": "1.0.1",
- "bundled": true,
- "dev": true,
- "optional": true
- },
- "npm-packlist": {
- "version": "1.4.7",
- "bundled": true,
- "dev": true,
- "optional": true,
- "requires": {
- "ignore-walk": "^3.0.1",
- "npm-bundled": "^1.0.1"
- }
- },
- "npmlog": {
- "version": "4.1.2",
- "bundled": true,
- "dev": true,
- "optional": true,
- "requires": {
- "are-we-there-yet": "~1.1.2",
- "console-control-strings": "~1.1.0",
- "gauge": "~2.7.3",
- "set-blocking": "~2.0.0"
- }
- },
- "number-is-nan": {
- "version": "1.0.1",
- "bundled": true,
- "dev": true,
- "optional": true
- },
- "object-assign": {
- "version": "4.1.1",
- "bundled": true,
- "dev": true,
- "optional": true
- },
- "once": {
- "version": "1.4.0",
- "bundled": true,
- "dev": true,
- "optional": true,
- "requires": {
- "wrappy": "1"
- }
- },
- "os-homedir": {
- "version": "1.0.2",
- "bundled": true,
- "dev": true,
- "optional": true
- },
- "os-tmpdir": {
- "version": "1.0.2",
- "bundled": true,
- "dev": true,
- "optional": true
- },
- "osenv": {
- "version": "0.1.5",
- "bundled": true,
- "dev": true,
- "optional": true,
- "requires": {
- "os-homedir": "^1.0.0",
- "os-tmpdir": "^1.0.0"
- }
- },
- "path-is-absolute": {
- "version": "1.0.1",
- "bundled": true,
- "dev": true,
- "optional": true
- },
- "process-nextick-args": {
- "version": "2.0.1",
- "bundled": true,
- "dev": true,
- "optional": true
- },
- "rc": {
- "version": "1.2.8",
- "bundled": true,
- "dev": true,
- "optional": true,
- "requires": {
- "deep-extend": "^0.6.0",
- "ini": "~1.3.0",
- "minimist": "^1.2.0",
- "strip-json-comments": "~2.0.1"
- },
- "dependencies": {
- "minimist": {
- "version": "1.2.0",
- "bundled": true,
- "dev": true,
- "optional": true
- }
- }
- },
- "readable-stream": {
- "version": "2.3.6",
- "bundled": true,
- "dev": true,
- "optional": 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"
- }
- },
- "rimraf": {
- "version": "2.7.1",
- "bundled": true,
- "dev": true,
- "optional": true,
- "requires": {
- "glob": "^7.1.3"
- }
- },
- "safe-buffer": {
- "version": "5.1.2",
- "bundled": true,
- "dev": true,
- "optional": true
- },
- "safer-buffer": {
- "version": "2.1.2",
- "bundled": true,
- "dev": true,
- "optional": true
- },
- "sax": {
- "version": "1.2.4",
- "bundled": true,
- "dev": true,
- "optional": true
- },
- "semver": {
- "version": "5.7.1",
- "bundled": true,
- "dev": true,
- "optional": true
- },
- "set-blocking": {
- "version": "2.0.0",
- "bundled": true,
- "dev": true,
- "optional": true
- },
- "signal-exit": {
- "version": "3.0.2",
- "bundled": true,
- "dev": true,
- "optional": true
- },
- "string-width": {
- "version": "1.0.2",
- "bundled": true,
- "dev": true,
- "optional": true,
- "requires": {
- "code-point-at": "^1.0.0",
- "is-fullwidth-code-point": "^1.0.0",
- "strip-ansi": "^3.0.0"
- }
- },
- "string_decoder": {
- "version": "1.1.1",
- "bundled": true,
- "dev": true,
- "optional": true,
- "requires": {
- "safe-buffer": "~5.1.0"
- }
- },
- "strip-ansi": {
- "version": "3.0.1",
- "bundled": true,
- "dev": true,
- "optional": true,
- "requires": {
- "ansi-regex": "^2.0.0"
- }
- },
- "strip-json-comments": {
- "version": "2.0.1",
- "bundled": true,
- "dev": true,
- "optional": true
- },
- "tar": {
- "version": "4.4.13",
- "bundled": true,
- "dev": true,
- "optional": true,
- "requires": {
- "chownr": "^1.1.1",
- "fs-minipass": "^1.2.5",
- "minipass": "^2.8.6",
- "minizlib": "^1.2.1",
- "mkdirp": "^0.5.0",
- "safe-buffer": "^5.1.2",
- "yallist": "^3.0.3"
- }
- },
- "util-deprecate": {
- "version": "1.0.2",
- "bundled": true,
- "dev": true,
- "optional": true
- },
- "wide-align": {
- "version": "1.1.3",
- "bundled": true,
- "dev": true,
- "optional": true,
- "requires": {
- "string-width": "^1.0.2 || 2"
- }
- },
- "wrappy": {
- "version": "1.0.2",
- "bundled": true,
- "dev": true,
- "optional": true
- },
- "yallist": {
- "version": "3.1.1",
- "bundled": true,
- "dev": true,
- "optional": true
- }
+ "fs-write-stream-atomic": {
+ "version": "1.0.10",
+ "resolved": "https://registry.npmjs.org/fs-write-stream-atomic/-/fs-write-stream-atomic-1.0.10.tgz",
+ "integrity": "sha1-tH31NJPvkR33VzHnCp3tAYnbQMk=",
+ "dev": true,
+ "requires": {
+ "graceful-fs": "^4.1.2",
+ "iferr": "^0.1.5",
+ "imurmurhash": "^0.1.4",
+ "readable-stream": "1 || 2"
}
},
+ "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": "2.1.3",
+ "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-2.1.3.tgz",
+ "integrity": "sha512-Auw9a4AxqWpa9GUfj370BMPzzyncfBABW8Mab7BGWBYDj4Isgq+cDKtx0i6u9jcX9pQDnswsaaOTgTmA5pEjuQ==",
+ "dev": true,
+ "optional": true
+ },
"function-bind": {
"version": "1.1.1",
"resolved": "https://registry.npmjs.org/function-bind/-/function-bind-1.1.1.tgz",
"integrity": "sha512-DyFP3BM/3YHTQOCUL/w0OZHR0lpKeGrxotcHWcqNEdnltqFwXVfhEBQ94eIo34AfQpo0rGki4cyIiftY06h2Fg==",
"dev": true
},
+ "get-package-type": {
+ "version": "0.1.0",
+ "resolved": "https://registry.npmjs.org/get-package-type/-/get-package-type-0.1.0.tgz",
+ "integrity": "sha512-pjzuKtY64GYfWizNAJ0fr9VqttZkNiK2iS430LtIHzjBEr6bX8Am2zm4sW4Ro5wjWW5cAlRL1qAMTcXbjNAO2Q==",
+ "dev": true
+ },
"get-stream": {
"version": "4.1.0",
"resolved": "https://registry.npmjs.org/get-stream/-/get-stream-4.1.0.tgz",
}
},
"glob-parent": {
- "version": "3.1.0",
- "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-3.1.0.tgz",
- "integrity": "sha1-nmr2KZ2NO9K9QEMIMr0RPfkGxa4=",
+ "version": "5.1.1",
+ "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-5.1.1.tgz",
+ "integrity": "sha512-FnI+VGOpnlGHWZxthPGR+QhR78fuiK0sNLkHQv+bL9fQi57lNNdquIbna/WrfROrolq8GK5Ek6BiMwqL/voRYQ==",
"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"
- }
- }
+ "is-glob": "^4.0.1"
}
},
"global-modules": {
"dev": true
},
"handle-thing": {
- "version": "2.0.0",
- "resolved": "https://registry.npmjs.org/handle-thing/-/handle-thing-2.0.0.tgz",
- "integrity": "sha512-d4sze1JNC454Wdo2fkuyzCr6aHcbL6PGGuFAz0Li/NcOm1tCHGnWDRmJP85dh9IhQErTc2svWFEX5xHIOo//kQ==",
+ "version": "2.0.1",
+ "resolved": "https://registry.npmjs.org/handle-thing/-/handle-thing-2.0.1.tgz",
+ "integrity": "sha512-9Qn4yBxelxoh2Ow62nP+Ka/kMnOXRi8BXnRaUwezLNhqelnN49xKz4F/dPP8OYLxLxq6JDtZb2i9XznUQbNPTg==",
"dev": true
},
"has": {
}
},
"hash-base": {
- "version": "3.0.4",
- "resolved": "https://registry.npmjs.org/hash-base/-/hash-base-3.0.4.tgz",
- "integrity": "sha1-X8hoaEfs1zSZQDMZprCj8/auSRg=",
+ "version": "3.1.0",
+ "resolved": "https://registry.npmjs.org/hash-base/-/hash-base-3.1.0.tgz",
+ "integrity": "sha512-1nmYp/rhMDiE7AYkDw+lLwlAzz0AntGIe51F3RfFfEqyQ3feY2eI/NcwC6umIQVOASPMsWJLJScWKSSvzL9IVA==",
"dev": true,
"requires": {
- "inherits": "^2.0.1",
- "safe-buffer": "^5.0.1"
+ "inherits": "^2.0.4",
+ "readable-stream": "^3.6.0",
+ "safe-buffer": "^5.2.0"
+ },
+ "dependencies": {
+ "inherits": {
+ "version": "2.0.4",
+ "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.4.tgz",
+ "integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==",
+ "dev": true
+ },
+ "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"
+ }
+ },
+ "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
+ }
}
},
"hash.js": {
}
},
"hasha": {
- "version": "3.0.0",
- "resolved": "https://registry.npmjs.org/hasha/-/hasha-3.0.0.tgz",
- "integrity": "sha1-UqMvq4Vp1BymmmH/GiFPjrfIvTk=",
+ "version": "5.2.0",
+ "resolved": "https://registry.npmjs.org/hasha/-/hasha-5.2.0.tgz",
+ "integrity": "sha512-2W+jKdQbAdSIrggA8Q35Br8qKadTrqCTC8+XZvBWepKDK6m9XkX6Iz1a2yh2KP01kzAR/dpuMeUnocoLYDcskw==",
"dev": true,
"requires": {
- "is-stream": "^1.0.1"
+ "is-stream": "^2.0.0",
+ "type-fest": "^0.8.0"
+ },
+ "dependencies": {
+ "is-stream": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/is-stream/-/is-stream-2.0.0.tgz",
+ "integrity": "sha512-XCoy+WlUr7d1+Z8GgSuXmpuUFC9fOhRXglJMx+dwLKTkL44Cjd4W1Z5P+BQZpr+cR93aGP4S/s7Ftw6Nd/kiEw==",
+ "dev": true
+ }
}
},
"he": {
"parse-passwd": "^1.0.0"
}
},
- "hosted-git-info": {
- "version": "2.8.5",
- "resolved": "https://registry.npmjs.org/hosted-git-info/-/hosted-git-info-2.8.5.tgz",
- "integrity": "sha512-kssjab8CvdXfcXMXVcvsXum4Hwdq9XGtRD3TteMEvEbq0LXyiNQr6AprqKqfeaDXze7SxWvRxdpwE6ku7ikLkg==",
- "dev": true
- },
"hpack.js": {
"version": "2.1.6",
"resolved": "https://registry.npmjs.org/hpack.js/-/hpack.js-2.1.6.tgz",
}
},
"html-entities": {
- "version": "1.2.1",
- "resolved": "https://registry.npmjs.org/html-entities/-/html-entities-1.2.1.tgz",
- "integrity": "sha1-DfKTUfByEWNRXfueVUPl9u7VFi8=",
+ "version": "1.3.1",
+ "resolved": "https://registry.npmjs.org/html-entities/-/html-entities-1.3.1.tgz",
+ "integrity": "sha512-rhE/4Z3hIhzHAUKbW8jVcCyuT5oJCXXqhN/6mXXVCpzTmvJnoH2HL/bt3EZ6p55jbFJBeAe1ZNpL5BugLujxNA==",
"dev": true
},
"html-escaper": {
- "version": "2.0.0",
- "resolved": "https://registry.npmjs.org/html-escaper/-/html-escaper-2.0.0.tgz",
- "integrity": "sha512-a4u9BeERWGu/S8JiWEAQcdrg9v4QArtP9keViQjGMdff20fBdd8waotXaNmODqBe6uZ3Nafi7K/ho4gCQHV3Ig==",
+ "version": "2.0.2",
+ "resolved": "https://registry.npmjs.org/html-escaper/-/html-escaper-2.0.2.tgz",
+ "integrity": "sha512-H2iMtd0I4Mt5eYiapRdIDjp+XzelXQ0tFE4JS7YFwFevXXMmOp9myNrUvCg0D6ws8iqkRPBfKHgbwig1SmlLfg==",
"dev": true
},
"http-deceiver": {
"toidentifier": "1.0.0"
}
},
- "http-parser-js": {
- "version": "0.4.10",
- "resolved": "https://registry.npmjs.org/http-parser-js/-/http-parser-js-0.4.10.tgz",
- "integrity": "sha1-ksnBN0w1CF912zWexWzCV8u5P6Q=",
- "dev": true
- },
"http-proxy": {
- "version": "1.18.0",
- "resolved": "https://registry.npmjs.org/http-proxy/-/http-proxy-1.18.0.tgz",
- "integrity": "sha512-84I2iJM/n1d4Hdgc6y2+qY5mDaz2PUVjlg9znE9byl+q0uC3DeByqBGReQu5tpLK0TAqTIXScRUV+dg7+bUPpQ==",
+ "version": "1.18.1",
+ "resolved": "https://registry.npmjs.org/http-proxy/-/http-proxy-1.18.1.tgz",
+ "integrity": "sha512-7mz/721AbnJwIVbnaSv1Cz3Am0ZLT/UBwkC92VlxhXv/k/BBQfM2fXElQNC27BVGr0uwUpplYPQM9LnaBMR5NQ==",
"dev": true,
"requires": {
"eventemitter3": "^4.0.0",
"safer-buffer": ">= 2.1.2 < 3"
}
},
- "icss-replace-symbols": {
- "version": "1.1.0",
- "resolved": "https://registry.npmjs.org/icss-replace-symbols/-/icss-replace-symbols-1.1.0.tgz",
- "integrity": "sha1-Bupvg2ead0njhs/h/oEq5dsiPe0=",
- "dev": true
- },
"icss-utils": {
- "version": "4.1.0",
- "resolved": "https://registry.npmjs.org/icss-utils/-/icss-utils-4.1.0.tgz",
- "integrity": "sha512-3DEun4VOeMvSczifM3F2cKQrDQ5Pj6WKhkOq6HD4QTnDUAq8MQRxy5TX6Sy1iY6WPBe4gQ3p5vTECjbIkglkkQ==",
+ "version": "4.1.1",
+ "resolved": "https://registry.npmjs.org/icss-utils/-/icss-utils-4.1.1.tgz",
+ "integrity": "sha512-4aFq7wvWyMHKgxsH8QQtGpvbASCf+eM3wPRLI6R+MgAnTCZ6STYsRvttLvRWK0Nfif5piF394St3HeJDaljGPA==",
"dev": true,
"requires": {
"postcss": "^7.0.14"
"integrity": "sha1-khi5srkoojixPcT7a21XbyMUU+o=",
"dev": true
},
+ "indent-string": {
+ "version": "4.0.0",
+ "resolved": "https://registry.npmjs.org/indent-string/-/indent-string-4.0.0.tgz",
+ "integrity": "sha512-EdDDZu4A2OyIK7Lr/2zG+w5jmbuk1DVBnEwREQvBzspBJkCEbRa8GxU1lghYcaGJCnRWibjDXlq779X1/y5xwg==",
+ "dev": true
+ },
"indexes-of": {
"version": "1.0.1",
"resolved": "https://registry.npmjs.org/indexes-of/-/indexes-of-1.0.1.tgz",
}
},
"interpret": {
- "version": "1.2.0",
- "resolved": "https://registry.npmjs.org/interpret/-/interpret-1.2.0.tgz",
- "integrity": "sha512-mT34yGKMNceBQUoVn7iCDKDntA7SC6gycMAWzGx1z/CMCTV7b2AAtXlo3nRyHZ1FelRkQbQjprHSYGwzLtkVbw==",
+ "version": "1.4.0",
+ "resolved": "https://registry.npmjs.org/interpret/-/interpret-1.4.0.tgz",
+ "integrity": "sha512-agE4QfB2Lkp9uICn7BAqoscw4SZP9kTE2hxiFI3jBPmXJfdqiahTbUuKGsMoN2GtqL9AxhYioAcVvgsb1HvRbA==",
"dev": true
},
"invariant": {
"loose-envify": "^1.0.0"
}
},
- "invert-kv": {
- "version": "2.0.0",
- "resolved": "https://registry.npmjs.org/invert-kv/-/invert-kv-2.0.0.tgz",
- "integrity": "sha512-wPVv/y/QQ/Uiirj/vh3oP+1Ww+AWehmi1g5fFWGPF6IpCBCDVrhgHRMvrLfdYcwDh3QJbGXDW4JAuzxElLSqKA==",
- "dev": true
- },
"ip": {
"version": "1.1.5",
"resolved": "https://registry.npmjs.org/ip/-/ip-1.1.5.tgz",
"dev": true
},
"ipaddr.js": {
- "version": "1.9.0",
- "resolved": "https://registry.npmjs.org/ipaddr.js/-/ipaddr.js-1.9.0.tgz",
- "integrity": "sha512-M4Sjn6N/+O6/IXSJseKqHoFc+5FdGJ22sXqnjTpdZweHK64MzEPAyQZyEU3R/KRv2GLoa7nNtg/C2Ev6m7z+eA==",
+ "version": "1.9.1",
+ "resolved": "https://registry.npmjs.org/ipaddr.js/-/ipaddr.js-1.9.1.tgz",
+ "integrity": "sha512-0KI/607xoxSToH7GjN1FfSbLoU0+btTicjsQSWQlh/hZykN8KpmMf7uYwPW3R+akZ6R/w18ZlXSHBYXiYUPO3g==",
"dev": true
},
"is-absolute-url": {
"integrity": "sha512-xPh0Rmt8NE65sNzvyUmWgI1tz3mKq74lGA0mL8LYZcoIzKOzDh6HmrYm3d18k60nHerC8A9Km8kYu87zfSFnLA==",
"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=",
+ "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": "^1.0.0"
+ "binary-extensions": "^2.0.0"
}
},
"is-buffer": {
"dev": true
},
"is-callable": {
- "version": "1.1.5",
- "resolved": "https://registry.npmjs.org/is-callable/-/is-callable-1.1.5.tgz",
- "integrity": "sha512-ESKv5sMCJB2jnHTWZ3O5itG+O128Hsus4K4Qh1h2/cgn2vbgnLSVqfV46AeJA9D5EeeLa9w81KUXMtn34zhX+Q==",
+ "version": "1.2.0",
+ "resolved": "https://registry.npmjs.org/is-callable/-/is-callable-1.2.0.tgz",
+ "integrity": "sha512-pyVD9AaGLxtg6srb2Ng6ynWJqkHU9bEM087AKck0w8QwDarTfNcpIYoU8x8Hv2Icm8u6kFJM18Dag8lyqGkviw==",
"dev": true
},
"is-data-descriptor": {
"is-extglob": "^2.1.1"
}
},
+ "is-map": {
+ "version": "2.0.1",
+ "resolved": "https://registry.npmjs.org/is-map/-/is-map-2.0.1.tgz",
+ "integrity": "sha512-T/S49scO8plUiAOA2DBTBG3JHpn1yiw0kRp6dgiZ0v2/6twi5eiB0rHtHFH9ZIrvlWc6+4O+m4zg5+Z833aXgw==",
+ "dev": true
+ },
"is-number": {
"version": "3.0.0",
"resolved": "https://registry.npmjs.org/is-number/-/is-number-3.0.0.tgz",
}
},
"is-regex": {
- "version": "1.0.5",
- "resolved": "https://registry.npmjs.org/is-regex/-/is-regex-1.0.5.tgz",
- "integrity": "sha512-vlKW17SNq44owv5AQR3Cq0bQPEb8+kF3UKZ2fiZNOWtztYE5i0CzCZxFDwO58qAOWtxdBRVO/V5Qin1wjCqFYQ==",
+ "version": "1.1.0",
+ "resolved": "https://registry.npmjs.org/is-regex/-/is-regex-1.1.0.tgz",
+ "integrity": "sha512-iI97M8KTWID2la5uYXlkbSDQIg4F6o1sYboZKKTDpnDQMLtUL86zxhgDet3Q2SriaYsyGqZ6Mn2SjbRKeLHdqw==",
"dev": true,
"requires": {
- "has": "^1.0.3"
+ "has-symbols": "^1.0.1"
}
},
+ "is-set": {
+ "version": "2.0.1",
+ "resolved": "https://registry.npmjs.org/is-set/-/is-set-2.0.1.tgz",
+ "integrity": "sha512-eJEzOtVyenDs1TMzSQ3kU3K+E0GUS9sno+F0OBT97xsgcJsF9nXMBtkT9/kut5JEpM7oL7X/0qxR17K3mcwIAA==",
+ "dev": true
+ },
"is-stream": {
"version": "1.1.0",
"resolved": "https://registry.npmjs.org/is-stream/-/is-stream-1.1.0.tgz",
"integrity": "sha1-EtSj3U5o4Lec6428hBc66A2RykQ=",
"dev": true
},
+ "is-string": {
+ "version": "1.0.5",
+ "resolved": "https://registry.npmjs.org/is-string/-/is-string-1.0.5.tgz",
+ "integrity": "sha512-buY6VNRjhQMiF1qWDouloZlQbRhDPCebwxSjxMjxgemYT46YMd2NR0/H+fBhEfWX4A/w9TBJ+ol+okqJKFE6vQ==",
+ "dev": true
+ },
"is-symbol": {
"version": "1.0.3",
"resolved": "https://registry.npmjs.org/is-symbol/-/is-symbol-1.0.3.tgz",
"has-symbols": "^1.0.1"
}
},
+ "is-typedarray": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/is-typedarray/-/is-typedarray-1.0.0.tgz",
+ "integrity": "sha1-5HnICFjfDBsR3dppQPlgEfzaSpo=",
+ "dev": true
+ },
"is-windows": {
"version": "1.0.2",
"resolved": "https://registry.npmjs.org/is-windows/-/is-windows-1.0.2.tgz",
"dev": true
},
"istanbul-lib-coverage": {
- "version": "2.0.5",
- "resolved": "https://registry.npmjs.org/istanbul-lib-coverage/-/istanbul-lib-coverage-2.0.5.tgz",
- "integrity": "sha512-8aXznuEPCJvGnMSRft4udDRDtb1V3pkQkMMI5LI+6HuQz5oQ4J2UFn1H82raA3qJtyOLkkwVqICBQkjnGtn5mA==",
+ "version": "3.0.0",
+ "resolved": "https://registry.npmjs.org/istanbul-lib-coverage/-/istanbul-lib-coverage-3.0.0.tgz",
+ "integrity": "sha512-UiUIqxMgRDET6eR+o5HbfRYP1l0hqkWOs7vNxC/mggutCMUIhWMm8gAHb8tHlyfD3/l6rlgNA5cKdDzEAf6hEg==",
"dev": true
},
"istanbul-lib-hook": {
- "version": "2.0.7",
- "resolved": "https://registry.npmjs.org/istanbul-lib-hook/-/istanbul-lib-hook-2.0.7.tgz",
- "integrity": "sha512-vrRztU9VRRFDyC+aklfLoeXyNdTfga2EI3udDGn4cZ6fpSXpHLV9X6CHvfoMCPtggg8zvDDmC4b9xfu0z6/llA==",
+ "version": "3.0.0",
+ "resolved": "https://registry.npmjs.org/istanbul-lib-hook/-/istanbul-lib-hook-3.0.0.tgz",
+ "integrity": "sha512-Pt/uge1Q9s+5VAZ+pCo16TYMWPBIl+oaNIjgLQxcX0itS6ueeaA+pEfThZpH8WxhFgCiEb8sAJY6MdUKgiIWaQ==",
"dev": true,
"requires": {
- "append-transform": "^1.0.0"
+ "append-transform": "^2.0.0"
}
},
"istanbul-lib-instrument": {
- "version": "3.3.0",
- "resolved": "https://registry.npmjs.org/istanbul-lib-instrument/-/istanbul-lib-instrument-3.3.0.tgz",
- "integrity": "sha512-5nnIN4vo5xQZHdXno/YDXJ0G+I3dAm4XgzfSVTPLQpj/zAV2dV6Juy0yaf10/zrJOJeHoN3fraFe+XRq2bFVZA==",
- "dev": true,
- "requires": {
- "@babel/generator": "^7.4.0",
- "@babel/parser": "^7.4.3",
- "@babel/template": "^7.4.0",
- "@babel/traverse": "^7.4.3",
- "@babel/types": "^7.4.0",
- "istanbul-lib-coverage": "^2.0.5",
- "semver": "^6.0.0"
+ "version": "4.0.3",
+ "resolved": "https://registry.npmjs.org/istanbul-lib-instrument/-/istanbul-lib-instrument-4.0.3.tgz",
+ "integrity": "sha512-BXgQl9kf4WTCPCCpmFGoJkz/+uhvm7h7PFKUYxh7qarQd3ER33vHG//qaE8eN25l07YqZPpHXU9I09l/RD5aGQ==",
+ "dev": true,
+ "requires": {
+ "@babel/core": "^7.7.5",
+ "@istanbuljs/schema": "^0.1.2",
+ "istanbul-lib-coverage": "^3.0.0",
+ "semver": "^6.3.0"
+ },
+ "dependencies": {
+ "semver": {
+ "version": "6.3.0",
+ "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz",
+ "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==",
+ "dev": true
+ }
+ }
+ },
+ "istanbul-lib-processinfo": {
+ "version": "2.0.2",
+ "resolved": "https://registry.npmjs.org/istanbul-lib-processinfo/-/istanbul-lib-processinfo-2.0.2.tgz",
+ "integrity": "sha512-kOwpa7z9hme+IBPZMzQ5vdQj8srYgAtaRqeI48NGmAQ+/5yKiHLV0QbYqQpxsdEF0+w14SoB8YbnHKcXE2KnYw==",
+ "dev": true,
+ "requires": {
+ "archy": "^1.0.0",
+ "cross-spawn": "^7.0.0",
+ "istanbul-lib-coverage": "^3.0.0-alpha.1",
+ "make-dir": "^3.0.0",
+ "p-map": "^3.0.0",
+ "rimraf": "^3.0.0",
+ "uuid": "^3.3.3"
},
"dependencies": {
+ "cross-spawn": {
+ "version": "7.0.3",
+ "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-7.0.3.tgz",
+ "integrity": "sha512-iRDPJKUPVEND7dHPO8rkbOnPpyDygcDFtWjpeWNCgy8WP2rXcxXL8TskReQl6OrB2G7+UJrags1q15Fudc7G6w==",
+ "dev": true,
+ "requires": {
+ "path-key": "^3.1.0",
+ "shebang-command": "^2.0.0",
+ "which": "^2.0.1"
+ }
+ },
+ "make-dir": {
+ "version": "3.1.0",
+ "resolved": "https://registry.npmjs.org/make-dir/-/make-dir-3.1.0.tgz",
+ "integrity": "sha512-g3FeP20LNwhALb/6Cz6Dd4F2ngze0jz7tbzrD2wAV+o9FeNHe4rL+yK2md0J/fiSf1sa1ADhXqi5+oVwOM/eGw==",
+ "dev": true,
+ "requires": {
+ "semver": "^6.0.0"
+ }
+ },
+ "p-map": {
+ "version": "3.0.0",
+ "resolved": "https://registry.npmjs.org/p-map/-/p-map-3.0.0.tgz",
+ "integrity": "sha512-d3qXVTF/s+W+CdJ5A29wywV2n8CQQYahlgz2bFiA+4eVNJbHJodPZ+/gXwPGh0bOqA+j8S+6+ckmvLGPk1QpxQ==",
+ "dev": true,
+ "requires": {
+ "aggregate-error": "^3.0.0"
+ }
+ },
+ "path-key": {
+ "version": "3.1.1",
+ "resolved": "https://registry.npmjs.org/path-key/-/path-key-3.1.1.tgz",
+ "integrity": "sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q==",
+ "dev": true
+ },
+ "rimraf": {
+ "version": "3.0.2",
+ "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-3.0.2.tgz",
+ "integrity": "sha512-JZkJMZkAGFFPP2YqXZXPbMlMBgsxzE8ILs4lMIX/2o0L9UBw9O/Y3o6wFw/i9YLapcUJWwqbi3kdxIPdC62TIA==",
+ "dev": true,
+ "requires": {
+ "glob": "^7.1.3"
+ }
+ },
"semver": {
"version": "6.3.0",
"resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz",
"integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==",
"dev": true
+ },
+ "shebang-command": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/shebang-command/-/shebang-command-2.0.0.tgz",
+ "integrity": "sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA==",
+ "dev": true,
+ "requires": {
+ "shebang-regex": "^3.0.0"
+ }
+ },
+ "shebang-regex": {
+ "version": "3.0.0",
+ "resolved": "https://registry.npmjs.org/shebang-regex/-/shebang-regex-3.0.0.tgz",
+ "integrity": "sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A==",
+ "dev": true
+ },
+ "uuid": {
+ "version": "3.4.0",
+ "resolved": "https://registry.npmjs.org/uuid/-/uuid-3.4.0.tgz",
+ "integrity": "sha512-HjSDRw6gZE5JMggctHBcjVak08+KEVhSIiDzFnT9S9aegmp85S/bReBVTb4QTFaRNptJ9kuYaNhnbNEOkbKb/A==",
+ "dev": true
+ },
+ "which": {
+ "version": "2.0.2",
+ "resolved": "https://registry.npmjs.org/which/-/which-2.0.2.tgz",
+ "integrity": "sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==",
+ "dev": true,
+ "requires": {
+ "isexe": "^2.0.0"
+ }
}
}
},
"istanbul-lib-report": {
- "version": "2.0.8",
- "resolved": "https://registry.npmjs.org/istanbul-lib-report/-/istanbul-lib-report-2.0.8.tgz",
- "integrity": "sha512-fHBeG573EIihhAblwgxrSenp0Dby6tJMFR/HvlerBsrCTD5bkUuoNtn3gVh29ZCS824cGGBPn7Sg7cNk+2xUsQ==",
+ "version": "3.0.0",
+ "resolved": "https://registry.npmjs.org/istanbul-lib-report/-/istanbul-lib-report-3.0.0.tgz",
+ "integrity": "sha512-wcdi+uAKzfiGT2abPpKZ0hSU1rGQjUQnLvtY5MpQ7QCTahD3VODhcu4wcfY1YtkGaDD5yuydOLINXsfbus9ROw==",
"dev": true,
"requires": {
- "istanbul-lib-coverage": "^2.0.5",
- "make-dir": "^2.1.0",
- "supports-color": "^6.1.0"
+ "istanbul-lib-coverage": "^3.0.0",
+ "make-dir": "^3.0.0",
+ "supports-color": "^7.1.0"
},
"dependencies": {
+ "has-flag": {
+ "version": "4.0.0",
+ "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz",
+ "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==",
+ "dev": true
+ },
+ "make-dir": {
+ "version": "3.1.0",
+ "resolved": "https://registry.npmjs.org/make-dir/-/make-dir-3.1.0.tgz",
+ "integrity": "sha512-g3FeP20LNwhALb/6Cz6Dd4F2ngze0jz7tbzrD2wAV+o9FeNHe4rL+yK2md0J/fiSf1sa1ADhXqi5+oVwOM/eGw==",
+ "dev": true,
+ "requires": {
+ "semver": "^6.0.0"
+ }
+ },
+ "semver": {
+ "version": "6.3.0",
+ "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz",
+ "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==",
+ "dev": true
+ },
"supports-color": {
- "version": "6.1.0",
- "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-6.1.0.tgz",
- "integrity": "sha512-qe1jfm1Mg7Nq/NSh6XE24gPXROEVsWHxC1LIx//XNlD9iw7YZQGjZNjYN7xGaEG6iKdA8EtNFW6R0gjnVXp+wQ==",
+ "version": "7.1.0",
+ "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.1.0.tgz",
+ "integrity": "sha512-oRSIpR8pxT1Wr2FquTNnGet79b3BWljqOuoW/h4oBhxJ/HUbX5nX6JSruTkvXDCFMwDPvsaTTbvMLKZWSy0R5g==",
"dev": true,
"requires": {
- "has-flag": "^3.0.0"
+ "has-flag": "^4.0.0"
}
}
}
},
"istanbul-lib-source-maps": {
- "version": "3.0.6",
- "resolved": "https://registry.npmjs.org/istanbul-lib-source-maps/-/istanbul-lib-source-maps-3.0.6.tgz",
- "integrity": "sha512-R47KzMtDJH6X4/YW9XTx+jrLnZnscW4VpNN+1PViSYTejLVPWv7oov+Duf8YQSPyVRUvueQqz1TcsC6mooZTXw==",
+ "version": "4.0.0",
+ "resolved": "https://registry.npmjs.org/istanbul-lib-source-maps/-/istanbul-lib-source-maps-4.0.0.tgz",
+ "integrity": "sha512-c16LpFRkR8vQXyHZ5nLpY35JZtzj1PQY1iZmesUbf1FZHbIupcWfjgOXBY9YHkLEQ6puz1u4Dgj6qmU/DisrZg==",
"dev": true,
"requires": {
"debug": "^4.1.1",
- "istanbul-lib-coverage": "^2.0.5",
- "make-dir": "^2.1.0",
- "rimraf": "^2.6.3",
+ "istanbul-lib-coverage": "^3.0.0",
"source-map": "^0.6.1"
},
"dependencies": {
}
},
"istanbul-reports": {
- "version": "2.2.7",
- "resolved": "https://registry.npmjs.org/istanbul-reports/-/istanbul-reports-2.2.7.tgz",
- "integrity": "sha512-uu1F/L1o5Y6LzPVSVZXNOoD/KXpJue9aeLRd0sM9uMXfZvzomB0WxVamWb5ue8kA2vVWEmW7EG+A5n3f1kqHKg==",
+ "version": "3.0.2",
+ "resolved": "https://registry.npmjs.org/istanbul-reports/-/istanbul-reports-3.0.2.tgz",
+ "integrity": "sha512-9tZvz7AiR3PEDNGiV9vIouQ/EAcqMXFmkcA1CDFTwOB98OZVDL0PH9glHotf5Ugp6GCOTypfzGWI/OqjWNCRUw==",
+ "dev": true,
+ "requires": {
+ "html-escaper": "^2.0.0",
+ "istanbul-lib-report": "^3.0.0"
+ }
+ },
+ "iterate-iterator": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/iterate-iterator/-/iterate-iterator-1.0.1.tgz",
+ "integrity": "sha512-3Q6tudGN05kbkDQDI4CqjaBf4qf85w6W6GnuZDtUVYwKgtC1q8yxYX7CZed7N+tLzQqS6roujWvszf13T+n9aw==",
+ "dev": true
+ },
+ "iterate-value": {
+ "version": "1.0.2",
+ "resolved": "https://registry.npmjs.org/iterate-value/-/iterate-value-1.0.2.tgz",
+ "integrity": "sha512-A6fMAio4D2ot2r/TYzr4yUWrmwNdsN5xL7+HUiyACE4DXm+q8HtPcnFTp+NnW3k4N05tZ7FVYFFb2CR13NxyHQ==",
"dev": true,
"requires": {
- "html-escaper": "^2.0.0"
+ "es-get-iterator": "^1.0.2",
+ "iterate-iterator": "^1.0.1"
}
},
"js-tokens": {
"dev": true
},
"json5": {
- "version": "2.1.1",
- "resolved": "https://registry.npmjs.org/json5/-/json5-2.1.1.tgz",
- "integrity": "sha512-l+3HXD0GEI3huGq1njuqtzYK8OYJyXMkOLtQ53pjWh89tvWS2h6l+1zMkYWqlb57+SiQodKZyvMEFb2X+KrFhQ==",
+ "version": "2.1.3",
+ "resolved": "https://registry.npmjs.org/json5/-/json5-2.1.3.tgz",
+ "integrity": "sha512-KXPvOm8K9IJKFM0bmdn8QXh7udDh1g/giieX0NLCaMnb4hEiVFqnop2ImTXCc5e0/oHz3LTqmHGtExn5hfMkOA==",
"dev": true,
"requires": {
- "minimist": "^1.2.0"
+ "minimist": "^1.2.5"
}
},
"killable": {
"integrity": "sha512-dcS1ul+9tmeD95T+x28/ehLgd9mENa3LsvDTtzm3vyBEO7RPptvAD+t44WVXaUjTBRcrpFeFlC8WCruUR456hw==",
"dev": true
},
- "lcid": {
- "version": "2.0.0",
- "resolved": "https://registry.npmjs.org/lcid/-/lcid-2.0.0.tgz",
- "integrity": "sha512-avPEb8P8EGnwXKClwsNUgryVjllcRqtMYa49NTsbQagYuT1DcXnl1915oxWjoyGrXR6zH/Y0Zc96xWsPcoDKeA==",
- "dev": true,
- "requires": {
- "invert-kv": "^2.0.0"
- }
- },
"leven": {
"version": "3.1.0",
"resolved": "https://registry.npmjs.org/leven/-/leven-3.1.0.tgz",
"leven": "^3.1.0"
}
},
- "load-json-file": {
- "version": "4.0.0",
- "resolved": "https://registry.npmjs.org/load-json-file/-/load-json-file-4.0.0.tgz",
- "integrity": "sha1-L19Fq5HjMhYjT9U62rZo607AmTs=",
- "dev": true,
- "requires": {
- "graceful-fs": "^4.1.2",
- "parse-json": "^4.0.0",
- "pify": "^3.0.0",
- "strip-bom": "^3.0.0"
- },
- "dependencies": {
- "pify": {
- "version": "3.0.0",
- "resolved": "https://registry.npmjs.org/pify/-/pify-3.0.0.tgz",
- "integrity": "sha1-5aSs0sEB/fPZpNB/DbxNtJ3SgXY=",
- "dev": true
- }
- }
- },
"loader-runner": {
"version": "2.4.0",
"resolved": "https://registry.npmjs.org/loader-runner/-/loader-runner-2.4.0.tgz",
}
},
"lodash": {
- "version": "4.17.15",
- "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.15.tgz",
- "integrity": "sha512-8xOcRHvCjnocdS5cpwXQXVzmmh5e5+saE2QGoeQmbKmRS6J3VQppPOIt0MnmE+4xlZoumy0GPG0D0MVIQbNA1A==",
+ "version": "4.17.19",
+ "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.19.tgz",
+ "integrity": "sha512-JNvd8XER9GQX0v2qJgsaN/mzFCNA5BRe/j8JN9d+tWyGLSodKQHKFicdwNYzWwI3wjRnaKPsGj1XkBjx/F96DQ==",
"dev": true
},
"lodash.flattendeep": {
"dev": true
},
"log-symbols": {
- "version": "2.2.0",
- "resolved": "https://registry.npmjs.org/log-symbols/-/log-symbols-2.2.0.tgz",
- "integrity": "sha512-VeIAFslyIerEJLXHziedo2basKbMKtTw3vfn5IzG0XTjhAVEJyNHnL2p7vc+wBDSdQuUpNw3M2u6xb9QsAY5Eg==",
+ "version": "3.0.0",
+ "resolved": "https://registry.npmjs.org/log-symbols/-/log-symbols-3.0.0.tgz",
+ "integrity": "sha512-dSkNGuI7iG3mfvDzUuYZyvk5dD9ocYCYzNU6CYDE6+Xqd+gwme6Z00NS3dUh8mq/73HaEtT7m6W+yUPtU6BZnQ==",
"dev": true,
"requires": {
- "chalk": "^2.0.1"
+ "chalk": "^2.4.2"
}
},
"loglevel": {
- "version": "1.6.6",
- "resolved": "https://registry.npmjs.org/loglevel/-/loglevel-1.6.6.tgz",
- "integrity": "sha512-Sgr5lbboAUBo3eXCSPL4/KoVz3ROKquOjcctxmHIt+vol2DrqTQe3SwkKKuYhEiWB5kYa13YyopJ69deJ1irzQ==",
+ "version": "1.6.8",
+ "resolved": "https://registry.npmjs.org/loglevel/-/loglevel-1.6.8.tgz",
+ "integrity": "sha512-bsU7+gc9AJ2SqpzxwU3+1fedl8zAntbtC5XYlt3s2j1hJcn2PsXSmgN8TaLG/J1/2mod4+cE/3vNL70/c1RNCA==",
"dev": true
},
"loose-envify": {
"semver": "^5.6.0"
}
},
- "mamacro": {
- "version": "0.0.3",
- "resolved": "https://registry.npmjs.org/mamacro/-/mamacro-0.0.3.tgz",
- "integrity": "sha512-qMEwh+UujcQ+kbz3T6V+wAmO2U8veoq2w+3wY8MquqwVA3jChfwY+Tk52GZKDfACEPjuZ7r2oJLejwpt8jtwTA==",
- "dev": true
- },
- "map-age-cleaner": {
- "version": "0.1.3",
- "resolved": "https://registry.npmjs.org/map-age-cleaner/-/map-age-cleaner-0.1.3.tgz",
- "integrity": "sha512-bJzx6nMoP6PDLPBFmg7+xRKeFZvFboMrGlxmNj9ClvX53KrmvM5bXFXEWjbz4cz1AFn+jWJ9z/DJSz7hrs0w3w==",
- "dev": true,
- "requires": {
- "p-defer": "^1.0.0"
- }
- },
"map-cache": {
"version": "0.2.2",
"resolved": "https://registry.npmjs.org/map-cache/-/map-cache-0.2.2.tgz",
"integrity": "sha1-hxDXrwqmJvj/+hzgAWhUUmMlV0g=",
"dev": true
},
- "mem": {
- "version": "4.3.0",
- "resolved": "https://registry.npmjs.org/mem/-/mem-4.3.0.tgz",
- "integrity": "sha512-qX2bG48pTqYRVmDB37rn/6PT7LcR8T7oAX3bf99u1Tt1nzxYfxkgqDwUwolPlXweM0XzBOBFzSx4kfp7KP1s/w==",
- "dev": true,
- "requires": {
- "map-age-cleaner": "^0.1.1",
- "mimic-fn": "^2.0.0",
- "p-is-promise": "^2.0.0"
- }
- },
"memory-fs": {
"version": "0.4.1",
"resolved": "https://registry.npmjs.org/memory-fs/-/memory-fs-0.4.1.tgz",
"integrity": "sha1-OpoguEYlI+RHz7x+i7gO1me/xVI=",
- "dev": true,
- "requires": {
- "errno": "^0.1.3",
- "readable-stream": "^2.0.1"
- }
- },
- "merge-descriptors": {
- "version": "1.0.1",
- "resolved": "https://registry.npmjs.org/merge-descriptors/-/merge-descriptors-1.0.1.tgz",
- "integrity": "sha1-sAqqVW3YtEVoFQ7J0blT8/kMu2E=",
- "dev": true
- },
- "merge-source-map": {
- "version": "1.1.0",
- "resolved": "https://registry.npmjs.org/merge-source-map/-/merge-source-map-1.1.0.tgz",
- "integrity": "sha512-Qkcp7P2ygktpMPh2mCQZaf3jhN6D3Z/qVZHSdWvQ+2Ef5HgRAPBO57A77+ENm0CPx2+1Ce/MYKi3ymqdfuqibw==",
- "dev": true,
- "requires": {
- "source-map": "^0.6.1"
- },
- "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
- }
+ "dev": true,
+ "requires": {
+ "errno": "^0.1.3",
+ "readable-stream": "^2.0.1"
}
},
+ "merge-descriptors": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/merge-descriptors/-/merge-descriptors-1.0.1.tgz",
+ "integrity": "sha1-sAqqVW3YtEVoFQ7J0blT8/kMu2E=",
+ "dev": true
+ },
"methods": {
"version": "1.1.2",
"resolved": "https://registry.npmjs.org/methods/-/methods-1.1.2.tgz",
"requires": {
"bn.js": "^4.0.0",
"brorand": "^1.0.1"
+ },
+ "dependencies": {
+ "bn.js": {
+ "version": "4.11.9",
+ "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-4.11.9.tgz",
+ "integrity": "sha512-E6QoYqCKZfgatHTdHzs1RRKP7ip4vvm+EyRUeE2RF0NblwVvb0p6jSVeNTOFxPn26QXN2o6SMfNxKp6kU8zQaw==",
+ "dev": true
+ }
}
},
"mime": {
"dev": true
},
"mime-db": {
- "version": "1.43.0",
- "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.43.0.tgz",
- "integrity": "sha512-+5dsGEEovYbT8UY9yD7eE4XTc4UwJ1jBYlgaQQF38ENsKR3wj/8q8RFZrF9WIZpB2V1ArTVFUva8sAul1NzRzQ==",
+ "version": "1.44.0",
+ "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.44.0.tgz",
+ "integrity": "sha512-/NOTfLrsPBVeH7YtFPgsVWveuL+4SjjYxaQ1xtM1KMFj7HdxlBlxeyNLzhyJVx7r4rZGJAZ/6lkKCitSc/Nmpg==",
"dev": true
},
"mime-types": {
- "version": "2.1.26",
- "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.26.tgz",
- "integrity": "sha512-01paPWYgLrkqAyrlDorC1uDwl2p3qZT7yl806vW7DvDoxwXi46jsjFbg+WdwotBIk6/MbEhO/dh5aZ5sNj/dWQ==",
+ "version": "2.1.27",
+ "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.27.tgz",
+ "integrity": "sha512-JIhqnCasI9yD+SsmkquHBxTSEuZdQX5BuQnS2Vc7puQQQ+8yiP5AY5uWhpdv4YL4VM5c6iliiYWPgJ/nJQLp7w==",
"dev": true,
"requires": {
- "mime-db": "1.43.0"
+ "mime-db": "1.44.0"
}
},
- "mimic-fn": {
- "version": "2.1.0",
- "resolved": "https://registry.npmjs.org/mimic-fn/-/mimic-fn-2.1.0.tgz",
- "integrity": "sha512-OqbOk5oEQeAZ8WXWydlu9HJjz9WVdEIvamMCcXmuqUYjTknH/sqsWvhQ3vgwKFRR1HpjvNBKQ37nbJgYzGqGcg==",
- "dev": true
- },
"minimalistic-assert": {
"version": "1.0.1",
"resolved": "https://registry.npmjs.org/minimalistic-assert/-/minimalistic-assert-1.0.1.tgz",
}
},
"mocha": {
- "version": "6.2.2",
- "resolved": "https://registry.npmjs.org/mocha/-/mocha-6.2.2.tgz",
- "integrity": "sha512-FgDS9Re79yU1xz5d+C4rv1G7QagNGHZ+iXF81hO8zY35YZZcLEsJVfFolfsqKFWunATEvNzMK0r/CwWd/szO9A==",
+ "version": "8.0.1",
+ "resolved": "https://registry.npmjs.org/mocha/-/mocha-8.0.1.tgz",
+ "integrity": "sha512-vefaXfdYI8+Yo8nPZQQi0QO2o+5q9UIMX1jZ1XMmK3+4+CQjc7+B0hPdUeglXiTlr8IHMVRo63IhO9Mzt6fxOg==",
"dev": true,
"requires": {
- "ansi-colors": "3.2.3",
+ "ansi-colors": "4.1.1",
"browser-stdout": "1.3.1",
+ "chokidar": "3.3.1",
"debug": "3.2.6",
- "diff": "3.5.0",
+ "diff": "4.0.2",
"escape-string-regexp": "1.0.5",
- "find-up": "3.0.0",
- "glob": "7.1.3",
+ "find-up": "4.1.0",
+ "glob": "7.1.6",
"growl": "1.10.5",
"he": "1.2.0",
"js-yaml": "3.13.1",
- "log-symbols": "2.2.0",
+ "log-symbols": "3.0.0",
"minimatch": "3.0.4",
- "mkdirp": "0.5.1",
- "ms": "2.1.1",
- "node-environment-flags": "1.0.5",
+ "ms": "2.1.2",
"object.assign": "4.1.0",
- "strip-json-comments": "2.0.1",
- "supports-color": "6.0.0",
- "which": "1.3.1",
+ "promise.allsettled": "1.0.2",
+ "serialize-javascript": "3.0.0",
+ "strip-json-comments": "3.0.1",
+ "supports-color": "7.1.0",
+ "which": "2.0.2",
"wide-align": "1.1.3",
- "yargs": "13.3.0",
- "yargs-parser": "13.1.1",
+ "workerpool": "6.0.0",
+ "yargs": "13.3.2",
+ "yargs-parser": "13.1.2",
"yargs-unparser": "1.6.0"
},
"dependencies": {
- "ansi-regex": {
- "version": "4.1.0",
- "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-4.1.0.tgz",
- "integrity": "sha512-1apePfXM1UOSqw0o9IiFAovVz9M5S1Dg+4TrDwfMewQ6p/rmMueb7tWZjQ1rx4Loy1ArBggoqGpfqqdI4rondg==",
+ "ansi-colors": {
+ "version": "4.1.1",
+ "resolved": "https://registry.npmjs.org/ansi-colors/-/ansi-colors-4.1.1.tgz",
+ "integrity": "sha512-JoX0apGbHaUJBNl6yF+p6JAFYZ666/hhCGKN5t9QFjbJQKUU/g8MNbFDbvfrgKXvI1QpZplPOnwIo99lX/AAmA==",
"dev": true
},
- "cliui": {
- "version": "5.0.0",
- "resolved": "https://registry.npmjs.org/cliui/-/cliui-5.0.0.tgz",
- "integrity": "sha512-PYeGSEmmHM6zvoef2w8TPzlrnNpXIjTipYK780YswmIP9vjxmd6Y2a3CB2Ks6/AU8NHjZugXvo8w3oWM2qnwXA==",
+ "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"
+ }
+ },
+ "chokidar": {
+ "version": "3.3.1",
+ "resolved": "https://registry.npmjs.org/chokidar/-/chokidar-3.3.1.tgz",
+ "integrity": "sha512-4QYCEWOcK3OJrxwvyyAOxFuhpvOVCYkr33LPfFNBjAD/w3sEzWsp2BUOkI4l9bHvWioAd0rc6NlHUOEaWkTeqg==",
"dev": true,
"requires": {
- "string-width": "^3.1.0",
- "strip-ansi": "^5.2.0",
- "wrap-ansi": "^5.1.0"
+ "anymatch": "~3.1.1",
+ "braces": "~3.0.2",
+ "fsevents": "~2.1.2",
+ "glob-parent": "~5.1.0",
+ "is-binary-path": "~2.1.0",
+ "is-glob": "~4.0.1",
+ "normalize-path": "~3.0.0",
+ "readdirp": "~3.3.0"
}
},
"debug": {
"ms": "^2.1.1"
}
},
- "minimist": {
- "version": "0.0.8",
- "resolved": "https://registry.npmjs.org/minimist/-/minimist-0.0.8.tgz",
- "integrity": "sha1-hX/Kv8M5fSYluCKCYuhqp6ARsF0=",
- "dev": 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"
+ }
},
- "mkdirp": {
- "version": "0.5.1",
- "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-0.5.1.tgz",
- "integrity": "sha1-MAV0OOrGz3+MR2fzhkjWaX11yQM=",
+ "find-up": {
+ "version": "4.1.0",
+ "resolved": "https://registry.npmjs.org/find-up/-/find-up-4.1.0.tgz",
+ "integrity": "sha512-PpOwAdQ/YlXQ2vj8a3h8IipDuYRi3wceVQQGYWxNINccq40Anw7BlsEXCMbt1Zt+OLA6Fq9suIpIWD0OsnISlw==",
"dev": true,
"requires": {
- "minimist": "0.0.8"
+ "locate-path": "^5.0.0",
+ "path-exists": "^4.0.0"
}
},
- "string-width": {
- "version": "3.1.0",
- "resolved": "https://registry.npmjs.org/string-width/-/string-width-3.1.0.tgz",
- "integrity": "sha512-vafcv6KjVZKSgz06oM/H6GDBrAtz8vdhQakGjFIvNrHA6y3HCF1CInLy+QLq8dTJPQ1b+KDUqDFctkdRW44e1w==",
+ "glob": {
+ "version": "7.1.6",
+ "resolved": "https://registry.npmjs.org/glob/-/glob-7.1.6.tgz",
+ "integrity": "sha512-LwaxwyZ72Lk7vZINtNNrywX0ZuLyStrdDtabefZKAY5ZGJhVtgdznluResxNmPitE0SAO+O26sWTHeKSI2wMBA==",
"dev": true,
"requires": {
- "emoji-regex": "^7.0.1",
- "is-fullwidth-code-point": "^2.0.0",
- "strip-ansi": "^5.1.0"
+ "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"
}
},
- "strip-ansi": {
- "version": "5.2.0",
- "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-5.2.0.tgz",
- "integrity": "sha512-DuRs1gKbBqsMKIZlrffwlug8MHkcnpjs5VPmL1PAh+mA30U0DTotfDZ0d2UUsXpPmPmMMJ6W773MaA3J+lbiWA==",
+ "has-flag": {
+ "version": "4.0.0",
+ "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz",
+ "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==",
+ "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
+ },
+ "locate-path": {
+ "version": "5.0.0",
+ "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-5.0.0.tgz",
+ "integrity": "sha512-t7hw9pI+WvuwNJXwk5zVHpyhIqzg2qTlklJOf0mVxGSbe3Fp2VieZcduNYjaLDoy6p9uGpQEGWG87WpMKlNq8g==",
"dev": true,
"requires": {
- "ansi-regex": "^4.1.0"
+ "p-locate": "^4.1.0"
}
},
- "supports-color": {
- "version": "6.0.0",
- "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-6.0.0.tgz",
- "integrity": "sha512-on9Kwidc1IUQo+bQdhi8+Tijpo0e1SS6RoGo2guUwn5vdaxw8RXOF9Vb2ws+ihWOmh4JnCJOvaziZWP1VABaLg==",
+ "ms": {
+ "version": "2.1.2",
+ "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz",
+ "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==",
+ "dev": true
+ },
+ "p-locate": {
+ "version": "4.1.0",
+ "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-4.1.0.tgz",
+ "integrity": "sha512-R79ZZ/0wAxKGu3oYMlz8jy/kbhsNrS7SKZ7PxEHBgJ5+F2mtFW2fK2cOtBh1cHYkQsbzFV7I+EoRKe6Yt0oK7A==",
"dev": true,
"requires": {
- "has-flag": "^3.0.0"
+ "p-limit": "^2.2.0"
}
},
- "wrap-ansi": {
- "version": "5.1.0",
- "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-5.1.0.tgz",
- "integrity": "sha512-QC1/iN/2/RPVJ5jYK8BGttj5z83LmSKmvbvrXPNCLZSEb32KKVDJDl/MOt2N01qU2H/FkzEa9PKto1BqDjtd7Q==",
+ "path-exists": {
+ "version": "4.0.0",
+ "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-4.0.0.tgz",
+ "integrity": "sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w==",
+ "dev": true
+ },
+ "readdirp": {
+ "version": "3.3.0",
+ "resolved": "https://registry.npmjs.org/readdirp/-/readdirp-3.3.0.tgz",
+ "integrity": "sha512-zz0pAkSPOXXm1viEwygWIPSPkcBYjW1xU5j/JBh5t9bGCJwa6f9+BJa6VaB2g+b55yVrmXzqkyLf4xaWYM0IkQ==",
"dev": true,
"requires": {
- "ansi-styles": "^3.2.0",
- "string-width": "^3.0.0",
- "strip-ansi": "^5.0.0"
+ "picomatch": "^2.0.7"
}
},
- "yargs": {
- "version": "13.3.0",
- "resolved": "https://registry.npmjs.org/yargs/-/yargs-13.3.0.tgz",
- "integrity": "sha512-2eehun/8ALW8TLoIl7MVaRUrg+yCnenu8B4kBlRxj3GJGDKU1Og7sMXPNm1BYyM1DOJmTZ4YeN/Nwxv+8XJsUA==",
+ "serialize-javascript": {
+ "version": "3.0.0",
+ "resolved": "https://registry.npmjs.org/serialize-javascript/-/serialize-javascript-3.0.0.tgz",
+ "integrity": "sha512-skZcHYw2vEX4bw90nAr2iTTsz6x2SrHEnfxgKYmZlvJYBEZrvbKtobJWlQ20zczKb3bsHHXXTYt48zBA7ni9cw==",
+ "dev": true
+ },
+ "supports-color": {
+ "version": "7.1.0",
+ "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.1.0.tgz",
+ "integrity": "sha512-oRSIpR8pxT1Wr2FquTNnGet79b3BWljqOuoW/h4oBhxJ/HUbX5nX6JSruTkvXDCFMwDPvsaTTbvMLKZWSy0R5g==",
"dev": true,
"requires": {
- "cliui": "^5.0.0",
- "find-up": "^3.0.0",
- "get-caller-file": "^2.0.1",
- "require-directory": "^2.1.1",
- "require-main-filename": "^2.0.0",
- "set-blocking": "^2.0.0",
- "string-width": "^3.0.0",
- "which-module": "^2.0.0",
- "y18n": "^4.0.0",
- "yargs-parser": "^13.1.1"
+ "has-flag": "^4.0.0"
}
},
- "yargs-parser": {
- "version": "13.1.1",
- "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-13.1.1.tgz",
- "integrity": "sha512-oVAVsHz6uFrg3XQheFII8ESO2ssAf9luWuAd6Wexsu4F3OtIW0o8IribPXYrD4WC24LWtPrJlGy87y5udK+dxQ==",
+ "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": {
- "camelcase": "^5.0.0",
- "decamelize": "^1.2.0"
+ "is-number": "^7.0.0"
+ }
+ },
+ "which": {
+ "version": "2.0.2",
+ "resolved": "https://registry.npmjs.org/which/-/which-2.0.2.tgz",
+ "integrity": "sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==",
+ "dev": true,
+ "requires": {
+ "isexe": "^2.0.0"
}
}
}
"integrity": "sha1-iZ8R2WhuXgXLkbNdXw5jt3PPyQE=",
"dev": true
},
- "nan": {
- "version": "2.14.0",
- "resolved": "https://registry.npmjs.org/nan/-/nan-2.14.0.tgz",
- "integrity": "sha512-INOFj37C7k3AfaNTtX8RhsTw7qRy7eLET14cROi9+5HAVbbHuIWUHEauBv5qT4Av2tWasiTY1Jw6puUNqRJXQg==",
- "dev": true,
- "optional": true
- },
"nanomatch": {
"version": "1.2.13",
"resolved": "https://registry.npmjs.org/nanomatch/-/nanomatch-1.2.13.tgz",
"dev": true
},
"neo-async": {
- "version": "2.6.1",
- "resolved": "https://registry.npmjs.org/neo-async/-/neo-async-2.6.1.tgz",
- "integrity": "sha512-iyam8fBuCUpWeKPGpaNMetEocMt364qkCsfL9JuhjXX6dRnguRVOfk2GZaDpPjcOKiiXCPINZC1GczQ7iTq3Zw==",
- "dev": true
- },
- "nested-error-stacks": {
- "version": "2.1.0",
- "resolved": "https://registry.npmjs.org/nested-error-stacks/-/nested-error-stacks-2.1.0.tgz",
- "integrity": "sha512-AO81vsIO1k1sM4Zrd6Hu7regmJN1NSiAja10gc4bX3F0wd+9rQmcuHQaHVQCYIEC8iFXnE+mavh23GOt7wBgug==",
+ "version": "2.6.2",
+ "resolved": "https://registry.npmjs.org/neo-async/-/neo-async-2.6.2.tgz",
+ "integrity": "sha512-Yd3UES5mWCSqR+qNT93S3UoYUkqAZ9lLg8a7g9rimsWmYGK8cVToA4/sF3RrshdyV3sAGMXVUmpMYOw+dLpOuw==",
"dev": true
},
"nice-try": {
"integrity": "sha512-1nh45deeb5olNY7eX82BkPO7SSxR5SSYJiPTrTdFUVYwAl8CKMA5N9PjTYkHiRjisVcxcQ1HXdLhx2qxxJzLNQ==",
"dev": true
},
- "node-environment-flags": {
- "version": "1.0.5",
- "resolved": "https://registry.npmjs.org/node-environment-flags/-/node-environment-flags-1.0.5.tgz",
- "integrity": "sha512-VNYPRfGfmZLx0Ye20jWzHUjyTW/c+6Wq+iLhDzUI4XmhrDd9l/FozXV3F2xOaXjvp0co0+v1YSR3CMP6g+VvLQ==",
- "dev": true,
- "requires": {
- "object.getownpropertydescriptors": "^2.0.3",
- "semver": "^5.7.0"
- },
- "dependencies": {
- "semver": {
- "version": "5.7.1",
- "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.1.tgz",
- "integrity": "sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ==",
- "dev": true
- }
- }
- },
"node-forge": {
"version": "0.9.0",
"resolved": "https://registry.npmjs.org/node-forge/-/node-forge-0.9.0.tgz",
"integrity": "sha1-jZ2+KJZKSsVxLpExZCEHxx6Q7EA=",
"dev": true
},
- "node-releases": {
- "version": "1.1.47",
- "resolved": "https://registry.npmjs.org/node-releases/-/node-releases-1.1.47.tgz",
- "integrity": "sha512-k4xjVPx5FpwBUj0Gw7uvFOTF4Ep8Hok1I6qjwL3pLfwe7Y0REQSAqOwwv9TWBCUtMHxcXfY4PgRLRozcChvTcA==",
+ "node-preload": {
+ "version": "0.2.1",
+ "resolved": "https://registry.npmjs.org/node-preload/-/node-preload-0.2.1.tgz",
+ "integrity": "sha512-RM5oyBy45cLEoHqCeh+MNuFAxO0vTFBLskvQbOKnEE7YTTSN4tbN8QWDIPQ6L+WvKsB/qLEGpYe2ZZ9d4W9OIQ==",
"dev": true,
"requires": {
- "semver": "^6.3.0"
- },
- "dependencies": {
- "semver": {
- "version": "6.3.0",
- "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz",
- "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==",
- "dev": true
- }
+ "process-on-spawn": "^1.0.0"
}
},
- "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"
- }
+ "node-releases": {
+ "version": "1.1.59",
+ "resolved": "https://registry.npmjs.org/node-releases/-/node-releases-1.1.59.tgz",
+ "integrity": "sha512-H3JrdUczbdiwxN5FuJPyCHnGHIFqQ0wWxo+9j1kAXAzqNMAHlo+4I/sYYxpyK0irQ73HgdiyzD32oqQDcU2Osw==",
+ "dev": true
},
"normalize-path": {
"version": "3.0.0",
"path-key": "^2.0.0"
}
},
- "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
- },
"nyc": {
- "version": "14.1.1",
- "resolved": "https://registry.npmjs.org/nyc/-/nyc-14.1.1.tgz",
- "integrity": "sha512-OI0vm6ZGUnoGZv/tLdZ2esSVzDwUC88SNs+6JoSOMVxA+gKMB8Tk7jBwgemLx4O40lhhvZCVw1C+OYLOBOPXWw==",
+ "version": "15.1.0",
+ "resolved": "https://registry.npmjs.org/nyc/-/nyc-15.1.0.tgz",
+ "integrity": "sha512-jMW04n9SxKdKi1ZMGhvUTHBN0EICCRkHemEoE5jm6mTYcqcdas0ATzgUgejlQUHMvpnOZqGB5Xxsv9KxJW1j8A==",
"dev": true,
"requires": {
- "archy": "^1.0.0",
- "caching-transform": "^3.0.2",
- "convert-source-map": "^1.6.0",
- "cp-file": "^6.2.0",
- "find-cache-dir": "^2.1.0",
- "find-up": "^3.0.0",
- "foreground-child": "^1.5.6",
- "glob": "^7.1.3",
- "istanbul-lib-coverage": "^2.0.5",
- "istanbul-lib-hook": "^2.0.7",
- "istanbul-lib-instrument": "^3.3.0",
- "istanbul-lib-report": "^2.0.8",
- "istanbul-lib-source-maps": "^3.0.6",
- "istanbul-reports": "^2.2.4",
- "js-yaml": "^3.13.1",
- "make-dir": "^2.1.0",
- "merge-source-map": "^1.1.0",
- "resolve-from": "^4.0.0",
- "rimraf": "^2.6.3",
+ "@istanbuljs/load-nyc-config": "^1.0.0",
+ "@istanbuljs/schema": "^0.1.2",
+ "caching-transform": "^4.0.0",
+ "convert-source-map": "^1.7.0",
+ "decamelize": "^1.2.0",
+ "find-cache-dir": "^3.2.0",
+ "find-up": "^4.1.0",
+ "foreground-child": "^2.0.0",
+ "get-package-type": "^0.1.0",
+ "glob": "^7.1.6",
+ "istanbul-lib-coverage": "^3.0.0",
+ "istanbul-lib-hook": "^3.0.0",
+ "istanbul-lib-instrument": "^4.0.0",
+ "istanbul-lib-processinfo": "^2.0.2",
+ "istanbul-lib-report": "^3.0.0",
+ "istanbul-lib-source-maps": "^4.0.0",
+ "istanbul-reports": "^3.0.2",
+ "make-dir": "^3.0.0",
+ "node-preload": "^0.2.1",
+ "p-map": "^3.0.0",
+ "process-on-spawn": "^1.0.0",
+ "resolve-from": "^5.0.0",
+ "rimraf": "^3.0.0",
"signal-exit": "^3.0.2",
- "spawn-wrap": "^1.4.2",
- "test-exclude": "^5.2.3",
- "uuid": "^3.3.2",
- "yargs": "^13.2.2",
- "yargs-parser": "^13.0.0"
+ "spawn-wrap": "^2.0.0",
+ "test-exclude": "^6.0.0",
+ "yargs": "^15.0.2"
},
"dependencies": {
- "resolve-from": {
+ "ansi-regex": {
+ "version": "5.0.0",
+ "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.0.tgz",
+ "integrity": "sha512-bY6fj56OUQ0hU1KjFNDQuJFezqKdrAyFdIevADiqrWHwSlbmBNMHp5ak2f40Pm8JTFyM2mqxkG6ngkHO11f/lg==",
+ "dev": true
+ },
+ "ansi-styles": {
+ "version": "4.2.1",
+ "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.2.1.tgz",
+ "integrity": "sha512-9VGjrMsG1vePxcSweQsN20KY/c4zN0h9fLjqAbwbPfahM3t+NL+M9HC8xeXG2I8pX5NoamTGNuomEUFI7fcUjA==",
+ "dev": true,
+ "requires": {
+ "@types/color-name": "^1.1.1",
+ "color-convert": "^2.0.1"
+ }
+ },
+ "cliui": {
+ "version": "6.0.0",
+ "resolved": "https://registry.npmjs.org/cliui/-/cliui-6.0.0.tgz",
+ "integrity": "sha512-t6wbgtoCXvAzst7QgXxJYqPt0usEfbgQdftEPbLL/cvv6HPE5VgvqCuAIDR0NgU52ds6rFwqrgakNLrHEjCbrQ==",
+ "dev": true,
+ "requires": {
+ "string-width": "^4.2.0",
+ "strip-ansi": "^6.0.0",
+ "wrap-ansi": "^6.2.0"
+ }
+ },
+ "color-convert": {
+ "version": "2.0.1",
+ "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz",
+ "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==",
+ "dev": true,
+ "requires": {
+ "color-name": "~1.1.4"
+ }
+ },
+ "color-name": {
+ "version": "1.1.4",
+ "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz",
+ "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==",
+ "dev": true
+ },
+ "emoji-regex": {
+ "version": "8.0.0",
+ "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz",
+ "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==",
+ "dev": true
+ },
+ "find-cache-dir": {
+ "version": "3.3.1",
+ "resolved": "https://registry.npmjs.org/find-cache-dir/-/find-cache-dir-3.3.1.tgz",
+ "integrity": "sha512-t2GDMt3oGC/v+BMwzmllWDuJF/xcDtE5j/fCGbqDD7OLuJkj0cfh1YSA5VKPvwMeLFLNDBkwOKZ2X85jGLVftQ==",
+ "dev": true,
+ "requires": {
+ "commondir": "^1.0.1",
+ "make-dir": "^3.0.2",
+ "pkg-dir": "^4.1.0"
+ }
+ },
+ "find-up": {
+ "version": "4.1.0",
+ "resolved": "https://registry.npmjs.org/find-up/-/find-up-4.1.0.tgz",
+ "integrity": "sha512-PpOwAdQ/YlXQ2vj8a3h8IipDuYRi3wceVQQGYWxNINccq40Anw7BlsEXCMbt1Zt+OLA6Fq9suIpIWD0OsnISlw==",
+ "dev": true,
+ "requires": {
+ "locate-path": "^5.0.0",
+ "path-exists": "^4.0.0"
+ }
+ },
+ "glob": {
+ "version": "7.1.6",
+ "resolved": "https://registry.npmjs.org/glob/-/glob-7.1.6.tgz",
+ "integrity": "sha512-LwaxwyZ72Lk7vZINtNNrywX0ZuLyStrdDtabefZKAY5ZGJhVtgdznluResxNmPitE0SAO+O26sWTHeKSI2wMBA==",
+ "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"
+ }
+ },
+ "is-fullwidth-code-point": {
+ "version": "3.0.0",
+ "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz",
+ "integrity": "sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==",
+ "dev": true
+ },
+ "locate-path": {
+ "version": "5.0.0",
+ "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-5.0.0.tgz",
+ "integrity": "sha512-t7hw9pI+WvuwNJXwk5zVHpyhIqzg2qTlklJOf0mVxGSbe3Fp2VieZcduNYjaLDoy6p9uGpQEGWG87WpMKlNq8g==",
+ "dev": true,
+ "requires": {
+ "p-locate": "^4.1.0"
+ }
+ },
+ "make-dir": {
+ "version": "3.1.0",
+ "resolved": "https://registry.npmjs.org/make-dir/-/make-dir-3.1.0.tgz",
+ "integrity": "sha512-g3FeP20LNwhALb/6Cz6Dd4F2ngze0jz7tbzrD2wAV+o9FeNHe4rL+yK2md0J/fiSf1sa1ADhXqi5+oVwOM/eGw==",
+ "dev": true,
+ "requires": {
+ "semver": "^6.0.0"
+ }
+ },
+ "p-locate": {
+ "version": "4.1.0",
+ "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-4.1.0.tgz",
+ "integrity": "sha512-R79ZZ/0wAxKGu3oYMlz8jy/kbhsNrS7SKZ7PxEHBgJ5+F2mtFW2fK2cOtBh1cHYkQsbzFV7I+EoRKe6Yt0oK7A==",
+ "dev": true,
+ "requires": {
+ "p-limit": "^2.2.0"
+ }
+ },
+ "p-map": {
+ "version": "3.0.0",
+ "resolved": "https://registry.npmjs.org/p-map/-/p-map-3.0.0.tgz",
+ "integrity": "sha512-d3qXVTF/s+W+CdJ5A29wywV2n8CQQYahlgz2bFiA+4eVNJbHJodPZ+/gXwPGh0bOqA+j8S+6+ckmvLGPk1QpxQ==",
+ "dev": true,
+ "requires": {
+ "aggregate-error": "^3.0.0"
+ }
+ },
+ "path-exists": {
"version": "4.0.0",
- "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-4.0.0.tgz",
- "integrity": "sha512-pb/MYmXstAkysRFx8piNI1tGFNQIFA3vkE3Gq4EuA1dF6gHp/+vgZqsCGJapvy8N3Q+4o7FwvquPJcnZ7RYy4g==",
+ "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-4.0.0.tgz",
+ "integrity": "sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w==",
+ "dev": true
+ },
+ "pkg-dir": {
+ "version": "4.2.0",
+ "resolved": "https://registry.npmjs.org/pkg-dir/-/pkg-dir-4.2.0.tgz",
+ "integrity": "sha512-HRDzbaKjC+AOWVXxAU/x54COGeIv9eb+6CkDSQoNTt4XyWoIJvuPsXizxu/Fr23EiekbtZwmh1IcIG/l/a10GQ==",
+ "dev": true,
+ "requires": {
+ "find-up": "^4.0.0"
+ }
+ },
+ "resolve-from": {
+ "version": "5.0.0",
+ "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-5.0.0.tgz",
+ "integrity": "sha512-qYg9KP24dD5qka9J47d0aVky0N+b4fTU89LN9iDnjB5waksiC49rvMB0PrUJQGoTmH50XPiqOvAjDfaijGxYZw==",
+ "dev": true
+ },
+ "rimraf": {
+ "version": "3.0.2",
+ "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-3.0.2.tgz",
+ "integrity": "sha512-JZkJMZkAGFFPP2YqXZXPbMlMBgsxzE8ILs4lMIX/2o0L9UBw9O/Y3o6wFw/i9YLapcUJWwqbi3kdxIPdC62TIA==",
+ "dev": true,
+ "requires": {
+ "glob": "^7.1.3"
+ }
+ },
+ "semver": {
+ "version": "6.3.0",
+ "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz",
+ "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==",
"dev": true
+ },
+ "string-width": {
+ "version": "4.2.0",
+ "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.0.tgz",
+ "integrity": "sha512-zUz5JD+tgqtuDjMhwIg5uFVV3dtqZ9yQJlZVfq4I01/K5Paj5UHj7VyrQOJvzawSVlKpObApbfD0Ed6yJc+1eg==",
+ "dev": true,
+ "requires": {
+ "emoji-regex": "^8.0.0",
+ "is-fullwidth-code-point": "^3.0.0",
+ "strip-ansi": "^6.0.0"
+ }
+ },
+ "strip-ansi": {
+ "version": "6.0.0",
+ "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.0.tgz",
+ "integrity": "sha512-AuvKTrTfQNYNIctbR1K/YGTR1756GycPsg7b9bdV9Duqur4gv6aKqHXah67Z8ImS7WEz5QVcOtlfW2rZEugt6w==",
+ "dev": true,
+ "requires": {
+ "ansi-regex": "^5.0.0"
+ }
+ },
+ "wrap-ansi": {
+ "version": "6.2.0",
+ "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-6.2.0.tgz",
+ "integrity": "sha512-r6lPcBGxZXlIcymEu7InxDMhdW0KDxpLgoFLcguasxCaJ/SOIZwINatK9KY/tf+ZrlywOKU0UDj3ATXUBfxJXA==",
+ "dev": true,
+ "requires": {
+ "ansi-styles": "^4.0.0",
+ "string-width": "^4.1.0",
+ "strip-ansi": "^6.0.0"
+ }
+ },
+ "yargs": {
+ "version": "15.4.1",
+ "resolved": "https://registry.npmjs.org/yargs/-/yargs-15.4.1.tgz",
+ "integrity": "sha512-aePbxDmcYW++PaqBsJ+HYUFwCdv4LVvdnhBy78E57PIor8/OVvhMrADFFEDh8DHDFRv/O9i3lPhsENjO7QX0+A==",
+ "dev": true,
+ "requires": {
+ "cliui": "^6.0.0",
+ "decamelize": "^1.2.0",
+ "find-up": "^4.1.0",
+ "get-caller-file": "^2.0.1",
+ "require-directory": "^2.1.1",
+ "require-main-filename": "^2.0.0",
+ "set-blocking": "^2.0.0",
+ "string-width": "^4.2.0",
+ "which-module": "^2.0.0",
+ "y18n": "^4.0.0",
+ "yargs-parser": "^18.1.2"
+ }
+ },
+ "yargs-parser": {
+ "version": "18.1.3",
+ "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-18.1.3.tgz",
+ "integrity": "sha512-o50j0JeToy/4K6OZcaQmW6lyXXKhq7csREXcDwk2omFPJEwUNOVtJKvmDr9EI1fAJZUyZcRF7kxGBWmRXudrCQ==",
+ "dev": true,
+ "requires": {
+ "camelcase": "^5.0.0",
+ "decamelize": "^1.2.0"
+ }
}
}
},
}
},
"object-inspect": {
- "version": "1.7.0",
- "resolved": "https://registry.npmjs.org/object-inspect/-/object-inspect-1.7.0.tgz",
- "integrity": "sha512-a7pEHdh1xKIAgTySUGgLMx/xwDZskN1Ud6egYYN3EdRW4ZMPNEDUTF+hwy2LUC+Bl+SyLXANnwz/jyh/qutKUw==",
+ "version": "1.8.0",
+ "resolved": "https://registry.npmjs.org/object-inspect/-/object-inspect-1.8.0.tgz",
+ "integrity": "sha512-jLdtEOB112fORuypAyl/50VRVIBIdVQOSUUGQHzJ4xBSbit81zRarz7GThkEFZy1RceYrWYcPcBFPQwHyAc1gA==",
"dev": true
},
"object-is": {
- "version": "1.0.2",
- "resolved": "https://registry.npmjs.org/object-is/-/object-is-1.0.2.tgz",
- "integrity": "sha512-Epah+btZd5wrrfjkJZq1AOB9O6OxUQto45hzFd7lXGrpHPGE0W1k+426yrZV+k6NJOzLNNW/nVsmZdIWsAqoOQ==",
- "dev": true
+ "version": "1.1.2",
+ "resolved": "https://registry.npmjs.org/object-is/-/object-is-1.1.2.tgz",
+ "integrity": "sha512-5lHCz+0uufF6wZ7CRFWJN3hp8Jqblpgve06U5CMQ3f//6iDjPr2PEo9MWCjEssDsa+UZEL4PkFpr+BMop6aKzQ==",
+ "dev": true,
+ "requires": {
+ "define-properties": "^1.1.3",
+ "es-abstract": "^1.17.5"
+ }
},
"object-keys": {
"version": "1.1.1",
"object-keys": "^1.0.11"
}
},
- "object.getownpropertydescriptors": {
- "version": "2.1.0",
- "resolved": "https://registry.npmjs.org/object.getownpropertydescriptors/-/object.getownpropertydescriptors-2.1.0.tgz",
- "integrity": "sha512-Z53Oah9A3TdLoblT7VKJaTDdXdT+lQO+cNpKVnya5JDe9uLvzu1YyY1yFDFrcxrlRgWrEFH0jJtD/IbuwjcEVg==",
- "dev": true,
- "requires": {
- "define-properties": "^1.1.3",
- "es-abstract": "^1.17.0-next.1"
- }
- },
"object.pick": {
"version": "1.3.0",
"resolved": "https://registry.npmjs.org/object.pick/-/object.pick-1.3.0.tgz",
"integrity": "sha1-hUNzx/XCMVkU/Jv8a9gjj92h7Cc=",
"dev": true
},
- "os-homedir": {
- "version": "1.0.2",
- "resolved": "https://registry.npmjs.org/os-homedir/-/os-homedir-1.0.2.tgz",
- "integrity": "sha1-/7xJiDNuDoM94MFox+8VISGqf7M=",
- "dev": true
- },
- "os-locale": {
- "version": "3.1.0",
- "resolved": "https://registry.npmjs.org/os-locale/-/os-locale-3.1.0.tgz",
- "integrity": "sha512-Z8l3R4wYWM40/52Z+S265okfFj8Kt2cC2MKY+xNi3kFs+XGI7WXu/I309QQQYbRW4ijiZ+yxs9pqEhJh0DqW3Q==",
- "dev": true,
- "requires": {
- "execa": "^1.0.0",
- "lcid": "^2.0.0",
- "mem": "^4.0.0"
- }
- },
- "p-defer": {
- "version": "1.0.0",
- "resolved": "https://registry.npmjs.org/p-defer/-/p-defer-1.0.0.tgz",
- "integrity": "sha1-n26xgvbJqozXQwBKfU+WsZaw+ww=",
- "dev": true
- },
"p-finally": {
"version": "1.0.0",
"resolved": "https://registry.npmjs.org/p-finally/-/p-finally-1.0.0.tgz",
"integrity": "sha1-P7z7FbiZpEEjs0ttzBi3JDNqLK4=",
"dev": true
},
- "p-is-promise": {
- "version": "2.1.0",
- "resolved": "https://registry.npmjs.org/p-is-promise/-/p-is-promise-2.1.0.tgz",
- "integrity": "sha512-Y3W0wlRPK8ZMRbNq97l4M5otioeA5lm1z7bkNkxCka8HSPjR0xRWmpCmc9utiaLP9Jb1eD8BgeIxTW4AIF45Pg==",
- "dev": true
- },
"p-limit": {
"version": "2.2.0",
"resolved": "https://registry.npmjs.org/p-limit/-/p-limit-2.2.0.tgz",
"dev": true
},
"package-hash": {
- "version": "3.0.0",
- "resolved": "https://registry.npmjs.org/package-hash/-/package-hash-3.0.0.tgz",
- "integrity": "sha512-lOtmukMDVvtkL84rJHI7dpTYq+0rli8N2wlnqUcBuDWCfVhRUfOmnR9SsoHFMLpACvEV60dX7rd0rFaYDZI+FA==",
+ "version": "4.0.0",
+ "resolved": "https://registry.npmjs.org/package-hash/-/package-hash-4.0.0.tgz",
+ "integrity": "sha512-whdkPIooSu/bASggZ96BWVvZTRMOFxnyUG5PnTSGKoJE2gd5mbVNmR2Nj20QFzxYYgAXpoqC+AiXzl+UMRh7zQ==",
"dev": true,
"requires": {
"graceful-fs": "^4.1.15",
- "hasha": "^3.0.0",
+ "hasha": "^5.0.0",
"lodash.flattendeep": "^4.4.0",
"release-zalgo": "^1.0.0"
}
},
"pako": {
- "version": "1.0.10",
- "resolved": "https://registry.npmjs.org/pako/-/pako-1.0.10.tgz",
- "integrity": "sha512-0DTvPVU3ed8+HNXOu5Bs+o//Mbdj9VNQMUOe9oKCwh8l0GNwpTDMKCWbRjgtD291AWnkAgkqA/LOnQS8AmS1tw==",
+ "version": "1.0.11",
+ "resolved": "https://registry.npmjs.org/pako/-/pako-1.0.11.tgz",
+ "integrity": "sha512-4hLB8Py4zZce5s4yd9XzopqwVv/yGNhV1Bl8NTmCq1763HeK2+EwVTv+leGeL13Dnh2wfbqowVPXCIO0z4taYw==",
"dev": true
},
"parallel-transform": {
"safe-buffer": "^5.1.1"
}
},
- "parse-json": {
- "version": "4.0.0",
- "resolved": "https://registry.npmjs.org/parse-json/-/parse-json-4.0.0.tgz",
- "integrity": "sha1-vjX1Qlvh9/bHRxhPmKeIy5lHfuA=",
- "dev": true,
- "requires": {
- "error-ex": "^1.3.1",
- "json-parse-better-errors": "^1.0.1"
- }
- },
"parse-passwd": {
"version": "1.0.0",
"resolved": "https://registry.npmjs.org/parse-passwd/-/parse-passwd-1.0.0.tgz",
"integrity": "sha1-32BBeABfUi8V60SQ5yR6G/qmf4w=",
"dev": true
},
- "path-type": {
- "version": "3.0.0",
- "resolved": "https://registry.npmjs.org/path-type/-/path-type-3.0.0.tgz",
- "integrity": "sha512-T2ZUsdZFHgA3u4e5PfPbjd7HDDpxPnQb5jN0SrDsjNSuVXHJqtwTnWqG0B1jZrgmJ/7lj1EmVIByWt1gxGkWvg==",
- "dev": true,
- "requires": {
- "pify": "^3.0.0"
- },
- "dependencies": {
- "pify": {
- "version": "3.0.0",
- "resolved": "https://registry.npmjs.org/pify/-/pify-3.0.0.tgz",
- "integrity": "sha1-5aSs0sEB/fPZpNB/DbxNtJ3SgXY=",
- "dev": true
- }
- }
- },
"pbkdf2": {
- "version": "3.0.17",
- "resolved": "https://registry.npmjs.org/pbkdf2/-/pbkdf2-3.0.17.tgz",
- "integrity": "sha512-U/il5MsrZp7mGg3mSQfn742na2T+1/vHDCG5/iTI3X9MKUuYUZVLQhyRsg06mCgDBTd57TxzgZt7P+fYfjRLtA==",
+ "version": "3.1.1",
+ "resolved": "https://registry.npmjs.org/pbkdf2/-/pbkdf2-3.1.1.tgz",
+ "integrity": "sha512-4Ejy1OPxi9f2tt1rRV7Go7zmfDQ+ZectEQz3VGUQhgq62HtIRPDyG/JtnwIxs6x3uNMwo2V7q1fMvKjb+Tnpqg==",
"dev": true,
"requires": {
"create-hash": "^1.1.2",
"sha.js": "^2.4.8"
}
},
+ "picomatch": {
+ "version": "2.2.2",
+ "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-2.2.2.tgz",
+ "integrity": "sha512-q0M/9eZHzmr0AulXyPwNfZjtwZ/RBZlbN3K3CErVrk50T2ASYI7Bye0EvekFY3IP1Nt2DHu0re+V2ZHIpMkuWg==",
+ "dev": true
+ },
"pify": {
"version": "4.0.1",
"resolved": "https://registry.npmjs.org/pify/-/pify-4.0.1.tgz",
}
},
"portfinder": {
- "version": "1.0.25",
- "resolved": "https://registry.npmjs.org/portfinder/-/portfinder-1.0.25.tgz",
- "integrity": "sha512-6ElJnHBbxVA1XSLgBp7G1FiCkQdlqGzuF7DswL5tcea+E8UpuvPU7beVAjjRwCioTS9ZluNbu+ZyRvgTsmqEBg==",
+ "version": "1.0.26",
+ "resolved": "https://registry.npmjs.org/portfinder/-/portfinder-1.0.26.tgz",
+ "integrity": "sha512-Xi7mKxJHHMI3rIUrnm/jjUgwhbYMkp/XKEcZX3aG4BrumLpq3nmoQMX+ClYnDZnZ/New7IatC1no5RX0zo1vXQ==",
"dev": true,
"requires": {
"async": "^2.6.2",
"dev": true
},
"postcss": {
- "version": "7.0.14",
- "resolved": "https://registry.npmjs.org/postcss/-/postcss-7.0.14.tgz",
- "integrity": "sha512-NsbD6XUUMZvBxtQAJuWDJeeC4QFsmWsfozWxCJPWf3M55K9iu2iMDaKqyoOdTJ1R4usBXuxlVFAIo8rZPQD4Bg==",
+ "version": "7.0.32",
+ "resolved": "https://registry.npmjs.org/postcss/-/postcss-7.0.32.tgz",
+ "integrity": "sha512-03eXong5NLnNCD05xscnGKGDZ98CyzoqPSMjOe6SuoQY7Z2hIj0Ld1g/O/UQRuOle2aRtiIRDg9tDcTGAkLfKw==",
"dev": true,
"requires": {
"chalk": "^2.4.2",
}
},
"postcss-modules-local-by-default": {
- "version": "2.0.6",
- "resolved": "https://registry.npmjs.org/postcss-modules-local-by-default/-/postcss-modules-local-by-default-2.0.6.tgz",
- "integrity": "sha512-oLUV5YNkeIBa0yQl7EYnxMgy4N6noxmiwZStaEJUSe2xPMcdNc8WmBQuQCx18H5psYbVxz8zoHk0RAAYZXP9gA==",
+ "version": "3.0.2",
+ "resolved": "https://registry.npmjs.org/postcss-modules-local-by-default/-/postcss-modules-local-by-default-3.0.2.tgz",
+ "integrity": "sha512-jM/V8eqM4oJ/22j0gx4jrp63GSvDH6v86OqyTHHUvk4/k1vceipZsaymiZ5PvocqZOl5SFHiFJqjs3la0wnfIQ==",
"dev": true,
"requires": {
- "postcss": "^7.0.6",
- "postcss-selector-parser": "^6.0.0",
- "postcss-value-parser": "^3.3.1"
+ "icss-utils": "^4.1.1",
+ "postcss": "^7.0.16",
+ "postcss-selector-parser": "^6.0.2",
+ "postcss-value-parser": "^4.0.0"
}
},
"postcss-modules-scope": {
- "version": "2.1.0",
- "resolved": "https://registry.npmjs.org/postcss-modules-scope/-/postcss-modules-scope-2.1.0.tgz",
- "integrity": "sha512-91Rjps0JnmtUB0cujlc8KIKCsJXWjzuxGeT/+Q2i2HXKZ7nBUeF9YQTZZTNvHVoNYj1AthsjnGLtqDUE0Op79A==",
+ "version": "2.2.0",
+ "resolved": "https://registry.npmjs.org/postcss-modules-scope/-/postcss-modules-scope-2.2.0.tgz",
+ "integrity": "sha512-YyEgsTMRpNd+HmyC7H/mh3y+MeFWevy7V1evVhJWewmMbjDHIbZbOXICC2y+m1xI1UVfIT1HMW/O04Hxyu9oXQ==",
"dev": true,
"requires": {
"postcss": "^7.0.6",
}
},
"postcss-modules-values": {
- "version": "2.0.0",
- "resolved": "https://registry.npmjs.org/postcss-modules-values/-/postcss-modules-values-2.0.0.tgz",
- "integrity": "sha512-Ki7JZa7ff1N3EIMlPnGTZfUMe69FFwiQPnVSXC9mnn3jozCRBYIxiZd44yJOV2AmabOo4qFf8s0dC/+lweG7+w==",
+ "version": "3.0.0",
+ "resolved": "https://registry.npmjs.org/postcss-modules-values/-/postcss-modules-values-3.0.0.tgz",
+ "integrity": "sha512-1//E5jCBrZ9DmRX+zCtmQtRSV6PV42Ix7Bzj9GbwJceduuf7IqP8MgeTXuRDHOWj2m0VzZD5+roFWDuU8RQjcg==",
"dev": true,
"requires": {
- "icss-replace-symbols": "^1.1.0",
+ "icss-utils": "^4.0.0",
"postcss": "^7.0.6"
}
},
}
},
"postcss-value-parser": {
- "version": "3.3.1",
- "resolved": "https://registry.npmjs.org/postcss-value-parser/-/postcss-value-parser-3.3.1.tgz",
- "integrity": "sha512-pISE66AbVkp4fDQ7VHBwRNXzAAKJjw4Vw7nWI/+Q3vuly7SNfgYXvm6i5IgFylHGK5sP/xHAbB7N49OS4gWNyQ==",
- "dev": true
- },
- "private": {
- "version": "0.1.8",
- "resolved": "https://registry.npmjs.org/private/-/private-0.1.8.tgz",
- "integrity": "sha512-VvivMrbvd2nKkiG38qjULzlc+4Vx4wm/whI9pQD35YrARNnhxeiRktSOhSukRLFNlzg6Br/cJPet5J/u19r/mg==",
+ "version": "4.1.0",
+ "resolved": "https://registry.npmjs.org/postcss-value-parser/-/postcss-value-parser-4.1.0.tgz",
+ "integrity": "sha512-97DXOFbQJhk71ne5/Mt6cOu6yxsSfM0QGQyl0L25Gca4yGWEGJaig7l7gbCX623VqTBNGLRLaVUCnNkcedlRSQ==",
"dev": true
},
"process": {
"integrity": "sha512-3ouUOpQhtgrbOa17J7+uxOTpITYWaGP7/AhoR3+A+/1e9skrzelGi/dXzEYyvbxubEF6Wn2ypscTKiKJFFn1ag==",
"dev": true
},
+ "process-on-spawn": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/process-on-spawn/-/process-on-spawn-1.0.0.tgz",
+ "integrity": "sha512-1WsPDsUSMmZH5LeMLegqkPDrsGgsWwk1Exipy2hvB0o/F0ASzbpIctSCcZIK1ykJvtTJULEH+20WOFjMvGnCTg==",
+ "dev": true,
+ "requires": {
+ "fromentries": "^1.2.0"
+ }
+ },
"promise-inflight": {
"version": "1.0.1",
"resolved": "https://registry.npmjs.org/promise-inflight/-/promise-inflight-1.0.1.tgz",
"integrity": "sha1-mEcocL8igTL8vdhoEputEsPAKeM=",
"dev": true
},
+ "promise.allsettled": {
+ "version": "1.0.2",
+ "resolved": "https://registry.npmjs.org/promise.allsettled/-/promise.allsettled-1.0.2.tgz",
+ "integrity": "sha512-UpcYW5S1RaNKT6pd+s9jp9K9rlQge1UXKskec0j6Mmuq7UJCvlS2J2/s/yuPN8ehftf9HXMxWlKiPbGGUzpoRg==",
+ "dev": true,
+ "requires": {
+ "array.prototype.map": "^1.0.1",
+ "define-properties": "^1.1.3",
+ "es-abstract": "^1.17.0-next.1",
+ "function-bind": "^1.1.1",
+ "iterate-value": "^1.0.0"
+ }
+ },
"prop-types": {
"version": "15.7.2",
"resolved": "https://registry.npmjs.org/prop-types/-/prop-types-15.7.2.tgz",
}
},
"proxy-addr": {
- "version": "2.0.5",
- "resolved": "https://registry.npmjs.org/proxy-addr/-/proxy-addr-2.0.5.tgz",
- "integrity": "sha512-t/7RxHXPH6cJtP0pRG6smSr9QJidhB+3kXu0KgXnbGYMgzEnUxRQ4/LDdfOwZEMyIh3/xHb8PX3t+lfL9z+YVQ==",
+ "version": "2.0.6",
+ "resolved": "https://registry.npmjs.org/proxy-addr/-/proxy-addr-2.0.6.tgz",
+ "integrity": "sha512-dh/frvCBVmSsDYzw6n926jv974gddhkFPfiN8hPOi30Wax25QZyZEGveluCgliBnqmuM+UJmBErbAUFIoDbjOw==",
"dev": true,
"requires": {
"forwarded": "~0.1.2",
- "ipaddr.js": "1.9.0"
+ "ipaddr.js": "1.9.1"
}
},
"prr": {
"integrity": "sha1-0/wRS6BplaRexok/SEzrHXj19HY=",
"dev": true
},
- "pseudomap": {
- "version": "1.0.2",
- "resolved": "https://registry.npmjs.org/pseudomap/-/pseudomap-1.0.2.tgz",
- "integrity": "sha1-8FKijacOYYkX7wqKw0wa5aaChrM=",
- "dev": true
- },
"public-encrypt": {
"version": "4.0.3",
"resolved": "https://registry.npmjs.org/public-encrypt/-/public-encrypt-4.0.3.tgz",
"parse-asn1": "^5.0.0",
"randombytes": "^2.0.1",
"safe-buffer": "^5.1.2"
+ },
+ "dependencies": {
+ "bn.js": {
+ "version": "4.11.9",
+ "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-4.11.9.tgz",
+ "integrity": "sha512-E6QoYqCKZfgatHTdHzs1RRKP7ip4vvm+EyRUeE2RF0NblwVvb0p6jSVeNTOFxPn26QXN2o6SMfNxKp6kU8zQaw==",
+ "dev": true
+ }
}
},
"pump": {
"react-is": "^16.9.0"
}
},
- "read-pkg": {
- "version": "3.0.0",
- "resolved": "https://registry.npmjs.org/read-pkg/-/read-pkg-3.0.0.tgz",
- "integrity": "sha1-nLxoaXj+5l0WwA4rGcI3/Pbjg4k=",
- "dev": true,
- "requires": {
- "load-json-file": "^4.0.0",
- "normalize-package-data": "^2.3.2",
- "path-type": "^3.0.0"
- }
- },
- "read-pkg-up": {
- "version": "4.0.0",
- "resolved": "https://registry.npmjs.org/read-pkg-up/-/read-pkg-up-4.0.0.tgz",
- "integrity": "sha512-6etQSH7nJGsK0RbG/2TeDzZFa8shjQ1um+SwQQ5cwKy0dhSXdOncEhb1CPpvQG4h7FyOV6EB6YlV0yJvZQNAkA==",
- "dev": true,
- "requires": {
- "find-up": "^3.0.0",
- "read-pkg": "^3.0.0"
- }
- },
"readable-stream": {
"version": "2.3.7",
"resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.7.tgz",
}
},
"readdirp": {
- "version": "2.2.1",
- "resolved": "https://registry.npmjs.org/readdirp/-/readdirp-2.2.1.tgz",
- "integrity": "sha512-1JU/8q+VgFZyxwrJ+SVIOsh+KywWGpds3NTqikiKpDMZWScmAYyKIgqkO+ARvNWJfXeXR1zxz7aHF4u4CyH6vQ==",
+ "version": "3.4.0",
+ "resolved": "https://registry.npmjs.org/readdirp/-/readdirp-3.4.0.tgz",
+ "integrity": "sha512-0xe001vZBnJEK+uKcj8qOhyAKPzIT+gStxWr3LCB0DwcXR5NZJ3IaC+yGnHCYzB/S7ov3m3EEbZI2zeNvX+hGQ==",
"dev": true,
+ "optional": true,
"requires": {
- "graceful-fs": "^4.1.11",
- "micromatch": "^3.1.10",
- "readable-stream": "^2.0.2"
+ "picomatch": "^2.2.1"
}
},
"redux": {
}
},
"regenerate": {
- "version": "1.4.0",
- "resolved": "https://registry.npmjs.org/regenerate/-/regenerate-1.4.0.tgz",
- "integrity": "sha512-1G6jJVDWrt0rK99kBjvEtziZNCICAuvIPkSiUFIQxVP06RCVpq3dmDo2oi6ABpYaDYaTRr67BEhL8r1wgEZZKg==",
+ "version": "1.4.1",
+ "resolved": "https://registry.npmjs.org/regenerate/-/regenerate-1.4.1.tgz",
+ "integrity": "sha512-j2+C8+NtXQgEKWk49MMP5P/u2GhnahTtVkRIHr5R5lVRlbKvmQ+oS+A5aLKWp2ma5VkT8sh6v+v4hbH0YHR66A==",
"dev": true
},
"regenerate-unicode-properties": {
- "version": "8.1.0",
- "resolved": "https://registry.npmjs.org/regenerate-unicode-properties/-/regenerate-unicode-properties-8.1.0.tgz",
- "integrity": "sha512-LGZzkgtLY79GeXLm8Dp0BVLdQlWICzBnJz/ipWUgo59qBaZ+BHtq51P2q1uVZlppMuUAT37SDk39qUbjTWB7bA==",
+ "version": "8.2.0",
+ "resolved": "https://registry.npmjs.org/regenerate-unicode-properties/-/regenerate-unicode-properties-8.2.0.tgz",
+ "integrity": "sha512-F9DjY1vKLo/tPePDycuH3dn9H1OTPIkVD9Kz4LODu+F2C75mgjAJ7x/gwy6ZcSNRAAkhNlJSOHRe8k3p+K9WhA==",
"dev": true,
"requires": {
"regenerate": "^1.4.0"
"integrity": "sha512-ZS5w8CpKFinUzOwW3c83oPeVXoNsrLsaCoLtJvAClH135j/R77RuymhiSErhm2lKcwSCIpmvIWSbDkIfAqKQlA=="
},
"regenerator-transform": {
- "version": "0.14.1",
- "resolved": "https://registry.npmjs.org/regenerator-transform/-/regenerator-transform-0.14.1.tgz",
- "integrity": "sha512-flVuee02C3FKRISbxhXl9mGzdbWUVHubl1SMaknjxkFB1/iqpJhArQUvRxOOPEc/9tAiX0BaQ28FJH10E4isSQ==",
+ "version": "0.14.5",
+ "resolved": "https://registry.npmjs.org/regenerator-transform/-/regenerator-transform-0.14.5.tgz",
+ "integrity": "sha512-eOf6vka5IO151Jfsw2NO9WpGX58W6wWmefK3I1zEGr0lOD0u8rwPaNqQL1aRxUaxLeKO3ArNh3VYg1KbaD+FFw==",
"dev": true,
"requires": {
- "private": "^0.1.6"
+ "@babel/runtime": "^7.8.4"
}
},
"regex-not": {
}
},
"regexpu-core": {
- "version": "4.6.0",
- "resolved": "https://registry.npmjs.org/regexpu-core/-/regexpu-core-4.6.0.tgz",
- "integrity": "sha512-YlVaefl8P5BnFYOITTNzDvan1ulLOiXJzCNZxduTIosN17b87h3bvG9yHMoHaRuo88H4mQ06Aodj5VtYGGGiTg==",
+ "version": "4.7.0",
+ "resolved": "https://registry.npmjs.org/regexpu-core/-/regexpu-core-4.7.0.tgz",
+ "integrity": "sha512-TQ4KXRnIn6tz6tjnrXEkD/sshygKH/j5KzK86X8MkeHyZ8qst/LZ89j3X4/8HEIfHANTFIP/AbXakeRhWIl5YQ==",
"dev": true,
"requires": {
"regenerate": "^1.4.0",
- "regenerate-unicode-properties": "^8.1.0",
- "regjsgen": "^0.5.0",
- "regjsparser": "^0.6.0",
+ "regenerate-unicode-properties": "^8.2.0",
+ "regjsgen": "^0.5.1",
+ "regjsparser": "^0.6.4",
"unicode-match-property-ecmascript": "^1.0.4",
- "unicode-match-property-value-ecmascript": "^1.1.0"
+ "unicode-match-property-value-ecmascript": "^1.2.0"
}
},
"regjsgen": {
- "version": "0.5.1",
- "resolved": "https://registry.npmjs.org/regjsgen/-/regjsgen-0.5.1.tgz",
- "integrity": "sha512-5qxzGZjDs9w4tzT3TPhCJqWdCc3RLYwy9J2NB0nm5Lz+S273lvWcpjaTGHsT1dc6Hhfq41uSEOw8wBmxrKOuyg==",
+ "version": "0.5.2",
+ "resolved": "https://registry.npmjs.org/regjsgen/-/regjsgen-0.5.2.tgz",
+ "integrity": "sha512-OFFT3MfrH90xIW8OOSyUrk6QHD5E9JOTeGodiJeBS3J6IwlgzJMNE/1bZklWz5oTg+9dCMyEetclvCVXOPoN3A==",
"dev": true
},
"regjsparser": {
- "version": "0.6.2",
- "resolved": "https://registry.npmjs.org/regjsparser/-/regjsparser-0.6.2.tgz",
- "integrity": "sha512-E9ghzUtoLwDekPT0DYCp+c4h+bvuUpe6rRHCTYn6eGoqj1LgKXxT6I0Il4WbjhQkOghzi/V+y03bPKvbllL93Q==",
+ "version": "0.6.4",
+ "resolved": "https://registry.npmjs.org/regjsparser/-/regjsparser-0.6.4.tgz",
+ "integrity": "sha512-64O87/dPDgfk8/RQqC4gkZoGyyWFIEUTTh80CU6CWuK5vkCGyekIx+oKcEIYtP/RAxSQltCZHCNu/mdd7fqlJw==",
"dev": true,
"requires": {
"jsesc": "~0.5.0"
"dev": true
},
"resolve": {
- "version": "1.11.1",
- "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.11.1.tgz",
- "integrity": "sha512-vIpgF6wfuJOZI7KKKSP+HmiKggadPQAdsp5HiC1mvqnfp0gF1vdwgBWZIdrVft9pgqoMFQN+R7BSWZiBxx+BBw==",
+ "version": "1.17.0",
+ "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.17.0.tgz",
+ "integrity": "sha512-ic+7JYiV8Vi2yzQGFWOkiZD5Z9z7O2Zhm9XMaTxdJExKasieFCr+yXZ/WmXsckHiKl12ar0y6XiXDx3m4RHn1w==",
"dev": true,
"requires": {
"path-parse": "^1.0.6"
}
},
"serialize-javascript": {
- "version": "2.1.2",
- "resolved": "https://registry.npmjs.org/serialize-javascript/-/serialize-javascript-2.1.2.tgz",
- "integrity": "sha512-rs9OggEUF0V4jUSecXazOYsLfu7OGK2qIn3c7IPBiffz32XniEp/TX9Xmc9LQfK2nQ2QKHvZ2oygKUGU0lG4jQ==",
- "dev": true
+ "version": "3.1.0",
+ "resolved": "https://registry.npmjs.org/serialize-javascript/-/serialize-javascript-3.1.0.tgz",
+ "integrity": "sha512-JIJT1DGiWmIKhzRsG91aS6Ze4sFUrYbltlkg2onR5OrnNM02Kl/hnY/T4FN2omvyeBbQmMJv+K4cPOpGzOTFBg==",
+ "dev": true,
+ "requires": {
+ "randombytes": "^2.1.0"
+ }
},
"serve-index": {
"version": "1.9.1",
"safe-buffer": "^5.0.1"
}
},
+ "shallow-clone": {
+ "version": "3.0.1",
+ "resolved": "https://registry.npmjs.org/shallow-clone/-/shallow-clone-3.0.1.tgz",
+ "integrity": "sha512-/6KqX+GVUdqPuPPd2LxDDxzX6CAbjJehAAOKlNpqqUpAqPM6HeL8f+o3a+JsyGjn2lv0WY8UsTgUJjU9Ok55NA==",
+ "dev": true,
+ "requires": {
+ "kind-of": "^6.0.2"
+ }
+ },
"shebang-command": {
"version": "1.2.0",
"resolved": "https://registry.npmjs.org/shebang-command/-/shebang-command-1.2.0.tgz",
}
},
"sockjs": {
- "version": "0.3.19",
- "resolved": "https://registry.npmjs.org/sockjs/-/sockjs-0.3.19.tgz",
- "integrity": "sha512-V48klKZl8T6MzatbLlzzRNhMepEys9Y4oGFpypBFFn1gLI/QQ9HtLLyWJNbPlwGLelOVOEijUbTTJeLLI59jLw==",
+ "version": "0.3.20",
+ "resolved": "https://registry.npmjs.org/sockjs/-/sockjs-0.3.20.tgz",
+ "integrity": "sha512-SpmVOVpdq0DJc0qArhF3E5xsxvaiqGNb73XfgBpK1y3UD5gs8DSo8aCTsuT5pX8rssdc2NDIzANwP9eCAiSdTA==",
"dev": true,
"requires": {
"faye-websocket": "^0.10.0",
- "uuid": "^3.0.1"
+ "uuid": "^3.4.0",
+ "websocket-driver": "0.6.5"
+ },
+ "dependencies": {
+ "uuid": {
+ "version": "3.4.0",
+ "resolved": "https://registry.npmjs.org/uuid/-/uuid-3.4.0.tgz",
+ "integrity": "sha512-HjSDRw6gZE5JMggctHBcjVak08+KEVhSIiDzFnT9S9aegmp85S/bReBVTb4QTFaRNptJ9kuYaNhnbNEOkbKb/A==",
+ "dev": true
+ }
}
},
"sockjs-client": {
}
},
"source-map-support": {
- "version": "0.5.16",
- "resolved": "https://registry.npmjs.org/source-map-support/-/source-map-support-0.5.16.tgz",
- "integrity": "sha512-efyLRJDr68D9hBBNIPWFjhpFzURh+KJykQwvMyW5UiZzYwoF6l4YMMDIJJEyFWxWCqfyxLzz6tSfUFR+kXXsVQ==",
+ "version": "0.5.19",
+ "resolved": "https://registry.npmjs.org/source-map-support/-/source-map-support-0.5.19.tgz",
+ "integrity": "sha512-Wonm7zOCIJzBGQdB+thsPar0kYuCIzYvxZwlBa87yi/Mdjv7Tip2cyVbLj5o0cFPN4EVkuTwb3GDDyUx2DGnGw==",
"dev": true,
"requires": {
"buffer-from": "^1.0.0",
"dev": true
},
"spawn-wrap": {
- "version": "1.4.3",
- "resolved": "https://registry.npmjs.org/spawn-wrap/-/spawn-wrap-1.4.3.tgz",
- "integrity": "sha512-IgB8md0QW/+tWqcavuFgKYR/qIRvJkRLPJDFaoXtLLUaVcCDK0+HeFTkmQHj3eprcYhc+gOl0aEA1w7qZlYezw==",
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/spawn-wrap/-/spawn-wrap-2.0.0.tgz",
+ "integrity": "sha512-EeajNjfN9zMnULLwhZZQU3GWBoFNkbngTUPfaawT4RkMiviTxcX0qfhVbGey39mfctfDHkWtuecgQ8NJcyQWHg==",
"dev": true,
"requires": {
- "foreground-child": "^1.5.6",
- "mkdirp": "^0.5.0",
- "os-homedir": "^1.0.1",
- "rimraf": "^2.6.2",
+ "foreground-child": "^2.0.0",
+ "is-windows": "^1.0.2",
+ "make-dir": "^3.0.0",
+ "rimraf": "^3.0.0",
"signal-exit": "^3.0.2",
- "which": "^1.3.0"
- }
- },
- "spdx-correct": {
- "version": "3.1.0",
- "resolved": "https://registry.npmjs.org/spdx-correct/-/spdx-correct-3.1.0.tgz",
- "integrity": "sha512-lr2EZCctC2BNR7j7WzJ2FpDznxky1sjfxvvYEyzxNyb6lZXHODmEoJeFu4JupYlkfha1KZpJyoqiJ7pgA1qq8Q==",
- "dev": true,
- "requires": {
- "spdx-expression-parse": "^3.0.0",
- "spdx-license-ids": "^3.0.0"
- }
- },
- "spdx-exceptions": {
- "version": "2.2.0",
- "resolved": "https://registry.npmjs.org/spdx-exceptions/-/spdx-exceptions-2.2.0.tgz",
- "integrity": "sha512-2XQACfElKi9SlVb1CYadKDXvoajPgBVPn/gOQLrTvHdElaVhr7ZEbqJaRnJLVNeaI4cMEAgVCeBMKF6MWRDCRA==",
- "dev": true
- },
- "spdx-expression-parse": {
- "version": "3.0.0",
- "resolved": "https://registry.npmjs.org/spdx-expression-parse/-/spdx-expression-parse-3.0.0.tgz",
- "integrity": "sha512-Yg6D3XpRD4kkOmTpdgbUiEJFKghJH03fiC1OPll5h/0sO6neh2jqRDVHOQ4o/LMea0tgCkbMgea5ip/e+MkWyg==",
- "dev": true,
- "requires": {
- "spdx-exceptions": "^2.1.0",
- "spdx-license-ids": "^3.0.0"
+ "which": "^2.0.1"
+ },
+ "dependencies": {
+ "make-dir": {
+ "version": "3.1.0",
+ "resolved": "https://registry.npmjs.org/make-dir/-/make-dir-3.1.0.tgz",
+ "integrity": "sha512-g3FeP20LNwhALb/6Cz6Dd4F2ngze0jz7tbzrD2wAV+o9FeNHe4rL+yK2md0J/fiSf1sa1ADhXqi5+oVwOM/eGw==",
+ "dev": true,
+ "requires": {
+ "semver": "^6.0.0"
+ }
+ },
+ "rimraf": {
+ "version": "3.0.2",
+ "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-3.0.2.tgz",
+ "integrity": "sha512-JZkJMZkAGFFPP2YqXZXPbMlMBgsxzE8ILs4lMIX/2o0L9UBw9O/Y3o6wFw/i9YLapcUJWwqbi3kdxIPdC62TIA==",
+ "dev": true,
+ "requires": {
+ "glob": "^7.1.3"
+ }
+ },
+ "semver": {
+ "version": "6.3.0",
+ "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz",
+ "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==",
+ "dev": true
+ },
+ "which": {
+ "version": "2.0.2",
+ "resolved": "https://registry.npmjs.org/which/-/which-2.0.2.tgz",
+ "integrity": "sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==",
+ "dev": true,
+ "requires": {
+ "isexe": "^2.0.0"
+ }
+ }
}
},
- "spdx-license-ids": {
- "version": "3.0.5",
- "resolved": "https://registry.npmjs.org/spdx-license-ids/-/spdx-license-ids-3.0.5.tgz",
- "integrity": "sha512-J+FWzZoynJEXGphVIS+XEh3kFSjZX/1i9gFBaWQcB+/tmpe2qUsSBABpcxqxnAxFdiUFEgAX1bjYGQvIZmoz9Q==",
- "dev": true
- },
"spdy": {
- "version": "4.0.1",
- "resolved": "https://registry.npmjs.org/spdy/-/spdy-4.0.1.tgz",
- "integrity": "sha512-HeZS3PBdMA+sZSu0qwpCxl3DeALD5ASx8pAX0jZdKXSpPWbQ6SYGnlg3BBmYLx5LtiZrmkAZfErCm2oECBcioA==",
+ "version": "4.0.2",
+ "resolved": "https://registry.npmjs.org/spdy/-/spdy-4.0.2.tgz",
+ "integrity": "sha512-r46gZQZQV+Kl9oItvl1JZZqJKGr+oEkB08A6BzkiR7593/7IbtuncXHd2YoYeTsG4157ZssMu9KYvUHLcjcDoA==",
"dev": true,
"requires": {
"debug": "^4.1.0",
},
"dependencies": {
"readable-stream": {
- "version": "3.5.0",
- "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-3.5.0.tgz",
- "integrity": "sha512-gSz026xs2LfxBPudDuI41V1lka8cxg64E66SGe78zJlsUofOg/yqwezdIcdfwik6B4h8LFmWPA9ef9X3FiNFLA==",
+ "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",
"strip-ansi": "^4.0.0"
}
},
- "string.prototype.trimleft": {
- "version": "2.1.1",
- "resolved": "https://registry.npmjs.org/string.prototype.trimleft/-/string.prototype.trimleft-2.1.1.tgz",
- "integrity": "sha512-iu2AGd3PuP5Rp7x2kEZCrB2Nf41ehzh+goo8TV7z8/XDBbsvc6HQIlUl9RjkZ4oyrW1XM5UwlGl1oVEaDjg6Ag==",
+ "string.prototype.trimend": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/string.prototype.trimend/-/string.prototype.trimend-1.0.1.tgz",
+ "integrity": "sha512-LRPxFUaTtpqYsTeNKaFOw3R4bxIzWOnbQ837QfBylo8jIxtcbK/A/sMV7Q+OAV/vWo+7s25pOE10KYSjaSO06g==",
"dev": true,
"requires": {
"define-properties": "^1.1.3",
- "function-bind": "^1.1.1"
+ "es-abstract": "^1.17.5"
}
},
- "string.prototype.trimright": {
- "version": "2.1.1",
- "resolved": "https://registry.npmjs.org/string.prototype.trimright/-/string.prototype.trimright-2.1.1.tgz",
- "integrity": "sha512-qFvWL3/+QIgZXVmJBfpHmxLB7xsUXz6HsUmP8+5dRaC3Q7oKUv9Vo6aMCRZC1smrtyECFsIT30PqBJ1gTjAs+g==",
+ "string.prototype.trimstart": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/string.prototype.trimstart/-/string.prototype.trimstart-1.0.1.tgz",
+ "integrity": "sha512-XxZn+QpvrBI1FOcg6dIpxUPgWCPuNXvMD72aaRaUQv1eD4e/Qy8i/hFTe0BUmD60p/QA6bh1avmuPTfNjqVWRw==",
"dev": true,
"requires": {
"define-properties": "^1.1.3",
- "function-bind": "^1.1.1"
+ "es-abstract": "^1.17.5"
}
},
"string_decoder": {
}
},
"strip-bom": {
- "version": "3.0.0",
- "resolved": "https://registry.npmjs.org/strip-bom/-/strip-bom-3.0.0.tgz",
- "integrity": "sha1-IzTBjpx1n3vdVv3vfprj1YjmjtM=",
+ "version": "4.0.0",
+ "resolved": "https://registry.npmjs.org/strip-bom/-/strip-bom-4.0.0.tgz",
+ "integrity": "sha512-3xurFv5tEgii33Zi8Jtp55wEIILR9eh34FAW00PZf+JnSsTmV/ioewSgQl97JHvgjoRGwPShsWm+IdrxB35d0w==",
"dev": true
},
"strip-eof": {
"dev": true
},
"strip-json-comments": {
- "version": "2.0.1",
- "resolved": "https://registry.npmjs.org/strip-json-comments/-/strip-json-comments-2.0.1.tgz",
- "integrity": "sha1-PFMZQukIwml8DsNEhYwobHygpgo=",
+ "version": "3.0.1",
+ "resolved": "https://registry.npmjs.org/strip-json-comments/-/strip-json-comments-3.0.1.tgz",
+ "integrity": "sha512-VTyMAUfdm047mwKl+u79WIdrZxtFtn+nBxHeb844XBQ9uMNTuTHdx2hc5RiAJYqwTj3wc/xe5HLSdJSkJ+WfZw==",
"dev": true
},
"style-loader": {
- "version": "0.23.1",
- "resolved": "https://registry.npmjs.org/style-loader/-/style-loader-0.23.1.tgz",
- "integrity": "sha512-XK+uv9kWwhZMZ1y7mysB+zoihsEj4wneFWAS5qoiLwzW0WzSqMrrsIy+a3zkQJq0ipFtBpX5W3MqyRIBF/WFGg==",
+ "version": "1.2.1",
+ "resolved": "https://registry.npmjs.org/style-loader/-/style-loader-1.2.1.tgz",
+ "integrity": "sha512-ByHSTQvHLkWE9Ir5+lGbVOXhxX10fbprhLvdg96wedFZb4NDekDPxVKv5Fwmio+QcMlkkNfuK+5W1peQ5CUhZg==",
"dev": true,
"requires": {
- "loader-utils": "^1.1.0",
- "schema-utils": "^1.0.0"
+ "loader-utils": "^2.0.0",
+ "schema-utils": "^2.6.6"
+ },
+ "dependencies": {
+ "ajv": {
+ "version": "6.12.3",
+ "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.12.3.tgz",
+ "integrity": "sha512-4K0cK3L1hsqk9xIb2z9vs/XU+PGJZ9PNpJRDS9YLzmNdX6jmVPfamLvTJr0aDAusnHyCHO6MjzlkAsgtqp9teA==",
+ "dev": true,
+ "requires": {
+ "fast-deep-equal": "^3.1.1",
+ "fast-json-stable-stringify": "^2.0.0",
+ "json-schema-traverse": "^0.4.1",
+ "uri-js": "^4.2.2"
+ }
+ },
+ "ajv-keywords": {
+ "version": "3.5.1",
+ "resolved": "https://registry.npmjs.org/ajv-keywords/-/ajv-keywords-3.5.1.tgz",
+ "integrity": "sha512-KWcq3xN8fDjSB+IMoh2VaXVhRI0BBGxoYp3rx7Pkb6z0cFjYR9Q9l4yZqqals0/zsioCmocC5H6UvsGD4MoIBA==",
+ "dev": true
+ },
+ "emojis-list": {
+ "version": "3.0.0",
+ "resolved": "https://registry.npmjs.org/emojis-list/-/emojis-list-3.0.0.tgz",
+ "integrity": "sha512-/kyM18EfinwXZbno9FyUGeFh87KC8HRQBQGildHZbEuRyWFOmv1U10o9BBp8XVZDVNNuQKyIGIu5ZYAAXJ0V2Q==",
+ "dev": true
+ },
+ "fast-deep-equal": {
+ "version": "3.1.3",
+ "resolved": "https://registry.npmjs.org/fast-deep-equal/-/fast-deep-equal-3.1.3.tgz",
+ "integrity": "sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q==",
+ "dev": true
+ },
+ "loader-utils": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/loader-utils/-/loader-utils-2.0.0.tgz",
+ "integrity": "sha512-rP4F0h2RaWSvPEkD7BLDFQnvSf+nK+wr3ESUjNTyAGobqrijmW92zc+SO6d4p4B1wh7+B/Jg1mkQe5NYUEHtHQ==",
+ "dev": true,
+ "requires": {
+ "big.js": "^5.2.2",
+ "emojis-list": "^3.0.0",
+ "json5": "^2.1.2"
+ }
+ },
+ "schema-utils": {
+ "version": "2.7.0",
+ "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-2.7.0.tgz",
+ "integrity": "sha512-0ilKFI6QQF5nxDZLFn2dMjvc4hjg/Wkg7rHd3jK6/A4a1Hl9VFdQWvgB1UMGoU94pad1P/8N7fMcEnLnSiju8A==",
+ "dev": true,
+ "requires": {
+ "@types/json-schema": "^7.0.4",
+ "ajv": "^6.12.2",
+ "ajv-keywords": "^3.4.1"
+ }
+ }
}
},
"supports-color": {
"dev": true
},
"terser": {
- "version": "4.6.1",
- "resolved": "https://registry.npmjs.org/terser/-/terser-4.6.1.tgz",
- "integrity": "sha512-w0f2OWFD7ka3zwetgVAhNMeyzEbj39ht2Tb0qKflw9PmW9Qbo5tjTh01QJLkhO9t9RDDQYvk+WXqpECI2C6i2A==",
+ "version": "4.8.0",
+ "resolved": "https://registry.npmjs.org/terser/-/terser-4.8.0.tgz",
+ "integrity": "sha512-EAPipTNeWsb/3wLPeup1tVPaXfIaU68xMnVdPafIL1TV05OhASArYyIfFvnvJCNrR2NIOvDVNNTFRa+Re2MWyw==",
"dev": true,
"requires": {
"commander": "^2.20.0",
}
},
"terser-webpack-plugin": {
- "version": "1.4.3",
- "resolved": "https://registry.npmjs.org/terser-webpack-plugin/-/terser-webpack-plugin-1.4.3.tgz",
- "integrity": "sha512-QMxecFz/gHQwteWwSo5nTc6UaICqN1bMedC5sMtUc7y3Ha3Q8y6ZO0iCR8pq4RJC8Hjf0FEPEHZqcMB/+DFCrA==",
+ "version": "1.4.4",
+ "resolved": "https://registry.npmjs.org/terser-webpack-plugin/-/terser-webpack-plugin-1.4.4.tgz",
+ "integrity": "sha512-U4mACBHIegmfoEe5fdongHESNJWqsGU+W0S/9+BmYGVQDw1+c2Ow05TpMhxjPK1sRb7cuYq1BPl1e5YHJMTCqA==",
"dev": true,
"requires": {
"cacache": "^12.0.2",
"find-cache-dir": "^2.1.0",
"is-wsl": "^1.1.0",
"schema-utils": "^1.0.0",
- "serialize-javascript": "^2.1.2",
+ "serialize-javascript": "^3.1.0",
"source-map": "^0.6.1",
"terser": "^4.1.2",
"webpack-sources": "^1.4.0",
}
},
"test-exclude": {
- "version": "5.2.3",
- "resolved": "https://registry.npmjs.org/test-exclude/-/test-exclude-5.2.3.tgz",
- "integrity": "sha512-M+oxtseCFO3EDtAaGH7iiej3CBkzXqFMbzqYAACdzKui4eZA+pq3tZEwChvOdNfa7xxy8BfbmgJSIr43cC/+2g==",
+ "version": "6.0.0",
+ "resolved": "https://registry.npmjs.org/test-exclude/-/test-exclude-6.0.0.tgz",
+ "integrity": "sha512-cAGWPIyOHU6zlmg88jwm7VRyXnMN7iV68OGAbYDk/Mh/xC/pzVPlQtY6ngoIH/5/tciuhGfvESU8GrHrcxD56w==",
"dev": true,
"requires": {
- "glob": "^7.1.3",
- "minimatch": "^3.0.4",
- "read-pkg-up": "^4.0.0",
- "require-main-filename": "^2.0.0"
+ "@istanbuljs/schema": "^0.1.2",
+ "glob": "^7.1.4",
+ "minimatch": "^3.0.4"
+ },
+ "dependencies": {
+ "glob": {
+ "version": "7.1.6",
+ "resolved": "https://registry.npmjs.org/glob/-/glob-7.1.6.tgz",
+ "integrity": "sha512-LwaxwyZ72Lk7vZINtNNrywX0ZuLyStrdDtabefZKAY5ZGJhVtgdznluResxNmPitE0SAO+O26sWTHeKSI2wMBA==",
+ "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"
+ }
+ }
}
},
"through2": {
"dev": true
},
"tslib": {
- "version": "1.10.0",
- "resolved": "https://registry.npmjs.org/tslib/-/tslib-1.10.0.tgz",
- "integrity": "sha512-qOebF53frne81cf0S9B41ByenJ3/IuH8yJKngAX35CmiZySA0khhkovshKK+jGCaMnVomla7gVlIcc3EvKPbTQ==",
+ "version": "1.13.0",
+ "resolved": "https://registry.npmjs.org/tslib/-/tslib-1.13.0.tgz",
+ "integrity": "sha512-i/6DQjL8Xf3be4K/E6Wgpekn5Qasl1usyw++dAA35Ue5orEn65VIxOA+YvNNl9HV3qv70T7CNwjODHZrLwvd1Q==",
"dev": true
},
"tty-browserify": {
"integrity": "sha1-oVe6QC2iTpv5V/mqadUk7tQpAaY=",
"dev": true
},
+ "type-fest": {
+ "version": "0.8.1",
+ "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.8.1.tgz",
+ "integrity": "sha512-4dbzIzqvjtgiM5rw1k5rEHtBANKmdudhGyBEajN01fEyhaAIhsoKNy6y7+IN93IfpFtwY9iqi7kD+xwKhQsNJA==",
+ "dev": true
+ },
"type-is": {
"version": "1.6.18",
"resolved": "https://registry.npmjs.org/type-is/-/type-is-1.6.18.tgz",
"integrity": "sha1-hnrHTjhkGHsdPUfZlqeOxciDB3c=",
"dev": true
},
+ "typedarray-to-buffer": {
+ "version": "3.1.5",
+ "resolved": "https://registry.npmjs.org/typedarray-to-buffer/-/typedarray-to-buffer-3.1.5.tgz",
+ "integrity": "sha512-zdu8XMNEDepKKR+XYOXAVPtWui0ly0NtohUscw+UmaHiAWT8hrV1rr//H6V+0DvJ3OQ19S979M0laLfX8rm82Q==",
+ "dev": true,
+ "requires": {
+ "is-typedarray": "^1.0.0"
+ }
+ },
"unicode-canonical-property-names-ecmascript": {
"version": "1.0.4",
"resolved": "https://registry.npmjs.org/unicode-canonical-property-names-ecmascript/-/unicode-canonical-property-names-ecmascript-1.0.4.tgz",
}
},
"unicode-match-property-value-ecmascript": {
- "version": "1.1.0",
- "resolved": "https://registry.npmjs.org/unicode-match-property-value-ecmascript/-/unicode-match-property-value-ecmascript-1.1.0.tgz",
- "integrity": "sha512-hDTHvaBk3RmFzvSl0UVrUmC3PuW9wKVnpoUDYH0JDkSIovzw+J5viQmeYHxVSBptubnr7PbH2e0fnpDRQnQl5g==",
+ "version": "1.2.0",
+ "resolved": "https://registry.npmjs.org/unicode-match-property-value-ecmascript/-/unicode-match-property-value-ecmascript-1.2.0.tgz",
+ "integrity": "sha512-wjuQHGQVofmSJv1uVISKLE5zO2rNGzM/KCYZch/QQvez7C1hUhBIuZ701fYXExuufJFMPhv2SyL8CyoIfMLbIQ==",
"dev": true
},
"unicode-property-aliases-ecmascript": {
- "version": "1.0.5",
- "resolved": "https://registry.npmjs.org/unicode-property-aliases-ecmascript/-/unicode-property-aliases-ecmascript-1.0.5.tgz",
- "integrity": "sha512-L5RAqCfXqAwR3RriF8pM0lU0w4Ryf/GgzONwi6KnL1taJQa7x1TCxdJnILX59WIGOwR57IVxn7Nej0fz1Ny6fw==",
+ "version": "1.1.0",
+ "resolved": "https://registry.npmjs.org/unicode-property-aliases-ecmascript/-/unicode-property-aliases-ecmascript-1.1.0.tgz",
+ "integrity": "sha512-PqSoPh/pWetQ2phoj5RLiaqIk4kCNwoV3CI+LfGmWLKI3rE3kl1h59XpX2BjgDrmbxD9ARtQobPGU1SguCYuQg==",
"dev": true
},
"union-value": {
"dev": true
},
"v8-compile-cache": {
- "version": "2.0.3",
- "resolved": "https://registry.npmjs.org/v8-compile-cache/-/v8-compile-cache-2.0.3.tgz",
- "integrity": "sha512-CNmdbwQMBjwr9Gsmohvm0pbL954tJrNzf6gWL3K+QMQf00PF7ERGrEiLgjuU3mKreLC2MeGhUsNV9ybTbLgd3w==",
+ "version": "2.1.1",
+ "resolved": "https://registry.npmjs.org/v8-compile-cache/-/v8-compile-cache-2.1.1.tgz",
+ "integrity": "sha512-8OQ9CL+VWyt3JStj7HX7/ciTL2V3Rl1Wf5OL+SNTm0yK1KvtReVulksyeRnCANHHuUxHlQig+JJDlUhBt1NQDQ==",
"dev": true
},
- "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"
- }
- },
"vary": {
"version": "1.1.2",
"resolved": "https://registry.npmjs.org/vary/-/vary-1.1.2.tgz",
"dev": true
},
"watchpack": {
- "version": "1.6.0",
- "resolved": "https://registry.npmjs.org/watchpack/-/watchpack-1.6.0.tgz",
- "integrity": "sha512-i6dHe3EyLjMmDlU1/bGQpEw25XSjkJULPuAVKCbNRefQVq48yXKUpwg538F7AZTf9kyr57zj++pQFltUa5H7yA==",
+ "version": "1.7.2",
+ "resolved": "https://registry.npmjs.org/watchpack/-/watchpack-1.7.2.tgz",
+ "integrity": "sha512-ymVbbQP40MFTp+cNMvpyBpBtygHnPzPkHqoIwRRj/0B8KhqQwV8LaKjtbaxF2lK4vl8zN9wCxS46IFCU5K4W0g==",
+ "dev": true,
+ "requires": {
+ "chokidar": "^3.4.0",
+ "graceful-fs": "^4.1.2",
+ "neo-async": "^2.5.0",
+ "watchpack-chokidar2": "^2.0.0"
+ }
+ },
+ "watchpack-chokidar2": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/watchpack-chokidar2/-/watchpack-chokidar2-2.0.0.tgz",
+ "integrity": "sha512-9TyfOyN/zLUbA288wZ8IsMZ+6cbzvsNyEzSBp6e/zkifi6xxbl8SmQ/CxQq32k8NNqrdVEVUVSEf56L4rQ/ZxA==",
"dev": true,
+ "optional": true,
"requires": {
- "chokidar": "^2.0.2",
- "graceful-fs": "^4.1.2",
- "neo-async": "^2.5.0"
+ "chokidar": "^2.1.8"
+ },
+ "dependencies": {
+ "anymatch": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/anymatch/-/anymatch-2.0.0.tgz",
+ "integrity": "sha512-5teOsQWABXHHBFP9y3skS5P3d/WfWXpv3FUpy+LorMrNYaT9pI4oLMQX7jzQ2KklNpGpWHzdCXTDT2Y3XGlZBw==",
+ "dev": true,
+ "optional": true,
+ "requires": {
+ "micromatch": "^3.1.4",
+ "normalize-path": "^2.1.1"
+ },
+ "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,
+ "optional": true,
+ "requires": {
+ "remove-trailing-separator": "^1.0.1"
+ }
+ }
+ }
+ },
+ "binary-extensions": {
+ "version": "1.13.1",
+ "resolved": "https://registry.npmjs.org/binary-extensions/-/binary-extensions-1.13.1.tgz",
+ "integrity": "sha512-Un7MIEDdUC5gNpcGDV97op1Ywk748MpHcFTHoYs6qnj1Z3j7I53VG3nwZhKzoBZmbdRNnb6WRdFlwl7tSDuZGw==",
+ "dev": true,
+ "optional": true
+ },
+ "chokidar": {
+ "version": "2.1.8",
+ "resolved": "https://registry.npmjs.org/chokidar/-/chokidar-2.1.8.tgz",
+ "integrity": "sha512-ZmZUazfOzf0Nve7duiCKD23PFSCs4JPoYyccjUFF3aQkQadqBhfzhjkwBH2mNOG9cTBwhamM37EIsIkZw3nRgg==",
+ "dev": true,
+ "optional": 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"
+ }
+ },
+ "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
+ },
+ "glob-parent": {
+ "version": "3.1.0",
+ "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-3.1.0.tgz",
+ "integrity": "sha1-nmr2KZ2NO9K9QEMIMr0RPfkGxa4=",
+ "dev": true,
+ "optional": 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,
+ "optional": true,
+ "requires": {
+ "is-extglob": "^2.1.0"
+ }
+ }
+ }
+ },
+ "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,
+ "optional": true,
+ "requires": {
+ "binary-extensions": "^1.0.0"
+ }
+ },
+ "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,
+ "optional": true,
+ "requires": {
+ "graceful-fs": "^4.1.11",
+ "micromatch": "^3.1.10",
+ "readable-stream": "^2.0.2"
+ }
+ }
}
},
"wbuf": {
}
},
"webpack": {
- "version": "4.41.5",
- "resolved": "https://registry.npmjs.org/webpack/-/webpack-4.41.5.tgz",
- "integrity": "sha512-wp0Co4vpyumnp3KlkmpM5LWuzvZYayDwM2n17EHFr4qxBBbRokC7DJawPJC7TfSFZ9HZ6GsdH40EBj4UV0nmpw==",
+ "version": "4.43.0",
+ "resolved": "https://registry.npmjs.org/webpack/-/webpack-4.43.0.tgz",
+ "integrity": "sha512-GW1LjnPipFW2Y78OOab8NJlCflB7EFskMih2AHdvjbpKMeDJqEgSx24cXXXiPS65+WSwVyxtDsJH6jGX2czy+g==",
"dev": true,
"requires": {
- "@webassemblyjs/ast": "1.8.5",
- "@webassemblyjs/helper-module-context": "1.8.5",
- "@webassemblyjs/wasm-edit": "1.8.5",
- "@webassemblyjs/wasm-parser": "1.8.5",
- "acorn": "^6.2.1",
+ "@webassemblyjs/ast": "1.9.0",
+ "@webassemblyjs/helper-module-context": "1.9.0",
+ "@webassemblyjs/wasm-edit": "1.9.0",
+ "@webassemblyjs/wasm-parser": "1.9.0",
+ "acorn": "^6.4.1",
"ajv": "^6.10.2",
"ajv-keywords": "^3.4.1",
"chrome-trace-event": "^1.0.2",
"loader-utils": "^1.2.3",
"memory-fs": "^0.4.1",
"micromatch": "^3.1.10",
- "mkdirp": "^0.5.1",
+ "mkdirp": "^0.5.3",
"neo-async": "^2.6.1",
"node-libs-browser": "^2.2.1",
"schema-utils": "^1.0.0",
"tapable": "^1.1.3",
"terser-webpack-plugin": "^1.4.3",
- "watchpack": "^1.6.0",
+ "watchpack": "^1.6.1",
"webpack-sources": "^1.4.1"
},
"dependencies": {
"ajv": {
- "version": "6.10.2",
- "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.10.2.tgz",
- "integrity": "sha512-TXtUUEYHuaTEbLZWIKUr5pmBuhDLy+8KYtPYdcV8qC+pOZL+NKqYwvWSRrVXHn+ZmRRAu8vJTAznH7Oag6RVRw==",
+ "version": "6.12.3",
+ "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.12.3.tgz",
+ "integrity": "sha512-4K0cK3L1hsqk9xIb2z9vs/XU+PGJZ9PNpJRDS9YLzmNdX6jmVPfamLvTJr0aDAusnHyCHO6MjzlkAsgtqp9teA==",
"dev": true,
"requires": {
- "fast-deep-equal": "^2.0.1",
+ "fast-deep-equal": "^3.1.1",
"fast-json-stable-stringify": "^2.0.0",
"json-schema-traverse": "^0.4.1",
"uri-js": "^4.2.2"
}
},
"ajv-keywords": {
- "version": "3.4.1",
- "resolved": "https://registry.npmjs.org/ajv-keywords/-/ajv-keywords-3.4.1.tgz",
- "integrity": "sha512-RO1ibKvd27e6FEShVFfPALuHI3WjSVNeK5FIsmme/LYRNxjKuNj+Dt7bucLa6NdSv3JcVTyMlm9kGR84z1XpaQ==",
+ "version": "3.5.1",
+ "resolved": "https://registry.npmjs.org/ajv-keywords/-/ajv-keywords-3.5.1.tgz",
+ "integrity": "sha512-KWcq3xN8fDjSB+IMoh2VaXVhRI0BBGxoYp3rx7Pkb6z0cFjYR9Q9l4yZqqals0/zsioCmocC5H6UvsGD4MoIBA==",
+ "dev": true
+ },
+ "fast-deep-equal": {
+ "version": "3.1.3",
+ "resolved": "https://registry.npmjs.org/fast-deep-equal/-/fast-deep-equal-3.1.3.tgz",
+ "integrity": "sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q==",
"dev": true
}
}
},
"webpack-cli": {
- "version": "3.3.10",
- "resolved": "https://registry.npmjs.org/webpack-cli/-/webpack-cli-3.3.10.tgz",
- "integrity": "sha512-u1dgND9+MXaEt74sJR4PR7qkPxXUSQ0RXYq8x1L6Jg1MYVEmGPrH6Ah6C4arD4r0J1P5HKjRqpab36k0eIzPqg==",
- "dev": true,
- "requires": {
- "chalk": "2.4.2",
- "cross-spawn": "6.0.5",
- "enhanced-resolve": "4.1.0",
- "findup-sync": "3.0.0",
- "global-modules": "2.0.0",
- "import-local": "2.0.0",
- "interpret": "1.2.0",
- "loader-utils": "1.2.3",
- "supports-color": "6.1.0",
- "v8-compile-cache": "2.0.3",
- "yargs": "13.2.4"
+ "version": "3.3.12",
+ "resolved": "https://registry.npmjs.org/webpack-cli/-/webpack-cli-3.3.12.tgz",
+ "integrity": "sha512-NVWBaz9k839ZH/sinurM+HcDvJOTXwSjYp1ku+5XKeOC03z8v5QitnK/x+lAxGXFyhdayoIf/GOpv85z3/xPag==",
+ "dev": true,
+ "requires": {
+ "chalk": "^2.4.2",
+ "cross-spawn": "^6.0.5",
+ "enhanced-resolve": "^4.1.1",
+ "findup-sync": "^3.0.0",
+ "global-modules": "^2.0.0",
+ "import-local": "^2.0.0",
+ "interpret": "^1.4.0",
+ "loader-utils": "^1.4.0",
+ "supports-color": "^6.1.0",
+ "v8-compile-cache": "^2.1.1",
+ "yargs": "^13.3.2"
},
"dependencies": {
"ansi-regex": {
"integrity": "sha512-1apePfXM1UOSqw0o9IiFAovVz9M5S1Dg+4TrDwfMewQ6p/rmMueb7tWZjQ1rx4Loy1ArBggoqGpfqqdI4rondg==",
"dev": true
},
- "cliui": {
- "version": "5.0.0",
- "resolved": "https://registry.npmjs.org/cliui/-/cliui-5.0.0.tgz",
- "integrity": "sha512-PYeGSEmmHM6zvoef2w8TPzlrnNpXIjTipYK780YswmIP9vjxmd6Y2a3CB2Ks6/AU8NHjZugXvo8w3oWM2qnwXA==",
+ "emojis-list": {
+ "version": "3.0.0",
+ "resolved": "https://registry.npmjs.org/emojis-list/-/emojis-list-3.0.0.tgz",
+ "integrity": "sha512-/kyM18EfinwXZbno9FyUGeFh87KC8HRQBQGildHZbEuRyWFOmv1U10o9BBp8XVZDVNNuQKyIGIu5ZYAAXJ0V2Q==",
+ "dev": true
+ },
+ "json5": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/json5/-/json5-1.0.1.tgz",
+ "integrity": "sha512-aKS4WQjPenRxiQsC93MNfjx+nbF4PAdYzmd/1JIj8HYzqfbu86beTuNgXDzPknWk0n0uARlyewZo4s++ES36Ow==",
"dev": true,
"requires": {
- "string-width": "^3.1.0",
- "strip-ansi": "^5.2.0",
- "wrap-ansi": "^5.1.0"
+ "minimist": "^1.2.0"
}
},
- "enhanced-resolve": {
- "version": "4.1.0",
- "resolved": "https://registry.npmjs.org/enhanced-resolve/-/enhanced-resolve-4.1.0.tgz",
- "integrity": "sha512-F/7vkyTtyc/llOIn8oWclcB25KdRaiPBpZYDgJHgh/UHtpgT2p2eldQgtQnLtUvfMKPKxbRaQM/hHkvLHt1Vng==",
+ "loader-utils": {
+ "version": "1.4.0",
+ "resolved": "https://registry.npmjs.org/loader-utils/-/loader-utils-1.4.0.tgz",
+ "integrity": "sha512-qH0WSMBtn/oHuwjy/NucEgbx5dbxxnxup9s4PVXJUDHZBQY+s0NWA9rJf53RBnQZxfch7euUui7hpoAPvALZdA==",
"dev": true,
"requires": {
- "graceful-fs": "^4.1.2",
- "memory-fs": "^0.4.0",
- "tapable": "^1.0.0"
+ "big.js": "^5.2.2",
+ "emojis-list": "^3.0.0",
+ "json5": "^1.0.1"
}
},
"string-width": {
"has-flag": "^3.0.0"
}
},
- "wrap-ansi": {
- "version": "5.1.0",
- "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-5.1.0.tgz",
- "integrity": "sha512-QC1/iN/2/RPVJ5jYK8BGttj5z83LmSKmvbvrXPNCLZSEb32KKVDJDl/MOt2N01qU2H/FkzEa9PKto1BqDjtd7Q==",
- "dev": true,
- "requires": {
- "ansi-styles": "^3.2.0",
- "string-width": "^3.0.0",
- "strip-ansi": "^5.0.0"
- }
- },
"yargs": {
- "version": "13.2.4",
- "resolved": "https://registry.npmjs.org/yargs/-/yargs-13.2.4.tgz",
- "integrity": "sha512-HG/DWAJa1PAnHT9JAhNa8AbAv3FPaiLzioSjCcmuXXhP8MlpHO5vwls4g4j6n30Z74GVQj8Xa62dWVx1QCGklg==",
+ "version": "13.3.2",
+ "resolved": "https://registry.npmjs.org/yargs/-/yargs-13.3.2.tgz",
+ "integrity": "sha512-AX3Zw5iPruN5ie6xGRIDgqkT+ZhnRlZMLMHAs8tg7nRruy2Nb+i5o9bwghAogtM08q1dpr2LVoS8KSTMYpWXUw==",
"dev": true,
"requires": {
"cliui": "^5.0.0",
"find-up": "^3.0.0",
"get-caller-file": "^2.0.1",
- "os-locale": "^3.1.0",
"require-directory": "^2.1.1",
"require-main-filename": "^2.0.0",
"set-blocking": "^2.0.0",
"string-width": "^3.0.0",
"which-module": "^2.0.0",
"y18n": "^4.0.0",
- "yargs-parser": "^13.1.0"
+ "yargs-parser": "^13.1.2"
}
},
"yargs-parser": {
- "version": "13.1.1",
- "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-13.1.1.tgz",
- "integrity": "sha512-oVAVsHz6uFrg3XQheFII8ESO2ssAf9luWuAd6Wexsu4F3OtIW0o8IribPXYrD4WC24LWtPrJlGy87y5udK+dxQ==",
+ "version": "13.1.2",
+ "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-13.1.2.tgz",
+ "integrity": "sha512-3lbsNRf/j+A4QuSZfDRA7HRSfWrzO0YjqTJd5kjAq37Zep1CEgaYmrH9Q3GwPiB9cHyd1Y1UwggGhJGoxipbzg==",
"dev": true,
"requires": {
"camelcase": "^5.0.0",
},
"dependencies": {
"mime": {
- "version": "2.4.4",
- "resolved": "https://registry.npmjs.org/mime/-/mime-2.4.4.tgz",
- "integrity": "sha512-LRxmNwziLPT828z+4YkNzloCFC2YM4wrB99k+AV5ZbEyfGNWfG8SO1FUXLmLDBSo89NrJZ4DIWeLjy1CHGhMGA==",
+ "version": "2.4.6",
+ "resolved": "https://registry.npmjs.org/mime/-/mime-2.4.6.tgz",
+ "integrity": "sha512-RZKhC3EmpBchfTGBVb8fb+RL2cWyw/32lshnsETttkBAyAUXSGHxbEJWWRXc751DrIxG1q04b8QwMbAwkRPpUA==",
"dev": true
}
}
},
"webpack-dev-server": {
- "version": "3.10.2",
- "resolved": "https://registry.npmjs.org/webpack-dev-server/-/webpack-dev-server-3.10.2.tgz",
- "integrity": "sha512-pxZKPYb+n77UN8u9YxXT4IaIrGcNtijh/mi8TXbErHmczw0DtPnMTTjHj+eNjkqLOaAZM/qD7V59j/qJsEiaZA==",
+ "version": "3.11.0",
+ "resolved": "https://registry.npmjs.org/webpack-dev-server/-/webpack-dev-server-3.11.0.tgz",
+ "integrity": "sha512-PUxZ+oSTxogFQgkTtFndEtJIPNmml7ExwufBZ9L2/Xyyd5PnOL5UreWe5ZT7IU25DSdykL9p1MLQzmLh2ljSeg==",
"dev": true,
"requires": {
"ansi-html": "0.0.7",
"debug": "^4.1.1",
"del": "^4.1.1",
"express": "^4.17.1",
- "html-entities": "^1.2.1",
+ "html-entities": "^1.3.1",
"http-proxy-middleware": "0.19.1",
"import-local": "^2.0.0",
"internal-ip": "^4.3.0",
"ip": "^1.1.5",
"is-absolute-url": "^3.0.3",
"killable": "^1.0.1",
- "loglevel": "^1.6.6",
+ "loglevel": "^1.6.8",
"opn": "^5.5.0",
"p-retry": "^3.0.1",
- "portfinder": "^1.0.25",
+ "portfinder": "^1.0.26",
"schema-utils": "^1.0.0",
"selfsigned": "^1.10.7",
"semver": "^6.3.0",
"serve-index": "^1.9.1",
- "sockjs": "0.3.19",
+ "sockjs": "0.3.20",
"sockjs-client": "1.4.0",
- "spdy": "^4.0.1",
+ "spdy": "^4.0.2",
"strip-ansi": "^3.0.1",
"supports-color": "^6.1.0",
"url": "^0.11.0",
"webpack-dev-middleware": "^3.7.2",
"webpack-log": "^2.0.0",
"ws": "^6.2.1",
- "yargs": "12.0.5"
+ "yargs": "^13.3.2"
},
"dependencies": {
"ansi-regex": {
"integrity": "sha1-w7M6te42DYbg5ijwRorn7yfWVN8=",
"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==",
+ "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": {
+ "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"
+ }
+ }
+ }
+ },
+ "binary-extensions": {
+ "version": "1.13.1",
+ "resolved": "https://registry.npmjs.org/binary-extensions/-/binary-extensions-1.13.1.tgz",
+ "integrity": "sha512-Un7MIEDdUC5gNpcGDV97op1Ywk748MpHcFTHoYs6qnj1Z3j7I53VG3nwZhKzoBZmbdRNnb6WRdFlwl7tSDuZGw==",
"dev": true
},
- "require-main-filename": {
+ "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"
+ }
+ },
+ "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
+ },
+ "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"
+ }
+ }
+ }
+ },
+ "is-binary-path": {
"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
+ "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"
+ }
+ },
+ "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"
+ }
},
"semver": {
"version": "6.3.0",
"integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==",
"dev": true
},
+ "string-width": {
+ "version": "3.1.0",
+ "resolved": "https://registry.npmjs.org/string-width/-/string-width-3.1.0.tgz",
+ "integrity": "sha512-vafcv6KjVZKSgz06oM/H6GDBrAtz8vdhQakGjFIvNrHA6y3HCF1CInLy+QLq8dTJPQ1b+KDUqDFctkdRW44e1w==",
+ "dev": true,
+ "requires": {
+ "emoji-regex": "^7.0.1",
+ "is-fullwidth-code-point": "^2.0.0",
+ "strip-ansi": "^5.1.0"
+ },
+ "dependencies": {
+ "ansi-regex": {
+ "version": "4.1.0",
+ "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-4.1.0.tgz",
+ "integrity": "sha512-1apePfXM1UOSqw0o9IiFAovVz9M5S1Dg+4TrDwfMewQ6p/rmMueb7tWZjQ1rx4Loy1ArBggoqGpfqqdI4rondg==",
+ "dev": true
+ },
+ "strip-ansi": {
+ "version": "5.2.0",
+ "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-5.2.0.tgz",
+ "integrity": "sha512-DuRs1gKbBqsMKIZlrffwlug8MHkcnpjs5VPmL1PAh+mA30U0DTotfDZ0d2UUsXpPmPmMMJ6W773MaA3J+lbiWA==",
+ "dev": true,
+ "requires": {
+ "ansi-regex": "^4.1.0"
+ }
+ }
+ }
+ },
"strip-ansi": {
"version": "3.0.1",
"resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-3.0.1.tgz",
}
},
"yargs": {
- "version": "12.0.5",
- "resolved": "https://registry.npmjs.org/yargs/-/yargs-12.0.5.tgz",
- "integrity": "sha512-Lhz8TLaYnxq/2ObqHDql8dX8CJi97oHxrjUcYtzKbbykPtVW9WB+poxI+NM2UIzsMgNCZTIf0AQwsjK5yMAqZw==",
+ "version": "13.3.2",
+ "resolved": "https://registry.npmjs.org/yargs/-/yargs-13.3.2.tgz",
+ "integrity": "sha512-AX3Zw5iPruN5ie6xGRIDgqkT+ZhnRlZMLMHAs8tg7nRruy2Nb+i5o9bwghAogtM08q1dpr2LVoS8KSTMYpWXUw==",
"dev": true,
"requires": {
- "cliui": "^4.0.0",
- "decamelize": "^1.2.0",
+ "cliui": "^5.0.0",
"find-up": "^3.0.0",
- "get-caller-file": "^1.0.1",
- "os-locale": "^3.0.0",
+ "get-caller-file": "^2.0.1",
"require-directory": "^2.1.1",
- "require-main-filename": "^1.0.1",
+ "require-main-filename": "^2.0.0",
"set-blocking": "^2.0.0",
- "string-width": "^2.0.0",
+ "string-width": "^3.0.0",
"which-module": "^2.0.0",
- "y18n": "^3.2.1 || ^4.0.0",
- "yargs-parser": "^11.1.1"
+ "y18n": "^4.0.0",
+ "yargs-parser": "^13.1.2"
}
},
"yargs-parser": {
- "version": "11.1.1",
- "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-11.1.1.tgz",
- "integrity": "sha512-C6kB/WJDiaxONLJQnF8ccx9SEeoTTLek8RVbaOIsrAUS8VrBEXfmeSnCZxygc+XC2sNMBIwOOnfcxiynjHsVSQ==",
+ "version": "13.1.2",
+ "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-13.1.2.tgz",
+ "integrity": "sha512-3lbsNRf/j+A4QuSZfDRA7HRSfWrzO0YjqTJd5kjAq37Zep1CEgaYmrH9Q3GwPiB9cHyd1Y1UwggGhJGoxipbzg==",
"dev": true,
"requires": {
"camelcase": "^5.0.0",
}
},
"webpack-merge": {
- "version": "4.2.2",
- "resolved": "https://registry.npmjs.org/webpack-merge/-/webpack-merge-4.2.2.tgz",
- "integrity": "sha512-TUE1UGoTX2Cd42j3krGYqObZbOD+xF7u28WB7tfUordytSjbWTIjK/8V0amkBfTYN4/pB/GIDlJZZ657BGG19g==",
+ "version": "5.0.9",
+ "resolved": "https://registry.npmjs.org/webpack-merge/-/webpack-merge-5.0.9.tgz",
+ "integrity": "sha512-P4teh6O26xIDPugOGX61wPxaeP918QOMjmzhu54zTVcLtOS28ffPWtnv+ilt3wscwBUCL2WNMnh97XkrKqt9Fw==",
"dev": true,
"requires": {
- "lodash": "^4.17.15"
+ "clone-deep": "^4.0.1",
+ "wildcard": "^2.0.0"
}
},
"webpack-sources": {
}
},
"websocket-driver": {
- "version": "0.7.3",
- "resolved": "https://registry.npmjs.org/websocket-driver/-/websocket-driver-0.7.3.tgz",
- "integrity": "sha512-bpxWlvbbB459Mlipc5GBzzZwhoZgGEZLuqPaR0INBGnPAY1vdBX6hPnoFXiw+3yWxDuHyQjO2oXTMyS8A5haFg==",
+ "version": "0.6.5",
+ "resolved": "https://registry.npmjs.org/websocket-driver/-/websocket-driver-0.6.5.tgz",
+ "integrity": "sha1-XLJVbOuF9Dc8bYI4qmkchFThOjY=",
"dev": true,
"requires": {
- "http-parser-js": ">=0.4.0 <0.4.11",
- "safe-buffer": ">=5.1.0",
"websocket-extensions": ">=0.1.1"
}
},
"websocket-extensions": {
- "version": "0.1.3",
- "resolved": "https://registry.npmjs.org/websocket-extensions/-/websocket-extensions-0.1.3.tgz",
- "integrity": "sha512-nqHUnMXmBzT0w570r2JpJxfiSD1IzoI+HGVdd3aZ0yNi3ngvQ4jv1dtHt5VGxfI2yj5yqImPhOK4vmIh2xMbGg==",
+ "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": {
"string-width": "^1.0.2 || 2"
}
},
+ "wildcard": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/wildcard/-/wildcard-2.0.0.tgz",
+ "integrity": "sha512-JcKqAHLPxcdb9KM49dufGXn2x3ssnfjbcaQdLlfZsL9rH9wgDQjUtDxbo8NE0F6SFvydeu1VhZe7hZuHsB2/pw==",
+ "dev": true
+ },
"worker-farm": {
"version": "1.7.0",
"resolved": "https://registry.npmjs.org/worker-farm/-/worker-farm-1.7.0.tgz",
"errno": "~0.1.7"
}
},
+ "workerpool": {
+ "version": "6.0.0",
+ "resolved": "https://registry.npmjs.org/workerpool/-/workerpool-6.0.0.tgz",
+ "integrity": "sha512-fU2OcNA/GVAJLLyKUoHkAgIhKb0JoCpSjLC/G2vYKxUjVmQwGbRVeoPJ1a8U4pnVofz4AQV5Y/NEw8oKqxEBtA==",
+ "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=",
+ "version": "5.1.0",
+ "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-5.1.0.tgz",
+ "integrity": "sha512-QC1/iN/2/RPVJ5jYK8BGttj5z83LmSKmvbvrXPNCLZSEb32KKVDJDl/MOt2N01qU2H/FkzEa9PKto1BqDjtd7Q==",
"dev": true,
"requires": {
- "string-width": "^1.0.1",
- "strip-ansi": "^3.0.1"
+ "ansi-styles": "^3.2.0",
+ "string-width": "^3.0.0",
+ "strip-ansi": "^5.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=",
+ "version": "4.1.0",
+ "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-4.1.0.tgz",
+ "integrity": "sha512-1apePfXM1UOSqw0o9IiFAovVz9M5S1Dg+4TrDwfMewQ6p/rmMueb7tWZjQ1rx4Loy1ArBggoqGpfqqdI4rondg==",
"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"
- }
- },
"string-width": {
- "version": "1.0.2",
- "resolved": "https://registry.npmjs.org/string-width/-/string-width-1.0.2.tgz",
- "integrity": "sha1-EYvfW4zcUaKn5w0hHgfisLmxB9M=",
+ "version": "3.1.0",
+ "resolved": "https://registry.npmjs.org/string-width/-/string-width-3.1.0.tgz",
+ "integrity": "sha512-vafcv6KjVZKSgz06oM/H6GDBrAtz8vdhQakGjFIvNrHA6y3HCF1CInLy+QLq8dTJPQ1b+KDUqDFctkdRW44e1w==",
"dev": true,
"requires": {
- "code-point-at": "^1.0.0",
- "is-fullwidth-code-point": "^1.0.0",
- "strip-ansi": "^3.0.0"
+ "emoji-regex": "^7.0.1",
+ "is-fullwidth-code-point": "^2.0.0",
+ "strip-ansi": "^5.1.0"
}
},
"strip-ansi": {
- "version": "3.0.1",
- "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-3.0.1.tgz",
- "integrity": "sha1-ajhfuIU9lS1f8F0Oiq+UJ43GPc8=",
+ "version": "5.2.0",
+ "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-5.2.0.tgz",
+ "integrity": "sha512-DuRs1gKbBqsMKIZlrffwlug8MHkcnpjs5VPmL1PAh+mA30U0DTotfDZ0d2UUsXpPmPmMMJ6W773MaA3J+lbiWA==",
"dev": true,
"requires": {
- "ansi-regex": "^2.0.0"
+ "ansi-regex": "^4.1.0"
}
}
}
"dev": true
},
"write-file-atomic": {
- "version": "2.4.3",
- "resolved": "https://registry.npmjs.org/write-file-atomic/-/write-file-atomic-2.4.3.tgz",
- "integrity": "sha512-GaETH5wwsX+GcnzhPgKcKjJ6M2Cq3/iZp1WyY/X1CSqrW+jVNM9Y7D8EC2sM4ZG/V8wZlSniJnCKWPmBYAucRQ==",
+ "version": "3.0.3",
+ "resolved": "https://registry.npmjs.org/write-file-atomic/-/write-file-atomic-3.0.3.tgz",
+ "integrity": "sha512-AvHcyZ5JnSfq3ioSyjrBkH9yW4m7Ayk8/9My/DD9onKeu/94fwrMocemO2QAJFAlnnDN+ZDS+ZjAR5ua1/PV/Q==",
"dev": true,
"requires": {
- "graceful-fs": "^4.1.11",
"imurmurhash": "^0.1.4",
- "signal-exit": "^3.0.2"
+ "is-typedarray": "^1.0.0",
+ "signal-exit": "^3.0.2",
+ "typedarray-to-buffer": "^3.1.5"
}
},
"ws": {
"dev": true
},
"yargs": {
- "version": "13.3.0",
- "resolved": "https://registry.npmjs.org/yargs/-/yargs-13.3.0.tgz",
- "integrity": "sha512-2eehun/8ALW8TLoIl7MVaRUrg+yCnenu8B4kBlRxj3GJGDKU1Og7sMXPNm1BYyM1DOJmTZ4YeN/Nwxv+8XJsUA==",
+ "version": "13.3.2",
+ "resolved": "https://registry.npmjs.org/yargs/-/yargs-13.3.2.tgz",
+ "integrity": "sha512-AX3Zw5iPruN5ie6xGRIDgqkT+ZhnRlZMLMHAs8tg7nRruy2Nb+i5o9bwghAogtM08q1dpr2LVoS8KSTMYpWXUw==",
"dev": true,
"requires": {
"cliui": "^5.0.0",
"string-width": "^3.0.0",
"which-module": "^2.0.0",
"y18n": "^4.0.0",
- "yargs-parser": "^13.1.1"
+ "yargs-parser": "^13.1.2"
},
"dependencies": {
"ansi-regex": {
"integrity": "sha512-1apePfXM1UOSqw0o9IiFAovVz9M5S1Dg+4TrDwfMewQ6p/rmMueb7tWZjQ1rx4Loy1ArBggoqGpfqqdI4rondg==",
"dev": true
},
- "cliui": {
- "version": "5.0.0",
- "resolved": "https://registry.npmjs.org/cliui/-/cliui-5.0.0.tgz",
- "integrity": "sha512-PYeGSEmmHM6zvoef2w8TPzlrnNpXIjTipYK780YswmIP9vjxmd6Y2a3CB2Ks6/AU8NHjZugXvo8w3oWM2qnwXA==",
- "dev": true,
- "requires": {
- "string-width": "^3.1.0",
- "strip-ansi": "^5.2.0",
- "wrap-ansi": "^5.1.0"
- }
- },
"string-width": {
"version": "3.1.0",
"resolved": "https://registry.npmjs.org/string-width/-/string-width-3.1.0.tgz",
"requires": {
"ansi-regex": "^4.1.0"
}
- },
- "wrap-ansi": {
- "version": "5.1.0",
- "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-5.1.0.tgz",
- "integrity": "sha512-QC1/iN/2/RPVJ5jYK8BGttj5z83LmSKmvbvrXPNCLZSEb32KKVDJDl/MOt2N01qU2H/FkzEa9PKto1BqDjtd7Q==",
- "dev": true,
- "requires": {
- "ansi-styles": "^3.2.0",
- "string-width": "^3.0.0",
- "strip-ansi": "^5.0.0"
- }
}
}
},
"yargs-parser": {
- "version": "13.1.1",
- "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-13.1.1.tgz",
- "integrity": "sha512-oVAVsHz6uFrg3XQheFII8ESO2ssAf9luWuAd6Wexsu4F3OtIW0o8IribPXYrD4WC24LWtPrJlGy87y5udK+dxQ==",
+ "version": "13.1.2",
+ "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-13.1.2.tgz",
+ "integrity": "sha512-3lbsNRf/j+A4QuSZfDRA7HRSfWrzO0YjqTJd5kjAq37Zep1CEgaYmrH9Q3GwPiB9cHyd1Y1UwggGhJGoxipbzg==",
"dev": true,
"requires": {
"camelcase": "^5.0.0",
"flat": "^4.1.0",
"lodash": "^4.17.15",
"yargs": "^13.3.0"
- },
- "dependencies": {
- "ansi-regex": {
- "version": "4.1.0",
- "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-4.1.0.tgz",
- "integrity": "sha512-1apePfXM1UOSqw0o9IiFAovVz9M5S1Dg+4TrDwfMewQ6p/rmMueb7tWZjQ1rx4Loy1ArBggoqGpfqqdI4rondg==",
- "dev": true
- },
- "cliui": {
- "version": "5.0.0",
- "resolved": "https://registry.npmjs.org/cliui/-/cliui-5.0.0.tgz",
- "integrity": "sha512-PYeGSEmmHM6zvoef2w8TPzlrnNpXIjTipYK780YswmIP9vjxmd6Y2a3CB2Ks6/AU8NHjZugXvo8w3oWM2qnwXA==",
- "dev": true,
- "requires": {
- "string-width": "^3.1.0",
- "strip-ansi": "^5.2.0",
- "wrap-ansi": "^5.1.0"
- }
- },
- "string-width": {
- "version": "3.1.0",
- "resolved": "https://registry.npmjs.org/string-width/-/string-width-3.1.0.tgz",
- "integrity": "sha512-vafcv6KjVZKSgz06oM/H6GDBrAtz8vdhQakGjFIvNrHA6y3HCF1CInLy+QLq8dTJPQ1b+KDUqDFctkdRW44e1w==",
- "dev": true,
- "requires": {
- "emoji-regex": "^7.0.1",
- "is-fullwidth-code-point": "^2.0.0",
- "strip-ansi": "^5.1.0"
- }
- },
- "strip-ansi": {
- "version": "5.2.0",
- "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-5.2.0.tgz",
- "integrity": "sha512-DuRs1gKbBqsMKIZlrffwlug8MHkcnpjs5VPmL1PAh+mA30U0DTotfDZ0d2UUsXpPmPmMMJ6W773MaA3J+lbiWA==",
- "dev": true,
- "requires": {
- "ansi-regex": "^4.1.0"
- }
- },
- "wrap-ansi": {
- "version": "5.1.0",
- "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-5.1.0.tgz",
- "integrity": "sha512-QC1/iN/2/RPVJ5jYK8BGttj5z83LmSKmvbvrXPNCLZSEb32KKVDJDl/MOt2N01qU2H/FkzEa9PKto1BqDjtd7Q==",
- "dev": true,
- "requires": {
- "ansi-styles": "^3.2.0",
- "string-width": "^3.0.0",
- "strip-ansi": "^5.0.0"
- }
- },
- "yargs": {
- "version": "13.3.0",
- "resolved": "https://registry.npmjs.org/yargs/-/yargs-13.3.0.tgz",
- "integrity": "sha512-2eehun/8ALW8TLoIl7MVaRUrg+yCnenu8B4kBlRxj3GJGDKU1Og7sMXPNm1BYyM1DOJmTZ4YeN/Nwxv+8XJsUA==",
- "dev": true,
- "requires": {
- "cliui": "^5.0.0",
- "find-up": "^3.0.0",
- "get-caller-file": "^2.0.1",
- "require-directory": "^2.1.1",
- "require-main-filename": "^2.0.0",
- "set-blocking": "^2.0.0",
- "string-width": "^3.0.0",
- "which-module": "^2.0.0",
- "y18n": "^4.0.0",
- "yargs-parser": "^13.1.1"
- }
- },
- "yargs-parser": {
- "version": "13.1.1",
- "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-13.1.1.tgz",
- "integrity": "sha512-oVAVsHz6uFrg3XQheFII8ESO2ssAf9luWuAd6Wexsu4F3OtIW0o8IribPXYrD4WC24LWtPrJlGy87y5udK+dxQ==",
- "dev": true,
- "requires": {
- "camelcase": "^5.0.0",
- "decamelize": "^1.2.0"
- }
- }
}
}
}
"name": "@infinito/workouts",
"version": "0.0.0",
"description": "Tool for quickly and easily managing and keeping track of workouts.",
- "main": "workouts.min.js",
+ "main": "workouts.js",
"scripts": {
- "build": "webpack --config webpack.prod.config.js",
+ "build": "webpack --config webpack.dev.config.js",
"start": "webpack-dev-server --config webpack.dev.config.js --host 0.0.0.0",
- "test": "nyc mocha --require @babel/register"
+ "test": "nyc mocha --require @babel/register --require @babel/polyfill"
},
"repository": {
"type": "git",
},
"homepage": "https://github.com/infinitis/workouts#readme",
"dependencies": {
- "react": "^16.12.0",
- "react-dom": "^16.12.0",
- "react-redux": "^7.1.3",
+ "react": "^16.13.1",
+ "react-dom": "^16.13.1",
+ "react-redux": "^7.2.0",
"redux": "^4.0.5"
},
"devDependencies": {
- "@babel/core": "^7.8.4",
- "@babel/preset-env": "^7.8.4",
- "@babel/register": "^7.8.3",
- "css-loader": "^2.1.1",
- "mocha": "^6.2.2",
- "nyc": "^14.1.1",
- "style-loader": "^0.23.1",
- "webpack": "^4.41.5",
- "webpack-cli": "^3.3.10",
- "webpack-dev-server": "^3.10.2",
- "webpack-merge": "^4.2.2"
+ "@babel/core": "^7.10.5",
+ "@babel/polyfill": "^7.10.4",
+ "@babel/preset-env": "^7.10.4",
+ "@babel/register": "^7.10.5",
+ "css-loader": "^3.6.0",
+ "mocha": "^8.0.1",
+ "nyc": "^15.1.0",
+ "style-loader": "^1.2.1",
+ "webpack": "^4.43.0",
+ "webpack-cli": "^3.3.12",
+ "webpack-dev-server": "^3.11.0",
+ "webpack-merge": "^5.0.9"
}
}
--- /dev/null
+import {constants} from '../constants.js';
+const {DEFAULT_ATTRIBUTES} = constants;
+
+export default class workout {
+ constructor(toClone) {
+ if((toClone !== void(0))&&(toClone instanceof workout)) {
+ this.attributes = {...toClone.attributes};
+ this.dates = [...toClone.dates];
+ this.name = toClone.name;
+ } else {
+ this.attributes = {...DEFAULT_ATTRIBUTES};
+ this.dates = [];
+ this.name = "New Workout";
+ if(typeof toClone == "object") {
+ if(toClone.attributes !== void(0)) {
+ for(let i in toClone.attributes) {
+ if(toClone.attributes[i] === true) {
+ this.toggleAttribute(i);
+ }
+ }
+ }
+ if(toClone.dates !== void(0)) {
+ for(let date of toClone.dates) {
+ this.add(date);
+ }
+ }
+ if(toClone.name !== void(0)) {
+ this.name = toClone.name;
+ }
+ }
+ }
+ }
+ add(date) {
+ date = Date.parse(date);
+ if(isNaN(date)) {
+ throw new TypeError('expects parameter `date` to be a date');
+ }
+ this._dates.push(new Date(date).toISOString().split("T")[0]);
+ this.normalize();
+ }
+ get dates() {
+ return this._dates;
+ }
+ set dates(dates) {
+ if(!(dates instanceof Array)) {
+ throw new TypeError('expects parameter `dates` to be an array of dates');
+ }
+ dates = dates.map((date) => Date.parse(date));
+ if(!(dates.every((x) => !isNaN(x)))) {
+ throw new TypeError('expects parameter `dates` to be an array of dates');
+ }
+
+ this._dates = dates;
+ this.normalize();
+ }
+ equals(compare) {
+ if((compare === void(0)) || (!(compare instanceof workout))) { return false; }
+
+ if(this.name !== compare.name) { return false; }
+
+ if(Object.keys(this.attributes).length!==Object.keys(compare.attributes).length) { return false; }
+ for(let i in this.attributes) {
+ if(this.attributes[i]!==compare.attributes[i]) { return false; }
+ }
+
+ if(this.dates.length!==compare.dates.length) { return false; }
+ for(let i in this.dates) {
+ if(this.dates[i] !== compare.dates[i]) { return false; }
+ }
+
+ return true;
+ }
+ get last_done() {
+ let res = this._dates.slice(0,1);
+ return (res.length==0)?"":res[0];
+ }
+ get name() {
+ return this._name;
+ }
+ set name(name) {
+ if(typeof name != "string") {
+ throw new TypeError('Workout::setName(name) expects parameter `name` to be a string');
+ }
+ this._name = name;
+ }
+ normalize() {
+ this._dates = [...new Set([...this._dates])];
+ this._dates.sort((a,b) => { return a<b; });
+ }
+ remove(date) {
+ for(let i=0;i<this._dates.length;i++) {
+ if(this._dates[i]===date) {
+ this._dates.splice(i,1);
+ }
+ }
+ }
+ get times_done() {
+ return this._dates.length;
+ }
+ toggleAttribute(attr) {
+ if(this.attributes[attr] === void(0)) {
+ throw new TypeError('Workout::toggleAttribute(attr) expects parameter `attr` to be a valid attribute');
+ }
+ this.attributes[attr] = !this.attributes[attr];
+ }
+}
\ No newline at end of file
--- /dev/null
+import style from './header.css';
+
+import {constants} from '../../constants.js';
+const {
+ SYNC_STATUS
+} = constants;
+
+const {
+ STATUS_UNSYNCED,
+ STATUS_DESYNCED,
+ STATUS_SYNCED
+} = SYNC_STATUS;
+
+export default class Header extends React.Component {
+ render() {
+ const {status} = this.props;
+ const color = (status===STATUS_UNSYNCED)?"":(status===STATUS_SYNCED)?style.green:style.red;
+ return createElement("div",{className:style.container},
+ createElement("h2",{className:style.h2},"Workouts"),
+ createElement("span",{className:style.span+` ${color}`},status)
+ );
+ }
+}
\ No newline at end of file
--- /dev/null
+:local(.container) {
+ width:100%;
+ height:10vh;
+ text-align:center;
+ border:2px solid black;
+ box-sizing:border-box;
+}
+
+:local(.h2) {
+
+}
+
+:local(.span) {
+ position:absolute;
+ top:0;
+ right:0;
+ font-size:x-small;
+}
+
+:local(.red) {
+ color:red;
+}
+
+:local(.green) {
+ color:green;
+}
\ No newline at end of file
--- /dev/null
+import {connect} from 'react-redux';
+
+import Header from './header.component.js';
+
+const mapStateToProps = (state) => {
+ const {status} = state.sync;
+ return {status};
+}
+
+export const header = connect(
+ mapStateToProps,
+ null
+)(Header);
\ No newline at end of file
--- /dev/null
+import style from './main.css';
+
+import {daysAgo} from '../days.ago/days.ago.js';
+import {header} from '../header/header.js';
+import {manage} from '../manage/manage.js';
+import {recent} from '../recent/recent.js';
+
+import workout from '../../classes/workout.js';
+
+export default class Main extends React.Component {
+ constructor(props) {
+ super(props);
+ this.load = this.load.bind(this);
+ this.save = this.save.bind(this);
+ this.switchView = this.switchView.bind(this);
+ this.handleKeyPress = this.handleKeyPress.bind(this);
+ }
+ componentDidMount() {
+ document.addEventListener('keydown',this.handleKeyPress);
+ this.switchView("manage");
+ }
+ componentWillUnmount() {
+ document.removeEventListener('keydown',this.handleKeyPress);
+ }
+ handleKeyPress(event) {
+ if(event.ctrlKey) {
+ if(event.key==="s") {
+ this.save();
+ event.preventDefault();
+ } else if(event.key==="o") {
+ this.load();
+ event.preventDefault();
+ }
+ }
+ }
+ save(data) {
+ const {workouts} = this.props;
+ const saveFormat = {};
+ for(let i of Object.keys(workouts)) {
+ saveFormat[i] = {
+ attributes:workouts[i].attributes,
+ dates:workouts[i].dates,
+ name:workouts[i].name
+ };
+ }
+ const content = JSON.stringify(saveFormat);
+ var a = document.createElement('a');
+ var blob = new Blob([content], {'type':'application/octet-stream'});
+ a.href = window.URL.createObjectURL(blob);
+ a.download = 'workouts.json';
+ document.body.appendChild(a);
+ a.click();
+ setTimeout(() => {
+ document.body.removeChild(a);
+ window.URL.revokeObjectURL(blob);
+ }, 0);
+ }
+ async load(data) {
+ const {importWorkouts,view} = this.props;
+ var file = document.createElement('input');
+ file.type = "file";
+ file.style.display = "none";
+
+ try {
+ const workouts = await new Promise((resolve,reject) => {
+ const reader = new FileReader();
+
+ file.onchange = (input) => {
+ const reader = new FileReader();
+ reader.readAsText(input.target.files[0]);
+ reader.onload = () => {
+ const workouts = JSON.parse(reader.result);
+ for(let i in workouts) {
+ workouts[i] = new workout(workouts[i]);
+ }
+ resolve(workouts);
+ };
+
+ reader.onerror = () => {
+ reject(reader.error);
+ };
+ };
+
+ document.body.appendChild(file);
+ file.click();
+ });
+
+ importWorkouts(workouts);
+ } catch(err) {
+ throw err;
+ }
+ document.body.removeChild(file);
+ }
+ switchView(type) {
+ this.props.switchView(type);
+ }
+ render() {
+ const {view} = this.props;
+ const otherView = (view=="manage")?"recent":"manage";
+ return createElement("div",{className:style.container},
+ createElement("div",{className:style.headerContainer},
+ createElement(header,null)
+ ),
+ createElement("div",{className:style.viewContainer},
+ createElement("div",{className:style.subHeaderContainer},
+ createElement(daysAgo,null),
+ createElement("input",{type:"button",onClick:this.switchView.bind(this,otherView),value:otherView}),
+ createElement("input",{type:"button",onClick:this.save,value:"Save Workouts"})
+ ),
+ (view==="manage")?createElement(manage,null):createElement(recent,null)
+ )
+ );
+ }
+}
\ No newline at end of file
--- /dev/null
+import {connect} from 'react-redux';
+
+import Main from './main.component.js';
+
+import workout from '../../classes/workout.js';
+
+import {constants} from '../../constants.js';
+const {
+ CHANGE_VIEW,
+ NEW_WORKOUT,
+ SORT_VIEW
+} = constants;
+
+const mapStateToParentProps = (state) => {
+ const {workouts} = state;
+ const {view} = state.view;
+ return {
+ view,
+ workouts
+ };
+}
+
+const mapStateToProps = (state) => {
+ const {view} = state.view;
+ return {
+ view
+ };
+};
+
+const switchViewHelper = (dispatch,view,workouts) => {
+ dispatch({
+ type:CHANGE_VIEW,
+ workouts,
+ view
+ });
+ dispatch({
+ type:SORT_VIEW,
+ key:(view==="manage")?"last_done":"date",
+ order:(view==="manage")?"asc":"desc",
+ shift:false
+ });
+};
+
+const mapDispatchToProps = (dispatch,ownProps) => {
+ return {
+ importWorkouts:(workouts) => {
+ for(let i in workouts) {
+ dispatch({
+ type:NEW_WORKOUT,
+ toAdd:workouts[i]
+ });
+ }
+ switchViewHelper(dispatch,ownProps.view,workouts);
+ },
+ switchView:(view) => switchViewHelper(dispatch,view,ownProps.workouts)
+ };
+};
+
+
+export const main = connect(
+ mapStateToParentProps
+)(connect(
+ mapStateToProps,
+ mapDispatchToProps
+)(Main));
\ No newline at end of file
...DEFAULT_ATTRIBUTES_ORDER,
"times_done",
"last_done",
- "description",
"done"
].map((field) => {
if(field=="done") {
return createElement("td",{key:"cell-"+field},
createElement("input",{defaultValue:data[field],onBlur:this.changeName})
);
- } else if(field=="description") {
- return createElement("td",{key:"cell-"+field},
- createElement("textarea",{value:data[field],onChange:this.changeDescription})
- );
} else if((field=="times_done")||(field=="last_done")) {
return createElement("td",{key:"cell-"+field},data[field]);
} else {
...DEFAULT_ATTRIBUTES_ORDER,
"times done",
"last done",
- "description",
""
].map((x) => {
return createElement("th",{key:"head-"+x,onClick:this.handleSort.bind(this,x)},x);
});
- const rows = workouts.map((i) => {
+ const rows = workouts.map((i,index) => {
return createElement(manageRow,{
- key:"row-"+i.name,
+ key:`row-${index}-${i.name}`,
data:i,
complete:() => completeWorkout(i.name),
- description:(val) => changeDescription(i.name,val),
name:(val) => changeName(i.name,val),
toggle:(attr) => toggleAttribute(i.name,attr)
});
--- /dev/null
+import {connect} from 'react-redux';
+
+import Manage from './manage.component.js';
+
+import backend from '../../util/backend.js';
+
+import {constants} from '../../constants.js';
+const {
+ ADD_WORKOUT,
+ CHANGE_ATTRIBUTE,
+ CHANGE_WORKOUT_DESCRIPTION,
+ CHANGE_WORKOUT_NAME,
+ CHANGE_VIEW,
+ NEW_WORKOUT,
+ SORT_VIEW,
+ SYNC_STATUS
+} = constants;
+
+
+const mapStateToParentProps = (state) => {
+ const {workouts} = state;
+ const {status} = state.sync;
+ return {
+ workouts,
+ sync:(status!==SYNC_STATUS.STATUS_DESYNCED)
+ };
+}
+
+const mapStateToProps = (state) => {
+ return {
+ workouts:state.view.data
+ };
+};
+
+const mapDispatchToProps = (dispatch,ownProps) => {
+ return {
+ changeName:async(name,val) => {
+ if(ownProps.sync) {
+ backend({
+ dispatch,
+ cmd:void(0),
+ data:ownProps.workouts
+ });
+ }
+
+ dispatch({
+ type:CHANGE_WORKOUT_NAME,
+ workout:name,
+ name:val
+ });
+ },
+ completeWorkout:async(workout) => {
+ const now = new Date();
+ const today = new Date(now.getTime() - (now.getTimezoneOffset() * 60000 ))
+ .toISOString().
+ split("T")[0];
+
+ if(ownProps.sync) {
+ backend({
+ dispatch,
+ cmd:`add\n${workout}\n${today}`,
+ data:ownProps.workouts
+ });
+ }
+
+ dispatch({
+ type:ADD_WORKOUT,
+ name:workout,
+ toAdd:[today]
+ });
+
+ dispatch({
+ type:CHANGE_VIEW,
+ view:"manage",
+ workouts:ownProps.workouts
+ });
+
+ dispatch({
+ type:SORT_VIEW,
+ key:"last_done",
+ order:"asc",
+ shift:false
+ });
+ },
+ newWorkout:async() => {
+ if(ownProps.sync) {
+ backend({
+ dispatch,
+ cmd:`new\nNew Workout`,
+ data:ownProps.workouts
+ });
+ }
+
+ dispatch({
+ type:NEW_WORKOUT
+ });
+ },
+ sort:(key,shift) => {
+ dispatch({
+ type:SORT_VIEW,
+ key,
+ shift
+ });
+ },
+ toggleAttribute:async(name,attr) => {
+ if(ownProps.sync) {
+ backend({
+ dispatch,
+ cmd:`toggle\n${name}\n${attr}`,
+ data:ownProps.workouts
+ });
+ }
+
+ dispatch({
+ type:CHANGE_ATTRIBUTE,
+ workout:name,
+ attribute:attr
+ });
+ dispatch({
+ type:CHANGE_VIEW,
+ view:"manage",
+ workouts:ownProps.workouts
+ });
+ dispatch({
+ type:SORT_VIEW,
+ key:"last_done",
+ order:"asc",
+ shift:false
+ });
+ }
+ }
+};
+
+export const manage = connect(
+ mapStateToParentProps
+)(connect(
+ mapStateToProps,
+ mapDispatchToProps
+)(Manage));
\ No newline at end of file
--- /dev/null
+import {connect} from 'react-redux';
+
+import Recent from './recent.component.js';
+
+import backend from '../../util/backend.js';
+
+import {constants} from '../../constants.js';
+const {
+ CHANGE_WORKOUT_DATE,
+ SORT_VIEW,
+ SYNC_STATUS
+} = constants;
+
+const mapStateToParentProps = (state) => {
+ const {workouts} = state;
+ const {status} = state.sync;
+ return {
+ workouts,
+ sync:(status!==SYNC_STATUS.STATUS_DESYNCED)
+ };
+}
+
+const mapStateToProps = (state) => {
+ return {
+ data:state.view.data.slice(0,100)
+ };
+}
+
+const mapDispatchToProps = (dispatch,ownProps) => {
+ return {
+ handleDateChange:async(workout,old,date) => {
+ if(ownProps.sync) {
+ backend({
+ dispatch,
+ cmd:void(0),
+ data:ownProps.workouts
+ });
+ }
+
+ dispatch({
+ type:CHANGE_WORKOUT_DATE,
+ workout,
+ old,
+ new:date
+ });
+ },
+ handleSort:(key) => {
+ dispatch({
+ type:SORT_VIEW,
+ key,
+ shift:false
+ });
+ }
+ };
+}
+
+export const recent = connect(
+ mapStateToParentProps
+)(connect(
+ mapStateToProps,
+ mapDispatchToProps
+)(Recent));
\ No newline at end of file
CHANGE_ATTRIBUTE:"CHANGE_ATTRIBUTE",
CHANGE_VIEW:"CHANGE_VIEW",
CHANGE_WORKOUT_DATE:"CHANGE_WORKOUT_DATE",
- CHANGE_WORKOUT_DESCRIPTION:"CHANGE_WORKOUT_DESCRIPTION",
CHANGE_WORKOUT_NAME:"CHANGE_WORKOUT_NAME",
DEFAULT_ATTRIBUTES:{
lower:false,
DELETE_WORKOUT:"DELETE_WORKOUT",
NEW_WORKOUT:"NEW_WORKOUT",
REMOVE_WORKOUT:"REMOVE_WORKOUT",
- SORT_VIEW:"SORT_VIEW"
+ SORT_VIEW:"SORT_VIEW",
+ SYNC_STATUS:{
+ STATUS_UNSYNCED:"STATUS_UNSYNCED",
+ STATUS_DESYNCED:"STATUS_DESYNCED",
+ STATUS_SYNCED:"STATUS_SYNCED"
+ },
+ UPDATE_SYNC_STATUS:"UPDATE_SYNC_STATUS"
};
Object.freeze(constants);
export {constants};
\ No newline at end of file
--- /dev/null
+export default async function action(params) {
+ const {cmd,data,backendDataLoader} = params;
+
+ if(cmd===void(0)) { throw new Error(`missing parameter cmd`); }
+ if(data===void(0)) { throw new Error(`missing parameter data`); }
+ if(backendDataLoader===void(0)) { throw new Error(`missing parameter backendDataLoader`); }
+
+ try {
+ await cmd(); // must throw if cmd fails
+ const backendData = await backendDataLoader();
+
+ for(let i in data) {
+ if(!data[i].equals(backendData[i])) {
+ return false;
+ }
+ }
+
+ return true;
+ } catch(err) {
+ console.error(err);
+ return false;
+ }
+}
\ No newline at end of file
--- /dev/null
+import request from '../util/request.js';
+
+export default async function attributes() {
+ const raw = await request('attr\nls\n');
+ return raw.split('\n').filter((i) => i!=="");
+}
\ No newline at end of file
--- /dev/null
+import getAttributes from './attributes.js';
+import getRecent from './recent.js'
+import getWorkouts from './workouts.js';
+
+import workout from '../classes/workout.js';
+
+export default async function load() {
+ const attrs = await getAttributes();
+ const workouts = await getWorkouts();
+ const recent = await getRecent();
+
+ for(let i in workouts) {
+ workouts[i].dates = (recent[i]===void(0))?[]:recent[i];
+ let flags = workouts[i].attributes;
+ workouts[i].attributes = {};
+ for(let attr of attrs) {
+ workouts[i].attributes[attr] = (flags & 1)?true:false;
+ flags >>= 1;
+ }
+ workouts[i].name = i;
+ workouts[i] = new workout(workouts[i]);
+ }
+
+ return workouts;
+}
\ No newline at end of file
--- /dev/null
+import request from '../util/request.js';
+
+export default async function workouts() {
+ const raw = await request('recent\n');
+
+ const regex = /^(.*)\t(.*)/gm;
+
+ const recent = {};
+
+ let m;
+
+ while ((m = regex.exec(raw)) !== null) {
+ // This is necessary to avoid infinite loops with zero-width matches
+ if (m.index === regex.lastIndex) { regex.lastIndex++; }
+
+ if(recent[m[1]]===void(0)) {
+ recent[m[1]] = [];
+ }
+
+ recent[m[1]].push(m[2]);
+ }
+
+ return recent;
+}
\ No newline at end of file
--- /dev/null
+import request from '../util/request.js';
+
+export default async function workouts() {
+ const raw = await request('ls\n');
+
+ const regex = /^(.*) \[(.*)\] \[Last done: (.*)\]/gm;
+
+ const workouts = {};
+
+ let m;
+
+ while ((m = regex.exec(raw)) !== null) {
+ // This is necessary to avoid infinite loops with zero-width matches
+ if (m.index === regex.lastIndex) { regex.lastIndex++; }
+
+ // The result can be accessed through the `m`-variable.
+ workouts[m[1]] = {
+ attributes:m[2],
+ last_done:m[3]
+ };
+ }
+
+ return workouts;
+}
\ No newline at end of file
--- /dev/null
+import {render} from 'react-dom';
+
+import {createStore} from 'redux';
+import {Provider} from 'react-redux';
+import reducers from 'reducers/combined.js';
+
+import {main} from 'components/main/main.js';
+
+import workout from 'classes/workout.js';
+
+import load from 'data/load.js';
+
+import sampleData from '../workouts.json';
+
+window.workoutsInit = async(anchor,saveCb) => {
+ if(!(anchor instanceof HTMLElement)) {
+ throw new Error("Invalid anchor");
+ }
+
+ let data = {};
+ try {
+ data = await load();
+ } catch(err) {
+ if(err.message!=="request failed") {
+ throw err;
+ } else {
+ data = sampleData;
+ if((data !== void(0))&&(typeof data =="object")) {
+ for(let i in data) {
+ data[i] = new workout(data[i]);
+ }
+ }
+ }
+ }
+
+ const store = createStore(reducers,{workouts:data});
+ render(
+ createElement(Provider,{store},
+ createElement(main,null)
+ ),
+ anchor
+ );
+};
\ No newline at end of file
import {combineReducers} from 'redux';
-import workouts from './workouts.js';
+import sync from './sync.js';
import view from './view.js';
+import workouts from './workouts.js';
export default combineReducers({
- workouts,
- view
+ sync,
+ view,
+ workouts
});
\ No newline at end of file
--- /dev/null
+import {constants} from '../constants.js';
+const {
+ DO_ACTION_SYNC,
+ UPDATE_SYNC_STATUS,
+ SYNC_STATUS
+} = constants;
+
+const defaultState = {
+ status:SYNC_STATUS.STATUS_UNSYNCED
+};
+
+export default function sync(state = defaultState,action) {
+ if((action===void(0))||(action.type===void(0))) { return state; }
+
+ switch(action.type) {
+ case UPDATE_SYNC_STATUS:
+ if(action.status===void(0)) { return state; }
+ if(SYNC_STATUS[action.status]===void(0)) { return state; }
+
+ return {
+ ...state,
+ status:action.status
+ };
+ default:
+ return state;
+ }
+}
\ No newline at end of file
import workout from '../classes/workout.js';
import {constants} from '../constants.js';
+const {
+ CHANGE_VIEW,
+ DEFAULT_ATTRIBUTES,
+ SORT_VIEW
+} = constants;
-const {DEFAULT_ATTRIBUTES} = constants;
const defaultDaysAgo = {...DEFAULT_ATTRIBUTES};
Object.keys(defaultDaysAgo).map((attr) => {
defaultDaysAgo[attr] = -1;
});
+
const defaultState = {
view:"manage",
daysAgo:defaultDaysAgo,
};
export default function view(state = defaultState,action) {
- const {CHANGE_VIEW,SORT_VIEW} = constants;
+ if((action===void(0))||(action.type===void(0))) { return state; }
+
switch(action.type) {
case CHANGE_VIEW:
if((action.workouts == void(0))||(typeof action.workouts != "object" )) {
if(!Object.keys(action.workouts).every((x) => action.workouts[x] instanceof workout)) {
return state;
}
- if((action.view === void(0))||(action.view == state.view)) {
+ if(action.view === void(0)) {
return state;
}
switch(action.view) {
toPush.name = action.workouts[i].name;
toPush.times_done = action.workouts[i].times_done;
toPush.last_done = action.workouts[i].last_done;
- toPush.description = action.workouts[i].description;
newStateManageView.data.push(toPush);
}
newStateManageView.daysAgo = generateDaysAgo(action.workouts);
};
newStateRecentView.data = [];
for(let i in action.workouts) {
- for(let j=0;j<action.workouts[i].datesDone.length;j++) {
+ for(let j=0;j<action.workouts[i].dates.length;j++) {
newStateRecentView.data.push({
name:action.workouts[i].name,
- date:action.workouts[i].datesDone[j]
+ date:action.workouts[i].dates[j]
});
}
}
if(action.key === void(0)) {
return state;
}
- const newStateAfterSort = {...state};
+ const newStateAfterSort = {
+ ...state,
+ data:[...state.data],
+ };
let newSortKey = [...newStateAfterSort.sortKey];
let newSortOrder = [...newStateAfterSort.sortOrder];
if(action.shift === true) {
--- /dev/null
+import workout from '../classes/workout.js';
+
+import {constants} from '../constants.js';
+const {
+ ADD_WORKOUT,
+ CHANGE_ATTRIBUTE,
+ CHANGE_WORKOUT_DATE,
+ CHANGE_WORKOUT_NAME,
+ DEFAULT_ATTRIBUTES,
+ DELETE_WORKOUT,
+ NEW_WORKOUT,
+ REMOVE_WORKOUT
+} = constants;
+
+export default function workouts(state = {},action) {
+ if((action===void(0))||(action.type===void(0))) { return state; }
+
+ switch(action.type) {
+ case ADD_WORKOUT:
+ if(action.name === void(0)) { return state; }
+ if(!(state[action.name] instanceof workout)) { return state; }
+
+ const newStateAfterAdd = {...state};
+ try {
+ newStateAfterAdd[action.name].add(action.toAdd);
+ return newStateAfterAdd;
+ } catch(err) {
+ return state;
+ }
+ case CHANGE_ATTRIBUTE:
+ if((action.workout === void(0))||(action.attribute === void(0))) { return state; }
+ if(state[action.workout] === void(0)) { return state; }
+
+ try {
+ const newStateAfterChangeAttribute = {...state};
+ newStateAfterChangeAttribute[action.workout].toggleAttribute(action.attribute);
+ return newStateAfterChangeAttribute;
+ } catch(err) {
+ return state;
+ }
+ case CHANGE_WORKOUT_DATE:
+ if(action.workout === void(0)) { return state; }
+ if((action.old === void(0))||(action.new === void(0))) { return state; }
+ if(action.old === action.new) { return state; }
+
+ const newStateAfterWorkoutDateChange = {...state};
+ try {
+ newStateAfterWorkoutDateChange[action.workout].remove(action.old);
+ newStateAfterWorkoutDateChange[action.workout].add([action.new]);
+ return newStateAfterWorkoutDateChange;
+ } catch(err) {
+ console.error(err);
+ return state;
+ }
+ case CHANGE_WORKOUT_NAME:
+ if(action.workout === void(0)) { return state; }
+ if(state[action.workout] === void(0)) { return state; }
+ if(state[action.name] !== void(0)) { return state; }
+
+ try {
+ const newStateAfterNameChange = {
+ ...state
+ };
+ const toAdd = new workout(newStateAfterNameChange[action.workout]);
+ toAdd.name = action.name;
+ delete(newStateAfterNameChange[action.workout]);
+ newStateAfterNameChange[action.name] = toAdd;
+ return newStateAfterNameChange;
+ } catch(err) {
+ return state;
+ }
+ case DELETE_WORKOUT:
+ if(action.name === void(0)) { return state; }
+ if(action.toDel === void(0)) { return state; }
+ if(!(state[action.name] instanceof workout)) { return state; }
+
+ try {
+ const newStateAfterDelete = {...state};
+ newStateAfterDelete[action.name].remove(action.toDel);
+ return newStateAfterDelete;
+ } catch(err) {
+ return state;
+ }
+ case NEW_WORKOUT:
+ if(action.toAdd===void(0)) {
+ if(state["New Workout"] !== void(0)) { return state; }
+
+ const newStateAfterNewGeneric = {...state};
+ const newWorkout = new workout();
+ newStateAfterNewGeneric[newWorkout.name] = newWorkout;
+ return newStateAfterNewGeneric;
+ } else {
+ if(!(action.toAdd instanceof workout)) { return state; }
+ const newStateAfterNew = {...state};
+ newStateAfterNew[action.toAdd.name] = action.toAdd;
+ return newStateAfterNew;
+ }
+ case REMOVE_WORKOUT:
+ if(action.toRemove === void(0)) { return state; }
+ if(state[action.toRemove] === void(0)) { return state; }
+
+ const newStateAfterRemove = {...state};
+ delete(newStateAfterRemove[action.toRemove]);
+ return newStateAfterRemove;
+ default:
+ return state;
+ }
+}
\ No newline at end of file
--- /dev/null
+import action from '../data/action.js';
+import load from '../data/load.js';
+
+import request from './request.js';
+
+import {constants} from '../constants.js';
+const {
+ SYNC_STATUS,
+ UPDATE_SYNC_STATUS
+} = constants;
+const {
+ STATUS_UNSYNCED,
+ STATUS_DESYNCED,
+ STATUS_SYNCED
+} = SYNC_STATUS;
+
+export default async function backend(opts) {
+ const {dispatch,cmd,data} = opts;
+
+ try {
+ if(!(await action({
+ cmd:async() => request(cmd),
+ data,
+ backendDataLoader:load
+ }))) {
+ throw new Error(`command '${cmd}' failed`);
+ }
+ } catch(err) {
+ console.error(err);
+ alert(`Sync with backend failed. Save manually.`);
+ dispatch({
+ type:UPDATE_SYNC_STATUS,
+ status:STATUS_DESYNCED
+ });
+ }
+}
\ No newline at end of file
--- /dev/null
+export default async function request(cmd) {
+ const req = await fetch("/", {
+ method: 'POST',
+ body:cmd
+ });
+
+ if(!req.ok) { throw new Error('request failed'); }
+
+ return await req.text();
+}
\ No newline at end of file
--- /dev/null
+const assert = require('assert');
+
+const action = require('../src/data/action.js').default;
+
+const workout = require('../src/classes/workout.js').default;
+
+const {constants} = require('../src/constants.js');
+const {
+ DEFAULT_ATTRIBUTES
+} = constants;
+
+describe('action tests',() => {
+
+ it('should throw when given no parameters',async() => {
+ const params = {};
+ await assert.rejects(action(params));
+ });
+
+ it('should throw when cmd is not a function',async() => {
+ const params = {cmd:1};
+ await assert.rejects(action(params));
+ });
+
+ it('should return false when not given any data',async() => {
+ const params = {
+ cmd:() => {}
+ };
+ await assert.rejects(action(params));
+ });
+
+ it('should throw when not given a function to load backend data',async() => {
+ const params = {
+ cmd:() => {},
+ data:{}
+ };
+ await assert.rejects(action(params));
+ });
+
+ it('should return false when cmd function throws',async() => {
+ const params = {
+ cmd:async() => {
+ throw new Error("here");
+ },
+ data:{},
+ backendDataLoader:async() => {}
+ };
+ await assert.doesNotReject(async() => {
+ const originalConsoleError = console.error;
+ console.error = (msg) => {};
+ assert.strictEqual(await action(params),false);
+ console.error = originalConsoleError;
+ });
+ });
+
+ it('should return false when backend data and data differ',async() => {
+ const params = {
+ cmd:async() => {},
+ data:{
+ test:new workout(),
+ test2:new workout({
+ attributes:DEFAULT_ATTRIBUTES,
+ dates:['2020-07-01'],
+ name:'test2'
+ })
+ },
+ backendDataLoader:async() => {
+ return {
+ test:-1,
+ test2:'apple'
+ };
+ }
+ };
+
+ await assert.doesNotReject(async() => {
+ assert.strictEqual(await action(params),false);
+ });
+ });
+
+ it('should return true upon updating and validating backend data',async() => {
+ const params = {
+ cmd:async() => {},
+ data:{
+ test:new workout()
+ },
+ backendDataLoader:async() => {
+ return {
+ test:new workout()
+ };
+ }
+ };
+
+ await assert.doesNotReject(async() => {
+ assert.strictEqual(await action(params),true);
+ });
+ });
+
+});
\ No newline at end of file
--- /dev/null
+const assert = require('assert');
+
+const sync = require('../src/reducers/sync.js').default;
+
+const {constants} = require('../src/constants.js');
+const {
+ UPDATE_SYNC_STATUS,
+ SYNC_STATUS
+} = constants;
+
+describe('sync reducer',() => {
+
+ describe(UPDATE_SYNC_STATUS,() => {
+
+ it('should not change the state when given an invalid action',async() => {
+ const action = {
+ type:UPDATE_SYNC_STATUS
+ };
+ await assert.doesNotReject(async() => {
+ assert.deepStrictEqual(await sync("haha",action),"haha");
+ });
+ });
+
+ it('should not change the state when given an invalid status',async() => {
+ const action = {
+ type:UPDATE_SYNC_STATUS,
+ status:-1
+ };
+ await assert.doesNotReject(async() => {
+ assert.deepStrictEqual(await sync("haha",action),"haha");
+ });
+ });
+
+ it('should successfully change the status',async() => {
+ const stateA = {
+ status:SYNC_STATUS.STATUS_DESYNCED
+ };
+ const action1 = {
+ type:UPDATE_SYNC_STATUS,
+ status:SYNC_STATUS.STATUS_UNSYNCED
+ };
+
+ const stateB = {
+ status:SYNC_STATUS.STATUS_UNSYNCED
+ };
+ const action2 = {
+ type:UPDATE_SYNC_STATUS,
+ status:SYNC_STATUS.STATUS_SYNCED
+ };
+
+ const stateC = {
+ status:SYNC_STATUS.STATUS_SYNCED
+ };
+
+ await assert.doesNotReject(async() => {
+ assert.deepStrictEqual(await sync(stateA,action1),stateB);
+ assert.deepStrictEqual(await sync(stateB,action2),stateC);
+ });
+ });
+
+ });
+
+});
\ No newline at end of file
--- /dev/null
+const assert = require('assert');
+
+const view = require('../src/reducers/view.js').default;
+
+const workout = require('../src/classes/workout.js').default;
+
+const {constants} = require('../src/constants.js');
+const {
+ CHANGE_VIEW,
+ DEFAULT_ATTRIBUTES,
+ SORT_VIEW
+} = constants;
+
+describe('view reducers',() => {
+
+ const defaultState = view();
+
+ const workouts = {
+ workout1:new workout({
+ attributes:DEFAULT_ATTRIBUTES,
+ dates:['2020-07-01'],
+ name:'workout1'
+ }),
+ workout2:new workout({
+ attributes:DEFAULT_ATTRIBUTES,
+ dates:['2020-06-06'],
+ name:'workout2'
+ }),
+ apple:new workout({
+ attributes:DEFAULT_ATTRIBUTES,
+ dates:['2020-06-04'],
+ name:'apple'
+ }),
+ hello:new workout({
+ attributes:DEFAULT_ATTRIBUTES,
+ dates:['2020-07-01'],
+ name:'hello'
+ })
+ };
+
+ describe(CHANGE_VIEW,() => {
+
+ it('should not change the state when an invalid action is given',() => {
+ const stateA = {...defaultState};
+ assert.deepStrictEqual(view(stateA,void(0)),defaultState);
+ });
+
+ it('should successfully change the state to the `manage` view',() => {
+ const stateA = {...defaultState};
+ const action = {
+ type:CHANGE_VIEW,
+ workouts:{},
+ view:"manage"
+ };
+
+ const stateB = {
+ ...defaultState
+ };
+ assert.deepStrictEqual(view(stateA,action),stateB);
+ });
+
+ it('should successfully change the state to the `recent` view',() => {
+ const stateA = {...defaultState};
+ const action = {
+ type:CHANGE_VIEW,
+ workouts:{},
+ view:"recent"
+ };
+
+ const stateB = {
+ ...defaultState,
+ view:"recent"
+ };
+ assert.deepStrictEqual(view(stateA,action),stateB);
+ });
+
+ it('should successfully add all workouts to data array with appropriate manage view fields',() => {
+ const stateA = {...defaultState};
+ const action = {
+ type:CHANGE_VIEW,
+ workouts,
+ view:"manage"
+ };
+
+ const stateB = {
+ ...defaultState,
+ view:"manage",
+ data: [
+ {
+ "back": false,
+ "cardio": false,
+ "core": false,
+ "last_done": "2020-07-01",
+ "lower": false,
+ "martial": false,
+ "name": "workout1",
+ "other": false,
+ "times_done": 1,
+ "upper": false
+ },
+ {
+ "back": false,
+ "cardio": false,
+ "core": false,
+ "last_done": "2020-06-06",
+ "lower": false,
+ "martial": false,
+ "name": "workout2",
+ "other": false,
+ "times_done": 1,
+ "upper": false
+ },
+ {
+ "back": false,
+ "cardio": false,
+ "core": false,
+ "last_done": "2020-06-04",
+ "lower": false,
+ "martial": false,
+ "name": "apple",
+ "other": false,
+ "times_done": 1,
+ "upper": false
+ },
+ {
+ "back": false,
+ "cardio": false,
+ "core": false,
+ "last_done": "2020-07-01",
+ "lower": false,
+ "martial": false,
+ "name": "hello",
+ "other": false,
+ "times_done": 1,
+ "upper": false
+ }
+ ]
+ };
+ assert.deepStrictEqual(view(stateA,action),stateB);
+ });
+
+ it('should successfully add all workouts to data array with appropriate recent view fields',() => {
+ const stateA = {...defaultState};
+ const action = {
+ type:CHANGE_VIEW,
+ workouts,
+ view:"recent"
+ };
+
+ const stateB = {
+ ...defaultState,
+ view:"recent",
+ data: [
+ {
+ date:'2020-07-01',
+ name:'workout1'
+ },
+ {
+ date:'2020-06-06',
+ name:'workout2'
+ },
+ {
+ date:'2020-06-04',
+ name:'apple'
+ },
+ {
+ date:'2020-07-01',
+ name:'hello'
+ }
+ ]
+ };
+ assert.deepStrictEqual(view(stateA,action),stateB);
+ });
+
+ });
+
+ describe(SORT_VIEW,() => {
+
+ it('should not change the state when an invalid action is given',() => {
+ const stateA = {...defaultState};
+ assert.deepStrictEqual(view(stateA,void(0)),defaultState);
+ });
+
+ it('should successfully sort the manage view',() => {
+ const stateA = {...defaultState};
+ const action = {
+ type:CHANGE_VIEW,
+ workouts,
+ view:'manage'
+ };
+
+ const stateB = {
+ ...defaultState,
+ view:"manage",
+ data: [
+ {
+ "back": false,
+ "cardio": false,
+ "core": false,
+ "last_done": "2020-07-01",
+ "lower": false,
+ "martial": false,
+ "name": "workout1",
+ "other": false,
+ "times_done": 1,
+ "upper": false
+ },
+ {
+ "back": false,
+ "cardio": false,
+ "core": false,
+ "last_done": "2020-06-06",
+ "lower": false,
+ "martial": false,
+ "name": "workout2",
+ "other": false,
+ "times_done": 1,
+ "upper": false
+ },
+ {
+ "back": false,
+ "cardio": false,
+ "core": false,
+ "last_done": "2020-06-04",
+ "lower": false,
+ "martial": false,
+ "name": "apple",
+ "other": false,
+ "times_done": 1,
+ "upper": false
+ },
+ {
+ "back": false,
+ "cardio": false,
+ "core": false,
+ "last_done": "2020-07-01",
+ "lower": false,
+ "martial": false,
+ "name": "hello",
+ "other": false,
+ "times_done": 1,
+ "upper": false
+ }
+ ],
+ sortKey: ['last_done'],
+ sortOrder: ['desc']
+ };
+ assert.deepStrictEqual(view(stateA,action),stateB);
+
+ const action2 = {
+ type:SORT_VIEW,
+ key:'name'
+ };
+ const stateC = {
+ ...defaultState,
+ view:"manage",
+ data: [
+ {
+ "back": false,
+ "cardio": false,
+ "core": false,
+ "last_done": "2020-06-04",
+ "lower": false,
+ "martial": false,
+ "name": "apple",
+ "other": false,
+ "times_done": 1,
+ "upper": false
+ },
+ {
+ "back": false,
+ "cardio": false,
+ "core": false,
+ "last_done": "2020-07-01",
+ "lower": false,
+ "martial": false,
+ "name": "hello",
+ "other": false,
+ "times_done": 1,
+ "upper": false
+ },
+ {
+ "back": false,
+ "cardio": false,
+ "core": false,
+ "last_done": "2020-07-01",
+ "lower": false,
+ "martial": false,
+ "name": "workout1",
+ "other": false,
+ "times_done": 1,
+ "upper": false
+ },
+ {
+ "back": false,
+ "cardio": false,
+ "core": false,
+ "last_done": "2020-06-06",
+ "lower": false,
+ "martial": false,
+ "name": "workout2",
+ "other": false,
+ "times_done": 1,
+ "upper": false
+ }
+ ],
+ sortKey: ['name'],
+ sortOrder: ['asc']
+ };
+
+ assert.deepStrictEqual(view(stateB,action2),stateC);
+ });
+
+ it('should successfully sort the recent view',() => {
+ const stateA = {...defaultState};
+ const action = {
+ type:CHANGE_VIEW,
+ workouts,
+ view:"recent"
+ };
+
+ const stateB = {
+ ...defaultState,
+ view:"recent",
+ data: [
+ {
+ date:'2020-07-01',
+ name:'workout1'
+ },
+ {
+ date:'2020-06-06',
+ name:'workout2'
+ },
+ {
+ date:'2020-06-04',
+ name:'apple'
+ },
+ {
+ date:'2020-07-01',
+ name:'hello'
+ }
+ ]
+ };
+ assert.deepStrictEqual(view(stateA,action),stateB);
+
+ const action2 = {
+ type:SORT_VIEW,
+ key:'name'
+ };
+
+ const stateC = {
+ ...defaultState,
+ view:"recent",
+ data: [
+ {
+ date:'2020-06-04',
+ name:'apple'
+ },
+ {
+ date:'2020-07-01',
+ name:'hello'
+ },
+ {
+ date:'2020-07-01',
+ name:'workout1'
+ },
+ {
+ date:'2020-06-06',
+ name:'workout2'
+ }
+ ],
+ sortKey: ['name'],
+ sortOrder: ['asc']
+ };
+
+ assert.deepStrictEqual(view(stateB,action2),stateC);
+ });
+
+ });
+
+});
\ No newline at end of file
--- /dev/null
+const assert = require('assert');
+
+const workout = require('../src/classes/workout.js').default;
+
+const {constants} = require('../src/constants.js');
+const {DEFAULT_ATTRIBUTES} = constants;
+
+describe('workout object tests', () => {
+
+ it('should successfully create', () => {
+ assert.doesNotThrow(() => new workout());
+ });
+
+ it('should successfully add dates', () => {
+ const obj = new workout();
+ assert.throws(() => obj.add());
+ assert.doesNotThrow(() => obj.add(['2020-07-01']));
+ });
+
+ it('should successfully output the last time the workout was completed',() => {
+ const obj = new workout();
+ assert.strictEqual(obj.last_done,"");
+ obj.add(['2020-07-01']);
+ assert.strictEqual(obj.last_done,'2020-07-01');
+ });
+
+ it('should successfully remove dates', () => {
+ const obj = new workout();
+ obj.add(['2020-07-01']);
+ assert.deepStrictEqual(obj.dates,['2020-07-01']);
+ obj.remove('2020-07-01');
+ assert.deepStrictEqual(obj.dates,[]);
+ });
+
+ it('should successfully change the name', () => {
+ const obj = new workout();
+ assert.strictEqual(obj.name,'New Workout');
+ assert.throws(() => { obj.name = 1; });
+ assert.doesNotThrow(() => { obj.name = 'workout1'; });
+ assert.strictEqual(obj.name,'workout1');
+ });
+
+ it('should successfully change an attribute', () => {
+ const obj = new workout();
+ assert.deepStrictEqual(obj.attributes,DEFAULT_ATTRIBUTES);
+ assert.doesNotThrow(() => obj.toggleAttribute('lower'));
+ assert.deepStrictEqual(obj.attributes,{...DEFAULT_ATTRIBUTES,lower:true});
+ });
+
+ it('should compare two objects appropriately', () => {
+ const obj = new workout();
+ const obj2 = new workout({
+ attributes:{lower:true,upper:false},
+ dates:['2020-07-01','2020-08-01'],
+ name:'workout1'
+ });
+ const obj3 = new workout();
+ const obj4 = new workout({
+ attributes:{lower:true,upper:true},
+ dates:['2020-07-01','2020-08-01'],
+ name:'workout1'
+ });
+ const obj5 = new workout({
+ attributes:{lower:true,upper:false},
+ dates:['2020-07-01','2020-08-01', '2020-09-01'],
+ name:'workout1'
+ });
+ const obj6 = new workout({
+ attributes:{lower:true,upper:false},
+ dates:['2020-07-01','2020-08-01'],
+ name:'workout2'
+ });
+
+ assert.strictEqual(obj.equals(obj2),false);
+ assert.strictEqual(obj.equals(obj3),true);
+ assert.strictEqual(obj.equals(obj4),false);
+ assert.strictEqual(obj.equals(obj5),false);
+ assert.strictEqual(obj.equals(obj6),false);
+
+ assert.strictEqual(obj2.equals(obj3),false);
+ assert.strictEqual(obj2.equals(obj4),false);
+ assert.strictEqual(obj2.equals(obj5),false);
+ assert.strictEqual(obj2.equals(obj6),false);
+
+ assert.strictEqual(obj3.equals(obj4),false);
+ assert.strictEqual(obj3.equals(obj5),false);
+ assert.strictEqual(obj3.equals(obj6),false);
+
+ assert.strictEqual(obj4.equals(obj5),false);
+ assert.strictEqual(obj4.equals(obj6),false);
+
+ assert.strictEqual(obj5.equals(obj6),false);
+ });
+
+});
\ No newline at end of file
--- /dev/null
+const assert = require('assert');
+
+const workouts = require('../src/reducers/workouts.js').default;
+
+const workout = require('../src/classes/workout.js').default;
+
+const {constants} = require('../src/constants.js');
+const {
+ ADD_WORKOUT,
+ CHANGE_ATTRIBUTE,
+ CHANGE_WORKOUT_DATE,
+ CHANGE_WORKOUT_NAME,
+ DEFAULT_ATTRIBUTES,
+ DELETE_WORKOUT,
+ NEW_WORKOUT,
+ REMOVE_WORKOUT
+} = constants;
+
+describe('workouts reducer',() => {
+
+ const now = new Date();
+ let today = new Date(now.getTime() - (now.getTimezoneOffset() * 60000 ));
+ let yesterday = new Date(today.getTime());
+ today = today.toISOString().split("T")[0];
+ yesterday.setDate(yesterday.getDate() - 1);
+ yesterday = yesterday.toISOString().split("T")[0];
+
+ describe(ADD_WORKOUT,() => {
+
+ it('should not change the state when invalid action is given',() => {
+ assert.deepStrictEqual(workouts("haha"),"haha");
+ });
+
+ it('should fail to add to a non-existent workout',() => {
+ const stateA = {
+ "workout1":new workout({
+ attributes:DEFAULT_ATTRIBUTES,
+ dates:[],
+ name:'workout1'
+ })
+ };
+ const action = {
+ type:ADD_WORKOUT,
+ name:'workout1'
+ };
+
+ assert.deepStrictEqual(workouts(stateA,action),stateA);
+ });
+
+ it('should successfully add a workout to an already existing workout',() => {
+ const stateA = {
+ "workout1":new workout({
+ attributes:{...DEFAULT_ATTRIBUTES},
+ dates:[],
+ name:'workout1'
+ })
+ };
+ const action = {
+ type:ADD_WORKOUT,
+ name:'workout1',
+ toAdd:today
+ };
+
+ const stateB = {
+ "workout1":new workout({
+ attributes:{...DEFAULT_ATTRIBUTES},
+ dates:[today],
+ name:'workout1'
+ })
+ };
+
+ assert.deepStrictEqual(workouts(stateA,action),stateB);
+ });
+
+ });
+
+ describe(CHANGE_ATTRIBUTE,() => {
+
+ it('should not change the state when an invalid action is given',() => {
+ const action = {
+ type:CHANGE_ATTRIBUTE
+ };
+ assert.deepStrictEqual(workouts("haha",action),"haha");
+ });
+
+ it('should not change the state when trying to change an attribute for a nonexistent workout',() => {
+ const stateA = {
+ "workout1":new workout({
+ attributes:{...DEFAULT_ATTRIBUTES},
+ dates:[],
+ name:'workout1'
+ })
+ };
+ const action = {
+ type:CHANGE_ATTRIBUTE,
+ workout:'workout2'
+ };
+
+ assert.deepStrictEqual(workouts(stateA,action),stateA);
+
+ });
+
+ it('should successfully change the attribute of an already existing workout',() => {
+ const stateA = {
+ "workout1":new workout({
+ attributes:{...DEFAULT_ATTRIBUTES},
+ dates:[],
+ name:'workout1'
+ })
+ };
+ const action = {
+ type:CHANGE_ATTRIBUTE,
+ workout:'workout1',
+ attribute:"lower"
+ };
+
+ const stateB = {
+ "workout1":new workout({
+ attributes:{
+ ...DEFAULT_ATTRIBUTES,
+ "lower":true
+ },
+ dates:[],
+ name:'workout1'
+ })
+ };
+
+ assert.deepStrictEqual(workouts(stateA,action),stateB);
+ });
+
+ });
+
+ describe(CHANGE_WORKOUT_DATE,() => {
+
+ it('should not change the state when an invalid action is given',() => {
+ const action = {
+ type:CHANGE_WORKOUT_DATE
+ };
+ assert.deepStrictEqual(workouts("haha",action),"haha");
+ });
+
+ it('should not change the state when old and new are the same',() => {
+ const action = {
+ type:CHANGE_WORKOUT_DATE,
+ old:-1,
+ new:-1
+ };
+ assert.deepStrictEqual(workouts("haha",action),"haha");
+ });
+
+ it('should successfully change the date of a workout',() => {
+
+ const stateA = {
+ "workout1":new workout({
+ attributes:{...DEFAULT_ATTRIBUTES},
+ dates:[today],
+ name:'workout1'
+ })
+ };
+ const action = {
+ type:CHANGE_WORKOUT_DATE,
+ workout:'workout1',
+ old:today,
+ new:yesterday
+ };
+
+ const stateB = {
+ "workout1":new workout({
+ attributes:{...DEFAULT_ATTRIBUTES},
+ dates:[yesterday],
+ name:'workout1'
+ })
+ };
+
+ assert.deepStrictEqual(workouts(stateA,action),stateB);
+ });
+
+ });
+
+ describe(CHANGE_WORKOUT_NAME,() => {
+
+ it('should not change the state when an invalid action is given',() => {
+ const action = {
+ type:CHANGE_WORKOUT_NAME
+ };
+ assert.deepStrictEqual(workouts("haha",action),"haha");
+ });
+
+ it('should not change the state when trying to change the name for a nonexistent workout',() => {
+ const stateA = {
+ "workout1":new workout({
+ attributes:{...DEFAULT_ATTRIBUTES},
+ dates:[],
+ name:'workout1'
+ })
+ };
+ const action = {
+ type:CHANGE_WORKOUT_NAME,
+ workout:"workout2"
+ };
+ assert.deepStrictEqual(workouts("haha",action),"haha");
+ });
+
+ it('should fail to change the name of a workout to an already existing workout',() => {
+ const stateA = {
+ "workout1":new workout({
+ attributes:{...DEFAULT_ATTRIBUTES},
+ dates:[],
+ name:'workout1'
+ }),
+ "workout2":new workout({
+ attributes:{...DEFAULT_ATTRIBUTES},
+ dates:[],
+ name:'workout2'
+ })
+ };
+ const action = {
+ type:CHANGE_WORKOUT_NAME,
+ workout:"workout1",
+ name:"workout2"
+ };
+ assert.deepStrictEqual(workouts("haha",action),"haha");
+ });
+
+ it('should successfully change the name of an already existing workout',() => {
+ const stateA = {
+ "workout1":new workout({
+ attributes:{...DEFAULT_ATTRIBUTES},
+ dates:[],
+ name:'workout1'
+ }),
+ "workout2":new workout({
+ attributes:{...DEFAULT_ATTRIBUTES},
+ dates:[],
+ name:'workout2'
+ })
+ };
+ const action = {
+ type:CHANGE_WORKOUT_NAME,
+ workout:"workout1",
+ name:"workout3"
+ };
+
+ const stateB = {
+ "workout3":new workout({
+ attributes:{...DEFAULT_ATTRIBUTES},
+ dates:[],
+ name:'workout3'
+ }),
+ "workout2":new workout({
+ attributes:{...DEFAULT_ATTRIBUTES},
+ dates:[],
+ name:'workout2'
+ })
+ };
+
+ assert.deepStrictEqual(workouts(stateA,action),stateB);
+ });
+
+ });
+
+ describe(DELETE_WORKOUT,() => {
+
+ it('should not change the state when an invalid action is given',() => {
+ const action = {
+ type:DELETE_WORKOUT
+ };
+ assert.deepStrictEqual(workouts("haha",action),"haha");
+ });
+
+ it('should not change the state when action.name refers to a nonexistent workout',() => {
+ const stateA = {
+ "workout1":new workout({
+ attributes:{...DEFAULT_ATTRIBUTES},
+ dates:[today],
+ name:'workout1'
+ }),
+ "workout2":new workout({
+ attributes:{...DEFAULT_ATTRIBUTES},
+ dates:[],
+ name:'workout2'
+ })
+ };
+ const action = {
+ type:DELETE_WORKOUT,
+ name:"workout3"
+ };
+ assert.deepStrictEqual(workouts("haha",action),"haha");
+ });
+
+ it('should successfully delete a workout from an existent workout',() => {
+ const stateA = {
+ "workout1":new workout({
+ attributes:{...DEFAULT_ATTRIBUTES},
+ dates:[today],
+ name:'workout1'
+ }),
+ "workout2":new workout({
+ attributes:{...DEFAULT_ATTRIBUTES},
+ dates:[],
+ name:'workout2'
+ })
+ };
+ const action = {
+ type:DELETE_WORKOUT,
+ name:"workout1",
+ toDel:today
+ };
+
+ const stateB = {
+ "workout1":new workout({
+ attributes:{...DEFAULT_ATTRIBUTES},
+ dates:[],
+ name:'workout1'
+ }),
+ "workout2":new workout({
+ attributes:{...DEFAULT_ATTRIBUTES},
+ dates:[],
+ name:'workout2'
+ })
+ };
+ assert.deepStrictEqual(workouts(stateA,action),stateB);
+ });
+
+ });
+
+ describe(NEW_WORKOUT,() => {
+
+ it('should not change the state when "New Workout" workout already exists',() => {
+ const stateA = {
+ "New Workout":new workout({
+ attributes:{...DEFAULT_ATTRIBUTES},
+ dates:[],
+ name:'New Workout'
+ })
+ };
+
+ const action = {
+ type:NEW_WORKOUT
+ };
+ assert.deepStrictEqual(workouts(stateA,action),stateA);
+ });
+
+ it('should successfully add a new generic workout',() => {
+ const stateB = {
+ "New Workout":new workout({
+ attributes:{...DEFAULT_ATTRIBUTES},
+ dates:[],
+ name:'New Workout'
+ })
+ };
+
+ const action = {
+ type:NEW_WORKOUT
+ };
+ assert.deepStrictEqual(workouts({},action),stateB);
+ });
+
+ it('should successfully add a new workout',() => {
+ const stateB = {
+ "hello workout":new workout({
+ attributes:{...DEFAULT_ATTRIBUTES,lower:true},
+ dates:['2020-01-01'],
+ name:'hello workout'
+ })
+ };
+
+ const action = {
+ type:NEW_WORKOUT,
+ toAdd:new workout({
+ attributes:{...DEFAULT_ATTRIBUTES,lower:true},
+ dates:['2020-01-01'],
+ name:'hello workout'
+ })
+ };
+ assert.deepStrictEqual(workouts({},action),stateB);
+ });
+ });
+
+ describe(REMOVE_WORKOUT,() => {
+
+ it('should not change the state when an invalid action is given',() => {
+ const action = {
+ type:REMOVE_WORKOUT
+ };
+ assert.deepStrictEqual(workouts("haha",action),"haha");
+ });
+
+ it('should fail when action.toRemove refers to a nonexistent workout',() => {
+ const stateA = {
+ "workout1":new workout({
+ attributes:{...DEFAULT_ATTRIBUTES},
+ dates:[],
+ name:'workout1'
+ })
+ };
+ const action = {
+ type:REMOVE_WORKOUT,
+ toRemove:'workout2'
+ };
+ assert.deepStrictEqual(workouts(stateA,action),stateA);
+ });
+
+ it('should successfully remove a workout',() => {
+ const stateA = {
+ "workout1":new workout({
+ attributes:{...DEFAULT_ATTRIBUTES},
+ dates:[],
+ name:'workout1'
+ })
+ };
+ const action = {
+ type:REMOVE_WORKOUT,
+ toRemove:'workout1'
+ };
+ assert.deepStrictEqual(workouts(stateA,action),{});
+ });
+
+ });
+
+});
\ No newline at end of file
path.resolve('./src'),
path.resolve('./node_modules')
]
+ },
+ output: {
+ filename: 'workouts.js',
+ path: path.resolve(__dirname,'./')
}
};
\ No newline at end of file
const path = require('path');
-const merge = require('webpack-merge');
+const {merge} = require('webpack-merge');
const baseConfig = require('./webpack.config.js');
module.exports = merge(baseConfig,{
devtool: 'inline-source-map',
devServer: {
contentBase: './'
- },
- output: {
- filename: 'workouts.js',
- path: path.resolve(__dirname,'./')
}
});
\ No newline at end of file
--- /dev/null
+const path = require('path');
+const {merge} = require('webpack-merge');
+const baseConfig = require('./webpack.config.js');
+
+module.exports = merge(baseConfig,{
+ mode:'production'
+});
\ No newline at end of file
--- /dev/null
+{"P90X - Ab Ripper":{"attributes":{"lower":false,"core":true,"back":false,"upper":false,"cardio":false,"martial":false,"other":false},"dates":["2020-03-20","2019-11-29","2019-10-12","2019-09-08","2019-08-09","2019-06-18","2019-04-19","2019-03-15","2019-03-07","2019-02-14","2019-01-31","2018-11-14","2018-10-04","2018-07-23","2018-05-17","2018-03-07","2017-12-18","2017-09-25","2017-08-29","2017-06-27","2017-03-21","2017-02-14","2017-01-27","2016-11-11","2016-09-04","2016-04-29","2016-03-11","2016-02-05","2016-01-20","2015-12-04","2015-09-18","2015-08-14","2015-06-25","2015-05-04","2015-04-01","2015-03-19","2015-02-19","2015-01-22","2014-12-26","2014-11-25","2014-10-30","2014-06-28","2014-06-16","2014-05-25"],"name":"P90X - Ab Ripper"},"P90X - Back + Biceps":{"attributes":{"lower":false,"core":false,"back":true,"upper":true,"cardio":false,"martial":false,"other":false},"dates":[],"name":"P90X - Back + Biceps"},"P90X - Cardio X":{"attributes":{"lower":false,"core":false,"back":false,"upper":false,"cardio":true,"martial":true,"other":false},"dates":["2020-07-07","2020-06-14","2020-05-17","2020-03-10","2020-01-06","2019-10-25","2019-10-05","2019-09-07","2019-08-10","2019-06-29","2019-05-08","2019-04-28","2019-04-16","2019-03-21","2018-12-26","2018-12-14","2018-11-07","2018-10-10","2018-07-10","2018-06-05","2018-05-09","2018-04-24","2018-04-03","2018-01-27","2018-01-01","2017-11-14","2017-10-18","2017-09-17","2017-08-21","2017-07-03","2017-05-31","2017-04-27","2017-03-31","2017-03-13","2017-02-13","2017-01-30","2016-12-19","2016-11-28","2016-11-04","2016-10-21","2016-09-27","2016-09-09","2016-08-22","2016-07-29","2016-06-27","2016-06-04","2016-05-04","2016-04-16","2016-04-08","2016-03-21","2016-03-02","2016-02-22","2016-02-08","2016-02-03","2016-01-12","2015-12-28","2015-12-09","2015-11-05","2015-10-12","2015-08-26","2015-08-10","2015-07-20","2015-06-29","2015-06-11","2015-06-08","2015-05-28","2015-04-02","2015-03-09","2015-02-17","2015-01-26","2015-01-09","2014-12-26","2014-12-17","2014-12-16","2014-12-09","2014-11-21","2014-10-27","2014-10-13","2014-10-05","2014-09-13","2014-07-07","2014-06-23","2014-05-28","2014-05-14"],"name":"P90X - Cardio X"},"P90X - Chest + Back":{"attributes":{"lower":false,"core":false,"back":true,"upper":true,"cardio":false,"martial":false,"other":false},"dates":[],"name":"P90X - Chest + Back"},"P90X - Chest + Shoulders + Triceps":{"attributes":{"lower":false,"core":false,"back":false,"upper":false,"cardio":false,"martial":false,"other":false},"dates":["2017-06-17","2017-02-17","2016-09-01"],"name":"P90X - Chest + Shoulders + Triceps"},"P90X - Core Synergistics":{"attributes":{"lower":false,"core":true,"back":false,"upper":true,"cardio":false,"martial":false,"other":false},"dates":["2020-06-12","2020-04-02","2019-11-19","2019-07-21","2019-03-29","2018-10-15","2018-06-21","2018-04-26","2017-10-02","2017-05-12","2017-02-07","2016-10-25","2016-07-25","2016-04-27","2016-03-23","2016-02-18","2016-01-21","2015-12-15","2015-10-31","2015-08-25","2015-08-05","2015-06-30","2015-04-30","2015-03-23","2015-02-11","2015-01-23","2014-12-30","2014-11-19","2014-10-01","2014-07-31","2014-06-26"],"name":"P90X - Core Synergistics"},"P90X+ - Interval X+":{"attributes":{"lower":false,"core":false,"back":false,"upper":false,"cardio":true,"martial":false,"other":false},"dates":["2020-07-18","2020-06-11","2020-04-03","2019-10-03","2019-08-07","2019-04-18","2018-12-17","2018-10-17","2018-07-18","2018-06-09","2018-05-01","2018-02-14","2017-11-21","2017-10-12","2017-08-08","2017-06-06","2017-05-02","2017-03-20","2017-01-20","2016-11-30","2016-10-24","2016-09-22","2016-08-02","2016-06-09","2016-04-28","2016-03-24","2016-02-29","2016-01-18","2015-12-16","2015-10-28","2015-09-21","2015-08-07","2015-07-08","2015-06-03","2015-04-17","2015-03-16","2015-02-12","2015-01-16","2014-12-22","2014-11-13","2014-10-17","2014-10-02","2014-09-03","2014-07-28","2014-07-09","2014-06-25","2014-06-03","2014-05-12"],"name":"P90X+ - Interval X+"},"P90X+ - Kenpo Cardio X+":{"attributes":{"lower":false,"core":false,"back":false,"upper":false,"cardio":true,"martial":true,"other":false},"dates":["2020-06-25","2020-06-01","2020-04-24","2020-03-24","2019-12-01","2019-10-15","2019-08-27","2019-07-15","2019-06-08","2019-03-28","2019-02-15","2019-01-02","2018-11-29","2018-10-22","2018-08-07","2018-06-22","2018-05-18","2018-04-19","2018-01-16","2017-12-26","2017-12-05","2017-10-24","2017-09-20","2017-08-27","2017-07-21","2017-06-28","2017-05-18","2017-04-14","2017-02-22","2017-01-01","2016-12-08","2016-11-10","2016-10-13","2016-09-15","2016-08-30","2016-08-04","2016-07-03","2016-05-18","2016-04-25","2016-03-27","2016-03-09","2016-02-24","2016-01-27","2016-01-13","2015-12-21","2015-11-23","2015-10-23","2015-10-13","2015-09-11","2015-08-31","2015-08-12","2015-07-31","2015-07-06","2015-06-17","2015-06-01","2015-04-21","2015-03-24","2015-03-13","2015-02-10","2015-01-14","2014-11-18","2014-10-21","2014-09-18","2014-07-22","2014-06-10"],"name":"P90X+ - Kenpo Cardio X+"},"P90X - Kenpo X":{"attributes":{"lower":false,"core":false,"back":false,"upper":false,"cardio":true,"martial":true,"other":false},"dates":["2020-07-15","2020-06-17","2020-05-21","2020-04-07","2020-01-10","2019-11-13","2019-10-11","2019-09-17","2019-07-20","2019-06-19","2019-06-13","2019-03-12","2019-01-24","2018-11-17","2018-07-25","2018-06-15","2018-05-12","2018-01-04","2017-11-18","2017-09-30","2017-09-14","2017-08-02","2017-07-12","2017-06-11","2017-05-05","2017-04-06","2017-02-16","2017-01-26","2016-12-02","2016-11-01","2016-10-07","2016-09-13","2016-08-15","2016-07-14","2016-05-20","2016-05-02","2016-04-13","2016-03-17","2016-02-17","2016-01-22","2015-12-30","2015-12-08","2015-11-04","2015-10-16","2015-08-19","2015-07-27","2015-06-24","2015-05-29","2015-05-08","2015-04-06","2015-02-26","2015-01-21","2015-01-05","2014-12-02","2014-11-10","2014-10-07","2014-09-26","2014-08-28","2014-08-01","2014-07-18","2014-06-30","2014-06-17","2014-06-05","2014-05-22","2014-05-09"],"name":"P90X - Kenpo X"},"P90X - Legs + Back":{"attributes":{"lower":true,"core":false,"back":true,"upper":true,"cardio":false,"martial":false,"other":false},"dates":["2017-05-16","2017-03-21","2016-12-15","2016-09-11","2016-05-12"],"name":"P90X - Legs + Back"},"P90X - Plyometrics":{"attributes":{"lower":true,"core":false,"back":false,"upper":false,"cardio":true,"martial":false,"other":false},"dates":["2020-04-20","2019-08-14","2019-03-25","2018-09-10","2018-05-24","2017-12-01","2017-10-09","2017-07-10","2017-06-03","2017-04-18","2017-02-24","2017-01-03","2016-09-26","2016-09-02","2016-05-16","2016-04-18","2016-03-15","2016-02-10","2015-12-29","2015-11-02","2015-10-14","2015-09-15","2015-07-14","2015-06-22","2015-05-06","2015-03-26","2015-02-18","2015-01-29","2015-01-07","2014-11-20","2014-10-28","2014-10-15","2014-09-19","2014-08-05","2014-06-16"],"name":"P90X - Plyometrics"},"P90X - Shoulders + Arms":{"attributes":{"lower":false,"core":false,"back":false,"upper":true,"cardio":false,"martial":false,"other":false},"dates":["2019-03-13","2017-05-15"],"name":"P90X - Shoulders + Arms"},"P90X - X Stretch":{"attributes":{"lower":false,"core":false,"back":false,"upper":false,"cardio":false,"martial":false,"other":true},"dates":["2020-07-17","2020-07-11","2020-07-07","2020-07-02","2020-06-28","2020-06-16","2020-06-08","2020-05-31","2020-05-27","2020-05-18","2020-05-01","2020-04-16","2020-04-08","2020-04-04","2020-03-30","2020-03-25","2020-03-20","2020-02-08","2020-01-16","2020-01-06","2019-12-16","2019-12-15","2019-12-09","2019-12-07","2019-12-03","2019-11-27","2019-11-21","2019-11-19","2019-11-14","2019-11-09","2019-11-05","2019-10-10","2019-10-08","2019-10-04","2019-09-30","2019-09-26","2019-09-24","2019-09-16","2019-09-10","2019-09-05","2019-08-31","2019-08-29","2019-08-26","2019-08-19","2019-08-13","2019-08-07","2019-07-29","2019-07-26","2019-07-23","2019-07-17","2019-07-15","2019-07-11","2019-07-08","2019-06-26","2019-06-24","2019-06-20","2019-06-11","2019-06-09","2019-06-06","2019-06-04","2019-05-08","2019-05-06","2019-05-04","2019-04-29","2019-04-17","2019-04-16","2019-04-07","2019-04-03","2019-03-31","2019-03-29","2019-03-26","2019-03-24","2019-03-18","2019-03-12","2019-03-06","2019-02-14","2019-01-01","2018-12-07","2018-12-03","2018-11-29","2018-11-14","2018-11-06","2018-10-22","2018-10-15","2018-10-06","2018-10-03","2018-10-01","2018-09-27","2018-09-18","2018-09-13","2018-09-08","2018-09-04","2018-08-16","2018-08-09","2018-07-25","2018-07-17","2018-07-07","2018-06-27","2018-06-19","2018-06-13","2018-06-10","2018-06-04","2018-05-23","2018-05-15","2018-04-25","2018-04-18","2018-04-06","2018-03-20","2018-02-19","2018-02-17","2018-02-12","2018-02-07","2018-02-02","2018-01-31","2018-01-29","2018-01-23","2018-01-18","2018-01-12","2018-01-08","2018-01-03","2017-12-30","2017-12-27","2017-12-19","2017-12-12","2017-11-30","2017-11-27","2017-11-18","2017-11-14","2017-11-12","2017-10-30","2017-10-08","2017-10-03","2017-09-29","2017-09-27","2017-09-22","2017-09-20","2017-09-18","2017-09-14","2017-09-11","2017-09-07","2017-08-28","2017-08-25","2017-08-22","2017-08-15","2017-08-06","2017-07-22","2017-07-20","2017-07-19","2017-07-15","2017-07-12","2017-07-09","2017-07-06","2017-06-30","2017-06-22","2017-06-19","2017-06-15","2017-06-11","2017-06-07","2017-05-28","2017-05-26","2017-05-23","2017-05-16","2017-05-11","2017-05-09","2017-05-01","2017-04-27","2017-04-24","2017-04-21","2017-04-19","2017-04-17","2017-04-11","2017-04-07","2017-04-04","2017-03-29","2017-03-27","2017-03-22","2017-03-17","2017-02-27","2017-02-21","2017-02-09","2017-01-23","2017-01-17","2017-01-12","2017-01-04","2016-12-31","2016-12-13","2016-12-08","2016-12-05","2016-11-30","2016-11-23","2016-11-15","2016-11-10","2016-11-07","2016-11-02","2016-10-25","2016-10-19","2016-10-14","2016-10-12","2016-10-07","2016-10-05","2016-10-03","2016-09-29","2016-09-27","2016-09-22","2016-09-20","2016-09-15","2016-09-13","2016-09-07","2016-09-02","2016-08-30","2016-08-26","2016-08-23","2016-08-16","2016-08-05","2016-08-03","2016-08-01","2016-07-29","2016-07-27","2016-07-25","2016-07-19","2016-07-14","2016-07-11","2016-07-01","2016-06-29","2016-06-24","2016-06-22","2016-06-20","2016-06-17","2016-06-14","2016-06-10","2016-06-08","2016-06-06","2016-06-03","2016-06-01","2016-05-24","2016-05-23","2016-05-21","2016-05-18","2016-05-17","2016-05-16","2016-05-13","2016-05-12","2016-05-10","2016-05-09","2016-05-05","2016-05-04","2016-04-28","2016-04-26","2016-04-21","2016-04-14","2016-04-12","2016-04-11","2016-04-06","2016-03-31","2016-03-29","2016-03-23","2016-03-22","2016-03-21","2016-03-17","2016-03-16","2016-03-15","2016-03-14","2016-03-10","2016-03-03","2016-03-01","2016-02-28","2016-02-25","2016-02-23","2016-02-18","2016-02-11","2016-02-10","2016-02-02","2016-01-28","2016-01-26","2016-01-21","2016-01-20","2016-01-19","2016-01-14","2016-01-13","2016-01-12","2016-01-08","2016-01-05","2015-12-29","2015-12-23","2015-12-22","2015-12-17","2015-12-16","2015-12-15","2015-12-10","2015-12-08","2015-12-03","2015-12-02","2015-11-28","2015-11-23","2015-11-05","2015-11-04","2015-11-02","2015-10-21","2015-10-20","2015-10-19","2015-10-15","2015-10-14","2015-10-13","2015-10-06","2015-10-05","2015-10-02","2015-09-16","2015-09-10","2015-08-30","2015-08-27","2015-08-25","2015-08-20","2015-08-18","2015-08-14","2015-08-11","2015-08-09","2015-08-04","2015-07-30","2015-07-28","2015-07-25","2015-07-14","2015-07-12","2015-07-09","2015-07-07","2015-07-02","2015-06-30","2015-06-27","2015-06-23","2015-06-20","2015-06-18","2015-06-16","2015-06-12","2015-06-10","2015-06-04","2015-06-02","2015-05-31","2015-05-29","2015-05-20","2015-05-18","2015-05-15","2015-05-13","2015-05-11","2015-05-08","2015-05-06","2015-05-05","2015-05-01","2015-04-30","2015-04-29","2015-04-27","2015-04-24","2015-04-23","2015-04-22","2015-04-21","2015-04-20","2015-04-17","2015-04-16","2015-04-15","2015-04-14","2015-04-13","2015-04-10","2015-04-09","2015-04-08","2015-04-07","2015-04-06","2015-04-05","2015-04-03","2015-04-02","2015-04-01","2015-03-31","2015-03-28","2015-03-26","2015-03-25","2015-03-17","2015-03-16","2015-03-15","2015-03-12","2015-03-11","2015-03-05","2015-03-01","2015-02-18","2015-02-16","2015-02-12","2015-02-11","2015-02-05","2015-02-04","2015-01-29","2015-01-28","2015-01-26","2015-01-21","2015-01-20","2015-01-15","2015-01-13","2015-01-10","2015-01-08","2015-01-06","2014-12-31","2014-12-24","2014-12-22","2014-12-17","2014-12-15","2014-12-09","2014-12-04","2014-12-03","2014-12-01","2014-11-25","2014-11-21","2014-11-20","2014-11-19","2014-11-17","2014-11-15","2014-11-14","2014-11-12","2014-11-10","2014-11-06","2014-11-04","2014-11-01","2014-10-29","2014-10-27","2014-10-22","2014-10-21","2014-10-16","2014-10-14","2014-10-09","2014-10-07","2014-10-02","2014-09-29","2014-09-28","2014-09-24","2014-09-17","2014-09-16","2014-09-11","2014-09-06","2014-09-02","2014-08-28","2014-08-26","2014-08-19","2014-08-12","2014-08-08","2014-08-05","2014-07-31","2014-07-29","2014-07-25","2014-07-22","2014-07-17","2014-07-10","2014-07-08","2014-07-04","2014-07-01","2014-06-26","2014-06-24","2014-06-19","2014-06-17","2014-06-10","2014-06-05","2014-06-02","2014-05-29","2014-05-26","2014-05-22","2014-05-13","2014-05-08","2014-05-06"],"name":"P90X - X Stretch"},"P90X - Yoga X":{"attributes":{"lower":false,"core":false,"back":false,"upper":false,"cardio":false,"martial":false,"other":true},"dates":["2020-06-10","2020-04-14","2020-01-20","2019-11-23","2019-10-07","2019-09-24","2019-07-27","2019-04-22","2019-02-21","2018-10-18","2018-04-17","2018-03-16","2017-11-11","2017-09-09","2017-08-05","2017-05-30","2017-05-06","2017-03-28","2017-02-06","2016-12-27","2016-11-21","2016-11-09","2016-10-18","2016-08-18"],"name":"P90X - Yoga X"},"P90X2 - Base and Back":{"attributes":{"lower":true,"core":false,"back":true,"upper":true,"cardio":false,"martial":false,"other":false},"dates":["2019-11-22","2019-08-06","2019-02-01","2018-11-06","2018-01-30","2017-10-26","2017-07-24","2017-04-29","2017-02-09","2016-11-07","2016-07-26","2016-04-26","2016-03-22","2016-02-04","2015-11-03","2015-08-24","2015-07-09","2015-05-14","2015-03-31","2015-02-03","2015-01-01","2014-11-12","2014-10-16","2014-09-07","2014-08-11","2014-07-03","2014-06-12"],"name":"P90X2 - Base and Back"},"P90X2 - Chest Back Balance":{"attributes":{"lower":false,"core":true,"back":true,"upper":false,"cardio":false,"martial":false,"other":false},"dates":[],"name":"P90X2 - Chest Back Balance"},"P90X2 - P.A.P. Lower":{"attributes":{"lower":true,"core":false,"back":false,"upper":false,"cardio":true,"martial":false,"other":false},"dates":["2020-01-13","2019-07-17","2019-02-20","2018-07-12","2017-08-15","2017-05-28","2017-04-11","2017-01-17","2016-10-11","2016-06-13","2016-04-11","2016-03-01","2016-01-26","2015-12-02","2015-10-20","2015-09-17","2015-07-21","2015-06-16","2015-04-28","2015-03-12","2015-02-05","2015-01-08","2014-12-04","2014-11-03","2014-10-03","2014-08-29","2014-06-24"],"name":"P90X2 - P.A.P. Lower"},"P90X2 - P.A.P. Upper":{"attributes":{"lower":false,"core":false,"back":true,"upper":true,"cardio":false,"martial":false,"other":false},"dates":["2019-09-25","2019-04-23","2018-02-05","2017-09-11","2017-04-17","2017-01-12","2016-12-05","2016-10-12","2016-09-20","2016-05-09","2016-04-12","2016-03-03","2016-01-28","2015-12-10","2015-10-21","2015-08-13","2015-06-23","2015-04-15","2015-03-17","2015-01-28","2014-12-15","2014-10-29","2014-10-09","2014-07-24","2014-06-18","2014-05-07"],"name":"P90X2 - P.A.P. Upper"},"P90X2 - Plyocide":{"attributes":{"lower":true,"core":false,"back":true,"upper":false,"cardio":true,"martial":false,"other":false},"dates":["2020-06-15","2020-03-28","2019-12-10","2019-11-18","2019-08-26","2019-04-29","2019-03-08","2018-12-03","2018-09-20","2018-06-25","2018-05-13","2018-02-17","2017-11-28","2017-10-03","2017-09-08","2017-06-09","2017-05-11","2017-04-24","2017-03-23","2017-02-01","2016-12-20","2016-10-26","2016-09-30","2016-07-24","2016-05-06","2016-04-21","2016-03-29","2016-03-10","2016-02-15","2016-01-06","2015-12-17","2015-11-25","2015-10-15","2015-09-10","2015-08-27","2015-08-11","2015-07-29","2015-06-26","2015-06-04","2015-05-20","2015-04-14","2015-03-10","2015-02-25","2015-02-09","2015-01-12","2014-12-19","2014-11-24","2014-11-14","2014-10-22","2014-10-08","2014-09-30","2014-09-16","2014-08-26","2014-08-07","2014-07-30","2014-07-15","2014-06-20","2014-05-21","2014-05-08"],"name":"P90X2 - Plyocide"},"P90X2 - X2 Ab Ripper":{"attributes":{"lower":false,"core":true,"back":false,"upper":false,"cardio":false,"martial":false,"other":false},"dates":["2020-06-16","2020-05-02","2020-01-15","2019-10-23","2019-08-19","2019-07-12","2019-06-30","2019-05-05","2019-04-10","2018-10-13","2018-08-09","2018-07-07","2018-03-15","2017-11-07","2017-09-12","2017-07-18","2017-04-20","2016-12-06","2016-05-15","2016-04-22","2016-03-04","2016-01-29","2015-12-18","2015-11-05","2015-08-28","2015-07-10","2015-05-14","2015-05-09","2015-04-12","2015-03-29","2015-02-08","2015-01-05","2014-11-15","2014-10-20","2014-09-25","2014-09-14","2014-09-07","2014-08-11","2014-07-28","2014-06-23","2014-06-08","2014-05-20"],"name":"P90X2 - X2 Ab Ripper"},"P90X2 - X2 Balance and Power":{"attributes":{"lower":true,"core":true,"back":true,"upper":true,"cardio":false,"martial":false,"other":false},"dates":["2020-07-19","2020-05-22","2020-03-19","2019-09-16","2019-04-05","2018-11-18","2018-07-17","2018-05-31","2017-11-29","2017-09-21","2017-05-25","2017-02-21","2016-12-01","2016-08-31","2016-05-03","2016-03-25","2016-02-25","2016-01-19","2015-12-07","2015-10-27","2015-08-18","2015-07-07","2015-06-09","2015-04-08","2015-02-16","2015-01-19","2014-11-17","2014-10-06","2014-09-02","2014-07-17","2014-06-09"],"name":"P90X2 - X2 Balance and Power"},"P90X2 - X2 Core":{"attributes":{"lower":false,"core":true,"back":false,"upper":true,"cardio":false,"martial":false,"other":false},"dates":["2020-07-03","2020-04-09","2020-01-09","2019-11-14","2019-06-25","2019-03-23","2018-11-30","2018-09-19","2018-06-11","2018-02-19","2017-10-05","2017-06-08","2017-04-23","2017-01-31","2016-11-03","2016-07-31","2016-05-05","2016-03-30","2016-03-14","2016-02-02","2016-01-14","2015-12-22","2015-11-24","2015-10-19","2015-09-09","2015-08-20","2015-07-30","2015-07-02","2015-06-02","2015-05-12","2015-03-27","2015-03-02","2015-02-02","2015-01-13","2014-12-18","2014-11-29","2014-11-11","2014-11-05","2014-10-23","2014-10-15","2014-09-28","2014-09-15","2014-08-27","2014-08-17","2014-08-06","2014-07-21","2014-07-02","2014-06-13","2014-06-06","2014-05-23","2014-05-06"],"name":"P90X2 - X2 Core"},"P90X2 - X2 Recovery + Mobility/Foam Rolling Sessio":{"attributes":{"lower":false,"core":false,"back":false,"upper":false,"cardio":false,"martial":false,"other":true},"dates":["2020-07-15","2020-07-10","2020-07-06","2020-06-30","2020-06-26","2020-06-13","2020-06-01","2020-05-28","2020-05-14","2020-04-13","2020-04-02","2020-01-08","2019-12-11","2019-11-13","2019-08-28","2019-08-16","2019-06-12","2019-03-28","2019-03-05","2019-02-21","2018-11-01","2018-09-10","2018-07-28","2018-07-26","2018-02-20","2018-02-14","2018-02-04","2018-01-11","2018-01-07","2018-01-02","2017-12-18","2017-10-13","2017-10-07","2017-10-04","2017-09-13","2017-08-09","2017-08-01","2017-07-17","2017-07-14","2017-07-10","2017-07-05","2017-06-27","2017-06-16","2017-06-06","2017-06-01","2017-05-23","2017-05-17","2017-05-07","2017-04-28","2017-04-22","2017-04-16","2017-04-03","2017-03-18","2017-02-18","2017-02-04","2017-01-28","2016-12-12","2016-11-01","2016-10-17","2016-10-11","2016-09-23","2016-08-21","2016-06-16","2016-06-05"],"name":"P90X2 - X2 Recovery + Mobility/Foam Rolling Sessio"},"P90X2 - X2 Shoulders and Arms":{"attributes":{"lower":false,"core":false,"back":false,"upper":true,"cardio":false,"martial":false,"other":false},"dates":["2018-03-20"],"name":"P90X2 - X2 Shoulders and Arms"},"P90X2 - X2 Total Body":{"attributes":{"lower":false,"core":true,"back":true,"upper":true,"cardio":false,"martial":false,"other":false},"dates":["2019-12-02","2019-08-13","2019-03-20","2018-05-15","2017-11-15","2017-09-06","2017-07-13","2017-05-09","2017-01-19","2016-10-03","2016-07-05","2016-04-20","2016-03-16","2016-02-11","2016-01-04","2015-12-03","2015-09-16","2015-07-28","2015-06-18","2015-04-23","2015-03-11","2015-01-06","2014-12-01","2014-10-20","2014-09-17","2014-08-04","2014-07-08","2014-05-27"],"name":"P90X2 - X2 Total Body"},"P90X2 - X2 Yoga":{"attributes":{"lower":false,"core":false,"back":false,"upper":false,"cardio":false,"martial":false,"other":true},"dates":["2020-07-05","2020-05-24","2020-03-17","2020-01-14","2019-11-11","2019-10-01","2019-09-14","2019-08-11","2019-07-09","2019-06-16","2019-04-12","2019-04-02","2019-03-05","2019-01-18","2019-01-06","2018-11-20","2018-11-03","2018-09-12","2018-08-18","2018-06-01","2018-03-27","2018-01-15","2017-12-08","2017-11-08","2017-10-17","2017-09-23","2017-08-29","2017-07-18","2017-07-01","2017-05-21","2017-04-15","2017-04-08","2017-03-14","2017-01-18","2017-01-09","2016-12-14","2016-11-16","2016-10-31","2016-09-28","2016-09-08","2016-08-16","2016-08-07","2016-07-12","2016-06-20","2016-05-11","2016-04-19","2016-04-07","2016-03-28","2016-03-08","2016-02-23","2016-02-16","2016-02-01","2016-01-11","2016-01-05","2015-12-14","2015-11-30","2015-10-22","2015-09-08","2015-08-17","2015-08-06","2015-07-05","2015-05-30","2015-05-17","2015-04-19","2015-03-18","2015-03-03","2015-02-24","2015-02-06","2015-01-15","2014-12-29","2014-12-11","2014-12-10","2014-12-03","2014-11-22","2014-11-16","2014-11-11","2014-11-02","2014-10-24","2014-09-25","2014-08-24","2014-07-29","2014-06-29","2014-06-12","2014-05-30","2014-05-20"],"name":"P90X2 - X2 Yoga"},"Long Run + Roll":{"attributes":{"lower":true,"core":false,"back":true,"upper":false,"cardio":true,"martial":false,"other":false},"dates":["2020-07-11","2020-04-10","2020-03-15","2019-12-14","2019-11-28","2019-11-06","2019-10-23","2019-10-16","2019-09-29","2019-09-21","2019-09-02","2019-08-21","2019-07-28","2019-07-19","2019-07-13","2019-06-03","2019-04-24","2019-03-30","2019-02-23","2019-01-22","2019-01-17","2018-12-19","2018-12-12","2018-12-01","2018-11-22","2018-10-21","2018-10-14","2018-10-08","2018-09-27","2018-09-23","2018-09-11","2018-09-04","2018-08-01","2018-07-16","2018-07-08","2018-06-18","2018-02-20","2018-02-03","2018-01-13","2017-12-15","2017-11-24","2017-11-12","2017-11-06","2017-10-06","2017-09-12","2017-08-26","2017-08-18","2017-08-01","2017-07-22","2017-07-04","2017-06-26","2017-06-18","2016-07-04","2016-01-31","2015-07-04","2015-05-03","2015-04-11","2014-11-06","2014-07-12","2014-06-27","2014-06-04","2014-05-05"],"name":"Long Run + Roll"},"Short Run + Roll":{"attributes":{"lower":true,"core":false,"back":true,"upper":false,"cardio":true,"martial":false,"other":false},"dates":["2020-04-28","2019-07-11","2019-06-12","2019-03-22","2019-02-18","2019-02-13","2019-01-30","2019-01-14","2018-06-28","2015-07-01","2015-03-22","2015-01-30","2015-01-22","2014-12-25","2014-11-27","2014-10-25","2014-10-18","2014-10-11","2014-09-20","2014-08-19","2014-08-12","2014-08-10","2014-08-02","2014-07-24","2014-07-21","2014-07-19","2014-07-16","2014-07-07","2014-07-04","2014-06-30","2014-06-24","2014-06-22","2014-06-21","2014-06-18","2014-06-14","2014-06-13","2014-06-09","2014-06-07","2014-06-03","2014-05-31","2014-05-30","2014-05-29","2014-05-27","2014-05-24","2014-05-23","2014-05-12"],"name":"Short Run + Roll"},"Tai Chi":{"attributes":{"lower":false,"core":false,"back":false,"upper":false,"cardio":false,"martial":false,"other":true},"dates":["2020-07-20","2020-07-19","2020-07-18","2020-07-17","2020-07-15","2020-07-14","2020-07-13","2020-07-10","2020-07-09","2020-07-08","2020-07-07","2020-07-06","2020-07-04","2020-07-03","2020-07-02","2020-06-30","2020-06-29","2020-06-27","2020-06-25","2020-06-24","2020-06-23","2020-06-22","2020-06-17","2020-06-15","2020-06-14","2020-06-12","2020-06-11","2020-06-10","2020-06-09","2020-06-08","2020-06-07","2020-06-03","2020-06-01","2020-05-31","2020-05-30","2020-05-28","2020-05-27","2020-05-26","2020-05-24","2020-05-22","2020-05-21","2020-05-19","2020-05-18","2020-05-15","2020-05-14","2020-05-13","2020-05-12","2020-05-06","2020-05-05","2020-05-04","2020-05-01","2020-04-30","2020-04-29","2020-04-27","2020-04-24","2020-04-23","2020-04-22","2020-04-20","2020-04-17","2020-04-15","2020-04-14","2020-04-13","2020-04-12","2020-04-11","2020-04-10","2020-04-09","2020-04-08","2020-04-07","2020-04-04","2020-04-03","2020-04-02","2020-04-01","2020-03-31","2020-03-30","2020-03-29","2020-03-28","2020-03-27","2020-03-26","2020-03-25","2020-03-24","2020-03-23","2020-03-22","2020-03-21","2020-03-19","2020-03-18","2020-03-15","2020-03-14","2020-03-12","2020-02-19","2020-02-18","2020-02-17","2020-02-16","2020-02-14","2020-02-13","2020-02-03","2020-01-21","2020-01-20","2020-01-16","2020-01-15","2020-01-13","2020-01-11","2020-01-10","2020-01-09","2020-01-08","2020-01-07","2019-12-17","2019-12-14","2019-12-13","2019-12-12","2019-12-11","2019-12-10","2019-12-09","2019-12-08","2019-12-07","2019-12-06","2019-12-05","2019-12-04","2019-12-03","2019-12-02","2019-12-01","2019-11-30","2019-11-29","2019-11-28","2019-11-27","2019-11-26","2019-11-25","2019-11-24","2019-11-23","2019-11-22","2019-11-21","2019-11-20","2019-11-19","2019-11-18","2019-11-17","2019-11-15","2019-11-14","2019-11-13","2019-11-12","2019-11-11","2019-11-10","2019-11-09","2019-11-07","2019-11-06","2019-11-05","2019-10-28","2019-10-27","2019-10-25","2019-10-22","2019-10-21","2019-10-16","2019-10-15","2019-10-14","2019-10-13","2019-10-12","2019-10-10","2019-10-09","2019-10-08","2019-10-07","2019-10-06","2019-10-05","2019-10-04","2019-10-03","2019-10-02","2019-10-01","2019-09-29","2019-09-28","2019-09-27","2019-09-26","2019-09-25","2019-09-20","2019-09-18","2019-09-17","2019-09-16","2019-09-15","2019-09-14","2019-09-12","2019-09-11","2019-09-10","2019-09-08","2019-09-07","2019-09-06","2019-09-05","2019-09-01","2019-08-31","2019-08-26","2019-08-23","2019-08-22","2019-08-21","2019-08-20","2019-08-19","2019-08-18","2019-08-17","2019-08-16","2019-08-15","2019-08-14","2019-08-12","2019-08-10","2019-08-09","2019-08-07","2019-08-06","2019-08-05","2019-08-03","2019-07-31","2019-07-30","2019-07-29","2019-07-28","2019-07-27","2019-07-26","2019-07-25","2019-07-24","2019-07-23","2019-07-22","2019-07-21","2019-07-20","2019-07-19","2019-07-18","2019-07-17","2019-07-16","2019-07-15","2019-07-14","2019-07-13","2019-07-12","2019-07-11","2019-07-09","2019-07-08","2019-07-01","2019-06-30","2019-06-29","2019-06-27","2019-06-26","2019-06-25","2019-06-24","2019-06-23","2019-06-22","2019-06-21","2019-06-20","2019-06-19","2019-06-17","2019-06-14","2019-06-13","2019-06-10","2019-06-09","2019-06-07","2019-06-06","2019-06-05","2019-06-04","2019-06-03","2019-05-08","2019-05-07","2019-05-06","2019-05-05","2019-05-04","2019-05-03","2019-04-29","2019-04-28","2019-04-25","2019-04-23","2019-04-20","2019-04-19","2019-04-18","2019-04-17","2019-04-16","2019-04-15","2019-04-10","2019-04-09","2019-04-08","2019-04-07","2019-04-05","2019-04-04","2019-04-03","2019-04-01","2019-03-30","2019-03-29","2019-03-28","2019-03-27","2019-03-26","2019-03-25","2019-03-23","2019-03-21","2019-03-20","2019-03-19","2019-03-18","2019-03-15","2019-03-14","2019-03-13","2019-03-12","2019-03-11","2019-03-08","2019-03-07","2019-03-04","2019-03-01","2019-02-28","2019-02-27","2019-02-26","2019-02-25","2019-02-24","2019-02-20","2019-02-19","2019-02-17","2019-02-16","2019-02-15","2019-02-14","2019-02-13","2019-02-12","2019-01-25","2019-01-22","2019-01-21","2019-01-18","2019-01-02","2018-12-28","2018-12-21","2018-12-20","2018-12-19","2018-12-09","2018-12-07","2018-12-06","2018-12-05","2018-12-04","2018-12-03","2018-11-30","2018-11-29","2018-11-28","2018-11-27","2018-11-26","2018-11-25","2018-11-19","2018-11-18","2018-11-14","2018-11-13","2018-11-12","2018-11-09","2018-11-08","2018-11-07","2018-11-06","2018-11-05","2018-11-02","2018-11-01","2018-10-31","2018-10-30","2018-10-29","2018-10-26","2018-10-22","2018-10-17","2018-10-15","2018-10-12","2018-10-11","2018-10-10","2018-10-09","2018-10-08","2018-10-04","2018-09-27","2018-09-23","2018-09-20","2018-09-19","2018-09-18","2018-09-14","2018-09-13","2018-09-10","2018-09-05","2018-08-19","2018-08-09","2018-08-04","2018-08-03","2018-07-31","2018-07-30","2018-07-28","2018-07-27","2018-07-26","2018-07-25","2018-07-24","2018-07-23","2018-07-19","2018-07-18","2018-07-17","2018-07-16","2018-07-13","2018-07-12","2018-07-06","2018-06-29","2018-06-10","2018-05-22","2018-05-20","2018-05-16","2018-05-15","2018-05-13","2018-05-10","2018-05-09","2018-04-30","2018-04-27","2018-04-26","2018-04-21","2018-04-19","2018-04-16","2018-04-10","2018-04-06","2018-04-04","2018-04-03","2018-03-28","2018-03-27","2018-03-26","2018-03-20","2018-03-19","2018-03-16","2018-03-15","2018-03-14","2018-03-09","2018-02-20","2018-02-19","2018-02-18","2018-02-17","2018-02-16","2018-02-15","2018-02-14","2018-02-13","2018-02-09","2018-02-08","2018-02-07","2018-02-06","2018-02-05","2018-02-03","2018-02-02","2018-02-01","2018-01-31","2018-01-30","2018-01-29","2018-01-28","2018-01-27","2018-01-25","2018-01-24","2018-01-18","2018-01-17","2018-01-16","2018-01-14","2018-01-13","2018-01-12","2018-01-11","2018-01-10","2018-01-08","2018-01-07","2018-01-06","2018-01-05","2018-01-04","2018-01-03","2018-01-02","2018-01-01","2017-12-31","2017-12-30","2017-12-29","2017-12-28","2017-12-27","2017-12-21","2017-12-20","2017-12-19","2017-12-18","2017-12-17","2017-12-15","2017-12-14","2017-12-12","2017-12-11","2017-12-10","2017-12-09","2017-12-08","2017-12-06","2017-12-05","2017-12-04","2017-12-03","2017-12-01","2017-11-29","2017-11-28","2017-11-20","2017-11-18","2017-11-17","2017-11-16","2017-11-15","2017-11-14","2017-11-13","2017-11-12","2017-11-11","2017-11-10","2017-11-09","2017-11-08","2017-11-07","2017-11-06","2017-11-01","2017-10-31","2017-10-30","2017-10-26","2017-10-25","2017-10-24","2017-10-20","2017-10-19","2017-10-18","2017-10-17","2017-10-16","2017-10-14","2017-10-13","2017-10-12","2017-10-11","2017-10-10","2017-10-09","2017-10-08","2017-10-07","2017-10-05","2017-10-04","2017-10-03","2017-10-02","2017-09-30","2017-09-29","2017-09-28","2017-09-27","2017-09-26","2017-09-25","2017-09-23","2017-09-22","2017-09-21","2017-09-20","2017-09-19","2017-09-18","2017-09-17","2017-09-16","2017-09-15","2017-09-14","2017-09-13","2017-09-12","2017-09-11","2017-09-10","2017-09-09","2017-09-08","2017-09-07","2017-09-06","2017-09-05","2017-09-02","2017-08-31","2017-08-30","2017-08-29","2017-08-28","2017-08-27","2017-08-26","2017-08-25","2017-08-24","2017-08-23","2017-08-22","2017-08-21","2017-08-20","2017-08-18","2017-08-17","2017-08-16","2017-08-15","2017-08-14","2017-08-13","2017-08-09","2017-08-08","2017-08-07","2017-08-06","2017-08-05","2017-08-04","2017-08-03","2017-08-02","2017-08-01","2017-07-31","2017-07-24","2017-07-23","2017-07-22","2017-07-21","2017-07-20","2017-07-19","2017-07-18","2017-07-17","2017-07-16","2017-07-15","2017-07-14","2017-07-13","2017-07-12","2017-07-11","2017-07-10","2017-07-09","2017-07-07","2017-07-06","2017-07-05","2017-07-03","2017-07-02","2017-07-01","2017-06-30","2017-06-29","2017-06-28","2017-06-27","2017-06-25","2017-06-24","2017-06-23","2017-06-22","2017-06-21","2017-06-20","2017-06-19","2017-06-18","2017-06-17","2017-06-16","2017-06-15","2017-06-14","2017-06-12","2017-06-11","2017-06-10","2017-06-09","2017-06-08","2017-06-07","2017-06-06","2017-06-03","2017-06-02","2017-06-01","2017-05-31","2017-05-29","2017-05-28","2017-05-27","2017-05-26","2017-05-24","2017-05-22","2017-05-20","2017-05-19","2017-05-18","2017-05-17","2017-05-16","2017-05-15","2017-05-14","2017-05-13","2017-05-12","2017-05-11","2017-05-10","2017-05-09","2017-05-08","2017-05-05","2017-05-03","2017-05-02","2017-05-01","2017-04-30","2017-04-29","2017-04-28","2017-04-27","2017-04-26","2017-04-25","2017-04-24","2017-04-23","2017-04-22","2017-04-21","2017-04-20","2017-04-19","2017-04-18","2017-04-17","2017-04-16","2017-04-14","2017-04-13","2017-04-12","2017-04-11","2017-04-10","2017-04-09","2017-04-08","2017-04-07","2017-04-06","2017-04-05","2017-04-04","2017-04-03","2017-03-31","2017-03-30","2017-03-28","2017-03-27","2017-03-24","2017-03-23","2017-03-22","2017-03-21","2017-03-20","2017-03-19","2017-03-18","2017-03-17","2017-03-16","2017-03-15","2017-03-14","2017-02-23","2017-02-21","2017-02-20","2017-02-16","2017-02-14","2017-02-09","2017-02-07","2017-02-02","2017-02-01","2017-01-27","2017-01-19","2017-01-17","2017-01-16","2017-01-12","2017-01-10","2017-01-04","2016-12-20","2016-12-12","2016-12-08","2016-12-06","2016-11-29","2016-11-15","2016-11-14","2016-11-10","2016-11-08","2016-11-07","2016-11-04","2016-11-01","2016-10-26","2016-10-25","2016-10-24","2016-10-21","2016-10-20","2016-10-19","2016-10-17","2016-10-14","2016-10-13","2016-10-12","2016-10-11","2016-10-07","2016-10-06","2016-10-05","2016-10-04","2016-10-03","2016-09-30","2016-09-29","2016-09-27","2016-09-26","2016-09-23","2016-09-22","2016-09-21","2016-09-20","2016-09-14","2016-09-13","2016-09-12","2016-09-09","2016-09-06","2016-09-05","2016-09-01","2016-08-30","2016-08-29","2016-08-26","2016-08-25","2016-08-23","2016-08-15","2016-08-05","2016-08-04","2016-08-03","2016-08-02","2016-08-01","2016-07-29","2016-07-28","2016-07-27","2016-07-26","2016-07-25","2016-07-24","2016-07-22","2016-07-21","2016-07-20","2016-07-19","2016-07-18","2016-07-15","2016-07-14","2016-07-13","2016-07-11","2016-07-05","2016-07-01","2016-06-30","2016-06-29","2016-06-28","2016-06-24","2016-06-23","2016-06-22","2016-06-21","2016-06-17","2016-06-16","2016-06-15","2016-06-14","2016-06-13","2016-06-10","2016-06-09","2016-06-08","2016-06-07","2016-06-03","2016-06-02","2016-05-31","2016-05-24","2016-05-22","2016-05-21","2016-05-17","2016-05-16","2016-05-15","2016-05-13","2016-05-12","2016-05-10","2016-05-09","2016-05-08","2016-05-05","2016-05-04","2016-05-03","2016-04-29","2016-04-22","2016-04-15","2016-04-13","2016-04-09","2016-03-25","2016-03-18","2016-03-16","2016-03-11","2016-03-07","2016-03-04","2016-02-26","2016-02-19","2016-02-12","2016-02-10","2016-02-05","2016-01-29","2016-01-20","2016-01-15","2016-01-14","2016-01-06","2016-01-02","2015-12-28","2015-12-18","2015-12-17","2015-12-16","2015-12-15","2015-12-11","2015-12-07","2015-12-04","2015-11-29","2015-11-05","2015-11-04","2015-11-02","2015-10-31","2015-10-24","2015-10-21","2015-10-20","2015-10-19","2015-10-15","2015-10-14","2015-10-13","2015-10-12","2015-10-06","2015-10-05","2015-10-02","2015-10-01","2015-09-30","2015-09-27","2015-09-25","2015-09-18","2015-09-15","2015-09-14","2015-09-10","2015-09-09","2015-08-28","2015-08-21","2015-08-13","2015-08-11","2015-08-05","2015-07-30","2015-07-24","2015-07-22","2015-07-13","2015-07-07","2015-07-03","2015-06-30","2015-06-23","2015-06-04","2015-05-29","2015-05-20","2015-05-18","2015-05-12","2015-05-06","2015-05-04","2015-04-30","2015-04-26","2015-04-17","2015-04-15","2015-04-14","2015-04-10","2015-04-08","2015-04-02","2015-03-31","2015-03-18","2015-03-10","2015-02-25","2015-02-03","2015-01-29","2015-01-28","2015-01-21","2015-01-19","2015-01-15","2015-01-08","2014-12-27","2014-12-23","2014-12-16","2014-12-15","2014-12-09","2014-12-04","2014-12-01","2014-11-30","2014-11-25","2014-11-24","2014-11-20","2014-11-19","2014-11-18","2014-11-17","2014-11-14","2014-11-13","2014-11-12","2014-11-11","2014-11-10","2014-11-05","2014-11-03","2014-10-31","2014-10-30","2014-10-29","2014-10-28","2014-10-27","2014-10-24","2014-10-23","2014-10-22","2014-10-21","2014-10-20","2014-10-17","2014-10-16","2014-10-15","2014-10-14","2014-10-09","2014-10-08","2014-10-06","2014-10-03","2014-10-02","2014-10-01","2014-09-30","2014-09-25","2014-09-24","2014-09-22","2014-09-19","2014-09-18","2014-09-17","2014-09-16","2014-09-09","2014-09-08","2014-09-05","2014-09-03","2014-08-29","2014-08-27","2014-08-26","2014-08-11","2014-08-07","2014-08-06","2014-08-04","2014-08-03","2014-08-01","2014-07-30","2014-07-26","2014-07-23","2014-07-20","2014-07-18","2014-07-16","2014-07-15","2014-07-09","2014-07-07","2014-07-03","2014-07-02","2014-06-27","2014-06-25","2014-06-23","2014-06-22","2014-06-20","2014-06-18","2014-06-11","2014-06-04","2014-05-28","2014-05-21","2014-05-14","2014-05-07"],"name":"Tai Chi"},"Brazilian Jiu Jitsu":{"attributes":{"lower":false,"core":false,"back":false,"upper":false,"cardio":false,"martial":true,"other":false},"dates":["2019-01-02","2018-12-21","2018-12-07","2018-12-05","2018-11-30","2018-11-19","2018-11-15","2018-11-14","2018-11-09","2018-11-07","2018-10-27","2018-10-18","2018-10-17","2018-10-12","2018-10-10","2018-10-05","2018-09-25","2018-09-21","2018-09-17","2018-08-10","2018-08-03","2018-07-27","2018-07-20","2018-07-06","2018-02-13","2017-12-08","2017-12-01","2017-11-28","2017-11-20","2017-11-09","2017-11-07","2017-11-01","2017-10-24","2017-10-20","2017-10-18","2017-10-12","2017-10-11","2017-10-06","2017-09-06","2017-08-23","2017-08-21","2017-08-18","2017-08-14","2017-08-07","2017-08-04","2017-06-16","2017-06-14","2017-06-09","2017-06-07","2017-06-02","2017-05-26","2017-05-24","2017-05-22","2017-05-19","2017-05-17","2017-05-12","2017-05-10","2017-05-05","2017-05-01","2017-04-12","2017-04-10","2017-04-07","2017-04-05","2017-04-01","2017-03-31","2017-03-22","2017-03-20","2017-03-17","2017-03-15","2017-02-24","2017-02-22","2017-02-17","2017-02-08","2017-02-03","2017-01-27","2017-01-25","2017-01-18","2017-01-16","2016-12-22","2016-12-19","2016-12-16","2016-12-13","2016-11-28","2016-11-11","2016-10-24","2016-05-02","2016-04-29","2016-04-25","2016-04-22","2016-04-18","2016-04-15","2016-03-28","2016-03-11","2016-03-09","2016-03-04","2016-03-02","2016-02-29","2016-02-24","2016-02-22","2016-02-19","2016-02-17","2016-02-12","2016-02-05","2016-02-03","2016-02-01","2016-01-30","2016-01-25","2016-01-18","2016-01-15","2016-01-04","2015-12-30","2015-12-21","2015-12-18","2015-12-11","2015-12-09","2015-12-04","2015-11-30","2015-09-21","2015-09-18","2015-09-14","2015-08-31","2015-08-28","2015-08-26","2015-08-19","2015-08-17","2015-08-14","2015-08-12","2015-08-10","2015-08-07","2015-08-05","2015-07-29","2015-07-27","2015-07-20","2015-07-13","2015-07-10","2015-07-08","2015-07-06","2015-07-03","2015-07-01","2015-06-29","2015-06-25","2015-06-22","2015-06-19","2015-06-17","2015-06-15","2015-06-08","2015-06-05","2015-06-03","2015-06-01","2015-05-28","2015-05-21","2015-05-19","2015-05-15","2015-05-13","2015-05-11","2015-05-07","2015-05-05","2015-05-01","2015-04-29","2015-04-27","2015-04-24","2015-04-22","2015-04-20","2015-04-16","2015-04-13","2015-04-09","2015-04-07","2015-04-03","2015-04-01","2015-03-30","2015-03-25","2015-03-19","2015-02-19","2015-02-17","2015-02-13","2015-02-10","2015-02-06","2015-02-04","2015-01-30","2015-01-27","2015-01-22","2015-01-20","2015-01-16","2015-01-14","2015-01-09","2015-01-07","2014-12-23","2014-12-16","2014-12-02","2014-11-24","2014-11-18","2014-11-13","2014-11-05","2014-10-30","2014-10-23","2014-09-29","2014-09-17","2014-09-10","2014-09-04"],"name":"Brazilian Jiu Jitsu"},"r/BodyWeightFitness Recommended Routine":{"attributes":{"lower":false,"core":true,"back":false,"upper":true,"cardio":false,"martial":false,"other":false},"dates":["2018-07-09","2018-05-25","2018-03-28","2018-02-08","2017-11-09","2017-10-08","2017-09-03","2017-08-17","2017-07-09","2017-05-27","2017-04-26","2017-04-09","2017-03-27","2017-02-28","2017-02-03","2016-12-21","2016-11-17","2016-10-27","2016-09-29","2016-08-28","2016-08-06","2016-07-17","2016-06-24","2016-05-31","2016-04-30","2016-04-14","2016-03-31","2016-03-18","2016-03-05"],"name":"r/BodyWeightFitness Recommended Routine"},"RushFit - Fight Conditioning":{"attributes":{"lower":true,"core":true,"back":false,"upper":false,"cardio":true,"martial":true,"other":false},"dates":["2020-07-04","2020-06-08","2020-05-04","2020-03-30","2020-03-13","2019-12-06","2019-11-21","2019-10-21","2019-09-27","2019-08-17","2019-07-24","2019-06-23","2019-04-08","2019-03-04","2019-01-19","2018-12-20","2018-11-26","2018-10-30","2018-09-14","2018-06-27","2018-05-30","2018-04-28","2018-04-05","2018-02-06","2018-01-09","2017-12-07","2017-10-31","2017-09-27","2017-09-05","2017-07-26","2017-07-07","2017-05-24","2017-04-21","2017-03-16","2017-02-02","2017-01-11","2016-12-13","2016-11-15","2016-10-19","2016-10-04","2016-09-19","2016-09-06","2016-08-25","2016-07-27","2016-07-21","2016-07-11","2016-07-06","2016-06-29","2016-06-23","2016-06-17","2016-06-14","2016-06-07","2016-06-03","2016-05-30","2016-05-24","2016-05-13","2016-05-10","2016-05-07"],"name":"RushFit - Fight Conditioning"},"RushFit - Strength and Endurance":{"attributes":{"lower":true,"core":true,"back":true,"upper":true,"cardio":false,"martial":false,"other":false},"dates":["2020-06-09","2020-05-19","2020-03-23","2019-11-09","2019-07-31","2019-04-17","2019-03-11","2018-12-18","2018-10-31","2018-08-14","2018-06-30","2018-05-21","2018-04-16","2018-02-13","2017-11-20","2017-10-11","2017-09-15","2017-08-07","2017-06-15","2017-05-19","2017-04-12","2017-02-23","2017-01-25","2016-12-12","2016-11-14","2016-10-17","2016-09-23","2016-09-05","2016-08-05","2016-07-20","2016-06-15","2016-06-10","2016-05-25","2016-05-17"],"name":"RushFit - Strength and Endurance"},"RushFit - Full Body Strength and Conditioning":{"attributes":{"lower":true,"core":true,"back":true,"upper":true,"cardio":false,"martial":false,"other":false},"dates":["2020-07-06","2020-05-31","2020-04-06","2019-12-11","2019-09-04","2019-06-11","2019-03-26","2018-12-30","2018-09-21","2018-07-26","2018-06-19","2018-04-30","2017-12-11","2017-11-01","2017-09-29","2017-08-30","2017-07-19","2017-06-05","2017-05-03","2017-04-05","2017-02-10","2017-01-02","2016-11-22","2016-10-20","2016-10-05","2016-09-14","2016-08-26","2016-07-28","2016-07-13","2016-06-30","2016-06-06","2016-05-19"],"name":"RushFit - Full Body Strength and Conditioning"},"RushFit - Explosive Powertraining":{"attributes":{"lower":true,"core":true,"back":true,"upper":true,"cardio":false,"martial":false,"other":false},"dates":["2020-07-02","2020-04-27","2019-11-26","2019-09-10","2019-07-01","2019-04-09","2019-03-06","2018-12-04","2018-10-16","2018-09-07","2018-07-13","2018-06-12","2018-05-10","2018-01-10","2017-11-17","2017-10-23","2017-09-18","2017-08-14","2017-07-06","2017-05-22","2017-04-20","2017-03-15","2017-02-15","2017-01-16","2016-11-29","2016-11-02","2016-10-14","2016-09-21","2016-08-29","2016-08-01","2016-07-15","2016-07-01","2016-06-21","2016-06-08","2016-05-23"],"name":"RushFit - Explosive Powertraining"},"Rushfit - Balance and Agility":{"attributes":{"lower":true,"core":false,"back":false,"upper":true,"cardio":true,"martial":false,"other":false},"dates":["2020-07-09","2020-05-28","2019-12-17","2019-09-26","2019-06-20","2019-03-14","2019-01-07","2018-11-21","2018-10-12","2018-09-25","2018-07-05","2018-05-16","2018-04-13","2018-01-31","2017-12-29","2017-11-05","2017-09-26","2017-08-23","2017-07-16","2017-06-14","2017-05-08","2017-04-03","2017-02-08","2017-01-24","2016-12-07","2016-11-18","2016-10-28","2016-10-06","2016-09-07","2016-08-23","2016-07-18","2016-06-28","2016-06-01"],"name":"Rushfit - Balance and Agility"},"Rushfit - Stretching for Flexibility":{"attributes":{"lower":false,"core":false,"back":false,"upper":false,"cardio":false,"martial":false,"other":true},"dates":["2020-07-18","2020-07-13","2020-07-08","2020-07-03","2020-06-29","2020-06-25","2020-06-17","2020-06-09","2020-05-29","2020-05-26","2020-05-20","2020-04-30","2020-04-05","2020-03-29","2020-02-13","2020-02-03","2020-01-14","2020-01-11","2019-12-17","2019-12-08","2019-12-04","2019-12-02","2019-11-30","2019-11-24","2019-11-20","2019-11-15","2019-11-12","2019-11-06","2019-10-22","2019-10-12","2019-10-09","2019-10-07","2019-10-02","2019-09-27","2019-09-25","2019-09-15","2019-09-01","2019-08-30","2019-08-20","2019-08-15","2019-08-12","2019-08-08","2019-08-06","2019-07-30","2019-07-25","2019-07-18","2019-07-16","2019-07-14","2019-07-10","2019-07-01","2019-06-27","2019-06-25","2019-06-21","2019-06-19","2019-06-17","2019-06-10","2019-06-07","2019-06-05","2019-05-07","2019-05-05","2019-05-03","2019-04-23","2019-04-19","2019-04-15","2019-04-08","2019-04-04","2019-04-01","2019-03-11","2019-03-07","2019-03-04","2019-01-01","2018-12-09","2018-12-05","2018-12-01","2018-11-28","2018-11-25","2018-11-19","2018-11-15","2018-11-13","2018-11-07","2018-11-01","2018-10-29","2018-10-17","2018-10-13","2018-10-04","2018-09-19","2018-09-14","2018-09-11","2018-09-07","2018-09-05","2018-08-03","2018-07-30","2018-07-23","2018-07-18","2018-07-13","2018-07-06","2018-06-29","2018-06-21","2018-05-19","2018-04-10","2018-04-04","2018-03-26","2018-03-15","2018-02-20","2018-02-18","2018-02-15","2018-02-08","2018-02-03","2018-02-01","2018-01-30","2018-01-27","2018-01-16","2018-01-13","2018-01-10","2018-01-04","2018-01-01","2017-12-31","2017-12-28","2017-12-21","2017-12-17","2017-12-10","2017-12-06","2017-11-29","2017-11-15","2017-11-13","2017-11-10","2017-10-25","2017-10-10","2017-10-05","2017-10-02","2017-09-28","2017-09-26","2017-09-21","2017-09-19","2017-09-15","2017-09-12","2017-09-10","2017-09-02","2017-08-27","2017-08-24","2017-08-17","2017-08-08","2017-08-02","2017-07-31","2017-07-24","2017-07-21","2017-07-16","2017-07-13","2017-07-07","2017-07-03","2017-06-28","2017-06-24","2017-06-20","2017-06-17","2017-06-12","2017-06-08","2017-05-31","2017-05-27","2017-05-25","2017-05-18","2017-05-15","2017-05-10","2017-05-02","2017-04-29","2017-04-26","2017-04-23","2017-04-20","2017-04-18","2017-04-13","2017-04-10","2017-04-06","2017-03-30","2017-03-28","2017-03-23","2017-03-21","2017-03-13","2017-02-28","2017-02-23","2017-02-16","2017-02-07","2017-02-02","2017-01-31","2017-01-26","2017-01-19","2017-01-14","2017-01-05","2017-01-03","2016-12-28","2016-12-20","2016-12-09","2016-12-06","2016-12-01","2016-11-29","2016-11-26","2016-11-19","2016-11-14","2016-11-08","2016-11-04","2016-10-27","2016-10-20","2016-10-15","2016-10-13","2016-10-10","2016-10-06","2016-10-04","2016-10-01","2016-09-28","2016-09-26","2016-09-21","2016-09-14","2016-09-12","2016-09-09","2016-09-06","2016-09-01","2016-08-29","2016-08-25","2016-08-22","2016-08-19","2016-08-15","2016-08-04","2016-08-02","2016-07-30","2016-07-28","2016-07-26","2016-07-20","2016-07-18","2016-07-16","2016-07-15","2016-07-13","2016-07-05","2016-06-30","2016-06-28","2016-06-23","2016-06-21","2016-06-15","2016-06-13","2016-06-09","2016-06-07","2016-06-02","2016-05-31"],"name":"Rushfit - Stretching for Flexibility"},"Rushfit - Abdominal Strength and Core Conditioning":{"attributes":{"lower":false,"core":true,"back":false,"upper":false,"cardio":false,"martial":false,"other":false},"dates":["2020-07-14","2020-04-12","2020-01-21","2019-12-07","2019-11-07","2019-09-18","2019-07-29","2019-06-07","2019-03-01","2019-01-21","2018-12-07","2018-10-26","2018-09-05","2018-08-04","2018-06-06","2018-04-20","2018-01-03","2017-10-20","2017-08-24","2017-08-04","2017-06-02","2017-04-30","2017-03-30","2017-02-20","2017-01-10","2016-12-16","2016-11-08","2016-10-10","2016-09-12","2016-08-24","2016-08-03","2016-07-19","2016-06-22","2016-06-16","2016-06-02"],"name":"Rushfit - Abdominal Strength and Core Conditioning"},"Wim Hof Method Week 1":{"attributes":{"lower":false,"core":false,"back":false,"upper":false,"cardio":false,"martial":false,"other":true},"dates":["2020-07-11","2020-07-04","2020-06-13","2020-05-29","2020-05-24","2020-04-13","2020-04-08","2020-04-01","2019-11-13","2019-03-25","2019-03-24","2019-01-21","2018-12-27","2018-11-19","2018-11-15","2018-11-13","2018-11-12","2018-10-17","2018-10-12","2018-10-11","2018-10-10","2018-10-08","2018-09-27","2018-09-25","2018-09-24","2018-09-23","2018-09-22","2018-09-21","2018-09-20","2018-09-19","2018-09-18","2018-09-17","2018-09-16","2018-09-14","2018-09-13","2018-09-11","2018-09-10","2018-09-09","2018-07-26","2018-07-11","2018-06-12","2018-06-11","2018-02-07","2018-01-18","2018-01-12","2018-01-11","2018-01-07","2018-01-04","2018-01-03","2018-01-02","2018-01-01","2017-12-30","2017-12-29","2017-12-28","2017-12-20","2017-12-13","2017-11-07","2017-10-26","2017-10-25","2017-10-14","2017-10-12","2017-09-30","2017-09-27","2017-09-23","2017-09-18","2017-04-30","2016-11-19","2016-11-15","2016-11-14","2016-11-13","2016-11-12","2016-11-11","2016-11-09"],"name":"Wim Hof Method Week 1"},"Wim Hof Method Week 2":{"attributes":{"lower":false,"core":false,"back":false,"upper":false,"cardio":false,"martial":false,"other":true},"dates":["2017-10-16","2017-10-10","2017-09-28","2017-09-22","2017-09-19","2016-12-01","2016-11-30","2016-11-26","2016-11-23","2016-11-22","2016-11-21"],"name":"Wim Hof Method Week 2"},"Wim Hof Method Week 3":{"attributes":{"lower":false,"core":false,"back":false,"upper":false,"cardio":false,"martial":false,"other":true},"dates":["2017-09-25","2016-12-07","2016-12-06","2016-12-05","2016-12-03"],"name":"Wim Hof Method Week 3"},"Simple and Sinister":{"attributes":{"lower":true,"core":true,"back":true,"upper":true,"cardio":false,"martial":false,"other":false},"dates":["2020-07-17","2020-06-24","2020-05-27","2020-05-15","2020-04-17","2020-03-31","2020-03-11","2020-02-17","2020-01-05","2019-12-13","2019-12-05","2019-11-25","2019-11-17","2019-10-22","2019-10-13","2019-10-06","2019-10-02","2019-09-20","2019-09-06","2019-08-22","2019-08-15","2019-08-05","2019-07-23","2019-07-16","2019-07-08","2019-07-02","2019-06-28","2019-06-22","2019-06-17","2019-06-14","2019-06-04","2019-04-25","2019-04-13","2019-04-06","2019-03-09","2019-02-24","2019-02-11","2019-01-29","2019-01-23","2019-01-15","2019-01-01","2018-12-27","2018-12-16","2018-12-05","2018-11-27","2018-11-19","2018-11-12","2018-11-05","2018-10-29","2018-10-24","2018-10-18","2018-10-09","2018-10-05","2018-09-17","2018-09-13","2018-09-09","2018-08-12","2018-08-06","2018-07-24","2018-07-19","2018-07-11","2018-07-03","2018-06-26","2018-06-14","2018-06-04","2018-05-29","2018-05-17","2018-05-08","2018-04-27","2018-04-24","2018-02-16","2018-02-09","2018-02-02","2018-01-28","2018-01-25","2018-01-24","2018-01-18","2018-01-12","2018-01-07","2017-12-31","2017-12-28","2017-12-25","2017-10-14"],"name":"Simple and Sinister"},"Vapassana Meditation":{"attributes":{"lower":false,"core":false,"back":false,"upper":false,"cardio":false,"martial":false,"other":true},"dates":["2018-10-10","2018-10-09","2018-07-30","2018-07-19","2018-07-18","2018-05-13","2018-05-10","2018-02-19"],"name":"Vapassana Meditation"},"Pull Ups + Burpees":{"attributes":{"lower":true,"core":false,"back":true,"upper":true,"cardio":false,"martial":false,"other":false},"dates":["2020-06-16","2020-05-08","2020-04-22","2020-01-07","2019-12-09","2019-11-29","2019-11-05","2019-10-10","2019-09-08","2019-08-19","2019-07-12","2019-06-24","2019-06-06","2019-04-01","2019-03-19","2019-02-26","2019-02-13","2019-01-16","2018-12-21","2018-11-28","2018-11-13","2018-10-25","2018-10-11","2018-09-29","2018-09-24","2018-09-11","2018-09-04","2018-08-08","2018-08-01","2018-07-22","2018-06-28","2018-06-07","2018-04-21"],"name":"Pull Ups + Burpees"},"Heavy Bag":{"attributes":{"lower":false,"core":false,"back":false,"upper":false,"cardio":true,"martial":true,"other":false},"dates":["2020-04-29","2020-04-19","2019-10-18","2019-08-03","2019-04-20","2018-12-28","2018-12-09","2018-09-06","2018-08-19","2018-07-29"],"name":"Heavy Bag"},"Interval Run":{"attributes":{"lower":true,"core":false,"back":true,"upper":false,"cardio":true,"martial":false,"other":false},"dates":["2020-06-28","2020-05-23","2019-12-03","2019-09-11","2019-05-07","2019-03-27","2018-12-06","2018-11-01","2018-09-18","2018-08-13"],"name":"Interval Run"},"Exercise Bike":{"attributes":{"lower":true,"core":false,"back":false,"upper":false,"cardio":true,"martial":false,"other":false},"dates":["2020-01-07","2019-12-09","2019-11-10","2019-10-27","2019-10-14","2019-08-18","2019-07-12","2019-06-27","2019-05-03","2019-04-15","2019-04-10","2019-04-03","2019-03-15","2019-03-07","2019-02-14","2019-01-20"],"name":"Exercise Bike"},"Generic - Legs + Back":{"attributes":{"lower":true,"core":false,"back":true,"upper":true,"cardio":false,"martial":false,"other":false},"dates":["2020-01-11","2019-11-15","2019-03-22","2019-02-28","2019-02-25","2019-01-22","2019-01-20"],"name":"Generic - Legs + Back"},"Generic - Chest + Back + Tris":{"attributes":{"lower":false,"core":false,"back":true,"upper":true,"cardio":false,"martial":false,"other":false},"dates":["2019-12-19","2019-10-27","2019-07-25","2019-02-19","2019-01-28"],"name":"Generic - Chest + Back + Tris"},"Elliptical":{"attributes":{"lower":true,"core":true,"back":false,"upper":false,"cardio":true,"martial":false,"other":false},"dates":["2019-10-27","2019-08-09","2019-04-04","2019-02-16","2019-01-31"],"name":"Elliptical"},"Swimming":{"attributes":{"lower":false,"core":false,"back":false,"upper":false,"cardio":false,"martial":false,"other":false},"dates":["2019-11-10","2019-04-26","2019-04-11"],"name":"Swimming"},"Stairs":{"attributes":{"lower":true,"core":false,"back":false,"upper":false,"cardio":true,"martial":false,"other":false},"dates":["2019-11-15","2019-10-09"],"name":"Stairs"},"P90X3 - Dynamix":{"attributes":{"lower":false,"core":false,"back":false,"upper":false,"cardio":false,"martial":false,"other":true},"dates":["2020-07-20","2020-07-14","2020-07-09","2020-07-04","2020-07-01","2020-06-27","2020-06-12","2020-05-25","2020-04-23","2020-04-06","2020-03-31","2020-02-19","2020-02-12","2020-02-03","2020-02-01"],"name":"P90X3 - Dynamix"},"P90X3 - Eccentric Lower":{"attributes":{"lower":true,"core":false,"back":false,"upper":false,"cardio":false,"martial":false,"other":false},"dates":["2020-07-08","2020-05-14","2020-03-14","2020-02-12","2020-02-02"],"name":"P90X3 - Eccentric Lower"},"Hard Corps - Core 1":{"attributes":{"lower":false,"core":true,"back":false,"upper":false,"cardio":false,"martial":false,"other":false},"dates":["2020-06-29","2020-04-23","2020-02-03"],"name":"Hard Corps - Core 1"},"P90X3 - Pilates X":{"attributes":{"lower":false,"core":true,"back":false,"upper":false,"cardio":false,"martial":false,"other":false},"dates":["2020-07-10","2020-06-03","2020-03-27","2020-02-08"],"name":"P90X3 - Pilates X"},"P90X3 - Isometrix":{"attributes":{"lower":false,"core":true,"back":false,"upper":true,"cardio":false,"martial":false,"other":true},"dates":["2020-06-27","2020-05-13","2020-02-09"],"name":"P90X3 - Isometrix"},"P90X3 - MMX":{"attributes":{"lower":false,"core":false,"back":false,"upper":false,"cardio":true,"martial":true,"other":false},"dates":["2020-06-30","2020-06-06","2020-05-12","2020-04-15","2020-03-18","2020-02-16","2020-02-10"],"name":"P90X3 - MMX"},"Hard Corps - Resistance 3":{"attributes":{"lower":true,"core":true,"back":false,"upper":true,"cardio":false,"martial":false,"other":false},"dates":["2020-06-29","2020-06-07","2020-05-18","2020-02-13"],"name":"Hard Corps - Resistance 3"},"P90X3 - Eccentric Upper":{"attributes":{"lower":false,"core":false,"back":true,"upper":true,"cardio":false,"martial":false,"other":false},"dates":["2020-02-14"],"name":"P90X3 - Eccentric Upper"},"P90X3 - Yoga":{"attributes":{"lower":false,"core":false,"back":false,"upper":false,"cardio":false,"martial":false,"other":true},"dates":["2020-07-12","2020-06-02","2020-05-11","2020-04-11","2020-03-12","2020-02-18"],"name":"P90X3 - Yoga"},"Hard Corps - Core 2":{"attributes":{"lower":false,"core":true,"back":false,"upper":false,"cardio":false,"martial":false,"other":false},"dates":["2020-05-18","2020-02-19"],"name":"Hard Corps - Core 2"},"P90X3 - The Warrior":{"attributes":{"lower":true,"core":true,"back":false,"upper":true,"cardio":true,"martial":true,"other":false},"dates":["2020-07-20","2020-06-23","2020-05-26","2020-03-21"],"name":"P90X3 - The Warrior"},"P90X3 - CVX":{"attributes":{"lower":true,"core":false,"back":false,"upper":true,"cardio":true,"martial":false,"other":false},"dates":["2020-07-13","2020-05-30","2020-03-26"],"name":"P90X3 - CVX"},"P90X3 - Accelerator":{"attributes":{"lower":true,"core":false,"back":false,"upper":false,"cardio":true,"martial":false,"other":false},"dates":["2020-04-04"],"name":"P90X3 - Accelerator"},"Hard Corps - Resistance 1":{"attributes":{"lower":true,"core":true,"back":true,"upper":true,"cardio":false,"martial":false,"other":false},"dates":["2020-06-22","2020-05-01"],"name":"Hard Corps - Resistance 1"},"P90X3 - Agility":{"attributes":{"lower":true,"core":false,"back":false,"upper":false,"cardio":true,"martial":false,"other":false},"dates":["2020-04-30"],"name":"P90X3 - Agility"},"Hard Corps - Resistance 2":{"attributes":{"lower":false,"core":true,"back":true,"upper":true,"cardio":false,"martial":false,"other":false},"dates":["2020-05-05"],"name":"Hard Corps - Resistance 2"},"Hard Corps - Cardio 1":{"attributes":{"lower":false,"core":false,"back":false,"upper":false,"cardio":true,"martial":false,"other":false},"dates":["2020-05-03"],"name":"Hard Corps - Cardio 1"},"Hard Corps - Cardio 2":{"attributes":{"lower":false,"core":false,"back":false,"upper":false,"cardio":false,"martial":false,"other":false},"dates":["2020-05-06"],"name":"Hard Corps - Cardio 2"}}
\ No newline at end of file
--- /dev/null
+{"P90X - Ab Ripper":{"attributes":{"lower":false,"core":true,"back":false,"upper":false,"cardio":false,"martial":false,"other":false},"dates":["2020-03-20","2019-11-29","2019-10-12","2019-09-08","2019-08-09","2019-06-18","2019-04-19","2019-03-15","2019-03-07","2019-02-14","2019-01-31","2018-11-14","2018-10-04","2018-07-23","2018-05-17","2018-03-07","2017-12-18","2017-09-25","2017-08-29","2017-06-27","2017-03-21","2017-02-14","2017-01-27","2016-11-11","2016-09-04","2016-04-29","2016-03-11","2016-02-05","2016-01-20","2015-12-04","2015-09-18","2015-08-14","2015-06-25","2015-05-04","2015-04-01","2015-03-19","2015-02-19","2015-01-22","2014-12-26","2014-11-25","2014-10-30","2014-06-28","2014-06-16","2014-05-25"],"name":"P90X - Ab Ripper"},"P90X - Back + Biceps":{"attributes":{"lower":false,"core":false,"back":true,"upper":true,"cardio":false,"martial":false,"other":false},"dates":[],"name":"P90X - Back + Biceps"},"P90X - Cardio X":{"attributes":{"lower":false,"core":false,"back":false,"upper":false,"cardio":true,"martial":true,"other":false},"dates":["2020-07-07","2020-06-14","2020-05-17","2020-03-10","2020-01-06","2019-10-25","2019-10-05","2019-09-07","2019-08-10","2019-06-29","2019-05-08","2019-04-28","2019-04-16","2019-03-21","2018-12-26","2018-12-14","2018-11-07","2018-10-10","2018-07-10","2018-06-05","2018-05-09","2018-04-24","2018-04-03","2018-01-27","2018-01-01","2017-11-14","2017-10-18","2017-09-17","2017-08-21","2017-07-03","2017-05-31","2017-04-27","2017-03-31","2017-03-13","2017-02-13","2017-01-30","2016-12-19","2016-11-28","2016-11-04","2016-10-21","2016-09-27","2016-09-09","2016-08-22","2016-07-29","2016-06-27","2016-06-04","2016-05-04","2016-04-16","2016-04-08","2016-03-21","2016-03-02","2016-02-22","2016-02-08","2016-02-03","2016-01-12","2015-12-28","2015-12-09","2015-11-05","2015-10-12","2015-08-26","2015-08-10","2015-07-20","2015-06-29","2015-06-11","2015-06-08","2015-05-28","2015-04-02","2015-03-09","2015-02-17","2015-01-26","2015-01-09","2014-12-26","2014-12-17","2014-12-16","2014-12-09","2014-11-21","2014-10-27","2014-10-13","2014-10-05","2014-09-13","2014-07-07","2014-06-23","2014-05-28","2014-05-14"],"name":"P90X - Cardio X"},"P90X - Chest + Back":{"attributes":{"lower":false,"core":false,"back":true,"upper":true,"cardio":false,"martial":false,"other":false},"dates":[],"name":"P90X - Chest + Back"},"P90X - Chest + Shoulders + Triceps":{"attributes":{"lower":false,"core":false,"back":false,"upper":false,"cardio":false,"martial":false,"other":false},"dates":["2017-06-17","2017-02-17","2016-09-01"],"name":"P90X - Chest + Shoulders + Triceps"},"P90X - Core Synergistics":{"attributes":{"lower":false,"core":true,"back":false,"upper":true,"cardio":false,"martial":false,"other":false},"dates":["2020-06-12","2020-04-02","2019-11-19","2019-07-21","2019-03-29","2018-10-15","2018-06-21","2018-04-26","2017-10-02","2017-05-12","2017-02-07","2016-10-25","2016-07-25","2016-04-27","2016-03-23","2016-02-18","2016-01-21","2015-12-15","2015-10-31","2015-08-25","2015-08-05","2015-06-30","2015-04-30","2015-03-23","2015-02-11","2015-01-23","2014-12-30","2014-11-19","2014-10-01","2014-07-31","2014-06-26"],"name":"P90X - Core Synergistics"},"P90X+ - Interval X+":{"attributes":{"lower":false,"core":false,"back":false,"upper":false,"cardio":true,"martial":false,"other":false},"dates":["2020-07-18","2020-06-11","2020-04-03","2019-10-03","2019-08-07","2019-04-18","2018-12-17","2018-10-17","2018-07-18","2018-06-09","2018-05-01","2018-02-14","2017-11-21","2017-10-12","2017-08-08","2017-06-06","2017-05-02","2017-03-20","2017-01-20","2016-11-30","2016-10-24","2016-09-22","2016-08-02","2016-06-09","2016-04-28","2016-03-24","2016-02-29","2016-01-18","2015-12-16","2015-10-28","2015-09-21","2015-08-07","2015-07-08","2015-06-03","2015-04-17","2015-03-16","2015-02-12","2015-01-16","2014-12-22","2014-11-13","2014-10-17","2014-10-02","2014-09-03","2014-07-28","2014-07-09","2014-06-25","2014-06-03","2014-05-12"],"name":"P90X+ - Interval X+"},"P90X+ - Kenpo Cardio X+":{"attributes":{"lower":false,"core":false,"back":false,"upper":false,"cardio":true,"martial":true,"other":false},"dates":["2020-06-25","2020-06-01","2020-04-24","2020-03-24","2019-12-01","2019-10-15","2019-08-27","2019-07-15","2019-06-08","2019-03-28","2019-02-15","2019-01-02","2018-11-29","2018-10-22","2018-08-07","2018-06-22","2018-05-18","2018-04-19","2018-01-16","2017-12-26","2017-12-05","2017-10-24","2017-09-20","2017-08-27","2017-07-21","2017-06-28","2017-05-18","2017-04-14","2017-02-22","2017-01-01","2016-12-08","2016-11-10","2016-10-13","2016-09-15","2016-08-30","2016-08-04","2016-07-03","2016-05-18","2016-04-25","2016-03-27","2016-03-09","2016-02-24","2016-01-27","2016-01-13","2015-12-21","2015-11-23","2015-10-23","2015-10-13","2015-09-11","2015-08-31","2015-08-12","2015-07-31","2015-07-06","2015-06-17","2015-06-01","2015-04-21","2015-03-24","2015-03-13","2015-02-10","2015-01-14","2014-11-18","2014-10-21","2014-09-18","2014-07-22","2014-06-10"],"name":"P90X+ - Kenpo Cardio X+"},"P90X - Kenpo X":{"attributes":{"lower":false,"core":false,"back":false,"upper":false,"cardio":true,"martial":true,"other":false},"dates":["2020-07-15","2020-06-17","2020-05-21","2020-04-07","2020-01-10","2019-11-13","2019-10-11","2019-09-17","2019-07-20","2019-06-19","2019-06-13","2019-03-12","2019-01-24","2018-11-17","2018-07-25","2018-06-15","2018-05-12","2018-01-04","2017-11-18","2017-09-30","2017-09-14","2017-08-02","2017-07-12","2017-06-11","2017-05-05","2017-04-06","2017-02-16","2017-01-26","2016-12-02","2016-11-01","2016-10-07","2016-09-13","2016-08-15","2016-07-14","2016-05-20","2016-05-02","2016-04-13","2016-03-17","2016-02-17","2016-01-22","2015-12-30","2015-12-08","2015-11-04","2015-10-16","2015-08-19","2015-07-27","2015-06-24","2015-05-29","2015-05-08","2015-04-06","2015-02-26","2015-01-21","2015-01-05","2014-12-02","2014-11-10","2014-10-07","2014-09-26","2014-08-28","2014-08-01","2014-07-18","2014-06-30","2014-06-17","2014-06-05","2014-05-22","2014-05-09"],"name":"P90X - Kenpo X"},"P90X - Legs + Back":{"attributes":{"lower":true,"core":false,"back":true,"upper":true,"cardio":false,"martial":false,"other":false},"dates":["2017-05-16","2017-03-21","2016-12-15","2016-09-11","2016-05-12"],"name":"P90X - Legs + Back"},"P90X - Plyometrics":{"attributes":{"lower":true,"core":false,"back":false,"upper":false,"cardio":true,"martial":false,"other":false},"dates":["2020-04-20","2019-08-14","2019-03-25","2018-09-10","2018-05-24","2017-12-01","2017-10-09","2017-07-10","2017-06-03","2017-04-18","2017-02-24","2017-01-03","2016-09-26","2016-09-02","2016-05-16","2016-04-18","2016-03-15","2016-02-10","2015-12-29","2015-11-02","2015-10-14","2015-09-15","2015-07-14","2015-06-22","2015-05-06","2015-03-26","2015-02-18","2015-01-29","2015-01-07","2014-11-20","2014-10-28","2014-10-15","2014-09-19","2014-08-05","2014-06-16"],"name":"P90X - Plyometrics"},"P90X - Shoulders + Arms":{"attributes":{"lower":false,"core":false,"back":false,"upper":true,"cardio":false,"martial":false,"other":false},"dates":["2019-03-13","2017-05-15"],"name":"P90X - Shoulders + Arms"},"P90X - X Stretch":{"attributes":{"lower":false,"core":false,"back":false,"upper":false,"cardio":false,"martial":false,"other":true},"dates":["2020-07-17","2020-07-11","2020-07-07","2020-07-02","2020-06-28","2020-06-16","2020-06-08","2020-05-31","2020-05-27","2020-05-18","2020-05-01","2020-04-16","2020-04-08","2020-04-04","2020-03-30","2020-03-25","2020-03-20","2020-02-08","2020-01-16","2020-01-06","2019-12-16","2019-12-15","2019-12-09","2019-12-07","2019-12-03","2019-11-27","2019-11-21","2019-11-19","2019-11-14","2019-11-09","2019-11-05","2019-10-10","2019-10-08","2019-10-04","2019-09-30","2019-09-26","2019-09-24","2019-09-16","2019-09-10","2019-09-05","2019-08-31","2019-08-29","2019-08-26","2019-08-19","2019-08-13","2019-08-07","2019-07-29","2019-07-26","2019-07-23","2019-07-17","2019-07-15","2019-07-11","2019-07-08","2019-06-26","2019-06-24","2019-06-20","2019-06-11","2019-06-09","2019-06-06","2019-06-04","2019-05-08","2019-05-06","2019-05-04","2019-04-29","2019-04-17","2019-04-16","2019-04-07","2019-04-03","2019-03-31","2019-03-29","2019-03-26","2019-03-24","2019-03-18","2019-03-12","2019-03-06","2019-02-14","2019-01-01","2018-12-07","2018-12-03","2018-11-29","2018-11-14","2018-11-06","2018-10-22","2018-10-15","2018-10-06","2018-10-03","2018-10-01","2018-09-27","2018-09-18","2018-09-13","2018-09-08","2018-09-04","2018-08-16","2018-08-09","2018-07-25","2018-07-17","2018-07-07","2018-06-27","2018-06-19","2018-06-13","2018-06-10","2018-06-04","2018-05-23","2018-05-15","2018-04-25","2018-04-18","2018-04-06","2018-03-20","2018-02-19","2018-02-17","2018-02-12","2018-02-07","2018-02-02","2018-01-31","2018-01-29","2018-01-23","2018-01-18","2018-01-12","2018-01-08","2018-01-03","2017-12-30","2017-12-27","2017-12-19","2017-12-12","2017-11-30","2017-11-27","2017-11-18","2017-11-14","2017-11-12","2017-10-30","2017-10-08","2017-10-03","2017-09-29","2017-09-27","2017-09-22","2017-09-20","2017-09-18","2017-09-14","2017-09-11","2017-09-07","2017-08-28","2017-08-25","2017-08-22","2017-08-15","2017-08-06","2017-07-22","2017-07-20","2017-07-19","2017-07-15","2017-07-12","2017-07-09","2017-07-06","2017-06-30","2017-06-22","2017-06-19","2017-06-15","2017-06-11","2017-06-07","2017-05-28","2017-05-26","2017-05-23","2017-05-16","2017-05-11","2017-05-09","2017-05-01","2017-04-27","2017-04-24","2017-04-21","2017-04-19","2017-04-17","2017-04-11","2017-04-07","2017-04-04","2017-03-29","2017-03-27","2017-03-22","2017-03-17","2017-02-27","2017-02-21","2017-02-09","2017-01-23","2017-01-17","2017-01-12","2017-01-04","2016-12-31","2016-12-13","2016-12-08","2016-12-05","2016-11-30","2016-11-23","2016-11-15","2016-11-10","2016-11-07","2016-11-02","2016-10-25","2016-10-19","2016-10-14","2016-10-12","2016-10-07","2016-10-05","2016-10-03","2016-09-29","2016-09-27","2016-09-22","2016-09-20","2016-09-15","2016-09-13","2016-09-07","2016-09-02","2016-08-30","2016-08-26","2016-08-23","2016-08-16","2016-08-05","2016-08-03","2016-08-01","2016-07-29","2016-07-27","2016-07-25","2016-07-19","2016-07-14","2016-07-11","2016-07-01","2016-06-29","2016-06-24","2016-06-22","2016-06-20","2016-06-17","2016-06-14","2016-06-10","2016-06-08","2016-06-06","2016-06-03","2016-06-01","2016-05-24","2016-05-23","2016-05-21","2016-05-18","2016-05-17","2016-05-16","2016-05-13","2016-05-12","2016-05-10","2016-05-09","2016-05-05","2016-05-04","2016-04-28","2016-04-26","2016-04-21","2016-04-14","2016-04-12","2016-04-11","2016-04-06","2016-03-31","2016-03-29","2016-03-23","2016-03-22","2016-03-21","2016-03-17","2016-03-16","2016-03-15","2016-03-14","2016-03-10","2016-03-03","2016-03-01","2016-02-28","2016-02-25","2016-02-23","2016-02-18","2016-02-11","2016-02-10","2016-02-02","2016-01-28","2016-01-26","2016-01-21","2016-01-20","2016-01-19","2016-01-14","2016-01-13","2016-01-12","2016-01-08","2016-01-05","2015-12-29","2015-12-23","2015-12-22","2015-12-17","2015-12-16","2015-12-15","2015-12-10","2015-12-08","2015-12-03","2015-12-02","2015-11-28","2015-11-23","2015-11-05","2015-11-04","2015-11-02","2015-10-21","2015-10-20","2015-10-19","2015-10-15","2015-10-14","2015-10-13","2015-10-06","2015-10-05","2015-10-02","2015-09-16","2015-09-10","2015-08-30","2015-08-27","2015-08-25","2015-08-20","2015-08-18","2015-08-14","2015-08-11","2015-08-09","2015-08-04","2015-07-30","2015-07-28","2015-07-25","2015-07-14","2015-07-12","2015-07-09","2015-07-07","2015-07-02","2015-06-30","2015-06-27","2015-06-23","2015-06-20","2015-06-18","2015-06-16","2015-06-12","2015-06-10","2015-06-04","2015-06-02","2015-05-31","2015-05-29","2015-05-20","2015-05-18","2015-05-15","2015-05-13","2015-05-11","2015-05-08","2015-05-06","2015-05-05","2015-05-01","2015-04-30","2015-04-29","2015-04-27","2015-04-24","2015-04-23","2015-04-22","2015-04-21","2015-04-20","2015-04-17","2015-04-16","2015-04-15","2015-04-14","2015-04-13","2015-04-10","2015-04-09","2015-04-08","2015-04-07","2015-04-06","2015-04-05","2015-04-03","2015-04-02","2015-04-01","2015-03-31","2015-03-28","2015-03-26","2015-03-25","2015-03-17","2015-03-16","2015-03-15","2015-03-12","2015-03-11","2015-03-05","2015-03-01","2015-02-18","2015-02-16","2015-02-12","2015-02-11","2015-02-05","2015-02-04","2015-01-29","2015-01-28","2015-01-26","2015-01-21","2015-01-20","2015-01-15","2015-01-13","2015-01-10","2015-01-08","2015-01-06","2014-12-31","2014-12-24","2014-12-22","2014-12-17","2014-12-15","2014-12-09","2014-12-04","2014-12-03","2014-12-01","2014-11-25","2014-11-21","2014-11-20","2014-11-19","2014-11-17","2014-11-15","2014-11-14","2014-11-12","2014-11-10","2014-11-06","2014-11-04","2014-11-01","2014-10-29","2014-10-27","2014-10-22","2014-10-21","2014-10-16","2014-10-14","2014-10-09","2014-10-07","2014-10-02","2014-09-29","2014-09-28","2014-09-24","2014-09-17","2014-09-16","2014-09-11","2014-09-06","2014-09-02","2014-08-28","2014-08-26","2014-08-19","2014-08-12","2014-08-08","2014-08-05","2014-07-31","2014-07-29","2014-07-25","2014-07-22","2014-07-17","2014-07-10","2014-07-08","2014-07-04","2014-07-01","2014-06-26","2014-06-24","2014-06-19","2014-06-17","2014-06-10","2014-06-05","2014-06-02","2014-05-29","2014-05-26","2014-05-22","2014-05-13","2014-05-08","2014-05-06"],"name":"P90X - X Stretch"},"P90X - Yoga X":{"attributes":{"lower":false,"core":false,"back":false,"upper":false,"cardio":false,"martial":false,"other":true},"dates":["2020-06-10","2020-04-14","2020-01-20","2019-11-23","2019-10-07","2019-09-24","2019-07-27","2019-04-22","2019-02-21","2018-10-18","2018-04-17","2018-03-16","2017-11-11","2017-09-09","2017-08-05","2017-05-30","2017-05-06","2017-03-28","2017-02-06","2016-12-27","2016-11-21","2016-11-09","2016-10-18","2016-08-18"],"name":"P90X - Yoga X"},"P90X2 - Base and Back":{"attributes":{"lower":true,"core":false,"back":true,"upper":true,"cardio":false,"martial":false,"other":false},"dates":["2019-11-22","2019-08-06","2019-02-01","2018-11-06","2018-01-30","2017-10-26","2017-07-24","2017-04-29","2017-02-09","2016-11-07","2016-07-26","2016-04-26","2016-03-22","2016-02-04","2015-11-03","2015-08-24","2015-07-09","2015-05-14","2015-03-31","2015-02-03","2015-01-01","2014-11-12","2014-10-16","2014-09-07","2014-08-11","2014-07-03","2014-06-12"],"name":"P90X2 - Base and Back"},"P90X2 - Chest Back Balance":{"attributes":{"lower":false,"core":true,"back":true,"upper":false,"cardio":false,"martial":false,"other":false},"dates":[],"name":"P90X2 - Chest Back Balance"},"P90X2 - P.A.P. Lower":{"attributes":{"lower":true,"core":false,"back":false,"upper":false,"cardio":true,"martial":false,"other":false},"dates":["2020-01-13","2019-07-17","2019-02-20","2018-07-12","2017-08-15","2017-05-28","2017-04-11","2017-01-17","2016-10-11","2016-06-13","2016-04-11","2016-03-01","2016-01-26","2015-12-02","2015-10-20","2015-09-17","2015-07-21","2015-06-16","2015-04-28","2015-03-12","2015-02-05","2015-01-08","2014-12-04","2014-11-03","2014-10-03","2014-08-29","2014-06-24"],"name":"P90X2 - P.A.P. Lower"},"P90X2 - P.A.P. Upper":{"attributes":{"lower":false,"core":false,"back":true,"upper":true,"cardio":false,"martial":false,"other":false},"dates":["2019-09-25","2019-04-23","2018-02-05","2017-09-11","2017-04-17","2017-01-12","2016-12-05","2016-10-12","2016-09-20","2016-05-09","2016-04-12","2016-03-03","2016-01-28","2015-12-10","2015-10-21","2015-08-13","2015-06-23","2015-04-15","2015-03-17","2015-01-28","2014-12-15","2014-10-29","2014-10-09","2014-07-24","2014-06-18","2014-05-07"],"name":"P90X2 - P.A.P. Upper"},"P90X2 - Plyocide":{"attributes":{"lower":true,"core":false,"back":true,"upper":false,"cardio":true,"martial":false,"other":false},"dates":["2020-06-15","2020-03-28","2019-12-10","2019-11-18","2019-08-26","2019-04-29","2019-03-08","2018-12-03","2018-09-20","2018-06-25","2018-05-13","2018-02-17","2017-11-28","2017-10-03","2017-09-08","2017-06-09","2017-05-11","2017-04-24","2017-03-23","2017-02-01","2016-12-20","2016-10-26","2016-09-30","2016-07-24","2016-05-06","2016-04-21","2016-03-29","2016-03-10","2016-02-15","2016-01-06","2015-12-17","2015-11-25","2015-10-15","2015-09-10","2015-08-27","2015-08-11","2015-07-29","2015-06-26","2015-06-04","2015-05-20","2015-04-14","2015-03-10","2015-02-25","2015-02-09","2015-01-12","2014-12-19","2014-11-24","2014-11-14","2014-10-22","2014-10-08","2014-09-30","2014-09-16","2014-08-26","2014-08-07","2014-07-30","2014-07-15","2014-06-20","2014-05-21","2014-05-08"],"name":"P90X2 - Plyocide"},"P90X2 - X2 Ab Ripper":{"attributes":{"lower":false,"core":true,"back":false,"upper":false,"cardio":false,"martial":false,"other":false},"dates":["2020-06-16","2020-05-02","2020-01-15","2019-10-23","2019-08-19","2019-07-12","2019-06-30","2019-05-05","2019-04-10","2018-10-13","2018-08-09","2018-07-07","2018-03-15","2017-11-07","2017-09-12","2017-07-18","2017-04-20","2016-12-06","2016-05-15","2016-04-22","2016-03-04","2016-01-29","2015-12-18","2015-11-05","2015-08-28","2015-07-10","2015-05-14","2015-05-09","2015-04-12","2015-03-29","2015-02-08","2015-01-05","2014-11-15","2014-10-20","2014-09-25","2014-09-14","2014-09-07","2014-08-11","2014-07-28","2014-06-23","2014-06-08","2014-05-20"],"name":"P90X2 - X2 Ab Ripper"},"P90X2 - X2 Balance and Power":{"attributes":{"lower":true,"core":true,"back":true,"upper":true,"cardio":false,"martial":false,"other":false},"dates":["2020-07-19","2020-05-22","2020-03-19","2019-09-16","2019-04-05","2018-11-18","2018-07-17","2018-05-31","2017-11-29","2017-09-21","2017-05-25","2017-02-21","2016-12-01","2016-08-31","2016-05-03","2016-03-25","2016-02-25","2016-01-19","2015-12-07","2015-10-27","2015-08-18","2015-07-07","2015-06-09","2015-04-08","2015-02-16","2015-01-19","2014-11-17","2014-10-06","2014-09-02","2014-07-17","2014-06-09"],"name":"P90X2 - X2 Balance and Power"},"P90X2 - X2 Core":{"attributes":{"lower":false,"core":true,"back":false,"upper":true,"cardio":false,"martial":false,"other":false},"dates":["2020-07-03","2020-04-09","2020-01-09","2019-11-14","2019-06-25","2019-03-23","2018-11-30","2018-09-19","2018-06-11","2018-02-19","2017-10-05","2017-06-08","2017-04-23","2017-01-31","2016-11-03","2016-07-31","2016-05-05","2016-03-30","2016-03-14","2016-02-02","2016-01-14","2015-12-22","2015-11-24","2015-10-19","2015-09-09","2015-08-20","2015-07-30","2015-07-02","2015-06-02","2015-05-12","2015-03-27","2015-03-02","2015-02-02","2015-01-13","2014-12-18","2014-11-29","2014-11-11","2014-11-05","2014-10-23","2014-10-15","2014-09-28","2014-09-15","2014-08-27","2014-08-17","2014-08-06","2014-07-21","2014-07-02","2014-06-13","2014-06-06","2014-05-23","2014-05-06"],"name":"P90X2 - X2 Core"},"P90X2 - X2 Recovery + Mobility/Foam Rolling Sessio":{"attributes":{"lower":false,"core":false,"back":false,"upper":false,"cardio":false,"martial":false,"other":true},"dates":["2020-07-15","2020-07-10","2020-07-06","2020-06-30","2020-06-26","2020-06-13","2020-06-01","2020-05-28","2020-05-14","2020-04-13","2020-04-02","2020-01-08","2019-12-11","2019-11-13","2019-08-28","2019-08-16","2019-06-12","2019-03-28","2019-03-05","2019-02-21","2018-11-01","2018-09-10","2018-07-28","2018-07-26","2018-02-20","2018-02-14","2018-02-04","2018-01-11","2018-01-07","2018-01-02","2017-12-18","2017-10-13","2017-10-07","2017-10-04","2017-09-13","2017-08-09","2017-08-01","2017-07-17","2017-07-14","2017-07-10","2017-07-05","2017-06-27","2017-06-16","2017-06-06","2017-06-01","2017-05-23","2017-05-17","2017-05-07","2017-04-28","2017-04-22","2017-04-16","2017-04-03","2017-03-18","2017-02-18","2017-02-04","2017-01-28","2016-12-12","2016-11-01","2016-10-17","2016-10-11","2016-09-23","2016-08-21","2016-06-16","2016-06-05"],"name":"P90X2 - X2 Recovery + Mobility/Foam Rolling Sessio"},"P90X2 - X2 Shoulders and Arms":{"attributes":{"lower":false,"core":false,"back":false,"upper":true,"cardio":false,"martial":false,"other":false},"dates":["2018-03-20"],"name":"P90X2 - X2 Shoulders and Arms"},"P90X2 - X2 Total Body":{"attributes":{"lower":false,"core":true,"back":true,"upper":true,"cardio":false,"martial":false,"other":false},"dates":["2019-12-02","2019-08-13","2019-03-20","2018-05-15","2017-11-15","2017-09-06","2017-07-13","2017-05-09","2017-01-19","2016-10-03","2016-07-05","2016-04-20","2016-03-16","2016-02-11","2016-01-04","2015-12-03","2015-09-16","2015-07-28","2015-06-18","2015-04-23","2015-03-11","2015-01-06","2014-12-01","2014-10-20","2014-09-17","2014-08-04","2014-07-08","2014-05-27"],"name":"P90X2 - X2 Total Body"},"P90X2 - X2 Yoga":{"attributes":{"lower":false,"core":false,"back":false,"upper":false,"cardio":false,"martial":false,"other":true},"dates":["2020-07-05","2020-05-24","2020-03-17","2020-01-14","2019-11-11","2019-10-01","2019-09-14","2019-08-11","2019-07-09","2019-06-16","2019-04-12","2019-04-02","2019-03-05","2019-01-18","2019-01-06","2018-11-20","2018-11-03","2018-09-12","2018-08-18","2018-06-01","2018-03-27","2018-01-15","2017-12-08","2017-11-08","2017-10-17","2017-09-23","2017-08-29","2017-07-18","2017-07-01","2017-05-21","2017-04-15","2017-04-08","2017-03-14","2017-01-18","2017-01-09","2016-12-14","2016-11-16","2016-10-31","2016-09-28","2016-09-08","2016-08-16","2016-08-07","2016-07-12","2016-06-20","2016-05-11","2016-04-19","2016-04-07","2016-03-28","2016-03-08","2016-02-23","2016-02-16","2016-02-01","2016-01-11","2016-01-05","2015-12-14","2015-11-30","2015-10-22","2015-09-08","2015-08-17","2015-08-06","2015-07-05","2015-05-30","2015-05-17","2015-04-19","2015-03-18","2015-03-03","2015-02-24","2015-02-06","2015-01-15","2014-12-29","2014-12-11","2014-12-10","2014-12-03","2014-11-22","2014-11-16","2014-11-11","2014-11-02","2014-10-24","2014-09-25","2014-08-24","2014-07-29","2014-06-29","2014-06-12","2014-05-30","2014-05-20"],"name":"P90X2 - X2 Yoga"},"Long Run + Roll":{"attributes":{"lower":true,"core":false,"back":true,"upper":false,"cardio":true,"martial":false,"other":false},"dates":["2020-07-11","2020-04-10","2020-03-15","2019-12-14","2019-11-28","2019-11-06","2019-10-23","2019-10-16","2019-09-29","2019-09-21","2019-09-02","2019-08-21","2019-07-28","2019-07-19","2019-07-13","2019-06-03","2019-04-24","2019-03-30","2019-02-23","2019-01-22","2019-01-17","2018-12-19","2018-12-12","2018-12-01","2018-11-22","2018-10-21","2018-10-14","2018-10-08","2018-09-27","2018-09-23","2018-09-11","2018-09-04","2018-08-01","2018-07-16","2018-07-08","2018-06-18","2018-02-20","2018-02-03","2018-01-13","2017-12-15","2017-11-24","2017-11-12","2017-11-06","2017-10-06","2017-09-12","2017-08-26","2017-08-18","2017-08-01","2017-07-22","2017-07-04","2017-06-26","2017-06-18","2016-07-04","2016-01-31","2015-07-04","2015-05-03","2015-04-11","2014-11-06","2014-07-12","2014-06-27","2014-06-04","2014-05-05"],"name":"Long Run + Roll"},"Short Run + Roll":{"attributes":{"lower":true,"core":false,"back":true,"upper":false,"cardio":true,"martial":false,"other":false},"dates":["2020-04-28","2019-07-11","2019-06-12","2019-03-22","2019-02-18","2019-02-13","2019-01-30","2019-01-14","2018-06-28","2015-07-01","2015-03-22","2015-01-30","2015-01-22","2014-12-25","2014-11-27","2014-10-25","2014-10-18","2014-10-11","2014-09-20","2014-08-19","2014-08-12","2014-08-10","2014-08-02","2014-07-24","2014-07-21","2014-07-19","2014-07-16","2014-07-07","2014-07-04","2014-06-30","2014-06-24","2014-06-22","2014-06-21","2014-06-18","2014-06-14","2014-06-13","2014-06-09","2014-06-07","2014-06-03","2014-05-31","2014-05-30","2014-05-29","2014-05-27","2014-05-24","2014-05-23","2014-05-12"],"name":"Short Run + Roll"},"Tai Chi":{"attributes":{"lower":false,"core":false,"back":false,"upper":false,"cardio":false,"martial":false,"other":true},"dates":["2020-07-19","2020-07-18","2020-07-17","2020-07-15","2020-07-14","2020-07-13","2020-07-10","2020-07-09","2020-07-08","2020-07-07","2020-07-06","2020-07-04","2020-07-03","2020-07-02","2020-06-30","2020-06-29","2020-06-27","2020-06-25","2020-06-24","2020-06-23","2020-06-22","2020-06-17","2020-06-15","2020-06-14","2020-06-12","2020-06-11","2020-06-10","2020-06-09","2020-06-08","2020-06-07","2020-06-03","2020-06-01","2020-05-31","2020-05-30","2020-05-28","2020-05-27","2020-05-26","2020-05-24","2020-05-22","2020-05-21","2020-05-19","2020-05-18","2020-05-15","2020-05-14","2020-05-13","2020-05-12","2020-05-06","2020-05-05","2020-05-04","2020-05-01","2020-04-30","2020-04-29","2020-04-27","2020-04-24","2020-04-23","2020-04-22","2020-04-20","2020-04-17","2020-04-15","2020-04-14","2020-04-13","2020-04-12","2020-04-11","2020-04-10","2020-04-09","2020-04-08","2020-04-07","2020-04-04","2020-04-03","2020-04-02","2020-04-01","2020-03-31","2020-03-30","2020-03-29","2020-03-28","2020-03-27","2020-03-26","2020-03-25","2020-03-24","2020-03-23","2020-03-22","2020-03-21","2020-03-19","2020-03-18","2020-03-15","2020-03-14","2020-03-12","2020-02-19","2020-02-18","2020-02-17","2020-02-16","2020-02-14","2020-02-13","2020-02-03","2020-01-21","2020-01-20","2020-01-16","2020-01-15","2020-01-13","2020-01-11","2020-01-10","2020-01-09","2020-01-08","2020-01-07","2019-12-17","2019-12-14","2019-12-13","2019-12-12","2019-12-11","2019-12-10","2019-12-09","2019-12-08","2019-12-07","2019-12-06","2019-12-05","2019-12-04","2019-12-03","2019-12-02","2019-12-01","2019-11-30","2019-11-29","2019-11-28","2019-11-27","2019-11-26","2019-11-25","2019-11-24","2019-11-23","2019-11-22","2019-11-21","2019-11-20","2019-11-19","2019-11-18","2019-11-17","2019-11-15","2019-11-14","2019-11-13","2019-11-12","2019-11-11","2019-11-10","2019-11-09","2019-11-07","2019-11-06","2019-11-05","2019-10-28","2019-10-27","2019-10-25","2019-10-22","2019-10-21","2019-10-16","2019-10-15","2019-10-14","2019-10-13","2019-10-12","2019-10-10","2019-10-09","2019-10-08","2019-10-07","2019-10-06","2019-10-05","2019-10-04","2019-10-03","2019-10-02","2019-10-01","2019-09-29","2019-09-28","2019-09-27","2019-09-26","2019-09-25","2019-09-20","2019-09-18","2019-09-17","2019-09-16","2019-09-15","2019-09-14","2019-09-12","2019-09-11","2019-09-10","2019-09-08","2019-09-07","2019-09-06","2019-09-05","2019-09-01","2019-08-31","2019-08-26","2019-08-23","2019-08-22","2019-08-21","2019-08-20","2019-08-19","2019-08-18","2019-08-17","2019-08-16","2019-08-15","2019-08-14","2019-08-12","2019-08-10","2019-08-09","2019-08-07","2019-08-06","2019-08-05","2019-08-03","2019-07-31","2019-07-30","2019-07-29","2019-07-28","2019-07-27","2019-07-26","2019-07-25","2019-07-24","2019-07-23","2019-07-22","2019-07-21","2019-07-20","2019-07-19","2019-07-18","2019-07-17","2019-07-16","2019-07-15","2019-07-14","2019-07-13","2019-07-12","2019-07-11","2019-07-09","2019-07-08","2019-07-01","2019-06-30","2019-06-29","2019-06-27","2019-06-26","2019-06-25","2019-06-24","2019-06-23","2019-06-22","2019-06-21","2019-06-20","2019-06-19","2019-06-17","2019-06-14","2019-06-13","2019-06-10","2019-06-09","2019-06-07","2019-06-06","2019-06-05","2019-06-04","2019-06-03","2019-05-08","2019-05-07","2019-05-06","2019-05-05","2019-05-04","2019-05-03","2019-04-29","2019-04-28","2019-04-25","2019-04-23","2019-04-20","2019-04-19","2019-04-18","2019-04-17","2019-04-16","2019-04-15","2019-04-10","2019-04-09","2019-04-08","2019-04-07","2019-04-05","2019-04-04","2019-04-03","2019-04-01","2019-03-30","2019-03-29","2019-03-28","2019-03-27","2019-03-26","2019-03-25","2019-03-23","2019-03-21","2019-03-20","2019-03-19","2019-03-18","2019-03-15","2019-03-14","2019-03-13","2019-03-12","2019-03-11","2019-03-08","2019-03-07","2019-03-04","2019-03-01","2019-02-28","2019-02-27","2019-02-26","2019-02-25","2019-02-24","2019-02-20","2019-02-19","2019-02-17","2019-02-16","2019-02-15","2019-02-14","2019-02-13","2019-02-12","2019-01-25","2019-01-22","2019-01-21","2019-01-18","2019-01-02","2018-12-28","2018-12-21","2018-12-20","2018-12-19","2018-12-09","2018-12-07","2018-12-06","2018-12-05","2018-12-04","2018-12-03","2018-11-30","2018-11-29","2018-11-28","2018-11-27","2018-11-26","2018-11-25","2018-11-19","2018-11-18","2018-11-14","2018-11-13","2018-11-12","2018-11-09","2018-11-08","2018-11-07","2018-11-06","2018-11-05","2018-11-02","2018-11-01","2018-10-31","2018-10-30","2018-10-29","2018-10-26","2018-10-22","2018-10-17","2018-10-15","2018-10-12","2018-10-11","2018-10-10","2018-10-09","2018-10-08","2018-10-04","2018-09-27","2018-09-23","2018-09-20","2018-09-19","2018-09-18","2018-09-14","2018-09-13","2018-09-10","2018-09-05","2018-08-19","2018-08-09","2018-08-04","2018-08-03","2018-07-31","2018-07-30","2018-07-28","2018-07-27","2018-07-26","2018-07-25","2018-07-24","2018-07-23","2018-07-19","2018-07-18","2018-07-17","2018-07-16","2018-07-13","2018-07-12","2018-07-06","2018-06-29","2018-06-10","2018-05-22","2018-05-20","2018-05-16","2018-05-15","2018-05-13","2018-05-10","2018-05-09","2018-04-30","2018-04-27","2018-04-26","2018-04-21","2018-04-19","2018-04-16","2018-04-10","2018-04-06","2018-04-04","2018-04-03","2018-03-28","2018-03-27","2018-03-26","2018-03-20","2018-03-19","2018-03-16","2018-03-15","2018-03-14","2018-03-09","2018-02-20","2018-02-19","2018-02-18","2018-02-17","2018-02-16","2018-02-15","2018-02-14","2018-02-13","2018-02-09","2018-02-08","2018-02-07","2018-02-06","2018-02-05","2018-02-03","2018-02-02","2018-02-01","2018-01-31","2018-01-30","2018-01-29","2018-01-28","2018-01-27","2018-01-25","2018-01-24","2018-01-18","2018-01-17","2018-01-16","2018-01-14","2018-01-13","2018-01-12","2018-01-11","2018-01-10","2018-01-08","2018-01-07","2018-01-06","2018-01-05","2018-01-04","2018-01-03","2018-01-02","2018-01-01","2017-12-31","2017-12-30","2017-12-29","2017-12-28","2017-12-27","2017-12-21","2017-12-20","2017-12-19","2017-12-18","2017-12-17","2017-12-15","2017-12-14","2017-12-12","2017-12-11","2017-12-10","2017-12-09","2017-12-08","2017-12-06","2017-12-05","2017-12-04","2017-12-03","2017-12-01","2017-11-29","2017-11-28","2017-11-20","2017-11-18","2017-11-17","2017-11-16","2017-11-15","2017-11-14","2017-11-13","2017-11-12","2017-11-11","2017-11-10","2017-11-09","2017-11-08","2017-11-07","2017-11-06","2017-11-01","2017-10-31","2017-10-30","2017-10-26","2017-10-25","2017-10-24","2017-10-20","2017-10-19","2017-10-18","2017-10-17","2017-10-16","2017-10-14","2017-10-13","2017-10-12","2017-10-11","2017-10-10","2017-10-09","2017-10-08","2017-10-07","2017-10-05","2017-10-04","2017-10-03","2017-10-02","2017-09-30","2017-09-29","2017-09-28","2017-09-27","2017-09-26","2017-09-25","2017-09-23","2017-09-22","2017-09-21","2017-09-20","2017-09-19","2017-09-18","2017-09-17","2017-09-16","2017-09-15","2017-09-14","2017-09-13","2017-09-12","2017-09-11","2017-09-10","2017-09-09","2017-09-08","2017-09-07","2017-09-06","2017-09-05","2017-09-02","2017-08-31","2017-08-30","2017-08-29","2017-08-28","2017-08-27","2017-08-26","2017-08-25","2017-08-24","2017-08-23","2017-08-22","2017-08-21","2017-08-20","2017-08-18","2017-08-17","2017-08-16","2017-08-15","2017-08-14","2017-08-13","2017-08-09","2017-08-08","2017-08-07","2017-08-06","2017-08-05","2017-08-04","2017-08-03","2017-08-02","2017-08-01","2017-07-31","2017-07-24","2017-07-23","2017-07-22","2017-07-21","2017-07-20","2017-07-19","2017-07-18","2017-07-17","2017-07-16","2017-07-15","2017-07-14","2017-07-13","2017-07-12","2017-07-11","2017-07-10","2017-07-09","2017-07-07","2017-07-06","2017-07-05","2017-07-03","2017-07-02","2017-07-01","2017-06-30","2017-06-29","2017-06-28","2017-06-27","2017-06-25","2017-06-24","2017-06-23","2017-06-22","2017-06-21","2017-06-20","2017-06-19","2017-06-18","2017-06-17","2017-06-16","2017-06-15","2017-06-14","2017-06-12","2017-06-11","2017-06-10","2017-06-09","2017-06-08","2017-06-07","2017-06-06","2017-06-03","2017-06-02","2017-06-01","2017-05-31","2017-05-29","2017-05-28","2017-05-27","2017-05-26","2017-05-24","2017-05-22","2017-05-20","2017-05-19","2017-05-18","2017-05-17","2017-05-16","2017-05-15","2017-05-14","2017-05-13","2017-05-12","2017-05-11","2017-05-10","2017-05-09","2017-05-08","2017-05-05","2017-05-03","2017-05-02","2017-05-01","2017-04-30","2017-04-29","2017-04-28","2017-04-27","2017-04-26","2017-04-25","2017-04-24","2017-04-23","2017-04-22","2017-04-21","2017-04-20","2017-04-19","2017-04-18","2017-04-17","2017-04-16","2017-04-14","2017-04-13","2017-04-12","2017-04-11","2017-04-10","2017-04-09","2017-04-08","2017-04-07","2017-04-06","2017-04-05","2017-04-04","2017-04-03","2017-03-31","2017-03-30","2017-03-28","2017-03-27","2017-03-24","2017-03-23","2017-03-22","2017-03-21","2017-03-20","2017-03-19","2017-03-18","2017-03-17","2017-03-16","2017-03-15","2017-03-14","2017-02-23","2017-02-21","2017-02-20","2017-02-16","2017-02-14","2017-02-09","2017-02-07","2017-02-02","2017-02-01","2017-01-27","2017-01-19","2017-01-17","2017-01-16","2017-01-12","2017-01-10","2017-01-04","2016-12-20","2016-12-12","2016-12-08","2016-12-06","2016-11-29","2016-11-15","2016-11-14","2016-11-10","2016-11-08","2016-11-07","2016-11-04","2016-11-01","2016-10-26","2016-10-25","2016-10-24","2016-10-21","2016-10-20","2016-10-19","2016-10-17","2016-10-14","2016-10-13","2016-10-12","2016-10-11","2016-10-07","2016-10-06","2016-10-05","2016-10-04","2016-10-03","2016-09-30","2016-09-29","2016-09-27","2016-09-26","2016-09-23","2016-09-22","2016-09-21","2016-09-20","2016-09-14","2016-09-13","2016-09-12","2016-09-09","2016-09-06","2016-09-05","2016-09-01","2016-08-30","2016-08-29","2016-08-26","2016-08-25","2016-08-23","2016-08-15","2016-08-05","2016-08-04","2016-08-03","2016-08-02","2016-08-01","2016-07-29","2016-07-28","2016-07-27","2016-07-26","2016-07-25","2016-07-24","2016-07-22","2016-07-21","2016-07-20","2016-07-19","2016-07-18","2016-07-15","2016-07-14","2016-07-13","2016-07-11","2016-07-05","2016-07-01","2016-06-30","2016-06-29","2016-06-28","2016-06-24","2016-06-23","2016-06-22","2016-06-21","2016-06-17","2016-06-16","2016-06-15","2016-06-14","2016-06-13","2016-06-10","2016-06-09","2016-06-08","2016-06-07","2016-06-03","2016-06-02","2016-05-31","2016-05-24","2016-05-22","2016-05-21","2016-05-17","2016-05-16","2016-05-15","2016-05-13","2016-05-12","2016-05-10","2016-05-09","2016-05-08","2016-05-05","2016-05-04","2016-05-03","2016-04-29","2016-04-22","2016-04-15","2016-04-13","2016-04-09","2016-03-25","2016-03-18","2016-03-16","2016-03-11","2016-03-07","2016-03-04","2016-02-26","2016-02-19","2016-02-12","2016-02-10","2016-02-05","2016-01-29","2016-01-20","2016-01-15","2016-01-14","2016-01-06","2016-01-02","2015-12-28","2015-12-18","2015-12-17","2015-12-16","2015-12-15","2015-12-11","2015-12-07","2015-12-04","2015-11-29","2015-11-05","2015-11-04","2015-11-02","2015-10-31","2015-10-24","2015-10-21","2015-10-20","2015-10-19","2015-10-15","2015-10-14","2015-10-13","2015-10-12","2015-10-06","2015-10-05","2015-10-02","2015-10-01","2015-09-30","2015-09-27","2015-09-25","2015-09-18","2015-09-15","2015-09-14","2015-09-10","2015-09-09","2015-08-28","2015-08-21","2015-08-13","2015-08-11","2015-08-05","2015-07-30","2015-07-24","2015-07-22","2015-07-13","2015-07-07","2015-07-03","2015-06-30","2015-06-23","2015-06-04","2015-05-29","2015-05-20","2015-05-18","2015-05-12","2015-05-06","2015-05-04","2015-04-30","2015-04-26","2015-04-17","2015-04-15","2015-04-14","2015-04-10","2015-04-08","2015-04-02","2015-03-31","2015-03-18","2015-03-10","2015-02-25","2015-02-03","2015-01-29","2015-01-28","2015-01-21","2015-01-19","2015-01-15","2015-01-08","2014-12-27","2014-12-23","2014-12-16","2014-12-15","2014-12-09","2014-12-04","2014-12-01","2014-11-30","2014-11-25","2014-11-24","2014-11-20","2014-11-19","2014-11-18","2014-11-17","2014-11-14","2014-11-13","2014-11-12","2014-11-11","2014-11-10","2014-11-05","2014-11-03","2014-10-31","2014-10-30","2014-10-29","2014-10-28","2014-10-27","2014-10-24","2014-10-23","2014-10-22","2014-10-21","2014-10-20","2014-10-17","2014-10-16","2014-10-15","2014-10-14","2014-10-09","2014-10-08","2014-10-06","2014-10-03","2014-10-02","2014-10-01","2014-09-30","2014-09-25","2014-09-24","2014-09-22","2014-09-19","2014-09-18","2014-09-17","2014-09-16","2014-09-09","2014-09-08","2014-09-05","2014-09-03","2014-08-29","2014-08-27","2014-08-26","2014-08-11","2014-08-07","2014-08-06","2014-08-04","2014-08-03","2014-08-01","2014-07-30","2014-07-26","2014-07-23","2014-07-20","2014-07-18","2014-07-16","2014-07-15","2014-07-09","2014-07-07","2014-07-03","2014-07-02","2014-06-27","2014-06-25","2014-06-23","2014-06-22","2014-06-20","2014-06-18","2014-06-11","2014-06-04","2014-05-28","2014-05-21","2014-05-14","2014-05-07"],"name":"Tai Chi"},"Brazilian Jiu Jitsu":{"attributes":{"lower":false,"core":false,"back":false,"upper":false,"cardio":false,"martial":true,"other":false},"dates":["2019-01-02","2018-12-21","2018-12-07","2018-12-05","2018-11-30","2018-11-19","2018-11-15","2018-11-14","2018-11-09","2018-11-07","2018-10-27","2018-10-18","2018-10-17","2018-10-12","2018-10-10","2018-10-05","2018-09-25","2018-09-21","2018-09-17","2018-08-10","2018-08-03","2018-07-27","2018-07-20","2018-07-06","2018-02-13","2017-12-08","2017-12-01","2017-11-28","2017-11-20","2017-11-09","2017-11-07","2017-11-01","2017-10-24","2017-10-20","2017-10-18","2017-10-12","2017-10-11","2017-10-06","2017-09-06","2017-08-23","2017-08-21","2017-08-18","2017-08-14","2017-08-07","2017-08-04","2017-06-16","2017-06-14","2017-06-09","2017-06-07","2017-06-02","2017-05-26","2017-05-24","2017-05-22","2017-05-19","2017-05-17","2017-05-12","2017-05-10","2017-05-05","2017-05-01","2017-04-12","2017-04-10","2017-04-07","2017-04-05","2017-04-01","2017-03-31","2017-03-22","2017-03-20","2017-03-17","2017-03-15","2017-02-24","2017-02-22","2017-02-17","2017-02-08","2017-02-03","2017-01-27","2017-01-25","2017-01-18","2017-01-16","2016-12-22","2016-12-19","2016-12-16","2016-12-13","2016-11-28","2016-11-11","2016-10-24","2016-05-02","2016-04-29","2016-04-25","2016-04-22","2016-04-18","2016-04-15","2016-03-28","2016-03-11","2016-03-09","2016-03-04","2016-03-02","2016-02-29","2016-02-24","2016-02-22","2016-02-19","2016-02-17","2016-02-12","2016-02-05","2016-02-03","2016-02-01","2016-01-30","2016-01-25","2016-01-18","2016-01-15","2016-01-04","2015-12-30","2015-12-21","2015-12-18","2015-12-11","2015-12-09","2015-12-04","2015-11-30","2015-09-21","2015-09-18","2015-09-14","2015-08-31","2015-08-28","2015-08-26","2015-08-19","2015-08-17","2015-08-14","2015-08-12","2015-08-10","2015-08-07","2015-08-05","2015-07-29","2015-07-27","2015-07-20","2015-07-13","2015-07-10","2015-07-08","2015-07-06","2015-07-03","2015-07-01","2015-06-29","2015-06-25","2015-06-22","2015-06-19","2015-06-17","2015-06-15","2015-06-08","2015-06-05","2015-06-03","2015-06-01","2015-05-28","2015-05-21","2015-05-19","2015-05-15","2015-05-13","2015-05-11","2015-05-07","2015-05-05","2015-05-01","2015-04-29","2015-04-27","2015-04-24","2015-04-22","2015-04-20","2015-04-16","2015-04-13","2015-04-09","2015-04-07","2015-04-03","2015-04-01","2015-03-30","2015-03-25","2015-03-19","2015-02-19","2015-02-17","2015-02-13","2015-02-10","2015-02-06","2015-02-04","2015-01-30","2015-01-27","2015-01-22","2015-01-20","2015-01-16","2015-01-14","2015-01-09","2015-01-07","2014-12-23","2014-12-16","2014-12-02","2014-11-24","2014-11-18","2014-11-13","2014-11-05","2014-10-30","2014-10-23","2014-09-29","2014-09-17","2014-09-10","2014-09-04"],"name":"Brazilian Jiu Jitsu"},"r/BodyWeightFitness Recommended Routine":{"attributes":{"lower":false,"core":true,"back":false,"upper":true,"cardio":false,"martial":false,"other":false},"dates":["2018-07-09","2018-05-25","2018-03-28","2018-02-08","2017-11-09","2017-10-08","2017-09-03","2017-08-17","2017-07-09","2017-05-27","2017-04-26","2017-04-09","2017-03-27","2017-02-28","2017-02-03","2016-12-21","2016-11-17","2016-10-27","2016-09-29","2016-08-28","2016-08-06","2016-07-17","2016-06-24","2016-05-31","2016-04-30","2016-04-14","2016-03-31","2016-03-18","2016-03-05"],"name":"r/BodyWeightFitness Recommended Routine"},"RushFit - Fight Conditioning":{"attributes":{"lower":true,"core":true,"back":false,"upper":false,"cardio":true,"martial":true,"other":false},"dates":["2020-07-04","2020-06-08","2020-05-04","2020-03-30","2020-03-13","2019-12-06","2019-11-21","2019-10-21","2019-09-27","2019-08-17","2019-07-24","2019-06-23","2019-04-08","2019-03-04","2019-01-19","2018-12-20","2018-11-26","2018-10-30","2018-09-14","2018-06-27","2018-05-30","2018-04-28","2018-04-05","2018-02-06","2018-01-09","2017-12-07","2017-10-31","2017-09-27","2017-09-05","2017-07-26","2017-07-07","2017-05-24","2017-04-21","2017-03-16","2017-02-02","2017-01-11","2016-12-13","2016-11-15","2016-10-19","2016-10-04","2016-09-19","2016-09-06","2016-08-25","2016-07-27","2016-07-21","2016-07-11","2016-07-06","2016-06-29","2016-06-23","2016-06-17","2016-06-14","2016-06-07","2016-06-03","2016-05-30","2016-05-24","2016-05-13","2016-05-10","2016-05-07"],"name":"RushFit - Fight Conditioning"},"RushFit - Strength and Endurance":{"attributes":{"lower":true,"core":true,"back":true,"upper":true,"cardio":false,"martial":false,"other":false},"dates":["2020-06-09","2020-05-19","2020-03-23","2019-11-09","2019-07-31","2019-04-17","2019-03-11","2018-12-18","2018-10-31","2018-08-14","2018-06-30","2018-05-21","2018-04-16","2018-02-13","2017-11-20","2017-10-11","2017-09-15","2017-08-07","2017-06-15","2017-05-19","2017-04-12","2017-02-23","2017-01-25","2016-12-12","2016-11-14","2016-10-17","2016-09-23","2016-09-05","2016-08-05","2016-07-20","2016-06-15","2016-06-10","2016-05-25","2016-05-17"],"name":"RushFit - Strength and Endurance"},"RushFit - Full Body Strength and Conditioning":{"attributes":{"lower":true,"core":true,"back":true,"upper":true,"cardio":false,"martial":false,"other":false},"dates":["2020-07-06","2020-05-31","2020-04-06","2019-12-11","2019-09-04","2019-06-11","2019-03-26","2018-12-30","2018-09-21","2018-07-26","2018-06-19","2018-04-30","2017-12-11","2017-11-01","2017-09-29","2017-08-30","2017-07-19","2017-06-05","2017-05-03","2017-04-05","2017-02-10","2017-01-02","2016-11-22","2016-10-20","2016-10-05","2016-09-14","2016-08-26","2016-07-28","2016-07-13","2016-06-30","2016-06-06","2016-05-19"],"name":"RushFit - Full Body Strength and Conditioning"},"RushFit - Explosive Powertraining":{"attributes":{"lower":true,"core":true,"back":true,"upper":true,"cardio":false,"martial":false,"other":false},"dates":["2020-07-02","2020-04-27","2019-11-26","2019-09-10","2019-07-01","2019-04-09","2019-03-06","2018-12-04","2018-10-16","2018-09-07","2018-07-13","2018-06-12","2018-05-10","2018-01-10","2017-11-17","2017-10-23","2017-09-18","2017-08-14","2017-07-06","2017-05-22","2017-04-20","2017-03-15","2017-02-15","2017-01-16","2016-11-29","2016-11-02","2016-10-14","2016-09-21","2016-08-29","2016-08-01","2016-07-15","2016-07-01","2016-06-21","2016-06-08","2016-05-23"],"name":"RushFit - Explosive Powertraining"},"Rushfit - Balance and Agility":{"attributes":{"lower":true,"core":false,"back":false,"upper":true,"cardio":true,"martial":false,"other":false},"dates":["2020-07-09","2020-05-28","2019-12-17","2019-09-26","2019-06-20","2019-03-14","2019-01-07","2018-11-21","2018-10-12","2018-09-25","2018-07-05","2018-05-16","2018-04-13","2018-01-31","2017-12-29","2017-11-05","2017-09-26","2017-08-23","2017-07-16","2017-06-14","2017-05-08","2017-04-03","2017-02-08","2017-01-24","2016-12-07","2016-11-18","2016-10-28","2016-10-06","2016-09-07","2016-08-23","2016-07-18","2016-06-28","2016-06-01"],"name":"Rushfit - Balance and Agility"},"Rushfit - Stretching for Flexibility":{"attributes":{"lower":false,"core":false,"back":false,"upper":false,"cardio":false,"martial":false,"other":true},"dates":["2020-07-18","2020-07-13","2020-07-08","2020-07-03","2020-06-29","2020-06-25","2020-06-17","2020-06-09","2020-05-29","2020-05-26","2020-05-20","2020-04-30","2020-04-05","2020-03-29","2020-02-13","2020-02-03","2020-01-14","2020-01-11","2019-12-17","2019-12-08","2019-12-04","2019-12-02","2019-11-30","2019-11-24","2019-11-20","2019-11-15","2019-11-12","2019-11-06","2019-10-22","2019-10-12","2019-10-09","2019-10-07","2019-10-02","2019-09-27","2019-09-25","2019-09-15","2019-09-01","2019-08-30","2019-08-20","2019-08-15","2019-08-12","2019-08-08","2019-08-06","2019-07-30","2019-07-25","2019-07-18","2019-07-16","2019-07-14","2019-07-10","2019-07-01","2019-06-27","2019-06-25","2019-06-21","2019-06-19","2019-06-17","2019-06-10","2019-06-07","2019-06-05","2019-05-07","2019-05-05","2019-05-03","2019-04-23","2019-04-19","2019-04-15","2019-04-08","2019-04-04","2019-04-01","2019-03-11","2019-03-07","2019-03-04","2019-01-01","2018-12-09","2018-12-05","2018-12-01","2018-11-28","2018-11-25","2018-11-19","2018-11-15","2018-11-13","2018-11-07","2018-11-01","2018-10-29","2018-10-17","2018-10-13","2018-10-04","2018-09-19","2018-09-14","2018-09-11","2018-09-07","2018-09-05","2018-08-03","2018-07-30","2018-07-23","2018-07-18","2018-07-13","2018-07-06","2018-06-29","2018-06-21","2018-05-19","2018-04-10","2018-04-04","2018-03-26","2018-03-15","2018-02-20","2018-02-18","2018-02-15","2018-02-08","2018-02-03","2018-02-01","2018-01-30","2018-01-27","2018-01-16","2018-01-13","2018-01-10","2018-01-04","2018-01-01","2017-12-31","2017-12-28","2017-12-21","2017-12-17","2017-12-10","2017-12-06","2017-11-29","2017-11-15","2017-11-13","2017-11-10","2017-10-25","2017-10-10","2017-10-05","2017-10-02","2017-09-28","2017-09-26","2017-09-21","2017-09-19","2017-09-15","2017-09-12","2017-09-10","2017-09-02","2017-08-27","2017-08-24","2017-08-17","2017-08-08","2017-08-02","2017-07-31","2017-07-24","2017-07-21","2017-07-16","2017-07-13","2017-07-07","2017-07-03","2017-06-28","2017-06-24","2017-06-20","2017-06-17","2017-06-12","2017-06-08","2017-05-31","2017-05-27","2017-05-25","2017-05-18","2017-05-15","2017-05-10","2017-05-02","2017-04-29","2017-04-26","2017-04-23","2017-04-20","2017-04-18","2017-04-13","2017-04-10","2017-04-06","2017-03-30","2017-03-28","2017-03-23","2017-03-21","2017-03-13","2017-02-28","2017-02-23","2017-02-16","2017-02-07","2017-02-02","2017-01-31","2017-01-26","2017-01-19","2017-01-14","2017-01-05","2017-01-03","2016-12-28","2016-12-20","2016-12-09","2016-12-06","2016-12-01","2016-11-29","2016-11-26","2016-11-19","2016-11-14","2016-11-08","2016-11-04","2016-10-27","2016-10-20","2016-10-15","2016-10-13","2016-10-10","2016-10-06","2016-10-04","2016-10-01","2016-09-28","2016-09-26","2016-09-21","2016-09-14","2016-09-12","2016-09-09","2016-09-06","2016-09-01","2016-08-29","2016-08-25","2016-08-22","2016-08-19","2016-08-15","2016-08-04","2016-08-02","2016-07-30","2016-07-28","2016-07-26","2016-07-20","2016-07-18","2016-07-16","2016-07-15","2016-07-13","2016-07-05","2016-06-30","2016-06-28","2016-06-23","2016-06-21","2016-06-15","2016-06-13","2016-06-09","2016-06-07","2016-06-02","2016-05-31"],"name":"Rushfit - Stretching for Flexibility"},"Rushfit - Abdominal Strength and Core Conditioning":{"attributes":{"lower":false,"core":true,"back":false,"upper":false,"cardio":false,"martial":false,"other":false},"dates":["2020-07-14","2020-04-12","2020-01-21","2019-12-07","2019-11-07","2019-09-18","2019-07-29","2019-06-07","2019-03-01","2019-01-21","2018-12-07","2018-10-26","2018-09-05","2018-08-04","2018-06-06","2018-04-20","2018-01-03","2017-10-20","2017-08-24","2017-08-04","2017-06-02","2017-04-30","2017-03-30","2017-02-20","2017-01-10","2016-12-16","2016-11-08","2016-10-10","2016-09-12","2016-08-24","2016-08-03","2016-07-19","2016-06-22","2016-06-16","2016-06-02"],"name":"Rushfit - Abdominal Strength and Core Conditioning"},"Wim Hof Method Week 1":{"attributes":{"lower":false,"core":false,"back":false,"upper":false,"cardio":false,"martial":false,"other":true},"dates":["2020-07-11","2020-07-04","2020-06-13","2020-05-29","2020-05-24","2020-04-13","2020-04-08","2020-04-01","2019-11-13","2019-03-25","2019-03-24","2019-01-21","2018-12-27","2018-11-19","2018-11-15","2018-11-13","2018-11-12","2018-10-17","2018-10-12","2018-10-11","2018-10-10","2018-10-08","2018-09-27","2018-09-25","2018-09-24","2018-09-23","2018-09-22","2018-09-21","2018-09-20","2018-09-19","2018-09-18","2018-09-17","2018-09-16","2018-09-14","2018-09-13","2018-09-11","2018-09-10","2018-09-09","2018-07-26","2018-07-11","2018-06-12","2018-06-11","2018-02-07","2018-01-18","2018-01-12","2018-01-11","2018-01-07","2018-01-04","2018-01-03","2018-01-02","2018-01-01","2017-12-30","2017-12-29","2017-12-28","2017-12-20","2017-12-13","2017-11-07","2017-10-26","2017-10-25","2017-10-14","2017-10-12","2017-09-30","2017-09-27","2017-09-23","2017-09-18","2017-04-30","2016-11-19","2016-11-15","2016-11-14","2016-11-13","2016-11-12","2016-11-11","2016-11-09"],"name":"Wim Hof Method Week 1"},"Wim Hof Method Week 2":{"attributes":{"lower":false,"core":false,"back":false,"upper":false,"cardio":false,"martial":false,"other":true},"dates":["2017-10-16","2017-10-10","2017-09-28","2017-09-22","2017-09-19","2016-12-01","2016-11-30","2016-11-26","2016-11-23","2016-11-22","2016-11-21"],"name":"Wim Hof Method Week 2"},"Wim Hof Method Week 3":{"attributes":{"lower":false,"core":false,"back":false,"upper":false,"cardio":false,"martial":false,"other":true},"dates":["2017-09-25","2016-12-07","2016-12-06","2016-12-05","2016-12-03"],"name":"Wim Hof Method Week 3"},"Simple and Sinister":{"attributes":{"lower":true,"core":true,"back":true,"upper":true,"cardio":false,"martial":false,"other":false},"dates":["2020-07-17","2020-06-24","2020-05-27","2020-05-15","2020-04-17","2020-03-31","2020-03-11","2020-02-17","2020-01-05","2019-12-13","2019-12-05","2019-11-25","2019-11-17","2019-10-22","2019-10-13","2019-10-06","2019-10-02","2019-09-20","2019-09-06","2019-08-22","2019-08-15","2019-08-05","2019-07-23","2019-07-16","2019-07-08","2019-07-02","2019-06-28","2019-06-22","2019-06-17","2019-06-14","2019-06-04","2019-04-25","2019-04-13","2019-04-06","2019-03-09","2019-02-24","2019-02-11","2019-01-29","2019-01-23","2019-01-15","2019-01-01","2018-12-27","2018-12-16","2018-12-05","2018-11-27","2018-11-19","2018-11-12","2018-11-05","2018-10-29","2018-10-24","2018-10-18","2018-10-09","2018-10-05","2018-09-17","2018-09-13","2018-09-09","2018-08-12","2018-08-06","2018-07-24","2018-07-19","2018-07-11","2018-07-03","2018-06-26","2018-06-14","2018-06-04","2018-05-29","2018-05-17","2018-05-08","2018-04-27","2018-04-24","2018-02-16","2018-02-09","2018-02-02","2018-01-28","2018-01-25","2018-01-24","2018-01-18","2018-01-12","2018-01-07","2017-12-31","2017-12-28","2017-12-25","2017-10-14"],"name":"Simple and Sinister"},"Vapassana Meditation":{"attributes":{"lower":false,"core":false,"back":false,"upper":false,"cardio":false,"martial":false,"other":true},"dates":["2018-10-10","2018-10-09","2018-07-30","2018-07-19","2018-07-18","2018-05-13","2018-05-10","2018-02-19"],"name":"Vapassana Meditation"},"Pull Ups + Burpees":{"attributes":{"lower":true,"core":false,"back":true,"upper":true,"cardio":false,"martial":false,"other":false},"dates":["2020-06-16","2020-05-08","2020-04-22","2020-01-07","2019-12-09","2019-11-29","2019-11-05","2019-10-10","2019-09-08","2019-08-19","2019-07-12","2019-06-24","2019-06-06","2019-04-01","2019-03-19","2019-02-26","2019-02-13","2019-01-16","2018-12-21","2018-11-28","2018-11-13","2018-10-25","2018-10-11","2018-09-29","2018-09-24","2018-09-11","2018-09-04","2018-08-08","2018-08-01","2018-07-22","2018-06-28","2018-06-07","2018-04-21"],"name":"Pull Ups + Burpees"},"Heavy Bag":{"attributes":{"lower":false,"core":false,"back":false,"upper":false,"cardio":true,"martial":true,"other":false},"dates":["2020-04-29","2020-04-19","2019-10-18","2019-08-03","2019-04-20","2018-12-28","2018-12-09","2018-09-06","2018-08-19","2018-07-29"],"name":"Heavy Bag"},"Interval Run":{"attributes":{"lower":true,"core":false,"back":true,"upper":false,"cardio":true,"martial":false,"other":false},"dates":["2020-06-28","2020-05-23","2019-12-03","2019-09-11","2019-05-07","2019-03-27","2018-12-06","2018-11-01","2018-09-18","2018-08-13"],"name":"Interval Run"},"Exercise Bike":{"attributes":{"lower":true,"core":false,"back":false,"upper":false,"cardio":true,"martial":false,"other":false},"dates":["2020-01-07","2019-12-09","2019-11-10","2019-10-27","2019-10-14","2019-08-18","2019-07-12","2019-06-27","2019-05-03","2019-04-15","2019-04-10","2019-04-03","2019-03-15","2019-03-07","2019-02-14","2019-01-20"],"name":"Exercise Bike"},"Generic - Legs + Back":{"attributes":{"lower":true,"core":false,"back":true,"upper":true,"cardio":false,"martial":false,"other":false},"dates":["2020-01-11","2019-11-15","2019-03-22","2019-02-28","2019-02-25","2019-01-22","2019-01-20"],"name":"Generic - Legs + Back"},"Generic - Chest + Back + Tris":{"attributes":{"lower":false,"core":false,"back":true,"upper":true,"cardio":false,"martial":false,"other":false},"dates":["2019-12-19","2019-10-27","2019-07-25","2019-02-19","2019-01-28"],"name":"Generic - Chest + Back + Tris"},"Elliptical":{"attributes":{"lower":true,"core":true,"back":false,"upper":false,"cardio":true,"martial":false,"other":false},"dates":["2019-10-27","2019-08-09","2019-04-04","2019-02-16","2019-01-31"],"name":"Elliptical"},"Swimming":{"attributes":{"lower":false,"core":false,"back":false,"upper":false,"cardio":false,"martial":false,"other":false},"dates":["2019-11-10","2019-04-26","2019-04-11"],"name":"Swimming"},"Stairs":{"attributes":{"lower":true,"core":false,"back":false,"upper":false,"cardio":true,"martial":false,"other":false},"dates":["2019-11-15","2019-10-09"],"name":"Stairs"},"P90X3 - Dynamix":{"attributes":{"lower":false,"core":false,"back":false,"upper":false,"cardio":false,"martial":false,"other":true},"dates":["2020-07-20","2020-07-14","2020-07-09","2020-07-04","2020-07-01","2020-06-27","2020-06-12","2020-05-25","2020-04-23","2020-04-06","2020-03-31","2020-02-19","2020-02-12","2020-02-03","2020-02-01"],"name":"P90X3 - Dynamix"},"P90X3 - Eccentric Lower":{"attributes":{"lower":true,"core":false,"back":false,"upper":false,"cardio":false,"martial":false,"other":false},"dates":["2020-07-08","2020-05-14","2020-03-14","2020-02-12","2020-02-02"],"name":"P90X3 - Eccentric Lower"},"Hard Corps - Core 1":{"attributes":{"lower":false,"core":true,"back":false,"upper":false,"cardio":false,"martial":false,"other":false},"dates":["2020-06-29","2020-04-23","2020-02-03"],"name":"Hard Corps - Core 1"},"P90X3 - Pilates X":{"attributes":{"lower":false,"core":true,"back":false,"upper":false,"cardio":false,"martial":false,"other":false},"dates":["2020-07-10","2020-06-03","2020-03-27","2020-02-08"],"name":"P90X3 - Pilates X"},"P90X3 - Isometrix":{"attributes":{"lower":false,"core":true,"back":false,"upper":true,"cardio":false,"martial":false,"other":true},"dates":["2020-06-27","2020-05-13","2020-02-09"],"name":"P90X3 - Isometrix"},"P90X3 - MMX":{"attributes":{"lower":false,"core":false,"back":false,"upper":false,"cardio":true,"martial":true,"other":false},"dates":["2020-06-30","2020-06-06","2020-05-12","2020-04-15","2020-03-18","2020-02-16","2020-02-10"],"name":"P90X3 - MMX"},"Hard Corps - Resistance 3":{"attributes":{"lower":true,"core":true,"back":false,"upper":true,"cardio":false,"martial":false,"other":false},"dates":["2020-06-29","2020-06-07","2020-05-18","2020-02-13"],"name":"Hard Corps - Resistance 3"},"P90X3 - Eccentric Upper":{"attributes":{"lower":false,"core":false,"back":true,"upper":true,"cardio":false,"martial":false,"other":false},"dates":["2020-02-14"],"name":"P90X3 - Eccentric Upper"},"P90X3 - Yoga":{"attributes":{"lower":false,"core":false,"back":false,"upper":false,"cardio":false,"martial":false,"other":true},"dates":["2020-07-12","2020-06-02","2020-05-11","2020-04-11","2020-03-12","2020-02-18"],"name":"P90X3 - Yoga"},"Hard Corps - Core 2":{"attributes":{"lower":false,"core":true,"back":false,"upper":false,"cardio":false,"martial":false,"other":false},"dates":["2020-05-18","2020-02-19"],"name":"Hard Corps - Core 2"},"P90X3 - The Warrior":{"attributes":{"lower":true,"core":true,"back":false,"upper":true,"cardio":true,"martial":true,"other":false},"dates":["2020-06-23","2020-05-26","2020-03-21"],"name":"P90X3 - The Warrior"},"P90X3 - CVX":{"attributes":{"lower":true,"core":false,"back":false,"upper":true,"cardio":true,"martial":false,"other":false},"dates":["2020-07-13","2020-05-30","2020-03-26"],"name":"P90X3 - CVX"},"P90X3 - Accelerator":{"attributes":{"lower":true,"core":false,"back":false,"upper":false,"cardio":true,"martial":false,"other":false},"dates":["2020-04-04"],"name":"P90X3 - Accelerator"},"Hard Corps - Resistance 1":{"attributes":{"lower":true,"core":true,"back":true,"upper":true,"cardio":false,"martial":false,"other":false},"dates":["2020-06-22","2020-05-01"],"name":"Hard Corps - Resistance 1"},"P90X3 - Agility":{"attributes":{"lower":true,"core":false,"back":false,"upper":false,"cardio":true,"martial":false,"other":false},"dates":["2020-04-30"],"name":"P90X3 - Agility"},"Hard Corps - Resistance 2":{"attributes":{"lower":false,"core":true,"back":true,"upper":true,"cardio":false,"martial":false,"other":false},"dates":["2020-05-05"],"name":"Hard Corps - Resistance 2"},"Hard Corps - Cardio 1":{"attributes":{"lower":false,"core":false,"back":false,"upper":false,"cardio":true,"martial":false,"other":false},"dates":["2020-05-03"],"name":"Hard Corps - Cardio 1"},"Hard Corps - Cardio 2":{"attributes":{"lower":false,"core":false,"back":false,"upper":false,"cardio":false,"martial":false,"other":false},"dates":["2020-05-06"],"name":"Hard Corps - Cardio 2"}}
\ No newline at end of file
--- /dev/null
+#ifndef __ADD_H_
+#define __ADD_H_
+
+#include<stdio.h>
+#include<stdlib.h>
+#include<time.h>
+
+#include<data.h>
+#include<usage.h>
+
+int add(int,int,char**);
+
+#endif
\ No newline at end of file
--- /dev/null
+#ifndef __ATTR_H_
+#define __ATTR_H_
+
+#include<stdio.h>
+#include<stdlib.h>
+#include<string.h>
+
+#include<data.h>
+#include<usage.h>
+
+int attr(int,int,char**);
+int attr_add(char*);
+int attr_ls();
+void print_attr(const unsigned char*);
+
+#endif
\ No newline at end of file
--- /dev/null
+#ifndef __DATA_H_
+#define __DATA_H_
+
+#include<stdlib.h>
+
+#include<sqlite3.h>
+
+#include<opt.h>
+
+#define EMPTY_STRING ""
+
+// attributes
+#define ATTRIBUTE_TABLE_NAME_SQL "attributes"
+#define ATTRIBUTE_CREATE_TABLE_SQL \
+ "CREATE TABLE IF NOT EXISTS `" ATTRIBUTE_TABLE_NAME_SQL "` ( " \
+ "`name` TEXT NOT NULL PRIMARY KEY, " \
+ "`order` INT DEFAULT 0" \
+ ");"
+
+#define ATTRIBUTE_COUNT_SQL "SELECT COUNT(*) FROM " ATTRIBUTE_TABLE_NAME_SQL ";"
+int attribute_count();
+
+#define ATTRIBUTE_GET_SQL "SELECT `name` FROM " ATTRIBUTE_TABLE_NAME_SQL " WHERE 1 ORDER BY `order` ASC;"
+int attribute_get(void (*)(const unsigned char*));
+int attribute_index(char*);
+void attribute_index_helper(const unsigned char*);
+
+#define ATTRIBUTE_INSERT_SQL "INSERT INTO " ATTRIBUTE_TABLE_NAME_SQL " (`name`,`order`) VALUES (?,(SELECT MAX(`order`)+1 FROM `" ATTRIBUTE_TABLE_NAME_SQL "`));"
+int attribute_insert(char*);
+int attribute_parse(char*,int*,int*);
+
+// recent
+#define RECENT_TABLE_NAME_SQL "recent"
+#define RECENT_CREATE_TABLE_SQL \
+ "CREATE TABLE IF NOT EXISTS `" RECENT_TABLE_NAME_SQL "` ( " \
+ "`name` TEXT NOT NULL, " \
+ "`date` TEXT NOT NULL, " \
+ "PRIMARY KEY(`name`,`date`), "\
+ "FOREIGN KEY(`name`) REFERENCES `workouts`(`name`)" \
+ ");"
+
+#define RECENT_GET_SQL "SELECT name, date FROM `" RECENT_TABLE_NAME_SQL "` ORDER BY date(`date`) DESC,`name` ASC LIMIT ?;"
+int recent_get(int,void(*)(const unsigned char*,const unsigned char*));
+
+#define RECENT_INSERT_SQL "INSERT INTO " RECENT_TABLE_NAME_SQL " (name,date) VALUES (?,?);"
+int recent_insert(char*,char*);
+
+// workouts
+#define WORKOUT_TABLE_NAME_SQL "workouts"
+#define WORKOUT_CREATE_TABLE_SQL \
+ "CREATE TABLE IF NOT EXISTS `" WORKOUT_TABLE_NAME_SQL "` ( " \
+ "`name` TEXT NOT NULL PRIMARY KEY, " \
+ "`attributes` INT DEFAULT 0" \
+ ");"
+
+#define WORKOUT_GET_BASE_SQL "SELECT " \
+ "`" WORKOUT_TABLE_NAME_SQL "`.name, " \
+ "`" WORKOUT_TABLE_NAME_SQL "`.attributes, " \
+ "`" RECENT_TABLE_NAME_SQL "`.date as last " \
+ "FROM `" WORKOUT_TABLE_NAME_SQL "` LEFT JOIN "\
+ "(SELECT name,date FROM `" RECENT_TABLE_NAME_SQL "` GROUP BY `name` HAVING MAX(date(`date`))) as `" RECENT_TABLE_NAME_SQL "`" \
+ " ON `" WORKOUT_TABLE_NAME_SQL "`.name = `" RECENT_TABLE_NAME_SQL "`.name"
+
+#define WORKOUT_GET_SQL WORKOUT_GET_BASE_SQL " WHERE (attributes & ?1) = ?1 AND (~attributes & ?2) = ?2 ORDER BY `last` DESC, `" WORKOUT_TABLE_NAME_SQL "`.name ASC LIMIT ?;"
+#define WORKOUT_GET_SEARCH_SQL WORKOUT_GET_BASE_SQL " WHERE `" WORKOUT_TABLE_NAME_SQL "`.name LIKE ('%' || ? || '%') AND (attributes & ?2) = ?2 AND (~attributes & ?3) = ?3 ORDER BY `last` DESC, `" WORKOUT_TABLE_NAME_SQL "`.name ASC LIMIT ?;"
+int workout_get(char*,char*,int,void (*)(const unsigned char*,int,const unsigned char*));
+
+#define WORKOUT_INSERT_SQL "INSERT INTO " WORKOUT_TABLE_NAME_SQL " (name,attributes) VALUES (?,?);"
+int workout_insert(char*, unsigned int);
+
+int workout_toggle(char*,char*);
+void workout_toggle_helper(const unsigned char*,int,const unsigned char*);
+
+#define WORKOUT_UPDATE_SQL "UPDATE `" WORKOUT_TABLE_NAME_SQL "` SET name = ?, attributes = ? WHERE name = ?;"
+int workout_update(char*,char*,int);
+
+#define CREATE_SCHEMA_SQL ATTRIBUTE_CREATE_TABLE_SQL RECENT_CREATE_TABLE_SQL WORKOUT_CREATE_TABLE_SQL
+
+int setup();
+
+#endif
\ No newline at end of file
--- /dev/null
+#ifndef __DEFAULT_H_
+#define __DEFAULT_H_
+
+#include<stdio.h>
+#include<stdlib.h>
+
+#include<opt.h>
+
+int defaults();
+
+#endif
\ No newline at end of file
--- /dev/null
+#ifndef __LS_H_
+#define __LS_H_
+
+#include<stdio.h>
+#include<stdlib.h>
+#include<string.h>
+
+#include<data.h>
+#include<usage.h>
+
+int ls(int,int,char**);
+void print_header(const unsigned char*);
+void print_workout(const unsigned char*,int,const unsigned char*);
+
+#endif
\ No newline at end of file
--- /dev/null
+#ifndef __MAIN_H_
+#define __MAIN_H_
+
+#include<stdio.h>
+#include<stdlib.h>
+
+#include<add.h>
+#include<attr.h>
+#include<default.h>
+#include<ls.h>
+#include<new.h>
+#include<opt.h>
+#include<recent.h>
+#include<toggle.h>
+#include<usage.h>
+
+#define UTIL_ADD "add"
+#define UTIL_ATTR "attr"
+#define UTIL_LS "ls"
+#define UTIL_NEW "new"
+#define UTIL_RECENT "recent"
+#define UTIL_TOGGLE "toggle"
+#define UTIL_VERSION "version"
+
+int main(int,char**);
+
+#endif
\ No newline at end of file
--- /dev/null
+#ifndef __NEW_H_
+#define __NEW_H_
+
+#include<stdio.h>
+#include<stdlib.h>
+
+#include<data.h>
+#include<opt.h>
+#include<usage.h>
+
+int new_workout(int,int,char**);
+
+#endif
\ No newline at end of file
--- /dev/null
+#ifndef __OPT_H_
+#define __OPT_H_
+
+#include<dirent.h>
+#include<errno.h>
+#include<stdio.h>
+#include<stdlib.h>
+#include<string.h>
+
+// global options
+struct options {
+ char *db_location;
+ char *homedir;
+ int rows;
+ unsigned char verbose;
+};
+
+extern struct options global_opts;
+
+enum option_code {
+ OPTION_ERROR,
+ OPTION_EXIT,
+ OPTION_HELP,
+ OPTION_INVALID,
+ OPTION_NO_MORE,
+ OPTION_SUCCESS
+};
+
+int option(char*);
+int long_option(char*);
+int short_option(char*);
+
+// specific option setters
+int set_homedir(char*);
+void set_rows(int);
+void set_verbose(unsigned char);
+
+#endif
\ No newline at end of file
--- /dev/null
+#ifndef __RECENT_H_
+#define __RECENT_H_
+
+#include<stdio.h>
+
+#include<data.h>
+
+void print_recent(const unsigned char*,const unsigned char*);
+int recent(int,int,char**);
+
+#endif
\ No newline at end of file
--- /dev/null
+#ifndef __TOGGLE_H_
+#define __TOGGLE_H_
+
+#include<stdio.h>
+#include<stdlib.h>
+
+#include<data.h>
+#include<usage.h>
+
+int toggle(int,int,char**);
+
+#endif
\ No newline at end of file
--- /dev/null
+#ifndef __USAGE_H_
+#define __USAGE_H_
+
+#include<stdio.h>
+
+void usage();
+
+#endif
\ No newline at end of file
--- /dev/null
+bin_PROGRAMS = workouts-server
+workouts_server_SOURCES = server.c server.h
\ No newline at end of file
--- /dev/null
+.DEFAULT: compile
+
+# compilation section
+CC=gcc
+CFLAGS=-g3 -Wall -Werror
+TARGET=server
+
+compile: server.o
+ $(CC) -o $(TARGET) server.o $(CFLAGS)
+
+%.o: %.c
+ $(CC) -c $^ -o $@ $(CFLAGS)
+
+start:
+ ./$(TARGET)
+
+clean:
+ rm -f $(TARGET)
+ find . -type f -name "*.o" -delete
\ No newline at end of file
--- /dev/null
+AC_PREREQ([2.69])
+AC_INIT([workouts-server], [0.0.1])
+
+# Store build files not in main directory
+AC_CONFIG_AUX_DIR([build-aux])
+
+AM_INIT_AUTOMAKE([foreign -Wall -Werror])
+
+AC_CONFIG_SRCDIR([server.c])
+AC_CONFIG_HEADERS([config.h])
+
+# Checks for programs.
+AC_PROG_CC
+
+# Checks for libraries.
+
+# Checks for header files.
+AC_CHECK_HEADERS([netdb.h netinet/in.h stdlib.h string.h sys/socket.h unistd.h])
+
+# Checks for typedefs, structures, and compiler characteristics.
+AC_TYPE_OFF_T
+
+# Checks for library functions.
+AC_FUNC_FORK
+AC_CHECK_FUNCS([memset socket])
+
+AC_CONFIG_FILES([Makefile])
+
+AC_OUTPUT
--- /dev/null
+#include<config.h>
+#include<server.h>
+
+#define PORT "8080"
+#define BACKLOG 10
+
+int main(int argc, char **argv) {
+ struct addrinfo hints, *res;
+ memset(&hints, 0, sizeof hints);
+ hints.ai_family = AF_UNSPEC;
+ hints.ai_socktype = SOCK_STREAM;
+ hints.ai_flags = AI_PASSIVE;
+
+ getaddrinfo(NULL, PORT, &hints, &res);
+
+ int sockfd;
+ if((sockfd=socket(PF_INET,SOCK_STREAM,0))==-1) { return EXIT_FAILURE; }
+
+ int yes = 1;
+ if (setsockopt(sockfd,SOL_SOCKET,SO_REUSEADDR,&yes,sizeof(int))==-1) { return EXIT_FAILURE; }
+
+ if (bind(sockfd,res->ai_addr,res->ai_addrlen)==-1) { return EXIT_FAILURE; }
+ if (listen(sockfd, BACKLOG) == -1) { return EXIT_FAILURE; }
+
+ struct sigaction sa;
+ sa.sa_handler = sigchld_handler; // reap all dead processes
+ sigemptyset(&sa.sa_mask);
+ sa.sa_flags = SA_RESTART;
+ if(sigaction(SIGCHLD,&sa,NULL)==-1) { return EXIT_FAILURE; }
+
+ printf("server started on port %s\nwaiting for connections...\n",PORT);
+
+ while(1) { // main accept() loop
+ int new_fd;
+ if((new_fd=accept(sockfd,NULL,NULL))==-1) { continue; }
+
+ if(!fork()) { // this is the child process
+ close(sockfd); // child doesn't need the listener
+
+ request(new_fd);
+ close(new_fd);
+
+ exit(EXIT_SUCCESS);
+ }
+ close(new_fd); // parent doesn't need this
+ }
+
+ return EXIT_SUCCESS;
+}
+
+void request(int sock) {
+ char buf[1024];
+ FILE *fp = NULL;
+
+ if(recv(sock,buf,1024,0)==-1) { perror("recv"); }
+
+ if(memcmp(buf,"GET / HTTP/1.1\r\n",16)==0) {
+ fp = fopen("index.html","r");
+ } else if(memcmp(buf,"GET /workouts.js HTTP/1.1\r\n",16)==0) {
+ fp = fopen("workouts.js","r");
+ } else if(memcmp(buf,"POST ",5)==0) {
+ char *body_p;
+ int body_len = body(buf,1024,&body_p);
+ if(body_len>0) {
+ passthru(sock,body_p,body_len);
+ return;
+ } else {
+ http_error(sock);
+ return;
+ }
+ } else {
+ http_not_found(sock);
+ return;
+ }
+
+ if(NULL==fp) {
+ perror("fopen");
+ http_not_found(sock);
+ return;
+ }
+
+ struct stat stats;
+ int fd = fileno(fp);
+ if(fstat(fd,&stats)==-1) {
+ perror("fstat");
+ http_error(sock);
+ return;
+ }
+
+ if(header(sock,stats.st_size)<0) {
+ http_error(sock);
+ return;
+ }
+
+ off_t offset = 0;
+ if(sendfile(sock,fileno(fp),&offset,stats.st_size)==-1) { perror("sendfile"); }
+
+ if(fclose(fp)!=0) { perror("fclose"); }
+}
+
+int header(int sock, long int size) {
+ char buf[1024];
+ int len;
+ if(size>=0) {
+ len = sprintf(buf,HTTP_RESPONSE_HEADER_CONTENT_LENGTH,size);
+ if(len<0) { return -1; }
+ }
+
+ if(send(sock,HTTP_RESPONSE_OK,HTTP_RESPONSE_OK_LENGTH,0)==-1) { perror("send"); }
+ if(send(sock,HTTP_RESPONSE_HEADER_SERVER,HTTP_RESPONSE_HEADER_SERVER_LENGTH,0)==-1) { perror("send"); }
+
+ if(size<0) { // transfer encoding
+ if(send(
+ sock,
+ HTTP_RESPONSE_HEADER_TRANSFER_ENCODING,
+ HTTP_RESPONSE_HEADER_TRANSFER_ENCODING_LENGTH,
+ 0
+ )==-1) { perror("send"); }
+ } else { // Content-Length
+ if(send(sock,buf,len,0)==-1) { perror("send"); }
+ }
+
+ if(send(
+ sock,
+ HTTP_RESPONSE_HEADER_CONTENT_TYPE,
+ HTTP_RESPONSE_HEADER_CONTENT_TYPE_LENGTH,
+ 0
+ )==-1) { perror("send"); }
+ if(send(
+ sock,
+ HTTP_RESPONSE_HEADER_DONE,
+ HTTP_RESPONSE_HEADER_DONE_LENGTH,
+ 0
+ )==-1) { perror("send"); }
+
+ return 1;
+}
+
+void http_not_found(int sock) {
+ if(send(sock,HTTP_RESPONSE_NOT_FOUND,HTTP_RESPONSE_NOT_FOUND_LENGTH,0)==-1) { perror("send"); }
+ if(send(sock,HTTP_RESPONSE_HEADER_DONE,HTTP_RESPONSE_HEADER_DONE_LENGTH,0)==-1) { perror("send"); }
+}
+
+void http_error(int sock) {
+ if(send(sock,HTTP_RESPONSE_INTERNAL_SERVER_ERROR,HTTP_RESPONSE_INTERNAL_SERVER_ERROR_LENGTH,0)==-1) { perror("send"); }
+ if(send(sock,HTTP_RESPONSE_HEADER_DONE,HTTP_RESPONSE_HEADER_DONE_LENGTH,0)==-1) { perror("send"); }
+}
+
+void sigchld_handler(int s) {
+ // waitpid() might overwrite errno, so we save and restore it:
+ int saved_errno = errno;
+ while(waitpid(-1, NULL, WNOHANG) > 0);
+ errno = saved_errno;
+}
+
+int body(char *buf, int buf_len, char **body_p) {
+ int body_len = -1;
+ int pos = 0;
+ while(pos<buf_len) {
+ if(memcmp(&(buf[pos]),HTTP_REQUEST_HEADER_CONTENT_LENGTH,HTTP_REQUEST_HEADER_CONTENT_LENGTH_LENGTH)==0) {
+ body_len = atoi(&(buf[pos+HTTP_REQUEST_HEADER_CONTENT_LENGTH_LENGTH]));
+ }
+
+ char *next_line = strstr(&(buf[pos]),HTTP_SEPARATOR);
+ if(NULL==next_line) {
+ *body_p = &(buf[pos]);
+ return body_len;
+ } else {
+ pos += (next_line - &(buf[pos]))+HTTP_SEPARATOR_LENGTH;
+ }
+ }
+ return -1;
+}
+
+void passthru(int sock, char *p,int len) {
+ char buffer[4096];
+ char *argv[10] = {NULL};
+ const char filename[] = "workouts";
+
+ char *home = getenv("HOME");
+ strcpy(buffer,"HOME=");
+ strcat(buffer,home);
+ char *envp[2] = {buffer,NULL};
+
+ int argc = 1;
+ argv[0] = filename;
+ argv[1] = &(p[0]);
+
+ for(int i=0;i<len;i++) {
+ if(p[i]=='\n') {
+ p[i] = '\0';
+ argc++;
+ if(i+1!=len) {
+ argv[argc] = &(p[i+1]);
+ }
+ }
+ }
+
+ int fds[2];
+ if(pipe(fds)==-1) {
+ perror("pipe");
+ http_error(sock);
+ return;
+ }
+
+ pid_t pid = fork();
+ if(pid==-1) {
+ perror("fork");
+ http_error(sock);
+ return;
+ } else if(pid==0) {
+ while((dup2(fds[1],STDOUT_FILENO)==-1)&&(errno==EINTR)) {}
+ close(fds[1]);
+ close(fds[0]);
+ execve("/usr/local/bin/workouts",argv,envp);
+ perror("execve");
+ exit(1);
+ }
+ close(fds[1]);
+
+ int status = 0;
+ if(wait(&status)==-1) {
+ perror("wait");
+ http_error(sock);
+ return;
+ }
+
+ if(status!=0) {
+ printf("invalid status [%d]\n",status);
+ // ssize_t count = read(fds[0],buffer,sizeof(buffer));
+ // printf("%s\n",buffer);
+ http_error(sock);
+ return;
+ }
+
+ if(header(sock,-1)<0) {
+ http_error(sock);
+ return;
+ }
+
+ char chunk_buf[30];
+ while(1) {
+ ssize_t count = read(fds[0],buffer,sizeof(buffer));
+ if(-1==count) {
+ if(EINTR==errno) {
+ continue;
+ } else {
+ perror("read");
+ return;
+ }
+ } else if(0==count) {
+ break;
+ }
+
+ len = sprintf(chunk_buf,HTTP_RESPONSE_HEADER_TRANSFER_CHUNK,count);
+ if(len<0) { return; }
+
+ if(send(sock,chunk_buf,len,0)==-1) { perror("send"); }
+
+ if(send(sock,buffer,count,0)!=count) {
+ perror("send");
+ return;
+ }
+
+ if(send(sock,HTTP_SEPARATOR,HTTP_SEPARATOR_LENGTH,0)==-1) { perror("send"); }
+ }
+
+ len = sprintf(chunk_buf,HTTP_RESPONSE_HEADER_TRANSFER_CHUNK,0);
+ if(len<0) { return; }
+
+ if(send(sock,chunk_buf,len,0)==-1) { perror("send"); }
+ if(send(sock,HTTP_SEPARATOR,HTTP_SEPARATOR_LENGTH,0)==-1) { perror("send"); }
+}
\ No newline at end of file
--- /dev/null
+#ifndef __SERVER_H_
+#define __SERVER_H_
+
+#include<errno.h>
+#include<netdb.h>
+#include<netinet/in.h>
+#include<signal.h>
+#include<stdio.h>
+#include<stdlib.h>
+#include<string.h>
+#include<sys/sendfile.h>
+#include<sys/socket.h>
+#include<sys/stat.h>
+#include<sys/wait.h>
+#include<unistd.h>
+
+#define HTTP_SEPARATOR "\r\n"
+#define HTTP_SEPARATOR_LENGTH 2
+
+#define HTTP_RESPONSE_OK "HTTP/1.1 200 OK\r\n"
+#define HTTP_RESPONSE_OK_LENGTH 17
+#define HTTP_RESPONSE_NOT_FOUND "HTTP/1.1 404 Not Found\r\n"
+#define HTTP_RESPONSE_NOT_FOUND_LENGTH 24
+#define HTTP_RESPONSE_INTERNAL_SERVER_ERROR "HTTP/1.1 500 Internal Server Error\r\n"
+#define HTTP_RESPONSE_INTERNAL_SERVER_ERROR_LENGTH 36
+#define HTTP_RESPONSE_BAD_REQUEST "HTTP/1.1 400 Bad Request\r\n"
+#define HTTP_RESPONSE_BAD_REQUEST_LENGTH 26
+#define HTTP_RESPONSE_HEADER_SERVER "Server: workouts\r\n"
+#define HTTP_RESPONSE_HEADER_SERVER_LENGTH 18
+#define HTTP_RESPONSE_HEADER_CONTENT_LENGTH "Content-Length: %ld\r\n"
+#define HTTP_RESPONSE_HEADER_CONTENT_TYPE "Content-Type: text/html; charset=UTF-8\r\n"
+#define HTTP_RESPONSE_HEADER_CONTENT_TYPE_LENGTH 40
+#define HTTP_RESPONSE_HEADER_TRANSFER_ENCODING "Transfer-Encoding: chunked\r\n"
+#define HTTP_RESPONSE_HEADER_TRANSFER_ENCODING_LENGTH 28
+#define HTTP_RESPONSE_HEADER_TRANSFER_CHUNK "%x" HTTP_SEPARATOR
+#define HTTP_RESPONSE_HEADER_DONE HTTP_SEPARATOR
+#define HTTP_RESPONSE_HEADER_DONE_LENGTH HTTP_SEPARATOR_LENGTH
+
+#define HTTP_REQUEST_HEADER_CONTENT_LENGTH "Content-Length: "
+#define HTTP_REQUEST_HEADER_CONTENT_LENGTH_LENGTH 16
+
+int main(int,char**);
+int header(int,long int);
+void http_not_found(int);
+void http_error(int);
+void request(int);
+void sigchld_handler(int);
+int body(char*,int,char**);
+void passthru(int,char*,int);
+
+#endif
\ No newline at end of file
--- /dev/null
+#include<add.h>
+
+int add(int i, int argc, char **argv) {
+ if(i==argc) {
+ printf("`workouts add` requires at least 1 argument\n");
+ usage();
+ return EXIT_FAILURE;
+ }
+
+
+ char buf[11];
+ if(i+1==argc) { // no date given
+ time_t t = time(NULL);
+ struct tm now = *localtime(&t);
+ if(strftime(buf,11,"%Y-%m-%d",&now)==0) { return EXIT_FAILURE; }
+ } else {
+ int YY, MM, DD;
+ struct tm when = {0};
+
+ if(sscanf(argv[i+1],"%d-%d-%d", &YY, &MM, &DD)!=3) {
+ printf("invalid date given\n");
+ return EXIT_FAILURE;
+ }
+
+ when.tm_year = YY - 1900;
+ when.tm_mon = MM - 1;
+ when.tm_mday = DD;
+ if(strftime(buf,11,"%Y-%m-%d",&when)==0) { return EXIT_FAILURE; }
+ }
+
+ if(recent_insert(argv[i],buf)<0) {
+ printf("add failed\n");
+ return EXIT_FAILURE;
+ }
+
+ printf("added workout %s on %s\n",argv[i],buf);
+
+ return EXIT_SUCCESS;
+}
\ No newline at end of file
--- /dev/null
+#include<attr.h>
+
+int attr(int i, int argc, char **argv) {
+ if(i>argc) { return EXIT_FAILURE; }
+
+ if(i==argc) { return attr_ls(); }
+
+ if(0==memcmp(argv[i],"add",3)) {
+ if(i+2!=argc) {
+ printf("wrong number of arguments for attr add\n");
+ usage();
+ return EXIT_FAILURE;
+ }
+
+ return attr_add(argv[i+1]);
+ }
+
+ if(i+1!=argc) {
+ printf("unknown command attr \"%s\"\n",argv[i+1]);
+ usage();
+ return EXIT_FAILURE;
+ }
+
+ return attr_ls();
+}
+
+int attr_add(char *name) {
+ if(attribute_insert(name)<0) {
+ printf("attribute insert failed\n");
+ return EXIT_FAILURE;
+ }
+
+ printf("New attribute added: %s\n",name);
+ return EXIT_SUCCESS;
+}
+
+int attr_ls() {
+ if(attribute_get(&print_attr)<0) {
+ printf("command failed\n");
+ return EXIT_FAILURE;
+ }
+
+ return EXIT_SUCCESS;
+}
+
+void print_attr(const unsigned char *name) {
+ printf("%s\n",name);
+}
\ No newline at end of file
+++ /dev/null
-import {constants} from '../constants.js';
-const {DEFAULT_ATTRIBUTES} = constants;
-
-export default class workout {
- constructor(toClone) {
- if((toClone !== void(0))&&(toClone instanceof workout)) {
- this.attributes = {...toClone.attributes};
- this.datesDone = [...toClone.datesDone];
- this.name = toClone.name;
- this.description = toClone.description;
- } else {
- this.attributes = {...DEFAULT_ATTRIBUTES};
- this.datesDone = [];
- this.name = "New Workout";
- this.description = "";
- if(typeof toClone == "object") {
- if(toClone.attributes !== void(0)) {
- for(let i in toClone.attributes) {
- if(toClone.attributes[i] === true) {
- try {
- this.toggleAttribute(i);
- } catch(err) {
-
- }
- }
- }
- }
- if(toClone.datesDone !== void(0)) {
- try {
- this.add(toClone.datesDone);
- } catch(err) {
-
- }
- }
- if(toClone.name !== void(0)) {
- try {
- this.setName(toClone.name);
- } catch(err) {
-
- }
- }
- if(toClone.description !== void(0)) {
- try {
- this.changeDescription(toClone.description);
- } catch(err) {
-
- }
- }
- }
- }
- }
- add(dates) { // add new workout to datesDone
- if(!(dates instanceof Array)) {
- throw new TypeError('Workout::add(dates) expects parameter `dates` to be an array of dates');
- }
- dates = dates.map((date) => Date.parse(date));
- if(!(dates.every((x) => !isNaN(x)))) {
- throw new TypeError('Workout::add(dates) expects parameter `dates` to be an array of dates');
- }
- this.datesDone = [
- ...new Set([
- ...this.datesDone,
- ...dates.map((date) => {
- return new Date(date)
- .toISOString()
- .split("T")[0];
- })
- ])
- ];
- this.datesDone.sort((a,b) => {
- return a<b;
- });
- }
- changeDescription(str) {
- if(typeof str != "string") {
- throw new TypeError('Workout::changeDescription(str) expects parameter `str` to be a string');
- }
- this.description = str;
- }
- export() {
- throw new Error("Not implemented");
- }
- get last_done() {
- let res = this.datesDone.slice(0,1);
- if(res.length==0) {
- return "";
- } else {
- return res[0];
- }
- }
- remove(date) {
- for(let i=0;i<this.datesDone.length;i++) {
- if(this.datesDone[i]==date) {
- this.datesDone.splice(i,1);
- }
- }
- }
- setName(name) {
- if(typeof name != "string") {
- throw new TypeError('Workout::setName(name) expects parameter `name` to be a string');
- }
- this.name = name;
- }
- get times_done() {
- return this.datesDone.length;
- }
- toggleAttribute(attr) {
- if(this.attributes[attr] === void(0)) {
- throw new TypeError('Workout::toggleAttribute(attr) expects parameter `attr` to be a valid attribute');
- }
- this.attributes[attr] = !this.attributes[attr];
- }
-}
\ No newline at end of file
+++ /dev/null
-:local(.container) {
- width:100%;
- height:10vh;
- text-align:center;
- border:2px solid black;
- box-sizing:border-box;
-}
-
-:local(.h2) {
-
-}
\ No newline at end of file
+++ /dev/null
-import style from './header.css';
-
-export default class header extends React.Component {
- render() {
- return createElement("div",{className:style.container},
- createElement("h2",{className:style.h2},"Workouts")
- );
- }
-}
\ No newline at end of file
+++ /dev/null
-import style from './main.css';
-
-import {daysAgo} from '../days.ago/days.ago.js';
-import header from '../header/header.js';
-import {manage} from '../manage/manage.js';
-import {recent} from '../recent/recent.js';
-
-export default class Main extends React.Component {
- constructor(props) {
- super(props);
- this.save = this.save.bind(this);
- this.switchView = this.switchView.bind(this);
- this.handleKeyPress = this.handleKeyPress.bind(this);
- }
- componentDidMount() {
- document.addEventListener('keydown',this.handleKeyPress);
- }
- componentWillUnmount() {
- document.removeEventListener('keydown',this.handleKeyPress);
- }
- handleKeyPress(event) {
- if(event.ctrlKey) {
- if(event.key=="s") {
- this.save();
- event.preventDefault();
- }
- }
- }
- save() {
- const {workouts,save} = this.props;
- save(workouts);
- }
- switchView(type) {
- this.props.switchView(type);
- }
- render() {
- const {view} = this.props;
- const otherView = (view=="manage")?"recent":"manage";
- return createElement("div",{className:style.container},
- createElement("div",{className:style.headerContainer},
- createElement(header,null)
- ),
- createElement("div",{className:style.viewContainer},
- createElement("div",{className:style.subHeaderContainer},
- createElement(daysAgo,null),
- createElement("input",{type:"button",onClick:this.switchView.bind(this,otherView),value:otherView}),
- createElement("input",{type:"button",onClick:this.save,value:"Save Workouts"})
- ),
- (view=="manage")?createElement(manage,null):createElement(recent,null)
- )
- );
- }
-}
\ No newline at end of file
+++ /dev/null
-import {connect} from 'react-redux';
-
-import Main from './main.component.js';
-
-import {constants} from '../../constants.js';
-const {CHANGE_VIEW,SORT_VIEW} = constants;
-
-const mapStateToParentProps = (state) => {
- const {workouts} = state;
- return {
- workouts
- };
-}
-
-const mapStateToProps = (state) => {
- const {view} = state.view;
- return {
- view
- };
-};
-
-const mapDispatchToProps = (dispatch,ownProps) => {
- return {
- switchView:(view) => {
- dispatch({
- type:CHANGE_VIEW,
- workouts:ownProps.workouts,
- view
- });
- dispatch({
- type:SORT_VIEW,
- key:(view=="manage")?"last_done":"date",
- order:(view==="manage")?"asc":"desc",
- shift:false
- });
- }
- };
-};
-
-
-export const main = connect(
- mapStateToParentProps
-)(connect(
- mapStateToProps,
- mapDispatchToProps
-)(Main));
\ No newline at end of file
+++ /dev/null
-import {connect} from 'react-redux';
-
-import Manage from './manage.component.js';
-
-import {constants} from '../../constants.js';
-const {ADD_WORKOUT,CHANGE_ATTRIBUTE,CHANGE_WORKOUT_DESCRIPTION,CHANGE_WORKOUT_NAME,NEW_WORKOUT,SORT_VIEW} = constants;
-
-const mapStateToProps = (state) => {
- return {
- workouts:state.view.data
- };
-};
-
-const mapDispatchToProps = (dispatch) => {
- return {
- changeDescription:(name,val) => {
- dispatch({
- type:CHANGE_WORKOUT_DESCRIPTION,
- workout:name,
- description:val
- });
- },
- changeName:(name,val) => {
- dispatch({
- type:CHANGE_WORKOUT_NAME,
- workout:name,
- name:val
- });
- },
- completeWorkout:(workout) => {
- const now = new Date();
- dispatch({
- type:ADD_WORKOUT,
- name:workout,
- toAdd:[new Date(now.getTime() - (now.getTimezoneOffset() * 60000 ))
- .toISOString()
- .split("T")[0]
- ]
- });
- },
- newWorkout:() => {
- dispatch({
- type:NEW_WORKOUT
- });
- },
- sort:(key,shift) => {
- dispatch({
- type:SORT_VIEW,
- key,
- shift
- });
- },
- toggleAttribute:(name,attr) => {
- dispatch({
- type:CHANGE_ATTRIBUTE,
- workout:name,
- attribute:attr
- });
- }
- }
-};
-
-export const manage = connect(
- mapStateToProps,
- mapDispatchToProps
-)(Manage);
\ No newline at end of file
+++ /dev/null
-import {connect} from 'react-redux';
-
-import Recent from './recent.component.js';
-
-import {constants} from '../../constants.js';
-const {CHANGE_WORKOUT_DATE,SORT_VIEW} = constants;
-
-const mapStateToProps = (state) => {
- return {
- data:state.view.data.slice(0,100)
- };
-}
-
-const mapDispatchToProps = (dispatch) => {
- return {
- handleDateChange:(workout,old,date) => {
- dispatch({
- type:CHANGE_WORKOUT_DATE,
- workout,
- old,
- new:date
- });
- },
- handleSort:(key) => {
- dispatch({
- type:SORT_VIEW,
- key,
- shift:false
- });
- }
- };
-}
-
-export const recent = connect(
- mapStateToProps,
- mapDispatchToProps
-)(Recent);
\ No newline at end of file
--- /dev/null
+#include<data.h>
+
+int attribute_count() {
+ int count = 0;
+
+ sqlite3 *db_p = NULL;
+ sqlite3_stmt *stmt_p = NULL;
+
+ if(sqlite3_open_v2(global_opts.db_location,&db_p,SQLITE_OPEN_READWRITE,NULL)!=SQLITE_OK) { goto cleanup; }
+
+ if(sqlite3_prepare_v2(db_p,ATTRIBUTE_COUNT_SQL,-1,&stmt_p,NULL)!=SQLITE_OK) { goto cleanup; }
+
+ if(sqlite3_step(stmt_p)!=SQLITE_ROW) { goto cleanup; }
+
+ count = sqlite3_column_int(stmt_p,0);
+
+ if(sqlite3_finalize(stmt_p)!=SQLITE_OK) { goto cleanup; }
+ stmt_p = NULL;
+
+ if(sqlite3_close_v2(db_p)!=SQLITE_OK) { goto cleanup; }
+
+ return count;
+ cleanup:
+ if(stmt_p!=NULL) { sqlite3_finalize(stmt_p); }
+ if(db_p!=NULL) { sqlite3_close_v2(db_p); }
+ return -1;
+}
+
+int attribute_get(void (*print)(const unsigned char*)) {
+ sqlite3 *db_p = NULL;
+ sqlite3_stmt *stmt_p = NULL;
+
+ if(sqlite3_open_v2(global_opts.db_location,&db_p,SQLITE_OPEN_READWRITE,NULL)!=SQLITE_OK) { goto cleanup; }
+
+ if(sqlite3_prepare_v2(db_p,ATTRIBUTE_GET_SQL,-1,&stmt_p,NULL)!=SQLITE_OK) { goto cleanup; }
+
+ int ret;
+ while((ret = sqlite3_step(stmt_p))==SQLITE_ROW) {
+ const unsigned char *name = sqlite3_column_text(stmt_p,0);
+ print(name);
+ }
+
+ if(ret!=SQLITE_DONE) { goto cleanup; }
+
+ if(sqlite3_finalize(stmt_p)!=SQLITE_OK) { goto cleanup; }
+ stmt_p = NULL;
+
+ if(sqlite3_close_v2(db_p)!=SQLITE_OK) { goto cleanup; }
+
+ return 1;
+ cleanup:
+ if(stmt_p!=NULL) { sqlite3_finalize(stmt_p); }
+ if(db_p!=NULL) { sqlite3_close_v2(db_p); }
+ return -1;
+}
+
+struct attribute_indexer {
+ int i;
+ int index;
+ char *name;
+};
+
+struct attribute_indexer indexer = {
+ 0,
+ 0,
+ NULL,
+};
+
+int attribute_index(char *name) {
+ indexer.i = 0;
+ indexer.index = -1;
+ indexer.name = name;
+
+ if(attribute_get(&attribute_index_helper)<0) { return -1; }
+
+ return indexer.index;
+}
+
+void attribute_index_helper(const unsigned char *name) {
+ if(strcmp(indexer.name,(const char*) name)==0) {
+ indexer.index = indexer.i;
+ }
+ indexer.i++;
+}
+
+int attribute_insert(char *name) {
+ sqlite3 *db_p = NULL;
+ sqlite3_stmt *stmt_p = NULL;
+
+ if(sqlite3_open_v2(global_opts.db_location,&db_p,SQLITE_OPEN_READWRITE,NULL)!=SQLITE_OK) { goto cleanup; }
+
+ if(sqlite3_prepare_v2(db_p,ATTRIBUTE_INSERT_SQL,-1,&stmt_p,NULL)!=SQLITE_OK) { goto cleanup; }
+ if(sqlite3_bind_text(stmt_p,1,name,-1,SQLITE_STATIC)!=SQLITE_OK) { goto cleanup; }
+
+ if(sqlite3_step(stmt_p)!=SQLITE_DONE) { goto cleanup; }
+ if(sqlite3_finalize(stmt_p)!=SQLITE_OK) { goto cleanup; }
+ stmt_p = NULL;
+
+ if(sqlite3_close_v2(db_p)!=SQLITE_OK) { goto cleanup; }
+
+ return 1;
+ cleanup:
+ if(stmt_p!=NULL) { sqlite3_finalize(stmt_p); }
+ if(db_p!=NULL) { sqlite3_close_v2(db_p); }
+ return -1;
+}
+
+int attribute_parse(char *str, int *required, int *exclude) {
+ if(NULL==str) { return -1; }
+ if(NULL==required) { return -1; }
+
+ int len = strlen(str);
+ for(int i=0;i<len;i++) {
+ (*required) <<= 1;
+ if(exclude!=NULL) {
+ (*exclude) <<= 1;
+ }
+
+ if(str[i]=='1') {
+ (*required)++;
+ } else if(str[i]=='0') {
+ if(exclude!=NULL) {
+ (*exclude)++;
+ }
+ } else if(str[i]!='x') {
+ return -1;
+ }
+ }
+
+ return 1;
+}
\ No newline at end of file
--- /dev/null
+#include<data.h>
+
+int recent_get(int limit,void (*f)(const unsigned char*,const unsigned char*)) {
+ sqlite3 *db_p = NULL;
+ sqlite3_stmt *stmt_p = NULL;
+
+ if(sqlite3_open_v2(global_opts.db_location,&db_p,SQLITE_OPEN_READWRITE,NULL)!=SQLITE_OK) { goto cleanup; }
+
+ if(sqlite3_prepare_v2(db_p,RECENT_GET_SQL,-1,&stmt_p,NULL)!=SQLITE_OK) { goto cleanup; }
+ if(sqlite3_bind_int(stmt_p,1,limit)!=SQLITE_OK) { goto cleanup; }
+
+ int ret;
+ while((ret = sqlite3_step(stmt_p))==SQLITE_ROW) {
+ const unsigned char *name_p = sqlite3_column_text(stmt_p,0);
+ const unsigned char *date_p = sqlite3_column_text(stmt_p,1);
+ f(name_p,date_p);
+ }
+
+ if(ret!=SQLITE_DONE) { goto cleanup; }
+
+ if(sqlite3_finalize(stmt_p)!=SQLITE_OK) { goto cleanup; }
+ stmt_p = NULL;
+
+ if(sqlite3_close_v2(db_p)!=SQLITE_OK) { goto cleanup; }
+
+ return 1;
+ cleanup:
+ if(stmt_p!=NULL) { sqlite3_finalize(stmt_p); }
+ if(db_p!=NULL) { sqlite3_close_v2(db_p); }
+ return -1;
+}
+
+int recent_insert(char *workout, char *date) {
+ sqlite3 *db_p = NULL;
+ sqlite3_stmt *stmt_p = NULL;
+
+ if(sqlite3_open_v2(global_opts.db_location,&db_p,SQLITE_OPEN_READWRITE,NULL)!=SQLITE_OK) { goto cleanup; }
+
+ if(sqlite3_exec(db_p,"PRAGMA foreign_keys = ON;",NULL,NULL,NULL)!=SQLITE_OK) { goto cleanup; }
+
+ if(sqlite3_prepare_v2(db_p,RECENT_INSERT_SQL,-1,&stmt_p,NULL)!=SQLITE_OK) { goto cleanup; }
+ if(sqlite3_bind_text(stmt_p,1,workout,-1,SQLITE_STATIC)!=SQLITE_OK) { goto cleanup; }
+ if(sqlite3_bind_text(stmt_p,2,date,-1,SQLITE_STATIC)!=SQLITE_OK) { goto cleanup; }
+
+ if(sqlite3_step(stmt_p)!=SQLITE_DONE) { goto cleanup; }
+ if(sqlite3_finalize(stmt_p)!=SQLITE_OK) { goto cleanup; }
+ stmt_p = NULL;
+
+ if(sqlite3_close_v2(db_p)!=SQLITE_OK) { goto cleanup; }
+
+ return 1;
+ cleanup:
+ if(stmt_p!=NULL) { sqlite3_finalize(stmt_p); }
+ if(db_p!=NULL) { sqlite3_close_v2(db_p); }
+ return -1;
+}
\ No newline at end of file
--- /dev/null
+#include<data.h>
+
+int setup() {
+ sqlite3 *db_p = NULL;
+
+ if(sqlite3_open_v2(global_opts.db_location,&db_p,SQLITE_OPEN_READWRITE | SQLITE_OPEN_CREATE,NULL)!=SQLITE_OK) { goto cleanup; }
+
+ if(sqlite3_exec(db_p,CREATE_SCHEMA_SQL,NULL,NULL,NULL)!=SQLITE_OK) { goto cleanup; }
+
+ if(sqlite3_close_v2(db_p)!=SQLITE_OK) { goto cleanup; }
+
+ return 1;
+ cleanup:
+ if(db_p!=NULL) { sqlite3_close_v2(db_p); }
+ return -1;
+}
\ No newline at end of file
--- /dev/null
+#include<data.h>
+
+int workout_get(char *term, char *filter, int limit, void (*print_row)(const unsigned char*,int,const unsigned char*)) {
+ sqlite3 *db_p = NULL;
+ sqlite3_stmt *stmt_p = NULL;
+
+ int required = 0;
+ int exclude = 0;
+ if(NULL!=filter) {
+ if(attribute_parse(filter,&required,&exclude)<0) { return -1; }
+ }
+
+ if(sqlite3_open_v2(global_opts.db_location,&db_p,SQLITE_OPEN_READWRITE,NULL)!=SQLITE_OK) { goto cleanup; }
+
+ if(NULL==term) {
+ if(sqlite3_prepare_v2(db_p,WORKOUT_GET_SQL,-1,&stmt_p,NULL)!=SQLITE_OK) { goto cleanup; }
+ if(sqlite3_bind_int(stmt_p,1,required)!=SQLITE_OK) { goto cleanup; }
+ if(sqlite3_bind_int(stmt_p,2,exclude)!=SQLITE_OK) { goto cleanup; }
+ if(sqlite3_bind_int(stmt_p,3,limit)!=SQLITE_OK) { goto cleanup; }
+ } else {
+ if(sqlite3_prepare_v2(db_p,WORKOUT_GET_SEARCH_SQL,-1,&stmt_p,NULL)!=SQLITE_OK) { goto cleanup; }
+ if(sqlite3_bind_text(stmt_p,1,term,-1,SQLITE_STATIC)!=SQLITE_OK) { goto cleanup; }
+ if(sqlite3_bind_int(stmt_p,2,required)!=SQLITE_OK) { goto cleanup; }
+ if(sqlite3_bind_int(stmt_p,3,exclude)!=SQLITE_OK) { goto cleanup; }
+ if(sqlite3_bind_int(stmt_p,4,limit)!=SQLITE_OK) { goto cleanup; }
+ }
+
+ int ret;
+ while((ret = sqlite3_step(stmt_p))==SQLITE_ROW) {
+ const unsigned char *name_p = sqlite3_column_text(stmt_p,0);
+ const unsigned char *last_p = sqlite3_column_text(stmt_p,2);
+ print_row(name_p,sqlite3_column_int(stmt_p,1),last_p);
+ }
+
+ if(ret!=SQLITE_DONE) { goto cleanup; }
+
+ if(sqlite3_finalize(stmt_p)!=SQLITE_OK) { goto cleanup; }
+ stmt_p = NULL;
+
+ if(sqlite3_close_v2(db_p)!=SQLITE_OK) { goto cleanup; }
+
+ return 1;
+ cleanup:
+ if(stmt_p!=NULL) { sqlite3_finalize(stmt_p); }
+ if(db_p!=NULL) { sqlite3_close_v2(db_p); }
+ return -1;
+}
+
+int workout_insert(char *name, unsigned int flags) {
+ sqlite3 *db_p = NULL;
+ sqlite3_stmt *stmt_p = NULL;
+
+ if(sqlite3_open_v2(global_opts.db_location,&db_p,SQLITE_OPEN_READWRITE,NULL)!=SQLITE_OK) { goto cleanup; }
+
+ if(sqlite3_prepare_v2(db_p,WORKOUT_INSERT_SQL,-1,&stmt_p,NULL)!=SQLITE_OK) { goto cleanup; }
+ if(sqlite3_bind_text(stmt_p,1,name,-1,SQLITE_STATIC)!=SQLITE_OK) { goto cleanup; }
+ if(sqlite3_bind_int(stmt_p,2,flags)!=SQLITE_OK) { goto cleanup; }
+
+ if(sqlite3_step(stmt_p)!=SQLITE_DONE) { goto cleanup; }
+ if(sqlite3_finalize(stmt_p)!=SQLITE_OK) { goto cleanup; }
+ stmt_p = NULL;
+
+ if(sqlite3_close_v2(db_p)!=SQLITE_OK) { goto cleanup; }
+
+ return 1;
+ cleanup:
+ if(stmt_p!=NULL) { sqlite3_finalize(stmt_p); }
+ if(db_p!=NULL) { sqlite3_close_v2(db_p); }
+ return -1;
+}
+
+struct workout_toggler {
+ char *name;
+ int attributes;
+};
+
+struct workout_toggler toggler = {
+ NULL,
+ 0
+};
+
+int workout_toggle(char *name, char *attribute) {
+ int index = attribute_index(attribute);
+ if(index<0) { return -1; }
+
+ toggler.name = name;
+ toggler.attributes = 0;
+
+ if(workout_get(
+ name, /* term */
+ NULL, /* filter */
+ -1, /* limit */
+ &workout_toggle_helper /* print function */
+ )<0) { return -1; }
+
+ if(toggler.name!=NULL) { return -1; }
+
+ toggler.attributes ^= 1<<index;
+ if(workout_update(name,name,toggler.attributes)<0) { return -1; }
+
+ return 1;
+}
+
+void workout_toggle_helper(const unsigned char *name, int flags, const unsigned char *last) {
+ if(toggler.name!=NULL) {
+ if(strcmp(toggler.name,(const char*) name)==0) {
+ toggler.attributes = flags;
+ toggler.name = NULL;
+ }
+ }
+}
+
+int workout_update(char *old, char *name, int flags) {
+ sqlite3 *db_p = NULL;
+ sqlite3_stmt *stmt_p = NULL;
+
+ if(sqlite3_open_v2(global_opts.db_location,&db_p,SQLITE_OPEN_READWRITE,NULL)!=SQLITE_OK) { goto cleanup; }
+
+ if(sqlite3_exec(db_p,"PRAGMA foreign_keys = ON;",NULL,NULL,NULL)!=SQLITE_OK) { goto cleanup; }
+
+ if(sqlite3_prepare_v2(db_p,WORKOUT_UPDATE_SQL,-1,&stmt_p,NULL)!=SQLITE_OK) { goto cleanup; }
+ if(sqlite3_bind_text(stmt_p,1,name,-1,SQLITE_STATIC)!=SQLITE_OK) { goto cleanup; }
+ if(sqlite3_bind_int(stmt_p,2,flags)!=SQLITE_OK) { goto cleanup; }
+ if(sqlite3_bind_text(stmt_p,3,old,-1,SQLITE_STATIC)!=SQLITE_OK) { goto cleanup; }
+
+ if(sqlite3_step(stmt_p)!=SQLITE_DONE) { goto cleanup; }
+ if(sqlite3_finalize(stmt_p)!=SQLITE_OK) { goto cleanup; }
+ stmt_p = NULL;
+
+ if(sqlite3_close_v2(db_p)!=SQLITE_OK) { goto cleanup; }
+
+ return 1;
+ cleanup:
+ if(stmt_p!=NULL) { sqlite3_finalize(stmt_p); }
+ if(db_p!=NULL) { sqlite3_close_v2(db_p); }
+ return -1;
+}
\ No newline at end of file
--- /dev/null
+#include<default.h>
+
+int defaults() {
+ char *p;
+
+ // homedir
+ p = getenv("WORKOUTS_HOME");
+ if(p==NULL) {
+ p = getenv("HOME");
+ if(NULL==p) {
+ printf("HOME or WORKOUTS_HOME env variable must be defined\n");
+ return -1;
+ }
+ }
+
+ if(set_homedir(p)<0) {
+ printf("HOME or WORKOUTS_HOME env value invalid\n");
+ return -1;
+ }
+
+ set_rows(-1);
+
+ set_verbose(0);
+
+ return 0;
+}
\ No newline at end of file
+++ /dev/null
-import {render} from 'react-dom';
-
-import {createStore} from 'redux';
-
-import {Provider} from 'react-redux';
-
-import reducers from 'reducers/combined.js';
-
-import {main} from 'components/main/main.js';
-
-import workout from 'classes/workout.js';
-
-import data from '../workouts.json';
-
-const defaultSaveFunction = (data) => {
- const content = JSON.stringify(data);
- var a = document.createElement('a');
- var blob = new Blob([content], {'type':'application/octet-stream'});
- a.href = window.URL.createObjectURL(blob);
- a.download = 'workouts.json';
- document.body.appendChild(a);
- a.click();
- setTimeout(() => {
- document.body.removeChild(a);
- window.URL.revokeObjectURL(blob);
- }, 0);
-};
-
-window.workoutsInit = (anchor,saveCb) => {
- if(!(anchor instanceof HTMLElement)) {
- throw new Error("Invalid anchor");
- }
- // Import data into store
- if((data !== void(0))&&(typeof data =="object")) {
- for(let i in data) {
- data[i] = new workout(data[i]);
- }
- }
- const store = createStore(reducers,{workouts:data});
- if(typeof saveCb != "function") {
- saveCb = defaultSaveFunction;
- }
- render(
- createElement(Provider,{store},
- createElement(main,{save:saveCb})
- ),
- anchor
- );
-};
\ No newline at end of file
--- /dev/null
+#include<ls.h>
+
+struct ls_helper {
+ int i;
+ int attr_count;
+};
+
+struct ls_helper helper = {
+ 0,
+ 0
+};
+
+int ls(int i, int argc, char **argv) {
+ char *filter_p = NULL;
+ /*
+ Cases:
+ -filter by attribute value: workouts --filter 011xx100
+ -search by name: workouts P90X
+
+ All together: workouts --filter 01xx1001 P90X
+
+ 0: must not have attribute
+ 1: must have attribute
+ x: can have attribute
+ */
+
+ helper.attr_count = attribute_count();
+ if(attribute_get(&print_header)<0) { return -1; }
+
+ if(i+1<argc) {
+ if(memcmp(argv[i],"--filter",8)==0) {
+ filter_p = argv[i+1];
+ i += 2;
+ }
+ }
+
+ switch(argc-i) {
+ case 0:
+ return (workout_get(
+ NULL, /* term */
+ filter_p, /* filter */
+ global_opts.rows, /* limit */
+ &print_workout /* print_function */
+ )<0)?EXIT_FAILURE:EXIT_SUCCESS;
+ case 1:
+ return (workout_get(
+ argv[i], /* term */
+ filter_p, /* filter */
+ global_opts.rows, /* limit */
+ &print_workout /* print function */
+ )<0)?EXIT_FAILURE:EXIT_SUCCESS;
+ default:
+ printf("invalid usage\n");
+ usage();
+ return EXIT_FAILURE;
+ }
+}
+
+void print_header(const unsigned char *name) {
+ if((helper.attr_count>0)&&(helper.i==0)) {
+ printf("Attributes:\t");
+ }
+ printf("%s\t",name);
+ helper.i++;
+ if(helper.i==helper.attr_count) {
+ printf("\n");
+ }
+}
+
+#define PRINT_WORKOUT_FORMAT "%s [%d] [Last done: %s]\n"
+#define PRINT_WORKOUT_FORMAT_LAST_NULL "%s [%d] [Last done: N/A]\n"
+
+void print_workout(const unsigned char *name, int attr_flags, const unsigned char *last) {
+ printf((NULL==last)?PRINT_WORKOUT_FORMAT_LAST_NULL:PRINT_WORKOUT_FORMAT,name,attr_flags,last);
+}
\ No newline at end of file
--- /dev/null
+#include<config.h>
+#include<main.h>
+
+int main(int argc, char **argv) {
+ int i,ret;
+
+ if(defaults()<0) { return EXIT_FAILURE; }
+
+ i = 1;
+ do {
+ ret = option(argv[i]);
+ switch(ret) {
+ case OPTION_NO_MORE:
+ goto exit_options;
+ case OPTION_HELP:
+ usage();
+ return EXIT_SUCCESS;
+ case OPTION_INVALID:
+ printf("invalid option: %s\n\n",argv[i]);
+ usage();
+ return EXIT_FAILURE;
+ case OPTION_ERROR:
+ printf("unknown error occured\n");
+ return EXIT_FAILURE;
+ case OPTION_EXIT:
+ return EXIT_FAILURE;
+ default:
+ i++;
+ break;
+ }
+ } while(ret>0);
+
+ exit_options:
+ if(setup()<0) { return EXIT_FAILURE; }
+ char *cmd = argv[i];
+
+ if(NULL!=cmd) {
+ i++;
+ if(strcmp(cmd,UTIL_ADD)==0) {
+ return add(i,argc,argv);
+ } else if(strcmp(cmd,UTIL_ATTR)==0) {
+ return attr(i,argc,argv);
+ } else if(strcmp(cmd,UTIL_LS)==0) {
+ return ls(i,argc,argv);
+ } else if(strcmp(cmd,UTIL_NEW)==0) {
+ return new_workout(i,argc,argv);
+ } else if(strcmp(cmd,UTIL_RECENT)==0) {
+ return recent(i,argc,argv);
+ } else if(strcmp(cmd,UTIL_TOGGLE)==0) {
+ return toggle(i,argc,argv);
+ } else if(strcmp(cmd,UTIL_VERSION)==0) {
+ printf("Version: 0.0.0\n");
+ return EXIT_SUCCESS;
+ } else {
+ // decrement to allow for args to ls
+ i--;
+ }
+ }
+
+ return ls(i,argc,argv);
+}
\ No newline at end of file
--- /dev/null
+#include<new.h>
+
+int new_workout(int i, int argc, char **argv) {
+ if(i>=argc) {
+ printf("not enough arguments for new\n");
+ usage();
+ return EXIT_FAILURE;
+ }
+
+ // check if attribute template provided
+ unsigned int attr_flags = 0;
+ if(i+1<argc) {
+ int count = attribute_count();
+ char *attr_p = argv[i+1];
+ int len = strlen(attr_p);
+
+ if(len!=count) {
+ printf("number of attributes don't match\n");
+ return EXIT_FAILURE;
+ }
+
+ for(int j=len-1;j>=0;j--) {
+ attr_flags <<= 1;
+ if(attr_p[j]=='1') {
+ attr_flags += 1;
+ }
+ }
+ }
+
+ if(workout_insert(argv[i],attr_flags)<0) {
+ printf("workout insert failed\n");
+ return EXIT_FAILURE;
+ }
+
+ printf("New workout added: %s\n",argv[i]);
+
+ return EXIT_SUCCESS;
+}
\ No newline at end of file
--- /dev/null
+#include<opt.h>
+
+struct options global_opts = {
+ NULL,
+ NULL,
+ -1,
+ 0
+};
+
+int option(char *str) {
+ int len;
+
+ if(NULL==str) { return OPTION_NO_MORE; }
+ len = strlen(str);
+ if(len<2) { return OPTION_NO_MORE; }
+
+ if('-'==str[0]) {
+ if('-'==str[1]) {
+ return long_option(&(str[2]));
+ } else {
+ return short_option(&(str[1]));
+ }
+ }
+
+ return OPTION_NO_MORE;
+}
+
+#define LONG_OPTION_HELP "help"
+#define LONG_OPTION_HELP_LENGTH 4
+#define LONG_OPTION_HOMEDIR "homedir"
+#define LONG_OPTION_HOMEDIR_LENGTH 7
+#define LONG_OPTION_ROWS "rows"
+#define LONG_OPTION_ROWS_LENGTH 4
+#define LONG_OPTION_VERBOSE "verbose"
+#define LONG_OPTION_VERBOSE_LENGTH 7
+
+int long_option(char *str) {
+ if(memcmp(str,LONG_OPTION_HELP,LONG_OPTION_HELP_LENGTH)==0) {
+ return OPTION_HELP;
+ } else if(memcmp(str,LONG_OPTION_VERBOSE,LONG_OPTION_VERBOSE_LENGTH)==0) {
+ set_verbose(1);
+ return OPTION_SUCCESS;
+ } else if(memcmp(str,LONG_OPTION_HOMEDIR,LONG_OPTION_HOMEDIR_LENGTH)==0) {
+ int len = strlen(str);
+ len -= (LONG_OPTION_HOMEDIR_LENGTH+1);
+ if(len<1) { return OPTION_INVALID; }
+
+ if(set_homedir(&(str[LONG_OPTION_HOMEDIR_LENGTH+1]))<0) {
+ printf("unable to set home directory: %s\nCheck directory exists and has correct permissions\n",&(str[LONG_OPTION_HOMEDIR_LENGTH+1]));
+ return OPTION_EXIT;
+ }
+ return OPTION_SUCCESS;
+ } else if(memcmp(str,LONG_OPTION_ROWS,LONG_OPTION_ROWS_LENGTH)==0) {
+ char *end_p;
+ set_rows(strtoul(&(str[LONG_OPTION_ROWS_LENGTH+1]),&end_p,10));
+ return OPTION_SUCCESS;
+ } else {
+ return OPTION_INVALID;
+ }
+}
+
+#define SHORT_OPTION_HELP 'h'
+#define SHORT_OPTION_VERBOSE 'v'
+
+int short_option(char *str) {
+ if(SHORT_OPTION_HELP==str[0]) {
+ return OPTION_HELP;
+ } else if(SHORT_OPTION_VERBOSE==str[0]) {
+ set_verbose(1);
+ return OPTION_SUCCESS;
+ } else {
+ return OPTION_INVALID;
+ }
+}
\ No newline at end of file
--- /dev/null
+#include<opt.h>
+
+#define DB_FILENAME "workouts.db"
+#define DB_FILENAME_LENGTH 11
+
+int set_homedir(char *to_set) {
+ int len = strlen(to_set);
+ if(len<1) { return -1; }
+
+ global_opts.homedir = malloc(sizeof(char)*(len+1));
+ if(NULL==global_opts.homedir) { return -1; }
+
+ global_opts.db_location = malloc(sizeof(char)*(len+DB_FILENAME_LENGTH+2));
+ if(NULL==global_opts.db_location) { return -1; }
+
+ strcpy(global_opts.homedir,to_set);
+ strcpy(global_opts.db_location,global_opts.homedir);
+
+ for(int i=0;;i++) {
+ if(global_opts.db_location[i]=='\0') {
+ if(global_opts.db_location[i-1]!='/') {
+ strcat(global_opts.db_location,"/");
+ }
+ break;
+ }
+ }
+
+ strcat(global_opts.db_location,DB_FILENAME);
+
+ DIR *dir = opendir(global_opts.homedir);
+ if(NULL==dir) {
+ return -1;
+ }
+ closedir(dir);
+
+ return 1;
+}
\ No newline at end of file
--- /dev/null
+#include<opt.h>
+
+void set_rows(int to_set) {
+ global_opts.rows = to_set;
+}
\ No newline at end of file
--- /dev/null
+#include<opt.h>
+
+void set_verbose(unsigned char val) {
+ if(val>0) {
+ global_opts.verbose = 1;
+ } else {
+ global_opts.verbose = 0;
+ }
+}
\ No newline at end of file
--- /dev/null
+#include<recent.h>
+
+void print_recent(const unsigned char *workout, const unsigned char *date) {
+ printf("%s\t%s\n",workout,date);
+}
+
+int recent(int i, int argc, char **argv) {
+ if(i!=argc) {
+ printf("wrong number of arguments for recent\n");
+ return EXIT_FAILURE;
+ }
+
+ if(recent_get(global_opts.rows,&print_recent)<0) {
+ printf("command failed\n");
+ return EXIT_FAILURE;
+ }
+
+ return EXIT_SUCCESS;
+}
+++ /dev/null
-import workout from '../classes/workout.js';
-
-import {constants} from '../constants.js';
-
-export default function workouts(state = {},action) {
- const {ADD_WORKOUT,CHANGE_ATTRIBUTE,CHANGE_WORKOUT_DATE,CHANGE_WORKOUT_DESCRIPTION,CHANGE_WORKOUT_NAME,DEFAULT_ATTRIBUTES,DELETE_WORKOUT,NEW_WORKOUT,REMOVE_WORKOUT} = constants;
- if(typeof action != "object") {
- return state;
- }
- switch(action.type) {
- case ADD_WORKOUT:
- if(action.name === void(0)) {
- return state;
- }
- if(!(state[action.name] instanceof workout)) {
- return state;
- }
- const newStateAfterAdd = {...state};
- try {
- newStateAfterAdd[action.name].add(action.toAdd);
- return newStateAfterAdd;
- } catch(err) {
- return state;
- }
- case CHANGE_ATTRIBUTE:
- if((action.workout === void(0))||(action.attribute === void(0))) {
- return state;
- }
- if(state[action.workout] === void(0)) {
- return state;
- }
- try {
- const newStateAfterChangeAttribute = {...state};
- newStateAfterChangeAttribute[action.workout].toggleAttribute(action.attribute);
- return newStateAfterChangeAttribute;
- } catch(err) {
- return state;
- }
- case CHANGE_WORKOUT_DATE:
- if(action.workout === void(0)) {
- return state;
- }
- if((action.old === void(0))||(action.new === void(0))) {
- return state;
- }
- if(action.old === action.new) {
- return state;
- }
- const newStateAfterWorkoutDateChange = {...state};
- try {
- newStateAfterWorkoutDateChange[action.workout].remove(action.old);
- newStateAfterWorkoutDateChange[action.workout].add([action.new]);
- return newStateAfterWorkoutDateChange;
- } catch(err) {
- console.error(err);
- return state;
- }
- case CHANGE_WORKOUT_DESCRIPTION:
- if(action.workout === void(0)) {
- return state;
- }
- if(state[action.workout] === void(0)) {
- return state;
- }
- try {
- const newStateAfterDescriptionChange = {...state};
- newStateAfterDescriptionChange[action.workout].changeDescription(action.description);
- return newStateAfterDescriptionChange;
- } catch(err) {
- console.error(err);
- return state;
- }
- case CHANGE_WORKOUT_NAME:
- if(action.workout === void(0)) {
- return state;
- }
- if(state[action.workout] === void(0)) {
- return state;
- }
- if(state[action.name] !== void(0)) {
- return state;
- }
- try {
- const newStateAfterNameChange = {
- ...state
- };
- const toAdd = new workout(newStateAfterNameChange[action.workout]);
- toAdd.setName(action.name)
- delete(newStateAfterNameChange[action.workout]);
- newStateAfterNameChange[action.name] = toAdd;
- return newStateAfterNameChange;
- } catch(err) {
- return state;
- }
- case DELETE_WORKOUT:
- if(action.name === void(0)) {
- return state;
- }
- if(!(state[action.name] instanceof workout)) {
- return state;
- }
- try {
- const newStateAfterDelete = {...state};
- newStateAfterDelete[action.workout].remove(toDel);
- return newStateAfterDelete;
- } catch(err) {
- return state;
- }
- case NEW_WORKOUT:
- if(state["New Workout"] !== void(0)) {
- return state;
- }
- const newStateAfterNew = {...state};
- const newWorkout = new workout();
- newStateAfterNew[newWorkout.name] = newWorkout;
- return newStateAfterNew;
- case REMOVE_WORKOUT:
- if(action.toRemove === void(0)) {
- return state;
- }
- if(state[action.toRemove] === void(0)) {
- return state;
- }
- const newStateAfterRemove = {...state};
- delete(newStateAfterRemove[action.toRemove]);
- return newStateAfterRemove;
- default:
- return state;
- }
-}
\ No newline at end of file
--- /dev/null
+#include<toggle.h>
+
+int toggle(int i, int argc, char **argv) {
+ if(i+2!=argc) {
+ printf("wrong number of arguments for toggle\n");
+ usage();
+ return EXIT_FAILURE;
+ }
+
+ if(workout_toggle(argv[i],argv[i+1])<0) {
+ printf("unable to toggle attribute %s for workout %s\n",argv[i+1],argv[i]);
+ return EXIT_FAILURE;
+ }
+
+ printf("Successfully toggled %s attribute for workout %s\n",argv[i+1],argv[i]);
+
+ return EXIT_SUCCESS;
+}
\ No newline at end of file
--- /dev/null
+#include<usage.h>
+
+void usage() {
+ printf("Usage:\n");
+ printf("\tworkouts [options] [ls] [--filter {attribute filter}] [search term]\n");
+ printf("\tworkouts [options] add [!name] [date]\n");
+ printf("\tworkouts [options] new [!name] [attributes]\n");
+ printf("\tworkouts [options] attr [ls]\n");
+ printf("\tworkouts [options] attr add [!name]\n");
+ printf("\tworkouts [options] toggle [!workout name] [!attr]\n");
+ printf("\tworkouts [options] recent\n");
+ printf("\n");
+ printf("Options:\n");
+ printf("\t--help,-h\n");
+ printf("\t--homedir=<path>\n");
+ printf("\t--rows=<number>\n");
+ printf("\t--verbose,-v\n");
+ printf("\n");
+ printf("{attribute filter} refers to string in bit flags corresponding to active attributes.\n\n");
+ printf("The character '!' in front of a variable name means required.\n");
+}
\ No newline at end of file
--- /dev/null
+EXTRA_DIST = \
+ index.js \
+ Makefile.am \
+ package.json \
+ package-lock.json \
+ test/add.integration.test.js \
+ test/attr.integration.test.js \
+ test/basic.test.js \
+ test/ls.integration.test.js \
+ test/new.integration.test.js \
+ test/recent.integration.test.js \
+ test/toggle.integration.test.js
\ No newline at end of file
--- /dev/null
+console.log("Run `npm run test` to run integration tests");
\ No newline at end of file
--- /dev/null
+{
+ "name": "workouts-integration-tests",
+ "version": "0.0.0",
+ "lockfileVersion": 1,
+ "requires": true,
+ "dependencies": {
+ "@babel/code-frame": {
+ "version": "7.10.4",
+ "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.10.4.tgz",
+ "integrity": "sha512-vG6SvB6oYEhvgisZNFRmRCUkLz11c7rp+tbNTynGqc6mS1d5ATd/sGyV6W0KZZnXRKMTzZDRgQT3Ou9jhpAfUg==",
+ "dev": true,
+ "requires": {
+ "@babel/highlight": "^7.10.4"
+ }
+ },
+ "@babel/core": {
+ "version": "7.10.4",
+ "resolved": "https://registry.npmjs.org/@babel/core/-/core-7.10.4.tgz",
+ "integrity": "sha512-3A0tS0HWpy4XujGc7QtOIHTeNwUgWaZc/WuS5YQrfhU67jnVmsD6OGPc1AKHH0LJHQICGncy3+YUjIhVlfDdcA==",
+ "dev": true,
+ "requires": {
+ "@babel/code-frame": "^7.10.4",
+ "@babel/generator": "^7.10.4",
+ "@babel/helper-module-transforms": "^7.10.4",
+ "@babel/helpers": "^7.10.4",
+ "@babel/parser": "^7.10.4",
+ "@babel/template": "^7.10.4",
+ "@babel/traverse": "^7.10.4",
+ "@babel/types": "^7.10.4",
+ "convert-source-map": "^1.7.0",
+ "debug": "^4.1.0",
+ "gensync": "^1.0.0-beta.1",
+ "json5": "^2.1.2",
+ "lodash": "^4.17.13",
+ "resolve": "^1.3.2",
+ "semver": "^5.4.1",
+ "source-map": "^0.5.0"
+ },
+ "dependencies": {
+ "semver": {
+ "version": "5.7.1",
+ "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.1.tgz",
+ "integrity": "sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ==",
+ "dev": true
+ }
+ }
+ },
+ "@babel/generator": {
+ "version": "7.10.4",
+ "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.10.4.tgz",
+ "integrity": "sha512-toLIHUIAgcQygFZRAQcsLQV3CBuX6yOIru1kJk/qqqvcRmZrYe6WavZTSG+bB8MxhnL9YPf+pKQfuiP161q7ng==",
+ "dev": true,
+ "requires": {
+ "@babel/types": "^7.10.4",
+ "jsesc": "^2.5.1",
+ "lodash": "^4.17.13",
+ "source-map": "^0.5.0"
+ }
+ },
+ "@babel/helper-function-name": {
+ "version": "7.10.4",
+ "resolved": "https://registry.npmjs.org/@babel/helper-function-name/-/helper-function-name-7.10.4.tgz",
+ "integrity": "sha512-YdaSyz1n8gY44EmN7x44zBn9zQ1Ry2Y+3GTA+3vH6Mizke1Vw0aWDM66FOYEPw8//qKkmqOckrGgTYa+6sceqQ==",
+ "dev": true,
+ "requires": {
+ "@babel/helper-get-function-arity": "^7.10.4",
+ "@babel/template": "^7.10.4",
+ "@babel/types": "^7.10.4"
+ }
+ },
+ "@babel/helper-get-function-arity": {
+ "version": "7.10.4",
+ "resolved": "https://registry.npmjs.org/@babel/helper-get-function-arity/-/helper-get-function-arity-7.10.4.tgz",
+ "integrity": "sha512-EkN3YDB+SRDgiIUnNgcmiD361ti+AVbL3f3Henf6dqqUyr5dMsorno0lJWJuLhDhkI5sYEpgj6y9kB8AOU1I2A==",
+ "dev": true,
+ "requires": {
+ "@babel/types": "^7.10.4"
+ }
+ },
+ "@babel/helper-member-expression-to-functions": {
+ "version": "7.10.4",
+ "resolved": "https://registry.npmjs.org/@babel/helper-member-expression-to-functions/-/helper-member-expression-to-functions-7.10.4.tgz",
+ "integrity": "sha512-m5j85pK/KZhuSdM/8cHUABQTAslV47OjfIB9Cc7P+PvlAoBzdb79BGNfw8RhT5Mq3p+xGd0ZfAKixbrUZx0C7A==",
+ "dev": true,
+ "requires": {
+ "@babel/types": "^7.10.4"
+ }
+ },
+ "@babel/helper-module-imports": {
+ "version": "7.10.4",
+ "resolved": "https://registry.npmjs.org/@babel/helper-module-imports/-/helper-module-imports-7.10.4.tgz",
+ "integrity": "sha512-nEQJHqYavI217oD9+s5MUBzk6x1IlvoS9WTPfgG43CbMEeStE0v+r+TucWdx8KFGowPGvyOkDT9+7DHedIDnVw==",
+ "dev": true,
+ "requires": {
+ "@babel/types": "^7.10.4"
+ }
+ },
+ "@babel/helper-module-transforms": {
+ "version": "7.10.4",
+ "resolved": "https://registry.npmjs.org/@babel/helper-module-transforms/-/helper-module-transforms-7.10.4.tgz",
+ "integrity": "sha512-Er2FQX0oa3nV7eM1o0tNCTx7izmQtwAQsIiaLRWtavAAEcskb0XJ5OjJbVrYXWOTr8om921Scabn4/tzlx7j1Q==",
+ "dev": true,
+ "requires": {
+ "@babel/helper-module-imports": "^7.10.4",
+ "@babel/helper-replace-supers": "^7.10.4",
+ "@babel/helper-simple-access": "^7.10.4",
+ "@babel/helper-split-export-declaration": "^7.10.4",
+ "@babel/template": "^7.10.4",
+ "@babel/types": "^7.10.4",
+ "lodash": "^4.17.13"
+ }
+ },
+ "@babel/helper-optimise-call-expression": {
+ "version": "7.10.4",
+ "resolved": "https://registry.npmjs.org/@babel/helper-optimise-call-expression/-/helper-optimise-call-expression-7.10.4.tgz",
+ "integrity": "sha512-n3UGKY4VXwXThEiKrgRAoVPBMqeoPgHVqiHZOanAJCG9nQUL2pLRQirUzl0ioKclHGpGqRgIOkgcIJaIWLpygg==",
+ "dev": true,
+ "requires": {
+ "@babel/types": "^7.10.4"
+ }
+ },
+ "@babel/helper-replace-supers": {
+ "version": "7.10.4",
+ "resolved": "https://registry.npmjs.org/@babel/helper-replace-supers/-/helper-replace-supers-7.10.4.tgz",
+ "integrity": "sha512-sPxZfFXocEymYTdVK1UNmFPBN+Hv5mJkLPsYWwGBxZAxaWfFu+xqp7b6qWD0yjNuNL2VKc6L5M18tOXUP7NU0A==",
+ "dev": true,
+ "requires": {
+ "@babel/helper-member-expression-to-functions": "^7.10.4",
+ "@babel/helper-optimise-call-expression": "^7.10.4",
+ "@babel/traverse": "^7.10.4",
+ "@babel/types": "^7.10.4"
+ }
+ },
+ "@babel/helper-simple-access": {
+ "version": "7.10.4",
+ "resolved": "https://registry.npmjs.org/@babel/helper-simple-access/-/helper-simple-access-7.10.4.tgz",
+ "integrity": "sha512-0fMy72ej/VEvF8ULmX6yb5MtHG4uH4Dbd6I/aHDb/JVg0bbivwt9Wg+h3uMvX+QSFtwr5MeItvazbrc4jtRAXw==",
+ "dev": true,
+ "requires": {
+ "@babel/template": "^7.10.4",
+ "@babel/types": "^7.10.4"
+ }
+ },
+ "@babel/helper-split-export-declaration": {
+ "version": "7.10.4",
+ "resolved": "https://registry.npmjs.org/@babel/helper-split-export-declaration/-/helper-split-export-declaration-7.10.4.tgz",
+ "integrity": "sha512-pySBTeoUff56fL5CBU2hWm9TesA4r/rOkI9DyJLvvgz09MB9YtfIYe3iBriVaYNaPe+Alua0vBIOVOLs2buWhg==",
+ "dev": true,
+ "requires": {
+ "@babel/types": "^7.10.4"
+ }
+ },
+ "@babel/helper-validator-identifier": {
+ "version": "7.10.4",
+ "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.10.4.tgz",
+ "integrity": "sha512-3U9y+43hz7ZM+rzG24Qe2mufW5KhvFg/NhnNph+i9mgCtdTCtMJuI1TMkrIUiK7Ix4PYlRF9I5dhqaLYA/ADXw==",
+ "dev": true
+ },
+ "@babel/helpers": {
+ "version": "7.10.4",
+ "resolved": "https://registry.npmjs.org/@babel/helpers/-/helpers-7.10.4.tgz",
+ "integrity": "sha512-L2gX/XeUONeEbI78dXSrJzGdz4GQ+ZTA/aazfUsFaWjSe95kiCuOZ5HsXvkiw3iwF+mFHSRUfJU8t6YavocdXA==",
+ "dev": true,
+ "requires": {
+ "@babel/template": "^7.10.4",
+ "@babel/traverse": "^7.10.4",
+ "@babel/types": "^7.10.4"
+ }
+ },
+ "@babel/highlight": {
+ "version": "7.10.4",
+ "resolved": "https://registry.npmjs.org/@babel/highlight/-/highlight-7.10.4.tgz",
+ "integrity": "sha512-i6rgnR/YgPEQzZZnbTHHuZdlE8qyoBNalD6F+q4vAFlcMEcqmkoG+mPqJYJCo63qPf74+Y1UZsl3l6f7/RIkmA==",
+ "dev": true,
+ "requires": {
+ "@babel/helper-validator-identifier": "^7.10.4",
+ "chalk": "^2.0.0",
+ "js-tokens": "^4.0.0"
+ }
+ },
+ "@babel/parser": {
+ "version": "7.10.4",
+ "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.10.4.tgz",
+ "integrity": "sha512-8jHII4hf+YVDsskTF6WuMB3X4Eh+PsUkC2ljq22so5rHvH+T8BzyL94VOdyFLNR8tBSVXOTbNHOKpR4TfRxVtA==",
+ "dev": true
+ },
+ "@babel/runtime-corejs3": {
+ "version": "7.10.4",
+ "resolved": "https://registry.npmjs.org/@babel/runtime-corejs3/-/runtime-corejs3-7.10.4.tgz",
+ "integrity": "sha512-BFlgP2SoLO9HJX9WBwN67gHWMBhDX/eDz64Jajd6mR/UAUzqrNMm99d4qHnVaKscAElZoFiPv+JpR/Siud5lXw==",
+ "dev": true,
+ "requires": {
+ "core-js-pure": "^3.0.0",
+ "regenerator-runtime": "^0.13.4"
+ }
+ },
+ "@babel/template": {
+ "version": "7.10.4",
+ "resolved": "https://registry.npmjs.org/@babel/template/-/template-7.10.4.tgz",
+ "integrity": "sha512-ZCjD27cGJFUB6nmCB1Enki3r+L5kJveX9pq1SvAUKoICy6CZ9yD8xO086YXdYhvNjBdnekm4ZnaP5yC8Cs/1tA==",
+ "dev": true,
+ "requires": {
+ "@babel/code-frame": "^7.10.4",
+ "@babel/parser": "^7.10.4",
+ "@babel/types": "^7.10.4"
+ }
+ },
+ "@babel/traverse": {
+ "version": "7.10.4",
+ "resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.10.4.tgz",
+ "integrity": "sha512-aSy7p5THgSYm4YyxNGz6jZpXf+Ok40QF3aA2LyIONkDHpAcJzDUqlCKXv6peqYUs2gmic849C/t2HKw2a2K20Q==",
+ "dev": true,
+ "requires": {
+ "@babel/code-frame": "^7.10.4",
+ "@babel/generator": "^7.10.4",
+ "@babel/helper-function-name": "^7.10.4",
+ "@babel/helper-split-export-declaration": "^7.10.4",
+ "@babel/parser": "^7.10.4",
+ "@babel/types": "^7.10.4",
+ "debug": "^4.1.0",
+ "globals": "^11.1.0",
+ "lodash": "^4.17.13"
+ }
+ },
+ "@babel/types": {
+ "version": "7.10.4",
+ "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.10.4.tgz",
+ "integrity": "sha512-UTCFOxC3FsFHb7lkRMVvgLzaRVamXuAs2Tz4wajva4WxtVY82eZeaUBtC2Zt95FU9TiznuC0Zk35tsim8jeVpg==",
+ "dev": true,
+ "requires": {
+ "@babel/helper-validator-identifier": "^7.10.4",
+ "lodash": "^4.17.13",
+ "to-fast-properties": "^2.0.0"
+ }
+ },
+ "@istanbuljs/load-nyc-config": {
+ "version": "1.1.0",
+ "resolved": "https://registry.npmjs.org/@istanbuljs/load-nyc-config/-/load-nyc-config-1.1.0.tgz",
+ "integrity": "sha512-VjeHSlIzpv/NyD3N0YuHfXOPDIixcA1q2ZV98wsMqcYlPmv2n3Yb2lYP9XMElnaFVXg5A7YLTeLu6V84uQDjmQ==",
+ "dev": true,
+ "requires": {
+ "camelcase": "^5.3.1",
+ "find-up": "^4.1.0",
+ "get-package-type": "^0.1.0",
+ "js-yaml": "^3.13.1",
+ "resolve-from": "^5.0.0"
+ }
+ },
+ "@istanbuljs/schema": {
+ "version": "0.1.2",
+ "resolved": "https://registry.npmjs.org/@istanbuljs/schema/-/schema-0.1.2.tgz",
+ "integrity": "sha512-tsAQNx32a8CoFhjhijUIhI4kccIAgmGhy8LZMZgGfmXcpMbPRUqn5LWmgRttILi6yeGmBJd2xsPkFMs0PzgPCw==",
+ "dev": true
+ },
+ "@types/color-name": {
+ "version": "1.1.1",
+ "resolved": "https://registry.npmjs.org/@types/color-name/-/color-name-1.1.1.tgz",
+ "integrity": "sha512-rr+OQyAjxze7GgWrSaJwydHStIhHq2lvY3BOC2Mj7KnzI7XK0Uw1TOOdI9lDoajEbSWLiYgoo4f1R51erQfhPQ==",
+ "dev": true
+ },
+ "aggregate-error": {
+ "version": "3.0.1",
+ "resolved": "https://registry.npmjs.org/aggregate-error/-/aggregate-error-3.0.1.tgz",
+ "integrity": "sha512-quoaXsZ9/BLNae5yiNoUz+Nhkwz83GhWwtYFglcjEQB2NDHCIpApbqXxIFnm4Pq/Nvhrsq5sYJFyohrrxnTGAA==",
+ "dev": true,
+ "requires": {
+ "clean-stack": "^2.0.0",
+ "indent-string": "^4.0.0"
+ }
+ },
+ "ansi-colors": {
+ "version": "4.1.1",
+ "resolved": "https://registry.npmjs.org/ansi-colors/-/ansi-colors-4.1.1.tgz",
+ "integrity": "sha512-JoX0apGbHaUJBNl6yF+p6JAFYZ666/hhCGKN5t9QFjbJQKUU/g8MNbFDbvfrgKXvI1QpZplPOnwIo99lX/AAmA==",
+ "dev": true
+ },
+ "ansi-regex": {
+ "version": "5.0.0",
+ "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.0.tgz",
+ "integrity": "sha512-bY6fj56OUQ0hU1KjFNDQuJFezqKdrAyFdIevADiqrWHwSlbmBNMHp5ak2f40Pm8JTFyM2mqxkG6ngkHO11f/lg==",
+ "dev": true
+ },
+ "ansi-styles": {
+ "version": "3.2.1",
+ "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz",
+ "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==",
+ "dev": true,
+ "requires": {
+ "color-convert": "^1.9.0"
+ }
+ },
+ "anymatch": {
+ "version": "3.1.1",
+ "resolved": "https://registry.npmjs.org/anymatch/-/anymatch-3.1.1.tgz",
+ "integrity": "sha512-mM8522psRCqzV+6LhomX5wgp25YVibjh8Wj23I5RPkPppSVSjyKD2A2mBJmWGa+KN7f2D6LNh9jkBCeyLktzjg==",
+ "dev": true,
+ "requires": {
+ "normalize-path": "^3.0.0",
+ "picomatch": "^2.0.4"
+ }
+ },
+ "append-transform": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/append-transform/-/append-transform-2.0.0.tgz",
+ "integrity": "sha512-7yeyCEurROLQJFv5Xj4lEGTy0borxepjFv1g22oAdqFu//SrAlDl1O1Nxx15SH1RoliUml6p8dwJW9jvZughhg==",
+ "dev": true,
+ "requires": {
+ "default-require-extensions": "^3.0.0"
+ }
+ },
+ "archy": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/archy/-/archy-1.0.0.tgz",
+ "integrity": "sha1-+cjBN1fMHde8N5rHeyxipcKGjEA=",
+ "dev": true
+ },
+ "argparse": {
+ "version": "1.0.10",
+ "resolved": "https://registry.npmjs.org/argparse/-/argparse-1.0.10.tgz",
+ "integrity": "sha512-o5Roy6tNG4SL/FOkCAN6RzjiakZS25RLYFrcMttJqbdd8BWrnA+fGz57iN5Pb06pvBGvl5gQ0B48dJlslXvoTg==",
+ "dev": true,
+ "requires": {
+ "sprintf-js": "~1.0.2"
+ }
+ },
+ "array.prototype.map": {
+ "version": "1.0.2",
+ "resolved": "https://registry.npmjs.org/array.prototype.map/-/array.prototype.map-1.0.2.tgz",
+ "integrity": "sha512-Az3OYxgsa1g7xDYp86l0nnN4bcmuEITGe1rbdEBVkrqkzMgDcbdQ2R7r41pNzti+4NMces3H8gMmuioZUilLgw==",
+ "dev": true,
+ "requires": {
+ "define-properties": "^1.1.3",
+ "es-abstract": "^1.17.0-next.1",
+ "es-array-method-boxes-properly": "^1.0.0",
+ "is-string": "^1.0.4"
+ }
+ },
+ "balanced-match": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.0.tgz",
+ "integrity": "sha1-ibTRmasr7kneFk6gK4nORi1xt2c=",
+ "dev": true
+ },
+ "binary-extensions": {
+ "version": "2.1.0",
+ "resolved": "https://registry.npmjs.org/binary-extensions/-/binary-extensions-2.1.0.tgz",
+ "integrity": "sha512-1Yj8h9Q+QDF5FzhMs/c9+6UntbD5MkRfRwac8DoEm9ZfUBZ7tZ55YcGVAzEe4bXsdQHEk+s9S5wsOKVdZrw0tQ==",
+ "dev": true
+ },
+ "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"
+ }
+ },
+ "browser-stdout": {
+ "version": "1.3.1",
+ "resolved": "https://registry.npmjs.org/browser-stdout/-/browser-stdout-1.3.1.tgz",
+ "integrity": "sha512-qhAVI1+Av2X7qelOfAIYwXONood6XlZE/fXaBSmW/T5SzLAmCgzi+eiWE7fUvbHaeNBQH13UftjpXxsfLkMpgw==",
+ "dev": true
+ },
+ "caching-transform": {
+ "version": "4.0.0",
+ "resolved": "https://registry.npmjs.org/caching-transform/-/caching-transform-4.0.0.tgz",
+ "integrity": "sha512-kpqOvwXnjjN44D89K5ccQC+RUrsy7jB/XLlRrx0D7/2HNcTPqzsb6XgYoErwko6QsV184CA2YgS1fxDiiDZMWA==",
+ "dev": true,
+ "requires": {
+ "hasha": "^5.0.0",
+ "make-dir": "^3.0.0",
+ "package-hash": "^4.0.0",
+ "write-file-atomic": "^3.0.0"
+ }
+ },
+ "camelcase": {
+ "version": "5.3.1",
+ "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-5.3.1.tgz",
+ "integrity": "sha512-L28STB170nwWS63UjtlEOE3dldQApaJXZkOI1uMFfzf3rRuPegHaHesyee+YxQ+W6SvRDQV6UrdOdRiR153wJg==",
+ "dev": true
+ },
+ "chalk": {
+ "version": "2.4.2",
+ "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz",
+ "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==",
+ "dev": true,
+ "requires": {
+ "ansi-styles": "^3.2.1",
+ "escape-string-regexp": "^1.0.5",
+ "supports-color": "^5.3.0"
+ }
+ },
+ "chokidar": {
+ "version": "3.3.1",
+ "resolved": "https://registry.npmjs.org/chokidar/-/chokidar-3.3.1.tgz",
+ "integrity": "sha512-4QYCEWOcK3OJrxwvyyAOxFuhpvOVCYkr33LPfFNBjAD/w3sEzWsp2BUOkI4l9bHvWioAd0rc6NlHUOEaWkTeqg==",
+ "dev": true,
+ "requires": {
+ "anymatch": "~3.1.1",
+ "braces": "~3.0.2",
+ "fsevents": "~2.1.2",
+ "glob-parent": "~5.1.0",
+ "is-binary-path": "~2.1.0",
+ "is-glob": "~4.0.1",
+ "normalize-path": "~3.0.0",
+ "readdirp": "~3.3.0"
+ }
+ },
+ "clean-stack": {
+ "version": "2.2.0",
+ "resolved": "https://registry.npmjs.org/clean-stack/-/clean-stack-2.2.0.tgz",
+ "integrity": "sha512-4diC9HaTE+KRAMWhDhrGOECgWZxoevMc5TlkObMqNSsVU62PYzXZ/SMTjzyGAFF1YusgxGcSWTEXBhp0CPwQ1A==",
+ "dev": true
+ },
+ "cliui": {
+ "version": "6.0.0",
+ "resolved": "https://registry.npmjs.org/cliui/-/cliui-6.0.0.tgz",
+ "integrity": "sha512-t6wbgtoCXvAzst7QgXxJYqPt0usEfbgQdftEPbLL/cvv6HPE5VgvqCuAIDR0NgU52ds6rFwqrgakNLrHEjCbrQ==",
+ "dev": true,
+ "requires": {
+ "string-width": "^4.2.0",
+ "strip-ansi": "^6.0.0",
+ "wrap-ansi": "^6.2.0"
+ }
+ },
+ "color-convert": {
+ "version": "1.9.3",
+ "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-1.9.3.tgz",
+ "integrity": "sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==",
+ "dev": true,
+ "requires": {
+ "color-name": "1.1.3"
+ }
+ },
+ "color-name": {
+ "version": "1.1.3",
+ "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz",
+ "integrity": "sha1-p9BVi9icQveV3UIyj3QIMcpTvCU=",
+ "dev": true
+ },
+ "commondir": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/commondir/-/commondir-1.0.1.tgz",
+ "integrity": "sha1-3dgA2gxmEnOTzKWVDqloo6rxJTs=",
+ "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
+ },
+ "convert-source-map": {
+ "version": "1.7.0",
+ "resolved": "https://registry.npmjs.org/convert-source-map/-/convert-source-map-1.7.0.tgz",
+ "integrity": "sha512-4FJkXzKXEDB1snCFZlLP4gpC3JILicCpGbzG9f9G7tGqGCzETQ2hWPrcinA9oU4wtf2biUaEH5065UnMeR33oA==",
+ "dev": true,
+ "requires": {
+ "safe-buffer": "~5.1.1"
+ }
+ },
+ "core-js-pure": {
+ "version": "3.6.5",
+ "resolved": "https://registry.npmjs.org/core-js-pure/-/core-js-pure-3.6.5.tgz",
+ "integrity": "sha512-lacdXOimsiD0QyNf9BC/mxivNJ/ybBGJXQFKzRekp1WTHoVUWsUHEn+2T8GJAzzIhyOuXA+gOxCVN3l+5PLPUA==",
+ "dev": true
+ },
+ "cross-spawn": {
+ "version": "7.0.3",
+ "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-7.0.3.tgz",
+ "integrity": "sha512-iRDPJKUPVEND7dHPO8rkbOnPpyDygcDFtWjpeWNCgy8WP2rXcxXL8TskReQl6OrB2G7+UJrags1q15Fudc7G6w==",
+ "dev": true,
+ "requires": {
+ "path-key": "^3.1.0",
+ "shebang-command": "^2.0.0",
+ "which": "^2.0.1"
+ }
+ },
+ "debug": {
+ "version": "4.1.1",
+ "resolved": "https://registry.npmjs.org/debug/-/debug-4.1.1.tgz",
+ "integrity": "sha512-pYAIzeRo8J6KPEaJ0VWOh5Pzkbw/RetuzehGM7QRRX5he4fPHx2rdKMB256ehJCkX+XRQm16eZLqLNS8RSZXZw==",
+ "dev": true,
+ "requires": {
+ "ms": "^2.1.1"
+ }
+ },
+ "decamelize": {
+ "version": "1.2.0",
+ "resolved": "https://registry.npmjs.org/decamelize/-/decamelize-1.2.0.tgz",
+ "integrity": "sha1-9lNNFRSCabIDUue+4m9QH5oZEpA=",
+ "dev": true
+ },
+ "default-require-extensions": {
+ "version": "3.0.0",
+ "resolved": "https://registry.npmjs.org/default-require-extensions/-/default-require-extensions-3.0.0.tgz",
+ "integrity": "sha512-ek6DpXq/SCpvjhpFsLFRVtIxJCRw6fUR42lYMVZuUMK7n8eMz4Uh5clckdBjEpLhn/gEBZo7hDJnJcwdKLKQjg==",
+ "dev": true,
+ "requires": {
+ "strip-bom": "^4.0.0"
+ }
+ },
+ "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"
+ }
+ },
+ "diff": {
+ "version": "4.0.2",
+ "resolved": "https://registry.npmjs.org/diff/-/diff-4.0.2.tgz",
+ "integrity": "sha512-58lmxKSA4BNyLz+HHMUzlOEpg09FV+ev6ZMe3vJihgdxzgcwZ8VoEEPmALCZG9LmqfVoNMMKpttIYTVG6uDY7A==",
+ "dev": true
+ },
+ "emoji-regex": {
+ "version": "8.0.0",
+ "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz",
+ "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==",
+ "dev": true
+ },
+ "es-abstract": {
+ "version": "1.17.6",
+ "resolved": "https://registry.npmjs.org/es-abstract/-/es-abstract-1.17.6.tgz",
+ "integrity": "sha512-Fr89bON3WFyUi5EvAeI48QTWX0AyekGgLA8H+c+7fbfCkJwRWRMLd8CQedNEyJuoYYhmtEqY92pgte1FAhBlhw==",
+ "dev": true,
+ "requires": {
+ "es-to-primitive": "^1.2.1",
+ "function-bind": "^1.1.1",
+ "has": "^1.0.3",
+ "has-symbols": "^1.0.1",
+ "is-callable": "^1.2.0",
+ "is-regex": "^1.1.0",
+ "object-inspect": "^1.7.0",
+ "object-keys": "^1.1.1",
+ "object.assign": "^4.1.0",
+ "string.prototype.trimend": "^1.0.1",
+ "string.prototype.trimstart": "^1.0.1"
+ }
+ },
+ "es-array-method-boxes-properly": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/es-array-method-boxes-properly/-/es-array-method-boxes-properly-1.0.0.tgz",
+ "integrity": "sha512-wd6JXUmyHmt8T5a2xreUwKcGPq6f1f+WwIJkijUqiGcJz1qqnZgP6XIK+QyIWU5lT7imeNxUll48bziG+TSYcA==",
+ "dev": true
+ },
+ "es-get-iterator": {
+ "version": "1.1.0",
+ "resolved": "https://registry.npmjs.org/es-get-iterator/-/es-get-iterator-1.1.0.tgz",
+ "integrity": "sha512-UfrmHuWQlNMTs35e1ypnvikg6jCz3SK8v8ImvmDsh36fCVUR1MqoFDiyn0/k52C8NqO3YsO8Oe0azeesNuqSsQ==",
+ "dev": true,
+ "requires": {
+ "es-abstract": "^1.17.4",
+ "has-symbols": "^1.0.1",
+ "is-arguments": "^1.0.4",
+ "is-map": "^2.0.1",
+ "is-set": "^2.0.1",
+ "is-string": "^1.0.5",
+ "isarray": "^2.0.5"
+ }
+ },
+ "es-to-primitive": {
+ "version": "1.2.1",
+ "resolved": "https://registry.npmjs.org/es-to-primitive/-/es-to-primitive-1.2.1.tgz",
+ "integrity": "sha512-QCOllgZJtaUo9miYBcLChTUaHNjJF3PYs1VidD7AwiEj1kYxKeQTctLAezAOH5ZKRH0g2IgPn6KwB4IT8iRpvA==",
+ "dev": true,
+ "requires": {
+ "is-callable": "^1.1.4",
+ "is-date-object": "^1.0.1",
+ "is-symbol": "^1.0.2"
+ }
+ },
+ "es6-error": {
+ "version": "4.1.1",
+ "resolved": "https://registry.npmjs.org/es6-error/-/es6-error-4.1.1.tgz",
+ "integrity": "sha512-Um/+FxMr9CISWh0bi5Zv0iOD+4cFh5qLeks1qhAopKVAJw3drgKbKySikp7wGhDL0HPeaja0P5ULZrxLkniUVg==",
+ "dev": true
+ },
+ "escape-string-regexp": {
+ "version": "1.0.5",
+ "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz",
+ "integrity": "sha1-G2HAViGQqN/2rjuyzwIAyhMLhtQ=",
+ "dev": true
+ },
+ "esprima": {
+ "version": "4.0.1",
+ "resolved": "https://registry.npmjs.org/esprima/-/esprima-4.0.1.tgz",
+ "integrity": "sha512-eGuFFw7Upda+g4p+QHvnW0RyTX/SVeJBDM/gCtMARO0cLuT2HcEKnTPvhjV6aGeqrCB/sbNop0Kszm0jsaWU4A==",
+ "dev": 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"
+ }
+ },
+ "find-cache-dir": {
+ "version": "3.3.1",
+ "resolved": "https://registry.npmjs.org/find-cache-dir/-/find-cache-dir-3.3.1.tgz",
+ "integrity": "sha512-t2GDMt3oGC/v+BMwzmllWDuJF/xcDtE5j/fCGbqDD7OLuJkj0cfh1YSA5VKPvwMeLFLNDBkwOKZ2X85jGLVftQ==",
+ "dev": true,
+ "requires": {
+ "commondir": "^1.0.1",
+ "make-dir": "^3.0.2",
+ "pkg-dir": "^4.1.0"
+ }
+ },
+ "find-up": {
+ "version": "4.1.0",
+ "resolved": "https://registry.npmjs.org/find-up/-/find-up-4.1.0.tgz",
+ "integrity": "sha512-PpOwAdQ/YlXQ2vj8a3h8IipDuYRi3wceVQQGYWxNINccq40Anw7BlsEXCMbt1Zt+OLA6Fq9suIpIWD0OsnISlw==",
+ "dev": true,
+ "requires": {
+ "locate-path": "^5.0.0",
+ "path-exists": "^4.0.0"
+ }
+ },
+ "flat": {
+ "version": "4.1.0",
+ "resolved": "https://registry.npmjs.org/flat/-/flat-4.1.0.tgz",
+ "integrity": "sha512-Px/TiLIznH7gEDlPXcUD4KnBusa6kR6ayRUVcnEAbreRIuhkqow/mun59BuRXwoYk7ZQOLW1ZM05ilIvK38hFw==",
+ "dev": true,
+ "requires": {
+ "is-buffer": "~2.0.3"
+ }
+ },
+ "foreground-child": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/foreground-child/-/foreground-child-2.0.0.tgz",
+ "integrity": "sha512-dCIq9FpEcyQyXKCkyzmlPTFNgrCzPudOe+mhvJU5zAtlBnGVy2yKxtfsxK2tQBThwq225jcvBjpw1Gr40uzZCA==",
+ "dev": true,
+ "requires": {
+ "cross-spawn": "^7.0.0",
+ "signal-exit": "^3.0.2"
+ }
+ },
+ "fromentries": {
+ "version": "1.2.0",
+ "resolved": "https://registry.npmjs.org/fromentries/-/fromentries-1.2.0.tgz",
+ "integrity": "sha512-33X7H/wdfO99GdRLLgkjUrD4geAFdq/Uv0kl3HD4da6HDixd2GUg8Mw7dahLCV9r/EARkmtYBB6Tch4EEokFTQ==",
+ "dev": true
+ },
+ "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": "2.1.3",
+ "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-2.1.3.tgz",
+ "integrity": "sha512-Auw9a4AxqWpa9GUfj370BMPzzyncfBABW8Mab7BGWBYDj4Isgq+cDKtx0i6u9jcX9pQDnswsaaOTgTmA5pEjuQ==",
+ "dev": true,
+ "optional": true
+ },
+ "function-bind": {
+ "version": "1.1.1",
+ "resolved": "https://registry.npmjs.org/function-bind/-/function-bind-1.1.1.tgz",
+ "integrity": "sha512-yIovAzMX49sF8Yl58fSCWJ5svSLuaibPxXQJFLmBObTuCr0Mf1KiPopGM9NiFjiYBCbfaa2Fh6breQ6ANVTI0A==",
+ "dev": true
+ },
+ "gensync": {
+ "version": "1.0.0-beta.1",
+ "resolved": "https://registry.npmjs.org/gensync/-/gensync-1.0.0-beta.1.tgz",
+ "integrity": "sha512-r8EC6NO1sngH/zdD9fiRDLdcgnbayXah+mLgManTaIZJqEC1MZstmnox8KpnI2/fxQwrp5OpCOYWLp4rBl4Jcg==",
+ "dev": true
+ },
+ "get-caller-file": {
+ "version": "2.0.5",
+ "resolved": "https://registry.npmjs.org/get-caller-file/-/get-caller-file-2.0.5.tgz",
+ "integrity": "sha512-DyFP3BM/3YHTQOCUL/w0OZHR0lpKeGrxotcHWcqNEdnltqFwXVfhEBQ94eIo34AfQpo0rGki4cyIiftY06h2Fg==",
+ "dev": true
+ },
+ "get-package-type": {
+ "version": "0.1.0",
+ "resolved": "https://registry.npmjs.org/get-package-type/-/get-package-type-0.1.0.tgz",
+ "integrity": "sha512-pjzuKtY64GYfWizNAJ0fr9VqttZkNiK2iS430LtIHzjBEr6bX8Am2zm4sW4Ro5wjWW5cAlRL1qAMTcXbjNAO2Q==",
+ "dev": true
+ },
+ "glob": {
+ "version": "7.1.6",
+ "resolved": "https://registry.npmjs.org/glob/-/glob-7.1.6.tgz",
+ "integrity": "sha512-LwaxwyZ72Lk7vZINtNNrywX0ZuLyStrdDtabefZKAY5ZGJhVtgdznluResxNmPitE0SAO+O26sWTHeKSI2wMBA==",
+ "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": "5.1.1",
+ "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-5.1.1.tgz",
+ "integrity": "sha512-FnI+VGOpnlGHWZxthPGR+QhR78fuiK0sNLkHQv+bL9fQi57lNNdquIbna/WrfROrolq8GK5Ek6BiMwqL/voRYQ==",
+ "dev": true,
+ "requires": {
+ "is-glob": "^4.0.1"
+ }
+ },
+ "globals": {
+ "version": "11.12.0",
+ "resolved": "https://registry.npmjs.org/globals/-/globals-11.12.0.tgz",
+ "integrity": "sha512-WOBp/EEGUiIsJSp7wcv/y6MO+lV9UoncWqxuFfm8eBwzWNgyfBd6Gz+IeKQ9jCmyhoH99g15M3T+QaVHFjizVA==",
+ "dev": true
+ },
+ "graceful-fs": {
+ "version": "4.2.4",
+ "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.4.tgz",
+ "integrity": "sha512-WjKPNJF79dtJAVniUlGGWHYGz2jWxT6VhN/4m1NdkbZ2nOsEF+cI1Edgql5zCRhs/VsQYRvrXctxktVXZUkixw==",
+ "dev": true
+ },
+ "growl": {
+ "version": "1.10.5",
+ "resolved": "https://registry.npmjs.org/growl/-/growl-1.10.5.tgz",
+ "integrity": "sha512-qBr4OuELkhPenW6goKVXiv47US3clb3/IbuWF9KNKEijAy9oeHxU9IgzjvJhHkUzhaj7rOUD7+YGWqUjLp5oSA==",
+ "dev": true
+ },
+ "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-flag": {
+ "version": "3.0.0",
+ "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz",
+ "integrity": "sha1-tdRU3CGZriJWmfNGfloH87lVuv0=",
+ "dev": true
+ },
+ "has-symbols": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/has-symbols/-/has-symbols-1.0.1.tgz",
+ "integrity": "sha512-PLcsoqu++dmEIZB+6totNFKq/7Do+Z0u4oT0zKOJNl3lYK6vGwwu2hjHs+68OEZbTjiUE9bgOABXbP/GvrS0Kg==",
+ "dev": true
+ },
+ "hasha": {
+ "version": "5.2.0",
+ "resolved": "https://registry.npmjs.org/hasha/-/hasha-5.2.0.tgz",
+ "integrity": "sha512-2W+jKdQbAdSIrggA8Q35Br8qKadTrqCTC8+XZvBWepKDK6m9XkX6Iz1a2yh2KP01kzAR/dpuMeUnocoLYDcskw==",
+ "dev": true,
+ "requires": {
+ "is-stream": "^2.0.0",
+ "type-fest": "^0.8.0"
+ }
+ },
+ "he": {
+ "version": "1.2.0",
+ "resolved": "https://registry.npmjs.org/he/-/he-1.2.0.tgz",
+ "integrity": "sha512-F/1DnUGPopORZi0ni+CvrCgHQ5FyEAHRLSApuYWMmrbSwoN2Mn/7k+Gl38gJnR7yyDZk6WLXwiGod1JOWNDKGw==",
+ "dev": true
+ },
+ "html-escaper": {
+ "version": "2.0.2",
+ "resolved": "https://registry.npmjs.org/html-escaper/-/html-escaper-2.0.2.tgz",
+ "integrity": "sha512-H2iMtd0I4Mt5eYiapRdIDjp+XzelXQ0tFE4JS7YFwFevXXMmOp9myNrUvCg0D6ws8iqkRPBfKHgbwig1SmlLfg==",
+ "dev": true
+ },
+ "imurmurhash": {
+ "version": "0.1.4",
+ "resolved": "https://registry.npmjs.org/imurmurhash/-/imurmurhash-0.1.4.tgz",
+ "integrity": "sha1-khi5srkoojixPcT7a21XbyMUU+o=",
+ "dev": true
+ },
+ "indent-string": {
+ "version": "4.0.0",
+ "resolved": "https://registry.npmjs.org/indent-string/-/indent-string-4.0.0.tgz",
+ "integrity": "sha512-EdDDZu4A2OyIK7Lr/2zG+w5jmbuk1DVBnEwREQvBzspBJkCEbRa8GxU1lghYcaGJCnRWibjDXlq779X1/y5xwg==",
+ "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
+ },
+ "is-arguments": {
+ "version": "1.0.4",
+ "resolved": "https://registry.npmjs.org/is-arguments/-/is-arguments-1.0.4.tgz",
+ "integrity": "sha512-xPh0Rmt8NE65sNzvyUmWgI1tz3mKq74lGA0mL8LYZcoIzKOzDh6HmrYm3d18k60nHerC8A9Km8kYu87zfSFnLA==",
+ "dev": true
+ },
+ "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"
+ }
+ },
+ "is-buffer": {
+ "version": "2.0.4",
+ "resolved": "https://registry.npmjs.org/is-buffer/-/is-buffer-2.0.4.tgz",
+ "integrity": "sha512-Kq1rokWXOPXWuaMAqZiJW4XxsmD9zGx9q4aePabbn3qCRGedtH7Cm+zV8WETitMfu1wdh+Rvd6w5egwSngUX2A==",
+ "dev": true
+ },
+ "is-callable": {
+ "version": "1.2.0",
+ "resolved": "https://registry.npmjs.org/is-callable/-/is-callable-1.2.0.tgz",
+ "integrity": "sha512-pyVD9AaGLxtg6srb2Ng6ynWJqkHU9bEM087AKck0w8QwDarTfNcpIYoU8x8Hv2Icm8u6kFJM18Dag8lyqGkviw==",
+ "dev": true
+ },
+ "is-date-object": {
+ "version": "1.0.2",
+ "resolved": "https://registry.npmjs.org/is-date-object/-/is-date-object-1.0.2.tgz",
+ "integrity": "sha512-USlDT524woQ08aoZFzh3/Z6ch9Y/EWXEHQ/AaRN0SkKq4t2Jw2R2339tSXmwuVoY7LLlBCbOIlx2myP/L5zk0g==",
+ "dev": true
+ },
+ "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": "3.0.0",
+ "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz",
+ "integrity": "sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==",
+ "dev": true
+ },
+ "is-glob": {
+ "version": "4.0.1",
+ "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-4.0.1.tgz",
+ "integrity": "sha512-5G0tKtBTFImOqDnLB2hG6Bp2qcKEFduo4tZu9MT/H6NQv/ghhy30o55ufafxJ/LdH79LLs2Kfrn85TLKyA7BUg==",
+ "dev": true,
+ "requires": {
+ "is-extglob": "^2.1.1"
+ }
+ },
+ "is-map": {
+ "version": "2.0.1",
+ "resolved": "https://registry.npmjs.org/is-map/-/is-map-2.0.1.tgz",
+ "integrity": "sha512-T/S49scO8plUiAOA2DBTBG3JHpn1yiw0kRp6dgiZ0v2/6twi5eiB0rHtHFH9ZIrvlWc6+4O+m4zg5+Z833aXgw==",
+ "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-regex": {
+ "version": "1.1.0",
+ "resolved": "https://registry.npmjs.org/is-regex/-/is-regex-1.1.0.tgz",
+ "integrity": "sha512-iI97M8KTWID2la5uYXlkbSDQIg4F6o1sYboZKKTDpnDQMLtUL86zxhgDet3Q2SriaYsyGqZ6Mn2SjbRKeLHdqw==",
+ "dev": true,
+ "requires": {
+ "has-symbols": "^1.0.1"
+ }
+ },
+ "is-set": {
+ "version": "2.0.1",
+ "resolved": "https://registry.npmjs.org/is-set/-/is-set-2.0.1.tgz",
+ "integrity": "sha512-eJEzOtVyenDs1TMzSQ3kU3K+E0GUS9sno+F0OBT97xsgcJsF9nXMBtkT9/kut5JEpM7oL7X/0qxR17K3mcwIAA==",
+ "dev": true
+ },
+ "is-stream": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/is-stream/-/is-stream-2.0.0.tgz",
+ "integrity": "sha512-XCoy+WlUr7d1+Z8GgSuXmpuUFC9fOhRXglJMx+dwLKTkL44Cjd4W1Z5P+BQZpr+cR93aGP4S/s7Ftw6Nd/kiEw==",
+ "dev": true
+ },
+ "is-string": {
+ "version": "1.0.5",
+ "resolved": "https://registry.npmjs.org/is-string/-/is-string-1.0.5.tgz",
+ "integrity": "sha512-buY6VNRjhQMiF1qWDouloZlQbRhDPCebwxSjxMjxgemYT46YMd2NR0/H+fBhEfWX4A/w9TBJ+ol+okqJKFE6vQ==",
+ "dev": true
+ },
+ "is-symbol": {
+ "version": "1.0.3",
+ "resolved": "https://registry.npmjs.org/is-symbol/-/is-symbol-1.0.3.tgz",
+ "integrity": "sha512-OwijhaRSgqvhm/0ZdAcXNZt9lYdKFpcRDT5ULUuYXPoT794UNOdU+gpT6Rzo7b4V2HUl/op6GqY894AZwv9faQ==",
+ "dev": true,
+ "requires": {
+ "has-symbols": "^1.0.1"
+ }
+ },
+ "is-typedarray": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/is-typedarray/-/is-typedarray-1.0.0.tgz",
+ "integrity": "sha1-5HnICFjfDBsR3dppQPlgEfzaSpo=",
+ "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": "2.0.5",
+ "resolved": "https://registry.npmjs.org/isarray/-/isarray-2.0.5.tgz",
+ "integrity": "sha512-xHjhDr3cNBK0BzdUJSPXZntQUx/mwMS5Rw4A7lPJ90XGAO6ISP/ePDNuo0vhqOZU+UD5JoodwCAAoZQd3FeAKw==",
+ "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
+ },
+ "istanbul-lib-coverage": {
+ "version": "3.0.0",
+ "resolved": "https://registry.npmjs.org/istanbul-lib-coverage/-/istanbul-lib-coverage-3.0.0.tgz",
+ "integrity": "sha512-UiUIqxMgRDET6eR+o5HbfRYP1l0hqkWOs7vNxC/mggutCMUIhWMm8gAHb8tHlyfD3/l6rlgNA5cKdDzEAf6hEg==",
+ "dev": true
+ },
+ "istanbul-lib-hook": {
+ "version": "3.0.0",
+ "resolved": "https://registry.npmjs.org/istanbul-lib-hook/-/istanbul-lib-hook-3.0.0.tgz",
+ "integrity": "sha512-Pt/uge1Q9s+5VAZ+pCo16TYMWPBIl+oaNIjgLQxcX0itS6ueeaA+pEfThZpH8WxhFgCiEb8sAJY6MdUKgiIWaQ==",
+ "dev": true,
+ "requires": {
+ "append-transform": "^2.0.0"
+ }
+ },
+ "istanbul-lib-instrument": {
+ "version": "4.0.3",
+ "resolved": "https://registry.npmjs.org/istanbul-lib-instrument/-/istanbul-lib-instrument-4.0.3.tgz",
+ "integrity": "sha512-BXgQl9kf4WTCPCCpmFGoJkz/+uhvm7h7PFKUYxh7qarQd3ER33vHG//qaE8eN25l07YqZPpHXU9I09l/RD5aGQ==",
+ "dev": true,
+ "requires": {
+ "@babel/core": "^7.7.5",
+ "@istanbuljs/schema": "^0.1.2",
+ "istanbul-lib-coverage": "^3.0.0",
+ "semver": "^6.3.0"
+ }
+ },
+ "istanbul-lib-processinfo": {
+ "version": "2.0.2",
+ "resolved": "https://registry.npmjs.org/istanbul-lib-processinfo/-/istanbul-lib-processinfo-2.0.2.tgz",
+ "integrity": "sha512-kOwpa7z9hme+IBPZMzQ5vdQj8srYgAtaRqeI48NGmAQ+/5yKiHLV0QbYqQpxsdEF0+w14SoB8YbnHKcXE2KnYw==",
+ "dev": true,
+ "requires": {
+ "archy": "^1.0.0",
+ "cross-spawn": "^7.0.0",
+ "istanbul-lib-coverage": "^3.0.0-alpha.1",
+ "make-dir": "^3.0.0",
+ "p-map": "^3.0.0",
+ "rimraf": "^3.0.0",
+ "uuid": "^3.3.3"
+ }
+ },
+ "istanbul-lib-report": {
+ "version": "3.0.0",
+ "resolved": "https://registry.npmjs.org/istanbul-lib-report/-/istanbul-lib-report-3.0.0.tgz",
+ "integrity": "sha512-wcdi+uAKzfiGT2abPpKZ0hSU1rGQjUQnLvtY5MpQ7QCTahD3VODhcu4wcfY1YtkGaDD5yuydOLINXsfbus9ROw==",
+ "dev": true,
+ "requires": {
+ "istanbul-lib-coverage": "^3.0.0",
+ "make-dir": "^3.0.0",
+ "supports-color": "^7.1.0"
+ },
+ "dependencies": {
+ "has-flag": {
+ "version": "4.0.0",
+ "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz",
+ "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==",
+ "dev": true
+ },
+ "supports-color": {
+ "version": "7.1.0",
+ "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.1.0.tgz",
+ "integrity": "sha512-oRSIpR8pxT1Wr2FquTNnGet79b3BWljqOuoW/h4oBhxJ/HUbX5nX6JSruTkvXDCFMwDPvsaTTbvMLKZWSy0R5g==",
+ "dev": true,
+ "requires": {
+ "has-flag": "^4.0.0"
+ }
+ }
+ }
+ },
+ "istanbul-lib-source-maps": {
+ "version": "4.0.0",
+ "resolved": "https://registry.npmjs.org/istanbul-lib-source-maps/-/istanbul-lib-source-maps-4.0.0.tgz",
+ "integrity": "sha512-c16LpFRkR8vQXyHZ5nLpY35JZtzj1PQY1iZmesUbf1FZHbIupcWfjgOXBY9YHkLEQ6puz1u4Dgj6qmU/DisrZg==",
+ "dev": true,
+ "requires": {
+ "debug": "^4.1.1",
+ "istanbul-lib-coverage": "^3.0.0",
+ "source-map": "^0.6.1"
+ },
+ "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
+ }
+ }
+ },
+ "istanbul-reports": {
+ "version": "3.0.2",
+ "resolved": "https://registry.npmjs.org/istanbul-reports/-/istanbul-reports-3.0.2.tgz",
+ "integrity": "sha512-9tZvz7AiR3PEDNGiV9vIouQ/EAcqMXFmkcA1CDFTwOB98OZVDL0PH9glHotf5Ugp6GCOTypfzGWI/OqjWNCRUw==",
+ "dev": true,
+ "requires": {
+ "html-escaper": "^2.0.0",
+ "istanbul-lib-report": "^3.0.0"
+ }
+ },
+ "iterate-iterator": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/iterate-iterator/-/iterate-iterator-1.0.1.tgz",
+ "integrity": "sha512-3Q6tudGN05kbkDQDI4CqjaBf4qf85w6W6GnuZDtUVYwKgtC1q8yxYX7CZed7N+tLzQqS6roujWvszf13T+n9aw==",
+ "dev": true
+ },
+ "iterate-value": {
+ "version": "1.0.2",
+ "resolved": "https://registry.npmjs.org/iterate-value/-/iterate-value-1.0.2.tgz",
+ "integrity": "sha512-A6fMAio4D2ot2r/TYzr4yUWrmwNdsN5xL7+HUiyACE4DXm+q8HtPcnFTp+NnW3k4N05tZ7FVYFFb2CR13NxyHQ==",
+ "dev": true,
+ "requires": {
+ "es-get-iterator": "^1.0.2",
+ "iterate-iterator": "^1.0.1"
+ }
+ },
+ "js-tokens": {
+ "version": "4.0.0",
+ "resolved": "https://registry.npmjs.org/js-tokens/-/js-tokens-4.0.0.tgz",
+ "integrity": "sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ==",
+ "dev": true
+ },
+ "js-yaml": {
+ "version": "3.14.0",
+ "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-3.14.0.tgz",
+ "integrity": "sha512-/4IbIeHcD9VMHFqDR/gQ7EdZdLimOvW2DdcxFjdyyZ9NsbS+ccrXqVWDtab/lRl5AlUqmpBx8EhPaWR+OtY17A==",
+ "dev": true,
+ "requires": {
+ "argparse": "^1.0.7",
+ "esprima": "^4.0.0"
+ }
+ },
+ "jsesc": {
+ "version": "2.5.2",
+ "resolved": "https://registry.npmjs.org/jsesc/-/jsesc-2.5.2.tgz",
+ "integrity": "sha512-OYu7XEzjkCQ3C5Ps3QIZsQfNpqoJyZZA99wd9aWd05NCtC5pWOkShK2mkL6HXQR6/Cy2lbNdPlZBpuQHXE63gA==",
+ "dev": true
+ },
+ "json5": {
+ "version": "2.1.3",
+ "resolved": "https://registry.npmjs.org/json5/-/json5-2.1.3.tgz",
+ "integrity": "sha512-KXPvOm8K9IJKFM0bmdn8QXh7udDh1g/giieX0NLCaMnb4hEiVFqnop2ImTXCc5e0/oHz3LTqmHGtExn5hfMkOA==",
+ "dev": true,
+ "requires": {
+ "minimist": "^1.2.5"
+ }
+ },
+ "locate-path": {
+ "version": "5.0.0",
+ "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-5.0.0.tgz",
+ "integrity": "sha512-t7hw9pI+WvuwNJXwk5zVHpyhIqzg2qTlklJOf0mVxGSbe3Fp2VieZcduNYjaLDoy6p9uGpQEGWG87WpMKlNq8g==",
+ "dev": true,
+ "requires": {
+ "p-locate": "^4.1.0"
+ }
+ },
+ "lodash": {
+ "version": "4.17.19",
+ "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.19.tgz",
+ "integrity": "sha512-JNvd8XER9GQX0v2qJgsaN/mzFCNA5BRe/j8JN9d+tWyGLSodKQHKFicdwNYzWwI3wjRnaKPsGj1XkBjx/F96DQ==",
+ "dev": true
+ },
+ "lodash.flattendeep": {
+ "version": "4.4.0",
+ "resolved": "https://registry.npmjs.org/lodash.flattendeep/-/lodash.flattendeep-4.4.0.tgz",
+ "integrity": "sha1-+wMJF/hqMTTlvJvsDWngAT3f7bI=",
+ "dev": true
+ },
+ "log-symbols": {
+ "version": "3.0.0",
+ "resolved": "https://registry.npmjs.org/log-symbols/-/log-symbols-3.0.0.tgz",
+ "integrity": "sha512-dSkNGuI7iG3mfvDzUuYZyvk5dD9ocYCYzNU6CYDE6+Xqd+gwme6Z00NS3dUh8mq/73HaEtT7m6W+yUPtU6BZnQ==",
+ "dev": true,
+ "requires": {
+ "chalk": "^2.4.2"
+ }
+ },
+ "make-dir": {
+ "version": "3.1.0",
+ "resolved": "https://registry.npmjs.org/make-dir/-/make-dir-3.1.0.tgz",
+ "integrity": "sha512-g3FeP20LNwhALb/6Cz6Dd4F2ngze0jz7tbzrD2wAV+o9FeNHe4rL+yK2md0J/fiSf1sa1ADhXqi5+oVwOM/eGw==",
+ "dev": true,
+ "requires": {
+ "semver": "^6.0.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"
+ }
+ },
+ "minimist": {
+ "version": "1.2.5",
+ "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.5.tgz",
+ "integrity": "sha512-FM9nNUYrRBAELZQT3xeZQ7fmMOBg6nWNmJKTcgsJeaLstP/UODVpGsr5OhXhhXg6f+qtJ8uiZ+PUxkDWcgIXLw==",
+ "dev": true
+ },
+ "mocha": {
+ "version": "8.0.1",
+ "resolved": "https://registry.npmjs.org/mocha/-/mocha-8.0.1.tgz",
+ "integrity": "sha512-vefaXfdYI8+Yo8nPZQQi0QO2o+5q9UIMX1jZ1XMmK3+4+CQjc7+B0hPdUeglXiTlr8IHMVRo63IhO9Mzt6fxOg==",
+ "dev": true,
+ "requires": {
+ "ansi-colors": "4.1.1",
+ "browser-stdout": "1.3.1",
+ "chokidar": "3.3.1",
+ "debug": "3.2.6",
+ "diff": "4.0.2",
+ "escape-string-regexp": "1.0.5",
+ "find-up": "4.1.0",
+ "glob": "7.1.6",
+ "growl": "1.10.5",
+ "he": "1.2.0",
+ "js-yaml": "3.13.1",
+ "log-symbols": "3.0.0",
+ "minimatch": "3.0.4",
+ "ms": "2.1.2",
+ "object.assign": "4.1.0",
+ "promise.allsettled": "1.0.2",
+ "serialize-javascript": "3.0.0",
+ "strip-json-comments": "3.0.1",
+ "supports-color": "7.1.0",
+ "which": "2.0.2",
+ "wide-align": "1.1.3",
+ "workerpool": "6.0.0",
+ "yargs": "13.3.2",
+ "yargs-parser": "13.1.2",
+ "yargs-unparser": "1.6.0"
+ },
+ "dependencies": {
+ "ansi-regex": {
+ "version": "4.1.0",
+ "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-4.1.0.tgz",
+ "integrity": "sha512-1apePfXM1UOSqw0o9IiFAovVz9M5S1Dg+4TrDwfMewQ6p/rmMueb7tWZjQ1rx4Loy1ArBggoqGpfqqdI4rondg==",
+ "dev": true
+ },
+ "cliui": {
+ "version": "5.0.0",
+ "resolved": "https://registry.npmjs.org/cliui/-/cliui-5.0.0.tgz",
+ "integrity": "sha512-PYeGSEmmHM6zvoef2w8TPzlrnNpXIjTipYK780YswmIP9vjxmd6Y2a3CB2Ks6/AU8NHjZugXvo8w3oWM2qnwXA==",
+ "dev": true,
+ "requires": {
+ "string-width": "^3.1.0",
+ "strip-ansi": "^5.2.0",
+ "wrap-ansi": "^5.1.0"
+ }
+ },
+ "debug": {
+ "version": "3.2.6",
+ "resolved": "https://registry.npmjs.org/debug/-/debug-3.2.6.tgz",
+ "integrity": "sha512-mel+jf7nrtEl5Pn1Qx46zARXKDpBbvzezse7p7LqINmdoIk8PYP5SySaxEmYv6TZ0JyEKA1hsCId6DIhgITtWQ==",
+ "dev": true,
+ "requires": {
+ "ms": "^2.1.1"
+ }
+ },
+ "emoji-regex": {
+ "version": "7.0.3",
+ "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-7.0.3.tgz",
+ "integrity": "sha512-CwBLREIQ7LvYFB0WyRvwhq5N5qPhc6PMjD6bYggFlI5YyDgl+0vxq5VHbMOFqLg7hfWzmu8T5Z1QofhmTIhItA==",
+ "dev": true
+ },
+ "has-flag": {
+ "version": "4.0.0",
+ "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz",
+ "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==",
+ "dev": true
+ },
+ "is-fullwidth-code-point": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-2.0.0.tgz",
+ "integrity": "sha1-o7MKXE8ZkYMWeqq5O+764937ZU8=",
+ "dev": true
+ },
+ "js-yaml": {
+ "version": "3.13.1",
+ "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-3.13.1.tgz",
+ "integrity": "sha512-YfbcO7jXDdyj0DGxYVSlSeQNHbD7XPWvrVWeVUujrQEoZzWJIRrCPoyk6kL6IAjAG2IolMK4T0hNUe0HOUs5Jw==",
+ "dev": true,
+ "requires": {
+ "argparse": "^1.0.7",
+ "esprima": "^4.0.0"
+ }
+ },
+ "locate-path": {
+ "version": "3.0.0",
+ "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-3.0.0.tgz",
+ "integrity": "sha512-7AO748wWnIhNqAuaty2ZWHkQHRSNfPVIsPIfwEOWO22AmaoVrWavlOcMR5nzTLNYvp36X220/maaRsrec1G65A==",
+ "dev": true,
+ "requires": {
+ "p-locate": "^3.0.0",
+ "path-exists": "^3.0.0"
+ }
+ },
+ "p-locate": {
+ "version": "3.0.0",
+ "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-3.0.0.tgz",
+ "integrity": "sha512-x+12w/To+4GFfgJhBEpiDcLozRJGegY+Ei7/z0tSLkMmxGZNybVMSfWj9aJn8Z5Fc7dBUNJOOVgPv2H7IwulSQ==",
+ "dev": true,
+ "requires": {
+ "p-limit": "^2.0.0"
+ }
+ },
+ "path-exists": {
+ "version": "3.0.0",
+ "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-3.0.0.tgz",
+ "integrity": "sha1-zg6+ql94yxiSXqfYENe1mwEP1RU=",
+ "dev": true
+ },
+ "string-width": {
+ "version": "3.1.0",
+ "resolved": "https://registry.npmjs.org/string-width/-/string-width-3.1.0.tgz",
+ "integrity": "sha512-vafcv6KjVZKSgz06oM/H6GDBrAtz8vdhQakGjFIvNrHA6y3HCF1CInLy+QLq8dTJPQ1b+KDUqDFctkdRW44e1w==",
+ "dev": true,
+ "requires": {
+ "emoji-regex": "^7.0.1",
+ "is-fullwidth-code-point": "^2.0.0",
+ "strip-ansi": "^5.1.0"
+ }
+ },
+ "strip-ansi": {
+ "version": "5.2.0",
+ "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-5.2.0.tgz",
+ "integrity": "sha512-DuRs1gKbBqsMKIZlrffwlug8MHkcnpjs5VPmL1PAh+mA30U0DTotfDZ0d2UUsXpPmPmMMJ6W773MaA3J+lbiWA==",
+ "dev": true,
+ "requires": {
+ "ansi-regex": "^4.1.0"
+ }
+ },
+ "supports-color": {
+ "version": "7.1.0",
+ "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.1.0.tgz",
+ "integrity": "sha512-oRSIpR8pxT1Wr2FquTNnGet79b3BWljqOuoW/h4oBhxJ/HUbX5nX6JSruTkvXDCFMwDPvsaTTbvMLKZWSy0R5g==",
+ "dev": true,
+ "requires": {
+ "has-flag": "^4.0.0"
+ }
+ },
+ "wrap-ansi": {
+ "version": "5.1.0",
+ "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-5.1.0.tgz",
+ "integrity": "sha512-QC1/iN/2/RPVJ5jYK8BGttj5z83LmSKmvbvrXPNCLZSEb32KKVDJDl/MOt2N01qU2H/FkzEa9PKto1BqDjtd7Q==",
+ "dev": true,
+ "requires": {
+ "ansi-styles": "^3.2.0",
+ "string-width": "^3.0.0",
+ "strip-ansi": "^5.0.0"
+ }
+ },
+ "yargs": {
+ "version": "13.3.2",
+ "resolved": "https://registry.npmjs.org/yargs/-/yargs-13.3.2.tgz",
+ "integrity": "sha512-AX3Zw5iPruN5ie6xGRIDgqkT+ZhnRlZMLMHAs8tg7nRruy2Nb+i5o9bwghAogtM08q1dpr2LVoS8KSTMYpWXUw==",
+ "dev": true,
+ "requires": {
+ "cliui": "^5.0.0",
+ "find-up": "^3.0.0",
+ "get-caller-file": "^2.0.1",
+ "require-directory": "^2.1.1",
+ "require-main-filename": "^2.0.0",
+ "set-blocking": "^2.0.0",
+ "string-width": "^3.0.0",
+ "which-module": "^2.0.0",
+ "y18n": "^4.0.0",
+ "yargs-parser": "^13.1.2"
+ },
+ "dependencies": {
+ "find-up": {
+ "version": "3.0.0",
+ "resolved": "https://registry.npmjs.org/find-up/-/find-up-3.0.0.tgz",
+ "integrity": "sha512-1yD6RmLI1XBfxugvORwlck6f75tYL+iR0jqwsOrOxMZyGYqUuDhJ0l4AXdO1iX/FTs9cBAMEk1gWSEx1kSbylg==",
+ "dev": true,
+ "requires": {
+ "locate-path": "^3.0.0"
+ }
+ }
+ }
+ },
+ "yargs-parser": {
+ "version": "13.1.2",
+ "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-13.1.2.tgz",
+ "integrity": "sha512-3lbsNRf/j+A4QuSZfDRA7HRSfWrzO0YjqTJd5kjAq37Zep1CEgaYmrH9Q3GwPiB9cHyd1Y1UwggGhJGoxipbzg==",
+ "dev": true,
+ "requires": {
+ "camelcase": "^5.0.0",
+ "decamelize": "^1.2.0"
+ }
+ }
+ }
+ },
+ "ms": {
+ "version": "2.1.2",
+ "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz",
+ "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==",
+ "dev": true
+ },
+ "node-preload": {
+ "version": "0.2.1",
+ "resolved": "https://registry.npmjs.org/node-preload/-/node-preload-0.2.1.tgz",
+ "integrity": "sha512-RM5oyBy45cLEoHqCeh+MNuFAxO0vTFBLskvQbOKnEE7YTTSN4tbN8QWDIPQ6L+WvKsB/qLEGpYe2ZZ9d4W9OIQ==",
+ "dev": true,
+ "requires": {
+ "process-on-spawn": "^1.0.0"
+ }
+ },
+ "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
+ },
+ "nyc": {
+ "version": "15.1.0",
+ "resolved": "https://registry.npmjs.org/nyc/-/nyc-15.1.0.tgz",
+ "integrity": "sha512-jMW04n9SxKdKi1ZMGhvUTHBN0EICCRkHemEoE5jm6mTYcqcdas0ATzgUgejlQUHMvpnOZqGB5Xxsv9KxJW1j8A==",
+ "dev": true,
+ "requires": {
+ "@istanbuljs/load-nyc-config": "^1.0.0",
+ "@istanbuljs/schema": "^0.1.2",
+ "caching-transform": "^4.0.0",
+ "convert-source-map": "^1.7.0",
+ "decamelize": "^1.2.0",
+ "find-cache-dir": "^3.2.0",
+ "find-up": "^4.1.0",
+ "foreground-child": "^2.0.0",
+ "get-package-type": "^0.1.0",
+ "glob": "^7.1.6",
+ "istanbul-lib-coverage": "^3.0.0",
+ "istanbul-lib-hook": "^3.0.0",
+ "istanbul-lib-instrument": "^4.0.0",
+ "istanbul-lib-processinfo": "^2.0.2",
+ "istanbul-lib-report": "^3.0.0",
+ "istanbul-lib-source-maps": "^4.0.0",
+ "istanbul-reports": "^3.0.2",
+ "make-dir": "^3.0.0",
+ "node-preload": "^0.2.1",
+ "p-map": "^3.0.0",
+ "process-on-spawn": "^1.0.0",
+ "resolve-from": "^5.0.0",
+ "rimraf": "^3.0.0",
+ "signal-exit": "^3.0.2",
+ "spawn-wrap": "^2.0.0",
+ "test-exclude": "^6.0.0",
+ "yargs": "^15.0.2"
+ }
+ },
+ "object-inspect": {
+ "version": "1.8.0",
+ "resolved": "https://registry.npmjs.org/object-inspect/-/object-inspect-1.8.0.tgz",
+ "integrity": "sha512-jLdtEOB112fORuypAyl/50VRVIBIdVQOSUUGQHzJ4xBSbit81zRarz7GThkEFZy1RceYrWYcPcBFPQwHyAc1gA==",
+ "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.assign": {
+ "version": "4.1.0",
+ "resolved": "https://registry.npmjs.org/object.assign/-/object.assign-4.1.0.tgz",
+ "integrity": "sha512-exHJeq6kBKj58mqGyTQ9DFvrZC/eR6OwxzoM9YRoGBqrXYonaFyGiFMuc9VZrXf7DarreEwMpurG3dd+CNyW5w==",
+ "dev": true,
+ "requires": {
+ "define-properties": "^1.1.2",
+ "function-bind": "^1.1.1",
+ "has-symbols": "^1.0.0",
+ "object-keys": "^1.0.11"
+ }
+ },
+ "once": {
+ "version": "1.4.0",
+ "resolved": "https://registry.npmjs.org/once/-/once-1.4.0.tgz",
+ "integrity": "sha1-WDsap3WWHUsROsF9nFC6753Xa9E=",
+ "dev": true,
+ "requires": {
+ "wrappy": "1"
+ }
+ },
+ "p-limit": {
+ "version": "2.3.0",
+ "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-2.3.0.tgz",
+ "integrity": "sha512-//88mFWSJx8lxCzwdAABTJL2MyWB12+eIY7MDL2SqLmAkeKU9qxRvWuSyTjm3FUmpBEMuFfckAIqEaVGUDxb6w==",
+ "dev": true,
+ "requires": {
+ "p-try": "^2.0.0"
+ }
+ },
+ "p-locate": {
+ "version": "4.1.0",
+ "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-4.1.0.tgz",
+ "integrity": "sha512-R79ZZ/0wAxKGu3oYMlz8jy/kbhsNrS7SKZ7PxEHBgJ5+F2mtFW2fK2cOtBh1cHYkQsbzFV7I+EoRKe6Yt0oK7A==",
+ "dev": true,
+ "requires": {
+ "p-limit": "^2.2.0"
+ }
+ },
+ "p-map": {
+ "version": "3.0.0",
+ "resolved": "https://registry.npmjs.org/p-map/-/p-map-3.0.0.tgz",
+ "integrity": "sha512-d3qXVTF/s+W+CdJ5A29wywV2n8CQQYahlgz2bFiA+4eVNJbHJodPZ+/gXwPGh0bOqA+j8S+6+ckmvLGPk1QpxQ==",
+ "dev": true,
+ "requires": {
+ "aggregate-error": "^3.0.0"
+ }
+ },
+ "p-try": {
+ "version": "2.2.0",
+ "resolved": "https://registry.npmjs.org/p-try/-/p-try-2.2.0.tgz",
+ "integrity": "sha512-R4nPAVTAU0B9D35/Gk3uJf/7XYbQcyohSKdvAxIRSNghFl4e71hVoGnBNQz9cWaXxO2I10KTC+3jMdvvoKw6dQ==",
+ "dev": true
+ },
+ "package-hash": {
+ "version": "4.0.0",
+ "resolved": "https://registry.npmjs.org/package-hash/-/package-hash-4.0.0.tgz",
+ "integrity": "sha512-whdkPIooSu/bASggZ96BWVvZTRMOFxnyUG5PnTSGKoJE2gd5mbVNmR2Nj20QFzxYYgAXpoqC+AiXzl+UMRh7zQ==",
+ "dev": true,
+ "requires": {
+ "graceful-fs": "^4.1.15",
+ "hasha": "^5.0.0",
+ "lodash.flattendeep": "^4.4.0",
+ "release-zalgo": "^1.0.0"
+ }
+ },
+ "path-exists": {
+ "version": "4.0.0",
+ "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-4.0.0.tgz",
+ "integrity": "sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w==",
+ "dev": true
+ },
+ "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-key": {
+ "version": "3.1.1",
+ "resolved": "https://registry.npmjs.org/path-key/-/path-key-3.1.1.tgz",
+ "integrity": "sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q==",
+ "dev": true
+ },
+ "path-parse": {
+ "version": "1.0.6",
+ "resolved": "https://registry.npmjs.org/path-parse/-/path-parse-1.0.6.tgz",
+ "integrity": "sha512-GSmOT2EbHrINBf9SR7CDELwlJ8AENk3Qn7OikK4nFYAu3Ote2+JYNVvkpAEQm3/TLNEJFD/xZJjzyxg3KBWOzw==",
+ "dev": true
+ },
+ "picomatch": {
+ "version": "2.2.2",
+ "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-2.2.2.tgz",
+ "integrity": "sha512-q0M/9eZHzmr0AulXyPwNfZjtwZ/RBZlbN3K3CErVrk50T2ASYI7Bye0EvekFY3IP1Nt2DHu0re+V2ZHIpMkuWg==",
+ "dev": true
+ },
+ "pkg-dir": {
+ "version": "4.2.0",
+ "resolved": "https://registry.npmjs.org/pkg-dir/-/pkg-dir-4.2.0.tgz",
+ "integrity": "sha512-HRDzbaKjC+AOWVXxAU/x54COGeIv9eb+6CkDSQoNTt4XyWoIJvuPsXizxu/Fr23EiekbtZwmh1IcIG/l/a10GQ==",
+ "dev": true,
+ "requires": {
+ "find-up": "^4.0.0"
+ }
+ },
+ "process-on-spawn": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/process-on-spawn/-/process-on-spawn-1.0.0.tgz",
+ "integrity": "sha512-1WsPDsUSMmZH5LeMLegqkPDrsGgsWwk1Exipy2hvB0o/F0ASzbpIctSCcZIK1ykJvtTJULEH+20WOFjMvGnCTg==",
+ "dev": true,
+ "requires": {
+ "fromentries": "^1.2.0"
+ }
+ },
+ "promise.allsettled": {
+ "version": "1.0.2",
+ "resolved": "https://registry.npmjs.org/promise.allsettled/-/promise.allsettled-1.0.2.tgz",
+ "integrity": "sha512-UpcYW5S1RaNKT6pd+s9jp9K9rlQge1UXKskec0j6Mmuq7UJCvlS2J2/s/yuPN8ehftf9HXMxWlKiPbGGUzpoRg==",
+ "dev": true,
+ "requires": {
+ "array.prototype.map": "^1.0.1",
+ "define-properties": "^1.1.3",
+ "es-abstract": "^1.17.0-next.1",
+ "function-bind": "^1.1.1",
+ "iterate-value": "^1.0.0"
+ }
+ },
+ "readdirp": {
+ "version": "3.3.0",
+ "resolved": "https://registry.npmjs.org/readdirp/-/readdirp-3.3.0.tgz",
+ "integrity": "sha512-zz0pAkSPOXXm1viEwygWIPSPkcBYjW1xU5j/JBh5t9bGCJwa6f9+BJa6VaB2g+b55yVrmXzqkyLf4xaWYM0IkQ==",
+ "dev": true,
+ "requires": {
+ "picomatch": "^2.0.7"
+ }
+ },
+ "regenerator-runtime": {
+ "version": "0.13.5",
+ "resolved": "https://registry.npmjs.org/regenerator-runtime/-/regenerator-runtime-0.13.5.tgz",
+ "integrity": "sha512-ZS5w8CpKFinUzOwW3c83oPeVXoNsrLsaCoLtJvAClH135j/R77RuymhiSErhm2lKcwSCIpmvIWSbDkIfAqKQlA==",
+ "dev": true
+ },
+ "release-zalgo": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/release-zalgo/-/release-zalgo-1.0.0.tgz",
+ "integrity": "sha1-CXALflB0Mpc5Mw5TXFqQ+2eFFzA=",
+ "dev": true,
+ "requires": {
+ "es6-error": "^4.0.1"
+ }
+ },
+ "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": "2.0.0",
+ "resolved": "https://registry.npmjs.org/require-main-filename/-/require-main-filename-2.0.0.tgz",
+ "integrity": "sha512-NKN5kMDylKuldxYLSUfrbo5Tuzh4hd+2E8NPPX02mZtn1VuREQToYe/ZdlJy+J3uCpfaiGF05e7B8W0iXbQHmg==",
+ "dev": true
+ },
+ "resolve": {
+ "version": "1.17.0",
+ "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.17.0.tgz",
+ "integrity": "sha512-ic+7JYiV8Vi2yzQGFWOkiZD5Z9z7O2Zhm9XMaTxdJExKasieFCr+yXZ/WmXsckHiKl12ar0y6XiXDx3m4RHn1w==",
+ "dev": true,
+ "requires": {
+ "path-parse": "^1.0.6"
+ }
+ },
+ "resolve-from": {
+ "version": "5.0.0",
+ "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-5.0.0.tgz",
+ "integrity": "sha512-qYg9KP24dD5qka9J47d0aVky0N+b4fTU89LN9iDnjB5waksiC49rvMB0PrUJQGoTmH50XPiqOvAjDfaijGxYZw==",
+ "dev": true
+ },
+ "rimraf": {
+ "version": "3.0.2",
+ "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-3.0.2.tgz",
+ "integrity": "sha512-JZkJMZkAGFFPP2YqXZXPbMlMBgsxzE8ILs4lMIX/2o0L9UBw9O/Y3o6wFw/i9YLapcUJWwqbi3kdxIPdC62TIA==",
+ "dev": true,
+ "requires": {
+ "glob": "^7.1.3"
+ }
+ },
+ "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
+ },
+ "semver": {
+ "version": "6.3.0",
+ "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz",
+ "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==",
+ "dev": true
+ },
+ "serialize-javascript": {
+ "version": "3.0.0",
+ "resolved": "https://registry.npmjs.org/serialize-javascript/-/serialize-javascript-3.0.0.tgz",
+ "integrity": "sha512-skZcHYw2vEX4bw90nAr2iTTsz6x2SrHEnfxgKYmZlvJYBEZrvbKtobJWlQ20zczKb3bsHHXXTYt48zBA7ni9cw==",
+ "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
+ },
+ "shebang-command": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/shebang-command/-/shebang-command-2.0.0.tgz",
+ "integrity": "sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA==",
+ "dev": true,
+ "requires": {
+ "shebang-regex": "^3.0.0"
+ }
+ },
+ "shebang-regex": {
+ "version": "3.0.0",
+ "resolved": "https://registry.npmjs.org/shebang-regex/-/shebang-regex-3.0.0.tgz",
+ "integrity": "sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A==",
+ "dev": true
+ },
+ "signal-exit": {
+ "version": "3.0.3",
+ "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-3.0.3.tgz",
+ "integrity": "sha512-VUJ49FC8U1OxwZLxIbTTrDvLnf/6TDgxZcK8wxR8zs13xpx7xbG60ndBlhNrFi2EMuFRoeDoJO7wthSLq42EjA==",
+ "dev": true
+ },
+ "source-map": {
+ "version": "0.5.7",
+ "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.5.7.tgz",
+ "integrity": "sha1-igOdLRAh0i0eoUyA2OpGi6LvP8w=",
+ "dev": true
+ },
+ "spawn-wrap": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/spawn-wrap/-/spawn-wrap-2.0.0.tgz",
+ "integrity": "sha512-EeajNjfN9zMnULLwhZZQU3GWBoFNkbngTUPfaawT4RkMiviTxcX0qfhVbGey39mfctfDHkWtuecgQ8NJcyQWHg==",
+ "dev": true,
+ "requires": {
+ "foreground-child": "^2.0.0",
+ "is-windows": "^1.0.2",
+ "make-dir": "^3.0.0",
+ "rimraf": "^3.0.0",
+ "signal-exit": "^3.0.2",
+ "which": "^2.0.1"
+ }
+ },
+ "sprintf-js": {
+ "version": "1.0.3",
+ "resolved": "https://registry.npmjs.org/sprintf-js/-/sprintf-js-1.0.3.tgz",
+ "integrity": "sha1-BOaSb2YolTVPPdAVIDYzuFcpfiw=",
+ "dev": true
+ },
+ "string-width": {
+ "version": "4.2.0",
+ "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.0.tgz",
+ "integrity": "sha512-zUz5JD+tgqtuDjMhwIg5uFVV3dtqZ9yQJlZVfq4I01/K5Paj5UHj7VyrQOJvzawSVlKpObApbfD0Ed6yJc+1eg==",
+ "dev": true,
+ "requires": {
+ "emoji-regex": "^8.0.0",
+ "is-fullwidth-code-point": "^3.0.0",
+ "strip-ansi": "^6.0.0"
+ }
+ },
+ "string.prototype.trimend": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/string.prototype.trimend/-/string.prototype.trimend-1.0.1.tgz",
+ "integrity": "sha512-LRPxFUaTtpqYsTeNKaFOw3R4bxIzWOnbQ837QfBylo8jIxtcbK/A/sMV7Q+OAV/vWo+7s25pOE10KYSjaSO06g==",
+ "dev": true,
+ "requires": {
+ "define-properties": "^1.1.3",
+ "es-abstract": "^1.17.5"
+ }
+ },
+ "string.prototype.trimstart": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/string.prototype.trimstart/-/string.prototype.trimstart-1.0.1.tgz",
+ "integrity": "sha512-XxZn+QpvrBI1FOcg6dIpxUPgWCPuNXvMD72aaRaUQv1eD4e/Qy8i/hFTe0BUmD60p/QA6bh1avmuPTfNjqVWRw==",
+ "dev": true,
+ "requires": {
+ "define-properties": "^1.1.3",
+ "es-abstract": "^1.17.5"
+ }
+ },
+ "strip-ansi": {
+ "version": "6.0.0",
+ "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.0.tgz",
+ "integrity": "sha512-AuvKTrTfQNYNIctbR1K/YGTR1756GycPsg7b9bdV9Duqur4gv6aKqHXah67Z8ImS7WEz5QVcOtlfW2rZEugt6w==",
+ "dev": true,
+ "requires": {
+ "ansi-regex": "^5.0.0"
+ }
+ },
+ "strip-bom": {
+ "version": "4.0.0",
+ "resolved": "https://registry.npmjs.org/strip-bom/-/strip-bom-4.0.0.tgz",
+ "integrity": "sha512-3xurFv5tEgii33Zi8Jtp55wEIILR9eh34FAW00PZf+JnSsTmV/ioewSgQl97JHvgjoRGwPShsWm+IdrxB35d0w==",
+ "dev": true
+ },
+ "strip-json-comments": {
+ "version": "3.0.1",
+ "resolved": "https://registry.npmjs.org/strip-json-comments/-/strip-json-comments-3.0.1.tgz",
+ "integrity": "sha512-VTyMAUfdm047mwKl+u79WIdrZxtFtn+nBxHeb844XBQ9uMNTuTHdx2hc5RiAJYqwTj3wc/xe5HLSdJSkJ+WfZw==",
+ "dev": true
+ },
+ "supports-color": {
+ "version": "5.5.0",
+ "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz",
+ "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==",
+ "dev": true,
+ "requires": {
+ "has-flag": "^3.0.0"
+ }
+ },
+ "test-exclude": {
+ "version": "6.0.0",
+ "resolved": "https://registry.npmjs.org/test-exclude/-/test-exclude-6.0.0.tgz",
+ "integrity": "sha512-cAGWPIyOHU6zlmg88jwm7VRyXnMN7iV68OGAbYDk/Mh/xC/pzVPlQtY6ngoIH/5/tciuhGfvESU8GrHrcxD56w==",
+ "dev": true,
+ "requires": {
+ "@istanbuljs/schema": "^0.1.2",
+ "glob": "^7.1.4",
+ "minimatch": "^3.0.4"
+ }
+ },
+ "to-fast-properties": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/to-fast-properties/-/to-fast-properties-2.0.0.tgz",
+ "integrity": "sha1-3F5pjL0HkmW8c+A3doGk5Og/YW4=",
+ "dev": true
+ },
+ "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"
+ }
+ },
+ "type-fest": {
+ "version": "0.8.1",
+ "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.8.1.tgz",
+ "integrity": "sha512-4dbzIzqvjtgiM5rw1k5rEHtBANKmdudhGyBEajN01fEyhaAIhsoKNy6y7+IN93IfpFtwY9iqi7kD+xwKhQsNJA==",
+ "dev": true
+ },
+ "typedarray-to-buffer": {
+ "version": "3.1.5",
+ "resolved": "https://registry.npmjs.org/typedarray-to-buffer/-/typedarray-to-buffer-3.1.5.tgz",
+ "integrity": "sha512-zdu8XMNEDepKKR+XYOXAVPtWui0ly0NtohUscw+UmaHiAWT8hrV1rr//H6V+0DvJ3OQ19S979M0laLfX8rm82Q==",
+ "dev": true,
+ "requires": {
+ "is-typedarray": "^1.0.0"
+ }
+ },
+ "uuid": {
+ "version": "3.4.0",
+ "resolved": "https://registry.npmjs.org/uuid/-/uuid-3.4.0.tgz",
+ "integrity": "sha512-HjSDRw6gZE5JMggctHBcjVak08+KEVhSIiDzFnT9S9aegmp85S/bReBVTb4QTFaRNptJ9kuYaNhnbNEOkbKb/A==",
+ "dev": true
+ },
+ "which": {
+ "version": "2.0.2",
+ "resolved": "https://registry.npmjs.org/which/-/which-2.0.2.tgz",
+ "integrity": "sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==",
+ "dev": true,
+ "requires": {
+ "isexe": "^2.0.0"
+ }
+ },
+ "which-module": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/which-module/-/which-module-2.0.0.tgz",
+ "integrity": "sha1-2e8H3Od7mQK4o6j6SzHD4/fm6Ho=",
+ "dev": true
+ },
+ "wide-align": {
+ "version": "1.1.3",
+ "resolved": "https://registry.npmjs.org/wide-align/-/wide-align-1.1.3.tgz",
+ "integrity": "sha512-QGkOQc8XL6Bt5PwnsExKBPuMKBxnGxWWW3fU55Xt4feHozMUhdUMaBCk290qpm/wG5u/RSKzwdAC4i51YigihA==",
+ "dev": true,
+ "requires": {
+ "string-width": "^1.0.2 || 2"
+ },
+ "dependencies": {
+ "ansi-regex": {
+ "version": "3.0.0",
+ "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-3.0.0.tgz",
+ "integrity": "sha1-7QMXwyIGT3lGbAKWa922Bas32Zg=",
+ "dev": true
+ },
+ "is-fullwidth-code-point": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-2.0.0.tgz",
+ "integrity": "sha1-o7MKXE8ZkYMWeqq5O+764937ZU8=",
+ "dev": true
+ },
+ "string-width": {
+ "version": "2.1.1",
+ "resolved": "https://registry.npmjs.org/string-width/-/string-width-2.1.1.tgz",
+ "integrity": "sha512-nOqH59deCq9SRHlxq1Aw85Jnt4w6KvLKqWVik6oA9ZklXLNIOlqg4F2yrT1MVaTjAqvVwdfeZ7w7aCvJD7ugkw==",
+ "dev": true,
+ "requires": {
+ "is-fullwidth-code-point": "^2.0.0",
+ "strip-ansi": "^4.0.0"
+ }
+ },
+ "strip-ansi": {
+ "version": "4.0.0",
+ "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-4.0.0.tgz",
+ "integrity": "sha1-qEeQIusaw2iocTibY1JixQXuNo8=",
+ "dev": true,
+ "requires": {
+ "ansi-regex": "^3.0.0"
+ }
+ }
+ }
+ },
+ "workerpool": {
+ "version": "6.0.0",
+ "resolved": "https://registry.npmjs.org/workerpool/-/workerpool-6.0.0.tgz",
+ "integrity": "sha512-fU2OcNA/GVAJLLyKUoHkAgIhKb0JoCpSjLC/G2vYKxUjVmQwGbRVeoPJ1a8U4pnVofz4AQV5Y/NEw8oKqxEBtA==",
+ "dev": true
+ },
+ "wrap-ansi": {
+ "version": "6.2.0",
+ "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-6.2.0.tgz",
+ "integrity": "sha512-r6lPcBGxZXlIcymEu7InxDMhdW0KDxpLgoFLcguasxCaJ/SOIZwINatK9KY/tf+ZrlywOKU0UDj3ATXUBfxJXA==",
+ "dev": true,
+ "requires": {
+ "ansi-styles": "^4.0.0",
+ "string-width": "^4.1.0",
+ "strip-ansi": "^6.0.0"
+ },
+ "dependencies": {
+ "ansi-styles": {
+ "version": "4.2.1",
+ "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.2.1.tgz",
+ "integrity": "sha512-9VGjrMsG1vePxcSweQsN20KY/c4zN0h9fLjqAbwbPfahM3t+NL+M9HC8xeXG2I8pX5NoamTGNuomEUFI7fcUjA==",
+ "dev": true,
+ "requires": {
+ "@types/color-name": "^1.1.1",
+ "color-convert": "^2.0.1"
+ }
+ },
+ "color-convert": {
+ "version": "2.0.1",
+ "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz",
+ "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==",
+ "dev": true,
+ "requires": {
+ "color-name": "~1.1.4"
+ }
+ },
+ "color-name": {
+ "version": "1.1.4",
+ "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz",
+ "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==",
+ "dev": true
+ }
+ }
+ },
+ "wrappy": {
+ "version": "1.0.2",
+ "resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz",
+ "integrity": "sha1-tSQ9jz7BqjXxNkYFvA0QNuMKtp8=",
+ "dev": true
+ },
+ "write-file-atomic": {
+ "version": "3.0.3",
+ "resolved": "https://registry.npmjs.org/write-file-atomic/-/write-file-atomic-3.0.3.tgz",
+ "integrity": "sha512-AvHcyZ5JnSfq3ioSyjrBkH9yW4m7Ayk8/9My/DD9onKeu/94fwrMocemO2QAJFAlnnDN+ZDS+ZjAR5ua1/PV/Q==",
+ "dev": true,
+ "requires": {
+ "imurmurhash": "^0.1.4",
+ "is-typedarray": "^1.0.0",
+ "signal-exit": "^3.0.2",
+ "typedarray-to-buffer": "^3.1.5"
+ }
+ },
+ "xregexp": {
+ "version": "4.3.0",
+ "resolved": "https://registry.npmjs.org/xregexp/-/xregexp-4.3.0.tgz",
+ "integrity": "sha512-7jXDIFXh5yJ/orPn4SXjuVrWWoi4Cr8jfV1eHv9CixKSbU+jY4mxfrBwAuDvupPNKpMUY+FeIqsVw/JLT9+B8g==",
+ "dev": true,
+ "requires": {
+ "@babel/runtime-corejs3": "^7.8.3"
+ }
+ },
+ "y18n": {
+ "version": "4.0.0",
+ "resolved": "https://registry.npmjs.org/y18n/-/y18n-4.0.0.tgz",
+ "integrity": "sha512-r9S/ZyXu/Xu9q1tYlpsLIsa3EeLXXk0VwlxqTcFRfg9EhMW+17kbt9G0NrgCmhGb5vT2hyhJZLfDGx+7+5Uj/w==",
+ "dev": true
+ },
+ "yargs": {
+ "version": "15.4.0",
+ "resolved": "https://registry.npmjs.org/yargs/-/yargs-15.4.0.tgz",
+ "integrity": "sha512-D3fRFnZwLWp8jVAAhPZBsmeIHY8tTsb8ItV9KaAaopmC6wde2u6Yw29JBIZHXw14kgkRnYmDgmQU4FVMDlIsWw==",
+ "dev": true,
+ "requires": {
+ "cliui": "^6.0.0",
+ "decamelize": "^3.2.0",
+ "find-up": "^4.1.0",
+ "get-caller-file": "^2.0.1",
+ "require-directory": "^2.1.1",
+ "require-main-filename": "^2.0.0",
+ "set-blocking": "^2.0.0",
+ "string-width": "^4.2.0",
+ "which-module": "^2.0.0",
+ "y18n": "^4.0.0",
+ "yargs-parser": "^18.1.2"
+ },
+ "dependencies": {
+ "decamelize": {
+ "version": "3.2.0",
+ "resolved": "https://registry.npmjs.org/decamelize/-/decamelize-3.2.0.tgz",
+ "integrity": "sha512-4TgkVUsmmu7oCSyGBm5FvfMoACuoh9EOidm7V5/J2X2djAwwt57qb3F2KMP2ITqODTCSwb+YRV+0Zqrv18k/hw==",
+ "dev": true,
+ "requires": {
+ "xregexp": "^4.2.4"
+ }
+ }
+ }
+ },
+ "yargs-parser": {
+ "version": "18.1.3",
+ "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-18.1.3.tgz",
+ "integrity": "sha512-o50j0JeToy/4K6OZcaQmW6lyXXKhq7csREXcDwk2omFPJEwUNOVtJKvmDr9EI1fAJZUyZcRF7kxGBWmRXudrCQ==",
+ "dev": true,
+ "requires": {
+ "camelcase": "^5.0.0",
+ "decamelize": "^1.2.0"
+ }
+ },
+ "yargs-unparser": {
+ "version": "1.6.0",
+ "resolved": "https://registry.npmjs.org/yargs-unparser/-/yargs-unparser-1.6.0.tgz",
+ "integrity": "sha512-W9tKgmSn0DpSatfri0nx52Joq5hVXgeLiqR/5G0sZNDoLZFOr/xjBUDcShCOGNsBnEMNo1KAMBkTej1Hm62HTw==",
+ "dev": true,
+ "requires": {
+ "flat": "^4.1.0",
+ "lodash": "^4.17.15",
+ "yargs": "^13.3.0"
+ },
+ "dependencies": {
+ "ansi-regex": {
+ "version": "4.1.0",
+ "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-4.1.0.tgz",
+ "integrity": "sha512-1apePfXM1UOSqw0o9IiFAovVz9M5S1Dg+4TrDwfMewQ6p/rmMueb7tWZjQ1rx4Loy1ArBggoqGpfqqdI4rondg==",
+ "dev": true
+ },
+ "cliui": {
+ "version": "5.0.0",
+ "resolved": "https://registry.npmjs.org/cliui/-/cliui-5.0.0.tgz",
+ "integrity": "sha512-PYeGSEmmHM6zvoef2w8TPzlrnNpXIjTipYK780YswmIP9vjxmd6Y2a3CB2Ks6/AU8NHjZugXvo8w3oWM2qnwXA==",
+ "dev": true,
+ "requires": {
+ "string-width": "^3.1.0",
+ "strip-ansi": "^5.2.0",
+ "wrap-ansi": "^5.1.0"
+ }
+ },
+ "emoji-regex": {
+ "version": "7.0.3",
+ "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-7.0.3.tgz",
+ "integrity": "sha512-CwBLREIQ7LvYFB0WyRvwhq5N5qPhc6PMjD6bYggFlI5YyDgl+0vxq5VHbMOFqLg7hfWzmu8T5Z1QofhmTIhItA==",
+ "dev": true
+ },
+ "find-up": {
+ "version": "3.0.0",
+ "resolved": "https://registry.npmjs.org/find-up/-/find-up-3.0.0.tgz",
+ "integrity": "sha512-1yD6RmLI1XBfxugvORwlck6f75tYL+iR0jqwsOrOxMZyGYqUuDhJ0l4AXdO1iX/FTs9cBAMEk1gWSEx1kSbylg==",
+ "dev": true,
+ "requires": {
+ "locate-path": "^3.0.0"
+ }
+ },
+ "is-fullwidth-code-point": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-2.0.0.tgz",
+ "integrity": "sha1-o7MKXE8ZkYMWeqq5O+764937ZU8=",
+ "dev": true
+ },
+ "locate-path": {
+ "version": "3.0.0",
+ "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-3.0.0.tgz",
+ "integrity": "sha512-7AO748wWnIhNqAuaty2ZWHkQHRSNfPVIsPIfwEOWO22AmaoVrWavlOcMR5nzTLNYvp36X220/maaRsrec1G65A==",
+ "dev": true,
+ "requires": {
+ "p-locate": "^3.0.0",
+ "path-exists": "^3.0.0"
+ }
+ },
+ "p-locate": {
+ "version": "3.0.0",
+ "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-3.0.0.tgz",
+ "integrity": "sha512-x+12w/To+4GFfgJhBEpiDcLozRJGegY+Ei7/z0tSLkMmxGZNybVMSfWj9aJn8Z5Fc7dBUNJOOVgPv2H7IwulSQ==",
+ "dev": true,
+ "requires": {
+ "p-limit": "^2.0.0"
+ }
+ },
+ "path-exists": {
+ "version": "3.0.0",
+ "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-3.0.0.tgz",
+ "integrity": "sha1-zg6+ql94yxiSXqfYENe1mwEP1RU=",
+ "dev": true
+ },
+ "string-width": {
+ "version": "3.1.0",
+ "resolved": "https://registry.npmjs.org/string-width/-/string-width-3.1.0.tgz",
+ "integrity": "sha512-vafcv6KjVZKSgz06oM/H6GDBrAtz8vdhQakGjFIvNrHA6y3HCF1CInLy+QLq8dTJPQ1b+KDUqDFctkdRW44e1w==",
+ "dev": true,
+ "requires": {
+ "emoji-regex": "^7.0.1",
+ "is-fullwidth-code-point": "^2.0.0",
+ "strip-ansi": "^5.1.0"
+ }
+ },
+ "strip-ansi": {
+ "version": "5.2.0",
+ "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-5.2.0.tgz",
+ "integrity": "sha512-DuRs1gKbBqsMKIZlrffwlug8MHkcnpjs5VPmL1PAh+mA30U0DTotfDZ0d2UUsXpPmPmMMJ6W773MaA3J+lbiWA==",
+ "dev": true,
+ "requires": {
+ "ansi-regex": "^4.1.0"
+ }
+ },
+ "wrap-ansi": {
+ "version": "5.1.0",
+ "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-5.1.0.tgz",
+ "integrity": "sha512-QC1/iN/2/RPVJ5jYK8BGttj5z83LmSKmvbvrXPNCLZSEb32KKVDJDl/MOt2N01qU2H/FkzEa9PKto1BqDjtd7Q==",
+ "dev": true,
+ "requires": {
+ "ansi-styles": "^3.2.0",
+ "string-width": "^3.0.0",
+ "strip-ansi": "^5.0.0"
+ }
+ },
+ "yargs": {
+ "version": "13.3.2",
+ "resolved": "https://registry.npmjs.org/yargs/-/yargs-13.3.2.tgz",
+ "integrity": "sha512-AX3Zw5iPruN5ie6xGRIDgqkT+ZhnRlZMLMHAs8tg7nRruy2Nb+i5o9bwghAogtM08q1dpr2LVoS8KSTMYpWXUw==",
+ "dev": true,
+ "requires": {
+ "cliui": "^5.0.0",
+ "find-up": "^3.0.0",
+ "get-caller-file": "^2.0.1",
+ "require-directory": "^2.1.1",
+ "require-main-filename": "^2.0.0",
+ "set-blocking": "^2.0.0",
+ "string-width": "^3.0.0",
+ "which-module": "^2.0.0",
+ "y18n": "^4.0.0",
+ "yargs-parser": "^13.1.2"
+ }
+ },
+ "yargs-parser": {
+ "version": "13.1.2",
+ "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-13.1.2.tgz",
+ "integrity": "sha512-3lbsNRf/j+A4QuSZfDRA7HRSfWrzO0YjqTJd5kjAq37Zep1CEgaYmrH9Q3GwPiB9cHyd1Y1UwggGhJGoxipbzg==",
+ "dev": true,
+ "requires": {
+ "camelcase": "^5.0.0",
+ "decamelize": "^1.2.0"
+ }
+ }
+ }
+ }
+ }
+}
--- /dev/null
+{
+ "name": "workouts-integration-tests",
+ "version": "0.0.0",
+ "description": "",
+ "main": "index.js",
+ "scripts": {
+ "test": "mocha"
+ },
+ "author": "",
+ "license": "UNLICENSED",
+ "devDependencies": {
+ "mocha": "^8.0.1"
+ }
+}
--- /dev/null
+const assert = require('assert');
+const util = require('util');
+
+const exec = util.promisify(require('child_process').exec);
+const unlink = util.promisify(require('fs').unlink);
+
+describe('add integration tests', () => {
+
+ beforeEach(async() => {
+ await assert.doesNotReject(async() => await exec('./workouts attr add lower'));
+ await assert.doesNotReject(async() => await exec('./workouts attr add upper'));
+
+ await assert.doesNotReject(async() => await exec('./workouts new workout1 01'));
+ await assert.doesNotReject(async() => await exec('./workouts new workout2 10'));
+ await assert.doesNotReject(async() => await exec('./workouts new test 00'));
+ await assert.doesNotReject(async() => await exec('./workouts new apple 11'));
+ });
+
+ afterEach(async() => {
+ await unlink('workouts.db');
+ });
+
+ it('should succeed when adding a new workout', async() => {
+ await assert.doesNotReject(async() => await exec('./workouts add test'));
+ });
+
+ it('should succeed when adding a new workout and reflect that upon ls', async() => {
+ await assert.doesNotReject(async() => {
+ const {stdout,stderr} = await exec('./workouts add workout1 2020-07-10');
+
+ assert.strictEqual(stdout,`added workout workout1 on 2020-07-10\n`);
+ });
+
+ await assert.doesNotReject(async() => {
+ const {stdout,stderr} = await exec('./workouts add apple 2020-06-10');
+
+ assert.strictEqual(stdout,`added workout apple on 2020-06-10\n`);
+ });
+
+ await assert.doesNotReject(async() => {
+ const {stdout,stderr} = await exec('./workouts');
+
+ let expected = `Attributes:\tlower\tupper\t\n`;
+ expected += `workout1 [2] [Last done: 2020-07-10]\n`;
+ expected += `apple [3] [Last done: 2020-06-10]\n`;
+ expected += `test [0] [Last done: N/A]\n`;
+ expected += `workout2 [1] [Last done: N/A]\n`;
+
+ assert.strictEqual(stdout,expected);
+ });
+ });
+
+ it('should successfully get last done', async() => {
+ await assert.doesNotReject(async() => await exec('./workouts add workout1 2020-07-10'));
+ await assert.doesNotReject(async() => await exec('./workouts add workout1 2020-06-10'));
+
+ await assert.doesNotReject(async() => {
+ const {stdout,stderr} = await exec('./workouts workout1');
+
+ let expected = `Attributes:\tlower\tupper\t\n`;
+ expected += `workout1 [2] [Last done: 2020-07-10]\n`;
+
+ assert.strictEqual(stdout,expected);
+ });
+ });
+
+ it('should reject when not given a valid workout', async() => {
+ await assert.rejects(async() => await exec('./workouts add hahahahahah 2020-07-10'));
+ });
+
+ it('should reject when not given a valid date', async() => {
+ await assert.rejects(async() => await exec('./workouts add hahahahahah 2020-07-10123123123123123'));
+ await assert.rejects(async() => await exec('./workouts add hahahahahah "kasdflasj lkssdasdf lkdaNOT_A_DATE"'));
+ });
+
+});
\ No newline at end of file
--- /dev/null
+const assert = require('assert');
+const util = require('util');
+
+const exec = util.promisify(require('child_process').exec);
+const unlink = util.promisify(require('fs').unlink);
+
+describe('attr integration tests', () => {
+
+ const attributes = [
+ 'lower',
+ 'upper',
+ 'core',
+ 'back',
+ 'cardio',
+ 'martial',
+ 'other'
+ ];
+
+ describe('attr add', () => {
+
+ it('should successfully add', async() => {
+ for(const attr of attributes) {
+ await assert.doesNotReject(async() => {
+ const {stdout,stderr} = await exec(`./workouts attr add ${attr}`);
+
+ assert.strictEqual(stdout,`New attribute added: ${attr}\n`);
+ });
+ }
+ });
+
+ it('should fail to add an attribute with the same name', async() => {
+ await assert.rejects(async() => await exec('./workouts attr add other'));
+ await assert.doesNotReject(async() => await exec('./workouts attr add Other'));
+ });
+
+ it('should fail when not given a name to add', async() => {
+ await assert.rejects(async() => await exec('./workouts attr add'));
+ });
+
+ });
+
+ describe('attr ls', () => {
+
+ it('should successfully list all attributes in order they were added', async() => {
+ attributes.push('Other');
+
+ await assert.doesNotReject(async() => {
+ const {stdout,stderr} = await exec(`./workouts attr`);
+
+ let expected = "";
+ for(const attr of attributes) {
+ expected += `${attr}\n`;
+ }
+
+ assert.strictEqual(stdout,expected);
+ });
+
+ await assert.doesNotReject(async() => {
+ const {stdout,stderr} = await exec(`./workouts attr ls`);
+
+ let expected = "";
+ for(const attr of attributes) {
+ expected += `${attr}\n`;
+ }
+
+ assert.strictEqual(stdout,expected);
+ });
+ });
+
+ });
+
+ after(async() => {
+ await unlink('workouts.db');
+ });
+
+});
\ No newline at end of file
--- /dev/null
+const assert = require('assert');
+const util = require('util');
+
+const exec = util.promisify(require('child_process').exec);
+const access = util.promisify(require('fs').access);
+const unlink = util.promisify(require('fs').unlink);
+
+describe('basic tests', () => {
+
+ it('should create workouts.db when run with no arguments', async() => {
+ const {stdout,stderr} = await exec('./workouts');
+ assert.strictEqual(stdout,'');
+ await assert.doesNotReject(async() => await access('workouts.db'));
+ });
+
+ it('should print usage options when run with --help option', async() => {
+ const {stdout,stderr} = await exec('./workouts --help');
+ let usage = `Usage:\n`;
+ usage += `\tworkouts [options] [ls] [--filter {attribute filter}] [search term]\n`;
+ usage += `\tworkouts [options] add [!name] [date]\n`;
+ usage += `\tworkouts [options] new [!name] [attributes]\n`;
+ usage += `\tworkouts [options] attr [ls]\n`;
+ usage += `\tworkouts [options] attr add [!name]\n`;
+ usage += `\tworkouts [options] toggle [!workout name] [!attr]\n`;
+ usage += `\tworkouts [options] recent\n`;
+ usage += `\n`;
+ usage += `Options:\n`;
+ usage += `\t--help,-h\n`;
+ usage += `\t--homedir=<path>\n`;
+ usage += `\t--rows=<number>\n`;
+ usage += `\t--verbose,-v\n`;
+ usage += `\n`;
+ usage += `{attribute filter} refers to string in bit flags corresponding to active attributes.\n\n`;
+ usage += `The character '!' in front of a variable name means required.\n`;
+ assert.strictEqual(stdout,usage);
+ });
+
+ it(`should throw when given option --homedir which doesn't exist`, async() => {
+ await assert.rejects(async() => await exec('./workouts --homedir=`pwd`/doesnt_exist'));
+ });
+
+ after(async() => {
+ await unlink('workouts.db');
+ });
+
+});
+
+
--- /dev/null
+const assert = require('assert');
+const util = require('util');
+
+const exec = util.promisify(require('child_process').exec);
+const unlink = util.promisify(require('fs').unlink);
+
+describe('ls integration tests', () => {
+
+ beforeEach(async() => {
+ await assert.doesNotReject(async() => await exec('./workouts attr add lower'));
+ await assert.doesNotReject(async() => await exec('./workouts attr add upper'));
+
+ await assert.doesNotReject(async() => await exec('./workouts new workout1 01'));
+ await assert.doesNotReject(async() => await exec('./workouts new workout2 10'));
+ await assert.doesNotReject(async() => await exec('./workouts new test 00'));
+ await assert.doesNotReject(async() => await exec('./workouts new apple 11'));
+ });
+
+ afterEach(async() => {
+ await unlink('workouts.db');
+ });
+
+ it('should succeed when no workouts are present', async() => {
+ await assert.doesNotReject(async() => {
+ const {stdout,stderr} = await exec('./workouts');
+
+ let expected = `Attributes:\tlower\tupper\t\n`;
+ expected += `apple [3] [Last done: N/A]\n`;
+ expected += `test [0] [Last done: N/A]\n`;
+ expected += `workout1 [2] [Last done: N/A]\n`;
+ expected += `workout2 [1] [Last done: N/A]\n`;
+
+ assert.strictEqual(stdout,expected);
+ });
+ });
+
+ it('should successfully limit rows grabbed', async() => {
+ await assert.doesNotReject(async() => {
+ const {stdout,stderr} = await exec('./workouts --rows=1');
+
+ let expected = `Attributes:\tlower\tupper\t\n`;
+ expected += `apple [3] [Last done: N/A]\n`;
+ assert.strictEqual(stdout,expected);
+ });
+ });
+
+ it('should successfully search for workouts', async() => {
+ await assert.doesNotReject(async() => {
+ const {stdout,stderr} = await exec('./workouts workout');
+
+ let expected = `Attributes:\tlower\tupper\t\n`;
+ expected += `workout1 [2] [Last done: N/A]\n`;
+ expected += `workout2 [1] [Last done: N/A]\n`;
+
+ assert.strictEqual(stdout,expected);
+ });
+ });
+
+ it('should reject when `ls` term is not given and attempting to filter', async() => {
+ await assert.rejects(async() => {
+ await exec('./workouts --filter 01');
+ });
+ });
+
+ it('should successfully filter workouts by attribute', async() => {
+ await assert.doesNotReject(async() => {
+ const {stdout,stderr} = await exec('./workouts ls --filter 01');
+
+ let expected = `Attributes:\tlower\tupper\t\n`;
+ expected += `workout2 [1] [Last done: N/A]\n`;
+
+ assert.strictEqual(stdout,expected);
+ });
+
+ await assert.doesNotReject(async() => {
+ const {stdout,stderr} = await exec('./workouts ls --filter 10');
+
+ let expected = `Attributes:\tlower\tupper\t\n`;
+ expected += `workout1 [2] [Last done: N/A]\n`;
+
+ assert.strictEqual(stdout,expected);
+ });
+
+ await assert.doesNotReject(async() => {
+ const {stdout,stderr} = await exec('./workouts ls --filter x1');
+
+ let expected = `Attributes:\tlower\tupper\t\n`;
+ expected += `apple [3] [Last done: N/A]\n`;
+ expected += `workout2 [1] [Last done: N/A]\n`;
+
+ assert.strictEqual(stdout,expected);
+ });
+
+ await assert.doesNotReject(async() => {
+ const {stdout,stderr} = await exec('./workouts ls --filter 00');
+
+ let expected = `Attributes:\tlower\tupper\t\n`;
+ expected += `test [0] [Last done: N/A]\n`;
+
+ assert.strictEqual(stdout,expected);
+ });
+ });
+
+});
\ No newline at end of file
--- /dev/null
+const assert = require('assert');
+const util = require('util');
+
+const exec = util.promisify(require('child_process').exec);
+const unlink = util.promisify(require('fs').unlink);
+
+describe('new integration tests', () => {
+
+ beforeEach(async() => {
+ await assert.doesNotReject(async() => await exec('./workouts attr add lower'));
+ await assert.doesNotReject(async() => await exec('./workouts attr add upper'));
+ });
+
+ afterEach(async() => {
+ await unlink('workouts.db');
+ });
+
+ it('should success creating a new workout', async() => {
+ await assert.doesNotReject(async() => {
+ const {stdout,stderr} = await exec('./workouts new workout1');
+
+ assert.strictEqual(stdout,`New workout added: workout1\n`);
+ });
+ });
+
+ it('should fail to create a workout when given the wrong number of attributes', async() => {
+ await assert.rejects(async() => await exec('./workouts new workout1 0'));
+ await assert.rejects(async() => await exec('./workouts new workout1 110'));
+ });
+
+});
\ No newline at end of file
--- /dev/null
+const assert = require('assert');
+const util = require('util');
+
+const exec = util.promisify(require('child_process').exec);
+const unlink = util.promisify(require('fs').unlink);
+
+describe('recent integration tests', () => {
+
+ const recent = [
+ {name:"workout1",date:"2020-07-10"},
+ {name:"apple",date:"2020-07-09"},
+ {name:"test",date:"2020-07-09"},
+ {name:"workout2",date:"2020-07-09"}
+ ];
+
+ beforeEach(async() => {
+ await assert.doesNotReject(async() => await exec('./workouts attr add lower'));
+ await assert.doesNotReject(async() => await exec('./workouts attr add upper'));
+
+ await assert.doesNotReject(async() => await exec('./workouts new workout1 01'));
+ await assert.doesNotReject(async() => await exec('./workouts new workout2 10'));
+ await assert.doesNotReject(async() => await exec('./workouts new test 00'));
+ await assert.doesNotReject(async() => await exec('./workouts new apple 11'));
+
+ for(const i of recent) {
+ await assert.doesNotReject(async() => await exec(`./workouts add ${i.name} ${i.date}`));
+ }
+ });
+
+ afterEach(async() => {
+ await unlink('workouts.db');
+ });
+
+ it('should successfully print recent workouts', async() => {
+ const {stdout,stderr} = await exec('./workouts recent');
+
+ let expected = "";
+ for(const i of recent) {
+ expected += `${i.name}\t${i.date}\n`;
+ }
+
+ assert.strictEqual(stdout,expected);
+ });
+
+});
\ No newline at end of file
--- /dev/null
+const assert = require('assert');
+const util = require('util');
+
+const exec = util.promisify(require('child_process').exec);
+const unlink = util.promisify(require('fs').unlink);
+
+describe('toggle integration tests', () => {
+
+ beforeEach(async() => {
+ await assert.doesNotReject(async() => await exec('./workouts attr add lower'));
+ await assert.doesNotReject(async() => await exec('./workouts attr add upper'));
+
+ await assert.doesNotReject(async() => await exec('./workouts new workout1 01'));
+ await assert.doesNotReject(async() => await exec('./workouts new workout2 10'));
+ await assert.doesNotReject(async() => await exec('./workouts new test 00'));
+ await assert.doesNotReject(async() => await exec('./workouts new apple 11'));
+ });
+
+ afterEach(async() => {
+ await unlink('workouts.db');
+ });
+
+ it('should fail when given an invalid workout', async() => {
+ await assert.rejects(async() => await exec('./workouts toggle not lower'));
+ });
+
+ it('should fail when given an invalid attribute', async() => {
+ await assert.rejects(async() => await exec('./workouts toggle not not_an_attribute'));
+ });
+
+ it('should successfully toggle a workout', async() => {
+ await assert.doesNotReject(async() => {
+ const {stdout,stderr} = await exec('./workouts toggle workout1 lower');
+
+ assert.strictEqual(stdout,`Successfully toggled lower attribute for workout workout1\n`);
+ });
+
+ await assert.doesNotReject(async() => {
+ const {stdout,stderr} = await exec('./workouts workout1');
+
+ let expected = `Attributes:\tlower\tupper\t\n`;
+ expected += `workout1 [3] [Last done: N/A]\n`;
+
+ assert.strictEqual(stdout,expected);
+ });
+
+ await assert.doesNotReject(async() => {
+ const {stdout,stderr} = await exec('./workouts toggle workout1 lower');
+
+ assert.strictEqual(stdout,`Successfully toggled lower attribute for workout workout1\n`);
+ });
+
+ await assert.doesNotReject(async() => {
+ const {stdout,stderr} = await exec('./workouts workout1');
+
+ let expected = `Attributes:\tlower\tupper\t\n`;
+ expected += `workout1 [2] [Last done: N/A]\n`;
+
+ assert.strictEqual(stdout,expected);
+ });
+ });
+
+});
\ No newline at end of file
--- /dev/null
+AM_CPPFLAGS = \
+ -I$(top_builddir)/include/ \
+ -I$(top_builddir)/test/unit/ \
+ -I$(top_srcdir)/include/ \
+ -I$(top_srcdir)/test/unit/
+
+EXTRA_DIST = \
+ test_utils.h \
+ workout.tests.h \
+ recent.tests.h \
+ attr.tests.h
+
+check_PROGRAMS = attr.tests recent.tests workout.tests
+TESTS = $(check_PROGRAMS)
+
+common_SOURCES = test_utils.c
+
+TEST_SRC_DIR = $(top_srcdir)/src
+
+common_SOURCES += $(TEST_SRC_DIR)/default.c $(TEST_SRC_DIR)/opt.c
+common_SOURCES += $(TEST_SRC_DIR)/data/setup.c
+common_SOURCES += $(TEST_SRC_DIR)/opt/homedir.c $(TEST_SRC_DIR)/opt/rows.c $(TEST_SRC_DIR)/opt/verbose.c
+
+attr_tests_SOURCES = attr.tests.c $(TEST_SRC_DIR)/data/attr.c $(common_SOURCES)
+recent_tests_SOURCES = recent.tests.c $(TEST_SRC_DIR)/data/recent.c $(TEST_SRC_DIR)/data/workout.c $(TEST_SRC_DIR)/data/attr.c $(common_SOURCES)
+workout_tests_SOURCES = workout.tests.c $(TEST_SRC_DIR)/data/workout.c $(TEST_SRC_DIR)/data/attr.c $(TEST_SRC_DIR)/data/recent.c $(common_SOURCES)
+
+if ENABLE_MEMCHECK
+memcheck:
+ -valgrind --leak-check=full ./attr.tests
+ -valgrind --leak-check=full ./recent.tests
+ -valgrind --leak-check=full ./workout.tests
+else
+memcheck:
+ @echo "memcheck not enabled"
+endif
\ No newline at end of file
--- /dev/null
+#include<attr.tests.h>
+
+int main() {
+ setup_env();
+
+ attribute_count_test();
+ attribute_get_test();
+ attribute_index_test();
+ attribute_insert_test();
+ attribute_parse_test();
+
+ clean();
+
+ return EXIT_SUCCESS;
+}
+
+void attribute_count_test() {
+ assert(attribute_count()==0);
+
+ assert(attribute_insert("test")==1);
+ assert(attribute_count()==1);
+
+ assert(attribute_insert("test2")==1);
+ assert(attribute_count()==2);
+
+ reset_env();
+}
+
+int i;
+
+void attribute_get_test() {
+ i = 0;
+ assert(attribute_get(&attribute_get_test_helper)==1);
+ assert(i==0);
+
+ assert(attribute_insert("test")==1);
+ assert(attribute_get(&attribute_get_test_helper)==1);
+ assert(i==1);
+
+ reset_env();
+}
+
+void attribute_get_test_helper(const unsigned char *attr) {
+ i++;
+}
+
+void attribute_index_test() {
+ assert(attribute_index("test")<0);
+
+ assert(attribute_insert("test")==1);
+ assert(attribute_index("test")==0);
+ assert(attribute_index("test2")<0);
+
+ assert(attribute_insert("test2")==1);
+ assert(attribute_index("test")==0);
+ assert(attribute_index("test2")==1);
+
+ assert(attribute_insert("hello")==1);
+ assert(attribute_index("test")==0);
+ assert(attribute_index("test2")==1);
+ assert(attribute_index("hello")==2);
+
+ reset_env();
+}
+
+void attribute_insert_test() {
+ assert(attribute_insert("test")==1);
+
+ reset_env();
+}
+
+void attribute_parse_test() {
+ int required = 0;
+ int exclude = 0;
+
+ assert(attribute_parse("311",&required,&exclude)<0);
+
+ required = 0;
+ exclude = 0;
+ assert(attribute_parse("011",&required,&exclude)==1);
+ assert(required==3);
+ assert(exclude==4);
+
+ required = 0;
+ exclude = 0;
+ assert(attribute_parse("x01",&required,&exclude)==1);
+ assert(required==1);
+ assert(exclude==2);
+}
\ No newline at end of file
--- /dev/null
+#ifndef __ATTR_TESTS_H_
+#define __ATTR_TESTS_H_
+
+#include<test_utils.h>
+
+int main();
+void attribute_count_test();
+void attribute_get_test();
+void attribute_get_test_helper(const unsigned char*);
+void attribute_index_test();
+void attribute_insert_test();
+void attribute_parse_test();
+
+#endif
\ No newline at end of file
--- /dev/null
+#include<recent.tests.h>
+
+int main() {
+ setup_env();
+
+ recent_get_test();
+ recent_insert_test();
+
+ clean();
+
+ return EXIT_SUCCESS;
+}
+
+int i;
+
+void recent_get_test() {
+ i = 0;
+ assert(recent_get(-1,&recent_get_test_helper)==1);
+ assert(i==0);
+
+ assert(workout_insert("test",0)==1);
+ assert(workout_insert("test2",0)==1);
+
+ assert(recent_insert("test","2020-07-04")==1);
+ assert(recent_insert("test2","2020-07-04")==1);
+
+ assert(recent_get(-1,&recent_get_test_helper)==1);
+ assert(i==2);
+
+ i = 0;
+ assert(recent_get(1,&recent_get_test_helper)==1);
+ assert(i==1);
+
+ reset_env();
+}
+
+void recent_get_test_helper(const unsigned char *name, const unsigned char *date) {
+ i++;
+}
+
+void recent_insert_test() {
+ assert(workout_insert("test",0)==1);
+ assert(workout_insert("test2",0)==1);
+
+ assert(recent_insert("test","2020-07-04")==1);
+ assert(recent_insert("test2","2020-07-04")==1);
+ assert(recent_insert("test2","2020-07-04")==-1);
+
+ reset_env();
+}
\ No newline at end of file
--- /dev/null
+#ifndef __RECENT_TESTS_H_
+#define __RECENT_TESTS_H_
+
+#include<test_utils.h>
+
+int main();
+void recent_get_test();
+void recent_get_test_helper(const unsigned char*,const unsigned char*);
+void recent_insert_test();
+
+
+#endif
\ No newline at end of file
--- /dev/null
+#include<test_utils.h>
+
+void clean() {
+ free(global_opts.db_location);
+ free(global_opts.homedir);
+}
+
+void reset_env() {
+ assert(remove(global_opts.db_location)==0);
+ assert(setup()==1);
+}
+
+void setup_env() {
+ assert(defaults()==0);
+ assert(setup()==1);
+}
\ No newline at end of file
--- /dev/null
+#ifndef __TEST_UTILS_H_
+#define __TEST_UTILS_H_
+
+#include<assert.h>
+#include<stdio.h>
+#include<stdlib.h>
+
+#include<data.h>
+#include<default.h>
+
+void clean();
+void setup_env();
+void reset_env();
+
+#endif
\ No newline at end of file
--- /dev/null
+#include<workout.tests.h>
+
+int main() {
+ setup_env();
+
+ workout_get_test();
+ workout_insert_test();
+ workout_toggle_test();
+ workout_update_test();
+
+ clean();
+
+ return EXIT_SUCCESS;
+}
+
+int i;
+
+void workout_get_test() {
+ i = 0;
+
+ assert(workout_get(NULL,NULL,-1,&workout_get_test_helper)==1);
+ assert(i==0);
+
+ assert(workout_insert("test",0)==1);
+ assert(workout_insert("test2",3)==1);
+ assert(workout_insert("hello3",4)==1);
+ assert(workout_insert("apple",5)==1);
+
+ assert(workout_get(NULL,NULL,-1,&workout_get_test_helper)==1);
+ assert(i==4);
+
+ i = 0;
+ assert(workout_get("test",NULL,-1,&workout_get_test_helper)==1);
+ assert(i==2);
+
+ i = 0;
+ assert(workout_get("test",NULL,1,&workout_get_test_helper)==1);
+ assert(i==1);
+
+ i = 0;
+ assert(workout_get("apple",NULL,-1,&workout_get_test_helper)==1);
+ assert(i==1);
+
+ i = 0;
+ assert(workout_get("test","x1",-1,&workout_get_test_helper)==1);
+ assert(i==1);
+
+ i = 0;
+ assert(workout_get(NULL,"10x",-1,&workout_get_test_helper)==1);
+ assert(i==2);
+
+ reset_env();
+}
+
+void workout_get_test_helper(const unsigned char *name, int flags, const unsigned char *date) {
+ i++;
+}
+
+void workout_insert_test() {
+ assert(workout_insert("test",0)==1);
+ assert(workout_insert("test",1)<0);
+
+ reset_env();
+}
+
+void workout_toggle_test() {
+ assert(attribute_insert("lower")==1);
+ assert(attribute_insert("upper")==1);
+
+ assert(workout_insert("test",0)==1);
+ assert(workout_insert("test2",3)==1);
+
+ assert(workout_toggle("test3","lower")==-1);
+ assert(workout_toggle("test","lower")==1);
+
+ reset_env();
+}
+
+void workout_update_test() {
+ assert(attribute_insert("lower")==1);
+ assert(attribute_insert("upper")==1);
+
+ assert(workout_insert("test",0)==1);
+ assert(workout_insert("test2",3)==1);
+
+ assert(recent_insert("test","2020-07-04")==1);
+
+ assert(workout_update("test","test3",0)<0);
+ assert(workout_update("test","test",1)==1);
+
+ assert(workout_update("test2","test5",8)==1);
+
+ reset_env();
+}
\ No newline at end of file
--- /dev/null
+#ifndef __WORKOUT_TESTS_H_
+#define __WORKOUT_TESTS_H_
+
+#include<test_utils.h>
+
+int main();
+void workout_get_test();
+void workout_get_test_helper();
+void workout_insert_test();
+void workout_toggle_test();
+void workout_update_test();
+
+#endif
\ No newline at end of file
+++ /dev/null
-import assert from 'assert';
-
-import view from '../src/reducers/view.js';
-
-import {constants} from '../src/constants.js';
-const {CHANGE_VIEW,SORT_VIEW} = constants;
-
-describe('view reducers',() => {
-
- describe(CHANGE_VIEW,() => {
-
- it('should not change the state when an invalid action is given',() => {
- assert.fail('Not implemented');
- });
-
- it('should successfully change the state to the `manage` view',() => {
- assert.fail('Not implemented');
- });
-
- it('should successfully change the state to the `recent` view',() => {
- assert.fail('Not implemented');
- });
-
- });
-
- describe(SORT_VIEW,() => {
-
- it('should not change the state when an invalid action is given',() => {
- assert.fail('Not implemented');
- });
-
- it('should successfully sort the view',() => {
- assert.fail('Not implemented');
- });
-
- });
-
-});
\ No newline at end of file
+++ /dev/null
-import assert from 'assert';
-
-import workout from '../src/classes/workout.js';
-
-describe('workout object tests', () => {
-
- it('should successfully create', () => {
- assert.fail('Not implemented');
- });
-
- it('should successfully add dates', () => {
- assert.fail('Not implemented');
- });
-
- it('should successfully change description',() => {
- assert.fail('Not implemented');
- });
-
- it('should successfully export', () => {
- assert.fail('Not implemented');
- });
-
- it('should successfully output the last time the workout was completed',() => {
- assert.fail('Not implemented');
- });
-
- it('should successfully remove dates', () => {
- assert.fail('Not implemented');
- });
-
- it('should successfully change the name', () => {
- assert.fail('Not implemented');
- });
-
- it('should successfully change an attribute', () => {
- assert.fail('Not implemented');
- });
-
-});
\ No newline at end of file
+++ /dev/null
-import assert from 'assert';
-
-import workouts from '../src/reducers/workouts.js';
-
-import {constants} from '../src/constants.js';
-const {ADD_WORKOUT,CHANGE_ATTRIBUTE,CHANGE_WORKOUT_NAME,DELETE_WORKOUT,NEW_WORKOUT,REMOVE_WORKOUT} = constants;
-
-describe('workouts reducer',() => {
-
- describe(ADD_WORKOUT,() => {
-
- it('should not change the state when invalid action is given',() => {
- assert.fail('Not implemented');
- });
-
- it('should successfully add a workout to an already existing workout',() => {
- assert.fail('Not implemented');
- });
-
- });
-
- describe(CHANGE_ATTRIBUTE,() => {
-
- it('should not change the state when an invalid action is given',() => {
- assert.fail('Not implemented');
- });
-
- it('should not change the state when trying to change an attribute for a nonexistent workout',() => {
- assert.fail('Not implemented');
- });
-
- it('should successfully change the attribute of an already existing workout',() => {
- assert.fail('Not implemented');
- });
-
- });
-
- describe(CHANGE_WORKOUT_NAME,() => {
-
- it('should not change the state when an invalid action is given',() => {
- assert.fail('Not implemented');
- });
-
- it('should not change the state when trying to change the name for a nonexistent workout',() => {
- assert.fail('Not implemented');
- });
-
- it('should successfully change the name of an already existing workout',() => {
- assert.fail('Not implemented');
- });
-
- });
-
- describe(CHANGE_WORKOUT_DESCRIPTION,() => {
-
- it('should not change the state when an invalid action is given',() => {
- assert.fail('Not implemented');
- });
-
- it('should not change the state when trying to change the description for a nonexistent workout',() => {
- assert.fail('Not implemented');
- });
-
- it('should successfully change the description of an already existing workout',() => {
- assert.fail('Not implemented');
- });
-
- });
-
- describe(DELETE_WORKOUT,() => {
-
- it('should not change the state when an invalid action is given',() => {
- assert.fail('Not implemented');
- });
-
- it('should not change the state when action.name refers to a nonexistent workout',() => {
- assert.fail('Not implemented');
- });
-
- it('should successfully delete a workout from an existent workout',() => {
- assert.fail('Not implemented');
- });
-
- });
-
- describe(NEW_WORKOUT,() => {
-
- it('should not change the state when an invalid action is given',() => {
- assert.fail('Not implemented');
- });
-
- it('should not change the state when "New Workout" workout already exists',() => {
- assert.fail('Not implemented');
- });
-
- it('should successfully add a new workout',() => {
- assert.fail('Not implemented');
- });
- });
-
- describe(REMOVE_WORKOUT,() => {
-
- it('should not change the state when an invalid action is given',() => {
- assert.fail('Not implemented');
- });
-
- it('should fail when action.toRemove refers to a nonexistent workout',() => {
- assert.fail('Not implemented');
- });
-
- it('should successfully remove a workout',() => {
- assert.fail('Not implemented');
- });
-
- });
-
-});
\ No newline at end of file
+++ /dev/null
-const path = require('path');
-const merge = require('webpack-merge');
-const baseConfig = require('./webpack.config.js');
-
-module.exports = merge(baseConfig,{
- mode:'production',
- output: {
- filename: 'workouts.min.js',
- path: path.resolve(__dirname,'./')
- }
-});
\ No newline at end of file
+++ /dev/null
-{"P90X - Ab Ripper":{"attributes":{"lower":false,"core":true,"back":false,"upper":false,"cardio":false,"martial":false,"other":false},"datesDone":["2020-03-20","2019-11-29","2019-10-12","2019-09-08","2019-08-09","2019-06-18","2019-04-19","2019-03-15","2019-03-07","2019-02-14","2019-01-31","2018-11-14","2018-10-04","2018-07-23","2018-05-17","2018-03-07","2017-12-18","2017-09-25","2017-08-29","2017-06-27","2017-03-21","2017-02-14","2017-01-27","2016-11-11","2016-09-04","2016-04-29","2016-03-11","2016-02-05","2016-01-20","2015-12-04","2015-09-18","2015-08-14","2015-06-25","2015-05-04","2015-04-01","2015-03-19","2015-02-19","2015-01-22","2014-12-26","2014-11-25","2014-10-30","2014-06-28","2014-06-16","2014-05-25"],"name":"P90X - Ab Ripper","description":""},"P90X - Back + Biceps":{"attributes":{"lower":false,"core":false,"back":true,"upper":true,"cardio":false,"martial":false,"other":false},"datesDone":[],"name":"P90X - Back + Biceps","description":""},"P90X - Cardio X":{"attributes":{"lower":false,"core":false,"back":false,"upper":false,"cardio":true,"martial":true,"other":false},"datesDone":["2020-03-10","2020-01-06","2019-10-25","2019-10-05","2019-09-07","2019-08-10","2019-06-29","2019-05-08","2019-04-28","2019-04-16","2019-03-21","2018-12-26","2018-12-14","2018-11-07","2018-10-10","2018-07-10","2018-06-05","2018-05-09","2018-04-24","2018-04-03","2018-01-27","2018-01-01","2017-11-14","2017-10-18","2017-09-17","2017-08-21","2017-07-03","2017-05-31","2017-04-27","2017-03-31","2017-03-13","2017-02-13","2017-01-30","2016-12-19","2016-11-28","2016-11-04","2016-10-21","2016-09-27","2016-09-09","2016-08-22","2016-07-29","2016-06-27","2016-06-04","2016-05-04","2016-04-16","2016-04-08","2016-03-21","2016-03-02","2016-02-22","2016-02-08","2016-02-03","2016-01-12","2015-12-28","2015-12-09","2015-11-05","2015-10-12","2015-08-26","2015-08-10","2015-07-20","2015-06-29","2015-06-11","2015-06-08","2015-05-28","2015-04-02","2015-03-09","2015-02-17","2015-01-26","2015-01-09","2014-12-26","2014-12-17","2014-12-16","2014-12-09","2014-11-21","2014-10-27","2014-10-13","2014-10-05","2014-09-13","2014-07-07","2014-06-23","2014-05-28","2014-05-14"],"name":"P90X - Cardio X","description":""},"P90X - Chest + Back":{"attributes":{"lower":false,"core":false,"back":true,"upper":true,"cardio":false,"martial":false,"other":false},"datesDone":[],"name":"P90X - Chest + Back","description":""},"P90X - Chest + Shoulders + Triceps":{"attributes":{"lower":false,"core":false,"back":false,"upper":false,"cardio":false,"martial":false,"other":false},"datesDone":["2017-06-17","2017-02-17","2016-09-01"],"name":"P90X - Chest + Shoulders + Triceps","description":""},"P90X - Core Synergistics":{"attributes":{"lower":false,"core":true,"back":false,"upper":true,"cardio":false,"martial":false,"other":false},"datesDone":["2020-04-02","2019-11-19","2019-07-21","2019-03-29","2018-10-15","2018-06-21","2018-04-26","2017-10-02","2017-05-12","2017-02-07","2016-10-25","2016-07-25","2016-04-27","2016-03-23","2016-02-18","2016-01-21","2015-12-15","2015-10-31","2015-08-25","2015-08-05","2015-06-30","2015-04-30","2015-03-23","2015-02-11","2015-01-23","2014-12-30","2014-11-19","2014-10-01","2014-07-31","2014-06-26"],"name":"P90X - Core Synergistics","description":""},"P90X+ - Interval X+":{"attributes":{"lower":false,"core":false,"back":false,"upper":false,"cardio":true,"martial":false,"other":false},"datesDone":["2020-04-03","2019-10-03","2019-08-07","2019-04-18","2018-12-17","2018-10-17","2018-07-18","2018-06-09","2018-05-01","2018-02-14","2017-11-21","2017-10-12","2017-08-08","2017-06-06","2017-05-02","2017-03-20","2017-01-20","2016-11-30","2016-10-24","2016-09-22","2016-08-02","2016-06-09","2016-04-28","2016-03-24","2016-02-29","2016-01-18","2015-12-16","2015-10-28","2015-09-21","2015-08-07","2015-07-08","2015-06-03","2015-04-17","2015-03-16","2015-02-12","2015-01-16","2014-12-22","2014-11-13","2014-10-17","2014-10-02","2014-09-03","2014-07-28","2014-07-09","2014-06-25","2014-06-03","2014-05-12"],"name":"P90X+ - Interval X+","description":""},"P90X+ - Kenpo Cardio X+":{"attributes":{"lower":false,"core":false,"back":false,"upper":false,"cardio":true,"martial":true,"other":false},"datesDone":["2020-03-24","2019-12-01","2019-10-15","2019-08-27","2019-07-15","2019-06-08","2019-03-28","2019-02-15","2019-01-02","2018-11-29","2018-10-22","2018-08-07","2018-06-22","2018-05-18","2018-04-19","2018-01-16","2017-12-26","2017-12-05","2017-10-24","2017-09-20","2017-08-27","2017-07-21","2017-06-28","2017-05-18","2017-04-14","2017-02-22","2017-01-01","2016-12-08","2016-11-10","2016-10-13","2016-09-15","2016-08-30","2016-08-04","2016-07-03","2016-05-18","2016-04-25","2016-03-27","2016-03-09","2016-02-24","2016-01-27","2016-01-13","2015-12-21","2015-11-23","2015-10-23","2015-10-13","2015-09-11","2015-08-31","2015-08-12","2015-07-31","2015-07-06","2015-06-17","2015-06-01","2015-04-21","2015-03-24","2015-03-13","2015-02-10","2015-01-14","2014-11-18","2014-10-21","2014-09-18","2014-07-22","2014-06-10"],"name":"P90X+ - Kenpo Cardio X+","description":""},"P90X - Kenpo X":{"attributes":{"lower":false,"core":false,"back":false,"upper":false,"cardio":true,"martial":true,"other":false},"datesDone":["2020-04-07","2020-01-10","2019-11-13","2019-10-11","2019-09-17","2019-07-20","2019-06-19","2019-06-13","2019-03-12","2019-01-24","2018-11-17","2018-07-25","2018-06-15","2018-05-12","2018-01-04","2017-11-18","2017-09-30","2017-09-14","2017-08-02","2017-07-12","2017-06-11","2017-05-05","2017-04-06","2017-02-16","2017-01-26","2016-12-02","2016-11-01","2016-10-07","2016-09-13","2016-08-15","2016-07-14","2016-05-20","2016-05-02","2016-04-13","2016-03-17","2016-02-17","2016-01-22","2015-12-30","2015-12-08","2015-11-04","2015-10-16","2015-08-19","2015-07-27","2015-06-24","2015-05-29","2015-05-08","2015-04-06","2015-02-26","2015-01-21","2015-01-05","2014-12-02","2014-11-10","2014-10-07","2014-09-26","2014-08-28","2014-08-01","2014-07-18","2014-06-30","2014-06-17","2014-06-05","2014-05-22","2014-05-09"],"name":"P90X - Kenpo X","description":""},"P90X - Legs + Back":{"attributes":{"lower":true,"core":false,"back":true,"upper":true,"cardio":false,"martial":false,"other":false},"datesDone":["2017-05-16","2017-03-21","2016-12-15","2016-09-11","2016-05-12"],"name":"P90X - Legs + Back","description":""},"P90X - Plyometrics":{"attributes":{"lower":true,"core":false,"back":false,"upper":false,"cardio":true,"martial":false,"other":false},"datesDone":["2019-08-14","2019-03-25","2018-09-10","2018-05-24","2017-12-01","2017-10-09","2017-07-10","2017-06-03","2017-04-18","2017-02-24","2017-01-03","2016-09-26","2016-09-02","2016-05-16","2016-04-18","2016-03-15","2016-02-10","2015-12-29","2015-11-02","2015-10-14","2015-09-15","2015-07-14","2015-06-22","2015-05-06","2015-03-26","2015-02-18","2015-01-29","2015-01-07","2014-11-20","2014-10-28","2014-10-15","2014-09-19","2014-08-05","2014-06-16"],"name":"P90X - Plyometrics","description":""},"P90X - Shoulders + Arms":{"attributes":{"lower":false,"core":false,"back":false,"upper":true,"cardio":false,"martial":false,"other":false},"datesDone":["2019-03-13","2017-05-15"],"name":"P90X - Shoulders + Arms","description":""},"P90X - X Stretch":{"attributes":{"lower":false,"core":false,"back":false,"upper":false,"cardio":false,"martial":false,"other":true},"datesDone":["2020-04-08","2020-04-04","2020-03-30","2020-03-25","2020-03-20","2020-02-08","2020-01-16","2020-01-06","2019-12-16","2019-12-15","2019-12-09","2019-12-07","2019-12-03","2019-11-27","2019-11-21","2019-11-19","2019-11-14","2019-11-09","2019-11-05","2019-10-10","2019-10-08","2019-10-04","2019-09-30","2019-09-26","2019-09-24","2019-09-16","2019-09-10","2019-09-05","2019-08-31","2019-08-29","2019-08-26","2019-08-19","2019-08-13","2019-08-07","2019-07-29","2019-07-26","2019-07-23","2019-07-17","2019-07-15","2019-07-11","2019-07-08","2019-06-26","2019-06-24","2019-06-20","2019-06-11","2019-06-09","2019-06-06","2019-06-04","2019-05-08","2019-05-06","2019-05-04","2019-04-29","2019-04-17","2019-04-16","2019-04-07","2019-04-03","2019-03-31","2019-03-29","2019-03-26","2019-03-24","2019-03-18","2019-03-12","2019-03-06","2019-02-14","2019-01-01","2018-12-07","2018-12-03","2018-11-29","2018-11-14","2018-11-06","2018-10-22","2018-10-15","2018-10-06","2018-10-03","2018-10-01","2018-09-27","2018-09-18","2018-09-13","2018-09-08","2018-09-04","2018-08-16","2018-08-09","2018-07-25","2018-07-17","2018-07-07","2018-06-27","2018-06-19","2018-06-13","2018-06-10","2018-06-04","2018-05-23","2018-05-15","2018-04-25","2018-04-18","2018-04-06","2018-03-20","2018-02-19","2018-02-17","2018-02-12","2018-02-07","2018-02-02","2018-01-31","2018-01-29","2018-01-23","2018-01-18","2018-01-12","2018-01-08","2018-01-03","2017-12-30","2017-12-27","2017-12-19","2017-12-12","2017-11-30","2017-11-27","2017-11-18","2017-11-14","2017-11-12","2017-10-30","2017-10-08","2017-10-03","2017-09-29","2017-09-27","2017-09-22","2017-09-20","2017-09-18","2017-09-14","2017-09-11","2017-09-07","2017-08-28","2017-08-25","2017-08-22","2017-08-15","2017-08-06","2017-07-22","2017-07-20","2017-07-19","2017-07-15","2017-07-12","2017-07-09","2017-07-06","2017-06-30","2017-06-22","2017-06-19","2017-06-15","2017-06-11","2017-06-07","2017-05-28","2017-05-26","2017-05-23","2017-05-16","2017-05-11","2017-05-09","2017-05-01","2017-04-27","2017-04-24","2017-04-21","2017-04-19","2017-04-17","2017-04-11","2017-04-07","2017-04-04","2017-03-29","2017-03-27","2017-03-22","2017-03-17","2017-02-27","2017-02-21","2017-02-09","2017-01-23","2017-01-17","2017-01-12","2017-01-04","2016-12-31","2016-12-13","2016-12-08","2016-12-05","2016-11-30","2016-11-23","2016-11-15","2016-11-10","2016-11-07","2016-11-02","2016-10-25","2016-10-19","2016-10-14","2016-10-12","2016-10-07","2016-10-05","2016-10-03","2016-09-29","2016-09-27","2016-09-22","2016-09-20","2016-09-15","2016-09-13","2016-09-07","2016-09-02","2016-08-30","2016-08-26","2016-08-23","2016-08-16","2016-08-05","2016-08-03","2016-08-01","2016-07-29","2016-07-27","2016-07-25","2016-07-19","2016-07-14","2016-07-11","2016-07-01","2016-06-29","2016-06-24","2016-06-22","2016-06-20","2016-06-17","2016-06-14","2016-06-10","2016-06-08","2016-06-06","2016-06-03","2016-06-01","2016-05-24","2016-05-23","2016-05-21","2016-05-18","2016-05-17","2016-05-16","2016-05-13","2016-05-12","2016-05-10","2016-05-09","2016-05-05","2016-05-04","2016-04-28","2016-04-26","2016-04-21","2016-04-14","2016-04-12","2016-04-11","2016-04-06","2016-03-31","2016-03-29","2016-03-23","2016-03-22","2016-03-21","2016-03-17","2016-03-16","2016-03-15","2016-03-14","2016-03-10","2016-03-03","2016-03-01","2016-02-28","2016-02-25","2016-02-23","2016-02-18","2016-02-11","2016-02-10","2016-02-02","2016-01-28","2016-01-26","2016-01-21","2016-01-20","2016-01-19","2016-01-14","2016-01-13","2016-01-12","2016-01-08","2016-01-05","2015-12-29","2015-12-23","2015-12-22","2015-12-17","2015-12-16","2015-12-15","2015-12-10","2015-12-08","2015-12-03","2015-12-02","2015-11-28","2015-11-23","2015-11-05","2015-11-04","2015-11-02","2015-10-21","2015-10-20","2015-10-19","2015-10-15","2015-10-14","2015-10-13","2015-10-06","2015-10-05","2015-10-02","2015-09-16","2015-09-10","2015-08-30","2015-08-27","2015-08-25","2015-08-20","2015-08-18","2015-08-14","2015-08-11","2015-08-09","2015-08-04","2015-07-30","2015-07-28","2015-07-25","2015-07-14","2015-07-12","2015-07-09","2015-07-07","2015-07-02","2015-06-30","2015-06-27","2015-06-23","2015-06-20","2015-06-18","2015-06-16","2015-06-12","2015-06-10","2015-06-04","2015-06-02","2015-05-31","2015-05-29","2015-05-20","2015-05-18","2015-05-15","2015-05-13","2015-05-11","2015-05-08","2015-05-06","2015-05-05","2015-05-01","2015-04-30","2015-04-29","2015-04-27","2015-04-24","2015-04-23","2015-04-22","2015-04-21","2015-04-20","2015-04-17","2015-04-16","2015-04-15","2015-04-14","2015-04-13","2015-04-10","2015-04-09","2015-04-08","2015-04-07","2015-04-06","2015-04-05","2015-04-03","2015-04-02","2015-04-01","2015-03-31","2015-03-28","2015-03-26","2015-03-25","2015-03-17","2015-03-16","2015-03-15","2015-03-12","2015-03-11","2015-03-05","2015-03-01","2015-02-18","2015-02-16","2015-02-12","2015-02-11","2015-02-05","2015-02-04","2015-01-29","2015-01-28","2015-01-26","2015-01-21","2015-01-20","2015-01-15","2015-01-13","2015-01-10","2015-01-08","2015-01-06","2014-12-31","2014-12-24","2014-12-22","2014-12-17","2014-12-15","2014-12-09","2014-12-04","2014-12-03","2014-12-01","2014-11-25","2014-11-21","2014-11-20","2014-11-19","2014-11-17","2014-11-15","2014-11-14","2014-11-12","2014-11-10","2014-11-06","2014-11-04","2014-11-01","2014-10-29","2014-10-27","2014-10-22","2014-10-21","2014-10-16","2014-10-14","2014-10-09","2014-10-07","2014-10-02","2014-09-29","2014-09-28","2014-09-24","2014-09-17","2014-09-16","2014-09-11","2014-09-06","2014-09-02","2014-08-28","2014-08-26","2014-08-19","2014-08-12","2014-08-08","2014-08-05","2014-07-31","2014-07-29","2014-07-25","2014-07-22","2014-07-17","2014-07-10","2014-07-08","2014-07-04","2014-07-01","2014-06-26","2014-06-24","2014-06-19","2014-06-17","2014-06-10","2014-06-05","2014-06-02","2014-05-29","2014-05-26","2014-05-22","2014-05-13","2014-05-08","2014-05-06"],"name":"P90X - X Stretch","description":""},"P90X - Yoga X":{"attributes":{"lower":false,"core":false,"back":false,"upper":false,"cardio":false,"martial":false,"other":true},"datesDone":["2020-01-20","2019-11-23","2019-10-07","2019-09-24","2019-07-27","2019-04-22","2019-02-21","2018-10-18","2018-04-17","2018-03-16","2017-11-11","2017-09-09","2017-08-05","2017-05-30","2017-05-06","2017-03-28","2017-02-06","2016-12-27","2016-11-21","2016-11-09","2016-10-18","2016-08-18"],"name":"P90X - Yoga X","description":""},"P90X2 - Base and Back":{"attributes":{"lower":true,"core":false,"back":true,"upper":true,"cardio":false,"martial":false,"other":false},"datesDone":["2019-11-22","2019-08-06","2019-02-01","2018-11-06","2018-01-30","2017-10-26","2017-07-24","2017-04-29","2017-02-09","2016-11-07","2016-07-26","2016-04-26","2016-03-22","2016-02-04","2015-11-03","2015-08-24","2015-07-09","2015-05-14","2015-03-31","2015-02-03","2015-01-01","2014-11-12","2014-10-16","2014-09-07","2014-08-11","2014-07-03","2014-06-12"],"name":"P90X2 - Base and Back","description":""},"P90X2 - Chest Back Balance":{"attributes":{"lower":false,"core":true,"back":true,"upper":false,"cardio":false,"martial":false,"other":false},"datesDone":[],"name":"P90X2 - Chest Back Balance","description":""},"P90X2 - P.A.P. Lower":{"attributes":{"lower":true,"core":false,"back":false,"upper":false,"cardio":true,"martial":false,"other":false},"datesDone":["2020-01-13","2019-07-17","2019-02-20","2018-07-12","2017-08-15","2017-05-28","2017-04-11","2017-01-17","2016-10-11","2016-06-13","2016-04-11","2016-03-01","2016-01-26","2015-12-02","2015-10-20","2015-09-17","2015-07-21","2015-06-16","2015-04-28","2015-03-12","2015-02-05","2015-01-08","2014-12-04","2014-11-03","2014-10-03","2014-08-29","2014-06-24"],"name":"P90X2 - P.A.P. Lower","description":""},"P90X2 - P.A.P. Upper":{"attributes":{"lower":false,"core":false,"back":true,"upper":true,"cardio":false,"martial":false,"other":false},"datesDone":["2019-09-25","2019-04-23","2018-02-05","2017-09-11","2017-04-17","2017-01-12","2016-12-05","2016-10-12","2016-09-20","2016-05-09","2016-04-12","2016-03-03","2016-01-28","2015-12-10","2015-10-21","2015-08-13","2015-06-23","2015-04-15","2015-03-17","2015-01-28","2014-12-15","2014-10-29","2014-10-09","2014-07-24","2014-06-18","2014-05-07"],"name":"P90X2 - P.A.P. Upper","description":""},"P90X2 - Plyocide":{"attributes":{"lower":true,"core":false,"back":true,"upper":false,"cardio":true,"martial":false,"other":false},"datesDone":["2020-03-28","2019-12-10","2019-11-18","2019-08-26","2019-04-29","2019-03-08","2018-12-03","2018-09-20","2018-06-25","2018-05-13","2018-02-17","2017-11-28","2017-10-03","2017-09-08","2017-06-09","2017-05-11","2017-04-24","2017-03-23","2017-02-01","2016-12-20","2016-10-26","2016-09-30","2016-07-24","2016-05-06","2016-04-21","2016-03-29","2016-03-10","2016-02-15","2016-01-06","2015-12-17","2015-11-25","2015-10-15","2015-09-10","2015-08-27","2015-08-11","2015-07-29","2015-06-26","2015-06-04","2015-05-20","2015-04-14","2015-03-10","2015-02-25","2015-02-09","2015-01-12","2014-12-19","2014-11-24","2014-11-14","2014-10-22","2014-10-08","2014-09-30","2014-09-16","2014-08-26","2014-08-07","2014-07-30","2014-07-15","2014-06-20","2014-05-21","2014-05-08"],"name":"P90X2 - Plyocide","description":""},"P90X2 - X2 Ab Ripper":{"attributes":{"lower":false,"core":true,"back":false,"upper":false,"cardio":false,"martial":false,"other":false},"datesDone":["2020-01-15","2019-10-23","2019-08-19","2019-07-12","2019-06-30","2019-05-05","2019-04-10","2018-10-13","2018-08-09","2018-07-07","2018-03-15","2017-11-07","2017-09-12","2017-07-18","2017-04-20","2016-12-06","2016-05-15","2016-04-22","2016-03-04","2016-01-29","2015-12-18","2015-11-05","2015-08-28","2015-07-10","2015-05-14","2015-05-09","2015-04-12","2015-03-29","2015-02-08","2015-01-05","2014-11-15","2014-10-20","2014-09-25","2014-09-14","2014-09-07","2014-08-11","2014-07-28","2014-06-23","2014-06-08","2014-05-20"],"name":"P90X2 - X2 Ab Ripper","description":""},"P90X2 - X2 Balance and Power":{"attributes":{"lower":true,"core":true,"back":true,"upper":true,"cardio":false,"martial":false,"other":false},"datesDone":["2020-03-19","2019-09-16","2019-04-05","2018-11-18","2018-07-17","2018-05-31","2017-11-29","2017-09-21","2017-05-25","2017-02-21","2016-12-01","2016-08-31","2016-05-03","2016-03-25","2016-02-25","2016-01-19","2015-12-07","2015-10-27","2015-08-18","2015-07-07","2015-06-09","2015-04-08","2015-02-16","2015-01-19","2014-11-17","2014-10-06","2014-09-02","2014-07-17","2014-06-09"],"name":"P90X2 - X2 Balance and Power","description":""},"P90X2 - X2 Core":{"attributes":{"lower":false,"core":true,"back":false,"upper":true,"cardio":false,"martial":false,"other":false},"datesDone":["2020-04-09","2020-01-09","2019-11-14","2019-06-25","2019-03-23","2018-11-30","2018-09-19","2018-06-11","2018-02-19","2017-10-05","2017-06-08","2017-04-23","2017-01-31","2016-11-03","2016-07-31","2016-05-05","2016-03-30","2016-03-14","2016-02-02","2016-01-14","2015-12-22","2015-11-24","2015-10-19","2015-09-09","2015-08-20","2015-07-30","2015-07-02","2015-06-02","2015-05-12","2015-03-27","2015-03-02","2015-02-02","2015-01-13","2014-12-18","2014-11-29","2014-11-11","2014-11-05","2014-10-23","2014-10-15","2014-09-28","2014-09-15","2014-08-27","2014-08-17","2014-08-06","2014-07-21","2014-07-02","2014-06-13","2014-06-06","2014-05-23","2014-05-06"],"name":"P90X2 - X2 Core","description":""},"P90X2 - X2 Recovery + Mobility/Foam Rolling Sessio":{"attributes":{"lower":false,"core":false,"back":false,"upper":false,"cardio":false,"martial":false,"other":true},"datesDone":["2020-04-02","2020-01-08","2019-12-11","2019-11-13","2019-08-28","2019-08-16","2019-06-12","2019-03-28","2019-03-05","2019-02-21","2018-11-01","2018-09-10","2018-07-28","2018-07-26","2018-02-20","2018-02-14","2018-02-04","2018-01-11","2018-01-07","2018-01-02","2017-12-18","2017-10-13","2017-10-07","2017-10-04","2017-09-13","2017-08-09","2017-08-01","2017-07-17","2017-07-14","2017-07-10","2017-07-05","2017-06-27","2017-06-16","2017-06-06","2017-06-01","2017-05-23","2017-05-17","2017-05-07","2017-04-28","2017-04-22","2017-04-16","2017-04-03","2017-03-18","2017-02-18","2017-02-04","2017-01-28","2016-12-12","2016-11-01","2016-10-17","2016-10-11","2016-09-23","2016-08-21","2016-06-16","2016-06-05"],"name":"P90X2 - X2 Recovery + Mobility/Foam Rolling Sessio","description":""},"P90X2 - X2 Shoulders and Arms":{"attributes":{"lower":false,"core":false,"back":false,"upper":true,"cardio":false,"martial":false,"other":false},"datesDone":["2018-03-20"],"name":"P90X2 - X2 Shoulders and Arms","description":""},"P90X2 - X2 Total Body":{"attributes":{"lower":false,"core":true,"back":true,"upper":true,"cardio":false,"martial":false,"other":false},"datesDone":["2019-12-02","2019-08-13","2019-03-20","2018-05-15","2017-11-15","2017-09-06","2017-07-13","2017-05-09","2017-01-19","2016-10-03","2016-07-05","2016-04-20","2016-03-16","2016-02-11","2016-01-04","2015-12-03","2015-09-16","2015-07-28","2015-06-18","2015-04-23","2015-03-11","2015-01-06","2014-12-01","2014-10-20","2014-09-17","2014-08-04","2014-07-08","2014-05-27"],"name":"P90X2 - X2 Total Body","description":""},"P90X2 - X2 Yoga":{"attributes":{"lower":false,"core":false,"back":false,"upper":false,"cardio":false,"martial":false,"other":true},"datesDone":["2020-03-17","2020-01-14","2019-11-11","2019-10-01","2019-09-14","2019-08-11","2019-07-09","2019-06-16","2019-04-12","2019-04-02","2019-03-05","2019-01-18","2019-01-06","2018-11-20","2018-11-03","2018-09-12","2018-08-18","2018-06-01","2018-03-27","2018-01-15","2017-12-08","2017-11-08","2017-10-17","2017-09-23","2017-08-29","2017-07-18","2017-07-01","2017-05-21","2017-04-15","2017-04-08","2017-03-14","2017-01-18","2017-01-09","2016-12-14","2016-11-16","2016-10-31","2016-09-28","2016-09-08","2016-08-16","2016-08-07","2016-07-12","2016-06-20","2016-05-11","2016-04-19","2016-04-07","2016-03-28","2016-03-08","2016-02-23","2016-02-16","2016-02-01","2016-01-11","2016-01-05","2015-12-14","2015-11-30","2015-10-22","2015-09-08","2015-08-17","2015-08-06","2015-07-05","2015-05-30","2015-05-17","2015-04-19","2015-03-18","2015-03-03","2015-02-24","2015-02-06","2015-01-15","2014-12-29","2014-12-11","2014-12-10","2014-12-03","2014-11-22","2014-11-16","2014-11-11","2014-11-02","2014-10-24","2014-09-25","2014-08-24","2014-07-29","2014-06-29","2014-06-12","2014-05-30","2014-05-20"],"name":"P90X2 - X2 Yoga","description":""},"Long Run + Roll":{"attributes":{"lower":true,"core":false,"back":true,"upper":false,"cardio":true,"martial":true,"other":false},"datesDone":["2020-03-15","2019-12-14","2019-11-28","2019-11-06","2019-10-23","2019-10-16","2019-09-29","2019-09-21","2019-09-02","2019-08-21","2019-07-28","2019-07-19","2019-07-13","2019-06-03","2019-04-24","2019-03-30","2019-02-23","2019-01-22","2019-01-17","2018-12-19","2018-12-12","2018-12-01","2018-11-22","2018-10-21","2018-10-14","2018-10-08","2018-09-27","2018-09-23","2018-09-11","2018-09-04","2018-08-01","2018-07-16","2018-07-08","2018-06-18","2018-02-20","2018-02-03","2018-01-13","2017-12-15","2017-11-24","2017-11-12","2017-11-06","2017-10-06","2017-09-12","2017-08-26","2017-08-18","2017-08-01","2017-07-22","2017-07-04","2017-06-26","2017-06-18","2016-07-04","2016-01-31","2015-07-04","2015-05-03","2015-04-11","2014-11-06","2014-07-12","2014-06-27","2014-06-04","2014-05-05"],"name":"Long Run + Roll","description":""},"Short Run + Roll":{"attributes":{"lower":true,"core":false,"back":true,"upper":false,"cardio":true,"martial":false,"other":false},"datesDone":["2019-07-11","2019-06-12","2019-03-22","2019-02-18","2019-02-13","2019-01-30","2019-01-14","2018-06-28","2015-07-01","2015-03-22","2015-01-30","2015-01-22","2014-12-25","2014-11-27","2014-10-25","2014-10-18","2014-10-11","2014-09-20","2014-08-19","2014-08-12","2014-08-10","2014-08-02","2014-07-24","2014-07-21","2014-07-19","2014-07-16","2014-07-07","2014-07-04","2014-06-30","2014-06-24","2014-06-22","2014-06-21","2014-06-18","2014-06-14","2014-06-13","2014-06-09","2014-06-07","2014-06-03","2014-05-31","2014-05-30","2014-05-29","2014-05-27","2014-05-24","2014-05-23","2014-05-12"],"name":"Short Run + Roll","description":""},"Tai Chi":{"attributes":{"lower":false,"core":false,"back":false,"upper":false,"cardio":false,"martial":false,"other":true},"datesDone":["2020-04-09","2020-04-08","2020-04-07","2020-04-04","2020-04-03","2020-04-02","2020-04-01","2020-03-31","2020-03-30","2020-03-29","2020-03-28","2020-03-27","2020-03-26","2020-03-25","2020-03-24","2020-03-23","2020-03-22","2020-03-21","2020-03-19","2020-03-18","2020-03-15","2020-03-14","2020-03-12","2020-02-19","2020-02-18","2020-02-17","2020-02-16","2020-02-14","2020-02-13","2020-02-03","2020-01-21","2020-01-20","2020-01-16","2020-01-15","2020-01-13","2020-01-11","2020-01-10","2020-01-09","2020-01-08","2020-01-07","2019-12-17","2019-12-14","2019-12-13","2019-12-12","2019-12-11","2019-12-10","2019-12-09","2019-12-08","2019-12-07","2019-12-06","2019-12-05","2019-12-04","2019-12-03","2019-12-02","2019-12-01","2019-11-30","2019-11-29","2019-11-28","2019-11-27","2019-11-26","2019-11-25","2019-11-24","2019-11-23","2019-11-22","2019-11-21","2019-11-20","2019-11-19","2019-11-18","2019-11-17","2019-11-15","2019-11-14","2019-11-13","2019-11-12","2019-11-11","2019-11-10","2019-11-09","2019-11-07","2019-11-06","2019-11-05","2019-10-28","2019-10-27","2019-10-25","2019-10-22","2019-10-21","2019-10-16","2019-10-15","2019-10-14","2019-10-13","2019-10-12","2019-10-10","2019-10-09","2019-10-08","2019-10-07","2019-10-06","2019-10-05","2019-10-04","2019-10-03","2019-10-02","2019-10-01","2019-09-29","2019-09-28","2019-09-27","2019-09-26","2019-09-25","2019-09-20","2019-09-18","2019-09-17","2019-09-16","2019-09-15","2019-09-14","2019-09-12","2019-09-11","2019-09-10","2019-09-08","2019-09-07","2019-09-06","2019-09-05","2019-09-01","2019-08-31","2019-08-26","2019-08-23","2019-08-22","2019-08-21","2019-08-20","2019-08-19","2019-08-18","2019-08-17","2019-08-16","2019-08-15","2019-08-14","2019-08-12","2019-08-10","2019-08-09","2019-08-07","2019-08-06","2019-08-05","2019-08-03","2019-07-31","2019-07-30","2019-07-29","2019-07-28","2019-07-27","2019-07-26","2019-07-25","2019-07-24","2019-07-23","2019-07-22","2019-07-21","2019-07-20","2019-07-19","2019-07-18","2019-07-17","2019-07-16","2019-07-15","2019-07-14","2019-07-13","2019-07-12","2019-07-11","2019-07-09","2019-07-08","2019-07-01","2019-06-30","2019-06-29","2019-06-27","2019-06-26","2019-06-25","2019-06-24","2019-06-23","2019-06-22","2019-06-21","2019-06-20","2019-06-19","2019-06-17","2019-06-14","2019-06-13","2019-06-10","2019-06-09","2019-06-07","2019-06-06","2019-06-05","2019-06-04","2019-06-03","2019-05-08","2019-05-07","2019-05-06","2019-05-05","2019-05-04","2019-05-03","2019-04-29","2019-04-28","2019-04-25","2019-04-23","2019-04-20","2019-04-19","2019-04-18","2019-04-17","2019-04-16","2019-04-15","2019-04-10","2019-04-09","2019-04-08","2019-04-07","2019-04-05","2019-04-04","2019-04-03","2019-04-01","2019-03-30","2019-03-29","2019-03-28","2019-03-27","2019-03-26","2019-03-25","2019-03-23","2019-03-21","2019-03-20","2019-03-19","2019-03-18","2019-03-15","2019-03-14","2019-03-13","2019-03-12","2019-03-11","2019-03-08","2019-03-07","2019-03-04","2019-03-01","2019-02-28","2019-02-27","2019-02-26","2019-02-25","2019-02-24","2019-02-20","2019-02-19","2019-02-17","2019-02-16","2019-02-15","2019-02-14","2019-02-13","2019-02-12","2019-01-25","2019-01-22","2019-01-21","2019-01-18","2019-01-02","2018-12-28","2018-12-21","2018-12-20","2018-12-19","2018-12-09","2018-12-07","2018-12-06","2018-12-05","2018-12-04","2018-12-03","2018-11-30","2018-11-29","2018-11-28","2018-11-27","2018-11-26","2018-11-25","2018-11-19","2018-11-18","2018-11-14","2018-11-13","2018-11-12","2018-11-09","2018-11-08","2018-11-07","2018-11-06","2018-11-05","2018-11-02","2018-11-01","2018-10-31","2018-10-30","2018-10-29","2018-10-26","2018-10-22","2018-10-17","2018-10-15","2018-10-12","2018-10-11","2018-10-10","2018-10-09","2018-10-08","2018-10-04","2018-09-27","2018-09-23","2018-09-20","2018-09-19","2018-09-18","2018-09-14","2018-09-13","2018-09-10","2018-09-05","2018-08-19","2018-08-09","2018-08-04","2018-08-03","2018-07-31","2018-07-30","2018-07-28","2018-07-27","2018-07-26","2018-07-25","2018-07-24","2018-07-23","2018-07-19","2018-07-18","2018-07-17","2018-07-16","2018-07-13","2018-07-12","2018-07-06","2018-06-29","2018-06-10","2018-05-22","2018-05-20","2018-05-16","2018-05-15","2018-05-13","2018-05-10","2018-05-09","2018-04-30","2018-04-27","2018-04-26","2018-04-21","2018-04-19","2018-04-16","2018-04-10","2018-04-06","2018-04-04","2018-04-03","2018-03-28","2018-03-27","2018-03-26","2018-03-20","2018-03-19","2018-03-16","2018-03-15","2018-03-14","2018-03-09","2018-02-20","2018-02-19","2018-02-18","2018-02-17","2018-02-16","2018-02-15","2018-02-14","2018-02-13","2018-02-09","2018-02-08","2018-02-07","2018-02-06","2018-02-05","2018-02-03","2018-02-02","2018-02-01","2018-01-31","2018-01-30","2018-01-29","2018-01-28","2018-01-27","2018-01-25","2018-01-24","2018-01-18","2018-01-17","2018-01-16","2018-01-14","2018-01-13","2018-01-12","2018-01-11","2018-01-10","2018-01-08","2018-01-07","2018-01-06","2018-01-05","2018-01-04","2018-01-03","2018-01-02","2018-01-01","2017-12-31","2017-12-30","2017-12-29","2017-12-28","2017-12-27","2017-12-21","2017-12-20","2017-12-19","2017-12-18","2017-12-17","2017-12-15","2017-12-14","2017-12-12","2017-12-11","2017-12-10","2017-12-09","2017-12-08","2017-12-06","2017-12-05","2017-12-04","2017-12-03","2017-12-01","2017-11-29","2017-11-28","2017-11-20","2017-11-18","2017-11-17","2017-11-16","2017-11-15","2017-11-14","2017-11-13","2017-11-12","2017-11-11","2017-11-10","2017-11-09","2017-11-08","2017-11-07","2017-11-06","2017-11-01","2017-10-31","2017-10-30","2017-10-26","2017-10-25","2017-10-24","2017-10-20","2017-10-19","2017-10-18","2017-10-17","2017-10-16","2017-10-14","2017-10-13","2017-10-12","2017-10-11","2017-10-10","2017-10-09","2017-10-08","2017-10-07","2017-10-05","2017-10-04","2017-10-03","2017-10-02","2017-09-30","2017-09-29","2017-09-28","2017-09-27","2017-09-26","2017-09-25","2017-09-23","2017-09-22","2017-09-21","2017-09-20","2017-09-19","2017-09-18","2017-09-17","2017-09-16","2017-09-15","2017-09-14","2017-09-13","2017-09-12","2017-09-11","2017-09-10","2017-09-09","2017-09-08","2017-09-07","2017-09-06","2017-09-05","2017-09-02","2017-08-31","2017-08-30","2017-08-29","2017-08-28","2017-08-27","2017-08-26","2017-08-25","2017-08-24","2017-08-23","2017-08-22","2017-08-21","2017-08-20","2017-08-18","2017-08-17","2017-08-16","2017-08-15","2017-08-14","2017-08-13","2017-08-09","2017-08-08","2017-08-07","2017-08-06","2017-08-05","2017-08-04","2017-08-03","2017-08-02","2017-08-01","2017-07-31","2017-07-24","2017-07-23","2017-07-22","2017-07-21","2017-07-20","2017-07-19","2017-07-18","2017-07-17","2017-07-16","2017-07-15","2017-07-14","2017-07-13","2017-07-12","2017-07-11","2017-07-10","2017-07-09","2017-07-07","2017-07-06","2017-07-05","2017-07-03","2017-07-02","2017-07-01","2017-06-30","2017-06-29","2017-06-28","2017-06-27","2017-06-25","2017-06-24","2017-06-23","2017-06-22","2017-06-21","2017-06-20","2017-06-19","2017-06-18","2017-06-17","2017-06-16","2017-06-15","2017-06-14","2017-06-12","2017-06-11","2017-06-10","2017-06-09","2017-06-08","2017-06-07","2017-06-06","2017-06-03","2017-06-02","2017-06-01","2017-05-31","2017-05-29","2017-05-28","2017-05-27","2017-05-26","2017-05-24","2017-05-22","2017-05-20","2017-05-19","2017-05-18","2017-05-17","2017-05-16","2017-05-15","2017-05-14","2017-05-13","2017-05-12","2017-05-11","2017-05-10","2017-05-09","2017-05-08","2017-05-05","2017-05-03","2017-05-02","2017-05-01","2017-04-30","2017-04-29","2017-04-28","2017-04-27","2017-04-26","2017-04-25","2017-04-24","2017-04-23","2017-04-22","2017-04-21","2017-04-20","2017-04-19","2017-04-18","2017-04-17","2017-04-16","2017-04-14","2017-04-13","2017-04-12","2017-04-11","2017-04-10","2017-04-09","2017-04-08","2017-04-07","2017-04-06","2017-04-05","2017-04-04","2017-04-03","2017-03-31","2017-03-30","2017-03-28","2017-03-27","2017-03-24","2017-03-23","2017-03-22","2017-03-21","2017-03-20","2017-03-19","2017-03-18","2017-03-17","2017-03-16","2017-03-15","2017-03-14","2017-02-23","2017-02-21","2017-02-20","2017-02-16","2017-02-14","2017-02-09","2017-02-07","2017-02-02","2017-02-01","2017-01-27","2017-01-19","2017-01-17","2017-01-16","2017-01-12","2017-01-10","2017-01-04","2016-12-20","2016-12-12","2016-12-08","2016-12-06","2016-11-29","2016-11-15","2016-11-14","2016-11-10","2016-11-08","2016-11-07","2016-11-04","2016-11-01","2016-10-26","2016-10-25","2016-10-24","2016-10-21","2016-10-20","2016-10-19","2016-10-17","2016-10-14","2016-10-13","2016-10-12","2016-10-11","2016-10-07","2016-10-06","2016-10-05","2016-10-04","2016-10-03","2016-09-30","2016-09-29","2016-09-27","2016-09-26","2016-09-23","2016-09-22","2016-09-21","2016-09-20","2016-09-14","2016-09-13","2016-09-12","2016-09-09","2016-09-06","2016-09-05","2016-09-01","2016-08-30","2016-08-29","2016-08-26","2016-08-25","2016-08-23","2016-08-15","2016-08-05","2016-08-04","2016-08-03","2016-08-02","2016-08-01","2016-07-29","2016-07-28","2016-07-27","2016-07-26","2016-07-25","2016-07-24","2016-07-22","2016-07-21","2016-07-20","2016-07-19","2016-07-18","2016-07-15","2016-07-14","2016-07-13","2016-07-11","2016-07-05","2016-07-01","2016-06-30","2016-06-29","2016-06-28","2016-06-24","2016-06-23","2016-06-22","2016-06-21","2016-06-17","2016-06-16","2016-06-15","2016-06-14","2016-06-13","2016-06-10","2016-06-09","2016-06-08","2016-06-07","2016-06-03","2016-06-02","2016-05-31","2016-05-24","2016-05-22","2016-05-21","2016-05-17","2016-05-16","2016-05-15","2016-05-13","2016-05-12","2016-05-10","2016-05-09","2016-05-08","2016-05-05","2016-05-04","2016-05-03","2016-04-29","2016-04-22","2016-04-15","2016-04-13","2016-04-09","2016-03-25","2016-03-18","2016-03-16","2016-03-11","2016-03-07","2016-03-04","2016-02-26","2016-02-19","2016-02-12","2016-02-10","2016-02-05","2016-01-29","2016-01-20","2016-01-15","2016-01-14","2016-01-06","2016-01-02","2015-12-28","2015-12-18","2015-12-17","2015-12-16","2015-12-15","2015-12-11","2015-12-07","2015-12-04","2015-11-29","2015-11-05","2015-11-04","2015-11-02","2015-10-31","2015-10-24","2015-10-21","2015-10-20","2015-10-19","2015-10-15","2015-10-14","2015-10-13","2015-10-12","2015-10-06","2015-10-05","2015-10-02","2015-10-01","2015-09-30","2015-09-27","2015-09-25","2015-09-18","2015-09-15","2015-09-14","2015-09-10","2015-09-09","2015-08-28","2015-08-21","2015-08-13","2015-08-11","2015-08-05","2015-07-30","2015-07-24","2015-07-22","2015-07-13","2015-07-07","2015-07-03","2015-06-30","2015-06-23","2015-06-04","2015-05-29","2015-05-20","2015-05-18","2015-05-12","2015-05-06","2015-05-04","2015-04-30","2015-04-26","2015-04-17","2015-04-15","2015-04-14","2015-04-10","2015-04-08","2015-04-02","2015-03-31","2015-03-18","2015-03-10","2015-02-25","2015-02-03","2015-01-29","2015-01-28","2015-01-21","2015-01-19","2015-01-15","2015-01-08","2014-12-27","2014-12-23","2014-12-16","2014-12-15","2014-12-09","2014-12-04","2014-12-01","2014-11-30","2014-11-25","2014-11-24","2014-11-20","2014-11-19","2014-11-18","2014-11-17","2014-11-14","2014-11-13","2014-11-12","2014-11-11","2014-11-10","2014-11-05","2014-11-03","2014-10-31","2014-10-30","2014-10-29","2014-10-28","2014-10-27","2014-10-24","2014-10-23","2014-10-22","2014-10-21","2014-10-20","2014-10-17","2014-10-16","2014-10-15","2014-10-14","2014-10-09","2014-10-08","2014-10-06","2014-10-03","2014-10-02","2014-10-01","2014-09-30","2014-09-25","2014-09-24","2014-09-22","2014-09-19","2014-09-18","2014-09-17","2014-09-16","2014-09-09","2014-09-08","2014-09-05","2014-09-03","2014-08-29","2014-08-27","2014-08-26","2014-08-11","2014-08-07","2014-08-06","2014-08-04","2014-08-03","2014-08-01","2014-07-30","2014-07-26","2014-07-23","2014-07-20","2014-07-18","2014-07-16","2014-07-15","2014-07-09","2014-07-07","2014-07-03","2014-07-02","2014-06-27","2014-06-25","2014-06-23","2014-06-22","2014-06-20","2014-06-18","2014-06-11","2014-06-04","2014-05-28","2014-05-21","2014-05-14","2014-05-07"],"name":"Tai Chi","description":""},"Brazilian Jiu Jitsu":{"attributes":{"lower":false,"core":false,"back":false,"upper":false,"cardio":false,"martial":true,"other":false},"datesDone":["2019-01-02","2018-12-21","2018-12-07","2018-12-05","2018-11-30","2018-11-19","2018-11-15","2018-11-14","2018-11-09","2018-11-07","2018-10-27","2018-10-18","2018-10-17","2018-10-12","2018-10-10","2018-10-05","2018-09-25","2018-09-21","2018-09-17","2018-08-10","2018-08-03","2018-07-27","2018-07-20","2018-07-06","2018-02-13","2017-12-08","2017-12-01","2017-11-28","2017-11-20","2017-11-09","2017-11-07","2017-11-01","2017-10-24","2017-10-20","2017-10-18","2017-10-12","2017-10-11","2017-10-06","2017-09-06","2017-08-23","2017-08-21","2017-08-18","2017-08-14","2017-08-07","2017-08-04","2017-06-16","2017-06-14","2017-06-09","2017-06-07","2017-06-02","2017-05-26","2017-05-24","2017-05-22","2017-05-19","2017-05-17","2017-05-12","2017-05-10","2017-05-05","2017-05-01","2017-04-12","2017-04-10","2017-04-07","2017-04-05","2017-04-01","2017-03-31","2017-03-22","2017-03-20","2017-03-17","2017-03-15","2017-02-24","2017-02-22","2017-02-17","2017-02-08","2017-02-03","2017-01-27","2017-01-25","2017-01-18","2017-01-16","2016-12-22","2016-12-19","2016-12-16","2016-12-13","2016-11-28","2016-11-11","2016-10-24","2016-05-02","2016-04-29","2016-04-25","2016-04-22","2016-04-18","2016-04-15","2016-03-28","2016-03-11","2016-03-09","2016-03-04","2016-03-02","2016-02-29","2016-02-24","2016-02-22","2016-02-19","2016-02-17","2016-02-12","2016-02-05","2016-02-03","2016-02-01","2016-01-30","2016-01-25","2016-01-18","2016-01-15","2016-01-04","2015-12-30","2015-12-21","2015-12-18","2015-12-11","2015-12-09","2015-12-04","2015-11-30","2015-09-21","2015-09-18","2015-09-14","2015-08-31","2015-08-28","2015-08-26","2015-08-19","2015-08-17","2015-08-14","2015-08-12","2015-08-10","2015-08-07","2015-08-05","2015-07-29","2015-07-27","2015-07-20","2015-07-13","2015-07-10","2015-07-08","2015-07-06","2015-07-03","2015-07-01","2015-06-29","2015-06-25","2015-06-22","2015-06-19","2015-06-17","2015-06-15","2015-06-08","2015-06-05","2015-06-03","2015-06-01","2015-05-28","2015-05-21","2015-05-19","2015-05-15","2015-05-13","2015-05-11","2015-05-07","2015-05-05","2015-05-01","2015-04-29","2015-04-27","2015-04-24","2015-04-22","2015-04-20","2015-04-16","2015-04-13","2015-04-09","2015-04-07","2015-04-03","2015-04-01","2015-03-30","2015-03-25","2015-03-19","2015-02-19","2015-02-17","2015-02-13","2015-02-10","2015-02-06","2015-02-04","2015-01-30","2015-01-27","2015-01-22","2015-01-20","2015-01-16","2015-01-14","2015-01-09","2015-01-07","2014-12-23","2014-12-16","2014-12-02","2014-11-24","2014-11-18","2014-11-13","2014-11-05","2014-10-30","2014-10-23","2014-09-29","2014-09-17","2014-09-10","2014-09-04"],"name":"Brazilian Jiu Jitsu","description":""},"r/BodyWeightFitness Recommended Routine":{"attributes":{"lower":false,"core":true,"back":false,"upper":true,"cardio":false,"martial":false,"other":false},"datesDone":["2018-07-09","2018-05-25","2018-03-28","2018-02-08","2017-11-09","2017-10-08","2017-09-03","2017-08-17","2017-07-09","2017-05-27","2017-04-26","2017-04-09","2017-03-27","2017-02-28","2017-02-03","2016-12-21","2016-11-17","2016-10-27","2016-09-29","2016-08-28","2016-08-06","2016-07-17","2016-06-24","2016-05-31","2016-04-30","2016-04-14","2016-03-31","2016-03-18","2016-03-05"],"name":"r/BodyWeightFitness Recommended Routine","description":""},"RushFit - Fight Conditioning":{"attributes":{"lower":true,"core":true,"back":false,"upper":false,"cardio":true,"martial":true,"other":false},"datesDone":["2020-03-30","2020-03-13","2019-12-06","2019-11-21","2019-10-21","2019-09-27","2019-08-17","2019-07-24","2019-06-23","2019-04-08","2019-03-04","2019-01-19","2018-12-20","2018-11-26","2018-10-30","2018-09-14","2018-06-27","2018-05-30","2018-04-28","2018-04-05","2018-02-06","2018-01-09","2017-12-07","2017-10-31","2017-09-27","2017-09-05","2017-07-26","2017-07-07","2017-05-24","2017-04-21","2017-03-16","2017-02-02","2017-01-11","2016-12-13","2016-11-15","2016-10-19","2016-10-04","2016-09-19","2016-09-06","2016-08-25","2016-07-27","2016-07-21","2016-07-11","2016-07-06","2016-06-29","2016-06-23","2016-06-17","2016-06-14","2016-06-07","2016-06-03","2016-05-30","2016-05-24","2016-05-13","2016-05-10","2016-05-07"],"name":"RushFit - Fight Conditioning","description":""},"RushFit - Strength and Endurance":{"attributes":{"lower":true,"core":true,"back":true,"upper":true,"cardio":false,"martial":false,"other":false},"datesDone":["2020-03-23","2019-11-09","2019-07-31","2019-04-17","2019-03-11","2018-12-18","2018-10-31","2018-08-14","2018-06-30","2018-05-21","2018-04-16","2018-02-13","2017-11-20","2017-10-11","2017-09-15","2017-08-07","2017-06-15","2017-05-19","2017-04-12","2017-02-23","2017-01-25","2016-12-12","2016-11-14","2016-10-17","2016-09-23","2016-09-05","2016-08-05","2016-07-20","2016-06-15","2016-06-10","2016-05-25","2016-05-17"],"name":"RushFit - Strength and Endurance","description":""},"RushFit - Full Body Strength and Conditioning":{"attributes":{"lower":true,"core":true,"back":true,"upper":true,"cardio":false,"martial":false,"other":false},"datesDone":["2020-04-06","2019-12-11","2019-09-04","2019-06-11","2019-03-26","2018-12-30","2018-09-21","2018-07-26","2018-06-19","2018-04-30","2017-12-11","2017-11-01","2017-09-29","2017-08-30","2017-07-19","2017-06-05","2017-05-03","2017-04-05","2017-02-10","2017-01-02","2016-11-22","2016-10-20","2016-10-05","2016-09-14","2016-08-26","2016-07-28","2016-07-13","2016-06-30","2016-06-06","2016-05-19"],"name":"RushFit - Full Body Strength and Conditioning","description":""},"RushFit - Explosive Powertraining":{"attributes":{"lower":true,"core":true,"back":true,"upper":true,"cardio":false,"martial":false,"other":false},"datesDone":["2019-11-26","2019-09-10","2019-07-01","2019-04-09","2019-03-06","2018-12-04","2018-10-16","2018-09-07","2018-07-13","2018-06-12","2018-05-10","2018-01-10","2017-11-17","2017-10-23","2017-09-18","2017-08-14","2017-07-06","2017-05-22","2017-04-20","2017-03-15","2017-02-15","2017-01-16","2016-11-29","2016-11-02","2016-10-14","2016-09-21","2016-08-29","2016-08-01","2016-07-15","2016-07-01","2016-06-21","2016-06-08","2016-05-23"],"name":"RushFit - Explosive Powertraining","description":""},"Rushfit - Balance and Agility":{"attributes":{"lower":true,"core":false,"back":false,"upper":true,"cardio":true,"martial":false,"other":false},"datesDone":["2019-12-17","2019-09-26","2019-06-20","2019-03-14","2019-01-07","2018-11-21","2018-10-12","2018-09-25","2018-07-05","2018-05-16","2018-04-13","2018-01-31","2017-12-29","2017-11-05","2017-09-26","2017-08-23","2017-07-16","2017-06-14","2017-05-08","2017-04-03","2017-02-08","2017-01-24","2016-12-07","2016-11-18","2016-10-28","2016-10-06","2016-09-07","2016-08-23","2016-07-18","2016-06-28","2016-06-01"],"name":"Rushfit - Balance and Agility","description":""},"Rushfit - Stretching for Flexibility":{"attributes":{"lower":false,"core":false,"back":false,"upper":false,"cardio":false,"martial":false,"other":true},"datesDone":["2020-04-05","2020-03-29","2020-02-13","2020-02-03","2020-01-14","2020-01-11","2019-12-17","2019-12-08","2019-12-04","2019-12-02","2019-11-30","2019-11-24","2019-11-20","2019-11-15","2019-11-12","2019-11-06","2019-10-22","2019-10-12","2019-10-09","2019-10-07","2019-10-02","2019-09-27","2019-09-25","2019-09-15","2019-09-01","2019-08-30","2019-08-20","2019-08-15","2019-08-12","2019-08-08","2019-08-06","2019-07-30","2019-07-25","2019-07-18","2019-07-16","2019-07-14","2019-07-10","2019-07-01","2019-06-27","2019-06-25","2019-06-21","2019-06-19","2019-06-17","2019-06-10","2019-06-07","2019-06-05","2019-05-07","2019-05-05","2019-05-03","2019-04-23","2019-04-19","2019-04-15","2019-04-08","2019-04-04","2019-04-01","2019-03-11","2019-03-07","2019-03-04","2019-01-01","2018-12-09","2018-12-05","2018-12-01","2018-11-28","2018-11-25","2018-11-19","2018-11-15","2018-11-13","2018-11-07","2018-11-01","2018-10-29","2018-10-17","2018-10-13","2018-10-04","2018-09-19","2018-09-14","2018-09-11","2018-09-07","2018-09-05","2018-08-03","2018-07-30","2018-07-23","2018-07-18","2018-07-13","2018-07-06","2018-06-29","2018-06-21","2018-05-19","2018-04-10","2018-04-04","2018-03-26","2018-03-15","2018-02-20","2018-02-18","2018-02-15","2018-02-08","2018-02-03","2018-02-01","2018-01-30","2018-01-27","2018-01-16","2018-01-13","2018-01-10","2018-01-04","2018-01-01","2017-12-31","2017-12-28","2017-12-21","2017-12-17","2017-12-10","2017-12-06","2017-11-29","2017-11-15","2017-11-13","2017-11-10","2017-10-25","2017-10-10","2017-10-05","2017-10-02","2017-09-28","2017-09-26","2017-09-21","2017-09-19","2017-09-15","2017-09-12","2017-09-10","2017-09-02","2017-08-27","2017-08-24","2017-08-17","2017-08-08","2017-08-02","2017-07-31","2017-07-24","2017-07-21","2017-07-16","2017-07-13","2017-07-07","2017-07-03","2017-06-28","2017-06-24","2017-06-20","2017-06-17","2017-06-12","2017-06-08","2017-05-31","2017-05-27","2017-05-25","2017-05-18","2017-05-15","2017-05-10","2017-05-02","2017-04-29","2017-04-26","2017-04-23","2017-04-20","2017-04-18","2017-04-13","2017-04-10","2017-04-06","2017-03-30","2017-03-28","2017-03-23","2017-03-21","2017-03-13","2017-02-28","2017-02-23","2017-02-16","2017-02-07","2017-02-02","2017-01-31","2017-01-26","2017-01-19","2017-01-14","2017-01-05","2017-01-03","2016-12-28","2016-12-20","2016-12-09","2016-12-06","2016-12-01","2016-11-29","2016-11-26","2016-11-19","2016-11-14","2016-11-08","2016-11-04","2016-10-27","2016-10-20","2016-10-15","2016-10-13","2016-10-10","2016-10-06","2016-10-04","2016-10-01","2016-09-28","2016-09-26","2016-09-21","2016-09-14","2016-09-12","2016-09-09","2016-09-06","2016-09-01","2016-08-29","2016-08-25","2016-08-22","2016-08-19","2016-08-15","2016-08-04","2016-08-02","2016-07-30","2016-07-28","2016-07-26","2016-07-20","2016-07-18","2016-07-16","2016-07-15","2016-07-13","2016-07-05","2016-06-30","2016-06-28","2016-06-23","2016-06-21","2016-06-15","2016-06-13","2016-06-09","2016-06-07","2016-06-02","2016-05-31"],"name":"Rushfit - Stretching for Flexibility","description":""},"Rushfit - Abdominal Strength and Core Conditioning":{"attributes":{"lower":false,"core":true,"back":false,"upper":false,"cardio":false,"martial":false,"other":false},"datesDone":["2020-01-21","2019-12-07","2019-11-07","2019-09-18","2019-07-29","2019-06-07","2019-03-01","2019-01-21","2018-12-07","2018-10-26","2018-09-05","2018-08-04","2018-06-06","2018-04-20","2018-01-03","2017-10-20","2017-08-24","2017-08-04","2017-06-02","2017-04-30","2017-03-30","2017-02-20","2017-01-10","2016-12-16","2016-11-08","2016-10-10","2016-09-12","2016-08-24","2016-08-03","2016-07-19","2016-06-22","2016-06-16","2016-06-02"],"name":"Rushfit - Abdominal Strength and Core Conditioning","description":""},"Wim Hof Method Week 1":{"attributes":{"lower":false,"core":false,"back":false,"upper":false,"cardio":false,"martial":false,"other":true},"datesDone":["2020-04-08","2020-04-01","2019-11-13","2019-03-25","2019-03-24","2019-01-21","2018-12-27","2018-11-19","2018-11-15","2018-11-13","2018-11-12","2018-10-17","2018-10-12","2018-10-11","2018-10-10","2018-10-08","2018-09-27","2018-09-25","2018-09-24","2018-09-23","2018-09-22","2018-09-21","2018-09-20","2018-09-19","2018-09-18","2018-09-17","2018-09-16","2018-09-14","2018-09-13","2018-09-11","2018-09-10","2018-09-09","2018-07-26","2018-07-11","2018-06-12","2018-06-11","2018-02-07","2018-01-18","2018-01-12","2018-01-11","2018-01-07","2018-01-04","2018-01-03","2018-01-02","2018-01-01","2017-12-30","2017-12-29","2017-12-28","2017-12-20","2017-12-13","2017-11-07","2017-10-26","2017-10-25","2017-10-14","2017-10-12","2017-09-30","2017-09-27","2017-09-23","2017-09-18","2017-04-30","2016-11-19","2016-11-15","2016-11-14","2016-11-13","2016-11-12","2016-11-11","2016-11-09"],"name":"Wim Hof Method Week 1","description":""},"Wim Hof Method Week 2":{"attributes":{"lower":false,"core":false,"back":false,"upper":false,"cardio":false,"martial":false,"other":true},"datesDone":["2017-10-16","2017-10-10","2017-09-28","2017-09-22","2017-09-19","2016-12-01","2016-11-30","2016-11-26","2016-11-23","2016-11-22","2016-11-21"],"name":"Wim Hof Method Week 2","description":""},"Wim Hof Method Week 3":{"attributes":{"lower":false,"core":false,"back":false,"upper":false,"cardio":false,"martial":false,"other":true},"datesDone":["2017-09-25","2016-12-07","2016-12-06","2016-12-05","2016-12-03"],"name":"Wim Hof Method Week 3","description":""},"Simple and Sinister":{"attributes":{"lower":true,"core":true,"back":true,"upper":true,"cardio":false,"martial":false,"other":false},"datesDone":["2020-03-31","2020-03-11","2020-02-17","2020-01-05","2019-12-13","2019-12-05","2019-11-25","2019-11-17","2019-10-22","2019-10-13","2019-10-06","2019-10-02","2019-09-20","2019-09-06","2019-08-22","2019-08-15","2019-08-05","2019-07-23","2019-07-16","2019-07-08","2019-07-02","2019-06-28","2019-06-22","2019-06-17","2019-06-14","2019-06-04","2019-04-25","2019-04-13","2019-04-06","2019-03-09","2019-02-24","2019-02-11","2019-01-29","2019-01-23","2019-01-15","2019-01-01","2018-12-27","2018-12-16","2018-12-05","2018-11-27","2018-11-19","2018-11-12","2018-11-05","2018-10-29","2018-10-24","2018-10-18","2018-10-09","2018-10-05","2018-09-17","2018-09-13","2018-09-09","2018-08-12","2018-08-06","2018-07-24","2018-07-19","2018-07-11","2018-07-03","2018-06-26","2018-06-14","2018-06-04","2018-05-29","2018-05-17","2018-05-08","2018-04-27","2018-04-24","2018-02-16","2018-02-09","2018-02-02","2018-01-28","2018-01-25","2018-01-24","2018-01-18","2018-01-12","2018-01-07","2017-12-31","2017-12-28","2017-12-25","2017-10-14"],"name":"Simple and Sinister","description":""},"Vapassana Meditation":{"attributes":{"lower":false,"core":false,"back":false,"upper":false,"cardio":false,"martial":false,"other":true},"datesDone":["2018-10-10","2018-10-09","2018-07-30","2018-07-19","2018-07-18","2018-05-13","2018-05-10","2018-02-19"],"name":"Vapassana Meditation","description":""},"Pull Ups + Burpees":{"attributes":{"lower":true,"core":false,"back":true,"upper":true,"cardio":false,"martial":false,"other":false},"datesDone":["2020-01-07","2019-12-09","2019-11-29","2019-11-05","2019-10-10","2019-09-08","2019-08-19","2019-07-12","2019-06-24","2019-06-06","2019-04-01","2019-03-19","2019-02-26","2019-02-13","2019-01-16","2018-12-21","2018-11-28","2018-11-13","2018-10-25","2018-10-11","2018-09-29","2018-09-24","2018-09-11","2018-09-04","2018-08-08","2018-08-01","2018-07-22","2018-06-28","2018-06-07","2018-04-21"],"name":"Pull Ups + Burpees","description":""},"Heavy Bag":{"attributes":{"lower":false,"core":false,"back":false,"upper":false,"cardio":true,"martial":true,"other":false},"datesDone":["2019-10-18","2019-08-03","2019-04-20","2018-12-28","2018-12-09","2018-09-06","2018-08-19","2018-07-29"],"name":"Heavy Bag","description":""},"Interval Run":{"attributes":{"lower":true,"core":false,"back":true,"upper":false,"cardio":true,"martial":false,"other":false},"datesDone":["2019-12-03","2019-09-11","2019-05-07","2019-03-27","2018-12-06","2018-11-01","2018-09-18","2018-08-13"],"name":"Interval Run","description":""},"Exercise Bike":{"attributes":{"lower":true,"core":false,"back":false,"upper":false,"cardio":true,"martial":false,"other":false},"datesDone":["2020-01-07","2019-12-09","2019-11-10","2019-10-27","2019-10-14","2019-08-18","2019-07-12","2019-06-27","2019-05-03","2019-04-15","2019-04-10","2019-04-03","2019-03-15","2019-03-07","2019-02-14","2019-01-20"],"name":"Exercise Bike","description":""},"Generic - Legs + Back":{"attributes":{"lower":true,"core":false,"back":true,"upper":true,"cardio":false,"martial":false,"other":false},"datesDone":["2020-01-11","2019-11-15","2019-03-22","2019-02-28","2019-02-25","2019-01-22","2019-01-20"],"name":"Generic - Legs + Back","description":""},"Generic - Chest + Back + Tris":{"attributes":{"lower":false,"core":false,"back":true,"upper":true,"cardio":false,"martial":false,"other":false},"datesDone":["2019-12-19","2019-10-27","2019-07-25","2019-02-19","2019-01-28"],"name":"Generic - Chest + Back + Tris","description":""},"Elliptical":{"attributes":{"lower":true,"core":true,"back":false,"upper":false,"cardio":true,"martial":false,"other":false},"datesDone":["2019-10-27","2019-08-09","2019-04-04","2019-02-16","2019-01-31"],"name":"Elliptical","description":""},"Swimming":{"attributes":{"lower":false,"core":false,"back":false,"upper":false,"cardio":false,"martial":false,"other":false},"datesDone":["2019-11-10","2019-04-26","2019-04-11"],"name":"Swimming","description":""},"Stairs":{"attributes":{"lower":true,"core":false,"back":false,"upper":false,"cardio":true,"martial":false,"other":false},"datesDone":["2019-11-15","2019-10-09"],"name":"Stairs","description":""},"P90X3 - Dynamix":{"attributes":{"lower":false,"core":false,"back":false,"upper":false,"cardio":false,"martial":false,"other":true},"datesDone":["2020-04-06","2020-03-31","2020-02-19","2020-02-12","2020-02-03","2020-02-01"],"name":"P90X3 - Dynamix","description":""},"P90X3 - Eccentric Lower":{"attributes":{"lower":true,"core":false,"back":false,"upper":false,"cardio":false,"martial":false,"other":false},"datesDone":["2020-03-14","2020-02-12","2020-02-02"],"name":"P90X3 - Eccentric Lower","description":""},"Hard Corps - Core 1":{"attributes":{"lower":false,"core":true,"back":false,"upper":false,"cardio":false,"martial":false,"other":false},"datesDone":["2020-02-03"],"name":"Hard Corps - Core 1","description":""},"P90X3 - Pilates X":{"attributes":{"lower":false,"core":true,"back":false,"upper":false,"cardio":false,"martial":false,"other":false},"datesDone":["2020-03-27","2020-02-08"],"name":"P90X3 - Pilates X","description":""},"P90X3 - Isometrix":{"attributes":{"lower":false,"core":true,"back":false,"upper":true,"cardio":false,"martial":false,"other":true},"datesDone":["2020-02-09"],"name":"P90X3 - Isometrix","description":""},"P90X3 - MMX":{"attributes":{"lower":false,"core":false,"back":false,"upper":false,"cardio":true,"martial":true,"other":false},"datesDone":["2020-03-18","2020-02-16","2020-02-10"],"name":"P90X3 - MMX","description":""},"Hard Corps - Resistance 3":{"attributes":{"lower":true,"core":true,"back":false,"upper":true,"cardio":false,"martial":false,"other":false},"datesDone":["2020-02-13"],"name":"Hard Corps - Resistance 3","description":""},"P90X3 - Eccentric Upper":{"attributes":{"lower":false,"core":false,"back":true,"upper":true,"cardio":false,"martial":false,"other":false},"datesDone":["2020-02-14"],"name":"P90X3 - Eccentric Upper","description":""},"P90X3 - Yoga":{"attributes":{"lower":false,"core":false,"back":false,"upper":false,"cardio":false,"martial":false,"other":true},"datesDone":["2020-03-12","2020-02-18"],"name":"P90X3 - Yoga","description":""},"Hard Corps - Core 2":{"attributes":{"lower":false,"core":true,"back":false,"upper":false,"cardio":false,"martial":false,"other":false},"datesDone":["2020-02-19"],"name":"Hard Corps - Core 2","description":""},"P90X3 - The Warrior":{"attributes":{"lower":true,"core":true,"back":false,"upper":true,"cardio":true,"martial":true,"other":false},"datesDone":["2020-03-21"],"name":"P90X3 - The Warrior","description":""},"P90X3 - CVX":{"attributes":{"lower":true,"core":false,"back":false,"upper":true,"cardio":true,"martial":false,"other":false},"datesDone":["2020-03-26"],"name":"P90X3 - CVX","description":""},"P90X3 - Accelerator":{"attributes":{"lower":true,"core":false,"back":false,"upper":false,"cardio":true,"martial":false,"other":false},"datesDone":["2020-04-04"],"name":"P90X3 - Accelerator","description":""}}
\ No newline at end of file
+++ /dev/null
-{"P90X - Ab Ripper":{"attributes":{"lower":false,"core":true,"back":false,"upper":false,"cardio":false,"martial":false,"other":false},"datesDone":["2020-03-20","2019-11-29","2019-10-12","2019-09-08","2019-08-09","2019-06-18","2019-04-19","2019-03-15","2019-03-07","2019-02-14","2019-01-31","2018-11-14","2018-10-04","2018-07-23","2018-05-17","2018-03-07","2017-12-18","2017-09-25","2017-08-29","2017-06-27","2017-03-21","2017-02-14","2017-01-27","2016-11-11","2016-09-04","2016-04-29","2016-03-11","2016-02-05","2016-01-20","2015-12-04","2015-09-18","2015-08-14","2015-06-25","2015-05-04","2015-04-01","2015-03-19","2015-02-19","2015-01-22","2014-12-26","2014-11-25","2014-10-30","2014-06-28","2014-06-16","2014-05-25"],"name":"P90X - Ab Ripper","description":""},"P90X - Back + Biceps":{"attributes":{"lower":false,"core":false,"back":true,"upper":true,"cardio":false,"martial":false,"other":false},"datesDone":[],"name":"P90X - Back + Biceps","description":""},"P90X - Cardio X":{"attributes":{"lower":false,"core":false,"back":false,"upper":false,"cardio":true,"martial":true,"other":false},"datesDone":["2020-03-10","2020-01-06","2019-10-25","2019-10-05","2019-09-07","2019-08-10","2019-06-29","2019-05-08","2019-04-28","2019-04-16","2019-03-21","2018-12-26","2018-12-14","2018-11-07","2018-10-10","2018-07-10","2018-06-05","2018-05-09","2018-04-24","2018-04-03","2018-01-27","2018-01-01","2017-11-14","2017-10-18","2017-09-17","2017-08-21","2017-07-03","2017-05-31","2017-04-27","2017-03-31","2017-03-13","2017-02-13","2017-01-30","2016-12-19","2016-11-28","2016-11-04","2016-10-21","2016-09-27","2016-09-09","2016-08-22","2016-07-29","2016-06-27","2016-06-04","2016-05-04","2016-04-16","2016-04-08","2016-03-21","2016-03-02","2016-02-22","2016-02-08","2016-02-03","2016-01-12","2015-12-28","2015-12-09","2015-11-05","2015-10-12","2015-08-26","2015-08-10","2015-07-20","2015-06-29","2015-06-11","2015-06-08","2015-05-28","2015-04-02","2015-03-09","2015-02-17","2015-01-26","2015-01-09","2014-12-26","2014-12-17","2014-12-16","2014-12-09","2014-11-21","2014-10-27","2014-10-13","2014-10-05","2014-09-13","2014-07-07","2014-06-23","2014-05-28","2014-05-14"],"name":"P90X - Cardio X","description":""},"P90X - Chest + Back":{"attributes":{"lower":false,"core":false,"back":true,"upper":true,"cardio":false,"martial":false,"other":false},"datesDone":[],"name":"P90X - Chest + Back","description":""},"P90X - Chest + Shoulders + Triceps":{"attributes":{"lower":false,"core":false,"back":false,"upper":false,"cardio":false,"martial":false,"other":false},"datesDone":["2017-06-17","2017-02-17","2016-09-01"],"name":"P90X - Chest + Shoulders + Triceps","description":""},"P90X - Core Synergistics":{"attributes":{"lower":false,"core":true,"back":false,"upper":true,"cardio":false,"martial":false,"other":false},"datesDone":["2020-04-02","2019-11-19","2019-07-21","2019-03-29","2018-10-15","2018-06-21","2018-04-26","2017-10-02","2017-05-12","2017-02-07","2016-10-25","2016-07-25","2016-04-27","2016-03-23","2016-02-18","2016-01-21","2015-12-15","2015-10-31","2015-08-25","2015-08-05","2015-06-30","2015-04-30","2015-03-23","2015-02-11","2015-01-23","2014-12-30","2014-11-19","2014-10-01","2014-07-31","2014-06-26"],"name":"P90X - Core Synergistics","description":""},"P90X+ - Interval X+":{"attributes":{"lower":false,"core":false,"back":false,"upper":false,"cardio":true,"martial":false,"other":false},"datesDone":["2020-04-03","2019-10-03","2019-08-07","2019-04-18","2018-12-17","2018-10-17","2018-07-18","2018-06-09","2018-05-01","2018-02-14","2017-11-21","2017-10-12","2017-08-08","2017-06-06","2017-05-02","2017-03-20","2017-01-20","2016-11-30","2016-10-24","2016-09-22","2016-08-02","2016-06-09","2016-04-28","2016-03-24","2016-02-29","2016-01-18","2015-12-16","2015-10-28","2015-09-21","2015-08-07","2015-07-08","2015-06-03","2015-04-17","2015-03-16","2015-02-12","2015-01-16","2014-12-22","2014-11-13","2014-10-17","2014-10-02","2014-09-03","2014-07-28","2014-07-09","2014-06-25","2014-06-03","2014-05-12"],"name":"P90X+ - Interval X+","description":""},"P90X+ - Kenpo Cardio X+":{"attributes":{"lower":false,"core":false,"back":false,"upper":false,"cardio":true,"martial":true,"other":false},"datesDone":["2020-03-24","2019-12-01","2019-10-15","2019-08-27","2019-07-15","2019-06-08","2019-03-28","2019-02-15","2019-01-02","2018-11-29","2018-10-22","2018-08-07","2018-06-22","2018-05-18","2018-04-19","2018-01-16","2017-12-26","2017-12-05","2017-10-24","2017-09-20","2017-08-27","2017-07-21","2017-06-28","2017-05-18","2017-04-14","2017-02-22","2017-01-01","2016-12-08","2016-11-10","2016-10-13","2016-09-15","2016-08-30","2016-08-04","2016-07-03","2016-05-18","2016-04-25","2016-03-27","2016-03-09","2016-02-24","2016-01-27","2016-01-13","2015-12-21","2015-11-23","2015-10-23","2015-10-13","2015-09-11","2015-08-31","2015-08-12","2015-07-31","2015-07-06","2015-06-17","2015-06-01","2015-04-21","2015-03-24","2015-03-13","2015-02-10","2015-01-14","2014-11-18","2014-10-21","2014-09-18","2014-07-22","2014-06-10"],"name":"P90X+ - Kenpo Cardio X+","description":""},"P90X - Kenpo X":{"attributes":{"lower":false,"core":false,"back":false,"upper":false,"cardio":true,"martial":true,"other":false},"datesDone":["2020-04-07","2020-01-10","2019-11-13","2019-10-11","2019-09-17","2019-07-20","2019-06-19","2019-06-13","2019-03-12","2019-01-24","2018-11-17","2018-07-25","2018-06-15","2018-05-12","2018-01-04","2017-11-18","2017-09-30","2017-09-14","2017-08-02","2017-07-12","2017-06-11","2017-05-05","2017-04-06","2017-02-16","2017-01-26","2016-12-02","2016-11-01","2016-10-07","2016-09-13","2016-08-15","2016-07-14","2016-05-20","2016-05-02","2016-04-13","2016-03-17","2016-02-17","2016-01-22","2015-12-30","2015-12-08","2015-11-04","2015-10-16","2015-08-19","2015-07-27","2015-06-24","2015-05-29","2015-05-08","2015-04-06","2015-02-26","2015-01-21","2015-01-05","2014-12-02","2014-11-10","2014-10-07","2014-09-26","2014-08-28","2014-08-01","2014-07-18","2014-06-30","2014-06-17","2014-06-05","2014-05-22","2014-05-09"],"name":"P90X - Kenpo X","description":""},"P90X - Legs + Back":{"attributes":{"lower":true,"core":false,"back":true,"upper":true,"cardio":false,"martial":false,"other":false},"datesDone":["2017-05-16","2017-03-21","2016-12-15","2016-09-11","2016-05-12"],"name":"P90X - Legs + Back","description":""},"P90X - Plyometrics":{"attributes":{"lower":true,"core":false,"back":false,"upper":false,"cardio":true,"martial":false,"other":false},"datesDone":["2019-08-14","2019-03-25","2018-09-10","2018-05-24","2017-12-01","2017-10-09","2017-07-10","2017-06-03","2017-04-18","2017-02-24","2017-01-03","2016-09-26","2016-09-02","2016-05-16","2016-04-18","2016-03-15","2016-02-10","2015-12-29","2015-11-02","2015-10-14","2015-09-15","2015-07-14","2015-06-22","2015-05-06","2015-03-26","2015-02-18","2015-01-29","2015-01-07","2014-11-20","2014-10-28","2014-10-15","2014-09-19","2014-08-05","2014-06-16"],"name":"P90X - Plyometrics","description":""},"P90X - Shoulders + Arms":{"attributes":{"lower":false,"core":false,"back":false,"upper":true,"cardio":false,"martial":false,"other":false},"datesDone":["2019-03-13","2017-05-15"],"name":"P90X - Shoulders + Arms","description":""},"P90X - X Stretch":{"attributes":{"lower":false,"core":false,"back":false,"upper":false,"cardio":false,"martial":false,"other":true},"datesDone":["2020-04-08","2020-04-04","2020-03-30","2020-03-25","2020-03-20","2020-02-08","2020-01-16","2020-01-06","2019-12-16","2019-12-15","2019-12-09","2019-12-07","2019-12-03","2019-11-27","2019-11-21","2019-11-19","2019-11-14","2019-11-09","2019-11-05","2019-10-10","2019-10-08","2019-10-04","2019-09-30","2019-09-26","2019-09-24","2019-09-16","2019-09-10","2019-09-05","2019-08-31","2019-08-29","2019-08-26","2019-08-19","2019-08-13","2019-08-07","2019-07-29","2019-07-26","2019-07-23","2019-07-17","2019-07-15","2019-07-11","2019-07-08","2019-06-26","2019-06-24","2019-06-20","2019-06-11","2019-06-09","2019-06-06","2019-06-04","2019-05-08","2019-05-06","2019-05-04","2019-04-29","2019-04-17","2019-04-16","2019-04-07","2019-04-03","2019-03-31","2019-03-29","2019-03-26","2019-03-24","2019-03-18","2019-03-12","2019-03-06","2019-02-14","2019-01-01","2018-12-07","2018-12-03","2018-11-29","2018-11-14","2018-11-06","2018-10-22","2018-10-15","2018-10-06","2018-10-03","2018-10-01","2018-09-27","2018-09-18","2018-09-13","2018-09-08","2018-09-04","2018-08-16","2018-08-09","2018-07-25","2018-07-17","2018-07-07","2018-06-27","2018-06-19","2018-06-13","2018-06-10","2018-06-04","2018-05-23","2018-05-15","2018-04-25","2018-04-18","2018-04-06","2018-03-20","2018-02-19","2018-02-17","2018-02-12","2018-02-07","2018-02-02","2018-01-31","2018-01-29","2018-01-23","2018-01-18","2018-01-12","2018-01-08","2018-01-03","2017-12-30","2017-12-27","2017-12-19","2017-12-12","2017-11-30","2017-11-27","2017-11-18","2017-11-14","2017-11-12","2017-10-30","2017-10-08","2017-10-03","2017-09-29","2017-09-27","2017-09-22","2017-09-20","2017-09-18","2017-09-14","2017-09-11","2017-09-07","2017-08-28","2017-08-25","2017-08-22","2017-08-15","2017-08-06","2017-07-22","2017-07-20","2017-07-19","2017-07-15","2017-07-12","2017-07-09","2017-07-06","2017-06-30","2017-06-22","2017-06-19","2017-06-15","2017-06-11","2017-06-07","2017-05-28","2017-05-26","2017-05-23","2017-05-16","2017-05-11","2017-05-09","2017-05-01","2017-04-27","2017-04-24","2017-04-21","2017-04-19","2017-04-17","2017-04-11","2017-04-07","2017-04-04","2017-03-29","2017-03-27","2017-03-22","2017-03-17","2017-02-27","2017-02-21","2017-02-09","2017-01-23","2017-01-17","2017-01-12","2017-01-04","2016-12-31","2016-12-13","2016-12-08","2016-12-05","2016-11-30","2016-11-23","2016-11-15","2016-11-10","2016-11-07","2016-11-02","2016-10-25","2016-10-19","2016-10-14","2016-10-12","2016-10-07","2016-10-05","2016-10-03","2016-09-29","2016-09-27","2016-09-22","2016-09-20","2016-09-15","2016-09-13","2016-09-07","2016-09-02","2016-08-30","2016-08-26","2016-08-23","2016-08-16","2016-08-05","2016-08-03","2016-08-01","2016-07-29","2016-07-27","2016-07-25","2016-07-19","2016-07-14","2016-07-11","2016-07-01","2016-06-29","2016-06-24","2016-06-22","2016-06-20","2016-06-17","2016-06-14","2016-06-10","2016-06-08","2016-06-06","2016-06-03","2016-06-01","2016-05-24","2016-05-23","2016-05-21","2016-05-18","2016-05-17","2016-05-16","2016-05-13","2016-05-12","2016-05-10","2016-05-09","2016-05-05","2016-05-04","2016-04-28","2016-04-26","2016-04-21","2016-04-14","2016-04-12","2016-04-11","2016-04-06","2016-03-31","2016-03-29","2016-03-23","2016-03-22","2016-03-21","2016-03-17","2016-03-16","2016-03-15","2016-03-14","2016-03-10","2016-03-03","2016-03-01","2016-02-28","2016-02-25","2016-02-23","2016-02-18","2016-02-11","2016-02-10","2016-02-02","2016-01-28","2016-01-26","2016-01-21","2016-01-20","2016-01-19","2016-01-14","2016-01-13","2016-01-12","2016-01-08","2016-01-05","2015-12-29","2015-12-23","2015-12-22","2015-12-17","2015-12-16","2015-12-15","2015-12-10","2015-12-08","2015-12-03","2015-12-02","2015-11-28","2015-11-23","2015-11-05","2015-11-04","2015-11-02","2015-10-21","2015-10-20","2015-10-19","2015-10-15","2015-10-14","2015-10-13","2015-10-06","2015-10-05","2015-10-02","2015-09-16","2015-09-10","2015-08-30","2015-08-27","2015-08-25","2015-08-20","2015-08-18","2015-08-14","2015-08-11","2015-08-09","2015-08-04","2015-07-30","2015-07-28","2015-07-25","2015-07-14","2015-07-12","2015-07-09","2015-07-07","2015-07-02","2015-06-30","2015-06-27","2015-06-23","2015-06-20","2015-06-18","2015-06-16","2015-06-12","2015-06-10","2015-06-04","2015-06-02","2015-05-31","2015-05-29","2015-05-20","2015-05-18","2015-05-15","2015-05-13","2015-05-11","2015-05-08","2015-05-06","2015-05-05","2015-05-01","2015-04-30","2015-04-29","2015-04-27","2015-04-24","2015-04-23","2015-04-22","2015-04-21","2015-04-20","2015-04-17","2015-04-16","2015-04-15","2015-04-14","2015-04-13","2015-04-10","2015-04-09","2015-04-08","2015-04-07","2015-04-06","2015-04-05","2015-04-03","2015-04-02","2015-04-01","2015-03-31","2015-03-28","2015-03-26","2015-03-25","2015-03-17","2015-03-16","2015-03-15","2015-03-12","2015-03-11","2015-03-05","2015-03-01","2015-02-18","2015-02-16","2015-02-12","2015-02-11","2015-02-05","2015-02-04","2015-01-29","2015-01-28","2015-01-26","2015-01-21","2015-01-20","2015-01-15","2015-01-13","2015-01-10","2015-01-08","2015-01-06","2014-12-31","2014-12-24","2014-12-22","2014-12-17","2014-12-15","2014-12-09","2014-12-04","2014-12-03","2014-12-01","2014-11-25","2014-11-21","2014-11-20","2014-11-19","2014-11-17","2014-11-15","2014-11-14","2014-11-12","2014-11-10","2014-11-06","2014-11-04","2014-11-01","2014-10-29","2014-10-27","2014-10-22","2014-10-21","2014-10-16","2014-10-14","2014-10-09","2014-10-07","2014-10-02","2014-09-29","2014-09-28","2014-09-24","2014-09-17","2014-09-16","2014-09-11","2014-09-06","2014-09-02","2014-08-28","2014-08-26","2014-08-19","2014-08-12","2014-08-08","2014-08-05","2014-07-31","2014-07-29","2014-07-25","2014-07-22","2014-07-17","2014-07-10","2014-07-08","2014-07-04","2014-07-01","2014-06-26","2014-06-24","2014-06-19","2014-06-17","2014-06-10","2014-06-05","2014-06-02","2014-05-29","2014-05-26","2014-05-22","2014-05-13","2014-05-08","2014-05-06"],"name":"P90X - X Stretch","description":""},"P90X - Yoga X":{"attributes":{"lower":false,"core":false,"back":false,"upper":false,"cardio":false,"martial":false,"other":true},"datesDone":["2020-01-20","2019-11-23","2019-10-07","2019-09-24","2019-07-27","2019-04-22","2019-02-21","2018-10-18","2018-04-17","2018-03-16","2017-11-11","2017-09-09","2017-08-05","2017-05-30","2017-05-06","2017-03-28","2017-02-06","2016-12-27","2016-11-21","2016-11-09","2016-10-18","2016-08-18"],"name":"P90X - Yoga X","description":""},"P90X2 - Base and Back":{"attributes":{"lower":true,"core":false,"back":true,"upper":true,"cardio":false,"martial":false,"other":false},"datesDone":["2019-11-22","2019-08-06","2019-02-01","2018-11-06","2018-01-30","2017-10-26","2017-07-24","2017-04-29","2017-02-09","2016-11-07","2016-07-26","2016-04-26","2016-03-22","2016-02-04","2015-11-03","2015-08-24","2015-07-09","2015-05-14","2015-03-31","2015-02-03","2015-01-01","2014-11-12","2014-10-16","2014-09-07","2014-08-11","2014-07-03","2014-06-12"],"name":"P90X2 - Base and Back","description":""},"P90X2 - Chest Back Balance":{"attributes":{"lower":false,"core":true,"back":true,"upper":false,"cardio":false,"martial":false,"other":false},"datesDone":[],"name":"P90X2 - Chest Back Balance","description":""},"P90X2 - P.A.P. Lower":{"attributes":{"lower":true,"core":false,"back":false,"upper":false,"cardio":true,"martial":false,"other":false},"datesDone":["2020-01-13","2019-07-17","2019-02-20","2018-07-12","2017-08-15","2017-05-28","2017-04-11","2017-01-17","2016-10-11","2016-06-13","2016-04-11","2016-03-01","2016-01-26","2015-12-02","2015-10-20","2015-09-17","2015-07-21","2015-06-16","2015-04-28","2015-03-12","2015-02-05","2015-01-08","2014-12-04","2014-11-03","2014-10-03","2014-08-29","2014-06-24"],"name":"P90X2 - P.A.P. Lower","description":""},"P90X2 - P.A.P. Upper":{"attributes":{"lower":false,"core":false,"back":true,"upper":true,"cardio":false,"martial":false,"other":false},"datesDone":["2019-09-25","2019-04-23","2018-02-05","2017-09-11","2017-04-17","2017-01-12","2016-12-05","2016-10-12","2016-09-20","2016-05-09","2016-04-12","2016-03-03","2016-01-28","2015-12-10","2015-10-21","2015-08-13","2015-06-23","2015-04-15","2015-03-17","2015-01-28","2014-12-15","2014-10-29","2014-10-09","2014-07-24","2014-06-18","2014-05-07"],"name":"P90X2 - P.A.P. Upper","description":""},"P90X2 - Plyocide":{"attributes":{"lower":true,"core":false,"back":true,"upper":false,"cardio":true,"martial":false,"other":false},"datesDone":["2020-03-28","2019-12-10","2019-11-18","2019-08-26","2019-04-29","2019-03-08","2018-12-03","2018-09-20","2018-06-25","2018-05-13","2018-02-17","2017-11-28","2017-10-03","2017-09-08","2017-06-09","2017-05-11","2017-04-24","2017-03-23","2017-02-01","2016-12-20","2016-10-26","2016-09-30","2016-07-24","2016-05-06","2016-04-21","2016-03-29","2016-03-10","2016-02-15","2016-01-06","2015-12-17","2015-11-25","2015-10-15","2015-09-10","2015-08-27","2015-08-11","2015-07-29","2015-06-26","2015-06-04","2015-05-20","2015-04-14","2015-03-10","2015-02-25","2015-02-09","2015-01-12","2014-12-19","2014-11-24","2014-11-14","2014-10-22","2014-10-08","2014-09-30","2014-09-16","2014-08-26","2014-08-07","2014-07-30","2014-07-15","2014-06-20","2014-05-21","2014-05-08"],"name":"P90X2 - Plyocide","description":""},"P90X2 - X2 Ab Ripper":{"attributes":{"lower":false,"core":true,"back":false,"upper":false,"cardio":false,"martial":false,"other":false},"datesDone":["2020-01-15","2019-10-23","2019-08-19","2019-07-12","2019-06-30","2019-05-05","2019-04-10","2018-10-13","2018-08-09","2018-07-07","2018-03-15","2017-11-07","2017-09-12","2017-07-18","2017-04-20","2016-12-06","2016-05-15","2016-04-22","2016-03-04","2016-01-29","2015-12-18","2015-11-05","2015-08-28","2015-07-10","2015-05-14","2015-05-09","2015-04-12","2015-03-29","2015-02-08","2015-01-05","2014-11-15","2014-10-20","2014-09-25","2014-09-14","2014-09-07","2014-08-11","2014-07-28","2014-06-23","2014-06-08","2014-05-20"],"name":"P90X2 - X2 Ab Ripper","description":""},"P90X2 - X2 Balance and Power":{"attributes":{"lower":true,"core":true,"back":true,"upper":true,"cardio":false,"martial":false,"other":false},"datesDone":["2020-03-19","2019-09-16","2019-04-05","2018-11-18","2018-07-17","2018-05-31","2017-11-29","2017-09-21","2017-05-25","2017-02-21","2016-12-01","2016-08-31","2016-05-03","2016-03-25","2016-02-25","2016-01-19","2015-12-07","2015-10-27","2015-08-18","2015-07-07","2015-06-09","2015-04-08","2015-02-16","2015-01-19","2014-11-17","2014-10-06","2014-09-02","2014-07-17","2014-06-09"],"name":"P90X2 - X2 Balance and Power","description":""},"P90X2 - X2 Core":{"attributes":{"lower":false,"core":true,"back":false,"upper":true,"cardio":false,"martial":false,"other":false},"datesDone":["2020-01-09","2019-11-14","2019-06-25","2019-03-23","2018-11-30","2018-09-19","2018-06-11","2018-02-19","2017-10-05","2017-06-08","2017-04-23","2017-01-31","2016-11-03","2016-07-31","2016-05-05","2016-03-30","2016-03-14","2016-02-02","2016-01-14","2015-12-22","2015-11-24","2015-10-19","2015-09-09","2015-08-20","2015-07-30","2015-07-02","2015-06-02","2015-05-12","2015-03-27","2015-03-02","2015-02-02","2015-01-13","2014-12-18","2014-11-29","2014-11-11","2014-11-05","2014-10-23","2014-10-15","2014-09-28","2014-09-15","2014-08-27","2014-08-17","2014-08-06","2014-07-21","2014-07-02","2014-06-13","2014-06-06","2014-05-23","2014-05-06"],"name":"P90X2 - X2 Core","description":""},"P90X2 - X2 Recovery + Mobility/Foam Rolling Sessio":{"attributes":{"lower":false,"core":false,"back":false,"upper":false,"cardio":false,"martial":false,"other":true},"datesDone":["2020-04-02","2020-01-08","2019-12-11","2019-11-13","2019-08-28","2019-08-16","2019-06-12","2019-03-28","2019-03-05","2019-02-21","2018-11-01","2018-09-10","2018-07-28","2018-07-26","2018-02-20","2018-02-14","2018-02-04","2018-01-11","2018-01-07","2018-01-02","2017-12-18","2017-10-13","2017-10-07","2017-10-04","2017-09-13","2017-08-09","2017-08-01","2017-07-17","2017-07-14","2017-07-10","2017-07-05","2017-06-27","2017-06-16","2017-06-06","2017-06-01","2017-05-23","2017-05-17","2017-05-07","2017-04-28","2017-04-22","2017-04-16","2017-04-03","2017-03-18","2017-02-18","2017-02-04","2017-01-28","2016-12-12","2016-11-01","2016-10-17","2016-10-11","2016-09-23","2016-08-21","2016-06-16","2016-06-05"],"name":"P90X2 - X2 Recovery + Mobility/Foam Rolling Sessio","description":""},"P90X2 - X2 Shoulders and Arms":{"attributes":{"lower":false,"core":false,"back":false,"upper":true,"cardio":false,"martial":false,"other":false},"datesDone":["2018-03-20"],"name":"P90X2 - X2 Shoulders and Arms","description":""},"P90X2 - X2 Total Body":{"attributes":{"lower":false,"core":true,"back":true,"upper":true,"cardio":false,"martial":false,"other":false},"datesDone":["2019-12-02","2019-08-13","2019-03-20","2018-05-15","2017-11-15","2017-09-06","2017-07-13","2017-05-09","2017-01-19","2016-10-03","2016-07-05","2016-04-20","2016-03-16","2016-02-11","2016-01-04","2015-12-03","2015-09-16","2015-07-28","2015-06-18","2015-04-23","2015-03-11","2015-01-06","2014-12-01","2014-10-20","2014-09-17","2014-08-04","2014-07-08","2014-05-27"],"name":"P90X2 - X2 Total Body","description":""},"P90X2 - X2 Yoga":{"attributes":{"lower":false,"core":false,"back":false,"upper":false,"cardio":false,"martial":false,"other":true},"datesDone":["2020-03-17","2020-01-14","2019-11-11","2019-10-01","2019-09-14","2019-08-11","2019-07-09","2019-06-16","2019-04-12","2019-04-02","2019-03-05","2019-01-18","2019-01-06","2018-11-20","2018-11-03","2018-09-12","2018-08-18","2018-06-01","2018-03-27","2018-01-15","2017-12-08","2017-11-08","2017-10-17","2017-09-23","2017-08-29","2017-07-18","2017-07-01","2017-05-21","2017-04-15","2017-04-08","2017-03-14","2017-01-18","2017-01-09","2016-12-14","2016-11-16","2016-10-31","2016-09-28","2016-09-08","2016-08-16","2016-08-07","2016-07-12","2016-06-20","2016-05-11","2016-04-19","2016-04-07","2016-03-28","2016-03-08","2016-02-23","2016-02-16","2016-02-01","2016-01-11","2016-01-05","2015-12-14","2015-11-30","2015-10-22","2015-09-08","2015-08-17","2015-08-06","2015-07-05","2015-05-30","2015-05-17","2015-04-19","2015-03-18","2015-03-03","2015-02-24","2015-02-06","2015-01-15","2014-12-29","2014-12-11","2014-12-10","2014-12-03","2014-11-22","2014-11-16","2014-11-11","2014-11-02","2014-10-24","2014-09-25","2014-08-24","2014-07-29","2014-06-29","2014-06-12","2014-05-30","2014-05-20"],"name":"P90X2 - X2 Yoga","description":""},"Long Run + Roll":{"attributes":{"lower":true,"core":false,"back":true,"upper":false,"cardio":true,"martial":true,"other":false},"datesDone":["2020-03-15","2019-12-14","2019-11-28","2019-11-06","2019-10-23","2019-10-16","2019-09-29","2019-09-21","2019-09-02","2019-08-21","2019-07-28","2019-07-19","2019-07-13","2019-06-03","2019-04-24","2019-03-30","2019-02-23","2019-01-22","2019-01-17","2018-12-19","2018-12-12","2018-12-01","2018-11-22","2018-10-21","2018-10-14","2018-10-08","2018-09-27","2018-09-23","2018-09-11","2018-09-04","2018-08-01","2018-07-16","2018-07-08","2018-06-18","2018-02-20","2018-02-03","2018-01-13","2017-12-15","2017-11-24","2017-11-12","2017-11-06","2017-10-06","2017-09-12","2017-08-26","2017-08-18","2017-08-01","2017-07-22","2017-07-04","2017-06-26","2017-06-18","2016-07-04","2016-01-31","2015-07-04","2015-05-03","2015-04-11","2014-11-06","2014-07-12","2014-06-27","2014-06-04","2014-05-05"],"name":"Long Run + Roll","description":""},"Short Run + Roll":{"attributes":{"lower":true,"core":false,"back":true,"upper":false,"cardio":true,"martial":false,"other":false},"datesDone":["2019-07-11","2019-06-12","2019-03-22","2019-02-18","2019-02-13","2019-01-30","2019-01-14","2018-06-28","2015-07-01","2015-03-22","2015-01-30","2015-01-22","2014-12-25","2014-11-27","2014-10-25","2014-10-18","2014-10-11","2014-09-20","2014-08-19","2014-08-12","2014-08-10","2014-08-02","2014-07-24","2014-07-21","2014-07-19","2014-07-16","2014-07-07","2014-07-04","2014-06-30","2014-06-24","2014-06-22","2014-06-21","2014-06-18","2014-06-14","2014-06-13","2014-06-09","2014-06-07","2014-06-03","2014-05-31","2014-05-30","2014-05-29","2014-05-27","2014-05-24","2014-05-23","2014-05-12"],"name":"Short Run + Roll","description":""},"Tai Chi":{"attributes":{"lower":false,"core":false,"back":false,"upper":false,"cardio":false,"martial":false,"other":true},"datesDone":["2020-04-08","2020-04-07","2020-04-04","2020-04-03","2020-04-02","2020-04-01","2020-03-31","2020-03-30","2020-03-29","2020-03-28","2020-03-27","2020-03-26","2020-03-25","2020-03-24","2020-03-23","2020-03-22","2020-03-21","2020-03-19","2020-03-18","2020-03-15","2020-03-14","2020-03-12","2020-02-19","2020-02-18","2020-02-17","2020-02-16","2020-02-14","2020-02-13","2020-02-03","2020-01-21","2020-01-20","2020-01-16","2020-01-15","2020-01-13","2020-01-11","2020-01-10","2020-01-09","2020-01-08","2020-01-07","2019-12-17","2019-12-14","2019-12-13","2019-12-12","2019-12-11","2019-12-10","2019-12-09","2019-12-08","2019-12-07","2019-12-06","2019-12-05","2019-12-04","2019-12-03","2019-12-02","2019-12-01","2019-11-30","2019-11-29","2019-11-28","2019-11-27","2019-11-26","2019-11-25","2019-11-24","2019-11-23","2019-11-22","2019-11-21","2019-11-20","2019-11-19","2019-11-18","2019-11-17","2019-11-15","2019-11-14","2019-11-13","2019-11-12","2019-11-11","2019-11-10","2019-11-09","2019-11-07","2019-11-06","2019-11-05","2019-10-28","2019-10-27","2019-10-25","2019-10-22","2019-10-21","2019-10-16","2019-10-15","2019-10-14","2019-10-13","2019-10-12","2019-10-10","2019-10-09","2019-10-08","2019-10-07","2019-10-06","2019-10-05","2019-10-04","2019-10-03","2019-10-02","2019-10-01","2019-09-29","2019-09-28","2019-09-27","2019-09-26","2019-09-25","2019-09-20","2019-09-18","2019-09-17","2019-09-16","2019-09-15","2019-09-14","2019-09-12","2019-09-11","2019-09-10","2019-09-08","2019-09-07","2019-09-06","2019-09-05","2019-09-01","2019-08-31","2019-08-26","2019-08-23","2019-08-22","2019-08-21","2019-08-20","2019-08-19","2019-08-18","2019-08-17","2019-08-16","2019-08-15","2019-08-14","2019-08-12","2019-08-10","2019-08-09","2019-08-07","2019-08-06","2019-08-05","2019-08-03","2019-07-31","2019-07-30","2019-07-29","2019-07-28","2019-07-27","2019-07-26","2019-07-25","2019-07-24","2019-07-23","2019-07-22","2019-07-21","2019-07-20","2019-07-19","2019-07-18","2019-07-17","2019-07-16","2019-07-15","2019-07-14","2019-07-13","2019-07-12","2019-07-11","2019-07-09","2019-07-08","2019-07-01","2019-06-30","2019-06-29","2019-06-27","2019-06-26","2019-06-25","2019-06-24","2019-06-23","2019-06-22","2019-06-21","2019-06-20","2019-06-19","2019-06-17","2019-06-14","2019-06-13","2019-06-10","2019-06-09","2019-06-07","2019-06-06","2019-06-05","2019-06-04","2019-06-03","2019-05-08","2019-05-07","2019-05-06","2019-05-05","2019-05-04","2019-05-03","2019-04-29","2019-04-28","2019-04-25","2019-04-23","2019-04-20","2019-04-19","2019-04-18","2019-04-17","2019-04-16","2019-04-15","2019-04-10","2019-04-09","2019-04-08","2019-04-07","2019-04-05","2019-04-04","2019-04-03","2019-04-01","2019-03-30","2019-03-29","2019-03-28","2019-03-27","2019-03-26","2019-03-25","2019-03-23","2019-03-21","2019-03-20","2019-03-19","2019-03-18","2019-03-15","2019-03-14","2019-03-13","2019-03-12","2019-03-11","2019-03-08","2019-03-07","2019-03-04","2019-03-01","2019-02-28","2019-02-27","2019-02-26","2019-02-25","2019-02-24","2019-02-20","2019-02-19","2019-02-17","2019-02-16","2019-02-15","2019-02-14","2019-02-13","2019-02-12","2019-01-25","2019-01-22","2019-01-21","2019-01-18","2019-01-02","2018-12-28","2018-12-21","2018-12-20","2018-12-19","2018-12-09","2018-12-07","2018-12-06","2018-12-05","2018-12-04","2018-12-03","2018-11-30","2018-11-29","2018-11-28","2018-11-27","2018-11-26","2018-11-25","2018-11-19","2018-11-18","2018-11-14","2018-11-13","2018-11-12","2018-11-09","2018-11-08","2018-11-07","2018-11-06","2018-11-05","2018-11-02","2018-11-01","2018-10-31","2018-10-30","2018-10-29","2018-10-26","2018-10-22","2018-10-17","2018-10-15","2018-10-12","2018-10-11","2018-10-10","2018-10-09","2018-10-08","2018-10-04","2018-09-27","2018-09-23","2018-09-20","2018-09-19","2018-09-18","2018-09-14","2018-09-13","2018-09-10","2018-09-05","2018-08-19","2018-08-09","2018-08-04","2018-08-03","2018-07-31","2018-07-30","2018-07-28","2018-07-27","2018-07-26","2018-07-25","2018-07-24","2018-07-23","2018-07-19","2018-07-18","2018-07-17","2018-07-16","2018-07-13","2018-07-12","2018-07-06","2018-06-29","2018-06-10","2018-05-22","2018-05-20","2018-05-16","2018-05-15","2018-05-13","2018-05-10","2018-05-09","2018-04-30","2018-04-27","2018-04-26","2018-04-21","2018-04-19","2018-04-16","2018-04-10","2018-04-06","2018-04-04","2018-04-03","2018-03-28","2018-03-27","2018-03-26","2018-03-20","2018-03-19","2018-03-16","2018-03-15","2018-03-14","2018-03-09","2018-02-20","2018-02-19","2018-02-18","2018-02-17","2018-02-16","2018-02-15","2018-02-14","2018-02-13","2018-02-09","2018-02-08","2018-02-07","2018-02-06","2018-02-05","2018-02-03","2018-02-02","2018-02-01","2018-01-31","2018-01-30","2018-01-29","2018-01-28","2018-01-27","2018-01-25","2018-01-24","2018-01-18","2018-01-17","2018-01-16","2018-01-14","2018-01-13","2018-01-12","2018-01-11","2018-01-10","2018-01-08","2018-01-07","2018-01-06","2018-01-05","2018-01-04","2018-01-03","2018-01-02","2018-01-01","2017-12-31","2017-12-30","2017-12-29","2017-12-28","2017-12-27","2017-12-21","2017-12-20","2017-12-19","2017-12-18","2017-12-17","2017-12-15","2017-12-14","2017-12-12","2017-12-11","2017-12-10","2017-12-09","2017-12-08","2017-12-06","2017-12-05","2017-12-04","2017-12-03","2017-12-01","2017-11-29","2017-11-28","2017-11-20","2017-11-18","2017-11-17","2017-11-16","2017-11-15","2017-11-14","2017-11-13","2017-11-12","2017-11-11","2017-11-10","2017-11-09","2017-11-08","2017-11-07","2017-11-06","2017-11-01","2017-10-31","2017-10-30","2017-10-26","2017-10-25","2017-10-24","2017-10-20","2017-10-19","2017-10-18","2017-10-17","2017-10-16","2017-10-14","2017-10-13","2017-10-12","2017-10-11","2017-10-10","2017-10-09","2017-10-08","2017-10-07","2017-10-05","2017-10-04","2017-10-03","2017-10-02","2017-09-30","2017-09-29","2017-09-28","2017-09-27","2017-09-26","2017-09-25","2017-09-23","2017-09-22","2017-09-21","2017-09-20","2017-09-19","2017-09-18","2017-09-17","2017-09-16","2017-09-15","2017-09-14","2017-09-13","2017-09-12","2017-09-11","2017-09-10","2017-09-09","2017-09-08","2017-09-07","2017-09-06","2017-09-05","2017-09-02","2017-08-31","2017-08-30","2017-08-29","2017-08-28","2017-08-27","2017-08-26","2017-08-25","2017-08-24","2017-08-23","2017-08-22","2017-08-21","2017-08-20","2017-08-18","2017-08-17","2017-08-16","2017-08-15","2017-08-14","2017-08-13","2017-08-09","2017-08-08","2017-08-07","2017-08-06","2017-08-05","2017-08-04","2017-08-03","2017-08-02","2017-08-01","2017-07-31","2017-07-24","2017-07-23","2017-07-22","2017-07-21","2017-07-20","2017-07-19","2017-07-18","2017-07-17","2017-07-16","2017-07-15","2017-07-14","2017-07-13","2017-07-12","2017-07-11","2017-07-10","2017-07-09","2017-07-07","2017-07-06","2017-07-05","2017-07-03","2017-07-02","2017-07-01","2017-06-30","2017-06-29","2017-06-28","2017-06-27","2017-06-25","2017-06-24","2017-06-23","2017-06-22","2017-06-21","2017-06-20","2017-06-19","2017-06-18","2017-06-17","2017-06-16","2017-06-15","2017-06-14","2017-06-12","2017-06-11","2017-06-10","2017-06-09","2017-06-08","2017-06-07","2017-06-06","2017-06-03","2017-06-02","2017-06-01","2017-05-31","2017-05-29","2017-05-28","2017-05-27","2017-05-26","2017-05-24","2017-05-22","2017-05-20","2017-05-19","2017-05-18","2017-05-17","2017-05-16","2017-05-15","2017-05-14","2017-05-13","2017-05-12","2017-05-11","2017-05-10","2017-05-09","2017-05-08","2017-05-05","2017-05-03","2017-05-02","2017-05-01","2017-04-30","2017-04-29","2017-04-28","2017-04-27","2017-04-26","2017-04-25","2017-04-24","2017-04-23","2017-04-22","2017-04-21","2017-04-20","2017-04-19","2017-04-18","2017-04-17","2017-04-16","2017-04-14","2017-04-13","2017-04-12","2017-04-11","2017-04-10","2017-04-09","2017-04-08","2017-04-07","2017-04-06","2017-04-05","2017-04-04","2017-04-03","2017-03-31","2017-03-30","2017-03-28","2017-03-27","2017-03-24","2017-03-23","2017-03-22","2017-03-21","2017-03-20","2017-03-19","2017-03-18","2017-03-17","2017-03-16","2017-03-15","2017-03-14","2017-02-23","2017-02-21","2017-02-20","2017-02-16","2017-02-14","2017-02-09","2017-02-07","2017-02-02","2017-02-01","2017-01-27","2017-01-19","2017-01-17","2017-01-16","2017-01-12","2017-01-10","2017-01-04","2016-12-20","2016-12-12","2016-12-08","2016-12-06","2016-11-29","2016-11-15","2016-11-14","2016-11-10","2016-11-08","2016-11-07","2016-11-04","2016-11-01","2016-10-26","2016-10-25","2016-10-24","2016-10-21","2016-10-20","2016-10-19","2016-10-17","2016-10-14","2016-10-13","2016-10-12","2016-10-11","2016-10-07","2016-10-06","2016-10-05","2016-10-04","2016-10-03","2016-09-30","2016-09-29","2016-09-27","2016-09-26","2016-09-23","2016-09-22","2016-09-21","2016-09-20","2016-09-14","2016-09-13","2016-09-12","2016-09-09","2016-09-06","2016-09-05","2016-09-01","2016-08-30","2016-08-29","2016-08-26","2016-08-25","2016-08-23","2016-08-15","2016-08-05","2016-08-04","2016-08-03","2016-08-02","2016-08-01","2016-07-29","2016-07-28","2016-07-27","2016-07-26","2016-07-25","2016-07-24","2016-07-22","2016-07-21","2016-07-20","2016-07-19","2016-07-18","2016-07-15","2016-07-14","2016-07-13","2016-07-11","2016-07-05","2016-07-01","2016-06-30","2016-06-29","2016-06-28","2016-06-24","2016-06-23","2016-06-22","2016-06-21","2016-06-17","2016-06-16","2016-06-15","2016-06-14","2016-06-13","2016-06-10","2016-06-09","2016-06-08","2016-06-07","2016-06-03","2016-06-02","2016-05-31","2016-05-24","2016-05-22","2016-05-21","2016-05-17","2016-05-16","2016-05-15","2016-05-13","2016-05-12","2016-05-10","2016-05-09","2016-05-08","2016-05-05","2016-05-04","2016-05-03","2016-04-29","2016-04-22","2016-04-15","2016-04-13","2016-04-09","2016-03-25","2016-03-18","2016-03-16","2016-03-11","2016-03-07","2016-03-04","2016-02-26","2016-02-19","2016-02-12","2016-02-10","2016-02-05","2016-01-29","2016-01-20","2016-01-15","2016-01-14","2016-01-06","2016-01-02","2015-12-28","2015-12-18","2015-12-17","2015-12-16","2015-12-15","2015-12-11","2015-12-07","2015-12-04","2015-11-29","2015-11-05","2015-11-04","2015-11-02","2015-10-31","2015-10-24","2015-10-21","2015-10-20","2015-10-19","2015-10-15","2015-10-14","2015-10-13","2015-10-12","2015-10-06","2015-10-05","2015-10-02","2015-10-01","2015-09-30","2015-09-27","2015-09-25","2015-09-18","2015-09-15","2015-09-14","2015-09-10","2015-09-09","2015-08-28","2015-08-21","2015-08-13","2015-08-11","2015-08-05","2015-07-30","2015-07-24","2015-07-22","2015-07-13","2015-07-07","2015-07-03","2015-06-30","2015-06-23","2015-06-04","2015-05-29","2015-05-20","2015-05-18","2015-05-12","2015-05-06","2015-05-04","2015-04-30","2015-04-26","2015-04-17","2015-04-15","2015-04-14","2015-04-10","2015-04-08","2015-04-02","2015-03-31","2015-03-18","2015-03-10","2015-02-25","2015-02-03","2015-01-29","2015-01-28","2015-01-21","2015-01-19","2015-01-15","2015-01-08","2014-12-27","2014-12-23","2014-12-16","2014-12-15","2014-12-09","2014-12-04","2014-12-01","2014-11-30","2014-11-25","2014-11-24","2014-11-20","2014-11-19","2014-11-18","2014-11-17","2014-11-14","2014-11-13","2014-11-12","2014-11-11","2014-11-10","2014-11-05","2014-11-03","2014-10-31","2014-10-30","2014-10-29","2014-10-28","2014-10-27","2014-10-24","2014-10-23","2014-10-22","2014-10-21","2014-10-20","2014-10-17","2014-10-16","2014-10-15","2014-10-14","2014-10-09","2014-10-08","2014-10-06","2014-10-03","2014-10-02","2014-10-01","2014-09-30","2014-09-25","2014-09-24","2014-09-22","2014-09-19","2014-09-18","2014-09-17","2014-09-16","2014-09-09","2014-09-08","2014-09-05","2014-09-03","2014-08-29","2014-08-27","2014-08-26","2014-08-11","2014-08-07","2014-08-06","2014-08-04","2014-08-03","2014-08-01","2014-07-30","2014-07-26","2014-07-23","2014-07-20","2014-07-18","2014-07-16","2014-07-15","2014-07-09","2014-07-07","2014-07-03","2014-07-02","2014-06-27","2014-06-25","2014-06-23","2014-06-22","2014-06-20","2014-06-18","2014-06-11","2014-06-04","2014-05-28","2014-05-21","2014-05-14","2014-05-07"],"name":"Tai Chi","description":""},"Brazilian Jiu Jitsu":{"attributes":{"lower":false,"core":false,"back":false,"upper":false,"cardio":false,"martial":true,"other":false},"datesDone":["2019-01-02","2018-12-21","2018-12-07","2018-12-05","2018-11-30","2018-11-19","2018-11-15","2018-11-14","2018-11-09","2018-11-07","2018-10-27","2018-10-18","2018-10-17","2018-10-12","2018-10-10","2018-10-05","2018-09-25","2018-09-21","2018-09-17","2018-08-10","2018-08-03","2018-07-27","2018-07-20","2018-07-06","2018-02-13","2017-12-08","2017-12-01","2017-11-28","2017-11-20","2017-11-09","2017-11-07","2017-11-01","2017-10-24","2017-10-20","2017-10-18","2017-10-12","2017-10-11","2017-10-06","2017-09-06","2017-08-23","2017-08-21","2017-08-18","2017-08-14","2017-08-07","2017-08-04","2017-06-16","2017-06-14","2017-06-09","2017-06-07","2017-06-02","2017-05-26","2017-05-24","2017-05-22","2017-05-19","2017-05-17","2017-05-12","2017-05-10","2017-05-05","2017-05-01","2017-04-12","2017-04-10","2017-04-07","2017-04-05","2017-04-01","2017-03-31","2017-03-22","2017-03-20","2017-03-17","2017-03-15","2017-02-24","2017-02-22","2017-02-17","2017-02-08","2017-02-03","2017-01-27","2017-01-25","2017-01-18","2017-01-16","2016-12-22","2016-12-19","2016-12-16","2016-12-13","2016-11-28","2016-11-11","2016-10-24","2016-05-02","2016-04-29","2016-04-25","2016-04-22","2016-04-18","2016-04-15","2016-03-28","2016-03-11","2016-03-09","2016-03-04","2016-03-02","2016-02-29","2016-02-24","2016-02-22","2016-02-19","2016-02-17","2016-02-12","2016-02-05","2016-02-03","2016-02-01","2016-01-30","2016-01-25","2016-01-18","2016-01-15","2016-01-04","2015-12-30","2015-12-21","2015-12-18","2015-12-11","2015-12-09","2015-12-04","2015-11-30","2015-09-21","2015-09-18","2015-09-14","2015-08-31","2015-08-28","2015-08-26","2015-08-19","2015-08-17","2015-08-14","2015-08-12","2015-08-10","2015-08-07","2015-08-05","2015-07-29","2015-07-27","2015-07-20","2015-07-13","2015-07-10","2015-07-08","2015-07-06","2015-07-03","2015-07-01","2015-06-29","2015-06-25","2015-06-22","2015-06-19","2015-06-17","2015-06-15","2015-06-08","2015-06-05","2015-06-03","2015-06-01","2015-05-28","2015-05-21","2015-05-19","2015-05-15","2015-05-13","2015-05-11","2015-05-07","2015-05-05","2015-05-01","2015-04-29","2015-04-27","2015-04-24","2015-04-22","2015-04-20","2015-04-16","2015-04-13","2015-04-09","2015-04-07","2015-04-03","2015-04-01","2015-03-30","2015-03-25","2015-03-19","2015-02-19","2015-02-17","2015-02-13","2015-02-10","2015-02-06","2015-02-04","2015-01-30","2015-01-27","2015-01-22","2015-01-20","2015-01-16","2015-01-14","2015-01-09","2015-01-07","2014-12-23","2014-12-16","2014-12-02","2014-11-24","2014-11-18","2014-11-13","2014-11-05","2014-10-30","2014-10-23","2014-09-29","2014-09-17","2014-09-10","2014-09-04"],"name":"Brazilian Jiu Jitsu","description":""},"r/BodyWeightFitness Recommended Routine":{"attributes":{"lower":false,"core":true,"back":false,"upper":true,"cardio":false,"martial":false,"other":false},"datesDone":["2018-07-09","2018-05-25","2018-03-28","2018-02-08","2017-11-09","2017-10-08","2017-09-03","2017-08-17","2017-07-09","2017-05-27","2017-04-26","2017-04-09","2017-03-27","2017-02-28","2017-02-03","2016-12-21","2016-11-17","2016-10-27","2016-09-29","2016-08-28","2016-08-06","2016-07-17","2016-06-24","2016-05-31","2016-04-30","2016-04-14","2016-03-31","2016-03-18","2016-03-05"],"name":"r/BodyWeightFitness Recommended Routine","description":""},"RushFit - Fight Conditioning":{"attributes":{"lower":true,"core":true,"back":false,"upper":false,"cardio":true,"martial":true,"other":false},"datesDone":["2020-03-30","2020-03-13","2019-12-06","2019-11-21","2019-10-21","2019-09-27","2019-08-17","2019-07-24","2019-06-23","2019-04-08","2019-03-04","2019-01-19","2018-12-20","2018-11-26","2018-10-30","2018-09-14","2018-06-27","2018-05-30","2018-04-28","2018-04-05","2018-02-06","2018-01-09","2017-12-07","2017-10-31","2017-09-27","2017-09-05","2017-07-26","2017-07-07","2017-05-24","2017-04-21","2017-03-16","2017-02-02","2017-01-11","2016-12-13","2016-11-15","2016-10-19","2016-10-04","2016-09-19","2016-09-06","2016-08-25","2016-07-27","2016-07-21","2016-07-11","2016-07-06","2016-06-29","2016-06-23","2016-06-17","2016-06-14","2016-06-07","2016-06-03","2016-05-30","2016-05-24","2016-05-13","2016-05-10","2016-05-07"],"name":"RushFit - Fight Conditioning","description":""},"RushFit - Strength and Endurance":{"attributes":{"lower":true,"core":true,"back":true,"upper":true,"cardio":false,"martial":false,"other":false},"datesDone":["2020-03-23","2019-11-09","2019-07-31","2019-04-17","2019-03-11","2018-12-18","2018-10-31","2018-08-14","2018-06-30","2018-05-21","2018-04-16","2018-02-13","2017-11-20","2017-10-11","2017-09-15","2017-08-07","2017-06-15","2017-05-19","2017-04-12","2017-02-23","2017-01-25","2016-12-12","2016-11-14","2016-10-17","2016-09-23","2016-09-05","2016-08-05","2016-07-20","2016-06-15","2016-06-10","2016-05-25","2016-05-17"],"name":"RushFit - Strength and Endurance","description":""},"RushFit - Full Body Strength and Conditioning":{"attributes":{"lower":true,"core":true,"back":true,"upper":true,"cardio":false,"martial":false,"other":false},"datesDone":["2020-04-06","2019-12-11","2019-09-04","2019-06-11","2019-03-26","2018-12-30","2018-09-21","2018-07-26","2018-06-19","2018-04-30","2017-12-11","2017-11-01","2017-09-29","2017-08-30","2017-07-19","2017-06-05","2017-05-03","2017-04-05","2017-02-10","2017-01-02","2016-11-22","2016-10-20","2016-10-05","2016-09-14","2016-08-26","2016-07-28","2016-07-13","2016-06-30","2016-06-06","2016-05-19"],"name":"RushFit - Full Body Strength and Conditioning","description":""},"RushFit - Explosive Powertraining":{"attributes":{"lower":true,"core":true,"back":true,"upper":true,"cardio":false,"martial":false,"other":false},"datesDone":["2019-11-26","2019-09-10","2019-07-01","2019-04-09","2019-03-06","2018-12-04","2018-10-16","2018-09-07","2018-07-13","2018-06-12","2018-05-10","2018-01-10","2017-11-17","2017-10-23","2017-09-18","2017-08-14","2017-07-06","2017-05-22","2017-04-20","2017-03-15","2017-02-15","2017-01-16","2016-11-29","2016-11-02","2016-10-14","2016-09-21","2016-08-29","2016-08-01","2016-07-15","2016-07-01","2016-06-21","2016-06-08","2016-05-23"],"name":"RushFit - Explosive Powertraining","description":""},"Rushfit - Balance and Agility":{"attributes":{"lower":true,"core":false,"back":false,"upper":true,"cardio":true,"martial":false,"other":false},"datesDone":["2019-12-17","2019-09-26","2019-06-20","2019-03-14","2019-01-07","2018-11-21","2018-10-12","2018-09-25","2018-07-05","2018-05-16","2018-04-13","2018-01-31","2017-12-29","2017-11-05","2017-09-26","2017-08-23","2017-07-16","2017-06-14","2017-05-08","2017-04-03","2017-02-08","2017-01-24","2016-12-07","2016-11-18","2016-10-28","2016-10-06","2016-09-07","2016-08-23","2016-07-18","2016-06-28","2016-06-01"],"name":"Rushfit - Balance and Agility","description":""},"Rushfit - Stretching for Flexibility":{"attributes":{"lower":false,"core":false,"back":false,"upper":false,"cardio":false,"martial":false,"other":true},"datesDone":["2020-04-05","2020-03-29","2020-02-13","2020-02-03","2020-01-14","2020-01-11","2019-12-17","2019-12-08","2019-12-04","2019-12-02","2019-11-30","2019-11-24","2019-11-20","2019-11-15","2019-11-12","2019-11-06","2019-10-22","2019-10-12","2019-10-09","2019-10-07","2019-10-02","2019-09-27","2019-09-25","2019-09-15","2019-09-01","2019-08-30","2019-08-20","2019-08-15","2019-08-12","2019-08-08","2019-08-06","2019-07-30","2019-07-25","2019-07-18","2019-07-16","2019-07-14","2019-07-10","2019-07-01","2019-06-27","2019-06-25","2019-06-21","2019-06-19","2019-06-17","2019-06-10","2019-06-07","2019-06-05","2019-05-07","2019-05-05","2019-05-03","2019-04-23","2019-04-19","2019-04-15","2019-04-08","2019-04-04","2019-04-01","2019-03-11","2019-03-07","2019-03-04","2019-01-01","2018-12-09","2018-12-05","2018-12-01","2018-11-28","2018-11-25","2018-11-19","2018-11-15","2018-11-13","2018-11-07","2018-11-01","2018-10-29","2018-10-17","2018-10-13","2018-10-04","2018-09-19","2018-09-14","2018-09-11","2018-09-07","2018-09-05","2018-08-03","2018-07-30","2018-07-23","2018-07-18","2018-07-13","2018-07-06","2018-06-29","2018-06-21","2018-05-19","2018-04-10","2018-04-04","2018-03-26","2018-03-15","2018-02-20","2018-02-18","2018-02-15","2018-02-08","2018-02-03","2018-02-01","2018-01-30","2018-01-27","2018-01-16","2018-01-13","2018-01-10","2018-01-04","2018-01-01","2017-12-31","2017-12-28","2017-12-21","2017-12-17","2017-12-10","2017-12-06","2017-11-29","2017-11-15","2017-11-13","2017-11-10","2017-10-25","2017-10-10","2017-10-05","2017-10-02","2017-09-28","2017-09-26","2017-09-21","2017-09-19","2017-09-15","2017-09-12","2017-09-10","2017-09-02","2017-08-27","2017-08-24","2017-08-17","2017-08-08","2017-08-02","2017-07-31","2017-07-24","2017-07-21","2017-07-16","2017-07-13","2017-07-07","2017-07-03","2017-06-28","2017-06-24","2017-06-20","2017-06-17","2017-06-12","2017-06-08","2017-05-31","2017-05-27","2017-05-25","2017-05-18","2017-05-15","2017-05-10","2017-05-02","2017-04-29","2017-04-26","2017-04-23","2017-04-20","2017-04-18","2017-04-13","2017-04-10","2017-04-06","2017-03-30","2017-03-28","2017-03-23","2017-03-21","2017-03-13","2017-02-28","2017-02-23","2017-02-16","2017-02-07","2017-02-02","2017-01-31","2017-01-26","2017-01-19","2017-01-14","2017-01-05","2017-01-03","2016-12-28","2016-12-20","2016-12-09","2016-12-06","2016-12-01","2016-11-29","2016-11-26","2016-11-19","2016-11-14","2016-11-08","2016-11-04","2016-10-27","2016-10-20","2016-10-15","2016-10-13","2016-10-10","2016-10-06","2016-10-04","2016-10-01","2016-09-28","2016-09-26","2016-09-21","2016-09-14","2016-09-12","2016-09-09","2016-09-06","2016-09-01","2016-08-29","2016-08-25","2016-08-22","2016-08-19","2016-08-15","2016-08-04","2016-08-02","2016-07-30","2016-07-28","2016-07-26","2016-07-20","2016-07-18","2016-07-16","2016-07-15","2016-07-13","2016-07-05","2016-06-30","2016-06-28","2016-06-23","2016-06-21","2016-06-15","2016-06-13","2016-06-09","2016-06-07","2016-06-02","2016-05-31"],"name":"Rushfit - Stretching for Flexibility","description":""},"Rushfit - Abdominal Strength and Core Conditioning":{"attributes":{"lower":false,"core":true,"back":false,"upper":false,"cardio":false,"martial":false,"other":false},"datesDone":["2020-01-21","2019-12-07","2019-11-07","2019-09-18","2019-07-29","2019-06-07","2019-03-01","2019-01-21","2018-12-07","2018-10-26","2018-09-05","2018-08-04","2018-06-06","2018-04-20","2018-01-03","2017-10-20","2017-08-24","2017-08-04","2017-06-02","2017-04-30","2017-03-30","2017-02-20","2017-01-10","2016-12-16","2016-11-08","2016-10-10","2016-09-12","2016-08-24","2016-08-03","2016-07-19","2016-06-22","2016-06-16","2016-06-02"],"name":"Rushfit - Abdominal Strength and Core Conditioning","description":""},"Wim Hof Method Week 1":{"attributes":{"lower":false,"core":false,"back":false,"upper":false,"cardio":false,"martial":false,"other":true},"datesDone":["2020-04-08","2020-04-01","2019-11-13","2019-03-25","2019-03-24","2019-01-21","2018-12-27","2018-11-19","2018-11-15","2018-11-13","2018-11-12","2018-10-17","2018-10-12","2018-10-11","2018-10-10","2018-10-08","2018-09-27","2018-09-25","2018-09-24","2018-09-23","2018-09-22","2018-09-21","2018-09-20","2018-09-19","2018-09-18","2018-09-17","2018-09-16","2018-09-14","2018-09-13","2018-09-11","2018-09-10","2018-09-09","2018-07-26","2018-07-11","2018-06-12","2018-06-11","2018-02-07","2018-01-18","2018-01-12","2018-01-11","2018-01-07","2018-01-04","2018-01-03","2018-01-02","2018-01-01","2017-12-30","2017-12-29","2017-12-28","2017-12-20","2017-12-13","2017-11-07","2017-10-26","2017-10-25","2017-10-14","2017-10-12","2017-09-30","2017-09-27","2017-09-23","2017-09-18","2017-04-30","2016-11-19","2016-11-15","2016-11-14","2016-11-13","2016-11-12","2016-11-11","2016-11-09"],"name":"Wim Hof Method Week 1","description":""},"Wim Hof Method Week 2":{"attributes":{"lower":false,"core":false,"back":false,"upper":false,"cardio":false,"martial":false,"other":true},"datesDone":["2017-10-16","2017-10-10","2017-09-28","2017-09-22","2017-09-19","2016-12-01","2016-11-30","2016-11-26","2016-11-23","2016-11-22","2016-11-21"],"name":"Wim Hof Method Week 2","description":""},"Wim Hof Method Week 3":{"attributes":{"lower":false,"core":false,"back":false,"upper":false,"cardio":false,"martial":false,"other":true},"datesDone":["2017-09-25","2016-12-07","2016-12-06","2016-12-05","2016-12-03"],"name":"Wim Hof Method Week 3","description":""},"Simple and Sinister":{"attributes":{"lower":true,"core":true,"back":true,"upper":true,"cardio":false,"martial":false,"other":false},"datesDone":["2020-03-31","2020-03-11","2020-02-17","2020-01-05","2019-12-13","2019-12-05","2019-11-25","2019-11-17","2019-10-22","2019-10-13","2019-10-06","2019-10-02","2019-09-20","2019-09-06","2019-08-22","2019-08-15","2019-08-05","2019-07-23","2019-07-16","2019-07-08","2019-07-02","2019-06-28","2019-06-22","2019-06-17","2019-06-14","2019-06-04","2019-04-25","2019-04-13","2019-04-06","2019-03-09","2019-02-24","2019-02-11","2019-01-29","2019-01-23","2019-01-15","2019-01-01","2018-12-27","2018-12-16","2018-12-05","2018-11-27","2018-11-19","2018-11-12","2018-11-05","2018-10-29","2018-10-24","2018-10-18","2018-10-09","2018-10-05","2018-09-17","2018-09-13","2018-09-09","2018-08-12","2018-08-06","2018-07-24","2018-07-19","2018-07-11","2018-07-03","2018-06-26","2018-06-14","2018-06-04","2018-05-29","2018-05-17","2018-05-08","2018-04-27","2018-04-24","2018-02-16","2018-02-09","2018-02-02","2018-01-28","2018-01-25","2018-01-24","2018-01-18","2018-01-12","2018-01-07","2017-12-31","2017-12-28","2017-12-25","2017-10-14"],"name":"Simple and Sinister","description":""},"Vapassana Meditation":{"attributes":{"lower":false,"core":false,"back":false,"upper":false,"cardio":false,"martial":false,"other":true},"datesDone":["2018-10-10","2018-10-09","2018-07-30","2018-07-19","2018-07-18","2018-05-13","2018-05-10","2018-02-19"],"name":"Vapassana Meditation","description":""},"Pull Ups + Burpees":{"attributes":{"lower":true,"core":false,"back":true,"upper":true,"cardio":false,"martial":false,"other":false},"datesDone":["2020-01-07","2019-12-09","2019-11-29","2019-11-05","2019-10-10","2019-09-08","2019-08-19","2019-07-12","2019-06-24","2019-06-06","2019-04-01","2019-03-19","2019-02-26","2019-02-13","2019-01-16","2018-12-21","2018-11-28","2018-11-13","2018-10-25","2018-10-11","2018-09-29","2018-09-24","2018-09-11","2018-09-04","2018-08-08","2018-08-01","2018-07-22","2018-06-28","2018-06-07","2018-04-21"],"name":"Pull Ups + Burpees","description":""},"Heavy Bag":{"attributes":{"lower":false,"core":false,"back":false,"upper":false,"cardio":true,"martial":true,"other":false},"datesDone":["2019-10-18","2019-08-03","2019-04-20","2018-12-28","2018-12-09","2018-09-06","2018-08-19","2018-07-29"],"name":"Heavy Bag","description":""},"Interval Run":{"attributes":{"lower":true,"core":false,"back":true,"upper":false,"cardio":true,"martial":false,"other":false},"datesDone":["2019-12-03","2019-09-11","2019-05-07","2019-03-27","2018-12-06","2018-11-01","2018-09-18","2018-08-13"],"name":"Interval Run","description":""},"Exercise Bike":{"attributes":{"lower":true,"core":false,"back":false,"upper":false,"cardio":true,"martial":false,"other":false},"datesDone":["2020-01-07","2019-12-09","2019-11-10","2019-10-27","2019-10-14","2019-08-18","2019-07-12","2019-06-27","2019-05-03","2019-04-15","2019-04-10","2019-04-03","2019-03-15","2019-03-07","2019-02-14","2019-01-20"],"name":"Exercise Bike","description":""},"Generic - Legs + Back":{"attributes":{"lower":true,"core":false,"back":true,"upper":true,"cardio":false,"martial":false,"other":false},"datesDone":["2020-01-11","2019-11-15","2019-03-22","2019-02-28","2019-02-25","2019-01-22","2019-01-20"],"name":"Generic - Legs + Back","description":""},"Generic - Chest + Back + Tris":{"attributes":{"lower":false,"core":false,"back":true,"upper":true,"cardio":false,"martial":false,"other":false},"datesDone":["2019-12-19","2019-10-27","2019-07-25","2019-02-19","2019-01-28"],"name":"Generic - Chest + Back + Tris","description":""},"Elliptical":{"attributes":{"lower":true,"core":true,"back":false,"upper":false,"cardio":true,"martial":false,"other":false},"datesDone":["2019-10-27","2019-08-09","2019-04-04","2019-02-16","2019-01-31"],"name":"Elliptical","description":""},"Swimming":{"attributes":{"lower":false,"core":false,"back":false,"upper":false,"cardio":false,"martial":false,"other":false},"datesDone":["2019-11-10","2019-04-26","2019-04-11"],"name":"Swimming","description":""},"Stairs":{"attributes":{"lower":true,"core":false,"back":false,"upper":false,"cardio":true,"martial":false,"other":false},"datesDone":["2019-11-15","2019-10-09"],"name":"Stairs","description":""},"P90X3 - Dynamix":{"attributes":{"lower":false,"core":false,"back":false,"upper":false,"cardio":false,"martial":false,"other":true},"datesDone":["2020-04-06","2020-03-31","2020-02-19","2020-02-12","2020-02-03","2020-02-01"],"name":"P90X3 - Dynamix","description":""},"P90X3 - Eccentric Lower":{"attributes":{"lower":true,"core":false,"back":false,"upper":false,"cardio":false,"martial":false,"other":false},"datesDone":["2020-03-14","2020-02-12","2020-02-02"],"name":"P90X3 - Eccentric Lower","description":""},"Hard Corps - Core 1":{"attributes":{"lower":false,"core":true,"back":false,"upper":false,"cardio":false,"martial":false,"other":false},"datesDone":["2020-02-03"],"name":"Hard Corps - Core 1","description":""},"P90X3 - Pilates X":{"attributes":{"lower":false,"core":true,"back":false,"upper":false,"cardio":false,"martial":false,"other":false},"datesDone":["2020-03-27","2020-02-08"],"name":"P90X3 - Pilates X","description":""},"P90X3 - Isometrix":{"attributes":{"lower":false,"core":true,"back":false,"upper":true,"cardio":false,"martial":false,"other":true},"datesDone":["2020-02-09"],"name":"P90X3 - Isometrix","description":""},"P90X3 - MMX":{"attributes":{"lower":false,"core":false,"back":false,"upper":false,"cardio":true,"martial":true,"other":false},"datesDone":["2020-03-18","2020-02-16","2020-02-10"],"name":"P90X3 - MMX","description":""},"Hard Corps - Resistance 3":{"attributes":{"lower":true,"core":true,"back":false,"upper":true,"cardio":false,"martial":false,"other":false},"datesDone":["2020-02-13"],"name":"Hard Corps - Resistance 3","description":""},"P90X3 - Eccentric Upper":{"attributes":{"lower":false,"core":false,"back":true,"upper":true,"cardio":false,"martial":false,"other":false},"datesDone":["2020-02-14"],"name":"P90X3 - Eccentric Upper","description":""},"P90X3 - Yoga":{"attributes":{"lower":false,"core":false,"back":false,"upper":false,"cardio":false,"martial":false,"other":true},"datesDone":["2020-03-12","2020-02-18"],"name":"P90X3 - Yoga","description":""},"Hard Corps - Core 2":{"attributes":{"lower":false,"core":true,"back":false,"upper":false,"cardio":false,"martial":false,"other":false},"datesDone":["2020-02-19"],"name":"Hard Corps - Core 2","description":""},"P90X3 - The Warrior":{"attributes":{"lower":true,"core":true,"back":false,"upper":true,"cardio":true,"martial":true,"other":false},"datesDone":["2020-03-21"],"name":"P90X3 - The Warrior","description":""},"P90X3 - CVX":{"attributes":{"lower":true,"core":false,"back":false,"upper":true,"cardio":true,"martial":false,"other":false},"datesDone":["2020-03-26"],"name":"P90X3 - CVX","description":""},"P90X3 - Accelerator":{"attributes":{"lower":true,"core":false,"back":false,"upper":false,"cardio":true,"martial":false,"other":false},"datesDone":["2020-04-04"],"name":"P90X3 - Accelerator","description":""}}
\ No newline at end of file