Skip to content
Please note that GitHub no longer supports Internet Explorer.

We recommend upgrading to the latest Microsoft Edge, Google Chrome, or Firefox.

Learn more
This plugin converts object literal to JSON.parse
TypeScript JavaScript
Branch: master
Clone or download
Cannot retrieve the latest commit at this time.
Cannot retrieve the latest commit at this time.
Permalink
Type Name Latest commit message Commit time
Failed to load latest commit information.
.circleci
example convert array expression Jan 3, 2020
src convert array expression Jan 3, 2020
test/visitors ♻️ refactor array expression test Jan 3, 2020
typings/babel-plugin-tester (src) add minJSONStringSize option Nov 24, 2019
.eslintignore 🔧 (lint) fix ignore file Jul 2, 2019
.eslintrc.js ⬆️ upgrade dependecies Jan 2, 2020
.gitignore 🎉 (init) setup repo Jun 29, 2019
.prettierignore
.prettierrc.js 🔧 fix lint setting Jun 30, 2019
LICENSE 🎉 (init) setup repo Jun 29, 2019
README.md 📝 fix readme Jan 3, 2020
package.json 🔖 release 0.0.9 Jan 3, 2020
tsconfig.json 🐛 (src) fix bug Jul 7, 2019
yarn.lock ⬆️ upgrade dependecies Jan 2, 2020

README.md

babel-plugin-object-to-json-parse 🚀

CircleCI License: MIT npm version

This repository is inspired by this article

As long as the JSON string is only evaluated once, the JSON.parse approach is much faster compared to the JavaScript object literal, especially for cold loads.

Object to JSON.parse

This plugin converts from object literal to JSON.parse (example)

// before
const data = { foo: 42, bar: 1337 };

// after
const data = JSON.parse('{"foo":42,"bar":1337}');

How to use

Install

$ npm install babel-plugin-object-to-json-parse -D
or
$ yarn add babel-plugin-object-to-json-parse -D

setup .babelrc

{
  "plugins": ["object-to-json-parse"]
}

Options

minJSONStringSize (number, defaults to 1024)

The minJSONStringSize option will prevent the plugin from replacing an expression if the length of the JSON string given to JSON.parse is smaller than minJSONStringSize. For example, the following ensures all replacements have a string size of at least 1kb.

{
  "plugins": [
    ["object-to-json-parse", {
      "minJSONStringSize": 1024
    }]
  ]
}

Caution!!

this plugin may not be production ready

I just made this plugin for my understanding about AST and babel plugin.

this plugin doesn't support partially JSON expression

I decided not to support partially JSON expression like below.

Partially JSON expressions such as [notValid, {isValid:true}] ensuring {isValid:true} is transformed.

const data = { bar: invalid_object, foo: 'foo' }
↓
const data = { bar: invalid_object, JSON.parse('{"foo": "foo"}')}

This is because I think most large objects are not partially JSON expressions. JSON.parse() is much faster in the case that object is 10 kB or larger. Converting small object to JSON.parse expression is not meaningful.

this plugin produces output that only works in modern environments (e.g. Node.js v10+)

I don't care about some backwards compatibilities like this issue.

Development

Setup

$ git clone git@github.com:nd-02110114/babel-plugin-object-to-json-parse.git
$ cd babel-plugin-object-to-json-parse
$ yarn install

Tips

// example
$ yarn build && yarn example

// test
$ yarn test
You can’t perform that action at this time.