UNPKG

5.88 kBJavaScriptView Raw
1"use strict";
2var __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};
11var __importDefault = (this && this.__importDefault) || function (mod) {
12 return (mod && mod.__esModule) ? mod : { "default": mod };
13};
14var __importStar = (this && this.__importStar) || function (mod) {
15 if (mod && mod.__esModule) return mod;
16 var result = {};
17 if (mod != null) for (var k in mod) if (Object.hasOwnProperty.call(mod, k)) result[k] = mod[k];
18 result["default"] = mod;
19 return result;
20};
21Object.defineProperty(exports, "__esModule", { value: true });
22const shelljs_1 = __importDefault(require("shelljs"));
23const chalk_1 = __importDefault(require("chalk"));
24const path = __importStar(require("path"));
25const fs = __importStar(require("fs-extra"));
26const axios_1 = __importDefault(require("axios"));
27const glob_1 = __importDefault(require("glob"));
28const cwd = process.cwd();
29function unPack(src, dist) {
30 dist = path.join(dist, 'source');
31 fs.ensureDirSync(dist);
32 fs.emptyDirSync(dist);
33 const unzipExec = shelljs_1.default.exec(`tar -zxvf ${src} -C ${dist}`, {
34 silent: true
35 });
36 if (unzipExec.code) {
37 console.log(chalk_1.default.bold.red(unzipExec.stderr));
38 }
39 try {
40 let files = glob_1.default.sync(dist + '/**', { nodir: true, dot: true });
41 files.forEach(function (el) {
42 let fileName = path.basename(el);
43 if (/\/package\.json$/.test(el)
44 || /\/\.\w+$/.test(el)) {
45 fs.moveSync(el, path.join(dist, '..', fileName));
46 }
47 });
48 }
49 catch (err) {
50 }
51}
52function downLoadGitRepo(target, branch) {
53 let cmd = `git clone ${target} -b ${branch}`;
54 let distDir = path.join(cwd, '.CACHE', 'download');
55 let gitRepoName = target.split('/').pop().replace(/\.git$/, '');
56 fs.removeSync(path.join(distDir, gitRepoName));
57 fs.ensureDirSync(distDir);
58 let std = shelljs_1.default.exec(cmd, {
59 cwd: distDir,
60 silent: true
61 });
62 if (/fatal:/.test(std.stderr)) {
63 console.log(chalk_1.default.bold.red(std.stderr));
64 process.exit(1);
65 }
66 console.log(chalk_1.default.green(`安装依赖包 ${gitRepoName} 成功.`));
67}
68function downLoadBinaryLib(lib) {
69 return __awaiter(this, void 0, void 0, function* () {
70 let [tarName, version] = lib.split('@');
71 let tarUrl = '';
72 let nanachiUserConfig = {};
73 try {
74 nanachiUserConfig = require(path.join(cwd, 'nanachi.config'));
75 }
76 catch (err) {
77 if (/SyntaxError/.test(err)) {
78 console.log(err);
79 }
80 }
81 let onInstallTarball = nanachiUserConfig.chaikaConfig && nanachiUserConfig.chaikaConfig.onInstallTarball || function () { return ''; };
82 tarUrl = onInstallTarball(tarName, version);
83 if (tarUrl) {
84 let axiosConfig = {
85 url: tarUrl,
86 type: 'GET',
87 responseType: 'arraybuffer'
88 };
89 let { data } = yield axios_1.default(axiosConfig);
90 let libDist = path.join(cwd, `.CACHE/lib/${path.basename(tarUrl)}`);
91 fs.ensureFileSync(libDist);
92 fs.writeFile(libDist, data, function (err) {
93 if (err) {
94 console.log(err);
95 return;
96 }
97 console.log(chalk_1.default.green(`安装依赖包 ${tarName}@${version} 成功.`));
98 unPack(libDist, path.join(cwd, `.CACHE/download/${tarName}`));
99 });
100 }
101 });
102}
103function downLoadConfigDepModule() {
104 var pkg = require(path.join(cwd, 'package.json'));
105 var depModules = pkg.modules || {};
106 let depKey = Object.keys(depModules);
107 if (!depKey.length) {
108 console.log(chalk_1.default.bold.red('未在package.json中发现拆库依赖包, 安装失败.'));
109 process.exit(1);
110 }
111 depKey.forEach(function (key) {
112 if (/\.git$/.test(key)) {
113 downLoadGitRepo(key, depModules[key]);
114 }
115 else {
116 downLoadBinaryLib(key + '@' + depModules[key]);
117 }
118 });
119}
120function default_1(name, opts) {
121 if (process.env.NANACHI_CHAIK_MODE != 'CHAIK_MODE') {
122 console.log(chalk_1.default.bold.red('需在package.json中配置{"nanachi": {"chaika_mode": true }}, 拆库开发功能请查阅文档: https://rubylouvre.github.io/nanachi/documents/chaika.html'));
123 process.exit(1);
124 }
125 let downloadInfo = {
126 type: '',
127 lib: ''
128 };
129 if (!name && !opts.branch) {
130 downloadInfo = {
131 type: 'all',
132 lib: ''
133 };
134 }
135 if (name && !/\.git$/.test(name)) {
136 downloadInfo = {
137 type: 'binary',
138 lib: name
139 };
140 }
141 if (/\.git$/.test(name) && opts.branch && typeof opts.branch === 'string') {
142 downloadInfo = {
143 type: 'git',
144 lib: name,
145 version: opts.branch
146 };
147 }
148 let { type, lib, version } = downloadInfo;
149 if (type === 'git') {
150 downLoadGitRepo(lib, version);
151 }
152 if (type === 'binary') {
153 downLoadBinaryLib(lib);
154 }
155 if (type === 'all') {
156 downLoadConfigDepModule();
157 }
158}
159exports.default = default_1;
160;