@jqhtml/parser 2.2.222
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 +21 -0
- package/README.md +30 -0
- package/bin/jqhtml-compile +218 -0
- package/dist/ast.d.ts +102 -0
- package/dist/ast.d.ts.map +1 -0
- package/dist/ast.js +30 -0
- package/dist/ast.js.map +1 -0
- package/dist/codegen.d.ts +108 -0
- package/dist/codegen.d.ts.map +1 -0
- package/dist/codegen.js +1377 -0
- package/dist/codegen.js.map +1 -0
- package/dist/compiler.d.ts +25 -0
- package/dist/compiler.d.ts.map +1 -0
- package/dist/compiler.js +273 -0
- package/dist/compiler.js.map +1 -0
- package/dist/errors.d.ts +27 -0
- package/dist/errors.d.ts.map +1 -0
- package/dist/errors.js +155 -0
- package/dist/errors.js.map +1 -0
- package/dist/index.d.ts +8 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +31 -0
- package/dist/index.js.map +1 -0
- package/dist/integration.d.ts +3 -0
- package/dist/integration.d.ts.map +1 -0
- package/dist/integration.js +47 -0
- package/dist/integration.js.map +1 -0
- package/dist/lexer.d.ts +123 -0
- package/dist/lexer.d.ts.map +1 -0
- package/dist/lexer.js +1446 -0
- package/dist/lexer.js.map +1 -0
- package/dist/parser.d.ts +56 -0
- package/dist/parser.d.ts.map +1 -0
- package/dist/parser.js +845 -0
- package/dist/parser.js.map +1 -0
- package/dist/runtime.d.ts +6 -0
- package/dist/runtime.d.ts.map +1 -0
- package/dist/runtime.js +106 -0
- package/dist/runtime.js.map +1 -0
- package/package.json +60 -0
package/dist/index.js
ADDED
|
@@ -0,0 +1,31 @@
|
|
|
1
|
+
// JQHTML Parser - Main entry point
|
|
2
|
+
import { Lexer } from './lexer.js';
|
|
3
|
+
import { Parser } from './parser.js';
|
|
4
|
+
export { Lexer, TokenType } from './lexer.js';
|
|
5
|
+
export { Parser } from './parser.js';
|
|
6
|
+
export { CodeGenerator, generate } from './codegen.js';
|
|
7
|
+
export { compileTemplate } from './compiler.js';
|
|
8
|
+
export { NodeType } from './ast.js';
|
|
9
|
+
export { JQHTMLParseError, ErrorCollector } from './errors.js';
|
|
10
|
+
// Convenience function for parsing with error context
|
|
11
|
+
export function parse(source, filename) {
|
|
12
|
+
try {
|
|
13
|
+
const lexer = new Lexer(source);
|
|
14
|
+
const tokens = lexer.tokenize();
|
|
15
|
+
const parser = new Parser(tokens, source, filename);
|
|
16
|
+
return parser.parse();
|
|
17
|
+
}
|
|
18
|
+
catch (error) {
|
|
19
|
+
// If it's already a JQHTMLParseError, just re-throw it
|
|
20
|
+
if (error.name === 'JQHTMLParseError') {
|
|
21
|
+
throw error;
|
|
22
|
+
}
|
|
23
|
+
// Otherwise wrap it with context
|
|
24
|
+
const message = error.message || String(error);
|
|
25
|
+
const enhancedMessage = filename
|
|
26
|
+
? `Error parsing ${filename}: ${message}`
|
|
27
|
+
: `Error parsing JQHTML: ${message}`;
|
|
28
|
+
throw new Error(enhancedMessage);
|
|
29
|
+
}
|
|
30
|
+
}
|
|
31
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,mCAAmC;AAEnC,OAAO,EAAE,KAAK,EAAE,MAAM,YAAY,CAAC;AACnC,OAAO,EAAE,MAAM,EAAE,MAAM,aAAa,CAAC;AAErC,OAAO,EAAE,KAAK,EAAS,SAAS,EAAE,MAAM,YAAY,CAAC;AACrD,OAAO,EAAE,MAAM,EAAE,MAAM,aAAa,CAAC;AACrC,OAAO,EAAE,aAAa,EAAE,QAAQ,EAAE,MAAM,cAAc,CAAC;AACvD,OAAO,EAAE,eAAe,EAAkC,MAAM,eAAe,CAAC;AAChF,OAAO,EACL,QAAQ,EAUT,MAAM,UAAU,CAAC;AAClB,OAAO,EAAE,gBAAgB,EAAE,cAAc,EAAE,MAAM,aAAa,CAAC;AAE/D,sDAAsD;AACtD,MAAM,UAAU,KAAK,CAAC,MAAc,EAAE,QAAiB;IACrD,IAAI,CAAC;QACH,MAAM,KAAK,GAAG,IAAI,KAAK,CAAC,MAAM,CAAC,CAAC;QAChC,MAAM,MAAM,GAAG,KAAK,CAAC,QAAQ,EAAE,CAAC;QAChC,MAAM,MAAM,GAAG,IAAI,MAAM,CAAC,MAAM,EAAE,MAAM,EAAE,QAAQ,CAAC,CAAC;QACpD,OAAO,MAAM,CAAC,KAAK,EAAE,CAAC;IACxB,CAAC;IAAC,OAAO,KAAU,EAAE,CAAC;QACpB,uDAAuD;QACvD,IAAI,KAAK,CAAC,IAAI,KAAK,kBAAkB,EAAE,CAAC;YACtC,MAAM,KAAK,CAAC;QACd,CAAC;QAED,iCAAiC;QACjC,MAAM,OAAO,GAAG,KAAK,CAAC,OAAO,IAAI,MAAM,CAAC,KAAK,CAAC,CAAC;QAC/C,MAAM,eAAe,GAAG,QAAQ;YAC9B,CAAC,CAAC,iBAAiB,QAAQ,KAAK,OAAO,EAAE;YACzC,CAAC,CAAC,yBAAyB,OAAO,EAAE,CAAC;QAEvC,MAAM,IAAI,KAAK,CAAC,eAAe,CAAC,CAAC;IACnC,CAAC;AACH,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"integration.d.ts","sourceRoot":"","sources":["../src/integration.ts"],"names":[],"mappings":"AAkBA,wBAAgB,aAAa,CAAC,cAAc,EAAE,GAAG,EAAE,aAAa,EAAE,MAAM,OA8BvE;AAGD,wBAAgB,2BAA2B,CAAC,YAAY,EAAE,GAAG,CAAC,MAAM,EAAE,GAAG,CAAC,QASzE"}
|
|
@@ -0,0 +1,47 @@
|
|
|
1
|
+
// JQHTML v2 Template Integration
|
|
2
|
+
// Connects compiled templates to Component class
|
|
3
|
+
/// <reference path="./types.d.ts" />
|
|
4
|
+
import { process_instructions, html, register_template } from './runtime.js';
|
|
5
|
+
// Mixin to add template support to any component
|
|
6
|
+
export function with_template(ComponentClass, template_name) {
|
|
7
|
+
const original_on_render = ComponentClass.prototype.on_render;
|
|
8
|
+
ComponentClass.prototype.on_render = async function () {
|
|
9
|
+
// Get compiled template from registry
|
|
10
|
+
const global_obj = typeof window !== 'undefined' ? window : global;
|
|
11
|
+
const template_map = global_obj.jqhtml_components;
|
|
12
|
+
if (!template_map || !template_map.has(template_name)) {
|
|
13
|
+
throw new Error(`Template not found: ${template_name}`);
|
|
14
|
+
}
|
|
15
|
+
const template_info = template_map.get(template_name);
|
|
16
|
+
const render_fn = template_info.render;
|
|
17
|
+
// Call render function with component context
|
|
18
|
+
const [instructions] = render_fn.call(this, this.constructor, this.data, this.args, {});
|
|
19
|
+
// Process instructions into DOM
|
|
20
|
+
const rendered = process_instructions(instructions, this);
|
|
21
|
+
// Clear and append to component element
|
|
22
|
+
this.$.empty().append(rendered);
|
|
23
|
+
// Call original on_render if it exists
|
|
24
|
+
if (original_on_render) {
|
|
25
|
+
await original_on_render.call(this);
|
|
26
|
+
}
|
|
27
|
+
};
|
|
28
|
+
return ComponentClass;
|
|
29
|
+
}
|
|
30
|
+
// Register templates from compiled module
|
|
31
|
+
export function register_compiled_templates(template_map) {
|
|
32
|
+
// Store on global object for now (MVP approach)
|
|
33
|
+
const global_obj = typeof window !== 'undefined' ? window : global;
|
|
34
|
+
global_obj.jqhtml_components = template_map;
|
|
35
|
+
// Also register each template
|
|
36
|
+
for (const [name, info] of template_map) {
|
|
37
|
+
register_template(name, info.render);
|
|
38
|
+
}
|
|
39
|
+
}
|
|
40
|
+
// Make html function available globally for templates
|
|
41
|
+
if (typeof window !== 'undefined') {
|
|
42
|
+
window.html = html;
|
|
43
|
+
}
|
|
44
|
+
else if (typeof global !== 'undefined') {
|
|
45
|
+
global.html = html;
|
|
46
|
+
}
|
|
47
|
+
//# sourceMappingURL=integration.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"integration.js","sourceRoot":"","sources":["../src/integration.ts"],"names":[],"mappings":"AAAA,iCAAiC;AACjC,iDAAiD;AAEjD,qCAAqC;AAErC,OAAO,EAAE,oBAAoB,EAAE,IAAI,EAAE,iBAAiB,EAAE,MAAM,cAAc,CAAC;AAY7E,iDAAiD;AACjD,MAAM,UAAU,aAAa,CAAC,cAAmB,EAAE,aAAqB;IACtE,MAAM,kBAAkB,GAAG,cAAc,CAAC,SAAS,CAAC,SAAS,CAAC;IAE9D,cAAc,CAAC,SAAS,CAAC,SAAS,GAAG,KAAK;QACxC,sCAAsC;QACtC,MAAM,UAAU,GAAG,OAAO,MAAM,KAAK,WAAW,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,MAAM,CAAC;QACnE,MAAM,YAAY,GAAI,UAAkB,CAAC,iBAAiB,CAAC;QAC3D,IAAI,CAAC,YAAY,IAAI,CAAC,YAAY,CAAC,GAAG,CAAC,aAAa,CAAC,EAAE,CAAC;YACtD,MAAM,IAAI,KAAK,CAAC,uBAAuB,aAAa,EAAE,CAAC,CAAC;QAC1D,CAAC;QAED,MAAM,aAAa,GAAG,YAAY,CAAC,GAAG,CAAC,aAAa,CAAC,CAAC;QACtD,MAAM,SAAS,GAAG,aAAa,CAAC,MAAM,CAAC;QAEvC,8CAA8C;QAC9C,MAAM,CAAC,YAAY,CAAC,GAAG,SAAS,CAAC,IAAI,CAAC,IAAI,EAAE,IAAI,CAAC,WAAW,EAAE,IAAI,CAAC,IAAI,EAAE,IAAI,CAAC,IAAI,EAAE,EAAE,CAAC,CAAC;QAExF,gCAAgC;QAChC,MAAM,QAAQ,GAAG,oBAAoB,CAAC,YAAY,EAAE,IAAI,CAAC,CAAC;QAE1D,wCAAwC;QACxC,IAAI,CAAC,CAAC,CAAC,KAAK,EAAE,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAC;QAEhC,uCAAuC;QACvC,IAAI,kBAAkB,EAAE,CAAC;YACvB,MAAM,kBAAkB,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;QACtC,CAAC;IACH,CAAC,CAAC;IAEF,OAAO,cAAc,CAAC;AACxB,CAAC;AAED,0CAA0C;AAC1C,MAAM,UAAU,2BAA2B,CAAC,YAA8B;IACxE,gDAAgD;IAChD,MAAM,UAAU,GAAG,OAAO,MAAM,KAAK,WAAW,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,MAAM,CAAC;IAClE,UAAkB,CAAC,iBAAiB,GAAG,YAAY,CAAC;IAErD,8BAA8B;IAC9B,KAAK,MAAM,CAAC,IAAI,EAAE,IAAI,CAAC,IAAI,YAAY,EAAE,CAAC;QACxC,iBAAiB,CAAC,IAAI,EAAE,IAAI,CAAC,MAAM,CAAC,CAAC;IACvC,CAAC;AACH,CAAC;AAED,sDAAsD;AACtD,IAAI,OAAO,MAAM,KAAK,WAAW,EAAE,CAAC;IAClC,MAAM,CAAC,IAAI,GAAG,IAAI,CAAC;AACrB,CAAC;KAAM,IAAI,OAAO,MAAM,KAAK,WAAW,EAAE,CAAC;IACxC,MAAc,CAAC,IAAI,GAAG,IAAI,CAAC;AAC9B,CAAC"}
|
package/dist/lexer.d.ts
ADDED
|
@@ -0,0 +1,123 @@
|
|
|
1
|
+
export declare enum TokenType {
|
|
2
|
+
TEXT = "TEXT",
|
|
3
|
+
EXPRESSION_START = "EXPRESSION_START",// <%=
|
|
4
|
+
EXPRESSION_UNESCAPED = "EXPRESSION_UNESCAPED",// <%!=
|
|
5
|
+
CODE_START = "CODE_START",// <%
|
|
6
|
+
TAG_END = "TAG_END",// %>
|
|
7
|
+
COMMENT = "COMMENT",// <%-- comment --%>
|
|
8
|
+
DEFINE_START = "DEFINE_START",// <Define:
|
|
9
|
+
DEFINE_END = "DEFINE_END",// </Define:
|
|
10
|
+
COMPONENT_NAME = "COMPONENT_NAME",
|
|
11
|
+
SLOT_START = "SLOT_START",// <Slot:
|
|
12
|
+
SLOT_END = "SLOT_END",// </Slot:
|
|
13
|
+
SLOT_NAME = "SLOT_NAME",
|
|
14
|
+
TAG_OPEN = "TAG_OPEN",// <tagname or <ComponentName
|
|
15
|
+
TAG_CLOSE = "TAG_CLOSE",// </tagname or </ComponentName
|
|
16
|
+
TAG_NAME = "TAG_NAME",// The tag/component name
|
|
17
|
+
SELF_CLOSING = "SELF_CLOSING",// />
|
|
18
|
+
ATTR_NAME = "ATTR_NAME",// $property or regular
|
|
19
|
+
ATTR_VALUE = "ATTR_VALUE",
|
|
20
|
+
COLON = "COLON",
|
|
21
|
+
SEMICOLON = "SEMICOLON",
|
|
22
|
+
GT = "GT",// >
|
|
23
|
+
LT = "LT",// <
|
|
24
|
+
SLASH = "SLASH",// /
|
|
25
|
+
EQUALS = "EQUALS",// =
|
|
26
|
+
QUOTE = "QUOTE",// " or '
|
|
27
|
+
EOF = "EOF",
|
|
28
|
+
NEWLINE = "NEWLINE",
|
|
29
|
+
WHITESPACE = "WHITESPACE",
|
|
30
|
+
JAVASCRIPT = "JAVASCRIPT"
|
|
31
|
+
}
|
|
32
|
+
export interface SourceLocation {
|
|
33
|
+
start: {
|
|
34
|
+
line: number;
|
|
35
|
+
column: number;
|
|
36
|
+
offset: number;
|
|
37
|
+
};
|
|
38
|
+
end: {
|
|
39
|
+
line: number;
|
|
40
|
+
column: number;
|
|
41
|
+
offset: number;
|
|
42
|
+
};
|
|
43
|
+
}
|
|
44
|
+
export interface Token {
|
|
45
|
+
type: TokenType;
|
|
46
|
+
value: string;
|
|
47
|
+
line: number;
|
|
48
|
+
column: number;
|
|
49
|
+
start: number;
|
|
50
|
+
end: number;
|
|
51
|
+
loc?: SourceLocation;
|
|
52
|
+
}
|
|
53
|
+
export declare class Lexer {
|
|
54
|
+
private input;
|
|
55
|
+
private position;
|
|
56
|
+
private line;
|
|
57
|
+
private column;
|
|
58
|
+
private tokens;
|
|
59
|
+
private savedPosition;
|
|
60
|
+
constructor(input: string);
|
|
61
|
+
/**
|
|
62
|
+
* Save current position for later token creation
|
|
63
|
+
*/
|
|
64
|
+
private savePosition;
|
|
65
|
+
/**
|
|
66
|
+
* Get saved position or current position
|
|
67
|
+
*/
|
|
68
|
+
private getSavedPosition;
|
|
69
|
+
/**
|
|
70
|
+
* Replace <%-- comment --%> with equivalent number of newlines
|
|
71
|
+
* This ensures line mapping stays accurate while removing comment content
|
|
72
|
+
*/
|
|
73
|
+
private preprocessComments;
|
|
74
|
+
/**
|
|
75
|
+
* Replace HTML comments (<!-- -->) that appear OUTSIDE of <Define> tags
|
|
76
|
+
* This strips documentation comments before component definitions
|
|
77
|
+
* HTML comments INSIDE <Define> tags are preserved in the output
|
|
78
|
+
*/
|
|
79
|
+
private preprocessHTMLComments;
|
|
80
|
+
/**
|
|
81
|
+
* Preprocess code blocks and expressions
|
|
82
|
+
* - Insert comment markers for empty lines in code blocks
|
|
83
|
+
* - Collapse multi-line expressions to single line with trailing newlines
|
|
84
|
+
* This ensures 1:1 line mapping in generated code
|
|
85
|
+
*/
|
|
86
|
+
private preprocessCodeBlocks;
|
|
87
|
+
/**
|
|
88
|
+
* Find the closing %> tag, properly handling strings and comments
|
|
89
|
+
*/
|
|
90
|
+
private findClosingTag;
|
|
91
|
+
tokenize(): Token[];
|
|
92
|
+
private scan_next;
|
|
93
|
+
private scan_text;
|
|
94
|
+
private scan_code_block;
|
|
95
|
+
private scan_comment;
|
|
96
|
+
private scan_html_comment;
|
|
97
|
+
private scan_expression;
|
|
98
|
+
private scan_javascript;
|
|
99
|
+
private scan_component_name;
|
|
100
|
+
private scan_slot_name;
|
|
101
|
+
private match_sequence;
|
|
102
|
+
private match_keyword;
|
|
103
|
+
private peek_sequence;
|
|
104
|
+
private peek_sequence_at;
|
|
105
|
+
private skip_whitespace;
|
|
106
|
+
private current_char;
|
|
107
|
+
private peek_ahead;
|
|
108
|
+
private advance;
|
|
109
|
+
private add_token;
|
|
110
|
+
private is_tag_name_char;
|
|
111
|
+
private is_tag_name_continue_char;
|
|
112
|
+
private scan_opening_tag;
|
|
113
|
+
private scan_closing_tag;
|
|
114
|
+
private scan_attributes;
|
|
115
|
+
private is_attribute_start_char;
|
|
116
|
+
private scan_attribute;
|
|
117
|
+
private scan_attribute_value;
|
|
118
|
+
private validate_unquoted_value;
|
|
119
|
+
private get_current_attribute_context;
|
|
120
|
+
private value_contains_interpolation;
|
|
121
|
+
private scan_interpolated_attribute_value;
|
|
122
|
+
}
|
|
123
|
+
//# sourceMappingURL=lexer.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"lexer.d.ts","sourceRoot":"","sources":["../src/lexer.ts"],"names":[],"mappings":"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"}
|