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

snakeskin

Package Overview
Dependencies
Maintainers
1
Versions
213
Alerts
File Explorer

Advanced tools

Socket logo

Install Socket

Detect and block malicious and high-risk dependencies

Install

snakeskin - npm Package Compare versions

Comparing version 4.0.21 to 4.1.0

lib/directions/compiler.es6

2

bower.json
{
"name": "Snakeskin",
"main": "build/snakeskin.min.js",
"version": "4.0.21",
"version": "4.1.0",
"homepage": "https://github.com/kobezzza/Snakeskin",

@@ -6,0 +6,0 @@ "keywords": [

/*!
* Snakeskin v4.0.21 (live)
* Snakeskin v4.1.0 (live)
* https://github.com/kobezzza/Snakeskin

@@ -8,3 +8,3 @@ *

*
* Date: Mon, 25 Aug 2014 10:14:09 GMT
* Date: Fri, 29 Aug 2014 07:00:31 GMT
*/

@@ -31,3 +31,3 @@

*/
VERSION: [4, 0, 21],
VERSION: [4, 1, 0],

@@ -281,5 +281,6 @@ /**

* @param {?boolean=} [opt_wordOnly=false] - если false, то текст обрезается без учёта целостности слов
* @param {?boolean=} [opt_html=false] - если true, то символ многоточия вставляется как HTML-мнемоник
* @return {string}
*/
Snakeskin.Filters['truncate'] = function (str, length, opt_wordOnly) {
Snakeskin.Filters['truncate'] = function (str, length, opt_wordOnly, opt_html) {
str = ((str) + '');

@@ -303,3 +304,3 @@ if (!str || str.length <= length) {

return (lastInd !== void 0 ? tmp.substring(0, lastInd) : tmp) + '…';
return (lastInd !== void 0 ? tmp.substring(0, lastInd) : tmp) + (opt_html ? '&#8230;' : '…');
};

@@ -378,2 +379,13 @@

return ((block) + '') + ((part) + '');
};
/**
* Задача значения по умолчанию для объекта
*
* @param {*} val - исходное значение
* @param {*} def - значение по умолчанию
* @return {*}
*/
Snakeskin.Filters['default'] = function (val, def) {
return val === void 0 ? def : val;
};if (/\[\w+ \w+]/.test(Object.keys && Object.keys.toString())) {

@@ -380,0 +392,0 @@ var keys = Object.keys;

@@ -1,7 +0,7 @@

/*! Snakeskin v4.0.21 (live) | https://github.com/kobezzza/Snakeskin/blob/master/LICENSE */Array.isArray=Array.isArray||function(h){return"[object Array]"==={}.toString.call(h)};String.prototype.trim=String.prototype.trim||function(){for(var h=this.replace(/^\s\s*/,""),k=h.length,l=/\s/;l.test(h.charAt(--k)););return h.substring(0,k+1)};var e={VERSION:[4,0,21],a:{},Filters:{},Vars:{},LocalVars:{},cache:{}};
(function(){function h(a){return n[a]}function k(a){return p[a]}var l="undefined"===typeof window&&"undefined"!==typeof exports;e.importFilters=function(a,c){var b=e.Filters;if(c)for(var d=c.split("."),f=-1;++f<d.length;)b[d[f]]||(b[d[f]]={}),b=b[d[f]];for(var g in a)a.hasOwnProperty(g)&&(b[g]=a[g])};var p={"&":"&amp;","<":"&lt;",">":"&gt;",'"':"&quot;","'":"&#39;","/":"&#x2F;"},q=/[&<>"'\/]/g,r=/([$\w]\s*=\s*)([^"'\s>=]+)/g,s=/(javascript)(:|;)/;e.Filters.html=function(a,c){var b=a+"";c&&(b=b.replace(r,
'$1"$2"'));b=b.replace(q,k);c&&(b=b.replace(s,"$1&#31;$2"));return b};e.Filters.undef=function(a){return void 0!==a?a:""};var n={"&amp;":"&","&lt;":"<","&gt;":">","&quot;":'"',"&#39;":"'","&#x2F;":"/"},t=/&amp;|&lt;|&gt;|&quot;|&#39;|&#x2F;/g;e.Filters.uhtml=function(a){return(a+"").replace(t,h)};var u=/<\/?[^>]+>/g;e.Filters.stripTags=function(a){return(a+"").replace(u,"")};var v=/%5B/g,w=/%5D/g;e.Filters.uri=function(a){return encodeURI(a+"").replace(v,"[").replace(w,"]")};e.Filters.upper=function(a){return(a+
"").toUpperCase()};e.Filters.ucfirst=function(a){a=a+"";return a.charAt(0).toUpperCase()+a.substring(1)};e.Filters.lower=function(a){return(a+"").toLowerCase()};e.Filters.lcfirst=function(a){a=a+"";return a.charAt(0).toLowerCase()+a.substring(1)};e.Filters.trim=function(a){return(a+"").trim()};var x=/\s{2,}/g;e.Filters.collapse=function(a){return(a+"").replace(x," ").trim()};e.Filters.truncate=function(a,c,b){a=a+"";if(!a||a.length<=c)return a;a=a.substring(0,c-1);c=void 0;for(var d=a.length;d--&&
b;)if(" "===a.charAt(d))c=d;else if(void 0!==c)break;return(void 0!==c?a.substring(0,c):a)+"\u2026"};e.Filters.repeat=function(a,c){return Array(null!=c?c+1:3).join(a)};e.Filters.remove=function(a,c){return(a+"").replace(c,"")};e.Filters.replace=function(a,c,b){return(a+"").replace(c,b)};e.Filters.json=function(a){return"object"===typeof a?JSON.stringify(a):a+""};e.Filters.parse=function(a){return"string"!==typeof a?a:JSON.parse(a)};e.Filters.bem=function(a,c){return a+""+(c+"")};if(/\[\w+ \w+]/.test(Object.keys&&
Object.keys.toString()))var m=Object.keys;e.StringBuffer=function(){return[]};e.forEach=function(a,c){if(a){var b=0;if(Array.isArray(a))for(var b=a.length,d=-1;++d<b&&!1!==c(a[d],d,a,0===d,d===b-1,b););else if(m)for(var d=m(a),b=d.length,f=-1;++f<b&&!1!==c(a[d[f]],d[f],a,f,0===f,f===b-1,b););else{d=0;if(6<=c.length)for(f in a)a.hasOwnProperty(f)&&b++;for(var g in a)if(a.hasOwnProperty(g)){if(!1===c(a[g],g,a,d,0===d,d===b-1,b))break;d++}}}};e.forIn=function(a,c){if(a){var b=0,d=0;if(6<=c.length)for(var f in a)b++;
for(var g in a){if(!1===c(a[g],g,a,d,0===d,d===b-1,b))break;d++}}};l?module.exports=e:this.Snakeskin=e}).call(this);
/*! Snakeskin v4.1.0 (live) | https://github.com/kobezzza/Snakeskin/blob/master/LICENSE */Array.isArray=Array.isArray||function(h){return"[object Array]"==={}.toString.call(h)};String.prototype.trim=String.prototype.trim||function(){for(var h=this.replace(/^\s\s*/,""),k=h.length,l=/\s/;l.test(h.charAt(--k)););return h.substring(0,k+1)};var d={VERSION:[4,1,0],a:{},Filters:{},Vars:{},LocalVars:{},cache:{}};
(function(){function h(a){return n[a]}function k(a){return p[a]}var l="undefined"===typeof window&&"undefined"!==typeof exports;d.importFilters=function(a,c){var b=d.Filters;if(c)for(var e=c.split("."),f=-1;++f<e.length;)b[e[f]]||(b[e[f]]={}),b=b[e[f]];for(var g in a)a.hasOwnProperty(g)&&(b[g]=a[g])};var p={"&":"&amp;","<":"&lt;",">":"&gt;",'"':"&quot;","'":"&#39;","/":"&#x2F;"},q=/[&<>"'\/]/g,r=/([$\w]\s*=\s*)([^"'\s>=]+)/g,s=/(javascript)(:|;)/;d.Filters.html=function(a,c){var b=a+"";c&&(b=b.replace(r,
'$1"$2"'));b=b.replace(q,k);c&&(b=b.replace(s,"$1&#31;$2"));return b};d.Filters.undef=function(a){return void 0!==a?a:""};var n={"&amp;":"&","&lt;":"<","&gt;":">","&quot;":'"',"&#39;":"'","&#x2F;":"/"},t=/&amp;|&lt;|&gt;|&quot;|&#39;|&#x2F;/g;d.Filters.uhtml=function(a){return(a+"").replace(t,h)};var u=/<\/?[^>]+>/g;d.Filters.stripTags=function(a){return(a+"").replace(u,"")};var v=/%5B/g,w=/%5D/g;d.Filters.uri=function(a){return encodeURI(a+"").replace(v,"[").replace(w,"]")};d.Filters.upper=function(a){return(a+
"").toUpperCase()};d.Filters.ucfirst=function(a){a=a+"";return a.charAt(0).toUpperCase()+a.substring(1)};d.Filters.lower=function(a){return(a+"").toLowerCase()};d.Filters.lcfirst=function(a){a=a+"";return a.charAt(0).toLowerCase()+a.substring(1)};d.Filters.trim=function(a){return(a+"").trim()};var x=/\s{2,}/g;d.Filters.collapse=function(a){return(a+"").replace(x," ").trim()};d.Filters.truncate=function(a,c,b,e){a=a+"";if(!a||a.length<=c)return a;a=a.substring(0,c-1);c=void 0;for(var f=a.length;f--&&
b;)if(" "===a.charAt(f))c=f;else if(void 0!==c)break;return(void 0!==c?a.substring(0,c):a)+(e?"&#8230;":"\u2026")};d.Filters.repeat=function(a,c){return Array(null!=c?c+1:3).join(a)};d.Filters.remove=function(a,c){return(a+"").replace(c,"")};d.Filters.replace=function(a,c,b){return(a+"").replace(c,b)};d.Filters.json=function(a){return"object"===typeof a?JSON.stringify(a):a+""};d.Filters.parse=function(a){return"string"!==typeof a?a:JSON.parse(a)};d.Filters.bem=function(a,c){return a+""+(c+"")};d.Filters["default"]=
function(a,c){return void 0===a?c:a};if(/\[\w+ \w+]/.test(Object.keys&&Object.keys.toString()))var m=Object.keys;d.StringBuffer=function(){return[]};d.forEach=function(a,c){if(a){var b=0;if(Array.isArray(a))for(var b=a.length,e=-1;++e<b&&!1!==c(a[e],e,a,0===e,e===b-1,b););else if(m)for(var e=m(a),b=e.length,f=-1;++f<b&&!1!==c(a[e[f]],e[f],a,f,0===f,f===b-1,b););else{e=0;if(6<=c.length)for(f in a)a.hasOwnProperty(f)&&b++;for(var g in a)if(a.hasOwnProperty(g)){if(!1===c(a[g],g,a,e,0===e,e===b-1,b))break;
e++}}}};d.forIn=function(a,c){if(a){var b=0,e=0;if(6<=c.length)for(var f in a)b++;for(var g in a){if(!1===c(a[g],g,a,e,0===e,e===b-1,b))break;e++}}};l?module.exports=d:this.Snakeskin=d}).call(this);

@@ -1,2 +0,3 @@

/* Snakeskin v4.0.16, key <true,true,false,false,true,false,true,true,i18n>, label <1408105354743>, generated at <1408193068062> Sat Aug 16 2014 16:44:28 GMT+0400 (Московское время (зима)). This code is generated automatically, don't alter it. */
/* Snakeskin v4.1.0, key <true,true,false,false,true,false,true,false,true,i18n>, label <1409295656628>, includes <>, generated at <1409295831911>.
This code is generated automatically, don't alter it. */
(function() {

@@ -22,3 +23,3 @@ var Snakeskin = global.Snakeskin;

__STR__, __TMP__, __J__;
var $_ = __LOCAL__['$_852e5']; /* Snakeskin template: helloWorld; name */
var $_ = __LOCAL__['$_b26c0']; /* Snakeskin template: helloWorld; name */
this.helloWorld = function(name) {

@@ -25,0 +26,0 @@ var __THIS__ = this,

@@ -1,2 +0,3 @@

/* Snakeskin v4.0.16, key <false,true,false,false,true,false,true,true,i18n>, label <1408105354743>, generated at <1408193057145> Sat Aug 16 2014 16:44:17 GMT+0400 (Московское время (зима)). This code is generated automatically, don't alter it. */
/* Snakeskin v4.1.0, key <false,true,false,false,true,false,true,false,true,i18n>, label <1409295656628>, includes <>, generated at <1409295731479>.
This code is generated automatically, don't alter it. */
(function() {

@@ -13,3 +14,3 @@ var __ROOT__ = this,

__STR__, __TMP__, __J__;
var $_ = __LOCAL__['$_9f636']; /* Snakeskin template: helloWorld; name */
var $_ = __LOCAL__['$_52629']; /* Snakeskin template: helloWorld; name */
this.helloWorld = function helloWorld(name) {

@@ -16,0 +17,0 @@ var __THIS__ = this,

@@ -1,2 +0,3 @@

var commandRgxp = /([^\s]+).*/;
var commandRgxp = /([^\s]+).*/,
nonBlockCommentRgxp = /([^\\])\/\/\/(\s?)(.*)/;

@@ -160,3 +161,3 @@ /**

struct = obj;
res += space + s + (dir ? parts[0] : decl.command) + e;
res += space + s + (dir ? parts[0] : decl.command).replace(nonBlockCommentRgxp, '$1/*$2$3$2*/') + e;

@@ -163,0 +164,0 @@ if (obj.block) {

@@ -15,16 +15,26 @@ /**

* @param {boolean} params.interface - если true, то все директивы template трактуются как interface
* и при наследовании можно задавать необъявленные родительские шаблоны
*
* @param {boolean} params.inlineIterators - если true, то работа итераторов forEach и forIn
* будет развёртвываться в циклы
* @param {boolean} params.inlineIterators - если true, то итераторы forEach и forIn
* будут развёрнуты в циклы
*
* @param {boolean} params.xml - если false, то snakeskin не делает дополнительных
* @param {boolean} params.autoReplace - если false, то Snakeskin не делает дополнительных преобразований
* последовательностей
*
* @param {Object=} [params.macros] - таблица символов для преобразования последовательностей
*
* @param {boolean} params.xml - если false, то Snakeskin не делает дополнительных
* проверок текста как xml (экранируются атрибуты и проверяется закрытость тегов)
*
* @param {boolean} params.escapeOutput - если false, то вывод значений выражений
* не будет принудительно экранироваться фильтром html
* @param {boolean} params.localization - если false, то блоки ` ... ` не заменяются на вызов i18n
* @param {string} params.i18nFn - название функции для i18n
* @param {Object=} [params.language] - таблица фраз для локализации (найденные фразы будут заменены по ключу)
*
* @param {boolean} params.escapeOutput - если false, то на вывод значений через директиву output
* не будет накладываться фильтр html
*
* @param {boolean} params.stringBuffer - если true, то для конкатенации строк в шаблоне
* используется техника [].join
* используется Snakeskin.StringBuffer
*
* @param {Array=} [params.lines] - массив строк шаблона
* @param {Array=} [params.lines] - массив строк шаблона (листинг)
* @param {DirObj=} [params.parent] - ссылка на родительский объект

@@ -40,4 +50,4 @@ *

* @param {Object=} [params.proto] - объект корневого прототипа
* @param {Object=} [params.info] - дополнительная информация о запуске:
* используется для сообщений об ошибках
* @param {Object=} [params.info] - дополнительная информация о запуске
* (используется для сообщений об ошибках)
*/

@@ -96,2 +106,17 @@ function DirObj(src, params) {var this$0 = this;

/** @type {boolean} */
this.autoReplace = params.autoReplace !== false;
/** @type {(Object|undefined)} */
this.macros = params.macros;
/** @type {boolean} */
this.localization = params.localization;
/** @type {string} */
this.i18nFn = params.i18nFn;
/** @type {(Object|undefined)} */
this.language = params.language;
if (params.consts) {

@@ -232,3 +257,3 @@ /** @type {(Array|undefined)} */

* Объект модуля
* @type {{exports, require, id, filename, parent, children, loaded}}
* @type {{exports, require, id, key, root, filename, parent, children, loaded}}
*/

@@ -241,4 +266,6 @@ this.module = {

id: 0,
key: [],
root: null,
filename: this.info['file'],
parent: IS_NODE ?

@@ -437,2 +464,22 @@ module : null,

/**
* Выполнить заданную функцию, если возможна запись в результирующую строку
* (this.isSimpleOutput())
*
* @param {function(this:DirObj)} callback - функция обратного вызова
* @return {boolean}
*/
DirObj.prototype.mod = function (callback) {
if (!this.isSimpleOutput()) {
return false;
}
if (!this.tplName || write[this.tplName] !== false) {
callback.call(this);
return true;
}
return false;
};
/**
* Добавить указанную строку в результирующую строку JavaScript

@@ -439,0 +486,0 @@ * (с проверкой this.isSimpleOutput())

@@ -9,4 +9,4 @@ var nextLineRgxp = /[\r\n\v]/,

var tAttrRgxp = /[^'" ]/;
var uid;
var tAttrRgxp = /[^'" ]/,
uid;

@@ -23,2 +23,9 @@ /**

*
* @param {?boolean=} [opt_params.commonJS=false] - если true, то шаблон компилируется с экспортом в стиле commonJS
* @param {Object=} [opt_params.context=false] - контекст для сохранение скомпилированного шаблона
* (устанавливает экспорт commonJS)
*
* @param {Object=} [opt_params.vars] - таблица суперглобальных переменных,
* которые будут добавлены в Snakeskin.Vars
*
* @param {?boolean=} [opt_params.cache=true] - если false, то наличие шаблона в кеше не будет проверятся

@@ -29,4 +36,4 @@ * @param {Object=} [opt_params.debug] - объект, который будет содержать в себе отладочную информацию

*
* @param {?boolean=} [opt_params.localization=true] - если false, то блоки ` ... ` не заменяются на вызов i18n
* @param {?string=} [opt_params.i18nFn='i18n'] - название функции для i18n
* @param {?boolean=} [opt_params.localization=true] - если false, то блоки ` ... ` не заменяются на вызов i18n
* @param {Object=} [opt_params.language] - таблица фраз для локализации (найденные фразы будут заменены по ключу)

@@ -36,24 +43,22 @@ * @param {Object=} [opt_params.words] - таблица, которая будет заполнена всеми фразами для локализации,

*
* @param {?boolean=} [opt_params.commonJS=false] - если true, то шаблон компилируется
* с экспортом в стиле commonJS
* @param {?boolean=} [opt_params.autoReplace=false] - если false, то Snakeskin не делает дополнительных преобразований
* последовательностей
*
* @param {Object=} [opt_params.macros] - таблица символов для преобразования последовательностей
*
* @param {?boolean=} [opt_params.interface=false] - если true, то все директивы template трактуются как interface
* и при наследовании можно задавать необъявленные родительские шаблоны
*
* @param {?boolean=} [opt_params.stringBuffer=false] - если true, то для конкатенации строк в шаблоне
* используется техника [].join
* используется Snakeskin.StringBuffer
*
* @param {?boolean=} [opt_params.inlineIterators=false] - если true, то работа итераторов forEach и forIn
* будет развёртвываться в циклы
* @param {?boolean=} [opt_params.inlineIterators=false] - если true, то итераторы forEach и forIn
* будут развёрнуты в циклы
*
* @param {?boolean=} [opt_params.xml=true] - если false, то snakeskin не делает дополнительных
* @param {?boolean=} [opt_params.xml=true] - если false, то Snakeskin не делает дополнительных
* проверок текста как xml (экранируются атрибуты и проверяется закрытость тегов)
*
* @param {?boolean=} [opt_params.escapeOutput=true] - если true, то работа итераторов forEach и forIn
* будет развёртвываться в циклы
* @param {?boolean=} [opt_params.escapeOutput=true] - если false, то на вывод значений через директиву output
* не будет накладываться фильтр html
*
* @param {Object=} [opt_params.context=false] - контекст для сохранение скомпилированного шаблона
* (устанавливает экспорт commonJS)
*
* @param {Object=} [opt_params.vars] - таблица суперглобальных переменных,
* которые будут добавлены в Snakeskin.Vars
*
* @param {?function(!Error)=} [opt_params.onError] - функция обратного вызова для обработки ошибок при трансляции

@@ -63,8 +68,7 @@ * @param {?boolean=} [opt_params.prettyPrint] - если true, то полученный JS код шаблона

*
* @param {Object=} [opt_info] - дополнительная информация о запуске
* (используется для сообщений об ошибках)
* @param {Object=} [opt_info] - дополнительная информация о запуске (используется для сообщений об ошибках)
* @param {?string=} [opt_info.file] - адрес исходного файла шаблонов
*
* @param {?boolean=} [opt_info.cacheKey=false] - если true, то возвращается кеш-ключ шаблона
* @param {?string=} [opt_info.file] - адрес исходного файла шаблонов
* @param {Object=} [opt_sysParams] - служебные параметры запуска
* @param {?boolean=} [opt_sysParams.cacheKey=false] - если true, то возвращается кеш-ключ шаблона
*

@@ -78,3 +82,3 @@ * @param {Array=} [opt_sysParams.scope] - область видимости (контекст) директив

*
* @param {Array=} [opt_sysParams.lines] - массив строк шаблона
* @param {Array=} [opt_sysParams.lines] - массив строк шаблона (листинг)
* @param {?boolean=} [opt_sysParams.needPrfx] - если true, то директивы декларируются как #{ ... }

@@ -105,4 +109,8 @@ * @param {?number=} [opt_sysParams.prfxI] - глубина префиксных директив

// GCC экспорт
// >>>
cjs = Boolean(cjs);
p.onError = s(p.onError, p['onError']);
p.prettyPrint = s(p.prettyPrint, p['prettyPrint']) || false;

@@ -113,10 +121,13 @@ p.stringBuffer = s(p.stringBuffer, p['stringBuffer']) || false;

p.interface = s(p.interface, p['interface']) || false;
p.throws = s(p.throws, p['throws']) || false;
p.cache = s(p.cache, p['cache']) !== false;
p.autoReplace = s(p.autoReplace, p['autoReplace']) || false;
p.macros = s(p.macros, p['macros']);
var debug =
p.debug = s(p.debug, p['debug']);
var xml =
p.xml = s(p.xml, p['xml']) !== false;
p.xml = s(p.xml, p['xml']) !== false;

@@ -135,12 +146,12 @@ var vars =

p.i18nFn = s(p.i18nFn, p['i18nFn']) || 'i18n';
p.localization = s(p.localization, p['localization']) !== false;
p.language = s(p.language, p['language']);
var i18n =
p.localization = s(p.localization, p['localization']) !== false;
var lang =
p.language = s(p.language, p['language']);
var words =
p.words = s(p.words, p['words']);
// <<<
// Отладочная информация
// >>>
var info = opt_info || {};

@@ -161,5 +172,9 @@

var cacheKey = lang ? null : [
// <<<
// Работа с кешем
// >>>
var cacheKey = p.language || p.macros ? null : [
cjs,
xml,
p.xml,

@@ -171,9 +186,9 @@ p.inlineIterators,

p.prettyPrint,
p.autoReplace,
i18n,
p.localization,
p.i18nFn
].join();
// Хакерство :)
if (info.cacheKey || info['cacheKey']) {
if (sp.cacheKey || sp['cacheKey']) {
return cacheKey;

@@ -241,7 +256,141 @@ }

var macros = {},
mGroups = {};
var inlineMacro = {},
comboMacro = {};
var beforeTag = {},
afterTag = {};
/**
* @param {Object} obj
* @param {?string=} [opt_include]
*/
function setMacros(obj, opt_include) {
if (obj == null) {
obj = mGroups[opt_include];
if (obj) {
for (var key in obj) {
if (!obj.hasOwnProperty(key)) {
continue;
}
delete obj[key];
delete macros[key];
delete comboMacro[key];
}
}
} else {
for (var key$3 in obj) {
if (!obj.hasOwnProperty(key$3)) {
continue;
}
var el = obj[key$3];
if (key$3.charAt(0) === '@' && !opt_include) {
setMacros(el, key$3);
} else {
if (opt_include) {
mGroups[opt_include] = mGroups[opt_include] || {};
}
if (el) {
macros[key$3] = el.value || el;
if (Array.isArray(macros[key$3])) {
comboMacro[key$3] = true;
}
var inline = el['inline'] ||
el.inline;
if (inline) {
inlineMacro[key$3.charAt(0)] = true;
}
if (opt_include) {
mGroups[opt_include][key$3] = macros[key$3];
}
} else {
delete macros[key$3];
delete comboMacro[key$3];
if (opt_include) {
delete mGroups[opt_include][key$3];
}
}
}
}
}
}
if (p.autoReplace) {
var def = {
'@quotes': {
'"': [['«', '»'], ['‘', '’']],
'\'': [['“', '”'], ['„', '“']]
},
'@shorts': {
'(c)': '©',
'(tm)': '™',
'[v]': '☑',
'[x]': '☒',
'[_]': '☐',
'<-': '←',
'<-|': '↤',
'->': '→',
'|->': '↦',
'<->': '↔',
'...': {
inline: true,
value: '…'
},
'-': {
inline: true,
value: '−'
},
'--': {
inline: true,
value: '—'
}
},
'@adv': {
'%lorem%': 'Lorem ipsum dolor sit amet, consectetur adipisicing elit. Dolor dolores error facilis iusto magnam nisi praesentium voluptas. Delectus laudantium minus quia sapiente sunt temporibus voluptates! Explicabo iusto molestias quis voluptatibus.'
},
'@symbols': {
'\\n': '\\n',
'\\r': '\\r',
'\\s': '&nbsp;'
}
};
if (!sp.proto) {
setMacros(def);
}
setMacros(p.macros);
}
// <<<
// Обработка подключений файлов
// >>>
var label = '';
var dirname,
filename;
var label = '';
if (!sp.proto) {

@@ -275,5 +424,15 @@ uid = Math.random()

// <<<
// Основная логика
// >>>
var alb = ADV_LEFT_BLOCK,
lb = LEFT_BLOCK,
rb = RIGHT_BLOCK;
var dir = new DirObj(String(text), {
info: info,
commonJS: cjs,
onError: p.onError,
parent: sp.parent,
proto: sp.proto,

@@ -283,15 +442,27 @@ scope: sp.scope,

consts: sp.consts,
onError: p.onError,
needPrfx: sp.needPrfx,
prfxI: sp.prfxI,
lines: sp.lines,
xml: p.xml,
commonJS: cjs,
stringBuffer: p.stringBuffer,
inlineIterators: p.inlineIterators,
xml: xml,
escapeOutput: p.escapeOutput,
autoReplace: p.autoReplace,
macros: macros,
localization: p.localization,
i18nFn: p.i18nFn,
language: p.language,
interface: p.interface,
throws: p.throws,
needPrfx: sp.needPrfx,
prfxI: sp.prfxI,
lines: sp.lines,
parent: sp.parent
throws: p.throws
});
var templateMap = dir.getGroup('rootTemplate');
// Если true, то идёт содержимое директивы,

@@ -305,2 +476,8 @@ // т.е. { ... }

var commandTypeRgxp = /[^\s]+/m,
commandRgxp = /[^\s]+\s*/m;
var filterStart = false,
filterStartRgxp = /[a-z]/i;
// Количество открытых { внутри директивы

@@ -329,2 +506,3 @@ var fakeBegin = 0;

// Флаги для обработки XML тегов и атрибутов
var tOpen = 0,

@@ -335,7 +513,10 @@ tAttr = false,

var filterStart = false,
filterStartRgxp = /[a-z]/i;
// Флаги для обработки скобок при типографии
var qOpen = 0,
qType = null;
var commandTypeRgxp = /[^\s]+/m,
commandRgxp = /[^\s]+\s*/m;
// Флаги для обработки типографских последовательностей
var expr = '',
exprPos = 0,
advExprPos = 0;

@@ -347,6 +528,3 @@ var prevSpace,

var alb = ADV_LEFT_BLOCK,
lb = LEFT_BLOCK,
rb = RIGHT_BLOCK;
// Флаги для обработки строк-локализации
var i18nStr = '',

@@ -356,7 +534,7 @@ i18nStart = false,

var clrL = true;
var part = '',
rPart = '';
var clrL = true;
while (++dir.i < dir.source.length) {
while (++dir.i < dir.source.length) {;var $retPrim$0, $value$0 = (function(){
var str = dir.source,

@@ -366,2 +544,3 @@ struct = dir.structure;

var el = str.charAt(dir.i),
prev = str.charAt(dir.i - 1),
next = str.charAt(dir.i + 1),

@@ -418,3 +597,3 @@ next2str = el + next;

} else if (!comment) {
continue;
return;
}

@@ -428,3 +607,3 @@ }

if (!comment && !jsDoc) {
continue;
return;
}

@@ -443,3 +622,3 @@

} else if (!comment && !jsDoc) {
continue;
return;
}

@@ -471,3 +650,3 @@ }

if (escape) {
continue;
return;
}

@@ -512,3 +691,3 @@

} else if (str.charAt(dir.i - 1) === MULT_COMMENT_END.charAt(0) && dir.i - commentStart > 2) {
} else if (prev === MULT_COMMENT_END.charAt(0) && dir.i - commentStart > 2) {
if (comment === MULT_COMMENT_START) {

@@ -518,3 +697,3 @@ comment = false;

prevCommentSpace = false;
continue;
return;

@@ -530,3 +709,3 @@ } else if (beginStr) {

prevCommentSpace = false;
continue;
return;
}

@@ -536,3 +715,3 @@ }

if (comment) {
continue;
return;
}

@@ -542,4 +721,4 @@

if (i18nStart) {
if (!currentEscape && el === '"' && !lang) {
el = '\"';
if (!currentEscape && el === '"' && !dir.language) {
el = '\\"';
}

@@ -549,3 +728,3 @@

if (pseudoI !== false) {
continue;
return;
}

@@ -555,4 +734,4 @@

if (lang) {
continue;
if (dir.language) {
return;
}

@@ -586,3 +765,3 @@ }

continue;
return;
}

@@ -598,3 +777,3 @@

if (!command) {
continue;
return;
}

@@ -617,2 +796,10 @@

expr = '';
advExprPos = 0;
if (templateMap[commandType]) {
qOpen = 0;
qType = null;
}
// Директивы начинающиеся с _ считаются приватными

@@ -642,3 +829,3 @@ // и вырезаются из листинга

if (dir.brk) {
return false;
{$retPrim$0 = true;return false;}
}

@@ -682,5 +869,5 @@

command = '';
continue;
return;
} else if (i18n && !currentEscape && el === I18N) {
} else if (dir.localization && !currentEscape && el === I18N) {
if (i18nStart && i18nStr && words && !words[i18nStr]) {

@@ -690,5 +877,5 @@ words[i18nStr] = i18nStr;

if (lang) {
if (dir.language) {
if (i18nStart) {
var word = String(lang[i18nStr] || '');
var word = String(dir.language[i18nStr] || '');

@@ -734,3 +921,3 @@ el = begin ?

pseudoI = false;
continue;
return;
}

@@ -742,3 +929,3 @@

if (begin) {
el = (("" + (p.i18nFn)) + "(\"");
el = (("" + (dir.i18nFn)) + "(\"");

@@ -757,3 +944,3 @@ } else {

i18nDirStart = true;
continue;
return;
}

@@ -771,3 +958,3 @@ }

if (xml && tAttr && !tAttrBegin) {
if (dir.xml && tAttr && !tAttrBegin) {
prfx = '"';

@@ -784,8 +971,8 @@ tAttrBegin = true;

if (!bOpen) {
var skip$0 = false;
var skip = false;
if (el === FILTER && filterStartRgxp.test(str.charAt(dir.i + 1))) {
if (el === FILTER && filterStartRgxp.test(next)) {
filterStart = true;
bEnd = false;
skip$0 = true;
skip = true;

@@ -795,7 +982,7 @@ } else if (filterStart && whiteSpaceRgxp.test(el)) {

bEnd = true;
skip$0 = true;
skip = true;
}
if (!skip$0) {
if (escapeEndMap[el] || escapeEndWord[rPart]) {
if (!skip) {
if (escapeEndMap[el] || escapeEndWordMap[rPart]) {
bEnd = true;

@@ -840,3 +1027,3 @@ rPart = '';

if (el === ' ') {
continue;
return;
}

@@ -849,3 +1036,3 @@

if (source$0.error) {
return false;
{$retPrim$0 = true;return false;}
}

@@ -860,7 +1047,7 @@

continue;
return;
}
dir.error('text can\'t be used in the global space');
return false;
{$retPrim$0 = true;return false;}

@@ -871,7 +1058,7 @@ } else {

dir.space = false;
continue;
return;
}
dir.error((("directive \"text\" can't be used within the \"" + (struct.name)) + "\""));
return false;
{$retPrim$0 = true;return false;}
}

@@ -886,7 +1073,7 @@

if (xml) {
if (el === '<') {
if (dir.xml) {
if (el === '<' && !afterTag[next]) {
tOpen++;
} else if (el === '>') {
} else if (el === '>' && !beforeTag[prev]) {
if (tOpen) {

@@ -902,3 +1089,3 @@ tOpen--;

dir.error(("invalid XML declaration"));
return false;
{$retPrim$0 = true;return false;}
}

@@ -937,3 +1124,66 @@

dir.save(applyDefEscape(el));
if (dir.autoReplace) {
if (!tOpen || !tAttrBegin) {
if (comboMacro[el]) {
var val = dir.macros[el];
if (!qType) {
qType = el;
el = val[0][0];
qOpen++;
} else if (el === qType) {
qType = null;
el = val[0][1];
qOpen = 0;
} else {
el = (val[1] || val[0])[qOpen % 2 ? 0 : 1];
qOpen++;
}
el = el.call ? el() : el;
el = String(el);
} else {
if (whiteSpaceRgxp.test(el)) {
expr = '';
advExprPos = 0;
} else if (inlineMacro[el] && !inlineMacro[prev] && !dir.macros[expr + el]) {
exprPos = dir.res.length;
expr = el;
} else {
if (!expr) {
exprPos = dir.res.length;
}
expr += el;
}
}
}
if (dir.macros[expr]) {
var modStr = dir.res.substring(0, exprPos) +
dir.res.substring(exprPos + expr.length + advExprPos);
var val$0 = dir.macros[expr].call ? dir.macros[expr]() : dir.macros[expr];
val$0 = String(val$0);
advExprPos += val$0.length;
dir.mod(function() {
dir.res = modStr;
});
dir.save(val$0);
} else {
dir.save(applyDefEscape(el));
}
} else {
dir.save(applyDefEscape(el));
}
}

@@ -945,11 +1195,11 @@

if (!beginStr) {
if (jsDoc) {
jsDoc = false;
dir.space = true;
}
if (jsDoc && !beginStr) {
jsDoc = false;
dir.space = true;
}
}
}
})();if($retPrim$0===true){$retPrim$0=void 0;return $value$0}}
// Если есть не закрытый XML тег,
// то генерируем ошибку
if (tOpen) {

@@ -961,3 +1211,3 @@ dir.error(("invalid XML declaration"));

// Если количество открытых блоков не совпадает с количеством закрытых,
// то кидаем исключение
// то генерируем ошибку
if (begin || dir.structure.parent) {

@@ -972,2 +1222,3 @@ dir.error('missing closing or opening tag in the template');

// Обратная замена CDATA
dir.res = dir.pasteDangerBlocks(dir.res)

@@ -980,3 +1231,3 @@ .replace(

// Удаление пустых операций
dir.res = dir.res.replace(p.stringBuffer ?
dir.res = dir.res.replace(dir.stringBuffer ?
/__RESULT__\.push\(''\);/g : /__RESULT__ \+= '';/g,

@@ -986,11 +1237,20 @@

dir.res = (("/* Snakeskin v" + (Snakeskin.VERSION.join('.'))) + (", key <" + cacheKey) + (">, label <" + (label.valueOf())) + (">, generated at <" + (new Date().valueOf())) + ("> " + (new Date().toString())) + (". " + (dir.res)) + "");
dir.res += (("" + (cjs ? '}' : '')) + "}).call(this);");
var includes = '';
for (var key$3 in dir.preProtos) {
if (!dir.preProtos.hasOwnProperty(key$3)) {
if (dir.module.key.length) {
includes = JSON.stringify(dir.module.key);
}
dir.res = (("/* Snakeskin v" + (Snakeskin.VERSION.join('.'))) + (", key <" + cacheKey) + (">, label <" + (label.valueOf())) + (">, includes <" + includes) + (">, generated at <" + (new Date().valueOf())) + (">.\n " + (dir.res)) + "");
dir.res += (("" + (dir.commonJS ? '}' : '')) + "}).call(this);");
// Если остались внешние прототипы,
// которые не были подключены к своему шаблону,
// то генерируем ошибку
for (var key$4 in dir.preProtos) {
if (!dir.preProtos.hasOwnProperty(key$4)) {
continue;
}
dir.error((("template \"" + key$3) + "\" is not defined"));
dir.error((("template \"" + key$4) + "\" is not defined"));
return false;

@@ -1043,2 +1303,3 @@ }

// commonJS компиляция в браузере
} else if (ctx !== NULL) {

@@ -1062,10 +1323,11 @@ new Function(

// Живая компиляция в браузере
} else if (!cjs) {
} else if (!dir.commonJS) {
dir.evalStr(dir.res);
}
// Кеширование полученной функции
if (ctx !== NULL) {
ctx['init'](Snakeskin);
if (cacheKey) {
if (cacheKey && (p.cache || globalFnCache[cacheKey])) {
if (!globalFnCache[cacheKey]) {

@@ -1082,3 +1344,2 @@ globalFnCache[cacheKey] = {};

delete info['template'];
dir.error(err.message);

@@ -1088,3 +1349,4 @@ return false;

if (cacheKey) {
// Кеширование текста
if (cacheKey && (p.cache || globalCache[cacheKey])) {
if (!globalCache[cacheKey]) {

@@ -1101,9 +1363,14 @@ globalCache[cacheKey] = {};

if (!IS_NODE && !cjs) {
// Если брайзер поддерживает FileAPI,
// то подключаем скомпилированный шаблон как внешний скрипт
if (!IS_NODE && !dir.commonJS) {
setTimeout(function() {
try {
var blob = new Blob([dir.res], {type: 'application/javascript'});
var blob = new Blob([dir.res], {
type: 'application/javascript'
});
var script = document.createElement('script');
script.src = URL.createObjectURL(blob);
script.src = URL.createObjectURL(blob);
document.head.appendChild(script);

@@ -1110,0 +1377,0 @@

@@ -11,3 +11,3 @@ //#include ./es5shim.live.js

*/
VERSION: [4, 0, 21],
VERSION: [4, 1, 0],

@@ -14,0 +14,0 @@ /**

@@ -32,2 +32,5 @@ var aliasRgxp = /__(.*?)__/;

*
* @param {?boolean=} [params.selfInclude=true] - если false, то директива не может быть вложена
* в директиву схожего типа
*
* @param {Object=} [params.replacers] - таблица коротких сокращений директивы

@@ -111,2 +114,8 @@ * replacers: {

params.selfInclude = params.selfInclude !== false;
if (!params.selfInclude) {
params.block = true;
}
Snakeskin.Directions[name] = function (command, commandLength, type, jsDoc) {

@@ -161,2 +170,6 @@ var dir = this;

if (!params.selfInclude && dir.has(dirName)) {
return dir.error((("directive \"" + dirName) + ("\" can't be used within the \"" + dirName) + "\""));
}
if (params.text) {

@@ -310,2 +323,4 @@ dir.text = true;

//#include ./directions/tag.js
//#include ./directions/set.js
//#include ./directions/set.js
//#include ./directions/plain.js
//#include ./directions/compiler.js

@@ -26,19 +26,21 @@ var importMap = {

this.startInlineDir();
var key = (("" + obj) + ("_00_" + uid) + "");
if (this.module.id === 0) {
var key = (("" + obj) + ("_00_" + uid) + "");
this.save((("\
\n var " + key) + (" = __LOCAL__." + key) + (" = " + (this.prepareOutput(parts.slice(1).join('='), true))) + ";\
\n "));
this.save((("\
\n var " + key) + (" = __LOCAL__." + key) + (" = " + (this.prepareOutput(parts.slice(1).join('='), true))) + ";\
\n "));
var root = this.structure;
var root = this.structure;
while (root.name !== 'root') {
root = root.parent;
while (root.name !== 'root') {
root = root.parent;
}
root.vars[(("" + obj) + "_00")] = {
value: ("__LOCAL__." + key),
scope: 0
};
}
root.vars[(("" + obj) + "_00")] = {
value: ("__LOCAL__." + key),
scope: 0
};
}
);

@@ -5,3 +5,5 @@ Snakeskin.addDirective(

{
placement: 'template'
placement: 'template',
block: true,
selfInclude: false
},

@@ -13,2 +15,7 @@

if (this.autoReplace) {
this.autoReplace = false;
this.structure.params.autoReplace = true;
}
if (this.isReady()) {

@@ -47,4 +54,8 @@ if (command) {

function () {
if (this.structure.params.autoReplace) {
this.autoReplace = true;
}
this.append(this.wrap('\'"/>\''));
}
);

@@ -29,11 +29,15 @@ Snakeskin.addDirective(

id: this.module.id + 1,
key: null,
filename: command,
parent: this.module,
root: this.module.root || this.module,
parent: this.module,
children: [],
loaded: true
};
module.root.key.push([command, require('fs')['statSync'](command)['mtime'].valueOf()]);
this.module.children.push(module);
this.module = module;

@@ -40,0 +44,0 @@ this.info['file'] = command;

@@ -78,3 +78,3 @@ /**

// Идёт декларация внешнего прототипа
// Декларация внешнего прототипа
if (!tplName) {

@@ -215,3 +215,5 @@ if (this.structure.parent) {

escapeOutput: this.escapeOutput,
xml: this.xml
xml: this.xml,
autoReplace: this.autoReplace,
macros: this.macros
},

@@ -289,8 +291,8 @@

this.save(
this.returnProtoArgs(
proto.args,
this.getFnArgs((("(" + (ouptupCache[params.name])) + ")"))
) +
this.returnProtoArgs(
proto.args,
this.getFnArgs((("(" + (ouptupCache[params.name])) + ")"))
) +
proto.body
proto.body
);

@@ -297,0 +299,0 @@

@@ -6,3 +6,4 @@ Snakeskin.addDirective(

placement: 'template',
block: true
block: true,
selfInclude: false
},

@@ -14,2 +15,7 @@

if (this.autoReplace) {
this.autoReplace = false;
this.structure.params.autoReplace = true;
}
if (this.isReady()) {

@@ -52,4 +58,8 @@ if (command) {

function () {
if (this.structure.params.autoReplace) {
this.autoReplace = true;
}
this.append(this.wrap('\'</script>\''));
}
);

@@ -6,3 +6,4 @@ Snakeskin.addDirective(

placement: 'template',
block: true
block: true,
selfInclude: false
},

@@ -14,2 +15,7 @@

if (this.autoReplace) {
this.autoReplace = false;
this.structure.params.autoReplace = true;
}
if (this.isReady()) {

@@ -47,4 +53,8 @@ if (command) {

function () {
if (this.structure.params.autoReplace) {
this.autoReplace = true;
}
this.append(this.wrap('\'</style>\''));
}
);

@@ -304,5 +304,5 @@ /**

var parentTplName;
if (/\bextends\b/m.test(command)) {
if (/\)\s+extends\s+/m.test(command)) {
try {
parentTplName = /\s+extends\s+(.*)/m.exec(command)[1];
parentTplName = /\)\s+extends\s+(.*)/m.exec(command)[1];
this.parentTplName = parentTplName;

@@ -309,0 +309,0 @@

@@ -54,3 +54,3 @@ var sysEscapeMap = {};

var escapeEndWord = {
var escapeEndWordMap = {
'typeof': true,

@@ -57,0 +57,0 @@ 'void': true,

@@ -202,5 +202,6 @@ /**

* @param {?boolean=} [opt_wordOnly=false] - если false, то текст обрезается без учёта целостности слов
* @param {?boolean=} [opt_html=false] - если true, то символ многоточия вставляется как HTML-мнемоник
* @return {string}
*/
Snakeskin.Filters['truncate'] = function (str, length, opt_wordOnly) {
Snakeskin.Filters['truncate'] = function (str, length, opt_wordOnly, opt_html) {
str = String(str);

@@ -224,3 +225,3 @@ if (!str || str.length <= length) {

return (lastInd !== void 0 ? tmp.substring(0, lastInd) : tmp) + '…';
return (lastInd !== void 0 ? tmp.substring(0, lastInd) : tmp) + (opt_html ? '&#8230;' : '…');
};

@@ -299,2 +300,13 @@

return String(block) + String(part);
};
/**
* Задача значения по умолчанию для объекта
*
* @param {*} val - исходное значение
* @param {*} def - значение по умолчанию
* @return {*}
*/
Snakeskin.Filters['default'] = function (val, def) {
return val === void 0 ? def : val;
};

@@ -135,3 +135,3 @@ var blackWordMap = {

if (!bOpen) {
if (escapeEndMap[el] || escapeEndWord[rPart]) {
if (escapeEndMap[el] || escapeEndWordMap[rPart]) {
bEnd = true;

@@ -707,2 +707,6 @@

if (f.split(' ')[0] === 'default') {
unUndef = true;
}
} else {

@@ -847,3 +851,2 @@ if (f === '!html' && (!pCount || filterWrapper)) {

} catch (err) {
console.log(res);
this.error(err.message.replace(/.*?: (\w)/, function(sstr, $1) {return $1.toLowerCase()}));

@@ -850,0 +853,0 @@ return '';

{
"name": "snakeskin",
"version": "4.0.21",
"version": "4.1.0",
"main": "snakeskin.js",

@@ -5,0 +5,0 @@ "bin": {

@@ -18,2 +18,3 @@ # Snakeskin

* Поддержка локализации на уровне синтаксиса;
* Поддержка макросов и фильтров;
* Высокая скорость трансляции;

@@ -20,0 +21,0 @@ * Работа в браузерах (IE6+), а также на сервере (Node.js);

@@ -27,8 +27,6 @@ module.exports = exports = require('./build/snakeskin.min');

var label = fs.statSync(source).mtime,
code = fs.readFileSync(result).toString();
var code = fs.readFileSync(result).toString(),
label = /label <([\d]+)>/.exec(code);
var resLabel = /label <([\d]+)>/.exec(code);
if (!resLabel || opt_key === null) {
if (opt_key === null || !label || fs.statSync(source).mtime.valueOf() != label[1]) {
return false;

@@ -45,3 +43,26 @@ }

return label.valueOf() == resLabel[1];
var includes = /includes <(.*?)>/.exec(code);
if (!includes) {
return false;
}
if (includes[1]) {
includes = JSON.parse(includes[1]);
for (var i = 0; i < includes.length; i++) {
var el = includes[i];
if (exists(el[0])) {
if (fs.statSync(el[0]).mtime.valueOf() != el[1]) {
return false;
}
} else {
return false;
}
}
}
return true;
};

@@ -65,3 +86,3 @@

var cacheEnabled = p.cache !== false;
var cacheKey = this.compile(null, p, {cacheKey: true}),
var cacheKey = this.compile(null, p, null, {cacheKey: true}),
fromCache = cacheEnabled &&

@@ -123,3 +144,3 @@ cache[cacheKey] &&

if (cacheKey) {
if (cacheKey && (cacheEnabled || cache[cacheKey])) {
cache[cacheKey] = cache[cacheKey] || {};

@@ -126,0 +147,0 @@ cache[cacheKey][src] = {

@@ -9,4 +9,2 @@ var path = require('path');

var tpls = {};
global.i18n = function (str) {

@@ -16,4 +14,4 @@ return str;

snakeskin.compile(
fs.readFileSync(path.join(__dirname, 'test.ss')),
var tpls = snakeskin.compileFile(
path.join(__dirname, 'test.ss'),
{

@@ -105,8 +103,41 @@ context: tpls,

run({commonJS: true, prettyPrint: true, throws: true});
run({commonJS: true, prettyPrint: true, throws: true});
run({commonJS: true, prettyPrint: true, throws: true, inlineIterators: true});
run({commonJS: true, prettyPrint: true, throws: true, stringBuffer: true});
run({commonJS: true, prettyPrint: true, throws: true, stringBuffer: true, inlineIterators: true});
run({
commonJS: true,
prettyPrint: true,
throws: true,
autoReplace: true
});
run({
commonJS: true,
prettyPrint: true,
throws: true,
autoReplace: true
});
run({
commonJS: true,
prettyPrint: true,
throws: true,
autoReplace: true,
inlineIterators: true
});
run({
commonJS: true,
prettyPrint: true,
throws: true,
autoReplace: true,
stringBuffer: true
});
run({
commonJS: true,
prettyPrint: true,
throws: true,
autoReplace: true,
stringBuffer: true,
inlineIterators: true
});
fs.writeFileSync(path.join(__dirname, 'tests', 'tests.html'), tpls.test(asserts));

@@ -113,0 +144,0 @@

Sorry, the diff of this file is too big to display

Sorry, the diff of this file is too big to display

Sorry, the diff of this file is not supported yet

Sorry, the diff of this file is not supported yet

Sorry, the diff of this file is not supported yet

Sorry, the diff of this file is not supported yet

Sorry, the diff of this file is not supported yet

Sorry, the diff of this file is not supported yet

Sorry, the diff of this file is not supported yet

Sorry, the diff of this file is not supported yet

Sorry, the diff of this file is not supported yet

Sorry, the diff of this file is not supported yet

Sorry, the diff of this file is not supported yet

Sorry, the diff of this file is not supported yet

Sorry, the diff of this file is not supported yet

Sorry, the diff of this file is not supported yet

Sorry, the diff of this file is not supported yet

Sorry, the diff of this file is not supported yet

Sorry, the diff of this file is not supported yet

Sorry, the diff of this file is not supported yet

Sorry, the diff of this file is not supported yet

Sorry, the diff of this file is not supported yet

Sorry, the diff of this file is not supported yet

Sorry, the diff of this file is not supported yet

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