@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/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,3 @@
1
+ export declare function with_template(ComponentClass: any, template_name: string): any;
2
+ export declare function register_compiled_templates(template_map: Map<string, any>): void;
3
+ //# sourceMappingURL=integration.d.ts.map
@@ -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"}
@@ -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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"}