From 08f55dd7e37aa393466aef7fe9e0081c2c468461 Mon Sep 17 00:00:00 2001 From: mistlog Date: Sat, 11 Jul 2020 12:14:12 +0800 Subject: [PATCH] support config file in typescript --- cli/cli.ts | 33 +++++++++++++++++++++------------ package-lock.json | 46 ++++++++++++++++++++++++++-------------------- package.json | 7 ++++--- 3 files changed, 51 insertions(+), 35 deletions(-) diff --git a/cli/cli.ts b/cli/cli.ts index 154721c..7f28bb8 100644 --- a/cli/cli.ts +++ b/cli/cli.ts @@ -9,7 +9,8 @@ import { } from "./literator"; import { resolve } from "path"; import { readJSONSync, lstatSync } from "fs-extra"; -import { cosmiconfigSync } from "cosmiconfig"; +import { cosmiconfig } from "cosmiconfig"; +import { default as tsLoader } from "@endemolshinegroup/cosmiconfig-typescript-loader"; const package_json = readJSONSync(resolve(__dirname, "../../package.json")); program.version(package_json.version); @@ -27,17 +28,25 @@ if (args.length === 0) { const path = resolve(working_directory, target); // find config - const config_info = cosmiconfigSync("typedraft").search(); - let config: ITypeDraftConfig = { DSLs: [], DraftPlugins: [] }; - if (config_info && !config_info.isEmpty) { - config = { ...config, ...config_info.config }; - } + const explorer = cosmiconfig("typedraft", { + searchPlaces: [`typedraft.config.ts`], + loaders: { + ".ts": tsLoader, + }, + }); - // - if (lstatSync(path).isDirectory()) { - program.watch ? InspectDirectory(path, config) : ComposeDirectory(path, config); - } else { - program.watch ? InspectFile(path, config) : ComposeFile(path, config); - } + explorer.search().then(config_info => { + let config: ITypeDraftConfig = { DSLs: [], DraftPlugins: [] }; + if (config_info && !config_info.isEmpty) { + config = { ...config, ...config_info.config }; + } + + // + if (lstatSync(path).isDirectory()) { + program.watch ? InspectDirectory(path, config) : ComposeDirectory(path, config); + } else { + program.watch ? InspectFile(path, config) : ComposeFile(path, config); + } + }); } } diff --git a/package-lock.json b/package-lock.json index 7637e0e..ce129b6 100644 --- a/package-lock.json +++ b/package-lock.json @@ -221,6 +221,17 @@ "minimist": "^1.2.0" } }, + "@endemolshinegroup/cosmiconfig-typescript-loader": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/@endemolshinegroup/cosmiconfig-typescript-loader/-/cosmiconfig-typescript-loader-3.0.0.tgz", + "integrity": "sha512-Zvt4SaczUOoYH+x3IaPh82CMkm2S6ek5H1DZIjT87lIStJTz1dozC/0IvmvhljV3V8hHDhgdxj7G0XEGwaQpMg==", + "requires": { + "lodash.get": "^4", + "make-error": "^1", + "ts-node": "^8", + "tslib": "^1" + } + }, "@fortawesome/fontawesome-free": { "version": "5.13.0", "resolved": "https://registry.npmjs.org/@fortawesome/fontawesome-free/-/fontawesome-free-5.13.0.tgz", @@ -839,8 +850,7 @@ "arg": { "version": "4.1.3", "resolved": "https://registry.npmjs.org/arg/-/arg-4.1.3.tgz", - "integrity": "sha512-58S9QDqG0Xx27YwPSt9fJxivjYl432YCwfDMfZ+71RAqUrZef7LrKQZ3LHLOwCS4FLNBplP533Zx895SeOCHvA==", - "dev": true + "integrity": "sha512-58S9QDqG0Xx27YwPSt9fJxivjYl432YCwfDMfZ+71RAqUrZef7LrKQZ3LHLOwCS4FLNBplP533Zx895SeOCHvA==" }, "argparse": { "version": "1.0.10", @@ -1373,8 +1383,7 @@ "buffer-from": { "version": "1.1.1", "resolved": "https://registry.npmjs.org/buffer-from/-/buffer-from-1.1.1.tgz", - "integrity": "sha512-MQcXEUbCKtEo7bhqEs6560Hyd4XaovZlO/k9V3hjVUF/zwW7KBVdSK4gIt/bzwS9MbR5qob+F5jusZsb0YQK2A==", - "dev": true + "integrity": "sha512-MQcXEUbCKtEo7bhqEs6560Hyd4XaovZlO/k9V3hjVUF/zwW7KBVdSK4gIt/bzwS9MbR5qob+F5jusZsb0YQK2A==" }, "buffer-xor": { "version": "1.0.3", @@ -2036,8 +2045,7 @@ "diff": { "version": "4.0.2", "resolved": "https://registry.npmjs.org/diff/-/diff-4.0.2.tgz", - "integrity": "sha512-58lmxKSA4BNyLz+HHMUzlOEpg09FV+ev6ZMe3vJihgdxzgcwZ8VoEEPmALCZG9LmqfVoNMMKpttIYTVG6uDY7A==", - "dev": true + "integrity": "sha512-58lmxKSA4BNyLz+HHMUzlOEpg09FV+ev6ZMe3vJihgdxzgcwZ8VoEEPmALCZG9LmqfVoNMMKpttIYTVG6uDY7A==" }, "diff-sequences": { "version": "24.9.0", @@ -4238,6 +4246,11 @@ "integrity": "sha1-3bG7s+8HRYwBd7oH3hRCLLAz/5s=", "dev": true }, + "lodash.get": { + "version": "4.4.2", + "resolved": "https://registry.npmjs.org/lodash.get/-/lodash.get-4.4.2.tgz", + "integrity": "sha1-LRd/ZS+jHpObRDjVNBSZ36OCXpk=" + }, "lodash.kebabcase": { "version": "4.0.1", "resolved": "https://registry.npmjs.org/lodash.kebabcase/-/lodash.kebabcase-4.0.1.tgz", @@ -4305,8 +4318,7 @@ "make-error": { "version": "1.3.6", "resolved": "https://registry.npmjs.org/make-error/-/make-error-1.3.6.tgz", - "integrity": "sha512-s8UhlNe7vPKomQhC1qFelMokr/Sc3AgNbso3n74mVPA5LTZwkB9NlXf4XPamLxJE8h0gh73rM94xvwRT2CVInw==", - "dev": true + "integrity": "sha512-s8UhlNe7vPKomQhC1qFelMokr/Sc3AgNbso3n74mVPA5LTZwkB9NlXf4XPamLxJE8h0gh73rM94xvwRT2CVInw==" }, "makeerror": { "version": "1.0.11", @@ -6082,7 +6094,6 @@ "version": "0.5.19", "resolved": "https://registry.npmjs.org/source-map-support/-/source-map-support-0.5.19.tgz", "integrity": "sha512-Wonm7zOCIJzBGQdB+thsPar0kYuCIzYvxZwlBa87yi/Mdjv7Tip2cyVbLj5o0cFPN4EVkuTwb3GDDyUx2DGnGw==", - "dev": true, "requires": { "buffer-from": "^1.0.0", "source-map": "^0.6.0" @@ -6091,8 +6102,7 @@ "source-map": { "version": "0.6.1", "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", - "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", - "dev": true + "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==" } } }, @@ -6671,7 +6681,6 @@ "version": "8.10.1", "resolved": "https://registry.npmjs.org/ts-node/-/ts-node-8.10.1.tgz", "integrity": "sha512-bdNz1L4ekHiJul6SHtZWs1ujEKERJnHs4HxN7rjTyyVOFf3HaJ6sLqe6aPG62XTzAB/63pKRh5jTSWL0D7bsvw==", - "dev": true, "requires": { "arg": "^4.1.0", "diff": "^4.0.1", @@ -6683,8 +6692,7 @@ "tslib": { "version": "1.13.0", "resolved": "https://registry.npmjs.org/tslib/-/tslib-1.13.0.tgz", - "integrity": "sha512-i/6DQjL8Xf3be4K/E6Wgpekn5Qasl1usyw++dAA35Ue5orEn65VIxOA+YvNNl9HV3qv70T7CNwjODHZrLwvd1Q==", - "dev": true + "integrity": "sha512-i/6DQjL8Xf3be4K/E6Wgpekn5Qasl1usyw++dAA35Ue5orEn65VIxOA+YvNNl9HV3qv70T7CNwjODHZrLwvd1Q==" }, "tty-browserify": { "version": "0.0.0", @@ -6738,10 +6746,9 @@ } }, "typescript": { - "version": "3.9.3", - "resolved": "https://registry.npmjs.org/typescript/-/typescript-3.9.3.tgz", - "integrity": "sha512-D/wqnB2xzNFIcoBG9FG8cXRDjiqSTbG2wd8DMZeQyJlP1vfTkIxH4GKveWaEBYySKIg+USu+E+EDIR47SqnaMQ==", - "dev": true + "version": "3.8.3", + "resolved": "https://registry.npmjs.org/typescript/-/typescript-3.8.3.tgz", + "integrity": "sha512-MYlEfn5VrLNsgudQTVJeNaQFUAI7DkhnOjdpAp4T+ku1TfQClewlbSuTVHiA+8skNBgaf02TL/kLOvig4y3G8w==" }, "uc.micro": { "version": "1.0.6", @@ -7333,8 +7340,7 @@ "yn": { "version": "3.1.1", "resolved": "https://registry.npmjs.org/yn/-/yn-3.1.1.tgz", - "integrity": "sha512-Ux4ygGWsu2c7isFWe8Yu1YluJmqVhxqK2cLXNQA5AcC3QfbGNpM7fu0Y8b/z16pXLnFxZYvWhd3fhBY9DLmC6Q==", - "dev": true + "integrity": "sha512-Ux4ygGWsu2c7isFWe8Yu1YluJmqVhxqK2cLXNQA5AcC3QfbGNpM7fu0Y8b/z16pXLnFxZYvWhd3fhBY9DLmC6Q==" } } } diff --git a/package.json b/package.json index d8d6de6..0b031a9 100644 --- a/package.json +++ b/package.json @@ -47,12 +47,14 @@ "license": "MIT", "dependencies": { "@babel/core": "^7.6.2", + "@endemolshinegroup/cosmiconfig-typescript-loader": "^3.0.0", "commander": "^4.0.1", "cosmiconfig": "^6.0.0", "filewalker": "^0.1.3", "fs-extra": "^8.1.0", "node-watch": "^0.6.3", - "toposort": "2.0.2" + "toposort": "2.0.2", + "typescript": "^3.8.3" }, "devDependencies": { "@types/fs-extra": "^8.0.1", @@ -67,8 +69,7 @@ "pretty-quick": "^2.0.1", "ts-jest": "^24.0.2", "ts-node": "^8.3.0", - "typedraft": "0.2.0", - "typescript": "^3.8.3" + "typedraft": "0.2.0" }, "husky": { "hooks": {