@eternl/tools 0.15.3 → 0.15.7

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/dist/index.cjs CHANGED
@@ -97,8 +97,10 @@ exports.canUpdate = require_lib_sleep.canUpdate;
97
97
  exports.changeTimezone = require_lib_time.changeTimezone;
98
98
  exports.copyToNewArray = require_lib_array.copyToNewArray;
99
99
  exports.crc8 = require_lib_crc8.crc8;
100
+ exports.createCborMetadataJsonFromJson = require_lib_json.createCborMetadataJsonFromJson;
100
101
  exports.createHash = require_lib_string.createHash;
101
102
  exports.createJsonFromCborJson = require_lib_json.createJsonFromCborJson;
103
+ exports.createJsonFromCborMetadataJson = require_lib_json.createJsonFromCborMetadataJson;
102
104
  exports.dataViewToArray = require_lib_hex.dataViewToArray;
103
105
  exports.decodeBech32 = require_lib_bech32.decodeBech32;
104
106
  exports.decodeBech32Buffer = require_lib_bech32.decodeBech32Buffer;
package/dist/index.d.cts CHANGED
@@ -1,4 +1,4 @@
1
- import { createJsonFromCborJson, deepMerge, getErrorMsg, getKeyValue, json } from "./lib/json.cjs";
1
+ import { createCborMetadataJsonFromJson, createJsonFromCborJson, createJsonFromCborMetadataJson, deepMerge, getErrorMsg, getKeyValue, json } from "./lib/json.cjs";
2
2
  import { el, er, error, sl, warn } from "./log/index.cjs";
3
3
  import { copyToNewArray, isSameArray, removeDuplicates, removeMissingNumbersFromArray, removeNumberFromArray, replaceItemsInList } from "./lib/array.cjs";
4
4
  import { PREFIX_BECH32, decodeBech32, decodeBech32Buffer, decodeBech32Key, encodeBech32 } from "./lib/bech32.cjs";
@@ -21,5 +21,5 @@ declare const toUIJson: <T>(value: T, stripBytes?: boolean) => T;
21
21
  declare const fromDbJson: <T>(value: T) => T;
22
22
  declare const fromDbJsonArray: <T>(value: T[]) => T[];
23
23
  //#endregion
24
- export { DEFAULT_SLEEP_MS, PREFIX_BECH32, blake2b160, blake2b224, blake2b224Str, blake2b256, blake2b256Str, byteaToHex, canUpdate, changeTimezone, copyToNewArray, crc8, createHash, createJsonFromCborJson, dataViewToArray, decodeBech32, decodeBech32Buffer, decodeBech32Key, decodeHex, deepMerge, el, elapsedSeconds, elapsedTime, encodeBech32, encodeHex, ensureLength, er, error, fileHashSubstringLength, fromDbJson, fromDbJsonArray, getErrorMsg, getKeyValue, getRandomId, getShortId, hasUnicode, hexToBytea, hexToDataView, isASCII, isHexString, isNumber, isSameArray, isTxHash, json, normalizeHex, normalizeHexList, now, prefix0x, removeDuplicates, removeMissingNumbersFromArray, removeNumberFromArray, replaceItemsInList, reverseString, setOffsetFromServer, sl, sleep, sleepDefault, sortHexList, toB64Array, toB64Buffer, toB64String, toBuffer, toBufferFromArray, toDbJson, toFraction, toHexArray, toHexBuffer, toHexString, toHexStringBuffer, toStringArray, toUIJson, trimAllStrings, trimQuotes, truncateAddress, truncateString, uint8ArrayToUtf8String, warn };
24
+ export { DEFAULT_SLEEP_MS, PREFIX_BECH32, blake2b160, blake2b224, blake2b224Str, blake2b256, blake2b256Str, byteaToHex, canUpdate, changeTimezone, copyToNewArray, crc8, createCborMetadataJsonFromJson, createHash, createJsonFromCborJson, createJsonFromCborMetadataJson, dataViewToArray, decodeBech32, decodeBech32Buffer, decodeBech32Key, decodeHex, deepMerge, el, elapsedSeconds, elapsedTime, encodeBech32, encodeHex, ensureLength, er, error, fileHashSubstringLength, fromDbJson, fromDbJsonArray, getErrorMsg, getKeyValue, getRandomId, getShortId, hasUnicode, hexToBytea, hexToDataView, isASCII, isHexString, isNumber, isSameArray, isTxHash, json, normalizeHex, normalizeHexList, now, prefix0x, removeDuplicates, removeMissingNumbersFromArray, removeNumberFromArray, replaceItemsInList, reverseString, setOffsetFromServer, sl, sleep, sleepDefault, sortHexList, toB64Array, toB64Buffer, toB64String, toBuffer, toBufferFromArray, toDbJson, toFraction, toHexArray, toHexBuffer, toHexString, toHexStringBuffer, toStringArray, toUIJson, trimAllStrings, trimQuotes, truncateAddress, truncateString, uint8ArrayToUtf8String, warn };
25
25
  //# sourceMappingURL=index.d.cts.map
package/dist/index.d.mts CHANGED
@@ -1,4 +1,4 @@
1
- import { createJsonFromCborJson, deepMerge, getErrorMsg, getKeyValue, json } from "./lib/json.mjs";
1
+ import { createCborMetadataJsonFromJson, createJsonFromCborJson, createJsonFromCborMetadataJson, deepMerge, getErrorMsg, getKeyValue, json } from "./lib/json.mjs";
2
2
  import { el, er, error, sl, warn } from "./log/index.mjs";
3
3
  import { copyToNewArray, isSameArray, removeDuplicates, removeMissingNumbersFromArray, removeNumberFromArray, replaceItemsInList } from "./lib/array.mjs";
4
4
  import { PREFIX_BECH32, decodeBech32, decodeBech32Buffer, decodeBech32Key, encodeBech32 } from "./lib/bech32.mjs";
@@ -21,5 +21,5 @@ declare const toUIJson: <T>(value: T, stripBytes?: boolean) => T;
21
21
  declare const fromDbJson: <T>(value: T) => T;
22
22
  declare const fromDbJsonArray: <T>(value: T[]) => T[];
23
23
  //#endregion
24
- export { DEFAULT_SLEEP_MS, PREFIX_BECH32, blake2b160, blake2b224, blake2b224Str, blake2b256, blake2b256Str, byteaToHex, canUpdate, changeTimezone, copyToNewArray, crc8, createHash, createJsonFromCborJson, dataViewToArray, decodeBech32, decodeBech32Buffer, decodeBech32Key, decodeHex, deepMerge, el, elapsedSeconds, elapsedTime, encodeBech32, encodeHex, ensureLength, er, error, fileHashSubstringLength, fromDbJson, fromDbJsonArray, getErrorMsg, getKeyValue, getRandomId, getShortId, hasUnicode, hexToBytea, hexToDataView, isASCII, isHexString, isNumber, isSameArray, isTxHash, json, normalizeHex, normalizeHexList, now, prefix0x, removeDuplicates, removeMissingNumbersFromArray, removeNumberFromArray, replaceItemsInList, reverseString, setOffsetFromServer, sl, sleep, sleepDefault, sortHexList, toB64Array, toB64Buffer, toB64String, toBuffer, toBufferFromArray, toDbJson, toFraction, toHexArray, toHexBuffer, toHexString, toHexStringBuffer, toStringArray, toUIJson, trimAllStrings, trimQuotes, truncateAddress, truncateString, uint8ArrayToUtf8String, warn };
24
+ export { DEFAULT_SLEEP_MS, PREFIX_BECH32, blake2b160, blake2b224, blake2b224Str, blake2b256, blake2b256Str, byteaToHex, canUpdate, changeTimezone, copyToNewArray, crc8, createCborMetadataJsonFromJson, createHash, createJsonFromCborJson, createJsonFromCborMetadataJson, dataViewToArray, decodeBech32, decodeBech32Buffer, decodeBech32Key, decodeHex, deepMerge, el, elapsedSeconds, elapsedTime, encodeBech32, encodeHex, ensureLength, er, error, fileHashSubstringLength, fromDbJson, fromDbJsonArray, getErrorMsg, getKeyValue, getRandomId, getShortId, hasUnicode, hexToBytea, hexToDataView, isASCII, isHexString, isNumber, isSameArray, isTxHash, json, normalizeHex, normalizeHexList, now, prefix0x, removeDuplicates, removeMissingNumbersFromArray, removeNumberFromArray, replaceItemsInList, reverseString, setOffsetFromServer, sl, sleep, sleepDefault, sortHexList, toB64Array, toB64Buffer, toB64String, toBuffer, toBufferFromArray, toDbJson, toFraction, toHexArray, toHexBuffer, toHexString, toHexStringBuffer, toStringArray, toUIJson, trimAllStrings, trimQuotes, truncateAddress, truncateString, uint8ArrayToUtf8String, warn };
25
25
  //# sourceMappingURL=index.d.mts.map
package/dist/index.mjs CHANGED
@@ -1,6 +1,6 @@
1
1
  import { createHash, ensureLength, reverseString, trimAllStrings, trimQuotes, truncateAddress, truncateString } from "./lib/string.mjs";
2
2
  import { byteaToHex, dataViewToArray, decodeHex, encodeHex, hasUnicode, hexToBytea, hexToDataView, isASCII, isHexString, isTxHash, normalizeHex, normalizeHexList, prefix0x, sortHexList, toB64Array, toB64Buffer, toB64String, toBuffer, toBufferFromArray, toHexArray, toHexBuffer, toHexString, toHexStringBuffer, toStringArray, uint8ArrayToUtf8String } from "./lib/hex.mjs";
3
- import { createJsonFromCborJson, deepMerge, getErrorMsg, getKeyValue, json } from "./lib/json.mjs";
3
+ import { createCborMetadataJsonFromJson, createJsonFromCborJson, createJsonFromCborMetadataJson, deepMerge, getErrorMsg, getKeyValue, json } from "./lib/json.mjs";
4
4
  import { el, er, error, sl, warn } from "./log/index.mjs";
5
5
  import { copyToNewArray, isSameArray, removeDuplicates, removeMissingNumbersFromArray, removeNumberFromArray, replaceItemsInList } from "./lib/array.mjs";
6
6
  import { PREFIX_BECH32, decodeBech32, decodeBech32Buffer, decodeBech32Key, encodeBech32 } from "./lib/bech32.mjs";
@@ -83,6 +83,6 @@ const fromDbJsonArray = (value) => {
83
83
  return value.map((item) => fromDbJson(item));
84
84
  };
85
85
  //#endregion
86
- export { DEFAULT_SLEEP_MS, PREFIX_BECH32, blake2b160, blake2b224, blake2b224Str, blake2b256, blake2b256Str, byteaToHex, canUpdate, changeTimezone, copyToNewArray, crc8, createHash, createJsonFromCborJson, dataViewToArray, decodeBech32, decodeBech32Buffer, decodeBech32Key, decodeHex, deepMerge, el, elapsedSeconds, elapsedTime, encodeBech32, encodeHex, ensureLength, er, error, fileHashSubstringLength, fromDbJson, fromDbJsonArray, getErrorMsg, getKeyValue, getRandomId, getShortId, hasUnicode, hexToBytea, hexToDataView, isASCII, isHexString, isNumber, isSameArray, isTxHash, json, normalizeHex, normalizeHexList, now, prefix0x, removeDuplicates, removeMissingNumbersFromArray, removeNumberFromArray, replaceItemsInList, reverseString, setOffsetFromServer, sl, sleep, sleepDefault, sortHexList, toB64Array, toB64Buffer, toB64String, toBuffer, toBufferFromArray, toDbJson, toFraction, toHexArray, toHexBuffer, toHexString, toHexStringBuffer, toStringArray, toUIJson, trimAllStrings, trimQuotes, truncateAddress, truncateString, uint8ArrayToUtf8String, warn };
86
+ export { DEFAULT_SLEEP_MS, PREFIX_BECH32, blake2b160, blake2b224, blake2b224Str, blake2b256, blake2b256Str, byteaToHex, canUpdate, changeTimezone, copyToNewArray, crc8, createCborMetadataJsonFromJson, createHash, createJsonFromCborJson, createJsonFromCborMetadataJson, dataViewToArray, decodeBech32, decodeBech32Buffer, decodeBech32Key, decodeHex, deepMerge, el, elapsedSeconds, elapsedTime, encodeBech32, encodeHex, ensureLength, er, error, fileHashSubstringLength, fromDbJson, fromDbJsonArray, getErrorMsg, getKeyValue, getRandomId, getShortId, hasUnicode, hexToBytea, hexToDataView, isASCII, isHexString, isNumber, isSameArray, isTxHash, json, normalizeHex, normalizeHexList, now, prefix0x, removeDuplicates, removeMissingNumbersFromArray, removeNumberFromArray, replaceItemsInList, reverseString, setOffsetFromServer, sl, sleep, sleepDefault, sortHexList, toB64Array, toB64Buffer, toB64String, toBuffer, toBufferFromArray, toDbJson, toFraction, toHexArray, toHexBuffer, toHexString, toHexStringBuffer, toStringArray, toUIJson, trimAllStrings, trimQuotes, truncateAddress, truncateString, uint8ArrayToUtf8String, warn };
87
87
 
88
88
  //# sourceMappingURL=index.mjs.map
package/dist/lib/json.cjs CHANGED
@@ -48,6 +48,121 @@ const cloneValue = (value) => {
48
48
  else if (getTypeOf(value) === "array") return quickCloneArray(value);
49
49
  return value;
50
50
  };
51
+ const CBOR_METADATA_JSON_TYPE = {
52
+ MAP: "map",
53
+ LIST: "list",
54
+ INTEGER: "integer",
55
+ BYTES: "bytes",
56
+ TEXT: "text"
57
+ };
58
+ const INTEGER_PATTERN = /^-?\d+$/;
59
+ const METADATA_LABEL_PATTERN = /^\d+$/;
60
+ const isPlainObject = (value) => {
61
+ if (!value || typeof value !== "object" || Array.isArray(value)) return false;
62
+ const proto = Object.getPrototypeOf(value);
63
+ return proto === Object.prototype || proto === null;
64
+ };
65
+ const isCborMetadataJsonType = (type) => type === CBOR_METADATA_JSON_TYPE.MAP || type === CBOR_METADATA_JSON_TYPE.LIST || type === CBOR_METADATA_JSON_TYPE.INTEGER || type === CBOR_METADATA_JSON_TYPE.BYTES || type === CBOR_METADATA_JSON_TYPE.TEXT;
66
+ const isCborMetadataJsonMetadatum = (value) => isPlainObject(value) && isCborMetadataJsonType(value.type);
67
+ const isCborMetadataJsonEntry = (value) => Array.isArray(value) && value.length === 2 && isCborMetadataJsonMetadatum(value[1]);
68
+ const isJsonMetadataEntry = (value) => Array.isArray(value) && value.length === 2 && isMetadataLabelJson(value[0]);
69
+ const toStringValue = (value) => {
70
+ if (typeof value === "string") return value;
71
+ if (value instanceof String) return value.toString();
72
+ if (typeof value === "number" || typeof value === "bigint") return value.toString();
73
+ const valueWithToString = value;
74
+ if (typeof valueWithToString?.toString === "function") return valueWithToString.toString();
75
+ return String(value);
76
+ };
77
+ const toSafeIntegerJson = (value) => {
78
+ const text = toStringValue(value);
79
+ if (!INTEGER_PATTERN.test(text)) return text;
80
+ const numberValue = Number(text);
81
+ if (Number.isSafeInteger(numberValue) && BigInt(numberValue) === BigInt(text)) return numberValue;
82
+ return text;
83
+ };
84
+ const isMetadataLabelJson = (value) => {
85
+ if (typeof value === "number") return Number.isSafeInteger(value) && Number.isInteger(value) && value >= 0;
86
+ else if (typeof value === "bigint") return value >= 0n;
87
+ else if (typeof value === "string") return METADATA_LABEL_PATTERN.test(value);
88
+ return false;
89
+ };
90
+ const createJsonFromCborMetadataLabelJson = (value) => toStringValue(value);
91
+ const createCborMetadataLabelJsonFromJson = (value) => {
92
+ if (!isMetadataLabelJson(value)) throw new Error(`Invalid metadata label: ${toStringValue(value)}`);
93
+ return toStringValue(value);
94
+ };
95
+ const createPropertyKeyFromMetadataJson = (value) => {
96
+ if (typeof value === "string") return value;
97
+ if (typeof value === "number") return value.toString();
98
+ return JSON.stringify(value);
99
+ };
100
+ const createJsonFromCborMetadataMetadatumJson = (source) => {
101
+ const type = source.type;
102
+ if (type === CBOR_METADATA_JSON_TYPE.MAP) {
103
+ const target = {};
104
+ const entries = Array.isArray(source.map) ? source.map : [];
105
+ for (const entry of entries) {
106
+ if (!Array.isArray(entry) || entry.length !== 2) continue;
107
+ const key = createJsonFromCborMetadataJson(entry[0]);
108
+ const value = createJsonFromCborMetadataJson(entry[1]);
109
+ target[createPropertyKeyFromMetadataJson(key)] = value;
110
+ }
111
+ return target;
112
+ }
113
+ if (type === CBOR_METADATA_JSON_TYPE.LIST) return (Array.isArray(source.list) ? source.list : []).map((entry) => createJsonFromCborMetadataJson(entry));
114
+ if (type === CBOR_METADATA_JSON_TYPE.INTEGER) return toSafeIntegerJson(source.value);
115
+ if (type === CBOR_METADATA_JSON_TYPE.BYTES) return toStringValue(source.bytes);
116
+ if (type === CBOR_METADATA_JSON_TYPE.TEXT) return toStringValue(source.text);
117
+ return source;
118
+ };
119
+ const createJsonFromCborMetadataJson = (source) => {
120
+ if (isCborMetadataJsonEntry(source)) return [createJsonFromCborMetadataLabelJson(source[0]), createJsonFromCborMetadataJson(source[1])];
121
+ if (isCborMetadataJsonMetadatum(source)) return createJsonFromCborMetadataMetadatumJson(source);
122
+ if (Array.isArray(source)) return source.map((entry) => createJsonFromCborMetadataJson(entry));
123
+ if (isPlainObject(source)) {
124
+ const target = {};
125
+ for (const [key, value] of Object.entries(source)) target[key] = createJsonFromCborMetadataJson(value);
126
+ return target;
127
+ }
128
+ return source;
129
+ };
130
+ const createCborMetadataMetadatumJsonFromJson = (source, label = "metadata") => {
131
+ if (source === null) throw new Error(`${label}: null not allowed in metadata`);
132
+ if (typeof source === "boolean") throw new Error(`${label}: bools not allowed in metadata`);
133
+ if (typeof source === "bigint") return {
134
+ type: CBOR_METADATA_JSON_TYPE.INTEGER,
135
+ value: source.toString()
136
+ };
137
+ if (typeof source === "number") {
138
+ if (!Number.isInteger(source)) throw new Error(`${label}: floats not allowed in metadata`);
139
+ return {
140
+ type: CBOR_METADATA_JSON_TYPE.INTEGER,
141
+ value: source.toString()
142
+ };
143
+ }
144
+ if (typeof source === "string" || source instanceof String) return {
145
+ type: CBOR_METADATA_JSON_TYPE.TEXT,
146
+ text: source.toString()
147
+ };
148
+ if (Array.isArray(source)) return {
149
+ type: CBOR_METADATA_JSON_TYPE.LIST,
150
+ list: source.map((entry, index) => createCborMetadataMetadatumJsonFromJson(entry, `${label}[${index}]`))
151
+ };
152
+ if (isPlainObject(source)) return {
153
+ type: CBOR_METADATA_JSON_TYPE.MAP,
154
+ map: Object.entries(source).map(([key, value]) => [{
155
+ type: CBOR_METADATA_JSON_TYPE.TEXT,
156
+ text: key
157
+ }, createCborMetadataMetadatumJsonFromJson(value, `${label}.${key}`)])
158
+ };
159
+ throw new Error(`${label}: unsupported metadata type`);
160
+ };
161
+ const createCborMetadataJsonFromJson = (source) => {
162
+ if (isJsonMetadataEntry(source)) return [createCborMetadataLabelJsonFromJson(source[0]), createCborMetadataMetadatumJsonFromJson(source[1], `metadata.${toStringValue(source[0])}`)];
163
+ if (Array.isArray(source) && source.every(isJsonMetadataEntry)) return source.map((entry) => createCborMetadataJsonFromJson(entry));
164
+ return createCborMetadataMetadatumJsonFromJson(source);
165
+ };
51
166
  const createJsonFromCborJson = (source, target, index, doDecodeHex = true) => {
52
167
  try {
53
168
  if ("bytes" in source && !Number.isNaN(index)) target[index] = doDecodeHex ? require_lib_hex.decodeHex(source.bytes) : require_lib_hex.prefix0x(source.bytes);
@@ -82,7 +197,9 @@ const getKeyValue = (input) => {
82
197
  } : null;
83
198
  };
84
199
  //#endregion
200
+ exports.createCborMetadataJsonFromJson = createCborMetadataJsonFromJson;
85
201
  exports.createJsonFromCborJson = createJsonFromCborJson;
202
+ exports.createJsonFromCborMetadataJson = createJsonFromCborMetadataJson;
86
203
  exports.deepMerge = deepMerge;
87
204
  exports.getErrorMsg = getErrorMsg;
88
205
  exports.getKeyValue = getKeyValue;
@@ -1 +1 @@
1
- {"version":3,"file":"json.cjs","names":["decodeHex","prefix0x"],"sources":["../../src/lib/json.ts"],"sourcesContent":["import {\n decodeHex,\n prefix0x,\n} from './hex'\n\nexport const json = (obj: any) => JSON.parse(JSON.stringify(obj))\n\nexport const getErrorMsg = (err: any): string => err?.message ?? (typeof err === 'string' ? err : JSON.stringify(err))\n\n// https://github.com/saikojosh/Object-Assign-Deep/blob/master/objectAssignDeep.js\n\nexport const deepMerge = (target: any, _objects: any[] = [], _options?: { arrayBehaviour: 'replace' | 'merge' }) => {\n\n const options = {\n\n arrayBehaviour: _options?.arrayBehaviour ?? 'replace',\n\n };\n\n const objects = _objects.map(object => object || {})\n const output = target || {}\n\n for (let i = 0; i < objects.length; i++) {\n\n const object = objects[i]\n const keys = Object.keys(object)\n\n for (let k = 0; k < keys.length; k++) {\n\n const key = keys[k]!\n const value = object[key]\n const type = getTypeOf(value)\n\n const existingValueType = getTypeOf(output[key])\n\n if (type === 'object') {\n\n if (existingValueType !== 'undefined') {\n\n const existingValue = (existingValueType === 'object' ? output[key] : {})\n\n output[key] = deepMerge({}, [existingValue, quickCloneObject(value)], options)\n\n } else {\n\n output[key] = quickCloneObject(value)\n }\n\n } else if (type === 'array') {\n\n if (existingValueType === 'array') {\n\n const newValue = quickCloneArray(value)\n\n output[key] = (options.arrayBehaviour === 'merge' ? output[key].concat(newValue) : newValue)\n\n } else {\n\n output[key] = quickCloneArray(value)\n }\n\n } else {\n\n output[key] = value\n }\n }\n }\n\n return output\n\n}\n\nconst getTypeOf = (input: any) => {\n\n if ( input === null) { return 'null' }\n else if (typeof input === 'undefined') { return 'undefined' }\n else if (typeof input === 'object') { return (Array.isArray(input) ? 'array' : 'object') }\n\n return typeof input\n}\n\nconst quickCloneObject = (input: any) => {\n\n const output: any = {}\n\n for (const key in input) {\n\n if (!input.hasOwnProperty(key)) { continue }\n\n output[key] = cloneValue(input[key])\n }\n\n return output\n}\n\nconst quickCloneArray = (input: any[]): any[] => {\n\n return input.map(cloneValue)\n}\n\nconst cloneValue = (value: any) => {\n\n if (getTypeOf(value) === 'object') { return quickCloneObject(value) }\n else if (getTypeOf(value) === 'array') { return quickCloneArray( value) }\n\n return value\n}\n\nexport const createJsonFromCborJson = (source: any, target: any, index?: number, doDecodeHex: boolean = true): void => {\n\n try {\n\n if ('bytes' in source && !Number.isNaN(index)) { // raw bytes value, must be an array, decode hex\n\n target[index!] = doDecodeHex ? decodeHex(source.bytes) : prefix0x(source.bytes)\n\n } else if ('int' in source && !Number.isNaN(index)) { // raw int value, must be an array\n\n target[index!] = source.int\n\n } else if ('string' in source && !Number.isNaN(index)) { // raw string value, must be an array\n\n target[index!] = source.string\n\n } else if (source?.k?.bytes || source?.k?.string || source?.k?.int) { // key/value pair\n\n const key = source?.k?.bytes ? (doDecodeHex ? decodeHex(source.k.bytes) : source.k.bytes) : source?.k?.string || source?.k?.int.toString()\n const value = source.v\n\n if ('bytes' in value) { // bytes value, decode hex\n\n target[key] = doDecodeHex ? decodeHex(value.bytes) : prefix0x(value.bytes)\n\n } else if ('int' in value) { // int value\n\n target[key] = value.int\n\n } else if ('string' in value) { // string value\n\n target[key] = value.string\n\n } else if ('list' in value) { // array, init array and recursively add entries\n\n target[key] = new Array(value.list.length)\n\n createJsonFromCborJson(value, target[key], index, doDecodeHex)\n\n } else if ('map' in value) { // map, init object and recursively parse\n\n target[key] = {}\n\n createJsonFromCborJson(value, target[key], index, doDecodeHex)\n }\n\n } else if ('map' in source) { // object in list format\n\n for (let i = 0; i < source.map.length; i++) {\n\n createJsonFromCborJson(source.map[i], target, index, doDecodeHex)\n }\n\n } else if ('list' in source) { // array\n\n for (let i = 0; i < source.list.length; i++) {\n\n if ('map' in source.list[i]) { // array of objects\n\n target[i] = {}\n\n createJsonFromCborJson(source.list[i], target[i], index, doDecodeHex)\n\n } else { // array of raw values\n\n createJsonFromCborJson(source.list[i], target, i, doDecodeHex)\n }\n }\n }\n\n } catch (e: any) { }\n}\n\nexport const getKeyValue = (input: string | null) => {\n\n if (!input) { return null }\n\n const value = input.match(/\"(.*?)\":\"(.*)\"/)\n\n return value ? { key: value[1], value: value[2] } : null\n}\n"],"mappings":"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"}
1
+ {"version":3,"file":"json.cjs","names":["decodeHex","prefix0x"],"sources":["../../src/lib/json.ts"],"sourcesContent":["import {\n decodeHex,\n prefix0x,\n} from './hex'\n\nexport const json = (obj: any) => JSON.parse(JSON.stringify(obj))\n\nexport const getErrorMsg = (err: any): string => err?.message ?? (typeof err === 'string' ? err : JSON.stringify(err))\n\n// https://github.com/saikojosh/Object-Assign-Deep/blob/master/objectAssignDeep.js\n\nexport const deepMerge = (target: any, _objects: any[] = [], _options?: { arrayBehaviour: 'replace' | 'merge' }) => {\n\n const options = {\n\n arrayBehaviour: _options?.arrayBehaviour ?? 'replace',\n\n };\n\n const objects = _objects.map(object => object || {})\n const output = target || {}\n\n for (let i = 0; i < objects.length; i++) {\n\n const object = objects[i]\n const keys = Object.keys(object)\n\n for (let k = 0; k < keys.length; k++) {\n\n const key = keys[k]!\n const value = object[key]\n const type = getTypeOf(value)\n\n const existingValueType = getTypeOf(output[key])\n\n if (type === 'object') {\n\n if (existingValueType !== 'undefined') {\n\n const existingValue = (existingValueType === 'object' ? output[key] : {})\n\n output[key] = deepMerge({}, [existingValue, quickCloneObject(value)], options)\n\n } else {\n\n output[key] = quickCloneObject(value)\n }\n\n } else if (type === 'array') {\n\n if (existingValueType === 'array') {\n\n const newValue = quickCloneArray(value)\n\n output[key] = (options.arrayBehaviour === 'merge' ? output[key].concat(newValue) : newValue)\n\n } else {\n\n output[key] = quickCloneArray(value)\n }\n\n } else {\n\n output[key] = value\n }\n }\n }\n\n return output\n\n}\n\nconst getTypeOf = (input: any) => {\n\n if ( input === null) { return 'null' }\n else if (typeof input === 'undefined') { return 'undefined' }\n else if (typeof input === 'object') { return (Array.isArray(input) ? 'array' : 'object') }\n\n return typeof input\n}\n\nconst quickCloneObject = (input: any) => {\n\n const output: any = {}\n\n for (const key in input) {\n\n if (!input.hasOwnProperty(key)) { continue }\n\n output[key] = cloneValue(input[key])\n }\n\n return output\n}\n\nconst quickCloneArray = (input: any[]): any[] => {\n\n return input.map(cloneValue)\n}\n\nconst cloneValue = (value: any) => {\n\n if (getTypeOf(value) === 'object') { return quickCloneObject(value) }\n else if (getTypeOf(value) === 'array') { return quickCloneArray( value) }\n\n return value\n}\n\nconst CBOR_METADATA_JSON_TYPE = {\n\n MAP: 'map',\n LIST: 'list',\n INTEGER: 'integer',\n BYTES: 'bytes',\n TEXT: 'text'\n} as const\n\nconst INTEGER_PATTERN = /^-?\\d+$/\nconst METADATA_LABEL_PATTERN = /^\\d+$/\n\ntype CborMetadataJsonType = typeof CBOR_METADATA_JSON_TYPE[keyof typeof CBOR_METADATA_JSON_TYPE]\n\ntype JsonRecord = Record<string, unknown>\n\nconst isPlainObject = (\n value: unknown\n): value is JsonRecord => {\n\n if (!value || typeof value !== 'object' || Array.isArray(value)) { return false }\n\n const proto = Object.getPrototypeOf(value)\n\n return proto === Object.prototype || proto === null\n}\n\nconst isCborMetadataJsonType = (\n type: unknown\n): type is CborMetadataJsonType =>\n type === CBOR_METADATA_JSON_TYPE.MAP ||\n type === CBOR_METADATA_JSON_TYPE.LIST ||\n type === CBOR_METADATA_JSON_TYPE.INTEGER ||\n type === CBOR_METADATA_JSON_TYPE.BYTES ||\n type === CBOR_METADATA_JSON_TYPE.TEXT\n\nconst isCborMetadataJsonMetadatum = (\n value: unknown\n): value is JsonRecord => isPlainObject(value) && isCborMetadataJsonType(value.type)\n\nconst isCborMetadataJsonEntry = (\n value: unknown\n): value is [unknown, JsonRecord] =>\n Array.isArray(value) && value.length === 2 && isCborMetadataJsonMetadatum(value[1])\n\nconst isJsonMetadataEntry = (\n value: unknown\n): value is [unknown, unknown] =>\n Array.isArray(value) && value.length === 2 && isMetadataLabelJson(value[0])\n\nconst toStringValue = (\n value: unknown\n): string => {\n\n if (typeof value === 'string') { return value }\n\n if (value instanceof String) { return value.toString() }\n\n if (typeof value === 'number' || typeof value === 'bigint') { return value.toString() }\n\n const valueWithToString = value as { toString?: () => string } | null | undefined\n\n if (typeof valueWithToString?.toString === 'function') { return valueWithToString.toString() }\n\n return String(value)\n}\n\nconst toSafeIntegerJson = (\n value: unknown\n): number | string => {\n\n const text = toStringValue(value)\n\n if (!INTEGER_PATTERN.test(text)) { return text }\n\n const numberValue = Number(text)\n\n if (Number.isSafeInteger(numberValue) && BigInt(numberValue) === BigInt(text)) {\n\n return numberValue\n }\n\n return text\n}\n\nconst isMetadataLabelJson = (\n value: unknown\n): boolean => {\n\n if (typeof value === 'number') { return Number.isSafeInteger(value) && Number.isInteger(value) && value >= 0 }\n else if (typeof value === 'bigint') { return value >= 0n }\n else if (typeof value === 'string') { return METADATA_LABEL_PATTERN.test(value) }\n\n return false\n}\n\nconst createJsonFromCborMetadataLabelJson = (\n value: unknown\n): string => toStringValue(value)\n\nconst createCborMetadataLabelJsonFromJson = (\n value: unknown\n): string => {\n\n if (!isMetadataLabelJson(value)) { throw new Error(`Invalid metadata label: ${toStringValue(value)}`) }\n\n return toStringValue(value)\n}\n\nconst createPropertyKeyFromMetadataJson = (\n value: unknown\n): string => {\n\n if (typeof value === 'string') { return value }\n if (typeof value === 'number') { return value.toString() }\n\n return JSON.stringify(value)\n}\n\nconst createJsonFromCborMetadataMetadatumJson = (\n source: JsonRecord\n): unknown => {\n\n const type = source.type\n\n if (type === CBOR_METADATA_JSON_TYPE.MAP) {\n\n const target: JsonRecord = {}\n const entries = Array.isArray(source.map) ? source.map : []\n\n for (const entry of entries) {\n\n if (!Array.isArray(entry) || entry.length !== 2) { continue }\n\n const key = createJsonFromCborMetadataJson(entry[0])\n const value = createJsonFromCborMetadataJson(entry[1])\n\n target[createPropertyKeyFromMetadataJson(key)] = value\n }\n\n return target\n }\n\n if (type === CBOR_METADATA_JSON_TYPE.LIST) {\n\n const entries = Array.isArray(source.list) ? source.list : []\n\n return entries.map((entry) => createJsonFromCborMetadataJson(entry))\n }\n\n if (type === CBOR_METADATA_JSON_TYPE.INTEGER) { return toSafeIntegerJson(source.value) }\n if (type === CBOR_METADATA_JSON_TYPE.BYTES) { return toStringValue(source.bytes) }\n if (type === CBOR_METADATA_JSON_TYPE.TEXT) { return toStringValue(source.text) }\n\n return source\n}\n\nexport const createJsonFromCborMetadataJson = (\n source: unknown\n): unknown => {\n\n if (isCborMetadataJsonEntry(source)) {\n\n return [\n createJsonFromCborMetadataLabelJson(source[0]),\n createJsonFromCborMetadataJson(source[1])\n ]\n }\n\n if (isCborMetadataJsonMetadatum(source)) {\n\n return createJsonFromCborMetadataMetadatumJson(source)\n }\n\n if (Array.isArray(source)) {\n\n return source.map((entry) => createJsonFromCborMetadataJson(entry))\n }\n\n if (isPlainObject(source)) {\n\n const target: JsonRecord = {}\n\n for (const [ key, value ] of Object.entries(source)) {\n\n target[key] = createJsonFromCborMetadataJson(value)\n }\n\n return target\n }\n\n return source\n}\n\nconst createCborMetadataMetadatumJsonFromJson = (\n source: unknown,\n label: string = 'metadata'\n): unknown => {\n\n if (source === null) { throw new Error(`${label}: null not allowed in metadata`) }\n if (typeof source === 'boolean') { throw new Error(`${label}: bools not allowed in metadata`) }\n\n if (typeof source === 'bigint') {\n\n return {\n type: CBOR_METADATA_JSON_TYPE.INTEGER,\n value: source.toString()\n }\n }\n\n if (typeof source === 'number') {\n\n if (!Number.isInteger(source)) { throw new Error(`${label}: floats not allowed in metadata`) }\n\n return {\n type: CBOR_METADATA_JSON_TYPE.INTEGER,\n value: source.toString()\n }\n }\n\n if (typeof source === 'string' || source instanceof String) {\n\n return {\n type: CBOR_METADATA_JSON_TYPE.TEXT,\n text: source.toString()\n }\n }\n\n if (Array.isArray(source)) {\n\n return {\n type: CBOR_METADATA_JSON_TYPE.LIST,\n list: source.map((entry, index) => createCborMetadataMetadatumJsonFromJson(entry, `${label}[${index}]`))\n }\n }\n\n if (isPlainObject(source)) {\n\n return {\n type: CBOR_METADATA_JSON_TYPE.MAP,\n map: Object.entries(source).map(([ key, value ]) => ([\n {\n type: CBOR_METADATA_JSON_TYPE.TEXT,\n text: key\n },\n createCborMetadataMetadatumJsonFromJson(value, `${label}.${key}`)\n ]))\n }\n }\n\n throw new Error(`${label}: unsupported metadata type`)\n}\n\nexport const createCborMetadataJsonFromJson = (\n source: unknown\n): unknown => {\n\n if (isJsonMetadataEntry(source)) {\n\n return [\n createCborMetadataLabelJsonFromJson(source[0]),\n createCborMetadataMetadatumJsonFromJson(source[1], `metadata.${toStringValue(source[0])}`)\n ]\n }\n\n if (Array.isArray(source) && source.every(isJsonMetadataEntry)) {\n\n return source.map((entry) => createCborMetadataJsonFromJson(entry))\n }\n\n return createCborMetadataMetadatumJsonFromJson(source)\n}\n\nexport const createJsonFromCborJson = (source: any, target: any, index?: number, doDecodeHex: boolean = true): void => {\n\n try {\n\n if ('bytes' in source && !Number.isNaN(index)) { // raw bytes value, must be an array, decode hex\n\n target[index!] = doDecodeHex ? decodeHex(source.bytes) : prefix0x(source.bytes)\n\n } else if ('int' in source && !Number.isNaN(index)) { // raw int value, must be an array\n\n target[index!] = source.int\n\n } else if ('string' in source && !Number.isNaN(index)) { // raw string value, must be an array\n\n target[index!] = source.string\n\n } else if (source?.k?.bytes || source?.k?.string || source?.k?.int) { // key/value pair\n\n const key = source?.k?.bytes ? (doDecodeHex ? decodeHex(source.k.bytes) : source.k.bytes) : source?.k?.string || source?.k?.int.toString()\n const value = source.v\n\n if ('bytes' in value) { // bytes value, decode hex\n\n target[key] = doDecodeHex ? decodeHex(value.bytes) : prefix0x(value.bytes)\n\n } else if ('int' in value) { // int value\n\n target[key] = value.int\n\n } else if ('string' in value) { // string value\n\n target[key] = value.string\n\n } else if ('list' in value) { // array, init array and recursively add entries\n\n target[key] = new Array(value.list.length)\n\n createJsonFromCborJson(value, target[key], index, doDecodeHex)\n\n } else if ('map' in value) { // map, init object and recursively parse\n\n target[key] = {}\n\n createJsonFromCborJson(value, target[key], index, doDecodeHex)\n }\n\n } else if ('map' in source) { // object in list format\n\n for (let i = 0; i < source.map.length; i++) {\n\n createJsonFromCborJson(source.map[i], target, index, doDecodeHex)\n }\n\n } else if ('list' in source) { // array\n\n for (let i = 0; i < source.list.length; i++) {\n\n if ('map' in source.list[i]) { // array of objects\n\n target[i] = {}\n\n createJsonFromCborJson(source.list[i], target[i], index, doDecodeHex)\n\n } else { // array of raw values\n\n createJsonFromCborJson(source.list[i], target, i, doDecodeHex)\n }\n }\n }\n\n } catch (e: any) { }\n}\n\nexport const getKeyValue = (input: string | null) => {\n\n if (!input) { return null }\n\n const value = input.match(/\"(.*?)\":\"(.*)\"/)\n\n return value ? { key: value[1], value: value[2] } : null\n}\n"],"mappings":"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"}
@@ -4,11 +4,13 @@ declare const getErrorMsg: (err: any) => string;
4
4
  declare const deepMerge: (target: any, _objects?: any[], _options?: {
5
5
  arrayBehaviour: "replace" | "merge";
6
6
  }) => any;
7
+ declare const createJsonFromCborMetadataJson: (source: unknown) => unknown;
8
+ declare const createCborMetadataJsonFromJson: (source: unknown) => unknown;
7
9
  declare const createJsonFromCborJson: (source: any, target: any, index?: number, doDecodeHex?: boolean) => void;
8
10
  declare const getKeyValue: (input: string | null) => {
9
11
  key: string | undefined;
10
12
  value: string | undefined;
11
13
  } | null;
12
14
  //#endregion
13
- export { createJsonFromCborJson, deepMerge, getErrorMsg, getKeyValue, json };
15
+ export { createCborMetadataJsonFromJson, createJsonFromCborJson, createJsonFromCborMetadataJson, deepMerge, getErrorMsg, getKeyValue, json };
14
16
  //# sourceMappingURL=json.d.cts.map
@@ -1 +1 @@
1
- {"version":3,"file":"json.d.cts","names":[],"sources":["../../src/lib/json.ts"],"mappings":";cAKa,IAAA,GAAoB,GAAA;AAAA,cAEpB,WAAA,GAAoB,GAAA;AAAA,cAIpB,SAAA,GAAqB,MAAA,OAAa,QAAA,UAAsB,QAAA;EAAa,cAAA;AAAA;AAAA,cAiGrE,sBAAA,GAA0B,MAAA,OAAa,MAAA,OAAa,KAAA,WAAgB,WAAA;AAAA,cAyEpE,WAAA,GAAoB,KAAA"}
1
+ {"version":3,"file":"json.d.cts","names":[],"sources":["../../src/lib/json.ts"],"mappings":";cAKa,IAAA,GAAoB,GAAA;AAAA,cAEpB,WAAA,GAAoB,GAAA;AAAA,cAIpB,SAAA,GAAqB,MAAA,OAAa,QAAA,UAAsB,QAAA;EAAa,cAAA;AAAA;AAAA,cA8PrE,8BAAA,GACX,MAAA;AAAA,cA+FW,8BAAA,GACX,MAAA;AAAA,cAmBW,sBAAA,GAA0B,MAAA,OAAa,MAAA,OAAa,KAAA,WAAgB,WAAA;AAAA,cAyEpE,WAAA,GAAoB,KAAA"}
@@ -4,11 +4,13 @@ declare const getErrorMsg: (err: any) => string;
4
4
  declare const deepMerge: (target: any, _objects?: any[], _options?: {
5
5
  arrayBehaviour: "replace" | "merge";
6
6
  }) => any;
7
+ declare const createJsonFromCborMetadataJson: (source: unknown) => unknown;
8
+ declare const createCborMetadataJsonFromJson: (source: unknown) => unknown;
7
9
  declare const createJsonFromCborJson: (source: any, target: any, index?: number, doDecodeHex?: boolean) => void;
8
10
  declare const getKeyValue: (input: string | null) => {
9
11
  key: string | undefined;
10
12
  value: string | undefined;
11
13
  } | null;
12
14
  //#endregion
13
- export { createJsonFromCborJson, deepMerge, getErrorMsg, getKeyValue, json };
15
+ export { createCborMetadataJsonFromJson, createJsonFromCborJson, createJsonFromCborMetadataJson, deepMerge, getErrorMsg, getKeyValue, json };
14
16
  //# sourceMappingURL=json.d.mts.map
@@ -1 +1 @@
1
- {"version":3,"file":"json.d.mts","names":[],"sources":["../../src/lib/json.ts"],"mappings":";cAKa,IAAA,GAAoB,GAAA;AAAA,cAEpB,WAAA,GAAoB,GAAA;AAAA,cAIpB,SAAA,GAAqB,MAAA,OAAa,QAAA,UAAsB,QAAA;EAAa,cAAA;AAAA;AAAA,cAiGrE,sBAAA,GAA0B,MAAA,OAAa,MAAA,OAAa,KAAA,WAAgB,WAAA;AAAA,cAyEpE,WAAA,GAAoB,KAAA"}
1
+ {"version":3,"file":"json.d.mts","names":[],"sources":["../../src/lib/json.ts"],"mappings":";cAKa,IAAA,GAAoB,GAAA;AAAA,cAEpB,WAAA,GAAoB,GAAA;AAAA,cAIpB,SAAA,GAAqB,MAAA,OAAa,QAAA,UAAsB,QAAA;EAAa,cAAA;AAAA;AAAA,cA8PrE,8BAAA,GACX,MAAA;AAAA,cA+FW,8BAAA,GACX,MAAA;AAAA,cAmBW,sBAAA,GAA0B,MAAA,OAAa,MAAA,OAAa,KAAA,WAAgB,WAAA;AAAA,cAyEpE,WAAA,GAAoB,KAAA"}
package/dist/lib/json.mjs CHANGED
@@ -47,6 +47,121 @@ const cloneValue = (value) => {
47
47
  else if (getTypeOf(value) === "array") return quickCloneArray(value);
48
48
  return value;
49
49
  };
50
+ const CBOR_METADATA_JSON_TYPE = {
51
+ MAP: "map",
52
+ LIST: "list",
53
+ INTEGER: "integer",
54
+ BYTES: "bytes",
55
+ TEXT: "text"
56
+ };
57
+ const INTEGER_PATTERN = /^-?\d+$/;
58
+ const METADATA_LABEL_PATTERN = /^\d+$/;
59
+ const isPlainObject = (value) => {
60
+ if (!value || typeof value !== "object" || Array.isArray(value)) return false;
61
+ const proto = Object.getPrototypeOf(value);
62
+ return proto === Object.prototype || proto === null;
63
+ };
64
+ const isCborMetadataJsonType = (type) => type === CBOR_METADATA_JSON_TYPE.MAP || type === CBOR_METADATA_JSON_TYPE.LIST || type === CBOR_METADATA_JSON_TYPE.INTEGER || type === CBOR_METADATA_JSON_TYPE.BYTES || type === CBOR_METADATA_JSON_TYPE.TEXT;
65
+ const isCborMetadataJsonMetadatum = (value) => isPlainObject(value) && isCborMetadataJsonType(value.type);
66
+ const isCborMetadataJsonEntry = (value) => Array.isArray(value) && value.length === 2 && isCborMetadataJsonMetadatum(value[1]);
67
+ const isJsonMetadataEntry = (value) => Array.isArray(value) && value.length === 2 && isMetadataLabelJson(value[0]);
68
+ const toStringValue = (value) => {
69
+ if (typeof value === "string") return value;
70
+ if (value instanceof String) return value.toString();
71
+ if (typeof value === "number" || typeof value === "bigint") return value.toString();
72
+ const valueWithToString = value;
73
+ if (typeof valueWithToString?.toString === "function") return valueWithToString.toString();
74
+ return String(value);
75
+ };
76
+ const toSafeIntegerJson = (value) => {
77
+ const text = toStringValue(value);
78
+ if (!INTEGER_PATTERN.test(text)) return text;
79
+ const numberValue = Number(text);
80
+ if (Number.isSafeInteger(numberValue) && BigInt(numberValue) === BigInt(text)) return numberValue;
81
+ return text;
82
+ };
83
+ const isMetadataLabelJson = (value) => {
84
+ if (typeof value === "number") return Number.isSafeInteger(value) && Number.isInteger(value) && value >= 0;
85
+ else if (typeof value === "bigint") return value >= 0n;
86
+ else if (typeof value === "string") return METADATA_LABEL_PATTERN.test(value);
87
+ return false;
88
+ };
89
+ const createJsonFromCborMetadataLabelJson = (value) => toStringValue(value);
90
+ const createCborMetadataLabelJsonFromJson = (value) => {
91
+ if (!isMetadataLabelJson(value)) throw new Error(`Invalid metadata label: ${toStringValue(value)}`);
92
+ return toStringValue(value);
93
+ };
94
+ const createPropertyKeyFromMetadataJson = (value) => {
95
+ if (typeof value === "string") return value;
96
+ if (typeof value === "number") return value.toString();
97
+ return JSON.stringify(value);
98
+ };
99
+ const createJsonFromCborMetadataMetadatumJson = (source) => {
100
+ const type = source.type;
101
+ if (type === CBOR_METADATA_JSON_TYPE.MAP) {
102
+ const target = {};
103
+ const entries = Array.isArray(source.map) ? source.map : [];
104
+ for (const entry of entries) {
105
+ if (!Array.isArray(entry) || entry.length !== 2) continue;
106
+ const key = createJsonFromCborMetadataJson(entry[0]);
107
+ const value = createJsonFromCborMetadataJson(entry[1]);
108
+ target[createPropertyKeyFromMetadataJson(key)] = value;
109
+ }
110
+ return target;
111
+ }
112
+ if (type === CBOR_METADATA_JSON_TYPE.LIST) return (Array.isArray(source.list) ? source.list : []).map((entry) => createJsonFromCborMetadataJson(entry));
113
+ if (type === CBOR_METADATA_JSON_TYPE.INTEGER) return toSafeIntegerJson(source.value);
114
+ if (type === CBOR_METADATA_JSON_TYPE.BYTES) return toStringValue(source.bytes);
115
+ if (type === CBOR_METADATA_JSON_TYPE.TEXT) return toStringValue(source.text);
116
+ return source;
117
+ };
118
+ const createJsonFromCborMetadataJson = (source) => {
119
+ if (isCborMetadataJsonEntry(source)) return [createJsonFromCborMetadataLabelJson(source[0]), createJsonFromCborMetadataJson(source[1])];
120
+ if (isCborMetadataJsonMetadatum(source)) return createJsonFromCborMetadataMetadatumJson(source);
121
+ if (Array.isArray(source)) return source.map((entry) => createJsonFromCborMetadataJson(entry));
122
+ if (isPlainObject(source)) {
123
+ const target = {};
124
+ for (const [key, value] of Object.entries(source)) target[key] = createJsonFromCborMetadataJson(value);
125
+ return target;
126
+ }
127
+ return source;
128
+ };
129
+ const createCborMetadataMetadatumJsonFromJson = (source, label = "metadata") => {
130
+ if (source === null) throw new Error(`${label}: null not allowed in metadata`);
131
+ if (typeof source === "boolean") throw new Error(`${label}: bools not allowed in metadata`);
132
+ if (typeof source === "bigint") return {
133
+ type: CBOR_METADATA_JSON_TYPE.INTEGER,
134
+ value: source.toString()
135
+ };
136
+ if (typeof source === "number") {
137
+ if (!Number.isInteger(source)) throw new Error(`${label}: floats not allowed in metadata`);
138
+ return {
139
+ type: CBOR_METADATA_JSON_TYPE.INTEGER,
140
+ value: source.toString()
141
+ };
142
+ }
143
+ if (typeof source === "string" || source instanceof String) return {
144
+ type: CBOR_METADATA_JSON_TYPE.TEXT,
145
+ text: source.toString()
146
+ };
147
+ if (Array.isArray(source)) return {
148
+ type: CBOR_METADATA_JSON_TYPE.LIST,
149
+ list: source.map((entry, index) => createCborMetadataMetadatumJsonFromJson(entry, `${label}[${index}]`))
150
+ };
151
+ if (isPlainObject(source)) return {
152
+ type: CBOR_METADATA_JSON_TYPE.MAP,
153
+ map: Object.entries(source).map(([key, value]) => [{
154
+ type: CBOR_METADATA_JSON_TYPE.TEXT,
155
+ text: key
156
+ }, createCborMetadataMetadatumJsonFromJson(value, `${label}.${key}`)])
157
+ };
158
+ throw new Error(`${label}: unsupported metadata type`);
159
+ };
160
+ const createCborMetadataJsonFromJson = (source) => {
161
+ if (isJsonMetadataEntry(source)) return [createCborMetadataLabelJsonFromJson(source[0]), createCborMetadataMetadatumJsonFromJson(source[1], `metadata.${toStringValue(source[0])}`)];
162
+ if (Array.isArray(source) && source.every(isJsonMetadataEntry)) return source.map((entry) => createCborMetadataJsonFromJson(entry));
163
+ return createCborMetadataMetadatumJsonFromJson(source);
164
+ };
50
165
  const createJsonFromCborJson = (source, target, index, doDecodeHex = true) => {
51
166
  try {
52
167
  if ("bytes" in source && !Number.isNaN(index)) target[index] = doDecodeHex ? decodeHex(source.bytes) : prefix0x(source.bytes);
@@ -81,6 +196,6 @@ const getKeyValue = (input) => {
81
196
  } : null;
82
197
  };
83
198
  //#endregion
84
- export { createJsonFromCborJson, deepMerge, getErrorMsg, getKeyValue, json };
199
+ export { createCborMetadataJsonFromJson, createJsonFromCborJson, createJsonFromCborMetadataJson, deepMerge, getErrorMsg, getKeyValue, json };
85
200
 
86
201
  //# sourceMappingURL=json.mjs.map
@@ -1 +1 @@
1
- {"version":3,"file":"json.mjs","names":[],"sources":["../../src/lib/json.ts"],"sourcesContent":["import {\n decodeHex,\n prefix0x,\n} from './hex'\n\nexport const json = (obj: any) => JSON.parse(JSON.stringify(obj))\n\nexport const getErrorMsg = (err: any): string => err?.message ?? (typeof err === 'string' ? err : JSON.stringify(err))\n\n// https://github.com/saikojosh/Object-Assign-Deep/blob/master/objectAssignDeep.js\n\nexport const deepMerge = (target: any, _objects: any[] = [], _options?: { arrayBehaviour: 'replace' | 'merge' }) => {\n\n const options = {\n\n arrayBehaviour: _options?.arrayBehaviour ?? 'replace',\n\n };\n\n const objects = _objects.map(object => object || {})\n const output = target || {}\n\n for (let i = 0; i < objects.length; i++) {\n\n const object = objects[i]\n const keys = Object.keys(object)\n\n for (let k = 0; k < keys.length; k++) {\n\n const key = keys[k]!\n const value = object[key]\n const type = getTypeOf(value)\n\n const existingValueType = getTypeOf(output[key])\n\n if (type === 'object') {\n\n if (existingValueType !== 'undefined') {\n\n const existingValue = (existingValueType === 'object' ? output[key] : {})\n\n output[key] = deepMerge({}, [existingValue, quickCloneObject(value)], options)\n\n } else {\n\n output[key] = quickCloneObject(value)\n }\n\n } else if (type === 'array') {\n\n if (existingValueType === 'array') {\n\n const newValue = quickCloneArray(value)\n\n output[key] = (options.arrayBehaviour === 'merge' ? output[key].concat(newValue) : newValue)\n\n } else {\n\n output[key] = quickCloneArray(value)\n }\n\n } else {\n\n output[key] = value\n }\n }\n }\n\n return output\n\n}\n\nconst getTypeOf = (input: any) => {\n\n if ( input === null) { return 'null' }\n else if (typeof input === 'undefined') { return 'undefined' }\n else if (typeof input === 'object') { return (Array.isArray(input) ? 'array' : 'object') }\n\n return typeof input\n}\n\nconst quickCloneObject = (input: any) => {\n\n const output: any = {}\n\n for (const key in input) {\n\n if (!input.hasOwnProperty(key)) { continue }\n\n output[key] = cloneValue(input[key])\n }\n\n return output\n}\n\nconst quickCloneArray = (input: any[]): any[] => {\n\n return input.map(cloneValue)\n}\n\nconst cloneValue = (value: any) => {\n\n if (getTypeOf(value) === 'object') { return quickCloneObject(value) }\n else if (getTypeOf(value) === 'array') { return quickCloneArray( value) }\n\n return value\n}\n\nexport const createJsonFromCborJson = (source: any, target: any, index?: number, doDecodeHex: boolean = true): void => {\n\n try {\n\n if ('bytes' in source && !Number.isNaN(index)) { // raw bytes value, must be an array, decode hex\n\n target[index!] = doDecodeHex ? decodeHex(source.bytes) : prefix0x(source.bytes)\n\n } else if ('int' in source && !Number.isNaN(index)) { // raw int value, must be an array\n\n target[index!] = source.int\n\n } else if ('string' in source && !Number.isNaN(index)) { // raw string value, must be an array\n\n target[index!] = source.string\n\n } else if (source?.k?.bytes || source?.k?.string || source?.k?.int) { // key/value pair\n\n const key = source?.k?.bytes ? (doDecodeHex ? decodeHex(source.k.bytes) : source.k.bytes) : source?.k?.string || source?.k?.int.toString()\n const value = source.v\n\n if ('bytes' in value) { // bytes value, decode hex\n\n target[key] = doDecodeHex ? decodeHex(value.bytes) : prefix0x(value.bytes)\n\n } else if ('int' in value) { // int value\n\n target[key] = value.int\n\n } else if ('string' in value) { // string value\n\n target[key] = value.string\n\n } else if ('list' in value) { // array, init array and recursively add entries\n\n target[key] = new Array(value.list.length)\n\n createJsonFromCborJson(value, target[key], index, doDecodeHex)\n\n } else if ('map' in value) { // map, init object and recursively parse\n\n target[key] = {}\n\n createJsonFromCborJson(value, target[key], index, doDecodeHex)\n }\n\n } else if ('map' in source) { // object in list format\n\n for (let i = 0; i < source.map.length; i++) {\n\n createJsonFromCborJson(source.map[i], target, index, doDecodeHex)\n }\n\n } else if ('list' in source) { // array\n\n for (let i = 0; i < source.list.length; i++) {\n\n if ('map' in source.list[i]) { // array of objects\n\n target[i] = {}\n\n createJsonFromCborJson(source.list[i], target[i], index, doDecodeHex)\n\n } else { // array of raw values\n\n createJsonFromCborJson(source.list[i], target, i, doDecodeHex)\n }\n }\n }\n\n } catch (e: any) { }\n}\n\nexport const getKeyValue = (input: string | null) => {\n\n if (!input) { return null }\n\n const value = input.match(/\"(.*?)\":\"(.*)\"/)\n\n return value ? { key: value[1], value: value[2] } : null\n}\n"],"mappings":"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"}
1
+ {"version":3,"file":"json.mjs","names":[],"sources":["../../src/lib/json.ts"],"sourcesContent":["import {\n decodeHex,\n prefix0x,\n} from './hex'\n\nexport const json = (obj: any) => JSON.parse(JSON.stringify(obj))\n\nexport const getErrorMsg = (err: any): string => err?.message ?? (typeof err === 'string' ? err : JSON.stringify(err))\n\n// https://github.com/saikojosh/Object-Assign-Deep/blob/master/objectAssignDeep.js\n\nexport const deepMerge = (target: any, _objects: any[] = [], _options?: { arrayBehaviour: 'replace' | 'merge' }) => {\n\n const options = {\n\n arrayBehaviour: _options?.arrayBehaviour ?? 'replace',\n\n };\n\n const objects = _objects.map(object => object || {})\n const output = target || {}\n\n for (let i = 0; i < objects.length; i++) {\n\n const object = objects[i]\n const keys = Object.keys(object)\n\n for (let k = 0; k < keys.length; k++) {\n\n const key = keys[k]!\n const value = object[key]\n const type = getTypeOf(value)\n\n const existingValueType = getTypeOf(output[key])\n\n if (type === 'object') {\n\n if (existingValueType !== 'undefined') {\n\n const existingValue = (existingValueType === 'object' ? output[key] : {})\n\n output[key] = deepMerge({}, [existingValue, quickCloneObject(value)], options)\n\n } else {\n\n output[key] = quickCloneObject(value)\n }\n\n } else if (type === 'array') {\n\n if (existingValueType === 'array') {\n\n const newValue = quickCloneArray(value)\n\n output[key] = (options.arrayBehaviour === 'merge' ? output[key].concat(newValue) : newValue)\n\n } else {\n\n output[key] = quickCloneArray(value)\n }\n\n } else {\n\n output[key] = value\n }\n }\n }\n\n return output\n\n}\n\nconst getTypeOf = (input: any) => {\n\n if ( input === null) { return 'null' }\n else if (typeof input === 'undefined') { return 'undefined' }\n else if (typeof input === 'object') { return (Array.isArray(input) ? 'array' : 'object') }\n\n return typeof input\n}\n\nconst quickCloneObject = (input: any) => {\n\n const output: any = {}\n\n for (const key in input) {\n\n if (!input.hasOwnProperty(key)) { continue }\n\n output[key] = cloneValue(input[key])\n }\n\n return output\n}\n\nconst quickCloneArray = (input: any[]): any[] => {\n\n return input.map(cloneValue)\n}\n\nconst cloneValue = (value: any) => {\n\n if (getTypeOf(value) === 'object') { return quickCloneObject(value) }\n else if (getTypeOf(value) === 'array') { return quickCloneArray( value) }\n\n return value\n}\n\nconst CBOR_METADATA_JSON_TYPE = {\n\n MAP: 'map',\n LIST: 'list',\n INTEGER: 'integer',\n BYTES: 'bytes',\n TEXT: 'text'\n} as const\n\nconst INTEGER_PATTERN = /^-?\\d+$/\nconst METADATA_LABEL_PATTERN = /^\\d+$/\n\ntype CborMetadataJsonType = typeof CBOR_METADATA_JSON_TYPE[keyof typeof CBOR_METADATA_JSON_TYPE]\n\ntype JsonRecord = Record<string, unknown>\n\nconst isPlainObject = (\n value: unknown\n): value is JsonRecord => {\n\n if (!value || typeof value !== 'object' || Array.isArray(value)) { return false }\n\n const proto = Object.getPrototypeOf(value)\n\n return proto === Object.prototype || proto === null\n}\n\nconst isCborMetadataJsonType = (\n type: unknown\n): type is CborMetadataJsonType =>\n type === CBOR_METADATA_JSON_TYPE.MAP ||\n type === CBOR_METADATA_JSON_TYPE.LIST ||\n type === CBOR_METADATA_JSON_TYPE.INTEGER ||\n type === CBOR_METADATA_JSON_TYPE.BYTES ||\n type === CBOR_METADATA_JSON_TYPE.TEXT\n\nconst isCborMetadataJsonMetadatum = (\n value: unknown\n): value is JsonRecord => isPlainObject(value) && isCborMetadataJsonType(value.type)\n\nconst isCborMetadataJsonEntry = (\n value: unknown\n): value is [unknown, JsonRecord] =>\n Array.isArray(value) && value.length === 2 && isCborMetadataJsonMetadatum(value[1])\n\nconst isJsonMetadataEntry = (\n value: unknown\n): value is [unknown, unknown] =>\n Array.isArray(value) && value.length === 2 && isMetadataLabelJson(value[0])\n\nconst toStringValue = (\n value: unknown\n): string => {\n\n if (typeof value === 'string') { return value }\n\n if (value instanceof String) { return value.toString() }\n\n if (typeof value === 'number' || typeof value === 'bigint') { return value.toString() }\n\n const valueWithToString = value as { toString?: () => string } | null | undefined\n\n if (typeof valueWithToString?.toString === 'function') { return valueWithToString.toString() }\n\n return String(value)\n}\n\nconst toSafeIntegerJson = (\n value: unknown\n): number | string => {\n\n const text = toStringValue(value)\n\n if (!INTEGER_PATTERN.test(text)) { return text }\n\n const numberValue = Number(text)\n\n if (Number.isSafeInteger(numberValue) && BigInt(numberValue) === BigInt(text)) {\n\n return numberValue\n }\n\n return text\n}\n\nconst isMetadataLabelJson = (\n value: unknown\n): boolean => {\n\n if (typeof value === 'number') { return Number.isSafeInteger(value) && Number.isInteger(value) && value >= 0 }\n else if (typeof value === 'bigint') { return value >= 0n }\n else if (typeof value === 'string') { return METADATA_LABEL_PATTERN.test(value) }\n\n return false\n}\n\nconst createJsonFromCborMetadataLabelJson = (\n value: unknown\n): string => toStringValue(value)\n\nconst createCborMetadataLabelJsonFromJson = (\n value: unknown\n): string => {\n\n if (!isMetadataLabelJson(value)) { throw new Error(`Invalid metadata label: ${toStringValue(value)}`) }\n\n return toStringValue(value)\n}\n\nconst createPropertyKeyFromMetadataJson = (\n value: unknown\n): string => {\n\n if (typeof value === 'string') { return value }\n if (typeof value === 'number') { return value.toString() }\n\n return JSON.stringify(value)\n}\n\nconst createJsonFromCborMetadataMetadatumJson = (\n source: JsonRecord\n): unknown => {\n\n const type = source.type\n\n if (type === CBOR_METADATA_JSON_TYPE.MAP) {\n\n const target: JsonRecord = {}\n const entries = Array.isArray(source.map) ? source.map : []\n\n for (const entry of entries) {\n\n if (!Array.isArray(entry) || entry.length !== 2) { continue }\n\n const key = createJsonFromCborMetadataJson(entry[0])\n const value = createJsonFromCborMetadataJson(entry[1])\n\n target[createPropertyKeyFromMetadataJson(key)] = value\n }\n\n return target\n }\n\n if (type === CBOR_METADATA_JSON_TYPE.LIST) {\n\n const entries = Array.isArray(source.list) ? source.list : []\n\n return entries.map((entry) => createJsonFromCborMetadataJson(entry))\n }\n\n if (type === CBOR_METADATA_JSON_TYPE.INTEGER) { return toSafeIntegerJson(source.value) }\n if (type === CBOR_METADATA_JSON_TYPE.BYTES) { return toStringValue(source.bytes) }\n if (type === CBOR_METADATA_JSON_TYPE.TEXT) { return toStringValue(source.text) }\n\n return source\n}\n\nexport const createJsonFromCborMetadataJson = (\n source: unknown\n): unknown => {\n\n if (isCborMetadataJsonEntry(source)) {\n\n return [\n createJsonFromCborMetadataLabelJson(source[0]),\n createJsonFromCborMetadataJson(source[1])\n ]\n }\n\n if (isCborMetadataJsonMetadatum(source)) {\n\n return createJsonFromCborMetadataMetadatumJson(source)\n }\n\n if (Array.isArray(source)) {\n\n return source.map((entry) => createJsonFromCborMetadataJson(entry))\n }\n\n if (isPlainObject(source)) {\n\n const target: JsonRecord = {}\n\n for (const [ key, value ] of Object.entries(source)) {\n\n target[key] = createJsonFromCborMetadataJson(value)\n }\n\n return target\n }\n\n return source\n}\n\nconst createCborMetadataMetadatumJsonFromJson = (\n source: unknown,\n label: string = 'metadata'\n): unknown => {\n\n if (source === null) { throw new Error(`${label}: null not allowed in metadata`) }\n if (typeof source === 'boolean') { throw new Error(`${label}: bools not allowed in metadata`) }\n\n if (typeof source === 'bigint') {\n\n return {\n type: CBOR_METADATA_JSON_TYPE.INTEGER,\n value: source.toString()\n }\n }\n\n if (typeof source === 'number') {\n\n if (!Number.isInteger(source)) { throw new Error(`${label}: floats not allowed in metadata`) }\n\n return {\n type: CBOR_METADATA_JSON_TYPE.INTEGER,\n value: source.toString()\n }\n }\n\n if (typeof source === 'string' || source instanceof String) {\n\n return {\n type: CBOR_METADATA_JSON_TYPE.TEXT,\n text: source.toString()\n }\n }\n\n if (Array.isArray(source)) {\n\n return {\n type: CBOR_METADATA_JSON_TYPE.LIST,\n list: source.map((entry, index) => createCborMetadataMetadatumJsonFromJson(entry, `${label}[${index}]`))\n }\n }\n\n if (isPlainObject(source)) {\n\n return {\n type: CBOR_METADATA_JSON_TYPE.MAP,\n map: Object.entries(source).map(([ key, value ]) => ([\n {\n type: CBOR_METADATA_JSON_TYPE.TEXT,\n text: key\n },\n createCborMetadataMetadatumJsonFromJson(value, `${label}.${key}`)\n ]))\n }\n }\n\n throw new Error(`${label}: unsupported metadata type`)\n}\n\nexport const createCborMetadataJsonFromJson = (\n source: unknown\n): unknown => {\n\n if (isJsonMetadataEntry(source)) {\n\n return [\n createCborMetadataLabelJsonFromJson(source[0]),\n createCborMetadataMetadatumJsonFromJson(source[1], `metadata.${toStringValue(source[0])}`)\n ]\n }\n\n if (Array.isArray(source) && source.every(isJsonMetadataEntry)) {\n\n return source.map((entry) => createCborMetadataJsonFromJson(entry))\n }\n\n return createCborMetadataMetadatumJsonFromJson(source)\n}\n\nexport const createJsonFromCborJson = (source: any, target: any, index?: number, doDecodeHex: boolean = true): void => {\n\n try {\n\n if ('bytes' in source && !Number.isNaN(index)) { // raw bytes value, must be an array, decode hex\n\n target[index!] = doDecodeHex ? decodeHex(source.bytes) : prefix0x(source.bytes)\n\n } else if ('int' in source && !Number.isNaN(index)) { // raw int value, must be an array\n\n target[index!] = source.int\n\n } else if ('string' in source && !Number.isNaN(index)) { // raw string value, must be an array\n\n target[index!] = source.string\n\n } else if (source?.k?.bytes || source?.k?.string || source?.k?.int) { // key/value pair\n\n const key = source?.k?.bytes ? (doDecodeHex ? decodeHex(source.k.bytes) : source.k.bytes) : source?.k?.string || source?.k?.int.toString()\n const value = source.v\n\n if ('bytes' in value) { // bytes value, decode hex\n\n target[key] = doDecodeHex ? decodeHex(value.bytes) : prefix0x(value.bytes)\n\n } else if ('int' in value) { // int value\n\n target[key] = value.int\n\n } else if ('string' in value) { // string value\n\n target[key] = value.string\n\n } else if ('list' in value) { // array, init array and recursively add entries\n\n target[key] = new Array(value.list.length)\n\n createJsonFromCborJson(value, target[key], index, doDecodeHex)\n\n } else if ('map' in value) { // map, init object and recursively parse\n\n target[key] = {}\n\n createJsonFromCborJson(value, target[key], index, doDecodeHex)\n }\n\n } else if ('map' in source) { // object in list format\n\n for (let i = 0; i < source.map.length; i++) {\n\n createJsonFromCborJson(source.map[i], target, index, doDecodeHex)\n }\n\n } else if ('list' in source) { // array\n\n for (let i = 0; i < source.list.length; i++) {\n\n if ('map' in source.list[i]) { // array of objects\n\n target[i] = {}\n\n createJsonFromCborJson(source.list[i], target[i], index, doDecodeHex)\n\n } else { // array of raw values\n\n createJsonFromCborJson(source.list[i], target, i, doDecodeHex)\n }\n }\n }\n\n } catch (e: any) { }\n}\n\nexport const getKeyValue = (input: string | null) => {\n\n if (!input) { return null }\n\n const value = input.match(/\"(.*?)\":\"(.*)\"/)\n\n return value ? { key: value[1], value: value[2] } : null\n}\n"],"mappings":"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"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@eternl/tools",
3
- "version": "0.15.3",
3
+ "version": "0.15.7",
4
4
  "description": "Shared tools package for log helpers, base utilities and bech32 helpers",
5
5
  "license": "BUSL-1.1",
6
6
  "type": "module",
@@ -33,7 +33,7 @@
33
33
  "dependencies": {
34
34
  "bech32": "2.0.0",
35
35
  "blakejs": "1.2.1",
36
- "@eternl/big": "0.15.3"
36
+ "@eternl/big": "0.15.7"
37
37
  },
38
38
  "publishConfig": {
39
39
  "access": "public"