Secure your code as it's written. Use Snyk Code to scan source code in minutes - no build needed - and fix issues immediately.
toInsert = ` ${keyInsert}\n`;
}
else {
node = expr.properties[expr.properties.length - 1];
position = node.getEnd() + 1;
// Get the indentation of the last element, if any.
const text = node.getFullText(source);
const matches = text.match(/^\r?\n+(\s*)/);
if (matches.length > 0) {
toInsert = `\n${matches[1]}${keyInsert}`;
}
else {
toInsert = `\n${keyInsert}`;
}
}
return new change_1.InsertChange(reducersPath, position, toInsert);
}
exports.addReducerToActionReducerMap = addReducerToActionReducerMap;
toInsert = ` ${metadataField}: [${symbolName}]\n`;
}
else {
node = expr.properties[expr.properties.length - 1];
position = node.getEnd();
// Get the indentation of the last element, if any.
const text = node.getFullText(source);
const matches = text.match(/^\r?\n\s*/);
if (matches.length > 0) {
toInsert = `,${matches[0]}${metadataField}: [${symbolName}]`;
}
else {
toInsert = `, ${metadataField}: [${symbolName}]`;
}
}
const newMetadataProperty = new change_1.InsertChange(ngModulePath, position, toInsert);
const newMetadataImport = insertImport(source, ngModulePath, symbolName.replace(/\..*$/, ''), importPath);
return [newMetadataProperty, newMetadataImport];
}
const assignment = matchingProperties[0];
// If it's not an array, nothing we can do really.
if (assignment.initializer.kind !== ts.SyntaxKind.ArrayLiteralExpression) {
return [];
}
const arrLiteral = assignment.initializer;
if (arrLiteral.elements.length == 0) {
// Forward the property.
node = arrLiteral;
}
else {
node = arrLiteral.elements;
}
epos = effectsArgs.getStart() + 1;
return [new change_1.InsertChange(ngModulePath, epos, effectsSymbol)];
}
else {
const lastEffect = effectsElements[effectsElements.length - 1];
epos = lastEffect.getEnd();
// Get the indentation of the last element, if any.
const text = lastEffect.getFullText(source);
let effectInsert;
if (text.match('^\r?\r?\n')) {
effectInsert = `,${text.match(/^\r?\n\s+/)[0]}${effectsSymbol}`;
}
else {
effectInsert = `, ${effectsSymbol}`;
}
return [new change_1.InsertChange(ngModulePath, epos, effectInsert)];
}
}
else {
return [];
}
}
}
let toInsert;
let position = node.getEnd();
if (node.kind == ts.SyntaxKind.ObjectLiteralExpression) {
// We haven't found the field in the metadata declaration. Insert a new
// field.
const expr = node;
if (expr.properties.length == 0) {
position = expr.getEnd() - 1;
toInsert = ` ${metadataField}: [${symbolName}]\n`;
toInsert = ` ${keyInsert}\n`;
}
else {
node = expr.members[expr.members.length - 1];
position = node.getEnd() + 1;
// Get the indentation of the last element, if any.
const text = node.getFullText(source);
const matches = text.match(/^\r?\n+(\s*)/);
if (matches.length > 0) {
toInsert = `${matches[1]}${keyInsert}\n`;
}
else {
toInsert = `\n${keyInsert}`;
}
}
return new change_1.InsertChange(reducersPath, position, toInsert);
}
exports.addReducerToStateInterface = addReducerToStateInterface;
else if (node.kind == ts.SyntaxKind.ArrayLiteralExpression) {
// We found the field but it's empty. Insert it just before the `]`.
position--;
toInsert = `${symbolName}`;
}
else {
// Get the indentation of the last element, if any.
const text = node.getFullText(source);
if (text.match(/^\r?\n/)) {
toInsert = `,${text.match(/^\r?\n(\r?)\s+/)[0]}${symbolName}`;
}
else {
toInsert = `, ${symbolName}`;
}
}
const insert = new change_1.InsertChange(ngModulePath, position, toInsert);
const importInsert = insertImport(source, ngModulePath, symbolName.replace(/\..*$/, ''), importPath);
return [insert, importInsert];
}
/**
node = node[node.length - 1];
const effectsModule = nodeArray.find(node => (node.getText().includes('EffectsModule.forRoot') &&
symbolName.includes('EffectsModule.forRoot')) ||
(node.getText().includes('EffectsModule.forFeature') &&
symbolName.includes('EffectsModule.forFeature')));
if (effectsModule && symbolName.includes('EffectsModule')) {
const effectsArgs = effectsModule.arguments.shift();
if (effectsArgs &&
effectsArgs.kind === ts.SyntaxKind.ArrayLiteralExpression) {
const effectsElements = effectsArgs
.elements;
const [, effectsSymbol] = symbolName.match(/\[(.*)\]/);
let epos;
if (effectsElements.length === 0) {
epos = effectsArgs.getStart() + 1;
return [new change_1.InsertChange(ngModulePath, epos, effectsSymbol)];
}
else {
const lastEffect = effectsElements[effectsElements.length - 1];
epos = lastEffect.getEnd();
// Get the indentation of the last element, if any.
const text = lastEffect.getFullText(source);
let effectInsert;
if (text.match('^\r?\r?\n')) {
effectInsert = `,${text.match(/^\r?\n\s+/)[0]}${effectsSymbol}`;
}
else {
effectInsert = `, ${effectsSymbol}`;
}
return [new change_1.InsertChange(ngModulePath, epos, effectInsert)];
}
}
function insertAfterLastOccurrence(nodes, toInsert, file, fallbackPos, syntaxKind) {
let lastItem = nodes.sort(nodesByPosition).pop();
if (!lastItem) {
throw new Error();
}
if (syntaxKind) {
lastItem = findNodes(lastItem, syntaxKind)
.sort(nodesByPosition)
.pop();
}
if (!lastItem && fallbackPos == undefined) {
throw new Error(`tried to insert ${toInsert} as first occurence with no fallback position`);
}
const lastItemPosition = lastItem ? lastItem.end : fallbackPos;
return new change_1.InsertChange(file, lastItemPosition, toInsert);
}
exports.insertAfterLastOccurrence = insertAfterLastOccurrence;