-
Notifications
You must be signed in to change notification settings - Fork 4
/
createPackage.js
57 lines (48 loc) · 1.58 KB
/
createPackage.js
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
/***
* Creates a new package and sets up Typescript support automatically.
* @type {module:fs}
*/
const fs = require("fs");
// Added to each package to provide typescript compilation
const TS_CONFIG = {
extends: "../../tsconfig.json",
compilerOptions: { outDir: "./dist" },
include: ["./src/index.ts"]
};
const getPackageDirectory = (packageName = "") => `./packages/${packageName}`;
const args = process.argv.slice(2);
const PACKAGE_NAME = args[0];
const PACKAGE_DIR = getPackageDirectory(PACKAGE_NAME);
const PACKAGE_JSON = {
name: PACKAGE_NAME,
version: "0.0.0",
author: "GetScatter Ltd.",
license: "MIT",
publishConfig: {
access: "public"
},
main: "dist/index.js",
directories: { lib: "dist", test: "__tests__" },
files: ["dist"],
scripts: {
build: 'echo "Error: build from root" && exit 1',
test: 'echo "Error: run tests from root" && exit 1'
}
};
if (fs.existsSync(PACKAGE_DIR)) {
console.error("A package with this name already exists");
process.exit(0);
}
console.log(`Creating package: ${PACKAGE_NAME} at ${PACKAGE_DIR}`);
fs.mkdirSync(PACKAGE_DIR);
fs.mkdirSync(`${PACKAGE_DIR}/src`);
fs.mkdirSync(`${PACKAGE_DIR}/__tests__`);
fs.writeFileSync(`${PACKAGE_DIR}/__tests__/${PACKAGE_NAME}.spec.ts`, "");
fs.writeFileSync(
`${PACKAGE_DIR}/package.json`,
JSON.stringify(PACKAGE_JSON, null, 2)
);
fs.writeFileSync(`${PACKAGE_DIR}/README.md`, `# ${PACKAGE_NAME}`);
fs.writeFileSync(`${PACKAGE_DIR}/ts.json`, JSON.stringify(TS_CONFIG, null, 2));
fs.writeFileSync(`${PACKAGE_DIR}/src/index.ts`, "");
console.log(`Successfully created package ${PACKAGE_NAME}`);