本文整理匯總了TypeScript中parse5.serialize函數的典型用法代碼示例。如果您正苦於以下問題:TypeScript serialize函數的具體用法?TypeScript serialize怎麽用?TypeScript serialize使用的例子?那麽, 這裏精選的函數代碼示例或許可以為您提供幫助。
在下文中一共展示了serialize函數的8個代碼示例,這些例子默認根據受歡迎程度排序。您可以為喜歡或者感覺有用的代碼點讚,您的評價將有助於係統推薦出更棒的TypeScript代碼示例。
示例1: test
test('Real root elements will be preserved', () => {
const html =
'<html><head></head><body><div>Just a div</div></body></html>';
const ast = parse5.parse(html, {locationInfo: true});
assert.deepEqual(parse5.serialize(ast), html);
dom5.removeFakeRootElements(ast);
assert.deepEqual(parse5.serialize(ast), html);
});
示例2: test
test('siblingsAfter', () => {
const orderedList =
parse5.parseFragment(`<ol><li>1<li>2<li>3<li>4<li>5</ol>`);
const li3 = orderedList.childNodes![0]!.childNodes![2]!;
const after3 = ast.siblingsAfter(li3);
assert.equal(after3.length, 2);
assert.equal(parse5.serialize(after3[0]), '4');
assert.equal(parse5.serialize(after3[1]), '5');
});
示例3: processFile
private async processFile(file: File): Promise<File> {
if (file.path !== this.entrypoint) {
return file;
}
const contents = await getFileContents(file);
const document = parse5.parse(contents);
const babelHelpersFragment =
parse5.parseFragment('\n\n<script></script>\n\n');
dom5.setTextContent(
babelHelpersFragment.childNodes![1]!,
await fs.readFile(
path.join(__dirname, 'babel-helpers.min.js'), 'utf-8'));
const firstScriptOrImport = dom5.nodeWalk(document, scriptOrImport);
if (firstScriptOrImport) {
dom5.insertBefore(
firstScriptOrImport.parentNode!,
firstScriptOrImport,
babelHelpersFragment);
} else {
const head =
dom5.query(document, dom5.predicates.hasTagName('head')) || document;
dom5.append(head, babelHelpersFragment);
}
const newFile = file.clone();
newFile.contents = new Buffer(parse5.serialize(document), 'utf-8');
return newFile;
}
示例4: _removeEmptyHiddenDivs
/**
* Removes all empty hidden container divs from the AST.
*/
private _removeEmptyHiddenDivs(ast: ASTNode) {
for (const div of dom5.queryAll(ast, matchers.hiddenDiv)) {
if (serialize(div).trim() === '') {
dom5.remove(div);
}
}
}
示例5: _rollupInlineModuleScripts
/**
* Inlines the contents of external module scripts and rolls-up imported
* modules into inline scripts.
*/
private async _rollupInlineModuleScripts(ast: ASTNode) {
this.document = await this._reanalyze(serialize(ast));
rewriteObject(ast, this.document.parsedDocument.ast);
dom5.removeFakeRootElements(ast);
const es6Rewriter =
new Es6Rewriter(this.bundler, this.manifest, this.assignedBundle);
const inlineModuleScripts =
[...this.document.getFeatures({
kind: 'js-document',
imported: false,
externalPackages: true,
excludeBackreferences: true,
})].filter(({
isInline,
parsedDocument: {parsedAsSourceType}
}) => isInline && parsedAsSourceType === 'module');
for (const inlineModuleScript of inlineModuleScripts) {
const ast = clone(inlineModuleScript.parsedDocument.ast);
const importResolutions =
es6Rewriter.getEs6ImportResolutions(inlineModuleScript);
es6Rewriter.rewriteEs6SourceUrlsToResolved(ast, importResolutions);
const serializedCode = serializeEs6(ast).code;
const {code} = await es6Rewriter.rollup(
this.document.parsedDocument.baseUrl,
serializedCode,
inlineModuleScript);
if (inlineModuleScript.astNode &&
inlineModuleScript.astNode.language === 'html') {
// Second argument 'true' tells encodeString to escape the <script>
// content.
dom5.setTextContent(
inlineModuleScript.astNode.node, encodeString(`\n${code}\n`, true));
}
}
}
示例6: addCustomElementsEs5Adapter
export function addCustomElementsEs5Adapter(html: string): string {
// Only modify this file if we find a web components polyfill. This is a
// heuristic to identify the entry point HTML file. Ultimately we should
// explicitly transform only the entry point by having the project config.
if (!webcomponentsLoaderRegex.test(html)) {
return html;
}
const parsed = parse5.parse(html, {locationInfo: true});
const script = dom5.query(parsed, webcomponentsLoaderMatcher);
if (!script) {
return html;
}
// Collect important dom references & create fragments for injection.
const loaderScriptUrl = dom5.getAttribute(script, 'src')!;
const adapterScriptUrl =
url.resolve(loaderScriptUrl, 'custom-elements-es5-adapter.js');
const es5AdapterFragment = parse5.parseFragment(`
<script>if (!window.customElements) { document.write('<!--'); }</script>
<script type="text/javascript" src="${adapterScriptUrl}"></script>
<!--! do not remove -->
`);
dom5.insertBefore(script.parentNode!, script, es5AdapterFragment);
return parse5.serialize(parsed);
}
示例7: _inlineModuleScripts
/**
* Inlines the contents of external module scripts and rolls-up imported
* modules into inline scripts.
*/
private async _inlineModuleScripts(ast: ASTNode) {
this.document = await this._reanalyze(serialize(ast));
rewriteObject(ast, this.document.parsedDocument.ast);
dom5.removeFakeRootElements(ast);
const es6Rewriter =
new Es6Rewriter(this.bundler, this.manifest, this.assignedBundle);
const inlineModuleScripts =
[...this.document.getFeatures({
kind: 'js-document',
imported: false,
externalPackages: true,
excludeBackreferences: true,
})].filter(({
isInline,
parsedDocument: {parsedAsSourceType}
}) => isInline && parsedAsSourceType === 'module');
for (const inlineModuleScript of inlineModuleScripts) {
const {code} = await es6Rewriter.rollup(
this.document.parsedDocument.baseUrl,
inlineModuleScript.parsedDocument.contents);
// Second argument 'true' tells encodeString to escape the <script>
// content.
dom5.setTextContent(
(inlineModuleScript.astNode as any).node,
encodeString(`\n${code}\n`, true));
}
}
示例8: test
test('Apply <base target> to all links and forms without target', () => {
const htmlBase = `
<base target="_blank">
<a href="foo.html">LINK</a>
<a href="bar.html" target="leavemealone">OTHERLINK</a>
<form action="doit"></form>
<form action="doitagain" target="leavemealone"></form>
<div>Just a div. I don't need a target</div>
`;
const expectedBase = `
<a href="foo.html" target="_blank">LINK</a>
<a href="bar.html" target="leavemealone">OTHERLINK</a>
<form action="doit" target="_blank"></form>
<form action="doitagain" target="leavemealone"></form>
<div>Just a div. I don't need a target</div>
`;
const ast = parse(htmlBase);
htmlBundler['_rewriteAstToEmulateBaseTag'](
ast, getFileUrl('the/doc/url'));
const actual = parse5.serialize(ast);
assert.deepEqual(
stripSpace(actual), stripSpace(expectedBase), 'base target');
});