Browse Source

初始化提交

master
1549469775 3 years ago
commit
bdaac9d33f
  1. 14
      .editorconfig
  2. 3
      .gitignore
  3. 1
      README.MD
  4. 1
      asda/dev
  5. 1
      asda/fuck
  6. 1
      asda/master
  7. 196
      dist/pp.cjs.js
  8. 1
      dist/pp.cjs.js.map
  9. 14
      example/index.html
  10. 920
      package-lock.json
  11. 55
      package.json
  12. 1749
      pnpm-lock.yaml
  13. 113
      rollup.config.js
  14. 24
      scripts/build.js
  15. 7
      scripts/dev.js
  16. 8
      src/config.ts
  17. 102
      src/func.ts
  18. 31
      src/index.ts
  19. 13
      src/util.ts
  20. 57
      src/writefile.ts
  21. 1
      templates/a.txt
  22. 1
      templates/啊倒萨/aaa.d
  23. 35
      tsconfig.json
  24. 21
      types/global.d.ts

14
.editorconfig

@ -0,0 +1,14 @@
# http://editorconfig.org
root = true # 应在文件顶部指定的特殊属性,true表示停止搜索当前文件
[*]
charset = utf-8 # 统一字符格式
indent_style = space # 缩进方式为空格
indent_size = 2 # 缩进为两个空格
end_of_line = lf # 换行符统一用lf
insert_final_newline = true # 保证文件结尾留一个空行
trim_trailing_whitespace = true # 移除新一行前的空白字符
[*.md]
insert_final_newline = false
trim_trailing_whitespace = false

3
.gitignore

@ -0,0 +1,3 @@
node_modules
.idea
.vscode

1
README.MD

@ -0,0 +1 @@
# @noderun/pp

1
asda/dev

@ -0,0 +1 @@
dev

1
asda/fuck

@ -0,0 +1 @@
fuck

1
asda/master

@ -0,0 +1 @@
master

196
dist/pp.cjs.js

@ -0,0 +1,196 @@
#!/usr/bin/env node
'use strict';
var commander = require('commander');
var tslib = require('tslib');
var fs = require('fs-extra');
var chalk = require('chalk');
var uuid = require('uuid');
var path = require('path');
var os = require('os');
var download = require('download-git-repo');
var ejs = require('ejs');
var ini = require('ini');
function _interopDefaultLegacy (e) { return e && typeof e === 'object' && 'default' in e ? e : { 'default': e }; }
var fs__default = /*#__PURE__*/_interopDefaultLegacy(fs);
var chalk__default = /*#__PURE__*/_interopDefaultLegacy(chalk);
var uuid__default = /*#__PURE__*/_interopDefaultLegacy(uuid);
var path__default = /*#__PURE__*/_interopDefaultLegacy(path);
var os__default = /*#__PURE__*/_interopDefaultLegacy(os);
var download__default = /*#__PURE__*/_interopDefaultLegacy(download);
var ejs__default = /*#__PURE__*/_interopDefaultLegacy(ejs);
var ini__default = /*#__PURE__*/_interopDefaultLegacy(ini);
var config = {
dir: path__default["default"].join(os__default["default"].homedir(), '.pp'),
configPath: path__default["default"].join(os__default["default"].homedir(), '.pp', '.pprc')
};
function walkDir(dir, cb) {
function _walk(_dir) {
if (_dir === void 0) { _dir = '.'; }
var statInfo = fs__default["default"].statSync(dir + path__default["default"].sep + _dir);
if (statInfo.isDirectory()) {
var paths = fs__default["default"].readdirSync(path__default["default"].resolve(dir + path__default["default"].sep + _dir));
for (var i = 0; i < paths.length; i++) {
_walk(_dir + path__default["default"].sep + paths[i]);
}
}
else if (statInfo.isFile()) {
cb && cb(_dir);
}
return true;
}
return _walk();
}
function isExist(file) {
var result = false;
try {
fs__default["default"].accessSync(file, fs__default["default"].constants.F_OK | fs__default["default"].constants.R_OK | fs__default["default"].constants.W_OK);
result = true;
}
catch (err) {
result = false;
}
return result;
}
function writefile(fromDir, toDir, opts, force) {
if (opts === void 0) { opts = {}; }
if (force === void 0) { force = false; }
if (!fromDir) {
console.log(chalk__default["default"].red("缺少模板目录"));
return;
}
if (!toDir) {
console.log(chalk__default["default"].red("缺少目标目录"));
return;
}
if (isExist(toDir) && !force) {
console.log(chalk__default["default"].red("安全起见,不覆写已存在的目录"));
return;
}
walkDir(fromDir, function (file) {
var fromRes = path__default["default"].resolve(fromDir, file);
var toRes = path__default["default"].resolve(toDir, file);
fs__default["default"].ensureFileSync(toRes);
var originRoot = fs__default["default"].readFileSync(fromRes, {
encoding: "utf8",
});
var html = ejs__default["default"].render(originRoot, opts);
fs__default["default"].writeFileSync(toRes, html);
});
}
function readFile(path, encoding) {
if (encoding === void 0) { encoding = "utf-8"; }
return fs__default["default"].readFileSync(path, encoding);
}
function readIniFile(path, encoding) {
if (encoding === void 0) { encoding = "utf-8"; }
return ini__default["default"].parse(fs__default["default"].readFileSync(path, encoding));
}
function writeIniFile(path, data) {
fs__default["default"].writeFileSync(path, ini__default["default"].stringify(data));
}
try {
fs__default["default"].ensureDirSync(config.dir);
fs__default["default"].ensureFileSync(config.configPath);
}
catch (e) {
throw e;
}
var Opts = readIniFile(config.configPath);
function onList(opt) {
if (!Opts.list || !Object.keys(Opts.list).length) {
console.log("暂无模板列表,请自行体添加");
return;
}
Object.keys(Opts.list).forEach(function (key) {
var value = Opts.list[key];
if (opt === null || opt === void 0 ? void 0 : opt.all) {
console.log(value.name + (value.desc ? "(" + value.desc + ")" : "") + (": " + value.url));
}
else {
console.log(value.name + (value.desc ? "(" + value.desc + ")" : ""));
}
});
}
function onClone(name, opts) {
if (!Opts.list || !Opts.list[name]) {
console.log("请先添加项目");
return;
}
var data = Opts.list[name];
var tempPath = path__default["default"].join(os__default["default"].tmpdir(), "pp-" + uuid__default["default"].v4());
var to = opts.dir;
var git_url = "direct:" + data.url;
if (isExist(to)) {
console.log(chalk__default["default"].red("安全起见,不覆写已存在的目录,请先删除相同目录文件夹"));
return;
}
download__default["default"](git_url, tempPath, { clone: true }, function (err) {
if (err)
throw err;
writefile(tempPath, to, { name: "哈哈" });
fs__default["default"].removeSync(tempPath);
console.log(chalk__default["default"].green("克隆成功"));
console.log("\ncd " + to + "\n");
});
}
function onRemove(name) {
var result = Object.assign({}, Opts);
if (result.list && result.list[name]) {
delete result.list[name];
writeIniFile(config.configPath, result);
console.log(chalk__default["default"].green("删除成功"));
}
else {
console.error(chalk__default["default"].red("不存在该模板"));
}
}
function onAdd(url, opt) {
var result = Object.assign({}, Opts);
var http = /^(http|https)\:\/\//g;
var git = /(git|root)\@/g;
if (!git.test(url) && !http.test(url)) {
console.error(chalk__default["default"].red("请添加正确的Git仓库地址"));
return;
}
if (!result.list)
result.list = {};
if (result.list[opt.name]) {
console.error(chalk__default["default"].red("名字重复,当前存在:"));
onList();
return;
}
result.list[opt.name] = tslib.__assign(tslib.__assign({}, opt), { url: url });
writeIniFile(config.configPath, result);
console.log(chalk__default["default"].green("添加成功"));
}
function onCheck() {
console.log(readFile(config.configPath));
}
var program = new commander.Command();
program.version("0.0.1", "-v, --version").description("查看当前版本号");
program.helpOption("-h --help", "显示帮助信息");
program.showHelpAfterError("( pp -h 查看帮助信息)");
program.command("list").option('-a --all').description("查看所有模板列表").action(onList);
program.command("check").description("查看配置文件").action(onCheck);
program
.command("add <url>")
.requiredOption("-n --name <name>", "模板名字")
.option("-d --desc <desc>", "模板具体描述")
.option("-t --tag <tag>", "模板标签")
.description("添加一个模板仓库")
.action(onAdd);
program
.command("rm <name>")
.description("删除一个模板仓库")
.action(onRemove);
program.command("clone <name>").requiredOption("-d --dir <dir>", "目标路径").description("克隆模板仓库").action(onClone);
program.parse(process.argv);
//# sourceMappingURL=pp.cjs.js.map

1
dist/pp.cjs.js.map

@ -0,0 +1 @@
{"version":3,"file":"pp.cjs.js","sources":[],"sourcesContent":[],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;"}

14
example/index.html

@ -0,0 +1,14 @@
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8" />
<meta name="viewport" content="width=device-width, initial-scale=1.0" />
<title>pp</title>
</head>
<body>
<script src="../dist/pp.umd.js"></script>
<script>
new pp()
</script>
</body>
</html>

920
package-lock.json

@ -0,0 +1,920 @@
{
"name": "@noderun/pp",
"version": "0.0.1",
"lockfileVersion": 1,
"requires": true,
"dependencies": {
"@rollup/plugin-alias": {
"version": "3.1.1",
"resolved": "https://registry.npmjs.org/@rollup/plugin-alias/-/plugin-alias-3.1.1.tgz",
"integrity": "sha512-hNcQY4bpBUIvxekd26DBPgF7BT4mKVNDF5tBG4Zi+3IgwLxGYRY0itHs9D0oLVwXM5pvJDWJlBQro+au8WaUWw==",
"dev": true,
"requires": {
"slash": "^3.0.0"
}
},
"@rollup/plugin-commonjs": {
"version": "15.0.0",
"resolved": "https://registry.npmjs.org/@rollup/plugin-commonjs/-/plugin-commonjs-15.0.0.tgz",
"integrity": "sha512-8uAdikHqVyrT32w1zB9VhW6uGwGjhKgnDNP4pQJsjdnyF4FgCj6/bmv24c7v2CuKhq32CcyCwRzMPEElaKkn0w==",
"dev": true,
"requires": {
"@rollup/pluginutils": "^3.1.0",
"commondir": "^1.0.1",
"estree-walker": "^2.0.1",
"glob": "^7.1.6",
"is-reference": "^1.2.1",
"magic-string": "^0.25.7",
"resolve": "^1.17.0"
},
"dependencies": {
"estree-walker": {
"version": "2.0.1",
"resolved": "https://registry.npmjs.org/estree-walker/-/estree-walker-2.0.1.tgz",
"integrity": "sha512-tF0hv+Yi2Ot1cwj9eYHtxC0jB9bmjacjQs6ZBTj82H8JwUywFuc+7E83NWfNMwHXZc11mjfFcVXPe9gEP4B8dg==",
"dev": true
}
}
},
"@rollup/plugin-node-resolve": {
"version": "13.0.6",
"resolved": "https://registry.npmjs.org/@rollup/plugin-node-resolve/-/plugin-node-resolve-13.0.6.tgz",
"integrity": "sha512-sFsPDMPd4gMqnh2gS0uIxELnoRUp5kBl5knxD2EO0778G1oOJv4G1vyT2cpWz75OU2jDVcXhjVUuTAczGyFNKA==",
"dev": true,
"requires": {
"@rollup/pluginutils": "^3.1.0",
"@types/resolve": "1.17.1",
"builtin-modules": "^3.1.0",
"deepmerge": "^4.2.2",
"is-module": "^1.0.0",
"resolve": "^1.19.0"
},
"dependencies": {
"resolve": {
"version": "1.20.0",
"resolved": "https://registry.npmjs.org/resolve/-/resolve-1.20.0.tgz",
"integrity": "sha512-wENBPt4ySzg4ybFQW2TT1zMQucPK95HSh/nq2CFTZVOGut2+pQvSsgtda4d26YrYcr067wjbmzOG8byDPBX63A==",
"dev": true,
"requires": {
"is-core-module": "^2.2.0",
"path-parse": "^1.0.6"
}
}
}
},
"@rollup/plugin-replace": {
"version": "2.3.3",
"resolved": "https://registry.npmjs.org/@rollup/plugin-replace/-/plugin-replace-2.3.3.tgz",
"integrity": "sha512-XPmVXZ7IlaoWaJLkSCDaa0Y6uVo5XQYHhiMFzOd5qSv5rE+t/UJToPIOE56flKIxBFQI27ONsxb7dqHnwSsjKQ==",
"dev": true,
"requires": {
"@rollup/pluginutils": "^3.0.8",
"magic-string": "^0.25.5"
}
},
"@rollup/pluginutils": {
"version": "3.1.0",
"resolved": "https://registry.npmjs.org/@rollup/pluginutils/-/pluginutils-3.1.0.tgz",
"integrity": "sha512-GksZ6pr6TpIjHm8h9lSQ8pi8BE9VeubNT0OMJ3B5uZJ8pz73NPiqOtCog/x2/QzM1ENChPKxMDhiQuRHsqc+lg==",
"dev": true,
"requires": {
"@types/estree": "0.0.39",
"estree-walker": "^1.0.1",
"picomatch": "^2.2.2"
}
},
"@types/color-name": {
"version": "1.1.1",
"resolved": "https://registry.npmjs.org/@types/color-name/-/color-name-1.1.1.tgz",
"integrity": "sha512-rr+OQyAjxze7GgWrSaJwydHStIhHq2lvY3BOC2Mj7KnzI7XK0Uw1TOOdI9lDoajEbSWLiYgoo4f1R51erQfhPQ==",
"dev": true
},
"@types/detect-indent": {
"version": "0.1.30",
"resolved": "https://registry.npmjs.org/@types/detect-indent/-/detect-indent-0.1.30.tgz",
"integrity": "sha1-3GgrtBK05lugmOcO2tc7SDP7kQ0=",
"dev": true
},
"@types/estree": {
"version": "0.0.39",
"resolved": "https://registry.npmjs.org/@types/estree/-/estree-0.0.39.tgz",
"integrity": "sha512-EYNwp3bU+98cpU4lAWYYL7Zz+2gryWH1qbdDTidVd6hkiR6weksdbMadyXKXNPEkQFhXM+hVO9ZygomHXp+AIw==",
"dev": true
},
"@types/fs-extra": {
"version": "9.0.13",
"resolved": "https://registry.npmjs.org/@types/fs-extra/-/fs-extra-9.0.13.tgz",
"integrity": "sha512-nEnwB++1u5lVDM2UI4c1+5R+FYaKfaAzS4OococimjVm3nQw3TuzH5UNsocrcTBbhnerblyHj4A49qXbIiZdpA==",
"dev": true,
"requires": {
"@types/node": "*"
}
},
"@types/glob": {
"version": "5.0.30",
"resolved": "https://registry.npmjs.org/@types/glob/-/glob-5.0.30.tgz",
"integrity": "sha1-ECZAnFYlqGiQdGAoCNCCsoZ7ilE=",
"dev": true,
"requires": {
"@types/minimatch": "*",
"@types/node": "*"
}
},
"@types/ini": {
"version": "1.3.31",
"resolved": "https://registry.npmjs.org/@types/ini/-/ini-1.3.31.tgz",
"integrity": "sha512-8ecxxaG4AlVEM1k9+BsziMw8UsX0qy3jYI1ad/71RrDZ+rdL6aZB0wLfAuflQiDhkD5o4yJ0uPK3OSUic3fG0w=="
},
"@types/minimatch": {
"version": "3.0.3",
"resolved": "https://registry.npmjs.org/@types/minimatch/-/minimatch-3.0.3.tgz",
"integrity": "sha512-tHq6qdbT9U1IRSGf14CL0pUlULksvY9OZ+5eEgl1N7t+OA3tGvNpxJCzuKQlsNgCVwbAs670L1vcVQi8j9HjnA==",
"dev": true
},
"@types/mkdirp": {
"version": "0.3.29",
"resolved": "https://registry.npmjs.org/@types/mkdirp/-/mkdirp-0.3.29.tgz",
"integrity": "sha1-fyrX7FX5FEgvybHsS7GuYCjUYGY=",
"dev": true
},
"@types/node": {
"version": "15.14.9",
"resolved": "https://registry.npmmirror.com/@types/node/download/@types/node-15.14.9.tgz?cache=0&sync_timestamp=1636407492316&other_urls=https%3A%2F%2Fregistry.npmmirror.com%2F%40types%2Fnode%2Fdownload%2F%40types%2Fnode-15.14.9.tgz",
"integrity": "sha1-vEPJkMPJvnKBhou8e4/dbitXrfo=",
"dev": true
},
"@types/rc": {
"version": "1.2.0",
"resolved": "https://registry.npmjs.org/@types/rc/-/rc-1.2.0.tgz",
"integrity": "sha512-eEQ6Hq0K0VShe00iDzG1DKxA5liTsk7jgcR5eDZ5d5cnivLjPqqcDgqurS5NlQJNfgTNg51dp7zFGWHomr5NJQ==",
"dev": true
},
"@types/resolve": {
"version": "1.17.1",
"resolved": "https://registry.npmjs.org/@types/resolve/-/resolve-1.17.1.tgz",
"integrity": "sha512-yy7HuzQhj0dhGpD8RLXSZWEkLsV9ibvxvi6EiJ3bkqLAO1RGo0WbkWQiwpRlSFymTJRz0d3k5LM3kkx8ArDbLw==",
"dev": true,
"requires": {
"@types/node": "*"
}
},
"ansi-styles": {
"version": "4.2.1",
"resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.2.1.tgz",
"integrity": "sha512-9VGjrMsG1vePxcSweQsN20KY/c4zN0h9fLjqAbwbPfahM3t+NL+M9HC8xeXG2I8pX5NoamTGNuomEUFI7fcUjA==",
"dev": true,
"requires": {
"@types/color-name": "^1.1.1",
"color-convert": "^2.0.1"
}
},
"at-least-node": {
"version": "1.0.0",
"resolved": "https://registry.npmjs.org/at-least-node/-/at-least-node-1.0.0.tgz",
"integrity": "sha512-+q/t7Ekv1EDY2l6Gda6LLiX14rU9TV20Wa3ofeQmwPFZbOMo9DXrLbOjFaaclkXKWidIaopwAObQDqwWtGUjqg==",
"dev": true
},
"atob": {
"version": "2.1.2",
"resolved": "https://registry.npmjs.org/atob/-/atob-2.1.2.tgz",
"integrity": "sha512-Wm6ukoaOGJi/73p/cl2GvLjTI5JM1k/O14isD73YML8StrH/7/lRFgmg8nICZgD3bZZvjwCGxtMOD3wWNAu8cg==",
"dev": true
},
"balanced-match": {
"version": "1.0.0",
"resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.0.tgz",
"integrity": "sha1-ibTRmasr7kneFk6gK4nORi1xt2c=",
"dev": true
},
"brace-expansion": {
"version": "1.1.11",
"resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz",
"integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==",
"dev": true,
"requires": {
"balanced-match": "^1.0.0",
"concat-map": "0.0.1"
}
},
"builtin-modules": {
"version": "3.2.0",
"resolved": "https://registry.npmjs.org/builtin-modules/-/builtin-modules-3.2.0.tgz",
"integrity": "sha512-lGzLKcioL90C7wMczpkY0n/oART3MbBa8R9OFGE1rJxoVI86u4WAGfEk8Wjv10eKSyTHVGkSo3bvBylCEtk7LA==",
"dev": true
},
"chalk": {
"version": "4.1.0",
"resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.0.tgz",
"integrity": "sha512-qwx12AxXe2Q5xQ43Ac//I6v5aXTipYrSESdOgzrN+9XjgEpyjpKuvSGaN4qE93f7TQTlerQQ8S+EQ0EyDoVL1A==",
"dev": true,
"requires": {
"ansi-styles": "^4.1.0",
"supports-color": "^7.1.0"
}
},
"color-convert": {
"version": "2.0.1",
"resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz",
"integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==",
"dev": true,
"requires": {
"color-name": "~1.1.4"
}
},
"color-name": {
"version": "1.1.4",
"resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz",
"integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==",
"dev": true
},
"commander": {
"version": "8.3.0",
"resolved": "https://registry.npmmirror.com/commander/download/commander-8.3.0.tgz?cache=0&sync_timestamp=1634886357672&other_urls=https%3A%2F%2Fregistry.npmmirror.com%2Fcommander%2Fdownload%2Fcommander-8.3.0.tgz",
"integrity": "sha1-SDfqGy2me5xhamevuw+v7lZ7ymY="
},
"commondir": {
"version": "1.0.1",
"resolved": "https://registry.npmjs.org/commondir/-/commondir-1.0.1.tgz",
"integrity": "sha1-3dgA2gxmEnOTzKWVDqloo6rxJTs=",
"dev": true
},
"concat-map": {
"version": "0.0.1",
"resolved": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz",
"integrity": "sha1-2Klr13/Wjfd5OnMDajug1UBdR3s=",
"dev": true
},
"cross-env": {
"version": "7.0.3",
"resolved": "https://registry.nlark.com/cross-env/download/cross-env-7.0.3.tgz?cache=0&other_urls=https%3A%2F%2Fregistry.nlark.com%2Fcross-env%2Fdownload%2Fcross-env-7.0.3.tgz",
"integrity": "sha1-hlJkspZ33AFbqEGJGJZd0jL8VM8=",
"dev": true,
"requires": {
"cross-spawn": "^7.0.1"
}
},
"cross-spawn": {
"version": "7.0.3",
"resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-7.0.3.tgz",
"integrity": "sha512-iRDPJKUPVEND7dHPO8rkbOnPpyDygcDFtWjpeWNCgy8WP2rXcxXL8TskReQl6OrB2G7+UJrags1q15Fudc7G6w==",
"dev": true,
"requires": {
"path-key": "^3.1.0",
"shebang-command": "^2.0.0",
"which": "^2.0.1"
}
},
"decode-uri-component": {
"version": "0.2.0",
"resolved": "https://registry.npmjs.org/decode-uri-component/-/decode-uri-component-0.2.0.tgz",
"integrity": "sha1-6zkTMzRYd1y4TNGh+uBiEGu4dUU=",
"dev": true
},
"deep-extend": {
"version": "0.6.0",
"resolved": "https://registry.npmjs.org/deep-extend/-/deep-extend-0.6.0.tgz",
"integrity": "sha512-LOHxIOaPYdHlJRtCQfDIVZtfw/ufM8+rVj649RIHzcm/vGwQRXFt6OPqIFWsm2XEMrNIEtWR64sY1LEKD2vAOA=="
},
"deepmerge": {
"version": "4.2.2",
"resolved": "https://registry.npmjs.org/deepmerge/-/deepmerge-4.2.2.tgz",
"integrity": "sha512-FJ3UgI4gIl+PHZm53knsuSFpE+nESMr7M4v9QcgB7S63Kj/6WqMiFQJpBBYz1Pt+66bZpP3Q7Lye0Oo9MPKEdg==",
"dev": true
},
"detect-indent": {
"version": "0.2.0",
"resolved": "https://registry.npmjs.org/detect-indent/-/detect-indent-0.2.0.tgz",
"integrity": "sha1-BCkUSYl5rC2fPHPk/z5od9O8krY=",
"dev": true,
"requires": {
"get-stdin": "^0.1.0",
"minimist": "^0.1.0"
}
},
"dts-bundle": {
"version": "0.7.3",
"resolved": "https://registry.npmjs.org/dts-bundle/-/dts-bundle-0.7.3.tgz",
"integrity": "sha1-Nyt7tpyCB4LmOC9ABzmmnc7T1Zo=",
"dev": true,
"requires": {
"@types/detect-indent": "0.1.30",
"@types/glob": "5.0.30",
"@types/mkdirp": "0.3.29",
"@types/node": "8.0.0",
"commander": "^2.9.0",
"detect-indent": "^0.2.0",
"glob": "^6.0.4",
"mkdirp": "^0.5.0"
},
"dependencies": {
"@types/node": {
"version": "8.0.0",
"resolved": "https://registry.npmmirror.com/@types/node/download/@types/node-8.0.0.tgz?cache=0&sync_timestamp=1636407492316&other_urls=https%3A%2F%2Fregistry.npmmirror.com%2F%40types%2Fnode%2Fdownload%2F%40types%2Fnode-8.0.0.tgz",
"integrity": "sha1-rKqJJHr93Hln6ZAv0Rdh2t6hpVU=",
"dev": true
},
"commander": {
"version": "2.20.3",
"resolved": "https://registry.npmmirror.com/commander/download/commander-2.20.3.tgz?cache=0&sync_timestamp=1634886357672&other_urls=https%3A%2F%2Fregistry.npmmirror.com%2Fcommander%2Fdownload%2Fcommander-2.20.3.tgz",
"integrity": "sha1-/UhehMA+tIgcIHIrpIA16FMa6zM=",
"dev": true
},
"glob": {
"version": "6.0.4",
"resolved": "https://registry.npmjs.org/glob/-/glob-6.0.4.tgz",
"integrity": "sha1-DwiGD2oVUSey+t1PnOJLGqtuTSI=",
"dev": true,
"requires": {
"inflight": "^1.0.4",
"inherits": "2",
"minimatch": "2 || 3",
"once": "^1.3.0",
"path-is-absolute": "^1.0.0"
}
}
}
},
"end-of-stream": {
"version": "1.4.4",
"resolved": "https://registry.npmjs.org/end-of-stream/-/end-of-stream-1.4.4.tgz",
"integrity": "sha512-+uw1inIHVPQoaVuHzRyXd21icM+cnt4CzD5rW+NC1wjOUSTOs+Te7FOv7AhN7vS9x/oIyhLP5PR1H+phQAHu5Q==",
"dev": true,
"requires": {
"once": "^1.4.0"
}
},
"estree-walker": {
"version": "1.0.1",
"resolved": "https://registry.npmjs.org/estree-walker/-/estree-walker-1.0.1.tgz",
"integrity": "sha512-1fMXF3YP4pZZVozF8j/ZLfvnR8NSIljt56UhbZ5PeeDmmGHpgpdwQt7ITlGvYaQukCvuBRMLEiKiYC+oeIg4cg==",
"dev": true
},
"execa": {
"version": "4.0.3",
"resolved": "https://registry.npmjs.org/execa/-/execa-4.0.3.tgz",
"integrity": "sha512-WFDXGHckXPWZX19t1kCsXzOpqX9LWYNqn4C+HqZlk/V0imTkzJZqf87ZBhvpHaftERYknpk0fjSylnXVlVgI0A==",
"dev": true,
"requires": {
"cross-spawn": "^7.0.0",
"get-stream": "^5.0.0",
"human-signals": "^1.1.1",
"is-stream": "^2.0.0",
"merge-stream": "^2.0.0",
"npm-run-path": "^4.0.0",
"onetime": "^5.1.0",
"signal-exit": "^3.0.2",
"strip-final-newline": "^2.0.0"
}
},
"find-cache-dir": {
"version": "3.3.1",
"resolved": "https://registry.npmjs.org/find-cache-dir/-/find-cache-dir-3.3.1.tgz",
"integrity": "sha512-t2GDMt3oGC/v+BMwzmllWDuJF/xcDtE5j/fCGbqDD7OLuJkj0cfh1YSA5VKPvwMeLFLNDBkwOKZ2X85jGLVftQ==",
"dev": true,
"requires": {
"commondir": "^1.0.1",
"make-dir": "^3.0.2",
"pkg-dir": "^4.1.0"
},
"dependencies": {
"make-dir": {
"version": "3.1.0",
"resolved": "https://registry.npmjs.org/make-dir/-/make-dir-3.1.0.tgz",
"integrity": "sha512-g3FeP20LNwhALb/6Cz6Dd4F2ngze0jz7tbzrD2wAV+o9FeNHe4rL+yK2md0J/fiSf1sa1ADhXqi5+oVwOM/eGw==",
"dev": true,
"requires": {
"semver": "^6.0.0"
}
},
"semver": {
"version": "6.3.0",
"resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz",
"integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==",
"dev": true
}
}
},
"find-up": {
"version": "4.1.0",
"resolved": "https://registry.npmjs.org/find-up/-/find-up-4.1.0.tgz",
"integrity": "sha512-PpOwAdQ/YlXQ2vj8a3h8IipDuYRi3wceVQQGYWxNINccq40Anw7BlsEXCMbt1Zt+OLA6Fq9suIpIWD0OsnISlw==",
"dev": true,
"requires": {
"locate-path": "^5.0.0",
"path-exists": "^4.0.0"
}
},
"fs-extra": {
"version": "9.0.1",
"resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-9.0.1.tgz",
"integrity": "sha512-h2iAoN838FqAFJY2/qVpzFXy+EBxfVE220PalAqQLDVsFOHLJrZvut5puAbCdNv6WJk+B8ihI+k0c7JK5erwqQ==",
"dev": true,
"requires": {
"at-least-node": "^1.0.0",
"graceful-fs": "^4.2.0",
"jsonfile": "^6.0.1",
"universalify": "^1.0.0"
}
},
"fs.realpath": {
"version": "1.0.0",
"resolved": "https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz",
"integrity": "sha1-FQStJSMVjKpA20onh8sBQRmU6k8=",
"dev": true
},
"function-bind": {
"version": "1.1.1",
"resolved": "https://registry.npmjs.org/function-bind/-/function-bind-1.1.1.tgz",
"integrity": "sha512-yIovAzMX49sF8Yl58fSCWJ5svSLuaibPxXQJFLmBObTuCr0Mf1KiPopGM9NiFjiYBCbfaa2Fh6breQ6ANVTI0A==",
"dev": true
},
"get-stdin": {
"version": "0.1.0",
"resolved": "https://registry.npmjs.org/get-stdin/-/get-stdin-0.1.0.tgz",
"integrity": "sha1-WZivJKr8gC0VyCxoVlfuuLENSpE=",
"dev": true
},
"get-stream": {
"version": "5.2.0",
"resolved": "https://registry.npmjs.org/get-stream/-/get-stream-5.2.0.tgz",
"integrity": "sha512-nBF+F1rAZVCu/p7rjzgA+Yb4lfYXrpl7a6VmJrU8wF9I1CKvP/QwPNZHnOlwbTkY6dvtFIzFMSyQXbLoTQPRpA==",
"dev": true,
"requires": {
"pump": "^3.0.0"
}
},
"glob": {
"version": "7.1.6",
"resolved": "https://registry.npmjs.org/glob/-/glob-7.1.6.tgz",
"integrity": "sha512-LwaxwyZ72Lk7vZINtNNrywX0ZuLyStrdDtabefZKAY5ZGJhVtgdznluResxNmPitE0SAO+O26sWTHeKSI2wMBA==",
"dev": true,
"requires": {
"fs.realpath": "^1.0.0",
"inflight": "^1.0.4",
"inherits": "2",
"minimatch": "^3.0.4",
"once": "^1.3.0",
"path-is-absolute": "^1.0.0"
}
},
"graceful-fs": {
"version": "4.2.4",
"resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.4.tgz",
"integrity": "sha512-WjKPNJF79dtJAVniUlGGWHYGz2jWxT6VhN/4m1NdkbZ2nOsEF+cI1Edgql5zCRhs/VsQYRvrXctxktVXZUkixw==",
"dev": true
},
"has": {
"version": "1.0.3",
"resolved": "https://registry.npmjs.org/has/-/has-1.0.3.tgz",
"integrity": "sha512-f2dvO0VU6Oej7RkWJGrehjbzMAjFp5/VKPp5tTpWIV4JHHZK1/BxbFRtf/siA2SWTe09caDmVtYYzWEIbBS4zw==",
"dev": true,
"requires": {
"function-bind": "^1.1.1"
}
},
"has-flag": {
"version": "4.0.0",
"resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz",
"integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==",
"dev": true
},
"human-signals": {
"version": "1.1.1",
"resolved": "https://registry.npmjs.org/human-signals/-/human-signals-1.1.1.tgz",
"integrity": "sha512-SEQu7vl8KjNL2eoGBLF3+wAjpsNfA9XMlXAYj/3EdaNfAlxKthD1xjEQfGOUhllCGGJVNY34bRr6lPINhNjyZw==",
"dev": true
},
"inflight": {
"version": "1.0.6",
"resolved": "https://registry.npmjs.org/inflight/-/inflight-1.0.6.tgz",
"integrity": "sha1-Sb1jMdfQLQwJvJEKEHW6gWW1bfk=",
"dev": true,
"requires": {
"once": "^1.3.0",
"wrappy": "1"
}
},
"inherits": {
"version": "2.0.4",
"resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.4.tgz",
"integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==",
"dev": true
},
"ini": {
"version": "2.0.0",
"resolved": "https://registry.npmjs.org/ini/-/ini-2.0.0.tgz",
"integrity": "sha512-7PnF4oN3CvZF23ADhA5wRaYEQpJ8qygSkbtTXWBeXWXmEVRXK+1ITciHWwHhsjv1TmW0MgacIv6hEi5pX5NQdA=="
},
"is-core-module": {
"version": "2.8.0",
"resolved": "https://registry.npmjs.org/is-core-module/-/is-core-module-2.8.0.tgz",
"integrity": "sha512-vd15qHsaqrRL7dtH6QNuy0ndJmRDrS9HAM1CAiSifNUFv4x1a0CCVsj18hJ1mShxIG6T2i1sO78MkP56r0nYRw==",
"dev": true,
"requires": {
"has": "^1.0.3"
}
},
"is-module": {
"version": "1.0.0",
"resolved": "https://registry.npmjs.org/is-module/-/is-module-1.0.0.tgz",
"integrity": "sha1-Mlj7afeMFNW4FdZkM2tM/7ZEFZE=",
"dev": true
},
"is-reference": {
"version": "1.2.1",
"resolved": "https://registry.npmjs.org/is-reference/-/is-reference-1.2.1.tgz",
"integrity": "sha512-U82MsXXiFIrjCK4otLT+o2NA2Cd2g5MLoOVXUZjIOhLurrRxpEXzI8O0KZHr3IjLvlAH1kTPYSuqer5T9ZVBKQ==",
"dev": true,
"requires": {
"@types/estree": "*"
}
},
"is-stream": {
"version": "2.0.0",
"resolved": "https://registry.npmjs.org/is-stream/-/is-stream-2.0.0.tgz",
"integrity": "sha512-XCoy+WlUr7d1+Z8GgSuXmpuUFC9fOhRXglJMx+dwLKTkL44Cjd4W1Z5P+BQZpr+cR93aGP4S/s7Ftw6Nd/kiEw==",
"dev": true
},
"isexe": {
"version": "2.0.0",
"resolved": "https://registry.npmjs.org/isexe/-/isexe-2.0.0.tgz",
"integrity": "sha1-6PvzdNxVb/iUehDcsFctYz8s+hA=",
"dev": true
},
"jsonfile": {
"version": "6.0.1",
"resolved": "https://registry.npmjs.org/jsonfile/-/jsonfile-6.0.1.tgz",
"integrity": "sha512-jR2b5v7d2vIOust+w3wtFKZIfpC2pnRmFAhAC/BuweZFQR8qZzxH1OyrQ10HmdVYiXWkYUqPVsz91cG7EL2FBg==",
"dev": true,
"requires": {
"graceful-fs": "^4.1.6",
"universalify": "^1.0.0"
}
},
"locate-path": {
"version": "5.0.0",
"resolved": "https://registry.npmjs.org/locate-path/-/locate-path-5.0.0.tgz",
"integrity": "sha512-t7hw9pI+WvuwNJXwk5zVHpyhIqzg2qTlklJOf0mVxGSbe3Fp2VieZcduNYjaLDoy6p9uGpQEGWG87WpMKlNq8g==",
"dev": true,
"requires": {
"p-locate": "^4.1.0"
}
},
"lodash": {
"version": "4.17.20",
"resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.20.tgz",
"integrity": "sha512-PlhdFcillOINfeV7Ni6oF1TAEayyZBoZ8bcshTHqOYJYlrqzRK5hagpagky5o4HfCzzd1TRkXPMFq6cKk9rGmA==",
"dev": true
},
"magic-string": {
"version": "0.25.7",
"resolved": "https://registry.npmjs.org/magic-string/-/magic-string-0.25.7.tgz",
"integrity": "sha512-4CrMT5DOHTDk4HYDlzmwu4FVCcIYI8gauveasrdCu2IKIFOJ3f0v/8MDGJCDL9oD2ppz/Av1b0Nj345H9M+XIA==",
"dev": true,
"requires": {
"sourcemap-codec": "^1.4.4"
}
},
"merge-stream": {
"version": "2.0.0",
"resolved": "https://registry.npmjs.org/merge-stream/-/merge-stream-2.0.0.tgz",
"integrity": "sha512-abv/qOcuPfk3URPfDzmZU1LKmuw8kT+0nIHvKrKgFrwifol/doWcdA4ZqsWQ8ENrFKkd67Mfpo/LovbIUsbt3w==",
"dev": true
},
"mimic-fn": {
"version": "2.1.0",
"resolved": "https://registry.npmjs.org/mimic-fn/-/mimic-fn-2.1.0.tgz",
"integrity": "sha512-OqbOk5oEQeAZ8WXWydlu9HJjz9WVdEIvamMCcXmuqUYjTknH/sqsWvhQ3vgwKFRR1HpjvNBKQ37nbJgYzGqGcg==",
"dev": true
},
"minimatch": {
"version": "3.0.4",
"resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.0.4.tgz",
"integrity": "sha512-yJHVQEhyqPLUTgt9B83PXu6W3rx4MvvHvSUvToogpwoGDOUQ+yDrR0HRot+yOCdCO7u4hX3pWft6kWBBcqh0UA==",
"dev": true,
"requires": {
"brace-expansion": "^1.1.7"
}
},
"minimist": {
"version": "0.1.0",
"resolved": "https://registry.npmjs.org/minimist/-/minimist-0.1.0.tgz",
"integrity": "sha1-md9lelJXTCHJBXSX33QnkLK0wN4=",
"dev": true
},
"mkdirp": {
"version": "0.5.5",
"resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-0.5.5.tgz",
"integrity": "sha512-NKmAlESf6jMGym1++R0Ra7wvhV+wFW63FaSOFPwRahvea0gMUcGUhVeAg/0BC0wiv9ih5NYPB1Wn1UEI1/L+xQ==",
"dev": true,
"requires": {
"minimist": "^1.2.5"
},
"dependencies": {
"minimist": {
"version": "1.2.5",
"resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.5.tgz",
"integrity": "sha512-FM9nNUYrRBAELZQT3xeZQ7fmMOBg6nWNmJKTcgsJeaLstP/UODVpGsr5OhXhhXg6f+qtJ8uiZ+PUxkDWcgIXLw==",
"dev": true
}
}
},
"npm-run-path": {
"version": "4.0.1",
"resolved": "https://registry.npmjs.org/npm-run-path/-/npm-run-path-4.0.1.tgz",
"integrity": "sha512-S48WzZW777zhNIrn7gxOlISNAqi9ZC/uQFnRdbeIHhZhCA6UqpkOT8T1G7BvfdgP4Er8gF4sUbaS0i7QvIfCWw==",
"dev": true,
"requires": {
"path-key": "^3.0.0"
}
},
"once": {
"version": "1.4.0",
"resolved": "https://registry.npmjs.org/once/-/once-1.4.0.tgz",
"integrity": "sha1-WDsap3WWHUsROsF9nFC6753Xa9E=",
"dev": true,
"requires": {
"wrappy": "1"
}
},
"onetime": {
"version": "5.1.2",
"resolved": "https://registry.npmjs.org/onetime/-/onetime-5.1.2.tgz",
"integrity": "sha512-kbpaSSGJTWdAY5KPVeMOKXSrPtr8C8C7wodJbcsd51jRnmD+GZu8Y0VoU6Dm5Z4vWr0Ig/1NKuWRKf7j5aaYSg==",
"dev": true,
"requires": {
"mimic-fn": "^2.1.0"
}
},
"p-limit": {
"version": "2.3.0",
"resolved": "https://registry.npmjs.org/p-limit/-/p-limit-2.3.0.tgz",
"integrity": "sha512-//88mFWSJx8lxCzwdAABTJL2MyWB12+eIY7MDL2SqLmAkeKU9qxRvWuSyTjm3FUmpBEMuFfckAIqEaVGUDxb6w==",
"dev": true,
"requires": {
"p-try": "^2.0.0"
}
},
"p-locate": {
"version": "4.1.0",
"resolved": "https://registry.npmjs.org/p-locate/-/p-locate-4.1.0.tgz",
"integrity": "sha512-R79ZZ/0wAxKGu3oYMlz8jy/kbhsNrS7SKZ7PxEHBgJ5+F2mtFW2fK2cOtBh1cHYkQsbzFV7I+EoRKe6Yt0oK7A==",
"dev": true,
"requires": {
"p-limit": "^2.2.0"
}
},
"p-try": {
"version": "2.2.0",
"resolved": "https://registry.npmjs.org/p-try/-/p-try-2.2.0.tgz",
"integrity": "sha512-R4nPAVTAU0B9D35/Gk3uJf/7XYbQcyohSKdvAxIRSNghFl4e71hVoGnBNQz9cWaXxO2I10KTC+3jMdvvoKw6dQ==",
"dev": true
},
"path-exists": {
"version": "4.0.0",
"resolved": "https://registry.npmjs.org/path-exists/-/path-exists-4.0.0.tgz",
"integrity": "sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w==",
"dev": true
},
"path-is-absolute": {
"version": "1.0.1",
"resolved": "https://registry.npmjs.org/path-is-absolute/-/path-is-absolute-1.0.1.tgz",
"integrity": "sha1-F0uSaHNVNP+8es5r9TpanhtcX18=",
"dev": true
},
"path-key": {
"version": "3.1.1",
"resolved": "https://registry.npmjs.org/path-key/-/path-key-3.1.1.tgz",
"integrity": "sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q==",
"dev": true
},
"path-parse": {
"version": "1.0.6",
"resolved": "https://registry.npmjs.org/path-parse/-/path-parse-1.0.6.tgz",
"integrity": "sha512-GSmOT2EbHrINBf9SR7CDELwlJ8AENk3Qn7OikK4nFYAu3Ote2+JYNVvkpAEQm3/TLNEJFD/xZJjzyxg3KBWOzw==",
"dev": true
},
"picomatch": {
"version": "2.2.2",
"resolved": "https://registry.npmjs.org/picomatch/-/picomatch-2.2.2.tgz",
"integrity": "sha512-q0M/9eZHzmr0AulXyPwNfZjtwZ/RBZlbN3K3CErVrk50T2ASYI7Bye0EvekFY3IP1Nt2DHu0re+V2ZHIpMkuWg==",
"dev": true
},
"pkg-dir": {
"version": "4.2.0",
"resolved": "https://registry.npmjs.org/pkg-dir/-/pkg-dir-4.2.0.tgz",
"integrity": "sha512-HRDzbaKjC+AOWVXxAU/x54COGeIv9eb+6CkDSQoNTt4XyWoIJvuPsXizxu/Fr23EiekbtZwmh1IcIG/l/a10GQ==",
"dev": true,
"requires": {
"find-up": "^4.0.0"
}
},
"pump": {
"version": "3.0.0",
"resolved": "https://registry.npmjs.org/pump/-/pump-3.0.0.tgz",
"integrity": "sha512-LwZy+p3SFs1Pytd/jYct4wpv49HiYCqd9Rlc5ZVdk0V+8Yzv6jR5Blk3TRmPL1ft69TxP0IMZGJ+WPFU2BFhww==",
"dev": true,
"requires": {
"end-of-stream": "^1.1.0",
"once": "^1.3.1"
}
},
"rc": {
"version": "1.2.8",
"resolved": "https://registry.npmjs.org/rc/-/rc-1.2.8.tgz",
"integrity": "sha512-y3bGgqKj3QBdxLbLkomlohkvsA8gdAiUQlSBJnBhfn+BPxg4bc62d8TcBW15wavDfgexCgccckhcZvywyQYPOw==",
"requires": {
"deep-extend": "^0.6.0",
"ini": "~1.3.0",
"minimist": "^1.2.0",
"strip-json-comments": "~2.0.1"
},
"dependencies": {
"ini": {
"version": "1.3.8",
"resolved": "https://registry.npmjs.org/ini/-/ini-1.3.8.tgz",
"integrity": "sha512-JV/yugV2uzW5iMRSiZAyDtQd+nxtUnjeLt0acNdw98kKLrvuRVyB80tsREOE7yvGVgalhZ6RNXCmEHkUKBKxew=="
},
"minimist": {
"version": "1.2.5",
"resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.5.tgz",
"integrity": "sha512-FM9nNUYrRBAELZQT3xeZQ7fmMOBg6nWNmJKTcgsJeaLstP/UODVpGsr5OhXhhXg6f+qtJ8uiZ+PUxkDWcgIXLw=="
}
}
},
"resolve": {
"version": "1.17.0",
"resolved": "https://registry.npmjs.org/resolve/-/resolve-1.17.0.tgz",
"integrity": "sha512-ic+7JYiV8Vi2yzQGFWOkiZD5Z9z7O2Zhm9XMaTxdJExKasieFCr+yXZ/WmXsckHiKl12ar0y6XiXDx3m4RHn1w==",
"dev": true,
"requires": {
"path-parse": "^1.0.6"
}
},
"rollup": {
"version": "2.26.3",
"resolved": "https://registry.npmjs.org/rollup/-/rollup-2.26.3.tgz",
"integrity": "sha512-Mlt39/kL2rA9egcbQbaZV1SNVplGqYYhDDMcGgHPPE0tvM3R4GrB+IEdYy2QtTrdzMQx57ZcqDFf/KWWm8F+uw==",
"dev": true,
"requires": {
"fsevents": "~2.1.2"
},
"dependencies": {
"fsevents": {
"version": "2.1.3",
"resolved": "https://registry.npmjs.org/fsevents/-/fsevents-2.1.3.tgz",
"integrity": "sha512-Auw9a4AxqWpa9GUfj370BMPzzyncfBABW8Mab7BGWBYDj4Isgq+cDKtx0i6u9jcX9pQDnswsaaOTgTmA5pEjuQ==",
"dev": true,
"optional": true
}
}
},
"rollup-plugin-sourcemaps": {
"version": "0.6.2",
"resolved": "https://registry.npmjs.org/rollup-plugin-sourcemaps/-/rollup-plugin-sourcemaps-0.6.2.tgz",
"integrity": "sha512-9AwTKg3yRykwzemfLt71ySe0LvrAci+bpsOL1LaTYFk5BX4HF6X7DQfpHa74ANfSja3hyjiQkXCR8goSOnW//Q==",
"dev": true,
"requires": {
"@rollup/pluginutils": "^3.0.9",
"source-map-resolve": "^0.6.0"
}
},
"rollup-plugin-typescript2": {
"version": "0.27.2",
"resolved": "https://registry.npmjs.org/rollup-plugin-typescript2/-/rollup-plugin-typescript2-0.27.2.tgz",
"integrity": "sha512-zarMH2F8oT/NO6p20gl/jkts+WxyzOlhOIUwUU/EDx5e6ewdDPS/flwLj5XFuijUCr64bZwqKuRVwCPdXXYefQ==",
"dev": true,
"requires": {
"@rollup/pluginutils": "^3.1.0",
"find-cache-dir": "^3.3.1",
"fs-extra": "8.1.0",
"resolve": "1.17.0",
"tslib": "2.0.1"
},
"dependencies": {
"fs-extra": {
"version": "8.1.0",
"resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-8.1.0.tgz",
"integrity": "sha512-yhlQgA6mnOJUKOsRUFsgJdQCvkKhcz8tlZG5HBQfReYZy46OwLcY+Zia0mtdHsOo9y/hP+CxMN0TU9QxoOtG4g==",
"dev": true,
"requires": {
"graceful-fs": "^4.2.0",
"jsonfile": "^4.0.0",
"universalify": "^0.1.0"
}
},
"jsonfile": {
"version": "4.0.0",
"resolved": "https://registry.npmjs.org/jsonfile/-/jsonfile-4.0.0.tgz",
"integrity": "sha1-h3Gq4HmbZAdrdmQPygWPnBDjPss=",
"dev": true,
"requires": {
"graceful-fs": "^4.1.6"
}
},
"universalify": {
"version": "0.1.2",
"resolved": "https://registry.npmjs.org/universalify/-/universalify-0.1.2.tgz",
"integrity": "sha512-rBJeI5CXAlmy1pV+617WB9J63U6XcazHHF2f2dbJix4XzpUF0RS3Zbj0FGIOCAva5P/d/GBOYaACQ1w+0azUkg==",
"dev": true
}
}
},
"shebang-command": {
"version": "2.0.0",
"resolved": "https://registry.npmjs.org/shebang-command/-/shebang-command-2.0.0.tgz",
"integrity": "sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA==",
"dev": true,
"requires": {
"shebang-regex": "^3.0.0"
}
},
"shebang-regex": {
"version": "3.0.0",
"resolved": "https://registry.npmjs.org/shebang-regex/-/shebang-regex-3.0.0.tgz",
"integrity": "sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A==",
"dev": true
},
"signal-exit": {
"version": "3.0.3",
"resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-3.0.3.tgz",
"integrity": "sha512-VUJ49FC8U1OxwZLxIbTTrDvLnf/6TDgxZcK8wxR8zs13xpx7xbG60ndBlhNrFi2EMuFRoeDoJO7wthSLq42EjA==",
"dev": true
},
"slash": {
"version": "3.0.0",
"resolved": "https://registry.npmjs.org/slash/-/slash-3.0.0.tgz",
"integrity": "sha512-g9Q1haeby36OSStwb4ntCGGGaKsaVSjQ68fBxoQcutl5fS1vuY18H3wSt3jFyFtrkx+Kz0V1G85A4MyAdDMi2Q==",
"dev": true
},
"source-map-resolve": {
"version": "0.6.0",
"resolved": "https://registry.npmjs.org/source-map-resolve/-/source-map-resolve-0.6.0.tgz",
"integrity": "sha512-KXBr9d/fO/bWo97NXsPIAW1bFSBOuCnjbNTBMO7N59hsv5i9yzRDfcYwwt0l04+VqnKC+EwzvJZIP/qkuMgR/w==",
"dev": true,
"requires": {
"atob": "^2.1.2",
"decode-uri-component": "^0.2.0"
}
},
"sourcemap-codec": {
"version": "1.4.8",
"resolved": "https://registry.npmjs.org/sourcemap-codec/-/sourcemap-codec-1.4.8.tgz",
"integrity": "sha512-9NykojV5Uih4lgo5So5dtw+f0JgJX30KCNI8gwhz2J9A15wD0Ml6tjHKwf6fTSa6fAdVBdZeNOs9eJ71qCk8vA==",
"dev": true
},
"strip-final-newline": {
"version": "2.0.0",
"resolved": "https://registry.npmjs.org/strip-final-newline/-/strip-final-newline-2.0.0.tgz",
"integrity": "sha512-BrpvfNAE3dcvq7ll3xVumzjKjZQ5tI1sEUIKr3Uoks0XUl45St3FlatVqef9prk4jRDzhW6WZg+3bk93y6pLjA==",
"dev": true
},
"strip-json-comments": {
"version": "2.0.1",
"resolved": "https://registry.npmjs.org/strip-json-comments/-/strip-json-comments-2.0.1.tgz",
"integrity": "sha1-PFMZQukIwml8DsNEhYwobHygpgo="
},
"supports-color": {
"version": "7.1.0",
"resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.1.0.tgz",
"integrity": "sha512-oRSIpR8pxT1Wr2FquTNnGet79b3BWljqOuoW/h4oBhxJ/HUbX5nX6JSruTkvXDCFMwDPvsaTTbvMLKZWSy0R5g==",
"dev": true,
"requires": {
"has-flag": "^4.0.0"
}
},
"tslib": {
"version": "2.0.1",
"resolved": "https://registry.npmjs.org/tslib/-/tslib-2.0.1.tgz",
"integrity": "sha512-SgIkNheinmEBgx1IUNirK0TUD4X9yjjBRTqqjggWCU3pUEqIk3/Uwl3yRixYKT6WjQuGiwDv4NomL3wqRCj+CQ==",
"dev": true
},
"typescript": {
"version": "4.4.4",
"resolved": "https://registry.npmjs.org/typescript/-/typescript-4.4.4.tgz",
"integrity": "sha512-DqGhF5IKoBl8WNf8C1gu8q0xZSInh9j1kJJMqT3a94w1JzVaBU4EXOSMrz9yDqMT0xt3selp83fuFMQ0uzv6qA==",
"dev": true
},
"universalify": {
"version": "1.0.0",
"resolved": "https://registry.npmjs.org/universalify/-/universalify-1.0.0.tgz",
"integrity": "sha512-rb6X1W158d7pRQBg5gkR8uPaSfiids68LTJQYOtEUhoJUWBdaQHsuT/EUduxXYxcrt4r5PJ4fuHW1MHT6p0qug==",
"dev": true
},
"which": {
"version": "2.0.2",
"resolved": "https://registry.npmjs.org/which/-/which-2.0.2.tgz",
"integrity": "sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==",
"dev": true,
"requires": {
"isexe": "^2.0.0"
}
},
"wrappy": {
"version": "1.0.2",
"resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz",
"integrity": "sha1-tSQ9jz7BqjXxNkYFvA0QNuMKtp8=",
"dev": true
}
}
}

55
package.json

@ -0,0 +1,55 @@
{
"name": "@noderun/pp",
"version": "0.0.1",
"description": "命令行管理模板项目",
"main": "dist/pp.umd.js",
"module": "dist/pp.esm.js",
"typings": "dist/index.d.ts",
"buildOptions": {
"filename": "pp",
"var": "pp",
"formats": [
"cjs"
]
},
"bin": {
"pp": "./dist/pp.cjs.js"
},
"scripts": {
"test": "node src/main.js",
"build": "cross-env NODE_ENV=production node scripts/build.js",
"dev": "cross-env NODE_ENV=development node scripts/dev.js"
},
"keywords": [],
"author": "",
"license": "ISC",
"devDependencies": {
"@rollup/plugin-alias": "^3.1.1",
"@rollup/plugin-commonjs": "^15.0.0",
"@rollup/plugin-node-resolve": "^13.0.6",
"@rollup/plugin-replace": "^2.3.3",
"@types/ejs": "^3.1.0",
"@types/fs-extra": "^9.0.13",
"@types/ini": "^1.3.31",
"@types/node": "^15.12.5",
"chalk": "^4.1.2",
"cross-env": "^7.0.3",
"dts-bundle": "^0.7.3",
"execa": "^4.0.3",
"fs-extra": "^9.0.1",
"lodash": "^4.17.20",
"rollup": "^2.26.3",
"rollup-plugin-sourcemaps": "^0.6.2",
"rollup-plugin-typescript2": "^0.27.2",
"tslib": "^2.0.1",
"typescript": "^4.4.4"
},
"dependencies": {
"@types/uuid": "^8.3.1",
"commander": "^8.3.0",
"download-git-repo": "^3.0.2",
"ejs": "^3.1.6",
"ini": "^2.0.0",
"uuid": "^8.3.2"
}
}

1749
pnpm-lock.yaml

File diff suppressed because it is too large

113
rollup.config.js

@ -0,0 +1,113 @@
import commonjs from "@rollup/plugin-commonjs";
import typescript from "rollup-plugin-typescript2";
import alias from "@rollup/plugin-alias";
import replace from "@rollup/plugin-replace";
import sourcemaps from "rollup-plugin-sourcemaps";
import { nodeResolve } from '@rollup/plugin-node-resolve';
const pkg = require("./package.json");
const path = require("path");
let isProd = process.env.NODE_ENV === "production";
const input = "src/index.ts";
const openSourceMap = true;
const buildOptions = pkg.buildOptions;
buildOptions.formats = process.env.TARGET
? [process.env.TARGET]
: buildOptions.formats;
export default createConfig();
function createConfig() {
return {
input,
external: [...Object.keys(pkg.dependencies), ...Object.keys(pkg.devDependencies)],
output: createOutput(buildOptions),
plugins: createPlugin(),
};
}
function createPlugin() {
let plugin = [];
const aliasPlugin = alias({
resolve: [".ts"],
"@": path.resolve(__dirname, "src"),
});
const tsPlugin = typescript({
check: isProd,
tsconfig: path.resolve(__dirname, "tsconfig.json"),
cacheRoot: path.resolve(__dirname, "node_modules/.rts2_cache"),
tsconfigOverride: {
compilerOptions: {
declaration: isProd,
},
},
});
const replacePlugin = replace({
preventAssignment: true,
__DEV__: !isProd,
});
plugin = [sourcemaps(),nodeResolve(), commonjs(), tsPlugin, aliasPlugin, replacePlugin];
return plugin;
}
function createOutput(options) {
const output = [];
const filterType = {
//可用script标签导入,会输出一个全局变量
iife: {
sourcemap: openSourceMap,
file: `dist/${options.filename}.iife.js`,
format: "iife",
name: options.var,
},
// amd规范,可用require.js加载
amd: {
sourcemap: openSourceMap,
file: `dist/${options.filename}.amd.js`,
format: "amd",
},
// 兼容 IIFE, AMD, CJS 三种模块规范
umd: {
sourcemap: openSourceMap,
file: `dist/${options.filename}.umd.js`,
format: "umd",
name: options.var,
},
// CommonJS规范
cjs: {
sourcemap: openSourceMap,
file: `dist/${options.filename}.cjs.js`,
format: "cjs",
exports: "auto",
banner: "#!/usr/bin/env node" // 提供命令行的可执行权限
},
// ES2015 Module 规范, 可用 `Webpack`, `Rollup` 加载
esm: {
sourcemap: openSourceMap,
file: `dist/${options.filename}.esm.js`,
format: "es",
},
"esm-browser": {
sourcemap: openSourceMap,
file: `dist/${options.filename}.esm-browser.js`,
format: "es",
},
};
if (options.formats) {
options.formats.forEach((format) => {
if (filterType[format]) {
output.push(filterType[format]);
} else {
console.error("无效类型:" + format);
}
});
} else {
for (const key in filterType) {
if (filterType.hasOwnProperty(key)) {
const element = filterType[key];
output.push(element);
}
}
}
return output;
}

24
scripts/build.js

@ -0,0 +1,24 @@
const execa = require("execa");
const fs = require("fs-extra");
const chalk = require('chalk');
const dts = require("dts-bundle");
const pkg = require("../package.json");
(async function () {
console.log(chalk.red("正在清理dist文件夹"));
await fs.remove(`dist`);
console.log(chalk.red("清理完成,开始构建"));
await execa("rollup", ["-c", "--environment", `NODE_ENV:production`], {
stdio: "inherit",
});
console.log(chalk.red("构建完成,开始生成d.ts"));
const dtsOptions = {
name: pkg.name,
main: `dist/src/index.d.ts`,
out: `../index.d.ts`,
};
dts.bundle(dtsOptions);
console.log(chalk.red("生成完毕,开始清理残余"));
await fs.remove(`dist/src`);
console.log('所有文件清理完成');
})();

7
scripts/dev.js

@ -0,0 +1,7 @@
const execa = require("execa");
const chalk = require('chalk');
console.log(chalk.red("开始监听,格式:umd"));
execa("rollup", ["-wc", "--environment", `NODE_ENV:development,TARGET:cjs`], {
stdio: "inherit",
});

8
src/config.ts

@ -0,0 +1,8 @@
import path from "path";
import os from "os";
export default {
//数据目录
dir: path.join(os.homedir(), '.pp'),
configPath: path.join(os.homedir(), '.pp','.pprc')
}

102
src/func.ts

@ -0,0 +1,102 @@
import fs from "fs-extra";
import chalk from "chalk";
import uuid from "uuid";
import path from "path";
import os from "os";
import config from "@/config";
import download from "download-git-repo";
import writefile, { isExist } from "./writefile";
import { readFile, readIniFile, writeIniFile } from "./util";
/**
*
*/
try {
fs.ensureDirSync(config.dir);
fs.ensureFileSync(config.configPath);
} catch (e) {
throw e;
}
/**
*
*/
const Opts = readIniFile(config.configPath);
/**
*
* @param opt 参数: all:Git地址
*/
export function onList(opt?: { all?: boolean }) {
if (!Opts.list || !Object.keys(Opts.list).length) {
console.log("暂无模板列表,请自行体添加");
return;
}
Object.keys(Opts.list).forEach((key) => {
let value = Opts.list[key];
if (opt?.all) {
console.log(
value.name + (value.desc ? `(${value.desc})` : "") + `: ${value.url}`
);
} else {
console.log(value.name + (value.desc ? `(${value.desc})` : ""));
}
});
}
export function onClone(name: string, opts: { dir: string }) {
if (!Opts.list || !Opts.list[name]) {
console.log("请先添加项目");
return;
}
let data = Opts.list[name];
let tempPath = path.join(os.tmpdir(), "pp-" + uuid.v4());
let to = opts.dir;
let git_url = "direct:" + data.url;
if (isExist(to)) {
console.log(
chalk.red("安全起见,不覆写已存在的目录,请先删除相同目录文件夹")
);
return;
}
download(git_url, tempPath, { clone: true }, function (err: Error) {
if (err) throw err;
writefile(tempPath, to, { name: "哈哈" });
fs.removeSync(tempPath);
console.log(chalk.green("克隆成功"));
console.log(`\ncd ${to}\n`);
});
}
export function onRemove(name: string) {
let result = Object.assign({}, Opts);
if (result.list && result.list[name]) {
delete result.list[name];
writeIniFile(config.configPath, result);
console.log(chalk.green("删除成功"));
} else {
console.error(chalk.red("不存在该模板"));
}
}
export function onAdd(url: string, opt: { name: string; desc?: string }) {
const result = Object.assign({}, Opts);
const http = /^(http|https)\:\/\//g;
const git = /(git|root)\@/g;
if (!git.test(url) && !http.test(url)) {
console.error(chalk.red("请添加正确的Git仓库地址"));
return;
}
if (!result.list) result.list = {};
if (result.list[opt.name]) {
console.error(chalk.red("名字重复,当前存在:"));
onList();
return;
}
result.list[opt.name] = { ...opt, url };
writeIniFile(config.configPath, result);
console.log(chalk.green("添加成功"));
}
export function onCheck() {
console.log(readFile(config.configPath));
}

31
src/index.ts

@ -0,0 +1,31 @@
import { Command } from "commander";
import * as func from "./func";
// import os from "os"
// console.log(os.tmpdir());
const program = new Command();
program.version("0.0.1", "-v, --version").description("查看当前版本号");
program.helpOption("-h --help", "显示帮助信息");
program.showHelpAfterError("( pp -h 查看帮助信息)");
program.command("list").option('-a --all').description("查看所有模板列表").action(func.onList);
program.command("check").description("查看配置文件").action(func.onCheck);
program
.command("add <url>")
.requiredOption("-n --name <name>", "模板名字")
.option("-d --desc <desc>", "模板具体描述")
.option("-t --tag <tag>", "模板标签")
.description("添加一个模板仓库")
.action(func.onAdd);
program
.command("rm <name>")
.description("删除一个模板仓库")
.action(func.onRemove);
program.command("clone <name>").requiredOption("-d --dir <dir>", "目标路径").description("克隆模板仓库").action(func.onClone);
program.parse(process.argv);

13
src/util.ts

@ -0,0 +1,13 @@
import ini, {EncodeOptions } from "ini"
import fs from "fs-extra"
export function readFile(path:string, encoding: BufferEncoding="utf-8") {
return fs.readFileSync(path, encoding)
}
export function readIniFile(path:string, encoding: BufferEncoding="utf-8") {
return ini.parse(fs.readFileSync(path, encoding))
}
export function writeIniFile(path:string, data: Object) {
fs.writeFileSync(path, ini.stringify(data))
}

57
src/writefile.ts

@ -0,0 +1,57 @@
import fs from "fs-extra";
import ejs from "ejs";
import chalk from "chalk";
import path from "path";
import execa from "execa";
function walkDir (dir: string, cb?: (file: string)=>void) {
function _walk (_dir = '.') {
const statInfo = fs.statSync(dir + path.sep + _dir)
if (statInfo.isDirectory()) {
const paths = fs.readdirSync(path.resolve(dir + path.sep + _dir))
for (let i = 0; i < paths.length; i++) {
_walk(_dir + path.sep + paths[i])
}
} else if (statInfo.isFile()) {
cb && cb(_dir)
}
return true
}
return _walk()
}
export function isExist (file: string) {
let result = false
try {
fs.accessSync(file, fs.constants.F_OK | fs.constants.R_OK | fs.constants.W_OK);
result = true // 文件可读写
} catch (err) {
result = false
}
return result
}
export default function writefile (fromDir: string, toDir: string, opts = {}, force = false) {
if (!fromDir) {
console.log(chalk.red("缺少模板目录"))
return
}
if (!toDir) {
console.log(chalk.red("缺少目标目录"))
return
}
if (isExist(toDir) && !force) {
console.log(chalk.red("安全起见,不覆写已存在的目录"))
return
}
walkDir(fromDir, function (file) {
let fromRes = path.resolve(fromDir, file)
let toRes = path.resolve(toDir, file)
fs.ensureFileSync(toRes)
const originRoot = fs.readFileSync(fromRes, {
encoding: "utf8",
});
const html = ejs.render(originRoot, opts);
fs.writeFileSync(toRes, html);
})
}

1
templates/a.txt

@ -0,0 +1 @@
asdad <%= name %>

1
templates/啊倒萨/aaa.d

@ -0,0 +1 @@
asdad <%= name %>

35
tsconfig.json

@ -0,0 +1,35 @@
{
"compilerOptions": {
"strict": true,
"target": "ES5",
"esModuleInterop": true, // 使es6
"module":"ESNext", // ,UMDrollup
"lib": [
"esnext"
],
"removeComments": true,
"noImplicitAny": true,
"strictNullChecks": true,
"strictFunctionTypes": true,
"strictBindCallApply": true,
"strictPropertyInitialization": true,
//
"allowUnreachableCode": true,
"noImplicitThis": true,
"alwaysStrict": true,
"noUnusedLocals": false, // 使
"noUnusedParameters": false, // 使
"noImplicitReturns": true, //
"allowSyntheticDefaultImports": true,
"resolveJsonModule": true,
"noFallthroughCasesInSwitch": true, // switchcase使breakswitch
"moduleResolution": "node",
"baseUrl": ".", //
"rootDir": ".", //
"paths": { // baseUrl
"@/*": ["src/*"]
}
},
"include": ["src/**.ts", "types/global.d.ts"],
"exclude": ["node_modules"]
}

21
types/global.d.ts

@ -0,0 +1,21 @@
// 全局替换
declare var __DEV__: boolean;
interface IItem{
name: string; // 模板名称
desc: string; // 具体干什么用的
url: string; //Git仓库地址
}
type IOpts = {
list?: [
IItem
]
}
declare module "download-git-repo"{
type download = (url: string, path: string, config: {clone: boolean}, cb: (err:Error)=>void)=>void
const func: download;
export default func;
}
Loading…
Cancel
Save