fable 3.0.32 → 3.0.34

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (53) hide show
  1. package/.config/configstore/update-notifier-npm.json +1 -1
  2. package/.config/retold-harness/MySQL-Laden-Entry.sh +17 -0
  3. package/.config/retold-harness/MySQL-Security.sql +5 -0
  4. package/.config/retold-harness/bookstore-api-endpoint-exercises.paw +0 -0
  5. package/.config/retold-harness/bookstore-configuration.json +28 -0
  6. package/.config/retold-harness/bookstore-import-books-run.js +1 -0
  7. package/.config/retold-harness/bookstore-import-books.js +214 -0
  8. package/.config/retold-harness/bookstore-serve-meadow-endpoint-apis-IPC.js +137 -0
  9. package/.config/retold-harness/bookstore-serve-meadow-endpoint-apis.js +128 -0
  10. package/.config/retold-harness/data/books.csv +10001 -0
  11. package/.config/retold-harness/model/ddl/BookStore.ddl +66 -0
  12. package/.config/retold-harness/model/generated_diagram/README.md +1 -0
  13. package/.config/retold-harness/model/generated_diagram/Stricture_Output.dot +13 -0
  14. package/.config/retold-harness/model/generated_diagram/Stricture_Output.png +0 -0
  15. package/.config/retold-harness/model/generated_documentation/Dictionary.md +18 -0
  16. package/.config/retold-harness/model/generated_documentation/Model-Author.md +20 -0
  17. package/.config/retold-harness/model/generated_documentation/Model-Book.md +26 -0
  18. package/.config/retold-harness/model/generated_documentation/Model-BookAuthorJoin.md +14 -0
  19. package/.config/retold-harness/model/generated_documentation/Model-BookPrice.md +25 -0
  20. package/.config/retold-harness/model/generated_documentation/Model-Review.md +22 -0
  21. package/.config/retold-harness/model/generated_documentation/ModelChangeTracking.md +17 -0
  22. package/.config/retold-harness/model/generated_documentation/README.md +1 -0
  23. package/.config/retold-harness/model/json_schema/BookStore-Extended.json +915 -0
  24. package/.config/retold-harness/model/json_schema/BookStore-PICT.json +1 -0
  25. package/.config/retold-harness/model/json_schema/BookStore.json +280 -0
  26. package/.config/retold-harness/model/json_schema/README.md +1 -0
  27. package/.config/retold-harness/model/manual_scripts/DropTables.sql +5 -0
  28. package/.config/retold-harness/model/manual_scripts/README.md +2 -0
  29. package/.config/retold-harness/model/meadow_schema/BookStore-MeadowSchema-Author.json +220 -0
  30. package/.config/retold-harness/model/meadow_schema/BookStore-MeadowSchema-Book.json +268 -0
  31. package/.config/retold-harness/model/meadow_schema/BookStore-MeadowSchema-BookAuthorJoin.json +172 -0
  32. package/.config/retold-harness/model/meadow_schema/BookStore-MeadowSchema-BookPrice.json +260 -0
  33. package/.config/retold-harness/model/meadow_schema/BookStore-MeadowSchema-Review.json +236 -0
  34. package/.config/retold-harness/model/meadow_schema/README.md +1 -0
  35. package/.config/retold-harness/model/sql_create/BookStore-CreateDatabase.mysql.sql +116 -0
  36. package/.config/retold-harness/model/sql_create/README.md +1 -0
  37. package/.config/retold-harness/package.json +19 -0
  38. package/.config/retold-harness/test_old/Tests.js +3243 -0
  39. package/.config/retold-harness/test_old/untitled.js +88 -0
  40. package/.config/vscode-sqltools/runningInfo.json +13 -0
  41. package/.vscode/settings.json +17 -0
  42. package/Dockerfile_LUXURYCode +18 -0
  43. package/README.md +1 -1
  44. package/dist/fable.compatible.js +1 -11
  45. package/dist/fable.compatible.min.js +2 -78
  46. package/dist/fable.compatible.min.js.map +1 -1
  47. package/dist/fable.js +1 -11
  48. package/dist/fable.min.js +2 -70
  49. package/dist/fable.min.js.map +1 -1
  50. package/package.json +5 -5
  51. package/source/Fable-ServiceManager.js +0 -1
  52. package/source/Fable.js +5 -1
  53. package/source/services/Fable-Service-DataFormat.js +0 -1
@@ -0,0 +1,88 @@
1
+ /**
2
+ * Test Harness
3
+ *
4
+ * @license MIT
5
+ *
6
+ * @author Steven Velozo <steven@velozo.com>
7
+ */
8
+
9
+
10
+
11
+ ////////// Code can go here for easy debugging //////////
12
+
13
+
14
+ const tmpApplicationSettings = (
15
+ {
16
+ Product: 'MockEndpointServer',
17
+ ProductVersion: '0.0.0',
18
+
19
+ "UnauthorizedRequestDelay": 100,
20
+
21
+ APIServerPort: 8086,
22
+
23
+ MySQL:
24
+ {
25
+ // This is queued up for Travis defaults.
26
+ Server: "localhost",
27
+ Port: 3306,
28
+ User: "root",
29
+ Password: "123456789",
30
+ // Password: "",
31
+ Database: "FableTest",
32
+ ConnectionPoolLimit: 20
33
+ }
34
+ });
35
+
36
+ // Construct a fable.
37
+ const _Fable = new libFable(tmpApplicationSettings);
38
+ // Connect to SQL, put the connection in the magic location
39
+ _Fable.MeadowMySQLConnectionPool = libMySQL.createPool
40
+ (
41
+ {
42
+ connectionLimit: _Fable.settings.MySQL.ConnectionPoolLimit,
43
+ host: _Fable.settings.MySQL.Server,
44
+ port: _Fable.settings.MySQL.Port,
45
+ user: _Fable.settings.MySQL.User,
46
+ password: _Fable.settings.MySQL.Password,
47
+ database: _Fable.settings.MySQL.Database,
48
+ namedPlaceholders: true
49
+ }
50
+ );
51
+
52
+ // Load up a Meadow (pointing at the Animal database)
53
+ const _AnimalSchema = require('../test/Animal.json');
54
+ const _Meadow = libMeadow.new(_Fable, 'FableTest')
55
+ .setProvider('MySQL')
56
+ .setSchema(_AnimalSchema.Schema)
57
+ .setJsonSchema(_AnimalSchema.JsonSchema)
58
+ .setDefaultIdentifier(_AnimalSchema.DefaultIdentifier)
59
+ .setDefault(_AnimalSchema.DefaultObject);
60
+
61
+ // Instantiate the meadow endpoints with the DAL object constructed above
62
+ const _MeadowEndpoints = new libMeadowEndpoints(_Meadow);
63
+
64
+ // Instantiate the service server, using restify
65
+ const _Orator = new libOrator(_Fable, libOratorServiceServerRestify);
66
+ // Prepare the service server for mapping endpoints
67
+ _Orator.initializeServiceServer();
68
+
69
+ _MeadowEndpoints.controller.BehaviorInjection.setBehavior('Schema-PreOperation',
70
+ function (pRequest, pRequestState, fCallback)
71
+ {
72
+ this.log.info('I have access to state!', pRequestState);
73
+ return fCallback();
74
+ });
75
+
76
+ _MeadowEndpoints.controller.BehaviorInjection.setBehavior('Schema-PostOperation',
77
+ function (pRequest, pRequestState, fCallback)
78
+ {
79
+ pRequestState.JSONSchema.PLOT = `GODZILLA WILL EAT YOUR SOUL!`;
80
+ this.log.info('I can also mutate state before sending!', pRequestState);
81
+ return fCallback();
82
+ });
83
+
84
+ // Wire the endpoints up
85
+ _MeadowEndpoints.connectRoutes(_Orator.serviceServer);
86
+
87
+ // Now start the web server.
88
+ _Orator.startWebServer(_HarnessBehavior);
@@ -0,0 +1,13 @@
1
+ {
2
+ "numericVersion": 10000,
3
+ "releaseNotes": "https://vscode-sqltools.mteixeira.dev/changelog#v-1-0-0",
4
+ "run": 1683755329222,
5
+ "updated": false,
6
+ "version": "1.0.0",
7
+ "lastNotificationDate": 0,
8
+ "installedExtPlugins": {
9
+ "driver": [
10
+ "mtxr.sqltools-driver-mysql"
11
+ ]
12
+ }
13
+ }
@@ -0,0 +1,17 @@
1
+ {
2
+ "sqltools.connections": [
3
+ {
4
+ "mysqlOptions": {
5
+ "authProtocol": "default"
6
+ },
7
+ "previewLimit": 50,
8
+ "server": "localhost",
9
+ "port": 3306,
10
+ "driver": "MariaDB",
11
+ "name": "Local",
12
+ "database": "bookstore",
13
+ "password": "123456789",
14
+ "username": "root"
15
+ }
16
+ ]
17
+ }
@@ -8,6 +8,7 @@ VOLUME /home/coder/.vscode
8
8
  RUN echo "...installing debian dependencies..."
9
9
  RUN sudo apt update
10
10
  RUN sudo apt install vim curl tmux -y
11
+ RUN sudo apt install default-mysql-server default-mysql-client -y
11
12
 
12
13
  RUN echo "Building development image..."
13
14
 
@@ -27,6 +28,10 @@ RUN code-server --install-extension eamodio.gitlens
27
28
 
28
29
  # Other extensions (uncomment them to have them automagic, or run this from a terminal to install in the container):
29
30
 
31
+ # SQL Tools
32
+ RUN code-server --install-extension mtxr.sqltools
33
+ RUN code-server --install-extension mtxr.sqltools-driver-mysql
34
+
30
35
  # Microsoft's AI code completion
31
36
  # RUN code-server --install-extension VisualStudioExptTeam.vscodeintellicode
32
37
 
@@ -49,6 +54,17 @@ RUN code-server --install-extension eamodio.gitlens
49
54
  # An easy on the eyes color theme
50
55
  # RUN code-server --install-extension daylerees.rainglow
51
56
 
57
+ RUN echo "...configuring mariadb (mysql) server..."
58
+ RUN sudo sed -i "s|bind-address|#bind-address|g" /etc/mysql/mariadb.conf.d/50-server.cnf
59
+ ADD ./.config/retold-harness/MySQL-Security.sql /home/coder/MySQL-Configure-Security.sql
60
+ ADD ./.config/retold-harness/MySQL-Laden-Entry.sh /usr/bin/MySQL-Laden-Entry.sh
61
+ RUN ( sudo mysqld_safe --skip-grant-tables --skip-networking & ) && sleep 5 && mysql -u root < /home/coder/MySQL-Configure-Security.sql
62
+
63
+ # Import the initial database
64
+ COPY ./.config/retold-harness//model/sql_create/BookStore-CreateDatabase.mysql.sql /home/coder/MySQL-Create-Databases.sql
65
+ RUN sudo service mariadb restart && sleep 5 && mysql -u root -p"123456789" -e "CREATE DATABASE bookstore;"
66
+ RUN sudo service mariadb restart && sleep 5 && mysql -u root -p"123456789" bookstore < /home/coder/MySQL-Create-Databases.sql
67
+
52
68
  RUN echo "...mapping library specific volumes..."
53
69
 
54
70
  # Volume mapping for code
@@ -67,3 +83,5 @@ RUN . ~/.nvm/nvm.sh && source ~/.bashrc && nvm install 14
67
83
  RUN . ~/.nvm/nvm.sh && source ~/.bashrc && nvm alias default 14
68
84
 
69
85
  WORKDIR /home/coder/fable
86
+
87
+ ENTRYPOINT ["/usr/bin/MySQL-Laden-Entry.sh"]
package/README.md CHANGED
@@ -292,4 +292,4 @@ __Example__
292
292
  var uuid = fable.getUUID();
293
293
 
294
294
  // The uuid variable now contains a unique string.
295
- ```
295
+ ```
@@ -205,7 +205,6 @@ emitter.addEventListener(name,function wrapListener(arg){// IE does not have bui
205
205
  if(flags.once){emitter.removeEventListener(name,wrapListener);}listener(arg);});}else{throw new TypeError('The "emitter" argument must be of type EventEmitter. Received type '+_typeof(emitter));}}},{}],22:[function(require,module,exports){/**
206
206
  * Base Logger Class
207
207
  *
208
- * @license MIT
209
208
  *
210
209
  * @author Steven Velozo <steven@velozo.com>
211
210
  */var BaseLogger=/*#__PURE__*/function(){function BaseLogger(pLogStreamSettings,pFableLog){_classCallCheck2(this,BaseLogger);// This should not possibly be able to be instantiated without a settings object
@@ -222,7 +221,6 @@ var tmpRandomData=(tmpDate+Math.random()*16)%16|0;tmpDate=Math.floor(tmpDate/16)
222
221
  return true;}}]);return BaseLogger;}();module.exports=BaseLogger;},{}],23:[function(require,module,exports){/**
223
222
  * Default Logger Provider Function
224
223
  *
225
- * @license MIT
226
224
  *
227
225
  * @author Steven Velozo <steven@velozo.com>
228
226
  */ // Return the providers that are available without extensions loaded
@@ -259,20 +257,17 @@ function autoConstruct(pSettings){return new FableLog(pSettings);}module.exports
259
257
  * For a couple services, we need to be able to instantiate them before the Fable object is fully initialized.
260
258
  * This is a base class for those services.
261
259
  *
262
- * @license MIT
263
260
  * @author <steven@velozo.com>
264
261
  */var FableCoreServiceProviderBase=/*#__PURE__*/function(){function FableCoreServiceProviderBase(pOptions,pServiceHash){_classCallCheck2(this,FableCoreServiceProviderBase);this.fable=false;this.options=_typeof(pOptions)==='object'?pOptions:{};this.serviceType='Unknown';// The hash will be a non-standard UUID ... the UUID service uses this base class!
265
262
  this.UUID="CORESVC-".concat(Math.floor(Math.random()*(99999-10000)+10000));this.Hash=typeof pServiceHash==='string'?pServiceHash:"".concat(this.UUID);}_createClass2(FableCoreServiceProviderBase,[{key:"connectFable",value:// After fable is initialized, it would be expected to be wired in as a normal service.
266
263
  function connectFable(pFable){this.fable=pFable;return true;}}]);return FableCoreServiceProviderBase;}();_defineProperty2(FableCoreServiceProviderBase,"isFableService",true);module.exports=FableCoreServiceProviderBase;},{}],29:[function(require,module,exports){/**
267
264
  * Fable Service Base
268
- * @license MIT
269
265
  * @author <steven@velozo.com>
270
266
  */var FableServiceProviderBase=/*#__PURE__*/_createClass2(function FableServiceProviderBase(pFable,pOptions,pServiceHash){_classCallCheck2(this,FableServiceProviderBase);this.fable=pFable;this.options=_typeof(pOptions)==='object'?pOptions:{};this.serviceType='Unknown';this.UUID=pFable.getUUID();this.Hash=typeof pServiceHash==='string'?pServiceHash:"".concat(this.UUID);});_defineProperty2(FableServiceProviderBase,"isFableService",true);module.exports=FableServiceProviderBase;module.exports.CoreServiceProviderBase=require('./Fable-ServiceProviderBase-Preinit.js');},{"./Fable-ServiceProviderBase-Preinit.js":28}],30:[function(require,module,exports){module.exports={"Product":"ApplicationNameHere","ProductVersion":"0.0.0","ConfigFile":false,"LogStreams":[{"level":"trace"}]};},{}],31:[function(require,module,exports){(function(process){(function(){/**
271
267
  * Fable Settings Template Processor
272
268
  *
273
269
  * This class allows environment variables to come in via templated expressions, and defaults to be set.
274
270
  *
275
- * @license MIT
276
271
  *
277
272
  * @author Steven Velozo <steven@velozo.com>
278
273
  * @module Fable Settings
@@ -282,7 +277,6 @@ this.templateProcessor.addPattern('${','}',function(pTemplateValue){var tmpTempl
282
277
  var tmpDefaultValue=tmpTemplateValue.substring(tmpSeparatorIndex+1);var tmpEnvironmentVariableName=tmpSeparatorIndex>-1?tmpTemplateValue.substring(0,tmpSeparatorIndex):tmpTemplateValue;if(process.env.hasOwnProperty(tmpEnvironmentVariableName)){return process.env[tmpEnvironmentVariableName];}else{return tmpDefaultValue;}});}_createClass2(FableSettingsTemplateProcessor,[{key:"parseSetting",value:function parseSetting(pString){return this.templateProcessor.parseString(pString);}}]);return FableSettingsTemplateProcessor;}();module.exports=FableSettingsTemplateProcessor;}).call(this);}).call(this,require('_process'));},{"_process":43,"precedent":40}],32:[function(require,module,exports){/**
283
278
  * Fable Settings Add-on
284
279
  *
285
- * @license MIT
286
280
  *
287
281
  * @author Steven Velozo <steven@velozo.com>
288
282
  * @module Fable Settings
@@ -317,7 +311,6 @@ var tmpSettingsFromCopy=JSON.parse(JSON.stringify(tmpSettingsFrom));this.setting
317
311
  function autoConstruct(pSettings){return new FableSettings(pSettings);}module.exports=FableSettings;module.exports["new"]=autoConstruct;},{"./Fable-Settings-Default":30,"./Fable-Settings-TemplateProcessor.js":31,"fable-serviceproviderbase":29}],33:[function(require,module,exports){/**
318
312
  * Random Byte Generator - Browser version
319
313
  *
320
- * @license MIT
321
314
  *
322
315
  * @author Steven Velozo <steven@velozo.com>
323
316
  */ // Adapted from node-uuid (https://github.com/kelektiv/node-uuid)
@@ -1658,7 +1651,6 @@ try{if(!global.localStorage)return false;}catch(_){return false;}var val=global.
1658
1651
  // decorations and such are not lost along the way.
1659
1652
  module.exports=wrappy;function wrappy(fn,cb){if(fn&&cb)return wrappy(fn)(cb);if(typeof fn!=='function')throw new TypeError('need wrapper function');Object.keys(fn).forEach(function(k){wrapper[k]=fn[k];});return wrapper;function wrapper(){var args=new Array(arguments.length);for(var i=0;i<args.length;i++){args[i]=arguments[i];}var ret=fn.apply(this,args);var cb=args[args.length-1];if(typeof ret==='function'&&ret!==cb){Object.keys(cb).forEach(function(k){ret[k]=cb[k];});}return ret;}}},{}],76:[function(require,module,exports){module.exports=extend;var hasOwnProperty=Object.prototype.hasOwnProperty;function extend(){var target={};for(var i=0;i<arguments.length;i++){var source=arguments[i];for(var key in source){if(hasOwnProperty.call(source,key)){target[key]=source[key];}}}return target;}},{}],77:[function(require,module,exports){var libNPMModuleWrapper=require('./Fable.js');if((typeof window==="undefined"?"undefined":_typeof(window))==='object'&&!window.hasOwnProperty('Fable')){window.Fable=libNPMModuleWrapper;}module.exports=libNPMModuleWrapper;},{"./Fable.js":79}],78:[function(require,module,exports){/**
1660
1653
  * Fable Application Services Management
1661
- * @license MIT
1662
1654
  * @author <steven@velozo.com>
1663
1655
  */var libFableServiceBase=require('fable-serviceproviderbase');var FableService=/*#__PURE__*/function(_libFableServiceBase$){_inherits(FableService,_libFableServiceBase$);var _super6=_createSuper(FableService);function FableService(pSettings,pServiceHash){var _this9;_classCallCheck2(this,FableService);_this9=_super6.call(this,pSettings,pServiceHash);_this9.serviceType='ServiceManager';_this9.serviceTypes=[];// A map of instantiated services
1664
1656
  _this9.services={};// A map of the default instantiated service by type
@@ -1682,7 +1674,6 @@ this.services[tmpServiceType]={};}// Add the service to the service map
1682
1674
  this.services[tmpServiceType][tmpServiceHash]=pServiceInstance;// If this is the first service of this type, make it the default
1683
1675
  if(!this.defaultServices.hasOwnProperty(tmpServiceType)){this.defaultServices[tmpServiceType]=pServiceInstance;}return pServiceInstance;}},{key:"setDefaultServiceInstantiation",value:function setDefaultServiceInstantiation(pServiceType,pServiceHash){if(this.services[pServiceType].hasOwnProperty(pServiceHash)){this.defaultServices[pServiceType]=this.services[pServiceType][pServiceHash];return true;}return false;}}]);return FableService;}(libFableServiceBase.CoreServiceProviderBase);module.exports=FableService;module.exports.ServiceProviderBase=libFableServiceBase;module.exports.CoreServiceProviderBase=libFableServiceBase.CoreServiceProviderBase;},{"fable-serviceproviderbase":29}],79:[function(require,module,exports){/**
1684
1676
  * Fable Application Services Support Library
1685
- * @license MIT
1686
1677
  * @author <steven@velozo.com>
1687
1678
  */ // Pre-init services
1688
1679
  var libFableSettings=require('fable-settings');var libFableUUID=require('fable-uuid');var libFableLog=require('fable-log');var libFableServiceManager=require('./Fable-ServiceManager.js');// Default Services
@@ -1699,9 +1690,8 @@ this._coreServices.ServiceManager=new libFableServiceManager(this);this.serviceM
1699
1690
  // Initialization Phase 2: Map in the default services.
1700
1691
  // They will then be available in the Default service provider set as well.
1701
1692
  this.serviceManager.connectPreinitServiceProviderInstance(this._coreServices.ServiceManager);this.serviceManager.connectPreinitServiceProviderInstance(this._coreServices.UUID);this.serviceManager.connectPreinitServiceProviderInstance(this._coreServices.Logging);this.serviceManager.connectPreinitServiceProviderInstance(this._coreServices.SettingsManager);// Initialize and instantiate the default baked-in Data Arithmatic service
1702
- this.serviceManager.addServiceType('Template',libFableServiceTemplate);this.serviceManager.addServiceType('MetaTemplate',libFableServiceMetaTemplate);this.serviceManager.addAndInstantiateServiceType('DataFormat',libFableServiceDataFormat);this.serviceManager.addAndInstantiateServiceType('Utility',libFableServiceUtility);this.serviceManager.addServiceType('Operation',libFableServiceOperation);this.serviceManager.addServiceType('RestClient',libFableServiceRestClient);}_createClass2(Fable,[{key:"settings",get:function get(){return this._coreServices.SettingsManager.settings;}},{key:"log",get:function get(){return this._coreServices.Logging;}},{key:"services",get:function get(){return this._coreServices.ServiceManager.services;}},{key:"defaultServices",get:function get(){return this._coreServices.ServiceManager.defaultServices;}},{key:"getUUID",value:function getUUID(){return this._coreServices.UUID.getUUID();}},{key:"fable",get:function get(){return this;}}]);return Fable;}();// This is for backwards compatibility
1693
+ this.serviceManager.addServiceType('Template',libFableServiceTemplate);this.serviceManager.addServiceType('MetaTemplate',libFableServiceMetaTemplate);this.serviceManager.addAndInstantiateServiceType('DataFormat',libFableServiceDataFormat);this.serviceManager.addAndInstantiateServiceType('Utility',libFableServiceUtility);this.serviceManager.addServiceType('Operation',libFableServiceOperation);this.serviceManager.addServiceType('RestClient',libFableServiceRestClient);}_createClass2(Fable,[{key:"settings",get:function get(){return this._coreServices.SettingsManager.settings;}},{key:"settingsManager",get:function get(){return this._coreServices.SettingsManager;}},{key:"log",get:function get(){return this._coreServices.Logging;}},{key:"services",get:function get(){return this._coreServices.ServiceManager.services;}},{key:"defaultServices",get:function get(){return this._coreServices.ServiceManager.defaultServices;}},{key:"getUUID",value:function getUUID(){return this._coreServices.UUID.getUUID();}},{key:"fable",get:function get(){return this;}}]);return Fable;}();// This is for backwards compatibility
1703
1694
  function autoConstruct(pSettings){return new Fable(pSettings);}module.exports=Fable;module.exports["new"]=autoConstruct;module.exports.LogProviderBase=libFableLog.LogProviderBase;module.exports.ServiceProviderBase=libFableServiceManager.ServiceProviderBase;module.exports.CoreServiceProviderBase=libFableServiceManager.CoreServiceProviderBase;module.exports.precedent=libFableSettings.precedent;},{"./Fable-ServiceManager.js":78,"./services/Fable-Service-DataFormat.js":80,"./services/Fable-Service-MetaTemplate.js":81,"./services/Fable-Service-Operation.js":83,"./services/Fable-Service-RestClient.js":84,"./services/Fable-Service-Template.js":85,"./services/Fable-Service-Utility.js":86,"fable-log":27,"fable-settings":32,"fable-uuid":34}],80:[function(require,module,exports){/**
1704
- * @license MIT
1705
1695
  */var libFableServiceProviderBase=require('fable-serviceproviderbase');/**
1706
1696
  * Data Formatting and Translation Functions
1707
1697
  *