UNPKG

3.63 kBJavaScriptView Raw
1"use strict";
2var __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};
10const ast = require("egret-typescript-ast");
11const path = require("path");
12const ts = require("typescript");
13const _1 = require("./");
14const fs = require("fs-extra-promise");
15function 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}
30exports.getConfigViaDecorator = getConfigViaDecorator;
31function 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, /*setParentNodes */ true);
37 content = yield delint(sourceFile, matcher, replacedText);
38 return content;
39 });
40}
41exports.publish = publish;
42//分析特定文件中的 exports.resource = {blablabla},将其中右侧的内容进行替换
43function delint(sourceFile, matcher, replacedText) {
44 let config = _1.ResourceConfig.config;
45 return new Promise((reslove, reject) => {
46 function delintNode(node) {
47 // ExpressionStatement 表达式
48 // |-- BinaryExpression 二元表达式
49 // |-- left 左侧
50 // |-- right 右侧
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}