- Add GETTING_STARTED.md with quick start guide and development modes - Add INSTALL.sh automated installation script - Add INSTALLATION_CHECKLIST.md, INSTALLATION_SUCCESS.md, and INSTALLATION_SUMMARY.md - Add QUICK_REFERENCE.md for common commands - Add SETUP_GUIDE.md with detailed setup instructions - Update README.md with improved project overview - Add did-wallet app dependencies and node_modules
168 lines
4.6 KiB
JavaScript
168 lines
4.6 KiB
JavaScript
import {
|
|
Token,
|
|
Type
|
|
} from './token.js';
|
|
import * as uint from './0uint.js';
|
|
import * as negint from './1negint.js';
|
|
import * as bytes from './2bytes.js';
|
|
import * as string from './3string.js';
|
|
import * as array from './4array.js';
|
|
import * as map from './5map.js';
|
|
import * as tag from './6tag.js';
|
|
import * as float from './7float.js';
|
|
import { decodeErrPrefix } from './common.js';
|
|
import { fromArray } from './byte-utils.js';
|
|
function invalidMinor(data, pos, minor) {
|
|
throw new Error(`${ decodeErrPrefix } encountered invalid minor (${ minor }) for major ${ data[pos] >>> 5 }`);
|
|
}
|
|
function errorer(msg) {
|
|
return () => {
|
|
throw new Error(`${ decodeErrPrefix } ${ msg }`);
|
|
};
|
|
}
|
|
export const jump = [];
|
|
for (let i = 0; i <= 23; i++) {
|
|
jump[i] = invalidMinor;
|
|
}
|
|
jump[24] = uint.decodeUint8;
|
|
jump[25] = uint.decodeUint16;
|
|
jump[26] = uint.decodeUint32;
|
|
jump[27] = uint.decodeUint64;
|
|
jump[28] = invalidMinor;
|
|
jump[29] = invalidMinor;
|
|
jump[30] = invalidMinor;
|
|
jump[31] = invalidMinor;
|
|
for (let i = 32; i <= 55; i++) {
|
|
jump[i] = invalidMinor;
|
|
}
|
|
jump[56] = negint.decodeNegint8;
|
|
jump[57] = negint.decodeNegint16;
|
|
jump[58] = negint.decodeNegint32;
|
|
jump[59] = negint.decodeNegint64;
|
|
jump[60] = invalidMinor;
|
|
jump[61] = invalidMinor;
|
|
jump[62] = invalidMinor;
|
|
jump[63] = invalidMinor;
|
|
for (let i = 64; i <= 87; i++) {
|
|
jump[i] = bytes.decodeBytesCompact;
|
|
}
|
|
jump[88] = bytes.decodeBytes8;
|
|
jump[89] = bytes.decodeBytes16;
|
|
jump[90] = bytes.decodeBytes32;
|
|
jump[91] = bytes.decodeBytes64;
|
|
jump[92] = invalidMinor;
|
|
jump[93] = invalidMinor;
|
|
jump[94] = invalidMinor;
|
|
jump[95] = errorer('indefinite length bytes/strings are not supported');
|
|
for (let i = 96; i <= 119; i++) {
|
|
jump[i] = string.decodeStringCompact;
|
|
}
|
|
jump[120] = string.decodeString8;
|
|
jump[121] = string.decodeString16;
|
|
jump[122] = string.decodeString32;
|
|
jump[123] = string.decodeString64;
|
|
jump[124] = invalidMinor;
|
|
jump[125] = invalidMinor;
|
|
jump[126] = invalidMinor;
|
|
jump[127] = errorer('indefinite length bytes/strings are not supported');
|
|
for (let i = 128; i <= 151; i++) {
|
|
jump[i] = array.decodeArrayCompact;
|
|
}
|
|
jump[152] = array.decodeArray8;
|
|
jump[153] = array.decodeArray16;
|
|
jump[154] = array.decodeArray32;
|
|
jump[155] = array.decodeArray64;
|
|
jump[156] = invalidMinor;
|
|
jump[157] = invalidMinor;
|
|
jump[158] = invalidMinor;
|
|
jump[159] = array.decodeArrayIndefinite;
|
|
for (let i = 160; i <= 183; i++) {
|
|
jump[i] = map.decodeMapCompact;
|
|
}
|
|
jump[184] = map.decodeMap8;
|
|
jump[185] = map.decodeMap16;
|
|
jump[186] = map.decodeMap32;
|
|
jump[187] = map.decodeMap64;
|
|
jump[188] = invalidMinor;
|
|
jump[189] = invalidMinor;
|
|
jump[190] = invalidMinor;
|
|
jump[191] = map.decodeMapIndefinite;
|
|
for (let i = 192; i <= 215; i++) {
|
|
jump[i] = tag.decodeTagCompact;
|
|
}
|
|
jump[216] = tag.decodeTag8;
|
|
jump[217] = tag.decodeTag16;
|
|
jump[218] = tag.decodeTag32;
|
|
jump[219] = tag.decodeTag64;
|
|
jump[220] = invalidMinor;
|
|
jump[221] = invalidMinor;
|
|
jump[222] = invalidMinor;
|
|
jump[223] = invalidMinor;
|
|
for (let i = 224; i <= 243; i++) {
|
|
jump[i] = errorer('simple values are not supported');
|
|
}
|
|
jump[244] = invalidMinor;
|
|
jump[245] = invalidMinor;
|
|
jump[246] = invalidMinor;
|
|
jump[247] = float.decodeUndefined;
|
|
jump[248] = errorer('simple values are not supported');
|
|
jump[249] = float.decodeFloat16;
|
|
jump[250] = float.decodeFloat32;
|
|
jump[251] = float.decodeFloat64;
|
|
jump[252] = invalidMinor;
|
|
jump[253] = invalidMinor;
|
|
jump[254] = invalidMinor;
|
|
jump[255] = float.decodeBreak;
|
|
export const quick = [];
|
|
for (let i = 0; i < 24; i++) {
|
|
quick[i] = new Token(Type.uint, i, 1);
|
|
}
|
|
for (let i = -1; i >= -24; i--) {
|
|
quick[31 - i] = new Token(Type.negint, i, 1);
|
|
}
|
|
quick[64] = new Token(Type.bytes, new Uint8Array(0), 1);
|
|
quick[96] = new Token(Type.string, '', 1);
|
|
quick[128] = new Token(Type.array, 0, 1);
|
|
quick[160] = new Token(Type.map, 0, 1);
|
|
quick[244] = new Token(Type.false, false, 1);
|
|
quick[245] = new Token(Type.true, true, 1);
|
|
quick[246] = new Token(Type.null, null, 1);
|
|
export function quickEncodeToken(token) {
|
|
switch (token.type) {
|
|
case Type.false:
|
|
return fromArray([244]);
|
|
case Type.true:
|
|
return fromArray([245]);
|
|
case Type.null:
|
|
return fromArray([246]);
|
|
case Type.bytes:
|
|
if (!token.value.length) {
|
|
return fromArray([64]);
|
|
}
|
|
return;
|
|
case Type.string:
|
|
if (token.value === '') {
|
|
return fromArray([96]);
|
|
}
|
|
return;
|
|
case Type.array:
|
|
if (token.value === 0) {
|
|
return fromArray([128]);
|
|
}
|
|
return;
|
|
case Type.map:
|
|
if (token.value === 0) {
|
|
return fromArray([160]);
|
|
}
|
|
return;
|
|
case Type.uint:
|
|
if (token.value < 24) {
|
|
return fromArray([Number(token.value)]);
|
|
}
|
|
return;
|
|
case Type.negint:
|
|
if (token.value >= -24) {
|
|
return fromArray([31 - Number(token.value)]);
|
|
}
|
|
}
|
|
} |