├── .all-contributorsrc
├── .github
└── workflows
│ └── publish.yml
├── .gitignore
├── LICENSE.md
├── README.md
├── bin
├── handler.js
├── index.js
└── utils.js
├── lib
├── handler.ts
├── index.ts
└── utils.ts
├── logo.svg
├── package-lock.json
├── package.json
├── site
├── Bold.otf
├── api.json
├── index.html
└── style.css
└── tsconfig.json
/.all-contributorsrc:
--------------------------------------------------------------------------------
1 | {
2 | "files": [
3 | "README.md"
4 | ],
5 | "imageSize": 100,
6 | "commit": false,
7 | "contributors": [
8 | {
9 | "login": "thedarkrai07",
10 | "name": "Darkrai.07",
11 | "avatar_url": "https://avatars.githubusercontent.com/u/105098416?v=4",
12 | "profile": "https://github.com/thedarkrai07",
13 | "contributions": [
14 | "code"
15 | ]
16 | }
17 | ],
18 | "contributorsPerLine": 7,
19 | "projectName": "cli",
20 | "projectOwner": "create-anchor-app",
21 | "repoType": "github",
22 | "repoHost": "https://github.com",
23 | "skipCi": true
24 | }
25 |
--------------------------------------------------------------------------------
/.github/workflows/publish.yml:
--------------------------------------------------------------------------------
1 | name: deploy to prod
2 |
3 | on:
4 | push:
5 | branches: [master]
6 |
7 | jobs:
8 | deploy:
9 | runs-on: ubuntu-latest
10 |
11 | steps:
12 | - name: Checkout
13 | uses: actions/checkout@v2
14 |
15 | - name: Use Node 16
16 | uses: actions/setup-node@v1
17 | with:
18 | node-version: 16.x
19 |
20 | - name: Install vercel
21 | run: npm i vercel -g
22 |
23 |
24 |
25 | - name: Build
26 | run: npm install && npm run build
27 |
28 |
29 | - name: Deploy API
30 | run: vercel --prod --token $VERCEL_TOKEN
31 | env:
32 | VERCEL_TOKEN: ${{ secrets.VERCEL_TOKEN }}
33 | VERCEL_ORG_ID: ${{ secrets.VERCEL_ORG }}
34 | VERCEL_PROJECT_ID: ${{ secrets.VERCEL_PROJ }}
35 |
36 |
37 | - name: Version
38 | uses: "phips28/gh-action-bump-version@master"
39 | env:
40 | GITHUB_TOKEN: ${{ secrets.GH_TOKEN }}
41 |
42 | - name: Publish
43 | run: echo "//registry.npmjs.org/:_authToken=$NPM_AUTH_TOKEN" > ~/.npmrc && npm publish --access public
44 | env:
45 | NPM_AUTH_TOKEN: ${{ secrets.NPM_TOKEN }}
46 |
47 | publish-gpr:
48 | needs: deploy
49 | runs-on: ubuntu-latest
50 | permissions:
51 | contents: read
52 | packages: write
53 | steps:
54 | - uses: actions/checkout@v3
55 | - uses: actions/setup-node@v3
56 | with:
57 | node-version: 16
58 | registry-url: https://npm.pkg.github.com/
59 | - run: npm install && npm run build
60 | - run: npm publish
61 | env:
62 | NODE_AUTH_TOKEN: ${{secrets.GH_TOKEN}}
--------------------------------------------------------------------------------
/.gitignore:
--------------------------------------------------------------------------------
1 | node_modules
2 | .DS_Store
3 | .vercel
4 | bin/api.json
--------------------------------------------------------------------------------
/LICENSE.md:
--------------------------------------------------------------------------------
1 | Copyright (c) 2012-2022 Scott Chacon and others
2 |
3 | Permission is hereby granted, free of charge, to any person obtaining
4 | a copy of this software and associated documentation files (the
5 | "Software"), to deal in the Software without restriction, including
6 | without limitation the rights to use, copy, modify, merge, publish,
7 | distribute, sublicense, and/or sell copies of the Software, and to
8 | permit persons to whom the Software is furnished to do so, subject to
9 | the following conditions:
10 |
11 | The above copyright notice and this permission notice shall be
12 | included in all copies or substantial portions of the Software.
13 |
14 | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
15 | EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
16 | MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
17 | NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
18 | LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
19 | OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
20 | WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
--------------------------------------------------------------------------------
/README.md:
--------------------------------------------------------------------------------
1 | # Create Anchor App
2 |
3 | [](#contributors-)
4 |
5 |
6 |
7 |
8 | Quickly create an anchor program from templates and setup anchor dev environment.
9 |
10 |
11 | ## Example
12 |
13 |
14 | ## Installation
15 | ```
16 | npm i -g @create-anchor-app/cli
17 | ```
18 |
19 | ## Usage
20 | ```
21 | create-anchor-app
22 | ```
23 | Use without installing
24 | ```
25 | npx @create-anchor-app/cli
26 | ```
27 |
28 | ## Feature roadmap
29 | - [x] Command to generate anchor contracts
30 | - [ ] CI for Anchor projects
31 | - [ ] Security.txt generation
32 | - [ ] local ledger directory
33 |
34 | - [ ] local wallet generation and directory
35 |
36 |
37 | ## Contributors ✨
38 |
39 | Thanks goes to these wonderful people ([emoji key](https://allcontributors.org/docs/en/emoji-key)):
40 |
41 |
42 |
43 |
44 |
49 |
50 |
51 |
52 |
53 |
54 |
55 | This project follows the [all-contributors](https://github.com/all-contributors/all-contributors) specification. Contributions of any kind welcome!
56 |
--------------------------------------------------------------------------------
/bin/handler.js:
--------------------------------------------------------------------------------
1 | "use strict";
2 | var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
3 | function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
4 | return new (P || (P = Promise))(function (resolve, reject) {
5 | function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
6 | function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
7 | function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
8 | step((generator = generator.apply(thisArg, _arguments || [])).next());
9 | });
10 | };
11 | var __generator = (this && this.__generator) || function (thisArg, body) {
12 | var _ = { label: 0, sent: function() { if (t[0] & 1) throw t[1]; return t[1]; }, trys: [], ops: [] }, f, y, t, g;
13 | return g = { next: verb(0), "throw": verb(1), "return": verb(2) }, typeof Symbol === "function" && (g[Symbol.iterator] = function() { return this; }), g;
14 | function verb(n) { return function (v) { return step([n, v]); }; }
15 | function step(op) {
16 | if (f) throw new TypeError("Generator is already executing.");
17 | while (_) try {
18 | if (f = 1, y && (t = op[0] & 2 ? y["return"] : op[0] ? y["throw"] || ((t = y["return"]) && t.call(y), 0) : y.next) && !(t = t.call(y, op[1])).done) return t;
19 | if (y = 0, t) op = [op[0] & 2, t.value];
20 | switch (op[0]) {
21 | case 0: case 1: t = op; break;
22 | case 4: _.label++; return { value: op[1], done: false };
23 | case 5: _.label++; y = op[1]; op = [0]; continue;
24 | case 7: op = _.ops.pop(); _.trys.pop(); continue;
25 | default:
26 | if (!(t = _.trys, t = t.length > 0 && t[t.length - 1]) && (op[0] === 6 || op[0] === 2)) { _ = 0; continue; }
27 | if (op[0] === 3 && (!t || (op[1] > t[0] && op[1] < t[3]))) { _.label = op[1]; break; }
28 | if (op[0] === 6 && _.label < t[1]) { _.label = t[1]; t = op; break; }
29 | if (t && _.label < t[2]) { _.label = t[2]; _.ops.push(op); break; }
30 | if (t[2]) _.ops.pop();
31 | _.trys.pop(); continue;
32 | }
33 | op = body.call(thisArg, _);
34 | } catch (e) { op = [6, e]; y = 0; } finally { f = t = 0; }
35 | if (op[0] & 5) throw op[1]; return { value: op[0] ? op[1] : void 0, done: true };
36 | }
37 | };
38 | var __importDefault = (this && this.__importDefault) || function (mod) {
39 | return (mod && mod.__esModule) ? mod : { "default": mod };
40 | };
41 | Object.defineProperty(exports, "__esModule", { value: true });
42 | exports.handler = void 0;
43 | var path_1 = __importDefault(require("path"));
44 | var child_process_1 = require("child_process");
45 | var inquirer_1 = __importDefault(require("inquirer"));
46 | var chalk_1 = __importDefault(require("chalk"));
47 | var fs_1 = __importDefault(require("fs"));
48 | var node_fetch_1 = __importDefault(require("node-fetch"));
49 | var node_stream_zip_1 = __importDefault(require("node-stream-zip"));
50 | function handler(template, name, setupCI) {
51 | return __awaiter(this, void 0, void 0, function () {
52 | var examples;
53 | var _this = this;
54 | return __generator(this, function (_a) {
55 | console.clear();
56 | examples = require(path_1.default.resolve(__dirname, "api.json"));
57 | console.log(chalk_1.default.gray("Template: "), chalk_1.default.green(template));
58 | console.log(chalk_1.default.gray("App name: "), chalk_1.default.green(name));
59 | console.log(chalk_1.default.gray("Setup CI: "), chalk_1.default.green(setupCI ? 'Yes' : 'No'));
60 | inquirer_1.default
61 | .prompt([
62 | {
63 | type: "confirm",
64 | name: "confirm",
65 | message: "Proceed?",
66 | default: true,
67 | },
68 | ])
69 | .then(function (answers) { return __awaiter(_this, void 0, void 0, function () {
70 | var start, pathname, ex, startCommand, file_1, fileStream_1;
71 | var _this = this;
72 | return __generator(this, function (_a) {
73 | switch (_a.label) {
74 | case 0:
75 | if (!answers.confirm) return [3 /*break*/, 7];
76 | console.clear();
77 | start = new Date();
78 | pathname = "".concat(path_1.default.resolve("./"), "/").concat(name);
79 | if (!fs_1.default.existsSync(pathname)) return [3 /*break*/, 2];
80 | console.log(chalk_1.default.gray("Directory already exists: ".concat(pathname)));
81 | return [4 /*yield*/, inquirer_1.default
82 | .prompt([
83 | {
84 | type: "confirm",
85 | name: "confirm",
86 | message: "Overwrite?",
87 | default: false,
88 | },
89 | ])
90 | .then(function (answers) { return __awaiter(_this, void 0, void 0, function () {
91 | return __generator(this, function (_a) {
92 | if (!answers.confirm) {
93 | process.exit(1);
94 | }
95 | return [2 /*return*/];
96 | });
97 | }); })];
98 | case 1:
99 | _a.sent();
100 | _a.label = 2;
101 | case 2:
102 | ex = examples[template];
103 | console.log(chalk_1.default.gray("Setting up..."));
104 | console.log(chalk_1.default.gray("Cloning repo..."));
105 | return [4 /*yield*/, download(ex.repo, pathname, name)];
106 | case 3:
107 | _a.sent();
108 | console.clear();
109 | console.log(chalk_1.default.gray("Setting up..."));
110 | console.log(chalk_1.default.gray("Installing Dependencies..."));
111 | (0, child_process_1.execSync)("cd ".concat(pathname, " && ").concat(ex.install, " --force && git init"), {
112 | stdio: [1],
113 | });
114 | console.clear();
115 | console.log("Done in ".concat((new Date().getTime() - start.getTime()) / 1000, "s \u2728 "));
116 | startCommand = ex.run;
117 | if (ex.guide !== undefined && ex.guide !== "") {
118 | console.log("Find accompanying tutorial at ".concat(chalk_1.default.green(ex.guide)));
119 | }
120 | if (ex.docs !== undefined && ex.docs !== "") {
121 | console.log("Check out docs at ".concat(chalk_1.default.green(ex.docs)));
122 | }
123 | if (startCommand !== undefined && startCommand !== "") {
124 | console.log("run `" +
125 | chalk_1.default.green("cd ".concat(name).concat(startCommand ? " && " + startCommand : "")) +
126 | "` to get started");
127 | }
128 | if (!setupCI) return [3 /*break*/, 6];
129 | (0, child_process_1.execSync)("mkdir -p ".concat(pathname, "/.github/workflows"), { stdio: [1] });
130 | console.log(chalk_1.default.gray("Setting up..."));
131 | console.log(chalk_1.default.grey('Setting up CI for the project...'));
132 | return [4 /*yield*/, (0, node_fetch_1.default)('https://gist.githubusercontent.com/anoushk1234/0f86460f08821bdbbdb03a3f56681928/raw/995c7d1a221546cadef7fa47131eef1a57001706/tests.yml')];
133 | case 4:
134 | file_1 = _a.sent();
135 | fileStream_1 = fs_1.default.createWriteStream("".concat(pathname, "/.github/workflows/ci.yml"));
136 | return [4 /*yield*/, new Promise(function (resolve, reject) {
137 | file_1.body.pipe(fileStream_1);
138 | file_1.body.on("error", reject);
139 | fileStream_1.on("finish", resolve);
140 | })];
141 | case 5:
142 | _a.sent();
143 | _a.label = 6;
144 | case 6: return [3 /*break*/, 8];
145 | case 7:
146 | console.log(chalk_1.default.red("Operation cancelled by user"));
147 | _a.label = 8;
148 | case 8: return [2 /*return*/];
149 | }
150 | });
151 | }); })
152 | .catch(function (err) {
153 | console.clear();
154 | if (err.command) {
155 | console.log("".concat(chalk_1.default.cyan(err.command), " has failed."));
156 | }
157 | else {
158 | console.log(chalk_1.default.red("Unexpected error. Please report it as a bug:"));
159 | console.log(err.message);
160 | }
161 | });
162 | return [2 /*return*/];
163 | });
164 | });
165 | }
166 | exports.handler = handler;
167 | function download(repo, path, name) {
168 | return __awaiter(this, void 0, void 0, function () {
169 | var branch, res, fileStream, zip;
170 | return __generator(this, function (_a) {
171 | switch (_a.label) {
172 | case 0:
173 | branch = "master";
174 | return [4 /*yield*/, (0, node_fetch_1.default)("https://codeload.github.com/create-anchor-app/".concat(repo, "/zip/refs/heads/master"))];
175 | case 1:
176 | res = (_a.sent());
177 | if (!(res.status !== 200)) return [3 /*break*/, 3];
178 | return [4 /*yield*/, (0, node_fetch_1.default)("https://codeload.github.com/create-anchor-app/".concat(repo, "/zip/refs/heads/main"))];
179 | case 2:
180 | res = (_a.sent());
181 | branch = "main";
182 | _a.label = 3;
183 | case 3:
184 | console.log(chalk_1.default.gray(res.statusText));
185 | fileStream = fs_1.default.createWriteStream("".concat(__dirname, "/").concat(name, ".zip"));
186 | return [4 /*yield*/, new Promise(function (resolve, reject) {
187 | res.body.pipe(fileStream);
188 | res.body.on("error", reject);
189 | fileStream.on("finish", resolve);
190 | })];
191 | case 4:
192 | _a.sent();
193 | fs_1.default.mkdirSync(path);
194 | zip = new node_stream_zip_1.default.async({ file: "".concat(__dirname, "/").concat(name, ".zip") });
195 | return [4 /*yield*/, zip.extract("".concat(repo, "-").concat(branch), path)];
196 | case 5:
197 | _a.sent();
198 | console.log(chalk_1.default.gray("Done"));
199 | return [4 /*yield*/, zip.close()];
200 | case 6:
201 | _a.sent();
202 | fs_1.default.unlinkSync("".concat(__dirname, "/").concat(name, ".zip"));
203 | return [2 /*return*/];
204 | }
205 | });
206 | });
207 | }
208 |
--------------------------------------------------------------------------------
/bin/index.js:
--------------------------------------------------------------------------------
1 | #! /usr/bin/env node
2 | "use strict";
3 | var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
4 | function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
5 | return new (P || (P = Promise))(function (resolve, reject) {
6 | function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
7 | function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
8 | function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
9 | step((generator = generator.apply(thisArg, _arguments || [])).next());
10 | });
11 | };
12 | var __generator = (this && this.__generator) || function (thisArg, body) {
13 | var _ = { label: 0, sent: function() { if (t[0] & 1) throw t[1]; return t[1]; }, trys: [], ops: [] }, f, y, t, g;
14 | return g = { next: verb(0), "throw": verb(1), "return": verb(2) }, typeof Symbol === "function" && (g[Symbol.iterator] = function() { return this; }), g;
15 | function verb(n) { return function (v) { return step([n, v]); }; }
16 | function step(op) {
17 | if (f) throw new TypeError("Generator is already executing.");
18 | while (_) try {
19 | if (f = 1, y && (t = op[0] & 2 ? y["return"] : op[0] ? y["throw"] || ((t = y["return"]) && t.call(y), 0) : y.next) && !(t = t.call(y, op[1])).done) return t;
20 | if (y = 0, t) op = [op[0] & 2, t.value];
21 | switch (op[0]) {
22 | case 0: case 1: t = op; break;
23 | case 4: _.label++; return { value: op[1], done: false };
24 | case 5: _.label++; y = op[1]; op = [0]; continue;
25 | case 7: op = _.ops.pop(); _.trys.pop(); continue;
26 | default:
27 | if (!(t = _.trys, t = t.length > 0 && t[t.length - 1]) && (op[0] === 6 || op[0] === 2)) { _ = 0; continue; }
28 | if (op[0] === 3 && (!t || (op[1] > t[0] && op[1] < t[3]))) { _.label = op[1]; break; }
29 | if (op[0] === 6 && _.label < t[1]) { _.label = t[1]; t = op; break; }
30 | if (t && _.label < t[2]) { _.label = t[2]; _.ops.push(op); break; }
31 | if (t[2]) _.ops.pop();
32 | _.trys.pop(); continue;
33 | }
34 | op = body.call(thisArg, _);
35 | } catch (e) { op = [6, e]; y = 0; } finally { f = t = 0; }
36 | if (op[0] & 5) throw op[1]; return { value: op[0] ? op[1] : void 0, done: true };
37 | }
38 | };
39 | var __importDefault = (this && this.__importDefault) || function (mod) {
40 | return (mod && mod.__esModule) ? mod : { "default": mod };
41 | };
42 | Object.defineProperty(exports, "__esModule", { value: true });
43 | var fs_1 = require("fs");
44 | var node_fetch_1 = __importDefault(require("node-fetch"));
45 | var handler_1 = require("./handler");
46 | var path_1 = __importDefault(require("path"));
47 | var chalk_1 = __importDefault(require("chalk"));
48 | var utils_1 = require("./utils");
49 | var args = process.argv.slice(2);
50 | var supportedCommands = ["-v", "--version", "-h", "--help"];
51 | console.clear();
52 | (function () { return __awaiter(void 0, void 0, void 0, function () {
53 | var filePath, res, _a, _b, _c, examples, exampleName, _d, answer, _e, setupCI, _f, err_1;
54 | return __generator(this, function (_g) {
55 | switch (_g.label) {
56 | case 0:
57 | _g.trys.push([0, 11, , 12]);
58 | filePath = path_1.default.resolve(__dirname, "api.json");
59 | return [4 /*yield*/, (0, node_fetch_1.default)("https://create-anchor-app.vercel.app/api.json")];
60 | case 1:
61 | res = _g.sent();
62 | _b = (_a = fs_1.promises).writeFile;
63 | _c = [filePath];
64 | return [4 /*yield*/, res.text()];
65 | case 2: return [4 /*yield*/, _b.apply(_a, _c.concat([_g.sent()]))];
66 | case 3:
67 | _g.sent();
68 | examples = require(filePath);
69 | if (args.length) {
70 | if (supportedCommands.includes(args[0])) {
71 | (0, utils_1.flags)(args[0]);
72 | }
73 | if (!Object.keys(examples).includes(args[0])) {
74 | (0, utils_1.flags)(args[0]);
75 | }
76 | if (args.length > 2 && args.filter(function (x) { return !supportedCommands.includes(x); }).length > 0) {
77 | console.log(chalk_1.default.red("Unexpected flag(s) :", args.join(" ")));
78 | process.exit(1);
79 | }
80 | }
81 | _d = args[0];
82 | if (_d) return [3 /*break*/, 5];
83 | return [4 /*yield*/, (0, utils_1.whatAreYouBuilding)(examples)];
84 | case 4:
85 | _d = (_g.sent());
86 | _g.label = 5;
87 | case 5:
88 | exampleName = _d;
89 | _e = args[1];
90 | if (_e) return [3 /*break*/, 7];
91 | return [4 /*yield*/, (0, utils_1.chooseName)()];
92 | case 6:
93 | _e = (_g.sent());
94 | _g.label = 7;
95 | case 7:
96 | answer = _e;
97 | _f = args[2];
98 | if (_f) return [3 /*break*/, 9];
99 | return [4 /*yield*/, (0, utils_1.shouldSetupCI)()];
100 | case 8:
101 | _f = (_g.sent());
102 | _g.label = 9;
103 | case 9:
104 | setupCI = _f;
105 | return [4 /*yield*/, (0, handler_1.handler)(exampleName, answer, setupCI)];
106 | case 10:
107 | _g.sent();
108 | return [3 /*break*/, 12];
109 | case 11:
110 | err_1 = _g.sent();
111 | console.log(chalk_1.default.red("Error fetching latest examples: ".concat(err_1.message)));
112 | process.exit(1);
113 | return [3 /*break*/, 12];
114 | case 12:
115 | ;
116 | return [2 /*return*/];
117 | }
118 | });
119 | }); })();
120 |
--------------------------------------------------------------------------------
/bin/utils.js:
--------------------------------------------------------------------------------
1 | "use strict";
2 | var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
3 | function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
4 | return new (P || (P = Promise))(function (resolve, reject) {
5 | function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
6 | function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
7 | function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
8 | step((generator = generator.apply(thisArg, _arguments || [])).next());
9 | });
10 | };
11 | var __generator = (this && this.__generator) || function (thisArg, body) {
12 | var _ = { label: 0, sent: function() { if (t[0] & 1) throw t[1]; return t[1]; }, trys: [], ops: [] }, f, y, t, g;
13 | return g = { next: verb(0), "throw": verb(1), "return": verb(2) }, typeof Symbol === "function" && (g[Symbol.iterator] = function() { return this; }), g;
14 | function verb(n) { return function (v) { return step([n, v]); }; }
15 | function step(op) {
16 | if (f) throw new TypeError("Generator is already executing.");
17 | while (_) try {
18 | if (f = 1, y && (t = op[0] & 2 ? y["return"] : op[0] ? y["throw"] || ((t = y["return"]) && t.call(y), 0) : y.next) && !(t = t.call(y, op[1])).done) return t;
19 | if (y = 0, t) op = [op[0] & 2, t.value];
20 | switch (op[0]) {
21 | case 0: case 1: t = op; break;
22 | case 4: _.label++; return { value: op[1], done: false };
23 | case 5: _.label++; y = op[1]; op = [0]; continue;
24 | case 7: op = _.ops.pop(); _.trys.pop(); continue;
25 | default:
26 | if (!(t = _.trys, t = t.length > 0 && t[t.length - 1]) && (op[0] === 6 || op[0] === 2)) { _ = 0; continue; }
27 | if (op[0] === 3 && (!t || (op[1] > t[0] && op[1] < t[3]))) { _.label = op[1]; break; }
28 | if (op[0] === 6 && _.label < t[1]) { _.label = t[1]; t = op; break; }
29 | if (t && _.label < t[2]) { _.label = t[2]; _.ops.push(op); break; }
30 | if (t[2]) _.ops.pop();
31 | _.trys.pop(); continue;
32 | }
33 | op = body.call(thisArg, _);
34 | } catch (e) { op = [6, e]; y = 0; } finally { f = t = 0; }
35 | if (op[0] & 5) throw op[1]; return { value: op[0] ? op[1] : void 0, done: true };
36 | }
37 | };
38 | var __importDefault = (this && this.__importDefault) || function (mod) {
39 | return (mod && mod.__esModule) ? mod : { "default": mod };
40 | };
41 | Object.defineProperty(exports, "__esModule", { value: true });
42 | exports.shouldSetupCI = exports.whatAreYouBuilding = exports.chooseName = exports.flags = void 0;
43 | var chalk_1 = __importDefault(require("chalk"));
44 | var inquirer_1 = __importDefault(require("inquirer"));
45 | var project_name_generator_1 = __importDefault(require("project-name-generator"));
46 | var path_1 = __importDefault(require("path"));
47 | function flags(flag) {
48 | switch (flag) {
49 | case "-h" || "--help":
50 | console.log("Please visit ".concat(chalk_1.default.cyan("https://github.com/create-anchor-app/cli#readme"), " to know more about the usage of this CLI."));
51 | break;
52 | case "-v" || "--version":
53 | console.log("".concat(chalk_1.default.cyan("create-anchor-app"), " ").concat(chalk_1.default.green(require(path_1.default.resolve(__dirname, "../package.json")).version)));
54 | break;
55 | default:
56 | console.log(chalk_1.default.red("Unexpected flag or project type:", flag));
57 | }
58 | process.exit(1);
59 | }
60 | exports.flags = flags;
61 | function chooseName() {
62 | return __awaiter(this, void 0, void 0, function () {
63 | var answer;
64 | return __generator(this, function (_a) {
65 | switch (_a.label) {
66 | case 0: return [4 /*yield*/, inquirer_1.default
67 | .prompt([
68 | {
69 | type: "input",
70 | name: "name",
71 | message: "Name of the app?",
72 | default: (0, project_name_generator_1.default)().dashed,
73 | },
74 | ]).catch(function (err) {
75 | console.log(chalk_1.default.red("Unexpected error:", err));
76 | process.exit(1);
77 | })];
78 | case 1:
79 | answer = _a.sent();
80 | return [2 /*return*/, answer.name];
81 | }
82 | });
83 | });
84 | }
85 | exports.chooseName = chooseName;
86 | var whatAreYouBuilding = function (examples) { return __awaiter(void 0, void 0, void 0, function () {
87 | var answer;
88 | return __generator(this, function (_a) {
89 | switch (_a.label) {
90 | case 0: return [4 /*yield*/, inquirer_1.default
91 | .prompt([
92 | {
93 | type: "list",
94 | name: "example",
95 | message: "What are you building today?",
96 | choices: Object.keys(examples),
97 | },
98 | ]).catch(function (err) {
99 | console.log(chalk_1.default.red("Unexpected error:", err));
100 | process.exit(1);
101 | })];
102 | case 1:
103 | answer = _a.sent();
104 | return [2 /*return*/, answer.example];
105 | }
106 | });
107 | }); };
108 | exports.whatAreYouBuilding = whatAreYouBuilding;
109 | var shouldSetupCI = function () { return __awaiter(void 0, void 0, void 0, function () {
110 | var answer;
111 | return __generator(this, function (_a) {
112 | switch (_a.label) {
113 | case 0: return [4 /*yield*/, inquirer_1.default
114 | .prompt([
115 | {
116 | type: "confirm",
117 | name: "example",
118 | message: "Do you want to setup CI?",
119 | default: true,
120 | },
121 | ]).catch(function (err) {
122 | console.log(chalk_1.default.red("Unexpected error:", err));
123 | process.exit(1);
124 | })];
125 | case 1:
126 | answer = _a.sent();
127 | return [2 /*return*/, answer.example];
128 | }
129 | });
130 | }); };
131 | exports.shouldSetupCI = shouldSetupCI;
132 |
--------------------------------------------------------------------------------
/lib/handler.ts:
--------------------------------------------------------------------------------
1 | import path from "path";
2 | import { execSync } from "child_process";
3 | import inquirer from "inquirer";
4 | import chalk from "chalk";
5 | import fs from "fs";
6 | import fetch from "node-fetch";
7 | import zipper from "node-stream-zip";
8 |
9 | export async function handler(template: string, name: string, setupCI: boolean) {
10 | console.clear();
11 | const examples = require(path.resolve(__dirname, "api.json"));
12 | console.log(chalk.gray("Template: "), chalk.green(template));
13 | console.log(chalk.gray("App name: "), chalk.green(name));
14 | console.log(chalk.gray("Setup CI: "), chalk.green(setupCI ? 'Yes' : 'No'));
15 | inquirer
16 | .prompt([
17 | {
18 | type: "confirm",
19 | name: "confirm",
20 | message: "Proceed?",
21 | default: true,
22 | },
23 | ])
24 | .then(async (answers) => {
25 | if (answers.confirm) {
26 | console.clear();
27 | var start = new Date();
28 | const pathname = `${path.resolve("./")}/${name}`;
29 | if (fs.existsSync(pathname)) {
30 | console.log(chalk.gray(`Directory already exists: ${pathname}`));
31 | await inquirer
32 | .prompt([
33 | {
34 | type: "confirm",
35 | name: "confirm",
36 | message: "Overwrite?",
37 | default: false,
38 | },
39 | ])
40 | .then(async (answers) => {
41 | if (!answers.confirm) {
42 | process.exit(1);
43 | }
44 | });
45 | }
46 | const ex = examples[template];
47 | console.log(chalk.gray("Setting up..."));
48 | console.log(chalk.gray("Cloning repo..."));
49 | await download(ex.repo, pathname, name);
50 | console.clear();
51 | console.log(chalk.gray("Setting up..."));
52 | console.log(chalk.gray("Installing Dependencies..."));
53 | execSync(`cd ${pathname} && ${ex.install} --force && git init`, {
54 | stdio: [1],
55 | });
56 | console.clear();
57 | console.log(
58 | `Done in ${(new Date().getTime() - start.getTime()) / 1000}s ✨ `
59 | );
60 | const startCommand = ex.run;
61 |
62 | if (ex.guide !== undefined && ex.guide !== "") {
63 | console.log(`Find accompanying tutorial at ${chalk.green(ex.guide)}`);
64 | }
65 | if (ex.docs !== undefined && ex.docs !== "") {
66 | console.log(`Check out docs at ${chalk.green(ex.docs)}`);
67 | }
68 | if (startCommand !== undefined && startCommand !== "") {
69 | console.log(
70 | "run `" +
71 | chalk.green(
72 | `cd ${name}${startCommand ? " && " + startCommand : ""}`
73 | ) +
74 | "` to get started"
75 | );
76 | }
77 | if (setupCI) {
78 | execSync(`mkdir -p ${pathname}/.github/workflows`, { stdio: [1] });
79 | console.log(chalk.gray("Setting up..."));
80 | console.log(chalk.grey('Setting up CI for the project...'))
81 |
82 | const file = await fetch('https://gist.githubusercontent.com/anoushk1234/0f86460f08821bdbbdb03a3f56681928/raw/995c7d1a221546cadef7fa47131eef1a57001706/tests.yml');
83 | const fileStream = fs.createWriteStream(`${pathname}/.github/workflows/ci.yml`);
84 |
85 | await new Promise((resolve, reject) => {
86 | file.body.pipe(fileStream);
87 | file.body.on("error", reject);
88 | fileStream.on("finish", resolve);
89 | });
90 | }
91 | } else {
92 | console.log(chalk.red("Operation cancelled by user"));
93 | }
94 | })
95 | .catch((err) => {
96 | console.clear();
97 | if (err.command) {
98 | console.log(`${chalk.cyan(err.command)} has failed.`);
99 | } else {
100 | console.log(chalk.red("Unexpected error. Please report it as a bug:"));
101 | console.log(err.message);
102 | }
103 | });
104 | }
105 | async function download(repo: string, path: string, name: string) {
106 | let branch: string = "master";
107 | let res = (await fetch(
108 | `https://codeload.github.com/create-anchor-app/${repo}/zip/refs/heads/master`
109 | )) as any;
110 | if (res.status !== 200) {
111 | res = (await fetch(
112 | `https://codeload.github.com/create-anchor-app/${repo}/zip/refs/heads/main`
113 | )) as any;
114 | branch = "main";
115 | }
116 | console.log(chalk.gray(res.statusText));
117 | const fileStream = fs.createWriteStream(`${__dirname}/${name}.zip`);
118 | await new Promise((resolve, reject) => {
119 | res.body.pipe(fileStream);
120 | res.body.on("error", reject);
121 | fileStream.on("finish", resolve);
122 | });
123 |
124 | fs.mkdirSync(path);
125 | const zip = new zipper.async({ file: `${__dirname}/${name}.zip` });
126 | await zip.extract(`${repo}-${branch}`, path);
127 | console.log(chalk.gray("Done"));
128 | await zip.close();
129 | fs.unlinkSync(`${__dirname}/${name}.zip`);
130 | }
131 |
--------------------------------------------------------------------------------
/lib/index.ts:
--------------------------------------------------------------------------------
1 | #! /usr/bin/env node
2 |
3 | "use strict";
4 | import inquirer from "inquirer";
5 | import { promises } from "fs";
6 | import fetch from "node-fetch";
7 | import { handler } from "./handler";
8 | import path from "path";
9 | import chalk from "chalk";
10 |
11 | import { chooseName, flags, shouldSetupCI, whatAreYouBuilding } from "./utils";
12 |
13 | const args = process.argv.slice(2);
14 | const supportedCommands: string[] = ["-v", "--version", "-h", "--help"];
15 |
16 | console.clear();
17 |
18 |
19 | (async () => {
20 | try {
21 | const filePath = path.resolve(__dirname, "api.json");
22 | const res = await fetch("https://create-anchor-app.vercel.app/api.json")
23 |
24 | await promises.writeFile(filePath, await res.text());
25 | const examples = require(filePath);
26 |
27 | if (args.length) {
28 | if (supportedCommands.includes(args[0])) {
29 | flags(args[0]);
30 | }
31 |
32 | if (!Object.keys(examples).includes(args[0])) {
33 | flags(args[0]);
34 | }
35 |
36 | if (args.length > 2 && args.filter((x) => !supportedCommands.includes(x)).length > 0) {
37 | console.log(chalk.red("Unexpected flag(s) :", args.join(" ")));
38 | process.exit(1);
39 | }
40 | }
41 |
42 | const exampleName = args[0] || await whatAreYouBuilding(examples);
43 | const answer = args[1] || await chooseName();
44 | const setupCI = args[2] || await shouldSetupCI();
45 |
46 | await handler(exampleName, answer, setupCI);
47 |
48 |
49 |
50 | } catch (err: any) {
51 | console.log(chalk.red(`Error fetching latest examples: ${err.message}`));
52 | process.exit(1);
53 | };
54 | })();
55 |
56 |
--------------------------------------------------------------------------------
/lib/utils.ts:
--------------------------------------------------------------------------------
1 | import chalk from "chalk";
2 | import inquirer from "inquirer";
3 | import generate from "project-name-generator";
4 | import path from "path";
5 |
6 | export function flags(flag: string) {
7 | switch (flag) {
8 | case "-h" || "--help":
9 | console.log(
10 | `Please visit ${chalk.cyan(
11 | "https://github.com/create-anchor-app/cli#readme"
12 | )} to know more about the usage of this CLI.`
13 | );
14 | break;
15 |
16 | case "-v" || "--version":
17 | console.log(
18 | `${chalk.cyan("create-anchor-app")} ${chalk.green(
19 | require(path.resolve(__dirname, "../package.json")).version
20 | )}`
21 | );
22 | break;
23 | default:
24 | console.log(chalk.red("Unexpected flag or project type:", flag));
25 | }
26 | process.exit(1);
27 | }
28 |
29 | export async function chooseName() {
30 | const answer = await inquirer
31 | .prompt([
32 | {
33 | type: "input",
34 | name: "name",
35 | message: "Name of the app?",
36 | default: generate().dashed,
37 | },
38 | ]).catch((err) => {
39 | console.log(chalk.red("Unexpected error:", err));
40 | process.exit(1);
41 | });
42 |
43 | return answer.name;
44 |
45 |
46 | }
47 |
48 |
49 |
50 | export const whatAreYouBuilding = async (examples: Object) => {
51 |
52 | const answer = await inquirer
53 | .prompt([
54 | {
55 | type: "list",
56 | name: "example",
57 | message: "What are you building today?",
58 | choices: Object.keys(examples),
59 | },
60 | ]).catch((err) => {
61 | console.log(chalk.red("Unexpected error:", err));
62 | process.exit(1);
63 | });
64 |
65 | return answer.example
66 |
67 | };
68 |
69 | export const shouldSetupCI = async () => {
70 |
71 | const answer = await inquirer
72 | .prompt([
73 | {
74 | type: "confirm",
75 | name: "example",
76 | message: "Do you want to setup CI?",
77 | default: true,
78 | },
79 | ]).catch((err) => {
80 | console.log(chalk.red("Unexpected error:", err));
81 | process.exit(1);
82 | });
83 |
84 | return answer.example
85 |
86 | };
--------------------------------------------------------------------------------
/logo.svg:
--------------------------------------------------------------------------------
1 |
9 |
--------------------------------------------------------------------------------
/package-lock.json:
--------------------------------------------------------------------------------
1 | {
2 | "name": "@create-anchor-app/cli",
3 | "version": "0.1.0",
4 | "lockfileVersion": 2,
5 | "requires": true,
6 | "packages": {
7 | "": {
8 | "name": "@create-anchor-app/cli",
9 | "version": "0.1.0",
10 | "license": "MIT",
11 | "dependencies": {
12 | "@types/project-name-generator": "^2.1.1",
13 | "chalk": "4.1.2",
14 | "inquirer": "^8.2.0",
15 | "node-fetch": "^2.6.7",
16 | "node-stream-zip": "^1.15.0",
17 | "project-name-generator": "^2.1.9"
18 | },
19 | "bin": {
20 | "create-anchor-app": "bin/index.js"
21 | },
22 | "devDependencies": {
23 | "@types/inquirer": "^8.2.0",
24 | "@types/node-fetch": "2",
25 | "@types/unzipper": "^0.10.5",
26 | "typescript": "^4.4.3"
27 | }
28 | },
29 | "node_modules/@types/inquirer": {
30 | "version": "8.2.0",
31 | "resolved": "https://registry.npmjs.org/@types/inquirer/-/inquirer-8.2.0.tgz",
32 | "integrity": "sha512-BNoMetRf3gmkpAlV5we+kxyZTle7YibdOntIZbU5pyIfMdcwy784KfeZDAcuyMznkh5OLa17RVXZOGA5LTlkgQ==",
33 | "dev": true,
34 | "dependencies": {
35 | "@types/through": "*",
36 | "rxjs": "^7.2.0"
37 | }
38 | },
39 | "node_modules/@types/node": {
40 | "version": "17.0.21",
41 | "resolved": "https://registry.npmjs.org/@types/node/-/node-17.0.21.tgz",
42 | "integrity": "sha512-DBZCJbhII3r90XbQxI8Y9IjjiiOGlZ0Hr32omXIZvwwZ7p4DMMXGrKXVyPfuoBOri9XNtL0UK69jYIBIsRX3QQ==",
43 | "dev": true
44 | },
45 | "node_modules/@types/node-fetch": {
46 | "version": "2.6.1",
47 | "resolved": "https://registry.npmjs.org/@types/node-fetch/-/node-fetch-2.6.1.tgz",
48 | "integrity": "sha512-oMqjURCaxoSIsHSr1E47QHzbmzNR5rK8McHuNb11BOM9cHcIK3Avy0s/b2JlXHoQGTYS3NsvWzV1M0iK7l0wbA==",
49 | "dev": true,
50 | "dependencies": {
51 | "@types/node": "*",
52 | "form-data": "^3.0.0"
53 | }
54 | },
55 | "node_modules/@types/project-name-generator": {
56 | "version": "2.1.1",
57 | "resolved": "https://registry.npmjs.org/@types/project-name-generator/-/project-name-generator-2.1.1.tgz",
58 | "integrity": "sha512-VLd5FEVTJs8hNa/WF4pZRcFvv0OAcIGeTyki4RDcaID0TUhTc5/Xe/btYM2XIHwVCb67ila8wUJYKJNa5dVABw=="
59 | },
60 | "node_modules/@types/through": {
61 | "version": "0.0.30",
62 | "resolved": "https://registry.npmjs.org/@types/through/-/through-0.0.30.tgz",
63 | "integrity": "sha512-FvnCJljyxhPM3gkRgWmxmDZyAQSiBQQWLI0A0VFL0K7W1oRUrPJSqNO0NvTnLkBcotdlp3lKvaT0JrnyRDkzOg==",
64 | "dev": true,
65 | "dependencies": {
66 | "@types/node": "*"
67 | }
68 | },
69 | "node_modules/@types/unzipper": {
70 | "version": "0.10.5",
71 | "resolved": "https://registry.npmjs.org/@types/unzipper/-/unzipper-0.10.5.tgz",
72 | "integrity": "sha512-NrLJb29AdnBARpg9S/4ktfPEisbJ0AvaaAr3j7Q1tg8AgcEUsq2HqbNzvgLRoWyRtjzeLEv7vuL39u1mrNIyNA==",
73 | "dev": true,
74 | "dependencies": {
75 | "@types/node": "*"
76 | }
77 | },
78 | "node_modules/ansi-escapes": {
79 | "version": "4.3.2",
80 | "resolved": "https://registry.npmjs.org/ansi-escapes/-/ansi-escapes-4.3.2.tgz",
81 | "integrity": "sha512-gKXj5ALrKWQLsYG9jlTRmR/xKluxHV+Z9QEwNIgCfM1/uwPMCuzVVnh5mwTd+OuBZcwSIMbqssNWRm1lE51QaQ==",
82 | "dependencies": {
83 | "type-fest": "^0.21.3"
84 | },
85 | "engines": {
86 | "node": ">=8"
87 | },
88 | "funding": {
89 | "url": "https://github.com/sponsors/sindresorhus"
90 | }
91 | },
92 | "node_modules/ansi-regex": {
93 | "version": "5.0.1",
94 | "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz",
95 | "integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==",
96 | "engines": {
97 | "node": ">=8"
98 | }
99 | },
100 | "node_modules/ansi-styles": {
101 | "version": "4.3.0",
102 | "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz",
103 | "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==",
104 | "dependencies": {
105 | "color-convert": "^2.0.1"
106 | },
107 | "engines": {
108 | "node": ">=8"
109 | },
110 | "funding": {
111 | "url": "https://github.com/chalk/ansi-styles?sponsor=1"
112 | }
113 | },
114 | "node_modules/asynckit": {
115 | "version": "0.4.0",
116 | "resolved": "https://registry.npmjs.org/asynckit/-/asynckit-0.4.0.tgz",
117 | "integrity": "sha1-x57Zf380y48robyXkLzDZkdLS3k=",
118 | "dev": true
119 | },
120 | "node_modules/base64-js": {
121 | "version": "1.5.1",
122 | "resolved": "https://registry.npmjs.org/base64-js/-/base64-js-1.5.1.tgz",
123 | "integrity": "sha512-AKpaYlHn8t4SVbOHCy+b5+KKgvR4vrsD8vbvrbiQJps7fKDTkjkDry6ji0rUJjC0kzbNePLwzxq8iypo41qeWA==",
124 | "funding": [
125 | {
126 | "type": "github",
127 | "url": "https://github.com/sponsors/feross"
128 | },
129 | {
130 | "type": "patreon",
131 | "url": "https://www.patreon.com/feross"
132 | },
133 | {
134 | "type": "consulting",
135 | "url": "https://feross.org/support"
136 | }
137 | ]
138 | },
139 | "node_modules/bl": {
140 | "version": "4.1.0",
141 | "resolved": "https://registry.npmjs.org/bl/-/bl-4.1.0.tgz",
142 | "integrity": "sha512-1W07cM9gS6DcLperZfFSj+bWLtaPGSOHWhPiGzXmvVJbRLdG82sH/Kn8EtW1VqWVA54AKf2h5k5BbnIbwF3h6w==",
143 | "dependencies": {
144 | "buffer": "^5.5.0",
145 | "inherits": "^2.0.4",
146 | "readable-stream": "^3.4.0"
147 | }
148 | },
149 | "node_modules/buffer": {
150 | "version": "5.7.1",
151 | "resolved": "https://registry.npmjs.org/buffer/-/buffer-5.7.1.tgz",
152 | "integrity": "sha512-EHcyIPBQ4BSGlvjB16k5KgAJ27CIsHY/2JBmCRReo48y9rQ3MaUzWX3KVlBa4U7MyX02HdVj0K7C3WaB3ju7FQ==",
153 | "funding": [
154 | {
155 | "type": "github",
156 | "url": "https://github.com/sponsors/feross"
157 | },
158 | {
159 | "type": "patreon",
160 | "url": "https://www.patreon.com/feross"
161 | },
162 | {
163 | "type": "consulting",
164 | "url": "https://feross.org/support"
165 | }
166 | ],
167 | "dependencies": {
168 | "base64-js": "^1.3.1",
169 | "ieee754": "^1.1.13"
170 | }
171 | },
172 | "node_modules/chalk": {
173 | "version": "4.1.2",
174 | "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz",
175 | "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==",
176 | "dependencies": {
177 | "ansi-styles": "^4.1.0",
178 | "supports-color": "^7.1.0"
179 | },
180 | "engines": {
181 | "node": ">=10"
182 | },
183 | "funding": {
184 | "url": "https://github.com/chalk/chalk?sponsor=1"
185 | }
186 | },
187 | "node_modules/chardet": {
188 | "version": "0.7.0",
189 | "resolved": "https://registry.npmjs.org/chardet/-/chardet-0.7.0.tgz",
190 | "integrity": "sha512-mT8iDcrh03qDGRRmoA2hmBJnxpllMR+0/0qlzjqZES6NdiWDcZkCNAk4rPFZ9Q85r27unkiNNg8ZOiwZXBHwcA=="
191 | },
192 | "node_modules/cli-cursor": {
193 | "version": "3.1.0",
194 | "resolved": "https://registry.npmjs.org/cli-cursor/-/cli-cursor-3.1.0.tgz",
195 | "integrity": "sha512-I/zHAwsKf9FqGoXM4WWRACob9+SNukZTd94DWF57E4toouRulbCxcUh6RKUEOQlYTHJnzkPMySvPNaaSLNfLZw==",
196 | "dependencies": {
197 | "restore-cursor": "^3.1.0"
198 | },
199 | "engines": {
200 | "node": ">=8"
201 | }
202 | },
203 | "node_modules/cli-spinners": {
204 | "version": "2.6.1",
205 | "resolved": "https://registry.npmjs.org/cli-spinners/-/cli-spinners-2.6.1.tgz",
206 | "integrity": "sha512-x/5fWmGMnbKQAaNwN+UZlV79qBLM9JFnJuJ03gIi5whrob0xV0ofNVHy9DhwGdsMJQc2OKv0oGmLzvaqvAVv+g==",
207 | "engines": {
208 | "node": ">=6"
209 | },
210 | "funding": {
211 | "url": "https://github.com/sponsors/sindresorhus"
212 | }
213 | },
214 | "node_modules/cli-width": {
215 | "version": "3.0.0",
216 | "resolved": "https://registry.npmjs.org/cli-width/-/cli-width-3.0.0.tgz",
217 | "integrity": "sha512-FxqpkPPwu1HjuN93Omfm4h8uIanXofW0RxVEW3k5RKx+mJJYSthzNhp32Kzxxy3YAEZ/Dc/EWN1vZRY0+kOhbw==",
218 | "engines": {
219 | "node": ">= 10"
220 | }
221 | },
222 | "node_modules/clone": {
223 | "version": "1.0.4",
224 | "resolved": "https://registry.npmjs.org/clone/-/clone-1.0.4.tgz",
225 | "integrity": "sha1-2jCcwmPfFZlMaIypAheco8fNfH4=",
226 | "engines": {
227 | "node": ">=0.8"
228 | }
229 | },
230 | "node_modules/color-convert": {
231 | "version": "2.0.1",
232 | "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz",
233 | "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==",
234 | "dependencies": {
235 | "color-name": "~1.1.4"
236 | },
237 | "engines": {
238 | "node": ">=7.0.0"
239 | }
240 | },
241 | "node_modules/color-name": {
242 | "version": "1.1.4",
243 | "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz",
244 | "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA=="
245 | },
246 | "node_modules/combined-stream": {
247 | "version": "1.0.8",
248 | "resolved": "https://registry.npmjs.org/combined-stream/-/combined-stream-1.0.8.tgz",
249 | "integrity": "sha512-FQN4MRfuJeHf7cBbBMJFXhKSDq+2kAArBlmRBvcvFE5BB1HZKXtSFASDhdlz9zOYwxh8lDdnvmMOe/+5cdoEdg==",
250 | "dev": true,
251 | "dependencies": {
252 | "delayed-stream": "~1.0.0"
253 | },
254 | "engines": {
255 | "node": ">= 0.8"
256 | }
257 | },
258 | "node_modules/commander": {
259 | "version": "6.2.1",
260 | "resolved": "https://registry.npmjs.org/commander/-/commander-6.2.1.tgz",
261 | "integrity": "sha512-U7VdrJFnJgo4xjrHpTzu0yrHPGImdsmD95ZlgYSEajAn2JKzDhDTPG9kBTefmObL2w/ngeZnilk+OV9CG3d7UA==",
262 | "engines": {
263 | "node": ">= 6"
264 | }
265 | },
266 | "node_modules/defaults": {
267 | "version": "1.0.3",
268 | "resolved": "https://registry.npmjs.org/defaults/-/defaults-1.0.3.tgz",
269 | "integrity": "sha1-xlYFHpgX2f8I7YgUd/P+QBnz730=",
270 | "dependencies": {
271 | "clone": "^1.0.2"
272 | }
273 | },
274 | "node_modules/delayed-stream": {
275 | "version": "1.0.0",
276 | "resolved": "https://registry.npmjs.org/delayed-stream/-/delayed-stream-1.0.0.tgz",
277 | "integrity": "sha1-3zrhmayt+31ECqrgsp4icrJOxhk=",
278 | "dev": true,
279 | "engines": {
280 | "node": ">=0.4.0"
281 | }
282 | },
283 | "node_modules/emoji-regex": {
284 | "version": "8.0.0",
285 | "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz",
286 | "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A=="
287 | },
288 | "node_modules/escape-string-regexp": {
289 | "version": "1.0.5",
290 | "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz",
291 | "integrity": "sha1-G2HAViGQqN/2rjuyzwIAyhMLhtQ=",
292 | "engines": {
293 | "node": ">=0.8.0"
294 | }
295 | },
296 | "node_modules/external-editor": {
297 | "version": "3.1.0",
298 | "resolved": "https://registry.npmjs.org/external-editor/-/external-editor-3.1.0.tgz",
299 | "integrity": "sha512-hMQ4CX1p1izmuLYyZqLMO/qGNw10wSv9QDCPfzXfyFrOaCSSoRfqE1Kf1s5an66J5JZC62NewG+mK49jOCtQew==",
300 | "dependencies": {
301 | "chardet": "^0.7.0",
302 | "iconv-lite": "^0.4.24",
303 | "tmp": "^0.0.33"
304 | },
305 | "engines": {
306 | "node": ">=4"
307 | }
308 | },
309 | "node_modules/figures": {
310 | "version": "3.2.0",
311 | "resolved": "https://registry.npmjs.org/figures/-/figures-3.2.0.tgz",
312 | "integrity": "sha512-yaduQFRKLXYOGgEn6AZau90j3ggSOyiqXU0F9JZfeXYhNa+Jk4X+s45A2zg5jns87GAFa34BBm2kXw4XpNcbdg==",
313 | "dependencies": {
314 | "escape-string-regexp": "^1.0.5"
315 | },
316 | "engines": {
317 | "node": ">=8"
318 | },
319 | "funding": {
320 | "url": "https://github.com/sponsors/sindresorhus"
321 | }
322 | },
323 | "node_modules/form-data": {
324 | "version": "3.0.1",
325 | "resolved": "https://registry.npmjs.org/form-data/-/form-data-3.0.1.tgz",
326 | "integrity": "sha512-RHkBKtLWUVwd7SqRIvCZMEvAMoGUp0XU+seQiZejj0COz3RI3hWP4sCv3gZWWLjJTd7rGwcsF5eKZGii0r/hbg==",
327 | "dev": true,
328 | "dependencies": {
329 | "asynckit": "^0.4.0",
330 | "combined-stream": "^1.0.8",
331 | "mime-types": "^2.1.12"
332 | },
333 | "engines": {
334 | "node": ">= 6"
335 | }
336 | },
337 | "node_modules/has-flag": {
338 | "version": "4.0.0",
339 | "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz",
340 | "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==",
341 | "engines": {
342 | "node": ">=8"
343 | }
344 | },
345 | "node_modules/iconv-lite": {
346 | "version": "0.4.24",
347 | "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.4.24.tgz",
348 | "integrity": "sha512-v3MXnZAcvnywkTUEZomIActle7RXXeedOR31wwl7VlyoXO4Qi9arvSenNQWne1TcRwhCL1HwLI21bEqdpj8/rA==",
349 | "dependencies": {
350 | "safer-buffer": ">= 2.1.2 < 3"
351 | },
352 | "engines": {
353 | "node": ">=0.10.0"
354 | }
355 | },
356 | "node_modules/ieee754": {
357 | "version": "1.2.1",
358 | "resolved": "https://registry.npmjs.org/ieee754/-/ieee754-1.2.1.tgz",
359 | "integrity": "sha512-dcyqhDvX1C46lXZcVqCpK+FtMRQVdIMN6/Df5js2zouUsqG7I6sFxitIC+7KYK29KdXOLHdu9zL4sFnoVQnqaA==",
360 | "funding": [
361 | {
362 | "type": "github",
363 | "url": "https://github.com/sponsors/feross"
364 | },
365 | {
366 | "type": "patreon",
367 | "url": "https://www.patreon.com/feross"
368 | },
369 | {
370 | "type": "consulting",
371 | "url": "https://feross.org/support"
372 | }
373 | ]
374 | },
375 | "node_modules/inherits": {
376 | "version": "2.0.4",
377 | "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.4.tgz",
378 | "integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ=="
379 | },
380 | "node_modules/inquirer": {
381 | "version": "8.2.0",
382 | "resolved": "https://registry.npmjs.org/inquirer/-/inquirer-8.2.0.tgz",
383 | "integrity": "sha512-0crLweprevJ02tTuA6ThpoAERAGyVILC4sS74uib58Xf/zSr1/ZWtmm7D5CI+bSQEaA04f0K7idaHpQbSWgiVQ==",
384 | "dependencies": {
385 | "ansi-escapes": "^4.2.1",
386 | "chalk": "^4.1.1",
387 | "cli-cursor": "^3.1.0",
388 | "cli-width": "^3.0.0",
389 | "external-editor": "^3.0.3",
390 | "figures": "^3.0.0",
391 | "lodash": "^4.17.21",
392 | "mute-stream": "0.0.8",
393 | "ora": "^5.4.1",
394 | "run-async": "^2.4.0",
395 | "rxjs": "^7.2.0",
396 | "string-width": "^4.1.0",
397 | "strip-ansi": "^6.0.0",
398 | "through": "^2.3.6"
399 | },
400 | "engines": {
401 | "node": ">=8.0.0"
402 | }
403 | },
404 | "node_modules/is-fullwidth-code-point": {
405 | "version": "3.0.0",
406 | "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz",
407 | "integrity": "sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==",
408 | "engines": {
409 | "node": ">=8"
410 | }
411 | },
412 | "node_modules/is-interactive": {
413 | "version": "1.0.0",
414 | "resolved": "https://registry.npmjs.org/is-interactive/-/is-interactive-1.0.0.tgz",
415 | "integrity": "sha512-2HvIEKRoqS62guEC+qBjpvRubdX910WCMuJTZ+I9yvqKU2/12eSL549HMwtabb4oupdj2sMP50k+XJfB/8JE6w==",
416 | "engines": {
417 | "node": ">=8"
418 | }
419 | },
420 | "node_modules/is-unicode-supported": {
421 | "version": "0.1.0",
422 | "resolved": "https://registry.npmjs.org/is-unicode-supported/-/is-unicode-supported-0.1.0.tgz",
423 | "integrity": "sha512-knxG2q4UC3u8stRGyAVJCOdxFmv5DZiRcdlIaAQXAbSfJya+OhopNotLQrstBhququ4ZpuKbDc/8S6mgXgPFPw==",
424 | "engines": {
425 | "node": ">=10"
426 | },
427 | "funding": {
428 | "url": "https://github.com/sponsors/sindresorhus"
429 | }
430 | },
431 | "node_modules/lodash": {
432 | "version": "4.17.21",
433 | "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.21.tgz",
434 | "integrity": "sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg=="
435 | },
436 | "node_modules/log-symbols": {
437 | "version": "4.1.0",
438 | "resolved": "https://registry.npmjs.org/log-symbols/-/log-symbols-4.1.0.tgz",
439 | "integrity": "sha512-8XPvpAA8uyhfteu8pIvQxpJZ7SYYdpUivZpGy6sFsBuKRY/7rQGavedeB8aK+Zkyq6upMFVL/9AW6vOYzfRyLg==",
440 | "dependencies": {
441 | "chalk": "^4.1.0",
442 | "is-unicode-supported": "^0.1.0"
443 | },
444 | "engines": {
445 | "node": ">=10"
446 | },
447 | "funding": {
448 | "url": "https://github.com/sponsors/sindresorhus"
449 | }
450 | },
451 | "node_modules/mime-db": {
452 | "version": "1.51.0",
453 | "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.51.0.tgz",
454 | "integrity": "sha512-5y8A56jg7XVQx2mbv1lu49NR4dokRnhZYTtL+KGfaa27uq4pSTXkwQkFJl4pkRMyNFz/EtYDSkiiEHx3F7UN6g==",
455 | "dev": true,
456 | "engines": {
457 | "node": ">= 0.6"
458 | }
459 | },
460 | "node_modules/mime-types": {
461 | "version": "2.1.34",
462 | "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.34.tgz",
463 | "integrity": "sha512-6cP692WwGIs9XXdOO4++N+7qjqv0rqxxVvJ3VHPh/Sc9mVZcQP+ZGhkKiTvWMQRr2tbHkJP/Yn7Y0npb3ZBs4A==",
464 | "dev": true,
465 | "dependencies": {
466 | "mime-db": "1.51.0"
467 | },
468 | "engines": {
469 | "node": ">= 0.6"
470 | }
471 | },
472 | "node_modules/mimic-fn": {
473 | "version": "2.1.0",
474 | "resolved": "https://registry.npmjs.org/mimic-fn/-/mimic-fn-2.1.0.tgz",
475 | "integrity": "sha512-OqbOk5oEQeAZ8WXWydlu9HJjz9WVdEIvamMCcXmuqUYjTknH/sqsWvhQ3vgwKFRR1HpjvNBKQ37nbJgYzGqGcg==",
476 | "engines": {
477 | "node": ">=6"
478 | }
479 | },
480 | "node_modules/mute-stream": {
481 | "version": "0.0.8",
482 | "resolved": "https://registry.npmjs.org/mute-stream/-/mute-stream-0.0.8.tgz",
483 | "integrity": "sha512-nnbWWOkoWyUsTjKrhgD0dcz22mdkSnpYqbEjIm2nhwhuxlSkpywJmBo8h0ZqJdkp73mb90SssHkN4rsRaBAfAA=="
484 | },
485 | "node_modules/node-fetch": {
486 | "version": "2.6.7",
487 | "resolved": "https://registry.npmjs.org/node-fetch/-/node-fetch-2.6.7.tgz",
488 | "integrity": "sha512-ZjMPFEfVx5j+y2yF35Kzx5sF7kDzxuDj6ziH4FFbOp87zKDZNx8yExJIb05OGF4Nlt9IHFIMBkRl41VdvcNdbQ==",
489 | "dependencies": {
490 | "whatwg-url": "^5.0.0"
491 | },
492 | "engines": {
493 | "node": "4.x || >=6.0.0"
494 | },
495 | "peerDependencies": {
496 | "encoding": "^0.1.0"
497 | },
498 | "peerDependenciesMeta": {
499 | "encoding": {
500 | "optional": true
501 | }
502 | }
503 | },
504 | "node_modules/node-stream-zip": {
505 | "version": "1.15.0",
506 | "resolved": "https://registry.npmjs.org/node-stream-zip/-/node-stream-zip-1.15.0.tgz",
507 | "integrity": "sha512-LN4fydt9TqhZhThkZIVQnF9cwjU3qmUH9h78Mx/K7d3VvfRqqwthLwJEUOEL0QPZ0XQmNN7be5Ggit5+4dq3Bw==",
508 | "engines": {
509 | "node": ">=0.12.0"
510 | },
511 | "funding": {
512 | "type": "github",
513 | "url": "https://github.com/sponsors/antelle"
514 | }
515 | },
516 | "node_modules/onetime": {
517 | "version": "5.1.2",
518 | "resolved": "https://registry.npmjs.org/onetime/-/onetime-5.1.2.tgz",
519 | "integrity": "sha512-kbpaSSGJTWdAY5KPVeMOKXSrPtr8C8C7wodJbcsd51jRnmD+GZu8Y0VoU6Dm5Z4vWr0Ig/1NKuWRKf7j5aaYSg==",
520 | "dependencies": {
521 | "mimic-fn": "^2.1.0"
522 | },
523 | "engines": {
524 | "node": ">=6"
525 | },
526 | "funding": {
527 | "url": "https://github.com/sponsors/sindresorhus"
528 | }
529 | },
530 | "node_modules/ora": {
531 | "version": "5.4.1",
532 | "resolved": "https://registry.npmjs.org/ora/-/ora-5.4.1.tgz",
533 | "integrity": "sha512-5b6Y85tPxZZ7QytO+BQzysW31HJku27cRIlkbAXaNx+BdcVi+LlRFmVXzeF6a7JCwJpyw5c4b+YSVImQIrBpuQ==",
534 | "dependencies": {
535 | "bl": "^4.1.0",
536 | "chalk": "^4.1.0",
537 | "cli-cursor": "^3.1.0",
538 | "cli-spinners": "^2.5.0",
539 | "is-interactive": "^1.0.0",
540 | "is-unicode-supported": "^0.1.0",
541 | "log-symbols": "^4.1.0",
542 | "strip-ansi": "^6.0.0",
543 | "wcwidth": "^1.0.1"
544 | },
545 | "engines": {
546 | "node": ">=10"
547 | },
548 | "funding": {
549 | "url": "https://github.com/sponsors/sindresorhus"
550 | }
551 | },
552 | "node_modules/os-tmpdir": {
553 | "version": "1.0.2",
554 | "resolved": "https://registry.npmjs.org/os-tmpdir/-/os-tmpdir-1.0.2.tgz",
555 | "integrity": "sha1-u+Z0BseaqFxc/sdm/lc0VV36EnQ=",
556 | "engines": {
557 | "node": ">=0.10.0"
558 | }
559 | },
560 | "node_modules/project-name-generator": {
561 | "version": "2.1.9",
562 | "resolved": "https://registry.npmjs.org/project-name-generator/-/project-name-generator-2.1.9.tgz",
563 | "integrity": "sha512-QmLHqz2C4VHmAyDEAFlVfnuWAHr4vwZhK2bbm4IrwuHNzNKOdG9b4U+NmQbsm1uOoV4kGWv7+FVLsu7Bb/ieYQ==",
564 | "dependencies": {
565 | "commander": "^6.1.0",
566 | "lodash": "^4.17.20"
567 | },
568 | "bin": {
569 | "project-name-generator": "src/generator-bin.js"
570 | }
571 | },
572 | "node_modules/readable-stream": {
573 | "version": "3.6.0",
574 | "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-3.6.0.tgz",
575 | "integrity": "sha512-BViHy7LKeTz4oNnkcLJ+lVSL6vpiFeX6/d3oSH8zCW7UxP2onchk+vTGB143xuFjHS3deTgkKoXXymXqymiIdA==",
576 | "dependencies": {
577 | "inherits": "^2.0.3",
578 | "string_decoder": "^1.1.1",
579 | "util-deprecate": "^1.0.1"
580 | },
581 | "engines": {
582 | "node": ">= 6"
583 | }
584 | },
585 | "node_modules/restore-cursor": {
586 | "version": "3.1.0",
587 | "resolved": "https://registry.npmjs.org/restore-cursor/-/restore-cursor-3.1.0.tgz",
588 | "integrity": "sha512-l+sSefzHpj5qimhFSE5a8nufZYAM3sBSVMAPtYkmC+4EH2anSGaEMXSD0izRQbu9nfyQ9y5JrVmp7E8oZrUjvA==",
589 | "dependencies": {
590 | "onetime": "^5.1.0",
591 | "signal-exit": "^3.0.2"
592 | },
593 | "engines": {
594 | "node": ">=8"
595 | }
596 | },
597 | "node_modules/run-async": {
598 | "version": "2.4.1",
599 | "resolved": "https://registry.npmjs.org/run-async/-/run-async-2.4.1.tgz",
600 | "integrity": "sha512-tvVnVv01b8c1RrA6Ep7JkStj85Guv/YrMcwqYQnwjsAS2cTmmPGBBjAjpCW7RrSodNSoE2/qg9O4bceNvUuDgQ==",
601 | "engines": {
602 | "node": ">=0.12.0"
603 | }
604 | },
605 | "node_modules/rxjs": {
606 | "version": "7.5.4",
607 | "resolved": "https://registry.npmjs.org/rxjs/-/rxjs-7.5.4.tgz",
608 | "integrity": "sha512-h5M3Hk78r6wAheJF0a5YahB1yRQKCsZ4MsGdZ5O9ETbVtjPcScGfrMmoOq7EBsCRzd4BDkvDJ7ogP8Sz5tTFiQ==",
609 | "dependencies": {
610 | "tslib": "^2.1.0"
611 | }
612 | },
613 | "node_modules/safe-buffer": {
614 | "version": "5.2.1",
615 | "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.2.1.tgz",
616 | "integrity": "sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ==",
617 | "funding": [
618 | {
619 | "type": "github",
620 | "url": "https://github.com/sponsors/feross"
621 | },
622 | {
623 | "type": "patreon",
624 | "url": "https://www.patreon.com/feross"
625 | },
626 | {
627 | "type": "consulting",
628 | "url": "https://feross.org/support"
629 | }
630 | ]
631 | },
632 | "node_modules/safer-buffer": {
633 | "version": "2.1.2",
634 | "resolved": "https://registry.npmjs.org/safer-buffer/-/safer-buffer-2.1.2.tgz",
635 | "integrity": "sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg=="
636 | },
637 | "node_modules/signal-exit": {
638 | "version": "3.0.7",
639 | "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-3.0.7.tgz",
640 | "integrity": "sha512-wnD2ZE+l+SPC/uoS0vXeE9L1+0wuaMqKlfz9AMUo38JsyLSBWSFcHR1Rri62LZc12vLr1gb3jl7iwQhgwpAbGQ=="
641 | },
642 | "node_modules/string_decoder": {
643 | "version": "1.3.0",
644 | "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.3.0.tgz",
645 | "integrity": "sha512-hkRX8U1WjJFd8LsDJ2yQ/wWWxaopEsABU1XfkM8A+j0+85JAGppt16cr1Whg6KIbb4okU6Mql6BOj+uup/wKeA==",
646 | "dependencies": {
647 | "safe-buffer": "~5.2.0"
648 | }
649 | },
650 | "node_modules/string-width": {
651 | "version": "4.2.3",
652 | "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz",
653 | "integrity": "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==",
654 | "dependencies": {
655 | "emoji-regex": "^8.0.0",
656 | "is-fullwidth-code-point": "^3.0.0",
657 | "strip-ansi": "^6.0.1"
658 | },
659 | "engines": {
660 | "node": ">=8"
661 | }
662 | },
663 | "node_modules/strip-ansi": {
664 | "version": "6.0.1",
665 | "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz",
666 | "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==",
667 | "dependencies": {
668 | "ansi-regex": "^5.0.1"
669 | },
670 | "engines": {
671 | "node": ">=8"
672 | }
673 | },
674 | "node_modules/supports-color": {
675 | "version": "7.2.0",
676 | "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz",
677 | "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==",
678 | "dependencies": {
679 | "has-flag": "^4.0.0"
680 | },
681 | "engines": {
682 | "node": ">=8"
683 | }
684 | },
685 | "node_modules/through": {
686 | "version": "2.3.8",
687 | "resolved": "https://registry.npmjs.org/through/-/through-2.3.8.tgz",
688 | "integrity": "sha1-DdTJ/6q8NXlgsbckEV1+Doai4fU="
689 | },
690 | "node_modules/tmp": {
691 | "version": "0.0.33",
692 | "resolved": "https://registry.npmjs.org/tmp/-/tmp-0.0.33.tgz",
693 | "integrity": "sha512-jRCJlojKnZ3addtTOjdIqoRuPEKBvNXcGYqzO6zWZX8KfKEpnGY5jfggJQ3EjKuu8D4bJRr0y+cYJFmYbImXGw==",
694 | "dependencies": {
695 | "os-tmpdir": "~1.0.2"
696 | },
697 | "engines": {
698 | "node": ">=0.6.0"
699 | }
700 | },
701 | "node_modules/tr46": {
702 | "version": "0.0.3",
703 | "resolved": "https://registry.npmjs.org/tr46/-/tr46-0.0.3.tgz",
704 | "integrity": "sha1-gYT9NH2snNwYWZLzpmIuFLnZq2o="
705 | },
706 | "node_modules/tslib": {
707 | "version": "2.3.1",
708 | "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.3.1.tgz",
709 | "integrity": "sha512-77EbyPPpMz+FRFRuAFlWMtmgUWGe9UOG2Z25NqCwiIjRhOf5iKGuzSe5P2w1laq+FkRy4p+PCuVkJSGkzTEKVw=="
710 | },
711 | "node_modules/type-fest": {
712 | "version": "0.21.3",
713 | "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.21.3.tgz",
714 | "integrity": "sha512-t0rzBq87m3fVcduHDUFhKmyyX+9eo6WQjZvf51Ea/M0Q7+T374Jp1aUiyUl0GKxp8M/OETVHSDvmkyPgvX+X2w==",
715 | "engines": {
716 | "node": ">=10"
717 | },
718 | "funding": {
719 | "url": "https://github.com/sponsors/sindresorhus"
720 | }
721 | },
722 | "node_modules/typescript": {
723 | "version": "4.6.2",
724 | "resolved": "https://registry.npmjs.org/typescript/-/typescript-4.6.2.tgz",
725 | "integrity": "sha512-HM/hFigTBHZhLXshn9sN37H085+hQGeJHJ/X7LpBWLID/fbc2acUMfU+lGD98X81sKP+pFa9f0DZmCwB9GnbAg==",
726 | "dev": true,
727 | "bin": {
728 | "tsc": "bin/tsc",
729 | "tsserver": "bin/tsserver"
730 | },
731 | "engines": {
732 | "node": ">=4.2.0"
733 | }
734 | },
735 | "node_modules/util-deprecate": {
736 | "version": "1.0.2",
737 | "resolved": "https://registry.npmjs.org/util-deprecate/-/util-deprecate-1.0.2.tgz",
738 | "integrity": "sha1-RQ1Nyfpw3nMnYvvS1KKJgUGaDM8="
739 | },
740 | "node_modules/wcwidth": {
741 | "version": "1.0.1",
742 | "resolved": "https://registry.npmjs.org/wcwidth/-/wcwidth-1.0.1.tgz",
743 | "integrity": "sha1-8LDc+RW8X/FSivrbLA4XtTLaL+g=",
744 | "dependencies": {
745 | "defaults": "^1.0.3"
746 | }
747 | },
748 | "node_modules/webidl-conversions": {
749 | "version": "3.0.1",
750 | "resolved": "https://registry.npmjs.org/webidl-conversions/-/webidl-conversions-3.0.1.tgz",
751 | "integrity": "sha1-JFNCdeKnvGvnvIZhHMFq4KVlSHE="
752 | },
753 | "node_modules/whatwg-url": {
754 | "version": "5.0.0",
755 | "resolved": "https://registry.npmjs.org/whatwg-url/-/whatwg-url-5.0.0.tgz",
756 | "integrity": "sha1-lmRU6HZUYuN2RNNib2dCzotwll0=",
757 | "dependencies": {
758 | "tr46": "~0.0.3",
759 | "webidl-conversions": "^3.0.0"
760 | }
761 | }
762 | },
763 | "dependencies": {
764 | "@types/inquirer": {
765 | "version": "8.2.0",
766 | "resolved": "https://registry.npmjs.org/@types/inquirer/-/inquirer-8.2.0.tgz",
767 | "integrity": "sha512-BNoMetRf3gmkpAlV5we+kxyZTle7YibdOntIZbU5pyIfMdcwy784KfeZDAcuyMznkh5OLa17RVXZOGA5LTlkgQ==",
768 | "dev": true,
769 | "requires": {
770 | "@types/through": "*",
771 | "rxjs": "^7.2.0"
772 | }
773 | },
774 | "@types/node": {
775 | "version": "17.0.21",
776 | "resolved": "https://registry.npmjs.org/@types/node/-/node-17.0.21.tgz",
777 | "integrity": "sha512-DBZCJbhII3r90XbQxI8Y9IjjiiOGlZ0Hr32omXIZvwwZ7p4DMMXGrKXVyPfuoBOri9XNtL0UK69jYIBIsRX3QQ==",
778 | "dev": true
779 | },
780 | "@types/node-fetch": {
781 | "version": "2.6.1",
782 | "resolved": "https://registry.npmjs.org/@types/node-fetch/-/node-fetch-2.6.1.tgz",
783 | "integrity": "sha512-oMqjURCaxoSIsHSr1E47QHzbmzNR5rK8McHuNb11BOM9cHcIK3Avy0s/b2JlXHoQGTYS3NsvWzV1M0iK7l0wbA==",
784 | "dev": true,
785 | "requires": {
786 | "@types/node": "*",
787 | "form-data": "^3.0.0"
788 | }
789 | },
790 | "@types/project-name-generator": {
791 | "version": "2.1.1",
792 | "resolved": "https://registry.npmjs.org/@types/project-name-generator/-/project-name-generator-2.1.1.tgz",
793 | "integrity": "sha512-VLd5FEVTJs8hNa/WF4pZRcFvv0OAcIGeTyki4RDcaID0TUhTc5/Xe/btYM2XIHwVCb67ila8wUJYKJNa5dVABw=="
794 | },
795 | "@types/through": {
796 | "version": "0.0.30",
797 | "resolved": "https://registry.npmjs.org/@types/through/-/through-0.0.30.tgz",
798 | "integrity": "sha512-FvnCJljyxhPM3gkRgWmxmDZyAQSiBQQWLI0A0VFL0K7W1oRUrPJSqNO0NvTnLkBcotdlp3lKvaT0JrnyRDkzOg==",
799 | "dev": true,
800 | "requires": {
801 | "@types/node": "*"
802 | }
803 | },
804 | "@types/unzipper": {
805 | "version": "0.10.5",
806 | "resolved": "https://registry.npmjs.org/@types/unzipper/-/unzipper-0.10.5.tgz",
807 | "integrity": "sha512-NrLJb29AdnBARpg9S/4ktfPEisbJ0AvaaAr3j7Q1tg8AgcEUsq2HqbNzvgLRoWyRtjzeLEv7vuL39u1mrNIyNA==",
808 | "dev": true,
809 | "requires": {
810 | "@types/node": "*"
811 | }
812 | },
813 | "ansi-escapes": {
814 | "version": "4.3.2",
815 | "resolved": "https://registry.npmjs.org/ansi-escapes/-/ansi-escapes-4.3.2.tgz",
816 | "integrity": "sha512-gKXj5ALrKWQLsYG9jlTRmR/xKluxHV+Z9QEwNIgCfM1/uwPMCuzVVnh5mwTd+OuBZcwSIMbqssNWRm1lE51QaQ==",
817 | "requires": {
818 | "type-fest": "^0.21.3"
819 | }
820 | },
821 | "ansi-regex": {
822 | "version": "5.0.1",
823 | "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz",
824 | "integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ=="
825 | },
826 | "ansi-styles": {
827 | "version": "4.3.0",
828 | "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz",
829 | "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==",
830 | "requires": {
831 | "color-convert": "^2.0.1"
832 | }
833 | },
834 | "asynckit": {
835 | "version": "0.4.0",
836 | "resolved": "https://registry.npmjs.org/asynckit/-/asynckit-0.4.0.tgz",
837 | "integrity": "sha1-x57Zf380y48robyXkLzDZkdLS3k=",
838 | "dev": true
839 | },
840 | "base64-js": {
841 | "version": "1.5.1",
842 | "resolved": "https://registry.npmjs.org/base64-js/-/base64-js-1.5.1.tgz",
843 | "integrity": "sha512-AKpaYlHn8t4SVbOHCy+b5+KKgvR4vrsD8vbvrbiQJps7fKDTkjkDry6ji0rUJjC0kzbNePLwzxq8iypo41qeWA=="
844 | },
845 | "bl": {
846 | "version": "4.1.0",
847 | "resolved": "https://registry.npmjs.org/bl/-/bl-4.1.0.tgz",
848 | "integrity": "sha512-1W07cM9gS6DcLperZfFSj+bWLtaPGSOHWhPiGzXmvVJbRLdG82sH/Kn8EtW1VqWVA54AKf2h5k5BbnIbwF3h6w==",
849 | "requires": {
850 | "buffer": "^5.5.0",
851 | "inherits": "^2.0.4",
852 | "readable-stream": "^3.4.0"
853 | }
854 | },
855 | "buffer": {
856 | "version": "5.7.1",
857 | "resolved": "https://registry.npmjs.org/buffer/-/buffer-5.7.1.tgz",
858 | "integrity": "sha512-EHcyIPBQ4BSGlvjB16k5KgAJ27CIsHY/2JBmCRReo48y9rQ3MaUzWX3KVlBa4U7MyX02HdVj0K7C3WaB3ju7FQ==",
859 | "requires": {
860 | "base64-js": "^1.3.1",
861 | "ieee754": "^1.1.13"
862 | }
863 | },
864 | "chalk": {
865 | "version": "4.1.2",
866 | "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz",
867 | "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==",
868 | "requires": {
869 | "ansi-styles": "^4.1.0",
870 | "supports-color": "^7.1.0"
871 | }
872 | },
873 | "chardet": {
874 | "version": "0.7.0",
875 | "resolved": "https://registry.npmjs.org/chardet/-/chardet-0.7.0.tgz",
876 | "integrity": "sha512-mT8iDcrh03qDGRRmoA2hmBJnxpllMR+0/0qlzjqZES6NdiWDcZkCNAk4rPFZ9Q85r27unkiNNg8ZOiwZXBHwcA=="
877 | },
878 | "cli-cursor": {
879 | "version": "3.1.0",
880 | "resolved": "https://registry.npmjs.org/cli-cursor/-/cli-cursor-3.1.0.tgz",
881 | "integrity": "sha512-I/zHAwsKf9FqGoXM4WWRACob9+SNukZTd94DWF57E4toouRulbCxcUh6RKUEOQlYTHJnzkPMySvPNaaSLNfLZw==",
882 | "requires": {
883 | "restore-cursor": "^3.1.0"
884 | }
885 | },
886 | "cli-spinners": {
887 | "version": "2.6.1",
888 | "resolved": "https://registry.npmjs.org/cli-spinners/-/cli-spinners-2.6.1.tgz",
889 | "integrity": "sha512-x/5fWmGMnbKQAaNwN+UZlV79qBLM9JFnJuJ03gIi5whrob0xV0ofNVHy9DhwGdsMJQc2OKv0oGmLzvaqvAVv+g=="
890 | },
891 | "cli-width": {
892 | "version": "3.0.0",
893 | "resolved": "https://registry.npmjs.org/cli-width/-/cli-width-3.0.0.tgz",
894 | "integrity": "sha512-FxqpkPPwu1HjuN93Omfm4h8uIanXofW0RxVEW3k5RKx+mJJYSthzNhp32Kzxxy3YAEZ/Dc/EWN1vZRY0+kOhbw=="
895 | },
896 | "clone": {
897 | "version": "1.0.4",
898 | "resolved": "https://registry.npmjs.org/clone/-/clone-1.0.4.tgz",
899 | "integrity": "sha1-2jCcwmPfFZlMaIypAheco8fNfH4="
900 | },
901 | "color-convert": {
902 | "version": "2.0.1",
903 | "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz",
904 | "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==",
905 | "requires": {
906 | "color-name": "~1.1.4"
907 | }
908 | },
909 | "color-name": {
910 | "version": "1.1.4",
911 | "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz",
912 | "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA=="
913 | },
914 | "combined-stream": {
915 | "version": "1.0.8",
916 | "resolved": "https://registry.npmjs.org/combined-stream/-/combined-stream-1.0.8.tgz",
917 | "integrity": "sha512-FQN4MRfuJeHf7cBbBMJFXhKSDq+2kAArBlmRBvcvFE5BB1HZKXtSFASDhdlz9zOYwxh8lDdnvmMOe/+5cdoEdg==",
918 | "dev": true,
919 | "requires": {
920 | "delayed-stream": "~1.0.0"
921 | }
922 | },
923 | "commander": {
924 | "version": "6.2.1",
925 | "resolved": "https://registry.npmjs.org/commander/-/commander-6.2.1.tgz",
926 | "integrity": "sha512-U7VdrJFnJgo4xjrHpTzu0yrHPGImdsmD95ZlgYSEajAn2JKzDhDTPG9kBTefmObL2w/ngeZnilk+OV9CG3d7UA=="
927 | },
928 | "defaults": {
929 | "version": "1.0.3",
930 | "resolved": "https://registry.npmjs.org/defaults/-/defaults-1.0.3.tgz",
931 | "integrity": "sha1-xlYFHpgX2f8I7YgUd/P+QBnz730=",
932 | "requires": {
933 | "clone": "^1.0.2"
934 | }
935 | },
936 | "delayed-stream": {
937 | "version": "1.0.0",
938 | "resolved": "https://registry.npmjs.org/delayed-stream/-/delayed-stream-1.0.0.tgz",
939 | "integrity": "sha1-3zrhmayt+31ECqrgsp4icrJOxhk=",
940 | "dev": true
941 | },
942 | "emoji-regex": {
943 | "version": "8.0.0",
944 | "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz",
945 | "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A=="
946 | },
947 | "escape-string-regexp": {
948 | "version": "1.0.5",
949 | "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz",
950 | "integrity": "sha1-G2HAViGQqN/2rjuyzwIAyhMLhtQ="
951 | },
952 | "external-editor": {
953 | "version": "3.1.0",
954 | "resolved": "https://registry.npmjs.org/external-editor/-/external-editor-3.1.0.tgz",
955 | "integrity": "sha512-hMQ4CX1p1izmuLYyZqLMO/qGNw10wSv9QDCPfzXfyFrOaCSSoRfqE1Kf1s5an66J5JZC62NewG+mK49jOCtQew==",
956 | "requires": {
957 | "chardet": "^0.7.0",
958 | "iconv-lite": "^0.4.24",
959 | "tmp": "^0.0.33"
960 | }
961 | },
962 | "figures": {
963 | "version": "3.2.0",
964 | "resolved": "https://registry.npmjs.org/figures/-/figures-3.2.0.tgz",
965 | "integrity": "sha512-yaduQFRKLXYOGgEn6AZau90j3ggSOyiqXU0F9JZfeXYhNa+Jk4X+s45A2zg5jns87GAFa34BBm2kXw4XpNcbdg==",
966 | "requires": {
967 | "escape-string-regexp": "^1.0.5"
968 | }
969 | },
970 | "form-data": {
971 | "version": "3.0.1",
972 | "resolved": "https://registry.npmjs.org/form-data/-/form-data-3.0.1.tgz",
973 | "integrity": "sha512-RHkBKtLWUVwd7SqRIvCZMEvAMoGUp0XU+seQiZejj0COz3RI3hWP4sCv3gZWWLjJTd7rGwcsF5eKZGii0r/hbg==",
974 | "dev": true,
975 | "requires": {
976 | "asynckit": "^0.4.0",
977 | "combined-stream": "^1.0.8",
978 | "mime-types": "^2.1.12"
979 | }
980 | },
981 | "has-flag": {
982 | "version": "4.0.0",
983 | "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz",
984 | "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ=="
985 | },
986 | "iconv-lite": {
987 | "version": "0.4.24",
988 | "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.4.24.tgz",
989 | "integrity": "sha512-v3MXnZAcvnywkTUEZomIActle7RXXeedOR31wwl7VlyoXO4Qi9arvSenNQWne1TcRwhCL1HwLI21bEqdpj8/rA==",
990 | "requires": {
991 | "safer-buffer": ">= 2.1.2 < 3"
992 | }
993 | },
994 | "ieee754": {
995 | "version": "1.2.1",
996 | "resolved": "https://registry.npmjs.org/ieee754/-/ieee754-1.2.1.tgz",
997 | "integrity": "sha512-dcyqhDvX1C46lXZcVqCpK+FtMRQVdIMN6/Df5js2zouUsqG7I6sFxitIC+7KYK29KdXOLHdu9zL4sFnoVQnqaA=="
998 | },
999 | "inherits": {
1000 | "version": "2.0.4",
1001 | "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.4.tgz",
1002 | "integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ=="
1003 | },
1004 | "inquirer": {
1005 | "version": "8.2.0",
1006 | "resolved": "https://registry.npmjs.org/inquirer/-/inquirer-8.2.0.tgz",
1007 | "integrity": "sha512-0crLweprevJ02tTuA6ThpoAERAGyVILC4sS74uib58Xf/zSr1/ZWtmm7D5CI+bSQEaA04f0K7idaHpQbSWgiVQ==",
1008 | "requires": {
1009 | "ansi-escapes": "^4.2.1",
1010 | "chalk": "^4.1.1",
1011 | "cli-cursor": "^3.1.0",
1012 | "cli-width": "^3.0.0",
1013 | "external-editor": "^3.0.3",
1014 | "figures": "^3.0.0",
1015 | "lodash": "^4.17.21",
1016 | "mute-stream": "0.0.8",
1017 | "ora": "^5.4.1",
1018 | "run-async": "^2.4.0",
1019 | "rxjs": "^7.2.0",
1020 | "string-width": "^4.1.0",
1021 | "strip-ansi": "^6.0.0",
1022 | "through": "^2.3.6"
1023 | }
1024 | },
1025 | "is-fullwidth-code-point": {
1026 | "version": "3.0.0",
1027 | "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz",
1028 | "integrity": "sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg=="
1029 | },
1030 | "is-interactive": {
1031 | "version": "1.0.0",
1032 | "resolved": "https://registry.npmjs.org/is-interactive/-/is-interactive-1.0.0.tgz",
1033 | "integrity": "sha512-2HvIEKRoqS62guEC+qBjpvRubdX910WCMuJTZ+I9yvqKU2/12eSL549HMwtabb4oupdj2sMP50k+XJfB/8JE6w=="
1034 | },
1035 | "is-unicode-supported": {
1036 | "version": "0.1.0",
1037 | "resolved": "https://registry.npmjs.org/is-unicode-supported/-/is-unicode-supported-0.1.0.tgz",
1038 | "integrity": "sha512-knxG2q4UC3u8stRGyAVJCOdxFmv5DZiRcdlIaAQXAbSfJya+OhopNotLQrstBhququ4ZpuKbDc/8S6mgXgPFPw=="
1039 | },
1040 | "lodash": {
1041 | "version": "4.17.21",
1042 | "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.21.tgz",
1043 | "integrity": "sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg=="
1044 | },
1045 | "log-symbols": {
1046 | "version": "4.1.0",
1047 | "resolved": "https://registry.npmjs.org/log-symbols/-/log-symbols-4.1.0.tgz",
1048 | "integrity": "sha512-8XPvpAA8uyhfteu8pIvQxpJZ7SYYdpUivZpGy6sFsBuKRY/7rQGavedeB8aK+Zkyq6upMFVL/9AW6vOYzfRyLg==",
1049 | "requires": {
1050 | "chalk": "^4.1.0",
1051 | "is-unicode-supported": "^0.1.0"
1052 | }
1053 | },
1054 | "mime-db": {
1055 | "version": "1.51.0",
1056 | "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.51.0.tgz",
1057 | "integrity": "sha512-5y8A56jg7XVQx2mbv1lu49NR4dokRnhZYTtL+KGfaa27uq4pSTXkwQkFJl4pkRMyNFz/EtYDSkiiEHx3F7UN6g==",
1058 | "dev": true
1059 | },
1060 | "mime-types": {
1061 | "version": "2.1.34",
1062 | "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.34.tgz",
1063 | "integrity": "sha512-6cP692WwGIs9XXdOO4++N+7qjqv0rqxxVvJ3VHPh/Sc9mVZcQP+ZGhkKiTvWMQRr2tbHkJP/Yn7Y0npb3ZBs4A==",
1064 | "dev": true,
1065 | "requires": {
1066 | "mime-db": "1.51.0"
1067 | }
1068 | },
1069 | "mimic-fn": {
1070 | "version": "2.1.0",
1071 | "resolved": "https://registry.npmjs.org/mimic-fn/-/mimic-fn-2.1.0.tgz",
1072 | "integrity": "sha512-OqbOk5oEQeAZ8WXWydlu9HJjz9WVdEIvamMCcXmuqUYjTknH/sqsWvhQ3vgwKFRR1HpjvNBKQ37nbJgYzGqGcg=="
1073 | },
1074 | "mute-stream": {
1075 | "version": "0.0.8",
1076 | "resolved": "https://registry.npmjs.org/mute-stream/-/mute-stream-0.0.8.tgz",
1077 | "integrity": "sha512-nnbWWOkoWyUsTjKrhgD0dcz22mdkSnpYqbEjIm2nhwhuxlSkpywJmBo8h0ZqJdkp73mb90SssHkN4rsRaBAfAA=="
1078 | },
1079 | "node-fetch": {
1080 | "version": "2.6.7",
1081 | "resolved": "https://registry.npmjs.org/node-fetch/-/node-fetch-2.6.7.tgz",
1082 | "integrity": "sha512-ZjMPFEfVx5j+y2yF35Kzx5sF7kDzxuDj6ziH4FFbOp87zKDZNx8yExJIb05OGF4Nlt9IHFIMBkRl41VdvcNdbQ==",
1083 | "requires": {
1084 | "whatwg-url": "^5.0.0"
1085 | }
1086 | },
1087 | "node-stream-zip": {
1088 | "version": "1.15.0",
1089 | "resolved": "https://registry.npmjs.org/node-stream-zip/-/node-stream-zip-1.15.0.tgz",
1090 | "integrity": "sha512-LN4fydt9TqhZhThkZIVQnF9cwjU3qmUH9h78Mx/K7d3VvfRqqwthLwJEUOEL0QPZ0XQmNN7be5Ggit5+4dq3Bw=="
1091 | },
1092 | "onetime": {
1093 | "version": "5.1.2",
1094 | "resolved": "https://registry.npmjs.org/onetime/-/onetime-5.1.2.tgz",
1095 | "integrity": "sha512-kbpaSSGJTWdAY5KPVeMOKXSrPtr8C8C7wodJbcsd51jRnmD+GZu8Y0VoU6Dm5Z4vWr0Ig/1NKuWRKf7j5aaYSg==",
1096 | "requires": {
1097 | "mimic-fn": "^2.1.0"
1098 | }
1099 | },
1100 | "ora": {
1101 | "version": "5.4.1",
1102 | "resolved": "https://registry.npmjs.org/ora/-/ora-5.4.1.tgz",
1103 | "integrity": "sha512-5b6Y85tPxZZ7QytO+BQzysW31HJku27cRIlkbAXaNx+BdcVi+LlRFmVXzeF6a7JCwJpyw5c4b+YSVImQIrBpuQ==",
1104 | "requires": {
1105 | "bl": "^4.1.0",
1106 | "chalk": "^4.1.0",
1107 | "cli-cursor": "^3.1.0",
1108 | "cli-spinners": "^2.5.0",
1109 | "is-interactive": "^1.0.0",
1110 | "is-unicode-supported": "^0.1.0",
1111 | "log-symbols": "^4.1.0",
1112 | "strip-ansi": "^6.0.0",
1113 | "wcwidth": "^1.0.1"
1114 | }
1115 | },
1116 | "os-tmpdir": {
1117 | "version": "1.0.2",
1118 | "resolved": "https://registry.npmjs.org/os-tmpdir/-/os-tmpdir-1.0.2.tgz",
1119 | "integrity": "sha1-u+Z0BseaqFxc/sdm/lc0VV36EnQ="
1120 | },
1121 | "project-name-generator": {
1122 | "version": "2.1.9",
1123 | "resolved": "https://registry.npmjs.org/project-name-generator/-/project-name-generator-2.1.9.tgz",
1124 | "integrity": "sha512-QmLHqz2C4VHmAyDEAFlVfnuWAHr4vwZhK2bbm4IrwuHNzNKOdG9b4U+NmQbsm1uOoV4kGWv7+FVLsu7Bb/ieYQ==",
1125 | "requires": {
1126 | "commander": "^6.1.0",
1127 | "lodash": "^4.17.20"
1128 | }
1129 | },
1130 | "readable-stream": {
1131 | "version": "3.6.0",
1132 | "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-3.6.0.tgz",
1133 | "integrity": "sha512-BViHy7LKeTz4oNnkcLJ+lVSL6vpiFeX6/d3oSH8zCW7UxP2onchk+vTGB143xuFjHS3deTgkKoXXymXqymiIdA==",
1134 | "requires": {
1135 | "inherits": "^2.0.3",
1136 | "string_decoder": "^1.1.1",
1137 | "util-deprecate": "^1.0.1"
1138 | }
1139 | },
1140 | "restore-cursor": {
1141 | "version": "3.1.0",
1142 | "resolved": "https://registry.npmjs.org/restore-cursor/-/restore-cursor-3.1.0.tgz",
1143 | "integrity": "sha512-l+sSefzHpj5qimhFSE5a8nufZYAM3sBSVMAPtYkmC+4EH2anSGaEMXSD0izRQbu9nfyQ9y5JrVmp7E8oZrUjvA==",
1144 | "requires": {
1145 | "onetime": "^5.1.0",
1146 | "signal-exit": "^3.0.2"
1147 | }
1148 | },
1149 | "run-async": {
1150 | "version": "2.4.1",
1151 | "resolved": "https://registry.npmjs.org/run-async/-/run-async-2.4.1.tgz",
1152 | "integrity": "sha512-tvVnVv01b8c1RrA6Ep7JkStj85Guv/YrMcwqYQnwjsAS2cTmmPGBBjAjpCW7RrSodNSoE2/qg9O4bceNvUuDgQ=="
1153 | },
1154 | "rxjs": {
1155 | "version": "7.5.4",
1156 | "resolved": "https://registry.npmjs.org/rxjs/-/rxjs-7.5.4.tgz",
1157 | "integrity": "sha512-h5M3Hk78r6wAheJF0a5YahB1yRQKCsZ4MsGdZ5O9ETbVtjPcScGfrMmoOq7EBsCRzd4BDkvDJ7ogP8Sz5tTFiQ==",
1158 | "requires": {
1159 | "tslib": "^2.1.0"
1160 | }
1161 | },
1162 | "safe-buffer": {
1163 | "version": "5.2.1",
1164 | "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.2.1.tgz",
1165 | "integrity": "sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ=="
1166 | },
1167 | "safer-buffer": {
1168 | "version": "2.1.2",
1169 | "resolved": "https://registry.npmjs.org/safer-buffer/-/safer-buffer-2.1.2.tgz",
1170 | "integrity": "sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg=="
1171 | },
1172 | "signal-exit": {
1173 | "version": "3.0.7",
1174 | "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-3.0.7.tgz",
1175 | "integrity": "sha512-wnD2ZE+l+SPC/uoS0vXeE9L1+0wuaMqKlfz9AMUo38JsyLSBWSFcHR1Rri62LZc12vLr1gb3jl7iwQhgwpAbGQ=="
1176 | },
1177 | "string_decoder": {
1178 | "version": "1.3.0",
1179 | "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.3.0.tgz",
1180 | "integrity": "sha512-hkRX8U1WjJFd8LsDJ2yQ/wWWxaopEsABU1XfkM8A+j0+85JAGppt16cr1Whg6KIbb4okU6Mql6BOj+uup/wKeA==",
1181 | "requires": {
1182 | "safe-buffer": "~5.2.0"
1183 | }
1184 | },
1185 | "string-width": {
1186 | "version": "4.2.3",
1187 | "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz",
1188 | "integrity": "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==",
1189 | "requires": {
1190 | "emoji-regex": "^8.0.0",
1191 | "is-fullwidth-code-point": "^3.0.0",
1192 | "strip-ansi": "^6.0.1"
1193 | }
1194 | },
1195 | "strip-ansi": {
1196 | "version": "6.0.1",
1197 | "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz",
1198 | "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==",
1199 | "requires": {
1200 | "ansi-regex": "^5.0.1"
1201 | }
1202 | },
1203 | "supports-color": {
1204 | "version": "7.2.0",
1205 | "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz",
1206 | "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==",
1207 | "requires": {
1208 | "has-flag": "^4.0.0"
1209 | }
1210 | },
1211 | "through": {
1212 | "version": "2.3.8",
1213 | "resolved": "https://registry.npmjs.org/through/-/through-2.3.8.tgz",
1214 | "integrity": "sha1-DdTJ/6q8NXlgsbckEV1+Doai4fU="
1215 | },
1216 | "tmp": {
1217 | "version": "0.0.33",
1218 | "resolved": "https://registry.npmjs.org/tmp/-/tmp-0.0.33.tgz",
1219 | "integrity": "sha512-jRCJlojKnZ3addtTOjdIqoRuPEKBvNXcGYqzO6zWZX8KfKEpnGY5jfggJQ3EjKuu8D4bJRr0y+cYJFmYbImXGw==",
1220 | "requires": {
1221 | "os-tmpdir": "~1.0.2"
1222 | }
1223 | },
1224 | "tr46": {
1225 | "version": "0.0.3",
1226 | "resolved": "https://registry.npmjs.org/tr46/-/tr46-0.0.3.tgz",
1227 | "integrity": "sha1-gYT9NH2snNwYWZLzpmIuFLnZq2o="
1228 | },
1229 | "tslib": {
1230 | "version": "2.3.1",
1231 | "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.3.1.tgz",
1232 | "integrity": "sha512-77EbyPPpMz+FRFRuAFlWMtmgUWGe9UOG2Z25NqCwiIjRhOf5iKGuzSe5P2w1laq+FkRy4p+PCuVkJSGkzTEKVw=="
1233 | },
1234 | "type-fest": {
1235 | "version": "0.21.3",
1236 | "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.21.3.tgz",
1237 | "integrity": "sha512-t0rzBq87m3fVcduHDUFhKmyyX+9eo6WQjZvf51Ea/M0Q7+T374Jp1aUiyUl0GKxp8M/OETVHSDvmkyPgvX+X2w=="
1238 | },
1239 | "typescript": {
1240 | "version": "4.6.2",
1241 | "resolved": "https://registry.npmjs.org/typescript/-/typescript-4.6.2.tgz",
1242 | "integrity": "sha512-HM/hFigTBHZhLXshn9sN37H085+hQGeJHJ/X7LpBWLID/fbc2acUMfU+lGD98X81sKP+pFa9f0DZmCwB9GnbAg==",
1243 | "dev": true
1244 | },
1245 | "util-deprecate": {
1246 | "version": "1.0.2",
1247 | "resolved": "https://registry.npmjs.org/util-deprecate/-/util-deprecate-1.0.2.tgz",
1248 | "integrity": "sha1-RQ1Nyfpw3nMnYvvS1KKJgUGaDM8="
1249 | },
1250 | "wcwidth": {
1251 | "version": "1.0.1",
1252 | "resolved": "https://registry.npmjs.org/wcwidth/-/wcwidth-1.0.1.tgz",
1253 | "integrity": "sha1-8LDc+RW8X/FSivrbLA4XtTLaL+g=",
1254 | "requires": {
1255 | "defaults": "^1.0.3"
1256 | }
1257 | },
1258 | "webidl-conversions": {
1259 | "version": "3.0.1",
1260 | "resolved": "https://registry.npmjs.org/webidl-conversions/-/webidl-conversions-3.0.1.tgz",
1261 | "integrity": "sha1-JFNCdeKnvGvnvIZhHMFq4KVlSHE="
1262 | },
1263 | "whatwg-url": {
1264 | "version": "5.0.0",
1265 | "resolved": "https://registry.npmjs.org/whatwg-url/-/whatwg-url-5.0.0.tgz",
1266 | "integrity": "sha1-lmRU6HZUYuN2RNNib2dCzotwll0=",
1267 | "requires": {
1268 | "tr46": "~0.0.3",
1269 | "webidl-conversions": "^3.0.0"
1270 | }
1271 | }
1272 | }
1273 | }
1274 |
--------------------------------------------------------------------------------
/package.json:
--------------------------------------------------------------------------------
1 | {
2 | "name": "@create-anchor-app/cli",
3 | "version": "0.1.0",
4 | "description": "create anchor apps on the fly ",
5 | "main": "dist/index.js",
6 | "license": "MIT",
7 | "directories": {
8 | "lib": "lib"
9 | },
10 | "scripts": {
11 | "dev": "npm run build && npm i . -g --force",
12 | "build": "tsc -p ."
13 | },
14 | "repository": {
15 | "type": "git",
16 | "url": "git+https://github.com/create-anchor-app/cli.git"
17 | },
18 | "bin": {
19 | "create-anchor-app": "./bin/index.js"
20 | },
21 | "author": "ayush (https://ayush.sh)",
22 | "bugs": {
23 | "url": "https://github.com/create-anchor-app/cli/issues"
24 | },
25 | "homepage": "https://github.com/create-anchor-app/cli#readme",
26 | "dependencies": {
27 | "@types/project-name-generator": "^2.1.1",
28 | "chalk": "4.1.2",
29 | "inquirer": "^8.2.0",
30 | "node-fetch": "^2.6.7",
31 | "node-stream-zip": "^1.15.0",
32 | "project-name-generator": "^2.1.9"
33 | },
34 | "devDependencies": {
35 | "@types/inquirer": "^8.2.0",
36 | "@types/node-fetch": "2",
37 | "@types/unzipper": "^0.10.5",
38 | "typescript": "^4.4.3"
39 | }
40 | }
41 |
--------------------------------------------------------------------------------
/site/Bold.otf:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/create-anchor-app/cli/70b2e32539c2cb961130283badd0d8a3083e3b59/site/Bold.otf
--------------------------------------------------------------------------------
/site/api.json:
--------------------------------------------------------------------------------
1 | {
2 | "mint-nft": {
3 | "repo": "mint-nft",
4 | "install": "npm ci --force --progress=false"
5 | },
6 | "stake-spl": {
7 | "repo": "stake-spl",
8 | "install": "npm ci --force --progress=false"
9 | },
10 | "anchor-escrow": {
11 | "repo": "anchor-escrow",
12 | "install": "npm ci --force --progress=false"
13 | },
14 | "nft-staking": {
15 | "repo": "nft-staking",
16 | "install": "npm ci --force --progress=false"
17 | }
18 | }
19 |
--------------------------------------------------------------------------------
/site/index.html:
--------------------------------------------------------------------------------
1 |
2 |
3 | create-anchor-app
4 |
5 |
create-anchor-app
6 |
use npm install @create-anchor-app/cli -g
to get started!
7 |
8 |
--------------------------------------------------------------------------------
/site/style.css:
--------------------------------------------------------------------------------
1 | @import url('https://fonts.googleapis.com/css2?family=Noto+Sans:wght@300&display=swap');
2 |
3 | @font-face {
4 | font-family: "Bold";
5 | src: url("Bold.otf") format("opentype");
6 | }
7 |
8 | /* @font-face {
9 | font-family: "Regular";
10 | src: url("Regular.ttf") format("truetype");
11 | } */
12 |
13 | @keyframes load {
14 | from {
15 | opacity: 0;
16 | }
17 |
18 | to {
19 | opacity: 100;
20 | }
21 | }
22 |
23 | body {
24 | margin: 0;
25 | padding: 0;
26 | background-color: black;
27 | color: white;
28 | font-family: 'Noto Sans', sans-serif;
29 | }
30 |
31 | div {
32 | padding: 50px;
33 | font-size: 1.5em;
34 | }
35 |
36 |
37 |
38 | h1 {
39 | font-family: "Bold";
40 | font-size: 50px;
41 | margin-top: 50px;
42 | animation-name: load;
43 | animation-duration: 2s;
44 | }
45 |
46 | p,
47 | li {
48 | animation-name: load;
49 | animation-duration: 3s;
50 | }
51 |
52 | a:link {
53 | color: red;
54 | }
55 |
56 | /* visited link */
57 | a:visited {
58 | color: green;
59 | }
60 |
61 | /* mouse over link */
62 | a:hover {
63 | color: hotpink;
64 | }
65 |
66 | /* selected link */
67 | a:active {
68 | color: blue;
69 | }
70 |
--------------------------------------------------------------------------------
/tsconfig.json:
--------------------------------------------------------------------------------
1 | {
2 | "compilerOptions": {
3 | "target": "es5",
4 | "module": "commonjs",
5 | "outDir": "./bin",
6 | "rootDir": "lib",
7 | "strict": true,
8 | "moduleResolution": "node",
9 | "esModuleInterop": true,
10 | "skipLibCheck": true,
11 | "forceConsistentCasingInFileNames": true
12 | },
13 | "exclude": ["site/**"]
14 | }
15 |
--------------------------------------------------------------------------------