:red_circle: Functional task runner for Node.js

Overview

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

Plugins

Misc

FS

Build and bundle

Tests

Lint, check and fix

CI and publish

Tasks

Coming soon.

Roadmap

  • stabilize and publish 0.1.0 of everything
  • 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.

Comments
  • next

    next

    Hey. I'm about to introduce next major version relatively soon, with simplified tasks API and better API for tasks runner itself. Some details from future migration.md:

    Start

    Repositories

    Start became a monorepo.

    Pros:

    • much easier to maintain
    • no start-start-preset
    • no babel-preset-start

    Cons:

    • ???

    Runner

    import Runner from 'start';
    import Reporter from 'start-pretty-reporter';
    
    const runner = Runner(Reporter());
    
    export const build = () => runner(
      // ...
    );
    

    With this naming our core concept became much more clear: there are tasks and tasks runners. You have to wrap tasks with runner.

    "External" input

    runner itself is another function in which you can pass an "initial" input:

    runner(...tasks)('input!')
      .then(console.log)
      .catch(console.error);
    

    So no more start-input-connector:

    export const tasksRunner1 = () => runner(
      function task2(input) {
        console.log('input from previous runner': input);
    
        return Promise.resolve();
      },
    );
    
    export const tasksRunner2 = () => runner(
      function task1() {
        return Promise.resolve('output');
      },
      tasksRunner1()
    );
    

    And start-watch became really beautiful:

    export const dev = runner(
      clean('lib/'),
      watch('src/**/*.js')(
        runner(
          read(),
          babel(),
          write('lib/')
        )
      )
    );
    

    Tasks

    Refactoring

    Tasks were slightly simplified:

    export default (options) => function myTask(input, log, reporter) {
      console.log('input:', input);
      log('hey from My Task!');
      console.log('original reporter:', reporter);
    
      return Promise.resolve('My Task output');
    }
    

    So in the simplest case task is just a single named function which should return a Promise.

    Reporters

    Default reporter

    console.log is no more a default reporter for Runner.

    Refactoring

    Reporters were splitted into composed functions:

    export default (name) => (type, message) => console.log(name, type, message);
    

    @effervescentia @tunnckoCore @laggingreflex @nikolay @eisisig I was thinking about scoped packages like @start/runner, @start/clean and so on. But unfortunately start username is already taken on NPM. So I wrote to the author – radio silence, wrote to NPM support – they can't help even with abandoned empty accounts...

    Rename the whole project? Or leave it as is with start- naming convention? I'm ok with both, but I need your opinion.

    import Runner from '@please/runner';
    import Reporter from '@please/reporter';
    
    yarn please build
    yarn please test
    

    🤔

    Pros:

    • we can start (damn) everything from scratch with 0.1.0 versions for every package
    • more searchable name? with pleasejs/please as a main repo

    Cons:

    • you have to rename and republish your tasks and presets as well – a lot of work (or not?)

    What do you think about please? The major changes described above will be implemented regardless this naming issue.

    opened by deepsweet 31
  • Error on Custom Plugin

    Error on Custom Plugin

    I've created a decompress plugin for start and get this error:

    yarn start testsomething
    yarn run v1.5.1
    $ node packages/cli/src/index.js testsomething
    /home/luii/Dokumente/git/start/packages/reporter-verbose/src/index.ts:1
    ReferenceError: _70d‍ is not defined
        at Object.<anonymous> (/home/luii/Dokumente/git/start/packages/reporter-verbose/src/index.ts:1)
        at Module._compile (/home/luii/Dokumente/git/start/node_modules/pirates/lib/index.js:91:24)
    error An unexpected error occurred: "Command failed.
    Exit code: 1
    Command: sh
    Arguments: -c node packages/cli/src/index.js testsomething
    Directory: /home/luii/Dokumente/git/start
    Output:
    ".
    info If you think this is a bug, please open a bug report with the information provided in "/home/luii/Dokumente/git/start/yarn-error.log".
    info Visit https://yarnpkg.com/en/docs/cli/run for documentation about this command.
    

    This is my plugin:

    import plugin from '@start/plugin/src/'
    import { DecompressOptions } from 'decompress';
    
    export default (outDirRelative: string, options?: DecompressOptions) =>
      plugin('decompress', async ({ files, logFile }) => {
        const path = await import('path')
        const { default: decompress } = await import('decompress')
        const { default: movePath } = await import('move-path')
        
        return Promise.all(
          files.map(async file => {
            try {
              const outFile = movePath(file.path, outDirRelative)
              const outDir = path.dirname(outFile)
    
              logFile(outDir)
      
              await decompress(file.path, outDir, options)
              return await { path: outDir, data: null, map: null }
            } catch (error) {
              console.error(error)
            }
          })
        )
      })
    

    And this is in the tasks/index.ts:

    export const testsomething = () => 
      sequence(
        find('packages/plugin-decompress/test/fixtures/file.tar'),
        decompress('tasks/')
      )
    
    opened by luii 18
  • Run tasks in parrallel

    Run tasks in parrallel

    Hello Kir, As I tried, we can not do something like this:

    function test() {
        return start(
           [ loadNames('./names.txt'), loadNames('./names2.txt')] , //They should run in parrallel
            hello('Hello'),
            logName()
        );
    }
    

    It's nice if you can make it possible.

    enhancement 
    opened by hoanguyen311 11
  • Passing arguments to each task

    Passing arguments to each task

    Hi, start is great. Looking on it almost one year. And finally consider to plug it in my flow. It would be the core of my day to day flow.

    But I'm thinking for this that I may need in some cases to pass specific things to each task. For example glob patterns for the start-files task.

    Something like

    start dev 'lib/**/*.js'
    start dev '**/*.js'
    

    But I believe it won't be need only for that task. So I think the start CLIs should pass rest argument after the task name to that task. And because each task is just a function which returns start(task1, task2, task3) it can be passed to it.

    export const dev = (args) => start(
      env('NODE_ENV', 'development'),
      files('build/'),
      clean(),
      files(args[0]),
      watch((file) => start(
        files(file),
        read(),
        babel(),
        write('build/')
      ))
    )
    

    So in advance in that task could be done some arguments parsing, with minimist for example.

    I need all this, because I don't want to transpile specific directory, or all of my js files in the root project - the test.js file for example. In most cases I have one simple index.js file and one test.js file in the root of the repository/project/package. But in some cases I may need to transpile more than that index.js. So I want in my preset to set index.js path as default, but to be able to change it through the cli if I need.

    enhancement 
    opened by tunnckoCore 10
  • Start default job when cli executed without any arguments

    Start default job when cli executed without any arguments

    Just like gulp 4.x do.

    I think it's a good idea, because yarn start default looks really weird.

    BTW, I discovered start three days ago, then I tried it as soon as I can. It's really cool! I have already used it in my own project!

    enhancement 
    opened by bolasblack 9
  • More generic examples needed

    More generic examples needed

    Hey! I was looking for Gulp alternatives and the pitch for this one is good, it looks very usable as far the API goes. It's currently very JS-centric though, so it would be great to have an example of how I would use this for more general build tasks (with Stylus or Sass to get CSS, Pug or Markdown to get HTML files).

    Are this kind of examples planned?

    enhancement question 
    opened by luminarious 8
  • add `module` and `jsnext:main` to all tasks

    add `module` and `jsnext:main` to all tasks

    For more robust loading and bundling.

    edit: I mean, adding module and jsnext:main fields in the package.json file.

    and a bit off-topic: tests are very big need. I don't think simple tests like this are enough. :) See start-rollup tests for real example of 100% coverage :)

    enhancement 
    opened by tunnckoCore 7
  • Wrong plugin type?

    Wrong plugin type?

    I was going through the plugin types file and I was wondering: shouldn't the return type of the default export be StartPlugin or StartPluginAsync instead of StartPluginSync?

    Since the default export is an async function expression, it will implicitly use a Promise to return its result.

    question typescript 
    opened by simonedavico 6
  • Pipe additional data

    Pipe additional data

    @deepsweet wonder what's your opinion on letting the user pass some extra input to the plugins?

    Currently we're limited to files as input, but I have a case where i would like to measure some file sizes as first step and pass those sizes to another plugin further in the sequence. The sequence looks something like this [measureFileSizesBeforeBuild, cleanDist, copyAssets, build, printFileSizesAfterBuild], where printFileSizesAfterBuild needs sizes from measureFileSizesBeforeBuild to output difference. I thought it would be easiest to just return additional prop resolve({ files, sizes }) and pass that trough the chain.

    To make it work i guess a tiny change would be required in https://github.com/deepsweet/start/blob/d8a323ac62e551d738b837be59e8ab0d94f95440/packages/plugin/src/index.ts#L29

    { reporter, files, ...additionalProps } and then spreading additionalProps in payload to pluginFn()

    opened by fmal 6
  • Basic plugins need

    Basic plugins need

    https://github.com/start-runner/postcss please add basic plugin for frontend as like postcss, sass, stylus I will be grateful for the plugin for rollup-buddler Your project is not very popular due to lack of documentation. But I really like the idea. Very convenient api

    enhancement docs 
    opened by TryHardNinja 6
  • Unable to find

    Unable to find "tasks.js" file, please check it again

    The tasks file in the docs uses ES6 syntax (import/export), which start-cli is not able to parse natively by default which makes it gives a slightly misleading error: Unable to find "tasks.js" file, please check it again

    It should give a more faithful error, like "unable to parse" or something. The docs probably should also use ES5 syntax?

    Awesome project btw, just found it and trying it out.

    bug 
    opened by laggingreflex 2
  • Bump lodash from 4.17.11 to 4.17.15

    Bump lodash from 4.17.11 to 4.17.15

    Bumps lodash from 4.17.11 to 4.17.15.

    Commits

    Dependabot compatibility score

    Dependabot will resolve any conflicts with this PR as long as you don't alter it yourself. You can also trigger a rebase manually by commenting @dependabot rebase.


    Dependabot commands and options

    You can trigger Dependabot actions by commenting on this PR:

    • @dependabot rebase will rebase this PR
    • @dependabot recreate will recreate this PR, overwriting any edits that have been made to it
    • @dependabot merge will merge this PR after your CI passes on it
    • @dependabot squash and merge will squash and merge this PR after your CI passes on it
    • @dependabot cancel merge will cancel a previously requested merge and block automerging
    • @dependabot reopen will reopen this PR if it is closed
    • @dependabot close will close this PR and stop Dependabot recreating it. You can achieve the same result by closing it manually
    • @dependabot ignore this major version will close this PR and stop Dependabot creating any more for this major version (unless you reopen the PR or upgrade to it yourself)
    • @dependabot ignore this minor version will close this PR and stop Dependabot creating any more for this minor version (unless you reopen the PR or upgrade to it yourself)
    • @dependabot ignore this dependency will close this PR and stop Dependabot creating any more for this dependency (unless you reopen the PR or upgrade to it yourself)
    • @dependabot use these labels will set the current labels as the default for future PRs for this repo and language
    • @dependabot use these reviewers will set the current reviewers as the default for future PRs for this repo and language
    • @dependabot use these assignees will set the current assignees as the default for future PRs for this repo and language
    • @dependabot use this milestone will set the current milestone as the default for future PRs for this repo and language

    You can disable automated security fix PRs for this repo from the Security Alerts page.

    dependencies 
    opened by dependabot[bot] 0
  • Bump eslint-utils from 1.3.1 to 1.4.3

    Bump eslint-utils from 1.3.1 to 1.4.3

    Bumps eslint-utils from 1.3.1 to 1.4.3.

    Release notes

    Sourced from eslint-utils's releases.

    v1.4.3

    🐛 Bug fixes

    • 8f9e481ecc1204c7a1331b697f97903f90c75154 fixed false positive of ReferenceTracker.

    v1.4.2

    🐛 Bug fixes

    • e4cb01498df6096b66edb0c78965ee6f47d3ac77 fixed a regression of the previous release.

    v1.4.1

    🐛 Bug fixes

    • c119e832952c8c653bd4f21e39eb9f7ce48e5947 fixed getStaticValue() function to handle null literal correctly even if runtimes don't support BigInt natively.
    • 587cca2f82c245f5fc4a8b9fb2cf6b35c0d02552 fixed getStringIfConstant() function to handle regular expression literals and BigInt literals even if runtimes don't support those.
    • 08158db1c98fd71cf0f32ddefbc147e2620e724c fixed GHSA-3gx7-xhv7-5mx3.

    v1.4.0

    ✨ Enhancements

    • 66456c5356310fc4309b4fe2756995f27b907747 (and ebf5a8378d3f0a20a74adb158a7112cb616bce44, aac472e815551688d23cc8fd88f9044dbf276804) added isParenthesized() function that checks if a given node is parenthesized or not.
    • 4f8407dd6cd52274ba115b3a8558153ec6d799a7 (and cb518c70ee037722f802d808bbbe93da83f07fb3) added hasSideEffect() function that checks if a given node may have side-effects or not.
    Commits

    Dependabot compatibility score

    Dependabot will resolve any conflicts with this PR as long as you don't alter it yourself. You can also trigger a rebase manually by commenting @dependabot rebase.


    Dependabot commands and options

    You can trigger Dependabot actions by commenting on this PR:

    • @dependabot rebase will rebase this PR
    • @dependabot recreate will recreate this PR, overwriting any edits that have been made to it
    • @dependabot merge will merge this PR after your CI passes on it
    • @dependabot squash and merge will squash and merge this PR after your CI passes on it
    • @dependabot cancel merge will cancel a previously requested merge and block automerging
    • @dependabot reopen will reopen this PR if it is closed
    • @dependabot close will close this PR and stop Dependabot recreating it. You can achieve the same result by closing it manually
    • @dependabot ignore this major version will close this PR and stop Dependabot creating any more for this major version (unless you reopen the PR or upgrade to it yourself)
    • @dependabot ignore this minor version will close this PR and stop Dependabot creating any more for this minor version (unless you reopen the PR or upgrade to it yourself)
    • @dependabot ignore this dependency will close this PR and stop Dependabot creating any more for this dependency (unless you reopen the PR or upgrade to it yourself)
    • @dependabot use these labels will set the current labels as the default for future PRs for this repo and language
    • @dependabot use these reviewers will set the current reviewers as the default for future PRs for this repo and language
    • @dependabot use these assignees will set the current assignees as the default for future PRs for this repo and language
    • @dependabot use this milestone will set the current milestone as the default for future PRs for this repo and language

    You can disable automated security fix PRs for this repo from the Security Alerts page.

    dependencies 
    opened by dependabot[bot] 0
  • Bump lodash.merge from 4.6.1 to 4.6.2

    Bump lodash.merge from 4.6.1 to 4.6.2

    Bumps lodash.merge from 4.6.1 to 4.6.2.

    Commits

    Dependabot compatibility score

    Dependabot will resolve any conflicts with this PR as long as you don't alter it yourself. You can also trigger a rebase manually by commenting @dependabot rebase.


    Dependabot commands and options

    You can trigger Dependabot actions by commenting on this PR:

    • @dependabot rebase will rebase this PR
    • @dependabot recreate will recreate this PR, overwriting any edits that have been made to it
    • @dependabot merge will merge this PR after your CI passes on it
    • @dependabot squash and merge will squash and merge this PR after your CI passes on it
    • @dependabot cancel merge will cancel a previously requested merge and block automerging
    • @dependabot reopen will reopen this PR if it is closed
    • @dependabot close will close this PR and stop Dependabot recreating it. You can achieve the same result by closing it manually
    • @dependabot ignore this major version will close this PR and stop Dependabot creating any more for this major version (unless you reopen the PR or upgrade to it yourself)
    • @dependabot ignore this minor version will close this PR and stop Dependabot creating any more for this minor version (unless you reopen the PR or upgrade to it yourself)
    • @dependabot ignore this dependency will close this PR and stop Dependabot creating any more for this dependency (unless you reopen the PR or upgrade to it yourself)
    • @dependabot use these labels will set the current labels as the default for future PRs for this repo and language
    • @dependabot use these reviewers will set the current reviewers as the default for future PRs for this repo and language
    • @dependabot use these assignees will set the current assignees as the default for future PRs for this repo and language
    • @dependabot use this milestone will set the current milestone as the default for future PRs for this repo and language

    You can disable automated security fix PRs for this repo from the Security Alerts page.

    dependencies 
    opened by dependabot[bot] 0
  • Bump mixin-deep from 1.3.1 to 1.3.2

    Bump mixin-deep from 1.3.1 to 1.3.2

    Bumps mixin-deep from 1.3.1 to 1.3.2.

    Commits
    Maintainer changes

    This version was pushed to npm by doowb, a new releaser for mixin-deep since your current version.


    Dependabot compatibility score

    Dependabot will resolve any conflicts with this PR as long as you don't alter it yourself. You can also trigger a rebase manually by commenting @dependabot rebase.


    Dependabot commands and options

    You can trigger Dependabot actions by commenting on this PR:

    • @dependabot rebase will rebase this PR
    • @dependabot recreate will recreate this PR, overwriting any edits that have been made to it
    • @dependabot merge will merge this PR after your CI passes on it
    • @dependabot squash and merge will squash and merge this PR after your CI passes on it
    • @dependabot cancel merge will cancel a previously requested merge and block automerging
    • @dependabot reopen will reopen this PR if it is closed
    • @dependabot close will close this PR and stop Dependabot recreating it. You can achieve the same result by closing it manually
    • @dependabot ignore this major version will close this PR and stop Dependabot creating any more for this major version (unless you reopen the PR or upgrade to it yourself)
    • @dependabot ignore this minor version will close this PR and stop Dependabot creating any more for this minor version (unless you reopen the PR or upgrade to it yourself)
    • @dependabot ignore this dependency will close this PR and stop Dependabot creating any more for this dependency (unless you reopen the PR or upgrade to it yourself)
    • @dependabot use these labels will set the current labels as the default for future PRs for this repo and language
    • @dependabot use these reviewers will set the current reviewers as the default for future PRs for this repo and language
    • @dependabot use these assignees will set the current assignees as the default for future PRs for this repo and language
    • @dependabot use this milestone will set the current milestone as the default for future PRs for this repo and language

    You can disable automated security fix PRs for this repo from the Security Alerts page.

    dependencies 
    opened by dependabot[bot] 0
  • Bump handlebars from 4.1.2 to 4.7.3

    Bump handlebars from 4.1.2 to 4.7.3

    Bumps handlebars from 4.1.2 to 4.7.3.

    Changelog

    Sourced from handlebars's changelog.

    v4.7.3 - February 5th, 2020

    Chore/Housekeeping:

    • #1644 - Download links to aws broken on handlebarsjs.com - access denied (@Tea56)
    • Fix spelling and punctuation in changelog - d78cc73

    Bugfixes:

    • Add Type Definition for Handlebars.VERSION, Fixes #1647 - 4de51fe
    • Include Type Definition for runtime.js in Package - a32d05f

    Compatibility notes:

    • No incompatibilities are to be expected

    Commits

    v4.7.2 - January 13th, 2020

    Bugfixes:

    • fix: don't wrap helpers that are not functions - 9d5aa36, #1639

    Chore/Build:

    • chore: execute saucelabs-task only if access-key exists - a4fd391

    Compatibility notes:

    • No breaking changes are to be expected

    Commits

    v4.7.1 - January 12th, 2020

    Bugfixes:

    • fix: fix log output in case of illegal property access - f152dfc
    • fix: log error for illegal property access only once per property - 3c1e252

    Compatibility notes:

    • no incompatibilities are to be expected.

    Commits

    v4.7.0 - January 10th, 2020

    Features:

    ... (truncated)
    Commits
    • c978969 v4.7.3
    • 9278f21 Update release notes
    • d78cc73 Fixes spelling and punctuation
    • 4de51fe Add Type Definition for Handlebars.VERSION, Fixes #1647
    • a32d05f Include Type Definition for runtime.js in Package
    • ad63f51 chore: add missing "await" in aws-s3 publishing code
    • 586e672 v4.7.2
    • f0c6c4c Update release notes
    • a4fd391 chore: execute saucelabs-task only if access-key exists
    • 9d5aa36 fix: don't wrap helpers that are not functions
    • Additional commits viewable in compare view

    Dependabot compatibility score

    Dependabot will resolve any conflicts with this PR as long as you don't alter it yourself. You can also trigger a rebase manually by commenting @dependabot rebase.


    Dependabot commands and options

    You can trigger Dependabot actions by commenting on this PR:

    • @dependabot rebase will rebase this PR
    • @dependabot recreate will recreate this PR, overwriting any edits that have been made to it
    • @dependabot merge will merge this PR after your CI passes on it
    • @dependabot squash and merge will squash and merge this PR after your CI passes on it
    • @dependabot cancel merge will cancel a previously requested merge and block automerging
    • @dependabot reopen will reopen this PR if it is closed
    • @dependabot close will close this PR and stop Dependabot recreating it. You can achieve the same result by closing it manually
    • @dependabot ignore this major version will close this PR and stop Dependabot creating any more for this major version (unless you reopen the PR or upgrade to it yourself)
    • @dependabot ignore this minor version will close this PR and stop Dependabot creating any more for this minor version (unless you reopen the PR or upgrade to it yourself)
    • @dependabot ignore this dependency will close this PR and stop Dependabot creating any more for this dependency (unless you reopen the PR or upgrade to it yourself)
    • @dependabot use these labels will set the current labels as the default for future PRs for this repo and language
    • @dependabot use these reviewers will set the current reviewers as the default for future PRs for this repo and language
    • @dependabot use these assignees will set the current assignees as the default for future PRs for this repo and language
    • @dependabot use this milestone will set the current milestone as the default for future PRs for this repo and language

    You can disable automated security fix PRs for this repo from the Security Alerts page.

    dependencies 
    opened by dependabot[bot] 0
  • less and ava plugin migration + appreciation

    less and ava plugin migration + appreciation

    Hei there,

    Just recently found out about this task runner and I'm lovin it so far! It provides simple task based runner and really useful in a monorepo project. I actually prefer NPM scripts over task runner, but for large monorepo project it'll inevitably become tedious to maintain and sync across multiple packages.

    Now start, provides ability to orchestrate build stanza right from a root of monorepo, without much complexion. Really like it!

    I noticed that less and ava were originally supported as plugin but not yet migrated to the current start monorepo. Is there any ETA in when they'll be migrated? Or is there any pointer if I were to implement custom plugin for them in the current version of start?

    enhancement help wanted 
    opened by panjiesw 18
Owner
Kir Belevich
🛠⚙️🖤
Kir Belevich
Task toolkit. For when `npm run` isn't enough and everything else is too much.

For when npm run isn't enough and everything else is too much. Ygor is a no-frills toolkit consisting of a task runner and a file transformer. Enjoy a

Shannon Moeller 68 Nov 12, 2022
Package your Node.js project into an executable

Disclaimer: pkg was created for use within containers and is not intended for use in serverless environments. For those using Vercel, this means that

Vercel 22.6k Jan 7, 2023
browser-side require() the node.js way

browserify require('modules') in the browser Use a node-style require() to organize your browser code and load modules installed by npm. browserify wi

null 14.3k Dec 29, 2022
A powerful and lightweight inversion of control container for JavaScript & Node.js apps powered by TypeScript.

InversifyJS A powerful and lightweight inversion of control container for JavaScript & Node.js apps powered by TypeScript. About InversifyJS is a ligh

inversify 9.5k Jan 4, 2023
Build node packages into deployable applications

strong-build Build a node application package, preparing it for deploy to production. It is useful standalone, but is commonly used to build applicati

StrongLoop and IBM API Connect 47 Mar 3, 2022
Satyam Sharma 3 Jul 8, 2022
zieeco 12 Jul 8, 2022
Richard Chileya 5 Nov 11, 2022
Grunt: The JavaScript Task Runner

Grunt: The JavaScript Task Runner Documentation Visit the gruntjs.com website for all the things. Support / Contributing Before you make an issue, ple

grunt 12.2k Dec 31, 2022
Grupprojekt för kurserna 'Javascript med Ramverk' och 'Agil Utveckling'

JavaScript-med-Ramverk-Laboration-3 Grupprojektet för kurserna Javascript med Ramverk och Agil Utveckling. Utvecklingsguide För information om hur utv

Svante Jonsson IT-Högskolan 3 May 18, 2022
Hemsida för personer i Sverige som kan och vill erbjuda boende till människor på flykt

Getting Started with Create React App This project was bootstrapped with Create React App. Available Scripts In the project directory, you can run: np

null 4 May 3, 2022
Kurs-repo för kursen Webbserver och Databaser

Webbserver och databaser This repository is meant for CME students to access exercises and codealongs that happen throughout the course. I hope you wi

null 14 Jan 3, 2023
Plain functions for a more functional Deku approach to creating stateless React components, with functional goodies such as compose, memoize, etc... for free.

"Keo" is the Vietnamese translation for glue. Plain functions for a more functional Deku approach to creating stateless React components, with functio

Adam Timberlake 225 Sep 24, 2022
Redis-backed task queue engine with advanced task control and eventual consistency

idoit Redis-backed task queue engine with advanced task control and eventual consistency. Task grouping, chaining, iterators for huge ranges. Postpone

Nodeca 65 Dec 15, 2022
This "To-do-list" app is a simple web application that displays a list of task and allows you to add and remove task from that list. it is built with the latest technology namely; JavaScript with webpack Configuration.

To-do-list "To-do-list" is a simple web application that displays a list of task and allows you to add and remove task from that list. Built With HTML

Aniekan udo 10 Nov 21, 2022
Practice Task of HTML - Mache Free Template (PSD to HTML) - Home Task (CTG)

Practice Task of HTML - Mache Free Template (PSD to HTML) - Home Task (CTG) This Assignment is mainly on PSD TO HTML along with HTML,CSS As a Basic HT

Yasir Monon 1 Jan 29, 2022
This "To-do-list" app is a simple web application that displays a list of task and allows you to add and remove task from that list

This "To-do-list" app is a simple web application that displays a list of task and allows you to add and remove task from that list. it is built with the latest technology including but not limited to HTML, CSS, JavaScript and webpack to manipulate DOM.

Jerry Owusu 2 Feb 19, 2022
"To Do List" is a minimalist project that displays a list of task and allows you to add and remove task from that list. Built with JavaScript

To Do List Structure Solo programming project for module 2 week 2 of the Microverse Program. Live Demo Live Demo Link "To Do List" is a minimalist pro

Yersel Hurtado 7 Mar 5, 2022
This is a project being built to show the usage of Webpack. It's an application were you are able to add a task to the list, and remove a task from the list

Microverse Project To Do List This is a project being built to show the usage of webpack. Its an application were you are able to add a task to the li

Roland Ossisa Yuma 4 May 6, 2022