⚠️ Project has been transferred to NexTools metarepo
- 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 ciHow 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
- 🏭 plugin-lib-babel – transform files using Babel
- 🏭 plugin-lib-esm-loader – copy a predefined ESM loader file to a directory
- 🏭 plugin-lib-webpack – bundle files using Webpack
- 🏭 plugin-lib-webpack-dev-server – run Webpack development server
- 🏭 plugin-lib-rollup – bundle files using Rollup
- 🏭 plugin-lib-typescript-generate – generate
.d.tsfiles using TypeScript - 🏭 plugin-lib-flow-generate – generate
.js.flowfiles using Flow - 🏭 plugin-lib-postcss – transform files using PostCSS
- 🏭 plugin-lib-less – to be migrated
- 🏭 plugin-lib-clean-css – to be migrated
- 🏭 plugin-lib-uglify – to be migrated
Tests
- ✅ plugin-lib-jest – run tests using Jest
- ✅ plugin-lib-tape – run tests using Tape
- ✅ plugin-lib-karma – run tests using Karma
- 💯 plugin-lib-instanbul – collect, report and check code coverage using Istanbul
- ✅ plugin-lib-ava – to be migrated
- ✅ plugin-lib-mocha – to be migrated
- ❓ plugin-assert – Node.js
assert()
Lint, check and fix
- 🚷 plugin-lib-eslint – lint and/or fix code using ESLint
- 🚷 plugin-lib-prettier-eslint – fix code(style) using Prettier + ESLint
- 🚷 plugin-lib-typescript-check – check types using TypeScript
- 🚷 plugin-lib-flow-check – check types using Flow
CI and publish
- 💯 plugin-lib-codecov – send code coverage report to codecov.io
- 🔢 plugin-lib-npm-version – bump package version
- 📦 plugin-lib-npm-publish – publish package to NPM
- 💯 plugin-lib-coveralls – to be migrated
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.