Home

Awesome

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<DNA>

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.

example manual

//       /sample-repo-with-cell-paths
//       | - cells/cell1/dna/index.yaml
//       | - dna/branch.json
//       | - dna/common.yaml
# cells/cell1/dna/index.yaml
cellInfo: v1
cellPaths: # Array of path relative paths to cells
 - 'cells/cell1' 
// usage 

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.

//       /sample-repo
//       | - cells/cell1/dna/index.yaml
//       | - dna/branch.json
//       | - dna/common.yaml

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
}