@dev-sergeev/datalab-kit 0.1.1 → 0.1.3

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 (339) hide show
  1. package/CHANGELOG.md +14 -0
  2. package/README.md +26 -8
  3. package/THIRD_PARTY_NOTICES.md +6 -2
  4. package/dist/extension.js +8 -1
  5. package/dist/recap.d.ts +2 -0
  6. package/dist/recap.js +31 -0
  7. package/docs/adr/0002-package-delivery.md +2 -0
  8. package/node_modules/@gotgenes/pi-permission-system/src/authority/permission-prompt-component.ts +0 -11
  9. package/node_modules/@gotgenes/pi-permission-system/src/config/config-store.ts +0 -5
  10. package/node_modules/@gotgenes/pi-permission-system/src/index.ts +3 -15
  11. package/node_modules/@pi-plugins/elapsed/LICENSE +21 -0
  12. package/node_modules/@pi-plugins/elapsed/README.md +45 -0
  13. package/node_modules/@pi-plugins/elapsed/dist/index.d.mts +8 -0
  14. package/node_modules/@pi-plugins/elapsed/dist/index.d.mts.map +1 -0
  15. package/node_modules/@pi-plugins/elapsed/dist/index.mjs +47 -0
  16. package/node_modules/@pi-plugins/elapsed/dist/index.mjs.map +1 -0
  17. package/node_modules/@pi-plugins/elapsed/package.json +65 -0
  18. package/node_modules/@tifan/pi-recap/README.md +61 -0
  19. package/node_modules/@tifan/pi-recap/package.json +43 -0
  20. package/node_modules/@tifan/pi-recap/src/index.ts +584 -0
  21. package/node_modules/@tifan/pi-recap/src/model-picker.ts +233 -0
  22. package/node_modules/@tifan/pi-recap/src/models.ts +183 -0
  23. package/node_modules/@tifan/pi-recap/src/sanitize.ts +119 -0
  24. package/node_modules/@tifan/pi-recap/src/tui.ts +155 -0
  25. package/node_modules/@zigai/pi-extension-internals/README.md +24 -0
  26. package/node_modules/@zigai/pi-extension-internals/dist/editor-enhancer-registry.d.ts +21 -0
  27. package/node_modules/@zigai/pi-extension-internals/dist/editor-enhancer-registry.js +233 -0
  28. package/node_modules/@zigai/pi-extension-internals/dist/index.d.ts +6 -0
  29. package/node_modules/@zigai/pi-extension-internals/dist/index.js +3 -0
  30. package/node_modules/@zigai/pi-extension-internals/dist/linked-method-patch.d.ts +34 -0
  31. package/node_modules/@zigai/pi-extension-internals/dist/linked-method-patch.js +272 -0
  32. package/node_modules/@zigai/pi-extension-internals/dist/pi-internal-import.d.ts +11 -0
  33. package/node_modules/@zigai/pi-extension-internals/dist/pi-internal-import.js +139 -0
  34. package/node_modules/@zigai/pi-extension-internals/package.json +41 -0
  35. package/node_modules/@zigai/pi-extension-settings/LICENSE +21 -0
  36. package/node_modules/@zigai/pi-extension-settings/README.md +36 -0
  37. package/node_modules/@zigai/pi-extension-settings/dist/artifacts.d.ts +23 -0
  38. package/node_modules/@zigai/pi-extension-settings/dist/artifacts.d.ts.map +1 -0
  39. package/node_modules/@zigai/pi-extension-settings/dist/artifacts.js +75 -0
  40. package/node_modules/@zigai/pi-extension-settings/dist/artifacts.js.map +1 -0
  41. package/node_modules/@zigai/pi-extension-settings/dist/cli-entry.d.ts +3 -0
  42. package/node_modules/@zigai/pi-extension-settings/dist/cli-entry.d.ts.map +1 -0
  43. package/node_modules/@zigai/pi-extension-settings/dist/cli-entry.js +5 -0
  44. package/node_modules/@zigai/pi-extension-settings/dist/cli-entry.js.map +1 -0
  45. package/node_modules/@zigai/pi-extension-settings/dist/cli.d.ts +6 -0
  46. package/node_modules/@zigai/pi-extension-settings/dist/cli.d.ts.map +1 -0
  47. package/node_modules/@zigai/pi-extension-settings/dist/cli.js +87 -0
  48. package/node_modules/@zigai/pi-extension-settings/dist/cli.js.map +1 -0
  49. package/node_modules/@zigai/pi-extension-settings/dist/definition-marker.d.ts +2 -0
  50. package/node_modules/@zigai/pi-extension-settings/dist/definition-marker.d.ts.map +1 -0
  51. package/node_modules/@zigai/pi-extension-settings/dist/definition-marker.js +2 -0
  52. package/node_modules/@zigai/pi-extension-settings/dist/definition-marker.js.map +1 -0
  53. package/node_modules/@zigai/pi-extension-settings/dist/definition.d.ts +159 -0
  54. package/node_modules/@zigai/pi-extension-settings/dist/definition.d.ts.map +1 -0
  55. package/node_modules/@zigai/pi-extension-settings/dist/definition.js +248 -0
  56. package/node_modules/@zigai/pi-extension-settings/dist/definition.js.map +1 -0
  57. package/node_modules/@zigai/pi-extension-settings/dist/file-system.d.ts +10 -0
  58. package/node_modules/@zigai/pi-extension-settings/dist/file-system.d.ts.map +1 -0
  59. package/node_modules/@zigai/pi-extension-settings/dist/file-system.js +115 -0
  60. package/node_modules/@zigai/pi-extension-settings/dist/file-system.js.map +1 -0
  61. package/node_modules/@zigai/pi-extension-settings/dist/index.d.ts +2 -0
  62. package/node_modules/@zigai/pi-extension-settings/dist/index.d.ts.map +1 -0
  63. package/node_modules/@zigai/pi-extension-settings/dist/index.js +2 -0
  64. package/node_modules/@zigai/pi-extension-settings/dist/index.js.map +1 -0
  65. package/node_modules/@zigai/pi-extension-settings/dist/json-value.d.ts +18 -0
  66. package/node_modules/@zigai/pi-extension-settings/dist/json-value.d.ts.map +1 -0
  67. package/node_modules/@zigai/pi-extension-settings/dist/json-value.js +56 -0
  68. package/node_modules/@zigai/pi-extension-settings/dist/json-value.js.map +1 -0
  69. package/node_modules/@zigai/pi-extension-settings/dist/paths.d.ts +11 -0
  70. package/node_modules/@zigai/pi-extension-settings/dist/paths.d.ts.map +1 -0
  71. package/node_modules/@zigai/pi-extension-settings/dist/paths.js +23 -0
  72. package/node_modules/@zigai/pi-extension-settings/dist/paths.js.map +1 -0
  73. package/node_modules/@zigai/pi-extension-settings/dist/pi-host-paths.d.ts +5 -0
  74. package/node_modules/@zigai/pi-extension-settings/dist/pi-host-paths.d.ts.map +1 -0
  75. package/node_modules/@zigai/pi-extension-settings/dist/pi-host-paths.js +21 -0
  76. package/node_modules/@zigai/pi-extension-settings/dist/pi-host-paths.js.map +1 -0
  77. package/node_modules/@zigai/pi-extension-settings/dist/pi.d.ts +106 -0
  78. package/node_modules/@zigai/pi-extension-settings/dist/pi.d.ts.map +1 -0
  79. package/node_modules/@zigai/pi-extension-settings/dist/pi.js +122 -0
  80. package/node_modules/@zigai/pi-extension-settings/dist/pi.js.map +1 -0
  81. package/node_modules/@zigai/pi-extension-settings/dist/pi.ts +2537 -0
  82. package/node_modules/@zigai/pi-extension-settings/dist/pi.ts.map +7 -0
  83. package/node_modules/@zigai/pi-extension-settings/dist/projects.d.ts +10 -0
  84. package/node_modules/@zigai/pi-extension-settings/dist/projects.d.ts.map +1 -0
  85. package/node_modules/@zigai/pi-extension-settings/dist/projects.js +177 -0
  86. package/node_modules/@zigai/pi-extension-settings/dist/projects.js.map +1 -0
  87. package/node_modules/@zigai/pi-extension-settings/dist/runtime.d.ts +40 -0
  88. package/node_modules/@zigai/pi-extension-settings/dist/runtime.d.ts.map +1 -0
  89. package/node_modules/@zigai/pi-extension-settings/dist/runtime.js +158 -0
  90. package/node_modules/@zigai/pi-extension-settings/dist/runtime.js.map +1 -0
  91. package/node_modules/@zigai/pi-extension-settings/dist/runtime.ts +158 -0
  92. package/node_modules/@zigai/pi-extension-settings/dist/runtime.ts.map +7 -0
  93. package/node_modules/@zigai/pi-extension-settings/dist/schema-document.d.ts +19 -0
  94. package/node_modules/@zigai/pi-extension-settings/dist/schema-document.d.ts.map +1 -0
  95. package/node_modules/@zigai/pi-extension-settings/dist/schema-document.js +168 -0
  96. package/node_modules/@zigai/pi-extension-settings/dist/schema-document.js.map +1 -0
  97. package/node_modules/@zigai/pi-extension-settings/dist/settings-documentation.d.ts +9 -0
  98. package/node_modules/@zigai/pi-extension-settings/dist/settings-documentation.d.ts.map +1 -0
  99. package/node_modules/@zigai/pi-extension-settings/dist/settings-documentation.js +242 -0
  100. package/node_modules/@zigai/pi-extension-settings/dist/settings-documentation.js.map +1 -0
  101. package/node_modules/@zigai/pi-extension-settings/dist/settings-layer.d.ts +59 -0
  102. package/node_modules/@zigai/pi-extension-settings/dist/settings-layer.d.ts.map +1 -0
  103. package/node_modules/@zigai/pi-extension-settings/dist/settings-layer.js +98 -0
  104. package/node_modules/@zigai/pi-extension-settings/dist/settings-layer.js.map +1 -0
  105. package/node_modules/@zigai/pi-extension-settings/dist/settings-loader.d.ts +80 -0
  106. package/node_modules/@zigai/pi-extension-settings/dist/settings-loader.d.ts.map +1 -0
  107. package/node_modules/@zigai/pi-extension-settings/dist/settings-loader.js +144 -0
  108. package/node_modules/@zigai/pi-extension-settings/dist/settings-loader.js.map +1 -0
  109. package/node_modules/@zigai/pi-extension-settings/dist/settings-merge.d.ts +5 -0
  110. package/node_modules/@zigai/pi-extension-settings/dist/settings-merge.d.ts.map +1 -0
  111. package/node_modules/@zigai/pi-extension-settings/dist/settings-merge.js +30 -0
  112. package/node_modules/@zigai/pi-extension-settings/dist/settings-merge.js.map +1 -0
  113. package/node_modules/@zigai/pi-extension-settings/dist/settings-revision.d.ts +10 -0
  114. package/node_modules/@zigai/pi-extension-settings/dist/settings-revision.d.ts.map +1 -0
  115. package/node_modules/@zigai/pi-extension-settings/dist/settings-revision.js +16 -0
  116. package/node_modules/@zigai/pi-extension-settings/dist/settings-revision.js.map +1 -0
  117. package/node_modules/@zigai/pi-extension-settings/dist/settings-transaction.d.ts +54 -0
  118. package/node_modules/@zigai/pi-extension-settings/dist/settings-transaction.d.ts.map +1 -0
  119. package/node_modules/@zigai/pi-extension-settings/dist/settings-transaction.js +202 -0
  120. package/node_modules/@zigai/pi-extension-settings/dist/settings-transaction.js.map +1 -0
  121. package/node_modules/@zigai/pi-extension-settings/dist/typebox-runtime.d.ts +5 -0
  122. package/node_modules/@zigai/pi-extension-settings/dist/typebox-runtime.d.ts.map +1 -0
  123. package/node_modules/@zigai/pi-extension-settings/dist/typebox-runtime.js +9 -0
  124. package/node_modules/@zigai/pi-extension-settings/dist/typebox-runtime.js.map +1 -0
  125. package/node_modules/@zigai/pi-extension-settings/docs/generation.md +71 -0
  126. package/node_modules/@zigai/pi-extension-settings/docs/manual-setup.md +98 -0
  127. package/node_modules/@zigai/pi-extension-settings/docs/runtime.md +100 -0
  128. package/node_modules/@zigai/pi-extension-settings/docs/ui-controls.md +31 -0
  129. package/node_modules/@zigai/pi-extension-settings/package.json +97 -0
  130. package/node_modules/@zigai/pi-mention-anything/README.md +113 -0
  131. package/node_modules/@zigai/pi-mention-anything/config.schema.json +313 -0
  132. package/node_modules/@zigai/pi-mention-anything/docs/command-protocol.md +106 -0
  133. package/node_modules/@zigai/pi-mention-anything/docs/providers.md +128 -0
  134. package/node_modules/@zigai/pi-mention-anything/examples/query-command.mjs +96 -0
  135. package/node_modules/@zigai/pi-mention-anything/examples/recursive-tree.ts +28 -0
  136. package/node_modules/@zigai/pi-mention-anything/examples/static.ts +28 -0
  137. package/node_modules/@zigai/pi-mention-anything/examples/tmux.ts +90 -0
  138. package/node_modules/@zigai/pi-mention-anything/examples/tree-settings.json +25 -0
  139. package/node_modules/@zigai/pi-mention-anything/package.json +58 -0
  140. package/node_modules/@zigai/pi-mention-anything/src/api.ts +75 -0
  141. package/node_modules/@zigai/pi-mention-anything/src/autocomplete.ts +231 -0
  142. package/node_modules/@zigai/pi-mention-anything/src/chain-autocomplete.ts +596 -0
  143. package/node_modules/@zigai/pi-mention-anything/src/chain-syntax.ts +345 -0
  144. package/node_modules/@zigai/pi-mention-anything/src/command-provider.ts +291 -0
  145. package/node_modules/@zigai/pi-mention-anything/src/configured-source.ts +66 -0
  146. package/node_modules/@zigai/pi-mention-anything/src/editor.ts +180 -0
  147. package/node_modules/@zigai/pi-mention-anything/src/expand-mentions.ts +162 -0
  148. package/node_modules/@zigai/pi-mention-anything/src/index.ts +54 -0
  149. package/node_modules/@zigai/pi-mention-anything/src/initial-suggestions.ts +190 -0
  150. package/node_modules/@zigai/pi-mention-anything/src/list-provider.ts +71 -0
  151. package/node_modules/@zigai/pi-mention-anything/src/mention-hub.ts +307 -0
  152. package/node_modules/@zigai/pi-mention-anything/src/mention-resolution.ts +374 -0
  153. package/node_modules/@zigai/pi-mention-anything/src/mention-syntax.ts +105 -0
  154. package/node_modules/@zigai/pi-mention-anything/src/register-mention.ts +89 -0
  155. package/node_modules/@zigai/pi-mention-anything/src/rendering.ts +53 -0
  156. package/node_modules/@zigai/pi-mention-anything/src/selected-items.ts +21 -0
  157. package/node_modules/@zigai/pi-mention-anything/src/selection-history.ts +135 -0
  158. package/node_modules/@zigai/pi-mention-anything/src/settings-input.ts +317 -0
  159. package/node_modules/@zigai/pi-mention-anything/src/settings.prevalidated.ts +57 -0
  160. package/node_modules/@zigai/pi-mention-anything/src/settings.ts +52 -0
  161. package/node_modules/@zigai/pi-mention-anything/src/source-contract.ts +174 -0
  162. package/node_modules/@zigai/pi-mention-anything/src/source-controller.ts +1070 -0
  163. package/node_modules/@zigai/pi-mention-anything/src/source-runtime.ts +99 -0
  164. package/node_modules/@zigai/pi-mention-skill/README.md +60 -0
  165. package/node_modules/@zigai/pi-mention-skill/config.schema.json +81 -0
  166. package/node_modules/@zigai/pi-mention-skill/package.json +56 -0
  167. package/node_modules/@zigai/pi-mention-skill/src/index.ts +60 -0
  168. package/node_modules/@zigai/pi-mention-skill/src/settings-input.ts +74 -0
  169. package/node_modules/@zigai/pi-mention-skill/src/settings.prevalidated.ts +18 -0
  170. package/node_modules/@zigai/pi-mention-skill/src/settings.ts +54 -0
  171. package/node_modules/@zigai/pi-mention-skill/src/skill-commands.ts +18 -0
  172. package/node_modules/@zigai/pi-mention-skill/src/skill-content.ts +60 -0
  173. package/node_modules/@zigai/pi-mention-skill/src/skill-provider.ts +105 -0
  174. package/node_modules/@zigai/pi-mention-skill/src/slash-skill-filter.ts +29 -0
  175. package/node_modules/argparse/LICENSE +21 -0
  176. package/node_modules/argparse/README.md +257 -0
  177. package/node_modules/argparse/index.js +3 -0
  178. package/node_modules/argparse/lib/action/append/constant.js +47 -0
  179. package/node_modules/argparse/lib/action/append.js +53 -0
  180. package/node_modules/argparse/lib/action/count.js +40 -0
  181. package/node_modules/argparse/lib/action/help.js +47 -0
  182. package/node_modules/argparse/lib/action/store/constant.js +43 -0
  183. package/node_modules/argparse/lib/action/store/false.js +27 -0
  184. package/node_modules/argparse/lib/action/store/true.js +26 -0
  185. package/node_modules/argparse/lib/action/store.js +50 -0
  186. package/node_modules/argparse/lib/action/subparsers.js +149 -0
  187. package/node_modules/argparse/lib/action/version.js +47 -0
  188. package/node_modules/argparse/lib/action.js +146 -0
  189. package/node_modules/argparse/lib/action_container.js +482 -0
  190. package/node_modules/argparse/lib/argparse.js +14 -0
  191. package/node_modules/argparse/lib/argument/error.js +50 -0
  192. package/node_modules/argparse/lib/argument/exclusive.js +54 -0
  193. package/node_modules/argparse/lib/argument/group.js +75 -0
  194. package/node_modules/argparse/lib/argument_parser.js +1161 -0
  195. package/node_modules/argparse/lib/const.js +21 -0
  196. package/node_modules/argparse/lib/help/added_formatters.js +87 -0
  197. package/node_modules/argparse/lib/help/formatter.js +795 -0
  198. package/node_modules/argparse/lib/namespace.js +76 -0
  199. package/node_modules/argparse/lib/utils.js +57 -0
  200. package/node_modules/argparse/package.json +34 -0
  201. package/node_modules/esprima/LICENSE.BSD +21 -0
  202. package/node_modules/esprima/README.md +46 -0
  203. package/node_modules/esprima/bin/esparse.js +139 -0
  204. package/node_modules/esprima/bin/esvalidate.js +236 -0
  205. package/node_modules/esprima/dist/esprima.js +6709 -0
  206. package/node_modules/esprima/package.json +112 -0
  207. package/node_modules/extend-shallow/LICENSE +21 -0
  208. package/node_modules/extend-shallow/README.md +61 -0
  209. package/node_modules/extend-shallow/index.js +33 -0
  210. package/node_modules/extend-shallow/package.json +56 -0
  211. package/node_modules/graceful-fs/LICENSE +15 -0
  212. package/node_modules/graceful-fs/README.md +143 -0
  213. package/node_modules/graceful-fs/clone.js +23 -0
  214. package/node_modules/graceful-fs/graceful-fs.js +448 -0
  215. package/node_modules/graceful-fs/legacy-streams.js +118 -0
  216. package/node_modules/graceful-fs/package.json +53 -0
  217. package/node_modules/graceful-fs/polyfills.js +355 -0
  218. package/node_modules/gray-matter/LICENSE +21 -0
  219. package/node_modules/gray-matter/README.md +565 -0
  220. package/node_modules/gray-matter/gray-matter.d.ts +114 -0
  221. package/node_modules/gray-matter/index.js +228 -0
  222. package/node_modules/gray-matter/lib/defaults.js +18 -0
  223. package/node_modules/gray-matter/lib/engine.js +30 -0
  224. package/node_modules/gray-matter/lib/engines.js +54 -0
  225. package/node_modules/gray-matter/lib/excerpt.js +32 -0
  226. package/node_modules/gray-matter/lib/parse.js +13 -0
  227. package/node_modules/gray-matter/lib/stringify.js +56 -0
  228. package/node_modules/gray-matter/lib/to-file.js +43 -0
  229. package/node_modules/gray-matter/lib/utils.js +66 -0
  230. package/node_modules/gray-matter/package.json +127 -0
  231. package/node_modules/is-extendable/LICENSE +21 -0
  232. package/node_modules/is-extendable/README.md +72 -0
  233. package/node_modules/is-extendable/index.js +13 -0
  234. package/node_modules/is-extendable/package.json +51 -0
  235. package/node_modules/js-yaml/LICENSE +21 -0
  236. package/node_modules/js-yaml/README.md +302 -0
  237. package/node_modules/js-yaml/bin/js-yaml.js +132 -0
  238. package/node_modules/js-yaml/dist/js-yaml.js +4024 -0
  239. package/node_modules/js-yaml/dist/js-yaml.min.js +1 -0
  240. package/node_modules/js-yaml/index.js +7 -0
  241. package/node_modules/js-yaml/lib/js-yaml/common.js +59 -0
  242. package/node_modules/js-yaml/lib/js-yaml/dumper.js +850 -0
  243. package/node_modules/js-yaml/lib/js-yaml/exception.js +43 -0
  244. package/node_modules/js-yaml/lib/js-yaml/loader.js +1679 -0
  245. package/node_modules/js-yaml/lib/js-yaml/mark.js +76 -0
  246. package/node_modules/js-yaml/lib/js-yaml/schema/core.js +18 -0
  247. package/node_modules/js-yaml/lib/js-yaml/schema/default_full.js +25 -0
  248. package/node_modules/js-yaml/lib/js-yaml/schema/default_safe.js +28 -0
  249. package/node_modules/js-yaml/lib/js-yaml/schema/failsafe.js +17 -0
  250. package/node_modules/js-yaml/lib/js-yaml/schema/json.js +25 -0
  251. package/node_modules/js-yaml/lib/js-yaml/schema.js +108 -0
  252. package/node_modules/js-yaml/lib/js-yaml/type/binary.js +138 -0
  253. package/node_modules/js-yaml/lib/js-yaml/type/bool.js +35 -0
  254. package/node_modules/js-yaml/lib/js-yaml/type/float.js +116 -0
  255. package/node_modules/js-yaml/lib/js-yaml/type/int.js +173 -0
  256. package/node_modules/js-yaml/lib/js-yaml/type/js/function.js +93 -0
  257. package/node_modules/js-yaml/lib/js-yaml/type/js/regexp.js +60 -0
  258. package/node_modules/js-yaml/lib/js-yaml/type/js/undefined.js +28 -0
  259. package/node_modules/js-yaml/lib/js-yaml/type/map.js +8 -0
  260. package/node_modules/js-yaml/lib/js-yaml/type/merge.js +12 -0
  261. package/node_modules/js-yaml/lib/js-yaml/type/null.js +34 -0
  262. package/node_modules/js-yaml/lib/js-yaml/type/omap.js +44 -0
  263. package/node_modules/js-yaml/lib/js-yaml/type/pairs.js +53 -0
  264. package/node_modules/js-yaml/lib/js-yaml/type/seq.js +8 -0
  265. package/node_modules/js-yaml/lib/js-yaml/type/set.js +29 -0
  266. package/node_modules/js-yaml/lib/js-yaml/type/str.js +8 -0
  267. package/node_modules/js-yaml/lib/js-yaml/type/timestamp.js +88 -0
  268. package/node_modules/js-yaml/lib/js-yaml/type.js +61 -0
  269. package/node_modules/js-yaml/lib/js-yaml.js +39 -0
  270. package/node_modules/js-yaml/package.json +52 -0
  271. package/node_modules/kind-of/LICENSE +21 -0
  272. package/node_modules/kind-of/README.md +367 -0
  273. package/node_modules/kind-of/index.js +129 -0
  274. package/node_modules/kind-of/package.json +88 -0
  275. package/node_modules/pi-toggle-skills/README.md +213 -0
  276. package/node_modules/pi-toggle-skills/package.json +60 -0
  277. package/node_modules/pi-toggle-skills/src/index.ts +112 -0
  278. package/node_modules/pi-toggle-skills/src/skill-discovery.ts +258 -0
  279. package/node_modules/pi-toggle-skills/src/skill-selector.ts +435 -0
  280. package/node_modules/pi-toggle-skills/toggle-skills.ts +316 -0
  281. package/node_modules/pi-toggle-skills/vitest.config.ts +15 -0
  282. package/node_modules/proper-lockfile/LICENSE +21 -0
  283. package/node_modules/proper-lockfile/README.md +183 -0
  284. package/node_modules/proper-lockfile/index.js +40 -0
  285. package/node_modules/proper-lockfile/lib/adapter.js +85 -0
  286. package/node_modules/proper-lockfile/lib/lockfile.js +342 -0
  287. package/node_modules/proper-lockfile/lib/mtime-precision.js +55 -0
  288. package/node_modules/proper-lockfile/node_modules/retry/.npmignore +3 -0
  289. package/node_modules/proper-lockfile/node_modules/retry/.travis.yml +15 -0
  290. package/node_modules/proper-lockfile/node_modules/retry/License +21 -0
  291. package/node_modules/proper-lockfile/node_modules/retry/Makefile +18 -0
  292. package/node_modules/proper-lockfile/node_modules/retry/README.md +227 -0
  293. package/node_modules/proper-lockfile/node_modules/retry/equation.gif +0 -0
  294. package/node_modules/proper-lockfile/node_modules/retry/example/dns.js +31 -0
  295. package/node_modules/proper-lockfile/node_modules/retry/example/stop.js +40 -0
  296. package/node_modules/proper-lockfile/node_modules/retry/index.js +1 -0
  297. package/node_modules/proper-lockfile/node_modules/retry/lib/retry.js +100 -0
  298. package/node_modules/proper-lockfile/node_modules/retry/lib/retry_operation.js +158 -0
  299. package/node_modules/proper-lockfile/node_modules/retry/package.json +32 -0
  300. package/node_modules/proper-lockfile/node_modules/retry/test/common.js +10 -0
  301. package/node_modules/proper-lockfile/node_modules/retry/test/integration/test-forever.js +24 -0
  302. package/node_modules/proper-lockfile/node_modules/retry/test/integration/test-retry-operation.js +258 -0
  303. package/node_modules/proper-lockfile/node_modules/retry/test/integration/test-retry-wrap.js +101 -0
  304. package/node_modules/proper-lockfile/node_modules/retry/test/integration/test-timeouts.js +69 -0
  305. package/node_modules/proper-lockfile/package.json +71 -0
  306. package/node_modules/section-matter/LICENSE +21 -0
  307. package/node_modules/section-matter/README.md +236 -0
  308. package/node_modules/section-matter/index.js +136 -0
  309. package/node_modules/section-matter/package.json +55 -0
  310. package/node_modules/signal-exit/LICENSE.txt +16 -0
  311. package/node_modules/signal-exit/README.md +39 -0
  312. package/node_modules/signal-exit/index.js +202 -0
  313. package/node_modules/signal-exit/package.json +38 -0
  314. package/node_modules/signal-exit/signals.js +53 -0
  315. package/node_modules/sprintf-js/.npmignore +1 -0
  316. package/node_modules/sprintf-js/LICENSE +24 -0
  317. package/node_modules/sprintf-js/README.md +88 -0
  318. package/node_modules/sprintf-js/bower.json +14 -0
  319. package/node_modules/sprintf-js/demo/angular.html +20 -0
  320. package/node_modules/sprintf-js/dist/angular-sprintf.min.js +4 -0
  321. package/node_modules/sprintf-js/dist/angular-sprintf.min.js.map +1 -0
  322. package/node_modules/sprintf-js/dist/angular-sprintf.min.map +1 -0
  323. package/node_modules/sprintf-js/dist/sprintf.min.js +4 -0
  324. package/node_modules/sprintf-js/dist/sprintf.min.js.map +1 -0
  325. package/node_modules/sprintf-js/dist/sprintf.min.map +1 -0
  326. package/node_modules/sprintf-js/gruntfile.js +36 -0
  327. package/node_modules/sprintf-js/package.json +22 -0
  328. package/node_modules/sprintf-js/src/angular-sprintf.js +18 -0
  329. package/node_modules/sprintf-js/src/sprintf.js +208 -0
  330. package/node_modules/sprintf-js/test/test.js +82 -0
  331. package/node_modules/strip-bom-string/LICENSE +21 -0
  332. package/node_modules/strip-bom-string/README.md +66 -0
  333. package/node_modules/strip-bom-string/index.js +15 -0
  334. package/node_modules/strip-bom-string/package.json +60 -0
  335. package/package.json +13 -4
  336. package/dist/confirmation.d.ts +0 -33
  337. package/dist/confirmation.js +0 -64
  338. package/dist/yolo.d.ts +0 -6
  339. package/dist/yolo.js +0 -33
@@ -0,0 +1,7 @@
1
+ {
2
+ "version": 3,
3
+ "sources": ["../src/typebox-runtime.ts", "../src/file-system.ts", "../src/json-value.ts", "../src/schema-document.ts", "../src/settings-merge.ts", "../src/settings-layer.ts", "../src/settings-revision.ts", "../node_modules/graceful-fs/polyfills.js", "../node_modules/graceful-fs/legacy-streams.js", "../node_modules/graceful-fs/clone.js", "../node_modules/graceful-fs/graceful-fs.js", "../node_modules/proper-lockfile/node_modules/retry/lib/retry_operation.js", "../node_modules/proper-lockfile/node_modules/retry/lib/retry.js", "../node_modules/proper-lockfile/node_modules/retry/index.js", "../node_modules/signal-exit/signals.js", "../node_modules/signal-exit/index.js", "../node_modules/proper-lockfile/lib/mtime-precision.js", "../node_modules/proper-lockfile/lib/lockfile.js", "../node_modules/proper-lockfile/lib/adapter.js", "../node_modules/proper-lockfile/index.js", "../src/settings-transaction.ts", "../src/pi-host-paths.ts", "../src/paths.ts", "../src/settings-loader.ts", "../src/pi.ts"],
4
+ "sourcesContent": ["import * as typebox from \"typebox\";\nimport { Value as typeboxValue } from \"typebox/value\";\n\n// Pi-facing runtime bundles retain these as externals in generated .ts entries, so Pi's loader\n// supplies the host-owned TypeBox modules. Authoring/CLI code resolves the package peer normally.\nexport const Typebox: typeof import(\"typebox\") = typebox;\nexport const IsSchema: typeof import(\"typebox\").IsSchema = typebox.IsSchema;\nexport const Type: typeof import(\"typebox\").Type = typebox.Type;\nexport const Value: typeof import(\"typebox/value\").Value = typeboxValue;\n", "import { randomUUID } from \"node:crypto\";\nimport {\n linkSync,\n lstatSync,\n mkdirSync,\n readFileSync,\n renameSync,\n rmSync,\n writeFileSync,\n} from \"node:fs\";\nimport { chmod, mkdir, open, readFile, rename, rm, stat } from \"node:fs/promises\";\nimport { basename, dirname, join } from \"node:path\";\n\nimport { Type, Value } from \"./typebox-runtime.ts\";\n\ntype WriteStatus = \"created\" | \"unchanged\" | \"updated\";\n\nconst CodedErrorSchema = Type.Object({ code: Type.String() });\n\nfunction errorCode(cause: Error): string | undefined {\n return Value.Check(CodedErrorSchema, cause) ? cause.code : undefined;\n}\n\nexport function readTextIfPresent(path: string): string | undefined {\n try {\n return readFileSync(path, \"utf8\");\n } catch (cause: unknown) {\n if (cause instanceof Error && errorCode(cause) === \"ENOENT\") return undefined;\n throw cause;\n }\n}\n\nexport async function readTextIfPresentAsync(path: string): Promise<string | undefined> {\n try {\n return await readFile(path, \"utf8\");\n } catch (cause: unknown) {\n if (cause instanceof Error && errorCode(cause) === \"ENOENT\") return undefined;\n throw cause;\n }\n}\n\n/** Produce content only for a missing destination, then atomically publish without clobbering. */\nexport function writeTextIfMissing(\n path: string,\n produceContent: () => string,\n mode = 0o600,\n): WriteStatus {\n // Avoid directory writes for existing entries, including dangling symlinks. The hard link\n // below still provides no-clobber publication if another writer wins after this check.\n if (lstatSync(path, { throwIfNoEntry: false }) !== undefined) return \"unchanged\";\n\n const directory = dirname(path);\n const temporaryPath = join(directory, `.${basename(path)}.${randomUUID()}.tmp`);\n\n try {\n mkdirSync(directory, { recursive: true });\n writeFileSync(temporaryPath, produceContent(), { encoding: \"utf8\", flag: \"wx\", mode });\n try {\n linkSync(temporaryPath, path);\n return \"created\";\n } catch (cause: unknown) {\n if (cause instanceof Error && errorCode(cause) === \"EEXIST\") return \"unchanged\";\n throw cause;\n }\n } finally {\n try {\n rmSync(temporaryPath, { force: true });\n } catch {\n // Cleanup must not mask the write result.\n }\n }\n}\n\nexport function writeTextAtomically(path: string, content: string, mode = 0o644): WriteStatus {\n const current = readTextIfPresent(path);\n if (current === content) return \"unchanged\";\n\n const directory = dirname(path);\n const temporaryPath = join(directory, `.${basename(path)}.${randomUUID()}.tmp`);\n try {\n mkdirSync(directory, { recursive: true });\n writeFileSync(temporaryPath, content, { encoding: \"utf8\", flag: \"wx\", mode });\n renameSync(temporaryPath, path);\n return current === undefined ? \"created\" : \"updated\";\n } finally {\n try {\n rmSync(temporaryPath, { force: true });\n } catch {\n // Cleanup must not mask the write result.\n }\n }\n}\n\n/** Atomically replace complete content while preserving an existing file's permission mode. */\nexport async function writeTextAtomicallyAsync(\n path: string,\n content: string,\n defaultMode = 0o600,\n): Promise<void> {\n let mode = defaultMode;\n try {\n mode = (await stat(path)).mode & 0o777;\n } catch (cause: unknown) {\n if (!(cause instanceof Error) || errorCode(cause) !== \"ENOENT\") throw cause;\n }\n\n const directory = dirname(path);\n const temporaryPath = join(directory, `.${basename(path)}.${randomUUID()}.tmp`);\n await mkdir(directory, { recursive: true });\n try {\n const handle = await open(temporaryPath, \"wx\", mode);\n try {\n await handle.writeFile(content, { encoding: \"utf8\" });\n await handle.sync();\n } finally {\n await handle.close();\n }\n await chmod(temporaryPath, mode);\n await rename(temporaryPath, path);\n } finally {\n try {\n await rm(temporaryPath, { force: true });\n } catch {\n // Cleanup must not mask the write result.\n }\n }\n}\n", "import { Typebox, Value } from \"./typebox-runtime.ts\";\n\nconst {\n Array: ArrayType,\n Boolean: BooleanType,\n Cyclic,\n Null,\n Number: NumberType,\n Record: RecordType,\n Ref,\n Refine,\n String: StringType,\n Union,\n Unknown,\n Unsafe,\n} = Typebox;\n\nexport type JsonPrimitive = boolean | null | number | string;\n\nexport type JsonValue = JsonPrimitive | JsonArray | JsonObject;\n\nexport interface JsonArray extends ReadonlyArray<JsonValue> {\n readonly [index: number]: JsonValue;\n}\n\nexport interface JsonObject {\n readonly [key: string]: JsonValue;\n}\n\nconst JsonObjectCandidateSchema = RecordType(StringType(), Unknown());\n\nfunction isPlainJsonObject(value: JsonValue): value is JsonObject {\n if (!Value.Check(JsonObjectCandidateSchema, value)) return false;\n const prototype = Reflect.getPrototypeOf(value);\n return (\n (prototype === Object.prototype || prototype === null) &&\n Object.getOwnPropertySymbols(value).length === 0\n );\n}\n\n// SAFETY: TypeBox widens deeply recursive Cyclic static types. This schema exactly mirrors the\n// JsonValue recursion, rejects non-plain and symbol-keyed objects, and Value.Parse validates every\n// nested value before it receives the JsonValue type.\nexport const JsonValueSchema = Unsafe<JsonValue>(\n Cyclic(\n {\n JsonValue: Union([\n Null(),\n BooleanType(),\n NumberType(),\n StringType(),\n ArrayType(Ref(\"JsonValue\")),\n Refine(RecordType(StringType(), Ref(\"JsonValue\")), isPlainJsonObject),\n ]),\n },\n \"JsonValue\",\n ),\n);\n\nconst JsonBooleanSchema = BooleanType();\nconst JsonNumberSchema = NumberType();\nconst JsonStringSchema = StringType();\n\nexport function isJsonBoolean(value: JsonValue | undefined): value is boolean {\n return Value.Check(JsonBooleanSchema, value);\n}\n\nexport function isJsonNumber(value: JsonValue | undefined): value is number {\n return Value.Check(JsonNumberSchema, value);\n}\n\nexport function isJsonString(value: JsonValue | undefined): value is string {\n return Value.Check(JsonStringSchema, value);\n}\n\nexport function isJsonArray(value: JsonValue | undefined): value is JsonArray {\n return Array.isArray(value);\n}\n\nexport function isJsonObject(value: JsonValue | undefined): value is JsonObject {\n return value !== undefined && isPlainJsonObject(value);\n}\n\nexport function cloneJson<Value extends JsonValue>(value: Value): Value {\n return structuredClone(value);\n}\n\nexport function parseJson(text: string): JsonValue | undefined {\n try {\n return Value.Parse(JsonValueSchema, JSON.parse(text));\n } catch {\n return undefined;\n }\n}\n\nexport function formatJson(value: JsonValue): string {\n return `${JSON.stringify(value, undefined, 2)}\\n`;\n}\n", "import type { TSchema } from \"typebox\";\n\nimport {\n cloneJson,\n isJsonArray,\n isJsonObject,\n isJsonString,\n type JsonObject,\n type JsonValue,\n parseJson,\n} from \"./json-value.ts\";\n\nexport const JSON_SCHEMA_DIALECT = \"https://json-schema.org/draft/2020-12/schema\";\n\nexport type SchemaDocumentInput = {\n readonly id: string;\n readonly title: string;\n readonly description: string;\n readonly schemaId: string;\n readonly schema: TSchema;\n};\n\nconst SCHEMA_MAP_KEYWORDS = new Set([\n \"$defs\",\n \"definitions\",\n \"dependentSchemas\",\n \"patternProperties\",\n \"properties\",\n]);\nconst SCHEMA_ARRAY_KEYWORDS = new Set([\"allOf\", \"anyOf\", \"oneOf\", \"prefixItems\"]);\nconst SCHEMA_VALUE_KEYWORDS = new Set([\n \"additionalProperties\",\n \"contains\",\n \"else\",\n \"if\",\n \"items\",\n \"not\",\n \"propertyNames\",\n \"then\",\n \"unevaluatedItems\",\n \"unevaluatedProperties\",\n]);\n\nfunction makeSettingsObjectPartial(schema: JsonObject): JsonObject {\n const transformed: Record<string, JsonValue> = {};\n for (const [key, value] of Object.entries(schema)) {\n if (key === \"required\") continue;\n if (key === \"properties\" && isJsonObject(value)) {\n const properties: Record<string, JsonValue> = {};\n for (const [name, child] of Object.entries(value)) {\n properties[name] =\n isJsonObject(child) && child.type === \"object\" && isJsonObject(child.properties)\n ? makeSettingsObjectPartial(child)\n : cloneJson(child);\n }\n transformed[key] = properties;\n continue;\n }\n transformed[key] = cloneJson(value);\n }\n return transformed;\n}\n\nfunction stripTypeBoxMetadata(value: JsonObject): JsonObject;\nfunction stripTypeBoxMetadata(value: JsonValue): JsonValue;\nfunction stripTypeBoxMetadata(value: JsonValue): JsonValue {\n if (Array.isArray(value)) return value.map(stripTypeBoxMetadata);\n if (!isJsonObject(value)) return value;\n\n const sanitized: Record<string, JsonValue> = {};\n for (const [key, child] of Object.entries(value)) {\n if (key.startsWith(\"~\")) continue;\n sanitized[key] = stripTypeBoxMetadata(child);\n }\n return sanitized;\n}\n\nfunction schemaRecord(schema: TSchema): JsonObject {\n const serialized = JSON.stringify(schema);\n if (serialized === undefined) {\n throw new TypeError(\"The TypeBox schema is not JSON serializable.\");\n }\n\n const parsed = parseJson(serialized);\n if (!isJsonObject(parsed)) {\n throw new TypeError(\"The TypeBox settings schema must serialize to a JSON object.\");\n }\n return stripTypeBoxMetadata(parsed);\n}\n\nfunction visitChildSchemas(\n schema: JsonObject,\n path: string,\n visit: (schema: JsonObject, path: string) => void,\n): void {\n for (const [key, value] of Object.entries(schema)) {\n if (SCHEMA_MAP_KEYWORDS.has(key) && isJsonObject(value)) {\n for (const [name, child] of Object.entries(value)) {\n if (isJsonObject(child)) visit(child, `${path}/${key}/${name}`);\n }\n continue;\n }\n if (SCHEMA_ARRAY_KEYWORDS.has(key) && isJsonArray(value)) {\n for (const [index, child] of value.entries()) {\n if (isJsonObject(child)) visit(child, `${path}/${key}/${index}`);\n }\n continue;\n }\n if (SCHEMA_VALUE_KEYWORDS.has(key) && isJsonObject(value)) {\n visit(value, `${path}/${key}`);\n }\n }\n}\n\nexport function hasReservedSchemaProperty(schema: TSchema): boolean {\n const root = schemaRecord(schema);\n return isJsonObject(root.properties) && \"$schema\" in root.properties;\n}\n\nexport function findUndocumentedSettings(schema: TSchema): readonly string[] {\n const root = schemaRecord(schema);\n if (!isJsonObject(root.properties)) return [\"<root>\"];\n\n const issues: string[] = [];\n function visit(properties: JsonObject, prefix: string): void {\n for (const [key, value] of Object.entries(properties)) {\n const path = prefix === \"\" ? key : `${prefix}.${key}`;\n if (isJsonObject(value) && value.type === \"object\" && isJsonObject(value.properties)) {\n visit(value.properties, path);\n continue;\n }\n if (\n !isJsonObject(value) ||\n !isJsonString(value.description) ||\n value.description.trim() === \"\"\n ) {\n issues.push(path);\n }\n }\n }\n\n visit(root.properties, \"\");\n return issues;\n}\n\nexport function findNonStrictObjectSchemas(schema: TSchema): readonly string[] {\n const issues: string[] = [];\n\n function visit(value: JsonObject, path: string): void {\n if (value.type === \"object\" && isJsonObject(value.properties)) {\n if (value.additionalProperties !== false) issues.push(path);\n }\n visitChildSchemas(value, path, visit);\n }\n\n visit(schemaRecord(schema), \"#\");\n return issues;\n}\n\nexport function createSettingsFileSchema(input: SchemaDocumentInput): JsonObject {\n const partial = makeSettingsObjectPartial(schemaRecord(input.schema));\n if (!isJsonObject(partial.properties)) {\n throw new TypeError(\"The TypeBox settings schema must be an object with properties.\");\n }\n\n const properties: Record<string, JsonValue> = {};\n properties.$schema = {\n type: \"string\",\n default: `./schemas/${input.id}.schema.json`,\n description: \"JSON Schema used by editors for this settings file.\",\n };\n for (const [key, value] of Object.entries(partial.properties)) {\n properties[key] = cloneJson(value);\n }\n\n const schemaKeywords: Record<string, JsonValue> = {};\n for (const [key, value] of Object.entries(partial)) {\n if ([\"$schema\", \"$id\", \"title\", \"description\", \"properties\", \"required\"].includes(key)) {\n continue;\n }\n schemaKeywords[key] = cloneJson(value);\n }\n\n return {\n $schema: JSON_SCHEMA_DIALECT,\n $id: input.schemaId,\n title: `${input.title} settings`,\n description: input.description,\n ...schemaKeywords,\n type: \"object\",\n properties,\n additionalProperties: false,\n } satisfies JsonObject;\n}\n\nexport function createSettingsDocument(\n id: string,\n settings: JsonObject,\n schemaReference = `./schemas/${id}.schema.json`,\n): JsonObject {\n const settingsEntries = Object.entries(settings).map(\n ([key, value]) => [key, cloneJson(value)] as const,\n );\n return {\n $schema: schemaReference,\n ...Object.fromEntries(settingsEntries),\n } satisfies JsonObject;\n}\n\nexport function createDefaultSettingsDocument(\n input: SchemaDocumentInput & { readonly defaultSettings: JsonObject },\n): JsonObject {\n return createSettingsDocument(input.id, input.defaultSettings);\n}\n", "import { cloneJson, isJsonObject, type JsonObject, type JsonValue } from \"./json-value.ts\";\n\nfunction mergeValue(current: JsonValue | undefined, next: JsonValue): JsonValue {\n if (!isJsonObject(current) || !isJsonObject(next)) return cloneJson(next);\n\n const merged: Record<string, JsonValue> = {};\n for (const [key, value] of Object.entries(current)) merged[key] = cloneJson(value);\n for (const [key, value] of Object.entries(next)) {\n merged[key] = mergeValue(merged[key], value);\n }\n return merged;\n}\n\nexport function settingsLayerFromFile(file: JsonObject): JsonObject {\n const settings: Record<string, JsonValue> = {};\n for (const [key, value] of Object.entries(file)) {\n if (key === \"$schema\") continue;\n settings[key] = cloneJson(value);\n }\n return settings;\n}\n\n/** Deep-merge settings objects. Objects merge recursively; arrays and scalars replace. */\nexport function mergeSettings(current: JsonObject, next: JsonObject): JsonObject {\n const merged = mergeValue(current, next);\n if (!isJsonObject(merged)) {\n throw new TypeError(\"Settings merge unexpectedly produced a non-object value.\");\n }\n return merged;\n}\n", "import type { TObject, TSchema } from \"typebox\";\n\nimport { Value } from \"./typebox-runtime.ts\";\n\nimport {\n isJsonObject,\n isJsonString,\n JsonValueSchema,\n parseJson,\n type JsonObject,\n type JsonValue,\n} from \"./json-value.ts\";\nimport { mergeSettings, settingsLayerFromFile } from \"./settings-merge.ts\";\n\nexport type SettingsScope = \"global\" | \"project\";\n\n/**\n * Stable machine-readable category for a non-fatal settings problem.\n *\n * Callers should branch on this value rather than diagnostic text:\n *\n * - `bundled-schema-read-failed`: the generated schema could not be read.\n * - `bundled-schema-stale`: the bundled schema does not match the definition.\n * - `config-decode-failed`: a validated layer could not be decoded by TypeBox.\n * - `config-invalid`: a layer failed validation or conflicted with an earlier layer.\n * - `config-malformed`: a settings file contains malformed JSON.\n * - `config-read-failed`: a settings file could not be read.\n * - `config-scaffold-failed`: the initial global settings file could not be created.\n * - `schema-install-failed`: the editor schema could not be installed.\n */\nexport type SettingsDiagnosticCode =\n | \"bundled-schema-read-failed\"\n | \"bundled-schema-stale\"\n | \"config-decode-failed\"\n | \"config-invalid\"\n | \"config-malformed\"\n | \"config-read-failed\"\n | \"config-scaffold-failed\"\n | \"schema-install-failed\";\n\nexport type SettingsValidationIssue = {\n /** JSON Pointer to the invalid setting, or `/` for the document root. */\n readonly path: string;\n /** TypeBox validation message for this issue. */\n readonly message: string;\n};\n\n/**\n * A non-fatal problem encountered while loading settings.\n *\n * The affected schema or settings layer is ignored. Messages and validation issues contain no\n * settings values, making them suitable for display through Pi's UI.\n */\nexport type SettingsDiagnostic = {\n /** Stable category intended for programmatic handling. */\n readonly code: SettingsDiagnosticCode;\n /** All current diagnostics are errors; the field allows direct use with `ctx.ui.notify`. */\n readonly severity: \"error\";\n /** The settings layer or editor-schema operation that failed. */\n readonly scope: SettingsScope | \"schema\";\n /** Absolute path of the affected settings or schema file. */\n readonly path: string;\n /** User-facing summary that does not include settings values. */\n readonly message: string;\n /** JSON Pointer paths and validator messages when schema validation failed. */\n readonly issues?: readonly SettingsValidationIssue[];\n};\n\nexport type ParsedSettingsLayer = {\n /** Encoded JSON settings after editor-only metadata is removed. */\n readonly settings: JsonObject | undefined;\n /** Editor schema reference from the file, when present and valid. */\n readonly schemaReference: string | undefined;\n readonly diagnostics: readonly SettingsDiagnostic[];\n};\n\nexport function settingsValidationIssues(\n schema: TSchema,\n value: JsonValue,\n): readonly SettingsValidationIssue[] {\n return [...Value.Errors(schema, value)].map((issue) => ({\n path: issue.instancePath === \"\" ? \"/\" : issue.instancePath,\n message: issue.message,\n }));\n}\n\nexport function parseSettingsLayer(\n path: string,\n scope: SettingsScope,\n text: string,\n layerSchema: TSchema,\n): ParsedSettingsLayer {\n const parsed = parseJson(text);\n if (parsed === undefined) {\n return {\n settings: undefined,\n schemaReference: undefined,\n diagnostics: [\n {\n code: \"config-malformed\",\n severity: \"error\",\n scope,\n path,\n message: `${scope} settings contain malformed JSON and were ignored`,\n },\n ],\n };\n }\n\n if (!Value.Check(layerSchema, parsed)) {\n return {\n settings: undefined,\n schemaReference: undefined,\n diagnostics: [\n {\n code: \"config-invalid\",\n severity: \"error\",\n scope,\n path,\n message: `${scope} settings do not match the extension schema and were ignored`,\n issues: settingsValidationIssues(layerSchema, parsed),\n },\n ],\n };\n }\n\n const schemaReference =\n isJsonObject(parsed) && isJsonString(parsed.$schema) ? parsed.$schema : undefined;\n try {\n const decoded: unknown = Value.Decode(layerSchema, parsed);\n const decodedJson = Value.Parse(JsonValueSchema, decoded);\n if (!isJsonObject(decodedJson)) {\n return {\n settings: undefined,\n schemaReference,\n diagnostics: [\n {\n code: \"config-decode-failed\",\n severity: \"error\",\n scope,\n path,\n message: `${scope} settings did not decode to a JSON object and were ignored`,\n },\n ],\n };\n }\n return { settings: settingsLayerFromFile(decodedJson), schemaReference, diagnostics: [] };\n } catch {\n return {\n settings: undefined,\n schemaReference,\n diagnostics: [\n {\n code: \"config-decode-failed\",\n severity: \"error\",\n scope,\n path,\n message: `${scope} settings could not be decoded and were ignored`,\n },\n ],\n };\n }\n}\n\nexport type AppliedSettingsLayer = {\n readonly settings: JsonObject;\n readonly diagnostic?: SettingsDiagnostic;\n};\n\nexport function applySettingsLayer<Schema extends TObject>(\n schema: Schema,\n current: JsonObject,\n layer: Pick<ParsedSettingsLayer, \"settings\">,\n path: string,\n scope: SettingsScope,\n): AppliedSettingsLayer {\n if (layer.settings === undefined) return { settings: current };\n\n const merged = mergeSettings(current, layer.settings);\n if (Value.Check(schema, merged)) return { settings: merged };\n\n return {\n settings: current,\n diagnostic: {\n code: \"config-invalid\",\n severity: \"error\",\n scope,\n path,\n message: `${scope} settings conflict with the resolved configuration and were ignored`,\n issues: settingsValidationIssues(schema, merged),\n },\n };\n}\n", "import { createHash } from \"node:crypto\";\n\n/**\n * Opaque revision token for the exact settings sources observed during loading or an update.\n *\n * Revisions contain no settings values. Callers should only retain and pass them back through\n * `expectedRevision`; their string representation is not a stable persistence format.\n */\nexport type PiSettingsRevision = `sha256:${string}`;\n\n/** Hash length-prefixed sources so missing files and arbitrary contents cannot be ambiguous. */\nexport function createSettingsRevision(\n ...sources: readonly (string | undefined)[]\n): PiSettingsRevision {\n const hash = createHash(\"sha256\");\n for (const source of sources) {\n if (source === undefined) {\n hash.update(\"missing\\0\");\n continue;\n }\n const content = Buffer.from(source, \"utf8\");\n hash.update(`present:${content.byteLength}\\0`);\n hash.update(content);\n }\n return `sha256:${hash.digest(\"hex\")}`;\n}\n", "var constants = require('constants')\n\nvar origCwd = process.cwd\nvar cwd = null\n\nvar platform = process.env.GRACEFUL_FS_PLATFORM || process.platform\n\nprocess.cwd = function() {\n if (!cwd)\n cwd = origCwd.call(process)\n return cwd\n}\ntry {\n process.cwd()\n} catch (er) {}\n\n// This check is needed until node.js 12 is required\nif (typeof process.chdir === 'function') {\n var chdir = process.chdir\n process.chdir = function (d) {\n cwd = null\n chdir.call(process, d)\n }\n if (Object.setPrototypeOf) Object.setPrototypeOf(process.chdir, chdir)\n}\n\nmodule.exports = patch\n\nfunction patch (fs) {\n // (re-)implement some things that are known busted or missing.\n\n // lchmod, broken prior to 0.6.2\n // back-port the fix here.\n if (constants.hasOwnProperty('O_SYMLINK') &&\n process.version.match(/^v0\\.6\\.[0-2]|^v0\\.5\\./)) {\n patchLchmod(fs)\n }\n\n // lutimes implementation, or no-op\n if (!fs.lutimes) {\n patchLutimes(fs)\n }\n\n // https://github.com/isaacs/node-graceful-fs/issues/4\n // Chown should not fail on einval or eperm if non-root.\n // It should not fail on enosys ever, as this just indicates\n // that a fs doesn't support the intended operation.\n\n fs.chown = chownFix(fs.chown)\n fs.fchown = chownFix(fs.fchown)\n fs.lchown = chownFix(fs.lchown)\n\n fs.chmod = chmodFix(fs.chmod)\n fs.fchmod = chmodFix(fs.fchmod)\n fs.lchmod = chmodFix(fs.lchmod)\n\n fs.chownSync = chownFixSync(fs.chownSync)\n fs.fchownSync = chownFixSync(fs.fchownSync)\n fs.lchownSync = chownFixSync(fs.lchownSync)\n\n fs.chmodSync = chmodFixSync(fs.chmodSync)\n fs.fchmodSync = chmodFixSync(fs.fchmodSync)\n fs.lchmodSync = chmodFixSync(fs.lchmodSync)\n\n fs.stat = statFix(fs.stat)\n fs.fstat = statFix(fs.fstat)\n fs.lstat = statFix(fs.lstat)\n\n fs.statSync = statFixSync(fs.statSync)\n fs.fstatSync = statFixSync(fs.fstatSync)\n fs.lstatSync = statFixSync(fs.lstatSync)\n\n // if lchmod/lchown do not exist, then make them no-ops\n if (fs.chmod && !fs.lchmod) {\n fs.lchmod = function (path, mode, cb) {\n if (cb) process.nextTick(cb)\n }\n fs.lchmodSync = function () {}\n }\n if (fs.chown && !fs.lchown) {\n fs.lchown = function (path, uid, gid, cb) {\n if (cb) process.nextTick(cb)\n }\n fs.lchownSync = function () {}\n }\n\n // on Windows, A/V software can lock the directory, causing this\n // to fail with an EACCES or EPERM if the directory contains newly\n // created files. Try again on failure, for up to 60 seconds.\n\n // Set the timeout this long because some Windows Anti-Virus, such as Parity\n // bit9, may lock files for up to a minute, causing npm package install\n // failures. Also, take care to yield the scheduler. Windows scheduling gives\n // CPU to a busy looping process, which can cause the program causing the lock\n // contention to be starved of CPU by node, so the contention doesn't resolve.\n if (platform === \"win32\") {\n fs.rename = typeof fs.rename !== 'function' ? fs.rename\n : (function (fs$rename) {\n function rename (from, to, cb) {\n var start = Date.now()\n var backoff = 0;\n fs$rename(from, to, function CB (er) {\n if (er\n && (er.code === \"EACCES\" || er.code === \"EPERM\" || er.code === \"EBUSY\")\n && Date.now() - start < 60000) {\n setTimeout(function() {\n fs.stat(to, function (stater, st) {\n if (stater && stater.code === \"ENOENT\")\n fs$rename(from, to, CB);\n else\n cb(er)\n })\n }, backoff)\n if (backoff < 100)\n backoff += 10;\n return;\n }\n if (cb) cb(er)\n })\n }\n if (Object.setPrototypeOf) Object.setPrototypeOf(rename, fs$rename)\n return rename\n })(fs.rename)\n }\n\n // if read() returns EAGAIN, then just try it again.\n fs.read = typeof fs.read !== 'function' ? fs.read\n : (function (fs$read) {\n function read (fd, buffer, offset, length, position, callback_) {\n var callback\n if (callback_ && typeof callback_ === 'function') {\n var eagCounter = 0\n callback = function (er, _, __) {\n if (er && er.code === 'EAGAIN' && eagCounter < 10) {\n eagCounter ++\n return fs$read.call(fs, fd, buffer, offset, length, position, callback)\n }\n callback_.apply(this, arguments)\n }\n }\n return fs$read.call(fs, fd, buffer, offset, length, position, callback)\n }\n\n // This ensures `util.promisify` works as it does for native `fs.read`.\n if (Object.setPrototypeOf) Object.setPrototypeOf(read, fs$read)\n return read\n })(fs.read)\n\n fs.readSync = typeof fs.readSync !== 'function' ? fs.readSync\n : (function (fs$readSync) { return function (fd, buffer, offset, length, position) {\n var eagCounter = 0\n while (true) {\n try {\n return fs$readSync.call(fs, fd, buffer, offset, length, position)\n } catch (er) {\n if (er.code === 'EAGAIN' && eagCounter < 10) {\n eagCounter ++\n continue\n }\n throw er\n }\n }\n }})(fs.readSync)\n\n function patchLchmod (fs) {\n fs.lchmod = function (path, mode, callback) {\n fs.open( path\n , constants.O_WRONLY | constants.O_SYMLINK\n , mode\n , function (err, fd) {\n if (err) {\n if (callback) callback(err)\n return\n }\n // prefer to return the chmod error, if one occurs,\n // but still try to close, and report closing errors if they occur.\n fs.fchmod(fd, mode, function (err) {\n fs.close(fd, function(err2) {\n if (callback) callback(err || err2)\n })\n })\n })\n }\n\n fs.lchmodSync = function (path, mode) {\n var fd = fs.openSync(path, constants.O_WRONLY | constants.O_SYMLINK, mode)\n\n // prefer to return the chmod error, if one occurs,\n // but still try to close, and report closing errors if they occur.\n var threw = true\n var ret\n try {\n ret = fs.fchmodSync(fd, mode)\n threw = false\n } finally {\n if (threw) {\n try {\n fs.closeSync(fd)\n } catch (er) {}\n } else {\n fs.closeSync(fd)\n }\n }\n return ret\n }\n }\n\n function patchLutimes (fs) {\n if (constants.hasOwnProperty(\"O_SYMLINK\") && fs.futimes) {\n fs.lutimes = function (path, at, mt, cb) {\n fs.open(path, constants.O_SYMLINK, function (er, fd) {\n if (er) {\n if (cb) cb(er)\n return\n }\n fs.futimes(fd, at, mt, function (er) {\n fs.close(fd, function (er2) {\n if (cb) cb(er || er2)\n })\n })\n })\n }\n\n fs.lutimesSync = function (path, at, mt) {\n var fd = fs.openSync(path, constants.O_SYMLINK)\n var ret\n var threw = true\n try {\n ret = fs.futimesSync(fd, at, mt)\n threw = false\n } finally {\n if (threw) {\n try {\n fs.closeSync(fd)\n } catch (er) {}\n } else {\n fs.closeSync(fd)\n }\n }\n return ret\n }\n\n } else if (fs.futimes) {\n fs.lutimes = function (_a, _b, _c, cb) { if (cb) process.nextTick(cb) }\n fs.lutimesSync = function () {}\n }\n }\n\n function chmodFix (orig) {\n if (!orig) return orig\n return function (target, mode, cb) {\n return orig.call(fs, target, mode, function (er) {\n if (chownErOk(er)) er = null\n if (cb) cb.apply(this, arguments)\n })\n }\n }\n\n function chmodFixSync (orig) {\n if (!orig) return orig\n return function (target, mode) {\n try {\n return orig.call(fs, target, mode)\n } catch (er) {\n if (!chownErOk(er)) throw er\n }\n }\n }\n\n\n function chownFix (orig) {\n if (!orig) return orig\n return function (target, uid, gid, cb) {\n return orig.call(fs, target, uid, gid, function (er) {\n if (chownErOk(er)) er = null\n if (cb) cb.apply(this, arguments)\n })\n }\n }\n\n function chownFixSync (orig) {\n if (!orig) return orig\n return function (target, uid, gid) {\n try {\n return orig.call(fs, target, uid, gid)\n } catch (er) {\n if (!chownErOk(er)) throw er\n }\n }\n }\n\n function statFix (orig) {\n if (!orig) return orig\n // Older versions of Node erroneously returned signed integers for\n // uid + gid.\n return function (target, options, cb) {\n if (typeof options === 'function') {\n cb = options\n options = null\n }\n function callback (er, stats) {\n if (stats) {\n if (stats.uid < 0) stats.uid += 0x100000000\n if (stats.gid < 0) stats.gid += 0x100000000\n }\n if (cb) cb.apply(this, arguments)\n }\n return options ? orig.call(fs, target, options, callback)\n : orig.call(fs, target, callback)\n }\n }\n\n function statFixSync (orig) {\n if (!orig) return orig\n // Older versions of Node erroneously returned signed integers for\n // uid + gid.\n return function (target, options) {\n var stats = options ? orig.call(fs, target, options)\n : orig.call(fs, target)\n if (stats) {\n if (stats.uid < 0) stats.uid += 0x100000000\n if (stats.gid < 0) stats.gid += 0x100000000\n }\n return stats;\n }\n }\n\n // ENOSYS means that the fs doesn't support the op. Just ignore\n // that, because it doesn't matter.\n //\n // if there's no getuid, or if getuid() is something other\n // than 0, and the error is EINVAL or EPERM, then just ignore\n // it.\n //\n // This specific case is a silent failure in cp, install, tar,\n // and most other unix tools that manage permissions.\n //\n // When running as root, or if other types of errors are\n // encountered, then it's strict.\n function chownErOk (er) {\n if (!er)\n return true\n\n if (er.code === \"ENOSYS\")\n return true\n\n var nonroot = !process.getuid || process.getuid() !== 0\n if (nonroot) {\n if (er.code === \"EINVAL\" || er.code === \"EPERM\")\n return true\n }\n\n return false\n }\n}\n", "var Stream = require('stream').Stream\n\nmodule.exports = legacy\n\nfunction legacy (fs) {\n return {\n ReadStream: ReadStream,\n WriteStream: WriteStream\n }\n\n function ReadStream (path, options) {\n if (!(this instanceof ReadStream)) return new ReadStream(path, options);\n\n Stream.call(this);\n\n var self = this;\n\n this.path = path;\n this.fd = null;\n this.readable = true;\n this.paused = false;\n\n this.flags = 'r';\n this.mode = 438; /*=0666*/\n this.bufferSize = 64 * 1024;\n\n options = options || {};\n\n // Mixin options into this\n var keys = Object.keys(options);\n for (var index = 0, length = keys.length; index < length; index++) {\n var key = keys[index];\n this[key] = options[key];\n }\n\n if (this.encoding) this.setEncoding(this.encoding);\n\n if (this.start !== undefined) {\n if ('number' !== typeof this.start) {\n throw TypeError('start must be a Number');\n }\n if (this.end === undefined) {\n this.end = Infinity;\n } else if ('number' !== typeof this.end) {\n throw TypeError('end must be a Number');\n }\n\n if (this.start > this.end) {\n throw new Error('start must be <= end');\n }\n\n this.pos = this.start;\n }\n\n if (this.fd !== null) {\n process.nextTick(function() {\n self._read();\n });\n return;\n }\n\n fs.open(this.path, this.flags, this.mode, function (err, fd) {\n if (err) {\n self.emit('error', err);\n self.readable = false;\n return;\n }\n\n self.fd = fd;\n self.emit('open', fd);\n self._read();\n })\n }\n\n function WriteStream (path, options) {\n if (!(this instanceof WriteStream)) return new WriteStream(path, options);\n\n Stream.call(this);\n\n this.path = path;\n this.fd = null;\n this.writable = true;\n\n this.flags = 'w';\n this.encoding = 'binary';\n this.mode = 438; /*=0666*/\n this.bytesWritten = 0;\n\n options = options || {};\n\n // Mixin options into this\n var keys = Object.keys(options);\n for (var index = 0, length = keys.length; index < length; index++) {\n var key = keys[index];\n this[key] = options[key];\n }\n\n if (this.start !== undefined) {\n if ('number' !== typeof this.start) {\n throw TypeError('start must be a Number');\n }\n if (this.start < 0) {\n throw new Error('start must be >= zero');\n }\n\n this.pos = this.start;\n }\n\n this.busy = false;\n this._queue = [];\n\n if (this.fd === null) {\n this._open = fs.open;\n this._queue.push([this._open, this.path, this.flags, this.mode, undefined]);\n this.flush();\n }\n }\n}\n", "'use strict'\n\nmodule.exports = clone\n\nvar getPrototypeOf = Object.getPrototypeOf || function (obj) {\n return obj.__proto__\n}\n\nfunction clone (obj) {\n if (obj === null || typeof obj !== 'object')\n return obj\n\n if (obj instanceof Object)\n var copy = { __proto__: getPrototypeOf(obj) }\n else\n var copy = Object.create(null)\n\n Object.getOwnPropertyNames(obj).forEach(function (key) {\n Object.defineProperty(copy, key, Object.getOwnPropertyDescriptor(obj, key))\n })\n\n return copy\n}\n", "var fs = require('fs')\nvar polyfills = require('./polyfills.js')\nvar legacy = require('./legacy-streams.js')\nvar clone = require('./clone.js')\n\nvar util = require('util')\n\n/* istanbul ignore next - node 0.x polyfill */\nvar gracefulQueue\nvar previousSymbol\n\n/* istanbul ignore else - node 0.x polyfill */\nif (typeof Symbol === 'function' && typeof Symbol.for === 'function') {\n gracefulQueue = Symbol.for('graceful-fs.queue')\n // This is used in testing by future versions\n previousSymbol = Symbol.for('graceful-fs.previous')\n} else {\n gracefulQueue = '___graceful-fs.queue'\n previousSymbol = '___graceful-fs.previous'\n}\n\nfunction noop () {}\n\nfunction publishQueue(context, queue) {\n Object.defineProperty(context, gracefulQueue, {\n get: function() {\n return queue\n }\n })\n}\n\nvar debug = noop\nif (util.debuglog)\n debug = util.debuglog('gfs4')\nelse if (/\\bgfs4\\b/i.test(process.env.NODE_DEBUG || ''))\n debug = function() {\n var m = util.format.apply(util, arguments)\n m = 'GFS4: ' + m.split(/\\n/).join('\\nGFS4: ')\n console.error(m)\n }\n\n// Once time initialization\nif (!fs[gracefulQueue]) {\n // This queue can be shared by multiple loaded instances\n var queue = global[gracefulQueue] || []\n publishQueue(fs, queue)\n\n // Patch fs.close/closeSync to shared queue version, because we need\n // to retry() whenever a close happens *anywhere* in the program.\n // This is essential when multiple graceful-fs instances are\n // in play at the same time.\n fs.close = (function (fs$close) {\n function close (fd, cb) {\n return fs$close.call(fs, fd, function (err) {\n // This function uses the graceful-fs shared queue\n if (!err) {\n resetQueue()\n }\n\n if (typeof cb === 'function')\n cb.apply(this, arguments)\n })\n }\n\n Object.defineProperty(close, previousSymbol, {\n value: fs$close\n })\n return close\n })(fs.close)\n\n fs.closeSync = (function (fs$closeSync) {\n function closeSync (fd) {\n // This function uses the graceful-fs shared queue\n fs$closeSync.apply(fs, arguments)\n resetQueue()\n }\n\n Object.defineProperty(closeSync, previousSymbol, {\n value: fs$closeSync\n })\n return closeSync\n })(fs.closeSync)\n\n if (/\\bgfs4\\b/i.test(process.env.NODE_DEBUG || '')) {\n process.on('exit', function() {\n debug(fs[gracefulQueue])\n require('assert').equal(fs[gracefulQueue].length, 0)\n })\n }\n}\n\nif (!global[gracefulQueue]) {\n publishQueue(global, fs[gracefulQueue]);\n}\n\nmodule.exports = patch(clone(fs))\nif (process.env.TEST_GRACEFUL_FS_GLOBAL_PATCH && !fs.__patched) {\n module.exports = patch(fs)\n fs.__patched = true;\n}\n\nfunction patch (fs) {\n // Everything that references the open() function needs to be in here\n polyfills(fs)\n fs.gracefulify = patch\n\n fs.createReadStream = createReadStream\n fs.createWriteStream = createWriteStream\n var fs$readFile = fs.readFile\n fs.readFile = readFile\n function readFile (path, options, cb) {\n if (typeof options === 'function')\n cb = options, options = null\n\n return go$readFile(path, options, cb)\n\n function go$readFile (path, options, cb, startTime) {\n return fs$readFile(path, options, function (err) {\n if (err && (err.code === 'EMFILE' || err.code === 'ENFILE'))\n enqueue([go$readFile, [path, options, cb], err, startTime || Date.now(), Date.now()])\n else {\n if (typeof cb === 'function')\n cb.apply(this, arguments)\n }\n })\n }\n }\n\n var fs$writeFile = fs.writeFile\n fs.writeFile = writeFile\n function writeFile (path, data, options, cb) {\n if (typeof options === 'function')\n cb = options, options = null\n\n return go$writeFile(path, data, options, cb)\n\n function go$writeFile (path, data, options, cb, startTime) {\n return fs$writeFile(path, data, options, function (err) {\n if (err && (err.code === 'EMFILE' || err.code === 'ENFILE'))\n enqueue([go$writeFile, [path, data, options, cb], err, startTime || Date.now(), Date.now()])\n else {\n if (typeof cb === 'function')\n cb.apply(this, arguments)\n }\n })\n }\n }\n\n var fs$appendFile = fs.appendFile\n if (fs$appendFile)\n fs.appendFile = appendFile\n function appendFile (path, data, options, cb) {\n if (typeof options === 'function')\n cb = options, options = null\n\n return go$appendFile(path, data, options, cb)\n\n function go$appendFile (path, data, options, cb, startTime) {\n return fs$appendFile(path, data, options, function (err) {\n if (err && (err.code === 'EMFILE' || err.code === 'ENFILE'))\n enqueue([go$appendFile, [path, data, options, cb], err, startTime || Date.now(), Date.now()])\n else {\n if (typeof cb === 'function')\n cb.apply(this, arguments)\n }\n })\n }\n }\n\n var fs$copyFile = fs.copyFile\n if (fs$copyFile)\n fs.copyFile = copyFile\n function copyFile (src, dest, flags, cb) {\n if (typeof flags === 'function') {\n cb = flags\n flags = 0\n }\n return go$copyFile(src, dest, flags, cb)\n\n function go$copyFile (src, dest, flags, cb, startTime) {\n return fs$copyFile(src, dest, flags, function (err) {\n if (err && (err.code === 'EMFILE' || err.code === 'ENFILE'))\n enqueue([go$copyFile, [src, dest, flags, cb], err, startTime || Date.now(), Date.now()])\n else {\n if (typeof cb === 'function')\n cb.apply(this, arguments)\n }\n })\n }\n }\n\n var fs$readdir = fs.readdir\n fs.readdir = readdir\n var noReaddirOptionVersions = /^v[0-5]\\./\n function readdir (path, options, cb) {\n if (typeof options === 'function')\n cb = options, options = null\n\n var go$readdir = noReaddirOptionVersions.test(process.version)\n ? function go$readdir (path, options, cb, startTime) {\n return fs$readdir(path, fs$readdirCallback(\n path, options, cb, startTime\n ))\n }\n : function go$readdir (path, options, cb, startTime) {\n return fs$readdir(path, options, fs$readdirCallback(\n path, options, cb, startTime\n ))\n }\n\n return go$readdir(path, options, cb)\n\n function fs$readdirCallback (path, options, cb, startTime) {\n return function (err, files) {\n if (err && (err.code === 'EMFILE' || err.code === 'ENFILE'))\n enqueue([\n go$readdir,\n [path, options, cb],\n err,\n startTime || Date.now(),\n Date.now()\n ])\n else {\n if (files && files.sort)\n files.sort()\n\n if (typeof cb === 'function')\n cb.call(this, err, files)\n }\n }\n }\n }\n\n if (process.version.substr(0, 4) === 'v0.8') {\n var legStreams = legacy(fs)\n ReadStream = legStreams.ReadStream\n WriteStream = legStreams.WriteStream\n }\n\n var fs$ReadStream = fs.ReadStream\n if (fs$ReadStream) {\n ReadStream.prototype = Object.create(fs$ReadStream.prototype)\n ReadStream.prototype.open = ReadStream$open\n }\n\n var fs$WriteStream = fs.WriteStream\n if (fs$WriteStream) {\n WriteStream.prototype = Object.create(fs$WriteStream.prototype)\n WriteStream.prototype.open = WriteStream$open\n }\n\n Object.defineProperty(fs, 'ReadStream', {\n get: function () {\n return ReadStream\n },\n set: function (val) {\n ReadStream = val\n },\n enumerable: true,\n configurable: true\n })\n Object.defineProperty(fs, 'WriteStream', {\n get: function () {\n return WriteStream\n },\n set: function (val) {\n WriteStream = val\n },\n enumerable: true,\n configurable: true\n })\n\n // legacy names\n var FileReadStream = ReadStream\n Object.defineProperty(fs, 'FileReadStream', {\n get: function () {\n return FileReadStream\n },\n set: function (val) {\n FileReadStream = val\n },\n enumerable: true,\n configurable: true\n })\n var FileWriteStream = WriteStream\n Object.defineProperty(fs, 'FileWriteStream', {\n get: function () {\n return FileWriteStream\n },\n set: function (val) {\n FileWriteStream = val\n },\n enumerable: true,\n configurable: true\n })\n\n function ReadStream (path, options) {\n if (this instanceof ReadStream)\n return fs$ReadStream.apply(this, arguments), this\n else\n return ReadStream.apply(Object.create(ReadStream.prototype), arguments)\n }\n\n function ReadStream$open () {\n var that = this\n open(that.path, that.flags, that.mode, function (err, fd) {\n if (err) {\n if (that.autoClose)\n that.destroy()\n\n that.emit('error', err)\n } else {\n that.fd = fd\n that.emit('open', fd)\n that.read()\n }\n })\n }\n\n function WriteStream (path, options) {\n if (this instanceof WriteStream)\n return fs$WriteStream.apply(this, arguments), this\n else\n return WriteStream.apply(Object.create(WriteStream.prototype), arguments)\n }\n\n function WriteStream$open () {\n var that = this\n open(that.path, that.flags, that.mode, function (err, fd) {\n if (err) {\n that.destroy()\n that.emit('error', err)\n } else {\n that.fd = fd\n that.emit('open', fd)\n }\n })\n }\n\n function createReadStream (path, options) {\n return new fs.ReadStream(path, options)\n }\n\n function createWriteStream (path, options) {\n return new fs.WriteStream(path, options)\n }\n\n var fs$open = fs.open\n fs.open = open\n function open (path, flags, mode, cb) {\n if (typeof mode === 'function')\n cb = mode, mode = null\n\n return go$open(path, flags, mode, cb)\n\n function go$open (path, flags, mode, cb, startTime) {\n return fs$open(path, flags, mode, function (err, fd) {\n if (err && (err.code === 'EMFILE' || err.code === 'ENFILE'))\n enqueue([go$open, [path, flags, mode, cb], err, startTime || Date.now(), Date.now()])\n else {\n if (typeof cb === 'function')\n cb.apply(this, arguments)\n }\n })\n }\n }\n\n return fs\n}\n\nfunction enqueue (elem) {\n debug('ENQUEUE', elem[0].name, elem[1])\n fs[gracefulQueue].push(elem)\n retry()\n}\n\n// keep track of the timeout between retry() calls\nvar retryTimer\n\n// reset the startTime and lastTime to now\n// this resets the start of the 60 second overall timeout as well as the\n// delay between attempts so that we'll retry these jobs sooner\nfunction resetQueue () {\n var now = Date.now()\n for (var i = 0; i < fs[gracefulQueue].length; ++i) {\n // entries that are only a length of 2 are from an older version, don't\n // bother modifying those since they'll be retried anyway.\n if (fs[gracefulQueue][i].length > 2) {\n fs[gracefulQueue][i][3] = now // startTime\n fs[gracefulQueue][i][4] = now // lastTime\n }\n }\n // call retry to make sure we're actively processing the queue\n retry()\n}\n\nfunction retry () {\n // clear the timer and remove it to help prevent unintended concurrency\n clearTimeout(retryTimer)\n retryTimer = undefined\n\n if (fs[gracefulQueue].length === 0)\n return\n\n var elem = fs[gracefulQueue].shift()\n var fn = elem[0]\n var args = elem[1]\n // these items may be unset if they were added by an older graceful-fs\n var err = elem[2]\n var startTime = elem[3]\n var lastTime = elem[4]\n\n // if we don't have a startTime we have no way of knowing if we've waited\n // long enough, so go ahead and retry this item now\n if (startTime === undefined) {\n debug('RETRY', fn.name, args)\n fn.apply(null, args)\n } else if (Date.now() - startTime >= 60000) {\n // it's been more than 60 seconds total, bail now\n debug('TIMEOUT', fn.name, args)\n var cb = args.pop()\n if (typeof cb === 'function')\n cb.call(null, err)\n } else {\n // the amount of time between the last attempt and right now\n var sinceAttempt = Date.now() - lastTime\n // the amount of time between when we first tried, and when we last tried\n // rounded up to at least 1\n var sinceStart = Math.max(lastTime - startTime, 1)\n // backoff. wait longer than the total time we've been retrying, but only\n // up to a maximum of 100ms\n var desiredDelay = Math.min(sinceStart * 1.2, 100)\n // it's been long enough since the last retry, do it again\n if (sinceAttempt >= desiredDelay) {\n debug('RETRY', fn.name, args)\n fn.apply(null, args.concat([startTime]))\n } else {\n // if we can't do this job yet, push it to the end of the queue\n // and let the next iteration check again\n fs[gracefulQueue].push(elem)\n }\n }\n\n // schedule our next run if one isn't already scheduled\n if (retryTimer === undefined) {\n retryTimer = setTimeout(retry, 0)\n }\n}\n", "function RetryOperation(timeouts, options) {\n // Compatibility for the old (timeouts, retryForever) signature\n if (typeof options === 'boolean') {\n options = { forever: options };\n }\n\n this._originalTimeouts = JSON.parse(JSON.stringify(timeouts));\n this._timeouts = timeouts;\n this._options = options || {};\n this._maxRetryTime = options && options.maxRetryTime || Infinity;\n this._fn = null;\n this._errors = [];\n this._attempts = 1;\n this._operationTimeout = null;\n this._operationTimeoutCb = null;\n this._timeout = null;\n this._operationStart = null;\n\n if (this._options.forever) {\n this._cachedTimeouts = this._timeouts.slice(0);\n }\n}\nmodule.exports = RetryOperation;\n\nRetryOperation.prototype.reset = function() {\n this._attempts = 1;\n this._timeouts = this._originalTimeouts;\n}\n\nRetryOperation.prototype.stop = function() {\n if (this._timeout) {\n clearTimeout(this._timeout);\n }\n\n this._timeouts = [];\n this._cachedTimeouts = null;\n};\n\nRetryOperation.prototype.retry = function(err) {\n if (this._timeout) {\n clearTimeout(this._timeout);\n }\n\n if (!err) {\n return false;\n }\n var currentTime = new Date().getTime();\n if (err && currentTime - this._operationStart >= this._maxRetryTime) {\n this._errors.unshift(new Error('RetryOperation timeout occurred'));\n return false;\n }\n\n this._errors.push(err);\n\n var timeout = this._timeouts.shift();\n if (timeout === undefined) {\n if (this._cachedTimeouts) {\n // retry forever, only keep last error\n this._errors.splice(this._errors.length - 1, this._errors.length);\n this._timeouts = this._cachedTimeouts.slice(0);\n timeout = this._timeouts.shift();\n } else {\n return false;\n }\n }\n\n var self = this;\n var timer = setTimeout(function() {\n self._attempts++;\n\n if (self._operationTimeoutCb) {\n self._timeout = setTimeout(function() {\n self._operationTimeoutCb(self._attempts);\n }, self._operationTimeout);\n\n if (self._options.unref) {\n self._timeout.unref();\n }\n }\n\n self._fn(self._attempts);\n }, timeout);\n\n if (this._options.unref) {\n timer.unref();\n }\n\n return true;\n};\n\nRetryOperation.prototype.attempt = function(fn, timeoutOps) {\n this._fn = fn;\n\n if (timeoutOps) {\n if (timeoutOps.timeout) {\n this._operationTimeout = timeoutOps.timeout;\n }\n if (timeoutOps.cb) {\n this._operationTimeoutCb = timeoutOps.cb;\n }\n }\n\n var self = this;\n if (this._operationTimeoutCb) {\n this._timeout = setTimeout(function() {\n self._operationTimeoutCb();\n }, self._operationTimeout);\n }\n\n this._operationStart = new Date().getTime();\n\n this._fn(this._attempts);\n};\n\nRetryOperation.prototype.try = function(fn) {\n console.log('Using RetryOperation.try() is deprecated');\n this.attempt(fn);\n};\n\nRetryOperation.prototype.start = function(fn) {\n console.log('Using RetryOperation.start() is deprecated');\n this.attempt(fn);\n};\n\nRetryOperation.prototype.start = RetryOperation.prototype.try;\n\nRetryOperation.prototype.errors = function() {\n return this._errors;\n};\n\nRetryOperation.prototype.attempts = function() {\n return this._attempts;\n};\n\nRetryOperation.prototype.mainError = function() {\n if (this._errors.length === 0) {\n return null;\n }\n\n var counts = {};\n var mainError = null;\n var mainErrorCount = 0;\n\n for (var i = 0; i < this._errors.length; i++) {\n var error = this._errors[i];\n var message = error.message;\n var count = (counts[message] || 0) + 1;\n\n counts[message] = count;\n\n if (count >= mainErrorCount) {\n mainError = error;\n mainErrorCount = count;\n }\n }\n\n return mainError;\n};\n", "var RetryOperation = require('./retry_operation');\n\nexports.operation = function(options) {\n var timeouts = exports.timeouts(options);\n return new RetryOperation(timeouts, {\n forever: options && options.forever,\n unref: options && options.unref,\n maxRetryTime: options && options.maxRetryTime\n });\n};\n\nexports.timeouts = function(options) {\n if (options instanceof Array) {\n return [].concat(options);\n }\n\n var opts = {\n retries: 10,\n factor: 2,\n minTimeout: 1 * 1000,\n maxTimeout: Infinity,\n randomize: false\n };\n for (var key in options) {\n opts[key] = options[key];\n }\n\n if (opts.minTimeout > opts.maxTimeout) {\n throw new Error('minTimeout is greater than maxTimeout');\n }\n\n var timeouts = [];\n for (var i = 0; i < opts.retries; i++) {\n timeouts.push(this.createTimeout(i, opts));\n }\n\n if (options && options.forever && !timeouts.length) {\n timeouts.push(this.createTimeout(i, opts));\n }\n\n // sort the array numerically ascending\n timeouts.sort(function(a,b) {\n return a - b;\n });\n\n return timeouts;\n};\n\nexports.createTimeout = function(attempt, opts) {\n var random = (opts.randomize)\n ? (Math.random() + 1)\n : 1;\n\n var timeout = Math.round(random * opts.minTimeout * Math.pow(opts.factor, attempt));\n timeout = Math.min(timeout, opts.maxTimeout);\n\n return timeout;\n};\n\nexports.wrap = function(obj, options, methods) {\n if (options instanceof Array) {\n methods = options;\n options = null;\n }\n\n if (!methods) {\n methods = [];\n for (var key in obj) {\n if (typeof obj[key] === 'function') {\n methods.push(key);\n }\n }\n }\n\n for (var i = 0; i < methods.length; i++) {\n var method = methods[i];\n var original = obj[method];\n\n obj[method] = function retryWrapper(original) {\n var op = exports.operation(options);\n var args = Array.prototype.slice.call(arguments, 1);\n var callback = args.pop();\n\n args.push(function(err) {\n if (op.retry(err)) {\n return;\n }\n if (err) {\n arguments[0] = op.mainError();\n }\n callback.apply(this, arguments);\n });\n\n op.attempt(function() {\n original.apply(obj, args);\n });\n }.bind(obj, original);\n obj[method].options = options;\n }\n};\n", "module.exports = require('./lib/retry');", "// This is not the set of all possible signals.\n//\n// It IS, however, the set of all signals that trigger\n// an exit on either Linux or BSD systems. Linux is a\n// superset of the signal names supported on BSD, and\n// the unknown signals just fail to register, so we can\n// catch that easily enough.\n//\n// Don't bother with SIGKILL. It's uncatchable, which\n// means that we can't fire any callbacks anyway.\n//\n// If a user does happen to register a handler on a non-\n// fatal signal like SIGWINCH or something, and then\n// exit, it'll end up firing `process.emit('exit')`, so\n// the handler will be fired anyway.\n//\n// SIGBUS, SIGFPE, SIGSEGV and SIGILL, when not raised\n// artificially, inherently leave the process in a\n// state from which it is not safe to try and enter JS\n// listeners.\nmodule.exports = [\n 'SIGABRT',\n 'SIGALRM',\n 'SIGHUP',\n 'SIGINT',\n 'SIGTERM'\n]\n\nif (process.platform !== 'win32') {\n module.exports.push(\n 'SIGVTALRM',\n 'SIGXCPU',\n 'SIGXFSZ',\n 'SIGUSR2',\n 'SIGTRAP',\n 'SIGSYS',\n 'SIGQUIT',\n 'SIGIOT'\n // should detect profiler and enable/disable accordingly.\n // see #21\n // 'SIGPROF'\n )\n}\n\nif (process.platform === 'linux') {\n module.exports.push(\n 'SIGIO',\n 'SIGPOLL',\n 'SIGPWR',\n 'SIGSTKFLT',\n 'SIGUNUSED'\n )\n}\n", "// Note: since nyc uses this module to output coverage, any lines\n// that are in the direct sync flow of nyc's outputCoverage are\n// ignored, since we can never get coverage for them.\n// grab a reference to node's real process object right away\nvar process = global.process\n\nconst processOk = function (process) {\n return process &&\n typeof process === 'object' &&\n typeof process.removeListener === 'function' &&\n typeof process.emit === 'function' &&\n typeof process.reallyExit === 'function' &&\n typeof process.listeners === 'function' &&\n typeof process.kill === 'function' &&\n typeof process.pid === 'number' &&\n typeof process.on === 'function'\n}\n\n// some kind of non-node environment, just no-op\n/* istanbul ignore if */\nif (!processOk(process)) {\n module.exports = function () {\n return function () {}\n }\n} else {\n var assert = require('assert')\n var signals = require('./signals.js')\n var isWin = /^win/i.test(process.platform)\n\n var EE = require('events')\n /* istanbul ignore if */\n if (typeof EE !== 'function') {\n EE = EE.EventEmitter\n }\n\n var emitter\n if (process.__signal_exit_emitter__) {\n emitter = process.__signal_exit_emitter__\n } else {\n emitter = process.__signal_exit_emitter__ = new EE()\n emitter.count = 0\n emitter.emitted = {}\n }\n\n // Because this emitter is a global, we have to check to see if a\n // previous version of this library failed to enable infinite listeners.\n // I know what you're about to say. But literally everything about\n // signal-exit is a compromise with evil. Get used to it.\n if (!emitter.infinite) {\n emitter.setMaxListeners(Infinity)\n emitter.infinite = true\n }\n\n module.exports = function (cb, opts) {\n /* istanbul ignore if */\n if (!processOk(global.process)) {\n return function () {}\n }\n assert.equal(typeof cb, 'function', 'a callback must be provided for exit handler')\n\n if (loaded === false) {\n load()\n }\n\n var ev = 'exit'\n if (opts && opts.alwaysLast) {\n ev = 'afterexit'\n }\n\n var remove = function () {\n emitter.removeListener(ev, cb)\n if (emitter.listeners('exit').length === 0 &&\n emitter.listeners('afterexit').length === 0) {\n unload()\n }\n }\n emitter.on(ev, cb)\n\n return remove\n }\n\n var unload = function unload () {\n if (!loaded || !processOk(global.process)) {\n return\n }\n loaded = false\n\n signals.forEach(function (sig) {\n try {\n process.removeListener(sig, sigListeners[sig])\n } catch (er) {}\n })\n process.emit = originalProcessEmit\n process.reallyExit = originalProcessReallyExit\n emitter.count -= 1\n }\n module.exports.unload = unload\n\n var emit = function emit (event, code, signal) {\n /* istanbul ignore if */\n if (emitter.emitted[event]) {\n return\n }\n emitter.emitted[event] = true\n emitter.emit(event, code, signal)\n }\n\n // { <signal>: <listener fn>, ... }\n var sigListeners = {}\n signals.forEach(function (sig) {\n sigListeners[sig] = function listener () {\n /* istanbul ignore if */\n if (!processOk(global.process)) {\n return\n }\n // If there are no other listeners, an exit is coming!\n // Simplest way: remove us and then re-send the signal.\n // We know that this will kill the process, so we can\n // safely emit now.\n var listeners = process.listeners(sig)\n if (listeners.length === emitter.count) {\n unload()\n emit('exit', null, sig)\n /* istanbul ignore next */\n emit('afterexit', null, sig)\n /* istanbul ignore next */\n if (isWin && sig === 'SIGHUP') {\n // \"SIGHUP\" throws an `ENOSYS` error on Windows,\n // so use a supported signal instead\n sig = 'SIGINT'\n }\n /* istanbul ignore next */\n process.kill(process.pid, sig)\n }\n }\n })\n\n module.exports.signals = function () {\n return signals\n }\n\n var loaded = false\n\n var load = function load () {\n if (loaded || !processOk(global.process)) {\n return\n }\n loaded = true\n\n // This is the number of onSignalExit's that are in play.\n // It's important so that we can count the correct number of\n // listeners on signals, and don't wait for the other one to\n // handle it instead of us.\n emitter.count += 1\n\n signals = signals.filter(function (sig) {\n try {\n process.on(sig, sigListeners[sig])\n return true\n } catch (er) {\n return false\n }\n })\n\n process.emit = processEmit\n process.reallyExit = processReallyExit\n }\n module.exports.load = load\n\n var originalProcessReallyExit = process.reallyExit\n var processReallyExit = function processReallyExit (code) {\n /* istanbul ignore if */\n if (!processOk(global.process)) {\n return\n }\n process.exitCode = code || /* istanbul ignore next */ 0\n emit('exit', process.exitCode, null)\n /* istanbul ignore next */\n emit('afterexit', process.exitCode, null)\n /* istanbul ignore next */\n originalProcessReallyExit.call(process, process.exitCode)\n }\n\n var originalProcessEmit = process.emit\n var processEmit = function processEmit (ev, arg) {\n if (ev === 'exit' && processOk(global.process)) {\n /* istanbul ignore else */\n if (arg !== undefined) {\n process.exitCode = arg\n }\n var ret = originalProcessEmit.apply(this, arguments)\n /* istanbul ignore next */\n emit('exit', process.exitCode, null)\n /* istanbul ignore next */\n emit('afterexit', process.exitCode, null)\n /* istanbul ignore next */\n return ret\n } else {\n return originalProcessEmit.apply(this, arguments)\n }\n }\n}\n", "'use strict';\n\nconst cacheSymbol = Symbol();\n\nfunction probe(file, fs, callback) {\n const cachedPrecision = fs[cacheSymbol];\n\n if (cachedPrecision) {\n return fs.stat(file, (err, stat) => {\n /* istanbul ignore if */\n if (err) {\n return callback(err);\n }\n\n callback(null, stat.mtime, cachedPrecision);\n });\n }\n\n // Set mtime by ceiling Date.now() to seconds + 5ms so that it's \"not on the second\"\n const mtime = new Date((Math.ceil(Date.now() / 1000) * 1000) + 5);\n\n fs.utimes(file, mtime, mtime, (err) => {\n /* istanbul ignore if */\n if (err) {\n return callback(err);\n }\n\n fs.stat(file, (err, stat) => {\n /* istanbul ignore if */\n if (err) {\n return callback(err);\n }\n\n const precision = stat.mtime.getTime() % 1000 === 0 ? 's' : 'ms';\n\n // Cache the precision in a non-enumerable way\n Object.defineProperty(fs, cacheSymbol, { value: precision });\n\n callback(null, stat.mtime, precision);\n });\n });\n}\n\nfunction getMtime(precision) {\n let now = Date.now();\n\n if (precision === 's') {\n now = Math.ceil(now / 1000) * 1000;\n }\n\n return new Date(now);\n}\n\nmodule.exports.probe = probe;\nmodule.exports.getMtime = getMtime;\n", "'use strict';\n\nconst path = require('path');\nconst fs = require('graceful-fs');\nconst retry = require('retry');\nconst onExit = require('signal-exit');\nconst mtimePrecision = require('./mtime-precision');\n\nconst locks = {};\n\nfunction getLockFile(file, options) {\n return options.lockfilePath || `${file}.lock`;\n}\n\nfunction resolveCanonicalPath(file, options, callback) {\n if (!options.realpath) {\n return callback(null, path.resolve(file));\n }\n\n // Use realpath to resolve symlinks\n // It also resolves relative paths\n options.fs.realpath(file, callback);\n}\n\nfunction acquireLock(file, options, callback) {\n const lockfilePath = getLockFile(file, options);\n\n // Use mkdir to create the lockfile (atomic operation)\n options.fs.mkdir(lockfilePath, (err) => {\n if (!err) {\n // At this point, we acquired the lock!\n // Probe the mtime precision\n return mtimePrecision.probe(lockfilePath, options.fs, (err, mtime, mtimePrecision) => {\n // If it failed, try to remove the lock..\n /* istanbul ignore if */\n if (err) {\n options.fs.rmdir(lockfilePath, () => {});\n\n return callback(err);\n }\n\n callback(null, mtime, mtimePrecision);\n });\n }\n\n // If error is not EEXIST then some other error occurred while locking\n if (err.code !== 'EEXIST') {\n return callback(err);\n }\n\n // Otherwise, check if lock is stale by analyzing the file mtime\n if (options.stale <= 0) {\n return callback(Object.assign(new Error('Lock file is already being held'), { code: 'ELOCKED', file }));\n }\n\n options.fs.stat(lockfilePath, (err, stat) => {\n if (err) {\n // Retry if the lockfile has been removed (meanwhile)\n // Skip stale check to avoid recursiveness\n if (err.code === 'ENOENT') {\n return acquireLock(file, { ...options, stale: 0 }, callback);\n }\n\n return callback(err);\n }\n\n if (!isLockStale(stat, options)) {\n return callback(Object.assign(new Error('Lock file is already being held'), { code: 'ELOCKED', file }));\n }\n\n // If it's stale, remove it and try again!\n // Skip stale check to avoid recursiveness\n removeLock(file, options, (err) => {\n if (err) {\n return callback(err);\n }\n\n acquireLock(file, { ...options, stale: 0 }, callback);\n });\n });\n });\n}\n\nfunction isLockStale(stat, options) {\n return stat.mtime.getTime() < Date.now() - options.stale;\n}\n\nfunction removeLock(file, options, callback) {\n // Remove lockfile, ignoring ENOENT errors\n options.fs.rmdir(getLockFile(file, options), (err) => {\n if (err && err.code !== 'ENOENT') {\n return callback(err);\n }\n\n callback();\n });\n}\n\nfunction updateLock(file, options) {\n const lock = locks[file];\n\n // Just for safety, should never happen\n /* istanbul ignore if */\n if (lock.updateTimeout) {\n return;\n }\n\n lock.updateDelay = lock.updateDelay || options.update;\n lock.updateTimeout = setTimeout(() => {\n lock.updateTimeout = null;\n\n // Stat the file to check if mtime is still ours\n // If it is, we can still recover from a system sleep or a busy event loop\n options.fs.stat(lock.lockfilePath, (err, stat) => {\n const isOverThreshold = lock.lastUpdate + options.stale < Date.now();\n\n // If it failed to update the lockfile, keep trying unless\n // the lockfile was deleted or we are over the threshold\n if (err) {\n if (err.code === 'ENOENT' || isOverThreshold) {\n return setLockAsCompromised(file, lock, Object.assign(err, { code: 'ECOMPROMISED' }));\n }\n\n lock.updateDelay = 1000;\n\n return updateLock(file, options);\n }\n\n const isMtimeOurs = lock.mtime.getTime() === stat.mtime.getTime();\n\n if (!isMtimeOurs) {\n return setLockAsCompromised(\n file,\n lock,\n Object.assign(\n new Error('Unable to update lock within the stale threshold'),\n { code: 'ECOMPROMISED' }\n ));\n }\n\n const mtime = mtimePrecision.getMtime(lock.mtimePrecision);\n\n options.fs.utimes(lock.lockfilePath, mtime, mtime, (err) => {\n const isOverThreshold = lock.lastUpdate + options.stale < Date.now();\n\n // Ignore if the lock was released\n if (lock.released) {\n return;\n }\n\n // If it failed to update the lockfile, keep trying unless\n // the lockfile was deleted or we are over the threshold\n if (err) {\n if (err.code === 'ENOENT' || isOverThreshold) {\n return setLockAsCompromised(file, lock, Object.assign(err, { code: 'ECOMPROMISED' }));\n }\n\n lock.updateDelay = 1000;\n\n return updateLock(file, options);\n }\n\n // All ok, keep updating..\n lock.mtime = mtime;\n lock.lastUpdate = Date.now();\n lock.updateDelay = null;\n updateLock(file, options);\n });\n });\n }, lock.updateDelay);\n\n // Unref the timer so that the nodejs process can exit freely\n // This is safe because all acquired locks will be automatically released\n // on process exit\n\n // We first check that `lock.updateTimeout.unref` exists because some users\n // may be using this module outside of NodeJS (e.g., in an electron app),\n // and in those cases `setTimeout` return an integer.\n /* istanbul ignore else */\n if (lock.updateTimeout.unref) {\n lock.updateTimeout.unref();\n }\n}\n\nfunction setLockAsCompromised(file, lock, err) {\n // Signal the lock has been released\n lock.released = true;\n\n // Cancel lock mtime update\n // Just for safety, at this point updateTimeout should be null\n /* istanbul ignore if */\n if (lock.updateTimeout) {\n clearTimeout(lock.updateTimeout);\n }\n\n if (locks[file] === lock) {\n delete locks[file];\n }\n\n lock.options.onCompromised(err);\n}\n\n// ----------------------------------------------------------\n\nfunction lock(file, options, callback) {\n /* istanbul ignore next */\n options = {\n stale: 10000,\n update: null,\n realpath: true,\n retries: 0,\n fs,\n onCompromised: (err) => { throw err; },\n ...options,\n };\n\n options.retries = options.retries || 0;\n options.retries = typeof options.retries === 'number' ? { retries: options.retries } : options.retries;\n options.stale = Math.max(options.stale || 0, 2000);\n options.update = options.update == null ? options.stale / 2 : options.update || 0;\n options.update = Math.max(Math.min(options.update, options.stale / 2), 1000);\n\n // Resolve to a canonical file path\n resolveCanonicalPath(file, options, (err, file) => {\n if (err) {\n return callback(err);\n }\n\n // Attempt to acquire the lock\n const operation = retry.operation(options.retries);\n\n operation.attempt(() => {\n acquireLock(file, options, (err, mtime, mtimePrecision) => {\n if (operation.retry(err)) {\n return;\n }\n\n if (err) {\n return callback(operation.mainError());\n }\n\n // We now own the lock\n const lock = locks[file] = {\n lockfilePath: getLockFile(file, options),\n mtime,\n mtimePrecision,\n options,\n lastUpdate: Date.now(),\n };\n\n // We must keep the lock fresh to avoid staleness\n updateLock(file, options);\n\n callback(null, (releasedCallback) => {\n if (lock.released) {\n return releasedCallback &&\n releasedCallback(Object.assign(new Error('Lock is already released'), { code: 'ERELEASED' }));\n }\n\n // Not necessary to use realpath twice when unlocking\n unlock(file, { ...options, realpath: false }, releasedCallback);\n });\n });\n });\n });\n}\n\nfunction unlock(file, options, callback) {\n options = {\n fs,\n realpath: true,\n ...options,\n };\n\n // Resolve to a canonical file path\n resolveCanonicalPath(file, options, (err, file) => {\n if (err) {\n return callback(err);\n }\n\n // Skip if the lock is not acquired\n const lock = locks[file];\n\n if (!lock) {\n return callback(Object.assign(new Error('Lock is not acquired/owned by you'), { code: 'ENOTACQUIRED' }));\n }\n\n lock.updateTimeout && clearTimeout(lock.updateTimeout); // Cancel lock mtime update\n lock.released = true; // Signal the lock has been released\n delete locks[file]; // Delete from locks\n\n removeLock(file, options, callback);\n });\n}\n\nfunction check(file, options, callback) {\n options = {\n stale: 10000,\n realpath: true,\n fs,\n ...options,\n };\n\n options.stale = Math.max(options.stale || 0, 2000);\n\n // Resolve to a canonical file path\n resolveCanonicalPath(file, options, (err, file) => {\n if (err) {\n return callback(err);\n }\n\n // Check if lockfile exists\n options.fs.stat(getLockFile(file, options), (err, stat) => {\n if (err) {\n // If does not exist, file is not locked. Otherwise, callback with error\n return err.code === 'ENOENT' ? callback(null, false) : callback(err);\n }\n\n // Otherwise, check if lock is stale by analyzing the file mtime\n return callback(null, !isLockStale(stat, options));\n });\n });\n}\n\nfunction getLocks() {\n return locks;\n}\n\n// Remove acquired locks on exit\n/* istanbul ignore next */\nonExit(() => {\n for (const file in locks) {\n const options = locks[file].options;\n\n try { options.fs.rmdirSync(getLockFile(file, options)); } catch (e) { /* Empty */ }\n }\n});\n\nmodule.exports.lock = lock;\nmodule.exports.unlock = unlock;\nmodule.exports.check = check;\nmodule.exports.getLocks = getLocks;\n", "'use strict';\n\nconst fs = require('graceful-fs');\n\nfunction createSyncFs(fs) {\n const methods = ['mkdir', 'realpath', 'stat', 'rmdir', 'utimes'];\n const newFs = { ...fs };\n\n methods.forEach((method) => {\n newFs[method] = (...args) => {\n const callback = args.pop();\n let ret;\n\n try {\n ret = fs[`${method}Sync`](...args);\n } catch (err) {\n return callback(err);\n }\n\n callback(null, ret);\n };\n });\n\n return newFs;\n}\n\n// ----------------------------------------------------------\n\nfunction toPromise(method) {\n return (...args) => new Promise((resolve, reject) => {\n args.push((err, result) => {\n if (err) {\n reject(err);\n } else {\n resolve(result);\n }\n });\n\n method(...args);\n });\n}\n\nfunction toSync(method) {\n return (...args) => {\n let err;\n let result;\n\n args.push((_err, _result) => {\n err = _err;\n result = _result;\n });\n\n method(...args);\n\n if (err) {\n throw err;\n }\n\n return result;\n };\n}\n\nfunction toSyncOptions(options) {\n // Shallow clone options because we are oging to mutate them\n options = { ...options };\n\n // Transform fs to use the sync methods instead\n options.fs = createSyncFs(options.fs || fs);\n\n // Retries are not allowed because it requires the flow to be sync\n if (\n (typeof options.retries === 'number' && options.retries > 0) ||\n (options.retries && typeof options.retries.retries === 'number' && options.retries.retries > 0)\n ) {\n throw Object.assign(new Error('Cannot use retries with the sync api'), { code: 'ESYNC' });\n }\n\n return options;\n}\n\nmodule.exports = {\n toPromise,\n toSync,\n toSyncOptions,\n};\n", "'use strict';\n\nconst lockfile = require('./lib/lockfile');\nconst { toPromise, toSync, toSyncOptions } = require('./lib/adapter');\n\nasync function lock(file, options) {\n const release = await toPromise(lockfile.lock)(file, options);\n\n return toPromise(release);\n}\n\nfunction lockSync(file, options) {\n const release = toSync(lockfile.lock)(file, toSyncOptions(options));\n\n return toSync(release);\n}\n\nfunction unlock(file, options) {\n return toPromise(lockfile.unlock)(file, options);\n}\n\nfunction unlockSync(file, options) {\n return toSync(lockfile.unlock)(file, toSyncOptions(options));\n}\n\nfunction check(file, options) {\n return toPromise(lockfile.check)(file, options);\n}\n\nfunction checkSync(file, options) {\n return toSync(lockfile.check)(file, toSyncOptions(options));\n}\n\nmodule.exports = lock;\nmodule.exports.lock = lock;\nmodule.exports.unlock = unlock;\nmodule.exports.lockSync = lockSync;\nmodule.exports.unlockSync = unlockSync;\nmodule.exports.check = check;\nmodule.exports.checkSync = checkSync;\n", "import { mkdir } from \"node:fs/promises\";\nimport { dirname } from \"node:path\";\nimport { isDeepStrictEqual } from \"node:util\";\n\nimport lockfile from \"proper-lockfile\";\nimport type { TObject, TSchema } from \"typebox\";\n\nimport type { ExtensionSettingsDefinition, ExtensionSettingsLayer } from \"./definition.ts\";\nimport { readTextIfPresentAsync, writeTextAtomicallyAsync } from \"./file-system.ts\";\nimport {\n cloneJson,\n formatJson,\n isJsonObject,\n JsonValueSchema,\n type JsonObject,\n} from \"./json-value.ts\";\nimport { Value } from \"./typebox-runtime.ts\";\nimport type { ExtensionSettingsPaths } from \"./paths.ts\";\nimport { createSettingsDocument, createSettingsFileSchema } from \"./schema-document.ts\";\nimport {\n applySettingsLayer,\n parseSettingsLayer,\n settingsValidationIssues,\n type SettingsDiagnostic,\n type SettingsScope,\n type SettingsValidationIssue,\n} from \"./settings-layer.ts\";\nimport { mergeSettings } from \"./settings-merge.ts\";\nimport { createSettingsRevision, type PiSettingsRevision } from \"./settings-revision.ts\";\n\nexport type PiSettingsUpdateScope = \"global\" | \"project\";\n\nexport type PiSettingsUpdateIssue = SettingsValidationIssue;\n\nexport type UpdatePiExtensionSettingsOptions<Schema extends TObject> = {\n /** Settings layer to update. Project updates require a trusted project. */\n readonly scope: PiSettingsUpdateScope;\n /** Reject the update if the relevant sources no longer match this loader revision. */\n readonly expectedRevision?: PiSettingsRevision;\n /**\n * Produce the next encoded settings layer from the latest valid layer.\n *\n * The callback is invoked once, synchronously, while the settings transaction is locked. It may\n * return a copy or mutate and return the supplied clone. Throwing an `Error` aborts the\n * transaction and rejects `updatePiExtensionSettings` with the same error.\n */\n readonly update: (current: ExtensionSettingsLayer<Schema>) => ExtensionSettingsLayer<Schema>;\n};\n\nexport type UpdatePiExtensionSettingsResult =\n | {\n readonly status: \"updated\" | \"unchanged\";\n readonly revision: PiSettingsRevision;\n }\n | {\n readonly status: \"conflict\";\n readonly reason: \"schema-changed\" | \"settings-changed\";\n readonly message: string;\n }\n | {\n readonly status: \"blocked\";\n readonly reason: \"project-untrusted\";\n readonly message: string;\n }\n | {\n readonly status: \"invalid-existing\";\n readonly message: string;\n readonly diagnostics: readonly SettingsDiagnostic[];\n }\n | {\n readonly status: \"invalid-update\";\n readonly message: string;\n readonly issues: readonly PiSettingsUpdateIssue[];\n }\n | {\n readonly status: \"failed\";\n readonly message: string;\n };\n\nexport type SettingsTransactionPaths = {\n readonly global: ExtensionSettingsPaths;\n readonly project: ExtensionSettingsPaths;\n};\n\nexport type SettingsTransactionOptions<Schema extends TObject> =\n UpdatePiExtensionSettingsOptions<Schema> & {\n readonly paths: SettingsTransactionPaths;\n readonly projectTrusted: boolean;\n };\n\ntype ExistingLayerResult =\n | {\n readonly status: \"valid\";\n readonly settings: JsonObject;\n readonly schemaReference: string | undefined;\n }\n | {\n readonly status: \"invalid\";\n readonly diagnostics: readonly SettingsDiagnostic[];\n };\n\nclass SettingsPersistenceError extends Error {\n constructor(cause: unknown) {\n super(\"The settings transaction could not access persistent storage.\", { cause });\n }\n}\n\nasync function persistently<Result>(operation: () => Promise<Result>): Promise<Result> {\n try {\n return await operation();\n } catch (cause: unknown) {\n throw new SettingsPersistenceError(cause);\n }\n}\n\nfunction typedSettingsLayer<Schema extends TObject>(\n schema: TSchema,\n value: JsonObject,\n): value is JsonObject & ExtensionSettingsLayer<Schema> {\n return isJsonObject(value) && !(\"$schema\" in value) && Value.Check(schema, value);\n}\n\nfunction parseExistingLayer(\n path: string,\n scope: SettingsScope,\n text: string | undefined,\n layerSchema: TSchema,\n): ExistingLayerResult {\n if (text === undefined) {\n return {\n status: \"valid\",\n settings: {},\n schemaReference: undefined,\n };\n }\n\n const parsedLayer = parseSettingsLayer(path, scope, text, layerSchema);\n if (parsedLayer.settings === undefined) {\n return { status: \"invalid\", diagnostics: parsedLayer.diagnostics };\n }\n return {\n status: \"valid\",\n settings: parsedLayer.settings,\n schemaReference: parsedLayer.schemaReference,\n };\n}\n\nfunction invalidExisting(\n diagnostics: readonly SettingsDiagnostic[],\n): UpdatePiExtensionSettingsResult {\n return {\n status: \"invalid-existing\",\n message: diagnostics[0]?.message ?? \"The existing settings are invalid.\",\n diagnostics,\n };\n}\n\nfunction invalidUpdate(\n message: string,\n issues: readonly PiSettingsUpdateIssue[],\n): UpdatePiExtensionSettingsResult {\n return { status: \"invalid-update\", message, issues };\n}\n\nasync function withInterprocessLocks<Result>(\n paths: readonly string[],\n operation: () => Promise<Result>,\n index = 0,\n): Promise<Result> {\n const path = paths[index];\n if (path === undefined) return operation();\n\n await persistently(() => mkdir(dirname(path), { recursive: true }));\n const release = await persistently(() =>\n lockfile.lock(path, {\n realpath: false,\n retries: {\n retries: 20,\n factor: 1.25,\n minTimeout: 10,\n maxTimeout: 100,\n randomize: true,\n },\n }),\n );\n try {\n return await withInterprocessLocks(paths, operation, index + 1);\n } finally {\n await persistently(release);\n }\n}\n\nasync function runSettingsTransaction<Schema extends TObject>(\n definition: ExtensionSettingsDefinition<Schema>,\n options: SettingsTransactionOptions<Schema>,\n): Promise<UpdatePiExtensionSettingsResult> {\n const layerSchema = createSettingsFileSchema(definition);\n const expectedSchema = formatJson(layerSchema);\n const installedSchema = await persistently(() =>\n readTextIfPresentAsync(options.paths.global.schemaPath),\n );\n if (installedSchema !== expectedSchema) {\n return {\n status: \"conflict\",\n reason: \"schema-changed\",\n message: \"The installed settings schema changed; reload the extension before saving.\",\n };\n }\n\n const globalText = await persistently(() =>\n readTextIfPresentAsync(options.paths.global.configPath),\n );\n const projectText =\n options.scope === \"project\"\n ? await persistently(() => readTextIfPresentAsync(options.paths.project.configPath))\n : undefined;\n const revision =\n options.scope === \"global\"\n ? createSettingsRevision(globalText)\n : createSettingsRevision(globalText, projectText);\n if (options.expectedRevision !== undefined && options.expectedRevision !== revision) {\n return {\n status: \"conflict\",\n reason: \"settings-changed\",\n message: \"The settings changed after they were loaded; reload before saving.\",\n };\n }\n\n const globalResult = parseExistingLayer(\n options.paths.global.configPath,\n \"global\",\n globalText,\n layerSchema,\n );\n if (globalResult.status === \"invalid\") return invalidExisting(globalResult.diagnostics);\n\n const globalApplied = applySettingsLayer(\n definition.schema,\n definition.defaultSettings,\n globalResult,\n options.paths.global.configPath,\n \"global\",\n );\n if (globalApplied.diagnostic !== undefined) {\n return invalidExisting([globalApplied.diagnostic]);\n }\n\n let currentLayer = globalResult;\n let validationBase = definition.defaultSettings;\n if (options.scope === \"project\") {\n const projectResult = parseExistingLayer(\n options.paths.project.configPath,\n \"project\",\n projectText,\n layerSchema,\n );\n if (projectResult.status === \"invalid\") return invalidExisting(projectResult.diagnostics);\n\n const projectApplied = applySettingsLayer(\n definition.schema,\n globalApplied.settings,\n projectResult,\n options.paths.project.configPath,\n \"project\",\n );\n if (projectApplied.diagnostic !== undefined) {\n return invalidExisting([projectApplied.diagnostic]);\n }\n currentLayer = projectResult;\n validationBase = globalApplied.settings;\n }\n\n const currentForUpdate = cloneJson(currentLayer.settings);\n if (!typedSettingsLayer<Schema>(layerSchema, currentForUpdate)) {\n throw new TypeError(\"A validated settings layer unexpectedly failed its encoded schema.\");\n }\n\n const candidate: unknown = options.update(currentForUpdate);\n let candidateJson;\n try {\n candidateJson = Value.Parse(JsonValueSchema, candidate);\n } catch {\n return invalidUpdate(\"The settings updater must return a JSON object.\", [\n { path: \"/\", message: \"Expected a JSON object\" },\n ]);\n }\n if (!isJsonObject(candidateJson)) {\n return invalidUpdate(\"The settings updater must return a JSON object.\", [\n { path: \"/\", message: \"Expected a JSON object\" },\n ]);\n }\n if (\"$schema\" in candidateJson) {\n return invalidUpdate(\"The settings updater cannot modify $schema metadata.\", [\n { path: \"/$schema\", message: \"$schema is reserved for editor metadata\" },\n ]);\n }\n if (!Value.Check(layerSchema, candidateJson)) {\n return invalidUpdate(\n \"The settings update does not match the extension schema.\",\n settingsValidationIssues(layerSchema, candidateJson),\n );\n }\n\n const nextLayer = cloneJson(candidateJson);\n const resolved = mergeSettings(validationBase, nextLayer);\n if (!Value.Check(definition.schema, resolved)) {\n return invalidUpdate(\n \"The settings update conflicts with the resolved configuration.\",\n settingsValidationIssues(definition.schema, resolved),\n );\n }\n try {\n Value.Decode(Value.Clone(definition.schema), resolved);\n } catch {\n return invalidUpdate(\"The settings update could not be decoded.\", [\n { path: \"/\", message: \"The resolved settings codec rejected the update\" },\n ]);\n }\n\n if (isDeepStrictEqual(currentLayer.settings, nextLayer)) {\n return { status: \"unchanged\", revision };\n }\n\n const targetPaths = options.scope === \"global\" ? options.paths.global : options.paths.project;\n const schemaReference =\n currentLayer.schemaReference ??\n (options.scope === \"global\" ? targetPaths.schemaReference : definition.schemaId);\n const content = formatJson(createSettingsDocument(definition.id, nextLayer, schemaReference));\n await persistently(() => writeTextAtomicallyAsync(targetPaths.configPath, content));\n const nextRevision =\n options.scope === \"global\"\n ? createSettingsRevision(content)\n : createSettingsRevision(globalText, content);\n return { status: \"updated\", revision: nextRevision };\n}\n\nexport async function updateSettingsTransaction<Schema extends TObject>(\n definition: ExtensionSettingsDefinition<Schema>,\n options: SettingsTransactionOptions<Schema>,\n): Promise<UpdatePiExtensionSettingsResult> {\n if (options.scope === \"project\" && !options.projectTrusted) {\n return {\n status: \"blocked\",\n reason: \"project-untrusted\",\n message: \"Project settings can only be updated for a trusted project.\",\n };\n }\n\n const lockPaths =\n options.scope === \"global\"\n ? [options.paths.global.configPath]\n : [options.paths.global.configPath, options.paths.project.configPath].sort();\n try {\n return await withInterprocessLocks(lockPaths, () =>\n runSettingsTransaction(definition, options),\n );\n } catch (cause: unknown) {\n if (cause instanceof SettingsPersistenceError) {\n return {\n status: \"failed\",\n message: `The ${options.scope} settings transaction failed.`,\n };\n }\n if (cause instanceof Error) throw cause;\n throw new Error(\"The settings transaction threw a non-Error value.\", { cause });\n }\n}\n", "import { homedir } from \"node:os\";\nimport { join } from \"node:path\";\n\n/** Pi's public project configuration directory for the supported upstream runtime. */\nexport const PI_CONFIG_DIR_NAME = \".pi\";\n\nconst PI_AGENT_DIR_ENV = \"PI_CODING_AGENT_DIR\";\n\n/** Resolves Pi's agent directory without evaluating the full coding-agent runtime graph. */\nexport function getPiAgentDir(\n env: NodeJS.ProcessEnv = process.env,\n homeDirectory: string = homedir(),\n): string {\n const configured = env[PI_AGENT_DIR_ENV];\n if (configured === undefined || configured.length === 0) {\n return join(homeDirectory, PI_CONFIG_DIR_NAME, \"agent\");\n }\n if (configured === \"~\") {\n return homeDirectory;\n }\n if (\n configured.startsWith(\"~/\") ||\n (process.platform === \"win32\" && configured.startsWith(\"~\\\\\"))\n ) {\n return join(homeDirectory, configured.slice(2));\n }\n return configured;\n}\n", "import { join } from \"node:path\";\n\nexport const EXTENSION_SETTINGS_DIRECTORY = \"extension-settings\";\nexport const EXTENSION_SETTINGS_SCHEMA_DIRECTORY = \"schemas\";\n\nexport type ExtensionSettingsPaths = {\n readonly configPath: string;\n readonly schemaPath: string;\n readonly schemaReference: string;\n};\n\nexport function resolveGlobalSettingsPaths(\n agentDir: string,\n settingsId: string,\n): ExtensionSettingsPaths {\n const settingsDirectory = join(agentDir, EXTENSION_SETTINGS_DIRECTORY);\n return {\n configPath: join(settingsDirectory, `${settingsId}.json`),\n schemaPath: join(\n settingsDirectory,\n EXTENSION_SETTINGS_SCHEMA_DIRECTORY,\n `${settingsId}.schema.json`,\n ),\n schemaReference: `./${EXTENSION_SETTINGS_SCHEMA_DIRECTORY}/${settingsId}.schema.json`,\n };\n}\n\nexport function resolveProjectSettingsPaths(\n cwd: string,\n configDirName: string,\n settingsId: string,\n): ExtensionSettingsPaths {\n const settingsDirectory = join(cwd, configDirName, EXTENSION_SETTINGS_DIRECTORY);\n return {\n configPath: join(settingsDirectory, `${settingsId}.json`),\n schemaPath: join(\n settingsDirectory,\n EXTENSION_SETTINGS_SCHEMA_DIRECTORY,\n `${settingsId}.schema.json`,\n ),\n schemaReference: `./${EXTENSION_SETTINGS_SCHEMA_DIRECTORY}/${settingsId}.schema.json`,\n };\n}\n\nexport function defaultGlobalSettingsDisplayPath(settingsId: string): string {\n return `~/.pi/agent/${EXTENSION_SETTINGS_DIRECTORY}/${settingsId}.json`;\n}\n", "import { readFileSync } from \"node:fs\";\n\nimport type { StaticDecode, TObject, TSchema } from \"typebox\";\n\nimport type { ExtensionSettingsDefinition } from \"./definition.ts\";\nimport { readTextIfPresent, writeTextAtomically, writeTextIfMissing } from \"./file-system.ts\";\nimport { formatJson, type JsonObject } from \"./json-value.ts\";\nimport { resolveGlobalSettingsPaths, resolveProjectSettingsPaths } from \"./paths.ts\";\nimport { createDefaultSettingsDocument, createSettingsFileSchema } from \"./schema-document.ts\";\nimport {\n applySettingsLayer,\n parseSettingsLayer,\n type ParsedSettingsLayer,\n type SettingsDiagnostic,\n type SettingsDiagnosticCode,\n type SettingsScope,\n} from \"./settings-layer.ts\";\nimport { createSettingsRevision, type PiSettingsRevision } from \"./settings-revision.ts\";\nimport { Value } from \"./typebox-runtime.ts\";\n\n/**\n * Source for the generated `config.schema.json` shipped with an extension.\n *\n * The content must exactly match the schema derived from the settings definition. A mismatch is\n * reported as `bundled-schema-stale`, and neither the editor schema nor the initial global settings\n * file is installed.\n */\nexport type BundledSchemaSource =\n | {\n /** Use schema text already loaded by the extension. */\n readonly kind: \"content\";\n /** Complete generated JSON Schema, including its trailing newline. */\n readonly content: string;\n }\n | {\n /** Read the schema synchronously from a bundled file URL. */\n readonly kind: \"url\";\n /** A `file:` URL, usually `new URL(\"../config.schema.json\", import.meta.url)`. */\n readonly url: URL;\n };\n\nexport type ProjectSettingsLocation = {\n readonly cwd: string;\n readonly configDirName: string;\n readonly trusted: boolean;\n};\n\nexport type LoadSettingsOptions = {\n readonly agentDir: string;\n readonly bundledSchema: BundledSchemaSource;\n readonly project?: ProjectSettingsLocation;\n};\n\n/**\n * Result of resolving defaults, global settings, and an optional trusted-project override.\n *\n * File and validation failures are represented in {@link SettingsDiagnostic}; a failed layer is\n * ignored and resolution continues from the last valid value.\n *\n * @template Schema The definition's TypeBox schema.\n */\nexport type LoadedSettings<Schema extends TObject> = {\n /** Fully resolved and TypeBox-decoded settings safe for extension code to consume. */\n readonly settings: StaticDecode<Schema>;\n /** Accepted encoded global layer after removal of editor-only metadata. */\n readonly globalSettingsLayer: JsonObject | undefined;\n /** Accepted encoded trusted-project layer after removal of editor metadata. */\n readonly projectSettingsLayer: JsonObject | undefined;\n /** Non-fatal problems encountered while installing, reading, validating, or decoding settings. */\n readonly diagnostics: readonly SettingsDiagnostic[];\n /** Absolute path of the extension's global settings file. */\n readonly globalConfigPath: string;\n /** Absolute project settings path, even when the project is untrusted; absent without a project. */\n readonly projectConfigPath: string | undefined;\n /** Revision of the exact global settings source read during this load; absent after a read failure. */\n readonly globalRevision: PiSettingsRevision | undefined;\n /**\n * Combined revision of the global and trusted-project sources read during this load.\n *\n * Absent when no project was supplied, the project is untrusted, or either source could not be\n * read. A missing settings file still has a revision and is distinct from an unreadable file.\n */\n readonly projectRevision: PiSettingsRevision | undefined;\n /** Whether a valid global layer contributed to {@link LoadedSettings.settings}. */\n readonly usedGlobalConfig: boolean;\n /** Whether a valid trusted-project layer contributed to {@link LoadedSettings.settings}. */\n readonly usedProjectConfig: boolean;\n /** Whether this load created the global settings file from schema defaults. */\n readonly scaffoldedGlobalConfig: boolean;\n /**\n * Result of installing the bundled editor schema in Pi's global settings directory.\n *\n * `created` and `updated` indicate a write, `unchanged` means the installed file already\n * matched, and `unavailable` means the bundled schema could not be verified or installed.\n */\n readonly schemaStatus: \"created\" | \"unavailable\" | \"unchanged\" | \"updated\";\n};\n\nexport type { SettingsDiagnostic, SettingsDiagnosticCode };\n\nfunction bundledSchemaContent(source: BundledSchemaSource): string | undefined {\n if (source.kind === \"content\") return source.content;\n\n try {\n return readFileSync(source.url, \"utf8\");\n } catch {\n return undefined;\n }\n}\n\ntype LayerSource =\n | { readonly status: \"available\"; readonly content: string | undefined }\n | { readonly status: \"unavailable\" };\n\ntype ReadSettingsLayer = ParsedSettingsLayer & { readonly source: LayerSource };\n\nfunction readLayer(path: string, scope: SettingsScope, layerSchema: TSchema): ReadSettingsLayer {\n try {\n const content = readTextIfPresent(path);\n const parsed =\n content === undefined\n ? { settings: undefined, schemaReference: undefined, diagnostics: [] }\n : parseSettingsLayer(path, scope, content, layerSchema);\n return { ...parsed, source: { status: \"available\", content } };\n } catch {\n return {\n settings: undefined,\n diagnostics: [\n {\n code: \"config-read-failed\",\n severity: \"error\",\n scope,\n path,\n message: `${scope} settings could not be read and were ignored`,\n },\n ],\n schemaReference: undefined,\n source: { status: \"unavailable\" },\n };\n }\n}\n\nexport function loadSettings<const Schema extends TObject>(\n definition: ExtensionSettingsDefinition<Schema>,\n options: LoadSettingsOptions,\n): LoadedSettings<Schema> {\n const diagnostics: SettingsDiagnostic[] = [];\n const globalPaths = resolveGlobalSettingsPaths(options.agentDir, definition.id);\n const projectPaths =\n options.project === undefined\n ? undefined\n : resolveProjectSettingsPaths(\n options.project.cwd,\n options.project.configDirName,\n definition.id,\n );\n\n const layerSchema = createSettingsFileSchema(definition);\n const expectedSchema = formatJson(layerSchema);\n const sourceSchema = bundledSchemaContent(options.bundledSchema);\n\n let schemaStatus: LoadedSettings<Schema>[\"schemaStatus\"] = \"unavailable\";\n let scaffoldedGlobalConfig = false;\n if (sourceSchema === undefined) {\n diagnostics.push({\n code: \"bundled-schema-read-failed\",\n severity: \"error\",\n scope: \"schema\",\n path: globalPaths.schemaPath,\n message: \"The bundled settings schema could not be read\",\n });\n } else if (sourceSchema !== expectedSchema) {\n diagnostics.push({\n code: \"bundled-schema-stale\",\n severity: \"error\",\n scope: \"schema\",\n path: globalPaths.schemaPath,\n message: \"The bundled settings schema is stale; run the artifact generator\",\n });\n } else {\n try {\n schemaStatus = writeTextAtomically(globalPaths.schemaPath, sourceSchema);\n } catch {\n diagnostics.push({\n code: \"schema-install-failed\",\n severity: \"error\",\n scope: \"schema\",\n path: globalPaths.schemaPath,\n message: \"The local editor schema could not be installed\",\n });\n }\n\n if (schemaStatus !== \"unavailable\") {\n try {\n scaffoldedGlobalConfig =\n writeTextIfMissing(globalPaths.configPath, () =>\n formatJson(createDefaultSettingsDocument(definition)),\n ) === \"created\";\n } catch {\n diagnostics.push({\n code: \"config-scaffold-failed\",\n severity: \"error\",\n scope: \"global\",\n path: globalPaths.configPath,\n message: \"The default global settings file could not be scaffolded\",\n });\n }\n }\n }\n\n const globalLayer = readLayer(globalPaths.configPath, \"global\", layerSchema);\n diagnostics.push(...globalLayer.diagnostics);\n const globalApplied = applySettingsLayer(\n definition.schema,\n definition.defaultSettings,\n globalLayer,\n globalPaths.configPath,\n \"global\",\n );\n if (globalApplied.diagnostic !== undefined) diagnostics.push(globalApplied.diagnostic);\n\n let resolved = globalApplied.settings;\n let projectSettingsLayer: JsonObject | undefined;\n let usedProjectConfig = false;\n let projectRevision: PiSettingsRevision | undefined;\n if (projectPaths !== undefined && options.project?.trusted === true) {\n const projectLayer = readLayer(projectPaths.configPath, \"project\", layerSchema);\n diagnostics.push(...projectLayer.diagnostics);\n const projectApplied = applySettingsLayer(\n definition.schema,\n resolved,\n projectLayer,\n projectPaths.configPath,\n \"project\",\n );\n if (projectApplied.diagnostic !== undefined) diagnostics.push(projectApplied.diagnostic);\n if (projectLayer.settings !== undefined && projectApplied.diagnostic === undefined) {\n resolved = projectApplied.settings;\n projectSettingsLayer = projectLayer.settings;\n usedProjectConfig = true;\n }\n if (\n globalLayer.source.status === \"available\" &&\n projectLayer.source.status === \"available\"\n ) {\n projectRevision = createSettingsRevision(\n globalLayer.source.content,\n projectLayer.source.content,\n );\n }\n }\n\n return {\n settings: Value.Decode(Value.Clone(definition.schema), resolved),\n globalSettingsLayer:\n globalApplied.diagnostic === undefined ? globalLayer.settings : undefined,\n projectSettingsLayer,\n diagnostics,\n globalConfigPath: globalPaths.configPath,\n projectConfigPath: projectPaths?.configPath,\n globalRevision:\n globalLayer.source.status === \"available\"\n ? createSettingsRevision(globalLayer.source.content)\n : undefined,\n projectRevision,\n usedGlobalConfig:\n globalLayer.settings !== undefined && globalApplied.diagnostic === undefined,\n usedProjectConfig,\n scaffoldedGlobalConfig,\n schemaStatus,\n };\n}\n", "import type { ExtensionContext } from \"@earendil-works/pi-coding-agent\";\nimport type { TObject } from \"typebox\";\n\nimport type { ExtensionSettingsDefinition } from \"./definition.ts\";\nimport { getPiAgentDir, PI_CONFIG_DIR_NAME } from \"./pi-host-paths.ts\";\nimport { resolveGlobalSettingsPaths, resolveProjectSettingsPaths } from \"./paths.ts\";\nimport {\n loadSettings,\n type BundledSchemaSource,\n type LoadedSettings,\n type SettingsDiagnostic,\n type SettingsDiagnosticCode,\n} from \"./settings-loader.ts\";\nimport type { PiSettingsRevision } from \"./settings-revision.ts\";\nimport type {\n PiSettingsUpdateIssue,\n PiSettingsUpdateScope,\n UpdatePiExtensionSettingsOptions,\n UpdatePiExtensionSettingsResult,\n} from \"./settings-transaction.ts\";\n\n/**\n * Portion of Pi's extension context required to locate and authorize project settings.\n *\n * Pass the current `ExtensionContext` directly; callers do not need to construct this object.\n */\nexport type PiSettingsContext = Pick<ExtensionContext, \"cwd\" | \"isProjectTrusted\">;\n\n/** Options for {@link loadPiExtensionSettings}. */\nexport type LoadPiExtensionSettingsOptions = {\n /** Generated schema bundled with the extension package. */\n readonly bundledSchema: BundledSchemaSource;\n};\n\n/**\n * Settings resolution result returned by {@link loadPiExtensionSettings}.\n *\n * @template Schema The TypeBox object schema from the supplied extension definition.\n */\nexport type LoadedPiExtensionSettings<Schema extends TObject> = LoadedSettings<Schema>;\nexport type {\n BundledSchemaSource,\n PiSettingsRevision,\n PiSettingsUpdateIssue,\n PiSettingsUpdateScope,\n SettingsDiagnostic,\n SettingsDiagnosticCode,\n UpdatePiExtensionSettingsOptions,\n UpdatePiExtensionSettingsResult,\n};\n\n/**\n * Returns the absolute global settings path for an extension.\n *\n * The path is `<getAgentDir()>/extension-settings/<extensionId>.json`. This function does not access\n * the filesystem.\n *\n * @param extensionId The definition ID used in the settings filename.\n */\nexport function getPiGlobalSettingsPath(extensionId: string): string {\n return resolveGlobalSettingsPaths(getPiAgentDir(), extensionId).configPath;\n}\n\n/**\n * Returns the absolute project-settings path for an extension.\n *\n * The path is `<cwd>/<CONFIG_DIR_NAME>/extension-settings/<extensionId>.json`. This function does\n * not check project trust or access the filesystem.\n *\n * @param extensionId The definition ID used in the settings filename.\n * @param cwd The project directory, normally `ctx.cwd`.\n */\nexport function getPiProjectSettingsPath(extensionId: string, cwd: string): string {\n return resolveProjectSettingsPaths(cwd, PI_CONFIG_DIR_NAME, extensionId).configPath;\n}\n\n/**\n * Loads an extension's resolved settings using Pi's standard directories and trust state.\n *\n * Resolution starts with schema defaults, recursively merges the global layer, then recursively\n * merges the project layer only when Pi reports the project as trusted. Arrays and scalar values\n * replace earlier values. Unreadable, malformed, invalid, or undecodable layers are ignored and\n * reported in `diagnostics`.\n *\n * Loading is synchronous. When the bundled schema matches the definition, the function atomically\n * installs the editor schema and creates the global settings file if it does not exist. Existing\n * settings files are never overwritten, and project settings files are never created.\n *\n * Keep this call out of module import and the extension factory. Cache its result once per session\n * and invoke it from the first lifecycle callback that needs settings. If enabled behavior must\n * begin during `session_start`, that handler is the correct first-use boundary.\n *\n * @template Schema The TypeBox object schema used to infer the decoded `settings` value.\n * @param definition A validated definition created by `defineExtensionSettings`.\n * @param context The current Pi extension context.\n * @param options The generated schema bundled with the extension.\n * @returns Decoded settings, encoded layers, source revisions, paths, installation state, and diagnostics.\n * @throws If a custom TypeBox transform decoder throws while decoding the resolved settings.\n *\n * @example\n * ```ts\n * import { loadPiExtensionSettings } from \"@zigai/pi-extension-settings/pi\";\n * import settingsDefinition from \"./settings.ts\";\n *\n * const loaded = loadPiExtensionSettings(settingsDefinition, ctx, {\n * bundledSchema: {\n * kind: \"url\",\n * url: new URL(\"../config.schema.json\", import.meta.url),\n * },\n * });\n * ```\n */\nexport function loadPiExtensionSettings<const Schema extends TObject>(\n definition: ExtensionSettingsDefinition<Schema>,\n context: PiSettingsContext,\n options: LoadPiExtensionSettingsOptions,\n): LoadedPiExtensionSettings<Schema> {\n return loadSettings(definition, {\n agentDir: getPiAgentDir(),\n bundledSchema: options.bundledSchema,\n project: {\n cwd: context.cwd,\n configDirName: PI_CONFIG_DIR_NAME,\n trusted: context.isProjectTrusted(),\n },\n });\n}\n\ntype FileMutationQueue = <Result>(\n path: string,\n operation: () => Promise<Result>,\n) => Promise<Result>;\n\nasync function withFileMutationQueues<Result>(\n paths: readonly string[],\n operation: () => Promise<Result>,\n withFileMutationQueue: FileMutationQueue,\n index = 0,\n): Promise<Result> {\n const path = paths[index];\n if (path === undefined) return operation();\n return withFileMutationQueue(path, () =>\n withFileMutationQueues(paths, operation, withFileMutationQueue, index + 1),\n );\n}\n\n/**\n * Transactionally updates an extension's encoded global or project settings layer.\n *\n * The latest layer is read, validated, cloned, and passed once to `options.update` while the target\n * settings sources are protected by Pi's in-process mutation queue and a cooperative inter-process\n * lock. The returned layer is validated both independently and after resolution over defaults and\n * earlier layers, then atomically published. Existing malformed or invalid settings are never\n * overwritten.\n *\n * Call `loadPiExtensionSettings` before updating so the generated editor schema is installed and\n * verified for the active definition.\n *\n * Pass `expectedRevision` for snapshot-based editors that must reject changes made after opening.\n * Omit it for semantic updates that should apply to the latest valid layer. Project updates are\n * blocked unless Pi reports the project as trusted; calling this function is an explicit write and\n * may create a missing trusted-project settings file.\n *\n * @template Schema The TypeBox object schema from the supplied extension definition.\n * @param definition A validated definition created by `defineExtensionSettings`.\n * @param context The current Pi extension context used for paths and project trust.\n * @param options Scope, optional optimistic revision, and synchronous encoded-layer updater.\n * @returns A typed update outcome; filesystem and validation failures do not expose settings values.\n * @throws The original error when `options.update` throws an `Error`.\n */\nexport async function updatePiExtensionSettings<const Schema extends TObject>(\n definition: ExtensionSettingsDefinition<Schema>,\n context: PiSettingsContext,\n options: UpdatePiExtensionSettingsOptions<Schema>,\n): Promise<UpdatePiExtensionSettingsResult> {\n // Read-only consumers should not initialize the lock library or its process signal handlers.\n const [{ updateSettingsTransaction }, { withFileMutationQueue }] = await Promise.all([\n import(\"./settings-transaction.ts\"),\n import(\"@earendil-works/pi-coding-agent\"),\n ]);\n const global = resolveGlobalSettingsPaths(getPiAgentDir(), definition.id);\n const project = resolveProjectSettingsPaths(context.cwd, PI_CONFIG_DIR_NAME, definition.id);\n const projectTrusted = context.isProjectTrusted();\n const paths =\n options.scope === \"global\"\n ? [global.configPath]\n : [global.configPath, project.configPath].sort();\n return withFileMutationQueues(\n paths,\n () =>\n updateSettingsTransaction(definition, {\n ...options,\n paths: { global, project },\n projectTrusted,\n }),\n withFileMutationQueue,\n );\n}\n"],
5
+ "mappings": "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",
6
+ "names": ["Type", "join", "Type", "rename", "fs", "err", "err2", "er", "er2", "queue", "fs", "readFile", "path", "options", "cb", "data", "src", "dest", "flags", "go$readdir", "open", "mode", "original", "require_retry", "process", "unload", "emit", "load", "processReallyExit", "processEmit", "stat", "err", "err", "mtimePrecision", "stat", "lock", "isOverThreshold", "file", "fs", "lockfile", "mkdir", "dirname", "lockfile", "join", "readFileSync", "readFileSync", "updateSettingsTransaction", "global"]
7
+ }
@@ -0,0 +1,10 @@
1
+ import type { SettingsArtifactTargets } from "./artifacts.ts";
2
+ import { type ExtensionSettingsDefinition } from "./definition.ts";
3
+ export declare const PACKAGE_MANIFEST_KEY = "piExtensionSettings";
4
+ export type SettingsArtifactProject = {
5
+ readonly packageRoot: string;
6
+ readonly definition: ExtensionSettingsDefinition;
7
+ readonly targets: SettingsArtifactTargets;
8
+ };
9
+ export declare function discoverSettingsProjects(root: string): Promise<readonly SettingsArtifactProject[]>;
10
+ //# sourceMappingURL=projects.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"projects.d.ts","sourceRoot":"","sources":["../src/projects.ts"],"names":[],"mappings":"AAIA,OAAO,KAAK,EAAE,uBAAuB,EAAE,MAAM,gBAAgB,CAAC;AAC9D,OAAO,EAGH,KAAK,2BAA2B,EACnC,MAAM,iBAAiB,CAAC;AAKzB,eAAO,MAAM,oBAAoB,wBAAwB,CAAC;AAc1D,MAAM,MAAM,uBAAuB,GAAG;IAClC,QAAQ,CAAC,WAAW,EAAE,MAAM,CAAC;IAC7B,QAAQ,CAAC,UAAU,EAAE,2BAA2B,CAAC;IACjD,QAAQ,CAAC,OAAO,EAAE,uBAAuB,CAAC;CAC7C,CAAC;AAwKF,wBAAsB,wBAAwB,CAC1C,IAAI,EAAE,MAAM,GACb,OAAO,CAAC,SAAS,uBAAuB,EAAE,CAAC,CAQ7C"}
@@ -0,0 +1,177 @@
1
+ var __rewriteRelativeImportExtension = (this && this.__rewriteRelativeImportExtension) || function (path, preserveJsx) {
2
+ if (typeof path === "string" && /^\.\.?\//.test(path)) {
3
+ return path.replace(/\.(tsx)$|((?:\.d)?)((?:\.[^./]+?)?)\.([cm]?)ts$/i, function (m, tsx, d, ext, cm) {
4
+ return tsx ? preserveJsx ? ".jsx" : ".js" : d && (!ext || !cm) ? m : (d + ext + "." + cm.toLowerCase() + "js");
5
+ });
6
+ }
7
+ return path;
8
+ };
9
+ import { glob } from "node:fs/promises";
10
+ import { dirname, isAbsolute, relative, resolve } from "node:path";
11
+ import { pathToFileURL } from "node:url";
12
+ import { defineExtensionSettings, ExtensionSettingsDefinitionCandidateSchema, } from "./definition.js";
13
+ import { readTextIfPresent } from "./file-system.js";
14
+ import { isJsonObject, isJsonString, parseJson } from "./json-value.js";
15
+ import { Type, Value } from "./typebox-runtime.js";
16
+ export const PACKAGE_MANIFEST_KEY = "piExtensionSettings";
17
+ const ImportedDefinitionModuleSchema = Type.Object({
18
+ default: ExtensionSettingsDefinitionCandidateSchema,
19
+ });
20
+ function manifestError(path, reason) {
21
+ return new Error(`Invalid Pi extension settings manifest in ${path}: ${reason}`);
22
+ }
23
+ function stringProperty(object, key) {
24
+ const value = object[key];
25
+ return isJsonString(value) && value.trim() !== "" ? value : undefined;
26
+ }
27
+ function parseSettingsManifest(packagePath, packageJson) {
28
+ const raw = packageJson[PACKAGE_MANIFEST_KEY];
29
+ if (raw === undefined)
30
+ return undefined;
31
+ if (!isJsonObject(raw)) {
32
+ throw manifestError(packagePath, `${PACKAGE_MANIFEST_KEY} must be an object`);
33
+ }
34
+ const supported = new Set(["definition", "schema", "readme", "prevalidation", "globalPath"]);
35
+ const unknownKeys = Object.keys(raw).filter((key) => !supported.has(key));
36
+ if (unknownKeys.length > 0) {
37
+ throw manifestError(packagePath, `unknown keys: ${unknownKeys.join(", ")}`);
38
+ }
39
+ const definition = stringProperty(raw, "definition");
40
+ if (definition === undefined) {
41
+ throw manifestError(packagePath, "definition must be a non-empty relative path");
42
+ }
43
+ const schema = stringProperty(raw, "schema") ?? "config.schema.json";
44
+ const readme = stringProperty(raw, "readme") ?? "README.md";
45
+ const prevalidation = stringProperty(raw, "prevalidation");
46
+ const globalPath = stringProperty(raw, "globalPath");
47
+ if (prevalidation === undefined) {
48
+ return globalPath === undefined
49
+ ? { definition, schema, readme }
50
+ : { definition, schema, readme, globalPath };
51
+ }
52
+ return globalPath === undefined
53
+ ? { definition, schema, readme, prevalidation }
54
+ : { definition, schema, readme, prevalidation, globalPath };
55
+ }
56
+ function resolveInside(packageRoot, configuredPath) {
57
+ if (isAbsolute(configuredPath))
58
+ return undefined;
59
+ const resolved = resolve(packageRoot, configuredPath);
60
+ const relativePath = relative(packageRoot, resolved);
61
+ if (relativePath === "" || (!relativePath.startsWith("..") && !isAbsolute(relativePath))) {
62
+ return resolved;
63
+ }
64
+ return undefined;
65
+ }
66
+ function workspacePatterns(packageJson) {
67
+ const workspaces = packageJson.workspaces;
68
+ if (Array.isArray(workspaces)) {
69
+ return workspaces.filter(isJsonString);
70
+ }
71
+ if (!isJsonObject(workspaces) || !Array.isArray(workspaces.packages))
72
+ return [];
73
+ return workspaces.packages.filter(isJsonString);
74
+ }
75
+ function readPackageJson(path) {
76
+ const content = readTextIfPresent(path);
77
+ if (content === undefined)
78
+ throw manifestError(path, "file does not exist");
79
+ const parsed = parseJson(content);
80
+ if (!isJsonObject(parsed))
81
+ throw manifestError(path, "file is not valid JSON");
82
+ return parsed;
83
+ }
84
+ async function packageJsonPaths(root) {
85
+ const rootPackagePath = resolve(root, "package.json");
86
+ const rootPackage = readPackageJson(rootPackagePath);
87
+ const paths = new Set([rootPackagePath]);
88
+ for (const pattern of workspacePatterns(rootPackage)) {
89
+ const packagePattern = pattern.endsWith("package.json")
90
+ ? pattern
91
+ : `${pattern.replace(/\/$/, "")}/package.json`;
92
+ for await (const match of glob(packagePattern, {
93
+ cwd: root,
94
+ exclude: ["**/node_modules/**"],
95
+ })) {
96
+ paths.add(resolve(root, match));
97
+ }
98
+ }
99
+ return [...paths].sort();
100
+ }
101
+ async function importDefinition(path) {
102
+ let imported;
103
+ try {
104
+ imported = await import(__rewriteRelativeImportExtension(pathToFileURL(path).href));
105
+ }
106
+ catch (cause) {
107
+ throw new Error(`Invalid settings definition module ${path}: module could not be imported`, {
108
+ cause,
109
+ });
110
+ }
111
+ const invalidDefaultMessage = `Invalid settings definition module ${path}: default export must be created by defineExtensionSettings or be a valid definition input`;
112
+ let candidateModule;
113
+ try {
114
+ candidateModule = Value.Parse(ImportedDefinitionModuleSchema, imported);
115
+ }
116
+ catch (cause) {
117
+ throw new Error(invalidDefaultMessage, { cause });
118
+ }
119
+ try {
120
+ // Always execute exhaustive authoring validation, including when the module exported a
121
+ // pre-existing definition created through a runtime fast path.
122
+ return defineExtensionSettings(candidateModule.default);
123
+ }
124
+ catch (cause) {
125
+ throw new Error(invalidDefaultMessage, { cause });
126
+ }
127
+ }
128
+ async function loadProject(packagePath) {
129
+ const packageJson = readPackageJson(packagePath);
130
+ const manifest = parseSettingsManifest(packagePath, packageJson);
131
+ if (manifest === undefined)
132
+ return undefined;
133
+ const packageRoot = dirname(packagePath);
134
+ const definitionPath = resolveInside(packageRoot, manifest.definition);
135
+ const schemaPath = resolveInside(packageRoot, manifest.schema);
136
+ const readmePath = resolveInside(packageRoot, manifest.readme);
137
+ const prevalidationPath = manifest.prevalidation === undefined
138
+ ? undefined
139
+ : resolveInside(packageRoot, manifest.prevalidation);
140
+ if (definitionPath === undefined ||
141
+ schemaPath === undefined ||
142
+ readmePath === undefined ||
143
+ (manifest.prevalidation !== undefined && prevalidationPath === undefined)) {
144
+ throw manifestError(packagePath, "definition, schema, readme, and prevalidation paths must stay inside the package");
145
+ }
146
+ const definition = await importDefinition(definitionPath);
147
+ let targets;
148
+ if (prevalidationPath === undefined) {
149
+ targets =
150
+ manifest.globalPath === undefined
151
+ ? { schemaPath, readmePath }
152
+ : { schemaPath, readmePath, globalPath: manifest.globalPath };
153
+ }
154
+ else {
155
+ targets =
156
+ manifest.globalPath === undefined
157
+ ? { schemaPath, readmePath, prevalidationPath }
158
+ : {
159
+ schemaPath,
160
+ readmePath,
161
+ prevalidationPath,
162
+ globalPath: manifest.globalPath,
163
+ };
164
+ }
165
+ return { packageRoot, definition, targets };
166
+ }
167
+ export async function discoverSettingsProjects(root) {
168
+ const paths = await packageJsonPaths(root);
169
+ const projects = [];
170
+ for (const path of paths) {
171
+ const project = await loadProject(path);
172
+ if (project !== undefined)
173
+ projects.push(project);
174
+ }
175
+ return projects;
176
+ }
177
+ //# sourceMappingURL=projects.js.map