amxxpack 0.0.3

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 ADDED
@@ -0,0 +1,49 @@
1
+ # 📦 AMXXPack
2
+ Simple build system and **CLI** for **AMX Mod X** projects.
3
+
4
+ # 📄 About
5
+
6
+ This system will be useful for projects with multiple plugins and assets. Using the command-line interface you can build entire project with a single command. It also supports hot rebuild to keep your plugins and assets up to date during the work.
7
+
8
+
9
+ ## 📚 Features
10
+ - âš™ Flexible configuration
11
+ - 🔥 Hot reload
12
+ - 🧸 Assets builder
13
+
14
+ ## 🔧 Installation
15
+ **AMXXPack** is available through the npm registry.
16
+ Installation can be done using the `npm install` command:
17
+ ```
18
+ npm install amxxpack
19
+ ```
20
+
21
+ or install it globally to use as a system command
22
+ ```
23
+ npm install -g amxxpack
24
+ ```
25
+
26
+ ## â–¶ Quick start
27
+ - Create new directory for your project
28
+ - Open a terminal inside the project directory
29
+ - Execute `npm init -y` command to init the package
30
+ - Execute `npm install amxxpack --save-dev` command to install `amxxpack` locally
31
+ - Execute `npx amxxpack init` command to create new config
32
+ - Use `npx amxxpack build` command to build the project
33
+ - Adding build scripts *(optional)*
34
+
35
+ To use `npm run build` and `npm run watch` to build or watch the project update the `scripts` section in `package.json`:
36
+ ```json
37
+ "scripts": {
38
+ "build": "amxxpack build",
39
+ "watch": "amxxpack build --watch"
40
+ }
41
+ ```
42
+
43
+ ## 📋 Commands
44
+ - `amxxpack init` init config for a new project
45
+ - `amxxpack build` command to build the project
46
+ - `--watch` flag to watch changes
47
+ - `--config` config file
48
+ - `amxxpack compile <path|glob>` to compile specific plugin in the project
49
+ - `--config` config file
@@ -0,0 +1,27 @@
1
+ export declare enum AMXPCMessageType {
2
+ Echo = "echo",
3
+ Error = "error",
4
+ Warning = "warning",
5
+ FatalError = "fatal error"
6
+ }
7
+ interface IMessage {
8
+ filename?: string;
9
+ startLine?: number;
10
+ endLine?: number;
11
+ code?: number;
12
+ type: AMXPCMessageType;
13
+ text: string;
14
+ }
15
+ interface IParseOutputResult {
16
+ messages: IMessage[];
17
+ aborted: boolean;
18
+ error: boolean;
19
+ }
20
+ interface ICompileResult {
21
+ output: IParseOutputResult;
22
+ plugin: string;
23
+ error?: string;
24
+ success: boolean;
25
+ }
26
+ declare function compile(params: any): Promise<ICompileResult>;
27
+ export default compile;
@@ -0,0 +1,122 @@
1
+ "use strict";
2
+ var __spreadArray = (this && this.__spreadArray) || function (to, from, pack) {
3
+ if (pack || arguments.length === 2) for (var i = 0, l = from.length, ar; i < l; i++) {
4
+ if (ar || !(i in from)) {
5
+ if (!ar) ar = Array.prototype.slice.call(from, 0, i);
6
+ ar[i] = from[i];
7
+ }
8
+ }
9
+ return to.concat(ar || Array.prototype.slice.call(from));
10
+ };
11
+ var __importDefault = (this && this.__importDefault) || function (mod) {
12
+ return (mod && mod.__esModule) ? mod : { "default": mod };
13
+ };
14
+ Object.defineProperty(exports, "__esModule", { value: true });
15
+ exports.AMXPCMessageType = void 0;
16
+ var path_1 = __importDefault(require("path"));
17
+ var child_process_1 = __importDefault(require("child_process"));
18
+ var mkdirp_1 = __importDefault(require("mkdirp"));
19
+ var accumulator_1 = __importDefault(require("../utils/accumulator"));
20
+ var PLUGIN_EXT = 'amxx';
21
+ var AMXPCMessageType;
22
+ (function (AMXPCMessageType) {
23
+ AMXPCMessageType["Echo"] = "echo";
24
+ AMXPCMessageType["Error"] = "error";
25
+ AMXPCMessageType["Warning"] = "warning";
26
+ AMXPCMessageType["FatalError"] = "fatal error";
27
+ })(AMXPCMessageType = exports.AMXPCMessageType || (exports.AMXPCMessageType = {}));
28
+ var MessageRegExp = {
29
+ filename: /([a-zA-Z0-9.\-_/:\\\s]+)/,
30
+ line: /\(([0-9]+)(?:\s--\s([0-9]+))?\)/,
31
+ type: /((?:fatal\s)?error|warning)/,
32
+ code: /([0-9]+)/,
33
+ text: /(.*)/
34
+ };
35
+ function buildMessageRegExp() {
36
+ var filename = MessageRegExp.filename, line = MessageRegExp.line, type = MessageRegExp.type, code = MessageRegExp.code, text = MessageRegExp.text;
37
+ var pattern = [
38
+ filename,
39
+ line,
40
+ /\s:\s/,
41
+ type,
42
+ /\s/,
43
+ code,
44
+ /:\s/,
45
+ text
46
+ ].map(function (r) { return r.toString().slice(1, -1); }).join('');
47
+ return new RegExp(pattern);
48
+ }
49
+ var messageRegExp = buildMessageRegExp();
50
+ function parseLine(line) {
51
+ var match = line.match(messageRegExp);
52
+ if (!match) {
53
+ return { type: AMXPCMessageType.Echo, text: line };
54
+ }
55
+ var filename = match[1], startLine = match[2], endLine = match[3], type = match[4], code = match[5], text = match[6];
56
+ return {
57
+ filename: filename,
58
+ startLine: +startLine,
59
+ endLine: endLine ? +endLine : -1,
60
+ type: type,
61
+ code: +code,
62
+ text: text
63
+ };
64
+ }
65
+ function isAbortedEcho(line) {
66
+ return line.startsWith('Compilation aborted.')
67
+ || line.startsWith('Could not locate output file');
68
+ }
69
+ function parseOutput(output) {
70
+ var result = { messages: [], aborted: false, error: false };
71
+ output.split('\n').forEach(function (line) {
72
+ var message = parseLine(line);
73
+ var type = message.type;
74
+ if (type === AMXPCMessageType.Error || type === AMXPCMessageType.FatalError) {
75
+ result.error = true;
76
+ }
77
+ else if (type === AMXPCMessageType.Echo && isAbortedEcho(line)) {
78
+ result.error = true;
79
+ result.aborted = true;
80
+ }
81
+ result.messages.push(message);
82
+ });
83
+ return result;
84
+ }
85
+ function formatArgs(params, outPath) {
86
+ var includeArgs = params.includeDir instanceof Array
87
+ ? params.includeDir.map(function (dir) { return "-i".concat(dir); })
88
+ : ["-i".concat(params.includeDir)];
89
+ return __spreadArray([params.path, "-o".concat(outPath)], includeArgs, true);
90
+ }
91
+ function compile(params) {
92
+ var parsedPath = path_1.default.parse(params.path);
93
+ var fileName = "".concat(parsedPath.name, ".").concat(PLUGIN_EXT);
94
+ var dest = path_1.default.join(params.dest, fileName);
95
+ mkdirp_1.default.sync(params.dest);
96
+ return new Promise(function (resolve) {
97
+ var output = (0, accumulator_1.default)();
98
+ var done = function (error) {
99
+ var outputData = output();
100
+ var parsedOutput = parseOutput(outputData);
101
+ var errorMessage = error && error.message;
102
+ if (!errorMessage && parsedOutput.error) {
103
+ errorMessage = 'Compilation error';
104
+ }
105
+ resolve({
106
+ error: errorMessage,
107
+ plugin: fileName,
108
+ success: !errorMessage,
109
+ output: parsedOutput
110
+ });
111
+ };
112
+ var compilerProcess = child_process_1.default.spawn(params.compiler, formatArgs(params, dest), {
113
+ env: process.env,
114
+ cwd: path_1.default.parse(params.compiler).dir
115
+ });
116
+ compilerProcess.on('error', done);
117
+ compilerProcess.on('close', done);
118
+ compilerProcess.stdout.on('data', output);
119
+ compilerProcess.stderr.on('data', function (data) { return console.error(data); });
120
+ });
121
+ }
122
+ exports.default = compile;
@@ -0,0 +1,22 @@
1
+ import { IAmxxBuilderConfig } from './types';
2
+ export default class AmxxBuilder {
3
+ private logger;
4
+ private config;
5
+ constructor(config: IAmxxBuilderConfig);
6
+ build(): Promise<void>;
7
+ watch(): Promise<void>;
8
+ buildSrc(): Promise<void>;
9
+ buildInclude(): Promise<void>;
10
+ buildAssets(): Promise<void>;
11
+ watchSrc(): Promise<void>;
12
+ watchInclude(): Promise<void>;
13
+ watchAssets(): Promise<void>;
14
+ updatePlugin(filePath: string): Promise<void>;
15
+ updateScript(filePath: string): Promise<void>;
16
+ updateAsset(filePath: string): Promise<void>;
17
+ updateInclude(filePath: string): Promise<void>;
18
+ findPlugins(pattern: string): Promise<string[]>;
19
+ compilePlugin(filePath: string): Promise<void>;
20
+ private buildDir;
21
+ private watchDir;
22
+ }
@@ -0,0 +1,392 @@
1
+ "use strict";
2
+ var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
3
+ if (k2 === undefined) k2 = k;
4
+ Object.defineProperty(o, k2, { enumerable: true, get: function() { return m[k]; } });
5
+ }) : (function(o, m, k, k2) {
6
+ if (k2 === undefined) k2 = k;
7
+ o[k2] = m[k];
8
+ }));
9
+ var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
10
+ Object.defineProperty(o, "default", { enumerable: true, value: v });
11
+ }) : function(o, v) {
12
+ o["default"] = v;
13
+ });
14
+ var __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 (k !== "default" && Object.prototype.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k);
18
+ __setModuleDefault(result, mod);
19
+ return result;
20
+ };
21
+ var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
22
+ function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
23
+ return new (P || (P = Promise))(function (resolve, reject) {
24
+ function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
25
+ function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
26
+ function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
27
+ step((generator = generator.apply(thisArg, _arguments || [])).next());
28
+ });
29
+ };
30
+ var __generator = (this && this.__generator) || function (thisArg, body) {
31
+ var _ = { label: 0, sent: function() { if (t[0] & 1) throw t[1]; return t[1]; }, trys: [], ops: [] }, f, y, t, g;
32
+ return g = { next: verb(0), "throw": verb(1), "return": verb(2) }, typeof Symbol === "function" && (g[Symbol.iterator] = function() { return this; }), g;
33
+ function verb(n) { return function (v) { return step([n, v]); }; }
34
+ function step(op) {
35
+ if (f) throw new TypeError("Generator is already executing.");
36
+ while (_) try {
37
+ 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;
38
+ if (y = 0, t) op = [op[0] & 2, t.value];
39
+ switch (op[0]) {
40
+ case 0: case 1: t = op; break;
41
+ case 4: _.label++; return { value: op[1], done: false };
42
+ case 5: _.label++; y = op[1]; op = [0]; continue;
43
+ case 7: op = _.ops.pop(); _.trys.pop(); continue;
44
+ default:
45
+ if (!(t = _.trys, t = t.length > 0 && t[t.length - 1]) && (op[0] === 6 || op[0] === 2)) { _ = 0; continue; }
46
+ if (op[0] === 3 && (!t || (op[1] > t[0] && op[1] < t[3]))) { _.label = op[1]; break; }
47
+ if (op[0] === 6 && _.label < t[1]) { _.label = t[1]; t = op; break; }
48
+ if (t && _.label < t[2]) { _.label = t[2]; _.ops.push(op); break; }
49
+ if (t[2]) _.ops.pop();
50
+ _.trys.pop(); continue;
51
+ }
52
+ op = body.call(thisArg, _);
53
+ } catch (e) { op = [6, e]; y = 0; } finally { f = t = 0; }
54
+ if (op[0] & 5) throw op[1]; return { value: op[0] ? op[1] : void 0, done: true };
55
+ }
56
+ };
57
+ var __spreadArray = (this && this.__spreadArray) || function (to, from, pack) {
58
+ if (pack || arguments.length === 2) for (var i = 0, l = from.length, ar; i < l; i++) {
59
+ if (ar || !(i in from)) {
60
+ if (!ar) ar = Array.prototype.slice.call(from, 0, i);
61
+ ar[i] = from[i];
62
+ }
63
+ }
64
+ return to.concat(ar || Array.prototype.slice.call(from));
65
+ };
66
+ var __importDefault = (this && this.__importDefault) || function (mod) {
67
+ return (mod && mod.__esModule) ? mod : { "default": mod };
68
+ };
69
+ Object.defineProperty(exports, "__esModule", { value: true });
70
+ var path_1 = __importDefault(require("path"));
71
+ var fs_1 = __importDefault(require("fs"));
72
+ var mkdirp_1 = __importDefault(require("mkdirp"));
73
+ var glob_promise_1 = __importDefault(require("glob-promise"));
74
+ var chokidar_1 = __importDefault(require("chokidar"));
75
+ var normalize_path_1 = __importDefault(require("normalize-path"));
76
+ var amxxpc_1 = __importStar(require("./amxxpc"));
77
+ var logger_1 = __importDefault(require("../services/logger"));
78
+ var constants_1 = require("./constants");
79
+ var AmxxBuilder = /** @class */ (function () {
80
+ function AmxxBuilder(config) {
81
+ var compiler = config.compiler, input = config.input, output = config.output;
82
+ this.logger = new logger_1.default();
83
+ this.config = {
84
+ compiler: {
85
+ executable: path_1.default.resolve(compiler.executable),
86
+ include: compiler.include.map(function (include) { return path_1.default.resolve(include); })
87
+ },
88
+ input: {
89
+ scripts: path_1.default.resolve(input.scripts),
90
+ include: path_1.default.resolve(input.include),
91
+ assets: path_1.default.resolve(input.assets),
92
+ },
93
+ output: {
94
+ scripts: path_1.default.resolve(output.scripts),
95
+ plugins: path_1.default.resolve(output.plugins),
96
+ include: path_1.default.resolve(output.include),
97
+ assets: path_1.default.resolve(output.assets)
98
+ }
99
+ };
100
+ }
101
+ AmxxBuilder.prototype.build = function () {
102
+ return __awaiter(this, void 0, void 0, function () {
103
+ return __generator(this, function (_a) {
104
+ switch (_a.label) {
105
+ case 0:
106
+ this.logger.info('Building...');
107
+ return [4 /*yield*/, this.buildAssets()];
108
+ case 1:
109
+ _a.sent();
110
+ return [4 /*yield*/, this.buildInclude()];
111
+ case 2:
112
+ _a.sent();
113
+ return [4 /*yield*/, this.buildSrc()];
114
+ case 3:
115
+ _a.sent();
116
+ this.logger.success('Build finished!');
117
+ return [2 /*return*/];
118
+ }
119
+ });
120
+ });
121
+ };
122
+ AmxxBuilder.prototype.watch = function () {
123
+ return __awaiter(this, void 0, void 0, function () {
124
+ return __generator(this, function (_a) {
125
+ switch (_a.label) {
126
+ case 0: return [4 /*yield*/, this.watchAssets()];
127
+ case 1:
128
+ _a.sent();
129
+ return [4 /*yield*/, this.watchInclude()];
130
+ case 2:
131
+ _a.sent();
132
+ return [4 /*yield*/, this.watchSrc()];
133
+ case 3:
134
+ _a.sent();
135
+ return [2 /*return*/];
136
+ }
137
+ });
138
+ });
139
+ };
140
+ AmxxBuilder.prototype.buildSrc = function () {
141
+ return __awaiter(this, void 0, void 0, function () {
142
+ var _this = this;
143
+ return __generator(this, function (_a) {
144
+ switch (_a.label) {
145
+ case 0: return [4 /*yield*/, this.buildDir(this.config.input.scripts, constants_1.SCRIPTS_PATH_PATTERN, function (filePath) { return _this.updatePlugin(filePath); })];
146
+ case 1:
147
+ _a.sent();
148
+ return [2 /*return*/];
149
+ }
150
+ });
151
+ });
152
+ };
153
+ AmxxBuilder.prototype.buildInclude = function () {
154
+ return __awaiter(this, void 0, void 0, function () {
155
+ var _this = this;
156
+ return __generator(this, function (_a) {
157
+ switch (_a.label) {
158
+ case 0: return [4 /*yield*/, this.buildDir(this.config.input.include, constants_1.INCLUDE_PATH_PATTERN, function (filePath) { return _this.updateInclude(filePath); })];
159
+ case 1:
160
+ _a.sent();
161
+ return [2 /*return*/];
162
+ }
163
+ });
164
+ });
165
+ };
166
+ AmxxBuilder.prototype.buildAssets = function () {
167
+ return __awaiter(this, void 0, void 0, function () {
168
+ var _this = this;
169
+ return __generator(this, function (_a) {
170
+ switch (_a.label) {
171
+ case 0: return [4 /*yield*/, this.buildDir(this.config.input.assets, constants_1.ASSETS_PATH_PATTERN, function (filePath) { return _this.updateAsset(filePath); })];
172
+ case 1:
173
+ _a.sent();
174
+ return [2 /*return*/];
175
+ }
176
+ });
177
+ });
178
+ };
179
+ AmxxBuilder.prototype.watchSrc = function () {
180
+ return __awaiter(this, void 0, void 0, function () {
181
+ var _this = this;
182
+ return __generator(this, function (_a) {
183
+ switch (_a.label) {
184
+ case 0: return [4 /*yield*/, this.watchDir(this.config.input.scripts, constants_1.SCRIPTS_PATH_PATTERN, function (filePath) { return _this.updatePlugin(filePath); })];
185
+ case 1:
186
+ _a.sent();
187
+ return [2 /*return*/];
188
+ }
189
+ });
190
+ });
191
+ };
192
+ AmxxBuilder.prototype.watchInclude = function () {
193
+ return __awaiter(this, void 0, void 0, function () {
194
+ var _this = this;
195
+ return __generator(this, function (_a) {
196
+ switch (_a.label) {
197
+ case 0: return [4 /*yield*/, this.watchDir(this.config.input.include, constants_1.INCLUDE_PATH_PATTERN, function (filePath) { return _this.updateInclude(filePath); })];
198
+ case 1:
199
+ _a.sent();
200
+ return [2 /*return*/];
201
+ }
202
+ });
203
+ });
204
+ };
205
+ AmxxBuilder.prototype.watchAssets = function () {
206
+ return __awaiter(this, void 0, void 0, function () {
207
+ var _this = this;
208
+ return __generator(this, function (_a) {
209
+ switch (_a.label) {
210
+ case 0: return [4 /*yield*/, this.watchDir(this.config.input.assets, constants_1.ASSETS_PATH_PATTERN, function (filePath) { return _this.updateAsset(filePath); })];
211
+ case 1:
212
+ _a.sent();
213
+ return [2 /*return*/];
214
+ }
215
+ });
216
+ });
217
+ };
218
+ AmxxBuilder.prototype.updatePlugin = function (filePath) {
219
+ return __awaiter(this, void 0, void 0, function () {
220
+ return __generator(this, function (_a) {
221
+ switch (_a.label) {
222
+ case 0: return [4 /*yield*/, this.updateScript(filePath)];
223
+ case 1:
224
+ _a.sent();
225
+ return [4 /*yield*/, this.compilePlugin(filePath)];
226
+ case 2:
227
+ _a.sent();
228
+ return [2 /*return*/];
229
+ }
230
+ });
231
+ });
232
+ };
233
+ AmxxBuilder.prototype.updateScript = function (filePath) {
234
+ return __awaiter(this, void 0, void 0, function () {
235
+ var srcPath, destPath;
236
+ return __generator(this, function (_a) {
237
+ switch (_a.label) {
238
+ case 0:
239
+ srcPath = path_1.default.resolve(filePath);
240
+ destPath = path_1.default.join(this.config.output.scripts, path_1.default.parse(filePath).base);
241
+ return [4 /*yield*/, (0, mkdirp_1.default)(this.config.output.scripts)];
242
+ case 1:
243
+ _a.sent();
244
+ return [4 /*yield*/, fs_1.default.promises.copyFile(srcPath, destPath)];
245
+ case 2:
246
+ _a.sent();
247
+ this.logger.info('Script updated:', (0, normalize_path_1.default)(destPath));
248
+ return [2 /*return*/];
249
+ }
250
+ });
251
+ });
252
+ };
253
+ AmxxBuilder.prototype.updateAsset = function (filePath) {
254
+ return __awaiter(this, void 0, void 0, function () {
255
+ var srcPath, relativePath, destPath;
256
+ return __generator(this, function (_a) {
257
+ switch (_a.label) {
258
+ case 0:
259
+ srcPath = path_1.default.resolve(filePath);
260
+ relativePath = path_1.default.relative(this.config.input.assets, filePath);
261
+ destPath = path_1.default.join(this.config.output.assets, relativePath);
262
+ return [4 /*yield*/, (0, mkdirp_1.default)(path_1.default.parse(destPath).dir)];
263
+ case 1:
264
+ _a.sent();
265
+ return [4 /*yield*/, fs_1.default.promises.copyFile(srcPath, destPath)];
266
+ case 2:
267
+ _a.sent();
268
+ this.logger.info('Asset updated', (0, normalize_path_1.default)(destPath));
269
+ return [2 /*return*/];
270
+ }
271
+ });
272
+ });
273
+ };
274
+ AmxxBuilder.prototype.updateInclude = function (filePath) {
275
+ return __awaiter(this, void 0, void 0, function () {
276
+ var srcPath, destPath;
277
+ return __generator(this, function (_a) {
278
+ switch (_a.label) {
279
+ case 0:
280
+ srcPath = path_1.default.resolve(filePath);
281
+ destPath = path_1.default.join(this.config.output.include, path_1.default.parse(filePath).base);
282
+ return [4 /*yield*/, (0, mkdirp_1.default)(this.config.output.include)];
283
+ case 1:
284
+ _a.sent();
285
+ return [4 /*yield*/, fs_1.default.promises.copyFile(srcPath, destPath)];
286
+ case 2:
287
+ _a.sent();
288
+ this.logger.info('Include updated:', (0, normalize_path_1.default)(destPath));
289
+ return [2 /*return*/];
290
+ }
291
+ });
292
+ });
293
+ };
294
+ AmxxBuilder.prototype.findPlugins = function (pattern) {
295
+ return __awaiter(this, void 0, void 0, function () {
296
+ var pathPattern, matches;
297
+ return __generator(this, function (_a) {
298
+ switch (_a.label) {
299
+ case 0:
300
+ pathPattern = path_1.default.join(this.config.input.scripts, '**', pattern);
301
+ return [4 /*yield*/, (0, glob_promise_1.default)(pathPattern)];
302
+ case 1:
303
+ matches = _a.sent();
304
+ return [2 /*return*/, matches];
305
+ }
306
+ });
307
+ });
308
+ };
309
+ AmxxBuilder.prototype.compilePlugin = function (filePath) {
310
+ return __awaiter(this, void 0, void 0, function () {
311
+ var srcPath, destDir, relateiveSrcPath, result, destPath, relativeFilePath;
312
+ var _this = this;
313
+ return __generator(this, function (_a) {
314
+ switch (_a.label) {
315
+ case 0:
316
+ srcPath = path_1.default.resolve(filePath);
317
+ destDir = path_1.default.resolve(this.config.output.plugins);
318
+ relateiveSrcPath = path_1.default.relative(process.cwd(), srcPath);
319
+ return [4 /*yield*/, (0, mkdirp_1.default)(destDir)];
320
+ case 1:
321
+ _a.sent();
322
+ return [4 /*yield*/, (0, amxxpc_1.default)({
323
+ path: srcPath,
324
+ dest: destDir,
325
+ compiler: this.config.compiler.executable,
326
+ includeDir: __spreadArray(__spreadArray([], this.config.compiler.include, true), [
327
+ this.config.input.include,
328
+ ], false)
329
+ })];
330
+ case 2:
331
+ result = _a.sent();
332
+ result.output.messages.forEach(function (message) {
333
+ var startLine = message.startLine, type = message.type, code = message.code, text = message.text;
334
+ if (type === amxxpc_1.AMXPCMessageType.Error || type === amxxpc_1.AMXPCMessageType.FatalError) {
335
+ _this.logger.error("".concat((0, normalize_path_1.default)(relateiveSrcPath), "(").concat(startLine, ")"), type, code, ':', text);
336
+ }
337
+ else if (type === amxxpc_1.AMXPCMessageType.Warning) {
338
+ _this.logger.warn("".concat((0, normalize_path_1.default)(relateiveSrcPath), "(").concat(startLine, ")"), type, code, ':', text);
339
+ }
340
+ else if (type === amxxpc_1.AMXPCMessageType.Echo) {
341
+ _this.logger.debug(text);
342
+ }
343
+ });
344
+ if (result.success) {
345
+ destPath = path_1.default.join(destDir, result.plugin);
346
+ relativeFilePath = path_1.default.relative(process.cwd(), filePath);
347
+ this.logger.success('Compilation success:', (0, normalize_path_1.default)(relativeFilePath));
348
+ this.logger.info('Plugin updated:', (0, normalize_path_1.default)(destPath));
349
+ }
350
+ else {
351
+ throw new Error("Failed to compile ".concat((0, normalize_path_1.default)(relateiveSrcPath), " : \"").concat(result.error, "\""));
352
+ }
353
+ return [2 /*return*/];
354
+ }
355
+ });
356
+ });
357
+ };
358
+ AmxxBuilder.prototype.buildDir = function (baseDir, pattern, cb) {
359
+ return __awaiter(this, void 0, void 0, function () {
360
+ var pathPattern, matches;
361
+ return __generator(this, function (_a) {
362
+ switch (_a.label) {
363
+ case 0:
364
+ pathPattern = path_1.default.join(baseDir, pattern);
365
+ return [4 /*yield*/, (0, glob_promise_1.default)(pathPattern, { nodir: true })];
366
+ case 1:
367
+ matches = _a.sent();
368
+ return [4 /*yield*/, matches.reduce(function (acc, match) { return acc.then(function () { return cb(match); }); }, Promise.resolve())];
369
+ case 2:
370
+ _a.sent();
371
+ return [2 /*return*/];
372
+ }
373
+ });
374
+ });
375
+ };
376
+ AmxxBuilder.prototype.watchDir = function (baseDir, pattern, cb) {
377
+ return __awaiter(this, void 0, void 0, function () {
378
+ var pathPattern, watcher, updateFn;
379
+ var _this = this;
380
+ return __generator(this, function (_a) {
381
+ pathPattern = path_1.default.join(baseDir, pattern);
382
+ watcher = chokidar_1.default.watch(pathPattern, { ignoreInitial: true });
383
+ updateFn = function (filePath) { return cb(filePath).catch(function (err) { return _this.logger.error(err.message); }); };
384
+ watcher.on('add', updateFn);
385
+ watcher.on('change', updateFn);
386
+ return [2 /*return*/];
387
+ });
388
+ });
389
+ };
390
+ return AmxxBuilder;
391
+ }());
392
+ exports.default = AmxxBuilder;
@@ -0,0 +1,3 @@
1
+ export declare const SCRIPTS_PATH_PATTERN = "**/*.sma";
2
+ export declare const INCLUDE_PATH_PATTERN = "**/*.inc";
3
+ export declare const ASSETS_PATH_PATTERN = "**/*.*";
@@ -0,0 +1,6 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.ASSETS_PATH_PATTERN = exports.INCLUDE_PATH_PATTERN = exports.SCRIPTS_PATH_PATTERN = void 0;
4
+ exports.SCRIPTS_PATH_PATTERN = '**/*.sma';
5
+ exports.INCLUDE_PATH_PATTERN = '**/*.inc';
6
+ exports.ASSETS_PATH_PATTERN = '**/*.*';
@@ -0,0 +1,2 @@
1
+ export { default } from './builder';
2
+ export * from './types';
@@ -0,0 +1,20 @@
1
+ "use strict";
2
+ var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
3
+ if (k2 === undefined) k2 = k;
4
+ Object.defineProperty(o, k2, { enumerable: true, get: function() { return m[k]; } });
5
+ }) : (function(o, m, k, k2) {
6
+ if (k2 === undefined) k2 = k;
7
+ o[k2] = m[k];
8
+ }));
9
+ var __exportStar = (this && this.__exportStar) || function(m, exports) {
10
+ for (var p in m) if (p !== "default" && !Object.prototype.hasOwnProperty.call(exports, p)) __createBinding(exports, m, p);
11
+ };
12
+ var __importDefault = (this && this.__importDefault) || function (mod) {
13
+ return (mod && mod.__esModule) ? mod : { "default": mod };
14
+ };
15
+ Object.defineProperty(exports, "__esModule", { value: true });
16
+ exports.default = void 0;
17
+ // eslint-disable-next-line no-restricted-exports
18
+ var builder_1 = require("./builder");
19
+ Object.defineProperty(exports, "default", { enumerable: true, get: function () { return __importDefault(builder_1).default; } });
20
+ __exportStar(require("./types"), exports);
@@ -0,0 +1,17 @@
1
+ export interface IAmxxBuilderConfig {
2
+ compiler: {
3
+ executable: string;
4
+ include: string[];
5
+ };
6
+ input: {
7
+ scripts: string;
8
+ include: string;
9
+ assets: string;
10
+ };
11
+ output: {
12
+ scripts: string;
13
+ plugins: string;
14
+ include: string;
15
+ assets: string;
16
+ };
17
+ }
@@ -0,0 +1,2 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
@@ -0,0 +1,10 @@
1
+ import AmxxBuilder, { IAmxxBuilderConfig } from '../builder';
2
+ declare class Controller {
3
+ loadConfig(configPath: string): Promise<IAmxxBuilderConfig>;
4
+ createBuilder(configPath: string): Promise<AmxxBuilder>;
5
+ init(projectDir: string): Promise<void>;
6
+ compile(scriptPath: string, configPath: string): Promise<void>;
7
+ build(configPath: string, watch: boolean): Promise<void>;
8
+ }
9
+ declare const _default: Controller;
10
+ export default _default;
@@ -0,0 +1,163 @@
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
+ var path_1 = __importDefault(require("path"));
43
+ var fs_1 = __importDefault(require("fs"));
44
+ var mkdirp_1 = __importDefault(require("mkdirp"));
45
+ // import childProcess from 'child_process';
46
+ var builder_1 = __importDefault(require("../builder"));
47
+ function resolveConfigPath(configPath) {
48
+ return path_1.default.isAbsolute(configPath) ? configPath : path_1.default.join(process.cwd(), configPath);
49
+ }
50
+ var Controller = /** @class */ (function () {
51
+ function Controller() {
52
+ }
53
+ Controller.prototype.loadConfig = function (configPath) {
54
+ return __awaiter(this, void 0, void 0, function () {
55
+ var resolvedPath, config;
56
+ return __generator(this, function (_a) {
57
+ resolvedPath = resolveConfigPath(configPath);
58
+ if (!fs_1.default.existsSync(resolvedPath)) {
59
+ // eslint-disable-next-line no-console
60
+ console.log('Project is not initialzied! Use "init" command to initialize the project!');
61
+ process.exit(1);
62
+ }
63
+ config = require(resolvedPath);
64
+ return [2 /*return*/, config];
65
+ });
66
+ });
67
+ };
68
+ Controller.prototype.createBuilder = function (configPath) {
69
+ return __awaiter(this, void 0, void 0, function () {
70
+ var config, builder;
71
+ return __generator(this, function (_a) {
72
+ switch (_a.label) {
73
+ case 0: return [4 /*yield*/, this.loadConfig(configPath)];
74
+ case 1:
75
+ config = _a.sent();
76
+ builder = new builder_1.default(config);
77
+ return [2 /*return*/, builder];
78
+ }
79
+ });
80
+ });
81
+ };
82
+ Controller.prototype.init = function (projectDir) {
83
+ return __awaiter(this, void 0, void 0, function () {
84
+ var configPath, config, _a, _b;
85
+ return __generator(this, function (_c) {
86
+ switch (_c.label) {
87
+ case 0:
88
+ configPath = path_1.default.join(projectDir, '.amxxpack.json');
89
+ return [4 /*yield*/, fs_1.default.promises.copyFile(path_1.default.join(__dirname, '../../resources/default-config.json'), configPath)];
90
+ case 1:
91
+ _c.sent();
92
+ _b = (_a = JSON).parse;
93
+ return [4 /*yield*/, fs_1.default.promises.readFile(configPath, 'utf8')];
94
+ case 2:
95
+ config = _b.apply(_a, [_c.sent()]);
96
+ return [4 /*yield*/, (0, mkdirp_1.default)(path_1.default.join(projectDir, config.input.assets))];
97
+ case 3:
98
+ _c.sent();
99
+ return [4 /*yield*/, (0, mkdirp_1.default)(path_1.default.join(projectDir, config.input.include))];
100
+ case 4:
101
+ _c.sent();
102
+ return [4 /*yield*/, (0, mkdirp_1.default)(path_1.default.join(projectDir, config.input.scripts))];
103
+ case 5:
104
+ _c.sent();
105
+ return [2 /*return*/];
106
+ }
107
+ });
108
+ });
109
+ };
110
+ Controller.prototype.compile = function (scriptPath, configPath) {
111
+ return __awaiter(this, void 0, void 0, function () {
112
+ var builder, matches;
113
+ var _this = this;
114
+ return __generator(this, function (_a) {
115
+ switch (_a.label) {
116
+ case 0: return [4 /*yield*/, this.createBuilder(configPath)];
117
+ case 1:
118
+ builder = _a.sent();
119
+ return [4 /*yield*/, builder.findPlugins(scriptPath)];
120
+ case 2:
121
+ matches = _a.sent();
122
+ matches.map(function (filePath) { return __awaiter(_this, void 0, void 0, function () {
123
+ var srcPath;
124
+ return __generator(this, function (_a) {
125
+ switch (_a.label) {
126
+ case 0:
127
+ srcPath = path_1.default.resolve(filePath);
128
+ return [4 /*yield*/, builder.compilePlugin(srcPath)];
129
+ case 1:
130
+ _a.sent();
131
+ return [2 /*return*/];
132
+ }
133
+ });
134
+ }); });
135
+ return [2 /*return*/];
136
+ }
137
+ });
138
+ });
139
+ };
140
+ Controller.prototype.build = function (configPath, watch) {
141
+ return __awaiter(this, void 0, void 0, function () {
142
+ var builder;
143
+ return __generator(this, function (_a) {
144
+ switch (_a.label) {
145
+ case 0: return [4 /*yield*/, this.createBuilder(configPath)];
146
+ case 1:
147
+ builder = _a.sent();
148
+ return [4 /*yield*/, builder.build()];
149
+ case 2:
150
+ _a.sent();
151
+ if (!watch) return [3 /*break*/, 4];
152
+ return [4 /*yield*/, builder.watch()];
153
+ case 3:
154
+ _a.sent();
155
+ _a.label = 4;
156
+ case 4: return [2 /*return*/];
157
+ }
158
+ });
159
+ });
160
+ };
161
+ return Controller;
162
+ }());
163
+ exports.default = new Controller();
@@ -0,0 +1,2 @@
1
+ #!/usr/bin/env node
2
+ export {};
@@ -0,0 +1,8 @@
1
+ #!/usr/bin/env node
2
+ "use strict";
3
+ var __importDefault = (this && this.__importDefault) || function (mod) {
4
+ return (mod && mod.__esModule) ? mod : { "default": mod };
5
+ };
6
+ Object.defineProperty(exports, "__esModule", { value: true });
7
+ var program_1 = __importDefault(require("./program"));
8
+ program_1.default.parse();
@@ -0,0 +1,4 @@
1
+ #!/usr/bin/env node
2
+ import { Command } from 'commander';
3
+ declare const program: Command;
4
+ export default program;
@@ -0,0 +1,101 @@
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 commander_1 = require("commander");
44
+ var controller_1 = __importDefault(require("./controller"));
45
+ var program = new commander_1.Command();
46
+ program
47
+ .name('AMXXPack CLI')
48
+ .description('Simple AmxModX CLI');
49
+ program
50
+ .command('init')
51
+ .action(function () { return __awaiter(void 0, void 0, void 0, function () {
52
+ var projectDir;
53
+ return __generator(this, function (_a) {
54
+ switch (_a.label) {
55
+ case 0:
56
+ projectDir = process.cwd();
57
+ return [4 /*yield*/, controller_1.default.init(projectDir)];
58
+ case 1:
59
+ _a.sent();
60
+ return [2 /*return*/];
61
+ }
62
+ });
63
+ }); });
64
+ program
65
+ .command('compile')
66
+ .argument('<path>', 'Script path or glob')
67
+ .option('--config, -c', 'Config file', '.amxxpack.json')
68
+ .action(function (str, options) { return __awaiter(void 0, void 0, void 0, function () {
69
+ return __generator(this, function (_a) {
70
+ switch (_a.label) {
71
+ case 0: return [4 /*yield*/, controller_1.default.compile(str, options.C)];
72
+ case 1:
73
+ _a.sent();
74
+ return [2 /*return*/];
75
+ }
76
+ });
77
+ }); });
78
+ program
79
+ .command('build')
80
+ .option('--watch, -w', 'Watch project')
81
+ .option('--config, -c', 'Config file', '.amxxpack.json')
82
+ .action(function (str, options) { return __awaiter(void 0, void 0, void 0, function () {
83
+ var opts;
84
+ return __generator(this, function (_a) {
85
+ switch (_a.label) {
86
+ case 0:
87
+ opts = options.opts();
88
+ return [4 /*yield*/, controller_1.default.build(opts.C, opts.W)];
89
+ case 1:
90
+ _a.sent();
91
+ return [2 /*return*/];
92
+ }
93
+ });
94
+ }); });
95
+ // program
96
+ // .command('create')
97
+ // .argument('<name>', 'Project name')
98
+ // .action(async (name: string) => {
99
+ // await controller.createProject(name);
100
+ // });
101
+ exports.default = program;
package/lib/index.d.ts ADDED
@@ -0,0 +1,2 @@
1
+ export { default } from './builder';
2
+ export * from './builder';
package/lib/index.js ADDED
@@ -0,0 +1,20 @@
1
+ "use strict";
2
+ var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
3
+ if (k2 === undefined) k2 = k;
4
+ Object.defineProperty(o, k2, { enumerable: true, get: function() { return m[k]; } });
5
+ }) : (function(o, m, k, k2) {
6
+ if (k2 === undefined) k2 = k;
7
+ o[k2] = m[k];
8
+ }));
9
+ var __exportStar = (this && this.__exportStar) || function(m, exports) {
10
+ for (var p in m) if (p !== "default" && !Object.prototype.hasOwnProperty.call(exports, p)) __createBinding(exports, m, p);
11
+ };
12
+ var __importDefault = (this && this.__importDefault) || function (mod) {
13
+ return (mod && mod.__esModule) ? mod : { "default": mod };
14
+ };
15
+ Object.defineProperty(exports, "__esModule", { value: true });
16
+ exports.default = void 0;
17
+ // eslint-disable-next-line no-restricted-exports
18
+ var builder_1 = require("./builder");
19
+ Object.defineProperty(exports, "default", { enumerable: true, get: function () { return __importDefault(builder_1).default; } });
20
+ __exportStar(require("./builder"), exports);
@@ -0,0 +1,22 @@
1
+ export interface ILoggerOptions {
2
+ debug?: boolean;
3
+ }
4
+ export declare enum LogLevel {
5
+ Debug = "debug",
6
+ Success = "success",
7
+ Info = "info",
8
+ Warning = "warning",
9
+ Error = "error"
10
+ }
11
+ export default class Logger {
12
+ private debugMode;
13
+ constructor(options?: ILoggerOptions);
14
+ debug(...args: any[]): void;
15
+ success(...args: any[]): void;
16
+ info(...args: any[]): void;
17
+ warn(...args: any[]): void;
18
+ error(...args: any[]): void;
19
+ out(level: LogLevel, ...args: any[]): void;
20
+ private colorifyMessageByLevel;
21
+ private getLevelLabel;
22
+ }
@@ -0,0 +1,104 @@
1
+ "use strict";
2
+ var __spreadArray = (this && this.__spreadArray) || function (to, from, pack) {
3
+ if (pack || arguments.length === 2) for (var i = 0, l = from.length, ar; i < l; i++) {
4
+ if (ar || !(i in from)) {
5
+ if (!ar) ar = Array.prototype.slice.call(from, 0, i);
6
+ ar[i] = from[i];
7
+ }
8
+ }
9
+ return to.concat(ar || Array.prototype.slice.call(from));
10
+ };
11
+ var __importDefault = (this && this.__importDefault) || function (mod) {
12
+ return (mod && mod.__esModule) ? mod : { "default": mod };
13
+ };
14
+ Object.defineProperty(exports, "__esModule", { value: true });
15
+ exports.LogLevel = void 0;
16
+ var safe_1 = __importDefault(require("colors/safe"));
17
+ var LogLevel;
18
+ (function (LogLevel) {
19
+ LogLevel["Debug"] = "debug";
20
+ LogLevel["Success"] = "success";
21
+ LogLevel["Info"] = "info";
22
+ LogLevel["Warning"] = "warning";
23
+ LogLevel["Error"] = "error";
24
+ })(LogLevel = exports.LogLevel || (exports.LogLevel = {}));
25
+ var Logger = /** @class */ (function () {
26
+ function Logger(options) {
27
+ if (options === void 0) { options = {}; }
28
+ this.debugMode = false;
29
+ this.debugMode = options.debug || false;
30
+ }
31
+ Logger.prototype.debug = function () {
32
+ var args = [];
33
+ for (var _i = 0; _i < arguments.length; _i++) {
34
+ args[_i] = arguments[_i];
35
+ }
36
+ this.out.apply(this, __spreadArray([LogLevel.Debug], args, false));
37
+ };
38
+ Logger.prototype.success = function () {
39
+ var args = [];
40
+ for (var _i = 0; _i < arguments.length; _i++) {
41
+ args[_i] = arguments[_i];
42
+ }
43
+ this.out.apply(this, __spreadArray([LogLevel.Success], args, false));
44
+ };
45
+ Logger.prototype.info = function () {
46
+ var args = [];
47
+ for (var _i = 0; _i < arguments.length; _i++) {
48
+ args[_i] = arguments[_i];
49
+ }
50
+ this.out.apply(this, __spreadArray([LogLevel.Info], args, false));
51
+ };
52
+ Logger.prototype.warn = function () {
53
+ var args = [];
54
+ for (var _i = 0; _i < arguments.length; _i++) {
55
+ args[_i] = arguments[_i];
56
+ }
57
+ this.out.apply(this, __spreadArray([LogLevel.Warning], args, false));
58
+ };
59
+ Logger.prototype.error = function () {
60
+ var args = [];
61
+ for (var _i = 0; _i < arguments.length; _i++) {
62
+ args[_i] = arguments[_i];
63
+ }
64
+ this.out.apply(this, __spreadArray([LogLevel.Error], args, false));
65
+ };
66
+ Logger.prototype.out = function (level) {
67
+ var args = [];
68
+ for (var _i = 1; _i < arguments.length; _i++) {
69
+ args[_i - 1] = arguments[_i];
70
+ }
71
+ if (level === 'debug' && !this.debugMode) {
72
+ return;
73
+ }
74
+ var message = args
75
+ .map(function (arg) { return ((arg instanceof Object) ? JSON.stringify(arg) : arg); })
76
+ .join(' ');
77
+ var label = this.getLevelLabel(level);
78
+ var coloredMessage = this.colorifyMessageByLevel(level, message);
79
+ // eslint-disable-next-line no-console
80
+ console.log(label, coloredMessage);
81
+ };
82
+ Logger.prototype.colorifyMessageByLevel = function (level, message) {
83
+ switch (level) {
84
+ case LogLevel.Debug: return safe_1.default.grey(message);
85
+ case LogLevel.Success: return safe_1.default.white(message);
86
+ case LogLevel.Info: return safe_1.default.grey(message);
87
+ case LogLevel.Warning: return safe_1.default.white(message);
88
+ case LogLevel.Error: return safe_1.default.white(message);
89
+ }
90
+ return message;
91
+ };
92
+ Logger.prototype.getLevelLabel = function (level) {
93
+ switch (level) {
94
+ case LogLevel.Debug: return safe_1.default.grey('[DEBUG]');
95
+ case LogLevel.Success: return safe_1.default.green('[SUCCESS]');
96
+ case LogLevel.Info: return safe_1.default.cyan('[INFO]');
97
+ case LogLevel.Warning: return safe_1.default.yellow('[WARNING]');
98
+ case LogLevel.Error: return safe_1.default.red('[ERROR]');
99
+ }
100
+ return '';
101
+ };
102
+ return Logger;
103
+ }());
104
+ exports.default = Logger;
@@ -0,0 +1 @@
1
+ export default function accumulator(): (data?: string | undefined) => string;
@@ -0,0 +1,10 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ function accumulator() {
4
+ var value = '';
5
+ return function (data) {
6
+ value += (data || '');
7
+ return value;
8
+ };
9
+ }
10
+ exports.default = accumulator;
package/package.json ADDED
@@ -0,0 +1,52 @@
1
+ {
2
+ "name": "amxxpack",
3
+ "description": "AMXXPack",
4
+ "author": "Hedgehog Fog",
5
+ "version": "0.0.3",
6
+ "license": "MIT",
7
+ "main": "lib/builder/index.js",
8
+ "types": "lib/builder/index.d.ts",
9
+ "files": [
10
+ "lib/**/*",
11
+ "resources/**/*"
12
+ ],
13
+ "scripts": {
14
+ "build": "tsc",
15
+ "lint": "eslint",
16
+ "prepare": "npm run build"
17
+ },
18
+ "bin": {
19
+ "amxxpack": "./lib/cli/index.js"
20
+ },
21
+ "keywords": [
22
+ "amx",
23
+ "amxx",
24
+ "amxmodx",
25
+ "cli",
26
+ "pawn"
27
+ ],
28
+ "dependencies": {
29
+ "chalk": "^5.0.0",
30
+ "chokidar": "^3.5.3",
31
+ "colors": "^1.4.0",
32
+ "commander": "^9.0.0",
33
+ "glob": "^7.2.0",
34
+ "glob-promise": "^4.2.2",
35
+ "mkdirp": "^1.0.4",
36
+ "normalize-path": "^3.0.0"
37
+ },
38
+ "devDependencies": {
39
+ "@types/chokidar": "^2.1.3",
40
+ "@types/colors": "^1.2.1",
41
+ "@types/commander": "^2.12.2",
42
+ "@types/mkdirp": "^1.0.2",
43
+ "@types/normalize-path": "^3.0.0",
44
+ "@typescript-eslint/eslint-plugin": "^5.12.0",
45
+ "@typescript-eslint/parser": "^5.12.0",
46
+ "eslint": "^8.9.0",
47
+ "eslint-config-airbnb-base": "^15.0.0",
48
+ "eslint-config-airbnb-typescript": "^16.1.0",
49
+ "eslint-plugin-import": "^2.25.4",
50
+ "typescript": "^4.5.5"
51
+ }
52
+ }
@@ -0,0 +1,19 @@
1
+ {
2
+ "compiler": {
3
+ "executable": "./compiler/amxxpc.exe",
4
+ "include": [
5
+ "./compiler/include"
6
+ ]
7
+ },
8
+ "input": {
9
+ "scripts": "./src/scripts",
10
+ "include": "./src/include",
11
+ "assets": "./assets"
12
+ },
13
+ "output": {
14
+ "scripts": "./dist/addons/amxmodx/scripting",
15
+ "plugins": "./dist/addons/amxmodx/plugins",
16
+ "include": "./dist/addons/amxmodx/scripting/include",
17
+ "assets": "./dist"
18
+ }
19
+ }