1 | "use strict";
|
2 | var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
|
3 | return new (P || (P = Promise))(function (resolve, reject) {
|
4 | function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
|
5 | function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
|
6 | function step(result) { result.done ? resolve(result.value) : new P(function (resolve) { resolve(result.value); }).then(fulfilled, rejected); }
|
7 | step((generator = generator.apply(thisArg, _arguments)).next());
|
8 | });
|
9 | };
|
10 | const ast = require("egret-typescript-ast");
|
11 | const path = require("path");
|
12 | const ts = require("typescript");
|
13 | const _1 = require("./");
|
14 | const fs = require("fs-extra-promise");
|
15 | function getConfigViaDecorator(egretRoot) {
|
16 | return __awaiter(this, void 0, void 0, function* () {
|
17 | let decorators = yield ast.findDecorator(path.join(egretRoot, "src/Main.ts"));
|
18 | decorators = decorators.filter(item => item.name == "RES.mapConfig");
|
19 | if (!decorators || decorators.length == 0 || decorators.length > 1) {
|
20 | throw new Error('missing decorator');
|
21 | }
|
22 | let decorator = decorators[0];
|
23 | let resourceConfigFileName = decorator.paramters[0];
|
24 | let typeSelector = decorator.paramters[2];
|
25 | let resourceRoot = "resource/";
|
26 | let resConfigFilePath = path.join(resourceRoot, resourceConfigFileName);
|
27 | return { resourceRoot, resourceConfigFileName, typeSelector };
|
28 | });
|
29 | }
|
30 | exports.getConfigViaDecorator = getConfigViaDecorator;
|
31 | function publish(filename, matcher, data) {
|
32 | return __awaiter(this, void 0, void 0, function* () {
|
33 | let replacedText = JSON.stringify(data, null, "\t");
|
34 | let config = _1.ResourceConfig.config;
|
35 | let content = yield fs.readFileAsync(filename, "utf-8");
|
36 | let sourceFile = ts.createSourceFile(filename, content, ts.ScriptTarget.ES2015, true);
|
37 | content = yield delint(sourceFile, matcher, replacedText);
|
38 | return content;
|
39 | });
|
40 | }
|
41 | exports.publish = publish;
|
42 |
|
43 | function delint(sourceFile, matcher, replacedText) {
|
44 | let config = _1.ResourceConfig.config;
|
45 | return new Promise((reslove, reject) => {
|
46 | function delintNode(node) {
|
47 |
|
48 |
|
49 |
|
50 |
|
51 | if (node.kind == ts.SyntaxKind.ExpressionStatement) {
|
52 | if (node.expression.kind == ts.SyntaxKind.BinaryExpression) {
|
53 | let expression = node.expression;
|
54 | if (expression.left.getText() == matcher) {
|
55 | let right = expression.right;
|
56 | let positionStart = right.getStart();
|
57 | let positionFinish = right.getWidth();
|
58 | let fullText = sourceFile.getFullText();
|
59 | fullText = fullText.substr(0, positionStart) + replacedText + fullText.substr(positionStart + positionFinish);
|
60 | result = fullText;
|
61 | }
|
62 | }
|
63 | }
|
64 | else {
|
65 | ts.forEachChild(node, delintNode);
|
66 | }
|
67 | }
|
68 | let result = "";
|
69 | let count = setInterval(() => {
|
70 | if (result) {
|
71 | clearInterval(count);
|
72 | reslove(result);
|
73 | }
|
74 | }, 100);
|
75 | delintNode(sourceFile);
|
76 | });
|
77 | }
|