New Case Study:See how Anthropic automated 95% of dependency reviews with Socket.Learn More
Socket
Sign inDemoInstall
Socket

tpjs

Package Overview
Dependencies
Maintainers
1
Versions
21
Alerts
File Explorer

Advanced tools

Socket logo

Install Socket

Detect and block malicious and high-risk dependencies

Install

tpjs - npm Package Compare versions

Comparing version 3.7.2 to 3.7.5

build/tp.js

28

bin/cli.js
#!/usr/bin/env node
var path=require("path"),fs=require("fs"),utils=require("real-utils"),CmdLine=require("cmdline"),pkg=require("../package.json"),compile=require("../lib/compile"),cmdLine=new CmdLine,cwd=process.cwd(),src=cmdLine.args[0],dst=cmdLine.args[1];if(cmdLine.options.has("-v"))console.log(pkg.rawName+" "+pkg.version);else if(utils.isNull(src)||utils.isNull(dst))console.log("usage: tp <src> <dst>");else{src=path.resolve(cwd,src),dst=path.resolve(cwd,dst);var funcName=path.basename(dst).split(".")[0],srcBuffer=fs.readFileSync(src).toString(),dstBuffer=compile(funcName,srcBuffer);fs.writeFileSync(dst,dstBuffer)}
var path = require('path');
var fs = require('fs');
var utils = require('ntils');
var cmdLine = require('cmdline');
var pkg = require('../package.json');
var compile = require('../lib/compile');
var cwd = process.cwd();
var helpInfo = 'usage: tp <src> <dst>';
cmdLine
.version(pkg.rawName + ' ' + pkg.version)
.help(helpInfo)
.handle({ arguments: true }, function ($0, $1) {
var src = path.resolve(cwd, $0);
var dst = path.resolve(cwd, $1);
var funcName = path.basename(dst).split('.')[0];
var srcBuffer = fs.readFileSync(src).toString();
var dstBuffer = compile(funcName, srcBuffer);
fs.writeFileSync(dst, dstBuffer);
return false;
})
.handle(function () {
console.log(helpInfo);
})
.ready();

39

lib/compile.js

@@ -1,9 +0,30 @@

/**
* tp.js - 最简洁高效的js模板引擎!
* @version v3.7.2
* @link http://houfeng.net/tp
* @license MIT
* @author Houfeng
* @email admin@xhou.net
*/
var tp=require("../"),fs=require("fs"),path=require("path"),uglifyJs=require("uglify-js"),pkg=require("../package.json"),compileTmpl=tp.compile(fs.readFileSync(path.normalize(__dirname+"/compile.tp")).toString()),createHandler=tp._createHandler.toString(),controlledExecute=tp._controlledExecute.toString(),extend=tp.extend.toString(),inArray=tp._inArray.toString();module.exports=function(e,r){var t=tp.compile(r),n=compileTmpl({name:e||"unknown",src:t.src,createHandler:createHandler,controlledExecute:controlledExecute,extend:extend,inArray:inArray,engine:pkg.rawName+" "+pkg.version}),i=uglifyJs.minify(n,{fromString:!0});return"/* compiled by tp */\n"+i.code};
var tp = require('../');
var fs = require('fs');
var path = require('path');
var uglifyJs = require("uglify-js");
var pkg = require('../package.json');
var os = require('os');
var compileTmpl = tp.compile(fs.readFileSync(path.normalize(__dirname + '/compile.tp')).toString());
var createHandler = tp._createHandler.toString();
var controlledExecute = tp._controlledExecute.toString();
var extend = tp.extend.toString();
var inArray = tp._inArray.toString();
module.exports = function (name, srcBuffer) {
var func = tp.compile(srcBuffer);
var dstBuffer = compileTmpl({
"name": name || 'unknown',
"src": func.src,
"createHandler": createHandler,
"controlledExecute": controlledExecute,
"extend": extend,
"inArray": inArray,
"engine": pkg.rawName + ' ' + pkg.version,
"EOL": os.EOL
});
var result = uglifyJs.minify(dstBuffer, {
fromString: true
});
return '/* compiled by tp */\n' + result.code;
};

@@ -1,9 +0,215 @@

/**
* tp.js - 最简洁高效的js模板引擎!
* @version v3.7.2
* @link http://houfeng.net/tp
* @license MIT
* @author Houfeng
* @email admin@xhou.net
*/
!function(e){"use strict";function n(e){return e?(e=e.replace(new RegExp("\\{1}","gim"),"\\\\"),e=e.replace(new RegExp("\r{1}","gim"),""),e=e.replace(new RegExp("\n{1}","gim"),"\\n"),e=e.replace(new RegExp("\r{1}","gim"),"\\r"),e=e.replace(new RegExp('"{1}',"gim"),'\\"')):""}function r(e){return e?e.replace(/&lt;/g,"<").replace(/&gt;/g,">").replace(/&amp;/g,"&"):""}function t(e,n){for(var r in e)if(e[r]===n)return!0;return!1}function u(e,n){try{return e()}catch(r){throw r.message=r.message||"",r.message=n+" : "+r.message,r}}function i(e,n){if(e){n=n||c;for(var r in e){if(t(["func","push","model","buffer"],r))throw'Can not expand "'+r+' function"';n[r]=e[r]}}}function o(e,n,r){var t=function(e){t.push(e)};t.push=function(e){t.buffer.push(e)};for(var u in r)r[u]&&i(r[u],t);return t.func=e,t.model=null!==n&&void 0!=n?n:"",t.buffer=[],t}function p(r,t){r=r||"",t=t||{};for(var i=t.codeBegin||e.codeBegin,p=t.codeEnd||e.codeEnd,l=new RegExp(i,"gim"),f=new RegExp(p,"gim"),a=new RegExp("("+i+"(.|\\\n|\\\r)*?"+p+")","gim"),d=new RegExp(i+"\\s*=","gim"),s=['"use strict"'],g=r.match(a)||[],m=r.replace(a,"▎").split("▎")||[],v=0;v<m.length;v++){var x=n(m[v]),h=g[v];s.push('$.push("'+x+'")'),null!==h&&"undefined"!=typeof h&&(d.lastIndex=0,h=d.test(h)?"$.push("+h.replace(d,"").replace(f,"")+")":h.replace(l,"").replace(f,""),s.push(h))}s.push('return $.buffer.join("");');var w=function(e,n){return w.exec(e,n)};return u(function(){w.src=new Function("$","$$",s.join(";"))},"Template compile error"),w.exec=function(e,n){n=n||{};var r=o(w,e,[c,t.extend,n.extend]);return u(function(){return r.result=r.func.src.call(r.model,r,r.model)||"",n.returnHandler?r:r.result},"Template execute error")},w}e.version="3.7.2";var c={};e.codeBegin="<%",e.codeEnd="%>",e.extend=i,e.compile=function(e,n){return p(e,n)},e.parse=function(e,n,r,t){var u=p(e,r);return u(n,t)},e._createHandler=o,e._controlledExecute=u,e._inArray=t,"undefined"!=typeof window&&window.document&&(e.query=function(e){return window.document.getElementById(e)},e.bind=function(n){n=n||{};var t=n.query||e.query;if(n.el=n.el||n.element,n.el="string"==typeof n.el?t(n.el):n.el,n.tp=n.tp||n.template||n.el,n.tp="string"==typeof n.tp?t(n.tp)||n.tp:n.tp,n.tp&&n.el){var u=p(r(n.tp.innerHTML||n.tp),n);n.append?n.el.innerHTML+=u(n.model):n.el.innerHTML=u(n.model)}})}(function(){var e={};return"undefined"!=typeof exports&&(e=exports,e.env=e.env||[],e.env.push("commaonjs")),"function"==typeof define&&define.amd&&(e.env=e.env||[],e.env.push("amd"),define("tp",[],function(){return e})),(null==e.env||e.env.length<1)&&(e.env=e.env||[],e.env.push("general"),this.tp=e),e}());
(function (owner) {
"use strict";
//引擎版本
owner.version = '{{version}}';
//处理输出转义
function outTransferred(text) {
if (!text) return '';
text = text.replace(new RegExp('\\{1}', 'gim'), '\\\\');
text = text.replace(new RegExp('\r{1}', 'gim'), '');
text = text.replace(new RegExp('\n{1}', 'gim'), '\\n');
text = text.replace(new RegExp('\r{1}', 'gim'), '\\r');
text = text.replace(new RegExp('\"{1}', 'gim'), '\\"');
return text;
}
//处理输入转义
function inTransferred(text) {
if (!text) return '';
return text.replace(/&lt;/g, "<").replace(/&gt;/g, ">").replace(/&amp;/g, "&");
}
//检查是否在数组中
function inArray(array, item) {
for (var i in array) {
if (array[i] === item) {
return true;
}
};
return false;
};
//执行一个函数
function controlledExecute(fn, message) {
try {
return fn();
} catch (ex) {
ex.message = ex.message || "";
ex.message = message + " : " + ex.message;
throw ex;
}
}
//全局扩展容器,全局扩展作用于所有编译或解释的模板
var gloablExtend = {};
//扩展函数,如果 det 为空就暂挂到 gloablExtend 上
function extend(src, dst) {
if (!src) return;
dst = dst || gloablExtend;
for (var name in src) {
if (!inArray(['func', 'push', 'model', 'buffer'], name)) {
dst[name] = src[name];
} else {
throw 'Can not expand "' + name + ' function"';
}
}
}
//创建模板上下文句柄,即模块中的 $
function createHandler(func, model, _extends) {
var handler = function (text) {
handler.push(text);
};
handler.push = function (text) {
handler.buffer.push(text);
};
for (var i in _extends) {
if (_extends[i]) extend(_extends[i], handler);
}
handler.func = func;
handler.model = ((model !== null && model != undefined) ? model : '');
handler.buffer = [];
return handler;
}
//编译一个模板
//编译模板时可以指定 options.extend 指定编译扩展
//编译扩展公针当前模板有效,无论第几次执行模板
function compile(source, options) {
source = source || '';
options = options || {};
var codeBegin = options.codeBegin || owner.codeBegin;
var codeEnd = options.codeEnd || owner.codeEnd;
var codeBeginExp = new RegExp(codeBegin, 'gim');
var codeEndExp = new RegExp(codeEnd, 'gim');
//提取代码块(包括开始、结束标记)
var codeExp = new RegExp('(' + codeBegin + '(.|\\\n|\\\r)*?' + codeEnd + ')', 'gim');
//验证输出表达式
var outCodeExp = new RegExp(codeBegin + '\\\s*=', 'gim');
//--
var codeBuffer = ['"use strict"'];
var codeBlocks = source.match(codeExp) || [];
var textBlocks = source.replace(codeExp, '▎').split('▎') || [];
for (var i = 0; i < textBlocks.length; i++) {
var text = outTransferred(textBlocks[i]);
var code = codeBlocks[i];
codeBuffer.push('$.push("' + text + '")');
if (code !== null && typeof code !== 'undefined') {
outCodeExp.lastIndex = 0;
if (outCodeExp.test(code)) {
code = '$.push(' + code.replace(outCodeExp, '').replace(codeEndExp, '') + ')';
} else {
code = code.replace(codeBeginExp, '').replace(codeEndExp, '');
}
codeBuffer.push(code);
}
}
codeBuffer.push('return $.buffer.join("");');
//构造模板函数
//模板执行时,可以指定 execOptions, execOptions.extend 执行扩展仅对本次执行有效
var func = function (model, execOptions) {
return func.exec(model, execOptions);
};
//编译模板函数
controlledExecute(function () {
func.src = new Function("$", "$$", codeBuffer.join(';'));
}, "Template compile error");
//生成执行函数
func.exec = function (model, execOptions) {
execOptions = execOptions || {};
var handler = createHandler(func, model, [gloablExtend, options.extend, execOptions.extend]);
return controlledExecute(function () {
//this 当前数据模型,$ 参数为 Handler,$$ 参数为当前数据模型
handler.result = (handler.func.src.call(handler.model, handler, handler.model) || '');
return execOptions.returnHandler ? handler : handler.result;
}, "Template execute error");
};
return func;
}
owner.codeBegin = '\<\%';
owner.codeEnd = '\%\>';
/**
* 扩展引擎功能
*/
owner.extend = extend;
/**
* 编译一个模板,source:模板源字符串,options编译选项
* 编译模板时可以指定 options.extend 指定编译扩展
* 编译扩展公针当前模板有效,无论第几次执行模板
*/
owner.compile = function (source, options) {
return compile(source, options);
};
/**
* 解析模板,source:模板源字符串,model:数据模型
* options 为编译选项,编译模板时可以指定 options.extend 指定编译扩展
* 模板执行时,可以指定execOptions, execOptions.extend 执行扩展仅对本次执行有效
*/
owner.parse = function (source, model, options, execOptions) {
var fn = compile(source, options);
return fn(model, execOptions);
};
/**
* 非公开 API 用于 cli
*/
owner._createHandler = createHandler;
owner._controlledExecute = controlledExecute;
owner._inArray = inArray;
/**
* 如果在浏览器环境,添加针对DOM的扩展方法;
*/
if (typeof window !== 'undefined' && window.document) {
owner.query = function (id) {
return window.document.getElementById(id);
};
owner.bind = function (options) {
options = options || {};
var query = options.query || owner.query;
options.el = options.el || options.element;
options.el = (typeof options.el === 'string') ? query(options.el) : options.el;
options.tp = options.tp || options.template || options.el;
options.tp = (typeof options.tp === 'string') ? (query(options.tp) || options.tp) : options.tp;
if (!options.tp || !options.el) return;
var tempFunc = compile(inTransferred(options.tp.innerHTML || options.tp), options);
if (options.append) {
options.el.innerHTML += tempFunc(options.model);
} else {
options.el.innerHTML = tempFunc(options.model);
}
};
}
})((function () {
var owner = {};
//支持CommonJS规范
if (typeof exports !== 'undefined') {
owner = exports;
owner.env = owner.env || [];
owner.env.push("commaonjs");
}
//支持AMD规范
if (typeof define === 'function' && define.amd) {
owner.env = owner.env || [];
owner.env.push("amd");
define('tp', [], function () {
return owner;
});
}
//常规方式,挂在 this 对象上
if (owner.env == null || owner.env.length < 1) {
owner.env = owner.env || [];
owner.env.push("general");
this.tp = owner;
}
return owner;
})());
//end.
{
"name": "tpjs",
"rawName": "tp",
"version": "3.7.2",
"version": "3.7.5",
"description": "最简洁高效的js模板引擎!",

@@ -36,5 +36,5 @@ "main": "./lib/tp.js",

"dependencies": {
"cmdline": "0.0.5",
"real-utils": "0.0.1",
"uglify-js": "^2.4.24"
"cmdline": "^1.0.5",
"ntils": "^1.0.1",
"uglify-js": "^2.7.0"
},

@@ -52,2 +52,2 @@ "devDependencies": {

}
}
}

Sorry, the diff of this file is not supported yet

Sorry, the diff of this file is not supported yet

SocketSocket SOC 2 Logo

Product

  • Package Alerts
  • Integrations
  • Docs
  • Pricing
  • FAQ
  • Roadmap
  • Changelog

Packages

npm

Stay in touch

Get open source security insights delivered straight into your inbox.


  • Terms
  • Privacy
  • Security

Made with ⚡️ by Socket Inc