From be2723bd2e3ccae82f232a7282817bf6de88584c Mon Sep 17 00:00:00 2001 From: Rowan Seymour Date: Mon, 17 May 2021 15:29:06 -0500 Subject: [PATCH 01/22] Update to latest temba-components --- package.json | 2 +- yarn.lock | 8 ++++---- 2 files changed, 5 insertions(+), 5 deletions(-) diff --git a/package.json b/package.json index 0c7c5b88f..88574cb47 100644 --- a/package.json +++ b/package.json @@ -70,7 +70,7 @@ "@babel/core": "^7.4.4", "@babel/preset-env": "^7.4.4", "@babel/preset-react": "7.0.0", - "@nyaruka/temba-components": "0.11.6", + "@nyaruka/temba-components": "0.11.9", "@testing-library/jest-dom": "4.0.0", "@testing-library/react": "8.0.1", "@types/common-tags": "^1.8.0", diff --git a/yarn.lock b/yarn.lock index 93f432f61..06d734067 100644 --- a/yarn.lock +++ b/yarn.lock @@ -1351,10 +1351,10 @@ "@nodelib/fs.scandir" "2.1.3" fastq "^1.6.0" -"@nyaruka/temba-components@0.11.6": - version "0.11.6" - resolved "https://registry.npmjs.org/@nyaruka/temba-components/-/temba-components-0.11.6.tgz#9c1f63cb8feba89e7f66299dc6d4cf9c31f613e1" - integrity sha512-ty0xfKXgaFlsI3j62zywCoJV8z2WpZ2+pTB+ebYWchEQSzdVHxXKdV++NtGjHks8P8p9UILrfRooQxoAF6HKXw== +"@nyaruka/temba-components@0.11.9": + version "0.11.9" + resolved "https://registry.yarnpkg.com/@nyaruka/temba-components/-/temba-components-0.11.9.tgz#a93f1b7df46de31a6fb5c1a85232e66b53ab4677" + integrity sha512-V7n0V/fChnbL2j3ZLC+YZrR77PwXnoQeteAyjECyD9M2IoDIACM5ON82YJxlg6NnO5WNaHwB1dpUENg40Kut7Q== dependencies: flru "^1.0.2" geojson "^0.5.0" From a4a7b3a6661b966a91cf5c6f802d8594ab253339 Mon Sep 17 00:00:00 2001 From: Rowan Seymour Date: Thu, 20 May 2021 12:10:53 -0500 Subject: [PATCH 02/22] v1.13.13 --- CHANGELOG.md | 6 ++++++ package.json | 6 +++--- 2 files changed, 9 insertions(+), 3 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index d3e28d689..ca4b3a168 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -4,6 +4,12 @@ All notable changes to this project will be documented in this file. Dates are d Generated by [`auto-changelog`](https://github.com/CookPete/auto-changelog). +#### [v1.13.13](https://github.com/nyaruka/floweditor/compare/v1.13.9...v1.13.13) + +> 20 May 2021 + +- Update to latest temba-components [`be2723b`](https://github.com/nyaruka/floweditor/commit/be2723bd2e3ccae82f232a7282817bf6de88584c) + #### [v1.13.9](https://github.com/nyaruka/floweditor/compare/v1.13.8...v1.13.9) > 7 May 2021 diff --git a/package.json b/package.json index 88574cb47..8072d1ca4 100644 --- a/package.json +++ b/package.json @@ -2,7 +2,7 @@ "name": "@nyaruka/flow-editor", "license": "AGPL-3.0", "repository": "git://github.com/nyaruka/floweditor.git", - "version": "1.13.9", + "version": "1.13.13", "description": "'Standalone flow editing tool designed for use within the RapidPro suite of messaging tools but can be adopted for use outside of that ecosystem.'", "browser": "umd/flow-editor.min.js", "unpkg": "umd/flow-editor.min.js", @@ -14,7 +14,8 @@ "private": false, "dependencies": { "react": "^16.8.6", - "react-dom": "^16.8.6" + "react-dom": "^16.8.6", + "sass": "1.32.13" }, "scripts": { "lambda:serve": "netlify-lambda serve lambda -p 6000", @@ -125,7 +126,6 @@ "lodash.clonedeep": "4.5.0", "moment": "2.24.0", "netlify-lambda": "^1.4.9", - "node-sass": "4.13.1", "prettier": "1.18.2", "pretty-quick": "^1.11.0", "prop-types": "15.5.7", From 7a4f25fd14b776efa25ee97656e363d352f0ecac Mon Sep 17 00:00:00 2001 From: Rowan Seymour Date: Thu, 20 May 2021 12:19:36 -0500 Subject: [PATCH 03/22] v1.13.14 --- CHANGELOG.md | 4 ++++ package.json | 2 +- 2 files changed, 5 insertions(+), 1 deletion(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index ca4b3a168..7e22feeb9 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -4,6 +4,10 @@ All notable changes to this project will be documented in this file. Dates are d Generated by [`auto-changelog`](https://github.com/CookPete/auto-changelog). +#### [v1.13.14](https://github.com/nyaruka/floweditor/compare/v1.13.13...v1.13.14) + +> 20 May 2021 + #### [v1.13.13](https://github.com/nyaruka/floweditor/compare/v1.13.9...v1.13.13) > 20 May 2021 diff --git a/package.json b/package.json index 8072d1ca4..88c0b7bbe 100644 --- a/package.json +++ b/package.json @@ -2,7 +2,7 @@ "name": "@nyaruka/flow-editor", "license": "AGPL-3.0", "repository": "git://github.com/nyaruka/floweditor.git", - "version": "1.13.13", + "version": "1.13.14", "description": "'Standalone flow editing tool designed for use within the RapidPro suite of messaging tools but can be adopted for use outside of that ecosystem.'", "browser": "umd/flow-editor.min.js", "unpkg": "umd/flow-editor.min.js", From 5f8e6fe6e3c7d463908e24fa3b646981ff6d5c6d Mon Sep 17 00:00:00 2001 From: Rowan Seymour Date: Thu, 20 May 2021 14:13:18 -0500 Subject: [PATCH 04/22] Make sass a dev dependency only --- package.json | 6 +- yarn.lock | 527 ++++++--------------------------------------------- 2 files changed, 61 insertions(+), 472 deletions(-) diff --git a/package.json b/package.json index 88c0b7bbe..28360a25e 100644 --- a/package.json +++ b/package.json @@ -14,8 +14,7 @@ "private": false, "dependencies": { "react": "^16.8.6", - "react-dom": "^16.8.6", - "sass": "1.32.13" + "react-dom": "^16.8.6" }, "scripts": { "lambda:serve": "netlify-lambda serve lambda -p 6000", @@ -148,6 +147,7 @@ "redux-devtools-extension": "^2.13.5", "redux-mock-store": "1.5.3", "redux-thunk": "2.2.0", + "sass": "1.32.13", "sha1": "1.1.1", "shx": "0.3.2", "sign-bunny": "1.0.0", @@ -160,4 +160,4 @@ "uniqid": "5.0.3", "uuid": "3.3.2" } -} +} \ No newline at end of file diff --git a/yarn.lock b/yarn.lock index 06d734067..3994052c4 100644 --- a/yarn.lock +++ b/yarn.lock @@ -2195,11 +2195,6 @@ abab@^2.0.0: resolved "https://registry.yarnpkg.com/abab/-/abab-2.0.3.tgz#623e2075e02eb2d3f2475e49f99c91846467907a" integrity sha512-tsFzPpcttalNjFBCFMqsKYQcWxxen1pgJR56by//QwvJc4/OUS3kPOOttx2tSIfjsylB0pYu7f5D3K1RCxUnUg== -abbrev@1: - version "1.1.1" - resolved "https://registry.yarnpkg.com/abbrev/-/abbrev-1.1.1.tgz#f8f2c887ad10bf67f634f005b6987fed3179aac8" - integrity sha512-nne9/IiQ/hzIhY6pdDnbBtz7DjPTKrY00P/zvPSm5pOFkl6xuGrGnXn/VtTNNfNtAfZ9/1RtehkszU9qcTii0Q== - accepts@~1.3.4, accepts@~1.3.5, accepts@~1.3.7: version "1.3.7" resolved "https://registry.yarnpkg.com/accepts/-/accepts-1.3.7.tgz#531bc726517a3b2b41f850021c6cc15eaab507cd" @@ -2377,11 +2372,6 @@ alphanum-sort@^1.0.0: resolved "https://registry.yarnpkg.com/alphanum-sort/-/alphanum-sort-1.0.2.tgz#97a1119649b211ad33691d9f9f486a8ec9fbe0a3" integrity sha1-l6ERlkmyEa0zaR2fn0hqjsn74KM= -amdefine@>=0.0.4: - version "1.0.1" - resolved "https://registry.yarnpkg.com/amdefine/-/amdefine-1.0.1.tgz#4a5282ac164729e93619bcfd3ad151f817ce91f5" - integrity sha1-SlKCrBZHKek2Gbz9OtFR+BfOkfU= - ansi-colors@^3.0.0: version "3.2.4" resolved "https://registry.yarnpkg.com/ansi-colors/-/ansi-colors-3.2.4.tgz#e3a3da4bfbae6c86a9c285625de124a234026fbf" @@ -2472,19 +2462,11 @@ append-buffer@^1.0.2: dependencies: buffer-equal "^1.0.0" -aproba@^1.0.3, aproba@^1.1.1: +aproba@^1.1.1: version "1.2.0" resolved "https://registry.yarnpkg.com/aproba/-/aproba-1.2.0.tgz#6802e6264efd18c790a1b0d517f0f2627bf2c94a" integrity sha512-Y9J6ZjXtoYh8RnXVCMOU/ttDmk1aBjunq9vO0ta5x85WDQiQfUF9sIPBITdbiiIVcBo03Hi3jMxigBtsddlXRw== -are-we-there-yet@~1.1.2: - version "1.1.5" - resolved "https://registry.yarnpkg.com/are-we-there-yet/-/are-we-there-yet-1.1.5.tgz#4b35c2944f062a8bfcda66410760350fe9ddfc21" - integrity sha512-5hYdAkZlcG8tOLujVDTgCT+uPX0VnpAH28gWsLfzpXYm7wP6mp5Q/gYyR7YQ0cKVJcXJnl3j2kpBan13PtQf6w== - dependencies: - delegates "^1.0.0" - readable-stream "^2.0.6" - argparse@^1.0.10, argparse@^1.0.7: version "1.0.10" resolved "https://registry.yarnpkg.com/argparse/-/argparse-1.0.10.tgz#bcd6791ea5ae09725e17e5ad988134cd40b3d911" @@ -2535,11 +2517,6 @@ array-filter@^1.0.0: resolved "https://registry.yarnpkg.com/array-filter/-/array-filter-1.0.0.tgz#baf79e62e6ef4c2a4c0b831232daffec251f9d83" integrity sha1-uveeYubvTCpMC4MSMtr/7CUfnYM= -array-find-index@^1.0.1: - version "1.0.2" - resolved "https://registry.yarnpkg.com/array-find-index/-/array-find-index-1.0.2.tgz#df010aa1287e164bbda6f9723b0a96a1ec4187a1" - integrity sha1-3wEKoSh+Fku9pvlyOwqWoexBh6E= - array-flatten@1.1.1: version "1.1.1" resolved "https://registry.yarnpkg.com/array-flatten/-/array-flatten-1.1.1.tgz#9a5f699051b1e7073328f2a008968b64ea2955d2" @@ -2668,11 +2645,6 @@ async-each@^1.0.1: resolved "https://registry.yarnpkg.com/async-each/-/async-each-1.0.3.tgz#b727dbf87d7651602f06f4d4ac387f47d91b0cbf" integrity sha512-z/WhQ5FPySLdvREByI2vZiTWwCnF0moMJ1hK9YQwDTHKh6I7/uSckMetoRGb5UBZPC1z0jlw+n/XCgjeH7y1AQ== -async-foreach@^0.1.3: - version "0.1.3" - resolved "https://registry.yarnpkg.com/async-foreach/-/async-foreach-0.1.3.tgz#36121f845c0578172de419a97dbeb1d16ec34542" - integrity sha1-NhIfhFwFeBct5Bmpfb6x0W7DRUI= - async-limiter@~1.0.0: version "1.0.1" resolved "https://registry.yarnpkg.com/async-limiter/-/async-limiter-1.0.1.tgz#dd379e94f0db8310b08291f9d64c3209766617fd" @@ -2995,13 +2967,6 @@ bindings@^1.5.0: dependencies: file-uri-to-path "1.0.0" -block-stream@*: - version "0.0.9" - resolved "https://registry.yarnpkg.com/block-stream/-/block-stream-0.0.9.tgz#13ebfe778a03205cfe03751481ebb4b3300c126a" - integrity sha1-E+v+d4oDIFz+A3UUgeu0szAMEmo= - dependencies: - inherits "~2.0.0" - bluebird@^3.5.5: version "3.7.2" resolved "https://registry.yarnpkg.com/bluebird/-/bluebird-3.7.2.tgz#9f229c15be272454ffa973ace0dbee79a1b0c36f" @@ -3340,14 +3305,6 @@ camel-case@^4.1.1: pascal-case "^3.1.1" tslib "^1.10.0" -camelcase-keys@^2.0.0: - version "2.1.0" - resolved "https://registry.yarnpkg.com/camelcase-keys/-/camelcase-keys-2.1.0.tgz#308beeaffdf28119051efa1d932213c91b8f92e7" - integrity sha1-MIvur/3ygRkFHvodkyITyRuPkuc= - dependencies: - camelcase "^2.0.0" - map-obj "^1.0.0" - camelcase@5.0.0: version "5.0.0" resolved "https://registry.yarnpkg.com/camelcase/-/camelcase-5.0.0.tgz#03295527d58bd3cd4aa75363f35b2e8d97be2f42" @@ -3358,16 +3315,6 @@ camelcase@5.3.1, camelcase@^5.0.0, camelcase@^5.3.1: resolved "https://registry.yarnpkg.com/camelcase/-/camelcase-5.3.1.tgz#e3c9b31569e106811df242f715725a1f4c494320" integrity sha512-L28STB170nwWS63UjtlEOE3dldQApaJXZkOI1uMFfzf3rRuPegHaHesyee+YxQ+W6SvRDQV6UrdOdRiR153wJg== -camelcase@^2.0.0: - version "2.1.1" - resolved "https://registry.yarnpkg.com/camelcase/-/camelcase-2.1.1.tgz#7c1d16d679a1bbe59ca02cacecfb011e201f5a1f" - integrity sha1-fB0W1nmhu+WcoCys7PsBHiAfWh8= - -camelcase@^3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/camelcase/-/camelcase-3.0.0.tgz#32fc4b9fcdaf845fcdf7e73bb97cac2261f0ab0a" - integrity sha1-MvxLn82vhF/N9+c7uXysImHwqwo= - caniuse-api@^3.0.0: version "3.0.0" resolved "https://registry.yarnpkg.com/caniuse-api/-/caniuse-api-3.0.0.tgz#5e4d90e2274961d46291997df599e3ed008ee4c0" @@ -3409,7 +3356,7 @@ chalk@2.4.2, chalk@^2.0.0, chalk@^2.0.1, chalk@^2.1.0, chalk@^2.3.0, chalk@^2.3. escape-string-regexp "^1.0.5" supports-color "^5.3.0" -chalk@^1.0.0, chalk@^1.1.1, chalk@^1.1.3: +chalk@^1.0.0, chalk@^1.1.3: version "1.1.3" resolved "https://registry.yarnpkg.com/chalk/-/chalk-1.1.3.tgz#a8115c55e4a702fe4d150abd3872822a7e09fc98" integrity sha1-qBFcVeSnAv5NFQq9OHKCKn4J/Jg= @@ -3465,6 +3412,21 @@ cheerio@^1.0.0-rc.2: lodash "^4.15.0" parse5 "^3.0.1" +"chokidar@>=3.0.0 <4.0.0": + version "3.5.1" + resolved "https://registry.yarnpkg.com/chokidar/-/chokidar-3.5.1.tgz#ee9ce7bbebd2b79f49f304799d5468e31e14e68a" + integrity sha512-9+s+Od+W0VJJzawDma/gvBNQqkTiqYTWLuZoyAsivsI4AaWTCzHG06/TMjsf1cYe9Cb97UCEhjz7HvnPk2p/tw== + dependencies: + anymatch "~3.1.1" + braces "~3.0.2" + glob-parent "~5.1.0" + is-binary-path "~2.1.0" + is-glob "~4.0.1" + normalize-path "~3.0.0" + readdirp "~3.5.0" + optionalDependencies: + fsevents "~2.3.1" + chokidar@^2.1.8: version "2.1.8" resolved "https://registry.yarnpkg.com/chokidar/-/chokidar-2.1.8.tgz#804b3a7b6a99358c3c5c61e71d8728f041cff917" @@ -3578,15 +3540,6 @@ cli-width@^2.0.0: resolved "https://registry.yarnpkg.com/cli-width/-/cli-width-2.2.1.tgz#b0433d0b4e9c847ef18868a4ef16fd5fc8271c48" integrity sha512-GRMWDxpOB6Dgk2E5Uo+3eEBvtOOlimMmpbFiKuLFnQzYDavtLFY3K5ona41jgN/WdRZtG7utuVSVTL4HbZHGkw== -cliui@^3.2.0: - version "3.2.0" - resolved "https://registry.yarnpkg.com/cliui/-/cliui-3.2.0.tgz#120601537a916d29940f934da3b48d585a39213d" - integrity sha1-EgYBU3qRbSmUD5NNo7SNWFo5IT0= - dependencies: - string-width "^1.0.1" - strip-ansi "^3.0.1" - wrap-ansi "^2.0.0" - cliui@^4.0.0: version "4.1.0" resolved "https://registry.yarnpkg.com/cliui/-/cliui-4.1.0.tgz#348422dbe82d800b3022eef4f6ac10bf2e4d1b49" @@ -3825,11 +3778,6 @@ console-browserify@^1.1.0: resolved "https://registry.yarnpkg.com/console-browserify/-/console-browserify-1.2.0.tgz#67063cef57ceb6cf4993a2ab3a55840ae8c49336" integrity sha512-ZMkYO/LkF17QvCPqM0gxw8yUzigAOZOSWSHg91FH6orS7vcEj5dVZTidN2fQ14yBSdg97RqhSNwLUXInd52OTA== -console-control-strings@^1.0.0, console-control-strings@~1.1.0: - version "1.1.0" - resolved "https://registry.yarnpkg.com/console-control-strings/-/console-control-strings-1.1.0.tgz#3d7cf4464db6446ea644bf4b39507f9851008e8e" - integrity sha1-PXz0Rk22RG6mRL9LOVB/mFEAjo4= - constants-browserify@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/constants-browserify/-/constants-browserify-1.0.0.tgz#c20b96d8c617748aaf1c16021760cd27fcb8cb75" @@ -3990,14 +3938,6 @@ cross-spawn@7.0.1: shebang-command "^2.0.0" which "^2.0.1" -cross-spawn@^3.0.0: - version "3.0.1" - resolved "https://registry.yarnpkg.com/cross-spawn/-/cross-spawn-3.0.1.tgz#1256037ecb9f0c5f79e3d6ef135e30770184b982" - integrity sha1-ElYDfsufDF9549bvE14wdwGEuYI= - dependencies: - lru-cache "^4.0.1" - which "^1.2.9" - cross-spawn@^5.0.1: version "5.1.0" resolved "https://registry.yarnpkg.com/cross-spawn/-/cross-spawn-5.1.0.tgz#e8bd0efee58fcff6f8f94510a0a554bbfa235449" @@ -4266,13 +4206,6 @@ csstype@^2.2.0, csstype@^2.5.7: resolved "https://registry.yarnpkg.com/csstype/-/csstype-2.6.10.tgz#e63af50e66d7c266edb6b32909cfd0aabe03928b" integrity sha512-D34BqZU4cIlMCY93rZHbrq9pjTAQJ3U8S8rfBqjwHxkGPThWFjzZDQpgMJY0QViLxth6ZKYiwFBo14RdN44U/w== -currently-unhandled@^0.4.1: - version "0.4.1" - resolved "https://registry.yarnpkg.com/currently-unhandled/-/currently-unhandled-0.4.1.tgz#988df33feab191ef799a61369dd76c17adf957ea" - integrity sha1-mI3zP+qxke95mmE2nddsF635V+o= - dependencies: - array-find-index "^1.0.1" - cyclist@^1.0.1: version "1.0.1" resolved "https://registry.yarnpkg.com/cyclist/-/cyclist-1.0.1.tgz#596e9698fd0c80e12038c2b82d6eb1b35b6224d9" @@ -4345,7 +4278,7 @@ debug@^4.0.1, debug@^4.1.0, debug@^4.1.1: dependencies: ms "^2.1.1" -decamelize@^1.1.1, decamelize@^1.1.2, decamelize@^1.2.0: +decamelize@^1.2.0: version "1.2.0" resolved "https://registry.yarnpkg.com/decamelize/-/decamelize-1.2.0.tgz#f6534d15148269b20352e7bee26f501f9a191290" integrity sha1-9lNNFRSCabIDUue+4m9QH5oZEpA= @@ -4454,11 +4387,6 @@ delayed-stream@~1.0.0: resolved "https://registry.yarnpkg.com/delayed-stream/-/delayed-stream-1.0.0.tgz#df3ae199acadfb7d440aaae0b29e2272b24ec619" integrity sha1-3zrhmayt+31ECqrgsp4icrJOxhk= -delegates@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/delegates/-/delegates-1.0.0.tgz#84c6e159b81904fdca59a0ef44cd870d31250f9a" - integrity sha1-hMbhWbgZBP3KWaDvRM2HDTElD5o= - depd@~1.1.2: version "1.1.2" resolved "https://registry.yarnpkg.com/depd/-/depd-1.1.2.tgz#9bcd52e14c097763e749b274c4346ed2e560b5a9" @@ -5884,15 +5812,10 @@ fsevents@^1.2.7: bindings "^1.5.0" nan "^2.12.1" -fstream@^1.0.0, fstream@^1.0.12: - 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" - mkdirp ">=0.5 0" - rimraf "2" +fsevents@~2.3.1: + version "2.3.2" + resolved "https://registry.yarnpkg.com/fsevents/-/fsevents-2.3.2.tgz#8a526f78b8fdf4623b709e0b975c52c24c02fd1a" + integrity sha512-xiqMQR4xAeHTuB9uWm+fFRcIOgKBMiOBP+eXiyT7jsgVCq1bkVygt00oASowB7EdtpOHaaPgKt812P9ab+DDKA== function-bind@^1.1.1: version "1.1.1" @@ -5927,27 +5850,6 @@ g-status@^2.0.2: matcher "^1.0.0" simple-git "^1.85.0" -gauge@~2.7.3: - version "2.7.4" - resolved "https://registry.yarnpkg.com/gauge/-/gauge-2.7.4.tgz#2c03405c7538c39d7eb37b317022e325fb018bf7" - integrity sha1-LANAXHU4w51+s3sxcCLjJfsBi/c= - dependencies: - aproba "^1.0.3" - console-control-strings "^1.0.0" - has-unicode "^2.0.0" - object-assign "^4.1.0" - signal-exit "^3.0.0" - string-width "^1.0.1" - strip-ansi "^3.0.1" - wide-align "^1.1.0" - -gaze@^1.0.0: - version "1.1.3" - resolved "https://registry.yarnpkg.com/gaze/-/gaze-1.1.3.tgz#c441733e13b927ac8c0ff0b4c3b033f28812924a" - integrity sha512-BRdNm8hbWzFzWHERTrejLqwHDfS4GibPoq5wjTPIoJHoBtKGPg3xAFfxmM+9ztbXelxcf2hwQcaz1PtmFeue8g== - dependencies: - globule "^1.0.0" - gensync@^1.0.0-beta.1: version "1.0.0-beta.1" resolved "https://registry.yarnpkg.com/gensync/-/gensync-1.0.0-beta.1.tgz#58f4361ff987e5ff6e1e7a210827aa371eaac269" @@ -5973,11 +5875,6 @@ get-own-enumerable-property-symbols@^3.0.0: resolved "https://registry.yarnpkg.com/get-own-enumerable-property-symbols/-/get-own-enumerable-property-symbols-3.0.2.tgz#b5fde77f22cbe35f390b4e089922c50bce6ef664" integrity sha512-I0UBV/XOz1XkIJHEUDMZAbzCThU/H8DxmSfmdGcKPnVhu2VfFqr34jr9777IyaTYvxjedWhqVIilEDsCdP5G6g== -get-stdin@^4.0.1: - version "4.0.1" - resolved "https://registry.yarnpkg.com/get-stdin/-/get-stdin-4.0.1.tgz#b968c6b0a04384324902e8bf1a5df32579a450fe" - integrity sha1-uWjGsKBDhDJJAui/Gl3zJXmkUP4= - get-stdin@^6.0.0: version "6.0.0" resolved "https://registry.yarnpkg.com/get-stdin/-/get-stdin-6.0.0.tgz#9e09bf712b360ab9225e812048f71fde9c89657b" @@ -6060,7 +5957,7 @@ glob@7.1.2: once "^1.3.0" path-is-absolute "^1.0.0" -glob@^7.0.0, glob@^7.0.3, glob@^7.1.1, glob@^7.1.2, glob@^7.1.3, glob@^7.1.4, glob@^7.1.6, glob@~7.1.1: +glob@^7.0.0, glob@^7.0.3, glob@^7.1.1, glob@^7.1.2, glob@^7.1.3, glob@^7.1.4, glob@^7.1.6: version "7.1.6" resolved "https://registry.yarnpkg.com/glob/-/glob-7.1.6.tgz#141f33b81a7c2492e125594307480c46679278a6" integrity sha512-LwaxwyZ72Lk7vZINtNNrywX0ZuLyStrdDtabefZKAY5ZGJhVtgdznluResxNmPitE0SAO+O26sWTHeKSI2wMBA== @@ -6138,15 +6035,6 @@ globby@^6.1.0: pify "^2.0.0" pinkie-promise "^2.0.0" -globule@^1.0.0: - version "1.3.1" - resolved "https://registry.yarnpkg.com/globule/-/globule-1.3.1.tgz#90a25338f22b7fbeb527cee63c629aea754d33b9" - integrity sha512-OVyWOHgw29yosRHCHo7NncwR1hW5ew0W/UrvtwvjefVJeQ26q4/8r8FmPsSF1hJ93IgWkyv16pCTz6WblMzm/g== - dependencies: - glob "~7.1.1" - lodash "~4.17.12" - minimatch "~3.0.2" - graceful-fs@^4.0.0, graceful-fs@^4.1.11, graceful-fs@^4.1.15, graceful-fs@^4.1.2, graceful-fs@^4.1.6, graceful-fs@^4.2.0, graceful-fs@^4.2.2: version "4.2.3" resolved "https://registry.yarnpkg.com/graceful-fs/-/graceful-fs-4.2.3.tgz#4a12ff1b60376ef09862c2093edd908328be8423" @@ -6234,11 +6122,6 @@ has-symbols@^1.0.0, has-symbols@^1.0.1: resolved "https://registry.yarnpkg.com/has-symbols/-/has-symbols-1.0.1.tgz#9f5214758a44196c406d9bd76cebf81ec2dd31e8" integrity sha512-PLcsoqu++dmEIZB+6totNFKq/7Do+Z0u4oT0zKOJNl3lYK6vGwwu2hjHs+68OEZbTjiUE9bgOABXbP/GvrS0Kg== -has-unicode@^2.0.0: - version "2.0.1" - resolved "https://registry.yarnpkg.com/has-unicode/-/has-unicode-2.0.1.tgz#e0e6fe6a28cf51138855e086d1691e771de2a8b9" - integrity sha1-4Ob+aijPUROIVeCG0Wkedx3iqLk= - has-value@^0.3.1: version "0.3.1" resolved "https://registry.yarnpkg.com/has-value/-/has-value-0.3.1.tgz#7b1f58bada62ca827ec0a2078025654845995e1f" @@ -6705,18 +6588,6 @@ imurmurhash@^0.1.4: resolved "https://registry.yarnpkg.com/imurmurhash/-/imurmurhash-0.1.4.tgz#9218b9b2b928a238b13dc4fb6b6d576f231453ea" integrity sha1-khi5srkoojixPcT7a21XbyMUU+o= -in-publish@^2.0.0: - version "2.0.1" - resolved "https://registry.yarnpkg.com/in-publish/-/in-publish-2.0.1.tgz#948b1a535c8030561cea522f73f78f4be357e00c" - integrity sha512-oDM0kUSNFC31ShNxHKUyfZKy8ZeXZBWMjMdZHKLOk13uvT27VTL/QzRGfRUcevJhpkZAvlhPYuXkF7eNWrtyxQ== - -indent-string@^2.1.0: - version "2.1.0" - resolved "https://registry.yarnpkg.com/indent-string/-/indent-string-2.1.0.tgz#8e2d48348742121b4a8218b7a137e9a52049dc80" - integrity sha1-ji1INIdCEhtKghi3oTfppSBJ3IA= - dependencies: - repeating "^2.0.0" - indent-string@^3.0.0: version "3.2.0" resolved "https://registry.yarnpkg.com/indent-string/-/indent-string-3.2.0.tgz#4a5fd6d27cc332f37e5419a504dbb837105c9289" @@ -6745,7 +6616,7 @@ inflight@^1.0.4: once "^1.3.0" wrappy "1" -inherits@2, inherits@2.0.4, inherits@^2.0.0, inherits@^2.0.1, inherits@^2.0.3, inherits@~2.0.0, inherits@~2.0.1, inherits@~2.0.3: +inherits@2, inherits@2.0.4, inherits@^2.0.0, inherits@^2.0.1, inherits@^2.0.3, 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== @@ -6832,11 +6703,6 @@ invariant@^2.2.0, invariant@^2.2.2, invariant@^2.2.4: dependencies: loose-envify "^1.0.0" -invert-kv@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/invert-kv/-/invert-kv-1.0.0.tgz#104a8e4aaca6d3d8cd157a8ef8bfab2d7a3ffdb6" - integrity sha1-EEqOSqym09jNFXqO+L+rLXo//bY= - invert-kv@^2.0.0: version "2.0.0" resolved "https://registry.yarnpkg.com/invert-kv/-/invert-kv-2.0.0.tgz#7393f5afa59ec9ff5f67a27620d11c226e3eec02" @@ -7034,11 +6900,6 @@ is-extglob@^2.1.0, is-extglob@^2.1.1: resolved "https://registry.yarnpkg.com/is-extglob/-/is-extglob-2.1.1.tgz#a88c02535791f02ed37c76a1b9ea9773c833f8c2" integrity sha1-qIwCU1eR8C7TfHahueqXc8gz+MI= -is-finite@^1.0.0: - version "1.1.0" - resolved "https://registry.yarnpkg.com/is-finite/-/is-finite-1.1.0.tgz#904135c77fb42c0641d6aa1bcdbc4daa8da082f3" - integrity sha512-cdyMtqX/BOqqNBBiKlIVkytNHm49MtMlYyn1zxzvJKWmFMlGzm+ry5BBfYyeY9YmNKbRSo/o7OX9w9ale0wg3w== - is-fullwidth-code-point@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/is-fullwidth-code-point/-/is-fullwidth-code-point-1.0.0.tgz#ef9e31386f031a7f0d643af82fde50c457ef00cb" @@ -7244,7 +7105,7 @@ is-unc-path@^1.0.0: dependencies: unc-path-regex "^0.1.2" -is-utf8@^0.2.0, is-utf8@^0.2.1: +is-utf8@^0.2.1: version "0.2.1" resolved "https://registry.yarnpkg.com/is-utf8/-/is-utf8-0.2.1.tgz#4b0da1442104d1b336340e80797e865cf39f7d72" integrity sha1-Sw2hRCEE0bM2NA6AeX6GXPOffXI= @@ -7766,11 +7627,6 @@ jest@24.9.0: import-local "^2.0.0" jest-cli "^24.9.0" -js-base64@^2.1.8: - version "2.5.2" - resolved "https://registry.yarnpkg.com/js-base64/-/js-base64-2.5.2.tgz#313b6274dda718f714d00b3330bbae6e38e90209" - integrity sha512-Vg8czh0Q7sFBSUMWWArX/miJeBWYBPpdU/3M/DKSaekLMqrqVPaedp+5mZhie/r0lgrcaYBfwXatEew6gwgiQQ== - "js-tokens@^3.0.0 || ^4.0.0", js-tokens@^4.0.0: version "4.0.0" resolved "https://registry.yarnpkg.com/js-tokens/-/js-tokens-4.0.0.tgz#19203fb59991df98e3a287050d4647cdeaf32499" @@ -8025,13 +7881,6 @@ lazystream@^1.0.0: dependencies: readable-stream "^2.0.5" -lcid@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/lcid/-/lcid-1.0.0.tgz#308accafa0bc483a3867b4b6f2b9506251d1b835" - integrity sha1-MIrMr6C8SDo4Z7S28rlQYlHRuDU= - dependencies: - invert-kv "^1.0.0" - lcid@^2.0.0: version "2.0.0" resolved "https://registry.yarnpkg.com/lcid/-/lcid-2.0.0.tgz#6ef5d2df60e52f82eb228a4c373e8d1f397253cf" @@ -8197,17 +8046,6 @@ lit-html@^1.1.1, lit-html@^1.1.2: resolved "https://registry.yarnpkg.com/lit-html/-/lit-html-1.2.1.tgz#1fb933dc1e2ddc095f60b8086277d4fcd9d62cc8" integrity sha512-GSJHHXMGLZDzTRq59IUfL9FCdAlGfqNp/dEa7k7aBaaWD+JKaCjsAk9KYm2V12ItonVaYx2dprN66Zdm1AuBTQ== -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" - integrity sha1-lWkFcI1YtLq0wiYbBPWfMcmTdMA= - dependencies: - graceful-fs "^4.1.2" - parse-json "^2.2.0" - pify "^2.0.0" - pinkie-promise "^2.0.0" - strip-bom "^2.0.0" - load-json-file@^2.0.0: version "2.0.0" resolved "https://registry.yarnpkg.com/load-json-file/-/load-json-file-2.0.0.tgz#7947e42149af80d696cbf797bcaabcfe1fe29ca8" @@ -8372,7 +8210,7 @@ lodash.uniqby@^4.7.0: resolved "https://registry.yarnpkg.com/lodash.uniqby/-/lodash.uniqby-4.7.0.tgz#d99c07a669e9e6d24e1362dfe266c67616af1302" integrity sha1-2ZwHpmnp5tJOE2Lf4mbGdhavEwI= -"lodash@>=3.5 <5", lodash@^4.0.0, lodash@^4.15.0, lodash@^4.17.11, lodash@^4.17.13, lodash@^4.17.14, lodash@^4.17.15, lodash@^4.17.5, lodash@^4.2.1, lodash@~4.17.12: +"lodash@>=3.5 <5", lodash@^4.0.0, lodash@^4.15.0, lodash@^4.17.11, lodash@^4.17.13, lodash@^4.17.14, lodash@^4.17.15, lodash@^4.17.5, lodash@^4.2.1: version "4.17.15" resolved "https://registry.yarnpkg.com/lodash/-/lodash-4.17.15.tgz#b447f6670a0455bbfeedd11392eff330ea097548" integrity sha512-8xOcRHvCjnocdS5cpwXQXVzmmh5e5+saE2QGoeQmbKmRS6J3VQppPOIt0MnmE+4xlZoumy0GPG0D0MVIQbNA1A== @@ -8412,14 +8250,6 @@ loose-envify@^1.0.0, loose-envify@^1.1.0, loose-envify@^1.4.0: dependencies: js-tokens "^3.0.0 || ^4.0.0" -loud-rejection@^1.0.0: - version "1.6.0" - resolved "https://registry.yarnpkg.com/loud-rejection/-/loud-rejection-1.6.0.tgz#5b46f80147edee578870f086d04821cf998e551f" - integrity sha1-W0b4AUft7leIcPCG0Eghz5mOVR8= - dependencies: - currently-unhandled "^0.4.1" - signal-exit "^3.0.0" - lower-case@^2.0.1: version "2.0.1" resolved "https://registry.yarnpkg.com/lower-case/-/lower-case-2.0.1.tgz#39eeb36e396115cc05e29422eaea9e692c9408c7" @@ -8481,11 +8311,6 @@ map-cache@^0.2.2: resolved "https://registry.yarnpkg.com/map-cache/-/map-cache-0.2.2.tgz#c32abd0bd6525d9b051645bb4f26ac5dc98a0dbf" integrity sha1-wyq9C9ZSXZsFFkW7TyasXcmKDb8= -map-obj@^1.0.0, map-obj@^1.0.1: - version "1.0.1" - resolved "https://registry.yarnpkg.com/map-obj/-/map-obj-1.0.1.tgz#d933ceb9205d82bdcf4886f6742bdc2b4dea146d" - integrity sha1-2TPOuSBdgr3PSIb2dCvcK03qFG0= - map-visit@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/map-visit/-/map-visit-1.0.0.tgz#ecdca8f13144e660f1b5bd41f12f3479d98dfb8f" @@ -8571,22 +8396,6 @@ memory-fs@^0.5.0: errno "^0.1.3" readable-stream "^2.0.1" -meow@^3.7.0: - version "3.7.0" - resolved "https://registry.yarnpkg.com/meow/-/meow-3.7.0.tgz#72cb668b425228290abbfa856892587308a801fb" - integrity sha1-cstmi0JSKCkKu/qFaJJYcwioAfs= - dependencies: - camelcase-keys "^2.0.0" - decamelize "^1.1.2" - loud-rejection "^1.0.0" - map-obj "^1.0.1" - minimist "^1.1.3" - normalize-package-data "^2.3.4" - object-assign "^4.0.1" - read-pkg-up "^1.0.1" - redent "^1.0.0" - trim-newlines "^1.0.0" - merge-deep@^3.0.2: version "3.0.2" resolved "https://registry.yarnpkg.com/merge-deep/-/merge-deep-3.0.2.tgz#f39fa100a4f1bd34ff29f7d2bf4508fbb8d83ad2" @@ -8713,7 +8522,7 @@ minimalistic-crypto-utils@^1.0.0, minimalistic-crypto-utils@^1.0.1: resolved "https://registry.yarnpkg.com/minimalistic-crypto-utils/-/minimalistic-crypto-utils-1.0.1.tgz#f6c00c1c0b082246e5c4d99dfb8c7c083b2b582a" integrity sha1-9sAMHAsIIkblxNmd+4x8CDsrWCo= -minimatch@3.0.4, minimatch@^3.0.4, minimatch@~3.0.2: +minimatch@3.0.4, minimatch@^3.0.4: version "3.0.4" resolved "https://registry.yarnpkg.com/minimatch/-/minimatch-3.0.4.tgz#5166e286457f03306064be5497e8dbb0c3d32083" integrity sha512-yJHVQEhyqPLUTgt9B83PXu6W3rx4MvvHvSUvToogpwoGDOUQ+yDrR0HRot+yOCdCO7u4hX3pWft6kWBBcqh0UA== @@ -8725,7 +8534,7 @@ minimist@0.0.8: resolved "https://registry.yarnpkg.com/minimist/-/minimist-0.0.8.tgz#857fcabfc3397d2625b8228262e86aa7a011b05d" integrity sha1-hX/Kv8M5fSYluCKCYuhqp6ARsF0= -minimist@^1.1.1, minimist@^1.1.3, minimist@^1.2.0, minimist@^1.2.5: +minimist@^1.1.1, minimist@^1.2.0, minimist@^1.2.5: version "1.2.5" resolved "https://registry.yarnpkg.com/minimist/-/minimist-1.2.5.tgz#67d66014b66a6a8aaa0c083c5fd58df4e4e97602" integrity sha512-FM9nNUYrRBAELZQT3xeZQ7fmMOBg6nWNmJKTcgsJeaLstP/UODVpGsr5OhXhhXg6f+qtJ8uiZ+PUxkDWcgIXLw== @@ -8797,7 +8606,7 @@ mkdirp@0.5.1: dependencies: minimist "0.0.8" -"mkdirp@>=0.5 0", mkdirp@^0.5.0, mkdirp@^0.5.1, mkdirp@^0.5.3, mkdirp@~0.5.1: +mkdirp@^0.5.1, mkdirp@^0.5.3, mkdirp@~0.5.1: version "0.5.5" resolved "https://registry.yarnpkg.com/mkdirp/-/mkdirp-0.5.5.tgz#d91cefd62d1436ca0f41620e251288d420099def" integrity sha512-NKmAlESf6jMGym1++R0Ra7wvhV+wFW63FaSOFPwRahvea0gMUcGUhVeAg/0BC0wiv9ih5NYPB1Wn1UEI1/L+xQ== @@ -8891,7 +8700,7 @@ mute-stream@0.0.8: resolved "https://registry.yarnpkg.com/mute-stream/-/mute-stream-0.0.8.tgz#1630c42b2251ff81e2a283de96a5497ea92e5e0d" integrity sha512-nnbWWOkoWyUsTjKrhgD0dcz22mdkSnpYqbEjIm2nhwhuxlSkpywJmBo8h0ZqJdkp73mb90SssHkN4rsRaBAfAA== -nan@^2.12.1, nan@^2.13.2: +nan@^2.12.1: version "2.14.0" resolved "https://registry.yarnpkg.com/nan/-/nan-2.14.0.tgz#7818f722027b2459a86f0295d434d1fc2336c52c" integrity sha512-INOFj37C7k3AfaNTtX8RhsTw7qRy7eLET14cROi9+5HAVbbHuIWUHEauBv5qT4Av2tWasiTY1Jw6puUNqRJXQg== @@ -8996,24 +8805,6 @@ node-forge@0.9.0: resolved "https://registry.yarnpkg.com/node-forge/-/node-forge-0.9.0.tgz#d624050edbb44874adca12bb9a52ec63cb782579" integrity sha512-7ASaDa3pD+lJ3WvXFsxekJQelBKRpne+GOVbLbtHYdd7pFspyeuJHnWfLplGf3SwKGbfs/aYl5V/JCIaHVUKKQ== -node-gyp@^3.8.0: - version "3.8.0" - resolved "https://registry.yarnpkg.com/node-gyp/-/node-gyp-3.8.0.tgz#540304261c330e80d0d5edce253a68cb3964218c" - integrity sha512-3g8lYefrRRzvGeSowdJKAKyks8oUpLEd/DyPV4eMhVlhJ0aNaZqIrNUIPuEWWTAoPqyFkfGrM67MC69baqn6vA== - dependencies: - fstream "^1.0.0" - glob "^7.0.3" - graceful-fs "^4.1.2" - mkdirp "^0.5.0" - nopt "2 || 3" - npmlog "0 || 1 || 2 || 3 || 4" - osenv "0" - request "^2.87.0" - rimraf "2" - semver "~5.3.0" - tar "^2.0.0" - which "1" - node-int64@^0.4.0: version "0.4.0" resolved "https://registry.yarnpkg.com/node-int64/-/node-int64-0.4.0.tgz#87a9065cdb355d3182d8f94ce11188b825c68a3b" @@ -9069,37 +8860,7 @@ node-releases@^1.1.52, node-releases@^1.1.53: resolved "https://registry.yarnpkg.com/node-releases/-/node-releases-1.1.53.tgz#2d821bfa499ed7c5dffc5e2f28c88e78a08ee3f4" integrity sha512-wp8zyQVwef2hpZ/dJH7SfSrIPD6YoJz6BDQDpGEkcA0s3LpAQoxBIYmfIq6QAhC1DhwsyCgTaTTcONwX8qzCuQ== -node-sass@4.13.1: - version "4.13.1" - resolved "https://registry.yarnpkg.com/node-sass/-/node-sass-4.13.1.tgz#9db5689696bb2eec2c32b98bfea4c7a2e992d0a3" - integrity sha512-TTWFx+ZhyDx1Biiez2nB0L3YrCZ/8oHagaDalbuBSlqXgUPsdkUSzJsVxeDO9LtPB49+Fh3WQl3slABo6AotNw== - dependencies: - async-foreach "^0.1.3" - chalk "^1.1.1" - cross-spawn "^3.0.0" - gaze "^1.0.0" - get-stdin "^4.0.1" - glob "^7.0.3" - in-publish "^2.0.0" - lodash "^4.17.15" - meow "^3.7.0" - mkdirp "^0.5.1" - nan "^2.13.2" - node-gyp "^3.8.0" - npmlog "^4.0.0" - request "^2.88.0" - sass-graph "^2.2.4" - stdout-stream "^1.4.0" - "true-case-path" "^1.0.2" - -"nopt@2 || 3": - version "3.0.6" - resolved "https://registry.yarnpkg.com/nopt/-/nopt-3.0.6.tgz#c6465dbf08abcd4db359317f79ac68a646b28ff9" - integrity sha1-xkZdvwirzU2zWTF/eaxopkayj/k= - dependencies: - abbrev "1" - -normalize-package-data@^2.3.2, normalize-package-data@^2.3.4, normalize-package-data@^2.5.0: +normalize-package-data@^2.3.2, normalize-package-data@^2.5.0: version "2.5.0" resolved "https://registry.yarnpkg.com/normalize-package-data/-/normalize-package-data-2.5.0.tgz#e66db1838b200c1dfc233225d12cb36520e234a8" integrity sha512-/5CMN3T0R4XTj4DcGaexo+roZSdSFW/0AOOTROrjxzCG1wrWXEsGbRKevjlIL+ZDE4sZlJr5ED4YW0yqmkK+eA== @@ -9171,16 +8932,6 @@ npm-which@^3.0.1: npm-path "^2.0.2" which "^1.2.10" -"npmlog@0 || 1 || 2 || 3 || 4", npmlog@^4.0.0: - version "4.1.2" - resolved "https://registry.yarnpkg.com/npmlog/-/npmlog-4.1.2.tgz#08a7f2a8bf734604779a9efa4ad5cc717abb954b" - integrity sha512-2uUqazuKlTaSI/dC8AzicUck7+IrEaOnN/e0jd3Xtt1KcGpwx30v50mL7oPyr/h9bL3E4aZccVwpwP+5W9Vjkg== - dependencies: - are-we-there-yet "~1.1.2" - console-control-strings "~1.1.0" - gauge "~2.7.3" - set-blocking "~2.0.0" - nth-check@^1.0.2, nth-check@~1.0.1: version "1.0.2" resolved "https://registry.yarnpkg.com/nth-check/-/nth-check-1.0.2.tgz#b2bd295c37e3dd58a3bf0700376663ba4d9cf05c" @@ -9404,18 +9155,6 @@ os-browserify@^0.3.0: resolved "https://registry.yarnpkg.com/os-browserify/-/os-browserify-0.3.0.tgz#854373c7f5c2315914fc9bfc6bd8238fdda1ec27" integrity sha1-hUNzx/XCMVkU/Jv8a9gjj92h7Cc= -os-homedir@^1.0.0: - version "1.0.2" - resolved "https://registry.yarnpkg.com/os-homedir/-/os-homedir-1.0.2.tgz#ffbc4988336e0e833de0c168c7ef152121aa7fb3" - integrity sha1-/7xJiDNuDoM94MFox+8VISGqf7M= - -os-locale@^1.4.0: - version "1.4.0" - resolved "https://registry.yarnpkg.com/os-locale/-/os-locale-1.4.0.tgz#20f9f17ae29ed345e8bde583b13d2009803c14d9" - integrity sha1-IPnxeuKe00XoveWDsT0gCYA8FNk= - dependencies: - lcid "^1.0.0" - os-locale@^3.0.0: version "3.1.0" resolved "https://registry.yarnpkg.com/os-locale/-/os-locale-3.1.0.tgz#a802a6ee17f24c10483ab9935719cef4ed16bf1a" @@ -9425,19 +9164,11 @@ os-locale@^3.0.0: lcid "^2.0.0" mem "^4.0.0" -os-tmpdir@^1.0.0, os-tmpdir@~1.0.2: +os-tmpdir@~1.0.2: version "1.0.2" resolved "https://registry.yarnpkg.com/os-tmpdir/-/os-tmpdir-1.0.2.tgz#bbe67406c79aa85c5cfec766fe5734555dfa1274" integrity sha1-u+Z0BseaqFxc/sdm/lc0VV36EnQ= -osenv@0: - version "0.1.5" - resolved "https://registry.yarnpkg.com/osenv/-/osenv-0.1.5.tgz#85cdfafaeb28e8677f416e287592b5f3f49ea410" - integrity sha512-0CWcCECdMVc2Rw3U5w9ZjqX6ga6ubk1xDVKxtBQPK7wis/0F2r9T6k4ydGYhecl7YUBxBVxhL5oisPsNxAPe2g== - dependencies: - os-homedir "^1.0.0" - os-tmpdir "^1.0.0" - p-defer@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/p-defer/-/p-defer-1.0.0.tgz#9f6eb182f6c9aa8cd743004a7d4f96b196b0fb0c" @@ -9714,15 +9445,6 @@ path-to-regexp@0.1.7: resolved "https://registry.yarnpkg.com/path-to-regexp/-/path-to-regexp-0.1.7.tgz#df604178005f522f15eb4490e7247a1bfaa67f8c" integrity sha1-32BBeABfUi8V60SQ5yR6G/qmf4w= -path-type@^1.0.0: - version "1.1.0" - resolved "https://registry.yarnpkg.com/path-type/-/path-type-1.1.0.tgz#59c44f7ee491da704da415da5a4070ba4f8fe441" - integrity sha1-WcRPfuSR2nBNpBXaWkBwuk+P5EE= - dependencies: - graceful-fs "^4.1.2" - pify "^2.0.0" - pinkie-promise "^2.0.0" - path-type@^2.0.0: version "2.0.0" resolved "https://registry.yarnpkg.com/path-type/-/path-type-2.0.0.tgz#f012ccb8415b7096fc2daa1054c3d72389594c73" @@ -11133,14 +10855,6 @@ react@^16.8.6: object-assign "^4.1.1" prop-types "^15.6.2" -read-pkg-up@^1.0.1: - version "1.0.1" - resolved "https://registry.yarnpkg.com/read-pkg-up/-/read-pkg-up-1.0.1.tgz#9d63c13276c065918d57f002a57f40a1b643fb02" - integrity sha1-nWPBMnbAZZGNV/ACpX9AobZD+wI= - dependencies: - find-up "^1.0.0" - read-pkg "^1.0.0" - read-pkg-up@^2.0.0: version "2.0.0" resolved "https://registry.yarnpkg.com/read-pkg-up/-/read-pkg-up-2.0.0.tgz#6b72a8048984e0c41e79510fd5e9fa99b3b549be" @@ -11157,15 +10871,6 @@ read-pkg-up@^4.0.0: 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" - integrity sha1-9f+qXs0pyzHAR0vKfXVra7KePyg= - dependencies: - load-json-file "^1.0.0" - normalize-package-data "^2.3.2" - path-type "^1.0.0" - read-pkg@^2.0.0: version "2.0.0" resolved "https://registry.yarnpkg.com/read-pkg/-/read-pkg-2.0.0.tgz#8ef1c0623c6a6db0dc6713c4bfac46332b2368f8" @@ -11194,7 +10899,7 @@ read-pkg@^5.1.1: parse-json "^5.0.0" type-fest "^0.6.0" -"readable-stream@1 || 2", readable-stream@^2.0.0, readable-stream@^2.0.1, readable-stream@^2.0.2, readable-stream@^2.0.5, readable-stream@^2.0.6, readable-stream@^2.1.5, readable-stream@^2.2.2, readable-stream@^2.3.3, readable-stream@^2.3.5, readable-stream@^2.3.6, readable-stream@~2.3.6: +"readable-stream@1 || 2", readable-stream@^2.0.0, readable-stream@^2.0.1, readable-stream@^2.0.2, readable-stream@^2.0.5, readable-stream@^2.1.5, readable-stream@^2.2.2, readable-stream@^2.3.3, readable-stream@^2.3.5, readable-stream@^2.3.6, readable-stream@~2.3.6: version "2.3.7" resolved "https://registry.yarnpkg.com/readable-stream/-/readable-stream-2.3.7.tgz#1eca1cf711aef814c04f62252a36a62f6cb23b57" integrity sha512-Ebho8K4jIbHAxnuxi7o42OrZgF/ZTNcsZj6nRKyUmkhLFq8CHItp/fy6hQZuZmP/n3yZ9VBUbp4zz/mX8hmYPw== @@ -11232,6 +10937,13 @@ readdirp@~3.3.0: dependencies: picomatch "^2.0.7" +readdirp@~3.5.0: + version "3.5.0" + resolved "https://registry.yarnpkg.com/readdirp/-/readdirp-3.5.0.tgz#9ba74c019b15d365278d2e91bb8c48d7b4d42c9e" + integrity sha512-cMhu7c/8rdhkHXWsY+osBhfSy0JikwpHK/5+imo+LpeasTF8ouErHrlYkwT0++njiyuDvc7OFY5T3ukvZ8qmFQ== + dependencies: + picomatch "^2.2.1" + realpath-native@^1.1.0: version "1.1.0" resolved "https://registry.yarnpkg.com/realpath-native/-/realpath-native-1.1.0.tgz#2003294fea23fb0672f2476ebe22fcf498a2d65c" @@ -11253,14 +10965,6 @@ recursive-readdir@2.2.2: dependencies: minimatch "3.0.4" -redent@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/redent/-/redent-1.0.0.tgz#cf916ab1fd5f1f16dfb20822dd6ec7f730c2afde" - integrity sha1-z5Fqsf1fHxbfsggi3W7H9zDCr94= - dependencies: - indent-string "^2.1.0" - strip-indent "^1.0.1" - redent@^3.0.0: version "3.0.0" resolved "https://registry.yarnpkg.com/redent/-/redent-3.0.0.tgz#e557b7998316bb53c9f1f56fa626352c6963059f" @@ -11476,13 +11180,6 @@ repeat-string@^1.5.4, repeat-string@^1.6.1: resolved "https://registry.yarnpkg.com/repeat-string/-/repeat-string-1.6.1.tgz#8dcae470e1c88abc2d600fff4a776286da75e637" integrity sha1-jcrkcOHIirwtYA//Sndihtp15jc= -repeating@^2.0.0: - version "2.0.1" - resolved "https://registry.yarnpkg.com/repeating/-/repeating-2.0.1.tgz#5214c53a926d3552707527fbab415dbc08d06dda" - integrity sha1-UhTFOpJtNVJwdSf7q0FdvAjQbdo= - dependencies: - is-finite "^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" @@ -11675,13 +11372,6 @@ rgba-regex@^1.0.0: resolved "https://registry.yarnpkg.com/rgba-regex/-/rgba-regex-1.0.0.tgz#43374e2e2ca0968b0ef1523460b7d730ff22eeb3" integrity sha1-QzdOLiyglosO8VI0YLfXMP8i7rM= -rimraf@2, rimraf@^2.2.8, rimraf@^2.5.4, rimraf@^2.6.3, rimraf@^2.7.1: - version "2.7.1" - resolved "https://registry.yarnpkg.com/rimraf/-/rimraf-2.7.1.tgz#35797f13a7fdadc566142c29d4f07ccad483e3ec" - integrity sha512-uWjbaKIK3T1OSVptzX7Nl6PvQ3qAGtKEtVRjRuazjfL3Bx5eI409VZSqgND+4UNnmzLVdPj9FqFJNPqBZFve4w== - dependencies: - glob "^7.1.3" - rimraf@2.6.3: version "2.6.3" resolved "https://registry.yarnpkg.com/rimraf/-/rimraf-2.6.3.tgz#b2d104fe0d8fb27cf9e0a1cda8262dd3833c6cab" @@ -11689,6 +11379,13 @@ rimraf@2.6.3: dependencies: glob "^7.1.3" +rimraf@^2.2.8, rimraf@^2.5.4, rimraf@^2.6.3, rimraf@^2.7.1: + version "2.7.1" + resolved "https://registry.yarnpkg.com/rimraf/-/rimraf-2.7.1.tgz#35797f13a7fdadc566142c29d4f07ccad483e3ec" + integrity sha512-uWjbaKIK3T1OSVptzX7Nl6PvQ3qAGtKEtVRjRuazjfL3Bx5eI409VZSqgND+4UNnmzLVdPj9FqFJNPqBZFve4w== + dependencies: + glob "^7.1.3" + ripemd160@^2.0.0, ripemd160@^2.0.1: version "2.0.2" resolved "https://registry.yarnpkg.com/ripemd160/-/ripemd160-2.0.2.tgz#a1c1a6f624751577ba5d07914cbc92850585890c" @@ -11783,16 +11480,6 @@ sanitize.css@^10.0.0: resolved "https://registry.yarnpkg.com/sanitize.css/-/sanitize.css-10.0.0.tgz#b5cb2547e96d8629a60947544665243b1dc3657a" integrity sha512-vTxrZz4dX5W86M6oVWVdOVe72ZiPs41Oi7Z6Km4W5Turyz28mrXSJhhEBZoRtzJWIv3833WKVwLSDWWkEfupMg== -sass-graph@^2.2.4: - version "2.2.4" - resolved "https://registry.yarnpkg.com/sass-graph/-/sass-graph-2.2.4.tgz#13fbd63cd1caf0908b9fd93476ad43a51d1e0b49" - integrity sha1-E/vWPNHK8JCLn9k0dq1DpR0eC0k= - dependencies: - glob "^7.0.0" - lodash "^4.0.0" - scss-tokenizer "^0.2.3" - yargs "^7.0.0" - sass-loader@8.0.2: version "8.0.2" resolved "https://registry.yarnpkg.com/sass-loader/-/sass-loader-8.0.2.tgz#debecd8c3ce243c76454f2e8290482150380090d" @@ -11804,6 +11491,13 @@ sass-loader@8.0.2: schema-utils "^2.6.1" semver "^6.3.0" +sass@1.32.13: + version "1.32.13" + resolved "https://registry.yarnpkg.com/sass/-/sass-1.32.13.tgz#8d29c849e625a415bce71609c7cf95e15f74ed00" + integrity sha512-dEgI9nShraqP7cXQH+lEXVf73WOPCse0QlFzSD8k+1TcOxCMwVXfQlr0jtoluZysQOyJGnfr21dLvYKDJq8HkA== + dependencies: + chokidar ">=3.0.0 <4.0.0" + sax@^1.2.4, sax@~1.2.4: version "1.2.4" resolved "https://registry.yarnpkg.com/sax/-/sax-1.2.4.tgz#2816234e2378bddc4e5354fab5caa895df7100d9" @@ -11849,14 +11543,6 @@ schema-utils@^2.6.5: ajv "^6.12.0" ajv-keywords "^3.4.1" -scss-tokenizer@^0.2.3: - version "0.2.3" - resolved "https://registry.yarnpkg.com/scss-tokenizer/-/scss-tokenizer-0.2.3.tgz#8eb06db9a9723333824d3f5530641149847ce5d1" - integrity sha1-jrBtualyMzOCTT9VMGQRSYR85dE= - dependencies: - js-base64 "^2.1.8" - source-map "^0.4.2" - select-hose@^2.0.0: version "2.0.0" resolved "https://registry.yarnpkg.com/select-hose/-/select-hose-2.0.0.tgz#625d8658f865af43ec962bfc376a37359a4994ca" @@ -11894,11 +11580,6 @@ semver@7.0.0: resolved "https://registry.yarnpkg.com/semver/-/semver-7.0.0.tgz#5f3ca35761e47e05b206c6daff2cf814f0316b8e" integrity sha512-+GB6zVA9LWh6zovYQLALHwv5rb2PHGlJi3lfiqIHxR0uuwCgefcOJc59v9fv1w8GbStwxuuqqAjI9NMAOOgq1A== -semver@~5.3.0: - version "5.3.0" - resolved "https://registry.yarnpkg.com/semver/-/semver-5.3.0.tgz#9b2ce5d3de02d17c6012ad326aa6b4d0cf54f94f" - integrity sha1-myzl094C0XxgEq0yaqa00M9U+U8= - send@0.17.1: version "0.17.1" resolved "https://registry.yarnpkg.com/send/-/send-0.17.1.tgz#c1d8b059f7900f7466dd4938bdc44e11ddb376c8" @@ -11951,7 +11632,7 @@ serve-static@1.14.1: parseurl "~1.3.3" send "0.17.1" -set-blocking@^2.0.0, set-blocking@~2.0.0: +set-blocking@^2.0.0: version "2.0.0" resolved "https://registry.yarnpkg.com/set-blocking/-/set-blocking-2.0.0.tgz#045f9782d011ae9a6803ddd382b24392b3d890f7" integrity sha1-BF+XgtARrppoA93TgrJDkrPYkPc= @@ -12238,13 +11919,6 @@ source-map@0.6.1, source-map@^0.6.0, source-map@^0.6.1, source-map@~0.6.0, sourc resolved "https://registry.yarnpkg.com/source-map/-/source-map-0.6.1.tgz#74722af32e9614e9c287a8d0bbde48b5e2f1a263" integrity sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g== -source-map@^0.4.2: - version "0.4.4" - resolved "https://registry.yarnpkg.com/source-map/-/source-map-0.4.4.tgz#eba4f5da9c0dc999de68032d8b4f76173652036b" - integrity sha1-66T12pwNyZneaAMti092FzZSA2s= - dependencies: - amdefine ">=0.0.4" - source-map@^0.5.0, source-map@^0.5.6, source-map@^0.5.7: version "0.5.7" resolved "https://registry.yarnpkg.com/source-map/-/source-map-0.5.7.tgz#8a039d2d1021d22d1ea14c80d8ea468ba2ef3fcc" @@ -12374,13 +12048,6 @@ static-extend@^0.1.1: resolved "https://registry.yarnpkg.com/statuses/-/statuses-1.5.0.tgz#161c7dac177659fd9811f43771fa99381478628c" integrity sha1-Fhx9rBd2Wf2YEfQ3cfqZOBR4Yow= -stdout-stream@^1.4.0: - version "1.4.1" - resolved "https://registry.yarnpkg.com/stdout-stream/-/stdout-stream-1.4.1.tgz#5ac174cdd5cd726104aa0c0b2bd83815d8d535de" - integrity sha512-j4emi03KXqJWcIeF8eIXkjMFN1Cmb8gUlDYGeBALLPo5qdyTfA9bOtl8m33lRoC+vFMkP3gl0WsDr6+gzxbbTA== - dependencies: - readable-stream "^2.0.1" - stealthy-require@^1.1.1: version "1.1.1" resolved "https://registry.yarnpkg.com/stealthy-require/-/stealthy-require-1.1.1.tgz#35b09875b4ff49f26a777e509b3090a3226bf24b" @@ -12444,7 +12111,7 @@ string-length@^3.1.0: astral-regex "^1.0.0" strip-ansi "^5.2.0" -string-width@^1.0.1, string-width@^1.0.2: +string-width@^1.0.1: version "1.0.2" resolved "https://registry.yarnpkg.com/string-width/-/string-width-1.0.2.tgz#118bdf5b8cdc51a2a7e70d211e07e2b0b9b107d3" integrity sha1-EYvfW4zcUaKn5w0hHgfisLmxB9M= @@ -12453,7 +12120,7 @@ string-width@^1.0.1, string-width@^1.0.2: is-fullwidth-code-point "^1.0.0" strip-ansi "^3.0.0" -"string-width@^1.0.2 || 2", string-width@^2.0.0, string-width@^2.1.1: +string-width@^2.0.0, string-width@^2.1.1: version "2.1.1" resolved "https://registry.yarnpkg.com/string-width/-/string-width-2.1.1.tgz#ab93f27a8dc13d28cac815c462143a6d9012ae9e" integrity sha512-nOqH59deCq9SRHlxq1Aw85Jnt4w6KvLKqWVik6oA9ZklXLNIOlqg4F2yrT1MVaTjAqvVwdfeZ7w7aCvJD7ugkw== @@ -12585,13 +12252,6 @@ strip-ansi@^5.0.0, strip-ansi@^5.1.0, strip-ansi@^5.2.0: dependencies: ansi-regex "^4.1.0" -strip-bom@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/strip-bom/-/strip-bom-2.0.0.tgz#6219a85616520491f35788bdbf1447a99c7e6b0e" - integrity sha1-YhmoVhZSBJHzV4i9vxRHqZx+aw4= - dependencies: - is-utf8 "^0.2.0" - strip-bom@^3.0.0: version "3.0.0" resolved "https://registry.yarnpkg.com/strip-bom/-/strip-bom-3.0.0.tgz#2334c18e9c759f7bdd56fdef7e9ae3d588e68ed3" @@ -12610,13 +12270,6 @@ strip-eof@^1.0.0: resolved "https://registry.yarnpkg.com/strip-eof/-/strip-eof-1.0.0.tgz#bb43ff5598a6eb05d89b59fcd129c983313606bf" integrity sha1-u0P/VZim6wXYm1n80SnJgzE2Br8= -strip-indent@^1.0.1: - version "1.0.1" - resolved "https://registry.yarnpkg.com/strip-indent/-/strip-indent-1.0.1.tgz#0c7962a6adefa7bbd4ac366460a638552ae1a0a2" - integrity sha1-DHlipq3vp7vUrDZkYKY4VSrhoKI= - dependencies: - get-stdin "^4.0.1" - strip-indent@^3.0.0: version "3.0.0" resolved "https://registry.yarnpkg.com/strip-indent/-/strip-indent-3.0.0.tgz#c32e1cee940b6b3432c771bc2c54bcce73cd3001" @@ -12733,15 +12386,6 @@ tapable@^1.0.0, tapable@^1.1.3: resolved "https://registry.yarnpkg.com/tapable/-/tapable-1.1.3.tgz#a1fccc06b58db61fd7a45da2da44f5f3a3e67ba2" integrity sha512-4WK/bYZmj8xLr+HUCODHGF1ZFzsYffasLUgEiMBY4fgtltdO6B4WJtlSbPaDTLpYTcGVwM2qLnFTICEcNxs3kA== -tar@^2.0.0: - version "2.2.2" - resolved "https://registry.yarnpkg.com/tar/-/tar-2.2.2.tgz#0ca8848562c7299b8b446ff6a4d60cdbb23edc40" - integrity sha512-FCEhQ/4rE1zYv9rYXJw/msRqsnmlje5jHP6huWeBZ704jUTy02c5AZyWujpMR1ax6mVw9NyJMfuK2CMDWVIfgA== - dependencies: - block-stream "*" - fstream "^1.0.12" - inherits "2" - terser-webpack-plugin@2.3.5: version "2.3.5" resolved "https://registry.yarnpkg.com/terser-webpack-plugin/-/terser-webpack-plugin-2.3.5.tgz#5ad971acce5c517440ba873ea4f09687de2f4a81" @@ -12950,11 +12594,6 @@ tr46@^1.0.1: dependencies: punycode "^2.1.0" -trim-newlines@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/trim-newlines/-/trim-newlines-1.0.0.tgz#5887966bb582a4503a41eb524f7d35011815a613" - integrity sha1-WIeWa7WCpFA6QetST301ARgVphM= - trim-trailing-lines@^1.0.0: version "1.1.3" resolved "https://registry.yarnpkg.com/trim-trailing-lines/-/trim-trailing-lines-1.1.3.tgz#7f0739881ff76657b7776e10874128004b625a94" @@ -12970,13 +12609,6 @@ trough@^1.0.0: resolved "https://registry.yarnpkg.com/trough/-/trough-1.0.5.tgz#b8b639cefad7d0bb2abd37d433ff8293efa5f406" integrity sha512-rvuRbTarPXmMb79SmzEp8aqXNKcK+y0XaB298IXueQ8I2PsrATcPBCSPyK/dDNa2iWOhKlfNnOjdAOTBU/nkFA== -"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" - integrity sha512-m6s2OdQe5wgpFMC+pAJ+q9djG82O2jcHPOI6RNg1yy9rCYR+WD6Nbpl32fDpfC56nirdRy+opFa/Vk7HYhqaew== - dependencies: - glob "^7.1.2" - ts-pnp@1.1.6: version "1.1.6" resolved "https://registry.yarnpkg.com/ts-pnp/-/ts-pnp-1.1.6.tgz#389a24396d425a0d3162e96d2b4638900fdc289a" @@ -13754,17 +13386,12 @@ whatwg-url@^7.0.0: tr46 "^1.0.1" webidl-conversions "^4.0.2" -which-module@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/which-module/-/which-module-1.0.0.tgz#bba63ca861948994ff307736089e3b96026c2a4f" - integrity sha1-u6Y8qGGUiZT/MHc2CJ47lgJsKk8= - which-module@^2.0.0: version "2.0.0" resolved "https://registry.yarnpkg.com/which-module/-/which-module-2.0.0.tgz#d9ef07dce77b9902b8a3a8fa4b31c3e3f7e6e87a" integrity sha1-2e8H3Od7mQK4o6j6SzHD4/fm6Ho= -which@1, which@^1.2.10, which@^1.2.9, which@^1.3.0, which@^1.3.1: +which@^1.2.10, which@^1.2.9, which@^1.3.0, which@^1.3.1: version "1.3.1" resolved "https://registry.yarnpkg.com/which/-/which-1.3.1.tgz#a45043d54f5805316da8d62f9f50918d3da70b0a" integrity sha512-HxJdYWq1MTIQbJ3nw0cqssHoTNU267KlrDuGZ1WYlxDStUtKUhOaJmh112/TZmHxxUfuJqPXSOm7tDyas0OSIQ== @@ -13778,13 +13405,6 @@ which@^2.0.1: dependencies: isexe "^2.0.0" -wide-align@^1.1.0: - version "1.1.3" - resolved "https://registry.yarnpkg.com/wide-align/-/wide-align-1.1.3.tgz#ae074e6bdc0c14a431e804e624549c633b000457" - integrity sha512-QGkOQc8XL6Bt5PwnsExKBPuMKBxnGxWWW3fU55Xt4feHozMUhdUMaBCk290qpm/wG5u/RSKzwdAC4i51YigihA== - dependencies: - string-width "^1.0.2 || 2" - word-wrap@~1.2.3: version "1.2.3" resolved "https://registry.yarnpkg.com/word-wrap/-/word-wrap-1.2.3.tgz#610636f6b1f703891bd34771ccb17fb93b47079c" @@ -14031,11 +13651,6 @@ xtend@^4.0.0, xtend@^4.0.1, xtend@~4.0.0, xtend@~4.0.1: resolved "https://registry.yarnpkg.com/xtend/-/xtend-4.0.2.tgz#bb72779f5fa465186b1f438f674fa347fdb5db54" integrity sha512-LKYU1iAXJXUgAXn9URjiu+MWhyUXHsvfp7mcuYm9dSUKK0/CjtrUwFAxD82/mCWbtLsGjFIad0wIsod4zrTAEQ== -y18n@^3.2.1: - version "3.2.1" - resolved "https://registry.yarnpkg.com/y18n/-/y18n-3.2.1.tgz#6d15fba884c08679c0d77e88e7759e811e07fa41" - integrity sha1-bRX7qITAhnnA136I53WegR4H+kE= - "y18n@^3.2.1 || ^4.0.0", y18n@^4.0.0: version "4.0.0" resolved "https://registry.yarnpkg.com/y18n/-/y18n-4.0.0.tgz#95ef94f85ecc81d007c264e190a120f0a3c8566b" @@ -14079,13 +13694,6 @@ yargs-parser@^13.1.2: camelcase "^5.0.0" decamelize "^1.2.0" -yargs-parser@^5.0.0: - version "5.0.0" - resolved "https://registry.yarnpkg.com/yargs-parser/-/yargs-parser-5.0.0.tgz#275ecf0d7ffe05c77e64e7c86e4cd94bf0e1228a" - integrity sha1-J17PDX/+Bcd+ZOfIbkzZS/DhIoo= - dependencies: - camelcase "^3.0.0" - yargs@12.0.5: version "12.0.5" resolved "https://registry.yarnpkg.com/yargs/-/yargs-12.0.5.tgz#05f5997b609647b64f66b81e3b4b10a368e7ad13" @@ -14120,25 +13728,6 @@ yargs@^13.3.0: y18n "^4.0.0" yargs-parser "^13.1.2" -yargs@^7.0.0: - version "7.1.0" - resolved "https://registry.yarnpkg.com/yargs/-/yargs-7.1.0.tgz#6ba318eb16961727f5d284f8ea003e8d6154d0c8" - integrity sha1-a6MY6xaWFyf10oT46gA+jWFU0Mg= - dependencies: - camelcase "^3.0.0" - cliui "^3.2.0" - decamelize "^1.1.1" - get-caller-file "^1.0.1" - os-locale "^1.4.0" - read-pkg-up "^1.0.1" - require-directory "^2.1.1" - require-main-filename "^1.0.1" - set-blocking "^2.0.0" - string-width "^1.0.2" - which-module "^1.0.0" - y18n "^3.2.1" - yargs-parser "^5.0.0" - yup@^0.27.0: version "0.27.0" resolved "https://registry.yarnpkg.com/yup/-/yup-0.27.0.tgz#f8cb198c8e7dd2124beddc2457571329096b06e7" From c547cc467e75ce70d6d091faf75a2575ff23ed80 Mon Sep 17 00:00:00 2001 From: Rowan Seymour Date: Thu, 20 May 2021 14:18:58 -0500 Subject: [PATCH 05/22] v1.13.15 --- CHANGELOG.md | 6 ++++++ package.json | 4 ++-- 2 files changed, 8 insertions(+), 2 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 7e22feeb9..b6ffd645a 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -4,6 +4,12 @@ All notable changes to this project will be documented in this file. Dates are d Generated by [`auto-changelog`](https://github.com/CookPete/auto-changelog). +#### [v1.13.15](https://github.com/nyaruka/floweditor/compare/v1.13.14...v1.13.15) + +> 20 May 2021 + +- Make sass a dev dependency only [`5f8e6fe`](https://github.com/nyaruka/floweditor/commit/5f8e6fe6e3c7d463908e24fa3b646981ff6d5c6d) + #### [v1.13.14](https://github.com/nyaruka/floweditor/compare/v1.13.13...v1.13.14) > 20 May 2021 diff --git a/package.json b/package.json index 28360a25e..199b97cba 100644 --- a/package.json +++ b/package.json @@ -2,7 +2,7 @@ "name": "@nyaruka/flow-editor", "license": "AGPL-3.0", "repository": "git://github.com/nyaruka/floweditor.git", - "version": "1.13.14", + "version": "1.13.15", "description": "'Standalone flow editing tool designed for use within the RapidPro suite of messaging tools but can be adopted for use outside of that ecosystem.'", "browser": "umd/flow-editor.min.js", "unpkg": "umd/flow-editor.min.js", @@ -160,4 +160,4 @@ "uniqid": "5.0.3", "uuid": "3.3.2" } -} \ No newline at end of file +} From 532ede050d5a6bc95b59b6b209348e857af35dfb Mon Sep 17 00:00:00 2001 From: Eric Newcomer Date: Wed, 2 Jun 2021 20:13:45 -0700 Subject: [PATCH 06/22] Remove old completion --- package.json | 2 +- src/components/flow/props.ts | 2 - src/components/nodeeditor/NodeEditor.tsx | 9 +- src/external/index.ts | 29 +------ src/flowTypes.ts | 2 - src/store/editor.ts | 11 +-- src/store/thunks.ts | 15 +--- src/test/config.ts | 2 - src/testUtils/assetCreators.ts | 1 - src/utils/completion.ts | 102 ----------------------- yarn.lock | 8 +- 11 files changed, 11 insertions(+), 172 deletions(-) delete mode 100644 src/utils/completion.ts diff --git a/package.json b/package.json index 0c7c5b88f..9d26ef52c 100644 --- a/package.json +++ b/package.json @@ -70,7 +70,7 @@ "@babel/core": "^7.4.4", "@babel/preset-env": "^7.4.4", "@babel/preset-react": "7.0.0", - "@nyaruka/temba-components": "0.11.6", + "@nyaruka/temba-components": "0.11.13", "@testing-library/jest-dom": "4.0.0", "@testing-library/react": "8.0.1", "@types/common-tags": "^1.8.0", diff --git a/src/components/flow/props.ts b/src/components/flow/props.ts index 09fea1b80..022f42726 100644 --- a/src/components/flow/props.ts +++ b/src/components/flow/props.ts @@ -4,7 +4,6 @@ import { Asset, AssetStore, AssetType, RenderNode } from 'store/flowContext'; import { NodeEditorSettings } from 'store/nodeEditor'; import { DispatchWithState, GetState } from 'store/thunks'; import { titleCase } from 'utils'; -import { CompletionSchema } from 'utils/completion'; export interface IssueProps { helpArticles: { [key: string]: string }; @@ -16,7 +15,6 @@ export interface ActionFormProps extends IssueProps { nodeSettings: NodeEditorSettings; typeConfig: Type; assetStore: AssetStore; - completionSchema: CompletionSchema; addAsset(assetType: string, asset: Asset): void; diff --git a/src/components/nodeeditor/NodeEditor.tsx b/src/components/nodeeditor/NodeEditor.tsx index 63eb7032b..502e21e7b 100644 --- a/src/components/nodeeditor/NodeEditor.tsx +++ b/src/components/nodeeditor/NodeEditor.tsx @@ -29,7 +29,6 @@ import { onUpdateRouter, resetNodeEditingState } from 'store/thunks'; -import { CompletionSchema } from 'utils/completion'; import { LocalizationFormProps } from 'components/flow/props'; export type UpdateLocalizations = (language: string, changes: LocalizationUpdates) => void; @@ -58,7 +57,6 @@ export interface NodeEditorStoreProps { onUpdateAction: OnUpdateAction; onUpdateRouter: OnUpdateRouter; updateUserAddingAction: UpdateUserAddingAction; - completionSchema: CompletionSchema; } export type NodeEditorProps = NodeEditorPassedProps & NodeEditorStoreProps; @@ -69,7 +67,6 @@ export interface FormProps { updateAction(action: AnyAction): void; addAsset(assetType: string, asset: Asset): void; - completionSchema: CompletionSchema; assetStore: AssetStore; issues: FlowIssue[]; @@ -171,7 +168,6 @@ export class NodeEditor extends React.Component { const formProps: FormProps = { assetStore: this.props.assetStore, - completionSchema: this.props.completionSchema, addAsset: this.handleAddAsset, updateAction: this.updateAction, updateRouter: this.updateRouter, @@ -196,7 +192,7 @@ export class NodeEditor extends React.Component { /* istanbul ignore next */ const mapStateToProps = ({ flowContext: { definition, nodes, assetStore, issues }, - editorState: { language, translating, completionSchema }, + editorState: { language, translating }, nodeEditor: { typeConfig, settings } }: AppState) => { const filteredIssues = (issues[settings.originalNode.node.uuid] || []).filter( @@ -212,8 +208,7 @@ const mapStateToProps = ({ translating, typeConfig, settings, - assetStore, - completionSchema + assetStore }; }; diff --git a/src/external/index.ts b/src/external/index.ts index 44f2517db..af1aa4e2d 100644 --- a/src/external/index.ts +++ b/src/external/index.ts @@ -4,16 +4,8 @@ import { SaveResult } from 'components/revisions/RevisionExplorer'; import { Endpoints, Exit, FlowDefinition, SPEC_VERSION, FlowDetails } from 'flowTypes'; import { currencies } from 'store/currencies'; import { Activity, RecentMessage } from 'store/editor'; -import { - Asset, - AssetMap, - Assets, - AssetStore, - AssetType, - CompletionOption -} from 'store/flowContext'; +import { Asset, AssetMap, Assets, AssetStore, AssetType } from 'store/flowContext'; import { assetListToMap } from 'store/helpers'; -import { CompletionSchema } from 'utils/completion'; import { FlowTypes } from 'config/interfaces'; // Configure axios to always send JSON requests @@ -374,25 +366,6 @@ export const createAssetStore = (endpoints: Endpoints): Promise => { }); }; -export const getFunctions = (endpoint: string): Promise => { - return new Promise((resolve, reject) => { - axios - .get(endpoint) - .then(response => { - resolve(response.data); - }) - .catch(error => reject(error)); - }); -}; - -export const getCompletionSchema = (endpoint: string): Promise => { - return new Promise((resolve, reject) => { - axios.get(endpoint).then(response => { - resolve(response.data); - }); - }); -}; - export const getFlowDetails = (revisions: Assets, id: string = null): Promise => { return new Promise((resolve, reject) => { (async () => { diff --git a/src/flowTypes.ts b/src/flowTypes.ts index 7030ac591..285a082a3 100644 --- a/src/flowTypes.ts +++ b/src/flowTypes.ts @@ -38,8 +38,6 @@ export interface Endpoints { environment: string; languages: string; templates: string; - completion: string; - functions: string; simulateStart: string; simulateResume: string; editor: string; diff --git a/src/store/editor.ts b/src/store/editor.ts index b82da5e7d..df72edc80 100644 --- a/src/store/editor.ts +++ b/src/store/editor.ts @@ -1,8 +1,7 @@ import { FlowPosition } from 'flowTypes'; import ActionTypes, { UpdateEditorState } from 'store/actionTypes'; import Constants from 'store/constants'; -import { Asset, RenderNode, CompletionOption } from 'store/flowContext'; -import { CompletionSchema } from 'utils/completion'; +import { Asset, RenderNode } from 'store/flowContext'; // tslint:disable:no-shadowed-variable export interface DragSelection { @@ -62,12 +61,6 @@ export interface EditorState { modalMessage?: ModalMessage; saving?: boolean; - // our schema for peform dot completion - completionSchema: CompletionSchema; - - // our function list for completion - functions: CompletionOption[]; - // the currently shown activity, can be // simulation or live activity: Activity; @@ -101,8 +94,6 @@ export const EMPTY_DRAG_STATE: any = { // Initial state export const initialState: EditorState = { - completionSchema: { types: [], root: [] }, - functions: [], currentRevision: null, simulating: false, translating: false, diff --git a/src/store/thunks.ts b/src/store/thunks.ts index bc2854920..5fd19b6eb 100644 --- a/src/store/thunks.ts +++ b/src/store/thunks.ts @@ -4,13 +4,7 @@ import { getSwitchRouter } from 'components/flow/routers/helpers'; import { SaveResult } from 'components/revisions/RevisionExplorer'; import { FlowTypes, Type, Types } from 'config/interfaces'; import { getTypeConfig } from 'config/typeConfigs'; -import { - createAssetStore, - getCompletionSchema, - getFlowDetails, - saveRevision, - getFunctions -} from 'external'; +import { createAssetStore, getFlowDetails, saveRevision } from 'external'; import isEqual from 'fast-deep-equal'; import { Action, @@ -401,9 +395,6 @@ export const fetchFlow = (endpoints: Endpoints, uuid: string, forceSave = false) fetchFlowActivity(endpoints.activity, dispatch, getState, uuid); }; - const completionSchema = await getCompletionSchema(endpoints.completion); - const functions = await getFunctions(endpoints.functions); - getFlowDetails(assetStore.revisions) .then((response: any) => { // backwards compatibitly for during deployment @@ -414,9 +405,7 @@ export const fetchFlow = (endpoints: Endpoints, uuid: string, forceSave = false) dispatch(loadFlowDefinition(details, assetStore)); dispatch( mergeEditorState({ - currentRevision: details.definition.revision, - completionSchema, - functions + currentRevision: details.definition.revision }) ); diff --git a/src/test/config.ts b/src/test/config.ts index bb6fb8724..dfca4bba9 100644 --- a/src/test/config.ts +++ b/src/test/config.ts @@ -23,8 +23,6 @@ export const config: FlowEditorConfig = { revisions: '/assets/revisions.json', classifiers: '/assets/classifiers.json', ticketers: '/assets/ticketers.json', - completion: '/assets/completion.json', - functions: '/assets/functions.json', attachments: '/assets/attachments.json', recents: '/assets/recents.json', templates: '/assets/templates.json', diff --git a/src/testUtils/assetCreators.ts b/src/testUtils/assetCreators.ts index c5f5f7303..f02f1a814 100644 --- a/src/testUtils/assetCreators.ts +++ b/src/testUtils/assetCreators.ts @@ -453,7 +453,6 @@ export const getActionFormProps = (action: AnyAction): ActionFormProps => ({ recipients: { items: {}, type: AssetType.Contact || AssetType.Group || AssetType.URN } }, helpArticles: {}, - completionSchema: { root: [], types: [] }, addAsset: jest.fn(), updateAction: jest.fn(), onClose: jest.fn(), diff --git a/src/utils/completion.ts b/src/utils/completion.ts deleted file mode 100644 index d3418edc1..000000000 --- a/src/utils/completion.ts +++ /dev/null @@ -1,102 +0,0 @@ -import { AssetStore, CompletionOption } from 'store/flowContext'; - -export interface CompletionAssets { - assetStore: AssetStore; - schema: CompletionSchema; -} - -export interface CompletionProperty { - key: string; - help: string; - type: string; -} - -export interface CompletionType { - name: string; - - key_source?: string; - property_template?: CompletionProperty; - properties?: CompletionProperty[]; -} - -export interface CompletionSchema { - types: CompletionType[]; - root: CompletionProperty[]; -} - -export const getFunctions = (functions: CompletionOption[], query: string): CompletionOption[] => { - return functions.filter((option: CompletionOption) => { - if (option.signature) { - return option.signature.indexOf((query || '').toLowerCase()) === 0; - } - return false; - }); -}; - -/** - * Takes a dot query and returns the completions options at the current level - * @param dotQuery query such as "results.field_name.ca" - */ -export const getCompletions = ( - completion: CompletionAssets, - dotQuery: string -): CompletionOption[] => { - const parts = (dotQuery || '').split('.'); - let currentProps: CompletionProperty[] = completion.schema.root; - - let prefix = ''; - let part = ''; - while (parts.length > 0) { - part = parts.shift(); - if (part) { - // eslint-disable-next-line - const nextProp = currentProps.find((prop: CompletionProperty) => prop.key === part); - if (nextProp) { - // eslint-disable-next-line - const nextType = completion.schema.types.find( - (type: CompletionType) => type.name === nextProp.type - ); - if (nextType && nextType.properties) { - currentProps = nextType.properties; - prefix += part + '.'; - } else if (nextType && nextType.property_template) { - prefix += part + '.'; - const template = nextType.property_template; - - const assetStore = completion.assetStore[nextType.name]; - currentProps = assetStore - ? Object.keys(assetStore.items).map((key: string) => ({ - key: template.key.replace('{key}', key), - help: template.help.replace('{key}', key), - type: template.type - })) - : []; - } else { - // if not type found, hide completion - currentProps = []; - break; - } - } else { - // eslint-disable-next-line - currentProps = currentProps.filter((prop: CompletionProperty) => - prop.key.startsWith(part.toLowerCase()) - ); - break; - } - } - } - - return currentProps.map((prop: CompletionProperty) => { - const name = - prop.key === '__default__' ? prefix.substr(0, prefix.length - 1) : prefix + prop.key; - return { name, summary: prop.help }; - }); -}; - -export const getCompletionName = (option: CompletionOption): string => { - return option.name || option.signature.substr(0, option.signature.indexOf('(')); -}; - -export const getCompletionSignature = (option: CompletionOption): string => { - return option.signature.substr(option.signature.indexOf('(')); -}; diff --git a/yarn.lock b/yarn.lock index 93f432f61..81d432942 100644 --- a/yarn.lock +++ b/yarn.lock @@ -1351,10 +1351,10 @@ "@nodelib/fs.scandir" "2.1.3" fastq "^1.6.0" -"@nyaruka/temba-components@0.11.6": - version "0.11.6" - resolved "https://registry.npmjs.org/@nyaruka/temba-components/-/temba-components-0.11.6.tgz#9c1f63cb8feba89e7f66299dc6d4cf9c31f613e1" - integrity sha512-ty0xfKXgaFlsI3j62zywCoJV8z2WpZ2+pTB+ebYWchEQSzdVHxXKdV++NtGjHks8P8p9UILrfRooQxoAF6HKXw== +"@nyaruka/temba-components@0.11.13": + version "0.11.13" + resolved "https://registry.npmjs.org/@nyaruka/temba-components/-/temba-components-0.11.13.tgz#7885cb1c91c2afae8338c3f26038a7556e525dfc" + integrity sha512-CJKMqKkapbtXZ+QGHKXHpQ4sQauHx2jWFqUXAFsg5c9pK2daJ3Ct9cf/c1IEGm01JzMY2jJ1VO5LIZybAPBpGQ== dependencies: flru "^1.0.2" geojson "^0.5.0" From 74b2d6a941f20e1b01a593b40bb288fc08abb976 Mon Sep 17 00:00:00 2001 From: Eric Newcomer Date: Wed, 2 Jun 2021 20:26:09 -0700 Subject: [PATCH 07/22] Update snapshots --- src/components/__snapshots__/index.test.ts.snap | 2 -- src/store/__snapshots__/thunks.test.ts.snap | 15 --------------- 2 files changed, 17 deletions(-) diff --git a/src/components/__snapshots__/index.test.ts.snap b/src/components/__snapshots__/index.test.ts.snap index 7c95f2829..bc4d30462 100644 --- a/src/components/__snapshots__/index.test.ts.snap +++ b/src/components/__snapshots__/index.test.ts.snap @@ -7,12 +7,10 @@ Array [ "attachments": "/assets/attachments.json", "channels": "/assets/channels.json", "classifiers": "/assets/classifiers.json", - "completion": "/assets/completion.json", "editor": "/flow/editor", "environment": "/assets/environment.json", "fields": "/assets/fields.json", "flows": "/assets/flows.json", - "functions": "/assets/functions.json", "globals": "/assets/globals.json", "groups": "/assets/groups.json", "labels": "/assets/labels.json", diff --git a/src/store/__snapshots__/thunks.test.ts.snap b/src/store/__snapshots__/thunks.test.ts.snap index ff72cf6bc..387dabe90 100644 --- a/src/store/__snapshots__/thunks.test.ts.snap +++ b/src/store/__snapshots__/thunks.test.ts.snap @@ -369,10 +369,6 @@ Array [ "segments": Object {}, }, "activityInterval": 5000, - "completionSchema": Object { - "root": Array [], - "types": Array [], - }, "currentRevision": null, "debug": null, "dragActive": false, @@ -382,7 +378,6 @@ Array [ "dragSelection": null, "dragStartTime": 0, "fetchingFlow": false, - "functions": Array [], "ghostNode": null, "language": null, "liveActivity": Object { @@ -413,10 +408,6 @@ Array [ "segments": Object {}, }, "activityInterval": 5000, - "completionSchema": Object { - "root": Array [], - "types": Array [], - }, "currentRevision": null, "debug": null, "dragActive": false, @@ -426,7 +417,6 @@ Array [ "dragSelection": null, "dragStartTime": 0, "fetchingFlow": false, - "functions": Array [], "ghostNode": null, "language": null, "liveActivity": Object { @@ -1143,10 +1133,6 @@ Array [ "segments": Object {}, }, "activityInterval": 5000, - "completionSchema": Object { - "root": Array [], - "types": Array [], - }, "currentRevision": null, "debug": null, "dragActive": false, @@ -1156,7 +1142,6 @@ Array [ "dragSelection": null, "dragStartTime": 0, "fetchingFlow": false, - "functions": Array [], "ghostNode": Object { "ghost": true, "inboundConnections": Object { From 9105df3a741864a24db2bac00eeea7ff2494555c Mon Sep 17 00:00:00 2001 From: Eric Newcomer Date: Wed, 2 Jun 2021 20:45:39 -0700 Subject: [PATCH 08/22] v1.13.16 --- CHANGELOG.md | 17 +++++------------ package.json | 2 +- 2 files changed, 6 insertions(+), 13 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index b6ffd645a..1d51b8484 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -4,22 +4,15 @@ All notable changes to this project will be documented in this file. Dates are d Generated by [`auto-changelog`](https://github.com/CookPete/auto-changelog). -#### [v1.13.15](https://github.com/nyaruka/floweditor/compare/v1.13.14...v1.13.15) +#### [v1.13.16](https://github.com/nyaruka/floweditor/compare/v1.13.9...v1.13.16) -> 20 May 2021 +> 3 June 2021 +- Remove old completion [`#999`](https://github.com/nyaruka/floweditor/pull/999) +- Update snapshots [`74b2d6a`](https://github.com/nyaruka/floweditor/commit/74b2d6a941f20e1b01a593b40bb288fc08abb976) +- merge [`d250bdc`](https://github.com/nyaruka/floweditor/commit/d250bdcd3d7fc8f81fdc2753b623c50d75b06983) - Make sass a dev dependency only [`5f8e6fe`](https://github.com/nyaruka/floweditor/commit/5f8e6fe6e3c7d463908e24fa3b646981ff6d5c6d) -#### [v1.13.14](https://github.com/nyaruka/floweditor/compare/v1.13.13...v1.13.14) - -> 20 May 2021 - -#### [v1.13.13](https://github.com/nyaruka/floweditor/compare/v1.13.9...v1.13.13) - -> 20 May 2021 - -- Update to latest temba-components [`be2723b`](https://github.com/nyaruka/floweditor/commit/be2723bd2e3ccae82f232a7282817bf6de88584c) - #### [v1.13.9](https://github.com/nyaruka/floweditor/compare/v1.13.8...v1.13.9) > 7 May 2021 diff --git a/package.json b/package.json index 7fcc7a67c..6b81e503b 100644 --- a/package.json +++ b/package.json @@ -2,7 +2,7 @@ "name": "@nyaruka/flow-editor", "license": "AGPL-3.0", "repository": "git://github.com/nyaruka/floweditor.git", - "version": "1.13.15", + "version": "1.13.16", "description": "'Standalone flow editing tool designed for use within the RapidPro suite of messaging tools but can be adopted for use outside of that ecosystem.'", "browser": "umd/flow-editor.min.js", "unpkg": "umd/flow-editor.min.js", From d21743f9609b06d407ec9deb99000aa5f16ffafb Mon Sep 17 00:00:00 2001 From: Eric Newcomer Date: Tue, 29 Jun 2021 18:12:58 -0700 Subject: [PATCH 09/22] Adjust treatment for open ticket action for internal ticketers --- .eslintrc.json | 6 ++- src/components/flow/actions/helpers.tsx | 2 +- .../flow/actions/openticket/OpenTicket.tsx | 24 +++++---- .../flow/routers/ticket/TicketRouterForm.tsx | 33 ++++++++---- .../TicketRouterForm.test.tsx.snap | 50 +------------------ src/config/i18n/defaults.json | 4 +- src/external/index.ts | 2 +- src/flowTypes.ts | 3 +- src/test/config.ts | 1 + 9 files changed, 50 insertions(+), 75 deletions(-) diff --git a/.eslintrc.json b/.eslintrc.json index dc32ca3dd..99f6e411b 100644 --- a/.eslintrc.json +++ b/.eslintrc.json @@ -12,7 +12,11 @@ "jest": true }, "rules": { - "prettier/prettier": ["error", { "singleQuote": true }] + "prettier/prettier": ["error", { "singleQuote": true }], + "no-prototype-builtins": 0, + "@typescript-eslint/explicit-function-return-type": 0, + "@typescript-eslint/camelcase": 0, + "@typescript-eslint/explicit-member-accessibility": 0 }, "settings": { "react": { diff --git a/src/components/flow/actions/helpers.tsx b/src/components/flow/actions/helpers.tsx index b494e89be..9158669d0 100644 --- a/src/components/flow/actions/helpers.tsx +++ b/src/components/flow/actions/helpers.tsx @@ -186,7 +186,7 @@ export const renderAsset = (asset: Asset, endpoints: Endpoints) => { case AssetType.Ticketer: assetBody = ( - Using [[name]] service + Open a new Ticket on [[name]] ); break; diff --git a/src/components/flow/actions/openticket/OpenTicket.tsx b/src/components/flow/actions/openticket/OpenTicket.tsx index af15a303c..03b51c209 100644 --- a/src/components/flow/actions/openticket/OpenTicket.tsx +++ b/src/components/flow/actions/openticket/OpenTicket.tsx @@ -1,17 +1,21 @@ import * as React from 'react'; import { OpenTicket } from 'flowTypes'; -import { renderAsset } from '../helpers'; -import { AssetType } from 'store/flowContext'; import { fakePropType } from 'config/ConfigProvider'; -const OpenTicketComp: React.SFC = ({ ticketer }, context: any): JSX.Element => { - return renderAsset( - { - id: ticketer.uuid, - name: ticketer.name, - type: AssetType.Ticketer - }, - context.config.endpoints +const OpenTicketComp: React.SFC = ( + { ticketer, subject }, + context: any +): JSX.Element => { + const showTicketer = ticketer.name.indexOf(context.config.brand) === -1; + return ( +
+
{subject}
+ {showTicketer ? ( +
+ Using {ticketer.name} +
+ ) : null} +
); }; diff --git a/src/components/flow/routers/ticket/TicketRouterForm.tsx b/src/components/flow/routers/ticket/TicketRouterForm.tsx index 0a267119a..d8117ef6f 100644 --- a/src/components/flow/routers/ticket/TicketRouterForm.tsx +++ b/src/components/flow/routers/ticket/TicketRouterForm.tsx @@ -136,20 +136,31 @@ export default class TicketRouterForm extends React.Component< private renderEdit(): JSX.Element { const typeConfig = this.props.typeConfig; + // if we only have one ticketer or we have issues, show the ticket chooser + const showTicketers = + Object.keys(this.props.assetStore.ticketers.items).length > 1 || this.props.issues.length > 0; + return ( -

- Open ticket via... -

- + {showTicketers ? ( +
+

+ Open ticket via... +

+ +
+ ) : ( + '' + )} +
-

- - Open ticket via... - -

-
-
- -
-
+
@@ -214,30 +191,7 @@ exports[`TicketRouterForm updates should save changes 1`] = `
-

- - Open ticket via... - -

-
-
- -
-
+
diff --git a/src/config/i18n/defaults.json b/src/config/i18n/defaults.json index e26751f5b..906728e9c 100644 --- a/src/config/i18n/defaults.json +++ b/src/config/i18n/defaults.json @@ -141,7 +141,7 @@ }, "assets": { "classifier": "Call [[name]] classifier", - "ticketer": "Using [[name]] service" + "ticketer": "Open a ticket on [[name]]" }, "body": "Body", "buttons": { @@ -507,4 +507,4 @@ "text": "Message" } } -} \ No newline at end of file +} diff --git a/src/external/index.ts b/src/external/index.ts index af1aa4e2d..e892b75b5 100644 --- a/src/external/index.ts +++ b/src/external/index.ts @@ -347,7 +347,7 @@ export const createAssetStore = (endpoints: Endpoints): Promise => { // prefetch some of our assets const fetches: any[] = []; - ['languages', 'fields', 'groups', 'labels', 'globals', 'classifiers'].forEach( + ['languages', 'fields', 'groups', 'labels', 'globals', 'classifiers', 'ticketers'].forEach( (storeId: string) => { const store = assetStore[storeId]; fetches.push( diff --git a/src/flowTypes.ts b/src/flowTypes.ts index 285a082a3..374b14cd7 100644 --- a/src/flowTypes.ts +++ b/src/flowTypes.ts @@ -54,6 +54,7 @@ export interface FlowEditorConfig { debug?: boolean; path?: string; headers?: any; + brand: string; onLoad?: () => void; onActivityClicked?: (uuid: string) => void; onChangeLanguage?: (code: string, name: string) => void; @@ -304,7 +305,7 @@ export type SetContactProperty = export type SetContactAttribute = SetContactField | SetContactProperty; -// tslint:disable-next-line:no-empty-interface +// eslint-disable-next-line @typescript-eslint/no-empty-interface export interface Missing extends Action {} export interface RecipientsAction extends Action { diff --git a/src/test/config.ts b/src/test/config.ts index dfca4bba9..9f9c6b814 100644 --- a/src/test/config.ts +++ b/src/test/config.ts @@ -9,6 +9,7 @@ export const config: FlowEditorConfig = { mutable: true, filters: ['whatsapp', 'airtime', 'resthook', 'classifier', 'ticketer'], help: {}, + brand: 'RapidPro', endpoints: { resthooks: '/assets/resthooks.json', flows: '/assets/flows.json', From 433d561617365c762db02217545d7966341d307b Mon Sep 17 00:00:00 2001 From: Eric Newcomer Date: Tue, 29 Jun 2021 18:15:48 -0700 Subject: [PATCH 10/22] Update i18n --- src/config/i18n/defaults.json | 36 +++++++++++++++-------------------- 1 file changed, 15 insertions(+), 21 deletions(-) diff --git a/src/config/i18n/defaults.json b/src/config/i18n/defaults.json index 906728e9c..59d8d615c 100644 --- a/src/config/i18n/defaults.json +++ b/src/config/i18n/defaults.json @@ -141,7 +141,7 @@ }, "assets": { "classifier": "Call [[name]] classifier", - "ticketer": "Open a ticket on [[name]]" + "ticketer": "Open a new Ticket on [[name]]" }, "body": "Body", "buttons": { @@ -152,17 +152,17 @@ }, "contact_statuses": { "active": "Active", + "archived": "Archived - remove from groups, ignore forever", "blocked": "Blocked - remove from groups, ignore forever", - "stopped": "Stopped - remove from groups, ignore until they message again", - "archived": "Archived - remove from groups, ignore forever" + "stopped": "Stopped - remove from groups, ignore until they message again" }, "context_explorer": { "copied_expression": "Copied <1>[[expression]] to clipboard", "hide_empty": "Showing keys with values", "show_empty": "Showing all keys" }, - "create_group": "Create Group", "create_label": "Create Label", + "document": "Document", "drag_helper": "To connect nodes, <1>drag from the red circle.", "email": { "subject": "Subject", @@ -174,7 +174,8 @@ "errors": { "group_not_found": "Enter the name of an existing group", "http_header_missing_name": "HTTP headers must have a name", - "network": "Hmm, we ran into a problem trying to save your changes. It could just be that your internet connection is not working well at the moment. Please wait a minute or so and try again." + "network": "Hmm, we ran into a problem trying to save your changes. It could just be that your internet connection is not working well at the moment. Please wait a minute or so and try again.", + "server": "Hmm, we ran into a problem trying to save your changes. If this problem persists, take note of the change you are trying to make and contact support." }, "flow_start": "Flow Start", "forms": { @@ -220,7 +221,7 @@ "enter_a_body": "Enter a body", "enter_a_subject": "Enter a subject", "enter_a_url": "Enter a URL", - "enter_field_value": "Enter a new value for [[field]]", + "enter_field_value": "", "enter_flow_parameters_summary": "<0>[[flow]] expects the following parameters to be set by this flow. These can be set using a <4>Save Flow Result action or directly below.", "enter_flow_parameters_tab": "Parameters", "enter_new_name": "Enter a new name for the contact", @@ -252,8 +253,9 @@ "name": "Name", "operand": "Operand", "operator": "operator", - "play_audio_help_text": "Enter a variable that contains a recording the contact has previously recorded. For example, @results.voicemail or @fields.short_bio.", + "pdf_url": "PDF Document URL", "phone_number": "Phone Number", + "play_audio_help_text": "Enter a variable that contains a recording the contact has previously recorded. For example, @results.voicemail or @fields.short_bio.", "quick_replies": "Quick Replies", "quick_replies_summary": "Quick Replies are made into buttons for supported channels. For example, when asking a question, you might add a Quick Reply for \"Yes\" and one for \"No\".", "quick_reply": "Quick Reply", @@ -268,11 +270,11 @@ "resthook": "Resthook", "resthook_to_call": "Select the resthook to call", "result": "Result", - "result_name": "Result Name", "result_category_help": "An optional category for your result. For age, the value might be 17, but the category might be 'Young Adult'", + "result_name": "Result Name", "result_name_help": "By naming the result, you can reference it later using [[resultFormat]]", - "result_value_help": "The value to save for this result or empty to clears it. You can use expressions, for example: @(title(input))", "result_to_split_on": "Result to split on", + "result_value_help": "The value to save for this result or empty to clears it. You can use expressions, for example: @(title(input))", "rules": "rules", "save_as": "Save as", "save_as_title": "Save as..", @@ -281,6 +283,7 @@ "select_contacts": "Select Contacts", "select_flow": "Select the flow to start", "select_groups": "Select Groups", + "select_intent": "Select intent", "select_language": "Select the language to use for this contact", "select_result": "Select Result", "select_what_to_update": "Select what to update", @@ -396,9 +399,9 @@ }, "removal_confirmation": "Remove?", "revisions": { + "current": "current", "header": "Revisions", "label": "Revision History", - "current": "current", "revert": "revert" }, "schemes": { @@ -463,7 +466,6 @@ } }, "simulator": { - "label": "Run in Simulator", "added_to_group": "Added to", "airtime_transferred": "Transferred [[amount]] [[currency]] to [[recipient]]", "contact_field_changed": "Set contact \"[[field]]\" to \"[[value]]\"", @@ -475,6 +477,7 @@ "flow_exited": "Exited flow", "httplog_dialog": "HTTP Request Details", "input_labels_added": "Message labeled with", + "label": "Run in Simulator", "msg_wait": "Waiting for reply", "prompt": { "message": "Enter message", @@ -496,15 +499,6 @@ }, "translation": { "header": "Flow Translation", - "label": "Translations", - "attributes": { - "body": "Body", - "cases": "Rules", - "categories": "Categories", - "quick_replies": "Quick Replies", - "subject": "Subject", - "templates": "Template Variables", - "text": "Message" - } + "label": "Translations" } } From ee7763d66160f9078e1f8abba1361455528cb359 Mon Sep 17 00:00:00 2001 From: Eric Newcomer Date: Wed, 30 Jun 2021 12:04:16 -0700 Subject: [PATCH 11/22] Fix i18n for field placeholder --- src/config/i18n/defaults.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/config/i18n/defaults.json b/src/config/i18n/defaults.json index 59d8d615c..1597eab0e 100644 --- a/src/config/i18n/defaults.json +++ b/src/config/i18n/defaults.json @@ -221,7 +221,7 @@ "enter_a_body": "Enter a body", "enter_a_subject": "Enter a subject", "enter_a_url": "Enter a URL", - "enter_field_value": "", + "enter_field_value": "Enter a new value for [[field]]", "enter_flow_parameters_summary": "<0>[[flow]] expects the following parameters to be set by this flow. These can be set using a <4>Save Flow Result action or directly below.", "enter_flow_parameters_tab": "Parameters", "enter_new_name": "Enter a new name for the contact", From fba4f399424656ef7c4d4d22fc6700cb18bb4a07 Mon Sep 17 00:00:00 2001 From: Eric Newcomer Date: Wed, 30 Jun 2021 13:20:53 -0700 Subject: [PATCH 12/22] Add combined lambda function file --- lambda/editor.js | 2311 ++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 2311 insertions(+) create mode 100644 lambda/editor.js diff --git a/lambda/editor.js b/lambda/editor.js new file mode 100644 index 000000000..39fb6ee0c --- /dev/null +++ b/lambda/editor.js @@ -0,0 +1,2311 @@ +export const completion = { + context: { + types: [ + { + name: 'fields', + key_source: 'fields', + property_template: { + key: '{key}', + help: '{key} for the contact', + type: 'any' + } + }, + { + name: 'results', + key_source: 'results', + property_template: { + key: '{key}', + help: 'the result for {key}', + type: 'result' + } + }, + { + name: 'globals', + key_source: 'globals', + property_template: { + key: '{key}', + help: 'the global value {key}', + type: 'text' + } + }, + { + name: 'urns', + properties: [ + { + key: 'discord', + help: 'Discord URN for the contact', + type: 'text' + }, + { + key: 'ext', + help: 'Ext URN for the contact', + type: 'text' + }, + { + key: 'facebook', + help: 'Facebook URN for the contact', + type: 'text' + }, + { + key: 'fcm', + help: 'Fcm URN for the contact', + type: 'text' + }, + { + key: 'freshchat', + help: 'Freshchat URN for the contact', + type: 'text' + }, + { + key: 'jiochat', + help: 'Jiochat URN for the contact', + type: 'text' + }, + { + key: 'line', + help: 'Line URN for the contact', + type: 'text' + }, + { + key: 'mailto', + help: 'Mailto URN for the contact', + type: 'text' + }, + { + key: 'rocketchat', + help: 'Rocketchat URN for the contact', + type: 'text' + }, + { + key: 'tel', + help: 'Tel URN for the contact', + type: 'text' + }, + { + key: 'telegram', + help: 'Telegram URN for the contact', + type: 'text' + }, + { + key: 'twitter', + help: 'Twitter URN for the contact', + type: 'text' + }, + { + key: 'twitterid', + help: 'Twitterid URN for the contact', + type: 'text' + }, + { + key: 'viber', + help: 'Viber URN for the contact', + type: 'text' + }, + { + key: 'vk', + help: 'Vk URN for the contact', + type: 'text' + }, + { + key: 'wechat', + help: 'Wechat URN for the contact', + type: 'text' + }, + { + key: 'whatsapp', + help: 'Whatsapp URN for the contact', + type: 'text' + } + ] + }, + { + name: 'channel', + properties: [ + { + key: '__default__', + help: 'the name', + type: 'text' + }, + { + key: 'uuid', + help: 'the UUID of the channel', + type: 'text' + }, + { + key: 'name', + help: 'the name of the channel', + type: 'text' + }, + { + key: 'address', + help: 'the address of the channel', + type: 'text' + } + ] + }, + { + name: 'contact', + properties: [ + { + key: '__default__', + help: 'the name or URN', + type: 'text' + }, + { + key: 'uuid', + help: 'the UUID of the contact', + type: 'text' + }, + { + key: 'id', + help: 'the numeric ID of the contact', + type: 'text' + }, + { + key: 'first_name', + help: 'the first name of the contact', + type: 'text' + }, + { + key: 'name', + help: 'the name of the contact', + type: 'text' + }, + { + key: 'language', + help: 'the language of the contact as 3-letter ISO code', + type: 'text' + }, + { + key: 'created_on', + help: 'the creation date of the contact', + type: 'datetime' + }, + { + key: 'last_seen_on', + help: 'the last seen date of the contact', + type: 'any' + }, + { + key: 'urns', + help: 'the URNs belonging to the contact', + type: 'text', + array: true + }, + { + key: 'urn', + help: 'the preferred URN of the contact', + type: 'text' + }, + { + key: 'groups', + help: 'the groups the contact belongs to', + type: 'group', + array: true + }, + { + key: 'fields', + help: 'the custom field values of the contact', + type: 'fields' + }, + { + key: 'channel', + help: 'the preferred channel of the contact', + type: 'channel' + }, + { + key: 'tickets', + help: 'the open tickets of the contact', + type: 'ticket', + array: true + } + ] + }, + { + name: 'flow', + properties: [ + { + key: '__default__', + help: 'the name', + type: 'text' + }, + { + key: 'uuid', + help: 'the UUID of the flow', + type: 'text' + }, + { + key: 'name', + help: 'the name of the flow', + type: 'text' + }, + { + key: 'revision', + help: 'the revision number of the flow', + type: 'text' + } + ] + }, + { + name: 'group', + properties: [ + { + key: 'uuid', + help: 'the UUID of the group', + type: 'text' + }, + { + key: 'name', + help: 'the name of the group', + type: 'text' + } + ] + }, + { + name: 'input', + properties: [ + { + key: '__default__', + help: 'the text and attachments', + type: 'text' + }, + { + key: 'uuid', + help: 'the UUID of the input', + type: 'text' + }, + { + key: 'created_on', + help: 'the creation date of the input', + type: 'datetime' + }, + { + key: 'channel', + help: 'the channel that the input was received on', + type: 'channel' + }, + { + key: 'urn', + help: 'the contact URN that the input was received on', + type: 'text' + }, + { + key: 'text', + help: 'the text part of the input', + type: 'text' + }, + { + key: 'attachments', + help: 'any attachments on the input', + type: 'text', + array: true + }, + { + key: 'external_id', + help: 'the external ID of the input', + type: 'text' + } + ] + }, + { + name: 'node', + properties: [ + { + key: 'uuid', + help: 'the UUID of the node', + type: 'text' + }, + { + key: 'visit_count', + help: 'the count of visits to the node in this run', + type: 'number' + } + ] + }, + { + name: 'related_run', + properties: [ + { + key: '__default__', + help: 'the contact name and flow UUID', + type: 'text' + }, + { + key: 'uuid', + help: 'the UUID of the run', + type: 'text' + }, + { + key: 'contact', + help: 'the contact of the run', + type: 'contact' + }, + { + key: 'flow', + help: 'the flow of the run', + type: 'flow' + }, + { + key: 'fields', + help: 'the custom field values of the run', + type: 'fields' + }, + { + key: 'urns', + help: 'the URN values of the run', + type: 'urns' + }, + { + key: 'results', + help: 'the results saved by the run', + type: 'any' + }, + { + key: 'status', + help: 'the current status of the run', + type: 'text' + } + ] + }, + { + name: 'result', + properties: [ + { + key: '__default__', + help: 'the value', + type: 'text' + }, + { + key: 'name', + help: 'the name of the result', + type: 'text' + }, + { + key: 'value', + help: 'the value of the result', + type: 'text' + }, + { + key: 'category', + help: 'the category of the result', + type: 'text' + }, + { + key: 'category_localized', + help: 'the localized category of the result', + type: 'text' + }, + { + key: 'input', + help: 'the input of the result', + type: 'text' + }, + { + key: 'extra', + help: 'the extra data of the result such as a webhook response', + type: 'any' + }, + { + key: 'node_uuid', + help: 'the UUID of the node in the flow that generated the result', + type: 'text' + }, + { + key: 'created_on', + help: 'the creation date of the result', + type: 'datetime' + } + ] + }, + { + name: 'resume', + properties: [ + { + key: 'type', + help: 'the type of resume that resumed this session', + type: 'text' + } + ] + }, + { + name: 'run', + properties: [ + { + key: '__default__', + help: 'the contact name and flow UUID', + type: 'text' + }, + { + key: 'uuid', + help: 'the UUID of the run', + type: 'text' + }, + { + key: 'contact', + help: 'the contact of the run', + type: 'contact' + }, + { + key: 'flow', + help: 'the flow of the run', + type: 'flow' + }, + { + key: 'status', + help: 'the current status of the run', + type: 'text' + }, + { + key: 'results', + help: 'the results saved by the run', + type: 'results' + }, + { + key: 'created_on', + help: 'the creation date of the run', + type: 'datetime' + }, + { + key: 'exited_on', + help: 'the exit date of the run', + type: 'datetime' + } + ] + }, + { + name: 'ticket', + properties: [ + { + key: 'uuid', + help: 'the UUID of the ticket', + type: 'text' + }, + { + key: 'subject', + help: 'the subject of the ticket', + type: 'text' + }, + { + key: 'body', + help: 'the body of the ticket', + type: 'text' + } + ] + }, + { + name: 'trigger', + properties: [ + { + key: 'type', + help: 'the type of trigger that started this session', + type: 'text' + }, + { + key: 'params', + help: 'the parameters passed to the trigger', + type: 'any' + }, + { + key: 'keyword', + help: 'the keyword match if this is a keyword trigger', + type: 'text' + }, + { + key: 'user', + help: 'the user who started this session if this is a manual trigger', + type: 'text' + }, + { + key: 'origin', + help: 'the origin of this session if this is a manual trigger', + type: 'text' + } + ] + } + ], + root: [ + { + key: 'contact', + help: 'the contact', + type: 'contact' + }, + { + key: 'fields', + help: 'the custom field values of the contact', + type: 'fields' + }, + { + key: 'urns', + help: 'the URN values of the contact', + type: 'urns' + }, + { + key: 'results', + help: 'the current run results', + type: 'results' + }, + { + key: 'input', + help: 'the current input from the contact', + type: 'input' + }, + { + key: 'run', + help: 'the current run', + type: 'run' + }, + { + key: 'child', + help: 'the last child run', + type: 'related_run' + }, + { + key: 'parent', + help: 'the parent of the run', + type: 'related_run' + }, + { + key: 'ticket', + help: 'the last opened ticket for the contact', + type: 'ticket' + }, + { + key: 'webhook', + help: 'the parsed JSON response of the last webhook call', + type: 'any' + }, + { + key: 'node', + help: 'the current node', + type: 'node' + }, + { + key: 'globals', + help: 'the global values', + type: 'globals' + }, + { + key: 'trigger', + help: 'the trigger that started this session', + type: 'trigger' + }, + { + key: 'resume', + help: 'the current resume that continued this session', + type: 'resume' + } + ], + root_no_session: [ + { + key: 'contact', + help: 'the contact', + type: 'contact' + }, + { + key: 'fields', + help: 'the custom field values of the contact', + type: 'fields' + }, + { + key: 'urns', + help: 'the URN values of the contact', + type: 'urns' + }, + { + key: 'globals', + help: 'the global values', + type: 'globals' + } + ] + }, + functions: [ + { + signature: 'abs(number)', + summary: 'Returns the absolute value of `number`.', + detail: '', + examples: [ + { + template: '@(abs(-10))', + output: '10' + }, + { + template: '@(abs(10.5))', + output: '10.5' + }, + { + template: '@(abs("foo"))', + output: 'ERROR' + } + ] + }, + { + signature: 'and(values...)', + summary: 'Returns whether all the given `values` are truthy.', + detail: '', + examples: [ + { + template: '@(and(true))', + output: 'true' + }, + { + template: '@(and(true, false, true))', + output: 'false' + } + ] + }, + { + signature: 'array(values...)', + summary: 'Takes multiple `values` and returns them as an array.', + detail: '', + examples: [ + { + template: '@(array("a", "b", 356)[1])', + output: 'b' + }, + { + template: '@(join(array("a", "b", "c"), "|"))', + output: 'a|b|c' + }, + { + template: '@(count(array()))', + output: '0' + }, + { + template: '@(count(array("a", "b")))', + output: '2' + } + ] + }, + { + signature: 'attachment_parts(attachment)', + summary: 'Parses an attachment into its different parts', + detail: '', + examples: [ + { + template: '@(attachment_parts("image/jpeg:https://example.com/test.jpg"))', + output: '{content_type: image/jpeg, url: https://example.com/test.jpg}' + } + ] + }, + { + signature: 'boolean(value)', + summary: 'Tries to convert `value` to a boolean.', + detail: "An error is returned if the value can't be converted.", + examples: [ + { + template: '@(boolean(array(1, 2)))', + output: 'true' + }, + { + template: '@(boolean("FALSE"))', + output: 'false' + }, + { + template: '@(boolean(1 / 0))', + output: 'ERROR' + } + ] + }, + { + signature: 'char(code)', + summary: 'Returns the character for the given UNICODE `code`.', + detail: 'It is the inverse of [function:code].', + examples: [ + { + template: '@(char(33))', + output: '!' + }, + { + template: '@(char(128512))', + output: '😀' + }, + { + template: '@(char("foo"))', + output: 'ERROR' + } + ] + }, + { + signature: 'clean(text)', + summary: 'Removes any non-printable characters from `text`.', + detail: '', + examples: [ + { + template: '@(clean("😃 Hello \\nwo\\tr\\rld"))', + output: '😃 Hello world' + }, + { + template: '@(clean(123))', + output: '123' + } + ] + }, + { + signature: 'code(text)', + summary: 'Returns the UNICODE code for the first character of `text`.', + detail: 'It is the inverse of [function:char].', + examples: [ + { + template: '@(code("a"))', + output: '97' + }, + { + template: '@(code("abc"))', + output: '97' + }, + { + template: '@(code("😀"))', + output: '128512' + }, + { + template: '@(code("15"))', + output: '49' + }, + { + template: '@(code(15))', + output: '49' + }, + { + template: '@(code(""))', + output: 'ERROR' + } + ] + }, + { + signature: 'count(value)', + summary: 'Returns the number of items in the given array or properties on an object.', + detail: "It will return an error if it is passed an item which isn't countable.", + examples: [ + { + template: '@(count(contact.fields))', + output: '5' + }, + { + template: '@(count(array()))', + output: '0' + }, + { + template: '@(count(array("a", "b", "c")))', + output: '3' + }, + { + template: '@(count(1234))', + output: 'ERROR' + } + ] + }, + { + signature: 'date(value)', + summary: 'Tries to convert `value` to a date.', + detail: + "If it is text then it will be parsed into a date using the default date format.\nAn error is returned if the value can't be converted.", + examples: [ + { + template: '@(date("1979-07-18"))', + output: '1979-07-18' + }, + { + template: '@(date("1979-07-18T10:30:45.123456Z"))', + output: '1979-07-18' + }, + { + template: '@(date("10/05/2010"))', + output: '2010-05-10' + }, + { + template: '@(date("NOT DATE"))', + output: 'ERROR' + } + ] + }, + { + signature: 'date_from_parts(year, month, day)', + summary: 'Creates a date from `year`, `month` and `day`.', + detail: '', + examples: [ + { + template: '@(date_from_parts(2017, 1, 15))', + output: '2017-01-15' + }, + { + template: '@(date_from_parts(2017, 2, 31))', + output: '2017-03-03' + }, + { + template: '@(date_from_parts(2017, 13, 15))', + output: 'ERROR' + } + ] + }, + { + signature: 'datetime(value)', + summary: 'Tries to convert `value` to a datetime.', + detail: + "If it is text then it will be parsed into a datetime using the default date\nand time formats. An error is returned if the value can't be converted.", + examples: [ + { + template: '@(datetime("1979-07-18"))', + output: '1979-07-18T00:00:00.000000-05:00' + }, + { + template: '@(datetime("1979-07-18T10:30:45.123456Z"))', + output: '1979-07-18T10:30:45.123456Z' + }, + { + template: '@(datetime("10/05/2010"))', + output: '2010-05-10T00:00:00.000000-05:00' + }, + { + template: '@(datetime("NOT DATE"))', + output: 'ERROR' + } + ] + }, + { + signature: 'datetime_add(datetime, offset, unit)', + summary: + 'Calculates the date value arrived at by adding `offset` number of `unit` to the `datetime`', + detail: + 'Valid durations are "Y" for years, "M" for months, "W" for weeks, "D" for days, "h" for hour,\n"m" for minutes, "s" for seconds', + examples: [ + { + template: '@(datetime_add("2017-01-15", 5, "D"))', + output: '2017-01-20T00:00:00.000000-05:00' + }, + { + template: '@(datetime_add("2017-01-15 10:45", 30, "m"))', + output: '2017-01-15T11:15:00.000000-05:00' + } + ] + }, + { + signature: 'datetime_diff(date1, date2, unit)', + summary: 'Returns the duration between `date1` and `date2` in the `unit` specified.', + detail: + 'Valid durations are "Y" for years, "M" for months, "W" for weeks, "D" for days, "h" for hour,\n"m" for minutes, "s" for seconds.', + examples: [ + { + template: '@(datetime_diff("2017-01-15", "2017-01-17", "D"))', + output: '2' + }, + { + template: '@(datetime_diff("2017-01-15", "2017-05-15", "W"))', + output: '17' + }, + { + template: '@(datetime_diff("2017-01-15", "2017-05-15", "M"))', + output: '4' + }, + { + template: '@(datetime_diff("2017-01-17 10:50", "2017-01-17 12:30", "h"))', + output: '1' + }, + { + template: '@(datetime_diff("2017-01-17", "2015-12-17", "Y"))', + output: '-2' + } + ] + }, + { + signature: 'datetime_from_epoch(seconds)', + summary: 'Converts the UNIX epoch time `seconds` into a new date.', + detail: '', + examples: [ + { + template: '@(datetime_from_epoch(1497286619))', + output: '2017-06-12T11:56:59.000000-05:00' + }, + { + template: '@(datetime_from_epoch(1497286619.123456))', + output: '2017-06-12T11:56:59.123456-05:00' + } + ] + }, + { + signature: 'default(value, default)', + summary: 'Returns `value` if is not empty or an error, otherwise it returns `default`.', + detail: '', + examples: [ + { + template: '@(default(undeclared.var, "default_value"))', + output: 'default_value' + }, + { + template: '@(default("10", "20"))', + output: '10' + }, + { + template: '@(default("", "value"))', + output: 'value' + }, + { + template: '@(default(" ", "value"))', + output: '\\x20\\x20' + }, + { + template: '@(default(datetime("invalid-date"), "today"))', + output: 'today' + }, + { + template: '@(default(format_urn("invalid-urn"), "ok"))', + output: 'ok' + } + ] + }, + { + signature: 'epoch(date)', + summary: 'Converts `date` to a UNIX epoch time.', + detail: 'The returned number can contain fractional seconds.', + examples: [ + { + template: '@(epoch("2017-06-12T16:56:59.000000Z"))', + output: '1497286619' + }, + { + template: '@(epoch("2017-06-12T18:56:59.000000+02:00"))', + output: '1497286619' + }, + { + template: '@(epoch("2017-06-12T16:56:59.123456Z"))', + output: '1497286619.123456' + }, + { + template: '@(round_down(epoch("2017-06-12T16:56:59.123456Z")))', + output: '1497286619' + } + ] + }, + { + signature: 'extract(object, properties)', + summary: 'Takes an object and extracts the named property.', + detail: '', + examples: [ + { + template: '@(extract(contact, "name"))', + output: 'Ryan Lewis' + }, + { + template: '@(extract(contact.groups[0], "name"))', + output: 'Testers' + } + ] + }, + { + signature: 'extract_object(object, properties...)', + summary: 'Takes an object and returns a new object by extracting only the named properties.', + detail: '', + examples: [ + { + template: '@(extract_object(contact.groups[0], "name"))', + output: '{name: Testers}' + } + ] + }, + { + signature: 'field(text, index, delimiter)', + summary: 'Splits `text` using the given `delimiter` and returns the field at `index`.', + detail: + 'The index starts at zero. When splitting with a space, the delimiter is considered to be all whitespace.', + examples: [ + { + template: '@(field("a,b,c", 1, ","))', + output: 'b' + }, + { + template: '@(field("a,,b,c", 1, ","))', + output: '' + }, + { + template: '@(field("a b c", 1, " "))', + output: 'b' + }, + { + template: '@(field("a\t\tb\tc\td", 1, "\t"))', + output: '' + }, + { + template: '@(field("a\\t\\tb\\tc\\td", 1, " "))', + output: '' + }, + { + template: '@(field("a,b,c", "foo", ","))', + output: 'ERROR' + } + ] + }, + { + signature: 'foreach(values, func, [args...])', + summary: 'Creates a new array by applying `func` to each value in `values`.', + detail: + 'If the given function takes more than one argument, you can pass additional arguments after the function.', + examples: [ + { + template: '@(foreach(array("a", "b", "c"), upper))', + output: '[A, B, C]' + }, + { + template: '@(foreach(array("the man", "fox", "jumped up"), word, 0))', + output: '[the, fox, jumped]' + } + ] + }, + { + signature: 'foreach_value(object, func, [args...])', + summary: 'Creates a new object by applying `func` to each property value of `object`.', + detail: + 'If the given function takes more than one argument, you can pass additional arguments after the function.', + examples: [ + { + template: '@(foreach_value(object("a", "x", "b", "y"), upper))', + output: '{a: X, b: Y}' + }, + { + template: '@(foreach_value(object("a", "hi there", "b", "good bye"), word, 1))', + output: '{a: there, b: bye}' + } + ] + }, + { + signature: 'format(value)', + summary: 'Formats `value` according to its type.', + detail: '', + examples: [ + { + template: '@(format(1234.5670))', + output: '1,234.567' + }, + { + template: '@(format(now()))', + output: '11-04-2018 13:24' + }, + { + template: '@(format(today()))', + output: '11-04-2018' + } + ] + }, + { + signature: 'format_date(date, [,format])', + summary: 'Formats `date` as text according to the given `format`.', + detail: + "If `format` is not specified then the environment's default format is used. The format\nstring can consist of the following characters. The characters ' ', ':', ',', 'T', '-'\nand '_' are ignored. Any other character is an error.\n\n* `YY` - last two digits of year 0-99\n* `YYYY` - four digits of year 0000-9999\n* `M` - month 1-12\n* `MM` - month, zero padded 01-12\n* `MMM` - month Jan-Dec (localized)\n* `MMMM` - month January-December (localized)\n* `D` - day of month, 1-31\n* `DD` - day of month, zero padded 01-31\n* `EEE` - day of week Mon-Sun (localized)\n* `EEEE` - day of week Monday-Sunday (localized)", + examples: [ + { + template: '@(format_date("1979-07-18T15:00:00.000000Z"))', + output: '18-07-1979' + }, + { + template: '@(format_date("1979-07-18T15:00:00.000000Z", "YYYY-MM-DD"))', + output: '1979-07-18' + }, + { + template: '@(format_date("2010-05-10T19:50:00.000000Z", "YYYY M DD"))', + output: '2010 5 10' + }, + { + template: '@(format_date("1979-07-18T15:00:00.000000Z", "YYYY"))', + output: '1979' + }, + { + template: '@(format_date("1979-07-18T15:00:00.000000Z", "M"))', + output: '7' + }, + { + template: '@(format_date("NOT DATE", "YYYY-MM-DD"))', + output: 'ERROR' + } + ] + }, + { + signature: 'format_datetime(datetime [,format [,timezone]])', + summary: 'Formats `datetime` as text according to the given `format`.', + detail: + "If `format` is not specified then the environment's default format is used. The format\nstring can consist of the following characters. The characters ' ', ':', ',', 'T', '-'\nand '_' are ignored. Any other character is an error.\n\n* `YY` - last two digits of year 0-99\n* `YYYY` - four digits of year 0000-9999\n* `M` - month 1-12\n* `MM` - month, zero padded 01-12\n* `MMM` - month Jan-Dec (localized)\n* `MMMM` - month January-December (localized)\n* `D` - day of month, 1-31\n* `DD` - day of month, zero padded 01-31\n* `EEE` - day of week Mon-Sun (localized)\n* `EEEE` - day of week Monday-Sunday (localized)\n* `h` - hour of the day 1-12\n* `hh` - hour of the day, zero padded 01-12\n* `t` - twenty four hour of the day 0-23\n* `tt` - twenty four hour of the day, zero padded 00-23\n* `m` - minute 0-59\n* `mm` - minute, zero padded 00-59\n* `s` - second 0-59\n* `ss` - second, zero padded 00-59\n* `fff` - milliseconds\n* `ffffff` - microseconds\n* `fffffffff` - nanoseconds\n* `aa` - am or pm (localized)\n* `AA` - AM or PM (localized)\n* `Z` - hour and minute offset from UTC, or Z for UTC\n* `ZZZ` - hour and minute offset from UTC\n\nTimezone should be a location name as specified in the IANA Time Zone database, such\nas \"America/Guayaquil\" or \"America/Los_Angeles\". If not specified, the current timezone\nwill be used. An error will be returned if the timezone is not recognized.", + examples: [ + { + template: '@(format_datetime("1979-07-18T15:00:00.000000Z"))', + output: '18-07-1979 10:00' + }, + { + template: '@(format_datetime("1979-07-18T15:00:00.000000Z", "YYYY-MM-DD"))', + output: '1979-07-18' + }, + { + template: '@(format_datetime("2010-05-10T19:50:00.000000Z", "YYYY M DD tt:mm"))', + output: '2010 5 10 14:50' + }, + { + template: + '@(format_datetime("2010-05-10T19:50:00.000000Z", "YYYY-MM-DD hh:mm AA", "America/Los_Angeles"))', + output: '2010-05-10 12:50 PM' + }, + { + template: '@(format_datetime("1979-07-18T15:00:00.000000Z", "YYYY"))', + output: '1979' + }, + { + template: '@(format_datetime("1979-07-18T15:00:00.000000Z", "M"))', + output: '7' + }, + { + template: '@(format_datetime("NOT DATE", "YYYY-MM-DD"))', + output: 'ERROR' + } + ] + }, + { + signature: 'format_location(location)', + summary: 'Formats the given `location` as its name.', + detail: '', + examples: [ + { + template: '@(format_location("Rwanda"))', + output: 'Rwanda' + }, + { + template: '@(format_location("Rwanda > Kigali"))', + output: 'Kigali' + } + ] + }, + { + signature: 'format_number(number, places [, humanize])', + summary: 'Formats `number` to the given number of decimal `places`.', + detail: + 'An optional third argument `humanize` can be false to disable the use of thousand separators.', + examples: [ + { + template: '@(format_number(1234))', + output: '1,234' + }, + { + template: '@(format_number(1234.5670))', + output: '1,234.567' + }, + { + template: '@(format_number(1234.5670, 2, true))', + output: '1,234.57' + }, + { + template: '@(format_number(1234.5678, 0, false))', + output: '1235' + }, + { + template: '@(format_number("foo", 2, false))', + output: 'ERROR' + } + ] + }, + { + signature: 'format_time(time [,format])', + summary: 'Formats `time` as text according to the given `format`.', + detail: + "If `format` is not specified then the environment's default format is used. The format\nstring can consist of the following characters. The characters ' ', ':', ',', 'T', '-'\nand '_' are ignored. Any other character is an error.\n\n* `h` - hour of the day 1-12\n* `hh` - hour of the day, zero padded 01-12\n* `t` - twenty four hour of the day 0-23\n* `tt` - twenty four hour of the day, zero padded 00-23\n* `m` - minute 0-59\n* `mm` - minute, zero padded 00-59\n* `s` - second 0-59\n* `ss` - second, zero padded 00-59\n* `fff` - milliseconds\n* `ffffff` - microseconds\n* `fffffffff` - nanoseconds\n* `aa` - am or pm (localized)\n* `AA` - AM or PM (localized)", + examples: [ + { + template: '@(format_time("14:50:30.000000"))', + output: '14:50' + }, + { + template: '@(format_time("14:50:30.000000", "h:mm aa"))', + output: '2:50 pm' + }, + { + template: '@(format_time("15:00:27.000000", "s"))', + output: '27' + }, + { + template: '@(format_time("NOT TIME", "hh:mm"))', + output: 'ERROR' + } + ] + }, + { + signature: 'format_urn(urn)', + summary: 'Formats `urn` into human friendly text.', + detail: '', + examples: [ + { + template: '@(format_urn("tel:+250781234567"))', + output: '0781 234 567' + }, + { + template: '@(format_urn("twitter:134252511151#billy_bob"))', + output: 'billy_bob' + }, + { + template: '@(format_urn(contact.urn))', + output: '(202) 456-1111' + }, + { + template: '@(format_urn(urns.tel))', + output: '(202) 456-1111' + }, + { + template: '@(format_urn(urns.mailto))', + output: 'foo@bar.com' + }, + { + template: '@(format_urn("NOT URN"))', + output: 'ERROR' + } + ] + }, + { + signature: 'html_decode(text)', + summary: 'HTML decodes `text`', + detail: '', + examples: [ + { + template: '@(html_decode("Red & Blue"))', + output: 'Red & Blue' + }, + { + template: '@(html_decode("5 + 10"))', + output: '5 + 10' + } + ] + }, + { + signature: 'if(test, value1, value2)', + summary: 'Returns `value1` if `test` is truthy or `value2` if not.', + detail: 'If the first argument is an error that error is returned.', + examples: [ + { + template: '@(if(1 = 1, "foo", "bar"))', + output: 'foo' + }, + { + template: '@(if("foo" > "bar", "foo", "bar"))', + output: 'ERROR' + } + ] + }, + { + signature: 'is_error(value)', + summary: 'Returns whether `value` is an error', + detail: '', + examples: [ + { + template: '@(is_error(datetime("foo")))', + output: 'true' + }, + { + template: '@(is_error(run.not.existing))', + output: 'true' + }, + { + template: '@(is_error("hello"))', + output: 'false' + } + ] + }, + { + signature: 'join(array, separator)', + summary: 'Joins the given `array` of strings with `separator` to make text.', + detail: '', + examples: [ + { + template: '@(join(array("a", "b", "c"), "|"))', + output: 'a|b|c' + }, + { + template: '@(join(split("a.b.c", "."), " "))', + output: 'a b c' + } + ] + }, + { + signature: 'json(value)', + summary: 'Returns the JSON representation of `value`.', + detail: '', + examples: [ + { + template: '@(json("string"))', + output: '"string"' + }, + { + template: '@(json(10))', + output: '10' + }, + { + template: '@(json(null))', + output: 'null' + }, + { + template: '@(json(contact.uuid))', + output: '"5d76d86b-3bb9-4d5a-b822-c9d86f5d8e4f"' + } + ] + }, + { + signature: 'lower(text)', + summary: 'Converts `text` to lowercase.', + detail: '', + examples: [ + { + template: '@(lower("HellO"))', + output: 'hello' + }, + { + template: '@(lower("hello"))', + output: 'hello' + }, + { + template: '@(lower("123"))', + output: '123' + }, + { + template: '@(lower("😀"))', + output: '😀' + } + ] + }, + { + signature: 'max(numbers...)', + summary: 'Returns the maximum value in `numbers`.', + detail: '', + examples: [ + { + template: '@(max(1, 2))', + output: '2' + }, + { + template: '@(max(1, -1, 10))', + output: '10' + }, + { + template: '@(max(1, 10, "foo"))', + output: 'ERROR' + } + ] + }, + { + signature: 'mean(numbers...)', + summary: 'Returns the arithmetic mean of `numbers`.', + detail: '', + examples: [ + { + template: '@(mean(1, 2))', + output: '1.5' + }, + { + template: '@(mean(1, 2, 6))', + output: '3' + }, + { + template: '@(mean(1, "foo"))', + output: 'ERROR' + } + ] + }, + { + signature: 'min(numbers...)', + summary: 'Returns the minimum value in `numbers`.', + detail: '', + examples: [ + { + template: '@(min(1, 2))', + output: '1' + }, + { + template: '@(min(2, 2, -10))', + output: '-10' + }, + { + template: '@(min(1, 2, "foo"))', + output: 'ERROR' + } + ] + }, + { + signature: 'mod(dividend, divisor)', + summary: 'Returns the remainder of the division of `dividend` by `divisor`.', + detail: '', + examples: [ + { + template: '@(mod(5, 2))', + output: '1' + }, + { + template: '@(mod(4, 2))', + output: '0' + }, + { + template: '@(mod(5, "foo"))', + output: 'ERROR' + } + ] + }, + { + signature: 'now()', + summary: 'Returns the current date and time in the current timezone.', + detail: '', + examples: [ + { + template: '@(now())', + output: '2018-04-11T13:24:30.123456-05:00' + } + ] + }, + { + signature: 'number(value)', + summary: 'Tries to convert `value` to a number.', + detail: "An error is returned if the value can't be converted.", + examples: [ + { + template: '@(number(10))', + output: '10' + }, + { + template: '@(number("123.45000"))', + output: '123.45' + }, + { + template: '@(number("what?"))', + output: 'ERROR' + } + ] + }, + { + signature: 'object(pairs...)', + summary: 'Takes property name value pairs and returns them as a new object.', + detail: '', + examples: [ + { + template: '@(object())', + output: '{}' + }, + { + template: '@(object("a", 123, "b", "hello"))', + output: '{a: 123, b: hello}' + }, + { + template: '@(object("a"))', + output: 'ERROR' + } + ] + }, + { + signature: 'or(values...)', + summary: 'Returns whether if any of the given `values` are truthy.', + detail: '', + examples: [ + { + template: '@(or(true))', + output: 'true' + }, + { + template: '@(or(true, false, true))', + output: 'true' + } + ] + }, + { + signature: 'parse_datetime(text, format [,timezone])', + summary: 'Parses `text` into a date using the given `format`.', + detail: + "The format string can consist of the following characters. The characters\n' ', ':', ',', 'T', '-' and '_' are ignored. Any other character is an error.\n\n* `YY` - last two digits of year 0-99\n* `YYYY` - four digits of year 0000-9999\n* `M` - month 1-12\n* `MM` - month, zero padded 01-12\n* `D` - day of month, 1-31\n* `DD` - day of month, zero padded 01-31\n* `h` - hour of the day 1-12\n* `hh` - hour of the day 01-12\n* `t` - twenty four hour of the day 1-23\n* `tt` - twenty four hour of the day, zero padded 01-23\n* `m` - minute 0-59\n* `mm` - minute, zero padded 00-59\n* `s` - second 0-59\n* `ss` - second, zero padded 00-59\n* `fff` - milliseconds\n* `ffffff` - microseconds\n* `fffffffff` - nanoseconds\n* `aa` - am or pm\n* `AA` - AM or PM\n* `Z` - hour and minute offset from UTC, or Z for UTC\n* `ZZZ` - hour and minute offset from UTC\n\nTimezone should be a location name as specified in the IANA Time Zone database, such\nas \"America/Guayaquil\" or \"America/Los_Angeles\". If not specified, the current timezone\nwill be used. An error will be returned if the timezone is not recognized.\n\nNote that fractional seconds will be parsed even without an explicit format identifier.\nYou should only specify fractional seconds when you want to assert the number of places\nin the input format.\n\nparse_datetime will return an error if it is unable to convert the text to a datetime.", + examples: [ + { + template: '@(parse_datetime("1979-07-18", "YYYY-MM-DD"))', + output: '1979-07-18T00:00:00.000000-05:00' + }, + { + template: '@(parse_datetime("2010 5 10", "YYYY M DD"))', + output: '2010-05-10T00:00:00.000000-05:00' + }, + { + template: + '@(parse_datetime("2010 5 10 12:50", "YYYY M DD tt:mm", "America/Los_Angeles"))', + output: '2010-05-10T12:50:00.000000-07:00' + }, + { + template: '@(parse_datetime("NOT DATE", "YYYY-MM-DD"))', + output: 'ERROR' + } + ] + }, + { + signature: 'parse_json(text)', + summary: 'Tries to parse `text` as JSON.', + detail: 'If the given `text` is not valid JSON, then an error is returned', + examples: [ + { + template: '@(parse_json("{\\"foo\\": \\"bar\\"}").foo)', + output: 'bar' + }, + { + template: '@(parse_json("[1,2,3,4]")[2])', + output: '3' + }, + { + template: '@(parse_json("invalid json"))', + output: 'ERROR' + } + ] + }, + { + signature: 'parse_time(text, format)', + summary: 'Parses `text` into a time using the given `format`.', + detail: + "The format string can consist of the following characters. The characters\n' ', ':', ',', 'T', '-' and '_' are ignored. Any other character is an error.\n\n* `h` - hour of the day 1-12\n* `hh` - hour of the day, zero padded 01-12\n* `t` - twenty four hour of the day 1-23\n* `tt` - twenty four hour of the day, zero padded 01-23\n* `m` - minute 0-59\n* `mm` - minute, zero padded 00-59\n* `s` - second 0-59\n* `ss` - second, zero padded 00-59\n* `fff` - milliseconds\n* `ffffff` - microseconds\n* `fffffffff` - nanoseconds\n* `aa` - am or pm\n* `AA` - AM or PM\n\nNote that fractional seconds will be parsed even without an explicit format identifier.\nYou should only specify fractional seconds when you want to assert the number of places\nin the input format.\n\nparse_time will return an error if it is unable to convert the text to a time.", + examples: [ + { + template: '@(parse_time("15:28", "tt:mm"))', + output: '15:28:00.000000' + }, + { + template: '@(parse_time("2:40 pm", "h:mm aa"))', + output: '14:40:00.000000' + }, + { + template: '@(parse_time("NOT TIME", "tt:mm"))', + output: 'ERROR' + } + ] + }, + { + signature: 'percent(number)', + summary: 'Formats `number` as a percentage.', + detail: '', + examples: [ + { + template: '@(percent(0.54234))', + output: '54%' + }, + { + template: '@(percent(1.2))', + output: '120%' + }, + { + template: '@(percent("foo"))', + output: 'ERROR' + } + ] + }, + { + signature: 'rand()', + summary: 'Returns a single random number between [0.0-1.0).', + detail: '', + examples: [ + { + template: '@(rand())', + output: '0.6075520156746239' + }, + { + template: '@(rand())', + output: '0.48467757094734026' + } + ] + }, + { + signature: 'rand_between()', + summary: 'A single random integer in the given inclusive range.', + detail: '', + examples: [ + { + template: '@(rand_between(1, 10))', + output: '10' + }, + { + template: '@(rand_between(1, 10))', + output: '2' + } + ] + }, + { + signature: 'read_chars(text)', + summary: 'Converts `text` into something that can be read by IVR systems.', + detail: + 'ReadChars will split the numbers such as they are easier to understand. This includes\nsplitting in 3s or 4s if appropriate.', + examples: [ + { + template: '@(read_chars("1234"))', + output: '1 2 3 4' + }, + { + template: '@(read_chars("abc"))', + output: 'a b c' + }, + { + template: '@(read_chars("abcdef"))', + output: 'a b c , d e f' + } + ] + }, + { + signature: 'regex_match(text, pattern [,group])', + summary: 'Returns the first match of the regular expression `pattern` in `text`.', + detail: + 'An optional third parameter `group` determines which matching group will be returned.', + examples: [ + { + template: '@(regex_match("sda34dfddg67", "\\d+"))', + output: '34' + }, + { + template: '@(regex_match("Bob Smith", "(\\w+) (\\w+)", 1))', + output: 'Bob' + }, + { + template: '@(regex_match("Bob Smith", "(\\w+) (\\w+)", 2))', + output: 'Smith' + }, + { + template: '@(regex_match("Bob Smith", "(\\w+) (\\w+)", 5))', + output: 'ERROR' + }, + { + template: '@(regex_match("abc", "[\\."))', + output: 'ERROR' + } + ] + }, + { + signature: 'remove_first_word(text)', + summary: 'Removes the first word of `text`.', + detail: '', + examples: [ + { + template: '@(remove_first_word("foo bar"))', + output: 'bar' + }, + { + template: '@(remove_first_word("Hi there. I\'m a flow!"))', + output: "there. I'm a flow!" + } + ] + }, + { + signature: 'repeat(text, count)', + summary: 'Returns `text` repeated `count` number of times.', + detail: '', + examples: [ + { + template: '@(repeat("*", 8))', + output: '********' + }, + { + template: '@(repeat("*", "foo"))', + output: 'ERROR' + } + ] + }, + { + signature: 'replace(text, needle, replacement [, count])', + summary: 'Replaces up to `count` occurrences of `needle` with `replacement` in `text`.', + detail: 'If `count` is omitted or is less than 0 then all occurrences are replaced.', + examples: [ + { + template: '@(replace("foo bar foo", "foo", "zap"))', + output: 'zap bar zap' + }, + { + template: '@(replace("foo bar foo", "foo", "zap", 1))', + output: 'zap bar foo' + }, + { + template: '@(replace("foo bar", "baz", "zap"))', + output: 'foo bar' + } + ] + }, + { + signature: 'replace_time(datetime)', + summary: 'Returns a new datetime with the time part replaced by the `time`.', + detail: '', + examples: [ + { + template: '@(replace_time(now(), "10:30"))', + output: '2018-04-11T10:30:00.000000-05:00' + }, + { + template: '@(replace_time("2017-01-15", "10:30"))', + output: '2017-01-15T10:30:00.000000-05:00' + }, + { + template: '@(replace_time("foo", "10:30"))', + output: 'ERROR' + } + ] + }, + { + signature: 'round(number [,places])', + summary: 'Rounds `number` to the nearest value.', + detail: + 'You can optionally pass in the number of decimal places to round to as `places`. If `places` < 0,\nit will round the integer part to the nearest 10^(-places).', + examples: [ + { + template: '@(round(12))', + output: '12' + }, + { + template: '@(round(12.141))', + output: '12' + }, + { + template: '@(round(12.6))', + output: '13' + }, + { + template: '@(round(12.141, 2))', + output: '12.14' + }, + { + template: '@(round(12.146, 2))', + output: '12.15' + }, + { + template: '@(round(12.146, -1))', + output: '10' + }, + { + template: '@(round("notnum", 2))', + output: 'ERROR' + } + ] + }, + { + signature: 'round_down(number [,places])', + summary: 'Rounds `number` down to the nearest integer value.', + detail: 'You can optionally pass in the number of decimal places to round to as `places`.', + examples: [ + { + template: '@(round_down(12))', + output: '12' + }, + { + template: '@(round_down(12.141))', + output: '12' + }, + { + template: '@(round_down(12.6))', + output: '12' + }, + { + template: '@(round_down(12.141, 2))', + output: '12.14' + }, + { + template: '@(round_down(12.146, 2))', + output: '12.14' + }, + { + template: '@(round_down("foo"))', + output: 'ERROR' + } + ] + }, + { + signature: 'round_up(number [,places])', + summary: 'Rounds `number` up to the nearest integer value.', + detail: 'You can optionally pass in the number of decimal places to round to as `places`.', + examples: [ + { + template: '@(round_up(12))', + output: '12' + }, + { + template: '@(round_up(12.141))', + output: '13' + }, + { + template: '@(round_up(12.6))', + output: '13' + }, + { + template: '@(round_up(12.141, 2))', + output: '12.15' + }, + { + template: '@(round_up(12.146, 2))', + output: '12.15' + }, + { + template: '@(round_up("foo"))', + output: 'ERROR' + } + ] + }, + { + signature: 'split(text, [,delimiters])', + summary: 'Splits `text` into an array of separated words.', + detail: + 'Empty values are removed from the returned list. There is an optional final parameter `delimiters` which\nis string of characters used to split the text into words.', + examples: [ + { + template: '@(split("a b c"))', + output: '[a, b, c]' + }, + { + template: '@(split("a", " "))', + output: '[a]' + }, + { + template: '@(split("abc..d", "."))', + output: '[abc, d]' + }, + { + template: '@(split("a.b.c.", "."))', + output: '[a, b, c]' + }, + { + template: '@(split("a|b,c d", " .|,"))', + output: '[a, b, c, d]' + } + ] + }, + { + signature: 'text(value)', + summary: 'Tries to convert `value` to text.', + detail: "An error is returned if the value can't be converted.", + examples: [ + { + template: '@(text(3 = 3))', + output: 'true' + }, + { + template: '@(json(text(123.45)))', + output: '"123.45"' + }, + { + template: '@(text(1 / 0))', + output: 'ERROR' + } + ] + }, + { + signature: 'text_compare(text1, text2)', + summary: 'Returns the dictionary order of `text1` and `text2`.', + detail: + 'The return value will be -1 if `text1` comes before `text2`, 0 if they are equal\nand 1 if `text1` comes after `text2`.', + examples: [ + { + template: '@(text_compare("abc", "abc"))', + output: '0' + }, + { + template: '@(text_compare("abc", "def"))', + output: '-1' + }, + { + template: '@(text_compare("zzz", "aaa"))', + output: '1' + } + ] + }, + { + signature: 'text_length(value)', + summary: 'Returns the length (number of characters) of `value` when converted to text.', + detail: '', + examples: [ + { + template: '@(text_length("abc"))', + output: '3' + }, + { + template: '@(text_length(array(2, 3)))', + output: '6' + } + ] + }, + { + signature: 'text_slice(text, start [, end])', + summary: 'Returns the portion of `text` between `start` (inclusive) and `end` (exclusive).', + detail: + 'If `end` is not specified then the entire rest of `text` will be included. Negative values\nfor `start` or `end` start at the end of `text`.', + examples: [ + { + template: '@(text_slice("hello", 2))', + output: 'llo' + }, + { + template: '@(text_slice("hello", 1, 3))', + output: 'el' + }, + { + template: '@(text_slice("hello😁", -3, -1))', + output: 'lo' + }, + { + template: '@(text_slice("hello", 7))', + output: '' + } + ] + }, + { + signature: 'time(value)', + summary: 'Tries to convert `value` to a time.', + detail: + "If it is text then it will be parsed into a time using the default time format.\nAn error is returned if the value can't be converted.", + examples: [ + { + template: '@(time("10:30"))', + output: '10:30:00.000000' + }, + { + template: '@(time("10:30:45 PM"))', + output: '22:30:45.000000' + }, + { + template: '@(time(datetime("1979-07-18T10:30:45.123456Z")))', + output: '10:30:45.123456' + }, + { + template: '@(time("what?"))', + output: 'ERROR' + } + ] + }, + { + signature: 'time_from_parts(hour, minute, second)', + summary: 'Creates a time from `hour`, `minute` and `second`', + detail: '', + examples: [ + { + template: '@(time_from_parts(14, 40, 15))', + output: '14:40:15.000000' + }, + { + template: '@(time_from_parts(8, 10, 0))', + output: '08:10:00.000000' + }, + { + template: '@(time_from_parts(25, 0, 0))', + output: 'ERROR' + } + ] + }, + { + signature: 'title(text)', + summary: 'Capitalizes each word in `text`.', + detail: '', + examples: [ + { + template: '@(title("foo"))', + output: 'Foo' + }, + { + template: '@(title("ryan lewis"))', + output: 'Ryan Lewis' + }, + { + template: '@(title("RYAN LEWIS"))', + output: 'Ryan Lewis' + }, + { + template: '@(title(123))', + output: '123' + } + ] + }, + { + signature: 'today()', + summary: 'Returns the current date in the environment timezone.', + detail: '', + examples: [ + { + template: '@(today())', + output: '2018-04-11' + } + ] + }, + { + signature: 'trim(text, [,chars])', + summary: 'Removes whitespace from either end of `text`.', + detail: + 'There is an optional final parameter `chars` which is string of characters to be removed instead of whitespace.', + examples: [ + { + template: '@(trim(" hello world "))', + output: 'hello world' + }, + { + template: '@(trim("+123157568", "+"))', + output: '123157568' + } + ] + }, + { + signature: 'trim_left(text, [,chars])', + summary: 'Removes whitespace from the start of `text`.', + detail: + 'There is an optional final parameter `chars` which is string of characters to be removed instead of whitespace.', + examples: [ + { + template: '@("*" & trim_left(" hello world ") & "*")', + output: '*hello world *' + }, + { + template: '@(trim_left("+12345+", "+"))', + output: '12345+' + } + ] + }, + { + signature: 'trim_right(text, [,chars])', + summary: 'Removes whitespace from the end of `text`.', + detail: + 'There is an optional final parameter `chars` which is string of characters to be removed instead of whitespace.', + examples: [ + { + template: '@("*" & trim_right(" hello world ") & "*")', + output: '* hello world*' + }, + { + template: '@(trim_right("+12345+", "+"))', + output: '+12345' + } + ] + }, + { + signature: 'tz(date)', + summary: 'Returns the name of the timezone of `date`.', + detail: + 'If no timezone information is present in the date, then the current timezone will be returned.', + examples: [ + { + template: '@(tz("2017-01-15T02:15:18.123456Z"))', + output: 'UTC' + }, + { + template: '@(tz("2017-01-15 02:15:18PM"))', + output: 'America/Guayaquil' + }, + { + template: '@(tz("2017-01-15"))', + output: 'America/Guayaquil' + }, + { + template: '@(tz("foo"))', + output: 'ERROR' + } + ] + }, + { + signature: 'tz_offset(date)', + summary: 'Returns the offset of the timezone of `date`.', + detail: + 'The offset is returned in the format `[+/-]HH:MM`. If no timezone information is present in the date,\nthen the current timezone offset will be returned.', + examples: [ + { + template: '@(tz_offset("2017-01-15T02:15:18.123456Z"))', + output: '+0000' + }, + { + template: '@(tz_offset("2017-01-15 02:15:18PM"))', + output: '-0500' + }, + { + template: '@(tz_offset("2017-01-15"))', + output: '-0500' + }, + { + template: '@(tz_offset("foo"))', + output: 'ERROR' + } + ] + }, + { + signature: 'upper(text)', + summary: 'Converts `text` to uppercase.', + detail: '', + examples: [ + { + template: '@(upper("Asdf"))', + output: 'ASDF' + }, + { + template: '@(upper(123))', + output: '123' + } + ] + }, + { + signature: 'url_encode(text)', + summary: 'Encodes `text` for use as a URL parameter.', + detail: '', + examples: [ + { + template: '@(url_encode("two & words"))', + output: 'two%20%26%20words' + }, + { + template: '@(url_encode(10))', + output: '10' + } + ] + }, + { + signature: 'urn_parts(urn)', + summary: 'Parses a URN into its different parts', + detail: '', + examples: [ + { + template: '@(urn_parts("tel:+593979012345"))', + output: '{display: , path: +593979012345, scheme: tel}' + }, + { + template: '@(urn_parts("twitterid:3263621177#bobby"))', + output: '{display: bobby, path: 3263621177, scheme: twitterid}' + }, + { + template: '@(urn_parts("not a urn"))', + output: 'ERROR' + } + ] + }, + { + signature: 'week_number(date)', + summary: 'Returns the week number (1-54) of `date`.', + detail: + 'The week is considered to start on Sunday and week containing Jan 1st is week number 1.', + examples: [ + { + template: '@(week_number("2019-01-01"))', + output: '1' + }, + { + template: '@(week_number("2019-07-23T16:56:59.000000Z"))', + output: '30' + }, + { + template: '@(week_number("xx"))', + output: 'ERROR' + } + ] + }, + { + signature: 'weekday(date)', + summary: 'Returns the day of the week for `date`.', + detail: + 'The week is considered to start on Sunday so a Sunday returns 0, a Monday returns 1 etc.', + examples: [ + { + template: '@(weekday("2017-01-15"))', + output: '0' + }, + { + template: '@(weekday("foo"))', + output: 'ERROR' + } + ] + }, + { + signature: 'word(text, index [,delimiters])', + summary: 'Returns the word at `index` in `text`.', + detail: + 'Indexes start at zero. There is an optional final parameter `delimiters` which\nis string of characters used to split the text into words.', + examples: [ + { + template: '@(word("bee cat dog", 0))', + output: 'bee' + }, + { + template: '@(word("bee.cat,dog", 0))', + output: 'bee' + }, + { + template: '@(word("bee.cat,dog", 1))', + output: 'cat' + }, + { + template: '@(word("bee.cat,dog", 2))', + output: 'dog' + }, + { + template: '@(word("bee.cat,dog", -1))', + output: 'dog' + }, + { + template: '@(word("bee.cat,dog", -2))', + output: 'cat' + }, + { + template: '@(word("bee.*cat,dog", 1, ".*=|"))', + output: 'cat,dog' + }, + { + template: '@(word("O\'Grady O\'Flaggerty", 1, " "))', + output: "O'Flaggerty" + } + ] + }, + { + signature: 'word_count(text [,delimiters])', + summary: 'Returns the number of words in `text`.', + detail: + 'There is an optional final parameter `delimiters` which is string of characters used\nto split the text into words.', + examples: [ + { + template: '@(word_count("foo bar"))', + output: '2' + }, + { + template: '@(word_count(10))', + output: '1' + }, + { + template: '@(word_count(""))', + output: '0' + }, + { + template: '@(word_count("😀😃😄😁"))', + output: '4' + }, + { + template: '@(word_count("bee.*cat,dog", ".*=|"))', + output: '2' + }, + { + template: '@(word_count("O\'Grady O\'Flaggerty", " "))', + output: '2' + } + ] + }, + { + signature: 'word_slice(text, start, end [,delimiters])', + summary: 'Extracts a sub-sequence of words from `text`.', + detail: + 'The returned words are those from `start` up to but not-including `end`. Indexes start at zero and a negative\nend value means that all words after the start should be returned. There is an optional final parameter `delimiters`\nwhich is string of characters used to split the text into words.', + examples: [ + { + template: '@(word_slice("bee cat dog", 0, 1))', + output: 'bee' + }, + { + template: '@(word_slice("bee cat dog", 0, 2))', + output: 'bee cat' + }, + { + template: '@(word_slice("bee cat dog", 1, -1))', + output: 'cat dog' + }, + { + template: '@(word_slice("bee cat dog", 1))', + output: 'cat dog' + }, + { + template: '@(word_slice("bee cat dog", 2, 3))', + output: 'dog' + }, + { + template: '@(word_slice("bee cat dog", 3, 10))', + output: '' + }, + { + template: '@(word_slice("bee.*cat,dog", 1, -1, ".*=|,"))', + output: 'cat dog' + }, + { + template: '@(word_slice("O\'Grady O\'Flaggerty", 1, 2, " "))', + output: "O'Flaggerty" + } + ] + } + ] +}; +const { getOpts } = require('./utils'); + +exports.handler = (evt, ctx, cb) => cb(null, getOpts({ body: JSON.stringify(completion) })); From a21cc24924335f3170e64ffacc1d188cd6193661 Mon Sep 17 00:00:00 2001 From: Eric Newcomer Date: Wed, 30 Jun 2021 13:22:24 -0700 Subject: [PATCH 13/22] v1.13.17 --- CHANGELOG.md | 9 +++++++++ package.json | 2 +- 2 files changed, 10 insertions(+), 1 deletion(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 1d51b8484..7d886d398 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -4,6 +4,15 @@ All notable changes to this project will be documented in this file. Dates are d Generated by [`auto-changelog`](https://github.com/CookPete/auto-changelog). +#### [v1.13.17](https://github.com/nyaruka/floweditor/compare/v1.13.16...v1.13.17) + +> 30 June 2021 + +- Adjust treatment for open ticket action for internal ticketers [`#1002`](https://github.com/nyaruka/floweditor/pull/1002) +- Add combined lambda function file [`fba4f39`](https://github.com/nyaruka/floweditor/commit/fba4f399424656ef7c4d4d22fc6700cb18bb4a07) +- Update i18n [`433d561`](https://github.com/nyaruka/floweditor/commit/433d561617365c762db02217545d7966341d307b) +- Fix i18n for field placeholder [`ee7763d`](https://github.com/nyaruka/floweditor/commit/ee7763d66160f9078e1f8abba1361455528cb359) + #### [v1.13.16](https://github.com/nyaruka/floweditor/compare/v1.13.9...v1.13.16) > 3 June 2021 diff --git a/package.json b/package.json index 6b81e503b..482469904 100644 --- a/package.json +++ b/package.json @@ -2,7 +2,7 @@ "name": "@nyaruka/flow-editor", "license": "AGPL-3.0", "repository": "git://github.com/nyaruka/floweditor.git", - "version": "1.13.16", + "version": "1.13.17", "description": "'Standalone flow editing tool designed for use within the RapidPro suite of messaging tools but can be adopted for use outside of that ecosystem.'", "browser": "umd/flow-editor.min.js", "unpkg": "umd/flow-editor.min.js", From 6b7d762c957e5fdf915bd9d309e03ea955ccc9b8 Mon Sep 17 00:00:00 2001 From: Eric Newcomer Date: Tue, 13 Jul 2021 13:18:37 -0700 Subject: [PATCH 14/22] Fix media player display and loading --- .../mediaplayer/MediaPlayer.module.scss | 13 +++++-- src/components/mediaplayer/MediaPlayer.tsx | 39 +++++++++++++------ 2 files changed, 37 insertions(+), 15 deletions(-) diff --git a/src/components/mediaplayer/MediaPlayer.module.scss b/src/components/mediaplayer/MediaPlayer.module.scss index 76e6c66af..0b735cee0 100644 --- a/src/components/mediaplayer/MediaPlayer.module.scss +++ b/src/components/mediaplayer/MediaPlayer.module.scss @@ -3,6 +3,7 @@ line-height: 1em !important; letter-spacing: 1em !important; cursor: pointer; + display: flex; &.playing { .circle_progress { @@ -37,10 +38,14 @@ color: cornflowerblue; } - position: relative; - font-size: 10px; + align-self: center; + position: absolute; + margin-left: -1px; + font-size: 12px; + // position: relative; + // font-size: 10px; color: #aaa; - top: -16px; - left: 0px; + // top: -8px; + // left: 0px; } } diff --git a/src/components/mediaplayer/MediaPlayer.tsx b/src/components/mediaplayer/MediaPlayer.tsx index 7e9db3621..a886919a2 100644 --- a/src/components/mediaplayer/MediaPlayer.tsx +++ b/src/components/mediaplayer/MediaPlayer.tsx @@ -50,11 +50,13 @@ export class MediaPlayer extends React.Component 0 ? Math.floor((currentTime / duration) * 100) : 0; + return { - currentSeconds: this.ele.ended ? 0 : currentTime, + currentSeconds: this.ele.ended || progress === 100 ? 0 : currentTime, durationSeconds: duration, - playing: currentTime > 0, - progress: duration > 0 ? Math.floor((currentTime / duration) * 100) : 0 + playing: currentTime > 0 && !this.ele.ended, + progress: progress }; }); } @@ -66,17 +68,23 @@ export class MediaPlayer extends React.Component): void { - if (this.state.playing) { - this.ele.pause(); - this.ele.currentTime = 0; - } else { - this.ele.play(); - } - if (e !== null) { e.preventDefault(); e.stopPropagation(); } + + if (this.state.playing) { + this.ele.pause(); + this.ele.currentTime = null; + } else { + this.ele.load(); + fetch(this.ele.src) + .then(response => response.blob()) + .then(blob => { + this.ele.src = URL.createObjectURL(blob); + this.ele.play(); + }); + } } private handleRef(ref: HTMLAudioElement): any { @@ -102,9 +110,18 @@ export class MediaPlayer extends React.Component { + e.preventDefault(); + e.stopPropagation(); + }} onMouseDown={this.handleTogglePlay} > -