windmill-cli 1.532.0 → 1.532.1

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 (399) hide show
  1. package/esm/deps/jsr.io/@std/fs/{1.0.19 → 1.0.16}/_create_walk_entry.js +2 -2
  2. package/esm/deps/jsr.io/@std/fs/{1.0.19 → 1.0.16}/_is_same_path.js +1 -1
  3. package/esm/deps/jsr.io/@std/fs/{1.0.19 → 1.0.16}/_is_subdir.js +2 -2
  4. package/esm/deps/jsr.io/@std/fs/{1.0.19 → 1.0.16}/_to_path_string.js +1 -1
  5. package/esm/deps/jsr.io/@std/fs/{1.0.19 → 1.0.16}/copy.js +5 -4
  6. package/esm/deps/jsr.io/@std/fs/{1.0.19 → 1.0.16}/empty_dir.js +1 -1
  7. package/esm/deps/jsr.io/@std/fs/{1.0.19 → 1.0.16}/ensure_file.js +1 -1
  8. package/esm/deps/jsr.io/@std/fs/{1.0.19 → 1.0.16}/ensure_link.js +1 -1
  9. package/esm/deps/jsr.io/@std/fs/{1.0.19 → 1.0.16}/ensure_symlink.js +4 -3
  10. package/esm/deps/jsr.io/@std/fs/{1.0.19 → 1.0.16}/expand_glob.js +8 -7
  11. package/esm/deps/jsr.io/@std/fs/{1.0.19 → 1.0.16}/walk.js +1 -1
  12. package/esm/deps/jsr.io/@std/io/0.225.2/read_all.js +1 -1
  13. package/esm/deps/jsr.io/@std/log/0.224.14/console_handler.js +1 -1
  14. package/esm/deps/jsr.io/@std/log/0.224.14/rotating_file_handler.js +1 -1
  15. package/esm/deps/jsr.io/@std/path/{1.1.2 → 1.0.8}/_common/assert_path.js +1 -1
  16. package/esm/deps/jsr.io/@std/path/{1.1.2 → 1.0.8}/_common/basename.js +1 -1
  17. package/esm/deps/jsr.io/@std/path/{1.1.2 → 1.0.8}/_common/common.js +1 -1
  18. package/esm/deps/jsr.io/@std/path/{1.1.2 → 1.0.8}/_common/constants.js +1 -1
  19. package/esm/deps/jsr.io/@std/path/{1.1.2 → 1.0.8}/_common/dirname.js +1 -1
  20. package/esm/deps/jsr.io/@std/path/{1.1.2 → 1.0.8}/_common/format.js +1 -1
  21. package/esm/deps/jsr.io/@std/path/{1.1.2 → 1.0.8}/_common/from_file_url.js +1 -1
  22. package/esm/deps/jsr.io/@std/path/{1.1.2 → 1.0.8}/_common/glob_to_reg_exp.js +1 -1
  23. package/esm/deps/jsr.io/@std/path/{1.1.2 → 1.0.8}/_common/normalize.js +1 -1
  24. package/esm/deps/jsr.io/@std/path/{1.1.2 → 1.0.8}/_common/normalize_string.js +1 -1
  25. package/esm/deps/jsr.io/@std/path/{1.1.2 → 1.0.8}/_common/relative.js +1 -1
  26. package/esm/deps/jsr.io/@std/path/{1.1.2 → 1.0.8}/_common/strip_trailing_separators.js +1 -1
  27. package/esm/deps/jsr.io/@std/path/{1.1.2 → 1.0.8}/_common/to_file_url.js +1 -1
  28. package/esm/deps/jsr.io/@std/path/1.0.8/_os.js +9 -0
  29. package/esm/deps/jsr.io/@std/path/{1.1.2 → 1.0.8}/basename.js +5 -4
  30. package/esm/deps/jsr.io/@std/path/{1.1.2 → 1.0.8}/common.js +1 -1
  31. package/esm/deps/jsr.io/@std/path/{1.1.2 → 1.0.8}/constants.js +2 -2
  32. package/esm/deps/jsr.io/@std/path/{1.1.2 → 1.0.8}/dirname.js +5 -4
  33. package/esm/deps/jsr.io/@std/path/{1.1.2 → 1.0.8}/extname.js +5 -4
  34. package/esm/deps/jsr.io/@std/path/{1.1.2 → 1.0.8}/format.js +2 -2
  35. package/esm/deps/jsr.io/@std/path/{1.1.2 → 1.0.8}/from_file_url.js +2 -2
  36. package/esm/deps/jsr.io/@std/path/{1.1.2 → 1.0.8}/glob_to_regexp.js +2 -2
  37. package/esm/deps/jsr.io/@std/path/{1.1.2 → 1.0.8}/is_absolute.js +2 -2
  38. package/esm/deps/jsr.io/@std/path/{1.1.2 → 1.0.8}/is_glob.js +2 -2
  39. package/esm/deps/jsr.io/@std/path/{1.1.2 → 1.0.8}/join.js +7 -7
  40. package/esm/deps/jsr.io/@std/path/{1.1.2 → 1.0.8}/join_globs.js +2 -2
  41. package/esm/deps/jsr.io/@std/path/1.0.8/mod.js +57 -0
  42. package/esm/deps/jsr.io/@std/path/{1.1.2 → 1.0.8}/normalize.js +5 -4
  43. package/esm/deps/jsr.io/@std/path/{1.1.2 → 1.0.8}/normalize_glob.js +2 -2
  44. package/esm/deps/jsr.io/@std/path/{1.1.2 → 1.0.8}/parse.js +2 -2
  45. package/esm/deps/jsr.io/@std/path/{1.1.2 → 1.0.8}/posix/_util.js +1 -1
  46. package/esm/deps/jsr.io/@std/path/{1.1.2 → 1.0.8}/posix/basename.js +4 -7
  47. package/esm/deps/jsr.io/@std/path/{1.1.2 → 1.0.8}/posix/constants.js +1 -1
  48. package/esm/deps/jsr.io/@std/path/{1.1.2 → 1.0.8}/posix/dirname.js +4 -6
  49. package/esm/deps/jsr.io/@std/path/{1.1.2 → 1.0.8}/posix/extname.js +4 -8
  50. package/esm/deps/jsr.io/@std/path/{1.1.2 → 1.0.8}/posix/format.js +1 -1
  51. package/esm/deps/jsr.io/@std/path/{1.1.2 → 1.0.8}/posix/from_file_url.js +1 -1
  52. package/esm/deps/jsr.io/@std/path/{1.1.2 → 1.0.8}/posix/glob_to_regexp.js +1 -1
  53. package/esm/deps/jsr.io/@std/path/{1.1.2 → 1.0.8}/posix/is_absolute.js +1 -1
  54. package/esm/deps/jsr.io/@std/path/{1.1.2 → 1.0.8}/posix/join.js +8 -11
  55. package/esm/deps/jsr.io/@std/path/{1.1.2 → 1.0.8}/posix/join_globs.js +1 -1
  56. package/esm/deps/jsr.io/@std/path/{1.1.2 → 1.0.8}/posix/normalize.js +6 -7
  57. package/esm/deps/jsr.io/@std/path/{1.1.2 → 1.0.8}/posix/normalize_glob.js +1 -1
  58. package/esm/deps/jsr.io/@std/path/{1.1.2 → 1.0.8}/posix/parse.js +1 -1
  59. package/esm/deps/jsr.io/@std/path/{1.1.2 → 1.0.8}/posix/relative.js +1 -1
  60. package/esm/deps/jsr.io/@std/path/{1.1.2 → 1.0.8}/posix/resolve.js +1 -1
  61. package/esm/deps/jsr.io/@std/path/{1.1.2 → 1.0.8}/posix/to_file_url.js +1 -1
  62. package/esm/deps/jsr.io/@std/path/{1.1.2 → 1.0.8}/posix/to_namespaced_path.js +1 -1
  63. package/esm/deps/jsr.io/@std/path/{1.1.2 → 1.0.8}/relative.js +2 -2
  64. package/esm/deps/jsr.io/@std/path/{1.1.2 → 1.0.8}/resolve.js +2 -2
  65. package/esm/deps/jsr.io/@std/path/{1.1.2 → 1.0.8}/to_file_url.js +2 -2
  66. package/esm/deps/jsr.io/@std/path/{1.1.2 → 1.0.8}/to_namespaced_path.js +2 -2
  67. package/esm/deps/jsr.io/@std/path/1.0.8/types.js +3 -0
  68. package/esm/deps/jsr.io/@std/path/{1.1.2 → 1.0.8}/windows/_util.js +1 -1
  69. package/esm/deps/jsr.io/@std/path/{1.1.2 → 1.0.8}/windows/basename.js +4 -7
  70. package/esm/deps/jsr.io/@std/path/{1.1.2 → 1.0.8}/windows/constants.js +1 -1
  71. package/esm/deps/jsr.io/@std/path/{1.1.2 → 1.0.8}/windows/dirname.js +6 -7
  72. package/esm/deps/jsr.io/@std/path/{1.1.2 → 1.0.8}/windows/extname.js +6 -7
  73. package/esm/deps/jsr.io/@std/path/{1.1.2 → 1.0.8}/windows/format.js +1 -1
  74. package/esm/deps/jsr.io/@std/path/{1.1.2 → 1.0.8}/windows/from_file_url.js +1 -1
  75. package/esm/deps/jsr.io/@std/path/{1.1.2 → 1.0.8}/windows/glob_to_regexp.js +1 -1
  76. package/esm/deps/jsr.io/@std/path/{1.1.2 → 1.0.8}/windows/is_absolute.js +1 -1
  77. package/esm/deps/jsr.io/@std/path/{1.1.2 → 1.0.8}/windows/join.js +7 -10
  78. package/esm/deps/jsr.io/@std/path/{1.1.2 → 1.0.8}/windows/join_globs.js +1 -1
  79. package/esm/deps/jsr.io/@std/path/{1.1.2 → 1.0.8}/windows/normalize.js +6 -7
  80. package/esm/deps/jsr.io/@std/path/{1.1.2 → 1.0.8}/windows/normalize_glob.js +1 -1
  81. package/esm/deps/jsr.io/@std/path/{1.1.2 → 1.0.8}/windows/parse.js +1 -1
  82. package/esm/deps/jsr.io/@std/path/{1.1.2 → 1.0.8}/windows/relative.js +1 -1
  83. package/esm/deps/jsr.io/@std/path/{1.1.2 → 1.0.8}/windows/resolve.js +1 -1
  84. package/esm/deps/jsr.io/@std/path/{1.1.2 → 1.0.8}/windows/to_file_url.js +1 -1
  85. package/esm/deps/jsr.io/@std/path/{1.1.2 → 1.0.8}/windows/to_namespaced_path.js +1 -1
  86. package/esm/deps/jsr.io/@std/yaml/{1.0.9 → 1.0.5}/_chars.js +1 -1
  87. package/esm/deps/jsr.io/@std/yaml/{1.0.9 → 1.0.5}/_dumper_state.js +5 -14
  88. package/esm/deps/jsr.io/@std/yaml/{1.0.9 → 1.0.5}/_loader_state.js +150 -168
  89. package/esm/deps/jsr.io/@std/yaml/{1.0.9 → 1.0.5}/_schema.js +6 -1
  90. package/esm/deps/jsr.io/@std/yaml/{1.0.9 → 1.0.5}/_type/bool.js +1 -1
  91. package/esm/deps/jsr.io/@std/yaml/{1.0.9 → 1.0.5}/_type/float.js +1 -1
  92. package/esm/deps/jsr.io/@std/yaml/{1.0.9 → 1.0.5}/_type/int.js +1 -1
  93. package/esm/deps/jsr.io/@std/yaml/{1.0.9 → 1.0.5}/_type/map.js +1 -1
  94. package/esm/deps/jsr.io/@std/yaml/{1.0.9 → 1.0.5}/_type/merge.js +1 -1
  95. package/esm/deps/jsr.io/@std/yaml/{1.0.9 → 1.0.5}/_type/nil.js +1 -1
  96. package/esm/deps/jsr.io/@std/yaml/{1.0.9 → 1.0.5}/_type/omap.js +1 -1
  97. package/esm/deps/jsr.io/@std/yaml/{1.0.9 → 1.0.5}/_type/pairs.js +1 -1
  98. package/esm/deps/jsr.io/@std/yaml/{1.0.9 → 1.0.5}/_type/regexp.js +1 -1
  99. package/esm/deps/jsr.io/@std/yaml/{1.0.9 → 1.0.5}/_type/seq.js +1 -1
  100. package/esm/deps/jsr.io/@std/yaml/{1.0.9 → 1.0.5}/_type/set.js +1 -1
  101. package/esm/deps/jsr.io/@std/yaml/{1.0.9 → 1.0.5}/_type/str.js +1 -1
  102. package/esm/deps/jsr.io/@std/yaml/{1.0.9 → 1.0.5}/_type/timestamp.js +1 -1
  103. package/esm/deps/jsr.io/@std/yaml/{1.0.9 → 1.0.5}/_type/undefined.js +1 -1
  104. package/esm/deps/jsr.io/@std/yaml/{1.0.9 → 1.0.5}/_type.js +1 -1
  105. package/esm/deps/jsr.io/@std/yaml/{1.0.9 → 1.0.5}/_utils.js +1 -1
  106. package/esm/deps/jsr.io/@std/yaml/{1.0.9 → 1.0.5}/mod.js +1 -1
  107. package/esm/deps/jsr.io/@std/yaml/{1.0.9 → 1.0.5}/parse.js +1 -1
  108. package/esm/deps/jsr.io/@std/yaml/{1.0.9 → 1.0.5}/stringify.js +1 -1
  109. package/esm/deps.js +5 -5
  110. package/esm/src/commands/gitsync-settings/pull.js +17 -20
  111. package/esm/src/commands/gitsync-settings/push.js +3 -5
  112. package/esm/src/commands/gitsync-settings/utils.js +9 -9
  113. package/esm/src/commands/init/init.js +9 -9
  114. package/esm/src/commands/sync/sync.js +139 -28
  115. package/esm/src/commands/workspace/workspace.js +10 -10
  116. package/esm/src/core/conf.js +160 -31
  117. package/esm/src/core/context.js +1 -1
  118. package/esm/src/core/specific_items.js +141 -0
  119. package/package.json +1 -1
  120. package/types/_dnt.polyfills.d.ts +6 -0
  121. package/types/_dnt.polyfills.d.ts.map +1 -1
  122. package/types/deps/jsr.io/@std/bytes/{1.0.6 → 1.0.5}/_types.d.ts.map +1 -1
  123. package/types/deps/jsr.io/@std/bytes/{1.0.6 → 1.0.5}/concat.d.ts +1 -1
  124. package/types/deps/jsr.io/@std/bytes/{1.0.6 → 1.0.5}/concat.d.ts.map +1 -1
  125. package/types/deps/jsr.io/@std/fmt/{1.0.8 → 1.0.6}/colors.d.ts.map +1 -1
  126. package/types/deps/jsr.io/@std/fs/{1.0.19 → 1.0.16}/_create_walk_entry.d.ts.map +1 -1
  127. package/types/deps/jsr.io/@std/fs/{1.0.19 → 1.0.16}/_get_file_info_type.d.ts.map +1 -1
  128. package/types/deps/jsr.io/@std/fs/{1.0.19 → 1.0.16}/_is_same_path.d.ts.map +1 -1
  129. package/types/deps/jsr.io/@std/fs/{1.0.19 → 1.0.16}/_is_subdir.d.ts.map +1 -1
  130. package/types/deps/jsr.io/@std/fs/{1.0.19 → 1.0.16}/_to_path_string.d.ts.map +1 -1
  131. package/types/deps/jsr.io/@std/fs/{1.0.19 → 1.0.16}/copy.d.ts.map +1 -1
  132. package/types/deps/jsr.io/@std/fs/{1.0.19 → 1.0.16}/empty_dir.d.ts.map +1 -1
  133. package/types/deps/jsr.io/@std/fs/{1.0.19 → 1.0.16}/ensure_dir.d.ts.map +1 -1
  134. package/types/deps/jsr.io/@std/fs/{1.0.19 → 1.0.16}/ensure_file.d.ts.map +1 -1
  135. package/types/deps/jsr.io/@std/fs/{1.0.19 → 1.0.16}/ensure_link.d.ts.map +1 -1
  136. package/types/deps/jsr.io/@std/fs/{1.0.19 → 1.0.16}/ensure_symlink.d.ts.map +1 -1
  137. package/types/deps/jsr.io/@std/fs/{1.0.19 → 1.0.16}/eol.d.ts.map +1 -1
  138. package/types/deps/jsr.io/@std/fs/{1.0.19 → 1.0.16}/exists.d.ts.map +1 -1
  139. package/types/deps/jsr.io/@std/fs/{1.0.19 → 1.0.16}/expand_glob.d.ts +1 -1
  140. package/types/deps/jsr.io/@std/fs/{1.0.19 → 1.0.16}/expand_glob.d.ts.map +1 -1
  141. package/types/deps/jsr.io/@std/fs/{1.0.19 → 1.0.16}/mod.d.ts.map +1 -1
  142. package/types/deps/jsr.io/@std/fs/{1.0.19 → 1.0.16}/move.d.ts.map +1 -1
  143. package/types/deps/jsr.io/@std/fs/{1.0.19 → 1.0.16}/walk.d.ts.map +1 -1
  144. package/types/deps/jsr.io/@std/path/{1.1.2 → 1.0.8}/_common/assert_path.d.ts.map +1 -1
  145. package/types/deps/jsr.io/@std/path/{1.1.2 → 1.0.8}/_common/basename.d.ts.map +1 -1
  146. package/types/deps/jsr.io/@std/path/{1.1.2 → 1.0.8}/_common/common.d.ts.map +1 -1
  147. package/types/deps/jsr.io/@std/path/{1.1.2 → 1.0.8}/_common/constants.d.ts.map +1 -1
  148. package/types/deps/jsr.io/@std/path/{1.1.2 → 1.0.8}/_common/dirname.d.ts.map +1 -1
  149. package/types/deps/jsr.io/@std/path/{1.1.2 → 1.0.8}/_common/format.d.ts.map +1 -1
  150. package/types/deps/jsr.io/@std/path/{1.1.2 → 1.0.8}/_common/from_file_url.d.ts.map +1 -1
  151. package/types/deps/jsr.io/@std/path/{1.1.2 → 1.0.8}/_common/glob_to_reg_exp.d.ts.map +1 -1
  152. package/types/deps/jsr.io/@std/path/{1.1.2 → 1.0.8}/_common/normalize.d.ts.map +1 -1
  153. package/types/deps/jsr.io/@std/path/{1.1.2 → 1.0.8}/_common/normalize_string.d.ts.map +1 -1
  154. package/types/deps/jsr.io/@std/path/{1.1.2 → 1.0.8}/_common/relative.d.ts.map +1 -1
  155. package/types/deps/jsr.io/@std/path/{1.1.2 → 1.0.8}/_common/strip_trailing_separators.d.ts.map +1 -1
  156. package/types/deps/jsr.io/@std/path/{1.1.2 → 1.0.8}/_common/to_file_url.d.ts.map +1 -1
  157. package/types/deps/jsr.io/@std/path/1.0.8/_os.d.ts +2 -0
  158. package/types/deps/jsr.io/@std/path/1.0.8/_os.d.ts.map +1 -0
  159. package/types/deps/jsr.io/@std/path/{1.1.2 → 1.0.8}/basename.d.ts +4 -3
  160. package/types/deps/jsr.io/@std/path/1.0.8/basename.d.ts.map +1 -0
  161. package/types/deps/jsr.io/@std/path/{1.1.2 → 1.0.8}/common.d.ts.map +1 -1
  162. package/types/deps/jsr.io/@std/path/{1.1.2 → 1.0.8}/constants.d.ts.map +1 -1
  163. package/types/deps/jsr.io/@std/path/{1.1.2 → 1.0.8}/dirname.d.ts +4 -3
  164. package/types/deps/jsr.io/@std/path/1.0.8/dirname.d.ts.map +1 -0
  165. package/types/deps/jsr.io/@std/path/{1.1.2 → 1.0.8}/extname.d.ts +4 -3
  166. package/types/deps/jsr.io/@std/path/1.0.8/extname.d.ts.map +1 -0
  167. package/types/deps/jsr.io/@std/path/{1.1.2 → 1.0.8}/format.d.ts.map +1 -1
  168. package/types/deps/jsr.io/@std/path/{1.1.2 → 1.0.8}/from_file_url.d.ts.map +1 -1
  169. package/types/deps/jsr.io/@std/path/{1.1.2 → 1.0.8}/glob_to_regexp.d.ts.map +1 -1
  170. package/types/deps/jsr.io/@std/path/{1.1.2 → 1.0.8}/is_absolute.d.ts.map +1 -1
  171. package/types/deps/jsr.io/@std/path/{1.1.2 → 1.0.8}/is_glob.d.ts.map +1 -1
  172. package/types/deps/jsr.io/@std/path/{1.1.2 → 1.0.8}/join.d.ts +4 -4
  173. package/types/deps/jsr.io/@std/path/1.0.8/join.d.ts.map +1 -0
  174. package/types/deps/jsr.io/@std/path/{1.1.2 → 1.0.8}/join_globs.d.ts.map +1 -1
  175. package/types/deps/jsr.io/@std/path/1.0.8/mod.d.ts +54 -0
  176. package/types/deps/jsr.io/@std/path/1.0.8/mod.d.ts.map +1 -0
  177. package/types/deps/jsr.io/@std/path/{1.1.2 → 1.0.8}/normalize.d.ts +4 -3
  178. package/types/deps/jsr.io/@std/path/1.0.8/normalize.d.ts.map +1 -0
  179. package/types/deps/jsr.io/@std/path/{1.1.2 → 1.0.8}/normalize_glob.d.ts.map +1 -1
  180. package/types/deps/jsr.io/@std/path/{1.1.2 → 1.0.8}/parse.d.ts.map +1 -1
  181. package/types/deps/jsr.io/@std/path/{1.1.2 → 1.0.8}/posix/_util.d.ts.map +1 -1
  182. package/types/deps/jsr.io/@std/path/{1.1.2 → 1.0.8}/posix/basename.d.ts +4 -3
  183. package/types/deps/jsr.io/@std/path/1.0.8/posix/basename.d.ts.map +1 -0
  184. package/types/deps/jsr.io/@std/path/{1.1.2 → 1.0.8}/posix/constants.d.ts.map +1 -1
  185. package/types/deps/jsr.io/@std/path/{1.1.2 → 1.0.8}/posix/dirname.d.ts +4 -2
  186. package/types/deps/jsr.io/@std/path/1.0.8/posix/dirname.d.ts.map +1 -0
  187. package/types/deps/jsr.io/@std/path/{1.1.2 → 1.0.8}/posix/extname.d.ts +4 -4
  188. package/types/deps/jsr.io/@std/path/1.0.8/posix/extname.d.ts.map +1 -0
  189. package/types/deps/jsr.io/@std/path/{1.1.2 → 1.0.8}/posix/format.d.ts.map +1 -1
  190. package/types/deps/jsr.io/@std/path/{1.1.2 → 1.0.8}/posix/from_file_url.d.ts.map +1 -1
  191. package/types/deps/jsr.io/@std/path/{1.1.2 → 1.0.8}/posix/glob_to_regexp.d.ts.map +1 -1
  192. package/types/deps/jsr.io/@std/path/{1.1.2 → 1.0.8}/posix/is_absolute.d.ts.map +1 -1
  193. package/types/deps/jsr.io/@std/path/{1.1.2 → 1.0.8}/posix/join.d.ts +6 -4
  194. package/types/deps/jsr.io/@std/path/1.0.8/posix/join.d.ts.map +1 -0
  195. package/types/deps/jsr.io/@std/path/{1.1.2 → 1.0.8}/posix/join_globs.d.ts.map +1 -1
  196. package/types/deps/jsr.io/@std/path/{1.1.2 → 1.0.8}/posix/normalize.d.ts +6 -3
  197. package/types/deps/jsr.io/@std/path/1.0.8/posix/normalize.d.ts.map +1 -0
  198. package/types/deps/jsr.io/@std/path/{1.1.2 → 1.0.8}/posix/normalize_glob.d.ts.map +1 -1
  199. package/types/deps/jsr.io/@std/path/{1.1.2 → 1.0.8}/posix/parse.d.ts.map +1 -1
  200. package/types/deps/jsr.io/@std/path/{1.1.2 → 1.0.8}/posix/relative.d.ts.map +1 -1
  201. package/types/deps/jsr.io/@std/path/{1.1.2 → 1.0.8}/posix/resolve.d.ts.map +1 -1
  202. package/types/deps/jsr.io/@std/path/{1.1.2 → 1.0.8}/posix/to_file_url.d.ts.map +1 -1
  203. package/types/deps/jsr.io/@std/path/{1.1.2 → 1.0.8}/posix/to_namespaced_path.d.ts.map +1 -1
  204. package/types/deps/jsr.io/@std/path/{1.1.2 → 1.0.8}/relative.d.ts.map +1 -1
  205. package/types/deps/jsr.io/@std/path/{1.1.2 → 1.0.8}/resolve.d.ts.map +1 -1
  206. package/types/deps/jsr.io/@std/path/{1.1.2 → 1.0.8}/to_file_url.d.ts.map +1 -1
  207. package/types/deps/jsr.io/@std/path/{1.1.2 → 1.0.8}/to_namespaced_path.d.ts.map +1 -1
  208. package/types/deps/jsr.io/@std/path/{1.1.2 → 1.0.8}/types.d.ts.map +1 -1
  209. package/types/deps/jsr.io/@std/path/{1.1.2 → 1.0.8}/windows/_util.d.ts.map +1 -1
  210. package/types/deps/jsr.io/@std/path/{1.1.2 → 1.0.8}/windows/basename.d.ts +4 -3
  211. package/types/deps/jsr.io/@std/path/1.0.8/windows/basename.d.ts.map +1 -0
  212. package/types/deps/jsr.io/@std/path/{1.1.2 → 1.0.8}/windows/constants.d.ts.map +1 -1
  213. package/types/deps/jsr.io/@std/path/1.0.8/windows/dirname.d.ts +20 -0
  214. package/types/deps/jsr.io/@std/path/1.0.8/windows/dirname.d.ts.map +1 -0
  215. package/types/deps/jsr.io/@std/path/{1.1.2 → 1.0.8}/windows/extname.d.ts +6 -3
  216. package/types/deps/jsr.io/@std/path/1.0.8/windows/extname.d.ts.map +1 -0
  217. package/types/deps/jsr.io/@std/path/{1.1.2 → 1.0.8}/windows/format.d.ts.map +1 -1
  218. package/types/deps/jsr.io/@std/path/{1.1.2 → 1.0.8}/windows/from_file_url.d.ts.map +1 -1
  219. package/types/deps/jsr.io/@std/path/{1.1.2 → 1.0.8}/windows/glob_to_regexp.d.ts.map +1 -1
  220. package/types/deps/jsr.io/@std/path/{1.1.2 → 1.0.8}/windows/is_absolute.d.ts.map +1 -1
  221. package/types/deps/jsr.io/@std/path/1.0.8/windows/join.d.ts +20 -0
  222. package/types/deps/jsr.io/@std/path/1.0.8/windows/join.d.ts.map +1 -0
  223. package/types/deps/jsr.io/@std/path/{1.1.2 → 1.0.8}/windows/join_globs.d.ts.map +1 -1
  224. package/types/deps/jsr.io/@std/path/{1.1.2 → 1.0.8}/windows/normalize.d.ts +6 -3
  225. package/types/deps/jsr.io/@std/path/1.0.8/windows/normalize.d.ts.map +1 -0
  226. package/types/deps/jsr.io/@std/path/{1.1.2 → 1.0.8}/windows/normalize_glob.d.ts.map +1 -1
  227. package/types/deps/jsr.io/@std/path/{1.1.2 → 1.0.8}/windows/parse.d.ts.map +1 -1
  228. package/types/deps/jsr.io/@std/path/{1.1.2 → 1.0.8}/windows/relative.d.ts.map +1 -1
  229. package/types/deps/jsr.io/@std/path/{1.1.2 → 1.0.8}/windows/resolve.d.ts.map +1 -1
  230. package/types/deps/jsr.io/@std/path/{1.1.2 → 1.0.8}/windows/to_file_url.d.ts.map +1 -1
  231. package/types/deps/jsr.io/@std/path/{1.1.2 → 1.0.8}/windows/to_namespaced_path.d.ts.map +1 -1
  232. package/types/deps/jsr.io/@std/yaml/{1.0.9 → 1.0.5}/_chars.d.ts.map +1 -1
  233. package/types/deps/jsr.io/@std/yaml/{1.0.9 → 1.0.5}/_dumper_state.d.ts +1 -8
  234. package/types/deps/jsr.io/@std/yaml/1.0.5/_dumper_state.d.ts.map +1 -0
  235. package/types/deps/jsr.io/@std/yaml/{1.0.9 → 1.0.5}/_loader_state.d.ts +8 -14
  236. package/types/deps/jsr.io/@std/yaml/1.0.5/_loader_state.d.ts.map +1 -0
  237. package/types/deps/jsr.io/@std/yaml/{1.0.9 → 1.0.5}/_schema.d.ts.map +1 -1
  238. package/types/deps/jsr.io/@std/yaml/{1.0.9 → 1.0.5}/_type/binary.d.ts.map +1 -1
  239. package/types/deps/jsr.io/@std/yaml/{1.0.9 → 1.0.5}/_type/bool.d.ts.map +1 -1
  240. package/types/deps/jsr.io/@std/yaml/{1.0.9 → 1.0.5}/_type/float.d.ts.map +1 -1
  241. package/types/deps/jsr.io/@std/yaml/{1.0.9 → 1.0.5}/_type/int.d.ts.map +1 -1
  242. package/types/deps/jsr.io/@std/yaml/{1.0.9 → 1.0.5}/_type/map.d.ts.map +1 -1
  243. package/types/deps/jsr.io/@std/yaml/{1.0.9 → 1.0.5}/_type/merge.d.ts.map +1 -1
  244. package/types/deps/jsr.io/@std/yaml/{1.0.9 → 1.0.5}/_type/nil.d.ts.map +1 -1
  245. package/types/deps/jsr.io/@std/yaml/{1.0.9 → 1.0.5}/_type/omap.d.ts.map +1 -1
  246. package/types/deps/jsr.io/@std/yaml/{1.0.9 → 1.0.5}/_type/pairs.d.ts.map +1 -1
  247. package/types/deps/jsr.io/@std/yaml/{1.0.9 → 1.0.5}/_type/regexp.d.ts.map +1 -1
  248. package/types/deps/jsr.io/@std/yaml/{1.0.9 → 1.0.5}/_type/seq.d.ts.map +1 -1
  249. package/types/deps/jsr.io/@std/yaml/{1.0.9 → 1.0.5}/_type/set.d.ts.map +1 -1
  250. package/types/deps/jsr.io/@std/yaml/{1.0.9 → 1.0.5}/_type/str.d.ts.map +1 -1
  251. package/types/deps/jsr.io/@std/yaml/{1.0.9 → 1.0.5}/_type/timestamp.d.ts.map +1 -1
  252. package/types/deps/jsr.io/@std/yaml/{1.0.9 → 1.0.5}/_type/undefined.d.ts.map +1 -1
  253. package/types/deps/jsr.io/@std/yaml/{1.0.9 → 1.0.5}/_type.d.ts.map +1 -1
  254. package/types/deps/jsr.io/@std/yaml/{1.0.9 → 1.0.5}/_utils.d.ts.map +1 -1
  255. package/types/deps/jsr.io/@std/yaml/{1.0.9 → 1.0.5}/mod.d.ts.map +1 -1
  256. package/types/deps/jsr.io/@std/yaml/{1.0.9 → 1.0.5}/parse.d.ts.map +1 -1
  257. package/types/deps/jsr.io/@std/yaml/{1.0.9 → 1.0.5}/stringify.d.ts.map +1 -1
  258. package/types/deps.d.ts +5 -5
  259. package/types/src/commands/gitsync-settings/pull.d.ts.map +1 -1
  260. package/types/src/commands/gitsync-settings/push.d.ts.map +1 -1
  261. package/types/src/commands/sync/sync.d.ts +2 -1
  262. package/types/src/commands/sync/sync.d.ts.map +1 -1
  263. package/types/src/core/conf.d.ts +27 -0
  264. package/types/src/core/conf.d.ts.map +1 -1
  265. package/types/src/core/specific_items.d.ts +36 -0
  266. package/types/src/core/specific_items.d.ts.map +1 -0
  267. package/esm/deps/jsr.io/@std/internal/1.0.10/_os.js +0 -12
  268. package/esm/deps/jsr.io/@std/internal/1.0.10/os.js +0 -5
  269. package/esm/deps/jsr.io/@std/path/1.1.2/mod.js +0 -216
  270. package/esm/deps/jsr.io/@std/path/1.1.2/types.js +0 -3
  271. package/types/deps/jsr.io/@std/internal/1.0.10/_os.d.ts +0 -2
  272. package/types/deps/jsr.io/@std/internal/1.0.10/_os.d.ts.map +0 -1
  273. package/types/deps/jsr.io/@std/internal/1.0.10/os.d.ts +0 -3
  274. package/types/deps/jsr.io/@std/internal/1.0.10/os.d.ts.map +0 -1
  275. package/types/deps/jsr.io/@std/path/1.1.2/basename.d.ts.map +0 -1
  276. package/types/deps/jsr.io/@std/path/1.1.2/dirname.d.ts.map +0 -1
  277. package/types/deps/jsr.io/@std/path/1.1.2/extname.d.ts.map +0 -1
  278. package/types/deps/jsr.io/@std/path/1.1.2/join.d.ts.map +0 -1
  279. package/types/deps/jsr.io/@std/path/1.1.2/mod.d.ts +0 -213
  280. package/types/deps/jsr.io/@std/path/1.1.2/mod.d.ts.map +0 -1
  281. package/types/deps/jsr.io/@std/path/1.1.2/normalize.d.ts.map +0 -1
  282. package/types/deps/jsr.io/@std/path/1.1.2/posix/basename.d.ts.map +0 -1
  283. package/types/deps/jsr.io/@std/path/1.1.2/posix/dirname.d.ts.map +0 -1
  284. package/types/deps/jsr.io/@std/path/1.1.2/posix/extname.d.ts.map +0 -1
  285. package/types/deps/jsr.io/@std/path/1.1.2/posix/join.d.ts.map +0 -1
  286. package/types/deps/jsr.io/@std/path/1.1.2/posix/normalize.d.ts.map +0 -1
  287. package/types/deps/jsr.io/@std/path/1.1.2/windows/basename.d.ts.map +0 -1
  288. package/types/deps/jsr.io/@std/path/1.1.2/windows/dirname.d.ts +0 -17
  289. package/types/deps/jsr.io/@std/path/1.1.2/windows/dirname.d.ts.map +0 -1
  290. package/types/deps/jsr.io/@std/path/1.1.2/windows/extname.d.ts.map +0 -1
  291. package/types/deps/jsr.io/@std/path/1.1.2/windows/join.d.ts +0 -18
  292. package/types/deps/jsr.io/@std/path/1.1.2/windows/join.d.ts.map +0 -1
  293. package/types/deps/jsr.io/@std/path/1.1.2/windows/normalize.d.ts.map +0 -1
  294. package/types/deps/jsr.io/@std/yaml/1.0.9/_dumper_state.d.ts.map +0 -1
  295. package/types/deps/jsr.io/@std/yaml/1.0.9/_loader_state.d.ts.map +0 -1
  296. /package/esm/deps/jsr.io/@std/bytes/{1.0.6 → 1.0.5}/_types.js +0 -0
  297. /package/esm/deps/jsr.io/@std/bytes/{1.0.6 → 1.0.5}/concat.js +0 -0
  298. /package/esm/deps/jsr.io/@std/fmt/{1.0.8 → 1.0.6}/colors.js +0 -0
  299. /package/esm/deps/jsr.io/@std/fs/{1.0.19 → 1.0.16}/_get_file_info_type.js +0 -0
  300. /package/esm/deps/jsr.io/@std/fs/{1.0.19 → 1.0.16}/ensure_dir.js +0 -0
  301. /package/esm/deps/jsr.io/@std/fs/{1.0.19 → 1.0.16}/eol.js +0 -0
  302. /package/esm/deps/jsr.io/@std/fs/{1.0.19 → 1.0.16}/exists.js +0 -0
  303. /package/esm/deps/jsr.io/@std/fs/{1.0.19 → 1.0.16}/mod.js +0 -0
  304. /package/esm/deps/jsr.io/@std/fs/{1.0.19 → 1.0.16}/move.js +0 -0
  305. /package/esm/deps/jsr.io/@std/yaml/{1.0.9 → 1.0.5}/_type/binary.js +0 -0
  306. /package/types/deps/jsr.io/@std/bytes/{1.0.6 → 1.0.5}/_types.d.ts +0 -0
  307. /package/types/deps/jsr.io/@std/fmt/{1.0.8 → 1.0.6}/colors.d.ts +0 -0
  308. /package/types/deps/jsr.io/@std/fs/{1.0.19 → 1.0.16}/_create_walk_entry.d.ts +0 -0
  309. /package/types/deps/jsr.io/@std/fs/{1.0.19 → 1.0.16}/_get_file_info_type.d.ts +0 -0
  310. /package/types/deps/jsr.io/@std/fs/{1.0.19 → 1.0.16}/_is_same_path.d.ts +0 -0
  311. /package/types/deps/jsr.io/@std/fs/{1.0.19 → 1.0.16}/_is_subdir.d.ts +0 -0
  312. /package/types/deps/jsr.io/@std/fs/{1.0.19 → 1.0.16}/_to_path_string.d.ts +0 -0
  313. /package/types/deps/jsr.io/@std/fs/{1.0.19 → 1.0.16}/copy.d.ts +0 -0
  314. /package/types/deps/jsr.io/@std/fs/{1.0.19 → 1.0.16}/empty_dir.d.ts +0 -0
  315. /package/types/deps/jsr.io/@std/fs/{1.0.19 → 1.0.16}/ensure_dir.d.ts +0 -0
  316. /package/types/deps/jsr.io/@std/fs/{1.0.19 → 1.0.16}/ensure_file.d.ts +0 -0
  317. /package/types/deps/jsr.io/@std/fs/{1.0.19 → 1.0.16}/ensure_link.d.ts +0 -0
  318. /package/types/deps/jsr.io/@std/fs/{1.0.19 → 1.0.16}/ensure_symlink.d.ts +0 -0
  319. /package/types/deps/jsr.io/@std/fs/{1.0.19 → 1.0.16}/eol.d.ts +0 -0
  320. /package/types/deps/jsr.io/@std/fs/{1.0.19 → 1.0.16}/exists.d.ts +0 -0
  321. /package/types/deps/jsr.io/@std/fs/{1.0.19 → 1.0.16}/mod.d.ts +0 -0
  322. /package/types/deps/jsr.io/@std/fs/{1.0.19 → 1.0.16}/move.d.ts +0 -0
  323. /package/types/deps/jsr.io/@std/fs/{1.0.19 → 1.0.16}/walk.d.ts +0 -0
  324. /package/types/deps/jsr.io/@std/path/{1.1.2 → 1.0.8}/_common/assert_path.d.ts +0 -0
  325. /package/types/deps/jsr.io/@std/path/{1.1.2 → 1.0.8}/_common/basename.d.ts +0 -0
  326. /package/types/deps/jsr.io/@std/path/{1.1.2 → 1.0.8}/_common/common.d.ts +0 -0
  327. /package/types/deps/jsr.io/@std/path/{1.1.2 → 1.0.8}/_common/constants.d.ts +0 -0
  328. /package/types/deps/jsr.io/@std/path/{1.1.2 → 1.0.8}/_common/dirname.d.ts +0 -0
  329. /package/types/deps/jsr.io/@std/path/{1.1.2 → 1.0.8}/_common/format.d.ts +0 -0
  330. /package/types/deps/jsr.io/@std/path/{1.1.2 → 1.0.8}/_common/from_file_url.d.ts +0 -0
  331. /package/types/deps/jsr.io/@std/path/{1.1.2 → 1.0.8}/_common/glob_to_reg_exp.d.ts +0 -0
  332. /package/types/deps/jsr.io/@std/path/{1.1.2 → 1.0.8}/_common/normalize.d.ts +0 -0
  333. /package/types/deps/jsr.io/@std/path/{1.1.2 → 1.0.8}/_common/normalize_string.d.ts +0 -0
  334. /package/types/deps/jsr.io/@std/path/{1.1.2 → 1.0.8}/_common/relative.d.ts +0 -0
  335. /package/types/deps/jsr.io/@std/path/{1.1.2 → 1.0.8}/_common/strip_trailing_separators.d.ts +0 -0
  336. /package/types/deps/jsr.io/@std/path/{1.1.2 → 1.0.8}/_common/to_file_url.d.ts +0 -0
  337. /package/types/deps/jsr.io/@std/path/{1.1.2 → 1.0.8}/common.d.ts +0 -0
  338. /package/types/deps/jsr.io/@std/path/{1.1.2 → 1.0.8}/constants.d.ts +0 -0
  339. /package/types/deps/jsr.io/@std/path/{1.1.2 → 1.0.8}/format.d.ts +0 -0
  340. /package/types/deps/jsr.io/@std/path/{1.1.2 → 1.0.8}/from_file_url.d.ts +0 -0
  341. /package/types/deps/jsr.io/@std/path/{1.1.2 → 1.0.8}/glob_to_regexp.d.ts +0 -0
  342. /package/types/deps/jsr.io/@std/path/{1.1.2 → 1.0.8}/is_absolute.d.ts +0 -0
  343. /package/types/deps/jsr.io/@std/path/{1.1.2 → 1.0.8}/is_glob.d.ts +0 -0
  344. /package/types/deps/jsr.io/@std/path/{1.1.2 → 1.0.8}/join_globs.d.ts +0 -0
  345. /package/types/deps/jsr.io/@std/path/{1.1.2 → 1.0.8}/normalize_glob.d.ts +0 -0
  346. /package/types/deps/jsr.io/@std/path/{1.1.2 → 1.0.8}/parse.d.ts +0 -0
  347. /package/types/deps/jsr.io/@std/path/{1.1.2 → 1.0.8}/posix/_util.d.ts +0 -0
  348. /package/types/deps/jsr.io/@std/path/{1.1.2 → 1.0.8}/posix/constants.d.ts +0 -0
  349. /package/types/deps/jsr.io/@std/path/{1.1.2 → 1.0.8}/posix/format.d.ts +0 -0
  350. /package/types/deps/jsr.io/@std/path/{1.1.2 → 1.0.8}/posix/from_file_url.d.ts +0 -0
  351. /package/types/deps/jsr.io/@std/path/{1.1.2 → 1.0.8}/posix/glob_to_regexp.d.ts +0 -0
  352. /package/types/deps/jsr.io/@std/path/{1.1.2 → 1.0.8}/posix/is_absolute.d.ts +0 -0
  353. /package/types/deps/jsr.io/@std/path/{1.1.2 → 1.0.8}/posix/join_globs.d.ts +0 -0
  354. /package/types/deps/jsr.io/@std/path/{1.1.2 → 1.0.8}/posix/normalize_glob.d.ts +0 -0
  355. /package/types/deps/jsr.io/@std/path/{1.1.2 → 1.0.8}/posix/parse.d.ts +0 -0
  356. /package/types/deps/jsr.io/@std/path/{1.1.2 → 1.0.8}/posix/relative.d.ts +0 -0
  357. /package/types/deps/jsr.io/@std/path/{1.1.2 → 1.0.8}/posix/resolve.d.ts +0 -0
  358. /package/types/deps/jsr.io/@std/path/{1.1.2 → 1.0.8}/posix/to_file_url.d.ts +0 -0
  359. /package/types/deps/jsr.io/@std/path/{1.1.2 → 1.0.8}/posix/to_namespaced_path.d.ts +0 -0
  360. /package/types/deps/jsr.io/@std/path/{1.1.2 → 1.0.8}/relative.d.ts +0 -0
  361. /package/types/deps/jsr.io/@std/path/{1.1.2 → 1.0.8}/resolve.d.ts +0 -0
  362. /package/types/deps/jsr.io/@std/path/{1.1.2 → 1.0.8}/to_file_url.d.ts +0 -0
  363. /package/types/deps/jsr.io/@std/path/{1.1.2 → 1.0.8}/to_namespaced_path.d.ts +0 -0
  364. /package/types/deps/jsr.io/@std/path/{1.1.2 → 1.0.8}/types.d.ts +0 -0
  365. /package/types/deps/jsr.io/@std/path/{1.1.2 → 1.0.8}/windows/_util.d.ts +0 -0
  366. /package/types/deps/jsr.io/@std/path/{1.1.2 → 1.0.8}/windows/constants.d.ts +0 -0
  367. /package/types/deps/jsr.io/@std/path/{1.1.2 → 1.0.8}/windows/format.d.ts +0 -0
  368. /package/types/deps/jsr.io/@std/path/{1.1.2 → 1.0.8}/windows/from_file_url.d.ts +0 -0
  369. /package/types/deps/jsr.io/@std/path/{1.1.2 → 1.0.8}/windows/glob_to_regexp.d.ts +0 -0
  370. /package/types/deps/jsr.io/@std/path/{1.1.2 → 1.0.8}/windows/is_absolute.d.ts +0 -0
  371. /package/types/deps/jsr.io/@std/path/{1.1.2 → 1.0.8}/windows/join_globs.d.ts +0 -0
  372. /package/types/deps/jsr.io/@std/path/{1.1.2 → 1.0.8}/windows/normalize_glob.d.ts +0 -0
  373. /package/types/deps/jsr.io/@std/path/{1.1.2 → 1.0.8}/windows/parse.d.ts +0 -0
  374. /package/types/deps/jsr.io/@std/path/{1.1.2 → 1.0.8}/windows/relative.d.ts +0 -0
  375. /package/types/deps/jsr.io/@std/path/{1.1.2 → 1.0.8}/windows/resolve.d.ts +0 -0
  376. /package/types/deps/jsr.io/@std/path/{1.1.2 → 1.0.8}/windows/to_file_url.d.ts +0 -0
  377. /package/types/deps/jsr.io/@std/path/{1.1.2 → 1.0.8}/windows/to_namespaced_path.d.ts +0 -0
  378. /package/types/deps/jsr.io/@std/yaml/{1.0.9 → 1.0.5}/_chars.d.ts +0 -0
  379. /package/types/deps/jsr.io/@std/yaml/{1.0.9 → 1.0.5}/_schema.d.ts +0 -0
  380. /package/types/deps/jsr.io/@std/yaml/{1.0.9 → 1.0.5}/_type/binary.d.ts +0 -0
  381. /package/types/deps/jsr.io/@std/yaml/{1.0.9 → 1.0.5}/_type/bool.d.ts +0 -0
  382. /package/types/deps/jsr.io/@std/yaml/{1.0.9 → 1.0.5}/_type/float.d.ts +0 -0
  383. /package/types/deps/jsr.io/@std/yaml/{1.0.9 → 1.0.5}/_type/int.d.ts +0 -0
  384. /package/types/deps/jsr.io/@std/yaml/{1.0.9 → 1.0.5}/_type/map.d.ts +0 -0
  385. /package/types/deps/jsr.io/@std/yaml/{1.0.9 → 1.0.5}/_type/merge.d.ts +0 -0
  386. /package/types/deps/jsr.io/@std/yaml/{1.0.9 → 1.0.5}/_type/nil.d.ts +0 -0
  387. /package/types/deps/jsr.io/@std/yaml/{1.0.9 → 1.0.5}/_type/omap.d.ts +0 -0
  388. /package/types/deps/jsr.io/@std/yaml/{1.0.9 → 1.0.5}/_type/pairs.d.ts +0 -0
  389. /package/types/deps/jsr.io/@std/yaml/{1.0.9 → 1.0.5}/_type/regexp.d.ts +0 -0
  390. /package/types/deps/jsr.io/@std/yaml/{1.0.9 → 1.0.5}/_type/seq.d.ts +0 -0
  391. /package/types/deps/jsr.io/@std/yaml/{1.0.9 → 1.0.5}/_type/set.d.ts +0 -0
  392. /package/types/deps/jsr.io/@std/yaml/{1.0.9 → 1.0.5}/_type/str.d.ts +0 -0
  393. /package/types/deps/jsr.io/@std/yaml/{1.0.9 → 1.0.5}/_type/timestamp.d.ts +0 -0
  394. /package/types/deps/jsr.io/@std/yaml/{1.0.9 → 1.0.5}/_type/undefined.d.ts +0 -0
  395. /package/types/deps/jsr.io/@std/yaml/{1.0.9 → 1.0.5}/_type.d.ts +0 -0
  396. /package/types/deps/jsr.io/@std/yaml/{1.0.9 → 1.0.5}/_utils.d.ts +0 -0
  397. /package/types/deps/jsr.io/@std/yaml/{1.0.9 → 1.0.5}/mod.d.ts +0 -0
  398. /package/types/deps/jsr.io/@std/yaml/{1.0.9 → 1.0.5}/parse.d.ts +0 -0
  399. /package/types/deps/jsr.io/@std/yaml/{1.0.9 → 1.0.5}/stringify.d.ts +0 -0
@@ -8,7 +8,9 @@ import { downloadZip } from "./pull.js";
8
8
  import { exts, findContentFile, findGlobalDeps, findResourceFile, handleScriptMetadata, removeExtensionToPath, } from "../script/script.js";
9
9
  import { handleFile } from "../script/script.js";
10
10
  import { deepEqual, isFileResource } from "../../utils/utils.js";
11
- import { readConfigFile, getEffectiveSettings, validateBranchConfiguration, } from "../../core/conf.js";
11
+ import { getEffectiveSettings, validateBranchConfiguration, mergeConfigWithConfigFile, } from "../../core/conf.js";
12
+ import { getSpecificItemsForCurrentBranch, isSpecificItem, getBranchSpecificPath, fromBranchSpecificPath, isCurrentBranchFile, isBranchSpecificFile, } from "../../core/specific_items.js";
13
+ import { getCurrentGitBranch } from "../../utils/git.js";
12
14
  import { removePathPrefix } from "../../types.js";
13
15
  import { listSyncCodebases } from "../../utils/codebase.js";
14
16
  import { generateFlowLockInternal, generateScriptMetadataInternal, readLockfile, } from "../../utils/metadata.js";
@@ -21,8 +23,7 @@ function mergeCliWithEffectiveOptions(cliOpts, effectiveOpts) {
21
23
  return Object.assign({}, effectiveOpts, cliOpts);
22
24
  }
23
25
  // Resolve effective sync options using branch-based configuration
24
- async function resolveEffectiveSyncOptions(workspace, promotion) {
25
- const localConfig = await readConfigFile();
26
+ async function resolveEffectiveSyncOptions(workspace, localConfig, promotion) {
26
27
  return await getEffectiveSettings(localConfig, promotion);
27
28
  }
28
29
  export function findCodebase(path, codebases) {
@@ -505,8 +506,30 @@ export async function* readDirRecursiveWithIgnore(ignore, root) {
505
506
  }
506
507
  }
507
508
  }
508
- export async function elementsToMap(els, ignore, json, skips) {
509
+ export async function elementsToMap(els, ignore, json, skips, specificItems) {
509
510
  const map = {};
511
+ const processedBasePaths = new Set();
512
+ // First pass: collect all file paths to identify branch-specific files
513
+ const allPaths = [];
514
+ for await (const entry of readDirRecursiveWithIgnore(ignore, els)) {
515
+ if (!entry.isDirectory && !entry.ignored) {
516
+ allPaths.push(entry.path);
517
+ }
518
+ }
519
+ const branchSpecificExists = new Set();
520
+ if (specificItems) {
521
+ const currentBranch = getCurrentGitBranch();
522
+ if (currentBranch) {
523
+ for (const path of allPaths) {
524
+ if (isCurrentBranchFile(path)) {
525
+ const basePath = fromBranchSpecificPath(path, currentBranch);
526
+ if (isSpecificItem(basePath, specificItems)) {
527
+ branchSpecificExists.add(basePath);
528
+ }
529
+ }
530
+ }
531
+ }
532
+ }
510
533
  for await (const entry of readDirRecursiveWithIgnore(ignore, els)) {
511
534
  if (entry.isDirectory || entry.ignored)
512
535
  continue;
@@ -578,10 +601,18 @@ export async function elementsToMap(els, ignore, json, skips) {
578
601
  "nu",
579
602
  "java",
580
603
  "rb",
581
- // for related places search: ADD_NEW_LANG
604
+ // for related places search: ADD_NEW_LANG
582
605
  ].includes(path.split(".").pop() ?? "") &&
583
606
  !isFileResource(path))
584
607
  continue;
608
+ // Handle branch-specific files - skip files for other branches
609
+ if (specificItems && isBranchSpecificFile(path)) {
610
+ const currentBranch = getCurrentGitBranch();
611
+ if (!currentBranch || !isCurrentBranchFile(path)) {
612
+ // Skip branch-specific files for other branches
613
+ continue;
614
+ }
615
+ }
585
616
  const content = await entry.getContentText();
586
617
  if (skips.skipSecrets && path.endsWith(".variable" + ext)) {
587
618
  try {
@@ -612,17 +643,45 @@ export async function elementsToMap(els, ignore, json, skips) {
612
643
  log.warn(`Error reading variable ${path} to check for secrets`);
613
644
  }
614
645
  }
615
- map[entry.path] = content;
646
+ // Handle branch-specific path mapping after all filtering
647
+ if (specificItems) {
648
+ const currentBranch = getCurrentGitBranch();
649
+ if (currentBranch && isCurrentBranchFile(path)) {
650
+ // This is a branch-specific file for current branch
651
+ const basePath = fromBranchSpecificPath(path, currentBranch);
652
+ if (isSpecificItem(basePath, specificItems)) {
653
+ // Map to base path for push operations
654
+ map[basePath] = content;
655
+ processedBasePaths.add(basePath);
656
+ }
657
+ else {
658
+ // Branch-specific file doesn't match pattern, skip it
659
+ continue;
660
+ }
661
+ }
662
+ else if (!isBranchSpecificFile(path)) {
663
+ // This is a regular base file, check if we should skip it
664
+ if (processedBasePaths.has(path)) {
665
+ // Skip base file, we already processed branch-specific version
666
+ continue;
667
+ }
668
+ map[path] = content;
669
+ }
670
+ }
671
+ else {
672
+ // No specific items configuration, use regular path
673
+ map[entry.path] = content;
674
+ }
616
675
  }
617
676
  return map;
618
677
  }
619
- async function compareDynFSElement(els1, els2, ignore, json, skips, ignoreMetadataDeletion, codebases, ignoreCodebaseChanges) {
678
+ async function compareDynFSElement(els1, els2, ignore, json, skips, ignoreMetadataDeletion, codebases, ignoreCodebaseChanges, specificItems) {
620
679
  const [m1, m2] = els2
621
680
  ? await Promise.all([
622
- elementsToMap(els1, ignore, json, skips),
623
- elementsToMap(els2, ignore, json, skips),
681
+ elementsToMap(els1, ignore, json, skips, specificItems),
682
+ elementsToMap(els2, ignore, json, skips, specificItems),
624
683
  ])
625
- : [await elementsToMap(els1, ignore, json, skips), {}];
684
+ : [await elementsToMap(els1, ignore, json, skips, specificItems), {}];
626
685
  const changes = [];
627
686
  function parseYaml(k, v) {
628
687
  if (k.endsWith(".script.yaml")) {
@@ -985,6 +1044,8 @@ async function buildTracker(changes) {
985
1044
  return tracker;
986
1045
  }
987
1046
  export async function pull(opts) {
1047
+ const originalCliOpts = { ...opts };
1048
+ opts = await mergeConfigWithConfigFile(opts);
988
1049
  // Validate branch configuration early
989
1050
  try {
990
1051
  await validateBranchConfiguration(false, opts.yes);
@@ -1002,9 +1063,11 @@ export async function pull(opts) {
1002
1063
  const workspace = await resolveWorkspace(opts);
1003
1064
  await requireLogin(opts);
1004
1065
  // Resolve effective sync options with branch awareness
1005
- const effectiveOpts = await resolveEffectiveSyncOptions(workspace, opts.promotion);
1066
+ const effectiveOpts = await resolveEffectiveSyncOptions(workspace, opts, opts.promotion);
1067
+ // Extract specific items configuration before merging overwrites gitBranches
1068
+ const specificItems = getSpecificItemsForCurrentBranch(opts);
1006
1069
  // Merge CLI flags with resolved settings (CLI flags take precedence only for explicit overrides)
1007
- opts = mergeCliWithEffectiveOptions(opts, effectiveOpts);
1070
+ opts = mergeCliWithEffectiveOptions(originalCliOpts, effectiveOpts);
1008
1071
  const codebases = await listSyncCodebases(opts);
1009
1072
  log.info(colors.gray("Computing the files to update locally to match remote (taking wmill.yaml into account)"));
1010
1073
  let resourceTypeToFormatExtension = {};
@@ -1020,7 +1083,7 @@ export async function pull(opts) {
1020
1083
  const local = !opts.stateful
1021
1084
  ? await FSFSElement(dntShim.Deno.cwd(), codebases, true)
1022
1085
  : await FSFSElement(path.join(dntShim.Deno.cwd(), ".wmill"), [], true);
1023
- const changes = await compareDynFSElement(remote, local, await ignoreF(opts), opts.json ?? false, opts, false, codebases, true);
1086
+ const changes = await compareDynFSElement(remote, local, await ignoreF(opts), opts.json ?? false, opts, false, codebases, true, specificItems);
1024
1087
  log.info(`remote (${workspace.name}) -> local: ${changes.length} changes to apply`);
1025
1088
  // Handle JSON output for dry-run
1026
1089
  if (opts.dryRun && opts.jsonOutput) {
@@ -1032,6 +1095,12 @@ export async function pull(opts) {
1032
1095
  ...(change.name === "edited" && change.codebase
1033
1096
  ? { codebase_changed: true }
1034
1097
  : {}),
1098
+ ...(specificItems && isSpecificItem(change.path, specificItems)
1099
+ ? {
1100
+ branch_specific: true,
1101
+ branch_specific_path: getBranchSpecificPath(change.path, specificItems)
1102
+ }
1103
+ : {}),
1035
1104
  })),
1036
1105
  total: changes.length,
1037
1106
  };
@@ -1040,7 +1109,7 @@ export async function pull(opts) {
1040
1109
  }
1041
1110
  if (changes.length > 0) {
1042
1111
  if (!opts.jsonOutput) {
1043
- prettyChanges(changes);
1112
+ prettyChanges(changes, specificItems);
1044
1113
  }
1045
1114
  if (opts.dryRun) {
1046
1115
  log.info(colors.gray(`Dry run complete.`));
@@ -1056,8 +1125,16 @@ export async function pull(opts) {
1056
1125
  const conflicts = [];
1057
1126
  log.info(colors.gray(`Applying changes to files ...`));
1058
1127
  for await (const change of changes) {
1059
- const target = path.join(dntShim.Deno.cwd(), change.path);
1060
- const stateTarget = path.join(dntShim.Deno.cwd(), ".wmill", change.path);
1128
+ // Determine if this file should be written to a branch-specific path
1129
+ let targetPath = change.path;
1130
+ if (specificItems && isSpecificItem(change.path, specificItems)) {
1131
+ const branchSpecificPath = getBranchSpecificPath(change.path, specificItems);
1132
+ if (branchSpecificPath) {
1133
+ targetPath = branchSpecificPath;
1134
+ }
1135
+ }
1136
+ const target = path.join(dntShim.Deno.cwd(), targetPath);
1137
+ const stateTarget = path.join(dntShim.Deno.cwd(), ".wmill", targetPath);
1061
1138
  if (change.name === "edited") {
1062
1139
  if (opts.stateful) {
1063
1140
  try {
@@ -1089,11 +1166,11 @@ export async function pull(opts) {
1089
1166
  }
1090
1167
  }
1091
1168
  if (exts.some((e) => change.path.endsWith(e))) {
1092
- log.info(`Editing script content of ${change.path}`);
1169
+ log.info(`Editing script content of ${targetPath}${targetPath !== change.path ? colors.gray(` (branch-specific override for ${change.path})`) : ""}`);
1093
1170
  }
1094
1171
  else if (change.path.endsWith(".yaml") ||
1095
1172
  change.path.endsWith(".json")) {
1096
- log.info(`Editing ${getTypeStrFromPath(change.path)} ${change.path}`);
1173
+ log.info(`Editing ${getTypeStrFromPath(change.path)} ${targetPath}${targetPath !== change.path ? colors.gray(` (branch-specific override for ${change.path})`) : ""}`);
1097
1174
  }
1098
1175
  await dntShim.Deno.writeTextFile(target, change.after);
1099
1176
  if (opts.stateful) {
@@ -1105,10 +1182,10 @@ export async function pull(opts) {
1105
1182
  await ensureDir(path.dirname(target));
1106
1183
  if (opts.stateful) {
1107
1184
  await ensureDir(path.dirname(stateTarget));
1108
- log.info(`Adding ${getTypeStrFromPath(change.path)} ${change.path}`);
1185
+ log.info(`Adding ${getTypeStrFromPath(change.path)} ${targetPath}${targetPath !== change.path ? colors.gray(` (branch-specific override for ${change.path})`) : ""}`);
1109
1186
  }
1110
1187
  await dntShim.Deno.writeTextFile(target, change.content);
1111
- log.info(`Writing ${getTypeStrFromPath(change.path)} ${change.path}`);
1188
+ log.info(`Writing ${getTypeStrFromPath(change.path)} ${targetPath}${targetPath !== change.path ? colors.gray(` (branch-specific override for ${change.path})`) : ""}`);
1112
1189
  if (opts.stateful) {
1113
1190
  await dntShim.Deno.copyFile(target, stateTarget);
1114
1191
  }
@@ -1166,6 +1243,12 @@ export async function pull(opts) {
1166
1243
  ...(change.name === "edited" && change.codebase
1167
1244
  ? { codebase_changed: true }
1168
1245
  : {}),
1246
+ ...(specificItems && isSpecificItem(change.path, specificItems)
1247
+ ? {
1248
+ branch_specific: true,
1249
+ branch_specific_path: getBranchSpecificPath(change.path, specificItems)
1250
+ }
1251
+ : {}),
1169
1252
  })),
1170
1253
  total: changes.length,
1171
1254
  };
@@ -1179,17 +1262,27 @@ export async function pull(opts) {
1179
1262
  console.log(JSON.stringify({ success: true, message: "No changes to apply", total: 0 }, null, 2));
1180
1263
  }
1181
1264
  }
1182
- function prettyChanges(changes) {
1265
+ function prettyChanges(changes, specificItems) {
1183
1266
  for (const change of changes) {
1267
+ let displayPath = change.path;
1268
+ let branchNote = "";
1269
+ // Check if this will be written as a branch-specific file
1270
+ if (specificItems && isSpecificItem(change.path, specificItems)) {
1271
+ const branchSpecificPath = getBranchSpecificPath(change.path, specificItems);
1272
+ if (branchSpecificPath) {
1273
+ displayPath = branchSpecificPath;
1274
+ branchNote = " (branch-specific)";
1275
+ }
1276
+ }
1184
1277
  if (change.name === "added") {
1185
- log.info(colors.green(`+ ${getTypeStrFromPath(change.path)} ` + change.path));
1278
+ log.info(colors.green(`+ ${getTypeStrFromPath(change.path)} ` + displayPath + colors.gray(branchNote)));
1186
1279
  }
1187
1280
  else if (change.name === "deleted") {
1188
- log.info(colors.red(`- ${getTypeStrFromPath(change.path)} ` + change.path));
1281
+ log.info(colors.red(`- ${getTypeStrFromPath(change.path)} ` + displayPath + colors.gray(branchNote)));
1189
1282
  }
1190
1283
  else if (change.name === "edited") {
1191
1284
  log.info(colors.yellow(`~ ${getTypeStrFromPath(change.path)} ` +
1192
- change.path +
1285
+ displayPath + colors.gray(branchNote) +
1193
1286
  (change.codebase ? ` (codebase changed)` : "")));
1194
1287
  if (change.before != change.after) {
1195
1288
  showDiff(change.before, change.after);
@@ -1222,6 +1315,10 @@ function removeSuffix(str, suffix) {
1222
1315
  return str.slice(0, str.length - suffix.length);
1223
1316
  }
1224
1317
  export async function push(opts) {
1318
+ // Save original CLI options before merging with config file
1319
+ const originalCliOpts = { ...opts };
1320
+ // Load configuration from wmill.yaml and merge with CLI options
1321
+ opts = await mergeConfigWithConfigFile(opts);
1225
1322
  // Validate branch configuration early
1226
1323
  try {
1227
1324
  await validateBranchConfiguration(false, opts.yes);
@@ -1236,9 +1333,11 @@ export async function push(opts) {
1236
1333
  const workspace = await resolveWorkspace(opts);
1237
1334
  await requireLogin(opts);
1238
1335
  // Resolve effective sync options with branch awareness
1239
- const effectiveOpts = await resolveEffectiveSyncOptions(workspace, opts.promotion);
1336
+ const effectiveOpts = await resolveEffectiveSyncOptions(workspace, opts, opts.promotion);
1337
+ // Extract specific items configuration BEFORE merging overwrites gitBranches
1338
+ const specificItems = getSpecificItemsForCurrentBranch(opts);
1240
1339
  // Merge CLI flags with resolved settings (CLI flags take precedence only for explicit overrides)
1241
- opts = mergeCliWithEffectiveOptions(opts, effectiveOpts);
1340
+ opts = mergeCliWithEffectiveOptions(originalCliOpts, effectiveOpts);
1242
1341
  const codebases = await listSyncCodebases(opts);
1243
1342
  if (opts.raw) {
1244
1343
  log.info("--raw is now the default, you can remove it as a flag");
@@ -1263,7 +1362,7 @@ export async function push(opts) {
1263
1362
  }
1264
1363
  const remote = ZipFSElement((await downloadZip(workspace, opts.plainSecrets, opts.skipVariables, opts.skipResources, opts.skipResourceTypes, opts.skipSecrets, opts.includeSchedules, opts.includeTriggers, opts.includeUsers, opts.includeGroups, opts.includeSettings, opts.includeKey, opts.defaultTs)), !opts.json, opts.defaultTs ?? "bun", resourceTypeToFormatExtension, false);
1265
1364
  const local = await FSFSElement(path.join(dntShim.Deno.cwd(), ""), codebases, false);
1266
- const changes = await compareDynFSElement(local, remote, await ignoreF(opts), opts.json ?? false, opts, true, codebases, false);
1365
+ const changes = await compareDynFSElement(local, remote, await ignoreF(opts), opts.json ?? false, opts, true, codebases, false, specificItems);
1267
1366
  const globalDeps = await findGlobalDeps();
1268
1367
  const tracker = await buildTracker(changes);
1269
1368
  const staleScripts = [];
@@ -1308,6 +1407,12 @@ export async function push(opts) {
1308
1407
  ...(change.name === "edited" && change.codebase
1309
1408
  ? { codebase_changed: true }
1310
1409
  : {}),
1410
+ ...(specificItems && isSpecificItem(change.path, specificItems)
1411
+ ? {
1412
+ branch_specific: true,
1413
+ branch_specific_path: getBranchSpecificPath(change.path, specificItems)
1414
+ }
1415
+ : {}),
1311
1416
  })),
1312
1417
  total: changes.length,
1313
1418
  };
@@ -1316,7 +1421,7 @@ export async function push(opts) {
1316
1421
  }
1317
1422
  if (changes.length > 0) {
1318
1423
  if (!opts.jsonOutput) {
1319
- prettyChanges(changes);
1424
+ prettyChanges(changes, specificItems);
1320
1425
  }
1321
1426
  if (opts.dryRun) {
1322
1427
  log.info(colors.gray(`Dry run complete.`));
@@ -1603,6 +1708,12 @@ export async function push(opts) {
1603
1708
  ...(change.name === "edited" && change.codebase
1604
1709
  ? { codebase_changed: true }
1605
1710
  : {}),
1711
+ ...(specificItems && isSpecificItem(change.path, specificItems)
1712
+ ? {
1713
+ branch_specific: true,
1714
+ branch_specific_path: getBranchSpecificPath(change.path, specificItems)
1715
+ }
1716
+ : {}),
1606
1717
  })),
1607
1718
  total: changes.length,
1608
1719
  duration_ms: Math.round(performance.now() - start),
@@ -279,27 +279,27 @@ async function bind(opts, bindWorkspace) {
279
279
  return;
280
280
  }
281
281
  // For unbind, check if branch exists
282
- if (!bindWorkspace && (!config.git_branches || !config.git_branches[branch])) {
283
- log.error(colors.red(`Branch '${branch}' not found in wmill.yaml git_branches`));
282
+ if (!bindWorkspace && (!config.gitBranches || !config.gitBranches[branch])) {
283
+ log.error(colors.red(`Branch '${branch}' not found in wmill.yaml gitBranches`));
284
284
  return;
285
285
  }
286
286
  // Update the branch configuration with workspace binding
287
- if (!config.git_branches) {
288
- config.git_branches = {};
287
+ if (!config.gitBranches) {
288
+ config.gitBranches = {};
289
289
  }
290
- if (!config.git_branches[branch]) {
291
- config.git_branches[branch] = { overrides: {} };
290
+ if (!config.gitBranches[branch]) {
291
+ config.gitBranches[branch] = { overrides: {} };
292
292
  }
293
293
  if (bindWorkspace && activeWorkspace) {
294
- config.git_branches[branch].baseUrl = activeWorkspace.remote;
295
- config.git_branches[branch].workspaceId = activeWorkspace.workspaceId;
294
+ config.gitBranches[branch].baseUrl = activeWorkspace.remote;
295
+ config.gitBranches[branch].workspaceId = activeWorkspace.workspaceId;
296
296
  log.info(colors.green(`✓ Bound branch '${branch}' to workspace '${activeWorkspace.name}'\n` +
297
297
  ` ${activeWorkspace.workspaceId} on ${activeWorkspace.remote}`));
298
298
  }
299
299
  else {
300
300
  // Unbind
301
- delete config.git_branches[branch].baseUrl;
302
- delete config.git_branches[branch].workspaceId;
301
+ delete config.gitBranches[branch].baseUrl;
302
+ delete config.gitBranches[branch].workspaceId;
303
303
  log.info(colors.green(`✓ Removed workspace binding from branch '${branch}'`));
304
304
  }
305
305
  // Write back the updated config
@@ -1,13 +1,80 @@
1
1
  import * as dntShim from "../../_dnt.shims.js";
2
2
  import { log, yamlParseFile, Confirm, yamlStringify } from "../../deps.js";
3
3
  import { getCurrentGitBranch, isGitRepository } from "../utils/git.js";
4
+ import { join, dirname, resolve, relative } from "node:path";
5
+ import { existsSync } from "node:fs";
6
+ import { execSync } from "node:child_process";
4
7
  export let showDiffs = false;
5
8
  export function setShowDiffs(value) {
6
9
  showDiffs = value;
7
10
  }
11
+ function getGitRepoRoot() {
12
+ try {
13
+ const result = execSync("git rev-parse --show-toplevel", {
14
+ encoding: "utf8",
15
+ stdio: "pipe"
16
+ });
17
+ return result.trim();
18
+ }
19
+ catch (error) {
20
+ return null;
21
+ }
22
+ }
23
+ function findWmillYaml() {
24
+ const startDir = resolve(dntShim.Deno.cwd());
25
+ const isInGitRepo = isGitRepository();
26
+ // If not in git repo, only check current directory
27
+ if (!isInGitRepo) {
28
+ const wmillYamlPath = join(startDir, "wmill.yaml");
29
+ return existsSync(wmillYamlPath) ? wmillYamlPath : null;
30
+ }
31
+ // If in git repo, search up to git repository root
32
+ const gitRoot = getGitRepoRoot();
33
+ let currentDir = startDir;
34
+ let foundPath = null;
35
+ while (true) {
36
+ const wmillYamlPath = join(currentDir, "wmill.yaml");
37
+ if (existsSync(wmillYamlPath)) {
38
+ foundPath = wmillYamlPath;
39
+ break;
40
+ }
41
+ // Check if we've reached the git repository root
42
+ if (gitRoot && resolve(currentDir) === resolve(gitRoot)) {
43
+ break;
44
+ }
45
+ // Check if we've reached the filesystem root
46
+ const parentDir = dirname(currentDir);
47
+ if (parentDir === currentDir) {
48
+ break;
49
+ }
50
+ currentDir = parentDir;
51
+ }
52
+ // If wmill.yaml was found in a parent directory, warn the user and change working directory
53
+ if (foundPath && resolve(dirname(foundPath)) !== resolve(startDir)) {
54
+ const configDir = dirname(foundPath);
55
+ const relativePath = relative(startDir, foundPath);
56
+ log.warn(`⚠️ wmill.yaml found in parent directory: ${relativePath}`);
57
+ // Change working directory to where wmill.yaml was found
58
+ dntShim.Deno.chdir(configDir);
59
+ log.info(`📁 Changed working directory to: ${configDir}`);
60
+ }
61
+ return foundPath;
62
+ }
63
+ export function getWmillYamlPath() {
64
+ return findWmillYaml();
65
+ }
8
66
  export async function readConfigFile() {
9
67
  try {
10
- const conf = (await yamlParseFile("wmill.yaml"));
68
+ // First, try to find wmill.yaml recursively
69
+ const wmillYamlPath = findWmillYaml();
70
+ if (!wmillYamlPath) {
71
+ log.warn("No wmill.yaml found. Use 'wmill init' to bootstrap it. Using 'bun' as default typescript runtime.");
72
+ return {};
73
+ }
74
+ const conf = (await yamlParseFile(wmillYamlPath));
75
+ // Handle legacy format migrations (combine overrides and git_branches)
76
+ let needsConfigWrite = false;
77
+ const migrationMessages = [];
11
78
  // Handle obsolete overrides format
12
79
  if (conf && 'overrides' in conf) {
13
80
  const overrides = conf.overrides;
@@ -18,17 +85,55 @@ export async function readConfigFile() {
18
85
  " Please delete your wmill.yaml and run 'wmill init' to recreate it with the new format.");
19
86
  }
20
87
  else {
21
- // Remove empty overrides with a note
22
- log.info("ℹ️ Removing empty 'overrides: {}' from wmill.yaml (migrated to git_branches format)");
88
+ // Remove empty overrides
23
89
  delete conf.overrides;
24
- // Write the updated config back to file
25
- try {
26
- await dntShim.Deno.writeTextFile("wmill.yaml", yamlStringify(conf));
90
+ needsConfigWrite = true;
91
+ migrationMessages.push("ℹ️ Removing empty 'overrides: {}' from wmill.yaml (migrated to gitBranches format)");
92
+ }
93
+ }
94
+ // Handle git_branches to gitBranches migration
95
+ if (conf && 'git_branches' in conf) {
96
+ if (!conf.gitBranches) {
97
+ // Deep copy git_branches to gitBranches (even if empty)
98
+ conf.gitBranches = JSON.parse(JSON.stringify(conf.git_branches));
99
+ needsConfigWrite = true;
100
+ migrationMessages.push("⚠️ Migrating 'git_branches' to 'gitBranches' (camelCase). The snake_case format is deprecated.");
101
+ migrationMessages.push("✅ Successfully migrated 'git_branches' to 'gitBranches' in wmill.yaml");
102
+ }
103
+ else {
104
+ migrationMessages.push("⚠️ Both 'git_branches' and 'gitBranches' found in wmill.yaml. Using 'gitBranches' and ignoring 'git_branches'.");
105
+ }
106
+ // Always remove the old field from config object (both file and memory)
107
+ delete conf.git_branches;
108
+ }
109
+ // Perform single atomic write if any migrations are needed
110
+ if (needsConfigWrite) {
111
+ try {
112
+ await dntShim.Deno.writeTextFile(wmillYamlPath, yamlStringify(conf));
113
+ // Log all migration messages after successful write
114
+ migrationMessages.forEach(msg => {
115
+ if (msg.startsWith('⚠️')) {
116
+ log.warn(msg);
117
+ }
118
+ else {
119
+ log.info(msg);
120
+ }
121
+ });
122
+ }
123
+ catch (error) {
124
+ log.warn(`Could not update wmill.yaml to apply migrations: ${error instanceof Error ? error.message : error}`);
125
+ }
126
+ }
127
+ else if (migrationMessages.length > 0) {
128
+ // Log messages for non-write cases (like "both found")
129
+ migrationMessages.forEach(msg => {
130
+ if (msg.startsWith('⚠️')) {
131
+ log.warn(msg);
27
132
  }
28
- catch (error) {
29
- log.warn(`Could not update wmill.yaml to remove empty overrides: ${error instanceof Error ? error.message : error}`);
133
+ else {
134
+ log.info(msg);
30
135
  }
31
- }
136
+ });
32
137
  }
33
138
  if (conf?.defaultTs == undefined) {
34
139
  log.warn("No defaultTs defined in your wmill.yaml. Using 'bun' as default.");
@@ -39,8 +144,19 @@ export async function readConfigFile() {
39
144
  if (e instanceof Error && (e.message.includes("overrides") || e.message.includes("Obsolete configuration format"))) {
40
145
  throw e; // Re-throw the specific obsolete format error
41
146
  }
42
- log.warn("No wmill.yaml found. Use 'wmill init' to bootstrap it. Using 'bun' as default typescript runtime.");
43
- return {};
147
+ // Since we already found the file path, this is likely a parsing or access error
148
+ if (e instanceof Error && e.message.includes("Error parsing yaml")) {
149
+ const yamlError = e.cause instanceof Error ? e.cause.message : String(e.cause);
150
+ throw new Error("❌ YAML syntax error in wmill.yaml:\n" +
151
+ " " + yamlError + "\n" +
152
+ " Please fix the YAML syntax in wmill.yaml or delete the file to start fresh.");
153
+ }
154
+ else {
155
+ // File exists but has other issues (permissions, etc.)
156
+ throw new Error("❌ Failed to read wmill.yaml:\n" +
157
+ " " + (e instanceof Error ? e.message : String(e)) + "\n" +
158
+ " Please check file permissions or fix the syntax.");
159
+ }
44
160
  }
45
161
  }
46
162
  // Default sync options - shared across the codebase to prevent duplication
@@ -74,33 +190,40 @@ export async function validateBranchConfiguration(skipValidation, autoAccept) {
74
190
  return;
75
191
  }
76
192
  const config = await readConfigFile();
77
- const { git_branches } = config;
193
+ const { gitBranches } = config;
78
194
  const currentBranch = getCurrentGitBranch();
79
- // In a git repository, git_branches section is recommended
80
- if (!git_branches || Object.keys(git_branches).length === 0) {
81
- log.warn("⚠️ WARNING: In a Git repository, the 'git_branches' section is recommended in wmill.yaml.\n" +
82
- " Consider adding a git_branches section with configuration for your Git branches.\n" +
195
+ // In a git repository, gitBranches section is recommended
196
+ if (!gitBranches || Object.keys(gitBranches).length === 0) {
197
+ log.warn("⚠️ WARNING: In a Git repository, the 'gitBranches' section is recommended in wmill.yaml.\n" +
198
+ " Consider adding a gitBranches section with configuration for your Git branches.\n" +
83
199
  " Run 'wmill init' to recreate the configuration file with proper branch setup.");
84
200
  return;
85
201
  }
86
- // Current branch must be defined in git_branches config
87
- if (currentBranch && !git_branches[currentBranch]) {
202
+ // Current branch must be defined in gitBranches config
203
+ if (currentBranch && !gitBranches[currentBranch]) {
88
204
  // In interactive mode, offer to create the branch
89
205
  if (dntShim.Deno.stdin.isTerminal()) {
90
- const availableBranches = Object.keys(git_branches).join(', ');
91
- log.info(`Current Git branch '${currentBranch}' is not defined in the git_branches configuration.\n` +
206
+ const availableBranches = Object.keys(gitBranches).join(', ');
207
+ log.info(`Current Git branch '${currentBranch}' is not defined in the gitBranches configuration.\n` +
92
208
  `Available branches: ${availableBranches}`);
93
209
  const shouldCreate = autoAccept || await Confirm.prompt({
94
210
  message: `Create empty branch configuration for '${currentBranch}'?`,
95
211
  default: true,
96
212
  });
97
213
  if (shouldCreate) {
214
+ // Warn if branch name contains filesystem-unsafe characters
215
+ if (/[\/\\:*?"<>|.]/.test(currentBranch)) {
216
+ const sanitizedBranchName = currentBranch.replace(/[\/\\:*?"<>|.]/g, '_');
217
+ log.warn(`⚠️ WARNING: Branch name "${currentBranch}" contains filesystem-unsafe characters (/ \\ : * ? " < > | .).`);
218
+ log.warn(` Branch-specific files will be saved with sanitized name: "${sanitizedBranchName}"`);
219
+ log.warn(` Example: "file.variable.yaml" → "file.${sanitizedBranchName}.variable.yaml"`);
220
+ }
98
221
  // Read current config, add branch, and write it back
99
222
  const currentConfig = await readConfigFile();
100
- if (!currentConfig.git_branches) {
101
- currentConfig.git_branches = {};
223
+ if (!currentConfig.gitBranches) {
224
+ currentConfig.gitBranches = {};
102
225
  }
103
- currentConfig.git_branches[currentBranch] = { overrides: {} };
226
+ currentConfig.gitBranches[currentBranch] = { overrides: {} };
104
227
  await dntShim.Deno.writeTextFile("wmill.yaml", yamlStringify(currentConfig));
105
228
  log.info(`✅ Created empty branch configuration for '${currentBranch}'`);
106
229
  }
@@ -110,9 +233,15 @@ export async function validateBranchConfiguration(skipValidation, autoAccept) {
110
233
  }
111
234
  }
112
235
  else {
113
- log.warn(`⚠️ WARNING: Current Git branch '${currentBranch}' is not defined in the git_branches configuration.\n` +
114
- ` Consider adding configuration for branch '${currentBranch}' in the git_branches section of wmill.yaml.\n` +
115
- ` Available branches: ${Object.keys(git_branches).join(', ')}`);
236
+ // Warn about filesystem-unsafe characters in branch name
237
+ if (/[\/\\:*?"<>|.]/.test(currentBranch)) {
238
+ const sanitizedBranchName = currentBranch.replace(/[\/\\:*?"<>|.]/g, '_');
239
+ log.warn(`⚠️ WARNING: Branch name "${currentBranch}" contains filesystem-unsafe characters (/ \\ : * ? " < > | .).`);
240
+ log.warn(` Branch-specific files will use sanitized name: "${sanitizedBranchName}"`);
241
+ }
242
+ log.warn(`⚠️ WARNING: Current Git branch '${currentBranch}' is not defined in the gitBranches configuration.\n` +
243
+ ` Consider adding configuration for branch '${currentBranch}' in the gitBranches section of wmill.yaml.\n` +
244
+ ` Available branches: ${Object.keys(gitBranches).join(', ')}`);
116
245
  return;
117
246
  }
118
247
  }
@@ -120,13 +249,13 @@ export async function validateBranchConfiguration(skipValidation, autoAccept) {
120
249
  // Get effective settings by merging top-level settings with branch-specific overrides
121
250
  export async function getEffectiveSettings(config, promotion, skipBranchValidation, suppressLogs) {
122
251
  // Start with top-level settings from config
123
- const { git_branches, ...topLevelSettings } = config;
252
+ const { gitBranches, ...topLevelSettings } = config;
124
253
  let effective = { ...topLevelSettings };
125
254
  if (isGitRepository()) {
126
255
  const currentBranch = getCurrentGitBranch();
127
256
  // If promotion is specified, use that branch's promotionOverrides or overrides
128
- if (promotion && git_branches && git_branches[promotion]) {
129
- const targetBranch = git_branches[promotion];
257
+ if (promotion && gitBranches && gitBranches[promotion]) {
258
+ const targetBranch = gitBranches[promotion];
130
259
  // First try promotionOverrides, then fall back to overrides
131
260
  if (targetBranch.promotionOverrides) {
132
261
  Object.assign(effective, targetBranch.promotionOverrides);
@@ -145,8 +274,8 @@ export async function getEffectiveSettings(config, promotion, skipBranchValidati
145
274
  }
146
275
  }
147
276
  // Otherwise use current branch overrides (existing behavior)
148
- else if (currentBranch && git_branches && git_branches[currentBranch] && git_branches[currentBranch].overrides) {
149
- Object.assign(effective, git_branches[currentBranch].overrides);
277
+ else if (currentBranch && gitBranches && gitBranches[currentBranch] && gitBranches[currentBranch].overrides) {
278
+ Object.assign(effective, gitBranches[currentBranch].overrides);
150
279
  if (!suppressLogs) {
151
280
  log.info(`Applied settings for Git branch: ${currentBranch}`);
152
281
  }
@@ -79,7 +79,7 @@ async function tryResolveBranchWorkspace(opts) {
79
79
  }
80
80
  // Read wmill.yaml to check for branch workspace configuration
81
81
  const config = await readConfigFile();
82
- const branchConfig = config.git_branches?.[currentBranch];
82
+ const branchConfig = config.gitBranches?.[currentBranch];
83
83
  // Check if branch has workspace configuration
84
84
  if (!branchConfig?.baseUrl || !branchConfig?.workspaceId) {
85
85
  return undefined;