UNPKG

makestatic-core

Version:

Generic file processing library

678 lines (447 loc) 12.8 kB
# Core > Generic file processing library --- - [Install](#install) - [API](#api) - [LifeCycle](#lifecycle) - [LifeCycle](#lifecycle-1) - [config](#config) - [context](#context) - [main](#main) - [deploy](#deploy) - [.getPlugins](#getplugins) - [.getLifecycleConfig](#getlifecycleconfig) - [.process](#process) - [phase](#phase) - [phases](#phases) - [.run](#run) - [Context](#context-1) - [Context](#context-2) - [phase](#phase-1) - [phases](#phases-1) - [.getFile](#getfile) - [lifecycle](#lifecycle-2) - [log](#log) - [config](#config-1) - [options](#options) - [list](#list) - [files](#files) - [assets](#assets) - [agent](#agent) - [graph](#graph) - [manifest](#manifest) - [sitemap](#sitemap) - [data](#data) - [TreeAdapter](#treeadapter) - [FileList](#filelist) - [FileList](#filelist-1) - [context](#context-3) - [root](#root) - [sources](#sources) - [files](#files-1) - [assets](#assets-1) - [.add](#add) - [.remove](#remove) - [.rewrite](#rewrite) - [.rename](#rename) - [.get](#get) - [.getFile](#getfile-1) - [.propagate](#propagate) - [TreeAdapter](#treeadapter-1) - [TreeAdapter](#treeadapter-2) - [.parse](#parse) - [.serialize](#serialize) - [.clone](#clone) - [.getSeal](#getseal) - [.modify](#modify) - [.walk](#walk) - [content](#content) - [result](#result) - [dirty](#dirty) - [License](#license) --- ## Install ``` yarn add makestatic-core ``` ## API ### LifeCycle Core library for the processing lifecycle. #### LifeCycle ```javascript new LifeCycle(options) ``` Creates a new LifeCycle. * `options` Object the processing options. #### config ```javascript readonly Config config ``` The lifecycle configuration. #### context ```javascript readonly Context context ``` The processing context for this lifecycle. #### main ```javascript readonly Array main ``` List of standard lifecycle phases. #### deploy ```javascript readonly Array deploy ``` List of deploy lifecycle phases. #### .getPlugins ```javascript LifeCycle.prototype.getPlugins(argv) ``` Builds the list of phases to execute. Returns array list of phase plugins. * `argv` Object map of option overrides. #### .getLifecycleConfig ```javascript LifeCycle.prototype.getLifecycleConfig(opts, argv) ``` Abstract method to get a default lifecycle configuration. Returns object map of lifecycle phase configurations. * `opts` Object map of computed options. * `argv` Object map of option overrides. #### .process ```javascript LifeCycle.prototype.process(argv, phases) ``` Process the entire lifecycle. This method will set the computed options on the `config` based on the passed `argv` options merged with the options specified when the instance was created. It will then merge the result of calling `getLifecycleConfig()` into the `lifecycle` property of the computed options before retrieving the list of plugin phases to execute returned by `getPlugins()`. Finally it creates a processing `context` for this lifecycle before deferring execution to the `run()` method. Returns a promise that resolves when all phases have completed. * `argv` Object map of option overrides. * `phases` Array list of phases to execute. #### phase ```javascript readonly String phase ``` Name of the currently executing phase. #### phases ```javascript readonly Array phases ``` List of phases that have already executed. #### .run ```javascript LifeCycle.prototype.run(phases) ``` Run lifecycle processing phases. Returns a promise that resolves when all phases have completed. * `phases` Array list of phases to execute. ### Context Encapsulates the processing context information. #### Context ```javascript new Context(lifecycle, config) ``` Configure the information encapsulated by this context. * `lifecycle` Object reference to the main lifecycle. * `config` Object reference to the configuration. #### phase ```javascript readonly String phase ``` Name of the currently executing phase. #### phases ```javascript readonly Array phases ``` List of phases that have already executed. #### .getFile ```javascript Context.prototype.getFile(opts) ``` Alias for `FileList.getFile`. Returns a File instance. * `opts` String|Object file creation options. #### lifecycle ```javascript readonly Object lifecycle ``` Get the main lifecycle runner. #### log ```javascript readonly Object log ``` Get the log helper. #### config ```javascript readonly Object config ``` Get the configuration. #### options ```javascript readonly Object options ``` Get the computed options encapsulated by the `config`. #### list ```javascript readonly Object list ``` Get the file list manager. #### files ```javascript readonly Array files ``` Get the output file list. #### assets ```javascript Object assets ``` Map of output assets. Compatible with the webpack asset map. #### agent ```javascript Object agent ``` HTTP client agent. Many plugins need to fetch resources from the network so it makes sense for them to use a common API for loading network resources and allowing resources to be cached which makes consecutive builds much faster. Propagated when the `http-cache` plugin is used. The `core-standard` package will load the `http-cache` plugin automatically. #### graph ```javascript Object graph ``` Application resource graph. Propagated when the `graph-resources` plugin is used. #### manifest ```javascript Object manifest ``` Application manifest. Propagated when the `manifest` plugin is used. #### sitemap ```javascript Object sitemap ``` Application sitemap. Propagated when the `sitemap` plugin is used. #### data ```javascript readonly Object data ``` Property that allows plugins to assign arbitrary data to the processing context that may be used by other plugins. #### TreeAdapter ```javascript readonly Function TreeAdapter ``` Reference to the TreeAdapter class. Parsers should use this class to provide a consistent API for parsing documents to abstract syntax trees with the benefits provided by the tree adapter implementation. ### FileList Encapsulates the output file lists. The `files` list is an array of file objects whilst the `assets` list is a map of relative file paths to file objects. #### FileList ```javascript new FileList(context, sources) ``` Create a FileList. * `context` Object the processing context. * `sources` Array list of file names. #### context ```javascript readonly Object context ``` The processing context. #### root ```javascript readonly String root ``` The root directory for input files. #### sources ```javascript readonly Array sources ``` Raw list of input file names. #### files ```javascript readonly Array files ``` List of current output files. #### assets ```javascript Object assets ``` Map of current output files. #### .add ```javascript FileList.prototype.add(options) ``` Add a file to the list by name or pointer. The file is not added if it already exists in the `files` list. Returns the file on success otherwise undefined. * `options` String|Object source file name or file properties. #### .remove ```javascript FileList.prototype.remove(options) ``` Remove a file from the list by name or pointer. Returns the file on success otherwise undefined. * `options` String|Object source file name or file properties. #### .rewrite ```javascript FileList.prototype.rewrite(options, dest) ``` Rewrite the output path for an existing file. Returns the file on success otherwise undefined. * `options` String|Object source file name or file properties. * `dest` String the new output path for the file. #### .rename ```javascript FileList.prototype.rename(options, name) ``` Rename the output file name for an existing file. Returns the file on success otherwise undefined. * `options` String|Object source file name or file properties. * `name` String the new output name for the file. #### .get ```javascript FileList.prototype.get(options) ``` Get a file from the list by name or pointer. Returns a file object or undefined. * `options` String|Object source file name or file properties. #### .getFile ```javascript FileList.prototype.getFile(options) ``` Get a File pointer. Accepts an input file path which becomes the file `name` or a map of properties for the new file. If a `File` is passed it is returned. Returns a file object. * `options` String|Object source file name or file properties. #### .propagate ```javascript FileList.prototype.propagate(sources) ``` Propagates the file lists converting file path strings to complex `filewrap` objects. * `sources` Array list of input file names. ### TreeAdapter Abstraction for abstract syntax tree parsers and serializers that provides a common API for interacting with abstract syntax trees. This implementation provides a mechanism for lazily converting buffers to strings when the tree is parsed and lazily parsing when the `result` property is accessed. It also allows for trees to be marked as dirty, if a tree has not been marked as dirty and `serialize` is called the original content is returned. #### TreeAdapter ```javascript new TreeAdapter(parse, serialize, iterator, content[, clone]) ``` Create a TreeAdapter. All constructor parameters are required. * `parse` Function a closure that parses to an AST. * `serialize` Function a closure that serializes an AST * `iterator` Function a closure that iterates the AST * `content` String|Buffer the content to parse. * `clone` Function called when this AST adapter is cloned. #### .parse ```javascript TreeAdapter.prototype.parse() ``` Calls the underlying AST parse closure and sets the result on this adapter. Returns this tree adapter. #### .serialize ```javascript TreeAdapter.prototype.serialize() ``` Calls the underlying AST serialize closure. Returns the serialize closure return value. #### .clone ```javascript TreeAdapter.prototype.clone([content]) ``` Gets a copy of this tree adapter sharing the same parse, serialize iterator and clone closures. If the consumer passed a `clone` function to the constructor it is called with the cloned tree adapter so that the consumer can decorate the new tree if necessary. Returns a new tree adapter. * `content` String content for the new tree adapter. #### .getSeal ```javascript TreeAdapter.prototype.getSeal() ``` Gets a file seal closure for this adapter. If this AST is not dirty the original content is returned. Returns a seal closure. #### .modify ```javascript TreeAdapter.prototype.modify(fn) ``` Calls a function passing the result AST and flags this tree as dirty. If the passed function does not return a value it is assumed the tree is dirty otherwise the return value is coerced to a boolean and set as the dirty flag. Returns this tree adapter. * `fn` Function the tree modifier function. #### .walk ```javascript TreeAdapter.prototype.walk(predicate, fn) ``` Walk the abstract syntax tree nodes. Returns this tree adapter. * `predicate` Function test if a node should be visited. * `fn` Function visit a node. #### content ```javascript readonly Buffer|String content ``` Source file content. #### result ```javascript readonly Object result ``` A parse result object. #### dirty ```javascript Boolean dirty ``` Determines if the tree is dirty. ## License MIT --- Created by [mkdoc](https://github.com/mkdoc/mkdoc) on March 12, 2017 [docs]: https://makestatic.ws/docs/ "Documentation" [standalone manual]: https://github.com/makestatic/website/blob/master/MANUAL.md "Standalone Manual" [yarn]: https://yarnpkg.com "Yarn" [webpack]: https://webpack.js.org "Webpack" [babel]: https://babeljs.io "Babel" [postcss]: http://postcss.org "Postcss" [sugarss]: https://github.com/postcss/sugarss "Sugarss" [reshape]: https://github.com/reshape/reshape "Reshape Source Code" [reshapeml]: https://reshape.ml "Reshape" [clean-css]: https://github.com/jakubpawlowicz/clean-css "Clean CSS" [html-minifier]: https://github.com/kangax/html-minifier "Html Minifier" [uglify-js]: https://github.com/mishoo/UglifyJS2 "Uglify JS" [imagemin]: https://github.com/imagemin/imagemin "Imagemin" [mkdoc]: https://github.com/mkdoc/mkdoc "Mkdoc" [browsersync]: https://www.browsersync.io "Browsersync" [yeoman]: http://yeoman.io "Yeoman" [spike]: https://www.spike.cf "Spike" [validator]: https://github.com/validator/validator "HTML Validator" [github pages]: https://pages.github.com "Github Pages" [amazon s3]: https://aws.amazon.com/s3/ "Amazon S3" [google sitemaps]: https://support.google.com/webmasters/answer/183668?hl=en&ref_topic=4581190 "Google Sitemaps" [sitemaps]: https://www.sitemaps.org/ "Sitemaps"