Commit 910b8b85 authored by rockyl's avatar rockyl

init

parent 5865e7f0
/**
* Created by rockyl on 2021/10/19.
*/
/**
* 类啊
* 说明呢
*/
class Base{
//名称
name
//年龄
age
}
#!/usr/bin/env node
export {};
#!/usr/bin/env node
"use strict";
Object.defineProperty(exports, "__esModule", { value: true });
const tslib_1 = require("tslib");
/**
* Created by rockyl on 2021/10/19.
*/
const commander_1 = require("commander");
const fs_extra_1 = (0, tslib_1.__importDefault)(require("fs-extra"));
const scan_1 = require("./scan");
const pkg = fs_extra_1.default.readJSONSync('package.json', 'utf-8');
commander_1.program.version(pkg.version);
commander_1.program
.option('-f, --folder <string>', 'folder to scan', process.cwd())
.option('-n, --includeNodeModules', 'include node_modules', false)
.option('-c, --includeComments', 'include comment lines', false)
.option('-w, --includeWhiteLines', 'include white lines', false)
.option('-e, --extNames <extNames...>', 'ext names, etc: js jsx ts');
commander_1.program.parse();
const { folder, includeNodeModules, includeComments, includeWhiteLines, extNames } = commander_1.program.opts();
(async function () {
const { num, fileCount } = await (0, scan_1.scan)(folder, {
includeNodeModules,
extNames,
options: { includeComments, includeWhiteLines }
});
console.log(`结果:扫描到${fileCount}个文件,行数:${num}`);
})();
//# sourceMappingURL=cli.js.map
\ No newline at end of file
{"version":3,"file":"cli.js","sourceRoot":"","sources":["../src/cli.ts"],"names":[],"mappings":";;;;AAEA;;GAEG;AACH,yCAAiC;AACjC,qEAAyB;AACzB,iCAA4B;AAE5B,MAAM,GAAG,GAAG,kBAAE,CAAC,YAAY,CAAC,cAAc,EAAE,OAAO,CAAC,CAAA;AAEpD,mBAAO,CAAC,OAAO,CAAC,GAAG,CAAC,OAAO,CAAC,CAAA;AAE5B,mBAAO;KACL,MAAM,CAAC,uBAAuB,EAAE,gBAAgB,EAAE,OAAO,CAAC,GAAG,EAAE,CAAC;KAChE,MAAM,CAAC,0BAA0B,EAAE,sBAAsB,EAAE,KAAK,CAAC;KACjE,MAAM,CAAC,uBAAuB,EAAE,uBAAuB,EAAE,KAAK,CAAC;KAC/D,MAAM,CAAC,yBAAyB,EAAE,qBAAqB,EAAE,KAAK,CAAC;KAC/D,MAAM,CAAC,8BAA8B,EAAE,2BAA2B,CAAC,CAAA;AAErE,mBAAO,CAAC,KAAK,EAAE,CAAA;AAEf,MAAM,EAAC,MAAM,EAAE,kBAAkB,EAAE,eAAe,EAAE,iBAAiB,EAAE,QAAQ,EAAC,GAAG,mBAAO,CAAC,IAAI,EAAE,CAAC;AAElG,CAAC,KAAK;IACL,MAAM,EAAC,GAAG,EAAE,SAAS,EAAC,GAAG,MAAM,IAAA,WAAI,EAAC,MAAM,EAAE;QAC3C,kBAAkB;QAClB,QAAQ;QACR,OAAO,EAAE,EAAC,eAAe,EAAE,iBAAiB,EAAC;KAC7C,CAAC,CAAA;IACF,OAAO,CAAC,GAAG,CAAC,SAAS,SAAS,UAAU,GAAG,EAAE,CAAC,CAAA;AAC/C,CAAC,CAAC,EAAE,CAAA"}
\ No newline at end of file
/**
* Created by rockyl on 2021/10/19.
*/
export interface Options {
/**包含注释,默认值:false*/
includeComments?: boolean;
/**包含空行,默认值:false*/
includeWhiteLines?: boolean;
}
/**
* 获取代码行数
* @param code - 代码
* @param options - 配置参数
*/
export declare function getLinesOfCode(code: string, options?: Options): number;
"use strict";
/**
* Created by rockyl on 2021/10/19.
*/
Object.defineProperty(exports, "__esModule", { value: true });
exports.getLinesOfCode = void 0;
const commentStarts = ['//', '/**', '* ', '*/'];
/**
* 获取代码行数
* @param code - 代码
* @param options - 配置参数
*/
function getLinesOfCode(code, options = {}) {
const { includeComments = false, includeWhiteLines = false } = options;
const lines = code.split('\n');
let lineNum = 0;
for (let line of lines) {
const trimLine = line.trimLeft();
if (!includeWhiteLines && trimLine.length === 0) {
continue;
}
if (!includeComments && commentStarts.filter(starts => trimLine.startsWith(starts)).length > 0) {
continue;
}
lineNum++;
}
return lineNum;
}
exports.getLinesOfCode = getLinesOfCode;
//# sourceMappingURL=core.js.map
\ No newline at end of file
{"version":3,"file":"core.js","sourceRoot":"","sources":["../src/core.ts"],"names":[],"mappings":";AAAA;;GAEG;;;AAEH,MAAM,aAAa,GAAG,CAAC,IAAI,EAAE,KAAK,EAAE,IAAI,EAAE,IAAI,CAAC,CAAA;AAS/C;;;;GAIG;AACH,SAAgB,cAAc,CAAC,IAAY,EAAE,UAAmB,EAAE;IACjE,MAAM,EAAC,eAAe,GAAG,KAAK,EAAE,iBAAiB,GAAG,KAAK,EAAC,GAAG,OAAO,CAAA;IAEpE,MAAM,KAAK,GAAG,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,CAAA;IAC9B,IAAI,OAAO,GAAG,CAAC,CAAA;IACf,KAAK,IAAI,IAAI,IAAI,KAAK,EAAE;QACvB,MAAM,QAAQ,GAAG,IAAI,CAAC,QAAQ,EAAE,CAAA;QAChC,IAAI,CAAC,iBAAiB,IAAI,QAAQ,CAAC,MAAM,KAAK,CAAC,EAAE;YAChD,SAAQ;SACR;QACD,IAAI,CAAC,eAAe,IAAI,aAAa,CAAC,MAAM,CAAC,MAAM,CAAC,EAAE,CAAC,QAAQ,CAAC,UAAU,CAAC,MAAM,CAAC,CAAC,CAAC,MAAM,GAAG,CAAC,EAAE;YAC/F,SAAQ;SACR;QACD,OAAO,EAAE,CAAA;KACT;IACD,OAAO,OAAO,CAAA;AACf,CAAC;AAhBD,wCAgBC"}
\ No newline at end of file
/** /**
* Created by rockyl on 2021/10/19. * Created by rockyl on 2021/10/19.
*/ */
export interface Options { export * from './core';
/**包含注释,默认值:false*/ export * from './scan';
includeComments?: boolean;
/**包含空行,默认值:false*/
includeWhiteLines?: boolean;
}
/**
* 获取代码行数
* @param code - 代码
* @param options - 配置参数
*/
export declare function getLinesOfCode(code: string, options?: Options): number;
...@@ -3,28 +3,7 @@ ...@@ -3,28 +3,7 @@
* Created by rockyl on 2021/10/19. * Created by rockyl on 2021/10/19.
*/ */
Object.defineProperty(exports, "__esModule", { value: true }); Object.defineProperty(exports, "__esModule", { value: true });
exports.getLinesOfCode = void 0; const tslib_1 = require("tslib");
const commentStarts = ['//', '/**', '* ', '*/']; (0, tslib_1.__exportStar)(require("./core"), exports);
/** (0, tslib_1.__exportStar)(require("./scan"), exports);
* 获取代码行数
* @param code - 代码
* @param options - 配置参数
*/
function getLinesOfCode(code, options = {}) {
const { includeComments = false, includeWhiteLines = false } = options;
const lines = code.split('\n');
let lineNum = 0;
for (let line of lines) {
const trimLine = line.trimLeft();
if (!includeWhiteLines && trimLine.length === 0) {
continue;
}
if (!includeComments && commentStarts.filter(starts => trimLine.startsWith(starts)).length > 0) {
continue;
}
lineNum++;
}
return lineNum;
}
exports.getLinesOfCode = getLinesOfCode;
//# sourceMappingURL=index.js.map //# sourceMappingURL=index.js.map
\ No newline at end of file
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":";AAAA;;GAEG;;;AAEH,MAAM,aAAa,GAAG,CAAC,IAAI,EAAE,KAAK,EAAE,IAAI,EAAE,IAAI,CAAC,CAAA;AAS/C;;;;GAIG;AACH,SAAgB,cAAc,CAAC,IAAY,EAAE,UAAmB,EAAE;IACjE,MAAM,EAAC,eAAe,GAAG,KAAK,EAAE,iBAAiB,GAAG,KAAK,EAAC,GAAG,OAAO,CAAA;IAEpE,MAAM,KAAK,GAAG,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,CAAA;IAC9B,IAAI,OAAO,GAAG,CAAC,CAAA;IACf,KAAK,IAAI,IAAI,IAAI,KAAK,EAAE;QACvB,MAAM,QAAQ,GAAG,IAAI,CAAC,QAAQ,EAAE,CAAA;QAChC,IAAI,CAAC,iBAAiB,IAAI,QAAQ,CAAC,MAAM,KAAK,CAAC,EAAE;YAChD,SAAQ;SACR;QACD,IAAI,CAAC,eAAe,IAAI,aAAa,CAAC,MAAM,CAAC,MAAM,CAAC,EAAE,CAAC,QAAQ,CAAC,UAAU,CAAC,MAAM,CAAC,CAAC,CAAC,MAAM,GAAG,CAAC,EAAE;YAC/F,SAAQ;SACR;QACD,OAAO,EAAE,CAAA;KACT;IACD,OAAO,OAAO,CAAA;AACf,CAAC;AAhBD,wCAgBC"} {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":";AAAA;;GAEG;;;AAEH,sDAAsB;AACtB,sDAAsB"}
\ No newline at end of file \ No newline at end of file
/**
* Created by rockyl on 2021/10/19.
*/
import { Options } from "./core";
export interface ScanOptions {
/**后缀名*/
extNames?: string[];
/**包含Node模块,默认值:false*/
includeNodeModules?: boolean;
/**计算配置*/
options?: Options;
}
export declare function scan(folder: string, scanOptions?: ScanOptions): Promise<{
num: number;
fileCount: number;
}>;
export declare function getLinesOfFile(filePath: string, options?: Options): Promise<number>;
"use strict";
/**
* Created by rockyl on 2021/10/19.
*/
Object.defineProperty(exports, "__esModule", { value: true });
exports.getLinesOfFile = exports.scan = void 0;
const tslib_1 = require("tslib");
const glob_1 = (0, tslib_1.__importDefault)(require("glob"));
const fs_extra_1 = (0, tslib_1.__importDefault)(require("fs-extra"));
const path_1 = (0, tslib_1.__importDefault)(require("path"));
const core_1 = require("./core");
async function scan(folder, scanOptions = {}) {
const { extNames, includeNodeModules, options } = scanOptions;
const pattern = path_1.default.join(folder, includeNodeModules ? '**/*' : '{,!(node_modules)/**/}*' + (extNames ? extNames.length > 0 ?
extNames.length == 1 ? `.${extNames[0]}` : `.{${extNames.join(',')}}`
: '' : ''));
const files = await new Promise((resolve, reject) => {
(0, glob_1.default)(pattern, {}, function (err, files) {
if (err) {
reject(err);
}
else {
resolve(files.filter(file => {
const stat = fs_extra_1.default.statSync(file);
return stat.isFile();
}));
}
});
});
const result = await Promise.all(files.map(file => getLinesOfFile(file, options)));
return {
num: result.reduce((pv, cv) => {
return pv + cv;
}, 0),
fileCount: files.length
};
}
exports.scan = scan;
async function getLinesOfFile(filePath, options) {
const content = await fs_extra_1.default.readFile(filePath, 'utf-8');
return (0, core_1.getLinesOfCode)(content, options);
}
exports.getLinesOfFile = getLinesOfFile;
//# sourceMappingURL=scan.js.map
\ No newline at end of file
{"version":3,"file":"scan.js","sourceRoot":"","sources":["../src/scan.ts"],"names":[],"mappings":";AAAA;;GAEG;;;;AAEH,6DAAuB;AACvB,qEAAyB;AACzB,6DAAuB;AACvB,iCAA+C;AAWxC,KAAK,UAAU,IAAI,CAAC,MAAc,EAAE,cAA2B,EAAE;IACvE,MAAM,EAAC,QAAQ,EAAE,kBAAkB,EAAE,OAAO,EAAC,GAAG,WAAW,CAAA;IAE3D,MAAM,OAAO,GAAG,cAAI,CAAC,IAAI,CAAC,MAAM,EAC/B,kBAAkB,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,yBAAyB,GAAG,CAAC,QAAQ,CAAC,CAAC,CAAC,QAAQ,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC;QAC1F,QAAQ,CAAC,MAAM,IAAI,CAAC,CAAC,CAAC,CAAC,IAAI,QAAQ,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,KAAK,QAAQ,CAAC,IAAI,CAAC,GAAG,CAAC,GAAG;QACrE,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAA;IACb,MAAM,KAAK,GAAG,MAAM,IAAI,OAAO,CAAW,CAAC,OAAO,EAAE,MAAM,EAAE,EAAE;QAC7D,IAAA,cAAI,EAAC,OAAO,EAAE,EAAE,EAAE,UAAU,GAAG,EAAE,KAAK;YACrC,IAAI,GAAG,EAAE;gBACR,MAAM,CAAC,GAAG,CAAC,CAAA;aACX;iBAAM;gBACN,OAAO,CAAC,KAAK,CAAC,MAAM,CAAC,IAAI,CAAC,EAAE;oBAC3B,MAAM,IAAI,GAAG,kBAAE,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAA;oBAC9B,OAAO,IAAI,CAAC,MAAM,EAAE,CAAA;gBACrB,CAAC,CAAC,CAAC,CAAA;aACH;QACF,CAAC,CAAC,CAAA;IACH,CAAC,CAAC,CAAA;IAEF,MAAM,MAAM,GAAG,MAAM,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,GAAG,CAAC,IAAI,CAAC,EAAE,CAAC,cAAc,CAAC,IAAI,EAAE,OAAO,CAAC,CAAC,CAAC,CAAA;IAClF,OAAO;QACN,GAAG,EAAE,MAAM,CAAC,MAAM,CAAC,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE;YAC7B,OAAO,EAAE,GAAG,EAAE,CAAA;QACf,CAAC,EAAE,CAAC,CAAC;QACL,SAAS,EAAE,KAAK,CAAC,MAAM;KACvB,CAAA;AACF,CAAC;AA3BD,oBA2BC;AAEM,KAAK,UAAU,cAAc,CAAC,QAAgB,EAAE,OAAiB;IACvE,MAAM,OAAO,GAAG,MAAM,kBAAE,CAAC,QAAQ,CAAC,QAAQ,EAAE,OAAO,CAAC,CAAA;IACpD,OAAO,IAAA,qBAAc,EAAC,OAAO,EAAE,OAAO,CAAC,CAAA;AACxC,CAAC;AAHD,wCAGC"}
\ No newline at end of file
{ {
"name": "loc", "name": "loc",
"version": "1.0.2", "version": "1.0.3",
"main": "dist/index.js", "main": "dist/index.js",
"types": "dist/index.d.ts", "types": "dist/index.d.ts",
"license": "MIT", "license": "MIT",
"bin": {
"loc": "dist/cli.js"
},
"scripts": { "scripts": {
"dev": "tsc -w", "dev": "tsc -w",
"build": "tsc", "build": "tsc",
"release": "npm run build && pvi && npm publish" "release": "npm run build && pvi && npm publish",
"loc": "node dist/cli.js"
}, },
"dependencies": { "dependencies": {
"commander": "^8.2.0",
"fs-extra": "^10.0.0",
"glob": "^7.2.0",
"tslib": "^2.2.0" "tslib": "^2.2.0"
}, },
"devDependencies": { "devDependencies": {
"@types/fs-extra": "^9.0.13",
"@types/glob": "^7.1.4",
"package-version-increment": "^1.0.2", "package-version-increment": "^1.0.2",
"typescript": "^4.2.4" "typescript": "^4.2.4"
} }
......
...@@ -18,12 +18,55 @@ const lines = getLinesOfCode('some codes...') ...@@ -18,12 +18,55 @@ const lines = getLinesOfCode('some codes...')
``` ```
### Api ### Api
获取代码行数
### 从代码获取代码行数
`getLinesOfCode: (code: string, options?: Options)=>number` `getLinesOfCode: (code: string, options?: Options)=>number`
### 从文件获取代码行数
`getLinesOfFile(filePath: string, options?: Options)=>number`
### 扫描文件夹并计算代码行数
`scan(folder: string, scanOptions?: ScanOptions)=>{num: number, fileCount: number}`
### ScanOptions
扫描配置
| 名称 | 类型 | 必须 | 默认值 | 说明 |
| :---- | :---- | :---- | :---- | :---- |
| `extNames` | `string[]` | 否 | | 后缀名 |
| `includeNodeModules` | `boolean` | 否 | `false` | 包含Node模块 |
| `options` | `Options` | 否 | | 计算配置 |
### Options ### Options
计算配置
| 名称 | 类型 | 必须 | 默认值 | 说明 | | 名称 | 类型 | 必须 | 默认值 | 说明 |
| :---- | :---- | :---- | :---- | :---- | | :---- | :---- | :---- | :---- | :---- |
| `includeComments` | `boolean` | 否 | `false` | 包含注释 | | `includeComments` | `boolean` | 否 | `false` | 包含注释 |
| `includeWhiteLines` | `boolean` | 否 | `false` | 包含空行 | | `includeWhiteLines` | `boolean` | 否 | `false` | 包含空行 |
## CLI
```shell
> loc --help
Usage: loc [options]
Options:
-V, --version output the version number
-f, --folder <string> folder to scan (default: CWD)
-n, --includeNodeModules include node_modules (default: false)
-c, --includeComments include comment lines (default: false)
-w, --includeWhiteLines include white lines (default: false)
-e, --extNames <extNames...> ext names, etc: js jsx ts
-h, --help display help for command
> loc
结果:扫描到22个文件,行数:441
> loc -f src -e ts
结果:扫描到4个文件,行数:84
```
#!/usr/bin/env node
/**
* Created by rockyl on 2021/10/19.
*/
import {program} from 'commander'
import fs from 'fs-extra'
import {scan} from "./scan";
const pkg = fs.readJSONSync('package.json', 'utf-8')
program.version(pkg.version)
program
.option('-f, --folder <string>', 'folder to scan', process.cwd())
.option('-n, --includeNodeModules', 'include node_modules', false)
.option('-c, --includeComments', 'include comment lines', false)
.option('-w, --includeWhiteLines', 'include white lines', false)
.option('-e, --extNames <extNames...>', 'ext names, etc: js jsx ts')
program.parse()
const {folder, includeNodeModules, includeComments, includeWhiteLines, extNames} = program.opts();
(async function () {
const {num, fileCount} = await scan(folder, {
includeNodeModules,
extNames,
options: {includeComments, includeWhiteLines}
})
console.log(`结果:扫描到${fileCount}个文件,行数:${num}`)
})()
/**
* Created by rockyl on 2021/10/19.
*/
const commentStarts = ['//', '/**', '* ', '*/']
export interface Options {
/**包含注释,默认值:false*/
includeComments?: boolean
/**包含空行,默认值:false*/
includeWhiteLines?: boolean
}
/**
* 获取代码行数
* @param code - 代码
* @param options - 配置参数
*/
export function getLinesOfCode(code: string, options: Options = {}): number {
const {includeComments = false, includeWhiteLines = false} = options
const lines = code.split('\n')
let lineNum = 0
for (let line of lines) {
const trimLine = line.trimLeft()
if (!includeWhiteLines && trimLine.length === 0) {
continue
}
if (!includeComments && commentStarts.filter(starts => trimLine.startsWith(starts)).length > 0) {
continue
}
lineNum++
}
return lineNum
}
...@@ -2,34 +2,5 @@ ...@@ -2,34 +2,5 @@
* Created by rockyl on 2021/10/19. * Created by rockyl on 2021/10/19.
*/ */
const commentStarts = ['//', '/**', '* ', '*/'] export * from './core'
export * from './scan'
export interface Options {
/**包含注释,默认值:false*/
includeComments?: boolean
/**包含空行,默认值:false*/
includeWhiteLines?: boolean
}
/**
* 获取代码行数
* @param code - 代码
* @param options - 配置参数
*/
export function getLinesOfCode(code: string, options: Options = {}): number {
const {includeComments = false, includeWhiteLines = false} = options
const lines = code.split('\n')
let lineNum = 0
for (let line of lines) {
const trimLine = line.trimLeft()
if (!includeWhiteLines && trimLine.length === 0) {
continue
}
if (!includeComments && commentStarts.filter(starts => trimLine.startsWith(starts)).length > 0) {
continue
}
lineNum++
}
return lineNum
}
/**
* Created by rockyl on 2021/10/19.
*/
import glob from 'glob'
import fs from 'fs-extra'
import path from 'path'
import {getLinesOfCode, Options} from "./core";
export interface ScanOptions {
/**后缀名*/
extNames?: string[]
/**包含Node模块,默认值:false*/
includeNodeModules?: boolean
/**计算配置*/
options?: Options
}
export async function scan(folder: string, scanOptions: ScanOptions = {}) {
const {extNames, includeNodeModules, options} = scanOptions
const pattern = path.join(folder,
includeNodeModules ? '**/*' : '{,!(node_modules)/**/}*' + (extNames ? extNames.length > 0 ?
extNames.length == 1 ? `.${extNames[0]}` : `.{${extNames.join(',')}}`
: '' : ''))
const files = await new Promise<string[]>((resolve, reject) => {
glob(pattern, {}, function (err, files) {
if (err) {
reject(err)
} else {
resolve(files.filter(file => {
const stat = fs.statSync(file)
return stat.isFile()
}))
}
})
})
const result = await Promise.all(files.map(file => getLinesOfFile(file, options)))
return {
num: result.reduce((pv, cv) => {
return pv + cv
}, 0),
fileCount: files.length
}
}
export async function getLinesOfFile(filePath: string, options?: Options) {
const content = await fs.readFile(filePath, 'utf-8')
return getLinesOfCode(content, options)
}
...@@ -2,9 +2,9 @@ ...@@ -2,9 +2,9 @@
* Created by rockyl on 2021/10/19. * Created by rockyl on 2021/10/19.
*/ */
const fs = require('fs') const {scan} = require("./dist");
const {getLinesOfCode} = require("./dist")
fs.readFile('code.js', 'utf-8', function(err, content){ (async function () {
console.log(getLinesOfCode(content)) const num = await scan('/Users/rockyl/Workspaces/spark-projects/projects/project/src')
}) console.log(num)
})()
...@@ -6,6 +6,7 @@ ...@@ -6,6 +6,7 @@
"outDir": "dist", "outDir": "dist",
"declaration": true, "declaration": true,
"moduleResolution": "Node", "moduleResolution": "Node",
"allowSyntheticDefaultImports": true,
"esModuleInterop": true, "esModuleInterop": true,
"importHelpers": true, "importHelpers": true,
"resolveJsonModule": true, "resolveJsonModule": true,
......
...@@ -2,6 +2,107 @@ ...@@ -2,6 +2,107 @@
# yarn lockfile v1 # yarn lockfile v1
"@types/fs-extra@^9.0.13":
version "9.0.13"
resolved "http://npm.dui88.com:80/@types%2ffs-extra/-/fs-extra-9.0.13.tgz#7594fbae04fe7f1918ce8b3d213f74ff44ac1f45"
integrity sha1-dZT7rgT+fxkYzos9IT90/0SsH0U=
dependencies:
"@types/node" "*"
"@types/glob@^7.1.4":
version "7.1.4"
resolved "http://npm.dui88.com:80/@types%2fglob/-/glob-7.1.4.tgz#ea59e21d2ee5c517914cb4bc8e4153b99e566672"
integrity sha1-6lniHS7lxReRTLS8jkFTuZ5WZnI=
dependencies:
"@types/minimatch" "*"
"@types/node" "*"
"@types/minimatch@*":
version "3.0.5"
resolved "http://npm.dui88.com:80/@types%2fminimatch/-/minimatch-3.0.5.tgz#1001cc5e6a3704b83c236027e77f2f58ea010f40"
integrity sha1-EAHMXmo3BLg8I2An538vWOoBD0A=
"@types/node@*":
version "16.11.1"
resolved "http://npm.dui88.com:80/@types%2fnode/-/node-16.11.1.tgz#2e50a649a50fc403433a14f829eface1a3443e97"
integrity sha1-LlCmSaUPxANDOhT4Ke+s4aNEPpc=
balanced-match@^1.0.0:
version "1.0.2"
resolved "http://npm.dui88.com:80/balanced-match/-/balanced-match-1.0.2.tgz#e83e3a7e3f300b34cb9d87f615fa0cbf357690ee"
integrity sha1-6D46fj8wCzTLnYf2FfoMvzV2kO4=
brace-expansion@^1.1.7:
version "1.1.11"
resolved "http://npm.dui88.com:80/brace-expansion/-/brace-expansion-1.1.11.tgz#3c7fcbf529d87226f3d2f52b966ff5271eb441dd"
integrity sha1-PH/L9SnYcibz0vUrlm/1Jx60Qd0=
dependencies:
balanced-match "^1.0.0"
concat-map "0.0.1"
commander@^8.2.0:
version "8.2.0"
resolved "http://npm.dui88.com:80/commander/-/commander-8.2.0.tgz#37fe2bde301d87d47a53adeff8b5915db1381ca8"
integrity sha1-N/4r3jAdh9R6U63v+LWRXbE4HKg=
concat-map@0.0.1:
version "0.0.1"
resolved "http://npm.dui88.com:80/concat-map/-/concat-map-0.0.1.tgz#d8a96bd77fd68df7793a73036a3ba0d5405d477b"
integrity sha1-2Klr13/Wjfd5OnMDajug1UBdR3s=
fs-extra@^10.0.0:
version "10.0.0"
resolved "http://npm.dui88.com:80/fs-extra/-/fs-extra-10.0.0.tgz#9ff61b655dde53fb34a82df84bb214ce802e17c1"
integrity sha1-n/YbZV3eU/s0qC34S7IUzoAuF8E=
dependencies:
graceful-fs "^4.2.0"
jsonfile "^6.0.1"
universalify "^2.0.0"
fs.realpath@^1.0.0:
version "1.0.0"
resolved "http://npm.dui88.com:80/fs.realpath/-/fs.realpath-1.0.0.tgz#1504ad2523158caa40db4a2787cb01411994ea4f"
integrity sha1-FQStJSMVjKpA20onh8sBQRmU6k8=
glob@^7.2.0:
version "7.2.0"
resolved "http://npm.dui88.com:80/glob/-/glob-7.2.0.tgz#d15535af7732e02e948f4c41628bd910293f6023"
integrity sha1-0VU1r3cy4C6Uj0xBYovZECk/YCM=
dependencies:
fs.realpath "^1.0.0"
inflight "^1.0.4"
inherits "2"
minimatch "^3.0.4"
once "^1.3.0"
path-is-absolute "^1.0.0"
graceful-fs@^4.1.6, graceful-fs@^4.2.0:
version "4.2.8"
resolved "http://npm.dui88.com:80/graceful-fs/-/graceful-fs-4.2.8.tgz#e412b8d33f5e006593cbd3cee6df9f2cebbe802a"
integrity sha1-5BK40z9eAGWTy9PO5t+fLOu+gCo=
inflight@^1.0.4:
version "1.0.6"
resolved "http://npm.dui88.com:80/inflight/-/inflight-1.0.6.tgz#49bd6331d7d02d0c09bc910a1075ba8165b56df9"
integrity sha1-Sb1jMdfQLQwJvJEKEHW6gWW1bfk=
dependencies:
once "^1.3.0"
wrappy "1"
inherits@2:
version "2.0.4"
resolved "http://npm.dui88.com:80/inherits/-/inherits-2.0.4.tgz#0fa2c64f932917c3433a0ded55363aae37416b7c"
integrity sha1-D6LGT5MpF8NDOg3tVTY6rjdBa3w=
jsonfile@^6.0.1:
version "6.1.0"
resolved "http://npm.dui88.com:80/jsonfile/-/jsonfile-6.1.0.tgz#bc55b2634793c679ec6403094eb13698a6ec0aae"
integrity sha1-vFWyY0eTxnnsZAMJTrE2mKbsCq4=
dependencies:
universalify "^2.0.0"
optionalDependencies:
graceful-fs "^4.1.6"
lru-cache@^6.0.0: lru-cache@^6.0.0:
version "6.0.0" version "6.0.0"
resolved "http://npm.dui88.com:80/lru-cache/-/lru-cache-6.0.0.tgz#6d6fe6570ebd96aaf90fcad1dafa3b2566db3a94" resolved "http://npm.dui88.com:80/lru-cache/-/lru-cache-6.0.0.tgz#6d6fe6570ebd96aaf90fcad1dafa3b2566db3a94"
...@@ -9,6 +110,20 @@ lru-cache@^6.0.0: ...@@ -9,6 +110,20 @@ lru-cache@^6.0.0:
dependencies: dependencies:
yallist "^4.0.0" yallist "^4.0.0"
minimatch@^3.0.4:
version "3.0.4"
resolved "http://npm.dui88.com:80/minimatch/-/minimatch-3.0.4.tgz#5166e286457f03306064be5497e8dbb0c3d32083"
integrity sha1-UWbihkV/AzBgZL5Ul+jbsMPTIIM=
dependencies:
brace-expansion "^1.1.7"
once@^1.3.0:
version "1.4.0"
resolved "http://npm.dui88.com:80/once/-/once-1.4.0.tgz#583b1aa775961d4b113ac17d9c50baef9dd76bd1"
integrity sha1-WDsap3WWHUsROsF9nFC6753Xa9E=
dependencies:
wrappy "1"
package-version-increment@^1.0.2: package-version-increment@^1.0.2:
version "1.0.2" version "1.0.2"
resolved "http://npm.dui88.com:80/package-version-increment/-/package-version-increment-1.0.2.tgz#5940f1acfa1eecfcf2e4fea7cd4fb9a678df74bf" resolved "http://npm.dui88.com:80/package-version-increment/-/package-version-increment-1.0.2.tgz#5940f1acfa1eecfcf2e4fea7cd4fb9a678df74bf"
...@@ -16,6 +131,11 @@ package-version-increment@^1.0.2: ...@@ -16,6 +131,11 @@ package-version-increment@^1.0.2:
dependencies: dependencies:
semver "^7.3.5" semver "^7.3.5"
path-is-absolute@^1.0.0:
version "1.0.1"
resolved "http://npm.dui88.com:80/path-is-absolute/-/path-is-absolute-1.0.1.tgz#174b9268735534ffbc7ace6bf53a5a9e1b5c5f5f"
integrity sha1-F0uSaHNVNP+8es5r9TpanhtcX18=
semver@^7.3.5: semver@^7.3.5:
version "7.3.5" version "7.3.5"
resolved "http://npm.dui88.com:80/semver/-/semver-7.3.5.tgz#0b621c879348d8998e4b0e4be94b3f12e6018ef7" resolved "http://npm.dui88.com:80/semver/-/semver-7.3.5.tgz#0b621c879348d8998e4b0e4be94b3f12e6018ef7"
...@@ -33,6 +153,16 @@ typescript@^4.2.4: ...@@ -33,6 +153,16 @@ typescript@^4.2.4:
resolved "http://npm.dui88.com:80/typescript/-/typescript-4.4.4.tgz#2cd01a1a1f160704d3101fd5a58ff0f9fcb8030c" resolved "http://npm.dui88.com:80/typescript/-/typescript-4.4.4.tgz#2cd01a1a1f160704d3101fd5a58ff0f9fcb8030c"
integrity sha1-LNAaGh8WBwTTEB/VpY/w+fy4Aww= integrity sha1-LNAaGh8WBwTTEB/VpY/w+fy4Aww=
universalify@^2.0.0:
version "2.0.0"
resolved "http://npm.dui88.com:80/universalify/-/universalify-2.0.0.tgz#75a4984efedc4b08975c5aeb73f530d02df25717"
integrity sha1-daSYTv7cSwiXXFrrc/Uw0C3yVxc=
wrappy@1:
version "1.0.2"
resolved "http://npm.dui88.com:80/wrappy/-/wrappy-1.0.2.tgz#b5243d8f3ec1aa35f1364605bc0d1036e30ab69f"
integrity sha1-tSQ9jz7BqjXxNkYFvA0QNuMKtp8=
yallist@^4.0.0: yallist@^4.0.0:
version "4.0.0" version "4.0.0"
resolved "http://npm.dui88.com:80/yallist/-/yallist-4.0.0.tgz#9bb92790d9c0effec63be73519e11a35019a3a72" resolved "http://npm.dui88.com:80/yallist/-/yallist-4.0.0.tgz#9bb92790d9c0effec63be73519e11a35019a3a72"
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment