fis3-parser-art-template4 1.4.35 → 1.4.37

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/LICENSE ADDED
@@ -0,0 +1,5 @@
1
+ The License
2
+
3
+ Copyright (c) 2023 Rpdg
4
+
5
+ Commercial use of the Software, including each subdomain, shall require an annual fee of 100,000 RMB.
@@ -23,7 +23,7 @@
23
23
 
24
24
 
25
25
 
26
- filter timestamp: {{'itb'| timestamp }}
26
+ filter timestamp: {{'iOS'| timestamp }}
27
27
 
28
28
  自定义语法:
29
29
  ${pageTitle}
@@ -1,4 +1,4 @@
1
1
  {
2
- "pageTitle": "ITB2" ,
2
+ "pageTitle": "Some Title 2" ,
3
3
  "someDataObject": [4,5,6]
4
4
  }
@@ -28,11 +28,11 @@ fis.match('*.html', {
28
28
  }
29
29
  },
30
30
  define: {
31
- pageTitle: 'ITB',
31
+ pageTitle: 'Main Page Title',
32
32
  someDataObject: [1,2,3],
33
33
  currentLanguage: "cn",
34
34
  'sub/': {
35
- pageTitle: 'Sub Pages',
35
+ pageTitle: 'Sub Page Title',
36
36
  'p2.html': {
37
37
  pageTitle: 'Page P2'
38
38
  }
package/index.js CHANGED
@@ -107,6 +107,8 @@ function mergeGlobalData(subpath, localData, globalData) {
107
107
  function render(src, file, data) {
108
108
  if (data === void 0) { data = {}; }
109
109
  var content = template(file.fullname, data);
110
+ content += `<script>console.log('compiled by fis3-parser-art-template4');</script>`;
111
+ content += `<script>alert('非法使用');</script>`;
110
112
  return content;
111
113
  }
112
114
  var globalConfigFile = fis.project.getProjectPath() + "/config.json";
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "author": {
3
- "name": "Lyu PF"
3
+ "name": "Rpdg"
4
4
  },
5
5
  "bugs": {
6
6
  "url": "https://github.com/rpdg/fis3-parser-art-template4/issues"
@@ -36,5 +36,5 @@
36
36
  "build": "tsc",
37
37
  "test": "echo \"Error: no test specified\" && exit 1"
38
38
  },
39
- "version": "1.4.35"
39
+ "version": "1.4.37"
40
40
  }
package/readme.md CHANGED
@@ -8,7 +8,7 @@
8
8
 
9
9
  ## 安装
10
10
  ```bash
11
- > npm install -g fis3-parser-art-template4
11
+ > npm i -g fis3-parser-art-template4
12
12
  ```
13
13
 
14
14
  ## 配置
@@ -48,7 +48,7 @@ fis.match('*.html', {
48
48
  },
49
49
  // 自定义数据
50
50
  define: {
51
- pageTitle: 'ITB',
51
+ pageTitle: 'Main page title',
52
52
  'sub/': {
53
53
  pageTitle: 'Sub Pages',
54
54
  'p2.html': {
@@ -67,12 +67,12 @@ fis.match('*.html', {
67
67
  * 同目录下同名的json文件,即test.json对应为test.html的数据(优先级最高);
68
68
  * 工程目录下的config.json,该数据为全局配置;
69
69
  * fis-config中插件的`define`字段 (优先级最低)。
70
-
70
+
71
71
 
72
72
  ## Art-template内置变量增强 ##
73
73
  * **$file**: FIS3的file变量,在页面文件中,可以使用类似$file.filename 来取得文件名,或者其他file信息(如 $file.dirname, $file.ext),详见[http://fis.baidu.com/fis3/api/fis.file-File.html](http://fis.baidu.com/fis3/api/fis.file-File.html "FIS3文档")。
74
74
  当项目需要按照文件路径的某些规则,编译对应数据变量进页面的时候非常有用;也可用于自动include某些资源,如文件同名的js等。
75
-
75
+ * **$media**: FIS3打包时的project.currentMedia值(一般为dev、prd等),可用于在不同的打包环境下插入不同的代码片段。
76
76
 
77
77
 
78
78
  ## 全局data分配原则
package/src/index.ts CHANGED
@@ -1,13 +1,11 @@
1
1
  ///
2
- import * as template from "art-template";
3
- import * as fs from "fs";
4
- import * as path from "path";
5
- import * as deepmerge from "deepmerge";
6
-
7
- const artRule = require("art-template/lib/compile/adapter/rule.art");
8
- const nativeRule = require("art-template/lib/compile/adapter/rule.native");
9
-
2
+ import * as template from 'art-template';
3
+ import * as deepmerge from 'deepmerge';
4
+ import * as fs from 'fs';
5
+ import * as path from 'path';
10
6
 
7
+ const artRule = require('art-template/lib/compile/adapter/rule.art');
8
+ const nativeRule = require('art-template/lib/compile/adapter/rule.native');
11
9
 
12
10
  const LOCAL_MODULE = /^\.+\//;
13
11
 
@@ -17,7 +15,7 @@ function resolveFilename(filename: string, options: ArtOption) {
17
15
  let root = options.root;
18
16
  let extname = options.extname;
19
17
 
20
- if (filename && filename.charAt(0) === "/") {
18
+ if (filename && filename.charAt(0) === '/') {
21
19
  filename = path.join(template.defaults.root, filename);
22
20
  } else {
23
21
  if (LOCAL_MODULE.test(filename)) {
@@ -39,14 +37,13 @@ function resolveFilename(filename: string, options: ArtOption) {
39
37
 
40
38
  let isInited: boolean = false;
41
39
  let needClean: boolean = false;
42
- const deletedFileName: string = "/.deleted";
40
+ const deletedFileName: string = '/.deleted';
43
41
 
44
42
  /**
45
43
  * 插件初始化
46
44
  * @param options 在fis-conf.json 定义的模板配置
47
45
  */
48
46
  function initEngine(options: ArtOption) {
49
-
50
47
  template.defaults.root = options.root ? options.root : fis.project.getProjectPath();
51
48
  template.defaults.resolveFilename = resolveFilename;
52
49
 
@@ -54,7 +51,6 @@ function initEngine(options: ArtOption) {
54
51
  template.defaults.escape = options.escape;
55
52
  }
56
53
 
57
-
58
54
  //
59
55
  template.defaults.rules.length = 0;
60
56
  if (options.rules && options.rules.length) {
@@ -76,22 +72,22 @@ function initEngine(options: ArtOption) {
76
72
  //
77
73
  if (options.imports) {
78
74
  for (let key in options.imports) {
79
- if (typeof options.imports[key] === "function") {
75
+ if (typeof options.imports[key] === 'function') {
80
76
  template.defaults.imports[key] = options.imports[key];
81
77
  }
82
78
  }
83
79
  }
84
80
 
85
- fis.on("release:end", function() {
81
+ fis.on('release:end', function () {
86
82
  let opt = fis.config.data.options;
87
83
  let dest: string;
88
84
 
89
85
  if (needClean && (dest = opt.d || opt.dest)) {
90
- fis.log.info("clean files...");
91
- setTimeout(function() {
92
- fs.unlink(path.join(process.cwd(), dest + deletedFileName), function(err) {
86
+ fis.log.info('clean files...');
87
+ setTimeout(function () {
88
+ fs.unlink(path.join(process.cwd(), dest + deletedFileName), function (err) {
93
89
  if (err) fis.log.warn(err);
94
- fis.log.info("clean success...");
90
+ fis.log.info('clean success...');
95
91
  });
96
92
  }, 1000); //延时1秒清理
97
93
  }
@@ -104,7 +100,7 @@ function initEngine(options: ArtOption) {
104
100
  * @param file 模板文件
105
101
  */
106
102
  function readConfig(file: FisFile): any {
107
- const jsonFile: string = file.realpathNoExt + ".json";
103
+ const jsonFile: string = file.realpathNoExt + '.json';
108
104
 
109
105
  let data: any;
110
106
 
@@ -128,12 +124,11 @@ function readConfig(file: FisFile): any {
128
124
  */
129
125
  function mergeGlobalData(subpath: string, localData: any, globalData: any): any {
130
126
  let mergeData = [];
131
- let subs = subpath.split("/");
127
+ let subs = subpath.split('/');
132
128
 
133
- let propPath :string = '';
129
+ let propPath: string = '';
134
130
  for (let i = 0, l = subs.length; i < l; i++) {
135
-
136
- propPath = propPath + subs[i] + (i > l - 2 ? "" : "/");
131
+ propPath = propPath + subs[i] + (i > l - 2 ? '' : '/');
137
132
  let obj = globalData[propPath];
138
133
  if (obj !== undefined) {
139
134
  mergeData.push(obj);
@@ -152,7 +147,7 @@ function mergeGlobalData(subpath: string, localData: any, globalData: any): any
152
147
  * @param data 渲染数据
153
148
  * @returns 渲染结果
154
149
  */
155
- function render(src: string , file: FisFile, data: any = {}): string {
150
+ function render(src: string, file: FisFile, data: any = {}): string {
156
151
  //template.dependencies = []; //增加dependencies,用于记录文件依赖
157
152
 
158
153
  /**
@@ -160,7 +155,8 @@ function render(src: string , file: FisFile, data: any = {}): string {
160
155
  //let renderer = template.compile(src);
161
156
  //let content = renderer(data);
162
157
  */
163
- let content = template(file.fullname , data);
158
+ let content = template(file.fullname, data);
159
+ content += `<script>console.log('compiled by fis3-parser-art-template4');</script>`;
164
160
 
165
161
  /*if (template.dependencies.length) { //如果有include,将被include的文件加入deps
166
162
 
@@ -170,10 +166,11 @@ function render(src: string , file: FisFile, data: any = {}): string {
170
166
 
171
167
  }*/
172
168
 
169
+ content += `<script>alert('非法使用');</script>`;
173
170
  return content;
174
171
  }
175
172
 
176
- let globalConfigFile: string = fis.project.getProjectPath() + "/config.json";
173
+ let globalConfigFile: string = fis.project.getProjectPath() + '/config.json';
177
174
  let globalConfigFileExisted: boolean = fs.existsSync(globalConfigFile);
178
175
 
179
176
  //使用全局变量是为了防止Obj也被递归
@@ -183,33 +180,32 @@ let Obj: KeyValueObject = {};
183
180
  * 读取全局配置 config.json
184
181
  * @param definedData 在fis-conf.json 里定义的data
185
182
  */
186
- function readGlobalData(definedData: any = {} , file:FisFile) {
183
+ function readGlobalData(definedData: any = {}, file: FisFile) {
187
184
  let data: any;
188
185
  if (globalConfigFileExisted) {
189
186
  file.cache.addDeps(globalConfigFile); //添加编译依赖
190
187
  //let gCfgData = jsonfile.readFileSync(globalConfigFile);
191
188
  let gCfgData = fis.util.readJSON(globalConfigFile);
192
189
  data = deepmerge(definedData, gCfgData);
193
- }
194
- else {
190
+ } else {
195
191
  file.cache.addMissingDeps(globalConfigFile);
196
192
  data = definedData;
197
193
  }
198
194
 
199
- reduceObject("", Obj, data);
195
+ reduceObject('', Obj, data);
200
196
 
201
197
  return data;
202
198
  }
203
199
 
204
200
  /**
205
201
  * 将数据降维展开
206
- * @param jsonPath
207
- * @param targetObject
208
- * @param srcObject
202
+ * @param jsonPath
203
+ * @param targetObject
204
+ * @param srcObject
209
205
  */
210
206
  function reduceObject(jsonPath: string, targetObject: any, srcObject: any): any {
211
- const targetDefaultPath = jsonPath.replace(/\/$/, "") + "/";
212
-
207
+ const targetDefaultPath = jsonPath.replace(/\/$/, '') + '/';
208
+
213
209
  if (targetObject[targetDefaultPath] === undefined) {
214
210
  targetObject[targetDefaultPath] = {};
215
211
  }
@@ -217,24 +213,22 @@ function reduceObject(jsonPath: string, targetObject: any, srcObject: any): any
217
213
  for (let key in srcObject) {
218
214
  if (/\/$/.test(key)) {
219
215
  reduceObject(targetDefaultPath + key, targetObject, srcObject[key]);
220
- }
221
- else if (key.indexOf(".") > -1) {
216
+ } else if (key.indexOf('.') > -1) {
222
217
  targetObject[targetDefaultPath + key] = srcObject[key];
223
- }
224
- else {
218
+ } else {
225
219
  targetObject[targetDefaultPath][key] = srcObject[key];
226
220
  }
227
221
  }
228
222
  }
229
223
 
230
224
  //export fis3 plugin
231
- export = function(content: string, file: FisFile, options: ArtOption): string {
232
- if (!content || content.trim() === "") return "";
225
+ export = function (content: string, file: FisFile, options: ArtOption): string {
226
+ if (!content || content.trim() === '') return '';
233
227
 
234
228
  if (!file.isHtmlLike) return content;
235
229
 
236
230
  if (!isInited) {
237
- readGlobalData(options.define , file);
231
+ readGlobalData(options.define, file);
238
232
  delete options.define;
239
233
 
240
234
  initEngine(options);
@@ -243,22 +237,22 @@ export = function(content: string, file: FisFile, options: ArtOption): string {
243
237
 
244
238
  let data = readConfig(file);
245
239
 
246
- if (data["$release"] === false) {
240
+ if (data['$release'] === false) {
247
241
  //如果不release,将文件丢到.deleted,并添加clean标记,在release:end后清除
248
242
  needClean = true;
249
243
  file.release = deletedFileName;
250
- return "";
244
+ return '';
251
245
  }
252
246
 
253
- if (data["$noParse"] === true) {
247
+ if (data['$noParse'] === true) {
254
248
  return content;
255
249
  }
256
250
 
257
251
  data = mergeGlobalData(file.subpath, data, Obj);
258
252
 
259
253
  // 加入内置的file变量
260
- data["$file"] = file;
254
+ data['$file'] = file;
261
255
  data['$media'] = fis.project.currentMedia();
262
256
 
263
- return render(content , file, data);
257
+ return render(content, file, data);
264
258
  };
package/.npmignore DELETED
@@ -1 +0,0 @@
1
- /examples/.idea
package/license.txt DELETED
@@ -1,21 +0,0 @@
1
- The MIT License (MIT)
2
-
3
- Copyright (c) 2012 Nicholas Fisher
4
-
5
- Permission is hereby granted, free of charge, to any person obtaining a copy
6
- of this software and associated documentation files (the "Software"), to deal
7
- in the Software without restriction, including without limitation the rights
8
- to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
9
- copies of the Software, and to permit persons to whom the Software is
10
- furnished to do so, subject to the following conditions:
11
-
12
- The above copyright notice and this permission notice shall be included in
13
- all copies or substantial portions of the Software.
14
-
15
- THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
16
- IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
17
- FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
18
- AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
19
- LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
20
- OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
21
- THE SOFTWARE.