@flighthq/capture 0.3.0-next.906.07cea63 → 0.3.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.
@@ -3,7 +3,7 @@ import type { CaptureBaseline, CaptureColumnBaseline } from '@flighthq/types/con
3
3
  export declare function createCaptureBaseline(): CaptureBaseline;
4
4
  /**
5
5
  * Serializes a baseline to its committed text form: JSON with columns in sorted key order, each
6
- * column's fields in canonical `fingerprint` then `sha256` order, 2-space indent, and a trailing
6
+ * column's fields in canonical `fingerprint`, `sourceHash`, then `sha256` order, 2-space indent, and a trailing
7
7
  * newline. Matches the tooling's on-disk baseline store byte-for-byte, so a re-baseline of one column
8
8
  * produces a minimal diff and the format gate stays green. Only defined fields are emitted.
9
9
  */
@@ -1 +1 @@
1
- {"version":3,"file":"captureBaseline.d.ts","sourceRoot":"","sources":["../src/captureBaseline.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,eAAe,EAAE,qBAAqB,EAAE,MAAM,0BAA0B,CAAC;AAEvF,yFAAyF;AACzF,wBAAgB,qBAAqB,IAAI,eAAe,CAEvD;AAED;;;;;GAKG;AACH,wBAAgB,qBAAqB,CAAC,QAAQ,EAAE,QAAQ,CAAC,eAAe,CAAC,GAAG,MAAM,CAUjF;AAED;;;GAGG;AACH,wBAAgB,uBAAuB,CACrC,QAAQ,EAAE,QAAQ,CAAC,eAAe,CAAC,EACnC,MAAM,EAAE,MAAM,EACd,KAAK,EAAE,MAAM,qBAAqB,GACjC,MAAM,GAAG,IAAI,CAEf;AAED;;;;GAIG;AACH,wBAAgB,oBAAoB,CAAC,IAAI,EAAE,MAAM,GAAG,eAAe,GAAG,IAAI,CASzE;AAED,8FAA8F;AAC9F,wBAAgB,uBAAuB,CACrC,QAAQ,EAAE,eAAe,EACzB,MAAM,EAAE,MAAM,EACd,KAAK,EAAE,MAAM,qBAAqB,EAClC,KAAK,EAAE,MAAM,GACZ,IAAI,CAEN"}
1
+ {"version":3,"file":"captureBaseline.d.ts","sourceRoot":"","sources":["../src/captureBaseline.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,eAAe,EAAE,qBAAqB,EAAE,MAAM,0BAA0B,CAAC;AAEvF,yFAAyF;AACzF,wBAAgB,qBAAqB,IAAI,eAAe,CAEvD;AAED;;;;;GAKG;AACH,wBAAgB,qBAAqB,CAAC,QAAQ,EAAE,QAAQ,CAAC,eAAe,CAAC,GAAG,MAAM,CAWjF;AAED;;;GAGG;AACH,wBAAgB,uBAAuB,CACrC,QAAQ,EAAE,QAAQ,CAAC,eAAe,CAAC,EACnC,MAAM,EAAE,MAAM,EACd,KAAK,EAAE,MAAM,qBAAqB,GACjC,MAAM,GAAG,IAAI,CAEf;AAED;;;;GAIG;AACH,wBAAgB,oBAAoB,CAAC,IAAI,EAAE,MAAM,GAAG,eAAe,GAAG,IAAI,CASzE;AAED,8FAA8F;AAC9F,wBAAgB,uBAAuB,CACrC,QAAQ,EAAE,eAAe,EACzB,MAAM,EAAE,MAAM,EACd,KAAK,EAAE,MAAM,qBAAqB,EAClC,KAAK,EAAE,MAAM,GACZ,IAAI,CAEN"}
@@ -4,7 +4,7 @@ export function createCaptureBaseline() {
4
4
  }
5
5
  /**
6
6
  * Serializes a baseline to its committed text form: JSON with columns in sorted key order, each
7
- * column's fields in canonical `fingerprint` then `sha256` order, 2-space indent, and a trailing
7
+ * column's fields in canonical `fingerprint`, `sourceHash`, then `sha256` order, 2-space indent, and a trailing
8
8
  * newline. Matches the tooling's on-disk baseline store byte-for-byte, so a re-baseline of one column
9
9
  * produces a minimal diff and the format gate stays green. Only defined fields are emitted.
10
10
  */
@@ -15,6 +15,8 @@ export function formatCaptureBaseline(baseline) {
15
15
  const out = {};
16
16
  if (entry.fingerprint !== undefined)
17
17
  out.fingerprint = entry.fingerprint;
18
+ if (entry.sourceHash !== undefined)
19
+ out.sourceHash = entry.sourceHash;
18
20
  if (entry.sha256 !== undefined)
19
21
  out.sha256 = entry.sha256;
20
22
  sorted[column] = out;
@@ -1 +1 @@
1
- {"version":3,"file":"captureBaseline.js","sourceRoot":"","sources":["../src/captureBaseline.ts"],"names":[],"mappings":"AAEA,yFAAyF;AACzF,MAAM,UAAU,qBAAqB;IACnC,OAAO,EAAE,CAAC;AACZ,CAAC;AAED;;;;;GAKG;AACH,MAAM,UAAU,qBAAqB,CAAC,QAAmC;IACvE,MAAM,MAAM,GAAoB,EAAE,CAAC;IACnC,KAAK,MAAM,MAAM,IAAI,MAAM,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC;QAClD,MAAM,KAAK,GAAG,QAAQ,CAAC,MAAM,CAAC,CAAC;QAC/B,MAAM,GAAG,GAA0B,EAAE,CAAC;QACtC,IAAI,KAAK,CAAC,WAAW,KAAK,SAAS;YAAE,GAAG,CAAC,WAAW,GAAG,KAAK,CAAC,WAAW,CAAC;QACzE,IAAI,KAAK,CAAC,MAAM,KAAK,SAAS;YAAE,GAAG,CAAC,MAAM,GAAG,KAAK,CAAC,MAAM,CAAC;QAC1D,MAAM,CAAC,MAAM,CAAC,GAAG,GAAG,CAAC;IACvB,CAAC;IACD,OAAO,IAAI,CAAC,SAAS,CAAC,MAAM,EAAE,IAAI,EAAE,CAAC,CAAC,GAAG,IAAI,CAAC;AAChD,CAAC;AAED;;;GAGG;AACH,MAAM,UAAU,uBAAuB,CACrC,QAAmC,EACnC,MAAc,EACd,KAAkC;IAElC,OAAO,QAAQ,CAAC,MAAM,CAAC,EAAE,CAAC,KAAK,CAAC,IAAI,IAAI,CAAC;AAC3C,CAAC;AAED;;;;GAIG;AACH,MAAM,UAAU,oBAAoB,CAAC,IAAY;IAC/C,IAAI,MAAe,CAAC;IACpB,IAAI,CAAC;QACH,MAAM,GAAG,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;IAC5B,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,IAAI,CAAC;IACd,CAAC;IACD,IAAI,OAAO,MAAM,KAAK,QAAQ,IAAI,MAAM,KAAK,IAAI,IAAI,KAAK,CAAC,OAAO,CAAC,MAAM,CAAC;QAAE,OAAO,IAAI,CAAC;IACxF,OAAO,MAAyB,CAAC;AACnC,CAAC;AAED,8FAA8F;AAC9F,MAAM,UAAU,uBAAuB,CACrC,QAAyB,EACzB,MAAc,EACd,KAAkC,EAClC,KAAa;IAEb,CAAC,QAAQ,CAAC,MAAM,CAAC,KAAK,EAAE,CAAC,CAAC,KAAK,CAAC,GAAG,KAAK,CAAC;AAC3C,CAAC"}
1
+ {"version":3,"file":"captureBaseline.js","sourceRoot":"","sources":["../src/captureBaseline.ts"],"names":[],"mappings":"AAEA,yFAAyF;AACzF,MAAM,UAAU,qBAAqB;IACnC,OAAO,EAAE,CAAC;AACZ,CAAC;AAED;;;;;GAKG;AACH,MAAM,UAAU,qBAAqB,CAAC,QAAmC;IACvE,MAAM,MAAM,GAAoB,EAAE,CAAC;IACnC,KAAK,MAAM,MAAM,IAAI,MAAM,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC;QAClD,MAAM,KAAK,GAAG,QAAQ,CAAC,MAAM,CAAC,CAAC;QAC/B,MAAM,GAAG,GAA0B,EAAE,CAAC;QACtC,IAAI,KAAK,CAAC,WAAW,KAAK,SAAS;YAAE,GAAG,CAAC,WAAW,GAAG,KAAK,CAAC,WAAW,CAAC;QACzE,IAAI,KAAK,CAAC,UAAU,KAAK,SAAS;YAAE,GAAG,CAAC,UAAU,GAAG,KAAK,CAAC,UAAU,CAAC;QACtE,IAAI,KAAK,CAAC,MAAM,KAAK,SAAS;YAAE,GAAG,CAAC,MAAM,GAAG,KAAK,CAAC,MAAM,CAAC;QAC1D,MAAM,CAAC,MAAM,CAAC,GAAG,GAAG,CAAC;IACvB,CAAC;IACD,OAAO,IAAI,CAAC,SAAS,CAAC,MAAM,EAAE,IAAI,EAAE,CAAC,CAAC,GAAG,IAAI,CAAC;AAChD,CAAC;AAED;;;GAGG;AACH,MAAM,UAAU,uBAAuB,CACrC,QAAmC,EACnC,MAAc,EACd,KAAkC;IAElC,OAAO,QAAQ,CAAC,MAAM,CAAC,EAAE,CAAC,KAAK,CAAC,IAAI,IAAI,CAAC;AAC3C,CAAC;AAED;;;;GAIG;AACH,MAAM,UAAU,oBAAoB,CAAC,IAAY;IAC/C,IAAI,MAAe,CAAC;IACpB,IAAI,CAAC;QACH,MAAM,GAAG,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;IAC5B,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,IAAI,CAAC;IACd,CAAC;IACD,IAAI,OAAO,MAAM,KAAK,QAAQ,IAAI,MAAM,KAAK,IAAI,IAAI,KAAK,CAAC,OAAO,CAAC,MAAM,CAAC;QAAE,OAAO,IAAI,CAAC;IACxF,OAAO,MAAyB,CAAC;AACnC,CAAC;AAED,8FAA8F;AAC9F,MAAM,UAAU,uBAAuB,CACrC,QAAyB,EACzB,MAAc,EACd,KAAkC,EAClC,KAAa;IAEb,CAAC,QAAQ,CAAC,MAAM,CAAC,KAAK,EAAE,CAAC,CAAC,KAAK,CAAC,GAAG,KAAK,CAAC;AAC3C,CAAC"}
@@ -3,7 +3,7 @@ export declare const CAPTURE_PARITY_TOLERANCE = 15;
3
3
  export declare const CAPTURE_REGRESSION_TOLERANCE = 5;
4
4
  /**
5
5
  * The tolerant distance between two coarse render fingerprints in `<gridSize>:<hex>` text form (see
6
- * formatSurfaceFingerprint): the mean absolute per-channel difference (0..255), where ~0 is identical
6
+ * formatBitmapFingerprint): the mean absolute per-channel difference (0..255), where ~0 is identical
7
7
  * and larger values mean a real visual change. Returns `Number.POSITIVE_INFINITY` as a sentinel when
8
8
  * either string fails to parse, or when the two fingerprints use different grid sizes and so are not
9
9
  * comparable — Infinity fails any finite tolerance, so a corrupt or mismatched baseline reads as a
@@ -1,4 +1,4 @@
1
- import { compareSurfaceFingerprints, parseSurfaceFingerprint } from '@flighthq/surface/contract';
1
+ import { compareBitmapFingerprints, parseBitmapFingerprint } from '@flighthq/bitmap/contract';
2
2
  // Default parity tolerance (mean absolute per-channel difference, 0..255). Cross-backend agreement is
3
3
  // ≤ ~6.5 even for antialiasing-heavy scenes, so real divergence between two backends is well over 15.
4
4
  export const CAPTURE_PARITY_TOLERANCE = 15;
@@ -8,18 +8,18 @@ export const CAPTURE_PARITY_TOLERANCE = 15;
8
8
  export const CAPTURE_REGRESSION_TOLERANCE = 5;
9
9
  /**
10
10
  * The tolerant distance between two coarse render fingerprints in `<gridSize>:<hex>` text form (see
11
- * formatSurfaceFingerprint): the mean absolute per-channel difference (0..255), where ~0 is identical
11
+ * formatBitmapFingerprint): the mean absolute per-channel difference (0..255), where ~0 is identical
12
12
  * and larger values mean a real visual change. Returns `Number.POSITIVE_INFINITY` as a sentinel when
13
13
  * either string fails to parse, or when the two fingerprints use different grid sizes and so are not
14
14
  * comparable — Infinity fails any finite tolerance, so a corrupt or mismatched baseline reads as a
15
15
  * failing check rather than crashing.
16
16
  */
17
17
  export function compareCaptureFingerprints(a, b) {
18
- const fa = parseSurfaceFingerprint(a);
19
- const fb = parseSurfaceFingerprint(b);
18
+ const fa = parseBitmapFingerprint(a);
19
+ const fb = parseBitmapFingerprint(b);
20
20
  if (fa === null || fb === null || fa.gridSize !== fb.gridSize)
21
21
  return Number.POSITIVE_INFINITY;
22
- return compareSurfaceFingerprints(fa, fb);
22
+ return compareBitmapFingerprints(fa, fb);
23
23
  }
24
24
  /**
25
25
  * Parity: whether two render backends rendering the same scene in the same run agree within
@@ -1 +1 @@
1
- {"version":3,"file":"captureComparison.js","sourceRoot":"","sources":["../src/captureComparison.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,0BAA0B,EAAE,uBAAuB,EAAE,MAAM,4BAA4B,CAAC;AAGjG,sGAAsG;AACtG,sGAAsG;AACtG,MAAM,CAAC,MAAM,wBAAwB,GAAG,EAAE,CAAC;AAE3C,uGAAuG;AACvG,uGAAuG;AACvG,iEAAiE;AACjE,MAAM,CAAC,MAAM,4BAA4B,GAAG,CAAC,CAAC;AAE9C;;;;;;;GAOG;AACH,MAAM,UAAU,0BAA0B,CAAC,CAAS,EAAE,CAAS;IAC7D,MAAM,EAAE,GAAG,uBAAuB,CAAC,CAAC,CAAC,CAAC;IACtC,MAAM,EAAE,GAAG,uBAAuB,CAAC,CAAC,CAAC,CAAC;IACtC,IAAI,EAAE,KAAK,IAAI,IAAI,EAAE,KAAK,IAAI,IAAI,EAAE,CAAC,QAAQ,KAAK,EAAE,CAAC,QAAQ;QAAE,OAAO,MAAM,CAAC,iBAAiB,CAAC;IAC/F,OAAO,0BAA0B,CAAC,EAAE,EAAE,EAAE,CAAC,CAAC;AAC5C,CAAC;AAED;;;;;GAKG;AACH,MAAM,UAAU,qBAAqB,CAAC,CAAS,EAAE,CAAS,EAAE,SAAS,GAAG,wBAAwB;IAC9F,MAAM,UAAU,GAAG,0BAA0B,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC;IACpD,OAAO,EAAE,IAAI,EAAE,UAAU,IAAI,SAAS,EAAE,UAAU,EAAE,SAAS,EAAE,CAAC;AAClE,CAAC;AAED;;;;GAIG;AACH,MAAM,UAAU,yBAAyB,CACvC,WAAmB,EACnB,mBAA2B,EAC3B,SAAS,GAAG,4BAA4B;IAExC,MAAM,UAAU,GAAG,0BAA0B,CAAC,WAAW,EAAE,mBAAmB,CAAC,CAAC;IAChF,OAAO,EAAE,IAAI,EAAE,UAAU,IAAI,SAAS,EAAE,UAAU,EAAE,SAAS,EAAE,CAAC;AAClE,CAAC"}
1
+ {"version":3,"file":"captureComparison.js","sourceRoot":"","sources":["../src/captureComparison.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,yBAAyB,EAAE,sBAAsB,EAAE,MAAM,2BAA2B,CAAC;AAG9F,sGAAsG;AACtG,sGAAsG;AACtG,MAAM,CAAC,MAAM,wBAAwB,GAAG,EAAE,CAAC;AAE3C,uGAAuG;AACvG,uGAAuG;AACvG,iEAAiE;AACjE,MAAM,CAAC,MAAM,4BAA4B,GAAG,CAAC,CAAC;AAE9C;;;;;;;GAOG;AACH,MAAM,UAAU,0BAA0B,CAAC,CAAS,EAAE,CAAS;IAC7D,MAAM,EAAE,GAAG,sBAAsB,CAAC,CAAC,CAAC,CAAC;IACrC,MAAM,EAAE,GAAG,sBAAsB,CAAC,CAAC,CAAC,CAAC;IACrC,IAAI,EAAE,KAAK,IAAI,IAAI,EAAE,KAAK,IAAI,IAAI,EAAE,CAAC,QAAQ,KAAK,EAAE,CAAC,QAAQ;QAAE,OAAO,MAAM,CAAC,iBAAiB,CAAC;IAC/F,OAAO,yBAAyB,CAAC,EAAE,EAAE,EAAE,CAAC,CAAC;AAC3C,CAAC;AAED;;;;;GAKG;AACH,MAAM,UAAU,qBAAqB,CAAC,CAAS,EAAE,CAAS,EAAE,SAAS,GAAG,wBAAwB;IAC9F,MAAM,UAAU,GAAG,0BAA0B,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC;IACpD,OAAO,EAAE,IAAI,EAAE,UAAU,IAAI,SAAS,EAAE,UAAU,EAAE,SAAS,EAAE,CAAC;AAClE,CAAC;AAED;;;;GAIG;AACH,MAAM,UAAU,yBAAyB,CACvC,WAAmB,EACnB,mBAA2B,EAC3B,SAAS,GAAG,4BAA4B;IAExC,MAAM,UAAU,GAAG,0BAA0B,CAAC,WAAW,EAAE,mBAAmB,CAAC,CAAC;IAChF,OAAO,EAAE,IAAI,EAAE,UAAU,IAAI,SAAS,EAAE,UAAU,EAAE,SAAS,EAAE,CAAC;AAClE,CAAC"}
package/package.json CHANGED
@@ -1,6 +1,8 @@
1
1
  {
2
2
  "name": "@flighthq/capture",
3
- "version": "0.3.0-next.906.07cea63",
3
+ "version": "0.3.0",
4
+ "author": "Joshua Granick and other contributors",
5
+ "license": "MIT",
4
6
  "repository": {
5
7
  "type": "git",
6
8
  "url": "https://github.com/flighthq/flight.git",
@@ -36,8 +38,8 @@
36
38
  "clean:dist": "tsx ../../scripts/clean-package-dist.ts"
37
39
  },
38
40
  "dependencies": {
39
- "@flighthq/surface": "0.3.0-next.906.07cea63",
40
- "@flighthq/types": "0.3.0-next.906.07cea63"
41
+ "@flighthq/bitmap": "0.3.0",
42
+ "@flighthq/types": "0.3.0"
41
43
  },
42
44
  "devDependencies": {
43
45
  "typescript": "^5.3.0"
@@ -27,6 +27,7 @@ describe('formatCaptureBaseline', () => {
27
27
  it('sorts columns, orders fields, indents by two spaces, and ends with a newline', () => {
28
28
  const baseline = createCaptureBaseline();
29
29
  setCaptureBaselineField(baseline, 'flight:webgl', 'sha256', 'aaa');
30
+ setCaptureBaselineField(baseline, 'flight:webgl', 'sourceHash', 'source');
30
31
  setCaptureBaselineField(baseline, 'flight:webgl', 'fingerprint', '1:ffffff');
31
32
  setCaptureBaselineField(baseline, 'canvas', 'fingerprint', '1:000000');
32
33
  expect(formatCaptureBaseline(baseline)).toBe(
@@ -36,6 +37,7 @@ describe('formatCaptureBaseline', () => {
36
37
  ' },\n' +
37
38
  ' "flight:webgl": {\n' +
38
39
  ' "fingerprint": "1:ffffff",\n' +
40
+ ' "sourceHash": "source",\n' +
39
41
  ' "sha256": "aaa"\n' +
40
42
  ' }\n' +
41
43
  '}\n',
@@ -98,8 +100,10 @@ describe('setCaptureBaselineField', () => {
98
100
  it('creates the column entry on first write and merges later fields', () => {
99
101
  const baseline = createCaptureBaseline();
100
102
  setCaptureBaselineField(baseline, 'canvas', 'fingerprint', '1:000000');
103
+ setCaptureBaselineField(baseline, 'canvas', 'sourceHash', 'source');
101
104
  setCaptureBaselineField(baseline, 'canvas', 'sha256', 'hash');
102
105
  expect(getCaptureBaselineField(baseline, 'canvas', 'fingerprint')).toBe('1:000000');
106
+ expect(getCaptureBaselineField(baseline, 'canvas', 'sourceHash')).toBe('source');
103
107
  expect(getCaptureBaselineField(baseline, 'canvas', 'sha256')).toBe('hash');
104
108
  });
105
109