diff --git a/index.ts b/index.ts index be40e107ca5..f49c13b5fc9 100644 --- a/index.ts +++ b/index.ts @@ -1,19 +1,28 @@ -import { Pattern } from './lib/pattern' -import { Point } from './lib/point' -import { Path } from './lib/path' -import { Snippet } from './lib/snippet' -import themes from './lib/themes' -import * as utils from './lib/utils' -import bezier from 'bezier-js' +import { Freesewing } from './lib/freesewing' -var Freesewing = { - version: '1.0.1', - pattern: Pattern, - point: Point, - path: Path, - snippet: Snippet, - utils, - bezier -} +var freesewing = new Freesewing(); -export default Freesewing; + + + + + + + + + + //svg.pre('loadStyle', function (next) { + // console.log('loadStyle hook'); + // console.log(this.style); + // this.style= 'p {line-height: 1.21;}'; + // console.log('logging in hook', this); + // next(); + //}); + +//var p = new app.pattern({parts:['tst']}); +//p.draft = function(){ +// console.log('drafting in lib index'); +//} +//p.draft(); +//p.render(); +export default freesewing; diff --git a/lib/freesewing.ts b/lib/freesewing.ts new file mode 100644 index 00000000000..ff38f068b76 --- /dev/null +++ b/lib/freesewing.ts @@ -0,0 +1,23 @@ +import { Pattern } from './pattern' +import { Point } from './point' +import { Path } from './path' +import { Snippet } from './snippet' +import themes from './themes' +import * as utils from './utils' + +export class Freesewing { + version: string; + pattern: Pattern; + point: Point; + path: Path; + snippet: Snippet; + utils: utils; + constructor() { + this.version = '1.0.1'; + this.pattern = Pattern; + this.point = Point; + this.path = Path; + this.snippet = Snippet; + this.utils = utils; + } +} diff --git a/lib/hooks.d.ts b/lib/hooks.d.ts new file mode 100644 index 00000000000..1c5abbbbba0 --- /dev/null +++ b/lib/hooks.d.ts @@ -0,0 +1 @@ +declare module 'hooks'; diff --git a/lib/hooks.ts b/lib/hooks.ts new file mode 100644 index 00000000000..64273ccf3f3 --- /dev/null +++ b/lib/hooks.ts @@ -0,0 +1,39 @@ +export class Hooks { + _hooks: object; + + constructor(app) { + this._hooks = {}; + } + + on(hook, method): void { + if(typeof this.hooks._hooks[method] === 'undefined') { + this.hooks._hooks[hook] = []; + } + this.hooks._hooks[hook].push(method); + console.log('in on method', hook, method); + } + + list(hook): function[] { + if(typeof this._hooks[hook] === 'undefined') { + return false; + } + + return this._hooks[hook]; + } + + attachPre (hook: string, obj: object): void { + this._attach('pre', hook, obj); + } + attachPost (hook: string, obj: object): void { + this._attach('post', hook, obj); + } + + attach (hook: string, obj: object): void { + if(typeof this._hooks[hook] === 'undefined') return; + for(let func of this._hooks[hook]) { + console.log('in attach', hook, func); + obj.pre(hook, func); + } + } + +} diff --git a/lib/part.ts b/lib/part.ts index b9e078a9ad6..6bbf17e8f48 100644 --- a/lib/part.ts +++ b/lib/part.ts @@ -5,7 +5,7 @@ import { Attributes } from './attributes' function PointProxy(id: string) { this.id = id; - this.get = function(points, key: string, proxy: ProxyHandler>): Point { + this.get = function(points: any, key: string, proxy: ProxyHandler>): Point { return points.get(key); }; this.set = function(points: Map, key: string, point: Point, proxy: ProxyHandler>) { diff --git a/lib/pattern.ts b/lib/pattern.ts index 978f5f7d257..872a12e9fd8 100644 --- a/lib/pattern.ts +++ b/lib/pattern.ts @@ -2,35 +2,43 @@ import { PatternConfig, PatternOption } from './types' import { Point } from './point' import { Part } from './part' import { Svg } from './svg' +import { Hooks } from './hooks' import { Option } from './option' -import themes from './themes' -import { Theme } from './themes/theme' export class Pattern { config: PatternConfig; svg: Svg = new Svg(); - themes: {[index:string]: Theme} = themes; parts: { [index: string]: Part; } options: {[propName: string]: number}; values: {[propName: string]: any} = {}; settings: {[propName: string]: any} = {mode: 'draft', units: 'metric'}; + hooks: Hooks; + on: function; constructor(config: PatternConfig) { + if(!config) { + throw "Could not create pattern: You need to provide a pattern config." + } + if(typeof config.parts === 'undefined' || !config.parts || config.parts.length < 1) { + throw "Could not create pattern: You should define at least one part in your pattern config"; + } this.config = config; - this.parts = {}; + this.hooks = new Hooks(); + this.on = this.hooks.on; for (let id of config.parts) { this.parts[id] = new Part(id); } this.options = {}; - for (let conf of config.options) { - if(conf.type === 'percentage') this.options[conf.id] = conf.val/100; - else this.options[conf.id] = conf.val; + if(typeof config.options !== 'undefined' && config.options.length > 0) { + for (let conf of config.options) { + if(conf.type === 'percentage') this.options[conf.id] = conf.val/100; + else this.options[conf.id] = conf.val; + } } - return this; } @@ -39,9 +47,13 @@ export class Pattern { } render(): string { - let svg = new Svg(); - let theme = this.themes[this.settings.mode]; - theme.preRender(this, svg); + let svg = new Svg(this); + this.hooks.attach('loadStyle', svg); + //svg.pre('preRenderSvg', function(next) { + // console.log('manual attach'); + // this.style += "path {stroke: #000; fill: none;}"; + // next(); + //}); return svg.render(this); } diff --git a/lib/svg.ts b/lib/svg.ts index d8d74fc1508..7acb2632f50 100644 --- a/lib/svg.ts +++ b/lib/svg.ts @@ -3,6 +3,8 @@ import { Path } from './path' import { Snippet } from './snippet' import { Pattern } from './pattern' import { Attributes } from './attributes' +import hooklib from 'hooks' +import { Hooks } from './hooks' export class Svg { prefix: string; @@ -16,8 +18,11 @@ export class Svg { tabs: number = 0; freeId: number = 1; openGroups: string[] = []; + hook: any; + hooks: string[]; + pattern: Pattern; - constructor() { + constructor(pattern) { this.prefix = ''; this.attributes.add this.attributes.add("xmlns", "http://www.w3.org/2000/svg"); @@ -25,12 +30,25 @@ export class Svg { this.attributes.add("xmlns:xlink", "http://www.w3.org/1999/xlink"); this.attributes.add("xmlns:freesewing", "http://freesewing.org/namespaces/freesewing"); this.attributes.add("freesewing:foo", "bar"); + this.pattern = pattern; + this.hooks = ['loadStyle']; + for(let k in hooklib) this[k] = hooklib[k]; + this.hook('loadStyle', this.loadStyle); return this; } + /** Loads CSS styles */ + loadStyle(): string { + return this.style; + } + + loadStyle() { + return this.style; + } /** Renders a draft object as SVG */ render(pattern: Pattern): string { + this.loadStyle(); let svg = this.prefix; svg += this.renderComments(this.header); svg += this.renderSvgTag(pattern); @@ -66,12 +84,12 @@ export class Svg { /** Returns SVG code for the style block */ renderStyle() { - let svg = ''+this.nl(); - return svg; } diff --git a/lib/themes.ts b/lib/themes.ts deleted file mode 100644 index 3bb76f2cbc9..00000000000 --- a/lib/themes.ts +++ /dev/null @@ -1,15 +0,0 @@ -import { Draft } from './themes/draft' -import { Paperless } from './themes/paperless' -import { Sample } from './themes/sample' -import { Compare } from './themes/compare' -import { Designer } from './themes/designer' - -/** Standard themes that ship with freesewing */ -var themes = { - draft: new Designer(), - paperless: new Paperless(), - sample: new Sample(), - compare: new Compare() -} - -export default themes; diff --git a/lib/themes/compare.ts b/lib/themes/compare.ts deleted file mode 100644 index 929ee6eb86d..00000000000 --- a/lib/themes/compare.ts +++ /dev/null @@ -1,14 +0,0 @@ -import { Pattern } from '../pattern' -import { Svg } from '../svg' -import { Sample } from './sample'; - -export class Compare extends Sample { - - /** Pre-render method is called just prior to rendering */ - preRender(pattern: Pattern, svg: Svg) { - super.preRender(pattern, svg); - svg.style += ` - path.compare { fill: #000000; fill-opacity: 0.05; stroke: #000000; stroke-opacity:0.5; stroke-width: 1; stroke-linecap:round; stroke-linejoin:round; } - `; - } -} diff --git a/lib/themes/designer.ts b/lib/themes/designer.ts deleted file mode 100644 index f3e52aac882..00000000000 --- a/lib/themes/designer.ts +++ /dev/null @@ -1,151 +0,0 @@ -import { Pattern } from '../pattern' -import { Svg } from '../svg' -import { Path } from '../path' -import { Part } from '../part' -import { Snippet } from '../snippet' -import { Theme } from './theme'; - -export class Designer extends Theme { - style: string = ` - path.curve-control{stroke:#f0ad4e;stroke-width: 0.2;} - path.debug{stroke:#d9534f;stroke-opacity:0.4;stroke-width:2;} - .point{fill:none;stroke-width:0.6;stroke:#f0ad4e;} - text.tooltip{font-size:3px;}`; - defs: string = ` - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - `; - script:string = ` - function pointHover(evt) { - var point = evt.target; - var id = point.id; - var cx = point.getAttribute('x'); - var cy = point.getAttribute('y'); - console.log('Point '+id+' ( '+cx+' , '+cy+' )'); - var scale = 2; - cx = cx-scale*cx; - cy = cy-scale*cy; - point.setAttribute("transform", 'matrix('+scale+', 0, 0, '+scale+', '+cx+', '+cy+')'); - setTimeout(function(){ - var point = document.getElementById(evt.target.id); - point.removeAttribute("transform", ''); - }, 1000); - }`; - - /** Pre-render method is called just prior to rendering */ - preRender(pattern: Pattern, svg: Svg): void { - super.preRender(pattern, svg); - svg.style += this.style; - svg.defs += this.defs; - svg.script += this.script; - svg.attributes.add('freesewing:theme', 'designer'); - svg.attributes.add('viewBox', '-10 -10 300 500'); - //this.decoratePoints(pattern, svg); - this.decoratePaths(pattern, svg); - } - - /** Decorares points with extra info */ - decoratePoints(pattern: Pattern, svg: Svg): void { - for (let partId in pattern.parts) { - let part = pattern.parts[partId]; - if (part.render) { - for (let pointId in part.points) { - this.decoratePoint(pointId, part, svg); - } - } - } - } - - /** Decorares a point with extra info */ - decoratePoint(pointId: string, part: Part, svg: Svg): void { - let point = part.points[pointId]; - point.attributes.add('id', svg.getUid()); - point.attributes.add('data-point', pointId); - } - - /** Decorares paths with extra info */ - decoratePaths(pattern: Pattern, svg: Svg): void { - for (let partId in pattern.parts) { - let part = pattern.parts[partId]; - if (part.render) { - for (let pathId in part.paths) { - this.decoratePath(pathId, part, svg); - } - } - } - } - - /** Decorares a path with extra info */ - decoratePath(pathId: string, part: Part, svg: Svg): void { - let path = part.paths[pathId]; - if (!path.render) return false; - let id: string; - for (let op of path.ops) { - switch(op.type) { - case 'move': - id = svg.getUid(); - part.snippets[id] = new Snippet(op.to, 'path-start-point', `Startpoint of path ${pathId}`); - part.snippets[id].attributes.add('onmouseover', 'pointHover(evt)'); - part.snippets[id].attributes.add('id', svg.getUid()); - break; - case 'line': - id = svg.getUid(); - part.snippets[id] = new Snippet(op.to, 'path-point', `Line endpoint of path ${pathId}`); - part.snippets[id].attributes.add('onmouseover', 'pointHover(evt)'); - part.snippets[id].attributes.add('id', svg.getUid()); - break; - case 'curve': - id = svg.getUid(); - part.snippets[id] = new Snippet(op.to, 'path-point', `Curve endpoint of path ${pathId}`); - part.snippets[id].attributes.add('onmouseover', 'pointHover(evt)'); - part.snippets[id].attributes.add('id', svg.getUid()); - id = svg.getUid(); - part.snippets[id] = new Snippet(op.cp1, 'path-curvecontrol', `Curve cp1 of path ${pathId}`); - part.snippets[id].attributes.add('onmouseover', 'pointHover(evt)'); - part.snippets[id].attributes.add('id', svg.getUid()); - id = svg.getUid(); - part.snippets[id] = new Snippet(op.cp2, 'path-curvecontrol', `Curve cp2 of path ${pathId}`); - part.snippets[id].attributes.add('onmouseover', 'pointHover(evt)'); - let cp1 = new Path().move(current).line(op.cp1); - let cp2 = new Path().move(op.to).line(op.cp2); - cp1.attributes.add('class', 'curve-control'); - cp1.attributes.add('id', svg.getUid()); - cp2.attributes.add('class', 'curve-control'); - cp2.attributes.add('id', svg.getUid()); - part.paths[svg.getUid()] = cp1; - part.paths[svg.getUid()] = cp2; - break; - } - let current = op.to; - } - } -} diff --git a/lib/themes/draft.ts b/lib/themes/draft.ts deleted file mode 100644 index 3d10768c605..00000000000 --- a/lib/themes/draft.ts +++ /dev/null @@ -1,11 +0,0 @@ -import { Pattern } from '../pattern' -import { Svg } from '../svg' -import { Theme } from './theme'; - -export class Draft extends Theme { - /** Pre-render method is called just prior to rendering */ - preRender(pattern: Pattern, svg: Svg): void { - super.preRender(pattern, svg); - svg.attributes.add('freesewing:theme', 'draft'); - } -} diff --git a/lib/themes/paperless.ts b/lib/themes/paperless.ts deleted file mode 100644 index 74aaa92b303..00000000000 --- a/lib/themes/paperless.ts +++ /dev/null @@ -1,34 +0,0 @@ -import { Pattern } from '../pattern' -import { Svg } from '../svg' -import { Sample } from './sample'; - -export class Paperless extends Sample { - - /** Pre-render method is called just prior to rendering */ - preRender(pattern: Pattern, svg: Svg) { - super.preRender(pattern, svg); - svg.style += ` - rect.grid{fill:none;stroke:#555;stroke-width:0.3;fill:url(#grid);} - path.gridline{stroke:#555;stroke-width:0.2;} - path.gridline-lg{stroke:#777;stroke-width:0.2;stroke-dasharray:1.5,1.5;} - path.gridline-sm{stroke:#999;stroke-width:0.1;} - path.gridline-xs{stroke:#999;stroke-width:0.1;stroke-dasharray:0.5,0.5;} - `; - svg.defs += ` - - - - - - - - - - - - - - - `; - } -} diff --git a/lib/themes/sample.ts b/lib/themes/sample.ts deleted file mode 100644 index 879ef0349bc..00000000000 --- a/lib/themes/sample.ts +++ /dev/null @@ -1,15 +0,0 @@ -import { Pattern } from '../pattern' -import { Svg } from '../svg' -import { Theme } from './theme'; - -export class Sample extends Theme { - - /** Pre-render method is called just prior to rendering */ - preRender(pattern: Pattern, svg: Svg) { - super.preRender(pattern, svg); - svg.style += ` - path { fill: none; stroke: #000000; stroke-opacity:1; stroke-width: 0.5; stroke-miterlimit:4; stroke-dashoffset:0; stroke-linecap:round; stroke-linejoin:round; } - path.hidden { fill: none; stroke: none; } - `; - } -} diff --git a/lib/themes/theme.ts b/lib/themes/theme.ts deleted file mode 100644 index 24366c5064c..00000000000 --- a/lib/themes/theme.ts +++ /dev/null @@ -1,150 +0,0 @@ -import { Pattern } from '../pattern' -import { Svg } from '../svg' - -export abstract class Theme { - - /** Pre-render method is called just prior to rendering */ - preRender(pattern: Pattern, svg: Svg) { - svg.header += this.loadHeader(pattern); - svg.footer += this.loadFooter(pattern); - svg.style += this.loadStyle(pattern); - svg.script += this.loadScript(pattern); - svg.defs += this.loadDefs(pattern); - } - - /** Returns a string containing the SVG header */ - loadHeader(pattern: Pattern) { - - return ` - __ _ - / _|_ _ ___ ___ ________ __ _(_)_ _ __ _ - | _| '_/ -_) -_|_-< -_) V V / | ' \/ _' | - |_| |_| \___\___/__|___|\_/\_/|_|_||_\__, | - freesewing.org |___/ - - Sewing patterns for non-average people (*) - - (*) Average people don't exist -`; - } - - /** Returns a string containing the SVG footer */ - loadFooter(pattern: Pattern) { - return ''; - } - - /** Returns a string containing the SVG style/CSS */ - loadStyle(pattern: Pattern) { - return ` - path,circle,rect{fill:none;stroke:none} - path{fill:none;stroke:#000;stroke-opacity:1;stroke-width:.3;stroke-linecap:round;stroke-linejoin:round} - path.fabric{stroke-width:.6;stroke:#653f95} - path.lining{stroke-width:.6;stroke:#0275d8} - path.interfacing{stroke-width:.6;stroke:#d9534f} - path.canvas{stroke-width:.6;stroke:#5cb85c} - path.various{stroke-width:.6;stroke:#5bc0de} - path.sa{stroke-dasharray:0.4,0.8} - path.help{stroke-width:.2;stroke-dasharray:15,1.5,1,1.5} - path.hint{stroke-width:.2;stroke-dasharray:0.4,0.8} - path.note{stroke:#0275d8;stroke-width:.6;marker-start:url(#noteArrow)} - - text{font-size:5px;font-family:-apple-system,system-ui,BlinkMacSystemFont,"Segoe UI",Roboto,"Helvetica Neue",Arial,sans-serif;fill:#000; - text-anchor:start;font-weight:200} - text.center{text-anchor:middle} - text.part-nr{font-size:28px;text-anchor:middle;fill:#000;font-weight:100} - text.part-nr.horizontal{text-anchor:start} - text.part-title{font-size:18px;text-anchor:middle;fill:#000} - text.part-title.horizontal{text-anchor:start} - text.pattern-title{font-size:8px;font-weight:bold;text-anchor:middle;fill:#000} - text.pattern-title.horizontal{text-anchor:start} - text.part-msg{font-size:10px;text-anchor:middle} - text.part-meta{font-size:7px;text-anchor:middle} - text.part-msg.horizontal,text.part-meta.horizontal,text.part-title.vertical,text.part-msg.vertical{text-anchor:start} - text.part-nr.small{font-size:14px} - text.part-title.small{font-size:9px} - text.pattern-title.small{font-size:4px} - text.part-msg.small{font-size:5px} - text.part-meta.small{font-size:5px} - text.part-nr.extrasmall{font-size:7px} - text.part-title.extrasmall{font-size:5px} - text.pattern-title.extrasmall{font-size:3px} - text.part-msg.extrasmall{font-size:4px} - text.part-meta.extrasmall{font-size:3px} - text.note,text.dimension-label{fill:#0275d8} - text.note tspan{alignment-baseline:middle} - text.note-5,text.note-6,text.note-7,text.note-11,text.note-12,text.note-0,text.note-1,text.dimension-label{text-anchor:middle} - text.note-8,text.note-9,text.note-10{text-anchor:end} - text.dimension-label{font-size:7px} - text.grainline{fill:#999} - - path.arrow{stroke:#0275d8} - path.grainline{stroke:#999;stroke-width:.6;marker-start:url(#grainlineStart);marker-end:url(#grainlineEnd)} - path.dimension{stroke:#0275d8;stroke-width:.6;marker-start:url(#dimensionStart);marker-end:url(#dimensionEnd)} - path.dimension.dimension-sm{stroke-width:.3} - path.dimension-leader{stroke:#0275d8;stroke-width:.3} - path.single-arrow{marker-start:url(#dimensionStart)} - path.double-arrow{marker-start:url(#dimensionStart);marker-end:url(#dimensionEnd)} - - .text-xs{font-size:3px} - .text-sm{font-size:4px} - .text-lg{font-size:7px} - .text-xl{font-size:9px} - .text-center{text-anchor:middle} - .stroke-xs{stroke-width:.1} - .stroke-sm{stroke-width:.2} - .stroke-lg{stroke-width:.6} - .stroke-xl{stroke-width:1} - .stroke-xxl{stroke-width:2} - .dashed{stroke-dasharray:1,1.5} - .lashed{stroke-dasharray:6,6} - .dotted{stroke-dasharray:0.4,0.8} - .hidden{stroke:none;file:none} - .stroke-fabric{stroke:#653f95} - .stroke-lining{stroke:#0275d8} - .stroke-interfacing{stroke:#d9534f} - .stroke-canvas{stroke:#5cb85c} - .stroke-note{stroke:#0275d8} - .stroke-mark{stroke:#f0ad4e} - .stroke-hint{stroke:#86739c} - .stroke-gray{stroke:#999} - .fill-fabric{fill:#653f95} - .fill-lining{fill:#0275d8} - .fill-interfacing{fill:#d9534f} - .fill-canvas{fill:#5cb85c} - .fill-note{fill:#0275d8} - .fill-mark{fill:#f0ad4e} - .fill-hint{fill:#86739c} - .fill-gray{fill:#999}`; - } - - /** Returns a string containing the SVG ECMA script */ - loadScript(pattern: Pattern) { - return ''; - } - - /** Returns a string containing the SVG defs */ - loadDefs(pattern: Pattern) { - return ` - - - - - - - - - - - freesewing core v__VERSION__ __TITLE__ freesewing.org/drafts/__DRAFTHANDLE__ __SCALEBOX_METRIC__ __SCALEBOX_IMPERIAL__ - - - - - - - -`; - } -} diff --git a/package-lock.json b/package-lock.json index b6476dd4d49..473f47df765 100644 --- a/package-lock.json +++ b/package-lock.json @@ -33,7 +33,7 @@ "resolved": "https://registry.npmjs.org/accepts/-/accepts-1.3.5.tgz", "integrity": "sha1-63d99gEXI6OxTopywIBcjoZ0a9I=", "requires": { - "mime-types": "2.1.18", + "mime-types": "~2.1.18", "negotiator": "0.6.1" } }, @@ -42,8 +42,8 @@ "resolved": "https://registry.npmjs.org/anymatch/-/anymatch-1.3.2.tgz", "integrity": "sha512-0XNayC8lTHQ2OI8aljNCN3sSx6hsr/1+rlcDAotXJR7C1oZZHCNsfpbKwMjRA3Uqb5tF1Rae2oloTr4xpq+WjA==", "requires": { - "micromatch": "2.3.11", - "normalize-path": "2.1.1" + "micromatch": "^2.1.5", + "normalize-path": "^2.0.0" } }, "apache-crypt": { @@ -51,7 +51,7 @@ "resolved": "https://registry.npmjs.org/apache-crypt/-/apache-crypt-1.2.1.tgz", "integrity": "sha1-1vxyqm0n2ZyVqU/RiNcx7v/6Zjw=", "requires": { - "unix-crypt-td-js": "1.0.0" + "unix-crypt-td-js": "^1.0.0" } }, "apache-md5": { @@ -64,7 +64,7 @@ "resolved": "https://registry.npmjs.org/arr-diff/-/arr-diff-2.0.0.tgz", "integrity": "sha1-jzuCf5Vai9ZpaX5KQlasPOrjVs8=", "requires": { - "arr-flatten": "1.1.0" + "arr-flatten": "^1.0.1" } }, "arr-flatten": { @@ -129,7 +129,7 @@ "resolved": "https://registry.npmjs.org/bezier-js/-/bezier-js-2.2.13.tgz", "integrity": "sha512-RLQV6Jr6g7J5IDJXFYUhbwBJjuFi1JTsA2PdsVMnwbT7fQhZvEwtI7YF4k+6DEpXsRQ3o3iPj+cOaMP5DjtKsg==", "requires": { - "live-server": "1.2.0" + "live-server": "^1.2.0" } }, "binary-extensions": { @@ -142,7 +142,7 @@ "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz", "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==", "requires": { - "balanced-match": "1.0.0", + "balanced-match": "^1.0.0", "concat-map": "0.0.1" } }, @@ -151,9 +151,9 @@ "resolved": "https://registry.npmjs.org/braces/-/braces-1.8.5.tgz", "integrity": "sha1-uneWLhLf+WnWt2cR6RS3N4V79qc=", "requires": { - "expand-range": "1.8.2", - "preserve": "0.2.0", - "repeat-element": "1.1.2" + "expand-range": "^1.8.1", + "preserve": "^0.2.0", + "repeat-element": "^1.1.2" } }, "browser-stdout": { @@ -174,12 +174,12 @@ "integrity": "sha1-D2RYS6ZC8PKs4oBiefTwbKI61zw=", "dev": true, "requires": { - "assertion-error": "1.1.0", - "check-error": "1.0.2", - "deep-eql": "3.0.1", - "get-func-name": "2.0.0", - "pathval": "1.1.0", - "type-detect": "4.0.8" + "assertion-error": "^1.0.1", + "check-error": "^1.0.1", + "deep-eql": "^3.0.0", + "get-func-name": "^2.0.0", + "pathval": "^1.0.0", + "type-detect": "^4.0.0" } }, "check-error": { @@ -193,15 +193,15 @@ "resolved": "https://registry.npmjs.org/chokidar/-/chokidar-1.7.0.tgz", "integrity": "sha1-eY5ol3gVHIB2tLNg5e3SjNortGg=", "requires": { - "anymatch": "1.3.2", - "async-each": "1.0.1", - "fsevents": "1.2.4", - "glob-parent": "2.0.0", - "inherits": "2.0.3", - "is-binary-path": "1.0.1", - "is-glob": "2.0.1", - "path-is-absolute": "1.0.1", - "readdirp": "2.1.0" + "anymatch": "^1.3.0", + "async-each": "^1.0.0", + "fsevents": "^1.0.0", + "glob-parent": "^2.0.0", + "inherits": "^2.0.1", + "is-binary-path": "^1.0.0", + "is-glob": "^2.0.0", + "path-is-absolute": "^1.0.0", + "readdirp": "^2.0.0" } }, "colors": { @@ -225,9 +225,9 @@ "resolved": "https://registry.npmjs.org/connect/-/connect-3.5.1.tgz", "integrity": "sha1-bTDXpjx/FwhXprOqazY9lz3KWI4=", "requires": { - "debug": "2.2.0", + "debug": "~2.2.0", "finalhandler": "0.5.1", - "parseurl": "1.3.2", + "parseurl": "~1.3.1", "utils-merge": "1.0.0" } }, @@ -241,8 +241,8 @@ "resolved": "https://registry.npmjs.org/cors/-/cors-2.8.4.tgz", "integrity": "sha1-K9OB8usgECAQXNUOpZ2mMJBpRoY=", "requires": { - "object-assign": "4.1.1", - "vary": "1.1.2" + "object-assign": "^4", + "vary": "^1" } }, "debug": { @@ -259,7 +259,7 @@ "integrity": "sha512-+QeIQyN5ZuO+3Uk5DYh6/1eKO0m0YmJFGNmFHGACpf1ClL1nmlV/p4gNgbl2pJGxgXb4faqo6UE+M5ACEMyVcw==", "dev": true, "requires": { - "type-detect": "4.0.8" + "type-detect": "^4.0.0" } }, "depd": { @@ -314,13 +314,13 @@ "resolved": "http://registry.npmjs.org/event-stream/-/event-stream-3.3.4.tgz", "integrity": "sha1-SrTJoPWlTbkzi0w02Gv86PSzVXE=", "requires": { - "duplexer": "0.1.1", - "from": "0.1.7", - "map-stream": "0.1.0", + "duplexer": "~0.1.1", + "from": "~0", + "map-stream": "~0.1.0", "pause-stream": "0.0.11", - "split": "0.3.3", - "stream-combiner": "0.0.4", - "through": "2.3.8" + "split": "0.3", + "stream-combiner": "~0.0.4", + "through": "~2.3.1" } }, "expand-brackets": { @@ -328,7 +328,7 @@ "resolved": "https://registry.npmjs.org/expand-brackets/-/expand-brackets-0.1.5.tgz", "integrity": "sha1-3wcoTjQqgHzXM6xa9yQR5YHRF3s=", "requires": { - "is-posix-bracket": "0.1.1" + "is-posix-bracket": "^0.1.0" } }, "expand-range": { @@ -336,7 +336,7 @@ "resolved": "https://registry.npmjs.org/expand-range/-/expand-range-1.8.2.tgz", "integrity": "sha1-opnv/TNf4nIeuujiV+x5ZE/IUzc=", "requires": { - "fill-range": "2.2.4" + "fill-range": "^2.1.0" } }, "extglob": { @@ -344,7 +344,7 @@ "resolved": "https://registry.npmjs.org/extglob/-/extglob-0.3.2.tgz", "integrity": "sha1-Lhj/PS9JqydlzskCPwEdqo2DSaE=", "requires": { - "is-extglob": "1.0.0" + "is-extglob": "^1.0.0" } }, "faye-websocket": { @@ -352,7 +352,7 @@ "resolved": "https://registry.npmjs.org/faye-websocket/-/faye-websocket-0.11.1.tgz", "integrity": "sha1-8O/hjE9W5PQK/H4Gxxn9XuYYjzg=", "requires": { - "websocket-driver": "0.7.0" + "websocket-driver": ">=0.5.1" } }, "filename-regex": { @@ -365,11 +365,11 @@ "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-2.2.4.tgz", "integrity": "sha512-cnrcCbj01+j2gTG921VZPnHbjmdAf8oQV/iGeV2kZxGSyfYjjTyY79ErsK1WJWMpw6DaApEX72binqJE+/d+5Q==", "requires": { - "is-number": "2.1.0", - "isobject": "2.1.0", - "randomatic": "3.0.0", - "repeat-element": "1.1.2", - "repeat-string": "1.6.1" + "is-number": "^2.1.0", + "isobject": "^2.0.0", + "randomatic": "^3.0.0", + "repeat-element": "^1.1.2", + "repeat-string": "^1.5.2" } }, "finalhandler": { @@ -377,11 +377,11 @@ "resolved": "https://registry.npmjs.org/finalhandler/-/finalhandler-0.5.1.tgz", "integrity": "sha1-LEANjUUwk1vCMlScX6OF7Afeb80=", "requires": { - "debug": "2.2.0", - "escape-html": "1.0.3", - "on-finished": "2.3.0", - "statuses": "1.3.1", - "unpipe": "1.0.0" + "debug": "~2.2.0", + "escape-html": "~1.0.3", + "on-finished": "~2.3.0", + "statuses": "~1.3.1", + "unpipe": "~1.0.0" } }, "for-in": { @@ -394,7 +394,7 @@ "resolved": "https://registry.npmjs.org/for-own/-/for-own-0.1.5.tgz", "integrity": "sha1-UmXGgaTylNq78XyVCbZ2OqhFEM4=", "requires": { - "for-in": "1.0.2" + "for-in": "^1.0.1" } }, "fresh": { @@ -419,8 +419,8 @@ "integrity": "sha512-z8H8/diyk76B7q5wg+Ud0+CqzcAF3mBBI/bA5ne5zrRUUIvNkJY//D3BqyH571KuAC4Nr7Rw7CjWX4r0y9DvNg==", "optional": true, "requires": { - "nan": "2.10.0", - "node-pre-gyp": "0.10.0" + "nan": "^2.9.2", + "node-pre-gyp": "^0.10.0" }, "dependencies": { "abbrev": { @@ -442,8 +442,8 @@ "bundled": true, "optional": true, "requires": { - "delegates": "1.0.0", - "readable-stream": "2.3.6" + "delegates": "^1.0.0", + "readable-stream": "^2.0.6" } }, "balanced-match": { @@ -454,7 +454,7 @@ "version": "1.1.11", "bundled": true, "requires": { - "balanced-match": "1.0.0", + "balanced-match": "^1.0.0", "concat-map": "0.0.1" } }, @@ -508,7 +508,7 @@ "bundled": true, "optional": true, "requires": { - "minipass": "2.2.4" + "minipass": "^2.2.1" } }, "fs.realpath": { @@ -521,14 +521,14 @@ "bundled": true, "optional": true, "requires": { - "aproba": "1.2.0", - "console-control-strings": "1.1.0", - "has-unicode": "2.0.1", - "object-assign": "4.1.1", - "signal-exit": "3.0.2", - "string-width": "1.0.2", - "strip-ansi": "3.0.1", - "wide-align": "1.1.2" + "aproba": "^1.0.3", + "console-control-strings": "^1.0.0", + "has-unicode": "^2.0.0", + "object-assign": "^4.1.0", + "signal-exit": "^3.0.0", + "string-width": "^1.0.1", + "strip-ansi": "^3.0.1", + "wide-align": "^1.1.0" } }, "glob": { @@ -536,12 +536,12 @@ "bundled": true, "optional": true, "requires": { - "fs.realpath": "1.0.0", - "inflight": "1.0.6", - "inherits": "2.0.3", - "minimatch": "3.0.4", - "once": "1.4.0", - "path-is-absolute": "1.0.1" + "fs.realpath": "^1.0.0", + "inflight": "^1.0.4", + "inherits": "2", + "minimatch": "^3.0.4", + "once": "^1.3.0", + "path-is-absolute": "^1.0.0" } }, "has-unicode": { @@ -554,7 +554,7 @@ "bundled": true, "optional": true, "requires": { - "safer-buffer": "2.1.2" + "safer-buffer": "^2.1.0" } }, "ignore-walk": { @@ -562,7 +562,7 @@ "bundled": true, "optional": true, "requires": { - "minimatch": "3.0.4" + "minimatch": "^3.0.4" } }, "inflight": { @@ -570,8 +570,8 @@ "bundled": true, "optional": true, "requires": { - "once": "1.4.0", - "wrappy": "1.0.2" + "once": "^1.3.0", + "wrappy": "1" } }, "inherits": { @@ -587,7 +587,7 @@ "version": "1.0.0", "bundled": true, "requires": { - "number-is-nan": "1.0.1" + "number-is-nan": "^1.0.0" } }, "isarray": { @@ -599,7 +599,7 @@ "version": "3.0.4", "bundled": true, "requires": { - "brace-expansion": "1.1.11" + "brace-expansion": "^1.1.7" } }, "minimist": { @@ -610,8 +610,8 @@ "version": "2.2.4", "bundled": true, "requires": { - "safe-buffer": "5.1.1", - "yallist": "3.0.2" + "safe-buffer": "^5.1.1", + "yallist": "^3.0.0" } }, "minizlib": { @@ -619,7 +619,7 @@ "bundled": true, "optional": true, "requires": { - "minipass": "2.2.4" + "minipass": "^2.2.1" } }, "mkdirp": { @@ -639,9 +639,9 @@ "bundled": true, "optional": true, "requires": { - "debug": "2.6.9", - "iconv-lite": "0.4.21", - "sax": "1.2.4" + "debug": "^2.1.2", + "iconv-lite": "^0.4.4", + "sax": "^1.2.4" } }, "node-pre-gyp": { @@ -649,16 +649,16 @@ "bundled": true, "optional": true, "requires": { - "detect-libc": "1.0.3", - "mkdirp": "0.5.1", - "needle": "2.2.0", - "nopt": "4.0.1", - "npm-packlist": "1.1.10", - "npmlog": "4.1.2", - "rc": "1.2.7", - "rimraf": "2.6.2", - "semver": "5.5.0", - "tar": "4.4.1" + "detect-libc": "^1.0.2", + "mkdirp": "^0.5.1", + "needle": "^2.2.0", + "nopt": "^4.0.1", + "npm-packlist": "^1.1.6", + "npmlog": "^4.0.2", + "rc": "^1.1.7", + "rimraf": "^2.6.1", + "semver": "^5.3.0", + "tar": "^4" } }, "nopt": { @@ -666,8 +666,8 @@ "bundled": true, "optional": true, "requires": { - "abbrev": "1.1.1", - "osenv": "0.1.5" + "abbrev": "1", + "osenv": "^0.1.4" } }, "npm-bundled": { @@ -680,8 +680,8 @@ "bundled": true, "optional": true, "requires": { - "ignore-walk": "3.0.1", - "npm-bundled": "1.0.3" + "ignore-walk": "^3.0.1", + "npm-bundled": "^1.0.1" } }, "npmlog": { @@ -689,10 +689,10 @@ "bundled": true, "optional": true, "requires": { - "are-we-there-yet": "1.1.4", - "console-control-strings": "1.1.0", - "gauge": "2.7.4", - "set-blocking": "2.0.0" + "are-we-there-yet": "~1.1.2", + "console-control-strings": "~1.1.0", + "gauge": "~2.7.3", + "set-blocking": "~2.0.0" } }, "number-is-nan": { @@ -708,7 +708,7 @@ "version": "1.4.0", "bundled": true, "requires": { - "wrappy": "1.0.2" + "wrappy": "1" } }, "os-homedir": { @@ -726,8 +726,8 @@ "bundled": true, "optional": true, "requires": { - "os-homedir": "1.0.2", - "os-tmpdir": "1.0.2" + "os-homedir": "^1.0.0", + "os-tmpdir": "^1.0.0" } }, "path-is-absolute": { @@ -745,10 +745,10 @@ "bundled": true, "optional": true, "requires": { - "deep-extend": "0.5.1", - "ini": "1.3.5", - "minimist": "1.2.0", - "strip-json-comments": "2.0.1" + "deep-extend": "^0.5.1", + "ini": "~1.3.0", + "minimist": "^1.2.0", + "strip-json-comments": "~2.0.1" }, "dependencies": { "minimist": { @@ -763,13 +763,13 @@ "bundled": true, "optional": true, "requires": { - "core-util-is": "1.0.2", - "inherits": "2.0.3", - "isarray": "1.0.0", - "process-nextick-args": "2.0.0", - "safe-buffer": "5.1.1", - "string_decoder": "1.1.1", - "util-deprecate": "1.0.2" + "core-util-is": "~1.0.0", + "inherits": "~2.0.3", + "isarray": "~1.0.0", + "process-nextick-args": "~2.0.0", + "safe-buffer": "~5.1.1", + "string_decoder": "~1.1.1", + "util-deprecate": "~1.0.1" } }, "rimraf": { @@ -777,7 +777,7 @@ "bundled": true, "optional": true, "requires": { - "glob": "7.1.2" + "glob": "^7.0.5" } }, "safe-buffer": { @@ -813,9 +813,9 @@ "version": "1.0.2", "bundled": true, "requires": { - "code-point-at": "1.1.0", - "is-fullwidth-code-point": "1.0.0", - "strip-ansi": "3.0.1" + "code-point-at": "^1.0.0", + "is-fullwidth-code-point": "^1.0.0", + "strip-ansi": "^3.0.0" } }, "string_decoder": { @@ -823,14 +823,14 @@ "bundled": true, "optional": true, "requires": { - "safe-buffer": "5.1.1" + "safe-buffer": "~5.1.0" } }, "strip-ansi": { "version": "3.0.1", "bundled": true, "requires": { - "ansi-regex": "2.1.1" + "ansi-regex": "^2.0.0" } }, "strip-json-comments": { @@ -843,13 +843,13 @@ "bundled": true, "optional": true, "requires": { - "chownr": "1.0.1", - "fs-minipass": "1.2.5", - "minipass": "2.2.4", - "minizlib": "1.1.0", - "mkdirp": "0.5.1", - "safe-buffer": "5.1.1", - "yallist": "3.0.2" + "chownr": "^1.0.1", + "fs-minipass": "^1.2.5", + "minipass": "^2.2.4", + "minizlib": "^1.1.0", + "mkdirp": "^0.5.0", + "safe-buffer": "^5.1.1", + "yallist": "^3.0.2" } }, "util-deprecate": { @@ -862,7 +862,7 @@ "bundled": true, "optional": true, "requires": { - "string-width": "1.0.2" + "string-width": "^1.0.2" } }, "wrappy": { @@ -887,12 +887,12 @@ "integrity": "sha512-MJTUg1kjuLeQCJ+ccE4Vpa6kKVXkPYJ2mOCQyUuKLcLQsdrMCpBPUi8qVE6+YuaJkozeA9NusTAw3hLr8Xe5EQ==", "dev": true, "requires": { - "fs.realpath": "1.0.0", - "inflight": "1.0.6", - "inherits": "2.0.3", - "minimatch": "3.0.4", - "once": "1.4.0", - "path-is-absolute": "1.0.1" + "fs.realpath": "^1.0.0", + "inflight": "^1.0.4", + "inherits": "2", + "minimatch": "^3.0.4", + "once": "^1.3.0", + "path-is-absolute": "^1.0.0" } }, "glob-base": { @@ -900,8 +900,8 @@ "resolved": "https://registry.npmjs.org/glob-base/-/glob-base-0.3.0.tgz", "integrity": "sha1-27Fk9iIbHAscz4Kuoyi0l98Oo8Q=", "requires": { - "glob-parent": "2.0.0", - "is-glob": "2.0.1" + "glob-parent": "^2.0.0", + "is-glob": "^2.0.0" } }, "glob-parent": { @@ -909,7 +909,7 @@ "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-2.0.0.tgz", "integrity": "sha1-gTg9ctsFT8zPUzbaqQLxgvbtuyg=", "requires": { - "is-glob": "2.0.1" + "is-glob": "^2.0.0" } }, "graceful-fs": { @@ -935,15 +935,20 @@ "integrity": "sha1-k0EP0hsAlzUVH4howvJx80J+I/0=", "dev": true }, + "hooks": { + "version": "0.3.2", + "resolved": "https://registry.npmjs.org/hooks/-/hooks-0.3.2.tgz", + "integrity": "sha1-ox8GDCAmzqbPHKPrF4Qw5xjhxKM=" + }, "http-auth": { "version": "3.1.3", "resolved": "https://registry.npmjs.org/http-auth/-/http-auth-3.1.3.tgz", "integrity": "sha1-lFz63WZSHq+PfISRPTd9exXyTjE=", "requires": { - "apache-crypt": "1.2.1", - "apache-md5": "1.1.2", - "bcryptjs": "2.4.3", - "uuid": "3.3.2" + "apache-crypt": "^1.1.2", + "apache-md5": "^1.0.6", + "bcryptjs": "^2.3.0", + "uuid": "^3.0.0" } }, "http-errors": { @@ -951,10 +956,10 @@ "resolved": "https://registry.npmjs.org/http-errors/-/http-errors-1.6.3.tgz", "integrity": "sha1-i1VoC7S+KDoLW/TqLjhYC+HZMg0=", "requires": { - "depd": "1.1.2", + "depd": "~1.1.2", "inherits": "2.0.3", "setprototypeof": "1.1.0", - "statuses": "1.5.0" + "statuses": ">= 1.4.0 < 2" }, "dependencies": { "statuses": { @@ -975,8 +980,8 @@ "integrity": "sha1-Sb1jMdfQLQwJvJEKEHW6gWW1bfk=", "dev": true, "requires": { - "once": "1.4.0", - "wrappy": "1.0.2" + "once": "^1.3.0", + "wrappy": "1" } }, "inherits": { @@ -989,7 +994,7 @@ "resolved": "https://registry.npmjs.org/is-binary-path/-/is-binary-path-1.0.1.tgz", "integrity": "sha1-dfFmQrSA8YenEcgUFh/TpKdlWJg=", "requires": { - "binary-extensions": "1.11.0" + "binary-extensions": "^1.0.0" } }, "is-buffer": { @@ -1007,7 +1012,7 @@ "resolved": "https://registry.npmjs.org/is-equal-shallow/-/is-equal-shallow-0.1.3.tgz", "integrity": "sha1-IjgJj8Ih3gvPpdnqxMRdY4qhxTQ=", "requires": { - "is-primitive": "2.0.0" + "is-primitive": "^2.0.0" } }, "is-extendable": { @@ -1025,7 +1030,7 @@ "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-2.0.1.tgz", "integrity": "sha1-0Jb5JqPe1WAPP9/ZEZjLCIjC2GM=", "requires": { - "is-extglob": "1.0.0" + "is-extglob": "^1.0.0" } }, "is-number": { @@ -1033,7 +1038,7 @@ "resolved": "https://registry.npmjs.org/is-number/-/is-number-2.1.0.tgz", "integrity": "sha1-Afy7s5NGOlSPL0ZszhbezknbkI8=", "requires": { - "kind-of": "3.2.2" + "kind-of": "^3.0.2" } }, "is-posix-bracket": { @@ -1069,7 +1074,7 @@ "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", "requires": { - "is-buffer": "1.1.6" + "is-buffer": "^1.1.5" } }, "live-server": { @@ -1077,19 +1082,19 @@ "resolved": "https://registry.npmjs.org/live-server/-/live-server-1.2.0.tgz", "integrity": "sha1-RJhkS7+Bpm8Y3Y3/3vYcTBw3TKM=", "requires": { - "chokidar": "1.7.0", - "colors": "1.3.0", - "connect": "3.5.1", - "cors": "2.8.4", - "event-stream": "3.3.4", - "faye-websocket": "0.11.1", - "http-auth": "3.1.3", - "morgan": "1.9.0", - "object-assign": "4.1.1", - "opn": "5.3.0", - "proxy-middleware": "0.15.0", - "send": "0.16.2", - "serve-index": "1.9.1" + "chokidar": "^1.6.0", + "colors": "^1.3.0", + "connect": "3.5.x", + "cors": "^2.8.4", + "event-stream": "^3.3.4", + "faye-websocket": "0.11.x", + "http-auth": "3.1.x", + "morgan": "^1.6.1", + "object-assign": "^4.1.1", + "opn": "^5.3.0", + "proxy-middleware": "^0.15.0", + "send": "^0.16.2", + "serve-index": "^1.7.2" } }, "make-error": { @@ -1113,19 +1118,19 @@ "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-2.3.11.tgz", "integrity": "sha1-hmd8l9FyCzY0MdBNDRUpO9OMFWU=", "requires": { - "arr-diff": "2.0.0", - "array-unique": "0.2.1", - "braces": "1.8.5", - "expand-brackets": "0.1.5", - "extglob": "0.3.2", - "filename-regex": "2.0.1", - "is-extglob": "1.0.0", - "is-glob": "2.0.1", - "kind-of": "3.2.2", - "normalize-path": "2.1.1", - "object.omit": "2.0.1", - "parse-glob": "3.0.4", - "regex-cache": "0.4.4" + "arr-diff": "^2.0.0", + "array-unique": "^0.2.1", + "braces": "^1.8.2", + "expand-brackets": "^0.1.4", + "extglob": "^0.3.1", + "filename-regex": "^2.0.0", + "is-extglob": "^1.0.0", + "is-glob": "^2.0.1", + "kind-of": "^3.0.2", + "normalize-path": "^2.0.1", + "object.omit": "^2.0.0", + "parse-glob": "^3.0.4", + "regex-cache": "^0.4.2" } }, "mime": { @@ -1143,7 +1148,7 @@ "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.18.tgz", "integrity": "sha512-lc/aahn+t4/SWV/qcmumYjymLsWfN3ELhpmVuUFjgsORruuZPVSwAQryq+HHGvO/SI2KVX26bx+En+zhM8g8hQ==", "requires": { - "mime-db": "1.33.0" + "mime-db": "~1.33.0" } }, "minimatch": { @@ -1151,7 +1156,7 @@ "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.0.4.tgz", "integrity": "sha512-yJHVQEhyqPLUTgt9B83PXu6W3rx4MvvHvSUvToogpwoGDOUQ+yDrR0HRot+yOCdCO7u4hX3pWft6kWBBcqh0UA==", "requires": { - "brace-expansion": "1.1.11" + "brace-expansion": "^1.1.7" } }, "minimist": { @@ -1210,11 +1215,11 @@ "resolved": "https://registry.npmjs.org/morgan/-/morgan-1.9.0.tgz", "integrity": "sha1-0B+mxlhZt2/PMbPLU6OCGjEdgFE=", "requires": { - "basic-auth": "2.0.0", + "basic-auth": "~2.0.0", "debug": "2.6.9", - "depd": "1.1.2", - "on-finished": "2.3.0", - "on-headers": "1.0.1" + "depd": "~1.1.1", + "on-finished": "~2.3.0", + "on-headers": "~1.0.1" }, "dependencies": { "debug": { @@ -1253,7 +1258,7 @@ "resolved": "https://registry.npmjs.org/normalize-path/-/normalize-path-2.1.1.tgz", "integrity": "sha1-GrKLVW4Zg2Oowab35vogE3/mrtk=", "requires": { - "remove-trailing-separator": "1.1.0" + "remove-trailing-separator": "^1.0.1" } }, "object-assign": { @@ -1266,8 +1271,8 @@ "resolved": "https://registry.npmjs.org/object.omit/-/object.omit-2.0.1.tgz", "integrity": "sha1-Gpx0SCnznbuFjHbKNXmuKlTr0fo=", "requires": { - "for-own": "0.1.5", - "is-extendable": "0.1.1" + "for-own": "^0.1.4", + "is-extendable": "^0.1.1" } }, "on-finished": { @@ -1289,7 +1294,7 @@ "integrity": "sha1-WDsap3WWHUsROsF9nFC6753Xa9E=", "dev": true, "requires": { - "wrappy": "1.0.2" + "wrappy": "1" } }, "opn": { @@ -1297,7 +1302,7 @@ "resolved": "https://registry.npmjs.org/opn/-/opn-5.3.0.tgz", "integrity": "sha512-bYJHo/LOmoTd+pfiYhfZDnf9zekVJrY+cnS2a5F2x+w5ppvTqObojTP7WiFG+kVZs9Inw+qQ/lw7TroWwhdd2g==", "requires": { - "is-wsl": "1.1.0" + "is-wsl": "^1.1.0" } }, "parse-glob": { @@ -1305,10 +1310,10 @@ "resolved": "https://registry.npmjs.org/parse-glob/-/parse-glob-3.0.4.tgz", "integrity": "sha1-ssN2z7EfNVE7rdFz7wu246OIORw=", "requires": { - "glob-base": "0.3.0", - "is-dotfile": "1.0.3", - "is-extglob": "1.0.0", - "is-glob": "2.0.1" + "glob-base": "^0.3.0", + "is-dotfile": "^1.0.0", + "is-extglob": "^1.0.0", + "is-glob": "^2.0.0" } }, "parseurl": { @@ -1332,7 +1337,7 @@ "resolved": "https://registry.npmjs.org/pause-stream/-/pause-stream-0.0.11.tgz", "integrity": "sha1-/lo0sMvOErWqaitAPuLnO2AvFEU=", "requires": { - "through": "2.3.8" + "through": "~2.3" } }, "preserve": { @@ -1355,9 +1360,9 @@ "resolved": "https://registry.npmjs.org/randomatic/-/randomatic-3.0.0.tgz", "integrity": "sha512-VdxFOIEY3mNO5PtSRkkle/hPJDHvQhK21oa73K4yAc9qmp6N429gAyF1gZMOTMeS0/AYzaV/2Trcef+NaIonSA==", "requires": { - "is-number": "4.0.0", - "kind-of": "6.0.2", - "math-random": "1.0.1" + "is-number": "^4.0.0", + "kind-of": "^6.0.0", + "math-random": "^1.0.1" }, "dependencies": { "is-number": { @@ -1382,13 +1387,13 @@ "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.6.tgz", "integrity": "sha512-tQtKA9WIAhBF3+VLAseyMqZeBjW0AHJoxOtYqSUZNJxauErmLbVm2FW1y+J/YA9dUrAC39ITejlZWhVIwawkKw==", "requires": { - "core-util-is": "1.0.2", - "inherits": "2.0.3", - "isarray": "1.0.0", - "process-nextick-args": "2.0.0", - "safe-buffer": "5.1.2", - "string_decoder": "1.1.1", - "util-deprecate": "1.0.2" + "core-util-is": "~1.0.0", + "inherits": "~2.0.3", + "isarray": "~1.0.0", + "process-nextick-args": "~2.0.0", + "safe-buffer": "~5.1.1", + "string_decoder": "~1.1.1", + "util-deprecate": "~1.0.1" } }, "readdirp": { @@ -1396,10 +1401,10 @@ "resolved": "https://registry.npmjs.org/readdirp/-/readdirp-2.1.0.tgz", "integrity": "sha1-TtCtBg3zBzMAxIRANz9y0cxkLXg=", "requires": { - "graceful-fs": "4.1.11", - "minimatch": "3.0.4", - "readable-stream": "2.3.6", - "set-immediate-shim": "1.0.1" + "graceful-fs": "^4.1.2", + "minimatch": "^3.0.2", + "readable-stream": "^2.0.2", + "set-immediate-shim": "^1.0.1" } }, "regex-cache": { @@ -1407,7 +1412,7 @@ "resolved": "https://registry.npmjs.org/regex-cache/-/regex-cache-0.4.4.tgz", "integrity": "sha512-nVIZwtCjkC9YgvWkpM55B5rBhBYRZhAaJbgcFYXXsHnbZ9UZI9nnVWYZpBlCqv9ho2eZryPnWrZGsOdPwVWXWQ==", "requires": { - "is-equal-shallow": "0.1.3" + "is-equal-shallow": "^0.1.3" } }, "remove-trailing-separator": { @@ -1436,18 +1441,18 @@ "integrity": "sha512-E64YFPUssFHEFBvpbbjr44NCLtI1AohxQ8ZSiJjQLskAdKuriYEP6VyGEsRDH8ScozGpkaX1BGvhanqCwkcEZw==", "requires": { "debug": "2.6.9", - "depd": "1.1.2", - "destroy": "1.0.4", - "encodeurl": "1.0.2", - "escape-html": "1.0.3", - "etag": "1.8.1", + "depd": "~1.1.2", + "destroy": "~1.0.4", + "encodeurl": "~1.0.2", + "escape-html": "~1.0.3", + "etag": "~1.8.1", "fresh": "0.5.2", - "http-errors": "1.6.3", + "http-errors": "~1.6.2", "mime": "1.4.1", "ms": "2.0.0", - "on-finished": "2.3.0", - "range-parser": "1.2.0", - "statuses": "1.4.0" + "on-finished": "~2.3.0", + "range-parser": "~1.2.0", + "statuses": "~1.4.0" }, "dependencies": { "debug": { @@ -1475,13 +1480,13 @@ "resolved": "https://registry.npmjs.org/serve-index/-/serve-index-1.9.1.tgz", "integrity": "sha1-03aNabHn2C5c4FD/9bRTvqEqkjk=", "requires": { - "accepts": "1.3.5", + "accepts": "~1.3.4", "batch": "0.6.1", "debug": "2.6.9", - "escape-html": "1.0.3", - "http-errors": "1.6.3", - "mime-types": "2.1.18", - "parseurl": "1.3.2" + "escape-html": "~1.0.3", + "http-errors": "~1.6.2", + "mime-types": "~2.1.17", + "parseurl": "~1.3.2" }, "dependencies": { "debug": { @@ -1521,8 +1526,8 @@ "integrity": "sha512-N4KXEz7jcKqPf2b2vZF11lQIz9W5ZMuUcIOGj243lduidkf2fjkVKJS9vNxVWn3u/uxX38AcE8U9nnH9FPcq+g==", "dev": true, "requires": { - "buffer-from": "1.1.0", - "source-map": "0.6.1" + "buffer-from": "^1.0.0", + "source-map": "^0.6.0" } }, "split": { @@ -1530,7 +1535,7 @@ "resolved": "https://registry.npmjs.org/split/-/split-0.3.3.tgz", "integrity": "sha1-zQ7qXmOiEd//frDwkcQTPi0N0o8=", "requires": { - "through": "2.3.8" + "through": "2" } }, "statuses": { @@ -1543,7 +1548,7 @@ "resolved": "https://registry.npmjs.org/stream-combiner/-/stream-combiner-0.0.4.tgz", "integrity": "sha1-TV5DPBhSYd3mI8o/RMWGvPXErRQ=", "requires": { - "duplexer": "0.1.1" + "duplexer": "~0.1.1" } }, "string_decoder": { @@ -1551,7 +1556,7 @@ "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz", "integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==", "requires": { - "safe-buffer": "5.1.2" + "safe-buffer": "~5.1.0" } }, "supports-color": { @@ -1560,7 +1565,7 @@ "integrity": "sha512-zjaXglF5nnWpsq470jSv6P9DwPvgLkuapYmfDm3JWOm0vkNTVF2tI4UrN2r6jH1qM/uc/WtxYY1hYoA2dOKj5w==", "dev": true, "requires": { - "has-flag": "3.0.0" + "has-flag": "^3.0.0" } }, "through": { @@ -1574,14 +1579,14 @@ "integrity": "sha512-klJsfswHP0FuOLsvBZ/zzCfUvakOSSxds78mVeK7I+qP76YWtxf16hEZsp3U+b0kIo82R5UatGFeblYMqabb2Q==", "dev": true, "requires": { - "arrify": "1.0.1", - "buffer-from": "1.1.0", - "diff": "3.5.0", - "make-error": "1.3.4", - "minimist": "1.2.0", - "mkdirp": "0.5.1", - "source-map-support": "0.5.6", - "yn": "2.0.0" + "arrify": "^1.0.0", + "buffer-from": "^1.1.0", + "diff": "^3.1.0", + "make-error": "^1.1.1", + "minimist": "^1.2.0", + "mkdirp": "^0.5.1", + "source-map-support": "^0.5.6", + "yn": "^2.0.0" }, "dependencies": { "minimist": { @@ -1639,8 +1644,8 @@ "resolved": "https://registry.npmjs.org/websocket-driver/-/websocket-driver-0.7.0.tgz", "integrity": "sha1-DK+dLXVdk67gSdS90NP+LMoqJOs=", "requires": { - "http-parser-js": "0.4.13", - "websocket-extensions": "0.1.3" + "http-parser-js": ">=0.4.0", + "websocket-extensions": ">=0.1.1" } }, "websocket-extensions": { diff --git a/package.json b/package.json index 3ea4cbc66fc..436fcd07a62 100644 --- a/package.json +++ b/package.json @@ -20,7 +20,8 @@ }, "homepage": "https://github.com/joostdecock/freesewing#readme", "dependencies": { - "bezier-js": "^2.2.13" + "bezier-js": "^2.2.13", + "hooks": "^0.3.2" }, "devDependencies": { "@types/bezier-js": "0.0.7",