node-tao 0.0.4 → 1.0.0
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 +32 -14
- package/error-utils.d.ts +5 -3
- package/error-utils.d.ts.map +1 -1
- package/error-utils.js +27 -4
- package/error-utils.js.map +1 -1
- package/index.d.ts +1 -1
- package/index.d.ts.map +1 -1
- package/interfaces.d.ts +24 -33
- package/interfaces.d.ts.map +1 -1
- package/metrics.d.ts +5 -3
- package/metrics.d.ts.map +1 -1
- package/metrics.js +94 -34
- package/metrics.js.map +1 -1
- package/package.json +45 -45
- package/store.js +2 -4
- package/store.js.map +1 -1
- package/tao.d.ts +14 -7
- package/tao.d.ts.map +1 -1
- package/tao.js +255 -153
- package/tao.js.map +1 -1
- package/templates-access.d.ts +1 -3
- package/templates-access.d.ts.map +1 -1
- package/templates-access.js +2 -10
- package/templates-access.js.map +1 -1
- package/utils.d.ts +10 -17
- package/utils.d.ts.map +1 -1
- package/utils.js +37 -123
- package/utils.js.map +1 -1
- package/{checks.d.ts → validations.d.ts} +1 -1
- package/validations.d.ts.map +1 -0
- package/{checks.js → validations.js} +1 -1
- package/validations.js.map +1 -0
- package/checks.d.ts.map +0 -1
- package/checks.js.map +0 -1
- package/parsing-helpers.d.ts +0 -8
- package/parsing-helpers.d.ts.map +0 -1
- package/parsing-helpers.js +0 -62
- package/parsing-helpers.js.map +0 -1
- /package/{error/error.html → error.html} +0 -0
package/README.md
CHANGED
|
@@ -2,11 +2,11 @@
|
|
|
2
2
|
|
|
3
3
|
<p align="center">
|
|
4
4
|
<img src="https://raw.githubusercontent.com/GreenFlag31/node-tao/main/node-tao.jpg" alt="node-tao template engine representation" width="300" height="300"/>
|
|
5
|
-
|
|
6
5
|
</p>
|
|
7
6
|
|
|
8
7
|
**`TAO`** is a simple, lightweight and very fast embedded JS templating. It emphasizes great performance, security, and developer experience.
|
|
9
8
|
|
|
9
|
+
|
|
10
10
|
### 🌟 Features
|
|
11
11
|
|
|
12
12
|
- 🚀 Super Fast
|
|
@@ -41,7 +41,7 @@ console.log(res); // <h1>Hi Tao!</h1>
|
|
|
41
41
|
|
|
42
42
|
Helpers are functions that can be used inside a template. Helpers can be **local** (only available in a particular `render`) or **global** (available everywhere on the instance).
|
|
43
43
|
|
|
44
|
-
```
|
|
44
|
+
```typescript
|
|
45
45
|
import { Tao } from 'tao';
|
|
46
46
|
|
|
47
47
|
const tao = new Tao({ views: path.join(__dirname, 'templates') });
|
|
@@ -53,6 +53,12 @@ function nPlusTwo(n: number) {
|
|
|
53
53
|
// Global helper need to be registered on the instance
|
|
54
54
|
tao.defineHelpers({ nPlusTwo });
|
|
55
55
|
|
|
56
|
+
// Define a dedicated interface for data and helpers passed to the template
|
|
57
|
+
interface SimpleData {
|
|
58
|
+
name: string;
|
|
59
|
+
nPlusOne: (n: number) => number;
|
|
60
|
+
}
|
|
61
|
+
|
|
56
62
|
// Render a template
|
|
57
63
|
app.get('/', (req, res) => {
|
|
58
64
|
// Local helper
|
|
@@ -60,8 +66,9 @@ app.get('/', (req, res) => {
|
|
|
60
66
|
return n + 1;
|
|
61
67
|
}
|
|
62
68
|
|
|
63
|
-
|
|
64
|
-
|
|
69
|
+
// Data and helpers are merged into a single object
|
|
70
|
+
const res = tao.render<SimpleData>('simple', { name: 'Tao', nPlusOne });
|
|
71
|
+
console.log(res); // <h1>Hi Tao!</h1>
|
|
65
72
|
});
|
|
66
73
|
```
|
|
67
74
|
|
|
@@ -86,7 +93,7 @@ In your template, you might want to include other templates:
|
|
|
86
93
|
<%~ include('article', { phone: 'Tao T9' }) %>
|
|
87
94
|
```
|
|
88
95
|
|
|
89
|
-
Child components will inherit from **data**
|
|
96
|
+
Child components will inherit from **data** provided in the parent component.
|
|
90
97
|
|
|
91
98
|
## Template prefix options
|
|
92
99
|
|
|
@@ -185,17 +192,23 @@ In case of an error, a visual representation is available in your browser, givin
|
|
|
185
192
|
|
|
186
193
|

|
|
187
194
|
|
|
188
|
-
NB: _set `
|
|
189
|
-
|
|
190
|
-
Metrics are also available, so you get usefull informations about the template rendering time, cache hit, mapped templates, etc. in your browser console.
|
|
195
|
+
NB: _set `development: true` to activate this option. Do not activate this option in production._
|
|
191
196
|
|
|
192
|
-
|
|
197
|
+
### DevTools widget
|
|
193
198
|
|
|
194
|
-
|
|
199
|
+
When `development: true` is set, a floating **Tao DevTools** button (`τ`) appears in the bottom-right corner of every rendered page. Clicking it opens a panel that shows:
|
|
195
200
|
|
|
196
|
-
|
|
201
|
+
| Field | Description |
|
|
202
|
+
| -------------------- | -------------------------------------------------------------- |
|
|
203
|
+
| **Template** | Name of the rendered template |
|
|
204
|
+
| **Render time** | Rendering time in ms |
|
|
205
|
+
| **Cache** | Whether the template cache is enabled or disabled |
|
|
206
|
+
| **Cache hit** | Whether this render was served from cache |
|
|
207
|
+
| **Children** | Included sub-templates for this render |
|
|
208
|
+
| **Data keys** | Number of data keys passed to the template |
|
|
209
|
+
| **Helpers** | Number of local helpers passed to the template |
|
|
210
|
+
| **Mapped templates** | Full list of all templates discovered in the `views` directory |
|
|
197
211
|
|
|
198
|
-
NB: _set `metrics: true` to activate this option. Do not activate this option in production._
|
|
199
212
|
|
|
200
213
|
## Integration with Web Framework
|
|
201
214
|
|
|
@@ -276,6 +289,7 @@ It started as a fork of `eta`, but became a dedicated library because the change
|
|
|
276
289
|
- **Flexible template path resolution**: With `fileResolution` mode set to `flexible`, only end unique paths can be provided, which increases file path readability (aka. `namespaces`).
|
|
277
290
|
- **Vscode extension**: Official vscode extension.
|
|
278
291
|
- **Performance**: Various performance optimization.
|
|
292
|
+
- **Lexer**: A lexer offers more accuracy and is more scalable.
|
|
279
293
|
- **Testing**: Modern and up to date numerous tests.
|
|
280
294
|
|
|
281
295
|
</details>
|
|
@@ -285,7 +299,7 @@ It started as a fork of `eta`, but became a dedicated library because the change
|
|
|
285
299
|
<b>Choices</b>
|
|
286
300
|
</summary>
|
|
287
301
|
|
|
288
|
-
- **No async support**: Supporting async rendering (e.g., `await include`) within templates encourages placing too much logic in the view layer and can be considered as an _anti-pattern_. Templates should be responsible for displaying data, while controllers should handle logic. Async behavior in templates would also require error handling (e.g., `try/catch`), adding complexity and possible errors. Async logic in template make it impossible de optimize through a `Promise.all` or any parallelism, hard to test and debug. In short: if you have async data, fetch it beforehand and render it synchronously.
|
|
302
|
+
- **No async support**: Supporting async rendering (e.g., `await include`) within templates encourages placing too much logic in the view layer and can be considered as an _anti-pattern_. Templates should be responsible for displaying data, while controllers should handle logic. Async behavior in templates would also require error handling (e.g., `try/catch`), adding complexity and possible errors. Async logic in template make it impossible de optimize through a `Promise.all` or any parallelism, hard to test and debug. In short: if you have async data, fetch it beforehand and render it synchronously (or use client side Javascript).
|
|
289
303
|
|
|
290
304
|
- **No `layouts`**: Layouts are essentially includes and add unnecessary complexity to the rendering process.
|
|
291
305
|
|
|
@@ -305,6 +319,10 @@ V0.0.3: Data exchange for the official extension, and various improvements.
|
|
|
305
319
|
|
|
306
320
|
V0.0.4: Fix NaN or Infinity value provided inside an object into the template.
|
|
307
321
|
|
|
322
|
+
V0.0.5: Fix character escape triggering an invalid js syntax.
|
|
323
|
+
|
|
324
|
+
V1.0.0: Transforming the basic template expression extraction (inherited from ETA) to a lexer. Adding a widget to developer experience. Render method accepts now a generic and two params, the second param containing data and helpers.
|
|
325
|
+
|
|
308
326
|
## Credits
|
|
309
327
|
|
|
310
|
-
- Syntax and some parts of compilation
|
|
328
|
+
- Syntax and some parts of compilation were based on `eta` in the versions < 1.0.0.
|
package/error-utils.d.ts
CHANGED
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { ErrorData } from './interfaces';
|
|
1
|
+
import { ErrorData, ErrorType } from './interfaces';
|
|
2
2
|
declare function findOriginalLineNumberWithMessage(error: ErrorData, compiledAnonymousFnContent: string, originalFileContent: string): [string, string[], number | null];
|
|
3
3
|
declare function getErrorMessageAndSource(error: any): [string, string];
|
|
4
4
|
/**
|
|
@@ -8,14 +8,16 @@ declare function getLineFromAnonymousFunction(source: string): number;
|
|
|
8
8
|
declare function extractContentFromAnonymousFunction(compiledAnonymousFnContent: string, line: number): string;
|
|
9
9
|
declare function getOriginalLineNumber(compiledJoined: string): number;
|
|
10
10
|
/**
|
|
11
|
-
* Error occurred while parsing the template
|
|
11
|
+
* Error occurred while parsing the template
|
|
12
12
|
*/
|
|
13
13
|
declare function handleParseError(error: any): any;
|
|
14
14
|
declare function getParsingErrorData(expression: string, index: number, message: string, fileContent: string): ErrorData;
|
|
15
|
+
declare function buildErrorData(message: string, lineNumber: number, fileContent: string, type: ErrorType): ErrorData;
|
|
15
16
|
declare function infiniteInclusionError(filename: string, children: string[]): any;
|
|
16
17
|
declare function handleNonUniqueFile(files: string[], filename: string): any;
|
|
17
18
|
declare function handleWrongTypeOfTemplate(template: string): any;
|
|
18
19
|
declare function handleNotFoundDynamicTemplate(template: string): any;
|
|
19
20
|
declare function handleNoTemplateFilesFound(views: string, extension: string): any;
|
|
20
|
-
|
|
21
|
+
declare function logger(level: 'info' | 'warn' | 'error' | 'debug', message: string): void;
|
|
22
|
+
export { getErrorMessageAndSource, getLineFromAnonymousFunction, extractContentFromAnonymousFunction, getOriginalLineNumber, findOriginalLineNumberWithMessage, handleParseError, getParsingErrorData, handleNonUniqueFile, infiniteInclusionError, handleWrongTypeOfTemplate, handleNotFoundDynamicTemplate, handleNoTemplateFilesFound, logger, buildErrorData, };
|
|
21
23
|
//# sourceMappingURL=error-utils.d.ts.map
|
package/error-utils.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"error-utils.d.ts","sourceRoot":"","sources":["../src/error-utils.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,
|
|
1
|
+
{"version":3,"file":"error-utils.d.ts","sourceRoot":"","sources":["../src/error-utils.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAE,SAAS,EAAE,MAAM,cAAc,CAAC;AAEpD,iBAAS,iCAAiC,CACxC,KAAK,EAAE,SAAS,EAChB,0BAA0B,EAAE,MAAM,EAClC,mBAAmB,EAAE,MAAM,GAC1B,CAAC,MAAM,EAAE,MAAM,EAAE,EAAE,MAAM,GAAG,IAAI,CAAC,CAkCnC;AAED,iBAAS,wBAAwB,CAAC,KAAK,EAAE,GAAG,GAAG,CAAC,MAAM,EAAE,MAAM,CAAC,CAI9D;AAED;;GAEG;AACH,iBAAS,4BAA4B,CAAC,MAAM,EAAE,MAAM,UAKnD;AAED,iBAAS,mCAAmC,CAAC,0BAA0B,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,UAS5F;AAiBD,iBAAS,qBAAqB,CAAC,cAAc,EAAE,MAAM,UAMpD;AAWD;;GAEG;AACH,iBAAS,gBAAgB,CAAC,KAAK,EAAE,GAAG,OAMnC;AAED,iBAAS,mBAAmB,CAC1B,UAAU,EAAE,MAAM,EAClB,KAAK,EAAE,MAAM,EACb,OAAO,EAAE,MAAM,EACf,WAAW,EAAE,MAAM,GAClB,SAAS,CAWX;AAED,iBAAS,cAAc,CACrB,OAAO,EAAE,MAAM,EACf,UAAU,EAAE,MAAM,EAClB,WAAW,EAAE,MAAM,EACnB,IAAI,EAAE,SAAS,GACd,SAAS,CAQX;AAQD,iBAAS,sBAAsB,CAAC,QAAQ,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,EAAE,OAWnE;AAED,iBAAS,mBAAmB,CAAC,KAAK,EAAE,MAAM,EAAE,EAAE,QAAQ,EAAE,MAAM,OAgB7D;AAED,iBAAS,yBAAyB,CAAC,QAAQ,EAAE,MAAM,OAUlD;AAED,iBAAS,6BAA6B,CAAC,QAAQ,EAAE,MAAM,OAUtD;AAED,iBAAS,0BAA0B,CAAC,KAAK,EAAE,MAAM,EAAE,SAAS,EAAE,MAAM,OAUnE;AAED,iBAAS,MAAM,CAAC,KAAK,EAAE,MAAM,GAAG,MAAM,GAAG,OAAO,GAAG,OAAO,EAAE,OAAO,EAAE,MAAM,QAc1E;AAED,OAAO,EACL,wBAAwB,EACxB,4BAA4B,EAC5B,mCAAmC,EACnC,qBAAqB,EACrB,iCAAiC,EACjC,gBAAgB,EAChB,mBAAmB,EACnB,mBAAmB,EACnB,sBAAsB,EACtB,yBAAyB,EACzB,6BAA6B,EAC7B,0BAA0B,EAC1B,MAAM,EACN,cAAc,GACf,CAAC"}
|
package/error-utils.js
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
-
exports.handleNoTemplateFilesFound = exports.handleNotFoundDynamicTemplate = exports.handleWrongTypeOfTemplate = exports.infiniteInclusionError = exports.handleNonUniqueFile = exports.getParsingErrorData = exports.handleParseError = exports.findOriginalLineNumberWithMessage = exports.getOriginalLineNumber = exports.extractContentFromAnonymousFunction = exports.getLineFromAnonymousFunction = exports.getErrorMessageAndSource = void 0;
|
|
3
|
+
exports.buildErrorData = exports.logger = exports.handleNoTemplateFilesFound = exports.handleNotFoundDynamicTemplate = exports.handleWrongTypeOfTemplate = exports.infiniteInclusionError = exports.handleNonUniqueFile = exports.getParsingErrorData = exports.handleParseError = exports.findOriginalLineNumberWithMessage = exports.getOriginalLineNumber = exports.extractContentFromAnonymousFunction = exports.getLineFromAnonymousFunction = exports.getErrorMessageAndSource = void 0;
|
|
4
4
|
function findOriginalLineNumberWithMessage(error, compiledAnonymousFnContent, originalFileContent) {
|
|
5
5
|
const basicErrorTypes = [
|
|
6
6
|
'Template Type Error',
|
|
@@ -12,7 +12,7 @@ function findOriginalLineNumberWithMessage(error, compiledAnonymousFnContent, or
|
|
|
12
12
|
return [error.message, [], null];
|
|
13
13
|
}
|
|
14
14
|
if (error.type === 'Parse Error') {
|
|
15
|
-
handleParseError(error);
|
|
15
|
+
// handleParseError(error);
|
|
16
16
|
return [error.message, error.fileContent, error.lineNumber];
|
|
17
17
|
}
|
|
18
18
|
if (error.type === 'ReadFile Error') {
|
|
@@ -80,7 +80,7 @@ function splitByLine(fileContent) {
|
|
|
80
80
|
return fileSplittedByNewLine;
|
|
81
81
|
}
|
|
82
82
|
/**
|
|
83
|
-
* Error occurred while parsing the template
|
|
83
|
+
* Error occurred while parsing the template
|
|
84
84
|
*/
|
|
85
85
|
function handleParseError(error) {
|
|
86
86
|
const { fileContent } = error;
|
|
@@ -100,6 +100,15 @@ function getParsingErrorData(expression, index, message, fileContent) {
|
|
|
100
100
|
return error;
|
|
101
101
|
}
|
|
102
102
|
exports.getParsingErrorData = getParsingErrorData;
|
|
103
|
+
function buildErrorData(message, lineNumber, fileContent, type) {
|
|
104
|
+
const error = new Error();
|
|
105
|
+
error.message = message;
|
|
106
|
+
error.lineNumber = lineNumber;
|
|
107
|
+
error.fileContent = fileContent;
|
|
108
|
+
error.type = type;
|
|
109
|
+
return error;
|
|
110
|
+
}
|
|
111
|
+
exports.buildErrorData = buildErrorData;
|
|
103
112
|
function getTemplateParsedLineNumber(expression, index) {
|
|
104
113
|
const splitIntoLines = expression.slice(0, index).split(/\n/);
|
|
105
114
|
const line = splitIntoLines.length;
|
|
@@ -153,11 +162,25 @@ exports.handleNotFoundDynamicTemplate = handleNotFoundDynamicTemplate;
|
|
|
153
162
|
function handleNoTemplateFilesFound(views, extension) {
|
|
154
163
|
const errorType = 'Not Found Error';
|
|
155
164
|
const error = new Error();
|
|
156
|
-
error.message = `No template files found
|
|
165
|
+
error.message = `No template files found (reading: ${views}.${extension})`;
|
|
157
166
|
error.lineNumber = null;
|
|
158
167
|
error.fileContent = '';
|
|
159
168
|
error.type = errorType;
|
|
160
169
|
return error;
|
|
161
170
|
}
|
|
162
171
|
exports.handleNoTemplateFilesFound = handleNoTemplateFilesFound;
|
|
172
|
+
function logger(level, message) {
|
|
173
|
+
if (!message)
|
|
174
|
+
return;
|
|
175
|
+
const color = {
|
|
176
|
+
debug: '\x1b[90m',
|
|
177
|
+
info: '\x1b[36m',
|
|
178
|
+
warn: '\x1b[33m',
|
|
179
|
+
error: '\x1b[31m',
|
|
180
|
+
}[level];
|
|
181
|
+
const reset = '\x1b[0m';
|
|
182
|
+
const time = new Date().toISOString();
|
|
183
|
+
console.log(`${color}[${time}] [${level.toUpperCase()}]${reset}`, message);
|
|
184
|
+
}
|
|
185
|
+
exports.logger = logger;
|
|
163
186
|
//# sourceMappingURL=error-utils.js.map
|
package/error-utils.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"error-utils.js","sourceRoot":"","sources":["../src/error-utils.ts"],"names":[],"mappings":";;;AAEA,SAAS,iCAAiC,CACxC,KAAgB,EAChB,0BAAkC,EAClC,mBAA2B;IAE3B,MAAM,eAAe,GAAgB;QACnC,qBAAqB;QACrB,iBAAiB;QACjB,sBAAsB;QACtB,iBAAiB;KAClB,CAAC;IACF,IAAI,eAAe,CAAC,QAAQ,CAAC,KAAK,CAAC,IAAI,CAAC,EAAE;QACxC,OAAO,CAAC,KAAK,CAAC,OAAO,EAAE,EAAE,EAAE,IAAI,CAAC,CAAC;KAClC;IACD,IAAI,KAAK,CAAC,IAAI,KAAK,aAAa,EAAE;QAChC,
|
|
1
|
+
{"version":3,"file":"error-utils.js","sourceRoot":"","sources":["../src/error-utils.ts"],"names":[],"mappings":"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"}
|
package/index.d.ts
CHANGED
package/index.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,GAAG,EAAE,MAAM,OAAO,CAAC;AAC5B,OAAO,EAAE,KAAK,OAAO,EAAE,MAAM,cAAc,CAAC"}
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,GAAG,EAAE,MAAM,OAAO,CAAC;AAC5B,OAAO,EAAE,KAAK,OAAO,IAAI,OAAO,EAAE,MAAM,cAAc,CAAC"}
|
package/interfaces.d.ts
CHANGED
|
@@ -1,4 +1,3 @@
|
|
|
1
|
-
import { Store } from './store';
|
|
2
1
|
export type ErrorType = 'Parse Error' | 'ReadFile Error' | 'Compilation Error' | 'Execution Error' | 'Inclusion Error' | 'Precompilation Error' | 'Template Type Error' | 'Not Found Error';
|
|
3
2
|
export interface DebugData {
|
|
4
3
|
compiledAnonymousFnContent: string;
|
|
@@ -31,17 +30,16 @@ export interface Tags {
|
|
|
31
30
|
*/
|
|
32
31
|
closing?: string;
|
|
33
32
|
}
|
|
34
|
-
/**
|
|
35
|
-
* HTML content or template data.
|
|
36
|
-
*/
|
|
37
|
-
export type AstObject = string | TemplateData;
|
|
38
33
|
export type TagType = 'raw' | 'execute' | 'interpolate';
|
|
39
34
|
export type FileResolution = 'strict' | 'flexible';
|
|
40
35
|
export interface TemplateData {
|
|
41
|
-
type: TagType;
|
|
42
|
-
|
|
36
|
+
type: TagType | null;
|
|
37
|
+
value: string;
|
|
38
|
+
line: number;
|
|
39
|
+
startPos: number;
|
|
40
|
+
endPos: number;
|
|
43
41
|
}
|
|
44
|
-
export type ChildTemplateFunction = (data:
|
|
42
|
+
export type ChildTemplateFunction = (data: Data, helpers: Helpers) => string;
|
|
45
43
|
export type TemplateFunction = (data: object, helpers: Helpers, ɵɵstart: number, ɵɵcacheHit: boolean) => string;
|
|
46
44
|
export interface ErrorData {
|
|
47
45
|
filename: string;
|
|
@@ -52,6 +50,9 @@ export interface ErrorData {
|
|
|
52
50
|
isAChildError: boolean;
|
|
53
51
|
errorHTML: string;
|
|
54
52
|
}
|
|
53
|
+
export interface DataOrHelper {
|
|
54
|
+
[key: string]: any;
|
|
55
|
+
}
|
|
55
56
|
export interface Data {
|
|
56
57
|
[key: string]: any;
|
|
57
58
|
}
|
|
@@ -67,47 +68,41 @@ export interface Metrics {
|
|
|
67
68
|
}
|
|
68
69
|
export interface LoadedChildTemplateData {
|
|
69
70
|
templateLoaded: string;
|
|
70
|
-
|
|
71
|
-
helpers: Helpers;
|
|
71
|
+
dataOrHelpers: DataOrHelper;
|
|
72
72
|
filename: string;
|
|
73
73
|
}
|
|
74
74
|
export interface LoadedTemplateData {
|
|
75
75
|
templateLoaded: string;
|
|
76
|
-
|
|
77
|
-
helpers: Helpers;
|
|
76
|
+
dataOrHelpers: DataOrHelper;
|
|
78
77
|
ɵɵstart: number;
|
|
79
78
|
filename: string;
|
|
80
79
|
ɵɵcacheHit: boolean;
|
|
81
80
|
}
|
|
82
81
|
export interface CompileChildExecuteData {
|
|
83
82
|
fullPath: string;
|
|
84
|
-
|
|
85
|
-
helpers: Helpers;
|
|
83
|
+
dataOrHelpers: DataOrHelper;
|
|
86
84
|
filename: string;
|
|
87
85
|
}
|
|
88
86
|
export interface CompileExecuteData {
|
|
89
87
|
fullPath: string;
|
|
90
|
-
|
|
91
|
-
helpers: Helpers;
|
|
88
|
+
dataOrHelpers: DataOrHelper;
|
|
92
89
|
ɵɵstart: number;
|
|
93
90
|
filename: string;
|
|
94
91
|
ɵɵcacheHit: boolean;
|
|
95
92
|
}
|
|
96
93
|
export interface ExecuteChildFunction {
|
|
97
94
|
compiledContent: string;
|
|
98
|
-
|
|
99
|
-
helpers: Helpers;
|
|
95
|
+
dataOrHelpers: DataOrHelper;
|
|
100
96
|
filename: string;
|
|
101
97
|
}
|
|
102
98
|
export interface ExecuteFunction {
|
|
103
99
|
compiledContent: string;
|
|
104
|
-
|
|
105
|
-
helpers: Helpers;
|
|
100
|
+
dataOrHelpers: DataOrHelper;
|
|
106
101
|
ɵɵstart: number;
|
|
107
102
|
filename: string;
|
|
108
103
|
ɵɵcacheHit: boolean;
|
|
109
104
|
}
|
|
110
|
-
export interface
|
|
105
|
+
export interface Options {
|
|
111
106
|
/**
|
|
112
107
|
* Automatically XML-escape interpolations.
|
|
113
108
|
*
|
|
@@ -176,18 +171,14 @@ export interface HelperData {
|
|
|
176
171
|
name: string;
|
|
177
172
|
params: string;
|
|
178
173
|
}
|
|
179
|
-
export interface
|
|
180
|
-
|
|
181
|
-
|
|
182
|
-
|
|
183
|
-
|
|
174
|
+
export interface TemplateExpression {
|
|
175
|
+
id: number;
|
|
176
|
+
prefixType: TagType;
|
|
177
|
+
expression: string;
|
|
178
|
+
templateStart: number;
|
|
179
|
+
templateEnd: number;
|
|
184
180
|
}
|
|
185
|
-
export interface
|
|
186
|
-
|
|
187
|
-
templatePaths: string[];
|
|
188
|
-
fullPath: string;
|
|
189
|
-
data: Data;
|
|
190
|
-
helpers: Helpers;
|
|
191
|
-
helpersStore: Store<HelperFunction>;
|
|
181
|
+
export interface TemplateQuotePosition {
|
|
182
|
+
line: number;
|
|
192
183
|
}
|
|
193
184
|
//# sourceMappingURL=interfaces.d.ts.map
|
package/interfaces.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"interfaces.d.ts","sourceRoot":"","sources":["../src/interfaces.ts"],"names":[],"mappings":"AAAA,
|
|
1
|
+
{"version":3,"file":"interfaces.d.ts","sourceRoot":"","sources":["../src/interfaces.ts"],"names":[],"mappings":"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"}
|
package/metrics.d.ts
CHANGED
|
@@ -4,13 +4,15 @@ declare function includeRenderTime(development: boolean): "" | "const ɵɵrender
|
|
|
4
4
|
declare function includeChildren(development: boolean): "" | "const ɵɵchildren = this.childrenStore.get(this.parentTemplate) || [];";
|
|
5
5
|
declare function updateChildrenStore(childrenStore: Store<string[]>, filename: string, parentTemplate: string, development: boolean): void;
|
|
6
6
|
/**
|
|
7
|
-
*
|
|
7
|
+
* Injects the devtools floating widget when development mode is enabled.
|
|
8
|
+
* The widget shows a small "τ" button in the bottom-right corner; clicking it
|
|
9
|
+
* opens a panel with render time, cache info, and template list.
|
|
10
|
+
* Console logs are preserved inside the widget setup script.
|
|
8
11
|
*/
|
|
9
12
|
declare function includeMetrics(metricsData: Metrics): string;
|
|
10
13
|
/**
|
|
11
14
|
* Takes into account the parent directory.
|
|
12
15
|
*/
|
|
13
16
|
declare function getFileNameAndAbsPath(files: string[]): string[];
|
|
14
|
-
|
|
15
|
-
export { getFileNameAndAbsPath, getNormalStyle, includeMetrics, includeRenderTime, includeChildren, updateChildrenStore, };
|
|
17
|
+
export { getFileNameAndAbsPath, includeMetrics, includeRenderTime, includeChildren, updateChildrenStore, };
|
|
16
18
|
//# sourceMappingURL=metrics.d.ts.map
|
package/metrics.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"metrics.d.ts","sourceRoot":"","sources":["../src/metrics.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"metrics.d.ts","sourceRoot":"","sources":["../src/metrics.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,OAAO,EAAE,MAAM,cAAc,CAAC;AACvC,OAAO,EAAE,KAAK,EAAE,MAAM,SAAS,CAAC;AAEhC,iBAAS,iBAAiB,CAAC,WAAW,EAAE,OAAO,6EAI9C;AAED,iBAAS,eAAe,CAAC,WAAW,EAAE,OAAO,gFAI5C;AAED,iBAAS,mBAAmB,CAC1B,aAAa,EAAE,KAAK,CAAC,MAAM,EAAE,CAAC,EAC9B,QAAQ,EAAE,MAAM,EAChB,cAAc,EAAE,MAAM,EACtB,WAAW,EAAE,OAAO,QAYrB;AAuFD;;;;;GAKG;AACH,iBAAS,cAAc,CAAC,WAAW,EAAE,OAAO,UAW3C;AAED;;GAEG;AACH,iBAAS,qBAAqB,CAAC,KAAK,EAAE,MAAM,EAAE,YAS7C;AAED,OAAO,EACL,qBAAqB,EACrB,cAAc,EACd,iBAAiB,EACjB,eAAe,EACf,mBAAmB,GACpB,CAAC"}
|
package/metrics.js
CHANGED
|
@@ -1,7 +1,6 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
-
exports.updateChildrenStore = exports.includeChildren = exports.includeRenderTime = exports.includeMetrics = exports.
|
|
4
|
-
const const_1 = require("./const");
|
|
3
|
+
exports.updateChildrenStore = exports.includeChildren = exports.includeRenderTime = exports.includeMetrics = exports.getFileNameAndAbsPath = void 0;
|
|
5
4
|
const error_utils_1 = require("./error-utils");
|
|
6
5
|
function includeRenderTime(development) {
|
|
7
6
|
if (!development)
|
|
@@ -28,39 +27,104 @@ function updateChildrenStore(childrenStore, filename, parentTemplate, developmen
|
|
|
28
27
|
}
|
|
29
28
|
exports.updateChildrenStore = updateChildrenStore;
|
|
30
29
|
/**
|
|
31
|
-
*
|
|
30
|
+
* Builds the static HTML/CSS/JS for the floating devtools widget.
|
|
31
|
+
* All string literals inside use double quotes so the output is safe
|
|
32
|
+
* to embed in the single-quoted JS string produced by includeMetrics.
|
|
33
|
+
*/
|
|
34
|
+
function buildDevtoolsWidget(filename, cacheEnabled, templates) {
|
|
35
|
+
const cacheStatus = cacheEnabled ? 'enabled' : 'disabled';
|
|
36
|
+
const tmplItems = templates.map((t, i) => `<li><b>${i + 1}</b>${t}</li>`).join('');
|
|
37
|
+
const css = [
|
|
38
|
+
'#tao-dt{position:fixed;bottom:20px;right:20px;z-index:2147483647;font-family:ui-monospace,monospace;font-size:12px}',
|
|
39
|
+
'#tao-dt-btn{width:44px;height:44px;border-radius:50%;background:linear-gradient(135deg,#0f0f1a,#1e1e3a);border:1px solid #4a4a6a;color:#00ff99;font-size:18px;cursor:pointer;display:flex;align-items:center;justify-content:center;box-shadow:0 4px 20px rgba(0,0,0,.5);transition:transform .2s,box-shadow .2s;outline:none}',
|
|
40
|
+
'#tao-dt-btn:hover{transform:scale(1.1);box-shadow:0 6px 24px rgba(0,255,153,.15)}',
|
|
41
|
+
'#tao-dt-panel{position:absolute;bottom:52px;right:0;width:320px;background:#0d0d1a;border:1px solid #2a2a4a;border-radius:12px;overflow:hidden;box-shadow:0 8px 40px rgba(0,0,0,.7);display:none}',
|
|
42
|
+
'#tao-dt-panel.tao-open{display:block}',
|
|
43
|
+
'.tao-ph{display:flex;align-items:center;justify-content:space-between;padding:10px 14px;border-bottom:1px solid #1a1a3a;background:#09091a}',
|
|
44
|
+
'.tao-ph-t{color:#00ff99;font-weight:700;font-size:13px}',
|
|
45
|
+
'.tao-ph-x{background:none;border:none;color:#555;cursor:pointer;font-size:14px;padding:0;line-height:1}',
|
|
46
|
+
'.tao-ph-x:hover{color:#ff4d4d}',
|
|
47
|
+
'.tao-pb{padding:10px 14px}',
|
|
48
|
+
'.tao-row{display:flex;justify-content:space-between;align-items:baseline;padding:5px 0;border-bottom:1px solid #111128}',
|
|
49
|
+
'.tao-k{color:#555;font-size:10px;text-transform:uppercase;letter-spacing:.6px}',
|
|
50
|
+
'.tao-v{color:#ccc;text-align:right;word-break:break-all;max-width:185px;font-size:11px}',
|
|
51
|
+
'.tao-v-ok{color:#00ff99}.tao-v-warn{color:#ffa500}.tao-v-info{color:#66ccff}.tao-v-dim{color:#555}',
|
|
52
|
+
'.tao-sep{color:#3a3a6a;font-size:10px;text-transform:uppercase;letter-spacing:.6px;margin:10px 0 6px;font-weight:700}',
|
|
53
|
+
'.tao-ul{list-style:none;padding:0;margin:0;max-height:100px;overflow-y:auto;scrollbar-width:thin;scrollbar-color:#2a2a4a #0d0d1a}',
|
|
54
|
+
'.tao-ul::-webkit-scrollbar{width:4px}',
|
|
55
|
+
'.tao-ul::-webkit-scrollbar-track{background:#0d0d1a}',
|
|
56
|
+
'.tao-ul::-webkit-scrollbar-thumb{background:#2a2a4a;border-radius:2px}',
|
|
57
|
+
'.tao-ul li{color:#87cefa;padding:2px 0;font-size:11px;display:flex;gap:5px}',
|
|
58
|
+
'.tao-ul li b{color:#444;font-weight:normal;min-width:16px}',
|
|
59
|
+
].join('');
|
|
60
|
+
// TAO_DT_set receives runtime values from the data-injection script tag.
|
|
61
|
+
// Static values (filename, cacheStatus, templates) are baked in here at compile time.
|
|
62
|
+
const js = [
|
|
63
|
+
'(function(){',
|
|
64
|
+
'function getEl(id) { return document.getElementById(id); }',
|
|
65
|
+
'window.TAO_DT_set = function(data) {',
|
|
66
|
+
'var rtValue = parseFloat(data.rt);',
|
|
67
|
+
'getEl("tao-dt-rt").textContent = data.rt;',
|
|
68
|
+
'getEl("tao-dt-rt").className = "tao-v " + (rtValue < 5 ? "tao-v-ok" : "tao-v-warn");',
|
|
69
|
+
'var cacheHit = data.ch;',
|
|
70
|
+
'getEl("tao-dt-ch").textContent = String(cacheHit);',
|
|
71
|
+
'getEl("tao-dt-ch").className = "tao-v " + (cacheHit ? "tao-v-ok" : "tao-v-dim");',
|
|
72
|
+
'var childrenEl = getEl("tao-dt-ci");',
|
|
73
|
+
'childrenEl.textContent = data.ci || "none";',
|
|
74
|
+
'if (!data.ci) childrenEl.className = "tao-v tao-v-dim";',
|
|
75
|
+
'var dkEl = getEl("tao-dt-dk");',
|
|
76
|
+
'dkEl.textContent = String(data.dk);',
|
|
77
|
+
'dkEl.className = "tao-v " + (data.dk > 0 ? "tao-v-info" : "tao-v-dim");',
|
|
78
|
+
'var hkEl = getEl("tao-dt-hk");',
|
|
79
|
+
'hkEl.textContent = String(data.hk);',
|
|
80
|
+
'hkEl.className = "tao-v " + (data.hk > 0 ? "tao-v-info" : "tao-v-dim");',
|
|
81
|
+
'};',
|
|
82
|
+
'var btn = getEl("tao-dt-btn");',
|
|
83
|
+
'var panel = getEl("tao-dt-panel");',
|
|
84
|
+
'btn.addEventListener("click", function(e) { e.stopPropagation(); panel.classList.toggle("tao-open"); });',
|
|
85
|
+
'getEl("tao-dt-x").addEventListener("click", function() { panel.classList.remove("tao-open"); });',
|
|
86
|
+
'document.addEventListener("click", function(e) { if (!e.target.closest("#tao-dt")) panel.classList.remove("tao-open"); });',
|
|
87
|
+
'})();',
|
|
88
|
+
].join('');
|
|
89
|
+
return [
|
|
90
|
+
`<style>${css}</style>`,
|
|
91
|
+
`<div id="tao-dt">`,
|
|
92
|
+
`<div id="tao-dt-panel">`,
|
|
93
|
+
`<div class="tao-ph"><span class="tao-ph-t">⚡ Tao DevTools</span><button class="tao-ph-x" id="tao-dt-x">✕</button></div>`,
|
|
94
|
+
`<div class="tao-pb">`,
|
|
95
|
+
`<div class="tao-row"><span class="tao-k">Template</span><span class="tao-v tao-v-ok">${filename}</span></div>`,
|
|
96
|
+
`<div class="tao-row"><span class="tao-k">Render time</span><span class="tao-v" id="tao-dt-rt"></span></div>`,
|
|
97
|
+
`<div class="tao-row"><span class="tao-k">Cache</span><span class="tao-v ${cacheEnabled ? 'tao-v-ok' : 'tao-v-warn'}">${cacheStatus}</span></div>`,
|
|
98
|
+
`<div class="tao-row"><span class="tao-k">Cache hit</span><span class="tao-v" id="tao-dt-ch"></span></div>`,
|
|
99
|
+
`<div class="tao-row"><span class="tao-k">Children</span><span class="tao-v tao-v-info" id="tao-dt-ci"></span></div>`,
|
|
100
|
+
`<div class="tao-row"><span class="tao-k">Data keys</span><span class="tao-v" id="tao-dt-dk"></span></div>`,
|
|
101
|
+
`<div class="tao-row"><span class="tao-k">Helpers</span><span class="tao-v" id="tao-dt-hk"></span></div>`,
|
|
102
|
+
`<div class="tao-sep">Mapped templates (${templates.length})</div>`,
|
|
103
|
+
`<ul class="tao-ul">${tmplItems}</ul>`,
|
|
104
|
+
`</div></div>`,
|
|
105
|
+
`<button id="tao-dt-btn" title="Tao DevTools">τ</button>`,
|
|
106
|
+
`</div>`,
|
|
107
|
+
`<script>${js}</script>`,
|
|
108
|
+
].join('');
|
|
109
|
+
}
|
|
110
|
+
/**
|
|
111
|
+
* Injects the devtools floating widget when development mode is enabled.
|
|
112
|
+
* The widget shows a small "τ" button in the bottom-right corner; clicking it
|
|
113
|
+
* opens a panel with render time, cache info, and template list.
|
|
114
|
+
* Console logs are preserved inside the widget setup script.
|
|
32
115
|
*/
|
|
33
116
|
function includeMetrics(metricsData) {
|
|
34
|
-
const { cacheEnabled, filename
|
|
117
|
+
const { cacheEnabled, filename, files, development } = metricsData;
|
|
35
118
|
if (!development)
|
|
36
|
-
return '""';
|
|
37
|
-
const
|
|
38
|
-
|
|
119
|
+
return '"";';
|
|
120
|
+
const templates = getFileNameAndAbsPath(files);
|
|
121
|
+
const widget = buildDevtoolsWidget(filename, cacheEnabled, templates);
|
|
122
|
+
// ' + variable + ' splices runtime values into the compiled JS string.
|
|
123
|
+
// The resulting expression in compiled code:
|
|
124
|
+
// ɵɵtp.res += '[widget]<script>TAO_DT_set({rt:"Xms",ch:bool,ci:"..."})</script>';
|
|
125
|
+
return `'${widget}<script>TAO_DT_set({rt:"' + ɵɵrenderDuration + 'ms",ch:' + ɵɵcacheHit + ',ci:"' + ɵɵchildren.join(", ") + '",dk:' + Object.keys(tao).length + ',hk:' + Object.keys(hp).length + '})</script>'`;
|
|
39
126
|
}
|
|
40
127
|
exports.includeMetrics = includeMetrics;
|
|
41
|
-
function logMappedTemplates(templates) {
|
|
42
|
-
const logs = templates
|
|
43
|
-
.map((template, i) => `console.log("%c#${i + 1} %c${template}", "color: #888", "color: #87cefa");`)
|
|
44
|
-
.join('');
|
|
45
|
-
return `console.group("%cMAPPED TEMPLATES (${templates.length})", "color: #00ffcc; font-weight: bold");${logs}console.groupEnd();`;
|
|
46
|
-
}
|
|
47
|
-
function logCacheHit() {
|
|
48
|
-
return `console.log("%c[CACHE HIT]%c ' + ɵɵcacheHit + '", "color:rgb(255, 0, 221);font-weight:bold",${getNormalStyle()})`;
|
|
49
|
-
}
|
|
50
|
-
function logCache(cacheEnabled) {
|
|
51
|
-
const isEnabled = cacheEnabled ? 'enabled' : 'disabled';
|
|
52
|
-
return `"%c[CACHE]%c ${isEnabled}", "color: #ff4d4d;font-weight:bold", ${getNormalStyle()}`;
|
|
53
|
-
}
|
|
54
|
-
function logRendered(template) {
|
|
55
|
-
return `"%c[RENDERED]%c ${template}", "color: #00ff99;font-weight:bold", ${getNormalStyle()}`;
|
|
56
|
-
}
|
|
57
|
-
function logChildTemplatesCount() {
|
|
58
|
-
const children = `(ɵɵchildren.length ? ɵɵchildren.join(", ") : "")`;
|
|
59
|
-
return `console.log("%c[CHILDREN]%c ' + ${children} + '", "color: #66ccff;font-weight:bold",${getNormalStyle()})`;
|
|
60
|
-
}
|
|
61
|
-
function logRenderTime() {
|
|
62
|
-
return `console.log("%c[RENDER TIME]%c ' + ɵɵrenderDuration + 'ms", "color: #ffa500;font-weight:bold",${getNormalStyle()})`;
|
|
63
|
-
}
|
|
64
128
|
/**
|
|
65
129
|
* Takes into account the parent directory.
|
|
66
130
|
*/
|
|
@@ -73,8 +137,4 @@ function getFileNameAndAbsPath(files) {
|
|
|
73
137
|
return templatesPathWithDirectory;
|
|
74
138
|
}
|
|
75
139
|
exports.getFileNameAndAbsPath = getFileNameAndAbsPath;
|
|
76
|
-
function getNormalStyle() {
|
|
77
|
-
return `"color: #fff"`;
|
|
78
|
-
}
|
|
79
|
-
exports.getNormalStyle = getNormalStyle;
|
|
80
140
|
//# sourceMappingURL=metrics.js.map
|
package/metrics.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"metrics.js","sourceRoot":"","sources":["../src/metrics.ts"],"names":[],"mappings":";;;AAAA
|
|
1
|
+
{"version":3,"file":"metrics.js","sourceRoot":"","sources":["../src/metrics.ts"],"names":[],"mappings":"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"}
|