@beyond-js/bundles-sdk
Version:
BeyondJS Bundles SDK
54 lines (45 loc) • 1.45 kB
JavaScript
const DynamicProcessor = require('@beyond-js/dynamic-processor')();
const equal = require('@beyond-js/equal');
const crc32 = require('@beyond-js/crc32');
module.exports = class extends DynamicProcessor {
get dp() {
return 'processor.analyzer.hash';
}
#analyzer;
get analyzer() {
return this.#analyzer;
}
constructor(analyzer) {
super();
this.#analyzer = analyzer;
const events = ['item.initialised', 'item.change'];
const { processor } = analyzer;
const { files, overwrites, extensions } = processor.sources;
const children = [
['files', { child: files, events }],
['extensions', { child: extensions, events }],
];
overwrites && children.push(['overwrites', { child: overwrites, events }]);
super.setup(new Map(children));
}
#value;
get value() {
return this.#value;
}
_prepared(check) {
const { files, overwrites } = this.#analyzer.processor.sources;
files.forEach(source => check(source));
overwrites?.forEach(source => check(source));
}
_process() {
const { files, overwrites, extensions } = this.#analyzer.processor.sources;
const compute = {};
files.forEach(source => (compute[source.file] = source.hash));
overwrites?.forEach(source => (compute[source.file] = source.hash));
extensions.forEach(source => (compute[source.file] = source.hash));
const value = crc32(equal.generate(compute));
const changed = value !== this.#value;
this.#value = value;
return changed;
}
};