typia 3.5.0 → 3.5.1-dev.20220216
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 +13 -21
- package/lib/executable/internal/ArgumentParser.d.ts +9 -0
- package/lib/executable/internal/ArgumentParser.js +265 -0
- package/lib/executable/internal/ArgumentParser.js.map +1 -0
- package/lib/executable/internal/CommandExecutor.d.ts +3 -0
- package/lib/executable/internal/CommandExecutor.js +17 -0
- package/lib/executable/internal/CommandExecutor.js.map +1 -0
- package/lib/executable/internal/PackageManager.d.ts +27 -0
- package/lib/executable/internal/PackageManager.js +141 -0
- package/lib/executable/internal/PackageManager.js.map +1 -0
- package/lib/executable/internal/PluginConfigurator.d.ts +5 -0
- package/lib/executable/internal/PluginConfigurator.js +158 -0
- package/lib/executable/internal/PluginConfigurator.js.map +1 -0
- package/lib/executable/typia.js +43 -22
- package/lib/executable/typia.js.map +1 -1
- package/lib/transform.d.ts +2 -1
- package/lib/transform.js +2 -0
- package/lib/transform.js.map +1 -1
- package/package.json +10 -5
- package/src/executable/internal/ArgumentParser.ts +143 -0
- package/src/executable/internal/CommandExecutor.ts +8 -0
- package/src/executable/internal/PackageManager.ts +99 -0
- package/src/executable/internal/PluginConfigurator.ts +96 -0
- package/src/executable/typia.ts +40 -17
- package/src/transform.ts +2 -1
- package/lib/executable/internal/CommandParser.d.ts +0 -3
- package/lib/executable/internal/CommandParser.js +0 -21
- package/lib/executable/internal/CommandParser.js.map +0 -1
- package/lib/executable/internal/TypiaSetupWizard.d.ts +0 -8
- package/lib/executable/internal/TypiaSetupWizard.js +0 -244
- package/lib/executable/internal/TypiaSetupWizard.js.map +0 -1
- package/src/executable/internal/CommandParser.ts +0 -15
- package/src/executable/internal/TypiaSetupWizard.ts +0 -182
package/README.md
CHANGED
|
@@ -24,9 +24,9 @@ export function assertStringify<T>(input: T): string; // safe and faster
|
|
|
24
24
|
// +) stringify, isStringify, validateStringify
|
|
25
25
|
|
|
26
26
|
// MISC
|
|
27
|
-
export function random<T>(): T
|
|
28
|
-
export function clone<T>(input: T): Primitive<T>;
|
|
29
|
-
export function prune<T extends object>(input: T): void;
|
|
27
|
+
export function random<T>(): Primitive<T>; // generate random data
|
|
28
|
+
export function clone<T>(input: T): Primitive<T>; // hard copy
|
|
29
|
+
export function prune<T extends object>(input: T): void; // erase extra props
|
|
30
30
|
// +) isClone, assertClone, validateClone
|
|
31
31
|
// +) isPrune, assertPrune, validatePrune
|
|
32
32
|
```
|
|
@@ -67,18 +67,7 @@ npx typia setup
|
|
|
67
67
|
|
|
68
68
|
Just type `npx typia setup`, that's all.
|
|
69
69
|
|
|
70
|
-
|
|
71
|
-
|
|
72
|
-
```bash
|
|
73
|
-
npx typia setup --manager npm
|
|
74
|
-
npx typia setup --manager pnpm
|
|
75
|
-
npx typia setup --manager yarn
|
|
76
|
-
|
|
77
|
-
npx typia setup --project tsconfig.json
|
|
78
|
-
npx typia setup --project tsconfig.test.json
|
|
79
|
-
```
|
|
80
|
-
|
|
81
|
-
After the setup, you can compile `typia` utilization code by using `ttsc` ([`ttypescript`](https://github.com/cevek/ttypescript)) command. If you want to run your TypeScript file directly through `ts-node`, add `-C ttypescript` argument like below:
|
|
70
|
+
If you've installed [ttypescript](https://github.com/cevek/ttypescript) build during setup, you have to compile `typia` utilization code through `ttsc` command instead of `tsc`. Otherwise, you've chosen [ts-patch](https://github.com/nonara/ts-patch), you can use original `tsc` command.
|
|
82
71
|
|
|
83
72
|
```bash
|
|
84
73
|
# COMPILE THROUGH TTYPESCRIPT
|
|
@@ -97,12 +86,12 @@ If you want to install and setup `typia` manually, read [Guide Documents - Setup
|
|
|
97
86
|
- [vite](https://github.com/samchon/typia/wiki/Setup#vite)
|
|
98
87
|
- [webpack](https://github.com/samchon/typia/wiki/Setup#webpack)
|
|
99
88
|
|
|
100
|
-
Also, by [Guide Documents - Setup](https://github.com/samchon/typia/wiki/Setup) section, you can learn how to use pure TypeScript compiler `tsc` through [`ts-patch`](https://github.com/nonara/ts-patch), instead of using the `ttypescript` compiler with `ttsc` command.
|
|
101
|
-
|
|
102
89
|
### Vite
|
|
103
90
|
When you want to setup `typia` on your frontend project with [`vite`](https://vitejs.dev/), just configure `vite.config.ts` like below.
|
|
104
91
|
|
|
105
|
-
|
|
92
|
+
Also, don't forget running [Setup Wizard](#setup-wizard) before.
|
|
93
|
+
|
|
94
|
+
If you've chosen [ts-patch](https://github.com/nonara/ts-patch) compiler, just call only `typescript()` function.
|
|
106
95
|
|
|
107
96
|
```typescript
|
|
108
97
|
import { defineConfig } from "vite";
|
|
@@ -114,9 +103,12 @@ import ttsc from "ttypescript";
|
|
|
114
103
|
export default defineConfig({
|
|
115
104
|
plugins: [
|
|
116
105
|
react(),
|
|
106
|
+
// when using "ttypescript"
|
|
117
107
|
typescript({
|
|
118
108
|
typescript: ttsc,
|
|
119
|
-
})
|
|
109
|
+
}),
|
|
110
|
+
// otherwise using "ts-patch"
|
|
111
|
+
typescript()
|
|
120
112
|
]
|
|
121
113
|
});
|
|
122
114
|
```
|
|
@@ -218,9 +210,9 @@ export function createAssertStringify<T>(): (input: T) => string;
|
|
|
218
210
|
- `assertParse()`: parse JSON string safely with type validation
|
|
219
211
|
- `isStringify()`: maximum 10x faster JSON stringify fuction even type safe
|
|
220
212
|
|
|
221
|
-

|
|
222
214
|
|
|
223
|
-
> Measured on [AMD R7
|
|
215
|
+
> Measured on [AMD R7 6800HS](https://github.com/samchon/typia/tree/master/benchmark/results/AMD%20Ryzen%207%206800HS%20with%20Radeon%20Graphics)
|
|
224
216
|
|
|
225
217
|
### Miscellaneous
|
|
226
218
|
```typescript
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
import { PackageManager } from "./PackageManager";
|
|
2
|
+
export declare namespace ArgumentParser {
|
|
3
|
+
interface IArguments {
|
|
4
|
+
compiler: "ts-patch" | "ttypescript";
|
|
5
|
+
manager: "npm" | "pnpm" | "yarn";
|
|
6
|
+
project: string | null;
|
|
7
|
+
}
|
|
8
|
+
function parse(pack: PackageManager): Promise<IArguments>;
|
|
9
|
+
}
|
|
@@ -0,0 +1,265 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
|
|
3
|
+
if (k2 === undefined) k2 = k;
|
|
4
|
+
var desc = Object.getOwnPropertyDescriptor(m, k);
|
|
5
|
+
if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
|
|
6
|
+
desc = { enumerable: true, get: function() { return m[k]; } };
|
|
7
|
+
}
|
|
8
|
+
Object.defineProperty(o, k2, desc);
|
|
9
|
+
}) : (function(o, m, k, k2) {
|
|
10
|
+
if (k2 === undefined) k2 = k;
|
|
11
|
+
o[k2] = m[k];
|
|
12
|
+
}));
|
|
13
|
+
var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
|
|
14
|
+
Object.defineProperty(o, "default", { enumerable: true, value: v });
|
|
15
|
+
}) : function(o, v) {
|
|
16
|
+
o["default"] = v;
|
|
17
|
+
});
|
|
18
|
+
var __importStar = (this && this.__importStar) || function (mod) {
|
|
19
|
+
if (mod && mod.__esModule) return mod;
|
|
20
|
+
var result = {};
|
|
21
|
+
if (mod != null) for (var k in mod) if (k !== "default" && Object.prototype.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k);
|
|
22
|
+
__setModuleDefault(result, mod);
|
|
23
|
+
return result;
|
|
24
|
+
};
|
|
25
|
+
var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
|
|
26
|
+
function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
|
|
27
|
+
return new (P || (P = Promise))(function (resolve, reject) {
|
|
28
|
+
function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
|
|
29
|
+
function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
|
|
30
|
+
function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
|
|
31
|
+
step((generator = generator.apply(thisArg, _arguments || [])).next());
|
|
32
|
+
});
|
|
33
|
+
};
|
|
34
|
+
var __generator = (this && this.__generator) || function (thisArg, body) {
|
|
35
|
+
var _ = { label: 0, sent: function() { if (t[0] & 1) throw t[1]; return t[1]; }, trys: [], ops: [] }, f, y, t, g;
|
|
36
|
+
return g = { next: verb(0), "throw": verb(1), "return": verb(2) }, typeof Symbol === "function" && (g[Symbol.iterator] = function() { return this; }), g;
|
|
37
|
+
function verb(n) { return function (v) { return step([n, v]); }; }
|
|
38
|
+
function step(op) {
|
|
39
|
+
if (f) throw new TypeError("Generator is already executing.");
|
|
40
|
+
while (g && (g = 0, op[0] && (_ = 0)), _) try {
|
|
41
|
+
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;
|
|
42
|
+
if (y = 0, t) op = [op[0] & 2, t.value];
|
|
43
|
+
switch (op[0]) {
|
|
44
|
+
case 0: case 1: t = op; break;
|
|
45
|
+
case 4: _.label++; return { value: op[1], done: false };
|
|
46
|
+
case 5: _.label++; y = op[1]; op = [0]; continue;
|
|
47
|
+
case 7: op = _.ops.pop(); _.trys.pop(); continue;
|
|
48
|
+
default:
|
|
49
|
+
if (!(t = _.trys, t = t.length > 0 && t[t.length - 1]) && (op[0] === 6 || op[0] === 2)) { _ = 0; continue; }
|
|
50
|
+
if (op[0] === 3 && (!t || (op[1] > t[0] && op[1] < t[3]))) { _.label = op[1]; break; }
|
|
51
|
+
if (op[0] === 6 && _.label < t[1]) { _.label = t[1]; t = op; break; }
|
|
52
|
+
if (t && _.label < t[2]) { _.label = t[2]; _.ops.push(op); break; }
|
|
53
|
+
if (t[2]) _.ops.pop();
|
|
54
|
+
_.trys.pop(); continue;
|
|
55
|
+
}
|
|
56
|
+
op = body.call(thisArg, _);
|
|
57
|
+
} catch (e) { op = [6, e]; y = 0; } finally { f = t = 0; }
|
|
58
|
+
if (op[0] & 5) throw op[1]; return { value: op[0] ? op[1] : void 0, done: true };
|
|
59
|
+
}
|
|
60
|
+
};
|
|
61
|
+
var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
62
|
+
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
63
|
+
};
|
|
64
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
65
|
+
exports.ArgumentParser = void 0;
|
|
66
|
+
var fs_1 = __importDefault(require("fs"));
|
|
67
|
+
var path_1 = __importDefault(require("path"));
|
|
68
|
+
var ArgumentParser;
|
|
69
|
+
(function (ArgumentParser) {
|
|
70
|
+
function parse(pack) {
|
|
71
|
+
return __awaiter(this, void 0, void 0, function () {
|
|
72
|
+
var newbie, output;
|
|
73
|
+
var _this = this;
|
|
74
|
+
return __generator(this, function (_a) {
|
|
75
|
+
switch (_a.label) {
|
|
76
|
+
case 0:
|
|
77
|
+
newbie = {
|
|
78
|
+
commander: pack.install({
|
|
79
|
+
dev: true,
|
|
80
|
+
modulo: "commander",
|
|
81
|
+
silent: true,
|
|
82
|
+
}),
|
|
83
|
+
inquirer: pack.install({
|
|
84
|
+
dev: true,
|
|
85
|
+
modulo: "inquirer",
|
|
86
|
+
version: "8.2.5",
|
|
87
|
+
silent: true,
|
|
88
|
+
}),
|
|
89
|
+
};
|
|
90
|
+
return [4, (function () { return __awaiter(_this, void 0, void 0, function () {
|
|
91
|
+
var error_1;
|
|
92
|
+
return __generator(this, function (_a) {
|
|
93
|
+
switch (_a.label) {
|
|
94
|
+
case 0:
|
|
95
|
+
_a.trys.push([0, 2, , 3]);
|
|
96
|
+
return [4, _Parse(pack)];
|
|
97
|
+
case 1: return [2, _a.sent()];
|
|
98
|
+
case 2:
|
|
99
|
+
error_1 = _a.sent();
|
|
100
|
+
return [2, error_1];
|
|
101
|
+
case 3: return [2];
|
|
102
|
+
}
|
|
103
|
+
});
|
|
104
|
+
}); })()];
|
|
105
|
+
case 1:
|
|
106
|
+
output = _a.sent();
|
|
107
|
+
if (newbie.commander)
|
|
108
|
+
pack.erase({ modulo: "commander", silent: true });
|
|
109
|
+
if (newbie.inquirer)
|
|
110
|
+
pack.erase({ modulo: "inquirer", silent: true });
|
|
111
|
+
if (output instanceof Error)
|
|
112
|
+
throw output;
|
|
113
|
+
return [2, output];
|
|
114
|
+
}
|
|
115
|
+
});
|
|
116
|
+
});
|
|
117
|
+
}
|
|
118
|
+
ArgumentParser.parse = parse;
|
|
119
|
+
function _Parse(pack) {
|
|
120
|
+
return __awaiter(this, void 0, void 0, function () {
|
|
121
|
+
var createPromptModule, program, questioned, action, select, configure;
|
|
122
|
+
var _this = this;
|
|
123
|
+
return __generator(this, function (_a) {
|
|
124
|
+
var _b, _c;
|
|
125
|
+
switch (_a.label) {
|
|
126
|
+
case 0: return [4, (_b = path_1.default.join(pack.directory, "node_modules", "inquirer"), Promise.resolve().then(function () { return __importStar(require(_b)); }))];
|
|
127
|
+
case 1:
|
|
128
|
+
createPromptModule = (_a.sent()).createPromptModule;
|
|
129
|
+
return [4, (_c = path_1.default.join(pack.directory, "node_modules", "commander"), Promise.resolve().then(function () { return __importStar(require(_c)); }))];
|
|
130
|
+
case 2:
|
|
131
|
+
program = (_a.sent()).program;
|
|
132
|
+
program.option("--compiler [compiler]", "compiler type");
|
|
133
|
+
program.option("--manager [manager", "package manager");
|
|
134
|
+
program.option("--project [project]", "tsconfig.json file location");
|
|
135
|
+
questioned = { value: false };
|
|
136
|
+
action = function (closure) {
|
|
137
|
+
return new Promise(function (resolve, reject) {
|
|
138
|
+
program.action(function (options) { return __awaiter(_this, void 0, void 0, function () {
|
|
139
|
+
var _a, exp_1;
|
|
140
|
+
return __generator(this, function (_b) {
|
|
141
|
+
switch (_b.label) {
|
|
142
|
+
case 0:
|
|
143
|
+
_b.trys.push([0, 2, , 3]);
|
|
144
|
+
_a = resolve;
|
|
145
|
+
return [4, closure(options)];
|
|
146
|
+
case 1:
|
|
147
|
+
_a.apply(void 0, [_b.sent()]);
|
|
148
|
+
return [3, 3];
|
|
149
|
+
case 2:
|
|
150
|
+
exp_1 = _b.sent();
|
|
151
|
+
reject(exp_1);
|
|
152
|
+
return [3, 3];
|
|
153
|
+
case 3: return [2];
|
|
154
|
+
}
|
|
155
|
+
});
|
|
156
|
+
}); });
|
|
157
|
+
program.parseAsync().catch(reject);
|
|
158
|
+
});
|
|
159
|
+
};
|
|
160
|
+
select = function (name) {
|
|
161
|
+
return function (message) {
|
|
162
|
+
return function (choices) { return __awaiter(_this, void 0, void 0, function () {
|
|
163
|
+
return __generator(this, function (_a) {
|
|
164
|
+
switch (_a.label) {
|
|
165
|
+
case 0:
|
|
166
|
+
questioned.value = true;
|
|
167
|
+
return [4, createPromptModule()({
|
|
168
|
+
type: "list",
|
|
169
|
+
name: name,
|
|
170
|
+
message: message,
|
|
171
|
+
choices: choices,
|
|
172
|
+
})];
|
|
173
|
+
case 1: return [2, (_a.sent())[name]];
|
|
174
|
+
}
|
|
175
|
+
});
|
|
176
|
+
}); };
|
|
177
|
+
};
|
|
178
|
+
};
|
|
179
|
+
configure = function () { return __awaiter(_this, void 0, void 0, function () {
|
|
180
|
+
var fileList;
|
|
181
|
+
return __generator(this, function (_a) {
|
|
182
|
+
switch (_a.label) {
|
|
183
|
+
case 0: return [4, fs_1.default.promises.readdir(pack.directory)];
|
|
184
|
+
case 1: return [4, (_a.sent()).filter(function (str) {
|
|
185
|
+
return str.substring(0, 8) === "tsconfig" &&
|
|
186
|
+
str.substring(str.length - 5) === ".json";
|
|
187
|
+
})];
|
|
188
|
+
case 2:
|
|
189
|
+
fileList = _a.sent();
|
|
190
|
+
if (fileList.length === 0) {
|
|
191
|
+
if (process.cwd() !== pack.directory)
|
|
192
|
+
throw new Error("No tsconfig.json file.");
|
|
193
|
+
return [2, null];
|
|
194
|
+
}
|
|
195
|
+
else if (fileList.length === 1)
|
|
196
|
+
return [2, fileList[0]];
|
|
197
|
+
return [2, select("tsconfig")("tsconfig.json file")(fileList)];
|
|
198
|
+
}
|
|
199
|
+
});
|
|
200
|
+
}); };
|
|
201
|
+
return [2, action(function (options) { return __awaiter(_this, void 0, void 0, function () {
|
|
202
|
+
var _a, _b, _c, _d, _e;
|
|
203
|
+
var _f, _g, _h;
|
|
204
|
+
return __generator(this, function (_j) {
|
|
205
|
+
switch (_j.label) {
|
|
206
|
+
case 0:
|
|
207
|
+
if (!(options.compiler === undefined)) return [3, 2];
|
|
208
|
+
console.log(COMPILER_DESCRIPTION);
|
|
209
|
+
_a = options;
|
|
210
|
+
return [4, select("compiler")("Compiler")(((_f = pack.data.scripts) === null || _f === void 0 ? void 0 : _f.build) === "nest build"
|
|
211
|
+
? ["ts-patch", "ttypescript"]
|
|
212
|
+
: ["ttypescript", "ts-patch"])];
|
|
213
|
+
case 1:
|
|
214
|
+
_a.compiler = _j.sent();
|
|
215
|
+
_j.label = 2;
|
|
216
|
+
case 2:
|
|
217
|
+
if (!((_g = options.manager) !== null && _g !== void 0)) return [3, 3];
|
|
218
|
+
_b = _g;
|
|
219
|
+
return [3, 5];
|
|
220
|
+
case 3:
|
|
221
|
+
_c = options;
|
|
222
|
+
return [4, select("manager")("Package Manager")([
|
|
223
|
+
"npm",
|
|
224
|
+
"pnpm",
|
|
225
|
+
"yarn",
|
|
226
|
+
])];
|
|
227
|
+
case 4:
|
|
228
|
+
_b = (_c.manager = _j.sent());
|
|
229
|
+
_j.label = 5;
|
|
230
|
+
case 5:
|
|
231
|
+
_b;
|
|
232
|
+
pack.manager = options.manager;
|
|
233
|
+
if (!((_h = options.project) !== null && _h !== void 0)) return [3, 6];
|
|
234
|
+
_d = _h;
|
|
235
|
+
return [3, 8];
|
|
236
|
+
case 6:
|
|
237
|
+
_e = options;
|
|
238
|
+
return [4, configure()];
|
|
239
|
+
case 7:
|
|
240
|
+
_d = (_e.project = _j.sent());
|
|
241
|
+
_j.label = 8;
|
|
242
|
+
case 8:
|
|
243
|
+
_d;
|
|
244
|
+
if (questioned.value)
|
|
245
|
+
console.log("");
|
|
246
|
+
return [2, options];
|
|
247
|
+
}
|
|
248
|
+
});
|
|
249
|
+
}); })];
|
|
250
|
+
}
|
|
251
|
+
});
|
|
252
|
+
});
|
|
253
|
+
}
|
|
254
|
+
})(ArgumentParser = exports.ArgumentParser || (exports.ArgumentParser = {}));
|
|
255
|
+
var COMPILER_DESCRIPTION = [
|
|
256
|
+
"About compiler, if you adapt \"ttypescript\", you should use \"ttsc\" instead.",
|
|
257
|
+
"",
|
|
258
|
+
"Otherwise, you choose \"ts-patch\", you can use the original \"tsc\" command.",
|
|
259
|
+
"However, the \"ts-patch\" hacks \"node_modules/typescript\" source code.",
|
|
260
|
+
"Also, whenever update \"typescript\", you've to run \"npm run prepare\" command.",
|
|
261
|
+
"",
|
|
262
|
+
"By the way, when using \"@nest/cli\", you must just choose \"ts-patch\".",
|
|
263
|
+
"",
|
|
264
|
+
].join("\n");
|
|
265
|
+
//# sourceMappingURL=ArgumentParser.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"ArgumentParser.js","sourceRoot":"","sources":["../../../src/executable/internal/ArgumentParser.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
3
|
+
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
4
|
+
};
|
|
5
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
6
|
+
exports.CommandExecutor = void 0;
|
|
7
|
+
var child_process_1 = __importDefault(require("child_process"));
|
|
8
|
+
var CommandExecutor;
|
|
9
|
+
(function (CommandExecutor) {
|
|
10
|
+
function run(str, silent) {
|
|
11
|
+
if (silent === false)
|
|
12
|
+
console.log(str);
|
|
13
|
+
child_process_1.default.execSync(str, { stdio: "ignore" });
|
|
14
|
+
}
|
|
15
|
+
CommandExecutor.run = run;
|
|
16
|
+
})(CommandExecutor = exports.CommandExecutor || (exports.CommandExecutor = {}));
|
|
17
|
+
//# sourceMappingURL=CommandExecutor.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"CommandExecutor.js","sourceRoot":"","sources":["../../../src/executable/internal/CommandExecutor.ts"],"names":[],"mappings":";;;;;;AAAA,gEAA+B;AAE/B,IAAiB,eAAe,CAK/B;AALD,WAAiB,eAAe;IAC5B,SAAgB,GAAG,CAAC,GAAW,EAAE,MAAe;QAC5C,IAAI,MAAM,KAAK,KAAK;YAAE,OAAO,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;QACvC,uBAAE,CAAC,QAAQ,CAAC,GAAG,EAAE,EAAE,KAAK,EAAE,QAAQ,EAAE,CAAC,CAAC;IAC1C,CAAC;IAHe,mBAAG,MAGlB,CAAA;AACL,CAAC,EALgB,eAAe,GAAf,uBAAe,KAAf,uBAAe,QAK/B"}
|
|
@@ -0,0 +1,27 @@
|
|
|
1
|
+
export declare class PackageManager {
|
|
2
|
+
readonly directory: string;
|
|
3
|
+
data: Package.Data;
|
|
4
|
+
manager: string;
|
|
5
|
+
get file(): string;
|
|
6
|
+
static mount(): Promise<PackageManager>;
|
|
7
|
+
save(modifier: (data: Package.Data) => void): Promise<void>;
|
|
8
|
+
install(props: {
|
|
9
|
+
dev: boolean;
|
|
10
|
+
silent?: boolean;
|
|
11
|
+
modulo: string;
|
|
12
|
+
version?: string;
|
|
13
|
+
}): boolean;
|
|
14
|
+
erase(props: {
|
|
15
|
+
modulo: string;
|
|
16
|
+
silent?: boolean;
|
|
17
|
+
}): void;
|
|
18
|
+
private constructor();
|
|
19
|
+
private static load;
|
|
20
|
+
}
|
|
21
|
+
export declare namespace Package {
|
|
22
|
+
interface Data {
|
|
23
|
+
scripts?: Record<string, string>;
|
|
24
|
+
dependencies?: Record<string, string>;
|
|
25
|
+
devDependencies?: Record<string, string>;
|
|
26
|
+
}
|
|
27
|
+
}
|
|
@@ -0,0 +1,141 @@
|
|
|
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 (g && (g = 0, op[0] && (_ = 0)), _) 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.PackageManager = void 0;
|
|
43
|
+
var fs_1 = __importDefault(require("fs"));
|
|
44
|
+
var path_1 = __importDefault(require("path"));
|
|
45
|
+
var CommandExecutor_1 = require("./CommandExecutor");
|
|
46
|
+
var PackageManager = (function () {
|
|
47
|
+
function PackageManager(directory, data) {
|
|
48
|
+
this.directory = directory;
|
|
49
|
+
this.data = data;
|
|
50
|
+
this.manager = "npm";
|
|
51
|
+
}
|
|
52
|
+
Object.defineProperty(PackageManager.prototype, "file", {
|
|
53
|
+
get: function () {
|
|
54
|
+
return path_1.default.join(this.directory, "package.json");
|
|
55
|
+
},
|
|
56
|
+
enumerable: false,
|
|
57
|
+
configurable: true
|
|
58
|
+
});
|
|
59
|
+
PackageManager.mount = function () {
|
|
60
|
+
return __awaiter(this, void 0, void 0, function () {
|
|
61
|
+
var location, _a, _b;
|
|
62
|
+
return __generator(this, function (_c) {
|
|
63
|
+
switch (_c.label) {
|
|
64
|
+
case 0: return [4, find(process.cwd())];
|
|
65
|
+
case 1:
|
|
66
|
+
location = _c.sent();
|
|
67
|
+
if (location === null)
|
|
68
|
+
throw new Error("Failed to find package.json file");
|
|
69
|
+
_a = PackageManager.bind;
|
|
70
|
+
_b = [void 0, location];
|
|
71
|
+
return [4, this.load(path_1.default.join(location, "package.json"))];
|
|
72
|
+
case 2: return [2, new (_a.apply(PackageManager, _b.concat([_c.sent()])))()];
|
|
73
|
+
}
|
|
74
|
+
});
|
|
75
|
+
});
|
|
76
|
+
};
|
|
77
|
+
PackageManager.prototype.save = function (modifier) {
|
|
78
|
+
return __awaiter(this, void 0, void 0, function () {
|
|
79
|
+
var content;
|
|
80
|
+
return __generator(this, function (_a) {
|
|
81
|
+
switch (_a.label) {
|
|
82
|
+
case 0: return [4, fs_1.default.promises.readFile(this.file, "utf8")];
|
|
83
|
+
case 1:
|
|
84
|
+
content = _a.sent();
|
|
85
|
+
this.data = JSON.parse(content);
|
|
86
|
+
modifier(this.data);
|
|
87
|
+
return [2, fs_1.default.promises.writeFile(this.file, JSON.stringify(this.data, null, 2), "utf8")];
|
|
88
|
+
}
|
|
89
|
+
});
|
|
90
|
+
});
|
|
91
|
+
};
|
|
92
|
+
PackageManager.prototype.install = function (props) {
|
|
93
|
+
var _a;
|
|
94
|
+
var container = props.dev
|
|
95
|
+
? this.data.devDependencies
|
|
96
|
+
: this.data.dependencies;
|
|
97
|
+
if (!!(container === null || container === void 0 ? void 0 : container[props.modulo]) &&
|
|
98
|
+
fs_1.default.existsSync(path_1.default.join(this.directory, "node_modules", props.modulo)))
|
|
99
|
+
return false;
|
|
100
|
+
var middle = this.manager === "yarn"
|
|
101
|
+
? "add".concat(props.dev ? " -D" : "")
|
|
102
|
+
: "install ".concat(props.dev ? "--save-dev" : "--save");
|
|
103
|
+
CommandExecutor_1.CommandExecutor.run("".concat(this.manager, " ").concat(middle, " ").concat(props.modulo, "@").concat((_a = props.version) !== null && _a !== void 0 ? _a : "latest"), !!props.silent);
|
|
104
|
+
return true;
|
|
105
|
+
};
|
|
106
|
+
PackageManager.prototype.erase = function (props) {
|
|
107
|
+
var middle = this.manager === "yarn" ? "remove" : "uninstall";
|
|
108
|
+
CommandExecutor_1.CommandExecutor.run("".concat(this.manager, " ").concat(middle, " ").concat(props.modulo), !!props.silent);
|
|
109
|
+
};
|
|
110
|
+
PackageManager.load = function (file) {
|
|
111
|
+
return __awaiter(this, void 0, void 0, function () {
|
|
112
|
+
var content;
|
|
113
|
+
return __generator(this, function (_a) {
|
|
114
|
+
switch (_a.label) {
|
|
115
|
+
case 0: return [4, fs_1.default.promises.readFile(file, "utf8")];
|
|
116
|
+
case 1:
|
|
117
|
+
content = _a.sent();
|
|
118
|
+
return [2, JSON.parse(content)];
|
|
119
|
+
}
|
|
120
|
+
});
|
|
121
|
+
});
|
|
122
|
+
};
|
|
123
|
+
return PackageManager;
|
|
124
|
+
}());
|
|
125
|
+
exports.PackageManager = PackageManager;
|
|
126
|
+
function find(directory, depth) {
|
|
127
|
+
if (directory === void 0) { directory = process.cwd(); }
|
|
128
|
+
if (depth === void 0) { depth = 0; }
|
|
129
|
+
return __awaiter(this, void 0, void 0, function () {
|
|
130
|
+
var location;
|
|
131
|
+
return __generator(this, function (_a) {
|
|
132
|
+
location = path_1.default.join(directory, "package.json");
|
|
133
|
+
if (fs_1.default.existsSync(location))
|
|
134
|
+
return [2, directory];
|
|
135
|
+
else if (depth > 1)
|
|
136
|
+
return [2, null];
|
|
137
|
+
return [2, find(path_1.default.join(directory, ".."), depth + 1)];
|
|
138
|
+
});
|
|
139
|
+
});
|
|
140
|
+
}
|
|
141
|
+
//# sourceMappingURL=PackageManager.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"PackageManager.js","sourceRoot":"","sources":["../../../src/executable/internal/PackageManager.ts"],"names":[],"mappings":"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"}
|