aboutsummaryrefslogtreecommitdiff
path: root/node_modules/hullabaloo-config-manager/README.md
diff options
context:
space:
mode:
Diffstat (limited to 'node_modules/hullabaloo-config-manager/README.md')
-rw-r--r--node_modules/hullabaloo-config-manager/README.md212
1 files changed, 212 insertions, 0 deletions
diff --git a/node_modules/hullabaloo-config-manager/README.md b/node_modules/hullabaloo-config-manager/README.md
new file mode 100644
index 000000000..ef2099bad
--- /dev/null
+++ b/node_modules/hullabaloo-config-manager/README.md
@@ -0,0 +1,212 @@
+# hullabaloo-config-manager
+
+Manages complex [Babel] config chains, avoiding duplicated work and enabling
+effective caching.
+
+> Hullabaloo: informal of "babel" (noun)
+>
+> A confused noise, typically that made by a number
+of voices: *the babel of voices on the road.*
+
+Use this package to resolve [Babel] config chains. The resulting options result
+in equivalent compilation behavior as if `babel-core` had resolved the config.
+
+A Node.js-compatible JavaScript module can be generated which exports a function
+that provides the options object, applicable for the current environment. This
+module can be written to disk and reused.
+
+Config sources and plugin and preset dependencies can be hashed and used as
+cache keys. The cache keys and generated module can be verified to avoid having
+to repeatedly resolve the config chains, and to be sure a previously
+transformation result can be reused.
+
+This module is used by [AVA].
+
+## Installation
+
+```console
+$ npm install --save hullabaloo-config-manager
+```
+
+## Usage
+
+```js
+const configManager = require('hullabaloo-config-manager')
+```
+
+## API
+
+### `currentEnv(): string`
+
+Returns the current environment value, just like `babel-core` would determine
+it.
+
+### `fromDirectory(dir: string, options?: {cache: Cache}): Promise<null | ResolvedConfig>`
+
+Asynchronously resolves config chains from the `dir` directory. If no config can
+be found the promise is resolved with `null`. Otherwise it is resolved with the
+[resulting config object](#resolvedconfig). The promise is rejected if
+[errors](#errors) occur.
+
+A `cache` object may be provided.
+
+### `createConfig(options: {options: BabelOptions, source: string, dir?: string, hash?: string, json5?: false}): Config`
+
+Creates and returns an in-memory [config object](#config). The first argument
+must be provided, and it must have a valid [`options` object](#babeloptions) and
+`source` value.
+
+If the `dir` value is not provided it's derived from the `source` value.
+Dependencies are resolved relative to this `dir`.
+
+If the config source does not exist on disk the `hash` value should be provided,
+otherwise hashes cannot be created for the config.
+
+The `json5` property can be set to `false` if the `options` object can be
+serialized using `JSON.stringify()`.
+
+Note that the `options` object is cloned (deeply) before use.
+
+### `fromConfig(baseConfig: Config, options?: {cache: Cache}): Promise<ResolvedConfig>`
+
+Asynchronously resolves config chains, starting with the `baseConfig`. The
+`baseConfig` must be created using the `createConfig()` method. The promise is
+resolved with the [resulting config object](#resolvedconfig). The promise is
+rejected if [errors](#errors) occur.
+
+A `cache` object may be provided.
+
+### `restoreVerifier(buffer: Buffer): Verifier`
+
+Deserializes a [`Verifier`](#verifier). The `buffer` should be created using
+`Verifier#toBuffer()`.
+
+### `prepareCache(): Cache`
+
+Creates a cache object that can be passed to the above functions. This may
+improve performance by avoiding repeatedly reading files from disk or computing
+hashes.
+
+---
+
+### `Config`
+
+Use `createConfig()` to create this object.
+
+#### `Config#extend(config: Config)`
+
+Extend the config with another config. Throws a `TypeError` if the config was
+created with an `extends` clause in its `options`. It throws an `Error` if it
+has already been extended.
+
+---
+
+### `BabelOptions`
+
+See <https://babeljs.io/docs/usage/api/#options>.
+
+---
+
+### `ResolvedConfig`
+
+Returned by `fromConfig()` and `fromDirectory()`.
+
+#### `ResolvedConfig#generateModule(): string`
+
+Generates a Node.js-compatible JavaScript module which exports a `getOptions()`
+function. This function returns a unique options object, applicable for the
+current environment, that can be passed to `babel-core` methods.
+
+This module needs to evaluated before the `getOptions()` method can be accessed.
+
+#### `ResolvedConfig#createVerifier(): Promise<Verifier>`
+
+Asynchronously hashes plugin and preset dependencies of the resolved config, as
+well as config sources, and resolves the promise with a [`Verifier`](#verifier)
+object.
+
+---
+
+### `Verifier`
+
+Use `restoreVerifier()` or `ResolvedConfig#createVerifier()` to create this
+object.
+
+#### `Verifier#cacheKeysForCurrentEnv(): {dependencies: string, sources: string}`
+
+Synchronously returns cache keys for the plugin and preset dependencies, and
+config sources, that are applicable to the current environment. Use these values
+to cache the result of `babel-core` transforms.
+
+#### `Verifier#verifyCurrentEnv(fixedHashes?: {sources: {[source: string]: string}}, cache?: Cache): Promise<{badDependency: true} | {missingSource: true} | {sourcesChanged: true} | {cacheKeys: {dependencies: string, sources: string}, dependenciesChanged: boolean, sourcesChanged: false, verifier: Verifier}>`
+
+Asynchronously verifies whether the config is still valid for the current
+environment.
+
+Provide `fixedHashes` if the verifier was derived from a created config with a
+fixed `hash` value. A `cache` object may also be provided.
+
+The promise is resolved with an object describing the verification result:
+
+* If the object has a `badDependency` property then a plugin or preset
+dependency could not be hashed, presumably because it no longer exists.
+
+* If it has a `missingSource` property then a config source no longer exists.
+
+* If its `sourcesChanged` property is `true` then config sources have changed
+and the config is no longer valid.
+
+* If its `dependenciesChanged` property is `true` then plugin or preset
+dependencies have changed, but the config itself is still valid. The `verifier`
+property holds a new `Verifier` object which takes the new dependencies into
+account. The `cacheKeys` property contains the same result as calling
+`Verifier#cacheKeysForCurrentEnv()` on the returned `verifier`.
+
+* If its `sourcesChanged` and `dependenciesChanged` properties are both `false`
+then the config is valid and cache keys won't have changed. The `verifier`
+property holds the same `Verifier` object. The `cacheKeys` properties contains
+the same result as calling `Verifier#cacheKeysForCurrentEnv()`.
+
+#### `Verifier#toBuffer()`
+
+Serializes the verifier state into a `Buffer` object. Use `restoreVerifier()`
+to deserialize.
+
+---
+
+### Errors
+
+Error constructors are not publicly available, but errors can be identified by
+their `name` property.
+
+#### `BadDependencyError`
+
+Used when a plugin or preset dependency couldn't be resolved. The corresponding
+package or file name is available through the `source` property. There may be
+another error with more details, available through the `parent` property.
+
+#### `ExtendsError`
+
+Used when an `extends` clause points at a non-existent file. The config file
+that contains the clause is available through the `source` property. The clause
+itself is available through the `clause` property. Has a `parent` property that
+contains a `NoSourceFile` error.
+
+#### `InvalidFileError`
+
+Used when a config file is invalid. The file path is available through the
+`source` property.
+
+#### `NoSourceFileError`
+
+Used when a file does not exist. The file path is available through the `source`
+property.
+
+#### `ParseError`
+
+Used when a config file cannot be parsed (this is different from it being
+invalid). The file path is available through the `source` property. The parsing
+error is available through the `parent` property.
+
+[AVA]: https://ava.li/
+[Babel]: https://babeljs.io/