| 12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061 | var asn1 = require('../asn1');var inherits = require('inherits');var api = exports;api.define = function define(name, body) {  return new Entity(name, body);};function Entity(name, body) {  this.name = name;  this.body = body;  this.decoders = {};  this.encoders = {};};Entity.prototype._createNamed = function createNamed(base) {  var named;  try {    named = require('vm').runInThisContext(      '(function ' + this.name + '(entity) {\n' +      '  this._initNamed(entity);\n' +      '})'    );  } catch (e) {    named = function (entity) {      this._initNamed(entity);    };  }  inherits(named, base);  named.prototype._initNamed = function initnamed(entity) {    base.call(this, entity);  };  return new named(this);};Entity.prototype._getDecoder = function _getDecoder(enc) {  enc = enc || 'der';  // Lazily create decoder  if (!this.decoders.hasOwnProperty(enc))    this.decoders[enc] = this._createNamed(asn1.decoders[enc]);  return this.decoders[enc];};Entity.prototype.decode = function decode(data, enc, options) {  return this._getDecoder(enc).decode(data, options);};Entity.prototype._getEncoder = function _getEncoder(enc) {  enc = enc || 'der';  // Lazily create encoder  if (!this.encoders.hasOwnProperty(enc))    this.encoders[enc] = this._createNamed(asn1.encoders[enc]);  return this.encoders[enc];};Entity.prototype.encode = function encode(data, enc, /* internal */ reporter) {  return this._getEncoder(enc).encode(data, reporter);};
 |