From aa9aeffe8ebba4714706f74b2245c405e3ee29ad Mon Sep 17 00:00:00 2001 From: Hartorn Date: Thu, 24 Nov 2016 17:39:24 +0100 Subject: [PATCH 01/13] Correcting the getter on data --- src/store/CoreStore.js | 15 +++++---------- 1 file changed, 5 insertions(+), 10 deletions(-) diff --git a/src/store/CoreStore.js b/src/store/CoreStore.js index 058d654..1df5ab4 100644 --- a/src/store/CoreStore.js +++ b/src/store/CoreStore.js @@ -154,16 +154,11 @@ class CoreStore extends EventEmitter { const hasData = currentStore.data.has(def); if(hasData){ const rawData = currentStore.data.get(def); - //If the store node isn't an object, immutable solution are non sens. - if(isFunction(rawData) || !isObject(rawData)){ - return rawData; - } - else { - const data = rawData.toJS(); - if(!isEmpty(data)){ - return data; - } - } + if(rawData && rawData.toJS){ + const data = rawData.toJS(); + return isEmpty(data) ? undefined : data; + } + return rawData; } return undefined; }; From 5a6005f33ffeab8a008d39700d47751f5298f4fa Mon Sep 17 00:00:00 2001 From: damieng77 Date: Thu, 8 Dec 2016 17:50:35 +0100 Subject: [PATCH 02/13] Correcting error handling If `msgs` is null, it crashes. --- src/network/error-parsing.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/network/error-parsing.js b/src/network/error-parsing.js index c1662c2..719393c 100644 --- a/src/network/error-parsing.js +++ b/src/network/error-parsing.js @@ -110,7 +110,7 @@ function _treatGlobalErrors(responseJSON, options) { allMessagesTypes.forEach((globalMessageConf)=>{ //Treat all the gloabe let msgs = messages[globalMessageConf.name]; - if (msgs !== undefined) { + if (msgs) { globalMessagesContainer = [...globalMessagesContainer, ...msgs]; //To remove _treatGlobalMessagesPerType(msgs, globalMessageConf.type); From 3f2653fb14d6d4e1f3149eb653cd33522271ee21 Mon Sep 17 00:00:00 2001 From: Hartorn Date: Mon, 12 Dec 2016 10:05:38 +0100 Subject: [PATCH 03/13] Correcting the data dispatched Correcting the data dispatched, so that when there is an error, the loading state will still disappear. --- src/application/action-builder.js | 24 +++++++++++++++++------- 1 file changed, 17 insertions(+), 7 deletions(-) diff --git a/src/application/action-builder.js b/src/application/action-builder.js index e89e2a8..82f02dc 100644 --- a/src/application/action-builder.js +++ b/src/application/action-builder.js @@ -1,7 +1,7 @@ -const dispatcher = require('../dispatcher'); -const {manageResponseErrors} = require('../network/error-parsing'); -const {isArray} = require('lodash/lang'); -const {identity} = require('lodash/utility'); +import dispatcher from '../dispatcher'; +import {manageResponseErrors} from '../network/error-parsing'; +import {isArray} from 'lodash/lang'; +import {identity} from 'lodash/utility'; /** * Method call before the service. @@ -53,15 +53,25 @@ function _dispatchServiceResponse({node, type, status, callerId}, json){ */ function _dispatchFieldErrors({node, callerId}, errorResult){ const isMultiNode = isArray(node); - const data = isMultiNode ? errorResult : {[node]: errorResult}; + const data = {}; + if(isMultiNode){ + node.forEach((nd) => { + data[nd] = (errorResult || {})[nd]; + }); + } else { + data[node] = errorResult; + } + const errorStatus = { name: 'error', isLoading: false }; let newStatus = {}; if(isMultiNode){ - node.forEach((nd)=>{newStatus[nd] = errorStatus; }); - }else { + node.forEach((nd) => { + newStatus[nd] = errorStatus; + }); + } else { newStatus[node] = errorStatus; } dispatcher.handleServerAction({ From f3b3c09fd9a4c635c2f5114050a2cbccd15e92ac Mon Sep 17 00:00:00 2001 From: GuenoleK Date: Mon, 10 Oct 2016 17:32:52 +0200 Subject: [PATCH 04/13] Merge pull request #379 from JohnnP/0.16.0-cav Correction singleton --- src/reference/builder.js | 8 ++++---- src/reference/built-in-action.js | 33 +++++++++++++++----------------- 2 files changed, 19 insertions(+), 22 deletions(-) diff --git a/src/reference/builder.js b/src/reference/builder.js index 4c97a09..8cc6238 100755 --- a/src/reference/builder.js +++ b/src/reference/builder.js @@ -48,14 +48,14 @@ function loadList(listDesc) { * @param {string} listName - The name of the list to load. * @param {object} args - Argument to provide to the function. */ -function loadListByName(listName, args) { +function loadListByName(listName, args, skipCache) { checkIsString('listName', listName); const configurationElement = getElement(listName); if (typeof configurationElement !== `function`) { throw new Error(`You are trying to load the reference list: ${listName} which does not have a list configure.`); } let now = _getTimeStamp(); - if(cache[listName] && (now - cache[listName].timeStamp) < getCacheDuration()) { + if(cache[listName] && (now - cache[listName].timeStamp) < getCacheDuration() && !skipCache) { _deletePromiseWaiting(listName); //console.info('data served from cache', listName, cache[listName].value); return Promise.resolve(cache[listName].value); @@ -70,7 +70,7 @@ function loadListByName(listName, args) { //Load many lists by their names. `refHelper.loadMany(['list1', 'list2']).then(success, error)` // Return an array of many promises for all the given lists. // Be carefull, if there is a problem for one list, the error callback is called. -function loadMany(names) { +function loadMany(names, skipCache) { if(names === undefined){ return []; } @@ -82,7 +82,7 @@ function loadMany(names) { return acc; } promiseWaiting.push(name); - return acc.concat([loadListByName(name)]); + return acc.concat([loadListByName(name, null, skipCache).then(dataList => ({name, dataList: dataList}))]); }, []); } /** diff --git a/src/reference/built-in-action.js b/src/reference/built-in-action.js index 32adcfb..5e399f0 100644 --- a/src/reference/built-in-action.js +++ b/src/reference/built-in-action.js @@ -6,24 +6,21 @@ var dispatcher = require('../dispatcher'); * @param {array} referenceNames - An array which contains the name of all the references to load. * @returns {Promise} - The promise of loading all the references. */ -function builtInReferenceAction(referenceNames){ - return function(){ - if(!referenceNames){ - return undefined; - } - return Promise.all(loadManyReferenceList(referenceNames)) - .then(function successReferenceLoading(data){ - //Rebuilt a constructed information from the map. - var reconstructedData = {}; - referenceNames.map((name, index)=>{ - reconstructedData[name] = data[index]; - }); - // - dispatcher.handleViewAction({data: reconstructedData, type: 'update', subject: 'reference'}); - }, function errorReferenceLoading(err){ - dispatcher.handleViewAction({data: err, type: 'error'}); - }); - }; +function builtInReferenceAction(referenceNames, skipCache) { + return () => { + if(!referenceNames) { + return undefined; + } + return Promise.all(loadManyReferenceList(referenceNames, skipCache)) + .then(function successReferenceLoading(data) { + //Rebuilt a constructed information from the map. + const reconstructedData = data.reduce((acc,item) => {acc[item.name] = item.dataList; return acc;}, {}) + dispatcher.handleViewAction({data: reconstructedData, type: 'update', subject: 'reference'}); + }, function errorReferenceLoading(err) { + dispatcher.handleViewAction({data: err, type: 'error'}); + }); + }; } + module.exports = builtInReferenceAction; From 2c19d8dd6093a4a447dc82e165addcd80f62fbac Mon Sep 17 00:00:00 2001 From: GuenoleK Date: Thu, 8 Dec 2016 16:03:56 +0100 Subject: [PATCH 05/13] Updating .gitignore and giving default values to some functions --- .gitignore | 17 ++++++++++++++ index.js | 39 ++++++++++++++++++++++++++++++++ src/reference/builder.js | 4 ++-- src/reference/built-in-action.js | 2 +- 4 files changed, 59 insertions(+), 3 deletions(-) create mode 100644 index.js diff --git a/.gitignore b/.gitignore index a3c7ccf..f9a232e 100644 --- a/.gitignore +++ b/.gitignore @@ -1,3 +1,20 @@ npm-debug.log node_modules dist +/application +/component +/definition +/dispatcher +/exception +/history +/list +/message +/network +/reference +/router +/search +/site-description +/store +/translation +/user +/util diff --git a/index.js b/index.js new file mode 100644 index 0000000..db5c350 --- /dev/null +++ b/index.js @@ -0,0 +1,39 @@ +'use strict'; + +//http://www.ascii-fr.com/Generateur-de-texte.html + +var infos = require(__PACKAGE_JSON_PATH__ + '/package.json'); + +console.log('\n FOCUS CORE\n\n version: ' + infos.version + '\n focus: ' + infos.homepage + '\n documentation: ' + infos.documentation + '\n issues: ' + infos.bugs.url + '\n '); +/** +* Focus library. +* This file requires all submodules. +* @type {Object} +*/ +module.exports = { + application: require('./application'), + history: require('./history'), + component: require('./component'), + definition: require('./definition'), + dispatcher: require('./dispatcher'), + list: require('./list'), + exception: require('./exception'), + network: require('./network'), + router: require('./router'), + reference: require('./reference'), + search: require('./search'), + siteDescription: require('./site-description'), + store: require('./store'), + util: require('./util'), + user: require('./user'), + translation: require('./translation'), + message: require('./message'), + VERSION: infos.version, + AUTHOR: infos.author, + DOCUMENTATION: function DOCUMENTATION() { + console.log('documentation: ' + infos.documentation); + console.log('repository: ' + infos.repository.url); + console.log('issues: ' + infos.bugs.url); + } +}; +//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbInByb2Nlc3Nvci5qcyJdLCJuYW1lcyI6WyJpbmZvcyIsInJlcXVpcmUiLCJfX1BBQ0tBR0VfSlNPTl9QQVRIX18iLCJjb25zb2xlIiwibG9nIiwidmVyc2lvbiIsImhvbWVwYWdlIiwiZG9jdW1lbnRhdGlvbiIsImJ1Z3MiLCJ1cmwiLCJtb2R1bGUiLCJleHBvcnRzIiwiYXBwbGljYXRpb24iLCJoaXN0b3J5IiwiY29tcG9uZW50IiwiZGVmaW5pdGlvbiIsImRpc3BhdGNoZXIiLCJsaXN0IiwiZXhjZXB0aW9uIiwibmV0d29yayIsInJvdXRlciIsInJlZmVyZW5jZSIsInNlYXJjaCIsInNpdGVEZXNjcmlwdGlvbiIsInN0b3JlIiwidXRpbCIsInVzZXIiLCJ0cmFuc2xhdGlvbiIsIm1lc3NhZ2UiLCJWRVJTSU9OIiwiQVVUSE9SIiwiYXV0aG9yIiwiRE9DVU1FTlRBVElPTiIsInJlcG9zaXRvcnkiXSwibWFwcGluZ3MiOiI7O0FBQUE7O0FBRUEsSUFBTUEsUUFBUUMsUUFBV0MscUJBQVgsbUJBQWQ7O0FBRUFDLFFBQVFDLEdBQVIsK0NBSW1CSixNQUFNSyxPQUp6Qix5QkFLaUJMLE1BQU1NLFFBTHZCLGlDQU15Qk4sTUFBTU8sYUFOL0IsMEJBT2tCUCxNQUFNUSxJQUFOLENBQVdDLEdBUDdCO0FBVUE7Ozs7O0FBS0FDLE9BQU9DLE9BQVAsR0FBaUI7QUFDYkMsaUJBQWFYLFFBQVEsZUFBUixDQURBO0FBRWJZLGFBQVNaLFFBQVEsV0FBUixDQUZJO0FBR2JhLGVBQVdiLFFBQVEsYUFBUixDQUhFO0FBSWJjLGdCQUFZZCxRQUFRLGNBQVIsQ0FKQztBQUtiZSxnQkFBWWYsUUFBUSxjQUFSLENBTEM7QUFNYmdCLFVBQU1oQixRQUFRLFFBQVIsQ0FOTztBQU9iaUIsZUFBV2pCLFFBQVEsYUFBUixDQVBFO0FBUWJrQixhQUFTbEIsUUFBUSxXQUFSLENBUkk7QUFTYm1CLFlBQVFuQixRQUFRLFVBQVIsQ0FUSztBQVVib0IsZUFBV3BCLFFBQVEsYUFBUixDQVZFO0FBV2JxQixZQUFRckIsUUFBUSxVQUFSLENBWEs7QUFZYnNCLHFCQUFpQnRCLFFBQVEsb0JBQVIsQ0FaSjtBQWFidUIsV0FBT3ZCLFFBQVEsU0FBUixDQWJNO0FBY2J3QixVQUFNeEIsUUFBUSxRQUFSLENBZE87QUFlYnlCLFVBQU16QixRQUFRLFFBQVIsQ0FmTztBQWdCYjBCLGlCQUFhMUIsUUFBUSxlQUFSLENBaEJBO0FBaUJiMkIsYUFBUzNCLFFBQVEsV0FBUixDQWpCSTtBQWtCYjRCLGFBQVM3QixNQUFNSyxPQWxCRjtBQW1CYnlCLFlBQVE5QixNQUFNK0IsTUFuQkQ7QUFvQmJDLGlCQXBCYSwyQkFvQkU7QUFDWDdCLGdCQUFRQyxHQUFSLHFCQUE4QkosTUFBTU8sYUFBcEM7QUFDQUosZ0JBQVFDLEdBQVIsa0JBQTJCSixNQUFNaUMsVUFBTixDQUFpQnhCLEdBQTVDO0FBQ0FOLGdCQUFRQyxHQUFSLGNBQXVCSixNQUFNUSxJQUFOLENBQVdDLEdBQWxDO0FBQ0g7QUF4QlksQ0FBakIiLCJmaWxlIjoicHJvY2Vzc29yLmpzIiwic291cmNlc0NvbnRlbnQiOlsiLy9odHRwOi8vd3d3LmFzY2lpLWZyLmNvbS9HZW5lcmF0ZXVyLWRlLXRleHRlLmh0bWxcclxuXHJcbmNvbnN0IGluZm9zID0gcmVxdWlyZShgJHtfX1BBQ0tBR0VfSlNPTl9QQVRIX199L3BhY2thZ2UuanNvbmApO1xyXG5cclxuY29uc29sZS5sb2coXHJcbiAgICBgXHJcbiAgICAgICAgRk9DVVMgQ09SRVxyXG5cclxuICAgICAgICB2ZXJzaW9uOiAke2luZm9zLnZlcnNpb259XHJcbiAgICAgICAgZm9jdXM6ICR7aW5mb3MuaG9tZXBhZ2V9XHJcbiAgICAgICAgZG9jdW1lbnRhdGlvbjogJHtpbmZvcy5kb2N1bWVudGF0aW9ufVxyXG4gICAgICAgIGlzc3VlczogJHtpbmZvcy5idWdzLnVybH1cclxuICAgIGBcclxuKTtcclxuLyoqXHJcbiogRm9jdXMgbGlicmFyeS5cclxuKiBUaGlzIGZpbGUgcmVxdWlyZXMgYWxsIHN1Ym1vZHVsZXMuXHJcbiogQHR5cGUge09iamVjdH1cclxuKi9cclxubW9kdWxlLmV4cG9ydHMgPSB7XHJcbiAgICBhcHBsaWNhdGlvbjogcmVxdWlyZSgnLi9hcHBsaWNhdGlvbicpLFxyXG4gICAgaGlzdG9yeTogcmVxdWlyZSgnLi9oaXN0b3J5JyksXHJcbiAgICBjb21wb25lbnQ6IHJlcXVpcmUoJy4vY29tcG9uZW50JyksXHJcbiAgICBkZWZpbml0aW9uOiByZXF1aXJlKCcuL2RlZmluaXRpb24nKSxcclxuICAgIGRpc3BhdGNoZXI6IHJlcXVpcmUoJy4vZGlzcGF0Y2hlcicpLFxyXG4gICAgbGlzdDogcmVxdWlyZSgnLi9saXN0JyksXHJcbiAgICBleGNlcHRpb246IHJlcXVpcmUoJy4vZXhjZXB0aW9uJyksXHJcbiAgICBuZXR3b3JrOiByZXF1aXJlKCcuL25ldHdvcmsnKSxcclxuICAgIHJvdXRlcjogcmVxdWlyZSgnLi9yb3V0ZXInKSxcclxuICAgIHJlZmVyZW5jZTogcmVxdWlyZSgnLi9yZWZlcmVuY2UnKSxcclxuICAgIHNlYXJjaDogcmVxdWlyZSgnLi9zZWFyY2gnKSxcclxuICAgIHNpdGVEZXNjcmlwdGlvbjogcmVxdWlyZSgnLi9zaXRlLWRlc2NyaXB0aW9uJyksXHJcbiAgICBzdG9yZTogcmVxdWlyZSgnLi9zdG9yZScpLFxyXG4gICAgdXRpbDogcmVxdWlyZSgnLi91dGlsJyksXHJcbiAgICB1c2VyOiByZXF1aXJlKCcuL3VzZXInKSxcclxuICAgIHRyYW5zbGF0aW9uOiByZXF1aXJlKCcuL3RyYW5zbGF0aW9uJyksXHJcbiAgICBtZXNzYWdlOiByZXF1aXJlKCcuL21lc3NhZ2UnKSxcclxuICAgIFZFUlNJT046IGluZm9zLnZlcnNpb24sXHJcbiAgICBBVVRIT1I6IGluZm9zLmF1dGhvcixcclxuICAgIERPQ1VNRU5UQVRJT04oKXtcclxuICAgICAgICBjb25zb2xlLmxvZyhgZG9jdW1lbnRhdGlvbjogJHtpbmZvcy5kb2N1bWVudGF0aW9ufWApO1xyXG4gICAgICAgIGNvbnNvbGUubG9nKGByZXBvc2l0b3J5OiAke2luZm9zLnJlcG9zaXRvcnkudXJsfWApO1xyXG4gICAgICAgIGNvbnNvbGUubG9nKGBpc3N1ZXM6ICR7aW5mb3MuYnVncy51cmx9YCk7XHJcbiAgICB9XHJcbn07XHJcbiJdfQ== \ No newline at end of file diff --git a/src/reference/builder.js b/src/reference/builder.js index 8cc6238..9675911 100755 --- a/src/reference/builder.js +++ b/src/reference/builder.js @@ -48,7 +48,7 @@ function loadList(listDesc) { * @param {string} listName - The name of the list to load. * @param {object} args - Argument to provide to the function. */ -function loadListByName(listName, args, skipCache) { +function loadListByName(listName, args, skipCache = false) { checkIsString('listName', listName); const configurationElement = getElement(listName); if (typeof configurationElement !== `function`) { @@ -70,7 +70,7 @@ function loadListByName(listName, args, skipCache) { //Load many lists by their names. `refHelper.loadMany(['list1', 'list2']).then(success, error)` // Return an array of many promises for all the given lists. // Be carefull, if there is a problem for one list, the error callback is called. -function loadMany(names, skipCache) { +function loadMany(names, skipCache = false) { if(names === undefined){ return []; } diff --git a/src/reference/built-in-action.js b/src/reference/built-in-action.js index 5e399f0..c440f7c 100644 --- a/src/reference/built-in-action.js +++ b/src/reference/built-in-action.js @@ -6,7 +6,7 @@ var dispatcher = require('../dispatcher'); * @param {array} referenceNames - An array which contains the name of all the references to load. * @returns {Promise} - The promise of loading all the references. */ -function builtInReferenceAction(referenceNames, skipCache) { +function builtInReferenceAction(referenceNames, skipCache = false) { return () => { if(!referenceNames) { return undefined; From a997815aaa2a6d67c097a806d0aac5c5b240df56 Mon Sep 17 00:00:00 2001 From: GuenoleK Date: Tue, 13 Dec 2016 18:08:47 +0100 Subject: [PATCH 06/13] Seen with @hartorn giving a null value by default as it was given previously. --- src/application/action-builder.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/application/action-builder.js b/src/application/action-builder.js index 82f02dc..563d275 100644 --- a/src/application/action-builder.js +++ b/src/application/action-builder.js @@ -56,7 +56,7 @@ function _dispatchFieldErrors({node, callerId}, errorResult){ const data = {}; if(isMultiNode){ node.forEach((nd) => { - data[nd] = (errorResult || {})[nd]; + data[nd] = (errorResult || {})[nd] || null; }); } else { data[node] = errorResult; From 8324d12fcc4e4ce1c4db6ca5e61f6913f4ab2c50 Mon Sep 17 00:00:00 2001 From: GuenoleK Date: Tue, 13 Dec 2016 18:25:29 +0100 Subject: [PATCH 07/13] Updating .gitignore to not see some files and directories --- .gitignore | 1 + index.js | 39 --------------------------------------- 2 files changed, 1 insertion(+), 39 deletions(-) delete mode 100644 index.js diff --git a/.gitignore b/.gitignore index f9a232e..73b849f 100644 --- a/.gitignore +++ b/.gitignore @@ -18,3 +18,4 @@ dist /translation /user /util +index.js diff --git a/index.js b/index.js deleted file mode 100644 index db5c350..0000000 --- a/index.js +++ /dev/null @@ -1,39 +0,0 @@ -'use strict'; - -//http://www.ascii-fr.com/Generateur-de-texte.html - -var infos = require(__PACKAGE_JSON_PATH__ + '/package.json'); - -console.log('\n FOCUS CORE\n\n version: ' + infos.version + '\n focus: ' + infos.homepage + '\n documentation: ' + infos.documentation + '\n issues: ' + infos.bugs.url + '\n '); -/** -* Focus library. -* This file requires all submodules. -* @type {Object} -*/ -module.exports = { - application: require('./application'), - history: require('./history'), - component: require('./component'), - definition: require('./definition'), - dispatcher: require('./dispatcher'), - list: require('./list'), - exception: require('./exception'), - network: require('./network'), - router: require('./router'), - reference: require('./reference'), - search: require('./search'), - siteDescription: require('./site-description'), - store: require('./store'), - util: require('./util'), - user: require('./user'), - translation: require('./translation'), - message: require('./message'), - VERSION: infos.version, - AUTHOR: infos.author, - DOCUMENTATION: function DOCUMENTATION() { - console.log('documentation: ' + infos.documentation); - console.log('repository: ' + infos.repository.url); - console.log('issues: ' + infos.bugs.url); - } -}; -//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbInByb2Nlc3Nvci5qcyJdLCJuYW1lcyI6WyJpbmZvcyIsInJlcXVpcmUiLCJfX1BBQ0tBR0VfSlNPTl9QQVRIX18iLCJjb25zb2xlIiwibG9nIiwidmVyc2lvbiIsImhvbWVwYWdlIiwiZG9jdW1lbnRhdGlvbiIsImJ1Z3MiLCJ1cmwiLCJtb2R1bGUiLCJleHBvcnRzIiwiYXBwbGljYXRpb24iLCJoaXN0b3J5IiwiY29tcG9uZW50IiwiZGVmaW5pdGlvbiIsImRpc3BhdGNoZXIiLCJsaXN0IiwiZXhjZXB0aW9uIiwibmV0d29yayIsInJvdXRlciIsInJlZmVyZW5jZSIsInNlYXJjaCIsInNpdGVEZXNjcmlwdGlvbiIsInN0b3JlIiwidXRpbCIsInVzZXIiLCJ0cmFuc2xhdGlvbiIsIm1lc3NhZ2UiLCJWRVJTSU9OIiwiQVVUSE9SIiwiYXV0aG9yIiwiRE9DVU1FTlRBVElPTiIsInJlcG9zaXRvcnkiXSwibWFwcGluZ3MiOiI7O0FBQUE7O0FBRUEsSUFBTUEsUUFBUUMsUUFBV0MscUJBQVgsbUJBQWQ7O0FBRUFDLFFBQVFDLEdBQVIsK0NBSW1CSixNQUFNSyxPQUp6Qix5QkFLaUJMLE1BQU1NLFFBTHZCLGlDQU15Qk4sTUFBTU8sYUFOL0IsMEJBT2tCUCxNQUFNUSxJQUFOLENBQVdDLEdBUDdCO0FBVUE7Ozs7O0FBS0FDLE9BQU9DLE9BQVAsR0FBaUI7QUFDYkMsaUJBQWFYLFFBQVEsZUFBUixDQURBO0FBRWJZLGFBQVNaLFFBQVEsV0FBUixDQUZJO0FBR2JhLGVBQVdiLFFBQVEsYUFBUixDQUhFO0FBSWJjLGdCQUFZZCxRQUFRLGNBQVIsQ0FKQztBQUtiZSxnQkFBWWYsUUFBUSxjQUFSLENBTEM7QUFNYmdCLFVBQU1oQixRQUFRLFFBQVIsQ0FOTztBQU9iaUIsZUFBV2pCLFFBQVEsYUFBUixDQVBFO0FBUWJrQixhQUFTbEIsUUFBUSxXQUFSLENBUkk7QUFTYm1CLFlBQVFuQixRQUFRLFVBQVIsQ0FUSztBQVVib0IsZUFBV3BCLFFBQVEsYUFBUixDQVZFO0FBV2JxQixZQUFRckIsUUFBUSxVQUFSLENBWEs7QUFZYnNCLHFCQUFpQnRCLFFBQVEsb0JBQVIsQ0FaSjtBQWFidUIsV0FBT3ZCLFFBQVEsU0FBUixDQWJNO0FBY2J3QixVQUFNeEIsUUFBUSxRQUFSLENBZE87QUFlYnlCLFVBQU16QixRQUFRLFFBQVIsQ0FmTztBQWdCYjBCLGlCQUFhMUIsUUFBUSxlQUFSLENBaEJBO0FBaUJiMkIsYUFBUzNCLFFBQVEsV0FBUixDQWpCSTtBQWtCYjRCLGFBQVM3QixNQUFNSyxPQWxCRjtBQW1CYnlCLFlBQVE5QixNQUFNK0IsTUFuQkQ7QUFvQmJDLGlCQXBCYSwyQkFvQkU7QUFDWDdCLGdCQUFRQyxHQUFSLHFCQUE4QkosTUFBTU8sYUFBcEM7QUFDQUosZ0JBQVFDLEdBQVIsa0JBQTJCSixNQUFNaUMsVUFBTixDQUFpQnhCLEdBQTVDO0FBQ0FOLGdCQUFRQyxHQUFSLGNBQXVCSixNQUFNUSxJQUFOLENBQVdDLEdBQWxDO0FBQ0g7QUF4QlksQ0FBakIiLCJmaWxlIjoicHJvY2Vzc29yLmpzIiwic291cmNlc0NvbnRlbnQiOlsiLy9odHRwOi8vd3d3LmFzY2lpLWZyLmNvbS9HZW5lcmF0ZXVyLWRlLXRleHRlLmh0bWxcclxuXHJcbmNvbnN0IGluZm9zID0gcmVxdWlyZShgJHtfX1BBQ0tBR0VfSlNPTl9QQVRIX199L3BhY2thZ2UuanNvbmApO1xyXG5cclxuY29uc29sZS5sb2coXHJcbiAgICBgXHJcbiAgICAgICAgRk9DVVMgQ09SRVxyXG5cclxuICAgICAgICB2ZXJzaW9uOiAke2luZm9zLnZlcnNpb259XHJcbiAgICAgICAgZm9jdXM6ICR7aW5mb3MuaG9tZXBhZ2V9XHJcbiAgICAgICAgZG9jdW1lbnRhdGlvbjogJHtpbmZvcy5kb2N1bWVudGF0aW9ufVxyXG4gICAgICAgIGlzc3VlczogJHtpbmZvcy5idWdzLnVybH1cclxuICAgIGBcclxuKTtcclxuLyoqXHJcbiogRm9jdXMgbGlicmFyeS5cclxuKiBUaGlzIGZpbGUgcmVxdWlyZXMgYWxsIHN1Ym1vZHVsZXMuXHJcbiogQHR5cGUge09iamVjdH1cclxuKi9cclxubW9kdWxlLmV4cG9ydHMgPSB7XHJcbiAgICBhcHBsaWNhdGlvbjogcmVxdWlyZSgnLi9hcHBsaWNhdGlvbicpLFxyXG4gICAgaGlzdG9yeTogcmVxdWlyZSgnLi9oaXN0b3J5JyksXHJcbiAgICBjb21wb25lbnQ6IHJlcXVpcmUoJy4vY29tcG9uZW50JyksXHJcbiAgICBkZWZpbml0aW9uOiByZXF1aXJlKCcuL2RlZmluaXRpb24nKSxcclxuICAgIGRpc3BhdGNoZXI6IHJlcXVpcmUoJy4vZGlzcGF0Y2hlcicpLFxyXG4gICAgbGlzdDogcmVxdWlyZSgnLi9saXN0JyksXHJcbiAgICBleGNlcHRpb246IHJlcXVpcmUoJy4vZXhjZXB0aW9uJyksXHJcbiAgICBuZXR3b3JrOiByZXF1aXJlKCcuL25ldHdvcmsnKSxcclxuICAgIHJvdXRlcjogcmVxdWlyZSgnLi9yb3V0ZXInKSxcclxuICAgIHJlZmVyZW5jZTogcmVxdWlyZSgnLi9yZWZlcmVuY2UnKSxcclxuICAgIHNlYXJjaDogcmVxdWlyZSgnLi9zZWFyY2gnKSxcclxuICAgIHNpdGVEZXNjcmlwdGlvbjogcmVxdWlyZSgnLi9zaXRlLWRlc2NyaXB0aW9uJyksXHJcbiAgICBzdG9yZTogcmVxdWlyZSgnLi9zdG9yZScpLFxyXG4gICAgdXRpbDogcmVxdWlyZSgnLi91dGlsJyksXHJcbiAgICB1c2VyOiByZXF1aXJlKCcuL3VzZXInKSxcclxuICAgIHRyYW5zbGF0aW9uOiByZXF1aXJlKCcuL3RyYW5zbGF0aW9uJyksXHJcbiAgICBtZXNzYWdlOiByZXF1aXJlKCcuL21lc3NhZ2UnKSxcclxuICAgIFZFUlNJT046IGluZm9zLnZlcnNpb24sXHJcbiAgICBBVVRIT1I6IGluZm9zLmF1dGhvcixcclxuICAgIERPQ1VNRU5UQVRJT04oKXtcclxuICAgICAgICBjb25zb2xlLmxvZyhgZG9jdW1lbnRhdGlvbjogJHtpbmZvcy5kb2N1bWVudGF0aW9ufWApO1xyXG4gICAgICAgIGNvbnNvbGUubG9nKGByZXBvc2l0b3J5OiAke2luZm9zLnJlcG9zaXRvcnkudXJsfWApO1xyXG4gICAgICAgIGNvbnNvbGUubG9nKGBpc3N1ZXM6ICR7aW5mb3MuYnVncy51cmx9YCk7XHJcbiAgICB9XHJcbn07XHJcbiJdfQ== \ No newline at end of file From d4f8ac4e311b70f576287a304e2444396a852632 Mon Sep 17 00:00:00 2001 From: GuenoleK Date: Tue, 13 Dec 2016 15:55:18 +0100 Subject: [PATCH 08/13] From 2.0.0 to 2.1.0 --- package.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/package.json b/package.json index 8994a6a..48fbac1 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "focus-core", - "version": "2.0.0", + "version": "2.1.0", "description": "Focus library core part.", "main": "index.js", "babel": { From 2e884c74ebdeac50341d6cde593f936165cc829a Mon Sep 17 00:00:00 2001 From: GuenoleK Date: Tue, 13 Dec 2016 15:59:56 +0100 Subject: [PATCH 09/13] version 2.1.0-rc1 --- package.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/package.json b/package.json index 48fbac1..a90576f 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "focus-core", - "version": "2.1.0", + "version": "2.1.0-rc1", "description": "Focus library core part.", "main": "index.js", "babel": { From 4861b0749fcbcc7728fe6b3e77db4f086ccfe2fd Mon Sep 17 00:00:00 2001 From: GuenoleK Date: Tue, 13 Dec 2016 18:53:44 +0100 Subject: [PATCH 10/13] From 2.1.0-rc1 to rc2 --- package.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/package.json b/package.json index a90576f..9916a78 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "focus-core", - "version": "2.1.0-rc1", + "version": "2.1.0-rc2", "description": "Focus library core part.", "main": "index.js", "babel": { From e6b8c730079f669ace1f5def9378ffafaa5b1687 Mon Sep 17 00:00:00 2001 From: GuenoleK Date: Wed, 14 Dec 2016 17:44:16 +0100 Subject: [PATCH 11/13] From 2.1.0-rc2 to 2.1.0 stable --- package.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/package.json b/package.json index 9916a78..48fbac1 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "focus-core", - "version": "2.1.0-rc2", + "version": "2.1.0", "description": "Focus library core part.", "main": "index.js", "babel": { From 3cf98ef55e542674b93727c2159c9d3356e0fa26 Mon Sep 17 00:00:00 2001 From: GuenoleK Date: Wed, 14 Dec 2016 17:55:02 +0100 Subject: [PATCH 12/13] 2.1.1 --- package.json | 226 +++++++++++++++++++++++++-------------------------- 1 file changed, 113 insertions(+), 113 deletions(-) diff --git a/package.json b/package.json index 48fbac1..f545d78 100644 --- a/package.json +++ b/package.json @@ -1,119 +1,119 @@ { - "name": "focus-core", - "version": "2.1.0", - "description": "Focus library core part.", - "main": "index.js", - "babel": { - "presets": [ - "stage-0", - "react", - "es2015" - ], - "plugins": [ - "transform-class-properties", - "transform-decorators-legacy", - "add-module-exports", - "transform-proto-to-assign", - [ - "transform-es2015-classes", - { - "loose": true - } - ] - ] - }, - "repository": { - "type": "git", - "url": "https://github.com/KleeGroup/focus-core.git" - }, - "keywords": [ - "spa", - "react", - "es6" + "name": "focus-core", + "version": "2.1.1", + "description": "Focus library core part.", + "main": "index.js", + "babel": { + "presets": [ + "stage-0", + "react", + "es2015" ], - "author": "focus@kleegroup.com", - "documentation": "http://kleegroup.github.io/focus-docs/", - "license": "MIT", - "homepage": "https://github.com/KleeGroup/focus-core", - "bugs": { - "url": "https://github.com/KleeGroup/focus-core/issues" - }, - "scripts": { - "babelify": "better-npm-run babelify", - "bundle": "better-npm-run bundle", - "test": "mocha src/**/__tests__/**/*.js", - "test:watch": "mocha src/**/__tests__/**/*.js -w", - "build": "better-npm-run babelify && better-npm-run bundle" - }, - "betterScripts": { - "babelify": { - "command": "node scripts/babelify.js" - }, - "bundle": { - "command": "webpack --progress", - "env": { - "DEV": false, - "NODE_ENV": "production", - "LIBRARY_NAME": "FocusCore", - "MINIMIFY": false, - "PACKAGE_JSON_PATH": "../" - } + "plugins": [ + "transform-class-properties", + "transform-decorators-legacy", + "add-module-exports", + "transform-proto-to-assign", + [ + "transform-es2015-classes", + { + "loose": true } + ] + ] + }, + "repository": { + "type": "git", + "url": "https://github.com/KleeGroup/focus-core.git" + }, + "keywords": [ + "spa", + "react", + "es6" + ], + "author": "focus@kleegroup.com", + "documentation": "http://kleegroup.github.io/focus-docs/", + "license": "MIT", + "homepage": "https://github.com/KleeGroup/focus-core", + "bugs": { + "url": "https://github.com/KleeGroup/focus-core/issues" + }, + "scripts": { + "babelify": "better-npm-run babelify", + "bundle": "better-npm-run bundle", + "test": "mocha src/**/__tests__/**/*.js", + "test:watch": "mocha src/**/__tests__/**/*.js -w", + "build": "better-npm-run babelify && better-npm-run bundle" + }, + "betterScripts": { + "babelify": { + "command": "node scripts/babelify.js" }, - "dependencies": { - "@types/flux": "^0.0.30", - "@types/node": "^6.0.38", - "flux": "^2.0.3", - "i18next-client": "^1.11.4", - "immutable": "^3.7.3", - "keymirror": "^0.1.1", - "lodash": "^3.9.1", - "object-assign": "^2.0.0", - "uuid": "^2.0.1" - }, - "devDependencies": { - "babel": "^6.3.26", - "babel-cli": "^6.4.0", - "babel-core": "^6.4.0", - "babel-eslint": "4.1.3", - "babel-loader": "^6.2.1", - "babel-plugin-add-module-exports": "^0.1.2", - "babel-plugin-runtime": "^1.0.7", - "babel-plugin-transform-class-properties": "^6.4.0", - "babel-plugin-transform-decorators-legacy": "^1.3.4", - "babel-plugin-transform-es2015-classes": "^6.5.2", - "babel-plugin-transform-proto-to-assign": "^6.5.0", - "babel-preset-es2015": "^6.3.13", - "babel-preset-react": "^6.3.13", - "babel-preset-stage-0": "^6.3.13", - "babel-runtime": "^6.3.19", - "better-npm-run": "0.0.5", - "chai": "^3.2.0", - "chai-subset": "^1.1.0", - "css-loader": "^0.19.0", - "eslint": "1.5.1", - "eslint-config-focus": "0.3.0", - "eslint-plugin-filenames": "0.1.1", - "eslint-plugin-react": "3.5.0", - "express": "^4.12.2", - "extract-text-webpack-plugin": "^0.8.2", - "file-loader": "^0.8.4", - "jquery": "^2.1.4", - "json-loader": "^0.5.3", - "mocha": "^2.3.2", - "moment": "^2.10.6", - "node-sass": "^3.3.3", - "numeral": "^1.5.3", - "react": "^15.2.1", - "react-addons-test-utils": "^15.2.1", - "react-dom": "^15.2.1", - "react-hot-loader": "^1.3.0", - "sass-loader": "^3.0.0", - "source-map-loader": "^0.1.5", - "style-loader": "^0.12.4", - "url-loader": "^0.5.6", - "webpack": "^1.12.2", - "webpack-dev-server": "^1.11.0", - "webpack-focus": "^0.11.0" + "bundle": { + "command": "webpack --progress", + "env": { + "DEV": false, + "NODE_ENV": "production", + "LIBRARY_NAME": "FocusCore", + "MINIMIFY": false, + "PACKAGE_JSON_PATH": "../" + } } + }, + "dependencies": { + "@types/flux": "^0.0.30", + "@types/node": "^6.0.38", + "flux": "^2.0.3", + "i18next-client": "^1.11.4", + "immutable": "^3.7.3", + "keymirror": "^0.1.1", + "lodash": "^3.9.1", + "object-assign": "^2.0.0", + "uuid": "^2.0.1" + }, + "devDependencies": { + "babel": "^6.3.26", + "babel-cli": "^6.4.0", + "babel-core": "^6.4.0", + "babel-eslint": "4.1.3", + "babel-loader": "^6.2.1", + "babel-plugin-add-module-exports": "^0.1.2", + "babel-plugin-runtime": "^1.0.7", + "babel-plugin-transform-class-properties": "^6.4.0", + "babel-plugin-transform-decorators-legacy": "^1.3.4", + "babel-plugin-transform-es2015-classes": "^6.5.2", + "babel-plugin-transform-proto-to-assign": "^6.5.0", + "babel-preset-es2015": "^6.3.13", + "babel-preset-react": "^6.3.13", + "babel-preset-stage-0": "^6.3.13", + "babel-runtime": "^6.3.19", + "better-npm-run": "0.0.5", + "chai": "^3.2.0", + "chai-subset": "^1.1.0", + "css-loader": "^0.19.0", + "eslint": "1.5.1", + "eslint-config-focus": "0.3.0", + "eslint-plugin-filenames": "0.1.1", + "eslint-plugin-react": "3.5.0", + "express": "^4.12.2", + "extract-text-webpack-plugin": "^0.8.2", + "file-loader": "^0.8.4", + "jquery": "^2.1.4", + "json-loader": "^0.5.3", + "mocha": "^2.3.2", + "moment": "^2.10.6", + "node-sass": "^3.3.3", + "numeral": "^1.5.3", + "react": "^15.2.1", + "react-addons-test-utils": "^15.2.1", + "react-dom": "^15.2.1", + "react-hot-loader": "^1.3.0", + "sass-loader": "^3.0.0", + "source-map-loader": "^0.1.5", + "style-loader": "^0.12.4", + "url-loader": "^0.5.6", + "webpack": "^1.12.2", + "webpack-dev-server": "^1.11.0", + "webpack-focus": "^0.11.0" + } } From 8690470f72d306ffc18bdad18276105119654015 Mon Sep 17 00:00:00 2001 From: GuenoleK Date: Wed, 14 Dec 2016 17:59:42 +0100 Subject: [PATCH 13/13] v2.1.1 --- package.json | 226 +++++++++++++++++++++++++-------------------------- 1 file changed, 113 insertions(+), 113 deletions(-) diff --git a/package.json b/package.json index f545d78..e6d6683 100644 --- a/package.json +++ b/package.json @@ -1,119 +1,119 @@ { - "name": "focus-core", - "version": "2.1.1", - "description": "Focus library core part.", - "main": "index.js", - "babel": { - "presets": [ - "stage-0", - "react", - "es2015" + "name": "focus-core", + "version": "2.1.1", + "description": "Focus library core part.", + "main": "index.js", + "babel": { + "presets": [ + "stage-0", + "react", + "es2015" + ], + "plugins": [ + "transform-class-properties", + "transform-decorators-legacy", + "add-module-exports", + "transform-proto-to-assign", + [ + "transform-es2015-classes", + { + "loose": true + } + ] + ] + }, + "repository": { + "type": "git", + "url": "https://github.com/KleeGroup/focus-core.git" + }, + "keywords": [ + "spa", + "react", + "es6" ], - "plugins": [ - "transform-class-properties", - "transform-decorators-legacy", - "add-module-exports", - "transform-proto-to-assign", - [ - "transform-es2015-classes", - { - "loose": true + "author": "focus@kleegroup.com", + "documentation": "http://kleegroup.github.io/focus-docs/", + "license": "MIT", + "homepage": "https://github.com/KleeGroup/focus-core", + "bugs": { + "url": "https://github.com/KleeGroup/focus-core/issues" + }, + "scripts": { + "babelify": "better-npm-run babelify", + "bundle": "better-npm-run bundle", + "test": "mocha src/**/__tests__/**/*.js", + "test:watch": "mocha src/**/__tests__/**/*.js -w", + "build": "better-npm-run babelify && better-npm-run bundle" + }, + "betterScripts": { + "babelify": { + "command": "node scripts/babelify.js" + }, + "bundle": { + "command": "webpack --progress", + "env": { + "DEV": false, + "NODE_ENV": "production", + "LIBRARY_NAME": "FocusCore", + "MINIMIFY": false, + "PACKAGE_JSON_PATH": "../" + } } - ] - ] - }, - "repository": { - "type": "git", - "url": "https://github.com/KleeGroup/focus-core.git" - }, - "keywords": [ - "spa", - "react", - "es6" - ], - "author": "focus@kleegroup.com", - "documentation": "http://kleegroup.github.io/focus-docs/", - "license": "MIT", - "homepage": "https://github.com/KleeGroup/focus-core", - "bugs": { - "url": "https://github.com/KleeGroup/focus-core/issues" - }, - "scripts": { - "babelify": "better-npm-run babelify", - "bundle": "better-npm-run bundle", - "test": "mocha src/**/__tests__/**/*.js", - "test:watch": "mocha src/**/__tests__/**/*.js -w", - "build": "better-npm-run babelify && better-npm-run bundle" - }, - "betterScripts": { - "babelify": { - "command": "node scripts/babelify.js" }, - "bundle": { - "command": "webpack --progress", - "env": { - "DEV": false, - "NODE_ENV": "production", - "LIBRARY_NAME": "FocusCore", - "MINIMIFY": false, - "PACKAGE_JSON_PATH": "../" - } + "dependencies": { + "@types/flux": "^0.0.30", + "@types/node": "^6.0.38", + "flux": "^2.0.3", + "i18next-client": "^1.11.4", + "immutable": "^3.7.3", + "keymirror": "^0.1.1", + "lodash": "^3.9.1", + "object-assign": "^2.0.0", + "uuid": "^2.0.1" + }, + "devDependencies": { + "babel": "^6.3.26", + "babel-cli": "^6.4.0", + "babel-core": "^6.4.0", + "babel-eslint": "4.1.3", + "babel-loader": "^6.2.1", + "babel-plugin-add-module-exports": "^0.1.2", + "babel-plugin-runtime": "^1.0.7", + "babel-plugin-transform-class-properties": "^6.4.0", + "babel-plugin-transform-decorators-legacy": "^1.3.4", + "babel-plugin-transform-es2015-classes": "^6.5.2", + "babel-plugin-transform-proto-to-assign": "^6.5.0", + "babel-preset-es2015": "^6.3.13", + "babel-preset-react": "^6.3.13", + "babel-preset-stage-0": "^6.3.13", + "babel-runtime": "^6.3.19", + "better-npm-run": "0.0.5", + "chai": "^3.2.0", + "chai-subset": "^1.1.0", + "css-loader": "^0.19.0", + "eslint": "1.5.1", + "eslint-config-focus": "0.3.0", + "eslint-plugin-filenames": "0.1.1", + "eslint-plugin-react": "3.5.0", + "express": "^4.12.2", + "extract-text-webpack-plugin": "^0.8.2", + "file-loader": "^0.8.4", + "jquery": "^2.1.4", + "json-loader": "^0.5.3", + "mocha": "^2.3.2", + "moment": "^2.10.6", + "node-sass": "^3.3.3", + "numeral": "^1.5.3", + "react": "^15.2.1", + "react-addons-test-utils": "^15.2.1", + "react-dom": "^15.2.1", + "react-hot-loader": "^1.3.0", + "sass-loader": "^3.0.0", + "source-map-loader": "^0.1.5", + "style-loader": "^0.12.4", + "url-loader": "^0.5.6", + "webpack": "^1.12.2", + "webpack-dev-server": "^1.11.0", + "webpack-focus": "^0.11.0" } - }, - "dependencies": { - "@types/flux": "^0.0.30", - "@types/node": "^6.0.38", - "flux": "^2.0.3", - "i18next-client": "^1.11.4", - "immutable": "^3.7.3", - "keymirror": "^0.1.1", - "lodash": "^3.9.1", - "object-assign": "^2.0.0", - "uuid": "^2.0.1" - }, - "devDependencies": { - "babel": "^6.3.26", - "babel-cli": "^6.4.0", - "babel-core": "^6.4.0", - "babel-eslint": "4.1.3", - "babel-loader": "^6.2.1", - "babel-plugin-add-module-exports": "^0.1.2", - "babel-plugin-runtime": "^1.0.7", - "babel-plugin-transform-class-properties": "^6.4.0", - "babel-plugin-transform-decorators-legacy": "^1.3.4", - "babel-plugin-transform-es2015-classes": "^6.5.2", - "babel-plugin-transform-proto-to-assign": "^6.5.0", - "babel-preset-es2015": "^6.3.13", - "babel-preset-react": "^6.3.13", - "babel-preset-stage-0": "^6.3.13", - "babel-runtime": "^6.3.19", - "better-npm-run": "0.0.5", - "chai": "^3.2.0", - "chai-subset": "^1.1.0", - "css-loader": "^0.19.0", - "eslint": "1.5.1", - "eslint-config-focus": "0.3.0", - "eslint-plugin-filenames": "0.1.1", - "eslint-plugin-react": "3.5.0", - "express": "^4.12.2", - "extract-text-webpack-plugin": "^0.8.2", - "file-loader": "^0.8.4", - "jquery": "^2.1.4", - "json-loader": "^0.5.3", - "mocha": "^2.3.2", - "moment": "^2.10.6", - "node-sass": "^3.3.3", - "numeral": "^1.5.3", - "react": "^15.2.1", - "react-addons-test-utils": "^15.2.1", - "react-dom": "^15.2.1", - "react-hot-loader": "^1.3.0", - "sass-loader": "^3.0.0", - "source-map-loader": "^0.1.5", - "style-loader": "^0.12.4", - "url-loader": "^0.5.6", - "webpack": "^1.12.2", - "webpack-dev-server": "^1.11.0", - "webpack-focus": "^0.11.0" - } }