babel-plugin-transform-metadata
Advanced tools
Comparing version 0.0.4 to 0.0.5
@@ -49,2 +49,5 @@ 'use strict'; | ||
a: A; | ||
ErrorableElement: Class<React$Component<void, { | ||
error: ?string|React$Component, | ||
}, void>>; | ||
/* @args *-/ | ||
@@ -83,3 +86,3 @@ d: D; | ||
function test(depA /*: A*/, /* @args */d /*: D*/, d2 /*: D*/) /*: void*/ {} | ||
function test /*:: <F: Object>*/(depA /*: A*/, f /*: F*/, /* @args */d /*: D*/, d2 /*: D*/) /*: void*/ {} | ||
@@ -89,3 +92,3 @@ exports.default = test; | ||
var types = [[(_3.default /*: R*/), '213']]; | ||
var types = [[(_3.default /*: R*/ /*: IT3*/), '213'], [(_3.default), '321']]; | ||
//# sourceMappingURL=Example.js.map |
'use strict'; | ||
exports.__esModule = true; | ||
exports.C = exports.Widget3 = exports.Widget2 = exports.Widget = exports.B = exports.A = undefined; | ||
exports.test2 = test2; | ||
var _inject2 = require('reactive-di/inject'); | ||
var _inject3 = _interopRequireDefault(_inject2); | ||
function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } | ||
function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } } | ||
@@ -20,2 +13,7 @@ | ||
function _inject(params, target /*: any*/) { | ||
target[Symbol.for('design:paramtypes')] = params; | ||
} | ||
var A = exports.A = function A() { | ||
@@ -38,3 +36,3 @@ _classCallCheck(this, A); | ||
(0, _inject3.default)([{ | ||
_inject([{ | ||
a: A, | ||
@@ -54,3 +52,3 @@ i: 'ITest.3402154763' | ||
(0, _inject3.default)([{ | ||
_inject([{ | ||
a: A, | ||
@@ -61,3 +59,6 @@ i: 'ITest.1013217576' | ||
/*:: type W2Props = { | ||
a: A | ||
a: A; | ||
ErrorableElement: Class<React$Component<void, { | ||
error: ?string | React$Component | ||
}, void>> | ||
/* @args *-/ | ||
@@ -72,4 +73,5 @@ ; d: D; | ||
(0, _inject3.default)([{ | ||
a: A | ||
_inject([{ | ||
a: A, | ||
ErrorableElement: 'Class' | ||
}], Widget2); | ||
@@ -90,3 +92,3 @@ | ||
(0, _inject3.default)([{ | ||
_inject([{ | ||
a: A | ||
@@ -106,7 +108,7 @@ }], Widget3); | ||
(0, _inject3.default)([B, 'R', 'ITest.3402154763', 'ITest.3402154763'], C); | ||
_inject([B, 'R', 'ITest.3402154763', 'ITest.3402154763'], C); | ||
function test(depA /*: A*/, /* @args */d /*: D*/, d2 /*: D*/) /*: void*/ {} | ||
function test /*:: <F: Object>*/(depA /*: A*/, f /*: F*/, /* @args */d /*: D*/, d2 /*: D*/) /*: void*/ {} | ||
(0, _inject3.default)([A], test); | ||
_inject([A, 'F'], test); | ||
@@ -116,7 +118,7 @@ exports.default = test; | ||
(0, _inject3.default)([{ | ||
_inject([{ | ||
a: A | ||
}], test2); | ||
var types = [['R', '213']]; | ||
var types = [['R', '213'], ['ITest.1013217576', '321']]; | ||
//# sourceMappingURL=ExampleTranspiled.js.map |
@@ -29,3 +29,4 @@ 'use strict'; | ||
plugins: ['syntax-flow', 'syntax-decorators', [pluginPath, { | ||
reflectImport: 'reactive-di/inject' | ||
metaDriver: 'symbol', | ||
driverImport: 'reactive-di/inject' | ||
}]] | ||
@@ -48,3 +49,3 @@ }; | ||
filepath: 'src/__tests__/transformTest.js', | ||
line: 32 | ||
line: 33 | ||
})); | ||
@@ -51,0 +52,0 @@ }); |
@@ -14,3 +14,3 @@ 'use strict'; | ||
function createCreateCreateGenericTypeMetadata(t, externalTypeNames, internalTypes, depsId) { | ||
function createCreateCreateGenericTypeMetadata(t, externalTypeNames, internalTypes, depsId, externalClassNames) { | ||
return function createCreateGenericTypeMetadata(createObjectTypeMetadata) { | ||
@@ -22,2 +22,8 @@ return function createGenericTypeMetadata(annotation) { | ||
} | ||
if (!externalClassNames.has(id.name)) { | ||
// console.log(externalClassNames) | ||
return t.stringLiteral(id.name); | ||
// return createObjectTypeMetadata(internalType) | ||
// throw new Error(`Unknown type detected: ${generate(annotation).code}`) | ||
} | ||
@@ -24,0 +30,0 @@ if (annotation.typeParameters) { |
@@ -5,7 +5,11 @@ 'use strict'; | ||
exports.default = createCreateCreateObjectTypeMetadata; | ||
// import generate from 'babel-generator' | ||
function createCreateCreateObjectTypeMetadata(t, hasComment, depsId) { | ||
function isDepsId(_ref) /*: boolean*/ { | ||
var value = _ref.value; | ||
return value.id.name === depsId; | ||
function isDepsId(prop) /*: boolean*/ { | ||
if (!prop.value || !prop.value.id) { | ||
// throw new Error(`isDepsId: not found value property in ${generate(prop).code}`) | ||
return false; | ||
} | ||
return prop.value.id.name === depsId; | ||
} | ||
@@ -22,6 +26,3 @@ | ||
return typeForAnnotation(pr.value.typeParameters.params[0]); | ||
// properties = pr.value.typeParameters.params[0].properties | ||
} | ||
// console.log(properties) | ||
// | ||
} | ||
@@ -34,2 +35,8 @@ | ||
if (!key || !value) { | ||
// throw new Error( | ||
// `createObjectTypeMetadata: Not found value property in ${generate(property).code}` | ||
// ) | ||
break; | ||
} | ||
var val = typeForAnnotation(value); | ||
@@ -36,0 +43,0 @@ if (val) { |
@@ -20,3 +20,3 @@ "use strict"; | ||
// console.log(typeAnnotation.id) | ||
if (typeAnnotation.id && typeAnnotation.id.name === depsId) { | ||
if (typeAnnotation && typeAnnotation.id && typeAnnotation.id.name === depsId) { | ||
break; | ||
@@ -23,0 +23,0 @@ } |
@@ -30,13 +30,13 @@ 'use strict'; | ||
var _createReflectionParamTypes = require('./factories/createReflectionParamTypes'); | ||
var _createHasComment = require('./factories/createHasComment'); | ||
var _createReflectionParamTypes2 = _interopRequireDefault(_createReflectionParamTypes); | ||
var _createHasComment2 = _interopRequireDefault(_createHasComment); | ||
var _createInjectParamTypes = require('./factories/createInjectParamTypes'); | ||
var _createGetUniqueTypeName = require('./factories/createGetUniqueTypeName'); | ||
var _createInjectParamTypes2 = _interopRequireDefault(_createInjectParamTypes); | ||
var _createGetUniqueTypeName2 = _interopRequireDefault(_createGetUniqueTypeName); | ||
var _createHasComment = require('./factories/createHasComment'); | ||
var _createParentPathInsertAfter = require('./modifiers/createParentPathInsertAfter'); | ||
var _createHasComment2 = _interopRequireDefault(_createHasComment); | ||
var _createParentPathInsertAfter2 = _interopRequireDefault(_createParentPathInsertAfter); | ||
@@ -47,9 +47,9 @@ var _createReplaceMagicTypeCasts = require('./modifiers/createReplaceMagicTypeCasts'); | ||
var _createParentPathInsertAfter = require('./modifiers/createParentPathInsertAfter'); | ||
var _createInjectorDeclaration = require('./metaCreators/createInjectorDeclaration'); | ||
var _createParentPathInsertAfter2 = _interopRequireDefault(_createParentPathInsertAfter); | ||
var _createInjectorDeclaration2 = _interopRequireDefault(_createInjectorDeclaration); | ||
var _createGetUniqueTypeName = require('./factories/createGetUniqueTypeName'); | ||
var _createInjectParamTypes = require('./metaCreators/createInjectParamTypes'); | ||
var _createGetUniqueTypeName2 = _interopRequireDefault(_createGetUniqueTypeName); | ||
var _createInjectParamTypes2 = _interopRequireDefault(_createInjectParamTypes); | ||
@@ -62,3 +62,2 @@ function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } | ||
return { | ||
visitor: { | ||
@@ -72,9 +71,11 @@ Program: function Program(path, _ref2) { | ||
getUniqueTypeName: getUniqueTypeName, | ||
reflectImport: opts.reflectImport, | ||
driverImport: opts.driverImport, | ||
ambiantTypeCastImport: opts.ambiantTypeCastImport || 'babel-plugin-transform-metadata/_', | ||
ambiantDepsImport: opts.ambiantDepsImport || 'babel-plugin-transform-metadata/Deps', | ||
lastImportPath: null, | ||
depsId: null, | ||
injectId: null, | ||
ambiantTypeCast: null, | ||
externalClassNames: new Map(), | ||
internalTypes: new Map(), | ||
@@ -90,19 +91,15 @@ externalTypeNames: new Map(), | ||
var createCreateObjectTypeMetadata = (0, _createCreateCreateObjectTypeMetadata2.default)(t, hasComment, state.depsId); | ||
var createCreateGenericTypeMetadata = (0, _createCreateCreateGenericTypeMetadata2.default)(t, state.externalTypeNames, state.internalTypes, state.depsId); | ||
var createCreateGenericTypeMetadata = (0, _createCreateCreateGenericTypeMetadata2.default)(t, state.externalTypeNames, state.internalTypes, state.depsId, state.externalClassNames); | ||
var typeForAnnotation = (0, _createTypeForAnnotation2.default)(t, state.externalTypeNames, createCreateObjectTypeMetadata, createCreateGenericTypeMetadata); | ||
var typeForAnnotations = (0, _createTypeForAnnotations2.default)(hasComment, typeForAnnotation, state.depsId); | ||
var defineParamTypes = void 0; | ||
var reactImportDeclaration = void 0; | ||
var injectId = state.injectId || file.scope.generateUidIdentifier('inject'); | ||
if (opts.reflectImport) { | ||
var injectId = state.injectId || file.scope.generateUidIdentifier('inject'); | ||
if (!state.injectId) { | ||
reactImportDeclaration = t.importDeclaration([t.importDefaultSpecifier(injectId)], t.stringLiteral(opts.reflectImport)); | ||
} | ||
defineParamTypes = (0, _createInjectParamTypes2.default)(t, injectId, typeForAnnotations); | ||
} else { | ||
defineParamTypes = (0, _createReflectionParamTypes2.default)(t, 'design:paramtypes', typeForAnnotations); | ||
var injectorDeclaration = null; | ||
if (opts.metaDriver !== 'import' || !state.injectId) { | ||
injectorDeclaration = (0, _createInjectorDeclaration2.default)(t, opts.driverImport, opts.metaDriver || 'symbol', injectId, 'design:paramtypes'); | ||
} | ||
var defineParamTypes = (0, _createInjectParamTypes2.default)(t, injectId, typeForAnnotations); | ||
var parentPathInsertAfter = (0, _createParentPathInsertAfter2.default)(defineParamTypes); | ||
@@ -124,4 +121,8 @@ | ||
} | ||
if (reactImportDeclaration) { | ||
path.node.body.unshift(reactImportDeclaration); | ||
if (injectorDeclaration) { | ||
if (state.lastImportPath) { | ||
state.lastImportPath.insertAfter(injectorDeclaration); | ||
} else { | ||
path.node.body.unshift(injectorDeclaration); | ||
} | ||
} | ||
@@ -128,0 +129,0 @@ } |
@@ -35,2 +35,3 @@ 'use strict'; | ||
params = node.params; | ||
// console.log(params) | ||
} | ||
@@ -37,0 +38,0 @@ |
@@ -9,3 +9,3 @@ 'use strict'; | ||
var strPath = node.source.value; | ||
if (strPath === state.reflectImport) { | ||
if (strPath === state.driverImport) { | ||
state.injectId = node.specifiers[0].local; | ||
@@ -15,2 +15,4 @@ } | ||
state.ambiantTypeCast = path; | ||
} else { | ||
state.lastImportPath = path; | ||
} | ||
@@ -21,5 +23,10 @@ if (strPath === state.ambiantDepsImport) { | ||
}, | ||
ClassDeclaration: function ClassDeclaration(path, state) { | ||
var node = path.node; | ||
state.externalClassNames.set(node.id.name, node.id.name); | ||
}, | ||
ImportSpecifier: function ImportSpecifier(path, state) { | ||
var node = path.node; | ||
var parent = path.parent; | ||
state.externalClassNames.set(node.local.name, node.imported.name); | ||
if (parent.importKind !== 'type') { | ||
@@ -48,2 +55,3 @@ return; | ||
var parent = path.parent; | ||
state.externalClassNames.set(node.id.name, node.id.name); | ||
if (parent.type !== 'ExportNamedDeclaration') { | ||
@@ -50,0 +58,0 @@ state.internalTypes.set(node.id.name, node.right); |
{ | ||
"name": "babel-plugin-transform-metadata", | ||
"version": "0.0.4", | ||
"version": "0.0.5", | ||
"description": "Reflection metadata support for classes and functions", | ||
@@ -5,0 +5,0 @@ "publishConfig": { |
Sorry, the diff of this file is not supported yet
Sorry, the diff of this file is not supported yet
Sorry, the diff of this file is not supported yet
Sorry, the diff of this file is not supported yet
Sorry, the diff of this file is not supported yet
Sorry, the diff of this file is not supported yet
Sorry, the diff of this file is not supported yet
Sorry, the diff of this file is not supported yet
Sorry, the diff of this file is not supported yet
72354
632