@ibgib/vcs-gib 0.0.17 → 0.0.20

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 (135) hide show
  1. package/dist/AUTO-GENERATED-version.d.mts +1 -1
  2. package/dist/AUTO-GENERATED-version.mjs +1 -1
  3. package/dist/bootstrap/node-bootstrap.d.mts.map +1 -1
  4. package/dist/bootstrap/node-bootstrap.mjs +3 -0
  5. package/dist/bootstrap/node-bootstrap.mjs.map +1 -1
  6. package/dist/cli/cli-constants.d.mts +1 -0
  7. package/dist/cli/cli-constants.d.mts.map +1 -1
  8. package/dist/cli/cli-constants.mjs +1 -0
  9. package/dist/cli/cli-constants.mjs.map +1 -1
  10. package/dist/cli/commands/add-cmd.d.mts.map +1 -1
  11. package/dist/cli/commands/add-cmd.mjs +2 -2
  12. package/dist/cli/commands/add-cmd.mjs.map +1 -1
  13. package/dist/cli/commands/branch-cmd.d.mts.map +1 -1
  14. package/dist/cli/commands/branch-cmd.mjs +2 -2
  15. package/dist/cli/commands/branch-cmd.mjs.map +1 -1
  16. package/dist/cli/commands/checkout-cmd.d.mts.map +1 -1
  17. package/dist/cli/commands/checkout-cmd.mjs +15 -7
  18. package/dist/cli/commands/checkout-cmd.mjs.map +1 -1
  19. package/dist/cli/commands/commit-cmd.d.mts.map +1 -1
  20. package/dist/cli/commands/commit-cmd.mjs +2 -2
  21. package/dist/cli/commands/commit-cmd.mjs.map +1 -1
  22. package/dist/cli/commands/merge-cmd.d.mts +23 -0
  23. package/dist/cli/commands/merge-cmd.d.mts.map +1 -0
  24. package/dist/cli/commands/merge-cmd.mjs +224 -0
  25. package/dist/cli/commands/merge-cmd.mjs.map +1 -0
  26. package/dist/cli/vcs-cli-main.d.mts.map +1 -1
  27. package/dist/cli/vcs-cli-main.mjs +7 -0
  28. package/dist/cli/vcs-cli-main.mjs.map +1 -1
  29. package/dist/engine/item/item-helper.d.mts +1 -0
  30. package/dist/engine/item/item-helper.d.mts.map +1 -1
  31. package/dist/engine/item/item-helper.mjs +13 -3
  32. package/dist/engine/item/item-helper.mjs.map +1 -1
  33. package/dist/engine/item/item-types.d.mts +1 -0
  34. package/dist/engine/item/item-types.d.mts.map +1 -1
  35. package/dist/engine/merge/b2tfs-3way-merge-strategy.d.mts +48 -0
  36. package/dist/engine/merge/b2tfs-3way-merge-strategy.d.mts.map +1 -0
  37. package/dist/engine/merge/b2tfs-3way-merge-strategy.mjs +741 -0
  38. package/dist/engine/merge/b2tfs-3way-merge-strategy.mjs.map +1 -0
  39. package/dist/engine/merge/b2tfs-3way-merge-types.d.mts +41 -0
  40. package/dist/engine/merge/b2tfs-3way-merge-types.d.mts.map +1 -0
  41. package/dist/engine/merge/b2tfs-3way-merge-types.mjs +2 -0
  42. package/dist/engine/merge/b2tfs-3way-merge-types.mjs.map +1 -0
  43. package/dist/respec-gib.node.mjs +1 -1
  44. package/dist/respec-gib.node.mjs.map +1 -1
  45. package/package.json +6 -6
  46. package/src/AUTO-GENERATED-version.mts +1 -1
  47. package/src/bootstrap/node-bootstrap.mts +6 -1
  48. package/src/cli/cli-constants.mts +1 -0
  49. package/src/cli/commands/add-cmd.mts +5 -3
  50. package/src/cli/commands/branch-checkout-cmd.respec.log +111 -0
  51. package/src/cli/commands/{branch-checkout-cmd.respec.node.mts → branch-checkout-cmd.respec.mts} +112 -9
  52. package/src/cli/commands/branch-cmd.mts +5 -6
  53. package/src/cli/commands/checkout-cmd.mts +23 -9
  54. package/src/cli/commands/commit-cmd.mts +5 -3
  55. package/src/cli/commands/merge-cmd.mts +285 -0
  56. package/src/cli/vcs-cli-main.mts +7 -0
  57. package/src/engine/item/item-helper.mts +15 -9
  58. package/src/engine/item/item-types.mts +2 -1
  59. package/src/engine/merge/b2tfs-3way-merge-strategy.mts +852 -0
  60. package/src/engine/merge/b2tfs-3way-merge-strategy.respec.log +39 -0
  61. package/src/engine/merge/b2tfs-3way-merge-strategy.respec.mts +441 -0
  62. package/src/engine/merge/b2tfs-3way-merge-types.mts +42 -0
  63. package/src/respec-gib.node.mts +2 -2
  64. package/tsconfig.json +3 -2
  65. package/tsconfig.test.json +10 -0
  66. package/tsconfig.test.tsbuildinfo +1 -0
  67. package/tsconfig.tsbuildinfo +1 -1
  68. package/dist/assumptions.respec.d.mts +0 -2
  69. package/dist/assumptions.respec.d.mts.map +0 -1
  70. package/dist/assumptions.respec.mjs +0 -41
  71. package/dist/assumptions.respec.mjs.map +0 -1
  72. package/dist/bootstrap/node-bootstrap.respec.node.d.mts +0 -7
  73. package/dist/bootstrap/node-bootstrap.respec.node.d.mts.map +0 -1
  74. package/dist/bootstrap/node-bootstrap.respec.node.mjs +0 -28
  75. package/dist/bootstrap/node-bootstrap.respec.node.mjs.map +0 -1
  76. package/dist/cli/cli-arg-parser.respec.node.d.mts +0 -7
  77. package/dist/cli/cli-arg-parser.respec.node.d.mts.map +0 -1
  78. package/dist/cli/cli-arg-parser.respec.node.mjs +0 -35
  79. package/dist/cli/cli-arg-parser.respec.node.mjs.map +0 -1
  80. package/dist/cli/cli-e2e.respec.node.d.mts +0 -8
  81. package/dist/cli/cli-e2e.respec.node.d.mts.map +0 -1
  82. package/dist/cli/cli-e2e.respec.node.mjs +0 -263
  83. package/dist/cli/cli-e2e.respec.node.mjs.map +0 -1
  84. package/dist/cli/commands/branch-checkout-cmd.respec.node.d.mts +0 -7
  85. package/dist/cli/commands/branch-checkout-cmd.respec.node.d.mts.map +0 -1
  86. package/dist/cli/commands/branch-checkout-cmd.respec.node.mjs +0 -358
  87. package/dist/cli/commands/branch-checkout-cmd.respec.node.mjs.map +0 -1
  88. package/dist/cli/commands/commit-log-cmd.respec.node.d.mts +0 -7
  89. package/dist/cli/commands/commit-log-cmd.respec.node.d.mts.map +0 -1
  90. package/dist/cli/commands/commit-log-cmd.respec.node.mjs +0 -251
  91. package/dist/cli/commands/commit-log-cmd.respec.node.mjs.map +0 -1
  92. package/dist/cli/commands/init-cmd.respec.node.d.mts +0 -7
  93. package/dist/cli/commands/init-cmd.respec.node.d.mts.map +0 -1
  94. package/dist/cli/commands/init-cmd.respec.node.mjs +0 -40
  95. package/dist/cli/commands/init-cmd.respec.node.mjs.map +0 -1
  96. package/dist/cli/commands/reset-restore-cmd.respec.node.d.mts +0 -7
  97. package/dist/cli/commands/reset-restore-cmd.respec.node.d.mts.map +0 -1
  98. package/dist/cli/commands/reset-restore-cmd.respec.node.mjs +0 -185
  99. package/dist/cli/commands/reset-restore-cmd.respec.node.mjs.map +0 -1
  100. package/dist/cli/commands/status-add-cmd.respec.node.d.mts +0 -7
  101. package/dist/cli/commands/status-add-cmd.respec.node.d.mts.map +0 -1
  102. package/dist/cli/commands/status-add-cmd.respec.node.mjs +0 -239
  103. package/dist/cli/commands/status-add-cmd.respec.node.mjs.map +0 -1
  104. package/dist/engine/branch/branch-space.respec.node.d.mts +0 -8
  105. package/dist/engine/branch/branch-space.respec.node.d.mts.map +0 -1
  106. package/dist/engine/branch/branch-space.respec.node.mjs +0 -143
  107. package/dist/engine/branch/branch-space.respec.node.mjs.map +0 -1
  108. package/dist/engine/diff/line-diff-helper.respec.node.d.mts +0 -7
  109. package/dist/engine/diff/line-diff-helper.respec.node.d.mts.map +0 -1
  110. package/dist/engine/diff/line-diff-helper.respec.node.mjs +0 -66
  111. package/dist/engine/diff/line-diff-helper.respec.node.mjs.map +0 -1
  112. package/dist/engine/filter/glob-helper.respec.node.d.mts +0 -7
  113. package/dist/engine/filter/glob-helper.respec.node.d.mts.map +0 -1
  114. package/dist/engine/filter/glob-helper.respec.node.mjs +0 -78
  115. package/dist/engine/filter/glob-helper.respec.node.mjs.map +0 -1
  116. package/dist/engine/item/item.respec.node.d.mts +0 -7
  117. package/dist/engine/item/item.respec.node.d.mts.map +0 -1
  118. package/dist/engine/item/item.respec.node.mjs +0 -75
  119. package/dist/engine/item/item.respec.node.mjs.map +0 -1
  120. package/dist/vcs-gib.respec.node.d.mts +0 -8
  121. package/dist/vcs-gib.respec.node.d.mts.map +0 -1
  122. package/dist/vcs-gib.respec.node.mjs +0 -82
  123. package/dist/vcs-gib.respec.node.mjs.map +0 -1
  124. /package/src/bootstrap/{node-bootstrap.respec.node.mts → node-bootstrap.respec.mts} +0 -0
  125. /package/src/cli/{cli-arg-parser.respec.node.mts → cli-arg-parser.respec.mts} +0 -0
  126. /package/src/cli/{cli-e2e.respec.node.mts → cli-e2e.respec.mts} +0 -0
  127. /package/src/cli/commands/{commit-log-cmd.respec.node.mts → commit-log-cmd.respec.mts} +0 -0
  128. /package/src/cli/commands/{init-cmd.respec.node.mts → init-cmd.respec.mts} +0 -0
  129. /package/src/cli/commands/{reset-restore-cmd.respec.node.mts → reset-restore-cmd.respec.mts} +0 -0
  130. /package/src/cli/commands/{status-add-cmd.respec.node.mts → status-add-cmd.respec.mts} +0 -0
  131. /package/src/engine/branch/{branch-space.respec.node.mts → branch-space.respec.mts} +0 -0
  132. /package/src/engine/diff/{line-diff-helper.respec.node.mts → line-diff-helper.respec.mts} +0 -0
  133. /package/src/engine/filter/{glob-helper.respec.node.mts → glob-helper.respec.mts} +0 -0
  134. /package/src/engine/item/{item.respec.node.mts → item.respec.mts} +0 -0
  135. /package/src/{vcs-gib.respec.node.mts → vcs-gib.respec.mts} +0 -0
@@ -0,0 +1,39 @@
1
+ [isPastFrame] couldn't get newerAddr (b2tfs_item file app.ts v1 84dd6a83459413d5bb638cd885f20ef0dbebf2ebf10d0f35d1c9ca424b0ca06a^C260FF6E69CF76EE606B524D61293F8C09845E73FB0F433805419613DA373310.856D4E5344197CDF633322514845F78277830A47F78531CB6FB6A7FBE4104E8A) from space (witness space NodeFilesystemSpace_V1 b2s_main 398c1e4bf61d7d486dc4475573788a71b9de99b00bfb086d6ac9381a8c83715b undefined undefined). (E: 36c758c22b181b2c89a1cd28937a6826)
2
+ [SyncSagaCoordinator][handleInitFrame] isPastFrame just threw, but is an expected error if we don't have remote. verbose logging error though: couldn't get newerAddr (b2tfs_item file app.ts v1 84dd6a83459413d5bb638cd885f20ef0dbebf2ebf10d0f35d1c9ca424b0ca06a^C260FF6E69CF76EE606B524D61293F8C09845E73FB0F433805419613DA373310.856D4E5344197CDF633322514845F78277830A47F78531CB6FB6A7FBE4104E8A) from space (witness space NodeFilesystemSpace_V1 b2s_main 398c1e4bf61d7d486dc4475573788a71b9de99b00bfb086d6ac9381a8c83715b undefined undefined). (E: 36c758c22b181b2c89a1cd28937a6826) (I: 47ea08d0b418cf4aa8a502a7bcb80826)
3
+ [b2tfs-3way-merge-strategy][B2tFS3WayGraftStrategy][graft] starting 3-way B2tFS snapshot graft... (I: 91a82b3c4d5e6f7a8b9c0d1e2f3a4b5c)
4
+ [b2tfs-3way-merge-strategy][B2tFS3WayGraftStrategy][graft] baseBranchAddrs:
5
+ b2tfs_item file app.ts v1 84dd6a83459413d5bb638cd885f20ef0dbebf2ebf10d0f35d1c9ca424b0ca06a^24DE146D76A91D4D39902D8085165A2C7B0581C828FEE66737DAB27EE117C8A0.856D4E5344197CDF633322514845F78277830A47F78531CB6FB6A7FBE4104E8A
6
+ b2tfs_item file app.ts v1 84dd6a83459413d5bb638cd885f20ef0dbebf2ebf10d0f35d1c9ca424b0ca06a^58C2E975A2B1894565D981510C606600750304F2EBF6493E678B4E911620EBB1.856D4E5344197CDF633322514845F78277830A47F78531CB6FB6A7FBE4104E8A
7
+ (I: 2cad420d7bc822f798b8a8785f1f8c26)
8
+ [b2tfs-3way-merge-strategy][B2tFS3WayGraftStrategy][graft] orphanBranchAddrs:
9
+ b2tfs_item file app.ts v1 84dd6a83459413d5bb638cd885f20ef0dbebf2ebf10d0f35d1c9ca424b0ca06a^326D3AEC0E13F14AADA159B9FD2E9210FC8AEA1E2EF3715CB47D093C52FE1C7D.856D4E5344197CDF633322514845F78277830A47F78531CB6FB6A7FBE4104E8A
10
+ b2tfs_item file app.ts v1 84dd6a83459413d5bb638cd885f20ef0dbebf2ebf10d0f35d1c9ca424b0ca06a^C260FF6E69CF76EE606B524D61293F8C09845E73FB0F433805419613DA373310.856D4E5344197CDF633322514845F78277830A47F78531CB6FB6A7FBE4104E8A
11
+ (I: cc86489d6737e2aced42b585cba13526)
12
+ [b2tfs-3way-merge-strategy][B2tFS3WayGraftStrategy][graft][MERGE DIAGNOSTIC] file: app.ts
13
+ [b2tfs-3way-merge-strategy][B2tFS3WayGraftStrategy][graft][MERGE DIAGNOSTIC] textLCA:
14
+ line 1
15
+ line 2
16
+ line 3
17
+ [b2tfs-3way-merge-strategy][B2tFS3WayGraftStrategy][graft][MERGE DIAGNOSTIC] textBase:
18
+ line 1 modified by main
19
+ line 2
20
+ line 3
21
+ [b2tfs-3way-merge-strategy][B2tFS3WayGraftStrategy][graft][MERGE DIAGNOSTIC] textOrphan:
22
+ line 1
23
+ line 2
24
+ line 3 modified by secondary
25
+ [DEBUG 3WAY] textLCA: "line 1\nline 2\nline 3"
26
+ [DEBUG 3WAY] textBase: "line 1 modified by main\nline 2\nline 3"
27
+ [DEBUG 3WAY] textOrphan: "line 1\nline 2\nline 3 modified by secondary"
28
+ [b2tfs-3way-merge-strategy][B2tFS3WayGraftStrategy][graft][MERGE DIAGNOSTIC] mergedText:
29
+ line 1 modified by main
30
+ line 2
31
+ line 3 modified by secondary
32
+ [b2tfs-3way-merge-strategy][B2tFS3WayGraftStrategy][graft] newItemAddr: b2tfs_item file app.ts v1 84dd6a83459413d5bb638cd885f20ef0dbebf2ebf10d0f35d1c9ca424b0ca06a^CF54897B8592067ED69CEA3E33C303AFC3BB5928C49DBA314F9C19004C9B5AF5.856D4E5344197CDF633322514845F78277830A47F78531CB6FB6A7FBE4104E8A (I: d23eef651b88be1248ee29ca179eff26)
33
+ [b2tfs-3way-merge-strategy][B2tFS3WayGraftStrategy][graft] finalGraftTipAddr: b2tfs_item file app.ts v1 84dd6a83459413d5bb638cd885f20ef0dbebf2ebf10d0f35d1c9ca424b0ca06a^1A785FC0FBA94C3BBF37EA4E646D6078530A1CD6C640D184E10C128C0517C4E8.856D4E5344197CDF633322514845F78277830A47F78531CB6FB6A7FBE4104E8A (I: 583ac81fb0a84827b85c3076ffeeaf26)
34
+ [b2tfs-3way-merge-strategy][B2tFS3WayGraftStrategy][graft] complete. (I: 6c5d4e3f2a1b0c9d8e7f6a5b4c3d2e1f)
35
+ [SyncPeerInnerspace_V1][sendContextRequest] ARTIFICIALLY DELAYING PAYLOADS TO MIMIC TRANSFER LATENCY. REMOVE THIS DELAY!! (W: 5e7b28f1daa82d955897e9d8cdb16f26)
36
+ [registerNewIbGib][b2tfs_item file app.ts v1 84dd6a83459413d5bb638cd885f20ef0dbebf2ebf10d0f35d1c9ca424b0ca06a^AB38A974ABDADC5F0DF8DDCE59A9F32A68B54C18CFBF44B2E431B5B96F640FC9.856D4E5344197CDF633322514845F78277830A47F78531CB6FB6A7FBE4104E8A] incoming ibGib (b2tfs_item file app.ts v1 84dd6a83459413d5bb638cd885f20ef0dbebf2ebf10d0f35d1c9ca424b0ca06a^AB38A974ABDADC5F0DF8DDCE59A9F32A68B54C18CFBF44B2E431B5B96F640FC9.856D4E5344197CDF633322514845F78277830A47F78531CB6FB6A7FBE4104E8A) is NOT NEWER than existing latest (b2tfs_item file app.ts v1 84dd6a83459413d5bb638cd885f20ef0dbebf2ebf10d0f35d1c9ca424b0ca06a^58C2E975A2B1894565D981510C606600750304F2EBF6493E678B4E911620EBB1.856D4E5344197CDF633322514845F78277830A47F78531CB6FB6A7FBE4104E8A). multiple branches for the same timeline? ignoring incoming ibGibAddr. n_ibGib: 1. n_existingLatest: 4. space.ib: witness space NodeFilesystemSpace_V1 b2s_main 398c1e4bf61d7d486dc4475573788a71b9de99b00bfb086d6ac9381a8c83715b undefined undefined (W: 057baadca494473dabb26fb4fb879774)
37
+ [registerNewIbGib][b2tfs_item file app.ts v1 84dd6a83459413d5bb638cd885f20ef0dbebf2ebf10d0f35d1c9ca424b0ca06a^D69925152120B08634E348A9DEA431AE41B032E7BAAD85E7832BAF8192FB045E.856D4E5344197CDF633322514845F78277830A47F78531CB6FB6A7FBE4104E8A] incoming ibGib (b2tfs_item file app.ts v1 84dd6a83459413d5bb638cd885f20ef0dbebf2ebf10d0f35d1c9ca424b0ca06a^D69925152120B08634E348A9DEA431AE41B032E7BAAD85E7832BAF8192FB045E.856D4E5344197CDF633322514845F78277830A47F78531CB6FB6A7FBE4104E8A) is NOT NEWER than existing latest (b2tfs_item file app.ts v1 84dd6a83459413d5bb638cd885f20ef0dbebf2ebf10d0f35d1c9ca424b0ca06a^58C2E975A2B1894565D981510C606600750304F2EBF6493E678B4E911620EBB1.856D4E5344197CDF633322514845F78277830A47F78531CB6FB6A7FBE4104E8A). multiple branches for the same timeline? ignoring incoming ibGibAddr. n_ibGib: 2. n_existingLatest: 4. space.ib: witness space NodeFilesystemSpace_V1 b2s_main 398c1e4bf61d7d486dc4475573788a71b9de99b00bfb086d6ac9381a8c83715b undefined undefined (W: 057baadca494473dabb26fb4fb879774)
38
+ [registerNewIbGib][b2tfs_item file app.ts v1 84dd6a83459413d5bb638cd885f20ef0dbebf2ebf10d0f35d1c9ca424b0ca06a^24DE146D76A91D4D39902D8085165A2C7B0581C828FEE66737DAB27EE117C8A0.856D4E5344197CDF633322514845F78277830A47F78531CB6FB6A7FBE4104E8A] incoming ibGib (b2tfs_item file app.ts v1 84dd6a83459413d5bb638cd885f20ef0dbebf2ebf10d0f35d1c9ca424b0ca06a^24DE146D76A91D4D39902D8085165A2C7B0581C828FEE66737DAB27EE117C8A0.856D4E5344197CDF633322514845F78277830A47F78531CB6FB6A7FBE4104E8A) is NOT NEWER than existing latest (b2tfs_item file app.ts v1 84dd6a83459413d5bb638cd885f20ef0dbebf2ebf10d0f35d1c9ca424b0ca06a^C260FF6E69CF76EE606B524D61293F8C09845E73FB0F433805419613DA373310.856D4E5344197CDF633322514845F78277830A47F78531CB6FB6A7FBE4104E8A). multiple branches for the same timeline? ignoring incoming ibGibAddr. n_ibGib: 3. n_existingLatest: 4. space.ib: witness space NodeFilesystemSpace_V1 b2s_feature-merge 528f676e3fe54dcae99e3ebaab01e1a8a26ca4e11185407a8e4acd0189489491 undefined undefined (W: 057baadca494473dabb26fb4fb879774)
39
+ [registerNewIbGib][b2tfs_item file app.ts v1 84dd6a83459413d5bb638cd885f20ef0dbebf2ebf10d0f35d1c9ca424b0ca06a^58C2E975A2B1894565D981510C606600750304F2EBF6493E678B4E911620EBB1.856D4E5344197CDF633322514845F78277830A47F78531CB6FB6A7FBE4104E8A] incoming ibGib (b2tfs_item file app.ts v1 84dd6a83459413d5bb638cd885f20ef0dbebf2ebf10d0f35d1c9ca424b0ca06a^58C2E975A2B1894565D981510C606600750304F2EBF6493E678B4E911620EBB1.856D4E5344197CDF633322514845F78277830A47F78531CB6FB6A7FBE4104E8A) is NOT NEWER than existing latest (b2tfs_item file app.ts v1 84dd6a83459413d5bb638cd885f20ef0dbebf2ebf10d0f35d1c9ca424b0ca06a^C260FF6E69CF76EE606B524D61293F8C09845E73FB0F433805419613DA373310.856D4E5344197CDF633322514845F78277830A47F78531CB6FB6A7FBE4104E8A). multiple branches for the same timeline? ignoring incoming ibGibAddr. n_ibGib: 4. n_existingLatest: 4. space.ib: witness space NodeFilesystemSpace_V1 b2s_feature-merge 528f676e3fe54dcae99e3ebaab01e1a8a26ca4e11185407a8e4acd0189489491 undefined undefined (W: 057baadca494473dabb26fb4fb879774)
@@ -0,0 +1,441 @@
1
+ /**
2
+ * @module b2tfs-merge-strategy.respec.node
3
+ *
4
+ * In-memory respec unit tests for B2tFSItem3WayMergeStrategy.
5
+ */
6
+
7
+ import {
8
+ respecfully, ifWe, ifWeMight, iReckon,
9
+ firstOfEach
10
+ } from '@ibgib/helper-gib/dist/respec-gib/respec-gib.mjs';
11
+
12
+ import { getIbGibAddr } from '@ibgib/ts-gib/dist/helper.mjs';
13
+ import { getGib } from '@ibgib/ts-gib/dist/V1/transforms/transform-helper.mjs';
14
+ import { hash } from '@ibgib/helper-gib/dist/helpers/utils-helper.mjs';
15
+ import { InnerSpace_V1 } from '@ibgib/core-gib/dist/witness/space/inner-space/inner-space-v1.mjs';
16
+ import { DEFAULT_INNER_SPACE_DATA_V1 } from '@ibgib/core-gib/dist/witness/space/inner-space/inner-space-types.mjs';
17
+ import { persistTransformResult, registerNewIbGib, getFromSpace, putInSpace } from '@ibgib/core-gib/dist/witness/space/space-helper.mjs';
18
+ import { SyncConflictStrategy } from '@ibgib/core-gib/dist/sync/sync-constants.mjs';
19
+ import { GraftPreference } from '@ibgib/core-gib/dist/sync/graft-info/graft-info-types.mjs';
20
+ import { getBinIb } from '@ibgib/core-gib/dist/common/other/ibgib-helper.mjs';
21
+ import { BinIbGib_V1 } from '@ibgib/core-gib/dist/common/bin/bin-types.mjs';
22
+ import { GraftStrategyService } from '@ibgib/core-gib/dist/sync/graft-info/graft-strategy-service.mjs';
23
+
24
+ import { createB2tFSItemIbGib, evolveB2tFSItemIbGib } from '../item/item-helper.mjs';
25
+ import { B2tFSItemIbGib_V1, BINARY_REL8N_NAME, B2TFS_CHILD_ITEM_REL8N_NAME } from '../item/item-types.mjs';
26
+ import { B2tFS3WayGraftStrategy, B2tFSItem3WayMergeStrategy } from './b2tfs-3way-merge-strategy.mjs';
27
+
28
+ const lc = `[apps/vcs-gib/src/engine/merge/b2tfs-merge-strategy.respec.node.mts]`;
29
+
30
+ const graftStrategySvc = GraftStrategyService.instance;
31
+
32
+ function binDataToText(data: any): string {
33
+ if (!data) { return ''; }
34
+ if (typeof data === 'string') { return data; }
35
+ if (typeof data.text === 'string') { return data.text; }
36
+ if (typeof data.data === 'string') { return data.data; }
37
+ if (data instanceof Uint8Array || Buffer.isBuffer(data)) {
38
+ return new TextDecoder('utf8').decode(data);
39
+ }
40
+ if (typeof data === 'object') {
41
+ const vals = Object.values(data);
42
+ const bytes = new Uint8Array(vals as number[]);
43
+ return new TextDecoder('utf8').decode(bytes);
44
+ }
45
+ return String(data);
46
+ }
47
+
48
+ async function createFileWithContent({
49
+ name,
50
+ content,
51
+ space,
52
+ }: {
53
+ name: string;
54
+ content: string | Uint8Array;
55
+ space: any;
56
+ }): Promise<B2tFSItemIbGib_V1> {
57
+ const textStr = typeof content === 'string' ? content : new TextDecoder('utf8').decode(content);
58
+ const dataBuffer = typeof content === 'string' ? Buffer.from(content, 'utf8') : content;
59
+ const fileHash = await hash({ s: textStr });
60
+
61
+ const fileExt = name.includes('.') ? name.split('.').pop() || 'txt' : 'txt';
62
+ const binIb = getBinIb({
63
+ binHash: fileHash,
64
+ binExt: fileExt,
65
+ binEncoding: 'utf8',
66
+ });
67
+
68
+ const binIbGib: BinIbGib_V1 = {
69
+ ib: binIb,
70
+ data: dataBuffer,
71
+ };
72
+ binIbGib.gib = await getGib({ ibGib: binIbGib, hasTjp: false });
73
+ const binAddr = getIbGibAddr({ ibGib: binIbGib });
74
+
75
+ await putInSpace({ ibGib: binIbGib, space });
76
+ await registerNewIbGib({ ibGib: binIbGib, space });
77
+
78
+ const itemRes = await createB2tFSItemIbGib({
79
+ fsType: 'file',
80
+ name,
81
+ rel8ns: {
82
+ [BINARY_REL8N_NAME]: [binAddr],
83
+ },
84
+ });
85
+
86
+ await persistTransformResult({ resTransform: itemRes, space });
87
+ await registerNewIbGib({ ibGib: itemRes.newIbGib, space });
88
+
89
+ return itemRes.newIbGib as B2tFSItemIbGib_V1;
90
+ }
91
+
92
+ async function evolveFileContent({
93
+ existingItem,
94
+ newContent,
95
+ space,
96
+ }: {
97
+ existingItem: B2tFSItemIbGib_V1;
98
+ newContent: string | Uint8Array;
99
+ space: any;
100
+ }): Promise<B2tFSItemIbGib_V1> {
101
+ const textStr = typeof newContent === 'string' ? newContent : new TextDecoder('utf8').decode(newContent);
102
+ const dataBuffer = typeof newContent === 'string' ? Buffer.from(newContent, 'utf8') : newContent;
103
+ const fileHash = await hash({ s: textStr });
104
+
105
+ const fileExt = existingItem.data?.fileExt || (existingItem.data?.name?.includes('.') ? existingItem.data.name.split('.').pop() || 'txt' : 'txt');
106
+ const binIb = getBinIb({
107
+ binHash: fileHash,
108
+ binExt: fileExt,
109
+ binEncoding: 'utf8',
110
+ });
111
+
112
+ const binIbGib: BinIbGib_V1 = {
113
+ ib: binIb,
114
+ data: dataBuffer,
115
+ };
116
+ binIbGib.gib = await getGib({ ibGib: binIbGib, hasTjp: false });
117
+ const binAddr = getIbGibAddr({ ibGib: binIbGib });
118
+
119
+ await putInSpace({ ibGib: binIbGib, space });
120
+ await registerNewIbGib({ ibGib: binIbGib, space });
121
+
122
+ const evolveRes = await evolveB2tFSItemIbGib({
123
+ existingItem,
124
+ rel8nsToUpdate: {
125
+ [BINARY_REL8N_NAME]: [binAddr],
126
+ },
127
+ });
128
+
129
+ await persistTransformResult({ resTransform: evolveRes, space });
130
+ await registerNewIbGib({ ibGib: evolveRes.newIbGib, space });
131
+
132
+ return evolveRes.newIbGib as B2tFSItemIbGib_V1;
133
+ }
134
+
135
+ async function createFolderItem({
136
+ name,
137
+ childAddrs,
138
+ space,
139
+ }: {
140
+ name: string;
141
+ childAddrs: string[];
142
+ space: any;
143
+ }): Promise<B2tFSItemIbGib_V1> {
144
+ const res = await createB2tFSItemIbGib({
145
+ fsType: 'folder',
146
+ name,
147
+ rel8ns: {
148
+ [B2TFS_CHILD_ITEM_REL8N_NAME]: childAddrs,
149
+ },
150
+ });
151
+
152
+ await persistTransformResult({ resTransform: res, space });
153
+ await registerNewIbGib({ ibGib: res.newIbGib, space });
154
+
155
+ return res.newIbGib as B2tFSItemIbGib_V1;
156
+ }
157
+
158
+ async function evolveFolderItem({
159
+ existingItem,
160
+ childAddrs,
161
+ space,
162
+ }: {
163
+ existingItem: B2tFSItemIbGib_V1;
164
+ childAddrs: string[];
165
+ space: any;
166
+ }): Promise<B2tFSItemIbGib_V1> {
167
+ const res = await evolveB2tFSItemIbGib({
168
+ existingItem,
169
+ rel8nsToUpdate: {
170
+ [B2TFS_CHILD_ITEM_REL8N_NAME]: childAddrs,
171
+ },
172
+ rel8nsToRemove: {
173
+ [B2TFS_CHILD_ITEM_REL8N_NAME]: existingItem.rel8ns?.[B2TFS_CHILD_ITEM_REL8N_NAME] || [],
174
+ },
175
+ });
176
+
177
+ await persistTransformResult({ resTransform: res, space });
178
+ await registerNewIbGib({ ibGib: res.newIbGib, space });
179
+
180
+ return res.newIbGib as B2tFSItemIbGib_V1;
181
+ }
182
+
183
+ await respecfully(lc, `B2tFSItem3WayMergeStrategy In-Memory Respecs`, async () => {
184
+
185
+ firstOfEach(lc, async () => {
186
+ graftStrategySvc.reset();
187
+ graftStrategySvc.registerStrategy(new B2tFSItem3WayMergeStrategy());
188
+ });
189
+
190
+ await ifWe(lc, `performs non-conflicting line merges across two branch timelines`, async () => {
191
+ const space = new InnerSpace_V1({
192
+ ...DEFAULT_INNER_SPACE_DATA_V1,
193
+ name: 'test_space_1',
194
+ uuid: 'test_space_uuid_1',
195
+ });
196
+ await space.initialized;
197
+
198
+ const initialText = "line 1\nline 2\nline 3";
199
+ const lcaFile = await createFileWithContent({ name: 'app.ts', content: initialText, space });
200
+ const lcaAddr = getIbGibAddr({ ibGib: lcaFile });
201
+
202
+ const lcaFolder = await createFolderItem({ name: 'src', childAddrs: [lcaAddr], space });
203
+ const lcaFolderAddr = getIbGibAddr({ ibGib: lcaFolder });
204
+
205
+ // Base branch modifies line 1
206
+ const baseText = "line 1 modified by base\nline 2\nline 3";
207
+ const baseFile = await evolveFileContent({ existingItem: lcaFile, newContent: baseText, space });
208
+ const baseFileAddr = getIbGibAddr({ ibGib: baseFile });
209
+ const baseFolder = await evolveFolderItem({ existingItem: lcaFolder, childAddrs: [baseFileAddr], space });
210
+ const baseFolderAddr = getIbGibAddr({ ibGib: baseFolder });
211
+
212
+ // Orphan branch modifies line 3
213
+ const orphanText = "line 1\nline 2\nline 3 modified by orphan";
214
+ const orphanFile = await evolveFileContent({ existingItem: lcaFile, newContent: orphanText, space });
215
+ const orphanFileAddr = getIbGibAddr({ ibGib: orphanFile });
216
+ const orphanFolder = await evolveFolderItem({ existingItem: lcaFolder, childAddrs: [orphanFileAddr], space });
217
+ const orphanFolderAddr = getIbGibAddr({ ibGib: orphanFolder });
218
+
219
+ const timelineA = [lcaFolderAddr, baseFolderAddr];
220
+ const timelineB = [lcaFolderAddr, orphanFolderAddr];
221
+
222
+ const graftResult = await graftStrategySvc.graftTimelines({
223
+ timelineAddrsA: timelineA,
224
+ timelineAddrsB: timelineB,
225
+ latestCommonFrameAddr: lcaFolderAddr,
226
+ conflictStrategy: SyncConflictStrategy.optimisticWithLCS,
227
+ ibGibReadCache: {},
228
+ space,
229
+ });
230
+
231
+ iReckon(lc, graftResult.newGraftTip).isGonnaBeTruthy();
232
+
233
+ const tipGet = await getFromSpace({ space, addrs: [getIbGibAddr({ ibGib: graftResult.newGraftTip })] });
234
+ const mergedFolder = tipGet.ibGibs![0] as B2tFSItemIbGib_V1;
235
+
236
+ const mergedChildAddr = mergedFolder.rel8ns?.[B2TFS_CHILD_ITEM_REL8N_NAME]?.at(-1);
237
+ iReckon(lc, mergedChildAddr).isGonnaBeTruthy();
238
+
239
+ const fileGet = await getFromSpace({ space, addrs: [mergedChildAddr!] });
240
+ const mergedFile = fileGet.ibGibs![0] as B2tFSItemIbGib_V1;
241
+
242
+ const binAddr = mergedFile.rel8ns?.[BINARY_REL8N_NAME]?.at(-1);
243
+ iReckon(lc, binAddr).isGonnaBeTruthy();
244
+
245
+ const binGet = await getFromSpace({ space, addrs: [binAddr!] });
246
+ const binIbGib = binGet.ibGibs![0];
247
+
248
+ const text = binDataToText(binIbGib.data);
249
+ iReckon(lc, text).includes('line 1 modified by base');
250
+ iReckon(lc, text).includes('line 2');
251
+ iReckon(lc, text).includes('line 3 modified by orphan');
252
+ });
253
+
254
+ await ifWe(lc, `inserts Git conflict markers on conflicting text line merges`, async () => {
255
+ const space = new InnerSpace_V1({
256
+ ...DEFAULT_INNER_SPACE_DATA_V1,
257
+ name: 'test_space_2',
258
+ uuid: 'test_space_uuid_2',
259
+ });
260
+ await space.initialized;
261
+
262
+ const initialText = "line 1\nline 2\nline 3";
263
+ const lcaFile = await createFileWithContent({ name: 'index.ts', content: initialText, space });
264
+ const lcaAddr = getIbGibAddr({ ibGib: lcaFile });
265
+
266
+ const lcaFolder = await createFolderItem({ name: 'src', childAddrs: [lcaAddr], space });
267
+ const lcaFolderAddr = getIbGibAddr({ ibGib: lcaFolder });
268
+
269
+ // Base modifies line 2
270
+ const baseText = "line 1\nline 2 base edit\nline 3";
271
+ const baseFile = await evolveFileContent({ existingItem: lcaFile, newContent: baseText, space });
272
+ const baseFileAddr = getIbGibAddr({ ibGib: baseFile });
273
+ const baseFolder = await evolveFolderItem({ existingItem: lcaFolder, childAddrs: [baseFileAddr], space });
274
+ const baseFolderAddr = getIbGibAddr({ ibGib: baseFolder });
275
+
276
+ // Orphan modifies line 2 differently
277
+ const orphanText = "line 1\nline 2 orphan edit\nline 3";
278
+ const orphanFile = await evolveFileContent({ existingItem: lcaFile, newContent: orphanText, space });
279
+ const orphanFileAddr = getIbGibAddr({ ibGib: orphanFile });
280
+ const orphanFolder = await evolveFolderItem({ existingItem: lcaFolder, childAddrs: [orphanFileAddr], space });
281
+ const orphanFolderAddr = getIbGibAddr({ ibGib: orphanFolder });
282
+
283
+ const timelineA = [lcaFolderAddr, baseFolderAddr];
284
+ const timelineB = [lcaFolderAddr, orphanFolderAddr];
285
+
286
+ const graftResult = await graftStrategySvc.graftTimelines({
287
+ timelineAddrsA: timelineA,
288
+ timelineAddrsB: timelineB,
289
+ latestCommonFrameAddr: lcaFolderAddr,
290
+ conflictStrategy: SyncConflictStrategy.optimisticWithLCS,
291
+ ibGibReadCache: {},
292
+ space,
293
+ });
294
+
295
+ const tipGet = await getFromSpace({ space, addrs: [getIbGibAddr({ ibGib: graftResult.newGraftTip })] });
296
+ const mergedFolder = tipGet.ibGibs![0] as B2tFSItemIbGib_V1;
297
+
298
+ const mergedChildAddr = mergedFolder.rel8ns?.[B2TFS_CHILD_ITEM_REL8N_NAME]?.at(-1);
299
+ const fileGet = await getFromSpace({ space, addrs: [mergedChildAddr!] });
300
+ const mergedFile = fileGet.ibGibs![0] as B2tFSItemIbGib_V1;
301
+
302
+ const binAddr = mergedFile.rel8ns?.[BINARY_REL8N_NAME]?.at(-1);
303
+ const binGet = await getFromSpace({ space, addrs: [binAddr!] });
304
+ const binIbGib = binGet.ibGibs![0];
305
+
306
+ const text = binDataToText(binIbGib.data);
307
+ iReckon(lc, text).includes('<<<<<<< HEAD');
308
+ iReckon(lc, text).includes('line 2 base edit');
309
+ iReckon(lc, text).includes('=======');
310
+ iReckon(lc, text).includes('line 2 orphan edit');
311
+ iReckon(lc, text).includes('>>>>>>>');
312
+ });
313
+
314
+ await ifWe(lc, `skips line diff merging for non-text binary files`, async () => {
315
+ const space = new InnerSpace_V1({
316
+ ...DEFAULT_INNER_SPACE_DATA_V1,
317
+ name: 'test_space_3',
318
+ uuid: 'test_space_uuid_3',
319
+ });
320
+ await space.initialized;
321
+
322
+ const lcaBinData = new Uint8Array([0x00, 0x01, 0x02, 0x03]);
323
+ const lcaFile = await createFileWithContent({ name: 'image.png', content: lcaBinData, space });
324
+ const lcaAddr = getIbGibAddr({ ibGib: lcaFile });
325
+
326
+ const lcaFolder = await createFolderItem({ name: 'assets', childAddrs: [lcaAddr], space });
327
+ const lcaFolderAddr = getIbGibAddr({ ibGib: lcaFolder });
328
+
329
+ const baseBinData = new Uint8Array([0x00, 0x01, 0x02, 0x04]);
330
+ const baseFile = await evolveFileContent({ existingItem: lcaFile, newContent: baseBinData, space });
331
+ const baseFileAddr = getIbGibAddr({ ibGib: baseFile });
332
+ const baseFolder = await evolveFolderItem({ existingItem: lcaFolder, childAddrs: [baseFileAddr], space });
333
+ const baseFolderAddr = getIbGibAddr({ ibGib: baseFolder });
334
+
335
+ const orphanBinData = new Uint8Array([0x00, 0x01, 0x02, 0x05]);
336
+ const orphanFile = await evolveFileContent({ existingItem: lcaFile, newContent: orphanBinData, space });
337
+ const orphanFileAddr = getIbGibAddr({ ibGib: orphanFile });
338
+ const orphanFolder = await evolveFolderItem({ existingItem: lcaFolder, childAddrs: [orphanFileAddr], space });
339
+ const orphanFolderAddr = getIbGibAddr({ ibGib: orphanFolder });
340
+
341
+ const timelineA = [lcaFolderAddr, baseFolderAddr];
342
+ const timelineB = [lcaFolderAddr, orphanFolderAddr];
343
+
344
+ const graftResult = await graftStrategySvc.graftTimelines({
345
+ timelineAddrsA: timelineA,
346
+ timelineAddrsB: timelineB,
347
+ latestCommonFrameAddr: lcaFolderAddr,
348
+ conflictStrategy: SyncConflictStrategy.optimisticWithLCS,
349
+ ibGibReadCache: {},
350
+ space,
351
+ });
352
+
353
+ iReckon(lc, graftResult.newGraftTip).isGonnaBeTruthy();
354
+ });
355
+
356
+ await ifWe(lc, `respects GraftPreference.receiver by using timelineB (receiver) as baseTip`, async () => {
357
+ const space = new InnerSpace_V1({
358
+ ...DEFAULT_INNER_SPACE_DATA_V1,
359
+ name: 'test_space_4',
360
+ uuid: 'test_space_uuid_4',
361
+ });
362
+ await space.initialized;
363
+
364
+ const initialText = "base content";
365
+ const lcaFile = await createFileWithContent({ name: 'file.txt', content: initialText, space });
366
+ const lcaAddr = getIbGibAddr({ ibGib: lcaFile });
367
+ const lcaFolder = await createFolderItem({ name: 'dir', childAddrs: [lcaAddr], space });
368
+ const lcaFolderAddr = getIbGibAddr({ ibGib: lcaFolder });
369
+
370
+ const baseFile = await evolveFileContent({ existingItem: lcaFile, newContent: "base edit", space });
371
+ const baseFileAddr = getIbGibAddr({ ibGib: baseFile });
372
+ const baseFolder = await evolveFolderItem({ existingItem: lcaFolder, childAddrs: [baseFileAddr], space });
373
+ const baseFolderAddr = getIbGibAddr({ ibGib: baseFolder });
374
+
375
+ const orphanFile = await evolveFileContent({ existingItem: lcaFile, newContent: "orphan edit", space });
376
+ const orphanFileAddr = getIbGibAddr({ ibGib: orphanFile });
377
+ const orphanFolder = await evolveFolderItem({ existingItem: lcaFolder, childAddrs: [orphanFileAddr], space });
378
+ const orphanFolderAddr = getIbGibAddr({ ibGib: orphanFolder });
379
+
380
+ const timelineA_sender = [lcaFolderAddr, baseFolderAddr];
381
+ const timelineB_receiver = [lcaFolderAddr, orphanFolderAddr];
382
+
383
+ const graftResult = await graftStrategySvc.graftTimelines({
384
+ timelineAddrsA: timelineA_sender,
385
+ timelineAddrsB: timelineB_receiver,
386
+ latestCommonFrameAddr: lcaFolderAddr,
387
+ conflictStrategy: SyncConflictStrategy.optimisticWithLCS,
388
+ ibGibReadCache: {},
389
+ space,
390
+ graftPreference: GraftPreference.receiver,
391
+ });
392
+
393
+ iReckon(lc, graftResult.newGraftTip).isGonnaBeTruthy();
394
+ iReckon(lc, graftResult.newGraftTip.rel8ns?.past).includes(orphanFolderAddr);
395
+ });
396
+
397
+ await ifWe(lc, `respects GraftPreference.sender by using timelineA (sender) as baseTip`, async () => {
398
+ const space = new InnerSpace_V1({
399
+ ...DEFAULT_INNER_SPACE_DATA_V1,
400
+ name: 'test_space_5',
401
+ uuid: 'test_space_uuid_5',
402
+ });
403
+ await space.initialized;
404
+
405
+ const initialText = "base content";
406
+ const lcaFile = await createFileWithContent({ name: 'file.txt', content: initialText, space });
407
+ const lcaAddr = getIbGibAddr({ ibGib: lcaFile });
408
+ const lcaFolder = await createFolderItem({ name: 'dir', childAddrs: [lcaAddr], space });
409
+ const lcaFolderAddr = getIbGibAddr({ ibGib: lcaFolder });
410
+
411
+ const baseFile = await evolveFileContent({ existingItem: lcaFile, newContent: "sender edit", space });
412
+ const baseFileAddr = getIbGibAddr({ ibGib: baseFile });
413
+ const baseFolder = await evolveFolderItem({ existingItem: lcaFolder, childAddrs: [baseFileAddr], space });
414
+ const baseFolderAddr = getIbGibAddr({ ibGib: baseFolder });
415
+
416
+ const orphanFile = await evolveFileContent({ existingItem: lcaFile, newContent: "receiver edit", space });
417
+ const orphanFileAddr = getIbGibAddr({ ibGib: orphanFile });
418
+ const orphanFolder = await evolveFolderItem({ existingItem: lcaFolder, childAddrs: [orphanFileAddr], space });
419
+ const orphanFolderAddr = getIbGibAddr({ ibGib: orphanFolder });
420
+
421
+ const timelineA_sender = [lcaFolderAddr, baseFolderAddr];
422
+ const timelineB_receiver = [lcaFolderAddr, orphanFolderAddr];
423
+
424
+ const graftResult = await graftStrategySvc.graftTimelines({
425
+ timelineAddrsA: timelineA_sender,
426
+ timelineAddrsB: timelineB_receiver,
427
+ latestCommonFrameAddr: lcaFolderAddr,
428
+ conflictStrategy: SyncConflictStrategy.optimisticWithLCS,
429
+ ibGibReadCache: {},
430
+ space,
431
+ graftPreference: GraftPreference.sender,
432
+ });
433
+
434
+ iReckon(lc, graftResult.newGraftTip).isGonnaBeTruthy();
435
+ iReckon(lc, graftResult.newGraftTip.rel8ns?.past).includes(baseFolderAddr);
436
+ });
437
+ });
438
+
439
+
440
+
441
+
@@ -0,0 +1,42 @@
1
+ import { IbGibAddr } from "@ibgib/ts-gib/dist/types.mjs";
2
+ import { AddlGraftDetails } from "@ibgib/core-gib/dist/sync/graft-info/graft-info-types.mjs";
3
+
4
+ /**
5
+ * Contains references to key b2tfs item ibgibs and their corresponding binary ibgibs
6
+ *
7
+ * ## note on "Details"
8
+ *
9
+ * stupid word "details" is plural and I have this set to be an
10
+ * array. don't have the ability to refactor right now, so this will
11
+ * be mildly confusing unfortunately. Agents should not try to just
12
+ * refactor this on the fly.
13
+ */
14
+ export interface B2tFS3WayAddlGraftDetails extends AddlGraftDetails {
15
+ /**
16
+ * So if merging `my-feature-branch` into `main`...
17
+ *
18
+ * this is the b2tfs item that points to the binary ibgib with text of the
19
+ * file in `main`
20
+ */
21
+ baseTextB2tFSItemAddr: IbGibAddr;
22
+ /**
23
+ * So if merging `my-feature-branch` into `main`...
24
+ *
25
+ * this is the binary ibgib whose text is in `main`
26
+ */
27
+ baseTextBinAddr: IbGibAddr | undefined;
28
+ /**
29
+ * So if merging `my-feature-branch` into `main`...
30
+ *
31
+ * this is the b2tfs item that points to the binary ibgib with text of the
32
+ * file in `my-feature-branch`
33
+ */
34
+ orphanTextB2tFSItemAddr: IbGibAddr;
35
+ /**
36
+ * So if merging `my-feature-branch` into `main`...
37
+ *
38
+ * this is the binary ibgib whose text is in `my-feature-branch`
39
+ */
40
+ orphanTextBinAddr: IbGibAddr | undefined;
41
+
42
+ }
@@ -1,12 +1,12 @@
1
1
  /**
2
2
  * @module respec-gib.node
3
- *
3
+ *
4
4
  * Test runner for @ibgib/vcs-gib respec tests.
5
5
  */
6
6
 
7
7
  import { RespecNodeRunner } from '@ibgib/helper-gib/dist/respec-gib/respec-node-runner.mjs';
8
8
 
9
9
  const runner = new RespecNodeRunner({
10
- respecFileRegExp: /^.+(?:respec|respec\.node)\.mjs$/,
10
+ // respecFileRegExp: /^.+(?:respec|respec\.node)\.mjs$/,
11
11
  });
12
12
  await runner.run();
package/tsconfig.json CHANGED
@@ -13,6 +13,7 @@
13
13
  ],
14
14
  "exclude": [
15
15
  "node_modules",
16
- "dist"
16
+ "**/*.respec.mts",
17
+ "./dist/**/*"
17
18
  ]
18
- }
19
+ }
@@ -0,0 +1,10 @@
1
+ {
2
+ "extends": "./tsconfig.json",
3
+ "compilerOptions": {
4
+ "outDir": "./dist", /* Redirect output structure to the directory. */
5
+ "module": "ESNext", /* https://www.typescriptlang.org/docs/handbook/esm-node.html */
6
+ },
7
+ "exclude": [
8
+ "./dist"
9
+ ]
10
+ }