Socket
Socket
Sign inDemoInstall

br-fs-to-json

Package Overview
Dependencies
88
Maintainers
1
Versions
7
Alerts
File Explorer

Advanced tools

Install Socket

Detect and block malicious and high-risk dependencies

Install

    br-fs-to-json

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


Version published
Weekly downloads
4
decreased by-20%
Maintainers
1
Created
Weekly downloads
 

Readme

Source

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

Keywords

FAQs

Last updated on 01 Jul 2018

Did you know?

Socket for GitHub automatically highlights issues in each pull request and monitors the health of all your open source dependencies. Discover the contents of your packages and block harmful activity before you install or update your dependencies.

Install

Related posts

SocketSocket SOC 2 Logo

Product

  • Package Alerts
  • Integrations
  • Docs
  • Pricing
  • FAQ
  • Roadmap

Stay in touch

Get open source security insights delivered straight into your inbox.


  • Terms
  • Privacy
  • Security

Made with ⚡️ by Socket Inc