Separate componentType to its own file

This commit is contained in:
kzantow 2016-07-15 22:42:23 +09:00
parent 3397771a85
commit fdbe5a664f
7 changed files with 50 additions and 48 deletions

View File

@ -36,7 +36,7 @@
},
"dependencies": {
"@jenkins-cd/design-language": "0.0.60",
"@jenkins-cd/js-extensions": "0.0.19-beta-1",
"@jenkins-cd/js-extensions": "0.0.19-beta-2",
"@jenkins-cd/js-modules": "0.0.5",
"@jenkins-cd/sse-gateway": "0.0.5",
"immutable": "3.8.1",

View File

@ -26,7 +26,7 @@
},
"dependencies": {
"@jenkins-cd/design-language": "0.0.60",
"@jenkins-cd/js-extensions": "0.0.19-beta-1",
"@jenkins-cd/js-extensions": "0.0.19-beta-2",
"@jenkins-cd/js-modules": "0.0.5",
"history": "2.0.2",
"immutable": "3.8.1",

View File

@ -9,7 +9,9 @@ exports.dataType = function dataType(dataType) { return exports.classMetadataSto
exports.untyped = function untyped() { return exports.classMetadataStore.untyped(); };
exports.componentType = function componentType(componentType) { return exports.classMetadataStore.componentType(componentType); };
exports.isType = require('./dist/ComponentTypeFilter.js').isType;
exports.componentType = require('./dist/ComponentTypeFilter.js').componentType;
exports.init = function init(args) {
exports.classMetadataStore.init(args.classMetadataProvider);

View File

@ -1,6 +1,6 @@
{
"name": "@jenkins-cd/js-extensions",
"version": "0.0.19-beta-1",
"version": "0.0.19-beta-2",
"description": "Jenkins Extension Store",
"main": "index.js",
"files": [

View File

@ -2,6 +2,7 @@ var jsTest = require('@jenkins-cd/js-test');
var expect = require('chai').expect;
var ExtensionStore = require('../dist/ExtensionStore').ExtensionStore;
var ClassMetadataStore = require('../dist/ClassMetadataStore').instance;
var componentType = require('../dist/ComponentTypeFilter').componentType;
var javaScriptExtensionInfo = require('./javaScriptExtensionInfo-01.json');
// js modules calling console.debug
@ -262,22 +263,22 @@ describe("ExtensionStore.js", function () {
classMetadataStore: makeClassMetadataStore(function(type, cb) { cb({}); })
});
extensionStore.getExtensions('ep-3', [ClassMetadataStore.componentType(PretendComponent1)], function(extensions) {
extensionStore.getExtensions('ep-3', [componentType(PretendComponent1)], function(extensions) {
expect(extensions.length).to.equal(1);
expect(extensions).to.include.members([PretendComponent1]);
});
extensionStore.getExtensions('ep-3', [ClassMetadataStore.componentType(PretendComponent2)], function(extensions) {
extensionStore.getExtensions('ep-3', [componentType(PretendComponent2)], function(extensions) {
expect(extensions.length).to.equal(1);
expect(extensions).to.include.members([PretendComponent2]);
});
extensionStore.getExtensions('ep-3', [ClassMetadataStore.componentType(PretendReactClass)], function(extensions) {
extensionStore.getExtensions('ep-3', [componentType(PretendReactClass)], function(extensions) {
expect(extensions.length).to.equal(2);
expect(extensions).to.include.members([PretendComponent1, PretendComponent2]);
});
extensionStore.getExtensions('ep-3', [ClassMetadataStore.componentType(PretendReactClass), ClassMetadataStore.componentType(PretendComponent1)], function(extensions) {
extensionStore.getExtensions('ep-3', [componentType(PretendReactClass), componentType(PretendComponent1)], function(extensions) {
expect(extensions.length).to.equal(1);
expect(extensions).to.include.members([PretendComponent1]);
});

View File

@ -34,46 +34,6 @@ export class ClassMetadataStore {
});
}
/**
* Tries to determine if the objectToTest is of the given type.
* Will normalize things like String/'string' inconsistencies
* as well as ES6 class & traditional prototype inheritance.
* NOTE: This ALSO tests the prototype hierarchy if objectToTest
* is a Function.
*/
static isType(objectToTest, type) {
var o = objectToTest;
if (typeof o === type) {
return true;
}
if (type === String || type === 'string') {
return o instanceof String;
}
if (type === Function || type === 'function') {
return o instanceof Function;
}
if (type === Object || type === 'object') {
return o instanceof Object;
}
if (objectToTest instanceof Function) {
var proto = objectToTest;
while (proto) {
if (proto === type) {
return true;
}
proto = Object.getPrototypeOf(proto);
}
}
return objectToTest instanceof type;
}
componentType(componentType) {
return (extensions, onload) => {
extensions = extensions.filter(e => ClassMetadataStore.isType(e.instance, componentType));
onload(extensions);
};
}
dataType(dataType) {
return (extensions, onload) => {
if (dataType && typeof(dataType) === 'object'

View File

@ -0,0 +1,39 @@
/**
* Tries to determine if the objectToTest is of the given type.
* Will normalize things like String/'string' inconsistencies
* as well as ES6 class & traditional prototype inheritance.
* NOTE: This ALSO tests the prototype hierarchy if objectToTest
* is a Function.
*/
export function isType(objectToTest, type) {
var o = objectToTest;
if (typeof o === type) {
return true;
}
if (type === String || type === 'string') {
return o instanceof String;
}
if (type === Function || type === 'function') {
return o instanceof Function;
}
if (type === Object || type === 'object') {
return o instanceof Object;
}
if (objectToTest instanceof Function) {
var proto = objectToTest;
while (proto) {
if (proto === type) {
return true;
}
proto = Object.getPrototypeOf(proto);
}
}
return objectToTest instanceof type;
}
export function componentType(componentType) {
return (extensions, onload) => {
extensions = extensions.filter(e => isType(e.instance, componentType));
onload(extensions);
};
}