godprotocol 1.1.31 → 1.2.0
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/Datatypes/arr.js +559 -254
- package/Datatypes/bool.js +8 -5
- package/Datatypes/callable.js +1 -1
- package/Datatypes/cls.js +193 -24
- package/Datatypes/conf.js +2 -2
- package/Datatypes/err.js +25 -0
- package/Datatypes/func.js +89 -13
- package/Datatypes/functions/storage.js +572 -12
- package/Datatypes/functions/wallet.js +49 -0
- package/Datatypes/instance.js +87 -122
- package/Datatypes/num.js +192 -153
- package/Datatypes/str.js +188 -122
- package/Datatypes/twa.js +346 -71
- package/Datatypes/voi.js +9 -4
- package/Index.js +1 -1
- package/Instances/account.js +0 -0
- package/Instances/event.js +0 -0
- package/Instances/fold.js +103 -0
- package/Instances/folder_queries.js +46 -0
- package/Instances/response.js +31 -0
- package/Objects/Account.js +160 -110
- package/Objects/Blockweb.js +6 -11
- package/Objects/Callable.js +223 -188
- package/Objects/Chain.js +127 -142
- package/Objects/Datatypes.js +114 -588
- package/Objects/Manager.js +349 -39
- package/Objects/Oracle.js +283 -210
- package/Objects/Repository.js +12 -33
- package/Objects/Trinity.js +9 -7
- package/Objects/Utils.js +8 -8
- package/Objects/Virtual_machine.js +320 -320
- package/README.md +0 -0
- package/callables/functions/assert.js +10 -0
- package/callables/functions/display.js +2 -3
- package/callables/functions/env.js +5 -0
- package/callables/functions/event.js +14 -0
- package/callables/functions/exit.js +3 -2
- package/callables/functions/folder.js +15 -0
- package/callables/functions/get_uid.js +6 -0
- package/callables/functions/hash.js +7 -0
- package/callables/functions/import_.js +62 -0
- package/callables/functions/local.js +9 -0
- package/callables/functions/net.js +33 -18
- package/callables/functions/parse.js +35 -0
- package/callables/functions/query.js +12 -0
- package/callables/functions/render.js +9 -13
- package/callables/functions/servers.js +10 -0
- package/callables/functions/spawn.js +7 -0
- package/callables/functions/store.js +75 -0
- package/callables/functions/super_.js +24 -0
- package/callables/functions/typeof.js +32 -0
- package/callables/functions/wait.js +9 -0
- package/callables/register.js +193 -8
- package/html/create.js +110 -0
- package/html/index.js +114 -0
- package/html/load.js +165 -0
- package/html/parse.js +171 -0
- package/html/run.js +151 -0
- package/html/util.js +5 -0
- package/package.json +5 -3
- package/repos/fs.js +114 -0
- package/repos/github.js +73 -0
- package/repos/ram.js +47 -0
- package/utils/create_server.js +66 -26
- package/utils/hash.js +3 -2
- package/utils/ops.js +2 -0
- package/utils/oracle_handlers.js +7 -0
- package/utils/services.js +18 -51
- package/utils/socket_server.js +36 -0
- package/utils/vm_utils.js +271 -59
- package/callables/functions/assign.js +0 -6
package/Objects/Datatypes.js
CHANGED
|
@@ -1,620 +1,146 @@
|
|
|
1
|
-
class Datatypes{
|
|
1
|
+
class Datatypes {
|
|
2
|
+
constructor(){}
|
|
2
3
|
|
|
3
|
-
|
|
4
|
-
let
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
start = start && await start.literal()
|
|
24
|
-
end = end && await end.literal()
|
|
25
|
-
|
|
26
|
-
result = me.slice(start, end)
|
|
27
|
-
break;
|
|
28
|
-
case 'concat':
|
|
29
|
-
other = await args[0].literal()
|
|
30
|
-
result = `${me}${other}`
|
|
31
|
-
break;
|
|
32
|
-
case 'find':
|
|
33
|
-
let lst = args[1] && await args[1].literal()
|
|
34
|
-
result = me[lst?'lastIndexOf': 'indexOf'](await other.literal())
|
|
35
|
-
break;
|
|
36
|
-
case 'includes':
|
|
37
|
-
result = me.includes(await other.literal())
|
|
38
|
-
break;
|
|
39
|
-
case 'index':
|
|
40
|
-
other = await other.literal()
|
|
41
|
-
if (other < 0){
|
|
42
|
-
result = me.slice(other)[0]
|
|
43
|
-
}else result = me[other]
|
|
44
|
-
break;
|
|
45
|
-
case 'trim':
|
|
46
|
-
other = args[0]
|
|
47
|
-
if (other) other = await other.literal()
|
|
48
|
-
else other = 0
|
|
49
|
-
let char = args[1]
|
|
50
|
-
if (char) char = await char.literal()
|
|
51
|
-
else char = ' '
|
|
52
|
-
|
|
53
|
-
let esc_regx_char = (char) => char.replace(/[.*+?^${}()|[\]\\]/g, '\\$&');
|
|
54
|
-
|
|
55
|
-
let char_regx = esc_regx_char(char);
|
|
56
|
-
|
|
57
|
-
switch (other) {
|
|
58
|
-
case 1:
|
|
59
|
-
result = me.replace(new RegExp(`^${char_regx}+`), '');
|
|
60
|
-
break
|
|
61
|
-
case 2:
|
|
62
|
-
result = me.replace(new RegExp(`${char_regx}+$`), '');
|
|
63
|
-
break
|
|
64
|
-
case 0:
|
|
65
|
-
default:
|
|
66
|
-
result = me.replace(new RegExp(`^${char_regx}+|${char_regx}+$`, 'g'), '');
|
|
67
|
-
}
|
|
68
|
-
break;
|
|
69
|
-
case 'length':
|
|
70
|
-
result = me.length;
|
|
71
|
-
break;
|
|
72
|
-
case 'is_empty':
|
|
73
|
-
result = !!me
|
|
74
|
-
break;
|
|
75
|
-
case 'is_blank':
|
|
76
|
-
result = !!me.trim()
|
|
77
|
-
break;
|
|
78
|
-
case 'is_numeric':
|
|
79
|
-
result = !!me && !isNaN(Number(me))
|
|
80
|
-
break;
|
|
81
|
-
case "endswith":
|
|
82
|
-
result = me.endsWith(await other.literal())
|
|
83
|
-
break;
|
|
84
|
-
case "startswith":
|
|
85
|
-
result = me.startsWith(await other.literal())
|
|
86
|
-
break;
|
|
87
|
-
case 'padend':
|
|
88
|
-
result = me.padEnd(await other.literal(), await args[1].literal())
|
|
89
|
-
break;
|
|
90
|
-
case 'padstart':
|
|
91
|
-
result = me.padStart(await other.literal(), await args[1].literal())
|
|
92
|
-
break;
|
|
93
|
-
case 'count':
|
|
94
|
-
other = await args[0].literal()
|
|
95
|
-
|
|
96
|
-
let count = 0;
|
|
97
|
-
let position = 0;
|
|
98
|
-
|
|
99
|
-
while ((position = me.indexOf(other, position)) !== -1) {
|
|
100
|
-
count++;
|
|
101
|
-
position += other.length;
|
|
102
|
-
}
|
|
103
|
-
result = count;
|
|
104
|
-
break;
|
|
105
|
-
case 'reverse':
|
|
106
|
-
result = me.split('').reverse().join('');
|
|
107
|
-
break
|
|
108
|
-
case 'repeat':
|
|
109
|
-
result = me.repeat(await other.literal())
|
|
110
|
-
break
|
|
111
|
-
case 'replace':
|
|
112
|
-
let globally = args[2] && await args[2].literal(),
|
|
113
|
-
keyword = await other.literal(), replacement = await args[1].literal()
|
|
114
|
-
result = me.replace(keyword, replacement)
|
|
115
|
-
if (globally){
|
|
116
|
-
while(result.includes(keyword)) result = result.replace(keyword, replacement)
|
|
117
|
-
}
|
|
118
|
-
break
|
|
119
|
-
case 'split':
|
|
120
|
-
other = other ? await other.literal(): ' '
|
|
121
|
-
result = me.split(other)
|
|
122
|
-
break
|
|
123
|
-
case 'charcode':
|
|
124
|
-
let code = args[1] ? await args[1].literal() : 'ascii'
|
|
125
|
-
if (code === 'ascii'){
|
|
126
|
-
result = me.split("").map(char => char.charCodeAt(0))
|
|
127
|
-
}
|
|
128
|
-
|
|
129
|
-
break;
|
|
4
|
+
insert = async({arr, item, index})=>{
|
|
5
|
+
let folder = await this.folder()
|
|
6
|
+
|
|
7
|
+
if (index === arr.length){
|
|
8
|
+
let item_folder = await folder.folder(index.toString())
|
|
9
|
+
|
|
10
|
+
let res = await item_folder.write(item, {replace: true})
|
|
11
|
+
arr.length ++
|
|
12
|
+
arr.value = res.datapath
|
|
13
|
+
}else {
|
|
14
|
+
let ref;
|
|
15
|
+
while (index <= arr.length){
|
|
16
|
+
let item_folder = await folder.folder(index.toString())
|
|
17
|
+
let curr_item = await item_folder.readone()
|
|
18
|
+
ref = await item_folder.write(item, {replace: true})
|
|
19
|
+
item = curr_item
|
|
20
|
+
index ++
|
|
21
|
+
}
|
|
22
|
+
arr.length ++
|
|
23
|
+
arr.value = ref.datapath
|
|
130
24
|
}
|
|
131
25
|
|
|
132
|
-
|
|
26
|
+
await folder.write(arr, {replace: true})
|
|
133
27
|
}
|
|
134
28
|
|
|
135
|
-
|
|
136
|
-
let
|
|
137
|
-
|
|
138
|
-
other = other && await other.literal()
|
|
139
|
-
let me = await this.literal()
|
|
29
|
+
pop = async({arr, index})=>{
|
|
30
|
+
let folder = await this.folder(), popped;
|
|
140
31
|
|
|
141
|
-
|
|
142
|
-
|
|
143
|
-
|
|
144
|
-
|
|
145
|
-
|
|
146
|
-
|
|
147
|
-
|
|
148
|
-
|
|
149
|
-
|
|
150
|
-
|
|
151
|
-
|
|
152
|
-
|
|
153
|
-
if (!other)result = { error:true, value:{name: 'ZeroDivision'}}
|
|
154
|
-
else result = me / other;
|
|
155
|
-
break;
|
|
156
|
-
case '__exp__':
|
|
157
|
-
result = me ** other;
|
|
158
|
-
break;
|
|
159
|
-
case '__floordiv__':
|
|
160
|
-
result = Math.floor(me / other);
|
|
161
|
-
break;
|
|
162
|
-
case '__mod__':
|
|
163
|
-
result = me % other;
|
|
164
|
-
break;
|
|
165
|
-
case '__eq__':
|
|
166
|
-
result = me === other
|
|
167
|
-
break;
|
|
168
|
-
case '__ne__':
|
|
169
|
-
result = me !== other
|
|
170
|
-
break;
|
|
171
|
-
case '__lt__':
|
|
172
|
-
result = me < other
|
|
173
|
-
break;
|
|
174
|
-
case '__lte__':
|
|
175
|
-
result = me <= other
|
|
176
|
-
break;
|
|
177
|
-
case '__gt__':
|
|
178
|
-
result = me > other
|
|
179
|
-
break;
|
|
180
|
-
case '__gte__':
|
|
181
|
-
result = me >= other
|
|
182
|
-
break;
|
|
183
|
-
case 'abs':
|
|
184
|
-
result = Math.abs(me)
|
|
185
|
-
break;
|
|
186
|
-
case 'sqrt':
|
|
187
|
-
result = Math.sqrt(me)
|
|
188
|
-
break;
|
|
189
|
-
case 'to_int':
|
|
190
|
-
result = parseInt(me)
|
|
191
|
-
break;
|
|
192
|
-
case 'to_float':
|
|
193
|
-
result = Number(me).toFixed(other)
|
|
194
|
-
break;
|
|
195
|
-
case 'to_string':
|
|
196
|
-
result = me.toString()
|
|
197
|
-
break;
|
|
198
|
-
case 'tan':
|
|
199
|
-
result = Math.tan(me)
|
|
200
|
-
break;
|
|
201
|
-
case 'sin':
|
|
202
|
-
result = Math.sin(me)
|
|
203
|
-
break;
|
|
204
|
-
case 'cos':
|
|
205
|
-
result = Math.cos(me)
|
|
206
|
-
break;
|
|
207
|
-
case 'atan':
|
|
208
|
-
result = Math.atan(me)
|
|
209
|
-
break;
|
|
210
|
-
case 'atan2':
|
|
211
|
-
result = Math.atan2(me)
|
|
212
|
-
break;
|
|
213
|
-
case 'asin':
|
|
214
|
-
result = Math.asin(me)
|
|
215
|
-
break;
|
|
216
|
-
case 'acos':
|
|
217
|
-
result = Math.acos(me)
|
|
218
|
-
break;
|
|
219
|
-
case 'tanh':
|
|
220
|
-
result = Math.tanh(me)
|
|
221
|
-
break;
|
|
222
|
-
case 'sinh':
|
|
223
|
-
result = Math.sinh(me)
|
|
224
|
-
break;
|
|
225
|
-
case 'cosh':
|
|
226
|
-
result = Math.cosh(me)
|
|
227
|
-
break;
|
|
228
|
-
case 'asinh':
|
|
229
|
-
result = Math.asinh(me)
|
|
230
|
-
break;
|
|
231
|
-
case 'acosh':
|
|
232
|
-
result = Math.acosh(me)
|
|
233
|
-
break;
|
|
234
|
-
case 'atanh':
|
|
235
|
-
result = Math.atanh(me)
|
|
236
|
-
break;
|
|
237
|
-
case 'round':
|
|
238
|
-
if (other){
|
|
239
|
-
result = Number(Number(me).toFixed(other))
|
|
240
|
-
}else result = Math.round(me)
|
|
241
|
-
break;
|
|
242
|
-
case 'ceil':
|
|
243
|
-
result = Math.ceil(me)
|
|
244
|
-
break;
|
|
245
|
-
case 'floor':
|
|
246
|
-
result = Math.floor(me)
|
|
247
|
-
break;
|
|
248
|
-
case 'is_prime':
|
|
249
|
-
if (me <= 1) result = false;
|
|
250
|
-
if (me <= 3) result = true;
|
|
251
|
-
|
|
252
|
-
if (me % 2 === 0 || me % 3 === 0) result = false;
|
|
253
|
-
|
|
254
|
-
for (let i = 5; i * i <= me; i += 6) {
|
|
255
|
-
if (me % i === 0 || me % (i + 2) === 0) {
|
|
256
|
-
result = false;
|
|
257
|
-
}
|
|
258
|
-
}
|
|
259
|
-
result = true;
|
|
260
|
-
break;
|
|
261
|
-
case 'is_odd':
|
|
262
|
-
result = (me % 2) === 1
|
|
263
|
-
break
|
|
264
|
-
case 'is_even':
|
|
265
|
-
result = (me % 2) === 0
|
|
266
|
-
break
|
|
267
|
-
case 'log':
|
|
268
|
-
if (!other || (other === 10))
|
|
269
|
-
result = Math.log10(me)
|
|
270
|
-
else if (other === Math.E){
|
|
271
|
-
result = Math.log(me)
|
|
272
|
-
}else result = Math.log(me) / Math.log(other)
|
|
273
|
-
break;
|
|
274
|
-
case 'factorial':
|
|
275
|
-
result = this.factorial(me)
|
|
276
|
-
break;
|
|
277
|
-
case 'is_perfect_square':
|
|
278
|
-
if (me < 0) result = false;
|
|
279
|
-
|
|
280
|
-
let sqrt = Math.sqrt(me);
|
|
281
|
-
result = sqrt === Math.floor(sqrt);
|
|
282
|
-
break
|
|
283
|
-
case 'to_degrees':
|
|
284
|
-
result = me * (180 / Math.PI)
|
|
285
|
-
break;
|
|
286
|
-
case 'to_radians':
|
|
287
|
-
result = me * (Math.PI / 180)
|
|
288
|
-
break;
|
|
32
|
+
while (index < arr.length){
|
|
33
|
+
let index_folder = await folder.folder(index.toString())
|
|
34
|
+
|
|
35
|
+
if (!popped){
|
|
36
|
+
popped = await index_folder.readone()
|
|
37
|
+
}
|
|
38
|
+
index++
|
|
39
|
+
if (index < arr.length){
|
|
40
|
+
let next_item = await folder.folder(index.toString())
|
|
41
|
+
next_item = await next_item.readone()
|
|
42
|
+
await index_folder.write(next_item, {replace: true})
|
|
43
|
+
}
|
|
289
44
|
}
|
|
290
|
-
|
|
291
|
-
return result
|
|
292
|
-
}
|
|
293
|
-
|
|
294
|
-
array = async(op, args, options={})=>{
|
|
295
|
-
let {config, chain } = options;
|
|
296
45
|
|
|
297
|
-
|
|
298
|
-
let other = args[0], store, result = null;
|
|
46
|
+
arr.length --
|
|
299
47
|
|
|
300
|
-
|
|
301
|
-
|
|
302
|
-
|
|
303
|
-
store = true;
|
|
304
|
-
break;
|
|
305
|
-
case 'length':
|
|
306
|
-
result = this.lit.content.length;
|
|
307
|
-
break;
|
|
308
|
-
case 'pop':
|
|
309
|
-
if (other){
|
|
310
|
-
result = this.lit.content_addr.splice(await other.literal(), 1)[0]
|
|
311
|
-
}else result = this.lit.content_addr.pop()
|
|
312
|
-
|
|
313
|
-
store= true
|
|
48
|
+
await folder.write(arr, {replace: true})
|
|
49
|
+
return popped
|
|
50
|
+
}
|
|
314
51
|
|
|
315
|
-
|
|
316
|
-
|
|
317
|
-
}
|
|
318
|
-
break;
|
|
319
|
-
case 'extend':
|
|
320
|
-
await other.literal()
|
|
321
|
-
result = this.lit.content_addr.push(...other.lit.content_addr)
|
|
322
|
-
store = true
|
|
323
|
-
|
|
324
|
-
break;
|
|
325
|
-
case 'slice':
|
|
326
|
-
let start = args[0] && await args[0].literal()
|
|
327
|
-
let end = args[1] && await args[1].literal()
|
|
52
|
+
index = async ({i}) => {
|
|
53
|
+
let folder = await this.folder()
|
|
328
54
|
|
|
329
|
-
|
|
330
|
-
|
|
55
|
+
let item_folder = await folder.folder(i.toString())
|
|
56
|
+
return (await item_folder.readone())
|
|
57
|
+
}
|
|
331
58
|
|
|
332
|
-
|
|
59
|
+
get = async({twa, key})=>{
|
|
60
|
+
let folder = await this.folder()
|
|
333
61
|
|
|
334
|
-
|
|
335
|
-
|
|
336
|
-
case 'splice':
|
|
337
|
-
let spl_replacement = args[2]
|
|
338
|
-
if (spl_replacement){
|
|
339
|
-
result = this.lit.content_addr.splice(args[0] && await args[0].literal(), args[1] && await args[1].literal(), spl_replacement.value.path )
|
|
340
|
-
}else result = this.lit.content_addr.splice(args[0] && await args[0].literal(), args[1] && await args[1].literal())
|
|
341
|
-
|
|
342
|
-
store = true;
|
|
62
|
+
let child = await folder.folder(key)
|
|
63
|
+
let res = (await child.readone())
|
|
343
64
|
|
|
344
|
-
|
|
65
|
+
if(!res) return null;
|
|
345
66
|
|
|
346
|
-
|
|
347
|
-
case 'index':
|
|
348
|
-
other = await other.literal()
|
|
349
|
-
if (typeof other === 'number'){
|
|
350
|
-
if (other <0){
|
|
351
|
-
result = this.lit.content_addr.slice(other)[0]
|
|
352
|
-
}else result = this.lit.content_addr[other];
|
|
353
|
-
}
|
|
354
|
-
if (result) result = {type:'address', value: result}
|
|
355
|
-
break;
|
|
356
|
-
case 'to_string':
|
|
357
|
-
other = other && await other.literal()
|
|
67
|
+
if (res.deleted) res = null
|
|
358
68
|
|
|
359
|
-
|
|
360
|
-
|
|
361
|
-
let item = this.lit.content_addr[i];
|
|
69
|
+
return res.value;
|
|
70
|
+
}
|
|
362
71
|
|
|
363
|
-
|
|
364
|
-
|
|
365
|
-
|
|
366
|
-
|
|
367
|
-
|
|
368
|
-
|
|
369
|
-
}else result = `${result}void`
|
|
370
|
-
}else result = `${result}${cont}`
|
|
371
|
-
}
|
|
372
|
-
break;
|
|
373
|
-
case 'is_empty':
|
|
374
|
-
result = !this.lit.content_addr.length
|
|
375
|
-
break;
|
|
376
|
-
case 'clear':
|
|
377
|
-
this.lit.content_addr = []
|
|
378
|
-
store = true;
|
|
379
|
-
break
|
|
380
|
-
case "join":
|
|
381
|
-
let str_val = ''
|
|
382
|
-
let separator = (other && await other.literal()) || ','
|
|
383
|
-
for (let i=0; i< this.lit.content_addr.length; i++){
|
|
384
|
-
let item = this.lit.content_addr[i]
|
|
385
|
-
let val = await this.account.vm.cloth_content(await this.account.vm.resolve_address(item))
|
|
72
|
+
set = async({twa, key, prop, value}) => {
|
|
73
|
+
let folder = await this.folder()
|
|
74
|
+
let pair_folder = await folder.folder(key)
|
|
75
|
+
let {vm} = this.account;
|
|
76
|
+
|
|
77
|
+
await (await pair_folder.folder('__prop__')).write(prop)
|
|
386
78
|
|
|
387
|
-
|
|
388
|
-
|
|
389
|
-
|
|
390
|
-
|
|
391
|
-
|
|
392
|
-
|
|
393
|
-
|
|
394
|
-
let
|
|
395
|
-
|
|
396
|
-
|
|
397
|
-
|
|
398
|
-
|
|
399
|
-
|
|
400
|
-
|
|
401
|
-
{type:'address', value: item, position: 0},
|
|
402
|
-
{...await this.account.vm.parse_aircode(i, {config, chain}), position:1}
|
|
403
|
-
],
|
|
404
|
-
location: config.location
|
|
405
|
-
}, chain})
|
|
406
|
-
if (res && res.type!== 'address'){
|
|
407
|
-
console.log("Datatypes.js:Query")
|
|
408
|
-
}
|
|
409
|
-
map_arr.push(res.value)
|
|
410
|
-
}
|
|
411
|
-
if (args[1] && await args[1].literal()){
|
|
412
|
-
this.lit.content_addr = map_arr
|
|
413
|
-
store = true
|
|
414
|
-
}else result = {type:'address', value: await this.account.vm.instantiate({type:'array', value: map_arr, location: config.location}, {chain, pure: true})}
|
|
415
|
-
|
|
416
|
-
break;
|
|
417
|
-
case 'filter':
|
|
418
|
-
let fconfg = other.value;
|
|
419
|
-
let fil_arr = []
|
|
420
|
-
for (let i=0; i< this.lit.content_addr.length; i++){
|
|
421
|
-
let item = this.lit.content_addr[i];
|
|
422
|
-
|
|
423
|
-
let res = await this.account.vm.execute(fconfg, {call_config: {
|
|
424
|
-
identifier: fconfg.address,
|
|
425
|
-
arguments: [
|
|
426
|
-
{type:'address', value: item, position: 0},
|
|
427
|
-
{...await this.account.vm.parse_aircode(i, {config, chain}), position:1}
|
|
428
|
-
],
|
|
429
|
-
location: config.location
|
|
430
|
-
}, chain, cloth: true})
|
|
431
|
-
|
|
432
|
-
if (res && !!await res.literal())
|
|
433
|
-
fil_arr.push(item)
|
|
434
|
-
}
|
|
435
|
-
if (args[1] && await args[1].literal()){
|
|
436
|
-
this.lit.content_addr = fil_arr
|
|
437
|
-
store = true
|
|
438
|
-
}else result = {
|
|
439
|
-
type:'address',
|
|
440
|
-
value: await this.account.vm.instantiate({
|
|
441
|
-
type:'array',
|
|
442
|
-
value: fil_arr,
|
|
443
|
-
location: config.location},
|
|
444
|
-
{chain, pure: true})
|
|
445
|
-
}
|
|
79
|
+
let prev = (await pair_folder.readone()), addr;
|
|
80
|
+
|
|
81
|
+
if (prev && prev.created < twa.created) prev = null
|
|
82
|
+
if (prev && prev.deleted) prev = null
|
|
83
|
+
|
|
84
|
+
if (!prev){
|
|
85
|
+
if (twa.value){
|
|
86
|
+
let o = this._split_datapath(twa.value)
|
|
87
|
+
o = {value: o[0], _id: o[1], type: 'address'}
|
|
88
|
+
prev = await vm.cloth(o, {just_content: true})
|
|
89
|
+
prev = await vm.cloth_content(prev.value)
|
|
90
|
+
|
|
91
|
+
let res = await pair_folder.write({value, prev: twa.value}, {replace: true})
|
|
92
|
+
addr = res.datapath
|
|
446
93
|
|
|
447
|
-
|
|
448
|
-
|
|
449
|
-
|
|
450
|
-
|
|
451
|
-
|
|
452
|
-
|
|
453
|
-
|
|
454
|
-
|
|
455
|
-
|
|
456
|
-
arguments: [
|
|
457
|
-
{type:'address', value: item, position: 0},
|
|
458
|
-
{...index, position:1}
|
|
459
|
-
],
|
|
460
|
-
location: config.location
|
|
461
|
-
}, chain, cloth: true})
|
|
462
|
-
|
|
463
|
-
if (res && !!await res.literal())
|
|
464
|
-
{
|
|
465
|
-
result = index
|
|
466
|
-
break
|
|
467
|
-
}
|
|
468
|
-
}
|
|
469
|
-
case 'includes':
|
|
470
|
-
other = await other.literal()
|
|
471
|
-
for (let i=0; i< this.lit.content_addr.length; i++){
|
|
472
|
-
let item = this.lit.content_addr[i];
|
|
473
|
-
let val = await this.account.vm.cloth_content(await this.account.vm.resolve_address(item))
|
|
474
|
-
|
|
475
|
-
if (await val.literal() === other){
|
|
476
|
-
result = true;
|
|
477
|
-
break
|
|
478
|
-
}
|
|
479
|
-
}
|
|
480
|
-
result = result || false
|
|
481
|
-
break;
|
|
482
|
-
case 'copy':
|
|
483
|
-
result = {
|
|
484
|
-
type:'address',
|
|
485
|
-
value: await this.account.vm.instantiate({
|
|
486
|
-
type:'array',
|
|
487
|
-
value: [...this.lit.content_addr],
|
|
488
|
-
location: config.location},
|
|
489
|
-
{chain, pure: true})
|
|
490
|
-
}
|
|
491
|
-
break;
|
|
492
|
-
case 'reverse':
|
|
493
|
-
this.lit.content_addr.reverse()
|
|
494
|
-
store = true
|
|
495
|
-
break;
|
|
94
|
+
let p_folder = await this.account.manager.ds.folder(`${o.value}`)
|
|
95
|
+
await p_folder.update({_id: o._id}, {next: addr})
|
|
96
|
+
}else {
|
|
97
|
+
addr = await pair_folder.write({value}, {replace: true})
|
|
98
|
+
addr = addr.datapath
|
|
99
|
+
}
|
|
100
|
+
twa.value = addr
|
|
101
|
+
await folder.write(twa, {replace: true})
|
|
102
|
+
return addr;
|
|
496
103
|
}
|
|
497
104
|
|
|
498
|
-
|
|
499
|
-
let oracle = this.account.manager.oracle
|
|
500
|
-
let obj = {content: JSON.stringify(this.lit.content_addr), __classifier__: 'array', uid: this.lit.uid}
|
|
501
|
-
|
|
502
|
-
let path_split = this.value.path.split('/')
|
|
503
|
-
await oracle.fs.store(obj, {path: path_split.slice(0,-1).join('/'), hash: path_split[path_split.length-1], is_instance: true, type: 'twain'})
|
|
504
|
-
}
|
|
505
|
-
|
|
506
|
-
return result
|
|
105
|
+
await pair_folder.update({_id: prev._id}, {value})
|
|
507
106
|
}
|
|
508
107
|
|
|
509
|
-
|
|
510
|
-
|
|
511
|
-
await this.literal()
|
|
512
|
-
|
|
513
|
-
let result = null, store, other = args[0];
|
|
514
|
-
switch(op){
|
|
515
|
-
case 'entries':
|
|
516
|
-
result = []
|
|
517
|
-
for (let p in this.lit.content_addr){
|
|
518
|
-
let pair = this.lit.content_addr[p]
|
|
519
|
-
|
|
520
|
-
result.push(await this.account.vm.instantiate({
|
|
521
|
-
type:'array',
|
|
522
|
-
value: pair,
|
|
523
|
-
location: config.location},
|
|
524
|
-
{chain, pure: true}))
|
|
525
|
-
}
|
|
526
|
-
result = {type:'address', value: await this.account.vm.instantiate({
|
|
527
|
-
type:'array',
|
|
528
|
-
value: result,
|
|
529
|
-
location: config.location},
|
|
530
|
-
{chain, pure: true})
|
|
531
|
-
}
|
|
532
|
-
break;
|
|
533
|
-
case 'keys':
|
|
534
|
-
result = []
|
|
535
|
-
for (let p in this.lit.content_addr){
|
|
536
|
-
let pair = this.lit.content_addr[p]
|
|
537
|
-
|
|
538
|
-
result.push(pair[0])
|
|
539
|
-
}
|
|
540
|
-
result = {type:'address', value: await this.account.vm.instantiate({
|
|
541
|
-
type:'array',
|
|
542
|
-
value: result,
|
|
543
|
-
location: config.location},
|
|
544
|
-
{chain, pure: true})
|
|
545
|
-
}
|
|
546
|
-
break;
|
|
108
|
+
_split_datapath = (datapath)=>{
|
|
109
|
+
datapath = datapath.split('/')
|
|
547
110
|
|
|
548
|
-
|
|
549
|
-
|
|
550
|
-
for (let p in this.lit.content_addr){
|
|
551
|
-
let pair = this.lit.content_addr[p]
|
|
111
|
+
return [datapath.slice(0,-1).join('/'), datapath.slice(-1)[0]]
|
|
112
|
+
}
|
|
552
113
|
|
|
553
|
-
|
|
554
|
-
|
|
555
|
-
|
|
556
|
-
|
|
557
|
-
value: result,
|
|
558
|
-
location: config.location},
|
|
559
|
-
{chain, pure: true})
|
|
560
|
-
}
|
|
561
|
-
break;
|
|
562
|
-
case 'get':
|
|
563
|
-
if(typeof other === 'string'){}
|
|
564
|
-
else other = other && await other.literal()
|
|
114
|
+
remove = async({twa, key})=>{
|
|
115
|
+
let {folder:fold} = this.account.manager.ds
|
|
116
|
+
let folder = await this.folder()
|
|
117
|
+
let child = await folder.folder(key)
|
|
565
118
|
|
|
566
|
-
|
|
567
|
-
|
|
568
|
-
if (val)result = {type: 'address', value: val[1]}
|
|
569
|
-
break;
|
|
570
|
-
case 'set':
|
|
571
|
-
other = other && await other.literal()
|
|
572
|
-
let shash = await this.account.manager.oracle.hash(other, 'sha1')
|
|
573
|
-
|
|
574
|
-
this.lit.content_addr[shash] = [args[0].value.path, args[1].value.path]
|
|
575
|
-
store = true;
|
|
576
|
-
break;
|
|
577
|
-
case 'remove':
|
|
578
|
-
other = other && await other.literal()
|
|
579
|
-
let rhash = await this.account.manager.oracle.hash(other, 'sha1')
|
|
580
|
-
let rval = this.lit.content_addr[rhash]
|
|
581
|
-
if(rval)result = true
|
|
582
|
-
else result = false;
|
|
583
|
-
|
|
584
|
-
delete this.lit.content_addr[rhash]
|
|
585
|
-
store = true;
|
|
586
|
-
break
|
|
587
|
-
case 'copy':
|
|
588
|
-
result = {type:'address', value: await this.account.vm.instantiate({
|
|
589
|
-
type:'twain',
|
|
590
|
-
value: this.lit.content_addr,
|
|
591
|
-
location: config.location},
|
|
592
|
-
{chain, pure: true})
|
|
593
|
-
}
|
|
594
|
-
break;
|
|
595
|
-
case 'clear':
|
|
596
|
-
this.lit.content_addr = {}
|
|
597
|
-
store = true;
|
|
598
|
-
break
|
|
119
|
+
let val = await child.readone()
|
|
120
|
+
if (!val || (val && val.deleted)) return false;
|
|
599
121
|
|
|
122
|
+
await child.update({_id: val._id}, {deleted: true})
|
|
123
|
+
|
|
124
|
+
if (val.prev){
|
|
125
|
+
let o = this._split_datapath(val.prev)
|
|
126
|
+
let pv = await fold(o[0])
|
|
127
|
+
await pv.update({_id: o[1]}, {next: val.next})
|
|
600
128
|
}
|
|
601
|
-
|
|
602
|
-
|
|
603
|
-
let
|
|
604
|
-
|
|
605
|
-
|
|
606
|
-
let path_split = this.value.path.split('/')
|
|
607
|
-
await oracle.fs.store(obj, {path: path_split.slice(0,-1).join('/'), hash: path_split[path_split.length-1], is_instance: true, type: 'twain'})
|
|
129
|
+
if (val.next){
|
|
130
|
+
let o = this._split_datapath(val.next)
|
|
131
|
+
let nx = await fold(o[0])
|
|
132
|
+
await nx.update({_id: o[1]}, {prev: val.prev})
|
|
608
133
|
}
|
|
609
|
-
|
|
610
|
-
|
|
611
|
-
|
|
612
|
-
|
|
613
|
-
|
|
614
|
-
|
|
615
|
-
|
|
616
|
-
|
|
134
|
+
|
|
135
|
+
if (twa.value && twa.value.startsWith(child.address)){
|
|
136
|
+
if (val.next){
|
|
137
|
+
console.log("RAISE AN EYEBROW - Datatypes.remove")
|
|
138
|
+
}
|
|
139
|
+
twa.value = val.prev
|
|
140
|
+
}
|
|
141
|
+
await folder.write(twa, {replace: true})
|
|
142
|
+
return true;
|
|
617
143
|
}
|
|
618
144
|
}
|
|
619
145
|
|
|
620
|
-
export default Datatypes;
|
|
146
|
+
export default Datatypes;
|