Compare commits

..

28 Commits

Author SHA1 Message Date
af30268551 2.0.0 2022-03-31 01:20:01 +02:00
e562e8f099 BREAKING CHANGE(core): switch to esm 2022-03-31 01:20:01 +02:00
01f4a53b5b 1.0.14 2019-02-20 23:18:21 +01:00
f42b77986f fix(structure): cleanup 2019-02-20 23:18:20 +01:00
b7ef295757 1.0.13 2019-02-20 00:40:32 +01:00
2818420ee9 fix(docs): update 2019-02-20 00:40:31 +01:00
d759e2a562 1.0.12 2019-02-19 01:10:56 +01:00
65a97c9ee0 fix(core): update 2019-02-19 01:10:56 +01:00
b036bfcb92 1.0.11 2017-07-07 02:46:22 +02:00
c0304d1d10 update README 2017-07-07 02:46:20 +02:00
26880f9b71 1.0.10 2017-06-30 18:37:51 +02:00
aa7c30a096 update ci 2017-06-30 18:37:48 +02:00
083673f02c 1.0.9 2017-06-30 18:32:34 +02:00
93bcc03e72 update smartstream 2017-06-30 18:32:32 +02:00
f8b79710be 1.0.8 2017-03-04 14:26:10 +01:00
addf20995a fix cleanPipe() 2017-03-04 14:26:10 +01:00
5401e5e008 1.0.7 2017-03-04 13:53:21 +01:00
144295f7c0 update ci 2017-03-04 13:53:18 +01:00
1e0557b722 1.0.6 2017-03-04 13:50:15 +01:00
9b67507acd add cleanPipe() 2017-03-04 13:50:12 +01:00
c7b3f2a228 1.0.5 2016-09-25 19:41:15 +02:00
084a47096d switch to done.reject for error handling 2016-09-25 19:41:12 +02:00
224b39f0a6 1.0.4 2016-09-25 16:28:45 +02:00
b24b564495 improved README 2016-09-25 16:28:42 +02:00
aabfb2721d 1.0.3 2016-09-25 16:10:11 +02:00
c28e2cb8e0 now allows the handling of custom events and run returns promise 2016-09-25 16:10:06 +02:00
aaece166c0 1.0.2 2016-09-25 14:01:55 +02:00
6380998fcf fix filename for gitlab ci 2016-09-25 14:01:50 +02:00
19 changed files with 18527 additions and 159 deletions

20
.gitignore vendored
View File

@ -1,4 +1,20 @@
node_modules/ .nogit/
# artifacts
coverage/
public/ public/
pages/ pages/
coverage/
# installs
node_modules/
# caches
.yarn/
.cache/
.rpt2_cache
# builds
dist/
dist_*/
# custom

140
.gitlab-ci.yml Normal file
View File

@ -0,0 +1,140 @@
# gitzone ci_default
image: registry.gitlab.com/hosttoday/ht-docker-node:npmci
cache:
paths:
- .npmci_cache/
key: '$CI_BUILD_STAGE'
stages:
- security
- test
- release
- metadata
before_script:
- npm install -g @shipzone/npmci
# ====================
# security stage
# ====================
mirror:
stage: security
script:
- npmci git mirror
only:
- tags
tags:
- lossless
- docker
- notpriv
auditProductionDependencies:
image: registry.gitlab.com/hosttoday/ht-docker-node:npmci
stage: security
script:
- npmci npm prepare
- npmci command npm install --production --ignore-scripts
- npmci command npm config set registry https://registry.npmjs.org
- npmci command npm audit --audit-level=high --only=prod --production
tags:
- docker
allow_failure: true
auditDevDependencies:
image: registry.gitlab.com/hosttoday/ht-docker-node:npmci
stage: security
script:
- npmci npm prepare
- npmci command npm install --ignore-scripts
- npmci command npm config set registry https://registry.npmjs.org
- npmci command npm audit --audit-level=high --only=dev
tags:
- docker
allow_failure: true
# ====================
# test stage
# ====================
testStable:
stage: test
script:
- npmci npm prepare
- npmci node install stable
- npmci npm install
- npmci npm test
coverage: /\d+.?\d+?\%\s*coverage/
tags:
- docker
testBuild:
stage: test
script:
- npmci npm prepare
- npmci node install stable
- npmci npm install
- npmci command npm run build
coverage: /\d+.?\d+?\%\s*coverage/
tags:
- docker
release:
stage: release
script:
- npmci node install stable
- npmci npm publish
only:
- tags
tags:
- lossless
- docker
- notpriv
# ====================
# metadata stage
# ====================
codequality:
stage: metadata
allow_failure: true
only:
- tags
script:
- npmci command npm install -g typescript
- npmci npm prepare
- npmci npm install
tags:
- lossless
- docker
- priv
trigger:
stage: metadata
script:
- npmci trigger
only:
- tags
tags:
- lossless
- docker
- notpriv
pages:
stage: metadata
script:
- npmci node install lts
- npmci command npm install -g @gitzone/tsdoc
- npmci npm prepare
- npmci npm install
- npmci command tsdoc
tags:
- lossless
- docker
- notpriv
only:
- tags
artifacts:
expire_in: 1 week
paths:
- public
allow_failure: true

11
.vscode/launch.json vendored Normal file
View File

@ -0,0 +1,11 @@
{
"version": "0.2.0",
"configurations": [
{
"command": "npm test",
"name": "Run npm test",
"request": "launch",
"type": "node-terminal"
}
]
}

26
.vscode/settings.json vendored Normal file
View File

@ -0,0 +1,26 @@
{
"json.schemas": [
{
"fileMatch": ["/npmextra.json"],
"schema": {
"type": "object",
"properties": {
"npmci": {
"type": "object",
"description": "settings for npmci"
},
"gitzone": {
"type": "object",
"description": "settings for gitzone",
"properties": {
"projectType": {
"type": "string",
"enum": ["website", "element", "service", "npm", "wcc"]
}
}
}
}
}
}
]
}

View File

@ -1,9 +0,0 @@
# smartstream
simplifies access to node streams, TypeScript ready!
## Status
[![build status](https://gitlab.com/pushrocks/smartstream/badges/master/build.svg)](https://gitlab.com/pushrocks/smartstream/commits/master)
## Usage
We recommend the use of TypeScript for best in class intellisense support.

10
dist/index.d.ts vendored
View File

@ -1,10 +0,0 @@
export interface IErrorFunction {
(err: any): number;
}
export declare class Smartstream {
streamArray: any[];
errorFunction: IErrorFunction;
constructor(streamArrayArg: any[]);
onError(errorFunctionArg: IErrorFunction): void;
run(): any;
}

21
dist/index.js vendored
View File

@ -1,21 +0,0 @@
"use strict";
const plugins = require("./smartstream.plugins");
class Smartstream {
constructor(streamArrayArg) {
this.streamArray = [];
this.errorFunction = null;
this.streamArray = streamArrayArg;
}
onError(errorFunctionArg) {
this.errorFunction = errorFunctionArg;
}
run() {
let combinedStream = plugins.streamCombiner2.obj(this.streamArray);
if (this.errorFunction !== null) {
combinedStream.on('error', this.errorFunction);
}
return combinedStream;
}
}
exports.Smartstream = Smartstream;
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi90cy9pbmRleC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiO0FBQUEsaURBQWdEO0FBTWhEO0lBR0ksWUFBWSxjQUFxQjtRQUZqQyxnQkFBVyxHQUFHLEVBQUUsQ0FBQTtRQUNoQixrQkFBYSxHQUFtQixJQUFJLENBQUE7UUFFaEMsSUFBSSxDQUFDLFdBQVcsR0FBRyxjQUFjLENBQUE7SUFDckMsQ0FBQztJQUNELE9BQU8sQ0FBQyxnQkFBZ0M7UUFDcEMsSUFBSSxDQUFDLGFBQWEsR0FBRyxnQkFBZ0IsQ0FBQTtJQUN6QyxDQUFDO0lBQ0QsR0FBRztRQUNDLElBQUksY0FBYyxHQUFHLE9BQU8sQ0FBQyxlQUFlLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxXQUFXLENBQUMsQ0FBQTtRQUNsRSxFQUFFLENBQUMsQ0FBQyxJQUFJLENBQUMsYUFBYSxLQUFLLElBQUksQ0FBQyxDQUFDLENBQUM7WUFDOUIsY0FBYyxDQUFDLEVBQUUsQ0FBQyxPQUFPLEVBQUUsSUFBSSxDQUFDLGFBQWEsQ0FBQyxDQUFBO1FBQ2xELENBQUM7UUFDRCxNQUFNLENBQUMsY0FBYyxDQUFBO0lBQ3pCLENBQUM7Q0FDSjtBQWhCRCxrQ0FnQkMifQ==

View File

@ -1,3 +0,0 @@
import 'typings-global';
export import q = require('q');
export declare let streamCombiner2: any;

View File

@ -1,5 +0,0 @@
"use strict";
require("typings-global");
exports.q = require("q");
exports.streamCombiner2 = require('stream-combiner2');
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic21hcnRzdHJlYW0ucGx1Z2lucy5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uL3RzL3NtYXJ0c3RyZWFtLnBsdWdpbnMudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IjtBQUFBLDBCQUF1QjtBQUN2Qix5QkFBOEI7QUFDbkIsUUFBQSxlQUFlLEdBQUcsT0FBTyxDQUFDLGtCQUFrQixDQUFDLENBQUEifQ==

View File

@ -1,42 +0,0 @@
image: hosttoday/ht-docker-node:npmts
stages:
- test
- release
- page
testLEGACY:
stage: test
script:
- npmci test legacy
tags:
- docker
testLTS:
stage: test
script:
- npmci test lts
tags:
- docker
testSTABLE:
stage: test
script:
- npmci test stable
tags:
- docker
release:
stage: release
script:
- npmci publish
only:
- tags
tags:
- docker
pages:
image: hosttoday/ht-docker-node:npmpage
stage: page
script:
- npmci command npmpage --host gitlab
only:
- tags
artifacts:
expire_in: 1 week
paths:
- public

View File

@ -1 +1,17 @@
{} {
"npmci": {
"npmGlobalTools": [],
"npmAccessLevel": "public"
},
"gitzone": {
"projectType": "npm",
"module": {
"githost": "gitlab.com",
"gitscope": "pushrocks",
"gitrepo": "smartstream",
"description": "simplifies access to node streams",
"npmPackagename": "@pushrocks/smartstream",
"license": "MIT"
}
}
}

18159
package-lock.json generated Normal file

File diff suppressed because it is too large Load Diff

View File

@ -1,11 +1,14 @@
{ {
"name": "smartstream", "name": "@pushrocks/smartstream",
"version": "1.0.1", "version": "2.0.0",
"description": "simplifies access to node streams, TypeScript ready!", "private": false,
"main": "dist/index.js", "description": "simplifies access to node streams",
"typings": "dist/index.d.ts", "main": "dist_ts/index.js",
"typings": "dist_ts/index.d.ts",
"type": "module",
"scripts": { "scripts": {
"test": "(npmts)" "test": "(tstest test/)",
"build": "(tsbuild)"
}, },
"repository": { "repository": {
"type": "git", "type": "git",
@ -18,15 +21,30 @@
}, },
"homepage": "https://gitlab.com/pushrocks/smartstream#README", "homepage": "https://gitlab.com/pushrocks/smartstream#README",
"devDependencies": { "devDependencies": {
"@types/should": "^8.1.30", "@gitzone/tsbuild": "^2.1.61",
"npmts-g": "^5.2.8", "@gitzone/tstest": "^1.0.70",
"should": "^11.1.0", "@pushrocks/tapbundle": "^5.0.3",
"typings-test": "^1.0.3" "tslint": "^6.1.3",
"tslint-config-prettier": "^1.18.0"
}, },
"dependencies": { "dependencies": {
"@types/q": "0.x.x", "@pushrocks/smartpromise": "^3.1.7",
"q": "^1.4.1", "@types/through2": "^2.0.36",
"stream-combiner2": "^1.1.1", "through2": "^4.0.2"
"typings-global": "^1.0.14" },
} "browserslist": [
"last 1 chrome versions"
],
"files": [
"ts/**/*",
"ts_web/**/*",
"dist/**/*",
"dist_*/**/*",
"dist_ts/**/*",
"dist_ts_web/**/*",
"assets/**/*",
"cli.js",
"npmextra.json",
"readme.md"
]
} }

1
test/test.d.ts vendored
View File

@ -1 +0,0 @@
import 'typings-test';

View File

@ -1,15 +0,0 @@
"use strict";
require("typings-test");
const fs = require("fs");
const smartstream = require("../dist/index");
let testSmartstream;
describe('smartstream', function () {
it('should combine a stream', function () {
testSmartstream = new smartstream.Smartstream([
fs.createReadStream('./test/assets/test.md'),
fs.createWriteStream('./test/assets/testCopy.md')
]);
testSmartstream.run();
});
});
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidGVzdC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbInRlc3QudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IjtBQUFBLHdCQUFxQjtBQUNyQix5QkFBeUI7QUFHekIsNkNBQTRDO0FBRTVDLElBQUksZUFBd0MsQ0FBQTtBQUU1QyxRQUFRLENBQUMsYUFBYSxFQUFFO0lBQ3BCLEVBQUUsQ0FBQyx5QkFBeUIsRUFBRTtRQUMxQixlQUFlLEdBQUcsSUFBSSxXQUFXLENBQUMsV0FBVyxDQUFDO1lBQzFDLEVBQUUsQ0FBQyxnQkFBZ0IsQ0FBQyx1QkFBdUIsQ0FBQztZQUM1QyxFQUFFLENBQUMsaUJBQWlCLENBQUMsMkJBQTJCLENBQUM7U0FDcEQsQ0FBQyxDQUFBO1FBQ0YsZUFBZSxDQUFDLEdBQUcsRUFBRSxDQUFBO0lBQ3pCLENBQUMsQ0FBQyxDQUFBO0FBQ04sQ0FBQyxDQUFDLENBQUEifQ==

View File

@ -1,17 +1,15 @@
import 'typings-test' import fs from 'fs';
import fs = require('fs') import { expect, tap } from '@pushrocks/tapbundle';
import * as should from 'should'
import * as smartstream from '../dist/index' import * as smartstream from '../ts/index.js';
let testSmartstream: smartstream.Smartstream let testSmartstream: smartstream.Smartstream;
tap.test('should combine a stream', async () => {
describe('smartstream', function() {
it('should combine a stream', function(){
testSmartstream = new smartstream.Smartstream([ testSmartstream = new smartstream.Smartstream([
fs.createReadStream('./test/assets/test.md'), fs.createReadStream('./test/assets/test.md'),
fs.createWriteStream('./test/assets/testCopy.md') fs.createWriteStream('./test/assets/testCopy.md'),
]) ]);
testSmartstream.run() await testSmartstream.run();
}) });
})
tap.start();

View File

@ -1,23 +1,107 @@
import * as plugins from './smartstream.plugins' import * as plugins from './smartstream.plugins.js';
// interfaces
import { Transform } from 'stream';
export interface IErrorFunction { export interface IErrorFunction {
(err): number (err: Error): any;
} }
export interface ICustomEventFunction {
(): any;
}
export interface ICustomEventObject {
eventName: string;
eventFunction: ICustomEventFunction;
}
/**
* class Smartstream handles
*/
export class Smartstream { export class Smartstream {
streamArray = [] private streamArray: Array<plugins.stream.Duplex> = [];
errorFunction: IErrorFunction = null private customEventObjectArray: ICustomEventObject[] = [];
private streamStartedDeferred = plugins.smartpromise.defer();
/**
* constructor
*/
constructor(streamArrayArg: any[]) { constructor(streamArrayArg: any[]) {
this.streamArray = streamArrayArg this.streamArray = streamArrayArg;
} }
onError(errorFunctionArg: IErrorFunction) {
this.errorFunction = errorFunctionArg /**
* make something with the stream itself
*/
streamStarted(): Promise<any> {
return this.streamStartedDeferred.promise;
} }
run() {
let combinedStream = plugins.streamCombiner2.obj(this.streamArray) /**
if (this.errorFunction !== null) { * attach listener to custom event
combinedStream.on('error', this.errorFunction) */
onCustomEvent(eventNameArg: string, eventFunctionArg: ICustomEventFunction) {
this.customEventObjectArray.push({
eventName: eventNameArg,
eventFunction: eventFunctionArg,
});
} }
return combinedStream
/**
* run the stream
* @returns Promise
*/
run(): Promise<void> {
const done = plugins.smartpromise.defer<void>();
// clone Array
const streamExecutionArray: Array<plugins.stream.Duplex> = [];
for (const streamItem of this.streamArray) {
streamExecutionArray.push(streamItem);
}
// combine the stream
let finalStream = null;
let firstIteration: boolean = true;
for (const stream of streamExecutionArray) {
if (firstIteration === true) {
finalStream = stream;
}
stream.on('error', (err) => {
done.reject(err);
});
for (const customEventObject of this.customEventObjectArray) {
stream.on(customEventObject.eventName, customEventObject.eventFunction);
}
if (!firstIteration) {
finalStream = finalStream.pipe(stream);
}
firstIteration = false;
}
this.streamStartedDeferred.resolve();
finalStream.on('end', () => {
done.resolve();
});
finalStream.on('close', () => {
done.resolve();
});
finalStream.on('finish', () => {
done.resolve();
});
return done.promise;
} }
} }
export let cleanPipe = () => {
return plugins.through2.obj(
(file, enc, cb) => {
cb();
},
(cb) => {
cb();
}
);
};

View File

@ -1,3 +1,12 @@
import 'typings-global' import * as stream from 'stream';
export import q = require('q')
export let streamCombiner2 = require('stream-combiner2') export { stream };
// pushrocks scope
import * as smartpromise from '@pushrocks/smartpromise';
export { smartpromise };
// thirdparty
import * as through2 from 'through2';
export { through2 };

View File

@ -1,3 +0,0 @@
{
"extends": "tslint-config-standard"
}