UNPKG

46.1 kBJavaScriptView Raw
1'use strict';
2
3Object.defineProperty(exports, "__esModule", {
4 value: true
5});
6exports.filterWildcardImportTemplate = exports.enrichExportTemplate = exports.universalAccesorsTemplate = undefined;
7
8var _babelTemplate = require('babel-template');
9
10var _babelTemplate2 = _interopRequireDefault(_babelTemplate);
11
12function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
13
14var universalAccesorsTemplate = exports.universalAccesorsTemplate = (0, _babelTemplate2.default)('\nvar REWIRED_DATA_IDENTIFIER = Object.create(null);\n\nvar INTENTIONAL_UNDEFINED = \'__INTENTIONAL_UNDEFINED__\';\n\nlet API_OBJECT_ID = {};\n\n(function() {\n\tfunction addPropertyToAPIObject(name, value) {\n\t\tObject.defineProperty(API_OBJECT_ID, name, { value: value, enumerable: false, configurable: true });\n\t}\n\n\taddPropertyToAPIObject(\'__get__\', UNIVERSAL_GETTER_ID);\n\taddPropertyToAPIObject(\'__GetDependency__\', UNIVERSAL_GETTER_ID);\n\taddPropertyToAPIObject(\'__Rewire__\', UNIVERSAL_SETTER_ID);\n\taddPropertyToAPIObject(\'__set__\', UNIVERSAL_SETTER_ID);\n\taddPropertyToAPIObject(\'__reset__\', UNIVERSAL_RESETTER_ID);\n\taddPropertyToAPIObject(\'__ResetDependency__\', UNIVERSAL_RESETTER_ID);\n\taddPropertyToAPIObject(\'__with__\', UNIVERSAL_WITH_ID);\n})();\n\nfunction UNIVERSAL_GETTER_ID(variableName) {\n if (REWIRED_DATA_IDENTIFIER === undefined || REWIRED_DATA_IDENTIFIER[variableName] === undefined) {\n return ORIGINAL_VARIABLE_ACCESSOR_IDENTIFIER(variableName);\n } else {\n var value = REWIRED_DATA_IDENTIFIER[variableName];\n if (value === INTENTIONAL_UNDEFINED) {\n return undefined;\n } else {\n return value;\n }\n }\n}\n\nORIGINAL_ACCESSOR\n\nfunction ASSIGNMENT_OPERATION_IDENTIFIER(variableName, value) {\n\tif(REWIRED_DATA_IDENTIFIER === undefined || REWIRED_DATA_IDENTIFIER[variableName] === undefined) {\n\t\treturn ORIGINAL_VARIABLE_SETTER_IDENTIFIER(variableName, value);\n\t} else {\n\t\treturn REWIRED_DATA_IDENTIFIER[variableName] = value;\n\t}\n}\n\nORIGINAL_SETTER;\n\nfunction UPDATE_OPERATION_IDENTIFIER(operation, variableName, prefix) {\n\tvar oldValue = UNIVERSAL_GETTER_ID(variableName);\n\tvar newValue = (operation === \'++\') ? oldValue + 1 : oldValue - 1;\n\tASSIGNMENT_OPERATION_IDENTIFIER(variableName, newValue);\n\treturn (prefix) ? newValue : oldValue;\n}\n\nfunction UNIVERSAL_SETTER_ID(variableName, value) {\n\tif(typeof variableName === \'object\') {\n\t\tObject.keys(variableName).forEach(function(name) {\n\t\t\tREWIRED_DATA_IDENTIFIER[name] = variableName[name];\n\t\t});\n\t} else {\n\t if (value === undefined) {\n\t REWIRED_DATA_IDENTIFIER[variableName] = INTENTIONAL_UNDEFINED\n\t } else {\n\t REWIRED_DATA_IDENTIFIER[variableName] = value\n\t }\n\n return function() {\n UNIVERSAL_RESETTER_ID(variableName);\n };\n\t}\n}\n\nfunction UNIVERSAL_RESETTER_ID(variableName) {\n\tdelete REWIRED_DATA_IDENTIFIER[variableName];\n}\n\nfunction UNIVERSAL_WITH_ID(object) {\n\tvar rewiredVariableNames = Object.keys(object);\n\tvar previousValues = {};\n\n\tfunction reset() {\n\t\trewiredVariableNames.forEach(function(variableName) {\n\t\t\tREWIRED_DATA_IDENTIFIER[variableName] = previousValues[variableName];\n\t\t});\n\t}\n\n\treturn function(callback) {\n\t\trewiredVariableNames.forEach(function(variableName) {\n\t\t\tpreviousValues[variableName] = REWIRED_DATA_IDENTIFIER[variableName];\n\t\t\tREWIRED_DATA_IDENTIFIER[variableName] = object[variableName];\n\t\t});\n\t\tlet result = callback();\n\t\tif(!!result && typeof result.then == \'function\') {\n\t\t\tresult.then(reset).catch(reset);\n\t\t} else {\n\t\t\treset();\n\t\t}\n\t\treturn result;\n\t}\n}\n\n\n'); /*Copyright (c) 2015, Robert Binna <r.binna@synedra.com>
15
16 Permission to use, copy, modify, and/or distribute this software for any
17 purpose with or without fee is hereby granted, provided that the above
18 copyright notice and this permission notice appear in all copies.
19
20 THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES
21 WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF
22 MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR
23 ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
24 WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN
25 ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF
26 OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.*/
27
28var enrichExportTemplate = exports.enrichExportTemplate = (0, _babelTemplate2.default)('\nlet TYPEOFORIGINALEXPORTVARIABLE = typeof EXPORT_VALUE;\nfunction addNonEnumerableProperty(name, value) {\n\tObject.defineProperty(EXPORT_VALUE, name, { value: value, enumerable: false, configurable: true });\n}\n\nif((TYPEOFORIGINALEXPORTVARIABLE === \'object\' || TYPEOFORIGINALEXPORTVARIABLE === \'function\') && Object.isExtensible(EXPORT_VALUE)) {\n\taddNonEnumerableProperty(\'__get__\', UNIVERSAL_GETTER_ID);\n\taddNonEnumerableProperty(\'__GetDependency__\', UNIVERSAL_GETTER_ID);\n\taddNonEnumerableProperty(\'__Rewire__\', UNIVERSAL_SETTER_ID);\n\taddNonEnumerableProperty(\'__set__\', UNIVERSAL_SETTER_ID);\n\taddNonEnumerableProperty(\'__reset__\', UNIVERSAL_RESETTER_ID);\n\taddNonEnumerableProperty(\'__ResetDependency__\', UNIVERSAL_RESETTER_ID);\n\taddNonEnumerableProperty(\'__with__\', UNIVERSAL_WITH_ID);\n\taddNonEnumerableProperty(\'__RewireAPI__\', API_OBJECT_ID);\n}\n');
29
30var filterWildcardImportTemplate = exports.filterWildcardImportTemplate = (0, _babelTemplate2.default)('\nfunction FILTER_WILDCARD_IMPORT_IDENTIFIER(wildcardImport={}) {\n\tlet validPropertyNames = Object.keys(wildcardImport).filter(function(propertyName) {\n\t\treturn propertyName !== \'__get__\' &&\n\t\t\t\tpropertyName !== \'__set__\' &&\n\t\t\t\tpropertyName !== \'__reset__\' &&\n\t\t\t\tpropertyName !== \'__with__\' &&\n\n\t\t\t\tpropertyName !== \'__GetDependency__\' &&\n\t\t\t\tpropertyName !== \'__Rewire__\' &&\n\t\t\t\tpropertyName !== \'__ResetDependency__\' &&\n\n\t\t\t\tpropertyName !== \'__RewireAPI__\';\n\t});\n\n\treturn validPropertyNames.reduce(\n\t\tfunction(filteredWildcardImport, propertyName) {\n\t\t\tfilteredWildcardImport[propertyName] = wildcardImport[propertyName];\n\t\t\treturn filteredWildcardImport;\n\t\t}, {}\n\t);\n}\n');
\No newline at end of file