Huge News!Announcing our $40M Series B led by Abstract Ventures.Learn More
Socket
Sign inDemoInstall
Socket

babel-private-properties

Package Overview
Dependencies
Maintainers
1
Versions
4
Alerts
File Explorer

Advanced tools

Socket logo

Install Socket

Detect and block malicious and high-risk dependencies

Install

babel-private-properties

A babel plugin which will convert all private properties (identifiers) to md5 hashes.

  • 0.1.1-0
  • latest
  • Source
  • npm
  • Socket score

Version published
Maintainers
1
Created
Source

npm version

babel-private-properties

When building a library it is common practice to mark properties as private by prefixing them with an underscore.

This plugin appends a few characters to any properties that are prefixed with an underscore to make it even clearer that these properties are intended for internal use only. The characters are the first part of an md5 hash of the identifier. You can provide a custom salt making it possible to generate different hashes for each build.

Install

npm install --save-dev babel-private-properties

Example

Transforms

function HelloLib(name) {
    // don't want users to access this directly
    this._name = name;
}

// don't want users to call this directly
HelloLib.prototype._getName = function() {
    return this._name;
};

// This method is public and should be called externally
HelloLib.prototype.sayHello = function() {
    var name = this._getName();
    console.log("Hello "+name+"!");
};

module.exports = HelloLib;

to

function HelloLib(name) {
    // don't want users to access this directly
    this._name9aca = name;
}

// don't want users to call this directly
HelloLib.prototype._getName411c = function () {
    return this._name9aca;
};

// This method is public and should be called externally
HelloLib.prototype.sayHello = function () {
    var name = this._getName411c();
    console.log("Hello " + name + "!");
};

module.exports = HelloLib;

Usage

.babelrc
{
  "plugins": ["babel-private-properties"]
}

Set plugin options using an array of [pluginName, optionsObject].

{
  "plugins": [["babel-private-properties", {
    "prefix": "_",
    "salt": "salt",
    "hashLength": 4,
    "replaceCompletely": false
  }]]
}
webpack.config.js
'module': {
  'loaders': [{
    'loader': 'babel-loader',
    'test': /\.js$/,
    'exclude': /node_modules/,
    'query': {
      'plugins': ['babel-private-properties']
    }
  }]
}

If the replaceCompletely option is true the identifiers will be replaced completley with its hash. This isn't recommended as even though it's incredibly unlikely a hash collision could occur. Keeping the original text prevents this.

Vary Hashes Per Build

If you supply the config with webpack you can change the salt dynamically.

'module': {
  'loaders': [{
    'loader': 'babel-loader',
    'test': /\.js$/,
    'exclude': /node_modules/,
    'query': {
      'plugins': [["babel-private-properties", {
        "salt": Math.random() // Each build will have unique private property names
      }]]
    }
  }]
}

Keywords

FAQs

Package last updated on 15 May 2016

Did you know?

Socket

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
  • Changelog

Packages

npm

Stay in touch

Get open source security insights delivered straight into your inbox.


  • Terms
  • Privacy
  • Security

Made with ⚡️ by Socket Inc