From 726bcdb65d61bfe1b72901818e8017c19ac50dfe Mon Sep 17 00:00:00 2001 From: Stanley-Okwii Date: Thu, 7 Jun 2018 14:10:28 +0300 Subject: [PATCH 1/7] Add nanoflow support --- src/MicroflowTimer/MicroflowTimer.xml | 23 +++++++--- src/MicroflowTimer/widget/MicroflowTimer.js | 50 +++++++++++++++++---- 2 files changed, 59 insertions(+), 14 deletions(-) diff --git a/src/MicroflowTimer/MicroflowTimer.xml b/src/MicroflowTimer/MicroflowTimer.xml index 3ce484a..9588031 100644 --- a/src/MicroflowTimer/MicroflowTimer.xml +++ b/src/MicroflowTimer/MicroflowTimer.xml @@ -2,17 +2,13 @@ MicroflowTimer The description of this widget. - Interval (in ms) Behavior - - Defines how often the microflow is called. Note that the inteval is in milliseconds, so the default, 30000, equals 30 seconds. Note that, unless Execute Once is set to true, the microflow is invoked immediately after loading the form for the first - time. - + Defines how often the microflow is called. Note that the inteval is in milliseconds, so the default, 30000, equals 30 seconds. Note that, unless Execute Once is set to true, the microflow is invoked immediately after loading the form for the first time. Execute once @@ -24,12 +20,27 @@ Behavior If true (and execute once is false), the microflow will be invoked the first time if the widget has loaded. If false, the microflow will be invoked the first time after interval has passed. - + + Call event + Behavior + + + Call a microflow + Call a nanoflow + + + Microflow Behavior The microflow to be executed. If the microflow returns false, it will not be executed any longer until the context changes. + + Nanoflow + Behavior + The nanoflow to be executed. If the nanoflow returns false, it will not be executed any longer until the context changes. + + First tick delay Context diff --git a/src/MicroflowTimer/widget/MicroflowTimer.js b/src/MicroflowTimer/widget/MicroflowTimer.js index f2772f8..7640dfc 100644 --- a/src/MicroflowTimer/widget/MicroflowTimer.js +++ b/src/MicroflowTimer/widget/MicroflowTimer.js @@ -12,7 +12,9 @@ define([ interval: 30000, once: false, startatonce: true, + callEvent: null, microflow: "", + nanoflow: "", firstIntervalAttr: null, intervalAttr: null, timerStatusAttr: null, @@ -113,7 +115,7 @@ define([ _runTimer: function() { logger.debug(this.id + "._runTimer", this.interval); - if (this.microflow !== "" && this._contextObj) { + if (this.callEvent !== "" && this._contextObj) { this._timerStarted = true; //if there's a first interval, get and use that first, then use the regular interval @@ -121,25 +123,25 @@ define([ var firstInterval = this._contextObj.get(this.firstIntervalAttr); if (this.once) { - this._timeout = setTimeout(lang.hitch(this, this._execMf), firstInterval); + this._timeout = setTimeout(lang.hitch(this, this._executeEvent), firstInterval); } else { if (this.startatonce) { - this._execMf(); + this._executeEvent(); } this._timeout = setTimeout(lang.hitch(this, function() { - this._execMf(); - this._timer = setInterval(lang.hitch(this, this._execMf), this.interval); + this._executeEvent(); + this._timer = setInterval(lang.hitch(this, this._executeEvent), this.interval); }), firstInterval); } //otherwise just use the regulat interval } else { if (this.once) { - this._timeout = setTimeout(lang.hitch(this, this._execMf), this.interval); + this._timeout = setTimeout(lang.hitch(this, this._executeEvent), this.interval); } else { if (this.startatonce) { - this._execMf(); + this._executeEvent(); } - this._timer = setInterval(lang.hitch(this, this._execMf), this.interval); + this._timer = setInterval(lang.hitch(this, this._executeEvent), this.interval); } } } @@ -161,6 +163,14 @@ define([ } }, + _executeEvent: function() { + if(this.callEvent == "callMicroflow") { + this._execMf() + } else { + this._executeNanoFlow() + } + }, + _execMf: function() { logger.debug(this.id + "._execMf"); if (!this._contextObj) { @@ -197,6 +207,30 @@ define([ } }, + _executeNanoFlow: function() { + logger.debug(this.id + "._executeNanoFlow"); + if (!this._contextObj) { + return; + } + + if (this.nanoflow.nanoflow) { + mx.data.callNanoflow({ + nanoflow: this.nanoflow, + origin: this.mxform, + context: this.mxcontext, + callback: lang.hitch(this, function(result) { + if (!result) { + logger.debug(this.id + "._executeNanoFlow callback, stopping timer"); + this._stopTimer(); + } + }), + error: lang.hitch(this, function(error) { + logger.error(this.id + ": An error ocurred while executing nanoflow: ", error); + }) + }); + } + }, + // Reset subscriptions. _resetSubscriptions: function() { // Release handles on previous object, if any. From 7c8727f97ae5919cf0cfb66e548f7334ba006ddb Mon Sep 17 00:00:00 2001 From: SamuelMuloki Date: Fri, 8 Jun 2018 12:40:32 +0300 Subject: [PATCH 2/7] Process pull request feedback --- src/MicroflowTimer/MicroflowTimer.xml | 18 +++++++++--------- src/MicroflowTimer/widget/MicroflowTimer.js | 10 +++++----- 2 files changed, 14 insertions(+), 14 deletions(-) diff --git a/src/MicroflowTimer/MicroflowTimer.xml b/src/MicroflowTimer/MicroflowTimer.xml index 9588031..2f1ec57 100644 --- a/src/MicroflowTimer/MicroflowTimer.xml +++ b/src/MicroflowTimer/MicroflowTimer.xml @@ -1,24 +1,24 @@ MicroflowTimer - The description of this widget. + The description of this widget Interval (in ms) Behavior - Defines how often the microflow is called. Note that the inteval is in milliseconds, so the default, 30000, equals 30 seconds. Note that, unless Execute Once is set to true, the microflow is invoked immediately after loading the form for the first time. + Defines how often the microflow is called. Note that the inteval is in milliseconds, so the default, 30000, equals 30 seconds. Note that, unless Execute Once is set to true, the microflow is invoked immediately after loading the form for the first time Execute once Behavior - If true, the microflow will be invoked only once, and interval defines after how many seconds. + If true, the microflow will be invoked only once, and interval defines after how many seconds Start at once Behavior - If true (and execute once is false), the microflow will be invoked the first time if the widget has loaded. If false, the microflow will be invoked the first time after interval has passed. + If true (and execute once is false), the microflow will be invoked the first time if the widget has loaded. If false, the microflow will be invoked the first time after interval has passed Call event @@ -32,19 +32,19 @@ Microflow Behavior - The microflow to be executed. If the microflow returns false, it will not be executed any longer until the context changes. + The microflow to be executed. If the microflow returns false, it will not be executed any longer until the context changes Nanoflow Behavior - The nanoflow to be executed. If the nanoflow returns false, it will not be executed any longer until the context changes. + The nanoflow to be executed. If the nanoflow returns false, it will not be executed any longer until the context changes First tick delay Context - An optional attribute on the context entity, indicating a custom first interval (in milliseconds). This could be used for continuing a timer that ticks once per minute, but should wait for 60 seconds thereafter. + An optional attribute on the context entity, indicating a custom first interval (in milliseconds). This could be used for continuing a timer that ticks once per minute, but should wait for 60 seconds thereafter @@ -52,7 +52,7 @@ Interval Attribute (in ms) Context - Defines how often the microflow is called using an attribute. If set, overrides the interval specified below. + Defines how often the microflow is called using an attribute. If set, overrides the interval specified below @@ -60,7 +60,7 @@ Timer Status Attribute Context - An optional attribute on the context entity, indicating the status of the timer. + An optional attribute on the context entity, indicating the status of the timer diff --git a/src/MicroflowTimer/widget/MicroflowTimer.js b/src/MicroflowTimer/widget/MicroflowTimer.js index 7640dfc..b64268a 100644 --- a/src/MicroflowTimer/widget/MicroflowTimer.js +++ b/src/MicroflowTimer/widget/MicroflowTimer.js @@ -12,9 +12,9 @@ define([ interval: 30000, once: false, startatonce: true, - callEvent: null, + callEvent: "callMicroflow" | "callNanoflow", microflow: "", - nanoflow: "", + nanoflow: null, firstIntervalAttr: null, intervalAttr: null, timerStatusAttr: null, @@ -164,7 +164,7 @@ define([ }, _executeEvent: function() { - if(this.callEvent == "callMicroflow") { + if(this.callEvent === "callMicroflow") { this._execMf() } else { this._executeNanoFlow() @@ -213,7 +213,7 @@ define([ return; } - if (this.nanoflow.nanoflow) { + if (this.nanoflow.nanoflow && this.mxcontext) { mx.data.callNanoflow({ nanoflow: this.nanoflow, origin: this.mxform, @@ -225,7 +225,7 @@ define([ } }), error: lang.hitch(this, function(error) { - logger.error(this.id + ": An error ocurred while executing nanoflow: ", error); + mx.ui.error("An error ocurred while executing nanoflow"); }) }); } From cf547507753f209fd771f1f1ce8a05ae950df900 Mon Sep 17 00:00:00 2001 From: SamuelMuloki Date: Tue, 12 Jun 2018 15:31:38 +0300 Subject: [PATCH 3/7] Add error message --- src/MicroflowTimer/widget/MicroflowTimer.js | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/MicroflowTimer/widget/MicroflowTimer.js b/src/MicroflowTimer/widget/MicroflowTimer.js index b64268a..4b4ea46 100644 --- a/src/MicroflowTimer/widget/MicroflowTimer.js +++ b/src/MicroflowTimer/widget/MicroflowTimer.js @@ -191,7 +191,7 @@ define([ } }), error: lang.hitch(this, function(error) { - logger.error(this.id + ": An error ocurred while executing microflow: ", error); + mx.ui.error("An error ocurred while executing microflow" + error.message); }) }; if (!mx.version || mx.version && parseInt(mx.version.split(".")[0]) < 7) { @@ -225,7 +225,7 @@ define([ } }), error: lang.hitch(this, function(error) { - mx.ui.error("An error ocurred while executing nanoflow"); + mx.ui.error("An error ocurred while executing nanoflow" + error.message); }) }); } From 2608fcdb8fdc3ba7a328c5b5d0657c330e637397 Mon Sep 17 00:00:00 2001 From: SamuelMuloki Date: Wed, 13 Jun 2018 15:09:01 +0300 Subject: [PATCH 4/7] Update readme --- README.md | 20 ++++++++++++-------- package-lock.json | 12 ++++++------ src/MicroflowTimer/MicroflowTimer.xml | 8 ++++---- src/MicroflowTimer/widget/MicroflowTimer.js | 11 ++++------- test/widgets/MicroflowTimer.mpk | Bin 3564 -> 3789 bytes 5 files changed, 26 insertions(+), 25 deletions(-) diff --git a/README.md b/README.md index 6eefa9b..71c1848 100644 --- a/README.md +++ b/README.md @@ -3,26 +3,30 @@ This widget can be used to time and execute a Microflow as long as a certain form is open. The microflow can be executed once or repeatedly, in which case it will not stop until it returns false or until the form is closed. ## Contributing + For more information on contributing to this repository visit [Contributing to a GitHub repository](https://world.mendix.com/display/howto50/Contributing+to+a+GitHub+repository)! -##Typical usage scenario +## Typical usage scenario * Update a grid or object after a certain amount of time, for example a message inbox * Close a form with a message automatically after 10 seconds * Automatically make backup copies while the user is still editing an object. * Open a form and directly trigger validation errors. (to achieve this, use interval: 0, execute once: true, start at once: true) (new in 1.2) -##Features and limitations +## Features and limitations + +* Adds timed behavior to your applications. +* Nanoflow support starts from Mendix 7.13.1. -* Adds timed behavior to your applications +## Configuration -##Configuration * The widget requires a dataview or template grid context. This object will be send as argument to the invoked microflow. -##Properties - -* Interval (in ms): Defines how often the microflow is called. Note that the inteval is in milliseconds, so the default, 30000, equals 30 seconds. Note that, unless Execute Once is set to true, the microflow is invoked immediately after loading the form for the first time. +## Properties + +* Interval (in ms): Defines how often the microflow or nanoflow is called. Note that the inteval is in milliseconds, so the default, 30000, equals 30 seconds. Note that, unless Execute Once is set to true, the microflow is invoked immediately after loading the form for the first time. * Execute once: If true, the microflow will be invoked only once, and interval defines after how many seconds. * Microflow: The microflow to be executed. If the microflow returns false, it will not be executed any longer until the context changes. -* Start at once: If true (and execute once is true), the microflow will be invoked the first time if the widget has loaded. If false, the microflow will be invoked the first time after interval has passed. +* Nanoflow: The nanoflow to be executed. If the nanoflow returns false, it will not be executed any longer until the context changes. +* Start at once: If true (and execute once is true), the microflow or nanoflow will be invoked the first time if the widget has loaded. If false, the microflow or nanoflow will be invoked the first time after interval has passed. diff --git a/package-lock.json b/package-lock.json index acb6c9d..c1a759e 100644 --- a/package-lock.json +++ b/package-lock.json @@ -2811,6 +2811,12 @@ "integrity": "sha1-1cdSgl5TZ+eG944Y5EXqIjoVWVI=", "dev": true }, + "string_decoder": { + "version": "0.10.31", + "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-0.10.31.tgz", + "integrity": "sha1-YuIDvEF2bGwoyfyEMB2rHFMQ+pQ=", + "dev": true + }, "string-width": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/string-width/-/string-width-1.0.2.tgz", @@ -2822,12 +2828,6 @@ "strip-ansi": "3.0.1" } }, - "string_decoder": { - "version": "0.10.31", - "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-0.10.31.tgz", - "integrity": "sha1-YuIDvEF2bGwoyfyEMB2rHFMQ+pQ=", - "dev": true - }, "strip-ansi": { "version": "3.0.1", "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-3.0.1.tgz", diff --git a/src/MicroflowTimer/MicroflowTimer.xml b/src/MicroflowTimer/MicroflowTimer.xml index 2f1ec57..54314c8 100644 --- a/src/MicroflowTimer/MicroflowTimer.xml +++ b/src/MicroflowTimer/MicroflowTimer.xml @@ -8,17 +8,17 @@ Interval (in ms) Behavior - Defines how often the microflow is called. Note that the inteval is in milliseconds, so the default, 30000, equals 30 seconds. Note that, unless Execute Once is set to true, the microflow is invoked immediately after loading the form for the first time + Defines how often the microflow or nanoflow is called. Note that the inteval is in milliseconds, so the default, 30000, equals 30 seconds. Note that, unless Execute Once is set to true, the microflow is invoked immediately after loading the form for the first time Execute once Behavior - If true, the microflow will be invoked only once, and interval defines after how many seconds + If true, the microflow or nanoflow will be invoked only once, and interval defines after how many seconds Start at once Behavior - If true (and execute once is false), the microflow will be invoked the first time if the widget has loaded. If false, the microflow will be invoked the first time after interval has passed + If true (and execute once is false), the microflow or nanoflow will be invoked the first time if the widget has loaded. If false, the microflow or nanoflow will be invoked the first time after interval has passed Call event @@ -52,7 +52,7 @@ Interval Attribute (in ms) Context - Defines how often the microflow is called using an attribute. If set, overrides the interval specified below + Defines how often the microflow or nanoflow is called using an attribute. If set, overrides the interval specified below diff --git a/src/MicroflowTimer/widget/MicroflowTimer.js b/src/MicroflowTimer/widget/MicroflowTimer.js index 4b4ea46..e9209b3 100644 --- a/src/MicroflowTimer/widget/MicroflowTimer.js +++ b/src/MicroflowTimer/widget/MicroflowTimer.js @@ -164,10 +164,12 @@ define([ }, _executeEvent: function() { - if(this.callEvent === "callMicroflow") { + if(this.callEvent === "callMicroflow" && this.microflow) { this._execMf() - } else { + } else if (this.callEvent === "callNanoflow" && this.nanoflow){ this._executeNanoFlow() + } else { + mx.ui.error("No action specified for " + this.callEvent) } }, @@ -208,11 +210,6 @@ define([ }, _executeNanoFlow: function() { - logger.debug(this.id + "._executeNanoFlow"); - if (!this._contextObj) { - return; - } - if (this.nanoflow.nanoflow && this.mxcontext) { mx.data.callNanoflow({ nanoflow: this.nanoflow, diff --git a/test/widgets/MicroflowTimer.mpk b/test/widgets/MicroflowTimer.mpk index 5e9c592f5f1dff6801e7ea86f6b8ffaba3c72651..8d4953cc86e7f583abfe7e45df29ecb809358e96 100644 GIT binary patch delta 3465 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 Wfj`)m?Dsc84mZ!m!|KBI_vb%*X=EJ$ delta 3218 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 From 6fd1d9d8769e7a6c2380ba338a7647e9f5389f50 Mon Sep 17 00:00:00 2001 From: SamuelMuloki Date: Wed, 20 Jun 2018 08:32:34 +0300 Subject: [PATCH 5/7] Change widget name to ActionTimer --- README.md | 4 ++-- package.json | 2 +- src/MicroflowTimer/MicroflowTimer.xml | 2 +- src/package.xml | 2 +- test/widgets/actiontimer.mpk | Bin 0 -> 3830 bytes 5 files changed, 5 insertions(+), 5 deletions(-) create mode 100644 test/widgets/actiontimer.mpk diff --git a/README.md b/README.md index 71c1848..e237c0d 100644 --- a/README.md +++ b/README.md @@ -1,6 +1,6 @@ -# MicroflowTimer [![Support](https://img.shields.io/badge/Mendix%20Support%3A-Platform-green.svg)](https://docs.mendix.com/community/app-store/app-store-content-support) +# ActionTimer [![Support](https://img.shields.io/badge/Mendix%20Support%3A-Platform-green.svg)](https://docs.mendix.com/community/app-store/app-store-content-support) -This widget can be used to time and execute a Microflow as long as a certain form is open. The microflow can be executed once or repeatedly, in which case it will not stop until it returns false or until the form is closed. +This widget can be used to time and execute a Microflow as long as a certain form is open. The microflow or nanoflow can be executed once or repeatedly, in which case it will not stop until it returns false or until the form is closed. ## Contributing diff --git a/package.json b/package.json index ae2a52b..d9a207a 100644 --- a/package.json +++ b/package.json @@ -1,5 +1,5 @@ { - "name": "MicroflowTimer", + "name": "actiontimer", "version": "3.1.1", "description": "", "license": "", diff --git a/src/MicroflowTimer/MicroflowTimer.xml b/src/MicroflowTimer/MicroflowTimer.xml index 54314c8..fcb9ac3 100644 --- a/src/MicroflowTimer/MicroflowTimer.xml +++ b/src/MicroflowTimer/MicroflowTimer.xml @@ -1,6 +1,6 @@ - MicroflowTimer + ActionTimer The description of this widget diff --git a/src/package.xml b/src/package.xml index be357a7..cfce4b1 100644 --- a/src/package.xml +++ b/src/package.xml @@ -1,6 +1,6 @@ - + diff --git a/test/widgets/actiontimer.mpk b/test/widgets/actiontimer.mpk new file mode 100644 index 0000000000000000000000000000000000000000..97fa57a9c3f46eda185027f5956574874227a224 GIT binary patch literal 3830 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 literal 0 HcmV?d00001 From ed0f195a169b983db5f9abf695bc2068a1d13e6c Mon Sep 17 00:00:00 2001 From: SamuelMuloki Date: Wed, 20 Jun 2018 08:43:46 +0300 Subject: [PATCH 6/7] Bump version to 3.2.0 --- package-lock.json | 680 ++++++++++++++++++++--------------- package.json | 10 +- src/package.xml | 2 +- test/widgets/actiontimer.mpk | Bin 3830 -> 3830 bytes 4 files changed, 394 insertions(+), 298 deletions(-) diff --git a/package-lock.json b/package-lock.json index c1a759e..73df827 100644 --- a/package-lock.json +++ b/package-lock.json @@ -1,6 +1,6 @@ { - "name": "MicroflowTimer", - "version": "3.1.1", + "name": "actiontimer", + "version": "3.2.0", "lockfileVersion": 1, "requires": true, "dependencies": { @@ -112,12 +112,6 @@ "integrity": "sha1-qJS3XUvE9s1nnvMkSp/Y9Gri1Cg=", "dev": true }, - "arrify": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/arrify/-/arrify-1.0.1.tgz", - "integrity": "sha1-iYUI2iIm84DfkEcoRWhJwVAaSw0=", - "dev": true - }, "asap": { "version": "2.0.6", "resolved": "https://registry.npmjs.org/asap/-/asap-2.0.6.tgz", @@ -198,12 +192,6 @@ "integrity": "sha1-DTM+PwDqxQqhRUq9MO+MKl2ackI=", "dev": true }, - "builtin-modules": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/builtin-modules/-/builtin-modules-1.1.1.tgz", - "integrity": "sha1-Jw8HbFpywC9bZaR9+Uxf46J4iS8=", - "dev": true - }, "cache-base": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/cache-base/-/cache-base-1.0.1.tgz", @@ -222,9 +210,9 @@ } }, "camelcase": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-3.0.0.tgz", - "integrity": "sha1-MvxLn82vhF/N9+c7uXysImHwqwo=", + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-4.1.0.tgz", + "integrity": "sha1-1UVjW+HjPFQmScaRc+Xeas+uNN0=", "dev": true }, "chalk": { @@ -321,14 +309,31 @@ } }, "cliui": { - "version": "3.2.0", - "resolved": "https://registry.npmjs.org/cliui/-/cliui-3.2.0.tgz", - "integrity": "sha1-EgYBU3qRbSmUD5NNo7SNWFo5IT0=", + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/cliui/-/cliui-4.1.0.tgz", + "integrity": "sha512-4FG+RSG9DL7uEwRUZXZn3SS34DiDPfzP0VOiEwtUWlE+AR2EIg+hSyvrIgUUfhdgR/UkAeW2QHgeP+hWrXs7jQ==", "dev": true, "requires": { - "string-width": "1.0.2", - "strip-ansi": "3.0.1", + "string-width": "2.1.1", + "strip-ansi": "4.0.0", "wrap-ansi": "2.1.0" + }, + "dependencies": { + "ansi-regex": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-3.0.0.tgz", + "integrity": "sha1-7QMXwyIGT3lGbAKWa922Bas32Zg=", + "dev": true + }, + "strip-ansi": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-4.0.0.tgz", + "integrity": "sha1-qEeQIusaw2iocTibY1JixQXuNo8=", + "dev": true, + "requires": { + "ansi-regex": "3.0.0" + } + } } }, "clone": { @@ -337,12 +342,61 @@ "integrity": "sha1-KY1+IjFmD0DAA8LtMUDezz9TCF8=", "dev": true }, + "clone-buffer": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/clone-buffer/-/clone-buffer-1.0.0.tgz", + "integrity": "sha1-4+JbIHrE5wGvch4staFnksrD3Fg=", + "dev": true + }, "clone-stats": { "version": "0.0.1", "resolved": "https://registry.npmjs.org/clone-stats/-/clone-stats-0.0.1.tgz", "integrity": "sha1-uI+UqCzzi4eR1YBG6kAprYjKmdE=", "dev": true }, + "cloneable-readable": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/cloneable-readable/-/cloneable-readable-1.1.2.tgz", + "integrity": "sha512-Bq6+4t+lbM8vhTs/Bef5c5AdEMtapp/iFb6+s4/Hh9MVTt8OLKH7ZOOZSCT+Ys7hsHvqv0GuMPJ1lnQJVHvxpg==", + "dev": true, + "requires": { + "inherits": "2.0.3", + "process-nextick-args": "2.0.0", + "readable-stream": "2.3.6" + }, + "dependencies": { + "isarray": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz", + "integrity": "sha1-u5NdSFgsuhaMBoNJV6VKPgcSTxE=", + "dev": true + }, + "readable-stream": { + "version": "2.3.6", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.6.tgz", + "integrity": "sha512-tQtKA9WIAhBF3+VLAseyMqZeBjW0AHJoxOtYqSUZNJxauErmLbVm2FW1y+J/YA9dUrAC39ITejlZWhVIwawkKw==", + "dev": true, + "requires": { + "core-util-is": "1.0.2", + "inherits": "2.0.3", + "isarray": "1.0.0", + "process-nextick-args": "2.0.0", + "safe-buffer": "5.1.1", + "string_decoder": "1.1.1", + "util-deprecate": "1.0.2" + } + }, + "string_decoder": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz", + "integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==", + "dev": true, + "requires": { + "safe-buffer": "5.1.1" + } + } + } + }, "code-point-at": { "version": "1.1.0", "resolved": "https://registry.npmjs.org/code-point-at/-/code-point-at-1.1.0.tgz", @@ -377,49 +431,6 @@ "integrity": "sha1-2Klr13/Wjfd5OnMDajug1UBdR3s=", "dev": true }, - "concat-stream": { - "version": "1.6.0", - "resolved": "https://registry.npmjs.org/concat-stream/-/concat-stream-1.6.0.tgz", - "integrity": "sha1-CqxmL9Ur54lk1VMvaUeE5wEQrPc=", - "dev": true, - "requires": { - "inherits": "2.0.3", - "readable-stream": "2.3.4", - "typedarray": "0.0.6" - }, - "dependencies": { - "isarray": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz", - "integrity": "sha1-u5NdSFgsuhaMBoNJV6VKPgcSTxE=", - "dev": true - }, - "readable-stream": { - "version": "2.3.4", - "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.4.tgz", - "integrity": "sha512-vuYxeWYM+fde14+rajzqgeohAI7YoJcHE7kXDAc4Nk0EbuKnJfqtY9YtRkLo/tqkuF7MsBQRhPnPeyjYITp3ZQ==", - "dev": true, - "requires": { - "core-util-is": "1.0.2", - "inherits": "2.0.3", - "isarray": "1.0.0", - "process-nextick-args": "2.0.0", - "safe-buffer": "5.1.1", - "string_decoder": "1.0.3", - "util-deprecate": "1.0.2" - } - }, - "string_decoder": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.0.3.tgz", - "integrity": "sha512-4AH6Z5fzNNBcH+6XDMfA/BTt87skxqJlO0lAh3Dker5zThcAxG6mKz+iGu308UKoPPQ8Dcqx/4JhujzltRa+hQ==", - "dev": true, - "requires": { - "safe-buffer": "5.1.1" - } - } - } - }, "copy-descriptor": { "version": "0.1.1", "resolved": "https://registry.npmjs.org/copy-descriptor/-/copy-descriptor-0.1.1.tgz", @@ -432,6 +443,29 @@ "integrity": "sha1-tf1UIgqivFq1eqtxQMlAdUUDwac=", "dev": true }, + "cross-spawn": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-5.1.0.tgz", + "integrity": "sha1-6L0O/uWPz/b4+UUQoKVUu/ojVEk=", + "dev": true, + "requires": { + "lru-cache": "4.1.3", + "shebang-command": "1.2.0", + "which": "1.3.0" + }, + "dependencies": { + "lru-cache": { + "version": "4.1.3", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-4.1.3.tgz", + "integrity": "sha512-fFEhvcgzuIoJVUF8fYr5KR0YqxD238zgObTps31YdADwPPAp82a4M8TrckkWyx7ekNlf9aBcVn81cFwwXngrJA==", + "dev": true, + "requires": { + "pseudomap": "1.0.2", + "yallist": "2.1.2" + } + } + } + }, "dateformat": { "version": "2.2.0", "resolved": "https://registry.npmjs.org/dateformat/-/dateformat-2.2.0.tgz", @@ -478,17 +512,16 @@ } }, "del": { - "version": "2.2.2", - "resolved": "https://registry.npmjs.org/del/-/del-2.2.2.tgz", - "integrity": "sha1-wSyYHQZ4RshLyvhiz/kw2Qf/0ag=", + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/del/-/del-3.0.0.tgz", + "integrity": "sha1-U+z2mf/LyzljdpGrE7rxYIGXZuU=", "dev": true, "requires": { - "globby": "5.0.0", + "globby": "6.1.0", "is-path-cwd": "1.0.0", - "is-path-in-cwd": "1.0.0", - "object-assign": "4.1.1", - "pify": "2.3.0", - "pinkie-promise": "2.0.1", + "is-path-in-cwd": "1.0.1", + "p-map": "1.2.0", + "pify": "3.0.0", "rimraf": "2.6.2" } }, @@ -592,15 +625,6 @@ } } }, - "error-ex": { - "version": "1.3.1", - "resolved": "https://registry.npmjs.org/error-ex/-/error-ex-1.3.1.tgz", - "integrity": "sha1-+FWobOYa3E6GIcPNoh56dhLDqNw=", - "dev": true, - "requires": { - "is-arrayish": "0.2.1" - } - }, "escape-string-regexp": { "version": "1.0.5", "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz", @@ -608,9 +632,9 @@ "dev": true }, "esprima": { - "version": "3.1.3", - "resolved": "https://registry.npmjs.org/esprima/-/esprima-3.1.3.tgz", - "integrity": "sha1-/cpRzuYTOJXjyI1TXOSdv/YqRjM=", + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/esprima/-/esprima-4.0.0.tgz", + "integrity": "sha512-oftTcaMu/EGrEIu904mWteKIv8vMuOgGYo7EhVJJN00R/EED9DCua/xxHRdYnKtcECzVg7xOWhflvJMnqcFZjw==", "dev": true }, "event-stream": { @@ -628,6 +652,21 @@ "through": "2.3.8" } }, + "execa": { + "version": "0.7.0", + "resolved": "https://registry.npmjs.org/execa/-/execa-0.7.0.tgz", + "integrity": "sha1-lEvs00zEHuMqY6n68nrVpl/Fl3c=", + "dev": true, + "requires": { + "cross-spawn": "5.1.0", + "get-stream": "3.0.0", + "is-stream": "1.1.0", + "npm-run-path": "2.0.2", + "p-finally": "1.0.0", + "signal-exit": "3.0.2", + "strip-eof": "1.0.0" + } + }, "expand-brackets": { "version": "2.1.4", "resolved": "https://registry.npmjs.org/expand-brackets/-/expand-brackets-2.1.4.tgz", @@ -781,13 +820,12 @@ "dev": true }, "find-up": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/find-up/-/find-up-1.1.2.tgz", - "integrity": "sha1-ay6YIrGizgpgq2TWEOzK1TyyTQ8=", + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/find-up/-/find-up-2.1.0.tgz", + "integrity": "sha1-RdG35QbHF93UgndaK3eSCjwMV6c=", "dev": true, "requires": { - "path-exists": "2.1.0", - "pinkie-promise": "2.0.1" + "locate-path": "2.0.0" } }, "findup-sync": { @@ -884,6 +922,12 @@ "integrity": "sha1-9wLmMSfn4jHBYKgMFVSstw1QR+U=", "dev": true }, + "get-stream": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-3.0.0.tgz", + "integrity": "sha1-jpQ9E1jcN1VQVOy+LtsFqhdO3hQ=", + "dev": true + }, "get-value": { "version": "2.0.6", "resolved": "https://registry.npmjs.org/get-value/-/get-value-2.0.6.tgz", @@ -1006,17 +1050,24 @@ } }, "globby": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/globby/-/globby-5.0.0.tgz", - "integrity": "sha1-69hGZ8oNuzMLmbz8aOrCvFQ3Dg0=", + "version": "6.1.0", + "resolved": "https://registry.npmjs.org/globby/-/globby-6.1.0.tgz", + "integrity": "sha1-9abXDoOV4hyFj7BInWTfAkJNUGw=", "dev": true, "requires": { "array-union": "1.0.2", - "arrify": "1.0.1", "glob": "7.1.2", "object-assign": "4.1.1", "pify": "2.3.0", "pinkie-promise": "2.0.1" + }, + "dependencies": { + "pify": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/pify/-/pify-2.3.0.tgz", + "integrity": "sha1-7RQaasBDqEnqWISY59yosVMw6Qw=", + "dev": true + } } }, "globule": { @@ -1136,13 +1187,13 @@ } }, "gulp-jsvalidate": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/gulp-jsvalidate/-/gulp-jsvalidate-3.0.0.tgz", - "integrity": "sha1-X6rFJn33byi9Vz8S/1N/Z6gjvhc=", + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/gulp-jsvalidate/-/gulp-jsvalidate-4.0.0.tgz", + "integrity": "sha512-zEYfZvd+uOhUghQsmQPKAM4DFvaoeHw4frb+CowVePxRXcN0/67poVjrHaWZcX7dqyNOWSYLTrlxfU9QKsMrwQ==", "dev": true, "requires": { - "esprima": "3.1.3", - "gulp-util": "3.0.8", + "esprima": "4.0.0", + "plugin-error": "0.1.2", "through2": "2.0.3" } }, @@ -1201,16 +1252,50 @@ } }, "gulp-zip": { - "version": "3.2.0", - "resolved": "https://registry.npmjs.org/gulp-zip/-/gulp-zip-3.2.0.tgz", - "integrity": "sha1-69GY2ubcLV9E2BRWnI7EIRipPvk=", + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/gulp-zip/-/gulp-zip-4.1.0.tgz", + "integrity": "sha1-2rF4vZmvoZCSPx63irrw20eBdwQ=", "dev": true, "requires": { - "chalk": "1.1.3", - "concat-stream": "1.6.0", - "gulp-util": "3.0.8", + "get-stream": "3.0.0", + "plugin-error": "0.1.2", "through2": "2.0.3", + "vinyl": "2.1.0", "yazl": "2.4.3" + }, + "dependencies": { + "clone": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/clone/-/clone-2.1.1.tgz", + "integrity": "sha1-0hfR6WERjjrJpLi7oyhVU79kfNs=", + "dev": true + }, + "clone-stats": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/clone-stats/-/clone-stats-1.0.0.tgz", + "integrity": "sha1-s3gt/4u1R04Yuba/D9/ngvh3doA=", + "dev": true + }, + "replace-ext": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/replace-ext/-/replace-ext-1.0.0.tgz", + "integrity": "sha1-3mMSg3P8v3w8z6TeWkgMRaZ5WOs=", + "dev": true + }, + "vinyl": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/vinyl/-/vinyl-2.1.0.tgz", + "integrity": "sha1-Ah+cLPlR1rk5lDyJ617lrdT9kkw=", + "dev": true, + "requires": { + "clone": "2.1.1", + "clone-buffer": "1.0.0", + "clone-stats": "1.0.0", + "cloneable-readable": "1.1.2", + "remove-trailing-separator": "1.1.0", + "replace-ext": "1.0.0" + } + } } }, "gulplog": { @@ -1281,12 +1366,6 @@ "parse-passwd": "1.0.0" } }, - "hosted-git-info": { - "version": "2.5.0", - "resolved": "https://registry.npmjs.org/hosted-git-info/-/hosted-git-info-2.5.0.tgz", - "integrity": "sha512-pNgbURSuab90KbTqvRPsseaTxOJCZBD0a7t+haSN33piP9cCM4l0CqdzAif2hUqm716UovKB2ROmiabGAKVXyg==", - "dev": true - }, "inflight": { "version": "1.0.6", "resolved": "https://registry.npmjs.org/inflight/-/inflight-1.0.6.tgz", @@ -1340,27 +1419,12 @@ "kind-of": "6.0.2" } }, - "is-arrayish": { - "version": "0.2.1", - "resolved": "https://registry.npmjs.org/is-arrayish/-/is-arrayish-0.2.1.tgz", - "integrity": "sha1-d8mYQFJ6qOyxqLppe4BkWnqSap0=", - "dev": true - }, "is-buffer": { "version": "1.1.6", "resolved": "https://registry.npmjs.org/is-buffer/-/is-buffer-1.1.6.tgz", "integrity": "sha512-NcdALwpXkTm5Zvvbk7owOUSvVvBKDgKP5/ewfXEznmQFfs4ZRmanOeKBTjRVjka3QFoN6XJ+9F3USqfHqTaU5w==", "dev": true }, - "is-builtin-module": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/is-builtin-module/-/is-builtin-module-1.0.0.tgz", - "integrity": "sha1-VAVy0096wxGfj3bDDLwbHgN6/74=", - "dev": true, - "requires": { - "builtin-modules": "1.1.1" - } - }, "is-data-descriptor": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-1.0.0.tgz", @@ -1394,13 +1458,10 @@ "dev": true }, "is-fullwidth-code-point": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-1.0.0.tgz", - "integrity": "sha1-754xOG8DGn8NZDr4L95QxFfvAMs=", - "dev": true, - "requires": { - "number-is-nan": "1.0.1" - } + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-2.0.0.tgz", + "integrity": "sha1-o7MKXE8ZkYMWeqq5O+764937ZU8=", + "dev": true }, "is-glob": { "version": "3.1.0", @@ -1447,9 +1508,9 @@ "dev": true }, "is-path-in-cwd": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/is-path-in-cwd/-/is-path-in-cwd-1.0.0.tgz", - "integrity": "sha1-ZHdYK4IU1gI0YJRWcAO+ip6sBNw=", + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/is-path-in-cwd/-/is-path-in-cwd-1.0.1.tgz", + "integrity": "sha512-FjV1RTW48E7CWM7eE/J2NJvAEEVektecDBVBE5Hh3nM1Jd0kvhHtX68Pr3xsDf857xt3Y4AkwVULK1Vku62aaQ==", "dev": true, "requires": { "is-path-inside": "1.0.1" @@ -1482,6 +1543,12 @@ "is-unc-path": "1.0.0" } }, + "is-stream": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/is-stream/-/is-stream-1.1.0.tgz", + "integrity": "sha1-EtSj3U5o4Lec6428hBc66A2RykQ=", + "dev": true + }, "is-unc-path": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/is-unc-path/-/is-unc-path-1.0.0.tgz", @@ -1567,34 +1634,14 @@ "resolve": "1.5.0" } }, - "load-json-file": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/load-json-file/-/load-json-file-1.1.0.tgz", - "integrity": "sha1-lWkFcI1YtLq0wiYbBPWfMcmTdMA=", + "locate-path": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-2.0.0.tgz", + "integrity": "sha1-K1aLJl7slExtnA3pw9u7ygNUzY4=", "dev": true, "requires": { - "graceful-fs": "4.1.11", - "parse-json": "2.2.0", - "pify": "2.3.0", - "pinkie-promise": "2.0.1", - "strip-bom": "2.0.0" - }, - "dependencies": { - "graceful-fs": { - "version": "4.1.11", - "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.1.11.tgz", - "integrity": "sha1-Dovf5NHduIVNZOBOp8AOKgJuVlg=", - "dev": true - }, - "strip-bom": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/strip-bom/-/strip-bom-2.0.0.tgz", - "integrity": "sha1-YhmoVhZSBJHzV4i9vxRHqZx+aw4=", - "dev": true, - "requires": { - "is-utf8": "0.2.1" - } - } + "p-locate": "2.0.0", + "path-exists": "3.0.0" } }, "lodash": { @@ -1769,6 +1816,15 @@ "object-visit": "1.0.1" } }, + "mem": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/mem/-/mem-1.1.0.tgz", + "integrity": "sha1-Xt1StIXKHZAP5kiVUFOZoN+kX3Y=", + "dev": true, + "requires": { + "mimic-fn": "1.2.0" + } + }, "merge-stream": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/merge-stream/-/merge-stream-1.0.1.tgz", @@ -1831,6 +1887,12 @@ "to-regex": "3.0.1" } }, + "mimic-fn": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/mimic-fn/-/mimic-fn-1.2.0.tgz", + "integrity": "sha512-jf84uxzwiuiIVKiOLpfYk7N46TSy8ubTonmneY9vrpHNAnp0QBt2BxWV9dO3/j+BoVAb+a5G6YDPW3M5HOdMWQ==", + "dev": true + }, "minimatch": { "version": "3.0.4", "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.0.4.tgz", @@ -1948,16 +2010,13 @@ } } }, - "normalize-package-data": { - "version": "2.4.0", - "resolved": "https://registry.npmjs.org/normalize-package-data/-/normalize-package-data-2.4.0.tgz", - "integrity": "sha512-9jjUFbTPfEy3R/ad/2oNbKtW9Hgovl5O1FvFWKkKblNXoN/Oou6+9+KKohPK13Yc3/TyunyWhJp6gvRNR/PPAw==", + "npm-run-path": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/npm-run-path/-/npm-run-path-2.0.2.tgz", + "integrity": "sha1-NakjLfo11wZ7TLLd8jV7GHFTbF8=", "dev": true, "requires": { - "hosted-git-info": "2.5.0", - "is-builtin-module": "1.0.0", - "semver": "4.3.6", - "validate-npm-package-license": "3.0.1" + "path-key": "2.0.1" } }, "number-is-nan": { @@ -2113,14 +2172,52 @@ "dev": true }, "os-locale": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/os-locale/-/os-locale-1.4.0.tgz", - "integrity": "sha1-IPnxeuKe00XoveWDsT0gCYA8FNk=", + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/os-locale/-/os-locale-2.1.0.tgz", + "integrity": "sha512-3sslG3zJbEYcaC4YVAvDorjGxc7tv6KVATnLPZONiljsUncvihe9BQoVCEs0RZ1kmf4Hk9OBqlZfJZWI4GanKA==", + "dev": true, + "requires": { + "execa": "0.7.0", + "lcid": "1.0.0", + "mem": "1.1.0" + } + }, + "p-finally": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/p-finally/-/p-finally-1.0.0.tgz", + "integrity": "sha1-P7z7FbiZpEEjs0ttzBi3JDNqLK4=", + "dev": true + }, + "p-limit": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-1.3.0.tgz", + "integrity": "sha512-vvcXsLAJ9Dr5rQOPk7toZQZJApBl2K4J6dANSsEuh6QI41JYcsS/qhTGa9ErIUUgK3WNQoJYvylxvjqmiqEA9Q==", + "dev": true, + "requires": { + "p-try": "1.0.0" + } + }, + "p-locate": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-2.0.0.tgz", + "integrity": "sha1-IKAQOyIqcMj9OcwuWAaA893l7EM=", "dev": true, "requires": { - "lcid": "1.0.0" + "p-limit": "1.3.0" } }, + "p-map": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/p-map/-/p-map-1.2.0.tgz", + "integrity": "sha512-r6zKACMNhjPJMTl8KcFH4li//gkrXWfbD6feV8l6doRHlzljFWGJ2AP6iKaCJXyZmAUMOPtvbW7EXkbWO/pLEA==", + "dev": true + }, + "p-try": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/p-try/-/p-try-1.0.0.tgz", + "integrity": "sha1-y8ec26+P1CKOE/Yh8rGiN8GyB7M=", + "dev": true + }, "parse-filepath": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/parse-filepath/-/parse-filepath-1.0.2.tgz", @@ -2132,15 +2229,6 @@ "path-root": "0.1.1" } }, - "parse-json": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/parse-json/-/parse-json-2.2.0.tgz", - "integrity": "sha1-9ID0BDTvgHQfhGkJn43qGPVaTck=", - "dev": true, - "requires": { - "error-ex": "1.3.1" - } - }, "parse-passwd": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/parse-passwd/-/parse-passwd-1.0.0.tgz", @@ -2154,13 +2242,10 @@ "dev": true }, "path-exists": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-2.1.0.tgz", - "integrity": "sha1-D+tsZPD8UY2adU3V77YscCJ2H0s=", - "dev": true, - "requires": { - "pinkie-promise": "2.0.1" - } + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-3.0.0.tgz", + "integrity": "sha1-zg6+ql94yxiSXqfYENe1mwEP1RU=", + "dev": true }, "path-is-absolute": { "version": "1.0.1", @@ -2174,6 +2259,12 @@ "integrity": "sha1-NlQX3t5EQw0cEa9hAn+s8HS9/FM=", "dev": true }, + "path-key": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/path-key/-/path-key-2.0.1.tgz", + "integrity": "sha1-QRyttXTFoUDTpLGRDUDYDMn0C0A=", + "dev": true + }, "path-parse": { "version": "1.0.5", "resolved": "https://registry.npmjs.org/path-parse/-/path-parse-1.0.5.tgz", @@ -2195,25 +2286,6 @@ "integrity": "sha1-v8zcjfWxLcUsi0PsONGNcsBLqW0=", "dev": true }, - "path-type": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/path-type/-/path-type-1.1.0.tgz", - "integrity": "sha1-WcRPfuSR2nBNpBXaWkBwuk+P5EE=", - "dev": true, - "requires": { - "graceful-fs": "4.1.11", - "pify": "2.3.0", - "pinkie-promise": "2.0.1" - }, - "dependencies": { - "graceful-fs": { - "version": "4.1.11", - "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.1.11.tgz", - "integrity": "sha1-Dovf5NHduIVNZOBOp8AOKgJuVlg=", - "dev": true - } - } - }, "pause-stream": { "version": "0.0.11", "resolved": "https://registry.npmjs.org/pause-stream/-/pause-stream-0.0.11.tgz", @@ -2224,9 +2296,9 @@ } }, "pify": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/pify/-/pify-2.3.0.tgz", - "integrity": "sha1-7RQaasBDqEnqWISY59yosVMw6Qw=", + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/pify/-/pify-3.0.0.tgz", + "integrity": "sha1-5aSs0sEB/fPZpNB/DbxNtJ3SgXY=", "dev": true }, "pinkie": { @@ -2323,26 +2395,11 @@ "asap": "2.0.6" } }, - "read-pkg": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/read-pkg/-/read-pkg-1.1.0.tgz", - "integrity": "sha1-9f+qXs0pyzHAR0vKfXVra7KePyg=", - "dev": true, - "requires": { - "load-json-file": "1.1.0", - "normalize-package-data": "2.4.0", - "path-type": "1.1.0" - } - }, - "read-pkg-up": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/read-pkg-up/-/read-pkg-up-1.0.1.tgz", - "integrity": "sha1-nWPBMnbAZZGNV/ACpX9AobZD+wI=", - "dev": true, - "requires": { - "find-up": "1.1.2", - "read-pkg": "1.1.0" - } + "pseudomap": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/pseudomap/-/pseudomap-1.0.2.tgz", + "integrity": "sha1-8FKijacOYYkX7wqKw0wa5aaChrM=", + "dev": true }, "readable-stream": { "version": "1.1.14", @@ -2374,6 +2431,12 @@ "extend-shallow": "2.0.1" } }, + "remove-trailing-separator": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/remove-trailing-separator/-/remove-trailing-separator-1.1.0.tgz", + "integrity": "sha1-wkvOKig62tW8P1jg1IJJuSN52O8=", + "dev": true + }, "repeat-element": { "version": "1.1.2", "resolved": "https://registry.npmjs.org/repeat-element/-/repeat-element-1.1.2.tgz", @@ -2489,6 +2552,21 @@ "split-string": "3.1.0" } }, + "shebang-command": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/shebang-command/-/shebang-command-1.2.0.tgz", + "integrity": "sha1-RKrGW2lbAzmJaMOfNj/uXer98eo=", + "dev": true, + "requires": { + "shebang-regex": "1.0.0" + } + }, + "shebang-regex": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/shebang-regex/-/shebang-regex-1.0.0.tgz", + "integrity": "sha1-2kL0l0DAtC2yypcoVxyxkMmO/qM=", + "dev": true + }, "shelljs": { "version": "0.7.8", "resolved": "https://registry.npmjs.org/shelljs/-/shelljs-0.7.8.tgz", @@ -2506,6 +2584,12 @@ "integrity": "sha1-P/IfGYytIXX587eBhT/ZTQ0ZtZA=", "dev": true }, + "signal-exit": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-3.0.2.tgz", + "integrity": "sha1-tf3AjxKH6hF4Yo5BXiUTK3NkbG0=", + "dev": true + }, "snapdragon": { "version": "0.8.1", "resolved": "https://registry.npmjs.org/snapdragon/-/snapdragon-0.8.1.tgz", @@ -2652,27 +2736,6 @@ "integrity": "sha1-Gsu/tZJDbRC76PeFt8xvgoFQEsM=", "dev": true }, - "spdx-correct": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/spdx-correct/-/spdx-correct-1.0.2.tgz", - "integrity": "sha1-SzBz2TP/UfORLwOsVRlJikFQ20A=", - "dev": true, - "requires": { - "spdx-license-ids": "1.2.2" - } - }, - "spdx-expression-parse": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/spdx-expression-parse/-/spdx-expression-parse-1.0.4.tgz", - "integrity": "sha1-m98vIOH0DtRH++JzJmGR/O1RYmw=", - "dev": true - }, - "spdx-license-ids": { - "version": "1.2.2", - "resolved": "https://registry.npmjs.org/spdx-license-ids/-/spdx-license-ids-1.2.2.tgz", - "integrity": "sha1-yd96NCRZSt5r0RkA1ZZpbcBrrFc=", - "dev": true - }, "split": { "version": "0.2.10", "resolved": "https://registry.npmjs.org/split/-/split-0.2.10.tgz", @@ -2818,14 +2881,30 @@ "dev": true }, "string-width": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/string-width/-/string-width-1.0.2.tgz", - "integrity": "sha1-EYvfW4zcUaKn5w0hHgfisLmxB9M=", + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-2.1.1.tgz", + "integrity": "sha512-nOqH59deCq9SRHlxq1Aw85Jnt4w6KvLKqWVik6oA9ZklXLNIOlqg4F2yrT1MVaTjAqvVwdfeZ7w7aCvJD7ugkw==", "dev": true, "requires": { - "code-point-at": "1.1.0", - "is-fullwidth-code-point": "1.0.0", - "strip-ansi": "3.0.1" + "is-fullwidth-code-point": "2.0.0", + "strip-ansi": "4.0.0" + }, + "dependencies": { + "ansi-regex": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-3.0.0.tgz", + "integrity": "sha1-7QMXwyIGT3lGbAKWa922Bas32Zg=", + "dev": true + }, + "strip-ansi": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-4.0.0.tgz", + "integrity": "sha1-qEeQIusaw2iocTibY1JixQXuNo8=", + "dev": true, + "requires": { + "ansi-regex": "3.0.0" + } + } } }, "strip-ansi": { @@ -2847,6 +2926,12 @@ "is-utf8": "0.2.1" } }, + "strip-eof": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/strip-eof/-/strip-eof-1.0.0.tgz", + "integrity": "sha1-u0P/VZim6wXYm1n80SnJgzE2Br8=", + "dev": true + }, "supports-color": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-2.0.0.tgz", @@ -3037,12 +3122,6 @@ "repeat-string": "1.6.1" } }, - "typedarray": { - "version": "0.0.6", - "resolved": "https://registry.npmjs.org/typedarray/-/typedarray-0.0.6.tgz", - "integrity": "sha1-hnrHTjhkGHsdPUfZlqeOxciDB3c=", - "dev": true - }, "unc-path-regex": { "version": "0.1.2", "resolved": "https://registry.npmjs.org/unc-path-regex/-/unc-path-regex-0.1.2.tgz", @@ -3233,16 +3312,6 @@ "user-home": "1.1.1" } }, - "validate-npm-package-license": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/validate-npm-package-license/-/validate-npm-package-license-3.0.1.tgz", - "integrity": "sha1-KAS6vnEq0zeUWaz74kdGqywwP7w=", - "dev": true, - "requires": { - "spdx-correct": "1.0.2", - "spdx-expression-parse": "1.0.4" - } - }, "vinyl": { "version": "0.5.3", "resolved": "https://registry.npmjs.org/vinyl/-/vinyl-0.5.3.tgz", @@ -3320,9 +3389,9 @@ } }, "which-module": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/which-module/-/which-module-1.0.0.tgz", - "integrity": "sha1-u6Y8qGGUiZT/MHc2CJ47lgJsKk8=", + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/which-module/-/which-module-2.0.0.tgz", + "integrity": "sha1-2e8H3Od7mQK4o6j6SzHD4/fm6Ho=", "dev": true }, "widgetbuilder-gulp-helper": { @@ -3354,6 +3423,28 @@ "requires": { "string-width": "1.0.2", "strip-ansi": "3.0.1" + }, + "dependencies": { + "is-fullwidth-code-point": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-1.0.0.tgz", + "integrity": "sha1-754xOG8DGn8NZDr4L95QxFfvAMs=", + "dev": true, + "requires": { + "number-is-nan": "1.0.1" + } + }, + "string-width": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-1.0.2.tgz", + "integrity": "sha1-EYvfW4zcUaKn5w0hHgfisLmxB9M=", + "dev": true, + "requires": { + "code-point-at": "1.1.0", + "is-fullwidth-code-point": "1.0.0", + "strip-ansi": "3.0.1" + } + } } }, "wrappy": { @@ -3390,34 +3481,39 @@ "integrity": "sha1-bRX7qITAhnnA136I53WegR4H+kE=", "dev": true }, + "yallist": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/yallist/-/yallist-2.1.2.tgz", + "integrity": "sha1-HBH5IY8HYImkfdUS+TxmmaaoHVI=", + "dev": true + }, "yargs": { - "version": "6.6.0", - "resolved": "https://registry.npmjs.org/yargs/-/yargs-6.6.0.tgz", - "integrity": "sha1-eC7CHvQDNF+DCoCMo9UTr1YGUgg=", + "version": "11.0.0", + "resolved": "https://registry.npmjs.org/yargs/-/yargs-11.0.0.tgz", + "integrity": "sha512-Rjp+lMYQOWtgqojx1dEWorjCofi1YN7AoFvYV7b1gx/7dAAeuI4kN5SZiEvr0ZmsZTOpDRcCqrpI10L31tFkBw==", "dev": true, "requires": { - "camelcase": "3.0.0", - "cliui": "3.2.0", + "cliui": "4.1.0", "decamelize": "1.2.0", + "find-up": "2.1.0", "get-caller-file": "1.0.2", - "os-locale": "1.4.0", - "read-pkg-up": "1.0.1", + "os-locale": "2.1.0", "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", + "string-width": "2.1.1", + "which-module": "2.0.0", "y18n": "3.2.1", - "yargs-parser": "4.2.1" + "yargs-parser": "9.0.2" } }, "yargs-parser": { - "version": "4.2.1", - "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-4.2.1.tgz", - "integrity": "sha1-KczqwNxPA8bIe0qfIX3RjJ90hxw=", + "version": "9.0.2", + "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-9.0.2.tgz", + "integrity": "sha1-nM9qQ0YP5O1Aqbto9I1DuKaMwHc=", "dev": true, "requires": { - "camelcase": "3.0.0" + "camelcase": "4.1.0" } }, "yazl": { diff --git a/package.json b/package.json index d9a207a..7f64473 100644 --- a/package.json +++ b/package.json @@ -1,23 +1,23 @@ { "name": "actiontimer", - "version": "3.1.1", + "version": "3.2.0", "description": "", "license": "", "author": "", "private": true, "dependencies": {}, "devDependencies": { - "del": "^2.2.2", + "del": "^3.0.0", "gulp": "^3.9.1", "gulp-if": "^2.0.1", "gulp-intercept": "^0.1.0", "gulp-json-transform": "^0.4.2", + "gulp-jsvalidate": "^4.0.0", "gulp-newer": "^1.3.0", "gulp-util": "^3.0.7", - "gulp-zip": "^3.2.0", - "gulp-jsvalidate": "^3.0.0", + "gulp-zip": "^4.1.0", "widgetbuilder-gulp-helper": "https://github.com/JelteMX/widgetbuilder-gulp-helper/archive/1.0.1.tar.gz", - "yargs": "^6.0.0" + "yargs": "^11.0.0" }, "engines": { "node": ">=5" diff --git a/src/package.xml b/src/package.xml index cfce4b1..1bdc2e8 100644 --- a/src/package.xml +++ b/src/package.xml @@ -1,6 +1,6 @@ - + diff --git a/test/widgets/actiontimer.mpk b/test/widgets/actiontimer.mpk index 97fa57a9c3f46eda185027f5956574874227a224..88ec08dbf5f986c52157baf9def8cd32d7314202 100644 GIT binary patch delta 238 zcmV@ oll~1FvoZlk1OkynvwH4MZOY!rOs7LEKR#nLKi~6M~pFYORm;e zuDr$P5GD#jzG5kaGMZc{eLWdsuCgTIphA+Jw50*w>MhTB2LA@ oll~1FvoZlk1OjG5vwH Date: Wed, 20 Jun 2018 14:14:24 +0300 Subject: [PATCH 7/7] Process pull request review --- README.md | 8 +++---- package.json | 4 ++-- src/MicroflowTimer/MicroflowTimer.xml | 4 ++-- src/MicroflowTimer/widget/MicroflowTimer.js | 22 +++++++++----------- src/package.xml | 2 +- test/widgets/MicroflowTimer.mpk | Bin 3789 -> 3799 bytes test/widgets/actiontimer.mpk | Bin 3830 -> 0 bytes 7 files changed, 19 insertions(+), 21 deletions(-) delete mode 100644 test/widgets/actiontimer.mpk diff --git a/README.md b/README.md index e237c0d..5d3ff6c 100644 --- a/README.md +++ b/README.md @@ -1,6 +1,6 @@ -# ActionTimer [![Support](https://img.shields.io/badge/Mendix%20Support%3A-Platform-green.svg)](https://docs.mendix.com/community/app-store/app-store-content-support) +# Microflow Timer [![Support](https://img.shields.io/badge/Mendix%20Support%3A-Platform-green.svg)](https://docs.mendix.com/community/app-store/app-store-content-support) -This widget can be used to time and execute a Microflow as long as a certain form is open. The microflow or nanoflow can be executed once or repeatedly, in which case it will not stop until it returns false or until the form is closed. +This widget can be used to time and execute a Microflow or Nanoflow as long as a certain form is open. The microflow or nanoflow can be executed once or repeatedly, in which case it will not stop until it returns false or until the form is closed. ## Contributing @@ -16,11 +16,11 @@ For more information on contributing to this repository visit [Contributing to a ## Features and limitations * Adds timed behavior to your applications. -* Nanoflow support starts from Mendix 7.13.1. +* Run a Microflow or Nanoflow. ## Configuration -* The widget requires a dataview or template grid context. This object will be send as argument to the invoked microflow. +* The widget requires a dataview or template grid context. This object will be send as argument to the invoked microflow or nanoflow. ## Properties diff --git a/package.json b/package.json index 7f64473..70b361a 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { - "name": "actiontimer", - "version": "3.2.0", + "name": "MicroflowTimer", + "version": "4.0.0", "description": "", "license": "", "author": "", diff --git a/src/MicroflowTimer/MicroflowTimer.xml b/src/MicroflowTimer/MicroflowTimer.xml index fcb9ac3..0c14626 100644 --- a/src/MicroflowTimer/MicroflowTimer.xml +++ b/src/MicroflowTimer/MicroflowTimer.xml @@ -1,6 +1,6 @@ - ActionTimer + MicroflowTimer The description of this widget @@ -21,7 +21,7 @@ If true (and execute once is false), the microflow or nanoflow will be invoked the first time if the widget has loaded. If false, the microflow or nanoflow will be invoked the first time after interval has passed - Call event + Timer event Behavior diff --git a/src/MicroflowTimer/widget/MicroflowTimer.js b/src/MicroflowTimer/widget/MicroflowTimer.js index e9209b3..a354774 100644 --- a/src/MicroflowTimer/widget/MicroflowTimer.js +++ b/src/MicroflowTimer/widget/MicroflowTimer.js @@ -26,8 +26,12 @@ define([ _timeout: null, _timerStarted: false, - postcreate: function() { + postCreate: function() { this._handles = []; + + if(!(this.microflow && this.callEvent == "callMicroflow" || this.nanoflow.nanoflow && this.callEvent == "callNanoflow")) { + mx.ui.error("No action specified for " + this.callEvent) + } }, update: function (obj, callback) { @@ -166,10 +170,10 @@ define([ _executeEvent: function() { if(this.callEvent === "callMicroflow" && this.microflow) { this._execMf() - } else if (this.callEvent === "callNanoflow" && this.nanoflow){ + } else if (this.callEvent === "callNanoflow" && this.nanoflow.nanoflow){ this._executeNanoFlow() } else { - mx.ui.error("No action specified for " + this.callEvent) + return; } }, @@ -183,6 +187,7 @@ define([ var mfObject = { params: { actionname: this.microflow, + origin: this.mxform, applyto: "selection", guids: [this._contextObj.getGuid()] }, @@ -193,18 +198,10 @@ define([ } }), error: lang.hitch(this, function(error) { + logger.error(this.id + ": An error ocurred while executing microflow: ", error); mx.ui.error("An error ocurred while executing microflow" + error.message); }) }; - if (!mx.version || mx.version && parseInt(mx.version.split(".")[0]) < 7) { - // < Mendix 7 - mfObject.store = { - caller: this.mxform - }; - } else { - mfObject.origin = this.mxform; - } - mx.data.action(mfObject, this); } }, @@ -222,6 +219,7 @@ define([ } }), error: lang.hitch(this, function(error) { + logger.error(this.id + ": An error ocurred while executing nanoflow: ", error); mx.ui.error("An error ocurred while executing nanoflow" + error.message); }) }); diff --git a/src/package.xml b/src/package.xml index 1bdc2e8..779dac6 100644 --- a/src/package.xml +++ b/src/package.xml @@ -1,6 +1,6 @@ - + diff --git a/test/widgets/MicroflowTimer.mpk b/test/widgets/MicroflowTimer.mpk index 8d4953cc86e7f583abfe7e45df29ecb809358e96..fa2e7a99eeab5d46bbfdf16d7bea9af17ee7f554 100644 GIT binary patch delta 3350 zcmV+x4e9dD9oHQVP)h>@6aWAS005Oj)R7G;2nBc5OotQ{S&=^~d_Lh)4*}kM=snw_yjjDp)DPOb95#FnjGXk1c5M!qpjJC5i%fL2 zJl8F;H0_2QP9b!A#26#DEk!V$l?c5tr~+)s4FuRU>Dz|4c}9p0Jf(Pp`3L3$C;?Y^H{m{ph}6!6h0f)sk4SD2WJ!s-+Q>2FYZ2CW1011msXG&b9hJC?$}|ZG8(075C}e2I+84tLgeeU>iZwWc#(FknbBUJK$E_=WzdAH%BSi z1<)$lo6vt$oVmvQnZosL!@(&}+-#8VRPHImn}Zk5#qdCAw6&I|JuTdZV~|yoX_%8Bx{nb={Py*@ABi+oOfkq z59QtZ+hW`o#I}dJvR1d$GkWF^k76Ldz?2?k$w+($@v&>;oVyzR)$=!Ty9k}WyNdC^09+eCiSC;2 zdAonOC;QM2NDqFJ%;G&;{L(hjznStPeq8P%>>Zl|_%D5@&7x_Z>-*A}LDt+$=+Z`Js)aRwcW8N4JDewY5|KX_BEUXF4$FqgEzAvl;pgbG#*j@ER4YTG4gG$r8~Di48%o z*^-o?*$$u;NZ#Udj=uXAKAC;Ns)EeX3YXxKeOL?31s3|9;EnUDz-9UBf0k5YjuQE| zH9A3`^piKZ(hs^pTO$O6oX1rwIY(7fmfiCe<+b>wwfLnFJQScK?}P;JEm+^w?rRr1 zrMki;y2YI0yd?D$y6;mZA%Eb$x#33D8ygELBoAmgxC&JlRYT_kjplhsflU^72C$kYH(Nq!JvP+*^{$9*yItX zq7_sQT>66XG^+*M^~`p)Es6~(KD_G+*@((P4r(QOe2KNbkvmgtdmPJ| z*dV4T2w}FYs#P6?g>D&VlpAwPsh~2)!aAGDDk=%wS|^txe?fY3=It2o!s*TXl49cOSJO-Eigo)@yGd5s0lLSOi>-9RX{8M0Q z*T1SQyi(?l!t(ZkkezuNRVvLlqfERHCb8$j!uW8hVv@S9#~pd-Jq_}{)9rAfRo@yL zCWZ#+rl~~>e@U$dAzJs@{(uN9wO!P3_H>^*k{{vEp(WspWBv&|^Eu}5%d6MD zP`E9GiAvywn=#Vi<5I>MH44k%(x`0LfgT$kU89CTiD5FE$%PiWvAYe?CDg7WZLKkZ z>sl2cr7p-FFN0{gxQ;Mncv1A##XGbiN)0qm$F(Y>e}Eq9W?}$a@spYZGZ=Q6p3lM5 z*2}I*mt0MfuE=*8KkU2x1*H8z zF#QnP2C{Bok8OtySDW4@b10u=ujC1j7Q4RMh^L+*a+iI0b!<0(FgJ81@AQ{cooG8WA$0xscoOS<&RnEgE)o z5?B?j^6DUJeAU#QUQ|y2v{^&zaNiZl^~Z2V z>N(_&NhfdiQGawMj(Oy<#O31%QRph{4K5-FfTmHf=Z3>=f}HpDDh*ERf?Y{uHhW%Z zC+nRyPR8a0U!{s4K`uUdWFx0e^p8gK_3EUA(?dfdILBn;%~#yWIEzQaBU_;D3T7dN zexM4D-m6$M_Y=HJC)e@X8&_%06X$5SDdD7UN-?$&so)+Klb=JpLEQuL3fArt+d5&IIT0LS#!@1gc(vl#Z-_mvW5-QWO zBaV5u49Dx1_YO*Qx+Qgu*JNn@p7b6+^d-TFB^G$96DKt(s9S{Nc8NiK8!hK;DHy)0 z+3wpc8Mv2G#<~?bjYqP(`12-=lji6O(AqW+Z2cm#)d|u6Y3rp{$CXFV+RF9~f2Swy zQCT>fq2J|=9;)3dJ?DXK?z_=t*Q#wNB^6h(}HoW2YpsOKBhL5SI7yC|c@g>e9l|)y5(REI8Z#v+bUvOfE~Q)PTN6iBhG0NYhH{c#1wUXjKer2hz;-=3`x{V8 z0Rle*6aWAS005Oj)RSlpItT@K)l7#J6j_t14KWP>chyXcE=KO<0{{R?ljsdX1CT=0 glPwNG4S09eOopz^$G8Uo0JW2Q4on7P4FCWD0LMsC+W-In delta 3335 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 ltmWU_(H|U1A^(@-r