Compare commits

..

No commits in common. "master" and "v1.2.1" have entirely different histories.

46 changed files with 470 additions and 8200 deletions

View File

@ -1,66 +0,0 @@
name: Default (not tags)
on:
push:
tags-ignore:
- '**'
env:
IMAGE: registry.gitlab.com/hosttoday/ht-docker-node:npmci
NPMCI_COMPUTED_REPOURL: https://${{gitea.repository_owner}}:${{secrets.GITEA_TOKEN}}@gitea.lossless.digital/${{gitea.repository}}.git
NPMCI_TOKEN_NPM: ${{secrets.NPMCI_TOKEN_NPM}}
NPMCI_TOKEN_NPM2: ${{secrets.NPMCI_TOKEN_NPM2}}
NPMCI_GIT_GITHUBTOKEN: ${{secrets.NPMCI_GIT_GITHUBTOKEN}}
NPMCI_URL_CLOUDLY: ${{secrets.NPMCI_URL_CLOUDLY}}
jobs:
security:
runs-on: ubuntu-latest
continue-on-error: true
container:
image: ${{ env.IMAGE }}
steps:
- uses: actions/checkout@v3
- name: Install pnpm and npmci
run: |
pnpm install -g pnpm
pnpm install -g @shipzone/npmci
- name: Run npm prepare
run: npmci npm prepare
- name: Audit production dependencies
run: |
npmci command npm config set registry https://registry.npmjs.org
npmci command pnpm audit --audit-level=high --prod
continue-on-error: true
- name: Audit development dependencies
run: |
npmci command npm config set registry https://registry.npmjs.org
npmci command pnpm audit --audit-level=high --dev
continue-on-error: true
test:
if: ${{ always() }}
needs: security
runs-on: ubuntu-latest
container:
image: ${{ env.IMAGE }}
steps:
- uses: actions/checkout@v3
- name: Test stable
run: |
npmci node install stable
npmci npm install
npmci npm test
- name: Test build
run: |
npmci node install stable
npmci npm install
npmci npm build

View File

@ -1,124 +0,0 @@
name: Default (tags)
on:
push:
tags:
- '*'
env:
IMAGE: registry.gitlab.com/hosttoday/ht-docker-node:npmci
NPMCI_COMPUTED_REPOURL: https://${{gitea.repository_owner}}:${{secrets.GITEA_TOKEN}}@gitea.lossless.digital/${{gitea.repository}}.git
NPMCI_TOKEN_NPM: ${{secrets.NPMCI_TOKEN_NPM}}
NPMCI_TOKEN_NPM2: ${{secrets.NPMCI_TOKEN_NPM2}}
NPMCI_GIT_GITHUBTOKEN: ${{secrets.NPMCI_GIT_GITHUBTOKEN}}
NPMCI_URL_CLOUDLY: ${{secrets.NPMCI_URL_CLOUDLY}}
jobs:
security:
runs-on: ubuntu-latest
continue-on-error: true
container:
image: ${{ env.IMAGE }}
steps:
- uses: actions/checkout@v3
- name: Prepare
run: |
pnpm install -g pnpm
pnpm install -g @shipzone/npmci
npmci npm prepare
- name: Audit production dependencies
run: |
npmci command npm config set registry https://registry.npmjs.org
npmci command pnpm audit --audit-level=high --prod
continue-on-error: true
- name: Audit development dependencies
run: |
npmci command npm config set registry https://registry.npmjs.org
npmci command pnpm audit --audit-level=high --dev
continue-on-error: true
test:
if: ${{ always() }}
needs: security
runs-on: ubuntu-latest
container:
image: ${{ env.IMAGE }}
steps:
- uses: actions/checkout@v3
- name: Prepare
run: |
pnpm install -g pnpm
pnpm install -g @shipzone/npmci
npmci npm prepare
- name: Test stable
run: |
npmci node install stable
npmci npm install
npmci npm test
- name: Test build
run: |
npmci node install stable
npmci npm install
npmci npm build
release:
needs: test
if: github.event_name == 'push' && startsWith(github.ref, 'refs/tags/')
runs-on: ubuntu-latest
container:
image: ${{ env.IMAGE }}
steps:
- uses: actions/checkout@v3
- name: Prepare
run: |
pnpm install -g pnpm
pnpm install -g @shipzone/npmci
npmci npm prepare
- name: Release
run: |
npmci node install stable
npmci npm publish
metadata:
needs: test
if: github.event_name == 'push' && startsWith(github.ref, 'refs/tags/')
runs-on: ubuntu-latest
container:
image: ${{ env.IMAGE }}
continue-on-error: true
steps:
- uses: actions/checkout@v3
- name: Prepare
run: |
pnpm install -g pnpm
pnpm install -g @shipzone/npmci
npmci npm prepare
- name: Code quality
run: |
npmci command npm install -g typescript
npmci npm install
- name: Trigger
run: npmci trigger
- name: Build docs and upload artifacts
run: |
npmci node install stable
npmci npm install
pnpm install -g @git.zone/tsdoc
npmci command tsdoc
continue-on-error: true

25
.gitignore vendored
View File

@ -1,20 +1,11 @@
.nogit/
# artifacts
coverage/
public/
pages/
# installs
node_modules/ node_modules/
.settings/
.idea/
coverage/
docs/
# caches ts/*.js
.yarn/ ts/*.js.map
.cache/ ts/typings/
.rpt2_cache test/result/
# builds
dist/
dist_*/
# custom

View File

@ -1,5 +1,3 @@
ts/ ts/
test/ test/
docs/
coverage/
node_modules/ node_modules/

14
.travis.yml Normal file
View File

@ -0,0 +1,14 @@
language: node_js
node_js:
- 4.2.4
deploy:
provider: npm
email: npm@lossless.digital
api_key:
secure: TWN/oiICeNbAhGTbwf75FnKhXnIvyA66FhNF7C0jpjn2SChSgTANai87r0f9oU9ZP3307XdGHB+fTTCJnk3upNiBoWZnkV8skkAlseOY4mVzF9mS0ZEkxVR32FjJDWfqzv6hC+Y9qNDsGs2+Avsm6fQUOispLXYAk6VzSQC1HgIfyOJtIWT5LqEyXyT6oJIZ7xwt1CYcIeEpHUiAaPYsMEpwF5OBDFByVmNV38VdRGIBsoQd3lixso7/zOOgYvjR4b/onz5WzeWYlhzAuyzOnRGr1r/9eXAzzkYydvgFx3ix5OlrreKVFB6OtMpz4jmHdu9YDGT5bcvL2bSU2SGVQM5Bx8zZXkAxACQR8ZvWmPaWYAWCu9wrW5oovjqFUV0iR26z/sTABJqz4GaXf/vFcll2EdTfUT6xj2kCodfxljaudjPUF27FSt1UJBC7jQky08wHb6+onrE8WoQXteIE2oxtHWEGOlV/GAz0+q4ih0bdOSKfThmux0iEFmeF16sWH9UdL2jBBKuus+fBPdhA3V6uwYQtsCAurhquQLISkf7kT3KujdLS302bEbkut+D1Kd22IYA1J0wYd87th88TZHx7wgQyC+8lVHG+B1R20xGLxyHVEOfyZtChfBRdn53EcUiA2XriJbfiIym4dAMUtOg2iRJamHAL7jebQEUu7oA=
on:
tags: true
repo: pushrocks/gulp-function
notifications:
slack:
secure: Bb8P3fboL52CugSsp0RhOkGCeWVbgjb+QDpnMHdSOa0Nequj8V4kvrzBLZOBOjaSB0/gMvdoB4Slv2bls1dAxXW1IX1DdRb3RLMKj/Owje7eTd4IoUuSs49y6/yEkVK+E1wicdwjlMmvsk8fQE/owDRMRXYoXxhN2ZOVSQvAQ3iBO0eokFvWO7yj/VSxKoITymCXA3LfyzXXUuhvxuQd3BPZCe25xa6GWuHtaa5fbJg17pp8jJX6VZYLSRcSYyJxMU8SLdkrOsQZKj0+/Yfpu7XTmPbqxjNapuE7Zm70mi+aB26IQCnmwkdcEQNJVxQOKoP2+/ZnDfcTLQROwH1PJVzol0hneH6DdOlWt9bvBJcUvFRwaDgIb5xXQV8bGsRe5ayE/4MgCgfvdBTvevu6n12fmPx74prIv4pOPMwlALjjP8XavGL4A6amOuV7fJiSyGAku8aUe1rlUXyfoHJswMyOfkIsvnGDE3eEfq1WUIjn8tW1ZozJyoCTAIh6IHPI3Nsg3LkTRvDHPYq25/xCKWxGb2OaJc3JeqVREqm0auDqj6HoVAi/mW/uyvwX9jEVX8fNoQ69ac5VUMFfn2Mx3sU6aHKgZe/tdrtql6NYtIA+g5/ZDnHE1mnbl6MfrYiKwRbrICH5v/u1xK+4+yh09BUqazi3PzOhyTRfba/gRUg=

11
.vscode/launch.json vendored
View File

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

26
.vscode/settings.json vendored
View File

@ -1,26 +0,0 @@
{
"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,6 +1,6 @@
The MIT License (MIT) The MIT License (MIT)
Copyright (c) 2015 Lossless GmbH Copyright (c) 2015 Push.Rocks
Permission is hereby granted, free of charge, to any person obtaining a copy Permission is hereby granted, free of charge, to any person obtaining a copy
of this software and associated documentation files (the "Software"), to deal of this software and associated documentation files (the "Software"), to deal

51
README.md Normal file
View File

@ -0,0 +1,51 @@
# gulp-function
accepts call to execute in gulp pipeline.
### Status
[![Build Status](https://travis-ci.org/pushrocks/gulp-function.svg?branch=v0.0.2)](https://travis-ci.org/pushrocks/gulp-function)
[![Dependency Status](https://david-dm.org/pushrocks/gulp-function.svg)](https://david-dm.org/pushrocks/gulp-function)
[![bitHound Dependencies](https://www.bithound.io/github/pushrocks/gulp-function/badges/dependencies.svg)](https://www.bithound.io/github/pushrocks/gulp-function/master/dependencies/npm)
[![bitHound Code](https://www.bithound.io/github/pushrocks/gulp-function/badges/code.svg)](https://www.bithound.io/github/pushrocks/gulp-function)
[![codecov.io](https://codecov.io/github/pushrocks/gulp-function/coverage.svg?branch=master)](https://codecov.io/github/pushrocks/gulp-function?branch=master)
### Version
[![GitHub version](https://badge.fury.io/gh/pushrocks%2Fgulp-function.svg)](https://badge.fury.io/gh/pushrocks%2Fgulp-function)
[![npm version](https://badge.fury.io/js/gulp-function.svg)](https://badge.fury.io/js/gulp-function)
### Usage
```javascript
var gulp = require("gulp");
var gulpFunction = require("gulp-function");
var Q = require("q");
var myFunction = function () {
var done = Q.defer();
console.log("Hello World!")
// NOTE:
// you can use done.resolve as callback function
// of any async tasks within this function
done.resolve();
return done.promise;
}
gulp.task('gulpTest',function() {
var stream = gulp.src('./mydir/*.something')
.pipe(gulpFunction(myFunction,'forEach')) //read the notes below
.pipe(gulp.dest("./build/"));
return stream; // by returning the stream gulp knows when our task has finished.
});
```
### Notes:
* The first argument of gulpFunction can also be an **array of multiple functionnames**.
Each function can return a promise. the pipe stop will finish when every promise is fullfilled.
* the second argument can be empty, it defaults to "forEach"
* the following options are available:
* "forFirst" - executes when first chunk/vinylfile of the stream reaches the pipestop.
file is pushed further down the line when function's returned promise is fullfilled.
* "atEnd" - executes like "forFirst" but with every chunk/vinylfile in the stream;
* "atLast" - executes after all chunks have passed and are processed in full.
That means the stream's "finish" event fires before "atLast" is executed!!!

6
dist/gulpfunction.plugins.js vendored Normal file
View File

@ -0,0 +1,6 @@
/// <reference path="typings/main.d.ts" />
"use strict";
exports.Q = require("q");
exports.through2 = require("through2");
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbImd1bHBmdW5jdGlvbi5wbHVnaW5zLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLDBDQUEwQzs7QUFFL0IsU0FBQyxHQUFHLE9BQU8sQ0FBQyxHQUFHLENBQUMsQ0FBQztBQUNqQixnQkFBUSxHQUFHLE9BQU8sQ0FBQyxVQUFVLENBQUMsQ0FBQyIsImZpbGUiOiJndWxwZnVuY3Rpb24ucGx1Z2lucy5qcyIsInNvdXJjZXNDb250ZW50IjpbIi8vLyA8cmVmZXJlbmNlIHBhdGg9XCJ0eXBpbmdzL21haW4uZC50c1wiIC8+XG5cbmV4cG9ydCBsZXQgUSA9IHJlcXVpcmUoXCJxXCIpO1xuZXhwb3J0IGxldCB0aHJvdWdoMiA9IHJlcXVpcmUoXCJ0aHJvdWdoMlwiKTtcbiJdLCJzb3VyY2VSb290IjoiL3NvdXJjZS8ifQ==

64
dist/index.js vendored Normal file

File diff suppressed because one or more lines are too long

View File

@ -1,34 +0,0 @@
{
"npmts": {
"mode": "default"
},
"npmci": {
"npmGlobalTools": [],
"npmAccessLevel": "public"
},
"gitzone": {
"projectType": "npm",
"module": {
"githost": "code.foss.global",
"gitscope": "push.rocks",
"gitrepo": "gulp-function",
"description": "A Gulp plugin to execute functions within a Gulp task pipeline.",
"npmPackagename": "@push.rocks/gulp-function",
"license": "MIT",
"keywords": [
"gulp",
"plugin",
"task automation",
"stream manipulation",
"async function execution",
"pipeline",
"build tool",
"JavaScript",
"TypeScript"
]
}
},
"tsdoc": {
"legal": "\n## License and Legal Information\n\nThis repository contains open-source code that is licensed under the MIT License. A copy of the MIT License can be found in the [license](license) file within this repository. \n\n**Please note:** The MIT License does not grant permission to use the trade names, trademarks, service marks, or product names of the project, except as required for reasonable and customary use in describing the origin of the work and reproducing the content of the NOTICE file.\n\n### Trademarks\n\nThis project is owned and maintained by Task Venture Capital GmbH. The names and logos associated with Task Venture Capital GmbH and any related products or services are trademarks of Task Venture Capital GmbH and are not included within the scope of the MIT license granted herein. Use of these trademarks must comply with Task Venture Capital GmbH's Trademark Guidelines, and any usage must be approved in writing by Task Venture Capital GmbH.\n\n### Company Information\n\nTask Venture Capital GmbH \nRegistered at District court Bremen HRB 35230 HB, Germany\n\nFor any legal inquiries or if you require further information, please contact us via email at hello@task.vc.\n\nBy using this repository, you acknowledge that you have read this section, agree to comply with its terms, and understand that the licensing of the code does not imply endorsement by Task Venture Capital GmbH of any derivative works.\n"
}
}

4
npmts.json Normal file
View File

@ -0,0 +1,4 @@
{
"mode":"default",
"coveralls":true
}

View File

@ -1,63 +1,36 @@
{ {
"name": "@push.rocks/gulp-function", "name": "gulp-function",
"private": false, "version": "1.2.1",
"version": "3.0.7", "description": "accepts a function call as parameter to execute in gulp pipeline",
"description": "A Gulp plugin to execute functions within a Gulp task pipeline.", "main": "dist/index.js",
"main": "dist_ts/index.js",
"typings": "dist_ts/index.d.ts",
"scripts": { "scripts": {
"test": "(tstest test/)", "test": "(npmts)",
"build": "(tsbuild --allowimplicitany)", "reinstall": "(rm -r node_modules && npm install)",
"buildDocs": "tsdoc" "release": "(git pull origin master && npm version patch && git push origin master && git checkout release && git merge master && git push origin release && git checkout master)",
"startdev": "(git checkout master && git pull origin master)"
}, },
"repository": { "repository": {
"type": "git", "type": "git",
"url": "https://code.foss.global/push.rocks/gulp-function.git" "url": "https://github.com/pushrocks/gulp-function.git"
}, },
"keywords": [ "keywords": [
"gulpplugin",
"gulp", "gulp",
"plugin", "function"
"task automation",
"stream manipulation",
"async function execution",
"pipeline",
"build tool",
"JavaScript",
"TypeScript"
], ],
"author": "Lossless GmbH <office@lossless.com> (https://lossless.com)", "author": "Lossless GmbH <office@lossless.com> (https://lossless.com)",
"license": "MIT", "license": "MIT",
"bugs": { "bugs": {
"url": "https://gitlab.com/push.rocks/gulp-function/issues" "url": "https://github.com/pushrocks/gulp-function/issues"
}, },
"homepage": "https://code.foss.global/push.rocks/gulp-function", "homepage": "https://github.com/pushrocks/gulp-function",
"dependencies": { "dependencies": {
"@push.rocks/smartpromise": "^4.0.3", "beautylog": "^3.1.2",
"@types/through2": "^2.0.32", "q": "^1.4.1",
"through2": "^3.0.1" "through2": "^2.0.1"
}, },
"devDependencies": { "devDependencies": {
"@git.zone/tsbuild": "^2.1.17", "gulp": "^3.9.1",
"@git.zone/tsrun": "^1.2.46", "npmts": "^4.0.2"
"@git.zone/tstest": "^1.0.28", }
"@push.rocks/smartgulp": "^3.0.3", }
"@push.rocks/tapbundle": "^5.0.15",
"gulp": "^4.0.2"
},
"files": [
"ts/**/*",
"ts_web/**/*",
"dist/**/*",
"dist_*/**/*",
"dist_ts/**/*",
"dist_ts_web/**/*",
"assets/**/*",
"cli.js",
"npmextra.json",
"readme.md"
],
"type": "module",
"browserslist": [
"last 1 chrome versions"
]
}

7617
pnpm-lock.yaml generated

File diff suppressed because it is too large Load Diff

View File

@ -1 +0,0 @@

106
readme.md
View File

@ -1,106 +0,0 @@
# @push.rocks/gulp-function
[@push.rocks/gulp-function](https://www.npmjs.com/package/@push.rocks/gulp-function) is a Gulp plugin designed to execute custom functions within a Gulp pipeline. It accepts a function call as a parameter and allows for flexible task executions, including asynchronous tasks, with easy integration into the Gulp workflow.
## Install
To use @push.rocks/gulp-function in your project, you'll first need to install it via npm. You can do this by running the following command in your project's root directory:
```bash
npm install @push.rocks/gulp-function --save-dev
```
This command will add `@push.rocks/gulp-function` as a development dependency to your project, making it available for use in your Gulp tasks.
## Usage
The primary use case for `@push.rocks/gulp-function` is to incorporate custom function executions into your Gulp pipelines. This can be particularly useful for tasks that require conditional processing, external API calls, or any other logic that extends beyond the capabilities of existing Gulp plugins.
Here's how you can use `@push.rocks/gulp-function` within your Gulp setup:
### Basic Example
Let's start with a simple scenario where you want to log the path of files processed by Gulp.
```typescript
import gulp from 'gulp';
import gulpFunction, { forEach } from '@push.rocks/gulp-function';
const logFilePath = async (file: Buffer, enc: string) => {
console.log(`Processing file: ${file.path}`);
};
gulp.task('log', () => {
return gulp.src('./src/**/*.ts')
.pipe(forEach(logFilePath))
.pipe(gulp.dest('./dist'));
});
```
In this example, we're using the `forEach` method exported by `@push.rocks/gulp-function` to execute `logFilePath` for each file matched by `gulp.src`. The file's path is logged to the console during the build process.
### Advanced Use Case: Asynchronous Function Execution
`@push.rocks/gulp-function` truly shines when you need to perform asynchronous operations within your Gulp tasks. Here's an example that demonstrates making an asynchronous API call for each file:
```typescript
import gulp from 'gulp';
import gulpFunction, { forEach } from '@push.rocks/gulp-function';
import axios from 'axios';
const uploadFileToServer = async (file: Buffer, enc: string) => {
const formData = new FormData();
formData.append('file', file.contents, file.relative);
await axios.post('https://example.com/upload', formData, {
headers: {
'Content-Type': 'multipart/form-data'
}
});
console.log(`Uploaded file: ${file.path}`);
};
gulp.task('uploadFiles', () => {
return gulp.src('./uploads/**/*')
.pipe(forEach(uploadFileToServer))
.pipe(gulp.dest('./dist/uploads'));
});
```
In this more advanced example, we use the `forEach` method to upload each file to a remote server using `axios`. The function `uploadFileToServer` is executed for each file, where an HTTP POST request is made to upload the file. This shows how you can integrate asynchronous operations seamlessly into your Gulp pipeline.
### Execution Modes
`@push.rocks/gulp-function` supports three execution modes for your functions: `forEach`, `forFirst`, and `atEnd`.
- **forEach**: Executes the provided function for each file in the stream.
- **forFirst**: Executes the provided function only for the first file that passes through the stream.
- **atEnd**: Executes the provided function once after all files have passed through the stream.
These modes provide flexibility in determining when your custom functions should be triggered during the build process.
### Conclusion
`@push.rocks/gulp-function` is a powerful tool for integrating custom processing logic into Gulp workflows. Whether you need to execute simple synchronous tasks or complex asynchronous operations, `@push.rocks/gulp-function` offers the flexibility and ease of use to enhance your Gulp builds significantly.
Remember, the examples provided are starting points. The real power of `@push.rocks/gulp-function` lies in its ability to adapt to your specific use cases, enabling you to automate and streamline your build processes as never before.
## License and Legal Information
This repository contains open-source code that is licensed under the MIT License. A copy of the MIT License can be found in the [license](license) file within this repository.
**Please note:** The MIT License does not grant permission to use the trade names, trademarks, service marks, or product names of the project, except as required for reasonable and customary use in describing the origin of the work and reproducing the content of the NOTICE file.
### Trademarks
This project is owned and maintained by Task Venture Capital GmbH. The names and logos associated with Task Venture Capital GmbH and any related products or services are trademarks of Task Venture Capital GmbH and are not included within the scope of the MIT license granted herein. Use of these trademarks must comply with Task Venture Capital GmbH's Trademark Guidelines, and any usage must be approved in writing by Task Venture Capital GmbH.
### Company Information
Task Venture Capital GmbH
Registered at District court Bremen HRB 35230 HB, Germany
For any legal inquiries or if you require further information, please contact us via email at hello@task.vc.
By using this repository, you acknowledge that you have read this section, agree to comply with its terms, and understand that the licensing of the code does not imply endorsement by Task Venture Capital GmbH of any derivative works.

102
test/test.js Normal file

File diff suppressed because one or more lines are too long

1
test/test.js.map Normal file
View File

@ -0,0 +1 @@
{"version":3,"file":"test.js","sourceRoot":"","sources":["test.ts"],"names":[],"mappings":"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"}

View File

@ -1,35 +1,118 @@
import { expect, tap } from '@push.rocks/tapbundle'; /// <reference path="../ts/typings/main.d.ts" />
var gulp = require("gulp");
var gulpFunction = require("../dist/index.js");
var beautylog = require("beautylog");
var Q = require("q");
import * as smartgulp from '@push.rocks/smartgulp'; var myFunction = function () {
import gulp from 'gulp'; var done = Q.defer()
import * as gulpFunction from '../ts/index.js'; beautylog.log("Function executed");
done.resolve();
return done.promise;
};
var myFunction2 = function () {
var done = Q.defer();
beautylog.ok("Function2 executed");
done.resolve();
return done.promise;
};
var myFunction3 = function () {
var done = Q.defer();
beautylog.success("Function3 executed");
done.resolve();
return done.promise;
};
import * as smartpromise from '@push.rocks/smartpromise'; var beforeFunction = function () {
var done = Q.defer();
beautylog.success("beforeFunction executed");
done.resolve();
return done.promise;
};
tap.test('should run through smoothly with ' + "'forEach'", async tools => { var middleFunctionRun = false;
let done = smartpromise.defer();
let counter = 0; var middleFunction = function () {
gulp.src('./test/testfiles/*.md').pipe( var done = Q.defer();
gulpFunction.forEach(async () => { beautylog.success("middleFunction executed");
counter++; setTimeout(function(){
if (counter === 2) { beautylog.log("timeout fired");
middleFunctionRun = true;
done.resolve(); done.resolve();
} }, 500);
}) return done.promise;
); };
await done.promise;
var afterFunction = function () {
var done = Q.defer();
beautylog.success("afterFunction executed");
done.resolve();
return done.promise;
};
let timeoutFunction = function(){
var done = Q.defer();
setTimeout(function(){
beautylog.log("largeTimeout fired");
done.resolve();
},2000);
return done.promise;
};
describe("gulpFunction",function(){
it("should run through smoothly with " + "'forEach'".blue,function(done){
gulp.src('./test/*.md')
.pipe(gulpFunction(myFunction,'forEach'))
.pipe(gulp.dest("./test/result/"));
gulp.src('./test/*.md')
.pipe(gulpFunction([myFunction2,myFunction3],'forEach'))
.pipe(gulp.dest("./test/result/"))
.pipe(gulpFunction(done,"atEnd"));
});
it("should run through smoothly with " + "'atEnd'".blue,function(done){
gulp.src('./test/*.md')
.pipe(gulpFunction(myFunction,'atEnd'))
.pipe(gulp.dest("./test/result/"));
gulp.src('./test/*.md')
.pipe(gulpFunction([myFunction2,myFunction3],'atEnd'))
.pipe(gulp.dest("./test/result/"))
.pipe(gulpFunction(done,"atEnd"));
});
it("should run through smoothly once with " + "'atFirst'".blue,function(done){
gulp.src('./test/*.md')
.pipe(gulpFunction([myFunction2,myFunction3],'forFirst'))
.pipe(gulp.dest("./test/result/"))
.pipe(gulpFunction(done,"atEnd"));
});
it("should run in order",function(done){
this.timeout(5000);
let stream = gulp.src('./test/*.md')
.pipe(gulpFunction([beforeFunction,middleFunction,middleFunction],'atEnd'))
.pipe(gulpFunction(function(){
beautylog.log("stream progressed");
var done2 = Q.defer();
done2.resolve();
return done2.promise;
},"forEach"))
.pipe(gulpFunction(function(){
beautylog.log("nextStep");
}))
.pipe(gulpFunction(afterFunction,"atEnd"))
.pipe(gulpFunction(timeoutFunction,"atEnd"));
stream.on("finish",function(){
beautylog.info("stream finished");
done();
});
});
}); });
tap.test('should run through smoothly with ' + "'forEach'", async tools => {
let done = smartpromise.defer();
let counter = 0;
smartgulp.src(['./test/testfiles/*.md']).pipe(
gulpFunction.atEnd(async () => {
console.log('atEnd');
done.resolve();
})
);
await done.promise;
});
tap.start();

2
test/test01.md Normal file
View File

@ -0,0 +1,2 @@
# Test.md
This is a test file for the test.js gulp pipeline

2
test/test02.md Normal file
View File

@ -0,0 +1,2 @@
# Test.md
This is another test file for the test.js gulp pipeline

View File

@ -1 +0,0 @@
# the 1st testfile

View File

@ -1 +0,0 @@
# the second testfile

View File

@ -1 +0,0 @@
# the third testfile

View File

@ -1 +0,0 @@
# the fourth testfile

View File

@ -1 +0,0 @@
# the fifth testfile

View File

@ -1 +0,0 @@
# the sixth testfile

View File

@ -1 +0,0 @@
# the seventh testfile

View File

@ -1 +0,0 @@
# the eighth testfile

View File

@ -1 +0,0 @@
# the nineth testfile

View File

@ -1 +0,0 @@
# the tenth testfile

View File

@ -1 +0,0 @@
# the eleventh testfile

View File

@ -1 +0,0 @@
# the twelveth testfile

View File

@ -1 +0,0 @@
# the second testfile

View File

@ -1 +0,0 @@
# the second testfile

View File

@ -1 +0,0 @@
# the second testfile

View File

@ -1 +0,0 @@
# the second testfile

View File

@ -1 +0,0 @@
# the second testfile

View File

@ -1 +0,0 @@
# the 18th testfile

View File

@ -1,8 +0,0 @@
/**
* autocreated commitinfo by @pushrocks/commitinfo
*/
export const commitinfo = {
name: '@push.rocks/gulp-function',
version: '3.0.7',
description: 'accepts a function call as parameter to execute in gulp pipeline'
}

View File

@ -0,0 +1,4 @@
/// <reference path="typings/main.d.ts" />
export let Q = require("q");
export let through2 = require("through2");

View File

@ -1,87 +1,65 @@
import * as smartpromise from '@push.rocks/smartpromise'; /// <reference path="typings/main.d.ts" />
import * as through2 from 'through2';
import { Transform } from 'stream';
export type TExecutionMode = 'forEach' | 'forFirst' | 'atEnd'; import plugins = require("./gulpfunction.plugins");
export interface IPromiseFunction {
(file?, enc?): PromiseLike<any>;
}
let defaultExport = (
functionsToExecuteArg: IPromiseFunction | IPromiseFunction[],
executionModeArg: TExecutionMode = 'forEach'
): Transform => {
let promiseArray = [];
let runFunction = function(functionArg, file, enc) {
let returnValue = functionArg(file, enc);
if (typeof returnValue !== 'undefined' && typeof returnValue.then !== 'undefined') {
promiseArray.push(returnValue);
}
};
let checkAndRunFunction = function(file, enc) {
if (typeof functionsToExecuteArg === 'function') {
runFunction(functionsToExecuteArg, file, enc);
} else if (Array.isArray(functionsToExecuteArg)) {
for (let anyFunction in functionsToExecuteArg) {
runFunction(functionsToExecuteArg[anyFunction], file, enc);
}
} else {
throw new Error('gulp-callfunction: something is strange with the given arguments');
}
return Promise.all(promiseArray);
};
let hasExecutedOnce = false; module.exports = function (functionsToExecuteArg:any|any[],executionModeArg:string = 'forEach') {
let forEach = function(file, enc, cb) { //important vars
// the forEach function is called for every chunk let executionMode = executionModeArg; //can be forEach or atEnd
switch (executionModeArg) { let functionsToExecute = functionsToExecuteArg;
case 'forEach': let promiseArray = [];
checkAndRunFunction(file, enc).then(function() { let runFunction = function(functionArg){
cb(null, file); let returnValue = functionArg();
}); if (typeof returnValue !== "undefined" && typeof returnValue.then !== "undefined") {
break; promiseArray.push(returnValue);
case 'forFirst':
if (hasExecutedOnce) {
checkAndRunFunction(file, enc).then(function() {
cb(null, file);
});
} else {
cb(null, file);
} }
hasExecutedOnce = true; };
break;
case 'atEnd':
cb();
break;
default:
break;
}
};
let atEnd = function(cb) { let checkAndRunFunction = function () {
if (executionModeArg === 'atEnd') { if (typeof functionsToExecute === "function" ) {
checkAndRunFunction(null, null).then(function() { runFunction(functionsToExecute);
cb(); } else if (Array.isArray(functionsToExecute)) {
}); for (let anyFunction in functionsToExecute) {
} else { runFunction(functionsToExecute[anyFunction]);
cb(); }
} } else {
}; throw new Error("gulp-callfunction: something is strange with the given arguments");
return through2.obj(forEach, atEnd); }
return plugins.Q.all(promiseArray);
};
let hasExecutedOnce = false;
let forEach = function (file, enc, cb) { //the forEach function is called for every chunk
switch (executionMode){
case "forEach":
checkAndRunFunction().then(function(){
cb(null, file);
});
break;
case "forFirst":
!hasExecutedOnce ? checkAndRunFunction().then(function(){
cb(null, file);
}) : cb(null, file);
hasExecutedOnce = true;
break;
case "atEnd":
cb(null, file);
break;
default:
break;
}
};
let atEnd = function(cb) {
if (executionMode === "atEnd") {
checkAndRunFunction().then(function(){
cb();
});
} else {
cb();
}
};
return plugins.through2.obj(forEach,atEnd);
}; };
export let forEach = (funcArg: IPromiseFunction) => {
return defaultExport(funcArg, 'forEach');
};
export let forFirst = (funcArg: IPromiseFunction) => {
return defaultExport(funcArg, 'forFirst');
};
export let atEnd = (funcArg: IPromiseFunction) => {
return defaultExport(funcArg, 'atEnd');
};
export default defaultExport;

15
ts/tsd.json Normal file
View File

@ -0,0 +1,15 @@
{
"version": "v4",
"repo": "borisyankov/DefinitelyTyped",
"ref": "master",
"path": "typings",
"bundle": "typings/tsd.d.ts",
"installed": {
"node/node.d.ts": {
"commit": "efa0c1196d7280640e624ac1e7fa604502e7bd63"
},
"colors/colors.d.ts": {
"commit": "3191f6e0088eee07c4d8fd24e4d27a40a60d9eb9"
}
}
}

7
ts/typings.json Normal file
View File

@ -0,0 +1,7 @@
{
"ambientDependencies": {
"node": "github:DefinitelyTyped/DefinitelyTyped/node/node.d.ts",
"mocha": "github:Bartvds/tsd-deftools/typings/DefinitelyTyped/mocha/mocha.d.ts",
"colors": "github:DefinitelyTyped/DefinitelyTyped/colors/colors.d.ts"
}
}

View File

@ -1,14 +0,0 @@
{
"compilerOptions": {
"experimentalDecorators": true,
"useDefineForClassFields": false,
"target": "ES2022",
"module": "NodeNext",
"moduleResolution": "NodeNext",
"esModuleInterop": true,
"verbatimModuleSyntax": true
},
"exclude": [
"dist_*/**/*.d.ts"
]
}