All Projects β†’ deepsweet β†’ Start

deepsweet / Start

Licence: mit
πŸ”΄ Functional task runner for Node.js

Programming Languages

typescript
32286 projects

Projects that are alternatives of or similar to Start

YACLib
Yet Another Concurrency Library
Stars: ✭ 193 (-59.62%)
Mutual labels:  promise, concurrency, parallelism
Foy
A simple, light-weight and modern task runner for general purpose.
Stars: ✭ 157 (-67.15%)
Mutual labels:  tasks, promise, runner
ProtoPromise
Robust and efficient library for management of asynchronous operations in C#/.Net.
Stars: ✭ 20 (-95.82%)
Mutual labels:  promise, concurrency, tasks
golang-101
🍺 In-depth internals, my personal notes, example codes and projects. Includes - Thousands of codes, OOP, Concurrency, Parallelism, Goroutines, Mutexes & Wait Groups, Testing in Go, Go tool chain, Backend web development, Some projects including Log file parser using bufio.Scanner, Spam Masker, Retro led clock, Console animations, Dictionary pro…
Stars: ✭ 61 (-87.24%)
Mutual labels:  concurrency, parallelism
conquerant
lightweight async/await for Clojure
Stars: ✭ 31 (-93.51%)
Mutual labels:  promise, concurrency
detox
distributed tox (tox plugin to run testenvs in parallel)
Stars: ✭ 48 (-89.96%)
Mutual labels:  concurrency, parallelism
Post Me
πŸ“© Use web Workers and other Windows through a simple Promise API
Stars: ✭ 398 (-16.74%)
Mutual labels:  promise, concurrency
wise-river
Object streaming the way it should be.
Stars: ✭ 33 (-93.1%)
Mutual labels:  promise, concurrency
vercors
The VerCors verification toolset for verifying parallel and concurrent software
Stars: ✭ 30 (-93.72%)
Mutual labels:  concurrency, parallelism
Promise Fun
Promise packages, patterns, chat, and tutorials
Stars: ✭ 3,779 (+690.59%)
Mutual labels:  promise, concurrency
Bild
Image processing algorithms in pure Go
Stars: ✭ 3,431 (+617.78%)
Mutual labels:  concurrency, parallelism
Concurrencpp
Modern concurrency for C++. Tasks, executors, timers and C++20 coroutines to rule them all
Stars: ✭ 340 (-28.87%)
Mutual labels:  tasks, concurrency
java-multithread
CΓ³digos feitos para o curso de Multithreading com Java, no canal RinaldoDev do YouTube.
Stars: ✭ 24 (-94.98%)
Mutual labels:  concurrency, parallelism
easy-promise-queue
An easy JavaScript Promise queue which is automatically executed, concurrency controlled and suspendable.
Stars: ✭ 31 (-93.51%)
Mutual labels:  promise, concurrency
async
Synchronization and asynchronous computation package for Go
Stars: ✭ 104 (-78.24%)
Mutual labels:  promise, concurrency
Async-Channel
Python async multi-task communication library. Used by OctoBot project.
Stars: ✭ 13 (-97.28%)
Mutual labels:  concurrency, parallelism
Throat
Throttle a collection of promise returning functions
Stars: ✭ 419 (-12.34%)
Mutual labels:  promise, concurrency
Svelto.tasks
Svelto Tasks - C# promises compliant multi-threaded tasks runner
Stars: ✭ 159 (-66.74%)
Mutual labels:  tasks, parallelism
p-ratelimit
Promise-based utility to make sure you don’t call rate-limited APIs too quickly.
Stars: ✭ 49 (-89.75%)
Mutual labels:  promise, concurrency
Concurrency Glossary
πŸ¦‘ Informal definitions of terms used in concurrency modeling
Stars: ✭ 276 (-42.26%)
Mutual labels:  concurrency, parallelism

start

⚠️ Project has been transferred to NexTools metarepo

linux windows coverage

logo
  • functional – in all senses
  • fast – parallelism and concurrency
  • shareable – presets as published packages
  • 4th line to align with logo on the right

TOC

Example

.
β”œβ”€β”€ packages/
β”‚   β”œβ”€β”€ foo/
β”‚   β”‚   β”œβ”€β”€ src/
β”‚   β”‚   β”‚   └── index.ts
β”‚   β”‚   β”œβ”€β”€ test/
β”‚   β”‚   β”‚   └── index.ts
β”‚   β”‚   └── package.json
β”‚   └── bar/
β”‚       β”œβ”€β”€ src/
β”‚       β”‚   └── index.ts
β”‚       β”œβ”€β”€ test/
β”‚       β”‚   └── index.ts
β”‚       └── package.json
β”œβ”€β”€ package.json
└── tasks.ts
$ yarn add --dev --ignore-workspace-root-check \
  @babel/core \
  @babel/register \
  @babel/preset-env \
  @babel/preset-typescript \
  @start/cli \
  @start/reporter-verbose \
  @start/plugin-sequence \
  @start/plugin-parallel \
  @start/plugin-xargs \
  @start/plugin-find \
  @start/plugin-find-git-staged \
  @start/plugin-remove \
  @start/plugin-read \
  @start/plugin-rename \
  @start/plugin-write \
  @start/plugin-lib-babel \
  @start/plugin-lib-typescript-generate \
  @start/plugin-lib-eslint \
  @start/plugin-lib-istanbul \
  @start/plugin-lib-tape \
  @start/plugin-lib-codecov
// package.json

{
  "private": true,
  "description": "Start example",
  "workspaces": [
    "packages/*"
  ],
  "devDependencies": {},
  "start": {
    // tasks file, default to `./tasks`
    "file": "./tasks"
    "require": [
      [
        "@babel/register",
        {
          "extensions": [
            ".ts",
            ".js"
          ]
        }
      ]
    ],
    "reporter": "@start/reporter-verbose"
  },
  "babel": {
    "presets": [
      [
        "@babel/preset-env",
        {
          "targets": {
            "node": "current"
          }
        }
      ],
      // Babel 7
      "@babel/preset-typescript"
    ]
  }
}
// tasks.ts

// write tasks file once, publish it and then reuse or even extend
// in all projects using `start.preset` option in `package.json`,
// something like `my-start-preset` package with everything included

import sequence from '@start/plugin-sequence'
import parallel from '@start/plugin-parallel'
import xargs from '@start/plugin-xargs'
import find from '@start/plugin-find'
import findGitStaged from '@start/plugin-find-git-staged'
import remove from '@start/plugin-remove'
import read from '@start/plugin-read'
import rename from '@start/plugin-rename'
import write from '@start/plugin-write'
import babel from '@start/plugin-lib-babel'
import typescriptGenerate from '@start/plugin-lib-typescript-generate'
import eslint from '@start/plugin-lib-eslint'
import {
  istanbulInstrument,
  istanbulReport,
  istanbulThresholds
} from '@start/plugin-lib-istanbul'
import tape from '@start/plugin-lib-tape'
import codecov from '@start/plugin-lib-codecov'

const babelConfig = {
  babelrc: false,
  presets: [
    [
      '@babel/preset-env',
      {
        targets: {
          node: 6
        },
        modules: false
      }
    ],
    '@babel/preset-typescript'
  ]
}

// each named export is a "task"
export const build = (packageName: string) =>
  sequence(
    find(`packages/${packageName}/src/**/*.ts`),
    read,
    babel(babelConfig),
    rename((file) => file.replace(/\.ts$/, '.js')),
    write(`packages/${packageName}/build/`)
  )

export const dts = (packageName: string) =>
  sequence(
    find(`packages/${packageName}/src/index.ts`),
    typescriptGenerate(`packages/${packageName}/build/`)
  )

export const pack = (packageName: string) =>
  sequence(
    find(`packages/${packageName}/build/`),
    remove,
    // child-processes
    parallel(['build', 'dts'])(packageName)
  )

// child processes
export const packs = xargs('pack')

export const dev = (packageName: string) =>
  watch(`packages/${packageName}/**/*.ts`)(
    build(packageName)
  )

export const lint = () =>
  sequence(
    findGitStaged(['packages/*/{src,test}/**/*.ts']),
    read,
    eslint()
  )

export const lintAll = () =>
  sequence(
    find(['packages/*/{src,test}/**/*.ts']),
    read,
    eslint()
  )

export const test = () =>
  sequence(
    find('coverage/'),
    remove,
    find('packages/*/src/**/*.ts'),
    istanbulInstrument({ esModules: true, extensions: ['.ts'] }),
    find('packages/*/test/**/*.ts'),
    tape(),
    istanbulReport(['lcovonly', 'html', 'text-summary']),
    istanbulThresholds({ functions: 100 })
  )

export const ci = () =>
  sequence(
    // nested task
    lintAll(),
    // nested task
    test(),
    find('coverage/lcov.info'),
    read,
    codecov
  )
$ yarn start
# or
$ npx start

One of the following task names is required:
* build
* dts
* pack
* packs
* dev
* lint
* lintAll
* test
* ci
$ yarn start build foo
$ yarn start dts foo
$ yarn start pack foo
$ yarn start packs foo bar
$ yarn start dev bar
$ yarn start lint
$ yarn start lintAll
$ yarn start test
$ yarn start ci

How to

Recipes

  • Node.js TypeScript library preset – @deepsweet/start-preset-node-ts-lib
  • Node.js TypeScript libraries monorepo – Start project builds itself from sources using sources, see tasks/index.ts
  • React / React Native (higher-order) components monorepo – hocs
  • React app – to be added

Packages

Core

  • ⬛️ cli – CLI entry point
  • βš™οΈ plugin – plugin creator
  • πŸ“ƒ reporter-verbose – verbose reporter

Plugins

Misc

  • ⏩ plugin-sequence – run plugins in sequence
  • πŸ”€ plugin-parallel – run tasks as parallel child processes with same agruments
  • πŸ”‚ plugin-xargs – run task as parallel child process for each argument
  • 🐣 plugin-spawn – spawn new child process
  • πŸ‘” plugin-env – set environment variable using process.env
  • πŸ”Œ plugin-input-files – inject arguments as files into Start flow files
  • πŸ”Œ plugin-output-files – to be added

FS

  • πŸ” plugin-find – find files using glob patterns
  • πŸ” plugin-find-git-staged – find Git staged files and filter them using glob patterns
  • πŸ“– plugin-read – read files content
  • πŸ”  plugin-rename – rename files
  • ❌ plugin-remove – remove files or directories
  • πŸ‘― plugin-copy – copy files to relative destination using streams and keeping folders structure
  • ✏️ plugin-write – write files with source maps to relative destination keeping folders structure
  • ✏️ plugin-overwrite – overwrite files
  • πŸ‘€ plugin-watch – watch for new or changed files matched by glob patterns
  • πŸ—œ plugin-unpack – unpack .tar/.tar.bz2/.tar.gz/.zip archives

Build and bundle

Tests

Lint, check and fix

CI and publish

Tasks

Coming soon.

Roadmap

  • [x] stabilize and publish 0.1.0 of everything
  • [x] documentation
  • [ ] more tests
  • [ ] migrate the rest of important plugins

Copyright

All the packages in this repository are released under the terms of the MIT License.

The font used in logo is supernova fat.

Note that the project description data, including the texts, logos, images, and/or trademarks, for each open source project belongs to its rightful owner. If you wish to add or remove any projects, please contact us at [email protected].