You can not select more than 25 topics
			Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
		
		
		
		
		
			
		
			
				
					58 lines
				
				1.4 KiB
			
		
		
			
		
	
	
					58 lines
				
				1.4 KiB
			| 
								 
											3 years ago
										 
									 | 
							
								'use strict';
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								const encoders = require('./encoders');
							 | 
						||
| 
								 | 
							
								const decoders = require('./decoders');
							 | 
						||
| 
								 | 
							
								const inherits = require('inherits');
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								const 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) {
							 | 
						||
| 
								 | 
							
								  const name = this.name;
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								  function Generated(entity) {
							 | 
						||
| 
								 | 
							
								    this._initNamed(entity, name);
							 | 
						||
| 
								 | 
							
								  }
							 | 
						||
| 
								 | 
							
								  inherits(Generated, Base);
							 | 
						||
| 
								 | 
							
								  Generated.prototype._initNamed = function _initNamed(entity, name) {
							 | 
						||
| 
								 | 
							
								    Base.call(this, entity, name);
							 | 
						||
| 
								 | 
							
								  };
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								  return new Generated(this);
							 | 
						||
| 
								 | 
							
								};
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								Entity.prototype._getDecoder = function _getDecoder(enc) {
							 | 
						||
| 
								 | 
							
								  enc = enc || 'der';
							 | 
						||
| 
								 | 
							
								  // Lazily create decoder
							 | 
						||
| 
								 | 
							
								  if (!this.decoders.hasOwnProperty(enc))
							 | 
						||
| 
								 | 
							
								    this.decoders[enc] = this._createNamed(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(encoders[enc]);
							 | 
						||
| 
								 | 
							
								  return this.encoders[enc];
							 | 
						||
| 
								 | 
							
								};
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								Entity.prototype.encode = function encode(data, enc, /* internal */ reporter) {
							 | 
						||
| 
								 | 
							
								  return this._getEncoder(enc).encode(data, reporter);
							 | 
						||
| 
								 | 
							
								};
							 |