@ibgib/ts-gib 0.5.21 → 0.5.24

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/CHANGELOG.md CHANGED
@@ -1,3 +1,17 @@
1
+ ## 0.5.24
2
+ * fixed `fork` bug that did not clear past when cloneRel8ns was set.
3
+
4
+ ## 0.5.22/23
5
+ * Tweaked `toNormalizedForHashing` to normalize arrays slightly differently.
6
+ * Instead of returning the raw array, the fn now maps each member to its
7
+ normalized version. This way objects _inside_ those arrays are normalized,
8
+ as would be expected, but the actual order of the array itself is preserved.
9
+
10
+
11
+ ## 0.5.21
12
+ * correcting bare imports in all libs/apps
13
+ * updated helper-gib, ts-gib and encrypt-gib.
14
+
1
15
  ## 0.5.6
2
16
  * impl: added `validateRel8nsIntrinsically` and respecs
3
17
  * i decided not to change `validateIbGibIntrinsically` to also call this.
@@ -1 +1 @@
1
- {"version":3,"file":"sha256v1.d.mts","sourceRoot":"","sources":["../../src/V1/sha256v1.mts"],"names":[],"mappings":"AACA,OAAO,EAAE,QAAQ,EAAgC,MAAM,aAAa,CAAC;AAMrE;;;;;;;;;;GAUG;AACH,wBAAgB,YAAY,CAAC,KAAK,EAAE,QAAQ,EAAE,IAAI,GAAE,MAAW,GAAG,OAAO,CAAC,MAAM,CAAC,CAyGhF;AAED,wBAAgB,QAAQ,CAAC,KAAK,EAAE,QAAQ,EAAE,IAAI,GAAE,MAAW,GAAG,OAAO,CAAC,MAAM,CAAC,CA8I5E;AAED;;;;;GAKG;AACH,wBAAsB,aAAa,CAC/B,OAAO,EAAE,MAAM,GAAG,SAAS,GAC5B,OAAO,CAAC,MAAM,GAAG,SAAS,CAAC,CAW7B"}
1
+ {"version":3,"file":"sha256v1.d.mts","sourceRoot":"","sources":["../../src/V1/sha256v1.mts"],"names":[],"mappings":"AACA,OAAO,EAAE,QAAQ,EAAgC,MAAM,aAAa,CAAC;AAMrE;;;;;;;;;;GAUG;AACH,wBAAgB,YAAY,CAAC,KAAK,EAAE,QAAQ,EAAE,IAAI,GAAE,MAAW,GAAG,OAAO,CAAC,MAAM,CAAC,CAyGhF;AAED,wBAAgB,QAAQ,CAAC,KAAK,EAAE,QAAQ,EAAE,IAAI,GAAE,MAAW,GAAG,OAAO,CAAC,MAAM,CAAC,CAoL5E;AAED;;;;;GAKG;AACH,wBAAsB,aAAa,CAC/B,OAAO,EAAE,MAAM,GAAG,SAAS,GAC5B,OAAO,CAAC,MAAM,GAAG,SAAS,CAAC,CAW7B"}
@@ -160,38 +160,69 @@ export function sha256v1(ibGib, salt = "") {
160
160
  return hashAsArray.map(b => b.toString(16).padStart(2, '0')).join('');
161
161
  };
162
162
  /**
163
- * normalizes via sorting keys and removing values that are undefined.
164
- * values that are null or empty strings are not removed.
163
+ * THIS IS DUPLICATED CODE IN THE RESPEC FILE. ANY CHANGES HERE MUST
164
+ * MANUALLY BE CHANGED IN THE RESPEC FILE!!!
165
165
  *
166
- * this is DUPLICATED code in the respec file. any changes here must
167
- * manually be changed in the respec file!!!
166
+ * Normalizes an object/value for consistent hashing.
167
+ * - Recursively processes objects and arrays.
168
+ * - For objects:
169
+ * - Sorts keys alphabetically.
170
+ * - Removes properties whose values are `undefined`.
171
+ * - Keeps properties whose values are `null`.
172
+ * - For arrays:
173
+ * - Preserves element order.
174
+ * - Recursively normalizes each element.
175
+ * - Primitives (strings, numbers, booleans) and `null` are returned as is.
168
176
  *
169
- * @param obj to normalize (is not changed, e.g. keys aren't sorted in place)
177
+ * THIS IS DUPLICATED CODE IN THE RESPEC FILE. ANY CHANGES HERE MUST
178
+ * MANUALLY BE CHANGED IN THE RESPEC FILE!!!
179
+ *
180
+ * @param value The value to normalize.
181
+ * @returns The normalized value.
170
182
  */
171
- const toNormalizedForHashing = (obj) => {
172
- if (!obj) {
173
- return obj; /* <<<< returns early */
174
- }
175
- else if (typeof obj === 'string' || Array.isArray(obj)) {
176
- return obj.concat(); /* <<<< returns early */
183
+ const toNormalizedForHashing = (value) => {
184
+ // Handle null, primitives (string, number, boolean) directly.
185
+ // `undefined` at the top level will be handled by the caller or become part of an object/array.
186
+ if (value === null || typeof value !== 'object') {
187
+ return value;
177
188
  }
178
- else if (typeof obj !== 'object') {
179
- // Return non-objects as is, we don't know how to concat/copy it...hmm...
180
- return obj; /* <<<< returns early */
189
+ // Handle Arrays: recursively normalize elements, preserve order
190
+ if (Array.isArray(value)) {
191
+ return value.map(element => toNormalizedForHashing(element));
181
192
  }
182
- // we have an object. we will create a new object and populate it.
183
- const normalized = {};
184
- // sort keys alphabetically
185
- // NOTE: this does NOT mutate obj as Object.keys produces a new array
186
- const keys = Object.keys(obj).sort();
187
- for (const key of keys) {
188
- const value = obj[key];
189
- if (value !== undefined) {
190
- // Recursively normalize if the value is an object
191
- normalized[key] = (typeof value === 'object' && value !== null) ? toNormalizedForHashing(value) : value;
193
+ // Handle Objects (plain objects)
194
+ const normalizedObject = {};
195
+ const sortedKeys = Object.keys(value).sort();
196
+ for (const key of sortedKeys) {
197
+ const propertyValue = value[key];
198
+ if (propertyValue !== undefined) { // CRITICAL: Only omit if value is undefined
199
+ normalizedObject[key] = toNormalizedForHashing(propertyValue);
192
200
  }
201
+ // If propertyValue is undefined, it's omitted from normalizedObject.
202
+ // If propertyValue is null, it's included.
193
203
  }
194
- return normalized;
204
+ return normalizedObject;
205
+ // if (!obj) {
206
+ // return obj; /* <<<< returns early */
207
+ // } else if (typeof obj === 'string' || Array.isArray(obj)) {
208
+ // return obj.concat(); /* <<<< returns early */
209
+ // } else if (typeof obj !== 'object') {
210
+ // // Return non-objects as is, we don't know how to concat/copy it...hmm...
211
+ // return obj; /* <<<< returns early */
212
+ // }
213
+ // // we have an object. we will create a new object and populate it.
214
+ // const normalized = {};
215
+ // // sort keys alphabetically
216
+ // // NOTE: this does NOT mutate obj as Object.keys produces a new array
217
+ // const keys = Object.keys(obj).sort();
218
+ // for (const key of keys) {
219
+ // const value = obj[key];
220
+ // if (value !== undefined) {
221
+ // // Recursively normalize if the value is an object
222
+ // normalized[key] = (typeof value === 'object' && value !== null) ? toNormalizedForHashing(value) : value;
223
+ // }
224
+ // }
225
+ // return normalized;
195
226
  };
196
227
  let hashFields;
197
228
  if (salt) {
@@ -276,7 +307,7 @@ export function sha256v1(ibGib, salt = "") {
276
307
  return allHash;
277
308
  };
278
309
  }
279
- return hashFields(ibGib.ib, ibGib?.data, ibGib?.rel8ns);
310
+ return hashFields(ibGib.ib, ibGib?.data, ibGib?.rel8ns); // conditional nav ibGib?.data and ibGib?.rel8ns
280
311
  }
281
312
  /**
282
313
  * I have one large-ish sha256 function for gibbing purposes
@@ -1 +1 @@
1
- {"version":3,"file":"sha256v1.mjs","sourceRoot":"","sources":["../../src/V1/sha256v1.mts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"sha256v1.mjs","sourceRoot":"","sources":["../../src/V1/sha256v1.mts"],"names":[],"mappings":"AAAA,OAAO,EAAE,eAAe,EAAE,MAAM,iDAAiD,CAAC;AAIlF,IAAI,MAAM,GAAQ,UAAU,CAAC,MAAM,CAAC;AACpC,IAAI,EAAE,MAAM,EAAE,GAAG,MAAM,CAAC;AAExB;;;;;;;;;;GAUG;AACH,MAAM,UAAU,YAAY,CAAC,KAAe,EAAE,OAAe,EAAE;IAC3D,6CAA6C;IAC7C,IAAI,CAAC,IAAI,EAAE;QAAE,IAAI,GAAG,EAAE,CAAC;KAAE;IACzB,IAAI,SAAS,GAAG,KAAK,EAAE,OAA2B,EAAE,EAAE;QAClD,IAAI,CAAC,OAAO,EAAE;YAAE,OAAO,EAAE,CAAC;SAAE;QAC5B,MAAM,QAAQ,GAAG,IAAI,WAAW,EAAE,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC;QACnD,MAAM,MAAM,GAAG,MAAM,MAAM,CAAC,MAAM,CAAC,SAAS,EAAE,QAAQ,CAAC,CAAC;QACxD,MAAM,OAAO,GAAG,KAAK,CAAC,IAAI,CAAC,IAAI,UAAU,CAAC,MAAM,CAAC,CAAC,CAAC;QACnD,mBAAmB;QACnB,OAAO,OAAO,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,QAAQ,CAAC,EAAE,CAAC,CAAC,QAAQ,CAAC,CAAC,EAAE,GAAG,CAAC,CAAC,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;IACtE,CAAC,CAAC;IACF,IAAI,oBAAoB,GAAG,KAAK,EAAE,IAAY,EAAE,QAAoB,EAAE,EAAE;QACpE,IAAI,gBAA4B,CAAC;QACjC,IAAI,IAAI,EAAE;YACN,MAAM,aAAa,GAAG,IAAI,WAAW,EAAE,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC;YACrD,gBAAgB,GAAG,IAAI,UAAU,CAAC,aAAa,CAAC,MAAM,GAAG,QAAQ,CAAC,MAAM,CAAC,CAAC;YAC1E,gBAAgB,CAAC,GAAG,CAAC,aAAa,CAAC,CAAC;YACpC,gBAAgB,CAAC,GAAG,CAAC,QAAQ,EAAE,aAAa,CAAC,MAAM,CAAC,CAAC;SACxD;aAAM;YACH,gBAAgB,GAAG,QAAQ,CAAC;SAC/B;QACD,MAAM,YAAY,GAAG,MAAM,MAAM,CAAC,MAAM,CAAC,SAAS,EAAE,gBAAgB,CAAC,CAAC;QACtE,MAAM,WAAW,GAAG,KAAK,CAAC,IAAI,CAAC,IAAI,UAAU,CAAC,YAAY,CAAC,CAAC,CAAC;QAC7D,mBAAmB;QACnB,OAAO,WAAW,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,QAAQ,CAAC,EAAE,CAAC,CAAC,QAAQ,CAAC,CAAC,EAAE,GAAG,CAAC,CAAC,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;IAC1E,CAAC,CAAC;IACF,IAAI,UAAU,CAAC;IACf,IAAI,IAAI,EAAE;QACN,UAAU,GAAG,KAAK,EAAE,EAAM,EAAE,IAA8B,EAAE,MAAkC,EAAE,EAAE;YAC9F,MAAM,SAAS,GACX,MAAM,CAAC,IAAI,CAAC,MAAM,IAAI,EAAE,CAAC,CAAC,MAAM,GAAG,CAAC;gBACpC,MAAM,CAAC,IAAI,CAAC,MAAM,IAAI,EAAE,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,MAAO,CAAC,CAAC,CAAC,IAAI,MAAO,CAAC,CAAC,CAAE,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC;YAC9E,IAAI,OAAO,GAAG,CAAC,CAAC,IAAI,CAAC;YACrB,IAAI,OAAO,EAAE;gBACT,IAAI,OAAO,IAAI,KAAK,QAAQ,EAAE;oBAC1B,OAAO,GAAI,IAAe,CAAC,MAAM,GAAG,CAAC,CAAC;iBACzC;qBAAM,IAAI,IAAI,YAAY,UAAU,EAAE;oBACnC,OAAO,GAAG,IAAI,CAAC;iBAClB;qBAAM,IAAI,OAAO,IAAI,KAAK,QAAQ,EAAE;oBACjC,OAAO,GAAG,MAAM,CAAC,IAAI,CAAC,CAAC,IAAI,CAAC,IAAI,EAAE,CAAC,CAAC,MAAM,GAAG,CAAC,CAAC;iBAClD;qBAAM;oBACH,OAAO,GAAG,IAAI,CAAC;iBAClB;aACJ;YACD,MAAM,MAAM,GAAG,CAAC,MAAM,SAAS,CAAC,IAAI,GAAG,EAAE,CAAC,CAAC,CAAC,WAAW,EAAE,CAAC;YAC1D,6DAA6D;YAC7D,MAAM,UAAU,GAAW,SAAS,CAAC,CAAC,CAAC,CAAC,MAAM,SAAS,CAAC,IAAI,GAAG,IAAI,CAAC,SAAS,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,WAAW,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;YAC3G,8FAA8F;YAE9F,6CAA6C;YAC7C,wGAAwG;YACxG,IAAI,QAAQ,GAAW,EAAE,CAAC;YAC1B,IAAI,OAAO,EAAE;gBACT,IAAI,IAAI,YAAY,UAAU,EAAE;oBAC5B,QAAQ,GAAG,CAAC,MAAM,oBAAoB,CAAC,IAAI,EAAE,IAAI,CAAC,CAAC,CAAC,WAAW,EAAE,CAAC;iBACrE;qBAAM;oBACH,QAAQ,GAAG,CAAC,MAAM,SAAS,CAAC,IAAI,GAAG,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,WAAW,EAAE,CAAC;iBAC3E;aACJ;YAED,gFAAgF;YAChF,MAAM,OAAO,GAAG,SAAS,IAAI,OAAO,CAAC,CAAC;gBAClC,CAAC,MAAM,SAAS,CAAC,IAAI,GAAG,MAAM,GAAG,UAAU,GAAG,QAAQ,CAAC,CAAC,CAAC,WAAW,EAAE,CAAC,CAAC;gBACxE,CAAC,MAAM,SAAS,CAAC,IAAI,GAAG,MAAM,CAAC,CAAC,CAAC,WAAW,EAAE,CAAC;YACnD,OAAO,OAAO,CAAC;QACnB,CAAC,CAAC;KACL;SAAM;QACH,UAAU,GAAG,KAAK,EAAE,EAAM,EAAE,IAA8B,EAAE,MAAkC,EAAE,EAAE;YAC9F,MAAM,SAAS,GACX,MAAM,CAAC,IAAI,CAAC,MAAM,IAAI,EAAE,CAAC,CAAC,MAAM,GAAG,CAAC;gBACpC,MAAM,CAAC,IAAI,CAAC,MAAM,IAAI,EAAE,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,MAAO,CAAC,CAAC,CAAC,IAAI,MAAO,CAAC,CAAC,CAAE,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC;YAC9E,wDAAwD;YACxD,IAAI,OAAO,GAAG,CAAC,CAAC,IAAI,CAAC;YACrB,IAAI,OAAO,EAAE;gBACT,IAAI,OAAO,IAAI,KAAK,QAAQ,EAAE;oBAC1B,OAAO,GAAI,IAAe,CAAC,MAAM,GAAG,CAAC,CAAC;iBACzC;qBAAM,IAAI,IAAI,YAAY,UAAU,EAAE;oBACnC,OAAO,GAAG,IAAI,CAAC;iBAClB;qBAAM,IAAI,OAAO,IAAI,KAAK,QAAQ,EAAE;oBACjC,OAAO,GAAG,MAAM,CAAC,IAAI,CAAC,CAAC,IAAI,CAAC,IAAI,EAAE,CAAC,CAAC,MAAM,GAAG,CAAC,CAAC;iBAClD;qBAAM;oBACH,OAAO,GAAG,IAAI,CAAC;iBAClB;aACJ;YACD,MAAM,MAAM,GAAG,CAAC,MAAM,SAAS,CAAC,EAAE,CAAC,CAAC,CAAC,WAAW,EAAE,CAAC;YACnD,6DAA6D;YAC7D,MAAM,UAAU,GAAW,SAAS,CAAC,CAAC,CAAC,CAAC,MAAM,SAAS,CAAC,IAAI,CAAC,SAAS,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,WAAW,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;YACpG,8FAA8F;YAC9F,iGAAiG;YACjG,IAAI,QAAQ,GAAW,EAAE,CAAC;YAC1B,IAAI,OAAO,EAAE;gBACT,IAAI,IAAI,YAAY,UAAU,EAAE;oBAC5B,QAAQ,GAAG,CAAC,MAAM,oBAAoB,CAAC,EAAE,EAAE,IAAI,CAAC,CAAC,CAAC,WAAW,EAAE,CAAC;iBACnE;qBAAM;oBACH,QAAQ,GAAG,CAAC,MAAM,SAAS,CAAC,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,WAAW,EAAE,CAAC;iBACpE;aACJ;YACD,gFAAgF;YAChF,MAAM,OAAO,GAAG,SAAS,IAAI,OAAO,CAAC,CAAC;gBAClC,CAAC,MAAM,SAAS,CAAC,MAAM,GAAG,UAAU,GAAG,QAAQ,CAAC,CAAC,CAAC,WAAW,EAAE,CAAC,CAAC;gBACjE,CAAC,MAAM,SAAS,CAAC,MAAM,CAAC,CAAC,CAAC,WAAW,EAAE,CAAC;YAC5C,OAAO,OAAO,CAAC;QACnB,CAAC,CAAA;KACJ;IACD,OAAO,UAAU,CAAC,KAAK,CAAC,EAAE,EAAE,KAAK,EAAE,IAAI,EAAE,KAAK,EAAE,MAAM,CAAC,CAAC;AAC5D,CAAC;AAED,MAAM,UAAU,QAAQ,CAAC,KAAe,EAAE,OAAe,EAAE;IACvD,6CAA6C;IAC7C,IAAI,CAAC,IAAI,EAAE;QAAE,IAAI,GAAG,EAAE,CAAC;KAAE;IACzB,IAAI,SAAS,GAAG,KAAK,EAAE,OAA2B,EAAE,EAAE;QAClD,IAAI,CAAC,OAAO,EAAE;YAAE,OAAO,EAAE,CAAC;SAAE;QAC5B,MAAM,QAAQ,GAAG,IAAI,WAAW,EAAE,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC;QACnD,MAAM,MAAM,GAAG,MAAM,MAAM,CAAC,MAAM,CAAC,SAAS,EAAE,QAAQ,CAAC,CAAC;QACxD,MAAM,OAAO,GAAG,KAAK,CAAC,IAAI,CAAC,IAAI,UAAU,CAAC,MAAM,CAAC,CAAC,CAAC;QACnD,mBAAmB;QACnB,OAAO,OAAO,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,QAAQ,CAAC,EAAE,CAAC,CAAC,QAAQ,CAAC,CAAC,EAAE,GAAG,CAAC,CAAC,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;IACtE,CAAC,CAAC;IACF,IAAI,oBAAoB,GAAG,KAAK,EAAE,IAAY,EAAE,QAAoB,EAAE,EAAE;QACpE,IAAI,gBAA4B,CAAC;QACjC,IAAI,IAAI,EAAE;YACN,MAAM,aAAa,GAAG,IAAI,WAAW,EAAE,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC;YACrD,gBAAgB,GAAG,IAAI,UAAU,CAAC,aAAa,CAAC,MAAM,GAAG,QAAQ,CAAC,MAAM,CAAC,CAAC;YAC1E,gBAAgB,CAAC,GAAG,CAAC,aAAa,CAAC,CAAC;YACpC,gBAAgB,CAAC,GAAG,CAAC,QAAQ,EAAE,aAAa,CAAC,MAAM,CAAC,CAAC;SACxD;aAAM;YACH,gBAAgB,GAAG,QAAQ,CAAC;SAC/B;QACD,MAAM,YAAY,GAAG,MAAM,MAAM,CAAC,MAAM,CAAC,SAAS,EAAE,gBAAgB,CAAC,CAAC;QACtE,MAAM,WAAW,GAAG,KAAK,CAAC,IAAI,CAAC,IAAI,UAAU,CAAC,YAAY,CAAC,CAAC,CAAC;QAC7D,mBAAmB;QACnB,OAAO,WAAW,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,QAAQ,CAAC,EAAE,CAAC,CAAC,QAAQ,CAAC,CAAC,EAAE,GAAG,CAAC,CAAC,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;IAC1E,CAAC,CAAC;IAEF;;;;;;;;;;;;;;;;;;;;OAoBG;IACH,MAAM,sBAAsB,GAAG,CAAC,KAAU,EAAE,EAAE;QAC1C,8DAA8D;QAC9D,gGAAgG;QAChG,IAAI,KAAK,KAAK,IAAI,IAAI,OAAO,KAAK,KAAK,QAAQ,EAAE;YAC7C,OAAO,KAAK,CAAC;SAChB;QAED,gEAAgE;QAChE,IAAI,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC,EAAE;YACtB,OAAO,KAAK,CAAC,GAAG,CAAC,OAAO,CAAC,EAAE,CAAC,sBAAsB,CAAC,OAAO,CAAC,CAAC,CAAC;SAChE;QAED,iCAAiC;QACjC,MAAM,gBAAgB,GAA2B,EAAE,CAAC;QACpD,MAAM,UAAU,GAAG,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,IAAI,EAAE,CAAC;QAE7C,KAAK,MAAM,GAAG,IAAI,UAAU,EAAE;YAC1B,MAAM,aAAa,GAAG,KAAK,CAAC,GAAG,CAAC,CAAC;YACjC,IAAI,aAAa,KAAK,SAAS,EAAE,EAAE,4CAA4C;gBAC3E,gBAAgB,CAAC,GAAG,CAAC,GAAG,sBAAsB,CAAC,aAAa,CAAC,CAAC;aACjE;YACD,qEAAqE;YACrE,2CAA2C;SAC9C;QACD,OAAO,gBAAgB,CAAC;QAExB,cAAc;QACd,2CAA2C;QAC3C,8DAA8D;QAC9D,oDAAoD;QACpD,wCAAwC;QACxC,gFAAgF;QAChF,4CAA4C;QAC5C,IAAI;QAEJ,qEAAqE;QACrE,yBAAyB;QAEzB,8BAA8B;QAC9B,wEAAwE;QACxE,wCAAwC;QAExC,4BAA4B;QAC5B,8BAA8B;QAC9B,iCAAiC;QACjC,6DAA6D;QAC7D,mHAAmH;QACnH,QAAQ;QACR,IAAI;QACJ,qBAAqB;IACzB,CAAC,CAAA;IAGD,IAAI,UAAU,CAAC;IACf,IAAI,IAAI,EAAE;QACN,UAAU,GAAG,KAAK,EAAE,EAAM,EAAE,IAA8B,EAAE,MAAkC,EAAE,EAAE;YAC9F,MAAM,SAAS,GACX,MAAM,CAAC,IAAI,CAAC,MAAM,IAAI,EAAE,CAAC,CAAC,MAAM,GAAG,CAAC;gBACpC,MAAM,CAAC,IAAI,CAAC,MAAM,IAAI,EAAE,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,MAAO,CAAC,CAAC,CAAC,IAAI,MAAO,CAAC,CAAC,CAAE,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC;YAC9E,IAAI,OAAO,GAAG,CAAC,CAAC,IAAI,CAAC;YACrB,IAAI,OAAO,EAAE;gBACT,IAAI,OAAO,IAAI,KAAK,QAAQ,EAAE;oBAC1B,OAAO,GAAI,IAAe,CAAC,MAAM,GAAG,CAAC,CAAC;iBACzC;qBAAM,IAAI,IAAI,YAAY,UAAU,EAAE;oBACnC,OAAO,GAAG,IAAI,CAAC;iBAClB;qBAAM,IAAI,OAAO,IAAI,KAAK,QAAQ,EAAE;oBACjC,OAAO,GAAG,MAAM,CAAC,IAAI,CAAC,CAAC,IAAI,CAAC,IAAI,EAAE,CAAC,CAAC,MAAM,GAAG,CAAC,CAAC;iBAClD;qBAAM;oBACH,OAAO,GAAG,IAAI,CAAC;iBAClB;aACJ;YACD,MAAM,MAAM,GAAG,CAAC,MAAM,SAAS,CAAC,IAAI,GAAG,EAAE,CAAC,CAAC,CAAC,WAAW,EAAE,CAAC;YAC1D,6DAA6D;YAC7D,MAAM,UAAU,GAAW,SAAS,CAAC,CAAC,CAAC,CAAC,MAAM,SAAS,CAAC,IAAI,GAAG,IAAI,CAAC,SAAS,CAAC,sBAAsB,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC,WAAW,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;YACnI,8FAA8F;YAE9F,6CAA6C;YAC7C,wGAAwG;YACxG,IAAI,QAAQ,GAAW,EAAE,CAAC;YAC1B,IAAI,OAAO,EAAE;gBACT,IAAI,IAAI,YAAY,UAAU,EAAE;oBAC5B,QAAQ,GAAG,CAAC,MAAM,oBAAoB,CAAC,IAAI,EAAE,IAAI,CAAC,CAAC,CAAC,WAAW,EAAE,CAAC;iBACrE;qBAAM;oBACH,QAAQ,GAAG,CAAC,MAAM,SAAS,CAAC,IAAI,GAAG,IAAI,CAAC,SAAS,CAAC,sBAAsB,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,WAAW,EAAE,CAAC;iBACnG;aACJ;YAED,gFAAgF;YAChF,MAAM,OAAO,GAAG,SAAS,IAAI,OAAO,CAAC,CAAC;gBAClC,CAAC,MAAM,SAAS,CAAC,IAAI,GAAG,MAAM,GAAG,UAAU,GAAG,QAAQ,CAAC,CAAC,CAAC,WAAW,EAAE,CAAC,CAAC;gBACxE,CAAC,MAAM,SAAS,CAAC,IAAI,GAAG,MAAM,CAAC,CAAC,CAAC,WAAW,EAAE,CAAC;YACnD,OAAO,OAAO,CAAC;QACnB,CAAC,CAAC;KACL;SAAM;QACH,UAAU,GAAG,KAAK,EAAE,EAAM,EAAE,IAA8B,EAAE,MAAkC,EAAE,EAAE;YAC9F,MAAM,SAAS,GACX,MAAM,CAAC,IAAI,CAAC,MAAM,IAAI,EAAE,CAAC,CAAC,MAAM,GAAG,CAAC;gBACpC,MAAM,CAAC,IAAI,CAAC,MAAM,IAAI,EAAE,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,MAAO,CAAC,CAAC,CAAC,IAAI,MAAO,CAAC,CAAC,CAAE,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC;YAC9E,wDAAwD;YACxD,IAAI,OAAO,GAAG,CAAC,CAAC,IAAI,CAAC;YACrB,IAAI,OAAO,EAAE;gBACT,IAAI,OAAO,IAAI,KAAK,QAAQ,EAAE;oBAC1B,OAAO,GAAI,IAAe,CAAC,MAAM,GAAG,CAAC,CAAC;iBACzC;qBAAM,IAAI,IAAI,YAAY,UAAU,EAAE;oBACnC,OAAO,GAAG,IAAI,CAAC;iBAClB;qBAAM,IAAI,OAAO,IAAI,KAAK,QAAQ,EAAE;oBACjC,OAAO,GAAG,MAAM,CAAC,IAAI,CAAC,CAAC,IAAI,CAAC,IAAI,EAAE,CAAC,CAAC,MAAM,GAAG,CAAC,CAAC;iBAClD;qBAAM;oBACH,OAAO,GAAG,IAAI,CAAC;iBAClB;aACJ;YACD,MAAM,MAAM,GAAG,CAAC,MAAM,SAAS,CAAC,EAAE,CAAC,CAAC,CAAC,WAAW,EAAE,CAAC;YACnD,6DAA6D;YAC7D,MAAM,UAAU,GAAW,SAAS,CAAC,CAAC,CAAC,CAAC,MAAM,SAAS,CAAC,IAAI,CAAC,SAAS,CAAC,sBAAsB,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC,WAAW,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;YAC5H,8FAA8F;YAC9F,iGAAiG;YACjG,IAAI,QAAQ,GAAW,EAAE,CAAC;YAC1B,IAAI,OAAO,EAAE;gBACT,IAAI,IAAI,YAAY,UAAU,EAAE;oBAC5B,QAAQ,GAAG,CAAC,MAAM,oBAAoB,CAAC,EAAE,EAAE,IAAI,CAAC,CAAC,CAAC,WAAW,EAAE,CAAC;iBACnE;qBAAM;oBACH,QAAQ,GAAG,CAAC,MAAM,SAAS,CAAC,IAAI,CAAC,SAAS,CAAC,sBAAsB,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,WAAW,EAAE,CAAC;iBAC5F;aACJ;YACD,gFAAgF;YAChF,MAAM,OAAO,GAAG,SAAS,IAAI,OAAO,CAAC,CAAC;gBAClC,CAAC,MAAM,SAAS,CAAC,MAAM,GAAG,UAAU,GAAG,QAAQ,CAAC,CAAC,CAAC,WAAW,EAAE,CAAC,CAAC;gBACjE,CAAC,MAAM,SAAS,CAAC,MAAM,CAAC,CAAC,CAAC,WAAW,EAAE,CAAC;YAC5C,OAAO,OAAO,CAAC;QACnB,CAAC,CAAA;KACJ;IACD,OAAO,UAAU,CAAC,KAAK,CAAC,EAAE,EAAE,KAAK,EAAE,IAAI,EAAE,KAAK,EAAE,MAAM,CAAC,CAAC,CAAC,gDAAgD;AAC7G,CAAC;AAED;;;;;GAKG;AACH,MAAM,CAAC,KAAK,UAAU,aAAa,CAC/B,OAA2B;IAE3B,IAAI,CAAC,OAAO,EAAE;QAAE,OAAO,EAAE,CAAC;KAAE;IAC5B,IAAI;QACA,MAAM,QAAQ,GAAG,IAAI,WAAW,EAAE,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC;QACnD,MAAM,MAAM,GAAG,MAAM,MAAM,CAAC,MAAM,CAAC,SAAS,EAAE,QAAQ,CAAC,CAAC;QACxD,MAAM,OAAO,GAAG,KAAK,CAAC,IAAI,CAAC,IAAI,UAAU,CAAC,MAAM,CAAC,CAAC,CAAC;QACnD,OAAO,OAAO,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,QAAQ,CAAC,EAAE,CAAC,CAAC,QAAQ,CAAC,CAAC,EAAE,GAAG,CAAC,CAAC,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;KACrE;IAAC,OAAO,CAAC,EAAE;QACR,OAAO,CAAC,KAAK,CAAC,eAAe,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC;QAC1C,OAAO,SAAS,CAAC;KACpB;AACL,CAAC;AAAA,CAAC"}
@@ -1 +1 @@
1
- {"version":3,"file":"fork.d.mts","sourceRoot":"","sources":["../../../src/V1/transforms/fork.mts"],"names":[],"mappings":"AAGA,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,CAoFjG"}
1
+ {"version":3,"file":"fork.d.mts","sourceRoot":"","sources":["../../../src/V1/transforms/fork.mts"],"names":[],"mappings":"AAGA,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,CAqFjG"}
@@ -56,6 +56,7 @@ export async function fork(opts) {
56
56
  const rel8ns = cloneRel8ns && src.rel8ns && Object.keys(src.rel8ns).length > 0 ?
57
57
  clone(src.rel8ns) :
58
58
  {};
59
+ delete rel8ns.past;
59
60
  const data = cloneData && src?.data ? clone(src.data) : {};
60
61
  if (opts.nCounter) {
61
62
  data.n = 0;
@@ -1 +1 @@
1
- {"version":3,"file":"fork.mjs","sourceRoot":"","sources":["../../../src/V1/transforms/fork.mts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"fork.mjs","sourceRoot":"","sources":["../../../src/V1/transforms/fork.mts"],"names":[],"mappings":"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"}
package/dist/helper.d.mts CHANGED
@@ -21,13 +21,24 @@ export declare function getIbAndGib({ ibGib, ibGibAddr, delimiter }: {
21
21
  delimiter?: string;
22
22
  }): IbAndGib;
23
23
  /**
24
- * normalizes via sorting keys and removing values that are undefined.
25
- * values that are null or empty strings are not removed.
24
+ * Normalizes an object/value for consistent hashing.
25
+ * - Recursively processes objects and arrays.
26
+ * - For objects:
27
+ * - Sorts keys alphabetically.
28
+ * - Removes properties whose values are `undefined`.
29
+ * - Keeps properties whose values are `null`.
30
+ * - For arrays:
31
+ * - Preserves element order.
32
+ * - Recursively normalizes each element.
33
+ * - Primitives (strings, numbers, booleans) and `null` are returned as is.
26
34
  *
27
- * this is DUPLICATED code in the respec file. any changes here must
28
- * manually be changed in the respec file!!!
35
+ * @param value The value to normalize.
36
+ * @returns The normalized value.
29
37
  *
30
- * @param obj to normalize (is not changed, e.g. keys aren't sorted in place)
38
+ * This has been adjusted due to conversation with Gemini and working on python
39
+ * port. The main thing here is that we normalize array members, but not the
40
+ * array itself. This way the array's order is preserved, but any object members
41
+ * are themselves normalized.
31
42
  */
32
- export declare function toNormalizedForHashing(obj: any): any;
43
+ export declare function toNormalizedForHashing(value: any): any;
33
44
  //# sourceMappingURL=helper.d.mts.map
@@ -1 +1 @@
1
- {"version":3,"file":"helper.d.mts","sourceRoot":"","sources":["../src/helper.mts"],"names":[],"mappings":"AAAA,OAAO,EAAE,EAAE,EAAE,GAAG,EAAE,KAAK,EAAE,SAAS,EAAE,QAAQ,EAAE,MAAM,aAAa,CAAC;AAGlE;;;;;GAKG;AACH,wBAAgB,YAAY,CAAC,EACzB,EAAE,EAAE,GAAG,EAAE,KAAK,EAAE,SAAe,EAClC,EAAE;IACC,EAAE,CAAC,EAAE,EAAE,CAAC;IACR,GAAG,CAAC,EAAE,GAAG,CAAC;IACV,KAAK,CAAC,EAAE,KAAK,CAAC;IACd,SAAS,CAAC,EAAE,MAAM,CAAA;CACrB,GAAG,SAAS,CAIZ;AAED;;;GAGG;AACH,wBAAgB,WAAW,CAAC,EACxB,KAAK,EACL,SAAS,EACT,SAAe,EAClB,EAAE;IACC,SAAS,CAAC,EAAE,SAAS,CAAC;IACtB,KAAK,CAAC,EAAE,KAAK,CAAC;IACd,SAAS,CAAC,EAAE,MAAM,CAAA;CACrB,GAAG,QAAQ,CAyCX;AAED;;;;;;;;GAQG;AACH,wBAAgB,sBAAsB,CAAC,GAAG,EAAE,GAAG,GAAG,GAAG,CAyBpD"}
1
+ {"version":3,"file":"helper.d.mts","sourceRoot":"","sources":["../src/helper.mts"],"names":[],"mappings":"AAAA,OAAO,EAAE,EAAE,EAAE,GAAG,EAAE,KAAK,EAAE,SAAS,EAAE,QAAQ,EAAE,MAAM,aAAa,CAAC;AAGlE;;;;;GAKG;AACH,wBAAgB,YAAY,CAAC,EACzB,EAAE,EAAE,GAAG,EAAE,KAAK,EAAE,SAAe,EAClC,EAAE;IACC,EAAE,CAAC,EAAE,EAAE,CAAC;IACR,GAAG,CAAC,EAAE,GAAG,CAAC;IACV,KAAK,CAAC,EAAE,KAAK,CAAC;IACd,SAAS,CAAC,EAAE,MAAM,CAAA;CACrB,GAAG,SAAS,CAIZ;AAED;;;GAGG;AACH,wBAAgB,WAAW,CAAC,EACxB,KAAK,EACL,SAAS,EACT,SAAe,EAClB,EAAE;IACC,SAAS,CAAC,EAAE,SAAS,CAAC;IACtB,KAAK,CAAC,EAAE,KAAK,CAAC;IACd,SAAS,CAAC,EAAE,MAAM,CAAA;CACrB,GAAG,QAAQ,CAyCX;AAGD;;;;;;;;;;;;;;;;;;;GAmBG;AACH,wBAAgB,sBAAsB,CAAC,KAAK,EAAE,GAAG,GAAG,GAAG,CAyBtD"}
package/dist/helper.mjs CHANGED
@@ -63,37 +63,46 @@ export function getIbAndGib({ ibGib, ibGibAddr, delimiter = '^' }) {
63
63
  }
64
64
  }
65
65
  /**
66
- * normalizes via sorting keys and removing values that are undefined.
67
- * values that are null or empty strings are not removed.
66
+ * Normalizes an object/value for consistent hashing.
67
+ * - Recursively processes objects and arrays.
68
+ * - For objects:
69
+ * - Sorts keys alphabetically.
70
+ * - Removes properties whose values are `undefined`.
71
+ * - Keeps properties whose values are `null`.
72
+ * - For arrays:
73
+ * - Preserves element order.
74
+ * - Recursively normalizes each element.
75
+ * - Primitives (strings, numbers, booleans) and `null` are returned as is.
68
76
  *
69
- * this is DUPLICATED code in the respec file. any changes here must
70
- * manually be changed in the respec file!!!
77
+ * @param value The value to normalize.
78
+ * @returns The normalized value.
71
79
  *
72
- * @param obj to normalize (is not changed, e.g. keys aren't sorted in place)
80
+ * This has been adjusted due to conversation with Gemini and working on python
81
+ * port. The main thing here is that we normalize array members, but not the
82
+ * array itself. This way the array's order is preserved, but any object members
83
+ * are themselves normalized.
73
84
  */
74
- export function toNormalizedForHashing(obj) {
75
- if (!obj) {
76
- return obj; /* <<<< returns early */
85
+ export function toNormalizedForHashing(value) {
86
+ // Handle null, primitives (string, number, boolean) directly.
87
+ // `undefined` at the top level will be handled by the caller or become part of an object/array.
88
+ if (value === null || typeof value !== 'object') {
89
+ return value;
77
90
  }
78
- else if (typeof obj === 'string' || Array.isArray(obj)) {
79
- return obj.concat(); /* <<<< returns early */
91
+ // Handle Arrays: recursively normalize elements, preserve order
92
+ if (Array.isArray(value)) {
93
+ return value.map(element => toNormalizedForHashing(element));
80
94
  }
81
- else if (typeof obj !== 'object') {
82
- // Return non-objects as is, we don't know how to concat/copy it...hmm...
83
- return obj; /* <<<< returns early */
84
- }
85
- // we have an object. we will create a new object and populate it.
86
- const normalized = {};
87
- // sort keys alphabetically
88
- // NOTE: this does NOT mutate obj as Object.keys produces a new array
89
- const keys = Object.keys(obj).sort();
90
- for (const key of keys) {
91
- const value = obj[key];
92
- if (value !== undefined) {
93
- // Recursively normalize if the value is an object
94
- normalized[key] = (typeof value === 'object' && value !== null) ? toNormalizedForHashing(value) : value;
95
+ // Handle Objects (plain objects)
96
+ const normalizedObject = {};
97
+ const sortedKeys = Object.keys(value).sort();
98
+ for (const key of sortedKeys) {
99
+ const propertyValue = value[key];
100
+ if (propertyValue !== undefined) { // CRITICAL: Only omit if value is undefined
101
+ normalizedObject[key] = toNormalizedForHashing(propertyValue);
95
102
  }
103
+ // If propertyValue is undefined, it's omitted from normalizedObject.
104
+ // If propertyValue is null, it's included.
96
105
  }
97
- return normalized;
106
+ return normalizedObject;
98
107
  }
99
108
  //# sourceMappingURL=helper.mjs.map
@@ -1 +1 @@
1
- {"version":3,"file":"helper.mjs","sourceRoot":"","sources":["../src/helper.mts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"helper.mjs","sourceRoot":"","sources":["../src/helper.mts"],"names":[],"mappings":"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"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@ibgib/ts-gib",
3
- "version": "0.5.21",
3
+ "version": "0.5.24",
4
4
  "description": "ibgib library with low-level graphing-related substrate functionality, e.g. creating raw ibgibs and transformations. node19+ needed for heavily-used webcrypto hashing isomorphically consumed in node and browsers (apps).",
5
5
  "repository": {
6
6
  "url": "https://gitlab.com/ibgib/ts-gib",
@@ -151,41 +151,79 @@ export function sha256v1(ibGib: IbGib_V1, salt: string = ""): Promise<string> {
151
151
  };
152
152
 
153
153
  /**
154
- * normalizes via sorting keys and removing values that are undefined.
155
- * values that are null or empty strings are not removed.
154
+ * THIS IS DUPLICATED CODE IN THE RESPEC FILE. ANY CHANGES HERE MUST
155
+ * MANUALLY BE CHANGED IN THE RESPEC FILE!!!
156
156
  *
157
- * this is DUPLICATED code in the respec file. any changes here must
158
- * manually be changed in the respec file!!!
157
+ * Normalizes an object/value for consistent hashing.
158
+ * - Recursively processes objects and arrays.
159
+ * - For objects:
160
+ * - Sorts keys alphabetically.
161
+ * - Removes properties whose values are `undefined`.
162
+ * - Keeps properties whose values are `null`.
163
+ * - For arrays:
164
+ * - Preserves element order.
165
+ * - Recursively normalizes each element.
166
+ * - Primitives (strings, numbers, booleans) and `null` are returned as is.
159
167
  *
160
- * @param obj to normalize (is not changed, e.g. keys aren't sorted in place)
168
+ * THIS IS DUPLICATED CODE IN THE RESPEC FILE. ANY CHANGES HERE MUST
169
+ * MANUALLY BE CHANGED IN THE RESPEC FILE!!!
170
+ *
171
+ * @param value The value to normalize.
172
+ * @returns The normalized value.
161
173
  */
162
- const toNormalizedForHashing = (obj: any) => {
163
- if (!obj) {
164
- return obj; /* <<<< returns early */
165
- } else if (typeof obj === 'string' || Array.isArray(obj)) {
166
- return obj.concat(); /* <<<< returns early */
167
- } else if (typeof obj !== 'object') {
168
- // Return non-objects as is, we don't know how to concat/copy it...hmm...
169
- return obj; /* <<<< returns early */
174
+ const toNormalizedForHashing = (value: any) => {
175
+ // Handle null, primitives (string, number, boolean) directly.
176
+ // `undefined` at the top level will be handled by the caller or become part of an object/array.
177
+ if (value === null || typeof value !== 'object') {
178
+ return value;
170
179
  }
171
180
 
172
- // we have an object. we will create a new object and populate it.
173
- const normalized = {};
181
+ // Handle Arrays: recursively normalize elements, preserve order
182
+ if (Array.isArray(value)) {
183
+ return value.map(element => toNormalizedForHashing(element));
184
+ }
174
185
 
175
- // sort keys alphabetically
176
- // NOTE: this does NOT mutate obj as Object.keys produces a new array
177
- const keys = Object.keys(obj).sort();
186
+ // Handle Objects (plain objects)
187
+ const normalizedObject: { [key: string]: any } = {};
188
+ const sortedKeys = Object.keys(value).sort();
178
189
 
179
- for (const key of keys) {
180
- const value = obj[key];
181
- if (value !== undefined) {
182
- // Recursively normalize if the value is an object
183
- normalized[key] = (typeof value === 'object' && value !== null) ? toNormalizedForHashing(value) : value;
190
+ for (const key of sortedKeys) {
191
+ const propertyValue = value[key];
192
+ if (propertyValue !== undefined) { // CRITICAL: Only omit if value is undefined
193
+ normalizedObject[key] = toNormalizedForHashing(propertyValue);
184
194
  }
195
+ // If propertyValue is undefined, it's omitted from normalizedObject.
196
+ // If propertyValue is null, it's included.
185
197
  }
186
- return normalized;
198
+ return normalizedObject;
199
+
200
+ // if (!obj) {
201
+ // return obj; /* <<<< returns early */
202
+ // } else if (typeof obj === 'string' || Array.isArray(obj)) {
203
+ // return obj.concat(); /* <<<< returns early */
204
+ // } else if (typeof obj !== 'object') {
205
+ // // Return non-objects as is, we don't know how to concat/copy it...hmm...
206
+ // return obj; /* <<<< returns early */
207
+ // }
208
+
209
+ // // we have an object. we will create a new object and populate it.
210
+ // const normalized = {};
211
+
212
+ // // sort keys alphabetically
213
+ // // NOTE: this does NOT mutate obj as Object.keys produces a new array
214
+ // const keys = Object.keys(obj).sort();
215
+
216
+ // for (const key of keys) {
217
+ // const value = obj[key];
218
+ // if (value !== undefined) {
219
+ // // Recursively normalize if the value is an object
220
+ // normalized[key] = (typeof value === 'object' && value !== null) ? toNormalizedForHashing(value) : value;
221
+ // }
222
+ // }
223
+ // return normalized;
187
224
  }
188
225
 
226
+
189
227
  let hashFields;
190
228
  if (salt) {
191
229
  hashFields = async (ib: Ib, data: IbGibData_V1 | undefined, rel8ns: IbGibRel8ns_V1 | undefined) => {
@@ -264,7 +302,7 @@ export function sha256v1(ibGib: IbGib_V1, salt: string = ""): Promise<string> {
264
302
  return allHash;
265
303
  }
266
304
  }
267
- return hashFields(ibGib.ib, ibGib?.data, ibGib?.rel8ns);
305
+ return hashFields(ibGib.ib, ibGib?.data, ibGib?.rel8ns); // conditional nav ibGib?.data and ibGib?.rel8ns
268
306
  }
269
307
 
270
308
  /**
@@ -11,7 +11,8 @@
11
11
  */
12
12
 
13
13
  import {
14
- firstOfAll, ifWe, ifWeMight, iReckon, respecfully
14
+ firstOfAll, ifWe, ifWeMight, iReckon, respecfully,
15
+ respecfullyDear
15
16
  } from '@ibgib/helper-gib/dist/respec-gib/respec-gib.mjs';
16
17
  const maam = `[${import.meta.url}]`, sir = maam;
17
18
 
@@ -20,7 +21,6 @@ import { sha256v1, hashToHexCopy } from './sha256v1.mjs';
20
21
  import { IbGibWithDataAndRel8ns, IbGibRel8ns } from '../types.mjs';
21
22
  import { getGib, getGibInfo } from './transforms/transform-helper.mjs';
22
23
 
23
-
24
24
  import { Factory_V1 as factory } from './factory.mjs';
25
25
  import { toNormalizedForHashing } from '../helper.mjs';
26
26
 
@@ -249,3 +249,342 @@ await respecfully(sir, `when hashing sha256v1`, async () => {
249
249
  }
250
250
 
251
251
  });
252
+
253
+ console.warn(`${sir} These are python edge case tests that I'm creating with Jules, Google's GitHub agent. It is a learning process and these tests are supposed to be helpers to fill out edge cases. I'm doing this in the python_gib repo though, and Jules is not able to run these tests directly. It's still a WIP. (W: 5ebcf87554c8216dc86e664ffaf62525)`)
254
+ console.warn(`${sir} These are python edge case tests that I'm creating with Jules, Google's GitHub agent. It is a learning process and these tests are supposed to be helpers to fill out edge cases. I'm doing this in the python_gib repo though, and Jules is not able to run these tests directly. It's still a WIP. (W: 5ebcf87554c8216dc86e664ffaf62525)`)
255
+ console.warn(`${sir} These are python edge case tests that I'm creating with Jules, Google's GitHub agent. It is a learning process and these tests are supposed to be helpers to fill out edge cases. I'm doing this in the python_gib repo though, and Jules is not able to run these tests directly. It's still a WIP. (W: 5ebcf87554c8216dc86e664ffaf62525)`)
256
+ console.warn(`${sir} These are python edge case tests that I'm creating with Jules, Google's GitHub agent. It is a learning process and these tests are supposed to be helpers to fill out edge cases. I'm doing this in the python_gib repo though, and Jules is not able to run these tests directly. It's still a WIP. (W: 5ebcf87554c8216dc86e664ffaf62525)`)
257
+
258
+ await respecfully(sir, `Python Edge Case Tests for sha256v1`, async () => {
259
+
260
+ const EMPTY_HASH_FOR_ABSENT_FIELD = "";
261
+
262
+ await ifWe(sir, `Edge Case 1: data with mixed undefined and empty string values`, async () => {
263
+ const ibGib_s1: IbGib_V1 = {
264
+ ib: 's1',
265
+ data: { a: undefined, b: '', c: 'val', d: { d1: undefined, d2: 'd2val' } }
266
+ };
267
+
268
+ const expected_ib_hash_s1 = "E8BC163C82EEE18733288C7D4AC636DB3A6DEB013EF2D37B68322BE20EDC45CC";
269
+ const expected_data_hash_s1 = "3310C5015C3426C4EC62CF5F5F3EC5D83F86C26E54C5AC3BD05C1B574B46ADE2";
270
+ const expected_gib_s1 = "9B9D08F270C5249FD1DC2E0453010EBD544C7781FF5CDAFADD7679C2C7DA7247";
271
+
272
+ const ibHash_ts = (await hashToHexCopy(ibGib_s1.ib!))?.toUpperCase() || '';
273
+ iReckon(sir, ibHash_ts).asTo(`ibHash_ts for s1`).isGonnaBe(expected_ib_hash_s1);
274
+
275
+ const normalizedData_ts = toNormalizedForHashing(ibGib_s1.data);
276
+ const stringifiedData_ts = JSON.stringify(normalizedData_ts);
277
+ const actualDataHash_ts = (await hashToHexCopy(stringifiedData_ts))?.toUpperCase() || '';
278
+ iReckon(sir, actualDataHash_ts).asTo(`actualDataHash_ts for s1`).isGonnaBe(expected_data_hash_s1);
279
+
280
+ const actualRel8nsHash_ts = EMPTY_HASH_FOR_ABSENT_FIELD;
281
+ // Manual final gib construction based on Python test logic: hash(ib_hash + "" + data_hash)
282
+ const combinedSource_manual_ts = ibHash_ts + actualRel8nsHash_ts + actualDataHash_ts;
283
+ const manualGib_ts = (await hashToHexCopy(combinedSource_manual_ts))?.toUpperCase() || '';
284
+ iReckon(sir, manualGib_ts).asTo(`manualGib_ts for s1 (from py test logic)`).isGonnaBe(expected_gib_s1);
285
+
286
+ const calculatedGib_ts = (await sha256v1(ibGib_s1, ""))?.toUpperCase();
287
+ iReckon(sir, calculatedGib_ts).asTo(`calculatedGib_ts for s1 (from sha256v1 call)`).isGonnaBe(expected_gib_s1);
288
+ });
289
+
290
+ await ifWe(sir, `Edge Case 2: rel8ns with a relation mapping to a list containing null`, async () => {
291
+ const ibGib_s2: IbGib_V1 = {
292
+ ib: 's2',
293
+ rel8ns: { next: ['addr1', null as any, 'addr2'], prev: undefined }
294
+ };
295
+
296
+ const expected_ib_hash_s2 = "AD328846AA18B32A335816374511CAC1063C704B8C57999E51DA9F908290A7A4";
297
+ const expected_rel8ns_hash_s2 = "32945B4CE582D29827CA925DCA3155CA397C132F0DB1DB5DFF9AD46A8EFD98FE";
298
+ const expected_gib_s2 = "8DD27B4AFBE3AD7D59768CB4D1A574DC2FEA19546E922101FED6F6ECA9B97C61";
299
+
300
+ const ibHash_ts = (await hashToHexCopy(ibGib_s2.ib!))?.toUpperCase() || '';
301
+ iReckon(sir, ibHash_ts).asTo(`ibHash_ts for s2`).isGonnaBe(expected_ib_hash_s2);
302
+
303
+ const normalizedRel8ns_ts = toNormalizedForHashing(ibGib_s2.rel8ns);
304
+ const stringifiedRel8ns_ts = JSON.stringify(normalizedRel8ns_ts);
305
+ const actualRel8nsHash_ts = (await hashToHexCopy(stringifiedRel8ns_ts))?.toUpperCase() || '';
306
+ iReckon(sir, actualRel8nsHash_ts).asTo(`actualRel8nsHash_ts for s2`).isGonnaBe(expected_rel8ns_hash_s2);
307
+
308
+ const actualDataHash_ts = EMPTY_HASH_FOR_ABSENT_FIELD;
309
+ // Manual final gib construction based on Python test logic: hash(ib_hash + rel8ns_hash + "")
310
+ const combinedSource_manual_ts = ibHash_ts + actualRel8nsHash_ts + actualDataHash_ts;
311
+ const manualGib_ts = (await hashToHexCopy(combinedSource_manual_ts))?.toUpperCase() || '';
312
+ iReckon(sir, manualGib_ts).asTo(`manualGib_ts for s2 (from py test logic)`).isGonnaBe(expected_gib_s2);
313
+
314
+ const calculatedGib_ts = (await sha256v1(ibGib_s2, ""))?.toUpperCase();
315
+ iReckon(sir, calculatedGib_ts).asTo(`calculatedGib_ts for s2 (from sha256v1 call)`).isGonnaBe(expected_gib_s2);
316
+ });
317
+
318
+ // skipping because this is not a valid ibgib and I'm trying to understand
319
+ // how to work with Jules (Google's GitHub agent)
320
+ // await ifWe(sir, `Edge Case 3: data is an empty list []`, async () => {
321
+ // const ibGib_s3: IbGib_V1 = { ib: 's3', data: [] };
322
+
323
+ // // const gib = await getGib({ibGib: ibGib_s3});
324
+ // // ibGib_s3.gib
325
+
326
+ // const expected_ib_hash_s3 = "41242B9FAE56FAD4E6E77DFE33CB18D1C3FC583F988CF25EF9F2D9BE0D440BBB";
327
+ // const expected_data_hash_s3 = "4F53CDA18C2BAA0C0354BB5F9A3ECBE5ED12AB4D8E11BA873C2F11161202B945";
328
+ // const expected_gib_s3 = "BA109F5B0C09CF0A27EF976F876EE8F336DC954EF6443F324F19D78020E3E59A";
329
+
330
+ // const ibHash_ts = (await hashToHexCopy(ibGib_s3.ib!))?.toUpperCase() || '';
331
+ // iReckon(sir, ibHash_ts).asTo(`ibHash_ts for s3`).isGonnaBe(expected_ib_hash_s3);
332
+
333
+ // const normalizedData_ts = toNormalizedForHashing(ibGib_s3.data);
334
+ // const stringifiedData_ts = JSON.stringify(normalizedData_ts);
335
+ // const actualDataHash_ts = (await hashToHexCopy(stringifiedData_ts))?.toUpperCase() || '';
336
+ // iReckon(sir, actualDataHash_ts).asTo(`actualDataHash_ts for s3`).isGonnaBe(expected_data_hash_s3);
337
+
338
+ // const actualRel8nsHash_ts = EMPTY_HASH_FOR_ABSENT_FIELD;
339
+ // const combinedSource_manual_ts = ibHash_ts + actualRel8nsHash_ts + actualDataHash_ts;
340
+ // const manualGib_ts = (await hashToHexCopy(combinedSource_manual_ts))?.toUpperCase() || '';
341
+ // iReckon(sir, manualGib_ts).asTo(`manualGib_ts for s3 (from py test logic)`).isGonnaBe(expected_gib_s3);
342
+
343
+ // const calculatedGib_ts = (await sha256v1(ibGib_s3, ""))?.toUpperCase();
344
+ // iReckon(sir, calculatedGib_ts).asTo(`calculatedGib_ts for s3 (from sha256v1 call)`).isGonnaBe(expected_gib_s3);
345
+ // });
346
+
347
+ // skipping because this is not a valid ibgib and I'm trying to understand
348
+ // how to work with Jules (Google's GitHub agent)
349
+ // await ifWe(sir, `Edge Case 4: data contains a list with dictionaries, where inner dicts have null values`, async () => {
350
+ // const ibGib_s4: IbGib_V1 = {
351
+ // ib: 's4',
352
+ // data: { items: [{ id: 1, val: null, name: 'item1' }, { id: 2, val: 'present' }] }
353
+ // };
354
+
355
+ // const expected_ib_hash_s4 = "5B840157E7E86AEF3B3FD0FC24F3ADD34D3E7F210370D429475ED1BCD3E7FCA2";
356
+ // const expected_data_hash_s4 = "2682A15F60291F933B57EE14F0A3D5FD233FC90B3FF1ADD5FD473F859FA6B287";
357
+ // const expected_gib_s4 = "2AE26C6F9A4D53CE32A0A1792E59F34126A25503CE33728EA7CB8A38E29DD0BF";
358
+
359
+ // const ibHash_ts = (await hashToHexCopy(ibGib_s4.ib!))?.toUpperCase() || '';
360
+ // iReckon(sir, ibHash_ts).asTo(`ibHash_ts for s4`).isGonnaBe(expected_ib_hash_s4);
361
+
362
+ // const normalizedData_ts = toNormalizedForHashing(ibGib_s4.data);
363
+ // const stringifiedData_ts = JSON.stringify(normalizedData_ts);
364
+ // const actualDataHash_ts = (await hashToHexCopy(stringifiedData_ts))?.toUpperCase() || '';
365
+ // iReckon(sir, actualDataHash_ts).asTo(`actualDataHash_ts for s4`).isGonnaBe(expected_data_hash_s4);
366
+
367
+ // const actualRel8nsHash_ts = EMPTY_HASH_FOR_ABSENT_FIELD;
368
+ // const combinedSource_manual_ts = ibHash_ts + actualRel8nsHash_ts + actualDataHash_ts;
369
+ // const manualGib_ts = (await hashToHexCopy(combinedSource_manual_ts))?.toUpperCase() || '';
370
+ // iReckon(sir, manualGib_ts).asTo(`manualGib_ts for s4 (from py test logic)`).isGonnaBe(expected_gib_s4);
371
+
372
+ // const calculatedGib_ts = (await sha256v1(ibGib_s4, ""))?.toUpperCase();
373
+ // iReckon(sir, calculatedGib_ts).asTo(`calculatedGib_ts for s4 (from sha256v1 call)`).isGonnaBe(expected_gib_s4);
374
+ // });
375
+
376
+ await ifWe(sir, `Edge Case 5: data key order vs. rel8ns key order`, async () => {
377
+ const ibGib_s5: IbGib_V1 = {
378
+ ib: 's5',
379
+ data: { z: 1, a: 2 },
380
+ rel8ns: { z_rel: ['z1'], a_rel: ['a1'] }
381
+ };
382
+
383
+ const expected_ib_hash_s5 = "3B96FC064FA874A80A132BDA60BEBF54EFBC780A358FDCAE4FBBD7E12B66B630";
384
+ const expected_data_hash_s5 = "C2985C5BA6F7D2A55E768F92490CA09388E95BC4CCCB9FDF11B15F4D42F93E73";
385
+ const expected_rel8ns_hash_s5 = "3C0705B51593C740738A0BFB4D9030C8A8093D8A6049346E823CD033BAAA09E5";
386
+ const expected_gib_s5 = "7AC6FB16BC853C6AE7D375ECEEA810ABB6F60241A1679ADEE4DC6ED4E29BE74A";
387
+
388
+ const ibHash_ts = (await hashToHexCopy(ibGib_s5.ib!))?.toUpperCase() || '';
389
+ iReckon(sir, ibHash_ts).asTo(`ibHash_ts for s5`).isGonnaBe(expected_ib_hash_s5);
390
+
391
+ const normalizedData_ts = toNormalizedForHashing(ibGib_s5.data);
392
+ const stringifiedData_ts = JSON.stringify(normalizedData_ts);
393
+ const actualDataHash_ts = (await hashToHexCopy(stringifiedData_ts))?.toUpperCase() || '';
394
+ iReckon(sir, actualDataHash_ts).asTo(`actualDataHash_ts for s5`).isGonnaBe(expected_data_hash_s5);
395
+
396
+ const normalizedRel8ns_ts = toNormalizedForHashing(ibGib_s5.rel8ns);
397
+ const stringifiedRel8ns_ts = JSON.stringify(normalizedRel8ns_ts);
398
+ const actualRel8nsHash_ts = (await hashToHexCopy(stringifiedRel8ns_ts))?.toUpperCase() || '';
399
+ iReckon(sir, actualRel8nsHash_ts).asTo(`actualRel8nsHash_ts for s5`).isGonnaBe(expected_rel8ns_hash_s5);
400
+
401
+ const combinedSource_manual_ts = ibHash_ts + actualRel8nsHash_ts + actualDataHash_ts;
402
+ const manualGib_ts = (await hashToHexCopy(combinedSource_manual_ts))?.toUpperCase() || '';
403
+ iReckon(sir, manualGib_ts).asTo(`manualGib_ts for s5 (from py test logic)`).isGonnaBe(expected_gib_s5);
404
+
405
+ const calculatedGib_ts = (await sha256v1(ibGib_s5, ""))?.toUpperCase();
406
+ iReckon(sir, calculatedGib_ts).asTo(`calculatedGib_ts for s5 (from sha256v1 call)`).isGonnaBe(expected_gib_s5);
407
+ });
408
+
409
+ // skipping because this is not a valid ibgib and I'm trying to understand
410
+ // how to work with Jules (Google's GitHub agent)
411
+ // await ifWe(sir, `Edge Case 6: data with special characters in string values and keys`, async () => {
412
+ // const ibGib_s6: IbGib_V1 = {
413
+ // ib: 's6',
414
+ // data: { 'key "1"': 'value with "quotes" and \n newline', 'key_ñ': 'val_ü' }
415
+ // };
416
+
417
+ // const expected_ib_hash_s6 = "71E7690959239CA065841EBA3EBB281072BAA78BA0BB31079B9ACB4A009A9FE3";
418
+ // const expected_data_hash_s6 = "441200D475E6171CD94518A7AD358C29281DBD962163EE7F1B309058098CECE7";
419
+ // const expected_gib_s6 = "9AF9BE9284CFCE565CBFD482EA0797E0D67CCD0AEDF6509BCEA3B9D4D00931BF";
420
+
421
+ // const ibHash_ts = (await hashToHexCopy(ibGib_s6.ib!))?.toUpperCase() || '';
422
+ // iReckon(sir, ibHash_ts).asTo(`ibHash_ts for s6`).isGonnaBe(expected_ib_hash_s6);
423
+
424
+ // const normalizedData_ts = toNormalizedForHashing(ibGib_s6.data);
425
+ // const stringifiedData_ts = JSON.stringify(normalizedData_ts);
426
+ // const actualDataHash_ts = (await hashToHexCopy(stringifiedData_ts))?.toUpperCase() || '';
427
+ // iReckon(sir, actualDataHash_ts).asTo(`actualDataHash_ts for s6`).isGonnaBe(expected_data_hash_s6);
428
+
429
+ // const actualRel8nsHash_ts = EMPTY_HASH_FOR_ABSENT_FIELD;
430
+ // const combinedSource_manual_ts = ibHash_ts + actualRel8nsHash_ts + actualDataHash_ts;
431
+ // const manualGib_ts = (await hashToHexCopy(combinedSource_manual_ts))?.toUpperCase() || '';
432
+ // iReckon(sir, manualGib_ts).asTo(`manualGib_ts for s6 (from py test logic)`).isGonnaBe(expected_gib_s6);
433
+
434
+ // const calculatedGib_ts = (await sha256v1(ibGib_s6, ""))?.toUpperCase();
435
+ // iReckon(sir, calculatedGib_ts).asTo(`calculatedGib_ts for s6 (from sha256v1 call)`).isGonnaBe(expected_gib_s6);
436
+ // });
437
+
438
+ await ifWe(sir, `Edge Case 7a: data is a primitive type (boolean True)`, async () => {
439
+ const ibGib_s7a: IbGib_V1 = { ib: 's7a', data: true as any };
440
+
441
+ const expected_ib_hash_s7a = "612A9EB864ED62C258BDCB155F13F590879BA34AD30DDE91CB9BE38139439E9F";
442
+ const expected_data_hash_s7a = "B5BEA41B6C623F7C09F1BF24DCAE58EBAB3C0CDD90AD966BC43A45B44867E12B";
443
+ const expected_gib_s7a = "53BBABB9F24C75E3C6037D744C241AF710B6E886C22398537AA9332D5626D022";
444
+
445
+ const ibHash_ts = (await hashToHexCopy(ibGib_s7a.ib!))?.toUpperCase() || '';
446
+ iReckon(sir, ibHash_ts).asTo(`ibHash_ts for s7a`).isGonnaBe(expected_ib_hash_s7a);
447
+
448
+ const normalizedData_ts = toNormalizedForHashing(ibGib_s7a.data);
449
+ const stringifiedData_ts = JSON.stringify(normalizedData_ts);
450
+ const actualDataHash_ts = (await hashToHexCopy(stringifiedData_ts))?.toUpperCase() || '';
451
+ iReckon(sir, actualDataHash_ts).asTo(`actualDataHash_ts for s7a`).isGonnaBe(expected_data_hash_s7a);
452
+
453
+ const actualRel8nsHash_ts = EMPTY_HASH_FOR_ABSENT_FIELD;
454
+ const combinedSource_manual_ts = ibHash_ts + actualRel8nsHash_ts + actualDataHash_ts;
455
+ const manualGib_ts = (await hashToHexCopy(combinedSource_manual_ts))?.toUpperCase() || '';
456
+ iReckon(sir, manualGib_ts).asTo(`manualGib_ts for s7a (from py test logic)`).isGonnaBe(expected_gib_s7a);
457
+
458
+ const calculatedGib_ts = (await sha256v1(ibGib_s7a, ""))?.toUpperCase();
459
+ iReckon(sir, calculatedGib_ts).asTo(`calculatedGib_ts for s7a (from sha256v1 call)`).isGonnaBe(expected_gib_s7a);
460
+ });
461
+
462
+ await ifWe(sir, `Edge Case 7b: data is a primitive type (number)`, async () => {
463
+ const ibGib_s7b: IbGib_V1 = { ib: 's7b', data: 123.45 as any };
464
+
465
+ const expected_ib_hash_s7b = "70348C184BB7E09344EEEE0BA0A766D1DB6C1B1E02520A6534C94F78591EBA46";
466
+ const expected_data_hash_s7b = "4EBC4A141B378980461430980948A55988FBF56F85D084AC33D8A8F61B9FAB88";
467
+ const expected_gib_s7b = "F81D2861750A638FBE6F792D66A8EE2408C5F5CB965755166957C46B1B242F41";
468
+
469
+ const ibHash_ts = (await hashToHexCopy(ibGib_s7b.ib!))?.toUpperCase() || '';
470
+ iReckon(sir, ibHash_ts).asTo(`ibHash_ts for s7b`).isGonnaBe(expected_ib_hash_s7b);
471
+
472
+ const normalizedData_ts = toNormalizedForHashing(ibGib_s7b.data);
473
+ const stringifiedData_ts = JSON.stringify(normalizedData_ts);
474
+ const actualDataHash_ts = (await hashToHexCopy(stringifiedData_ts))?.toUpperCase() || '';
475
+ iReckon(sir, actualDataHash_ts).asTo(`actualDataHash_ts for s7b`).isGonnaBe(expected_data_hash_s7b);
476
+
477
+ const actualRel8nsHash_ts = EMPTY_HASH_FOR_ABSENT_FIELD;
478
+ const combinedSource_manual_ts = ibHash_ts + actualRel8nsHash_ts + actualDataHash_ts;
479
+ const manualGib_ts = (await hashToHexCopy(combinedSource_manual_ts))?.toUpperCase() || '';
480
+ iReckon(sir, manualGib_ts).asTo(`manualGib_ts for s7b (from py test logic)`).isGonnaBe(expected_gib_s7b);
481
+
482
+ const calculatedGib_ts = (await sha256v1(ibGib_s7b, ""))?.toUpperCase();
483
+ iReckon(sir, calculatedGib_ts).asTo(`calculatedGib_ts for s7b (from sha256v1 call)`).isGonnaBe(expected_gib_s7b);
484
+ });
485
+
486
+ await ifWe(sir, `Edge Case 8: rel8ns with some relations being empty lists, others non-empty`, async () => {
487
+ const ibGib_s8: IbGib_V1 = {
488
+ ib: 's8',
489
+ rel8ns: { past: [], future: ['addr1'], empty_too: [] }
490
+ };
491
+
492
+ const expected_ib_hash_s8 = "1CB7637B6957AC5D6F6CDEC745554AFD3CD1537BB6E7A8E74D41C2EA58B89E97";
493
+ const expected_rel8ns_hash_s8 = "A98E517BB1289561B164706289F2CCE1423EA9ABCA11FC35BFFD4E0817224760";
494
+ const expected_gib_s8 = "EE653CEE56759A6C868A485582E4E66C8B57DFBE1C55CF36BDBF237BF5C09CF8";
495
+
496
+ const ibHash_ts = (await hashToHexCopy(ibGib_s8.ib!))?.toUpperCase() || '';
497
+ iReckon(sir, ibHash_ts).asTo(`ibHash_ts for s8`).isGonnaBe(expected_ib_hash_s8);
498
+
499
+ const normalizedRel8ns_ts = toNormalizedForHashing(ibGib_s8.rel8ns);
500
+ const stringifiedRel8ns_ts = JSON.stringify(normalizedRel8ns_ts);
501
+ const actualRel8nsHash_ts = (await hashToHexCopy(stringifiedRel8ns_ts))?.toUpperCase() || '';
502
+ iReckon(sir, actualRel8nsHash_ts).asTo(`actualRel8nsHash_ts for s8`).isGonnaBe(expected_rel8ns_hash_s8);
503
+
504
+ const actualDataHash_ts = EMPTY_HASH_FOR_ABSENT_FIELD;
505
+ const combinedSource_manual_ts = ibHash_ts + actualRel8nsHash_ts + actualDataHash_ts;
506
+ const manualGib_ts = (await hashToHexCopy(combinedSource_manual_ts))?.toUpperCase() || '';
507
+ iReckon(sir, manualGib_ts).asTo(`manualGib_ts for s8 (from py test logic)`).isGonnaBe(expected_gib_s8);
508
+
509
+ const calculatedGib_ts = (await sha256v1(ibGib_s8, ""))?.toUpperCase();
510
+ iReckon(sir, calculatedGib_ts).asTo(`calculatedGib_ts for s8 (from sha256v1 call)`).isGonnaBe(expected_gib_s8);
511
+ });
512
+
513
+ await ifWe(sir, `Edge Case 9: Deeply nested data with mixed undefined/null, lists, and dicts`, async () => {
514
+ const ibGib_s9: IbGib_V1 = {
515
+ ib: 's9',
516
+ data: { level1: { l2_val: 'v2', l2_none: undefined, l2_list: [1, { l3_none: null, l3_val: 'v3' }, 3] } }
517
+ };
518
+
519
+ const expected_ib_hash_s9 = "E72D310DBB213F4C2E34DA28935B38905332EE3628A04DF2DD13859FD769C6C5";
520
+ const expected_data_hash_s9 = "F8C3EF9BFBB9D927B55B3BA1FAAECAD1B35FA9B912AEAF9B75A807DA814CB975";
521
+ const expected_gib_s9 = "DB2F3306E2E91F22B0C7B10787760D0FE25BA79B7E3DFFE38164381EA06BE6A6";
522
+
523
+ const ibHash_ts = (await hashToHexCopy(ibGib_s9.ib!))?.toUpperCase() || '';
524
+ iReckon(sir, ibHash_ts).asTo(`ibHash_ts for s9`).isGonnaBe(expected_ib_hash_s9);
525
+
526
+ const normalizedData_ts = toNormalizedForHashing(ibGib_s9.data);
527
+ const stringifiedData_ts = JSON.stringify(normalizedData_ts);
528
+ const actualDataHash_ts = (await hashToHexCopy(stringifiedData_ts))?.toUpperCase() || '';
529
+ iReckon(sir, actualDataHash_ts).asTo(`actualDataHash_ts for s9`).isGonnaBe(expected_data_hash_s9);
530
+
531
+ const actualRel8nsHash_ts = EMPTY_HASH_FOR_ABSENT_FIELD;
532
+ const combinedSource_manual_ts = ibHash_ts + actualRel8nsHash_ts + actualDataHash_ts;
533
+ const manualGib_ts = (await hashToHexCopy(combinedSource_manual_ts))?.toUpperCase() || '';
534
+ iReckon(sir, manualGib_ts).asTo(`manualGib_ts for s9 (from py test logic)`).isGonnaBe(expected_gib_s9);
535
+
536
+ const calculatedGib_ts = (await sha256v1(ibGib_s9, ""))?.toUpperCase();
537
+ iReckon(sir, calculatedGib_ts).asTo(`calculatedGib_ts for s9 (from sha256v1 call)`).isGonnaBe(expected_gib_s9);
538
+ });
539
+
540
+ await ifWe(sir, `Edge Case 10a: ibgib with data but no rel8ns key`, async () => {
541
+ const ibGib_s10a: IbGib_V1 = { ib: 's10a', data: { k: 'v' } };
542
+
543
+ const expected_ib_hash_s10a = "7674836E2F8926A8F0BE7998ABB44BACBC041BC51AF761F85E09A1349C60046C";
544
+ const expected_data_hash_s10a = "666C1AA02E8068C6D5CC1D3295009432C16790BEC28EC8CE119D0D1A18D61319";
545
+ const expected_gib_s10a = "81C655EDEC7294CC0900430ED8EE0125EFF15C2F86EAF047C0E8FEFE0D4569E8";
546
+
547
+ const ibHash_ts = (await hashToHexCopy(ibGib_s10a.ib!))?.toUpperCase() || '';
548
+ iReckon(sir, ibHash_ts).asTo(`ibHash_ts for s10a`).isGonnaBe(expected_ib_hash_s10a);
549
+
550
+ const normalizedData_ts = toNormalizedForHashing(ibGib_s10a.data);
551
+ const stringifiedData_ts = JSON.stringify(normalizedData_ts);
552
+ const actualDataHash_ts = (await hashToHexCopy(stringifiedData_ts))?.toUpperCase() || '';
553
+ iReckon(sir, actualDataHash_ts).asTo(`actualDataHash_ts for s10a`).isGonnaBe(expected_data_hash_s10a);
554
+
555
+ const actualRel8nsHash_ts = EMPTY_HASH_FOR_ABSENT_FIELD;
556
+ // Manual final gib construction based on Python test logic: hash(ib_hash + "" + data_hash)
557
+ const combinedSource_manual_ts = ibHash_ts + actualRel8nsHash_ts + actualDataHash_ts;
558
+ const manualGib_ts = (await hashToHexCopy(combinedSource_manual_ts))?.toUpperCase() || '';
559
+ iReckon(sir, manualGib_ts).asTo(`manualGib_ts for s10a (from py test logic)`).isGonnaBe(expected_gib_s10a);
560
+
561
+ const calculatedGib_ts = (await sha256v1(ibGib_s10a, ""))?.toUpperCase();
562
+ iReckon(sir, calculatedGib_ts).asTo(`calculatedGib_ts for s10a (from sha256v1 call)`).isGonnaBe(expected_gib_s10a);
563
+ });
564
+
565
+ await ifWe(sir, `Edge Case 10b: ibgib with rel8ns but no data key`, async () => {
566
+ const ibGib_s10b: IbGib_V1 = { ib: 's10b', rel8ns: { r: ['a'] } };
567
+
568
+ const expected_ib_hash_s10b = "BF2FDA41B9B401E5F86577387D6C97FCA6AB3F7A4222735C42390B587AC8517D";
569
+ const expected_rel8ns_hash_s10b = "8A47C0659C530ACE4A79B55DE042782ABDFCC89848CDDB71260132B1FFE554AF";
570
+ const expected_gib_s10b = "F35416C53D3683B60C2EE46DD1542A2A1D957F70D991D8DDEDC8C03715ED0DEA";
571
+
572
+ const ibHash_ts = (await hashToHexCopy(ibGib_s10b.ib!))?.toUpperCase() || '';
573
+ iReckon(sir, ibHash_ts).asTo(`ibHash_ts for s10b`).isGonnaBe(expected_ib_hash_s10b);
574
+
575
+ const normalizedRel8ns_ts = toNormalizedForHashing(ibGib_s10b.rel8ns);
576
+ const stringifiedRel8ns_ts = JSON.stringify(normalizedRel8ns_ts);
577
+ const actualRel8nsHash_ts = (await hashToHexCopy(stringifiedRel8ns_ts))?.toUpperCase() || '';
578
+ iReckon(sir, actualRel8nsHash_ts).asTo(`actualRel8nsHash_ts for s10b`).isGonnaBe(expected_rel8ns_hash_s10b);
579
+
580
+ const actualDataHash_ts = EMPTY_HASH_FOR_ABSENT_FIELD;
581
+ // Manual final gib construction based on Python test logic: hash(ib_hash + rel8ns_hash + "")
582
+ const combinedSource_manual_ts = ibHash_ts + actualRel8nsHash_ts + actualDataHash_ts;
583
+ const manualGib_ts = (await hashToHexCopy(combinedSource_manual_ts))?.toUpperCase() || '';
584
+ iReckon(sir, manualGib_ts).asTo(`manualGib_ts for s10b (from py test logic)`).isGonnaBe(expected_gib_s10b);
585
+
586
+ const calculatedGib_ts = (await sha256v1(ibGib_s10b, ""))?.toUpperCase();
587
+ iReckon(sir, calculatedGib_ts).asTo(`calculatedGib_ts for s10b (from sha256v1 call)`).isGonnaBe(expected_gib_s10b);
588
+ });
589
+
590
+ });
@@ -57,6 +57,7 @@ export async function fork(opts: TransformOpts_Fork<IbGib_V1>): Promise<Transfor
57
57
  cloneRel8ns && src.rel8ns && Object.keys(src.rel8ns).length > 0 ?
58
58
  clone(src.rel8ns) :
59
59
  {};
60
+ delete rel8ns.past;
60
61
  const data: any = cloneData && src?.data ? clone(src!.data) : {};
61
62
  if (opts.nCounter) { data.n = 0; }
62
63
  const ancestor = linkedRel8ns?.includes(Rel8n.ancestor) ?
@@ -29,7 +29,7 @@ import { IbGib_V1, IbGibRel8ns_V1, Rel8n } from '../types.mjs';
29
29
  import { fork } from './fork.mjs';
30
30
  import { TransformOpts_Fork, IbGibAddr, Ib, TransformResult } from '../../types.mjs';
31
31
  import { getIbGibAddr, toNormalizedForHashing } from '../../helper.mjs';
32
- import { ROOT, } from '../constants.mjs';
32
+ import { GIB, ROOT, ROOT_ADDR, } from '../constants.mjs';
33
33
  import { mut8 } from './mut8.mjs';
34
34
  import { getGib } from './transform-helper.mjs';
35
35
 
@@ -54,6 +54,7 @@ await respecfully(sir, `when forking the root`, async () => {
54
54
  iReckon(sir, newIbGib.data!.timestamp).isGonnaBeUndefined();
55
55
  } else {
56
56
  // data being falsy is passing so no expect statement needed
57
+ iReckon(sir, true).isGonnaBeTrue();
57
58
  }
58
59
  });
59
60
 
@@ -229,6 +230,45 @@ await respecfully(sir, `when forking a regular ibgib`, async () => {
229
230
  iReckon(sir, newIbGib?.rel8ns!.ancestor![0]).isGonnaBe(srcAddr);
230
231
  });
231
232
 
233
+ await ifWe(sir, `cloneRel8ns but not past`, async () => {
234
+ // this is to enforce our line that deletes the past even when
235
+ // cloneRel8ns is true. I can't believe I didn't have this implemented
236
+ // earlier! hmm...
237
+ // here is the added line: `delete rel8ns.past;`
238
+ const testIb = 'fork_test yo';
239
+ const testGib = GIB;
240
+ const testData = { x: 1, y: 2, deeper: { zzz: 333 } };
241
+ const rel8dAddrs_past = ["0^gib", "1^gib", "2^gib"];
242
+ const rel8dAddrs_test = ["a^gib", "b^gib", "c^gib"];
243
+ const testRel8ns: IbGibRel8ns_V1 = {
244
+ ancestor: [ROOT_ADDR],
245
+ past: rel8dAddrs_past,
246
+ test: rel8dAddrs_test,
247
+ }
248
+ const testIbGibWithRel8ns: IbGib_V1 = {
249
+ ib: testIb,
250
+ gib: testGib,
251
+ rel8ns: testRel8ns,
252
+ data: testData,
253
+ };
254
+ const testIbGibAddr = getIbGibAddr({ ibGib: testIbGibWithRel8ns });
255
+ const { newIbGib } = await fork({
256
+ src: testIbGibWithRel8ns,
257
+ cloneData: true,
258
+ cloneRel8ns: true,
259
+ dna: true,
260
+ nCounter: true,
261
+ tjp: { timestamp: true, uuid: true },
262
+ });
263
+
264
+ const expectedRel8ns_ancestor = [ROOT_ADDR, testIbGibAddr];
265
+
266
+ iReckon(maam, newIbGib).isGonnaBeTruthy();
267
+ iReckon(maam, newIbGib!.rel8ns).asTo('should have rel8ns').isGonnaBeTruthy();
268
+ iReckon(maam, newIbGib!.rel8ns!.ancestor).asTo('ancestor is as expected').isGonnaBe(expectedRel8ns_ancestor);
269
+ iReckon(maam, newIbGib!.rel8ns!.test).asTo('test rel8dAddrs is as expected (unchanged)').isGonnaBe(rel8dAddrs_test);
270
+ iReckon(maam, newIbGib!.rel8ns!.past).asTo('undefined past').isGonnaBeUndefined();
271
+ });
232
272
  // TODO: TEST FORK cloneRel8ns option ONCE REL8 IS IMPLEMENTED
233
273
  // it(`cloneRel8ns`, async () => {
234
274
  // const testData = {x: 1, y: 2, deeper: { zzz: 333 }};
package/src/helper.mts CHANGED
@@ -75,38 +75,50 @@ export function getIbAndGib({
75
75
  }
76
76
  }
77
77
 
78
+
78
79
  /**
79
- * normalizes via sorting keys and removing values that are undefined.
80
- * values that are null or empty strings are not removed.
80
+ * Normalizes an object/value for consistent hashing.
81
+ * - Recursively processes objects and arrays.
82
+ * - For objects:
83
+ * - Sorts keys alphabetically.
84
+ * - Removes properties whose values are `undefined`.
85
+ * - Keeps properties whose values are `null`.
86
+ * - For arrays:
87
+ * - Preserves element order.
88
+ * - Recursively normalizes each element.
89
+ * - Primitives (strings, numbers, booleans) and `null` are returned as is.
81
90
  *
82
- * this is DUPLICATED code in the respec file. any changes here must
83
- * manually be changed in the respec file!!!
91
+ * @param value The value to normalize.
92
+ * @returns The normalized value.
84
93
  *
85
- * @param obj to normalize (is not changed, e.g. keys aren't sorted in place)
94
+ * This has been adjusted due to conversation with Gemini and working on python
95
+ * port. The main thing here is that we normalize array members, but not the
96
+ * array itself. This way the array's order is preserved, but any object members
97
+ * are themselves normalized.
86
98
  */
87
- export function toNormalizedForHashing(obj: any): any {
88
- if (!obj) {
89
- return obj; /* <<<< returns early */
90
- } else if (typeof obj === 'string' || Array.isArray(obj)) {
91
- return obj.concat(); /* <<<< returns early */
92
- } else if (typeof obj !== 'object') {
93
- // Return non-objects as is, we don't know how to concat/copy it...hmm...
94
- return obj; /* <<<< returns early */
99
+ export function toNormalizedForHashing(value: any): any {
100
+ // Handle null, primitives (string, number, boolean) directly.
101
+ // `undefined` at the top level will be handled by the caller or become part of an object/array.
102
+ if (value === null || typeof value !== 'object') {
103
+ return value;
95
104
  }
96
105
 
97
- // we have an object. we will create a new object and populate it.
98
- const normalized = {};
106
+ // Handle Arrays: recursively normalize elements, preserve order
107
+ if (Array.isArray(value)) {
108
+ return value.map(element => toNormalizedForHashing(element));
109
+ }
99
110
 
100
- // sort keys alphabetically
101
- // NOTE: this does NOT mutate obj as Object.keys produces a new array
102
- const keys = Object.keys(obj).sort();
111
+ // Handle Objects (plain objects)
112
+ const normalizedObject: { [key: string]: any } = {};
113
+ const sortedKeys = Object.keys(value).sort();
103
114
 
104
- for (const key of keys) {
105
- const value = obj[key];
106
- if (value !== undefined) {
107
- // Recursively normalize if the value is an object
108
- normalized[key] = (typeof value === 'object' && value !== null) ? toNormalizedForHashing(value) : value;
115
+ for (const key of sortedKeys) {
116
+ const propertyValue = value[key];
117
+ if (propertyValue !== undefined) { // CRITICAL: Only omit if value is undefined
118
+ normalizedObject[key] = toNormalizedForHashing(propertyValue);
109
119
  }
120
+ // If propertyValue is undefined, it's omitted from normalizedObject.
121
+ // If propertyValue is null, it's included.
110
122
  }
111
- return normalized;
123
+ return normalizedObject;
112
124
  }