@my-devkit/cli 1.0.0 → 1.0.4
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +54 -0
- package/dist/index.js +31 -15
- package/dist/index.js.map +1 -1
- package/dist/replace-files.d.ts +2 -0
- package/dist/replace-files.js +60 -0
- package/dist/replace-files.js.map +1 -0
- package/dist/replace-tokens.d.ts +2 -0
- package/dist/replace-tokens.js +63 -0
- package/dist/replace-tokens.js.map +1 -0
- package/dist/switch-to-npm.d.ts +2 -0
- package/dist/switch-to-npm.js +104 -0
- package/dist/switch-to-npm.js.map +1 -0
- package/dist/switch-to-pnpm.d.ts +2 -0
- package/dist/switch-to-pnpm.js +86 -0
- package/dist/switch-to-pnpm.js.map +1 -0
- package/dist/utils/args.d.ts +1 -0
- package/dist/utils/args.js +12 -0
- package/dist/utils/args.js.map +1 -0
- package/dist/utils/config.d.ts +15 -0
- package/dist/utils/config.js +12 -0
- package/dist/utils/config.js.map +1 -0
- package/dist/utils/file-system.d.ts +6 -0
- package/dist/utils/file-system.js +162 -0
- package/dist/utils/file-system.js.map +1 -0
- package/dist/utils/gist.d.ts +23 -0
- package/dist/utils/gist.js +111 -0
- package/dist/utils/gist.js.map +1 -0
- package/dist/utils/index.d.ts +5 -0
- package/dist/utils/index.js +18 -0
- package/dist/utils/index.js.map +1 -0
- package/dist/utils/npm.d.ts +25 -0
- package/dist/utils/npm.js +372 -0
- package/dist/utils/npm.js.map +1 -0
- package/package.json +9 -6
- package/src/index.ts +18 -4
- package/src/replace-files.ts +18 -0
- package/src/replace-tokens.ts +20 -0
- package/src/switch-to-npm.ts +28 -0
- package/src/switch-to-pnpm.ts +19 -0
- package/src/utils/args.ts +6 -0
- package/src/utils/config.ts +25 -0
- package/src/utils/file-system.ts +61 -0
- package/src/utils/gist.ts +62 -0
- package/src/utils/index.ts +5 -0
- package/src/utils/npm.ts +163 -0
- package/tsconfig.json +1 -1
|
@@ -0,0 +1,372 @@
|
|
|
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 __spreadArray = (this && this.__spreadArray) || function (to, from, pack) {
|
|
39
|
+
if (pack || arguments.length === 2) for (var i = 0, l = from.length, ar; i < l; i++) {
|
|
40
|
+
if (ar || !(i in from)) {
|
|
41
|
+
if (!ar) ar = Array.prototype.slice.call(from, 0, i);
|
|
42
|
+
ar[i] = from[i];
|
|
43
|
+
}
|
|
44
|
+
}
|
|
45
|
+
return to.concat(ar || Array.prototype.slice.call(from));
|
|
46
|
+
};
|
|
47
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
48
|
+
exports.Npm = void 0;
|
|
49
|
+
var child_process_1 = require("child_process");
|
|
50
|
+
var fs = require("fs");
|
|
51
|
+
var file_system_1 = require("./file-system");
|
|
52
|
+
var gist_1 = require("./gist");
|
|
53
|
+
var Npm = /** @class */ (function () {
|
|
54
|
+
function Npm(prefix) {
|
|
55
|
+
this.prefix = prefix;
|
|
56
|
+
this._verbose = false;
|
|
57
|
+
}
|
|
58
|
+
Npm.prefix = function (prefix) {
|
|
59
|
+
return new Npm(prefix);
|
|
60
|
+
};
|
|
61
|
+
Npm.prototype.verbose = function (verbose) {
|
|
62
|
+
if (verbose === void 0) { verbose = true; }
|
|
63
|
+
this._verbose = verbose;
|
|
64
|
+
};
|
|
65
|
+
Npm.prototype.publishIfNeeded = function () {
|
|
66
|
+
return __awaiter(this, void 0, void 0, function () {
|
|
67
|
+
var _a, _b, localCheckSum, remoteCheckSum, _c, _d, _e, _f, _g, _h, _j, _k;
|
|
68
|
+
return __generator(this, function (_l) {
|
|
69
|
+
switch (_l.label) {
|
|
70
|
+
case 0:
|
|
71
|
+
_a = this.write;
|
|
72
|
+
_b = ['version'];
|
|
73
|
+
return [4 /*yield*/, this.getPublishedVersion()];
|
|
74
|
+
case 1: return [4 /*yield*/, _a.apply(this, _b.concat([_l.sent()]))];
|
|
75
|
+
case 2:
|
|
76
|
+
_l.sent();
|
|
77
|
+
return [4 /*yield*/, this.getLocalChecksum()];
|
|
78
|
+
case 3:
|
|
79
|
+
localCheckSum = _l.sent();
|
|
80
|
+
return [4 /*yield*/, this.getRemoteChecksum()];
|
|
81
|
+
case 4:
|
|
82
|
+
remoteCheckSum = _l.sent();
|
|
83
|
+
if (!(localCheckSum === remoteCheckSum)) return [3 /*break*/, 6];
|
|
84
|
+
_d = (_c = console).log;
|
|
85
|
+
_e = "Package ".concat;
|
|
86
|
+
return [4 /*yield*/, this.getName()];
|
|
87
|
+
case 5:
|
|
88
|
+
_d.apply(_c, [_e.apply("Package ", [_l.sent(), " is already up to date!"])]);
|
|
89
|
+
return [2 /*return*/];
|
|
90
|
+
case 6: return [4 /*yield*/, this.patch()];
|
|
91
|
+
case 7:
|
|
92
|
+
_l.sent();
|
|
93
|
+
return [4 /*yield*/, this.publish()];
|
|
94
|
+
case 8:
|
|
95
|
+
_l.sent();
|
|
96
|
+
return [4 /*yield*/, this.updateRemoteChecksum(remoteCheckSum)];
|
|
97
|
+
case 9:
|
|
98
|
+
_l.sent();
|
|
99
|
+
_g = (_f = console).log;
|
|
100
|
+
_j = "Package ".concat;
|
|
101
|
+
return [4 /*yield*/, this.getName()];
|
|
102
|
+
case 10:
|
|
103
|
+
_k = (_h = _j.apply("Package ", [_l.sent(), " "])).concat;
|
|
104
|
+
return [4 /*yield*/, this.getLocalVersion()];
|
|
105
|
+
case 11:
|
|
106
|
+
_g.apply(_f, [_k.apply(_h, [_l.sent(), " as been published!"])]);
|
|
107
|
+
return [2 /*return*/];
|
|
108
|
+
}
|
|
109
|
+
});
|
|
110
|
+
});
|
|
111
|
+
};
|
|
112
|
+
Npm.prototype.clean = function () {
|
|
113
|
+
return __awaiter(this, void 0, void 0, function () {
|
|
114
|
+
return __generator(this, function (_a) {
|
|
115
|
+
this.log("Remove ".concat(this.prefix, "/node_modules"));
|
|
116
|
+
if (fs.existsSync("".concat(this.prefix, "/node_modules"))) {
|
|
117
|
+
fs.rmSync("".concat(this.prefix, "/node_modules"), { recursive: true, force: true });
|
|
118
|
+
}
|
|
119
|
+
this.log("Remove ".concat(this.prefix, "/dist"));
|
|
120
|
+
if (fs.existsSync("".concat(this.prefix, "/dist"))) {
|
|
121
|
+
fs.rmSync("".concat(this.prefix, "/dist"), { recursive: true, force: true });
|
|
122
|
+
}
|
|
123
|
+
fs.mkdirSync("".concat(this.prefix, "/dist"));
|
|
124
|
+
return [2 /*return*/];
|
|
125
|
+
});
|
|
126
|
+
});
|
|
127
|
+
};
|
|
128
|
+
Npm.prototype.removePackageLock = function () {
|
|
129
|
+
return __awaiter(this, void 0, void 0, function () {
|
|
130
|
+
return __generator(this, function (_a) {
|
|
131
|
+
if (fs.existsSync("".concat(this.prefix, "/package-lock.json"))) {
|
|
132
|
+
fs.rmSync("".concat(this.prefix, "/package-lock.json"));
|
|
133
|
+
}
|
|
134
|
+
return [2 /*return*/];
|
|
135
|
+
});
|
|
136
|
+
});
|
|
137
|
+
};
|
|
138
|
+
Npm.prototype.install = function () {
|
|
139
|
+
return __awaiter(this, void 0, void 0, function () {
|
|
140
|
+
return __generator(this, function (_a) {
|
|
141
|
+
switch (_a.label) {
|
|
142
|
+
case 0:
|
|
143
|
+
this.log('Install package dependencies');
|
|
144
|
+
return [4 /*yield*/, this.execCmd("npm install --prefix=".concat(this.prefix, " --silent"))];
|
|
145
|
+
case 1:
|
|
146
|
+
_a.sent();
|
|
147
|
+
return [2 /*return*/];
|
|
148
|
+
}
|
|
149
|
+
});
|
|
150
|
+
});
|
|
151
|
+
};
|
|
152
|
+
Npm.prototype.build = function () {
|
|
153
|
+
return __awaiter(this, void 0, void 0, function () {
|
|
154
|
+
return __generator(this, function (_a) {
|
|
155
|
+
switch (_a.label) {
|
|
156
|
+
case 0:
|
|
157
|
+
this.log('Build package');
|
|
158
|
+
return [4 /*yield*/, this.execCmd("npm run build --prefix=".concat(this.prefix, " --silent"))];
|
|
159
|
+
case 1:
|
|
160
|
+
_a.sent();
|
|
161
|
+
return [2 /*return*/];
|
|
162
|
+
}
|
|
163
|
+
});
|
|
164
|
+
});
|
|
165
|
+
};
|
|
166
|
+
Npm.prototype.patch = function () {
|
|
167
|
+
return __awaiter(this, void 0, void 0, function () {
|
|
168
|
+
var _a, _b, _c, _d, _e, _f;
|
|
169
|
+
return __generator(this, function (_g) {
|
|
170
|
+
switch (_g.label) {
|
|
171
|
+
case 0:
|
|
172
|
+
_a = this.log;
|
|
173
|
+
_c = "Patch ".concat;
|
|
174
|
+
return [4 /*yield*/, this.getName()];
|
|
175
|
+
case 1:
|
|
176
|
+
_d = (_b = _c.apply("Patch ", [_g.sent(), ": "])).concat;
|
|
177
|
+
return [4 /*yield*/, this.getLocalVersion()];
|
|
178
|
+
case 2:
|
|
179
|
+
_a.apply(this, [_d.apply(_b, [_g.sent()])]);
|
|
180
|
+
return [4 /*yield*/, this.execCmd("npm version patch --prefix=".concat(this.prefix))];
|
|
181
|
+
case 3:
|
|
182
|
+
_g.sent();
|
|
183
|
+
_e = this.log;
|
|
184
|
+
_f = "New version is: ".concat;
|
|
185
|
+
return [4 /*yield*/, this.getLocalVersion()];
|
|
186
|
+
case 4:
|
|
187
|
+
_e.apply(this, [_f.apply("New version is: ", [_g.sent()])]);
|
|
188
|
+
return [2 /*return*/];
|
|
189
|
+
}
|
|
190
|
+
});
|
|
191
|
+
});
|
|
192
|
+
};
|
|
193
|
+
Npm.prototype.publish = function () {
|
|
194
|
+
return __awaiter(this, void 0, void 0, function () {
|
|
195
|
+
var _a, _b, _c, _d;
|
|
196
|
+
return __generator(this, function (_e) {
|
|
197
|
+
switch (_e.label) {
|
|
198
|
+
case 0:
|
|
199
|
+
_a = this.log;
|
|
200
|
+
_c = "Publish ".concat;
|
|
201
|
+
return [4 /*yield*/, this.getName()];
|
|
202
|
+
case 1:
|
|
203
|
+
_d = (_b = _c.apply("Publish ", [_e.sent(), ": "])).concat;
|
|
204
|
+
return [4 /*yield*/, this.getLocalVersion()];
|
|
205
|
+
case 2:
|
|
206
|
+
_a.apply(this, [_d.apply(_b, [_e.sent()])]);
|
|
207
|
+
return [4 /*yield*/, this.execCmd("cd ".concat(this.prefix, " && npm publish --access public --silent"))];
|
|
208
|
+
case 3:
|
|
209
|
+
_e.sent();
|
|
210
|
+
return [2 /*return*/];
|
|
211
|
+
}
|
|
212
|
+
});
|
|
213
|
+
});
|
|
214
|
+
};
|
|
215
|
+
Npm.prototype.getName = function () {
|
|
216
|
+
return __awaiter(this, void 0, void 0, function () {
|
|
217
|
+
return __generator(this, function (_a) {
|
|
218
|
+
return [2 /*return*/, this.read('name')];
|
|
219
|
+
});
|
|
220
|
+
});
|
|
221
|
+
};
|
|
222
|
+
Npm.prototype.getLocalVersion = function () {
|
|
223
|
+
return __awaiter(this, void 0, void 0, function () {
|
|
224
|
+
return __generator(this, function (_a) {
|
|
225
|
+
return [2 /*return*/, this.read('version')];
|
|
226
|
+
});
|
|
227
|
+
});
|
|
228
|
+
};
|
|
229
|
+
Npm.prototype.getPublishedVersion = function () {
|
|
230
|
+
return __awaiter(this, void 0, void 0, function () {
|
|
231
|
+
var packageName;
|
|
232
|
+
return __generator(this, function (_a) {
|
|
233
|
+
switch (_a.label) {
|
|
234
|
+
case 0: return [4 /*yield*/, this.getName()];
|
|
235
|
+
case 1:
|
|
236
|
+
packageName = _a.sent();
|
|
237
|
+
return [2 /*return*/, this.execCmd("npm show ".concat(packageName, " version"))];
|
|
238
|
+
}
|
|
239
|
+
});
|
|
240
|
+
});
|
|
241
|
+
};
|
|
242
|
+
Npm.prototype.getLocalChecksum = function () {
|
|
243
|
+
return __awaiter(this, void 0, void 0, function () {
|
|
244
|
+
var version, checksum;
|
|
245
|
+
return __generator(this, function (_a) {
|
|
246
|
+
switch (_a.label) {
|
|
247
|
+
case 0: return [4 /*yield*/, this.read('version')];
|
|
248
|
+
case 1:
|
|
249
|
+
version = _a.sent();
|
|
250
|
+
return [4 /*yield*/, this.write('version', '1.0.1')];
|
|
251
|
+
case 2:
|
|
252
|
+
_a.sent();
|
|
253
|
+
checksum = file_system_1.FileSystem.getChecksum(["".concat(this.prefix, "/dist"), "".concat(this.prefix, "/src"), "".concat(this.prefix, "/package.json")]);
|
|
254
|
+
return [4 /*yield*/, this.write('version', version)];
|
|
255
|
+
case 3:
|
|
256
|
+
_a.sent();
|
|
257
|
+
return [2 /*return*/, checksum];
|
|
258
|
+
}
|
|
259
|
+
});
|
|
260
|
+
});
|
|
261
|
+
};
|
|
262
|
+
Npm.prototype.getRemoteChecksum = function () {
|
|
263
|
+
return __awaiter(this, void 0, void 0, function () {
|
|
264
|
+
var packageName;
|
|
265
|
+
return __generator(this, function (_a) {
|
|
266
|
+
switch (_a.label) {
|
|
267
|
+
case 0: return [4 /*yield*/, this.getName()];
|
|
268
|
+
case 1:
|
|
269
|
+
packageName = _a.sent();
|
|
270
|
+
return [2 /*return*/, gist_1.Gist.getPackageChecksum(packageName)];
|
|
271
|
+
}
|
|
272
|
+
});
|
|
273
|
+
});
|
|
274
|
+
};
|
|
275
|
+
Npm.prototype.updateRemoteChecksum = function (checksum) {
|
|
276
|
+
return __awaiter(this, void 0, void 0, function () {
|
|
277
|
+
var packageName;
|
|
278
|
+
return __generator(this, function (_a) {
|
|
279
|
+
switch (_a.label) {
|
|
280
|
+
case 0: return [4 /*yield*/, this.getName()];
|
|
281
|
+
case 1:
|
|
282
|
+
packageName = _a.sent();
|
|
283
|
+
this.log("Set new package checksum: ".concat(packageName, " = ").concat(checksum));
|
|
284
|
+
return [4 /*yield*/, gist_1.Gist.setPackageChecksum(packageName, checksum)];
|
|
285
|
+
case 2:
|
|
286
|
+
_a.sent();
|
|
287
|
+
return [2 /*return*/];
|
|
288
|
+
}
|
|
289
|
+
});
|
|
290
|
+
});
|
|
291
|
+
};
|
|
292
|
+
Npm.prototype.updateDependency = function (packageName, newVersion) {
|
|
293
|
+
return __awaiter(this, void 0, void 0, function () {
|
|
294
|
+
var _i, _a, dependency, currentVersion;
|
|
295
|
+
return __generator(this, function (_b) {
|
|
296
|
+
switch (_b.label) {
|
|
297
|
+
case 0:
|
|
298
|
+
_i = 0, _a = ['dependencies', 'devDependencies', 'peerDependencies'];
|
|
299
|
+
_b.label = 1;
|
|
300
|
+
case 1:
|
|
301
|
+
if (!(_i < _a.length)) return [3 /*break*/, 5];
|
|
302
|
+
dependency = _a[_i];
|
|
303
|
+
return [4 /*yield*/, this.read([dependency, packageName])];
|
|
304
|
+
case 2:
|
|
305
|
+
currentVersion = _b.sent();
|
|
306
|
+
if (!currentVersion) return [3 /*break*/, 4];
|
|
307
|
+
return [4 /*yield*/, this.write([dependency, packageName], newVersion)];
|
|
308
|
+
case 3:
|
|
309
|
+
_b.sent();
|
|
310
|
+
_b.label = 4;
|
|
311
|
+
case 4:
|
|
312
|
+
_i++;
|
|
313
|
+
return [3 /*break*/, 1];
|
|
314
|
+
case 5: return [2 /*return*/];
|
|
315
|
+
}
|
|
316
|
+
});
|
|
317
|
+
});
|
|
318
|
+
};
|
|
319
|
+
Npm.prototype.read = function (properties) {
|
|
320
|
+
return __awaiter(this, void 0, void 0, function () {
|
|
321
|
+
var object, index;
|
|
322
|
+
return __generator(this, function (_a) {
|
|
323
|
+
properties = Array.isArray(properties) ? properties : [properties];
|
|
324
|
+
object = JSON.parse(fs.readFileSync("".concat(this.prefix, "/package.json"), 'utf8'));
|
|
325
|
+
index = 0;
|
|
326
|
+
while (object != null && index < properties.length) {
|
|
327
|
+
object = object[properties[index++]];
|
|
328
|
+
}
|
|
329
|
+
return [2 /*return*/, object];
|
|
330
|
+
});
|
|
331
|
+
});
|
|
332
|
+
};
|
|
333
|
+
Npm.prototype.write = function (properties, value) {
|
|
334
|
+
return __awaiter(this, void 0, void 0, function () {
|
|
335
|
+
var data, object, index;
|
|
336
|
+
return __generator(this, function (_a) {
|
|
337
|
+
properties = Array.isArray(properties) ? properties : [properties];
|
|
338
|
+
this.log("Write ".concat(properties.join('->'), " = ").concat(value, " in ").concat(this.prefix, "/package.json"));
|
|
339
|
+
data = JSON.parse(fs.readFileSync("".concat(this.prefix, "/package.json"), 'utf8'));
|
|
340
|
+
object = data;
|
|
341
|
+
index = 0;
|
|
342
|
+
while (object != null && index < (properties.length - 1)) {
|
|
343
|
+
object = object[properties[index++]];
|
|
344
|
+
}
|
|
345
|
+
object[properties[properties.length - 1]] = value;
|
|
346
|
+
fs.writeFileSync("".concat(this.prefix, "/package.json"), JSON.stringify(data, null, 4));
|
|
347
|
+
return [2 /*return*/];
|
|
348
|
+
});
|
|
349
|
+
});
|
|
350
|
+
};
|
|
351
|
+
Npm.prototype.execCmd = function (cmd) {
|
|
352
|
+
return __awaiter(this, void 0, void 0, function () {
|
|
353
|
+
var response;
|
|
354
|
+
return __generator(this, function (_a) {
|
|
355
|
+
response = (0, child_process_1.execSync)(cmd, {});
|
|
356
|
+
return [2 /*return*/, response.toString().trim()];
|
|
357
|
+
});
|
|
358
|
+
});
|
|
359
|
+
};
|
|
360
|
+
Npm.prototype.log = function () {
|
|
361
|
+
var messages = [];
|
|
362
|
+
for (var _i = 0; _i < arguments.length; _i++) {
|
|
363
|
+
messages[_i] = arguments[_i];
|
|
364
|
+
}
|
|
365
|
+
if (this._verbose) {
|
|
366
|
+
console.log.apply(console, __spreadArray([' - '], messages, false));
|
|
367
|
+
}
|
|
368
|
+
};
|
|
369
|
+
return Npm;
|
|
370
|
+
}());
|
|
371
|
+
exports.Npm = Npm;
|
|
372
|
+
//# sourceMappingURL=npm.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"npm.js","sourceRoot":"","sources":["../../src/utils/npm.ts"],"names":[],"mappings":"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"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@my-devkit/cli",
|
|
3
|
-
"version": "1.0.
|
|
3
|
+
"version": "1.0.4",
|
|
4
4
|
"description": "My Devkit: command line tools for mdk apps",
|
|
5
5
|
"main": "dist/index.js",
|
|
6
6
|
"typings": "dist/index.d.ts",
|
|
@@ -15,15 +15,18 @@
|
|
|
15
15
|
"url": "https://github.com/BUONJG/my-devkit.git"
|
|
16
16
|
},
|
|
17
17
|
"scripts": {
|
|
18
|
-
"
|
|
19
|
-
"
|
|
20
|
-
"
|
|
18
|
+
"clean": "rimraf ./dist",
|
|
19
|
+
"build": "npm run clean && tsc",
|
|
20
|
+
"watch": "npm run clean && tsc -w"
|
|
21
|
+
},
|
|
22
|
+
"dependencies": {
|
|
23
|
+
"checksum": "1.0.0",
|
|
24
|
+
"got": "11.8.2"
|
|
21
25
|
},
|
|
22
|
-
"dependencies": {},
|
|
23
|
-
"peerDependencies": {},
|
|
24
26
|
"devDependencies": {
|
|
25
27
|
"@types/node": "^14.14.19",
|
|
26
28
|
"eslint": "7.26.0",
|
|
29
|
+
"rimraf": "^3.0.2",
|
|
27
30
|
"typescript": "^4.5.2"
|
|
28
31
|
}
|
|
29
32
|
}
|
package/src/index.ts
CHANGED
|
@@ -2,6 +2,10 @@
|
|
|
2
2
|
import { execSync } from 'child_process';
|
|
3
3
|
|
|
4
4
|
import clean from './clean';
|
|
5
|
+
import replaceFiles from './replace-files';
|
|
6
|
+
import replaceTokens from './replace-tokens';
|
|
7
|
+
import switchToNpm from './switch-to-npm';
|
|
8
|
+
import switchToPnpm from './switch-to-pnpm';
|
|
5
9
|
|
|
6
10
|
const run = async () => {
|
|
7
11
|
const [, , ...args] = process.argv;
|
|
@@ -12,18 +16,28 @@ const run = async () => {
|
|
|
12
16
|
|
|
13
17
|
switch (args[0]) {
|
|
14
18
|
case 'build':
|
|
15
|
-
console.log(`Running clean & build`);
|
|
16
19
|
await clean();
|
|
17
20
|
execSync(`npx tsc`);
|
|
18
21
|
break;
|
|
19
22
|
case 'watch':
|
|
20
|
-
console.log(`Running clean & build in watch mode`);
|
|
21
23
|
await clean();
|
|
22
24
|
execSync(`npx tsc -w`);
|
|
23
25
|
break;
|
|
24
26
|
|
|
25
|
-
case '
|
|
26
|
-
|
|
27
|
+
case 'switch-to-pnpm':
|
|
28
|
+
await switchToPnpm();
|
|
29
|
+
break;
|
|
30
|
+
|
|
31
|
+
case 'switch-to-npm':
|
|
32
|
+
await switchToNpm();
|
|
33
|
+
break;
|
|
34
|
+
|
|
35
|
+
case 'replace-files':
|
|
36
|
+
await replaceFiles()
|
|
37
|
+
break;
|
|
38
|
+
|
|
39
|
+
case 'replace-tokens':
|
|
40
|
+
await replaceTokens()
|
|
27
41
|
break;
|
|
28
42
|
|
|
29
43
|
default:
|
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
import * as fs from 'fs';
|
|
2
|
+
import * as path from 'path';
|
|
3
|
+
|
|
4
|
+
import { config } from './utils';
|
|
5
|
+
|
|
6
|
+
const replaceFiles = async () => {
|
|
7
|
+
for (const pkg of config().packages) {
|
|
8
|
+
if (pkg.fileReplacements) {
|
|
9
|
+
for (const fileReplacement of pkg.fileReplacements) {
|
|
10
|
+
const target = path.join(pkg.path, fileReplacement.replace);
|
|
11
|
+
const source = path.join(pkg.path, fileReplacement.with);
|
|
12
|
+
fs.writeFileSync(target, fs.readFileSync(source).toString());
|
|
13
|
+
}
|
|
14
|
+
}
|
|
15
|
+
}
|
|
16
|
+
};
|
|
17
|
+
|
|
18
|
+
export default replaceFiles;
|
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
import * as fs from 'fs';
|
|
2
|
+
import * as path from 'path';
|
|
3
|
+
|
|
4
|
+
import { config } from './utils';
|
|
5
|
+
|
|
6
|
+
const replaceTokens = async () => {
|
|
7
|
+
for (const pkg of config().packages) {
|
|
8
|
+
if (pkg.tokensReplacements) {
|
|
9
|
+
for (const file of pkg.tokensReplacements) {
|
|
10
|
+
const fileLocation = path.join(pkg.path, file);
|
|
11
|
+
for (const name of Object.keys(process.env)) {
|
|
12
|
+
const content = fs.readFileSync(fileLocation).toString();
|
|
13
|
+
fs.writeFileSync(fileLocation, content.replace(new RegExp(`%#${name}#%`, 'g'), process.env[name]));
|
|
14
|
+
}
|
|
15
|
+
}
|
|
16
|
+
}
|
|
17
|
+
}
|
|
18
|
+
};
|
|
19
|
+
|
|
20
|
+
export default replaceTokens;
|
|
@@ -0,0 +1,28 @@
|
|
|
1
|
+
import { config, Npm } from './utils';
|
|
2
|
+
|
|
3
|
+
const switchToNpm = async () => {
|
|
4
|
+
for (const pkg of config().packages) {
|
|
5
|
+
const npm = Npm.prefix(pkg.path);
|
|
6
|
+
await npm.clean();
|
|
7
|
+
await npm.write(['scripts', 'preinstall'], undefined);
|
|
8
|
+
}
|
|
9
|
+
|
|
10
|
+
for (const pkg of config().packages) {
|
|
11
|
+
const npm = Npm.prefix(pkg.path);
|
|
12
|
+
await npm.install();
|
|
13
|
+
|
|
14
|
+
if (pkg.deploy) {
|
|
15
|
+
await npm.build();
|
|
16
|
+
await npm.publishIfNeeded();
|
|
17
|
+
|
|
18
|
+
const packageName = await npm.getName();
|
|
19
|
+
const newVersion = await npm.getPublishedVersion();
|
|
20
|
+
|
|
21
|
+
for (const otherPackage of config().packages) {
|
|
22
|
+
await Npm.prefix(otherPackage.path).updateDependency(packageName, newVersion);
|
|
23
|
+
}
|
|
24
|
+
}
|
|
25
|
+
}
|
|
26
|
+
};
|
|
27
|
+
|
|
28
|
+
export default switchToNpm;
|
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
import { config, Npm } from './utils';
|
|
2
|
+
|
|
3
|
+
const switchToPnpm = async () => {
|
|
4
|
+
for (const pkg of config().packages) {
|
|
5
|
+
const npm = Npm.prefix(pkg.path);
|
|
6
|
+
await npm.clean();
|
|
7
|
+
await npm.removePackageLock();
|
|
8
|
+
await npm.write('version', '1.0.0');
|
|
9
|
+
await npm.write(['scripts', 'preinstall'], 'npx only-allow pnpm');
|
|
10
|
+
|
|
11
|
+
const packageName = await npm.getName();
|
|
12
|
+
|
|
13
|
+
for (const otherPackage of config().packages) {
|
|
14
|
+
await Npm.prefix(otherPackage.path).updateDependency(packageName, 'workspace:^1.0.0');
|
|
15
|
+
}
|
|
16
|
+
}
|
|
17
|
+
};
|
|
18
|
+
|
|
19
|
+
export default switchToPnpm;
|
|
@@ -0,0 +1,6 @@
|
|
|
1
|
+
const _args = process.argv.filter(arg => arg.startsWith('-'))
|
|
2
|
+
.map((name) => ({ name, value: process.argv[process.argv.indexOf(name) + 1] }));
|
|
3
|
+
|
|
4
|
+
export const args = (option: string, defaultValue: string = null): string => {
|
|
5
|
+
return _args.find(arg => arg.name === option)?.value || defaultValue;
|
|
6
|
+
}
|
|
@@ -0,0 +1,25 @@
|
|
|
1
|
+
import * as fs from 'fs';
|
|
2
|
+
|
|
3
|
+
interface ConfigPackageFileReplacement {
|
|
4
|
+
replace: string;
|
|
5
|
+
with: string;
|
|
6
|
+
}
|
|
7
|
+
|
|
8
|
+
interface ConfigPackage {
|
|
9
|
+
path: string;
|
|
10
|
+
deploy: boolean;
|
|
11
|
+
tokensReplacements?: string[];
|
|
12
|
+
fileReplacements?: ConfigPackageFileReplacement[];
|
|
13
|
+
}
|
|
14
|
+
|
|
15
|
+
interface Config {
|
|
16
|
+
packages: ConfigPackage[];
|
|
17
|
+
}
|
|
18
|
+
|
|
19
|
+
export const config = (): Config => {
|
|
20
|
+
if (!fs.existsSync('./my-devkit.json')) {
|
|
21
|
+
throw new Error('File my-devkit.json not found!');
|
|
22
|
+
}
|
|
23
|
+
|
|
24
|
+
return JSON.parse(fs.readFileSync('./my-devkit.json', { encoding: 'utf-8' }));
|
|
25
|
+
}
|
|
@@ -0,0 +1,61 @@
|
|
|
1
|
+
import * as crypto from 'crypto';
|
|
2
|
+
import * as fs from 'fs';
|
|
3
|
+
import { resolve } from 'path';
|
|
4
|
+
import { promisify } from 'util';
|
|
5
|
+
|
|
6
|
+
const fsReaddir = promisify(fs.readdir);
|
|
7
|
+
const fsExists = promisify(fs.exists);
|
|
8
|
+
const fsReadFile = promisify(fs.readFile);
|
|
9
|
+
const fsStat = promisify(fs.stat);
|
|
10
|
+
|
|
11
|
+
export class FileSystem {
|
|
12
|
+
|
|
13
|
+
public static async getChecksum(paths: string[]): Promise<string> {
|
|
14
|
+
const files: string[] = [];
|
|
15
|
+
for (const path of paths) {
|
|
16
|
+
files.push(...await this.getFiles(path));
|
|
17
|
+
}
|
|
18
|
+
|
|
19
|
+
console.log(JSON.stringify(files));
|
|
20
|
+
|
|
21
|
+
const checkSums: string[] = [];
|
|
22
|
+
for (const file of files.sort()) {
|
|
23
|
+
checkSums.push(await this.getFileChecksum(file));
|
|
24
|
+
}
|
|
25
|
+
console.log(JSON.stringify(checkSums));
|
|
26
|
+
|
|
27
|
+
return this.getValueChecksum(JSON.stringify(checkSums));
|
|
28
|
+
}
|
|
29
|
+
|
|
30
|
+
public static async getFiles(directory: string): Promise<string[]> {
|
|
31
|
+
if (!(await fsExists(directory))) {
|
|
32
|
+
console.log(`Warning: ${directory} does not exists`);
|
|
33
|
+
return [];
|
|
34
|
+
}
|
|
35
|
+
|
|
36
|
+
if (!(await fsStat(directory)).isDirectory()) {
|
|
37
|
+
return [directory];
|
|
38
|
+
}
|
|
39
|
+
|
|
40
|
+
const files: string[] = [];
|
|
41
|
+
for (const file of await fsReaddir(directory)) {
|
|
42
|
+
const completePath = resolve(directory, file);
|
|
43
|
+
if ((await fsStat(completePath)).isDirectory()) {
|
|
44
|
+
files.push(...await this.getFiles(completePath));
|
|
45
|
+
} else {
|
|
46
|
+
files.push(completePath);
|
|
47
|
+
}
|
|
48
|
+
}
|
|
49
|
+
return files;
|
|
50
|
+
}
|
|
51
|
+
|
|
52
|
+
public static async getFileChecksum(fileLocation: string): Promise<string> {
|
|
53
|
+
return this.getValueChecksum(await fsReadFile(fileLocation, 'utf8'));
|
|
54
|
+
}
|
|
55
|
+
|
|
56
|
+
private static getValueChecksum(value: string): string {
|
|
57
|
+
const hash = crypto.createHash('sha1');
|
|
58
|
+
hash.update(value)
|
|
59
|
+
return hash.digest('hex');
|
|
60
|
+
}
|
|
61
|
+
}
|