From 6038a0a1bce60f1370092393dddba3e3a7b70fac Mon Sep 17 00:00:00 2001 From: harttle Date: Wed, 25 Dec 2019 11:23:52 +0800 Subject: [PATCH] feat: noTemplateOutput, see #34 --- src/target-js/compilers/element-compiler.ts | 8 +++++++- src/target-js/compilers/renderer-compiler.ts | 5 +++-- src/target-js/index.ts | 6 ++++-- src/target-js/utils/case.ts | 5 ++++- test/cases/plain-span-notpl/component.ts | 5 +++++ test/cases/plain-span-notpl/data.json | 1 + test/cases/plain-span-notpl/expected.html | 1 + 7 files changed, 25 insertions(+), 6 deletions(-) create mode 100644 test/cases/plain-span-notpl/component.ts create mode 100644 test/cases/plain-span-notpl/data.json create mode 100644 test/cases/plain-span-notpl/expected.html diff --git a/src/target-js/compilers/element-compiler.ts b/src/target-js/compilers/element-compiler.ts index 4f7fe955..c604bc7b 100644 --- a/src/target-js/compilers/element-compiler.ts +++ b/src/target-js/compilers/element-compiler.ts @@ -9,9 +9,11 @@ import { ExprType } from 'san' */ export class ElementCompiler { private compileAnode + private noTemplateOutput: boolean - constructor (compileAnode) { + constructor (compileAnode, noTemplateOutput) { this.compileAnode = compileAnode + this.noTemplateOutput = noTemplateOutput } /** @@ -28,6 +30,8 @@ export class ElementCompiler { if (tagName) { sourceBuffer.joinString('<' + tagName) + } else if (this.noTemplateOutput) { + return } else if (tagNameVariable) { sourceBuffer.joinString('<') sourceBuffer.joinRaw(tagNameVariable + ' || "div"') @@ -213,6 +217,8 @@ export class ElementCompiler { if (tagName === 'option') { sourceBuffer.addRaw('$optionValue = null;') } + } else if (this.noTemplateOutput) { + // noop } else { sourceBuffer.joinString(' { private component: SanComponent private funcName: string - constructor (ComponentClass: typeof SanComponent) { + constructor (ComponentClass: typeof SanComponent, noTemplateOutput) { this.elementSourceCompiler = new ElementCompiler( - (...args) => this.aNodeCompiler.compile(...args) + (...args) => this.aNodeCompiler.compile(...args), + noTemplateOutput ) this.funcName = 'sanssrRenderer' + ComponentClass.sanssrCid this.component = new ComponentClass() diff --git a/src/target-js/index.ts b/src/target-js/index.ts index 5b04003a..10862f1c 100644 --- a/src/target-js/index.ts +++ b/src/target-js/index.ts @@ -28,13 +28,15 @@ export default class ToJSCompiler implements Compiler { this.tsConfigFilePath = require(tsConfigFilePath) } - public compile (sanApp: SanApp) { + public compile (sanApp: SanApp, { + noTemplateOutput = false + }) { const emitter = new JSEmitter() emitter.write('module.exports = ') emitter.writeAnonymousFunction(['data', 'noDataOutput'], () => { emitRuntime(emitter) for (const componentClass of sanApp.componentClasses) { - const renderCompiler = new RendererCompiler(componentClass) + const renderCompiler = new RendererCompiler(componentClass, noTemplateOutput) emitter.writeLines(renderCompiler.compileComponentSource()) } const funcName = 'sanssrRenderer' + sanApp.getEntryComponentClassOrThrow().sanssrCid diff --git a/src/target-js/utils/case.ts b/src/target-js/utils/case.ts index 6d598f16..fa44049a 100644 --- a/src/target-js/utils/case.ts +++ b/src/target-js/utils/case.ts @@ -20,9 +20,12 @@ export function compile (caseName) { debug('compile', caseName) const tsFile = join(caseRoot, caseName, 'component.ts') const jsFile = resolve(caseRoot, caseName, 'component.js') + const noTemplateOutput = caseName.indexOf('notpl') > -1 const targetCode = sanProject.compile( existsSync(jsFile) ? jsFile : tsFile, - ToJSCompiler + ToJSCompiler, { + noTemplateOutput + } ) writeFileSync(join(caseRoot, caseName, 'ssr.js'), targetCode) diff --git a/test/cases/plain-span-notpl/component.ts b/test/cases/plain-span-notpl/component.ts new file mode 100644 index 00000000..7206a616 --- /dev/null +++ b/test/cases/plain-span-notpl/component.ts @@ -0,0 +1,5 @@ +import { Component } from 'san' + +export default class MyComponent extends Component { + static template = '' +} diff --git a/test/cases/plain-span-notpl/data.json b/test/cases/plain-span-notpl/data.json new file mode 100644 index 00000000..9e26dfee --- /dev/null +++ b/test/cases/plain-span-notpl/data.json @@ -0,0 +1 @@ +{} \ No newline at end of file diff --git a/test/cases/plain-span-notpl/expected.html b/test/cases/plain-span-notpl/expected.html new file mode 100644 index 00000000..3d87b3ff --- /dev/null +++ b/test/cases/plain-span-notpl/expected.html @@ -0,0 +1 @@ +should be topthis too \ No newline at end of file