git ssb

0+

wanderer🌟 / js-primea-objects



Tree: 5418f16a7749446c341174100524c5ddcec4a6a9

Files: 5418f16a7749446c341174100524c5ddcec4a6a9 / utils.js

1749 bytesRaw
1const { ID, FunctionRef, ModuleRef, generateActorId, getType } = require('./')
2
3const actorRefToId = ref => ref.reduce((parent, curr) => generateActorId({ parent, nonce: curr }), null)
4
5const toHex = arg => Buffer.isBuffer(arg) ? `0x${arg.toString('hex')}` : arg
6
7const fromHex = arg => typeof arg !== 'string' ? arg : Buffer.from(arg.slice(0, 2) === '0x' ? arg.slice(2) : arg, 'hex')
8
9const toJSON = arg => {
10 switch (getType(arg)) {
11 case 'elem':
12 return arg.map(toJSON)
13 case 'id':
14 return toJSON(arg.id)
15 case 'func':
16 return {
17 '@FunctionRef': {
18 id: toJSON(arg.actorID),
19 private: arg.identifier[0],
20 name: arg.identifier[1],
21 gas: arg.gas
22 }
23 }
24 case 'mod':
25 return {
26 '@ModuleRef': {
27 id: toJSON(arg.id)
28 }
29 }
30 case 'link':
31 return {
32 '@Link': {
33 '/': toJSON(arg['/'])
34 }
35 }
36 case 'data':
37 default:
38 return toHex(arg)
39 }
40}
41
42const fromJSON = arg => {
43 if (typeof arg === 'object') {
44 if (Array.isArray(arg)) {
45 return arg.map(fromJSON)
46 }
47
48 if (arg['@FunctionRef']) {
49 const data = arg['@FunctionRef']
50 return new FunctionRef({
51 identifier: [data.private, data.name],
52 actorID: new ID(fromJSON(data.id)),
53 params: data.params,
54 gas: data.gas
55 })
56 } else if (arg['@ModuleRef']) {
57 const data = arg['@ModuleRef']
58 return new ModuleRef(data.exports, new ID(fromJSON(data.id)))
59 } else if (arg['@Link']) {
60 const data = arg['@Link']
61 return {
62 '/': fromJSON(data['/'])
63 }
64 }
65 }
66
67 return fromHex(arg)
68}
69
70module.exports = {
71 actorRefToId,
72 toJSON,
73 fromJSON,
74 toHex,
75 fromHex
76}
77

Built with git-ssb-web