@ibgib/vcs-gib 0.0.6

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 (202) hide show
  1. package/README.md +94 -0
  2. package/VCS_CLI_USER_GUIDE.md +198 -0
  3. package/dist/AUTO-GENERATED-version.d.mts +6 -0
  4. package/dist/AUTO-GENERATED-version.d.mts.map +1 -0
  5. package/dist/AUTO-GENERATED-version.mjs +6 -0
  6. package/dist/AUTO-GENERATED-version.mjs.map +1 -0
  7. package/dist/assumptions.respec.d.mts +2 -0
  8. package/dist/assumptions.respec.d.mts.map +1 -0
  9. package/dist/assumptions.respec.mjs +41 -0
  10. package/dist/assumptions.respec.mjs.map +1 -0
  11. package/dist/bootstrap/node-bootstrap.d.mts +35 -0
  12. package/dist/bootstrap/node-bootstrap.d.mts.map +1 -0
  13. package/dist/bootstrap/node-bootstrap.mjs +165 -0
  14. package/dist/bootstrap/node-bootstrap.mjs.map +1 -0
  15. package/dist/bootstrap/node-bootstrap.respec.node.d.mts +7 -0
  16. package/dist/bootstrap/node-bootstrap.respec.node.d.mts.map +1 -0
  17. package/dist/bootstrap/node-bootstrap.respec.node.mjs +28 -0
  18. package/dist/bootstrap/node-bootstrap.respec.node.mjs.map +1 -0
  19. package/dist/cli/cli-arg-parser.d.mts +27 -0
  20. package/dist/cli/cli-arg-parser.d.mts.map +1 -0
  21. package/dist/cli/cli-arg-parser.mjs +96 -0
  22. package/dist/cli/cli-arg-parser.mjs.map +1 -0
  23. package/dist/cli/cli-arg-parser.respec.node.d.mts +7 -0
  24. package/dist/cli/cli-arg-parser.respec.node.d.mts.map +1 -0
  25. package/dist/cli/cli-arg-parser.respec.node.mjs +35 -0
  26. package/dist/cli/cli-arg-parser.respec.node.mjs.map +1 -0
  27. package/dist/cli/cli-constants.d.mts +26 -0
  28. package/dist/cli/cli-constants.d.mts.map +1 -0
  29. package/dist/cli/cli-constants.mjs +67 -0
  30. package/dist/cli/cli-constants.mjs.map +1 -0
  31. package/dist/cli/cli-e2e.respec.node.d.mts +8 -0
  32. package/dist/cli/cli-e2e.respec.node.d.mts.map +1 -0
  33. package/dist/cli/cli-e2e.respec.node.mjs +263 -0
  34. package/dist/cli/cli-e2e.respec.node.mjs.map +1 -0
  35. package/dist/cli/commands/add-cmd.d.mts +20 -0
  36. package/dist/cli/commands/add-cmd.d.mts.map +1 -0
  37. package/dist/cli/commands/add-cmd.mjs +333 -0
  38. package/dist/cli/commands/add-cmd.mjs.map +1 -0
  39. package/dist/cli/commands/branch-checkout-cmd.respec.node.d.mts +7 -0
  40. package/dist/cli/commands/branch-checkout-cmd.respec.node.d.mts.map +1 -0
  41. package/dist/cli/commands/branch-checkout-cmd.respec.node.mjs +288 -0
  42. package/dist/cli/commands/branch-checkout-cmd.respec.node.mjs.map +1 -0
  43. package/dist/cli/commands/branch-cmd.d.mts +25 -0
  44. package/dist/cli/commands/branch-cmd.d.mts.map +1 -0
  45. package/dist/cli/commands/branch-cmd.mjs +187 -0
  46. package/dist/cli/commands/branch-cmd.mjs.map +1 -0
  47. package/dist/cli/commands/checkout-cmd.d.mts +21 -0
  48. package/dist/cli/commands/checkout-cmd.d.mts.map +1 -0
  49. package/dist/cli/commands/checkout-cmd.mjs +154 -0
  50. package/dist/cli/commands/checkout-cmd.mjs.map +1 -0
  51. package/dist/cli/commands/commit-cmd.d.mts +23 -0
  52. package/dist/cli/commands/commit-cmd.d.mts.map +1 -0
  53. package/dist/cli/commands/commit-cmd.mjs +326 -0
  54. package/dist/cli/commands/commit-cmd.mjs.map +1 -0
  55. package/dist/cli/commands/commit-log-cmd.respec.node.d.mts +7 -0
  56. package/dist/cli/commands/commit-log-cmd.respec.node.d.mts.map +1 -0
  57. package/dist/cli/commands/commit-log-cmd.respec.node.mjs +251 -0
  58. package/dist/cli/commands/commit-log-cmd.respec.node.mjs.map +1 -0
  59. package/dist/cli/commands/init-cmd.d.mts +20 -0
  60. package/dist/cli/commands/init-cmd.d.mts.map +1 -0
  61. package/dist/cli/commands/init-cmd.mjs +119 -0
  62. package/dist/cli/commands/init-cmd.mjs.map +1 -0
  63. package/dist/cli/commands/init-cmd.respec.node.d.mts +7 -0
  64. package/dist/cli/commands/init-cmd.respec.node.d.mts.map +1 -0
  65. package/dist/cli/commands/init-cmd.respec.node.mjs +40 -0
  66. package/dist/cli/commands/init-cmd.respec.node.mjs.map +1 -0
  67. package/dist/cli/commands/log-cmd.d.mts +27 -0
  68. package/dist/cli/commands/log-cmd.d.mts.map +1 -0
  69. package/dist/cli/commands/log-cmd.mjs +146 -0
  70. package/dist/cli/commands/log-cmd.mjs.map +1 -0
  71. package/dist/cli/commands/status-add-cmd.respec.node.d.mts +7 -0
  72. package/dist/cli/commands/status-add-cmd.respec.node.d.mts.map +1 -0
  73. package/dist/cli/commands/status-add-cmd.respec.node.mjs +215 -0
  74. package/dist/cli/commands/status-add-cmd.respec.node.mjs.map +1 -0
  75. package/dist/cli/commands/status-cmd.d.mts +25 -0
  76. package/dist/cli/commands/status-cmd.d.mts.map +1 -0
  77. package/dist/cli/commands/status-cmd.mjs +286 -0
  78. package/dist/cli/commands/status-cmd.mjs.map +1 -0
  79. package/dist/cli/vcs-cli-main.d.mts +14 -0
  80. package/dist/cli/vcs-cli-main.d.mts.map +1 -0
  81. package/dist/cli/vcs-cli-main.mjs +136 -0
  82. package/dist/cli/vcs-cli-main.mjs.map +1 -0
  83. package/dist/engine/branch/branch-graph-helper.d.mts +19 -0
  84. package/dist/engine/branch/branch-graph-helper.d.mts.map +1 -0
  85. package/dist/engine/branch/branch-graph-helper.mjs +49 -0
  86. package/dist/engine/branch/branch-graph-helper.mjs.map +1 -0
  87. package/dist/engine/branch/branch-helper.d.mts +26 -0
  88. package/dist/engine/branch/branch-helper.d.mts.map +1 -0
  89. package/dist/engine/branch/branch-helper.mjs +57 -0
  90. package/dist/engine/branch/branch-helper.mjs.map +1 -0
  91. package/dist/engine/branch/branch-space-helper.d.mts +22 -0
  92. package/dist/engine/branch/branch-space-helper.d.mts.map +1 -0
  93. package/dist/engine/branch/branch-space-helper.mjs +77 -0
  94. package/dist/engine/branch/branch-space-helper.mjs.map +1 -0
  95. package/dist/engine/branch/branch-space.respec.node.d.mts +8 -0
  96. package/dist/engine/branch/branch-space.respec.node.d.mts.map +1 -0
  97. package/dist/engine/branch/branch-space.respec.node.mjs +138 -0
  98. package/dist/engine/branch/branch-space.respec.node.mjs.map +1 -0
  99. package/dist/engine/branch/branch-types.d.mts +26 -0
  100. package/dist/engine/branch/branch-types.d.mts.map +1 -0
  101. package/dist/engine/branch/branch-types.mjs +7 -0
  102. package/dist/engine/branch/branch-types.mjs.map +1 -0
  103. package/dist/engine/diff/line-diff-helper.d.mts +76 -0
  104. package/dist/engine/diff/line-diff-helper.d.mts.map +1 -0
  105. package/dist/engine/diff/line-diff-helper.mjs +144 -0
  106. package/dist/engine/diff/line-diff-helper.mjs.map +1 -0
  107. package/dist/engine/diff/line-diff-helper.respec.node.d.mts +7 -0
  108. package/dist/engine/diff/line-diff-helper.respec.node.d.mts.map +1 -0
  109. package/dist/engine/diff/line-diff-helper.respec.node.mjs +66 -0
  110. package/dist/engine/diff/line-diff-helper.respec.node.mjs.map +1 -0
  111. package/dist/engine/filter/glob-helper.d.mts +51 -0
  112. package/dist/engine/filter/glob-helper.d.mts.map +1 -0
  113. package/dist/engine/filter/glob-helper.mjs +132 -0
  114. package/dist/engine/filter/glob-helper.mjs.map +1 -0
  115. package/dist/engine/filter/glob-helper.respec.node.d.mts +7 -0
  116. package/dist/engine/filter/glob-helper.respec.node.d.mts.map +1 -0
  117. package/dist/engine/filter/glob-helper.respec.node.mjs +78 -0
  118. package/dist/engine/filter/glob-helper.respec.node.mjs.map +1 -0
  119. package/dist/engine/index/index-helper.d.mts +78 -0
  120. package/dist/engine/index/index-helper.d.mts.map +1 -0
  121. package/dist/engine/index/index-helper.mjs +289 -0
  122. package/dist/engine/index/index-helper.mjs.map +1 -0
  123. package/dist/engine/index/index-types.d.mts +63 -0
  124. package/dist/engine/index/index-types.d.mts.map +1 -0
  125. package/dist/engine/index/index-types.mjs +7 -0
  126. package/dist/engine/index/index-types.mjs.map +1 -0
  127. package/dist/engine/item/item-atom-helper.d.mts +20 -0
  128. package/dist/engine/item/item-atom-helper.d.mts.map +1 -0
  129. package/dist/engine/item/item-atom-helper.mjs +30 -0
  130. package/dist/engine/item/item-atom-helper.mjs.map +1 -0
  131. package/dist/engine/item/item-helper.d.mts +37 -0
  132. package/dist/engine/item/item-helper.d.mts.map +1 -0
  133. package/dist/engine/item/item-helper.mjs +194 -0
  134. package/dist/engine/item/item-helper.mjs.map +1 -0
  135. package/dist/engine/item/item-types.d.mts +127 -0
  136. package/dist/engine/item/item-types.d.mts.map +1 -0
  137. package/dist/engine/item/item-types.mjs +16 -0
  138. package/dist/engine/item/item-types.mjs.map +1 -0
  139. package/dist/index.d.mts +7 -0
  140. package/dist/index.d.mts.map +1 -0
  141. package/dist/index.mjs +7 -0
  142. package/dist/index.mjs.map +1 -0
  143. package/dist/respec-gib.node.d.mts +7 -0
  144. package/dist/respec-gib.node.d.mts.map +1 -0
  145. package/dist/respec-gib.node.mjs +11 -0
  146. package/dist/respec-gib.node.mjs.map +1 -0
  147. package/dist/vcs-gib-constants.d.mts +7 -0
  148. package/dist/vcs-gib-constants.d.mts.map +1 -0
  149. package/dist/vcs-gib-constants.mjs +7 -0
  150. package/dist/vcs-gib-constants.mjs.map +1 -0
  151. package/dist/vcs-gib.respec.node.d.mts +8 -0
  152. package/dist/vcs-gib.respec.node.d.mts.map +1 -0
  153. package/dist/vcs-gib.respec.node.mjs +82 -0
  154. package/dist/vcs-gib.respec.node.mjs.map +1 -0
  155. package/generate-version-file.js +20 -0
  156. package/package.json +28 -0
  157. package/src/AUTO-GENERATED-version.mts +5 -0
  158. package/src/assumptions.respec.mts +50 -0
  159. package/src/bootstrap/node-bootstrap.mts +198 -0
  160. package/src/bootstrap/node-bootstrap.respec.node.mts +35 -0
  161. package/src/cli/cli-arg-parser.mts +119 -0
  162. package/src/cli/cli-arg-parser.respec.node.mts +45 -0
  163. package/src/cli/cli-constants.mts +77 -0
  164. package/src/cli/cli-e2e.respec.node.mts +318 -0
  165. package/src/cli/commands/add-cmd.mts +415 -0
  166. package/src/cli/commands/branch-checkout-cmd.respec.node.mts +322 -0
  167. package/src/cli/commands/branch-cmd.mts +243 -0
  168. package/src/cli/commands/checkout-cmd.mts +202 -0
  169. package/src/cli/commands/commit-cmd.mts +421 -0
  170. package/src/cli/commands/commit-log-cmd.respec.node.mts +276 -0
  171. package/src/cli/commands/init-cmd.mts +152 -0
  172. package/src/cli/commands/init-cmd.respec.node.mts +49 -0
  173. package/src/cli/commands/log-cmd.mts +197 -0
  174. package/src/cli/commands/status-add-cmd.respec.node.mts +246 -0
  175. package/src/cli/commands/status-cmd.mts +366 -0
  176. package/src/cli/vcs-cli-main.mts +153 -0
  177. package/src/engine/branch/branch-graph-helper.mts +69 -0
  178. package/src/engine/branch/branch-helper.mts +79 -0
  179. package/src/engine/branch/branch-space-helper.mts +104 -0
  180. package/src/engine/branch/branch-space.respec.node.mts +158 -0
  181. package/src/engine/branch/branch-types.mts +29 -0
  182. package/src/engine/diff/line-diff-helper.mts +210 -0
  183. package/src/engine/diff/line-diff-helper.respec.node.mts +84 -0
  184. package/src/engine/filter/glob-helper.mts +165 -0
  185. package/src/engine/filter/glob-helper.respec.node.mts +94 -0
  186. package/src/engine/index/index-helper.mts +378 -0
  187. package/src/engine/index/index-types.mts +66 -0
  188. package/src/engine/item/item-atom-helper.mts +30 -0
  189. package/src/engine/item/item-helper.mts +239 -0
  190. package/src/engine/item/item-types.mts +136 -0
  191. package/src/index.mts +7 -0
  192. package/src/respec-gib.node.mts +12 -0
  193. package/src/vcs-gib-constants.mts +7 -0
  194. package/src/vcs-gib.respec.node.mts +96 -0
  195. package/test_runs/001-hello-node/20260728_090100_0001-flow-core-main.md +39 -0
  196. package/test_runs/001-hello-node/20260728_090200_0003-flow-branching-worktree.md +54 -0
  197. package/test_runs/001-hello-node/20260728_090300_0002-flow-selective-add.md +45 -0
  198. package/test_runs/001-hello-node/20260728_142100_0007-flow-edge-cases.md +44 -0
  199. package/test_runs/001-hello-node/20260728_142400_0005-flow-hardcoded-ignores.md +36 -0
  200. package/tools/pack-for-test.mjs +73 -0
  201. package/tsconfig.json +18 -0
  202. package/tsconfig.tsbuildinfo +1 -0
@@ -0,0 +1,22 @@
1
+ /**
2
+ * @module branch-space-helper
3
+ *
4
+ * Helper for managing dedicated branch spaces (`b2s_...`) in metaspace.
5
+ */
6
+ import { Metaspace_Nodespace } from '@ibgib/node-gib/dist/witness/space/metaspace/metaspace-nodespace/metaspace-nodespace.mjs';
7
+ import { NodeFilesystemSpace_V1 } from '@ibgib/node-gib/dist/witness/space/node-filesystem-space/node-filesystem-space-v1.mjs';
8
+ export interface GetOrCreateBranchSpaceOpts {
9
+ metaspace: Metaspace_Nodespace;
10
+ vcsPath: string;
11
+ branchName: string;
12
+ }
13
+ export interface GetOrCreateBranchSpaceResult {
14
+ space: NodeFilesystemSpace_V1;
15
+ spaceId: string;
16
+ spaceName: string;
17
+ }
18
+ /**
19
+ * Gets an existing branch space or creates and registers a new dedicated NodeFilesystemSpace_V1 in metaspace.
20
+ */
21
+ export declare function getOrCreateBranchSpace({ metaspace, vcsPath, branchName, }: GetOrCreateBranchSpaceOpts): Promise<GetOrCreateBranchSpaceResult>;
22
+ //# sourceMappingURL=branch-space-helper.d.mts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"branch-space-helper.d.mts","sourceRoot":"","sources":["../../../src/engine/branch/branch-space-helper.mts"],"names":[],"mappings":"AAAA;;;;GAIG;AAIH,OAAO,EAAE,mBAAmB,EAAE,MAAM,0FAA0F,CAAC;AAC/H,OAAO,EAAE,sBAAsB,EAAE,MAAM,uFAAuF,CAAC;AAU/H,MAAM,WAAW,0BAA0B;IACvC,SAAS,EAAE,mBAAmB,CAAC;IAC/B,OAAO,EAAE,MAAM,CAAC;IAChB,UAAU,EAAE,MAAM,CAAC;CACtB;AAED,MAAM,WAAW,4BAA4B;IACzC,KAAK,EAAE,sBAAsB,CAAC;IAC9B,OAAO,EAAE,MAAM,CAAC;IAChB,SAAS,EAAE,MAAM,CAAC;CACrB;AAED;;GAEG;AACH,wBAAsB,sBAAsB,CAAC,EACzC,SAAS,EACT,OAAO,EACP,UAAU,GACb,EAAE,0BAA0B,GAAG,OAAO,CAAC,4BAA4B,CAAC,CAiEpE"}
@@ -0,0 +1,77 @@
1
+ /**
2
+ * @module branch-space-helper
3
+ *
4
+ * Helper for managing dedicated branch spaces (`b2s_...`) in metaspace.
5
+ */
6
+ import { clone, extractErrorMsg, getUUID } from '@ibgib/helper-gib/dist/helpers/utils-helper.mjs';
7
+ import { getGib } from '@ibgib/ts-gib/dist/V1/transforms/transform-helper.mjs';
8
+ import { NodeFilesystemSpace_V1 } from '@ibgib/node-gib/dist/witness/space/node-filesystem-space/node-filesystem-space-v1.mjs';
9
+ import { DEFAULT_NODE_FILESYSTEM_SPACE_DATA_V1 } from '@ibgib/node-gib/dist/witness/space/node-filesystem-space/node-filesystem-space-types.mjs';
10
+ import { putInSpace } from '@ibgib/core-gib/dist/witness/space/space-helper.mjs';
11
+ import { GLOBAL_LOG_A_LOT } from '../../vcs-gib-constants.mjs';
12
+ import { getB2tFSBranchSpaceName } from './branch-helper.mjs';
13
+ const lcFile = `[branch-space-helper]`;
14
+ const logalot = GLOBAL_LOG_A_LOT;
15
+ /**
16
+ * Gets an existing branch space or creates and registers a new dedicated NodeFilesystemSpace_V1 in metaspace.
17
+ */
18
+ export async function getOrCreateBranchSpace({ metaspace, vcsPath, branchName, }) {
19
+ const lc = `${lcFile}[${getOrCreateBranchSpace.name}]`;
20
+ try {
21
+ if (logalot) {
22
+ console.log(`${lc} starting... (I: a1b2c3d4e5f60718293a4b5c6d7e8f9a)`);
23
+ }
24
+ if (!metaspace || !vcsPath || !branchName) {
25
+ throw new Error(`metaspace, vcsPath, and branchName are required (E: b2c3d4e5f60718293a4b5c6d7e8f9a0b)`);
26
+ }
27
+ const spaceName = getB2tFSBranchSpaceName(branchName);
28
+ const localSpaces = await metaspace.getLocalUserSpaces({ lock: false });
29
+ const existingSpace = localSpaces.find(s => s.data?.name === spaceName || s.ib === spaceName);
30
+ if (existingSpace) {
31
+ const spaceId = existingSpace.data?.uuid || existingSpace.data?.spaceId || spaceName;
32
+ if (logalot) {
33
+ console.log(`${lc} Found existing branch space ${spaceName} (spaceId: ${spaceId}) (I: c3d4e5f60718293a4b5c6d7e8f9a0b1c)`);
34
+ }
35
+ return {
36
+ space: existingSpace,
37
+ spaceId,
38
+ spaceName,
39
+ };
40
+ }
41
+ const spaceUuid = await getUUID();
42
+ const spaceData = {
43
+ ...clone(DEFAULT_NODE_FILESYSTEM_SPACE_DATA_V1),
44
+ uuid: spaceUuid,
45
+ isTjp: true,
46
+ name: spaceName,
47
+ baseDir: vcsPath,
48
+ spaceSubPath: spaceName,
49
+ };
50
+ const space = new NodeFilesystemSpace_V1(spaceData);
51
+ space.gib = await getGib({ ibGib: space, hasTjp: true });
52
+ await space.initialized;
53
+ await putInSpace({ space: metaspace.zeroSpace, ibGib: space });
54
+ await metaspace.registerNewIbGib({ ibGib: space });
55
+ if (metaspace.fnUpdateBootstrap) {
56
+ await metaspace.fnUpdateBootstrap(space);
57
+ }
58
+ if (logalot) {
59
+ console.log(`${lc} Created new branch space ${spaceName} (spaceId: ${spaceUuid}) (I: d4e5f60718293a4b5c6d7e8f9a0b1c2d)`);
60
+ }
61
+ return {
62
+ space,
63
+ spaceId: spaceUuid,
64
+ spaceName,
65
+ };
66
+ }
67
+ catch (error) {
68
+ console.error(`${lc} ${extractErrorMsg(error)} (E: e5f60718293a4b5c6d7e8f9a0b1c2d3e)`);
69
+ throw error;
70
+ }
71
+ finally {
72
+ if (logalot) {
73
+ console.log(`${lc} complete. (I: f60718293a4b5c6d7e8f9a0b1c2d3e4f)`);
74
+ }
75
+ }
76
+ }
77
+ //# sourceMappingURL=branch-space-helper.mjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"branch-space-helper.mjs","sourceRoot":"","sources":["../../../src/engine/branch/branch-space-helper.mts"],"names":[],"mappings":"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"}
@@ -0,0 +1,8 @@
1
+ /**
2
+ * @module branch-space.respec.node
3
+ *
4
+ * Unit tests for branch space helper, space-qualified address formatting/parsing,
5
+ * and graph population into branch spaces.
6
+ */
7
+ export {};
8
+ //# sourceMappingURL=branch-space.respec.node.d.mts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"branch-space.respec.node.d.mts","sourceRoot":"","sources":["../../../src/engine/branch/branch-space.respec.node.mts"],"names":[],"mappings":"AAAA;;;;;GAKG"}
@@ -0,0 +1,138 @@
1
+ /**
2
+ * @module branch-space.respec.node
3
+ *
4
+ * Unit tests for branch space helper, space-qualified address formatting/parsing,
5
+ * and graph population into branch spaces.
6
+ */
7
+ import path from 'node:path';
8
+ import fs from 'node:fs/promises';
9
+ import { respecfully, ifWe, iReckon } from '@ibgib/helper-gib/dist/respec-gib/respec-gib.mjs';
10
+ import { ROOT } from '@ibgib/ts-gib/dist/V1/constants.mjs';
11
+ import { Factory_V1 } from '@ibgib/ts-gib/dist/V1/factory.mjs';
12
+ import { getIbGibAddr } from '@ibgib/ts-gib/dist/helper.mjs';
13
+ import { getFromSpace, persistTransformResult } from '@ibgib/core-gib/dist/witness/space/space-helper.mjs';
14
+ import { bootstrapVcsMetaspace } from '../../bootstrap/node-bootstrap.mjs';
15
+ import { getB2tFSItemIb } from '../item/item-atom-helper.mjs';
16
+ import { getOrCreateBranchSpace } from './branch-space-helper.mjs';
17
+ import { populateBranchSpaceFromGraph } from './branch-graph-helper.mjs';
18
+ import { getSpaceQualifiedIbGibAddr, parseSpaceQualifiedIbGibAddr } from '../index/index-helper.mjs';
19
+ const lc = `[apps/vcs-gib/src/engine/branch/branch-space.respec.node.mts]`;
20
+ await respecfully(lc, `Branch Space & Graph Helper Respecs`, async () => {
21
+ await respecfully(lc, `Space-Qualified Address Parsing & Formatting`, async () => {
22
+ await ifWe(lc, `formats space-qualified address using options object`, async () => {
23
+ const sq = getSpaceQualifiedIbGibAddr({ spaceId: 'sp_alpha', ibGibAddr: 'item_a^gib123' });
24
+ iReckon(lc, sq).willEqual('v:1^spaceId:sp_alpha^item_a^gib123');
25
+ });
26
+ await ifWe(lc, `parses space-qualified address using options object`, async () => {
27
+ const parsed = parseSpaceQualifiedIbGibAddr({ spaceQualifiedAddr: 'v:1^spaceId:sp_alpha^item_a^gib123' });
28
+ iReckon(lc, parsed).isGonnaBeTruthy();
29
+ iReckon(lc, parsed.version).willEqual(1);
30
+ iReckon(lc, parsed.spaceId).willEqual('sp_alpha');
31
+ iReckon(lc, parsed.ibGibAddr).willEqual('item_a^gib123');
32
+ iReckon(lc, parsed.ib).willEqual('item_a');
33
+ iReckon(lc, parsed.gib).willEqual('gib123');
34
+ });
35
+ await ifWe(lc, `returns null for invalid space-qualified address string`, async () => {
36
+ const parsed = parseSpaceQualifiedIbGibAddr({ spaceQualifiedAddr: 'invalid_address_string' });
37
+ iReckon(lc, parsed).isGonnaBeFalsy();
38
+ });
39
+ });
40
+ await respecfully(lc, `Branch Space Lifecycle (getOrCreateBranchSpace)`, async () => {
41
+ await ifWe(lc, `creates a new dedicated branch space and retrieves existing space on second call`, async () => {
42
+ const testDir = path.join(process.cwd(), '.test_branch_space_repo');
43
+ try {
44
+ const { metaspace, vcsPath } = await bootstrapVcsMetaspace({
45
+ repoPath: testDir,
46
+ vcsFolderName: '.vcsgib_branch_test',
47
+ defaultSpaceName: 'test_space',
48
+ });
49
+ const branchName = 'feature_alpha';
50
+ const result1 = await getOrCreateBranchSpace({
51
+ metaspace,
52
+ vcsPath,
53
+ branchName,
54
+ });
55
+ iReckon(lc, result1.spaceName).willEqual('b2s_feature_alpha');
56
+ iReckon(lc, result1.spaceId).isGonnaBeTruthy();
57
+ iReckon(lc, result1.space).isGonnaBeTruthy();
58
+ const result2 = await getOrCreateBranchSpace({
59
+ metaspace,
60
+ vcsPath,
61
+ branchName,
62
+ });
63
+ iReckon(lc, result2.spaceName).willEqual('b2s_feature_alpha');
64
+ iReckon(lc, result2.spaceId).willEqual(result1.spaceId);
65
+ }
66
+ finally {
67
+ await fs.rm(testDir, { recursive: true, force: true });
68
+ }
69
+ });
70
+ });
71
+ await respecfully(lc, `Graph Population (populateBranchSpaceFromGraph)`, async () => {
72
+ await ifWe(lc, `populates target branch space with full dependency graph of root item`, async () => {
73
+ const testDir = path.join(process.cwd(), '.test_populate_graph_repo');
74
+ try {
75
+ const { metaspace, localSpace, vcsPath } = await bootstrapVcsMetaspace({
76
+ repoPath: testDir,
77
+ vcsFolderName: '.vcsgib_populate_test',
78
+ defaultSpaceName: 'test_space',
79
+ });
80
+ // Create child file item
81
+ const childRes = await Factory_V1.firstGen({
82
+ parentIbGib: ROOT,
83
+ ib: getB2tFSItemIb('file', 'file.txt', 'file_hash'),
84
+ data: {
85
+ name: 'file.txt',
86
+ nameHash: 'file_hash',
87
+ fsType: 'file',
88
+ diffTransactionId: 'tx_child',
89
+ },
90
+ });
91
+ const childItem = childRes.newIbGib;
92
+ const childAddr = getIbGibAddr({ ibGib: childItem });
93
+ await persistTransformResult({ resTransform: childRes, space: localSpace });
94
+ await metaspace.registerNewIbGib({ ibGib: childItem });
95
+ // Create root folder item referencing child
96
+ const rootRes = await Factory_V1.firstGen({
97
+ parentIbGib: ROOT,
98
+ ib: getB2tFSItemIb('folder', 'root', 'root_hash'),
99
+ data: {
100
+ name: 'root',
101
+ nameHash: 'root_hash',
102
+ fsType: 'folder',
103
+ diffTransactionId: 'tx_root',
104
+ },
105
+ rel8ns: {
106
+ b2tfs_item: [childAddr],
107
+ },
108
+ });
109
+ const rootItem = rootRes.newIbGib;
110
+ const rootAddr = getIbGibAddr({ ibGib: rootItem });
111
+ await persistTransformResult({ resTransform: rootRes, space: localSpace });
112
+ await metaspace.registerNewIbGib({ ibGib: rootItem });
113
+ // Create target branch space
114
+ const { space: targetBranchSpace } = await getOrCreateBranchSpace({
115
+ metaspace,
116
+ vcsPath,
117
+ branchName: 'main',
118
+ });
119
+ // Populate target branch space from source localSpace graph
120
+ await populateBranchSpaceFromGraph({
121
+ sourceSpace: localSpace,
122
+ targetBranchSpace,
123
+ rootItemIbGib: rootItem,
124
+ metaspace,
125
+ });
126
+ // Verify items exist in targetBranchSpace
127
+ const rootGet = await getFromSpace({ space: targetBranchSpace, addr: rootAddr });
128
+ iReckon(lc, rootGet).isGonnaBeTruthy();
129
+ const childGet = await getFromSpace({ space: targetBranchSpace, addr: childAddr });
130
+ iReckon(lc, childGet).isGonnaBeTruthy();
131
+ }
132
+ finally {
133
+ await fs.rm(testDir, { recursive: true, force: true });
134
+ }
135
+ });
136
+ });
137
+ });
138
+ //# sourceMappingURL=branch-space.respec.node.mjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"branch-space.respec.node.mjs","sourceRoot":"","sources":["../../../src/engine/branch/branch-space.respec.node.mts"],"names":[],"mappings":"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"}
@@ -0,0 +1,26 @@
1
+ /**
2
+ * @module branch-types
3
+ *
4
+ * B2tFS Branch type definitions.
5
+ */
6
+ import { IbGibAddr } from '@ibgib/ts-gib/dist/types.mjs';
7
+ import { IbGibData_V1, IbGibRel8ns_V1, IbGib_V1 } from '@ibgib/ts-gib/dist/V1/types.mjs';
8
+ export interface B2tFSBranchData_V1 extends IbGibData_V1 {
9
+ /**
10
+ * Branch name (e.g. 'main', 'feature/login')
11
+ */
12
+ name: string;
13
+ /**
14
+ * Relative path from repository root to working directory
15
+ */
16
+ relativePathFromMetaspaceToFSPath?: string;
17
+ }
18
+ export interface B2tFSBranchRel8ns_V1 extends IbGibRel8ns_V1 {
19
+ /**
20
+ * Link pointing to the root folder B2tFSItemIbGib_V1
21
+ */
22
+ b2tfs_item?: IbGibAddr[];
23
+ }
24
+ export interface B2tFSBranchIbGib_V1 extends IbGib_V1<B2tFSBranchData_V1, B2tFSBranchRel8ns_V1> {
25
+ }
26
+ //# sourceMappingURL=branch-types.d.mts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"branch-types.d.mts","sourceRoot":"","sources":["../../../src/engine/branch/branch-types.mts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,EAAE,SAAS,EAAE,MAAM,8BAA8B,CAAC;AACzD,OAAO,EAAE,YAAY,EAAE,cAAc,EAAE,QAAQ,EAAE,MAAM,iCAAiC,CAAC;AAEzF,MAAM,WAAW,kBAAmB,SAAQ,YAAY;IACpD;;OAEG;IACH,IAAI,EAAE,MAAM,CAAC;IACb;;OAEG;IACH,iCAAiC,CAAC,EAAE,MAAM,CAAC;CAC9C;AAED,MAAM,WAAW,oBAAqB,SAAQ,cAAc;IACxD;;OAEG;IACH,UAAU,CAAC,EAAE,SAAS,EAAE,CAAC;CAC5B;AAED,MAAM,WAAW,mBAAoB,SAAQ,QAAQ,CAAC,kBAAkB,EAAE,oBAAoB,CAAC;CAC9F"}
@@ -0,0 +1,7 @@
1
+ /**
2
+ * @module branch-types
3
+ *
4
+ * B2tFS Branch type definitions.
5
+ */
6
+ export {};
7
+ //# sourceMappingURL=branch-types.mjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"branch-types.mjs","sourceRoot":"","sources":["../../../src/engine/branch/branch-types.mts"],"names":[],"mappings":"AAAA;;;;GAIG"}
@@ -0,0 +1,76 @@
1
+ /**
2
+ * @module line-diff-helper
3
+ *
4
+ * Native, zero-dependency Myers / LCS line-diffing engine for text files.
5
+ *
6
+ * Computes precise line-by-line diff chunks between text files without external libraries.
7
+ */
8
+ export interface LineDiffChunk {
9
+ /**
10
+ * Line index in old text where the chunk starts (0-indexed)
11
+ */
12
+ old_i: number;
13
+ /**
14
+ * Deleted lines from old text
15
+ */
16
+ oldLines: string[];
17
+ /**
18
+ * Inserted lines in new text
19
+ */
20
+ newLines: string[];
21
+ }
22
+ export interface LineDiffResult {
23
+ /**
24
+ * Array of line diff chunks
25
+ */
26
+ chunks: LineDiffChunk[];
27
+ /**
28
+ * Set if total lines exceed max limit and force flag was false
29
+ */
30
+ tooBig?: boolean;
31
+ /**
32
+ * Set if binary data was detected and force flag was false
33
+ */
34
+ treatedAsBinary?: boolean;
35
+ }
36
+ export interface LineDiffOpts {
37
+ /**
38
+ * Old file data buffer (optional if new file addition)
39
+ */
40
+ oldData?: Uint8Array;
41
+ /**
42
+ * New file data buffer
43
+ */
44
+ newData: Uint8Array;
45
+ /**
46
+ * File encoding (defaults to 'utf8')
47
+ */
48
+ fileEncoding?: string;
49
+ /**
50
+ * Max line count limit before requiring force flag (defaults to 10000)
51
+ */
52
+ maxLines?: number;
53
+ /**
54
+ * Force diff computation even if file is large or binary
55
+ */
56
+ force?: boolean;
57
+ }
58
+ /**
59
+ * Basic binary detection check.
60
+ * Checks for null bytes (0x00) within the first 1024 bytes.
61
+ */
62
+ export declare function isBinaryBuffer(data: Uint8Array): boolean;
63
+ /**
64
+ * Decodes Uint8Array buffer into array of text lines.
65
+ */
66
+ export declare function decodeToLines(data?: Uint8Array, encoding?: string): string[];
67
+ /**
68
+ * Computes Longest Common Subsequence (LCS) edit script between two arrays of lines.
69
+ * Returns array of LineDiffChunk structures.
70
+ */
71
+ export declare function computeLineLcsDiff(oldLines: string[], newLines: string[]): LineDiffChunk[];
72
+ /**
73
+ * Main line diff helper function for text files.
74
+ */
75
+ export declare function getLineDiffChunks(opts: LineDiffOpts): LineDiffResult;
76
+ //# sourceMappingURL=line-diff-helper.d.mts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"line-diff-helper.d.mts","sourceRoot":"","sources":["../../../src/engine/diff/line-diff-helper.mts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAOH,MAAM,WAAW,aAAa;IAC1B;;OAEG;IACH,KAAK,EAAE,MAAM,CAAC;IACd;;OAEG;IACH,QAAQ,EAAE,MAAM,EAAE,CAAC;IACnB;;OAEG;IACH,QAAQ,EAAE,MAAM,EAAE,CAAC;CACtB;AAED,MAAM,WAAW,cAAc;IAC3B;;OAEG;IACH,MAAM,EAAE,aAAa,EAAE,CAAC;IACxB;;OAEG;IACH,MAAM,CAAC,EAAE,OAAO,CAAC;IACjB;;OAEG;IACH,eAAe,CAAC,EAAE,OAAO,CAAC;CAC7B;AAED,MAAM,WAAW,YAAY;IACzB;;OAEG;IACH,OAAO,CAAC,EAAE,UAAU,CAAC;IACrB;;OAEG;IACH,OAAO,EAAE,UAAU,CAAC;IACpB;;OAEG;IACH,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB;;OAEG;IACH,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB;;OAEG;IACH,KAAK,CAAC,EAAE,OAAO,CAAC;CACnB;AAED;;;GAGG;AACH,wBAAgB,cAAc,CAAC,IAAI,EAAE,UAAU,GAAG,OAAO,CAMxD;AAED;;GAEG;AACH,wBAAgB,aAAa,CAAC,IAAI,CAAC,EAAE,UAAU,EAAE,QAAQ,GAAE,MAAe,GAAG,MAAM,EAAE,CASpF;AAED;;;GAGG;AACH,wBAAgB,kBAAkB,CAAC,QAAQ,EAAE,MAAM,EAAE,EAAE,QAAQ,EAAE,MAAM,EAAE,GAAG,aAAa,EAAE,CA8E1F;AAED;;GAEG;AACH,wBAAgB,iBAAiB,CAAC,IAAI,EAAE,YAAY,GAAG,cAAc,CA8BpE"}
@@ -0,0 +1,144 @@
1
+ /**
2
+ * @module line-diff-helper
3
+ *
4
+ * Native, zero-dependency Myers / LCS line-diffing engine for text files.
5
+ *
6
+ * Computes precise line-by-line diff chunks between text files without external libraries.
7
+ */
8
+ import { GLOBAL_LOG_A_LOT } from '../../vcs-gib-constants.mjs';
9
+ const lcFile = `[line-diff-helper]`;
10
+ const logalot = GLOBAL_LOG_A_LOT;
11
+ /**
12
+ * Basic binary detection check.
13
+ * Checks for null bytes (0x00) within the first 1024 bytes.
14
+ */
15
+ export function isBinaryBuffer(data) {
16
+ const sampleSize = Math.min(data.length, 1024);
17
+ for (let i = 0; i < sampleSize; i++) {
18
+ if (data[i] === 0) {
19
+ return true;
20
+ }
21
+ }
22
+ return false;
23
+ }
24
+ /**
25
+ * Decodes Uint8Array buffer into array of text lines.
26
+ */
27
+ export function decodeToLines(data, encoding = 'utf8') {
28
+ if (!data || data.length === 0) {
29
+ return [];
30
+ }
31
+ try {
32
+ const textDecoder = new TextDecoder(encoding || 'utf8', { fatal: false });
33
+ const text = textDecoder.decode(data);
34
+ return text.split(/\r?\n/);
35
+ }
36
+ catch {
37
+ return [];
38
+ }
39
+ }
40
+ /**
41
+ * Computes Longest Common Subsequence (LCS) edit script between two arrays of lines.
42
+ * Returns array of LineDiffChunk structures.
43
+ */
44
+ export function computeLineLcsDiff(oldLines, newLines) {
45
+ const M = oldLines.length;
46
+ const N = newLines.length;
47
+ // Fast path: identical lines
48
+ if (M === N && oldLines.every((line, idx) => line === newLines[idx])) {
49
+ return [];
50
+ }
51
+ // Build LCS DP matrix
52
+ const dp = Array.from({ length: M + 1 }, () => new Array(N + 1).fill(0));
53
+ for (let i = 1; i <= M; i++) {
54
+ for (let j = 1; j <= N; j++) {
55
+ if (oldLines[i - 1] === newLines[j - 1]) {
56
+ dp[i][j] = dp[i - 1][j - 1] + 1;
57
+ }
58
+ else {
59
+ dp[i][j] = Math.max(dp[i - 1][j], dp[i][j - 1]);
60
+ }
61
+ }
62
+ }
63
+ // Backtrack to build edit script
64
+ let i = M;
65
+ let j = N;
66
+ const rawEdits = [];
67
+ while (i > 0 || j > 0) {
68
+ if (i > 0 && j > 0 && oldLines[i - 1] === newLines[j - 1]) {
69
+ rawEdits.push({ type: 'equal', oldIdx: i - 1, line: oldLines[i - 1] });
70
+ i--;
71
+ j--;
72
+ }
73
+ else if (j > 0 && (i === 0 || dp[i][j - 1] >= dp[i - 1][j])) {
74
+ rawEdits.push({ type: 'insert', line: newLines[j - 1] });
75
+ j--;
76
+ }
77
+ else if (i > 0 && (j === 0 || dp[i][j - 1] < dp[i - 1][j])) {
78
+ rawEdits.push({ type: 'delete', oldIdx: i - 1, line: oldLines[i - 1] });
79
+ i--;
80
+ }
81
+ }
82
+ rawEdits.reverse();
83
+ // Group edit operations into chunks
84
+ const chunks = [];
85
+ let currentChunk = null;
86
+ let oldLineCursor = 0;
87
+ for (const edit of rawEdits) {
88
+ if (edit.type === 'equal') {
89
+ if (currentChunk) {
90
+ chunks.push(currentChunk);
91
+ currentChunk = null;
92
+ }
93
+ oldLineCursor++;
94
+ }
95
+ else {
96
+ if (!currentChunk) {
97
+ currentChunk = {
98
+ old_i: oldLineCursor,
99
+ oldLines: [],
100
+ newLines: [],
101
+ };
102
+ }
103
+ if (edit.type === 'delete') {
104
+ currentChunk.oldLines.push(edit.line);
105
+ oldLineCursor++;
106
+ }
107
+ else if (edit.type === 'insert') {
108
+ currentChunk.newLines.push(edit.line);
109
+ }
110
+ }
111
+ }
112
+ if (currentChunk) {
113
+ chunks.push(currentChunk);
114
+ }
115
+ return chunks;
116
+ }
117
+ /**
118
+ * Main line diff helper function for text files.
119
+ */
120
+ export function getLineDiffChunks(opts) {
121
+ const lc = `${lcFile}[${getLineDiffChunks.name}]`;
122
+ const { oldData, newData, fileEncoding = 'utf8', maxLines = 10000, force = false, } = opts;
123
+ // Check for binary data
124
+ const oldIsBin = oldData ? isBinaryBuffer(oldData) : false;
125
+ const newIsBin = isBinaryBuffer(newData);
126
+ if ((oldIsBin || newIsBin) && !force) {
127
+ if (logalot) {
128
+ console.log(`${lc} Binary data detected, skipping line diff.`);
129
+ }
130
+ return { chunks: [], treatedAsBinary: true };
131
+ }
132
+ const oldLines = decodeToLines(oldData, fileEncoding);
133
+ const newLines = decodeToLines(newData, fileEncoding);
134
+ // Check max lines threshold
135
+ if ((oldLines.length > maxLines || newLines.length > maxLines) && !force) {
136
+ if (logalot) {
137
+ console.log(`${lc} Line count exceeds limit (${maxLines}), skipping line diff.`);
138
+ }
139
+ return { chunks: [], tooBig: true };
140
+ }
141
+ const chunks = computeLineLcsDiff(oldLines, newLines);
142
+ return { chunks };
143
+ }
144
+ //# sourceMappingURL=line-diff-helper.mjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"line-diff-helper.mjs","sourceRoot":"","sources":["../../../src/engine/diff/line-diff-helper.mts"],"names":[],"mappings":"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"}
@@ -0,0 +1,7 @@
1
+ /**
2
+ * @module line-diff-helper.respec
3
+ *
4
+ * Unit tests for native zero-dependency Myers / LCS line-diffing engine.
5
+ */
6
+ export {};
7
+ //# sourceMappingURL=line-diff-helper.respec.node.d.mts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"line-diff-helper.respec.node.d.mts","sourceRoot":"","sources":["../../../src/engine/diff/line-diff-helper.respec.node.mts"],"names":[],"mappings":"AAAA;;;;GAIG"}
@@ -0,0 +1,66 @@
1
+ /**
2
+ * @module line-diff-helper.respec
3
+ *
4
+ * Unit tests for native zero-dependency Myers / LCS line-diffing engine.
5
+ */
6
+ import { respecfully, ifWe, iReckon } from '@ibgib/helper-gib/dist/respec-gib/respec-gib.mjs';
7
+ import { isBinaryBuffer, computeLineLcsDiff, getLineDiffChunks } from './line-diff-helper.mjs';
8
+ const lc = `[apps/vcs-gib/src/engine/diff/line-diff-helper.respec.node.mts]`;
9
+ const encoder = new TextEncoder();
10
+ await respecfully(lc, `Native Line Diff Engine (Zero-Dependency)`, async () => {
11
+ await respecfully(lc, `isBinaryBuffer`, async () => {
12
+ await ifWe(lc, `detects text buffer as non-binary`, async () => {
13
+ const buf = encoder.encode('Hello World\nLine 2');
14
+ iReckon(lc, isBinaryBuffer(buf)).isGonnaBeFalse();
15
+ });
16
+ await ifWe(lc, `detects null byte buffer as binary`, async () => {
17
+ const buf = new Uint8Array([0x48, 0x65, 0x00, 0x6c, 0x6f]);
18
+ iReckon(lc, isBinaryBuffer(buf)).isGonnaBeTrue();
19
+ });
20
+ });
21
+ await respecfully(lc, `computeLineLcsDiff`, async () => {
22
+ await ifWe(lc, `returns empty chunks for identical lines`, async () => {
23
+ const lines = ['line 1', 'line 2', 'line 3'];
24
+ const chunks = computeLineLcsDiff(lines, lines);
25
+ iReckon(lc, chunks.length).willEqual(0);
26
+ });
27
+ await ifWe(lc, `computes single line insertion chunk`, async () => {
28
+ const oldLines = ['line 1', 'line 3'];
29
+ const newLines = ['line 1', 'line 2', 'line 3'];
30
+ const chunks = computeLineLcsDiff(oldLines, newLines);
31
+ iReckon(lc, chunks.length).willEqual(1);
32
+ iReckon(lc, chunks[0].old_i).willEqual(1);
33
+ iReckon(lc, chunks[0].oldLines.length).willEqual(0);
34
+ iReckon(lc, chunks[0].newLines.length).willEqual(1);
35
+ iReckon(lc, chunks[0].newLines[0]).willEqual('line 2');
36
+ });
37
+ await ifWe(lc, `computes line replacement chunk`, async () => {
38
+ const oldLines = ['const x = 1;', 'const y = 2;'];
39
+ const newLines = ['const x = 1;', 'const y = 20;'];
40
+ const chunks = computeLineLcsDiff(oldLines, newLines);
41
+ iReckon(lc, chunks.length).willEqual(1);
42
+ iReckon(lc, chunks[0].old_i).willEqual(1);
43
+ iReckon(lc, chunks[0].oldLines[0]).willEqual('const y = 2;');
44
+ iReckon(lc, chunks[0].newLines[0]).willEqual('const y = 20;');
45
+ });
46
+ });
47
+ await respecfully(lc, `getLineDiffChunks`, async () => {
48
+ await ifWe(lc, `computes line diff for text buffers`, async () => {
49
+ const oldData = encoder.encode('alpha\nbeta\ngamma');
50
+ const newData = encoder.encode('alpha\nbeta_updated\ngamma');
51
+ const result = getLineDiffChunks({ oldData, newData });
52
+ iReckon(lc, result.treatedAsBinary).isGonnaBeUndefined();
53
+ iReckon(lc, result.chunks.length).willEqual(1);
54
+ iReckon(lc, result.chunks[0].oldLines[0]).willEqual('beta');
55
+ iReckon(lc, result.chunks[0].newLines[0]).willEqual('beta_updated');
56
+ });
57
+ await ifWe(lc, `flags binary data without force`, async () => {
58
+ const oldData = new Uint8Array([0x00, 0x01, 0x02]);
59
+ const newData = encoder.encode('hello');
60
+ const result = getLineDiffChunks({ oldData, newData });
61
+ iReckon(lc, result.treatedAsBinary).isGonnaBeTrue();
62
+ iReckon(lc, result.chunks.length).willEqual(0);
63
+ });
64
+ });
65
+ });
66
+ //# sourceMappingURL=line-diff-helper.respec.node.mjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"line-diff-helper.respec.node.mjs","sourceRoot":"","sources":["../../../src/engine/diff/line-diff-helper.respec.node.mts"],"names":[],"mappings":"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"}