A platform for finding dependencies between files and building tools for incremental compilation or build.
Details
- Simple and configurable.
- Language free.
- Support snapshots for postpone incremental builds.
Do you like this project? Support it by donating, creating an issue or pull request.
npm install @emitty/core
const emitty = require('@emitty/core').configure();
emitty.language({
extensions: ['.pug', '.jade'],
parser: require('@emitty/language-pug').parse
});
await emitty.filter('home.png'); // true
await emitty.filter('home.png', 'news.png'); // false
Returns an Emitty instance with the methods described below.
- Required:
false
- Type:
Options
See Options section.
Adds language support.
- Required:
true
- Type:
Language
Specification of the language to be added.
export type Language = {
extensions: string[]; // ['.pug', '.jade']
parser: (filepath: string, buffer: Buffer) => { references: string[] };
};
Loads information from the snapshot to the storage.
- Required:
true
- Type:
Snapshot
Snapshot storage.
Returns an object that contains a storage in the snapshot format.
Completely cleans the storage.
Determines whether to compile the changed file if it is passed.
- Required:
true
- Type:
string
The file that is currently being processed by the builder or compiler.
- Required:
false
- Type:
string
The file that trigger the build or compile.
- Type:
string
- Default:
process.cwd()
The current working directory.
- Type:
FileSystemAdapter
- Default:
fs.*
Custom implementation of methods for working with the file system.
export type FileSystemAdapter = {
access?: typeof fs.access;
constants?: typeof fs.constants;
readFile?: typeof fs.readFile;
};
The .configure
method initiates a storage to which all relationships between the files being processed are later written.
When you call the .filter
method without the changed
file, @emitty reads the source
file and builds a dependency tree for that file (with recursive reads of dependencies). In this case, the filter always returns true
to ensure that all files in the project are compiled and collected in the storage.
When you call the .filter
method with the changed
file, @emitty reads only the changed
file and updates its dependencies (without recursive reads of dependencies). In this case, the filter returns true
if there is a reference to the changed
file in the dependency tree of the source
file. Otherwise false
.
Look at the gulp.js
file for an example.
You can use the .language
method with any language, even your own. Just implement the parser for your language.
type File = {
references: string[];
};
export function myOwnLanguageParser(filepath: string, buffer: Buffer): Promise<File> {
return Promise.resolve({
references: ['home.own.language', 'components/header.own.language']
});
}
Next, just use it with the .language
method.
See the Releases section of our GitHub project for changelog for each release version.
This software is released under the terms of the MIT license.