1.0.0
This commit is contained in:
commit
d3d1f3fd30
10
.gitignore
vendored
Normal file
10
.gitignore
vendored
Normal file
@ -0,0 +1,10 @@
|
|||||||
|
node_modules
|
||||||
|
*.js
|
||||||
|
|
||||||
|
.idea
|
||||||
|
.vscode
|
||||||
|
.atom
|
||||||
|
|
||||||
|
.DS_Store
|
||||||
|
*.ini
|
||||||
|
*.log
|
127
bin/index.ts
Normal file
127
bin/index.ts
Normal file
@ -0,0 +1,127 @@
|
|||||||
|
#! node
|
||||||
|
import program from "inquirer";
|
||||||
|
import { file as fs } from "../extend/file";
|
||||||
|
import * as os from "os";
|
||||||
|
import ejs from "ejs";
|
||||||
|
import chalk from "chalk";
|
||||||
|
import { exec } from "child_process";
|
||||||
|
|
||||||
|
// ------------------------------------------------
|
||||||
|
// cli结果:
|
||||||
|
let answers: { appName: string; pkgManager: number; author: string };
|
||||||
|
// 脚本运行目录
|
||||||
|
const path: string = process.cwd() + "/";
|
||||||
|
// 模版所在目录
|
||||||
|
const tpl: string = `${path}/template/`;
|
||||||
|
|
||||||
|
// ========================================================
|
||||||
|
// 1、CLI 交互
|
||||||
|
program
|
||||||
|
.prompt([
|
||||||
|
{
|
||||||
|
name: "appName",
|
||||||
|
message: chalk.cyan("🌈 App Name:"),
|
||||||
|
type: "input",
|
||||||
|
validate(input) {
|
||||||
|
if (input.trim().length <= 0 || !input) return chalk.red("‼️ 必填项");
|
||||||
|
else return true;
|
||||||
|
},
|
||||||
|
},
|
||||||
|
{
|
||||||
|
name: "pkgManager",
|
||||||
|
message: chalk.yellow("🥓 Package Manager:"),
|
||||||
|
type: "list",
|
||||||
|
choices: [
|
||||||
|
{ name: "Yarn", value: 0, checked: true },
|
||||||
|
{ name: "Npm", value: 1 },
|
||||||
|
],
|
||||||
|
},
|
||||||
|
{
|
||||||
|
name: "author",
|
||||||
|
message: chalk.green("🥤 Your Name:"),
|
||||||
|
type: "input",
|
||||||
|
default: os.userInfo().username,
|
||||||
|
},
|
||||||
|
])
|
||||||
|
.then(async answer => {
|
||||||
|
answers = answer;
|
||||||
|
|
||||||
|
// --------------------------------
|
||||||
|
// 调用2
|
||||||
|
await writing();
|
||||||
|
});
|
||||||
|
|
||||||
|
// ========================================================
|
||||||
|
// 2、读写操作
|
||||||
|
async function writing() {
|
||||||
|
console.log(chalk.blue("\r\n ---------------- WRITING... ----------------"));
|
||||||
|
|
||||||
|
// Static 文件
|
||||||
|
copyStatic([
|
||||||
|
[`controller/index.ts`, `controller/index.ts`],
|
||||||
|
[`extend/logger.ts`, `extend/logger.ts`],
|
||||||
|
[`extend/lucky.ts`, `extend/lucky.ts`],
|
||||||
|
[`route/route.ts`, `route/route.ts`],
|
||||||
|
[`view/index.njk`, `view/index.njk`],
|
||||||
|
[`tsconfig.json`, `tsconfig.json`],
|
||||||
|
[`Dockerfile`, `Dockerfile`],
|
||||||
|
[`yarn.lock`, `yarn.lock`],
|
||||||
|
[`app.ts`, `app.ts`],
|
||||||
|
]);
|
||||||
|
// template that uses the EJS engine
|
||||||
|
await copyTemplate([
|
||||||
|
[`docker-compose.yml`, `docker-compose.yml`],
|
||||||
|
[`package.json`, `package.json`],
|
||||||
|
[`LICENSE`, `LICENSE`],
|
||||||
|
]);
|
||||||
|
|
||||||
|
// --------------------------------
|
||||||
|
// 调用3
|
||||||
|
installed();
|
||||||
|
}
|
||||||
|
|
||||||
|
// ------------------------------------------------
|
||||||
|
// Copy Static 文件
|
||||||
|
function copyStatic(files: string[][]) {
|
||||||
|
files.forEach(file => {
|
||||||
|
fs.copy(`${tpl}${file[0]}`, `${path}${answers.appName}/${file[1]}`);
|
||||||
|
console.log(
|
||||||
|
chalk.green("+") +
|
||||||
|
` ${chalk.grey(answers.appName + "/" + file[1])} ${chalk.green(
|
||||||
|
"SUCCESS.👌"
|
||||||
|
)}`
|
||||||
|
);
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
|
// Copy template that uses the EJS engine
|
||||||
|
// 使用EJS,解析模版,并将解析后的内容存入新文件中
|
||||||
|
function copyTemplate(files: string[][]) {
|
||||||
|
files.forEach(async file => {
|
||||||
|
let compileContent = await ejs.renderFile(`${tpl}${file[0]}`, answers);
|
||||||
|
fs.write(`${path}${answers.appName}/${file[1]}`, compileContent);
|
||||||
|
console.log(
|
||||||
|
chalk.green("+") +
|
||||||
|
` ${chalk.grey(answers.appName + "/" + file[1])} ${chalk.green(
|
||||||
|
"SUCCESS.👌"
|
||||||
|
)}`
|
||||||
|
);
|
||||||
|
});
|
||||||
|
}
|
||||||
|
// ========================================================
|
||||||
|
// 3、依赖安装
|
||||||
|
function installed() {
|
||||||
|
console.log(
|
||||||
|
chalk.blue("\r\n ---------------- Installing... ----------------")
|
||||||
|
);
|
||||||
|
|
||||||
|
if (answers.pkgManager == 0) {
|
||||||
|
exec(`cd ${answers.appName} && yarn install`, err => {
|
||||||
|
console.log(chalk.green("SUCCESS.👌"));
|
||||||
|
});
|
||||||
|
} else {
|
||||||
|
exec(`cd ${answers.appName} && npm install`, err => {
|
||||||
|
console.log(chalk.green("SUCCESS.👌"));
|
||||||
|
});
|
||||||
|
}
|
||||||
|
}
|
23
extend/file.d.ts
vendored
Normal file
23
extend/file.d.ts
vendored
Normal file
@ -0,0 +1,23 @@
|
|||||||
|
/**
|
||||||
|
* 文件操作类
|
||||||
|
* @description 更加语义化的简便文件操作。
|
||||||
|
*/
|
||||||
|
declare class file {
|
||||||
|
/**
|
||||||
|
* 创建目录
|
||||||
|
* @description 如果目录不存在,则自动创建目录,并返回结果
|
||||||
|
* 如果目录存在,则返回 true
|
||||||
|
*
|
||||||
|
* @param {string} filePath 要操作(复制,剪切)的目录名(带文件名和后缀的完整目录)
|
||||||
|
* @return {boolean} 操作状态
|
||||||
|
*/
|
||||||
|
protected static createPath(filePath: string): boolean;
|
||||||
|
/**
|
||||||
|
* 复制文件
|
||||||
|
* @param {string} src 源文件地址
|
||||||
|
* @param {string} dest 文件去向地址
|
||||||
|
* @return {boolean} 操作状态
|
||||||
|
*/
|
||||||
|
static copy(src: string, dest: string): boolean;
|
||||||
|
}
|
||||||
|
export { file };
|
60
extend/file.ts
Normal file
60
extend/file.ts
Normal file
@ -0,0 +1,60 @@
|
|||||||
|
import { copyFileSync, existsSync, mkdirSync, writeFileSync } from "fs";
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 文件操作类
|
||||||
|
* @description 更加语义化的简便文件操作。
|
||||||
|
*/
|
||||||
|
class file {
|
||||||
|
/**
|
||||||
|
* 创建目录
|
||||||
|
* @description 如果目录不存在,则自动创建目录,并返回结果
|
||||||
|
* 如果目录存在,则返回 true
|
||||||
|
*
|
||||||
|
* @param {string} filePath 要操作(复制,剪切)的目录名(带文件名和后缀的完整目录)
|
||||||
|
* @return {boolean} 操作状态
|
||||||
|
*/
|
||||||
|
protected static createPath(filePath: string): boolean {
|
||||||
|
// 获取完整目录(去除最后一位的文件字段)
|
||||||
|
let dir = filePath.substring(0, filePath.lastIndexOf("/"));
|
||||||
|
if (dir == "" || dir == null) dir = "./"; // 不写目录名 => 根目录
|
||||||
|
|
||||||
|
// 文件夹不存在
|
||||||
|
if (!existsSync(dir)) {
|
||||||
|
let actionNotice = mkdirSync(dir, { recursive: true });
|
||||||
|
return !!actionNotice;
|
||||||
|
} else return true;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 复制文件
|
||||||
|
* @param {string} src 源文件地址
|
||||||
|
* @param {string} dest 文件去向地址
|
||||||
|
* @return {boolean} 操作状态
|
||||||
|
*/
|
||||||
|
static copy(src: string, dest: string): boolean {
|
||||||
|
if (!existsSync(src)) {
|
||||||
|
console.log("源文件不存在");
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
// 复制操作
|
||||||
|
if (file.createPath(dest)) {
|
||||||
|
copyFileSync(src, dest);
|
||||||
|
return existsSync(dest);
|
||||||
|
} else return false;
|
||||||
|
}
|
||||||
|
|
||||||
|
/***
|
||||||
|
* 文件写入(保存文件)
|
||||||
|
* @param {string} filePath 文件去向地址
|
||||||
|
* @param data 写入数据
|
||||||
|
* @return {boolean} 操作状态
|
||||||
|
*/
|
||||||
|
static write(filePath: string, data: any = "") {
|
||||||
|
if (file.createPath(filePath)) {
|
||||||
|
writeFileSync(filePath, data);
|
||||||
|
return existsSync(filePath);
|
||||||
|
} else return false;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
export { file };
|
46
package.json
Normal file
46
package.json
Normal file
@ -0,0 +1,46 @@
|
|||||||
|
{
|
||||||
|
"name": "@h2ostudio/koa-program",
|
||||||
|
"version": "1.0.0",
|
||||||
|
"bin": {
|
||||||
|
"koa": "bin/index.js"
|
||||||
|
},
|
||||||
|
"engines": {
|
||||||
|
"node": ">= 15"
|
||||||
|
},
|
||||||
|
"dependencies": {
|
||||||
|
"chalk": "^4.1.0",
|
||||||
|
"ejs": "^3.1.6",
|
||||||
|
"inquirer": "^7.3.3"
|
||||||
|
},
|
||||||
|
"prettier": {
|
||||||
|
"tabWidth": 2,
|
||||||
|
"printWidth": 80,
|
||||||
|
"semi": true,
|
||||||
|
"singleQuote": false,
|
||||||
|
"arrowParens": "avoid",
|
||||||
|
"bracketSpacing": true,
|
||||||
|
"trailingComma": "es5"
|
||||||
|
},
|
||||||
|
"devDependencies": {
|
||||||
|
"@types/ejs": "^3.0.5",
|
||||||
|
"@types/inquirer": "^7.3.1",
|
||||||
|
"prettier": "^2.2.1"
|
||||||
|
},
|
||||||
|
"description": "koa web 项目脚手架",
|
||||||
|
"keywords": [
|
||||||
|
"koa",
|
||||||
|
"koa2",
|
||||||
|
"koa-web",
|
||||||
|
"koa-app",
|
||||||
|
"cli"
|
||||||
|
],
|
||||||
|
"author": {
|
||||||
|
"name": "titor"
|
||||||
|
},
|
||||||
|
"publishConfig": {
|
||||||
|
"registry": "https://npm.pkg.github.com/h2ostudio"
|
||||||
|
},
|
||||||
|
"repository": {
|
||||||
|
"url": ""
|
||||||
|
}
|
||||||
|
}
|
20
template/Dockerfile
Normal file
20
template/Dockerfile
Normal file
@ -0,0 +1,20 @@
|
|||||||
|
FROM foolsecret/alpine
|
||||||
|
|
||||||
|
|
||||||
|
# 安装 NodeJS 和 Yarn
|
||||||
|
RUN apk update upgrade && \
|
||||||
|
apk add --no-cache nodejs-current yarn
|
||||||
|
|
||||||
|
|
||||||
|
# 安装依赖项
|
||||||
|
#WORKDIR /root/
|
||||||
|
#COPY . .
|
||||||
|
#RUN cd /root/ && yarn install && yarn tsc
|
||||||
|
|
||||||
|
|
||||||
|
# 默认目录 Root 用户目录
|
||||||
|
# 默认端口 4321
|
||||||
|
# 启动 开发模式
|
||||||
|
VOLUME /root/
|
||||||
|
EXPOSE 4321
|
||||||
|
ENTRYPOINT ["yarn", "docker"]
|
21
template/LICENSE
Normal file
21
template/LICENSE
Normal file
@ -0,0 +1,21 @@
|
|||||||
|
MIT License
|
||||||
|
|
||||||
|
Copyright (c) 2021 <%= author %>
|
||||||
|
|
||||||
|
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.
|
29
template/app.ts
Normal file
29
template/app.ts
Normal file
@ -0,0 +1,29 @@
|
|||||||
|
import Application from "koa";
|
||||||
|
import { router } from "./route/route";
|
||||||
|
// @ts-ignore
|
||||||
|
import view from "koa-nunjucks-2";
|
||||||
|
import { logger } from "./extend/logger";
|
||||||
|
|
||||||
|
const app: Application = new Application();
|
||||||
|
const port: Number = 4321;
|
||||||
|
|
||||||
|
// -------------------------------------------------- Use View
|
||||||
|
app.use(
|
||||||
|
view({
|
||||||
|
ext: "njk",
|
||||||
|
path: process.cwd() + "/view/",
|
||||||
|
})
|
||||||
|
);
|
||||||
|
|
||||||
|
// -------------------------------------------------- Use logger
|
||||||
|
app.use((ctx: Application.Context, next) => {
|
||||||
|
logger(ctx, next).then();
|
||||||
|
});
|
||||||
|
|
||||||
|
// -------------------------------------------------- Use Route
|
||||||
|
app.use(router.routes());
|
||||||
|
|
||||||
|
// ========================================================================
|
||||||
|
// START Application
|
||||||
|
// ========================================================================
|
||||||
|
app.listen(port);
|
24
template/controller/index.ts
Normal file
24
template/controller/index.ts
Normal file
@ -0,0 +1,24 @@
|
|||||||
|
import { Context, Next } from "koa"
|
||||||
|
|
||||||
|
|
||||||
|
export class Index {
|
||||||
|
static async index(ctx: Context, next: Next): Promise<any> {
|
||||||
|
ctx.body = "This is Home!"
|
||||||
|
await next()
|
||||||
|
}
|
||||||
|
|
||||||
|
static async json(ctx: Context, next: Next): Promise<any> {
|
||||||
|
ctx.type = "json"
|
||||||
|
ctx.body = {
|
||||||
|
code: "200",
|
||||||
|
message: "This is Home!",
|
||||||
|
}
|
||||||
|
await next()
|
||||||
|
}
|
||||||
|
|
||||||
|
static async view(ctx: Context) {
|
||||||
|
await ctx.render("index", {
|
||||||
|
name: "titor",
|
||||||
|
})
|
||||||
|
}
|
||||||
|
}
|
12
template/docker-compose.yml
Normal file
12
template/docker-compose.yml
Normal file
@ -0,0 +1,12 @@
|
|||||||
|
version: '3'
|
||||||
|
|
||||||
|
services:
|
||||||
|
koa:
|
||||||
|
build: .
|
||||||
|
container_name: "<%= appName %>"
|
||||||
|
restart: "no"
|
||||||
|
ports:
|
||||||
|
- 4321:4321
|
||||||
|
volumes:
|
||||||
|
- .:/root
|
||||||
|
working_dir: /root/
|
47
template/extend/logger.ts
Normal file
47
template/extend/logger.ts
Normal file
@ -0,0 +1,47 @@
|
|||||||
|
import { lucky } from "./lucky";
|
||||||
|
import { Context, Next } from "koa";
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 命令行日志:
|
||||||
|
* 输出应用的当前请求信息
|
||||||
|
* @param app {Context | string}
|
||||||
|
* @param next {Next | function}
|
||||||
|
* @return {Promise<void>}
|
||||||
|
*/
|
||||||
|
async function logger(app: Context, next: Next): Promise<void> {
|
||||||
|
// @ts-ignore
|
||||||
|
let start: Date = new Date();
|
||||||
|
|
||||||
|
await next();
|
||||||
|
|
||||||
|
// @ts-ignore
|
||||||
|
let ms: Date = new Date() - start;
|
||||||
|
console.log(`${setMethodImage(app)} ${lucky.info(app.method)} ${lucky.second(app.url)} ${lucky.primary('['+ ms + "ms]")}`);
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 设置请求的 头标图片:
|
||||||
|
* 通过 Application 的请求方式,设置不同的命令行请求头标识。
|
||||||
|
* @param app {Application.Context}
|
||||||
|
* @return methodImage {String}
|
||||||
|
*/
|
||||||
|
function setMethodImage(app: Context) {
|
||||||
|
let method = app.method;
|
||||||
|
let methodImage: string;
|
||||||
|
|
||||||
|
switch (method) {
|
||||||
|
case "GET":
|
||||||
|
methodImage = "=>";
|
||||||
|
break;
|
||||||
|
case "POST":
|
||||||
|
methodImage = "<= ";
|
||||||
|
break;
|
||||||
|
default:
|
||||||
|
methodImage = "<=>";
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
return methodImage;
|
||||||
|
}
|
||||||
|
|
||||||
|
// 导出
|
||||||
|
export { logger };
|
81
template/extend/lucky.ts
Normal file
81
template/extend/lucky.ts
Normal file
@ -0,0 +1,81 @@
|
|||||||
|
// colors-console 仅支持 CommonJS 导入
|
||||||
|
const cmd = require("colors-console");
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 命令行彩色输出;
|
||||||
|
* 通过语义化方法,给命令行内容增加颜色。
|
||||||
|
* @class lucky
|
||||||
|
*/
|
||||||
|
export class lucky {
|
||||||
|
/**
|
||||||
|
* 字体黄色
|
||||||
|
* @param content {String} 要渲染的内容
|
||||||
|
* @return {void}
|
||||||
|
*/
|
||||||
|
static warning(content: any) {
|
||||||
|
return cmd("yellow", content);
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 字体红色
|
||||||
|
* @param content {String} 要渲染的内容
|
||||||
|
* @return {void}
|
||||||
|
*/
|
||||||
|
static danger(content: any) {
|
||||||
|
return cmd("magenta", content);
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 字体青色
|
||||||
|
* @param content {String} 要渲染的内容
|
||||||
|
* @return {void}
|
||||||
|
*/
|
||||||
|
static info(content: any) {
|
||||||
|
return cmd("cyan", content);
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 字体灰色
|
||||||
|
* @param content {String} 要渲染的内容
|
||||||
|
* @return {void}
|
||||||
|
*/
|
||||||
|
static second(content: any) {
|
||||||
|
return cmd("grey", content);
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 字体白色
|
||||||
|
* @param content {String} 要渲染的内容
|
||||||
|
* @return {void}
|
||||||
|
*/
|
||||||
|
static light(content: any) {
|
||||||
|
return cmd("white", content);
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 字体蓝色
|
||||||
|
* @param content {String} 要渲染的内容
|
||||||
|
* @return {void}
|
||||||
|
*/
|
||||||
|
static primary(content: any) {
|
||||||
|
return cmd("blue", content);
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 字体绿色
|
||||||
|
* @param content {String} 要渲染的内容
|
||||||
|
* @return {void}
|
||||||
|
*/
|
||||||
|
static success(content: any) {
|
||||||
|
return cmd("green", content);
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 字体黑色
|
||||||
|
* @param content {String} 要渲染的内容
|
||||||
|
* @return {void}
|
||||||
|
*/
|
||||||
|
static dark(content: any) {
|
||||||
|
return cmd("black", content);
|
||||||
|
}
|
||||||
|
}
|
45
template/package.json
Normal file
45
template/package.json
Normal file
@ -0,0 +1,45 @@
|
|||||||
|
{
|
||||||
|
"name": "<%= appName %>",
|
||||||
|
"version": "1.0.0",
|
||||||
|
"main": "app.js",
|
||||||
|
"license": "MIT",
|
||||||
|
"scripts": {
|
||||||
|
"start": "node app.js",
|
||||||
|
"dev": "yarn tsc && yarn nodemon app.js",
|
||||||
|
"build": "yarn tsc",
|
||||||
|
"clean": "rm -rf ./**/*.js ./*.js",
|
||||||
|
"clear": "rm -rf node_modules ./**/*.js ./*.js",
|
||||||
|
"docker": "yarn && yarn build && yarn start",
|
||||||
|
"docker:dev": "yarn && yarn dev"
|
||||||
|
},
|
||||||
|
"devDependencies": {
|
||||||
|
"@types/koa": "^2.11.6",
|
||||||
|
"@types/koa-router": "^7.4.1",
|
||||||
|
"@types/node": "^14.14.22",
|
||||||
|
"nodemon": "^2.0.7",
|
||||||
|
"prettier": "^2.2.1",
|
||||||
|
"rollup-plugin-typescript2": "^0.29.0",
|
||||||
|
"typescript": "^4.1.3"
|
||||||
|
},
|
||||||
|
"dependencies": {
|
||||||
|
"koa": "^2.13.1",
|
||||||
|
"koa-nunjucks-2": "^3.0.2",
|
||||||
|
"koa-router": "^10.0.0",
|
||||||
|
"colors-console": "^1.0.3"
|
||||||
|
},
|
||||||
|
"prettier": {
|
||||||
|
"printWidth": 80,
|
||||||
|
"tabWidth": 2,
|
||||||
|
"useTabs": false,
|
||||||
|
"singleQuote": false,
|
||||||
|
"semi": false,
|
||||||
|
"trailingComma": "es5"
|
||||||
|
},
|
||||||
|
"nodemonConfig": {
|
||||||
|
"watch": [
|
||||||
|
"*.js",
|
||||||
|
"*.ts",
|
||||||
|
"*.njk"
|
||||||
|
]
|
||||||
|
}
|
||||||
|
}
|
15
template/route/route.ts
Normal file
15
template/route/route.ts
Normal file
@ -0,0 +1,15 @@
|
|||||||
|
import Router from "koa-router"
|
||||||
|
import { Index as IndexRoute } from "./../controller/index"
|
||||||
|
|
||||||
|
const router: Router = new Router()
|
||||||
|
|
||||||
|
|
||||||
|
router.get("/", IndexRoute.index)
|
||||||
|
router.get("/json", IndexRoute.json)
|
||||||
|
router.get("/view", IndexRoute.view)
|
||||||
|
|
||||||
|
|
||||||
|
// --------------------------------------------------
|
||||||
|
// 导出 router 规则
|
||||||
|
// --------------------------------------------------
|
||||||
|
export { router }
|
71
template/tsconfig.json
Normal file
71
template/tsconfig.json
Normal file
@ -0,0 +1,71 @@
|
|||||||
|
{
|
||||||
|
"compileOnSave": true,
|
||||||
|
"compilerOptions": {
|
||||||
|
/* Visit https://aka.ms/tsconfig.json to read more about this file */
|
||||||
|
|
||||||
|
/* Basic Options */
|
||||||
|
// "incremental": true, /* Enable incremental compilation */
|
||||||
|
"target": "ES6", /* Specify ECMAScript target version: 'ES3' (default), 'ES5', 'ES2015', 'ES2016', 'ES2017', 'ES2018', 'ES2019', 'ES2020', or 'ESNEXT'. */
|
||||||
|
"module": "commonjs", /* Specify module code generation: 'none', 'commonjs', 'amd', 'system', 'umd', 'es2015', 'es2020', or 'ESNext'. */
|
||||||
|
// "lib": [], /* Specify library files to be included in the compilation. */
|
||||||
|
// "allowJs": true, /* Allow javascript files to be compiled. */
|
||||||
|
// "checkJs": true, /* Report errors in .js files. */
|
||||||
|
// "jsx": "preserve", /* Specify JSX code generation: 'preserve', 'react-native', or 'react'. */
|
||||||
|
// "declaration": true, /* Generates corresponding '.d.ts' file. */
|
||||||
|
// "declarationMap": true, /* Generates a sourcemap for each corresponding '.d.ts' file. */
|
||||||
|
// "sourceMap": true, /* Generates corresponding '.map' file. */
|
||||||
|
// "outFile": "./", /* Concatenate and emit output to single file. */
|
||||||
|
// "outDir": "./", /* Redirect output structure to the directory. */
|
||||||
|
// "rootDir": "./", /* Specify the root directory of input files. Use to control the output directory structure with --outDir. */
|
||||||
|
// "composite": true, /* Enable project compilation */
|
||||||
|
// "tsBuildInfoFile": "./", /* Specify file to store incremental compilation information */
|
||||||
|
// "removeComments": true, /* Do not emit comments to output. */
|
||||||
|
// "noEmit": true, /* Do not emit outputs. */
|
||||||
|
// "importHelpers": true, /* Import emit helpers from 'tslib'. */
|
||||||
|
// "downlevelIteration": true, /* Provide full support for iterables in 'for-of', spread, and destructuring when targeting 'ES5' or 'ES3'. */
|
||||||
|
// "isolatedModules": true, /* Transpile each file as a separate module (similar to 'ts.transpileModule'). */
|
||||||
|
|
||||||
|
/* Strict Type-Checking Options */
|
||||||
|
"strict": true, /* Enable all strict type-checking options. */
|
||||||
|
// "noImplicitAny": true, /* Raise error on expressions and declarations with an implied 'any' type. */
|
||||||
|
// "strictNullChecks": true, /* Enable strict null checks. */
|
||||||
|
// "strictFunctionTypes": true, /* Enable strict checking of function types. */
|
||||||
|
// "strictBindCallApply": true, /* Enable strict 'bind', 'call', and 'apply' methods on functions. */
|
||||||
|
// "strictPropertyInitialization": true, /* Enable strict checking of property initialization in classes. */
|
||||||
|
// "noImplicitThis": true, /* Raise error on 'this' expressions with an implied 'any' type. */
|
||||||
|
// "alwaysStrict": true, /* Parse in strict mode and emit "use strict" for each source file. */
|
||||||
|
|
||||||
|
/* Additional Checks */
|
||||||
|
// "noUnusedLocals": true, /* Report errors on unused locals. */
|
||||||
|
// "noUnusedParameters": true, /* Report errors on unused parameters. */
|
||||||
|
// "noImplicitReturns": true, /* Report error when not all code paths in function return a value. */
|
||||||
|
// "noFallthroughCasesInSwitch": true, /* Report errors for fallthrough cases in switch statement. */
|
||||||
|
// "noUncheckedIndexedAccess": true, /* Include 'undefined' in index signature results */
|
||||||
|
|
||||||
|
/* Module Resolution Options */
|
||||||
|
// "moduleResolution": "node", /* Specify module resolution strategy: 'node' (Node.js) or 'classic' (TypeScript pre-1.6). */
|
||||||
|
// "baseUrl": "./", /* Base directory to resolve non-absolute module names. */
|
||||||
|
// "paths": {}, /* A series of entries which re-map imports to lookup locations relative to the 'baseUrl'. */
|
||||||
|
// "rootDirs": [], /* List of root folders whose combined content represents the structure of the project at runtime. */
|
||||||
|
// "typeRoots": [], /* List of folders to include type definitions from. */
|
||||||
|
"types": ["koa","koa-compose"], /* Type declaration files to be included in compilation. */
|
||||||
|
// "allowSyntheticDefaultImports": true, /* Allow default imports from modules with no default export. This does not affect code emit, just typechecking. */
|
||||||
|
"esModuleInterop": true, /* Enables emit interoperability between CommonJS and ES Modules via creation of namespace objects for all imports. Implies 'allowSyntheticDefaultImports'. */
|
||||||
|
// "preserveSymlinks": true, /* Do not resolve the real path of symlinks. */
|
||||||
|
// "allowUmdGlobalAccess": true, /* Allow accessing UMD globals from modules. */
|
||||||
|
|
||||||
|
/* Source Map Options */
|
||||||
|
// "sourceRoot": "", /* Specify the location where debugger should locate TypeScript files instead of source locations. */
|
||||||
|
// "mapRoot": "", /* Specify the location where debugger should locate map files instead of generated locations. */
|
||||||
|
// "inlineSourceMap": true, /* Emit a single file with source maps instead of having a separate file. */
|
||||||
|
// "inlineSources": true, /* Emit the source alongside the sourcemaps within a single file; requires '--inlineSourceMap' or '--sourceMap' to be set. */
|
||||||
|
|
||||||
|
/* Experimental Options */
|
||||||
|
// "experimentalDecorators": true, /* Enables experimental support for ES7 decorators. */
|
||||||
|
// "emitDecoratorMetadata": true, /* Enables experimental support for emitting type metadata for decorators. */
|
||||||
|
|
||||||
|
/* Advanced Options */
|
||||||
|
"skipLibCheck": true, /* Skip type checking of declaration files. */
|
||||||
|
"forceConsistentCasingInFileNames": true /* Disallow inconsistently-cased references to the same file. */
|
||||||
|
}
|
||||||
|
}
|
1
template/view/index.njk
Normal file
1
template/view/index.njk
Normal file
@ -0,0 +1 @@
|
|||||||
|
<h3>hello, {{name}}</h3>
|
1451
template/yarn.lock
Normal file
1451
template/yarn.lock
Normal file
File diff suppressed because it is too large
Load Diff
80
tsconfig.json
Normal file
80
tsconfig.json
Normal file
@ -0,0 +1,80 @@
|
|||||||
|
{
|
||||||
|
"compileOnSave": true,
|
||||||
|
"compilerOptions": {
|
||||||
|
/* Visit https://aka.ms/tsconfig.json to read more about this file */
|
||||||
|
|
||||||
|
/* Basic Options */
|
||||||
|
// "incremental": true, /* Enable incremental compilation */
|
||||||
|
"target": "ES6",
|
||||||
|
/* Specify ECMAScript target version: 'ES3' (default), 'ES5', 'ES2015', 'ES2016', 'ES2017', 'ES2018', 'ES2019', 'ES2020', or 'ESNEXT'. */
|
||||||
|
"module": "CommonJS",
|
||||||
|
/* Specify module code generation: 'none', 'commonjs', 'amd', 'system', 'umd', 'es2015', 'es2020', or 'ESNext'. */
|
||||||
|
// "lib": [], /* Specify library files to be included in the compilation. */
|
||||||
|
// "allowJs": true, /* Allow javascript files to be compiled. */
|
||||||
|
// "checkJs": true, /* Report errors in .js files. */
|
||||||
|
// "jsx": "preserve", /* Specify JSX code generation: 'preserve', 'react-native', or 'react'. */
|
||||||
|
// "declaration": true, /* Generates corresponding '.d.ts' file. */
|
||||||
|
// "declarationMap": true, /* Generates a sourcemap for each corresponding '.d.ts' file. */
|
||||||
|
// "sourceMap": true, /* Generates corresponding '.map' file. */
|
||||||
|
// "outFile": "./", /* Concatenate and emit output to single file. */
|
||||||
|
// "outDir": "./", /* Redirect output structure to the directory. */
|
||||||
|
// "rootDir": "./", /* Specify the root directory of input files. Use to control the output directory structure with --outDir. */
|
||||||
|
// "composite": true, /* Enable project compilation */
|
||||||
|
// "tsBuildInfoFile": "./", /* Specify file to store incremental compilation information */
|
||||||
|
// "removeComments": true, /* Do not emit comments to output. */
|
||||||
|
// "noEmit": true, /* Do not emit outputs. */
|
||||||
|
// "importHelpers": true, /* Import emit helpers from 'tslib'. */
|
||||||
|
// "downlevelIteration": true, /* Provide full support for iterables in 'for-of', spread, and destructuring when targeting 'ES5' or 'ES3'. */
|
||||||
|
// "isolatedModules": true, /* Transpile each file as a separate module (similar to 'ts.transpileModule'). */
|
||||||
|
|
||||||
|
/* Strict Type-Checking Options */
|
||||||
|
"strict": true,
|
||||||
|
/* Enable all strict type-checking options. */
|
||||||
|
// "noImplicitAny": true, /* Raise error on expressions and declarations with an implied 'any' type. */
|
||||||
|
// "strictNullChecks": true, /* Enable strict null checks. */
|
||||||
|
// "strictFunctionTypes": true, /* Enable strict checking of function types. */
|
||||||
|
// "strictBindCallApply": true, /* Enable strict 'bind', 'call', and 'apply' methods on functions. */
|
||||||
|
// "strictPropertyInitialization": true, /* Enable strict checking of property initialization in classes. */
|
||||||
|
// "noImplicitThis": true, /* Raise error on 'this' expressions with an implied 'any' type. */
|
||||||
|
// "alwaysStrict": true, /* Parse in strict mode and emit "use strict" for each source file. */
|
||||||
|
|
||||||
|
/* Additional Checks */
|
||||||
|
// "noUnusedLocals": true, /* Report errors on unused locals. */
|
||||||
|
// "noUnusedParameters": true, /* Report errors on unused parameters. */
|
||||||
|
// "noImplicitReturns": true, /* Report error when not all code paths in function return a value. */
|
||||||
|
// "noFallthroughCasesInSwitch": true, /* Report errors for fallthrough cases in switch statement. */
|
||||||
|
// "noUncheckedIndexedAccess": true, /* Include 'undefined' in index signature results */
|
||||||
|
|
||||||
|
/* Module Resolution Options */
|
||||||
|
// "moduleResolution": "node", /* Specify module resolution strategy: 'node' (Node.js) or 'classic' (TypeScript pre-1.6). */
|
||||||
|
// "baseUrl": "./", /* Base directory to resolve non-absolute module names. */
|
||||||
|
// "paths": {}, /* A series of entries which re-map imports to lookup locations relative to the 'baseUrl'. */
|
||||||
|
// "rootDirs": [], /* List of root folders whose combined content represents the structure of the project at runtime. */
|
||||||
|
// "typeRoots": [], /* List of folders to include type definitions from. */
|
||||||
|
// "types": [], /* Type declaration files to be included in compilation. */
|
||||||
|
// "allowSyntheticDefaultImports": true, /* Allow default imports from modules with no default export. This does not affect code emit, just typechecking. */
|
||||||
|
"esModuleInterop": true,
|
||||||
|
/* Enables emit interoperability between CommonJS and ES Modules via creation of namespace objects for all imports. Implies 'allowSyntheticDefaultImports'. */
|
||||||
|
// "preserveSymlinks": true, /* Do not resolve the real path of symlinks. */
|
||||||
|
// "allowUmdGlobalAccess": true, /* Allow accessing UMD globals from modules. */
|
||||||
|
|
||||||
|
/* Source Map Options */
|
||||||
|
// "sourceRoot": "", /* Specify the location where debugger should locate TypeScript files instead of source locations. */
|
||||||
|
// "mapRoot": "", /* Specify the location where debugger should locate map files instead of generated locations. */
|
||||||
|
// "inlineSourceMap": true, /* Emit a single file with source maps instead of having a separate file. */
|
||||||
|
// "inlineSources": true, /* Emit the source alongside the sourcemaps within a single file; requires '--inlineSourceMap' or '--sourceMap' to be set. */
|
||||||
|
|
||||||
|
/* Experimental Options */
|
||||||
|
// "experimentalDecorators": true, /* Enables experimental support for ES7 decorators. */
|
||||||
|
// "emitDecoratorMetadata": true, /* Enables experimental support for emitting type metadata for decorators. */
|
||||||
|
|
||||||
|
/* Advanced Options */
|
||||||
|
"skipLibCheck": true,
|
||||||
|
/* Skip type checking of declaration files. */
|
||||||
|
"forceConsistentCasingInFileNames": true
|
||||||
|
/* Disallow inconsistently-cased references to the same file. */
|
||||||
|
},
|
||||||
|
"files": [
|
||||||
|
"bin/index.ts"
|
||||||
|
]
|
||||||
|
}
|
347
yarn.lock
Normal file
347
yarn.lock
Normal file
@ -0,0 +1,347 @@
|
|||||||
|
# THIS IS AN AUTOGENERATED FILE. DO NOT EDIT THIS FILE DIRECTLY.
|
||||||
|
# yarn lockfile v1
|
||||||
|
|
||||||
|
|
||||||
|
"@types/ejs@^3.0.5":
|
||||||
|
version "3.0.5"
|
||||||
|
resolved "http://mirrors.cloud.tencent.com/npm/@types%2fejs/-/ejs-3.0.5.tgz#95a3a1c3d9603eba80fe67ff56da1ba275ef2eda"
|
||||||
|
integrity sha512-k4ef69sS4sIqAPW9GoBnN+URAON2LeL1H0duQvL4RgdEBna19/WattYSA1qYqvbVEDRTSWzOw56tCLhC/m/IOw==
|
||||||
|
|
||||||
|
"@types/inquirer@^7.3.1":
|
||||||
|
version "7.3.1"
|
||||||
|
resolved "http://mirrors.cloud.tencent.com/npm/@types%2finquirer/-/inquirer-7.3.1.tgz#1f231224e7df11ccfaf4cf9acbcc3b935fea292d"
|
||||||
|
integrity sha512-osD38QVIfcdgsPCT0V3lD7eH0OFurX71Jft18bZrsVQWVRt6TuxRzlr0GJLrxoHZR2V5ph7/qP8se/dcnI7o0g==
|
||||||
|
dependencies:
|
||||||
|
"@types/through" "*"
|
||||||
|
rxjs "^6.4.0"
|
||||||
|
|
||||||
|
"@types/node@*":
|
||||||
|
version "14.14.25"
|
||||||
|
resolved "http://mirrors.cloud.tencent.com/npm/@types%2fnode/-/node-14.14.25.tgz#15967a7b577ff81383f9b888aa6705d43fbbae93"
|
||||||
|
integrity sha512-EPpXLOVqDvisVxtlbvzfyqSsFeQxltFbluZNRndIb8tr9KiBnYNLzrc1N3pyKUCww2RNrfHDViqDWWE1LCJQtQ==
|
||||||
|
|
||||||
|
"@types/through@*":
|
||||||
|
version "0.0.30"
|
||||||
|
resolved "http://mirrors.cloud.tencent.com/npm/@types%2fthrough/-/through-0.0.30.tgz#e0e42ce77e897bd6aead6f6ea62aeb135b8a3895"
|
||||||
|
integrity sha512-FvnCJljyxhPM3gkRgWmxmDZyAQSiBQQWLI0A0VFL0K7W1oRUrPJSqNO0NvTnLkBcotdlp3lKvaT0JrnyRDkzOg==
|
||||||
|
dependencies:
|
||||||
|
"@types/node" "*"
|
||||||
|
|
||||||
|
ansi-escapes@^4.2.1:
|
||||||
|
version "4.3.1"
|
||||||
|
resolved "https://mirrors.tencent.com/npm/ansi-escapes/-/ansi-escapes-4.3.1.tgz#a5c47cc43181f1f38ffd7076837700d395522a61"
|
||||||
|
integrity sha512-JWF7ocqNrp8u9oqpgV+wH5ftbt+cfvv+PTjOvKLT3AdYly/LmORARfEVT1iyjwN+4MqE5UmVKoAdIBqeoCHgLA==
|
||||||
|
dependencies:
|
||||||
|
type-fest "^0.11.0"
|
||||||
|
|
||||||
|
ansi-regex@^5.0.0:
|
||||||
|
version "5.0.0"
|
||||||
|
resolved "http://mirrors.cloud.tencent.com/npm/ansi-regex/-/ansi-regex-5.0.0.tgz#388539f55179bf39339c81af30a654d69f87cb75"
|
||||||
|
integrity sha512-bY6fj56OUQ0hU1KjFNDQuJFezqKdrAyFdIevADiqrWHwSlbmBNMHp5ak2f40Pm8JTFyM2mqxkG6ngkHO11f/lg==
|
||||||
|
|
||||||
|
ansi-styles@^3.2.1:
|
||||||
|
version "3.2.1"
|
||||||
|
resolved "http://mirrors.cloud.tencent.com/npm/ansi-styles/-/ansi-styles-3.2.1.tgz#41fbb20243e50b12be0f04b8dedbf07520ce841d"
|
||||||
|
integrity sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==
|
||||||
|
dependencies:
|
||||||
|
color-convert "^1.9.0"
|
||||||
|
|
||||||
|
ansi-styles@^4.1.0:
|
||||||
|
version "4.3.0"
|
||||||
|
resolved "http://mirrors.cloud.tencent.com/npm/ansi-styles/-/ansi-styles-4.3.0.tgz#edd803628ae71c04c85ae7a0906edad34b648937"
|
||||||
|
integrity sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==
|
||||||
|
dependencies:
|
||||||
|
color-convert "^2.0.1"
|
||||||
|
|
||||||
|
async@0.9.x:
|
||||||
|
version "0.9.2"
|
||||||
|
resolved "http://mirrors.cloud.tencent.com/npm/async/-/async-0.9.2.tgz#aea74d5e61c1f899613bf64bda66d4c78f2fd17d"
|
||||||
|
integrity sha1-rqdNXmHB+JlhO/ZL2mbUx48v0X0=
|
||||||
|
|
||||||
|
balanced-match@^1.0.0:
|
||||||
|
version "1.0.0"
|
||||||
|
resolved "http://mirrors.cloud.tencent.com/npm/balanced-match/-/balanced-match-1.0.0.tgz#89b4d199ab2bee49de164ea02b89ce462d71b767"
|
||||||
|
integrity sha1-ibTRmasr7kneFk6gK4nORi1xt2c=
|
||||||
|
|
||||||
|
brace-expansion@^1.1.7:
|
||||||
|
version "1.1.11"
|
||||||
|
resolved "http://mirrors.cloud.tencent.com/npm/brace-expansion/-/brace-expansion-1.1.11.tgz#3c7fcbf529d87226f3d2f52b966ff5271eb441dd"
|
||||||
|
integrity sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==
|
||||||
|
dependencies:
|
||||||
|
balanced-match "^1.0.0"
|
||||||
|
concat-map "0.0.1"
|
||||||
|
|
||||||
|
chalk@^2.4.2:
|
||||||
|
version "2.4.2"
|
||||||
|
resolved "http://mirrors.cloud.tencent.com/npm/chalk/-/chalk-2.4.2.tgz#cd42541677a54333cf541a49108c1432b44c9424"
|
||||||
|
integrity sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==
|
||||||
|
dependencies:
|
||||||
|
ansi-styles "^3.2.1"
|
||||||
|
escape-string-regexp "^1.0.5"
|
||||||
|
supports-color "^5.3.0"
|
||||||
|
|
||||||
|
chalk@^4.1.0:
|
||||||
|
version "4.1.0"
|
||||||
|
resolved "http://mirrors.cloud.tencent.com/npm/chalk/-/chalk-4.1.0.tgz#4e14870a618d9e2edd97dd8345fd9d9dc315646a"
|
||||||
|
integrity sha512-qwx12AxXe2Q5xQ43Ac//I6v5aXTipYrSESdOgzrN+9XjgEpyjpKuvSGaN4qE93f7TQTlerQQ8S+EQ0EyDoVL1A==
|
||||||
|
dependencies:
|
||||||
|
ansi-styles "^4.1.0"
|
||||||
|
supports-color "^7.1.0"
|
||||||
|
|
||||||
|
chardet@^0.7.0:
|
||||||
|
version "0.7.0"
|
||||||
|
resolved "http://mirrors.cloud.tencent.com/npm/chardet/-/chardet-0.7.0.tgz#90094849f0937f2eedc2425d0d28a9e5f0cbad9e"
|
||||||
|
integrity sha512-mT8iDcrh03qDGRRmoA2hmBJnxpllMR+0/0qlzjqZES6NdiWDcZkCNAk4rPFZ9Q85r27unkiNNg8ZOiwZXBHwcA==
|
||||||
|
|
||||||
|
cli-cursor@^3.1.0:
|
||||||
|
version "3.1.0"
|
||||||
|
resolved "http://mirrors.cloud.tencent.com/npm/cli-cursor/-/cli-cursor-3.1.0.tgz#264305a7ae490d1d03bf0c9ba7c925d1753af307"
|
||||||
|
integrity sha512-I/zHAwsKf9FqGoXM4WWRACob9+SNukZTd94DWF57E4toouRulbCxcUh6RKUEOQlYTHJnzkPMySvPNaaSLNfLZw==
|
||||||
|
dependencies:
|
||||||
|
restore-cursor "^3.1.0"
|
||||||
|
|
||||||
|
cli-width@^3.0.0:
|
||||||
|
version "3.0.0"
|
||||||
|
resolved "https://mirrors.tencent.com/npm/cli-width/-/cli-width-3.0.0.tgz#a2f48437a2caa9a22436e794bf071ec9e61cedf6"
|
||||||
|
integrity sha512-FxqpkPPwu1HjuN93Omfm4h8uIanXofW0RxVEW3k5RKx+mJJYSthzNhp32Kzxxy3YAEZ/Dc/EWN1vZRY0+kOhbw==
|
||||||
|
|
||||||
|
color-convert@^1.9.0:
|
||||||
|
version "1.9.3"
|
||||||
|
resolved "http://mirrors.cloud.tencent.com/npm/color-convert/-/color-convert-1.9.3.tgz#bb71850690e1f136567de629d2d5471deda4c1e8"
|
||||||
|
integrity sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==
|
||||||
|
dependencies:
|
||||||
|
color-name "1.1.3"
|
||||||
|
|
||||||
|
color-convert@^2.0.1:
|
||||||
|
version "2.0.1"
|
||||||
|
resolved "http://mirrors.cloud.tencent.com/npm/color-convert/-/color-convert-2.0.1.tgz#72d3a68d598c9bdb3af2ad1e84f21d896abd4de3"
|
||||||
|
integrity sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==
|
||||||
|
dependencies:
|
||||||
|
color-name "~1.1.4"
|
||||||
|
|
||||||
|
color-name@1.1.3:
|
||||||
|
version "1.1.3"
|
||||||
|
resolved "http://mirrors.cloud.tencent.com/npm/color-name/-/color-name-1.1.3.tgz#a7d0558bd89c42f795dd42328f740831ca53bc25"
|
||||||
|
integrity sha1-p9BVi9icQveV3UIyj3QIMcpTvCU=
|
||||||
|
|
||||||
|
color-name@~1.1.4:
|
||||||
|
version "1.1.4"
|
||||||
|
resolved "http://mirrors.cloud.tencent.com/npm/color-name/-/color-name-1.1.4.tgz#c2a09a87acbde69543de6f63fa3995c826c536a2"
|
||||||
|
integrity sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==
|
||||||
|
|
||||||
|
concat-map@0.0.1:
|
||||||
|
version "0.0.1"
|
||||||
|
resolved "http://mirrors.cloud.tencent.com/npm/concat-map/-/concat-map-0.0.1.tgz#d8a96bd77fd68df7793a73036a3ba0d5405d477b"
|
||||||
|
integrity sha1-2Klr13/Wjfd5OnMDajug1UBdR3s=
|
||||||
|
|
||||||
|
ejs@^3.1.6:
|
||||||
|
version "3.1.6"
|
||||||
|
resolved "http://mirrors.cloud.tencent.com/npm/ejs/-/ejs-3.1.6.tgz#5bfd0a0689743bb5268b3550cceeebbc1702822a"
|
||||||
|
integrity sha512-9lt9Zse4hPucPkoP7FHDF0LQAlGyF9JVpnClFLFH3aSSbxmyoqINRpp/9wePWJTUl4KOQwRL72Iw3InHPDkoGw==
|
||||||
|
dependencies:
|
||||||
|
jake "^10.6.1"
|
||||||
|
|
||||||
|
emoji-regex@^8.0.0:
|
||||||
|
version "8.0.0"
|
||||||
|
resolved "http://mirrors.cloud.tencent.com/npm/emoji-regex/-/emoji-regex-8.0.0.tgz#e818fd69ce5ccfcb404594f842963bf53164cc37"
|
||||||
|
integrity sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==
|
||||||
|
|
||||||
|
escape-string-regexp@^1.0.5:
|
||||||
|
version "1.0.5"
|
||||||
|
resolved "https://mirrors.tencent.com/npm/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz#1b61c0562190a8dff6ae3bb2cf0200ca130b86d4"
|
||||||
|
integrity sha1-G2HAViGQqN/2rjuyzwIAyhMLhtQ=
|
||||||
|
|
||||||
|
external-editor@^3.0.3:
|
||||||
|
version "3.1.0"
|
||||||
|
resolved "http://mirrors.cloud.tencent.com/npm/external-editor/-/external-editor-3.1.0.tgz#cb03f740befae03ea4d283caed2741a83f335495"
|
||||||
|
integrity sha512-hMQ4CX1p1izmuLYyZqLMO/qGNw10wSv9QDCPfzXfyFrOaCSSoRfqE1Kf1s5an66J5JZC62NewG+mK49jOCtQew==
|
||||||
|
dependencies:
|
||||||
|
chardet "^0.7.0"
|
||||||
|
iconv-lite "^0.4.24"
|
||||||
|
tmp "^0.0.33"
|
||||||
|
|
||||||
|
figures@^3.0.0:
|
||||||
|
version "3.2.0"
|
||||||
|
resolved "http://mirrors.cloud.tencent.com/npm/figures/-/figures-3.2.0.tgz#625c18bd293c604dc4a8ddb2febf0c88341746af"
|
||||||
|
integrity sha512-yaduQFRKLXYOGgEn6AZau90j3ggSOyiqXU0F9JZfeXYhNa+Jk4X+s45A2zg5jns87GAFa34BBm2kXw4XpNcbdg==
|
||||||
|
dependencies:
|
||||||
|
escape-string-regexp "^1.0.5"
|
||||||
|
|
||||||
|
filelist@^1.0.1:
|
||||||
|
version "1.0.2"
|
||||||
|
resolved "http://mirrors.cloud.tencent.com/npm/filelist/-/filelist-1.0.2.tgz#80202f21462d4d1c2e214119b1807c1bc0380e5b"
|
||||||
|
integrity sha512-z7O0IS8Plc39rTCq6i6iHxk43duYOn8uFJiWSewIq0Bww1RNybVHSCjahmcC87ZqAm4OTvFzlzeGu3XAzG1ctQ==
|
||||||
|
dependencies:
|
||||||
|
minimatch "^3.0.4"
|
||||||
|
|
||||||
|
has-flag@^3.0.0:
|
||||||
|
version "3.0.0"
|
||||||
|
resolved "http://mirrors.cloud.tencent.com/npm/has-flag/-/has-flag-3.0.0.tgz#b5d454dc2199ae225699f3467e5a07f3b955bafd"
|
||||||
|
integrity sha1-tdRU3CGZriJWmfNGfloH87lVuv0=
|
||||||
|
|
||||||
|
has-flag@^4.0.0:
|
||||||
|
version "4.0.0"
|
||||||
|
resolved "http://mirrors.cloud.tencent.com/npm/has-flag/-/has-flag-4.0.0.tgz#944771fd9c81c81265c4d6941860da06bb59479b"
|
||||||
|
integrity sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==
|
||||||
|
|
||||||
|
iconv-lite@^0.4.24:
|
||||||
|
version "0.4.24"
|
||||||
|
resolved "http://mirrors.cloud.tencent.com/npm/iconv-lite/-/iconv-lite-0.4.24.tgz#2022b4b25fbddc21d2f524974a474aafe733908b"
|
||||||
|
integrity sha512-v3MXnZAcvnywkTUEZomIActle7RXXeedOR31wwl7VlyoXO4Qi9arvSenNQWne1TcRwhCL1HwLI21bEqdpj8/rA==
|
||||||
|
dependencies:
|
||||||
|
safer-buffer ">= 2.1.2 < 3"
|
||||||
|
|
||||||
|
inquirer@^7.3.3:
|
||||||
|
version "7.3.3"
|
||||||
|
resolved "https://mirrors.tencent.com/npm/inquirer/-/inquirer-7.3.3.tgz#04d176b2af04afc157a83fd7c100e98ee0aad003"
|
||||||
|
integrity sha512-JG3eIAj5V9CwcGvuOmoo6LB9kbAYT8HXffUl6memuszlwDC/qvFAJw49XJ5NROSFNPxp3iQg1GqkFhaY/CR0IA==
|
||||||
|
dependencies:
|
||||||
|
ansi-escapes "^4.2.1"
|
||||||
|
chalk "^4.1.0"
|
||||||
|
cli-cursor "^3.1.0"
|
||||||
|
cli-width "^3.0.0"
|
||||||
|
external-editor "^3.0.3"
|
||||||
|
figures "^3.0.0"
|
||||||
|
lodash "^4.17.19"
|
||||||
|
mute-stream "0.0.8"
|
||||||
|
run-async "^2.4.0"
|
||||||
|
rxjs "^6.6.0"
|
||||||
|
string-width "^4.1.0"
|
||||||
|
strip-ansi "^6.0.0"
|
||||||
|
through "^2.3.6"
|
||||||
|
|
||||||
|
is-fullwidth-code-point@^3.0.0:
|
||||||
|
version "3.0.0"
|
||||||
|
resolved "http://mirrors.cloud.tencent.com/npm/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz#f116f8064fe90b3f7844a38997c0b75051269f1d"
|
||||||
|
integrity sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==
|
||||||
|
|
||||||
|
jake@^10.6.1:
|
||||||
|
version "10.8.2"
|
||||||
|
resolved "http://mirrors.cloud.tencent.com/npm/jake/-/jake-10.8.2.tgz#ebc9de8558160a66d82d0eadc6a2e58fbc500a7b"
|
||||||
|
integrity sha512-eLpKyrfG3mzvGE2Du8VoPbeSkRry093+tyNjdYaBbJS9v17knImYGNXQCUV0gLxQtF82m3E8iRb/wdSQZLoq7A==
|
||||||
|
dependencies:
|
||||||
|
async "0.9.x"
|
||||||
|
chalk "^2.4.2"
|
||||||
|
filelist "^1.0.1"
|
||||||
|
minimatch "^3.0.4"
|
||||||
|
|
||||||
|
lodash@^4.17.19:
|
||||||
|
version "4.17.20"
|
||||||
|
resolved "http://mirrors.cloud.tencent.com/npm/lodash/-/lodash-4.17.20.tgz#b44a9b6297bcb698f1c51a3545a2b3b368d59c52"
|
||||||
|
integrity sha512-PlhdFcillOINfeV7Ni6oF1TAEayyZBoZ8bcshTHqOYJYlrqzRK5hagpagky5o4HfCzzd1TRkXPMFq6cKk9rGmA==
|
||||||
|
|
||||||
|
mimic-fn@^2.1.0:
|
||||||
|
version "2.1.0"
|
||||||
|
resolved "http://mirrors.cloud.tencent.com/npm/mimic-fn/-/mimic-fn-2.1.0.tgz#7ed2c2ccccaf84d3ffcb7a69b57711fc2083401b"
|
||||||
|
integrity sha512-OqbOk5oEQeAZ8WXWydlu9HJjz9WVdEIvamMCcXmuqUYjTknH/sqsWvhQ3vgwKFRR1HpjvNBKQ37nbJgYzGqGcg==
|
||||||
|
|
||||||
|
minimatch@^3.0.4:
|
||||||
|
version "3.0.4"
|
||||||
|
resolved "http://mirrors.cloud.tencent.com/npm/minimatch/-/minimatch-3.0.4.tgz#5166e286457f03306064be5497e8dbb0c3d32083"
|
||||||
|
integrity sha512-yJHVQEhyqPLUTgt9B83PXu6W3rx4MvvHvSUvToogpwoGDOUQ+yDrR0HRot+yOCdCO7u4hX3pWft6kWBBcqh0UA==
|
||||||
|
dependencies:
|
||||||
|
brace-expansion "^1.1.7"
|
||||||
|
|
||||||
|
mute-stream@0.0.8:
|
||||||
|
version "0.0.8"
|
||||||
|
resolved "http://mirrors.cloud.tencent.com/npm/mute-stream/-/mute-stream-0.0.8.tgz#1630c42b2251ff81e2a283de96a5497ea92e5e0d"
|
||||||
|
integrity sha512-nnbWWOkoWyUsTjKrhgD0dcz22mdkSnpYqbEjIm2nhwhuxlSkpywJmBo8h0ZqJdkp73mb90SssHkN4rsRaBAfAA==
|
||||||
|
|
||||||
|
onetime@^5.1.0:
|
||||||
|
version "5.1.2"
|
||||||
|
resolved "http://mirrors.cloud.tencent.com/npm/onetime/-/onetime-5.1.2.tgz#d0e96ebb56b07476df1dd9c4806e5237985ca45e"
|
||||||
|
integrity sha512-kbpaSSGJTWdAY5KPVeMOKXSrPtr8C8C7wodJbcsd51jRnmD+GZu8Y0VoU6Dm5Z4vWr0Ig/1NKuWRKf7j5aaYSg==
|
||||||
|
dependencies:
|
||||||
|
mimic-fn "^2.1.0"
|
||||||
|
|
||||||
|
os-tmpdir@~1.0.2:
|
||||||
|
version "1.0.2"
|
||||||
|
resolved "https://mirrors.tencent.com/npm/os-tmpdir/-/os-tmpdir-1.0.2.tgz#bbe67406c79aa85c5cfec766fe5734555dfa1274"
|
||||||
|
integrity sha1-u+Z0BseaqFxc/sdm/lc0VV36EnQ=
|
||||||
|
|
||||||
|
prettier@^2.2.1:
|
||||||
|
version "2.2.1"
|
||||||
|
resolved "http://mirrors.cloud.tencent.com/npm/prettier/-/prettier-2.2.1.tgz#795a1a78dd52f073da0cd42b21f9c91381923ff5"
|
||||||
|
integrity sha512-PqyhM2yCjg/oKkFPtTGUojv7gnZAoG80ttl45O6x2Ug/rMJw4wcc9k6aaf2hibP7BGVCCM33gZoGjyvt9mm16Q==
|
||||||
|
|
||||||
|
restore-cursor@^3.1.0:
|
||||||
|
version "3.1.0"
|
||||||
|
resolved "http://mirrors.cloud.tencent.com/npm/restore-cursor/-/restore-cursor-3.1.0.tgz#39f67c54b3a7a58cea5236d95cf0034239631f7e"
|
||||||
|
integrity sha512-l+sSefzHpj5qimhFSE5a8nufZYAM3sBSVMAPtYkmC+4EH2anSGaEMXSD0izRQbu9nfyQ9y5JrVmp7E8oZrUjvA==
|
||||||
|
dependencies:
|
||||||
|
onetime "^5.1.0"
|
||||||
|
signal-exit "^3.0.2"
|
||||||
|
|
||||||
|
run-async@^2.4.0:
|
||||||
|
version "2.4.1"
|
||||||
|
resolved "https://mirrors.tencent.com/npm/run-async/-/run-async-2.4.1.tgz#8440eccf99ea3e70bd409d49aab88e10c189a455"
|
||||||
|
integrity sha512-tvVnVv01b8c1RrA6Ep7JkStj85Guv/YrMcwqYQnwjsAS2cTmmPGBBjAjpCW7RrSodNSoE2/qg9O4bceNvUuDgQ==
|
||||||
|
|
||||||
|
rxjs@^6.4.0, rxjs@^6.6.0:
|
||||||
|
version "6.6.3"
|
||||||
|
resolved "http://mirrors.cloud.tencent.com/npm/rxjs/-/rxjs-6.6.3.tgz#8ca84635c4daa900c0d3967a6ee7ac60271ee552"
|
||||||
|
integrity sha512-trsQc+xYYXZ3urjOiJOuCOa5N3jAZ3eiSpQB5hIT8zGlL2QfnHLJ2r7GMkBGuIausdJN1OneaI6gQlsqNHHmZQ==
|
||||||
|
dependencies:
|
||||||
|
tslib "^1.9.0"
|
||||||
|
|
||||||
|
"safer-buffer@>= 2.1.2 < 3":
|
||||||
|
version "2.1.2"
|
||||||
|
resolved "http://mirrors.cloud.tencent.com/npm/safer-buffer/-/safer-buffer-2.1.2.tgz#44fa161b0187b9549dd84bb91802f9bd8385cd6a"
|
||||||
|
integrity sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg==
|
||||||
|
|
||||||
|
signal-exit@^3.0.2:
|
||||||
|
version "3.0.3"
|
||||||
|
resolved "http://mirrors.cloud.tencent.com/npm/signal-exit/-/signal-exit-3.0.3.tgz#a1410c2edd8f077b08b4e253c8eacfcaf057461c"
|
||||||
|
integrity sha512-VUJ49FC8U1OxwZLxIbTTrDvLnf/6TDgxZcK8wxR8zs13xpx7xbG60ndBlhNrFi2EMuFRoeDoJO7wthSLq42EjA==
|
||||||
|
|
||||||
|
string-width@^4.1.0:
|
||||||
|
version "4.2.0"
|
||||||
|
resolved "http://mirrors.cloud.tencent.com/npm/string-width/-/string-width-4.2.0.tgz#952182c46cc7b2c313d1596e623992bd163b72b5"
|
||||||
|
integrity sha512-zUz5JD+tgqtuDjMhwIg5uFVV3dtqZ9yQJlZVfq4I01/K5Paj5UHj7VyrQOJvzawSVlKpObApbfD0Ed6yJc+1eg==
|
||||||
|
dependencies:
|
||||||
|
emoji-regex "^8.0.0"
|
||||||
|
is-fullwidth-code-point "^3.0.0"
|
||||||
|
strip-ansi "^6.0.0"
|
||||||
|
|
||||||
|
strip-ansi@^6.0.0:
|
||||||
|
version "6.0.0"
|
||||||
|
resolved "http://mirrors.cloud.tencent.com/npm/strip-ansi/-/strip-ansi-6.0.0.tgz#0b1571dd7669ccd4f3e06e14ef1eed26225ae532"
|
||||||
|
integrity sha512-AuvKTrTfQNYNIctbR1K/YGTR1756GycPsg7b9bdV9Duqur4gv6aKqHXah67Z8ImS7WEz5QVcOtlfW2rZEugt6w==
|
||||||
|
dependencies:
|
||||||
|
ansi-regex "^5.0.0"
|
||||||
|
|
||||||
|
supports-color@^5.3.0:
|
||||||
|
version "5.5.0"
|
||||||
|
resolved "http://mirrors.cloud.tencent.com/npm/supports-color/-/supports-color-5.5.0.tgz#e2e69a44ac8772f78a1ec0b35b689df6530efc8f"
|
||||||
|
integrity sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==
|
||||||
|
dependencies:
|
||||||
|
has-flag "^3.0.0"
|
||||||
|
|
||||||
|
supports-color@^7.1.0:
|
||||||
|
version "7.2.0"
|
||||||
|
resolved "http://mirrors.cloud.tencent.com/npm/supports-color/-/supports-color-7.2.0.tgz#1b7dcdcb32b8138801b3e478ba6a51caa89648da"
|
||||||
|
integrity sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==
|
||||||
|
dependencies:
|
||||||
|
has-flag "^4.0.0"
|
||||||
|
|
||||||
|
through@^2.3.6:
|
||||||
|
version "2.3.8"
|
||||||
|
resolved "http://mirrors.cloud.tencent.com/npm/through/-/through-2.3.8.tgz#0dd4c9ffaabc357960b1b724115d7e0e86a2e1f5"
|
||||||
|
integrity sha1-DdTJ/6q8NXlgsbckEV1+Doai4fU=
|
||||||
|
|
||||||
|
tmp@^0.0.33:
|
||||||
|
version "0.0.33"
|
||||||
|
resolved "https://mirrors.tencent.com/npm/tmp/-/tmp-0.0.33.tgz#6d34335889768d21b2bcda0aa277ced3b1bfadf9"
|
||||||
|
integrity sha512-jRCJlojKnZ3addtTOjdIqoRuPEKBvNXcGYqzO6zWZX8KfKEpnGY5jfggJQ3EjKuu8D4bJRr0y+cYJFmYbImXGw==
|
||||||
|
dependencies:
|
||||||
|
os-tmpdir "~1.0.2"
|
||||||
|
|
||||||
|
tslib@^1.9.0:
|
||||||
|
version "1.14.1"
|
||||||
|
resolved "https://mirrors.tencent.com/npm/tslib/-/tslib-1.14.1.tgz#cf2d38bdc34a134bcaf1091c41f6619e2f672d00"
|
||||||
|
integrity sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg==
|
||||||
|
|
||||||
|
type-fest@^0.11.0:
|
||||||
|
version "0.11.0"
|
||||||
|
resolved "http://mirrors.cloud.tencent.com/npm/type-fest/-/type-fest-0.11.0.tgz#97abf0872310fed88a5c466b25681576145e33f1"
|
||||||
|
integrity sha512-OdjXJxnCN1AvyLSzeKIgXTXxV+99ZuXl3Hpo9XpJAv9MBcHrrJOQ5kV7ypXOuQie+AmWG25hLbiKdwYTifzcfQ==
|
Loading…
Reference in New Issue
Block a user