@buoy-gg/images 7.0.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 (195) hide show
  1. package/LICENSE +58 -0
  2. package/README.md +58 -0
  3. package/lib/commonjs/capture/actions.js +227 -0
  4. package/lib/commonjs/capture/actions.js.map +1 -0
  5. package/lib/commonjs/capture/install.js +41 -0
  6. package/lib/commonjs/capture/install.js.map +1 -0
  7. package/lib/commonjs/capture/installExpoImage.js +99 -0
  8. package/lib/commonjs/capture/installExpoImage.js.map +1 -0
  9. package/lib/commonjs/capture/installRnImage.js +128 -0
  10. package/lib/commonjs/capture/installRnImage.js.map +1 -0
  11. package/lib/commonjs/capture/overrides.js +286 -0
  12. package/lib/commonjs/capture/overrides.js.map +1 -0
  13. package/lib/commonjs/capture/savings.js +193 -0
  14. package/lib/commonjs/capture/savings.js.map +1 -0
  15. package/lib/commonjs/capture/shared.js +367 -0
  16. package/lib/commonjs/capture/shared.js.map +1 -0
  17. package/lib/commonjs/components/ImageDetail.js +444 -0
  18. package/lib/commonjs/components/ImageDetail.js.map +1 -0
  19. package/lib/commonjs/components/ImageDetailFooter.js +232 -0
  20. package/lib/commonjs/components/ImageDetailFooter.js.map +1 -0
  21. package/lib/commonjs/components/ImageRow.js +164 -0
  22. package/lib/commonjs/components/ImageRow.js.map +1 -0
  23. package/lib/commonjs/components/ImagesHeader.js +63 -0
  24. package/lib/commonjs/components/ImagesHeader.js.map +1 -0
  25. package/lib/commonjs/components/ImagesIcon.js +59 -0
  26. package/lib/commonjs/components/ImagesIcon.js.map +1 -0
  27. package/lib/commonjs/components/ImagesListFooter.js +194 -0
  28. package/lib/commonjs/components/ImagesListFooter.js.map +1 -0
  29. package/lib/commonjs/components/ImagesModal.js +173 -0
  30. package/lib/commonjs/components/ImagesModal.js.map +1 -0
  31. package/lib/commonjs/components/ImagesRoot.js +24 -0
  32. package/lib/commonjs/components/ImagesRoot.js.map +1 -0
  33. package/lib/commonjs/components/InsightsBar.js +59 -0
  34. package/lib/commonjs/components/InsightsBar.js.map +1 -0
  35. package/lib/commonjs/export.js +81 -0
  36. package/lib/commonjs/export.js.map +1 -0
  37. package/lib/commonjs/format.js +117 -0
  38. package/lib/commonjs/format.js.map +1 -0
  39. package/lib/commonjs/hooks/useImageRecords.js +20 -0
  40. package/lib/commonjs/hooks/useImageRecords.js.map +1 -0
  41. package/lib/commonjs/index.js +236 -0
  42. package/lib/commonjs/index.js.map +1 -0
  43. package/lib/commonjs/package.json +1 -0
  44. package/lib/commonjs/preset.js +45 -0
  45. package/lib/commonjs/preset.js.map +1 -0
  46. package/lib/commonjs/register.js +19 -0
  47. package/lib/commonjs/register.js.map +1 -0
  48. package/lib/commonjs/state.js +54 -0
  49. package/lib/commonjs/state.js.map +1 -0
  50. package/lib/commonjs/store/imageEventStore.js +160 -0
  51. package/lib/commonjs/store/imageEventStore.js.map +1 -0
  52. package/lib/commonjs/store/insights.js +76 -0
  53. package/lib/commonjs/store/insights.js.map +1 -0
  54. package/lib/commonjs/sync/imagesSyncAdapter.js +315 -0
  55. package/lib/commonjs/sync/imagesSyncAdapter.js.map +1 -0
  56. package/lib/commonjs/types.js +2 -0
  57. package/lib/commonjs/types.js.map +1 -0
  58. package/lib/module/capture/actions.js +214 -0
  59. package/lib/module/capture/actions.js.map +1 -0
  60. package/lib/module/capture/install.js +36 -0
  61. package/lib/module/capture/install.js.map +1 -0
  62. package/lib/module/capture/installExpoImage.js +94 -0
  63. package/lib/module/capture/installExpoImage.js.map +1 -0
  64. package/lib/module/capture/installRnImage.js +122 -0
  65. package/lib/module/capture/installRnImage.js.map +1 -0
  66. package/lib/module/capture/overrides.js +269 -0
  67. package/lib/module/capture/overrides.js.map +1 -0
  68. package/lib/module/capture/savings.js +189 -0
  69. package/lib/module/capture/savings.js.map +1 -0
  70. package/lib/module/capture/shared.js +359 -0
  71. package/lib/module/capture/shared.js.map +1 -0
  72. package/lib/module/components/ImageDetail.js +440 -0
  73. package/lib/module/components/ImageDetail.js.map +1 -0
  74. package/lib/module/components/ImageDetailFooter.js +228 -0
  75. package/lib/module/components/ImageDetailFooter.js.map +1 -0
  76. package/lib/module/components/ImageRow.js +160 -0
  77. package/lib/module/components/ImageRow.js.map +1 -0
  78. package/lib/module/components/ImagesHeader.js +59 -0
  79. package/lib/module/components/ImagesHeader.js.map +1 -0
  80. package/lib/module/components/ImagesIcon.js +55 -0
  81. package/lib/module/components/ImagesIcon.js.map +1 -0
  82. package/lib/module/components/ImagesListFooter.js +190 -0
  83. package/lib/module/components/ImagesListFooter.js.map +1 -0
  84. package/lib/module/components/ImagesModal.js +169 -0
  85. package/lib/module/components/ImagesModal.js.map +1 -0
  86. package/lib/module/components/ImagesRoot.js +20 -0
  87. package/lib/module/components/ImagesRoot.js.map +1 -0
  88. package/lib/module/components/InsightsBar.js +55 -0
  89. package/lib/module/components/InsightsBar.js.map +1 -0
  90. package/lib/module/export.js +76 -0
  91. package/lib/module/export.js.map +1 -0
  92. package/lib/module/format.js +108 -0
  93. package/lib/module/format.js.map +1 -0
  94. package/lib/module/hooks/useImageRecords.js +16 -0
  95. package/lib/module/hooks/useImageRecords.js.map +1 -0
  96. package/lib/module/index.js +73 -0
  97. package/lib/module/index.js.map +1 -0
  98. package/lib/module/preset.js +40 -0
  99. package/lib/module/preset.js.map +1 -0
  100. package/lib/module/register.js +19 -0
  101. package/lib/module/register.js.map +1 -0
  102. package/lib/module/state.js +50 -0
  103. package/lib/module/state.js.map +1 -0
  104. package/lib/module/store/imageEventStore.js +146 -0
  105. package/lib/module/store/imageEventStore.js.map +1 -0
  106. package/lib/module/store/insights.js +71 -0
  107. package/lib/module/store/insights.js.map +1 -0
  108. package/lib/module/sync/imagesSyncAdapter.js +311 -0
  109. package/lib/module/sync/imagesSyncAdapter.js.map +1 -0
  110. package/lib/module/types.js +2 -0
  111. package/lib/module/types.js.map +1 -0
  112. package/lib/typescript/capture/actions.d.ts +49 -0
  113. package/lib/typescript/capture/actions.d.ts.map +1 -0
  114. package/lib/typescript/capture/install.d.ts +15 -0
  115. package/lib/typescript/capture/install.d.ts.map +1 -0
  116. package/lib/typescript/capture/installExpoImage.d.ts +23 -0
  117. package/lib/typescript/capture/installExpoImage.d.ts.map +1 -0
  118. package/lib/typescript/capture/installRnImage.d.ts +24 -0
  119. package/lib/typescript/capture/installRnImage.d.ts.map +1 -0
  120. package/lib/typescript/capture/overrides.d.ts +83 -0
  121. package/lib/typescript/capture/overrides.d.ts.map +1 -0
  122. package/lib/typescript/capture/savings.d.ts +37 -0
  123. package/lib/typescript/capture/savings.d.ts.map +1 -0
  124. package/lib/typescript/capture/shared.d.ts +61 -0
  125. package/lib/typescript/capture/shared.d.ts.map +1 -0
  126. package/lib/typescript/components/ImageDetail.d.ts +13 -0
  127. package/lib/typescript/components/ImageDetail.d.ts.map +1 -0
  128. package/lib/typescript/components/ImageDetailFooter.d.ts +19 -0
  129. package/lib/typescript/components/ImageDetailFooter.d.ts.map +1 -0
  130. package/lib/typescript/components/ImageRow.d.ts +15 -0
  131. package/lib/typescript/components/ImageRow.d.ts.map +1 -0
  132. package/lib/typescript/components/ImagesHeader.d.ts +25 -0
  133. package/lib/typescript/components/ImagesHeader.d.ts.map +1 -0
  134. package/lib/typescript/components/ImagesIcon.d.ts +13 -0
  135. package/lib/typescript/components/ImagesIcon.d.ts.map +1 -0
  136. package/lib/typescript/components/ImagesListFooter.d.ts +8 -0
  137. package/lib/typescript/components/ImagesListFooter.d.ts.map +1 -0
  138. package/lib/typescript/components/ImagesModal.d.ts +17 -0
  139. package/lib/typescript/components/ImagesModal.d.ts.map +1 -0
  140. package/lib/typescript/components/ImagesRoot.d.ts +11 -0
  141. package/lib/typescript/components/ImagesRoot.d.ts.map +1 -0
  142. package/lib/typescript/components/InsightsBar.d.ts +13 -0
  143. package/lib/typescript/components/InsightsBar.d.ts.map +1 -0
  144. package/lib/typescript/export.d.ts +12 -0
  145. package/lib/typescript/export.d.ts.map +1 -0
  146. package/lib/typescript/format.d.ts +26 -0
  147. package/lib/typescript/format.d.ts.map +1 -0
  148. package/lib/typescript/hooks/useImageRecords.d.ts +11 -0
  149. package/lib/typescript/hooks/useImageRecords.d.ts.map +1 -0
  150. package/lib/typescript/index.d.ts +33 -0
  151. package/lib/typescript/index.d.ts.map +1 -0
  152. package/lib/typescript/preset.d.ts +38 -0
  153. package/lib/typescript/preset.d.ts.map +1 -0
  154. package/lib/typescript/register.d.ts +15 -0
  155. package/lib/typescript/register.d.ts.map +1 -0
  156. package/lib/typescript/state.d.ts +54 -0
  157. package/lib/typescript/state.d.ts.map +1 -0
  158. package/lib/typescript/store/imageEventStore.d.ts +34 -0
  159. package/lib/typescript/store/imageEventStore.d.ts.map +1 -0
  160. package/lib/typescript/store/insights.d.ts +11 -0
  161. package/lib/typescript/store/insights.d.ts.map +1 -0
  162. package/lib/typescript/sync/imagesSyncAdapter.d.ts +205 -0
  163. package/lib/typescript/sync/imagesSyncAdapter.d.ts.map +1 -0
  164. package/lib/typescript/types.d.ts +121 -0
  165. package/lib/typescript/types.d.ts.map +1 -0
  166. package/package.json +67 -0
  167. package/register.d.ts +1 -0
  168. package/register.js +15 -0
  169. package/src/capture/actions.ts +206 -0
  170. package/src/capture/install.ts +36 -0
  171. package/src/capture/installExpoImage.ts +115 -0
  172. package/src/capture/installRnImage.tsx +133 -0
  173. package/src/capture/overrides.ts +282 -0
  174. package/src/capture/savings.ts +193 -0
  175. package/src/capture/shared.ts +387 -0
  176. package/src/components/ImageDetail.tsx +456 -0
  177. package/src/components/ImageDetailFooter.tsx +270 -0
  178. package/src/components/ImageRow.tsx +148 -0
  179. package/src/components/ImagesHeader.tsx +77 -0
  180. package/src/components/ImagesIcon.tsx +66 -0
  181. package/src/components/ImagesListFooter.tsx +193 -0
  182. package/src/components/ImagesModal.tsx +195 -0
  183. package/src/components/ImagesRoot.tsx +18 -0
  184. package/src/components/InsightsBar.tsx +51 -0
  185. package/src/export.ts +100 -0
  186. package/src/format.ts +85 -0
  187. package/src/hooks/useImageRecords.ts +24 -0
  188. package/src/index.tsx +108 -0
  189. package/src/preset.tsx +35 -0
  190. package/src/register.ts +17 -0
  191. package/src/state.ts +88 -0
  192. package/src/store/imageEventStore.ts +162 -0
  193. package/src/store/insights.ts +66 -0
  194. package/src/sync/imagesSyncAdapter.ts +261 -0
  195. package/src/types.ts +111 -0
@@ -0,0 +1 @@
1
+ {"version":3,"names":["_reactNative","require","_state","MAX_RECORDS","emit","s","imagesState","emitScheduled","requestAnimationFrame","listener","listeners","invalidate","snapshot","records","createRecord","partial","record","id","nextId","createdAt","Date","now","status","mounted","loadCount","push","byId","set","length","dropped","splice","d","delete","updateRecord","patch","get","undefined","Object","assign","getRecord","getSnapshot","subscribe","add","clearRecords","filter","r","Map","map","neededPixels","layout","width","height","scale","PixelRatio","Math","round","oversizeFactor","needed","intrinsic","neededArea","intrinsicArea","sqrt","estDecodedBytes","estWastedBytes","wasted","max","computeStats","list","stats","total","loading","loaded","errors","networkLoads","progressSeen","cacheVerdict"],"sourceRoot":"../../../src","sources":["store/imageEventStore.ts"],"mappings":"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","ignoreList":[]}
@@ -0,0 +1,76 @@
1
+ "use strict";
2
+
3
+ Object.defineProperty(exports, "__esModule", {
4
+ value: true
5
+ });
6
+ exports.computeInsights = computeInsights;
7
+ exports.insightChips = insightChips;
8
+ /**
9
+ * Cross-record insights — findings computed purely from data the registry
10
+ * already holds (no extra instrumentation): duplicate simultaneous loads,
11
+ * retry storms, iOS image-queue saturation, missing alt text, and
12
+ * layout-shifting images.
13
+ */
14
+
15
+ /** loadCount at/above this flags render-thrash reload storms. */
16
+ const RETRY_STORM_THRESHOLD = 5;
17
+ /** RCTImageLoader allows 4 concurrent loading tasks on iOS. */
18
+ const IOS_CONCURRENT_LOAD_LIMIT = 4;
19
+ function computeInsights(records) {
20
+ const byUri = new Map();
21
+ const retryStorms = [];
22
+ const layoutShifters = [];
23
+ let missingAlt = 0;
24
+ let rnLoading = 0;
25
+ for (const r of records) {
26
+ if (r.mounted && r.uri) {
27
+ byUri.set(r.uri, (byUri.get(r.uri) ?? 0) + 1);
28
+ }
29
+ if (r.loadCount >= RETRY_STORM_THRESHOLD) {
30
+ retryStorms.push({
31
+ id: r.id,
32
+ uri: r.uri,
33
+ loadCount: r.loadCount
34
+ });
35
+ }
36
+ if ((r.layoutShifts ?? 0) > 0) {
37
+ layoutShifters.push({
38
+ id: r.id,
39
+ uri: r.uri,
40
+ shifts: r.layoutShifts ?? 0
41
+ });
42
+ }
43
+ if (r.mounted && r.hasAltText === false) missingAlt++;
44
+ if (r.lib === "rn" && r.mounted && r.status === "loading") rnLoading++;
45
+ }
46
+ const duplicates = [...byUri.entries()].filter(([, count]) => count > 1).map(([uri, count]) => ({
47
+ uri,
48
+ count
49
+ })).sort((a, b) => b.count - a.count);
50
+ return {
51
+ duplicates,
52
+ retryStorms: retryStorms.sort((a, b) => b.loadCount - a.loadCount),
53
+ queueSaturated: rnLoading > IOS_CONCURRENT_LOAD_LIMIT,
54
+ missingAlt,
55
+ layoutShifters
56
+ };
57
+ }
58
+
59
+ /** Compact one-line chips for UI/MCP surfacing. Empty array = all clear. */
60
+ function insightChips(insights) {
61
+ const chips = [];
62
+ if (insights.duplicates.length > 0) {
63
+ const extra = insights.duplicates.reduce((n, d) => n + d.count - 1, 0);
64
+ chips.push(`${insights.duplicates.length} duplicate URL${insights.duplicates.length > 1 ? "s" : ""} (${extra} redundant loads)`);
65
+ }
66
+ if (insights.retryStorms.length > 0) {
67
+ chips.push(`${insights.retryStorms.length} retry storm${insights.retryStorms.length > 1 ? "s" : ""}`);
68
+ }
69
+ if (insights.queueSaturated) chips.push("iOS image queue saturated (>4 loading)");
70
+ if (insights.missingAlt > 0) chips.push(`${insights.missingAlt} missing alt text`);
71
+ if (insights.layoutShifters.length > 0) {
72
+ chips.push(`${insights.layoutShifters.length} layout-shifting image${insights.layoutShifters.length > 1 ? "s" : ""}`);
73
+ }
74
+ return chips;
75
+ }
76
+ //# sourceMappingURL=insights.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"names":["RETRY_STORM_THRESHOLD","IOS_CONCURRENT_LOAD_LIMIT","computeInsights","records","byUri","Map","retryStorms","layoutShifters","missingAlt","rnLoading","r","mounted","uri","set","get","loadCount","push","id","layoutShifts","shifts","hasAltText","lib","status","duplicates","entries","filter","count","map","sort","a","b","queueSaturated","insightChips","insights","chips","length","extra","reduce","n","d"],"sourceRoot":"../../../src","sources":["store/insights.ts"],"mappings":"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","ignoreList":[]}
@@ -0,0 +1,315 @@
1
+ "use strict";
2
+
3
+ Object.defineProperty(exports, "__esModule", {
4
+ value: true
5
+ });
6
+ exports.imagesSyncAdapter = void 0;
7
+ var _actions = require("../capture/actions");
8
+ var _install = require("../capture/install");
9
+ var _overrides = require("../capture/overrides");
10
+ var _savings = require("../capture/savings");
11
+ var _insights = require("../store/insights");
12
+ var _imageEventStore = require("../store/imageEventStore");
13
+ /**
14
+ * Sync adapter for the Images tool, consumed by @buoy-gg/external-sync's
15
+ * `useExternalSync` (structurally matches its ToolSyncAdapter interface so
16
+ * this package doesn't need a dependency on it — same pattern as js-top's
17
+ * adapter). Exposes the live image registry to the desktop dashboard and the
18
+ * MCP server, plus every action the on-device UI has: reload/retry,
19
+ * simulation overrides (force error/loading/blank/URL swap), locate-flash,
20
+ * global modes, and cache clears.
21
+ */
22
+
23
+ /** Slim wire form of a record (heavy/derived fields precomputed + rounded). */
24
+ function toWire(record) {
25
+ const factor = (0, _imageEventStore.oversizeFactor)(record);
26
+ return {
27
+ id: record.id,
28
+ lib: record.lib,
29
+ uri: record.uri,
30
+ kind: record.sourceKind,
31
+ status: record.status,
32
+ mounted: record.mounted,
33
+ cache: record.cacheVerdict ?? null,
34
+ cacheSource: record.cacheVerdictSource ?? null,
35
+ ms: record.durationMs != null ? Math.round(record.durationMs) : null,
36
+ intrinsic: record.intrinsic ?? null,
37
+ layout: record.layout ? {
38
+ width: Math.round(record.layout.width),
39
+ height: Math.round(record.layout.height)
40
+ } : null,
41
+ neededPx: (0, _imageEventStore.neededPixels)(record),
42
+ oversizeFactor: factor != null ? Math.round(factor * 100) / 100 : null,
43
+ decodedKB: Math.round((0, _imageEventStore.estDecodedBytes)(record) / 1024),
44
+ wastedKB: Math.round((0, _imageEventStore.estWastedBytes)(record) / 1024),
45
+ progressSeen: record.progressSeen === true,
46
+ bytesTotal: record.bytesTotal ?? null,
47
+ error: record.error ?? null,
48
+ errorCode: record.errorCode ?? null,
49
+ loadCount: record.loadCount,
50
+ overrideLabel: record.overrideLabel ?? null,
51
+ hasAltText: record.hasAltText ?? null,
52
+ layoutShifts: record.layoutShifts ?? 0,
53
+ ageMs: Date.now() - record.createdAt
54
+ };
55
+ }
56
+ function requireRecord(params) {
57
+ const id = params?.id;
58
+ if (typeof id !== "number") throw new Error("Missing numeric `id` param");
59
+ const record = (0, _imageEventStore.getRecord)(id);
60
+ if (!record) {
61
+ throw new Error(`Image record ${id} not found (cleared or evicted) — re-run the list action for current ids.`);
62
+ }
63
+ return record;
64
+ }
65
+ function overview() {
66
+ const snapshot = (0, _imageEventStore.getSnapshot)();
67
+ return {
68
+ stats: (0, _imageEventStore.computeStats)(snapshot),
69
+ captureStatus: (0, _install.getCaptureStatus)(),
70
+ globalModes: (0, _overrides.getGlobalModes)(),
71
+ insights: (0, _insights.computeInsights)(snapshot),
72
+ records: [...snapshot].reverse() // newest first
73
+ };
74
+ }
75
+ const imagesSyncAdapter = exports.imagesSyncAdapter = {
76
+ version: 1,
77
+ getSnapshot: () => {
78
+ const {
79
+ records,
80
+ ...rest
81
+ } = overview();
82
+ return {
83
+ ...rest,
84
+ records: records.slice(0, 100).map(toWire)
85
+ };
86
+ },
87
+ subscribe: onChange => (0, _imageEventStore.subscribe)(onChange),
88
+ actions: {
89
+ /** List records (newest first). Params: { limit?, status? }. */
90
+ list: params => {
91
+ const p = params ?? {};
92
+ const limit = Math.min(Math.max(p.limit ?? 50, 1), 200);
93
+ const {
94
+ records,
95
+ ...rest
96
+ } = overview();
97
+ const filtered = p.status ? records.filter(r => r.status === p.status) : records;
98
+ return {
99
+ ...rest,
100
+ total: filtered.length,
101
+ records: filtered.slice(0, limit).map(toWire)
102
+ };
103
+ },
104
+ /** Full detail for one record. Params: { id }. */
105
+ getDetail: params => {
106
+ const record = requireRecord(params);
107
+ return {
108
+ ...toWire(record),
109
+ errorHeaders: record.errorHeaders ?? null
110
+ };
111
+ },
112
+ /** Bypass-cache reload. Params: { id }. */
113
+ hardReload: params => (0, _actions.hardReloadRecord)(requireRecord(params)),
114
+ /** Re-encode at displayed size as WebP, return real byte savings. Params: { id }. */
115
+ proveSavings: params => (0, _savings.proveSavings)(requireRecord(params)),
116
+ /** Plain fresh load attempt. Params: { id }. */
117
+ retry: params => (0, _actions.retryRecord)(requireRecord(params)),
118
+ /** Evict the expo-image disk entry for this record. Params: { id }. */
119
+ evictDisk: async params => {
120
+ const record = requireRecord(params);
121
+ const evicted = await (0, _actions.evictExpoDiskEntry)(record);
122
+ return {
123
+ ok: evicted,
124
+ message: evicted ? "Disk cache entry deleted" : "No disk entry found (expo-image + expo-file-system required)"
125
+ };
126
+ },
127
+ /** Flash a red border on the on-screen image. Params: { id }. */
128
+ flash: params => {
129
+ (0, _overrides.flashRecord)(requireRecord(params).id);
130
+ return {
131
+ ok: true,
132
+ message: "Flashing for 2.5s"
133
+ };
134
+ },
135
+ /**
136
+ * Apply a simulation override. Params: { id, kind, uri? } where kind is
137
+ * 'error' | 'hang' | 'blank' | 'url' ('url' requires uri).
138
+ */
139
+ setOverride: params => {
140
+ const record = requireRecord(params);
141
+ const p = params;
142
+ const kinds = {
143
+ error: {
144
+ source: {
145
+ type: "error"
146
+ },
147
+ label: "Forced error"
148
+ },
149
+ hang: {
150
+ source: {
151
+ type: "hang"
152
+ },
153
+ label: "Forced loading"
154
+ },
155
+ blank: {
156
+ source: {
157
+ type: "blank"
158
+ },
159
+ label: "Blanked"
160
+ }
161
+ };
162
+ if (p.kind === "url") {
163
+ if (!p.uri) throw new Error("kind 'url' requires a `uri` param");
164
+ (0, _overrides.setOverride)(record.id, {
165
+ source: {
166
+ type: "url",
167
+ uri: p.uri
168
+ },
169
+ label: "URL swapped"
170
+ });
171
+ return {
172
+ ok: true,
173
+ message: `Source overridden to ${p.uri}`
174
+ };
175
+ }
176
+ const entry = p.kind ? kinds[p.kind] : undefined;
177
+ if (!entry) throw new Error(`Unknown override kind: ${String(p.kind)}`);
178
+ if (!record.mounted) {
179
+ return {
180
+ ok: false,
181
+ message: "Instance unmounted — overrides need the image on screen"
182
+ };
183
+ }
184
+ (0, _overrides.setOverride)(record.id, entry);
185
+ return {
186
+ ok: true,
187
+ message: `${entry.label} applied`
188
+ };
189
+ },
190
+ /** Remove a simulation override. Params: { id }. */
191
+ clearOverride: params => {
192
+ (0, _overrides.clearOverride)(requireRecord(params).id);
193
+ return {
194
+ ok: true,
195
+ message: "Override removed — original source restored"
196
+ };
197
+ },
198
+ /**
199
+ * Mass action on every mounted image. Params: { kind } where kind is
200
+ * 'error' | 'loading' | 'blank' | 'reload' | 'flash' | 'restore'.
201
+ */
202
+ massAction: async params => {
203
+ const kind = params?.kind;
204
+ switch (kind) {
205
+ case "error":
206
+ {
207
+ const n = (0, _overrides.setOverrideForAllMounted)({
208
+ type: "error"
209
+ }, "Forced error");
210
+ return {
211
+ ok: n > 0,
212
+ message: `Forced error on ${n} images`
213
+ };
214
+ }
215
+ case "loading":
216
+ {
217
+ const n = (0, _overrides.setOverrideForAllMounted)({
218
+ type: "hang"
219
+ }, "Forced loading");
220
+ return {
221
+ ok: n > 0,
222
+ message: `Forced loading on ${n} images`
223
+ };
224
+ }
225
+ case "blank":
226
+ {
227
+ const n = (0, _overrides.setOverrideForAllMounted)({
228
+ type: "blank"
229
+ }, "Blanked");
230
+ return {
231
+ ok: n > 0,
232
+ message: `Blanked ${n} images`
233
+ };
234
+ }
235
+ case "reload":
236
+ return (0, _actions.hardReloadAllMounted)();
237
+ case "flash":
238
+ {
239
+ const n = (0, _overrides.flashAllMounted)();
240
+ return {
241
+ ok: n > 0,
242
+ message: `Flashing ${n} images`
243
+ };
244
+ }
245
+ case "restore":
246
+ {
247
+ const n = (0, _overrides.clearAllOverrides)();
248
+ return {
249
+ ok: true,
250
+ message: `Restored ${n} images`
251
+ };
252
+ }
253
+ default:
254
+ throw new Error(`Unknown mass kind: ${String(kind)}`);
255
+ }
256
+ },
257
+ /** Global network simulation. Params: { mode: 'normal'|'offline'|'cold' }. */
258
+ setNetworkMode: params => {
259
+ const mode = params?.mode;
260
+ if (mode !== "normal" && mode !== "offline" && mode !== "cold") {
261
+ throw new Error("mode must be 'normal' | 'offline' | 'cold'");
262
+ }
263
+ (0, _overrides.setNetworkMode)(mode);
264
+ return {
265
+ ok: true,
266
+ modes: (0, _overrides.getGlobalModes)()
267
+ };
268
+ },
269
+ /** Chrome-style disable-images. Params: { enabled: boolean }. */
270
+ setBlankImages: params => {
271
+ (0, _overrides.setBlankImages)(params?.enabled === true);
272
+ return {
273
+ ok: true,
274
+ modes: (0, _overrides.getGlobalModes)()
275
+ };
276
+ },
277
+ /** Clear the captured registry (keeps in-flight loads). */
278
+ clearRecords: () => {
279
+ (0, _imageEventStore.clearRecords)();
280
+ return {
281
+ ok: true,
282
+ message: "Registry cleared"
283
+ };
284
+ },
285
+ /** Clear expo-image caches. Params: { memory?, disk? } (default both). */
286
+ clearExpoCaches: async params => {
287
+ const p = params ?? {};
288
+ const doMemory = p.memory !== false;
289
+ const doDisk = p.disk !== false;
290
+ try {
291
+ const expo = require("expo-image");
292
+ const results = [];
293
+ if (doMemory) {
294
+ await expo.Image.clearMemoryCache();
295
+ results.push("memory");
296
+ }
297
+ if (doDisk) {
298
+ await expo.Image.clearDiskCache();
299
+ results.push("disk");
300
+ }
301
+ return {
302
+ ok: true,
303
+ message: `Cleared expo-image ${results.join(" + ")} cache`
304
+ };
305
+ } catch {
306
+ return {
307
+ ok: false,
308
+ message: "expo-image not installed"
309
+ };
310
+ }
311
+ },
312
+ getCaptureStatus: () => (0, _install.getCaptureStatus)()
313
+ }
314
+ };
315
+ //# sourceMappingURL=imagesSyncAdapter.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"names":["_actions","require","_install","_overrides","_savings","_insights","_imageEventStore","toWire","record","factor","oversizeFactor","id","lib","uri","kind","sourceKind","status","mounted","cache","cacheVerdict","cacheSource","cacheVerdictSource","ms","durationMs","Math","round","intrinsic","layout","width","height","neededPx","neededPixels","decodedKB","estDecodedBytes","wastedKB","estWastedBytes","progressSeen","bytesTotal","error","errorCode","loadCount","overrideLabel","hasAltText","layoutShifts","ageMs","Date","now","createdAt","requireRecord","params","Error","getRecord","overview","snapshot","getSnapshot","stats","computeStats","captureStatus","getCaptureStatus","globalModes","getGlobalModes","insights","computeInsights","records","reverse","imagesSyncAdapter","exports","version","rest","slice","map","subscribe","onChange","actions","list","p","limit","min","max","filtered","filter","r","total","length","getDetail","errorHeaders","hardReload","hardReloadRecord","proveSavings","retry","retryRecord","evictDisk","evicted","evictExpoDiskEntry","ok","message","flash","flashRecord","setOverride","kinds","source","type","label","hang","blank","entry","undefined","String","clearOverride","massAction","n","setOverrideForAllMounted","hardReloadAllMounted","flashAllMounted","clearAllOverrides","setNetworkMode","mode","modes","setBlankImages","enabled","clearRecords","clearExpoCaches","doMemory","memory","doDisk","disk","expo","results","Image","clearMemoryCache","push","clearDiskCache","join"],"sourceRoot":"../../../src","sources":["sync/imagesSyncAdapter.ts"],"mappings":"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","ignoreList":[]}
@@ -0,0 +1,2 @@
1
+ "use strict";
2
+ //# sourceMappingURL=types.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"names":[],"sourceRoot":"../../src","sources":["types.ts"],"mappings":"","ignoreList":[]}
@@ -0,0 +1,214 @@
1
+ "use strict";
2
+
3
+ /**
4
+ * Per-image actions: hard reload (bypass cache) and retry.
5
+ *
6
+ * RN core path: the decorator wrapper owns every mounted <Image>'s props, so a
7
+ * reload request re-renders the wrapper with a bumped `key` (native remount →
8
+ * fresh load cycle) and, for cache-busting, `source.cache: 'reload'` injected
9
+ * — VERIFIED supported on BOTH platforms (iOS NSURLRequest policy;
10
+ * Android ReactImageView.kt reads source."cache" → Fresco full-fetch). The
11
+ * override stays applied until the load settles, then reverts lazily on the
12
+ * app's next natural re-render (avoids an extra cache round-trip).
13
+ *
14
+ * expo-image path: the patched class instance exposes the public
15
+ * `reloadAsync()`. Cache-busting first evicts the disk entry (cache path +
16
+ * expo-file-system delete) and clears expo's memory cache (global — no
17
+ * per-entry memory eviction exists), so the reload is a true refetch that
18
+ * rewrites both cache tiers.
19
+ */
20
+
21
+ import { imagesState } from "../state";
22
+ import { touchRecord } from "./overrides";
23
+ // ---------------------------------------------------------------------------
24
+ // RN reload-request bus (consumed by the decorator wrapper)
25
+ // ---------------------------------------------------------------------------
26
+
27
+ export function subscribeActions(listener) {
28
+ const s = imagesState();
29
+ s.actionListeners.add(listener);
30
+ return () => imagesState().actionListeners.delete(listener);
31
+ }
32
+ export function getReloadRequest(recordId) {
33
+ if (recordId == null) return undefined;
34
+ return imagesState().reloadRequests.get(recordId);
35
+ }
36
+
37
+ /** Reload nonce for a record (0 = never requested). Snapshot for the wrapper. */
38
+ export function getReloadNonce(recordId) {
39
+ return getReloadRequest(recordId)?.nonce ?? 0;
40
+ }
41
+ function requestRnReload(recordId, bust) {
42
+ const s = imagesState();
43
+ const prev = s.reloadRequests.get(recordId);
44
+ s.reloadRequests.set(recordId, {
45
+ nonce: (prev?.nonce ?? 0) + 1,
46
+ bust
47
+ });
48
+ // touchRecord bumps the render version (the wrapper's snapshot) and emits.
49
+ touchRecord(recordId);
50
+ }
51
+
52
+ /**
53
+ * Mark a request consumed once its load settles (called from the tracker on
54
+ * load/error). Silent — the wrapper reverts the prop override on the app's
55
+ * next natural re-render instead of forcing an immediate one.
56
+ */
57
+ export function settleReloadRequest(recordId) {
58
+ const s = imagesState();
59
+ const req = s.reloadRequests.get(recordId);
60
+ if (req?.bust) {
61
+ s.reloadRequests.set(recordId, {
62
+ nonce: req.nonce,
63
+ bust: false
64
+ });
65
+ }
66
+ }
67
+ export function dropActionState(recordId) {
68
+ const s = imagesState();
69
+ s.reloadRequests.delete(recordId);
70
+ s.expoInstances.delete(recordId);
71
+ s.overrides.delete(recordId);
72
+ s.flashUntil.delete(recordId);
73
+ s.recordVersions.delete(recordId);
74
+ }
75
+
76
+ // ---------------------------------------------------------------------------
77
+ // expo instance registry (populated by the render patch)
78
+ // ---------------------------------------------------------------------------
79
+
80
+ export function registerExpoInstance(recordId, instance) {
81
+ if (recordId == null) return;
82
+ imagesState().expoInstances.set(recordId, instance);
83
+ }
84
+ function expoImageStatics() {
85
+ try {
86
+ return require("expo-image").Image ?? null;
87
+ } catch {
88
+ return null;
89
+ }
90
+ }
91
+ /**
92
+ * expo-file-system, legacy path first (v19+/SDK 54+ moved the function API
93
+ * there) then the main import — same pattern as shared-ui's persistentStorage.
94
+ */
95
+ function loadFileSystem() {
96
+ try {
97
+ const mod = require("expo-file-system/legacy");
98
+ const fs = mod?.default || mod;
99
+ if (fs?.deleteAsync) return fs;
100
+ } catch {
101
+ // try main import
102
+ }
103
+ try {
104
+ const mod = require("expo-file-system");
105
+ const fs = mod?.default || mod;
106
+ if (fs?.deleteAsync) return fs;
107
+ } catch {
108
+ // not installed
109
+ }
110
+ return null;
111
+ }
112
+
113
+ /**
114
+ * Delete an expo-image disk-cache entry (JS-only: cache path + file delete).
115
+ * Returns true if an entry existed and was deleted.
116
+ */
117
+ export async function evictExpoDiskEntry(record) {
118
+ const statics = expoImageStatics();
119
+ const fileSystem = loadFileSystem();
120
+ if (!statics?.getCachePathAsync || !fileSystem?.deleteAsync || !record.uri) return false;
121
+ try {
122
+ const path = await statics.getCachePathAsync(record.uri);
123
+ if (!path) return false;
124
+ const uri = path.startsWith("file://") ? path : `file://${path}`;
125
+ await fileSystem.deleteAsync(uri, {
126
+ idempotent: true
127
+ });
128
+ return true;
129
+ } catch {
130
+ return false;
131
+ }
132
+ }
133
+
134
+ // ---------------------------------------------------------------------------
135
+ // High-level dispatchers (used by the detail view)
136
+ // ---------------------------------------------------------------------------
137
+
138
+ /** Fresh load attempt for a mounted image (no cache bypass). */
139
+ export async function retryRecord(record) {
140
+ if (!record.mounted) {
141
+ return {
142
+ ok: false,
143
+ message: "Instance unmounted — cannot reload"
144
+ };
145
+ }
146
+ if (record.lib === "expo") {
147
+ const instance = imagesState().expoInstances.get(record.id);
148
+ if (!instance?.reloadAsync) {
149
+ return {
150
+ ok: false,
151
+ message: "Live instance not reachable"
152
+ };
153
+ }
154
+ await instance.reloadAsync();
155
+ return {
156
+ ok: true,
157
+ message: "Reload requested"
158
+ };
159
+ }
160
+ requestRnReload(record.id, false);
161
+ return {
162
+ ok: true,
163
+ message: "Remounting image"
164
+ };
165
+ }
166
+
167
+ /** Hard-reload every mounted image (mass cache-bust). Returns count started. */
168
+ export async function hardReloadAllMounted() {
169
+ const {
170
+ getSnapshot
171
+ } = require("../store/imageEventStore");
172
+ let count = 0;
173
+ for (const record of getSnapshot()) {
174
+ if (!record.mounted) continue;
175
+ const result = await hardReloadRecord(record);
176
+ if (result.ok) count++;
177
+ }
178
+ return {
179
+ ok: count > 0,
180
+ message: `Hard-reloading ${count} mounted image${count === 1 ? "" : "s"}`
181
+ };
182
+ }
183
+
184
+ /** Bypass-cache reload: refetches from network and rewrites the caches. */
185
+ export async function hardReloadRecord(record) {
186
+ if (!record.mounted) {
187
+ return {
188
+ ok: false,
189
+ message: "Instance unmounted — cannot reload"
190
+ };
191
+ }
192
+ if (record.sourceKind !== "network") {
193
+ // Local/asset sources have no HTTP cache to bust — plain remount instead.
194
+ return retryRecord(record);
195
+ }
196
+ if (record.lib === "expo") {
197
+ const evicted = await evictExpoDiskEntry(record);
198
+ const statics = expoImageStatics();
199
+ // No per-entry memory eviction exists — global clear is the honest option.
200
+ await statics?.clearMemoryCache?.().catch?.(() => false);
201
+ const result = await retryRecord(record);
202
+ if (!result.ok) return result;
203
+ return {
204
+ ok: true,
205
+ message: evicted ? "Disk entry evicted, memory cache cleared, refetching" : "Memory cache cleared, refetching (no disk entry found)"
206
+ };
207
+ }
208
+ requestRnReload(record.id, true);
209
+ return {
210
+ ok: true,
211
+ message: "Refetching with cache bypassed"
212
+ };
213
+ }
214
+ //# sourceMappingURL=actions.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"names":["imagesState","touchRecord","subscribeActions","listener","s","actionListeners","add","delete","getReloadRequest","recordId","undefined","reloadRequests","get","getReloadNonce","nonce","requestRnReload","bust","prev","set","settleReloadRequest","req","dropActionState","expoInstances","overrides","flashUntil","recordVersions","registerExpoInstance","instance","expoImageStatics","require","Image","loadFileSystem","mod","fs","default","deleteAsync","evictExpoDiskEntry","record","statics","fileSystem","getCachePathAsync","uri","path","startsWith","idempotent","retryRecord","mounted","ok","message","lib","id","reloadAsync","hardReloadAllMounted","getSnapshot","count","result","hardReloadRecord","sourceKind","evicted","clearMemoryCache","catch"],"sourceRoot":"../../../src","sources":["capture/actions.ts"],"mappings":"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","ignoreList":[]}