Skip to content

cancerberoSgx/br-fs-to-json

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

14 Commits
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

Browserify transformation to embed files (globs) as JSON as JSON variables

In general you will have the same limitations as with brfs.

Based on fs-to-json.

npm install --save-dev br-fs-to-json

Usage

Command line example

browserify -t br-fs-to-json -o dist/bundle.js src/index.js

Code examples

You can use path module and variables __dirname and __filename, example:

var path = require('path')   
fs2json({ input: path.join(__dirname, 'spec', 'support', '**')})
.then(files => {
  console.log(Object.keys(files))
})

"Real life" example: packing all handlebars templates in a variable:

const fs2json = require('fs-to-json').fs2json

const templates = {}

fs2json({ input: 'src/templates/**.html' }).then(files => {
  Object.keys(files).forEach(fileName => {
    templates[fileName] = handlebars.compile(files[fileName].content)
  })
})

module.exports = function renderTemplate(templateFile, context) {
  return templates[templateFile](context)
}

TypeScript example:

import { fs2json } from 'fs-to-json'

export interface ExampleFile {
  fileName: string
  content: string
  isBinary: boolean
}

let examples: ExampleFile[]

fs2json({
  input: 'dist/src/examples/**/*',
  formatted: true,
  filenamePropertyName: 'fileName',
  contentPropertyName: 'content',
  outputStyle: 'array'
}).then((files: any) => {
  examples = files
  examples.forEach(file => { // fix the names
    file.fileName = file.fileName.substring('dist/src/examples/'.length, file.fileName.length)
  })
})

export function getFiles(): ExampleFile[] {
  return examples
}

Captchas / TIPS

  • async won't work

  • Make sure you only call fs2json once! Each time you make the call, the files will get embedded again in your code!

  • Don't be too inventive. use simple expressions like above's :

    • Use only one then() - don't use catch()
    • pass a plain configuration object - don't use funcions to calculate properties
    • transformFileName property won't work - modify file names in the client side
  • Isolate this code in its own file containing only these code and getters for the embedded data, nothing more.

  • Asynchronous call: asynchronous call is not adequate for this but fs-to-json doesn't support a synchronous call, yet. However, you can be sure that the then() handler will be called synchronously, so you assign the result in a variable in the handler and can access it right away in the next statement.

The same limitations as with brfs. Only supports staticable analizable expressions.

Examples that won't work:

doesn't work and will generate a very big file including fs2json ! don't do it!

var pattern = 'spec/support/*' 
fs2json({ input: pattern }).then(files => {
  console.log(Object.keys(files))
})

The following will work but will generate a very big file including fs2json ! don't do it!

fs2json({ input: require('path').join(__dirname, 'spec', 'support', '**') }).then(files => {
  console.log(Object.keys(files))
})

TODO

  • override config.output so i
  • test with await

About

Browserify transformation to embed files (globs) as JSON as JSON variables using fs-to-json

Resources

License

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published