Skip to content

Commit e6ee2cc

Browse files
Merge pull request #56
Add support for `packageDev` parameter to enable dev package installations
2 parents 95bfe45 + 57cf77e commit e6ee2cc

15 files changed

Lines changed: 268 additions & 22 deletions

File tree

README.md

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -108,6 +108,11 @@ image:
108108
# the `packageManager` parameter.
109109
packageGlobal: false
110110

111+
# Add a prefix for dev installation (`composer require --dev`, `npm install --save-dev`)
112+
# The parameter will be ignored when a non-standard package manager name is specified in
113+
# the `packageManager` parameter
114+
packageDev: false
115+
111116
# By default, the repository name will be used.
112117
# For example, for https://github.com/TheDragonCode/github-preview-updater, it will take `preview-updater`
113118
# and convert it to `Preview Updater`.

resources/schema.json

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -72,6 +72,11 @@
7272
"description": "Add prefix for global installation",
7373
"default": false
7474
},
75+
"packageDev": {
76+
"type": "boolean",
77+
"description": "Add a prefix for dev installation",
78+
"default": false
79+
},
7580
"title": {
7681
"type": "string",
7782
"description": "Banner title. The repository name is used by default"

src/types/config.ts

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -7,6 +7,7 @@ export interface ImageParameters {
77
packageManager: "composer" | "npm" | "yarn" | "auto" | "none" | string;
88
packageName?: string;
99
packageGlobal: boolean;
10+
packageDev: boolean;
1011

1112
title?: string;
1213
description?: string;
@@ -73,6 +74,7 @@ export const defaultConfig: Config = {
7374

7475
packageManager: "auto",
7576
packageGlobal: false,
77+
packageDev: false,
7678
packageName: undefined,
7779

7880
title: undefined,

src/utils/image.ts

Lines changed: 33 additions & 19 deletions
Original file line numberDiff line numberDiff line change
@@ -4,39 +4,53 @@ import { encodeUri } from "./strings";
44
import type { Package } from "../types/package";
55
import { detectIcon } from "./icons";
66

7-
const detectPackageManager = (config: Config, visibility: string): string => {
7+
const command = (manager: string, dev: boolean, global: boolean): string => {
8+
switch (manager) {
9+
case "composer":
10+
return `composer${global ? " global" : ""} require${dev ? " --dev" : ""}`;
11+
case "npm":
12+
return `npm install${global ? " -g" : ""}${dev ? " -D" : ""}`;
13+
case "yarn":
14+
return `yarn${global ? " global" : ""} add${dev ? " -D" : ""}`;
15+
default:
16+
return manager;
17+
}
18+
};
19+
20+
const detectPackageManager = (config: Config): string => {
821
if (hasComposer(config)) {
9-
return `composer${visibility} require`;
22+
return "composer";
1023
}
1124

1225
if (hasNpm(config)) {
13-
return `npm${visibility} install`;
26+
return "npm";
1427
}
1528

1629
if (hasYarn(config)) {
17-
return `yarn${visibility} add`;
30+
return "yarn";
1831
}
1932

20-
return "";
33+
return "none";
2134
};
2235

2336
const packageManager = (config: Config): string => {
24-
const visibility = config.image.parameters.packageGlobal ? " global" : "";
37+
const global: boolean = config.image.parameters.packageGlobal;
38+
const dev: boolean = config.image.parameters.packageDev;
39+
let name: string = config.image.parameters.packageManager;
2540

26-
switch (config.image.parameters.packageManager) {
27-
case "composer":
28-
return `composer${visibility} require`;
29-
case "npm":
30-
return `npm${visibility} install`;
31-
case "yarn":
32-
return `yarn${visibility} add`;
33-
case "auto":
34-
return detectPackageManager(config, visibility);
35-
case "none":
36-
return "";
37-
default:
38-
return config.image.parameters.packageManager;
41+
if (name === "none") {
42+
return "";
43+
}
44+
45+
if (name === "auto") {
46+
name = detectPackageManager(config);
47+
}
48+
49+
if (["composer", "npm", "yarn"].includes(name)) {
50+
return command(name, dev, global);
3951
}
52+
53+
return config.image.parameters.packageManager.trim();
4054
};
4155

4256
const packageName = (image: ImageParameters): string => {
Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,4 @@
1+
image:
2+
parameters:
3+
packageManager: composer
4+
packageDev: true
Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,5 @@
1+
image:
2+
parameters:
3+
packageManager: composer
4+
packageGlobal: true
5+
packageDev: true
Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,4 @@
1+
image:
2+
parameters:
3+
packageManager: foo
4+
packageDev: true
Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,5 @@
1+
image:
2+
parameters:
3+
packageManager: foo
4+
packageGlobal: true
5+
packageDev: true

tests/fixtures/configs/npm-dev.yml

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,4 @@
1+
image:
2+
parameters:
3+
packageManager: npm
4+
packageDev: true
Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,5 @@
1+
image:
2+
parameters:
3+
packageManager: npm
4+
packageGlobal: true
5+
packageDev: true

0 commit comments

Comments
 (0)