organic-dna-repo-loader
Utility module for loading repo dna accordingly to stem skeleton v2.1 & v3.x.x structure.
Features:
usage
install
$ npm i organic-dna-repo-loader
api
loadDNA({root, mod, skipExistingLoaderUsage: false}):Promise
Loads <root>/dna
and any cell dna found with glob pattern <root>/cells/**/dna
into memory by apply mode
on the loaded DNA chunks before resolving.
root
: String, a full path to folder containing dna
and cells
foldersmode
: String, optional mode or combination of modes to instruct DNA folding, see organic-dna-cellmodes for more info.skipExistingLoaderUsage
: Boolean, defualts to false
. If set to true will not use existing loader found at <repo>/cells/node_modules/lib/load-root-dna.js
example manual
cellInfo: v1
cellPaths:
- 'cells/cell1'
const loadDNA = require('organic-dna-repo-loader')
const dna = await loadDNA(process.cwd() + '/sample-repo')
expect(dna).toDeepEqual({
branch: {
property: "value"
},
cells: {
cell1: {
build: {
myProperty: "value"
}
}
},
common: {
property: "value"
}
})
example automatic
:warning: this method doesn't scale well with increased amount of cells to search for, so it is useful up to 20 cells.
const loadDNA = require('organic-dna-repo-loader')
const dna = await loadDNA(process.cwd() + '/sample-repo')
expect(dna).toDeepEqual({
branch: {
property: "value"
},
cells: {
cell1: {
build: {
myProperty: "value"
}
}
},
common: {
property: "value"
}
})
existing dna loader
The implementation is designed to check for existence of <repo>/cells/node_modules/lib/load-root-dna.js
and if it is present to require that instead of the original logic.
It is expected that this existing dna loader module exports the following
module.exports = async function (mode) {
return DNA
}
ie, it should accept mode
, load the respective repo DNA and return it as Promise.
Usually the existing dna loader can be implemented using organic-dna-repo-loader
as its first step like so:
const loadDNA = require('organic-dna-repo-loader')
module.exports = async function (mode) {
let repoDNA = loadDNA({
root: __dirname, // or any other way to indicate repo's root folder
mode,
skipExistingLoaderUsage: true
})
// augment repoDNA ...
return repoDNA
}