| /* | ||
| * Copyright (c) 2014 airbug inc. http://airbug.com | ||
| * | ||
| * bugpack may be freely distributed under the MIT license. | ||
| */ | ||
| //------------------------------------------------------------------------------- | ||
| // Context | ||
| //------------------------------------------------------------------------------- | ||
| (function() { | ||
| //------------------------------------------------------------------------------- | ||
| // Declare Class | ||
| //------------------------------------------------------------------------------- | ||
| /** | ||
| * @constructor | ||
| * @param {Object.<string, *>} modules | ||
| */ | ||
| var BugPackFix = function(modules) { | ||
| //------------------------------------------------------------------------------- | ||
| // Private Properties | ||
| //------------------------------------------------------------------------------- | ||
| /** | ||
| * @private | ||
| * @type {Object.<string, *>} | ||
| */ | ||
| this.modules = modules; | ||
| }; | ||
| //------------------------------------------------------------------------------- | ||
| // Getters and Setters | ||
| //------------------------------------------------------------------------------- | ||
| /** | ||
| * @return {Object.<string, *>} | ||
| */ | ||
| BugPackFix.prototype.getModules = function() { | ||
| return this.modules; | ||
| }; | ||
| //------------------------------------------------------------------------------- | ||
| // Public Methods | ||
| //------------------------------------------------------------------------------- | ||
| /** | ||
| * @param {{ | ||
| * exports: * | ||
| * }} module | ||
| * @param {string} moduleName | ||
| * @param {function(*)} moduleContext | ||
| */ | ||
| BugPackFix.prototype.fix = function(module, moduleName, moduleContext) { | ||
| if (!module) { | ||
| module = new ModuleFix(this.getModules(), moduleName); | ||
| } | ||
| moduleContext(module); | ||
| }; | ||
| //------------------------------------------------------------------------------- | ||
| // Static Properties | ||
| //------------------------------------------------------------------------------- | ||
| /** | ||
| * @static | ||
| * @private | ||
| * @type {BugPackFix} | ||
| */ | ||
| BugPackFix.instance = null; | ||
| //------------------------------------------------------------------------------- | ||
| // Static Methods | ||
| //------------------------------------------------------------------------------- | ||
| /** | ||
| * @static | ||
| * @param {{ | ||
| * exports: * | ||
| * }} module | ||
| * @param {string} moduleName | ||
| * @param {function(*)} moduleContext | ||
| */ | ||
| BugPackFix.fix = function(module, moduleName, moduleContext) { | ||
| return BugPackFix.getInstance().fix(module, moduleName, moduleContext); | ||
| }; | ||
| /** | ||
| * @static | ||
| * @return {BugPackFix} | ||
| */ | ||
| BugPackFix.getInstance = function() { | ||
| if (BugPackFix.instance === null) { | ||
| BugPackFix.instance = new BugPackFix(require.modules); | ||
| } | ||
| return BugPackFix.instance; | ||
| }; | ||
| //------------------------------------------------------------------------------- | ||
| // Declare Sub Class | ||
| //------------------------------------------------------------------------------- | ||
| /** | ||
| * @constructor | ||
| * @param {Object.<string, *>} modules | ||
| * @param {string} moduleName | ||
| */ | ||
| var ModuleFix = function(modules, moduleName) { | ||
| //------------------------------------------------------------------------------- | ||
| // Private Properties | ||
| //------------------------------------------------------------------------------- | ||
| /** | ||
| * @private | ||
| * @type {*} | ||
| */ | ||
| this._exports = null; | ||
| /** | ||
| * @private | ||
| * @type {string} | ||
| */ | ||
| this.moduleName = moduleName; | ||
| /** | ||
| * @private | ||
| * @type {Object.<string, *>} | ||
| */ | ||
| this.modules = modules; | ||
| }; | ||
| //------------------------------------------------------------------------------- | ||
| // Getters and Setters | ||
| //------------------------------------------------------------------------------- | ||
| ModuleFix.prototype = { | ||
| get exports() { | ||
| return this._exports; | ||
| }, | ||
| set exports(exports){ | ||
| this._exports = exports; | ||
| this.modules[this.moduleName] = exports; | ||
| } | ||
| }; | ||
| /** | ||
| * @return {string} | ||
| */ | ||
| ModuleFix.prototype.getModuleName = function() { | ||
| return this.moduleName; | ||
| }; | ||
| /** | ||
| * @return {Object.<string, *>} | ||
| */ | ||
| ModuleFix.prototype.getModules = function() { | ||
| return this.modules; | ||
| }; | ||
| //------------------------------------------------------------------------------- | ||
| // Exports | ||
| //------------------------------------------------------------------------------- | ||
| if (module) { | ||
| module.exports = BugPackFix; | ||
| } else { | ||
| require.modules["./BugPackFix"] = BugPackFix; | ||
| } | ||
| })(); |
@@ -23,3 +23,6 @@ /* | ||
| var BugPackApi = {}; | ||
| /** | ||
| * @constructor | ||
| */ | ||
| var BugPackApi = function() {}; | ||
@@ -26,0 +29,0 @@ |
@@ -18,3 +18,2 @@ /* | ||
| var BugPackSourceProcessor = require('./BugPackSourceProcessor'); | ||
| var BugPackPackage = require('./BugPackPackage'); | ||
| var BugPackRegistry = require('./BugPackRegistry'); | ||
@@ -21,0 +20,0 @@ var BugPackRegistryFile = require('./BugPackRegistryFile'); |
+71
-60
@@ -9,80 +9,91 @@ /* | ||
| //------------------------------------------------------------------------------- | ||
| // Declare Class | ||
| // Context | ||
| //------------------------------------------------------------------------------- | ||
| /** | ||
| * @constructor | ||
| * @param {string} key | ||
| */ | ||
| var BugPackKey = function(key) { | ||
| require('./BugPackFix').fix(module, "./BugPackKey", function(module) { | ||
| var keyParts = key.split('.'); | ||
| var packageName = ""; | ||
| var exportName = keyParts.pop(); | ||
| if (keyParts.length > 0) { | ||
| packageName = keyParts.join('.'); | ||
| } | ||
| //------------------------------------------------------------------------------- | ||
| // Declare Class | ||
| //------------------------------------------------------------------------------- | ||
| /** | ||
| * @private | ||
| * @type {string} | ||
| * @constructor | ||
| * @param {string} key | ||
| */ | ||
| this.exportName = exportName; | ||
| var BugPackKey = function(key) { | ||
| //------------------------------------------------------------------------------- | ||
| // Private Properties | ||
| //------------------------------------------------------------------------------- | ||
| var keyParts = key.split('.'); | ||
| var packageName = ""; | ||
| var exportName = keyParts.pop(); | ||
| if (keyParts.length > 0) { | ||
| packageName = keyParts.join('.'); | ||
| } | ||
| /** | ||
| * @private | ||
| * @type {string} | ||
| */ | ||
| this.exportName = exportName; | ||
| /** | ||
| * @private | ||
| * @type {string} | ||
| */ | ||
| this.key = key; | ||
| /** | ||
| * @private | ||
| * @type {string} | ||
| */ | ||
| this.packageName = packageName; | ||
| }; | ||
| //------------------------------------------------------------------------------- | ||
| // Getters and Setters | ||
| //------------------------------------------------------------------------------- | ||
| /** | ||
| * @private | ||
| * @type {string} | ||
| * @return {string} | ||
| */ | ||
| this.key = key; | ||
| BugPackKey.prototype.getExportName = function() { | ||
| return this.exportName; | ||
| }; | ||
| /** | ||
| * @private | ||
| * @type {string} | ||
| * @return {string} | ||
| */ | ||
| this.packageName = packageName; | ||
| }; | ||
| BugPackKey.prototype.getKey = function() { | ||
| return this.key; | ||
| }; | ||
| /** | ||
| * @return {string} | ||
| */ | ||
| BugPackKey.prototype.getPackageName = function() { | ||
| return this.packageName; | ||
| }; | ||
| //------------------------------------------------------------------------------- | ||
| // Getters and Setters | ||
| //------------------------------------------------------------------------------- | ||
| /** | ||
| * @return {string} | ||
| */ | ||
| BugPackKey.prototype.getExportName = function() { | ||
| return this.exportName; | ||
| }; | ||
| //------------------------------------------------------------------------------- | ||
| // Convenience Methods | ||
| //------------------------------------------------------------------------------- | ||
| /** | ||
| * @return {string} | ||
| */ | ||
| BugPackKey.prototype.getKey = function() { | ||
| return this.key; | ||
| }; | ||
| /** | ||
| * @return {boolean} | ||
| */ | ||
| BugPackKey.prototype.isWildCard = function() { | ||
| return (this.exportName === "*"); | ||
| }; | ||
| /** | ||
| * @return {string} | ||
| */ | ||
| BugPackKey.prototype.getPackageName = function() { | ||
| return this.packageName; | ||
| }; | ||
| //------------------------------------------------------------------------------- | ||
| // Exports | ||
| //------------------------------------------------------------------------------- | ||
| //------------------------------------------------------------------------------- | ||
| // Convenience Methods | ||
| //------------------------------------------------------------------------------- | ||
| /** | ||
| * @return {boolean} | ||
| */ | ||
| BugPackKey.prototype.isWildCard = function() { | ||
| return (this.exportName === "*"); | ||
| }; | ||
| //------------------------------------------------------------------------------- | ||
| // Exports | ||
| //------------------------------------------------------------------------------- | ||
| module.exports = BugPackKey; | ||
| module.exports = BugPackKey; | ||
| }); |
+96
-85
@@ -9,105 +9,116 @@ /* | ||
| //------------------------------------------------------------------------------- | ||
| // Requires | ||
| // Context | ||
| //------------------------------------------------------------------------------- | ||
| var BugPackPackage = require('./BugPackPackage'); | ||
| require('./BugPackFix').fix(module, "./BugPackLibrary", function(module) { | ||
| //------------------------------------------------------------------------------- | ||
| // Requires | ||
| //------------------------------------------------------------------------------- | ||
| //------------------------------------------------------------------------------- | ||
| // Declare Class | ||
| //------------------------------------------------------------------------------- | ||
| var BugPackPackage = require('./BugPackPackage'); | ||
| /** | ||
| * @constructor | ||
| */ | ||
| var BugPackLibrary = function() { | ||
| //------------------------------------------------------------------------------- | ||
| // Declare Class | ||
| //------------------------------------------------------------------------------- | ||
| /** | ||
| * @private | ||
| * @type {BugPackPackage} | ||
| * @constructor | ||
| */ | ||
| this.corePackage = new BugPackPackage(""); | ||
| var BugPackLibrary = function() { | ||
| //------------------------------------------------------------------------------- | ||
| // Private Properties | ||
| //------------------------------------------------------------------------------- | ||
| /** | ||
| * @private | ||
| * @type {BugPackPackage} | ||
| */ | ||
| this.corePackage = new BugPackPackage(""); | ||
| /** | ||
| * @private | ||
| * @type {Object} | ||
| */ | ||
| this.packages = {}; | ||
| }; | ||
| //------------------------------------------------------------------------------- | ||
| // Public Methods | ||
| //------------------------------------------------------------------------------- | ||
| /** | ||
| * @private | ||
| * @type {Object} | ||
| * @param {string} packageName | ||
| * @return {BugPackPackage} | ||
| */ | ||
| this.packages = {}; | ||
| }; | ||
| BugPackLibrary.prototype.createPackage = function(packageName) { | ||
| var _this = this; | ||
| var packageParts = packageName.split("."); | ||
| var currentPackageString = ""; | ||
| var first = true; | ||
| var parentPackage = this.corePackage; | ||
| packageParts.forEach(function(packagePart) { | ||
| if (first) { | ||
| first = false; | ||
| } else { | ||
| currentPackageString += "."; | ||
| } | ||
| currentPackageString += packagePart; | ||
| if (!_this.hasPackage(currentPackageString)) { | ||
| var bugPackPackage = new BugPackPackage(currentPackageString); | ||
| _this.packages[bugPackPackage.getName()] = bugPackPackage; | ||
| parentPackage.addSubPackage(bugPackPackage); | ||
| parentPackage = bugPackPackage; | ||
| } | ||
| }); | ||
| return parentPackage; | ||
| }; | ||
| /** | ||
| * @param {string} packageName | ||
| * @return {BugPackPackage} | ||
| */ | ||
| BugPackLibrary.prototype.getPackage = function(packageName) { | ||
| if (packageName === "") { | ||
| return this.corePackage; | ||
| } else if (this.hasPackage(packageName)) { | ||
| return this.packages[packageName]; | ||
| } | ||
| return null; | ||
| }; | ||
| //------------------------------------------------------------------------------- | ||
| // Public Methods | ||
| //------------------------------------------------------------------------------- | ||
| /** | ||
| * @param {string} packageName | ||
| * @return {BugPackPackage} | ||
| */ | ||
| BugPackLibrary.prototype.createPackage = function(packageName) { | ||
| var _this = this; | ||
| var packageParts = packageName.split("."); | ||
| var currentPackageString = ""; | ||
| var first = true; | ||
| var parentPackage = this.corePackage; | ||
| packageParts.forEach(function(packagePart) { | ||
| if (first) { | ||
| first = false; | ||
| /** | ||
| * @param {string} packageName | ||
| * @return {boolean} | ||
| */ | ||
| BugPackLibrary.prototype.hasPackage = function(packageName) { | ||
| if (packageName === "") { | ||
| return true; | ||
| } else { | ||
| currentPackageString += "."; | ||
| return Object.prototype.hasOwnProperty.call(this.packages, packageName); | ||
| } | ||
| currentPackageString += packagePart; | ||
| if (!_this.hasPackage(currentPackageString)) { | ||
| var bugPackPackage = new BugPackPackage(currentPackageString); | ||
| _this.packages[bugPackPackage.getName()] = bugPackPackage; | ||
| parentPackage.addSubPackage(bugPackPackage); | ||
| parentPackage = bugPackPackage; | ||
| }; | ||
| /** | ||
| * @param {string} packageName | ||
| * @param {string} exportName | ||
| * @param {*} bugPackExport | ||
| */ | ||
| BugPackLibrary.prototype.registerExport = function(packageName, exportName, bugPackExport) { | ||
| var bugPackPackage = this.getPackage(packageName); | ||
| if (!bugPackPackage) { | ||
| bugPackPackage = this.createPackage(packageName); | ||
| } | ||
| }); | ||
| return parentPackage; | ||
| }; | ||
| bugPackPackage.export(exportName, bugPackExport); | ||
| }; | ||
| /** | ||
| * @param {string} packageName | ||
| * @return {BugPackPackage} | ||
| */ | ||
| BugPackLibrary.prototype.getPackage = function(packageName) { | ||
| if (packageName === "") { | ||
| return this.corePackage; | ||
| } else if (this.hasPackage(packageName)) { | ||
| return this.packages[packageName]; | ||
| } | ||
| return null; | ||
| }; | ||
| /** | ||
| * @param {string} packageName | ||
| * @return {boolean} | ||
| */ | ||
| BugPackLibrary.prototype.hasPackage = function(packageName) { | ||
| if (packageName === "") { | ||
| return true; | ||
| } else { | ||
| return Object.prototype.hasOwnProperty.call(this.packages, packageName); | ||
| } | ||
| }; | ||
| //------------------------------------------------------------------------------- | ||
| // Exports | ||
| //------------------------------------------------------------------------------- | ||
| /** | ||
| * @param {string} packageName | ||
| * @param {string} exportName | ||
| * @param {*} bugPackExport | ||
| */ | ||
| BugPackLibrary.prototype.registerExport = function(packageName, exportName, bugPackExport) { | ||
| var bugPackPackage = this.getPackage(packageName); | ||
| if (!bugPackPackage) { | ||
| bugPackPackage = this.createPackage(packageName); | ||
| } | ||
| bugPackPackage.export(exportName, bugPackExport); | ||
| }; | ||
| //------------------------------------------------------------------------------- | ||
| // Exports | ||
| //------------------------------------------------------------------------------- | ||
| module.exports = BugPackLibrary; | ||
| module.exports = BugPackLibrary; | ||
| }); |
+142
-131
@@ -9,159 +9,170 @@ /* | ||
| //------------------------------------------------------------------------------- | ||
| // Declare Class | ||
| // Context | ||
| //------------------------------------------------------------------------------- | ||
| /** | ||
| * @constructor | ||
| * @param {string} name | ||
| */ | ||
| var BugPackPackage = function(name) { | ||
| require('./BugPackFix').fix(module, "./BugPackPackage", function(module) { | ||
| /** | ||
| * @private | ||
| * @type {Object} | ||
| */ | ||
| this.exports = {}; | ||
| //------------------------------------------------------------------------------- | ||
| // Declare Class | ||
| //------------------------------------------------------------------------------- | ||
| /** | ||
| * @private | ||
| * @type {string} | ||
| * @constructor | ||
| * @param {string} name | ||
| */ | ||
| this.name = name; | ||
| var BugPackPackage = function(name) { | ||
| /** | ||
| * @private | ||
| * @type {Array.<BugPackPackage>} | ||
| */ | ||
| this.subPackages = []; | ||
| }; | ||
| //------------------------------------------------------------------------------- | ||
| // Private Properties | ||
| //------------------------------------------------------------------------------- | ||
| /** | ||
| * @private | ||
| * @type {Object} | ||
| */ | ||
| this.exports = {}; | ||
| //------------------------------------------------------------------------------- | ||
| // Getters and Setters | ||
| //------------------------------------------------------------------------------- | ||
| /** | ||
| * @private | ||
| * @type {string} | ||
| */ | ||
| this.name = name; | ||
| /** | ||
| * @return {Object} | ||
| */ | ||
| BugPackPackage.prototype.getExports = function() { | ||
| return this.exports; | ||
| }; | ||
| /** | ||
| * @private | ||
| * @type {Array.<BugPackPackage>} | ||
| */ | ||
| this.subPackages = []; | ||
| }; | ||
| /** | ||
| * @return {string} | ||
| */ | ||
| BugPackPackage.prototype.getName = function() { | ||
| return this.name; | ||
| }; | ||
| /** | ||
| * @return {Array.<BugPackPackage>} | ||
| */ | ||
| BugPackPackage.prototype.getSubPackages = function() { | ||
| return this.subPackages; | ||
| }; | ||
| //------------------------------------------------------------------------------- | ||
| // Getters and Setters | ||
| //------------------------------------------------------------------------------- | ||
| /** | ||
| * @return {Object} | ||
| */ | ||
| BugPackPackage.prototype.getExports = function() { | ||
| return this.exports; | ||
| }; | ||
| //------------------------------------------------------------------------------- | ||
| // Public Methods | ||
| //------------------------------------------------------------------------------- | ||
| /** | ||
| * @return {string} | ||
| */ | ||
| BugPackPackage.prototype.getName = function() { | ||
| return this.name; | ||
| }; | ||
| /** | ||
| * @param {BugPackPackage} bugPackPackage | ||
| */ | ||
| BugPackPackage.prototype.addSubPackage = function(bugPackPackage) { | ||
| this.subPackages.push(bugPackPackage); | ||
| }; | ||
| /** | ||
| * @return {Array.<BugPackPackage>} | ||
| */ | ||
| BugPackPackage.prototype.getSubPackages = function() { | ||
| return this.subPackages; | ||
| }; | ||
| /** | ||
| * @param {string} exportName | ||
| * @param {*} bugPackExport | ||
| */ | ||
| BugPackPackage.prototype.export = function(exportName, bugPackExport) { | ||
| if (!this.hasExport(exportName)) { | ||
| this.addExport(exportName, bugPackExport); | ||
| } else { | ||
| Error.stackTraceLimit = Infinity; | ||
| throw new Error("Package '" + this.name + "' already has export '" + exportName + "'"); | ||
| } | ||
| }; | ||
| /** | ||
| * @param {string} exportName | ||
| * @return {*} | ||
| */ | ||
| BugPackPackage.prototype.require = function(exportName) { | ||
| if (this.hasExport(exportName)) { | ||
| return this.getExport(exportName); | ||
| } else { | ||
| Error.stackTraceLimit = Infinity; | ||
| throw new Error("Could not find export '" + exportName + "' in package '" + this.name + "'"); | ||
| } | ||
| }; | ||
| //------------------------------------------------------------------------------- | ||
| // Public Methods | ||
| //------------------------------------------------------------------------------- | ||
| /** | ||
| * @param {BugPackPackage} bugPackPackage | ||
| */ | ||
| BugPackPackage.prototype.addSubPackage = function(bugPackPackage) { | ||
| this.subPackages.push(bugPackPackage); | ||
| }; | ||
| //------------------------------------------------------------------------------- | ||
| // Private Methods | ||
| //------------------------------------------------------------------------------- | ||
| /** | ||
| * @param {string} exportName | ||
| * @param {*} bugPackExport | ||
| */ | ||
| BugPackPackage.prototype.export = function(exportName, bugPackExport) { | ||
| if (!this.hasExport(exportName)) { | ||
| this.addExport(exportName, bugPackExport); | ||
| } else { | ||
| Error.stackTraceLimit = Infinity; | ||
| throw new Error("Package '" + this.name + "' already has export '" + exportName + "'"); | ||
| } | ||
| }; | ||
| /** | ||
| * @private | ||
| * @param {string} exportName | ||
| * @param {*} bugPackExport | ||
| */ | ||
| BugPackPackage.prototype.addExport = function(exportName, bugPackExport) { | ||
| this.markExport(exportName, bugPackExport); | ||
| this.exports[exportName] = bugPackExport; | ||
| }; | ||
| /** | ||
| * @param {string} exportName | ||
| * @return {*} | ||
| */ | ||
| BugPackPackage.prototype.require = function(exportName) { | ||
| if (this.hasExport(exportName)) { | ||
| return this.getExport(exportName); | ||
| } else { | ||
| Error.stackTraceLimit = Infinity; | ||
| throw new Error("Could not find export '" + exportName + "' in package '" + this.name + "'"); | ||
| } | ||
| }; | ||
| /** | ||
| * @private | ||
| * @param {string} exportName | ||
| * @return {*} | ||
| */ | ||
| BugPackPackage.prototype.getExport = function(exportName) { | ||
| if (this.hasExport(exportName)) { | ||
| return this.exports[exportName]; | ||
| } | ||
| return null; | ||
| }; | ||
| /** | ||
| * @private | ||
| * @return {boolean} | ||
| */ | ||
| BugPackPackage.prototype.hasExport = function(exportName) { | ||
| return Object.prototype.hasOwnProperty.call(this.exports, exportName); | ||
| }; | ||
| //------------------------------------------------------------------------------- | ||
| // Private Methods | ||
| //------------------------------------------------------------------------------- | ||
| /** | ||
| * @private | ||
| * @param {string} exportName | ||
| * @param {*} bugPackExport | ||
| */ | ||
| BugPackPackage.prototype.markExport = function(exportName, bugPackExport) { | ||
| if (bugPackExport !== null && bugPackExport !== undefined) { | ||
| if (!bugPackExport._bugPack) { | ||
| Object.defineProperty(bugPackExport, "_bugPack", { | ||
| value : { | ||
| packageName: this.name, | ||
| exportName: exportName, | ||
| bugPackKey: this.name ? this.name + "." + exportName : exportName | ||
| }, | ||
| writable : false, | ||
| enumerable : false, | ||
| configurable : false | ||
| }); | ||
| } else { | ||
| Error.stackTraceLimit = Infinity; | ||
| throw new Error("Trying to mark a bugpack export that is already marked. Are you exporting the same value more than once?"); | ||
| /** | ||
| * @private | ||
| * @param {string} exportName | ||
| * @param {*} bugPackExport | ||
| */ | ||
| BugPackPackage.prototype.addExport = function(exportName, bugPackExport) { | ||
| this.markExport(exportName, bugPackExport); | ||
| this.exports[exportName] = bugPackExport; | ||
| }; | ||
| /** | ||
| * @private | ||
| * @param {string} exportName | ||
| * @return {*} | ||
| */ | ||
| BugPackPackage.prototype.getExport = function(exportName) { | ||
| if (this.hasExport(exportName)) { | ||
| return this.exports[exportName]; | ||
| } | ||
| } | ||
| }; | ||
| return null; | ||
| }; | ||
| /** | ||
| * @private | ||
| * @return {boolean} | ||
| */ | ||
| BugPackPackage.prototype.hasExport = function(exportName) { | ||
| return Object.prototype.hasOwnProperty.call(this.exports, exportName); | ||
| }; | ||
| //------------------------------------------------------------------------------- | ||
| // Exports | ||
| //------------------------------------------------------------------------------- | ||
| /** | ||
| * @private | ||
| * @param {string} exportName | ||
| * @param {*} bugPackExport | ||
| */ | ||
| BugPackPackage.prototype.markExport = function(exportName, bugPackExport) { | ||
| if (bugPackExport !== null && bugPackExport !== undefined) { | ||
| if (!bugPackExport._bugPack) { | ||
| Object.defineProperty(bugPackExport, "_bugPack", { | ||
| value : { | ||
| packageName: this.name, | ||
| exportName: exportName, | ||
| bugPackKey: this.name ? this.name + "." + exportName : exportName | ||
| }, | ||
| writable : false, | ||
| enumerable : false, | ||
| configurable : false | ||
| }); | ||
| } else { | ||
| Error.stackTraceLimit = Infinity; | ||
| throw new Error("Trying to mark a bugpack export that is already marked. Are you exporting the same value more than once?"); | ||
| } | ||
| } | ||
| }; | ||
| module.exports = BugPackPackage; | ||
| //------------------------------------------------------------------------------- | ||
| // Exports | ||
| //------------------------------------------------------------------------------- | ||
| module.exports = BugPackPackage; | ||
| }); |
@@ -28,2 +28,6 @@ /* | ||
| //------------------------------------------------------------------------------- | ||
| // Private Properties | ||
| //------------------------------------------------------------------------------- | ||
| /** | ||
@@ -30,0 +34,0 @@ * @private |
+171
-160
@@ -9,196 +9,207 @@ /* | ||
| //------------------------------------------------------------------------------- | ||
| // Declare Class | ||
| // Context | ||
| //------------------------------------------------------------------------------- | ||
| /** | ||
| * @constructor | ||
| * @param {BugPackSource} bugPackSource | ||
| * @param {BugPackContext} bugPackContext | ||
| */ | ||
| var BugPackSourceProcessor = function(bugPackSource, bugPackContext) { | ||
| require('./BugPackFix').fix(module, "./BugPackSourceProcessor", function(module) { | ||
| //------------------------------------------------------------------------------- | ||
| // Declare Class | ||
| //------------------------------------------------------------------------------- | ||
| /** | ||
| * @private | ||
| * @type {BugPackSource} | ||
| * @constructor | ||
| * @param {BugPackSource} bugPackSource | ||
| * @param {BugPackContext} bugPackContext | ||
| */ | ||
| this.bugPackSource = bugPackSource; | ||
| var BugPackSourceProcessor = function(bugPackSource, bugPackContext) { | ||
| //------------------------------------------------------------------------------- | ||
| // Private Properties | ||
| //------------------------------------------------------------------------------- | ||
| /** | ||
| * @private | ||
| * @type {BugPackSource} | ||
| */ | ||
| this.bugPackSource = bugPackSource; | ||
| /** | ||
| * @private | ||
| * @type {BugPackContext} | ||
| */ | ||
| this.bugPackContext = bugPackContext; | ||
| /** | ||
| * @private | ||
| * @type boolean} | ||
| */ | ||
| this.processed = false; | ||
| /** | ||
| * @private | ||
| * @type {Array} | ||
| */ | ||
| this.processedCallbacks = []; | ||
| /** | ||
| * @private | ||
| * @type {boolean} | ||
| */ | ||
| this.processingStarted = false; | ||
| }; | ||
| //------------------------------------------------------------------------------- | ||
| // Getters and Setters | ||
| //------------------------------------------------------------------------------- | ||
| /** | ||
| * @private | ||
| * @type {BugPackContext} | ||
| * @return {BugPackSource} | ||
| */ | ||
| this.bugPackContext = bugPackContext; | ||
| BugPackSourceProcessor.prototype.getBugPackSource = function() { | ||
| return this.bugPackSource; | ||
| }; | ||
| //------------------------------------------------------------------------------- | ||
| // Public Methods | ||
| //------------------------------------------------------------------------------- | ||
| /** | ||
| * @private | ||
| * @type boolean} | ||
| * @param {function(Error=)} callback | ||
| */ | ||
| this.processed = false; | ||
| BugPackSourceProcessor.prototype.addProcessedCallback = function(callback) { | ||
| this.processedCallbacks.push(callback); | ||
| }; | ||
| /** | ||
| * @private | ||
| * @type {Array} | ||
| * @return {boolean} | ||
| */ | ||
| this.processedCallbacks = []; | ||
| BugPackSourceProcessor.prototype.hasProcessed = function() { | ||
| return this.processed; | ||
| }; | ||
| /** | ||
| * @private | ||
| * @type {boolean} | ||
| * @return {boolean} | ||
| */ | ||
| this.processingStarted = false; | ||
| }; | ||
| BugPackSourceProcessor.prototype.hasProcessingStarted = function() { | ||
| return this.processingStarted; | ||
| }; | ||
| /** | ||
| * | ||
| */ | ||
| BugPackSourceProcessor.prototype.process = function() { | ||
| if (!this.processed && !this.processingStarted) { | ||
| this.processingStarted = true; | ||
| this.processSource(); | ||
| } | ||
| }; | ||
| //------------------------------------------------------------------------------- | ||
| // Getters and Setters | ||
| //------------------------------------------------------------------------------- | ||
| /** | ||
| * | ||
| */ | ||
| BugPackSourceProcessor.prototype.processSync = function() { | ||
| if (!this.processed) { | ||
| this.processSourceSync(); | ||
| } | ||
| }; | ||
| /** | ||
| * @return {BugPackSource} | ||
| */ | ||
| BugPackSourceProcessor.prototype.getBugPackSource = function() { | ||
| return this.bugPackSource; | ||
| }; | ||
| //------------------------------------------------------------------------------- | ||
| // Private Methods | ||
| //------------------------------------------------------------------------------- | ||
| //------------------------------------------------------------------------------- | ||
| // Public Methods | ||
| //------------------------------------------------------------------------------- | ||
| //TODO BRN: This class is super tightly coupled with BugPackContext and really ugly. Figure out how to cleanly break this apart. | ||
| /** | ||
| * @param {function(Error=)} callback | ||
| */ | ||
| BugPackSourceProcessor.prototype.addProcessedCallback = function(callback) { | ||
| this.processedCallbacks.push(callback); | ||
| }; | ||
| /** | ||
| * @private | ||
| */ | ||
| BugPackSourceProcessor.prototype.loadBugPackSource = function() { | ||
| var _this = this; | ||
| if (!this.bugPackSource.hasLoaded()) { | ||
| this.bugPackSource.addLoadCallback(function(error) { | ||
| _this.processingComplete(error); | ||
| }); | ||
| if (!this.bugPackSource.hasLoadStarted()) { | ||
| this.bugPackContext.getBugPackApi().setCurrentContext(this.bugPackContext); | ||
| this.bugPackSource.load(); | ||
| } | ||
| } else { | ||
| this.processingComplete(); | ||
| } | ||
| }; | ||
| /** | ||
| * @return {boolean} | ||
| */ | ||
| BugPackSourceProcessor.prototype.hasProcessed = function() { | ||
| return this.processed; | ||
| }; | ||
| /** | ||
| * @private | ||
| */ | ||
| BugPackSourceProcessor.prototype.loadBugPackSourceSync = function() { | ||
| if (!this.bugPackSource.hasLoaded()) { | ||
| if (!this.bugPackSource.hasLoadStarted()) { | ||
| this.bugPackContext.getBugPackApi().setCurrentContext(this.bugPackContext); | ||
| this.bugPackSource.loadSync(); | ||
| } | ||
| } | ||
| }; | ||
| /** | ||
| * @return {boolean} | ||
| */ | ||
| BugPackSourceProcessor.prototype.hasProcessingStarted = function() { | ||
| return this.processingStarted; | ||
| }; | ||
| /** | ||
| * | ||
| */ | ||
| BugPackSourceProcessor.prototype.process = function() { | ||
| if (!this.processed && !this.processingStarted) { | ||
| this.processingStarted = true; | ||
| this.processSource(); | ||
| } | ||
| }; | ||
| /** | ||
| * | ||
| */ | ||
| BugPackSourceProcessor.prototype.processSync = function() { | ||
| if (!this.processed) { | ||
| this.processSourceSync(); | ||
| } | ||
| }; | ||
| //------------------------------------------------------------------------------- | ||
| // Private Methods | ||
| //------------------------------------------------------------------------------- | ||
| //TODO BRN: This class is super tightly coupled with BugPackContext and really ugly. Figure out how to cleanly break this apart. | ||
| /** | ||
| * @private | ||
| */ | ||
| BugPackSourceProcessor.prototype.loadBugPackSource = function() { | ||
| var _this = this; | ||
| if (!this.bugPackSource.hasLoaded()) { | ||
| this.bugPackSource.addLoadCallback(function(error) { | ||
| _this.processingComplete(error); | ||
| }); | ||
| if (!this.bugPackSource.hasLoadStarted()) { | ||
| this.bugPackContext.getBugPackApi().setCurrentContext(this.bugPackContext); | ||
| this.bugPackSource.load(); | ||
| /** | ||
| * @private | ||
| * @param {Error=} error | ||
| */ | ||
| BugPackSourceProcessor.prototype.processingComplete = function(error) { | ||
| if (!this.processed) { | ||
| this.processed = true; | ||
| this.processedCallbacks.forEach(function (processedCallback) { | ||
| processedCallback(error); | ||
| }); | ||
| this.processedCallbacks = []; | ||
| } | ||
| } else { | ||
| this.processingComplete(); | ||
| } | ||
| }; | ||
| }; | ||
| /** | ||
| * @private | ||
| */ | ||
| BugPackSourceProcessor.prototype.loadBugPackSourceSync = function() { | ||
| if (!this.bugPackSource.hasLoaded()) { | ||
| if (!this.bugPackSource.hasLoadStarted()) { | ||
| this.bugPackContext.getBugPackApi().setCurrentContext(this.bugPackContext); | ||
| this.bugPackSource.loadSync(); | ||
| /** | ||
| * @private | ||
| */ | ||
| BugPackSourceProcessor.prototype.processSource = function() { | ||
| var _this = this; | ||
| var registryEntry = this.bugPackContext.getRegistry().getEntryBySourceFilePath(this.bugPackSource.getSourceFilePath()); | ||
| var requiredExports = registryEntry.getRequires(); | ||
| if (requiredExports.length > 0) { | ||
| var loadedExportsCount = 0; | ||
| requiredExports.forEach(function(requiredExport) { | ||
| _this.bugPackContext.processExport(requiredExport, function(error) { | ||
| if (!error) { | ||
| loadedExportsCount++; | ||
| if (loadedExportsCount === requiredExports.length) { | ||
| _this.loadBugPackSource(); | ||
| } | ||
| } else { | ||
| _this.processingComplete(error); | ||
| } | ||
| }); | ||
| }); | ||
| } else { | ||
| this.loadBugPackSource(); | ||
| } | ||
| } | ||
| }; | ||
| }; | ||
| /** | ||
| * @private | ||
| * @param {Error=} error | ||
| */ | ||
| BugPackSourceProcessor.prototype.processingComplete = function(error) { | ||
| if (!this.processed) { | ||
| this.processed = true; | ||
| this.processedCallbacks.forEach(function (processedCallback) { | ||
| processedCallback(error); | ||
| }); | ||
| this.processedCallbacks = []; | ||
| } | ||
| }; | ||
| /** | ||
| * @private | ||
| */ | ||
| BugPackSourceProcessor.prototype.processSourceSync = function() { | ||
| var _this = this; | ||
| var registryEntry = this.bugPackContext.getRegistry().getEntryBySourceFilePath(this.bugPackSource.getSourceFilePath()); | ||
| var requiredExports = registryEntry.getRequires(); | ||
| /** | ||
| * @private | ||
| */ | ||
| BugPackSourceProcessor.prototype.processSource = function() { | ||
| var _this = this; | ||
| var registryEntry = this.bugPackContext.getRegistry().getEntryBySourceFilePath(this.bugPackSource.getSourceFilePath()); | ||
| var requiredExports = registryEntry.getRequires(); | ||
| if (requiredExports.length > 0) { | ||
| var loadedExportsCount = 0; | ||
| requiredExports.forEach(function(requiredExport) { | ||
| _this.bugPackContext.processExport(requiredExport, function(error) { | ||
| if (!error) { | ||
| loadedExportsCount++; | ||
| if (loadedExportsCount === requiredExports.length) { | ||
| _this.loadBugPackSource(); | ||
| } | ||
| } else { | ||
| _this.processingComplete(error); | ||
| } | ||
| }); | ||
| _this.bugPackContext.processExportSync(requiredExport); | ||
| }); | ||
| } else { | ||
| this.loadBugPackSource(); | ||
| } | ||
| }; | ||
| this.loadBugPackSourceSync(); | ||
| }; | ||
| /** | ||
| * @private | ||
| */ | ||
| BugPackSourceProcessor.prototype.processSourceSync = function() { | ||
| var _this = this; | ||
| var registryEntry = this.bugPackContext.getRegistry().getEntryBySourceFilePath(this.bugPackSource.getSourceFilePath()); | ||
| var requiredExports = registryEntry.getRequires(); | ||
| requiredExports.forEach(function(requiredExport) { | ||
| _this.bugPackContext.processExportSync(requiredExport); | ||
| }); | ||
| this.loadBugPackSourceSync(); | ||
| }; | ||
| //------------------------------------------------------------------------------- | ||
| // Exports | ||
| //------------------------------------------------------------------------------- | ||
| //------------------------------------------------------------------------------- | ||
| // Exports | ||
| //------------------------------------------------------------------------------- | ||
| module.exports = BugPackSourceProcessor; | ||
| module.exports = BugPackSourceProcessor; | ||
| }); |
+1
-1
| { | ||
| "name": "bugpack", | ||
| "version": "0.1.14", | ||
| "version": "0.2.0", | ||
| "description": "Package manager and loader to help make browser and node js package loading consistent and easier", | ||
@@ -5,0 +5,0 @@ "main": "./lib/BugPackApi.js", |
+5
-5
@@ -17,3 +17,3 @@ # bugpack | ||
| Latest Version `0.1.13` | ||
| Latest Version `0.1.14` | ||
@@ -48,4 +48,4 @@ NOTE: This documentation is still being written. If you click on a link and it | ||
| https://s3.amazonaws.com/public-airbug/bugpack-0.1.13.js | ||
| https://s3.amazonaws.com/public-airbug/bugpack-0.1.13.min.js | ||
| https://s3.amazonaws.com/public-airbug/bugpack-0.1.14.js | ||
| https://s3.amazonaws.com/public-airbug/bugpack-0.1.14.min.js | ||
@@ -62,3 +62,3 @@ | ||
| ```html | ||
| <script type="text/javascript" src="https://s3.amazonaws.com/public-airbug/bugpack-0.1.13.min.js"></script> | ||
| <script type="text/javascript" src="https://s3.amazonaws.com/public-airbug/bugpack-0.1.14.min.js"></script> | ||
| ``` | ||
@@ -80,3 +80,3 @@ | ||
| ```html | ||
| <script type="text/javascript" src="https://s3.amazonaws.com/public-airbug/bugpack-0.1.13.js"></script> | ||
| <script type="text/javascript" src="https://s3.amazonaws.com/public-airbug/bugpack-0.1.14.js"></script> | ||
| <script type="text/javascript"> | ||
@@ -83,0 +83,0 @@ |
Dynamic require
Supply chain riskDynamic require can indicate the package is performing dangerous or unsafe dynamic code execution.
Found 1 instance in 1 package
Filesystem access
Supply chain riskAccesses the file system, and could potentially read sensitive data.
Found 1 instance in 1 package
Major refactor
Supply chain riskPackage has recently undergone a major refactor. It may be unstable or indicate significant internal changes. Use caution when updating to versions that include significant changes.
Found 1 instance in 1 package
Dynamic require
Supply chain riskDynamic require can indicate the package is performing dangerous or unsafe dynamic code execution.
Found 1 instance in 1 package
Filesystem access
Supply chain riskAccesses the file system, and could potentially read sensitive data.
Found 1 instance in 1 package
77830
12.72%15
7.14%2104
9.47%0
-100%