Huge News!Announcing our $40M Series B led by Abstract Ventures.Learn More
Socket
Sign inDemoInstall
Socket

gromjs

Package Overview
Dependencies
Maintainers
1
Versions
8
Alerts
File Explorer

Advanced tools

Socket logo

Install Socket

Detect and block malicious and high-risk dependencies

Install

gromjs

Awesome co-powered build system

  • 0.1.4
  • latest
  • Source
  • npm
  • Socket score

Version published
Weekly downloads
1
Maintainers
1
Weekly downloads
 
Created
Source

#GROM.js Awesome co-powered build system.

npm package

npm install -g gromjs

Why?

The goal of grom.js is to be a plugin-less build system that will allow to use any node module to process files without pain. Gives more control

Super simple

In gromfile.js:

var processor = require('files-processor')
var R = require('ramda')

module.exports.task = function* (){
  var filesSet = yield this.read(['path/to/files'])
  var mappedFilesSet = filesSet.map(function*(file){
    var newSource = processor(yield file.source())
    return file.clone(newSource, { ext: '.processed'})
  })

  return yield this.write('path/to/dist', mappedFilesSet)
}

In terminal:

$ gromjs task

That's it. No special grom-whatever plugins, use whatever you want.

API

  • yield this.read(glob)
    Returns ordered Set of Files

  • yield this.watch(glob)
    Returns events emitter, uses npm module watch and watch.createMonitor method

  • yield this.write(glob, Set)
    Accepts glob, Set of Files and writes everything in right place.

  • yield this.async(tasks)
    Accepts array of tasks and runs in asynchronously and independent to each other.

  • yield this.seq(tasks)
    Runs tasks one by one from left to right, every next one get result from previous.

Set

Is a set of Files uniq by glob, have next methods:

  • elements()
    Returns Set's elements

  • isContains(file)
    Checks if file is in Set by file's glob

  • add(file)
    Returns new Set with all elements plus new one

  • remove(element)
    Returns new Set without single element

  • union(set)
    Returns new Set that is union of elements from both sets

  • intersection(set)
    Returns new Set that is intersection between sets

  • difference(set)
    Returns new Set that is difference between sets

  • filter(interator*)
    Returns new Set with filtered elements

  • sort(interator*)
    Returns new Set with sorted elements

  • reduce(interator*, accumulator)
    Returns reduced value

  • map(interator*)
    Returns new Set with mapped elements

  • forEach(interator*)
    Iterates over elements and returns current Set

File
  • path()
    Returns full path

  • glob()
    Returns glob

  • name()
    Returns name with extension

  • source()
    Generator, returns file's source code

  • clone([glob], [source])
    Creates new File, glob can be presented as hash with dir, name, ext fields which will be merged with parent file's path, path also can be just a string, if glob or source isn't provided, clone takes it from parent.

Examples:

run tasks in sequence:

var filesProcessor = require('files-processor')

var read = function* (){
  return yield this.read('/some/path/to/**.ext')
}

var processSet = function* (set){
  return set.map(function* (file){
    var source = yield file.source()
    return file.clone(yield extProcessor(source), { ext: 'js' })
  })
}

var write = function* (set){
  return yield this.write('/another/path', set)
}

module.exports.default = function* three(){
  yield this.seq([read, processSet, write])
}

watch files:


module.exports.default = function* three(){
  var monitor = yield this.watch('*.js')
  monitor.on('change', function* (Set){
    yield this.async(someTask)
  })
}

compile less:

var less = require('less')

module.exports.compileLess = function* compileLess (){
  var lessFilesSet = yield this.read('./code/**.less')

  var cssFilesSet = yield lessFilesSet.map(function* (file){
    var lessContents = (yield file.source()).toString()
    var css = (yield less.render(lessContents, {})).css
    return file.clone(css, { ext: 'css' })
  })

  return yield this.write('./dist', cssFilesSet)
}

CLI


$ gromjs <task-name>

TODO

  • Tasks logger
  • Tests
  • More examples

License

MIT © Dmitriy Kharchenko

Keywords

FAQs

Package last updated on 08 Aug 2015

Did you know?

Socket

Socket for GitHub automatically highlights issues in each pull request and monitors the health of all your open source dependencies. Discover the contents of your packages and block harmful activity before you install or update your dependencies.

Install

Related posts

SocketSocket SOC 2 Logo

Product

  • Package Alerts
  • Integrations
  • Docs
  • Pricing
  • FAQ
  • Roadmap
  • Changelog

Packages

npm

Stay in touch

Get open source security insights delivered straight into your inbox.


  • Terms
  • Privacy
  • Security

Made with ⚡️ by Socket Inc