From 123fba5b072c787cc75405018415bf098b77801e Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Jason=20W=C3=BCrtz?= Date: Sat, 6 Jul 2019 11:29:10 -0300 Subject: [PATCH 01/31] test(ganttDb.spec): add test case for inclusive end dates --- src/diagrams/gantt/ganttDb.spec.js | 22 ++++++++++++++++++++++ 1 file changed, 22 insertions(+) diff --git a/src/diagrams/gantt/ganttDb.spec.js b/src/diagrams/gantt/ganttDb.spec.js index 12e644a0d..2601c9497 100644 --- a/src/diagrams/gantt/ganttDb.spec.js +++ b/src/diagrams/gantt/ganttDb.spec.js @@ -125,4 +125,26 @@ describe('when using the ganttDb', function () { expect(tasks[6].id).toEqual('id7') expect(tasks[6].task).toEqual('test7') }) + + describe('when setting inclusive end dates', function () { + beforeEach(function () { + ganttDb.setDateFormat('YYYY-MM-DD', false) + ganttDb.addTask('test1', 'id1,2019-02-01,1d') + ganttDb.addTask('test2', 'id2,2019-02-01,2019-02-03') + }) + it('should automatically add one day to all end dates', function () { + const tasks = ganttDb.getTasks() + expect(tasks[0].startTime).toEqual(moment('2019-02-01', 'YYYY-MM-DD').toDate()) + expect(tasks[0].endTime).toEqual(moment('2019-02-02', 'YYYY-MM-DD').toDate()) + expect(tasks[0].id).toEqual('id1') + expect(tasks[0].task).toEqual('test1') + + expect(tasks[1].startTime).toEqual(moment('2019-02-01', 'YYYY-MM-DD').toDate()) + expect(tasks[1].endTime).toEqual(moment('2019-02-04', 'YYYY-MM-DD').toDate()) + expect(tasks[3].renderEndTime).toBeNull() // Fixed end + expect(tasks[1].manualEndTime).toBeTruthy() + expect(tasks[1].id).toEqual('id2') + expect(tasks[1].task).toEqual('test2') + }) + }) }) From 402d4bdee17439b760df86a364f6f2f3731c62c2 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Jason=20W=C3=BCrtz?= Date: Sat, 6 Jul 2019 11:29:50 -0300 Subject: [PATCH 02/31] test(gantt.spec): add parser test for inclusive end dates --- src/diagrams/gantt/parser/gantt.spec.js | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/src/diagrams/gantt/parser/gantt.spec.js b/src/diagrams/gantt/parser/gantt.spec.js index ad6295180..1a066b941 100644 --- a/src/diagrams/gantt/parser/gantt.spec.js +++ b/src/diagrams/gantt/parser/gantt.spec.js @@ -14,6 +14,12 @@ describe('when parsing a gantt diagram it', function () { parser.parse(str) }) + + it('should handle a dateFormat definition with inclusivity specified', function () { + const str = 'gantt\ndateFormat yyyy-mm-dd inclusive' + + parser.parse(str) + }) it('should handle a title definition', function () { const str = 'gantt\ndateFormat yyyy-mm-dd\ntitle Adding gantt diagram functionality to mermaid' From 6dce25539318b21dbbba02971256d96a89028f7d Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Jason=20W=C3=BCrtz?= Date: Sat, 6 Jul 2019 11:30:13 -0300 Subject: [PATCH 03/31] fix(ganttDb.js): clear formats and excludes on clear --- src/diagrams/gantt/ganttDb.js | 3 +++ 1 file changed, 3 insertions(+) diff --git a/src/diagrams/gantt/ganttDb.js b/src/diagrams/gantt/ganttDb.js index cce922ea1..4d2464ae2 100644 --- a/src/diagrams/gantt/ganttDb.js +++ b/src/diagrams/gantt/ganttDb.js @@ -22,6 +22,9 @@ export const clear = function () { lastTask = undefined lastTaskID = undefined rawTasks = [] + dateFormat = '' + axisFormat = '' + excludes = [] } export const setAxisFormat = function (txt) { From 6d20ccccd083104672c1d3d9f936876902ee8407 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Jason=20W=C3=BCrtz?= Date: Sat, 6 Jul 2019 11:54:18 -0300 Subject: [PATCH 04/31] feat(ganttDb.js): add getters for excludes,sections and date format --- src/diagrams/gantt/ganttDb.js | 15 +++++++++++++++ 1 file changed, 15 insertions(+) diff --git a/src/diagrams/gantt/ganttDb.js b/src/diagrams/gantt/ganttDb.js index 4d2464ae2..41a150430 100644 --- a/src/diagrams/gantt/ganttDb.js +++ b/src/diagrams/gantt/ganttDb.js @@ -39,10 +39,18 @@ export const setDateFormat = function (txt) { dateFormat = txt } +export const getDateFormat = function () { + return dateFormat +} + export const setExcludes = function (txt) { excludes = txt.toLowerCase().split(/[\s,]+/) } +export const getExcludes = function () { + return excludes +} + export const setTitle = function (txt) { title = txt } @@ -56,6 +64,10 @@ export const addSection = function (txt) { sections.push(txt) } +export const getSections = function () { + return sections +} + export const getTasks = function () { let allItemsPricessed = compileTasks() const maxDepth = 10 @@ -498,16 +510,19 @@ export const bindFunctions = function (element) { export default { clear, setDateFormat, + getDateFormat, setAxisFormat, getAxisFormat, setTitle, getTitle, addSection, + getSections, getTasks, addTask, findTaskById, addTaskOrg, setExcludes, + getExcludes, setClickEvent, setLink, bindFunctions From 0515375cfa0f1f96410dcb2e9ecd0aadb8877a27 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Jason=20W=C3=BCrtz?= Date: Sat, 6 Jul 2019 11:54:45 -0300 Subject: [PATCH 05/31] test(ganttDb.spec): clear function --- src/diagrams/gantt/ganttDb.spec.js | 23 +++++++++++++++++++++++ 1 file changed, 23 insertions(+) diff --git a/src/diagrams/gantt/ganttDb.spec.js b/src/diagrams/gantt/ganttDb.spec.js index 2601c9497..f24239c96 100644 --- a/src/diagrams/gantt/ganttDb.spec.js +++ b/src/diagrams/gantt/ganttDb.spec.js @@ -7,6 +7,29 @@ describe('when using the ganttDb', function () { ganttDb.clear() }) + describe('when calling the clear function', function () { + beforeEach(function () { + ganttDb.setDateFormat('YYYY-MM-DD') + ganttDb.setExcludes('weekends 2019-02-06,friday') + ganttDb.addSection('weekends skip test') + ganttDb.addTask('test1', 'id1,2019-02-01,1d') + ganttDb.addTask('test2', 'id2,after id1,2d') + ganttDb.clear() + }) + + it.each` + fn | expected + ${'getTasks'} | ${[]} + ${'getTitle'} | ${''} + ${'getDateFormat'}| ${''} + ${'getAxisFormat'}| ${''} + ${'getExcludes'} | ${[]} + ${'getSections'} | ${[]} + `('should clear $fn', ({ fn, expected }) => { + expect(ganttDb[ fn ]()).toEqual(expected) +}) + }) + it.each` testName | section | taskName | taskData | expStartDate | expEndDate | expId | expTask ${'should handle fixed dates'} | ${'testa1'} | ${'test1'} | ${'id1,2013-01-01,2013-01-12'} | ${new Date(2013, 0, 1)} | ${new Date(2013, 0, 12)} | ${'id1'} | ${'test1'} From 5c2d416a34181a0e3ae54200629d1dd3661c0fa4 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Jason=20W=C3=BCrtz?= Date: Sat, 6 Jul 2019 12:25:57 -0300 Subject: [PATCH 06/31] test(ganttDB.spec): fix typo --- src/diagrams/gantt/ganttDb.spec.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/diagrams/gantt/ganttDb.spec.js b/src/diagrams/gantt/ganttDb.spec.js index f24239c96..67dcbc0d2 100644 --- a/src/diagrams/gantt/ganttDb.spec.js +++ b/src/diagrams/gantt/ganttDb.spec.js @@ -164,7 +164,7 @@ describe('when using the ganttDb', function () { expect(tasks[1].startTime).toEqual(moment('2019-02-01', 'YYYY-MM-DD').toDate()) expect(tasks[1].endTime).toEqual(moment('2019-02-04', 'YYYY-MM-DD').toDate()) - expect(tasks[3].renderEndTime).toBeNull() // Fixed end + expect(tasks[1].renderEndTime).toBeNull() // Fixed end expect(tasks[1].manualEndTime).toBeTruthy() expect(tasks[1].id).toEqual('id2') expect(tasks[1].task).toEqual('test2') From b5b714861d68e0af796aac82a9469b6d139ffc05 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Jason=20W=C3=BCrtz?= Date: Sat, 6 Jul 2019 12:26:32 -0300 Subject: [PATCH 07/31] test(ganttDb.spec): flip function design to specify inclusive instead --- src/diagrams/gantt/ganttDb.spec.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/diagrams/gantt/ganttDb.spec.js b/src/diagrams/gantt/ganttDb.spec.js index 67dcbc0d2..b78782869 100644 --- a/src/diagrams/gantt/ganttDb.spec.js +++ b/src/diagrams/gantt/ganttDb.spec.js @@ -151,7 +151,7 @@ describe('when using the ganttDb', function () { describe('when setting inclusive end dates', function () { beforeEach(function () { - ganttDb.setDateFormat('YYYY-MM-DD', false) + ganttDb.setDateFormat('YYYY-MM-DD', true) ganttDb.addTask('test1', 'id1,2019-02-01,1d') ganttDb.addTask('test2', 'id2,2019-02-01,2019-02-03') }) From 63096a5c269cfad4a02e599759be9dbc9bfbd109 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Jason=20W=C3=BCrtz?= Date: Sat, 6 Jul 2019 12:27:28 -0300 Subject: [PATCH 08/31] feat(ganttDb.js): add 1 day to end dates if inclusive is set to true This will essentially keep all old behavior the same while still allowing users to specify if they want inclusive end dates --- src/diagrams/gantt/ganttDb.js | 11 +++++++++-- 1 file changed, 9 insertions(+), 2 deletions(-) diff --git a/src/diagrams/gantt/ganttDb.js b/src/diagrams/gantt/ganttDb.js index 41a150430..006775acf 100644 --- a/src/diagrams/gantt/ganttDb.js +++ b/src/diagrams/gantt/ganttDb.js @@ -11,6 +11,7 @@ let tasks = [] let currentSection = '' const tags = ['active', 'done', 'crit', 'milestone'] let funs = [] +let inclusiveEndDates = false export const clear = function () { sections = [] @@ -25,6 +26,7 @@ export const clear = function () { dateFormat = '' axisFormat = '' excludes = [] + inclusiveEndDates = false } export const setAxisFormat = function (txt) { @@ -35,8 +37,9 @@ export const getAxisFormat = function () { return axisFormat } -export const setDateFormat = function (txt) { +export const setDateFormat = function (txt, inclusive) { dateFormat = txt + inclusiveEndDates = inclusive || false // make sure it's not undefined } export const getDateFormat = function () { @@ -149,12 +152,16 @@ const getStartDate = function (prevTime, dateFormat, str) { return new Date() } -const getEndDate = function (prevTime, dateFormat, str) { +const getEndDate = function (prevTime, dateFormat, str, inclusive) { + inclusive = inclusive || false str = str.trim() // Check for actual date let mDate = moment(str, dateFormat.trim(), true) if (mDate.isValid()) { + if (inclusive) { + mDate.add(1, 'd') + } return mDate.toDate() } From ee766ec88ea3ba272662d99838ae47541b07921c Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Jason=20W=C3=BCrtz?= Date: Sat, 6 Jul 2019 12:28:56 -0300 Subject: [PATCH 09/31] fix(ganttDb): change manual end time determination now it just checks if a valid end time was provided and instead of the comparison that went on before. This needed to be done in order to support manual end dates with inclusive set to true since they don't match anymore as the 'manually' supplied end date is increased by one --- src/diagrams/gantt/ganttDb.js | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/src/diagrams/gantt/ganttDb.js b/src/diagrams/gantt/ganttDb.js index 006775acf..48cfd0bb9 100644 --- a/src/diagrams/gantt/ganttDb.js +++ b/src/diagrams/gantt/ganttDb.js @@ -253,8 +253,8 @@ const compileData = function (prevTask, dataStr) { } if (endTimeData) { - task.endTime = getEndDate(task.startTime, dateFormat, endTimeData) - task.manualEndTime = endTimeData === moment(task.endTime).format(dateFormat.trim()) + task.endTime = getEndDate(task.startTime, dateFormat, endTimeData, inclusiveEndDates) + task.manualEndTime = moment(endTimeData, 'YYYY-MM-DD', true).isValid() checkTaskDates(task, dateFormat, excludes) } @@ -392,10 +392,10 @@ const compileTasks = function () { } if (rawTasks[pos].startTime) { - rawTasks[pos].endTime = getEndDate(rawTasks[pos].startTime, dateFormat, rawTasks[pos].raw.endTime.data) + rawTasks[pos].endTime = getEndDate(rawTasks[pos].startTime, dateFormat, rawTasks[pos].raw.endTime.data, inclusiveEndDates) if (rawTasks[pos].endTime) { rawTasks[pos].processed = true - rawTasks[pos].manualEndTime = rawTasks[pos].raw.endTime.data === moment(rawTasks[pos].endTime).format(dateFormat.trim()) + rawTasks[pos].manualEndTime = moment(rawTasks[pos].raw.endTime.data, 'YYYY-MM-DD', true).isValid() checkTaskDates(rawTasks[pos], dateFormat, excludes) } } From 660e0f3d8b5fef2c05a02474658553aa0337b9b1 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Jason=20W=C3=BCrtz?= Date: Sun, 7 Jul 2019 16:27:28 -0300 Subject: [PATCH 10/31] refactor(ganttDb): separate out the inclusive end date toggle --- src/diagrams/gantt/ganttDb.js | 13 +++++++++++-- 1 file changed, 11 insertions(+), 2 deletions(-) diff --git a/src/diagrams/gantt/ganttDb.js b/src/diagrams/gantt/ganttDb.js index 48cfd0bb9..a8a34b313 100644 --- a/src/diagrams/gantt/ganttDb.js +++ b/src/diagrams/gantt/ganttDb.js @@ -37,9 +37,16 @@ export const getAxisFormat = function () { return axisFormat } -export const setDateFormat = function (txt, inclusive) { +export const setDateFormat = function (txt) { dateFormat = txt - inclusiveEndDates = inclusive || false // make sure it's not undefined +} + +export const enableInclusiveEndDates = function () { + inclusiveEndDates = true +} + +export const endDatesAreInclusive = function () { + return inclusiveEndDates } export const getDateFormat = function () { @@ -518,6 +525,8 @@ export default { clear, setDateFormat, getDateFormat, + enableInclusiveEndDates, + endDatesAreInclusive, setAxisFormat, getAxisFormat, setTitle, From 0a567a3ef91ddff2164d3a9fec482ce36bad3f53 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Jason=20W=C3=BCrtz?= Date: Sun, 7 Jul 2019 16:27:41 -0300 Subject: [PATCH 11/31] test(ganttDb): update inclusive end date tests --- src/diagrams/gantt/ganttDb.spec.js | 18 ++++++++++-------- 1 file changed, 10 insertions(+), 8 deletions(-) diff --git a/src/diagrams/gantt/ganttDb.spec.js b/src/diagrams/gantt/ganttDb.spec.js index b78782869..7dbc26848 100644 --- a/src/diagrams/gantt/ganttDb.spec.js +++ b/src/diagrams/gantt/ganttDb.spec.js @@ -18,13 +18,14 @@ describe('when using the ganttDb', function () { }) it.each` - fn | expected - ${'getTasks'} | ${[]} - ${'getTitle'} | ${''} - ${'getDateFormat'}| ${''} - ${'getAxisFormat'}| ${''} - ${'getExcludes'} | ${[]} - ${'getSections'} | ${[]} + fn | expected + ${'getTasks'} | ${[]} + ${'getTitle'} | ${''} + ${'getDateFormat'} | ${''} + ${'getAxisFormat'} | ${''} + ${'getExcludes'} | ${[]} + ${'getSections'} | ${[]} + ${'endDatesAreInclusive'} | ${false} `('should clear $fn', ({ fn, expected }) => { expect(ganttDb[ fn ]()).toEqual(expected) }) @@ -151,7 +152,8 @@ describe('when using the ganttDb', function () { describe('when setting inclusive end dates', function () { beforeEach(function () { - ganttDb.setDateFormat('YYYY-MM-DD', true) + ganttDb.setDateFormat('YYYY-MM-DD') + ganttDb.enableInclusiveEndDates() ganttDb.addTask('test1', 'id1,2019-02-01,1d') ganttDb.addTask('test2', 'id2,2019-02-01,2019-02-03') }) From 16f3338b3d1a3af573a764d4fe89fce7d65d4cce Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Jason=20W=C3=BCrtz?= Date: Sun, 7 Jul 2019 16:28:31 -0300 Subject: [PATCH 12/31] feat(gantt.jison): update parser to accept a inclusive end date arg if a line contains inclusiveEndDates then it will toggle the chart to use inclusive end dates --- src/diagrams/gantt/parser/gantt.jison | 8 +++++--- src/diagrams/gantt/parser/gantt.spec.js | 4 ++-- 2 files changed, 7 insertions(+), 5 deletions(-) diff --git a/src/diagrams/gantt/parser/gantt.jison b/src/diagrams/gantt/parser/gantt.jison index d28a79d97..ea76b59a1 100644 --- a/src/diagrams/gantt/parser/gantt.jison +++ b/src/diagrams/gantt/parser/gantt.jison @@ -55,6 +55,7 @@ that id. "gantt" return 'gantt'; "dateFormat"\s[^#\n;]+ return 'dateFormat'; +"inclusiveEndDates" return 'inclusiveEndDates'; "axisFormat"\s[^#\n;]+ return 'axisFormat'; "excludes"\s[^#\n;]+ return 'excludes'; \d\d\d\d"-"\d\d"-"\d\d return 'date'; @@ -91,9 +92,10 @@ line ; statement - : 'dateFormat' {yy.setDateFormat($1.substr(11));$$=$1.substr(11);} - | 'axisFormat' {yy.setAxisFormat($1.substr(11));$$=$1.substr(11);} - | 'excludes' {yy.setExcludes($1.substr(9));$$=$1.substr(9);} + : dateFormat {yy.setDateFormat($1.substr(11));$$=$1.substr(11);} + | inclusiveEndDates {yy.enableInclusiveEndDates();$$=$1.substr(18);} + | axisFormat {yy.setAxisFormat($1.substr(11));$$=$1.substr(11);} + | excludes {yy.setExcludes($1.substr(9));$$=$1.substr(9);} | title {yy.setTitle($1.substr(6));$$=$1.substr(6);} | section {yy.addSection($1.substr(8));$$=$1.substr(8);} | clickStatement diff --git a/src/diagrams/gantt/parser/gantt.spec.js b/src/diagrams/gantt/parser/gantt.spec.js index 1a066b941..c6d8af285 100644 --- a/src/diagrams/gantt/parser/gantt.spec.js +++ b/src/diagrams/gantt/parser/gantt.spec.js @@ -15,8 +15,8 @@ describe('when parsing a gantt diagram it', function () { parser.parse(str) }) - it('should handle a dateFormat definition with inclusivity specified', function () { - const str = 'gantt\ndateFormat yyyy-mm-dd inclusive' + it('should handle a inclusive end date definition', function () { + const str = 'gantt\ndateFormat yyyy-mm-dd\ninclusiveEndDates' parser.parse(str) }) From cb7d05bd53fb051a297be2e9a67e6ba83a610602 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Jason=20W=C3=BCrtz?= Date: Sun, 7 Jul 2019 16:28:53 -0300 Subject: [PATCH 13/31] chore(gantt.js): generate parser from jison --- src/diagrams/gantt/parser/gantt.js | 124 +++++++++++++++-------------- 1 file changed, 63 insertions(+), 61 deletions(-) diff --git a/src/diagrams/gantt/parser/gantt.js b/src/diagrams/gantt/parser/gantt.js index 1b85efadd..44fcbecb6 100644 --- a/src/diagrams/gantt/parser/gantt.js +++ b/src/diagrams/gantt/parser/gantt.js @@ -71,13 +71,13 @@ recoverable: (boolean: TRUE when the parser has a error recovery rule available for this particular error) } */ -var parser = (function(){ -var o=function(k,v,o,l){for(o=o||{},l=k.length;l--;o[k[l]]=v);return o},$V0=[6,8,10,11,12,13,14,15,17,19],$V1=[1,9],$V2=[1,10],$V3=[1,11],$V4=[1,12],$V5=[1,13],$V6=[1,15],$V7=[1,16]; +var gantt = (function(){ +var o=function(k,v,o,l){for(o=o||{},l=k.length;l--;o[k[l]]=v);return o},$V0=[6,8,10,11,12,13,14,15,16,18,20],$V1=[1,9],$V2=[1,10],$V3=[1,11],$V4=[1,12],$V5=[1,13],$V6=[1,14],$V7=[1,16],$V8=[1,17]; var parser = {trace: function trace () { }, yy: {}, -symbols_: {"error":2,"start":3,"gantt":4,"document":5,"EOF":6,"line":7,"SPACE":8,"statement":9,"NL":10,"dateFormat":11,"axisFormat":12,"excludes":13,"title":14,"section":15,"clickStatement":16,"taskTxt":17,"taskData":18,"click":19,"callbackname":20,"callbackargs":21,"href":22,"clickStatementDebug":23,"$accept":0,"$end":1}, -terminals_: {2:"error",4:"gantt",6:"EOF",8:"SPACE",10:"NL",11:"dateFormat",12:"axisFormat",13:"excludes",14:"title",15:"section",17:"taskTxt",18:"taskData",19:"click",20:"callbackname",21:"callbackargs",22:"href"}, -productions_: [0,[3,3],[5,0],[5,2],[7,2],[7,1],[7,1],[7,1],[9,1],[9,1],[9,1],[9,1],[9,1],[9,1],[9,2],[16,2],[16,3],[16,3],[16,4],[16,3],[16,4],[16,2],[23,2],[23,3],[23,3],[23,4],[23,3],[23,4],[23,2]], +symbols_: {"error":2,"start":3,"gantt":4,"document":5,"EOF":6,"line":7,"SPACE":8,"statement":9,"NL":10,"dateFormat":11,"inclusiveEndDates":12,"axisFormat":13,"excludes":14,"title":15,"section":16,"clickStatement":17,"taskTxt":18,"taskData":19,"click":20,"callbackname":21,"callbackargs":22,"href":23,"clickStatementDebug":24,"$accept":0,"$end":1}, +terminals_: {2:"error",4:"gantt",6:"EOF",8:"SPACE",10:"NL",11:"dateFormat",12:"inclusiveEndDates",13:"axisFormat",14:"excludes",15:"title",16:"section",18:"taskTxt",19:"taskData",20:"click",21:"callbackname",22:"callbackargs",23:"href"}, +productions_: [0,[3,3],[5,0],[5,2],[7,2],[7,1],[7,1],[7,1],[9,1],[9,1],[9,1],[9,1],[9,1],[9,1],[9,1],[9,2],[17,2],[17,3],[17,3],[17,4],[17,3],[17,4],[17,2],[24,2],[24,3],[24,3],[24,4],[24,3],[24,4],[24,2]], performAction: function anonymous(yytext, yyleng, yylineno, yy, yystate /* action[1] */, $$ /* vstack */, _$ /* lstack */) { /* this == yyval */ @@ -102,53 +102,56 @@ case 8: yy.setDateFormat($$[$0].substr(11));this.$=$$[$0].substr(11); break; case 9: -yy.setAxisFormat($$[$0].substr(11));this.$=$$[$0].substr(11); +yy.enableInclusiveEndDates();this.$=$$[$0].substr(18); break; case 10: -yy.setExcludes($$[$0].substr(9));this.$=$$[$0].substr(9); +yy.setAxisFormat($$[$0].substr(11));this.$=$$[$0].substr(11); break; case 11: -yy.setTitle($$[$0].substr(6));this.$=$$[$0].substr(6); +yy.setExcludes($$[$0].substr(9));this.$=$$[$0].substr(9); break; case 12: +yy.setTitle($$[$0].substr(6));this.$=$$[$0].substr(6); +break; +case 13: yy.addSection($$[$0].substr(8));this.$=$$[$0].substr(8); break; -case 14: +case 15: yy.addTask($$[$0-1],$$[$0]);this.$='task'; break; -case 15: +case 16: this.$ = $$[$0-1];yy.setClickEvent($$[$0-1], $$[$0], null); break; -case 16: +case 17: this.$ = $$[$0-2];yy.setClickEvent($$[$0-2], $$[$0-1], $$[$0]); break; -case 17: +case 18: this.$ = $$[$0-2];yy.setClickEvent($$[$0-2], $$[$0-1], null);yy.setLink($$[$0-2],$$[$0]); break; -case 18: +case 19: this.$ = $$[$0-3];yy.setClickEvent($$[$0-3], $$[$0-2], $$[$0-1]);yy.setLink($$[$0-3],$$[$0]); break; -case 19: +case 20: this.$ = $$[$0-2];yy.setClickEvent($$[$0-2], $$[$0], null);yy.setLink($$[$0-2],$$[$0-1]); break; -case 20: +case 21: this.$ = $$[$0-3];yy.setClickEvent($$[$0-3], $$[$0-1], $$[$0]);yy.setLink($$[$0-3],$$[$0-2]); break; -case 21: +case 22: this.$ = $$[$0-1];yy.setLink($$[$0-1], $$[$0]); break; -case 22: case 28: +case 23: case 29: this.$=$$[$0-1] + ' ' + $$[$0]; break; -case 23: case 24: case 26: +case 24: case 25: case 27: this.$=$$[$0-2] + ' ' + $$[$0-1] + ' ' + $$[$0]; break; -case 25: case 27: +case 26: case 28: this.$=$$[$0-3] + ' ' + $$[$0-2] + ' ' + $$[$0-1] + ' ' + $$[$0]; break; } }, -table: [{3:1,4:[1,2]},{1:[3]},o($V0,[2,2],{5:3}),{6:[1,4],7:5,8:[1,6],9:7,10:[1,8],11:$V1,12:$V2,13:$V3,14:$V4,15:$V5,16:14,17:$V6,19:$V7},o($V0,[2,7],{1:[2,1]}),o($V0,[2,3]),{9:17,11:$V1,12:$V2,13:$V3,14:$V4,15:$V5,16:14,17:$V6,19:$V7},o($V0,[2,5]),o($V0,[2,6]),o($V0,[2,8]),o($V0,[2,9]),o($V0,[2,10]),o($V0,[2,11]),o($V0,[2,12]),o($V0,[2,13]),{18:[1,18]},{20:[1,19],22:[1,20]},o($V0,[2,4]),o($V0,[2,14]),o($V0,[2,15],{21:[1,21],22:[1,22]}),o($V0,[2,21],{20:[1,23]}),o($V0,[2,16],{22:[1,24]}),o($V0,[2,17]),o($V0,[2,19],{21:[1,25]}),o($V0,[2,18]),o($V0,[2,20])], +table: [{3:1,4:[1,2]},{1:[3]},o($V0,[2,2],{5:3}),{6:[1,4],7:5,8:[1,6],9:7,10:[1,8],11:$V1,12:$V2,13:$V3,14:$V4,15:$V5,16:$V6,17:15,18:$V7,20:$V8},o($V0,[2,7],{1:[2,1]}),o($V0,[2,3]),{9:18,11:$V1,12:$V2,13:$V3,14:$V4,15:$V5,16:$V6,17:15,18:$V7,20:$V8},o($V0,[2,5]),o($V0,[2,6]),o($V0,[2,8]),o($V0,[2,9]),o($V0,[2,10]),o($V0,[2,11]),o($V0,[2,12]),o($V0,[2,13]),o($V0,[2,14]),{19:[1,19]},{21:[1,20],23:[1,21]},o($V0,[2,4]),o($V0,[2,15]),o($V0,[2,16],{22:[1,22],23:[1,23]}),o($V0,[2,22],{21:[1,24]}),o($V0,[2,17],{23:[1,25]}),o($V0,[2,18]),o($V0,[2,20],{22:[1,26]}),o($V0,[2,19]),o($V0,[2,21])], defaultActions: {}, parseError: function parseError (str, hash) { if (hash.recoverable) { @@ -188,18 +191,15 @@ parse: function parse(input) { vstack.length = vstack.length - n; lstack.length = lstack.length - n; } - function lex() { + _token_stack: + var lex = function () { var token; - token = tstack.pop() || lexer.lex() || EOF; + token = lexer.lex() || EOF; if (typeof token !== 'number') { - if (token instanceof Array) { - tstack = token; - token = tstack.pop(); - } token = self.symbols_[token] || token; } return token; - } + }; var symbol, preErrorSymbol, state, action, a, r, yyval = {}, p, len, newState, expected; while (true) { state = stack[stack.length - 1]; @@ -211,27 +211,27 @@ parse: function parse(input) { } action = table[state] && table[state][symbol]; } - if (typeof action === 'undefined' || !action.length || !action[0]) { - var errStr = ''; - expected = []; - for (p in table[state]) { - if (this.terminals_[p] && p > TERROR) { - expected.push('\'' + this.terminals_[p] + '\''); + if (typeof action === 'undefined' || !action.length || !action[0]) { + var errStr = ''; + expected = []; + for (p in table[state]) { + if (this.terminals_[p] && p > TERROR) { + expected.push('\'' + this.terminals_[p] + '\''); + } } + if (lexer.showPosition) { + errStr = 'Parse error on line ' + (yylineno + 1) + ':\n' + lexer.showPosition() + '\nExpecting ' + expected.join(', ') + ', got \'' + (this.terminals_[symbol] || symbol) + '\''; + } else { + errStr = 'Parse error on line ' + (yylineno + 1) + ': Unexpected ' + (symbol == EOF ? 'end of input' : '\'' + (this.terminals_[symbol] || symbol) + '\''); + } + this.parseError(errStr, { + text: lexer.match, + token: this.terminals_[symbol] || symbol, + line: lexer.yylineno, + loc: yyloc, + expected: expected + }); } - if (lexer.showPosition) { - errStr = 'Parse error on line ' + (yylineno + 1) + ':\n' + lexer.showPosition() + '\nExpecting ' + expected.join(', ') + ', got \'' + (this.terminals_[symbol] || symbol) + '\''; - } else { - errStr = 'Parse error on line ' + (yylineno + 1) + ': Unexpected ' + (symbol == EOF ? 'end of input' : '\'' + (this.terminals_[symbol] || symbol) + '\''); - } - this.parseError(errStr, { - text: lexer.match, - token: this.terminals_[symbol] || symbol, - line: lexer.yylineno, - loc: yyloc, - expected: expected - }); - } if (action[0] instanceof Array && action.length > 1) { throw new Error('Parse Error: multiple actions possible at state: ' + state + ', token: ' + symbol); } @@ -640,7 +640,7 @@ case 4:this.begin("href"); break; case 5:this.popState(); break; -case 6:return 22; +case 6:return 23; break; case 7:this.begin("callbackname"); break; @@ -648,17 +648,17 @@ case 8:this.popState(); break; case 9:this.popState(); this.begin("callbackargs"); break; -case 10:return 20; +case 10:return 21; break; case 11:this.popState(); break; -case 12:return 21; +case 12:return 22; break; case 13:this.begin("click"); break; case 14:this.popState(); break; -case 15:return 19; +case 15:return 20; break; case 16:return 4; break; @@ -668,26 +668,28 @@ case 18:return 12; break; case 19:return 13; break; -case 20:return 'date'; +case 20:return 14; break; -case 21:return 14; +case 21:return 'date'; break; case 22:return 15; break; -case 23:return 17; +case 23:return 16; break; case 24:return 18; break; -case 25:return ':'; +case 25:return 19; break; -case 26:return 6; +case 26:return ':'; break; -case 27:return 'INVALID'; +case 27:return 6; +break; +case 28:return 'INVALID'; break; } }, -rules: [/^(?:[\n]+)/i,/^(?:\s+)/i,/^(?:#[^\n]*)/i,/^(?:%[^\n]*)/i,/^(?:href[\s]+["])/i,/^(?:["])/i,/^(?:[^"]*)/i,/^(?:call[\s]+)/i,/^(?:\([\s]*\))/i,/^(?:\()/i,/^(?:[^(]*)/i,/^(?:\))/i,/^(?:[^)]*)/i,/^(?:click[\s]+)/i,/^(?:[\s\n])/i,/^(?:[^\s\n]*)/i,/^(?:gantt\b)/i,/^(?:dateFormat\s[^#\n;]+)/i,/^(?:axisFormat\s[^#\n;]+)/i,/^(?:excludes\s[^#\n;]+)/i,/^(?:\d\d\d\d-\d\d-\d\d\b)/i,/^(?:title\s[^#\n;]+)/i,/^(?:section\s[^#:\n;]+)/i,/^(?:[^#:\n;]+)/i,/^(?::[^#\n;]+)/i,/^(?::)/i,/^(?:$)/i,/^(?:.)/i], -conditions: {"callbackargs":{"rules":[11,12],"inclusive":false},"callbackname":{"rules":[8,9,10],"inclusive":false},"href":{"rules":[5,6],"inclusive":false},"click":{"rules":[14,15],"inclusive":false},"INITIAL":{"rules":[0,1,2,3,4,7,13,16,17,18,19,20,21,22,23,24,25,26,27],"inclusive":true}} +rules: [/^(?:[\n]+)/i,/^(?:\s+)/i,/^(?:#[^\n]*)/i,/^(?:%[^\n]*)/i,/^(?:href[\s]+["])/i,/^(?:["])/i,/^(?:[^"]*)/i,/^(?:call[\s]+)/i,/^(?:\([\s]*\))/i,/^(?:\()/i,/^(?:[^(]*)/i,/^(?:\))/i,/^(?:[^)]*)/i,/^(?:click[\s]+)/i,/^(?:[\s\n])/i,/^(?:[^\s\n]*)/i,/^(?:gantt\b)/i,/^(?:dateFormat\s[^#\n;]+)/i,/^(?:inclusiveEndDates\b)/i,/^(?:axisFormat\s[^#\n;]+)/i,/^(?:excludes\s[^#\n;]+)/i,/^(?:\d\d\d\d-\d\d-\d\d\b)/i,/^(?:title\s[^#\n;]+)/i,/^(?:section\s[^#:\n;]+)/i,/^(?:[^#:\n;]+)/i,/^(?::[^#\n;]+)/i,/^(?::)/i,/^(?:$)/i,/^(?:.)/i], +conditions: {"callbackargs":{"rules":[11,12],"inclusive":false},"callbackname":{"rules":[8,9,10],"inclusive":false},"href":{"rules":[5,6],"inclusive":false},"click":{"rules":[14,15],"inclusive":false},"INITIAL":{"rules":[0,1,2,3,4,7,13,16,17,18,19,20,21,22,23,24,25,26,27,28],"inclusive":true}} }); return lexer; })(); @@ -701,9 +703,9 @@ return new Parser; if (typeof require !== 'undefined' && typeof exports !== 'undefined') { -exports.parser = parser; -exports.Parser = parser.Parser; -exports.parse = function () { return parser.parse.apply(parser, arguments); }; +exports.parser = gantt; +exports.Parser = gantt.Parser; +exports.parse = function () { return gantt.parse.apply(gantt, arguments); }; exports.main = function commonjsMain (args) { if (!args[1]) { console.log('Usage: '+args[0]+' FILE'); From 1ee4b964e2bb3ebbeaf0cf1705262619e32d2124 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Jason=20W=C3=BCrtz?= Date: Sun, 7 Jul 2019 16:41:07 -0300 Subject: [PATCH 14/31] test(gantt.spec): add assertions to check that the parser didn't error --- src/diagrams/gantt/parser/gantt.spec.js | 20 +++++++++++++------- 1 file changed, 13 insertions(+), 7 deletions(-) diff --git a/src/diagrams/gantt/parser/gantt.spec.js b/src/diagrams/gantt/parser/gantt.spec.js index c6d8af285..7a28aeb6c 100644 --- a/src/diagrams/gantt/parser/gantt.spec.js +++ b/src/diagrams/gantt/parser/gantt.spec.js @@ -3,6 +3,12 @@ import { parser } from './gantt' import ganttDb from '../ganttDb' +const parserFnConstructor = (str) => { + return () => { + parser.parse(str) + } +} + describe('when parsing a gantt diagram it', function () { beforeEach(function () { parser.yy = ganttDb @@ -12,23 +18,23 @@ describe('when parsing a gantt diagram it', function () { it('should handle a dateFormat definition', function () { const str = 'gantt\ndateFormat yyyy-mm-dd' - parser.parse(str) + expect(parserFnConstructor(str)).not.toThrow() }) it('should handle a inclusive end date definition', function () { const str = 'gantt\ndateFormat yyyy-mm-dd\ninclusiveEndDates' - parser.parse(str) + expect(parserFnConstructor(str)).not.toThrow() }) it('should handle a title definition', function () { const str = 'gantt\ndateFormat yyyy-mm-dd\ntitle Adding gantt diagram functionality to mermaid' - parser.parse(str) + expect(parserFnConstructor(str)).not.toThrow() }) it('should handle an excludes definition', function () { const str = 'gantt\ndateFormat yyyy-mm-dd\ntitle Adding gantt diagram functionality to mermaid\nexcludes weekdays 2019-02-01' - parser.parse(str) + expect(parserFnConstructor(str)).not.toThrow() }) it('should handle a section definition', function () { const str = 'gantt\n' + @@ -37,7 +43,7 @@ describe('when parsing a gantt diagram it', function () { 'excludes weekdays 2019-02-01\n' + 'section Documentation' - parser.parse(str) + expect(parserFnConstructor(str)).not.toThrow() }) /** * Beslutsflöde inligt nedan. Obs bla bla bla @@ -57,7 +63,7 @@ describe('when parsing a gantt diagram it', function () { 'section Documentation\n' + 'Design jison grammar:des1, 2014-01-01, 2014-01-04' - parser.parse(str) + expect(parserFnConstructor(str)).not.toThrow() const tasks = parser.yy.getTasks() @@ -82,7 +88,7 @@ describe('when parsing a gantt diagram it', function () { const allowedTags = ['active', 'done', 'crit', 'milestone'] - parser.parse(str) + expect(parserFnConstructor(str)).not.toThrow() const tasks = parser.yy.getTasks() From a671576578232e4c8be4ed8cc580a63cc93f7c27 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Jason=20W=C3=BCrtz?= Date: Sun, 7 Jul 2019 16:51:40 -0300 Subject: [PATCH 15/31] feat(index.html): add example to display new behavior --- dist/index.html | 20 ++++++++++++++++++++ 1 file changed, 20 insertions(+) diff --git a/dist/index.html b/dist/index.html index a70cb14da..22c956d77 100644 --- a/dist/index.html +++ b/dist/index.html @@ -7,6 +7,26 @@ +
+ gantt + title Exclusive end dates (Manual date should end on 3d) + dateFormat YYYY-MM-DD + axisFormat %d + section Section1 + 2 Days: 1, 2019-01-01,2d + Manual Date: 2, 2019-01-01,2019-01-03 +
+ +
+ gantt + title Inclusive end dates (Manual date should end on 4th) + dateFormat YYYY-MM-DD + axisFormat %d + inclusiveEndDates + section Section1 + 2 Days: 1, 2019-01-01,2d + Manual Date: 2, 2019-01-01,2019-01-03 +
graph LR sid-B3655226-6C29-4D00-B685-3D5C734DC7E1[" From 67bb5ffa734f8111c513f129165cf4e941e969b0 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Jason=20W=C3=BCrtz?= Date: Sun, 7 Jul 2019 17:01:45 -0300 Subject: [PATCH 16/31] refactor(ganttDb.js): extract durationToDate function codeclimate was complaining about the getEndDate function so I split it up --- src/diagrams/gantt/ganttDb.js | 54 ++++++++++++++++++----------------- 1 file changed, 28 insertions(+), 26 deletions(-) diff --git a/src/diagrams/gantt/ganttDb.js b/src/diagrams/gantt/ganttDb.js index a8a34b313..98b8045cc 100644 --- a/src/diagrams/gantt/ganttDb.js +++ b/src/diagrams/gantt/ganttDb.js @@ -159,6 +159,30 @@ const getStartDate = function (prevTime, dateFormat, str) { return new Date() } +const durationToDate = function (durationStatement, relativeTime) { + if (durationStatement !== null) { + switch (durationStatement[2]) { + case 's': + relativeTime.add(durationStatement[1], 'seconds') + break + case 'm': + relativeTime.add(durationStatement[1], 'minutes') + break + case 'h': + relativeTime.add(durationStatement[1], 'hours') + break + case 'd': + relativeTime.add(durationStatement[1], 'days') + break + case 'w': + relativeTime.add(durationStatement[1], 'weeks') + break + } + } + // Default date - now + return relativeTime.toDate() +} + const getEndDate = function (prevTime, dateFormat, str, inclusive) { inclusive = inclusive || false str = str.trim() @@ -172,32 +196,10 @@ const getEndDate = function (prevTime, dateFormat, str, inclusive) { return mDate.toDate() } - const d = moment(prevTime) - // Check for length - const re = /^([\d]+)([wdhms])/ - const durationStatement = re.exec(str.trim()) - - if (durationStatement !== null) { - switch (durationStatement[2]) { - case 's': - d.add(durationStatement[1], 'seconds') - break - case 'm': - d.add(durationStatement[1], 'minutes') - break - case 'h': - d.add(durationStatement[1], 'hours') - break - case 'd': - d.add(durationStatement[1], 'days') - break - case 'w': - d.add(durationStatement[1], 'weeks') - break - } - } - // Default date - now - return d.toDate() + return durationToDate( + /^([\d]+)([wdhms])/.exec(str.trim()), + moment(prevTime) + ) } let taskCnt = 0 From b7c4b66b61a246c342faf88edc93487ff41d5c06 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Jason=20W=C3=BCrtz?= Date: Sun, 7 Jul 2019 17:04:40 -0300 Subject: [PATCH 17/31] test(ganttDb.spec): fix missing initialization for clear test --- src/diagrams/gantt/ganttDb.spec.js | 1 + 1 file changed, 1 insertion(+) diff --git a/src/diagrams/gantt/ganttDb.spec.js b/src/diagrams/gantt/ganttDb.spec.js index 7dbc26848..6bea54bc5 100644 --- a/src/diagrams/gantt/ganttDb.spec.js +++ b/src/diagrams/gantt/ganttDb.spec.js @@ -10,6 +10,7 @@ describe('when using the ganttDb', function () { describe('when calling the clear function', function () { beforeEach(function () { ganttDb.setDateFormat('YYYY-MM-DD') + ganttDb.enableInclusiveEndDates() ganttDb.setExcludes('weekends 2019-02-06,friday') ganttDb.addSection('weekends skip test') ganttDb.addTask('test1', 'id1,2019-02-01,1d') From 047760ad4bebb9dbce11b0bbce75bdfe9144b4d4 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Jason=20W=C3=BCrtz?= Date: Sun, 7 Jul 2019 17:17:05 -0300 Subject: [PATCH 18/31] chore(ganttDb): export durationToDate so it can be tested --- src/diagrams/gantt/ganttDb.js | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/src/diagrams/gantt/ganttDb.js b/src/diagrams/gantt/ganttDb.js index 98b8045cc..c2a9f82b5 100644 --- a/src/diagrams/gantt/ganttDb.js +++ b/src/diagrams/gantt/ganttDb.js @@ -543,7 +543,8 @@ export default { getExcludes, setClickEvent, setLink, - bindFunctions + bindFunctions, + durationToDate } function getTaskTags (data, task, tags) { From c6511ed829375ba1d36ce358008d2a63e4e3ef14 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Jason=20W=C3=BCrtz?= Date: Sun, 7 Jul 2019 17:17:22 -0300 Subject: [PATCH 19/31] test(ganttDb.spec): add simple tests for the durationToDate fn --- src/diagrams/gantt/ganttDb.spec.js | 10 ++++++++++ 1 file changed, 10 insertions(+) diff --git a/src/diagrams/gantt/ganttDb.spec.js b/src/diagrams/gantt/ganttDb.spec.js index 6bea54bc5..1dad71ad6 100644 --- a/src/diagrams/gantt/ganttDb.spec.js +++ b/src/diagrams/gantt/ganttDb.spec.js @@ -7,6 +7,16 @@ describe('when using the ganttDb', function () { ganttDb.clear() }) + describe('when using relative times', function () { + it.each` + diff | date | expected + ${' 1d'} | ${moment('2019-01-01')} | ${moment('2019-01-02').toDate()} + ${' 1w'} | ${moment('2019-01-01')} | ${moment('2019-01-08').toDate()} + `('should add $diff to $date resulting in $expected', ({ diff, date, expected }) => { + expect(ganttDb.durationToDate(diff, date)).toEqual(expected) +}) + }) + describe('when calling the clear function', function () { beforeEach(function () { ganttDb.setDateFormat('YYYY-MM-DD') From 17b4c98db17fedd804d6b26c69aba4d1512ca887 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Jason=20W=C3=BCrtz?= Date: Thu, 11 Jul 2019 19:28:00 -0300 Subject: [PATCH 20/31] feat(stale.yml): update issue label and bot comment --- .github/stale.yml | 8 +++++--- 1 file changed, 5 insertions(+), 3 deletions(-) diff --git a/.github/stale.yml b/.github/stale.yml index d9f656321..bd380cfc0 100644 --- a/.github/stale.yml +++ b/.github/stale.yml @@ -4,14 +4,16 @@ daysUntilStale: 60 daysUntilClose: 7 # Issues with these labels will never be considered stale exemptLabels: + - Status: Pinned + - Area: Security - pinned - - security # Label to use when marking an issue as stale -staleLabel: wontfix +staleLabel: Status: Wontfix # Comment to post when marking an issue as stale. Set to `false` to disable markComment: > This issue has been automatically marked as stale because it has not had recent activity. It will be closed if no further activity occurs. Thank you for your contributions. + If you are still interested in this issue and it is still relevant you can comment to revive it. # Comment to post when closing a stale issue. Set to `false` to disable -closeComment: false \ No newline at end of file +closeComment: false From 69c7d31e699f33ee981ca8bc99c72ef78749a78e Mon Sep 17 00:00:00 2001 From: Knut Sveidqvist Date: Fri, 12 Jul 2019 20:40:54 +0200 Subject: [PATCH 21/31] Adding docs into core repo again --- docs/.nojekyll | 0 docs/README.md | 210 +++++++++++++++++++++++ docs/SUMMARY.md | 15 ++ docs/_navbar.md | 13 ++ docs/_sidebar.md | 26 +++ docs/breakingChanges.md | 51 ++++++ docs/demos.md | 90 ++++++++++ docs/development.md | 119 +++++++++++++ docs/faq.md | 8 + docs/flowchart.md | 368 ++++++++++++++++++++++++++++++++++++++++ docs/gantt.md | 231 +++++++++++++++++++++++++ docs/img/class.png | Bin 0 -> 26940 bytes docs/img/flow.png | Bin 0 -> 6214 bytes docs/img/gantt.png | Bin 0 -> 16657 bytes docs/img/git.png | Bin 0 -> 15505 bytes docs/img/header.png | Bin 0 -> 70627 bytes docs/img/sequence.png | Bin 0 -> 30778 bytes docs/index.html | 50 ++++++ docs/mermaidAPI.md | 103 +++++++++++ docs/mermaidCLI.md | 3 + docs/sequenceDiagram.md | 304 +++++++++++++++++++++++++++++++++ docs/upgrading.md | 28 +++ docs/usage.md | 342 +++++++++++++++++++++++++++++++++++++ 23 files changed, 1961 insertions(+) create mode 100644 docs/.nojekyll create mode 100644 docs/README.md create mode 100644 docs/SUMMARY.md create mode 100644 docs/_navbar.md create mode 100644 docs/_sidebar.md create mode 100644 docs/breakingChanges.md create mode 100644 docs/demos.md create mode 100644 docs/development.md create mode 100644 docs/faq.md create mode 100644 docs/flowchart.md create mode 100755 docs/gantt.md create mode 100644 docs/img/class.png create mode 100644 docs/img/flow.png create mode 100644 docs/img/gantt.png create mode 100644 docs/img/git.png create mode 100644 docs/img/header.png create mode 100644 docs/img/sequence.png create mode 100644 docs/index.html create mode 100644 docs/mermaidAPI.md create mode 100644 docs/mermaidCLI.md create mode 100755 docs/sequenceDiagram.md create mode 100644 docs/upgrading.md create mode 100644 docs/usage.md diff --git a/docs/.nojekyll b/docs/.nojekyll new file mode 100644 index 000000000..e69de29bb diff --git a/docs/README.md b/docs/README.md new file mode 100644 index 000000000..6f99dd3f7 --- /dev/null +++ b/docs/README.md @@ -0,0 +1,210 @@ +[![Build Status](https://travis-ci.org/knsv/mermaid.svg?branch=master)](https://travis-ci.org/knsv/mermaid) +[![Coverage Status](https://coveralls.io/repos/github/knsv/mermaid/badge.svg?branch=master)](https://coveralls.io/github/knsv/mermaid?branch=master) +[![Join the chat at https://gitter.im/knsv/mermaid](https://badges.gitter.im/Join%20Chat.svg)](https://gitter.im/knsv/mermaid?utm_source=badge&utm_medium=badge&utm_campaign=pr-badge&utm_content=badge) + +# mermaid + +**🖖 Keep a steady pulse: mermaid needs more Collaborators [#866](https://github.com/knsv/mermaid/issues/866)** + +![banner](./img/header.png) + +Generation of diagrams and flowcharts from text in a similar manner as markdown. + +Ever wanted to simplify documentation and avoid heavy tools like Visio when explaining your code? + +This is why mermaid was born, a simple markdown-like script language for generating charts from text via javascript. + +**Mermaid was nomiated and won the JS Open Source Awards (2019) in the catory The most existing use of technology!!! Thanks to all involved, people committing pull requests, people answering questions and special thanks to Tyler Long who is helping me maintain the project.** + +### Flowchart + +``` +graph TD; + A-->B; + A-->C; + B-->D; + C-->D; +``` +![Flowchart](./img/flow.png) + + +### Sequence diagram + +``` +sequenceDiagram + participant Alice + participant Bob + Alice->>John: Hello John, how are you? + loop Healthcheck + John->>John: Fight against hypochondria + end + Note right of John: Rational thoughts
prevail! + John-->>Alice: Great! + John->>Bob: How about you? + Bob-->>John: Jolly good! +``` +![Sequence diagram](./img/sequence.png) + + +### Gantt diagram + +``` +gantt +dateFormat YYYY-MM-DD +title Adding GANTT diagram to mermaid +excludes weekdays 2014-01-10 + +section A section +Completed task :done, des1, 2014-01-06,2014-01-08 +Active task :active, des2, 2014-01-09, 3d +Future task : des3, after des2, 5d +Future task2 : des4, after des3, 5d +``` +![Gantt diagram](./img/gantt.png) + + +### Class diagram - :exclamation: experimental + +``` +classDiagram +Class01 <|-- AveryLongClass : Cool +Class03 *-- Class04 +Class05 o-- Class06 +Class07 .. Class08 +Class09 --> C2 : Where am i? +Class09 --* C3 +Class09 --|> Class07 +Class07 : equals() +Class07 : Object[] elementData +Class01 : size() +Class01 : int chimp +Class01 : int gorilla +Class08 <--> C2: Cool label +``` +![Class diagram](./img/class.png) + + +### Git graph - :exclamation: experimental + +``` +gitGraph: +options +{ + "nodeSpacing": 150, + "nodeRadius": 10 +} +end +commit +branch newbranch +checkout newbranch +commit +commit +checkout master +commit +commit +merge newbranch + +``` + +![Git graph](./img/git.png) + + +## Installation + +### CDN + +``` +https://unpkg.com/mermaid@/dist/ +``` + +Replace `` with expected version number. + +Example: https://unpkg.com/mermaid@7.1.0/dist/ + +### Node.js + +``` +yarn add mermaid +``` + + +## Documentation + +https://mermaidjs.github.io + + +## Sibling projects + +- [mermaid CLI](https://github.com/mermaidjs/mermaid.cli) +- [mermaid live editor](https://github.com/mermaidjs/mermaid-live-editor) +- [mermaid webpack demo](https://github.com/mermaidjs/mermaid-webpack-demo) +- [mermaid Parcel demo](https://github.com/mermaidjs/mermaid-parcel-demo) + + +# Request for assistance + +Things are piling up and I have hard time keeping up. To remedy this +it would be great if we could form a core team of developers to cooperate +with the future development mermaid. + +As part of this team you would get write access to the repository and would +represent the project when answering questions and issues. + +Together we could continue the work with things like: +* adding more types of diagrams like mindmaps, ert diagrams etc +* improving existing diagrams + +Don't hesitate to contact me if you want to get involved. + + +# For contributors + +## Setup + + yarn install + + +## Build + + yarn build:watch + + +## Lint + + yarn lint + +We use [JavaScript Standard Style](https://github.com/feross/standard). +We recommend you installing [editor plugins](https://github.com/feross/standard#are-there-text-editor-plugins) so you can get real time lint result. + + +## Test + + yarn test + +Manual test in browser: + + open dist/index.html + + +## Release + +For those who have the permission to do so: + +Update version number in `package.json`. + + npm publish + +Command above generates files into the `dist` folder and publishes them to npmjs.org. + + +# Credits + +Many thanks to the [d3](http://d3js.org/) and [dagre-d3](https://github.com/cpettitt/dagre-d3) projects for providing the graphical layout and drawing libraries! + +Thanks also to the [js-sequence-diagram](http://bramp.github.io/js-sequence-diagrams) project for usage of the grammar for the sequence diagrams. Thanks to Jessica Peter for inspiration and starting point for gantt rendering. + +*Mermaid was created by Knut Sveidqvist for easier documentation.* + +*[Tyler Long](https://github.com/tylerlong) has became a collaborator since April 2017.* + +Here is the full list of the projects [contributors](https://github.com/knsv/mermaid/graphs/contributors). diff --git a/docs/SUMMARY.md b/docs/SUMMARY.md new file mode 100644 index 000000000..e4be903f9 --- /dev/null +++ b/docs/SUMMARY.md @@ -0,0 +1,15 @@ +# Summary + +- [mermaid](README.md) +- [FAQ](faq.md) +- [Breaking changes](breakingChanges.md) +- [Usage](usage.md) +- [Flowchart](flowchart.md) +- [Sequence diagram](sequenceDiagram.md) +- [Gantt diagram](gantt.md) +- [mermaid CLI](mermaidCLI.md) +- [Demos](demos.md) +- [mermaidAPI](mermaidAPI.md) +- [Development](development.md) +- [Upgrading](upgrading.md) +- [Contribute to this website](https://github.com/mermaidjs/mermaid-gitbook) diff --git a/docs/_navbar.md b/docs/_navbar.md new file mode 100644 index 000000000..7156cccdb --- /dev/null +++ b/docs/_navbar.md @@ -0,0 +1,13 @@ +* Getting started + + * [Quick start](quickstart.md) + * [Writing more pages](more-pages.md) + * [Custom navbar](custom-navbar.md) + * [Cover page](cover.md) + +* Configuration + * [Configuration](configuration.md) + * [Themes](themes.md) + * [Using plugins](plugins.md) + * [Markdown configuration](markdown.md) + * [Language highlight](language-highlight.md) \ No newline at end of file diff --git a/docs/_sidebar.md b/docs/_sidebar.md new file mode 100644 index 000000000..3bce972ff --- /dev/null +++ b/docs/_sidebar.md @@ -0,0 +1,26 @@ +- Getting started + + - [mermaid](README.md) + - [FAQ](faq.md) + - [Usage](usage.md) + - [Demos](demos.md) + - [mermaid CLI](mermaidCLI.md) + +- Diagrams + + - [Flowchart](flowchart.md) + - [Sequence diagram](sequenceDiagram.md) + - [Gantt](gantt.md) + +- Guide + + - [Development](development.md) + - [mermaidAPI](mermaidAPI.md) + - [Vue compatibility](vue.md) + - [CDN](cdn.md) + - [Offline Mode(PWA)](pwa.md) + - [Server-Side Rendering(SSR)](ssr.md) + - [Embed Files](embed-files.md) + +- [Awesome docsify](awesome.md) +- [Changelog](changelog.md) \ No newline at end of file diff --git a/docs/breakingChanges.md b/docs/breakingChanges.md new file mode 100644 index 000000000..21206dc6d --- /dev/null +++ b/docs/breakingChanges.md @@ -0,0 +1,51 @@ +# Breaking changes + +### Breaking changes from history version to latest version: + +## #1 + +```javascript +mermaid.initialize({ + sequenceDiagram:{ + ... + } +}) +``` + +has been changed to + +```javascript +mermaid.initialize({ + sequence:{ + ... + } +}) +``` + +## #2 + +In old versions you need to add CSS file to your HTML: + +```html + +``` + +or + +```html + +``` + +Now it is not needed to do so. And there are no more CSS files in distrubtion files. + +You just + +```javascript +mermaid.initialize({ + theme: 'forest' +}) +``` + +and it works like a charm. + +This is because now the CSS is inline with SVG for portability. diff --git a/docs/demos.md b/docs/demos.md new file mode 100644 index 000000000..a915c876d --- /dev/null +++ b/docs/demos.md @@ -0,0 +1,90 @@ +# Demos + + +## Basic sequence diagram + +```mermaid +sequenceDiagram + Alice ->> Bob: Hello Bob, how are you? + Bob-->>John: How about you John? + Bob--x Alice: I am good thanks! + Bob-x John: I am good thanks! + Note right of John: Bob thinks a long
long time, so long
that the text does
not fit on a row. + + Bob-->Alice: Checking with John... + Alice->John: Yes... John, how are you? +``` + + +## Basic flowchart + +```mermaid +graph LR + A[Square Rect] -- Link text --> B((Circle)) + A --> C(Round Rect) + B --> D{Rhombus} + C --> D +``` + + +## Larger flowchart with some styling + +```mermaid +graph TB + sq[Square shape] --> ci((Circle shape)) + + subgraph A subgraph + od>Odd shape]-- Two line
edge comment --> ro + di{Diamond with
line break} -.-> ro(Rounded
square
shape) + di==>ro2(Rounded square shape) + end + + %% Notice that no text in shape are added here instead that is appended further down + e --> od3>Really long text with linebreak
in an Odd shape] + + %% Comments after double percent signs + e((Inner / circle
and some odd
special characters)) --> f(,.?!+-*ز) + + cyr[Cyrillic]-->cyr2((Circle shape Начало)); + + classDef green fill:#9f6,stroke:#333,stroke-width:2px; + classDef orange fill:#f96,stroke:#333,stroke-width:4px; + class sq,e green + class di orange +``` + + +## Loops, alt and opt + +```mermaid +sequenceDiagram + loop Daily query + Alice->>Bob: Hello Bob, how are you? + alt is sick + Bob->>Alice: Not so good :( + else is well + Bob->>Alice: Feeling fresh like a daisy + end + + opt Extra response + Bob->>Alice: Thanks for asking + end + end +``` + + +## Message to self in loop + +```mermaid +sequenceDiagram + participant Alice + participant Bob + Alice->>John: Hello John, how are you? + loop Healthcheck + John->>John: Fight against hypochondria + end + Note right of John: Rational thoughts
prevail... + John-->>Alice: Great! + John->>Bob: How about you? + Bob-->>John: Jolly good! +``` diff --git a/docs/development.md b/docs/development.md new file mode 100644 index 000000000..af2805afd --- /dev/null +++ b/docs/development.md @@ -0,0 +1,119 @@ +# Development + + +## Updating the documentation + +We write documention with GitBook. + +Please continue with the [mermaid-gitbook](https://github.com/mermaidjs/mermaid-gitbook) project. + + +## How to add a new diagram type + + +### Step 1: Grammar & Parsing + + +#### Grammar + +This would be to define a jison grammar for the new diagram type. That should start with a way to identify that the text in the mermaid tag is a diagram of that type. Create a new folder under diagrams for your new diagram type and a parser folder in it. This leads us to step 2. + +For instance: + +* the flowchart starts with the keyword graph. +* the sequence diagram starts with the keyword sequenceDiagram + + +#### Store data found during parsing + +There are some jison specific sub steps here where the parser stores the data encountered when parsing the diagram, this data is later used by the renderer. You can during the parsing call a object provided to the parser by the user of the parser. This object can be called during parsing for storing data. + +``` +statement + : 'participant' actor { $$='actor'; } + | signal { $$='signal'; } + | note_statement { $$='note'; } + | 'title' message { yy.setTitle($2); } + ; +``` + +In the extract of the grammar above, it is defined that a call to the setTitle method in the data object will be done when parsing and the title keyword is encountered. + +> **Info** Make sure that the `parseError` function for the parser is defined and calling `mermaidPAI.parseError`. This way a common way of detecting parse errors is provided for the end-user. + +For more info look in the example diagram type: + +The `yy` object has the following function: + +```javascript +exports.parseError = function(err, hash){ + mermaidAPI.parseError(err, hash) +}; +``` + +when parsing the `yy` object is initialized as per below: + +```javascript +var parser +parser = exampleParser.parser +parser.yy = db +``` + + +### Step 2: Rendering + +Write a renderer that given the data found during parsing renders the diagram. To look at an example look at sequendeRenderer.js rather then the flowchart renderer as this is a more generic example. + +Place the renderer in the diagram folder. + + +### Step 3: Detection of the new diagram type + +The second thing to do is to add the capability to detect the new new diagram to type to the detectType in utils.js. The detection should return a key for the new diagram type. + + +### Step 4: The final piece - triggering the rendering + +At this point when mermaid is trying to render the diagram, it will detect it as being of the new type but there will be no match when trying to render the diagram. To fix this add a new case in the switch statement in main.js:init this should match the diagram type returned from step #2. The code in this new case statement should call the renderer for the diagram type with the data found by the parser as an argument. + + +## Usage of the parser as a separate module + + +### Setup + +```javascript +var graph = require('./graphDb') +var flow = require('./parser/flow') +flow.parser.yy = graph +``` + + +### Parsing + +```javascript +flow.parser.parse(text) +``` + + +### Data extraction + +```javascript +graph.getDirection() +graph.getVertices() +graph.getEdges() +``` + +The parser is also exposed in the mermaid api by calling: + +```javascript +var parser = mermaid.getParser() +``` + +Note that the parse needs a graph object to store the data as per: + +```javascript +flow.parser.yy = graph +``` + +Look at `graphDb.js` for more details on that object. diff --git a/docs/faq.md b/docs/faq.md new file mode 100644 index 000000000..038a3ae1d --- /dev/null +++ b/docs/faq.md @@ -0,0 +1,8 @@ +1. [How to add title to flowchart?](https://github.com/knsv/mermaid/issues/556#issuecomment-363182217) +1. [How to specify custom CSS file?](https://github.com/mermaidjs/mermaid.cli/pull/24#issuecomment-373402785) +1. [How to fix tooltip misplacement issue?](https://github.com/knsv/mermaid/issues/542#issuecomment-3343564621) +1. [How to specify gantt diagram xAxis format?](https://github.com/knsv/mermaid/issues/269#issuecomment-373229136) +1. [How to bind an event?](https://github.com/knsv/mermaid/issues/372) +1. [How to add newline in the text?](https://github.com/knsv/mermaid/issues/384#issuecomment-281339381) +1. [How to have special characters in link text?](https://github.com/knsv/mermaid/issues/407#issuecomment-329944735) +1. [How to change flowchart curve style?](https://github.com/knsv/mermaid/issues/580#issuecomment-373929046) diff --git a/docs/flowchart.md b/docs/flowchart.md new file mode 100644 index 000000000..00da49ff5 --- /dev/null +++ b/docs/flowchart.md @@ -0,0 +1,368 @@ +# Flowcharts - Basic Syntax + +## Graph + +This statement declares a new graph and the direction of the graph layout. + +This declares a graph oriented from top to bottom. + +```mermaid +graph TD + Start --> Stop +``` + +This declares a graph oriented from left to right. + +Possible directions are: + +* TB - top bottom +* BT - bottom top +* RL - right left +* LR - left right + +* TD - same as TB + +```mermaid +graph LR + Start --> Stop +``` + +## Nodes & shapes + +### A node (default) + +```mermaid +graph LR + id +``` +Note that the id is what is displayed in the box. + +### A node with text + +It is also possible to set text in the box that differs from the id. If this is done several times, it is the last text +found for the node that will be used. Also if you define edges for the node later on, you can omit text definitions. The +one previously defined will be used when rendering the box. + +```mermaid +graph LR + id1[This is the text in the box] +``` + + +### A node with round edges + +```mermaid +graph LR + id1(This is the text in the box) +``` + +### A node in the form of a circle + +```mermaid +graph LR + id1((This is the text in the circle)) +``` + +### A node in an asymetric shape + +```mermaid +graph LR + id1>This is the text in the box] +``` +Currently only the shape above is possible and not its mirror. *This might change with future releases.* + +### A node (rhombus) + +```mermaid +graph LR + id1{This is the text in the box} +``` + +## Links between nodes + +Nodes can be connected with links/edges. It is possible to have different types of links or attach a text string to a link. + +### A link with arrow head + +```mermaid +graph LR + A-->B +``` + +### An open link + +```mermaid +graph LR + A --- B +``` + +### Text on links + +```mermaid +graph LR + A-- This is the text ---B +``` + +or + +```mermaid +graph LR + A---|This is the text|B +``` + +### A link with arrow head and text + +```mermaid +graph LR + A-->|text|B +``` + +or + +```mermaid +graph LR + A-- text -->B +``` + +### Dotted link + +```mermaid +graph LR; + A-.->B; +``` + +### Dotted link with text + +```mermaid +graph LR + A-. text .-> B +``` + +### Thick link + +```mermaid +graph LR + A ==> B +``` + +### Thick link with text + +```mermaid +graph LR + A == text ==> B +``` + +## Special characters that break syntax + +It is possible to put text within quotes in order to render more troublesome characters. As in the example below: + +```mermaid +graph LR + id1["This is the (text) in the box"] +``` + +### Entity codes to escape characters + +It is possible to escape characters using the syntax examplified here. + +```mermaid + graph LR + A["A double quote:#quot;"] -->B["A dec char:#9829;"] +``` + +## Subgraphs + +``` +subgraph title + graph definition +end +``` + +An example below: + +```mermaid +graph TB + c1-->a2 + subgraph one + a1-->a2 + end + subgraph two + b1-->b2 + end + subgraph three + c1-->c2 + end + ``` + + +## Interaction + +It is possible to bind a click event to a node, the click can lead to either a javascript callback or to a link which will be opened in a new browser tab. + +``` +click nodeId callback +``` + +* nodeId is the id of the node +* callback is the name of a javascript function defined on the page displaying the graph, the function will be called with the nodeId as parameter. + +Examples of tooltip usage below: + +``` + + + + +
+ + + + + diff --git a/docs/mermaidAPI.md b/docs/mermaidAPI.md new file mode 100644 index 000000000..4f8595286 --- /dev/null +++ b/docs/mermaidAPI.md @@ -0,0 +1,103 @@ +# mermaidAPI + +> **Warning** This file is generated automatically from the comments of [mermaidAPI.js](https://github.com/knsv/mermaid/blob/master/src/mermaidAPI.js) file. Please read that file **instead** for up-to-date information. + +This is the api to be used when handling the integration with the web page instead of using the default integration (mermaid.js). + +The core of this api is the **render** function that given a graph definitionas text renders the graph/diagram and returns a svg element for the graph. It is is then up to the user of the API to make use of the svg, either insert it somewhere in the page or something completely different. + + +## Configuration + +These are the default options which can be overridden with the initialization call as in the example below: + +```javascript +mermaid.initialize({ + flowchart:{ + htmlLabels: false + } +}); +``` + + +## logLevel + +Decides the amount of logging to be used. + +- debug: 1 +- info: 2 +- warn: 3 +- error: 4 +- fatal: 5 + +**cloneCssStyles** - This options controls whether or not the css rules should be copied into the generated svg startOnLoad - This options controls whether or mermaid starts when the page loads +**arrowMarkerAbsolute** - This options controls whether or arrow markers in html code will be absolute paths or an anchor, #. This matters if you are using base tag settings. + + +## flowchart + +The object containing configurations specific for flowcharts +**htmlLabels** - Flag for setting whether or not a html tag should be used for rendering labels on the edges +**useMaxWidth** - Flag for setting whether or not a all available width should be used for the diagram. + + +## sequence + +The object containing configurations specific for sequence diagrams + +**diagramMarginX** - margin to the right and left of the sequence diagram +**diagramMarginY** - margin to the over and under the sequence diagram +**actorMargin** - Margin between actors +**width** - Width of actor boxes +**height** - Height of actor boxes +**boxMargin** - Margin around loop boxes +**boxTextMargin** - margin around the text in loop/alt/opt boxes +**noteMargin** - margin around notes +**messageMargin** - Space between messages +**mirrorActors** - mirror actors under diagram +**bottomMarginAdj** - Depending on css styling this might need adjustment. Prolongs the edge of the diagram downwards +**useMaxWidth** - when this flag is set the height and width is set to 100% and is then scaling with the available space if not the absolute space required is used + + +## gantt + +The object containing configurations specific for gantt diagrams + +**titleTopMargin** - margin top for the text over the gantt diagram +**barHeight** - the height of the bars in the graph +**barGap** - the margin between the different activities in the gantt diagram +**topPadding** - margin between title and gantt diagram and between axis and gantt diagram. +**leftPadding** - the space allocated for the section name to the left of the activities. +**gridLineStartPadding** - Vertical starting position of the grid lines +**fontSize** - font size ... +**fontFamily** - font family ... +**numberSectionStyles** - the number of alternating section styles +**axisFormatter** - formatting of the axis, this might need adjustment to match your locale and preferences + + +## parse + +Function that parses a mermaid diagram definition. If parsing fails the parseError callback is called and an error is thrown. + + +## version + +Function returning version information + + +## render + +Function that renders a svg with a graph from a chart definition. Usage example below: + +```javascript +mermaidAPI.initialize({ + startOnLoad: true +}) +$(function() { + var graphDefinition = 'graph TB\na-->b' + var cb = function(svgGraph) { + console.log(svgGraph) + } + mermaidAPI.render('id1',graphDefinition,cb) +}) +``` diff --git a/docs/mermaidCLI.md b/docs/mermaidCLI.md new file mode 100644 index 000000000..a7121dc96 --- /dev/null +++ b/docs/mermaidCLI.md @@ -0,0 +1,3 @@ +# mermaid CLI + +mermaid CLI has been moved to [mermaid.cli](https://github.com/mermaidjs/mermaid.cli). Please read its documentation instead. diff --git a/docs/sequenceDiagram.md b/docs/sequenceDiagram.md new file mode 100755 index 000000000..0468ac8d1 --- /dev/null +++ b/docs/sequenceDiagram.md @@ -0,0 +1,304 @@ +# Sequence diagrams + +> A Sequence diagram is an interaction diagram that shows how processes operate with one another and in what order. + +Mermaid can render sequence diagrams. + +```mermaid +sequenceDiagram + Alice->>John: Hello John, how are you? + John-->>Alice: Great! +``` + +## Syntax + +### Participants + +The participants can be defined implicitly as in the first example on this page. The participants or actors are +rendered in order of appearance in the diagram source text. Sometimes you might want to show the participants in a +different order than how they appear in the first message. It is possible to specify the actor's order of +appearance by doing the following: + +```mermaid +sequenceDiagram + participant John + participant Alice + Alice->>John: Hello John, how are you? + John-->>Alice: Great! +``` + +### Aliases + +The actor can have a convenient identifier and a descriptive label. + +```mermaid +sequenceDiagram + participant A as Alice + participant J as John + A->>J: Hello John, how are you? + J->>A: Great! +``` + +## Messages + +Messages can be of two displayed either solid or with a dotted line. + +``` +[Actor][Arrow][Actor]:Message text +``` + +There are six types of arrows currently supported: + +Type | Description +--- | --- +-> | Solid line without arrow +--> | Dotted line without arrow +->> | Solid line with arrowhead +-->> | Dotted line with arrowhead +-x | Solid line with a cross at the end (async) +--x | Dotted line with a cross at the end (async) + + +## Activations + +It is possible to activate and deactivate an actor. (de)activation can be dedicated declarations: + +```mermaid +sequenceDiagram + Alice->>John: Hello John, how are you? + activate John + John-->>Alice: Great! + deactivate John +``` + +There is also a shortcut notation by appending `+`/`-` suffix to the message arrow: + +```mermaid +sequenceDiagram + Alice->>+John: Hello John, how are you? + John-->>-Alice: Great! +``` + +Activations can be stacked for same actor: + +```mermaid +sequenceDiagram + Alice->>+John: Hello John, how are you? + Alice->>+John: John, can you hear me? + John-->>-Alice: Hi Alice, I can hear you! + John-->>-Alice: I feel great! +``` + + +## Notes + +It is possible to add notes to a sequence diagram. This is done by the notation +Note [ right of | left of | over ] [Actor]: Text in note content + +See the example below: + +```mermaid +sequenceDiagram + participant John + Note right of John: Text in note +``` + +It is also possible to create notes spanning two participants: + +```mermaid +sequenceDiagram + Alice->John: Hello John, how are you? + Note over Alice,John: A typical interaction +``` + + +## Loops + +It is possible to express loops in a sequence diagram. This is done by the notation + +``` +loop Loop text +... statements ... +end +``` + +See the example below: + +```mermaid +sequenceDiagram + Alice->John: Hello John, how are you? + loop Every minute + John-->Alice: Great! + end +``` + + +## Alt + +It is possible to express alternative paths in a sequence diagram. This is done by the notation + +``` +alt Describing text +... statements ... +else +... statements ... +end +``` + +or if there is sequence that is optional (if without else). + +``` +opt Describing text +... statements ... +end +``` + +See the example below: + +```mermaid +sequenceDiagram + Alice->>Bob: Hello Bob, how are you? + alt is sick + Bob->>Alice: Not so good :( + else is well + Bob->>Alice: Feeling fresh like a daisy + end + opt Extra response + Bob->>Alice: Thanks for asking + end +``` + + +## Styling + +Styling of the a sequence diagram is done by defining a number of css classes. During rendering these classes are extracted from the + +### Classes used + +Class | Description +--- | --- +actor | Style for the actor box at the top of the diagram. +text.actor | Styles for text in the actor box at the top of the diagram. +actor-line | The vertical line for an actor. +messageLine0 | Styles for the solid message line. +messageLine1 | Styles for the dotted message line. +messageText | Defines styles for the text on the message arrows. +labelBox | Defines styles label to left in a loop. +labelText | Styles for the text in label for loops. +loopText | Styles for the text in the loop box. +loopLine | Defines styles for the lines in the loop box. +note | Styles for the note box. +noteText | Styles for the text on in the note boxes. + + +### Sample stylesheet + + +```css +body { + background: white; +} + +.actor { + stroke: #CCCCFF; + fill: #ECECFF; +} +text.actor { + fill:black; + stroke:none; + font-family: Helvetica; +} + +.actor-line { + stroke:grey; +} + +.messageLine0 { + stroke-width:1.5; + stroke-dasharray: "2 2"; + marker-end:"url(#arrowhead)"; + stroke:black; +} + +.messageLine1 { + stroke-width:1.5; + stroke-dasharray: "2 2"; + stroke:black; +} + +#arrowhead { + fill:black; + +} + +.messageText { + fill:black; + stroke:none; + font-family: 'trebuchet ms', verdana, arial; + font-size:14px; +} + +.labelBox { + stroke: #CCCCFF; + fill: #ECECFF; +} + +.labelText { + fill:black; + stroke:none; + font-family: 'trebuchet ms', verdana, arial; +} + +.loopText { + fill:black; + stroke:none; + font-family: 'trebuchet ms', verdana, arial; +} + +.loopLine { + stroke-width:2; + stroke-dasharray: "2 2"; + marker-end:"url(#arrowhead)"; + stroke: #CCCCFF; +} + +.note { + stroke: #decc93; + stroke: #CCCCFF; + fill: #fff5ad; +} + +.noteText { + fill:black; + stroke:none; + font-family: 'trebuchet ms', verdana, arial; + font-size:14px; +} +``` + + +## Configuration + +Is it possible to adjust the margins for rendering the sequence diagram. + +This is done by defining `mermaid.sequenceConfig` or by the CLI to use a json file with the configuration. +How to use the CLI is described in the [mermaidCLI](mermaidCLI.html) page. +`mermaid.sequenceConfig` can be set to a JSON string with config parameters or the corresponding object. + +```javascript +mermaid.sequenceConfig = { + diagramMarginX:50, + diagramMarginY:10, + boxTextMargin:5, + noteMargin:10, + messageMargin:35, + mirrorActors:true +}; +``` + +### Possible configuration params: + +Param | Description | Default value +--- | --- | --- +mirrorActor | Turns on/off the rendering of actors below the diagram as well as above it | false +bottomMarginAdj | Adjusts how far down the graph ended. Wide borders styles with css could generate unwantewd clipping which is why this config param exists. | 1 diff --git a/docs/upgrading.md b/docs/upgrading.md new file mode 100644 index 000000000..9f318b3c7 --- /dev/null +++ b/docs/upgrading.md @@ -0,0 +1,28 @@ +# Upgrading + +Some of the interfaces has been upgraded. + + +## From version 0.4.0 to 0.5.0 + + +### Initialization + +`mermaid_config` is no longer used. Instead a call to mermaid initialize is done as in the example below: + + +#### version 0.4.0 + +```javascript +mermaid_config = { + startOnLoad: true +} +``` + +#### version 0.5.0 + +```javascript +mermaid.initialize({ + startOnLoad: true +}) +``` diff --git a/docs/usage.md b/docs/usage.md new file mode 100644 index 000000000..544b2f89c --- /dev/null +++ b/docs/usage.md @@ -0,0 +1,342 @@ +# Usage + +## Installation + +### npm package + +``` +yarn add mermaid +``` + +### CDN + +https://unpkg.com/mermaid/ + +Please note that you can switch versions through the dropdown box on top right. + + +## Simple usage on a web page + +The easiest way to integrate mermaid on a web page requires two elements: +1. Inclusion of the mermaid framework in the html page using a script tag +2. A graph definition on the web page + +If these things are in place mermaid listens to the page load event and when fires, when the page has loaded, it will +locate the graphs n the page and transform them to svg files. + +### Include mermaid on your web page: + +```html + + +``` + +Further down on your page mermaid will look for tags with `class="mermaid"`. From these tags mermaid will try to +read the chart definiton which will be replaced with the svg chart. + + +### Define a chart like this: + +```html +
+ CHART DEFINITION GOES HERE +
+``` + +Would end up like this: + +```html +
+ + Chart ends up here + +
+``` + +An id is also added to mermaid tags without id. + +### Simple full example: + +```html + + + + + + + +
+ graph LR + A --- B + B-->C[fa:fa-ban forbidden] + B-->D(fa:fa-spinner); +
+ + + + +``` + +### Labels out of bounds + +If you use dynamically loaded fonts that are loaded through CSS, such as Google fonts, mermaid should wait for the +whole page to have been loaded (dom + assets, particularly the fonts file). + +```javascript +$(document).load(function() { + mermaid.initialize(); +}); +``` + +or + +```javascript +$(document).ready(function() { + mermaid.initialize(); +}); +``` + +Not doing so will most likely result in mermaid rendering graphs that have labels out of bounds. The default integration +in mermaid uses the window.load event to start rendering. + +### Calling `mermaid.init` + +By default, `mermaid.init` will be called when the document is ready, finding all elements with +`class="mermaid"`. If you are adding content after mermaid is loaded, or otherwise need +finer-grained control of this behavior, you can call `init` yourself with: + +- a configuration object +- some nodes, as + - a node + - an a array-like of nodes + - or W3C selector that will find your nodes + +Example: + +```javascript +mermaid.init({noteMargin: 10}, ".someOtherClass"); +``` + +Or with no config object, and a jQuery selection: + +```javascript +mermaid.init(undefined, $("#someId .yetAnotherClass")); +``` + +> **Warning** This type of integration is deprecated instead the preferred way of handling more complex integration is to us the mermaidAPI instead. + + +## Usage with webpack + +mermaid fully supports webpack. Here is a [working demo](https://github.com/mermaidjs/mermaid-webpack-demo). + + +## API usage + +The main idea with the API is to be able to call a render function with graph defintion as a string. The render function +will render the graph and call a callback with the resulting svg code. With this approach it is up to the site creator to +fetch the graph definition from the site, perhaps from a textarea, render it and place the graph somewhere in the site. + +To do this, include mermaidAPI on your web website instead of mermaid.js. The example below show an outline of how this +could be used. The example just logs the resulting svg to the javascript console. + +```html + + + +``` + + +### Binding events + +Sometimes the generated graph also has defined interactions like tooltip and click events. When using the API one must +add those events after the graph has been inserted into the DOM. + +The example code below is an extract of what mermaid does when using the API. The example shows how it is possible to +bind events to an svg when using the API for rendering. + +```javascript +var insertSvg = function(svgCode, bindFunctions) { + element.innerHTML = svgCode; + if(typeof callback !== 'undefined'){ + callback(id); + } + bindFunctions(element); +}; + +var id = 'theGraph'; + + +mermaidAPI.render(id,txt,insertSvg, element); +``` + +1. The graph is generated using the render call. +2. After generation the render function calls the provided callback function, in this case it's called insertSvg. +3. The callback function is called with two parameters, the svg code of the generated graph and a function. This function binds events to the svg **after** it is inserted into the DOM. +4. Insert the svg code into the DOM for presentation +5. Call the binding function that binds the events + + +## Example of a marked renderer + +This is the renderer used for transforming the documentation from markdown to html with mermaid diagrams in the html. + +```javascript +var renderer = new marked.Renderer(); +renderer.code = function (code, language) { + if(code.match(/^sequenceDiagram/)||code.match(/^graph/)){ + return '
'+code+'
'; + } + else{ + return '
'+code+'
'; + } +}; +``` + +Another example in coffeescript that also includes the mermaid script tag into the generated markup. + +```CoffeeScript +marked = require 'marked' + +module.exports = (options) -> + hasMermaid = false + renderer = new marked.Renderer() + renderer.defaultCode = renderer.code + renderer.code = (code, language) -> + if language is 'mermaid' + html = '' + if not hasMermaid + hasMermaid = true + html += '' + html + '
'+code+'
' + else + @defaultCode(code, language) + + renderer +``` + + +## Advanced usage + +**Error handling** + +When the parser encounters invalid syntax the **mermaid.parseError** function is called. It is possible to override this +function in order to handle the error in an application specific way. + +**Parsing text without rendering** + +It is also possible to validate the syntax before rendering in order to streamline the user experience. The function +**mermaid.parse(txt)** takes a text string as an argument and returns true if the text is syntactically correct and +false if it is not. The parseError function will be called when the parse function returns false. + +The code-example below in meta code illustrates how this could work: + +```javascript +mermaid.parseError = function(err,hash){ + displayErrorInGui(err); +}; + +var textFieldUpdated = function(){ + var textStr = getTextFromFormField('code'); + + if(mermaid.parse(textStr)){ + reRender(textStr) + } +}; + +bindEventHandler('change', 'code', textFieldUpdated); +``` + + +## Configuration + +Mermaid takes a number of options which lets you tweak the rendering of the diagrams. Currently there are three ways of +setting the options in mermaid. + +1. Instantiation of the configuration using the initialize call +2. *Using the global mermaid object* - deprecated +3. *using the global mermaid_config object* - deprecated +4. Instantiation of the configuration using the **mermaid.init** call + +The list above has two ways to many of doing this. Three are deprecated and will eventually be removed. The list of +configuration objects are described [in the mermaidAPI documentation](mermaidAPI.html). + + +## Using the `mermaidAPI.initialize`/`mermaid.initialize` call + +The future proof way of setting the configuration is by using the initialization call to mermaid or mermaidAPi depending +on what kind of integration you use. + +```html + + +``` + +> **Success** This is the preferred way of configuring mermaid. + + +## Using the mermaid object + +Is it possible to set some configuration via the mermaid object. The two parameters that are supported using this +approach are: + +* mermaid.startOnLoad +* mermaid.htmlLabels + +``` +mermaid.startOnLoad = true; +``` + +> **Warning** This way of setting the configuration is deprecated instead the preferred way of is to use the initialize method. This functionality is only kept for not breaking existing integrations + +## Using the mermaid_config + +Is it possible to set some configuration via the mermaid object. The two parameters that are supported using this +approach are: + +* mermaid_config.startOnLoad +* mermaid_config.htmlLabels + +```javascript +mermaid_config.startOnLoad = true; +``` + +> **Warning** This way of setting the configuration is deprecated instead the preferred way of is to use the initialize method. This functionality is only kept for not breaking existing integrations + +## Using the mermaid.init call + +Is it possible to set some configuration via the mermaid object. The two parameters that are supported using this +approach are: + +* mermaid_config.startOnLoad +* mermaid_config.htmlLabels + +``` +mermaid_config.startOnLoad = true; +``` + +> **Warning** This way of setting the configuration is deprecated instead the preferred way of is to use the initialize method. This functionality is only kept for not breaking existing integrations From 363b878a24de3b327e5b4254accb737c7756ddcc Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Sat, 13 Jul 2019 07:04:21 +0000 Subject: [PATCH 22/31] Bump lodash from 4.17.11 to 4.17.13 Bumps [lodash](https://github.com/lodash/lodash) from 4.17.11 to 4.17.13. - [Release notes](https://github.com/lodash/lodash/releases) - [Commits](https://github.com/lodash/lodash/compare/4.17.11...4.17.13) Signed-off-by: dependabot[bot] --- yarn.lock | 18 ++++-------------- 1 file changed, 4 insertions(+), 14 deletions(-) diff --git a/yarn.lock b/yarn.lock index 6a86b52f5..1f50b3aa9 100644 --- a/yarn.lock +++ b/yarn.lock @@ -6302,20 +6302,10 @@ lodash.templatesettings@^3.0.0: lodash._reinterpolate "^3.0.0" lodash.escape "^3.0.0" -lodash@^4.0.0, lodash@^4.13.1, lodash@^4.17.10, lodash@^4.17.11, lodash@^4.3.0, lodash@~4.17.10: - version "4.17.11" - resolved "https://registry.yarnpkg.com/lodash/-/lodash-4.17.11.tgz#b39ea6229ef607ecd89e2c8df12536891cac9b8d" - integrity sha512-cQKh8igo5QUhZ7lg38DYWAxMvjSAKG0A8wGSVimP07SIUEK2UO+arSRKbRZWtelMtN5V0Hkwh5ryOto/SshYIg== - -lodash@^4.17.4: - version "4.17.4" - resolved "https://registry.yarnpkg.com/lodash/-/lodash-4.17.4.tgz#78203a4d1c328ae1d86dca6460e369b57f4055ae" - integrity sha1-eCA6TRwyiuHYbcpkYONptX9AVa4= - -lodash@^4.17.5: - version "4.17.5" - resolved "https://registry.yarnpkg.com/lodash/-/lodash-4.17.5.tgz#99a92d65c0272debe8c96b6057bc8fbfa3bed511" - integrity sha512-svL3uiZf1RwhH+cWrfZn3A4+U58wbP0tGVTLQPbjplZxZ8ROD9VLuNgsRniTlLe7OlSqR79RUehXgpBW/s0IQw== +lodash@^4.0.0, lodash@^4.13.1, lodash@^4.17.10, lodash@^4.17.11, lodash@^4.17.4, lodash@^4.17.5, lodash@^4.3.0, lodash@~4.17.10: + version "4.17.13" + resolved "https://registry.yarnpkg.com/lodash/-/lodash-4.17.13.tgz#0bdc3a6adc873d2f4e0c4bac285df91b64fc7b93" + integrity sha512-vm3/XWXfWtRua0FkUyEHBZy8kCPjErNBT9fJx8Zvs+U6zjqPbTUOpkaoum3O5uiA8sm+yNMHXfYkTUHFoMxFNA== log-driver@^1.2.7: version "1.2.7" From 27cc737fe103c0631dd09ea3aed2eba5f433fb4f Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Sat, 13 Jul 2019 08:00:36 +0000 Subject: [PATCH 23/31] Bump lodash.mergewith from 4.6.1 to 4.6.2 Bumps [lodash.mergewith](https://github.com/lodash/lodash) from 4.6.1 to 4.6.2. - [Release notes](https://github.com/lodash/lodash/releases) - [Commits](https://github.com/lodash/lodash/commits) Signed-off-by: dependabot[bot] --- yarn.lock | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/yarn.lock b/yarn.lock index 1f50b3aa9..3e5d5bf7c 100644 --- a/yarn.lock +++ b/yarn.lock @@ -6260,9 +6260,9 @@ lodash.keys@^3.0.0: lodash.isarray "^3.0.0" lodash.mergewith@^4.6.0: - version "4.6.1" - resolved "https://registry.yarnpkg.com/lodash.mergewith/-/lodash.mergewith-4.6.1.tgz#639057e726c3afbdb3e7d42741caa8d6e4335927" - integrity sha512-eWw5r+PYICtEBgrBE5hhlT6aAa75f411bgDz/ZL2KZqYV03USvucsxcHUIlGTDTECs1eunpI7HOV7U+WLDvNdQ== + version "4.6.2" + resolved "https://registry.yarnpkg.com/lodash.mergewith/-/lodash.mergewith-4.6.2.tgz#617121f89ac55f59047c7aec1ccd6654c6590f55" + integrity sha512-GK3g5RPZWTRSeLSpgP8Xhra+pnjBC56q9FZYe1d5RN3TJ35dbkGy3YqBSMbyCrlbi+CM9Z3Jk5yTL7RCsqboyQ== lodash.restparam@^3.0.0: version "3.6.1" From 31576f8f55e6b9db1924a3ebfcf3cfea2ea01abb Mon Sep 17 00:00:00 2001 From: Knut Sveidqvist Date: Sat, 13 Jul 2019 22:50:53 -0700 Subject: [PATCH 24/31] #847 Removing in text --- src/config.js | 6 +++ src/diagrams/flowchart/flowDb.js | 20 +++++++- src/diagrams/flowchart/parser/flow.spec.js | 21 +++++--- src/diagrams/gantt/ganttDb.js | 7 +++ src/diagrams/gantt/parser/gantt.js | 57 ++++++++++++---------- src/mermaidAPI.js | 8 ++- 6 files changed, 82 insertions(+), 37 deletions(-) create mode 100644 src/config.js diff --git a/src/config.js b/src/config.js new file mode 100644 index 000000000..edd94edac --- /dev/null +++ b/src/config.js @@ -0,0 +1,6 @@ +let config + +export const setConfig = conf => { + config = conf +} +export const getConfig = () => config diff --git a/src/diagrams/flowchart/flowDb.js b/src/diagrams/flowchart/flowDb.js index 5f236ce26..3ac27f3c8 100644 --- a/src/diagrams/flowchart/flowDb.js +++ b/src/diagrams/flowchart/flowDb.js @@ -2,7 +2,9 @@ import * as d3 from 'd3' import { logger } from '../../logger' import utils from '../../utils' +import { getConfig } from '../../config' +const config = getConfig() let vertices = {} let edges = [] let classes = [] @@ -13,6 +15,16 @@ let subCount = 0 let direction // Functions to be run after graph rendering let funs = [] + +const sanitize = text => { + let txt = text + txt = txt.replace(/
/g, '#br#') + txt = txt.replace(//g, '#br#') + txt = txt.replace(//g, '>') + txt = txt.replace(/#br#/g, '
') + return txt +} + /** * Function called by parser when a node definition has been found * @param id @@ -35,7 +47,7 @@ export const addVertex = function (id, text, type, style, classes) { vertices[id] = { id: id, styles: [], classes: [] } } if (typeof text !== 'undefined') { - txt = text.trim() + txt = sanitize(text.trim()) // strip quotes if string starts and exnds with a quote if (txt[0] === '"' && txt[txt.length - 1] === '"') { @@ -76,7 +88,7 @@ export const addLink = function (start, end, type, linktext) { linktext = type.text if (typeof linktext !== 'undefined') { - edge.text = linktext.trim() + edge.text = sanitize(linktext.trim()) // strip quotes if string starts and exnds with a quote if (edge.text[0] === '"' && edge.text[edge.text.length - 1] === '"') { @@ -172,6 +184,9 @@ const setTooltip = function (ids, tooltip) { } const setClickFun = function (id, functionName) { + if (config.strictSecurity) { + return + } if (typeof functionName === 'undefined') { return } @@ -335,6 +350,7 @@ export const addSubGraph = function (id, list, title) { id = id || ('subGraph' + subCount) title = title || '' + title = sanitize(title) subCount = subCount + 1 const subGraph = { id: id, nodes: nodeList, title: title.trim(), classes: [] } subGraphs.push(subGraph) diff --git a/src/diagrams/flowchart/parser/flow.spec.js b/src/diagrams/flowchart/parser/flow.spec.js index 31ed24a6e..d352a9205 100644 --- a/src/diagrams/flowchart/parser/flow.spec.js +++ b/src/diagrams/flowchart/parser/flow.spec.js @@ -1333,7 +1333,7 @@ describe('when parsing ', function () { const edges = flow.parser.yy.getEdges() expect(vert['C'].type).toBe('round') - expect(vert['C'].text).toBe('Chimpansen hoppar åäö
- ÅÄÖ') + expect(vert['C'].text).toBe('Chimpansen hoppar åäö
- ÅÄÖ') }) // xit('it should handle åäö, minus and space and br',function(){ // const res = flow.parser.parse('graph TD; A[Object(foo,bar)]-->B(Thing);'); @@ -1460,7 +1460,7 @@ describe('when parsing ', function () { expect(edges.length).toBe(0) expect(vert['a'].type).toBe('diamond') - expect(vert['a'].text).toBe('A
end') + expect(vert['a'].text).toBe('A
end') }) it('should handle a single round node with html in it', function () { // Silly but syntactically correct @@ -1471,7 +1471,7 @@ describe('when parsing ', function () { expect(edges.length).toBe(0) expect(vert['a'].type).toBe('round') - expect(vert['a'].text).toBe('A
end') + expect(vert['a'].text).toBe('A
end') }) it('should handle a single node with alphanumerics starting on a char', function () { // Silly but syntactically correct @@ -1573,7 +1573,7 @@ describe('when parsing ', function () { }) describe('special characters should be be handled.', function () { - const charTest = function (char) { + const charTest = function (char, result) { const res = flow.parser.parse('graph TD;A(' + char + ')-->B;') const vert = flow.parser.yy.getVertices() @@ -1581,7 +1581,11 @@ describe('when parsing ', function () { expect(vert['A'].id).toBe('A') expect(vert['B'].id).toBe('B') - expect(vert['A'].text).toBe(char) + if(result){ + expect(vert['A'].text).toBe(result) + }else{ + expect(vert['A'].text).toBe(char) + } } it('it should be able to parse a \'.\'', function () { @@ -1614,16 +1618,19 @@ describe('when parsing ', function () { }) it('it should be able to parse a \'<\'', function () { - charTest('<') + charTest('<','<') }) it('it should be able to parse a \'>\'', function () { - charTest('>') + charTest('>','>') }) it('it should be able to parse a \'=\'', function () { charTest('=') }) + it('it should be able to parse a \'&\'', function () { + charTest('&') + }) }) it('should be possible to declare a class', function () { diff --git a/src/diagrams/gantt/ganttDb.js b/src/diagrams/gantt/ganttDb.js index c2a9f82b5..a6dadd4d7 100644 --- a/src/diagrams/gantt/ganttDb.js +++ b/src/diagrams/gantt/ganttDb.js @@ -1,7 +1,9 @@ import moment from 'moment-mini' import { logger } from '../../logger' import * as d3 from 'd3' +import { getConfig } from '../../config' +const config = getConfig() let dateFormat = '' let axisFormat = '' let excludes = [] @@ -62,10 +64,12 @@ export const getExcludes = function () { } export const setTitle = function (txt) { + console.log('Setting title ', txt) title = txt } export const getTitle = function () { + console.log('Title is ', title) return title } @@ -451,6 +455,9 @@ export const setClass = function (ids, className) { } const setClickFun = function (id, functionName, functionArgs) { + if (config.strictSecurity) { + return + } if (typeof functionName === 'undefined') { return } diff --git a/src/diagrams/gantt/parser/gantt.js b/src/diagrams/gantt/parser/gantt.js index 44fcbecb6..6f2d5f4db 100644 --- a/src/diagrams/gantt/parser/gantt.js +++ b/src/diagrams/gantt/parser/gantt.js @@ -71,7 +71,7 @@ recoverable: (boolean: TRUE when the parser has a error recovery rule available for this particular error) } */ -var gantt = (function(){ +var parser = (function(){ var o=function(k,v,o,l){for(o=o||{},l=k.length;l--;o[k[l]]=v);return o},$V0=[6,8,10,11,12,13,14,15,16,18,20],$V1=[1,9],$V2=[1,10],$V3=[1,11],$V4=[1,12],$V5=[1,13],$V6=[1,14],$V7=[1,16],$V8=[1,17]; var parser = {trace: function trace () { }, yy: {}, @@ -191,15 +191,18 @@ parse: function parse(input) { vstack.length = vstack.length - n; lstack.length = lstack.length - n; } - _token_stack: - var lex = function () { + function lex() { var token; - token = lexer.lex() || EOF; + token = tstack.pop() || lexer.lex() || EOF; if (typeof token !== 'number') { + if (token instanceof Array) { + tstack = token; + token = tstack.pop(); + } token = self.symbols_[token] || token; } return token; - }; + } var symbol, preErrorSymbol, state, action, a, r, yyval = {}, p, len, newState, expected; while (true) { state = stack[stack.length - 1]; @@ -211,27 +214,27 @@ parse: function parse(input) { } action = table[state] && table[state][symbol]; } - if (typeof action === 'undefined' || !action.length || !action[0]) { - var errStr = ''; - expected = []; - for (p in table[state]) { - if (this.terminals_[p] && p > TERROR) { - expected.push('\'' + this.terminals_[p] + '\''); - } + if (typeof action === 'undefined' || !action.length || !action[0]) { + var errStr = ''; + expected = []; + for (p in table[state]) { + if (this.terminals_[p] && p > TERROR) { + expected.push('\'' + this.terminals_[p] + '\''); } - if (lexer.showPosition) { - errStr = 'Parse error on line ' + (yylineno + 1) + ':\n' + lexer.showPosition() + '\nExpecting ' + expected.join(', ') + ', got \'' + (this.terminals_[symbol] || symbol) + '\''; - } else { - errStr = 'Parse error on line ' + (yylineno + 1) + ': Unexpected ' + (symbol == EOF ? 'end of input' : '\'' + (this.terminals_[symbol] || symbol) + '\''); - } - this.parseError(errStr, { - text: lexer.match, - token: this.terminals_[symbol] || symbol, - line: lexer.yylineno, - loc: yyloc, - expected: expected - }); } + if (lexer.showPosition) { + errStr = 'Parse error on line ' + (yylineno + 1) + ':\n' + lexer.showPosition() + '\nExpecting ' + expected.join(', ') + ', got \'' + (this.terminals_[symbol] || symbol) + '\''; + } else { + errStr = 'Parse error on line ' + (yylineno + 1) + ': Unexpected ' + (symbol == EOF ? 'end of input' : '\'' + (this.terminals_[symbol] || symbol) + '\''); + } + this.parseError(errStr, { + text: lexer.match, + token: this.terminals_[symbol] || symbol, + line: lexer.yylineno, + loc: yyloc, + expected: expected + }); + } if (action[0] instanceof Array && action.length > 1) { throw new Error('Parse Error: multiple actions possible at state: ' + state + ', token: ' + symbol); } @@ -703,9 +706,9 @@ return new Parser; if (typeof require !== 'undefined' && typeof exports !== 'undefined') { -exports.parser = gantt; -exports.Parser = gantt.Parser; -exports.parse = function () { return gantt.parse.apply(gantt, arguments); }; +exports.parser = parser; +exports.Parser = parser.Parser; +exports.parse = function () { return parser.parse.apply(parser, arguments); }; exports.main = function commonjsMain (args) { if (!args[1]) { console.log('Usage: '+args[0]+' FILE'); diff --git a/src/mermaidAPI.js b/src/mermaidAPI.js index c737f451c..1beba6b06 100644 --- a/src/mermaidAPI.js +++ b/src/mermaidAPI.js @@ -14,7 +14,7 @@ import * as d3 from 'd3' import scope from 'scope-css' import pkg from '../package.json' - +import { setConfig } from './config' import { logger, setLogLevel } from './logger' import utils from './utils' import flowRenderer from './diagrams/flowchart/flowRenderer' @@ -77,6 +77,11 @@ const config = { */ logLevel: 5, + /** + * **strictSecurity** A boolean flag setting the level of trust to be used on the parsed diagrams. When set to true the click functionality is disabled. + */ + strictSecurity: false, + /** * **startOnLoad** - This options controls whether or mermaid starts when the page loads */ @@ -240,6 +245,7 @@ const config = { } setLogLevel(config.logLevel) +setConfig(config) function parse (text) { const graphType = utils.detectType(text) From 5abedab09554d4307bb62d3480f0e8f9dd11a064 Mon Sep 17 00:00:00 2001 From: Knut Sveidqvist Date: Sun, 14 Jul 2019 02:05:59 -0700 Subject: [PATCH 25/31] e2e test for stricter security in mermaid --- dist/xssi.html | 122 ++++++++++++++++++ e2e/helpers/util.js | 14 +- e2e/platform/viewer.js | 31 ++++- e2e/platform/xss.html | 44 +++++++ e2e/platform/xss.png | Bin 0 -> 6413 bytes ...nder-a-simple-sequence-diagrams-1-diff.png | Bin 0 -> 59408 bytes ...mple-flowchart-with-line-breaks-1-snap.png | Bin 22269 -> 22054 bytes ...nverse-trapezoid-vertex-options-1-snap.png | Bin 24600 -> 24483 bytes ...nder-a-simple-sequence-diagrams-1-snap.png | Bin 0 -> 31623 bytes ...s-xss-should-handle-xss-in-tags-1-snap.png | Bin 0 -> 14185 bytes e2e/spec/xss.spec.js | 15 +++ 11 files changed, 220 insertions(+), 6 deletions(-) create mode 100644 dist/xssi.html create mode 100644 e2e/platform/xss.html create mode 100644 e2e/platform/xss.png create mode 100644 e2e/spec/__image_snapshots__/__diff_output__/xss-spec-js-sequencediagram-should-render-a-simple-sequence-diagrams-1-diff.png create mode 100644 e2e/spec/__image_snapshots__/xss-spec-js-sequencediagram-should-render-a-simple-sequence-diagrams-1-snap.png create mode 100644 e2e/spec/__image_snapshots__/xss-spec-js-xss-should-handle-xss-in-tags-1-snap.png create mode 100644 e2e/spec/xss.spec.js diff --git a/dist/xssi.html b/dist/xssi.html new file mode 100644 index 000000000..df853a0a4 --- /dev/null +++ b/dist/xssi.html @@ -0,0 +1,122 @@ + + + + + + Mermaid Quick Test Page + + + + +
+ gantt + title Exclusive end dates If bold then xss (Manual date should end on 3d) + dateFormat YYYY-MM-DD + axisFormat %d + section Section1 + 2 Days: 1, 2019-01-01,2d + Manual Date: 2, 2019-01-01,2019-01-03 +
+ +
+ graph TD + A["If bold then xssChristmas"] -->|Get If bold then xss money| B(Go If bold then xss shopping) + B --> C{Let me thinksssss
ssssssssssssssssssssss
sssssssssssssssssssssssssss} + C -->|One| D[Laptop] + C -->|Two| E[iPhone] + C -->|Three| F[Car] +
+
+graph TB + subgraph "If bold then xss" + a1-->a2 + end +
+
+graph TD +A[Christmas] -->|Get money| B(Go shopping) +B --> C{Let me think} +C -->|One| D[Laptop] +C -->|Two| E[iPhone] +C -->|Three| F[Car] +click A "index.html#link-clicked" "link test" +click B testClick "click test" +classDef someclass fill:#f96; +class A someclass; +
+ +
+sequenceDiagram +participant "Alice" +participant Bob +participant John as John
Second Line +Alice ->> Bob: Hello Bob, how are you? +Bob-->>John: How about you If bold then xssJohn? +Bob--x Alice: I am good thanks! +Bob-x John: I am good thanks! +Note right of John: Bob thinks a long
long time, so long
that the text does
not fit on a row. +Bob-->Alice: Checking with John... +alt either this +Alice->>John: Yes +else or this +Alice->>John: No +else or this will happen +Alice->John: Maybe +end +par this happens in parallel +Alice -->> Bob: Parallel message 1 +and +Alice -->> John: Parallel message 2 +end +
+ +
+classDiagram +Class01 <|-- AveryLongClass : CoIf bold then xssol +Class03 "0" *-- "0..n" Class04 +Class05 "1" o-- "many" Class06 +Class07 .. Class08 +Class09 "many" --> "1" C2 : Where am i? +Class09 "0" --* "1..n" C3 +Class09 --|> Class07 +Class07 : equals() +Class07 : Object[] elementData +Class01 : size() +Class01 : int chimp +Class01 : int gorilla +Class08 <--> C2: Cool label +
+ + + + + + diff --git a/e2e/helpers/util.js b/e2e/helpers/util.js index bd5f7b624..e60e15aa0 100644 --- a/e2e/helpers/util.js +++ b/e2e/helpers/util.js @@ -1,19 +1,23 @@ /* eslint-env jest */ import { Base64 } from 'js-base64' -export const mermaidUrl = (graphStr, options) => { +export const mermaidUrl = (graphStr, options, api) => { const obj = { code: graphStr, mermaid: options } const objStr = JSON.stringify(obj) - // console.log(Base64) - return 'http://localhost:9000/e2e.html?graph=' + Base64.encodeURI(objStr) + let url = 'http://localhost:9000/e2e.html?graph=' + Base64.encodeURI(objStr) + if (api) { + url = 'http://localhost:9000/xss.html?graph=' + graphStr + } + + return url } -export const imgSnapshotTest = async (page, graphStr, options) => { +export const imgSnapshotTest = async (page, graphStr, options, api) => { return new Promise(async resolve => { - const url = mermaidUrl(graphStr, options) + const url = mermaidUrl(graphStr, options, api) await page.goto(url) diff --git a/e2e/platform/viewer.js b/e2e/platform/viewer.js index a99bad818..afdbc23c7 100644 --- a/e2e/platform/viewer.js +++ b/e2e/platform/viewer.js @@ -1,4 +1,5 @@ import { Base64 } from 'js-base64' +import mermaid from '../../dist/mermaid.core' /** * ##contentLoaded @@ -22,6 +23,29 @@ const contentLoaded = function () { global.mermaid.init() } } +const contentLoadedApi = function () { + let pos = document.location.href.indexOf('?graph=') + if (pos > 0) { + pos = pos + 7 + const graphBase64 = document.location.href.substr(pos) + const graphObj = JSON.parse(Base64.decode(graphBase64)) + // const graph = 'hello' + console.log(graphObj) + const div = document.createElement('div') + div.id = 'block' + div.className = 'mermaid' + // div.innerHTML = graphObj.code + document.getElementsByTagName('body')[0].appendChild(div) + global.mermaid.initialize(graphObj.mermaid) + console.log('apa') + + mermaid.render('newid', graphObj.code, (svgCode, bindFunctions) => { + div.innerHTML = svgCode + + bindFunctions(div) + }, div) + } +} if (typeof document !== 'undefined') { /*! @@ -30,7 +54,12 @@ if (typeof document !== 'undefined') { window.addEventListener( 'load', function () { - contentLoaded() + if (this.location.href.match('xss.html')) { + this.console.log('Using api') + contentLoadedApi() + } else { + contentLoaded() + } }, false ) diff --git a/e2e/platform/xss.html b/e2e/platform/xss.html new file mode 100644 index 000000000..9abc43852 --- /dev/null +++ b/e2e/platform/xss.html @@ -0,0 +1,44 @@ + + + + + + + + + + + + diff --git a/e2e/platform/xss.png b/e2e/platform/xss.png new file mode 100644 index 0000000000000000000000000000000000000000..9dc80e071ce0dfa95a3ec154642e0a5641ab79f8 GIT binary patch literal 6413 zcmV+o8S>_dP)004R>004l5008;`004mK004C`008P>0026e000+ooVrmw00002 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 bH8v|SFgh?Wqn(;P00000NkvXXu0mjfzS~wY literal 0 HcmV?d00001 diff --git a/e2e/spec/__image_snapshots__/__diff_output__/xss-spec-js-sequencediagram-should-render-a-simple-sequence-diagrams-1-diff.png b/e2e/spec/__image_snapshots__/__diff_output__/xss-spec-js-sequencediagram-should-render-a-simple-sequence-diagrams-1-diff.png new file mode 100644 index 0000000000000000000000000000000000000000..75739520379cc30d0c89fb91a85ec9f8ac487160 GIT binary patch literal 59408 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�fOToBq8T@0Aa#jcr~Btle3$x}Ye3}g zSY*kL_s{OeV{7F9E0Pwk8h=jN85X&Ty%2?U{kG@=EJM@oajNFrCr+OF zv&zs@@j5u-j4J`+`~LpK*|3S;vv+bT$8F7jGUX1KyF!H?fbjppi2rGwsE_*3>7QHq z^-i$S_Op$+MnHEn+*O{NUUOrksdD*3&^U*6W#l&Ywaka-(`Vd&d{xo+dpv1_&5*zuUIdTq2 zC}&9G2)vuPplD(r^-xQ~kGEq7Wr+UGO+ zhQI}oUdXUN+n2drt-0zzl$DOFN0{8LXJkx|H zF7!FSvw1y2PVv=`ANLZhX0)+Zbicfj)NB~kbh6iU2BjU}kb11T;32_;#kHlGTiYkM zt5IJ8EB77A+MfW*qkR%r*kd@tkII2Chr8(D$`8P+j*E*s@Cc2r&n}$B1ei!ApQ%$3*FV*Hd9ow6y^SfKjG|LguA`2_gS3%DQqQmut}-=|F282jI`7(Y0F%bhe*XtuijadHnP!0JG| zd1RV5mvjeX7dG0tXU`&nLLL?t)_oEH>-(PB^M6jWY0O<}^W)qCjju??t#7k&N9N3< zc-%lgCOGk5z$tP=yaLD*jYo|KIdRe1coPI2{q(RNnF$Thor6d-(9zZHikjzoah1)M)r*_lIPY z_G1FZS)s5WBO~pj;SiO}uX)fE{r1C$*MN8!ir&15<>-{34^KnXKEQ|6oQ3PwudhrrodHlIVQXvaAqXJHo;`a+MMaP2uMXY-s9a~4 zMyXnovJA{NBkqV2yN`MnC{N(nh|kcfeRo!GN`h@$$|r(=O)%JD5AvBf_5%|u^d)PWXR+pc{$1uUu5P$Vv+kbp7`Lb zfPdjY%u#{joqvzlI4ze?~zy_$ah^~B1H(aOlbwct&(%Z8_V1AC1PBb4s=9b-2 zdkS!HRDYB=x3nAtE;vCQ_wqtVh;Oy%K~5Hel=bBxrMv`bgq3^zd6B*-KUC8`yh7K| zVNvbq$e;c$*-<;0KTk_+fvb(QGjZylNEJN+oO!>J##28HY72(?yY$e&o?x688joyh zcm9;V?~%#W1$-KmJo8|~Tolz5o}DN2W_9rX7sS5&&YAHP>4rozkylCJ=K&Fg3Z~eO z&O+fXDr==?7>9)W-X}STg%w6TnOu1RO>84EtezeQZy6GpE>+oEOKbJ zgM$O<`HT|jx{n@fX81ah!_2s|b~RC^?buq8V>8lVlN1lwimQpHd7bFh*cl_9c`59FThfYV z;B1HyfL&=~xPaSBs^9WZH289!+wW;e$Pz-O*-OGg_n|!Z-7?Nx>A;N~TrY8el#tX9_r446Uyp0%2bs zs|gr9A<_$4eit=iA`sX1&P+t0VVfC<ZpO zX7P+9Q>4H7g&Y8LKO=GxPR+tFaq@%GAiqM>Pnzfk8CXmG4#~ctzJO%>kh~xY$-Pk4 zn+S|V->`X|0d_Z1G3c8N&iG?)JN?jKJJ=i%UWk5 z%P0Z78R|aL-+e>UVI8VDeE8X~bQ5e!`0O7r_GaH-U20XI>48M-Yk+?%t0P$I2pGPh zZp9Q#+<9Yz2clB~Pk-;;y^6Sd_b#&tJvoDV-OOabkN$o+uM6-#8*FN}68BE*9hxKp zh3CtQj8k1G6B#7#_3*J{F?kpwO&&wwmJuIq0ixWKk%6C;Ft^fpTDvVmbMhRr$Yjxx z$W#JdsraC+Dg7G#APM}kG#Lz6^<fhypinl|G9*Qnpx z;e*K_jdK~55r8+ag|z;DVB>lvj0k)2)~=n!vZF4}JHsTebB*@pExe+DF`sNCR0Aj34@FGt3TXnCYh%Y>z|~3v7)D)K}eFL9`bM;#+=xd{768C7Ou9&T=O5 zCXr{dKT?+wR{1p2DqA6vh%gXLjGJp}Mi2w+eIV0xBba4ksYhi`A7^Oq30>DysDj3UtzP@4z>TCk8|Q)%=Jz#h&aAqb-E)#v1@U?r3t9mR+^Xhz7` zH@)+abZFW2_>g)Tz!2n;9zTZ7os9=Z$zPcJK2G}r8qR6`KvE_WF|Q8|e98t)dDhA{ zU-`KQAlXCp!tSVAxn|<@dht_e2lDQ8`-ZwoE^YMR8?88}Y!(a4sXx_DKmwNMKla9V zrPa~mPze&cgdBTz2}rd!7a?AQcaPn7Kq4Jt4AMY;fpPcrMBD_|I$wG=mg!mw2#%Q+PhJ@G_hh(t7s1 zm}wJFy6~gZJeQvTVliXfgwb|Xl&Oi(ePHUHwKITBH^s=gc{MWjHqDjp-bJ(x>z0#B z^b@?ywJVX%LsPmqtvj=Z2mhd4P_rJnq=&GiI`?!gh2>+Rb=T=W+-ZA#-5#C?k&$N% z5$&-6uxBd^hY+lpOq5M+7SJblQSc|=J|Ek+yuXA=@22dIR@@oB^(Gqf9Y@yoM(Zk3 z{Zy-bUb6ulR3>uM-cF~~T%(Gn2u<_2(vV+*Q| zS`y?Uk~mF2<%q)T%Zr}E`<(2|=Tlj~cCE<-y?WT)*<|*xFIuM)31YvCSyjjZTAE+| z*fAj(B3WgruV<#6Y`zox1OdVp$N`Wf>i{#z^w}8!2oSKA$LU;7uE{*D{Xl>73ilyf z;8iLTpStqGvKLPq!_`1|MY81rpd7WT;+g4MPfwU%j@OA}11bXyMO^4*Ig?LVxc-GI z@KbgkK+1)F1}=naWAg}OaXAf`r(TBn{UeNIiB0}s;g)##GZ4T~>TYCsHdd{(i$G}n z)Jr+C2&Ls4qLqAzxB;%v_n~3B|Mlw%`VcKFSFHQ!h)c(74ze*Mcodn=4hXcA@F6Ms z_+0hqz_ix@ro9Bj&}EK45UYMgEJoc*OG$;8`bY<%e&h0y5BGLc9zF8adwj_D-L@GW z*l_%=I+{?LXsUD>U^o{s?8b{1+ey?A=2Vl9N`V{zTBzL7`rkifUiljVNm;hLJ8+g& zY~%MnIEZM8#PukZ4Kcj5vGe;C;S-3WPCTDFW7iMFZ_&zF(fs1#Lx6Q_-Fbf2q8qT? z$ZB1WNaA1_MTMfpUj_)Xegts*MF2LstDmwC$f5nn#qYVVpK|#Em)nifXr=Odd)7~% zy9_94hWP~rJZcT-p1<*hW zSpzNWkG#K2)y*iPfPka%g@tAFkY3Q|M%7GS);AXev9DC*W+hb?_{!K{w6x6fpob~S zRI9s745@|TGs!~p5&+NEePiE3I6iUQ z{5}HTs2#PPspaDXHNVBH6abh~g1w?rUGCK-lJ;w>)1COPt0q1Gh^Z#A+(@gnCgBXJ z&oQvcgsR{Bjp$|9zJ1D2EO7ER!6e}ny@*gV=~%U-%;=CEY$;G`H|y!?0gf{WHhv?r zcCo3?o5AJs9C4;285SuAFO##B8Eh3f^6|ck?f=e6 z@?AiXx!Xa)cmF_iMuEv8{sfxw%&EN?^796fkb*w&RY>>m5OJF|1VnMQTF`IU#El1D zF!rJ#ZhceP9TrP`*nnW+HryCd`DHA;JeQ#6T3S;W()s*nx=8u$Fd<;AjIaaE4CEs$ zIYfZKI^vs*n;2Frz+an{z;y%7sC6GNYu_&>Hb0p6`LG)PaNR&~Q%2azI+K^D*66R> zUIn*}&8ZPt3bblDk9xr%Pfv!j7|n=cSnc97Q>Wd9AqR}sA-Kox*2;inz$vqwinkA1nJdVO6-?`NBGipl~2;p~LlAkS{DNL;m4%*v#uybLLBY`{S*LJ&gjE2GU>o6__MC%XYgnv2Ms$S?L8130-@4~`f2MvNE?wc5AQd{5Iz!q7y;-VVI+jG zfS|j>wEYbxJnpQ`gIRb5@G*5iR3vzj(*Sa~g8*q)tj2N__u9k8%j=hfOOrSotsUl* zBQcFIN$+J6q>k5H8Z~-Kj}N?@j^;!MQ>`kuHx`ExAyT*|^=k|9v$v7t#Wf`aJod5h%*VoXPyGqgfD~?<#Nw6kIFoH^!(rthLYs+i^ut~#04fZu&9}uQ;v$=n zWHkQ|McJ437o6V}paAdY7F!-;xBk_ekGzjW98F}E@&Sn3WF5$vbftN)AE0=_dX$xk zRA__31_Dxmt~?g7mWNP`N8sC&;W)9Nl!!BODpYW3ti3W1su$!UTXBqJ1o!m(*Ck#C z$PNiUsgVoSVj+ZKt&pbTQTnp-^H1^HL7_~cdO{MKs*uV=Y(q%215v^zdj~f$VffRe z5i$lO)cJ6e6UVKx{tIPSLTZ4x*3r5XUZVMPn(&<^($1ovB>^rO}(sW)Cr zPLXzhAxAs-RrCWeB3Z}OL&c#gwyuM{cM!7%Hb5$3pUh_<8LFre-&)t_I41UY)6i-%egW`0 z>Y2>PaTL3MDOm6(t*18SzJgJn6hI;cS3$B5zz~4 z13uVTeJvkNXSyz&DHX2vK~VU_@e5~9;fiQ?zgGM)gR9yufH&N>(S@n=s&8plvcbDm9A7eQ>YQa)8?=2Bzb8=Ft zvtozpWw|K~1Brlqp5RfL6Zh*scMpW@=S(eDD0}Go=-@Q2gesz=1#20mUgwy4UH4za zpS6lAy3Mgd7=IeZcU;QL(gOcKDdQuru}7E(G}C}n-!BFCKdr#AoJDA|iAww>5Eq!)y|L$TVPQ!ys2}X|{Rmqze%sEsTvt&^!GcF+oaSKPk z&)xcH!73%Ag7A|+{7&H%I&^pRL&{d?wv_D7`e5TnwQg5Y=AE~NG=cc2!q;=C<$d~H zgESe-x;!5U=&$Z(yJfQEOBsEqr51+XWzazI9Niz zp#3?2%qt#UIsD}b=}TTV52rAlf{*ORT%6lJa>B-l1DVd@zgcw!PZ!qj+qP|L$<{7L z^;@E`d*U5kf)9FIRX@9)do`r=iLFTQD{NEO{_<05@QbLu_3^=<*sc3A`gTJj6$^u` z`@15z4*mYhdT##Oq(en~*xxrUOgr*n7WS{j^V)#Rtrh>V23=4R$t2FQ3s#{nl&i10 zeNB=G&LB{rzW@hup?e=x`K3Dd)K)yPoi=0HJHPfSL>ltzu7AhDoVljUK(pkL4^<>j zGukL|BOLbOH)?#h|u_WzaPit zEp}xpXScN69ibRHd|10q=dRq@>FVejB7~w_953~|KW$6RM{l!2%A92<7srP69vx|P zm-%s?BOHfQHcjuMmU0;NN!`;;$Z0Blxi8g<-;w}Qe>7+}?`lX`EY-Uo5UdtopX1&# zngeG#-(z+@4Z>ltpVY4#nusSY-G}Oy{mOP1ORJUf0X1l%Ht+HAZ>}z#`ARzX0$+{{ zI+^tS-rf3Gb9ot>v>jj<%J9*Y>A$FY{RE(&=g#Jmx$N2-Cyz_qtRLvC;-Mz=)E{es zqpq|>tIDIxPMYwQ)wp!+$@P{9PTqEQ0Iid`GImK)fp zpjLMCedAFkAh5sOZ(q7)`^<$X-F7$q@`MG)T{7tK#+md0g3{R(-F0%P%ecRYc?4;C zQ}jTwBwPu%rj5ICyZ}5XpP>$)$G}>)1r+=TG#A=UII}>r_4RX)*b@WI@;7BiSAfmz z0BX&)gB9s-ik??-y1feJxM6AuMtQ#*LJ~INcj1ajQe&+IRT`&YKqr>_5pRobl)e zbj$YJ`Rr(ew3pbm@sJh8HcfE9YtOF9{w?B&i=9a`SkJxDXMCYj@B6)fzJGkbx1YAh-p_vae(q=8Ypv_L*0b)j>w0U?>geCujjpFd%Lu{% z=%)PIBTRnU3cOKkZ;`lNont5%V5Lr`Ef-e%Eoh4sdVXc$y|(JUlVwY#GJNP%`#(Jd zQ2_(&TWpirwo?BA-*cZp;jVu_eD=h}#66V0W12ml(G(;(dkwft&t~}UJ7-%}Bp$nu za!?hW`q!F-HEJjV%6sNL*z=6n->M=`fLutXqr%lkkEHz2HEj`(z#H#WnsH)33u5VY z>-)yGJCw(|m0+C*;i7=(MTXG@7Uc0l-~#_+&!rp6b*dct*j1QBW^%v0IEk-q=030_ zP_cKK`JabXvd@nu#T%}FX>4}pm-?)yhaD@l4HHZ+VbWjXx5>D;R=d}#CSB92he>6 zhfi83f!adkU|nkI2&NoNmXEzvMLEak%pM$@$N>2Mzq64*67-JxyNld|udySRZ$DZFk%4U)8E@Y8 zZgZ4{g+(8DgMYg8?(OZ3)B9t=jCm_J#h9@cYZR5(lA}NbJ4du@oDo|rL<^op4SszW zqrJk~4lacJStHv1V#T6SbY~6gZ?6ah_Ap30B@O;$o3WXaABq^z`YX2lt{OiyTH~nf z(a#Eok4zZ!{G280by*W0s9KpxktY=x#|Jc+LlYw(R?FR9^**pjIvgt*2^rLa0(>Ro zQR)M7iBZWMOad`_d{00YQDV5T`{NA7HpnEbq~8h(YG7pc-#3ciZZ$qK9t26s?_F9) zQ047iBAD0gBAH1ZH8Snbb%7t6f_Z`~@2XiVkDeAFKcBH&WNU4=>zp}TXyH@vUw zmAXXoMrq=)#dO~GOC*g%cd$027gu3Ve&j2(?|`B!D`}LaHuzcHuJQMjlhw%^YTkim zp%f{fw+R&r=T?|dxC-uXnFS#5stVx zI%5Tvc~{k11{P{r0sJvm5+{rM#$9qWD&O2enHkf`@#02x$WA;^ufFP3XQJdm=~%G=xf zk?HtW3J~@xKDSEJPp~t+(R=MUC9?-NhYCl!rw1HN`x>(;?Nk>#HuAC9nd)R?7X%XM zMk~Ng+!AmZ?W!s)-dCDAFcBr-Q1Ef@ALqo7|41mE?{B$%Df9L1UFLq2J-4tA1w}+? zGwQQPOPS6){H$SHOsvXv$Pb#!*SaTbggk}>;hfgT&Ug>zP>dTP@@PJakC^17$fXds z4d=mO9-&o&Ye1j|Q!%^qDXzK#tfVuC!z(dmufDY$+@^x zybXC3@=*6MC3f80;ngAVO^~2GTkiOLZiYzN@GtXytHonw)kX$J#V9d9lDSH2d}LHF z%D(XgmY}Bq)KaWqYtjCu<0Rq&@P(F#ha`yQKM~=OmD+sH>NASjmmPrEztN#7x~cVv za95$Y(3&%E?x$2&HoWxzRMD~Asfwh*KDP1G{xWN;x{+z?jUE-CUy~Q|*<)qI5K`5n zNzx((u;Y_2lPwbTl73Oc^Ly?2x43Cm#67(pbE-m-%%*I<{Qo^D)@@~>@*ghDCq*nk zvDXAJInO+h-FlhdqXb89gM~pxRe?@fjntnrG_|#gPSFm{>-j>1gH?9rotVnARwr6B zRByZaA;45W-MNQD`*Mh7UuerY*&2I}x=z31=E=#Wz*nsR)Y1GK$9i1Wzs|McVCsq9 zrZAY%MIXV;P=D!_yE`gJ&p!JpwmiP(7zi-Njfe;~Ie5Dd5(H$VOtY?RI~${yeO?=+ zuPU4pk_q0Ncx2I086eJrZUh^I2@E&*mp~*?_Ft-`VPpiMGg9?^PCgV_M?dhsXbok6 z^j{J^4PSuR)rj54V?dYj>Pkm3%p1u0SF2NOkJV=ML9fjxozkZEDq%!uoXtg{8(qI{ zxXSOWJXqT&zh>qQDVLitsXN9A=IdedKN8$Db*VHa$$(0+D?KUC#Ma@(}_%CCHs&xr3A^lK{0R zDr)vjS}szG2)csn2op31r@o&1Wx(5rDb`l6>t4{ zYl)W-@_kdm0VFYR$e8W1|B}NDq6nQ(@4@H0QU5rSBviU~ZL$g~skStGam;66Eh&}W zykF23zE$N!@!{ODVdt~RxX|vFi#!65#TgPK%Uh-;CnrO~SF()Q9He)z_(WZ%XK%G- z$2ut~kg{Az)$bl*eg%21vFG>g;f@^>g=oSX0V3mPmIo{9*z>h~RZ*JCpz_TNgYvfx zH|5b6I((IpisCSRUEQ4s_v@1F8)uoi^|JgNZ2ZeZ zGIF(v-q6;Q?^3w|;lv?G3M!rN$>W)1qb0s?>eyJN;>3{3>H4fN((G<|jBK13YxSWJ z(CG_PFNGy>ybhGTolk6hh>muUx(0WR@;J@u5T`YSyStEYb`hI}r=!716IIVqv=O{% z&jJ)LctI~vLXpZI4iZ!Sz(n*XForx7&n>(_k%0OnUAyAu`h(C4lv3N4injK40E_nT ztW?m~${ra{F!F!Z8`AE+n0C=xA#oJvI5D!}N={US-7_ncn*|`317P+^aT^YYJg7*N zz%3J|(>&B6@}vBy5h}?Cw90{wGbl_lEj(Pk`=EeP{0Kj0uNXZ2Bz0~ z?Rse7C&(IRTWqqf41$kBRoA(lMs1hkgERcusG&S!R>1qz0 zM61ZMPWk+F$f$Nc9jPi+h`Gp_KNaP*1Vu6lgcr#K17+r`w&CuLE+G$FRN7CGQfE0jPM1 zEr7Ugl6Hz)d;Lc|2%DbAuEqn(ux;-cvJ@<*52oI#m zzag{sbLyHe9B;-lBktf|@;%OIfXM0@ZjD6uS;P6;qQs&7cRq%g)xu^5Q}~5h6B|GU zLQ1ZJ+LRyTHiQ4HVo8Z3{p`3177q4>LdZr5S!CI@F0DdD3xO%ROon>!7>!Mcy-Rid0yn3uL>CE60%2gB~bhO1vgXl zWgyhIy`L0y!VLmFK;eGM?g1hjV3d8u{6$|pJ=d^?UNSK52@+DZuK=nKz>EPPqT!LA ze$KS|ZGn7Os+oaFM#zDbm}IA}m2mS~;ahkd>Kx07yYn3H;02&M(5ZpU=s?!53nh)E z#Q_fRRi5E!)!?GQvTgu1bX3sIPMU&Z*OQXQ27k|z-?y5wQMayImpLkXyg-924rGf% zp_oe8_5taCbKYhBUpyC)J4XenJ=)9d5ZHbWfG6D8Y@AnpRcWZOZC1}5aE<5M$|54j zuBm^yRiIM(g|A&q-P-0*oexmve|h#>kqM$ZN-xyle0s3x$K_P_!87R6Sw{o0Lat>M z!dQ8VrP-``D~oTflx^BN_VFK8eMt9{OOzdHV2NI~!hI4{IJ{%JR}e?^2HNGo4X>Tm z5FH_W&+w{S47LcaYlGa1qqZ zjZ6Ol%3;);Si687Ic0)(-_bn>+tPtLzuV z+GxMe;cBaKUR`s(J5P*s%QH1x=%VK;p>1Te6vI98)12#kZ%ql99d-38;|Q3tsBeK9 zDU5QcnOdBeDOK1hjOUQ(FQrhiPJ(a%6(Wp6;{0}mOq9F<7SLOM3}!CLkmdXMUv+fGN%5HrFM%q~E9X`V_vhz>_E-Ms)4Ly#_Zx+v0WsW8A;d z_|}$nnN)%@=k-&~(f)>!nie;9izyC$Sk(W#{cRFI?=oc_Kxdsk1I*&Wxwvk4n|>H~ zzselIm|PuoVq)mWaDMdnFFWN^LNw=0ZG3yw4~zN_?GP22c_m8ehl=LTqwf}|d^pK# z!1~E*tE!x#)}{KSDj6EV=69AA6L0kGJ94xsQI?8eqACNtLIlHZ%SL-cBhp6EhG zs^s50ioP5aWw}e!srNtsQK2R}zFhyi{4zBzuSC74HoiSR*!$ldXej=ljl($W>xXO8 z@NfFHyvgwKqqAsxTE-^MFM2q<^2et1ydRsPQ~TlX3qNyxe>OLI`uEKbW#6}^*;)PA f{O@5g6d7}G9OTJ}6DS|2anV%Ur}}vJ(To2BC;PTc literal 0 HcmV?d00001 diff --git a/e2e/spec/__image_snapshots__/flowchart-spec-js-flowcart-should-render-a-simple-flowchart-with-line-breaks-1-snap.png b/e2e/spec/__image_snapshots__/flowchart-spec-js-flowcart-should-render-a-simple-flowchart-with-line-breaks-1-snap.png index f321bb0b1d83a1121c5d61c3e55a876f2fb01acb..f34b72f436fc711ba9b30d1aed0b8921d18ef2ff 100644 GIT binary patch literal 22054 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 JF6*2UngE4R&jkPg literal 22269 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

0;LlB`xuQT{^g{ThZ{Z8-z8!5A@%^ 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 SK6o$5?x0OBou{33iTV$juIKmw literal 24600 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 Djz@JV diff --git a/e2e/spec/__image_snapshots__/xss-spec-js-sequencediagram-should-render-a-simple-sequence-diagrams-1-snap.png b/e2e/spec/__image_snapshots__/xss-spec-js-sequencediagram-should-render-a-simple-sequence-diagrams-1-snap.png new file mode 100644 index 0000000000000000000000000000000000000000..b7ef626c7a8d3fc3be085249753712a5f72457f1 GIT binary patch literal 31623 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,xq`Ni}c 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 { + it('should handle xss in tags', async () => { + // const str = 'graph LR;\nB-->D();' + const str = 'eyJjb2RlIjoiXG5ncmFwaCBMUlxuICAgICAgQi0tPkQoPGltZyBvbmVycm9yPWxvY2F0aW9uPWBqYXZhc2NyaXB0XFx1MDAzYXhzc0F0dGFja1xcdTAwMjhkb2N1bWVudC5kb21haW5cXHUwMDI5YCBzcmM9eD4pOyIsIm1lcm1haWQiOnsidGhlbWUiOiJkZWZhdWx0In19'; + await imgSnapshotTest(page, str, + {}, true) + }) +}) From 9753578903e7588c42223e557cd44c5f83b720bb Mon Sep 17 00:00:00 2001 From: Knut Sveidqvist Date: Sun, 14 Jul 2019 02:44:46 -0700 Subject: [PATCH 26/31] Removed filelog as it causes a security warning --- gulpfile.js | 14 ++++++++++++-- package.json | 6 +++--- yarn.lock | 48 +++++++++++++++++++----------------------------- 3 files changed, 34 insertions(+), 34 deletions(-) diff --git a/gulpfile.js b/gulpfile.js index 613cf83c1..4540d422b 100644 --- a/gulpfile.js +++ b/gulpfile.js @@ -1,10 +1,20 @@ import gulp from 'gulp' import jison from 'gulp-jison' -import filelog from 'gulp-filelog' +import print from 'gulp-print' +// const es = require('event-stream') + +const logFile = function (es) { + return es.map(function (file, cb) { + log(file.path) + return cb() + }) +} gulp.task('jison', function () { return gulp.src('./src/**/*.jison') - .pipe(filelog('Jison file:')) + // .pipe(filelog('Jison file:')) + // .pipe(logFile(es)) + .pipe(print()) .pipe(jison({ 'token-stack': true })) .pipe(gulp.dest('./src/')) }) diff --git a/package.json b/package.json index faf488ab2..37e1e4510 100644 --- a/package.json +++ b/package.json @@ -46,10 +46,11 @@ "dagre-d3-renderer": "^0.5.8", "dagre-layout": "^0.8.8", "graphlibrary": "^2.2.0", + "gulp-print": "^5.0.2", "he": "^1.2.0", - "moment-mini": "^2.22.1", "lodash": "^4.17.11", "minify": "^4.1.1", + "moment-mini": "^2.22.1", "scope-css": "^1.2.1" }, "devDependencies": { @@ -63,7 +64,6 @@ "css-loader": "^2.0.1", "css-to-string-loader": "^0.1.3", "gulp": "^4.0.0", - "gulp-filelog": "^0.4.1", "gulp-jison": "^1.2.0", "husky": "^1.2.1", "identity-obj-proxy": "^3.0.0", @@ -91,4 +91,4 @@ "babel-core" ] } -} \ No newline at end of file +} diff --git a/yarn.lock b/yarn.lock index 3e5d5bf7c..3882c896d 100644 --- a/yarn.lock +++ b/yarn.lock @@ -889,7 +889,7 @@ ansi-colors@^1.0.1: dependencies: ansi-wrap "^0.1.0" -ansi-colors@^3.0.0: +ansi-colors@^3.0.0, ansi-colors@^3.2.4: version "3.2.4" resolved "https://registry.yarnpkg.com/ansi-colors/-/ansi-colors-3.2.4.tgz#e3a3da4bfbae6c86a9c285625de124a234026fbf" integrity sha512-hHUXGagefjN2iRrID63xckIvotOXOojhQKWIPUZ4mNUZ9nLZW+7FMNoE1lOkEhNWYsx/7ysGIuJYCiMAA9FnrA== @@ -3705,7 +3705,7 @@ fancy-log@^1.1.0: chalk "^1.1.1" time-stamp "^1.0.0" -fancy-log@^1.3.2: +fancy-log@^1.3.2, fancy-log@^1.3.3: version "1.3.3" resolved "https://registry.yarnpkg.com/fancy-log/-/fancy-log-1.3.3.tgz#dbc19154f558690150a23953a0adbd035be45fc7" integrity sha512-k9oEhlyc0FrVh25qYuSELjr8oxsCoc4/LEZfg2iJJrfEk/tZL9bCoJE47gqAvI2m/AUjluCS4+3I0eTx8n3AEw== @@ -4382,14 +4382,6 @@ gulp-cli@^2.0.0: v8flags "^3.0.1" yargs "^7.1.0" -gulp-filelog@^0.4.1: - version "0.4.1" - resolved "https://registry.yarnpkg.com/gulp-filelog/-/gulp-filelog-0.4.1.tgz#bbfa62f45fd1fca8a046b1dc96e4e03c87a96392" - integrity sha1-u/pi9F/R/KigRrHcluTgPIepY5I= - dependencies: - gulp-util "~3.0.1" - through2 "*" - gulp-jison@^1.2.0: version "1.2.0" resolved "https://registry.yarnpkg.com/gulp-jison/-/gulp-jison-1.2.0.tgz#3a81fdb5c58d40709578dc08183fa38a4112aa49" @@ -4399,7 +4391,17 @@ gulp-jison@^1.2.0: jison "~0.4.15" through2 "~0.6.3" -gulp-util@~3.0.1, gulp-util@~3.0.4: +gulp-print@^5.0.2: + version "5.0.2" + resolved "https://registry.yarnpkg.com/gulp-print/-/gulp-print-5.0.2.tgz#8f379148218d2e168461baa74352e11d1bf7aa75" + integrity sha512-iIpHMzC/b3gFvVXOfP9Jk94SWGIsDLVNUrxULRleQev+08ug07mh84b1AOlW6QDQdmInQiqDFqJN1UvhU2nXdg== + dependencies: + ansi-colors "^3.2.4" + fancy-log "^1.3.3" + map-stream "0.0.7" + vinyl "^2.2.0" + +gulp-util@~3.0.4: version "3.0.8" resolved "https://registry.yarnpkg.com/gulp-util/-/gulp-util-3.0.8.tgz#0054e1e744502e27c04c187c3ecc505dd54bbb4f" integrity sha1-AFTh50RQLifATBh8PsxQXdVLu08= @@ -6398,6 +6400,11 @@ map-obj@^1.0.0, map-obj@^1.0.1: resolved "https://registry.yarnpkg.com/map-obj/-/map-obj-1.0.1.tgz#d933ceb9205d82bdcf4886f6742bdc2b4dea146d" integrity sha1-2TPOuSBdgr3PSIb2dCvcK03qFG0= +map-stream@0.0.7: + version "0.0.7" + resolved "https://registry.yarnpkg.com/map-stream/-/map-stream-0.0.7.tgz#8a1f07896d82b10926bd3744a2420009f88974a8" + integrity sha1-ih8HiW2CsQkmvTdEokIACfiJdKg= + map-visit@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/map-visit/-/map-visit-1.0.0.tgz#ecdca8f13144e660f1b5bd41f12f3479d98dfb8f" @@ -8024,15 +8031,6 @@ read-pkg@^4.0.1: string_decoder "~1.1.1" util-deprecate "~1.0.1" -"readable-stream@2 || 3": - version "3.1.0" - resolved "https://registry.yarnpkg.com/readable-stream/-/readable-stream-3.1.0.tgz#19c2e9c1ce43507c53f6eefbcf1ee3d4aaa786f5" - integrity sha512-vpydAvIJvPODZNagCPuHG87O9JNPtvFEtjHHRVwNVsVVRBqemvPJkc2SYbxJsiZXawJdtZNmkmnsPuE3IgsG0A== - dependencies: - inherits "^2.0.3" - string_decoder "^1.1.1" - util-deprecate "^1.0.1" - "readable-stream@>=1.0.33-1 <1.1.0-0": version "1.0.34" resolved "https://registry.yarnpkg.com/readable-stream/-/readable-stream-1.0.34.tgz#125820e34bc842d2f2aaafafe4c2916ee32c157c" @@ -9396,14 +9394,6 @@ through2-filter@^2.0.0: through2 "~2.0.0" xtend "~4.0.0" -through2@*: - version "3.0.0" - resolved "https://registry.yarnpkg.com/through2/-/through2-3.0.0.tgz#468b461df9cd9fcc170f22ebf6852e467e578ff2" - integrity sha512-8B+sevlqP4OiCjonI1Zw03Sf8PuV1eRsYQgLad5eonILOdyeRsY27A/2Ze8IlvlMvq31OH+3fz/styI7Ya62yQ== - dependencies: - readable-stream "2 || 3" - xtend "~4.0.1" - through2@^2.0.0: version "2.0.3" resolved "https://registry.yarnpkg.com/through2/-/through2-2.0.3.tgz#0004569b37c7c74ba39c43f3ced78d1ad94140be" @@ -9915,7 +9905,7 @@ vinyl@^0.5.0: clone-stats "^0.0.1" replace-ext "0.0.1" -vinyl@^2.0.0: +vinyl@^2.0.0, vinyl@^2.2.0: version "2.2.0" resolved "https://registry.yarnpkg.com/vinyl/-/vinyl-2.2.0.tgz#d85b07da96e458d25b2ffe19fece9f2caa13ed86" integrity sha512-MBH+yP0kC/GQ5GwBqrTPTzEfiiLjta7hTtvQtbxBgTeSXsmKQRQecjibMbxIXzVT3Y9KJK+drOz1/k+vsu8Nkg== From c818dbb5a03960a8167dbcbfc2bdbc460bd65176 Mon Sep 17 00:00:00 2001 From: Knut Sveidqvist Date: Sun, 14 Jul 2019 06:07:27 -0700 Subject: [PATCH 27/31] Setting default securityLevel to strict, updated docs in mermaidAPI --- docs/mermaidAPI.md | 245 ++- gulpfile.js | 10 - package.json | 2 + src/config.js | 4 +- src/diagrams/flowchart/flowDb.js | 13 +- src/diagrams/flowchart/parser/flow.spec.js | 5 + src/diagrams/gantt/ganttDb.js | 2 +- src/mermaidAPI.js | 117 +- yarn.lock | 1849 +++++++++++++++++++- 9 files changed, 2086 insertions(+), 161 deletions(-) diff --git a/docs/mermaidAPI.md b/docs/mermaidAPI.md index 4f8595286..e4b26a751 100644 --- a/docs/mermaidAPI.md +++ b/docs/mermaidAPI.md @@ -1,103 +1,228 @@ -# mermaidAPI + -> **Warning** This file is generated automatically from the comments of [mermaidAPI.js](https://github.com/knsv/mermaid/blob/master/src/mermaidAPI.js) file. Please read that file **instead** for up-to-date information. +## mermaidAPI -This is the api to be used when handling the integration with the web page instead of using the default integration (mermaid.js). - -The core of this api is the **render** function that given a graph definitionas text renders the graph/diagram and returns a svg element for the graph. It is is then up to the user of the API to make use of the svg, either insert it somewhere in the page or something completely different. +This is the api to be used when handling the integration with the web page instead of using the default integration +(mermaid.js). +The core of this api is the **render** function that given a graph definitionas text renders the graph/diagram and +returns a svg element for the graph. It is is then up to the user of the API to make use of the svg, either insert it +somewhere in the page or something completely different. ## Configuration These are the default options which can be overridden with the initialization call as in the example below: -```javascript -mermaid.initialize({ - flowchart:{ - htmlLabels: false - } -}); -``` + mermaid.initialize({ + flowchart:{ + htmlLabels: false + } + }); +## theme + +theme , the CSS style sheet + +**theme** - Choose one of the built-in themes: default, forest, dark or neutral. To disable any pre-defined mermaid theme, use "null". +**themeCSS** - Use your own CSS. This overrides **theme**. + + "theme": "forest", + "themeCSS": ".node rect { fill: red; }" ## logLevel -Decides the amount of logging to be used. +This option decides the amount of logging to be used. -- debug: 1 -- info: 2 -- warn: 3 -- error: 4 -- fatal: 5 +- debug: 1 +- info: 2 +- warn: 3 +- error: 4 +- fatal: (**default**) 5 -**cloneCssStyles** - This options controls whether or not the css rules should be copied into the generated svg startOnLoad - This options controls whether or mermaid starts when the page loads -**arrowMarkerAbsolute** - This options controls whether or arrow markers in html code will be absolute paths or an anchor, #. This matters if you are using base tag settings. +## securityLevel +Sets the level of trust to be used on the parsed diagrams. + +- **true**: (**default**) tags in text are encoded, click functionality is disabeled +- **false**: tags in text are allowed, click functionality is enabled + +## startOnLoad + +This options controls whether or mermaid starts when the page loads +**Default value true**. + +## arrowMarkerAbsolute + +This options controls whether or arrow markers in html code will be absolute paths or +an anchor, #. This matters if you are using base tag settings. +**Default value false**. ## flowchart The object containing configurations specific for flowcharts -**htmlLabels** - Flag for setting whether or not a html tag should be used for rendering labels on the edges -**useMaxWidth** - Flag for setting whether or not a all available width should be used for the diagram. +### htmlLabels + +Flag for setting whether or not a html tag should be used for rendering labels +on the edges. +**Default value true**. + +### curve + +**Default value linear**. ## sequence The object containing configurations specific for sequence diagrams -**diagramMarginX** - margin to the right and left of the sequence diagram -**diagramMarginY** - margin to the over and under the sequence diagram -**actorMargin** - Margin between actors -**width** - Width of actor boxes -**height** - Height of actor boxes -**boxMargin** - Margin around loop boxes -**boxTextMargin** - margin around the text in loop/alt/opt boxes -**noteMargin** - margin around notes -**messageMargin** - Space between messages -**mirrorActors** - mirror actors under diagram -**bottomMarginAdj** - Depending on css styling this might need adjustment. Prolongs the edge of the diagram downwards -**useMaxWidth** - when this flag is set the height and width is set to 100% and is then scaling with the available space if not the absolute space required is used +### diagramMarginX +margin to the right and left of the sequence diagram +**Default value 50**. + +### diagramMarginY + +margin to the over and under the sequence diagram. +**Default value 10**. + +### actorMargin + +Margin between actors. +**Default value 50**. + +### width + +Width of actor boxes +**Default value 150**. + +### height + +Height of actor boxes +**Default value 65**. + +### boxMargin + +Margin around loop boxes +**Default value 10**. + +### boxTextMargin + +margin around the text in loop/alt/opt boxes +**Default value 5**. + +### noteMargin + +margin around notes. +**Default value 10**. + +### messageMargin + +Space between messages. +**Default value 35**. + +### mirrorActors + +mirror actors under diagram. +**Default value true**. + +### bottomMarginAdj + +Depending on css styling this might need adjustment. +Prolongs the edge of the diagram downwards. +**Default value 1**. + +### useMaxWidth + +when this flag is set the height and width is set to 100% and is then scaling with the +available space if not the absolute space required is used. +**Default value true**. + +### rightAngles + +This will display arrows that start and begin at the same node as right angles, rather than a curve +**Default value false**. + +### showSequenceNumbers + +This will show the node numbers +**Default value false**. ## gantt -The object containing configurations specific for gantt diagrams +The object containing configurations specific for gantt diagrams\* -**titleTopMargin** - margin top for the text over the gantt diagram -**barHeight** - the height of the bars in the graph -**barGap** - the margin between the different activities in the gantt diagram -**topPadding** - margin between title and gantt diagram and between axis and gantt diagram. -**leftPadding** - the space allocated for the section name to the left of the activities. -**gridLineStartPadding** - Vertical starting position of the grid lines -**fontSize** - font size ... -**fontFamily** - font family ... -**numberSectionStyles** - the number of alternating section styles -**axisFormatter** - formatting of the axis, this might need adjustment to match your locale and preferences +### titleTopMargin +Margin top for the text over the gantt diagram +**Default value 25**. -## parse +### barHeight -Function that parses a mermaid diagram definition. If parsing fails the parseError callback is called and an error is thrown. +The height of the bars in the graph +**Default value 20**. +### barGap -## version +The margin between the different activities in the gantt diagram. +**Default value 4**. -Function returning version information +### topPadding +Margin between title and gantt diagram and between axis and gantt diagram. +**Default value 50**. + +### leftPadding + +The space allocated for the section name to the left of the activities. +**Default value 75**. + +### gridLineStartPadding + +Vertical starting position of the grid lines. +**Default value 35**. + +### fontSize + +Font size ... +**Default value 11**. + +### fontFamily + +font family ... +**Default value '"Open-Sans", "sans-serif"'**. + +### numberSectionStyles + +The number of alternating section styles. +**Default value 4**. + +### axisFormat + +Datetime format of the axis, this might need adjustment to match your locale and preferences +**Default value '%Y-%m-%d'**. ## render -Function that renders a svg with a graph from a chart definition. Usage example below: +Function that renders an svg with a graph from a chart definition. Usage example below. -```javascript +```js mermaidAPI.initialize({ - startOnLoad: true -}) -$(function() { - var graphDefinition = 'graph TB\na-->b' - var cb = function(svgGraph) { - console.log(svgGraph) - } - mermaidAPI.render('id1',graphDefinition,cb) -}) + startOnLoad:true + }); + $(function(){ + const graphDefinition = 'graph TB\na-->b'; + const cb = function(svgGraph){ + console.log(svgGraph); + }; + mermaidAPI.render('id1',graphDefinition,cb); + }); ``` + +### Parameters + +- `id` the id of the element to be rendered +- `txt` the graph definition +- `cb` callback which is called after rendering is finished with the svg code as inparam. +- `container` selector to element in which a div with the graph temporarily will be inserted. In one is + provided a hidden div will be inserted in the body of the page instead. The element will be removed when rendering is + completed. diff --git a/gulpfile.js b/gulpfile.js index 4540d422b..b066ba106 100644 --- a/gulpfile.js +++ b/gulpfile.js @@ -1,19 +1,9 @@ import gulp from 'gulp' import jison from 'gulp-jison' import print from 'gulp-print' -// const es = require('event-stream') - -const logFile = function (es) { - return es.map(function (file, cb) { - log(file.path) - return cb() - }) -} gulp.task('jison', function () { return gulp.src('./src/**/*.jison') - // .pipe(filelog('Jison file:')) - // .pipe(logFile(es)) .pipe(print()) .pipe(jison({ 'token-stack': true })) .pipe(gulp.dest('./src/')) diff --git a/package.json b/package.json index 37e1e4510..775517e19 100644 --- a/package.json +++ b/package.json @@ -14,6 +14,7 @@ ], "scripts": { "build": "webpack --progress --colors", + "postbuild": "documentation build src/mermaidAPI.js --shallow -f md --markdown-toc false -o docs/mermaidAPI.md", "build:watch": "yarn build --watch", "minify": "minify ./dist/mermaid.js > ./dist/mermaid.min.js", "release": "yarn build -p --config webpack.config.prod.babel.js", @@ -45,6 +46,7 @@ "d3": "^5.7.0", "dagre-d3-renderer": "^0.5.8", "dagre-layout": "^0.8.8", + "documentation": "^12.0.1", "graphlibrary": "^2.2.0", "gulp-print": "^5.0.2", "he": "^1.2.0", diff --git a/src/config.js b/src/config.js index edd94edac..311450039 100644 --- a/src/config.js +++ b/src/config.js @@ -1,4 +1,6 @@ -let config +let config = { + securityLevel: 'strict' +} export const setConfig = conf => { config = conf diff --git a/src/diagrams/flowchart/flowDb.js b/src/diagrams/flowchart/flowDb.js index 3ac27f3c8..b777902c0 100644 --- a/src/diagrams/flowchart/flowDb.js +++ b/src/diagrams/flowchart/flowDb.js @@ -18,10 +18,13 @@ let funs = [] const sanitize = text => { let txt = text - txt = txt.replace(/
/g, '#br#') - txt = txt.replace(//g, '#br#') - txt = txt.replace(//g, '>') - txt = txt.replace(/#br#/g, '
') + if (config.securityLevel === 'strict') { + txt = txt.replace(/
/g, '#br#') + txt = txt.replace(//g, '#br#') + txt = txt.replace(//g, '>') + txt = txt.replace(/#br#/g, '
') + } + return txt } @@ -184,7 +187,7 @@ const setTooltip = function (ids, tooltip) { } const setClickFun = function (id, functionName) { - if (config.strictSecurity) { + if (config.securityLevel === 'strict') { return } if (typeof functionName === 'undefined') { diff --git a/src/diagrams/flowchart/parser/flow.spec.js b/src/diagrams/flowchart/parser/flow.spec.js index d352a9205..300b0ce87 100644 --- a/src/diagrams/flowchart/parser/flow.spec.js +++ b/src/diagrams/flowchart/parser/flow.spec.js @@ -1,5 +1,10 @@ import flowDb from '../flowDb' import flow from './flow' +import { setConfig } from '../../../config' + +setConfig({ + securityLevel: 'strict', +}) describe('when parsing ', function () { beforeEach(function () { diff --git a/src/diagrams/gantt/ganttDb.js b/src/diagrams/gantt/ganttDb.js index a6dadd4d7..315c41e26 100644 --- a/src/diagrams/gantt/ganttDb.js +++ b/src/diagrams/gantt/ganttDb.js @@ -455,7 +455,7 @@ export const setClass = function (ids, className) { } const setClickFun = function (id, functionName, functionArgs) { - if (config.strictSecurity) { + if (config.securityLevel === 'strict') { return } if (typeof functionName === 'undefined') { diff --git a/src/mermaidAPI.js b/src/mermaidAPI.js index 1beba6b06..0847208ab 100644 --- a/src/mermaidAPI.js +++ b/src/mermaidAPI.js @@ -1,15 +1,11 @@ /** - * --- - * title: mermaidAPI - * order: 5 - * --- - * # mermaidAPI * This is the api to be used when handling the integration with the web page instead of using the default integration * (mermaid.js). * * The core of this api is the **render** function that given a graph definitionas text renders the graph/diagram and * returns a svg element for the graph. It is is then up to the user of the API to make use of the svg, either insert it * somewhere in the page or something completely different. + * @name mermaidAPI */ import * as d3 from 'd3' import scope from 'scope-css' @@ -42,7 +38,6 @@ for (const themeName of ['default', 'forest', 'dark', 'neutral']) { } /** - * ## Configuration * These are the default options which can be overridden with the initialization call as in the example below: * ``` * mermaid.initialize({ @@ -51,6 +46,7 @@ for (const themeName of ['default', 'forest', 'dark', 'neutral']) { * } * }); * ``` + * @name Configuration */ const config = { @@ -68,175 +64,205 @@ const config = { themeCSS: undefined, /** - * logLevel , decides the amount of logging to be used. + * This option decides the amount of logging to be used. * * debug: 1 * * info: 2 * * warn: 3 * * error: 4 - * * fatal: 5 + * * fatal: (**default**) 5 */ logLevel: 5, /** - * **strictSecurity** A boolean flag setting the level of trust to be used on the parsed diagrams. When set to true the click functionality is disabled. + * Sets the level of trust to be used on the parsed diagrams. + * * **true**: (**default**) tags in text are encoded, click functionality is disabeled + * * **false**: tags in text are allowed, click functionality is enabled */ - strictSecurity: false, + securityLevel: 'strict', /** - * **startOnLoad** - This options controls whether or mermaid starts when the page loads + * This options controls whether or mermaid starts when the page loads + * **Default value true**. */ startOnLoad: true, /** - * **arrowMarkerAbsolute** - This options controls whether or arrow markers in html code will be absolute paths or + * This options controls whether or arrow markers in html code will be absolute paths or * an anchor, #. This matters if you are using base tag settings. + * **Default value false**. */ arrowMarkerAbsolute: false, /** - * ### flowchart - * *The object containing configurations specific for flowcharts* + * The object containing configurations specific for flowcharts */ flowchart: { /** - * **htmlLabels** - Flag for setting whether or not a html tag should be used for rendering labels - * on the edges + * Flag for setting whether or not a html tag should be used for rendering labels + * on the edges. + * **Default value true**. */ htmlLabels: true, + /** + * **Default value linear**. + */ curve: 'linear' }, /** - * ### sequenceDiagram * The object containing configurations specific for sequence diagrams */ sequence: { /** - * **diagramMarginX** - margin to the right and left of the sequence diagram + * margin to the right and left of the sequence diagram + * **Default value 50**. */ diagramMarginX: 50, /** - * **diagramMarginY** - margin to the over and under the sequence diagram + * margin to the over and under the sequence diagram. + * **Default value 10**. */ diagramMarginY: 10, /** - * **actorMargin** - Margin between actors + * Margin between actors. + * **Default value 50**. */ actorMargin: 50, /** - * **width** - Width of actor boxes + * Width of actor boxes + * **Default value 150**. */ width: 150, /** - * **height** - Height of actor boxes + * Height of actor boxes + * **Default value 65**. */ height: 65, /** - * **boxMargin** - Margin around loop boxes + * Margin around loop boxes + * **Default value 10**. */ boxMargin: 10, /** - * **boxTextMargin** - margin around the text in loop/alt/opt boxes + * margin around the text in loop/alt/opt boxes + * **Default value 5**. */ boxTextMargin: 5, /** - * **noteMargin** - margin around notes + * margin around notes. + * **Default value 10**. */ noteMargin: 10, /** - * **messageMargin** - Space between messages + * Space between messages. + * **Default value 35**. */ messageMargin: 35, /** - * **mirrorActors** - mirror actors under diagram + * mirror actors under diagram. + * **Default value true**. */ mirrorActors: true, /** - * **bottomMarginAdj** - Depending on css styling this might need adjustment. - * Prolongs the edge of the diagram downwards + * Depending on css styling this might need adjustment. + * Prolongs the edge of the diagram downwards. + * **Default value 1**. */ bottomMarginAdj: 1, /** - * **useMaxWidth** - when this flag is set the height and width is set to 100% and is then scaling with the - * available space if not the absolute space required is used + * when this flag is set the height and width is set to 100% and is then scaling with the + * available space if not the absolute space required is used. + * **Default value true**. */ useMaxWidth: true, /** - * **rightAngles** - this will display arrows that start and begin at the same node as right angles, rather than a curve + * This will display arrows that start and begin at the same node as right angles, rather than a curve + * **Default value false**. */ rightAngles: false, /** - * **showSequenceNumbers** - this will show the node numbers + * This will show the node numbers + * **Default value false**. */ showSequenceNumbers: false }, - /** ### gantt + /** * The object containing configurations specific for gantt diagrams* */ gantt: { /** - * **titleTopMargin** - margin top for the text over the gantt diagram + * Margin top for the text over the gantt diagram + * **Default value 25**. */ titleTopMargin: 25, /** - * **barHeight** - the height of the bars in the graph + * The height of the bars in the graph + * **Default value 20**. */ barHeight: 20, /** - * **barGap** - the margin between the different activities in the gantt diagram + * The margin between the different activities in the gantt diagram. + * **Default value 4**. */ barGap: 4, /** - * **topPadding** - margin between title and gantt diagram and between axis and gantt diagram. + * Margin between title and gantt diagram and between axis and gantt diagram. + * **Default value 50**. */ topPadding: 50, /** - * **leftPadding** - the space allocated for the section name to the left of the activities. + * The space allocated for the section name to the left of the activities. + * **Default value 75**. */ leftPadding: 75, /** - * **gridLineStartPadding** - Vertical starting position of the grid lines + * Vertical starting position of the grid lines. + * **Default value 35**. */ gridLineStartPadding: 35, /** - * **fontSize** - font size ... + * Font size ... + * **Default value 11**. */ fontSize: 11, /** - * **fontFamily** - font family ... + * font family ... + * **Default value '"Open-Sans", "sans-serif"'**. */ fontFamily: '"Open-Sans", "sans-serif"', /** - * **numberSectionStyles** - the number of alternating section styles + * The number of alternating section styles. + * **Default value 4**. */ numberSectionStyles: 4, /** - * **axisFormat** - datetime format of the axis, this might need adjustment to match your locale and preferences + * Datetime format of the axis, this might need adjustment to match your locale and preferences + * **Default value '%Y-%m-%d'**. */ axisFormat: '%Y-%m-%d' }, @@ -330,10 +356,9 @@ export const decodeEntities = function (text) { return txt } /** - * ##render * Function that renders an svg with a graph from a chart definition. Usage example below. * - * ``` + * ```js * mermaidAPI.initialize({ * startOnLoad:true * }); diff --git a/yarn.lock b/yarn.lock index 3882c896d..d477cd8d3 100644 --- a/yarn.lock +++ b/yarn.lock @@ -9,6 +9,26 @@ dependencies: "@babel/highlight" "^7.0.0" +"@babel/core@^7.1.2": + version "7.5.4" + resolved "https://registry.yarnpkg.com/@babel/core/-/core-7.5.4.tgz#4c32df7ad5a58e9ea27ad025c11276324e0b4ddd" + integrity sha512-+DaeBEpYq6b2+ZmHx3tHspC+ZRflrvLqwfv8E3hNr5LVQoyBnL8RPKSBCg+rK2W2My9PWlujBiqd0ZPsR9Q6zQ== + dependencies: + "@babel/code-frame" "^7.0.0" + "@babel/generator" "^7.5.0" + "@babel/helpers" "^7.5.4" + "@babel/parser" "^7.5.0" + "@babel/template" "^7.4.4" + "@babel/traverse" "^7.5.0" + "@babel/types" "^7.5.0" + 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/core@^7.2.2": version "7.2.2" resolved "https://registry.yarnpkg.com/@babel/core/-/core-7.2.2.tgz#07adba6dde27bb5ad8d8672f15fde3e08184a687" @@ -29,6 +49,17 @@ semver "^5.4.1" source-map "^0.5.0" +"@babel/generator@^7.1.3", "@babel/generator@^7.5.0": + version "7.5.0" + resolved "https://registry.yarnpkg.com/@babel/generator/-/generator-7.5.0.tgz#f20e4b7a91750ee8b63656073d843d2a736dca4a" + integrity sha512-1TTVrt7J9rcG5PMjvO7VEG3FrEoEJNHxumRq66GemPmzboLWtIjjcJgk8rokuAS7IiRSpgVSu5Vb9lc99iJkOA== + dependencies: + "@babel/types" "^7.5.0" + jsesc "^2.5.1" + lodash "^4.17.11" + source-map "^0.5.0" + trim-right "^1.0.1" + "@babel/generator@^7.2.2": version "7.2.2" resolved "https://registry.yarnpkg.com/@babel/generator/-/generator-7.2.2.tgz#18c816c70962640eab42fe8cae5f3947a5c65ccc" @@ -55,6 +86,14 @@ "@babel/helper-explode-assignable-expression" "^7.1.0" "@babel/types" "^7.0.0" +"@babel/helper-builder-react-jsx@^7.3.0": + version "7.3.0" + resolved "https://registry.yarnpkg.com/@babel/helper-builder-react-jsx/-/helper-builder-react-jsx-7.3.0.tgz#a1ac95a5d2b3e88ae5e54846bf462eeb81b318a4" + integrity sha512-MjA9KgwCuPEkQd9ncSXvSyJ5y+j2sICHyrI0M3L+6fnS4wMSNDc1ARXsbTfbb2cXHn17VisSnU/sHFTCxVxSMw== + dependencies: + "@babel/types" "^7.3.0" + esutils "^2.0.0" + "@babel/helper-call-delegate@^7.1.0": version "7.1.0" resolved "https://registry.yarnpkg.com/@babel/helper-call-delegate/-/helper-call-delegate-7.1.0.tgz#6a957f105f37755e8645343d3038a22e1449cc4a" @@ -64,6 +103,27 @@ "@babel/traverse" "^7.1.0" "@babel/types" "^7.0.0" +"@babel/helper-call-delegate@^7.4.4": + version "7.4.4" + resolved "https://registry.yarnpkg.com/@babel/helper-call-delegate/-/helper-call-delegate-7.4.4.tgz#87c1f8ca19ad552a736a7a27b1c1fcf8b1ff1f43" + integrity sha512-l79boDFJ8S1c5hvQvG+rc+wHw6IuH7YldmRKsYtpbawsxURu/paVy57FZMomGK22/JckepaikOkY0MoAmdyOlQ== + dependencies: + "@babel/helper-hoist-variables" "^7.4.4" + "@babel/traverse" "^7.4.4" + "@babel/types" "^7.4.4" + +"@babel/helper-create-class-features-plugin@^7.4.4", "@babel/helper-create-class-features-plugin@^7.5.0": + version "7.5.0" + resolved "https://registry.yarnpkg.com/@babel/helper-create-class-features-plugin/-/helper-create-class-features-plugin-7.5.0.tgz#02edb97f512d44ba23b3227f1bf2ed43454edac5" + integrity sha512-EAoMc3hE5vE5LNhMqDOwB1usHvmRjCDAnH8CD4PVkX9/Yr3W/tcz8xE8QvdZxfsFBDICwZnF2UTHIqslRpvxmA== + dependencies: + "@babel/helper-function-name" "^7.1.0" + "@babel/helper-member-expression-to-functions" "^7.0.0" + "@babel/helper-optimise-call-expression" "^7.0.0" + "@babel/helper-plugin-utils" "^7.0.0" + "@babel/helper-replace-supers" "^7.4.4" + "@babel/helper-split-export-declaration" "^7.4.4" + "@babel/helper-define-map@^7.1.0": version "7.1.0" resolved "https://registry.yarnpkg.com/@babel/helper-define-map/-/helper-define-map-7.1.0.tgz#3b74caec329b3c80c116290887c0dd9ae468c20c" @@ -73,6 +133,15 @@ "@babel/types" "^7.0.0" lodash "^4.17.10" +"@babel/helper-define-map@^7.4.4": + version "7.4.4" + resolved "https://registry.yarnpkg.com/@babel/helper-define-map/-/helper-define-map-7.4.4.tgz#6969d1f570b46bdc900d1eba8e5d59c48ba2c12a" + integrity sha512-IX3Ln8gLhZpSuqHJSnTNBWGDE9kdkTEWl21A/K7PQ00tseBwbqCHTvNLHSBd9M0R5rER4h5Rsvj9vw0R5SieBg== + dependencies: + "@babel/helper-function-name" "^7.1.0" + "@babel/types" "^7.4.4" + lodash "^4.17.11" + "@babel/helper-explode-assignable-expression@^7.1.0": version "7.1.0" resolved "https://registry.yarnpkg.com/@babel/helper-explode-assignable-expression/-/helper-explode-assignable-expression-7.1.0.tgz#537fa13f6f1674df745b0c00ec8fe4e99681c8f6" @@ -104,6 +173,13 @@ dependencies: "@babel/types" "^7.0.0" +"@babel/helper-hoist-variables@^7.4.4": + version "7.4.4" + resolved "https://registry.yarnpkg.com/@babel/helper-hoist-variables/-/helper-hoist-variables-7.4.4.tgz#0298b5f25c8c09c53102d52ac4a98f773eb2850a" + integrity sha512-VYk2/H/BnYbZDDg39hr3t2kKyifAm1W6zHRfhx8jGjIHpQEBv9dry7oQ2f3+J703TLu69nYdxsovl0XYfcnK4w== + dependencies: + "@babel/types" "^7.4.4" + "@babel/helper-member-expression-to-functions@^7.0.0": version "7.0.0" resolved "https://registry.yarnpkg.com/@babel/helper-member-expression-to-functions/-/helper-member-expression-to-functions-7.0.0.tgz#8cd14b0a0df7ff00f009e7d7a436945f47c7a16f" @@ -130,6 +206,18 @@ "@babel/types" "^7.2.2" lodash "^4.17.10" +"@babel/helper-module-transforms@^7.4.4": + version "7.4.4" + resolved "https://registry.yarnpkg.com/@babel/helper-module-transforms/-/helper-module-transforms-7.4.4.tgz#96115ea42a2f139e619e98ed46df6019b94414b8" + integrity sha512-3Z1yp8TVQf+B4ynN7WoHPKS8EkdTbgAEy0nU0rs/1Kw4pDgmvYH3rz3aI11KgxKCba2cn7N+tqzV1mY2HMN96w== + dependencies: + "@babel/helper-module-imports" "^7.0.0" + "@babel/helper-simple-access" "^7.1.0" + "@babel/helper-split-export-declaration" "^7.4.4" + "@babel/template" "^7.4.4" + "@babel/types" "^7.4.4" + lodash "^4.17.11" + "@babel/helper-optimise-call-expression@^7.0.0": version "7.0.0" resolved "https://registry.yarnpkg.com/@babel/helper-optimise-call-expression/-/helper-optimise-call-expression-7.0.0.tgz#a2920c5702b073c15de51106200aa8cad20497d5" @@ -149,6 +237,13 @@ dependencies: lodash "^4.17.10" +"@babel/helper-regex@^7.4.4": + version "7.4.4" + resolved "https://registry.yarnpkg.com/@babel/helper-regex/-/helper-regex-7.4.4.tgz#a47e02bc91fb259d2e6727c2a30013e3ac13c4a2" + integrity sha512-Y5nuB/kESmR3tKjU8Nkn1wMGEx1tjJX076HBMeL3XLQCu6vA/YRzuTW0bbb+qRnXvQGn+d6Rx953yffl8vEy7Q== + dependencies: + lodash "^4.17.11" + "@babel/helper-remap-async-to-generator@^7.1.0": version "7.1.0" resolved "https://registry.yarnpkg.com/@babel/helper-remap-async-to-generator/-/helper-remap-async-to-generator-7.1.0.tgz#361d80821b6f38da75bd3f0785ece20a88c5fe7f" @@ -170,6 +265,16 @@ "@babel/traverse" "^7.1.0" "@babel/types" "^7.0.0" +"@babel/helper-replace-supers@^7.4.4": + version "7.4.4" + resolved "https://registry.yarnpkg.com/@babel/helper-replace-supers/-/helper-replace-supers-7.4.4.tgz#aee41783ebe4f2d3ab3ae775e1cc6f1a90cefa27" + integrity sha512-04xGEnd+s01nY1l15EuMS1rfKktNF+1CkKmHoErDppjAAZL+IUBZpzT748x262HF7fibaQPhbvWUl5HeSt1EXg== + dependencies: + "@babel/helper-member-expression-to-functions" "^7.0.0" + "@babel/helper-optimise-call-expression" "^7.0.0" + "@babel/traverse" "^7.4.4" + "@babel/types" "^7.4.4" + "@babel/helper-simple-access@^7.1.0": version "7.1.0" resolved "https://registry.yarnpkg.com/@babel/helper-simple-access/-/helper-simple-access-7.1.0.tgz#65eeb954c8c245beaa4e859da6188f39d71e585c" @@ -185,7 +290,14 @@ dependencies: "@babel/types" "^7.0.0" -"@babel/helper-wrap-function@^7.1.0": +"@babel/helper-split-export-declaration@^7.4.4": + version "7.4.4" + resolved "https://registry.yarnpkg.com/@babel/helper-split-export-declaration/-/helper-split-export-declaration-7.4.4.tgz#ff94894a340be78f53f06af038b205c49d993677" + integrity sha512-Ro/XkzLf3JFITkW6b+hNxzZ1n5OQ80NvIUdmHspih1XAhtN3vPTuUFT4eQnela+2MaZ5ulH+iyP513KJrxbN7Q== + dependencies: + "@babel/types" "^7.4.4" + +"@babel/helper-wrap-function@^7.1.0", "@babel/helper-wrap-function@^7.2.0": version "7.2.0" resolved "https://registry.yarnpkg.com/@babel/helper-wrap-function/-/helper-wrap-function-7.2.0.tgz#c4e0012445769e2815b55296ead43a958549f6fa" integrity sha512-o9fP1BZLLSrYlxYEYyl2aS+Flun5gtjTIG8iln+XuEzQTs0PLagAGSXUcqruJwD5fM48jzIEggCKpIfWTcR7pQ== @@ -204,6 +316,15 @@ "@babel/traverse" "^7.1.5" "@babel/types" "^7.2.0" +"@babel/helpers@^7.5.4": + version "7.5.4" + resolved "https://registry.yarnpkg.com/@babel/helpers/-/helpers-7.5.4.tgz#2f00608aa10d460bde0ccf665d6dcf8477357cf0" + integrity sha512-6LJ6xwUEJP51w0sIgKyfvFMJvIb9mWAfohJp0+m6eHJigkFdcH8duZ1sfhn0ltJRzwUIT/yqqhdSfRpCpL7oow== + dependencies: + "@babel/template" "^7.4.4" + "@babel/traverse" "^7.5.0" + "@babel/types" "^7.5.0" + "@babel/highlight@^7.0.0": version "7.0.0" resolved "https://registry.yarnpkg.com/@babel/highlight/-/highlight-7.0.0.tgz#f710c38c8d458e6dd9a201afb637fcb781ce99e4" @@ -213,11 +334,21 @@ esutils "^2.0.2" js-tokens "^4.0.0" +"@babel/parser@7.1.3": + version "7.1.3" + resolved "https://registry.yarnpkg.com/@babel/parser/-/parser-7.1.3.tgz#2c92469bac2b7fbff810b67fca07bd138b48af77" + integrity sha512-gqmspPZOMW3MIRb9HlrnbZHXI1/KHTOroBwN1NcLL6pWxzqzEKGvRTq0W/PxS45OtQGbaFikSQpkS5zbnsQm2w== + "@babel/parser@^7.2.2": version "7.2.2" resolved "https://registry.yarnpkg.com/@babel/parser/-/parser-7.2.2.tgz#37ebdbc88a2e1ebc6c8dd3d35ea9436e3e39e477" integrity sha512-UNTmQ5cSLDeBGBl+s7JeowkqIHgmFAGBnLDdIzFmUNSuS5JF0XBcN59jsh/vJO/YjfsBqMxhMjoFGmNExmf0FA== +"@babel/parser@^7.4.4", "@babel/parser@^7.5.0": + version "7.5.0" + resolved "https://registry.yarnpkg.com/@babel/parser/-/parser-7.5.0.tgz#3e0713dff89ad6ae37faec3b29dcfc5c979770b7" + integrity sha512-I5nW8AhGpOXGCCNYGc+p7ExQIBxRFnS2fd/d862bNOKvmoEPjYPcfIjsfdy0ujagYOIYPczKgD9l3FsgTkAzKA== + "@babel/plugin-proposal-async-generator-functions@^7.2.0": version "7.2.0" resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-async-generator-functions/-/plugin-proposal-async-generator-functions-7.2.0.tgz#b289b306669dce4ad20b0252889a15768c9d417e" @@ -227,7 +358,73 @@ "@babel/helper-remap-async-to-generator" "^7.1.0" "@babel/plugin-syntax-async-generators" "^7.2.0" -"@babel/plugin-proposal-json-strings@^7.2.0": +"@babel/plugin-proposal-class-properties@^7.1.0": + version "7.5.0" + resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-class-properties/-/plugin-proposal-class-properties-7.5.0.tgz#5bc6a0537d286fcb4fd4e89975adbca334987007" + integrity sha512-9L/JfPCT+kShiiTTzcnBJ8cOwdKVmlC1RcCf9F0F9tERVrM4iWtWnXtjWCRqNm2la2BxO1MPArWNsU9zsSJWSQ== + dependencies: + "@babel/helper-create-class-features-plugin" "^7.5.0" + "@babel/helper-plugin-utils" "^7.0.0" + +"@babel/plugin-proposal-decorators@^7.1.2": + version "7.4.4" + resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-decorators/-/plugin-proposal-decorators-7.4.4.tgz#de9b2a1a8ab0196f378e2a82f10b6e2a36f21cc0" + integrity sha512-z7MpQz3XC/iQJWXH9y+MaWcLPNSMY9RQSthrLzak8R8hCj0fuyNk+Dzi9kfNe/JxxlWQ2g7wkABbgWjW36MTcw== + dependencies: + "@babel/helper-create-class-features-plugin" "^7.4.4" + "@babel/helper-plugin-utils" "^7.0.0" + "@babel/plugin-syntax-decorators" "^7.2.0" + +"@babel/plugin-proposal-do-expressions@^7.0.0": + version "7.5.0" + resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-do-expressions/-/plugin-proposal-do-expressions-7.5.0.tgz#ceb594d4a618545b00aa0b5cd61cad4aaaeb7a5a" + integrity sha512-xe0QQrhm+DGj6H23a6XtwkJNimy1fo71O/YVBfrfvfSl0fsq9T9dfoQBIY4QceEIdUo7u9s7OPEdsWEuizfGeg== + dependencies: + "@babel/helper-plugin-utils" "^7.0.0" + "@babel/plugin-syntax-do-expressions" "^7.2.0" + +"@babel/plugin-proposal-dynamic-import@^7.5.0": + version "7.5.0" + resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-dynamic-import/-/plugin-proposal-dynamic-import-7.5.0.tgz#e532202db4838723691b10a67b8ce509e397c506" + integrity sha512-x/iMjggsKTFHYC6g11PL7Qy58IK8H5zqfm9e6hu4z1iH2IRyAp9u9dL80zA6R76yFovETFLKz2VJIC2iIPBuFw== + dependencies: + "@babel/helper-plugin-utils" "^7.0.0" + "@babel/plugin-syntax-dynamic-import" "^7.2.0" + +"@babel/plugin-proposal-export-default-from@^7.0.0": + version "7.5.2" + resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-export-default-from/-/plugin-proposal-export-default-from-7.5.2.tgz#2c0ac2dcc36e3b2443fead2c3c5fc796fb1b5145" + integrity sha512-wr9Itk05L1/wyyZKVEmXWCdcsp/e185WUNl6AfYZeEKYaUPPvHXRDqO5K1VH7/UamYqGJowFRuCv30aDYZawsg== + dependencies: + "@babel/helper-plugin-utils" "^7.0.0" + "@babel/plugin-syntax-export-default-from" "^7.2.0" + +"@babel/plugin-proposal-export-namespace-from@^7.0.0": + version "7.5.2" + resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-export-namespace-from/-/plugin-proposal-export-namespace-from-7.5.2.tgz#ccd5ed05b06d700688ff1db01a9dd27155e0d2a0" + integrity sha512-TKUdOL07anjZEbR1iSxb5WFh810KyObdd29XLFLGo1IDsSuGrjH3ouWSbAxHNmrVKzr9X71UYl2dQ7oGGcRp0g== + dependencies: + "@babel/helper-plugin-utils" "^7.0.0" + "@babel/plugin-syntax-export-namespace-from" "^7.2.0" + +"@babel/plugin-proposal-function-bind@^7.0.0": + version "7.2.0" + resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-function-bind/-/plugin-proposal-function-bind-7.2.0.tgz#94dc2cdc505cafc4e225c0014335a01648056bf7" + integrity sha512-qOFJ/eX1Is78sywwTxDcsntLOdb5ZlHVVqUz5xznq8ldAfOVIyZzp1JE2rzHnaksZIhrqMrwIpQL/qcEprnVbw== + dependencies: + "@babel/helper-plugin-utils" "^7.0.0" + "@babel/plugin-syntax-function-bind" "^7.2.0" + +"@babel/plugin-proposal-function-sent@^7.1.0": + version "7.5.0" + resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-function-sent/-/plugin-proposal-function-sent-7.5.0.tgz#39233aa801145e7d8072077cdb2d25f781c1ffd7" + integrity sha512-JXdfiQpKoC6UgQliZkp3NX7K3MVec1o1nfTWiCCIORE5ag/QZXhL0aSD8/Y2K+hIHonSTxuJF9rh9zsB6hBi2A== + dependencies: + "@babel/helper-plugin-utils" "^7.0.0" + "@babel/helper-wrap-function" "^7.2.0" + "@babel/plugin-syntax-function-sent" "^7.2.0" + +"@babel/plugin-proposal-json-strings@^7.0.0", "@babel/plugin-proposal-json-strings@^7.2.0": version "7.2.0" resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-json-strings/-/plugin-proposal-json-strings-7.2.0.tgz#568ecc446c6148ae6b267f02551130891e29f317" integrity sha512-MAFV1CA/YVmYwZG0fBQyXhmj0BHCB5egZHCKWIFVv/XCxAeVGIHfos3SwDck4LvCllENIAg7xMKOG5kH0dzyUg== @@ -235,6 +432,30 @@ "@babel/helper-plugin-utils" "^7.0.0" "@babel/plugin-syntax-json-strings" "^7.2.0" +"@babel/plugin-proposal-logical-assignment-operators@^7.0.0": + version "7.2.0" + resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-logical-assignment-operators/-/plugin-proposal-logical-assignment-operators-7.2.0.tgz#8a5cea6c42a7c87446959e02fff5fad012c56f57" + integrity sha512-0w797xwdPXKk0m3Js74hDi0mCTZplIu93MOSfb1ZLd/XFe3abWypx1QknVk0J+ohnsjYpvjH4Gwfo2i3RicB6Q== + dependencies: + "@babel/helper-plugin-utils" "^7.0.0" + "@babel/plugin-syntax-logical-assignment-operators" "^7.2.0" + +"@babel/plugin-proposal-nullish-coalescing-operator@^7.0.0": + version "7.4.4" + resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-nullish-coalescing-operator/-/plugin-proposal-nullish-coalescing-operator-7.4.4.tgz#41c360d59481d88e0ce3a3f837df10121a769b39" + integrity sha512-Amph7Epui1Dh/xxUxS2+K22/MUi6+6JVTvy3P58tja3B6yKTSjwwx0/d83rF7551D6PVSSoplQb8GCwqec7HRw== + dependencies: + "@babel/helper-plugin-utils" "^7.0.0" + "@babel/plugin-syntax-nullish-coalescing-operator" "^7.2.0" + +"@babel/plugin-proposal-numeric-separator@^7.0.0": + version "7.2.0" + resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-numeric-separator/-/plugin-proposal-numeric-separator-7.2.0.tgz#646854daf4cd22fd6733f6076013a936310443ac" + integrity sha512-DohMOGDrZiMKS7LthjUZNNcWl8TAf5BZDwZAH4wpm55FuJTHgfqPGdibg7rZDmont/8Yg0zA03IgT6XLeP+4sg== + dependencies: + "@babel/helper-plugin-utils" "^7.0.0" + "@babel/plugin-syntax-numeric-separator" "^7.2.0" + "@babel/plugin-proposal-object-rest-spread@^7.2.0": version "7.2.0" resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-object-rest-spread/-/plugin-proposal-object-rest-spread-7.2.0.tgz#88f5fec3e7ad019014c97f7ee3c992f0adbf7fb8" @@ -243,6 +464,14 @@ "@babel/helper-plugin-utils" "^7.0.0" "@babel/plugin-syntax-object-rest-spread" "^7.2.0" +"@babel/plugin-proposal-object-rest-spread@^7.5.4": + version "7.5.4" + resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-object-rest-spread/-/plugin-proposal-object-rest-spread-7.5.4.tgz#250de35d867ce8260a31b1fdac6c4fc1baa99331" + integrity sha512-KCx0z3y7y8ipZUMAEEJOyNi11lMb/FOPUjjB113tfowgw0c16EGYos7worCKBcUAh2oG+OBnoUhsnTSoLpV9uA== + dependencies: + "@babel/helper-plugin-utils" "^7.0.0" + "@babel/plugin-syntax-object-rest-spread" "^7.2.0" + "@babel/plugin-proposal-optional-catch-binding@^7.2.0": version "7.2.0" resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-optional-catch-binding/-/plugin-proposal-optional-catch-binding-7.2.0.tgz#135d81edb68a081e55e56ec48541ece8065c38f5" @@ -251,6 +480,30 @@ "@babel/helper-plugin-utils" "^7.0.0" "@babel/plugin-syntax-optional-catch-binding" "^7.2.0" +"@babel/plugin-proposal-optional-chaining@^7.0.0": + version "7.2.0" + resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-optional-chaining/-/plugin-proposal-optional-chaining-7.2.0.tgz#ae454f4c21c6c2ce8cb2397dc332ae8b420c5441" + integrity sha512-ea3Q6edZC/55wEBVZAEz42v528VulyO0eir+7uky/sT4XRcdkWJcFi1aPtitTlwUzGnECWJNExWww1SStt+yWw== + dependencies: + "@babel/helper-plugin-utils" "^7.0.0" + "@babel/plugin-syntax-optional-chaining" "^7.2.0" + +"@babel/plugin-proposal-pipeline-operator@^7.0.0": + version "7.5.0" + resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-pipeline-operator/-/plugin-proposal-pipeline-operator-7.5.0.tgz#4100ec55ef4f6a4c2490b5f5a4f2a22dfa272c06" + integrity sha512-HFYuu/yGnkn69ligXxU0ohOVvQDsMNOUJs/c4PYLUVS6ntCYOyGmRQQaSYJARJ9rvc7/ulZKIzxd4wk91hN63A== + dependencies: + "@babel/helper-plugin-utils" "^7.0.0" + "@babel/plugin-syntax-pipeline-operator" "^7.5.0" + +"@babel/plugin-proposal-throw-expressions@^7.0.0": + version "7.2.0" + resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-throw-expressions/-/plugin-proposal-throw-expressions-7.2.0.tgz#2d9e452d370f139000e51db65d0a85dc60c64739" + integrity sha512-adsydM8DQF4i5DLNO4ySAU5VtHTPewOtNBV3u7F4lNMPADFF9bWQ+iDtUUe8+033cYCUz+bFlQdXQJmJOwoLpw== + dependencies: + "@babel/helper-plugin-utils" "^7.0.0" + "@babel/plugin-syntax-throw-expressions" "^7.2.0" + "@babel/plugin-proposal-unicode-property-regex@^7.2.0": version "7.2.0" resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-unicode-property-regex/-/plugin-proposal-unicode-property-regex-7.2.0.tgz#abe7281fe46c95ddc143a65e5358647792039520" @@ -260,6 +513,15 @@ "@babel/helper-regex" "^7.0.0" regexpu-core "^4.2.0" +"@babel/plugin-proposal-unicode-property-regex@^7.4.4": + version "7.4.4" + resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-unicode-property-regex/-/plugin-proposal-unicode-property-regex-7.4.4.tgz#501ffd9826c0b91da22690720722ac7cb1ca9c78" + integrity sha512-j1NwnOqMG9mFUOH58JTFsA/+ZYzQLUZ/drqWUqxCYLGeu2JFZL8YrNC9hBxKmWtAuOCHPcRpgv7fhap09Fb4kA== + dependencies: + "@babel/helper-plugin-utils" "^7.0.0" + "@babel/helper-regex" "^7.4.4" + regexpu-core "^4.5.4" + "@babel/plugin-syntax-async-generators@^7.2.0": version "7.2.0" resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-async-generators/-/plugin-syntax-async-generators-7.2.0.tgz#69e1f0db34c6f5a0cf7e2b3323bf159a76c8cb7f" @@ -267,6 +529,69 @@ dependencies: "@babel/helper-plugin-utils" "^7.0.0" +"@babel/plugin-syntax-decorators@^7.2.0": + version "7.2.0" + resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-decorators/-/plugin-syntax-decorators-7.2.0.tgz#c50b1b957dcc69e4b1127b65e1c33eef61570c1b" + integrity sha512-38QdqVoXdHUQfTpZo3rQwqQdWtCn5tMv4uV6r2RMfTqNBuv4ZBhz79SfaQWKTVmxHjeFv/DnXVC/+agHCklYWA== + dependencies: + "@babel/helper-plugin-utils" "^7.0.0" + +"@babel/plugin-syntax-do-expressions@^7.2.0": + version "7.2.0" + resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-do-expressions/-/plugin-syntax-do-expressions-7.2.0.tgz#f3d4b01be05ecde2892086d7cfd5f1fa1ead5a2a" + integrity sha512-/u4rJ+XEmZkIhspVuKRS+7WLvm7Dky9j9TvGK5IgId8B3FKir9MG+nQxDZ9xLn10QMBvW58dZ6ABe2juSmARjg== + dependencies: + "@babel/helper-plugin-utils" "^7.0.0" + +"@babel/plugin-syntax-dynamic-import@^7.0.0", "@babel/plugin-syntax-dynamic-import@^7.2.0": + version "7.2.0" + resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-dynamic-import/-/plugin-syntax-dynamic-import-7.2.0.tgz#69c159ffaf4998122161ad8ebc5e6d1f55df8612" + integrity sha512-mVxuJ0YroI/h/tbFTPGZR8cv6ai+STMKNBq0f8hFxsxWjl94qqhsb+wXbpNMDPU3cfR1TIsVFzU3nXyZMqyK4w== + dependencies: + "@babel/helper-plugin-utils" "^7.0.0" + +"@babel/plugin-syntax-export-default-from@^7.2.0": + version "7.2.0" + resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-export-default-from/-/plugin-syntax-export-default-from-7.2.0.tgz#edd83b7adc2e0d059e2467ca96c650ab6d2f3820" + integrity sha512-c7nqUnNST97BWPtoe+Ssi+fJukc9P9/JMZ71IOMNQWza2E+Psrd46N6AEvtw6pqK+gt7ChjXyrw4SPDO79f3Lw== + dependencies: + "@babel/helper-plugin-utils" "^7.0.0" + +"@babel/plugin-syntax-export-namespace-from@^7.2.0": + version "7.2.0" + resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-export-namespace-from/-/plugin-syntax-export-namespace-from-7.2.0.tgz#8d257838c6b3b779db52c0224443459bd27fb039" + integrity sha512-1zGA3UNch6A+A11nIzBVEaE3DDJbjfB+eLIcf0GGOh/BJr/8NxL3546MGhV/r0RhH4xADFIEso39TKCfEMlsGA== + dependencies: + "@babel/helper-plugin-utils" "^7.0.0" + +"@babel/plugin-syntax-flow@^7.2.0": + version "7.2.0" + resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-flow/-/plugin-syntax-flow-7.2.0.tgz#a765f061f803bc48f240c26f8747faf97c26bf7c" + integrity sha512-r6YMuZDWLtLlu0kqIim5o/3TNRAlWb073HwT3e2nKf9I8IIvOggPrnILYPsrrKilmn/mYEMCf/Z07w3yQJF6dg== + dependencies: + "@babel/helper-plugin-utils" "^7.0.0" + +"@babel/plugin-syntax-function-bind@^7.2.0": + version "7.2.0" + resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-function-bind/-/plugin-syntax-function-bind-7.2.0.tgz#68fe85b0c0da67125f87bf239c68051b06c66309" + integrity sha512-/WzU1lLU2l0wDfB42Wkg6tahrmtBbiD8C4H6EGSX0M4GAjzN6JiOpq/Uh8G6GSoR6lPMvhjM0MNiV6znj6y/zg== + dependencies: + "@babel/helper-plugin-utils" "^7.0.0" + +"@babel/plugin-syntax-function-sent@^7.2.0": + version "7.2.0" + resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-function-sent/-/plugin-syntax-function-sent-7.2.0.tgz#91474d4d400604e4c6cbd4d77cd6cb3b8565576c" + integrity sha512-2MOVuJ6IMAifp2cf0RFkHQaOvHpbBYyWCvgtF/WVqXhTd7Bgtov8iXVCadLXp2FN1BrI2EFl+JXuwXy0qr3KoQ== + dependencies: + "@babel/helper-plugin-utils" "^7.0.0" + +"@babel/plugin-syntax-import-meta@^7.0.0": + version "7.2.0" + resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-import-meta/-/plugin-syntax-import-meta-7.2.0.tgz#2333ef4b875553a3bcd1e93f8ebc09f5b9213a40" + integrity sha512-Hq6kFSZD7+PHkmBN8bCpHR6J8QEoCuEV/B38AIQscYjgMZkGlXB7cHNFzP5jR4RCh5545yP1ujHdmO7hAgKtBA== + dependencies: + "@babel/helper-plugin-utils" "^7.0.0" + "@babel/plugin-syntax-json-strings@^7.2.0": version "7.2.0" resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-json-strings/-/plugin-syntax-json-strings-7.2.0.tgz#72bd13f6ffe1d25938129d2a186b11fd62951470" @@ -274,6 +599,34 @@ dependencies: "@babel/helper-plugin-utils" "^7.0.0" +"@babel/plugin-syntax-jsx@^7.2.0": + version "7.2.0" + resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-jsx/-/plugin-syntax-jsx-7.2.0.tgz#0b85a3b4bc7cdf4cc4b8bf236335b907ca22e7c7" + integrity sha512-VyN4QANJkRW6lDBmENzRszvZf3/4AXaj9YR7GwrWeeN9tEBPuXbmDYVU9bYBN0D70zCWVwUy0HWq2553VCb6Hw== + dependencies: + "@babel/helper-plugin-utils" "^7.0.0" + +"@babel/plugin-syntax-logical-assignment-operators@^7.2.0": + version "7.2.0" + resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-logical-assignment-operators/-/plugin-syntax-logical-assignment-operators-7.2.0.tgz#fcab7388530e96c6f277ce494c55caa6c141fcfb" + integrity sha512-l/NKSlrnvd73/EL540t9hZhcSo4TULBrIPs9Palju8Oc/A8DXDO+xQf04whfeuZLpi8AuIvCAdpKmmubLN4EfQ== + dependencies: + "@babel/helper-plugin-utils" "^7.0.0" + +"@babel/plugin-syntax-nullish-coalescing-operator@^7.2.0": + version "7.2.0" + resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-nullish-coalescing-operator/-/plugin-syntax-nullish-coalescing-operator-7.2.0.tgz#f75083dfd5ade73e783db729bbd87e7b9efb7624" + integrity sha512-lRCEaKE+LTxDQtgbYajI04ddt6WW0WJq57xqkAZ+s11h4YgfRHhVA/Y2VhfPzzFD4qeLHWg32DMp9HooY4Kqlg== + dependencies: + "@babel/helper-plugin-utils" "^7.0.0" + +"@babel/plugin-syntax-numeric-separator@^7.2.0": + version "7.2.0" + resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-numeric-separator/-/plugin-syntax-numeric-separator-7.2.0.tgz#7470fe070c2944469a756752a69a6963135018be" + integrity sha512-DroeVNkO/BnGpL2R7+ZNZqW+E24aR/4YWxP3Qb15d6lPU8KDzF8HlIUIRCOJRn4X77/oyW4mJY+7FHfY82NLtQ== + dependencies: + "@babel/helper-plugin-utils" "^7.0.0" + "@babel/plugin-syntax-object-rest-spread@^7.2.0": version "7.2.0" resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-object-rest-spread/-/plugin-syntax-object-rest-spread-7.2.0.tgz#3b7a3e733510c57e820b9142a6579ac8b0dfad2e" @@ -288,6 +641,27 @@ dependencies: "@babel/helper-plugin-utils" "^7.0.0" +"@babel/plugin-syntax-optional-chaining@^7.2.0": + version "7.2.0" + resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-optional-chaining/-/plugin-syntax-optional-chaining-7.2.0.tgz#a59d6ae8c167e7608eaa443fda9fa8fa6bf21dff" + integrity sha512-HtGCtvp5Uq/jH/WNUPkK6b7rufnCPLLlDAFN7cmACoIjaOOiXxUt3SswU5loHqrhtqTsa/WoLQ1OQ1AGuZqaWA== + dependencies: + "@babel/helper-plugin-utils" "^7.0.0" + +"@babel/plugin-syntax-pipeline-operator@^7.5.0": + version "7.5.0" + resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-pipeline-operator/-/plugin-syntax-pipeline-operator-7.5.0.tgz#8ea7c2c22847c797748bf07752722a317079dc1e" + integrity sha512-5FVxPiMTMXWk4R7Kq9pt272nDu8VImJdaIzvXFSTcXFbgKWWaOdbic12TvUvl6cK+AE5EgnhwvxuWik4ZYYdzg== + dependencies: + "@babel/helper-plugin-utils" "^7.0.0" + +"@babel/plugin-syntax-throw-expressions@^7.2.0": + version "7.2.0" + resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-throw-expressions/-/plugin-syntax-throw-expressions-7.2.0.tgz#79001ee2afe1b174b1733cdc2fc69c9a46a0f1f8" + integrity sha512-ngwynuqu1Rx0JUS9zxSDuPgW1K8TyVZCi2hHehrL4vyjqE7RGoNHWlZsS7KQT2vw9Yjk4YLa0+KldBXTRdPLRg== + dependencies: + "@babel/helper-plugin-utils" "^7.0.0" + "@babel/plugin-transform-arrow-functions@^7.2.0": version "7.2.0" resolved "https://registry.yarnpkg.com/@babel/plugin-transform-arrow-functions/-/plugin-transform-arrow-functions-7.2.0.tgz#9aeafbe4d6ffc6563bf8f8372091628f00779550" @@ -304,6 +678,15 @@ "@babel/helper-plugin-utils" "^7.0.0" "@babel/helper-remap-async-to-generator" "^7.1.0" +"@babel/plugin-transform-async-to-generator@^7.5.0": + version "7.5.0" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-async-to-generator/-/plugin-transform-async-to-generator-7.5.0.tgz#89a3848a0166623b5bc481164b5936ab947e887e" + integrity sha512-mqvkzwIGkq0bEF1zLRRiTdjfomZJDV33AH3oQzHVGkI2VzEmXLpKKOBvEVaFZBJdN0XTyH38s9j/Kiqr68dggg== + dependencies: + "@babel/helper-module-imports" "^7.0.0" + "@babel/helper-plugin-utils" "^7.0.0" + "@babel/helper-remap-async-to-generator" "^7.1.0" + "@babel/plugin-transform-block-scoped-functions@^7.2.0": version "7.2.0" resolved "https://registry.yarnpkg.com/@babel/plugin-transform-block-scoped-functions/-/plugin-transform-block-scoped-functions-7.2.0.tgz#5d3cc11e8d5ddd752aa64c9148d0db6cb79fd190" @@ -319,6 +702,14 @@ "@babel/helper-plugin-utils" "^7.0.0" lodash "^4.17.10" +"@babel/plugin-transform-block-scoping@^7.4.4": + version "7.4.4" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-block-scoping/-/plugin-transform-block-scoping-7.4.4.tgz#c13279fabf6b916661531841a23c4b7dae29646d" + integrity sha512-jkTUyWZcTrwxu5DD4rWz6rDB5Cjdmgz6z7M7RLXOJyCUkFBawssDGcGh8M/0FTSB87avyJI1HsTwUXp9nKA1PA== + dependencies: + "@babel/helper-plugin-utils" "^7.0.0" + lodash "^4.17.11" + "@babel/plugin-transform-classes@^7.2.0": version "7.2.2" resolved "https://registry.yarnpkg.com/@babel/plugin-transform-classes/-/plugin-transform-classes-7.2.2.tgz#6c90542f210ee975aa2aa8c8b5af7fa73a126953" @@ -333,6 +724,20 @@ "@babel/helper-split-export-declaration" "^7.0.0" globals "^11.1.0" +"@babel/plugin-transform-classes@^7.4.4": + version "7.4.4" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-classes/-/plugin-transform-classes-7.4.4.tgz#0ce4094cdafd709721076d3b9c38ad31ca715eb6" + integrity sha512-/e44eFLImEGIpL9qPxSRat13I5QNRgBLu2hOQJCF7VLy/otSM/sypV1+XaIw5+502RX/+6YaSAPmldk+nhHDPw== + dependencies: + "@babel/helper-annotate-as-pure" "^7.0.0" + "@babel/helper-define-map" "^7.4.4" + "@babel/helper-function-name" "^7.1.0" + "@babel/helper-optimise-call-expression" "^7.0.0" + "@babel/helper-plugin-utils" "^7.0.0" + "@babel/helper-replace-supers" "^7.4.4" + "@babel/helper-split-export-declaration" "^7.4.4" + globals "^11.1.0" + "@babel/plugin-transform-computed-properties@^7.2.0": version "7.2.0" resolved "https://registry.yarnpkg.com/@babel/plugin-transform-computed-properties/-/plugin-transform-computed-properties-7.2.0.tgz#83a7df6a658865b1c8f641d510c6f3af220216da" @@ -347,6 +752,13 @@ dependencies: "@babel/helper-plugin-utils" "^7.0.0" +"@babel/plugin-transform-destructuring@^7.5.0": + version "7.5.0" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-destructuring/-/plugin-transform-destructuring-7.5.0.tgz#f6c09fdfe3f94516ff074fe877db7bc9ef05855a" + integrity sha512-YbYgbd3TryYYLGyC7ZR+Tq8H/+bCmwoaxHfJHupom5ECstzbRLTch6gOQbhEY9Z4hiCNHEURgq06ykFv9JZ/QQ== + dependencies: + "@babel/helper-plugin-utils" "^7.0.0" + "@babel/plugin-transform-dotall-regex@^7.2.0": version "7.2.0" resolved "https://registry.yarnpkg.com/@babel/plugin-transform-dotall-regex/-/plugin-transform-dotall-regex-7.2.0.tgz#f0aabb93d120a8ac61e925ea0ba440812dbe0e49" @@ -356,6 +768,15 @@ "@babel/helper-regex" "^7.0.0" regexpu-core "^4.1.3" +"@babel/plugin-transform-dotall-regex@^7.4.4": + version "7.4.4" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-dotall-regex/-/plugin-transform-dotall-regex-7.4.4.tgz#361a148bc951444312c69446d76ed1ea8e4450c3" + integrity sha512-P05YEhRc2h53lZDjRPk/OektxCVevFzZs2Gfjd545Wde3k+yFDbXORgl2e0xpbq8mLcKJ7Idss4fAg0zORN/zg== + dependencies: + "@babel/helper-plugin-utils" "^7.0.0" + "@babel/helper-regex" "^7.4.4" + regexpu-core "^4.5.4" + "@babel/plugin-transform-duplicate-keys@^7.2.0": version "7.2.0" resolved "https://registry.yarnpkg.com/@babel/plugin-transform-duplicate-keys/-/plugin-transform-duplicate-keys-7.2.0.tgz#d952c4930f312a4dbfff18f0b2914e60c35530b3" @@ -363,6 +784,13 @@ dependencies: "@babel/helper-plugin-utils" "^7.0.0" +"@babel/plugin-transform-duplicate-keys@^7.5.0": + version "7.5.0" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-duplicate-keys/-/plugin-transform-duplicate-keys-7.5.0.tgz#c5dbf5106bf84cdf691222c0974c12b1df931853" + integrity sha512-igcziksHizyQPlX9gfSjHkE2wmoCH3evvD2qR5w29/Dk0SMKE/eOI7f1HhBdNhR/zxJDqrgpoDTq5YSLH/XMsQ== + dependencies: + "@babel/helper-plugin-utils" "^7.0.0" + "@babel/plugin-transform-exponentiation-operator@^7.2.0": version "7.2.0" resolved "https://registry.yarnpkg.com/@babel/plugin-transform-exponentiation-operator/-/plugin-transform-exponentiation-operator-7.2.0.tgz#a63868289e5b4007f7054d46491af51435766008" @@ -371,6 +799,14 @@ "@babel/helper-builder-binary-assignment-operator-visitor" "^7.1.0" "@babel/helper-plugin-utils" "^7.0.0" +"@babel/plugin-transform-flow-strip-types@^7.0.0": + version "7.4.4" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-flow-strip-types/-/plugin-transform-flow-strip-types-7.4.4.tgz#d267a081f49a8705fc9146de0768c6b58dccd8f7" + integrity sha512-WyVedfeEIILYEaWGAUWzVNyqG4sfsNooMhXWsu/YzOvVGcsnPb5PguysjJqI3t3qiaYj0BR8T2f5njdjTGe44Q== + dependencies: + "@babel/helper-plugin-utils" "^7.0.0" + "@babel/plugin-syntax-flow" "^7.2.0" + "@babel/plugin-transform-for-of@^7.2.0": version "7.2.0" resolved "https://registry.yarnpkg.com/@babel/plugin-transform-for-of/-/plugin-transform-for-of-7.2.0.tgz#ab7468befa80f764bb03d3cb5eef8cc998e1cad9" @@ -378,6 +814,13 @@ dependencies: "@babel/helper-plugin-utils" "^7.0.0" +"@babel/plugin-transform-for-of@^7.4.4": + version "7.4.4" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-for-of/-/plugin-transform-for-of-7.4.4.tgz#0267fc735e24c808ba173866c6c4d1440fc3c556" + integrity sha512-9T/5Dlr14Z9TIEXLXkt8T1DU7F24cbhwhMNUziN3hB1AXoZcdzPcTiKGRn/6iOymDqtTKWnr/BtRKN9JwbKtdQ== + dependencies: + "@babel/helper-plugin-utils" "^7.0.0" + "@babel/plugin-transform-function-name@^7.2.0": version "7.2.0" resolved "https://registry.yarnpkg.com/@babel/plugin-transform-function-name/-/plugin-transform-function-name-7.2.0.tgz#f7930362829ff99a3174c39f0afcc024ef59731a" @@ -386,6 +829,14 @@ "@babel/helper-function-name" "^7.1.0" "@babel/helper-plugin-utils" "^7.0.0" +"@babel/plugin-transform-function-name@^7.4.4": + version "7.4.4" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-function-name/-/plugin-transform-function-name-7.4.4.tgz#e1436116abb0610c2259094848754ac5230922ad" + integrity sha512-iU9pv7U+2jC9ANQkKeNF6DrPy4GBa4NWQtl6dHB4Pb3izX2JOEvDTFarlNsBj/63ZEzNNIAMs3Qw4fNCcSOXJA== + dependencies: + "@babel/helper-function-name" "^7.1.0" + "@babel/helper-plugin-utils" "^7.0.0" + "@babel/plugin-transform-literals@^7.2.0": version "7.2.0" resolved "https://registry.yarnpkg.com/@babel/plugin-transform-literals/-/plugin-transform-literals-7.2.0.tgz#690353e81f9267dad4fd8cfd77eafa86aba53ea1" @@ -393,6 +844,13 @@ dependencies: "@babel/helper-plugin-utils" "^7.0.0" +"@babel/plugin-transform-member-expression-literals@^7.2.0": + version "7.2.0" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-member-expression-literals/-/plugin-transform-member-expression-literals-7.2.0.tgz#fa10aa5c58a2cb6afcf2c9ffa8cb4d8b3d489a2d" + integrity sha512-HiU3zKkSU6scTidmnFJ0bMX8hz5ixC93b4MHMiYebmk2lUVNGOboPsqQvx5LzooihijUoLR/v7Nc1rbBtnc7FA== + dependencies: + "@babel/helper-plugin-utils" "^7.0.0" + "@babel/plugin-transform-modules-amd@^7.2.0": version "7.2.0" resolved "https://registry.yarnpkg.com/@babel/plugin-transform-modules-amd/-/plugin-transform-modules-amd-7.2.0.tgz#82a9bce45b95441f617a24011dc89d12da7f4ee6" @@ -401,6 +859,15 @@ "@babel/helper-module-transforms" "^7.1.0" "@babel/helper-plugin-utils" "^7.0.0" +"@babel/plugin-transform-modules-amd@^7.5.0": + version "7.5.0" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-modules-amd/-/plugin-transform-modules-amd-7.5.0.tgz#ef00435d46da0a5961aa728a1d2ecff063e4fb91" + integrity sha512-n20UsQMKnWrltocZZm24cRURxQnWIvsABPJlw/fvoy9c6AgHZzoelAIzajDHAQrDpuKFFPPcFGd7ChsYuIUMpg== + dependencies: + "@babel/helper-module-transforms" "^7.1.0" + "@babel/helper-plugin-utils" "^7.0.0" + babel-plugin-dynamic-import-node "^2.3.0" + "@babel/plugin-transform-modules-commonjs@^7.2.0": version "7.2.0" resolved "https://registry.yarnpkg.com/@babel/plugin-transform-modules-commonjs/-/plugin-transform-modules-commonjs-7.2.0.tgz#c4f1933f5991d5145e9cfad1dfd848ea1727f404" @@ -410,6 +877,16 @@ "@babel/helper-plugin-utils" "^7.0.0" "@babel/helper-simple-access" "^7.1.0" +"@babel/plugin-transform-modules-commonjs@^7.5.0": + version "7.5.0" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-modules-commonjs/-/plugin-transform-modules-commonjs-7.5.0.tgz#425127e6045231360858eeaa47a71d75eded7a74" + integrity sha512-xmHq0B+ytyrWJvQTc5OWAC4ii6Dhr0s22STOoydokG51JjWhyYo5mRPXoi+ZmtHQhZZwuXNN+GG5jy5UZZJxIQ== + dependencies: + "@babel/helper-module-transforms" "^7.4.4" + "@babel/helper-plugin-utils" "^7.0.0" + "@babel/helper-simple-access" "^7.1.0" + babel-plugin-dynamic-import-node "^2.3.0" + "@babel/plugin-transform-modules-systemjs@^7.2.0": version "7.2.0" resolved "https://registry.yarnpkg.com/@babel/plugin-transform-modules-systemjs/-/plugin-transform-modules-systemjs-7.2.0.tgz#912bfe9e5ff982924c81d0937c92d24994bb9068" @@ -418,6 +895,15 @@ "@babel/helper-hoist-variables" "^7.0.0" "@babel/helper-plugin-utils" "^7.0.0" +"@babel/plugin-transform-modules-systemjs@^7.5.0": + version "7.5.0" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-modules-systemjs/-/plugin-transform-modules-systemjs-7.5.0.tgz#e75266a13ef94202db2a0620977756f51d52d249" + integrity sha512-Q2m56tyoQWmuNGxEtUyeEkm6qJYFqs4c+XyXH5RAuYxObRNz9Zgj/1g2GMnjYp2EUyEy7YTrxliGCXzecl/vJg== + dependencies: + "@babel/helper-hoist-variables" "^7.4.4" + "@babel/helper-plugin-utils" "^7.0.0" + babel-plugin-dynamic-import-node "^2.3.0" + "@babel/plugin-transform-modules-umd@^7.2.0": version "7.2.0" resolved "https://registry.yarnpkg.com/@babel/plugin-transform-modules-umd/-/plugin-transform-modules-umd-7.2.0.tgz#7678ce75169f0877b8eb2235538c074268dd01ae" @@ -426,6 +912,13 @@ "@babel/helper-module-transforms" "^7.1.0" "@babel/helper-plugin-utils" "^7.0.0" +"@babel/plugin-transform-named-capturing-groups-regex@^7.4.5": + version "7.4.5" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-named-capturing-groups-regex/-/plugin-transform-named-capturing-groups-regex-7.4.5.tgz#9d269fd28a370258199b4294736813a60bbdd106" + integrity sha512-z7+2IsWafTBbjNsOxU/Iv5CvTJlr5w4+HGu1HovKYTtgJ362f7kBcQglkfmlspKKZ3bgrbSGvLfNx++ZJgCWsg== + dependencies: + regexp-tree "^0.1.6" + "@babel/plugin-transform-new-target@^7.0.0": version "7.0.0" resolved "https://registry.yarnpkg.com/@babel/plugin-transform-new-target/-/plugin-transform-new-target-7.0.0.tgz#ae8fbd89517fa7892d20e6564e641e8770c3aa4a" @@ -433,6 +926,13 @@ dependencies: "@babel/helper-plugin-utils" "^7.0.0" +"@babel/plugin-transform-new-target@^7.4.4": + version "7.4.4" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-new-target/-/plugin-transform-new-target-7.4.4.tgz#18d120438b0cc9ee95a47f2c72bc9768fbed60a5" + integrity sha512-r1z3T2DNGQwwe2vPGZMBNjioT2scgWzK9BCnDEh+46z8EEwXBq24uRzd65I7pjtugzPSj921aM15RpESgzsSuA== + dependencies: + "@babel/helper-plugin-utils" "^7.0.0" + "@babel/plugin-transform-object-super@^7.2.0": version "7.2.0" resolved "https://registry.yarnpkg.com/@babel/plugin-transform-object-super/-/plugin-transform-object-super-7.2.0.tgz#b35d4c10f56bab5d650047dad0f1d8e8814b6598" @@ -450,6 +950,54 @@ "@babel/helper-get-function-arity" "^7.0.0" "@babel/helper-plugin-utils" "^7.0.0" +"@babel/plugin-transform-parameters@^7.4.4": + version "7.4.4" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-parameters/-/plugin-transform-parameters-7.4.4.tgz#7556cf03f318bd2719fe4c922d2d808be5571e16" + integrity sha512-oMh5DUO1V63nZcu/ZVLQFqiihBGo4OpxJxR1otF50GMeCLiRx5nUdtokd+u9SuVJrvvuIh9OosRFPP4pIPnwmw== + dependencies: + "@babel/helper-call-delegate" "^7.4.4" + "@babel/helper-get-function-arity" "^7.0.0" + "@babel/helper-plugin-utils" "^7.0.0" + +"@babel/plugin-transform-property-literals@^7.2.0": + version "7.2.0" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-property-literals/-/plugin-transform-property-literals-7.2.0.tgz#03e33f653f5b25c4eb572c98b9485055b389e905" + integrity sha512-9q7Dbk4RhgcLp8ebduOpCbtjh7C0itoLYHXd9ueASKAG/is5PQtMR5VJGka9NKqGhYEGn5ITahd4h9QeBMylWQ== + dependencies: + "@babel/helper-plugin-utils" "^7.0.0" + +"@babel/plugin-transform-react-display-name@^7.0.0": + version "7.2.0" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-react-display-name/-/plugin-transform-react-display-name-7.2.0.tgz#ebfaed87834ce8dc4279609a4f0c324c156e3eb0" + integrity sha512-Htf/tPa5haZvRMiNSQSFifK12gtr/8vwfr+A9y69uF0QcU77AVu4K7MiHEkTxF7lQoHOL0F9ErqgfNEAKgXj7A== + dependencies: + "@babel/helper-plugin-utils" "^7.0.0" + +"@babel/plugin-transform-react-jsx-self@^7.0.0": + version "7.2.0" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-react-jsx-self/-/plugin-transform-react-jsx-self-7.2.0.tgz#461e21ad9478f1031dd5e276108d027f1b5240ba" + integrity sha512-v6S5L/myicZEy+jr6ielB0OR8h+EH/1QFx/YJ7c7Ua+7lqsjj/vW6fD5FR9hB/6y7mGbfT4vAURn3xqBxsUcdg== + dependencies: + "@babel/helper-plugin-utils" "^7.0.0" + "@babel/plugin-syntax-jsx" "^7.2.0" + +"@babel/plugin-transform-react-jsx-source@^7.0.0": + version "7.5.0" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-react-jsx-source/-/plugin-transform-react-jsx-source-7.5.0.tgz#583b10c49cf057e237085bcbd8cc960bd83bd96b" + integrity sha512-58Q+Jsy4IDCZx7kqEZuSDdam/1oW8OdDX8f+Loo6xyxdfg1yF0GE2XNJQSTZCaMol93+FBzpWiPEwtbMloAcPg== + dependencies: + "@babel/helper-plugin-utils" "^7.0.0" + "@babel/plugin-syntax-jsx" "^7.2.0" + +"@babel/plugin-transform-react-jsx@^7.0.0": + version "7.3.0" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-react-jsx/-/plugin-transform-react-jsx-7.3.0.tgz#f2cab99026631c767e2745a5368b331cfe8f5290" + integrity sha512-a/+aRb7R06WcKvQLOu4/TpjKOdvVEKRLWFpKcNuHhiREPgGRB4TQJxq07+EZLS8LFVYpfq1a5lDUnuMdcCpBKg== + dependencies: + "@babel/helper-builder-react-jsx" "^7.3.0" + "@babel/helper-plugin-utils" "^7.0.0" + "@babel/plugin-syntax-jsx" "^7.2.0" + "@babel/plugin-transform-regenerator@^7.0.0": version "7.0.0" resolved "https://registry.yarnpkg.com/@babel/plugin-transform-regenerator/-/plugin-transform-regenerator-7.0.0.tgz#5b41686b4ed40bef874d7ed6a84bdd849c13e0c1" @@ -457,6 +1005,20 @@ dependencies: regenerator-transform "^0.13.3" +"@babel/plugin-transform-regenerator@^7.4.5": + version "7.4.5" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-regenerator/-/plugin-transform-regenerator-7.4.5.tgz#629dc82512c55cee01341fb27bdfcb210354680f" + integrity sha512-gBKRh5qAaCWntnd09S8QC7r3auLCqq5DI6O0DlfoyDjslSBVqBibrMdsqO+Uhmx3+BlOmE/Kw1HFxmGbv0N9dA== + dependencies: + regenerator-transform "^0.14.0" + +"@babel/plugin-transform-reserved-words@^7.2.0": + version "7.2.0" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-reserved-words/-/plugin-transform-reserved-words-7.2.0.tgz#4792af87c998a49367597d07fedf02636d2e1634" + integrity sha512-fz43fqW8E1tAB3DKF19/vxbpib1fuyCwSPE418ge5ZxILnBhWyhtPgz8eh1RCGGJlwvksHkyxMxh0eenFi+kFw== + dependencies: + "@babel/helper-plugin-utils" "^7.0.0" + "@babel/plugin-transform-shorthand-properties@^7.2.0": version "7.2.0" resolved "https://registry.yarnpkg.com/@babel/plugin-transform-shorthand-properties/-/plugin-transform-shorthand-properties-7.2.0.tgz#6333aee2f8d6ee7e28615457298934a3b46198f0" @@ -487,6 +1049,14 @@ "@babel/helper-annotate-as-pure" "^7.0.0" "@babel/helper-plugin-utils" "^7.0.0" +"@babel/plugin-transform-template-literals@^7.4.4": + version "7.4.4" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-template-literals/-/plugin-transform-template-literals-7.4.4.tgz#9d28fea7bbce637fb7612a0750989d8321d4bcb0" + integrity sha512-mQrEC4TWkhLN0z8ygIvEL9ZEToPhG5K7KDW3pzGqOfIGZ28Jb0POUkeWcoz8HnHvhFy6dwAT1j8OzqN8s804+g== + dependencies: + "@babel/helper-annotate-as-pure" "^7.0.0" + "@babel/helper-plugin-utils" "^7.0.0" + "@babel/plugin-transform-typeof-symbol@^7.2.0": version "7.2.0" resolved "https://registry.yarnpkg.com/@babel/plugin-transform-typeof-symbol/-/plugin-transform-typeof-symbol-7.2.0.tgz#117d2bcec2fbf64b4b59d1f9819894682d29f2b2" @@ -503,6 +1073,71 @@ "@babel/helper-regex" "^7.0.0" regexpu-core "^4.1.3" +"@babel/plugin-transform-unicode-regex@^7.4.4": + version "7.4.4" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-unicode-regex/-/plugin-transform-unicode-regex-7.4.4.tgz#ab4634bb4f14d36728bf5978322b35587787970f" + integrity sha512-il+/XdNw01i93+M9J9u4T7/e/Ue/vWfNZE4IRUQjplu2Mqb/AFTDimkw2tdEdSH50wuQXZAbXSql0UphQke+vA== + dependencies: + "@babel/helper-plugin-utils" "^7.0.0" + "@babel/helper-regex" "^7.4.4" + regexpu-core "^4.5.4" + +"@babel/preset-env@^7.1.0": + version "7.5.4" + resolved "https://registry.yarnpkg.com/@babel/preset-env/-/preset-env-7.5.4.tgz#64bc15041a3cbb0798930319917e70fcca57713d" + integrity sha512-hFnFnouyRNiH1rL8YkX1ANCNAUVC8Djwdqfev8i1415tnAG+7hlA5zhZ0Q/3Q5gkop4HioIPbCEWAalqcbxRoQ== + dependencies: + "@babel/helper-module-imports" "^7.0.0" + "@babel/helper-plugin-utils" "^7.0.0" + "@babel/plugin-proposal-async-generator-functions" "^7.2.0" + "@babel/plugin-proposal-dynamic-import" "^7.5.0" + "@babel/plugin-proposal-json-strings" "^7.2.0" + "@babel/plugin-proposal-object-rest-spread" "^7.5.4" + "@babel/plugin-proposal-optional-catch-binding" "^7.2.0" + "@babel/plugin-proposal-unicode-property-regex" "^7.4.4" + "@babel/plugin-syntax-async-generators" "^7.2.0" + "@babel/plugin-syntax-dynamic-import" "^7.2.0" + "@babel/plugin-syntax-json-strings" "^7.2.0" + "@babel/plugin-syntax-object-rest-spread" "^7.2.0" + "@babel/plugin-syntax-optional-catch-binding" "^7.2.0" + "@babel/plugin-transform-arrow-functions" "^7.2.0" + "@babel/plugin-transform-async-to-generator" "^7.5.0" + "@babel/plugin-transform-block-scoped-functions" "^7.2.0" + "@babel/plugin-transform-block-scoping" "^7.4.4" + "@babel/plugin-transform-classes" "^7.4.4" + "@babel/plugin-transform-computed-properties" "^7.2.0" + "@babel/plugin-transform-destructuring" "^7.5.0" + "@babel/plugin-transform-dotall-regex" "^7.4.4" + "@babel/plugin-transform-duplicate-keys" "^7.5.0" + "@babel/plugin-transform-exponentiation-operator" "^7.2.0" + "@babel/plugin-transform-for-of" "^7.4.4" + "@babel/plugin-transform-function-name" "^7.4.4" + "@babel/plugin-transform-literals" "^7.2.0" + "@babel/plugin-transform-member-expression-literals" "^7.2.0" + "@babel/plugin-transform-modules-amd" "^7.5.0" + "@babel/plugin-transform-modules-commonjs" "^7.5.0" + "@babel/plugin-transform-modules-systemjs" "^7.5.0" + "@babel/plugin-transform-modules-umd" "^7.2.0" + "@babel/plugin-transform-named-capturing-groups-regex" "^7.4.5" + "@babel/plugin-transform-new-target" "^7.4.4" + "@babel/plugin-transform-object-super" "^7.2.0" + "@babel/plugin-transform-parameters" "^7.4.4" + "@babel/plugin-transform-property-literals" "^7.2.0" + "@babel/plugin-transform-regenerator" "^7.4.5" + "@babel/plugin-transform-reserved-words" "^7.2.0" + "@babel/plugin-transform-shorthand-properties" "^7.2.0" + "@babel/plugin-transform-spread" "^7.2.0" + "@babel/plugin-transform-sticky-regex" "^7.2.0" + "@babel/plugin-transform-template-literals" "^7.4.4" + "@babel/plugin-transform-typeof-symbol" "^7.2.0" + "@babel/plugin-transform-unicode-regex" "^7.4.4" + "@babel/types" "^7.5.0" + browserslist "^4.6.0" + core-js-compat "^3.1.1" + invariant "^2.2.2" + js-levenshtein "^1.1.3" + semver "^5.5.0" + "@babel/preset-env@^7.2.0": version "7.2.0" resolved "https://registry.yarnpkg.com/@babel/preset-env/-/preset-env-7.2.0.tgz#a5030e7e4306af5a295dd5d7c78dc5464af3fee2" @@ -550,6 +1185,30 @@ js-levenshtein "^1.1.3" semver "^5.3.0" +"@babel/preset-flow@^7.0.0": + version "7.0.0" + resolved "https://registry.yarnpkg.com/@babel/preset-flow/-/preset-flow-7.0.0.tgz#afd764835d9535ec63d8c7d4caf1c06457263da2" + integrity sha512-bJOHrYOPqJZCkPVbG1Lot2r5OSsB+iUOaxiHdlOeB1yPWS6evswVHwvkDLZ54WTaTRIk89ds0iHmGZSnxlPejQ== + dependencies: + "@babel/helper-plugin-utils" "^7.0.0" + "@babel/plugin-transform-flow-strip-types" "^7.0.0" + +"@babel/preset-react@^7.0.0": + version "7.0.0" + resolved "https://registry.yarnpkg.com/@babel/preset-react/-/preset-react-7.0.0.tgz#e86b4b3d99433c7b3e9e91747e2653958bc6b3c0" + integrity sha512-oayxyPS4Zj+hF6Et11BwuBkmpgT/zMxyuZgFrMeZID6Hdh3dGlk4sHCAhdBCpuCKW2ppBfl2uCCetlrUIJRY3w== + dependencies: + "@babel/helper-plugin-utils" "^7.0.0" + "@babel/plugin-transform-react-display-name" "^7.0.0" + "@babel/plugin-transform-react-jsx" "^7.0.0" + "@babel/plugin-transform-react-jsx-self" "^7.0.0" + "@babel/plugin-transform-react-jsx-source" "^7.0.0" + +"@babel/preset-stage-0@^7.0.0": + version "7.0.0" + resolved "https://registry.yarnpkg.com/@babel/preset-stage-0/-/preset-stage-0-7.0.0.tgz#999aaec79ee8f0a763042c68c06539c97c6e0646" + integrity sha512-FBMd0IiARPtH5aaOFUVki6evHiJQiY0pFy7fizyRF7dtwc+el3nwpzvhb9qBNzceG1OIJModG1xpE0DDFjPXwA== + "@babel/register@^7.0.0": version "7.0.0" resolved "https://registry.yarnpkg.com/@babel/register/-/register-7.0.0.tgz#fa634bae1bfa429f60615b754fc1f1d745edd827" @@ -572,6 +1231,15 @@ "@babel/parser" "^7.2.2" "@babel/types" "^7.2.2" +"@babel/template@^7.4.4": + version "7.4.4" + resolved "https://registry.yarnpkg.com/@babel/template/-/template-7.4.4.tgz#f4b88d1225689a08f5bc3a17483545be9e4ed237" + integrity sha512-CiGzLN9KgAvgZsnivND7rkA+AeJ9JB0ciPOD4U59GKbQP2iQl+olF1l76kJOupqidozfZ32ghwBEJDhnk9MEcw== + dependencies: + "@babel/code-frame" "^7.0.0" + "@babel/parser" "^7.4.4" + "@babel/types" "^7.4.4" + "@babel/traverse@^7.1.0", "@babel/traverse@^7.1.5", "@babel/traverse@^7.2.2": version "7.2.2" resolved "https://registry.yarnpkg.com/@babel/traverse/-/traverse-7.2.2.tgz#961039de1f9bcb946d807efe2dba9c92e859d188" @@ -587,6 +1255,21 @@ globals "^11.1.0" lodash "^4.17.10" +"@babel/traverse@^7.1.4", "@babel/traverse@^7.4.4", "@babel/traverse@^7.5.0": + version "7.5.0" + resolved "https://registry.yarnpkg.com/@babel/traverse/-/traverse-7.5.0.tgz#4216d6586854ef5c3c4592dab56ec7eb78485485" + integrity sha512-SnA9aLbyOCcnnbQEGwdfBggnc142h/rbqqsXcaATj2hZcegCl903pUD/lfpsNBlBSuWow/YDfRyJuWi2EPR5cg== + dependencies: + "@babel/code-frame" "^7.0.0" + "@babel/generator" "^7.5.0" + "@babel/helper-function-name" "^7.1.0" + "@babel/helper-split-export-declaration" "^7.4.4" + "@babel/parser" "^7.5.0" + "@babel/types" "^7.5.0" + debug "^4.1.0" + globals "^11.1.0" + lodash "^4.17.11" + "@babel/types@^7.0.0", "@babel/types@^7.2.0", "@babel/types@^7.2.2": version "7.2.2" resolved "https://registry.yarnpkg.com/@babel/types/-/types-7.2.2.tgz#44e10fc24e33af524488b716cdaee5360ea8ed1e" @@ -596,6 +1279,15 @@ lodash "^4.17.10" to-fast-properties "^2.0.0" +"@babel/types@^7.1.3", "@babel/types@^7.3.0", "@babel/types@^7.4.4", "@babel/types@^7.5.0": + version "7.5.0" + resolved "https://registry.yarnpkg.com/@babel/types/-/types-7.5.0.tgz#e47d43840c2e7f9105bc4d3a2c371b4d0c7832ab" + integrity sha512-UFpDVqRABKsW01bvw7/wSUe56uy6RXM5+VJibVVAybDGxEW25jdwiFJEf7ASvSaC7sN7rbE/l3cLp2izav+CtQ== + dependencies: + esutils "^2.0.2" + lodash "^4.17.11" + to-fast-properties "^2.0.0" + "@types/events@*": version "3.0.0" resolved "https://registry.yarnpkg.com/@types%2fevents/-/events-3.0.0.tgz#2862f3f58a9a7f7c3e78d79f130dd4d71c25c2a7" @@ -620,6 +1312,11 @@ resolved "https://registry.yarnpkg.com/@types%2fnode/-/node-12.0.4.tgz#46832183115c904410c275e34cf9403992999c32" integrity sha512-j8YL2C0fXq7IONwl/Ud5Kt0PeXw22zGERt+HSSnwbKOJVsAGkEz3sFCYwaF9IOuoG1HOtE0vKCj6sXF7Q0+Vaw== +"@types/unist@^2.0.0", "@types/unist@^2.0.2": + version "2.0.3" + resolved "https://registry.yarnpkg.com/@types/unist/-/unist-2.0.3.tgz#9c088679876f374eb5983f150d4787aa6fb32d7e" + integrity sha512-FvUupuM3rlRsRtCN+fDudtmytGO6iHJuuRKS1Ss0pG5z8oX0diNEw94UEL7hgDbpN94rgaK5R7sWm6RrSkZuAQ== + "@webassemblyjs/ast@1.7.11": version "1.7.11" resolved "https://registry.yarnpkg.com/@webassemblyjs/ast/-/ast-1.7.11.tgz#b988582cafbb2b095e8b556526f30c90d057cace" @@ -778,6 +1475,14 @@ JSONSelect@0.4.0: resolved "https://registry.yarnpkg.com/JSONSelect/-/JSONSelect-0.4.0.tgz#a08edcc67eb3fcbe99ed630855344a0cf282bb8d" integrity sha1-oI7cxn6z/L6Z7WMIVTRKDPKCu40= +JSONStream@^1.0.3: + version "1.3.5" + resolved "https://registry.yarnpkg.com/JSONStream/-/JSONStream-1.3.5.tgz#3208c1f08d3a4d99261ab64f92302bc15e111ca0" + integrity sha512-E+iruNOY8VV9s4JEbe1aNEm6MiszPRr/UfcHMz0TQh1BXSxHK+ASV1R6W4HpjBhSeS+54PIsAMCBmwD06LLsqQ== + dependencies: + jsonparse "^1.2.0" + through ">=2.2.7 <3" + "JSV@>= 4.0.x": version "4.0.2" resolved "https://registry.yarnpkg.com/JSV/-/JSV-4.0.2.tgz#d077f6825571f82132f9dffaed587b4029feff57" @@ -826,7 +1531,7 @@ acorn-walk@^6.0.1: resolved "https://registry.yarnpkg.com/acorn-walk/-/acorn-walk-6.1.1.tgz#d363b66f5fac5f018ff9c3a1e7b6f8e310cc3913" integrity sha512-OtUw6JUTgxA2QoqqmrmQ7F2NYqiBPi/L2jqHyFtllhOUvXYQXf0Z1CYUinIfyT4bTCGmrA7gX9FvHA81uzCoVw== -acorn@^5.0.0, acorn@^5.5.3, acorn@^5.6.2: +acorn@^5.0.0, acorn@^5.2.1, acorn@^5.5.3, acorn@^5.6.2: version "5.7.3" resolved "https://registry.yarnpkg.com/acorn/-/acorn-5.7.3.tgz#67aa231bf8812974b85235a96771eb6bd07ea279" integrity sha512-T/zvzYRfbVojPWahDsE5evJdHb3oJoQfFbsrKM7w5Zcs++Tr257tia3BmMP8XYVjp1S9RZXQMh7gao96BlqZOw== @@ -906,7 +1611,7 @@ ansi-gray@^0.1.1: dependencies: ansi-wrap "0.1.0" -ansi-html@0.0.7: +ansi-html@0.0.7, ansi-html@^0.0.7: version "0.0.7" resolved "https://registry.yarnpkg.com/ansi-html/-/ansi-html-0.0.7.tgz#813584021962a9e9e6fd039f940d12f56ca7859e" integrity sha1-gTWEAhliqenm/QOflA0S9WynhZ4= @@ -921,7 +1626,12 @@ ansi-regex@^3.0.0: resolved "https://registry.yarnpkg.com/ansi-regex/-/ansi-regex-3.0.0.tgz#ed0317c322064f79466c02966bddb605ab37d998" integrity sha1-7QMXwyIGT3lGbAKWa922Bas32Zg= -ansi-styles@^2.2.1: +ansi-regex@^4.1.0: + version "4.1.0" + resolved "https://registry.yarnpkg.com/ansi-regex/-/ansi-regex-4.1.0.tgz#8b9f8f08cf1acb843756a839ca8c7e3168c51997" + integrity sha512-1apePfXM1UOSqw0o9IiFAovVz9M5S1Dg+4TrDwfMewQ6p/rmMueb7tWZjQ1rx4Loy1ArBggoqGpfqqdI4rondg== + +ansi-styles@^2.0.1, ansi-styles@^2.2.1: version "2.2.1" resolved "https://registry.yarnpkg.com/ansi-styles/-/ansi-styles-2.2.1.tgz#b432dd3358b634cf75e1e4664368240533c1ddbe" integrity sha1-tDLdM1i2NM914eRmQ2gkBTPB3b4= @@ -1318,6 +2028,13 @@ babel-messages@^6.23.0: dependencies: babel-runtime "^6.22.0" +babel-plugin-dynamic-import-node@^2.3.0: + version "2.3.0" + resolved "https://registry.yarnpkg.com/babel-plugin-dynamic-import-node/-/babel-plugin-dynamic-import-node-2.3.0.tgz#f00f507bdaa3c3e3ff6e7e5e98d90a7acab96f7f" + integrity sha512-o6qFkpeQEBxcqt0XYlWzAVxNCSCZdUgcR8IRlhD/8DylxjjO4foPcvTW0GGKa/cVt3rvxZ7o5ippJ+/0nvLhlQ== + dependencies: + object.assign "^4.1.0" + babel-plugin-istanbul@^4.1.6: version "4.1.6" resolved "https://registry.yarnpkg.com/babel-plugin-istanbul/-/babel-plugin-istanbul-4.1.6.tgz#36c59b2192efce81c5b378321b74175add1c9a45" @@ -1411,6 +2128,11 @@ babel-types@^6.0.0, babel-types@^6.18.0, babel-types@^6.26.0: lodash "^4.17.4" to-fast-properties "^1.0.3" +babelify@^10.0.0: + version "10.0.0" + resolved "https://registry.yarnpkg.com/babelify/-/babelify-10.0.0.tgz#fe73b1a22583f06680d8d072e25a1e0d1d1d7fb5" + integrity sha512-X40FaxyH7t3X+JFAKvb1H9wooWKLRCi8pg3m8poqtdZaIng+bjzp9RvKQCvRjF9isHiPkXspbbXT/zwXLtwgwg== + babylon@^6.18.0: version "6.18.0" resolved "https://registry.yarnpkg.com/babylon/-/babylon-6.18.0.tgz#af2f3b88fa6f5c1e4c634d1a0f8eac4f55b395e3" @@ -1431,6 +2153,11 @@ bach@^1.0.0: async-settle "^1.0.0" now-and-later "^2.0.0" +bail@^1.0.0: + version "1.0.4" + resolved "https://registry.yarnpkg.com/bail/-/bail-1.0.4.tgz#7181b66d508aa3055d3f6c13f0a0c720641dde9b" + integrity sha512-S8vuDB4w6YpRhICUDET3guPlQpaJl7od94tpZ0Fvnyp+MKW/HyDTcRDck+29C9g+d/qQHnddRH3+94kZdrW0Ww== + balanced-match@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/balanced-match/-/balanced-match-1.0.0.tgz#89b4d199ab2bee49de164ea02b89ce462d71b767" @@ -1514,6 +2241,16 @@ body-parser@1.19.0: raw-body "2.4.0" type-is "~1.6.17" +body@^5.1.0: + version "5.1.0" + resolved "https://registry.yarnpkg.com/body/-/body-5.1.0.tgz#e4ba0ce410a46936323367609ecb4e6553125069" + integrity sha1-5LoM5BCkaTYyM2dgnstOZVMSUGk= + dependencies: + continuable-cache "^0.3.1" + error "^7.0.0" + raw-body "~1.1.0" + safe-json-parse "~1.0.1" + bonjour@^3.5.0: version "3.5.0" resolved "https://registry.yarnpkg.com/bonjour/-/bonjour-3.5.0.tgz#8e890a183d8ee9a2393b3844c691a42bcf7bc9f5" @@ -1587,7 +2324,7 @@ browser-process-hrtime@^0.1.2: resolved "https://registry.yarnpkg.com/browser-process-hrtime/-/browser-process-hrtime-0.1.3.tgz#616f00faef1df7ec1b5bf9cfe2bdc3170f26c7b4" integrity sha512-bRFnI4NnjO6cnyLmOV/7PVoDEMJChlcfN0z4s1YMBY989/SvlfMI1lgCnkFUs53e9gQF+w7qu7XdllSTiSl8Aw== -browser-resolve@^1.11.3: +browser-resolve@^1.11.3, browser-resolve@^1.7.0: version "1.11.3" resolved "https://registry.yarnpkg.com/browser-resolve/-/browser-resolve-1.11.3.tgz#9b7cbb3d0f510e4cb86bdbd796124d28b5890af6" integrity sha512-exDi1BYWB/6raKHmDTCicQfTkqwN5fioMFV4j8BsfMU4R2DK/QfZfK7kOVkmWCNANf0snkBzqGqAJBao9gZMdQ== @@ -1662,6 +2399,15 @@ browserslist@^4.3.4: electron-to-chromium "^1.3.92" node-releases "^1.1.1" +browserslist@^4.6.0, browserslist@^4.6.2: + version "4.6.6" + resolved "https://registry.yarnpkg.com/browserslist/-/browserslist-4.6.6.tgz#6e4bf467cde520bc9dbdf3747dafa03531cec453" + integrity sha512-D2Nk3W9JL9Fp/gIcWei8LrERCS+eXu9AM5cfXA8WEZ84lFks+ARnZ0q/R69m2SV3Wjma83QDDPxsNKXUwdIsyA== + dependencies: + caniuse-lite "^1.0.30000984" + electron-to-chromium "^1.3.191" + node-releases "^1.1.25" + bser@^2.0.0: version "2.0.0" resolved "https://registry.yarnpkg.com/bser/-/bser-2.0.0.tgz#9ac78d3ed5d915804fd87acb158bc797147a1719" @@ -1684,6 +2430,11 @@ buffer-indexof@^1.0.0: resolved "https://registry.yarnpkg.com/buffer-indexof/-/buffer-indexof-1.1.1.tgz#52fabcc6a606d1a00302802648ef68f639da268c" integrity sha512-4/rOEg86jivtPTeOUUT61jJO1Ya1TrR/OkqCSZDyq84WJh3LuuiphBYJN+fm5xufIk4XAFcEwte/8WzC8If/1g== +buffer-shims@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/buffer-shims/-/buffer-shims-1.0.0.tgz#9978ce317388c649ad8793028c3477ef044a8b51" + integrity sha1-mXjOMXOIxkmth5MCjDR37wRKi1E= + buffer-xor@^1.0.3: version "1.0.3" resolved "https://registry.yarnpkg.com/buffer-xor/-/buffer-xor-1.0.3.tgz#26e61ed1422fb70dd42e6e36729ed51d855fe8d9" @@ -1708,6 +2459,11 @@ builtin-status-codes@^3.0.0: resolved "https://registry.yarnpkg.com/builtin-status-codes/-/builtin-status-codes-3.0.0.tgz#85982878e21b98e1c66425e03d0174788f569ee8" integrity sha1-hZgoeOIbmOHGZCXgPQF0eI9Wnug= +bytes@1: + version "1.0.0" + resolved "https://registry.yarnpkg.com/bytes/-/bytes-1.0.0.tgz#3569ede8ba34315fab99c3e92cb04c7220de1fa8" + integrity sha1-NWnt6Lo0MV+rmcPpLLBMciDeH6g= + bytes@3.0.0: version "3.0.0" resolved "https://registry.yarnpkg.com/bytes/-/bytes-3.0.0.tgz#d32815404d689699f85a4ea4fa8755dd13a96048" @@ -1753,6 +2509,11 @@ cache-base@^1.0.1: union-value "^1.0.0" unset-value "^1.0.0" +cached-path-relative@^1.0.0: + version "1.0.2" + resolved "https://registry.yarnpkg.com/cached-path-relative/-/cached-path-relative-1.0.2.tgz#a13df4196d26776220cc3356eb147a52dba2c6db" + integrity sha512-5r2GqsoEb4qMTTN9J+WzXfjov+hjxT+j3u5K+kIVNIwAd99DLCJE9pBIMP1qVeybV6JiijL385Oz0DcYxfbOIg== + caller-callsite@^2.0.0: version "2.0.0" resolved "https://registry.yarnpkg.com/caller-callsite/-/caller-callsite-2.0.0.tgz#847e0fce0a223750a9a027c54b33731ad3154134" @@ -1825,6 +2586,11 @@ caniuse-lite@^1.0.30000921: resolved "https://registry.yarnpkg.com/caniuse-lite/-/caniuse-lite-1.0.30000921.tgz#7a607c1623444b22351d834e093aedda3c42fbe8" integrity sha512-Bu09ciy0lMWLgpYC77I0YGuI8eFRBPPzaSOYJK1jTI64txCphYCqnWbxJYjHABYVt/TYX/p3jNjLBR87u1Bfpw== +caniuse-lite@^1.0.30000984: + version "1.0.30000984" + resolved "https://registry.yarnpkg.com/caniuse-lite/-/caniuse-lite-1.0.30000984.tgz#dc96c3c469e9bcfc6ad5bdd24c77ec918ea76fe0" + integrity sha512-n5tKOjMaZ1fksIpQbjERuqCyfgec/m9pferkFQbLmWtqLUdmt12hNhjSwsmPdqeiG2NkITOQhr1VYIwWSAceiA== + capture-exit@^1.2.0: version "1.2.0" resolved "https://registry.yarnpkg.com/capture-exit/-/capture-exit-1.2.0.tgz#1c5fcc489fd0ab00d4f1ac7ae1072e3173fbab6f" @@ -1837,6 +2603,11 @@ caseless@~0.12.0: resolved "https://registry.yarnpkg.com/caseless/-/caseless-0.12.0.tgz#1b681c21ff84033c826543090689420d187151dc" integrity sha1-G2gcIf+EAzyCZUMJBolCDRhxUdw= +ccount@^1.0.0: + version "1.0.4" + resolved "https://registry.yarnpkg.com/ccount/-/ccount-1.0.4.tgz#9cf2de494ca84060a2a8d2854edd6dfb0445f386" + integrity sha512-fpZ81yYfzentuieinmGnphk0pLkOTMm6MZdVqwd77ROvhko6iujLNGrHH5E7utq3ygWklwfmwuG+A7P+NpqT6w== + chalk@^1.0.0, chalk@^1.1.1, chalk@^1.1.3: version "1.1.3" resolved "https://registry.yarnpkg.com/chalk/-/chalk-1.1.3.tgz#a8115c55e4a702fe4d150abd3872822a7e09fc98" @@ -1866,7 +2637,7 @@ chalk@^2.0.1, chalk@^2.1.0, chalk@^2.4.1: escape-string-regexp "^1.0.5" supports-color "^5.3.0" -chalk@^2.4.2: +chalk@^2.3.0, chalk@^2.4.2: version "2.4.2" resolved "https://registry.yarnpkg.com/chalk/-/chalk-2.4.2.tgz#cd42541677a54333cf541a49108c1432b44c9424" integrity sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ== @@ -1884,6 +2655,26 @@ chalk@~0.4.0: has-color "~0.1.0" strip-ansi "~0.1.0" +character-entities-html4@^1.0.0: + version "1.1.3" + resolved "https://registry.yarnpkg.com/character-entities-html4/-/character-entities-html4-1.1.3.tgz#5ce6e01618e47048ac22f34f7f39db5c6fd679ef" + integrity sha512-SwnyZ7jQBCRHELk9zf2CN5AnGEc2nA+uKMZLHvcqhpPprjkYhiLn0DywMHgN5ttFZuITMATbh68M6VIVKwJbcg== + +character-entities-legacy@^1.0.0: + version "1.1.3" + resolved "https://registry.yarnpkg.com/character-entities-legacy/-/character-entities-legacy-1.1.3.tgz#3c729991d9293da0ede6dddcaf1f2ce1009ee8b4" + integrity sha512-YAxUpPoPwxYFsslbdKkhrGnXAtXoHNgYjlBM3WMXkWGTl5RsY3QmOyhwAgL8Nxm9l5LBThXGawxKPn68y6/fww== + +character-entities@^1.0.0: + version "1.2.3" + resolved "https://registry.yarnpkg.com/character-entities/-/character-entities-1.2.3.tgz#bbed4a52fe7ef98cc713c6d80d9faa26916d54e6" + integrity sha512-yB4oYSAa9yLcGyTbB4ItFwHw43QHdH129IJ5R+WvxOkWlyFnR5FAaBNnUq4mcxsTVZGh28bHoeTHMKXH1wZf3w== + +character-reference-invalid@^1.0.0: + version "1.1.3" + resolved "https://registry.yarnpkg.com/character-reference-invalid/-/character-reference-invalid-1.1.3.tgz#1647f4f726638d3ea4a750cf5d1975c1c7919a85" + integrity sha512-VOq6PRzQBam/8Jm6XBGk2fNEnHXAdGd6go0rtd4weAGECBamHDwwCQSOT12TACIYUZegUXnV6xBXqUssijtxIg== + chardet@^0.4.0: version "0.4.2" resolved "https://registry.yarnpkg.com/chardet/-/chardet-0.4.2.tgz#b5473b33dc97c424e5d98dc87d55d4d8a29c8bf2" @@ -1909,7 +2700,7 @@ chokidar@^2.0.0, chokidar@^2.0.2: optionalDependencies: fsevents "^1.2.2" -chokidar@^2.1.6: +chokidar@^2.0.4, chokidar@^2.1.6: version "2.1.6" resolved "https://registry.yarnpkg.com/chokidar/-/chokidar-2.1.6.tgz#b6cad653a929e244ce8a834244164d241fa954c5" integrity sha512-V2jUo67OKkc6ySiRpJrjlpJKl9kDuG+Xb8VgsGzb+aEouhgS1D0weyPU4lEzdAcsCAvrih2J2BqyXqHWvVLw5g== @@ -2077,6 +2868,11 @@ code-point-at@^1.0.0: resolved "https://registry.yarnpkg.com/code-point-at/-/code-point-at-1.1.0.tgz#0d070b4d043a5bea33a2f1a40e2edb3d9a4ccf77" integrity sha1-DQcLTQQ6W+ozovGkDi7bPZpMz3c= +collapse-white-space@^1.0.0, collapse-white-space@^1.0.2: + version "1.0.5" + resolved "https://registry.yarnpkg.com/collapse-white-space/-/collapse-white-space-1.0.5.tgz#c2495b699ab1ed380d29a1091e01063e75dbbe3a" + integrity sha512-703bOOmytCYAX9cXYqoikYIx6twmFCXsnzRQheBcTG3nzKYBR4P/+wkYeH+Mvj7qUz8zZDtdyzbxfnEi/kYzRQ== + collection-map@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/collection-map/-/collection-map-1.0.0.tgz#aea0f06f8d26c780c2b75494385544b2255af18c" @@ -2123,6 +2919,11 @@ combined-stream@^1.0.6, combined-stream@~1.0.6: dependencies: delayed-stream "~1.0.0" +comma-separated-tokens@^1.0.1: + version "1.0.7" + resolved "https://registry.yarnpkg.com/comma-separated-tokens/-/comma-separated-tokens-1.0.7.tgz#419cd7fb3258b1ed838dc0953167a25e152f5b59" + integrity sha512-Jrx3xsP4pPv4AwJUDWY9wOXGtwPXARej6Xd99h4TUGotmf8APuquKMpK+dnD3UgyxK7OEWaisjZz+3b5jtL6xQ== + commander@2, commander@^2.19.0: version "2.19.0" resolved "https://registry.yarnpkg.com/commander/-/commander-2.19.0.tgz#f6198aa84e5b83c46054b94ddedbfed5ee9ff12a" @@ -2183,6 +2984,15 @@ concat-stream@1.6.2, concat-stream@^1.5.0, concat-stream@^1.6.0: readable-stream "^2.2.2" typedarray "^0.0.6" +concat-stream@~1.5.0: + version "1.5.2" + resolved "https://registry.yarnpkg.com/concat-stream/-/concat-stream-1.5.2.tgz#708978624d856af41a5a741defdd261da752c266" + integrity sha1-cIl4Yk2FavQaWnQd790mHadSwmY= + dependencies: + inherits "~2.0.1" + readable-stream "~2.0.0" + typedarray "~0.0.5" + connect-history-api-fallback@^1.6.0: version "1.6.0" resolved "https://registry.yarnpkg.com/connect-history-api-fallback/-/connect-history-api-fallback-1.6.0.tgz#8b32089359308d111115d81cad3fceab888f97bc" @@ -2222,6 +3032,11 @@ content-type@~1.0.4: resolved "https://registry.yarnpkg.com/content-type/-/content-type-1.0.4.tgz#e138cc75e040c727b1966fe5e5f8c9aee256fe3b" integrity sha512-hIP3EEPs8tB9AT1L+NUqtwOAps4mk2Zob89MWXMHjHWg9milF/j4osnnQLXBCBFBk/tvIG/tUc9mOUJiPBhPXA== +continuable-cache@^0.3.1: + version "0.3.1" + resolved "https://registry.yarnpkg.com/continuable-cache/-/continuable-cache-0.3.1.tgz#bd727a7faed77e71ff3985ac93351a912733ad0f" + integrity sha1-vXJ6f67XfnH/OYWskzUakSczrQ8= + convert-source-map@^1.1.0, convert-source-map@^1.4.0, convert-source-map@^1.5.1: version "1.6.0" resolved "https://registry.yarnpkg.com/convert-source-map/-/convert-source-map-1.6.0.tgz#51b537a8c43e0f04dec1993bffcdd504e758ac20" @@ -2269,6 +3084,20 @@ copy-props@^2.0.1: each-props "^1.3.0" is-plain-object "^2.0.1" +core-js-compat@^3.1.1: + version "3.1.4" + resolved "https://registry.yarnpkg.com/core-js-compat/-/core-js-compat-3.1.4.tgz#e4d0c40fbd01e65b1d457980fe4112d4358a7408" + integrity sha512-Z5zbO9f1d0YrJdoaQhphVAnKPimX92D6z8lCGphH89MNRxlL1prI9ExJPqVwP0/kgkQCv8c4GJGT8X16yUncOg== + dependencies: + browserslist "^4.6.2" + core-js-pure "3.1.4" + semver "^6.1.1" + +core-js-pure@3.1.4: + version "3.1.4" + resolved "https://registry.yarnpkg.com/core-js-pure/-/core-js-pure-3.1.4.tgz#5fa17dc77002a169a3566cc48dc774d2e13e3769" + integrity sha512-uJ4Z7iPNwiu1foygbcZYJsJs1jiXrTTCvxfLDXNhI/I+NHbSIEyr548y4fcsCEyWY0XgfAG/qqaunJ1SThHenA== + core-js@^2.4.0: version "2.5.0" resolved "https://registry.yarnpkg.com/core-js/-/core-js-2.5.0.tgz#569c050918be6486b3837552028ae0466b717086" @@ -2758,6 +3587,11 @@ dateformat@^2.0.0: resolved "https://registry.yarnpkg.com/dateformat/-/dateformat-2.0.0.tgz#2743e3abb5c3fc2462e527dca445e04e9f4dee17" integrity sha1-J0Pjq7XD/CRi5SfcpEXgTp9N7hc= +de-indent@^1.0.2: + version "1.0.2" + resolved "https://registry.yarnpkg.com/de-indent/-/de-indent-1.0.2.tgz#b2038e846dc33baa5796128d0804b455b8c1e21d" + integrity sha1-sgOOhG3DO6pXlhKNCAS0VbjB4h0= + debug-log@^1.0.0: version "1.0.1" resolved "https://registry.yarnpkg.com/debug-log/-/debug-log-1.0.1.tgz#2307632d4c04382b8df8a32f70b895046d52745f" @@ -2887,6 +3721,11 @@ define-property@^2.0.2: is-descriptor "^1.0.2" isobject "^3.0.1" +defined@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/defined/-/defined-1.0.0.tgz#c98d9bcef75674188e110969151199e39b1fa693" + integrity sha1-yY2bzvdWdBiOEQlpFRGZ45sfppM= + deglob@^2.1.0: version "2.1.1" resolved "https://registry.yarnpkg.com/deglob/-/deglob-2.1.1.tgz#d268e168727799862e8eac07042e165957c1f3be" @@ -2940,6 +3779,13 @@ destroy@~1.0.4: resolved "https://registry.yarnpkg.com/destroy/-/destroy-1.0.4.tgz#978857442c44749e4206613e37946205826abd80" integrity sha1-l4hXRCxEdJ5CBmE+N5RiBYJqvYA= +detab@^2.0.0: + version "2.0.2" + resolved "https://registry.yarnpkg.com/detab/-/detab-2.0.2.tgz#074970d1a807b045d0258a4235df5928dd683561" + integrity sha512-Q57yPrxScy816TTE1P/uLRXLDKjXhvYTbfxS/e6lPD+YrqghbsMlGB9nQzj/zVtSPaF0DFPSdO916EWO4sQUyQ== + dependencies: + repeat-string "^1.5.4" + detect-file@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/detect-file/-/detect-file-1.0.0.tgz#f0d66d03672a825cb1b73bdb3fe62310c8e552b7" @@ -2967,6 +3813,19 @@ detect-node@^2.0.4: resolved "https://registry.yarnpkg.com/detect-node/-/detect-node-2.0.4.tgz#014ee8f8f669c5c58023da64b8179c083a28c46c" integrity sha512-ZIzRpLJrOj7jjP2miAtgqIfmzbxa4ZOr5jJc601zklsfEx9oTzmmj2nVpIPRpNlRTIh8lc1kyViIY7BWSGNmKw== +detective@^4.0.0: + version "4.7.1" + resolved "https://registry.yarnpkg.com/detective/-/detective-4.7.1.tgz#0eca7314338442febb6d65da54c10bb1c82b246e" + integrity sha512-H6PmeeUcZloWtdt4DAkFyzFL94arpHr3NOwwmVILFiy+9Qd4JTxxXrzfyGk/lmct2qVGBwTSwSXagqu2BxmWig== + dependencies: + acorn "^5.2.1" + defined "^1.0.0" + +diff@^1.3.2: + version "1.4.0" + resolved "https://registry.yarnpkg.com/diff/-/diff-1.4.0.tgz#7f28d2eb9ee7b15a97efd89ce63dcfdaa3ccbabf" + integrity sha1-fyjS657nsVqX79ic5j3P2qPMur8= + diff@^3.2.0: version "3.5.0" resolved "https://registry.yarnpkg.com/diff/-/diff-3.5.0.tgz#800c0dd1e0a8bfbc95835c202ad220fe317e5a12" @@ -2981,6 +3840,14 @@ diffie-hellman@^5.0.0: miller-rabin "^4.0.0" randombytes "^2.0.0" +disparity@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/disparity/-/disparity-2.0.0.tgz#57ddacb47324ae5f58d2cc0da886db4ce9eeb718" + integrity sha1-V92stHMkrl9Y0swNqIbbTOnutxg= + dependencies: + ansi-styles "^2.0.1" + diff "^1.3.2" + dns-equal@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/dns-equal/-/dns-equal-1.0.0.tgz#b39e7f1da6eb0a75ba9c17324b34753c47e0654d" @@ -3001,6 +3868,13 @@ dns-txt@^2.0.2: dependencies: buffer-indexof "^1.0.0" +doctrine-temporary-fork@2.1.0: + version "2.1.0" + resolved "https://registry.yarnpkg.com/doctrine-temporary-fork/-/doctrine-temporary-fork-2.1.0.tgz#36f2154f556ee4f1e60311d391cd23de5187ed57" + integrity sha512-nliqOv5NkE4zMON4UA6AMJE6As35afs8aYXATpU4pTUdIKiARZwrJVEP1boA3Rx1ZXHVkwxkhcq4VkqvsuRLsA== + dependencies: + esutils "^2.0.2" + doctrine@1.5.0: version "1.5.0" resolved "https://registry.yarnpkg.com/doctrine/-/doctrine-1.5.0.tgz#379dce730f6166f76cefa4e6707a159b02c5a6fa" @@ -3016,6 +3890,77 @@ doctrine@^2.1.0: dependencies: esutils "^2.0.2" +documentation@^12.0.1: + version "12.0.1" + resolved "https://registry.yarnpkg.com/documentation/-/documentation-12.0.1.tgz#4abe263d5415f3ed7ee737829921ef6159e6a335" + integrity sha512-+kmdw8ZOZr5QSuX8ErTC9Q9CzQ/fGhSjeRx/W+bHwZamZbJKaEuzylt+VCH0fCIn1/3Ep3K5RdUxIsgrOkQXfw== + dependencies: + "@babel/core" "^7.1.2" + "@babel/generator" "^7.1.3" + "@babel/parser" "7.1.3" + "@babel/plugin-proposal-class-properties" "^7.1.0" + "@babel/plugin-proposal-decorators" "^7.1.2" + "@babel/plugin-proposal-do-expressions" "^7.0.0" + "@babel/plugin-proposal-export-default-from" "^7.0.0" + "@babel/plugin-proposal-export-namespace-from" "^7.0.0" + "@babel/plugin-proposal-function-bind" "^7.0.0" + "@babel/plugin-proposal-function-sent" "^7.1.0" + "@babel/plugin-proposal-json-strings" "^7.0.0" + "@babel/plugin-proposal-logical-assignment-operators" "^7.0.0" + "@babel/plugin-proposal-nullish-coalescing-operator" "^7.0.0" + "@babel/plugin-proposal-numeric-separator" "^7.0.0" + "@babel/plugin-proposal-optional-chaining" "^7.0.0" + "@babel/plugin-proposal-pipeline-operator" "^7.0.0" + "@babel/plugin-proposal-throw-expressions" "^7.0.0" + "@babel/plugin-syntax-dynamic-import" "^7.0.0" + "@babel/plugin-syntax-import-meta" "^7.0.0" + "@babel/preset-env" "^7.1.0" + "@babel/preset-flow" "^7.0.0" + "@babel/preset-react" "^7.0.0" + "@babel/preset-stage-0" "^7.0.0" + "@babel/traverse" "^7.1.4" + "@babel/types" "^7.1.3" + ansi-html "^0.0.7" + babelify "^10.0.0" + chalk "^2.3.0" + chokidar "^2.0.4" + concat-stream "^1.6.0" + disparity "^2.0.0" + doctrine-temporary-fork "2.1.0" + get-port "^4.0.0" + git-url-parse "^10.0.1" + github-slugger "1.2.0" + glob "^7.1.2" + globals-docs "^2.4.0" + highlight.js "^9.15.5" + js-yaml "^3.10.0" + lodash "^4.17.10" + mdast-util-inject "^1.1.0" + micromatch "^3.1.5" + mime "^2.2.0" + module-deps-sortable "5.0.0" + parse-filepath "^1.0.2" + pify "^4.0.0" + read-pkg-up "^4.0.0" + remark "^9.0.0" + remark-html "^8.0.0" + remark-reference-links "^4.0.1" + remark-toc "^5.0.0" + remote-origin-url "0.4.0" + resolve "^1.8.1" + stream-array "^1.1.2" + strip-json-comments "^2.0.1" + tiny-lr "^1.1.0" + unist-builder "^1.0.2" + unist-util-visit "^1.3.0" + vfile "^4.0.0" + vfile-reporter "^6.0.0" + vfile-sort "^2.1.0" + vinyl "^2.1.0" + vinyl-fs "^3.0.2" + vue-template-compiler "^2.5.16" + yargs "^12.0.2" + domain-browser@^1.1.1: version "1.2.0" resolved "https://registry.yarnpkg.com/domain-browser/-/domain-browser-1.2.0.tgz#3d31f50191a6749dd1375a7f522e823d42e54eda" @@ -3035,6 +3980,13 @@ duplexer2@0.0.2: dependencies: readable-stream "~1.1.9" +duplexer2@^0.1.2, duplexer2@~0.1.0: + version "0.1.4" + resolved "https://registry.yarnpkg.com/duplexer2/-/duplexer2-0.1.4.tgz#8b12dab878c0d69e3e7891051662a32fc6bddcc1" + integrity sha1-ixLauHjA1p4+eJEFFmKjL8a93ME= + dependencies: + readable-stream "^2.0.2" + duplexify@^3.4.2, duplexify@^3.6.0: version "3.6.1" resolved "https://registry.yarnpkg.com/duplexify/-/duplexify-3.6.1.tgz#b1a7a29c4abfd639585efaecce80d666b1e34125" @@ -3071,6 +4023,11 @@ ee-first@1.1.1: resolved "https://registry.yarnpkg.com/ee-first/-/ee-first-1.1.1.tgz#590c61156b0ae2f4f0255732a158b266bc56b21d" integrity sha1-WQxhFWsK4vTwJVcyoViyZrxWsh0= +electron-to-chromium@^1.3.191: + version "1.3.191" + resolved "https://registry.yarnpkg.com/electron-to-chromium/-/electron-to-chromium-1.3.191.tgz#c451b422cd8b2eab84dedabab5abcae1eaefb6f0" + integrity sha512-jasjtY5RUy/TOyiUYM2fb4BDaPZfm6CXRFeJDMfFsXYADGxUN49RBqtgB7EL2RmJXeIRUk9lM1U6A5yk2YJMPQ== + electron-to-chromium@^1.3.92: version "1.3.92" resolved "https://registry.yarnpkg.com/electron-to-chromium/-/electron-to-chromium-1.3.92.tgz#9027b5abaea400045edd652c0e4838675c814399" @@ -3089,6 +4046,16 @@ elliptic@^6.0.0: minimalistic-assert "^1.0.0" minimalistic-crypto-utils "^1.0.0" +"emoji-regex@>=6.0.0 <=6.1.1": + version "6.1.1" + resolved "https://registry.yarnpkg.com/emoji-regex/-/emoji-regex-6.1.1.tgz#c6cd0ec1b0642e2a3c67a1137efc5e796da4f88e" + integrity sha1-xs0OwbBkLio8Z6ETfvxeeW2k+I4= + +emoji-regex@^8.0.0: + version "8.0.0" + resolved "https://registry.yarnpkg.com/emoji-regex/-/emoji-regex-8.0.0.tgz#e818fd69ce5ccfcb404594f842963bf53164cc37" + integrity sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A== + emojis-list@^2.0.0: version "2.1.0" resolved "https://registry.yarnpkg.com/emojis-list/-/emojis-list-2.1.0.tgz#4daa4d9db00f9819880c79fa457ae5b09a1fd389" @@ -3136,6 +4103,14 @@ error-ex@^1.2.0, error-ex@^1.3.1: dependencies: is-arrayish "^0.2.1" +error@^7.0.0: + version "7.0.2" + resolved "https://registry.yarnpkg.com/error/-/error-7.0.2.tgz#a5f75fff4d9926126ddac0ea5dc38e689153cb02" + integrity sha1-pfdf/02ZJhJt2sDqXcOOaJFTywI= + dependencies: + string-template "~0.2.1" + xtend "~4.0.0" + es-abstract@^1.5.1: version "1.10.0" resolved "https://registry.yarnpkg.com/es-abstract/-/es-abstract-1.10.0.tgz#1ecb36c197842a00d8ee4c2dfd8646bb97d60864" @@ -3447,7 +4422,7 @@ estraverse@~1.5.0: resolved "https://registry.yarnpkg.com/estraverse/-/estraverse-1.5.1.tgz#867a3e8e58a9f84618afb6c2ddbcd916b7cbaf71" integrity sha1-hno+jlip+EYYr7bC3bzZFrfLr3E= -esutils@^2.0.2: +esutils@^2.0.0, esutils@^2.0.2: version "2.0.2" resolved "https://registry.yarnpkg.com/esutils/-/esutils-2.0.2.tgz#0abf4f1caa5bcb1f7a9d8acc6dea4faaa04bac9b" integrity sha1-Cr9PHKpbyx96nYrMbepPqqBLrJs= @@ -3740,7 +4715,7 @@ fastparse@^1.1.1: resolved "https://registry.yarnpkg.com/fastparse/-/fastparse-1.1.2.tgz#91728c5a5942eced8531283c79441ee4122c35a9" integrity sha512-483XLLxTVIwWK3QTrMGRqUfUpoOs/0hbQrl2oz4J0pAcm3A3bu84wxTFqGqkJzewCLdME38xJLJAxBABfQT8sQ== -faye-websocket@^0.10.0: +faye-websocket@^0.10.0, faye-websocket@~0.10.0: version "0.10.0" resolved "https://registry.yarnpkg.com/faye-websocket/-/faye-websocket-0.10.0.tgz#4e492f8d04dfb6f89003507f6edbf2d501e7c6f4" integrity sha1-TkkvjQTftviQA1B/btvy1QHnxvQ= @@ -4125,6 +5100,11 @@ get-caller-file@^1.0.1: resolved "https://registry.yarnpkg.com/get-caller-file/-/get-caller-file-1.0.2.tgz#f702e63127e7e231c160a80c1554acb70d5047e5" integrity sha1-9wLmMSfn4jHBYKgMFVSstw1QR+U= +get-port@^4.0.0: + version "4.2.0" + resolved "https://registry.yarnpkg.com/get-port/-/get-port-4.2.0.tgz#e37368b1e863b7629c43c5a323625f95cf24b119" + integrity sha512-/b3jarXkH8KJoOMQc3uVGHASwGLPq3gSFJ7tgJm2diza+bydJPTGOibin2steecKeOylE8oY2JERlVWkAJO6yw== + get-stdin@^4.0.1: version "4.0.1" resolved "https://registry.yarnpkg.com/get-stdin/-/get-stdin-4.0.1.tgz#b968c6b0a04384324902e8bf1a5df32579a450fe" @@ -4164,6 +5144,35 @@ getpass@^0.1.1: dependencies: assert-plus "^1.0.0" +git-up@^2.0.0: + version "2.1.0" + resolved "https://registry.yarnpkg.com/git-up/-/git-up-2.1.0.tgz#2f14cfe78327e7c4a2b92fcac7bfc674fdfad40c" + integrity sha512-MJgwfcSd9qxgDyEYpRU/CDxNpUadrK80JHuEQDG4Urn0m7tpSOgCBrtiSIa9S9KH8Tbuo/TN8SSQmJBvsw1HkA== + dependencies: + is-ssh "^1.3.0" + parse-url "^3.0.2" + +git-url-parse@^10.0.1: + version "10.1.0" + resolved "https://registry.yarnpkg.com/git-url-parse/-/git-url-parse-10.1.0.tgz#a27813218f8777e91d15f1c121b83bf14721b67e" + integrity sha512-goZOORAtFjU1iG+4zZgWq+N7It09PqS3Xsy43ZwhP5unDD0tTSmXTpqULHodMdJXGejm3COwXIhIRT6Z8DYVZQ== + dependencies: + git-up "^2.0.0" + +github-slugger@1.2.0: + version "1.2.0" + resolved "https://registry.yarnpkg.com/github-slugger/-/github-slugger-1.2.0.tgz#8ada3286fd046d8951c3c952a8d7854cfd90fd9a" + integrity sha512-wIaa75k1vZhyPm9yWrD08A5Xnx/V+RmzGrpjQuLemGKSb77Qukiaei58Bogrl/LZSADDfPzKJX8jhLs4CRTl7Q== + dependencies: + emoji-regex ">=6.0.0 <=6.1.1" + +github-slugger@^1.0.0, github-slugger@^1.2.1: + version "1.2.1" + resolved "https://registry.yarnpkg.com/github-slugger/-/github-slugger-1.2.1.tgz#47e904e70bf2dccd0014748142d31126cfd49508" + integrity sha512-SsZUjg/P03KPzQBt7OxJPasGw6NRO5uOgiZ5RGXVud5iSIZ0eNZeNp5rTwCxtavrRUa/A77j8mePVc5lEvk0KQ== + dependencies: + emoji-regex ">=6.0.0 <=6.1.1" + glob-base@^0.3.0: version "0.3.0" resolved "https://registry.yarnpkg.com/glob-base/-/glob-base-0.3.0.tgz#dbb164f6221b1c0b1ccf82aea328b497df0ea3c4" @@ -4294,6 +5303,11 @@ global-prefix@^1.0.1: is-windows "^1.0.1" which "^1.2.14" +globals-docs@^2.4.0: + version "2.4.0" + resolved "https://registry.yarnpkg.com/globals-docs/-/globals-docs-2.4.0.tgz#f2c647544eb6161c7c38452808e16e693c2dafbb" + integrity sha512-B69mWcqCmT3jNYmSxRxxOXWfzu3Go8NQXPfl2o0qPd1EEFhwW0dFUg9ztTu915zPQzqwIhWAlw6hmfIcCK4kkQ== + globals@^11.1.0, globals@^11.7.0: version "11.9.0" resolved "https://registry.yarnpkg.com/globals/-/globals-11.9.0.tgz#bde236808e987f290768a93d065060d78e6ab249" @@ -4576,11 +5590,49 @@ hash.js@^1.0.0, hash.js@^1.0.3: inherits "^2.0.3" minimalistic-assert "^1.0.1" -he@1.2.x, he@^1.2.0: +hast-util-is-element@^1.0.0: + version "1.0.3" + resolved "https://registry.yarnpkg.com/hast-util-is-element/-/hast-util-is-element-1.0.3.tgz#423b4b26fe8bf1f25950fe052e9ce8f83fd5f6a4" + integrity sha512-C62CVn7jbjp89yOhhy7vrkSaB7Vk906Gtcw/Ihd+Iufnq+2pwOZjdPmpzpKLWJXPJBMDX3wXg4FqmdOayPcewA== + +hast-util-sanitize@^1.0.0: + version "1.3.1" + resolved "https://registry.yarnpkg.com/hast-util-sanitize/-/hast-util-sanitize-1.3.1.tgz#4e60d66336bd67e52354d581967467029a933f2e" + integrity sha512-AIeKHuHx0Wk45nSkGVa2/ujQYTksnDl8gmmKo/mwQi7ag7IBZ8cM3nJ2G86SajbjGP/HRpud6kMkPtcM2i0Tlw== + dependencies: + xtend "^4.0.1" + +hast-util-to-html@^4.0.0: + version "4.0.1" + resolved "https://registry.yarnpkg.com/hast-util-to-html/-/hast-util-to-html-4.0.1.tgz#3666b05afb62bd69f8f5e6c94db04dea19438e2a" + integrity sha512-2emzwyf0xEsc4TBIPmDJmBttIw8R4SXAJiJZoiRR/s47ODYWgOqNoDbf2SJAbMbfNdFWMiCSOrI3OVnX6Qq2Mg== + dependencies: + ccount "^1.0.0" + comma-separated-tokens "^1.0.1" + hast-util-is-element "^1.0.0" + hast-util-whitespace "^1.0.0" + html-void-elements "^1.0.0" + property-information "^4.0.0" + space-separated-tokens "^1.0.0" + stringify-entities "^1.0.1" + unist-util-is "^2.0.0" + xtend "^4.0.1" + +hast-util-whitespace@^1.0.0: + version "1.0.3" + resolved "https://registry.yarnpkg.com/hast-util-whitespace/-/hast-util-whitespace-1.0.3.tgz#6d161b307bd0693b5ec000c7c7e8b5445109ee34" + integrity sha512-AlkYiLTTwPOyxZ8axq2/bCwRUPjIPBfrHkXuCR92B38b3lSdU22R5F/Z4DL6a2kxWpekWq1w6Nj48tWat6GeRA== + +he@1.2.x, he@^1.1.0, he@^1.2.0: version "1.2.0" resolved "https://registry.yarnpkg.com/he/-/he-1.2.0.tgz#84ae65fa7eafb165fddb61566ae14baf05664f0f" integrity sha512-F/1DnUGPopORZi0ni+CvrCgHQ5FyEAHRLSApuYWMmrbSwoN2Mn/7k+Gl38gJnR7yyDZk6WLXwiGod1JOWNDKGw== +highlight.js@^9.15.5: + version "9.15.8" + resolved "https://registry.yarnpkg.com/highlight.js/-/highlight.js-9.15.8.tgz#f344fda123f36f1a65490e932cf90569e4999971" + integrity sha512-RrapkKQWwE+wKdF73VsOa2RQdIoO3mxwJ4P8mhbI6KYJUraUHRKM5w5zQQKXNk0xNL4UVRdulV9SBJcmzJNzVA== + hmac-drbg@^1.0.0: version "1.0.1" resolved "https://registry.yarnpkg.com/hmac-drbg/-/hmac-drbg-1.0.1.tgz#d2745701025a6c775a6c545793ed502fc0c649a1" @@ -4667,6 +5719,11 @@ html-minifier@^3.0.1: relateurl "0.2.x" uglify-js "3.4.x" +html-void-elements@^1.0.0: + version "1.0.4" + resolved "https://registry.yarnpkg.com/html-void-elements/-/html-void-elements-1.0.4.tgz#95e8bb5ecd6b88766569c2645f2b5f1591db9ba5" + integrity sha512-yMk3naGPLrfvUV9TdDbuYXngh/TpHbA6TrOw3HL9kS8yhwx7i309BReNg7CbAJXGE+UMJ6je5OqJ7lC63o6YuQ== + http-deceiver@^1.2.7: version "1.2.7" resolved "https://registry.yarnpkg.com/http-deceiver/-/http-deceiver-1.2.7.tgz#fa7168944ab9a519d337cb0bec7284dc3e723d87" @@ -4872,7 +5929,7 @@ inherits@2.0.1: resolved "https://registry.yarnpkg.com/inherits/-/inherits-2.0.1.tgz#b17d08d326b4423e568eff719f91b0b1cbdf69f1" integrity sha1-sX0I0ya0Qj5Wjv9xn5GwscvfafE= -ini@^1.3.4: +ini@^1.3.3, ini@^1.3.4: version "1.3.5" resolved "https://registry.yarnpkg.com/ini/-/ini-1.3.5.tgz#eee25f56db1c9ec6085e0c22778083f596abf927" integrity sha512-RZY5huIKCMRWDUqZlEi72f/lmXKMvuszcMBduliQ3nnWbx9X/ZBQO7DijMEYS9EhHBb2qacRUMtC7svLwe0lcw== @@ -4975,6 +6032,24 @@ is-accessor-descriptor@^1.0.0: dependencies: kind-of "^6.0.0" +is-alphabetical@^1.0.0: + version "1.0.3" + resolved "https://registry.yarnpkg.com/is-alphabetical/-/is-alphabetical-1.0.3.tgz#eb04cc47219a8895d8450ace4715abff2258a1f8" + integrity sha512-eEMa6MKpHFzw38eKm56iNNi6GJ7lf6aLLio7Kr23sJPAECscgRtZvOBYybejWDQ2bM949Y++61PY+udzj5QMLA== + +is-alphanumeric@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/is-alphanumeric/-/is-alphanumeric-1.0.0.tgz#4a9cef71daf4c001c1d81d63d140cf53fd6889f4" + integrity sha1-Spzvcdr0wAHB2B1j0UDPU/1oifQ= + +is-alphanumerical@^1.0.0: + version "1.0.3" + resolved "https://registry.yarnpkg.com/is-alphanumerical/-/is-alphanumerical-1.0.3.tgz#57ae21c374277b3defe0274c640a5704b8f6657c" + integrity sha512-A1IGAPO5AW9vSh7omxIlOGwIqEvpW/TA+DksVOPM5ODuxKlZS09+TEM1E3275lJqO2oJ38vDpeAL3DCIiHE6eA== + dependencies: + is-alphabetical "^1.0.0" + is-decimal "^1.0.0" + is-arrayish@^0.2.1: version "0.2.1" resolved "https://registry.yarnpkg.com/is-arrayish/-/is-arrayish-0.2.1.tgz#77c99840527aa8ecb1a8ba697b80645a7a926a9d" @@ -4987,7 +6062,7 @@ is-binary-path@^1.0.0: dependencies: binary-extensions "^1.0.0" -is-buffer@^1.0.2: +is-buffer@^1.0.2, is-buffer@^1.1.4: version "1.1.6" resolved "https://registry.yarnpkg.com/is-buffer/-/is-buffer-1.1.6.tgz#efaa2ea9daa0d7ab2ea13a97b2b8ad51fefbe8be" integrity sha512-NcdALwpXkTm5Zvvbk7owOUSvVvBKDgKP5/ewfXEznmQFfs4ZRmanOeKBTjRVjka3QFoN6XJ+9F3USqfHqTaU5w== @@ -4997,6 +6072,11 @@ is-buffer@^1.1.5: resolved "https://registry.yarnpkg.com/is-buffer/-/is-buffer-1.1.5.tgz#1f3b26ef613b214b88cbca23cc6c01d87961eecc" integrity sha1-Hzsm72E7IUuIy8ojzGwB2Hlh7sw= +is-buffer@^2.0.0: + version "2.0.3" + resolved "https://registry.yarnpkg.com/is-buffer/-/is-buffer-2.0.3.tgz#4ecf3fcf749cbd1e472689e109ac66261a25e725" + integrity sha512-U15Q7MXTuZlrbymiz95PJpZxu8IlipAp4dtS3wOdgPXx3mqBnslrWU14kxfHB+Py/+2PVKSr37dMAgM2A4uArw== + is-builtin-module@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/is-builtin-module/-/is-builtin-module-1.0.0.tgz#540572d34f7ac3119f8f76c30cbc1b1e037affbe" @@ -5035,6 +6115,11 @@ is-date-object@^1.0.1: resolved "https://registry.yarnpkg.com/is-date-object/-/is-date-object-1.0.1.tgz#9aa20eb6aeebbff77fbd33e74ca01b33581d3a16" integrity sha1-mqIOtq7rv/d/vTPnTKAbM1gdOhY= +is-decimal@^1.0.0: + version "1.0.3" + resolved "https://registry.yarnpkg.com/is-decimal/-/is-decimal-1.0.3.tgz#381068759b9dc807d8c0dc0bfbae2b68e1da48b7" + integrity sha512-bvLSwoDg2q6Gf+E2LEPiklHZxxiSi3XAh4Mav65mKqTfCO1HM3uBs24TjEH8iJX3bbDdLXKJXBTmGzuTUuAEjQ== + is-descriptor@^0.1.0: version "0.1.6" resolved "https://registry.yarnpkg.com/is-descriptor/-/is-descriptor-0.1.6.tgz#366d8240dde487ca51823b1ab9f07a10a78251ca" @@ -5111,6 +6196,11 @@ is-fullwidth-code-point@^2.0.0: resolved "https://registry.yarnpkg.com/is-fullwidth-code-point/-/is-fullwidth-code-point-2.0.0.tgz#a3b30a5c4f199183167aaab93beefae3ddfb654f" integrity sha1-o7MKXE8ZkYMWeqq5O+764937ZU8= +is-fullwidth-code-point@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz#f116f8064fe90b3f7844a38997c0b75051269f1d" + integrity sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg== + is-generator-fn@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/is-generator-fn/-/is-generator-fn-1.0.0.tgz#969d49e1bb3329f6bb7f09089be26578b2ddd46a" @@ -5137,6 +6227,11 @@ is-glob@^4.0.0: dependencies: is-extglob "^2.1.1" +is-hexadecimal@^1.0.0: + version "1.0.3" + resolved "https://registry.yarnpkg.com/is-hexadecimal/-/is-hexadecimal-1.0.3.tgz#e8a426a69b6d31470d3a33a47bb825cda02506ee" + integrity sha512-zxQ9//Q3D/34poZf8fiy3m3XVpbQc7ren15iKqrTtLPwkPD/t3Scy9Imp63FujULGxuK0ZlCwoo5xNpktFgbOA== + is-negated-glob@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/is-negated-glob/-/is-negated-glob-1.0.0.tgz#6910bca5da8c95e784b5751b976cf5a10fee36d2" @@ -5187,6 +6282,11 @@ is-path-inside@^2.1.0: dependencies: path-is-inside "^1.0.2" +is-plain-obj@^1.0.0, is-plain-obj@^1.1.0: + version "1.1.0" + resolved "https://registry.yarnpkg.com/is-plain-obj/-/is-plain-obj-1.1.0.tgz#71a50c8429dfca773c92a390a4a03b39fcd51d3e" + integrity sha1-caUMhCnfync8kqOQpKA7OfzVHT4= + is-plain-object@^2.0.1, is-plain-object@^2.0.3, is-plain-object@^2.0.4: version "2.0.4" resolved "https://registry.yarnpkg.com/is-plain-object/-/is-plain-object-2.0.4.tgz#2c163b3fafb1b606d9d17928f05c2a1c38e07677" @@ -5233,6 +6333,13 @@ is-resolvable@^1.1.0: resolved "https://registry.yarnpkg.com/is-resolvable/-/is-resolvable-1.1.0.tgz#fb18f87ce1feb925169c9a407c19318a3206ed88" integrity sha512-qgDYXFSR5WvEfuS5dMj6oTMEbrrSaM0CrFk2Yiq/gXnBvD9pMa2jGXxyhGLfvhZpuMZe18CJpFxAt3CRs42NMg== +is-ssh@^1.3.0: + version "1.3.1" + resolved "https://registry.yarnpkg.com/is-ssh/-/is-ssh-1.3.1.tgz#f349a8cadd24e65298037a522cf7520f2e81a0f3" + integrity sha512-0eRIASHZt1E68/ixClI8bp2YK2wmBPVWEismTs6M+M099jKgrzl/3E976zIbImSIob48N2/XGe9y7ZiYdImSlg== + dependencies: + protocols "^1.1.0" + is-stream@^1.1.0: version "1.1.0" resolved "https://registry.yarnpkg.com/is-stream/-/is-stream-1.1.0.tgz#12d4a3dd4e68e0b79ceb8dbc84173ae80d91ca44" @@ -5265,6 +6372,11 @@ is-valid-glob@^1.0.0: resolved "https://registry.yarnpkg.com/is-valid-glob/-/is-valid-glob-1.0.0.tgz#29bf3eff701be2d4d315dbacc39bc39fe8f601aa" integrity sha1-Kb8+/3Ab4tTTFdusw5vDn+j2Aao= +is-whitespace-character@^1.0.0: + version "1.0.3" + resolved "https://registry.yarnpkg.com/is-whitespace-character/-/is-whitespace-character-1.0.3.tgz#b3ad9546d916d7d3ffa78204bca0c26b56257fac" + integrity sha512-SNPgMLz9JzPccD3nPctcj8sZlX9DAMJSKH8bP7Z6bohCwuNgX8xbWr1eTAYXX9Vpi/aSn8Y1akL9WgM3t43YNQ== + is-windows@^0.2.0: version "0.2.0" resolved "https://registry.yarnpkg.com/is-windows/-/is-windows-0.2.0.tgz#de1aa6d63ea29dd248737b69f1ff8b8002d2108c" @@ -5275,6 +6387,11 @@ is-windows@^1.0.1, is-windows@^1.0.2: resolved "https://registry.yarnpkg.com/is-windows/-/is-windows-1.0.2.tgz#d1850eb9791ecd18e6182ce12a30f396634bb19d" integrity sha512-eXK1UInq2bPmjyX6e3VHIzMLobc4J94i4AWn+Hpq3OU5KkrRC96OAcR3PRJ/pGu6m8TRnBHP9dkXQVsT/COVIA== +is-word-character@^1.0.0: + version "1.0.3" + resolved "https://registry.yarnpkg.com/is-word-character/-/is-word-character-1.0.3.tgz#264d15541cbad0ba833d3992c34e6b40873b08aa" + integrity sha512-0wfcrFgOOOBdgRNT9H33xe6Zi6yhX/uoc4U8NBZGeQQB0ctU1dnlNTyL9JM2646bHDTpsDm1Brb3VPoCIMrd/A== + is-wsl@^1.1.0: version "1.1.0" resolved "https://registry.yarnpkg.com/is-wsl/-/is-wsl-1.1.0.tgz#1f16e4aa22b04d1336b66188a66af3c600c3a66d" @@ -5801,18 +6918,18 @@ js-tokens@^3.0.0, js-tokens@^3.0.2: resolved "https://registry.yarnpkg.com/js-tokens/-/js-tokens-4.0.0.tgz#19203fb59991df98e3a287050d4647cdeaf32499" integrity sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ== -js-yaml@^3.11.0, js-yaml@^3.9.0: - version "3.12.0" - resolved "https://registry.yarnpkg.com/js-yaml/-/js-yaml-3.12.0.tgz#eaed656ec8344f10f527c6bfa1b6e2244de167d1" - integrity sha512-PIt2cnwmPfL4hKNwqeiuz4bKfnzHTBv6HyVgjahA6mPLwPDzjDWrplJBMjHUFxku/N3FlmrbyPclad+I+4mJ3A== +js-yaml@^3.10.0, js-yaml@^3.7.0: + version "3.13.1" + resolved "https://registry.yarnpkg.com/js-yaml/-/js-yaml-3.13.1.tgz#aff151b30bfdfa8e49e05da22e7415e9dfa37847" + integrity sha512-YfbcO7jXDdyj0DGxYVSlSeQNHbD7XPWvrVWeVUujrQEoZzWJIRrCPoyk6kL6IAjAG2IolMK4T0hNUe0HOUs5Jw== dependencies: argparse "^1.0.7" esprima "^4.0.0" -js-yaml@^3.7.0: - version "3.13.1" - resolved "https://registry.yarnpkg.com/js-yaml/-/js-yaml-3.13.1.tgz#aff151b30bfdfa8e49e05da22e7415e9dfa37847" - integrity sha512-YfbcO7jXDdyj0DGxYVSlSeQNHbD7XPWvrVWeVUujrQEoZzWJIRrCPoyk6kL6IAjAG2IolMK4T0hNUe0HOUs5Jw== +js-yaml@^3.11.0, js-yaml@^3.9.0: + version "3.12.0" + resolved "https://registry.yarnpkg.com/js-yaml/-/js-yaml-3.12.0.tgz#eaed656ec8344f10f527c6bfa1b6e2244de167d1" + integrity sha512-PIt2cnwmPfL4hKNwqeiuz4bKfnzHTBv6HyVgjahA6mPLwPDzjDWrplJBMjHUFxku/N3FlmrbyPclad+I+4mJ3A== dependencies: argparse "^1.0.7" esprima "^4.0.0" @@ -5941,6 +7058,11 @@ jsonlint@1.6.0: JSV ">= 4.0.x" nomnom ">= 1.5.x" +jsonparse@^1.2.0: + version "1.3.1" + resolved "https://registry.yarnpkg.com/jsonparse/-/jsonparse-1.3.1.tgz#3f4dae4a91fac315f71062f8521cc239f1366280" + integrity sha1-P02uSpH6wxX3EGL4UhzCOfE2YoA= + jsprim@^1.2.2: version "1.4.1" resolved "https://registry.yarnpkg.com/jsprim/-/jsprim-1.4.1.tgz#313e66bc1e5cc06e438bc1b7499c2e5c56acb6a2" @@ -6104,6 +7226,11 @@ liftoff@^2.5.0: rechoir "^0.6.2" resolve "^1.1.7" +livereload-js@^2.3.0: + version "2.4.0" + resolved "https://registry.yarnpkg.com/livereload-js/-/livereload-js-2.4.0.tgz#447c31cf1ea9ab52fc20db615c5ddf678f78009c" + integrity sha512-XPQH8Z2GDP/Hwz2PCDrh2mth4yFejwA1OZ/81Ti3LgKyhDcEjsSsqFWZojHG0va/duGd+WyosY7eXLDoOyqcPw== + load-json-file@^1.0.0: version "1.1.0" resolved "https://registry.yarnpkg.com/load-json-file/-/load-json-file-1.1.0.tgz#956905708d58b4bab4c2261b04f59f31c99374c0" @@ -6319,6 +7446,11 @@ loglevel@^1.6.1: resolved "https://registry.yarnpkg.com/loglevel/-/loglevel-1.6.2.tgz#668c77948a03dbd22502a3513ace1f62a80cc372" integrity sha512-Jt2MHrCNdtIe1W6co3tF5KXGRkzF+TYffiQstfXa04mrss9IKXzAAXYWak8LbZseAQY03sH2GzMCMU0ZOUc9bg== +longest-streak@^2.0.1: + version "2.0.3" + resolved "https://registry.yarnpkg.com/longest-streak/-/longest-streak-2.0.3.tgz#3de7a3f47ee18e9074ded8575b5c091f5d0a4105" + integrity sha512-9lz5IVdpwsKLMzQi0MQ+oD9EA0mIGcWYP7jXMTZVXP8D42PwuAk+M/HBFYQoxt1G5OR8m7aSIgb1UymfWGBWEw== + loose-envify@^1.0.0: version "1.3.1" resolved "https://registry.yarnpkg.com/loose-envify/-/loose-envify-1.3.1.tgz#d1a8ad33fa9ce0e713d65fdd0ac8b748d478c848" @@ -6412,6 +7544,16 @@ map-visit@^1.0.0: dependencies: object-visit "^1.0.0" +markdown-escapes@^1.0.0: + version "1.0.3" + resolved "https://registry.yarnpkg.com/markdown-escapes/-/markdown-escapes-1.0.3.tgz#6155e10416efaafab665d466ce598216375195f5" + integrity sha512-XUi5HJhhV5R74k8/0H2oCbCiYf/u4cO/rX8tnGkRvrqhsr5BRNU6Mg0yt/8UIx1iIS8220BNJsDb7XnILhLepw== + +markdown-table@^1.1.0: + version "1.1.3" + resolved "https://registry.yarnpkg.com/markdown-table/-/markdown-table-1.1.3.tgz#9fcb69bcfdb8717bfd0398c6ec2d93036ef8de60" + integrity sha512-1RUZVgQlpJSPWYbFSpmudq5nHY1doEIv89gBtF0s4gW1GF2XorxcA/70M5vq7rLv0a6mhOUccRsqkwhwLCIQ2Q== + matchdep@^2.0.0: version "2.0.0" resolved "https://registry.yarnpkg.com/matchdep/-/matchdep-2.0.0.tgz#c6f34834a0d8dbc3b37c27ee8bbcb27c7775582e" @@ -6431,6 +7573,64 @@ md5.js@^1.3.4: inherits "^2.0.1" safe-buffer "^5.1.2" +mdast-util-compact@^1.0.0: + version "1.0.3" + resolved "https://registry.yarnpkg.com/mdast-util-compact/-/mdast-util-compact-1.0.3.tgz#98a25cc8a7865761a41477b3a87d1dcef0b1e79d" + integrity sha512-nRiU5GpNy62rZppDKbLwhhtw5DXoFMqw9UNZFmlPsNaQCZ//WLjGKUwWMdJrUH+Se7UvtO2gXtAMe0g/N+eI5w== + dependencies: + unist-util-visit "^1.1.0" + +mdast-util-definitions@^1.2.0: + version "1.2.4" + resolved "https://registry.yarnpkg.com/mdast-util-definitions/-/mdast-util-definitions-1.2.4.tgz#2b54ad4eecaff9d9fcb6bf6f9f6b68b232d77ca7" + integrity sha512-HfUArPog1j4Z78Xlzy9Q4aHLnrF/7fb57cooTHypyGoe2XFNbcx/kWZDoOz+ra8CkUzvg3+VHV434yqEd1DRmA== + dependencies: + unist-util-visit "^1.0.0" + +mdast-util-inject@^1.1.0: + version "1.1.0" + resolved "https://registry.yarnpkg.com/mdast-util-inject/-/mdast-util-inject-1.1.0.tgz#db06b8b585be959a2dcd2f87f472ba9b756f3675" + integrity sha1-2wa4tYW+lZotzS+H9HK6m3VvNnU= + dependencies: + mdast-util-to-string "^1.0.0" + +mdast-util-to-hast@^3.0.0: + version "3.0.4" + resolved "https://registry.yarnpkg.com/mdast-util-to-hast/-/mdast-util-to-hast-3.0.4.tgz#132001b266031192348d3366a6b011f28e54dc40" + integrity sha512-/eIbly2YmyVgpJNo+bFLLMCI1XgolO/Ffowhf+pHDq3X4/V6FntC9sGQCDLM147eTS+uSXv5dRzJyFn+o0tazA== + dependencies: + collapse-white-space "^1.0.0" + detab "^2.0.0" + mdast-util-definitions "^1.2.0" + mdurl "^1.0.1" + trim "0.0.1" + trim-lines "^1.0.0" + unist-builder "^1.0.1" + unist-util-generated "^1.1.0" + unist-util-position "^3.0.0" + unist-util-visit "^1.1.0" + xtend "^4.0.1" + +mdast-util-to-string@^1.0.0, mdast-util-to-string@^1.0.5: + version "1.0.6" + resolved "https://registry.yarnpkg.com/mdast-util-to-string/-/mdast-util-to-string-1.0.6.tgz#7d85421021343b33de1552fc71cb8e5b4ae7536d" + integrity sha512-868pp48gUPmZIhfKrLbaDneuzGiw3OTDjHc5M1kAepR2CWBJ+HpEsm252K4aXdiP5coVZaJPOqGtVU6Po8xnXg== + +mdast-util-toc@^3.0.0: + version "3.1.0" + resolved "https://registry.yarnpkg.com/mdast-util-toc/-/mdast-util-toc-3.1.0.tgz#395eeb877f067f9d2165d990d77c7eea6f740934" + integrity sha512-Za0hqL1PqWrvxGtA/3NH9D5nhGAUS9grMM4obEAz5+zsk1RIw/vWUchkaoDLNdrwk05A0CSC5eEXng36/1qE5w== + dependencies: + github-slugger "^1.2.1" + mdast-util-to-string "^1.0.5" + unist-util-is "^2.1.2" + unist-util-visit "^1.1.0" + +mdurl@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/mdurl/-/mdurl-1.0.1.tgz#fe85b2ec75a59037f2adfec100fd6c601761152e" + integrity sha1-/oWy7HWlkDfyrf7BAP1sYBdhFS4= + media-typer@0.3.0: version "0.3.0" resolved "https://registry.yarnpkg.com/media-typer/-/media-typer-0.3.0.tgz#8710d7af0aa626f8fffa1ce00168545263255748" @@ -6526,7 +7726,7 @@ micromatch@^2.3.11: parse-glob "^3.0.4" regex-cache "^0.4.2" -micromatch@^3.0.4, micromatch@^3.1.10, micromatch@^3.1.8: +micromatch@^3.0.4, micromatch@^3.1.10, micromatch@^3.1.5, micromatch@^3.1.8: version "3.1.10" resolved "https://registry.yarnpkg.com/micromatch/-/micromatch-3.1.10.tgz#70859bc95c9840952f359a068a3fc49f9ecfac23" integrity sha512-MWikgl9n9M3w+bpsY3He8L+w9eF9338xRl8IAO5viDizwSzziFEyUzo2xrrloB64ADbTf8uA8vRqqttDTOmccg== @@ -6618,6 +7818,11 @@ mime@^2.0.3, mime@^2.4.2: resolved "https://registry.yarnpkg.com/mime/-/mime-2.4.3.tgz#229687331e86f68924e6cb59e1cdd937f18275fe" integrity sha512-QgrPRJfE+riq5TPZMcHZOtm8c6K/yYrMbKIoRfapfiGLxS8OTeIfRhUGW5LU7MlRa52KOAGCfUNruqLrIBvWZw== +mime@^2.2.0: + version "2.4.4" + resolved "https://registry.yarnpkg.com/mime/-/mime-2.4.4.tgz#bd7b91135fc6b01cde3e9bae33d659b63d8857e5" + integrity sha512-LRxmNwziLPT828z+4YkNzloCFC2YM4wrB99k+AV5ZbEyfGNWfG8SO1FUXLmLDBSo89NrJZ4DIWeLjy1CHGhMGA== + mimic-fn@^1.0.0: version "1.1.0" resolved "https://registry.yarnpkg.com/mimic-fn/-/mimic-fn-1.1.0.tgz#e667783d92e89dbd342818b5230b9d62a672ad18" @@ -6722,6 +7927,26 @@ mkdirp@0.5.1, mkdirp@0.5.x, "mkdirp@>=0.5 0", mkdirp@^0.5.0, mkdirp@^0.5.1, mkdi dependencies: minimist "0.0.8" +module-deps-sortable@5.0.0: + version "5.0.0" + resolved "https://registry.yarnpkg.com/module-deps-sortable/-/module-deps-sortable-5.0.0.tgz#99db5bb08f7eab55e4c31f6b7c722c6a2144ba74" + integrity sha512-bnGGeghQmz/t/6771/KC4FmxpVm126iR6AAzzq4N6hVZQVl4+ZZBv+VF3PJmDyxXtVtgcgTSSP7NL+jq1QAHrg== + dependencies: + JSONStream "^1.0.3" + browser-resolve "^1.7.0" + cached-path-relative "^1.0.0" + concat-stream "~1.5.0" + defined "^1.0.0" + detective "^4.0.0" + duplexer2 "^0.1.2" + inherits "^2.0.1" + readable-stream "^2.0.2" + resolve "^1.1.3" + stream-combiner2 "^1.1.1" + subarg "^1.0.0" + through2 "^2.0.0" + xtend "^4.0.0" + moment-mini@^2.22.1: version "2.22.1" resolved "https://registry.yarnpkg.com/moment-mini/-/moment-mini-2.22.1.tgz#bc32d73e43a4505070be6b53494b17623183420d" @@ -6969,6 +8194,13 @@ node-releases@^1.1.1: dependencies: semver "^5.3.0" +node-releases@^1.1.25: + version "1.1.25" + resolved "https://registry.yarnpkg.com/node-releases/-/node-releases-1.1.25.tgz#0c2d7dbc7fed30fbe02a9ee3007b8c90bf0133d3" + integrity sha512-fI5BXuk83lKEoZDdH3gRhtsNgh05/wZacuXkgbiYkceE7+QIMXOg98n9ZV7mz27B+kFHnqHcUpscZZlGRSmTpQ== + dependencies: + semver "^5.3.0" + node-sass@^4.11.0: version "4.11.0" resolved "https://registry.yarnpkg.com/node-sass/-/node-sass-4.11.0.tgz#183faec398e9cbe93ba43362e2768ca988a6369a" @@ -7047,6 +8279,16 @@ normalize-path@^3.0.0: resolved "https://registry.yarnpkg.com/normalize-path/-/normalize-path-3.0.0.tgz#0dcd69ff23a1c9b11fd0978316644a0388216a65" integrity sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA== +normalize-url@^1.9.1: + version "1.9.1" + resolved "https://registry.yarnpkg.com/normalize-url/-/normalize-url-1.9.1.tgz#2cc0d66b31ea23036458436e3620d85954c66c3c" + integrity sha1-LMDWazHqIwNkWENuNiDYWVTGbDw= + dependencies: + object-assign "^4.0.1" + prepend-http "^1.0.0" + query-string "^4.1.0" + sort-keys "^1.0.0" + now-and-later@^2.0.0: version "2.0.0" resolved "https://registry.yarnpkg.com/now-and-later/-/now-and-later-2.0.0.tgz#bc61cbb456d79cb32207ce47ca05136ff2e7d6ee" @@ -7135,7 +8377,7 @@ object-visit@^1.0.0: dependencies: isobject "^3.0.0" -object.assign@^4.0.4: +object.assign@^4.0.4, object.assign@^4.1.0: version "4.1.0" resolved "https://registry.yarnpkg.com/object.assign/-/object.assign-4.1.0.tgz#968bf1100d7956bb3ca086f006f846b3bc4008da" integrity sha512-exHJeq6kBKj58mqGyTQ9DFvrZC/eR6OwxzoM9YRoGBqrXYonaFyGiFMuc9VZrXf7DarreEwMpurG3dd+CNyW5w== @@ -7405,7 +8647,19 @@ parse-asn1@^5.0.0: evp_bytestokey "^1.0.0" pbkdf2 "^3.0.3" -parse-filepath@^1.0.1: +parse-entities@^1.0.2, parse-entities@^1.1.0: + version "1.2.2" + resolved "https://registry.yarnpkg.com/parse-entities/-/parse-entities-1.2.2.tgz#c31bf0f653b6661354f8973559cb86dd1d5edf50" + integrity sha512-NzfpbxW/NPrzZ/yYSoQxyqUZMZXIdCfE0OIN4ESsnptHJECoUk3FZktxNuzQf4tjt5UEopnxpYJbvYuxIFDdsg== + dependencies: + character-entities "^1.0.0" + character-entities-legacy "^1.0.0" + character-reference-invalid "^1.0.0" + is-alphanumerical "^1.0.0" + is-decimal "^1.0.0" + is-hexadecimal "^1.0.0" + +parse-filepath@^1.0.1, parse-filepath@^1.0.2: version "1.0.2" resolved "https://registry.yarnpkg.com/parse-filepath/-/parse-filepath-1.0.2.tgz#a632127f53aaf3d15876f5872f3ffac763d6c891" integrity sha1-pjISf1Oq89FYdvWHLz/6x2PWyJE= @@ -7414,6 +8668,13 @@ parse-filepath@^1.0.1: map-cache "^0.2.0" path-root "^0.1.1" +parse-git-config@^0.2.0: + version "0.2.0" + resolved "https://registry.yarnpkg.com/parse-git-config/-/parse-git-config-0.2.0.tgz#272833fdd15fea146fb75d336d236b963b6ff706" + integrity sha1-Jygz/dFf6hRvt10zbSNrljtv9wY= + dependencies: + ini "^1.3.3" + parse-glob@^3.0.4: version "3.0.4" resolved "https://registry.yarnpkg.com/parse-glob/-/parse-glob-3.0.4.tgz#b2c376cfb11f35513badd173ef0bb6e3a388391c" @@ -7449,6 +8710,24 @@ parse-passwd@^1.0.0: resolved "https://registry.yarnpkg.com/parse-passwd/-/parse-passwd-1.0.0.tgz#6d5b934a456993b23d37f40a382d6f1666a8e5c6" integrity sha1-bVuTSkVpk7I9N/QKOC1vFmao5cY= +parse-path@^3.0.1: + version "3.0.4" + resolved "https://registry.yarnpkg.com/parse-path/-/parse-path-3.0.4.tgz#a48b7b529da41f34d9d1428602a39b29fc7180e4" + integrity sha512-wP70vtwv2DyrM2YoA7ZHVv4zIXa4P7dGgHlj+VwyXNDduLLVJ7NMY1zsFxjUUJ3DAwJLupGb1H5gMDDiNlJaxw== + dependencies: + is-ssh "^1.3.0" + protocols "^1.4.0" + +parse-url@^3.0.2: + version "3.0.2" + resolved "https://registry.yarnpkg.com/parse-url/-/parse-url-3.0.2.tgz#602787a7063a795d72b8673197505e72f60610be" + integrity sha1-YCeHpwY6eV1yuGcxl1BecvYGEL4= + dependencies: + is-ssh "^1.3.0" + normalize-url "^1.9.1" + parse-path "^3.0.1" + protocols "^1.4.0" + parse5@4.0.0: version "4.0.0" resolved "https://registry.yarnpkg.com/parse5/-/parse5-4.0.0.tgz#6d78656e3da8d78b4ec0b906f7c08ef1dfe3f608" @@ -7506,6 +8785,11 @@ path-parse@^1.0.5: resolved "https://registry.yarnpkg.com/path-parse/-/path-parse-1.0.5.tgz#3c1adf871ea9cd6c9431b6ea2bd74a0ff055c4c1" integrity sha1-PBrfhx6pzWyUMbbqK9dKD/BVxME= +path-parse@^1.0.6: + version "1.0.6" + resolved "https://registry.yarnpkg.com/path-parse/-/path-parse-1.0.6.tgz#d62dbb5679405d72c4737ec58600e9ddcf06d24c" + integrity sha512-GSmOT2EbHrINBf9SR7CDELwlJ8AENk3Qn7OikK4nFYAu3Ote2+JYNVvkpAEQm3/TLNEJFD/xZJjzyxg3KBWOzw== + path-root-regex@^0.1.0: version "0.1.2" resolved "https://registry.yarnpkg.com/path-root-regex/-/path-root-regex-0.1.2.tgz#bfccdc8df5b12dc52c8b43ec38d18d72c04ba96d" @@ -7539,6 +8823,13 @@ path-type@^2.0.0: dependencies: pify "^2.0.0" +path-type@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/path-type/-/path-type-3.0.0.tgz#cef31dc8e0a1a3bb0d105c0cd97cf3bf47f4e36f" + integrity sha512-T2ZUsdZFHgA3u4e5PfPbjd7HDDpxPnQb5jN0SrDsjNSuVXHJqtwTnWqG0B1jZrgmJ/7lj1EmVIByWt1gxGkWvg== + dependencies: + pify "^3.0.0" + pbkdf2@^3.0.3: version "3.0.17" resolved "https://registry.yarnpkg.com/pbkdf2/-/pbkdf2-3.0.17.tgz#976c206530617b14ebb32114239f7b09336e93a6" @@ -7570,7 +8861,7 @@ pify@^3.0.0: resolved "https://registry.yarnpkg.com/pify/-/pify-3.0.0.tgz#e5a4acd2c101fdf3d9a4d07f0dbc4db49dd28176" integrity sha1-5aSs0sEB/fPZpNB/DbxNtJ3SgXY= -pify@^4.0.1: +pify@^4.0.0, pify@^4.0.1: version "4.0.1" resolved "https://registry.yarnpkg.com/pify/-/pify-4.0.1.tgz#4b2cd25c50d598735c50292224fd8c6df41e3231" integrity sha512-uB80kBFb/tfd68bVleG9T5GGsGPjJrLAUpR5PZIrhBnIaRTQRjqdJSsIKkOP6OAIFbj7GOrcudc5pNjZ+geV2g== @@ -7726,6 +9017,11 @@ prelude-ls@~1.1.2: resolved "https://registry.yarnpkg.com/prelude-ls/-/prelude-ls-1.1.2.tgz#21932a549f5e52ffd9a827f570e04be62a97da54" integrity sha1-IZMqVJ9eUv/ZqCf1cOBL5iqX2lQ= +prepend-http@^1.0.0: + version "1.0.4" + resolved "https://registry.yarnpkg.com/prepend-http/-/prepend-http-1.0.4.tgz#d4f4562b0ce3696e41ac52d0e002e57a635dc6dc" + integrity sha1-1PRWKwzjaW5BrFLQ4ALlemNdxtw= + preserve@^0.2.0: version "0.2.0" resolved "https://registry.yarnpkg.com/preserve/-/preserve-0.2.0.tgz#815ed1f6ebc65926f865b310c0713bcb3315ce4b" @@ -7798,6 +9094,18 @@ prop-types@^15.6.2: loose-envify "^1.3.1" object-assign "^4.1.1" +property-information@^4.0.0: + version "4.2.0" + resolved "https://registry.yarnpkg.com/property-information/-/property-information-4.2.0.tgz#f0e66e07cbd6fed31d96844d958d153ad3eb486e" + integrity sha512-TlgDPagHh+eBKOnH2VYvk8qbwsCG/TAJdmTL7f1PROUcSO8qt/KSmShEQ/OKvock8X9tFjtqjCScyOkkkvIKVQ== + dependencies: + xtend "^4.0.1" + +protocols@^1.1.0, protocols@^1.4.0: + version "1.4.7" + resolved "https://registry.yarnpkg.com/protocols/-/protocols-1.4.7.tgz#95f788a4f0e979b291ffefcf5636ad113d037d32" + integrity sha512-Fx65lf9/YDn3hUX08XUc0J8rSux36rEsyiv21ZGUC1mOyeM3lTRpZLcrm8aAolzS4itwVfm7TAPyxC2E5zd6xg== + proxy-addr@~2.0.5: version "2.0.5" resolved "https://registry.yarnpkg.com/proxy-addr/-/proxy-addr-2.0.5.tgz#34cbd64a2d81f4b1fd21e76f9f06c8a45299ee34" @@ -7902,7 +9210,7 @@ puppeteer@^1.17.0: rimraf "^2.6.1" ws "^6.1.0" -qs@6.7.0: +qs@6.7.0, qs@^6.4.0: version "6.7.0" resolved "https://registry.yarnpkg.com/qs/-/qs-6.7.0.tgz#41dc1a015e3d581f1621776be31afb2876a9b1bc" integrity sha512-VCdBRNFTX1fyE7Nb6FYoURo/SPe62QCaAyzJvUjwRaIsc+NePBEniHlvxFmmX56+HZphIGtV0XeCirBtpDrTyQ== @@ -7912,6 +9220,14 @@ qs@~6.5.2: resolved "https://registry.yarnpkg.com/qs/-/qs-6.5.2.tgz#cb3ae806e8740444584ef154ce8ee98d403f3e36" integrity sha512-N5ZAX4/LxJmF+7wN74pUD6qAh9/wnvdQcjq9TZjevvXzSUo7bfmw91saqMjzGS2xq91/odN2dW/WOl7qQHNDGA== +query-string@^4.1.0: + version "4.3.4" + resolved "https://registry.yarnpkg.com/query-string/-/query-string-4.3.4.tgz#bbb693b9ca915c232515b228b1a02b609043dbeb" + integrity sha1-u7aTucqRXCMlFbIosaArYJBD2+s= + dependencies: + object-assign "^4.1.0" + strict-uri-encode "^1.0.0" + querystring-es3@^0.2.0: version "0.2.1" resolved "https://registry.yarnpkg.com/querystring-es3/-/querystring-es3-0.2.1.tgz#9ec61f79049875707d69414596fd907a4d711e73" @@ -7965,6 +9281,14 @@ raw-body@2.4.0: iconv-lite "0.4.24" unpipe "1.0.0" +raw-body@~1.1.0: + version "1.1.7" + resolved "https://registry.yarnpkg.com/raw-body/-/raw-body-1.1.7.tgz#1d027c2bfa116acc6623bca8f00016572a87d425" + integrity sha1-HQJ8K/oRasxmI7yo8AAWVyqH1CU= + dependencies: + bytes "1" + string_decoder "0.10" + rc@^1.2.7: version "1.2.8" resolved "https://registry.yarnpkg.com/rc/-/rc-1.2.8.tgz#cd924bf5200a075b83c188cd6b9e211b7fc0d3ed" @@ -7991,6 +9315,14 @@ read-pkg-up@^2.0.0: find-up "^2.0.0" read-pkg "^2.0.0" +read-pkg-up@^4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/read-pkg-up/-/read-pkg-up-4.0.0.tgz#1b221c6088ba7799601c808f91161c66e58f8978" + integrity sha512-6etQSH7nJGsK0RbG/2TeDzZFa8shjQ1um+SwQQ5cwKy0dhSXdOncEhb1CPpvQG4h7FyOV6EB6YlV0yJvZQNAkA== + dependencies: + find-up "^3.0.0" + read-pkg "^3.0.0" + read-pkg@^1.0.0: version "1.1.0" resolved "https://registry.yarnpkg.com/read-pkg/-/read-pkg-1.1.0.tgz#f5ffaa5ecd29cb31c0474bca7d756b6bb29e3f28" @@ -8009,6 +9341,15 @@ read-pkg@^2.0.0: normalize-package-data "^2.3.2" path-type "^2.0.0" +read-pkg@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/read-pkg/-/read-pkg-3.0.0.tgz#9cbc686978fee65d16c00e2b19c237fcf6e38389" + integrity sha1-nLxoaXj+5l0WwA4rGcI3/Pbjg4k= + dependencies: + load-json-file "^4.0.0" + normalize-package-data "^2.3.2" + path-type "^3.0.0" + read-pkg@^4.0.1: version "4.0.1" resolved "https://registry.yarnpkg.com/read-pkg/-/read-pkg-4.0.1.tgz#963625378f3e1c4d48c85872b5a6ec7d5d093237" @@ -8086,6 +9427,31 @@ readable-stream@~1.1.9: isarray "0.0.1" string_decoder "~0.10.x" +readable-stream@~2.0.0: + version "2.0.6" + resolved "https://registry.yarnpkg.com/readable-stream/-/readable-stream-2.0.6.tgz#8f90341e68a53ccc928788dacfcd11b36eb9b78e" + integrity sha1-j5A0HmilPMySh4jaz80Rs265t44= + dependencies: + core-util-is "~1.0.0" + inherits "~2.0.1" + isarray "~1.0.0" + process-nextick-args "~1.0.6" + string_decoder "~0.10.x" + util-deprecate "~1.0.1" + +readable-stream@~2.1.0: + version "2.1.5" + resolved "https://registry.yarnpkg.com/readable-stream/-/readable-stream-2.1.5.tgz#66fa8b720e1438b364681f2ad1a63c618448c9d0" + integrity sha1-ZvqLcg4UOLNkaB8q0aY8YYRIydA= + dependencies: + buffer-shims "^1.0.0" + core-util-is "~1.0.0" + inherits "~2.0.1" + isarray "~1.0.0" + process-nextick-args "~1.0.6" + string_decoder "~0.10.x" + util-deprecate "~1.0.1" + readdirp@^2.0.0: version "2.1.0" resolved "https://registry.yarnpkg.com/readdirp/-/readdirp-2.1.0.tgz#4ed0ad060df3073300c48440373f72d1cc642d78" @@ -8134,6 +9500,13 @@ regenerate-unicode-properties@^7.0.0: dependencies: regenerate "^1.4.0" +regenerate-unicode-properties@^8.0.2: + version "8.1.0" + resolved "https://registry.yarnpkg.com/regenerate-unicode-properties/-/regenerate-unicode-properties-8.1.0.tgz#ef51e0f0ea4ad424b77bf7cb41f3e015c70a3f0e" + integrity sha512-LGZzkgtLY79GeXLm8Dp0BVLdQlWICzBnJz/ipWUgo59qBaZ+BHtq51P2q1uVZlppMuUAT37SDk39qUbjTWB7bA== + dependencies: + regenerate "^1.4.0" + regenerate@^1.2.1, regenerate@^1.4.0: version "1.4.0" resolved "https://registry.yarnpkg.com/regenerate/-/regenerate-1.4.0.tgz#4a856ec4b56e4077c557589cae85e7a4c8869a11" @@ -8156,6 +9529,13 @@ regenerator-transform@^0.13.3: dependencies: private "^0.1.6" +regenerator-transform@^0.14.0: + version "0.14.0" + resolved "https://registry.yarnpkg.com/regenerator-transform/-/regenerator-transform-0.14.0.tgz#2ca9aaf7a2c239dd32e4761218425b8c7a86ecaf" + integrity sha512-rtOelq4Cawlbmq9xuMR5gdFmv7ku/sFoB7sRiywx7aq53bc52b4j6zvH7Te1Vt/X2YveDKnCGUbioieU7FEL3w== + dependencies: + private "^0.1.6" + regex-cache@^0.4.2: version "0.4.3" resolved "https://registry.yarnpkg.com/regex-cache/-/regex-cache-0.4.3.tgz#9b1a6c35d4d0dfcef5711ae651e8e9d3d7114145" @@ -8172,6 +9552,11 @@ regex-not@^1.0.0, regex-not@^1.0.2: extend-shallow "^3.0.2" safe-regex "^1.1.0" +regexp-tree@^0.1.6: + version "0.1.11" + resolved "https://registry.yarnpkg.com/regexp-tree/-/regexp-tree-0.1.11.tgz#c9c7f00fcf722e0a56c7390983a7a63dd6c272f3" + integrity sha512-7/l/DgapVVDzZobwMCCgMlqiqyLFJ0cduo/j+3BcDJIB+yJdsYCfKuI3l/04NV+H/rfNRdPIDbXNZHM9XvQatg== + regexpp@^2.0.0, regexpp@^2.0.1: version "2.0.1" resolved "https://registry.yarnpkg.com/regexpp/-/regexpp-2.0.1.tgz#8d19d31cf632482b589049f8281f93dbcba4d07f" @@ -8198,6 +9583,18 @@ regexpu-core@^4.1.3, regexpu-core@^4.2.0: unicode-match-property-ecmascript "^1.0.4" unicode-match-property-value-ecmascript "^1.0.2" +regexpu-core@^4.5.4: + version "4.5.4" + resolved "https://registry.yarnpkg.com/regexpu-core/-/regexpu-core-4.5.4.tgz#080d9d02289aa87fe1667a4f5136bc98a6aebaae" + integrity sha512-BtizvGtFQKGPUcTy56o3nk1bGRp4SZOTYrDtGNlqCQufptV5IkkLN6Emw+yunAJjzf+C9FQFtvq7IoA3+oMYHQ== + dependencies: + regenerate "^1.4.0" + regenerate-unicode-properties "^8.0.2" + regjsgen "^0.5.0" + regjsparser "^0.6.0" + unicode-match-property-ecmascript "^1.0.4" + unicode-match-property-value-ecmascript "^1.1.0" + regjsgen@^0.2.0: version "0.2.0" resolved "https://registry.yarnpkg.com/regjsgen/-/regjsgen-0.2.0.tgz#6c016adeac554f75823fe37ac05b92d5a4edb1f7" @@ -8227,6 +9624,97 @@ relateurl@0.2.x: resolved "https://registry.yarnpkg.com/relateurl/-/relateurl-0.2.7.tgz#54dbf377e51440aca90a4cd274600d3ff2d888a9" integrity sha1-VNvzd+UUQKypCkzSdGANP/LYiKk= +remark-html@^8.0.0: + version "8.0.0" + resolved "https://registry.yarnpkg.com/remark-html/-/remark-html-8.0.0.tgz#9fcb859a6f3cb40f3ef15402950f1a62ec301b3a" + integrity sha512-3V2391GL3hxKhrkzYOyfPpxJ6taIKLCfuLVqumeWQOk3H9nTtSQ8St8kMYkBVIEAquXN1chT83qJ/2lAW+dpEg== + dependencies: + hast-util-sanitize "^1.0.0" + hast-util-to-html "^4.0.0" + mdast-util-to-hast "^3.0.0" + xtend "^4.0.1" + +remark-parse@^5.0.0: + version "5.0.0" + resolved "https://registry.yarnpkg.com/remark-parse/-/remark-parse-5.0.0.tgz#4c077f9e499044d1d5c13f80d7a98cf7b9285d95" + integrity sha512-b3iXszZLH1TLoyUzrATcTQUZrwNl1rE70rVdSruJFlDaJ9z5aMkhrG43Pp68OgfHndL/ADz6V69Zow8cTQu+JA== + dependencies: + collapse-white-space "^1.0.2" + is-alphabetical "^1.0.0" + is-decimal "^1.0.0" + is-whitespace-character "^1.0.0" + is-word-character "^1.0.0" + markdown-escapes "^1.0.0" + parse-entities "^1.1.0" + repeat-string "^1.5.4" + state-toggle "^1.0.0" + trim "0.0.1" + trim-trailing-lines "^1.0.0" + unherit "^1.0.4" + unist-util-remove-position "^1.0.0" + vfile-location "^2.0.0" + xtend "^4.0.1" + +remark-reference-links@^4.0.1: + version "4.0.4" + resolved "https://registry.yarnpkg.com/remark-reference-links/-/remark-reference-links-4.0.4.tgz#190579a0d6b002859d6cdbdc5aeb8bbdae4e06ab" + integrity sha512-+2X8hwSQqxG4tvjYZNrTcEC+bXp8shQvwRGG6J/rnFTvBoU4G0BBviZoqKGZizLh/DG+0gSYhiDDWCqyxXW1iQ== + dependencies: + unist-util-visit "^1.0.0" + +remark-slug@^5.0.0: + version "5.1.2" + resolved "https://registry.yarnpkg.com/remark-slug/-/remark-slug-5.1.2.tgz#715ecdef8df1226786204b1887d31ab16aa24609" + integrity sha512-DWX+Kd9iKycqyD+/B+gEFO3jjnt7Yg1O05lygYSNTe5i5PIxxxPjp5qPBDxPIzp5wreF7+1ROCwRgjEcqmzr3A== + dependencies: + github-slugger "^1.0.0" + mdast-util-to-string "^1.0.0" + unist-util-visit "^1.0.0" + +remark-stringify@^5.0.0: + version "5.0.0" + resolved "https://registry.yarnpkg.com/remark-stringify/-/remark-stringify-5.0.0.tgz#336d3a4d4a6a3390d933eeba62e8de4bd280afba" + integrity sha512-Ws5MdA69ftqQ/yhRF9XhVV29mhxbfGhbz0Rx5bQH+oJcNhhSM6nCu1EpLod+DjrFGrU0BMPs+czVmJZU7xiS7w== + dependencies: + ccount "^1.0.0" + is-alphanumeric "^1.0.0" + is-decimal "^1.0.0" + is-whitespace-character "^1.0.0" + longest-streak "^2.0.1" + markdown-escapes "^1.0.0" + markdown-table "^1.1.0" + mdast-util-compact "^1.0.0" + parse-entities "^1.0.2" + repeat-string "^1.5.4" + state-toggle "^1.0.0" + stringify-entities "^1.0.1" + unherit "^1.0.4" + xtend "^4.0.1" + +remark-toc@^5.0.0: + version "5.1.1" + resolved "https://registry.yarnpkg.com/remark-toc/-/remark-toc-5.1.1.tgz#8c229d6f834cdb43fde6685e2d43248d3fc82d78" + integrity sha512-vCPW4YOsm2CfyuScdktM9KDnJXVHJsd/ZeRtst+dnBU3B3KKvt8bc+bs5syJjyptAHfqo7H+5Uhz+2blWBfwow== + dependencies: + mdast-util-toc "^3.0.0" + remark-slug "^5.0.0" + +remark@^9.0.0: + version "9.0.0" + resolved "https://registry.yarnpkg.com/remark/-/remark-9.0.0.tgz#c5cfa8ec535c73a67c4b0f12bfdbd3a67d8b2f60" + integrity sha512-amw8rGdD5lHbMEakiEsllmkdBP+/KpjW/PRK6NSGPZKCQowh0BT4IWXDAkRMyG3SB9dKPXWMviFjNusXzXNn3A== + dependencies: + remark-parse "^5.0.0" + remark-stringify "^5.0.0" + unified "^6.0.0" + +remote-origin-url@0.4.0: + version "0.4.0" + resolved "https://registry.yarnpkg.com/remote-origin-url/-/remote-origin-url-0.4.0.tgz#4d3e2902f34e2d37d1c263d87710b77eb4086a30" + integrity sha1-TT4pAvNOLTfRwmPYdxC3frQIajA= + dependencies: + parse-git-config "^0.2.0" + remove-bom-buffer@^3.0.0: version "3.0.0" resolved "https://registry.yarnpkg.com/remove-bom-buffer/-/remove-bom-buffer-3.0.0.tgz#c2bf1e377520d324f623892e33c10cac2c252b53" @@ -8254,7 +9742,7 @@ repeat-element@^1.1.2: resolved "https://registry.yarnpkg.com/repeat-element/-/repeat-element-1.1.2.tgz#ef089a178d1483baae4d93eb98b4f9e4e11d990a" integrity sha1-7wiaF40Ug7quTZPrmLT55OEdmQo= -repeat-string@^1.5.2, repeat-string@^1.6.1: +repeat-string@^1.5.0, repeat-string@^1.5.2, repeat-string@^1.5.4, repeat-string@^1.6.1: version "1.6.1" resolved "https://registry.yarnpkg.com/repeat-string/-/repeat-string-1.6.1.tgz#8dcae470e1c88abc2d600fff4a776286da75e637" integrity sha1-jcrkcOHIirwtYA//Sndihtp15jc= @@ -8271,7 +9759,7 @@ replace-ext@0.0.1: resolved "https://registry.yarnpkg.com/replace-ext/-/replace-ext-0.0.1.tgz#29bbd92078a739f0bcce2b4ee41e837953522924" integrity sha1-KbvZIHinOfC8zitO5B6DeVNSKSQ= -replace-ext@^1.0.0: +replace-ext@1.0.0, replace-ext@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/replace-ext/-/replace-ext-1.0.0.tgz#de63128373fcbf7c3ccfa4de5a480c45a67958eb" integrity sha1-3mMSg3P8v3w8z6TeWkgMRaZ5WOs= @@ -8400,6 +9888,13 @@ resolve@1.1.7: resolved "https://registry.yarnpkg.com/resolve/-/resolve-1.1.7.tgz#203114d82ad2c5ed9e8e0411b3932875e889e97b" integrity sha1-IDEU2CrSxe2ejgQRs5ModeiJ6Xs= +resolve@^1.1.3: + version "1.11.1" + resolved "https://registry.yarnpkg.com/resolve/-/resolve-1.11.1.tgz#ea10d8110376982fef578df8fc30b9ac30a07a3e" + integrity sha512-vIpgF6wfuJOZI7KKKSP+HmiKggadPQAdsp5HiC1mvqnfp0gF1vdwgBWZIdrVft9pgqoMFQN+R7BSWZiBxx+BBw== + dependencies: + path-parse "^1.0.6" + resolve@^1.1.6, resolve@^1.1.7, resolve@^1.3.2, resolve@^1.4.0, resolve@^1.5.0, resolve@^1.6.0, resolve@^1.8.1: version "1.8.1" resolved "https://registry.yarnpkg.com/resolve/-/resolve-1.8.1.tgz#82f1ec19a423ac1fbd080b0bab06ba36e84a7a26" @@ -8505,6 +10000,11 @@ safe-buffer@^5.0.1, safe-buffer@^5.1.0, safe-buffer@~5.1.0, safe-buffer@~5.1.1: resolved "https://registry.yarnpkg.com/safe-buffer/-/safe-buffer-5.1.1.tgz#893312af69b2123def71f57889001671eeb2c853" integrity sha512-kKvNJn6Mm93gAczWVJg7wH+wGYWNrDHdWvpUmHyEsgCtIwwo3bqPtV4tR5tuPaUhTOo/kvhVwd8XwwOllGYkbg== +safe-json-parse@~1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/safe-json-parse/-/safe-json-parse-1.0.1.tgz#3e76723e38dfdda13c9b1d29a1e07ffee4b30b57" + integrity sha1-PnZyPjjf3aE8mx0poeB//uSzC1c= + safe-regex@^1.1.0: version "1.1.0" resolved "https://registry.yarnpkg.com/safe-regex/-/safe-regex-1.1.0.tgz#40a3669f3b077d1e943d44629e157dd48023bf2e" @@ -8638,6 +10138,11 @@ semver@^6.0.0: resolved "https://registry.yarnpkg.com/semver/-/semver-6.1.1.tgz#53f53da9b30b2103cd4f15eab3a18ecbcb210c9b" integrity sha512-rWYq2e5iYW+fFe/oPPtYJxYgjBm8sC4rmoGdUOgBB7VnwKt6HrL793l2voH1UlsyYZpJ4g0wfjnTEO1s1NP2eQ== +semver@^6.1.1: + version "6.2.0" + resolved "https://registry.yarnpkg.com/semver/-/semver-6.2.0.tgz#4d813d9590aaf8a9192693d6c85b9344de5901db" + integrity sha512-jdFC1VdUGT/2Scgbimf7FSx9iJLXoqfglSF+gJeuNWVpiE37OIbc1jywR/GJyFdz3mnkz2/id0L0J/cr0izR5A== + semver@~5.3.0: version "5.3.0" resolved "https://registry.yarnpkg.com/semver/-/semver-5.3.0.tgz#9b2ce5d3de02d17c6012ad326aa6b4d0cf54f94f" @@ -8873,6 +10378,13 @@ sockjs@0.3.19: faye-websocket "^0.10.0" uuid "^3.0.1" +sort-keys@^1.0.0: + version "1.1.2" + resolved "https://registry.yarnpkg.com/sort-keys/-/sort-keys-1.1.2.tgz#441b6d4d346798f1b4e49e8920adfba0e543f9ad" + integrity sha1-RBttTTRnmPG05J6JIK37oOVD+a0= + dependencies: + is-plain-obj "^1.0.0" + source-list-map@^2.0.0: version "2.0.1" resolved "https://registry.yarnpkg.com/source-list-map/-/source-list-map-2.0.1.tgz#3993bd873bfc48479cca9ea3a547835c7c154b34" @@ -8946,6 +10458,11 @@ source-map@~0.1.33: dependencies: amdefine ">=0.0.4" +space-separated-tokens@^1.0.0: + version "1.1.4" + resolved "https://registry.yarnpkg.com/space-separated-tokens/-/space-separated-tokens-1.1.4.tgz#27910835ae00d0adfcdbd0ad7e611fb9544351fa" + integrity sha512-UyhMSmeIqZrQn2UdjYpxEkwY9JUrn8pP+7L4f91zRzOQuI8MF1FGLfYU9DKCYeLdo7LXMxwrX5zKFy7eeeVHuA== + sparkles@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/sparkles/-/sparkles-1.0.0.tgz#1acbbfb592436d10bbe8f785b7cc6f82815012c3" @@ -9070,6 +10587,11 @@ standard@^12.0.1: eslint-plugin-standard "~4.0.0" standard-engine "~9.0.0" +state-toggle@^1.0.0: + version "1.0.2" + resolved "https://registry.yarnpkg.com/state-toggle/-/state-toggle-1.0.2.tgz#75e93a61944116b4959d665c8db2d243631d6ddc" + integrity sha512-8LpelPGR0qQM4PnfLiplOQNJcIN1/r2Gy0xKB2zKnIW2YzPMt2sR4I/+gtPjhN7Svh9kw+zqEg2SFwpBO9iNiw== + static-extend@^0.1.1: version "0.1.2" resolved "https://registry.yarnpkg.com/static-extend/-/static-extend-0.1.2.tgz#60809c39cbff55337226fd5e0b520f341f1fb5c6" @@ -9095,6 +10617,13 @@ stealthy-require@^1.1.0: resolved "https://registry.yarnpkg.com/stealthy-require/-/stealthy-require-1.1.1.tgz#35b09875b4ff49f26a777e509b3090a3226bf24b" integrity sha1-NbCYdbT/SfJqd35QmzCQoyJr8ks= +stream-array@^1.1.2: + version "1.1.2" + resolved "https://registry.yarnpkg.com/stream-array/-/stream-array-1.1.2.tgz#9e5f7345f2137c30ee3b498b9114e80b52bb7eb5" + integrity sha1-nl9zRfITfDDuO0mLkRToC1K7frU= + dependencies: + readable-stream "~2.1.0" + stream-browserify@^2.0.1: version "2.0.1" resolved "https://registry.yarnpkg.com/stream-browserify/-/stream-browserify-2.0.1.tgz#66266ee5f9bdb9940a4e4514cafb43bb71e5c9db" @@ -9103,6 +10632,14 @@ stream-browserify@^2.0.1: inherits "~2.0.1" readable-stream "^2.0.2" +stream-combiner2@^1.1.1: + version "1.1.1" + resolved "https://registry.yarnpkg.com/stream-combiner2/-/stream-combiner2-1.1.1.tgz#fb4d8a1420ea362764e21ad4780397bebcb41cbe" + integrity sha1-+02KFCDqNidk4hrUeAOXvry0HL4= + dependencies: + duplexer2 "~0.1.0" + readable-stream "^2.0.2" + stream-each@^1.1.0: version "1.2.3" resolved "https://registry.yarnpkg.com/stream-each/-/stream-each-1.2.3.tgz#ebe27a0c389b04fbcc233642952e10731afa9bae" @@ -9132,6 +10669,11 @@ stream-shift@^1.0.0: resolved "https://registry.yarnpkg.com/stream-shift/-/stream-shift-1.0.0.tgz#d5c752825e5367e786f78e18e445ea223a155952" integrity sha1-1cdSgl5TZ+eG944Y5EXqIjoVWVI= +strict-uri-encode@^1.0.0: + version "1.1.0" + resolved "https://registry.yarnpkg.com/strict-uri-encode/-/strict-uri-encode-1.1.0.tgz#279b225df1d582b1f54e65addd4352e18faa0713" + integrity sha1-J5siXfHVgrH1TmWt3UNS4Y+qBxM= + string-length@^2.0.0: version "2.0.0" resolved "https://registry.yarnpkg.com/string-length/-/string-length-2.0.0.tgz#d40dbb686a3ace960c1cffca562bf2c45f8363ed" @@ -9140,6 +10682,11 @@ string-length@^2.0.0: astral-regex "^1.0.0" strip-ansi "^4.0.0" +string-template@~0.2.1: + version "0.2.1" + resolved "https://registry.yarnpkg.com/string-template/-/string-template-0.2.1.tgz#42932e598a352d01fc22ec3367d9d84eec6c9add" + integrity sha1-QpMuWYo1LQH8IuwzZ9nYTuxsmt0= + string-width@^1.0.1, string-width@^1.0.2: version "1.0.2" resolved "https://registry.yarnpkg.com/string-width/-/string-width-1.0.2.tgz#118bdf5b8cdc51a2a7e70d211e07e2b0b9b107d3" @@ -9157,6 +10704,20 @@ string-width@^2.0.0, string-width@^2.1.0, string-width@^2.1.1: is-fullwidth-code-point "^2.0.0" strip-ansi "^4.0.0" +string-width@^4.0.0: + version "4.1.0" + resolved "https://registry.yarnpkg.com/string-width/-/string-width-4.1.0.tgz#ba846d1daa97c3c596155308063e075ed1c99aff" + integrity sha512-NrX+1dVVh+6Y9dnQ19pR0pP4FiEIlUvdTGn8pw6CKTNq5sgib2nIhmUNT5TAmhWmvKr3WcxBcP3E8nWezuipuQ== + dependencies: + emoji-regex "^8.0.0" + is-fullwidth-code-point "^3.0.0" + strip-ansi "^5.2.0" + +string_decoder@0.10, string_decoder@~0.10.x: + version "0.10.31" + resolved "https://registry.yarnpkg.com/string_decoder/-/string_decoder-0.10.31.tgz#62e203bc41766c6c28c9fc84301dab1c5310fa94" + integrity sha1-YuIDvEF2bGwoyfyEMB2rHFMQ+pQ= + string_decoder@^1.0.0, string_decoder@^1.1.1: version "1.2.0" resolved "https://registry.yarnpkg.com/string_decoder/-/string_decoder-1.2.0.tgz#fe86e738b19544afe70469243b2a1ee9240eae8d" @@ -9164,11 +10725,6 @@ string_decoder@^1.0.0, string_decoder@^1.1.1: dependencies: safe-buffer "~5.1.0" -string_decoder@~0.10.x: - version "0.10.31" - resolved "https://registry.yarnpkg.com/string_decoder/-/string_decoder-0.10.31.tgz#62e203bc41766c6c28c9fc84301dab1c5310fa94" - integrity sha1-YuIDvEF2bGwoyfyEMB2rHFMQ+pQ= - string_decoder@~1.0.3: version "1.0.3" resolved "https://registry.yarnpkg.com/string_decoder/-/string_decoder-1.0.3.tgz#0fc67d7c141825de94282dd536bec6b9bce860ab" @@ -9183,6 +10739,16 @@ string_decoder@~1.1.1: dependencies: safe-buffer "~5.1.0" +stringify-entities@^1.0.1: + version "1.3.2" + resolved "https://registry.yarnpkg.com/stringify-entities/-/stringify-entities-1.3.2.tgz#a98417e5471fd227b3e45d3db1861c11caf668f7" + integrity sha512-nrBAQClJAPN2p+uGCVJRPIPakKeKWZ9GtBCmormE7pWOSlHat7+x5A8gx85M7HM5Dt0BP3pP5RhVW77WdbJJ3A== + dependencies: + character-entities-html4 "^1.0.0" + character-entities-legacy "^1.0.0" + is-alphanumerical "^1.0.0" + is-hexadecimal "^1.0.0" + strip-ansi@^3.0.0, strip-ansi@^3.0.1: version "3.0.1" resolved "https://registry.yarnpkg.com/strip-ansi/-/strip-ansi-3.0.1.tgz#6a385fb8853d952d5ff05d0e8aaf94278dc63dcf" @@ -9197,6 +10763,13 @@ strip-ansi@^4.0.0: dependencies: ansi-regex "^3.0.0" +strip-ansi@^5.2.0: + version "5.2.0" + resolved "https://registry.yarnpkg.com/strip-ansi/-/strip-ansi-5.2.0.tgz#8c9a536feb6afc962bdfa5b104a5091c1ad9c0ae" + integrity sha512-DuRs1gKbBqsMKIZlrffwlug8MHkcnpjs5VPmL1PAh+mA30U0DTotfDZ0d2UUsXpPmPmMMJ6W773MaA3J+lbiWA== + dependencies: + ansi-regex "^4.1.0" + strip-ansi@~0.1.0: version "0.1.1" resolved "https://registry.yarnpkg.com/strip-ansi/-/strip-ansi-0.1.1.tgz#39e8a98d044d150660abe4a6808acf70bb7bc991" @@ -9238,6 +10811,13 @@ strip-json-comments@^2.0.1, strip-json-comments@~2.0.1: resolved "https://registry.yarnpkg.com/strip-json-comments/-/strip-json-comments-2.0.1.tgz#3c531942e908c2697c0ec344858c286c7ca0a60a" integrity sha1-PFMZQukIwml8DsNEhYwobHygpgo= +subarg@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/subarg/-/subarg-1.0.0.tgz#f62cf17581e996b48fc965699f54c06ae268b8d2" + integrity sha1-9izxdYHplrSPyWVpn1TAauJouNI= + dependencies: + minimist "^1.1.0" + supports-color@^2.0.0: version "2.0.0" resolved "https://registry.yarnpkg.com/supports-color/-/supports-color-2.0.0.tgz#535d045ce6b6363fa40117084629995e9df324c7" @@ -9264,7 +10844,7 @@ supports-color@^5.5.0: dependencies: has-flag "^3.0.0" -supports-color@^6.1.0: +supports-color@^6.0.0, supports-color@^6.1.0: version "6.1.0" resolved "https://registry.yarnpkg.com/supports-color/-/supports-color-6.1.0.tgz#0764abc69c63d5ac842dd4867e8d025e880df8f3" integrity sha512-qe1jfm1Mg7Nq/NSh6XE24gPXROEVsWHxC1LIx//XNlD9iw7YZQGjZNjYN7xGaEG6iKdA8EtNFW6R0gjnVXp+wQ== @@ -9418,7 +10998,7 @@ through2@~0.6.3: readable-stream ">=1.0.33-1 <1.1.0-0" xtend ">=4.0.0 <4.1.0-0" -through@^2.3.6: +"through@>=2.2.7 <3", through@^2.3.6: version "2.3.8" resolved "https://registry.yarnpkg.com/through/-/through-2.3.8.tgz#0dd4c9ffaabc357960b1b724115d7e0e86a2e1f5" integrity sha1-DdTJ/6q8NXlgsbckEV1+Doai4fU= @@ -9440,6 +11020,18 @@ timers-browserify@^2.0.4: dependencies: setimmediate "^1.0.4" +tiny-lr@^1.1.0: + version "1.1.1" + resolved "https://registry.yarnpkg.com/tiny-lr/-/tiny-lr-1.1.1.tgz#9fa547412f238fedb068ee295af8b682c98b2aab" + integrity sha512-44yhA3tsaRoMOjQQ+5v5mVdqef+kH6Qze9jTpqtVufgYjYt08zyZAwNwwVBj3i1rJMnR52IxOW0LK0vBzgAkuA== + dependencies: + body "^5.1.0" + debug "^3.1.0" + faye-websocket "~0.10.0" + livereload-js "^2.3.0" + object-assign "^4.1.0" + qs "^6.4.0" + tmp@^0.0.33: version "0.0.33" resolved "https://registry.yarnpkg.com/tmp/-/tmp-0.0.33.tgz#6d34335889768d21b2bcda0aa277ced3b1bfadf9" @@ -9547,6 +11139,11 @@ tree-kill@^1.2.1: resolved "https://registry.yarnpkg.com/tree-kill/-/tree-kill-1.2.1.tgz#5398f374e2f292b9dcc7b2e71e30a5c3bb6c743a" integrity sha512-4hjqbObwlh2dLyW4tcz0Ymw0ggoaVDMveUB9w8kFSQScdRLo0gxO9J7WFcUBo+W3C1TLdFIEwNOWebgZZ0RH9Q== +trim-lines@^1.0.0: + version "1.1.2" + resolved "https://registry.yarnpkg.com/trim-lines/-/trim-lines-1.1.2.tgz#c8adbdbdae21bb5c2766240a661f693afe23e59b" + integrity sha512-3GOuyNeTqk3FAqc3jOJtw7FTjYl94XBR5aD9QnDbK/T4CA9sW/J0l9RoaRPE9wyPP7NF331qnHnvJFBJ+IDkmQ== + trim-newlines@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/trim-newlines/-/trim-newlines-1.0.0.tgz#5887966bb582a4503a41eb524f7d35011815a613" @@ -9557,6 +11154,21 @@ trim-right@^1.0.1: resolved "https://registry.yarnpkg.com/trim-right/-/trim-right-1.0.1.tgz#cb2e1203067e0c8de1f614094b9fe45704ea6003" integrity sha1-yy4SAwZ+DI3h9hQJS5/kVwTqYAM= +trim-trailing-lines@^1.0.0: + version "1.1.2" + resolved "https://registry.yarnpkg.com/trim-trailing-lines/-/trim-trailing-lines-1.1.2.tgz#d2f1e153161152e9f02fabc670fb40bec2ea2e3a" + integrity sha512-MUjYItdrqqj2zpcHFTkMa9WAv4JHTI6gnRQGPFLrt5L9a6tRMiDnIqYl8JBvu2d2Tc3lWJKQwlGCp0K8AvCM+Q== + +trim@0.0.1: + version "0.0.1" + resolved "https://registry.yarnpkg.com/trim/-/trim-0.0.1.tgz#5858547f6b290757ee95cccc666fb50084c460dd" + integrity sha1-WFhUf2spB1fulczMZm+1AITEYN0= + +trough@^1.0.0: + version "1.0.4" + resolved "https://registry.yarnpkg.com/trough/-/trough-1.0.4.tgz#3b52b1f13924f460c3fbfd0df69b587dbcbc762e" + integrity sha512-tdzBRDGWcI1OpPVmChbdSKhvSVurznZ8X36AYURAcl+0o2ldlCY2XPzyXNNxwJwwyIU+rIglTCG4kxtNKBQH7Q== + "true-case-path@^1.0.2": version "1.0.3" resolved "https://registry.yarnpkg.com/true-case-path/-/true-case-path-1.0.3.tgz#f813b5a8c86b40da59606722b144e3225799f47d" @@ -9611,7 +11223,7 @@ type-is@~1.6.17, type-is@~1.6.18: media-typer "0.3.0" mime-types "~2.1.24" -typedarray@^0.0.6: +typedarray@^0.0.6, typedarray@~0.0.5: version "0.0.6" resolved "https://registry.yarnpkg.com/typedarray/-/typedarray-0.0.6.tgz#867ac74e3864187b1d3d47d996a78ec5c8830777" integrity sha1-hnrHTjhkGHsdPUfZlqeOxciDB3c= @@ -9659,6 +11271,14 @@ undertaker@^1.0.0: object.reduce "^1.0.0" undertaker-registry "^1.0.0" +unherit@^1.0.4: + version "1.1.2" + resolved "https://registry.yarnpkg.com/unherit/-/unherit-1.1.2.tgz#14f1f397253ee4ec95cec167762e77df83678449" + integrity sha512-W3tMnpaMG7ZY6xe/moK04U9fBhi6wEiCYHUW5Mop/wQHf12+79EQGwxYejNdhEz2mkqkBlGwm7pxmgBKMVUj0w== + dependencies: + inherits "^2.0.1" + xtend "^4.0.1" + unicode-canonical-property-names-ecmascript@^1.0.4: version "1.0.4" resolved "https://registry.yarnpkg.com/unicode-canonical-property-names-ecmascript/-/unicode-canonical-property-names-ecmascript-1.0.4.tgz#2619800c4c825800efdd8343af7dd9933cbe2818" @@ -9677,11 +11297,28 @@ unicode-match-property-value-ecmascript@^1.0.2: resolved "https://registry.yarnpkg.com/unicode-match-property-value-ecmascript/-/unicode-match-property-value-ecmascript-1.0.2.tgz#9f1dc76926d6ccf452310564fd834ace059663d4" integrity sha512-Rx7yODZC1L/T8XKo/2kNzVAQaRE88AaMvI1EF/Xnj3GW2wzN6fop9DDWuFAKUVFH7vozkz26DzP0qyWLKLIVPQ== +unicode-match-property-value-ecmascript@^1.1.0: + version "1.1.0" + resolved "https://registry.yarnpkg.com/unicode-match-property-value-ecmascript/-/unicode-match-property-value-ecmascript-1.1.0.tgz#5b4b426e08d13a80365e0d657ac7a6c1ec46a277" + integrity sha512-hDTHvaBk3RmFzvSl0UVrUmC3PuW9wKVnpoUDYH0JDkSIovzw+J5viQmeYHxVSBptubnr7PbH2e0fnpDRQnQl5g== + unicode-property-aliases-ecmascript@^1.0.4: version "1.0.4" resolved "https://registry.yarnpkg.com/unicode-property-aliases-ecmascript/-/unicode-property-aliases-ecmascript-1.0.4.tgz#5a533f31b4317ea76f17d807fa0d116546111dd0" integrity sha512-2WSLa6OdYd2ng8oqiGIWnJqyFArvhn+5vgx5GTxMbUYjCYKUcuKS62YLFF0R/BDGlB1yzXjQOLtPAfHsgirEpg== +unified@^6.0.0: + version "6.2.0" + resolved "https://registry.yarnpkg.com/unified/-/unified-6.2.0.tgz#7fbd630f719126d67d40c644b7e3f617035f6dba" + integrity sha512-1k+KPhlVtqmG99RaTbAv/usu85fcSRu3wY8X+vnsEhIxNP5VbVIDiXnLqyKIG+UMdyTg0ZX9EI6k2AfjJkHPtA== + dependencies: + bail "^1.0.0" + extend "^3.0.0" + is-plain-obj "^1.1.0" + trough "^1.0.0" + vfile "^2.0.0" + x-is-string "^0.1.0" + union-value@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/union-value/-/union-value-1.0.0.tgz#5c71c34cb5bad5dcebe3ea0cd08207ba5aa1aea4" @@ -9719,6 +11356,66 @@ unique-stream@^2.0.2: json-stable-stringify "^1.0.0" through2-filter "^2.0.0" +unist-builder@^1.0.1, unist-builder@^1.0.2: + version "1.0.4" + resolved "https://registry.yarnpkg.com/unist-builder/-/unist-builder-1.0.4.tgz#e1808aed30bd72adc3607f25afecebef4dd59e17" + integrity sha512-v6xbUPP7ILrT15fHGrNyHc1Xda8H3xVhP7/HAIotHOhVPjH5dCXA097C3Rry1Q2O+HbOLCao4hfPB+EYEjHgVg== + dependencies: + object-assign "^4.1.0" + +unist-util-generated@^1.1.0: + version "1.1.4" + resolved "https://registry.yarnpkg.com/unist-util-generated/-/unist-util-generated-1.1.4.tgz#2261c033d9fc23fae41872cdb7663746e972c1a7" + integrity sha512-SA7Sys3h3X4AlVnxHdvN/qYdr4R38HzihoEVY2Q2BZu8NHWDnw5OGcC/tXWjQfd4iG+M6qRFNIRGqJmp2ez4Ww== + +unist-util-is@^2.0.0, unist-util-is@^2.1.2: + version "2.1.3" + resolved "https://registry.yarnpkg.com/unist-util-is/-/unist-util-is-2.1.3.tgz#459182db31f4742fceaea88d429693cbf0043d20" + integrity sha512-4WbQX2iwfr/+PfM4U3zd2VNXY+dWtZsN1fLnWEi2QQXA4qyDYAZcDMfXUX0Cu6XZUHHAO9q4nyxxLT4Awk1qUA== + +unist-util-is@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/unist-util-is/-/unist-util-is-3.0.0.tgz#d9e84381c2468e82629e4a5be9d7d05a2dd324cd" + integrity sha512-sVZZX3+kspVNmLWBPAB6r+7D9ZgAFPNWm66f7YNb420RlQSbn+n8rG8dGZSkrER7ZIXGQYNm5pqC3v3HopH24A== + +unist-util-position@^3.0.0: + version "3.0.3" + resolved "https://registry.yarnpkg.com/unist-util-position/-/unist-util-position-3.0.3.tgz#fff942b879538b242096c148153826664b1ca373" + integrity sha512-28EpCBYFvnMeq9y/4w6pbnFmCUfzlsc41NJui5c51hOFjBA1fejcwc+5W4z2+0ECVbScG3dURS3JTVqwenzqZw== + +unist-util-remove-position@^1.0.0: + version "1.1.3" + resolved "https://registry.yarnpkg.com/unist-util-remove-position/-/unist-util-remove-position-1.1.3.tgz#d91aa8b89b30cb38bad2924da11072faa64fd972" + integrity sha512-CtszTlOjP2sBGYc2zcKA/CvNdTdEs3ozbiJ63IPBxh8iZg42SCCb8m04f8z2+V1aSk5a7BxbZKEdoDjadmBkWA== + dependencies: + unist-util-visit "^1.1.0" + +unist-util-stringify-position@^1.0.0, unist-util-stringify-position@^1.1.1: + version "1.1.2" + resolved "https://registry.yarnpkg.com/unist-util-stringify-position/-/unist-util-stringify-position-1.1.2.tgz#3f37fcf351279dcbca7480ab5889bb8a832ee1c6" + integrity sha512-pNCVrk64LZv1kElr0N1wPiHEUoXNVFERp+mlTg/s9R5Lwg87f9bM/3sQB99w+N9D/qnM9ar3+AKDBwo/gm/iQQ== + +unist-util-stringify-position@^2.0.0: + version "2.0.1" + resolved "https://registry.yarnpkg.com/unist-util-stringify-position/-/unist-util-stringify-position-2.0.1.tgz#de2a2bc8d3febfa606652673a91455b6a36fb9f3" + integrity sha512-Zqlf6+FRI39Bah8Q6ZnNGrEHUhwJOkHde2MHVk96lLyftfJJckaPslKgzhVcviXj8KcE9UJM9F+a4JEiBUTYgA== + dependencies: + "@types/unist" "^2.0.2" + +unist-util-visit-parents@^2.0.0: + version "2.1.2" + resolved "https://registry.yarnpkg.com/unist-util-visit-parents/-/unist-util-visit-parents-2.1.2.tgz#25e43e55312166f3348cae6743588781d112c1e9" + integrity sha512-DyN5vD4NE3aSeB+PXYNKxzGsfocxp6asDc2XXE3b0ekO2BaRUpBicbbUygfSvYfUz1IkmjFR1YF7dPklraMZ2g== + dependencies: + unist-util-is "^3.0.0" + +unist-util-visit@^1.0.0, unist-util-visit@^1.1.0, unist-util-visit@^1.3.0: + version "1.4.1" + resolved "https://registry.yarnpkg.com/unist-util-visit/-/unist-util-visit-1.4.1.tgz#4724aaa8486e6ee6e26d7ff3c8685960d560b1e3" + integrity sha512-AvGNk7Bb//EmJZyhtRUnNMEpId/AZ5Ph/KUpTI09WHQuDZHKovQ1oEv3mfmKpWKtoMzyMC4GLBm1Zy5k12fjIw== + dependencies: + unist-util-visit-parents "^2.0.0" + unpipe@1.0.0, unpipe@~1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/unpipe/-/unpipe-1.0.0.tgz#b2bf4ee8514aae6165b4817829d21b2ef49904ec" @@ -9860,7 +11557,70 @@ verror@1.10.0: core-util-is "1.0.2" extsprintf "^1.2.0" -vinyl-fs@^3.0.0: +vfile-location@^2.0.0: + version "2.0.5" + resolved "https://registry.yarnpkg.com/vfile-location/-/vfile-location-2.0.5.tgz#c83eb02f8040228a8d2b3f10e485be3e3433e0a2" + integrity sha512-Pa1ey0OzYBkLPxPZI3d9E+S4BmvfVwNAAXrrqGbwTVXWaX2p9kM1zZ+n35UtVM06shmWKH4RPRN8KI80qE3wNQ== + +vfile-message@^1.0.0: + version "1.1.1" + resolved "https://registry.yarnpkg.com/vfile-message/-/vfile-message-1.1.1.tgz#5833ae078a1dfa2d96e9647886cd32993ab313e1" + integrity sha512-1WmsopSGhWt5laNir+633LszXvZ+Z/lxveBf6yhGsqnQIhlhzooZae7zV6YVM1Sdkw68dtAW3ow0pOdPANugvA== + dependencies: + unist-util-stringify-position "^1.1.1" + +vfile-message@^2.0.0: + version "2.0.1" + resolved "https://registry.yarnpkg.com/vfile-message/-/vfile-message-2.0.1.tgz#951881861c22fc1eb39f873c0b93e336a64e8f6d" + integrity sha512-KtasSV+uVU7RWhUn4Lw+wW1Zl/nW8JWx7JCPps10Y9JRRIDeDXf8wfBLoOSsJLyo27DqMyAi54C6Jf/d6Kr2Bw== + dependencies: + "@types/unist" "^2.0.2" + unist-util-stringify-position "^2.0.0" + +vfile-reporter@^6.0.0: + version "6.0.0" + resolved "https://registry.yarnpkg.com/vfile-reporter/-/vfile-reporter-6.0.0.tgz#753119f51dec9289b7508b457afc0cddf5e07f2e" + integrity sha512-8Is0XxFxWJUhPJdOg3CyZTqd3ICCWg6r304PuBl818ZG91h4FMS3Q+lrOPS+cs5/DZK3H0+AkJdH0J8JEwKtDA== + dependencies: + repeat-string "^1.5.0" + string-width "^4.0.0" + supports-color "^6.0.0" + unist-util-stringify-position "^2.0.0" + vfile-sort "^2.1.2" + vfile-statistics "^1.1.0" + +vfile-sort@^2.1.0, vfile-sort@^2.1.2: + version "2.2.1" + resolved "https://registry.yarnpkg.com/vfile-sort/-/vfile-sort-2.2.1.tgz#74e714f9175618cdae96bcaedf1a3dc711d87567" + integrity sha512-5dt7xEhC44h0uRQKhbM2JAe0z/naHphIZlMOygtMBM9Nn0pZdaX5fshhwWit9wvsuP8t/wp43nTDRRErO1WK8g== + +vfile-statistics@^1.1.0: + version "1.1.3" + resolved "https://registry.yarnpkg.com/vfile-statistics/-/vfile-statistics-1.1.3.tgz#e9c87071997fbcb4243764d2c3805e0bb0820c60" + integrity sha512-CstaK/ebTz1W3Qp41Bt9Lj/2DmumFsCwC2sKahDNSPh0mPh7/UyMLCoU8ZBX34CRU0d61B4W41yIFsV0NKMZeA== + +vfile@^2.0.0: + version "2.3.0" + resolved "https://registry.yarnpkg.com/vfile/-/vfile-2.3.0.tgz#e62d8e72b20e83c324bc6c67278ee272488bf84a" + integrity sha512-ASt4mBUHcTpMKD/l5Q+WJXNtshlWxOogYyGYYrg4lt/vuRjC1EFQtlAofL5VmtVNIZJzWYFJjzGWZ0Gw8pzW1w== + dependencies: + is-buffer "^1.1.4" + replace-ext "1.0.0" + unist-util-stringify-position "^1.0.0" + vfile-message "^1.0.0" + +vfile@^4.0.0: + version "4.0.1" + resolved "https://registry.yarnpkg.com/vfile/-/vfile-4.0.1.tgz#fc3d43a1c71916034216bf65926d5ee3c64ed60c" + integrity sha512-lRHFCuC4SQBFr7Uq91oJDJxlnftoTLQ7eKIpMdubhYcVMho4781a8MWXLy3qZrZ0/STD1kRiKc0cQOHm4OkPeA== + dependencies: + "@types/unist" "^2.0.0" + is-buffer "^2.0.0" + replace-ext "1.0.0" + unist-util-stringify-position "^2.0.0" + vfile-message "^2.0.0" + +vinyl-fs@^3.0.0, vinyl-fs@^3.0.2: version "3.0.3" resolved "https://registry.yarnpkg.com/vinyl-fs/-/vinyl-fs-3.0.3.tgz#c85849405f67428feabbbd5c5dbdd64f47d31bc7" integrity sha512-vIu34EkyNyJxmP0jscNzWBSygh7VWhqun6RmqVfXePrOwi9lhvRs//dOaGOTRUQr4tx7/zd26Tk5WeSVZitgng== @@ -9905,7 +11665,7 @@ vinyl@^0.5.0: clone-stats "^0.0.1" replace-ext "0.0.1" -vinyl@^2.0.0, vinyl@^2.2.0: +vinyl@^2.0.0, vinyl@^2.1.0, vinyl@^2.2.0: version "2.2.0" resolved "https://registry.yarnpkg.com/vinyl/-/vinyl-2.2.0.tgz#d85b07da96e458d25b2ffe19fece9f2caa13ed86" integrity sha512-MBH+yP0kC/GQ5GwBqrTPTzEfiiLjta7hTtvQtbxBgTeSXsmKQRQecjibMbxIXzVT3Y9KJK+drOz1/k+vsu8Nkg== @@ -9924,6 +11684,14 @@ vm-browserify@0.0.4: dependencies: indexof "0.0.1" +vue-template-compiler@^2.5.16: + version "2.6.10" + resolved "https://registry.yarnpkg.com/vue-template-compiler/-/vue-template-compiler-2.6.10.tgz#323b4f3495f04faa3503337a82f5d6507799c9cc" + integrity sha512-jVZkw4/I/HT5ZMvRnhv78okGusqe0+qH2A0Em0Cp8aq78+NK9TII263CDVz2QXZsIT+yyV/gZc/j/vlwa+Epyg== + dependencies: + de-indent "^1.0.2" + he "^1.1.0" + w3c-hr-time@^1.0.1: version "1.0.1" resolved "https://registry.yarnpkg.com/w3c-hr-time/-/w3c-hr-time-1.0.1.tgz#82ac2bff63d950ea9e3189a58a65625fedf19045" @@ -10234,6 +12002,11 @@ ws@^6.1.0: dependencies: async-limiter "~1.0.0" +x-is-string@^0.1.0: + version "0.1.0" + resolved "https://registry.yarnpkg.com/x-is-string/-/x-is-string-0.1.0.tgz#474b50865af3a49a9c4657f05acd145458f77d82" + integrity sha1-R0tQhlrzpJqcRlfwWs0UVFj3fYI= + xml-name-validator@^3.0.0: version "3.0.0" resolved "https://registry.yarnpkg.com/xml-name-validator/-/xml-name-validator-3.0.0.tgz#6ae73e06de4d8c6e47f9fb181f78d648ad457c6a" From 69efac3634e93c5e32d4a91fe7968fc3b2844f6d Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Sun, 14 Jul 2019 13:49:54 +0000 Subject: [PATCH 28/31] chore(deps): bump js-yaml from 3.12.0 to 3.13.1 Bumps [js-yaml](https://github.com/nodeca/js-yaml) from 3.12.0 to 3.13.1. - [Release notes](https://github.com/nodeca/js-yaml/releases) - [Changelog](https://github.com/nodeca/js-yaml/blob/master/CHANGELOG.md) - [Commits](https://github.com/nodeca/js-yaml/compare/3.12.0...3.13.1) Signed-off-by: dependabot[bot] --- yarn.lock | 22 +++++++--------------- 1 file changed, 7 insertions(+), 15 deletions(-) diff --git a/yarn.lock b/yarn.lock index d477cd8d3..f1b71b1c0 100644 --- a/yarn.lock +++ b/yarn.lock @@ -1699,9 +1699,9 @@ are-we-there-yet@~1.1.2: readable-stream "^2.0.6" argparse@^1.0.7: - version "1.0.9" - resolved "https://registry.yarnpkg.com/argparse/-/argparse-1.0.9.tgz#73d83bc263f86e97f8cc4f6bae1b0e90a7d22c86" - integrity sha1-c9g7wmP4bpf4zE9rrhsOkKfSLIY= + version "1.0.10" + resolved "https://registry.yarnpkg.com/argparse/-/argparse-1.0.10.tgz#bcd6791ea5ae09725e17e5ad988134cd40b3d911" + integrity sha512-o5Roy6tNG4SL/FOkCAN6RzjiakZS25RLYFrcMttJqbdd8BWrnA+fGz57iN5Pb06pvBGvl5gQ0B48dJlslXvoTg== dependencies: sprintf-js "~1.0.2" @@ -4393,9 +4393,9 @@ esprima@^3.1.3: integrity sha1-/cpRzuYTOJXjyI1TXOSdv/YqRjM= esprima@^4.0.0: - version "4.0.0" - resolved "https://registry.yarnpkg.com/esprima/-/esprima-4.0.0.tgz#4499eddcd1110e0b218bacf2fa7f7f59f55ca804" - integrity sha512-oftTcaMu/EGrEIu904mWteKIv8vMuOgGYo7EhVJJN00R/EED9DCua/xxHRdYnKtcECzVg7xOWhflvJMnqcFZjw== + version "4.0.1" + resolved "https://registry.yarnpkg.com/esprima/-/esprima-4.0.1.tgz#13b04cdb3e6c5d19df91ab6987a8695619b0aa71" + integrity sha512-eGuFFw7Upda+g4p+QHvnW0RyTX/SVeJBDM/gCtMARO0cLuT2HcEKnTPvhjV6aGeqrCB/sbNop0Kszm0jsaWU4A== esquery@^1.0.1: version "1.0.1" @@ -6918,7 +6918,7 @@ js-tokens@^3.0.0, js-tokens@^3.0.2: resolved "https://registry.yarnpkg.com/js-tokens/-/js-tokens-4.0.0.tgz#19203fb59991df98e3a287050d4647cdeaf32499" integrity sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ== -js-yaml@^3.10.0, js-yaml@^3.7.0: +js-yaml@^3.10.0, js-yaml@^3.11.0, js-yaml@^3.7.0, js-yaml@^3.9.0: version "3.13.1" resolved "https://registry.yarnpkg.com/js-yaml/-/js-yaml-3.13.1.tgz#aff151b30bfdfa8e49e05da22e7415e9dfa37847" integrity sha512-YfbcO7jXDdyj0DGxYVSlSeQNHbD7XPWvrVWeVUujrQEoZzWJIRrCPoyk6kL6IAjAG2IolMK4T0hNUe0HOUs5Jw== @@ -6926,14 +6926,6 @@ js-yaml@^3.10.0, js-yaml@^3.7.0: argparse "^1.0.7" esprima "^4.0.0" -js-yaml@^3.11.0, js-yaml@^3.9.0: - version "3.12.0" - resolved "https://registry.yarnpkg.com/js-yaml/-/js-yaml-3.12.0.tgz#eaed656ec8344f10f527c6bfa1b6e2244de167d1" - integrity sha512-PIt2cnwmPfL4hKNwqeiuz4bKfnzHTBv6HyVgjahA6mPLwPDzjDWrplJBMjHUFxku/N3FlmrbyPclad+I+4mJ3A== - dependencies: - argparse "^1.0.7" - esprima "^4.0.0" - jsbn@~0.1.0: version "0.1.1" resolved "https://registry.yarnpkg.com/jsbn/-/jsbn-0.1.1.tgz#a5e654c2e5a2deb5f201d96cefbca80c0ef2f513" From 6249c90bc9a972c73ede935b1eb8ac48cf100ad8 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Sun, 14 Jul 2019 13:50:06 +0000 Subject: [PATCH 29/31] chore(deps): bump fstream from 1.0.11 to 1.0.12 Bumps [fstream](https://github.com/npm/fstream) from 1.0.11 to 1.0.12. - [Release notes](https://github.com/npm/fstream/releases) - [Commits](https://github.com/npm/fstream/compare/v1.0.11...v1.0.12) Signed-off-by: dependabot[bot] --- yarn.lock | 54 ++++++++++++++++++++---------------------------------- 1 file changed, 20 insertions(+), 34 deletions(-) diff --git a/yarn.lock b/yarn.lock index d477cd8d3..510de1944 100644 --- a/yarn.lock +++ b/yarn.lock @@ -2264,9 +2264,9 @@ bonjour@^3.5.0: multicast-dns-service-types "^1.1.0" brace-expansion@^1.1.7: - version "1.1.8" - resolved "https://registry.yarnpkg.com/brace-expansion/-/brace-expansion-1.1.8.tgz#c07b211c7c952ec1f8efd51a77ef0d1d3990a292" - integrity sha1-wHshHHyVLsH479Uad+8NHTmQopI= + version "1.1.11" + resolved "https://registry.yarnpkg.com/brace-expansion/-/brace-expansion-1.1.11.tgz#3c7fcbf529d87226f3d2f52b966ff5271eb441dd" + integrity sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA== dependencies: balanced-match "^1.0.0" concat-map "0.0.1" @@ -5050,9 +5050,9 @@ fsevents@^1.2.3, fsevents@^1.2.7: node-pre-gyp "^0.12.0" fstream@^1.0.0, fstream@^1.0.2: - version "1.0.11" - resolved "https://registry.yarnpkg.com/fstream/-/fstream-1.0.11.tgz#5c1fb1f117477114f0632a0eb4b71b3cb0fd3171" - integrity sha1-XB+x8RdHcRTwYyoOtLcbPLD9MXE= + version "1.0.12" + resolved "https://registry.yarnpkg.com/fstream/-/fstream-1.0.12.tgz#4e8ba8ee2d48be4f7d0de505455548eae5932045" + integrity sha512-WvJ193OHa0GHPEL+AycEJgxvBEwyfRkN1vhjca23OaPVMCaLCXTd5qAu82AjTcgP1UJmytkOKb63Ypde7raDIg== dependencies: graceful-fs "^4.1.2" inherits "~2.0.0" @@ -5345,15 +5345,10 @@ glogg@^1.0.0: dependencies: sparkles "^1.0.0" -graceful-fs@^4.0.0, graceful-fs@^4.1.6: - version "4.1.15" - resolved "https://registry.yarnpkg.com/graceful-fs/-/graceful-fs-4.1.15.tgz#ffb703e1066e8a0eeaa4c8b80ba9253eeefbfb00" - integrity sha512-6uHUhOPEBgQ24HM+r6b/QwWfZq+yiFcipKFrOFiBEnWdy5sdzYoi+pJeQaPI5qOLRFqWmAXUPQNsielzdLoecA== - -graceful-fs@^4.1.11, graceful-fs@^4.1.2: - version "4.1.11" - resolved "https://registry.yarnpkg.com/graceful-fs/-/graceful-fs-4.1.11.tgz#0e8bdfe4d1ddb8854d64e04ea7c00e2a026e5658" - integrity sha1-Dovf5NHduIVNZOBOp8AOKgJuVlg= +graceful-fs@^4.0.0, graceful-fs@^4.1.11, graceful-fs@^4.1.2, graceful-fs@^4.1.6: + version "4.2.0" + resolved "https://registry.yarnpkg.com/graceful-fs/-/graceful-fs-4.2.0.tgz#8d8fdc73977cb04104721cb53666c1ca64cd328b" + integrity sha512-jpSvDPV4Cq/bgtpndIWbI5hmYxhQGHPC4d4cqBPb4DLniCfhJokdXhwhaDuLBGLQdvvRum/UiX6ECVIPvDXqdg== graphlibrary@^2.2.0: version "2.2.0" @@ -5919,16 +5914,21 @@ inflight@^1.0.4: once "^1.3.0" wrappy "1" -inherits@2, inherits@2.0.3, inherits@^2.0.1, inherits@^2.0.3, inherits@~2.0.0, inherits@~2.0.1, inherits@~2.0.3: - version "2.0.3" - resolved "https://registry.yarnpkg.com/inherits/-/inherits-2.0.3.tgz#633c2c83e3da42a502f52466022480f4208261de" - integrity sha1-Yzwsg+PaQqUC9SRmAiSA9CCCYd4= +inherits@2, inherits@^2.0.1, inherits@^2.0.3, inherits@~2.0.0, inherits@~2.0.1, inherits@~2.0.3: + version "2.0.4" + resolved "https://registry.yarnpkg.com/inherits/-/inherits-2.0.4.tgz#0fa2c64f932917c3433a0ded55363aae37416b7c" + integrity sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ== inherits@2.0.1: version "2.0.1" resolved "https://registry.yarnpkg.com/inherits/-/inherits-2.0.1.tgz#b17d08d326b4423e568eff719f91b0b1cbdf69f1" integrity sha1-sX0I0ya0Qj5Wjv9xn5GwscvfafE= +inherits@2.0.3: + version "2.0.3" + resolved "https://registry.yarnpkg.com/inherits/-/inherits-2.0.3.tgz#633c2c83e3da42a502f52466022480f4208261de" + integrity sha1-Yzwsg+PaQqUC9SRmAiSA9CCCYd4= + ini@^1.3.3, ini@^1.3.4: version "1.3.5" resolved "https://registry.yarnpkg.com/ini/-/ini-1.3.5.tgz#eee25f56db1c9ec6085e0c22778083f596abf927" @@ -9915,21 +9915,7 @@ ret@~0.1.10: resolved "https://registry.yarnpkg.com/ret/-/ret-0.1.15.tgz#b8a4825d5bdb1fc3f6f53c2bc33f81388681c7bc" integrity sha512-TTlYpa+OL+vMMNG24xSlQGEJ3B/RzEfUlLct7b5G/ytav+wPrplCpVMFuwzXbkecJrb6IYo1iFb0S9v37754mg== -rimraf@2, rimraf@^2.5.4, rimraf@^2.6.2, rimraf@~2.6.2: - version "2.6.2" - resolved "https://registry.yarnpkg.com/rimraf/-/rimraf-2.6.2.tgz#2ed8150d24a16ea8651e6d6ef0f47c4158ce7a36" - integrity sha512-lreewLK/BlghmxtfH36YYVg1i8IAce4TI7oao75I1g245+6BctqTVQiBP3YUJ9C6DQOXJmkYR9X9fCLtCOJc5w== - dependencies: - glob "^7.0.5" - -rimraf@^2.6.1: - version "2.6.1" - resolved "https://registry.yarnpkg.com/rimraf/-/rimraf-2.6.1.tgz#c2338ec643df7a1b7fe5c54fa86f57428a55f33d" - integrity sha1-wjOOxkPfeht/5cVPqG9XQopV8z0= - dependencies: - glob "^7.0.5" - -rimraf@^2.6.3: +rimraf@2, rimraf@^2.5.4, rimraf@^2.6.1, rimraf@^2.6.2, rimraf@^2.6.3, rimraf@~2.6.2: version "2.6.3" resolved "https://registry.yarnpkg.com/rimraf/-/rimraf-2.6.3.tgz#b2d104fe0d8fb27cf9e0a1cda8262dd3833c6cab" integrity sha512-mwqeW5XsA2qAejG46gYdENaxXjx9onRNCfn7L0duuP4hCuTIi/QO7PDK07KJfp1d+izWPrzEJDcSqBa0OZQriA== From ec4be237b5dc845517721873623cb3e3a1c2ed11 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Sun, 14 Jul 2019 13:50:12 +0000 Subject: [PATCH 30/31] chore(deps): bump atob from 2.0.3 to 2.1.2 Bumps [atob](https://github.com/coolaj86/node-browser-compat) from 2.0.3 to 2.1.2. - [Release notes](https://github.com/coolaj86/node-browser-compat/releases) - [Commits](https://github.com/coolaj86/node-browser-compat/commits) Signed-off-by: dependabot[bot] --- yarn.lock | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/yarn.lock b/yarn.lock index d477cd8d3..d1491c84d 100644 --- a/yarn.lock +++ b/yarn.lock @@ -1928,9 +1928,9 @@ asynckit@^0.4.0: integrity sha1-x57Zf380y48robyXkLzDZkdLS3k= atob@^2.0.0: - version "2.0.3" - resolved "https://registry.yarnpkg.com/atob/-/atob-2.0.3.tgz#19c7a760473774468f20b2d2d03372ad7d4cbf5d" - integrity sha1-GcenYEc3dEaPILLS0DNyrX1Mv10= + version "2.1.2" + resolved "https://registry.yarnpkg.com/atob/-/atob-2.1.2.tgz#6d9517eb9e030d2436666651e86bd9f6f13533c9" + integrity sha512-Wm6ukoaOGJi/73p/cl2GvLjTI5JM1k/O14isD73YML8StrH/7/lRFgmg8nICZgD3bZZvjwCGxtMOD3wWNAu8cg== aws-sign2@~0.7.0: version "0.7.0" From e93cc85e9b7a75e0c2bf3f2f4c12e29ecb9c1698 Mon Sep 17 00:00:00 2001 From: IOrlandoni Date: Sun, 14 Jul 2019 11:51:20 -0400 Subject: [PATCH 31/31] Trimming whitespace after participant id --- .../sequence/parser/sequenceDiagram.jison | 2 +- .../sequence/parser/sequenceDiagram.js | 59 +++++++++---------- src/diagrams/sequence/sequenceDiagram.spec.js | 13 ++++ 3 files changed, 42 insertions(+), 32 deletions(-) diff --git a/src/diagrams/sequence/parser/sequenceDiagram.jison b/src/diagrams/sequence/parser/sequenceDiagram.jison index 507956ee4..9437248e3 100644 --- a/src/diagrams/sequence/parser/sequenceDiagram.jison +++ b/src/diagrams/sequence/parser/sequenceDiagram.jison @@ -27,7 +27,7 @@ \#[^\n]* /* skip comments */ \%%[^\n]* /* skip comments */ "participant" { this.begin('ID'); return 'participant'; } -[^\->:\n,;]+?(?=((?!\n)\s)+"as"(?!\n)\s|[#\n;]|$) { this.begin('ALIAS'); return 'ACTOR'; } +[^\->:\n,;]+?(?=((?!\n)\s)+"as"(?!\n)\s|[#\n;]|$) { yytext = yytext.trim(); this.begin('ALIAS'); return 'ACTOR'; } "as" { this.popState(); this.popState(); this.begin('LINE'); return 'AS'; } (?:) { this.popState(); this.popState(); return 'NL'; } "loop" { this.begin('LINE'); return 'loop'; } diff --git a/src/diagrams/sequence/parser/sequenceDiagram.js b/src/diagrams/sequence/parser/sequenceDiagram.js index 7d2234d3f..7b484f4ce 100644 --- a/src/diagrams/sequence/parser/sequenceDiagram.js +++ b/src/diagrams/sequence/parser/sequenceDiagram.js @@ -71,7 +71,7 @@ recoverable: (boolean: TRUE when the parser has a error recovery rule available for this particular error) } */ -var parser = (function(){ +var sequenceDiagram = (function(){ var o=function(k,v,o,l){for(o=o||{},l=k.length;l--;o[k[l]]=v);return o},$V0=[1,2],$V1=[1,3],$V2=[1,4],$V3=[2,4],$V4=[1,9],$V5=[1,11],$V6=[1,12],$V7=[1,14],$V8=[1,15],$V9=[1,17],$Va=[1,18],$Vb=[1,19],$Vc=[1,20],$Vd=[1,21],$Ve=[1,23],$Vf=[1,24],$Vg=[1,4,5,10,15,16,18,20,21,22,23,25,27,28,29,40],$Vh=[1,32],$Vi=[4,5,10,15,16,18,20,21,22,23,25,29,40],$Vj=[4,5,10,15,16,18,20,21,22,23,25,28,29,40],$Vk=[4,5,10,15,16,18,20,21,22,23,25,27,29,40],$Vl=[38,39,40]; var parser = {trace: function trace () { }, yy: {}, @@ -252,18 +252,15 @@ parse: function parse(input) { vstack.length = vstack.length - n; lstack.length = lstack.length - n; } - function lex() { + _token_stack: + var lex = function () { var token; - token = tstack.pop() || lexer.lex() || EOF; + token = lexer.lex() || EOF; if (typeof token !== 'number') { - if (token instanceof Array) { - tstack = token; - token = tstack.pop(); - } token = self.symbols_[token] || token; } return token; - } + }; var symbol, preErrorSymbol, state, action, a, r, yyval = {}, p, len, newState, expected; while (true) { state = stack[stack.length - 1]; @@ -275,27 +272,27 @@ parse: function parse(input) { } action = table[state] && table[state][symbol]; } - if (typeof action === 'undefined' || !action.length || !action[0]) { - var errStr = ''; - expected = []; - for (p in table[state]) { - if (this.terminals_[p] && p > TERROR) { - expected.push('\'' + this.terminals_[p] + '\''); + if (typeof action === 'undefined' || !action.length || !action[0]) { + var errStr = ''; + expected = []; + for (p in table[state]) { + if (this.terminals_[p] && p > TERROR) { + expected.push('\'' + this.terminals_[p] + '\''); + } } + if (lexer.showPosition) { + errStr = 'Parse error on line ' + (yylineno + 1) + ':\n' + lexer.showPosition() + '\nExpecting ' + expected.join(', ') + ', got \'' + (this.terminals_[symbol] || symbol) + '\''; + } else { + errStr = 'Parse error on line ' + (yylineno + 1) + ': Unexpected ' + (symbol == EOF ? 'end of input' : '\'' + (this.terminals_[symbol] || symbol) + '\''); + } + this.parseError(errStr, { + text: lexer.match, + token: this.terminals_[symbol] || symbol, + line: lexer.yylineno, + loc: yyloc, + expected: expected + }); } - if (lexer.showPosition) { - errStr = 'Parse error on line ' + (yylineno + 1) + ':\n' + lexer.showPosition() + '\nExpecting ' + expected.join(', ') + ', got \'' + (this.terminals_[symbol] || symbol) + '\''; - } else { - errStr = 'Parse error on line ' + (yylineno + 1) + ': Unexpected ' + (symbol == EOF ? 'end of input' : '\'' + (this.terminals_[symbol] || symbol) + '\''); - } - this.parseError(errStr, { - text: lexer.match, - token: this.terminals_[symbol] || symbol, - line: lexer.yylineno, - loc: yyloc, - expected: expected - }); - } if (action[0] instanceof Array && action.length > 1) { throw new Error('Parse Error: multiple actions possible at state: ' + state + ', token: ' + symbol); } @@ -704,7 +701,7 @@ case 4:/* skip comments */ break; case 5: this.begin('ID'); return 10; break; -case 6: this.begin('ALIAS'); return 40; +case 6: yy_.yytext = yy_.yytext.trim(); this.begin('ALIAS'); return 40; break; case 7: this.popState(); this.popState(); this.begin('LINE'); return 12; break; @@ -787,9 +784,9 @@ return new Parser; if (typeof require !== 'undefined' && typeof exports !== 'undefined') { -exports.parser = parser; -exports.Parser = parser.Parser; -exports.parse = function () { return parser.parse.apply(parser, arguments); }; +exports.parser = sequenceDiagram; +exports.Parser = sequenceDiagram.Parser; +exports.parse = function () { return sequenceDiagram.parse.apply(sequenceDiagram, arguments); }; exports.main = function commonjsMain (args) { if (!args[1]) { console.log('Usage: '+args[0]+' FILE'); diff --git a/src/diagrams/sequence/sequenceDiagram.spec.js b/src/diagrams/sequence/sequenceDiagram.spec.js index 0631d1a61..f1f6b47c1 100644 --- a/src/diagrams/sequence/sequenceDiagram.spec.js +++ b/src/diagrams/sequence/sequenceDiagram.spec.js @@ -770,6 +770,19 @@ describe('when rendering a sequenceDiagram', function () { expect(bounds.stopy).toBe(conf.height) }) }) + it('it should handle same actor with different whitespace properly', function () { + renderer.bounds.init() + + const str = 'sequenceDiagram\n' + + 'participant Alice\n' + + 'participant Alice \n' + + 'participant Alice \n' + + parser.parse(str) + + const actors = parser.yy.getActors() + expect(Object.keys(actors)).toEqual(['Alice']) + }) it('it should handle one actor and a centered note', function () { renderer.bounds.init() const str = 'sequenceDiagram\n' +