diff --git a/app.ts b/app.ts new file mode 100644 index 0000000..a3bce8e --- /dev/null +++ b/app.ts @@ -0,0 +1,16 @@ +import * as express from 'express' + +const app = express() + +app.set('views', './views') +app.set('view engine', 'blitz') +app.engine('blitz', require('./src/blitz')._express) + +app.get('/', (req, res) => { + res.render('new', { + myVar: 'whuup whuup', + arr: [{ test: true }, { test: false }], + }) +}) + +app.listen(3000, () => console.log('Example app listening on port 3000!')) \ No newline at end of file diff --git a/src/app.ts b/src/app.ts deleted file mode 100644 index e960788..0000000 --- a/src/app.ts +++ /dev/null @@ -1,69 +0,0 @@ -import * as path from 'path' -import * as util from './util' -import * as parser from './parser' -import * as compiler from './compiler' -import { Compiled, LOG_TYPE, options } from './options' - -const cache: Map = new Map() - -function logger(type: LOG_TYPE, msg: object | string): void { - if (typeof msg === 'object') - msg = JSON.stringify(msg) - - let typeString: string = '' - - switch (type) { - case LOG_TYPE.Info: - typeString = 'Info' - break - case LOG_TYPE.Warning: - typeString = 'Warning' - break - case LOG_TYPE.Error: - typeString = 'Error' - break - } - - console.log(`${typeString}:`, msg) -} - -async function compile(html: string): Promise { - return { - template: compiler.process(html), - hash: await util.checksum(html, true), - time: Date.now() - } -} - -async function render(template_name: string, data?: any): Promise { - // const compiled_path = path.join(options.compiled_dir, `${template_name}.${options.compiled_ext}`) - const template_path = path.join(options.template_dir, `${template_name}.${options.template_ext}`) - - // Compile Template if is not in cache - if (options.caching && !cache.get(template_name)) { - const html = await util.readFile(template_path) - if (html !== undefined) - cache.set(template_name, await compile(html)) - else { - logger(LOG_TYPE.Error, 'No file found') - return '' - } - } - - // Render the template and return the html - const compiled = cache.get(template_name) - if (compiled) - return parser.computeParts(compiled.template, data) - else - return '' -} - -async function go() { - const ret = await render('new', { - arr: [{ test: true }, { test: false }] - }) - - ret.log() -} - -go() \ No newline at end of file diff --git a/src/blitz.ts b/src/blitz.ts new file mode 100644 index 0000000..2164649 --- /dev/null +++ b/src/blitz.ts @@ -0,0 +1,55 @@ +import * as path from 'path' +import * as util from './util' +import * as parser from './parser' +import * as compiler from './compiler' +import { Compiled, options } from './options' + +const cache: Map = new Map() + +function compile(html: string): Compiled { + return { + template: compiler.process(html), + time: Date.now() + } +} + +export function renderFile(file: string, data: any, callback: (err: any, render: string) => void): void { + util.readFile(file).then(html => { + util.checksum(html, true).then(hash => { + // Compile Template if is not in cache + if (options.caching && !cache.get(html)) + cache.set(html, compile(html)) + + // Render the template and return the html + const compiled = cache.get(html) + if (compiled) + callback(null, parser.computeParts(compiled.template, data)) + else + callback('Error: Chache not found', '') + }) + }) +} + +export async function render(template_name: string, data?: any): Promise { + const template_path = path.join(options.template_dir, `${template_name}.${options.template_ext}`) + + // Compile Template if is not in cache + if (options.caching && !cache.get(template_name)) { + const html = await util.readFile(template_path) + if (html !== undefined) + cache.set(template_name, compile(html)) + else { + 'No file found'.log() + return '' + } + } + + // Render the template and return the html + const compiled = cache.get(template_name) + if (compiled) + return parser.computeParts(compiled.template, data) + else + return '' +} + +export const _express = renderFile \ No newline at end of file diff --git a/src/options.ts b/src/options.ts index a57e5cc..9c3697c 100644 --- a/src/options.ts +++ b/src/options.ts @@ -21,7 +21,6 @@ export type ActionFunction = (part: Render) => ActionReturn export interface Compiled { template: Part[] - hash: string time: number } diff --git a/views/index.blitz b/views/index.blitz new file mode 100644 index 0000000..2e95c69 --- /dev/null +++ b/views/index.blitz @@ -0,0 +1,2 @@ +#title# +#message# \ No newline at end of file diff --git a/views/new.html b/views/new.blitz similarity index 61% rename from views/new.html rename to views/new.blitz index ad0cd4b..8fc2c65 100644 --- a/views/new.html +++ b/views/new.blitz @@ -1,5 +1,5 @@
    {{* i in arr}}
  • {{? i.test }} {{i}} {{/?}}
  • - {{/*}} + {{/*}} {{# some comment #}} {{myVar}}
\ No newline at end of file