Skip to content

Commit ae2e694

Browse files
committed
feat: add ini formatter for Flow and add missing dependencies
1 parent 27a91e5 commit ae2e694

File tree

9 files changed

+69
-38
lines changed

9 files changed

+69
-38
lines changed

package.json

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -13,13 +13,15 @@
1313
"@oclif/plugin-help": "^3",
1414
"cli-ux": "^5.5.1",
1515
"cross-spawn": "^7.0.3",
16+
"ini": "^2.0.0",
1617
"inquirer": "^8.0.0",
1718
"js-yaml": "^4.0.0",
1819
"tslib": "^2.1.0"
1920
},
2021
"devDependencies": {
2122
"@oclif/dev-cli": "^1",
2223
"@types/cross-spawn": "^6",
24+
"@types/ini": "^1",
2325
"@types/inquirer": "^7",
2426
"@types/js-yaml": "^4",
2527
"@types/node": "^14",

src/actions/CreateConfigsFileAction.ts

Lines changed: 3 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -3,23 +3,12 @@ import { withCurrentDir, writeContentToFile } from "../process";
33
import { Action } from "./Action";
44

55
export class CreateConfigsFileAction extends Action {
6-
constructor(
7-
private fileName: string,
8-
private configs: object | string,
9-
private formatter: Formatter,
10-
) {
6+
constructor(private fileName: string, private configs: object, private formatter: Formatter) {
117
super();
128
}
139

1410
async exec() {
15-
if (typeof this.configs === "object") {
16-
const fileName = this.formatter.formatFileName(this.fileName);
17-
await writeContentToFile(
18-
withCurrentDir(`./${fileName}`),
19-
this.formatter.format(this.configs),
20-
);
21-
} else {
22-
await writeContentToFile(withCurrentDir(`./${this.fileName}`), this.configs);
23-
}
11+
const fileName = this.formatter.formatFileName(this.fileName);
12+
await writeContentToFile(withCurrentDir(fileName), this.formatter.format(this.configs));
2413
}
2514
}
Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,9 @@
1+
import { runCommand } from "../process";
2+
import { Action } from "./Action";
3+
4+
export class CreateFlowConfigsAction extends Action {
5+
async exec(): Promise<void> {
6+
// Fetch all types
7+
await runCommand("yarn", ["flow-typed", "install"]);
8+
}
9+
}

src/configs.ts

Lines changed: 15 additions & 17 deletions
Original file line numberDiff line numberDiff line change
@@ -47,20 +47,18 @@ export const postIgnoreFiles = `
4747
.vscode
4848
`;
4949

50-
export const flowConfigs = `
51-
[ignore]
52-
<PROJECT_ROOT>/node_modules/.*
53-
<PROJECT_ROOT>/\(build\|dist\|lib\)/.*
54-
<PROJECT_ROOT>/\(\.yarn\|te?mp\)/.*
55-
<PROJECT_ROOT>/coverage/.*
56-
57-
[include]
58-
59-
[libs]
60-
61-
[lints]
62-
63-
[options]
64-
65-
[strict]
66-
`;
50+
export const flowConfigs = {
51+
ignore: {
52+
"<PROJECT_ROOT>/node_modules/.*": true,
53+
"<PROJECT_ROOT>/\\(build\\|dist\\|lib\\)/.*": true,
54+
"<PROJECT_ROOT>/\\(\\.yarn\\|te?mp\\)/.*": true,
55+
"<PROJECT_ROOT>/coverage/.*": true,
56+
},
57+
include: {},
58+
libs: {},
59+
lints: {},
60+
options: {
61+
all: true,
62+
},
63+
strict: {},
64+
};

src/formatters/IniFormatter.ts

Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,12 @@
1+
import { encode } from "ini";
2+
import { Formatter } from "./Formatter";
3+
4+
export class IniFormatter extends Formatter {
5+
format(configs: object) {
6+
return encode(configs);
7+
}
8+
9+
formatFileName(fileName: string): string {
10+
return fileName;
11+
}
12+
}

src/generators/FlowGenerator.ts

Lines changed: 15 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -2,28 +2,39 @@ import { Action } from "../actions/Action";
22
import { AddDependenciesAction } from "../actions/AddDependenciesAction";
33
import { AddScriptsAction } from "../actions/AddScriptsAction";
44
import { CreateConfigsFileAction } from "../actions/CreateConfigsFileAction";
5+
import { CreateFlowConfigsAction } from "../actions/CreateFlowConfigsAction";
56
import { flowConfigs } from "../configs";
67
import { Formatter } from "../formatters/Formatter";
8+
import { IniFormatter } from "../formatters/IniFormatter";
79
import { Packager } from "../packagers/Packager";
810
import { InquirerConfigs } from "../types";
911
import { Generator } from "./Generator";
1012

1113
export class FlowGenerator extends Generator {
12-
generateConfigs(userConfigs: InquirerConfigs): [object | string, string[]] {
13-
return [flowConfigs, ["flow-bin"]];
14+
generateConfigs(userConfigs: InquirerConfigs): [object, string[]] {
15+
const configs: any = { ...flowConfigs };
16+
const packages = ["flow-bin", "flow-typed"];
17+
18+
if (userConfigs.framework === "react") {
19+
packages.push("@babel/plugin-transform-react-jsx");
20+
configs.options["react.runtime"] = "automatic";
21+
}
22+
23+
return [configs, packages];
1424
}
1525

1626
initActions(
17-
configs: string,
27+
configs: object,
1828
packages: string[],
1929
userConfigs: InquirerConfigs,
2030
formatter: Formatter,
2131
packager: Packager,
2232
): Action[] {
2333
return [
24-
new CreateConfigsFileAction(".flowconfig", configs, formatter),
34+
new CreateConfigsFileAction(".flowconfig", configs, new IniFormatter()),
2535
new AddScriptsAction({ "check:flow": "flow" }, userConfigs.scripts),
2636
new AddDependenciesAction(packages, packager),
37+
new CreateFlowConfigsAction(),
2738
];
2839
}
2940
}

src/generators/Generator.ts

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -11,10 +11,10 @@ export abstract class Generator {
1111
this.actions = this.initActions(configs, packages, userConfigs, formatter, packager);
1212
}
1313

14-
abstract generateConfigs(userConfigs: InquirerConfigs): [object | string, string[]];
14+
abstract generateConfigs(userConfigs: InquirerConfigs): [object, string[]];
1515

1616
abstract initActions(
17-
configs: object | string,
17+
configs: object,
1818
packages: string[],
1919
userConfigs: InquirerConfigs,
2020
formatter: Formatter,

src/generators/PostGenerator.ts

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -12,7 +12,7 @@ export class PostGenerator extends Generator {
1212
}
1313

1414
initActions(
15-
configs: string,
15+
configs: object,
1616
packages: string[],
1717
userConfigs: InquirerConfigs,
1818
formatter: Formatter,

yarn.lock

Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -176,6 +176,11 @@
176176
"@types/minimatch" "*"
177177
"@types/node" "*"
178178

179+
"@types/ini@^1":
180+
version "1.3.30"
181+
resolved "https://registry.yarnpkg.com/@types/ini/-/ini-1.3.30.tgz#d1485459c9fad84e937414b832a2adb649eab379"
182+
integrity sha512-2+iF8zPSbpU83UKE+PNd4r/MhwNAdyGpk3H+VMgEH3EhjFZq1kouLgRoZrmIcmoGX97xFvqdS44DkICR5Nz3tQ==
183+
179184
"@types/inquirer@^7":
180185
version "7.3.1"
181186
resolved "https://registry.yarnpkg.com/@types/inquirer/-/inquirer-7.3.1.tgz#1f231224e7df11ccfaf4cf9acbcc3b935fea292d"
@@ -1199,6 +1204,11 @@ inherits@2, inherits@^2.0.3, inherits@^2.0.4:
11991204
resolved "https://registry.yarnpkg.com/inherits/-/inherits-2.0.4.tgz#0fa2c64f932917c3433a0ded55363aae37416b7c"
12001205
integrity sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==
12011206

1207+
ini@^2.0.0:
1208+
version "2.0.0"
1209+
resolved "https://registry.yarnpkg.com/ini/-/ini-2.0.0.tgz#e5fd556ecdd5726be978fa1001862eacb0a94bc5"
1210+
integrity sha512-7PnF4oN3CvZF23ADhA5wRaYEQpJ8qygSkbtTXWBeXWXmEVRXK+1ITciHWwHhsjv1TmW0MgacIv6hEi5pX5NQdA==
1211+
12021212
inquirer@^8.0.0:
12031213
version "8.0.0"
12041214
resolved "https://registry.yarnpkg.com/inquirer/-/inquirer-8.0.0.tgz#957a46db1abcf0fdd2ab82deb7470e90afc7d0ac"

0 commit comments

Comments
 (0)