react-obsidian
Version:
Dependency injection framework for React and React Native applications
85 lines • 3.64 kB
JavaScript
Object.defineProperty(exports, "__esModule", { value: true });
exports.passParamNameAsInjectArgument = exports.paramsToDestructuringAssignment = exports.getDecoratorName = exports.getDecoratorByName = exports.getMethodName = exports.getDecoratorArgument = exports.addNameToProviderArguments = exports.providerIsNotNamed = void 0;
/* eslint-disable no-param-reassign */
const core_1 = require("@babel/core");
const never = '';
function providerIsNotNamed(decorator) {
const argument = getDecoratorArgument(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;
}
exports.providerIsNotNamed = providerIsNotNamed;
function addNameToProviderArguments(node, decorator) {
var _a;
const argument = (_a = getDecoratorArgument(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];
}
exports.addNameToProviderArguments = addNameToProviderArguments;
function getDecoratorArgument(decorator) {
if (core_1.types.isCallExpression(decorator.expression)) {
return decorator.expression.arguments.find((a) => core_1.types.isObjectExpression(a));
}
return undefined;
}
exports.getDecoratorArgument = getDecoratorArgument;
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}`);
}
exports.getMethodName = getMethodName;
function getDecoratorByName(decorators, decoratorName) {
return decorators === null || decorators === void 0 ? void 0 : decorators.find((decorator) => get(decorator, 'expression.callee.name') === decoratorName);
}
exports.getDecoratorByName = getDecoratorByName;
function getDecoratorName(decorator) {
return get(decorator, 'expression.callee.name');
}
exports.getDecoratorName = getDecoratorName;
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))));
}
exports.paramsToDestructuringAssignment = paramsToDestructuringAssignment;
function passParamNameAsInjectArgument(node, decorator) {
if (core_1.types.isCallExpression(decorator.expression)) {
decorator.expression.arguments = [
core_1.types.stringLiteral(getNodeName(node)),
];
}
}
exports.passParamNameAsInjectArgument = passParamNameAsInjectArgument;
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
;