diff --git a/package-lock.json b/package-lock.json index f92a7c3..0abc31c 100644 --- a/package-lock.json +++ b/package-lock.json @@ -10,13 +10,14 @@ "license": "MIT", "dependencies": { "chalk": "^5.0.0", - "commander": "^9.0.0", - "glob": "^7.2.0" + "commander": "^9.0.0" + }, + "bin": { + "roullector": "bin/roullector.js" }, "devDependencies": { "@rollup/plugin-commonjs": "^21.0.2", "@rollup/plugin-node-resolve": "^13.1.3", - "@types/glob": "^7.2.0", "@types/node": "^17.0.21", "@typescript-eslint/eslint-plugin": "^5.13.0", "@typescript-eslint/parser": "^5.13.0", @@ -349,16 +350,6 @@ "integrity": "sha512-EYNwp3bU+98cpU4lAWYYL7Zz+2gryWH1qbdDTidVd6hkiR6weksdbMadyXKXNPEkQFhXM+hVO9ZygomHXp+AIw==", "dev": true }, - "node_modules/@types/glob": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/@types/glob/-/glob-7.2.0.tgz", - "integrity": "sha512-ZUxbzKl0IfJILTS6t7ip5fQQM/J3TJYubDm3nMbgubNNYS62eXeUpoLUC8/7fJNiFYHTrGPQn7hspDUzIHX3UA==", - "dev": true, - "dependencies": { - "@types/minimatch": "*", - "@types/node": "*" - } - }, "node_modules/@types/json-schema": { "version": "7.0.9", "resolved": "https://registry.npmjs.org/@types/json-schema/-/json-schema-7.0.9.tgz", @@ -371,12 +362,6 @@ "integrity": "sha1-7ihweulOEdK4J7y+UnC86n8+ce4=", "dev": true }, - "node_modules/@types/minimatch": { - "version": "3.0.5", - "resolved": "https://registry.npmjs.org/@types/minimatch/-/minimatch-3.0.5.tgz", - "integrity": "sha512-Klz949h02Gz2uZCMGwDUSDS1YBlTdDDgbWHi+81l29tQALUtvz4rAYi5uoVhE5Lagoq6DeqAUlbrHvW/mXDgdQ==", - "dev": true - }, "node_modules/@types/node": { "version": "17.0.21", "resolved": "https://registry.npmjs.org/@types/node/-/node-17.0.21.tgz", @@ -834,7 +819,8 @@ "node_modules/balanced-match": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.2.tgz", - "integrity": "sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==" + "integrity": "sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==", + "dev": true }, "node_modules/bcrypt-pbkdf": { "version": "1.0.2", @@ -887,6 +873,7 @@ "version": "1.1.11", "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz", "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==", + "dev": true, "dependencies": { "balanced-match": "^1.0.0", "concat-map": "0.0.1" @@ -1115,7 +1102,8 @@ "node_modules/concat-map": { "version": "0.0.1", "resolved": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz", - "integrity": "sha1-2Klr13/Wjfd5OnMDajug1UBdR3s=" + "integrity": "sha1-2Klr13/Wjfd5OnMDajug1UBdR3s=", + "dev": true }, "node_modules/console-control-strings": { "version": "1.1.0", @@ -2033,7 +2021,8 @@ "node_modules/fs.realpath": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz", - "integrity": "sha1-FQStJSMVjKpA20onh8sBQRmU6k8=" + "integrity": "sha1-FQStJSMVjKpA20onh8sBQRmU6k8=", + "dev": true }, "node_modules/fsevents": { "version": "2.3.2", @@ -2167,6 +2156,7 @@ "version": "7.2.0", "resolved": "https://registry.npmjs.org/glob/-/glob-7.2.0.tgz", "integrity": "sha512-lmLf6gtyrPq8tTjSmrO94wBeQbFR3HbLHbuyD69wuyQkImp2hWqMGB47OX65FBkPffO641IP9jWa1z4ivqG26Q==", + "dev": true, "dependencies": { "fs.realpath": "^1.0.0", "inflight": "^1.0.4", @@ -2486,6 +2476,7 @@ "version": "1.0.6", "resolved": "https://registry.npmjs.org/inflight/-/inflight-1.0.6.tgz", "integrity": "sha1-Sb1jMdfQLQwJvJEKEHW6gWW1bfk=", + "dev": true, "dependencies": { "once": "^1.3.0", "wrappy": "1" @@ -2494,7 +2485,8 @@ "node_modules/inherits": { "version": "2.0.4", "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.4.tgz", - "integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==" + "integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==", + "dev": true }, "node_modules/internal-slot": { "version": "1.0.3", @@ -3051,6 +3043,7 @@ "version": "3.1.2", "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz", "integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==", + "dev": true, "dependencies": { "brace-expansion": "^1.1.7" }, @@ -3616,6 +3609,7 @@ "version": "1.4.0", "resolved": "https://registry.npmjs.org/once/-/once-1.4.0.tgz", "integrity": "sha1-WDsap3WWHUsROsF9nFC6753Xa9E=", + "dev": true, "dependencies": { "wrappy": "1" } @@ -3756,6 +3750,7 @@ "version": "1.0.1", "resolved": "https://registry.npmjs.org/path-is-absolute/-/path-is-absolute-1.0.1.tgz", "integrity": "sha1-F0uSaHNVNP+8es5r9TpanhtcX18=", + "dev": true, "engines": { "node": ">=0.10.0" } @@ -5116,7 +5111,8 @@ "node_modules/wrappy": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz", - "integrity": "sha1-tSQ9jz7BqjXxNkYFvA0QNuMKtp8=" + "integrity": "sha1-tSQ9jz7BqjXxNkYFvA0QNuMKtp8=", + "dev": true }, "node_modules/yallist": { "version": "4.0.0", @@ -5409,16 +5405,6 @@ "integrity": "sha512-EYNwp3bU+98cpU4lAWYYL7Zz+2gryWH1qbdDTidVd6hkiR6weksdbMadyXKXNPEkQFhXM+hVO9ZygomHXp+AIw==", "dev": true }, - "@types/glob": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/@types/glob/-/glob-7.2.0.tgz", - "integrity": "sha512-ZUxbzKl0IfJILTS6t7ip5fQQM/J3TJYubDm3nMbgubNNYS62eXeUpoLUC8/7fJNiFYHTrGPQn7hspDUzIHX3UA==", - "dev": true, - "requires": { - "@types/minimatch": "*", - "@types/node": "*" - } - }, "@types/json-schema": { "version": "7.0.9", "resolved": "https://registry.npmjs.org/@types/json-schema/-/json-schema-7.0.9.tgz", @@ -5431,12 +5417,6 @@ "integrity": "sha1-7ihweulOEdK4J7y+UnC86n8+ce4=", "dev": true }, - "@types/minimatch": { - "version": "3.0.5", - "resolved": "https://registry.npmjs.org/@types/minimatch/-/minimatch-3.0.5.tgz", - "integrity": "sha512-Klz949h02Gz2uZCMGwDUSDS1YBlTdDDgbWHi+81l29tQALUtvz4rAYi5uoVhE5Lagoq6DeqAUlbrHvW/mXDgdQ==", - "dev": true - }, "@types/node": { "version": "17.0.21", "resolved": "https://registry.npmjs.org/@types/node/-/node-17.0.21.tgz", @@ -5753,7 +5733,8 @@ "balanced-match": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.2.tgz", - "integrity": "sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==" + "integrity": "sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==", + "dev": true }, "bcrypt-pbkdf": { "version": "1.0.2", @@ -5796,6 +5777,7 @@ "version": "1.1.11", "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz", "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==", + "dev": true, "requires": { "balanced-match": "^1.0.0", "concat-map": "0.0.1" @@ -5964,7 +5946,8 @@ "concat-map": { "version": "0.0.1", "resolved": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz", - "integrity": "sha1-2Klr13/Wjfd5OnMDajug1UBdR3s=" + "integrity": "sha1-2Klr13/Wjfd5OnMDajug1UBdR3s=", + "dev": true }, "console-control-strings": { "version": "1.1.0", @@ -6686,7 +6669,8 @@ "fs.realpath": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz", - "integrity": "sha1-FQStJSMVjKpA20onh8sBQRmU6k8=" + "integrity": "sha1-FQStJSMVjKpA20onh8sBQRmU6k8=", + "dev": true }, "fsevents": { "version": "2.3.2", @@ -6794,6 +6778,7 @@ "version": "7.2.0", "resolved": "https://registry.npmjs.org/glob/-/glob-7.2.0.tgz", "integrity": "sha512-lmLf6gtyrPq8tTjSmrO94wBeQbFR3HbLHbuyD69wuyQkImp2hWqMGB47OX65FBkPffO641IP9jWa1z4ivqG26Q==", + "dev": true, "requires": { "fs.realpath": "^1.0.0", "inflight": "^1.0.4", @@ -7029,6 +7014,7 @@ "version": "1.0.6", "resolved": "https://registry.npmjs.org/inflight/-/inflight-1.0.6.tgz", "integrity": "sha1-Sb1jMdfQLQwJvJEKEHW6gWW1bfk=", + "dev": true, "requires": { "once": "^1.3.0", "wrappy": "1" @@ -7037,7 +7023,8 @@ "inherits": { "version": "2.0.4", "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.4.tgz", - "integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==" + "integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==", + "dev": true }, "internal-slot": { "version": "1.0.3", @@ -7468,6 +7455,7 @@ "version": "3.1.2", "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz", "integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==", + "dev": true, "requires": { "brace-expansion": "^1.1.7" } @@ -7904,6 +7892,7 @@ "version": "1.4.0", "resolved": "https://registry.npmjs.org/once/-/once-1.4.0.tgz", "integrity": "sha1-WDsap3WWHUsROsF9nFC6753Xa9E=", + "dev": true, "requires": { "wrappy": "1" } @@ -8010,7 +7999,8 @@ "path-is-absolute": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/path-is-absolute/-/path-is-absolute-1.0.1.tgz", - "integrity": "sha1-F0uSaHNVNP+8es5r9TpanhtcX18=" + "integrity": "sha1-F0uSaHNVNP+8es5r9TpanhtcX18=", + "dev": true }, "path-is-network-drive": { "version": "1.0.13", @@ -9034,7 +9024,8 @@ "wrappy": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz", - "integrity": "sha1-tSQ9jz7BqjXxNkYFvA0QNuMKtp8=" + "integrity": "sha1-tSQ9jz7BqjXxNkYFvA0QNuMKtp8=", + "dev": true }, "yallist": { "version": "4.0.0", diff --git a/package.json b/package.json index b170aa8..78d3546 100644 --- a/package.json +++ b/package.json @@ -2,9 +2,9 @@ "name": "roullector", "version": "0.1.0", "description": "Collect and generate map from file-based routers", - "main": "dist/index.js", - "types": "dist/types/index.d.ts", - "type":"commonjs", + "main": "lib/index.js", + "types": "lib/index.d.ts", + "type": "commonjs", "bin": { "roullector": "bin/roullector.js" }, @@ -20,7 +20,6 @@ "devDependencies": { "@rollup/plugin-commonjs": "^21.0.2", "@rollup/plugin-node-resolve": "^13.1.3", - "@types/glob": "^7.2.0", "@types/node": "^17.0.21", "@typescript-eslint/eslint-plugin": "^5.13.0", "@typescript-eslint/parser": "^5.13.0", @@ -39,8 +38,6 @@ "typescript-transform-paths": "^3.3.1" }, "dependencies": { - "chalk": "^5.0.0", - "commander": "^9.0.0", - "glob": "^7.2.0" + "commander": "^9.0.0" } } diff --git a/rollup.config.js b/rollup.config.js index ac0d2b2..7754057 100644 --- a/rollup.config.js +++ b/rollup.config.js @@ -28,16 +28,16 @@ const external = []; /** @type {import('rollup').RollupOptions} */ const config = [ - { - input: resolve(__dirname, './src/index.ts'), - output: { - file: resolve(__dirname, pkg.main), - format: 'cjs', - sourcemap: true, - }, - external, - plugins, - }, + // { + // input: resolve(__dirname, './src/index.ts'), + // output: { + // file: resolve(__dirname, pkg.main), + // format: 'cjs', + // sourcemap: true, + // }, + // external, + // plugins, + // }, { input: resolve(__dirname, './src/cli.ts'), output: { diff --git a/src/cli.ts b/src/cli.ts index ba8c695..c0a9430 100644 --- a/src/cli.ts +++ b/src/cli.ts @@ -1,7 +1,7 @@ import { Command } from 'commander'; -import { collect } from '$commands/collect'; +import { collectCli } from '$commands/collect/collect.cli'; const program = new Command(); -program.addCommand(collect()); +program.addCommand(collectCli()); program.parse(process.argv); diff --git a/src/commands/collect/collect.cli.ts b/src/commands/collect/collect.cli.ts new file mode 100644 index 0000000..111bccd --- /dev/null +++ b/src/commands/collect/collect.cli.ts @@ -0,0 +1,86 @@ +import { + Command, + Option, +} from 'commander'; + +import { collect } from './collect.command'; +import { + defaultCliCollectOptions, + keyTransformCliToFunc, +} from './collect.constants'; +import type { + CollectOptions, + CliCollectOptions, +} from './collect.types'; + +export function collectCli() { + return new Command('collect') + .description('collect route data') + .option( + '-i, --inDir ', + 'directory path to collect', + defaultCliCollectOptions.inDir + ) + .option( + '-e, --extensions ', + 'comma-separated list of file extensions to collect', + defaultCliCollectOptions.extensions, + ) + .option( + '-x, --ignorePatterns ', + 'comma-separated list of filename patterns (string literal or regex) to ignore', + defaultCliCollectOptions.ignorePatterns, + ) + .option( + '-o, --outDir ', + 'outputs generated files to this folder', + defaultCliCollectOptions.outDir, + ) + .option( + '-d, --depth ', + 'depth of inDir to collect', + defaultCliCollectOptions.depth, + ) + .addOption( + new Option( '-k, --keyTransform ', 'how to transform route key') + .choices(['camelCase']) + .default(defaultCliCollectOptions.keyTransform) + ) + .option( + '-k, --dirkey ', + 'how to transform route key', + defaultCliCollectOptions.dirkey, + ) + .option( + '-t, --typescript', + 'outputs generated files in typescript', + defaultCliCollectOptions.typescript, + ) + .option( + '--verbose', + 'prints more info during operation', + defaultCliCollectOptions.verbose, + ) + .action((rawOptions: CliCollectOptions) => { + const options: CollectOptions = { + ...rawOptions, + extensions: rawOptions.extensions?.split(',') ?? [], + ignorePatterns: rawOptions.ignorePatterns?.split(',') ?? [], + depth: Number(rawOptions.depth) || Infinity, + keyTransform: keyTransformCliToFunc[rawOptions.keyTransform], + }; + if (options.verbose) { + console.info('Running "collect" with options:'); + console.table(Object.fromEntries( + Object.entries(rawOptions).map( + ([key, value]) => ([ + key, + { value }, + ]) + )), + ); + } + + collect(options); + }); +} diff --git a/src/commands/collect/collect.command.ts b/src/commands/collect/collect.command.ts new file mode 100644 index 0000000..7d79294 --- /dev/null +++ b/src/commands/collect/collect.command.ts @@ -0,0 +1,103 @@ +import { + statSync, + readdirSync, + writeFileSync, + mkdirSync, + existsSync, + rmSync, +} from 'fs'; +import { + basename, + join, + resolve, +} from 'path'; + +import type { CollectOptions } from './collect.types'; + +export type DeepObject = { + [key: string]: T | DeepObject; +}; + +function extractRouteMapping(options: CollectOptions, inputDir: string = options.inDir, currentPath = '', level = 0): DeepObject { + const children = readdirSync(inputDir); + + const map: DeepObject = {}; + + if (level <= options.depth) { + for (const child of children) { + const absPath = join(inputDir, child); + const stats = statSync(absPath); + + // skip if any ignore pattern matches + const filename = basename(child); + if (options.ignorePatterns.some(pattern => new RegExp(pattern).test(filename))) continue; + + if (stats.isDirectory()) { + const nextPath = `${currentPath}/${child}`; + const childMap = extractRouteMapping(options, absPath, nextPath, level + 1); + if (Object.keys(childMap).length) { + if (!childMap['index']) { + childMap[options.dirkey] = nextPath; + } + map[options.keyTransform(child)] = childMap; + } + } else { + // skip if extension doesn't match + if (options.extensions.every((ext) => !filename.endsWith(ext))) continue; + + // transform filename to route key + let routeKey = filename.replace(/\.[^/.]+$/, ''); // trim extension + routeKey = options.keyTransform(routeKey); // by default camelCase-ify key + + let routeName = routeKey; + if (routeKey === 'index') { + // no explicit `index` + routeName = ''; + } + let nextPath = currentPath; + if (routeName) { + nextPath += `/${routeName}`; + } + + if (!nextPath && level === 0) { + // root level index route + nextPath = '/'; + } + + map[routeKey] = nextPath; + } + } + } + + return map; +} + +export function generateJSON(options: CollectOptions) { + const map = extractRouteMapping(options); + const outputPath = resolve(options.outDir, 'routes.json'); + writeFileSync( + outputPath, + JSON.stringify(map, null, 2), // spacing level = 2 + { encoding: 'utf-8' }, + ); +} + +// export function generateUtils() { + +// } + +export function collect(options: CollectOptions) { + const { outDir } = options; + try { + if (!existsSync(outDir)) { + mkdirSync(outDir, { recursive: true }); + } + generateJSON(options); + } catch (error) { + console.error(error); + const data = readdirSync(outDir); + if (data.length === 0) { + rmSync(outDir, { recursive: true }); + } + } +} diff --git a/src/commands/collect/collect.constants.ts b/src/commands/collect/collect.constants.ts new file mode 100644 index 0000000..0188c60 --- /dev/null +++ b/src/commands/collect/collect.constants.ts @@ -0,0 +1,39 @@ +import type { + CliCollectOptions, + CollectOptions, +} from './collect.types'; + +export function CamelCasify(str: string) { + return str + .trim() + .replace(/([-_\s]+.)/g, function($1) { + return $1.replace(/[-_\s]/g, '').toUpperCase(); + }) + .replace(/^(.)/, function($1) { + return $1.toLowerCase(); + }); +} + +export const defaultCollectOptions: CollectOptions = { + inDir: 'src/routes', + extensions: ['.svelte'], + ignorePatterns: ['^_'], + outDir: 'src/generated/routing', + typescript: true, + keyTransform: CamelCasify, + verbose: false, + depth: Infinity, + dirkey: '__dir', +}; + +export const defaultCliCollectOptions: CliCollectOptions = { + ...defaultCollectOptions, + extensions: defaultCollectOptions.extensions.join(','), + ignorePatterns: defaultCollectOptions.ignorePatterns.map((pattern) => (pattern instanceof RegExp) ? pattern.source : pattern).join(','), + depth: 'Infinity', + keyTransform: 'camelCase', +}; + +export const keyTransformCliToFunc: Record string> = { + camelCase: CamelCasify, +}; diff --git a/src/commands/collect/collect.types.ts b/src/commands/collect/collect.types.ts new file mode 100644 index 0000000..b6551aa --- /dev/null +++ b/src/commands/collect/collect.types.ts @@ -0,0 +1,29 @@ +type Modify = Omit & R; + +export type CollectOptions = { + /** input directory path to collect route data from */ + inDir: string; + /** file extensions */ + extensions: string[]; + /** patterns to ignore files */ + ignorePatterns: (string|RegExp)[]; + /** route data output directory path */ + outDir: string; + /** whether to output utils in typescript */ + typescript: boolean; + /** prints more info during operation */ + verbose: boolean; + /** how to transform route key */ + keyTransform: (key: string) => string; + /** depth of inDir to collect */ + depth: number; + /** key to save path for directories with no index file */ + dirkey: string; +}; + +export type CliCollectOptions = Modify; diff --git a/src/commands/collect/constants.ts b/src/commands/collect/constants.ts deleted file mode 100644 index 0544b9a..0000000 --- a/src/commands/collect/constants.ts +++ /dev/null @@ -1,7 +0,0 @@ -import type { CollectOptions } from './types'; - -export const defaultCollectOptions: CollectOptions = { - pattern: 'src/routes', - outDir: 'src/generated/routing', - typescript: true, -}; diff --git a/src/commands/collect/index.ts b/src/commands/collect/index.ts deleted file mode 100644 index eafe3dc..0000000 --- a/src/commands/collect/index.ts +++ /dev/null @@ -1,30 +0,0 @@ -import { Command } from 'commander'; - -import { defaultCollectOptions } from './constants'; -import type { CollectOptions } from './types'; - -export function collect() { - return new Command('collect') - .description('collect route data') - .option( - '-p, --pattern ', - 'glob pattern to search for files', - defaultCollectOptions.pattern - ) - .option( - '-o, --outDir ', - 'outputs generated files to this folder', - defaultCollectOptions.outDir - ) - .option( - '-t, --typescript', - 'outputs generated files in typescript', - defaultCollectOptions.typescript - ) - .action((rawOptions: CollectOptions) => { - const options = { - ...defaultCollectOptions, - ...rawOptions, - }; - }); -} diff --git a/src/commands/collect/operation.ts b/src/commands/collect/operation.ts deleted file mode 100644 index 9501ff5..0000000 --- a/src/commands/collect/operation.ts +++ /dev/null @@ -1,26 +0,0 @@ -// import { statSync } from 'fs'; -// import { dirname } from 'path'; - -import { sync as globSync } from 'glob'; - -import type { CollectOptions } from './types'; - -export type DeepObject = { - [key: string]: T | DeepObject; -}; - -export function generateJSON(pattern: string) { - const files = globSync(pattern); - for (const file of files) { - console.log(file); - } -} - -// export function generateUtils() { - -// } - -export function operation(options: CollectOptions) { - const { pattern } = options; - generateJSON(pattern); -} diff --git a/src/commands/collect/types.ts b/src/commands/collect/types.ts deleted file mode 100644 index 7f4399f..0000000 --- a/src/commands/collect/types.ts +++ /dev/null @@ -1,5 +0,0 @@ -export type CollectOptions = { - pattern: string; - outDir: string; - typescript: boolean; -}; diff --git a/src/commands/index.ts b/src/commands/index.ts deleted file mode 100644 index 16e2109..0000000 --- a/src/commands/index.ts +++ /dev/null @@ -1 +0,0 @@ -export * from './collect'; diff --git a/src/index.ts b/src/index.ts index 591ad36..277bfe0 100644 --- a/src/index.ts +++ b/src/index.ts @@ -1 +1 @@ -export { operation as collect } from './commands/collect/operation'; +export { collect } from '$commands/collect/collect.command';