htmljs-parser 5.0.3 → 5.1.1
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/core/Parser.d.ts +1 -1
- package/dist/index.d.ts +1 -1
- package/dist/index.js +35 -24
- package/dist/index.mjs +31 -23
- package/dist/util/util.d.ts +13 -3
- package/package.json +1 -1
package/dist/core/Parser.d.ts
CHANGED
|
@@ -32,7 +32,7 @@ export declare class Parser {
|
|
|
32
32
|
lines: undefined | number[];
|
|
33
33
|
constructor(options: Options);
|
|
34
34
|
read(range: Range): string;
|
|
35
|
-
positionAt(
|
|
35
|
+
positionAt(offset: number): import("../internal").Position;
|
|
36
36
|
locationAt(range: Range): import("../internal").Location;
|
|
37
37
|
enterState<P extends Meta>(state: StateDefinition<P>): P;
|
|
38
38
|
exitState(): void;
|
package/dist/index.d.ts
CHANGED
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import { type ParserOptions, type Range } from "./internal";
|
|
2
|
-
export { TagType, ErrorCode, type ParserOptions as Handlers, type Position, type Location, type Ranges, type Range, } from "./internal";
|
|
2
|
+
export { TagType, ErrorCode, getLines, getLocation, getPosition, type ParserOptions as Handlers, type Position, type Location, type Ranges, type Range, } from "./internal";
|
|
3
3
|
/**
|
|
4
4
|
* Creates a new Marko parser.
|
|
5
5
|
*/
|
package/dist/index.js
CHANGED
|
@@ -21,7 +21,10 @@ var src_exports = {};
|
|
|
21
21
|
__export(src_exports, {
|
|
22
22
|
ErrorCode: () => ErrorCode,
|
|
23
23
|
TagType: () => TagType,
|
|
24
|
-
createParser: () => createParser
|
|
24
|
+
createParser: () => createParser,
|
|
25
|
+
getLines: () => getLines,
|
|
26
|
+
getLocation: () => getLocation,
|
|
27
|
+
getPosition: () => getPosition
|
|
25
28
|
});
|
|
26
29
|
module.exports = __toCommonJS(src_exports);
|
|
27
30
|
|
|
@@ -67,26 +70,13 @@ var TagType = /* @__PURE__ */ ((TagType2) => {
|
|
|
67
70
|
function isWhitespaceCode(code) {
|
|
68
71
|
return code <= 32 /* SPACE */;
|
|
69
72
|
}
|
|
70
|
-
function
|
|
71
|
-
const start =
|
|
72
|
-
const end =
|
|
73
|
+
function getLocation(lines, startOffset, endOffset) {
|
|
74
|
+
const start = getPosition(lines, startOffset);
|
|
75
|
+
const end = startOffset === endOffset ? start : getPosAfterLine(lines, start.line, endOffset);
|
|
73
76
|
return { start, end };
|
|
74
77
|
}
|
|
75
|
-
function
|
|
76
|
-
|
|
77
|
-
let line = startLine;
|
|
78
|
-
while (line < max) {
|
|
79
|
-
const mid = 1 + line + max >>> 1;
|
|
80
|
-
if (lines[mid] <= index) {
|
|
81
|
-
line = mid;
|
|
82
|
-
} else {
|
|
83
|
-
max = mid - 1;
|
|
84
|
-
}
|
|
85
|
-
}
|
|
86
|
-
return {
|
|
87
|
-
line,
|
|
88
|
-
character: index - lines[line]
|
|
89
|
-
};
|
|
78
|
+
function getPosition(lines, offset) {
|
|
79
|
+
return getPosAfterLine(lines, 0, offset);
|
|
90
80
|
}
|
|
91
81
|
function getLines(src) {
|
|
92
82
|
const lines = [0];
|
|
@@ -107,6 +97,22 @@ function htmlEOF() {
|
|
|
107
97
|
}
|
|
108
98
|
}
|
|
109
99
|
}
|
|
100
|
+
function getPosAfterLine(lines, startLine, index) {
|
|
101
|
+
let max = lines.length - 1;
|
|
102
|
+
let line = startLine;
|
|
103
|
+
while (line < max) {
|
|
104
|
+
const mid = 1 + line + max >>> 1;
|
|
105
|
+
if (lines[mid] <= index) {
|
|
106
|
+
line = mid;
|
|
107
|
+
} else {
|
|
108
|
+
max = mid - 1;
|
|
109
|
+
}
|
|
110
|
+
}
|
|
111
|
+
return {
|
|
112
|
+
line,
|
|
113
|
+
character: index - lines[line]
|
|
114
|
+
};
|
|
115
|
+
}
|
|
110
116
|
|
|
111
117
|
// src/core/Parser.ts
|
|
112
118
|
var Parser = class {
|
|
@@ -131,11 +137,11 @@ var Parser = class {
|
|
|
131
137
|
read(range) {
|
|
132
138
|
return this.data.slice(range.start, range.end);
|
|
133
139
|
}
|
|
134
|
-
positionAt(
|
|
135
|
-
return
|
|
140
|
+
positionAt(offset) {
|
|
141
|
+
return getPosition(this.lines || (this.lines = getLines(this.data)), offset);
|
|
136
142
|
}
|
|
137
143
|
locationAt(range) {
|
|
138
|
-
return
|
|
144
|
+
return getLocation(this.lines || (this.lines = getLines(this.data)), range.start, range.end);
|
|
139
145
|
}
|
|
140
146
|
enterState(state) {
|
|
141
147
|
this.activeState = state;
|
|
@@ -1252,7 +1258,7 @@ var HTML_CONTENT = {
|
|
|
1252
1258
|
this.endText();
|
|
1253
1259
|
this.enterState(states_exports.INLINE_SCRIPT);
|
|
1254
1260
|
this.pos++;
|
|
1255
|
-
} else if (code === 47 /* FORWARD_SLASH */) {
|
|
1261
|
+
} else if (code === 47 /* FORWARD_SLASH */ && isWhitespaceCode(this.lookAtCharCodeAhead(-1))) {
|
|
1256
1262
|
switch (this.lookAtCharCodeAhead(1)) {
|
|
1257
1263
|
case 47 /* FORWARD_SLASH */:
|
|
1258
1264
|
this.endText();
|
|
@@ -1810,6 +1816,7 @@ var CONCISE_TAG_VAR_TERMINATORS = [
|
|
|
1810
1816
|
40 /* OPEN_PAREN */,
|
|
1811
1817
|
124 /* PIPE */,
|
|
1812
1818
|
61 /* EQUAL */,
|
|
1819
|
+
44 /* COMMA */,
|
|
1813
1820
|
[58 /* COLON */, 61 /* EQUAL */]
|
|
1814
1821
|
];
|
|
1815
1822
|
var HTML_TAG_VAR_TERMINATORS = [
|
|
@@ -1817,6 +1824,7 @@ var HTML_TAG_VAR_TERMINATORS = [
|
|
|
1817
1824
|
40 /* OPEN_PAREN */,
|
|
1818
1825
|
124 /* PIPE */,
|
|
1819
1826
|
61 /* EQUAL */,
|
|
1827
|
+
44 /* COMMA */,
|
|
1820
1828
|
[58 /* COLON */, 61 /* EQUAL */],
|
|
1821
1829
|
[47 /* FORWARD_SLASH */, 62 /* CLOSE_ANGLE_BRACKET */]
|
|
1822
1830
|
];
|
|
@@ -2117,5 +2125,8 @@ function createParser(handlers) {
|
|
|
2117
2125
|
0 && (module.exports = {
|
|
2118
2126
|
ErrorCode,
|
|
2119
2127
|
TagType,
|
|
2120
|
-
createParser
|
|
2128
|
+
createParser,
|
|
2129
|
+
getLines,
|
|
2130
|
+
getLocation,
|
|
2131
|
+
getPosition
|
|
2121
2132
|
});
|
package/dist/index.mjs
CHANGED
|
@@ -46,26 +46,13 @@ var TagType = /* @__PURE__ */ ((TagType2) => {
|
|
|
46
46
|
function isWhitespaceCode(code) {
|
|
47
47
|
return code <= 32 /* SPACE */;
|
|
48
48
|
}
|
|
49
|
-
function
|
|
50
|
-
const start =
|
|
51
|
-
const end =
|
|
49
|
+
function getLocation(lines, startOffset, endOffset) {
|
|
50
|
+
const start = getPosition(lines, startOffset);
|
|
51
|
+
const end = startOffset === endOffset ? start : getPosAfterLine(lines, start.line, endOffset);
|
|
52
52
|
return { start, end };
|
|
53
53
|
}
|
|
54
|
-
function
|
|
55
|
-
|
|
56
|
-
let line = startLine;
|
|
57
|
-
while (line < max) {
|
|
58
|
-
const mid = 1 + line + max >>> 1;
|
|
59
|
-
if (lines[mid] <= index) {
|
|
60
|
-
line = mid;
|
|
61
|
-
} else {
|
|
62
|
-
max = mid - 1;
|
|
63
|
-
}
|
|
64
|
-
}
|
|
65
|
-
return {
|
|
66
|
-
line,
|
|
67
|
-
character: index - lines[line]
|
|
68
|
-
};
|
|
54
|
+
function getPosition(lines, offset) {
|
|
55
|
+
return getPosAfterLine(lines, 0, offset);
|
|
69
56
|
}
|
|
70
57
|
function getLines(src) {
|
|
71
58
|
const lines = [0];
|
|
@@ -86,6 +73,22 @@ function htmlEOF() {
|
|
|
86
73
|
}
|
|
87
74
|
}
|
|
88
75
|
}
|
|
76
|
+
function getPosAfterLine(lines, startLine, index) {
|
|
77
|
+
let max = lines.length - 1;
|
|
78
|
+
let line = startLine;
|
|
79
|
+
while (line < max) {
|
|
80
|
+
const mid = 1 + line + max >>> 1;
|
|
81
|
+
if (lines[mid] <= index) {
|
|
82
|
+
line = mid;
|
|
83
|
+
} else {
|
|
84
|
+
max = mid - 1;
|
|
85
|
+
}
|
|
86
|
+
}
|
|
87
|
+
return {
|
|
88
|
+
line,
|
|
89
|
+
character: index - lines[line]
|
|
90
|
+
};
|
|
91
|
+
}
|
|
89
92
|
|
|
90
93
|
// src/core/Parser.ts
|
|
91
94
|
var Parser = class {
|
|
@@ -110,11 +113,11 @@ var Parser = class {
|
|
|
110
113
|
read(range) {
|
|
111
114
|
return this.data.slice(range.start, range.end);
|
|
112
115
|
}
|
|
113
|
-
positionAt(
|
|
114
|
-
return
|
|
116
|
+
positionAt(offset) {
|
|
117
|
+
return getPosition(this.lines || (this.lines = getLines(this.data)), offset);
|
|
115
118
|
}
|
|
116
119
|
locationAt(range) {
|
|
117
|
-
return
|
|
120
|
+
return getLocation(this.lines || (this.lines = getLines(this.data)), range.start, range.end);
|
|
118
121
|
}
|
|
119
122
|
enterState(state) {
|
|
120
123
|
this.activeState = state;
|
|
@@ -1231,7 +1234,7 @@ var HTML_CONTENT = {
|
|
|
1231
1234
|
this.endText();
|
|
1232
1235
|
this.enterState(states_exports.INLINE_SCRIPT);
|
|
1233
1236
|
this.pos++;
|
|
1234
|
-
} else if (code === 47 /* FORWARD_SLASH */) {
|
|
1237
|
+
} else if (code === 47 /* FORWARD_SLASH */ && isWhitespaceCode(this.lookAtCharCodeAhead(-1))) {
|
|
1235
1238
|
switch (this.lookAtCharCodeAhead(1)) {
|
|
1236
1239
|
case 47 /* FORWARD_SLASH */:
|
|
1237
1240
|
this.endText();
|
|
@@ -1789,6 +1792,7 @@ var CONCISE_TAG_VAR_TERMINATORS = [
|
|
|
1789
1792
|
40 /* OPEN_PAREN */,
|
|
1790
1793
|
124 /* PIPE */,
|
|
1791
1794
|
61 /* EQUAL */,
|
|
1795
|
+
44 /* COMMA */,
|
|
1792
1796
|
[58 /* COLON */, 61 /* EQUAL */]
|
|
1793
1797
|
];
|
|
1794
1798
|
var HTML_TAG_VAR_TERMINATORS = [
|
|
@@ -1796,6 +1800,7 @@ var HTML_TAG_VAR_TERMINATORS = [
|
|
|
1796
1800
|
40 /* OPEN_PAREN */,
|
|
1797
1801
|
124 /* PIPE */,
|
|
1798
1802
|
61 /* EQUAL */,
|
|
1803
|
+
44 /* COMMA */,
|
|
1799
1804
|
[58 /* COLON */, 61 /* EQUAL */],
|
|
1800
1805
|
[47 /* FORWARD_SLASH */, 62 /* CLOSE_ANGLE_BRACKET */]
|
|
1801
1806
|
];
|
|
@@ -2095,5 +2100,8 @@ function createParser(handlers) {
|
|
|
2095
2100
|
export {
|
|
2096
2101
|
ErrorCode,
|
|
2097
2102
|
TagType,
|
|
2098
|
-
createParser
|
|
2103
|
+
createParser,
|
|
2104
|
+
getLines,
|
|
2105
|
+
getLocation,
|
|
2106
|
+
getPosition
|
|
2099
2107
|
};
|
package/dist/util/util.d.ts
CHANGED
|
@@ -1,7 +1,17 @@
|
|
|
1
1
|
import { type Parser } from "../internal";
|
|
2
|
-
import { Location, Position
|
|
2
|
+
import { Location, Position } from "./constants";
|
|
3
3
|
export declare function isWhitespaceCode(code: number): boolean;
|
|
4
|
-
|
|
5
|
-
|
|
4
|
+
/**
|
|
5
|
+
* Given a source code line offsets, a start offset and an end offset, returns a Location object with line & character information for the start and end offsets.
|
|
6
|
+
*/
|
|
7
|
+
export declare function getLocation(lines: number[], startOffset: number, endOffset: number): Location;
|
|
8
|
+
/**
|
|
9
|
+
* Given a source code line offsets and an offset, returns a Position object with line & character information.
|
|
10
|
+
*/
|
|
11
|
+
export declare function getPosition(lines: number[], offset: number): Position;
|
|
12
|
+
/**
|
|
13
|
+
* Scan through some source code and generate an array of offsets for each newline.
|
|
14
|
+
* Useful for generating line/column information for source code.
|
|
15
|
+
*/
|
|
6
16
|
export declare function getLines(src: string): number[];
|
|
7
17
|
export declare function htmlEOF(this: Parser): void;
|
package/package.json
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "htmljs-parser",
|
|
3
3
|
"description": "An HTML parser recognizes content and string placeholders and allows JavaScript expressions as attribute values",
|
|
4
|
-
"version": "5.
|
|
4
|
+
"version": "5.1.1",
|
|
5
5
|
"devDependencies": {
|
|
6
6
|
"@changesets/changelog-github": "^0.4.4",
|
|
7
7
|
"@changesets/cli": "^2.22.0",
|