armo-breadboard
Version:
Edit a live React component's source in real time.
34 lines (29 loc) • 915 B
JavaScript
export default class BreadboardBuilder {
constructor(transforms) {
this.transforms = transforms
// Holds the arguments from the last call to `run`
this.lastSources = {}
this.lastTransformedSources = {}
}
buildAll(sources) {
const transformedSources = {}
const filenames = Object.keys(sources)
for (let filename of filenames) {
const transformedSource = this.buildOne(filename, sources[filename])
transformedSources[filename] = transformedSource
}
return transformedSources
}
buildOne(filename, source) {
if (source === this.lastSources[filename]) {
return this.lastTransformedSources[filename]
}
let transformedSource = source
for (let [pattern, transform] of this.transforms) {
if (pattern.test(filename)) {
transformedSource = transform(transformedSource, filename)
}
}
return transformedSource
}
}