@voidbase-cloud/voidbase 0.1.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.
Files changed (134) hide show
  1. package/.env.example +9 -0
  2. package/CHANGELOG.md +19 -0
  3. package/COMPAT.md +43 -0
  4. package/LICENSE +21 -0
  5. package/NOTICE +8 -0
  6. package/README.md +124 -0
  7. package/bin/voidbase.ts +158 -0
  8. package/crons/every-minute.ts +13 -0
  9. package/db/migrations/20260905175935_large_swarm.sql +87 -0
  10. package/db/migrations/20260905185720_wild_sunspot.sql +16 -0
  11. package/db/migrations/20260905190723_solid_toro.sql +1 -0
  12. package/db/migrations/20260905213340_remarkable_union_jack.sql +11 -0
  13. package/db/migrations/meta/20260905175935_snapshot.json +599 -0
  14. package/db/migrations/meta/20260905185720_snapshot.json +703 -0
  15. package/db/migrations/meta/20260905190723_snapshot.json +710 -0
  16. package/db/migrations/meta/20260905213340_snapshot.json +781 -0
  17. package/db/migrations/meta/_journal.json +34 -0
  18. package/db/schema.ts +130 -0
  19. package/docs/deploy.md +153 -0
  20. package/docs/differences.md +88 -0
  21. package/docs/hooks.md +84 -0
  22. package/docs/migrating.md +29 -0
  23. package/docs/perf.md +53 -0
  24. package/docs/platform.md +208 -0
  25. package/docs/releasing.md +38 -0
  26. package/env.ts +23 -0
  27. package/hooks-plugin.ts +237 -0
  28. package/package.json +134 -0
  29. package/queues/jobs.ts +13 -0
  30. package/routes/api/[...path].ts +19 -0
  31. package/scripts/bench-realtime.ts +46 -0
  32. package/scripts/bench.ts +39 -0
  33. package/scripts/ci-suites.sh +27 -0
  34. package/scripts/dev.sh +29 -0
  35. package/scripts/export.ts +70 -0
  36. package/scripts/seed-app-user.sh +14 -0
  37. package/scripts/seed-d1.ts +17 -0
  38. package/scripts/seed-reference.sh +29 -0
  39. package/scripts/starter.sh +22 -0
  40. package/scripts/sync-app.ts +22 -0
  41. package/scripts/sync-panel.ts +66 -0
  42. package/src/cloud/rest.ts +297 -0
  43. package/src/node/assets.ts +22 -0
  44. package/src/node/bundle.ts +88 -0
  45. package/src/node/cloud-init.ts +51 -0
  46. package/src/node/d1.ts +44 -0
  47. package/src/node/deploy-cf.ts +179 -0
  48. package/src/node/index.ts +5 -0
  49. package/src/node/panel.ts +21 -0
  50. package/src/node/serve.ts +125 -0
  51. package/src/node/storage.ts +51 -0
  52. package/src/platform/node/env.ts +4 -0
  53. package/src/platform/node/hooks.ts +19 -0
  54. package/src/platform/node/log.ts +7 -0
  55. package/src/platform/node/migrations.ts +5 -0
  56. package/src/platform/node/photon.ts +1 -0
  57. package/src/platform/node/sockets.ts +22 -0
  58. package/src/platform/node/sse.ts +23 -0
  59. package/src/platform/workers/env.ts +3 -0
  60. package/src/platform/workers/hooks.ts +2 -0
  61. package/src/platform/workers/log.ts +1 -0
  62. package/src/platform/workers/migrations.ts +1 -0
  63. package/src/platform/workers/photon.ts +1 -0
  64. package/src/platform/workers/sockets.ts +3 -0
  65. package/src/platform/workers/sse.ts +1 -0
  66. package/src/server/api.ts +27 -0
  67. package/src/server/app.ts +582 -0
  68. package/src/server/auth-extra.ts +113 -0
  69. package/src/server/auth-flows.ts +186 -0
  70. package/src/server/auth-response.ts +111 -0
  71. package/src/server/auth.ts +187 -0
  72. package/src/server/backups.ts +234 -0
  73. package/src/server/batch.ts +123 -0
  74. package/src/server/bootstrap.ts +71 -0
  75. package/src/server/collections/auth-option-shape.json +71 -0
  76. package/src/server/collections/ddl.ts +127 -0
  77. package/src/server/collections/fields.ts +120 -0
  78. package/src/server/collections/model.ts +185 -0
  79. package/src/server/collections/oauth2-providers.json +1 -0
  80. package/src/server/collections/scaffolds.json +210 -0
  81. package/src/server/collections/service.ts +392 -0
  82. package/src/server/collections/system.json +605 -0
  83. package/src/server/collections/system.ts +19 -0
  84. package/src/server/collections/validate.ts +239 -0
  85. package/src/server/crc32.ts +13 -0
  86. package/src/server/crons.ts +100 -0
  87. package/src/server/crypto.ts +26 -0
  88. package/src/server/db.ts +37 -0
  89. package/src/server/errors.ts +53 -0
  90. package/src/server/files-api.ts +52 -0
  91. package/src/server/filter/compile.ts +420 -0
  92. package/src/server/filter/lexer.ts +107 -0
  93. package/src/server/filter/parser.ts +49 -0
  94. package/src/server/hardening.ts +136 -0
  95. package/src/server/hooks/index.ts +147 -0
  96. package/src/server/hooks/migrations.ts +58 -0
  97. package/src/server/hooks/node-async-hooks.d.ts +7 -0
  98. package/src/server/hooks/record.ts +152 -0
  99. package/src/server/hooks/runtime.ts +344 -0
  100. package/src/server/hooks/virtual-migrations.d.ts +4 -0
  101. package/src/server/hooks/virtual.d.ts +7 -0
  102. package/src/server/hub.ts +91 -0
  103. package/src/server/ids.ts +22 -0
  104. package/src/server/jobs.ts +84 -0
  105. package/src/server/jwt.ts +61 -0
  106. package/src/server/logs.ts +144 -0
  107. package/src/server/mail/index.ts +99 -0
  108. package/src/server/mail/message.ts +43 -0
  109. package/src/server/mail/smtp.ts +82 -0
  110. package/src/server/mail/templates.ts +168 -0
  111. package/src/server/oauth2/index.ts +198 -0
  112. package/src/server/oauth2/providers.ts +153 -0
  113. package/src/server/password.ts +17 -0
  114. package/src/server/realtime/hub-client.ts +50 -0
  115. package/src/server/realtime/index.ts +239 -0
  116. package/src/server/records/expand.ts +129 -0
  117. package/src/server/records/files.ts +69 -0
  118. package/src/server/records/json.ts +23 -0
  119. package/src/server/records/picker.ts +80 -0
  120. package/src/server/records/service.ts +598 -0
  121. package/src/server/records/thumbs.ts +148 -0
  122. package/src/server/records/values.ts +295 -0
  123. package/src/server/settings-api.ts +104 -0
  124. package/src/server/settings.ts +215 -0
  125. package/src/server/sql.ts +61 -0
  126. package/src/server/static.ts +17 -0
  127. package/src/server/storage/s3.ts +118 -0
  128. package/src/server/types.ts +25 -0
  129. package/src/server/webauthn.ts +168 -0
  130. package/tsconfig.json +36 -0
  131. package/tsconfig.node.json +27 -0
  132. package/types/pb_data.d.ts +24438 -0
  133. package/vite.config.ts +10 -0
  134. package/void.json +12 -0
@@ -0,0 +1,599 @@
1
+ {
2
+ "version": "6",
3
+ "dialect": "sqlite",
4
+ "id": "f2f6245e-62b9-44fe-8be1-91168ad71a29",
5
+ "prevId": "00000000-0000-0000-0000-000000000000",
6
+ "tables": {
7
+ "_authOrigins": {
8
+ "name": "_authOrigins",
9
+ "columns": {
10
+ "id": {
11
+ "name": "id",
12
+ "type": "text",
13
+ "primaryKey": true,
14
+ "notNull": true,
15
+ "autoincrement": false,
16
+ "default": "('r'||lower(hex(randomblob(7))))"
17
+ },
18
+ "collectionRef": {
19
+ "name": "collectionRef",
20
+ "type": "text",
21
+ "primaryKey": false,
22
+ "notNull": true,
23
+ "autoincrement": false,
24
+ "default": "''"
25
+ },
26
+ "recordRef": {
27
+ "name": "recordRef",
28
+ "type": "text",
29
+ "primaryKey": false,
30
+ "notNull": true,
31
+ "autoincrement": false,
32
+ "default": "''"
33
+ },
34
+ "created": {
35
+ "name": "created",
36
+ "type": "text",
37
+ "primaryKey": false,
38
+ "notNull": true,
39
+ "autoincrement": false,
40
+ "default": "''"
41
+ },
42
+ "updated": {
43
+ "name": "updated",
44
+ "type": "text",
45
+ "primaryKey": false,
46
+ "notNull": true,
47
+ "autoincrement": false,
48
+ "default": "''"
49
+ },
50
+ "fingerprint": {
51
+ "name": "fingerprint",
52
+ "type": "text",
53
+ "primaryKey": false,
54
+ "notNull": true,
55
+ "autoincrement": false,
56
+ "default": "''"
57
+ }
58
+ },
59
+ "indexes": {
60
+ "idx_authOrigins_unique_pairs": {
61
+ "name": "idx_authOrigins_unique_pairs",
62
+ "columns": [
63
+ "collectionRef",
64
+ "recordRef",
65
+ "fingerprint"
66
+ ],
67
+ "isUnique": true
68
+ }
69
+ },
70
+ "foreignKeys": {},
71
+ "compositePrimaryKeys": {},
72
+ "uniqueConstraints": {},
73
+ "checkConstraints": {}
74
+ },
75
+ "_collections": {
76
+ "name": "_collections",
77
+ "columns": {
78
+ "id": {
79
+ "name": "id",
80
+ "type": "text",
81
+ "primaryKey": true,
82
+ "notNull": true,
83
+ "autoincrement": false,
84
+ "default": "('r'||lower(hex(randomblob(7))))"
85
+ },
86
+ "system": {
87
+ "name": "system",
88
+ "type": "integer",
89
+ "primaryKey": false,
90
+ "notNull": true,
91
+ "autoincrement": false,
92
+ "default": false
93
+ },
94
+ "type": {
95
+ "name": "type",
96
+ "type": "text",
97
+ "primaryKey": false,
98
+ "notNull": true,
99
+ "autoincrement": false,
100
+ "default": "'base'"
101
+ },
102
+ "name": {
103
+ "name": "name",
104
+ "type": "text",
105
+ "primaryKey": false,
106
+ "notNull": true,
107
+ "autoincrement": false
108
+ },
109
+ "fields": {
110
+ "name": "fields",
111
+ "type": "text",
112
+ "primaryKey": false,
113
+ "notNull": true,
114
+ "autoincrement": false,
115
+ "default": "'[]'"
116
+ },
117
+ "indexes": {
118
+ "name": "indexes",
119
+ "type": "text",
120
+ "primaryKey": false,
121
+ "notNull": true,
122
+ "autoincrement": false,
123
+ "default": "'[]'"
124
+ },
125
+ "listRule": {
126
+ "name": "listRule",
127
+ "type": "text",
128
+ "primaryKey": false,
129
+ "notNull": false,
130
+ "autoincrement": false
131
+ },
132
+ "viewRule": {
133
+ "name": "viewRule",
134
+ "type": "text",
135
+ "primaryKey": false,
136
+ "notNull": false,
137
+ "autoincrement": false
138
+ },
139
+ "createRule": {
140
+ "name": "createRule",
141
+ "type": "text",
142
+ "primaryKey": false,
143
+ "notNull": false,
144
+ "autoincrement": false
145
+ },
146
+ "updateRule": {
147
+ "name": "updateRule",
148
+ "type": "text",
149
+ "primaryKey": false,
150
+ "notNull": false,
151
+ "autoincrement": false
152
+ },
153
+ "deleteRule": {
154
+ "name": "deleteRule",
155
+ "type": "text",
156
+ "primaryKey": false,
157
+ "notNull": false,
158
+ "autoincrement": false
159
+ },
160
+ "options": {
161
+ "name": "options",
162
+ "type": "text",
163
+ "primaryKey": false,
164
+ "notNull": true,
165
+ "autoincrement": false,
166
+ "default": "'{}'"
167
+ },
168
+ "created": {
169
+ "name": "created",
170
+ "type": "text",
171
+ "primaryKey": false,
172
+ "notNull": true,
173
+ "autoincrement": false,
174
+ "default": "(strftime('%Y-%m-%d %H:%M:%fZ'))"
175
+ },
176
+ "updated": {
177
+ "name": "updated",
178
+ "type": "text",
179
+ "primaryKey": false,
180
+ "notNull": true,
181
+ "autoincrement": false,
182
+ "default": "(strftime('%Y-%m-%d %H:%M:%fZ'))"
183
+ }
184
+ },
185
+ "indexes": {
186
+ "_collections_name_unique": {
187
+ "name": "_collections_name_unique",
188
+ "columns": [
189
+ "name"
190
+ ],
191
+ "isUnique": true
192
+ },
193
+ "idx__collections_type": {
194
+ "name": "idx__collections_type",
195
+ "columns": [
196
+ "type"
197
+ ],
198
+ "isUnique": false
199
+ }
200
+ },
201
+ "foreignKeys": {},
202
+ "compositePrimaryKeys": {},
203
+ "uniqueConstraints": {},
204
+ "checkConstraints": {}
205
+ },
206
+ "_externalAuths": {
207
+ "name": "_externalAuths",
208
+ "columns": {
209
+ "id": {
210
+ "name": "id",
211
+ "type": "text",
212
+ "primaryKey": true,
213
+ "notNull": true,
214
+ "autoincrement": false,
215
+ "default": "('r'||lower(hex(randomblob(7))))"
216
+ },
217
+ "collectionRef": {
218
+ "name": "collectionRef",
219
+ "type": "text",
220
+ "primaryKey": false,
221
+ "notNull": true,
222
+ "autoincrement": false,
223
+ "default": "''"
224
+ },
225
+ "recordRef": {
226
+ "name": "recordRef",
227
+ "type": "text",
228
+ "primaryKey": false,
229
+ "notNull": true,
230
+ "autoincrement": false,
231
+ "default": "''"
232
+ },
233
+ "created": {
234
+ "name": "created",
235
+ "type": "text",
236
+ "primaryKey": false,
237
+ "notNull": true,
238
+ "autoincrement": false,
239
+ "default": "''"
240
+ },
241
+ "updated": {
242
+ "name": "updated",
243
+ "type": "text",
244
+ "primaryKey": false,
245
+ "notNull": true,
246
+ "autoincrement": false,
247
+ "default": "''"
248
+ },
249
+ "provider": {
250
+ "name": "provider",
251
+ "type": "text",
252
+ "primaryKey": false,
253
+ "notNull": true,
254
+ "autoincrement": false,
255
+ "default": "''"
256
+ },
257
+ "providerId": {
258
+ "name": "providerId",
259
+ "type": "text",
260
+ "primaryKey": false,
261
+ "notNull": true,
262
+ "autoincrement": false,
263
+ "default": "''"
264
+ }
265
+ },
266
+ "indexes": {
267
+ "idx_externalAuths_record_provider": {
268
+ "name": "idx_externalAuths_record_provider",
269
+ "columns": [
270
+ "collectionRef",
271
+ "recordRef",
272
+ "provider"
273
+ ],
274
+ "isUnique": true
275
+ },
276
+ "idx_externalAuths_collection_provider": {
277
+ "name": "idx_externalAuths_collection_provider",
278
+ "columns": [
279
+ "collectionRef",
280
+ "provider",
281
+ "providerId"
282
+ ],
283
+ "isUnique": true
284
+ }
285
+ },
286
+ "foreignKeys": {},
287
+ "compositePrimaryKeys": {},
288
+ "uniqueConstraints": {},
289
+ "checkConstraints": {}
290
+ },
291
+ "_mfas": {
292
+ "name": "_mfas",
293
+ "columns": {
294
+ "id": {
295
+ "name": "id",
296
+ "type": "text",
297
+ "primaryKey": true,
298
+ "notNull": true,
299
+ "autoincrement": false,
300
+ "default": "('r'||lower(hex(randomblob(7))))"
301
+ },
302
+ "collectionRef": {
303
+ "name": "collectionRef",
304
+ "type": "text",
305
+ "primaryKey": false,
306
+ "notNull": true,
307
+ "autoincrement": false,
308
+ "default": "''"
309
+ },
310
+ "recordRef": {
311
+ "name": "recordRef",
312
+ "type": "text",
313
+ "primaryKey": false,
314
+ "notNull": true,
315
+ "autoincrement": false,
316
+ "default": "''"
317
+ },
318
+ "created": {
319
+ "name": "created",
320
+ "type": "text",
321
+ "primaryKey": false,
322
+ "notNull": true,
323
+ "autoincrement": false,
324
+ "default": "''"
325
+ },
326
+ "updated": {
327
+ "name": "updated",
328
+ "type": "text",
329
+ "primaryKey": false,
330
+ "notNull": true,
331
+ "autoincrement": false,
332
+ "default": "''"
333
+ },
334
+ "method": {
335
+ "name": "method",
336
+ "type": "text",
337
+ "primaryKey": false,
338
+ "notNull": true,
339
+ "autoincrement": false,
340
+ "default": "''"
341
+ }
342
+ },
343
+ "indexes": {
344
+ "idx_mfas_collectionRef_recordRef": {
345
+ "name": "idx_mfas_collectionRef_recordRef",
346
+ "columns": [
347
+ "collectionRef",
348
+ "recordRef"
349
+ ],
350
+ "isUnique": false
351
+ }
352
+ },
353
+ "foreignKeys": {},
354
+ "compositePrimaryKeys": {},
355
+ "uniqueConstraints": {},
356
+ "checkConstraints": {}
357
+ },
358
+ "_pbMigrations": {
359
+ "name": "_pbMigrations",
360
+ "columns": {
361
+ "file": {
362
+ "name": "file",
363
+ "type": "text",
364
+ "primaryKey": true,
365
+ "notNull": true,
366
+ "autoincrement": false
367
+ },
368
+ "applied": {
369
+ "name": "applied",
370
+ "type": "integer",
371
+ "primaryKey": false,
372
+ "notNull": true,
373
+ "autoincrement": false
374
+ }
375
+ },
376
+ "indexes": {},
377
+ "foreignKeys": {},
378
+ "compositePrimaryKeys": {},
379
+ "uniqueConstraints": {},
380
+ "checkConstraints": {}
381
+ },
382
+ "_otps": {
383
+ "name": "_otps",
384
+ "columns": {
385
+ "id": {
386
+ "name": "id",
387
+ "type": "text",
388
+ "primaryKey": true,
389
+ "notNull": true,
390
+ "autoincrement": false,
391
+ "default": "('r'||lower(hex(randomblob(7))))"
392
+ },
393
+ "collectionRef": {
394
+ "name": "collectionRef",
395
+ "type": "text",
396
+ "primaryKey": false,
397
+ "notNull": true,
398
+ "autoincrement": false,
399
+ "default": "''"
400
+ },
401
+ "recordRef": {
402
+ "name": "recordRef",
403
+ "type": "text",
404
+ "primaryKey": false,
405
+ "notNull": true,
406
+ "autoincrement": false,
407
+ "default": "''"
408
+ },
409
+ "created": {
410
+ "name": "created",
411
+ "type": "text",
412
+ "primaryKey": false,
413
+ "notNull": true,
414
+ "autoincrement": false,
415
+ "default": "''"
416
+ },
417
+ "updated": {
418
+ "name": "updated",
419
+ "type": "text",
420
+ "primaryKey": false,
421
+ "notNull": true,
422
+ "autoincrement": false,
423
+ "default": "''"
424
+ },
425
+ "password": {
426
+ "name": "password",
427
+ "type": "text",
428
+ "primaryKey": false,
429
+ "notNull": true,
430
+ "autoincrement": false,
431
+ "default": "''"
432
+ },
433
+ "sentTo": {
434
+ "name": "sentTo",
435
+ "type": "text",
436
+ "primaryKey": false,
437
+ "notNull": true,
438
+ "autoincrement": false,
439
+ "default": "''"
440
+ }
441
+ },
442
+ "indexes": {
443
+ "idx_otps_collectionRef_recordRef": {
444
+ "name": "idx_otps_collectionRef_recordRef",
445
+ "columns": [
446
+ "collectionRef",
447
+ "recordRef"
448
+ ],
449
+ "isUnique": false
450
+ }
451
+ },
452
+ "foreignKeys": {},
453
+ "compositePrimaryKeys": {},
454
+ "uniqueConstraints": {},
455
+ "checkConstraints": {}
456
+ },
457
+ "_params": {
458
+ "name": "_params",
459
+ "columns": {
460
+ "id": {
461
+ "name": "id",
462
+ "type": "text",
463
+ "primaryKey": true,
464
+ "notNull": true,
465
+ "autoincrement": false,
466
+ "default": "('r'||lower(hex(randomblob(7))))"
467
+ },
468
+ "value": {
469
+ "name": "value",
470
+ "type": "text",
471
+ "primaryKey": false,
472
+ "notNull": false,
473
+ "autoincrement": false
474
+ },
475
+ "created": {
476
+ "name": "created",
477
+ "type": "text",
478
+ "primaryKey": false,
479
+ "notNull": true,
480
+ "autoincrement": false,
481
+ "default": "(strftime('%Y-%m-%d %H:%M:%fZ'))"
482
+ },
483
+ "updated": {
484
+ "name": "updated",
485
+ "type": "text",
486
+ "primaryKey": false,
487
+ "notNull": true,
488
+ "autoincrement": false,
489
+ "default": "(strftime('%Y-%m-%d %H:%M:%fZ'))"
490
+ }
491
+ },
492
+ "indexes": {},
493
+ "foreignKeys": {},
494
+ "compositePrimaryKeys": {},
495
+ "uniqueConstraints": {},
496
+ "checkConstraints": {}
497
+ },
498
+ "_superusers": {
499
+ "name": "_superusers",
500
+ "columns": {
501
+ "id": {
502
+ "name": "id",
503
+ "type": "text",
504
+ "primaryKey": true,
505
+ "notNull": true,
506
+ "autoincrement": false,
507
+ "default": "('r'||lower(hex(randomblob(7))))"
508
+ },
509
+ "password": {
510
+ "name": "password",
511
+ "type": "text",
512
+ "primaryKey": false,
513
+ "notNull": true,
514
+ "autoincrement": false,
515
+ "default": "''"
516
+ },
517
+ "tokenKey": {
518
+ "name": "tokenKey",
519
+ "type": "text",
520
+ "primaryKey": false,
521
+ "notNull": true,
522
+ "autoincrement": false,
523
+ "default": "''"
524
+ },
525
+ "email": {
526
+ "name": "email",
527
+ "type": "text",
528
+ "primaryKey": false,
529
+ "notNull": true,
530
+ "autoincrement": false,
531
+ "default": "''"
532
+ },
533
+ "emailVisibility": {
534
+ "name": "emailVisibility",
535
+ "type": "integer",
536
+ "primaryKey": false,
537
+ "notNull": true,
538
+ "autoincrement": false,
539
+ "default": false
540
+ },
541
+ "verified": {
542
+ "name": "verified",
543
+ "type": "integer",
544
+ "primaryKey": false,
545
+ "notNull": true,
546
+ "autoincrement": false,
547
+ "default": false
548
+ },
549
+ "created": {
550
+ "name": "created",
551
+ "type": "text",
552
+ "primaryKey": false,
553
+ "notNull": true,
554
+ "autoincrement": false,
555
+ "default": "''"
556
+ },
557
+ "updated": {
558
+ "name": "updated",
559
+ "type": "text",
560
+ "primaryKey": false,
561
+ "notNull": true,
562
+ "autoincrement": false,
563
+ "default": "''"
564
+ }
565
+ },
566
+ "indexes": {
567
+ "idx_tokenKey_pbc_3142635823": {
568
+ "name": "idx_tokenKey_pbc_3142635823",
569
+ "columns": [
570
+ "tokenKey"
571
+ ],
572
+ "isUnique": true
573
+ },
574
+ "idx_email_pbc_3142635823": {
575
+ "name": "idx_email_pbc_3142635823",
576
+ "columns": [
577
+ "email"
578
+ ],
579
+ "isUnique": true,
580
+ "where": "\"_superusers\".\"email\" != ''"
581
+ }
582
+ },
583
+ "foreignKeys": {},
584
+ "compositePrimaryKeys": {},
585
+ "uniqueConstraints": {},
586
+ "checkConstraints": {}
587
+ }
588
+ },
589
+ "views": {},
590
+ "enums": {},
591
+ "_meta": {
592
+ "schemas": {},
593
+ "tables": {},
594
+ "columns": {}
595
+ },
596
+ "internal": {
597
+ "indexes": {}
598
+ }
599
+ }