From ffba1e9a2190ba0879b5e37dd25be818e067b906 Mon Sep 17 00:00:00 2001 From: Ansis Brammanis Date: Fri, 22 Apr 2022 16:18:15 -0400 Subject: [PATCH] Revert web worker registry name refactor to fix CSP build edge case (#11790) (#11805) Co-authored-by: Volodymyr Agafonkin --- src/data/array_types.js | 154 ++++++++++----------- src/data/bucket/circle_bucket.js | 2 +- src/data/bucket/fill_bucket.js | 2 +- src/data/bucket/fill_extrusion_bucket.js | 4 +- src/data/bucket/heatmap_bucket.js | 2 +- src/data/bucket/line_bucket.js | 2 +- src/data/bucket/symbol_bucket.js | 6 +- src/data/dem_data.js | 4 +- src/data/feature_index.js | 2 +- src/data/feature_position_map.js | 2 +- src/data/program_configuration.js | 14 +- src/data/segment.js | 2 +- src/render/glyph_atlas.js | 2 +- src/render/image_atlas.js | 4 +- src/render/line_atlas.js | 2 +- src/source/tile_id.js | 4 +- src/style/format_section_override.js | 2 +- src/style/properties.js | 10 +- src/symbol/anchor.js | 2 +- src/symbol/opacity_state.js | 2 +- src/util/image.js | 4 +- src/util/struct_array.js.ejs | 2 +- src/util/struct_array_layout.js.ejs | 2 +- src/util/web_worker_transfer.js | 37 ++--- test/unit/util/web_worker_transfer.test.js | 4 +- 25 files changed, 138 insertions(+), 135 deletions(-) diff --git a/src/data/array_types.js b/src/data/array_types.js index 2565a0ba692..48b3dfff3dc 100644 --- a/src/data/array_types.js +++ b/src/data/array_types.js @@ -36,7 +36,7 @@ class StructArrayLayout2i4 extends StructArray { } StructArrayLayout2i4.prototype.bytesPerElement = 4; -register(StructArrayLayout2i4); +register(StructArrayLayout2i4, 'StructArrayLayout2i4'); /** * Implementation of the StructArray layout: @@ -69,7 +69,7 @@ class StructArrayLayout3i6 extends StructArray { } StructArrayLayout3i6.prototype.bytesPerElement = 6; -register(StructArrayLayout3i6); +register(StructArrayLayout3i6, 'StructArrayLayout3i6'); /** * Implementation of the StructArray layout: @@ -103,7 +103,7 @@ class StructArrayLayout4i8 extends StructArray { } StructArrayLayout4i8.prototype.bytesPerElement = 8; -register(StructArrayLayout4i8); +register(StructArrayLayout4i8, 'StructArrayLayout4i8'); /** * Implementation of the StructArray layout: @@ -146,15 +146,15 @@ class StructArrayLayout2i4ub1f12 extends StructArray { } StructArrayLayout2i4ub1f12.prototype.bytesPerElement = 12; -register(StructArrayLayout2i4ub1f12); +register(StructArrayLayout2i4ub1f12, 'StructArrayLayout2i4ub1f12'); /** * Implementation of the StructArray layout: - * [0]: Float32[3] + * [0]: Float32[4] * * @private */ -class StructArrayLayout3f12 extends StructArray { +class StructArrayLayout4f16 extends StructArray { uint8: Uint8Array; float32: Float32Array; @@ -163,23 +163,24 @@ class StructArrayLayout3f12 extends StructArray { this.float32 = new Float32Array(this.arrayBuffer); } - emplaceBack(v0: number, v1: number, v2: number): number { + emplaceBack(v0: number, v1: number, v2: number, v3: number): number { const i = this.length; this.resize(i + 1); - return this.emplace(i, v0, v1, v2); + return this.emplace(i, v0, v1, v2, v3); } - emplace(i: number, v0: number, v1: number, v2: number): number { - const o4 = i * 3; + emplace(i: number, v0: number, v1: number, v2: number, v3: number): number { + const o4 = i * 4; this.float32[o4 + 0] = v0; this.float32[o4 + 1] = v1; this.float32[o4 + 2] = v2; + this.float32[o4 + 3] = v3; return i; } } -StructArrayLayout3f12.prototype.bytesPerElement = 12; -register(StructArrayLayout3f12); +StructArrayLayout4f16.prototype.bytesPerElement = 16; +register(StructArrayLayout4f16, 'StructArrayLayout4f16'); /** * Implementation of the StructArray layout: @@ -219,7 +220,7 @@ class StructArrayLayout10ui20 extends StructArray { } StructArrayLayout10ui20.prototype.bytesPerElement = 20; -register(StructArrayLayout10ui20); +register(StructArrayLayout10ui20, 'StructArrayLayout10ui20'); /** * Implementation of the StructArray layout: @@ -257,7 +258,7 @@ class StructArrayLayout8ui16 extends StructArray { } StructArrayLayout8ui16.prototype.bytesPerElement = 16; -register(StructArrayLayout8ui16); +register(StructArrayLayout8ui16, 'StructArrayLayout8ui16'); /** * Implementation of the StructArray layout: @@ -293,7 +294,7 @@ class StructArrayLayout6i12 extends StructArray { } StructArrayLayout6i12.prototype.bytesPerElement = 12; -register(StructArrayLayout6i12); +register(StructArrayLayout6i12, 'StructArrayLayout6i12'); /** * Implementation of the StructArray layout: @@ -344,7 +345,40 @@ class StructArrayLayout4i4ui4i4i32 extends StructArray { } StructArrayLayout4i4ui4i4i32.prototype.bytesPerElement = 32; -register(StructArrayLayout4i4ui4i4i32); +register(StructArrayLayout4i4ui4i4i32, 'StructArrayLayout4i4ui4i4i32'); + +/** + * Implementation of the StructArray layout: + * [0]: Float32[3] + * + * @private + */ +class StructArrayLayout3f12 extends StructArray { + uint8: Uint8Array; + float32: Float32Array; + + _refreshViews() { + this.uint8 = new Uint8Array(this.arrayBuffer); + this.float32 = new Float32Array(this.arrayBuffer); + } + + emplaceBack(v0: number, v1: number, v2: number): number { + const i = this.length; + this.resize(i + 1); + return this.emplace(i, v0, v1, v2); + } + + emplace(i: number, v0: number, v1: number, v2: number): number { + const o4 = i * 3; + this.float32[o4 + 0] = v0; + this.float32[o4 + 1] = v1; + this.float32[o4 + 2] = v2; + return i; + } +} + +StructArrayLayout3f12.prototype.bytesPerElement = 12; +register(StructArrayLayout3f12, 'StructArrayLayout3f12'); /** * Implementation of the StructArray layout: @@ -375,7 +409,7 @@ class StructArrayLayout1ul4 extends StructArray { } StructArrayLayout1ul4.prototype.bytesPerElement = 4; -register(StructArrayLayout1ul4); +register(StructArrayLayout1ul4, 'StructArrayLayout1ul4'); /** * Implementation of the StructArray layout: @@ -429,7 +463,7 @@ class StructArrayLayout5i4f1i1ul2ui40 extends StructArray { } StructArrayLayout5i4f1i1ul2ui40.prototype.bytesPerElement = 40; -register(StructArrayLayout5i4f1i1ul2ui40); +register(StructArrayLayout5i4f1i1ul2ui40, 'StructArrayLayout5i4f1i1ul2ui40'); /** * Implementation of the StructArray layout: @@ -468,7 +502,7 @@ class StructArrayLayout3i2i2i16 extends StructArray { } StructArrayLayout3i2i2i16.prototype.bytesPerElement = 16; -register(StructArrayLayout3i2i2i16); +register(StructArrayLayout3i2i2i16, 'StructArrayLayout3i2i2i16'); /** * Implementation of the StructArray layout: @@ -508,7 +542,7 @@ class StructArrayLayout2f1f2i16 extends StructArray { } StructArrayLayout2f1f2i16.prototype.bytesPerElement = 16; -register(StructArrayLayout2f1f2i16); +register(StructArrayLayout2f1f2i16, 'StructArrayLayout2f1f2i16'); /** * Implementation of the StructArray layout: @@ -544,7 +578,7 @@ class StructArrayLayout2ub2f12 extends StructArray { } StructArrayLayout2ub2f12.prototype.bytesPerElement = 12; -register(StructArrayLayout2ub2f12); +register(StructArrayLayout2ub2f12, 'StructArrayLayout2ub2f12'); /** * Implementation of the StructArray layout: @@ -577,7 +611,7 @@ class StructArrayLayout3ui6 extends StructArray { } StructArrayLayout3ui6.prototype.bytesPerElement = 6; -register(StructArrayLayout3ui6); +register(StructArrayLayout3ui6, 'StructArrayLayout3ui6'); /** * Implementation of the StructArray layout: @@ -645,7 +679,7 @@ class StructArrayLayout3i2f2ui3ul3ui2f3ub1ul1i1ub60 extends StructArray { } StructArrayLayout3i2f2ui3ul3ui2f3ub1ul1i1ub60.prototype.bytesPerElement = 60; -register(StructArrayLayout3i2f2ui3ul3ui2f3ub1ul1i1ub60); +register(StructArrayLayout3i2f2ui3ul3ui2f3ub1ul1i1ub60, 'StructArrayLayout3i2f2ui3ul3ui2f3ub1ul1i1ub60'); /** * Implementation of the StructArray layout: @@ -717,7 +751,7 @@ class StructArrayLayout3i2f6i15ui1ul3f76 extends StructArray { } StructArrayLayout3i2f6i15ui1ul3f76.prototype.bytesPerElement = 76; -register(StructArrayLayout3i2f6i15ui1ul3f76); +register(StructArrayLayout3i2f6i15ui1ul3f76, 'StructArrayLayout3i2f6i15ui1ul3f76'); /** * Implementation of the StructArray layout: @@ -748,7 +782,7 @@ class StructArrayLayout1f4 extends StructArray { } StructArrayLayout1f4.prototype.bytesPerElement = 4; -register(StructArrayLayout1f4); +register(StructArrayLayout1f4, 'StructArrayLayout1f4'); /** * Implementation of the StructArray layout: @@ -785,7 +819,7 @@ class StructArrayLayout7f28 extends StructArray { } StructArrayLayout7f28.prototype.bytesPerElement = 28; -register(StructArrayLayout7f28); +register(StructArrayLayout7f28, 'StructArrayLayout7f28'); /** * Implementation of the StructArray layout: @@ -820,7 +854,7 @@ class StructArrayLayout5f20 extends StructArray { } StructArrayLayout5f20.prototype.bytesPerElement = 20; -register(StructArrayLayout5f20); +register(StructArrayLayout5f20, 'StructArrayLayout5f20'); /** * Implementation of the StructArray layout: @@ -858,7 +892,7 @@ class StructArrayLayout1ul3ui12 extends StructArray { } StructArrayLayout1ul3ui12.prototype.bytesPerElement = 12; -register(StructArrayLayout1ul3ui12); +register(StructArrayLayout1ul3ui12, 'StructArrayLayout1ul3ui12'); /** * Implementation of the StructArray layout: @@ -890,7 +924,7 @@ class StructArrayLayout2ui4 extends StructArray { } StructArrayLayout2ui4.prototype.bytesPerElement = 4; -register(StructArrayLayout2ui4); +register(StructArrayLayout2ui4, 'StructArrayLayout2ui4'); /** * Implementation of the StructArray layout: @@ -921,7 +955,7 @@ class StructArrayLayout1ui2 extends StructArray { } StructArrayLayout1ui2.prototype.bytesPerElement = 2; -register(StructArrayLayout1ui2); +register(StructArrayLayout1ui2, 'StructArrayLayout1ui2'); /** * Implementation of the StructArray layout: @@ -953,41 +987,7 @@ class StructArrayLayout2f8 extends StructArray { } StructArrayLayout2f8.prototype.bytesPerElement = 8; -register(StructArrayLayout2f8); - -/** - * Implementation of the StructArray layout: - * [0]: Float32[4] - * - * @private - */ -class StructArrayLayout4f16 extends StructArray { - uint8: Uint8Array; - float32: Float32Array; - - _refreshViews() { - this.uint8 = new Uint8Array(this.arrayBuffer); - this.float32 = new Float32Array(this.arrayBuffer); - } - - emplaceBack(v0: number, v1: number, v2: number, v3: number): number { - const i = this.length; - this.resize(i + 1); - return this.emplace(i, v0, v1, v2, v3); - } - - emplace(i: number, v0: number, v1: number, v2: number, v3: number): number { - const o4 = i * 4; - this.float32[o4 + 0] = v0; - this.float32[o4 + 1] = v1; - this.float32[o4 + 2] = v2; - this.float32[o4 + 3] = v3; - return i; - } -} - -StructArrayLayout4f16.prototype.bytesPerElement = 16; -register(StructArrayLayout4f16); +register(StructArrayLayout2f8, 'StructArrayLayout2f8'); /** * Implementation of the StructArray layout: @@ -1028,7 +1028,7 @@ class StructArrayLayout6i1f16 extends StructArray { } StructArrayLayout6i1f16.prototype.bytesPerElement = 16; -register(StructArrayLayout6i1f16); +register(StructArrayLayout6i1f16, 'StructArrayLayout6i1f16'); class FillExtrusionExtStruct extends Struct { _structArray: FillExtrusionExtArray; @@ -1059,7 +1059,7 @@ export class FillExtrusionExtArray extends StructArrayLayout6i12 { } } -register(FillExtrusionExtArray); +register(FillExtrusionExtArray, 'FillExtrusionExtArray'); class CollisionBoxStruct extends Struct { _structArray: CollisionBoxArray; @@ -1097,7 +1097,7 @@ export class CollisionBoxArray extends StructArrayLayout5i4f1i1ul2ui40 { } } -register(CollisionBoxArray); +register(CollisionBoxArray, 'CollisionBoxArray'); class PlacedSymbolStruct extends Struct { _structArray: PlacedSymbolArray; @@ -1147,7 +1147,7 @@ export class PlacedSymbolArray extends StructArrayLayout3i2f2ui3ul3ui2f3ub1ul1i1 } } -register(PlacedSymbolArray); +register(PlacedSymbolArray, 'PlacedSymbolArray'); class SymbolInstanceStruct extends Struct { _structArray: SymbolInstanceArray; @@ -1203,7 +1203,7 @@ export class SymbolInstanceArray extends StructArrayLayout3i2f6i15ui1ul3f76 { } } -register(SymbolInstanceArray); +register(SymbolInstanceArray, 'SymbolInstanceArray'); /** * @private @@ -1212,7 +1212,7 @@ export class GlyphOffsetArray extends StructArrayLayout1f4 { getoffsetX(index: number): number { return this.float32[index * 1 + 0]; } } -register(GlyphOffsetArray); +register(GlyphOffsetArray, 'GlyphOffsetArray'); /** * @private @@ -1223,7 +1223,7 @@ export class SymbolLineVertexArray extends StructArrayLayout3i6 { gettileUnitDistanceFromAnchor(index: number): number { return this.int16[index * 3 + 2]; } } -register(SymbolLineVertexArray); +register(SymbolLineVertexArray, 'SymbolLineVertexArray'); class FeatureIndexStruct extends Struct { _structArray: FeatureIndexArray; @@ -1252,7 +1252,7 @@ export class FeatureIndexArray extends StructArrayLayout1ul3ui12 { } } -register(FeatureIndexArray); +register(FeatureIndexArray, 'FeatureIndexArray'); class FillExtrusionCentroidStruct extends Struct { _structArray: FillExtrusionCentroidArray; @@ -1279,7 +1279,7 @@ export class FillExtrusionCentroidArray extends StructArrayLayout2ui4 { } } -register(FillExtrusionCentroidArray); +register(FillExtrusionCentroidArray, 'FillExtrusionCentroidArray'); class CircleGlobeExtStruct extends Struct { _structArray: CircleGlobeExtArray; @@ -1311,18 +1311,19 @@ export class CircleGlobeExtArray extends StructArrayLayout6i1f16 { } } -register(CircleGlobeExtArray); +register(CircleGlobeExtArray, 'CircleGlobeExtArray'); export { StructArrayLayout2i4, StructArrayLayout3i6, StructArrayLayout4i8, StructArrayLayout2i4ub1f12, - StructArrayLayout3f12, + StructArrayLayout4f16, StructArrayLayout10ui20, StructArrayLayout8ui16, StructArrayLayout6i12, StructArrayLayout4i4ui4i4i32, + StructArrayLayout3f12, StructArrayLayout1ul4, StructArrayLayout5i4f1i1ul2ui40, StructArrayLayout3i2i2i16, @@ -1338,7 +1339,6 @@ export { StructArrayLayout2ui4, StructArrayLayout1ui2, StructArrayLayout2f8, - StructArrayLayout4f16, StructArrayLayout6i1f16, StructArrayLayout2i4 as PosArray, StructArrayLayout3i6 as PosGlobeExtArray, diff --git a/src/data/bucket/circle_bucket.js b/src/data/bucket/circle_bucket.js index a8017936482..670642c4f40 100644 --- a/src/data/bucket/circle_bucket.js +++ b/src/data/bucket/circle_bucket.js @@ -242,6 +242,6 @@ class CircleBucket implements Bucke } } -register(CircleBucket, {omit: ['layers']}); +register(CircleBucket, 'CircleBucket', {omit: ['layers']}); export default CircleBucket; diff --git a/src/data/bucket/fill_bucket.js b/src/data/bucket/fill_bucket.js index e2ee9ed35be..8b4bc5864c8 100644 --- a/src/data/bucket/fill_bucket.js +++ b/src/data/bucket/fill_bucket.js @@ -227,6 +227,6 @@ class FillBucket implements Bucket { } } -register(FillBucket, {omit: ['layers', 'patternFeatures']}); +register(FillBucket, 'FillBucket', {omit: ['layers', 'patternFeatures']}); export default FillBucket; diff --git a/src/data/bucket/fill_extrusion_bucket.js b/src/data/bucket/fill_extrusion_bucket.js index edc95adf83f..7bc69e86da7 100644 --- a/src/data/bucket/fill_extrusion_bucket.js +++ b/src/data/bucket/fill_extrusion_bucket.js @@ -578,8 +578,8 @@ class FillExtrusionBucket implements Bucket { } } -register(FillExtrusionBucket, {omit: ['layers', 'features']}); -register(PartMetadata); +register(FillExtrusionBucket, 'FillExtrusionBucket', {omit: ['layers', 'features']}); +register(PartMetadata, 'PartMetadata'); export default FillExtrusionBucket; diff --git a/src/data/bucket/heatmap_bucket.js b/src/data/bucket/heatmap_bucket.js index a68a6e04909..70e7cca7b8d 100644 --- a/src/data/bucket/heatmap_bucket.js +++ b/src/data/bucket/heatmap_bucket.js @@ -12,6 +12,6 @@ class HeatmapBucket extends CircleBucket { layers: Array; } -register(HeatmapBucket, {omit: ['layers']}); +register(HeatmapBucket, 'HeatmapBucket', {omit: ['layers']}); export default HeatmapBucket; diff --git a/src/data/bucket/line_bucket.js b/src/data/bucket/line_bucket.js index 7ad8d7a95a6..f383ffbd460 100644 --- a/src/data/bucket/line_bucket.js +++ b/src/data/bucket/line_bucket.js @@ -659,6 +659,6 @@ class LineBucket implements Bucket { } } -register(LineBucket, {omit: ['layers', 'patternFeatures']}); +register(LineBucket, 'LineBucket', {omit: ['layers', 'patternFeatures']}); export default LineBucket; diff --git a/src/data/bucket/symbol_bucket.js b/src/data/bucket/symbol_bucket.js index 76db443ae33..667e3e9d59b 100644 --- a/src/data/bucket/symbol_bucket.js +++ b/src/data/bucket/symbol_bucket.js @@ -234,7 +234,7 @@ export class SymbolBuffers { } } -register(SymbolBuffers); +register(SymbolBuffers, 'SymbolBuffers'); class CollisionBuffers { layoutVertexArray: StructArray; @@ -280,7 +280,7 @@ class CollisionBuffers { } } -register(CollisionBuffers); +register(CollisionBuffers, 'CollisionBuffers'); /** * Unlike other buckets, which simply implement #addFeature with type-specific @@ -1036,7 +1036,7 @@ class SymbolBucket implements Bucket { } } -register(SymbolBucket, { +register(SymbolBucket, 'SymbolBucket', { omit: ['layers', 'collisionBoxArray', 'features', 'compareText'] }); diff --git a/src/data/dem_data.js b/src/data/dem_data.js index 1371c8ffa30..9186723e7c5 100644 --- a/src/data/dem_data.js +++ b/src/data/dem_data.js @@ -176,5 +176,5 @@ export default class DEMData { } } -register(DEMData); -register(DemMinMaxQuadTree, {omit: ['dem']}); +register(DEMData, 'DEMData'); +register(DemMinMaxQuadTree, 'DemMinMaxQuadTree', {omit: ['dem']}); diff --git a/src/data/feature_index.js b/src/data/feature_index.js index 95208d505e9..ef4cd6611f6 100644 --- a/src/data/feature_index.js +++ b/src/data/feature_index.js @@ -311,7 +311,7 @@ class FeatureIndex { } } -register(FeatureIndex, {omit: ['rawTileData', 'sourceLayerCoder']}); +register(FeatureIndex, 'FeatureIndex', {omit: ['rawTileData', 'sourceLayerCoder']}); export default FeatureIndex; diff --git a/src/data/feature_position_map.js b/src/data/feature_position_map.js index ce953420603..c78a6ae53bd 100644 --- a/src/data/feature_position_map.js +++ b/src/data/feature_position_map.js @@ -126,4 +126,4 @@ function swap(arr, i, j) { arr[j] = tmp; } -register(FeaturePositionMap); +register(FeaturePositionMap, 'FeaturePositionMap'); diff --git a/src/data/program_configuration.js b/src/data/program_configuration.js index 054e60912c8..1d969bff0f6 100644 --- a/src/data/program_configuration.js +++ b/src/data/program_configuration.js @@ -704,10 +704,10 @@ function layoutType(property, type, binderType) { return (layoutException && layoutException[binderType]) || defaultLayouts[type][binderType]; } -register(ConstantBinder); -register(CrossFadedConstantBinder); -register(SourceExpressionBinder); -register(CrossFadedCompositeBinder); -register(CompositeExpressionBinder); -register(ProgramConfiguration, {omit: ['_buffers']}); -register(ProgramConfigurationSet); +register(ConstantBinder, 'ConstantBinder'); +register(CrossFadedConstantBinder, 'CrossFadedConstantBinder'); +register(SourceExpressionBinder, 'SourceExpressionBinder'); +register(CrossFadedCompositeBinder, 'CrossFadedCompositeBinder'); +register(CompositeExpressionBinder, 'CompositeExpressionBinder'); +register(ProgramConfiguration, 'ProgramConfiguration', {omit: ['_buffers']}); +register(ProgramConfigurationSet, 'ProgramConfigurationSet'); diff --git a/src/data/segment.js b/src/data/segment.js index 9a85632a9c6..bc0a4d1f6d6 100644 --- a/src/data/segment.js +++ b/src/data/segment.js @@ -72,5 +72,5 @@ class SegmentVector { */ SegmentVector.MAX_VERTEX_ARRAY_LENGTH = Math.pow(2, 16) - 1; -register(SegmentVector); +register(SegmentVector, 'SegmentVector'); export default SegmentVector; diff --git a/src/render/glyph_atlas.js b/src/render/glyph_atlas.js index aefe6043c5b..10bc77cfeb9 100644 --- a/src/render/glyph_atlas.js +++ b/src/render/glyph_atlas.js @@ -76,4 +76,4 @@ export default class GlyphAtlas { } } -register(GlyphAtlas); +register(GlyphAtlas, 'GlyphAtlas'); diff --git a/src/render/image_atlas.js b/src/render/image_atlas.js index 4bed700f9be..4fff094c608 100644 --- a/src/render/image_atlas.js +++ b/src/render/image_atlas.js @@ -143,5 +143,5 @@ export default class ImageAtlas { } -register(ImagePosition); -register(ImageAtlas); +register(ImagePosition, 'ImagePosition'); +register(ImageAtlas, 'ImageAtlas'); diff --git a/src/render/line_atlas.js b/src/render/line_atlas.js index 1ce94ab0460..225ba333b25 100644 --- a/src/render/line_atlas.js +++ b/src/render/line_atlas.js @@ -215,6 +215,6 @@ class LineAtlas { } } -register(LineAtlas); +register(LineAtlas, 'LineAtlas'); export default LineAtlas; diff --git a/src/source/tile_id.js b/src/source/tile_id.js index 478595470cf..f6ef567e8d5 100644 --- a/src/source/tile_id.js +++ b/src/source/tile_id.js @@ -191,5 +191,5 @@ function getQuadkey(z, x, y) { return quadkey; } -register(CanonicalTileID); -register(OverscaledTileID, {omit: ['projMatrix']}); +register(CanonicalTileID, 'CanonicalTileID'); +register(OverscaledTileID, 'OverscaledTileID', {omit: ['projMatrix']}); diff --git a/src/style/format_section_override.js b/src/style/format_section_override.js index 567a6a7a7ef..fa7838d6675 100644 --- a/src/style/format_section_override.js +++ b/src/style/format_section_override.js @@ -54,4 +54,4 @@ export default class FormatSectionOverride implements Expression { } } -register(FormatSectionOverride, {omit: ['defaultValue']}); +register(FormatSectionOverride, 'FormatSectionOverride', {omit: ['defaultValue']}); diff --git a/src/style/properties.js b/src/style/properties.js index d23eaac7278..d0583152317 100644 --- a/src/style/properties.js +++ b/src/style/properties.js @@ -764,8 +764,8 @@ export class Properties { } } -register(DataDrivenProperty); -register(DataConstantProperty); -register(CrossFadedDataDrivenProperty); -register(CrossFadedProperty); -register(ColorRampProperty); +register(DataDrivenProperty, 'DataDrivenProperty'); +register(DataConstantProperty, 'DataConstantProperty'); +register(CrossFadedDataDrivenProperty, 'CrossFadedDataDrivenProperty'); +register(CrossFadedProperty, 'CrossFadedProperty'); +register(ColorRampProperty, 'ColorRampProperty'); diff --git a/src/symbol/anchor.js b/src/symbol/anchor.js index 7e449be0955..4c44600d735 100644 --- a/src/symbol/anchor.js +++ b/src/symbol/anchor.js @@ -23,6 +23,6 @@ class Anchor extends Point { } } -register(Anchor); +register(Anchor, 'Anchor'); export default Anchor; diff --git a/src/symbol/opacity_state.js b/src/symbol/opacity_state.js index b9eed22d48c..b4048c78bdc 100644 --- a/src/symbol/opacity_state.js +++ b/src/symbol/opacity_state.js @@ -22,6 +22,6 @@ class OpacityState { } } -register(OpacityState); +register(OpacityState, 'OpacityState'); export default OpacityState; diff --git a/src/util/image.js b/src/util/image.js index f501b5b385e..1fa1caa0a55 100644 --- a/src/util/image.js +++ b/src/util/image.js @@ -144,5 +144,5 @@ export class RGBAImage { } } -register(AlphaImage); -register(RGBAImage); +register(AlphaImage, 'AlphaImage'); +register(RGBAImage, 'RGBAImage'); diff --git a/src/util/struct_array.js.ejs b/src/util/struct_array.js.ejs index 61715757874..8603206a179 100644 --- a/src/util/struct_array.js.ejs +++ b/src/util/struct_array.js.ejs @@ -94,4 +94,4 @@ if (useComponentGetters) { -%> } -register(<%=StructArrayClass%>); +register(<%=StructArrayClass%>, '<%=StructArrayClass%>'); diff --git a/src/util/struct_array_layout.js.ejs b/src/util/struct_array_layout.js.ejs index 49c1ec51639..695f0efcb91 100644 --- a/src/util/struct_array_layout.js.ejs +++ b/src/util/struct_array_layout.js.ejs @@ -95,4 +95,4 @@ for (const member of members) { } <%=StructArrayLayoutClass%>.prototype.bytesPerElement = <%= size %>; -register(<%=StructArrayLayoutClass%>); +register(<%=StructArrayLayoutClass%>, '<%=StructArrayLayoutClass%>'); diff --git a/src/util/web_worker_transfer.js b/src/util/web_worker_transfer.js index e26e75b2609..62620cc86a4 100644 --- a/src/util/web_worker_transfer.js +++ b/src/util/web_worker_transfer.js @@ -52,17 +52,20 @@ const registry: Registry = {}; * * @private */ -export function register(klass: Class, options: RegisterOptions = {}) { - const name = klass.name; +export function register(klass: Class, name: string, options: RegisterOptions = {}) { assert(name, 'Can\'t register a class without a name.'); assert(!registry[name], `${name} is already registered.`); + (Object.defineProperty: any)(klass, '_classRegistryKey', { + value: name, + writeable: false + }); registry[name] = { klass, omit: options.omit || [] }; } -register(Object); +register(Object, 'Object'); type SerializedGrid = { buffer: ArrayBuffer }; @@ -80,21 +83,20 @@ type SerializedGrid = { buffer: ArrayBuffer }; Object.defineProperty(Grid, 'name', {value: 'Grid'}); -register(Grid); +register(Grid, 'Grid'); -register(Color); -register(Error); -register(AJAXError); -register(ResolvedImage); +register(Color, 'Color'); +register(Error, 'Error'); +register(AJAXError, 'AJAXError'); +register(ResolvedImage, 'ResolvedImage'); +register(StylePropertyFunction, 'StylePropertyFunction'); +register(StyleExpression, 'StyleExpression', {omit: ['_evaluator']}); -register(StylePropertyFunction); -register(StyleExpression, {omit: ['_evaluator']}); - -register(ZoomDependentExpression); -register(ZoomConstantExpression); -register(CompoundExpression, {omit: ['_evaluate']}); +register(ZoomDependentExpression, 'ZoomDependentExpression'); +register(ZoomConstantExpression, 'ZoomConstantExpression'); +register(CompoundExpression, 'CompoundExpression', {omit: ['_evaluate']}); for (const name in expressions) { - if (!registry[expressions[name].name]) register(expressions[name]); + if (!registry[(expressions[name]: any)._classRegistryKey]) register(expressions[name], `Expression${name}`); } function isArrayBuffer(val: any): boolean { @@ -167,10 +169,11 @@ export function serialize(input: mixed, transferables: ?Array): Se if (typeof input === 'object') { const klass = (input.constructor: any); - const name = klass.name; - if (!registry[name]) { + const name = klass._classRegistryKey; + if (!name) { throw new Error(`can't serialize object of unregistered class ${name}`); } + assert(registry[name]); const properties: SerializedObject = klass.serialize ? // (Temporary workaround) allow a class to provide static diff --git a/test/unit/util/web_worker_transfer.test.js b/test/unit/util/web_worker_transfer.test.js index b548b902ff0..ab2d037a362 100644 --- a/test/unit/util/web_worker_transfer.test.js +++ b/test/unit/util/web_worker_transfer.test.js @@ -26,7 +26,7 @@ test('round trip', (t) => { } } - register(Foo, {omit: ['_cached']}); + register(Foo, 'Foo', {omit: ['_cached']}); const foo = new Foo(10); const transferables = []; @@ -64,7 +64,7 @@ test('custom serialization', (t) => { } } - register(Bar); + register(Bar, 'Bar'); const bar = new Bar('a'); t.assert(!bar._deserialized);