@rickyzhangca/fpsr 0.0.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (41) hide show
  1. package/CHANGELOG.md +10 -0
  2. package/LICENSE +21 -0
  3. package/README.md +267 -0
  4. package/dist/abort-CrgARaZd.js +43 -0
  5. package/dist/abort-CrgARaZd.js.map +1 -0
  6. package/dist/assets-Dy4fqZBV.d.ts +85 -0
  7. package/dist/assets-Dy4fqZBV.d.ts.map +1 -0
  8. package/dist/canvas.d.ts +98 -0
  9. package/dist/canvas.d.ts.map +1 -0
  10. package/dist/canvas.js +3 -0
  11. package/dist/execute-CRZV5zw1.js +963 -0
  12. package/dist/execute-CRZV5zw1.js.map +1 -0
  13. package/dist/host-DdX4g1YM.d.ts +34 -0
  14. package/dist/host-DdX4g1YM.d.ts.map +1 -0
  15. package/dist/index.d.ts +463 -0
  16. package/dist/index.d.ts.map +1 -0
  17. package/dist/index.js +1776 -0
  18. package/dist/index.js.map +1 -0
  19. package/dist/node.d.ts +16 -0
  20. package/dist/node.d.ts.map +1 -0
  21. package/dist/node.js +101 -0
  22. package/dist/node.js.map +1 -0
  23. package/dist/planner.d.ts +418 -0
  24. package/dist/planner.d.ts.map +1 -0
  25. package/dist/planner.js +96 -0
  26. package/dist/planner.js.map +1 -0
  27. package/dist/profile-CTN1Q5SI.d.ts +365 -0
  28. package/dist/profile-CTN1Q5SI.d.ts.map +1 -0
  29. package/dist/profile-DR4i6HDp.js +610 -0
  30. package/dist/profile-DR4i6HDp.js.map +1 -0
  31. package/dist/render-db-BFQIspDB.d.ts +426 -0
  32. package/dist/render-db-BFQIspDB.d.ts.map +1 -0
  33. package/dist/render-db.d.ts +2 -0
  34. package/dist/render-db.js +1 -0
  35. package/dist/tiled-draw-list-Dc-5Ledi.js +3990 -0
  36. package/dist/tiled-draw-list-Dc-5Ledi.js.map +1 -0
  37. package/dist/types-CHgZBSra.d.ts +105 -0
  38. package/dist/types-CHgZBSra.d.ts.map +1 -0
  39. package/dist/upgrade-planner-CNjnMHPJ.d.ts +385 -0
  40. package/dist/upgrade-planner-CNjnMHPJ.d.ts.map +1 -0
  41. package/package.json +86 -0
@@ -0,0 +1,365 @@
1
+ import { m as FrameId, y as RenderLayerName } from "./render-db-BFQIspDB.js";
2
+
3
+ //#region src/types/draw-list.d.ts
4
+ /**
5
+ * Full Factorio `RenderLayer` enum (lowest → highest).
6
+ * Source: https://lua-api.factorio.com/latest/types/RenderLayer.html
7
+ * (same data as Factorio.app `doc-html/prototype-api.json`, 2.1.11).
8
+ * Values are the enum indices; order is the contract.
9
+ */
10
+ declare const FACTORIO_RENDER_LAYERS: {
11
+ readonly zero: 0;
12
+ readonly "background-transitions": 1;
13
+ readonly "under-tiles": 2;
14
+ readonly decals: 3;
15
+ readonly "above-tiles": 4;
16
+ readonly "ground-layer-1": 5;
17
+ readonly "ground-layer-2": 6;
18
+ readonly "ground-layer-3": 7;
19
+ readonly "ground-layer-4": 8;
20
+ readonly "ground-layer-5": 9;
21
+ readonly "lower-radius-visualization": 10;
22
+ readonly "radius-visualization": 11;
23
+ readonly "transport-belt-integration": 12;
24
+ readonly resource: 13;
25
+ readonly "building-smoke": 14;
26
+ readonly "rail-stone-path-lower": 15;
27
+ readonly "rail-stone-path": 16;
28
+ readonly "rail-tie": 17;
29
+ readonly decorative: 18;
30
+ readonly "ground-patch": 19;
31
+ readonly "ground-patch-higher": 20;
32
+ readonly "ground-patch-higher2": 21;
33
+ readonly "rail-chain-signal-metal": 22;
34
+ readonly "rail-screw": 23;
35
+ readonly "rail-metal": 24;
36
+ readonly remnants: 25;
37
+ readonly floor: 26;
38
+ readonly "transport-belt": 27;
39
+ readonly "transport-belt-endings": 28;
40
+ readonly "floor-mechanics-under-corpse": 29;
41
+ readonly corpse: 30;
42
+ readonly "floor-mechanics": 31;
43
+ readonly item: 32;
44
+ readonly "transport-belt-reader": 33;
45
+ readonly "lower-object": 34;
46
+ readonly "transport-belt-circuit-connector": 35;
47
+ readonly "lower-object-above-shadow": 36;
48
+ readonly "lower-object-overlay": 37;
49
+ readonly "object-under": 38;
50
+ readonly object: 39;
51
+ readonly "cargo-hatch": 40;
52
+ readonly "higher-object-under": 41;
53
+ readonly "higher-object-above": 42;
54
+ readonly "train-stop-top": 43;
55
+ readonly "item-in-inserter-hand": 44;
56
+ readonly "above-inserters": 45;
57
+ readonly wires: 46;
58
+ readonly "under-elevated": 47;
59
+ readonly "elevated-rail-stone-path-lower": 48;
60
+ readonly "elevated-rail-stone-path": 49;
61
+ readonly "elevated-rail-tie": 50;
62
+ readonly "elevated-rail-screw": 51;
63
+ readonly "elevated-rail-metal": 52;
64
+ readonly "elevated-lower-object": 53;
65
+ readonly "elevated-object": 54;
66
+ readonly "elevated-higher-object": 55;
67
+ readonly "fluid-visualization": 56;
68
+ readonly "wires-above": 57;
69
+ readonly "entity-info-icon": 58;
70
+ readonly "entity-info-icon-above": 59;
71
+ readonly explosion: 60;
72
+ readonly projectile: 61;
73
+ readonly smoke: 62;
74
+ readonly "air-object": 63;
75
+ readonly "air-entity-info-icon": 64;
76
+ readonly "light-effect": 65;
77
+ readonly "selection-box": 66;
78
+ readonly "higher-selection-box": 67;
79
+ readonly "collision-selection-box": 68;
80
+ readonly arrow: 69;
81
+ readonly cursor: 70;
82
+ };
83
+ declare const RENDER_LAYERS: Record<RenderLayerName, number>;
84
+ interface DrawCmdBase {
85
+ /** Numeric layer from RENDER_LAYERS. */
86
+ layer: number;
87
+ /** Y-sort key within the layer (entity collision-box bottom; 0 for non-object layers). */
88
+ sortY: number;
89
+ /**
90
+ * X-sort key within the layer (entity position.x for object layers; 0 otherwise).
91
+ * Same-Y neighbors paint west→east so baked hood shadows don’t cover eastern sprites.
92
+ */
93
+ sortX: number;
94
+ /** Owning entity_number (0 for tiles/background), for stable sort + debugging. */
95
+ entity: number;
96
+ /** Intra-entity sub-layer index. */
97
+ sub: number;
98
+ }
99
+ interface RectCmd extends DrawCmdBase {
100
+ kind: "rect";
101
+ x: number;
102
+ y: number;
103
+ w: number;
104
+ h: number;
105
+ color: [number, number, number, number];
106
+ }
107
+ interface SpriteCmd extends DrawCmdBase {
108
+ kind: "sprite";
109
+ frame: FrameId;
110
+ x: number;
111
+ y: number;
112
+ w: number;
113
+ h: number;
114
+ tint?: [number, number, number, number];
115
+ shadow?: boolean;
116
+ flipX?: boolean;
117
+ flipY?: boolean;
118
+ /** Clockwise degrees around the sprite center. */
119
+ rotation?: number;
120
+ /**
121
+ * Continue a small interior band beyond the authored destination. Legacy
122
+ * lower rail-bed sprites have sparse alpha-feathered ends that can otherwise
123
+ * expose terrain where straight and curved pieces meet.
124
+ */
125
+ seamBleed?: {
126
+ top?: true;
127
+ right?: true;
128
+ bottom?: true;
129
+ left?: true;
130
+ };
131
+ /**
132
+ * Optional sub-rect within the untrimmed source sprite (`FrameMeta.sw`×`sh`,
133
+ * pixels). When set, `x`/`y`/`w`/`h` are the destination rect for this slice.
134
+ */
135
+ src?: {
136
+ x: number;
137
+ y: number;
138
+ w: number;
139
+ h: number;
140
+ };
141
+ /**
142
+ * Optional destination-space clip rect (tile units, same space as x/y/w/h).
143
+ * Backend applies before drawing; used for UG/loader belt underlay halves.
144
+ */
145
+ clip?: {
146
+ x: number;
147
+ y: number;
148
+ w: number;
149
+ h: number;
150
+ };
151
+ }
152
+ interface WireCmd extends DrawCmdBase {
153
+ kind: "wire";
154
+ /** Wire color / copper. */
155
+ wire: "copper" | "red" | "green";
156
+ x1: number;
157
+ y1: number;
158
+ x2: number;
159
+ y2: number;
160
+ }
161
+ /**
162
+ * Rolling-stock coupling overlay: straight neon-green segments between joints
163
+ * plus hollow circles at each bogie joint.
164
+ */
165
+ interface TrainChainCmd extends DrawCmdBase {
166
+ kind: "train-chain";
167
+ segments: {
168
+ x1: number;
169
+ y1: number;
170
+ x2: number;
171
+ y2: number;
172
+ }[];
173
+ joints: {
174
+ x: number;
175
+ y: number;
176
+ }[];
177
+ }
178
+ /** Alt-mode entity-info icon, badge, backing, or directional indicator. */
179
+ interface IconCmd extends DrawCmdBase {
180
+ kind: "icon";
181
+ frame: FrameId;
182
+ x: number;
183
+ y: number;
184
+ /** Destination size in tiles (square). */
185
+ size: number;
186
+ /** Draw a dark rounded backing behind the icon (recipe badge). */
187
+ backing?: boolean;
188
+ /** Atlas-backed Factorio entity-info background; preferred over synthetic backing. */
189
+ backingFrame?: FrameId;
190
+ /** Draw the entity-info black silhouette even when no backing is present. */
191
+ silhouette?: boolean;
192
+ /**
193
+ * How to composite `backingFrame` / silhouette:
194
+ * - `entity-info` (default): soft dark disc + black silhouette + color icon
195
+ * - `request-pin`: cyan item-request pin at full alpha, color icon only (no silhouette)
196
+ */
197
+ backingStyle?: "entity-info" | "request-pin";
198
+ /** Clockwise degrees around the icon center. */
199
+ rotation?: number;
200
+ }
201
+ /**
202
+ * Blueprint snap-to-grid visualization: dashed green perimeter along the snap cell.
203
+ */
204
+ interface SnapGridCmd extends DrawCmdBase {
205
+ kind: "snap-grid";
206
+ x: number;
207
+ y: number;
208
+ w: number;
209
+ h: number;
210
+ }
211
+ /** Canvas text label in tile space (e.g. deconstruction planner section headers). */
212
+ interface TextCmd extends DrawCmdBase {
213
+ kind: "text";
214
+ text: string;
215
+ x: number;
216
+ y: number;
217
+ /** Font size in tiles (scaled by pixels-per-tile at execute time). */
218
+ size: number;
219
+ color: [number, number, number, number];
220
+ align?: "left" | "center" | "right";
221
+ baseline?: "top" | "middle" | "alphabetic";
222
+ }
223
+ type DrawCmd = RectCmd | SpriteCmd | WireCmd | TrainChainCmd | IconCmd | SnapGridCmd | TextCmd;
224
+ interface DrawListBounds {
225
+ minX: number;
226
+ minY: number;
227
+ maxX: number;
228
+ maxY: number;
229
+ }
230
+ interface DrawList {
231
+ schema: 1;
232
+ bounds: DrawListBounds;
233
+ /** Already sorted by (layer, sortY, sortX, entity, sub); backend executes in order. */
234
+ commands: DrawCmd[];
235
+ }
236
+ /** Comparator implementing the contract sort order. */
237
+ declare function compareDrawCmd(a: DrawCmd, b: DrawCmd): number;
238
+ /**
239
+ * Canonical serialization for Tier-2 snapshots: stable key order, numbers
240
+ * rounded to 4 decimals, one command per line for reviewable diffs.
241
+ */
242
+ declare function serializeDrawList(list: DrawList): string;
243
+ //#endregion
244
+ //#region src/frame.d.ts
245
+ /** Integer tile-space viewport used for canvas sizing and pan (maps minX/minY to pixel 0). */
246
+ interface TileFrame {
247
+ minX: number;
248
+ minY: number;
249
+ maxX: number;
250
+ maxY: number;
251
+ }
252
+ /**
253
+ * Tile-aligned viewport from draw-list visual bounds, optionally plus `padTiles`
254
+ * on each side. Visual bounds already include sprite overhang, shadows, and wires;
255
+ * `padTiles` defaults to 0 in the renderer. All edges are integers so the canvas is
256
+ * an exact multiple of `pixelsPerTile` with no fragmented checker cells.
257
+ */
258
+ declare function computeTileFrame(bounds: DrawListBounds, padTiles: number): TileFrame;
259
+ //#endregion
260
+ //#region src/profile.d.ts
261
+ /** High-resolution clock; falls back to Date.now in exotic hosts. */
262
+ declare function nowMs(): number;
263
+ /** Best-effort Performance API mark (ignored when unavailable). */
264
+ declare function perfMark(name: string): void;
265
+ /** Best-effort Performance API measure between two marks. */
266
+ declare function perfMeasure(name: string, startMark: string, endMark: string): void;
267
+ interface DecodeStats {
268
+ mode: "compressed" | "json";
269
+ inputChars: number;
270
+ /** Base64-decoded zlib payload length (compressed mode only). */
271
+ compressedBytes?: number;
272
+ /** Inflated UTF-8 byte length (compressed mode only). */
273
+ inflatedBytes?: number;
274
+ /** JSON text character length. */
275
+ jsonChars: number;
276
+ /** inflatedBytes / compressedBytes when both known. */
277
+ compressionRatio?: number;
278
+ timings: {
279
+ totalMs: number;
280
+ base64Ms?: number;
281
+ inflateMs?: number;
282
+ utf8Ms?: number;
283
+ jsonParseMs: number;
284
+ validateMs: number;
285
+ };
286
+ }
287
+ interface PlanProfile {
288
+ migrateMs: number;
289
+ resolveMs: number;
290
+ tilesMs: number;
291
+ entitiesMs: number;
292
+ overlaysMs: number;
293
+ sortMs: number;
294
+ totalMs: number;
295
+ }
296
+ type AssetEventKind = "render-db" | "manifest" | "atlas";
297
+ interface AssetEvent {
298
+ kind: AssetEventKind;
299
+ /** Atlas index when kind === "atlas". */
300
+ index?: number;
301
+ tier?: "1x" | "2x";
302
+ url?: string;
303
+ cached: boolean;
304
+ fetchMs?: number;
305
+ /** Time spent waiting for an available image decoder slot. */
306
+ queueMs?: number;
307
+ decodeMs?: number;
308
+ /** Decoded atlas area, independent of compressed blob size. */
309
+ decodedPixels?: number;
310
+ totalMs: number;
311
+ bytes?: number;
312
+ }
313
+ interface DrawListStats {
314
+ commandCount: number;
315
+ byKind: Record<string, number>;
316
+ uniqueFrames: number;
317
+ /** layer number → command count */
318
+ layerHistogram: Record<string, number>;
319
+ atlasIndices: number[];
320
+ }
321
+ interface RenderProfile {
322
+ selectMs: number;
323
+ plan: PlanProfile;
324
+ assets: AssetEvent[];
325
+ /** Wall-clock for the parallel atlas load phase (not sum of per-atlas times). */
326
+ assetsMs: number;
327
+ iconBakeMs: number;
328
+ iconBakeCount: number;
329
+ silhouetteBakeCount: number;
330
+ iconCacheHits: number;
331
+ iconCacheMisses: number;
332
+ silhouetteCacheHits: number;
333
+ silhouetteCacheMisses: number;
334
+ frameMs: number;
335
+ paintMs: number;
336
+ shadow: {
337
+ runs: number;
338
+ tiles: number;
339
+ compositedPixels: number;
340
+ peakScratchPixels: number;
341
+ };
342
+ totalMs: number;
343
+ /** True when any atlas referenced by this render was not already cached. */
344
+ cold: boolean;
345
+ drawList: DrawListStats;
346
+ output: {
347
+ width: number;
348
+ height: number;
349
+ megapixels: number;
350
+ pixelsPerTile: number;
351
+ requestedPixelsPerTile: number;
352
+ capped: boolean;
353
+ assetTier: "1x" | "2x";
354
+ tileFrame: TileFrame;
355
+ };
356
+ db: {
357
+ entityDefs: number;
358
+ tileDefs: number;
359
+ frameCount: number;
360
+ atlasCount: number;
361
+ };
362
+ }
363
+ //#endregion
364
+ export { WireCmd as C, TrainChainCmd as S, serializeDrawList as T, RENDER_LAYERS as _, PlanProfile as a, SpriteCmd as b, perfMark as c, computeTileFrame as d, DrawCmd as f, IconCmd as g, FACTORIO_RENDER_LAYERS as h, DrawListStats as i, perfMeasure as l, DrawListBounds as m, AssetEventKind as n, RenderProfile as o, DrawList as p, DecodeStats as r, nowMs as s, AssetEvent as t, TileFrame as u, RectCmd as v, compareDrawCmd as w, TextCmd as x, SnapGridCmd as y };
365
+ //# sourceMappingURL=profile-CTN1Q5SI.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"profile-CTN1Q5SI.d.ts","names":[],"sources":["../src/types/draw-list.ts","../src/frame.ts","../src/profile.ts"],"mappings":";;;;;;;;;cAgBa,sBAAA;EAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;cA8FA,aAAA,EAAe,MAAM,CAAC,eAAA;AAAA,UAKzB,WAAA;EAER;EAAA,KAAA;EAOA;EALA,KAAA;EASA;;AAAG;AAGL;EAPE,KAAA;;EAEA,MAAA;EAK+B;EAH/B,GAAA;AAAA;AAAA,UAGe,OAAA,SAAgB,WAAW;EAC1C,IAAA;EACA,CAAA;EACA,CAAA;EACA,CAAA;EACA,CAAA;EACA,KAAA;AAAA;AAAA,UAGe,SAAA,SAAkB,WAAW;EAC5C,IAAA;EACA,KAAA,EAAO,OAAA;EACP,CAAA;EACA,CAAA;EACA,CAAA;EACA,CAAA;EACA,IAAA;EACA,MAAA;EACA,KAAA;EACA,KAAA;EAFA;EAIA,QAAA;EAFA;;;;;EAQA,SAAA;IACE,GAAA;IACA,KAAA;IACA,MAAA;IACA,IAAA;EAAA;EAMuC;;;;EAAzC,GAAA;IAAQ,CAAA;IAAW,CAAA;IAAW,CAAA;IAAW,CAAA;EAAA;;;;;EAKzC,IAAA;IAAS,CAAA;IAAW,CAAA;IAAW,CAAA;IAAW,CAAA;EAAA;AAAA;AAAA,UAG3B,OAAA,SAAgB,WAAW;EAC1C,IAAA;;EAEA,IAAA;EACA,EAAA;EACA,EAAA;EACA,EAAA;EACA,EAAA;AAAA;;;;;UAOe,aAAA,SAAsB,WAAW;EAChD,IAAA;EACA,QAAA;IAAY,EAAA;IAAY,EAAA;IAAY,EAAA;IAAY,EAAA;EAAA;EAChD,MAAA;IAAU,CAAA;IAAW,CAAA;EAAA;AAAA;;UAIN,OAAA,SAAgB,WAAA;EAC/B,IAAA;EACA,KAAA,EAAO,OAAA;EACP,CAAA;EACA,CAAA;EAMA;EAJA,IAAA;EAMA;EAJA,OAAA;EAYA;EAVA,YAAA,GAAe,OAAA;EAUP;EARR,UAAA;EAc2B;;;;;EAR3B,YAAA;EAWA;EATA,QAAA;AAAA;;AAWC;AAIH;UATiB,WAAA,SAAoB,WAAW;EAC9C,IAAA;EACA,CAAA;EACA,CAAA;EACA,CAAA;EACA,CAAA;AAAA;;UAIe,OAAA,SAAgB,WAAW;EAC1C,IAAA;EACA,IAAA;EACA,CAAA;EACA,CAAA;EAKQ;EAHR,IAAA;EACA,KAAA;EACA,KAAA;EACA,QAAA;AAAA;AAAA,KAGU,OAAA,GACR,OAAA,GACA,SAAA,GACA,OAAA,GACA,aAAA,GACA,OAAA,GACA,WAAA,GACA,OAAA;AAAA,UAEa,cAAA;EACf,IAAA;EACA,IAAA;EACA,IAAA;EACA,IAAA;AAAA;AAAA,UAGe,QAAA;EACf,MAAA;EACA,MAAA,EAAQ,cAAA;EAdN;EAgBF,QAAA,EAAU,OAAO;AAAA;;iBAIH,cAAA,CAAe,CAAA,EAAG,OAAA,EAAS,CAAA,EAAG,OAAO;AAjB1C;AAEX;;;AAFW,iBA+BK,iBAAA,CAAkB,IAAc,EAAR,QAAQ;;;;UCvR/B,SAAA;EACf,IAAA;EACA,IAAA;EACA,IAAA;EACA,IAAA;AAAA;;;;;;;iBASc,gBAAA,CAAiB,MAAA,EAAQ,cAAA,EAAgB,QAAA,WAAmB,SAAS;;;;iBCbrE,KAAA;AFahB;AAAA,iBELgB,QAAA,CAAS,IAAY;;iBASrB,WAAA,CAAY,IAAA,UAAc,SAAA,UAAmB,OAAA;AAAA,UAQ5C,WAAA;EACf,IAAA;EACA,UAAA;;EAEA,eAAA;;EAEA,aAAA;;EAEA,SAAA;;EAEA,gBAAA;EACA,OAAA;IACE,OAAA;IACA,QAAA;IACA,SAAA;IACA,MAAA;IACA,WAAA;IACA,UAAA;EAAA;AAAA;AAAA,UAIa,WAAA;EACf,SAAA;EACA,SAAA;EACA,OAAA;EACA,UAAA;EACA,UAAA;EACA,MAAA;EACA,OAAA;AAAA;AAAA,KAGU,cAAA;AAAA,UAEK,UAAA;EACf,IAAA,EAAM,cAAc;;EAEpB,KAAA;EACA,IAAA;EACA,GAAA;EACA,MAAA;EACA,OAAA;;EAEA,OAAA;EACA,QAAA;;EAEA,aAAA;EACA,OAAA;EACA,KAAA;AAAA;AAAA,UAGe,aAAA;EACf,YAAA;EACA,MAAA,EAAQ,MAAA;EACR,YAAA;;EAEA,cAAA,EAAgB,MAAM;EACtB,YAAA;AAAA;AAAA,UAGe,aAAA;EACf,QAAA;EACA,IAAA,EAAM,WAAA;EACN,MAAA,EAAQ,UAAA;;EAER,QAAA;EACA,UAAA;EACA,aAAA;EACA,mBAAA;EACA,aAAA;EACA,eAAA;EACA,mBAAA;EACA,qBAAA;EACA,OAAA;EACA,OAAA;EACA,MAAA;IACE,IAAA;IACA,KAAA;IACA,gBAAA;IACA,iBAAA;EAAA;EAEF,OAAA;EFE0B;EEA1B,IAAA;EACA,QAAA,EAAU,aAAA;EACV,MAAA;IACE,KAAA;IACA,MAAA;IACA,UAAA;IACA,aAAA;IACA,sBAAA;IACA,MAAA;IACA,SAAA;IACA,SAAA,EAAW,SAAA;EAAA;EAEb,EAAA;IACE,UAAA;IACA,QAAA;IACA,UAAA;IACA,UAAA;EAAA;AAAA"}