diff --git a/index.html b/index.html index a214536..30d642e 100644 --- a/index.html +++ b/index.html @@ -166,6 +166,14 @@

micro-template.js

A minimal, blazing fast JavaScript template engine for hackers.

+
+ npm version + GitHub stars + MIT License +

Features

@@ -177,16 +185,8 @@

Features

-

Usage Example

+

Getting Started

-
-

Basic

-
import { template } from 'micro-template';
-
-const result = template('<div><%= message %></div>', { message: 'Hello, inline!' });
-console.log(result); // <div>Hello, inline!</div>
-
-

In HTML

<script type="application/x-template" id="tmpl1">
@@ -200,6 +200,7 @@ 

In HTML

In Node.js

+
npm install micro-template
import fs from 'node:fs';
 import { template } from 'micro-template';
 
diff --git a/lib/micro-template.js b/lib/micro-template.js
index b92496f..665c947 100644
--- a/lib/micro-template.js
+++ b/lib/micro-template.js
@@ -10,19 +10,19 @@ const template = function (id, data) {
 		let line = 1;
 		const body = (
 			`try {` +
-				(me.variable ?  `let ${me.variable}=__this.stash;` : ``) +
+				(me.variable ?  `let ${me.variable}=__this.stash;__this.ret+=\`` : `__this.ret+=\``) +
 				string.trim().split(/(<%.+?%>)/g).map(part =>
-					part.startsWith('<%=raw') && part.endsWith('%>') ? `/*raw*/__this.ret+=(${part.slice(6, -2)});` :
-					part.startsWith('<%=') && part.endsWith('%>')    ? `/*=*/__this.ret+=__this.escapeHTML(${part.slice(3, -2)});` :
-					part.startsWith('<%') && part.endsWith('%>')     ? `/* */${part.slice(2, -2)};` :
+					part.startsWith('<%=raw') && part.endsWith('%>') ? `\${/*raw*/(${part.slice(6, -2)})}` :
+					part.startsWith('<%=') && part.endsWith('%>')    ? `\${/*=*/__this.escapeHTML(${part.slice(3, -2)})}` :
+					part.startsWith('<%') && part.endsWith('%>')     ? `\`;/* */${part.slice(2, -2)};__this.ret+=\`` :
 					(
 						part = part.replace(/\\/g, "\\\\")
 								.replace(/'/g, "\\'")
-								.replace(/\n|\r\n/g, () => `';\n__this.line=${++line};__this.ret+='\\n`),
-						part ? `/*+*/__this.ret+='${part}';` : ''
+								.replace(/\n|\r\n/g, () => `\n\${__this.line=${++line},''}`),
+						part ? part : ''
 					)
 				).join('') +
-				`/*end*/ return __this.ret;` +
+				`\`;/*end*/ return __this.ret;` +
 			`} catch (e) { throw new Error('TemplateError: '+e+' (on ${name} line ' + __this.line + ')',{cause:e}); }` +
 			`//# sourceURL=${name}\n` + 
 			`//# sourceMappingURL=data:application/json,${encodeURIComponent(JSON.stringify({version:3, file:name, sources:[`${name}.ejs`], sourcesContent:[string], mappings:";;AAAA;"+Array(line-1).fill('AACA').join(';')}))}`