Skip to content

Commit f64e525

Browse files
committed
feat: add isValidScriptlet api
1 parent 1c38190 commit f64e525

4 files changed

Lines changed: 42 additions & 1 deletion

File tree

.changeset/afraid-radios-begin.md

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,5 @@
1+
---
2+
"htmljs-parser": minor
3+
---
4+
5+
Add "isValidScriptlet" api.

src/__tests__/validate.test.ts

Lines changed: 27 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
11
import assert from "node:assert/strict";
2-
import { isValidAttrValue, isValidStatement } from "..";
2+
import { isValidAttrValue, isValidScriptlet, isValidStatement } from "..";
33

44
describe("validation helpers", () => {
55
describe("isValidStatement", () => {
@@ -28,6 +28,32 @@ describe("validation helpers", () => {
2828
});
2929
});
3030

31+
describe("isValidScriptlet", () => {
32+
it("accepts single-line expressions", () => {
33+
assert.equal(isValidScriptlet("foo + bar"), 2);
34+
});
35+
36+
it("rejects indented continuation lines", () => {
37+
assert.equal(isValidScriptlet("foo\n + bar"), 0);
38+
});
39+
40+
it("rejects unindented continuation lines", () => {
41+
assert.equal(isValidScriptlet("foo\nbar"), 0);
42+
});
43+
44+
it("accepts indented ternary continuation", () => {
45+
assert.equal(isValidScriptlet("foo ?\n bar : baz"), 2);
46+
});
47+
48+
it("rejects unterminated groups", () => {
49+
assert.equal(isValidScriptlet("(foo"), 0);
50+
});
51+
52+
it("rejects mismatched closing groups", () => {
53+
assert.equal(isValidScriptlet(")"), 0);
54+
});
55+
});
56+
3157
describe("isValidAttrValue", () => {
3258
it("accepts html attr values with operators", () => {
3359
assert.equal(isValidAttrValue("foo + bar", false), 2);

src/index.ts

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -14,6 +14,7 @@ export {
1414

1515
export {
1616
isValidStatement,
17+
isValidScriptlet,
1718
isValidAttrValue,
1819
Validity,
1920
} from "./util/validators";

src/util/validators.ts

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -44,6 +44,15 @@ function prepareStatement(expr: STATE.ExpressionMeta) {
4444
expr.consumeIndentedContent = true;
4545
}
4646

47+
export function isValidScriptlet(code: string): Validity {
48+
return isValid(code, true, prepareScriptlet);
49+
}
50+
51+
function prepareScriptlet(expr: STATE.ExpressionMeta) {
52+
expr.operators = true;
53+
expr.terminatedByEOL = true;
54+
}
55+
4756
export function isValidAttrValue(code: string, concise: boolean): Validity {
4857
return isValid(code, concise, prepareAttrValue);
4958
}

0 commit comments

Comments
 (0)