@flighthq/swf 0.5.1-next.1682.f1470fe → 0.5.1-next.1685.dc0e23a
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.
- package/README.md +2 -2
- package/dist/swfRequirements.d.ts +8 -0
- package/dist/swfRequirements.d.ts.map +1 -1
- package/dist/swfRequirements.js +14 -0
- package/dist/swfRequirements.js.map +1 -1
- package/dist/swfTagVocabulary.d.ts +14 -0
- package/dist/swfTagVocabulary.d.ts.map +1 -1
- package/dist/swfTagVocabulary.js +16 -0
- package/dist/swfTagVocabulary.js.map +1 -1
- package/dist/swfTimelineParse.d.ts.map +1 -1
- package/dist/swfTimelineParse.js +2 -6
- package/dist/swfTimelineParse.js.map +1 -1
- package/package.json +27 -27
- package/src/swfRequirements.test.ts +63 -5
package/README.md
CHANGED
|
@@ -13,5 +13,5 @@ Import the supported application-facing API from `@flighthq/swf`. The `@flighthq
|
|
|
13
13
|
This package is part of the locked-version Flight SDK graph. Applications may instead install and import `@flighthq/sdk` when package-level tree shaking is sufficient.
|
|
14
14
|
|
|
15
15
|
- [Flight project](https://github.com/flighthq/flight)
|
|
16
|
-
- [Source for @flighthq/swf@0.5.1-next.
|
|
17
|
-
- [License](https://github.com/flighthq/flight/blob/
|
|
16
|
+
- [Source for @flighthq/swf@0.5.1-next.1685.dc0e23a](https://github.com/flighthq/flight/tree/dc0e23a17453ec75c20ccbf07058a57b5ef10c4c/packages/swf)
|
|
17
|
+
- [License](https://github.com/flighthq/flight/blob/dc0e23a17453ec75c20ccbf07058a57b5ef10c4c/LICENSE.md)
|
|
@@ -19,6 +19,14 @@ import type { HostDecompressDeflateCapability, HostDecompressLzmaCapability, Req
|
|
|
19
19
|
*
|
|
20
20
|
* Returns an empty set that still declares its coverage when the source is not a readable SWF, so a
|
|
21
21
|
* caller can tell "inspected, found nothing" from "never looked".
|
|
22
|
+
*
|
|
23
|
+
* TAGS THAT NOTHING CAN SATISFY ARE NOT REQUIREMENTS. A requirement names something a build can supply
|
|
24
|
+
* by registering an implementation, so two groups are excluded: tags carrying no scene content
|
|
25
|
+
* (`SWF_NON_CONTENT_TAGS`, the same list the timeline walk skips) and tags the document walk consumes
|
|
26
|
+
* structurally, which no registrable handler claims. Emitting them would put a permanently unresolvable
|
|
27
|
+
* entry in every manifest — a warning on every build that no catalog row could ever answer, which
|
|
28
|
+
* teaches a reader to ignore the channel that reports a genuinely missing handler. An UNRECOGNIZED tag
|
|
29
|
+
* is still reported: that one is real, and is exactly what the channel is for.
|
|
22
30
|
*/
|
|
23
31
|
export declare function parseSwfRequirements(source: Uint8Array, deflate: Readonly<HostDecompressDeflateCapability> | null, lzma: Readonly<HostDecompressLzmaCapability> | null): RequirementSet;
|
|
24
32
|
//# sourceMappingURL=swfRequirements.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"swfRequirements.d.ts","sourceRoot":"","sources":["../src/swfRequirements.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EACV,+BAA+B,EAC/B,4BAA4B,EAE5B,cAAc,EACf,MAAM,0BAA0B,CAAC;
|
|
1
|
+
{"version":3,"file":"swfRequirements.d.ts","sourceRoot":"","sources":["../src/swfRequirements.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EACV,+BAA+B,EAC/B,4BAA4B,EAE5B,cAAc,EACf,MAAM,0BAA0B,CAAC;AAMlC;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA4BG;AACH,wBAAgB,oBAAoB,CAClC,MAAM,EAAE,UAAU,EAClB,OAAO,EAAE,QAAQ,CAAC,+BAA+B,CAAC,GAAG,IAAI,EACzD,IAAI,EAAE,QAAQ,CAAC,4BAA4B,CAAC,GAAG,IAAI,GAClD,cAAc,CAYhB"}
|
package/dist/swfRequirements.js
CHANGED
|
@@ -1,6 +1,7 @@
|
|
|
1
1
|
import { createRequirementSet } from '@flighthq/requirement/contract';
|
|
2
2
|
import { RequirementFacet } from '@flighthq/types/contract';
|
|
3
3
|
import { collectSwfTagCounts, getSwfTagName } from './swfTagCensus';
|
|
4
|
+
import { SWF_NON_CONTENT_TAGS } from './swfTagVocabulary';
|
|
4
5
|
/**
|
|
5
6
|
* Build-time inventory of what one SWF file asks a build to support: one requirement per distinct tag
|
|
6
7
|
* the file contains, under the `document.format` facet.
|
|
@@ -21,6 +22,14 @@ import { collectSwfTagCounts, getSwfTagName } from './swfTagCensus';
|
|
|
21
22
|
*
|
|
22
23
|
* Returns an empty set that still declares its coverage when the source is not a readable SWF, so a
|
|
23
24
|
* caller can tell "inspected, found nothing" from "never looked".
|
|
25
|
+
*
|
|
26
|
+
* TAGS THAT NOTHING CAN SATISFY ARE NOT REQUIREMENTS. A requirement names something a build can supply
|
|
27
|
+
* by registering an implementation, so two groups are excluded: tags carrying no scene content
|
|
28
|
+
* (`SWF_NON_CONTENT_TAGS`, the same list the timeline walk skips) and tags the document walk consumes
|
|
29
|
+
* structurally, which no registrable handler claims. Emitting them would put a permanently unresolvable
|
|
30
|
+
* entry in every manifest — a warning on every build that no catalog row could ever answer, which
|
|
31
|
+
* teaches a reader to ignore the channel that reports a genuinely missing handler. An UNRECOGNIZED tag
|
|
32
|
+
* is still reported: that one is real, and is exactly what the channel is for.
|
|
24
33
|
*/
|
|
25
34
|
export function parseSwfRequirements(source, deflate, lzma) {
|
|
26
35
|
const counts = collectSwfTagCounts(source, deflate, lzma);
|
|
@@ -29,9 +38,14 @@ export function parseSwfRequirements(source, deflate, lzma) {
|
|
|
29
38
|
// Order is not chosen here: RequirementSet canonicalizes by facet then key, so a set is equal to
|
|
30
39
|
// another with the same content regardless of the order a walk happened to observe it in.
|
|
31
40
|
for (const code of counts.keys()) {
|
|
41
|
+
if (SWF_NON_CONTENT_TAGS.has(code) || SWF_STRUCTURAL_TAGS.has(code))
|
|
42
|
+
continue;
|
|
32
43
|
requirements.push({ facet: RequirementFacet.DocumentFormat, key: getSwfTagName(code) });
|
|
33
44
|
}
|
|
34
45
|
}
|
|
35
46
|
return createRequirementSet([RequirementFacet.DocumentFormat], requirements);
|
|
36
47
|
}
|
|
48
|
+
// Tags the document/timeline walk consumes itself. `End` never reaches here — the census stops at it —
|
|
49
|
+
// and `ShowFrame` advances the frame cursor rather than defining content, so no handler claims either.
|
|
50
|
+
const SWF_STRUCTURAL_TAGS = new Set([0, 1]);
|
|
37
51
|
//# sourceMappingURL=swfRequirements.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"swfRequirements.js","sourceRoot":"","sources":["../src/swfRequirements.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,oBAAoB,EAAE,MAAM,gCAAgC,CAAC;AAOtE,OAAO,EAAE,gBAAgB,EAAE,MAAM,0BAA0B,CAAC;AAE5D,OAAO,EAAE,mBAAmB,EAAE,aAAa,EAAE,MAAM,gBAAgB,CAAC;
|
|
1
|
+
{"version":3,"file":"swfRequirements.js","sourceRoot":"","sources":["../src/swfRequirements.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,oBAAoB,EAAE,MAAM,gCAAgC,CAAC;AAOtE,OAAO,EAAE,gBAAgB,EAAE,MAAM,0BAA0B,CAAC;AAE5D,OAAO,EAAE,mBAAmB,EAAE,aAAa,EAAE,MAAM,gBAAgB,CAAC;AACpE,OAAO,EAAE,oBAAoB,EAAE,MAAM,oBAAoB,CAAC;AAE1D;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA4BG;AACH,MAAM,UAAU,oBAAoB,CAClC,MAAkB,EAClB,OAAyD,EACzD,IAAmD;IAEnD,MAAM,MAAM,GAAG,mBAAmB,CAAC,MAAM,EAAE,OAAO,EAAE,IAAI,CAAC,CAAC;IAC1D,MAAM,YAAY,GAAkB,EAAE,CAAC;IACvC,IAAI,MAAM,KAAK,IAAI,EAAE,CAAC;QACpB,iGAAiG;QACjG,0FAA0F;QAC1F,KAAK,MAAM,IAAI,IAAI,MAAM,CAAC,IAAI,EAAE,EAAE,CAAC;YACjC,IAAI,oBAAoB,CAAC,GAAG,CAAC,IAAI,CAAC,IAAI,mBAAmB,CAAC,GAAG,CAAC,IAAI,CAAC;gBAAE,SAAS;YAC9E,YAAY,CAAC,IAAI,CAAC,EAAE,KAAK,EAAE,gBAAgB,CAAC,cAAc,EAAE,GAAG,EAAE,aAAa,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;QAC1F,CAAC;IACH,CAAC;IACD,OAAO,oBAAoB,CAAC,CAAC,gBAAgB,CAAC,cAAc,CAAC,EAAE,YAAY,CAAC,CAAC;AAC/E,CAAC;AAED,uGAAuG;AACvG,uGAAuG;AACvG,MAAM,mBAAmB,GAAwB,IAAI,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC"}
|
|
@@ -1,2 +1,16 @@
|
|
|
1
1
|
export declare const SWF_TAG_NAMES: ReadonlyMap<number, string>;
|
|
2
|
+
/**
|
|
3
|
+
* Tags that carry no scene content.
|
|
4
|
+
*
|
|
5
|
+
* Metadata and tooling tags — FileAttributes, Metadata, ProductInfo, ScriptLimits, DebugID,
|
|
6
|
+
* EnableDebugger/EnableDebugger2, EnableTelemetry, Protect, SetTabIndex, DefineButtonCxform, and the
|
|
7
|
+
* font hinting/naming tables. Two consumers depend on this being one list rather than two:
|
|
8
|
+
*
|
|
9
|
+
* - the timeline walk skips them silently, because an absent one loses nothing a caller could want;
|
|
10
|
+
* - the build-time requirement analyzer emits no requirement for them, because a requirement names
|
|
11
|
+
* something a build can SATISFY and no handler can ever claim these. Reporting them would produce a
|
|
12
|
+
* permanently unactionable warning on every build, which trains a reader to ignore the very channel
|
|
13
|
+
* that reports a genuinely missing handler.
|
|
14
|
+
*/
|
|
15
|
+
export declare const SWF_NON_CONTENT_TAGS: ReadonlySet<number>;
|
|
2
16
|
//# sourceMappingURL=swfTagVocabulary.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"swfTagVocabulary.d.ts","sourceRoot":"","sources":["../src/swfTagVocabulary.ts"],"names":[],"mappings":"AAGA,eAAO,MAAM,aAAa,EAAE,WAAW,CAAC,MAAM,EAAE,MAAM,CAsEpD,CAAC"}
|
|
1
|
+
{"version":3,"file":"swfTagVocabulary.d.ts","sourceRoot":"","sources":["../src/swfTagVocabulary.ts"],"names":[],"mappings":"AAGA,eAAO,MAAM,aAAa,EAAE,WAAW,CAAC,MAAM,EAAE,MAAM,CAsEpD,CAAC;AAEH;;;;;;;;;;;;GAYG;AACH,eAAO,MAAM,oBAAoB,EAAE,WAAW,CAAC,MAAM,CAEnD,CAAC"}
|
package/dist/swfTagVocabulary.js
CHANGED
|
@@ -72,4 +72,20 @@ export const SWF_TAG_NAMES = new Map([
|
|
|
72
72
|
[93, 'EnableTelemetry'],
|
|
73
73
|
[94, 'PlaceObject4'],
|
|
74
74
|
]);
|
|
75
|
+
/**
|
|
76
|
+
* Tags that carry no scene content.
|
|
77
|
+
*
|
|
78
|
+
* Metadata and tooling tags — FileAttributes, Metadata, ProductInfo, ScriptLimits, DebugID,
|
|
79
|
+
* EnableDebugger/EnableDebugger2, EnableTelemetry, Protect, SetTabIndex, DefineButtonCxform, and the
|
|
80
|
+
* font hinting/naming tables. Two consumers depend on this being one list rather than two:
|
|
81
|
+
*
|
|
82
|
+
* - the timeline walk skips them silently, because an absent one loses nothing a caller could want;
|
|
83
|
+
* - the build-time requirement analyzer emits no requirement for them, because a requirement names
|
|
84
|
+
* something a build can SATISFY and no handler can ever claim these. Reporting them would produce a
|
|
85
|
+
* permanently unactionable warning on every build, which trains a reader to ignore the very channel
|
|
86
|
+
* that reports a genuinely missing handler.
|
|
87
|
+
*/
|
|
88
|
+
export const SWF_NON_CONTENT_TAGS = new Set([
|
|
89
|
+
23, 24, 41, 58, 63, 64, 65, 66, 69, 73, 74, 77, 88, 93,
|
|
90
|
+
]);
|
|
75
91
|
//# sourceMappingURL=swfTagVocabulary.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"swfTagVocabulary.js","sourceRoot":"","sources":["../src/swfTagVocabulary.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"swfTagVocabulary.js","sourceRoot":"","sources":["../src/swfTagVocabulary.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"swfTimelineParse.d.ts","sourceRoot":"","sources":["../src/swfTimelineParse.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAKV,gBAAgB,EAGhB,aAAa,EACb,WAAW,EACZ,MAAM,0BAA0B,CAAC;AAIlC,OAAO,EAAE,SAAS,EAAE,MAAM,aAAa,CAAC;
|
|
1
|
+
{"version":3,"file":"swfTimelineParse.d.ts","sourceRoot":"","sources":["../src/swfTimelineParse.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAKV,gBAAgB,EAGhB,aAAa,EACb,WAAW,EACZ,MAAM,0BAA0B,CAAC;AAIlC,OAAO,EAAE,SAAS,EAAE,MAAM,aAAa,CAAC;AAOxC,wBAAgB,mBAAmB,CAAC,MAAM,EAAE,aAAa,EAAE,EAAE,KAAK,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,GAAG,IAAI,CAG9F;AAsCD,wBAAgB,eAAe,CAAC,MAAM,EAAE,SAAS,EAAE,KAAK,EAAE,gBAAgB,GAAG,WAAW,GAAG,IAAI,CA6E9F;AAwBD,eAAO,MAAM,0BAA0B,UAAY,CAAC"}
|
package/dist/swfTimelineParse.js
CHANGED
|
@@ -2,6 +2,7 @@ import { reportImportDiagnostic } from '@flighthq/importdiagnostics/contract';
|
|
|
2
2
|
import { ImportDiagnosticSeverity } from '@flighthq/types/contract';
|
|
3
3
|
import { isKnownSwfTag } from './swfKnownTags';
|
|
4
4
|
import { SwfReader } from './swfReader';
|
|
5
|
+
import { SWF_NON_CONTENT_TAGS } from './swfTagVocabulary';
|
|
5
6
|
// The tag walk itself: one flat lookup per tag, and a length-prefixed skip for every tag no registered
|
|
6
7
|
// family claims. It is deliberately the only module that knows how a tag stream is framed, so the root
|
|
7
8
|
// and every nested sprite body walk through exactly the same code with exactly the same registry.
|
|
@@ -25,7 +26,7 @@ function reportSwfUnhandledTag(diagnostics, code) {
|
|
|
25
26
|
reportImportDiagnostic(diagnostics, ImportDiagnosticSeverity.Skip, declinedKind, 'readSwfTimeline', capability === undefined ? { tag: code } : { capability, tag: code });
|
|
26
27
|
return;
|
|
27
28
|
}
|
|
28
|
-
if (
|
|
29
|
+
if (SWF_NON_CONTENT_TAGS.has(code))
|
|
29
30
|
return;
|
|
30
31
|
const kind = isKnownSwfTag(code) ? 'swf.tag-handler-unregistered' : 'swf.tag-unknown';
|
|
31
32
|
reportImportDiagnostic(diagnostics, ImportDiagnosticSeverity.Skip, kind, 'readSwfTimeline', { tag: code });
|
|
@@ -116,10 +117,6 @@ export function readSwfTimeline(reader, state) {
|
|
|
116
117
|
function compareSwfTimelineLabelFrame(a, b) {
|
|
117
118
|
return a.frame - b.frame;
|
|
118
119
|
}
|
|
119
|
-
// Only tags whose absence loses something a caller could want. Metadata tags — `FileAttributes`,
|
|
120
|
-
// `Metadata`, `ProductInfo`, `ScriptLimits`, `DebugID`, `EnableDebugger2`, `EnableTelemetry`, `Protect`,
|
|
121
|
-
// `SetTabIndex`, `DefineButtonCxform`, and the font hinting/naming tables — are deliberately absent: they
|
|
122
|
-
// carry no scene content, so skipping one is not a loss to report.
|
|
123
120
|
// The declared capability a declined tag costs, where one exists. Deliberately partial: `DefineFont4`,
|
|
124
121
|
// `DefineBinaryData`, `ImportAssets` and `DefineButtonSound` name no declared capability, and inventing
|
|
125
122
|
// one so every crumb could carry a join key would put entries in the denominator that nothing measures.
|
|
@@ -132,7 +129,6 @@ const SWF_DECLINED_TAG_KINDS = new Map([
|
|
|
132
129
|
[87, 'swf.define-binary-data'],
|
|
133
130
|
[91, 'swf.define-font-4'],
|
|
134
131
|
]);
|
|
135
|
-
const SWF_SILENT_TAGS = new Set([23, 24, 41, 58, 63, 64, 65, 66, 69, 73, 74, 77, 88, 93]);
|
|
136
132
|
const TAG_END = 0;
|
|
137
133
|
const TAG_SHOW_FRAME = 1;
|
|
138
134
|
export const MAX_TIMELINE_FRAME_ENTRIES = 1_000_000;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"swfTimelineParse.js","sourceRoot":"","sources":["../src/swfTimelineParse.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,sBAAsB,EAAE,MAAM,sCAAsC,CAAC;AAY9E,OAAO,EAAE,wBAAwB,EAAE,MAAM,0BAA0B,CAAC;AAEpE,OAAO,EAAE,aAAa,EAAE,MAAM,gBAAgB,CAAC;AAC/C,OAAO,EAAE,SAAS,EAAE,MAAM,aAAa,CAAC;
|
|
1
|
+
{"version":3,"file":"swfTimelineParse.js","sourceRoot":"","sources":["../src/swfTimelineParse.ts"],"names":[],"mappings":"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"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@flighthq/swf",
|
|
3
|
-
"version": "0.5.1-next.
|
|
3
|
+
"version": "0.5.1-next.1685.dc0e23a",
|
|
4
4
|
"author": "Joshua Granick and other contributors",
|
|
5
5
|
"license": "MIT",
|
|
6
6
|
"repository": {
|
|
@@ -38,32 +38,32 @@
|
|
|
38
38
|
"clean:dist": "tsx ../../scripts/clean-package-dist.ts"
|
|
39
39
|
},
|
|
40
40
|
"dependencies": {
|
|
41
|
-
"@flighthq/abc": "0.5.1-next.
|
|
42
|
-
"@flighthq/adjustments": "0.5.1-next.
|
|
43
|
-
"@flighthq/audio": "0.5.1-next.
|
|
44
|
-
"@flighthq/bitmap": "0.5.1-next.
|
|
45
|
-
"@flighthq/clip": "0.5.1-next.
|
|
46
|
-
"@flighthq/color": "0.5.1-next.
|
|
47
|
-
"@flighthq/compression": "0.5.1-next.
|
|
48
|
-
"@flighthq/effects": "0.5.1-next.
|
|
49
|
-
"@flighthq/entity": "0.5.1-next.
|
|
50
|
-
"@flighthq/geometry": "0.5.1-next.
|
|
51
|
-
"@flighthq/image": "0.5.1-next.
|
|
52
|
-
"@flighthq/image-codec": "0.5.1-next.
|
|
53
|
-
"@flighthq/importdiagnostics": "0.5.1-next.
|
|
54
|
-
"@flighthq/log": "0.5.1-next.
|
|
55
|
-
"@flighthq/math": "0.5.1-next.
|
|
56
|
-
"@flighthq/movieclip": "0.5.1-next.
|
|
57
|
-
"@flighthq/node": "0.5.1-next.
|
|
58
|
-
"@flighthq/path": "0.5.1-next.
|
|
59
|
-
"@flighthq/requirement": "0.5.1-next.
|
|
60
|
-
"@flighthq/scene2d": "0.5.1-next.
|
|
61
|
-
"@flighthq/scene2d-resources": "0.5.1-next.
|
|
62
|
-
"@flighthq/shape": "0.5.1-next.
|
|
63
|
-
"@flighthq/text": "0.5.1-next.
|
|
64
|
-
"@flighthq/text-markup": "0.5.1-next.
|
|
65
|
-
"@flighthq/texture": "0.5.1-next.
|
|
66
|
-
"@flighthq/types": "0.5.1-next.
|
|
41
|
+
"@flighthq/abc": "0.5.1-next.1685.dc0e23a",
|
|
42
|
+
"@flighthq/adjustments": "0.5.1-next.1685.dc0e23a",
|
|
43
|
+
"@flighthq/audio": "0.5.1-next.1685.dc0e23a",
|
|
44
|
+
"@flighthq/bitmap": "0.5.1-next.1685.dc0e23a",
|
|
45
|
+
"@flighthq/clip": "0.5.1-next.1685.dc0e23a",
|
|
46
|
+
"@flighthq/color": "0.5.1-next.1685.dc0e23a",
|
|
47
|
+
"@flighthq/compression": "0.5.1-next.1685.dc0e23a",
|
|
48
|
+
"@flighthq/effects": "0.5.1-next.1685.dc0e23a",
|
|
49
|
+
"@flighthq/entity": "0.5.1-next.1685.dc0e23a",
|
|
50
|
+
"@flighthq/geometry": "0.5.1-next.1685.dc0e23a",
|
|
51
|
+
"@flighthq/image": "0.5.1-next.1685.dc0e23a",
|
|
52
|
+
"@flighthq/image-codec": "0.5.1-next.1685.dc0e23a",
|
|
53
|
+
"@flighthq/importdiagnostics": "0.5.1-next.1685.dc0e23a",
|
|
54
|
+
"@flighthq/log": "0.5.1-next.1685.dc0e23a",
|
|
55
|
+
"@flighthq/math": "0.5.1-next.1685.dc0e23a",
|
|
56
|
+
"@flighthq/movieclip": "0.5.1-next.1685.dc0e23a",
|
|
57
|
+
"@flighthq/node": "0.5.1-next.1685.dc0e23a",
|
|
58
|
+
"@flighthq/path": "0.5.1-next.1685.dc0e23a",
|
|
59
|
+
"@flighthq/requirement": "0.5.1-next.1685.dc0e23a",
|
|
60
|
+
"@flighthq/scene2d": "0.5.1-next.1685.dc0e23a",
|
|
61
|
+
"@flighthq/scene2d-resources": "0.5.1-next.1685.dc0e23a",
|
|
62
|
+
"@flighthq/shape": "0.5.1-next.1685.dc0e23a",
|
|
63
|
+
"@flighthq/text": "0.5.1-next.1685.dc0e23a",
|
|
64
|
+
"@flighthq/text-markup": "0.5.1-next.1685.dc0e23a",
|
|
65
|
+
"@flighthq/texture": "0.5.1-next.1685.dc0e23a",
|
|
66
|
+
"@flighthq/types": "0.5.1-next.1685.dc0e23a"
|
|
67
67
|
},
|
|
68
68
|
"devDependencies": {
|
|
69
69
|
"@flighthq/font": "*",
|
|
@@ -8,15 +8,15 @@ describe('parseSwfRequirements', () => {
|
|
|
8
8
|
const set = parseSwfRequirements(
|
|
9
9
|
createSwf([
|
|
10
10
|
createTag(TAG_SET_BACKGROUND_COLOR, new Uint8Array([0xff, 0xff, 0xff])),
|
|
11
|
-
createTag(
|
|
11
|
+
createTag(TAG_DEFINE_SHAPE, createMinimalShapeBody()),
|
|
12
12
|
createTag(TAG_END),
|
|
13
13
|
]),
|
|
14
14
|
DECOMPRESS_DEFLATE,
|
|
15
15
|
DECOMPRESS_LZMA,
|
|
16
16
|
);
|
|
17
17
|
expect(set.requirements).toEqual([
|
|
18
|
+
{ facet: RequirementFacet.DocumentFormat, key: 'DefineShape' },
|
|
18
19
|
{ facet: RequirementFacet.DocumentFormat, key: 'SetBackgroundColor' },
|
|
19
|
-
{ facet: RequirementFacet.DocumentFormat, key: 'ShowFrame' },
|
|
20
20
|
]);
|
|
21
21
|
});
|
|
22
22
|
|
|
@@ -45,17 +45,75 @@ describe('parseSwfRequirements', () => {
|
|
|
45
45
|
});
|
|
46
46
|
|
|
47
47
|
it('reports an unregistered tag exactly like a registered one, carrying no registrar identity', () => {
|
|
48
|
+
// Both tags below carry scene content, so both are requirements. Whether a handler happens to be
|
|
49
|
+
// registered for one is not visible here — that is the consumer's business, not the producer's.
|
|
48
50
|
const set = parseSwfRequirements(
|
|
49
|
-
createSwf([
|
|
51
|
+
createSwf([
|
|
52
|
+
createTag(TAG_DEFINE_SHAPE, createMinimalShapeBody()),
|
|
53
|
+
createTag(TAG_SET_BACKGROUND_COLOR, new Uint8Array([0xff, 0xff, 0xff])),
|
|
54
|
+
createTag(TAG_END),
|
|
55
|
+
]),
|
|
50
56
|
DECOMPRESS_DEFLATE,
|
|
51
57
|
DECOMPRESS_LZMA,
|
|
52
58
|
);
|
|
53
59
|
expect(set.requirements).toEqual([
|
|
54
|
-
{ facet: RequirementFacet.DocumentFormat, key: '
|
|
55
|
-
{ facet: RequirementFacet.DocumentFormat, key: '
|
|
60
|
+
{ facet: RequirementFacet.DocumentFormat, key: 'DefineShape' },
|
|
61
|
+
{ facet: RequirementFacet.DocumentFormat, key: 'SetBackgroundColor' },
|
|
56
62
|
]);
|
|
57
63
|
});
|
|
58
64
|
|
|
65
|
+
// Downstream report: a complete, correct build warned six times per SWF for kinds no catalog row
|
|
66
|
+
// could ever answer. Five were metadata tags the timeline walk already skips; the sixth was
|
|
67
|
+
// ShowFrame, which the walk consumes structurally. A permanently unresolvable warning on every build
|
|
68
|
+
// teaches a reader to ignore the channel that reports a genuinely missing handler.
|
|
69
|
+
it.each([
|
|
70
|
+
['FileAttributes', 69],
|
|
71
|
+
['Metadata', 77],
|
|
72
|
+
['CSMTextSettings', 74],
|
|
73
|
+
['DefineFontAlignZones', 73],
|
|
74
|
+
['DefineFontName', 88],
|
|
75
|
+
['Protect', TAG_PROTECT],
|
|
76
|
+
])('emits no requirement for %s, which carries no scene content', (_name, code) => {
|
|
77
|
+
const set = parseSwfRequirements(
|
|
78
|
+
createSwf([createTag(code, new Uint8Array([1])), createTag(TAG_END)]),
|
|
79
|
+
DECOMPRESS_DEFLATE,
|
|
80
|
+
DECOMPRESS_LZMA,
|
|
81
|
+
);
|
|
82
|
+
expect(set.requirements).toEqual([]);
|
|
83
|
+
});
|
|
84
|
+
|
|
85
|
+
it('emits no requirement for ShowFrame, which the walk consumes structurally', () => {
|
|
86
|
+
const set = parseSwfRequirements(
|
|
87
|
+
createSwf([createTag(TAG_SHOW_FRAME), createTag(TAG_END)]),
|
|
88
|
+
DECOMPRESS_DEFLATE,
|
|
89
|
+
DECOMPRESS_LZMA,
|
|
90
|
+
);
|
|
91
|
+
expect(set.requirements).toEqual([]);
|
|
92
|
+
});
|
|
93
|
+
|
|
94
|
+
it('STILL reports an unrecognized tag — that gap is real and is what the channel is for', () => {
|
|
95
|
+
const set = parseSwfRequirements(
|
|
96
|
+
createSwf([createTag(TAG_UNKNOWN, new Uint8Array([1])), createTag(TAG_END)]),
|
|
97
|
+
DECOMPRESS_DEFLATE,
|
|
98
|
+
DECOMPRESS_LZMA,
|
|
99
|
+
);
|
|
100
|
+
expect(set.requirements).toEqual([{ facet: RequirementFacet.DocumentFormat, key: `Unknown(${TAG_UNKNOWN})` }]);
|
|
101
|
+
});
|
|
102
|
+
|
|
103
|
+
it('still reports content tags beside excluded ones, so exclusion is not over-broad', () => {
|
|
104
|
+
const set = parseSwfRequirements(
|
|
105
|
+
createSwf([
|
|
106
|
+
createTag(69, new Uint8Array([1])),
|
|
107
|
+
createTag(TAG_SHOW_FRAME),
|
|
108
|
+
createTag(TAG_SET_BACKGROUND_COLOR, new Uint8Array([0xff, 0xff, 0xff])),
|
|
109
|
+
createTag(TAG_END),
|
|
110
|
+
]),
|
|
111
|
+
DECOMPRESS_DEFLATE,
|
|
112
|
+
DECOMPRESS_LZMA,
|
|
113
|
+
);
|
|
114
|
+
expect(set.requirements).toEqual([{ facet: RequirementFacet.DocumentFormat, key: 'SetBackgroundColor' }]);
|
|
115
|
+
});
|
|
116
|
+
|
|
59
117
|
it('returns an empty set that still declares coverage when the source is unreadable', () => {
|
|
60
118
|
const set = parseSwfRequirements(new Uint8Array(), DECOMPRESS_DEFLATE, DECOMPRESS_LZMA);
|
|
61
119
|
expect(set.requirements).toEqual([]);
|