diff --git a/packages/jaeger/.editorconfig b/packages/jaeger/.editorconfig
new file mode 100644
index 00000000000..9142239769f
--- /dev/null
+++ b/packages/jaeger/.editorconfig
@@ -0,0 +1,13 @@
+# editorconfig.org
+root = true
+
+[*]
+indent_size = 2
+indent_style = space
+end_of_line = lf
+charset = utf-8
+trim_trailing_whitespace = true
+insert_final_newline = true
+
+[*.md]
+trim_trailing_whitespace = false
diff --git a/packages/jaeger/.gitignore b/packages/jaeger/.gitignore
new file mode 100644
index 00000000000..c63527f20c2
--- /dev/null
+++ b/packages/jaeger/.gitignore
@@ -0,0 +1,62 @@
+dist
+# Logs
+logs
+*.log
+npm-debug.log*
+yarn-debug.log*
+yarn-error.log*
+
+# Runtime data
+pids
+*.pid
+*.seed
+*.pid.lock
+
+# Directory for instrumented libs generated by jscoverage/JSCover
+lib-cov
+
+# Coverage directory used by tools like istanbul
+coverage
+
+# nyc test coverage
+.nyc_output
+
+# Grunt intermediate storage (http://gruntjs.com/creating-plugins#storing-task-files)
+.grunt
+
+# Bower dependency directory (https://bower.io/)
+bower_components
+
+# node-waf configuration
+.lock-wscript
+
+# Compiled binary addons (https://nodejs.org/api/addons.html)
+build/Release
+
+# Dependency directories
+node_modules/
+jspm_packages/
+
+# TypeScript v1 declaration files
+typings/
+
+# Optional npm cache directory
+.npm
+
+# Optional eslint cache
+.eslintcache
+
+# Optional REPL history
+.node_repl_history
+
+# Output of 'npm pack'
+*.tgz
+
+# Yarn Integrity file
+.yarn-integrity
+
+# dotenv environment variables file
+.env
+
+# next.js build output
+.next
diff --git a/packages/jaeger/.npmignore b/packages/jaeger/.npmignore
new file mode 100644
index 00000000000..235dbbb2f5b
--- /dev/null
+++ b/packages/jaeger/.npmignore
@@ -0,0 +1,2 @@
+src
+.editorconfig
diff --git a/packages/jaeger/LICENSE b/packages/jaeger/LICENSE
new file mode 100644
index 00000000000..cdbde67f034
--- /dev/null
+++ b/packages/jaeger/LICENSE
@@ -0,0 +1,21 @@
+MIT License
+
+Copyright (c) 2018 Joost De Cock
+
+Permission is hereby granted, free of charge, to any person obtaining a copy
+of this software and associated documentation files (the "Software"), to deal
+in the Software without restriction, including without limitation the rights
+to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+copies of the Software, and to permit persons to whom the Software is
+furnished to do so, subject to the following conditions:
+
+The above copyright notice and this permission notice shall be included in all
+copies or substantial portions of the Software.
+
+THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
+SOFTWARE.
diff --git a/packages/jaeger/README.md b/packages/jaeger/README.md
index 30dd3b94106..34cf3cce0a9 100644
--- a/packages/jaeger/README.md
+++ b/packages/jaeger/README.md
@@ -1,2 +1,20 @@
-# jaeger
-Port of the freesewing Jaeger pattern to JS
+
+
+
+ freesewing
+
a library for made-to-measure sewing patterns
+
+
+# freesewing / patterns / jaeger
+
+Jaeger is a [freesewing](https://github.com/freesewing/freesewing) pattern
+for a sport coat style jacket with two buttons and patch pockets.
+
+See [freesewing.org/patterns/jaeger](https://freesewing.org/patterns/jaeger)
+for more info and examples.
+
+## Install
+
+```
+npm i --save @freesewing/jaeger
+```
diff --git a/packages/jaeger/config/index.js b/packages/jaeger/config/index.js
new file mode 100644
index 00000000000..f13954cff47
--- /dev/null
+++ b/packages/jaeger/config/index.js
@@ -0,0 +1,156 @@
+import { version } from "../package.json";
+
+export default {
+ name: "jaeger",
+ version: version,
+ measurements: [
+ "bicepsCircumference",
+ "centerBackNeckToWaist",
+ "chestCircumference",
+ "hipsCircumference",
+ "naturalWaist",
+ "naturalWaistToHip",
+ "neckCircumference",
+ "shoulderSlope",
+ "shoulderToElbow",
+ "shoulderToShoulder",
+ "shoulderToWrist",
+ "wristCircumference"
+ ],
+ dependencies: {
+ bentBack: "bentBase",
+ bentFront: "bentBack",
+ bentTopSleeve: "bentSleeve",
+ bentUnderSleeve: "bentSleeve",
+ backBase: "bentBack",
+ frontBase: "bentFront",
+ front: "frontBase",
+ back: "backBase",
+ side: "frontBase",
+ collarstand: "front",
+ collar: "collarstand",
+ undercollar: "collarstand",
+ pocket: "frontBase",
+ chestPocketWelt: "front",
+ chestPocketBag: "front",
+ innerPocketWelt: "front",
+ innerPocketBag: "front",
+ topSleeve: "bentTopSleeve",
+ underSleeve: "bentUnderSleeve",
+ },
+ inject: {
+ bentBack: "bentBase",
+ bentFront: "bentBack",
+ bentTopSleeve: "bentSleeve",
+ bentUnderSleeve: "bentSleeve",
+ backBase: "bentBack",
+ frontBase: "bentFront",
+ front: "frontBase",
+ back: "backBase",
+ side: "frontBase",
+ collarstand: "front",
+ collar: "collarstand",
+ undercollar: "collarstand",
+ topSleeve: "bentTopSleeve",
+ underSleeve: "bentUnderSleeve",
+ },
+ hide: [
+ "bentBase",
+ "bentBack",
+ "bentFront",
+ "bentSleeve",
+ "bentTopSleeve",
+ "bentUnderSleeve",
+ "frontBase",
+ "backBase"
+ ],
+ //parts: ["hood", "waistband", "cuff"],
+ options: {
+ // Constants
+ brianFitSleeve: true,
+ brianFitCollar: true,
+ collarFactor: 4.8,
+ chestShapingMax: 5,
+
+ // Options inherited from Bent
+ acrossBackFactor: { pct: 97, min: 93, max: 100 },
+ armholeDepthFactor: { pct: 65, min: 50, max: 70 },
+ backNeckCutout: { pct: 5, min: 2, max: 8 },
+ bicepsEase: { pct: 20, min: 0, max: 50 },
+ chestEase: { pct: 8, min: -4, max: 20 },
+ collarEase: { pct: 3.5, min: 0, max: 10 },
+ cuffEase: { pct: 20, min: 0, max: 200 },
+ frontArmholeDeeper: { pct: 0.5, min: 0, max: 1.5 },
+ lengthBonus: { pct: 19, min: 0, max: 25 },
+ shoulderEase: { pct: 0, min: -2, max: 6 },
+ shoulderSlopeReduction: { pct: 0, min: 0, max: 8 },
+ sleeveBend: { deg: 10, min: 0, max: 20 },
+ sleevecapHeight: {pct: 45, min: 40, max: 60 },
+ sleevecapEase: { pct: 1, min: 0, max: 10 },
+ sleeveLengthBonus: { pct: 0, min:-40, max: 10 },
+
+ // Jaeger options
+ frontOverlap: { pct: 2, min: 1, max: 3},
+
+ sleeveVentLength: { pct: 35, min: 25, max: 55 },
+ sleeveVentWidth: { pct: 18, min: 10, max: 26 },
+
+ innerPocketPlacement: {pct: 52, min: 42, max: 62 },
+ innerPocketWidth: { pct: 50, min: 45, max: 65 },
+ innerPocketDepth: { pct: 110, min: 75, max: 140 },
+ innerPocketWeltHeight: { pct: 3.5, min: 2.5, max: 5 },
+
+
+ pocketFoldover: { pct: 25, min: 15, max: 35 },
+
+ waistEase: { pct: 10, min: 5, max: 20 },
+ hipsEase: { pct: 10, min: 5, max: 20 },
+
+ centerBackDart: { pct: 0.5, min: 0, max: 1.5 },
+
+ centerFrontHemDrop: { pct: 2, min: 0, max: 4 },
+
+ backVent: { count: 2, min: 0, max: 2 },
+ backVentLength: { pct: 35, min: 15, max: 100 },
+
+ frontCutawayAngle: {deg: 2.5, min: 1, max: 4},
+ frontCutawayStart: {pct: 30, min: 10, max: 70 },
+ frontCutawayEnd: {pct: 40, min: 10, max: 40 },
+ hemRadius: {pct: 100, min: 35, max: 100 },
+
+ chestPocketDepth: { pct: 110, min: 70, max: 150 },
+ chestPocketWidth: { pct: 37, min: 30, max: 45 },
+ chestPocketPlacement: {pct: 52, min: 55, max: 65 },
+ chestPocketAngle: { deg: 2.5, min: 0, max: 5 },
+ chestPocketWeltSize: { pct: 17.5, min: 10, max: 25 },
+
+ frontPocketPlacement: { pct: 75, min: 65, max: 85 },
+ frontPocketWidth: { pct: 68, min: 55, max: 75 },
+ frontPocketDepth: { pct: 110, min: 80, max: 130 },
+
+ lapelStart: { pct: 35, min: 25, max: 45 },
+ lapelReduction: { pct: 5, min: 0, max: 10 },
+ collarBend: { deg: 5, min: 0, max: 10 },
+ collarSpread: { deg: 13, min: 5, max: 25 },
+ collarHeight: { pct: 9, min: 7, max: 12 },
+ collarNotchDepth: { pct: 15, min: 15, max: 50 },
+ collarNotchAngle: { deg: 45, min: 30, max: 60 },
+ collarNotchReturn: { pct: 100, min: 50, max: 100 },
+ collarRoll: {mm: 2.5, min: 0, max: 5 },
+
+ waistReductionRatioBack: { pct: 15, min: 0, max: 25 },
+ waistReductionRatioFront: { pct: 15, min: 10, max: 20 },
+ hipsReductionRatioBack: { pct: 25, min: 20, max: 30 },
+ hipsReductionRatioFront: { pct: 25, min: 20, max: 30 },
+ frontDartPlacement: { pct: 55, min: 45, max: 60 },
+ sideFrontPlacement: { pct: 90, min: 80, max: 100 },
+
+
+ chestShaping: { pct: 30, min: 0, max: 100 },
+ rollLineCollarHeight: { pct: 6, min: 5, max: 9 },
+ shoulderSlopeReduction: { pct: 2, min: 0, max: 5 },
+
+ lapelBreak: { pct: 10, min: 0, max: 25 },
+ buttonLength: { pct: 30, min: 30, max: 60 },
+ }
+};
diff --git a/packages/jaeger/index.html b/packages/jaeger/index.html
new file mode 100644
index 00000000000..3c698dd2e56
--- /dev/null
+++ b/packages/jaeger/index.html
@@ -0,0 +1,85 @@
+
+
+
+
+ Jaeger
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/packages/jaeger/package-lock.json b/packages/jaeger/package-lock.json
new file mode 100644
index 00000000000..daad0140c46
--- /dev/null
+++ b/packages/jaeger/package-lock.json
@@ -0,0 +1,3749 @@
+{
+ "name": "@freesewing/jaeger",
+ "version": "0.0.1",
+ "lockfileVersion": 1,
+ "requires": true,
+ "dependencies": {
+ "@babel/code-frame": {
+ "version": "7.0.0",
+ "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.0.0.tgz",
+ "integrity": "sha512-OfC2uemaknXr87bdLUkWog7nYuliM9Ij5HUcajsVcMCpQrcLmtxRbVFTIqmcSkSeYRBFBRxs2FiUqFJDLdiebA==",
+ "dev": true,
+ "requires": {
+ "@babel/highlight": "^7.0.0"
+ }
+ },
+ "@babel/core": {
+ "version": "7.3.4",
+ "resolved": "https://registry.npmjs.org/@babel/core/-/core-7.3.4.tgz",
+ "integrity": "sha512-jRsuseXBo9pN197KnDwhhaaBzyZr2oIcLHHTt2oDdQrej5Qp57dCCJafWx5ivU8/alEYDpssYqv1MUqcxwQlrA==",
+ "dev": true,
+ "requires": {
+ "@babel/code-frame": "^7.0.0",
+ "@babel/generator": "^7.3.4",
+ "@babel/helpers": "^7.2.0",
+ "@babel/parser": "^7.3.4",
+ "@babel/template": "^7.2.2",
+ "@babel/traverse": "^7.3.4",
+ "@babel/types": "^7.3.4",
+ "convert-source-map": "^1.1.0",
+ "debug": "^4.1.0",
+ "json5": "^2.1.0",
+ "lodash": "^4.17.11",
+ "resolve": "^1.3.2",
+ "semver": "^5.4.1",
+ "source-map": "^0.5.0"
+ }
+ },
+ "@babel/generator": {
+ "version": "7.3.4",
+ "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.3.4.tgz",
+ "integrity": "sha512-8EXhHRFqlVVWXPezBW5keTiQi/rJMQTg/Y9uVCEZ0CAF3PKtCCaVRnp64Ii1ujhkoDhhF1fVsImoN4yJ2uz4Wg==",
+ "dev": true,
+ "requires": {
+ "@babel/types": "^7.3.4",
+ "jsesc": "^2.5.1",
+ "lodash": "^4.17.11",
+ "source-map": "^0.5.0",
+ "trim-right": "^1.0.1"
+ }
+ },
+ "@babel/helper-function-name": {
+ "version": "7.1.0",
+ "resolved": "https://registry.npmjs.org/@babel/helper-function-name/-/helper-function-name-7.1.0.tgz",
+ "integrity": "sha512-A95XEoCpb3TO+KZzJ4S/5uW5fNe26DjBGqf1o9ucyLyCmi1dXq/B3c8iaWTfBk3VvetUxl16e8tIrd5teOCfGw==",
+ "dev": true,
+ "requires": {
+ "@babel/helper-get-function-arity": "^7.0.0",
+ "@babel/template": "^7.1.0",
+ "@babel/types": "^7.0.0"
+ }
+ },
+ "@babel/helper-get-function-arity": {
+ "version": "7.0.0",
+ "resolved": "https://registry.npmjs.org/@babel/helper-get-function-arity/-/helper-get-function-arity-7.0.0.tgz",
+ "integrity": "sha512-r2DbJeg4svYvt3HOS74U4eWKsUAMRH01Z1ds1zx8KNTPtpTL5JAsdFv8BNyOpVqdFhHkkRDIg5B4AsxmkjAlmQ==",
+ "dev": true,
+ "requires": {
+ "@babel/types": "^7.0.0"
+ }
+ },
+ "@babel/helper-module-imports": {
+ "version": "7.0.0",
+ "resolved": "https://registry.npmjs.org/@babel/helper-module-imports/-/helper-module-imports-7.0.0.tgz",
+ "integrity": "sha512-aP/hlLq01DWNEiDg4Jn23i+CXxW/owM4WpDLFUbpjxe4NS3BhLVZQ5i7E0ZrxuQ/vwekIeciyamgB1UIYxxM6A==",
+ "dev": true,
+ "requires": {
+ "@babel/types": "^7.0.0"
+ }
+ },
+ "@babel/helper-plugin-utils": {
+ "version": "7.0.0",
+ "resolved": "https://registry.npmjs.org/@babel/helper-plugin-utils/-/helper-plugin-utils-7.0.0.tgz",
+ "integrity": "sha512-CYAOUCARwExnEixLdB6sDm2dIJ/YgEAKDM1MOeMeZu9Ld/bDgVo8aiWrXwcY7OBh+1Ea2uUcVRcxKk0GJvW7QA==",
+ "dev": true
+ },
+ "@babel/helper-split-export-declaration": {
+ "version": "7.0.0",
+ "resolved": "https://registry.npmjs.org/@babel/helper-split-export-declaration/-/helper-split-export-declaration-7.0.0.tgz",
+ "integrity": "sha512-MXkOJqva62dfC0w85mEf/LucPPS/1+04nmmRMPEBUB++hiiThQ2zPtX/mEWQ3mtzCEjIJvPY8nuwxXtQeQwUag==",
+ "dev": true,
+ "requires": {
+ "@babel/types": "^7.0.0"
+ }
+ },
+ "@babel/helpers": {
+ "version": "7.3.1",
+ "resolved": "https://registry.npmjs.org/@babel/helpers/-/helpers-7.3.1.tgz",
+ "integrity": "sha512-Q82R3jKsVpUV99mgX50gOPCWwco9Ec5Iln/8Vyu4osNIOQgSrd9RFrQeUvmvddFNoLwMyOUWU+5ckioEKpDoGA==",
+ "dev": true,
+ "requires": {
+ "@babel/template": "^7.1.2",
+ "@babel/traverse": "^7.1.5",
+ "@babel/types": "^7.3.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.3.4",
+ "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.3.4.tgz",
+ "integrity": "sha512-tXZCqWtlOOP4wgCp6RjRvLmfuhnqTLy9VHwRochJBCP2nDm27JnnuFEnXFASVyQNHk36jD1tAammsCEEqgscIQ==",
+ "dev": true
+ },
+ "@babel/plugin-syntax-dynamic-import": {
+ "version": "7.2.0",
+ "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-dynamic-import/-/plugin-syntax-dynamic-import-7.2.0.tgz",
+ "integrity": "sha512-mVxuJ0YroI/h/tbFTPGZR8cv6ai+STMKNBq0f8hFxsxWjl94qqhsb+wXbpNMDPU3cfR1TIsVFzU3nXyZMqyK4w==",
+ "dev": true,
+ "requires": {
+ "@babel/helper-plugin-utils": "^7.0.0"
+ }
+ },
+ "@babel/runtime": {
+ "version": "7.0.0",
+ "resolved": "https://registry.npmjs.org/@babel/runtime/-/runtime-7.0.0.tgz",
+ "integrity": "sha512-7hGhzlcmg01CvH1EHdSPVXYX1aJ8KCEyz6I9xYIi/asDtzBPMyMhVibhM/K6g/5qnKBwjZtp10bNZIEFTRW1MA==",
+ "dev": true,
+ "requires": {
+ "regenerator-runtime": "^0.12.0"
+ }
+ },
+ "@babel/template": {
+ "version": "7.2.2",
+ "resolved": "https://registry.npmjs.org/@babel/template/-/template-7.2.2.tgz",
+ "integrity": "sha512-zRL0IMM02AUDwghf5LMSSDEz7sBCO2YnNmpg3uWTZj/v1rcG2BmQUvaGU8GhU8BvfMh1k2KIAYZ7Ji9KXPUg7g==",
+ "dev": true,
+ "requires": {
+ "@babel/code-frame": "^7.0.0",
+ "@babel/parser": "^7.2.2",
+ "@babel/types": "^7.2.2"
+ }
+ },
+ "@babel/traverse": {
+ "version": "7.3.4",
+ "resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.3.4.tgz",
+ "integrity": "sha512-TvTHKp6471OYEcE/91uWmhR6PrrYywQntCHSaZ8CM8Vmp+pjAusal4nGB2WCCQd0rvI7nOMKn9GnbcvTUz3/ZQ==",
+ "dev": true,
+ "requires": {
+ "@babel/code-frame": "^7.0.0",
+ "@babel/generator": "^7.3.4",
+ "@babel/helper-function-name": "^7.1.0",
+ "@babel/helper-split-export-declaration": "^7.0.0",
+ "@babel/parser": "^7.3.4",
+ "@babel/types": "^7.3.4",
+ "debug": "^4.1.0",
+ "globals": "^11.1.0",
+ "lodash": "^4.17.11"
+ }
+ },
+ "@babel/types": {
+ "version": "7.3.4",
+ "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.3.4.tgz",
+ "integrity": "sha512-WEkp8MsLftM7O/ty580wAmZzN1nDmCACc5+jFzUt+GUFNNIi3LdRlueYz0YIlmJhlZx1QYDMZL5vdWCL0fNjFQ==",
+ "dev": true,
+ "requires": {
+ "esutils": "^2.0.2",
+ "lodash": "^4.17.11",
+ "to-fast-properties": "^2.0.0"
+ }
+ },
+ "@comandeer/babel-plugin-banner": {
+ "version": "4.1.0",
+ "resolved": "https://registry.npmjs.org/@comandeer/babel-plugin-banner/-/babel-plugin-banner-4.1.0.tgz",
+ "integrity": "sha512-9hKVIN2+maygxkngnXDsZXRZqCYDY4pxIRljJqqJ5A+eJZzW3k/NZj5lixEmStjWFjlPlOHGYBytBehpf0l+hA==",
+ "dev": true
+ },
+ "@freesewing/antman": {
+ "version": "0.3.0",
+ "resolved": "https://registry.npmjs.org/@freesewing/antman/-/antman-0.3.0.tgz",
+ "integrity": "sha512-0IggXcT1E0pBKpOZubrnaF1efYiu4MdfFb5XoIoVHDYGE552xbL/NUrOfKj8GrmLlGnzVMw3CDBKTi/OCXnoVw==",
+ "dev": true
+ },
+ "@freesewing/bent": {
+ "version": "0.1.1",
+ "resolved": "https://registry.npmjs.org/@freesewing/bent/-/bent-0.1.1.tgz",
+ "integrity": "sha512-Jkls685GTzlNi/6pph3CkasDSw3pZh78WsgxEhpH2q0GrsBCtjwI5FOHPTEVrVVpviBWlIo6S33P8GJ2FHwkSg==",
+ "requires": {
+ "@freesewing/brian": "^0.23.2",
+ "@freesewing/plugin-bundle": "^0.7.3",
+ "freesewing": "^0.30.6"
+ }
+ },
+ "@freesewing/brian": {
+ "version": "0.23.2",
+ "resolved": "https://registry.npmjs.org/@freesewing/brian/-/brian-0.23.2.tgz",
+ "integrity": "sha512-3YE/xC6fGZXvmMNZgxUXy81VNDpS5aHsWlAo9sC0CGchB7tiZAOv5g8bNyDE9yoqC63tOyElKabDiT1BPZzE+g==",
+ "requires": {
+ "@freesewing/plugin-bundle": "^0.7.3",
+ "freesewing": "^0.30.6"
+ }
+ },
+ "@freesewing/models": {
+ "version": "0.7.3",
+ "resolved": "https://registry.npmjs.org/@freesewing/models/-/models-0.7.3.tgz",
+ "integrity": "sha512-5EwY5b2thB5DMokBCm4DnkUgd1vNcpZbbH1KLR9GuFp5OvW04ENZs9Rn22HgwoZyuGgfnIYNEIq1OgWrH50SJg==",
+ "dev": true
+ },
+ "@freesewing/plugin-bundle": {
+ "version": "0.7.3",
+ "resolved": "https://registry.npmjs.org/@freesewing/plugin-bundle/-/plugin-bundle-0.7.3.tgz",
+ "integrity": "sha512-JBFWJtODp+CcmKQxKL54jfCeRgY+uujFgQHnmSFg7YiYRCrR0/ryLpFyUG+EVFf4X6e9Z4LMaGLhalKReOzOvw==",
+ "requires": {
+ "@freesewing/plugin-cutonfold": "0.10.4",
+ "@freesewing/plugin-dimension": "0.7.3",
+ "@freesewing/plugin-grainline": "0.2.2",
+ "@freesewing/plugin-logo": "0.5.2",
+ "@freesewing/plugin-round": "0.2.0",
+ "@freesewing/plugin-scalebox": "0.3.1",
+ "@freesewing/plugin-sprinkle": "0.1.0",
+ "@freesewing/plugin-title": "0.10.0"
+ }
+ },
+ "@freesewing/plugin-cutonfold": {
+ "version": "0.10.4",
+ "resolved": "https://registry.npmjs.org/@freesewing/plugin-cutonfold/-/plugin-cutonfold-0.10.4.tgz",
+ "integrity": "sha512-MTQ3LIJsuh2JdbEOzC9/w0n6AMNhN45aOYhp7iHKb/PUGy25L1iINYOuuzljLHTqYAgYIoFuCeVf9tw78hnzKA=="
+ },
+ "@freesewing/plugin-debug": {
+ "version": "0.5.2",
+ "resolved": "https://registry.npmjs.org/@freesewing/plugin-debug/-/plugin-debug-0.5.2.tgz",
+ "integrity": "sha512-htZeKYu5ZtpFzn8DLsNN3ebcBrzBsr0StiztdtEBNI5xU6dFWhc4qeAwktEoFaaFhBUsTq7Lp2F7Sp/XB1xlCQ==",
+ "dev": true
+ },
+ "@freesewing/plugin-designer": {
+ "version": "0.10.0",
+ "resolved": "https://registry.npmjs.org/@freesewing/plugin-designer/-/plugin-designer-0.10.0.tgz",
+ "integrity": "sha512-t5A21GZlLiknEr5LAXmhsay8bobgE6Mrjxe11PMczGV1rZKWZPM9/Cj1iD1hSmuuLuER8MsMk4KfJVHst9hOFA==",
+ "dev": true
+ },
+ "@freesewing/plugin-dimension": {
+ "version": "0.7.3",
+ "resolved": "https://registry.npmjs.org/@freesewing/plugin-dimension/-/plugin-dimension-0.7.3.tgz",
+ "integrity": "sha512-F0x+zARVNd2l3IX/sK0UmH2+Y/Mw2rKwZD8eLKWBfq0zCaC3WGHmd4TzlnE0oxQpiDejAYbsliFGm0vLPQyVMg=="
+ },
+ "@freesewing/plugin-grainline": {
+ "version": "0.2.2",
+ "resolved": "https://registry.npmjs.org/@freesewing/plugin-grainline/-/plugin-grainline-0.2.2.tgz",
+ "integrity": "sha512-VN9Qks1vL8MswqwiqOAtSguKyXjaVI258xqTA/9t76NYJsidm2HxRQxUnxcA+xg5MzOahSSRtVAWdXuAwV31ig=="
+ },
+ "@freesewing/plugin-i18n": {
+ "version": "0.1.2",
+ "resolved": "https://registry.npmjs.org/@freesewing/plugin-i18n/-/plugin-i18n-0.1.2.tgz",
+ "integrity": "sha512-z/23gJ67gw9xSd3+pIsbeP8mR0tSbPkBs5i+1JhSRwafD2gx6Q3vssRxm4kzFDoTLwJpMvyH7qkhqGmlzZNpaQ==",
+ "dev": true
+ },
+ "@freesewing/plugin-logo": {
+ "version": "0.5.2",
+ "resolved": "https://registry.npmjs.org/@freesewing/plugin-logo/-/plugin-logo-0.5.2.tgz",
+ "integrity": "sha512-g+lk/nBYxnzs7hQYUdQ/YDPJCUmUeZcNdk0+xUWoADdoZY95NwrXVxfNz/O2wI9kRCgFpFojgT0dD2HKtkv0/w=="
+ },
+ "@freesewing/plugin-round": {
+ "version": "0.2.0",
+ "resolved": "https://registry.npmjs.org/@freesewing/plugin-round/-/plugin-round-0.2.0.tgz",
+ "integrity": "sha512-uzAxICxNHQ0rtS4W07mhQQ0qcm4nHWNUzkInK/322k7BCYYb/v8tsC2EW9PISCvHZqUEhlDBR+vXPsusNSRNhA=="
+ },
+ "@freesewing/plugin-scalebox": {
+ "version": "0.3.1",
+ "resolved": "https://registry.npmjs.org/@freesewing/plugin-scalebox/-/plugin-scalebox-0.3.1.tgz",
+ "integrity": "sha512-iZwWVQdLGs/cPVZl4ZyBMzNrIUzDRWyhScBg9D62UGuBIPdGFmA1fDEgZ+5hDJ9UuxR65/Ue1emJlOlP2ZwOtw=="
+ },
+ "@freesewing/plugin-sprinkle": {
+ "version": "0.1.0",
+ "resolved": "https://registry.npmjs.org/@freesewing/plugin-sprinkle/-/plugin-sprinkle-0.1.0.tgz",
+ "integrity": "sha512-u/tm8sgW5h2RlvGPhyCG4KUb1GhTMwuTkOotgdsevZr9fx3aApDUmZhe2mfmJhvKvgQGaa6IOQJ69OJ402oOCg=="
+ },
+ "@freesewing/plugin-theme": {
+ "version": "0.18.4",
+ "resolved": "https://registry.npmjs.org/@freesewing/plugin-theme/-/plugin-theme-0.18.4.tgz",
+ "integrity": "sha512-5HZWqxgLbQETdOc2Ph/Mc8C9s8qFfCPZjfW+GYE6vwkJ3viCARIGp4iFSZtF5f5GaUKW91SAZKTu7AgRGKg+lg==",
+ "dev": true
+ },
+ "@freesewing/plugin-title": {
+ "version": "0.10.0",
+ "resolved": "https://registry.npmjs.org/@freesewing/plugin-title/-/plugin-title-0.10.0.tgz",
+ "integrity": "sha512-UZYge58Cofpgjx7ODhdszTKYRURjVtP2YIkOsUR3/kzicVpAw/wuoFX9n85y9IGG+k9ImIX7/7F4AtqlhNItnQ=="
+ },
+ "@freesewing/plugin-validate": {
+ "version": "0.4.1",
+ "resolved": "https://registry.npmjs.org/@freesewing/plugin-validate/-/plugin-validate-0.4.1.tgz",
+ "integrity": "sha512-TrVIe1tQ4PWmYVd414aFL4Sj9QjtM3HYIE3pr5Edh5rBrT/iFmXx9EngFUA+kR2dPm+q63x697HYauchIo90TQ==",
+ "dev": true
+ },
+ "@samverschueren/stream-to-observable": {
+ "version": "0.3.0",
+ "resolved": "https://registry.npmjs.org/@samverschueren/stream-to-observable/-/stream-to-observable-0.3.0.tgz",
+ "integrity": "sha512-MI4Xx6LHs4Webyvi6EbspgyAb4D2Q2VtnCQ1blOJcoLS6mVa8lNN2rkIy1CVxfTUpoyIbCTkXES1rLXztFD1lg==",
+ "dev": true,
+ "requires": {
+ "any-observable": "^0.3.0"
+ }
+ },
+ "@types/estree": {
+ "version": "0.0.39",
+ "resolved": "https://registry.npmjs.org/@types/estree/-/estree-0.0.39.tgz",
+ "integrity": "sha512-EYNwp3bU+98cpU4lAWYYL7Zz+2gryWH1qbdDTidVd6hkiR6weksdbMadyXKXNPEkQFhXM+hVO9ZygomHXp+AIw==",
+ "dev": true
+ },
+ "@types/node": {
+ "version": "11.10.4",
+ "resolved": "https://registry.npmjs.org/@types/node/-/node-11.10.4.tgz",
+ "integrity": "sha512-wa09itaLE8L705aXd8F80jnFpxz3Y1/KRHfKsYL2bPc0XF+wEWu8sR9n5bmeu8Ba1N9z2GRNzm/YdHcghLkLKg==",
+ "dev": true
+ },
+ "acorn": {
+ "version": "6.1.1",
+ "resolved": "https://registry.npmjs.org/acorn/-/acorn-6.1.1.tgz",
+ "integrity": "sha512-jPTiwtOxaHNaAPg/dmrJ/beuzLRnXtB0kQPQ8JpotKJgTB6rX6c8mlf315941pyjBSaPg8NHXS9fhP4u17DpGA==",
+ "dev": true
+ },
+ "acorn-jsx": {
+ "version": "5.0.1",
+ "resolved": "https://registry.npmjs.org/acorn-jsx/-/acorn-jsx-5.0.1.tgz",
+ "integrity": "sha512-HJ7CfNHrfJLlNTzIEUTj43LNWGkqpRLxm3YjAlcD0ACydk9XynzYsCBHxut+iqt+1aBXkx9UP/w/ZqMr13XIzg==",
+ "dev": true
+ },
+ "ajv": {
+ "version": "6.9.2",
+ "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.9.2.tgz",
+ "integrity": "sha512-4UFy0/LgDo7Oa/+wOAlj44tp9K78u38E5/359eSrqEp1Z5PdVfimCcs7SluXMP755RUQu6d2b4AvF0R1C9RZjg==",
+ "dev": true,
+ "requires": {
+ "fast-deep-equal": "^2.0.1",
+ "fast-json-stable-stringify": "^2.0.0",
+ "json-schema-traverse": "^0.4.1",
+ "uri-js": "^4.2.2"
+ }
+ },
+ "ansi-escapes": {
+ "version": "3.2.0",
+ "resolved": "https://registry.npmjs.org/ansi-escapes/-/ansi-escapes-3.2.0.tgz",
+ "integrity": "sha512-cBhpre4ma+U0T1oM5fXg7Dy1Jw7zzwv7lt/GoCpr+hDQJoYnKVPLL4dCvSEFMmQurOQvSrwT7SL/DAlhBI97RQ==",
+ "dev": true
+ },
+ "ansi-regex": {
+ "version": "3.0.0",
+ "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-3.0.0.tgz",
+ "integrity": "sha1-7QMXwyIGT3lGbAKWa922Bas32Zg=",
+ "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"
+ }
+ },
+ "any-observable": {
+ "version": "0.3.0",
+ "resolved": "https://registry.npmjs.org/any-observable/-/any-observable-0.3.0.tgz",
+ "integrity": "sha512-/FQM1EDkTsf63Ub2C6O7GuYFDsSXUwsaZDurV0np41ocwq0jthUAYCmhBX9f+KwlaCgIuWyr/4WlUQUBfKfZog==",
+ "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"
+ }
+ },
+ "arr-diff": {
+ "version": "4.0.0",
+ "resolved": "https://registry.npmjs.org/arr-diff/-/arr-diff-4.0.0.tgz",
+ "integrity": "sha1-1kYQdP6/7HHn4VI1dhoyml3HxSA=",
+ "dev": true
+ },
+ "arr-flatten": {
+ "version": "1.1.0",
+ "resolved": "https://registry.npmjs.org/arr-flatten/-/arr-flatten-1.1.0.tgz",
+ "integrity": "sha512-L3hKV5R/p5o81R7O02IGnwpDmkp6E982XhtbuwSe3O4qOtMMMtodicASA1Cny2U+aCXcNpml+m4dPsvsJ3jatg==",
+ "dev": true
+ },
+ "arr-union": {
+ "version": "3.1.0",
+ "resolved": "https://registry.npmjs.org/arr-union/-/arr-union-3.1.0.tgz",
+ "integrity": "sha1-45sJrqne+Gao8gbiiK9jkZuuOcQ=",
+ "dev": true
+ },
+ "array-union": {
+ "version": "1.0.2",
+ "resolved": "https://registry.npmjs.org/array-union/-/array-union-1.0.2.tgz",
+ "integrity": "sha1-mjRBDk9OPaI96jdb5b5w8kd47Dk=",
+ "dev": true,
+ "requires": {
+ "array-uniq": "^1.0.1"
+ }
+ },
+ "array-uniq": {
+ "version": "1.0.3",
+ "resolved": "https://registry.npmjs.org/array-uniq/-/array-uniq-1.0.3.tgz",
+ "integrity": "sha1-r2rId6Jcx/dOBYiUdThY39sk/bY=",
+ "dev": true
+ },
+ "array-unique": {
+ "version": "0.3.2",
+ "resolved": "https://registry.npmjs.org/array-unique/-/array-unique-0.3.2.tgz",
+ "integrity": "sha1-qJS3XUvE9s1nnvMkSp/Y9Gri1Cg=",
+ "dev": true
+ },
+ "arrify": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/arrify/-/arrify-1.0.1.tgz",
+ "integrity": "sha1-iYUI2iIm84DfkEcoRWhJwVAaSw0=",
+ "dev": true
+ },
+ "assign-symbols": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/assign-symbols/-/assign-symbols-1.0.0.tgz",
+ "integrity": "sha1-WWZ/QfrdTyDMvCu5a41Pf3jsA2c=",
+ "dev": true
+ },
+ "astral-regex": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/astral-regex/-/astral-regex-1.0.0.tgz",
+ "integrity": "sha512-+Ryf6g3BKoRc7jfp7ad8tM4TtMiaWvbF/1/sQcZPkkS7ag3D5nMBCe2UfOTONtAkaG0tO0ij3C5Lwmf1EiyjHg==",
+ "dev": true
+ },
+ "atob": {
+ "version": "2.1.2",
+ "resolved": "https://registry.npmjs.org/atob/-/atob-2.1.2.tgz",
+ "integrity": "sha512-Wm6ukoaOGJi/73p/cl2GvLjTI5JM1k/O14isD73YML8StrH/7/lRFgmg8nICZgD3bZZvjwCGxtMOD3wWNAu8cg==",
+ "dev": true
+ },
+ "babel-helper-evaluate-path": {
+ "version": "0.5.0",
+ "resolved": "https://registry.npmjs.org/babel-helper-evaluate-path/-/babel-helper-evaluate-path-0.5.0.tgz",
+ "integrity": "sha512-mUh0UhS607bGh5wUMAQfOpt2JX2ThXMtppHRdRU1kL7ZLRWIXxoV2UIV1r2cAeeNeU1M5SB5/RSUgUxrK8yOkA==",
+ "dev": true
+ },
+ "babel-helper-flip-expressions": {
+ "version": "0.4.3",
+ "resolved": "https://registry.npmjs.org/babel-helper-flip-expressions/-/babel-helper-flip-expressions-0.4.3.tgz",
+ "integrity": "sha1-NpZzahKKwYvCUlS19AoizrPB0/0=",
+ "dev": true
+ },
+ "babel-helper-is-nodes-equiv": {
+ "version": "0.0.1",
+ "resolved": "https://registry.npmjs.org/babel-helper-is-nodes-equiv/-/babel-helper-is-nodes-equiv-0.0.1.tgz",
+ "integrity": "sha1-NOmzALFHnd2Y7HfqC76TQt/jloQ=",
+ "dev": true
+ },
+ "babel-helper-is-void-0": {
+ "version": "0.4.3",
+ "resolved": "https://registry.npmjs.org/babel-helper-is-void-0/-/babel-helper-is-void-0-0.4.3.tgz",
+ "integrity": "sha1-fZwBtFYee5Xb2g9u7kj1tg5nMT4=",
+ "dev": true
+ },
+ "babel-helper-mark-eval-scopes": {
+ "version": "0.4.3",
+ "resolved": "https://registry.npmjs.org/babel-helper-mark-eval-scopes/-/babel-helper-mark-eval-scopes-0.4.3.tgz",
+ "integrity": "sha1-0kSjvvmESHJgP/tG4izorN9VFWI=",
+ "dev": true
+ },
+ "babel-helper-remove-or-void": {
+ "version": "0.4.3",
+ "resolved": "https://registry.npmjs.org/babel-helper-remove-or-void/-/babel-helper-remove-or-void-0.4.3.tgz",
+ "integrity": "sha1-pPA7QAd6D/6I5F0HAQ3uJB/1rmA=",
+ "dev": true
+ },
+ "babel-helper-to-multiple-sequence-expressions": {
+ "version": "0.5.0",
+ "resolved": "https://registry.npmjs.org/babel-helper-to-multiple-sequence-expressions/-/babel-helper-to-multiple-sequence-expressions-0.5.0.tgz",
+ "integrity": "sha512-m2CvfDW4+1qfDdsrtf4dwOslQC3yhbgyBFptncp4wvtdrDHqueW7slsYv4gArie056phvQFhT2nRcGS4bnm6mA==",
+ "dev": true
+ },
+ "babel-plugin-minify-builtins": {
+ "version": "0.5.0",
+ "resolved": "https://registry.npmjs.org/babel-plugin-minify-builtins/-/babel-plugin-minify-builtins-0.5.0.tgz",
+ "integrity": "sha512-wpqbN7Ov5hsNwGdzuzvFcjgRlzbIeVv1gMIlICbPj0xkexnfoIDe7q+AZHMkQmAE/F9R5jkrB6TLfTegImlXag==",
+ "dev": true
+ },
+ "babel-plugin-minify-constant-folding": {
+ "version": "0.5.0",
+ "resolved": "https://registry.npmjs.org/babel-plugin-minify-constant-folding/-/babel-plugin-minify-constant-folding-0.5.0.tgz",
+ "integrity": "sha512-Vj97CTn/lE9hR1D+jKUeHfNy+m1baNiJ1wJvoGyOBUx7F7kJqDZxr9nCHjO/Ad+irbR3HzR6jABpSSA29QsrXQ==",
+ "dev": true,
+ "requires": {
+ "babel-helper-evaluate-path": "^0.5.0"
+ }
+ },
+ "babel-plugin-minify-dead-code-elimination": {
+ "version": "0.5.0",
+ "resolved": "https://registry.npmjs.org/babel-plugin-minify-dead-code-elimination/-/babel-plugin-minify-dead-code-elimination-0.5.0.tgz",
+ "integrity": "sha512-XQteBGXlgEoAKc/BhO6oafUdT4LBa7ARi55mxoyhLHNuA+RlzRmeMAfc31pb/UqU01wBzRc36YqHQzopnkd/6Q==",
+ "dev": true,
+ "requires": {
+ "babel-helper-evaluate-path": "^0.5.0",
+ "babel-helper-mark-eval-scopes": "^0.4.3",
+ "babel-helper-remove-or-void": "^0.4.3",
+ "lodash.some": "^4.6.0"
+ }
+ },
+ "babel-plugin-minify-flip-comparisons": {
+ "version": "0.4.3",
+ "resolved": "https://registry.npmjs.org/babel-plugin-minify-flip-comparisons/-/babel-plugin-minify-flip-comparisons-0.4.3.tgz",
+ "integrity": "sha1-AMqHDLjxO0XAOLPB68DyJyk8llo=",
+ "dev": true,
+ "requires": {
+ "babel-helper-is-void-0": "^0.4.3"
+ }
+ },
+ "babel-plugin-minify-guarded-expressions": {
+ "version": "0.4.3",
+ "resolved": "https://registry.npmjs.org/babel-plugin-minify-guarded-expressions/-/babel-plugin-minify-guarded-expressions-0.4.3.tgz",
+ "integrity": "sha1-zHCbRFP9IbHzAod0RMifiEJ845c=",
+ "dev": true,
+ "requires": {
+ "babel-helper-flip-expressions": "^0.4.3"
+ }
+ },
+ "babel-plugin-minify-infinity": {
+ "version": "0.4.3",
+ "resolved": "https://registry.npmjs.org/babel-plugin-minify-infinity/-/babel-plugin-minify-infinity-0.4.3.tgz",
+ "integrity": "sha1-37h2obCKBldjhO8/kuZTumB7Oco=",
+ "dev": true
+ },
+ "babel-plugin-minify-mangle-names": {
+ "version": "0.5.0",
+ "resolved": "https://registry.npmjs.org/babel-plugin-minify-mangle-names/-/babel-plugin-minify-mangle-names-0.5.0.tgz",
+ "integrity": "sha512-3jdNv6hCAw6fsX1p2wBGPfWuK69sfOjfd3zjUXkbq8McbohWy23tpXfy5RnToYWggvqzuMOwlId1PhyHOfgnGw==",
+ "dev": true,
+ "requires": {
+ "babel-helper-mark-eval-scopes": "^0.4.3"
+ }
+ },
+ "babel-plugin-minify-numeric-literals": {
+ "version": "0.4.3",
+ "resolved": "https://registry.npmjs.org/babel-plugin-minify-numeric-literals/-/babel-plugin-minify-numeric-literals-0.4.3.tgz",
+ "integrity": "sha1-jk/VYcefeAEob/YOjF/Z3u6TwLw=",
+ "dev": true
+ },
+ "babel-plugin-minify-replace": {
+ "version": "0.5.0",
+ "resolved": "https://registry.npmjs.org/babel-plugin-minify-replace/-/babel-plugin-minify-replace-0.5.0.tgz",
+ "integrity": "sha512-aXZiaqWDNUbyNNNpWs/8NyST+oU7QTpK7J9zFEFSA0eOmtUNMU3fczlTTTlnCxHmq/jYNFEmkkSG3DDBtW3Y4Q==",
+ "dev": true
+ },
+ "babel-plugin-minify-simplify": {
+ "version": "0.5.0",
+ "resolved": "https://registry.npmjs.org/babel-plugin-minify-simplify/-/babel-plugin-minify-simplify-0.5.0.tgz",
+ "integrity": "sha512-TM01J/YcKZ8XIQd1Z3nF2AdWHoDsarjtZ5fWPDksYZNsoOjQ2UO2EWm824Ym6sp127m44gPlLFiO5KFxU8pA5Q==",
+ "dev": true,
+ "requires": {
+ "babel-helper-flip-expressions": "^0.4.3",
+ "babel-helper-is-nodes-equiv": "^0.0.1",
+ "babel-helper-to-multiple-sequence-expressions": "^0.5.0"
+ }
+ },
+ "babel-plugin-minify-type-constructors": {
+ "version": "0.4.3",
+ "resolved": "https://registry.npmjs.org/babel-plugin-minify-type-constructors/-/babel-plugin-minify-type-constructors-0.4.3.tgz",
+ "integrity": "sha1-G8bxW4f3qxCF1CszC3F2V6IVZQA=",
+ "dev": true,
+ "requires": {
+ "babel-helper-is-void-0": "^0.4.3"
+ }
+ },
+ "babel-plugin-transform-inline-consecutive-adds": {
+ "version": "0.4.3",
+ "resolved": "https://registry.npmjs.org/babel-plugin-transform-inline-consecutive-adds/-/babel-plugin-transform-inline-consecutive-adds-0.4.3.tgz",
+ "integrity": "sha1-Mj1Ho+pjqDp6w8gRro5pQfrysNE=",
+ "dev": true
+ },
+ "babel-plugin-transform-member-expression-literals": {
+ "version": "6.9.4",
+ "resolved": "https://registry.npmjs.org/babel-plugin-transform-member-expression-literals/-/babel-plugin-transform-member-expression-literals-6.9.4.tgz",
+ "integrity": "sha1-NwOcmgwzE6OUlfqsL/OmtbnQOL8=",
+ "dev": true
+ },
+ "babel-plugin-transform-merge-sibling-variables": {
+ "version": "6.9.4",
+ "resolved": "https://registry.npmjs.org/babel-plugin-transform-merge-sibling-variables/-/babel-plugin-transform-merge-sibling-variables-6.9.4.tgz",
+ "integrity": "sha1-hbQi/DN3tEnJ0c3kQIcgNTJAHa4=",
+ "dev": true
+ },
+ "babel-plugin-transform-minify-booleans": {
+ "version": "6.9.4",
+ "resolved": "https://registry.npmjs.org/babel-plugin-transform-minify-booleans/-/babel-plugin-transform-minify-booleans-6.9.4.tgz",
+ "integrity": "sha1-rLs+VqNVXdI5KOS1gtKFFi3SsZg=",
+ "dev": true
+ },
+ "babel-plugin-transform-property-literals": {
+ "version": "6.9.4",
+ "resolved": "https://registry.npmjs.org/babel-plugin-transform-property-literals/-/babel-plugin-transform-property-literals-6.9.4.tgz",
+ "integrity": "sha1-mMHSHiVXNlc/k+zlRFn2ziSYXTk=",
+ "dev": true,
+ "requires": {
+ "esutils": "^2.0.2"
+ }
+ },
+ "babel-plugin-transform-regexp-constructors": {
+ "version": "0.4.3",
+ "resolved": "https://registry.npmjs.org/babel-plugin-transform-regexp-constructors/-/babel-plugin-transform-regexp-constructors-0.4.3.tgz",
+ "integrity": "sha1-WLd3W2OvzzMyj66aX4j71PsLSWU=",
+ "dev": true
+ },
+ "babel-plugin-transform-remove-console": {
+ "version": "6.9.4",
+ "resolved": "https://registry.npmjs.org/babel-plugin-transform-remove-console/-/babel-plugin-transform-remove-console-6.9.4.tgz",
+ "integrity": "sha1-uYA2DAZzhOJLNXpYjYB9PINSd4A=",
+ "dev": true
+ },
+ "babel-plugin-transform-remove-debugger": {
+ "version": "6.9.4",
+ "resolved": "https://registry.npmjs.org/babel-plugin-transform-remove-debugger/-/babel-plugin-transform-remove-debugger-6.9.4.tgz",
+ "integrity": "sha1-QrcnYxyXl44estGZp67IShgznvI=",
+ "dev": true
+ },
+ "babel-plugin-transform-remove-undefined": {
+ "version": "0.5.0",
+ "resolved": "https://registry.npmjs.org/babel-plugin-transform-remove-undefined/-/babel-plugin-transform-remove-undefined-0.5.0.tgz",
+ "integrity": "sha512-+M7fJYFaEE/M9CXa0/IRkDbiV3wRELzA1kKQFCJ4ifhrzLKn/9VCCgj9OFmYWwBd8IB48YdgPkHYtbYq+4vtHQ==",
+ "dev": true,
+ "requires": {
+ "babel-helper-evaluate-path": "^0.5.0"
+ }
+ },
+ "babel-plugin-transform-simplify-comparison-operators": {
+ "version": "6.9.4",
+ "resolved": "https://registry.npmjs.org/babel-plugin-transform-simplify-comparison-operators/-/babel-plugin-transform-simplify-comparison-operators-6.9.4.tgz",
+ "integrity": "sha1-9ir+CWyrDh9ootdT/fKDiIRxzrk=",
+ "dev": true
+ },
+ "babel-plugin-transform-undefined-to-void": {
+ "version": "6.9.4",
+ "resolved": "https://registry.npmjs.org/babel-plugin-transform-undefined-to-void/-/babel-plugin-transform-undefined-to-void-6.9.4.tgz",
+ "integrity": "sha1-viQcqBQEAwZ4t0hxcyK4nQyP4oA=",
+ "dev": true
+ },
+ "babel-preset-minify": {
+ "version": "0.5.0",
+ "resolved": "https://registry.npmjs.org/babel-preset-minify/-/babel-preset-minify-0.5.0.tgz",
+ "integrity": "sha512-xj1s9Mon+RFubH569vrGCayA9Fm2GMsCgDRm1Jb8SgctOB7KFcrVc2o8K3YHUyMz+SWP8aea75BoS8YfsXXuiA==",
+ "dev": true,
+ "requires": {
+ "babel-plugin-minify-builtins": "^0.5.0",
+ "babel-plugin-minify-constant-folding": "^0.5.0",
+ "babel-plugin-minify-dead-code-elimination": "^0.5.0",
+ "babel-plugin-minify-flip-comparisons": "^0.4.3",
+ "babel-plugin-minify-guarded-expressions": "^0.4.3",
+ "babel-plugin-minify-infinity": "^0.4.3",
+ "babel-plugin-minify-mangle-names": "^0.5.0",
+ "babel-plugin-minify-numeric-literals": "^0.4.3",
+ "babel-plugin-minify-replace": "^0.5.0",
+ "babel-plugin-minify-simplify": "^0.5.0",
+ "babel-plugin-minify-type-constructors": "^0.4.3",
+ "babel-plugin-transform-inline-consecutive-adds": "^0.4.3",
+ "babel-plugin-transform-member-expression-literals": "^6.9.4",
+ "babel-plugin-transform-merge-sibling-variables": "^6.9.4",
+ "babel-plugin-transform-minify-booleans": "^6.9.4",
+ "babel-plugin-transform-property-literals": "^6.9.4",
+ "babel-plugin-transform-regexp-constructors": "^0.4.3",
+ "babel-plugin-transform-remove-console": "^6.9.4",
+ "babel-plugin-transform-remove-debugger": "^6.9.4",
+ "babel-plugin-transform-remove-undefined": "^0.5.0",
+ "babel-plugin-transform-simplify-comparison-operators": "^6.9.4",
+ "babel-plugin-transform-undefined-to-void": "^6.9.4",
+ "lodash.isplainobject": "^4.0.6"
+ }
+ },
+ "balanced-match": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.0.tgz",
+ "integrity": "sha1-ibTRmasr7kneFk6gK4nORi1xt2c=",
+ "dev": true
+ },
+ "base": {
+ "version": "0.11.2",
+ "resolved": "https://registry.npmjs.org/base/-/base-0.11.2.tgz",
+ "integrity": "sha512-5T6P4xPgpp0YDFvSWwEZ4NoE3aM4QBQXDzmVbraCkFj8zHM+mba8SyqB5DbZWyR7mYHo6Y7BdQo3MoA4m0TeQg==",
+ "dev": true,
+ "requires": {
+ "cache-base": "^1.0.1",
+ "class-utils": "^0.3.5",
+ "component-emitter": "^1.2.1",
+ "define-property": "^1.0.0",
+ "isobject": "^3.0.1",
+ "mixin-deep": "^1.2.0",
+ "pascalcase": "^0.1.1"
+ },
+ "dependencies": {
+ "define-property": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/define-property/-/define-property-1.0.0.tgz",
+ "integrity": "sha1-dp66rz9KY6rTr56NMEybvnm/sOY=",
+ "dev": true,
+ "requires": {
+ "is-descriptor": "^1.0.0"
+ }
+ },
+ "is-accessor-descriptor": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-1.0.0.tgz",
+ "integrity": "sha512-m5hnHTkcVsPfqx3AKlyttIPb7J+XykHvJP2B9bZDjlhLIoEq4XoK64Vg7boZlVWYK6LUY94dYPEE7Lh0ZkZKcQ==",
+ "dev": true,
+ "requires": {
+ "kind-of": "^6.0.0"
+ }
+ },
+ "is-data-descriptor": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-1.0.0.tgz",
+ "integrity": "sha512-jbRXy1FmtAoCjQkVmIVYwuuqDFUbaOeDjmed1tOGPrsMhtJA4rD9tkgA0F1qJ3gRFRXcHYVkdeaP50Q5rE/jLQ==",
+ "dev": true,
+ "requires": {
+ "kind-of": "^6.0.0"
+ }
+ },
+ "is-descriptor": {
+ "version": "1.0.2",
+ "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-1.0.2.tgz",
+ "integrity": "sha512-2eis5WqQGV7peooDyLmNEPUrps9+SXX5c9pL3xEB+4e9HnGuDa7mB7kHxHw4CbqS9k1T2hOH3miL8n8WtiYVtg==",
+ "dev": true,
+ "requires": {
+ "is-accessor-descriptor": "^1.0.0",
+ "is-data-descriptor": "^1.0.0",
+ "kind-of": "^6.0.2"
+ }
+ }
+ }
+ },
+ "bezier-js": {
+ "version": "2.3.2",
+ "resolved": "https://registry.npmjs.org/bezier-js/-/bezier-js-2.3.2.tgz",
+ "integrity": "sha512-+G6FB5YuicjLvYP2ZPrzGs1vXjkO6uONehOkjvIvoueIeyPxMWjgSS8DX+OYsx8xzrDDi56v2CqAxHU/NTu3LQ=="
+ },
+ "bin-pack": {
+ "version": "1.0.2",
+ "resolved": "https://registry.npmjs.org/bin-pack/-/bin-pack-1.0.2.tgz",
+ "integrity": "sha1-wqAU7b8L7XCjKSBi7UZXe5YSBnk="
+ },
+ "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": "2.3.2",
+ "resolved": "https://registry.npmjs.org/braces/-/braces-2.3.2.tgz",
+ "integrity": "sha512-aNdbnj9P8PjdXU4ybaWLK2IF3jc/EoDYbC7AazW6to3TRsfXxscC9UXOB5iDiEQrkyIbWp2SLQda4+QAa7nc3w==",
+ "dev": true,
+ "requires": {
+ "arr-flatten": "^1.1.0",
+ "array-unique": "^0.3.2",
+ "extend-shallow": "^2.0.1",
+ "fill-range": "^4.0.0",
+ "isobject": "^3.0.1",
+ "repeat-element": "^1.1.2",
+ "snapdragon": "^0.8.1",
+ "snapdragon-node": "^2.0.1",
+ "split-string": "^3.0.2",
+ "to-regex": "^3.0.1"
+ },
+ "dependencies": {
+ "extend-shallow": {
+ "version": "2.0.1",
+ "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz",
+ "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=",
+ "dev": true,
+ "requires": {
+ "is-extendable": "^0.1.0"
+ }
+ }
+ }
+ },
+ "builtin-modules": {
+ "version": "3.0.0",
+ "resolved": "https://registry.npmjs.org/builtin-modules/-/builtin-modules-3.0.0.tgz",
+ "integrity": "sha512-hMIeU4K2ilbXV6Uv93ZZ0Avg/M91RaKXucQ+4me2Do1txxBDyDZWCBa5bJSLqoNTRpXTLwEzIk1KmloenDDjhg==",
+ "dev": true
+ },
+ "cache-base": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/cache-base/-/cache-base-1.0.1.tgz",
+ "integrity": "sha512-AKcdTnFSWATd5/GCPRxr2ChwIJ85CeyrEyjRHlKxQ56d4XJMGym0uAiKn0xbLOGOl3+yRpOTi484dVCEc5AUzQ==",
+ "dev": true,
+ "requires": {
+ "collection-visit": "^1.0.0",
+ "component-emitter": "^1.2.1",
+ "get-value": "^2.0.6",
+ "has-value": "^1.0.0",
+ "isobject": "^3.0.1",
+ "set-value": "^2.0.0",
+ "to-object-path": "^0.3.0",
+ "union-value": "^1.0.0",
+ "unset-value": "^1.0.0"
+ }
+ },
+ "caller-callsite": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/caller-callsite/-/caller-callsite-2.0.0.tgz",
+ "integrity": "sha1-hH4PzgoiN1CpoCfFSzNzGtMVQTQ=",
+ "dev": true,
+ "requires": {
+ "callsites": "^2.0.0"
+ },
+ "dependencies": {
+ "callsites": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/callsites/-/callsites-2.0.0.tgz",
+ "integrity": "sha1-BuuE8A7qQT2oav/vrL/7Ngk7PFA=",
+ "dev": true
+ }
+ }
+ },
+ "caller-path": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/caller-path/-/caller-path-2.0.0.tgz",
+ "integrity": "sha1-Ro+DBE42mrIBD6xfBs7uFbsssfQ=",
+ "dev": true,
+ "requires": {
+ "caller-callsite": "^2.0.0"
+ }
+ },
+ "callsites": {
+ "version": "3.0.0",
+ "resolved": "https://registry.npmjs.org/callsites/-/callsites-3.0.0.tgz",
+ "integrity": "sha512-tWnkwu9YEq2uzlBDI4RcLn8jrFvF9AOi8PxDNU3hZZjJcjkcRAq3vCI+vZcg1SuxISDYe86k9VZFwAxDiJGoAw==",
+ "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"
+ }
+ },
+ "chardet": {
+ "version": "0.7.0",
+ "resolved": "https://registry.npmjs.org/chardet/-/chardet-0.7.0.tgz",
+ "integrity": "sha512-mT8iDcrh03qDGRRmoA2hmBJnxpllMR+0/0qlzjqZES6NdiWDcZkCNAk4rPFZ9Q85r27unkiNNg8ZOiwZXBHwcA==",
+ "dev": true
+ },
+ "ci-info": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/ci-info/-/ci-info-2.0.0.tgz",
+ "integrity": "sha512-5tK7EtrZ0N+OLFMthtqOj4fI2Jeb88C4CAZPu25LDVUgXJ0A3Js4PMGqrn0JU1W0Mh1/Z8wZzYPxqUrXeBboCQ==",
+ "dev": true
+ },
+ "class-utils": {
+ "version": "0.3.6",
+ "resolved": "https://registry.npmjs.org/class-utils/-/class-utils-0.3.6.tgz",
+ "integrity": "sha512-qOhPa/Fj7s6TY8H8esGu5QNpMMQxz79h+urzrNYN6mn+9BnxlDGf5QZ+XeCDsxSjPqsSR56XOZOJmpeurnLMeg==",
+ "dev": true,
+ "requires": {
+ "arr-union": "^3.1.0",
+ "define-property": "^0.2.5",
+ "isobject": "^3.0.0",
+ "static-extend": "^0.1.1"
+ },
+ "dependencies": {
+ "define-property": {
+ "version": "0.2.5",
+ "resolved": "https://registry.npmjs.org/define-property/-/define-property-0.2.5.tgz",
+ "integrity": "sha1-w1se+RjsPJkPmlvFe+BKrOxcgRY=",
+ "dev": true,
+ "requires": {
+ "is-descriptor": "^0.1.0"
+ }
+ }
+ }
+ },
+ "cli-cursor": {
+ "version": "2.1.0",
+ "resolved": "https://registry.npmjs.org/cli-cursor/-/cli-cursor-2.1.0.tgz",
+ "integrity": "sha1-s12sN2R5+sw+lHR9QdDQ9SOP/LU=",
+ "dev": true,
+ "requires": {
+ "restore-cursor": "^2.0.0"
+ }
+ },
+ "cli-truncate": {
+ "version": "0.2.1",
+ "resolved": "https://registry.npmjs.org/cli-truncate/-/cli-truncate-0.2.1.tgz",
+ "integrity": "sha1-nxXPuwcFAFNpIWxiasfQWrkN1XQ=",
+ "dev": true,
+ "requires": {
+ "slice-ansi": "0.0.4",
+ "string-width": "^1.0.1"
+ },
+ "dependencies": {
+ "ansi-regex": {
+ "version": "2.1.1",
+ "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-2.1.1.tgz",
+ "integrity": "sha1-w7M6te42DYbg5ijwRorn7yfWVN8=",
+ "dev": true
+ },
+ "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"
+ }
+ },
+ "slice-ansi": {
+ "version": "0.0.4",
+ "resolved": "https://registry.npmjs.org/slice-ansi/-/slice-ansi-0.0.4.tgz",
+ "integrity": "sha1-7b+JA/ZvfOL46v1s7tZeJkyDGzU=",
+ "dev": true
+ },
+ "string-width": {
+ "version": "1.0.2",
+ "resolved": "https://registry.npmjs.org/string-width/-/string-width-1.0.2.tgz",
+ "integrity": "sha1-EYvfW4zcUaKn5w0hHgfisLmxB9M=",
+ "dev": true,
+ "requires": {
+ "code-point-at": "^1.0.0",
+ "is-fullwidth-code-point": "^1.0.0",
+ "strip-ansi": "^3.0.0"
+ }
+ },
+ "strip-ansi": {
+ "version": "3.0.1",
+ "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-3.0.1.tgz",
+ "integrity": "sha1-ajhfuIU9lS1f8F0Oiq+UJ43GPc8=",
+ "dev": true,
+ "requires": {
+ "ansi-regex": "^2.0.0"
+ }
+ }
+ }
+ },
+ "cli-width": {
+ "version": "2.2.0",
+ "resolved": "https://registry.npmjs.org/cli-width/-/cli-width-2.2.0.tgz",
+ "integrity": "sha1-/xnt6Kml5XkyQUewwR8PvLq+1jk=",
+ "dev": true
+ },
+ "code-point-at": {
+ "version": "1.1.0",
+ "resolved": "https://registry.npmjs.org/code-point-at/-/code-point-at-1.1.0.tgz",
+ "integrity": "sha1-DQcLTQQ6W+ozovGkDi7bPZpMz3c=",
+ "dev": true
+ },
+ "collection-visit": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/collection-visit/-/collection-visit-1.0.0.tgz",
+ "integrity": "sha1-S8A3PBZLwykbTTaMgpzxqApZ3KA=",
+ "dev": true,
+ "requires": {
+ "map-visit": "^1.0.0",
+ "object-visit": "^1.0.0"
+ }
+ },
+ "color-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
+ },
+ "commander": {
+ "version": "2.19.0",
+ "resolved": "https://registry.npmjs.org/commander/-/commander-2.19.0.tgz",
+ "integrity": "sha512-6tvAOO+D6OENvRAh524Dh9jcfKTYDQAqvqezbCW82xj5X0pSrcpxtvRKHLG0yBY6SD7PSDrJaj+0AiOcKVd1Xg==",
+ "dev": true
+ },
+ "component-emitter": {
+ "version": "1.2.1",
+ "resolved": "https://registry.npmjs.org/component-emitter/-/component-emitter-1.2.1.tgz",
+ "integrity": "sha1-E3kY1teCg/ffemt8WmPhQOaUJeY=",
+ "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.6.0",
+ "resolved": "https://registry.npmjs.org/convert-source-map/-/convert-source-map-1.6.0.tgz",
+ "integrity": "sha512-eFu7XigvxdZ1ETfbgPBohgyQ/Z++C0eEhTor0qRwBw9unw+L0/6V8wkSuGgzdThkiS5lSpdptOQPD8Ak40a+7A==",
+ "dev": true,
+ "requires": {
+ "safe-buffer": "~5.1.1"
+ }
+ },
+ "copy-descriptor": {
+ "version": "0.1.1",
+ "resolved": "https://registry.npmjs.org/copy-descriptor/-/copy-descriptor-0.1.1.tgz",
+ "integrity": "sha1-Z29us8OZl8LuGsOpJP1hJHSPV40=",
+ "dev": true
+ },
+ "cosmiconfig": {
+ "version": "5.1.0",
+ "resolved": "https://registry.npmjs.org/cosmiconfig/-/cosmiconfig-5.1.0.tgz",
+ "integrity": "sha512-kCNPvthka8gvLtzAxQXvWo4FxqRB+ftRZyPZNuab5ngvM9Y7yw7hbEysglptLgpkGX9nAOKTBVkHUAe8xtYR6Q==",
+ "dev": true,
+ "requires": {
+ "import-fresh": "^2.0.0",
+ "is-directory": "^0.3.1",
+ "js-yaml": "^3.9.0",
+ "lodash.get": "^4.4.2",
+ "parse-json": "^4.0.0"
+ },
+ "dependencies": {
+ "import-fresh": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/import-fresh/-/import-fresh-2.0.0.tgz",
+ "integrity": "sha1-2BNVwVYS04bGH53dOSLUMEgipUY=",
+ "dev": true,
+ "requires": {
+ "caller-path": "^2.0.0",
+ "resolve-from": "^3.0.0"
+ }
+ },
+ "resolve-from": {
+ "version": "3.0.0",
+ "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-3.0.0.tgz",
+ "integrity": "sha1-six699nWiBvItuZTM17rywoYh0g=",
+ "dev": true
+ }
+ }
+ },
+ "cross-spawn": {
+ "version": "6.0.5",
+ "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-6.0.5.tgz",
+ "integrity": "sha512-eTVLrBSt7fjbDygz805pMnstIs2VTBNkRm0qxZd+M7A5XDdxVRWO5MxGBXZhjY4cqLYLdtrGqRf8mBPmzwSpWQ==",
+ "dev": true,
+ "requires": {
+ "nice-try": "^1.0.4",
+ "path-key": "^2.0.1",
+ "semver": "^5.5.0",
+ "shebang-command": "^1.2.0",
+ "which": "^1.2.9"
+ }
+ },
+ "date-fns": {
+ "version": "1.30.1",
+ "resolved": "https://registry.npmjs.org/date-fns/-/date-fns-1.30.1.tgz",
+ "integrity": "sha512-hBSVCvSmWC+QypYObzwGOd9wqdDpOt+0wl0KbU+R+uuZBS1jN8VsD1ss3irQDknRj5NvxiTF6oj/nDRnN/UQNw==",
+ "dev": true
+ },
+ "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"
+ }
+ },
+ "decode-uri-component": {
+ "version": "0.2.0",
+ "resolved": "https://registry.npmjs.org/decode-uri-component/-/decode-uri-component-0.2.0.tgz",
+ "integrity": "sha1-6zkTMzRYd1y4TNGh+uBiEGu4dUU=",
+ "dev": true
+ },
+ "dedent": {
+ "version": "0.7.0",
+ "resolved": "https://registry.npmjs.org/dedent/-/dedent-0.7.0.tgz",
+ "integrity": "sha1-JJXduvbrh0q7Dhvp3yLS5aVEMmw=",
+ "dev": true
+ },
+ "deep-is": {
+ "version": "0.1.3",
+ "resolved": "https://registry.npmjs.org/deep-is/-/deep-is-0.1.3.tgz",
+ "integrity": "sha1-s2nW+128E+7PUk+RsHD+7cNXzzQ=",
+ "dev": true
+ },
+ "define-property": {
+ "version": "2.0.2",
+ "resolved": "https://registry.npmjs.org/define-property/-/define-property-2.0.2.tgz",
+ "integrity": "sha512-jwK2UV4cnPpbcG7+VRARKTZPUWowwXA8bzH5NP6ud0oeAxyYPuGZUAC7hMugpCdz4BeSZl2Dl9k66CHJ/46ZYQ==",
+ "dev": true,
+ "requires": {
+ "is-descriptor": "^1.0.2",
+ "isobject": "^3.0.1"
+ },
+ "dependencies": {
+ "is-accessor-descriptor": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-1.0.0.tgz",
+ "integrity": "sha512-m5hnHTkcVsPfqx3AKlyttIPb7J+XykHvJP2B9bZDjlhLIoEq4XoK64Vg7boZlVWYK6LUY94dYPEE7Lh0ZkZKcQ==",
+ "dev": true,
+ "requires": {
+ "kind-of": "^6.0.0"
+ }
+ },
+ "is-data-descriptor": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-1.0.0.tgz",
+ "integrity": "sha512-jbRXy1FmtAoCjQkVmIVYwuuqDFUbaOeDjmed1tOGPrsMhtJA4rD9tkgA0F1qJ3gRFRXcHYVkdeaP50Q5rE/jLQ==",
+ "dev": true,
+ "requires": {
+ "kind-of": "^6.0.0"
+ }
+ },
+ "is-descriptor": {
+ "version": "1.0.2",
+ "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-1.0.2.tgz",
+ "integrity": "sha512-2eis5WqQGV7peooDyLmNEPUrps9+SXX5c9pL3xEB+4e9HnGuDa7mB7kHxHw4CbqS9k1T2hOH3miL8n8WtiYVtg==",
+ "dev": true,
+ "requires": {
+ "is-accessor-descriptor": "^1.0.0",
+ "is-data-descriptor": "^1.0.0",
+ "kind-of": "^6.0.2"
+ }
+ }
+ }
+ },
+ "del": {
+ "version": "3.0.0",
+ "resolved": "https://registry.npmjs.org/del/-/del-3.0.0.tgz",
+ "integrity": "sha1-U+z2mf/LyzljdpGrE7rxYIGXZuU=",
+ "dev": true,
+ "requires": {
+ "globby": "^6.1.0",
+ "is-path-cwd": "^1.0.0",
+ "is-path-in-cwd": "^1.0.0",
+ "p-map": "^1.1.1",
+ "pify": "^3.0.0",
+ "rimraf": "^2.2.8"
+ }
+ },
+ "doctrine": {
+ "version": "3.0.0",
+ "resolved": "https://registry.npmjs.org/doctrine/-/doctrine-3.0.0.tgz",
+ "integrity": "sha512-yS+Q5i3hBf7GBkd4KG8a7eBNNWNGLTaEwwYWUijIYM7zrlYDM0BFXHjjPWlWZ1Rg7UaddZeIDmi9jF3HmqiQ2w==",
+ "dev": true,
+ "requires": {
+ "esutils": "^2.0.2"
+ }
+ },
+ "elegant-spinner": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/elegant-spinner/-/elegant-spinner-1.0.1.tgz",
+ "integrity": "sha1-2wQ1IcldfjA/2PNFvtwzSc+wcp4=",
+ "dev": true
+ },
+ "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
+ },
+ "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==",
+ "dev": true,
+ "requires": {
+ "once": "^1.4.0"
+ }
+ },
+ "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"
+ }
+ },
+ "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
+ },
+ "eslint": {
+ "version": "5.15.0",
+ "resolved": "https://registry.npmjs.org/eslint/-/eslint-5.15.0.tgz",
+ "integrity": "sha512-xwG7SS5JLeqkiR3iOmVgtF8Y6xPdtr6AAsN6ph7Q6R/fv+3UlKYoika8SmNzmb35qdRF+RfTY35kMEdtbi+9wg==",
+ "dev": true,
+ "requires": {
+ "@babel/code-frame": "^7.0.0",
+ "ajv": "^6.9.1",
+ "chalk": "^2.1.0",
+ "cross-spawn": "^6.0.5",
+ "debug": "^4.0.1",
+ "doctrine": "^3.0.0",
+ "eslint-scope": "^4.0.2",
+ "eslint-utils": "^1.3.1",
+ "eslint-visitor-keys": "^1.0.0",
+ "espree": "^5.0.1",
+ "esquery": "^1.0.1",
+ "esutils": "^2.0.2",
+ "file-entry-cache": "^5.0.1",
+ "functional-red-black-tree": "^1.0.1",
+ "glob": "^7.1.2",
+ "globals": "^11.7.0",
+ "ignore": "^4.0.6",
+ "import-fresh": "^3.0.0",
+ "imurmurhash": "^0.1.4",
+ "inquirer": "^6.2.2",
+ "js-yaml": "^3.12.0",
+ "json-stable-stringify-without-jsonify": "^1.0.1",
+ "levn": "^0.3.0",
+ "lodash": "^4.17.11",
+ "minimatch": "^3.0.4",
+ "mkdirp": "^0.5.1",
+ "natural-compare": "^1.4.0",
+ "optionator": "^0.8.2",
+ "path-is-inside": "^1.0.2",
+ "progress": "^2.0.0",
+ "regexpp": "^2.0.1",
+ "semver": "^5.5.1",
+ "strip-ansi": "^4.0.0",
+ "strip-json-comments": "^2.0.1",
+ "table": "^5.2.3",
+ "text-table": "^0.2.0"
+ }
+ },
+ "eslint-config-prettier": {
+ "version": "4.1.0",
+ "resolved": "https://registry.npmjs.org/eslint-config-prettier/-/eslint-config-prettier-4.1.0.tgz",
+ "integrity": "sha512-zILwX9/Ocz4SV2vX7ox85AsrAgXV3f2o2gpIicdMIOra48WYqgUnWNH/cR/iHtmD2Vb3dLSC3LiEJnS05Gkw7w==",
+ "dev": true,
+ "requires": {
+ "get-stdin": "^6.0.0"
+ }
+ },
+ "eslint-plugin-prettier": {
+ "version": "3.0.1",
+ "resolved": "https://registry.npmjs.org/eslint-plugin-prettier/-/eslint-plugin-prettier-3.0.1.tgz",
+ "integrity": "sha512-/PMttrarPAY78PLvV3xfWibMOdMDl57hmlQ2XqFeA37wd+CJ7WSxV7txqjVPHi/AAFKd2lX0ZqfsOc/i5yFCSQ==",
+ "dev": true,
+ "requires": {
+ "prettier-linter-helpers": "^1.0.0"
+ }
+ },
+ "eslint-scope": {
+ "version": "4.0.2",
+ "resolved": "https://registry.npmjs.org/eslint-scope/-/eslint-scope-4.0.2.tgz",
+ "integrity": "sha512-5q1+B/ogmHl8+paxtOKx38Z8LtWkVGuNt3+GQNErqwLl6ViNp/gdJGMCjZNxZ8j/VYjDNZ2Fo+eQc1TAVPIzbg==",
+ "dev": true,
+ "requires": {
+ "esrecurse": "^4.1.0",
+ "estraverse": "^4.1.1"
+ }
+ },
+ "eslint-utils": {
+ "version": "1.3.1",
+ "resolved": "https://registry.npmjs.org/eslint-utils/-/eslint-utils-1.3.1.tgz",
+ "integrity": "sha512-Z7YjnIldX+2XMcjr7ZkgEsOj/bREONV60qYeB/bjMAqqqZ4zxKyWX+BOUkdmRmA9riiIPVvo5x86m5elviOk0Q==",
+ "dev": true
+ },
+ "eslint-visitor-keys": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-1.0.0.tgz",
+ "integrity": "sha512-qzm/XxIbxm/FHyH341ZrbnMUpe+5Bocte9xkmFMzPMjRaZMcXww+MpBptFvtU+79L362nqiLhekCxCxDPaUMBQ==",
+ "dev": true
+ },
+ "espree": {
+ "version": "5.0.1",
+ "resolved": "https://registry.npmjs.org/espree/-/espree-5.0.1.tgz",
+ "integrity": "sha512-qWAZcWh4XE/RwzLJejfcofscgMc9CamR6Tn1+XRXNzrvUSSbiAjGOI/fggztjIi7y9VLPqnICMIPiGyr8JaZ0A==",
+ "dev": true,
+ "requires": {
+ "acorn": "^6.0.7",
+ "acorn-jsx": "^5.0.0",
+ "eslint-visitor-keys": "^1.0.0"
+ }
+ },
+ "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
+ },
+ "esquery": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/esquery/-/esquery-1.0.1.tgz",
+ "integrity": "sha512-SmiyZ5zIWH9VM+SRUReLS5Q8a7GxtRdxEBVZpm98rJM7Sb+A9DVCndXfkeFUd3byderg+EbDkfnevfCwynWaNA==",
+ "dev": true,
+ "requires": {
+ "estraverse": "^4.0.0"
+ }
+ },
+ "esrecurse": {
+ "version": "4.2.1",
+ "resolved": "https://registry.npmjs.org/esrecurse/-/esrecurse-4.2.1.tgz",
+ "integrity": "sha512-64RBB++fIOAXPw3P9cy89qfMlvZEXZkqqJkjqqXIvzP5ezRZjW+lPWjw35UX/3EhUPFYbg5ER4JYgDw4007/DQ==",
+ "dev": true,
+ "requires": {
+ "estraverse": "^4.1.0"
+ }
+ },
+ "estraverse": {
+ "version": "4.2.0",
+ "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-4.2.0.tgz",
+ "integrity": "sha1-De4/7TH81GlhjOc0IJn8GvoL2xM=",
+ "dev": true
+ },
+ "estree-walker": {
+ "version": "0.6.0",
+ "resolved": "https://registry.npmjs.org/estree-walker/-/estree-walker-0.6.0.tgz",
+ "integrity": "sha512-peq1RfVAVzr3PU/jL31RaOjUKLoZJpObQWJJ+LgfcxDUifyLZ1RjPQZTl0pzj2uJ45b7A7XpyppXvxdEqzo4rw==",
+ "dev": true
+ },
+ "esutils": {
+ "version": "2.0.2",
+ "resolved": "https://registry.npmjs.org/esutils/-/esutils-2.0.2.tgz",
+ "integrity": "sha1-Cr9PHKpbyx96nYrMbepPqqBLrJs=",
+ "dev": true
+ },
+ "execa": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/execa/-/execa-1.0.0.tgz",
+ "integrity": "sha512-adbxcyWV46qiHyvSp50TKt05tB4tK3HcmF7/nxfAdhnox83seTDbwnaqKO4sXRy7roHAIFqJP/Rw/AuEbX61LA==",
+ "dev": true,
+ "requires": {
+ "cross-spawn": "^6.0.0",
+ "get-stream": "^4.0.0",
+ "is-stream": "^1.1.0",
+ "npm-run-path": "^2.0.0",
+ "p-finally": "^1.0.0",
+ "signal-exit": "^3.0.0",
+ "strip-eof": "^1.0.0"
+ }
+ },
+ "expand-brackets": {
+ "version": "2.1.4",
+ "resolved": "https://registry.npmjs.org/expand-brackets/-/expand-brackets-2.1.4.tgz",
+ "integrity": "sha1-t3c14xXOMPa27/D4OwQVGiJEliI=",
+ "dev": true,
+ "requires": {
+ "debug": "^2.3.3",
+ "define-property": "^0.2.5",
+ "extend-shallow": "^2.0.1",
+ "posix-character-classes": "^0.1.0",
+ "regex-not": "^1.0.0",
+ "snapdragon": "^0.8.1",
+ "to-regex": "^3.0.1"
+ },
+ "dependencies": {
+ "debug": {
+ "version": "2.6.9",
+ "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz",
+ "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==",
+ "dev": true,
+ "requires": {
+ "ms": "2.0.0"
+ }
+ },
+ "define-property": {
+ "version": "0.2.5",
+ "resolved": "https://registry.npmjs.org/define-property/-/define-property-0.2.5.tgz",
+ "integrity": "sha1-w1se+RjsPJkPmlvFe+BKrOxcgRY=",
+ "dev": true,
+ "requires": {
+ "is-descriptor": "^0.1.0"
+ }
+ },
+ "extend-shallow": {
+ "version": "2.0.1",
+ "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz",
+ "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=",
+ "dev": true,
+ "requires": {
+ "is-extendable": "^0.1.0"
+ }
+ },
+ "ms": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz",
+ "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=",
+ "dev": true
+ }
+ }
+ },
+ "extend-shallow": {
+ "version": "3.0.2",
+ "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-3.0.2.tgz",
+ "integrity": "sha1-Jqcarwc7OfshJxcnRhMcJwQCjbg=",
+ "dev": true,
+ "requires": {
+ "assign-symbols": "^1.0.0",
+ "is-extendable": "^1.0.1"
+ },
+ "dependencies": {
+ "is-extendable": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/is-extendable/-/is-extendable-1.0.1.tgz",
+ "integrity": "sha512-arnXMxT1hhoKo9k1LZdmlNyJdDDfy2v0fXjFlmok4+i8ul/6WlbVge9bhM74OpNPQPMGUToDtz+KXa1PneJxOA==",
+ "dev": true,
+ "requires": {
+ "is-plain-object": "^2.0.4"
+ }
+ }
+ }
+ },
+ "external-editor": {
+ "version": "3.0.3",
+ "resolved": "https://registry.npmjs.org/external-editor/-/external-editor-3.0.3.tgz",
+ "integrity": "sha512-bn71H9+qWoOQKyZDo25mOMVpSmXROAsTJVVVYzrrtol3d4y+AsKjf4Iwl2Q+IuT0kFSQ1qo166UuIwqYq7mGnA==",
+ "dev": true,
+ "requires": {
+ "chardet": "^0.7.0",
+ "iconv-lite": "^0.4.24",
+ "tmp": "^0.0.33"
+ }
+ },
+ "extglob": {
+ "version": "2.0.4",
+ "resolved": "https://registry.npmjs.org/extglob/-/extglob-2.0.4.tgz",
+ "integrity": "sha512-Nmb6QXkELsuBr24CJSkilo6UHHgbekK5UiZgfE6UHD3Eb27YC6oD+bhcT+tJ6cl8dmsgdQxnWlcry8ksBIBLpw==",
+ "dev": true,
+ "requires": {
+ "array-unique": "^0.3.2",
+ "define-property": "^1.0.0",
+ "expand-brackets": "^2.1.4",
+ "extend-shallow": "^2.0.1",
+ "fragment-cache": "^0.2.1",
+ "regex-not": "^1.0.0",
+ "snapdragon": "^0.8.1",
+ "to-regex": "^3.0.1"
+ },
+ "dependencies": {
+ "define-property": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/define-property/-/define-property-1.0.0.tgz",
+ "integrity": "sha1-dp66rz9KY6rTr56NMEybvnm/sOY=",
+ "dev": true,
+ "requires": {
+ "is-descriptor": "^1.0.0"
+ }
+ },
+ "extend-shallow": {
+ "version": "2.0.1",
+ "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz",
+ "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=",
+ "dev": true,
+ "requires": {
+ "is-extendable": "^0.1.0"
+ }
+ },
+ "is-accessor-descriptor": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-1.0.0.tgz",
+ "integrity": "sha512-m5hnHTkcVsPfqx3AKlyttIPb7J+XykHvJP2B9bZDjlhLIoEq4XoK64Vg7boZlVWYK6LUY94dYPEE7Lh0ZkZKcQ==",
+ "dev": true,
+ "requires": {
+ "kind-of": "^6.0.0"
+ }
+ },
+ "is-data-descriptor": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-1.0.0.tgz",
+ "integrity": "sha512-jbRXy1FmtAoCjQkVmIVYwuuqDFUbaOeDjmed1tOGPrsMhtJA4rD9tkgA0F1qJ3gRFRXcHYVkdeaP50Q5rE/jLQ==",
+ "dev": true,
+ "requires": {
+ "kind-of": "^6.0.0"
+ }
+ },
+ "is-descriptor": {
+ "version": "1.0.2",
+ "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-1.0.2.tgz",
+ "integrity": "sha512-2eis5WqQGV7peooDyLmNEPUrps9+SXX5c9pL3xEB+4e9HnGuDa7mB7kHxHw4CbqS9k1T2hOH3miL8n8WtiYVtg==",
+ "dev": true,
+ "requires": {
+ "is-accessor-descriptor": "^1.0.0",
+ "is-data-descriptor": "^1.0.0",
+ "kind-of": "^6.0.2"
+ }
+ }
+ }
+ },
+ "fast-deep-equal": {
+ "version": "2.0.1",
+ "resolved": "https://registry.npmjs.org/fast-deep-equal/-/fast-deep-equal-2.0.1.tgz",
+ "integrity": "sha1-ewUhjd+WZ79/Nwv3/bLLFf3Qqkk=",
+ "dev": true
+ },
+ "fast-diff": {
+ "version": "1.2.0",
+ "resolved": "https://registry.npmjs.org/fast-diff/-/fast-diff-1.2.0.tgz",
+ "integrity": "sha512-xJuoT5+L99XlZ8twedaRf6Ax2TgQVxvgZOYoPKqZufmJib0tL2tegPBOZb1pVNgIhlqDlA0eO0c3wBvQcmzx4w==",
+ "dev": true
+ },
+ "fast-json-stable-stringify": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/fast-json-stable-stringify/-/fast-json-stable-stringify-2.0.0.tgz",
+ "integrity": "sha1-1RQsDK7msRifh9OnYREGT4bIu/I=",
+ "dev": true
+ },
+ "fast-levenshtein": {
+ "version": "2.0.6",
+ "resolved": "https://registry.npmjs.org/fast-levenshtein/-/fast-levenshtein-2.0.6.tgz",
+ "integrity": "sha1-PYpcZog6FqMMqGQ+hR8Zuqd5eRc=",
+ "dev": true
+ },
+ "figures": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/figures/-/figures-2.0.0.tgz",
+ "integrity": "sha1-OrGi0qYsi/tDGgyUy3l6L84nyWI=",
+ "dev": true,
+ "requires": {
+ "escape-string-regexp": "^1.0.5"
+ }
+ },
+ "file-entry-cache": {
+ "version": "5.0.1",
+ "resolved": "https://registry.npmjs.org/file-entry-cache/-/file-entry-cache-5.0.1.tgz",
+ "integrity": "sha512-bCg29ictuBaKUwwArK4ouCaqDgLZcysCFLmM/Yn/FDoqndh/9vNuQfXRDvTuXKLxfD/JtZQGKFT8MGcJBK644g==",
+ "dev": true,
+ "requires": {
+ "flat-cache": "^2.0.1"
+ }
+ },
+ "fill-range": {
+ "version": "4.0.0",
+ "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-4.0.0.tgz",
+ "integrity": "sha1-1USBHUKPmOsGpj3EAtJAPDKMOPc=",
+ "dev": true,
+ "requires": {
+ "extend-shallow": "^2.0.1",
+ "is-number": "^3.0.0",
+ "repeat-string": "^1.6.1",
+ "to-regex-range": "^2.1.0"
+ },
+ "dependencies": {
+ "extend-shallow": {
+ "version": "2.0.1",
+ "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz",
+ "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=",
+ "dev": true,
+ "requires": {
+ "is-extendable": "^0.1.0"
+ }
+ }
+ }
+ },
+ "find-parent-dir": {
+ "version": "0.3.0",
+ "resolved": "https://registry.npmjs.org/find-parent-dir/-/find-parent-dir-0.3.0.tgz",
+ "integrity": "sha1-M8RLQpqysvBkYpnF+fcY83b/jVQ=",
+ "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"
+ }
+ },
+ "flat-cache": {
+ "version": "2.0.1",
+ "resolved": "https://registry.npmjs.org/flat-cache/-/flat-cache-2.0.1.tgz",
+ "integrity": "sha512-LoQe6yDuUMDzQAEH8sgmh4Md6oZnc/7PjtwjNFSzveXqSHt6ka9fPBuso7IGf9Rz4uqnSnWiFH2B/zj24a5ReA==",
+ "dev": true,
+ "requires": {
+ "flatted": "^2.0.0",
+ "rimraf": "2.6.3",
+ "write": "1.0.3"
+ }
+ },
+ "flatted": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/flatted/-/flatted-2.0.0.tgz",
+ "integrity": "sha512-R+H8IZclI8AAkSBRQJLVOsxwAoHd6WC40b4QTNWIjzAa6BXOBfQcM587MXDTVPeYaopFNWHUFLx7eNmHDSxMWg==",
+ "dev": true
+ },
+ "fn-name": {
+ "version": "2.0.1",
+ "resolved": "https://registry.npmjs.org/fn-name/-/fn-name-2.0.1.tgz",
+ "integrity": "sha1-UhTXU3pNBqSjAcDMJi/rhBiAAuc=",
+ "dev": true
+ },
+ "for-in": {
+ "version": "1.0.2",
+ "resolved": "https://registry.npmjs.org/for-in/-/for-in-1.0.2.tgz",
+ "integrity": "sha1-gQaNKVqBQuwKxybG4iAMMPttXoA=",
+ "dev": true
+ },
+ "fragment-cache": {
+ "version": "0.2.1",
+ "resolved": "https://registry.npmjs.org/fragment-cache/-/fragment-cache-0.2.1.tgz",
+ "integrity": "sha1-QpD60n8T6Jvn8zeZxrxaCr//DRk=",
+ "dev": true,
+ "requires": {
+ "map-cache": "^0.2.2"
+ }
+ },
+ "freesewing": {
+ "version": "0.30.6",
+ "resolved": "https://registry.npmjs.org/freesewing/-/freesewing-0.30.6.tgz",
+ "integrity": "sha512-iacKTnjNCzMyMcIfutMm7UHO51ewgtpZ5TTkL7gho0nZyAvjdwreNw5yrEej73nhr7zobGQqOijw+z3JdPNQ8w==",
+ "requires": {
+ "bezier-js": "2.3.2",
+ "bin-pack": "1.0.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
+ },
+ "functional-red-black-tree": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/functional-red-black-tree/-/functional-red-black-tree-1.0.1.tgz",
+ "integrity": "sha1-GwqzvVU7Kg1jmdKcDj6gslIHgyc=",
+ "dev": true
+ },
+ "g-status": {
+ "version": "2.0.2",
+ "resolved": "https://registry.npmjs.org/g-status/-/g-status-2.0.2.tgz",
+ "integrity": "sha512-kQoE9qH+T1AHKgSSD0Hkv98bobE90ILQcXAF4wvGgsr7uFqNvwmh8j+Lq3l0RVt3E3HjSbv2B9biEGcEtpHLCA==",
+ "dev": true,
+ "requires": {
+ "arrify": "^1.0.1",
+ "matcher": "^1.0.0",
+ "simple-git": "^1.85.0"
+ }
+ },
+ "get-own-enumerable-property-symbols": {
+ "version": "3.0.0",
+ "resolved": "https://registry.npmjs.org/get-own-enumerable-property-symbols/-/get-own-enumerable-property-symbols-3.0.0.tgz",
+ "integrity": "sha512-CIJYJC4GGF06TakLg8z4GQKvDsx9EMspVxOYih7LerEL/WosUnFIww45CGfxfeKHqlg3twgUrYRT1O3WQqjGCg==",
+ "dev": true
+ },
+ "get-stdin": {
+ "version": "6.0.0",
+ "resolved": "https://registry.npmjs.org/get-stdin/-/get-stdin-6.0.0.tgz",
+ "integrity": "sha512-jp4tHawyV7+fkkSKyvjuLZswblUtz+SQKzSWnBbii16BuZksJlU1wuBYXY75r+duh/llF1ur6oNwi+2ZzjKZ7g==",
+ "dev": true
+ },
+ "get-stream": {
+ "version": "4.1.0",
+ "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-4.1.0.tgz",
+ "integrity": "sha512-GMat4EJ5161kIy2HevLlr4luNjBgvmj413KaQA7jt4V8B4RDsfpHk7WQ9GVqfYyyx8OS/L66Kox+rJRNklLK7w==",
+ "dev": true,
+ "requires": {
+ "pump": "^3.0.0"
+ }
+ },
+ "get-value": {
+ "version": "2.0.6",
+ "resolved": "https://registry.npmjs.org/get-value/-/get-value-2.0.6.tgz",
+ "integrity": "sha1-3BXKHGcjh8p2vTesCjlbogQqLCg=",
+ "dev": true
+ },
+ "glob": {
+ "version": "7.1.3",
+ "resolved": "https://registry.npmjs.org/glob/-/glob-7.1.3.tgz",
+ "integrity": "sha512-vcfuiIxogLV4DlGBHIUOwI0IbrJ8HWPc4MU7HzviGeNho/UJDfi6B5p3sHeWIQ0KGIU0Jpxi5ZHxemQfLkkAwQ==",
+ "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"
+ }
+ },
+ "globals": {
+ "version": "11.11.0",
+ "resolved": "https://registry.npmjs.org/globals/-/globals-11.11.0.tgz",
+ "integrity": "sha512-WHq43gS+6ufNOEqlrDBxVEbb8ntfXrfAUU2ZOpCxrBdGKW3gyv8mCxAfIBD0DroPKGrJ2eSsXsLtY9MPntsyTw==",
+ "dev": true
+ },
+ "globby": {
+ "version": "6.1.0",
+ "resolved": "https://registry.npmjs.org/globby/-/globby-6.1.0.tgz",
+ "integrity": "sha1-9abXDoOV4hyFj7BInWTfAkJNUGw=",
+ "dev": true,
+ "requires": {
+ "array-union": "^1.0.1",
+ "glob": "^7.0.3",
+ "object-assign": "^4.0.1",
+ "pify": "^2.0.0",
+ "pinkie-promise": "^2.0.0"
+ },
+ "dependencies": {
+ "pify": {
+ "version": "2.3.0",
+ "resolved": "https://registry.npmjs.org/pify/-/pify-2.3.0.tgz",
+ "integrity": "sha1-7RQaasBDqEnqWISY59yosVMw6Qw=",
+ "dev": true
+ }
+ }
+ },
+ "has-ansi": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/has-ansi/-/has-ansi-2.0.0.tgz",
+ "integrity": "sha1-NPUEnOHs3ysGSa8+8k5F7TVBbZE=",
+ "dev": true,
+ "requires": {
+ "ansi-regex": "^2.0.0"
+ },
+ "dependencies": {
+ "ansi-regex": {
+ "version": "2.1.1",
+ "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-2.1.1.tgz",
+ "integrity": "sha1-w7M6te42DYbg5ijwRorn7yfWVN8=",
+ "dev": true
+ }
+ }
+ },
+ "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-value": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/has-value/-/has-value-1.0.0.tgz",
+ "integrity": "sha1-GLKB2lhbHFxR3vJMkw7SmgvmsXc=",
+ "dev": true,
+ "requires": {
+ "get-value": "^2.0.6",
+ "has-values": "^1.0.0",
+ "isobject": "^3.0.0"
+ }
+ },
+ "has-values": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/has-values/-/has-values-1.0.0.tgz",
+ "integrity": "sha1-lbC2P+whRmGab+V/51Yo1aOe/k8=",
+ "dev": true,
+ "requires": {
+ "is-number": "^3.0.0",
+ "kind-of": "^4.0.0"
+ },
+ "dependencies": {
+ "kind-of": {
+ "version": "4.0.0",
+ "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-4.0.0.tgz",
+ "integrity": "sha1-IIE989cSkosgc3hpGkUGb65y3Vc=",
+ "dev": true,
+ "requires": {
+ "is-buffer": "^1.1.5"
+ }
+ }
+ }
+ },
+ "hosted-git-info": {
+ "version": "2.7.1",
+ "resolved": "https://registry.npmjs.org/hosted-git-info/-/hosted-git-info-2.7.1.tgz",
+ "integrity": "sha512-7T/BxH19zbcCTa8XkMlbK5lTo1WtgkFi3GvdWEyNuc4Vex7/9Dqbnpsf4JMydcfj9HCg4zUWFTL3Za6lapg5/w==",
+ "dev": true
+ },
+ "husky": {
+ "version": "1.3.1",
+ "resolved": "https://registry.npmjs.org/husky/-/husky-1.3.1.tgz",
+ "integrity": "sha512-86U6sVVVf4b5NYSZ0yvv88dRgBSSXXmHaiq5pP4KDj5JVzdwKgBjEtUPOm8hcoytezFwbU+7gotXNhpHdystlg==",
+ "dev": true,
+ "requires": {
+ "cosmiconfig": "^5.0.7",
+ "execa": "^1.0.0",
+ "find-up": "^3.0.0",
+ "get-stdin": "^6.0.0",
+ "is-ci": "^2.0.0",
+ "pkg-dir": "^3.0.0",
+ "please-upgrade-node": "^3.1.1",
+ "read-pkg": "^4.0.1",
+ "run-node": "^1.0.0",
+ "slash": "^2.0.0"
+ }
+ },
+ "iconv-lite": {
+ "version": "0.4.24",
+ "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.4.24.tgz",
+ "integrity": "sha512-v3MXnZAcvnywkTUEZomIActle7RXXeedOR31wwl7VlyoXO4Qi9arvSenNQWne1TcRwhCL1HwLI21bEqdpj8/rA==",
+ "dev": true,
+ "requires": {
+ "safer-buffer": ">= 2.1.2 < 3"
+ }
+ },
+ "ignore": {
+ "version": "4.0.6",
+ "resolved": "https://registry.npmjs.org/ignore/-/ignore-4.0.6.tgz",
+ "integrity": "sha512-cyFDKrqc/YdcWFniJhzI42+AzS+gNwmUzOSFcRCQYwySuBBBy/KjuxWLZ/FHEH6Moq1NizMOBWyTcv8O4OZIMg==",
+ "dev": true
+ },
+ "import-fresh": {
+ "version": "3.0.0",
+ "resolved": "https://registry.npmjs.org/import-fresh/-/import-fresh-3.0.0.tgz",
+ "integrity": "sha512-pOnA9tfM3Uwics+SaBLCNyZZZbK+4PTu0OPZtLlMIrv17EdBoC15S9Kn8ckJ9TZTyKb3ywNE5y1yeDxxGA7nTQ==",
+ "dev": true,
+ "requires": {
+ "parent-module": "^1.0.0",
+ "resolve-from": "^4.0.0"
+ }
+ },
+ "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": "3.2.0",
+ "resolved": "https://registry.npmjs.org/indent-string/-/indent-string-3.2.0.tgz",
+ "integrity": "sha1-Sl/W0nzDMvN+VBmlBNu4NxBckok=",
+ "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.3",
+ "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.3.tgz",
+ "integrity": "sha1-Yzwsg+PaQqUC9SRmAiSA9CCCYd4=",
+ "dev": true
+ },
+ "inquirer": {
+ "version": "6.2.2",
+ "resolved": "https://registry.npmjs.org/inquirer/-/inquirer-6.2.2.tgz",
+ "integrity": "sha512-Z2rREiXA6cHRR9KBOarR3WuLlFzlIfAEIiB45ll5SSadMg7WqOh1MKEjjndfuH5ewXdixWCxqnVfGOQzPeiztA==",
+ "dev": true,
+ "requires": {
+ "ansi-escapes": "^3.2.0",
+ "chalk": "^2.4.2",
+ "cli-cursor": "^2.1.0",
+ "cli-width": "^2.0.0",
+ "external-editor": "^3.0.3",
+ "figures": "^2.0.0",
+ "lodash": "^4.17.11",
+ "mute-stream": "0.0.7",
+ "run-async": "^2.2.0",
+ "rxjs": "^6.4.0",
+ "string-width": "^2.1.0",
+ "strip-ansi": "^5.0.0",
+ "through": "^2.3.6"
+ },
+ "dependencies": {
+ "ansi-regex": {
+ "version": "4.0.0",
+ "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-4.0.0.tgz",
+ "integrity": "sha512-iB5Dda8t/UqpPI/IjsejXu5jOGDrzn41wJyljwPH65VCIbk6+1BzFIMJGFwTNrYXT1CrD+B4l19U7awiQ8rk7w==",
+ "dev": true
+ },
+ "strip-ansi": {
+ "version": "5.0.0",
+ "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-5.0.0.tgz",
+ "integrity": "sha512-Uu7gQyZI7J7gn5qLn1Np3G9vcYGTVqB+lFTytnDJv83dd8T22aGH451P3jueT2/QemInJDfxHB5Tde5OzgG1Ow==",
+ "dev": true,
+ "requires": {
+ "ansi-regex": "^4.0.0"
+ }
+ }
+ }
+ },
+ "is-accessor-descriptor": {
+ "version": "0.1.6",
+ "resolved": "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-0.1.6.tgz",
+ "integrity": "sha1-qeEss66Nh2cn7u84Q/igiXtcmNY=",
+ "dev": true,
+ "requires": {
+ "kind-of": "^3.0.2"
+ },
+ "dependencies": {
+ "kind-of": {
+ "version": "3.2.2",
+ "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz",
+ "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=",
+ "dev": true,
+ "requires": {
+ "is-buffer": "^1.1.5"
+ }
+ }
+ }
+ },
+ "is-arrayish": {
+ "version": "0.2.1",
+ "resolved": "https://registry.npmjs.org/is-arrayish/-/is-arrayish-0.2.1.tgz",
+ "integrity": "sha1-d8mYQFJ6qOyxqLppe4BkWnqSap0=",
+ "dev": true
+ },
+ "is-buffer": {
+ "version": "1.1.6",
+ "resolved": "https://registry.npmjs.org/is-buffer/-/is-buffer-1.1.6.tgz",
+ "integrity": "sha512-NcdALwpXkTm5Zvvbk7owOUSvVvBKDgKP5/ewfXEznmQFfs4ZRmanOeKBTjRVjka3QFoN6XJ+9F3USqfHqTaU5w==",
+ "dev": true
+ },
+ "is-ci": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/is-ci/-/is-ci-2.0.0.tgz",
+ "integrity": "sha512-YfJT7rkpQB0updsdHLGWrvhBJfcfzNNawYDNIyQXJz0IViGf75O8EBPKSdvw2rF+LGCsX4FZ8tcr3b19LcZq4w==",
+ "dev": true,
+ "requires": {
+ "ci-info": "^2.0.0"
+ }
+ },
+ "is-data-descriptor": {
+ "version": "0.1.4",
+ "resolved": "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-0.1.4.tgz",
+ "integrity": "sha1-C17mSDiOLIYCgueT8YVv7D8wG1Y=",
+ "dev": true,
+ "requires": {
+ "kind-of": "^3.0.2"
+ },
+ "dependencies": {
+ "kind-of": {
+ "version": "3.2.2",
+ "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz",
+ "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=",
+ "dev": true,
+ "requires": {
+ "is-buffer": "^1.1.5"
+ }
+ }
+ }
+ },
+ "is-descriptor": {
+ "version": "0.1.6",
+ "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-0.1.6.tgz",
+ "integrity": "sha512-avDYr0SB3DwO9zsMov0gKCESFYqCnE4hq/4z3TdUlukEy5t9C0YRq7HLrsN52NAcqXKaepeCD0n+B0arnVG3Hg==",
+ "dev": true,
+ "requires": {
+ "is-accessor-descriptor": "^0.1.6",
+ "is-data-descriptor": "^0.1.4",
+ "kind-of": "^5.0.0"
+ },
+ "dependencies": {
+ "kind-of": {
+ "version": "5.1.0",
+ "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-5.1.0.tgz",
+ "integrity": "sha512-NGEErnH6F2vUuXDh+OlbcKW7/wOcfdRHaZ7VWtqCztfHri/++YKmP51OdWeGPuqCOba6kk2OTe5d02VmTB80Pw==",
+ "dev": true
+ }
+ }
+ },
+ "is-directory": {
+ "version": "0.3.1",
+ "resolved": "https://registry.npmjs.org/is-directory/-/is-directory-0.3.1.tgz",
+ "integrity": "sha1-YTObbyR1/Hcv2cnYP1yFddwVSuE=",
+ "dev": true
+ },
+ "is-extendable": {
+ "version": "0.1.1",
+ "resolved": "https://registry.npmjs.org/is-extendable/-/is-extendable-0.1.1.tgz",
+ "integrity": "sha1-YrEQ4omkcUGOPsNqYX1HLjAd/Ik=",
+ "dev": true
+ },
+ "is-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": "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
+ },
+ "is-glob": {
+ "version": "4.0.0",
+ "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-4.0.0.tgz",
+ "integrity": "sha1-lSHHaEXMJhCoUgPd8ICpWML/q8A=",
+ "dev": true,
+ "requires": {
+ "is-extglob": "^2.1.1"
+ }
+ },
+ "is-module": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/is-module/-/is-module-1.0.0.tgz",
+ "integrity": "sha1-Mlj7afeMFNW4FdZkM2tM/7ZEFZE=",
+ "dev": true
+ },
+ "is-number": {
+ "version": "3.0.0",
+ "resolved": "https://registry.npmjs.org/is-number/-/is-number-3.0.0.tgz",
+ "integrity": "sha1-JP1iAaR4LPUFYcgQJ2r8fRLXEZU=",
+ "dev": true,
+ "requires": {
+ "kind-of": "^3.0.2"
+ },
+ "dependencies": {
+ "kind-of": {
+ "version": "3.2.2",
+ "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz",
+ "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=",
+ "dev": true,
+ "requires": {
+ "is-buffer": "^1.1.5"
+ }
+ }
+ }
+ },
+ "is-obj": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/is-obj/-/is-obj-1.0.1.tgz",
+ "integrity": "sha1-PkcprB9f3gJc19g6iW2rn09n2w8=",
+ "dev": true
+ },
+ "is-observable": {
+ "version": "1.1.0",
+ "resolved": "https://registry.npmjs.org/is-observable/-/is-observable-1.1.0.tgz",
+ "integrity": "sha512-NqCa4Sa2d+u7BWc6CukaObG3Fh+CU9bvixbpcXYhy2VvYS7vVGIdAgnIS5Ks3A/cqk4rebLJ9s8zBstT2aKnIA==",
+ "dev": true,
+ "requires": {
+ "symbol-observable": "^1.1.0"
+ }
+ },
+ "is-path-cwd": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/is-path-cwd/-/is-path-cwd-1.0.0.tgz",
+ "integrity": "sha1-0iXsIxMuie3Tj9p2dHLmLmXxEG0=",
+ "dev": true
+ },
+ "is-path-in-cwd": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/is-path-in-cwd/-/is-path-in-cwd-1.0.1.tgz",
+ "integrity": "sha512-FjV1RTW48E7CWM7eE/J2NJvAEEVektecDBVBE5Hh3nM1Jd0kvhHtX68Pr3xsDf857xt3Y4AkwVULK1Vku62aaQ==",
+ "dev": true,
+ "requires": {
+ "is-path-inside": "^1.0.0"
+ }
+ },
+ "is-path-inside": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/is-path-inside/-/is-path-inside-1.0.1.tgz",
+ "integrity": "sha1-jvW33lBDej/cprToZe96pVy0gDY=",
+ "dev": true,
+ "requires": {
+ "path-is-inside": "^1.0.1"
+ }
+ },
+ "is-plain-object": {
+ "version": "2.0.4",
+ "resolved": "https://registry.npmjs.org/is-plain-object/-/is-plain-object-2.0.4.tgz",
+ "integrity": "sha512-h5PpgXkWitc38BBMYawTYMWJHFZJVnBquFE57xFpjB8pJFiF6gZ+bU+WyI/yqXiFR5mdLsgYNaPe8uao6Uv9Og==",
+ "dev": true,
+ "requires": {
+ "isobject": "^3.0.1"
+ }
+ },
+ "is-promise": {
+ "version": "2.1.0",
+ "resolved": "https://registry.npmjs.org/is-promise/-/is-promise-2.1.0.tgz",
+ "integrity": "sha1-eaKp7OfwlugPNtKy87wWwf9L8/o=",
+ "dev": true
+ },
+ "is-regexp": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/is-regexp/-/is-regexp-1.0.0.tgz",
+ "integrity": "sha1-/S2INUXEa6xaYz57mgnof6LLUGk=",
+ "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-windows": {
+ "version": "1.0.2",
+ "resolved": "https://registry.npmjs.org/is-windows/-/is-windows-1.0.2.tgz",
+ "integrity": "sha512-eXK1UInq2bPmjyX6e3VHIzMLobc4J94i4AWn+Hpq3OU5KkrRC96OAcR3PRJ/pGu6m8TRnBHP9dkXQVsT/COVIA==",
+ "dev": true
+ },
+ "isarray": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz",
+ "integrity": "sha1-u5NdSFgsuhaMBoNJV6VKPgcSTxE=",
+ "dev": true
+ },
+ "isexe": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/isexe/-/isexe-2.0.0.tgz",
+ "integrity": "sha1-6PvzdNxVb/iUehDcsFctYz8s+hA=",
+ "dev": true
+ },
+ "isobject": {
+ "version": "3.0.1",
+ "resolved": "https://registry.npmjs.org/isobject/-/isobject-3.0.1.tgz",
+ "integrity": "sha1-TkMekrEalzFjaqH5yNHMvP2reN8=",
+ "dev": true
+ },
+ "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.12.2",
+ "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-3.12.2.tgz",
+ "integrity": "sha512-QHn/Lh/7HhZ/Twc7vJYQTkjuCa0kaCcDcjK5Zlk2rvnUpy7DxMJ23+Jc2dcyvltwQVg1nygAVlB2oRDFHoRS5Q==",
+ "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
+ },
+ "json-parse-better-errors": {
+ "version": "1.0.2",
+ "resolved": "https://registry.npmjs.org/json-parse-better-errors/-/json-parse-better-errors-1.0.2.tgz",
+ "integrity": "sha512-mrqyZKfX5EhL7hvqcV6WG1yYjnjeuYDzDhhcAAUrq8Po85NBQBJP+ZDUT75qZQ98IkUoBqdkExkukOU7Ts2wrw==",
+ "dev": true
+ },
+ "json-schema-traverse": {
+ "version": "0.4.1",
+ "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-0.4.1.tgz",
+ "integrity": "sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg==",
+ "dev": true
+ },
+ "json-stable-stringify-without-jsonify": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/json-stable-stringify-without-jsonify/-/json-stable-stringify-without-jsonify-1.0.1.tgz",
+ "integrity": "sha1-nbe1lJatPzz+8wp1FC0tkwrXJlE=",
+ "dev": true
+ },
+ "json5": {
+ "version": "2.1.0",
+ "resolved": "https://registry.npmjs.org/json5/-/json5-2.1.0.tgz",
+ "integrity": "sha512-8Mh9h6xViijj36g7Dxi+Y4S6hNGV96vcJZr/SrlHh1LR/pEn/8j/+qIBbs44YKl69Lrfctp4QD+AdWLTMqEZAQ==",
+ "dev": true,
+ "requires": {
+ "minimist": "^1.2.0"
+ }
+ },
+ "kind-of": {
+ "version": "6.0.2",
+ "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-6.0.2.tgz",
+ "integrity": "sha512-s5kLOcnH0XqDO+FvuaLX8DDjZ18CGFk7VygH40QoKPUQhW4e2rvM0rwUq0t8IQDOwYSeLK01U90OjzBTme2QqA==",
+ "dev": true
+ },
+ "levn": {
+ "version": "0.3.0",
+ "resolved": "https://registry.npmjs.org/levn/-/levn-0.3.0.tgz",
+ "integrity": "sha1-OwmSTt+fCDwEkP3UwLxEIeBHZO4=",
+ "dev": true,
+ "requires": {
+ "prelude-ls": "~1.1.2",
+ "type-check": "~0.3.2"
+ }
+ },
+ "lint-staged": {
+ "version": "8.1.5",
+ "resolved": "https://registry.npmjs.org/lint-staged/-/lint-staged-8.1.5.tgz",
+ "integrity": "sha512-e5ZavfnSLcBJE1BTzRTqw6ly8OkqVyO3GL2M6teSmTBYQ/2BuueD5GIt2RPsP31u/vjKdexUyDCxSyK75q4BDA==",
+ "dev": true,
+ "requires": {
+ "chalk": "^2.3.1",
+ "commander": "^2.14.1",
+ "cosmiconfig": "^5.0.2",
+ "debug": "^3.1.0",
+ "dedent": "^0.7.0",
+ "del": "^3.0.0",
+ "execa": "^1.0.0",
+ "find-parent-dir": "^0.3.0",
+ "g-status": "^2.0.2",
+ "is-glob": "^4.0.0",
+ "is-windows": "^1.0.2",
+ "listr": "^0.14.2",
+ "listr-update-renderer": "^0.5.0",
+ "lodash": "^4.17.11",
+ "log-symbols": "^2.2.0",
+ "micromatch": "^3.1.8",
+ "npm-which": "^3.0.1",
+ "p-map": "^1.1.1",
+ "path-is-inside": "^1.0.2",
+ "pify": "^3.0.0",
+ "please-upgrade-node": "^3.0.2",
+ "staged-git-files": "1.1.2",
+ "string-argv": "^0.0.2",
+ "stringify-object": "^3.2.2",
+ "yup": "^0.26.10"
+ },
+ "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"
+ }
+ }
+ }
+ },
+ "listr": {
+ "version": "0.14.3",
+ "resolved": "https://registry.npmjs.org/listr/-/listr-0.14.3.tgz",
+ "integrity": "sha512-RmAl7su35BFd/xoMamRjpIE4j3v+L28o8CT5YhAXQJm1fD+1l9ngXY8JAQRJ+tFK2i5njvi0iRUKV09vPwA0iA==",
+ "dev": true,
+ "requires": {
+ "@samverschueren/stream-to-observable": "^0.3.0",
+ "is-observable": "^1.1.0",
+ "is-promise": "^2.1.0",
+ "is-stream": "^1.1.0",
+ "listr-silent-renderer": "^1.1.1",
+ "listr-update-renderer": "^0.5.0",
+ "listr-verbose-renderer": "^0.5.0",
+ "p-map": "^2.0.0",
+ "rxjs": "^6.3.3"
+ },
+ "dependencies": {
+ "p-map": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/p-map/-/p-map-2.0.0.tgz",
+ "integrity": "sha512-GO107XdrSUmtHxVoi60qc9tUl/KkNKm+X2CF4P9amalpGxv5YqVPJNfSb0wcA+syCopkZvYYIzW8OVTQW59x/w==",
+ "dev": true
+ }
+ }
+ },
+ "listr-silent-renderer": {
+ "version": "1.1.1",
+ "resolved": "https://registry.npmjs.org/listr-silent-renderer/-/listr-silent-renderer-1.1.1.tgz",
+ "integrity": "sha1-kktaN1cVN3C/Go4/v3S4u/P5JC4=",
+ "dev": true
+ },
+ "listr-update-renderer": {
+ "version": "0.5.0",
+ "resolved": "https://registry.npmjs.org/listr-update-renderer/-/listr-update-renderer-0.5.0.tgz",
+ "integrity": "sha512-tKRsZpKz8GSGqoI/+caPmfrypiaq+OQCbd+CovEC24uk1h952lVj5sC7SqyFUm+OaJ5HN/a1YLt5cit2FMNsFA==",
+ "dev": true,
+ "requires": {
+ "chalk": "^1.1.3",
+ "cli-truncate": "^0.2.1",
+ "elegant-spinner": "^1.0.1",
+ "figures": "^1.7.0",
+ "indent-string": "^3.0.0",
+ "log-symbols": "^1.0.2",
+ "log-update": "^2.3.0",
+ "strip-ansi": "^3.0.1"
+ },
+ "dependencies": {
+ "ansi-regex": {
+ "version": "2.1.1",
+ "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-2.1.1.tgz",
+ "integrity": "sha1-w7M6te42DYbg5ijwRorn7yfWVN8=",
+ "dev": true
+ },
+ "ansi-styles": {
+ "version": "2.2.1",
+ "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-2.2.1.tgz",
+ "integrity": "sha1-tDLdM1i2NM914eRmQ2gkBTPB3b4=",
+ "dev": true
+ },
+ "chalk": {
+ "version": "1.1.3",
+ "resolved": "https://registry.npmjs.org/chalk/-/chalk-1.1.3.tgz",
+ "integrity": "sha1-qBFcVeSnAv5NFQq9OHKCKn4J/Jg=",
+ "dev": true,
+ "requires": {
+ "ansi-styles": "^2.2.1",
+ "escape-string-regexp": "^1.0.2",
+ "has-ansi": "^2.0.0",
+ "strip-ansi": "^3.0.0",
+ "supports-color": "^2.0.0"
+ }
+ },
+ "figures": {
+ "version": "1.7.0",
+ "resolved": "https://registry.npmjs.org/figures/-/figures-1.7.0.tgz",
+ "integrity": "sha1-y+Hjr/zxzUS4DK3+0o3Hk6lwHS4=",
+ "dev": true,
+ "requires": {
+ "escape-string-regexp": "^1.0.5",
+ "object-assign": "^4.1.0"
+ }
+ },
+ "log-symbols": {
+ "version": "1.0.2",
+ "resolved": "https://registry.npmjs.org/log-symbols/-/log-symbols-1.0.2.tgz",
+ "integrity": "sha1-N2/3tY6jCGoPCfrMdGF+ylAeGhg=",
+ "dev": true,
+ "requires": {
+ "chalk": "^1.0.0"
+ }
+ },
+ "strip-ansi": {
+ "version": "3.0.1",
+ "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-3.0.1.tgz",
+ "integrity": "sha1-ajhfuIU9lS1f8F0Oiq+UJ43GPc8=",
+ "dev": true,
+ "requires": {
+ "ansi-regex": "^2.0.0"
+ }
+ },
+ "supports-color": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-2.0.0.tgz",
+ "integrity": "sha1-U10EXOa2Nj+kARcIRimZXp3zJMc=",
+ "dev": true
+ }
+ }
+ },
+ "listr-verbose-renderer": {
+ "version": "0.5.0",
+ "resolved": "https://registry.npmjs.org/listr-verbose-renderer/-/listr-verbose-renderer-0.5.0.tgz",
+ "integrity": "sha512-04PDPqSlsqIOaaaGZ+41vq5FejI9auqTInicFRndCBgE3bXG8D6W1I+mWhk+1nqbHmyhla/6BUrd5OSiHwKRXw==",
+ "dev": true,
+ "requires": {
+ "chalk": "^2.4.1",
+ "cli-cursor": "^2.1.0",
+ "date-fns": "^1.27.2",
+ "figures": "^2.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"
+ }
+ },
+ "lodash": {
+ "version": "4.17.11",
+ "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.11.tgz",
+ "integrity": "sha512-cQKh8igo5QUhZ7lg38DYWAxMvjSAKG0A8wGSVimP07SIUEK2UO+arSRKbRZWtelMtN5V0Hkwh5ryOto/SshYIg==",
+ "dev": true
+ },
+ "lodash.get": {
+ "version": "4.4.2",
+ "resolved": "https://registry.npmjs.org/lodash.get/-/lodash.get-4.4.2.tgz",
+ "integrity": "sha1-LRd/ZS+jHpObRDjVNBSZ36OCXpk=",
+ "dev": true
+ },
+ "lodash.isplainobject": {
+ "version": "4.0.6",
+ "resolved": "https://registry.npmjs.org/lodash.isplainobject/-/lodash.isplainobject-4.0.6.tgz",
+ "integrity": "sha1-fFJqUtibRcRcxpC4gWO+BJf1UMs=",
+ "dev": true
+ },
+ "lodash.some": {
+ "version": "4.6.0",
+ "resolved": "https://registry.npmjs.org/lodash.some/-/lodash.some-4.6.0.tgz",
+ "integrity": "sha1-G7nzFO9ri63tE7VJFpsqlF62jk0=",
+ "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==",
+ "dev": true,
+ "requires": {
+ "chalk": "^2.0.1"
+ }
+ },
+ "log-update": {
+ "version": "2.3.0",
+ "resolved": "https://registry.npmjs.org/log-update/-/log-update-2.3.0.tgz",
+ "integrity": "sha1-iDKP19HOeTiykoN0bwsbwSayRwg=",
+ "dev": true,
+ "requires": {
+ "ansi-escapes": "^3.0.0",
+ "cli-cursor": "^2.0.0",
+ "wrap-ansi": "^3.0.1"
+ }
+ },
+ "map-cache": {
+ "version": "0.2.2",
+ "resolved": "https://registry.npmjs.org/map-cache/-/map-cache-0.2.2.tgz",
+ "integrity": "sha1-wyq9C9ZSXZsFFkW7TyasXcmKDb8=",
+ "dev": true
+ },
+ "map-visit": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/map-visit/-/map-visit-1.0.0.tgz",
+ "integrity": "sha1-7Nyo8TFE5mDxtb1B8S80edmN+48=",
+ "dev": true,
+ "requires": {
+ "object-visit": "^1.0.0"
+ }
+ },
+ "matcher": {
+ "version": "1.1.1",
+ "resolved": "https://registry.npmjs.org/matcher/-/matcher-1.1.1.tgz",
+ "integrity": "sha512-+BmqxWIubKTRKNWx/ahnCkk3mG8m7OturVlqq6HiojGJTd5hVYbgZm6WzcYPCoB+KBT4Vd6R7WSRG2OADNaCjg==",
+ "dev": true,
+ "requires": {
+ "escape-string-regexp": "^1.0.4"
+ }
+ },
+ "micromatch": {
+ "version": "3.1.10",
+ "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-3.1.10.tgz",
+ "integrity": "sha512-MWikgl9n9M3w+bpsY3He8L+w9eF9338xRl8IAO5viDizwSzziFEyUzo2xrrloB64ADbTf8uA8vRqqttDTOmccg==",
+ "dev": true,
+ "requires": {
+ "arr-diff": "^4.0.0",
+ "array-unique": "^0.3.2",
+ "braces": "^2.3.1",
+ "define-property": "^2.0.2",
+ "extend-shallow": "^3.0.2",
+ "extglob": "^2.0.4",
+ "fragment-cache": "^0.2.1",
+ "kind-of": "^6.0.2",
+ "nanomatch": "^1.2.9",
+ "object.pick": "^1.3.0",
+ "regex-not": "^1.0.0",
+ "snapdragon": "^0.8.1",
+ "to-regex": "^3.0.2"
+ }
+ },
+ "mimic-fn": {
+ "version": "1.2.0",
+ "resolved": "https://registry.npmjs.org/mimic-fn/-/mimic-fn-1.2.0.tgz",
+ "integrity": "sha512-jf84uxzwiuiIVKiOLpfYk7N46TSy8ubTonmneY9vrpHNAnp0QBt2BxWV9dO3/j+BoVAb+a5G6YDPW3M5HOdMWQ==",
+ "dev": true
+ },
+ "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.0",
+ "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.0.tgz",
+ "integrity": "sha1-o1AIsg9BOD7sH7kU9M1d95omQoQ=",
+ "dev": true
+ },
+ "mixin-deep": {
+ "version": "1.3.1",
+ "resolved": "https://registry.npmjs.org/mixin-deep/-/mixin-deep-1.3.1.tgz",
+ "integrity": "sha512-8ZItLHeEgaqEvd5lYBXfm4EZSFCX29Jb9K+lAHhDKzReKBQKj3R+7NOF6tjqYi9t4oI8VUfaWITJQm86wnXGNQ==",
+ "dev": true,
+ "requires": {
+ "for-in": "^1.0.2",
+ "is-extendable": "^1.0.1"
+ },
+ "dependencies": {
+ "is-extendable": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/is-extendable/-/is-extendable-1.0.1.tgz",
+ "integrity": "sha512-arnXMxT1hhoKo9k1LZdmlNyJdDDfy2v0fXjFlmok4+i8ul/6WlbVge9bhM74OpNPQPMGUToDtz+KXa1PneJxOA==",
+ "dev": true,
+ "requires": {
+ "is-plain-object": "^2.0.4"
+ }
+ }
+ }
+ },
+ "mkdirp": {
+ "version": "0.5.1",
+ "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-0.5.1.tgz",
+ "integrity": "sha1-MAV0OOrGz3+MR2fzhkjWaX11yQM=",
+ "dev": true,
+ "requires": {
+ "minimist": "0.0.8"
+ },
+ "dependencies": {
+ "minimist": {
+ "version": "0.0.8",
+ "resolved": "https://registry.npmjs.org/minimist/-/minimist-0.0.8.tgz",
+ "integrity": "sha1-hX/Kv8M5fSYluCKCYuhqp6ARsF0=",
+ "dev": true
+ }
+ }
+ },
+ "ms": {
+ "version": "2.1.1",
+ "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.1.tgz",
+ "integrity": "sha512-tgp+dl5cGk28utYktBsrFqA7HKgrhgPsg6Z/EfhWI4gl1Hwq8B/GmY/0oXZ6nF8hDVesS/FpnYaD/kOWhYQvyg==",
+ "dev": true
+ },
+ "mute-stream": {
+ "version": "0.0.7",
+ "resolved": "https://registry.npmjs.org/mute-stream/-/mute-stream-0.0.7.tgz",
+ "integrity": "sha1-MHXOk7whuPq0PhvE2n6BFe0ee6s=",
+ "dev": true
+ },
+ "nanomatch": {
+ "version": "1.2.13",
+ "resolved": "https://registry.npmjs.org/nanomatch/-/nanomatch-1.2.13.tgz",
+ "integrity": "sha512-fpoe2T0RbHwBTBUOftAfBPaDEi06ufaUai0mE6Yn1kacc3SnTErfb/h+X94VXzI64rKFHYImXSvdwGGCmwOqCA==",
+ "dev": true,
+ "requires": {
+ "arr-diff": "^4.0.0",
+ "array-unique": "^0.3.2",
+ "define-property": "^2.0.2",
+ "extend-shallow": "^3.0.2",
+ "fragment-cache": "^0.2.1",
+ "is-windows": "^1.0.2",
+ "kind-of": "^6.0.2",
+ "object.pick": "^1.3.0",
+ "regex-not": "^1.0.0",
+ "snapdragon": "^0.8.1",
+ "to-regex": "^3.0.1"
+ }
+ },
+ "natural-compare": {
+ "version": "1.4.0",
+ "resolved": "https://registry.npmjs.org/natural-compare/-/natural-compare-1.4.0.tgz",
+ "integrity": "sha1-Sr6/7tdUHywnrPspvbvRXI1bpPc=",
+ "dev": true
+ },
+ "nice-try": {
+ "version": "1.0.5",
+ "resolved": "https://registry.npmjs.org/nice-try/-/nice-try-1.0.5.tgz",
+ "integrity": "sha512-1nh45deeb5olNY7eX82BkPO7SSxR5SSYJiPTrTdFUVYwAl8CKMA5N9PjTYkHiRjisVcxcQ1HXdLhx2qxxJzLNQ==",
+ "dev": true
+ },
+ "normalize-package-data": {
+ "version": "2.5.0",
+ "resolved": "https://registry.npmjs.org/normalize-package-data/-/normalize-package-data-2.5.0.tgz",
+ "integrity": "sha512-/5CMN3T0R4XTj4DcGaexo+roZSdSFW/0AOOTROrjxzCG1wrWXEsGbRKevjlIL+ZDE4sZlJr5ED4YW0yqmkK+eA==",
+ "dev": true,
+ "requires": {
+ "hosted-git-info": "^2.1.4",
+ "resolve": "^1.10.0",
+ "semver": "2 || 3 || 4 || 5",
+ "validate-npm-package-license": "^3.0.1"
+ }
+ },
+ "npm-path": {
+ "version": "2.0.4",
+ "resolved": "https://registry.npmjs.org/npm-path/-/npm-path-2.0.4.tgz",
+ "integrity": "sha512-IFsj0R9C7ZdR5cP+ET342q77uSRdtWOlWpih5eC+lu29tIDbNEgDbzgVJ5UFvYHWhxDZ5TFkJafFioO0pPQjCw==",
+ "dev": true,
+ "requires": {
+ "which": "^1.2.10"
+ }
+ },
+ "npm-run-path": {
+ "version": "2.0.2",
+ "resolved": "https://registry.npmjs.org/npm-run-path/-/npm-run-path-2.0.2.tgz",
+ "integrity": "sha1-NakjLfo11wZ7TLLd8jV7GHFTbF8=",
+ "dev": true,
+ "requires": {
+ "path-key": "^2.0.0"
+ }
+ },
+ "npm-which": {
+ "version": "3.0.1",
+ "resolved": "https://registry.npmjs.org/npm-which/-/npm-which-3.0.1.tgz",
+ "integrity": "sha1-kiXybsOihcIJyuZ8OxGmtKtxQKo=",
+ "dev": true,
+ "requires": {
+ "commander": "^2.9.0",
+ "npm-path": "^2.0.2",
+ "which": "^1.2.10"
+ }
+ },
+ "number-is-nan": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/number-is-nan/-/number-is-nan-1.0.1.tgz",
+ "integrity": "sha1-CXtgK1NCKlIsGvuHkDGDNpQaAR0=",
+ "dev": true
+ },
+ "object-assign": {
+ "version": "4.1.1",
+ "resolved": "https://registry.npmjs.org/object-assign/-/object-assign-4.1.1.tgz",
+ "integrity": "sha1-IQmtx5ZYh8/AXLvUQsrIv7s2CGM=",
+ "dev": true
+ },
+ "object-copy": {
+ "version": "0.1.0",
+ "resolved": "https://registry.npmjs.org/object-copy/-/object-copy-0.1.0.tgz",
+ "integrity": "sha1-fn2Fi3gb18mRpBupde04EnVOmYw=",
+ "dev": true,
+ "requires": {
+ "copy-descriptor": "^0.1.0",
+ "define-property": "^0.2.5",
+ "kind-of": "^3.0.3"
+ },
+ "dependencies": {
+ "define-property": {
+ "version": "0.2.5",
+ "resolved": "https://registry.npmjs.org/define-property/-/define-property-0.2.5.tgz",
+ "integrity": "sha1-w1se+RjsPJkPmlvFe+BKrOxcgRY=",
+ "dev": true,
+ "requires": {
+ "is-descriptor": "^0.1.0"
+ }
+ },
+ "kind-of": {
+ "version": "3.2.2",
+ "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz",
+ "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=",
+ "dev": true,
+ "requires": {
+ "is-buffer": "^1.1.5"
+ }
+ }
+ }
+ },
+ "object-visit": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/object-visit/-/object-visit-1.0.1.tgz",
+ "integrity": "sha1-95xEk68MU3e1n+OdOV5BBC3QRbs=",
+ "dev": true,
+ "requires": {
+ "isobject": "^3.0.0"
+ }
+ },
+ "object.pick": {
+ "version": "1.3.0",
+ "resolved": "https://registry.npmjs.org/object.pick/-/object.pick-1.3.0.tgz",
+ "integrity": "sha1-h6EKxMFpS9Lhy/U1kaZhQftd10c=",
+ "dev": true,
+ "requires": {
+ "isobject": "^3.0.1"
+ }
+ },
+ "once": {
+ "version": "1.4.0",
+ "resolved": "https://registry.npmjs.org/once/-/once-1.4.0.tgz",
+ "integrity": "sha1-WDsap3WWHUsROsF9nFC6753Xa9E=",
+ "dev": true,
+ "requires": {
+ "wrappy": "1"
+ }
+ },
+ "onetime": {
+ "version": "2.0.1",
+ "resolved": "https://registry.npmjs.org/onetime/-/onetime-2.0.1.tgz",
+ "integrity": "sha1-BnQoIw/WdEOyeUsiu6UotoZ5YtQ=",
+ "dev": true,
+ "requires": {
+ "mimic-fn": "^1.0.0"
+ }
+ },
+ "optionator": {
+ "version": "0.8.2",
+ "resolved": "https://registry.npmjs.org/optionator/-/optionator-0.8.2.tgz",
+ "integrity": "sha1-NkxeQJ0/TWMB1sC0wFu6UBgK62Q=",
+ "dev": true,
+ "requires": {
+ "deep-is": "~0.1.3",
+ "fast-levenshtein": "~2.0.4",
+ "levn": "~0.3.0",
+ "prelude-ls": "~1.1.2",
+ "type-check": "~0.3.2",
+ "wordwrap": "~1.0.0"
+ }
+ },
+ "os-tmpdir": {
+ "version": "1.0.2",
+ "resolved": "https://registry.npmjs.org/os-tmpdir/-/os-tmpdir-1.0.2.tgz",
+ "integrity": "sha1-u+Z0BseaqFxc/sdm/lc0VV36EnQ=",
+ "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-limit": {
+ "version": "2.1.0",
+ "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-2.1.0.tgz",
+ "integrity": "sha512-NhURkNcrVB+8hNfLuysU8enY5xn2KXphsHBaC2YmRNTZRc7RWusw6apSpdEj3jo4CMb6W9nrF6tTnsJsJeyu6g==",
+ "dev": true,
+ "requires": {
+ "p-try": "^2.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"
+ }
+ },
+ "p-map": {
+ "version": "1.2.0",
+ "resolved": "https://registry.npmjs.org/p-map/-/p-map-1.2.0.tgz",
+ "integrity": "sha512-r6zKACMNhjPJMTl8KcFH4li//gkrXWfbD6feV8l6doRHlzljFWGJ2AP6iKaCJXyZmAUMOPtvbW7EXkbWO/pLEA==",
+ "dev": true
+ },
+ "p-try": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/p-try/-/p-try-2.0.0.tgz",
+ "integrity": "sha512-hMp0onDKIajHfIkdRk3P4CdCmErkYAxxDtP3Wx/4nZ3aGlau2VKh3mZpcuFkH27WQkL/3WBCPOktzA9ZOAnMQQ==",
+ "dev": true
+ },
+ "parent-module": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/parent-module/-/parent-module-1.0.0.tgz",
+ "integrity": "sha512-8Mf5juOMmiE4FcmzYc4IaiS9L3+9paz2KOiXzkRviCP6aDmN49Hz6EMWz0lGNp9pX80GvvAuLADtyGfW/Em3TA==",
+ "dev": true,
+ "requires": {
+ "callsites": "^3.0.0"
+ }
+ },
+ "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"
+ }
+ },
+ "pascalcase": {
+ "version": "0.1.1",
+ "resolved": "https://registry.npmjs.org/pascalcase/-/pascalcase-0.1.1.tgz",
+ "integrity": "sha1-s2PlXoAGym/iF4TS2yK9FdeRfxQ=",
+ "dev": true
+ },
+ "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
+ },
+ "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-is-inside": {
+ "version": "1.0.2",
+ "resolved": "https://registry.npmjs.org/path-is-inside/-/path-is-inside-1.0.2.tgz",
+ "integrity": "sha1-NlQX3t5EQw0cEa9hAn+s8HS9/FM=",
+ "dev": true
+ },
+ "path-key": {
+ "version": "2.0.1",
+ "resolved": "https://registry.npmjs.org/path-key/-/path-key-2.0.1.tgz",
+ "integrity": "sha1-QRyttXTFoUDTpLGRDUDYDMn0C0A=",
+ "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
+ },
+ "pify": {
+ "version": "3.0.0",
+ "resolved": "https://registry.npmjs.org/pify/-/pify-3.0.0.tgz",
+ "integrity": "sha1-5aSs0sEB/fPZpNB/DbxNtJ3SgXY=",
+ "dev": true
+ },
+ "pinkie": {
+ "version": "2.0.4",
+ "resolved": "https://registry.npmjs.org/pinkie/-/pinkie-2.0.4.tgz",
+ "integrity": "sha1-clVrgM+g1IqXToDnckjoDtT3+HA=",
+ "dev": true
+ },
+ "pinkie-promise": {
+ "version": "2.0.1",
+ "resolved": "https://registry.npmjs.org/pinkie-promise/-/pinkie-promise-2.0.1.tgz",
+ "integrity": "sha1-ITXW36ejWMBprJsXh3YogihFD/o=",
+ "dev": true,
+ "requires": {
+ "pinkie": "^2.0.0"
+ }
+ },
+ "pkg-dir": {
+ "version": "3.0.0",
+ "resolved": "https://registry.npmjs.org/pkg-dir/-/pkg-dir-3.0.0.tgz",
+ "integrity": "sha512-/E57AYkoeQ25qkxMj5PBOVgF8Kiu/h7cYS30Z5+R7WaiCCBfLq58ZI/dSeaEKb9WVJV5n/03QwrN3IeWIFllvw==",
+ "dev": true,
+ "requires": {
+ "find-up": "^3.0.0"
+ }
+ },
+ "please-upgrade-node": {
+ "version": "3.1.1",
+ "resolved": "https://registry.npmjs.org/please-upgrade-node/-/please-upgrade-node-3.1.1.tgz",
+ "integrity": "sha512-KY1uHnQ2NlQHqIJQpnh/i54rKkuxCEBx+voJIS/Mvb+L2iYd2NMotwduhKTMjfC1uKoX3VXOxLjIYG66dfJTVQ==",
+ "dev": true,
+ "requires": {
+ "semver-compare": "^1.0.0"
+ }
+ },
+ "posix-character-classes": {
+ "version": "0.1.1",
+ "resolved": "https://registry.npmjs.org/posix-character-classes/-/posix-character-classes-0.1.1.tgz",
+ "integrity": "sha1-AerA/jta9xoqbAL+q7jB/vfgDqs=",
+ "dev": true
+ },
+ "prelude-ls": {
+ "version": "1.1.2",
+ "resolved": "https://registry.npmjs.org/prelude-ls/-/prelude-ls-1.1.2.tgz",
+ "integrity": "sha1-IZMqVJ9eUv/ZqCf1cOBL5iqX2lQ=",
+ "dev": true
+ },
+ "prettier": {
+ "version": "1.16.4",
+ "resolved": "https://registry.npmjs.org/prettier/-/prettier-1.16.4.tgz",
+ "integrity": "sha512-ZzWuos7TI5CKUeQAtFd6Zhm2s6EpAD/ZLApIhsF9pRvRtM1RFo61dM/4MSRUA0SuLugA/zgrZD8m0BaY46Og7g==",
+ "dev": true
+ },
+ "prettier-linter-helpers": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/prettier-linter-helpers/-/prettier-linter-helpers-1.0.0.tgz",
+ "integrity": "sha512-GbK2cP9nraSSUF9N2XwUwqfzlAFlMNYYl+ShE/V+H8a9uNl/oUqB1w2EL54Jh0OlyRSd8RfWYJ3coVS4TROP2w==",
+ "dev": true,
+ "requires": {
+ "fast-diff": "^1.1.2"
+ }
+ },
+ "progress": {
+ "version": "2.0.3",
+ "resolved": "https://registry.npmjs.org/progress/-/progress-2.0.3.tgz",
+ "integrity": "sha512-7PiHtLll5LdnKIMw100I+8xJXR5gW2QwWYkT6iJva0bXitZKa/XMrSbdmg3r2Xnaidz9Qumd0VPaMrZlF9V9sA==",
+ "dev": true
+ },
+ "property-expr": {
+ "version": "1.5.1",
+ "resolved": "https://registry.npmjs.org/property-expr/-/property-expr-1.5.1.tgz",
+ "integrity": "sha512-CGuc0VUTGthpJXL36ydB6jnbyOf/rAHFvmVrJlH+Rg0DqqLFQGAP6hIaxD/G0OAmBJPhXDHuEJigrp0e0wFV6g==",
+ "dev": true
+ },
+ "pump": {
+ "version": "3.0.0",
+ "resolved": "https://registry.npmjs.org/pump/-/pump-3.0.0.tgz",
+ "integrity": "sha512-LwZy+p3SFs1Pytd/jYct4wpv49HiYCqd9Rlc5ZVdk0V+8Yzv6jR5Blk3TRmPL1ft69TxP0IMZGJ+WPFU2BFhww==",
+ "dev": true,
+ "requires": {
+ "end-of-stream": "^1.1.0",
+ "once": "^1.3.1"
+ }
+ },
+ "punycode": {
+ "version": "2.1.1",
+ "resolved": "https://registry.npmjs.org/punycode/-/punycode-2.1.1.tgz",
+ "integrity": "sha512-XRsRjdf+j5ml+y/6GKHPZbrF/8p2Yga0JPtdqTIY2Xe5ohJPD9saDJJLPvp9+NSBprVvevdXZybnj2cv8OEd0A==",
+ "dev": true
+ },
+ "read-pkg": {
+ "version": "4.0.1",
+ "resolved": "https://registry.npmjs.org/read-pkg/-/read-pkg-4.0.1.tgz",
+ "integrity": "sha1-ljYlN48+HE1IyFhytabsfV0JMjc=",
+ "dev": true,
+ "requires": {
+ "normalize-package-data": "^2.3.2",
+ "parse-json": "^4.0.0",
+ "pify": "^3.0.0"
+ }
+ },
+ "regenerator-runtime": {
+ "version": "0.12.1",
+ "resolved": "https://registry.npmjs.org/regenerator-runtime/-/regenerator-runtime-0.12.1.tgz",
+ "integrity": "sha512-odxIc1/vDlo4iZcfXqRYFj0vpXFNoGdKMAUieAlFYO6m/nl5e9KR/beGf41z4a1FI+aQgtjhuaSlDxQ0hmkrHg==",
+ "dev": true
+ },
+ "regex-not": {
+ "version": "1.0.2",
+ "resolved": "https://registry.npmjs.org/regex-not/-/regex-not-1.0.2.tgz",
+ "integrity": "sha512-J6SDjUgDxQj5NusnOtdFxDwN/+HWykR8GELwctJ7mdqhcyy1xEc4SRFHUXvxTp661YaVKAjfRLZ9cCqS6tn32A==",
+ "dev": true,
+ "requires": {
+ "extend-shallow": "^3.0.2",
+ "safe-regex": "^1.1.0"
+ }
+ },
+ "regexpp": {
+ "version": "2.0.1",
+ "resolved": "https://registry.npmjs.org/regexpp/-/regexpp-2.0.1.tgz",
+ "integrity": "sha512-lv0M6+TkDVniA3aD1Eg0DVpfU/booSu7Eev3TDO/mZKHBfVjgCGTV4t4buppESEYDtkArYFOxTJWv6S5C+iaNw==",
+ "dev": true
+ },
+ "repeat-element": {
+ "version": "1.1.3",
+ "resolved": "https://registry.npmjs.org/repeat-element/-/repeat-element-1.1.3.tgz",
+ "integrity": "sha512-ahGq0ZnV5m5XtZLMb+vP76kcAM5nkLqk0lpqAuojSKGgQtn4eRi4ZZGm2olo2zKFH+sMsWaqOCW1dqAnOru72g==",
+ "dev": true
+ },
+ "repeat-string": {
+ "version": "1.6.1",
+ "resolved": "https://registry.npmjs.org/repeat-string/-/repeat-string-1.6.1.tgz",
+ "integrity": "sha1-jcrkcOHIirwtYA//Sndihtp15jc=",
+ "dev": true
+ },
+ "resolve": {
+ "version": "1.10.0",
+ "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.10.0.tgz",
+ "integrity": "sha512-3sUr9aq5OfSg2S9pNtPA9hL1FVEAjvfOC4leW0SNf/mpnaakz2a9femSd6LqAww2RaFctwyf1lCqnTHuF1rxDg==",
+ "dev": true,
+ "requires": {
+ "path-parse": "^1.0.6"
+ }
+ },
+ "resolve-from": {
+ "version": "4.0.0",
+ "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-4.0.0.tgz",
+ "integrity": "sha512-pb/MYmXstAkysRFx8piNI1tGFNQIFA3vkE3Gq4EuA1dF6gHp/+vgZqsCGJapvy8N3Q+4o7FwvquPJcnZ7RYy4g==",
+ "dev": true
+ },
+ "resolve-url": {
+ "version": "0.2.1",
+ "resolved": "https://registry.npmjs.org/resolve-url/-/resolve-url-0.2.1.tgz",
+ "integrity": "sha1-LGN/53yJOv0qZj/iGqkIAGjiBSo=",
+ "dev": true
+ },
+ "restore-cursor": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/restore-cursor/-/restore-cursor-2.0.0.tgz",
+ "integrity": "sha1-n37ih/gv0ybU/RYpI9YhKe7g368=",
+ "dev": true,
+ "requires": {
+ "onetime": "^2.0.0",
+ "signal-exit": "^3.0.2"
+ }
+ },
+ "ret": {
+ "version": "0.1.15",
+ "resolved": "https://registry.npmjs.org/ret/-/ret-0.1.15.tgz",
+ "integrity": "sha512-TTlYpa+OL+vMMNG24xSlQGEJ3B/RzEfUlLct7b5G/ytav+wPrplCpVMFuwzXbkecJrb6IYo1iFb0S9v37754mg==",
+ "dev": true
+ },
+ "rimraf": {
+ "version": "2.6.3",
+ "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-2.6.3.tgz",
+ "integrity": "sha512-mwqeW5XsA2qAejG46gYdENaxXjx9onRNCfn7L0duuP4hCuTIi/QO7PDK07KJfp1d+izWPrzEJDcSqBa0OZQriA==",
+ "dev": true,
+ "requires": {
+ "glob": "^7.1.3"
+ }
+ },
+ "rollup": {
+ "version": "1.4.0",
+ "resolved": "https://registry.npmjs.org/rollup/-/rollup-1.4.0.tgz",
+ "integrity": "sha512-E5HP4rgvAqkXQNYfNHgCDnX5HDHwAPDLUVSNp8iTmT49vY34G0DxEfhjPWnqnFi7v0vQtDGkKl2hvLfmsMvmcA==",
+ "dev": true,
+ "requires": {
+ "@types/estree": "0.0.39",
+ "@types/node": "^11.9.5",
+ "acorn": "^6.1.1"
+ }
+ },
+ "rollup-plugin-babel": {
+ "version": "4.3.2",
+ "resolved": "https://registry.npmjs.org/rollup-plugin-babel/-/rollup-plugin-babel-4.3.2.tgz",
+ "integrity": "sha512-KfnizE258L/4enADKX61ozfwGHoqYauvoofghFJBhFnpH9Sb9dNPpWg8QHOaAfVASUYV8w0mCx430i9z0LJoJg==",
+ "dev": true,
+ "requires": {
+ "@babel/helper-module-imports": "^7.0.0",
+ "rollup-pluginutils": "^2.3.0"
+ }
+ },
+ "rollup-plugin-babel-minify": {
+ "version": "7.0.0",
+ "resolved": "https://registry.npmjs.org/rollup-plugin-babel-minify/-/rollup-plugin-babel-minify-7.0.0.tgz",
+ "integrity": "sha512-ExLkt1yo1iNXVADxF/pq27/gk7mbGXhMUJybvUHDAw0Qw6F+Th7oWiuOsPcz+ylbmvmRu4l0/V3w1rdJuIT80Q==",
+ "dev": true,
+ "requires": {
+ "@babel/core": "^7.0.0",
+ "@babel/plugin-syntax-dynamic-import": "^7.2.0",
+ "@comandeer/babel-plugin-banner": "^4.0.0",
+ "babel-preset-minify": "^0.5.0",
+ "sourcemap-codec": "^1.4.3"
+ }
+ },
+ "rollup-plugin-json": {
+ "version": "3.1.0",
+ "resolved": "https://registry.npmjs.org/rollup-plugin-json/-/rollup-plugin-json-3.1.0.tgz",
+ "integrity": "sha512-BlYk5VspvGpjz7lAwArVzBXR60JK+4EKtPkCHouAWg39obk9S61hZYJDBfMK+oitPdoe11i69TlxKlMQNFC/Uw==",
+ "dev": true,
+ "requires": {
+ "rollup-pluginutils": "^2.3.1"
+ }
+ },
+ "rollup-plugin-node-resolve": {
+ "version": "4.0.1",
+ "resolved": "https://registry.npmjs.org/rollup-plugin-node-resolve/-/rollup-plugin-node-resolve-4.0.1.tgz",
+ "integrity": "sha512-fSS7YDuCe0gYqKsr5OvxMloeZYUSgN43Ypi1WeRZzQcWtHgFayV5tUSPYpxuaioIIWaBXl6NrVk0T2/sKwueLg==",
+ "dev": true,
+ "requires": {
+ "builtin-modules": "^3.0.0",
+ "is-module": "^1.0.0",
+ "resolve": "^1.10.0"
+ }
+ },
+ "rollup-pluginutils": {
+ "version": "2.4.1",
+ "resolved": "https://registry.npmjs.org/rollup-pluginutils/-/rollup-pluginutils-2.4.1.tgz",
+ "integrity": "sha512-wesMQ9/172IJDIW/lYWm0vW0LiKe5Ekjws481R7z9WTRtmO59cqyM/2uUlxvf6yzm/fElFmHUobeQOYz46dZJw==",
+ "dev": true,
+ "requires": {
+ "estree-walker": "^0.6.0",
+ "micromatch": "^3.1.10"
+ }
+ },
+ "run-async": {
+ "version": "2.3.0",
+ "resolved": "https://registry.npmjs.org/run-async/-/run-async-2.3.0.tgz",
+ "integrity": "sha1-A3GrSuC91yDUFm19/aZP96RFpsA=",
+ "dev": true,
+ "requires": {
+ "is-promise": "^2.1.0"
+ }
+ },
+ "run-node": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/run-node/-/run-node-1.0.0.tgz",
+ "integrity": "sha512-kc120TBlQ3mih1LSzdAJXo4xn/GWS2ec0l3S+syHDXP9uRr0JAT8Qd3mdMuyjqCzeZktgP3try92cEgf9Nks8A==",
+ "dev": true
+ },
+ "rxjs": {
+ "version": "6.4.0",
+ "resolved": "https://registry.npmjs.org/rxjs/-/rxjs-6.4.0.tgz",
+ "integrity": "sha512-Z9Yfa11F6B9Sg/BK9MnqnQ+aQYicPLtilXBp2yUtDt2JRCE0h26d33EnfO3ZxoNxG0T92OUucP3Ct7cpfkdFfw==",
+ "dev": true,
+ "requires": {
+ "tslib": "^1.9.0"
+ }
+ },
+ "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
+ },
+ "safe-regex": {
+ "version": "1.1.0",
+ "resolved": "https://registry.npmjs.org/safe-regex/-/safe-regex-1.1.0.tgz",
+ "integrity": "sha1-QKNmnzsHfR6UPURinhV91IAjvy4=",
+ "dev": true,
+ "requires": {
+ "ret": "~0.1.10"
+ }
+ },
+ "safer-buffer": {
+ "version": "2.1.2",
+ "resolved": "https://registry.npmjs.org/safer-buffer/-/safer-buffer-2.1.2.tgz",
+ "integrity": "sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg==",
+ "dev": true
+ },
+ "semver": {
+ "version": "5.6.0",
+ "resolved": "https://registry.npmjs.org/semver/-/semver-5.6.0.tgz",
+ "integrity": "sha512-RS9R6R35NYgQn++fkDWaOmqGoj4Ek9gGs+DPxNUZKuwE183xjJroKvyo1IzVFeXvUrvmALy6FWD5xrdJT25gMg==",
+ "dev": true
+ },
+ "semver-compare": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/semver-compare/-/semver-compare-1.0.0.tgz",
+ "integrity": "sha1-De4hahyUGrN+nvsXiPavxf9VN/w=",
+ "dev": true
+ },
+ "set-value": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/set-value/-/set-value-2.0.0.tgz",
+ "integrity": "sha512-hw0yxk9GT/Hr5yJEYnHNKYXkIA8mVJgd9ditYZCe16ZczcaELYYcfvaXesNACk2O8O0nTiPQcQhGUQj8JLzeeg==",
+ "dev": true,
+ "requires": {
+ "extend-shallow": "^2.0.1",
+ "is-extendable": "^0.1.1",
+ "is-plain-object": "^2.0.3",
+ "split-string": "^3.0.1"
+ },
+ "dependencies": {
+ "extend-shallow": {
+ "version": "2.0.1",
+ "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz",
+ "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=",
+ "dev": true,
+ "requires": {
+ "is-extendable": "^0.1.0"
+ }
+ }
+ }
+ },
+ "shebang-command": {
+ "version": "1.2.0",
+ "resolved": "https://registry.npmjs.org/shebang-command/-/shebang-command-1.2.0.tgz",
+ "integrity": "sha1-RKrGW2lbAzmJaMOfNj/uXer98eo=",
+ "dev": true,
+ "requires": {
+ "shebang-regex": "^1.0.0"
+ }
+ },
+ "shebang-regex": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/shebang-regex/-/shebang-regex-1.0.0.tgz",
+ "integrity": "sha1-2kL0l0DAtC2yypcoVxyxkMmO/qM=",
+ "dev": true
+ },
+ "signal-exit": {
+ "version": "3.0.2",
+ "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-3.0.2.tgz",
+ "integrity": "sha1-tf3AjxKH6hF4Yo5BXiUTK3NkbG0=",
+ "dev": true
+ },
+ "simple-git": {
+ "version": "1.107.0",
+ "resolved": "https://registry.npmjs.org/simple-git/-/simple-git-1.107.0.tgz",
+ "integrity": "sha512-t4OK1JRlp4ayKRfcW6owrWcRVLyHRUlhGd0uN6ZZTqfDq8a5XpcUdOKiGRNobHEuMtNqzp0vcJNvhYWwh5PsQA==",
+ "dev": true,
+ "requires": {
+ "debug": "^4.0.1"
+ }
+ },
+ "slash": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/slash/-/slash-2.0.0.tgz",
+ "integrity": "sha512-ZYKh3Wh2z1PpEXWr0MpSBZ0V6mZHAQfYevttO11c51CaWjGTaadiKZ+wVt1PbMlDV5qhMFslpZCemhwOK7C89A==",
+ "dev": true
+ },
+ "slice-ansi": {
+ "version": "2.1.0",
+ "resolved": "https://registry.npmjs.org/slice-ansi/-/slice-ansi-2.1.0.tgz",
+ "integrity": "sha512-Qu+VC3EwYLldKa1fCxuuvULvSJOKEgk9pi8dZeCVK7TqBfUNTH4sFkk4joj8afVSfAYgJoSOetjx9QWOJ5mYoQ==",
+ "dev": true,
+ "requires": {
+ "ansi-styles": "^3.2.0",
+ "astral-regex": "^1.0.0",
+ "is-fullwidth-code-point": "^2.0.0"
+ }
+ },
+ "snapdragon": {
+ "version": "0.8.2",
+ "resolved": "https://registry.npmjs.org/snapdragon/-/snapdragon-0.8.2.tgz",
+ "integrity": "sha512-FtyOnWN/wCHTVXOMwvSv26d+ko5vWlIDD6zoUJ7LW8vh+ZBC8QdljveRP+crNrtBwioEUWy/4dMtbBjA4ioNlg==",
+ "dev": true,
+ "requires": {
+ "base": "^0.11.1",
+ "debug": "^2.2.0",
+ "define-property": "^0.2.5",
+ "extend-shallow": "^2.0.1",
+ "map-cache": "^0.2.2",
+ "source-map": "^0.5.6",
+ "source-map-resolve": "^0.5.0",
+ "use": "^3.1.0"
+ },
+ "dependencies": {
+ "debug": {
+ "version": "2.6.9",
+ "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz",
+ "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==",
+ "dev": true,
+ "requires": {
+ "ms": "2.0.0"
+ }
+ },
+ "define-property": {
+ "version": "0.2.5",
+ "resolved": "https://registry.npmjs.org/define-property/-/define-property-0.2.5.tgz",
+ "integrity": "sha1-w1se+RjsPJkPmlvFe+BKrOxcgRY=",
+ "dev": true,
+ "requires": {
+ "is-descriptor": "^0.1.0"
+ }
+ },
+ "extend-shallow": {
+ "version": "2.0.1",
+ "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz",
+ "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=",
+ "dev": true,
+ "requires": {
+ "is-extendable": "^0.1.0"
+ }
+ },
+ "ms": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz",
+ "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=",
+ "dev": true
+ }
+ }
+ },
+ "snapdragon-node": {
+ "version": "2.1.1",
+ "resolved": "https://registry.npmjs.org/snapdragon-node/-/snapdragon-node-2.1.1.tgz",
+ "integrity": "sha512-O27l4xaMYt/RSQ5TR3vpWCAB5Kb/czIcqUFOM/C4fYcLnbZUc1PkjTAMjof2pBWaSTwOUd6qUHcFGVGj7aIwnw==",
+ "dev": true,
+ "requires": {
+ "define-property": "^1.0.0",
+ "isobject": "^3.0.0",
+ "snapdragon-util": "^3.0.1"
+ },
+ "dependencies": {
+ "define-property": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/define-property/-/define-property-1.0.0.tgz",
+ "integrity": "sha1-dp66rz9KY6rTr56NMEybvnm/sOY=",
+ "dev": true,
+ "requires": {
+ "is-descriptor": "^1.0.0"
+ }
+ },
+ "is-accessor-descriptor": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-1.0.0.tgz",
+ "integrity": "sha512-m5hnHTkcVsPfqx3AKlyttIPb7J+XykHvJP2B9bZDjlhLIoEq4XoK64Vg7boZlVWYK6LUY94dYPEE7Lh0ZkZKcQ==",
+ "dev": true,
+ "requires": {
+ "kind-of": "^6.0.0"
+ }
+ },
+ "is-data-descriptor": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-1.0.0.tgz",
+ "integrity": "sha512-jbRXy1FmtAoCjQkVmIVYwuuqDFUbaOeDjmed1tOGPrsMhtJA4rD9tkgA0F1qJ3gRFRXcHYVkdeaP50Q5rE/jLQ==",
+ "dev": true,
+ "requires": {
+ "kind-of": "^6.0.0"
+ }
+ },
+ "is-descriptor": {
+ "version": "1.0.2",
+ "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-1.0.2.tgz",
+ "integrity": "sha512-2eis5WqQGV7peooDyLmNEPUrps9+SXX5c9pL3xEB+4e9HnGuDa7mB7kHxHw4CbqS9k1T2hOH3miL8n8WtiYVtg==",
+ "dev": true,
+ "requires": {
+ "is-accessor-descriptor": "^1.0.0",
+ "is-data-descriptor": "^1.0.0",
+ "kind-of": "^6.0.2"
+ }
+ }
+ }
+ },
+ "snapdragon-util": {
+ "version": "3.0.1",
+ "resolved": "https://registry.npmjs.org/snapdragon-util/-/snapdragon-util-3.0.1.tgz",
+ "integrity": "sha512-mbKkMdQKsjX4BAL4bRYTj21edOf8cN7XHdYUJEe+Zn99hVEYcMvKPct1IqNe7+AZPirn8BCDOQBHQZknqmKlZQ==",
+ "dev": true,
+ "requires": {
+ "kind-of": "^3.2.0"
+ },
+ "dependencies": {
+ "kind-of": {
+ "version": "3.2.2",
+ "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz",
+ "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=",
+ "dev": true,
+ "requires": {
+ "is-buffer": "^1.1.5"
+ }
+ }
+ }
+ },
+ "source-map": {
+ "version": "0.5.7",
+ "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.5.7.tgz",
+ "integrity": "sha1-igOdLRAh0i0eoUyA2OpGi6LvP8w=",
+ "dev": true
+ },
+ "source-map-resolve": {
+ "version": "0.5.2",
+ "resolved": "https://registry.npmjs.org/source-map-resolve/-/source-map-resolve-0.5.2.tgz",
+ "integrity": "sha512-MjqsvNwyz1s0k81Goz/9vRBe9SZdB09Bdw+/zYyO+3CuPk6fouTaxscHkgtE8jKvf01kVfl8riHzERQ/kefaSA==",
+ "dev": true,
+ "requires": {
+ "atob": "^2.1.1",
+ "decode-uri-component": "^0.2.0",
+ "resolve-url": "^0.2.1",
+ "source-map-url": "^0.4.0",
+ "urix": "^0.1.0"
+ }
+ },
+ "source-map-url": {
+ "version": "0.4.0",
+ "resolved": "https://registry.npmjs.org/source-map-url/-/source-map-url-0.4.0.tgz",
+ "integrity": "sha1-PpNdfd1zYxuXZZlW1VEo6HtQhKM=",
+ "dev": true
+ },
+ "sourcemap-codec": {
+ "version": "1.4.4",
+ "resolved": "https://registry.npmjs.org/sourcemap-codec/-/sourcemap-codec-1.4.4.tgz",
+ "integrity": "sha512-CYAPYdBu34781kLHkaW3m6b/uUSyMOC2R61gcYMWooeuaGtjof86ZA/8T+qVPPt7np1085CR9hmMGrySwEc8Xg==",
+ "dev": true
+ },
+ "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"
+ }
+ },
+ "spdx-license-ids": {
+ "version": "3.0.3",
+ "resolved": "https://registry.npmjs.org/spdx-license-ids/-/spdx-license-ids-3.0.3.tgz",
+ "integrity": "sha512-uBIcIl3Ih6Phe3XHK1NqboJLdGfwr1UN3k6wSD1dZpmPsIkb8AGNbZYJ1fOBk834+Gxy8rpfDxrS6XLEMZMY2g==",
+ "dev": true
+ },
+ "split-string": {
+ "version": "3.1.0",
+ "resolved": "https://registry.npmjs.org/split-string/-/split-string-3.1.0.tgz",
+ "integrity": "sha512-NzNVhJDYpwceVVii8/Hu6DKfD2G+NrQHlS/V/qgv763EYudVwEcMQNxd2lh+0VrUByXN/oJkl5grOhYWvQUYiw==",
+ "dev": true,
+ "requires": {
+ "extend-shallow": "^3.0.0"
+ }
+ },
+ "sprintf-js": {
+ "version": "1.0.3",
+ "resolved": "https://registry.npmjs.org/sprintf-js/-/sprintf-js-1.0.3.tgz",
+ "integrity": "sha1-BOaSb2YolTVPPdAVIDYzuFcpfiw=",
+ "dev": true
+ },
+ "staged-git-files": {
+ "version": "1.1.2",
+ "resolved": "https://registry.npmjs.org/staged-git-files/-/staged-git-files-1.1.2.tgz",
+ "integrity": "sha512-0Eyrk6uXW6tg9PYkhi/V/J4zHp33aNyi2hOCmhFLqLTIhbgqWn5jlSzI+IU0VqrZq6+DbHcabQl/WP6P3BG0QA==",
+ "dev": true
+ },
+ "static-extend": {
+ "version": "0.1.2",
+ "resolved": "https://registry.npmjs.org/static-extend/-/static-extend-0.1.2.tgz",
+ "integrity": "sha1-YICcOcv/VTNyJv1eC1IPNB8ftcY=",
+ "dev": true,
+ "requires": {
+ "define-property": "^0.2.5",
+ "object-copy": "^0.1.0"
+ },
+ "dependencies": {
+ "define-property": {
+ "version": "0.2.5",
+ "resolved": "https://registry.npmjs.org/define-property/-/define-property-0.2.5.tgz",
+ "integrity": "sha1-w1se+RjsPJkPmlvFe+BKrOxcgRY=",
+ "dev": true,
+ "requires": {
+ "is-descriptor": "^0.1.0"
+ }
+ }
+ }
+ },
+ "string-argv": {
+ "version": "0.0.2",
+ "resolved": "https://registry.npmjs.org/string-argv/-/string-argv-0.0.2.tgz",
+ "integrity": "sha1-2sMECGkMIfPDYwo/86BYd73L1zY=",
+ "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"
+ }
+ },
+ "stringify-object": {
+ "version": "3.3.0",
+ "resolved": "https://registry.npmjs.org/stringify-object/-/stringify-object-3.3.0.tgz",
+ "integrity": "sha512-rHqiFh1elqCQ9WPLIC8I0Q/g/wj5J1eMkyoiD6eoQApWHP0FtlK7rqnhmabL5VUY9JQCcqwwvlOaSuutekgyrw==",
+ "dev": true,
+ "requires": {
+ "get-own-enumerable-property-symbols": "^3.0.0",
+ "is-obj": "^1.0.1",
+ "is-regexp": "^1.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"
+ }
+ },
+ "strip-eof": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/strip-eof/-/strip-eof-1.0.0.tgz",
+ "integrity": "sha1-u0P/VZim6wXYm1n80SnJgzE2Br8=",
+ "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=",
+ "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"
+ }
+ },
+ "symbol-observable": {
+ "version": "1.2.0",
+ "resolved": "https://registry.npmjs.org/symbol-observable/-/symbol-observable-1.2.0.tgz",
+ "integrity": "sha512-e900nM8RRtGhlV36KGEU9k65K3mPb1WV70OdjfxlG2EAuM1noi/E/BaW/uMhL7bPEssK8QV57vN3esixjUvcXQ==",
+ "dev": true
+ },
+ "synchronous-promise": {
+ "version": "2.0.6",
+ "resolved": "https://registry.npmjs.org/synchronous-promise/-/synchronous-promise-2.0.6.tgz",
+ "integrity": "sha512-TyOuWLwkmtPL49LHCX1caIwHjRzcVd62+GF6h8W/jHOeZUFHpnd2XJDVuUlaTaLPH1nuu2M69mfHr5XbQJnf/g==",
+ "dev": true
+ },
+ "table": {
+ "version": "5.2.3",
+ "resolved": "https://registry.npmjs.org/table/-/table-5.2.3.tgz",
+ "integrity": "sha512-N2RsDAMvDLvYwFcwbPyF3VmVSSkuF+G1e+8inhBLtHpvwXGw4QRPEZhihQNeEN0i1up6/f6ObCJXNdlRG3YVyQ==",
+ "dev": true,
+ "requires": {
+ "ajv": "^6.9.1",
+ "lodash": "^4.17.11",
+ "slice-ansi": "^2.1.0",
+ "string-width": "^3.0.0"
+ },
+ "dependencies": {
+ "ansi-regex": {
+ "version": "4.0.0",
+ "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-4.0.0.tgz",
+ "integrity": "sha512-iB5Dda8t/UqpPI/IjsejXu5jOGDrzn41wJyljwPH65VCIbk6+1BzFIMJGFwTNrYXT1CrD+B4l19U7awiQ8rk7w==",
+ "dev": true
+ },
+ "string-width": {
+ "version": "3.0.0",
+ "resolved": "https://registry.npmjs.org/string-width/-/string-width-3.0.0.tgz",
+ "integrity": "sha512-rr8CUxBbvOZDUvc5lNIJ+OC1nPVpz+Siw9VBtUjB9b6jZehZLFt0JMCZzShFHIsI8cbhm0EsNIfWJMFV3cu3Ew==",
+ "dev": true,
+ "requires": {
+ "emoji-regex": "^7.0.1",
+ "is-fullwidth-code-point": "^2.0.0",
+ "strip-ansi": "^5.0.0"
+ }
+ },
+ "strip-ansi": {
+ "version": "5.0.0",
+ "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-5.0.0.tgz",
+ "integrity": "sha512-Uu7gQyZI7J7gn5qLn1Np3G9vcYGTVqB+lFTytnDJv83dd8T22aGH451P3jueT2/QemInJDfxHB5Tde5OzgG1Ow==",
+ "dev": true,
+ "requires": {
+ "ansi-regex": "^4.0.0"
+ }
+ }
+ }
+ },
+ "text-table": {
+ "version": "0.2.0",
+ "resolved": "https://registry.npmjs.org/text-table/-/text-table-0.2.0.tgz",
+ "integrity": "sha1-f17oI66AUgfACvLfSoTsP8+lcLQ=",
+ "dev": true
+ },
+ "through": {
+ "version": "2.3.8",
+ "resolved": "https://registry.npmjs.org/through/-/through-2.3.8.tgz",
+ "integrity": "sha1-DdTJ/6q8NXlgsbckEV1+Doai4fU=",
+ "dev": true
+ },
+ "tmp": {
+ "version": "0.0.33",
+ "resolved": "https://registry.npmjs.org/tmp/-/tmp-0.0.33.tgz",
+ "integrity": "sha512-jRCJlojKnZ3addtTOjdIqoRuPEKBvNXcGYqzO6zWZX8KfKEpnGY5jfggJQ3EjKuu8D4bJRr0y+cYJFmYbImXGw==",
+ "dev": true,
+ "requires": {
+ "os-tmpdir": "~1.0.2"
+ }
+ },
+ "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-object-path": {
+ "version": "0.3.0",
+ "resolved": "https://registry.npmjs.org/to-object-path/-/to-object-path-0.3.0.tgz",
+ "integrity": "sha1-KXWIt7Dn4KwI4E5nL4XB9JmeF68=",
+ "dev": true,
+ "requires": {
+ "kind-of": "^3.0.2"
+ },
+ "dependencies": {
+ "kind-of": {
+ "version": "3.2.2",
+ "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz",
+ "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=",
+ "dev": true,
+ "requires": {
+ "is-buffer": "^1.1.5"
+ }
+ }
+ }
+ },
+ "to-regex": {
+ "version": "3.0.2",
+ "resolved": "https://registry.npmjs.org/to-regex/-/to-regex-3.0.2.tgz",
+ "integrity": "sha512-FWtleNAtZ/Ki2qtqej2CXTOayOH9bHDQF+Q48VpWyDXjbYxA4Yz8iDB31zXOBUlOHHKidDbqGVrTUvQMPmBGBw==",
+ "dev": true,
+ "requires": {
+ "define-property": "^2.0.2",
+ "extend-shallow": "^3.0.2",
+ "regex-not": "^1.0.2",
+ "safe-regex": "^1.1.0"
+ }
+ },
+ "to-regex-range": {
+ "version": "2.1.1",
+ "resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-2.1.1.tgz",
+ "integrity": "sha1-fIDBe53+vlmeJzZ+DU3VWQFB2zg=",
+ "dev": true,
+ "requires": {
+ "is-number": "^3.0.0",
+ "repeat-string": "^1.6.1"
+ }
+ },
+ "toposort": {
+ "version": "2.0.2",
+ "resolved": "https://registry.npmjs.org/toposort/-/toposort-2.0.2.tgz",
+ "integrity": "sha1-riF2gXXRVZ1IvvNUILL0li8JwzA=",
+ "dev": true
+ },
+ "trim-right": {
+ "version": "1.0.1",
+ "resolved": "https://registry.npmjs.org/trim-right/-/trim-right-1.0.1.tgz",
+ "integrity": "sha1-yy4SAwZ+DI3h9hQJS5/kVwTqYAM=",
+ "dev": true
+ },
+ "tslib": {
+ "version": "1.9.3",
+ "resolved": "https://registry.npmjs.org/tslib/-/tslib-1.9.3.tgz",
+ "integrity": "sha512-4krF8scpejhaOgqzBEcGM7yDIEfi0/8+8zDRZhNZZ2kjmHJ4hv3zCbQWxoJGz1iw5U0Jl0nma13xzHXcncMavQ==",
+ "dev": true
+ },
+ "type-check": {
+ "version": "0.3.2",
+ "resolved": "https://registry.npmjs.org/type-check/-/type-check-0.3.2.tgz",
+ "integrity": "sha1-WITKtRLPHTVeP7eE8wgEsrUg23I=",
+ "dev": true,
+ "requires": {
+ "prelude-ls": "~1.1.2"
+ }
+ },
+ "union-value": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/union-value/-/union-value-1.0.0.tgz",
+ "integrity": "sha1-XHHDTLW61dzr4+oM0IIHulqhrqQ=",
+ "dev": true,
+ "requires": {
+ "arr-union": "^3.1.0",
+ "get-value": "^2.0.6",
+ "is-extendable": "^0.1.1",
+ "set-value": "^0.4.3"
+ },
+ "dependencies": {
+ "extend-shallow": {
+ "version": "2.0.1",
+ "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz",
+ "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=",
+ "dev": true,
+ "requires": {
+ "is-extendable": "^0.1.0"
+ }
+ },
+ "set-value": {
+ "version": "0.4.3",
+ "resolved": "https://registry.npmjs.org/set-value/-/set-value-0.4.3.tgz",
+ "integrity": "sha1-fbCPnT0i3H945Trzw79GZuzfzPE=",
+ "dev": true,
+ "requires": {
+ "extend-shallow": "^2.0.1",
+ "is-extendable": "^0.1.1",
+ "is-plain-object": "^2.0.1",
+ "to-object-path": "^0.3.0"
+ }
+ }
+ }
+ },
+ "unset-value": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/unset-value/-/unset-value-1.0.0.tgz",
+ "integrity": "sha1-g3aHP30jNRef+x5vw6jtDfyKtVk=",
+ "dev": true,
+ "requires": {
+ "has-value": "^0.3.1",
+ "isobject": "^3.0.0"
+ },
+ "dependencies": {
+ "has-value": {
+ "version": "0.3.1",
+ "resolved": "https://registry.npmjs.org/has-value/-/has-value-0.3.1.tgz",
+ "integrity": "sha1-ex9YutpiyoJ+wKIHgCVlSEWZXh8=",
+ "dev": true,
+ "requires": {
+ "get-value": "^2.0.3",
+ "has-values": "^0.1.4",
+ "isobject": "^2.0.0"
+ },
+ "dependencies": {
+ "isobject": {
+ "version": "2.1.0",
+ "resolved": "https://registry.npmjs.org/isobject/-/isobject-2.1.0.tgz",
+ "integrity": "sha1-8GVWEJaj8dou9GJy+BXIQNh+DIk=",
+ "dev": true,
+ "requires": {
+ "isarray": "1.0.0"
+ }
+ }
+ }
+ },
+ "has-values": {
+ "version": "0.1.4",
+ "resolved": "https://registry.npmjs.org/has-values/-/has-values-0.1.4.tgz",
+ "integrity": "sha1-bWHeldkd/Km5oCCJrThL/49it3E=",
+ "dev": true
+ }
+ }
+ },
+ "uri-js": {
+ "version": "4.2.2",
+ "resolved": "https://registry.npmjs.org/uri-js/-/uri-js-4.2.2.tgz",
+ "integrity": "sha512-KY9Frmirql91X2Qgjry0Wd4Y+YTdrdZheS8TFwvkbLWf/G5KNJDCh6pKL5OZctEW4+0Baa5idK2ZQuELRwPznQ==",
+ "dev": true,
+ "requires": {
+ "punycode": "^2.1.0"
+ }
+ },
+ "urix": {
+ "version": "0.1.0",
+ "resolved": "https://registry.npmjs.org/urix/-/urix-0.1.0.tgz",
+ "integrity": "sha1-2pN/emLiH+wf0Y1Js1wpNQZ6bHI=",
+ "dev": true
+ },
+ "use": {
+ "version": "3.1.1",
+ "resolved": "https://registry.npmjs.org/use/-/use-3.1.1.tgz",
+ "integrity": "sha512-cwESVXlO3url9YWlFW/TA9cshCEhtu7IKJ/p5soJ/gGpj7vbvFrAY/eIioQ6Dw23KjZhYgiIo8HOs1nQ2vr/oQ==",
+ "dev": true
+ },
+ "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"
+ }
+ },
+ "which": {
+ "version": "1.3.1",
+ "resolved": "https://registry.npmjs.org/which/-/which-1.3.1.tgz",
+ "integrity": "sha512-HxJdYWq1MTIQbJ3nw0cqssHoTNU267KlrDuGZ1WYlxDStUtKUhOaJmh112/TZmHxxUfuJqPXSOm7tDyas0OSIQ==",
+ "dev": true,
+ "requires": {
+ "isexe": "^2.0.0"
+ }
+ },
+ "wordwrap": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/wordwrap/-/wordwrap-1.0.0.tgz",
+ "integrity": "sha1-J1hIEIkUVqQXHI0CJkQa3pDLyus=",
+ "dev": true
+ },
+ "wrap-ansi": {
+ "version": "3.0.1",
+ "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-3.0.1.tgz",
+ "integrity": "sha1-KIoE2H7aXChuBg3+jxNc6NAH+Lo=",
+ "dev": true,
+ "requires": {
+ "string-width": "^2.1.1",
+ "strip-ansi": "^4.0.0"
+ }
+ },
+ "wrappy": {
+ "version": "1.0.2",
+ "resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz",
+ "integrity": "sha1-tSQ9jz7BqjXxNkYFvA0QNuMKtp8=",
+ "dev": true
+ },
+ "write": {
+ "version": "1.0.3",
+ "resolved": "https://registry.npmjs.org/write/-/write-1.0.3.tgz",
+ "integrity": "sha512-/lg70HAjtkUgWPVZhZcm+T4hkL8Zbtp1nFNOn3lRrxnlv50SRBv7cR7RqR+GMsd3hUXy9hWBo4CHTbFTcOYwig==",
+ "dev": true,
+ "requires": {
+ "mkdirp": "^0.5.1"
+ }
+ },
+ "yup": {
+ "version": "0.26.10",
+ "resolved": "https://registry.npmjs.org/yup/-/yup-0.26.10.tgz",
+ "integrity": "sha512-keuNEbNSnsOTOuGCt3UJW69jDE3O4P+UHAakO7vSeFMnjaitcmlbij/a3oNb9g1Y1KvSKH/7O1R2PQ4m4TRylw==",
+ "dev": true,
+ "requires": {
+ "@babel/runtime": "7.0.0",
+ "fn-name": "~2.0.1",
+ "lodash": "^4.17.10",
+ "property-expr": "^1.5.0",
+ "synchronous-promise": "^2.0.5",
+ "toposort": "^2.0.2"
+ }
+ }
+ }
+}
diff --git a/packages/jaeger/package.json b/packages/jaeger/package.json
new file mode 100644
index 00000000000..3eeb92610c9
--- /dev/null
+++ b/packages/jaeger/package.json
@@ -0,0 +1,82 @@
+{
+ "version": "0.0.1",
+ "name": "@freesewing/jaeger",
+ "description": "Freesewing pattern for a sport coat style jacket with two buttons and patch pockets",
+ "author": "Joost De Cock (https://github.com/joostdecock)",
+ "license": "MIT",
+ "homepage": "https://github.com/freesewing/jaeger#readme",
+ "repository": "github:freesewing/jaeger",
+ "bugs": {
+ "url": "https://github.com/freesewing/jaeger/issues"
+ },
+ "keywords": [
+ "freesewing",
+ "pattern",
+ "jacket",
+ "blazer",
+ "sportcoat",
+ "sewing"
+ ],
+ "main": "dist/index.js",
+ "module": "dist/index.mjs",
+ "unpkg": "dist/browser.js",
+ "scripts": {
+ "precommit": "npm run pretty && lint-staged",
+ "patch": "npm version patch -m ':bookmark: v%s' && npm run build",
+ "minor": "npm version minor -m ':bookmark: v%s' && npm run build",
+ "major": "npm version major -m ':bookmark: v%s' && npm run build",
+ "test": "echo \"Error: no test specified\" && exit 1",
+ "clean": "rimraf dist",
+ "pretty": "npx prettier --write 'src/*.js'",
+ "lint": "eslint --fix 'src/*.js'",
+ "watch": "nodemon -w src -w config --exec 'rollup -c rollup.js -o dist/browser.js -f iife -m true -n freesewing_patterns_jaeger --footer \"freesewing.patterns.jaeger = freesewing_patterns_jaeger;\"'",
+ "browserbuild": "rollup -c rollup.js -o dist/browser.js -f iife -m true -n freesewing_patterns_jaeger --footer 'freesewing.patterns.jaeger = freesewing_patterns_jaeger;'",
+ "nodebuild": "rollup -c rollup.js -o dist/index.js -f cjs -m true",
+ "modulebuild": "rollup -c rollup.js -o dist/index.mjs -f es -m true",
+ "build": "npm run clean && npm run browserbuild && npm run nodebuild && npm run modulebuild"
+ },
+ "husky": {
+ "hooks": {
+ "pre-commit": "lint-staged"
+ }
+ },
+ "lint-staged": {
+ "*.{js,json}": [
+ "prettier --write",
+ "git add"
+ ]
+ },
+ "dependencies": {
+ "@freesewing/bent": "0.1.1",
+ "@freesewing/plugin-bundle": "latest",
+ "freesewing": "latest"
+ },
+ "devDependencies": {
+ "@babel/core": "latest",
+ "@freesewing/antman": "latest",
+ "@freesewing/models": "latest",
+ "@freesewing/plugin-debug": "latest",
+ "@freesewing/plugin-designer": "latest",
+ "@freesewing/plugin-i18n": "latest",
+ "@freesewing/plugin-theme": "latest",
+ "@freesewing/plugin-validate": "latest",
+ "eslint": "latest",
+ "eslint-config-prettier": "latest",
+ "eslint-plugin-prettier": "latest",
+ "husky": "latest",
+ "lint-staged": "latest",
+ "prettier": "latest",
+ "rimraf": "latest",
+ "rollup": "latest",
+ "rollup-plugin-babel": "latest",
+ "rollup-plugin-babel-minify": "latest",
+ "rollup-plugin-json": "latest",
+ "rollup-plugin-node-resolve": "latest"
+ },
+ "files": [
+ "dist/*",
+ "README.md",
+ "package-lock.json",
+ "package.json"
+ ]
+}
diff --git a/packages/jaeger/rollup.js b/packages/jaeger/rollup.js
new file mode 100644
index 00000000000..c8bde9f365a
--- /dev/null
+++ b/packages/jaeger/rollup.js
@@ -0,0 +1,27 @@
+import babel from "rollup-plugin-babel";
+import resolve from "rollup-plugin-node-resolve";
+import json from "rollup-plugin-json";
+import minify from "rollup-plugin-babel-minify";
+import { name, version, description, author, license } from "./package.json";
+
+export default {
+ input: "src/index.js",
+ plugins: [
+ resolve({ browser: true }),
+ json(),
+ babel({ exclude: "node_modules/**" }),
+ //minify({
+ // comments: false,
+ // sourceMap: true,
+ // banner: `/**\n * ${name} | v${version}\n * ${description}\n * (c) ${new Date().getFullYear()} ${author}\n * @license ${license}\n */`
+ //})
+ ],
+ external: ["freesewing", "@freesewing/bent", "@freesewing/plugin-bundle"],
+ output: {
+ globals: {
+ freesewing: "freesewing",
+ "@freesewing/bent": "freesewing.patterns.bent",
+ "@freesewing/plugin-bundle": "freesewing.plugins.bundle"
+ }
+ }
+};
diff --git a/packages/jaeger/src/back.js b/packages/jaeger/src/back.js
new file mode 100644
index 00000000000..73f46c36e9a
--- /dev/null
+++ b/packages/jaeger/src/back.js
@@ -0,0 +1,131 @@
+export default function(part) {
+ let { sa, snippets, Snippet, utils, store, complete, points, measurements, options, macro, Point, paths, Path } = part.shorthand();
+
+ // Back vent(s)
+ let ventY = points.cbHips.y - points.cbWaistCp2.dy(points.cbHips) * options.backVentLength;
+ if (options.backVent === 1) { // Single back vent
+ // Vent tip
+ points.ventStart = utils.curveIntersectsY(
+ points.cbHips,
+ points.cbHipsCp1,
+ points.cbWaistCp2,
+ points.cbWaist,
+ ventY
+ );
+ paths.ventBase = new Path()
+ .move(points.cbWaist)
+ .curve(points.cbWaistCp2, points.cbHipsCp1, points.cbHips)
+ .split(points.ventStart)
+ .pop()
+ .line(points.cbHem);
+ paths.vent = paths.ventBase.offset(measurements.neckCircumference / 10);
+ paths.vent.render = false;
+ points.ventSlopeStart = utils.lineIntersectsCurve(
+ paths.vent.start(),
+ paths.vent.start().shift(10, measurements.neckCircumference / 5),
+ points.cbHips,
+ points.cbHipsCp1,
+ points.cbWaistCp2,
+ points.cbWaist
+ );
+ } else if (options.backVent === 2) { // Double back vent
+ // Vent tip
+ points.ventStart = utils.curveIntersectsY(
+ points.hips,
+ points.hipsCp2,
+ points.waistCp1,
+ points.waist,
+ ventY
+ );
+ paths.ventBase = new Path()
+ .move(points.waist)
+ .curve(points.waistCp1, points.hipsCp2, points.hips)
+ .split(points.ventStart)
+ .pop()
+ .line(points.hem);
+ paths.vent = paths.ventBase.offset(measurements.neckCircumference / -10);
+ paths.vent.render = false;
+ points.ventSlopeStart = utils.lineIntersectsCurve(
+ paths.vent.start(),
+ paths.vent.start().shift(170, measurements.neckCircumference / 5),
+ points.hips,
+ points.hipsCp2,
+ points.waistCp1,
+ points.waist
+ );
+ }
+
+ // Store shoulder slope
+ store.set("shoulderSlope", Math.abs(points.neck.angle(points.shoulder)-360));
+
+ // Clean up - Remove this to understand what's going on
+ for (let i of Object.keys(paths))
+ if(i !== "vent") delete paths[i];
+ for (let i of Object.keys(snippets)) delete snippets[i];
+
+ // Paths
+ if (options.backVent === 2) {
+ paths.saBase = paths.vent
+ .clone()
+ .reverse()
+ .line(points.ventSlopeStart)
+ .join(new Path()
+ .move(points.hips)
+ .curve(points.hipsCp2, points.waistCp1, points.waist)
+ .split(points.ventSlopeStart)
+ .pop()
+ )
+ paths.saBase.render = true;
+ } else {
+ paths.saBase = new Path()
+ .move(points.hem)
+ .line(points.hips)
+ .curve(points.hipsCp2, points.waistCp1, points.waist)
+ }
+ paths.saBase
+ .curve(points.waistCp2, points.bsArmholeHollowCp2, points.bsArmholeHollow)
+ .curve(points.armholeHollowCp2, points.armholePitchCp1, points.armholePitch)
+ .curve(points.armholePitchCp2, points.shoulderCp1, points.shoulder)
+ .line(points.neck)
+ .curve_(points.neckCp2, points.cbNeck)
+ ._curve(points.cbChestCp1, points.cbChest)
+ .curve(points.cbChestCp2, points.cbWaistCp1, points.cbWaist)
+ if (options.backVent === 1) {
+ paths.saBase = paths.saBase
+ .join(
+ new Path()
+ .move(points.cbWaist)
+ .curve(points.cbWaistCp2, points.cbHipsCp1, points.cbHips)
+ .line(points.cbHem)
+ .split(points.ventSlopeStart)
+ .shift()
+ )
+ .line(paths.vent.start())
+ .join(paths.vent)
+ } else {
+ paths.saBase
+ .curve(points.cbWaistCp2, points.cbHipsCp1, points.cbHips)
+ .line(points.cbHem);
+ }
+ paths.saBase.render = false;
+
+ if (options.backVent === 2) paths.hemBase = new Path().move(points.cbHem).line(paths.vent.end());
+ else if (options.backVent === 1) paths.hemBase = new Path().move(paths.vent.end()).line(points.hem);
+ else paths.hemBase = new Path().move(points.cbHem).line(points.hem);
+ paths.hemBase.render = false;
+
+ paths.seam = paths.saBase.join(paths.hemBase).attr("class", "fabric");
+
+ if (complete) {
+
+ if (sa) {
+ paths.sa = paths.saBase
+ .offset(sa)
+ .join(paths.hemBase.offset(sa * 3))
+ .close()
+ .attr("class", "fabric sa");
+ }
+ }
+
+ return part;
+}
diff --git a/packages/jaeger/src/backbase.js b/packages/jaeger/src/backbase.js
new file mode 100644
index 00000000000..951c96a561b
--- /dev/null
+++ b/packages/jaeger/src/backbase.js
@@ -0,0 +1,65 @@
+import { calculateRatios, backSideBoundary } from "./shared";
+
+export default function(part) {
+ calculateRatios(part);
+ let { store, complete, points, measurements, options, macro, Point, paths, Path } = part.shorthand();
+
+ /**
+ * Shaping the back seam
+ */
+
+ points.cbChest = new Point(0, points.armholePitchCp1.y);
+ if (options.centerBackDart > 0) {
+ points.cbChestCp1 = points.cbChest.shiftFractionTowards(points.cbNeck, 0.5);
+ points.cbNeck = points.cbNeck.shift(0, measurements.chestCircumference * options.centerBackDart);
+ }
+ points.cbChestCp2 = points.cbChest.shift(-90, points.cbChest.dy(points.cbWaist)/3);
+ points.cbWaist = points.cbWaist.shift(0, store.get("waistReductionBack")/2);
+ points.cbWaistCp1 = points.cbWaist.shift(90, points.cbChest.dy(points.cbWaist)/3);
+ points.cbHips = points.cbHips.shift(0, store.get("hipsReductionBack")/2);
+ points.cbHem = points.cbHem.shift(0, store.get("hipsReductionBack")/2);
+ points.cbWaistCp2 = points.cbWaist.shift(-90, points.cbWaist.dy(points.cbHips)/3);
+ points.cbHipsCp1 = points.cbHips.shift(90, points.cbWaist.dy(points.cbHips)/3);
+
+ /**
+ * Shaping the side seam
+ */
+
+ backSideBoundary(part);
+
+ // Divide reduction by 4: two side panels x two sides per panel = 4
+ points.waist = points.bsWaist.shift(180, store.get("waistReductionSide")/4);
+ points.waistCp2 = points.waist.shift(90, points.cbChest.dy(points.waist)/3);
+ points.hips = points.bsHips.shift(180, store.get("hipsReductionSide")/4);
+ points.waistCp1 = points.waist.shift(-90, points.waist.dy(points.hips)/3);
+ points.hipsCp2 = points.hips.shift(90, points.waist.dy(points.hips)/3);
+ points.hem = new Point(points.hips.x, points.hem.y);
+
+ // Store length of back collar
+ store.set("backCollarLength", new Path()
+ .move(points.cbNeck)
+ ._curve(points.neckCp2, points.neck)
+ .length()
+ );
+
+ // Paths
+ paths.cb = new Path().move(points.cbNeck);
+ if (options.centerBackDart > 0)
+ paths.cb._curve(points.cbChestCp1, points.cbChest);
+ else paths.cb.line(points.cbChest);
+
+ paths.cb
+ .curve(points.cbChestCp2, points.cbWaistCp1, points.cbWaist)
+ .curve(points.cbWaistCp2, points.cbHipsCp1, points.cbHips)
+ .line(points.cbHem)
+ .attr("class", "stroke-xl lining")
+
+ paths.bss = new Path()
+ .move(points.armholeHollow)
+ .curve(points.bsArmholeHollowCp2, points.waistCp2, points.waist)
+ .curve(points.waistCp1, points.hipsCp2, points.hips)
+ .line(points.hem)
+ .attr("class", "stroke-xl lining")
+
+ return part;
+}
diff --git a/packages/jaeger/src/chestpocketbag.js b/packages/jaeger/src/chestpocketbag.js
new file mode 100644
index 00000000000..8188de4bfc8
--- /dev/null
+++ b/packages/jaeger/src/chestpocketbag.js
@@ -0,0 +1,32 @@
+export default function(part) {
+ let { sa, snippets, Snippet, utils, store, complete, points, measurements, options, macro, Point, paths, Path } = part.shorthand();
+
+ let width = store.get("chestPocketWidth");
+ let welt = store.get("chestPocketWeltHeight");
+ let height = width * options.chestPocketDepth;
+ let angle = options.chestPocketAngle;
+
+ points.topLeft = new Point(0, 0);
+ points.topRight = points.topLeft.shift(angle, width);
+ points.foldLeft = points.topLeft.shift(-90, height);
+ points.foldRight = new Point(points.topRight.x, points.foldLeft.y);
+ points.bottomLeft = points.topLeft.shift(-90, height*2 + welt);
+ points.bottomRight = points.bottomLeft.shift(-1 * angle, width);
+
+ // Paths
+ paths.seam = new Path()
+ .move(points.topLeft)
+ .line(points.bottomLeft)
+ .line(points.bottomRight)
+ .line(points.topRight)
+ .line(points.topLeft)
+ .close()
+ .attr("class", "lining");
+
+ paths.fold = new Path()
+ .move(points.foldLeft)
+ .line(points.foldRight)
+ .attr("class", "stroke-sm dashed lining");
+
+ return part;
+}
diff --git a/packages/jaeger/src/chestpocketwelt.js b/packages/jaeger/src/chestpocketwelt.js
new file mode 100644
index 00000000000..2e76028b122
--- /dev/null
+++ b/packages/jaeger/src/chestpocketwelt.js
@@ -0,0 +1,36 @@
+export default function(part) {
+ let { sa, snippets, Snippet, utils, store, complete, points, measurements, options, macro, Point, paths, Path } = part.shorthand();
+
+ let width = store.get("chestPocketWidth");
+ let height = store.get("chestPocketWeltHeight");
+ let angle = options.chestPocketAngle;
+
+ points.anchor = new Point(0, 0);
+ points.top = points.anchor.shift(90 - angle, height/2);
+ points.bottom = points.anchor.shift(-90 - angle, height/2);
+ points.topLeft = points.top.shift(180, width/2);
+ points.topRight = points.topLeft.rotate(180, points.top);
+ points.bottomLeft = points.bottom.shift(180, width/2);
+ points.bottomRight = points.bottomLeft.rotate(180, points.bottom);
+ points.foldLeft = points.bottomLeft.flipY(points.topLeft);
+ points.foldRight = points.bottomRight.flipY(points.topLeft);
+
+ // Paths
+ paths.seam = new Path()
+ .move(points.foldLeft)
+ .line(points.topLeft)
+ .line(points.bottomLeft)
+ .line(points.bottomRight)
+ .line(points.topRight)
+ .line(points.foldRight)
+ .line(points.foldLeft)
+ .close()
+ .attr("class", "fabric");
+
+ paths.fold = new Path()
+ .move(points.topLeft)
+ .line(points.topRight)
+ .attr("class", "stroke-sm dashed");
+
+ return part;
+}
diff --git a/packages/jaeger/src/collar.js b/packages/jaeger/src/collar.js
new file mode 100644
index 00000000000..d597969bd68
--- /dev/null
+++ b/packages/jaeger/src/collar.js
@@ -0,0 +1,52 @@
+/*
+ * FIXME
+ *
+ * This collar was ported as-is from the original (PHP) design
+ * I did a few years ago. I think it would benefit from a redesign
+ * but I find collar design to be rather tricky business and
+ * would love the input from someone with more pattern design
+ * experience, or more tailoring exprience.
+ */
+
+export default function(part) {
+ let { sa, snippets, Snippet, utils, store, complete, points, measurements, options, macro, Point, paths, Path } = part.shorthand();
+
+ // Add extra fabric for collar roll
+ points.collarCbTopRoll = points.collarCbTop.shift(-90, options.collarRoll);
+ points.collarCbTopCpRoll = points.collarCbTopCp.shift(-90, options.collarRoll);
+ points.notchTipRoll = points.notch.shiftOutwards(points.notchTip, options.collarRoll);
+
+ // Mirror to create left half
+ let mirror = [
+ "collarstandCbTopCp",
+ "collarstandTip",
+ "notch",
+ "notchTip",
+ "collarCbTopCp",
+ "notchTipRoll",
+ "collarCbTopCpRoll",
+ ];
+ for (let i of mirror) points[i+"Left"] = points[i].flipX(points.collarCbTop);
+
+
+ paths.seam = new Path()
+ .move(points.collarstandCbTop)
+ .curve_(points.collarstandCbTopCpLeft, points.collarstandTipLeft)
+ .line(points.notchLeft)
+ .line(points.notchTipRollLeft)
+ ._curve(points.collarCbTopCpRollLeft, points.collarCbTopRoll)
+ .curve_(points.collarCbTopCpRoll, points.notchTipRoll)
+ .line(points.notch)
+ .line(points.collarstandTip)
+ ._curve(points.collarstandCbTopCp, points.collarstandCbTop)
+ .close()
+ .attr("class", "fabric");
+
+ paths.roll = new Path()
+ .move(points.notchTip)
+ ._curve(points.collarCbTopCp, points.collarCbTop)
+ .curve_(points.collarCbTopCpLeft, points.notchTipLeft)
+ .attr("class", "stroke-sm dashed");
+
+ return part;
+}
diff --git a/packages/jaeger/src/collarstand.js b/packages/jaeger/src/collarstand.js
new file mode 100644
index 00000000000..e70281c365a
--- /dev/null
+++ b/packages/jaeger/src/collarstand.js
@@ -0,0 +1,108 @@
+/*
+ * FIXME
+ *
+ * This collar would benefit from a redesign
+ * but I find collar design to be rather tricky business and
+ * would love the input from someone with more pattern design
+ * experience, or more tailoring exprience.
+ */
+
+export default function(part) {
+ let { sa, snippets, Snippet, utils, store, complete, points, measurements, options, macro, Point, paths, Path } = part.shorthand();
+
+ // Only keep what's relevant from the front part
+ let collarPoints = [
+ 'notch',
+ 'notchTip',
+ 'collarCorner',
+ 'neck',
+ 'shoulderRoll',
+ 'shoulderRollCb',
+ "collarCbTop",
+ 'collarCbHelp',
+ "collarCbBottom",
+ 'lapelBreakPoint'
+ ];
+ for (let i of Object.keys(points)) {
+ if(collarPoints.indexOf(i) === -1) delete points[i];
+ }
+ for (let i of Object.keys(paths)) delete paths[i];
+
+
+ /**
+ * Locate collarstand center back bottom point
+ * We are initially moving this point too far (1.1 x the length)
+ * but we will fix teh length of the curve next
+ * Because the new endpoint is so close to the original, there's no need to
+ * split this curve. We can use the control point as is.
+ */
+ points.collarstandCbBottom = points.collarCorner
+ .shiftOutwards(points.neck, store.get("backCollarLength")*1.1) // * 1.1 = 10% too far
+ .rotate(store.get("shoulderSlope"), points.neck);
+ // Adjust curve to correct length
+ points.collarstandCbBottom = new Path()
+ .move(points.collarCorner)
+ ._curve(points.neck, points.collarstandCbBottom)
+ .shiftAlong(store.get("backCollarLength") + points.collarCorner.dist(points.neck)); // now it's correct
+
+ // Locate collarstand center back top point
+ points.collarCbTopDirection = points.neck.rotate(-90, points.collarstandCbBottom); // right direction, but too far
+ points.collarCbTop = points.collarstandCbBottom.shiftTowards(
+ points.collarCbTopDirection,
+ measurements.neckCircumference * options.collarHeight * 2
+ );
+
+
+ // Rotate points
+ let angle = -1 * points.collarstandCbBottom.angle(points.neck);
+ for (let i of Object.keys(points)) points[i] = points[i].rotate(angle, points.neck);
+
+ // Collarstand center back top point
+ points.collarstandCbTop = points.collarstandCbBottom.shiftFractionTowards(points.collarCbTop, 0.3);
+ points.collarstandCbTopCp = points.collarstandCbTop.shift(
+ points.collarstandCbBottom.angle(points.neck),
+ points.collarstandCbBottom.dist(points.neck)
+ );
+
+ // Spread collar
+ points.notch = points.notch.rotate(options.collarSpread, points.collarCorner);
+ points.notchTip = points.notchTip.rotate(options.collarSpread, points.collarCorner);
+ points.shoulderRoll = points.shoulderRoll.rotate(options.collarSpread, points.collarCorner);
+
+ // Collarstand tip
+ points.collarstandTip = points.collarCorner.shiftFractionTowards(points.shoulderRoll, 0.6);
+
+ // Collar control points
+ points.collarCbTopCp = points.collarCbTop.shift(0, points.collarCbTop.dx(points.notchTip)*0.6);
+
+ // Now draft the collarstand
+ points.leftCollarCorner = points.collarCorner.flipX(points.collarCbTop);
+ points.leftCollarstandTip = points.collarstandTip.flipX(points.collarCbTop);
+ points.leftNeck = points.neck.flipX(points.collarCbTop);
+ points.leftCollarstandCbTopCp = points.collarstandCbTopCp.flipX(points.collarCbTop);
+
+ paths.seam = new Path()
+ .move(points.collarCorner)
+ ._curve(points.neck, points.collarstandCbBottom)
+ .curve_(points.leftNeck, points.leftCollarCorner)
+ .line(points.leftCollarstandTip)
+ ._curve(points.leftCollarstandCbTopCp, points.collarstandCbTop)
+ .curve_(points.collarstandCbTopCp, points.collarstandTip)
+ .line(points.collarCorner)
+ .close()
+ .attr("class", "fabric");
+
+ /*
+ paths.foo = new Path()
+ .move(points.collarCorner)
+ .line(points.notch)
+ .line(points.notchTip)
+ ._curve(points.collarCbTopCp, points.collarCbTop)
+ .move(points.collarCorner)
+ ._curve(points.neck, points.collarstandCbBottom)
+ .line(points.collarstandCbTop)
+ .curve_(points.collarstandCbTopCp, points.collarstandTip)
+ */
+
+ return part;
+}
diff --git a/packages/jaeger/src/front.js b/packages/jaeger/src/front.js
new file mode 100644
index 00000000000..d319060c43d
--- /dev/null
+++ b/packages/jaeger/src/front.js
@@ -0,0 +1,362 @@
+export default function(part) {
+ let { sa, snippets, Snippet, utils, store, complete, points, measurements, options, macro, Point, paths, Path } = part.shorthand();
+
+ // Front closure overlap
+ points.neckEdge = points.cfNeck.shift(180, measurements.chestCircumference * options.frontOverlap);
+ points.hemEdge = new Point(
+ points.neckEdge.x,
+ points.cfHem.y
+ );
+
+ // Chest pocket
+ points.chestPocketAnchor = new Point(
+ points.split.x * options.chestPocketPlacement,
+ points.armholePitchCp1.y
+ );
+ let width = points.split.x * options.chestPocketWidth;
+ let height = width * options.chestPocketWeltSize;
+
+ points.chestPocketTop = points.chestPocketAnchor.shift(90, height/2);
+ points.chestPocketBottom = points.chestPocketAnchor.shift(-90, height/2);
+ points.chestPocketTopLeft = points.chestPocketTop.shift(180 + options.chestPocketAngle, width/2);
+ points.chestPocketTopRight = points.chestPocketTopLeft.rotate(180, points.chestPocketTop);
+ points.chestPocketBottomLeft = points.chestPocketBottom.shift(180 + options.chestPocketAngle, width/2);
+ points.chestPocketBottomRight = points.chestPocketBottomLeft.rotate(180, points.chestPocketBottom);
+ store.set("chestPocketWidth", width);
+ store.set("chestPocketWeltHeight", height);
+
+ // Inner pocket
+ points.innerPocketAnchor = new Point(
+ points.hips.x * options.innerPocketPlacement,
+ points.dartTop.y
+ );
+ width = points.hips.x * options.innerPocketWidth;
+ let weltHeight = width * options.innerPocketWeltHeight;
+ points.innerPocketTop = points.innerPocketAnchor.shift(90, weltHeight);
+ points.innerPocketBottom = points.innerPocketAnchor.shift(-90, weltHeight);
+ points.innerPocketLeft = points.innerPocketAnchor.shift(180, width/2);
+ points.innerPocketRight = points.innerPocketLeft.flipX(points.innerPocketAnchor);
+ points.innerPocketTopLeft = points.innerPocketLeft.shift(90, weltHeight);
+ points.innerPocketTopRight = points.innerPocketTopLeft.flipX(points.innerPocketAnchor);
+ points.innerPocketBottomLeft = points.innerPocketLeft.shift(-90, weltHeight);
+ points.innerPocketBottomRight = points.innerPocketBottomLeft.flipX(points.innerPocketAnchor);
+ store.set("innerPocketWeltHeight", weltHeight);
+ store.set("innerPocketWidth", width);
+
+ // Slash & spread chest. This is one of those things that's simpler on paper
+ points.splitEdge = new Point(
+ points.neckEdge.x,
+ points.split.y
+ );
+
+ let rotate = [
+ "splitEdge",
+ "neckEdge",
+ "cfNeck",
+ "cfNeckCp1",
+ "neckCp2Front",
+ "neck",
+ "shoulder",
+ "shoulderCp1",
+ "armholePitchCp2",
+ "armholePitch",
+ "armholePitchCp1",
+ "armholeHollowCp2",
+ "armholeHollow",
+ "armholeHollowCp1",
+ "splitCp2",
+ "frontNeckCpEdge"
+ ];
+ for (let p of rotate) {
+ points[p] = points[p].rotate(options.chestShapingMax * options.chestShaping * -1, points.split);
+ }
+
+ // Lapel break point and cutaway point
+ points.lapelBreakPoint = new Point(
+ points.hemEdge.x,
+ points.dartTop.y * (1 + options.lapelBreak)
+ );
+ points.cutawayPoint = points.lapelBreakPoint.shift(
+ -90,
+ points.lapelBreakPoint.dy(points.hemEdge) * options.buttonLength
+ );
+
+ // Lapel roll line
+ let rollHeight = measurements.neckCircumference * options.rollLineCollarHeight;
+ points.shoulderRoll = points.shoulder.shiftOutwards(points.neck, rollHeight);
+ let collarHeight = measurements.neckCircumference * options.collarHeight;
+ points.shoulderRollCb = points.lapelBreakPoint.shiftOutwards(points.shoulderRoll, store.get("backCollarLength"));
+ let angle = points.shoulderRoll.angle(points.shoulderRollCb);
+ points.collarCbHelp = points.shoulderRollCb.shift(angle-90, rollHeight);
+ points.collarCbBottom = points.collarCbHelp.shift(angle-90, rollHeight);
+ points.collarCbTop = points.collarCbHelp.shift(angle+90, collarHeight * 2 - rollHeight);
+
+ // Notch
+ points.notchMax = utils.beamsIntersect(
+ points.lapelBreakPoint, points.shoulderRoll,
+ points.neckEdge, points.frontNeckCpEdge
+ );
+ points.lapelTip = utils.beamsIntersect( // Keeps lapel straight despite chest shaping
+ points.hemEdge, points.lapelBreakPoint,
+ points.notchMax, points.cfNeckCp1
+ );
+ points.notchEdge = points.lapelTip.shiftFractionTowards(points.notchMax, options.lapelReduction);
+ points.notch = points.cfNeck.shiftFractionTowards(points.notchMax, options.collarNotchDepth);
+ points.notchTip = points.neckEdge.rotate(options.collarNotchAngle * -1, points.notch);
+ points.notchTip = points.notch.shiftFractionTowards(points.notchTip, options.collarNotchReturn);
+ points.notchTipCp = points.notchTip.shift(points.notch.angle(points.notchTip)-90, points.notchTip.dist(points.collarCbTop)/4);
+ points.collarCbTopCp = points.collarCbTop.shift(points.collarCbBottom.angle(points.collarCbTop)+90, points.notchTip.dist(points.collarCbTop)/4);
+
+ // Redraw front neck line
+ points.lapelStraightEnd = new Point(
+ points.lapelBreakPoint.x,
+ points.splitEdge.y
+ );
+ points.lapelStraightEndCp1 = points.lapelStraightEnd.shift(90, points.neckEdge.dy(points.lapelStraightEnd) * 0.7);
+ angle = points.notch.angle(points.neck);
+ points._dir1 = points.notch.shift(angle/2, 50);
+ points._dir2 = points.neck.shift(angle * 1.5 + 180, 50);
+ points.collarCorner = points.notch.shiftFractionTowards(points.notchMax, 1.6)
+
+ // Cut rollline back to collar line
+ let shoulderRoll = utils.linesIntersect(
+ points.shoulderRoll, points.lapelBreakPoint,
+ points.notch, points.collarCorner
+ );
+ // FIXME: Does this ever happen?
+ if(!shoulderRoll) throw new Error("Roll line does not intersect with notch/collarCorner line");
+ else points.shoulderRoll = shoulderRoll;
+
+ // Round the hem
+ points.hemRoundTarget = new Point(
+ points.hem.x,
+ points.cfHem.y
+ );
+ points.roundStart = points.cutawayPoint
+ .shiftFractionTowards(points.hemEdge, options.frontCutawayStart)
+ .rotate(options.frontCutawayAngle, points.cutawayPoint);
+ points.roundEnd = points.hemDropEnd.shiftFractionTowards(points.cfHem, 1 - options.frontCutawayEnd);
+ points.roundVia = utils.beamsIntersect(
+ points.cutawayPoint, points.roundStart,
+ points.hemDropEnd, points.cfHem
+ );
+ points.roundCp1 = points.roundStart.shiftFractionTowards(points.roundVia, options.hemRadius);
+ points.roundCp2 = points.roundEnd.shiftFractionTowards(points.roundVia, options.hemRadius);
+ let cpDist = points.cutawayPoint.dy(points.roundStart)/3;
+ points.cutawayPointCp2 = points.cutawayPoint.shift(-90, cpDist);
+ points.roundStartCp1 = points.roundCp1.shiftOutwards(points.roundStart, cpDist);
+
+ // Facing/lining boundary
+ points.facingTop = points.neck.shiftFractionTowards(points.shoulder, 0.2);
+ points.facingBottom = new Path()
+ .move(points.roundStart)
+ .curve(points.roundCp1, points.roundCp2, points.roundEnd)
+ .line(points.hem)
+ .intersectsX(points.dartLeft.x * 0.7)
+ .pop();
+
+ // Inner pocket facing extension (ipfe)
+ points.ipfeAnchor = utils.beamsIntersect(
+ points.facingTop, points.facingBottom,
+ points.innerPocketLeft, points.innerPocketRight
+ );
+ let ipfeHeight = points.innerPocketTopRight.dy(points.innerPocketBottomRight) * 5;
+ points.ipfeTopRight = points.innerPocketRight.shift(90, ipfeHeight/2);
+ points.ipfeBottomRight = points.ipfeTopRight.flipY(points.innerPocketRight);
+ points.ipfeEdge = points.innerPocketRight.shift(0, ipfeHeight/2);
+ points.ipfeViaTopRight = new Point(
+ points.ipfeEdge.x,
+ points.ipfeTopRight.y
+ );
+ points.ipfeViaBottomRight = points.ipfeViaTopRight.flipY(points.innerPocketRight);
+ macro("round", {
+ from: points.ipfeBottomRight,
+ to: points.ipfeEdge,
+ via: points.ipfeViaBottomRight,
+ radius: ipfeHeight/2,
+ prefix: "ipfeBottomRight",
+ });
+ macro("round", {
+ from: points.ipfeTopRight,
+ to: points.ipfeEdge,
+ via: points.ipfeViaTopRight,
+ radius: ipfeHeight/2,
+ prefix: "ipfeTopRight",
+ });
+ points.ipfeStart = utils.beamIntersectsY(
+ points.facingTop,
+ points.facingBottom,
+ points.innerPocketAnchor.y - ipfeHeight
+ );
+ points.ipfeEnd = utils.beamIntersectsY(
+ points.facingTop,
+ points.facingBottom,
+ points.innerPocketAnchor.y + ipfeHeight
+ );
+ points.ipfeStartEnd = new Point(
+ points.ipfeStart.x + ipfeHeight/2,
+ points.innerPocketAnchor.y - ipfeHeight/2
+ );
+ points.ipfeStartVia = new Point(
+ points.ipfeStart.x,
+ points.ipfeStartEnd.y
+ );
+ points.ipfeEndEnd = new Point(
+ points.ipfeEnd.x + ipfeHeight/2,
+ points.innerPocketAnchor.y + ipfeHeight/2
+ );
+ points.ipfeEndVia = new Point(
+ points.ipfeEnd.x,
+ points.ipfeEndEnd.y
+ );
+ macro("round", {
+ from: points.ipfeStart,
+ to: points.ipfeStartEnd,
+ via: points.ipfeStartVia,
+ radius: ipfeHeight/2,
+ prefix: "ipfeStart",
+ });
+ macro("round", {
+ from: points.ipfeEnd,
+ to: points.ipfeEndEnd,
+ via: points.ipfeEndVia,
+ radius: ipfeHeight/2,
+ prefix: "ipfeEnd",
+ });
+ // Rotate control points to smooth out curve
+ angle = points.facingTop.angle(points.facingBottom) + 90;
+ points.ipfeStartCp1 = points.ipfeStartCp1.rotate(angle, points.ipfeStart);
+ points.ipfeEndCp1 = points.ipfeEndCp1.rotate(angle, points.ipfeEnd);
+
+
+ // Clean up - Remove this and uncomment paths below to understand what's going on
+ for (let i of Object.keys(paths)) delete paths[i];
+ for (let i of Object.keys(snippets)) delete snippets[i];
+
+ /*
+ paths.edge = new Path()
+ .move(points.neckEdge)
+ .line(points.hemEdge);
+
+ paths.slash = new Path()
+ .move(points.split).line(points.splitEdge)
+ .line(points.neckEdge)
+ .line(points.cfNeck)
+ .curve(points.frontNeckCpEdge, points.neckCp2Front, points.neck)
+ .line(points.shoulder)
+ .curve(points.shoulderCp1, points.armholePitchCp2, points.armholePitch)
+ .curve(points.armholePitchCp1, points.armholeHollowCp2, points.armholeHollow)
+ .curve(points.armholeHollowCp1, points.splitCp2, points.split)
+ .attr("class", "stroke-xl lining");
+
+ paths.collarPrep = new Path()
+ .move(points.shoulderRoll)
+ .line(points.shoulderRollCb)
+ .line(points.collarCbHelp)
+ .line(points.collarCbBottom)
+ .line(points.collarCbTop)
+ .line(points.notchTipCp)
+ .line(points.collarCbTopCp)
+
+ paths.sdfs = new Path()
+ .move(points.cutawayPoint)
+ .curve(points.cutawayPointCp2, points.roundStartCp1, points.roundStart)
+ .curve(points.roundCp1, points.roundCp2, points.roundEnd)
+
+ paths.brzxclx = new Path()
+ .move(points.notch)
+ .line(points.collarCorner)
+ .line(points.neck)
+
+ */
+
+
+ // Paths
+ paths.saBase = new Path()
+ .move(points.hem)
+ .line(points.hips)
+ .curve(points.hipsCp2, points.waistCp1, points.waist)
+ .curve_(points.waistCp2, points.split)
+ .curve(points.splitCp2, points.armholeHollowCp1, points.armholeHollow)
+ .curve(points.armholeHollowCp2, points.armholePitchCp1, points.armholePitch)
+ .curve(points.armholePitchCp2, points.shoulderCp1, points.shoulder)
+ .line(points.neck)
+ .line(points.collarCorner)
+ .line(points.notch)
+ .line(points.notchEdge)
+ ._curve(points.lapelStraightEndCp1, points.lapelStraightEnd)
+ .line(points.cutawayPoint)
+ .curve(points.cutawayPointCp2, points.roundStartCp1, points.roundStart)
+ .curve(points.roundCp1, points.roundCp2, points.roundEnd);
+ paths.saBase.render = false;
+
+ paths.hemBase = new Path()
+ .move(points.roundEnd)
+ .line(points.hem);
+ paths.hemBase.render = false;
+
+ paths.seam = paths.saBase
+ .clone()
+ .join(paths.hemBase)
+ .attr("class", "fabric");
+
+ paths.flb = new Path()
+ .move(points.facingTop)
+ .line(points.ipfeStartStart)
+ .curve(points.ipfeStartCp1, points.ipfeStartCp2, points.ipfeStartEnd)
+ .line(points.ipfeTopRightStart)
+ .curve(points.ipfeTopRightCp1, points.ipfeTopRightCp2, points.ipfeTopRightEnd)
+ .curve(points.ipfeBottomRightCp2, points.ipfeBottomRightCp1, points.ipfeBottomRightStart)
+ .line(points.ipfeEndEnd)
+ .curve(points.ipfeEndCp2, points.ipfeEndCp1, points.ipfeEnd)
+ .line(points.facingBottom)
+ .attr("class", "fabric")
+
+ paths.chestPocket = new Path()
+ .move(points.chestPocketTopRight)
+ .line(points.chestPocketTopLeft)
+ .line(points.chestPocketBottomLeft)
+ .line(points.chestPocketBottomRight)
+ .line(points.chestPocketTopRight)
+ .close()
+ .attr("class", "fabric dashed");
+
+ paths.innerPocket = new Path()
+ .move(points.innerPocketTopRight)
+ .line(points.innerPocketTopLeft)
+ .line(points.innerPocketBottomLeft)
+ .line(points.innerPocketBottomRight)
+ .line(points.innerPocketTopRight)
+ .move(points.innerPocketLeft)
+ .line(points.innerPocketRight)
+ .close()
+ .attr("class", "fabric dashed");
+
+ paths.breakLine = new Path()
+ .move(points.lapelBreakPoint)
+ .line(points.shoulderRoll)
+ .attr("class", "fabric lashed");
+
+ paths.dart = new Path()
+ .move(points.dartBottom)
+ ._curve(points.dartRightCpBottom, points.dartRight)
+ .curve_(points.dartRightCpTop, points.dartTop)
+ ._curve(points.dartLeftCpTop, points.dartLeft)
+ .curve_(points.dartLeftCpBottom, points.dartBottom)
+ .close()
+ .attr("class", "fabric");
+
+ if (complete) {
+
+ if (sa) {
+ paths.sa = paths.saBase
+ .offset(sa)
+ .join(paths.hemBase.offset(sa * 3))
+ .close()
+ .attr("class", "fabric sa");
+ }
+ }
+
+
+ return part;
+}
diff --git a/packages/jaeger/src/frontbase.js b/packages/jaeger/src/frontbase.js
new file mode 100644
index 00000000000..4f7a3e71b34
--- /dev/null
+++ b/packages/jaeger/src/frontbase.js
@@ -0,0 +1,168 @@
+import { backSideBoundary } from "./shared";
+
+export default function(part) {
+ let { store, complete, points, utils, measurements, options, macro, Point, paths, Path } = part.shorthand();
+
+ /**
+ * Add side part from back to front, draw front style line
+ */
+ backSideBoundary(part, true);
+
+ paths.pathToSplit = new Path()
+ .move(points.armhole)
+ .curve(points.armholeCp2, points.armholeHollowCp1, points.armholeHollow)
+ .attr("class", "lining stroke-xl");
+ points.split = paths.pathToSplit.shiftFractionAlong(0.5);
+ let halves = paths.pathToSplit.split(points.split);
+ paths.split1 = halves.pop().attr("class", "lining stroke-xxl");
+ paths.split2 = halves.pop().attr("class", "canvas stroke-xxl");
+ // We need to add these control points as we'll rotate them later
+ // The path.ops property is where it's at
+ points.splitCp2 = paths.split1.ops[1].cp1;
+ points.armholeHollowCp1 = paths.split1.ops[1].cp2;
+ // We need to add these control points for the side
+ points.sideArmholeCp2 = paths.split2.ops[1].cp1;
+ points.sideSplitCp1 = paths.split2.ops[1].cp2;
+
+ points.fsArmhole = points.split.clone();
+ points.fsWaist = new Point(
+ points.waist.x * options.sideFrontPlacement,
+ points.waist.y
+ );
+ points.fsWaistCp2 = points.fsWaist.shift(90, points.split.dy(points.waist)/2);
+ points.fsHips = new Point(points.fsWaist.x, points.hips.y);
+ points.fsHem = new Point(points.fsWaist.x, points.hem.y);
+
+ /** Uncomment this to see the style line without shaping
+ */
+ paths.fs = new Path()
+ .move(points.fsHem)
+ .line(points.fsWaist)
+ .curve_(points.fsWaistCp2, points.fsArmhole)
+ .attr("class", "stroke-xl lining lashed")
+
+
+ /**
+ * Shape the front/side seam
+ */
+ // Divide reduction by 4: two side panels x two sides per panel = 4
+ points.waist = points.fsWaist.shift(180, store.get("waistReductionSide")/4);
+ points.waistCp2 = new Point(
+ points.waist.x,
+ points.fsWaistCp2.y
+ );
+ points.hips = points.fsHips.shift(180, store.get("hipsReductionSide")/4);
+ points.waistCp1 = points.waist.shift(-90, points.waist.dy(points.hips)/3);
+ points.hipsCp2 = points.hips.shift(90, points.waist.dy(points.hips)/3);
+ points.hem = new Point(points.hips.x, points.hem.y);
+
+ points.sideHips = points.hips.flipX(points.fsWaist);
+ points.sideHem = points.hem.flipX(points.fsWaist);
+ points.sideWaist = points.waist.flipX(points.fsWaist);
+ points.sideWaistCp1 = points.waistCp1.flipX(points.fsWaist);
+ points.sideWaistCp2 = points.waistCp2.flipX(points.fsWaist);
+ points.sideHipsCp2 = points.hipsCp2.flipX(points.fsWaist);
+
+ // Match side seam length by shifting armhole upwards
+ let frontLength = new Path()
+ .move(points.hem)
+ .line(points.hips)
+ .curve(points.hipsCp2, points.waistCp1, points.waist)
+ .curve_(points.waistCp2, points.split)
+ .length();
+ let sideLength = new Path()
+ .move(points.sideHem)
+ .line(points.sideHips)
+ .curve(points.sideHipsCp2, points.sideWaistCp1, points.sideWaist)
+ .curve_(points.sideWaistCp2, points.split)
+ .length();
+ points.sideArmhole = points.armhole.shift(90, frontLength - sideLength);
+ points.bsArmholeCp2 = points.bsArmholeCp2.shift(90, frontLength - sideLength);
+
+ /**
+ * Shape the side/back seam
+ */
+ points.bsWaist = points.bsWaist.shift(180, store.get("waistReductionSide")/4);
+ points.bsWaistCp2 = new Point(points.bsWaist.x, points.sideWaistCp2.y);
+ points.bsWaistCp1 = new Point(points.bsWaist.x, points.sideWaistCp1.y);
+ points.bsHips = points.bsHips.shift(180, store.get("hipsReductionSide")/4);
+ points.bsHipsCp2 = new Point(points.bsHips.x, points.sideHipsCp2.y);
+ points.bsHem = new Point(points.bsHips.x, points.sideHem.y);
+
+ /**
+ * Drop hem center front
+ */
+ points.cfHem = points.cfHem.shift(-90, points.cfHem.y * options.centerFrontHemDrop);
+ // When the hem slope would end of side and front were sewn together
+ points.hemDropEnd = points.hem.shift(0, points.sideHem.dx(points.bsHem));
+ points.hem = utils.beamsIntersect(
+ points.cfHem, points.hemDropEnd,
+ points.hips, points.hem
+ );
+ points.sideHem = points.hem.flipX(points.fsHem);
+
+ /**
+ * Front dart
+ */
+ points.dart = new Point(
+ points.waist.x * options.frontDartPlacement,
+ points.waist.y
+ );
+ points.dartTop = points.dart.shift(90, points.armhole.dy(points.waist) / 1.5);
+ points.dartBottom = points.dart.shift(-90, points.waist.dy(points.hips) / 1.5);
+ points.dartRight = points.dart.shift(0, store.get("waistReductionFront")/2);
+ points.dartLeft = points.dartRight.flipX(points.dart);
+ points.dartRightCpTop = points.dartRight.shift(90, points.dartTop.dy(points.dart)/3);
+ points.dartLeftCpTop = points.dartRightCpTop.flipX(points.dart);
+ points.dartRightCpBottom = points.dartRight.shift(-90, points.dart.dy(points.dartBottom)/3);
+ points.dartLeftCpBottom = points.dartRightCpBottom.flipX(points.dart);
+
+ // Front pocket
+ points.frontPocketAnchor = new Point(
+ points.hips.x * options.frontPocketPlacement,
+ points.dartRightCpBottom.y
+ );
+ let width = points.hips.x * options.frontPocketWidth;
+ let depth = width * options.frontPocketDepth;
+ points.frontPocketTopLeft = points.frontPocketAnchor.shift(180, width/2);
+ points.frontPocketTopRight = points.frontPocketTopLeft.flipX(points.frontPocketAnchor);
+ points.frontPocketBottomLeft = points.frontPocketTopLeft.shift(-90, depth);
+ points.frontPocketBottomRight = points.frontPocketBottomLeft.flipX(points.frontPocketAnchor);
+ store.set("pocketWidth", width);
+ store.set("pocketDepth", depth);
+
+ paths.frontPocket = new Path()
+ .move(points.frontPocketTopRight)
+ .line(points.frontPocketTopLeft)
+ .line(points.frontPocketBottomLeft)
+ .line(points.frontPocketBottomRight)
+ .line(points.frontPocketTopRight)
+ .close()
+
+ paths.dart = new Path()
+ .move(points.dartRight)
+ .curve_(points.dartRightCpTop, points.dartTop)
+ ._curve(points.dartLeftCpTop, points.dartLeft)
+ .curve_(points.dartLeftCpBottom, points.dartBottom)
+ ._curve(points.dartRightCpBottom, points.dartRight)
+ .close();
+
+ paths.frontShaping = new Path()
+ .move(points.hem)
+ .line(points.hips)
+ .curve(points.hipsCp2, points.waistCp1, points.waist)
+ .curve_(points.waistCp2, points.split)
+ ._curve(points.sideWaistCp2, points.sideWaist)
+ .curve(points.sideWaistCp1, points.sideHipsCp2, points.sideHips)
+ .line(points.sideHem)
+ .attr("class", "stroke-xxl various lashed");
+
+ paths.sideShaping = new Path()
+ .move(points.bsHem)
+ .line(points.bsHips)
+ .curve(points.bsHipsCp2, points.bsWaistCp1, points.bsWaist)
+ .curve_(points.bsWaistCp2, points.bsArmholeHollow)
+ .attr("class", "stroke-xl facing lashed");
+
+ return part;
+}
diff --git a/packages/jaeger/src/index.js b/packages/jaeger/src/index.js
new file mode 100644
index 00000000000..a6d1065701b
--- /dev/null
+++ b/packages/jaeger/src/index.js
@@ -0,0 +1,62 @@
+import freesewing from "freesewing";
+import plugins from "@freesewing/plugin-bundle";
+import Bent from "@freesewing/bent";
+import config from "../config";
+// Parts
+import draftBackBase from "./backbase";
+import draftFrontBase from "./frontbase";
+import draftFront from "./front";
+import draftBack from "./back";
+import draftSide from "./side";
+import draftCollarstand from "./collarstand";
+import draftCollar from "./collar";
+import draftUndercollar from "./undercollar";
+import draftPocket from "./pocket";
+import draftChestPocketWelt from "./chestpocketwelt";
+import draftChestPocketBag from "./chestpocketbag";
+import draftInnerPocketWelt from "./innerpocketwelt";
+import draftInnerPocketBag from "./innerpocketbag";
+import draftTopSleeve from "./topsleeve";
+import draftUnderSleeve from "./undersleeve";
+
+// Create new design
+const Jaeger = new freesewing.Design(config, plugins);
+
+// Attach draft methods from Bent to prototype
+Jaeger.prototype.draftBentBase = function(part) {
+ return new Bent(this.settings).draftBase(part);
+};
+Jaeger.prototype.draftBentFront = function(part) {
+ return new Bent(this.settings).draftFront(part);
+}
+Jaeger.prototype.draftBentBack = function(part) {
+ return new Bent(this.settings).draftBack(part);
+};
+Jaeger.prototype.draftBentSleeve = function(part) {
+ return new Bent(this.settings).draftSleeve(part);
+};
+Jaeger.prototype.draftBentTopSleeve = function(part) {
+ return new Bent(this.settings).draftTopSleeve(part);
+};
+Jaeger.prototype.draftBentUnderSleeve = function(part) {
+ return new Bent(this.settings).draftUnderSleeve(part);
+};
+
+// Attach own draft methods to prototype
+Jaeger.prototype.draftBackBase = draftBackBase;
+Jaeger.prototype.draftFrontBase = draftFrontBase;
+Jaeger.prototype.draftFront = draftFront;
+Jaeger.prototype.draftBack = draftBack;
+Jaeger.prototype.draftSide = draftSide;
+Jaeger.prototype.draftCollarstand = draftCollarstand;
+Jaeger.prototype.draftCollar = draftCollar;
+Jaeger.prototype.draftUndercollar = draftUndercollar;
+Jaeger.prototype.draftPocket = draftPocket;
+Jaeger.prototype.draftChestPocketWelt = draftChestPocketWelt;
+Jaeger.prototype.draftChestPocketBag = draftChestPocketBag;
+Jaeger.prototype.draftInnerPocketWelt = draftInnerPocketWelt;
+Jaeger.prototype.draftInnerPocketBag = draftInnerPocketBag;
+Jaeger.prototype.draftTopSleeve = draftTopSleeve;
+Jaeger.prototype.draftUnderSleeve = draftUnderSleeve;
+
+export default Jaeger;
diff --git a/packages/jaeger/src/innerpocketbag.js b/packages/jaeger/src/innerpocketbag.js
new file mode 100644
index 00000000000..525fb4cf5ad
--- /dev/null
+++ b/packages/jaeger/src/innerpocketbag.js
@@ -0,0 +1,31 @@
+export default function(part) {
+ let { sa, snippets, Snippet, utils, store, complete, points, measurements, options, macro, Point, paths, Path } = part.shorthand();
+
+ let width = store.get("innerPocketWidth");
+ let welt = store.get("innerPocketWeltHeight");
+ let height = width * options.innerPocketDepth;
+
+ points.topLeft = new Point(0, 0);
+ points.topRight = new Point(width, 0);
+ points.foldLeft = new Point(0, height);
+ points.foldRight = new Point(width, height);
+ points.bottomLeft = new Point(0, height*2 + welt*2);
+ points.bottomRight = new Point(width, height*2 + welt*2);
+
+ // Paths
+ paths.seam = new Path()
+ .move(points.topLeft)
+ .line(points.bottomLeft)
+ .line(points.bottomRight)
+ .line(points.topRight)
+ .line(points.topLeft)
+ .close()
+ .attr("class", "lining");
+
+ paths.fold = new Path()
+ .move(points.foldLeft)
+ .line(points.foldRight)
+ .attr("class", "stroke-sm lining dashed");
+
+ return part;
+}
diff --git a/packages/jaeger/src/innerpocketwelt.js b/packages/jaeger/src/innerpocketwelt.js
new file mode 100644
index 00000000000..ea271112c67
--- /dev/null
+++ b/packages/jaeger/src/innerpocketwelt.js
@@ -0,0 +1,30 @@
+export default function(part) {
+ let { sa, snippets, Snippet, utils, store, complete, points, measurements, options, macro, Point, paths, Path } = part.shorthand();
+
+ let width = store.get("innerPocketWidth");
+ let height = store.get("innerPocketWeltHeight");
+
+ points.topLeft = new Point(0, 0);
+ points.topRight = new Point(width, 0);
+ points.foldLeft = new Point(0, height);
+ points.foldRight = new Point(width, height);
+ points.bottomLeft = new Point(0, height*2);
+ points.bottomRight = new Point(width, height*2);
+
+ // Paths
+ paths.seam = new Path()
+ .move(points.topLeft)
+ .line(points.bottomLeft)
+ .line(points.bottomRight)
+ .line(points.topRight)
+ .line(points.topLeft)
+ .close()
+ .attr("class", "fabric");
+
+ paths.fold = new Path()
+ .move(points.foldLeft)
+ .line(points.foldRight)
+ .attr("class", "stroke-sm dashed");
+
+ return part;
+}
diff --git a/packages/jaeger/src/pocket.js b/packages/jaeger/src/pocket.js
new file mode 100644
index 00000000000..02130c1d249
--- /dev/null
+++ b/packages/jaeger/src/pocket.js
@@ -0,0 +1,37 @@
+export default function(part) {
+ let { sa, snippets, Snippet, utils, store, complete, points, measurements, options, macro, Point, paths, Path } = part.shorthand();
+
+ let width = store.get("pocketWidth");
+ let depth = store.get("pocketDepth");
+
+ points.topLeft = new Point(0, 0);
+ points.topRight = new Point(width, 0);
+ points.bottomLeft = new Point(0, depth);
+ points.bottomRight = new Point(width, depth);
+ // Add foldover points
+ points.edgeLeft = points.bottomLeft.shiftFractionTowards(
+ points.topLeft,
+ 1 + options.pocketFoldover
+ );
+ points.edgeRight = new Point(
+ points.topRight.x,
+ points.edgeLeft.y
+ );
+
+ // Paths
+ paths.seam = new Path()
+ .move(points.edgeLeft)
+ .line(points.bottomLeft)
+ .line(points.bottomRight)
+ .line(points.edgeRight)
+ .line(points.edgeLeft)
+ .close()
+ .attr("class", "fabric");
+
+ paths.fold = new Path()
+ .move(points.topLeft)
+ .line(points.topRight)
+ .attr("class", "fabric dashed");
+
+ return part;
+}
diff --git a/packages/jaeger/src/shared.js b/packages/jaeger/src/shared.js
new file mode 100644
index 00000000000..f5638fcc66d
--- /dev/null
+++ b/packages/jaeger/src/shared.js
@@ -0,0 +1,83 @@
+/**
+ * This calculates a bunch of helper variables and stores them
+ */
+export const calculateRatios = part => {
+ let { store, measurements, options } = part.shorthand();
+
+ if (store.get("ratiosCalculated")) return true;
+
+ // Make sure collar height makes sense
+ if (options.collarHeight * 2 < options.rollLineCollarHeight) options.rollLineCollarHeight = options.collarHeight * 2;
+
+ // Calculate different values for reducing from chest to hips via waist
+ store.set("chest", measurements.chestCircumference * (1 + options.chestEase));
+ store.set("waist", measurements.naturalWaist * (1 + options.waistEase));
+ store.set("hips", measurements.hipsCircumference * (1 + options.hipsEase));
+
+ store.set("waistReduction", store.get("chest") - store.get("waist"));
+ store.set("hipsReduction", store.get("chest") - store.get("hips"));
+
+ store.set("waistReductionBack", store.get("waistReduction") * options.waistReductionRatioBack);
+ store.set("waistReductionFront", store.get("waistReduction") * options.waistReductionRatioFront);
+ store.set("waistReductionSide", store.get("waistReduction") * (1 - options.waistReductionRatioFront - options.waistReductionRatioBack));
+
+ store.set("hipsReductionBack", store.get("hipsReduction") * options.hipsReductionRatioBack);
+ store.set("hipsReductionFront", store.get("hipsReduction") * options.hipsReductionRatioFront);
+ store.set("hipsReductionSide", store.get("hipsReduction") * (1 - options.hipsReductionRatioFront - options.hipsReductionRatioBack));
+
+ store.set("ratiosCalculated", true);
+
+ // FIXME: Still needed?
+ // Prevent chest shaping from being 0, because that will get read as 360 degrees
+ // if($this->o('chestShaping') == 0) $this->setOptionIfUnset('chestShaping', 0.0001);
+};
+
+/**
+ * Draws the line seperating side panel (back-side boundary, aka bs)
+ * Note that this is without shaping, but rather the style line
+ * that will be the starting point for shaping the back/side seam
+ *
+ * On the back, this will be drawn as-is. On the front, it will be
+ * drawn, than mirrored so the part that's cut off from the back is
+ * added to the front (to become the side later).
+ *
+ * The optional flip parameter mirrors this for the front part
+ */
+export const backSideBoundary = (part, flip=false) => {
+
+ let { points, Point, paths, Path } = part.shorthand();
+
+ points.bsArmholeHollow = points.armholeHollow.clone();
+ points.bsArmholeHollowCp2 = points.armholeHollowCp2.rotate(90, points.armholeHollow);
+ points.bsWaist = new Point(
+ points.bsArmholeHollowCp2.x,
+ points.waist.y
+ );
+ points.bsHips = new Point(points.bsWaist.x, points.hips.y);
+ points.bsHem = new Point(points.bsWaist.x, points.hem.y);
+
+ if (flip) {
+ points.bsArmholeHollowCp1 = points.armholeHollowCp1.clone();
+ points.bsArmholeCp2 = points.armholeCp2.clone();
+ for (let p of [
+ "bsArmholeHollow",
+ "bsArmholeHollowCp2",
+ "bsWaist",
+ "bsHips",
+ "bsHem",
+ "bsArmholeHollowCp1",
+ "bsArmholeCp2"
+ ]) {
+ points[p] = points[p].flipX(points.armhole);
+ }
+ }
+
+ /** Uncomment this to see the style line without shaping
+ */
+ paths.bs = new Path()
+ .move(points.bsHem)
+ .line(points.bsWaist)
+ ._curve(points.bsArmholeHollowCp2, points.bsArmholeHollow)
+ .attr("class", "stroke-xl lining lashed")
+ if (flip) paths.bs.curve(points.bsArmholeHollowCp1, points.bsArmholeCp2, points.armhole);
+}
diff --git a/packages/jaeger/src/side.js b/packages/jaeger/src/side.js
new file mode 100644
index 00000000000..f3861d1272b
--- /dev/null
+++ b/packages/jaeger/src/side.js
@@ -0,0 +1,82 @@
+export default function(part) {
+ let { sa, snippets, Snippet, utils, store, complete, points, measurements, options, macro, Point, paths, Path } = part.shorthand();
+
+ // Double back vent
+ if (options.backVent === 2) {
+ let ventY = points.bsHips.y - points.bsWaistCp2.dy(points.bsHips) * options.backVentLength;
+ // Vent tip
+ points.ventStart = utils.curveIntersectsY(
+ points.bsHips,
+ points.bsHipsCp2,
+ points.bsWaistCp1,
+ points.bsWaist,
+ ventY
+ );
+ paths.ventBase = new Path()
+ .move(points.bsWaist)
+ .curve(points.bsWaistCp1, points.bsHipsCp2, points.bsHips)
+ .split(points.ventStart)
+ .pop()
+ .line(points.bsHem);
+ paths.vent = paths.ventBase.offset(measurements.neckCircumference / -10);
+ //paths.vent.render = false;
+ points.ventSlopeStart = utils.lineIntersectsCurve(
+ paths.vent.start(),
+ paths.vent.start().shift(170, measurements.neckCircumference / 5),
+ points.bsHips,
+ points.bsHipsCp2,
+ points.bsWaistCp1,
+ points.bsWaist
+ );
+ // Mirror slope on vent
+ points.ventHem = utils.beamIntersectsX(
+ points.sideHem,
+ paths.vent.end(),
+ paths.vent.end().flipX(points.bsHem).x
+ ).flipX(points.bsHem);
+ }
+
+ // Clean up - Remove this to understand what's going on
+ for (let i of Object.keys(paths))
+ if(i !== "vent") delete paths[i];
+ for (let i of Object.keys(snippets)) delete snippets[i];
+
+ // Paths
+ paths.hemBase = new Path()
+ .move(points.sideHem)
+ .line(points.bsHem);
+ if (options.backVent === 2) {
+ paths.hemBase
+ .line(points.ventHem)
+ .line(paths.vent.end());
+ paths.saBase = paths.vent.clone()
+ .reverse()
+ .line(points.ventSlopeStart)
+ .join(new Path()
+ .move(points.bsHips)
+ .curve(points.bsHipsCp2, points.bsWaistCp1, points.bsWaist)
+ .split(points.ventSlopeStart)
+ .pop()
+ );
+ } else {
+ paths.saBase = new Path()
+ .move(points.bsHem)
+ .line(points.bsHips)
+ .curve(points.bsHipsCp2, points.bsWaistCp1, points.bsWaist);
+ }
+ paths.saBase = paths.saBase
+ .curve_(points.bsWaistCp2, points.bsArmholeHollow)
+ .curve(points.bsArmholeHollowCp1, points.bsArmholeCp2, points.sideArmhole)
+ .curve(points.sideArmholeCp2, points.sideSplitCp1, points.fsArmhole)
+ ._curve(points.sideWaistCp2, points.sideWaist)
+ .curve(points.sideWaistCp1, points.sideHipsCp2, points.sideHips)
+ .line(points.sideHem)
+
+ paths.seam = paths.saBase
+ .clone()
+ .join(paths.hemBase)
+ .close()
+ .attr("class", "fabric");
+
+ return part;
+}
diff --git a/packages/jaeger/src/topsleeve.js b/packages/jaeger/src/topsleeve.js
new file mode 100644
index 00000000000..afc0ba86423
--- /dev/null
+++ b/packages/jaeger/src/topsleeve.js
@@ -0,0 +1,78 @@
+export default function(part) {
+ let { sa, snippets, Snippet, utils, store, complete, points, measurements, options, macro, Point, paths, Path } = part.shorthand();
+
+ // Vent
+ let slope = 15;
+ let width = measurements.wristCircumference * (1 + options.cuffEase) * options.sleeveVentWidth;
+ points.ventFoldRight = points.tsWristLeft.shiftOutwards(points.tsWristRight, width);
+ points.ventHelper = points.tsWristRight.shiftFractionTowards(points.elbowRight, options.sleeveVentLength);
+ points.ventSlopeEnd = points.ventHelper
+ .shiftTowards(points.tsWristRight, width)
+ .rotate(90, points.ventHelper);
+ points.ventSlopeStart = utils.beamsIntersect(
+ points.tsWristRight, points.elbowRight,
+ points.ventSlopeEnd, points.ventHelper.rotate(-1 * slope, points.ventSlopeEnd)
+ );
+
+ // Hem
+ let hemSa = sa ? 3*sa : 30;
+ points.hemHelperLeft = points.tsWristLeft
+ .shiftTowards(points.tsWristRight, hemSa)
+ .rotate(90, points.tsWristLeft);
+ points.hemHelperRight = points.tsWristRight
+ .shiftTowards(points.tsWristLeft, hemSa)
+ .rotate(-90, points.tsWristRight);
+ points.hemLeftIntersection = utils.beamsIntersect(
+ points.hemHelperLeft, points.hemHelperRight,
+ points.tsWristLeft, points.tsElbowLeft
+ );
+ points.hemRightIntersection = utils.beamsIntersect(
+ points.hemHelperLeft, points.hemHelperRight,
+ points.tsWristRight, points.elbowRight
+ );
+ points.hemVentIntersection = utils.beamsIntersect(
+ points.hemHelperLeft, points.hemHelperRight,
+ points.ventFoldRight, points.ventSlopeEnd
+ );
+ points.hemLeft = points.hemLeftIntersection
+ .rotate(points.tsWristLeft.angle(points.hemLeftIntersection) * -2, points.tsWristLeft);
+ points.hemRight = points.hemRightIntersection
+ .rotate(points.tsWristRight.angle(points.hemRightIntersection) * -2, points.tsWristRight);
+ points.ventRight = points.hemVentIntersection
+ .rotate(points.ventFoldRight.angle(points.hemVentIntersection) * -2, points.ventFoldRight);
+
+
+ // Clean up - Remove this and uncomment paths below to understand what's going on
+ for (let i of Object.keys(paths)) delete paths[i];
+
+ // Paths
+ paths.seam = new Path()
+ .move(points.ventFoldRight)
+ .line(points.ventSlopeEnd)
+ .line(points.ventSlopeStart)
+ .line(points.elbowRight)
+ .curve(points.elbowRightCpTop, points.tsRightEdgeCpBottom, points.tsRightEdge)
+ .curve_(points.tsRightEdgeCpTop, points.backPitchPoint)
+ ._curve(points.topCpRight, points.top)
+ .curve(points.topCpLeft, points.frontPitchPointCpTop, points.frontPitchPoint)
+ .curve(points.frontPitchPointCpBottom, points.tsLeftEdgeCpRight, points.tsLeftEdge)
+ ._curve(points.tsElbowLeftCpTop, points.tsElbowLeft)
+ .line(points.tsWristLeft)
+ .line(points.ventFoldRight)
+ .close()
+ .attr("class", "fabric");
+
+ paths.ventHint = new Path()
+ .move(points.ventSlopeStart)
+ .line(points.tsWristRight)
+ .attr("class", "stroke-sm help");
+
+ paths.hem = new Path()
+ .move(points.tsWristLeft)
+ .line(points.hemLeft)
+ .line(points.ventRight)
+ .line(points.ventFoldRight)
+ .attr("class", "fabric lashed");
+
+ return part;
+}
diff --git a/packages/jaeger/src/undercollar.js b/packages/jaeger/src/undercollar.js
new file mode 100644
index 00000000000..936a2752f40
--- /dev/null
+++ b/packages/jaeger/src/undercollar.js
@@ -0,0 +1,24 @@
+/*
+ * FIXME
+ *
+ * This collar was ported as-is from the original (PHP) design
+ * I did a few years ago. I think it would benefit from a redesign
+ * but I find collar design to be rather tricky business and
+ * would love the input from someone with more pattern design
+ * experience, or more tailoring exprience.
+ */
+
+export default function(part) {
+ let { sa, snippets, Snippet, utils, store, complete, points, measurements, options, macro, Point, paths, Path } = part.shorthand();
+
+ paths.seam = new Path()
+ .move(points.collarCbTop)
+ .curve_(points.collarCbTopCp, points.notchTip)
+ .line(points.notch)
+ .line(points.collarstandTip)
+ ._curve(points.collarstandCbTopCp, points.collarstandCbTop)
+ .close()
+ .attr("class", "fabric");
+
+ return part;
+}
diff --git a/packages/jaeger/src/undersleeve.js b/packages/jaeger/src/undersleeve.js
new file mode 100644
index 00000000000..d8c6febb0ac
--- /dev/null
+++ b/packages/jaeger/src/undersleeve.js
@@ -0,0 +1,75 @@
+export default function(part) {
+ let { sa, snippets, Snippet, utils, store, complete, points, measurements, options, macro, Point, paths, Path } = part.shorthand();
+
+ // Vent
+ let slope = 15;
+ let width = measurements.wristCircumference * (1 + options.cuffEase) * options.sleeveVentWidth;
+ points.ventFoldRight = points.usWristLeft.shiftOutwards(points.usWristRight, width);
+ points.ventHelper = points.usWristRight.shiftFractionTowards(points.elbowRight, options.sleeveVentLength);
+ points.ventSlopeEnd = points.ventHelper
+ .shiftTowards(points.usWristRight, width)
+ .rotate(90, points.ventHelper);
+ points.ventSlopeStart = utils.beamsIntersect(
+ points.usWristRight, points.elbowRight,
+ points.ventSlopeEnd, points.ventHelper.rotate(-1 * slope, points.ventSlopeEnd)
+ );
+
+ // Hem
+ let hemSa = sa ? 3*sa : 30;
+ points.hemHelperLeft = points.usWristLeft
+ .shiftTowards(points.usWristRight, hemSa)
+ .rotate(90, points.usWristLeft);
+ points.hemHelperRight = points.usWristRight
+ .shiftTowards(points.usWristLeft, hemSa)
+ .rotate(-90, points.usWristRight);
+ points.hemLeftIntersection = utils.beamsIntersect(
+ points.hemHelperLeft, points.hemHelperRight,
+ points.usWristLeft, points.usElbowLeft
+ );
+ points.hemRightIntersection = utils.beamsIntersect(
+ points.hemHelperLeft, points.hemHelperRight,
+ points.usWristRight, points.elbowRight
+ );
+ points.hemVentIntersection = utils.beamsIntersect(
+ points.hemHelperLeft, points.hemHelperRight,
+ points.ventFoldRight, points.ventSlopeEnd
+ );
+ points.hemLeft = points.hemLeftIntersection
+ .rotate(points.usWristLeft.angle(points.hemLeftIntersection) * -2, points.usWristLeft);
+ points.hemRight = points.hemRightIntersection
+ .rotate(points.usWristRight.angle(points.hemRightIntersection) * -2, points.usWristRight);
+ points.ventRight = points.hemVentIntersection
+ .rotate(points.ventFoldRight.angle(points.hemVentIntersection) * -2, points.ventFoldRight);
+
+ // Clean up - Remove this and uncomment paths below to understand what's going on
+ for (let i of Object.keys(paths)) delete paths[i];
+
+ // Paths
+ paths.seam = new Path()
+ .move(points.ventFoldRight)
+ .line(points.ventSlopeEnd)
+ .line(points.ventSlopeStart)
+ .line(points.elbowRight)
+ .curve(points.elbowRightCpTop, points.usRightEdgeCpBottom, points.usRightEdge)
+ .curve_(points.usRightEdgeCpTop, points.usTip)
+ .curve(points.usTipCpBottom, points.usLeftEdgeCpRight, points.usLeftEdgeRight)
+ ._curve(points.usElbowLeftCpTop, points.usElbowLeft)
+ .line(points.usWristLeft)
+ .line(points.ventFoldRight)
+ .close()
+ .attr("class", "fabric");
+
+ paths.ventHint = new Path()
+ .move(points.ventSlopeStart)
+ .line(points.usWristRight)
+ .attr("class", "stroke-sm help");
+
+ paths.hem = new Path()
+ .move(points.usWristLeft)
+ .line(points.hemLeft)
+ .line(points.ventRight)
+ .line(points.ventFoldRight)
+ .attr("class", "fabric lashed");
+
+ return part;
+}