Add the github-linguist package
This commit only adds a single package and all of its transitive dependencies. The github-linguist package will be used for counting lines of code as a baseline for databases we are analyzing.
This commit is contained in:
parent
896b4ff181
commit
c4a84a93d4
152 changed files with 17057 additions and 24 deletions
5
node_modules/github-linguist/.eslintignore
generated
vendored
Normal file
5
node_modules/github-linguist/.eslintignore
generated
vendored
Normal file
|
|
@ -0,0 +1,5 @@
|
|||
/lambda/
|
||||
/scripts
|
||||
/config
|
||||
.history
|
||||
/test/**
|
||||
3
node_modules/github-linguist/.eslintrc.js
generated
vendored
Normal file
3
node_modules/github-linguist/.eslintrc.js
generated
vendored
Normal file
|
|
@ -0,0 +1,3 @@
|
|||
module.exports = {
|
||||
extends: [require.resolve('@umijs/fabric/dist/eslint')],
|
||||
};
|
||||
26
node_modules/github-linguist/.github/workflows/ci.yml
generated
vendored
Normal file
26
node_modules/github-linguist/.github/workflows/ci.yml
generated
vendored
Normal file
|
|
@ -0,0 +1,26 @@
|
|||
name: Node CI
|
||||
|
||||
on: [push]
|
||||
|
||||
jobs:
|
||||
build:
|
||||
runs-on: ${{ matrix.os }}
|
||||
strategy:
|
||||
matrix:
|
||||
node_version: [10.x, 12.x]
|
||||
os: [ubuntu-latest, windows-latest]
|
||||
steps:
|
||||
- uses: actions/checkout@v2
|
||||
- name: Use Node.js ${{ matrix.node_version }}
|
||||
uses: actions/setup-node@v1
|
||||
with:
|
||||
node-version: ${{ matrix.node_version }}
|
||||
- run: echo ${{github.ref}}
|
||||
- run: yarn
|
||||
- run: yarn run lint
|
||||
- run: yarn run test
|
||||
env:
|
||||
CI: true
|
||||
PROGRESS: none
|
||||
NODE_ENV: test
|
||||
NODE_OPTIONS: --max_old_space_size=4096
|
||||
5
node_modules/github-linguist/.prettierrc.js
generated
vendored
Normal file
5
node_modules/github-linguist/.prettierrc.js
generated
vendored
Normal file
|
|
@ -0,0 +1,5 @@
|
|||
const fabric = require('@umijs/fabric');
|
||||
|
||||
module.exports = {
|
||||
...fabric.prettier,
|
||||
};
|
||||
71
node_modules/github-linguist/README.md
generated
vendored
Normal file
71
node_modules/github-linguist/README.md
generated
vendored
Normal file
|
|
@ -0,0 +1,71 @@
|
|||
# github-linguist
|
||||
|
||||
💻 Counts the number of lines of code, written in TypeScript.
|
||||
|
||||
**Warning:** This package uses regular expressions to approximate the lines of code in a project. The
|
||||
results are not 100% precise because the regular expressions can return mistakes in edge
|
||||
cases, for example if comment tokens are present inside of multiline strings.
|
||||
|
||||
## Prerequisites
|
||||
|
||||
- Node.js 6+
|
||||
|
||||
## Install
|
||||
|
||||
```bash
|
||||
npm install github-linguist
|
||||
```
|
||||
|
||||
or
|
||||
|
||||
```bash
|
||||
yarn add github-linguist
|
||||
```
|
||||
|
||||
## Usage
|
||||
|
||||
You can use `loc` in you ternimal, or as a npm package in your projects.
|
||||
|
||||
### Command line mode
|
||||
|
||||
Supports counting lines of code of a file or directory.
|
||||
|
||||
#### 1. Lines of code in a single file
|
||||
|
||||
```bash
|
||||
# loc file <path>
|
||||
loc file src/index.ts
|
||||
```
|
||||
|
||||

|
||||
|
||||
#### 2. Lines of code in a directory
|
||||
|
||||
```bash
|
||||
# loc <pattern>
|
||||
loc dir **/*.ts
|
||||
```
|
||||
|
||||

|
||||
|
||||
### Third-party mode
|
||||
|
||||
```ts
|
||||
import { LocFile, LocDir } from 'github-linguist';
|
||||
|
||||
// for a file.
|
||||
const file = new LocFile(filePath);
|
||||
const { info } = file.getInfo();
|
||||
|
||||
// for a directory.
|
||||
const dir = new LocDir({
|
||||
cwd: // root directory, or leave blank to use process.cwd()
|
||||
include: // string or string[] containing path patterns to include (default include all)
|
||||
exclude: // string or string[] containing path patterns to exclude (default exclude none)
|
||||
});
|
||||
const { info } = dir.getInfo();
|
||||
```
|
||||
|
||||
## License
|
||||
|
||||
MIT License.
|
||||
2
node_modules/github-linguist/dist/cli.d.ts
generated
vendored
Normal file
2
node_modules/github-linguist/dist/cli.d.ts
generated
vendored
Normal file
|
|
@ -0,0 +1,2 @@
|
|||
#!/usr/bin/env node
|
||||
export {};
|
||||
57
node_modules/github-linguist/dist/cli.js
generated
vendored
Executable file
57
node_modules/github-linguist/dist/cli.js
generated
vendored
Executable file
|
|
@ -0,0 +1,57 @@
|
|||
#!/usr/bin/env node
|
||||
"use strict";
|
||||
var __importDefault = (this && this.__importDefault) || function (mod) {
|
||||
return (mod && mod.__esModule) ? mod : { "default": mod };
|
||||
};
|
||||
Object.defineProperty(exports, "__esModule", { value: true });
|
||||
const chalk_1 = __importDefault(require("chalk"));
|
||||
const commander_1 = __importDefault(require("commander"));
|
||||
const directory_1 = require("./directory");
|
||||
const file_1 = require("./file");
|
||||
const utils_1 = require("./utils");
|
||||
commander_1.default
|
||||
.version(utils_1.getVersion(), '-v')
|
||||
.command('file <path>')
|
||||
.description('count lines of code in a file')
|
||||
.action(async (pathPattern) => {
|
||||
try {
|
||||
const info = await (new file_1.LocFile(pathPattern).getFileInfo());
|
||||
// eslint-disable-next-line no-console
|
||||
console.log(chalk_1.default.cyan(`
|
||||
path: \t\t${pathPattern}
|
||||
language: \t${info.languages}
|
||||
total lines: \t${String(info.lines.total)}
|
||||
code lines: \t${String(info.lines.code)}
|
||||
comment lines: \t${String(info.lines.comment)}
|
||||
`));
|
||||
}
|
||||
catch (e) {
|
||||
console.error(e);
|
||||
console.error(e.stacl);
|
||||
}
|
||||
});
|
||||
const formatInfo = (info, languages) => `
|
||||
\ttotal lines: \t${String(info.total)}
|
||||
\tcode lines: \t${String(info.code)}
|
||||
\tcomment lines: \t${String(info.comment)}
|
||||
\t--------------------${Object.keys(languages)
|
||||
.map((key) => {
|
||||
const languageInfo = languages[key];
|
||||
return `\n\t${key.padEnd(10)} \t file count:${String(languageInfo.sum)} \ttotal:${String(languageInfo.total)} \tcomment:${String(languageInfo.comment)} \tcode:${String(languageInfo.code)}`;
|
||||
})
|
||||
.join('')}`;
|
||||
commander_1.default.arguments('<cmd> [env]').action(async (cmd) => {
|
||||
try {
|
||||
const { info, languages } = await (new directory_1.LocDir({
|
||||
include: cmd
|
||||
}).loadInfo());
|
||||
// eslint-disable-next-line no-console
|
||||
console.log(chalk_1.default.cyan(formatInfo(info, languages)));
|
||||
}
|
||||
catch (e) {
|
||||
console.error(e);
|
||||
console.error(e.stacl);
|
||||
}
|
||||
});
|
||||
commander_1.default.parse(process.argv);
|
||||
//# sourceMappingURL=cli.js.map
|
||||
1
node_modules/github-linguist/dist/cli.js.map
generated
vendored
Normal file
1
node_modules/github-linguist/dist/cli.js.map
generated
vendored
Normal file
|
|
@ -0,0 +1 @@
|
|||
{"version":3,"file":"cli.js","sourceRoot":"","sources":["../src/cli.ts"],"names":[],"mappings":";;;;;;AAEA,kDAA0B;AAC1B,0DAAgC;AAKhC,2CAAqC;AACrC,iCAA2C;AAC3C,mCAAqC;AAErC,mBAAO;KACJ,OAAO,CAAC,kBAAU,EAAE,EAAE,IAAI,CAAC;KAC3B,OAAO,CAAC,aAAa,CAAC;KACtB,WAAW,CAAC,+BAA+B,CAAC;KAC5C,MAAM,CAAC,KAAK,EAAE,WAAW,EAAE,EAAE;IAC5B,IAAI;QACF,MAAM,IAAI,GAAG,MAAM,CAAC,IAAI,cAAO,CAAC,WAAW,CAAC,CAAC,WAAW,EAAE,CAAC,CAAC;QAC5D,sCAAsC;QACtC,OAAO,CAAC,GAAG,CACT,eAAK,CAAC,IAAI,CAAC;oBACC,WAAW;sBACT,IAAI,CAAC,SAAS;yBACX,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC;wBACzB,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC;2BACpB,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC;OAC9C,CAAC,CACD,CAAC;KACH;IAAC,OAAO,CAAC,EAAE;QACV,OAAO,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC;QACjB,OAAO,CAAC,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC;KACxB;AACH,CAAC,CAAC,CAAC;AAEL,MAAM,UAAU,GAAG,CACjB,IAAc,EACd,SAIC,EACD,EAAE,CAAC;qBACgB,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC;oBACnB,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC;uBACd,MAAM,CAAC,IAAI,CAAC,OAAO,CAAC;0BACjB,MAAM,CAAC,IAAI,CAAC,SAAS,CAAC;KAC3C,GAAG,CAAC,CAAC,GAAG,EAAE,EAAE;IACX,MAAM,YAAY,GAAG,SAAS,CAAC,GAAG,CAAC,CAAC;IACpC,OAAO,OAAO,GAAG,CAAC,MAAM,CAAC,EAAE,CAAC,kBAAkB,MAAM,CAAC,YAAY,CAAC,GAAG,CAAC,YAAY,MAAM,CACtF,YAAY,CAAC,KAAK,CACnB,eAAe,MAAM,CAAC,YAAY,CAAC,OAAO,CAAC,YAAY,MAAM,CAAC,YAAY,CAAC,IAAI,CAAC,EAAE,CAAC;AACtF,CAAC,CAAC;KACD,IAAI,CAAC,EAAE,CAAC,EAAE,CAAC;AAEhB,mBAAO,CAAC,SAAS,CAAC,aAAa,CAAC,CAAC,MAAM,CAAC,KAAK,EAAE,GAAG,EAAE,EAAE;IACpD,IAAI;QACF,MAAM,EAAE,IAAI,EAAE,SAAS,EAAE,GAAG,MAAM,CAAC,IAAI,kBAAM,CAAC;YAC5C,OAAO,EAAE,GAAG;SACb,CAAC,CAAC,QAAQ,EAAE,CAAC,CAAC;QACf,sCAAsC;QACtC,OAAO,CAAC,GAAG,CAAC,eAAK,CAAC,IAAI,CAAC,UAAU,CAAC,IAAI,EAAE,SAAS,CAAC,CAAC,CAAC,CAAC;KACtD;IAAC,OAAO,CAAC,EAAE;QACV,OAAO,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC;QACjB,OAAO,CAAC,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC;KACxB;AACH,CAAC,CAAC,CAAC;AAEH,mBAAO,CAAC,KAAK,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC"}
|
||||
28
node_modules/github-linguist/dist/directory.d.ts
generated
vendored
Normal file
28
node_modules/github-linguist/dist/directory.d.ts
generated
vendored
Normal file
|
|
@ -0,0 +1,28 @@
|
|||
import { LineInfo } from './file';
|
||||
export interface LocDirOptions {
|
||||
cwd?: string;
|
||||
include?: string[] | string;
|
||||
exclude?: string[] | string;
|
||||
}
|
||||
export interface LocResult {
|
||||
files: string[];
|
||||
info: LineInfo;
|
||||
languages: {
|
||||
[key: string]: LineInfo & {
|
||||
sum: number;
|
||||
};
|
||||
};
|
||||
}
|
||||
/**
|
||||
* Collect the info of a directory.
|
||||
*/
|
||||
export declare class LocDir {
|
||||
private cwd;
|
||||
private include;
|
||||
private exclude;
|
||||
constructor(options: LocDirOptions);
|
||||
/**
|
||||
* Calculate directory info.
|
||||
*/
|
||||
loadInfo(): Promise<LocResult>;
|
||||
}
|
||||
116
node_modules/github-linguist/dist/directory.js
generated
vendored
Normal file
116
node_modules/github-linguist/dist/directory.js
generated
vendored
Normal file
|
|
@ -0,0 +1,116 @@
|
|||
"use strict";
|
||||
var __importDefault = (this && this.__importDefault) || function (mod) {
|
||||
return (mod && mod.__esModule) ? mod : { "default": mod };
|
||||
};
|
||||
Object.defineProperty(exports, "__esModule", { value: true });
|
||||
exports.LocDir = void 0;
|
||||
const globby_1 = __importDefault(require("globby"));
|
||||
const fs_extra_1 = __importDefault(require("fs-extra"));
|
||||
const path_1 = __importDefault(require("path"));
|
||||
// @ts-ignore
|
||||
const slash2_1 = __importDefault(require("slash2"));
|
||||
const file_1 = require("./file");
|
||||
const defaultInfo = {
|
||||
total: 0,
|
||||
code: 0,
|
||||
comment: 0,
|
||||
};
|
||||
const defaultExclude = [
|
||||
// javascript
|
||||
'**/*.map',
|
||||
'**/yarn**',
|
||||
'**/.github',
|
||||
'**/node_modules/**',
|
||||
'**/dist/**',
|
||||
'**/*.snap',
|
||||
// java
|
||||
'**/target'
|
||||
];
|
||||
/**
|
||||
* Collect the info of a directory.
|
||||
*/
|
||||
class LocDir {
|
||||
constructor(options) {
|
||||
Object.defineProperty(this, "cwd", {
|
||||
enumerable: true,
|
||||
configurable: true,
|
||||
writable: true,
|
||||
value: void 0
|
||||
});
|
||||
Object.defineProperty(this, "include", {
|
||||
enumerable: true,
|
||||
configurable: true,
|
||||
writable: true,
|
||||
value: void 0
|
||||
});
|
||||
Object.defineProperty(this, "exclude", {
|
||||
enumerable: true,
|
||||
configurable: true,
|
||||
writable: true,
|
||||
value: void 0
|
||||
});
|
||||
// ensure all excludes are globstar. Note that '**/*.ts/**' matches files
|
||||
// that end in .ts because the globstar indicates 0 or more directory paths.
|
||||
this.exclude = ensureArray(options.exclude)
|
||||
.concat(defaultExclude)
|
||||
.map(item => item.endsWith('**') ? item : `${item}/**`);
|
||||
// remove all leading './' since this messes up globstar matches in the
|
||||
// excludes.
|
||||
this.include = ensureArray(options.include, '**')
|
||||
.map(item => item.startsWith('./') ? item.substring(2) : item)
|
||||
.map(item => item.endsWith('**') ? item : `${item}/**`);
|
||||
this.cwd = options.cwd || process.cwd();
|
||||
}
|
||||
/**
|
||||
* Calculate directory info.
|
||||
*/
|
||||
async loadInfo() {
|
||||
const paths = await globby_1.default(this.include, {
|
||||
cwd: this.cwd,
|
||||
ignore: this.exclude,
|
||||
nodir: true
|
||||
});
|
||||
const files = [];
|
||||
const info = { ...defaultInfo };
|
||||
let languages = {};
|
||||
await Promise.all(paths.map(async (pathItem) => {
|
||||
const fullPath = slash2_1.default(path_1.default.join(this.cwd, pathItem));
|
||||
if (!pathItem ||
|
||||
!(await fs_extra_1.default.pathExists(fullPath)) ||
|
||||
(await fs_extra_1.default.stat(fullPath)).isDirectory()) {
|
||||
return;
|
||||
}
|
||||
const file = new file_1.LocFile(fullPath);
|
||||
const fileLineInfo = await file.getFileInfo();
|
||||
const { lines } = fileLineInfo;
|
||||
info.total += lines.total;
|
||||
info.code += lines.code;
|
||||
info.comment += lines.comment;
|
||||
const language = { ...languages[fileLineInfo.languages] };
|
||||
language.code = lines.code + (language.code || 0);
|
||||
language.sum = (language.sum || 0) + 1;
|
||||
language.comment = lines.comment + (language.comment || 0);
|
||||
language.total = lines.total + (language.total || 0);
|
||||
languages = {
|
||||
...languages,
|
||||
[fileLineInfo.languages]: language,
|
||||
};
|
||||
files.push(fullPath);
|
||||
}));
|
||||
return {
|
||||
files,
|
||||
info,
|
||||
languages,
|
||||
};
|
||||
}
|
||||
}
|
||||
exports.LocDir = LocDir;
|
||||
function ensureArray(arr, dfault) {
|
||||
if (!arr) {
|
||||
return dfault ? [dfault] : [];
|
||||
}
|
||||
return Array.isArray(arr)
|
||||
? arr
|
||||
: [arr];
|
||||
}
|
||||
//# sourceMappingURL=directory.js.map
|
||||
1
node_modules/github-linguist/dist/directory.js.map
generated
vendored
Normal file
1
node_modules/github-linguist/dist/directory.js.map
generated
vendored
Normal file
|
|
@ -0,0 +1 @@
|
|||
{"version":3,"file":"directory.js","sourceRoot":"","sources":["../src/directory.ts"],"names":[],"mappings":"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"}
|
||||
37
node_modules/github-linguist/dist/file.d.ts
generated
vendored
Normal file
37
node_modules/github-linguist/dist/file.d.ts
generated
vendored
Normal file
|
|
@ -0,0 +1,37 @@
|
|||
/**
|
||||
* detect file info
|
||||
*/
|
||||
export interface LineInfo {
|
||||
total: number;
|
||||
code: number;
|
||||
comment: number;
|
||||
}
|
||||
export interface FileInfo {
|
||||
name: string;
|
||||
languages: string;
|
||||
size: number;
|
||||
lines: LineInfo;
|
||||
}
|
||||
/**
|
||||
* Collect language info for a single file
|
||||
*/
|
||||
export declare class LocFile {
|
||||
private debug;
|
||||
path: string;
|
||||
private rawPath;
|
||||
private language;
|
||||
/**
|
||||
* Creates an instance of LocFile.
|
||||
*/
|
||||
constructor(rawPath: string, debug?: boolean);
|
||||
/**
|
||||
* get file type through a path
|
||||
*/
|
||||
private getType;
|
||||
private filterData;
|
||||
/**
|
||||
* Get file info when LocFile init
|
||||
*/
|
||||
getFileInfo(data?: string): Promise<FileInfo>;
|
||||
getFileInfoByContent(name: string, data: string): FileInfo;
|
||||
}
|
||||
198
node_modules/github-linguist/dist/file.js
generated
vendored
Normal file
198
node_modules/github-linguist/dist/file.js
generated
vendored
Normal file
|
|
@ -0,0 +1,198 @@
|
|||
"use strict";
|
||||
/**
|
||||
* detect file info
|
||||
*/
|
||||
var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
|
||||
if (k2 === undefined) k2 = k;
|
||||
Object.defineProperty(o, k2, { enumerable: true, get: function() { return m[k]; } });
|
||||
}) : (function(o, m, k, k2) {
|
||||
if (k2 === undefined) k2 = k;
|
||||
o[k2] = m[k];
|
||||
}));
|
||||
var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
|
||||
Object.defineProperty(o, "default", { enumerable: true, value: v });
|
||||
}) : function(o, v) {
|
||||
o["default"] = v;
|
||||
});
|
||||
var __importStar = (this && this.__importStar) || function (mod) {
|
||||
if (mod && mod.__esModule) return mod;
|
||||
var result = {};
|
||||
if (mod != null) for (var k in mod) if (k !== "default" && Object.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k);
|
||||
__setModuleDefault(result, mod);
|
||||
return result;
|
||||
};
|
||||
var __importDefault = (this && this.__importDefault) || function (mod) {
|
||||
return (mod && mod.__esModule) ? mod : { "default": mod };
|
||||
};
|
||||
Object.defineProperty(exports, "__esModule", { value: true });
|
||||
exports.LocFile = void 0;
|
||||
const fs = __importStar(require("fs-extra"));
|
||||
const Path = __importStar(require("path"));
|
||||
// @ts-ignore
|
||||
const slash2_1 = __importDefault(require("slash2"));
|
||||
const languages_1 = require("./languages");
|
||||
const DefaultLine = {
|
||||
total: 0,
|
||||
code: 0,
|
||||
comment: 0,
|
||||
};
|
||||
const DefaultFileInfo = {
|
||||
name: '',
|
||||
languages: '',
|
||||
size: 0,
|
||||
lines: DefaultLine,
|
||||
};
|
||||
/**
|
||||
* Collect language info for a single file
|
||||
*/
|
||||
class LocFile {
|
||||
/**
|
||||
* Creates an instance of LocFile.
|
||||
*/
|
||||
constructor(rawPath, debug = false) {
|
||||
Object.defineProperty(this, "debug", {
|
||||
enumerable: true,
|
||||
configurable: true,
|
||||
writable: true,
|
||||
value: debug
|
||||
});
|
||||
Object.defineProperty(this, "path", {
|
||||
enumerable: true,
|
||||
configurable: true,
|
||||
writable: true,
|
||||
value: void 0
|
||||
});
|
||||
Object.defineProperty(this, "rawPath", {
|
||||
enumerable: true,
|
||||
configurable: true,
|
||||
writable: true,
|
||||
value: void 0
|
||||
});
|
||||
Object.defineProperty(this, "language", {
|
||||
enumerable: true,
|
||||
configurable: true,
|
||||
writable: true,
|
||||
value: new languages_1.Languages()
|
||||
});
|
||||
Object.defineProperty(this, "filterData", {
|
||||
enumerable: true,
|
||||
configurable: true,
|
||||
writable: true,
|
||||
value: (data, regexes) => {
|
||||
const lines = data.split(/\n/);
|
||||
let commentLength = 0;
|
||||
let codeLength = lines.length;
|
||||
const total = codeLength;
|
||||
let inMultiLineComment = false;
|
||||
lines.forEach((line) => {
|
||||
let lineType = 'code';
|
||||
line = line.trim();
|
||||
if (inMultiLineComment) {
|
||||
let noCode = true;
|
||||
if (regexes.multiLineCommentClose.test(line)) {
|
||||
// line contains the end of a multi-line comment
|
||||
inMultiLineComment = false;
|
||||
if (!regexes.multiLineCommentCloseEnd.test(line)) {
|
||||
// the multiline comment does not end this line.
|
||||
// there is real code on it.
|
||||
noCode = false;
|
||||
}
|
||||
}
|
||||
if (noCode) {
|
||||
lineType = 'comm';
|
||||
commentLength += 1;
|
||||
codeLength -= 1;
|
||||
}
|
||||
}
|
||||
else if (line) {
|
||||
// non-empty line
|
||||
if (regexes.multiLineCommentOpen.test(line)) {
|
||||
// line contains the start of a multi-line comment
|
||||
// might contain some real code, but we'll let that slide
|
||||
if (!regexes.multiLineCommentOpenAndClose.test(line)) {
|
||||
// comment is not also closed on this line
|
||||
inMultiLineComment = true;
|
||||
}
|
||||
if (regexes.multiLineCommentOpenStart.test(line)) {
|
||||
// The comment starts the line. There is no other code on this line
|
||||
commentLength += 1;
|
||||
codeLength -= 1;
|
||||
lineType = 'comm';
|
||||
}
|
||||
}
|
||||
else if (regexes.singleLineComment.test(line)) {
|
||||
// line contains only a single line comment
|
||||
commentLength += 1;
|
||||
codeLength -= 1;
|
||||
lineType = 'comm';
|
||||
}
|
||||
}
|
||||
else {
|
||||
// empty line
|
||||
codeLength -= 1;
|
||||
lineType = 'empt';
|
||||
}
|
||||
if (this.debug) {
|
||||
console.log(lineType, line);
|
||||
}
|
||||
});
|
||||
return {
|
||||
...DefaultLine,
|
||||
total,
|
||||
code: codeLength,
|
||||
comment: commentLength,
|
||||
};
|
||||
}
|
||||
});
|
||||
this.path = slash2_1.default(rawPath);
|
||||
this.rawPath = rawPath;
|
||||
}
|
||||
/**
|
||||
* get file type through a path
|
||||
*/
|
||||
getType(path) {
|
||||
const fileExtension = `.${path.split('.').pop()}`;
|
||||
return this.language.extensionMap[fileExtension] || '';
|
||||
}
|
||||
/**
|
||||
* Get file info when LocFile init
|
||||
*/
|
||||
async getFileInfo(data) {
|
||||
if (!(await fs.pathExists(this.rawPath))) {
|
||||
throw new Error(`Error: file ${this.rawPath} does not exist.`);
|
||||
}
|
||||
let newData = data;
|
||||
const info = Object.assign({}, DefaultFileInfo);
|
||||
const name = this.path.split(Path.sep).pop() || '';
|
||||
try {
|
||||
const stat = await fs.stat(this.path);
|
||||
if (!stat.isFile()) {
|
||||
return info;
|
||||
}
|
||||
newData = data || await fs.readFile(this.path, 'utf-8');
|
||||
info.name = name;
|
||||
info.size = (stat && stat.size) || 0;
|
||||
info.languages = this.getType(this.path);
|
||||
if (!info.languages) {
|
||||
return info;
|
||||
}
|
||||
if (newData) {
|
||||
const regexes = this.language.getRegexes(info.languages);
|
||||
info.lines = this.filterData(newData, regexes);
|
||||
}
|
||||
}
|
||||
catch (err) {
|
||||
throw new Error('read file failed.');
|
||||
}
|
||||
return info;
|
||||
}
|
||||
getFileInfoByContent(name, data) {
|
||||
const info = Object.assign({}, DefaultFileInfo);
|
||||
info.name = name;
|
||||
info.languages = this.getType(name);
|
||||
info.lines = this.filterData(data, this.language.getRegexes(info.languages));
|
||||
return info;
|
||||
}
|
||||
}
|
||||
exports.LocFile = LocFile;
|
||||
//# sourceMappingURL=file.js.map
|
||||
1
node_modules/github-linguist/dist/file.js.map
generated
vendored
Normal file
1
node_modules/github-linguist/dist/file.js.map
generated
vendored
Normal file
|
|
@ -0,0 +1 @@
|
|||
{"version":3,"file":"file.js","sourceRoot":"","sources":["../src/file.ts"],"names":[],"mappings":"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"}
|
||||
5
node_modules/github-linguist/dist/index.d.ts
generated
vendored
Normal file
5
node_modules/github-linguist/dist/index.d.ts
generated
vendored
Normal file
|
|
@ -0,0 +1,5 @@
|
|||
import { LocResult } from './directory';
|
||||
export { LocDir, LocDirOptions } from './directory';
|
||||
export { LocFile, LineInfo } from './file';
|
||||
declare const loc: (fileOrDir: string) => Promise<LocResult>;
|
||||
export default loc;
|
||||
31
node_modules/github-linguist/dist/index.js
generated
vendored
Normal file
31
node_modules/github-linguist/dist/index.js
generated
vendored
Normal file
|
|
@ -0,0 +1,31 @@
|
|||
"use strict";
|
||||
var __importDefault = (this && this.__importDefault) || function (mod) {
|
||||
return (mod && mod.__esModule) ? mod : { "default": mod };
|
||||
};
|
||||
Object.defineProperty(exports, "__esModule", { value: true });
|
||||
// @ts-ignore
|
||||
const slash2_1 = __importDefault(require("slash2"));
|
||||
const fs_extra_1 = __importDefault(require("fs-extra"));
|
||||
const directory_1 = require("./directory");
|
||||
const file_1 = require("./file");
|
||||
var directory_2 = require("./directory");
|
||||
Object.defineProperty(exports, "LocDir", { enumerable: true, get: function () { return directory_2.LocDir; } });
|
||||
var file_2 = require("./file");
|
||||
Object.defineProperty(exports, "LocFile", { enumerable: true, get: function () { return file_2.LocFile; } });
|
||||
const loc = async (fileOrDir) => {
|
||||
const stat = await fs_extra_1.default.stat(slash2_1.default(fileOrDir));
|
||||
if (stat.isFile()) {
|
||||
const locFile = new file_1.LocFile(slash2_1.default(fileOrDir));
|
||||
const info = await locFile.getFileInfo();
|
||||
const filePath = locFile.path;
|
||||
return {
|
||||
info: info.lines,
|
||||
files: [filePath],
|
||||
languages: { [info.languages]: { ...info.lines, sum: 1 } },
|
||||
};
|
||||
}
|
||||
const locDir = new directory_1.LocDir({ cwd: slash2_1.default(fileOrDir) });
|
||||
return locDir.loadInfo();
|
||||
};
|
||||
exports.default = loc;
|
||||
//# sourceMappingURL=index.js.map
|
||||
1
node_modules/github-linguist/dist/index.js.map
generated
vendored
Normal file
1
node_modules/github-linguist/dist/index.js.map
generated
vendored
Normal file
|
|
@ -0,0 +1 @@
|
|||
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":";;;;;AAAA,aAAa;AACb,oDAA2B;AAC3B,wDAA0B;AAE1B,2CAAgD;AAChD,iCAAiC;AAEjC,yCAAoD;AAA3C,mGAAA,MAAM,OAAA;AACf,+BAA2C;AAAlC,+FAAA,OAAO,OAAA;AAEhB,MAAM,GAAG,GAAG,KAAK,EACf,SAAiB,EACG,EAAE;IACtB,MAAM,IAAI,GAAG,MAAM,kBAAE,CAAC,IAAI,CAAC,gBAAK,CAAC,SAAS,CAAC,CAAC,CAAC;IAC7C,IAAI,IAAI,CAAC,MAAM,EAAE,EAAE;QACjB,MAAM,OAAO,GAAG,IAAI,cAAO,CAAC,gBAAK,CAAC,SAAS,CAAC,CAAC,CAAC;QAC9C,MAAM,IAAI,GAAG,MAAM,OAAO,CAAC,WAAW,EAAE,CAAC;QACzC,MAAM,QAAQ,GAAG,OAAO,CAAC,IAAI,CAAC;QAC9B,OAAO;YACL,IAAI,EAAE,IAAI,CAAC,KAAK;YAChB,KAAK,EAAE,CAAC,QAAQ,CAAC;YACjB,SAAS,EAAE,EAAE,CAAC,IAAI,CAAC,SAAS,CAAC,EAAE,EAAE,GAAG,IAAI,CAAC,KAAK,EAAE,GAAG,EAAE,CAAC,EAAE,EAAE;SAC3D,CAAC;KACH;IACD,MAAM,MAAM,GAAG,IAAI,kBAAM,CAAC,EAAE,GAAG,EAAE,gBAAK,CAAC,SAAS,CAAC,EAAE,CAAC,CAAC;IACrD,OAAO,MAAM,CAAC,QAAQ,EAAE,CAAC;AAC3B,CAAC,CAAC;AAEF,kBAAe,GAAG,CAAC"}
|
||||
43
node_modules/github-linguist/dist/languages.d.ts
generated
vendored
Normal file
43
node_modules/github-linguist/dist/languages.d.ts
generated
vendored
Normal file
|
|
@ -0,0 +1,43 @@
|
|||
export interface DetectorOptions {
|
||||
}
|
||||
/**
|
||||
* detecte program language through file extension
|
||||
*
|
||||
* @export
|
||||
* @class LanguageDetector
|
||||
*/
|
||||
export declare class Languages {
|
||||
extensionMap: {
|
||||
[key: string]: string;
|
||||
};
|
||||
/**
|
||||
* Creates an instance of Detector.
|
||||
*/
|
||||
constructor();
|
||||
/**
|
||||
* load language before detecting
|
||||
*/
|
||||
private loadExtensionMap;
|
||||
/**
|
||||
* Retrieve the regular expressions for a given language.
|
||||
* This is incomplete, but covers most of the languages we
|
||||
* see in the wild.
|
||||
*
|
||||
* @param language the language to retrieve regexes for
|
||||
*/
|
||||
getRegexes(language: string): Regexes;
|
||||
/**
|
||||
* return extension map
|
||||
*/
|
||||
getExtensionMap(): {
|
||||
[key: string]: string;
|
||||
};
|
||||
}
|
||||
export interface Regexes {
|
||||
singleLineComment: RegExp;
|
||||
multiLineCommentOpen: RegExp;
|
||||
multiLineCommentOpenStart: RegExp;
|
||||
multiLineCommentClose: RegExp;
|
||||
multiLineCommentCloseEnd: RegExp;
|
||||
multiLineCommentOpenAndClose: RegExp;
|
||||
}
|
||||
136
node_modules/github-linguist/dist/languages.js
generated
vendored
Normal file
136
node_modules/github-linguist/dist/languages.js
generated
vendored
Normal file
|
|
@ -0,0 +1,136 @@
|
|||
"use strict";
|
||||
Object.defineProperty(exports, "__esModule", { value: true });
|
||||
exports.Languages = void 0;
|
||||
const utils_1 = require("./utils");
|
||||
// tslint:disable-next-line
|
||||
const languageMap = require('language-map');
|
||||
/**
|
||||
* detecte program language through file extension
|
||||
*
|
||||
* @export
|
||||
* @class LanguageDetector
|
||||
*/
|
||||
class Languages {
|
||||
/**
|
||||
* Creates an instance of Detector.
|
||||
*/
|
||||
constructor() {
|
||||
Object.defineProperty(this, "extensionMap", {
|
||||
enumerable: true,
|
||||
configurable: true,
|
||||
writable: true,
|
||||
value: {}
|
||||
});
|
||||
/**
|
||||
* load language before detecting
|
||||
*/
|
||||
Object.defineProperty(this, "loadExtensionMap", {
|
||||
enumerable: true,
|
||||
configurable: true,
|
||||
writable: true,
|
||||
value: () => {
|
||||
const extensions = {};
|
||||
Object.keys(languageMap).forEach((language) => {
|
||||
const languageMode = languageMap[language];
|
||||
const languageExtensions = (languageMode && languageMode.extensions) || [];
|
||||
languageExtensions.forEach((extension) => {
|
||||
extensions[extension.toLowerCase()] = language.toLowerCase();
|
||||
});
|
||||
});
|
||||
return Object.assign({}, extensions, utils_1.ExtensionJustify);
|
||||
}
|
||||
});
|
||||
this.extensionMap = this.loadExtensionMap();
|
||||
}
|
||||
/**
|
||||
* Retrieve the regular expressions for a given language.
|
||||
* This is incomplete, but covers most of the languages we
|
||||
* see in the wild.
|
||||
*
|
||||
* @param language the language to retrieve regexes for
|
||||
*/
|
||||
getRegexes(language) {
|
||||
switch (language) {
|
||||
case 'html':
|
||||
case 'xml':
|
||||
return ALL_REGEXES.html;
|
||||
case 'ruby':
|
||||
return ALL_REGEXES.ruby;
|
||||
case 'python':
|
||||
return ALL_REGEXES.python;
|
||||
default:
|
||||
// not exact, but likely the best guess for any other unspecified language.
|
||||
return ALL_REGEXES.c;
|
||||
}
|
||||
}
|
||||
/**
|
||||
* return extension map
|
||||
*/
|
||||
getExtensionMap() {
|
||||
return this.extensionMap;
|
||||
}
|
||||
}
|
||||
exports.Languages = Languages;
|
||||
const ALL_REGEXES = {
|
||||
c: {
|
||||
// matches when // are the first two characters of a line
|
||||
singleLineComment: /^\/\//,
|
||||
// matches when /* exists in a line
|
||||
multiLineCommentOpen: /\/\*/,
|
||||
// matches when /* starts a line
|
||||
multiLineCommentOpenStart: /^\/\*/,
|
||||
// matches when */ exists a line
|
||||
multiLineCommentClose: /\*\//,
|
||||
// matches when */ ends a line
|
||||
multiLineCommentCloseEnd: /\*\/$/,
|
||||
// matches /* ... */
|
||||
multiLineCommentOpenAndClose: /\/\*.*\*\//
|
||||
},
|
||||
python: {
|
||||
// matches when # the first character of a line
|
||||
singleLineComment: /^#/,
|
||||
// matches when """ starts a line. This is not right, since
|
||||
// a multiline string is not always a comment, but for the
|
||||
// sake of simplicity, we will do that here.
|
||||
multiLineCommentOpen: /"""/,
|
||||
// matches when """ starts a line
|
||||
multiLineCommentOpenStart: /^"""/,
|
||||
// matches when """ exists in a line
|
||||
multiLineCommentClose: /"""/,
|
||||
// matches when """ ends a line
|
||||
multiLineCommentCloseEnd: /"""$/,
|
||||
// matches """ ... """
|
||||
multiLineCommentOpenAndClose: /""".*"""/
|
||||
},
|
||||
ruby: {
|
||||
// matches when # the first character of a line
|
||||
singleLineComment: /^#/,
|
||||
// For ruby multiline comments, =begin and =end must be
|
||||
// on their own lines
|
||||
// matches when =begin starts a line
|
||||
multiLineCommentOpen: /^=begin/,
|
||||
// matches when "begin starts a line
|
||||
multiLineCommentOpenStart: /^=begin/,
|
||||
// matches when "end ends a line
|
||||
multiLineCommentClose: /^=end/,
|
||||
// matches when "end ends a line
|
||||
multiLineCommentCloseEnd: /^=end$/,
|
||||
// not possible in ruby
|
||||
multiLineCommentOpenAndClose: /^\0$/
|
||||
},
|
||||
html: {
|
||||
// There is no single line comment
|
||||
singleLineComment: /^\0$/,
|
||||
// matches when =begin starts a line
|
||||
multiLineCommentOpen: /<!--/,
|
||||
// matches when "begin starts a line
|
||||
multiLineCommentOpenStart: /^<!--/,
|
||||
// matches when "end ends a line
|
||||
multiLineCommentClose: /-->/,
|
||||
// matches when "end ends a line
|
||||
multiLineCommentCloseEnd: /-->$/,
|
||||
// matches <!-- ... -->
|
||||
multiLineCommentOpenAndClose: /<!--.*-->/
|
||||
}
|
||||
};
|
||||
//# sourceMappingURL=languages.js.map
|
||||
1
node_modules/github-linguist/dist/languages.js.map
generated
vendored
Normal file
1
node_modules/github-linguist/dist/languages.js.map
generated
vendored
Normal file
|
|
@ -0,0 +1 @@
|
|||
{"version":3,"file":"languages.js","sourceRoot":"","sources":["../src/languages.ts"],"names":[],"mappings":"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"}
|
||||
13
node_modules/github-linguist/dist/utils.d.ts
generated
vendored
Normal file
13
node_modules/github-linguist/dist/utils.d.ts
generated
vendored
Normal file
|
|
@ -0,0 +1,13 @@
|
|||
/**
|
||||
* Get package version.
|
||||
*
|
||||
* @export getVersion
|
||||
* @returns {string}
|
||||
*/
|
||||
export declare function getVersion(): string;
|
||||
export declare const ExtensionJustify: {
|
||||
'.ts': string;
|
||||
'.jsx': string;
|
||||
'.js': string;
|
||||
'.tsx': string;
|
||||
};
|
||||
29
node_modules/github-linguist/dist/utils.js
generated
vendored
Normal file
29
node_modules/github-linguist/dist/utils.js
generated
vendored
Normal file
|
|
@ -0,0 +1,29 @@
|
|||
"use strict";
|
||||
var __importDefault = (this && this.__importDefault) || function (mod) {
|
||||
return (mod && mod.__esModule) ? mod : { "default": mod };
|
||||
};
|
||||
Object.defineProperty(exports, "__esModule", { value: true });
|
||||
exports.ExtensionJustify = exports.getVersion = void 0;
|
||||
const fs_1 = __importDefault(require("fs"));
|
||||
const path_1 = __importDefault(require("path"));
|
||||
// @ts-ignore
|
||||
const slash2_1 = __importDefault(require("slash2"));
|
||||
const packagePath = slash2_1.default(path_1.default.join(__dirname, '../', 'package.json'));
|
||||
/**
|
||||
* Get package version.
|
||||
*
|
||||
* @export getVersion
|
||||
* @returns {string}
|
||||
*/
|
||||
function getVersion() {
|
||||
const packageInfo = JSON.parse(fs_1.default.readFileSync(packagePath, 'utf8'));
|
||||
return (packageInfo && packageInfo.version) || 'invalid version!';
|
||||
}
|
||||
exports.getVersion = getVersion;
|
||||
exports.ExtensionJustify = {
|
||||
'.ts': 'typescript',
|
||||
'.jsx': 'javascript',
|
||||
'.js': 'javascript',
|
||||
'.tsx': 'typescript',
|
||||
};
|
||||
//# sourceMappingURL=utils.js.map
|
||||
1
node_modules/github-linguist/dist/utils.js.map
generated
vendored
Normal file
1
node_modules/github-linguist/dist/utils.js.map
generated
vendored
Normal file
|
|
@ -0,0 +1 @@
|
|||
{"version":3,"file":"utils.js","sourceRoot":"","sources":["../src/utils.ts"],"names":[],"mappings":";;;;;;AAAA,4CAAoB;AACpB,gDAAwB;AACxB,aAAa;AACb,oDAA2B;AAE3B,MAAM,WAAW,GAAG,gBAAK,CAAC,cAAI,CAAC,IAAI,CAAC,SAAS,EAAE,KAAK,EAAE,cAAc,CAAC,CAAC,CAAC;AAEvE;;;;;GAKG;AACH,SAAgB,UAAU;IACxB,MAAM,WAAW,GAAG,IAAI,CAAC,KAAK,CAAC,YAAE,CAAC,YAAY,CAAC,WAAW,EAAE,MAAM,CAAC,CAAC,CAAC;IAErE,OAAO,CAAC,WAAW,IAAI,WAAW,CAAC,OAAO,CAAC,IAAI,kBAAkB,CAAC;AACpE,CAAC;AAJD,gCAIC;AAEY,QAAA,gBAAgB,GAAG;IAC9B,KAAK,EAAE,YAAY;IACnB,MAAM,EAAE,YAAY;IACpB,KAAK,EAAE,YAAY;IACnB,MAAM,EAAE,YAAY;CACrB,CAAC"}
|
||||
6
node_modules/github-linguist/node_modules/array-union/index.js
generated
vendored
Normal file
6
node_modules/github-linguist/node_modules/array-union/index.js
generated
vendored
Normal file
|
|
@ -0,0 +1,6 @@
|
|||
'use strict';
|
||||
var arrayUniq = require('array-uniq');
|
||||
|
||||
module.exports = function () {
|
||||
return arrayUniq([].concat.apply([], arguments));
|
||||
};
|
||||
21
node_modules/github-linguist/node_modules/array-union/license
generated
vendored
Normal file
21
node_modules/github-linguist/node_modules/array-union/license
generated
vendored
Normal file
|
|
@ -0,0 +1,21 @@
|
|||
The MIT License (MIT)
|
||||
|
||||
Copyright (c) Sindre Sorhus <sindresorhus@gmail.com> (sindresorhus.com)
|
||||
|
||||
Permission is hereby granted, free of charge, to any person obtaining a copy
|
||||
of this software and associated documentation files (the "Software"), to deal
|
||||
in the Software without restriction, including without limitation the rights
|
||||
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
||||
copies of the Software, and to permit persons to whom the Software is
|
||||
furnished to do so, subject to the following conditions:
|
||||
|
||||
The above copyright notice and this permission notice shall be included in
|
||||
all copies or substantial portions of the Software.
|
||||
|
||||
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
||||
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
||||
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
||||
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
||||
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
||||
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
|
||||
THE SOFTWARE.
|
||||
40
node_modules/github-linguist/node_modules/array-union/package.json
generated
vendored
Normal file
40
node_modules/github-linguist/node_modules/array-union/package.json
generated
vendored
Normal file
|
|
@ -0,0 +1,40 @@
|
|||
{
|
||||
"name": "array-union",
|
||||
"version": "1.0.2",
|
||||
"description": "Create an array of unique values, in order, from the input arrays",
|
||||
"license": "MIT",
|
||||
"repository": "sindresorhus/array-union",
|
||||
"author": {
|
||||
"name": "Sindre Sorhus",
|
||||
"email": "sindresorhus@gmail.com",
|
||||
"url": "sindresorhus.com"
|
||||
},
|
||||
"engines": {
|
||||
"node": ">=0.10.0"
|
||||
},
|
||||
"scripts": {
|
||||
"test": "xo && ava"
|
||||
},
|
||||
"files": [
|
||||
"index.js"
|
||||
],
|
||||
"keywords": [
|
||||
"array",
|
||||
"arr",
|
||||
"set",
|
||||
"uniq",
|
||||
"unique",
|
||||
"duplicate",
|
||||
"remove",
|
||||
"union",
|
||||
"combine",
|
||||
"merge"
|
||||
],
|
||||
"dependencies": {
|
||||
"array-uniq": "^1.0.1"
|
||||
},
|
||||
"devDependencies": {
|
||||
"ava": "*",
|
||||
"xo": "*"
|
||||
}
|
||||
}
|
||||
28
node_modules/github-linguist/node_modules/array-union/readme.md
generated
vendored
Normal file
28
node_modules/github-linguist/node_modules/array-union/readme.md
generated
vendored
Normal file
|
|
@ -0,0 +1,28 @@
|
|||
# array-union [](https://travis-ci.org/sindresorhus/array-union)
|
||||
|
||||
> Create an array of unique values, in order, from the input arrays
|
||||
|
||||
|
||||
## Install
|
||||
|
||||
```
|
||||
$ npm install --save array-union
|
||||
```
|
||||
|
||||
|
||||
## Usage
|
||||
|
||||
```js
|
||||
const arrayUnion = require('array-union');
|
||||
|
||||
arrayUnion([1, 1, 2, 3], [2, 3]);
|
||||
//=> [1, 2, 3]
|
||||
|
||||
arrayUnion(['foo', 'foo', 'bar'], ['foo']);
|
||||
//=> ['foo', 'bar']
|
||||
```
|
||||
|
||||
|
||||
## License
|
||||
|
||||
MIT © [Sindre Sorhus](https://sindresorhus.com)
|
||||
419
node_modules/github-linguist/node_modules/commander/CHANGELOG.md
generated
vendored
Normal file
419
node_modules/github-linguist/node_modules/commander/CHANGELOG.md
generated
vendored
Normal file
|
|
@ -0,0 +1,419 @@
|
|||
2.20.3 / 2019-10-11
|
||||
==================
|
||||
|
||||
* Support Node.js 0.10 (Revert #1059)
|
||||
* Ran "npm unpublish commander@2.20.2". There is no 2.20.2.
|
||||
|
||||
2.20.1 / 2019-09-29
|
||||
==================
|
||||
|
||||
* Improve executable subcommand tracking
|
||||
* Update dev dependencies
|
||||
|
||||
2.20.0 / 2019-04-02
|
||||
==================
|
||||
|
||||
* fix: resolve symbolic links completely when hunting for subcommands (#935)
|
||||
* Update index.d.ts (#930)
|
||||
* Update Readme.md (#924)
|
||||
* Remove --save option as it isn't required anymore (#918)
|
||||
* Add link to the license file (#900)
|
||||
* Added example of receiving args from options (#858)
|
||||
* Added missing semicolon (#882)
|
||||
* Add extension to .eslintrc (#876)
|
||||
|
||||
2.19.0 / 2018-10-02
|
||||
==================
|
||||
|
||||
* Removed newline after Options and Commands headers (#864)
|
||||
* Bugfix - Error output (#862)
|
||||
* Fix to change default value to string (#856)
|
||||
|
||||
2.18.0 / 2018-09-07
|
||||
==================
|
||||
|
||||
* Standardize help output (#853)
|
||||
* chmod 644 travis.yml (#851)
|
||||
* add support for execute typescript subcommand via ts-node (#849)
|
||||
|
||||
2.17.1 / 2018-08-07
|
||||
==================
|
||||
|
||||
* Fix bug in command emit (#844)
|
||||
|
||||
2.17.0 / 2018-08-03
|
||||
==================
|
||||
|
||||
* fixed newline output after help information (#833)
|
||||
* Fix to emit the action even without command (#778)
|
||||
* npm update (#823)
|
||||
|
||||
2.16.0 / 2018-06-29
|
||||
==================
|
||||
|
||||
* Remove Makefile and `test/run` (#821)
|
||||
* Make 'npm test' run on Windows (#820)
|
||||
* Add badge to display install size (#807)
|
||||
* chore: cache node_modules (#814)
|
||||
* chore: remove Node.js 4 (EOL), add Node.js 10 (#813)
|
||||
* fixed typo in readme (#812)
|
||||
* Fix types (#804)
|
||||
* Update eslint to resolve vulnerabilities in lodash (#799)
|
||||
* updated readme with custom event listeners. (#791)
|
||||
* fix tests (#794)
|
||||
|
||||
2.15.0 / 2018-03-07
|
||||
==================
|
||||
|
||||
* Update downloads badge to point to graph of downloads over time instead of duplicating link to npm
|
||||
* Arguments description
|
||||
|
||||
2.14.1 / 2018-02-07
|
||||
==================
|
||||
|
||||
* Fix typing of help function
|
||||
|
||||
2.14.0 / 2018-02-05
|
||||
==================
|
||||
|
||||
* only register the option:version event once
|
||||
* Fixes issue #727: Passing empty string for option on command is set to undefined
|
||||
* enable eqeqeq rule
|
||||
* resolves #754 add linter configuration to project
|
||||
* resolves #560 respect custom name for version option
|
||||
* document how to override the version flag
|
||||
* document using options per command
|
||||
|
||||
2.13.0 / 2018-01-09
|
||||
==================
|
||||
|
||||
* Do not print default for --no-
|
||||
* remove trailing spaces in command help
|
||||
* Update CI's Node.js to LTS and latest version
|
||||
* typedefs: Command and Option types added to commander namespace
|
||||
|
||||
2.12.2 / 2017-11-28
|
||||
==================
|
||||
|
||||
* fix: typings are not shipped
|
||||
|
||||
2.12.1 / 2017-11-23
|
||||
==================
|
||||
|
||||
* Move @types/node to dev dependency
|
||||
|
||||
2.12.0 / 2017-11-22
|
||||
==================
|
||||
|
||||
* add attributeName() method to Option objects
|
||||
* Documentation updated for options with --no prefix
|
||||
* typings: `outputHelp` takes a string as the first parameter
|
||||
* typings: use overloads
|
||||
* feat(typings): update to match js api
|
||||
* Print default value in option help
|
||||
* Fix translation error
|
||||
* Fail when using same command and alias (#491)
|
||||
* feat(typings): add help callback
|
||||
* fix bug when description is add after command with options (#662)
|
||||
* Format js code
|
||||
* Rename History.md to CHANGELOG.md (#668)
|
||||
* feat(typings): add typings to support TypeScript (#646)
|
||||
* use current node
|
||||
|
||||
2.11.0 / 2017-07-03
|
||||
==================
|
||||
|
||||
* Fix help section order and padding (#652)
|
||||
* feature: support for signals to subcommands (#632)
|
||||
* Fixed #37, --help should not display first (#447)
|
||||
* Fix translation errors. (#570)
|
||||
* Add package-lock.json
|
||||
* Remove engines
|
||||
* Upgrade package version
|
||||
* Prefix events to prevent conflicts between commands and options (#494)
|
||||
* Removing dependency on graceful-readlink
|
||||
* Support setting name in #name function and make it chainable
|
||||
* Add .vscode directory to .gitignore (Visual Studio Code metadata)
|
||||
* Updated link to ruby commander in readme files
|
||||
|
||||
2.10.0 / 2017-06-19
|
||||
==================
|
||||
|
||||
* Update .travis.yml. drop support for older node.js versions.
|
||||
* Fix require arguments in README.md
|
||||
* On SemVer you do not start from 0.0.1
|
||||
* Add missing semi colon in readme
|
||||
* Add save param to npm install
|
||||
* node v6 travis test
|
||||
* Update Readme_zh-CN.md
|
||||
* Allow literal '--' to be passed-through as an argument
|
||||
* Test subcommand alias help
|
||||
* link build badge to master branch
|
||||
* Support the alias of Git style sub-command
|
||||
* added keyword commander for better search result on npm
|
||||
* Fix Sub-Subcommands
|
||||
* test node.js stable
|
||||
* Fixes TypeError when a command has an option called `--description`
|
||||
* Update README.md to make it beginner friendly and elaborate on the difference between angled and square brackets.
|
||||
* Add chinese Readme file
|
||||
|
||||
2.9.0 / 2015-10-13
|
||||
==================
|
||||
|
||||
* Add option `isDefault` to set default subcommand #415 @Qix-
|
||||
* Add callback to allow filtering or post-processing of help text #434 @djulien
|
||||
* Fix `undefined` text in help information close #414 #416 @zhiyelee
|
||||
|
||||
2.8.1 / 2015-04-22
|
||||
==================
|
||||
|
||||
* Back out `support multiline description` Close #396 #397
|
||||
|
||||
2.8.0 / 2015-04-07
|
||||
==================
|
||||
|
||||
* Add `process.execArg` support, execution args like `--harmony` will be passed to sub-commands #387 @DigitalIO @zhiyelee
|
||||
* Fix bug in Git-style sub-commands #372 @zhiyelee
|
||||
* Allow commands to be hidden from help #383 @tonylukasavage
|
||||
* When git-style sub-commands are in use, yet none are called, display help #382 @claylo
|
||||
* Add ability to specify arguments syntax for top-level command #258 @rrthomas
|
||||
* Support multiline descriptions #208 @zxqfox
|
||||
|
||||
2.7.1 / 2015-03-11
|
||||
==================
|
||||
|
||||
* Revert #347 (fix collisions when option and first arg have same name) which causes a bug in #367.
|
||||
|
||||
2.7.0 / 2015-03-09
|
||||
==================
|
||||
|
||||
* Fix git-style bug when installed globally. Close #335 #349 @zhiyelee
|
||||
* Fix collisions when option and first arg have same name. Close #346 #347 @tonylukasavage
|
||||
* Add support for camelCase on `opts()`. Close #353 @nkzawa
|
||||
* Add node.js 0.12 and io.js to travis.yml
|
||||
* Allow RegEx options. #337 @palanik
|
||||
* Fixes exit code when sub-command failing. Close #260 #332 @pirelenito
|
||||
* git-style `bin` files in $PATH make sense. Close #196 #327 @zhiyelee
|
||||
|
||||
2.6.0 / 2014-12-30
|
||||
==================
|
||||
|
||||
* added `Command#allowUnknownOption` method. Close #138 #318 @doozr @zhiyelee
|
||||
* Add application description to the help msg. Close #112 @dalssoft
|
||||
|
||||
2.5.1 / 2014-12-15
|
||||
==================
|
||||
|
||||
* fixed two bugs incurred by variadic arguments. Close #291 @Quentin01 #302 @zhiyelee
|
||||
|
||||
2.5.0 / 2014-10-24
|
||||
==================
|
||||
|
||||
* add support for variadic arguments. Closes #277 @whitlockjc
|
||||
|
||||
2.4.0 / 2014-10-17
|
||||
==================
|
||||
|
||||
* fixed a bug on executing the coercion function of subcommands option. Closes #270
|
||||
* added `Command.prototype.name` to retrieve command name. Closes #264 #266 @tonylukasavage
|
||||
* added `Command.prototype.opts` to retrieve all the options as a simple object of key-value pairs. Closes #262 @tonylukasavage
|
||||
* fixed a bug on subcommand name. Closes #248 @jonathandelgado
|
||||
* fixed function normalize doesn’t honor option terminator. Closes #216 @abbr
|
||||
|
||||
2.3.0 / 2014-07-16
|
||||
==================
|
||||
|
||||
* add command alias'. Closes PR #210
|
||||
* fix: Typos. Closes #99
|
||||
* fix: Unused fs module. Closes #217
|
||||
|
||||
2.2.0 / 2014-03-29
|
||||
==================
|
||||
|
||||
* add passing of previous option value
|
||||
* fix: support subcommands on windows. Closes #142
|
||||
* Now the defaultValue passed as the second argument of the coercion function.
|
||||
|
||||
2.1.0 / 2013-11-21
|
||||
==================
|
||||
|
||||
* add: allow cflag style option params, unit test, fixes #174
|
||||
|
||||
2.0.0 / 2013-07-18
|
||||
==================
|
||||
|
||||
* remove input methods (.prompt, .confirm, etc)
|
||||
|
||||
1.3.2 / 2013-07-18
|
||||
==================
|
||||
|
||||
* add support for sub-commands to co-exist with the original command
|
||||
|
||||
1.3.1 / 2013-07-18
|
||||
==================
|
||||
|
||||
* add quick .runningCommand hack so you can opt-out of other logic when running a sub command
|
||||
|
||||
1.3.0 / 2013-07-09
|
||||
==================
|
||||
|
||||
* add EACCES error handling
|
||||
* fix sub-command --help
|
||||
|
||||
1.2.0 / 2013-06-13
|
||||
==================
|
||||
|
||||
* allow "-" hyphen as an option argument
|
||||
* support for RegExp coercion
|
||||
|
||||
1.1.1 / 2012-11-20
|
||||
==================
|
||||
|
||||
* add more sub-command padding
|
||||
* fix .usage() when args are present. Closes #106
|
||||
|
||||
1.1.0 / 2012-11-16
|
||||
==================
|
||||
|
||||
* add git-style executable subcommand support. Closes #94
|
||||
|
||||
1.0.5 / 2012-10-09
|
||||
==================
|
||||
|
||||
* fix `--name` clobbering. Closes #92
|
||||
* fix examples/help. Closes #89
|
||||
|
||||
1.0.4 / 2012-09-03
|
||||
==================
|
||||
|
||||
* add `outputHelp()` method.
|
||||
|
||||
1.0.3 / 2012-08-30
|
||||
==================
|
||||
|
||||
* remove invalid .version() defaulting
|
||||
|
||||
1.0.2 / 2012-08-24
|
||||
==================
|
||||
|
||||
* add `--foo=bar` support [arv]
|
||||
* fix password on node 0.8.8. Make backward compatible with 0.6 [focusaurus]
|
||||
|
||||
1.0.1 / 2012-08-03
|
||||
==================
|
||||
|
||||
* fix issue #56
|
||||
* fix tty.setRawMode(mode) was moved to tty.ReadStream#setRawMode() (i.e. process.stdin.setRawMode())
|
||||
|
||||
1.0.0 / 2012-07-05
|
||||
==================
|
||||
|
||||
* add support for optional option descriptions
|
||||
* add defaulting of `.version()` to package.json's version
|
||||
|
||||
0.6.1 / 2012-06-01
|
||||
==================
|
||||
|
||||
* Added: append (yes or no) on confirmation
|
||||
* Added: allow node.js v0.7.x
|
||||
|
||||
0.6.0 / 2012-04-10
|
||||
==================
|
||||
|
||||
* Added `.prompt(obj, callback)` support. Closes #49
|
||||
* Added default support to .choose(). Closes #41
|
||||
* Fixed the choice example
|
||||
|
||||
0.5.1 / 2011-12-20
|
||||
==================
|
||||
|
||||
* Fixed `password()` for recent nodes. Closes #36
|
||||
|
||||
0.5.0 / 2011-12-04
|
||||
==================
|
||||
|
||||
* Added sub-command option support [itay]
|
||||
|
||||
0.4.3 / 2011-12-04
|
||||
==================
|
||||
|
||||
* Fixed custom help ordering. Closes #32
|
||||
|
||||
0.4.2 / 2011-11-24
|
||||
==================
|
||||
|
||||
* Added travis support
|
||||
* Fixed: line-buffered input automatically trimmed. Closes #31
|
||||
|
||||
0.4.1 / 2011-11-18
|
||||
==================
|
||||
|
||||
* Removed listening for "close" on --help
|
||||
|
||||
0.4.0 / 2011-11-15
|
||||
==================
|
||||
|
||||
* Added support for `--`. Closes #24
|
||||
|
||||
0.3.3 / 2011-11-14
|
||||
==================
|
||||
|
||||
* Fixed: wait for close event when writing help info [Jerry Hamlet]
|
||||
|
||||
0.3.2 / 2011-11-01
|
||||
==================
|
||||
|
||||
* Fixed long flag definitions with values [felixge]
|
||||
|
||||
0.3.1 / 2011-10-31
|
||||
==================
|
||||
|
||||
* Changed `--version` short flag to `-V` from `-v`
|
||||
* Changed `.version()` so it's configurable [felixge]
|
||||
|
||||
0.3.0 / 2011-10-31
|
||||
==================
|
||||
|
||||
* Added support for long flags only. Closes #18
|
||||
|
||||
0.2.1 / 2011-10-24
|
||||
==================
|
||||
|
||||
* "node": ">= 0.4.x < 0.7.0". Closes #20
|
||||
|
||||
0.2.0 / 2011-09-26
|
||||
==================
|
||||
|
||||
* Allow for defaults that are not just boolean. Default peassignment only occurs for --no-*, optional, and required arguments. [Jim Isaacs]
|
||||
|
||||
0.1.0 / 2011-08-24
|
||||
==================
|
||||
|
||||
* Added support for custom `--help` output
|
||||
|
||||
0.0.5 / 2011-08-18
|
||||
==================
|
||||
|
||||
* Changed: when the user enters nothing prompt for password again
|
||||
* Fixed issue with passwords beginning with numbers [NuckChorris]
|
||||
|
||||
0.0.4 / 2011-08-15
|
||||
==================
|
||||
|
||||
* Fixed `Commander#args`
|
||||
|
||||
0.0.3 / 2011-08-15
|
||||
==================
|
||||
|
||||
* Added default option value support
|
||||
|
||||
0.0.2 / 2011-08-15
|
||||
==================
|
||||
|
||||
* Added mask support to `Command#password(str[, mask], fn)`
|
||||
* Added `Command#password(str, fn)`
|
||||
|
||||
0.0.1 / 2010-01-03
|
||||
==================
|
||||
|
||||
* Initial release
|
||||
22
node_modules/github-linguist/node_modules/commander/LICENSE
generated
vendored
Normal file
22
node_modules/github-linguist/node_modules/commander/LICENSE
generated
vendored
Normal file
|
|
@ -0,0 +1,22 @@
|
|||
(The MIT License)
|
||||
|
||||
Copyright (c) 2011 TJ Holowaychuk <tj@vision-media.ca>
|
||||
|
||||
Permission is hereby granted, free of charge, to any person obtaining
|
||||
a copy of this software and associated documentation files (the
|
||||
'Software'), to deal in the Software without restriction, including
|
||||
without limitation the rights to use, copy, modify, merge, publish,
|
||||
distribute, sublicense, and/or sell copies of the Software, and to
|
||||
permit persons to whom the Software is furnished to do so, subject to
|
||||
the following conditions:
|
||||
|
||||
The above copyright notice and this permission notice shall be
|
||||
included in all copies or substantial portions of the Software.
|
||||
|
||||
THE SOFTWARE IS PROVIDED 'AS IS', WITHOUT WARRANTY OF ANY KIND,
|
||||
EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
|
||||
MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.
|
||||
IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY
|
||||
CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT,
|
||||
TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE
|
||||
SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
|
||||
428
node_modules/github-linguist/node_modules/commander/Readme.md
generated
vendored
Normal file
428
node_modules/github-linguist/node_modules/commander/Readme.md
generated
vendored
Normal file
|
|
@ -0,0 +1,428 @@
|
|||
# Commander.js
|
||||
|
||||
|
||||
[](http://travis-ci.org/tj/commander.js)
|
||||
[](https://www.npmjs.org/package/commander)
|
||||
[](https://npmcharts.com/compare/commander?minimal=true)
|
||||
[](https://packagephobia.now.sh/result?p=commander)
|
||||
[](https://gitter.im/tj/commander.js?utm_source=badge&utm_medium=badge&utm_campaign=pr-badge&utm_content=badge)
|
||||
|
||||
The complete solution for [node.js](http://nodejs.org) command-line interfaces, inspired by Ruby's [commander](https://github.com/commander-rb/commander).
|
||||
[API documentation](http://tj.github.com/commander.js/)
|
||||
|
||||
|
||||
## Installation
|
||||
|
||||
$ npm install commander
|
||||
|
||||
## Option parsing
|
||||
|
||||
Options with commander are defined with the `.option()` method, also serving as documentation for the options. The example below parses args and options from `process.argv`, leaving remaining args as the `program.args` array which were not consumed by options.
|
||||
|
||||
```js
|
||||
#!/usr/bin/env node
|
||||
|
||||
/**
|
||||
* Module dependencies.
|
||||
*/
|
||||
|
||||
var program = require('commander');
|
||||
|
||||
program
|
||||
.version('0.1.0')
|
||||
.option('-p, --peppers', 'Add peppers')
|
||||
.option('-P, --pineapple', 'Add pineapple')
|
||||
.option('-b, --bbq-sauce', 'Add bbq sauce')
|
||||
.option('-c, --cheese [type]', 'Add the specified type of cheese [marble]', 'marble')
|
||||
.parse(process.argv);
|
||||
|
||||
console.log('you ordered a pizza with:');
|
||||
if (program.peppers) console.log(' - peppers');
|
||||
if (program.pineapple) console.log(' - pineapple');
|
||||
if (program.bbqSauce) console.log(' - bbq');
|
||||
console.log(' - %s cheese', program.cheese);
|
||||
```
|
||||
|
||||
Short flags may be passed as a single arg, for example `-abc` is equivalent to `-a -b -c`. Multi-word options such as "--template-engine" are camel-cased, becoming `program.templateEngine` etc.
|
||||
|
||||
Note that multi-word options starting with `--no` prefix negate the boolean value of the following word. For example, `--no-sauce` sets the value of `program.sauce` to false.
|
||||
|
||||
```js
|
||||
#!/usr/bin/env node
|
||||
|
||||
/**
|
||||
* Module dependencies.
|
||||
*/
|
||||
|
||||
var program = require('commander');
|
||||
|
||||
program
|
||||
.option('--no-sauce', 'Remove sauce')
|
||||
.parse(process.argv);
|
||||
|
||||
console.log('you ordered a pizza');
|
||||
if (program.sauce) console.log(' with sauce');
|
||||
else console.log(' without sauce');
|
||||
```
|
||||
|
||||
To get string arguments from options you will need to use angle brackets <> for required inputs or square brackets [] for optional inputs.
|
||||
|
||||
e.g. ```.option('-m --myarg [myVar]', 'my super cool description')```
|
||||
|
||||
Then to access the input if it was passed in.
|
||||
|
||||
e.g. ```var myInput = program.myarg```
|
||||
|
||||
**NOTE**: If you pass a argument without using brackets the example above will return true and not the value passed in.
|
||||
|
||||
|
||||
## Version option
|
||||
|
||||
Calling the `version` implicitly adds the `-V` and `--version` options to the command.
|
||||
When either of these options is present, the command prints the version number and exits.
|
||||
|
||||
$ ./examples/pizza -V
|
||||
0.0.1
|
||||
|
||||
If you want your program to respond to the `-v` option instead of the `-V` option, simply pass custom flags to the `version` method using the same syntax as the `option` method.
|
||||
|
||||
```js
|
||||
program
|
||||
.version('0.0.1', '-v, --version')
|
||||
```
|
||||
|
||||
The version flags can be named anything, but the long option is required.
|
||||
|
||||
## Command-specific options
|
||||
|
||||
You can attach options to a command.
|
||||
|
||||
```js
|
||||
#!/usr/bin/env node
|
||||
|
||||
var program = require('commander');
|
||||
|
||||
program
|
||||
.command('rm <dir>')
|
||||
.option('-r, --recursive', 'Remove recursively')
|
||||
.action(function (dir, cmd) {
|
||||
console.log('remove ' + dir + (cmd.recursive ? ' recursively' : ''))
|
||||
})
|
||||
|
||||
program.parse(process.argv)
|
||||
```
|
||||
|
||||
A command's options are validated when the command is used. Any unknown options will be reported as an error. However, if an action-based command does not define an action, then the options are not validated.
|
||||
|
||||
## Coercion
|
||||
|
||||
```js
|
||||
function range(val) {
|
||||
return val.split('..').map(Number);
|
||||
}
|
||||
|
||||
function list(val) {
|
||||
return val.split(',');
|
||||
}
|
||||
|
||||
function collect(val, memo) {
|
||||
memo.push(val);
|
||||
return memo;
|
||||
}
|
||||
|
||||
function increaseVerbosity(v, total) {
|
||||
return total + 1;
|
||||
}
|
||||
|
||||
program
|
||||
.version('0.1.0')
|
||||
.usage('[options] <file ...>')
|
||||
.option('-i, --integer <n>', 'An integer argument', parseInt)
|
||||
.option('-f, --float <n>', 'A float argument', parseFloat)
|
||||
.option('-r, --range <a>..<b>', 'A range', range)
|
||||
.option('-l, --list <items>', 'A list', list)
|
||||
.option('-o, --optional [value]', 'An optional value')
|
||||
.option('-c, --collect [value]', 'A repeatable value', collect, [])
|
||||
.option('-v, --verbose', 'A value that can be increased', increaseVerbosity, 0)
|
||||
.parse(process.argv);
|
||||
|
||||
console.log(' int: %j', program.integer);
|
||||
console.log(' float: %j', program.float);
|
||||
console.log(' optional: %j', program.optional);
|
||||
program.range = program.range || [];
|
||||
console.log(' range: %j..%j', program.range[0], program.range[1]);
|
||||
console.log(' list: %j', program.list);
|
||||
console.log(' collect: %j', program.collect);
|
||||
console.log(' verbosity: %j', program.verbose);
|
||||
console.log(' args: %j', program.args);
|
||||
```
|
||||
|
||||
## Regular Expression
|
||||
```js
|
||||
program
|
||||
.version('0.1.0')
|
||||
.option('-s --size <size>', 'Pizza size', /^(large|medium|small)$/i, 'medium')
|
||||
.option('-d --drink [drink]', 'Drink', /^(coke|pepsi|izze)$/i)
|
||||
.parse(process.argv);
|
||||
|
||||
console.log(' size: %j', program.size);
|
||||
console.log(' drink: %j', program.drink);
|
||||
```
|
||||
|
||||
## Variadic arguments
|
||||
|
||||
The last argument of a command can be variadic, and only the last argument. To make an argument variadic you have to
|
||||
append `...` to the argument name. Here is an example:
|
||||
|
||||
```js
|
||||
#!/usr/bin/env node
|
||||
|
||||
/**
|
||||
* Module dependencies.
|
||||
*/
|
||||
|
||||
var program = require('commander');
|
||||
|
||||
program
|
||||
.version('0.1.0')
|
||||
.command('rmdir <dir> [otherDirs...]')
|
||||
.action(function (dir, otherDirs) {
|
||||
console.log('rmdir %s', dir);
|
||||
if (otherDirs) {
|
||||
otherDirs.forEach(function (oDir) {
|
||||
console.log('rmdir %s', oDir);
|
||||
});
|
||||
}
|
||||
});
|
||||
|
||||
program.parse(process.argv);
|
||||
```
|
||||
|
||||
An `Array` is used for the value of a variadic argument. This applies to `program.args` as well as the argument passed
|
||||
to your action as demonstrated above.
|
||||
|
||||
## Specify the argument syntax
|
||||
|
||||
```js
|
||||
#!/usr/bin/env node
|
||||
|
||||
var program = require('commander');
|
||||
|
||||
program
|
||||
.version('0.1.0')
|
||||
.arguments('<cmd> [env]')
|
||||
.action(function (cmd, env) {
|
||||
cmdValue = cmd;
|
||||
envValue = env;
|
||||
});
|
||||
|
||||
program.parse(process.argv);
|
||||
|
||||
if (typeof cmdValue === 'undefined') {
|
||||
console.error('no command given!');
|
||||
process.exit(1);
|
||||
}
|
||||
console.log('command:', cmdValue);
|
||||
console.log('environment:', envValue || "no environment given");
|
||||
```
|
||||
Angled brackets (e.g. `<cmd>`) indicate required input. Square brackets (e.g. `[env]`) indicate optional input.
|
||||
|
||||
## Git-style sub-commands
|
||||
|
||||
```js
|
||||
// file: ./examples/pm
|
||||
var program = require('commander');
|
||||
|
||||
program
|
||||
.version('0.1.0')
|
||||
.command('install [name]', 'install one or more packages')
|
||||
.command('search [query]', 'search with optional query')
|
||||
.command('list', 'list packages installed', {isDefault: true})
|
||||
.parse(process.argv);
|
||||
```
|
||||
|
||||
When `.command()` is invoked with a description argument, no `.action(callback)` should be called to handle sub-commands, otherwise there will be an error. This tells commander that you're going to use separate executables for sub-commands, much like `git(1)` and other popular tools.
|
||||
The commander will try to search the executables in the directory of the entry script (like `./examples/pm`) with the name `program-command`, like `pm-install`, `pm-search`.
|
||||
|
||||
Options can be passed with the call to `.command()`. Specifying `true` for `opts.noHelp` will remove the subcommand from the generated help output. Specifying `true` for `opts.isDefault` will run the subcommand if no other subcommand is specified.
|
||||
|
||||
If the program is designed to be installed globally, make sure the executables have proper modes, like `755`.
|
||||
|
||||
### `--harmony`
|
||||
|
||||
You can enable `--harmony` option in two ways:
|
||||
* Use `#! /usr/bin/env node --harmony` in the sub-commands scripts. Note some os version don’t support this pattern.
|
||||
* Use the `--harmony` option when call the command, like `node --harmony examples/pm publish`. The `--harmony` option will be preserved when spawning sub-command process.
|
||||
|
||||
## Automated --help
|
||||
|
||||
The help information is auto-generated based on the information commander already knows about your program, so the following `--help` info is for free:
|
||||
|
||||
```
|
||||
$ ./examples/pizza --help
|
||||
Usage: pizza [options]
|
||||
|
||||
An application for pizzas ordering
|
||||
|
||||
Options:
|
||||
-h, --help output usage information
|
||||
-V, --version output the version number
|
||||
-p, --peppers Add peppers
|
||||
-P, --pineapple Add pineapple
|
||||
-b, --bbq Add bbq sauce
|
||||
-c, --cheese <type> Add the specified type of cheese [marble]
|
||||
-C, --no-cheese You do not want any cheese
|
||||
```
|
||||
|
||||
## Custom help
|
||||
|
||||
You can display arbitrary `-h, --help` information
|
||||
by listening for "--help". Commander will automatically
|
||||
exit once you are done so that the remainder of your program
|
||||
does not execute causing undesired behaviors, for example
|
||||
in the following executable "stuff" will not output when
|
||||
`--help` is used.
|
||||
|
||||
```js
|
||||
#!/usr/bin/env node
|
||||
|
||||
/**
|
||||
* Module dependencies.
|
||||
*/
|
||||
|
||||
var program = require('commander');
|
||||
|
||||
program
|
||||
.version('0.1.0')
|
||||
.option('-f, --foo', 'enable some foo')
|
||||
.option('-b, --bar', 'enable some bar')
|
||||
.option('-B, --baz', 'enable some baz');
|
||||
|
||||
// must be before .parse() since
|
||||
// node's emit() is immediate
|
||||
|
||||
program.on('--help', function(){
|
||||
console.log('')
|
||||
console.log('Examples:');
|
||||
console.log(' $ custom-help --help');
|
||||
console.log(' $ custom-help -h');
|
||||
});
|
||||
|
||||
program.parse(process.argv);
|
||||
|
||||
console.log('stuff');
|
||||
```
|
||||
|
||||
Yields the following help output when `node script-name.js -h` or `node script-name.js --help` are run:
|
||||
|
||||
```
|
||||
Usage: custom-help [options]
|
||||
|
||||
Options:
|
||||
-h, --help output usage information
|
||||
-V, --version output the version number
|
||||
-f, --foo enable some foo
|
||||
-b, --bar enable some bar
|
||||
-B, --baz enable some baz
|
||||
|
||||
Examples:
|
||||
$ custom-help --help
|
||||
$ custom-help -h
|
||||
```
|
||||
|
||||
## .outputHelp(cb)
|
||||
|
||||
Output help information without exiting.
|
||||
Optional callback cb allows post-processing of help text before it is displayed.
|
||||
|
||||
If you want to display help by default (e.g. if no command was provided), you can use something like:
|
||||
|
||||
```js
|
||||
var program = require('commander');
|
||||
var colors = require('colors');
|
||||
|
||||
program
|
||||
.version('0.1.0')
|
||||
.command('getstream [url]', 'get stream URL')
|
||||
.parse(process.argv);
|
||||
|
||||
if (!process.argv.slice(2).length) {
|
||||
program.outputHelp(make_red);
|
||||
}
|
||||
|
||||
function make_red(txt) {
|
||||
return colors.red(txt); //display the help text in red on the console
|
||||
}
|
||||
```
|
||||
|
||||
## .help(cb)
|
||||
|
||||
Output help information and exit immediately.
|
||||
Optional callback cb allows post-processing of help text before it is displayed.
|
||||
|
||||
|
||||
## Custom event listeners
|
||||
You can execute custom actions by listening to command and option events.
|
||||
|
||||
```js
|
||||
program.on('option:verbose', function () {
|
||||
process.env.VERBOSE = this.verbose;
|
||||
});
|
||||
|
||||
// error on unknown commands
|
||||
program.on('command:*', function () {
|
||||
console.error('Invalid command: %s\nSee --help for a list of available commands.', program.args.join(' '));
|
||||
process.exit(1);
|
||||
});
|
||||
```
|
||||
|
||||
## Examples
|
||||
|
||||
```js
|
||||
var program = require('commander');
|
||||
|
||||
program
|
||||
.version('0.1.0')
|
||||
.option('-C, --chdir <path>', 'change the working directory')
|
||||
.option('-c, --config <path>', 'set config path. defaults to ./deploy.conf')
|
||||
.option('-T, --no-tests', 'ignore test hook');
|
||||
|
||||
program
|
||||
.command('setup [env]')
|
||||
.description('run setup commands for all envs')
|
||||
.option("-s, --setup_mode [mode]", "Which setup mode to use")
|
||||
.action(function(env, options){
|
||||
var mode = options.setup_mode || "normal";
|
||||
env = env || 'all';
|
||||
console.log('setup for %s env(s) with %s mode', env, mode);
|
||||
});
|
||||
|
||||
program
|
||||
.command('exec <cmd>')
|
||||
.alias('ex')
|
||||
.description('execute the given remote cmd')
|
||||
.option("-e, --exec_mode <mode>", "Which exec mode to use")
|
||||
.action(function(cmd, options){
|
||||
console.log('exec "%s" using %s mode', cmd, options.exec_mode);
|
||||
}).on('--help', function() {
|
||||
console.log('');
|
||||
console.log('Examples:');
|
||||
console.log('');
|
||||
console.log(' $ deploy exec sequential');
|
||||
console.log(' $ deploy exec async');
|
||||
});
|
||||
|
||||
program
|
||||
.command('*')
|
||||
.action(function(env){
|
||||
console.log('deploying "%s"', env);
|
||||
});
|
||||
|
||||
program.parse(process.argv);
|
||||
```
|
||||
|
||||
More Demos can be found in the [examples](https://github.com/tj/commander.js/tree/master/examples) directory.
|
||||
|
||||
## License
|
||||
|
||||
[MIT](https://github.com/tj/commander.js/blob/master/LICENSE)
|
||||
1224
node_modules/github-linguist/node_modules/commander/index.js
generated
vendored
Normal file
1224
node_modules/github-linguist/node_modules/commander/index.js
generated
vendored
Normal file
File diff suppressed because it is too large
Load diff
38
node_modules/github-linguist/node_modules/commander/package.json
generated
vendored
Normal file
38
node_modules/github-linguist/node_modules/commander/package.json
generated
vendored
Normal file
|
|
@ -0,0 +1,38 @@
|
|||
{
|
||||
"name": "commander",
|
||||
"version": "2.20.3",
|
||||
"description": "the complete solution for node.js command-line programs",
|
||||
"keywords": [
|
||||
"commander",
|
||||
"command",
|
||||
"option",
|
||||
"parser"
|
||||
],
|
||||
"author": "TJ Holowaychuk <tj@vision-media.ca>",
|
||||
"license": "MIT",
|
||||
"repository": {
|
||||
"type": "git",
|
||||
"url": "https://github.com/tj/commander.js.git"
|
||||
},
|
||||
"scripts": {
|
||||
"lint": "eslint index.js",
|
||||
"test": "node test/run.js && npm run test-typings",
|
||||
"test-typings": "tsc -p tsconfig.json"
|
||||
},
|
||||
"main": "index",
|
||||
"files": [
|
||||
"index.js",
|
||||
"typings/index.d.ts"
|
||||
],
|
||||
"dependencies": {},
|
||||
"devDependencies": {
|
||||
"@types/node": "^12.7.8",
|
||||
"eslint": "^6.4.0",
|
||||
"should": "^13.2.3",
|
||||
"sinon": "^7.5.0",
|
||||
"standard": "^14.3.1",
|
||||
"ts-node": "^8.4.1",
|
||||
"typescript": "^3.6.3"
|
||||
},
|
||||
"typings": "typings/index.d.ts"
|
||||
}
|
||||
310
node_modules/github-linguist/node_modules/commander/typings/index.d.ts
generated
vendored
Normal file
310
node_modules/github-linguist/node_modules/commander/typings/index.d.ts
generated
vendored
Normal file
|
|
@ -0,0 +1,310 @@
|
|||
// Type definitions for commander 2.11
|
||||
// Project: https://github.com/visionmedia/commander.js
|
||||
// Definitions by: Alan Agius <https://github.com/alan-agius4>, Marcelo Dezem <https://github.com/mdezem>, vvakame <https://github.com/vvakame>, Jules Randolph <https://github.com/sveinburne>
|
||||
// Definitions: https://github.com/DefinitelyTyped/DefinitelyTyped
|
||||
|
||||
declare namespace local {
|
||||
|
||||
class Option {
|
||||
flags: string;
|
||||
required: boolean;
|
||||
optional: boolean;
|
||||
bool: boolean;
|
||||
short?: string;
|
||||
long: string;
|
||||
description: string;
|
||||
|
||||
/**
|
||||
* Initialize a new `Option` with the given `flags` and `description`.
|
||||
*
|
||||
* @param {string} flags
|
||||
* @param {string} [description]
|
||||
*/
|
||||
constructor(flags: string, description?: string);
|
||||
}
|
||||
|
||||
class Command extends NodeJS.EventEmitter {
|
||||
[key: string]: any;
|
||||
|
||||
args: string[];
|
||||
|
||||
/**
|
||||
* Initialize a new `Command`.
|
||||
*
|
||||
* @param {string} [name]
|
||||
*/
|
||||
constructor(name?: string);
|
||||
|
||||
/**
|
||||
* Set the program version to `str`.
|
||||
*
|
||||
* This method auto-registers the "-V, --version" flag
|
||||
* which will print the version number when passed.
|
||||
*
|
||||
* @param {string} str
|
||||
* @param {string} [flags]
|
||||
* @returns {Command} for chaining
|
||||
*/
|
||||
version(str: string, flags?: string): Command;
|
||||
|
||||
/**
|
||||
* Add command `name`.
|
||||
*
|
||||
* The `.action()` callback is invoked when the
|
||||
* command `name` is specified via __ARGV__,
|
||||
* and the remaining arguments are applied to the
|
||||
* function for access.
|
||||
*
|
||||
* When the `name` is "*" an un-matched command
|
||||
* will be passed as the first arg, followed by
|
||||
* the rest of __ARGV__ remaining.
|
||||
*
|
||||
* @example
|
||||
* program
|
||||
* .version('0.0.1')
|
||||
* .option('-C, --chdir <path>', 'change the working directory')
|
||||
* .option('-c, --config <path>', 'set config path. defaults to ./deploy.conf')
|
||||
* .option('-T, --no-tests', 'ignore test hook')
|
||||
*
|
||||
* program
|
||||
* .command('setup')
|
||||
* .description('run remote setup commands')
|
||||
* .action(function() {
|
||||
* console.log('setup');
|
||||
* });
|
||||
*
|
||||
* program
|
||||
* .command('exec <cmd>')
|
||||
* .description('run the given remote command')
|
||||
* .action(function(cmd) {
|
||||
* console.log('exec "%s"', cmd);
|
||||
* });
|
||||
*
|
||||
* program
|
||||
* .command('teardown <dir> [otherDirs...]')
|
||||
* .description('run teardown commands')
|
||||
* .action(function(dir, otherDirs) {
|
||||
* console.log('dir "%s"', dir);
|
||||
* if (otherDirs) {
|
||||
* otherDirs.forEach(function (oDir) {
|
||||
* console.log('dir "%s"', oDir);
|
||||
* });
|
||||
* }
|
||||
* });
|
||||
*
|
||||
* program
|
||||
* .command('*')
|
||||
* .description('deploy the given env')
|
||||
* .action(function(env) {
|
||||
* console.log('deploying "%s"', env);
|
||||
* });
|
||||
*
|
||||
* program.parse(process.argv);
|
||||
*
|
||||
* @param {string} name
|
||||
* @param {string} [desc] for git-style sub-commands
|
||||
* @param {CommandOptions} [opts] command options
|
||||
* @returns {Command} the new command
|
||||
*/
|
||||
command(name: string, desc?: string, opts?: commander.CommandOptions): Command;
|
||||
|
||||
/**
|
||||
* Define argument syntax for the top-level command.
|
||||
*
|
||||
* @param {string} desc
|
||||
* @returns {Command} for chaining
|
||||
*/
|
||||
arguments(desc: string): Command;
|
||||
|
||||
/**
|
||||
* Parse expected `args`.
|
||||
*
|
||||
* For example `["[type]"]` becomes `[{ required: false, name: 'type' }]`.
|
||||
*
|
||||
* @param {string[]} args
|
||||
* @returns {Command} for chaining
|
||||
*/
|
||||
parseExpectedArgs(args: string[]): Command;
|
||||
|
||||
/**
|
||||
* Register callback `fn` for the command.
|
||||
*
|
||||
* @example
|
||||
* program
|
||||
* .command('help')
|
||||
* .description('display verbose help')
|
||||
* .action(function() {
|
||||
* // output help here
|
||||
* });
|
||||
*
|
||||
* @param {(...args: any[]) => void} fn
|
||||
* @returns {Command} for chaining
|
||||
*/
|
||||
action(fn: (...args: any[]) => void): Command;
|
||||
|
||||
/**
|
||||
* Define option with `flags`, `description` and optional
|
||||
* coercion `fn`.
|
||||
*
|
||||
* The `flags` string should contain both the short and long flags,
|
||||
* separated by comma, a pipe or space. The following are all valid
|
||||
* all will output this way when `--help` is used.
|
||||
*
|
||||
* "-p, --pepper"
|
||||
* "-p|--pepper"
|
||||
* "-p --pepper"
|
||||
*
|
||||
* @example
|
||||
* // simple boolean defaulting to false
|
||||
* program.option('-p, --pepper', 'add pepper');
|
||||
*
|
||||
* --pepper
|
||||
* program.pepper
|
||||
* // => Boolean
|
||||
*
|
||||
* // simple boolean defaulting to true
|
||||
* program.option('-C, --no-cheese', 'remove cheese');
|
||||
*
|
||||
* program.cheese
|
||||
* // => true
|
||||
*
|
||||
* --no-cheese
|
||||
* program.cheese
|
||||
* // => false
|
||||
*
|
||||
* // required argument
|
||||
* program.option('-C, --chdir <path>', 'change the working directory');
|
||||
*
|
||||
* --chdir /tmp
|
||||
* program.chdir
|
||||
* // => "/tmp"
|
||||
*
|
||||
* // optional argument
|
||||
* program.option('-c, --cheese [type]', 'add cheese [marble]');
|
||||
*
|
||||
* @param {string} flags
|
||||
* @param {string} [description]
|
||||
* @param {((arg1: any, arg2: any) => void) | RegExp} [fn] function or default
|
||||
* @param {*} [defaultValue]
|
||||
* @returns {Command} for chaining
|
||||
*/
|
||||
option(flags: string, description?: string, fn?: ((arg1: any, arg2: any) => void) | RegExp, defaultValue?: any): Command;
|
||||
option(flags: string, description?: string, defaultValue?: any): Command;
|
||||
|
||||
/**
|
||||
* Allow unknown options on the command line.
|
||||
*
|
||||
* @param {boolean} [arg] if `true` or omitted, no error will be thrown for unknown options.
|
||||
* @returns {Command} for chaining
|
||||
*/
|
||||
allowUnknownOption(arg?: boolean): Command;
|
||||
|
||||
/**
|
||||
* Parse `argv`, settings options and invoking commands when defined.
|
||||
*
|
||||
* @param {string[]} argv
|
||||
* @returns {Command} for chaining
|
||||
*/
|
||||
parse(argv: string[]): Command;
|
||||
|
||||
/**
|
||||
* Parse options from `argv` returning `argv` void of these options.
|
||||
*
|
||||
* @param {string[]} argv
|
||||
* @returns {ParseOptionsResult}
|
||||
*/
|
||||
parseOptions(argv: string[]): commander.ParseOptionsResult;
|
||||
|
||||
/**
|
||||
* Return an object containing options as key-value pairs
|
||||
*
|
||||
* @returns {{[key: string]: any}}
|
||||
*/
|
||||
opts(): { [key: string]: any };
|
||||
|
||||
/**
|
||||
* Set the description to `str`.
|
||||
*
|
||||
* @param {string} str
|
||||
* @param {{[argName: string]: string}} argsDescription
|
||||
* @return {(Command | string)}
|
||||
*/
|
||||
description(str: string, argsDescription?: {[argName: string]: string}): Command;
|
||||
description(): string;
|
||||
|
||||
/**
|
||||
* Set an alias for the command.
|
||||
*
|
||||
* @param {string} alias
|
||||
* @return {(Command | string)}
|
||||
*/
|
||||
alias(alias: string): Command;
|
||||
alias(): string;
|
||||
|
||||
/**
|
||||
* Set or get the command usage.
|
||||
*
|
||||
* @param {string} str
|
||||
* @return {(Command | string)}
|
||||
*/
|
||||
usage(str: string): Command;
|
||||
usage(): string;
|
||||
|
||||
/**
|
||||
* Set the name of the command.
|
||||
*
|
||||
* @param {string} str
|
||||
* @return {Command}
|
||||
*/
|
||||
name(str: string): Command;
|
||||
|
||||
/**
|
||||
* Get the name of the command.
|
||||
*
|
||||
* @return {string}
|
||||
*/
|
||||
name(): string;
|
||||
|
||||
/**
|
||||
* Output help information for this command.
|
||||
*
|
||||
* @param {(str: string) => string} [cb]
|
||||
*/
|
||||
outputHelp(cb?: (str: string) => string): void;
|
||||
|
||||
/** Output help information and exit.
|
||||
*
|
||||
* @param {(str: string) => string} [cb]
|
||||
*/
|
||||
help(cb?: (str: string) => string): never;
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
declare namespace commander {
|
||||
|
||||
type Command = local.Command
|
||||
|
||||
type Option = local.Option
|
||||
|
||||
interface CommandOptions {
|
||||
noHelp?: boolean;
|
||||
isDefault?: boolean;
|
||||
}
|
||||
|
||||
interface ParseOptionsResult {
|
||||
args: string[];
|
||||
unknown: string[];
|
||||
}
|
||||
|
||||
interface CommanderStatic extends Command {
|
||||
Command: typeof local.Command;
|
||||
Option: typeof local.Option;
|
||||
CommandOptions: CommandOptions;
|
||||
ParseOptionsResult: ParseOptionsResult;
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
declare const commander: commander.CommanderStatic;
|
||||
export = commander;
|
||||
88
node_modules/github-linguist/node_modules/globby/index.js
generated
vendored
Normal file
88
node_modules/github-linguist/node_modules/globby/index.js
generated
vendored
Normal file
|
|
@ -0,0 +1,88 @@
|
|||
'use strict';
|
||||
var Promise = require('pinkie-promise');
|
||||
var arrayUnion = require('array-union');
|
||||
var objectAssign = require('object-assign');
|
||||
var glob = require('glob');
|
||||
var pify = require('pify');
|
||||
|
||||
var globP = pify(glob, Promise).bind(glob);
|
||||
|
||||
function isNegative(pattern) {
|
||||
return pattern[0] === '!';
|
||||
}
|
||||
|
||||
function isString(value) {
|
||||
return typeof value === 'string';
|
||||
}
|
||||
|
||||
function assertPatternsInput(patterns) {
|
||||
if (!patterns.every(isString)) {
|
||||
throw new TypeError('patterns must be a string or an array of strings');
|
||||
}
|
||||
}
|
||||
|
||||
function generateGlobTasks(patterns, opts) {
|
||||
patterns = [].concat(patterns);
|
||||
assertPatternsInput(patterns);
|
||||
|
||||
var globTasks = [];
|
||||
|
||||
opts = objectAssign({
|
||||
cache: Object.create(null),
|
||||
statCache: Object.create(null),
|
||||
realpathCache: Object.create(null),
|
||||
symlinks: Object.create(null),
|
||||
ignore: []
|
||||
}, opts);
|
||||
|
||||
patterns.forEach(function (pattern, i) {
|
||||
if (isNegative(pattern)) {
|
||||
return;
|
||||
}
|
||||
|
||||
var ignore = patterns.slice(i).filter(isNegative).map(function (pattern) {
|
||||
return pattern.slice(1);
|
||||
});
|
||||
|
||||
globTasks.push({
|
||||
pattern: pattern,
|
||||
opts: objectAssign({}, opts, {
|
||||
ignore: opts.ignore.concat(ignore)
|
||||
})
|
||||
});
|
||||
});
|
||||
|
||||
return globTasks;
|
||||
}
|
||||
|
||||
module.exports = function (patterns, opts) {
|
||||
var globTasks;
|
||||
|
||||
try {
|
||||
globTasks = generateGlobTasks(patterns, opts);
|
||||
} catch (err) {
|
||||
return Promise.reject(err);
|
||||
}
|
||||
|
||||
return Promise.all(globTasks.map(function (task) {
|
||||
return globP(task.pattern, task.opts);
|
||||
})).then(function (paths) {
|
||||
return arrayUnion.apply(null, paths);
|
||||
});
|
||||
};
|
||||
|
||||
module.exports.sync = function (patterns, opts) {
|
||||
var globTasks = generateGlobTasks(patterns, opts);
|
||||
|
||||
return globTasks.reduce(function (matches, task) {
|
||||
return arrayUnion(matches, glob.sync(task.pattern, task.opts));
|
||||
}, []);
|
||||
};
|
||||
|
||||
module.exports.generateGlobTasks = generateGlobTasks;
|
||||
|
||||
module.exports.hasMagic = function (patterns, opts) {
|
||||
return [].concat(patterns).some(function (pattern) {
|
||||
return glob.hasMagic(pattern, opts);
|
||||
});
|
||||
};
|
||||
21
node_modules/github-linguist/node_modules/globby/license
generated
vendored
Normal file
21
node_modules/github-linguist/node_modules/globby/license
generated
vendored
Normal file
|
|
@ -0,0 +1,21 @@
|
|||
The MIT License (MIT)
|
||||
|
||||
Copyright (c) Sindre Sorhus <sindresorhus@gmail.com> (sindresorhus.com)
|
||||
|
||||
Permission is hereby granted, free of charge, to any person obtaining a copy
|
||||
of this software and associated documentation files (the "Software"), to deal
|
||||
in the Software without restriction, including without limitation the rights
|
||||
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
||||
copies of the Software, and to permit persons to whom the Software is
|
||||
furnished to do so, subject to the following conditions:
|
||||
|
||||
The above copyright notice and this permission notice shall be included in
|
||||
all copies or substantial portions of the Software.
|
||||
|
||||
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
||||
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
||||
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
||||
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
||||
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
||||
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
|
||||
THE SOFTWARE.
|
||||
69
node_modules/github-linguist/node_modules/globby/package.json
generated
vendored
Normal file
69
node_modules/github-linguist/node_modules/globby/package.json
generated
vendored
Normal file
|
|
@ -0,0 +1,69 @@
|
|||
{
|
||||
"name": "globby",
|
||||
"version": "6.1.0",
|
||||
"description": "Extends `glob` with support for multiple patterns and exposes a Promise API",
|
||||
"license": "MIT",
|
||||
"repository": "sindresorhus/globby",
|
||||
"author": {
|
||||
"email": "sindresorhus@gmail.com",
|
||||
"name": "Sindre Sorhus",
|
||||
"url": "sindresorhus.com"
|
||||
},
|
||||
"engines": {
|
||||
"node": ">=0.10.0"
|
||||
},
|
||||
"scripts": {
|
||||
"bench": "npm update glob-stream && matcha bench.js",
|
||||
"test": "xo && ava"
|
||||
},
|
||||
"files": [
|
||||
"index.js"
|
||||
],
|
||||
"keywords": [
|
||||
"all",
|
||||
"array",
|
||||
"directories",
|
||||
"dirs",
|
||||
"expand",
|
||||
"files",
|
||||
"filesystem",
|
||||
"filter",
|
||||
"find",
|
||||
"fnmatch",
|
||||
"folders",
|
||||
"fs",
|
||||
"glob",
|
||||
"globbing",
|
||||
"globs",
|
||||
"gulpfriendly",
|
||||
"match",
|
||||
"matcher",
|
||||
"minimatch",
|
||||
"multi",
|
||||
"multiple",
|
||||
"paths",
|
||||
"pattern",
|
||||
"patterns",
|
||||
"traverse",
|
||||
"util",
|
||||
"utility",
|
||||
"wildcard",
|
||||
"wildcards",
|
||||
"promise"
|
||||
],
|
||||
"dependencies": {
|
||||
"array-union": "^1.0.1",
|
||||
"glob": "^7.0.3",
|
||||
"object-assign": "^4.0.1",
|
||||
"pify": "^2.0.0",
|
||||
"pinkie-promise": "^2.0.0"
|
||||
},
|
||||
"devDependencies": {
|
||||
"ava": "*",
|
||||
"glob-stream": "gulpjs/glob-stream#master",
|
||||
"globby": "sindresorhus/globby#master",
|
||||
"matcha": "^0.7.0",
|
||||
"rimraf": "^2.2.8",
|
||||
"xo": "^0.16.0"
|
||||
}
|
||||
}
|
||||
88
node_modules/github-linguist/node_modules/globby/readme.md
generated
vendored
Normal file
88
node_modules/github-linguist/node_modules/globby/readme.md
generated
vendored
Normal file
|
|
@ -0,0 +1,88 @@
|
|||
# globby [](https://travis-ci.org/sindresorhus/globby)
|
||||
|
||||
> Extends [glob](https://github.com/isaacs/node-glob) with support for multiple patterns and exposes a Promise API
|
||||
|
||||
|
||||
## Install
|
||||
|
||||
```
|
||||
$ npm install --save globby
|
||||
```
|
||||
|
||||
|
||||
## Usage
|
||||
|
||||
```
|
||||
├── unicorn
|
||||
├── cake
|
||||
└── rainbow
|
||||
```
|
||||
|
||||
```js
|
||||
const globby = require('globby');
|
||||
|
||||
globby(['*', '!cake']).then(paths => {
|
||||
console.log(paths);
|
||||
//=> ['unicorn', 'rainbow']
|
||||
});
|
||||
```
|
||||
|
||||
|
||||
## API
|
||||
|
||||
### globby(patterns, [options])
|
||||
|
||||
Returns a Promise for an array of matching paths.
|
||||
|
||||
### globby.sync(patterns, [options])
|
||||
|
||||
Returns an array of matching paths.
|
||||
|
||||
### globby.generateGlobTasks(patterns, [options])
|
||||
|
||||
Returns an array of objects in the format `{ pattern: string, opts: Object }`, which can be passed as arguments to [`node-glob`](https://github.com/isaacs/node-glob). This is useful for other globbing-related packages.
|
||||
|
||||
Note that you should avoid running the same tasks multiple times as they contain a file system cache. Instead, run this method each time to ensure file system changes are taken into consideration.
|
||||
|
||||
### globby.hasMagic(patterns, [options])
|
||||
|
||||
Returns a `boolean` of whether there are any special glob characters in the `patterns`.
|
||||
|
||||
Note that the options affect the results. If `noext: true` is set, then `+(a|b)` will not be considered a magic pattern. If the pattern has a brace expansion, like `a/{b/c,x/y}`, then that is considered magical, unless `nobrace: true` is set.
|
||||
|
||||
#### patterns
|
||||
|
||||
Type: `string` `Array`
|
||||
|
||||
See supported `minimatch` [patterns](https://github.com/isaacs/minimatch#usage).
|
||||
|
||||
#### options
|
||||
|
||||
Type: `Object`
|
||||
|
||||
See the `node-glob` [options](https://github.com/isaacs/node-glob#options).
|
||||
|
||||
|
||||
## Globbing patterns
|
||||
|
||||
Just a quick overview.
|
||||
|
||||
- `*` matches any number of characters, but not `/`
|
||||
- `?` matches a single character, but not `/`
|
||||
- `**` matches any number of characters, including `/`, as long as it's the only thing in a path part
|
||||
- `{}` allows for a comma-separated list of "or" expressions
|
||||
- `!` at the beginning of a pattern will negate the match
|
||||
|
||||
[Various patterns and expected matches.](https://github.com/sindresorhus/multimatch/blob/master/test.js)
|
||||
|
||||
|
||||
## Related
|
||||
|
||||
- [multimatch](https://github.com/sindresorhus/multimatch) - Match against a list instead of the filesystem
|
||||
- [glob-stream](https://github.com/wearefractal/glob-stream) - Streaming alternative
|
||||
- [matcher](https://github.com/sindresorhus/matcher) - Simple wildcard matching
|
||||
|
||||
|
||||
## License
|
||||
|
||||
MIT © [Sindre Sorhus](https://sindresorhus.com)
|
||||
68
node_modules/github-linguist/node_modules/pify/index.js
generated
vendored
Normal file
68
node_modules/github-linguist/node_modules/pify/index.js
generated
vendored
Normal file
|
|
@ -0,0 +1,68 @@
|
|||
'use strict';
|
||||
|
||||
var processFn = function (fn, P, opts) {
|
||||
return function () {
|
||||
var that = this;
|
||||
var args = new Array(arguments.length);
|
||||
|
||||
for (var i = 0; i < arguments.length; i++) {
|
||||
args[i] = arguments[i];
|
||||
}
|
||||
|
||||
return new P(function (resolve, reject) {
|
||||
args.push(function (err, result) {
|
||||
if (err) {
|
||||
reject(err);
|
||||
} else if (opts.multiArgs) {
|
||||
var results = new Array(arguments.length - 1);
|
||||
|
||||
for (var i = 1; i < arguments.length; i++) {
|
||||
results[i - 1] = arguments[i];
|
||||
}
|
||||
|
||||
resolve(results);
|
||||
} else {
|
||||
resolve(result);
|
||||
}
|
||||
});
|
||||
|
||||
fn.apply(that, args);
|
||||
});
|
||||
};
|
||||
};
|
||||
|
||||
var pify = module.exports = function (obj, P, opts) {
|
||||
if (typeof P !== 'function') {
|
||||
opts = P;
|
||||
P = Promise;
|
||||
}
|
||||
|
||||
opts = opts || {};
|
||||
opts.exclude = opts.exclude || [/.+Sync$/];
|
||||
|
||||
var filter = function (key) {
|
||||
var match = function (pattern) {
|
||||
return typeof pattern === 'string' ? key === pattern : pattern.test(key);
|
||||
};
|
||||
|
||||
return opts.include ? opts.include.some(match) : !opts.exclude.some(match);
|
||||
};
|
||||
|
||||
var ret = typeof obj === 'function' ? function () {
|
||||
if (opts.excludeMain) {
|
||||
return obj.apply(this, arguments);
|
||||
}
|
||||
|
||||
return processFn(obj, P, opts).apply(this, arguments);
|
||||
} : {};
|
||||
|
||||
return Object.keys(obj).reduce(function (ret, key) {
|
||||
var x = obj[key];
|
||||
|
||||
ret[key] = typeof x === 'function' && filter(key) ? processFn(x, P, opts) : x;
|
||||
|
||||
return ret;
|
||||
}, ret);
|
||||
};
|
||||
|
||||
pify.all = pify;
|
||||
21
node_modules/github-linguist/node_modules/pify/license
generated
vendored
Normal file
21
node_modules/github-linguist/node_modules/pify/license
generated
vendored
Normal file
|
|
@ -0,0 +1,21 @@
|
|||
The MIT License (MIT)
|
||||
|
||||
Copyright (c) Sindre Sorhus <sindresorhus@gmail.com> (sindresorhus.com)
|
||||
|
||||
Permission is hereby granted, free of charge, to any person obtaining a copy
|
||||
of this software and associated documentation files (the "Software"), to deal
|
||||
in the Software without restriction, including without limitation the rights
|
||||
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
||||
copies of the Software, and to permit persons to whom the Software is
|
||||
furnished to do so, subject to the following conditions:
|
||||
|
||||
The above copyright notice and this permission notice shall be included in
|
||||
all copies or substantial portions of the Software.
|
||||
|
||||
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
||||
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
||||
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
||||
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
||||
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
||||
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
|
||||
THE SOFTWARE.
|
||||
48
node_modules/github-linguist/node_modules/pify/package.json
generated
vendored
Normal file
48
node_modules/github-linguist/node_modules/pify/package.json
generated
vendored
Normal file
|
|
@ -0,0 +1,48 @@
|
|||
{
|
||||
"name": "pify",
|
||||
"version": "2.3.0",
|
||||
"description": "Promisify a callback-style function",
|
||||
"license": "MIT",
|
||||
"repository": "sindresorhus/pify",
|
||||
"author": {
|
||||
"name": "Sindre Sorhus",
|
||||
"email": "sindresorhus@gmail.com",
|
||||
"url": "sindresorhus.com"
|
||||
},
|
||||
"engines": {
|
||||
"node": ">=0.10.0"
|
||||
},
|
||||
"scripts": {
|
||||
"test": "xo && ava && npm run optimization-test",
|
||||
"optimization-test": "node --allow-natives-syntax optimization-test.js"
|
||||
},
|
||||
"files": [
|
||||
"index.js"
|
||||
],
|
||||
"keywords": [
|
||||
"promise",
|
||||
"promises",
|
||||
"promisify",
|
||||
"denodify",
|
||||
"denodeify",
|
||||
"callback",
|
||||
"cb",
|
||||
"node",
|
||||
"then",
|
||||
"thenify",
|
||||
"convert",
|
||||
"transform",
|
||||
"wrap",
|
||||
"wrapper",
|
||||
"bind",
|
||||
"to",
|
||||
"async",
|
||||
"es2015"
|
||||
],
|
||||
"devDependencies": {
|
||||
"ava": "*",
|
||||
"pinkie-promise": "^1.0.0",
|
||||
"v8-natives": "0.0.2",
|
||||
"xo": "*"
|
||||
}
|
||||
}
|
||||
119
node_modules/github-linguist/node_modules/pify/readme.md
generated
vendored
Normal file
119
node_modules/github-linguist/node_modules/pify/readme.md
generated
vendored
Normal file
|
|
@ -0,0 +1,119 @@
|
|||
# pify [](https://travis-ci.org/sindresorhus/pify)
|
||||
|
||||
> Promisify a callback-style function
|
||||
|
||||
|
||||
## Install
|
||||
|
||||
```
|
||||
$ npm install --save pify
|
||||
```
|
||||
|
||||
|
||||
## Usage
|
||||
|
||||
```js
|
||||
const fs = require('fs');
|
||||
const pify = require('pify');
|
||||
|
||||
// promisify a single function
|
||||
|
||||
pify(fs.readFile)('package.json', 'utf8').then(data => {
|
||||
console.log(JSON.parse(data).name);
|
||||
//=> 'pify'
|
||||
});
|
||||
|
||||
// or promisify all methods in a module
|
||||
|
||||
pify(fs).readFile('package.json', 'utf8').then(data => {
|
||||
console.log(JSON.parse(data).name);
|
||||
//=> 'pify'
|
||||
});
|
||||
```
|
||||
|
||||
|
||||
## API
|
||||
|
||||
### pify(input, [promiseModule], [options])
|
||||
|
||||
Returns a promise wrapped version of the supplied function or module.
|
||||
|
||||
#### input
|
||||
|
||||
Type: `function`, `object`
|
||||
|
||||
Callback-style function or module whose methods you want to promisify.
|
||||
|
||||
#### promiseModule
|
||||
|
||||
Type: `function`
|
||||
|
||||
Custom promise module to use instead of the native one.
|
||||
|
||||
Check out [`pinkie-promise`](https://github.com/floatdrop/pinkie-promise) if you need a tiny promise polyfill.
|
||||
|
||||
#### options
|
||||
|
||||
##### multiArgs
|
||||
|
||||
Type: `boolean`
|
||||
Default: `false`
|
||||
|
||||
By default, the promisified function will only return the second argument from the callback, which works fine for most APIs. This option can be useful for modules like `request` that return multiple arguments. Turning this on will make it return an array of all arguments from the callback, excluding the error argument, instead of just the second argument.
|
||||
|
||||
```js
|
||||
const request = require('request');
|
||||
const pify = require('pify');
|
||||
|
||||
pify(request, {multiArgs: true})('https://sindresorhus.com').then(result => {
|
||||
const [httpResponse, body] = result;
|
||||
});
|
||||
```
|
||||
|
||||
##### include
|
||||
|
||||
Type: `array` of (`string`|`regex`)
|
||||
|
||||
Methods in a module to promisify. Remaining methods will be left untouched.
|
||||
|
||||
##### exclude
|
||||
|
||||
Type: `array` of (`string`|`regex`)
|
||||
Default: `[/.+Sync$/]`
|
||||
|
||||
Methods in a module **not** to promisify. Methods with names ending with `'Sync'` are excluded by default.
|
||||
|
||||
##### excludeMain
|
||||
|
||||
Type: `boolean`
|
||||
Default: `false`
|
||||
|
||||
By default, if given module is a function itself, this function will be promisified. Turn this option on if you want to promisify only methods of the module.
|
||||
|
||||
```js
|
||||
const pify = require('pify');
|
||||
|
||||
function fn() {
|
||||
return true;
|
||||
}
|
||||
|
||||
fn.method = (data, callback) => {
|
||||
setImmediate(() => {
|
||||
callback(data, null);
|
||||
});
|
||||
};
|
||||
|
||||
// promisify methods but not fn()
|
||||
const promiseFn = pify(fn, {excludeMain: true});
|
||||
|
||||
if (promiseFn()) {
|
||||
promiseFn.method('hi').then(data => {
|
||||
console.log(data);
|
||||
});
|
||||
}
|
||||
```
|
||||
|
||||
|
||||
## License
|
||||
|
||||
MIT © [Sindre Sorhus](http://sindresorhus.com)
|
||||
66
node_modules/github-linguist/package.json
generated
vendored
Normal file
66
node_modules/github-linguist/package.json
generated
vendored
Normal file
|
|
@ -0,0 +1,66 @@
|
|||
{
|
||||
"name": "github-linguist",
|
||||
"version": "2.3.0",
|
||||
"description": "A tool to count lines of code in a repository powered by github-linguist langauge mappings.",
|
||||
"keywords": [
|
||||
"loc",
|
||||
"cloc",
|
||||
"linguist",
|
||||
"umijs",
|
||||
"lines of code"
|
||||
],
|
||||
"homepage": "https://github.com/aeisenberg/linguist#readme",
|
||||
"bugs": {
|
||||
"url": "https://github.com/aeisenberg/linguist/issues"
|
||||
},
|
||||
"bin": {
|
||||
"loc": "dist/cli.js"
|
||||
},
|
||||
"repository": {
|
||||
"type": "git",
|
||||
"url": "git+https://github.com/aeisenberg/linguist.git"
|
||||
},
|
||||
"license": "MIT",
|
||||
"authors": [
|
||||
"ephoton <i@ephoton.me> (https://github.com/ephoton)",
|
||||
"chenshuai2144 <qixian.cs@outlook.com> (https://github.com/chenshuai2144)",
|
||||
"Andrew Eisenberg <aeisenberg@github.com> (https://github.com/aeisenberg)"
|
||||
],
|
||||
"main": "dist/index.js",
|
||||
"typings": "dist/index.d.ts",
|
||||
"directories": {
|
||||
"test": "test"
|
||||
},
|
||||
"scripts": {
|
||||
"build": "tsc -d",
|
||||
"lint": "eslint --cache --ext .js,.jsx,.ts,.tsx --format=pretty ./src",
|
||||
"prettier": "prettier -c --write \"**/*\"",
|
||||
"prepublishOnly": "npm run build",
|
||||
"test": "umi-test"
|
||||
},
|
||||
"dependencies": {
|
||||
"chalk": "^2.2.0",
|
||||
"commander": "^2.11.0",
|
||||
"fs-extra": "^4.0.3",
|
||||
"globby": "^6.1.0",
|
||||
"language-map": "^1.3.0",
|
||||
"slash2": "^2.0.0"
|
||||
},
|
||||
"devDependencies": {
|
||||
"@types/chai": "^4.0.4",
|
||||
"@types/chalk": "^0.4.31",
|
||||
"@types/commander": "^2.11.0",
|
||||
"@types/fs-extra": "^4.0.2",
|
||||
"@types/globby": "^6.1.0",
|
||||
"@types/jest": "^25.1.5",
|
||||
"@types/mocha": "^2.2.43",
|
||||
"@types/node": "^8.0.45",
|
||||
"@umijs/fabric": "^2.0.7",
|
||||
"chai": "^4.1.2",
|
||||
"coveralls": "^3.0.0",
|
||||
"eslint": "^6.8.0",
|
||||
"prettier": "^2.0.2",
|
||||
"typescript": "^3.8.3",
|
||||
"umi-test": "^1.9.6"
|
||||
}
|
||||
}
|
||||
69
node_modules/github-linguist/src/cli.ts
generated
vendored
Normal file
69
node_modules/github-linguist/src/cli.ts
generated
vendored
Normal file
|
|
@ -0,0 +1,69 @@
|
|||
#!/usr/bin/env node
|
||||
|
||||
import chalk from 'chalk';
|
||||
import program from 'commander';
|
||||
// @ts-ignore
|
||||
import slash from 'slash2';
|
||||
import path from 'path';
|
||||
|
||||
import { LocDir } from './directory';
|
||||
import { LocFile, LineInfo } from './file';
|
||||
import { getVersion } from './utils';
|
||||
|
||||
program
|
||||
.version(getVersion(), '-v')
|
||||
.command('file <path>')
|
||||
.description('count lines of code in a file')
|
||||
.action(async (pathPattern) => {
|
||||
try {
|
||||
const info = await (new LocFile(pathPattern).getFileInfo());
|
||||
// eslint-disable-next-line no-console
|
||||
console.log(
|
||||
chalk.cyan(`
|
||||
path: \t\t${pathPattern}
|
||||
language: \t${info.languages}
|
||||
total lines: \t${String(info.lines.total)}
|
||||
code lines: \t${String(info.lines.code)}
|
||||
comment lines: \t${String(info.lines.comment)}
|
||||
`),
|
||||
);
|
||||
} catch (e) {
|
||||
console.error(e);
|
||||
console.error(e.stacl);
|
||||
}
|
||||
});
|
||||
|
||||
const formatInfo = (
|
||||
info: LineInfo,
|
||||
languages: {
|
||||
[key: string]: LineInfo & {
|
||||
sum: number;
|
||||
};
|
||||
},
|
||||
) => `
|
||||
\ttotal lines: \t${String(info.total)}
|
||||
\tcode lines: \t${String(info.code)}
|
||||
\tcomment lines: \t${String(info.comment)}
|
||||
\t--------------------${Object.keys(languages)
|
||||
.map((key) => {
|
||||
const languageInfo = languages[key];
|
||||
return `\n\t${key.padEnd(10)} \t file count:${String(languageInfo.sum)} \ttotal:${String(
|
||||
languageInfo.total,
|
||||
)} \tcomment:${String(languageInfo.comment)} \tcode:${String(languageInfo.code)}`;
|
||||
})
|
||||
.join('')}`;
|
||||
|
||||
program.arguments('<cmd> [env]').action(async (cmd) => {
|
||||
try {
|
||||
const { info, languages } = await (new LocDir({
|
||||
include: cmd
|
||||
}).loadInfo());
|
||||
// eslint-disable-next-line no-console
|
||||
console.log(chalk.cyan(formatInfo(info, languages)));
|
||||
} catch (e) {
|
||||
console.error(e);
|
||||
console.error(e.stacl);
|
||||
}
|
||||
});
|
||||
|
||||
program.parse(process.argv);
|
||||
127
node_modules/github-linguist/src/directory.ts
generated
vendored
Normal file
127
node_modules/github-linguist/src/directory.ts
generated
vendored
Normal file
|
|
@ -0,0 +1,127 @@
|
|||
import globby from 'globby';
|
||||
import fs from 'fs-extra';
|
||||
import path from 'path';
|
||||
// @ts-ignore
|
||||
import slash from 'slash2';
|
||||
|
||||
import { LineInfo, LocFile } from './file';
|
||||
|
||||
const defaultInfo: LineInfo = {
|
||||
total: 0,
|
||||
code: 0,
|
||||
comment: 0,
|
||||
};
|
||||
|
||||
export interface LocDirOptions {
|
||||
cwd?: string;
|
||||
include?: string[] | string;
|
||||
exclude?: string[] | string;
|
||||
}
|
||||
|
||||
export interface LocResult {
|
||||
files: string[];
|
||||
info: LineInfo;
|
||||
languages: {
|
||||
[key: string]: LineInfo & {
|
||||
sum: number;
|
||||
};
|
||||
};
|
||||
}
|
||||
|
||||
const defaultExclude = [
|
||||
// javascript
|
||||
'**/*.map',
|
||||
'**/yarn**',
|
||||
'**/.github',
|
||||
'**/node_modules/**',
|
||||
'**/dist/**',
|
||||
'**/*.snap',
|
||||
|
||||
// java
|
||||
'**/target'
|
||||
];
|
||||
|
||||
/**
|
||||
* Collect the info of a directory.
|
||||
*/
|
||||
export class LocDir {
|
||||
private cwd: string;
|
||||
private include: string[];
|
||||
private exclude: string[];
|
||||
|
||||
constructor(options: LocDirOptions) {
|
||||
|
||||
// ensure all excludes are globstar. Note that '**/*.ts/**' matches files
|
||||
// that end in .ts because the globstar indicates 0 or more directory paths.
|
||||
this.exclude = ensureArray(options.exclude)
|
||||
.concat(defaultExclude)
|
||||
.map(item => item.endsWith('**') ? item : `${item}/**`);
|
||||
|
||||
// remove all leading './' since this messes up globstar matches in the
|
||||
// excludes.
|
||||
this.include = ensureArray(options.include, '**')
|
||||
.map(item => item.startsWith('./') ? item.substring(2) : item)
|
||||
.map(item => item.endsWith('**') ? item : `${item}/**`);
|
||||
this.cwd = options.cwd || process.cwd();
|
||||
}
|
||||
|
||||
/**
|
||||
* Calculate directory info.
|
||||
*/
|
||||
async loadInfo(): Promise<LocResult> {
|
||||
const paths = await globby(this.include, {
|
||||
cwd: this.cwd,
|
||||
ignore: this.exclude,
|
||||
nodir: true
|
||||
});
|
||||
const files: string[] = [];
|
||||
const info: LineInfo = { ...defaultInfo };
|
||||
let languages: {
|
||||
[key: string]: LineInfo & {
|
||||
sum: number;
|
||||
};
|
||||
} = {};
|
||||
|
||||
await Promise.all(paths.map(async (pathItem) => {
|
||||
const fullPath = slash(path.join(this.cwd, pathItem));
|
||||
if (
|
||||
!pathItem ||
|
||||
!(await fs.pathExists(fullPath)) ||
|
||||
(await fs.stat(fullPath)).isDirectory()
|
||||
) {
|
||||
return;
|
||||
}
|
||||
const file = new LocFile(fullPath);
|
||||
const fileLineInfo = await file.getFileInfo();
|
||||
const { lines } = fileLineInfo;
|
||||
info.total += lines.total;
|
||||
info.code += lines.code;
|
||||
info.comment += lines.comment;
|
||||
const language = { ...languages[fileLineInfo.languages] };
|
||||
language.code = lines.code + (language.code || 0);
|
||||
language.sum = (language.sum || 0) + 1;
|
||||
language.comment = lines.comment + (language.comment || 0);
|
||||
language.total = lines.total + (language.total || 0);
|
||||
languages = {
|
||||
...languages,
|
||||
[fileLineInfo.languages]: language,
|
||||
};
|
||||
files.push(fullPath);
|
||||
}));
|
||||
|
||||
return {
|
||||
files,
|
||||
info,
|
||||
languages,
|
||||
};
|
||||
}
|
||||
}
|
||||
|
||||
function ensureArray(arr?: string[] | string, dfault?: string) {
|
||||
if (!arr) {
|
||||
return dfault ? [dfault] : [];
|
||||
}
|
||||
return Array.isArray(arr)
|
||||
? arr
|
||||
: [arr];
|
||||
}
|
||||
179
node_modules/github-linguist/src/file.ts
generated
vendored
Normal file
179
node_modules/github-linguist/src/file.ts
generated
vendored
Normal file
|
|
@ -0,0 +1,179 @@
|
|||
/**
|
||||
* detect file info
|
||||
*/
|
||||
|
||||
import * as fs from 'fs-extra';
|
||||
import * as Path from 'path';
|
||||
// @ts-ignore
|
||||
import slash from 'slash2';
|
||||
|
||||
import { Languages, Regexes } from './languages';
|
||||
|
||||
export interface LineInfo {
|
||||
total: number;
|
||||
code: number;
|
||||
comment: number;
|
||||
}
|
||||
|
||||
export interface FileInfo {
|
||||
name: string;
|
||||
languages: string;
|
||||
size: number;
|
||||
lines: LineInfo;
|
||||
}
|
||||
|
||||
const DefaultLine: LineInfo = {
|
||||
total: 0,
|
||||
code: 0,
|
||||
comment: 0,
|
||||
};
|
||||
|
||||
const DefaultFileInfo: FileInfo = {
|
||||
name: '',
|
||||
languages: '',
|
||||
size: 0,
|
||||
lines: DefaultLine,
|
||||
};
|
||||
|
||||
/**
|
||||
* Collect language info for a single file
|
||||
*/
|
||||
export class LocFile {
|
||||
public path: string;
|
||||
private rawPath: string;
|
||||
|
||||
private language = new Languages();
|
||||
|
||||
/**
|
||||
* Creates an instance of LocFile.
|
||||
*/
|
||||
constructor(rawPath: string, private debug = false) {
|
||||
this.path = slash(rawPath);
|
||||
this.rawPath = rawPath;
|
||||
}
|
||||
|
||||
/**
|
||||
* get file type through a path
|
||||
*/
|
||||
private getType(path: string): string {
|
||||
const fileExtension = `.${path.split('.').pop()}`;
|
||||
return this.language.extensionMap[fileExtension] || '';
|
||||
}
|
||||
|
||||
private filterData = (data: string, regexes: Regexes): LineInfo => {
|
||||
const lines = data.split(/\n/);
|
||||
let commentLength = 0;
|
||||
let codeLength = lines.length;
|
||||
const total = codeLength;
|
||||
|
||||
let inMultiLineComment = false;
|
||||
lines.forEach((line) => {
|
||||
|
||||
let lineType = 'code';
|
||||
line = line.trim();
|
||||
|
||||
if (inMultiLineComment) {
|
||||
|
||||
let noCode = true;
|
||||
if (regexes.multiLineCommentClose.test(line)) {
|
||||
// line contains the end of a multi-line comment
|
||||
inMultiLineComment = false;
|
||||
if (!regexes.multiLineCommentCloseEnd.test(line)) {
|
||||
// the multiline comment does not end this line.
|
||||
// there is real code on it.
|
||||
noCode = false;
|
||||
}
|
||||
}
|
||||
|
||||
if (noCode) {
|
||||
lineType = 'comm';
|
||||
commentLength += 1;
|
||||
codeLength -= 1;
|
||||
}
|
||||
|
||||
} else if (line) {
|
||||
|
||||
// non-empty line
|
||||
if (regexes.multiLineCommentOpen.test(line)) {
|
||||
// line contains the start of a multi-line comment
|
||||
// might contain some real code, but we'll let that slide
|
||||
|
||||
if (!regexes.multiLineCommentOpenAndClose.test(line)) {
|
||||
// comment is not also closed on this line
|
||||
inMultiLineComment = true;
|
||||
}
|
||||
|
||||
if (regexes.multiLineCommentOpenStart.test(line)) {
|
||||
// The comment starts the line. There is no other code on this line
|
||||
commentLength += 1;
|
||||
codeLength -= 1;
|
||||
lineType = 'comm';
|
||||
}
|
||||
|
||||
} else if (regexes.singleLineComment.test(line)) {
|
||||
// line contains only a single line comment
|
||||
commentLength += 1;
|
||||
codeLength -= 1;
|
||||
lineType = 'comm';
|
||||
}
|
||||
|
||||
} else {
|
||||
// empty line
|
||||
codeLength -= 1;
|
||||
lineType = 'empt';
|
||||
}
|
||||
|
||||
if (this.debug) {
|
||||
console.log(lineType, line)
|
||||
}
|
||||
});
|
||||
|
||||
return {
|
||||
...DefaultLine,
|
||||
total,
|
||||
code: codeLength,
|
||||
comment: commentLength,
|
||||
};
|
||||
};
|
||||
|
||||
/**
|
||||
* Get file info when LocFile init
|
||||
*/
|
||||
public async getFileInfo(data?: string): Promise<FileInfo> {
|
||||
if (!(await fs.pathExists(this.rawPath))) {
|
||||
throw new Error(`Error: file ${this.rawPath} does not exist.`);
|
||||
}
|
||||
|
||||
let newData = data;
|
||||
const info: FileInfo = Object.assign({}, DefaultFileInfo);
|
||||
const name = this.path.split(Path.sep).pop() || '';
|
||||
try {
|
||||
const stat = await fs.stat(this.path);
|
||||
if (!stat.isFile()) {
|
||||
return info;
|
||||
}
|
||||
newData = data || await fs.readFile(this.path, 'utf-8');
|
||||
info.name = name;
|
||||
info.size = (stat && stat.size) || 0;
|
||||
info.languages = this.getType(this.path);
|
||||
if (!info.languages) {
|
||||
return info;
|
||||
}
|
||||
if (newData) {
|
||||
const regexes = this.language.getRegexes(info.languages);
|
||||
info.lines = this.filterData(newData, regexes);
|
||||
}
|
||||
} catch (err) {
|
||||
throw new Error('read file failed.');
|
||||
}
|
||||
return info;
|
||||
}
|
||||
|
||||
public getFileInfoByContent(name: string, data: string): FileInfo {
|
||||
const info: FileInfo = Object.assign({}, DefaultFileInfo);
|
||||
info.name = name;
|
||||
info.languages = this.getType(name);
|
||||
info.lines = this.filterData(data, this.language.getRegexes(info.languages));
|
||||
return info;
|
||||
}
|
||||
}
|
||||
29
node_modules/github-linguist/src/index.ts
generated
vendored
Normal file
29
node_modules/github-linguist/src/index.ts
generated
vendored
Normal file
|
|
@ -0,0 +1,29 @@
|
|||
// @ts-ignore
|
||||
import slash from 'slash2';
|
||||
import fs from 'fs-extra';
|
||||
|
||||
import { LocDir, LocResult } from './directory';
|
||||
import { LocFile } from './file';
|
||||
|
||||
export { LocDir, LocDirOptions } from './directory';
|
||||
export { LocFile, LineInfo } from './file';
|
||||
|
||||
const loc = async (
|
||||
fileOrDir: string,
|
||||
): Promise<LocResult> => {
|
||||
const stat = await fs.stat(slash(fileOrDir));
|
||||
if (stat.isFile()) {
|
||||
const locFile = new LocFile(slash(fileOrDir));
|
||||
const info = await locFile.getFileInfo();
|
||||
const filePath = locFile.path;
|
||||
return {
|
||||
info: info.lines,
|
||||
files: [filePath],
|
||||
languages: { [info.languages]: { ...info.lines, sum: 1 } },
|
||||
};
|
||||
}
|
||||
const locDir = new LocDir({ cwd: slash(fileOrDir) });
|
||||
return locDir.loadInfo();
|
||||
};
|
||||
|
||||
export default loc;
|
||||
4
node_modules/github-linguist/src/justify.json
generated
vendored
Normal file
4
node_modules/github-linguist/src/justify.json
generated
vendored
Normal file
|
|
@ -0,0 +1,4 @@
|
|||
{
|
||||
".ts": "typescript",
|
||||
".tsx": "tsx"
|
||||
}
|
||||
176
node_modules/github-linguist/src/languages.ts
generated
vendored
Normal file
176
node_modules/github-linguist/src/languages.ts
generated
vendored
Normal file
|
|
@ -0,0 +1,176 @@
|
|||
import { ExtensionJustify } from './utils';
|
||||
|
||||
// tslint:disable-next-line
|
||||
const languageMap = require('language-map');
|
||||
// tslint:disable-next-line
|
||||
// const lang = require('language-classifier');
|
||||
|
||||
interface ExtensionsTypes {
|
||||
[key: string]: string;
|
||||
}
|
||||
|
||||
export interface DetectorOptions {}
|
||||
|
||||
/**
|
||||
* detecte program language through file extension
|
||||
*
|
||||
* @export
|
||||
* @class LanguageDetector
|
||||
*/
|
||||
export class Languages {
|
||||
extensionMap: {
|
||||
[key: string]: string;
|
||||
} = {};
|
||||
|
||||
/**
|
||||
* Creates an instance of Detector.
|
||||
*/
|
||||
constructor() {
|
||||
this.extensionMap = this.loadExtensionMap();
|
||||
}
|
||||
|
||||
/**
|
||||
* load language before detecting
|
||||
*/
|
||||
private loadExtensionMap = () => {
|
||||
const extensions: ExtensionsTypes = {};
|
||||
|
||||
Object.keys(languageMap).forEach((language) => {
|
||||
const languageMode = languageMap[language];
|
||||
const languageExtensions = (languageMode && languageMode.extensions) || [];
|
||||
languageExtensions.forEach((extension: string) => {
|
||||
extensions[extension.toLowerCase()] = language.toLowerCase();
|
||||
});
|
||||
});
|
||||
|
||||
return Object.assign({}, extensions, ExtensionJustify);
|
||||
}
|
||||
|
||||
/**
|
||||
* Retrieve the regular expressions for a given language.
|
||||
* This is incomplete, but covers most of the languages we
|
||||
* see in the wild.
|
||||
*
|
||||
* @param language the language to retrieve regexes for
|
||||
*/
|
||||
public getRegexes(language: string): Regexes {
|
||||
switch(language) {
|
||||
case 'html':
|
||||
case 'xml':
|
||||
return ALL_REGEXES.html;
|
||||
|
||||
case 'ruby':
|
||||
return ALL_REGEXES.ruby;
|
||||
|
||||
case 'python':
|
||||
return ALL_REGEXES.python;
|
||||
|
||||
default:
|
||||
// not exact, but likely the best guess for any other unspecified language.
|
||||
return ALL_REGEXES.c;
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* return extension map
|
||||
*/
|
||||
public getExtensionMap() {
|
||||
return this.extensionMap;
|
||||
}
|
||||
}
|
||||
|
||||
export interface Regexes {
|
||||
singleLineComment: RegExp;
|
||||
multiLineCommentOpen: RegExp;
|
||||
multiLineCommentOpenStart: RegExp;
|
||||
multiLineCommentClose: RegExp;
|
||||
multiLineCommentCloseEnd: RegExp;
|
||||
multiLineCommentOpenAndClose: RegExp;
|
||||
}
|
||||
|
||||
const ALL_REGEXES: Record<string, Regexes> = {
|
||||
c: {
|
||||
// matches when // are the first two characters of a line
|
||||
singleLineComment: /^\/\//,
|
||||
|
||||
// matches when /* exists in a line
|
||||
multiLineCommentOpen: /\/\*/,
|
||||
|
||||
// matches when /* starts a line
|
||||
multiLineCommentOpenStart: /^\/\*/,
|
||||
|
||||
// matches when */ exists a line
|
||||
multiLineCommentClose: /\*\//,
|
||||
|
||||
// matches when */ ends a line
|
||||
multiLineCommentCloseEnd: /\*\/$/,
|
||||
|
||||
// matches /* ... */
|
||||
multiLineCommentOpenAndClose: /\/\*.*\*\//
|
||||
},
|
||||
|
||||
python: {
|
||||
// matches when # the first character of a line
|
||||
singleLineComment: /^#/,
|
||||
|
||||
// matches when """ starts a line. This is not right, since
|
||||
// a multiline string is not always a comment, but for the
|
||||
// sake of simplicity, we will do that here.
|
||||
multiLineCommentOpen: /"""/,
|
||||
|
||||
// matches when """ starts a line
|
||||
multiLineCommentOpenStart: /^"""/,
|
||||
|
||||
// matches when """ exists in a line
|
||||
multiLineCommentClose: /"""/,
|
||||
|
||||
// matches when """ ends a line
|
||||
multiLineCommentCloseEnd: /"""$/,
|
||||
|
||||
// matches """ ... """
|
||||
multiLineCommentOpenAndClose: /""".*"""/
|
||||
},
|
||||
|
||||
ruby: {
|
||||
// matches when # the first character of a line
|
||||
singleLineComment: /^#/,
|
||||
|
||||
// For ruby multiline comments, =begin and =end must be
|
||||
// on their own lines
|
||||
|
||||
// matches when =begin starts a line
|
||||
multiLineCommentOpen: /^=begin/,
|
||||
|
||||
// matches when "begin starts a line
|
||||
multiLineCommentOpenStart: /^=begin/,
|
||||
|
||||
// matches when "end ends a line
|
||||
multiLineCommentClose: /^=end/,
|
||||
|
||||
// matches when "end ends a line
|
||||
multiLineCommentCloseEnd: /^=end$/,
|
||||
|
||||
// not possible in ruby
|
||||
multiLineCommentOpenAndClose: /^\0$/
|
||||
},
|
||||
|
||||
html: {
|
||||
// There is no single line comment
|
||||
singleLineComment: /^\0$/,
|
||||
|
||||
// matches when =begin starts a line
|
||||
multiLineCommentOpen: /<!--/,
|
||||
|
||||
// matches when "begin starts a line
|
||||
multiLineCommentOpenStart: /^<!--/,
|
||||
|
||||
// matches when "end ends a line
|
||||
multiLineCommentClose: /-->/,
|
||||
|
||||
// matches when "end ends a line
|
||||
multiLineCommentCloseEnd: /-->$/,
|
||||
|
||||
// matches <!-- ... -->
|
||||
multiLineCommentOpenAndClose: /<!--.*-->/
|
||||
}
|
||||
};
|
||||
25
node_modules/github-linguist/src/utils.ts
generated
vendored
Normal file
25
node_modules/github-linguist/src/utils.ts
generated
vendored
Normal file
|
|
@ -0,0 +1,25 @@
|
|||
import fs from 'fs';
|
||||
import path from 'path';
|
||||
// @ts-ignore
|
||||
import slash from 'slash2';
|
||||
|
||||
const packagePath = slash(path.join(__dirname, '../', 'package.json'));
|
||||
|
||||
/**
|
||||
* Get package version.
|
||||
*
|
||||
* @export getVersion
|
||||
* @returns {string}
|
||||
*/
|
||||
export function getVersion(): string {
|
||||
const packageInfo = JSON.parse(fs.readFileSync(packagePath, 'utf8'));
|
||||
|
||||
return (packageInfo && packageInfo.version) || 'invalid version!';
|
||||
}
|
||||
|
||||
export const ExtensionJustify = {
|
||||
'.ts': 'typescript',
|
||||
'.jsx': 'javascript',
|
||||
'.js': 'javascript',
|
||||
'.tsx': 'typescript',
|
||||
};
|
||||
19
node_modules/github-linguist/tsconfig.json
generated
vendored
Normal file
19
node_modules/github-linguist/tsconfig.json
generated
vendored
Normal file
|
|
@ -0,0 +1,19 @@
|
|||
{
|
||||
"compilerOptions": {
|
||||
"module": "commonjs",
|
||||
"esModuleInterop": true,
|
||||
"allowSyntheticDefaultImports": true,
|
||||
"target": "es2018",
|
||||
"noImplicitAny": true,
|
||||
"moduleResolution": "node",
|
||||
"outDir": "dist",
|
||||
"baseUrl": ".",
|
||||
"useDefineForClassFields": true,
|
||||
"skipLibCheck": true,
|
||||
"sourceMap": true,
|
||||
"paths": {
|
||||
"*": ["node_modules/*", "src/types/*"]
|
||||
}
|
||||
},
|
||||
"include": ["src/**/*"]
|
||||
}
|
||||
Loading…
Add table
Add a link
Reference in a new issue