@ibgib/ts-gib 0.4.9

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 (87) hide show
  1. package/.vscode/launch.json +24 -0
  2. package/.vscode/settings.json +34 -0
  3. package/.vscode/tasks.json +37 -0
  4. package/CHANGELOG.md +159 -0
  5. package/README.md +502 -0
  6. package/dist/V1/constants.d.mts +22 -0
  7. package/dist/V1/constants.d.mts.map +1 -0
  8. package/dist/V1/constants.mjs +21 -0
  9. package/dist/V1/constants.mjs.map +1 -0
  10. package/dist/V1/factory.d.mts +23 -0
  11. package/dist/V1/factory.d.mts.map +1 -0
  12. package/dist/V1/factory.mjs +78 -0
  13. package/dist/V1/factory.mjs.map +1 -0
  14. package/dist/V1/index.d.mts +6 -0
  15. package/dist/V1/index.d.mts.map +1 -0
  16. package/dist/V1/index.mjs +6 -0
  17. package/dist/V1/index.mjs.map +1 -0
  18. package/dist/V1/sha256v1.d.mts +19 -0
  19. package/dist/V1/sha256v1.d.mts.map +1 -0
  20. package/dist/V1/sha256v1.mjs +86 -0
  21. package/dist/V1/sha256v1.mjs.map +1 -0
  22. package/dist/V1/transforms/fork.d.mts +16 -0
  23. package/dist/V1/transforms/fork.d.mts.map +1 -0
  24. package/dist/V1/transforms/fork.mjs +111 -0
  25. package/dist/V1/transforms/fork.mjs.map +1 -0
  26. package/dist/V1/transforms/index.d.mts +5 -0
  27. package/dist/V1/transforms/index.d.mts.map +1 -0
  28. package/dist/V1/transforms/index.mjs +5 -0
  29. package/dist/V1/transforms/index.mjs.map +1 -0
  30. package/dist/V1/transforms/mut8.d.mts +50 -0
  31. package/dist/V1/transforms/mut8.d.mts.map +1 -0
  32. package/dist/V1/transforms/mut8.mjs +246 -0
  33. package/dist/V1/transforms/mut8.mjs.map +1 -0
  34. package/dist/V1/transforms/rel8.d.mts +14 -0
  35. package/dist/V1/transforms/rel8.d.mts.map +1 -0
  36. package/dist/V1/transforms/rel8.mjs +176 -0
  37. package/dist/V1/transforms/rel8.mjs.map +1 -0
  38. package/dist/V1/transforms/transform-helper.d.mts +92 -0
  39. package/dist/V1/transforms/transform-helper.d.mts.map +1 -0
  40. package/dist/V1/transforms/transform-helper.mjs +189 -0
  41. package/dist/V1/transforms/transform-helper.mjs.map +1 -0
  42. package/dist/V1/types.d.mts +79 -0
  43. package/dist/V1/types.d.mts.map +1 -0
  44. package/dist/V1/types.mjs +12 -0
  45. package/dist/V1/types.mjs.map +1 -0
  46. package/dist/helper.d.mts +77 -0
  47. package/dist/helper.d.mts.map +1 -0
  48. package/dist/helper.mjs +179 -0
  49. package/dist/helper.mjs.map +1 -0
  50. package/dist/index.cjs +4 -0
  51. package/dist/index.cjs.map +1 -0
  52. package/dist/index.d.cts +4 -0
  53. package/dist/index.d.cts.map +1 -0
  54. package/dist/index.d.mts +4 -0
  55. package/dist/index.d.mts.map +1 -0
  56. package/dist/index.mjs +4 -0
  57. package/dist/index.mjs.map +1 -0
  58. package/dist/types.d.mts +242 -0
  59. package/dist/types.d.mts.map +1 -0
  60. package/dist/types.mjs +2 -0
  61. package/dist/types.mjs.map +1 -0
  62. package/jasmine-browser.json +18 -0
  63. package/jasmine.json +6 -0
  64. package/package.json +61 -0
  65. package/src/V1/constants.mts +23 -0
  66. package/src/V1/factory.mts +110 -0
  67. package/src/V1/factory.spec.mts +162 -0
  68. package/src/V1/index.mts +5 -0
  69. package/src/V1/sha256v1.mts +85 -0
  70. package/src/V1/sha256v1.spec.mts +221 -0
  71. package/src/V1/transforms/fork.mts +100 -0
  72. package/src/V1/transforms/fork.spec.mts +410 -0
  73. package/src/V1/transforms/index.mts +4 -0
  74. package/src/V1/transforms/mut8.mts +239 -0
  75. package/src/V1/transforms/mut8.spec.mts +656 -0
  76. package/src/V1/transforms/rel8.mts +173 -0
  77. package/src/V1/transforms/rel8.spec.mts +556 -0
  78. package/src/V1/transforms/transform-helper.mts +263 -0
  79. package/src/V1/transforms/transform-helper.spec.mts +45 -0
  80. package/src/V1/types.mts +84 -0
  81. package/src/helper.mts +192 -0
  82. package/src/helper.spec.mts +127 -0
  83. package/src/index.cts +3 -0
  84. package/src/index.mts +3 -0
  85. package/src/types.mts +242 -0
  86. package/tsconfig.json +15 -0
  87. package/tsconfig.test.json +10 -0
@@ -0,0 +1,6 @@
1
+ export * from './sha256v1.mjs';
2
+ export * from './factory.mjs';
3
+ export * from './types.mjs';
4
+ export * from './constants.mjs';
5
+ export * from './transforms/index.mjs';
6
+ //# sourceMappingURL=index.mjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.mjs","sourceRoot":"","sources":["../../src/V1/index.mts"],"names":[],"mappings":"AAAA,cAAc,gBAAgB,CAAC;AAC/B,cAAc,eAAe,CAAC;AAC9B,cAAc,aAAa,CAAC;AAC5B,cAAc,iBAAiB,CAAC;AAChC,cAAc,wBAAwB,CAAC"}
@@ -0,0 +1,19 @@
1
+ import { IbGib_V1 } from "./types.mjs";
2
+ /**
3
+ * Performs the gib hash like V1
4
+ *
5
+ * I have it all in one function for smallest, most independent version possible.
6
+ *
7
+ * #thanks https://developer.mozilla.org/en-US/docs/Web/API/SubtleCrypto/digest
8
+ *
9
+ * @param ibGib ibGib for which to calculate the gib
10
+ */
11
+ export declare function sha256v1(ibGib: IbGib_V1, salt?: string): Promise<string>;
12
+ /**
13
+ * I have one large-ish sha256 function for gibbing purposes
14
+ * (dream where metabootstrapping is better)
15
+ * this is just testing a function that is internal to the sha256v1 func.
16
+ * terrible as can be duplicated, but simple for now.
17
+ */
18
+ export declare function hashToHexCopy(message: string | undefined): Promise<string | undefined>;
19
+ //# sourceMappingURL=sha256v1.d.mts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"sha256v1.d.mts","sourceRoot":"","sources":["../../src/V1/sha256v1.mts"],"names":[],"mappings":"AAGA,OAAO,EAAE,QAAQ,EAAgC,MAAM,aAAa,CAAC;AAIrE;;;;;;;;GAQG;AACH,wBAAgB,QAAQ,CAAC,KAAK,EAAE,QAAQ,EAAE,IAAI,GAAE,MAAW,GAAG,OAAO,CAAC,MAAM,CAAC,CA+C5E;AAED;;;;;GAKG;AACH,wBAAsB,aAAa,CAC/B,OAAO,EAAE,MAAM,GAAG,SAAS,GAC5B,OAAO,CAAC,MAAM,GAAG,SAAS,CAAC,CAW7B"}
@@ -0,0 +1,86 @@
1
+ let crypto = globalThis.crypto;
2
+ let { subtle } = crypto;
3
+ import { extractErrorMsg } from "../helper.mjs";
4
+ /**
5
+ * Performs the gib hash like V1
6
+ *
7
+ * I have it all in one function for smallest, most independent version possible.
8
+ *
9
+ * #thanks https://developer.mozilla.org/en-US/docs/Web/API/SubtleCrypto/digest
10
+ *
11
+ * @param ibGib ibGib for which to calculate the gib
12
+ */
13
+ export function sha256v1(ibGib, salt = "") {
14
+ // console.log('func_gib_sha256v1 executed');
15
+ if (!salt) {
16
+ salt = "";
17
+ }
18
+ let hashToHex = async (message) => {
19
+ if (!message) {
20
+ return "";
21
+ }
22
+ const msgUint8 = new TextEncoder().encode(message);
23
+ const buffer = await subtle.digest('SHA-256', msgUint8);
24
+ const asArray = Array.from(new Uint8Array(buffer));
25
+ return asArray.map(b => b.toString(16).padStart(2, '0')).join('');
26
+ };
27
+ let hashFields;
28
+ if (salt) {
29
+ hashFields = async (ib, data, rel8ns) => {
30
+ const hasRel8ns = Object.keys(rel8ns || {}).length > 0 &&
31
+ Object.keys(rel8ns || {}).some(k => rel8ns[k] && rel8ns[k].length > 0);
32
+ const hasData = Object.keys((data) || {}).length > 0;
33
+ const ibHash = (await hashToHex(salt + ib)).toUpperCase();
34
+ // empty, null, undefined all treated the same at this level.
35
+ const rel8nsHash = hasRel8ns ? (await hashToHex(salt + JSON.stringify(rel8ns))).toUpperCase() : "";
36
+ // empty, null, undefined all treated the same at this level (though not farther down in data)
37
+ const dataHash = hasData ? (await hashToHex(salt + JSON.stringify(data))).toUpperCase() : "";
38
+ // if the ibgib has no rel8ns or data, the hash should be just of the ib itself.
39
+ const allHash = hasRel8ns || hasData ?
40
+ (await hashToHex(salt + ibHash + rel8nsHash + dataHash)).toUpperCase() :
41
+ (await hashToHex(salt + ibHash)).toUpperCase();
42
+ return allHash;
43
+ };
44
+ }
45
+ else {
46
+ hashFields = async (ib, data, rel8ns) => {
47
+ const hasRel8ns = Object.keys(rel8ns || {}).length > 0 &&
48
+ Object.keys(rel8ns || {}).some(k => rel8ns[k] && rel8ns[k].length > 0);
49
+ const hasData = Object.keys((data) || {}).length > 0;
50
+ const ibHash = (await hashToHex(ib)).toUpperCase();
51
+ // empty, null, undefined all treated the same at this level.
52
+ const rel8nsHash = hasRel8ns ? (await hashToHex(JSON.stringify(rel8ns))).toUpperCase() : "";
53
+ // empty, null, undefined all treated the same at this level (though not farther down in data)
54
+ const dataHash = hasData ? (await hashToHex(JSON.stringify(data))).toUpperCase() : "";
55
+ // if the ibgib has no rel8ns or data, the hash should be just of the ib itself.
56
+ const allHash = hasRel8ns || hasData ?
57
+ (await hashToHex(ibHash + rel8nsHash + dataHash)).toUpperCase() :
58
+ (await hashToHex(ibHash)).toUpperCase();
59
+ return allHash;
60
+ };
61
+ }
62
+ return hashFields(ibGib.ib, ibGib?.data, ibGib?.rel8ns);
63
+ }
64
+ /**
65
+ * I have one large-ish sha256 function for gibbing purposes
66
+ * (dream where metabootstrapping is better)
67
+ * this is just testing a function that is internal to the sha256v1 func.
68
+ * terrible as can be duplicated, but simple for now.
69
+ */
70
+ export async function hashToHexCopy(message) {
71
+ if (!message) {
72
+ return "";
73
+ }
74
+ try {
75
+ const msgUint8 = new TextEncoder().encode(message);
76
+ const buffer = await subtle.digest('SHA-256', msgUint8);
77
+ const asArray = Array.from(new Uint8Array(buffer));
78
+ return asArray.map(b => b.toString(16).padStart(2, '0')).join('');
79
+ }
80
+ catch (e) {
81
+ console.error(extractErrorMsg(e.message));
82
+ return undefined;
83
+ }
84
+ }
85
+ ;
86
+ //# sourceMappingURL=sha256v1.mjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"sha256v1.mjs","sourceRoot":"","sources":["../../src/V1/sha256v1.mts"],"names":[],"mappings":"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"}
@@ -0,0 +1,16 @@
1
+ import { IbGib_V1 } from '../types.mjs';
2
+ import { TransformOpts_Fork, TransformResult } from '../../types.mjs';
3
+ /**
4
+ * Original-ish V1 transform behavior.
5
+ * Going to create an ibGib containing the fork data.
6
+ * Apply that fork and create a resulting ibGib.
7
+ *
8
+ * Takes the src ibGib, clears its past and adds a link to
9
+ * the src via the 'ancestor' rel8n.
10
+ *
11
+ * NOTE:
12
+ * This is NOT going to do the plan^gib stuff ATM.
13
+ * Also this does NOT add any identity information ATM.
14
+ */
15
+ export declare function fork(opts: TransformOpts_Fork<IbGib_V1>): Promise<TransformResult<IbGib_V1>>;
16
+ //# sourceMappingURL=fork.d.mts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"fork.d.mts","sourceRoot":"","sources":["../../../src/V1/transforms/fork.mts"],"names":[],"mappings":"AAEA,OAAO,EAAE,QAAQ,EAAuC,MAAM,cAAc,CAAC;AAC7E,OAAO,EAAE,kBAAkB,EAAE,eAAe,EAAE,MAAM,iBAAiB,CAAC;AAItE;;;;;;;;;;;GAWG;AACH,wBAAsB,IAAI,CAAC,IAAI,EAAE,kBAAkB,CAAC,QAAQ,CAAC,GAAG,OAAO,CAAC,eAAe,CAAC,QAAQ,CAAC,CAAC,CAgFjG"}
@@ -0,0 +1,111 @@
1
+ import { getIbGibAddr, clone, getUUID, getTimestamp } from '../../helper.mjs';
2
+ import { sha256v1 } from '../sha256v1.mjs';
3
+ import { Rel8n } from '../types.mjs';
4
+ import { IBGIB_DELIMITER, ROOT_ADDR } from '../constants.mjs';
5
+ import { buildDna } from './transform-helper.mjs';
6
+ /**
7
+ * Original-ish V1 transform behavior.
8
+ * Going to create an ibGib containing the fork data.
9
+ * Apply that fork and create a resulting ibGib.
10
+ *
11
+ * Takes the src ibGib, clears its past and adds a link to
12
+ * the src via the 'ancestor' rel8n.
13
+ *
14
+ * NOTE:
15
+ * This is NOT going to do the plan^gib stuff ATM.
16
+ * Also this does NOT add any identity information ATM.
17
+ */
18
+ export async function fork(opts) {
19
+ const { noTimestamp, dna, linkedRel8ns, destIb, uuid, tjp, cloneRel8ns, cloneData, type = 'fork', } = opts;
20
+ let src = opts.src;
21
+ const lc = '[fork_v1]';
22
+ // #region validation
23
+ if (type !== 'fork') {
24
+ throw new Error(`${lc} not a fork transform.`);
25
+ }
26
+ if (!opts.type) {
27
+ opts.type = 'fork';
28
+ }
29
+ if (!src) {
30
+ throw new Error(`${lc} src required to fork.`);
31
+ }
32
+ if (!src.ib) {
33
+ throw new Error(`${lc} src.ib required.`);
34
+ }
35
+ // destIb is not required, as it just reuses src.ib
36
+ if (destIb && destIb.includes(IBGIB_DELIMITER)) {
37
+ throw new Error(`${lc} destIb can't contain (hardcoded) delimiter right now.`);
38
+ }
39
+ if (!src.gib) {
40
+ throw new Error(`${lc} src.gib required.`);
41
+ }
42
+ // #endregion
43
+ // we want to forget `src` proper very quickly because it may have other
44
+ // non-IbGib properties that are not relevant to our transform.
45
+ let dto = { ib: src.ib, gib: src.gib, };
46
+ if (src.data && Object.keys(src.data).length > 0) {
47
+ dto.data = src.data;
48
+ }
49
+ if (src.rel8ns && Object.keys(src.rel8ns).length > 0) {
50
+ dto.rel8ns = src.rel8ns;
51
+ }
52
+ src = dto;
53
+ const srcAddr = getIbGibAddr({ ib: src.ib, gib: src.gib });
54
+ opts.srcAddr = srcAddr;
55
+ const rel8ns = cloneRel8ns && src.rel8ns && Object.keys(src.rel8ns).length > 0 ?
56
+ clone(src.rel8ns) :
57
+ {};
58
+ const data = cloneData && src?.data ? clone(src.data) : {};
59
+ if (opts.nCounter) {
60
+ data.n = 0;
61
+ }
62
+ const ancestor = linkedRel8ns?.includes(Rel8n.ancestor) ?
63
+ [srcAddr] :
64
+ (rel8ns.ancestor || []).concat([srcAddr]);
65
+ rel8ns.ancestor = ancestor;
66
+ // remove tjp if exists in rel8ns
67
+ if (rel8ns.tjp) {
68
+ delete rel8ns.tjp;
69
+ }
70
+ const newIbGib = clone(src);
71
+ if (noTimestamp && tjp?.timestamp) {
72
+ throw new Error(`${lc} both noTimestamp and tjp.timestamp selected.`);
73
+ }
74
+ if (!noTimestamp || tjp?.timestamp) {
75
+ data.timestamp = getTimestamp();
76
+ }
77
+ if (tjp?.uuid || uuid) {
78
+ data.uuid = await getUUID();
79
+ }
80
+ if (tjp?.uuid || tjp?.timestamp) {
81
+ data.isTjp = true;
82
+ }
83
+ else {
84
+ if (data.isTjp) {
85
+ delete data.isTjp;
86
+ }
87
+ }
88
+ newIbGib.ib = destIb || 'ib';
89
+ // rel8ns ignored if forking from the root ib^gib
90
+ if (srcAddr !== ROOT_ADDR) {
91
+ newIbGib.rel8ns = rel8ns;
92
+ }
93
+ if (Object.keys(data).length > 0) {
94
+ newIbGib.data = data;
95
+ }
96
+ let transformDna = null;
97
+ if (dna) {
98
+ transformDna = await buildDna(opts);
99
+ const dnaAddr = getIbGibAddr({ ibGib: transformDna });
100
+ rel8ns.dna = linkedRel8ns?.includes(Rel8n.dna) ?
101
+ rel8ns.dna = [dnaAddr] :
102
+ rel8ns.dna = (rel8ns.dna || []).concat(dnaAddr);
103
+ }
104
+ newIbGib.gib = await sha256v1(newIbGib, '');
105
+ const result = { newIbGib };
106
+ if (transformDna) {
107
+ result.dnas = [transformDna];
108
+ }
109
+ return result;
110
+ }
111
+ //# sourceMappingURL=fork.mjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"fork.mjs","sourceRoot":"","sources":["../../../src/V1/transforms/fork.mts"],"names":[],"mappings":"AAAA,OAAO,EAAE,YAAY,EAAE,KAAK,EAAE,OAAO,EAAE,YAAY,EAAE,MAAM,kBAAkB,CAAC;AAC9E,OAAO,EAAE,QAAQ,EAAE,MAAM,iBAAiB,CAAC;AAC3C,OAAO,EAA0C,KAAK,EAAE,MAAM,cAAc,CAAC;AAE7E,OAAO,EAAE,eAAe,EAAE,SAAS,EAAE,MAAM,kBAAkB,CAAC;AAC9D,OAAO,EAAE,QAAQ,EAAE,MAAM,wBAAwB,CAAC;AAElD;;;;;;;;;;;GAWG;AACH,MAAM,CAAC,KAAK,UAAU,IAAI,CAAC,IAAkC;IACzD,MAAM,EACF,WAAW,EAAE,GAAG,EAChB,YAAY,EACZ,MAAM,EAAE,IAAI,EAAE,GAAG,EACjB,WAAW,EAAE,SAAS,EACtB,IAAI,GAAG,MAAM,GAChB,GAAG,IAAI,CAAC;IACT,IAAI,GAAG,GAAG,IAAI,CAAC,GAAG,CAAC;IAEnB,MAAM,EAAE,GAAG,WAAW,CAAC;IACvB,qBAAqB;IACrB,IAAI,IAAI,KAAK,MAAM,EAAE;QAAE,MAAM,IAAI,KAAK,CAAC,GAAG,EAAE,wBAAwB,CAAC,CAAC;KAAE;IACxE,IAAI,CAAC,IAAI,CAAC,IAAI,EAAE;QAAE,IAAI,CAAC,IAAI,GAAG,MAAM,CAAA;KAAE;IAEtC,IAAI,CAAC,GAAG,EAAE;QAAE,MAAM,IAAI,KAAK,CAAC,GAAG,EAAE,wBAAwB,CAAC,CAAC;KAAE;IAC7D,IAAI,CAAC,GAAI,CAAC,EAAE,EAAE;QAAE,MAAM,IAAI,KAAK,CAAC,GAAG,EAAE,mBAAmB,CAAC,CAAC;KAAE;IAC5D,mDAAmD;IACnD,IAAI,MAAM,IAAI,MAAM,CAAC,QAAQ,CAAC,eAAe,CAAC,EAAE;QAC5C,MAAM,IAAI,KAAK,CAAC,GAAG,EAAE,wDAAwD,CAAC,CAAC;KAClF;IACD,IAAI,CAAC,GAAI,CAAC,GAAG,EAAE;QAAE,MAAM,IAAI,KAAK,CAAC,GAAG,EAAE,oBAAoB,CAAC,CAAC;KAAE;IAE9D,aAAa;IAEb,wEAAwE;IACxE,+DAA+D;IAC/D,IAAI,GAAG,GAAa,EAAE,EAAE,EAAE,GAAG,CAAC,EAAE,EAAE,GAAG,EAAE,GAAG,CAAC,GAAG,GAAG,CAAC;IAClD,IAAI,GAAG,CAAC,IAAI,IAAI,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC,MAAM,GAAG,CAAC,EAAE;QAAE,GAAG,CAAC,IAAI,GAAG,GAAG,CAAC,IAAI,CAAC;KAAE;IAC1E,IAAI,GAAG,CAAC,MAAM,IAAI,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC,MAAM,GAAG,CAAC,EAAE;QAAE,GAAG,CAAC,MAAM,GAAG,GAAG,CAAC,MAAM,CAAC;KAAE;IAClF,GAAG,GAAG,GAAG,CAAC;IAEV,MAAM,OAAO,GAAG,YAAY,CAAC,EAAE,EAAE,EAAE,GAAI,CAAC,EAAE,EAAE,GAAG,EAAE,GAAG,CAAC,GAAG,EAAE,CAAC,CAAC;IAC5D,IAAI,CAAC,OAAO,GAAG,OAAO,CAAC;IAEvB,MAAM,MAAM,GACR,WAAW,IAAI,GAAG,CAAC,MAAM,IAAI,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC;QAC7D,KAAK,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC,CAAC;QACnB,EAAE,CAAC;IACX,MAAM,IAAI,GAAQ,SAAS,IAAI,GAAG,EAAE,IAAI,CAAC,CAAC,CAAC,KAAK,CAAC,GAAI,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC;IACjE,IAAI,IAAI,CAAC,QAAQ,EAAE;QAAE,IAAI,CAAC,CAAC,GAAG,CAAC,CAAC;KAAE;IAClC,MAAM,QAAQ,GAAG,YAAY,EAAE,QAAQ,CAAC,KAAK,CAAC,QAAQ,CAAC,CAAC,CAAC;QACrD,CAAC,OAAO,CAAC,CAAC,CAAC;QACX,CAAC,MAAM,CAAC,QAAQ,IAAI,EAAE,CAAC,CAAC,MAAM,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC;IAC9C,MAAM,CAAC,QAAQ,GAAG,QAAQ,CAAC;IAE3B,iCAAiC;IACjC,IAAI,MAAM,CAAC,GAAG,EAAE;QAAE,OAAO,MAAM,CAAC,GAAG,CAAC;KAAE;IAEtC,MAAM,QAAQ,GAAG,KAAK,CAAC,GAAG,CAA2B,CAAC;IACtD,IAAI,WAAW,IAAI,GAAG,EAAE,SAAS,EAAE;QAC/B,MAAM,IAAI,KAAK,CAAC,GAAG,EAAE,+CAA+C,CAAC,CAAC;KACzE;IACD,IAAI,CAAC,WAAW,IAAI,GAAG,EAAE,SAAS,EAAE;QAAE,IAAI,CAAC,SAAS,GAAG,YAAY,EAAE,CAAC;KAAE;IACxE,IAAI,GAAG,EAAE,IAAI,IAAI,IAAI,EAAE;QAAE,IAAI,CAAC,IAAI,GAAG,MAAM,OAAO,EAAE,CAAC;KAAE;IACvD,IAAI,GAAG,EAAE,IAAI,IAAI,GAAG,EAAE,SAAS,EAAE;QAC7B,IAAI,CAAC,KAAK,GAAG,IAAI,CAAC;KACrB;SAAM;QACH,IAAI,IAAI,CAAC,KAAK,EAAE;YAAE,OAAO,IAAI,CAAC,KAAK,CAAC;SAAE;KACzC;IAED,QAAQ,CAAC,EAAE,GAAG,MAAM,IAAI,IAAI,CAAC;IAC7B,iDAAiD;IACjD,IAAI,OAAO,KAAK,SAAS,EAAE;QAAE,QAAQ,CAAC,MAAM,GAAG,MAAM,CAAC;KAAE;IACxD,IAAI,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,MAAM,GAAG,CAAC,EAAE;QAAE,QAAQ,CAAC,IAAI,GAAG,IAAI,CAAC;KAAE;IAE3D,IAAI,YAAY,GAAoB,IAAI,CAAC;IACzC,IAAI,GAAG,EAAE;QACL,YAAY,GAAG,MAAM,QAAQ,CAAC,IAAI,CAAC,CAAC;QACpC,MAAM,OAAO,GAAG,YAAY,CAAC,EAAE,KAAK,EAAE,YAAY,EAAE,CAAC,CAAC;QACtD,MAAM,CAAC,GAAG,GAAG,YAAY,EAAE,QAAQ,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC;YAC5C,MAAM,CAAC,GAAG,GAAG,CAAC,OAAO,CAAC,CAAC,CAAC;YACxB,MAAM,CAAC,GAAG,GAAG,CAAC,MAAM,CAAC,GAAG,IAAI,EAAE,CAAC,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC;KACvD;IAED,QAAQ,CAAC,GAAG,GAAG,MAAM,QAAQ,CAAC,QAAQ,EAAE,EAAE,CAAC,CAAC;IAE5C,MAAM,MAAM,GAA8B,EAAE,QAAQ,EAAE,CAAC;IACvD,IAAI,YAAY,EAAE;QAAE,MAAM,CAAC,IAAI,GAAG,CAAC,YAAa,CAAC,CAAA;KAAE;IACnD,OAAO,MAAM,CAAC;AAClB,CAAC"}
@@ -0,0 +1,5 @@
1
+ export * from './fork.mjs';
2
+ export * from './mut8.mjs';
3
+ export * from './rel8.mjs';
4
+ export { isPrimitive, isDna } from './transform-helper.mjs';
5
+ //# sourceMappingURL=index.d.mts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.mts","sourceRoot":"","sources":["../../../src/V1/transforms/index.mts"],"names":[],"mappings":"AAAA,cAAc,YAAY,CAAC;AAC3B,cAAc,YAAY,CAAC;AAC3B,cAAc,YAAY,CAAC;AAC3B,OAAO,EAAE,WAAW,EAAE,KAAK,EAAE,MAAM,wBAAwB,CAAC"}
@@ -0,0 +1,5 @@
1
+ export * from './fork.mjs';
2
+ export * from './mut8.mjs';
3
+ export * from './rel8.mjs';
4
+ export { isPrimitive, isDna } from './transform-helper.mjs';
5
+ //# sourceMappingURL=index.mjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.mjs","sourceRoot":"","sources":["../../../src/V1/transforms/index.mts"],"names":[],"mappings":"AAAA,cAAc,YAAY,CAAC;AAC3B,cAAc,YAAY,CAAC;AAC3B,cAAc,YAAY,CAAC;AAC3B,OAAO,EAAE,WAAW,EAAE,KAAK,EAAE,MAAM,wBAAwB,CAAC"}
@@ -0,0 +1,50 @@
1
+ import { IbGib_V1 } from '../types.mjs';
2
+ import { TransformOpts_Mut8, TransformResult } from '../../types.mjs';
3
+ /**
4
+ * Original-ish V1 transform behavior.
5
+ * Going to create a new ibGib which mut8s internal data (or the ib) from the src ibgib.
6
+ *
7
+ * Takes the immutable src ibGib record, applies a mutation to its internal (intrinsic)
8
+ * `data` field, creates a new ibGib with the new intrinsic data.
9
+ *
10
+ * ### remember, ibgib basic structure
11
+ *
12
+ * Remember, the ibGib has the following basic structure (here represented in JSON):
13
+ * {
14
+ * ib: 'some ib, can be a simple name, or other metadata, up to very complex metadata.',
15
+ * gib: 'ABC123', // hash of the other three fields of our JSON data structure
16
+ * rel8ns: {
17
+ * 'link name': [ 'other ibgib^ABC345', 'yo^456789' ],
18
+ * 'called an edge in other jargon': [ 'ib^gib' ],
19
+ * 'past': ['ib^gib']
20
+ * ...
21
+ * },
22
+ * data: {
23
+ * 'intrinsic data': 'intrinsic value',
24
+ * 'copied each datum': 'so should be relatively small in practice',
25
+ * 'can...': {
26
+ * '...also be objects if you really': ['want']
27
+ * }
28
+ * }
29
+ * }
30
+ *
31
+ * So this transform is primarily concerned with that `data` property (though we can mut8 the ib also).
32
+ * If it's really anything complex, most likely it would be better to do
33
+ * another ibGib and link to it via the `rel8ns` (in the same way that in OOP it
34
+ * is good to have single responsibility for class architecture).
35
+ *
36
+ * ### what we can do with mutations
37
+ *
38
+ * We can mutate the `ib` value. So if we need to change metadata (e.g. a 'rename'), we can.
39
+ * This has implications for updating pointer refs and the tjp, but that's more advanced.
40
+ *
41
+ * We can also mutate the intrinsic `data` property, which is basically a JS object style of
42
+ * key/value store.
43
+ *
44
+ * ### notes
45
+ * * This is NOT going to do the plan^gib stuff ATM.
46
+ * * This does NOT add any identity information ATM.
47
+ *
48
+ */
49
+ export declare function mut8<TNewData = any>(opts: TransformOpts_Mut8<IbGib_V1, TNewData>): Promise<TransformResult<IbGib_V1>>;
50
+ //# sourceMappingURL=mut8.d.mts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"mut8.d.mts","sourceRoot":"","sources":["../../../src/V1/transforms/mut8.mts"],"names":[],"mappings":"AACA,OAAO,EAAE,QAAQ,EAAuC,MAAM,cAAc,CAAC;AAC7E,OAAO,EAAE,kBAAkB,EAAE,eAAe,EAAE,MAAM,iBAAiB,CAAC;AAItE;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA6CG;AACH,wBAAsB,IAAI,CAAC,QAAQ,GAAG,GAAG,EACrC,IAAI,EAAE,kBAAkB,CAAC,QAAQ,EAAE,QAAQ,CAAC,GAC7C,OAAO,CAAC,eAAe,CAAC,QAAQ,CAAC,CAAC,CAkHpC"}
@@ -0,0 +1,246 @@
1
+ import { getIbGibAddr, clone, getTimestamp } from '../../helper.mjs';
2
+ import { Rel8n } from '../types.mjs';
3
+ import { IBGIB_DELIMITER, } from '../constants.mjs';
4
+ import { buildDna, isPrimitive, getGib } from './transform-helper.mjs';
5
+ /**
6
+ * Original-ish V1 transform behavior.
7
+ * Going to create a new ibGib which mut8s internal data (or the ib) from the src ibgib.
8
+ *
9
+ * Takes the immutable src ibGib record, applies a mutation to its internal (intrinsic)
10
+ * `data` field, creates a new ibGib with the new intrinsic data.
11
+ *
12
+ * ### remember, ibgib basic structure
13
+ *
14
+ * Remember, the ibGib has the following basic structure (here represented in JSON):
15
+ * {
16
+ * ib: 'some ib, can be a simple name, or other metadata, up to very complex metadata.',
17
+ * gib: 'ABC123', // hash of the other three fields of our JSON data structure
18
+ * rel8ns: {
19
+ * 'link name': [ 'other ibgib^ABC345', 'yo^456789' ],
20
+ * 'called an edge in other jargon': [ 'ib^gib' ],
21
+ * 'past': ['ib^gib']
22
+ * ...
23
+ * },
24
+ * data: {
25
+ * 'intrinsic data': 'intrinsic value',
26
+ * 'copied each datum': 'so should be relatively small in practice',
27
+ * 'can...': {
28
+ * '...also be objects if you really': ['want']
29
+ * }
30
+ * }
31
+ * }
32
+ *
33
+ * So this transform is primarily concerned with that `data` property (though we can mut8 the ib also).
34
+ * If it's really anything complex, most likely it would be better to do
35
+ * another ibGib and link to it via the `rel8ns` (in the same way that in OOP it
36
+ * is good to have single responsibility for class architecture).
37
+ *
38
+ * ### what we can do with mutations
39
+ *
40
+ * We can mutate the `ib` value. So if we need to change metadata (e.g. a 'rename'), we can.
41
+ * This has implications for updating pointer refs and the tjp, but that's more advanced.
42
+ *
43
+ * We can also mutate the intrinsic `data` property, which is basically a JS object style of
44
+ * key/value store.
45
+ *
46
+ * ### notes
47
+ * * This is NOT going to do the plan^gib stuff ATM.
48
+ * * This does NOT add any identity information ATM.
49
+ *
50
+ */
51
+ export async function mut8(opts) {
52
+ const { noTimestamp, dna, linkedRel8ns, dataToRename, dataToRemove, dataToAddOrPatch, mut8Ib, type = 'mut8' } = opts;
53
+ let src = opts.src;
54
+ const lc = '[mut8_v1]';
55
+ // #region validation
56
+ if (type !== 'mut8') {
57
+ throw new Error(`${lc} not a mut8 transform.`);
58
+ }
59
+ if (!opts.type) {
60
+ opts.type = 'mut8';
61
+ }
62
+ if (!src) {
63
+ throw new Error(`${lc} src required to mut8.`);
64
+ }
65
+ if (!src.ib) {
66
+ throw new Error(`${lc} src.ib required.`);
67
+ }
68
+ if (src.ib.includes(IBGIB_DELIMITER)) {
69
+ throw new Error(`${lc} ib can't contain hardcoded delimiter (${IBGIB_DELIMITER}) right now.`);
70
+ }
71
+ if (!src.gib) {
72
+ throw new Error(`${lc} src.gib required.`);
73
+ }
74
+ if (!mut8Ib && !dataToRename && !dataToRemove && !dataToAddOrPatch) {
75
+ throw new Error(`${lc} gotta provide either a mut8Ib or some data to change.`);
76
+ }
77
+ const srcAddr = getIbGibAddr({ ib: src.ib, gib: src.gib });
78
+ if (opts.srcAddr && srcAddr !== opts.srcAddr) {
79
+ throw new Error(`${lc} srcAddr from src does not equal opts.srcAddr`);
80
+ }
81
+ opts.srcAddr = srcAddr;
82
+ // const srcIsPrimitive = src.gib === GIB || !src.gib;
83
+ // if (srcIsPrimitive) { throw new Error(`${lc} cannot mutate primitive ibgib`); }
84
+ if (isPrimitive({ ibGib: src })) {
85
+ throw new Error(`${lc} cannot mutate primitive ibgib`);
86
+ }
87
+ // #endregion
88
+ // we want to forget `src` proper very quickly because it may have other
89
+ // non-IbGib properties that are not relevant to our transform.
90
+ let dto = { ib: src.ib, gib: src.gib, };
91
+ if (src.data && Object.keys(src.data).length > 0) {
92
+ dto.data = src.data;
93
+ }
94
+ if (src.rel8ns && Object.keys(src.rel8ns).length > 0) {
95
+ dto.rel8ns = src.rel8ns;
96
+ }
97
+ src = dto;
98
+ const newIbGib = clone(src);
99
+ const srcRel8ns = src.rel8ns ? src.rel8ns : {};
100
+ const rel8ns = clone(srcRel8ns);
101
+ rel8ns.past = linkedRel8ns?.includes(Rel8n.past) ?
102
+ [srcAddr] :
103
+ (rel8ns.past || []).concat([srcAddr]);
104
+ let data = src?.data ? clone(src.data) : {};
105
+ if (dataToRename) {
106
+ data = renameOrRemove(data, dataToRename, 'rename');
107
+ }
108
+ if (dataToRemove) {
109
+ data = renameOrRemove(data, dataToRemove, 'remove');
110
+ }
111
+ if (dataToAddOrPatch) {
112
+ data = patch(data, dataToAddOrPatch);
113
+ }
114
+ if (!noTimestamp) {
115
+ data.timestamp = getTimestamp();
116
+ }
117
+ // n-related
118
+ if (opts.nCounter || Object.keys(data).includes('n')) {
119
+ if (Object.keys(data).includes('n')) {
120
+ if (Number.isInteger(data.n)) {
121
+ if (data.n >= 0) {
122
+ data.n = data.n + 1;
123
+ }
124
+ else {
125
+ console.warn(`${lc} data.n is less than 0, which is unexpected. Resetting data.n to 0.`);
126
+ data.n = 0;
127
+ }
128
+ }
129
+ else {
130
+ throw new Error('cannot increment nCounter because data.n is not a number.');
131
+ }
132
+ }
133
+ else {
134
+ data.n = 0;
135
+ }
136
+ }
137
+ // tjp-related
138
+ // let tjpAddr: IbGibAddr | undefined = undefined;
139
+ // const srcIsTjp = data.isTjp && (rel8ns.tjp ?? []).length === 0; // if we only want one tjp
140
+ const srcIsTjp = data.isTjp; // if we want to allow more than one tjp
141
+ if (srcIsTjp) {
142
+ // if the src is tjp, e.g. is the first ibgib after a fork,
143
+ // then srcAddr is the tjpAddr
144
+ const tjpRel8n = rel8ns.tjp ?? [];
145
+ tjpRel8n.push(srcAddr);
146
+ rel8ns.tjp = tjpRel8n;
147
+ delete data.isTjp;
148
+ }
149
+ // dna-related
150
+ let transformDna = null;
151
+ if (dna) {
152
+ transformDna = await buildDna(opts);
153
+ const dnaAddr = getIbGibAddr({ ibGib: transformDna });
154
+ rel8ns.dna = linkedRel8ns?.includes(Rel8n.dna) ?
155
+ rel8ns.dna = [dnaAddr] :
156
+ rel8ns.dna = (rel8ns.dna || []).concat(dnaAddr);
157
+ }
158
+ // set final ib, data, rel8ns, gib values
159
+ newIbGib.ib = mut8Ib ? mut8Ib : newIbGib.ib;
160
+ newIbGib.rel8ns = rel8ns;
161
+ if (Object.keys(data).length > 0) {
162
+ newIbGib.data = data;
163
+ }
164
+ else {
165
+ // we've removed the last key in the data object so delete it
166
+ delete newIbGib.data;
167
+ }
168
+ const hasTjp = (rel8ns.tjp?.length ?? 0) > 0;
169
+ newIbGib.gib = await getGib({ ibGib: newIbGib, hasTjp });
170
+ // wrap in the result and return
171
+ const result = { newIbGib };
172
+ if (transformDna) {
173
+ result.dnas = [transformDna];
174
+ }
175
+ return result;
176
+ }
177
+ function renameOrRemove(obj, info, which) {
178
+ const lc = `[renameOrRemove]`;
179
+ const FORBIDDEN_RENAME_REMOVE_KEYS = ['timestamp'];
180
+ Object.keys(info).forEach(key => {
181
+ if (FORBIDDEN_RENAME_REMOVE_KEYS.includes(key)) {
182
+ throw new Error(`${lc} Cannot rename to ${key}.`);
183
+ }
184
+ if (Object.keys(obj).includes(key)) {
185
+ let infoVal = info[key];
186
+ if (typeof (infoVal) === 'string') {
187
+ // rename
188
+ if (FORBIDDEN_RENAME_REMOVE_KEYS.includes(infoVal)) {
189
+ throw new Error(`${lc} Cannot rename to ${infoVal}.`);
190
+ }
191
+ if (which === 'rename') {
192
+ obj[infoVal] = obj[key];
193
+ }
194
+ delete obj[key];
195
+ }
196
+ else {
197
+ // recurse
198
+ obj[key] = renameOrRemove(obj[key], infoVal, which);
199
+ }
200
+ }
201
+ else {
202
+ console.log(`${lc} key to ${which} does not exist`);
203
+ }
204
+ });
205
+ return obj;
206
+ }
207
+ ;
208
+ /**
209
+ * Patches obj (active mutate, does not copy) with patchObj data. Special keys
210
+ * can rename/remove keys, otherwise is an additive patch.
211
+ *
212
+ * @param obj source obj to patch, possibly is a subobject in a recursive call
213
+ * @param patchInfo data to patch into obj, possibly containing nested objects
214
+ */
215
+ function patch(obj, patchInfo) {
216
+ Object.keys(patchInfo).forEach(patchKey => {
217
+ // grab the patchVal before updating patchKey
218
+ let patchVal = patchInfo[patchKey];
219
+ let objVal = obj[patchKey];
220
+ if (objVal) {
221
+ if (Array.isArray(patchVal) || Array.isArray(objVal)) {
222
+ // both are arrays, so full replace
223
+ obj[patchKey] = patchVal;
224
+ }
225
+ else if (typeof (patchVal) === 'object' && typeof (objVal) === 'object') {
226
+ // {a: {b: 2}}, {a: {b: 3, c: 4}}
227
+ // patchKey = 'a';
228
+ // patchVal = {b: 3, c: 4}
229
+ // objVal = {b: 2}
230
+ // recurse
231
+ obj[patchKey] = patch(objVal, patchVal);
232
+ }
233
+ else {
234
+ // not both objects, so full replace
235
+ obj[patchKey] = patchVal;
236
+ }
237
+ }
238
+ else {
239
+ // does not exist yet, so set new
240
+ obj[patchKey] = patchVal;
241
+ }
242
+ });
243
+ return obj;
244
+ }
245
+ ;
246
+ //# sourceMappingURL=mut8.mjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"mut8.mjs","sourceRoot":"","sources":["../../../src/V1/transforms/mut8.mts"],"names":[],"mappings":"AAAA,OAAO,EAAE,YAAY,EAAE,KAAK,EAAE,YAAY,EAAE,MAAM,kBAAkB,CAAC;AACrE,OAAO,EAA0C,KAAK,EAAE,MAAM,cAAc,CAAC;AAE7E,OAAO,EAAE,eAAe,GAAG,MAAM,kBAAkB,CAAC;AACpD,OAAO,EAAE,QAAQ,EAAE,WAAW,EAAE,MAAM,EAAE,MAAM,wBAAwB,CAAC;AAEvE;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA6CG;AACH,MAAM,CAAC,KAAK,UAAU,IAAI,CACtB,IAA4C;IAE5C,MAAM,EACF,WAAW,EAAE,GAAG,EAAE,YAAY,EAC9B,YAAY,EAAE,YAAY,EAAE,gBAAgB,EAC5C,MAAM,EACN,IAAI,GAAG,MAAM,EAChB,GAAG,IAAI,CAAC;IACT,IAAI,GAAG,GAAG,IAAI,CAAC,GAAG,CAAC;IACnB,MAAM,EAAE,GAAG,WAAW,CAAC;IACvB,qBAAqB;IAErB,IAAI,IAAI,KAAK,MAAM,EAAE;QAAE,MAAM,IAAI,KAAK,CAAC,GAAG,EAAE,wBAAwB,CAAC,CAAC;KAAE;IACxE,IAAI,CAAC,IAAI,CAAC,IAAI,EAAE;QAAE,IAAI,CAAC,IAAI,GAAG,MAAM,CAAA;KAAE;IAEtC,IAAI,CAAC,GAAG,EAAE;QAAE,MAAM,IAAI,KAAK,CAAC,GAAG,EAAE,wBAAwB,CAAC,CAAC;KAAE;IAC7D,IAAI,CAAC,GAAI,CAAC,EAAE,EAAE;QAAE,MAAM,IAAI,KAAK,CAAC,GAAG,EAAE,mBAAmB,CAAC,CAAC;KAAE;IAC5D,IAAI,GAAI,CAAC,EAAG,CAAC,QAAQ,CAAC,eAAe,CAAC,EAAE;QACpC,MAAM,IAAI,KAAK,CAAC,GAAG,EAAE,0CAA0C,eAAe,cAAc,CAAC,CAAC;KACjG;IACD,IAAI,CAAC,GAAI,CAAC,GAAG,EAAE;QAAE,MAAM,IAAI,KAAK,CAAC,GAAG,EAAE,oBAAoB,CAAC,CAAC;KAAE;IAE9D,IAAI,CAAC,MAAM,IAAI,CAAC,YAAY,IAAI,CAAC,YAAY,IAAI,CAAC,gBAAgB,EAAE;QAChE,MAAM,IAAI,KAAK,CAAC,GAAG,EAAE,wDAAwD,CAAC,CAAC;KAClF;IAED,MAAM,OAAO,GAAG,YAAY,CAAC,EAAE,EAAE,EAAE,GAAI,CAAC,EAAE,EAAE,GAAG,EAAE,GAAG,CAAC,GAAG,EAAE,CAAC,CAAC;IAC5D,IAAI,IAAI,CAAC,OAAO,IAAI,OAAO,KAAK,IAAI,CAAC,OAAO,EAAE;QAAE,MAAM,IAAI,KAAK,CAAC,GAAG,EAAE,+CAA+C,CAAC,CAAC;KAAE;IACxH,IAAI,CAAC,OAAO,GAAG,OAAO,CAAC;IAEvB,sDAAsD;IACtD,kFAAkF;IAClF,IAAI,WAAW,CAAC,EAAE,KAAK,EAAE,GAAG,EAAE,CAAC,EAAE;QAAE,MAAM,IAAI,KAAK,CAAC,GAAG,EAAE,gCAAgC,CAAC,CAAC;KAAE;IAE5F,aAAa;IAEb,wEAAwE;IACxE,+DAA+D;IAC/D,IAAI,GAAG,GAAa,EAAE,EAAE,EAAE,GAAG,CAAC,EAAE,EAAE,GAAG,EAAE,GAAG,CAAC,GAAG,GAAG,CAAC;IAClD,IAAI,GAAG,CAAC,IAAI,IAAI,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC,MAAM,GAAG,CAAC,EAAE;QAAE,GAAG,CAAC,IAAI,GAAG,GAAG,CAAC,IAAI,CAAC;KAAE;IAC1E,IAAI,GAAG,CAAC,MAAM,IAAI,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC,MAAM,GAAG,CAAC,EAAE;QAAE,GAAG,CAAC,MAAM,GAAG,GAAG,CAAC,MAAM,CAAC;KAAE;IAClF,GAAG,GAAG,GAAG,CAAC;IAEV,MAAM,QAAQ,GAAG,KAAK,CAAC,GAAG,CAA2B,CAAC;IAEtD,MAAM,SAAS,GAAG,GAAG,CAAC,MAAM,CAAC,CAAC,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC;IAC/C,MAAM,MAAM,GAAmB,KAAK,CAAC,SAAS,CAAC,CAAC;IAChD,MAAM,CAAC,IAAI,GAAG,YAAY,EAAE,QAAQ,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,CAAC;QAC9C,CAAC,OAAO,CAAC,CAAC,CAAC;QACX,CAAC,MAAM,CAAC,IAAI,IAAI,EAAE,CAAC,CAAC,MAAM,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC;IAE1C,IAAI,IAAI,GAAQ,GAAG,EAAE,IAAI,CAAC,CAAC,CAAC,KAAK,CAAC,GAAI,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC;IAClD,IAAI,YAAY,EAAE;QAAE,IAAI,GAAG,cAAc,CAAC,IAAI,EAAE,YAAY,EAAE,QAAQ,CAAC,CAAC;KAAE;IAC1E,IAAI,YAAY,EAAE;QAAE,IAAI,GAAG,cAAc,CAAC,IAAI,EAAE,YAAY,EAAE,QAAQ,CAAC,CAAC;KAAE;IAC1E,IAAI,gBAAgB,EAAE;QAAE,IAAI,GAAG,KAAK,CAAC,IAAI,EAAE,gBAAgB,CAAC,CAAC;KAAE;IAC/D,IAAI,CAAC,WAAW,EAAE;QAAE,IAAI,CAAC,SAAS,GAAG,YAAY,EAAE,CAAC;KAAE;IAEtD,YAAY;IACZ,IAAI,IAAI,CAAC,QAAQ,IAAI,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,QAAQ,CAAC,GAAG,CAAC,EAAE;QAClD,IAAI,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,QAAQ,CAAC,GAAG,CAAC,EAAE;YACjC,IAAI,MAAM,CAAC,SAAS,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE;gBAC1B,IAAI,IAAI,CAAC,CAAC,IAAI,CAAC,EAAE;oBACb,IAAI,CAAC,CAAC,GAAG,IAAI,CAAC,CAAC,GAAG,CAAC,CAAC;iBACvB;qBAAM;oBACH,OAAO,CAAC,IAAI,CAAC,GAAG,EAAE,qEAAqE,CAAC,CAAC;oBACzF,IAAI,CAAC,CAAC,GAAG,CAAC,CAAC;iBACd;aACJ;iBAAM;gBACH,MAAM,IAAI,KAAK,CAAC,2DAA2D,CAAC,CAAC;aAChF;SACJ;aAAM;YACH,IAAI,CAAC,CAAC,GAAG,CAAC,CAAC;SACd;KACJ;IAED,cAAc;IACd,kDAAkD;IAElD,6FAA6F;IAC7F,MAAM,QAAQ,GAAG,IAAI,CAAC,KAAK,CAAC,CAAC,wCAAwC;IACrE,IAAI,QAAQ,EAAE;QACV,2DAA2D;QAC3D,8BAA8B;QAC9B,MAAM,QAAQ,GAAa,MAAM,CAAC,GAAG,IAAI,EAAE,CAAC;QAC5C,QAAQ,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;QACvB,MAAM,CAAC,GAAG,GAAG,QAAQ,CAAC;QACtB,OAAO,IAAI,CAAC,KAAK,CAAC;KACrB;IAED,cAAc;IACd,IAAI,YAAY,GAAoB,IAAI,CAAC;IACzC,IAAI,GAAG,EAAE;QACL,YAAY,GAAG,MAAM,QAAQ,CAAC,IAAI,CAAC,CAAC;QACpC,MAAM,OAAO,GAAG,YAAY,CAAC,EAAE,KAAK,EAAE,YAAY,EAAE,CAAC,CAAC;QACtD,MAAM,CAAC,GAAG,GAAG,YAAY,EAAE,QAAQ,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC;YAC5C,MAAM,CAAC,GAAG,GAAG,CAAC,OAAO,CAAC,CAAC,CAAC;YACxB,MAAM,CAAC,GAAG,GAAG,CAAC,MAAM,CAAC,GAAG,IAAI,EAAE,CAAC,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC;KACvD;IAED,yCAAyC;IACzC,QAAQ,CAAC,EAAE,GAAG,MAAM,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,QAAQ,CAAC,EAAE,CAAC;IAC5C,QAAQ,CAAC,MAAM,GAAG,MAAM,CAAC;IACzB,IAAI,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,MAAM,GAAG,CAAC,EAAE;QAC9B,QAAQ,CAAC,IAAI,GAAG,IAAI,CAAC;KACxB;SAAM;QACH,6DAA6D;QAC7D,OAAO,QAAQ,CAAC,IAAI,CAAC;KACxB;IACD,MAAM,MAAM,GAAG,CAAC,MAAM,CAAC,GAAG,EAAE,MAAM,IAAI,CAAC,CAAC,GAAG,CAAC,CAAC;IAC7C,QAAQ,CAAC,GAAG,GAAG,MAAM,MAAM,CAAC,EAAE,KAAK,EAAE,QAAQ,EAAE,MAAM,EAAE,CAAC,CAAC;IAEzD,gCAAgC;IAChC,MAAM,MAAM,GAA8B,EAAE,QAAQ,EAAE,CAAC;IACvD,IAAI,YAAY,EAAE;QAAE,MAAM,CAAC,IAAI,GAAG,CAAC,YAAY,CAAC,CAAC;KAAE;IACnD,OAAO,MAAM,CAAC;AAClB,CAAC;AAGD,SAAS,cAAc,CAAC,GAAQ,EAAE,IAAS,EAAE,KAA0B;IACnE,MAAM,EAAE,GAAG,kBAAkB,CAAC;IAC9B,MAAM,4BAA4B,GAAG,CAAC,WAAW,CAAC,CAAC;IACnD,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,OAAO,CAAC,GAAG,CAAC,EAAE;QAC5B,IAAI,4BAA4B,CAAC,QAAQ,CAAC,GAAG,CAAC,EAAE;YAC5C,MAAM,IAAI,KAAK,CAAC,GAAG,EAAE,qBAAqB,GAAG,GAAG,CAAC,CAAC;SACrD;QACD,IAAI,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,QAAQ,CAAC,GAAG,CAAC,EAAE;YAChC,IAAI,OAAO,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC;YACxB,IAAI,OAAO,CAAC,OAAO,CAAC,KAAK,QAAQ,EAAE;gBAC/B,SAAS;gBACT,IAAI,4BAA4B,CAAC,QAAQ,CAAC,OAAO,CAAC,EAAE;oBAChD,MAAM,IAAI,KAAK,CAAC,GAAG,EAAE,qBAAqB,OAAO,GAAG,CAAC,CAAC;iBACzD;gBACD,IAAI,KAAK,KAAK,QAAQ,EAAE;oBACpB,GAAG,CAAC,OAAO,CAAC,GAAG,GAAG,CAAC,GAAG,CAAC,CAAC;iBAC3B;gBACD,OAAO,GAAG,CAAC,GAAG,CAAC,CAAC;aACnB;iBACI;gBACD,UAAU;gBACV,GAAG,CAAC,GAAG,CAAC,GAAG,cAAc,CAAC,GAAG,CAAC,GAAG,CAAC,EAAE,OAAO,EAAE,KAAK,CAAC,CAAC;aACvD;SACJ;aACI;YACD,OAAO,CAAC,GAAG,CAAC,GAAG,EAAE,WAAW,KAAK,iBAAiB,CAAC,CAAC;SACvD;IACL,CAAC,CAAC,CAAC;IACH,OAAO,GAAG,CAAC;AACf,CAAC;AAAA,CAAC;AAEF;;;;;;GAMG;AACH,SAAS,KAAK,CAAC,GAAQ,EAAE,SAAc;IACnC,MAAM,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC,OAAO,CAAC,QAAQ,CAAC,EAAE;QACtC,6CAA6C;QAC7C,IAAI,QAAQ,GAAG,SAAS,CAAC,QAAQ,CAAC,CAAC;QACnC,IAAI,MAAM,GAAG,GAAG,CAAC,QAAQ,CAAC,CAAC;QAC3B,IAAI,MAAM,EAAE;YACR,IAAI,KAAK,CAAC,OAAO,CAAC,QAAQ,CAAC,IAAI,KAAK,CAAC,OAAO,CAAC,MAAM,CAAC,EAAE;gBAClD,mCAAmC;gBACnC,GAAG,CAAC,QAAQ,CAAC,GAAG,QAAQ,CAAC;aAC5B;iBACI,IAAI,OAAO,CAAC,QAAQ,CAAC,KAAK,QAAQ,IAAI,OAAO,CAAC,MAAM,CAAC,KAAK,QAAQ,EAAE;gBACrE,iCAAiC;gBACjC,kBAAkB;gBAClB,0BAA0B;gBAC1B,kBAAkB;gBAClB,UAAU;gBACV,GAAG,CAAC,QAAQ,CAAC,GAAG,KAAK,CAAC,MAAM,EAAE,QAAQ,CAAC,CAAC;aAC3C;iBACI;gBACD,oCAAoC;gBACpC,GAAG,CAAC,QAAQ,CAAC,GAAG,QAAQ,CAAC;aAC5B;SACJ;aACI;YACD,iCAAiC;YACjC,GAAG,CAAC,QAAQ,CAAC,GAAG,QAAQ,CAAC;SAC5B;IACL,CAAC,CAAC,CAAC;IACH,OAAO,GAAG,CAAC;AACf,CAAC;AAAA,CAAC"}
@@ -0,0 +1,14 @@
1
+ import { IbGib_V1 } from '../types.mjs';
2
+ import { TransformOpts_Rel8, TransformResult } from '../../types.mjs';
3
+ /**
4
+ * Original-ish V1 transform behavior.
5
+ *
6
+ * NOTE:
7
+ * This is NOT going to do the plan^gib stuff ATM.
8
+ * Also this does NOT add any identity information ATM.
9
+ */
10
+ /**
11
+ * Relate (and/or unrelate) other ibGib(s), thus mutating it **extrinsically**.
12
+ */
13
+ export declare function rel8(opts: TransformOpts_Rel8<IbGib_V1>): Promise<TransformResult<IbGib_V1>>;
14
+ //# sourceMappingURL=rel8.d.mts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"rel8.d.mts","sourceRoot":"","sources":["../../../src/V1/transforms/rel8.mts"],"names":[],"mappings":"AAEA,OAAO,EAAE,QAAQ,EAAuC,MAAM,cAAc,CAAC;AAC7E,OAAO,EAAE,kBAAkB,EAAE,eAAe,EAAa,MAAM,iBAAiB,CAAC;AAGjF;;;;;;GAMG;AACH;;GAEG;AACH,wBAAsB,IAAI,CACtB,IAAI,EAAE,kBAAkB,CAAC,QAAQ,CAAC,GACnC,OAAO,CAAC,eAAe,CAAC,QAAQ,CAAC,CAAC,CA0JpC"}