react-obsidian
Version:
Dependency injection framework for React and React Native applications
91 lines • 3.7 kB
JavaScript
Object.defineProperty(exports, "__esModule", { value: true });
exports.providerIsNotNamed = providerIsNotNamed;
exports.addNameToProviderArguments = addNameToProviderArguments;
exports.getDecoratorObjectArgument = getDecoratorObjectArgument;
exports.getDecoratorStringArgument = getDecoratorStringArgument;
exports.getMethodName = getMethodName;
exports.getDecoratorByName = getDecoratorByName;
exports.getDecoratorName = getDecoratorName;
exports.paramsToDestructuringAssignment = paramsToDestructuringAssignment;
exports.passParamNameAsInjectArgument = passParamNameAsInjectArgument;
/* eslint-disable no-param-reassign */
const core_1 = require("@babel/core");
const never = '';
function providerIsNotNamed(decorator) {
const argument = getDecoratorObjectArgument(decorator);
if (core_1.types.isObjectExpression(argument)) {
return argument.properties.find((p) => {
if (core_1.types.isObjectProperty(p)) {
return core_1.types.isIdentifier(p.key) && p.key.name === 'name';
}
return false;
}) === undefined;
}
return true;
}
function addNameToProviderArguments(node, decorator) {
var _a;
const argument = (_a = getDecoratorObjectArgument(decorator)) !== null && _a !== void 0 ? _a : core_1.types.objectExpression([]);
argument.properties.push(core_1.types.objectProperty(core_1.types.identifier('name'), core_1.types.stringLiteral(getMethodName(node))));
decorator.expression.arguments = [argument];
}
function getDecoratorObjectArgument(decorator) {
if (core_1.types.isCallExpression(decorator.expression)) {
return decorator.expression.arguments.find((a) => core_1.types.isObjectExpression(a));
}
return undefined;
}
function getDecoratorStringArgument(decorator) {
if (core_1.types.isCallExpression(decorator.expression)) {
return decorator.expression.arguments.find(a => core_1.types.isStringLiteral(a));
}
return undefined;
}
function getMethodName(node) {
if (core_1.types.isIdentifier(node.key))
return node.key.name;
throw new Error(`Tried to get class name but encountered unexpected key of type: ${node.key.type}`);
}
function getDecoratorByName(decorators, decoratorName) {
return decorators === null || decorators === void 0 ? void 0 : decorators.find((decorator) => get(decorator, 'expression.callee.name') === decoratorName);
}
function getDecoratorName(decorator) {
return get(decorator, 'expression.callee.name');
}
function paramsToDestructuringAssignment(params) {
return core_1.types.objectPattern(params
.filter((p) => core_1.types.isIdentifier(p))
.map((p) => core_1.types.objectProperty(core_1.types.identifier(p.name), core_1.types.identifier(p.name))));
}
function passParamNameAsInjectArgument(node, decorator) {
if (core_1.types.isCallExpression(decorator.expression)) {
decorator.expression.arguments = [
core_1.types.stringLiteral(getNodeName(node)),
];
}
}
function getNodeName(node) {
if (core_1.types.isTSParameterProperty(node)) {
if (core_1.types.isIdentifier(node.parameter)) {
return node.parameter.name;
}
return never;
}
if (core_1.types.isClassProperty(node)) {
if (core_1.types.isIdentifier(node.key)) {
return node.key.name;
}
return never;
}
return node.name;
}
function get(node, path) {
if (node === undefined || node === null)
return undefined;
const [key, ...rest] = path.split('.');
if (rest.length === 0)
return node[key];
return get(node[key], rest.join('.'));
}
//# sourceMappingURL=index.js.map
;