Bladeren bron

Added test files.

Eugene Lazutkin 5 jaren geleden
bovenliggende
commit
60b44bb768
2 gewijzigde bestanden met toevoegingen van 102 en 0 verwijderingen
  1. 27 0
      y.js
  2. 75 0
      z.js

+ 27 - 0
y.js

@@ -0,0 +1,27 @@
+
+const {PassThrough} = require('stream');
+
+const defs = require('./defs');
+const {make: makeStream} = require('./utils/Stream');
+
+// const s = makeStream(x => x * x);
+// const s = makeStream(async x => x * x);
+// const s = makeStream(function* (x) { for (let i = 0; i < x; ++i) yield i; });
+// const s = makeStream(async function* (x) { for (let i = 0; i < x; ++i) yield i; });
+
+// const s = makeStream(x => defs.none);
+// const s = makeStream(x => defs.finalValue(42));
+// const s = makeStream(x => defs.many(['a', x, 'b']));
+const s = makeStream(x => defs.stop);
+
+const h = new PassThrough({writableObjectMode: true, readableObjectMode: true});
+const p = h.pipe(s);
+
+p.on('data', data => console.log('DATA:', data));
+p.on('end', () => console.log('END'));
+
+h.write(1);
+h.write(2);
+h.write(3);
+h.write(4);
+h.end();

+ 75 - 0
z.js

@@ -0,0 +1,75 @@
+const {Writable, Transform} = require('stream');
+
+const makeStreamT = id => {
+  const stream = new Transform({
+    readableObjectMode: true,
+    writableObjectMode: true,
+    transform(chunk, encoding, callback) {
+      console.log(id + ':', 'transform', chunk, encoding);
+      const flag = this.push(chunk, encoding);
+      console.log(id + ':', 'transform-push', flag);
+      callback(null);
+    },
+    flush(callback) {
+      console.log(id + ':', 'flush');
+      callback(null);
+    }
+  });
+  stream._id = id;
+  stream.on('error', error => console.log(id + ':', 'event-error', error));
+  stream.on('end', () => console.log(id + ':', 'event-end'));
+  stream.on('finish', () => console.log(id + ':', 'event-finish'));
+  stream.on('close', () => console.log(id + ':', 'event-close'));
+  stream.on('pipe', src => console.log(id + ':', 'event-pipe', src._id));
+  stream.on('unpipe', src => console.log(id + ':', 'event-unpipe', src._id));
+  return stream;
+};
+
+const makeStreamW = id => {
+  const stream = new Writable({
+    objectMode: true,
+    write(chunk, encoding, callback) {
+      console.log(id + ':', 'write', chunk, encoding);
+      callback(null);
+    },
+    final(callback) {
+      console.log(id + ':', 'final');
+      callback(null);
+    },
+    destroy(error, callback) {
+      console.log(id + ':', 'destroy', error);
+      callback(null);
+    }
+  });
+  stream._id = id;
+  stream.on('error', error => console.log(id + ':', 'event-error', error));
+  stream.on('finish', () => console.log(id + ':', 'event-finish'));
+  stream.on('close', () => console.log(id + ':', 'event-close'));
+  stream.on('pipe', src => console.log(id + ':', 'event-pipe', src._id));
+  stream.on('unpipe', src => console.log(id + ':', 'event-unpipe', src._id));
+  return stream;
+};
+
+console.log('Creating streams ...');
+
+const a = makeStreamT('A'),
+  b = makeStreamT('B'),
+  c = makeStreamT('C'),
+  w = makeStreamW('W');
+
+console.log('Connecting streams ...');
+
+a.pipe(b).pipe(c).pipe(w);
+
+console.log('Passing a value ...');
+
+a.write({a: 1});
+// a.end();
+
+console.log('Destroying B ...');
+
+// a.destroy();
+a.unpipe(b);
+b.end();
+
+console.log('Done.');