Skip to content

Commit a64d29d

Browse files
[ZETA-6483]: add dependency type logic (#10)
* ZETA-6483: Add more unit tests. * ZETA-6483: Wire up dependency type.
1 parent 38d95bd commit a64d29d

File tree

3 files changed

+52
-1
lines changed

3 files changed

+52
-1
lines changed

src/npm/npm-install/npm-install.ts

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,4 @@
1+
import { determineDependencyType } from "../../utils/dependency-type/dependency-type";
12
import { extractPackageName } from "../../utils/command-search/command-search";
23
import { getNameAndVersion } from "../../utils/version/version";
34
import {morphCode, EditInput} from "@codemorph/core";
@@ -7,6 +8,7 @@ export async function npmInstallCodemorph(commandText: string, packageJsonString
78
const {name, version} = await getNameAndVersion(packageName);
89
const packageJsonParsed = JSON.parse(packageJsonString);
910
const packageJsonDependencies = packageJsonParsed && packageJsonParsed.dependencies;
11+
const dependencyType = determineDependencyType(commandText);
1012

1113
const editInput: EditInput = {
1214
fileType: 'json',
@@ -15,7 +17,7 @@ export async function npmInstallCodemorph(commandText: string, packageJsonString
1517
edits: [
1618
{
1719
nodeType: 'editJson' as any,
18-
valueToModify: '/dependencies',
20+
valueToModify: `/${dependencyType}`,
1921
codeBlock: {
2022
...packageJsonDependencies,
2123
[name]: version
Lines changed: 27 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,27 @@
1+
import { determineDependencyType } from "./dependency-type";
2+
3+
describe('determineDependencyType', () => {
4+
it('should return dev dependency type based on the command text', () => {
5+
const commandText = 'npm install @angular/core react --save-dev';
6+
const result = determineDependencyType(commandText);
7+
expect(result).toEqual('devDependencies')
8+
});
9+
10+
it('should return dependencies type based on --save flag', () => {
11+
const commandText = 'npm install @angular/core react --save';
12+
const result = determineDependencyType(commandText);
13+
expect(result).toEqual('dependencies');
14+
});
15+
16+
it('should return optionalDependencies type based on --save-optional flag', () => {
17+
const commandText = 'npm install @angular/core react --save-optional';
18+
const result = determineDependencyType(commandText);
19+
expect(result).toEqual('optionalDependencies');
20+
});
21+
22+
it('should return dependencies if no dependency type', () => {
23+
const commandText = 'npm install @angular/core react';
24+
const result = determineDependencyType(commandText);
25+
expect(result).toEqual('dependencies');
26+
});
27+
});
Lines changed: 22 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,22 @@
1+
export function determineDependencyType(commandText: string): string | undefined {
2+
const regexPattern = /--save(-dev|-optional)?/;
3+
const match = commandText.match(regexPattern);
4+
const saveFlag = match && match[0];
5+
if(match) {
6+
let saveLocation: string;
7+
switch (saveFlag) {
8+
case '--save-dev':
9+
saveLocation = 'devDependencies';
10+
break;
11+
case '--save-optional':
12+
saveLocation = 'optionalDependencies';
13+
break;
14+
default:
15+
saveLocation = 'dependencies';
16+
break;
17+
}
18+
return saveLocation;
19+
} else {
20+
return 'dependencies';
21+
}
22+
}

0 commit comments

Comments
 (0)