@reddoorla/maintenance 0.89.0 → 0.90.0

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 (70) hide show
  1. package/dist/{announce-OJFAS5JT.js → announce-NDTLRQCN.js} +3 -3
  2. package/dist/{blux-EATHOHKK.js → blux-YGBGS24U.js} +5 -5
  3. package/dist/blux-YGBGS24U.js.map +1 -0
  4. package/dist/{chunk-62NYED6E.js → chunk-DCDF5A7N.js} +3 -3
  5. package/dist/{chunk-AEXJDCJN.js → chunk-DFLN2KO3.js} +4 -4
  6. package/dist/{chunk-3VQWSE3F.js → chunk-DXWLWR4Q.js} +17 -4
  7. package/dist/chunk-DXWLWR4Q.js.map +1 -0
  8. package/dist/{chunk-62CMMGEO.js → chunk-GSWTT2J6.js} +20 -5
  9. package/dist/chunk-GSWTT2J6.js.map +1 -0
  10. package/dist/{chunk-VNB5XBQ4.js → chunk-L5M6G65K.js} +1 -1
  11. package/dist/chunk-L5M6G65K.js.map +1 -0
  12. package/dist/{chunk-73UFRZKY.js → chunk-MLT4QY5X.js} +105 -2
  13. package/dist/chunk-MLT4QY5X.js.map +1 -0
  14. package/dist/cli/bin.js +16 -16
  15. package/dist/cli/commands/audit.js +5 -5
  16. package/dist/{db-DAJX7NNW.js → db-LOSJ74ZJ.js} +1 -1
  17. package/dist/{digest-T6TAZNLF.js → digest-CS6KLCZB.js} +3 -3
  18. package/dist/digest-collectors-NI2M3UTC.js +1 -1
  19. package/dist/{ensure-site-NSNY2QHN.js → ensure-site-FFDUMY6E.js} +2 -2
  20. package/dist/{forms-notify-target-LYSKME5L.js → forms-notify-target-IHJX7NWA.js} +3 -3
  21. package/dist/{github-signals-4YML6NY5.js → github-signals-FCLNHKMF.js} +2 -2
  22. package/dist/{health-mirror-7LKC7Q5Z.js → health-mirror-GMSF3Z5R.js} +2 -2
  23. package/dist/images/index.d.ts +55 -0
  24. package/dist/images/index.js +16 -0
  25. package/dist/images/index.js.map +1 -0
  26. package/dist/index.js +8 -8
  27. package/dist/{init-NHKADHB6.js → init-S4MJ3Y6W.js} +6 -6
  28. package/dist/{launch-VQJ4Z35C.js → launch-7FT4EYEO.js} +7 -7
  29. package/dist/notify-4HP4GZ2H.js +1 -1
  30. package/dist/orchestrate-6HROYTM6.js +1 -1
  31. package/dist/preflight-LIN5NCYU.js +1 -1
  32. package/dist/{prismic-ci-PZ5LCPWT.js → prismic-ci-6YGRIOHT.js} +5 -5
  33. package/dist/{prismic-models-6OYYZUR5.js → prismic-models-VNGIKS2B.js} +3 -3
  34. package/dist/{prospect-audit-DBBXL7EG.js → prospect-audit-JCWTKJTS.js} +1 -1
  35. package/dist/recipes/sync-configs.d.ts +8 -1
  36. package/dist/recipes/sync-configs.js +4 -2
  37. package/dist/{report-2N4PXO3L.js → report-AAY2HZZR.js} +8 -8
  38. package/dist/{report-mirror-3ENU6OOK.js → report-mirror-GMNSH5HF.js} +2 -2
  39. package/dist/{self-updating-NTCCWJYZ.js → self-updating-VQIW24RZ.js} +3 -3
  40. package/dist/selftest-CUX2FIQD.js +1 -1
  41. package/dist/{site-mirror-RQTEAID5.js → site-mirror-GCFLBBWK.js} +2 -2
  42. package/dist/{submissions-TEHPBSZJ.js → submissions-7LGJJSDL.js} +1 -1
  43. package/dist/{sync-configs-LVBITPLU.js → sync-configs-ZYLTMUNX.js} +6 -12
  44. package/dist/sync-configs-ZYLTMUNX.js.map +1 -0
  45. package/package.json +5 -1
  46. package/dist/blux-EATHOHKK.js.map +0 -1
  47. package/dist/chunk-3VQWSE3F.js.map +0 -1
  48. package/dist/chunk-62CMMGEO.js.map +0 -1
  49. package/dist/chunk-73UFRZKY.js.map +0 -1
  50. package/dist/chunk-VNB5XBQ4.js.map +0 -1
  51. package/dist/sync-configs-LVBITPLU.js.map +0 -1
  52. /package/dist/{announce-OJFAS5JT.js.map → announce-NDTLRQCN.js.map} +0 -0
  53. /package/dist/{chunk-62NYED6E.js.map → chunk-DCDF5A7N.js.map} +0 -0
  54. /package/dist/{chunk-AEXJDCJN.js.map → chunk-DFLN2KO3.js.map} +0 -0
  55. /package/dist/{db-DAJX7NNW.js.map → db-LOSJ74ZJ.js.map} +0 -0
  56. /package/dist/{digest-T6TAZNLF.js.map → digest-CS6KLCZB.js.map} +0 -0
  57. /package/dist/{ensure-site-NSNY2QHN.js.map → ensure-site-FFDUMY6E.js.map} +0 -0
  58. /package/dist/{forms-notify-target-LYSKME5L.js.map → forms-notify-target-IHJX7NWA.js.map} +0 -0
  59. /package/dist/{github-signals-4YML6NY5.js.map → github-signals-FCLNHKMF.js.map} +0 -0
  60. /package/dist/{health-mirror-7LKC7Q5Z.js.map → health-mirror-GMSF3Z5R.js.map} +0 -0
  61. /package/dist/{init-NHKADHB6.js.map → init-S4MJ3Y6W.js.map} +0 -0
  62. /package/dist/{launch-VQJ4Z35C.js.map → launch-7FT4EYEO.js.map} +0 -0
  63. /package/dist/{prismic-ci-PZ5LCPWT.js.map → prismic-ci-6YGRIOHT.js.map} +0 -0
  64. /package/dist/{prismic-models-6OYYZUR5.js.map → prismic-models-VNGIKS2B.js.map} +0 -0
  65. /package/dist/{prospect-audit-DBBXL7EG.js.map → prospect-audit-JCWTKJTS.js.map} +0 -0
  66. /package/dist/{report-2N4PXO3L.js.map → report-AAY2HZZR.js.map} +0 -0
  67. /package/dist/{report-mirror-3ENU6OOK.js.map → report-mirror-GMNSH5HF.js.map} +0 -0
  68. /package/dist/{self-updating-NTCCWJYZ.js.map → self-updating-VQIW24RZ.js.map} +0 -0
  69. /package/dist/{site-mirror-RQTEAID5.js.map → site-mirror-GCFLBBWK.js.map} +0 -0
  70. /package/dist/{submissions-TEHPBSZJ.js.map → submissions-7LGJJSDL.js.map} +0 -0
@@ -8,7 +8,7 @@ import {
8
8
  } from "./chunk-Q47DU255.js";
9
9
  import {
10
10
  init
11
- } from "./chunk-62NYED6E.js";
11
+ } from "./chunk-DCDF5A7N.js";
12
12
  import "./chunk-XIDUYLSR.js";
13
13
  import "./chunk-IYSEC543.js";
14
14
  import "./chunk-J7SZQUCW.js";
@@ -16,21 +16,21 @@ import "./chunk-BQRFQSGY.js";
16
16
  import "./chunk-Y53WOQIJ.js";
17
17
  import "./chunk-7RJ2HMMJ.js";
18
18
  import "./chunk-R53VL3RI.js";
19
- import "./chunk-3VQWSE3F.js";
19
+ import "./chunk-DXWLWR4Q.js";
20
20
  import "./chunk-3G25KIWW.js";
21
- import "./chunk-73UFRZKY.js";
21
+ import "./chunk-MLT4QY5X.js";
22
22
  import "./chunk-OTGB6YQO.js";
23
- import "./chunk-AEXJDCJN.js";
23
+ import "./chunk-DFLN2KO3.js";
24
24
  import "./chunk-LKGVSM2O.js";
25
25
  import "./chunk-GASBX52O.js";
26
26
  import "./chunk-XHHMM5HX.js";
27
27
  import "./chunk-Z3JXLULD.js";
28
+ import "./chunk-UDRHAQT7.js";
28
29
  import "./chunk-RARREDQE.js";
29
30
  import "./chunk-A3WDWNN5.js";
30
31
  import "./chunk-2OP4JKIQ.js";
31
32
  import "./chunk-XTK5VIQB.js";
32
33
  import "./chunk-2NQUCS7O.js";
33
- import "./chunk-UDRHAQT7.js";
34
34
  import "./chunk-PTDMVGKL.js";
35
35
  import "./chunk-LBYOLBW7.js";
36
36
  import {
@@ -110,4 +110,4 @@ async function runInitCommand(site, opts) {
110
110
  export {
111
111
  runInitCommand
112
112
  };
113
- //# sourceMappingURL=init-NHKADHB6.js.map
113
+ //# sourceMappingURL=init-S4MJ3Y6W.js.map
@@ -1,6 +1,6 @@
1
1
  import {
2
2
  selfUpdating
3
- } from "./chunk-62CMMGEO.js";
3
+ } from "./chunk-GSWTT2J6.js";
4
4
  import "./chunk-MNDIED4M.js";
5
5
  import {
6
6
  writeAuditsToAirtable
@@ -39,20 +39,20 @@ import {
39
39
  listWebsites,
40
40
  siteSlug
41
41
  } from "./chunk-7NYN2P6I.js";
42
- import "./chunk-73UFRZKY.js";
42
+ import "./chunk-MLT4QY5X.js";
43
43
  import {
44
44
  runAudits
45
- } from "./chunk-AEXJDCJN.js";
45
+ } from "./chunk-DFLN2KO3.js";
46
46
  import "./chunk-LKGVSM2O.js";
47
47
  import "./chunk-GASBX52O.js";
48
48
  import "./chunk-XHHMM5HX.js";
49
49
  import "./chunk-Z3JXLULD.js";
50
+ import "./chunk-UDRHAQT7.js";
50
51
  import "./chunk-RARREDQE.js";
51
52
  import "./chunk-A3WDWNN5.js";
52
53
  import "./chunk-2OP4JKIQ.js";
53
54
  import "./chunk-XTK5VIQB.js";
54
55
  import "./chunk-2NQUCS7O.js";
55
- import "./chunk-UDRHAQT7.js";
56
56
  import "./chunk-PTDMVGKL.js";
57
57
  import "./chunk-LBYOLBW7.js";
58
58
  import {
@@ -241,8 +241,8 @@ async function runLaunchCommand(site, opts) {
241
241
  if (!target) {
242
242
  return { output: `No site resolved for "${site}".`, code: 1 };
243
243
  }
244
- const { makeReportMirror } = await import("./report-mirror-3ENU6OOK.js");
245
- const { makeSiteMirror } = await import("./site-mirror-RQTEAID5.js");
244
+ const { makeReportMirror } = await import("./report-mirror-GMNSH5HF.js");
245
+ const { makeSiteMirror } = await import("./site-mirror-GCFLBBWK.js");
246
246
  const result = await launch(target, {
247
247
  reportMirror: await makeReportMirror(),
248
248
  siteMirror: await makeSiteMirror()
@@ -252,4 +252,4 @@ async function runLaunchCommand(site, opts) {
252
252
  export {
253
253
  runLaunchCommand
254
254
  };
255
- //# sourceMappingURL=launch-VQJ4Z35C.js.map
255
+ //# sourceMappingURL=launch-7FT4EYEO.js.map
@@ -7,8 +7,8 @@ import {
7
7
  resolveRecipients
8
8
  } from "./chunk-SJOXWJ5Y.js";
9
9
  import "./chunk-JRHIFA5R.js";
10
- import "./chunk-NO74DXDP.js";
11
10
  import "./chunk-5ML7FMBD.js";
11
+ import "./chunk-NO74DXDP.js";
12
12
  import "./chunk-BGTYPVLT.js";
13
13
  import "./chunk-2OP4JKIQ.js";
14
14
  export {
@@ -17,8 +17,8 @@ import "./chunk-BGTYPVLT.js";
17
17
  import "./chunk-7NYN2P6I.js";
18
18
  import "./chunk-WEKL2HYJ.js";
19
19
  import "./chunk-W45FZEGE.js";
20
- import "./chunk-RARREDQE.js";
21
20
  import "./chunk-WS6NU475.js";
21
+ import "./chunk-RARREDQE.js";
22
22
  import "./chunk-MFHS7IQ2.js";
23
23
  import "./chunk-6VAL7XJT.js";
24
24
  export {
@@ -15,8 +15,8 @@ import "./chunk-BGTYPVLT.js";
15
15
  import "./chunk-7NYN2P6I.js";
16
16
  import "./chunk-WEKL2HYJ.js";
17
17
  import "./chunk-W45FZEGE.js";
18
- import "./chunk-RARREDQE.js";
19
18
  import "./chunk-WS6NU475.js";
19
+ import "./chunk-RARREDQE.js";
20
20
  import "./chunk-MFHS7IQ2.js";
21
21
  import "./chunk-6VAL7XJT.js";
22
22
 
@@ -1,10 +1,10 @@
1
- import {
2
- runRecipeOverSites
3
- } from "./chunk-VPJ7N6P7.js";
4
1
  import {
5
2
  noWorkingTreeFailure,
6
3
  readPrismicConfig
7
- } from "./chunk-VNB5XBQ4.js";
4
+ } from "./chunk-L5M6G65K.js";
5
+ import {
6
+ runRecipeOverSites
7
+ } from "./chunk-VPJ7N6P7.js";
8
8
  import {
9
9
  appendSkipNotice,
10
10
  fleetWorkdir,
@@ -444,4 +444,4 @@ export {
444
444
  formatPrismicCiResults,
445
445
  runPrismicCiCommand
446
446
  };
447
- //# sourceMappingURL=prismic-ci-PZ5LCPWT.js.map
447
+ //# sourceMappingURL=prismic-ci-6YGRIOHT.js.map
@@ -10,7 +10,7 @@ import {
10
10
  resolvePrismicToken,
11
11
  sendModel,
12
12
  writeModelFile
13
- } from "./chunk-VNB5XBQ4.js";
13
+ } from "./chunk-L5M6G65K.js";
14
14
  import {
15
15
  appendSkipNotice,
16
16
  fleetWorkdir,
@@ -169,7 +169,7 @@ var defaultDeps = () => ({
169
169
  const { listWebsites, updatePrismicModels } = await import("./websites-D6WYFAES.js");
170
170
  const base = openBase(readAirtableConfig());
171
171
  const websites = await listWebsites(base);
172
- const { makeSiteMirror } = await import("./site-mirror-RQTEAID5.js");
172
+ const { makeSiteMirror } = await import("./site-mirror-GCFLBBWK.js");
173
173
  const mirror = await makeSiteMirror();
174
174
  return {
175
175
  websites: websites.map((w) => ({ id: w.id, name: w.name })),
@@ -1022,4 +1022,4 @@ export {
1022
1022
  sweepRowWriteback,
1023
1023
  writeSweepToAirtable
1024
1024
  };
1025
- //# sourceMappingURL=prismic-models-6OYYZUR5.js.map
1025
+ //# sourceMappingURL=prismic-models-VNGIKS2B.js.map
@@ -192,4 +192,4 @@ async function runProspectAuditCommand(url, opts) {
192
192
  export {
193
193
  runProspectAuditCommand
194
194
  };
195
- //# sourceMappingURL=prospect-audit-DBBXL7EG.js.map
195
+ //# sourceMappingURL=prospect-audit-JCWTKJTS.js.map
@@ -1,5 +1,11 @@
1
1
  import { C as ConfigName, S as Site, b as RecipeResult } from '../types-OIQZ5hWN.js';
2
2
 
3
+ type ConfigTemplate = {
4
+ config: ConfigName;
5
+ path: string;
6
+ contents: string;
7
+ };
8
+
3
9
  type SyncConfigsOptions = {
4
10
  which?: ConfigName[];
5
11
  };
@@ -9,6 +15,7 @@ type SyncConfigsOptions = {
9
15
  * against drift between this array and the union. */
10
16
  declare const ALL_CONFIG_NAMES: ConfigName[];
11
17
  declare function isConfigName(value: string): value is ConfigName;
18
+ declare function planTemplateDiffs(cwd: string, templates: ConfigTemplate[]): Promise<ConfigTemplate[]>;
12
19
  declare function syncConfigs(site: Site, opts?: SyncConfigsOptions): Promise<RecipeResult>;
13
20
 
14
- export { ALL_CONFIG_NAMES, type SyncConfigsOptions, isConfigName, syncConfigs };
21
+ export { ALL_CONFIG_NAMES, type SyncConfigsOptions, isConfigName, planTemplateDiffs, syncConfigs };
@@ -1,15 +1,17 @@
1
1
  import {
2
2
  ALL_CONFIG_NAMES,
3
3
  isConfigName,
4
+ planTemplateDiffs,
4
5
  syncConfigs
5
- } from "../chunk-3VQWSE3F.js";
6
+ } from "../chunk-DXWLWR4Q.js";
6
7
  import "../chunk-3G25KIWW.js";
7
- import "../chunk-73UFRZKY.js";
8
+ import "../chunk-MLT4QY5X.js";
8
9
  import "../chunk-XTK5VIQB.js";
9
10
  import "../chunk-XXTZBPUY.js";
10
11
  export {
11
12
  ALL_CONFIG_NAMES,
12
13
  isConfigName,
14
+ planTemplateDiffs,
13
15
  syncConfigs
14
16
  };
15
17
  //# sourceMappingURL=sync-configs.js.map
@@ -78,12 +78,12 @@ function dashboardBaseUrl() {
78
78
  }
79
79
  async function runReportCommand(slug, opts) {
80
80
  if (opts.digest) {
81
- const { runDigest } = await import("./digest-T6TAZNLF.js");
81
+ const { runDigest } = await import("./digest-CS6KLCZB.js");
82
82
  return runDigest({ baseUrl: dashboardBaseUrl() });
83
83
  }
84
84
  if (opts.sendReady) {
85
85
  const { sendApprovedReports } = await import("./orchestrate-6HROYTM6.js");
86
- const { makeSiteMirror } = await import("./site-mirror-RQTEAID5.js");
86
+ const { makeSiteMirror } = await import("./site-mirror-GCFLBBWK.js");
87
87
  const { mirrorWrite } = await import("./freeze-A6MUCZU4.js");
88
88
  const { openDb, readDbConfig } = await import("./client-JYKPVCJX.js");
89
89
  const { mirrorReportPatch } = await import("./fleet-state-3LQUQHYD.js");
@@ -145,9 +145,9 @@ async function runReportCommand(slug, opts) {
145
145
  }
146
146
  async function runDueDraft() {
147
147
  const base = openBase(readAirtableConfig());
148
- const { makeScheduleMirrorBestEffort } = await import("./health-mirror-7LKC7Q5Z.js");
149
- const { makeReportMirror } = await import("./report-mirror-3ENU6OOK.js");
150
- const { makeSiteMirror } = await import("./site-mirror-RQTEAID5.js");
148
+ const { makeScheduleMirrorBestEffort } = await import("./health-mirror-GMSF3Z5R.js");
149
+ const { makeReportMirror } = await import("./report-mirror-GMNSH5HF.js");
150
+ const { makeSiteMirror } = await import("./site-mirror-GCFLBBWK.js");
151
151
  const result = await draftDueReports(
152
152
  base,
153
153
  /* @__PURE__ */ new Date(),
@@ -337,8 +337,8 @@ async function runSingleSiteDraft(slug, opts) {
337
337
  if (!site) {
338
338
  throw Object.assign(new Error(`No Websites row matched slug "${slug}"`), { exitCode: 2 });
339
339
  }
340
- const reportMirror = opts.previewOnly ? null : await (await import("./report-mirror-3ENU6OOK.js")).makeReportMirror();
341
- const siteMirror = opts.previewOnly ? null : await (await import("./site-mirror-RQTEAID5.js")).makeSiteMirror();
340
+ const reportMirror = opts.previewOnly ? null : await (await import("./report-mirror-GMNSH5HF.js")).makeReportMirror();
341
+ const siteMirror = opts.previewOnly ? null : await (await import("./site-mirror-GCFLBBWK.js")).makeSiteMirror();
342
342
  const result = await draftReportForSite(opts.previewOnly ? null : base, site, opts.reportType, {
343
343
  previewOnly: opts.previewOnly,
344
344
  // Only forced on. Left undefined, draftReportForSite keeps its default
@@ -366,4 +366,4 @@ export {
366
366
  runReportCommand,
367
367
  writeNextDueDates
368
368
  };
369
- //# sourceMappingURL=report-2N4PXO3L.js.map
369
+ //# sourceMappingURL=report-AAY2HZZR.js.map
@@ -3,10 +3,10 @@ import {
3
3
  mirrorReportPatch,
4
4
  storeRenderedHtml
5
5
  } from "./chunk-QBAAZY7W.js";
6
+ import "./chunk-P6AORG32.js";
6
7
  import {
7
8
  TURSO_IS_AUTHORITATIVE
8
9
  } from "./chunk-SVAAONYB.js";
9
- import "./chunk-P6AORG32.js";
10
10
  import "./chunk-F3JWOPTG.js";
11
11
  import "./chunk-VAD43MOR.js";
12
12
  import "./chunk-7NYN2P6I.js";
@@ -52,4 +52,4 @@ async function makeReportMirror(open = () => openDb(readDbConfig()), strict = TU
52
52
  export {
53
53
  makeReportMirror
54
54
  };
55
- //# sourceMappingURL=report-mirror-3ENU6OOK.js.map
55
+ //# sourceMappingURL=report-mirror-GMNSH5HF.js.map
@@ -1,6 +1,6 @@
1
1
  import {
2
2
  selfUpdating
3
- } from "./chunk-62CMMGEO.js";
3
+ } from "./chunk-GSWTT2J6.js";
4
4
  import "./chunk-MNDIED4M.js";
5
5
  import {
6
6
  runRecipeOverSites
@@ -13,7 +13,7 @@ import {
13
13
  import {
14
14
  resolveSites
15
15
  } from "./chunk-Q47DU255.js";
16
- import "./chunk-73UFRZKY.js";
16
+ import "./chunk-MLT4QY5X.js";
17
17
  import "./chunk-GASBX52O.js";
18
18
  import "./chunk-XHHMM5HX.js";
19
19
  import "./chunk-Z3JXLULD.js";
@@ -62,4 +62,4 @@ async function runSelfUpdatingCommand(site, opts) {
62
62
  export {
63
63
  runSelfUpdatingCommand
64
64
  };
65
- //# sourceMappingURL=self-updating-NTCCWJYZ.js.map
65
+ //# sourceMappingURL=self-updating-VQIW24RZ.js.map
@@ -41,8 +41,8 @@ import {
41
41
  defaultResendClient
42
42
  } from "./chunk-WEKL2HYJ.js";
43
43
  import "./chunk-W45FZEGE.js";
44
- import "./chunk-RARREDQE.js";
45
44
  import "./chunk-WS6NU475.js";
45
+ import "./chunk-RARREDQE.js";
46
46
  import "./chunk-MFHS7IQ2.js";
47
47
  import "./chunk-6VAL7XJT.js";
48
48
 
@@ -3,10 +3,10 @@ import {
3
3
  mirrorSiteFields,
4
4
  mirrorSiteInsert
5
5
  } from "./chunk-QBAAZY7W.js";
6
+ import "./chunk-P6AORG32.js";
6
7
  import {
7
8
  TURSO_IS_AUTHORITATIVE
8
9
  } from "./chunk-SVAAONYB.js";
9
- import "./chunk-P6AORG32.js";
10
10
  import "./chunk-F3JWOPTG.js";
11
11
  import "./chunk-VAD43MOR.js";
12
12
  import "./chunk-7NYN2P6I.js";
@@ -59,4 +59,4 @@ async function makeSiteMirror(open = () => openDb(readDbConfig()), strict = TURS
59
59
  export {
60
60
  makeSiteMirror
61
61
  };
62
- //# sourceMappingURL=site-mirror-RQTEAID5.js.map
62
+ //# sourceMappingURL=site-mirror-GCFLBBWK.js.map
@@ -119,4 +119,4 @@ export {
119
119
  rescoreNewSubmissions,
120
120
  runSubmissionsCommand
121
121
  };
122
- //# sourceMappingURL=submissions-TEHPBSZJ.js.map
122
+ //# sourceMappingURL=submissions-7LGJJSDL.js.map
@@ -14,13 +14,14 @@ import {
14
14
  CANONICAL_GITIGNORE_ENTRIES,
15
15
  isConfigName,
16
16
  mergeGitignore,
17
+ planTemplateDiffs,
17
18
  syncConfigs
18
- } from "./chunk-3VQWSE3F.js";
19
+ } from "./chunk-DXWLWR4Q.js";
19
20
  import "./chunk-3G25KIWW.js";
20
21
  import {
21
22
  ALL_TEMPLATES,
22
23
  templatesByName
23
- } from "./chunk-73UFRZKY.js";
24
+ } from "./chunk-MLT4QY5X.js";
24
25
  import "./chunk-Z3JXLULD.js";
25
26
  import "./chunk-RARREDQE.js";
26
27
  import "./chunk-XTK5VIQB.js";
@@ -57,15 +58,8 @@ async function dryPlanGitignore(cwd) {
57
58
  async function dryPlan(cwd, which) {
58
59
  const includeGitignore = which ? which.includes("gitignore") : true;
59
60
  const templateTargets = which ? templatesByName(which.filter((c) => c !== "gitignore")) : ALL_TEMPLATES;
60
- const lines = [];
61
- for (const t of templateTargets) {
62
- let existing = "";
63
- try {
64
- existing = await readFile(join(cwd, t.path), "utf-8");
65
- } catch {
66
- }
67
- if (existing !== t.contents) lines.push(`would update ${t.path} (config: ${t.config})`);
68
- }
61
+ const diffs = await planTemplateDiffs(cwd, templateTargets);
62
+ const lines = diffs.map((t) => `would update ${t.path} (config: ${t.config})`);
69
63
  if (includeGitignore) {
70
64
  const gi = await dryPlanGitignore(cwd);
71
65
  if (gi) lines.push(gi);
@@ -113,4 +107,4 @@ async function runSyncConfigsCommand(site, opts) {
113
107
  export {
114
108
  runSyncConfigsCommand
115
109
  };
116
- //# sourceMappingURL=sync-configs-LVBITPLU.js.map
110
+ //# sourceMappingURL=sync-configs-ZYLTMUNX.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../src/cli/commands/sync-configs.ts"],"sourcesContent":["import { readFile } from \"node:fs/promises\";\nimport { join, resolve } from \"node:path\";\nimport {\n syncConfigs,\n ALL_CONFIG_NAMES,\n isConfigName,\n planTemplateDiffs,\n} from \"../../recipes/sync-configs.js\";\nimport { ALL_TEMPLATES, templatesByName } from \"../../recipes/sync-configs/templates.js\";\nimport {\n CANONICAL_GITIGNORE_ENTRIES,\n mergeGitignore,\n} from \"../../recipes/sync-configs/gitignore.js\";\nimport type { ConfigName, RecipeResult } from \"../../types.js\";\nimport { resolveSites } from \"../fleet/resolve-sites.js\";\nimport { prepareFleetSites, appendSkipNotice, type SkippedSite } from \"../fleet/prepare-sites.js\";\nimport { runRecipeOverSites } from \"../fleet/run-recipe-over-sites.js\";\nimport { fleetWorkdir } from \"../../util/fleet-workdir.js\";\n\nexport type SyncConfigsCommandOptions = {\n only?: string;\n dry?: boolean;\n fleet?: string;\n workdir?: string;\n cwd?: string;\n};\n\nfunction parseOnly(value?: string): ConfigName[] | undefined {\n if (!value) return undefined;\n const names = value.split(\",\").map((s) => s.trim());\n for (const n of names) {\n if (!isConfigName(n)) {\n throw Object.assign(\n new Error(`unknown config in --only: \"${n}\". Valid: ${ALL_CONFIG_NAMES.join(\", \")}`),\n { exitCode: 2 },\n );\n }\n }\n return names as ConfigName[];\n}\n\nasync function dryPlanGitignore(cwd: string): Promise<string | null> {\n let existing: string | null;\n try {\n existing = await readFile(join(cwd, \".gitignore\"), \"utf-8\");\n } catch {\n return \"would create .gitignore\";\n }\n const merge = mergeGitignore(existing, CANONICAL_GITIGNORE_ENTRIES);\n if (merge.added.length === 0) return null;\n return `would update .gitignore (${merge.added.length} canonical entries to add)`;\n}\n\nasync function dryPlan(cwd: string, which?: ConfigName[]): Promise<string> {\n const includeGitignore = which ? which.includes(\"gitignore\") : true;\n const templateTargets = which\n ? templatesByName(which.filter((c): c is ConfigName => c !== \"gitignore\"))\n : ALL_TEMPLATES;\n\n // Ask the recipe's own planner rather than re-deriving drift here. svelte.config\n // and netlify.toml are compliance-checked, not byte-matched, so a local\n // `existing !== contents` comparison reported files the real run leaves alone —\n // and a preview that disagrees with the command it previews is worse than none.\n const diffs = await planTemplateDiffs(cwd, templateTargets);\n const lines = diffs.map((t) => `would update ${t.path} (config: ${t.config})`);\n if (includeGitignore) {\n const gi = await dryPlanGitignore(cwd);\n if (gi) lines.push(gi);\n }\n return lines.length === 0 ? \"no changes needed\" : lines.join(\"\\n\");\n}\n\nfunction formatResult(r: RecipeResult): string {\n if (r.status === \"noop\") return `[${r.site}] noop: ${r.notes ?? \"all configs in sync\"}`;\n return `[${r.site}] applied: ${r.commits.length} commit(s)\\n${r.notes ?? \"\"}`;\n}\n\nexport async function runSyncConfigsCommand(\n site: string | undefined,\n opts: SyncConfigsCommandOptions,\n): Promise<{ output: string; code: number }> {\n const which = parseOnly(opts.only);\n const cwd = opts.cwd ? resolve(opts.cwd) : process.cwd();\n\n let sites = await resolveSites({\n ...(site !== undefined ? { site } : {}),\n ...(opts.fleet !== undefined ? { fleet: opts.fleet } : {}),\n ...(opts.workdir !== undefined ? { workdir: opts.workdir } : {}),\n cwd,\n });\n\n let skipped: SkippedSite[] = [];\n if (opts.fleet) {\n const workdir = opts.workdir ?? fleetWorkdir();\n const prep = await prepareFleetSites(sites, { workdir });\n sites = prep.prepared;\n skipped = prep.skipped;\n }\n\n if (opts.dry) {\n const blocks: string[] = [];\n for (const s of sites) {\n blocks.push(`[${s.name || s.path}]\\n` + (await dryPlan(s.path, which)));\n }\n return { output: appendSkipNotice(blocks.join(\"\\n\\n\"), skipped), code: 0 };\n }\n\n const results = await runRecipeOverSites(\"sync-configs\", sites, (s) =>\n syncConfigs(s, which ? { which } : {}),\n );\n\n const output = results.map(formatResult).join(\"\\n\");\n const code = results.some((r) => r.status === \"failed\") ? 1 : 0;\n return { output: appendSkipNotice(output, skipped), code };\n}\n"],"mappings":"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","names":[]}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@reddoorla/maintenance",
3
- "version": "0.89.0",
3
+ "version": "0.90.0",
4
4
  "description": "Canonical maintenance configs, audits, and recipes for the reddoor stack.",
5
5
  "type": "module",
6
6
  "license": "MIT",
@@ -33,6 +33,10 @@
33
33
  "types": "./dist/client/index.d.ts",
34
34
  "import": "./dist/client/index.js"
35
35
  },
36
+ "./images": {
37
+ "types": "./dist/images/index.d.ts",
38
+ "import": "./dist/images/index.js"
39
+ },
36
40
  "./configs/lighthouse": {
37
41
  "types": "./dist/configs/lighthouse.d.ts",
38
42
  "import": "./dist/configs/lighthouse.js"