UNPKG

int-cli

Version:

INT is the new generation of bottom-up created system of IoT and blockchain

192 lines (191 loc) 7.65 kB
"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); const error_code_1 = require("../error_code"); const serializable_1 = require("../serializable"); class TransactionLogger { constructor(owner) { this.owner = owner; } async beginTransaction() { this.owner.appendLog(`{let trans = (await storage.beginTransaction()).value;`); return error_code_1.ErrorCode.RESULT_OK; } async commit() { this.owner.appendLog(`await trans.commit();}`); return error_code_1.ErrorCode.RESULT_OK; } async rollback() { this.owner.appendLog(`await trans.rollback();}`); return error_code_1.ErrorCode.RESULT_OK; } } class KeyValueLogger { constructor(owner, name) { this.owner = owner; this.name = name; } get(key) { return Promise.resolve({ err: error_code_1.ErrorCode.RESULT_NOT_SUPPORT }); } hexists(key, field) { return Promise.resolve({ err: error_code_1.ErrorCode.RESULT_NOT_SUPPORT }); } hget(key, field) { return Promise.resolve({ err: error_code_1.ErrorCode.RESULT_NOT_SUPPORT }); } hmget(key, fields) { return Promise.resolve({ err: error_code_1.ErrorCode.RESULT_NOT_SUPPORT }); } hlen(key) { return Promise.resolve({ err: error_code_1.ErrorCode.RESULT_NOT_SUPPORT }); } hkeys(key) { return Promise.resolve({ err: error_code_1.ErrorCode.RESULT_NOT_SUPPORT }); } hvalues(key) { return Promise.resolve({ err: error_code_1.ErrorCode.RESULT_NOT_SUPPORT }); } hgetall(key) { return Promise.resolve({ err: error_code_1.ErrorCode.RESULT_NOT_SUPPORT }); } lindex(key, index) { return Promise.resolve({ err: error_code_1.ErrorCode.RESULT_NOT_SUPPORT }); } llen(key) { return Promise.resolve({ err: error_code_1.ErrorCode.RESULT_NOT_SUPPORT }); } lrange(key, start, stop) { return Promise.resolve({ err: error_code_1.ErrorCode.RESULT_NOT_SUPPORT }); } async set(key, value) { this.owner.appendLog(`await ${this.name}.set(${serializable_1.toEvalText(key)}, ${serializable_1.toEvalText(value)});`); return { err: error_code_1.ErrorCode.RESULT_OK }; } // hash async hset(key, field, value) { this.owner.appendLog(`await ${this.name}.hset(${serializable_1.toEvalText(key)}, ${serializable_1.toEvalText(field)}, ${serializable_1.toEvalText(value)});`); return { err: error_code_1.ErrorCode.RESULT_OK }; } async hmset(key, fields, values) { this.owner.appendLog(`await ${this.name}.hmset(${serializable_1.toEvalText(key)}, ${serializable_1.toEvalText(fields)}, ${serializable_1.toEvalText(values)});`); return { err: error_code_1.ErrorCode.RESULT_OK }; } async hclean(key) { this.owner.appendLog(`await ${this.name}.hclean(${serializable_1.toEvalText(key)});`); return { err: error_code_1.ErrorCode.RESULT_OK }; } async hdel(key, field) { this.owner.appendLog(`await ${this.name}.hdel(${serializable_1.toEvalText(key)},${serializable_1.toEvalText(field)});`); return { err: error_code_1.ErrorCode.RESULT_OK }; } // array async lset(key, index, value) { this.owner.appendLog(`await ${this.name}.lset(${serializable_1.toEvalText(key)}, ${index}, ${serializable_1.toEvalText(value)});`); return { err: error_code_1.ErrorCode.RESULT_OK }; } async lpush(key, value) { this.owner.appendLog(`await ${this.name}.lpush(${serializable_1.toEvalText(key)}, ${serializable_1.toEvalText(value)});`); return { err: error_code_1.ErrorCode.RESULT_OK }; } async lpushx(key, value) { this.owner.appendLog(`await ${this.name}.lpushx(${serializable_1.toEvalText(key)}, ${serializable_1.toEvalText(value)});`); return { err: error_code_1.ErrorCode.RESULT_OK }; } async lpop(key) { this.owner.appendLog(`await ${this.name}.lpop(${serializable_1.toEvalText(key)});`); return { err: error_code_1.ErrorCode.RESULT_OK }; } async rpush(key, value) { this.owner.appendLog(`await ${this.name}.rpush(${serializable_1.toEvalText(key)}, ${serializable_1.toEvalText(value)});`); return { err: error_code_1.ErrorCode.RESULT_OK }; } async rpushx(key, value) { this.owner.appendLog(`await ${this.name}.rpushx(${serializable_1.toEvalText(key)}, ${serializable_1.toEvalText(value)});`); return { err: error_code_1.ErrorCode.RESULT_OK }; } async rpop(key) { this.owner.appendLog(`await ${this.name}.rpop(${serializable_1.toEvalText(key)});`); return { err: error_code_1.ErrorCode.RESULT_OK }; } async linsert(key, index, value) { this.owner.appendLog(`await ${this.name}.linsert(${serializable_1.toEvalText(key)}, ${index}, ${serializable_1.toEvalText(value)});`); return { err: error_code_1.ErrorCode.RESULT_OK }; } async lremove(key, index) { this.owner.appendLog(`await ${this.name}.lremove(${serializable_1.toEvalText(key)}, ${index});`); return { err: error_code_1.ErrorCode.RESULT_OK }; } } class DatabaseLogger { constructor(owner, name) { this.owner = owner; this.name = name; this.m_nextVal = 0; } _kvVal() { let val = `${this.name}kv${this.m_nextVal}`; ++this.m_nextVal; return val; } async createKeyValue(name) { let val = this._kvVal(); this.owner.appendLog(`let ${val} = (await ${this.name}.createKeyValue(${JSON.stringify(name)})).kv;`); return { err: error_code_1.ErrorCode.RESULT_OK, kv: new KeyValueLogger(this.owner, val) }; } async getReadWritableKeyValue(name) { let val = this._kvVal(); this.owner.appendLog(`let ${val} = (await ${this.name}.getReadWritableKeyValue(${JSON.stringify(name)})).kv;`); return { err: error_code_1.ErrorCode.RESULT_OK, kv: new KeyValueLogger(this.owner, val) }; } } class JStorageLogger { constructor() { this.m_log = ''; this.m_nextVal = 0; this.m_log = ''; } _dbVal() { let val = `db${this.m_nextVal}`; ++this.m_nextVal; return val; } get log() { return this.m_log; } redoOnStorage(storage) { return new Promise((resolve) => { eval(this.m_log); }); } encode(writer) { writer.writeVarString(this.m_log); return error_code_1.ErrorCode.RESULT_OK; } decode(reader) { this.m_log = reader.readVarString(); return error_code_1.ErrorCode.RESULT_OK; } init() { this.m_log = `const BigNumber = require('bignumber.js');async function redo() {`; } finish() { this.appendLog('}; redo().then(()=>{resolve(0);})'); } appendLog(log) { this.m_log += log; } async createDatabase(name) { let val = this._dbVal(); this.appendLog(`let ${val} = (await storage.createDatabase(${JSON.stringify(name)})).value;`); return { err: error_code_1.ErrorCode.RESULT_OK, value: new DatabaseLogger(this, val) }; } async getReadWritableDatabase(name) { let val = this._dbVal(); this.appendLog(`let ${val} = (await storage.getReadWritableDatabase(${JSON.stringify(name)})).value;`); return { err: error_code_1.ErrorCode.RESULT_OK, value: new DatabaseLogger(this, val) }; } async beginTransaction() { return { err: error_code_1.ErrorCode.RESULT_OK, value: new TransactionLogger(this) }; } } exports.JStorageLogger = JStorageLogger;