Socket
Socket
Sign inDemoInstall

trumpet

Package Overview
Dependencies
Maintainers
1
Versions
48
Alerts
File Explorer

Advanced tools

Socket logo

Install Socket

Detect and block malicious and high-risk dependencies

Install

trumpet - npm Package Compare versions

Comparing version 0.0.0 to 0.1.0

.travis.yml

4

example/select.js

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

var transit = require('../');
var tr = transit();
var trumpet = require('../');
var tr = trumpet();

@@ -4,0 +4,0 @@ tr.select('.b span', function (node) {

var sax = require('sax');
var select = require('./lib/select');
module.exports = function (fn) {
module.exports = function () {
var parser = sax.parser(false);

@@ -12,13 +12,2 @@ var stream = select(parser);

function makeNode (type, src, tag) {
return {
type : type,
source : src,
parser : parser,
write : write,
name : tag && tag.name,
attributes : tag && tag.attributes,
};
}
var buffered = '';

@@ -38,3 +27,2 @@ var pos = 0;

if (fn) fn(makeNode(type, src, tag))
stream.raw(src);

@@ -55,3 +43,3 @@ return src;

var s = buffered.slice(0, parser.position - pos);
if (fn) fn(makeNode('text', s));
stream.raw(s);
}

@@ -62,14 +50,17 @@ stream.emit('end');

parser.onopentag = function (tag) {
var src = update('open', tag);
stream.update('open', tag, src);
stream.pre('open', tag);
update('open', tag);
stream.post('open', tag);
};
parser.onclosetag = function (name) {
stream.update('close', name);
stream.pre('close', name);
update('close');
stream.post('close', name);
};
parser.ontext = function (text) {
var src = update('text');
stream.update('text', text, src);
stream.pre('text', text);
update('text');
stream.post('text', text);
};

@@ -76,0 +67,0 @@

@@ -16,6 +16,9 @@ var Stream = require('stream').Stream;

stream.update = function (name, t) {
var updating = false;
stream.pre = function (name, t) {
if (name === 'open') {
selectors.forEach(function (sel) {
sel(t, parser)
if (sel.removing) updating = true;
});

@@ -25,7 +28,14 @@ }

selectors.forEach(function (sel) {
var up = sel.updating;
sel.pending = sel.pending.filter(function (p) {
var done = p.level >= parser.tags.length;
if (done) p.callback(p.buffered);
var done = p.level > parser.tags.length;
if (done) p.callback.call(stream, p.buffered);
return !done;
});
if (up && !sel.updating) {
if (sel.removing) sel.removeOnPost = true;
else updating = false;
}
});

@@ -35,2 +45,20 @@ }

stream.post = function (name, t) {
if (name === 'open') {
selectors.forEach(function (sel) {
if (sel.updating) {
updating = true;
}
sel.pending.forEach(function (p) {
p.buffered = '';
});
});
}
else if (name == 'close') {
selectors.forEach(function (sel) {
if (sel.removeOnPost) updating = false;
});
}
};
stream.raw = function (s) {

@@ -42,2 +70,4 @@ selectors.forEach(function (sel) {

});
if (!updating) stream.emit('data', s);
};

@@ -94,2 +124,7 @@

var p = { level : tags.length };
var expired = false;
function expire () {
throw new Error('Parse expired. You had your chance.');
}
fn({

@@ -99,2 +134,4 @@ name : tag.name.toLowerCase(),

html : function (cb) {
if (expired) expire();
p.buffered = '';

@@ -104,3 +141,27 @@ p.callback = cb;

},
update : function (cb) {
if (expired) expire();
p.buffered = '';
p.callback = function (html) {
this.emit('data',
typeof cb === 'function' ? cb(html) : cb
);
sel.updating = false;
};
sel.updating = true;
sel.pending.push(p);
},
remove : function () {
if (expired) expire();
sel.updating = true;
sel.removing = true;
p.callback = function () {
sel.updating = false;
};
sel.pending.push(p);
},
});
expired = true;
};

@@ -107,0 +168,0 @@

{
"name" : "trumpet",
"version" : "0.0.0",
"version" : "0.1.0",
"description" : "parse and transform streaming html using css selectors",

@@ -5,0 +5,0 @@ "main" : "index.js",

var test = require('tap').test;
var transit = require('../');
var trumpet = require('../');
var fs = require('fs');

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

var tr = transit();
var tr = trumpet();
fs.createReadStream(__dirname + '/select.html').pipe(tr);

@@ -11,0 +11,0 @@

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