hyper-html-api 0.8.1 → 0.9.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 +28 -0
- package/conformance/MANIFEST.json +2 -2
- package/conformance/cases/no-data-list-skipped.expected.json +6 -0
- package/conformance/cases/no-data-list-skipped.html +1 -0
- package/conformance/cases/no-data-list-skipped.meta +4 -0
- package/conformance/cases/no-data-list-skipped.parsed.json +3 -0
- package/conformance/cases/no-data-list-skipped.rules +1 -0
- package/conformance/cases/no-data-text-projected.expected.json +3 -0
- package/conformance/cases/no-data-text-projected.html +1 -0
- package/conformance/cases/no-data-text-projected.meta +4 -0
- package/conformance/cases/no-data-text-projected.parsed.json +3 -0
- package/conformance/cases/no-data-text-projected.rules +1 -0
- package/conformance/cases/props-type-is-attribute.expected.json +5 -0
- package/conformance/cases/props-type-is-attribute.meta +4 -0
- package/conformance/cases/write-attr-app-scheme.after.html +1 -0
- package/conformance/cases/write-attr-app-scheme.after.json +3 -0
- package/conformance/cases/write-attr-app-scheme.data.json +1 -0
- package/conformance/cases/write-attr-app-scheme.html +1 -0
- package/conformance/cases/write-attr-app-scheme.meta +4 -0
- package/conformance/cases/write-attr-app-scheme.write.json +4 -0
- package/conformance/cases/write-attr-href.after.html +1 -0
- package/conformance/cases/write-attr-href.after.json +3 -0
- package/conformance/cases/write-attr-href.data.json +1 -0
- package/conformance/cases/write-attr-href.html +1 -0
- package/conformance/cases/write-attr-href.meta +4 -0
- package/conformance/cases/write-attr-href.write.json +4 -0
- package/conformance/cases/write-checked-false.after.html +1 -0
- package/conformance/cases/write-checked-false.after.json +3 -0
- package/conformance/cases/write-checked-false.data.json +1 -0
- package/conformance/cases/write-checked-false.html +1 -0
- package/conformance/cases/write-checked-false.meta +4 -0
- package/conformance/cases/write-checked-false.write.json +4 -0
- package/conformance/cases/write-checked-true.after.html +1 -0
- package/conformance/cases/write-checked-true.after.json +3 -0
- package/conformance/cases/write-checked-true.data.json +1 -0
- package/conformance/cases/write-checked-true.html +1 -0
- package/conformance/cases/write-checked-true.meta +4 -0
- package/conformance/cases/write-checked-true.write.json +4 -0
- package/conformance/cases/write-crlf-multi.after.html +12 -0
- package/conformance/cases/write-crlf-multi.after.json +8 -0
- package/conformance/cases/write-crlf-multi.data.json +1 -0
- package/conformance/cases/write-crlf-multi.html +12 -0
- package/conformance/cases/write-crlf-multi.meta +4 -0
- package/conformance/cases/write-crlf-multi.write.json +4 -0
- package/conformance/cases/write-fallback-implied.after.html +1 -0
- package/conformance/cases/write-fallback-implied.after.json +3 -0
- package/conformance/cases/write-fallback-implied.data.json +1 -0
- package/conformance/cases/write-fallback-implied.html +1 -0
- package/conformance/cases/write-fallback-implied.meta +4 -0
- package/conformance/cases/write-fallback-implied.write.json +4 -0
- package/conformance/cases/write-flatten.after.html +1 -0
- package/conformance/cases/write-flatten.after.json +3 -0
- package/conformance/cases/write-flatten.data.json +1 -0
- package/conformance/cases/write-flatten.html +1 -0
- package/conformance/cases/write-flatten.meta +4 -0
- package/conformance/cases/write-flatten.write.json +4 -0
- package/conformance/cases/write-list-empty-no-seed.data.json +1 -0
- package/conformance/cases/write-list-empty-no-seed.error.json +8 -0
- package/conformance/cases/write-list-empty-no-seed.html +1 -0
- package/conformance/cases/write-list-empty-no-seed.meta +4 -0
- package/conformance/cases/write-list-grow-from-template.after.html +1 -0
- package/conformance/cases/write-list-grow-from-template.after.json +5 -0
- package/conformance/cases/write-list-grow-from-template.data.json +1 -0
- package/conformance/cases/write-list-grow-from-template.html +1 -0
- package/conformance/cases/write-list-grow-from-template.meta +4 -0
- package/conformance/cases/write-list-grow-from-template.write.json +4 -0
- package/conformance/cases/write-list-object-clone.after.html +1 -0
- package/conformance/cases/write-list-object-clone.after.json +12 -0
- package/conformance/cases/write-list-object-clone.data.json +1 -0
- package/conformance/cases/write-list-object-clone.html +1 -0
- package/conformance/cases/write-list-object-clone.meta +4 -0
- package/conformance/cases/write-list-object-clone.write.json +4 -0
- package/conformance/cases/write-list-scalar-grow.after.html +4 -0
- package/conformance/cases/write-list-scalar-grow.after.json +7 -0
- package/conformance/cases/write-list-scalar-grow.data.json +1 -0
- package/conformance/cases/write-list-scalar-grow.html +4 -0
- package/conformance/cases/write-list-scalar-grow.meta +4 -0
- package/conformance/cases/write-list-scalar-grow.write.json +4 -0
- package/conformance/cases/write-list-scalar-shrink.after.html +4 -0
- package/conformance/cases/write-list-scalar-shrink.after.json +5 -0
- package/conformance/cases/write-list-scalar-shrink.data.json +1 -0
- package/conformance/cases/write-list-scalar-shrink.html +4 -0
- package/conformance/cases/write-list-scalar-shrink.meta +4 -0
- package/conformance/cases/write-list-scalar-shrink.write.json +4 -0
- package/conformance/cases/write-list-shrink-zero.after.html +1 -0
- package/conformance/cases/write-list-shrink-zero.after.json +3 -0
- package/conformance/cases/write-list-shrink-zero.data.json +1 -0
- package/conformance/cases/write-list-shrink-zero.html +1 -0
- package/conformance/cases/write-list-shrink-zero.meta +4 -0
- package/conformance/cases/write-list-shrink-zero.write.json +4 -0
- package/conformance/cases/write-no-data-kept.after.html +1 -0
- package/conformance/cases/write-no-data-kept.after.json +3 -0
- package/conformance/cases/write-no-data-kept.data.json +1 -0
- package/conformance/cases/write-no-data-kept.html +1 -0
- package/conformance/cases/write-no-data-kept.meta +4 -0
- package/conformance/cases/write-no-data-kept.write.json +4 -0
- package/conformance/cases/write-no-rules-tag.data.json +1 -0
- package/conformance/cases/write-no-rules-tag.error.json +6 -0
- package/conformance/cases/write-no-rules-tag.html +1 -0
- package/conformance/cases/write-no-rules-tag.meta +4 -0
- package/conformance/cases/write-noop.after.html +3 -0
- package/conformance/cases/write-noop.after.json +3 -0
- package/conformance/cases/write-noop.data.json +1 -0
- package/conformance/cases/write-noop.html +3 -0
- package/conformance/cases/write-noop.meta +4 -0
- package/conformance/cases/write-noop.write.json +4 -0
- package/conformance/cases/write-outerhtml-unchanged.after.html +1 -0
- package/conformance/cases/write-outerhtml-unchanged.after.json +3 -0
- package/conformance/cases/write-outerhtml-unchanged.data.json +1 -0
- package/conformance/cases/write-outerhtml-unchanged.html +1 -0
- package/conformance/cases/write-outerhtml-unchanged.meta +4 -0
- package/conformance/cases/write-outerhtml-unchanged.write.json +4 -0
- package/conformance/cases/write-readonly-changed.data.json +1 -0
- package/conformance/cases/write-readonly-changed.error.json +6 -0
- package/conformance/cases/write-readonly-changed.html +1 -0
- package/conformance/cases/write-readonly-changed.meta +4 -0
- package/conformance/cases/write-readonly-unchanged.after.html +1 -0
- package/conformance/cases/write-readonly-unchanged.after.json +4 -0
- package/conformance/cases/write-readonly-unchanged.data.json +1 -0
- package/conformance/cases/write-readonly-unchanged.html +1 -0
- package/conformance/cases/write-readonly-unchanged.meta +4 -0
- package/conformance/cases/write-readonly-unchanged.write.json +4 -0
- package/conformance/cases/write-refused-animate.data.json +1 -0
- package/conformance/cases/write-refused-animate.error.json +11 -0
- package/conformance/cases/write-refused-animate.html +1 -0
- package/conformance/cases/write-refused-animate.meta +4 -0
- package/conformance/cases/write-refused-attr-name.data.json +1 -0
- package/conformance/cases/write-refused-attr-name.error.json +11 -0
- package/conformance/cases/write-refused-attr-name.html +1 -0
- package/conformance/cases/write-refused-attr-name.meta +4 -0
- package/conformance/cases/write-refused-data-url.data.json +1 -0
- package/conformance/cases/write-refused-data-url.error.json +11 -0
- package/conformance/cases/write-refused-data-url.html +1 -0
- package/conformance/cases/write-refused-data-url.meta +4 -0
- package/conformance/cases/write-refused-innerhtml.data.json +1 -0
- package/conformance/cases/write-refused-innerhtml.error.json +11 -0
- package/conformance/cases/write-refused-innerhtml.html +1 -0
- package/conformance/cases/write-refused-innerhtml.meta +4 -0
- package/conformance/cases/write-refused-javascript-url.data.json +1 -0
- package/conformance/cases/write-refused-javascript-url.error.json +11 -0
- package/conformance/cases/write-refused-javascript-url.html +1 -0
- package/conformance/cases/write-refused-javascript-url.meta +4 -0
- package/conformance/cases/write-refused-list-removes-rules-tag.data.json +1 -0
- package/conformance/cases/write-refused-list-removes-rules-tag.error.json +11 -0
- package/conformance/cases/write-refused-list-removes-rules-tag.html +1 -0
- package/conformance/cases/write-refused-list-removes-rules-tag.meta +4 -0
- package/conformance/cases/write-refused-multiple.data.json +1 -0
- package/conformance/cases/write-refused-multiple.error.json +15 -0
- package/conformance/cases/write-refused-multiple.html +1 -0
- package/conformance/cases/write-refused-multiple.meta +4 -0
- package/conformance/cases/write-refused-onclick.data.json +1 -0
- package/conformance/cases/write-refused-onclick.error.json +11 -0
- package/conformance/cases/write-refused-onclick.html +1 -0
- package/conformance/cases/write-refused-onclick.meta +4 -0
- package/conformance/cases/write-refused-rules-tag-ancestor.data.json +1 -0
- package/conformance/cases/write-refused-rules-tag-ancestor.error.json +11 -0
- package/conformance/cases/write-refused-rules-tag-ancestor.html +1 -0
- package/conformance/cases/write-refused-rules-tag-ancestor.meta +4 -0
- package/conformance/cases/write-refused-script.data.json +1 -0
- package/conformance/cases/write-refused-script.error.json +11 -0
- package/conformance/cases/write-refused-script.html +1 -0
- package/conformance/cases/write-refused-script.meta +4 -0
- package/conformance/cases/write-shape-mismatch.data.json +1 -0
- package/conformance/cases/write-shape-mismatch.error.json +12 -0
- package/conformance/cases/write-shape-mismatch.html +1 -0
- package/conformance/cases/write-shape-mismatch.meta +4 -0
- package/conformance/cases/write-text-basic.after.html +3 -0
- package/conformance/cases/write-text-basic.after.json +3 -0
- package/conformance/cases/write-text-basic.data.json +1 -0
- package/conformance/cases/write-text-basic.html +3 -0
- package/conformance/cases/write-text-basic.meta +4 -0
- package/conformance/cases/write-text-basic.write.json +4 -0
- package/conformance/cases/write-text-escape.after.html +1 -0
- package/conformance/cases/write-text-escape.after.json +3 -0
- package/conformance/cases/write-text-escape.data.json +1 -0
- package/conformance/cases/write-text-escape.html +1 -0
- package/conformance/cases/write-text-escape.meta +4 -0
- package/conformance/cases/write-text-escape.write.json +4 -0
- package/conformance/cases/write-text-null-clears.after.html +1 -0
- package/conformance/cases/write-text-null-clears.after.json +3 -0
- package/conformance/cases/write-text-null-clears.data.json +1 -0
- package/conformance/cases/write-text-null-clears.html +1 -0
- package/conformance/cases/write-text-null-clears.meta +4 -0
- package/conformance/cases/write-text-null-clears.write.json +4 -0
- package/conformance/cases/write-type-attribute.after.html +1 -0
- package/conformance/cases/write-type-attribute.after.json +3 -0
- package/conformance/cases/write-type-attribute.data.json +1 -0
- package/conformance/cases/write-type-attribute.html +1 -0
- package/conformance/cases/write-type-attribute.meta +4 -0
- package/conformance/cases/write-type-attribute.write.json +4 -0
- package/conformance/cases/write-unknown-key.data.json +1 -0
- package/conformance/cases/write-unknown-key.error.json +11 -0
- package/conformance/cases/write-unknown-key.html +3 -0
- package/conformance/cases/write-unknown-key.meta +4 -0
- package/conformance/cases/write-unmatched.data.json +1 -0
- package/conformance/cases/write-unmatched.error.json +14 -0
- package/conformance/cases/write-unmatched.html +1 -0
- package/conformance/cases/write-unmatched.meta +4 -0
- package/conformance/write-policy.json +78 -0
- package/dist/hyper-html-api.engine.min.js +1 -1
- package/dist/hyper-html-api.min.js +5 -4
- package/dist/hyper-html-api.upgrade.min.js +2 -2
- package/package.json +4 -3
- package/packed-contract.json +1 -1
- package/src/adapters/cheerio.js +105 -10
- package/src/engine/apply.js +2 -0
- package/src/engine/errors.js +25 -0
- package/src/engine/index.js +3 -0
- package/src/engine/splice.js +118 -0
- package/src/engine/write-plan.js +52 -0
- package/src/engine/write-policy.js +136 -0
- package/src/write.js +29 -0
- package/conformance/cases/props-type-is-node-type.expected.json +0 -5
- package/conformance/cases/props-type-is-node-type.meta +0 -11
- /package/conformance/cases/{props-type-is-node-type.html → props-type-is-attribute.html} +0 -0
- /package/conformance/cases/{props-type-is-node-type.parsed.json → props-type-is-attribute.parsed.json} +0 -0
- /package/conformance/cases/{props-type-is-node-type.rules → props-type-is-attribute.rules} +0 -0
package/README.md
CHANGED
|
@@ -130,6 +130,34 @@ const { rules } = findRulesIn(cheerioAdapter, $.root(), 'api')
|
|
|
130
130
|
const data = extract(cheerioAdapter, $.root(), rules)
|
|
131
131
|
```
|
|
132
132
|
|
|
133
|
+
### Writing content back
|
|
134
|
+
|
|
135
|
+
`writeDocument` applies JSON to a document's source through its own rules tag, and
|
|
136
|
+
returns the new source. It is the write half of a local data API: hyperclay-local's
|
|
137
|
+
`POST /_/api/<file>` and HTML Clay's Go port both follow it, pinned by the `face: write`
|
|
138
|
+
conformance cases.
|
|
139
|
+
|
|
140
|
+
```js
|
|
141
|
+
import { writeDocument } from 'hyper-html-api/write'
|
|
142
|
+
import * as cheerio from 'cheerio'
|
|
143
|
+
|
|
144
|
+
const { html, changed, spliced } = writeDocument(cheerio.load, src, { title: 'Groceries' })
|
|
145
|
+
```
|
|
146
|
+
|
|
147
|
+
- **Content only.** Every write goes through the policy in `conformance/write-policy.json`.
|
|
148
|
+
Text is written as text. A write refused by the policy (script and style targets,
|
|
149
|
+
`on*` handlers, `javascript:`/`vbscript:`/`data:` URLs, `@innerHTML`, `@outerHTML`, the
|
|
150
|
+
save and region markers) throws `WriteRefused`, which lists every refusal. Nothing is
|
|
151
|
+
written.
|
|
152
|
+
- **Strict keys.** An unknown key or a rule whose selector matches nothing throws
|
|
153
|
+
`WriteRejected` before anything is applied. The document must have a rules tag for the
|
|
154
|
+
token (default `api`), or `NoRulesTag` is thrown.
|
|
155
|
+
- **Byte-preserving.** Only the elements that changed are re-serialized and spliced into
|
|
156
|
+
the original source. The result is verified by reparsing, and when that proof fails the
|
|
157
|
+
whole document is rendered instead (`spliced: false`). A body that changes nothing
|
|
158
|
+
returns the source untouched with `changed: false`.
|
|
159
|
+
- `no-data` and `editor-ui` regions are invisible to writes, as they are to reads.
|
|
160
|
+
|
|
133
161
|
## License
|
|
134
162
|
|
|
135
163
|
MIT-0 (MIT No Attribution).
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
<ul><li editor-ui>Add</li><li>A</li><li>B</li></ul>
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{items:"li[]"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
<p id="x">Hi <span no-data>secret</span>there</p>
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{t:"#x"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
<script data-rules-name="api" data-rules-version="1">{h:"#a@href"}</script><a id="a" href="obsidian://open?vault=x">x</a>
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"h":"obsidian://open?vault=x"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
<script data-rules-name="api" data-rules-version="1">{h:"#a@href"}</script><a id=a href="/">x</a>
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
<script data-rules-name="api" data-rules-version="1">{h:"#a@href"}</script><a id="a" href="https://example.com/?a=1&b=2">x</a>
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"h":"https://example.com/?a=1&b=2"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
<script data-rules-name="api" data-rules-version="1">{h:"#a@href"}</script><a id=a href="/">x</a>
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
<script data-rules-name="api" data-rules-version="1">{d:"#c@checked"}</script><input id="c" type="checkbox">
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"d":false}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
<script data-rules-name="api" data-rules-version="1">{d:"#c@checked"}</script><input id=c type=checkbox checked>
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
<script data-rules-name="api" data-rules-version="1">{d:"#c@checked"}</script><input id="c" type="checkbox" checked="">
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"d":true}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
<script data-rules-name="api" data-rules-version="1">{d:"#c@checked"}</script><input id=c type=checkbox>
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
<!doctype html>
|
|
2
|
+
<html lang=en>
|
|
3
|
+
<head><script data-rules-name="api" data-rules-version="1">{title:"h1",link:"#a@href",items:"li[]"}</script></head>
|
|
4
|
+
<body>
|
|
5
|
+
<h1 class="x">World</h1>
|
|
6
|
+
<p>© 2026<br/></p>
|
|
7
|
+
<a id="a" href="/next">x</a>
|
|
8
|
+
<ul>
|
|
9
|
+
<li>A</li>
|
|
10
|
+
<li>B</li></ul>
|
|
11
|
+
</body>
|
|
12
|
+
</html>
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"title":"World","link":"/next","items":["A","B"]}
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
<!doctype html>
|
|
2
|
+
<html lang=en>
|
|
3
|
+
<head><script data-rules-name="api" data-rules-version="1">{title:"h1",link:"#a@href",items:"li[]"}</script></head>
|
|
4
|
+
<body>
|
|
5
|
+
<h1 class='x'>Hello</h1>
|
|
6
|
+
<p>© 2026<br/></p>
|
|
7
|
+
<a id=a href="/">x</a>
|
|
8
|
+
<ul>
|
|
9
|
+
<li>A</li>
|
|
10
|
+
</ul>
|
|
11
|
+
</body>
|
|
12
|
+
</html>
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
<html lang="en"><head><script data-rules-name="api" data-rules-version="1">{l:"html@lang"}</script></head><body><p>x</p></body></html>
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"l":"en"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
<script data-rules-name="api" data-rules-version="1">{l:"html@lang"}</script><p>x</p>
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
<script data-rules-name="api" data-rules-version="1">{t:"#l"}</script><li id="l">Buy bread</li>
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"t":"Buy bread"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
<script data-rules-name="api" data-rules-version="1">{t:"#l"}</script><li id=l><input type=checkbox> Buy milk</li>
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"items":["A"]}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
<script data-rules-name="api" data-rules-version="1">{items:"li[]"}</script><ul></ul>
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
<script data-rules-name="api" data-rules-version="1">{items:"li[]"}</script><ul><li>First</li><li cms-template=""></li></ul>
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"items":["First"]}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
<script data-rules-name="api" data-rules-version="1">{items:"li[]"}</script><ul><li cms-template></li></ul>
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
<script data-rules-name="api" data-rules-version="1">{rows:["li",{name:"b",n:"i"}]}</script><ul><li id="r1"><b>A</b><i>1</i></li><li><b>B</b><i>2</i></li></ul>
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"rows":[{"name":"A","n":"1"},{"name":"B","n":"2"}]}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
<script data-rules-name="api" data-rules-version="1">{rows:["li",{name:"b",n:"i"}]}</script><ul><li id=r1><b>A</b><i>1</i></li></ul>
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"items":["A","B","C"]}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"items":["B"]}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
<script data-rules-name="api" data-rules-version="1">{items:"li[]"}</script><ul></ul>
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"items":[]}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
<script data-rules-name="api" data-rules-version="1">{items:"li[]"}</script><ul><li>A</li></ul>
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
<script data-rules-name="api" data-rules-version="1">{t:"#x"}</script><p id="x">Bye<span no-data="">UI</span></p>
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"t":"Bye"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
<script data-rules-name="api" data-rules-version="1">{t:"#x"}</script><p id=x>Hi <span no-data>UI</span></p>
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
<p>x</p>
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"title":"Hello"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
<script data-rules-name="api" data-rules-version="1">{o:"#h@outerHTML"}</script><h1 id=h>Hi</h1>
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"o":"<h1 id=\"h\">Hi</h1>"}
|