@ibgib/core-gib 0.0.4
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/.vscode/core-gib-snippets.code-snippets +189 -0
- package/.vscode/launch.json +24 -0
- package/.vscode/settings.json +56 -0
- package/.vscode/tasks.json +37 -0
- package/CHANGELOG.md +11 -0
- package/README.md +215 -0
- package/dist/common/aws-constants.d.mts +7 -0
- package/dist/common/aws-constants.d.mts.map +1 -0
- package/dist/common/aws-constants.mjs +7 -0
- package/dist/common/aws-constants.mjs.map +1 -0
- package/dist/common/bin/bin-types.d.mts +17 -0
- package/dist/common/bin/bin-types.d.mts.map +1 -0
- package/dist/common/bin/bin-types.mjs +3 -0
- package/dist/common/bin/bin-types.mjs.map +1 -0
- package/dist/common/cache/cache-types.d.mts +57 -0
- package/dist/common/cache/cache-types.d.mts.map +1 -0
- package/dist/common/cache/cache-types.mjs +2 -0
- package/dist/common/cache/cache-types.mjs.map +1 -0
- package/dist/common/comment/comment-constants.d.mts +11 -0
- package/dist/common/comment/comment-constants.d.mts.map +1 -0
- package/dist/common/comment/comment-constants.mjs +11 -0
- package/dist/common/comment/comment-constants.mjs.map +1 -0
- package/dist/common/comment/comment-helper.d.mts +59 -0
- package/dist/common/comment/comment-helper.d.mts.map +1 -0
- package/dist/common/comment/comment-helper.mjs +173 -0
- package/dist/common/comment/comment-helper.mjs.map +1 -0
- package/dist/common/comment/comment-types.d.mts +16 -0
- package/dist/common/comment/comment-types.d.mts.map +1 -0
- package/dist/common/comment/comment-types.mjs +2 -0
- package/dist/common/comment/comment-types.mjs.map +1 -0
- package/dist/common/display/display-helper.d.mts +19 -0
- package/dist/common/display/display-helper.d.mts.map +1 -0
- package/dist/common/display/display-helper.mjs +68 -0
- package/dist/common/display/display-helper.mjs.map +1 -0
- package/dist/common/display/display-types.d.mts +97 -0
- package/dist/common/display/display-types.d.mts.map +1 -0
- package/dist/common/display/display-types.mjs +37 -0
- package/dist/common/display/display-types.mjs.map +1 -0
- package/dist/common/encrypt/encrypt-constants.d.mts +27 -0
- package/dist/common/encrypt/encrypt-constants.d.mts.map +1 -0
- package/dist/common/encrypt/encrypt-constants.mjs +27 -0
- package/dist/common/encrypt/encrypt-constants.mjs.map +1 -0
- package/dist/common/encrypt/encrypt-types.d.mts +116 -0
- package/dist/common/encrypt/encrypt-types.d.mts.map +1 -0
- package/dist/common/encrypt/encrypt-types.mjs +9 -0
- package/dist/common/encrypt/encrypt-types.mjs.map +1 -0
- package/dist/common/error/error-constants.d.mts +9 -0
- package/dist/common/error/error-constants.d.mts.map +1 -0
- package/dist/common/error/error-constants.mjs +9 -0
- package/dist/common/error/error-constants.mjs.map +1 -0
- package/dist/common/error/error-helper.d.mts +43 -0
- package/dist/common/error/error-helper.d.mts.map +1 -0
- package/dist/common/error/error-helper.mjs +167 -0
- package/dist/common/error/error-helper.mjs.map +1 -0
- package/dist/common/error/error-types.d.mts +58 -0
- package/dist/common/error/error-types.d.mts.map +1 -0
- package/dist/common/error/error-types.mjs +2 -0
- package/dist/common/error/error-types.mjs.map +1 -0
- package/dist/common/form/form-helper.d.mts +97 -0
- package/dist/common/form/form-helper.d.mts.map +1 -0
- package/dist/common/form/form-helper.mjs +185 -0
- package/dist/common/form/form-helper.mjs.map +1 -0
- package/dist/common/form/form-items.d.mts +229 -0
- package/dist/common/form/form-items.d.mts.map +1 -0
- package/dist/common/form/form-items.mjs +63 -0
- package/dist/common/form/form-items.mjs.map +1 -0
- package/dist/common/import-export/import-export-types.d.mts +18 -0
- package/dist/common/import-export/import-export-types.d.mts.map +1 -0
- package/dist/common/import-export/import-export-types.mjs +2 -0
- package/dist/common/import-export/import-export-types.mjs.map +1 -0
- package/dist/common/legacy/legacy-types.d.mts +2 -0
- package/dist/common/legacy/legacy-types.d.mts.map +1 -0
- package/dist/common/legacy/legacy-types.mjs +2 -0
- package/dist/common/legacy/legacy-types.mjs.map +1 -0
- package/dist/common/link/link-constants.d.mts +2 -0
- package/dist/common/link/link-constants.d.mts.map +1 -0
- package/dist/common/link/link-constants.mjs +2 -0
- package/dist/common/link/link-constants.mjs.map +1 -0
- package/dist/common/link/link-helper.d.mts +37 -0
- package/dist/common/link/link-helper.d.mts.map +1 -0
- package/dist/common/link/link-helper.mjs +143 -0
- package/dist/common/link/link-helper.mjs.map +1 -0
- package/dist/common/link/link-types.d.mts +14 -0
- package/dist/common/link/link-types.d.mts.map +1 -0
- package/dist/common/link/link-types.mjs +2 -0
- package/dist/common/link/link-types.mjs.map +1 -0
- package/dist/common/other/graph-helper.d.mts +166 -0
- package/dist/common/other/graph-helper.d.mts.map +1 -0
- package/dist/common/other/graph-helper.mjs +710 -0
- package/dist/common/other/graph-helper.mjs.map +1 -0
- package/dist/common/other/ibgib-helper.d.mts +245 -0
- package/dist/common/other/ibgib-helper.d.mts.map +1 -0
- package/dist/common/other/ibgib-helper.mjs +641 -0
- package/dist/common/other/ibgib-helper.mjs.map +1 -0
- package/dist/common/other/other-constants.d.mts +53 -0
- package/dist/common/other/other-constants.d.mts.map +1 -0
- package/dist/common/other/other-constants.mjs +67 -0
- package/dist/common/other/other-constants.mjs.map +1 -0
- package/dist/common/other/other-types.d.mts +166 -0
- package/dist/common/other/other-types.d.mts.map +1 -0
- package/dist/common/other/other-types.mjs +30 -0
- package/dist/common/other/other-types.mjs.map +1 -0
- package/dist/common/other/svg-constants.d.mts +2 -0
- package/dist/common/other/svg-constants.d.mts.map +1 -0
- package/dist/common/other/svg-constants.mjs +2 -0
- package/dist/common/other/svg-constants.mjs.map +1 -0
- package/dist/common/other/svg-helper.d.mts +54 -0
- package/dist/common/other/svg-helper.d.mts.map +1 -0
- package/dist/common/other/svg-helper.mjs +170 -0
- package/dist/common/other/svg-helper.mjs.map +1 -0
- package/dist/common/pic/pic-constants.d.mts +13 -0
- package/dist/common/pic/pic-constants.d.mts.map +1 -0
- package/dist/common/pic/pic-constants.mjs +13 -0
- package/dist/common/pic/pic-constants.mjs.map +1 -0
- package/dist/common/pic/pic-helper.d.mts +70 -0
- package/dist/common/pic/pic-helper.d.mts.map +1 -0
- package/dist/common/pic/pic-helper.mjs +235 -0
- package/dist/common/pic/pic-helper.mjs.map +1 -0
- package/dist/common/pic/pic-types.d.mts +23 -0
- package/dist/common/pic/pic-types.d.mts.map +1 -0
- package/dist/common/pic/pic-types.mjs +2 -0
- package/dist/common/pic/pic-types.mjs.map +1 -0
- package/dist/common/root/root-constants.d.mts +40 -0
- package/dist/common/root/root-constants.d.mts.map +1 -0
- package/dist/common/root/root-constants.mjs +40 -0
- package/dist/common/root/root-constants.mjs.map +1 -0
- package/dist/common/root/root-types.d.mts +9 -0
- package/dist/common/root/root-types.d.mts.map +1 -0
- package/dist/common/root/root-types.mjs +2 -0
- package/dist/common/root/root-types.mjs.map +1 -0
- package/dist/common/tag/tag-constants.d.mts +21 -0
- package/dist/common/tag/tag-constants.d.mts.map +1 -0
- package/dist/common/tag/tag-constants.mjs +28 -0
- package/dist/common/tag/tag-constants.mjs.map +1 -0
- package/dist/common/tag/tag-types.d.mts +14 -0
- package/dist/common/tag/tag-types.d.mts.map +1 -0
- package/dist/common/tag/tag-types.mjs +2 -0
- package/dist/common/tag/tag-types.mjs.map +1 -0
- package/dist/core-constants.d.mts +89 -0
- package/dist/core-constants.d.mts.map +1 -0
- package/dist/core-constants.mjs +484 -0
- package/dist/core-constants.mjs.map +1 -0
- package/dist/core-helper.d.mts +6 -0
- package/dist/core-helper.d.mts.map +1 -0
- package/dist/core-helper.mjs +28 -0
- package/dist/core-helper.mjs.map +1 -0
- package/dist/core-types.d.mts +520 -0
- package/dist/core-types.d.mts.map +1 -0
- package/dist/core-types.mjs +2 -0
- package/dist/core-types.mjs.map +1 -0
- package/dist/index.d.mts +2 -0
- package/dist/index.d.mts.map +1 -0
- package/dist/index.mjs +3 -0
- package/dist/index.mjs.map +1 -0
- package/dist/witness/app/app-base-v1.d.mts +130 -0
- package/dist/witness/app/app-base-v1.d.mts.map +1 -0
- package/dist/witness/app/app-base-v1.mjs +462 -0
- package/dist/witness/app/app-base-v1.mjs.map +1 -0
- package/dist/witness/app/app-constants.d.mts +10 -0
- package/dist/witness/app/app-constants.d.mts.map +1 -0
- package/dist/witness/app/app-constants.mjs +13 -0
- package/dist/witness/app/app-constants.mjs.map +1 -0
- package/dist/witness/app/app-helper.d.mts +85 -0
- package/dist/witness/app/app-helper.d.mts.map +1 -0
- package/dist/witness/app/app-helper.mjs +258 -0
- package/dist/witness/app/app-helper.mjs.map +1 -0
- package/dist/witness/app/app-types.d.mts +211 -0
- package/dist/witness/app/app-types.d.mts.map +1 -0
- package/dist/witness/app/app-types.mjs +49 -0
- package/dist/witness/app/app-types.mjs.map +1 -0
- package/dist/witness/app/chat-app/chat-app-types.d.mts +18 -0
- package/dist/witness/app/chat-app/chat-app-types.d.mts.map +1 -0
- package/dist/witness/app/chat-app/chat-app-types.mjs +25 -0
- package/dist/witness/app/chat-app/chat-app-types.mjs.map +1 -0
- package/dist/witness/app/flash-app/flash-app-types.d.mts +16 -0
- package/dist/witness/app/flash-app/flash-app-types.d.mts.map +1 -0
- package/dist/witness/app/flash-app/flash-app-types.mjs +23 -0
- package/dist/witness/app/flash-app/flash-app-types.mjs.map +1 -0
- package/dist/witness/app/raw-app/raw-app-types.d.mts +18 -0
- package/dist/witness/app/raw-app/raw-app-types.d.mts.map +1 -0
- package/dist/witness/app/raw-app/raw-app-types.mjs +25 -0
- package/dist/witness/app/raw-app/raw-app-types.mjs.map +1 -0
- package/dist/witness/app/todo-app/todo-app-types.d.ts +33 -0
- package/dist/witness/app/todo-app/todo-app-types.d.ts.map +1 -0
- package/dist/witness/app/todo-app/todo-app-types.js +31 -0
- package/dist/witness/app/todo-app/todo-app-types.js.map +1 -0
- package/dist/witness/robbot/robbot-base-v1.d.ts +432 -0
- package/dist/witness/robbot/robbot-base-v1.d.ts.map +1 -0
- package/dist/witness/robbot/robbot-base-v1.js +1407 -0
- package/dist/witness/robbot/robbot-base-v1.js.map +1 -0
- package/dist/witness/robbot/robbot-constants.d.mts +24 -0
- package/dist/witness/robbot/robbot-constants.d.mts.map +1 -0
- package/dist/witness/robbot/robbot-constants.mjs +24 -0
- package/dist/witness/robbot/robbot-constants.mjs.map +1 -0
- package/dist/witness/robbot/robbot-helper.d.mts +152 -0
- package/dist/witness/robbot/robbot-helper.d.mts.map +1 -0
- package/dist/witness/robbot/robbot-helper.mjs +609 -0
- package/dist/witness/robbot/robbot-helper.mjs.map +1 -0
- package/dist/witness/robbot/robbot-types.d.mts +539 -0
- package/dist/witness/robbot/robbot-types.d.mts.map +1 -0
- package/dist/witness/robbot/robbot-types.mjs +294 -0
- package/dist/witness/robbot/robbot-types.mjs.map +1 -0
- package/dist/witness/space/bootstrap/bootstrap-constants.d.mts +14 -0
- package/dist/witness/space/bootstrap/bootstrap-constants.d.mts.map +1 -0
- package/dist/witness/space/bootstrap/bootstrap-constants.mjs +15 -0
- package/dist/witness/space/bootstrap/bootstrap-constants.mjs.map +1 -0
- package/dist/witness/space/inner-space-v1.d.ts +63 -0
- package/dist/witness/space/inner-space-v1.d.ts.map +1 -0
- package/dist/witness/space/inner-space-v1.js +356 -0
- package/dist/witness/space/inner-space-v1.js.map +1 -0
- package/dist/witness/space/outer-space/outer-space-constants.d.mts +2 -0
- package/dist/witness/space/outer-space/outer-space-constants.d.mts.map +1 -0
- package/dist/witness/space/outer-space/outer-space-constants.mjs +2 -0
- package/dist/witness/space/outer-space/outer-space-constants.mjs.map +1 -0
- package/dist/witness/space/outer-space/outer-space-helper.d.mts +28 -0
- package/dist/witness/space/outer-space/outer-space-helper.d.mts.map +1 -0
- package/dist/witness/space/outer-space/outer-space-helper.mjs +87 -0
- package/dist/witness/space/outer-space/outer-space-helper.mjs.map +1 -0
- package/dist/witness/space/outer-space/outer-space-types.d.mts +548 -0
- package/dist/witness/space/outer-space/outer-space-types.d.mts.map +1 -0
- package/dist/witness/space/outer-space/outer-space-types.mjs +118 -0
- package/dist/witness/space/outer-space/outer-space-types.mjs.map +1 -0
- package/dist/witness/space/space-base-v1.d.mts +147 -0
- package/dist/witness/space/space-base-v1.d.mts.map +1 -0
- package/dist/witness/space/space-base-v1.mjs +350 -0
- package/dist/witness/space/space-base-v1.mjs.map +1 -0
- package/dist/witness/space/space-constants.d.mts +181 -0
- package/dist/witness/space/space-constants.d.mts.map +1 -0
- package/dist/witness/space/space-constants.mjs +192 -0
- package/dist/witness/space/space-constants.mjs.map +1 -0
- package/dist/witness/space/space-helper.d.mts +666 -0
- package/dist/witness/space/space-helper.d.mts.map +1 -0
- package/dist/witness/space/space-helper.mjs +2830 -0
- package/dist/witness/space/space-helper.mjs.map +1 -0
- package/dist/witness/space/space-types.d.mts +422 -0
- package/dist/witness/space/space-types.d.mts.map +1 -0
- package/dist/witness/space/space-types.mjs +52 -0
- package/dist/witness/space/space-types.mjs.map +1 -0
- package/dist/witness/witness-base-v1.d.ts +144 -0
- package/dist/witness/witness-base-v1.d.ts.map +1 -0
- package/dist/witness/witness-base-v1.js +300 -0
- package/dist/witness/witness-base-v1.js.map +1 -0
- package/dist/witness/witness-constants.d.mts +3 -0
- package/dist/witness/witness-constants.d.mts.map +1 -0
- package/dist/witness/witness-constants.mjs +3 -0
- package/dist/witness/witness-constants.mjs.map +1 -0
- package/dist/witness/witness-form-builder.d.mts +45 -0
- package/dist/witness/witness-form-builder.d.mts.map +1 -0
- package/dist/witness/witness-form-builder.mjs +95 -0
- package/dist/witness/witness-form-builder.mjs.map +1 -0
- package/dist/witness/witness-helper.d.mts +89 -0
- package/dist/witness/witness-helper.d.mts.map +1 -0
- package/dist/witness/witness-helper.mjs +229 -0
- package/dist/witness/witness-helper.mjs.map +1 -0
- package/dist/witness/witness-types.d.mts +211 -0
- package/dist/witness/witness-types.d.mts.map +1 -0
- package/dist/witness/witness-types.mjs +2 -0
- package/dist/witness/witness-types.mjs.map +1 -0
- package/jasmine-browser.json +18 -0
- package/jasmine.json +6 -0
- package/package.json +67 -0
- package/src/assumptions.spec.mts +45 -0
- package/src/common/aws-constants.mts +5 -0
- package/src/common/bin/bin-types.mts +17 -0
- package/src/common/cache/cache-types.mts +53 -0
- package/src/common/comment/comment-constants.mts +10 -0
- package/src/common/comment/comment-helper.mts +211 -0
- package/src/common/comment/comment-types.mts +19 -0
- package/src/common/display/display-helper.mts +88 -0
- package/src/common/display/display-types.mts +108 -0
- package/src/common/encrypt/encrypt-constants.mts +28 -0
- package/src/common/encrypt/encrypt-types.mts +130 -0
- package/src/common/error/error-constants.mts +8 -0
- package/src/common/error/error-helper.mts +155 -0
- package/src/common/error/error-types.mts +62 -0
- package/src/common/form/form-helper.mts +253 -0
- package/src/common/form/form-items.mts +236 -0
- package/src/common/import-export/import-export-types.mts +18 -0
- package/src/common/legacy/about-legacy.md +0 -0
- package/src/common/legacy/legacy-types.mts +0 -0
- package/src/common/link/link-constants.mts +1 -0
- package/src/common/link/link-helper.mts +155 -0
- package/src/common/link/link-types.mts +16 -0
- package/src/common/other/graph-helper.mts +853 -0
- package/src/common/other/ibgib-helper.mts +671 -0
- package/src/common/other/other-constants.mts +76 -0
- package/src/common/other/other-types.mts +186 -0
- package/src/common/other/svg-constants.mts +1 -0
- package/src/common/other/svg-helper.mts +238 -0
- package/src/common/pic/pic-constants.mts +13 -0
- package/src/common/pic/pic-helper.mts +295 -0
- package/src/common/pic/pic-types.mts +29 -0
- package/src/common/root/root-constants.mts +41 -0
- package/src/common/root/root-types.mts +8 -0
- package/src/common/tag/tag-constants.mts +34 -0
- package/src/common/tag/tag-types.mts +19 -0
- package/src/core-constants.mts +506 -0
- package/src/core-helper.mts +33 -0
- package/src/core-types.mts +519 -0
- package/src/helper.spec.mts +64 -0
- package/src/index.mts +1 -0
- package/src/witness/app/app-base-v1.mts +584 -0
- package/src/witness/app/app-constants.mts +16 -0
- package/src/witness/app/app-helper.mts +322 -0
- package/src/witness/app/app-types.mts +252 -0
- package/src/witness/app/chat-app/chat-app-types.mts +40 -0
- package/src/witness/app/flash-app/flash-app-types.mts +38 -0
- package/src/witness/app/raw-app/raw-app-types.mts +40 -0
- package/src/witness/app/todo-app/todo-app-types.ts +59 -0
- package/src/witness/robbot/robbot-base-v1.ts +1531 -0
- package/src/witness/robbot/robbot-constants.mts +25 -0
- package/src/witness/robbot/robbot-helper.mts +676 -0
- package/src/witness/robbot/robbot-helper.spec.mts +135 -0
- package/src/witness/robbot/robbot-types.mts +797 -0
- package/src/witness/space/bootstrap/bootstrap-constants.mts +15 -0
- package/src/witness/space/inner-space-v1.ts +372 -0
- package/src/witness/space/outer-space/outer-space-constants.mts +1 -0
- package/src/witness/space/outer-space/outer-space-helper.mts +91 -0
- package/src/witness/space/outer-space/outer-space-types.mts +627 -0
- package/src/witness/space/space-base-v1.mts +414 -0
- package/src/witness/space/space-constants.mts +208 -0
- package/src/witness/space/space-helper.mts +3242 -0
- package/src/witness/space/space-types.mts +476 -0
- package/src/witness/witness-base-v1.ts +325 -0
- package/src/witness/witness-constants.mts +2 -0
- package/src/witness/witness-form-builder.mts +128 -0
- package/src/witness/witness-helper.mts +256 -0
- package/src/witness/witness-types.mts +249 -0
- package/tsconfig.json +15 -0
- package/tsconfig.test.json +10 -0
|
@@ -0,0 +1,641 @@
|
|
|
1
|
+
import * as h from '@ibgib/helper-gib';
|
|
2
|
+
import { groupBy } from '@ibgib/helper-gib';
|
|
3
|
+
import * as cTsGib from '@ibgib/ts-gib/dist/V1/constants.mjs';
|
|
4
|
+
import { getIbAndGib, getIbGibAddr, } from '@ibgib/ts-gib';
|
|
5
|
+
import { GIB, Factory_V1 as factory, } from '@ibgib/ts-gib/dist/V1/index.mjs';
|
|
6
|
+
import { validateIb } from '@ibgib/ts-gib/dist/V1/validate-helper.mjs';
|
|
7
|
+
import { getGib, getGibInfo } from '@ibgib/ts-gib/dist/V1/transforms/transform-helper.mjs';
|
|
8
|
+
import { GLOBAL_LOG_A_LOT, IB_REGEXP_DEFAULT } from '../../core-constants.mjs';
|
|
9
|
+
import { SpecialIbGibType } from './other-types.mjs';
|
|
10
|
+
const logalot = GLOBAL_LOG_A_LOT || false;
|
|
11
|
+
/**
|
|
12
|
+
* Utility function to generate hard-coded ibgibs to use at runtime "on-chain" but
|
|
13
|
+
* written at compile-time in (for now) "off-chain" source code.
|
|
14
|
+
*
|
|
15
|
+
* Because this is supposed to create and re-create deterministically the equivalent
|
|
16
|
+
* of a non-primitive ibgib "constant", this function creates a single ibgib with...
|
|
17
|
+
* * one ancestor
|
|
18
|
+
* * no past, dna, or tjp rel8ns
|
|
19
|
+
* * no tjp timestamp or uuid
|
|
20
|
+
* * no nCounter
|
|
21
|
+
*
|
|
22
|
+
* ## validation
|
|
23
|
+
*
|
|
24
|
+
* * validates the given `ib` against `ibRegExpPattern` or default regexp.
|
|
25
|
+
* * validates that rel8ns doesn't include default forbidden rel8n names or
|
|
26
|
+
* atow `'tjp'`.
|
|
27
|
+
*
|
|
28
|
+
* ## intent
|
|
29
|
+
*
|
|
30
|
+
* I want to be able to create deterministic ibGibs that I can reference at
|
|
31
|
+
* runtime, similar to an ibgib primitive (e.g. "root^gib"), but with the
|
|
32
|
+
* integrity of the `gib` hash. This way, I can reference a deterministic ibgib
|
|
33
|
+
* from code at compile time, and at runtime this will have a corresponding
|
|
34
|
+
* ibgib datum with gib-hashed integrity.
|
|
35
|
+
*
|
|
36
|
+
* ## example
|
|
37
|
+
*
|
|
38
|
+
* I want to create a "hard-coded" schema ibgib that I rel8 to some protocol
|
|
39
|
+
* ibgib. So I'll create the data here, which lives in source control in a text file,
|
|
40
|
+
* and then I'll render that as an ibgib that verifies integrity. If I as a coder change
|
|
41
|
+
* it at all, then the `gib` of course will be different.
|
|
42
|
+
*
|
|
43
|
+
* @param param0
|
|
44
|
+
*/
|
|
45
|
+
export async function constantIbGib({ parentPrimitiveIb, ib, ibRegExpPattern, data, rel8ns, }) {
|
|
46
|
+
const lc = `[${constantIbGib.name}]`;
|
|
47
|
+
try {
|
|
48
|
+
// validation
|
|
49
|
+
// parentPrimitiveIb
|
|
50
|
+
if (!parentPrimitiveIb) {
|
|
51
|
+
throw new Error(`parentPrimitiveIb required. (E: 88ddf188cc5a4340b597abefba1481e2)`);
|
|
52
|
+
}
|
|
53
|
+
if (validateIb({ ib: parentPrimitiveIb }) !== null) {
|
|
54
|
+
throw new Error(`Invalid parentPrimitiveIb: ${parentPrimitiveIb}. (E:5aec0320956d492ebeeaca41eb1fe1c6)`);
|
|
55
|
+
}
|
|
56
|
+
// ib
|
|
57
|
+
if (!ib) {
|
|
58
|
+
throw new Error(`ib required. (E: 7bbc88f4f2e842d6b00126e55b1783e4)`);
|
|
59
|
+
}
|
|
60
|
+
const regExp = ibRegExpPattern ? new RegExp(ibRegExpPattern) : IB_REGEXP_DEFAULT;
|
|
61
|
+
if (!ib.match(regExp)) {
|
|
62
|
+
throw new Error(`invalid ib. does not match regexp (${regExp})`);
|
|
63
|
+
}
|
|
64
|
+
// rel8ns
|
|
65
|
+
const incomingRel8nNames = Object.keys(rel8ns ?? {});
|
|
66
|
+
const forbiddenRel8nNames = [...cTsGib.FORBIDDEN_ADD_RENAME_REMOVE_REL8N_NAMES, 'tjp'];
|
|
67
|
+
const rel8nsIsInvalid = incomingRel8nNames.some(x => {
|
|
68
|
+
// we don't want constants trying to look like they have/are descendants/tjps/etc.
|
|
69
|
+
return forbiddenRel8nNames.includes(x);
|
|
70
|
+
});
|
|
71
|
+
if (rel8nsIsInvalid) {
|
|
72
|
+
throw new Error(`Invalid rel8ns. forbiddenRel8nNames: ${forbiddenRel8nNames}. rel8ns keys: ${Object.keys(rel8ns ?? {})}. (E: 837a993c265c4362b6aa0b1a234ea5f8)`);
|
|
73
|
+
}
|
|
74
|
+
// create the constant
|
|
75
|
+
const resFirstGen = await factory.firstGen({
|
|
76
|
+
ib,
|
|
77
|
+
parentIbGib: factory.primitive({ ib: parentPrimitiveIb }),
|
|
78
|
+
data,
|
|
79
|
+
rel8ns,
|
|
80
|
+
dna: false,
|
|
81
|
+
noTimestamp: true,
|
|
82
|
+
nCounter: false,
|
|
83
|
+
});
|
|
84
|
+
const constantIbGib = resFirstGen.newIbGib;
|
|
85
|
+
// remove any extraneous stuff
|
|
86
|
+
if (constantIbGib?.rel8ns?.past) {
|
|
87
|
+
delete constantIbGib.rel8ns.past;
|
|
88
|
+
}
|
|
89
|
+
if (constantIbGib?.rel8ns?.tjp) {
|
|
90
|
+
delete constantIbGib.rel8ns.tjp;
|
|
91
|
+
}
|
|
92
|
+
if (constantIbGib?.rel8ns?.identity) {
|
|
93
|
+
delete constantIbGib.rel8ns.identity;
|
|
94
|
+
}
|
|
95
|
+
// recalculate the gib hash
|
|
96
|
+
// constantIbGib.gib = await sha256v1({
|
|
97
|
+
constantIbGib.gib = await getGib({
|
|
98
|
+
ibGib: {
|
|
99
|
+
ib: constantIbGib.ib,
|
|
100
|
+
data: constantIbGib.data,
|
|
101
|
+
rel8ns: constantIbGib.rel8ns,
|
|
102
|
+
},
|
|
103
|
+
hasTjp: false,
|
|
104
|
+
});
|
|
105
|
+
return constantIbGib;
|
|
106
|
+
}
|
|
107
|
+
catch (error) {
|
|
108
|
+
console.error(`${lc} ${error.message}`);
|
|
109
|
+
throw error;
|
|
110
|
+
}
|
|
111
|
+
}
|
|
112
|
+
/**
|
|
113
|
+
* Binaries require special handling, since they do not conform to the
|
|
114
|
+
* "normal" IbGib_V1 data structure per se. This stems from wanting to
|
|
115
|
+
* be able to have binaries (jpgs, gifs, etc. especially) able to
|
|
116
|
+
* sit on a server and be served as regular files.
|
|
117
|
+
*
|
|
118
|
+
* @returns string in expected template for binaries in this app.
|
|
119
|
+
*/
|
|
120
|
+
export function getBinIb({ binHash, binExt }) {
|
|
121
|
+
return binExt ? `bin ${binHash} ${binExt}` : `bin ${binHash}`;
|
|
122
|
+
}
|
|
123
|
+
export function getBinHashAndExt({ addr }) {
|
|
124
|
+
const lc = `[${getBinHashAndExt.name}]`;
|
|
125
|
+
try {
|
|
126
|
+
if (!isBinary({ addr })) {
|
|
127
|
+
throw new Error(`not a bin address (E: df0804d129bc4888bd6939cb76c5e0f6)`);
|
|
128
|
+
}
|
|
129
|
+
const { ib } = getIbAndGib({ ibGibAddr: addr });
|
|
130
|
+
const ibPieces = ib.split(' ');
|
|
131
|
+
const binHash = ibPieces[1];
|
|
132
|
+
const binExt = ibPieces[2];
|
|
133
|
+
return { binHash, binExt };
|
|
134
|
+
}
|
|
135
|
+
catch (error) {
|
|
136
|
+
console.error(`${lc} ${error.message}`);
|
|
137
|
+
throw error;
|
|
138
|
+
}
|
|
139
|
+
}
|
|
140
|
+
export function isBinary({ ibGib, addr, }) {
|
|
141
|
+
const lc = `[${isBinary.name}]`;
|
|
142
|
+
try {
|
|
143
|
+
// probably overkill here, but...
|
|
144
|
+
if (!ibGib && !addr) {
|
|
145
|
+
throw new Error(`either ibGib or addr required. (E: c935b51e773f41a2a547c556e9dc16c6)`);
|
|
146
|
+
}
|
|
147
|
+
addr = addr || getIbGibAddr({ ibGib });
|
|
148
|
+
const { ib, gib } = getIbAndGib({ ibGibAddr: addr });
|
|
149
|
+
if (!ib) {
|
|
150
|
+
return false;
|
|
151
|
+
}
|
|
152
|
+
if (!gib) {
|
|
153
|
+
return false;
|
|
154
|
+
}
|
|
155
|
+
if (!ib.startsWith('bin ')) {
|
|
156
|
+
return false;
|
|
157
|
+
}
|
|
158
|
+
if (gib.length !== 64) {
|
|
159
|
+
console.warn(`${lc} gib length is not 64, so return false. But this may not be true if using another hash algorithm.`);
|
|
160
|
+
return false;
|
|
161
|
+
}
|
|
162
|
+
const ibPieces = ib.split(' ');
|
|
163
|
+
if (ibPieces.length !== 3) {
|
|
164
|
+
return false;
|
|
165
|
+
}
|
|
166
|
+
if (ibPieces[1] === "") {
|
|
167
|
+
return false;
|
|
168
|
+
}
|
|
169
|
+
return true;
|
|
170
|
+
}
|
|
171
|
+
catch (error) {
|
|
172
|
+
console.error(`${lc} ${error.message}`);
|
|
173
|
+
throw error;
|
|
174
|
+
}
|
|
175
|
+
}
|
|
176
|
+
export async function hash16816({ s, algorithm, }) {
|
|
177
|
+
const lc = `[${hash16816.name}]`;
|
|
178
|
+
try {
|
|
179
|
+
let hashed = '';
|
|
180
|
+
for (let i = 0; i < 168; i++) {
|
|
181
|
+
hashed = await h.hash({ s, algorithm });
|
|
182
|
+
}
|
|
183
|
+
return hashed.slice(0, 16);
|
|
184
|
+
}
|
|
185
|
+
catch (error) {
|
|
186
|
+
console.error(`${lc} ${error.message}`);
|
|
187
|
+
throw error;
|
|
188
|
+
}
|
|
189
|
+
}
|
|
190
|
+
export function getSpecialIbGibIb({ type }) {
|
|
191
|
+
return `meta special ${type}`;
|
|
192
|
+
}
|
|
193
|
+
export function getSpecialTypeFromIb({ ib }) {
|
|
194
|
+
const lc = `[${getSpecialTypeFromIb.name}]`;
|
|
195
|
+
try {
|
|
196
|
+
if (logalot) {
|
|
197
|
+
console.log(`${lc} starting... (I: c82ba222bd345ee6b695df4d63a23322)`);
|
|
198
|
+
}
|
|
199
|
+
if (!ib) {
|
|
200
|
+
throw new Error(`ib required (E: 08897145f7138e644fe01c4a59353322)`);
|
|
201
|
+
}
|
|
202
|
+
if (!isSpecial({ ib })) {
|
|
203
|
+
throw new Error(`ib is not special (E: 174aff63b992adff3ac2394643735922)`);
|
|
204
|
+
}
|
|
205
|
+
const pieces = ib.split(' ');
|
|
206
|
+
if (pieces.length < 3) {
|
|
207
|
+
throw new Error(`invalid ib. should be space-delimited in form of "meta special [type]" (E: ffd89e2cbe63427f98634ab897aab222)`);
|
|
208
|
+
}
|
|
209
|
+
const specialType = pieces[2];
|
|
210
|
+
if (!Object.values(SpecialIbGibType).some(x => x === specialType)) {
|
|
211
|
+
console.warn(`unknown special type (${specialType}). This may be expected, but atow I am adding special types to the SpecialIbGibType enum-like. (W: f4e26c3ebb57fe49d69014a4ba32a922)`);
|
|
212
|
+
}
|
|
213
|
+
return specialType;
|
|
214
|
+
}
|
|
215
|
+
catch (error) {
|
|
216
|
+
console.error(`${lc} ${error.message}`);
|
|
217
|
+
throw error;
|
|
218
|
+
}
|
|
219
|
+
finally {
|
|
220
|
+
if (logalot) {
|
|
221
|
+
console.log(`${lc} complete.`);
|
|
222
|
+
}
|
|
223
|
+
}
|
|
224
|
+
}
|
|
225
|
+
export function getSpecialIbGibAddr({ type }) {
|
|
226
|
+
const ib = getSpecialIbGibIb({ type });
|
|
227
|
+
return `${ib}^${GIB}`;
|
|
228
|
+
}
|
|
229
|
+
export function getSpecialConfigKey({ type }) {
|
|
230
|
+
return `config_key ${getSpecialIbGibAddr({ type })}`;
|
|
231
|
+
}
|
|
232
|
+
export function isSpecial({ ib, ibGib }) {
|
|
233
|
+
if (!ib && !ibGib?.ib) {
|
|
234
|
+
throw new Error(`either ib or ibGib.ib required (E: b4cf539638d7966c2e351987f55e1a23)`);
|
|
235
|
+
}
|
|
236
|
+
return (ib ?? ibGib?.ib)?.startsWith('meta special');
|
|
237
|
+
}
|
|
238
|
+
/**
|
|
239
|
+
* returns ib for a given root. ATOW this is simply "root {text}"
|
|
240
|
+
*
|
|
241
|
+
* @returns ib for the given rootText
|
|
242
|
+
*/
|
|
243
|
+
export function getRootIb(rootText) {
|
|
244
|
+
const lc = `[${getRootIb.name}]`;
|
|
245
|
+
if (!rootText) {
|
|
246
|
+
throw new Error(`${lc} text required.`);
|
|
247
|
+
}
|
|
248
|
+
return `root ${rootText}`;
|
|
249
|
+
}
|
|
250
|
+
/**
|
|
251
|
+
* Tags for this app have the form: tag [tagText]
|
|
252
|
+
*
|
|
253
|
+
* @param tagText e.g. "Favorites"
|
|
254
|
+
*
|
|
255
|
+
* @example
|
|
256
|
+
* For the Favorites tag, the ib would be "tag Favorites"
|
|
257
|
+
*/
|
|
258
|
+
export function tagTextToIb(tagText) {
|
|
259
|
+
const lc = `[${tagTextToIb.name}]`;
|
|
260
|
+
if (!tagText) {
|
|
261
|
+
throw new Error(`${lc} tag required.`);
|
|
262
|
+
}
|
|
263
|
+
return `tag ${tagText}`;
|
|
264
|
+
}
|
|
265
|
+
/**
|
|
266
|
+
* Living: has tjp and dna.
|
|
267
|
+
* Stones: does not have Dna, maybe has tjp.
|
|
268
|
+
*
|
|
269
|
+
* Splits the given `ibGibs` into two maps, one that includes the ibgibs that
|
|
270
|
+
* have a tjp (temporal junction point) AND dna ("living") and those that do not
|
|
271
|
+
* have both tjp AND dna ("stones").
|
|
272
|
+
*
|
|
273
|
+
* ## notes
|
|
274
|
+
*
|
|
275
|
+
* Having dna implies having a tjp, but the reverse is not necessarily true.
|
|
276
|
+
* Sometimes you want an ibgib that has a tjp so you can, e.g., reference the
|
|
277
|
+
* entire timeline easily. But at the same time you don't want to keep track of
|
|
278
|
+
* the transforms, perhaps this is because you don't want to be able to merge
|
|
279
|
+
* timelines.
|
|
280
|
+
*/
|
|
281
|
+
export function splitPerTjpAndOrDna({ ibGibs, filterPrimitives, }) {
|
|
282
|
+
const lc = `[${splitPerTjpAndOrDna.name}]`;
|
|
283
|
+
try {
|
|
284
|
+
const mapWithTjp_YesDna = {};
|
|
285
|
+
const mapWithTjp_NoDna = {};
|
|
286
|
+
const mapWithoutTjps = {};
|
|
287
|
+
// const mapLivingIbGibs: { [gib: string]: IbGib_V1 } = {};
|
|
288
|
+
// const mapStoneIbGibs: { [gib: string]: IbGib_V1 } = {};
|
|
289
|
+
const ibGibsTodo = filterPrimitives ?
|
|
290
|
+
ibGibs.filter(ibGib => ibGib.gib ?? ibGib.gib !== GIB) :
|
|
291
|
+
ibGibs;
|
|
292
|
+
ibGibsTodo.forEach(ibGib => {
|
|
293
|
+
if (hasTjp({ ibGib })) {
|
|
294
|
+
if ((ibGib.rel8ns?.dna ?? []).length > 0) {
|
|
295
|
+
mapWithTjp_YesDna[ibGib.gib] = ibGib;
|
|
296
|
+
}
|
|
297
|
+
else {
|
|
298
|
+
mapWithTjp_NoDna[ibGib.gib] = ibGib;
|
|
299
|
+
}
|
|
300
|
+
}
|
|
301
|
+
else {
|
|
302
|
+
mapWithoutTjps[ibGib.gib] = ibGib;
|
|
303
|
+
}
|
|
304
|
+
});
|
|
305
|
+
return { mapWithTjp_YesDna, mapWithTjp_NoDna, mapWithoutTjps };
|
|
306
|
+
}
|
|
307
|
+
catch (error) {
|
|
308
|
+
console.error(`${lc} ${error.message}`);
|
|
309
|
+
throw error;
|
|
310
|
+
}
|
|
311
|
+
}
|
|
312
|
+
/**
|
|
313
|
+
* Takes incoming `ibGibs`, filters out those that do
|
|
314
|
+
* not have tjps( i.e. non-timelines), and groups
|
|
315
|
+
* the timeline ibgibs by tjp in ascending order.
|
|
316
|
+
*
|
|
317
|
+
* This means that each map entry will be in the form:
|
|
318
|
+
* `[tjpAddr] => [ibgib0 (tjp), ibgib1, ibgib2, ..., ibgibN (latest)]`
|
|
319
|
+
*
|
|
320
|
+
* ## notes
|
|
321
|
+
*
|
|
322
|
+
* * sorts by `ibgib.data.n`. If this is undefined, will not sort in ascending
|
|
323
|
+
* order properly.
|
|
324
|
+
*
|
|
325
|
+
* @returns filtered, sorted map of incoming `ibGibs` [tjpAddr] => timeline [ibgib0 (tjp), ibgib1, ibgib2, ..., ibgibN (latest)]
|
|
326
|
+
*/
|
|
327
|
+
export function getTimelinesGroupedByTjp({ ibGibs, }) {
|
|
328
|
+
const lc = `[${getTimelinesGroupedByTjp.name}]`;
|
|
329
|
+
try {
|
|
330
|
+
if (logalot) {
|
|
331
|
+
console.log(`${lc} starting...`);
|
|
332
|
+
}
|
|
333
|
+
// pull out only the ibgibs in timelines (either is tjp or has tjp)
|
|
334
|
+
let { mapWithTjp_YesDna, mapWithTjp_NoDna } = splitPerTjpAndOrDna({ ibGibs, filterPrimitives: true });
|
|
335
|
+
const mapIbGibsWithTjp = { ...mapWithTjp_YesDna, ...mapWithTjp_NoDna };
|
|
336
|
+
const ibGibsWithTjp = Object.values(mapIbGibsWithTjp);
|
|
337
|
+
const mapTjpTimelines_Ascending = groupBy({
|
|
338
|
+
items: ibGibsWithTjp,
|
|
339
|
+
keyFn: x => {
|
|
340
|
+
// x.data?.isTjp ? getIbGibAddr({ ibGib: x }) : (x.rel8ns?.tjp[0] ?? '') // converting this untested...hmm
|
|
341
|
+
if (x.data?.isTjp) {
|
|
342
|
+
return getIbGibAddr({ ibGib: x });
|
|
343
|
+
}
|
|
344
|
+
else if (x.rel8ns?.tjp) {
|
|
345
|
+
return x.rel8ns?.tjp[0] ?? '';
|
|
346
|
+
}
|
|
347
|
+
else {
|
|
348
|
+
if (logalot) {
|
|
349
|
+
console.log(`${lc} neither isTjp nor x.rel8ns.tjp truthy (I: ec9a5597bf53dec1bd3d83350abbf823)`);
|
|
350
|
+
}
|
|
351
|
+
return '';
|
|
352
|
+
}
|
|
353
|
+
}
|
|
354
|
+
});
|
|
355
|
+
if (logalot) {
|
|
356
|
+
console.log(`${lc} sorting (ascending) ibGibsWithTjpGroupedByTjpAddr: ${h.pretty(mapTjpTimelines_Ascending)} (I: 9b9fff5ce61444a6cb06d62db9a99422)`);
|
|
357
|
+
}
|
|
358
|
+
Object.entries(mapTjpTimelines_Ascending).forEach(([_tjpAddr, timeline]) => {
|
|
359
|
+
if (timeline.some(ibGib => ibGib.data?.n === undefined)) {
|
|
360
|
+
console.warn(`${lc} timeline includes ibgibs with ibGib.data?.n === undefined (W: cab9a6b64a38c4279fe82c3569bbab22)`);
|
|
361
|
+
}
|
|
362
|
+
// sort mutates array in place
|
|
363
|
+
timeline.sort((a, b) => (a.data?.n ?? -1) > (b.data?.n ?? -1) ? 1 : -1); // sorts ascending, e.g., 0,1,2...[Highest]
|
|
364
|
+
});
|
|
365
|
+
if (logalot) {
|
|
366
|
+
console.log(`${lc} after sort ibGibsWithTjpGroupedByTjpAddr: ${h.pretty(mapTjpTimelines_Ascending)} (I: 9b9fff5ce61444a6cb06d62db9a99422)`);
|
|
367
|
+
}
|
|
368
|
+
return mapTjpTimelines_Ascending; // ascending
|
|
369
|
+
}
|
|
370
|
+
catch (error) {
|
|
371
|
+
console.error(`${lc} ${error.message}`);
|
|
372
|
+
throw error;
|
|
373
|
+
}
|
|
374
|
+
finally {
|
|
375
|
+
if (logalot) {
|
|
376
|
+
console.log(`${lc} complete.`);
|
|
377
|
+
}
|
|
378
|
+
}
|
|
379
|
+
}
|
|
380
|
+
/**
|
|
381
|
+
* Helper function that checks the given `ibGib` to see if it
|
|
382
|
+
* either has a tjp or is a tjp itself.
|
|
383
|
+
*
|
|
384
|
+
* ## notes
|
|
385
|
+
*
|
|
386
|
+
* Only unique ibGibs are meant to have tjps, or rather, if an
|
|
387
|
+
* ibGib timeline is expected to be unique over "time", then the
|
|
388
|
+
* tjp is an extremely convenient mechanism that provides a
|
|
389
|
+
* "name" for that timeline.
|
|
390
|
+
*
|
|
391
|
+
* Otherwise, if they are not unique, then successive "different"
|
|
392
|
+
* timelines cannot be easily referenced by their first unique
|
|
393
|
+
* frame in time, making it much harder to pub/sub updates among
|
|
394
|
+
* other things. (If there are no unique frames, then they are
|
|
395
|
+
* the same ibGib.)
|
|
396
|
+
*
|
|
397
|
+
* ## tjp = temporal junction point
|
|
398
|
+
*
|
|
399
|
+
* I've written elsewhere on this as well. Refer to B2tF2.
|
|
400
|
+
*
|
|
401
|
+
* @returns true if the ibGib has/is a tjp, else false
|
|
402
|
+
*/
|
|
403
|
+
export function hasTjp({ ibGib }) {
|
|
404
|
+
const lc = `[${hasTjp.name}]`;
|
|
405
|
+
if (!ibGib) {
|
|
406
|
+
console.warn(`${lc} ibGib falsy. (W: 884178562f5b4f15933ac4d98db74cc6)`);
|
|
407
|
+
return false;
|
|
408
|
+
}
|
|
409
|
+
if (ibGib.data?.isTjp || (ibGib.rel8ns?.tjp?.length ?? 0) > 0) {
|
|
410
|
+
return true;
|
|
411
|
+
}
|
|
412
|
+
// dna transforms do not have tjp
|
|
413
|
+
const dnaPrimitives = ['fork^gib', 'mut8^gib', 'rel8^gib'];
|
|
414
|
+
if ((ibGib.rel8ns?.ancestor ?? []).some(x => dnaPrimitives.includes(x))) {
|
|
415
|
+
return false;
|
|
416
|
+
}
|
|
417
|
+
if (!ibGib.gib) {
|
|
418
|
+
console.warn(`${lc} ibGib.gib falsy. (W: 6400d780822b44d992846f1196509be3)`);
|
|
419
|
+
return false;
|
|
420
|
+
}
|
|
421
|
+
if (ibGib.gib.includes(cTsGib.GIB_DELIMITER)) {
|
|
422
|
+
return true;
|
|
423
|
+
}
|
|
424
|
+
if (ibGib.gib === cTsGib.GIB) {
|
|
425
|
+
// primitive
|
|
426
|
+
return false;
|
|
427
|
+
}
|
|
428
|
+
// use more expensive getGibInfo call.
|
|
429
|
+
// could possibly just return false at this point, but since gib info
|
|
430
|
+
// would change if we change our standards for gib, this is nicer.
|
|
431
|
+
const gibInfo = getGibInfo({ ibGibAddr: getIbGibAddr({ ibGib }) });
|
|
432
|
+
return gibInfo.tjpGib ? true : false;
|
|
433
|
+
}
|
|
434
|
+
export function hasDna({ ibGib }) {
|
|
435
|
+
const lc = `[${hasDna.name}]`;
|
|
436
|
+
if (!ibGib) {
|
|
437
|
+
console.warn(`${lc} ibGib falsy. (W: 5fd19751f5c84da59d83dd33487ed859)`);
|
|
438
|
+
return false;
|
|
439
|
+
}
|
|
440
|
+
return (ibGib.rel8ns?.dna ?? []).length > 0;
|
|
441
|
+
}
|
|
442
|
+
/**
|
|
443
|
+
* Extracts the tjp addr from the ibgib record. If there is no tjp addr found,
|
|
444
|
+
* then refers to `defaultIfNone` arg to determine if it returns undefined or
|
|
445
|
+
* the incoming ibgib's addr.
|
|
446
|
+
* @returns extracted tjp addr or undefined, depending on if found and defaultIfNone value
|
|
447
|
+
*/
|
|
448
|
+
export function getTjpAddr({ ibGib, defaultIfNone = 'undefined', }) {
|
|
449
|
+
const lc = `[${getTjpAddr.name}]`;
|
|
450
|
+
try {
|
|
451
|
+
const tjpMap = getTjpAddrs({ ibGibs: [ibGib], defaultIfNone });
|
|
452
|
+
return tjpMap && Object.keys(tjpMap).length === 1 ? Object.values(tjpMap)[0] : undefined;
|
|
453
|
+
}
|
|
454
|
+
catch (error) {
|
|
455
|
+
console.error(`${lc} ${error.message}`);
|
|
456
|
+
throw error;
|
|
457
|
+
}
|
|
458
|
+
}
|
|
459
|
+
/**
|
|
460
|
+
* builds a map of the given ibgib's addrs to each's corresponding tjp addr.
|
|
461
|
+
*
|
|
462
|
+
* @returns a map of ibgib addr -> tjp addr
|
|
463
|
+
*/
|
|
464
|
+
export function getTjpAddrs({ ibGibs, defaultIfNone = 'undefined', }) {
|
|
465
|
+
const lc = `[${getTjpAddrs.name}]`;
|
|
466
|
+
try {
|
|
467
|
+
const resultMap = {};
|
|
468
|
+
ibGibs.forEach(ibGib => {
|
|
469
|
+
let ibGibAddr = getIbGibAddr({ ibGib });
|
|
470
|
+
let tjpAddr;
|
|
471
|
+
if (ibGib.rel8ns?.tjp?.length ?? 0 > 0) {
|
|
472
|
+
// get the last tjp addr atow
|
|
473
|
+
tjpAddr = ibGib.rel8ns.tjp[ibGib.rel8ns.tjp.length - 1];
|
|
474
|
+
}
|
|
475
|
+
else if (ibGib.data?.isTjp || defaultIfNone === 'incomingAddr') {
|
|
476
|
+
// either the incoming addr is the tjp or we're defaulting to it per defaultIfNone arg
|
|
477
|
+
tjpAddr = ibGibAddr;
|
|
478
|
+
}
|
|
479
|
+
else {
|
|
480
|
+
// explicitly set to undefined per defaultIfNone arg
|
|
481
|
+
tjpAddr = undefined;
|
|
482
|
+
}
|
|
483
|
+
resultMap[ibGibAddr] = tjpAddr;
|
|
484
|
+
});
|
|
485
|
+
return resultMap;
|
|
486
|
+
}
|
|
487
|
+
catch (error) {
|
|
488
|
+
console.error(`${lc} ${error.message}`);
|
|
489
|
+
throw error;
|
|
490
|
+
}
|
|
491
|
+
}
|
|
492
|
+
/**
|
|
493
|
+
* Combines two maps/arrays into a single one with some very basic, naive merge rules:
|
|
494
|
+
*
|
|
495
|
+
* 1. If a key exists in only one map, then it will be included in the output map.
|
|
496
|
+
* 2. If a key exists in both maps and the type is array or map, then these will be recursively merged.
|
|
497
|
+
* 3. If a key exists in both maps but is not an array or map, the dominant map's value wins.
|
|
498
|
+
*
|
|
499
|
+
* ## future
|
|
500
|
+
*
|
|
501
|
+
* In the future, if we want to keep these kinds of things around and be more
|
|
502
|
+
* specific about mergers, we can always rel8 a merge strategy ibgib to be
|
|
503
|
+
* referred to when performing merger.
|
|
504
|
+
*/
|
|
505
|
+
export function mergeMapsOrArrays_Naive({ dominant, recessive, }) {
|
|
506
|
+
const lc = `[${mergeMapsOrArrays_Naive.name}]`;
|
|
507
|
+
try {
|
|
508
|
+
if (Array.isArray(dominant) && Array.isArray(recessive)) {
|
|
509
|
+
// arrays
|
|
510
|
+
const output = h.clone(dominant);
|
|
511
|
+
let warned = false;
|
|
512
|
+
recessive.forEach((recessiveItem) => {
|
|
513
|
+
if (typeof (recessiveItem) === 'string') {
|
|
514
|
+
if (!output.includes(recessiveItem)) {
|
|
515
|
+
output.push(recessiveItem);
|
|
516
|
+
}
|
|
517
|
+
}
|
|
518
|
+
else {
|
|
519
|
+
if (!warned) {
|
|
520
|
+
console.warn(`${lc} merging arrays of non-string elements. (W: d8ab113064834abc8eb5fe6c4cf87ba3)`);
|
|
521
|
+
warned = true;
|
|
522
|
+
}
|
|
523
|
+
// we'll check the stringified version of recessive item against
|
|
524
|
+
// the stringified dominant item.
|
|
525
|
+
const xString = JSON.stringify(recessiveItem);
|
|
526
|
+
if (!output.some(o => JSON.stringify(o) === xString)) {
|
|
527
|
+
output.push(recessiveItem);
|
|
528
|
+
}
|
|
529
|
+
}
|
|
530
|
+
});
|
|
531
|
+
return output;
|
|
532
|
+
}
|
|
533
|
+
else if (typeof (dominant) === 'object' && typeof (recessive) === 'object') {
|
|
534
|
+
// maps
|
|
535
|
+
const output = {};
|
|
536
|
+
const dominantKeys = Object.keys(dominant);
|
|
537
|
+
const recessiveKeys = Object.keys(recessive);
|
|
538
|
+
dominantKeys.forEach((key) => {
|
|
539
|
+
if (recessiveKeys.includes(key)) {
|
|
540
|
+
// naive merge for key that exists in both dominant & recessive
|
|
541
|
+
if (Array.isArray(dominant[key]) && Array.isArray(recessive[key])) {
|
|
542
|
+
// recursive call if both arrays
|
|
543
|
+
output[key] = mergeMapsOrArrays_Naive({
|
|
544
|
+
dominant: dominant[key],
|
|
545
|
+
recessive: recessive[key],
|
|
546
|
+
});
|
|
547
|
+
}
|
|
548
|
+
else if (!!dominant[key] && !Array.isArray(dominant[key]) && typeof (dominant[key]) === 'object' &&
|
|
549
|
+
!!recessive[key] && !!Array.isArray(recessive[key]) && typeof (recessive[key]) === 'object') {
|
|
550
|
+
// recursive call if both objects
|
|
551
|
+
output[key] = mergeMapsOrArrays_Naive({
|
|
552
|
+
dominant: dominant[key],
|
|
553
|
+
recessive: recessive[key],
|
|
554
|
+
});
|
|
555
|
+
}
|
|
556
|
+
else {
|
|
557
|
+
output[key] = dominant[key];
|
|
558
|
+
}
|
|
559
|
+
}
|
|
560
|
+
else {
|
|
561
|
+
output[key] = dominant[key];
|
|
562
|
+
}
|
|
563
|
+
});
|
|
564
|
+
return output;
|
|
565
|
+
}
|
|
566
|
+
else {
|
|
567
|
+
// ? unknown matching of dominant and recessive
|
|
568
|
+
console.warn(`${lc} unknown values or value types do not match. Both should either be an array or map. Dominant one wins categorically without any merging. (W: 3690ea19b81a4b89b98c1940637df62c)`);
|
|
569
|
+
return dominant;
|
|
570
|
+
}
|
|
571
|
+
}
|
|
572
|
+
catch (error) {
|
|
573
|
+
console.error(`${lc} ${error.message}`);
|
|
574
|
+
throw error;
|
|
575
|
+
}
|
|
576
|
+
}
|
|
577
|
+
;
|
|
578
|
+
/**
|
|
579
|
+
* Returns true if the given {@param ibGib} is the temporal junction
|
|
580
|
+
* point for a given ibGib timeline.
|
|
581
|
+
*/
|
|
582
|
+
export async function isTjp_Naive({ ibGib, naive = true, }) {
|
|
583
|
+
const lc = `[${isTjp_Naive.name}]`;
|
|
584
|
+
try {
|
|
585
|
+
if (!ibGib) {
|
|
586
|
+
throw new Error('ibGib required.');
|
|
587
|
+
}
|
|
588
|
+
if (naive) {
|
|
589
|
+
if (ibGib.data) {
|
|
590
|
+
if (ibGib.data.isTjp) {
|
|
591
|
+
return true;
|
|
592
|
+
}
|
|
593
|
+
if (!ibGib.rel8ns) {
|
|
594
|
+
if (logalot) {
|
|
595
|
+
console.log(`${lc} ibGib.rel8ns falsy (I: c69c9e78b34845311ce7c674d7195622)`);
|
|
596
|
+
}
|
|
597
|
+
return false;
|
|
598
|
+
}
|
|
599
|
+
if (ibGib.rel8ns.past && ibGib.rel8ns.past.length > 0) {
|
|
600
|
+
return false;
|
|
601
|
+
}
|
|
602
|
+
if (ibGib.rel8ns.past && ibGib.rel8ns.past.length === 0) {
|
|
603
|
+
return true;
|
|
604
|
+
}
|
|
605
|
+
return false;
|
|
606
|
+
}
|
|
607
|
+
else {
|
|
608
|
+
throw new Error('loaded ibGib required (data).');
|
|
609
|
+
}
|
|
610
|
+
}
|
|
611
|
+
else {
|
|
612
|
+
throw new Error('only naive implemented right now.');
|
|
613
|
+
}
|
|
614
|
+
}
|
|
615
|
+
catch (error) {
|
|
616
|
+
console.error(`${lc} ${error.message}`);
|
|
617
|
+
throw error;
|
|
618
|
+
}
|
|
619
|
+
}
|
|
620
|
+
export function toDto({ ibGib, }) {
|
|
621
|
+
const lc = `[${toDto.name}]`;
|
|
622
|
+
if (!ibGib.ib) {
|
|
623
|
+
console.warn(`${lc} ibGib.ib is falsy. (W: e60e41c2a1fc48268379d88ce13cb77b)`);
|
|
624
|
+
}
|
|
625
|
+
if (!ibGib.gib) {
|
|
626
|
+
console.warn(`${lc} ibGib.gib is falsy. (W: fb3889cbf0684ae4ac51e48f28570377)`);
|
|
627
|
+
}
|
|
628
|
+
let dtoIbGib = { ib: (ibGib.ib || '').slice() };
|
|
629
|
+
if (ibGib.gib) {
|
|
630
|
+
dtoIbGib.gib = ibGib.gib.slice();
|
|
631
|
+
}
|
|
632
|
+
;
|
|
633
|
+
if (ibGib.data) {
|
|
634
|
+
dtoIbGib.data = h.clone(ibGib.data);
|
|
635
|
+
}
|
|
636
|
+
if (ibGib.rel8ns) {
|
|
637
|
+
dtoIbGib.rel8ns = h.clone(ibGib.rel8ns);
|
|
638
|
+
}
|
|
639
|
+
return dtoIbGib;
|
|
640
|
+
}
|
|
641
|
+
//# sourceMappingURL=ibgib-helper.mjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"ibgib-helper.mjs","sourceRoot":"","sources":["../../../src/common/other/ibgib-helper.mts"],"names":[],"mappings":"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"}
|