@rings-webgpu/core 1.0.10 → 1.0.11

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.
@@ -5804,202 +5804,219 @@ let IESProfiles_frag = `
5804
5804
  }
5805
5805
  `;
5806
5806
 
5807
- let ShadowMapping_frag = `
5808
- @group(1) @binding(auto) var shadowMapSampler: sampler;
5807
+ let ShadowMapping_frag = (
5808
+ /*wgsl*/
5809
+ `
5810
+ @group(1) @binding(auto) var shadowMapSampler: sampler_comparison;
5809
5811
  @group(1) @binding(auto) var shadowMap: texture_depth_2d_array;
5810
- @group(1) @binding(auto) var pointShadowMapSampler: sampler;
5812
+ @group(1) @binding(auto) var pointShadowMapSampler: sampler_comparison;
5811
5813
  @group(1) @binding(auto) var pointShadowMap: texture_depth_cube_array;
5812
5814
 
5813
5815
  var<private> directShadowVisibility: array<f32, 8>;
5814
5816
  var<private> pointShadows: array<f32, 8>;
5815
- var<private> shadowWeight: f32 = 1.0;
5817
+ var<private> shadowWeight: f32 = 1.0 ;
5816
5818
 
5817
5819
  fn useShadow(){
5818
- directShadowVisibility = array<f32, 8>(1.0,1.0,1.0,1.0,1.0,1.0,1.0,1.0);
5820
+ directShadowVisibility = array<f32, 8>( 1.0,1.0,1.0,1.0,1.0,1.0,1.0,1.0) ;
5819
5821
  pointShadows = array<f32, 8>(1.0,1.0,1.0,1.0,1.0,1.0,1.0,1.0) ;
5820
5822
  directShadowMaping(globalUniform.shadowBias);
5821
5823
  pointShadowMapCompare(globalUniform.pointShadowBias);
5822
5824
  }
5823
5825
 
5824
5826
  fn calcBasicBias(shadowWorldSize:f32, shadowDepthTexSize:f32, near:f32, far:f32) -> f32{
5825
- var bias = shadowWorldSize / shadowDepthTexSize;
5826
- bias = bias / (far - near);
5827
- return bias * 2.0;
5827
+ var bias = shadowWorldSize / shadowDepthTexSize;
5828
+ bias = bias / (far - near);
5829
+ return bias * 2.0;
5828
5830
  }
5829
5831
 
5830
- const dirCount:i32 = 8;
5831
- const pointCount:i32 = 8;
5832
- const csmCount:i32 = ${CSM.Cascades};
5832
+ const dirCount:i32 = 8 ;
5833
+ const pointCount:i32 = 8 ;
5834
+ const csmCount:i32 = ${CSM.Cascades} ;
5833
5835
  var<private> csmLevel:i32 = -1;
5836
+ fn directShadowMaping(shadowBias: f32) {
5834
5837
 
5835
- fn directShadowMaping(shadowBias: f32) {
5836
5838
  let enableCSM:bool = globalUniform.enableCSM > 0.5;
5837
- for(var i:i32 = 0; i < dirCount; i = i+1){
5838
- if(i >= globalUniform.nDirShadowStart && i < globalUniform.nDirShadowEnd){
5839
- let ldx = globalUniform.shadowLights[u32(i) / 4u][u32(i) % 4u];
5840
- let light = lightBuffer[u32(ldx)] ;
5841
- var shadowIndex = i32(light.castShadow);
5842
- var visibility = 1.0;
5843
- var shadowMatrix:mat4x4<f32>;
5844
- #if USE_CSM
5845
- if(enableCSM && shadowIndex == 0){
5846
- var totalWeight = 0.0;
5847
- visibility = 0.0;
5848
- var validCount = 0;
5849
- for(var csm:i32 = 0; csm < csmCount; csm ++){
5850
- var csmShadowBias = globalUniform.csmShadowBias[csm] * shadowBias;
5851
- shadowMatrix = globalUniform.csmMatrix[csm];
5852
- let csmShadowResult = directShadowMapingIndex(light, shadowMatrix, csm, csmShadowBias);
5853
- if(csmShadowResult.y < 0.5){
5854
- validCount ++;
5855
- var uv = 2.0 * csmShadowResult.zw - vec2<f32>(1.0);
5856
- uv = saturate(vec2<f32>(1.0) - abs(uv));
5857
- uv /= clamp(globalUniform.csmMargin, 0.01, 0.5);
5858
- var weight:f32 = min(uv.x, 1.0);
5859
- weight = min(weight, uv.y);
5860
-
5861
- if(validCount == 1 && csm == csmCount - 1){
5862
- visibility = 1.0 - weight + csmShadowResult.x * weight;
5863
- totalWeight = 1.0;
5864
- }else{
5865
- weight *= 1.0 - totalWeight;
5866
- visibility += csmShadowResult.x * weight;
5867
- totalWeight += weight;
5868
- };
5869
-
5870
- if(validCount >= 2 || totalWeight >= 0.99){
5871
- csmLevel = csm;
5872
- break;
5873
- };
5874
- }
5875
- }
5876
-
5877
- totalWeight += 0.0001;
5878
- if(validCount == 0){
5879
- visibility = 1.0;
5880
- }else{
5881
- visibility = visibility / totalWeight ;
5882
- };
5883
- } else {
5884
- shadowMatrix = globalUniform.shadowMatrix[shadowIndex];
5885
- if(enableCSM) {
5886
- shadowIndex += csmCount - 1;
5887
- }
5888
- visibility = directShadowMapingIndex(light, shadowMatrix, shadowIndex, shadowBias).x;
5839
+ for (var i: i32 = 0; i < dirCount ; i = i + 1) {
5840
+ if( i >= globalUniform.nDirShadowStart && i < globalUniform.nDirShadowEnd ){
5841
+ let ldx = globalUniform.shadowLights[u32(i) / 4u][u32(i) % 4u];
5842
+ let light = lightBuffer[u32(ldx)] ;
5843
+ var shadowIndex = i32(light.castShadow);
5844
+ var visibility = 1.0;
5845
+ var shadowMatrix:mat4x4<f32>;
5846
+ #if USE_CSM
5847
+ if(enableCSM && shadowIndex == 0){
5848
+ var totalWeight = 0.0;
5849
+ visibility = 0.0;
5850
+ var validCount = 0;
5851
+ for(var csm:i32 = 0; csm < csmCount; csm ++){
5852
+ var csmShadowBias = globalUniform.csmShadowBias[csm] * shadowBias;
5853
+ shadowMatrix = globalUniform.csmMatrix[csm];
5854
+ let csmShadowResult = directShadowMapingIndex(light, shadowMatrix, csm, csmShadowBias);
5855
+ if(csmShadowResult.y < 0.5){
5856
+ validCount ++;
5857
+
5858
+ var uv = 2.0 * csmShadowResult.zw - vec2<f32>(1.0);
5859
+ uv = saturate(vec2<f32>(1.0) - abs(uv));
5860
+ uv /= clamp(globalUniform.csmMargin, 0.01, 0.5);
5861
+ var weight:f32 = min(uv.x, 1.0);
5862
+ weight = min(weight, uv.y);
5863
+
5864
+ if(validCount == 1 && csm == csmCount - 1){
5865
+ visibility = 1.0 - weight + csmShadowResult.x * weight;
5866
+ totalWeight = 1.0;
5867
+ }else{
5868
+ weight *= 1.0 - totalWeight;
5869
+ visibility += csmShadowResult.x * weight;
5870
+ totalWeight += weight;
5889
5871
  }
5890
- #else
5891
- shadowMatrix = globalUniform.shadowMatrix[shadowIndex];
5892
- visibility = directShadowMapingIndex(light, shadowMatrix, shadowIndex, shadowBias).x;
5893
- #endif
5894
- directShadowVisibility[i] = visibility;
5895
- }
5872
+ // if(weight < 1.0){
5873
+ // visibility += 0.1;
5874
+ // }
5875
+ if(validCount >= 2 || totalWeight >= 0.99){
5876
+ csmLevel = csm;
5877
+ break;
5878
+ }
5879
+ }
5880
+ }
5881
+ totalWeight += 0.0001;
5882
+ if(validCount == 0){
5883
+ visibility = 1.0;
5884
+ }else{
5885
+ visibility = visibility / totalWeight ;
5886
+ }
5887
+ }else{
5888
+ shadowMatrix = globalUniform.shadowMatrix[shadowIndex];
5889
+ if(enableCSM) {
5890
+ shadowIndex += csmCount - 1;
5891
+ }
5892
+ visibility = directShadowMapingIndex(light, shadowMatrix, shadowIndex, shadowBias).x;
5893
+ }
5894
+ #else
5895
+ shadowMatrix = globalUniform.shadowMatrix[shadowIndex];
5896
+ visibility = directShadowMapingIndex(light, shadowMatrix, shadowIndex, shadowBias).x;
5897
+ #endif
5898
+ directShadowVisibility[i] = visibility;
5899
+ }
5896
5900
  }
5901
+
5897
5902
  }
5898
5903
 
5899
- fn directShadowMapingIndex(light:LightData, matrix:mat4x4<f32>, depthTexIndex:i32, shadowBias:f32) -> vec4<f32> {
5900
- var visibility = 1.0;
5901
- var isOutSideArea:f32 = 1.0;
5902
- var varying_shadowUV:vec2<f32> = vec2<f32>(0.0);
5903
- #if USE_SHADOWMAPING
5904
- var shadowPosTmp = matrix * vec4<f32>(ORI_VertexVarying.vWorldPos.xyz, 1.0);
5905
- var shadowPos = shadowPosTmp.xyz / shadowPosTmp.w;
5906
- varying_shadowUV = shadowPos.xy * vec2<f32>(0.5, -0.5) + vec2<f32>(0.5, 0.5);
5907
- if (varying_shadowUV.x <= 1.0
5908
- && varying_shadowUV.x >= 0.0
5909
- && varying_shadowUV.y <= 1.0
5910
- && varying_shadowUV.y >= 0.0
5911
- && shadowPosTmp.z <= 1.0
5912
- && shadowPosTmp.z >= 0.0){
5913
- visibility = 0.0;
5914
- isOutSideArea = 0.0;
5915
- var uvOnePixel = 1.0 / vec2<f32>(globalUniform.shadowMapSize) ;
5916
- var totalWeight = 0.0;
5917
- var bias = -0.005 * max(dot(fragData.N, -light.direction) , 0.0 );
5918
- bias = clamp(bias, 0, 0.01) + -shadowBias;
5919
- let bound = 1;
5920
- for (var y = -bound; y <= bound; y++) {
5921
- for(var x = -bound; x <= bound; x++) {
5922
- var offset = vec2<f32>(f32(x), f32(y)) ;
5923
- var offsetUV = offset * uvOnePixel ;
5924
- var weight = min(length(offset),1.0) ;
5925
- var depth = textureSampleLevel(shadowMap, shadowMapSampler, varying_shadowUV + offsetUV , depthTexIndex, 0);
5926
- if ((shadowPos.z - bias ) < depth) {
5927
- visibility += weight ;
5928
- totalWeight += weight;
5929
- }else{
5930
- totalWeight += 1.0;
5931
- };
5932
- }
5904
+ fn directShadowMapingIndex(light:LightData, matrix:mat4x4<f32>, depthTexIndex:i32, shadowBias:f32) -> vec4<f32>
5905
+ {
5906
+ var visibility = 1.0;
5907
+ var isOutSideArea:f32 = 1.0;
5908
+ var varying_shadowUV:vec2<f32> = vec2<f32>(0.0);
5909
+ #if USE_SHADOWMAPING
5910
+ var shadowPosTmp = matrix * vec4<f32>(ORI_VertexVarying.vWorldPos.xyz, 1.0);
5911
+ var shadowPos = shadowPosTmp.xyz / shadowPosTmp.w;
5912
+ varying_shadowUV = shadowPos.xy * vec2<f32>(0.5, -0.5) + vec2<f32>(0.5, 0.5);
5913
+ if (varying_shadowUV.x <= 1.0
5914
+ && varying_shadowUV.x >= 0.0
5915
+ && varying_shadowUV.y <= 1.0
5916
+ && varying_shadowUV.y >= 0.0
5917
+ && shadowPosTmp.z <= 1.0
5918
+ && shadowPosTmp.z >= 0.0)
5919
+ {
5920
+ visibility = 0.0;
5921
+ isOutSideArea = 0.0;
5922
+ var uvOnePixel = 1.0 / vec2<f32>(globalUniform.shadowMapSize) ;
5923
+ var totalWeight = 0.0;
5924
+ // var NoL = (dot(normalize(ORI_VertexVarying.vWorldNormal), normalize(-light.direction)));
5925
+ // let v = max(NoL, 0.0) ;
5926
+ // var bias = max(0.05 * (dot(normalize(fragData.N), normalize(-light.direction)) ), -shadowBias);
5927
+ var bias = -0.005 * max(dot(fragData.N, -light.direction) , 0.0 );
5928
+ bias = clamp(bias, 0, 0.01) + -shadowBias;
5929
+
5930
+ // var bias = shadowBias / v;
5931
+ let bound = 1 ;
5932
+ for (var y = -bound; y <= bound; y++) {
5933
+ for (var x = -bound; x <= bound; x++) {
5934
+ var offset = vec2<f32>(f32(x), f32(y)) ;
5935
+ var offsetUV = offset * uvOnePixel ;
5936
+ var weight = min(length(offset),1.0) ;
5937
+ var depth = textureSampleCompareLevel(shadowMap, shadowMapSampler, varying_shadowUV + offsetUV , depthTexIndex, shadowPos.z - bias);
5938
+ if (depth < 0.5) {
5939
+ totalWeight += 1.0;
5940
+ }else{
5941
+ visibility += weight;
5942
+ totalWeight += weight;
5933
5943
  }
5934
- visibility /= totalWeight;
5935
5944
  }
5936
- #endif
5937
- return vec4<f32>(visibility, isOutSideArea, varying_shadowUV);
5938
- }
5939
-
5940
- fn pointShadowMapCompare(shadowBias: f32) {
5941
- let worldPos = ORI_VertexVarying.vWorldPos.xyz;
5942
- let offset = 0.1;
5943
- for(var i: i32 = 0; i < pointCount ; i = i + 1){
5944
- if( i >= globalUniform.nPointShadowStart && i < globalUniform.nPointShadowEnd ){
5945
- let ldx = globalUniform.shadowLights[u32(i) / 4u][u32(i) % 4u];
5946
- let light = lightBuffer[u32(ldx)];
5947
-
5948
- #if USE_SHADOWMAPING
5949
- let lightPos = light.position.xyz;
5950
- var shadow = 0.0;
5951
- let frgToLight = worldPos - lightPos.xyz;
5952
- var dir: vec3<f32> = normalize(frgToLight);
5953
- var len = length(frgToLight);
5954
- var bias = max(shadowBias * globalUniform.far * (1.0 - dot(ORI_ShadingInput.Normal, dir)), 0.005);
5955
-
5956
- #if USE_PCF_SHADOW
5957
- let samples = 4.0;
5958
- let sampleOffset = offset / (samples * 0.5);
5959
- for (var x: f32 = -offset; x < offset; x += sampleOffset) {
5960
- for (var y: f32 = -offset; y < offset; y += sampleOffset) {
5961
- for (var z: f32 = -offset; z < offset; z += sampleOffset) {
5962
- let offsetDir = normalize(dir.xyz + vec3<f32>(x, y, z));
5963
- var depth = textureSampleLevel(pointShadowMap, pointShadowMapSampler, offsetDir, light.castShadow, 0);
5964
- depth *= globalUniform.far;
5965
- if ((len - bias) > depth) {
5966
- shadow += 1.0 * dot(offsetDir, dir.xyz);
5967
- }
5968
- }
5969
- }
5970
- }
5971
- shadow = min(max(shadow / (samples * samples * samples), 0.0), 1.0);
5972
- #endif
5945
+ }
5946
+ visibility /= totalWeight;
5947
+ }
5948
+ #endif
5949
+ return vec4<f32>(visibility, isOutSideArea, varying_shadowUV);
5950
+ }
5951
+
5952
+ fn pointShadowMapCompare(shadowBias: f32){
5953
+ let worldPos = ORI_VertexVarying.vWorldPos.xyz;
5954
+ let offset = 0.1;
5973
5955
 
5974
- #if USE_SOFT_SHADOW
5975
- let vDis = length(globalUniform.CameraPos.xyz - worldPos.xyz);
5976
- let sampleRadies = globalUniform.shadowSoft;
5977
- let samples = 20;
5978
- for (var j:i32 = 0; j < samples; j += 1) {
5979
- let offsetDir = normalize(dir.xyz + sampleOffsetDir[j] * sampleRadies);
5980
- var depth = textureSampleLevel(pointShadowMap, pointShadowMapSampler, offsetDir, light.castShadow, 0);
5981
- depth *= globalUniform.far;
5982
- if ((len - bias) > depth) {
5983
- shadow += 1.0 * dot(offsetDir, dir.xyz);
5956
+ for (var i: i32 = 0; i < pointCount ; i = i + 1) {
5957
+ if( i >= globalUniform.nPointShadowStart && i < globalUniform.nPointShadowEnd ){
5958
+ let ldx = globalUniform.shadowLights[u32(i) / 4u][u32(i) % 4u];
5959
+ let light = lightBuffer[u32(ldx)] ;
5960
+
5961
+ #if USE_SHADOWMAPING
5962
+ let lightPos = light.position.xyz;
5963
+ var shadow = 0.0;
5964
+ let frgToLight = worldPos - lightPos.xyz;
5965
+ var dir: vec3<f32> = normalize(frgToLight);
5966
+ var len = length(frgToLight);
5967
+ var bias = max(shadowBias * globalUniform.far * (1.0 - dot(ORI_ShadingInput.Normal, dir)), 0.005);
5968
+
5969
+ #if USE_PCF_SHADOW
5970
+ let samples = 4.0;
5971
+ let sampleOffset = offset / (samples * 0.5);
5972
+ for (var x: f32 = -offset; x < offset; x += sampleOffset) {
5973
+ for (var y: f32 = -offset; y < offset; y += sampleOffset) {
5974
+ for (var z: f32 = -offset; z < offset; z += sampleOffset) {
5975
+ let compareZ = (len - bias) / globalUniform.far;
5976
+ var depth = textureSampleCompareLevel(pointShadowMap, pointShadowMapSampler, dir.xyz, light.castShadow, compareZ);
5977
+ if (depth < 0.5) {
5978
+ shadow = 1.0;
5979
+ }
5980
+ for (var j = 0; j < pointCount ; j+=1 ){
5981
+ if(i32(light.castShadow) == j){
5982
+ pointShadows[j] = 1.0 - shadow;
5983
+ }
5984
5984
  }
5985
+ }
5985
5986
  }
5986
- shadow = min(max(shadow / f32(samples), 0.0), 1.0);
5987
+ }
5988
+ shadow = min(max(shadow / (samples * samples * samples), 0.0), 1.0);
5987
5989
  #endif
5988
-
5989
- #if USE_HARD_SHADOW
5990
- var depth = textureSampleLevel(pointShadowMap, pointShadowMapSampler, dir.xyz, light.castShadow, 0);
5990
+
5991
+ #if USE_SOFT_SHADOW
5992
+ let vDis = length(globalUniform.CameraPos.xyz - worldPos.xyz);
5993
+ let sampleRadies = globalUniform.shadowSoft;
5994
+ let samples = 20;
5995
+ for (var j: i32 = 0; j < samples; j += 1) {
5996
+ let offsetDir = normalize(dir.xyz + sampleOffsetDir[j] * sampleRadies);
5997
+ var depth = textureSampleCompareLevel(pointShadowMap, pointShadowMapSampler, offsetDir, light.castShadow, 0);
5991
5998
  depth *= globalUniform.far;
5992
5999
  if ((len - bias) > depth) {
5993
- shadow = 1.0;
6000
+ shadow += 1.0 * dot(offsetDir, dir.xyz);
5994
6001
  }
5995
- #endif
5996
- for (var j=0; j < pointCount; j+=1) {
5997
- if(i32(light.castShadow) == j){
5998
- pointShadows[j] = 1.0 - shadow;
5999
- }
6000
- }
6001
- #endif
6002
- }
6002
+ }
6003
+ shadow = min(max(shadow / f32(samples), 0.0), 1.0);
6004
+ #endif
6005
+
6006
+ #if USE_HARD_SHADOW
6007
+ var depth = textureSampleCompareLevel(pointShadowMap, pointShadowMapSampler, dir.xyz, light.castShadow, 0);
6008
+ depth *= globalUniform.far;
6009
+ if ((len - bias) > depth) {
6010
+ shadow = 1.0;
6011
+ }
6012
+ #endif
6013
+ for (var j = 0; j < pointCount ; j+=1 ) {
6014
+ if(i32(light.castShadow) == j){
6015
+ pointShadows[j] = 1.0 - shadow ;
6016
+ }
6017
+ }
6018
+ #endif
6019
+ }
6003
6020
  }
6004
6021
  }
6005
6022
 
@@ -6012,7 +6029,8 @@ let ShadowMapping_frag = `
6012
6029
  vec3<f32>(0.0, 1.0, 1.0), vec3<f32>(0.0, -1.0, 1.0), vec3<f32>(0.0, -1.0, -1.0), vec3<f32>(0.0, 1.0, -1.0),
6013
6030
  );
6014
6031
  #endif
6015
- `;
6032
+ `
6033
+ );
6016
6034
 
6017
6035
  let Irradiance_frag = `
6018
6036
  #include "IrradianceVolumeData_frag"
@@ -39280,483 +39298,483 @@ class AtlasParser extends ParserBase {
39280
39298
  }
39281
39299
  }
39282
39300
 
39283
- // DEFLATE is a complex format; to read this code, you should probably check the RFC first:
39284
- // https://tools.ietf.org/html/rfc1951
39285
- // You may also wish to take a look at the guide I made about this program:
39286
- // https://gist.github.com/101arrowz/253f31eb5abc3d9275ab943003ffecad
39287
- // Some of the following code is similar to that of UZIP.js:
39288
- // https://github.com/photopea/UZIP.js
39289
- // However, the vast majority of the codebase has diverged from UZIP.js to increase performance and reduce bundle size.
39290
- // Sometimes 0 will appear where -1 would be more appropriate. This is because using a uint
39291
- // is better for memory in most engines (I *think*).
39292
-
39293
- // aliases for shorter compressed code (most minifers don't do this)
39294
- var u8 = Uint8Array, u16 = Uint16Array, i32 = Int32Array;
39295
- // fixed length extra bits
39296
- var fleb = new u8([0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 2, 2, 2, 2, 3, 3, 3, 3, 4, 4, 4, 4, 5, 5, 5, 5, 0, /* unused */ 0, 0, /* impossible */ 0]);
39297
- // fixed distance extra bits
39298
- var fdeb = new u8([0, 0, 0, 0, 1, 1, 2, 2, 3, 3, 4, 4, 5, 5, 6, 6, 7, 7, 8, 8, 9, 9, 10, 10, 11, 11, 12, 12, 13, 13, /* unused */ 0, 0]);
39299
- // code length index map
39300
- var clim = new u8([16, 17, 18, 0, 8, 7, 9, 6, 10, 5, 11, 4, 12, 3, 13, 2, 14, 1, 15]);
39301
- // get base, reverse index map from extra bits
39302
- var freb = function (eb, start) {
39303
- var b = new u16(31);
39304
- for (var i = 0; i < 31; ++i) {
39305
- b[i] = start += 1 << eb[i - 1];
39306
- }
39307
- // numbers here are at max 18 bits
39308
- var r = new i32(b[30]);
39309
- for (var i = 1; i < 30; ++i) {
39310
- for (var j = b[i]; j < b[i + 1]; ++j) {
39311
- r[j] = ((j - b[i]) << 5) | i;
39312
- }
39313
- }
39314
- return { b: b, r: r };
39315
- };
39316
- var _a = freb(fleb, 2), fl = _a.b, revfl = _a.r;
39317
- // we can ignore the fact that the other numbers are wrong; they never happen anyway
39318
- fl[28] = 258, revfl[258] = 28;
39319
- var _b = freb(fdeb, 0), fd = _b.b;
39320
- // map of value to reverse (assuming 16 bits)
39321
- var rev = new u16(32768);
39322
- for (var i = 0; i < 32768; ++i) {
39323
- // reverse table algorithm from SO
39324
- var x = ((i & 0xAAAA) >> 1) | ((i & 0x5555) << 1);
39325
- x = ((x & 0xCCCC) >> 2) | ((x & 0x3333) << 2);
39326
- x = ((x & 0xF0F0) >> 4) | ((x & 0x0F0F) << 4);
39327
- rev[i] = (((x & 0xFF00) >> 8) | ((x & 0x00FF) << 8)) >> 1;
39328
- }
39329
- // create huffman tree from u8 "map": index -> code length for code index
39330
- // mb (max bits) must be at most 15
39331
- // TODO: optimize/split up?
39332
- var hMap = (function (cd, mb, r) {
39333
- var s = cd.length;
39334
- // index
39335
- var i = 0;
39336
- // u16 "map": index -> # of codes with bit length = index
39337
- var l = new u16(mb);
39338
- // length of cd must be 288 (total # of codes)
39339
- for (; i < s; ++i) {
39340
- if (cd[i])
39341
- ++l[cd[i] - 1];
39342
- }
39343
- // u16 "map": index -> minimum code for bit length = index
39344
- var le = new u16(mb);
39345
- for (i = 1; i < mb; ++i) {
39346
- le[i] = (le[i - 1] + l[i - 1]) << 1;
39347
- }
39348
- var co;
39349
- if (r) {
39350
- // u16 "map": index -> number of actual bits, symbol for code
39351
- co = new u16(1 << mb);
39352
- // bits to remove for reverser
39353
- var rvb = 15 - mb;
39354
- for (i = 0; i < s; ++i) {
39355
- // ignore 0 lengths
39356
- if (cd[i]) {
39357
- // num encoding both symbol and bits read
39358
- var sv = (i << 4) | cd[i];
39359
- // free bits
39360
- var r_1 = mb - cd[i];
39361
- // start value
39362
- var v = le[cd[i] - 1]++ << r_1;
39363
- // m is end value
39364
- for (var m = v | ((1 << r_1) - 1); v <= m; ++v) {
39365
- // every 16 bit value starting with the code yields the same result
39366
- co[rev[v] >> rvb] = sv;
39367
- }
39368
- }
39369
- }
39370
- }
39371
- else {
39372
- co = new u16(s);
39373
- for (i = 0; i < s; ++i) {
39374
- if (cd[i]) {
39375
- co[i] = rev[le[cd[i] - 1]++] >> (15 - cd[i]);
39376
- }
39377
- }
39378
- }
39379
- return co;
39380
- });
39381
- // fixed length tree
39382
- var flt = new u8(288);
39383
- for (var i = 0; i < 144; ++i)
39384
- flt[i] = 8;
39385
- for (var i = 144; i < 256; ++i)
39386
- flt[i] = 9;
39387
- for (var i = 256; i < 280; ++i)
39388
- flt[i] = 7;
39389
- for (var i = 280; i < 288; ++i)
39390
- flt[i] = 8;
39391
- // fixed distance tree
39392
- var fdt = new u8(32);
39393
- for (var i = 0; i < 32; ++i)
39394
- fdt[i] = 5;
39395
- // fixed length map
39396
- var flrm = /*#__PURE__*/ hMap(flt, 9, 1);
39397
- // fixed distance map
39398
- var fdrm = /*#__PURE__*/ hMap(fdt, 5, 1);
39399
- // find max of array
39400
- var max = function (a) {
39401
- var m = a[0];
39402
- for (var i = 1; i < a.length; ++i) {
39403
- if (a[i] > m)
39404
- m = a[i];
39405
- }
39406
- return m;
39407
- };
39408
- // read d, starting at bit p and mask with m
39409
- var bits = function (d, p, m) {
39410
- var o = (p / 8) | 0;
39411
- return ((d[o] | (d[o + 1] << 8)) >> (p & 7)) & m;
39412
- };
39413
- // read d, starting at bit p continuing for at least 16 bits
39414
- var bits16 = function (d, p) {
39415
- var o = (p / 8) | 0;
39416
- return ((d[o] | (d[o + 1] << 8) | (d[o + 2] << 16)) >> (p & 7));
39417
- };
39418
- // get end of byte
39419
- var shft = function (p) { return ((p + 7) / 8) | 0; };
39420
- // typed array slice - allows garbage collector to free original reference,
39421
- // while being more compatible than .slice
39422
- var slc = function (v, s, e) {
39423
- if (s == null || s < 0)
39424
- s = 0;
39425
- if (e == null || e > v.length)
39426
- e = v.length;
39427
- // can't use .constructor in case user-supplied
39428
- return new u8(v.subarray(s, e));
39429
- };
39430
- // error codes
39431
- var ec = [
39432
- 'unexpected EOF',
39433
- 'invalid block type',
39434
- 'invalid length/literal',
39435
- 'invalid distance',
39436
- 'stream finished',
39437
- 'no stream handler',
39438
- ,
39439
- 'no callback',
39440
- 'invalid UTF-8 data',
39441
- 'extra field too long',
39442
- 'date not in range 1980-2099',
39443
- 'filename too long',
39444
- 'stream finishing',
39445
- 'invalid zip data'
39446
- // determined by unknown compression method
39447
- ];
39448
- var err = function (ind, msg, nt) {
39449
- var e = new Error(msg || ec[ind]);
39450
- e.code = ind;
39451
- if (Error.captureStackTrace)
39452
- Error.captureStackTrace(e, err);
39453
- if (!nt)
39454
- throw e;
39455
- return e;
39456
- };
39457
- // expands raw DEFLATE data
39458
- var inflt = function (dat, st, buf, dict) {
39459
- // source length dict length
39460
- var sl = dat.length, dl = dict ? dict.length : 0;
39461
- if (!sl || st.f && !st.l)
39462
- return buf || new u8(0);
39463
- var noBuf = !buf;
39464
- // have to estimate size
39465
- var resize = noBuf || st.i != 2;
39466
- // no state
39467
- var noSt = st.i;
39468
- // Assumes roughly 33% compression ratio average
39469
- if (noBuf)
39470
- buf = new u8(sl * 3);
39471
- // ensure buffer can fit at least l elements
39472
- var cbuf = function (l) {
39473
- var bl = buf.length;
39474
- // need to increase size to fit
39475
- if (l > bl) {
39476
- // Double or set to necessary, whichever is greater
39477
- var nbuf = new u8(Math.max(bl * 2, l));
39478
- nbuf.set(buf);
39479
- buf = nbuf;
39480
- }
39481
- };
39482
- // last chunk bitpos bytes
39483
- var final = st.f || 0, pos = st.p || 0, bt = st.b || 0, lm = st.l, dm = st.d, lbt = st.m, dbt = st.n;
39484
- // total bits
39485
- var tbts = sl * 8;
39486
- do {
39487
- if (!lm) {
39488
- // BFINAL - this is only 1 when last chunk is next
39489
- final = bits(dat, pos, 1);
39490
- // type: 0 = no compression, 1 = fixed huffman, 2 = dynamic huffman
39491
- var type = bits(dat, pos + 1, 3);
39492
- pos += 3;
39493
- if (!type) {
39494
- // go to end of byte boundary
39495
- var s = shft(pos) + 4, l = dat[s - 4] | (dat[s - 3] << 8), t = s + l;
39496
- if (t > sl) {
39497
- if (noSt)
39498
- err(0);
39499
- break;
39500
- }
39501
- // ensure size
39502
- if (resize)
39503
- cbuf(bt + l);
39504
- // Copy over uncompressed data
39505
- buf.set(dat.subarray(s, t), bt);
39506
- // Get new bitpos, update byte count
39507
- st.b = bt += l, st.p = pos = t * 8, st.f = final;
39508
- continue;
39509
- }
39510
- else if (type == 1)
39511
- lm = flrm, dm = fdrm, lbt = 9, dbt = 5;
39512
- else if (type == 2) {
39513
- // literal lengths
39514
- var hLit = bits(dat, pos, 31) + 257, hcLen = bits(dat, pos + 10, 15) + 4;
39515
- var tl = hLit + bits(dat, pos + 5, 31) + 1;
39516
- pos += 14;
39517
- // length+distance tree
39518
- var ldt = new u8(tl);
39519
- // code length tree
39520
- var clt = new u8(19);
39521
- for (var i = 0; i < hcLen; ++i) {
39522
- // use index map to get real code
39523
- clt[clim[i]] = bits(dat, pos + i * 3, 7);
39524
- }
39525
- pos += hcLen * 3;
39526
- // code lengths bits
39527
- var clb = max(clt), clbmsk = (1 << clb) - 1;
39528
- // code lengths map
39529
- var clm = hMap(clt, clb, 1);
39530
- for (var i = 0; i < tl;) {
39531
- var r = clm[bits(dat, pos, clbmsk)];
39532
- // bits read
39533
- pos += r & 15;
39534
- // symbol
39535
- var s = r >> 4;
39536
- // code length to copy
39537
- if (s < 16) {
39538
- ldt[i++] = s;
39539
- }
39540
- else {
39541
- // copy count
39542
- var c = 0, n = 0;
39543
- if (s == 16)
39544
- n = 3 + bits(dat, pos, 3), pos += 2, c = ldt[i - 1];
39545
- else if (s == 17)
39546
- n = 3 + bits(dat, pos, 7), pos += 3;
39547
- else if (s == 18)
39548
- n = 11 + bits(dat, pos, 127), pos += 7;
39549
- while (n--)
39550
- ldt[i++] = c;
39551
- }
39552
- }
39553
- // length tree distance tree
39554
- var lt = ldt.subarray(0, hLit), dt = ldt.subarray(hLit);
39555
- // max length bits
39556
- lbt = max(lt);
39557
- // max dist bits
39558
- dbt = max(dt);
39559
- lm = hMap(lt, lbt, 1);
39560
- dm = hMap(dt, dbt, 1);
39561
- }
39562
- else
39563
- err(1);
39564
- if (pos > tbts) {
39565
- if (noSt)
39566
- err(0);
39567
- break;
39568
- }
39569
- }
39570
- // Make sure the buffer can hold this + the largest possible addition
39571
- // Maximum chunk size (practically, theoretically infinite) is 2^17
39572
- if (resize)
39573
- cbuf(bt + 131072);
39574
- var lms = (1 << lbt) - 1, dms = (1 << dbt) - 1;
39575
- var lpos = pos;
39576
- for (;; lpos = pos) {
39577
- // bits read, code
39578
- var c = lm[bits16(dat, pos) & lms], sym = c >> 4;
39579
- pos += c & 15;
39580
- if (pos > tbts) {
39581
- if (noSt)
39582
- err(0);
39583
- break;
39584
- }
39585
- if (!c)
39586
- err(2);
39587
- if (sym < 256)
39588
- buf[bt++] = sym;
39589
- else if (sym == 256) {
39590
- lpos = pos, lm = null;
39591
- break;
39592
- }
39593
- else {
39594
- var add = sym - 254;
39595
- // no extra bits needed if less
39596
- if (sym > 264) {
39597
- // index
39598
- var i = sym - 257, b = fleb[i];
39599
- add = bits(dat, pos, (1 << b) - 1) + fl[i];
39600
- pos += b;
39601
- }
39602
- // dist
39603
- var d = dm[bits16(dat, pos) & dms], dsym = d >> 4;
39604
- if (!d)
39605
- err(3);
39606
- pos += d & 15;
39607
- var dt = fd[dsym];
39608
- if (dsym > 3) {
39609
- var b = fdeb[dsym];
39610
- dt += bits16(dat, pos) & (1 << b) - 1, pos += b;
39611
- }
39612
- if (pos > tbts) {
39613
- if (noSt)
39614
- err(0);
39615
- break;
39616
- }
39617
- if (resize)
39618
- cbuf(bt + 131072);
39619
- var end = bt + add;
39620
- if (bt < dt) {
39621
- var shift = dl - dt, dend = Math.min(dt, end);
39622
- if (shift + bt < 0)
39623
- err(3);
39624
- for (; bt < dend; ++bt)
39625
- buf[bt] = dict[shift + bt];
39626
- }
39627
- for (; bt < end; ++bt)
39628
- buf[bt] = buf[bt - dt];
39629
- }
39630
- }
39631
- st.l = lm, st.p = lpos, st.b = bt, st.f = final;
39632
- if (lm)
39633
- final = 1, st.m = lbt, st.d = dm, st.n = dbt;
39634
- } while (!final);
39635
- // don't reallocate for streams or user buffers
39636
- return bt != buf.length && noBuf ? slc(buf, 0, bt) : buf.subarray(0, bt);
39637
- };
39638
- // empty
39639
- var et = /*#__PURE__*/ new u8(0);
39640
- // read 2 bytes
39641
- var b2 = function (d, b) { return d[b] | (d[b + 1] << 8); };
39642
- // read 4 bytes
39643
- var b4 = function (d, b) { return (d[b] | (d[b + 1] << 8) | (d[b + 2] << 16) | (d[b + 3] << 24)) >>> 0; };
39644
- var b8 = function (d, b) { return b4(d, b) + (b4(d, b + 4) * 4294967296); };
39645
- /**
39646
- * Expands DEFLATE data with no wrapper
39647
- * @param data The data to decompress
39648
- * @param opts The decompression options
39649
- * @returns The decompressed version of the data
39650
- */
39651
- function inflateSync(data, opts) {
39652
- return inflt(data, { i: 2 }, opts && opts.out, opts && opts.dictionary);
39653
- }
39654
- // text decoder
39655
- var td = typeof TextDecoder != 'undefined' && /*#__PURE__*/ new TextDecoder();
39656
- // text decoder stream
39657
- var tds = 0;
39658
- try {
39659
- td.decode(et, { stream: true });
39660
- tds = 1;
39661
- }
39662
- catch (e) { }
39663
- // decode UTF8
39664
- var dutf8 = function (d) {
39665
- for (var r = '', i = 0;;) {
39666
- var c = d[i++];
39667
- var eb = (c > 127) + (c > 223) + (c > 239);
39668
- if (i + eb > d.length)
39669
- return { s: r, r: slc(d, i - 1) };
39670
- if (!eb)
39671
- r += String.fromCharCode(c);
39672
- else if (eb == 3) {
39673
- c = ((c & 15) << 18 | (d[i++] & 63) << 12 | (d[i++] & 63) << 6 | (d[i++] & 63)) - 65536,
39674
- r += String.fromCharCode(55296 | (c >> 10), 56320 | (c & 1023));
39675
- }
39676
- else if (eb & 1)
39677
- r += String.fromCharCode((c & 31) << 6 | (d[i++] & 63));
39678
- else
39679
- r += String.fromCharCode((c & 15) << 12 | (d[i++] & 63) << 6 | (d[i++] & 63));
39680
- }
39681
- };
39682
- /**
39683
- * Converts a Uint8Array to a string
39684
- * @param dat The data to decode to string
39685
- * @param latin1 Whether or not to interpret the data as Latin-1. This should
39686
- * not need to be true unless encoding to binary string.
39687
- * @returns The original UTF-8/Latin-1 string
39688
- */
39689
- function strFromU8(dat, latin1) {
39690
- if (latin1) {
39691
- var r = '';
39692
- for (var i = 0; i < dat.length; i += 16384)
39693
- r += String.fromCharCode.apply(null, dat.subarray(i, i + 16384));
39694
- return r;
39695
- }
39696
- else if (td) {
39697
- return td.decode(dat);
39698
- }
39699
- else {
39700
- var _a = dutf8(dat), s = _a.s, r = _a.r;
39701
- if (r.length)
39702
- err(8);
39703
- return s;
39704
- }
39705
- }
39706
- // skip local zip header
39707
- var slzh = function (d, b) { return b + 30 + b2(d, b + 26) + b2(d, b + 28); };
39708
- // read zip header
39709
- var zh = function (d, b, z) {
39710
- var fnl = b2(d, b + 28), fn = strFromU8(d.subarray(b + 46, b + 46 + fnl), !(b2(d, b + 8) & 2048)), es = b + 46 + fnl, bs = b4(d, b + 20);
39711
- var _a = z && bs == 4294967295 ? z64e(d, es) : [bs, b4(d, b + 24), b4(d, b + 42)], sc = _a[0], su = _a[1], off = _a[2];
39712
- return [b2(d, b + 10), sc, su, fn, es + b2(d, b + 30) + b2(d, b + 32), off];
39713
- };
39714
- // read zip64 extra field
39715
- var z64e = function (d, b) {
39716
- for (; b2(d, b) != 1; b += 4 + b2(d, b + 2))
39717
- ;
39718
- return [b8(d, b + 12), b8(d, b + 4), b8(d, b + 20)];
39719
- };
39720
- /**
39721
- * Synchronously decompresses a ZIP archive. Prefer using `unzip` for better
39722
- * performance with more than one file.
39723
- * @param data The raw compressed ZIP file
39724
- * @param opts The ZIP extraction options
39725
- * @returns The decompressed files
39726
- */
39727
- function unzipSync(data, opts) {
39728
- var files = {};
39729
- var e = data.length - 22;
39730
- for (; b4(data, e) != 0x6054B50; --e) {
39731
- if (!e || data.length - e > 65558)
39732
- err(13);
39733
- }
39734
- var c = b2(data, e + 8);
39735
- if (!c)
39736
- return {};
39737
- var o = b4(data, e + 16);
39738
- var z = o == 4294967295 || c == 65535;
39739
- if (z) {
39740
- var ze = b4(data, e - 12);
39741
- z = b4(data, ze) == 0x6064B50;
39742
- if (z) {
39743
- c = b4(data, ze + 32);
39744
- o = b4(data, ze + 48);
39745
- }
39746
- }
39747
- for (var i = 0; i < c; ++i) {
39748
- var _a = zh(data, o, z), c_2 = _a[0], sc = _a[1], su = _a[2], fn = _a[3], no = _a[4], off = _a[5], b = slzh(data, off);
39749
- o = no;
39750
- {
39751
- if (!c_2)
39752
- files[fn] = slc(data, b, b + sc);
39753
- else if (c_2 == 8)
39754
- files[fn] = inflateSync(data.subarray(b, b + sc), { out: new u8(su) });
39755
- else
39756
- err(14, 'unknown compression type ' + c_2);
39757
- }
39758
- }
39759
- return files;
39301
+ // DEFLATE is a complex format; to read this code, you should probably check the RFC first:
39302
+ // https://tools.ietf.org/html/rfc1951
39303
+ // You may also wish to take a look at the guide I made about this program:
39304
+ // https://gist.github.com/101arrowz/253f31eb5abc3d9275ab943003ffecad
39305
+ // Some of the following code is similar to that of UZIP.js:
39306
+ // https://github.com/photopea/UZIP.js
39307
+ // However, the vast majority of the codebase has diverged from UZIP.js to increase performance and reduce bundle size.
39308
+ // Sometimes 0 will appear where -1 would be more appropriate. This is because using a uint
39309
+ // is better for memory in most engines (I *think*).
39310
+
39311
+ // aliases for shorter compressed code (most minifers don't do this)
39312
+ var u8 = Uint8Array, u16 = Uint16Array, i32 = Int32Array;
39313
+ // fixed length extra bits
39314
+ var fleb = new u8([0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 2, 2, 2, 2, 3, 3, 3, 3, 4, 4, 4, 4, 5, 5, 5, 5, 0, /* unused */ 0, 0, /* impossible */ 0]);
39315
+ // fixed distance extra bits
39316
+ var fdeb = new u8([0, 0, 0, 0, 1, 1, 2, 2, 3, 3, 4, 4, 5, 5, 6, 6, 7, 7, 8, 8, 9, 9, 10, 10, 11, 11, 12, 12, 13, 13, /* unused */ 0, 0]);
39317
+ // code length index map
39318
+ var clim = new u8([16, 17, 18, 0, 8, 7, 9, 6, 10, 5, 11, 4, 12, 3, 13, 2, 14, 1, 15]);
39319
+ // get base, reverse index map from extra bits
39320
+ var freb = function (eb, start) {
39321
+ var b = new u16(31);
39322
+ for (var i = 0; i < 31; ++i) {
39323
+ b[i] = start += 1 << eb[i - 1];
39324
+ }
39325
+ // numbers here are at max 18 bits
39326
+ var r = new i32(b[30]);
39327
+ for (var i = 1; i < 30; ++i) {
39328
+ for (var j = b[i]; j < b[i + 1]; ++j) {
39329
+ r[j] = ((j - b[i]) << 5) | i;
39330
+ }
39331
+ }
39332
+ return { b: b, r: r };
39333
+ };
39334
+ var _a = freb(fleb, 2), fl = _a.b, revfl = _a.r;
39335
+ // we can ignore the fact that the other numbers are wrong; they never happen anyway
39336
+ fl[28] = 258, revfl[258] = 28;
39337
+ var _b = freb(fdeb, 0), fd = _b.b;
39338
+ // map of value to reverse (assuming 16 bits)
39339
+ var rev = new u16(32768);
39340
+ for (var i = 0; i < 32768; ++i) {
39341
+ // reverse table algorithm from SO
39342
+ var x = ((i & 0xAAAA) >> 1) | ((i & 0x5555) << 1);
39343
+ x = ((x & 0xCCCC) >> 2) | ((x & 0x3333) << 2);
39344
+ x = ((x & 0xF0F0) >> 4) | ((x & 0x0F0F) << 4);
39345
+ rev[i] = (((x & 0xFF00) >> 8) | ((x & 0x00FF) << 8)) >> 1;
39346
+ }
39347
+ // create huffman tree from u8 "map": index -> code length for code index
39348
+ // mb (max bits) must be at most 15
39349
+ // TODO: optimize/split up?
39350
+ var hMap = (function (cd, mb, r) {
39351
+ var s = cd.length;
39352
+ // index
39353
+ var i = 0;
39354
+ // u16 "map": index -> # of codes with bit length = index
39355
+ var l = new u16(mb);
39356
+ // length of cd must be 288 (total # of codes)
39357
+ for (; i < s; ++i) {
39358
+ if (cd[i])
39359
+ ++l[cd[i] - 1];
39360
+ }
39361
+ // u16 "map": index -> minimum code for bit length = index
39362
+ var le = new u16(mb);
39363
+ for (i = 1; i < mb; ++i) {
39364
+ le[i] = (le[i - 1] + l[i - 1]) << 1;
39365
+ }
39366
+ var co;
39367
+ if (r) {
39368
+ // u16 "map": index -> number of actual bits, symbol for code
39369
+ co = new u16(1 << mb);
39370
+ // bits to remove for reverser
39371
+ var rvb = 15 - mb;
39372
+ for (i = 0; i < s; ++i) {
39373
+ // ignore 0 lengths
39374
+ if (cd[i]) {
39375
+ // num encoding both symbol and bits read
39376
+ var sv = (i << 4) | cd[i];
39377
+ // free bits
39378
+ var r_1 = mb - cd[i];
39379
+ // start value
39380
+ var v = le[cd[i] - 1]++ << r_1;
39381
+ // m is end value
39382
+ for (var m = v | ((1 << r_1) - 1); v <= m; ++v) {
39383
+ // every 16 bit value starting with the code yields the same result
39384
+ co[rev[v] >> rvb] = sv;
39385
+ }
39386
+ }
39387
+ }
39388
+ }
39389
+ else {
39390
+ co = new u16(s);
39391
+ for (i = 0; i < s; ++i) {
39392
+ if (cd[i]) {
39393
+ co[i] = rev[le[cd[i] - 1]++] >> (15 - cd[i]);
39394
+ }
39395
+ }
39396
+ }
39397
+ return co;
39398
+ });
39399
+ // fixed length tree
39400
+ var flt = new u8(288);
39401
+ for (var i = 0; i < 144; ++i)
39402
+ flt[i] = 8;
39403
+ for (var i = 144; i < 256; ++i)
39404
+ flt[i] = 9;
39405
+ for (var i = 256; i < 280; ++i)
39406
+ flt[i] = 7;
39407
+ for (var i = 280; i < 288; ++i)
39408
+ flt[i] = 8;
39409
+ // fixed distance tree
39410
+ var fdt = new u8(32);
39411
+ for (var i = 0; i < 32; ++i)
39412
+ fdt[i] = 5;
39413
+ // fixed length map
39414
+ var flrm = /*#__PURE__*/ hMap(flt, 9, 1);
39415
+ // fixed distance map
39416
+ var fdrm = /*#__PURE__*/ hMap(fdt, 5, 1);
39417
+ // find max of array
39418
+ var max = function (a) {
39419
+ var m = a[0];
39420
+ for (var i = 1; i < a.length; ++i) {
39421
+ if (a[i] > m)
39422
+ m = a[i];
39423
+ }
39424
+ return m;
39425
+ };
39426
+ // read d, starting at bit p and mask with m
39427
+ var bits = function (d, p, m) {
39428
+ var o = (p / 8) | 0;
39429
+ return ((d[o] | (d[o + 1] << 8)) >> (p & 7)) & m;
39430
+ };
39431
+ // read d, starting at bit p continuing for at least 16 bits
39432
+ var bits16 = function (d, p) {
39433
+ var o = (p / 8) | 0;
39434
+ return ((d[o] | (d[o + 1] << 8) | (d[o + 2] << 16)) >> (p & 7));
39435
+ };
39436
+ // get end of byte
39437
+ var shft = function (p) { return ((p + 7) / 8) | 0; };
39438
+ // typed array slice - allows garbage collector to free original reference,
39439
+ // while being more compatible than .slice
39440
+ var slc = function (v, s, e) {
39441
+ if (s == null || s < 0)
39442
+ s = 0;
39443
+ if (e == null || e > v.length)
39444
+ e = v.length;
39445
+ // can't use .constructor in case user-supplied
39446
+ return new u8(v.subarray(s, e));
39447
+ };
39448
+ // error codes
39449
+ var ec = [
39450
+ 'unexpected EOF',
39451
+ 'invalid block type',
39452
+ 'invalid length/literal',
39453
+ 'invalid distance',
39454
+ 'stream finished',
39455
+ 'no stream handler',
39456
+ ,
39457
+ 'no callback',
39458
+ 'invalid UTF-8 data',
39459
+ 'extra field too long',
39460
+ 'date not in range 1980-2099',
39461
+ 'filename too long',
39462
+ 'stream finishing',
39463
+ 'invalid zip data'
39464
+ // determined by unknown compression method
39465
+ ];
39466
+ var err = function (ind, msg, nt) {
39467
+ var e = new Error(msg || ec[ind]);
39468
+ e.code = ind;
39469
+ if (Error.captureStackTrace)
39470
+ Error.captureStackTrace(e, err);
39471
+ if (!nt)
39472
+ throw e;
39473
+ return e;
39474
+ };
39475
+ // expands raw DEFLATE data
39476
+ var inflt = function (dat, st, buf, dict) {
39477
+ // source length dict length
39478
+ var sl = dat.length, dl = dict ? dict.length : 0;
39479
+ if (!sl || st.f && !st.l)
39480
+ return buf || new u8(0);
39481
+ var noBuf = !buf;
39482
+ // have to estimate size
39483
+ var resize = noBuf || st.i != 2;
39484
+ // no state
39485
+ var noSt = st.i;
39486
+ // Assumes roughly 33% compression ratio average
39487
+ if (noBuf)
39488
+ buf = new u8(sl * 3);
39489
+ // ensure buffer can fit at least l elements
39490
+ var cbuf = function (l) {
39491
+ var bl = buf.length;
39492
+ // need to increase size to fit
39493
+ if (l > bl) {
39494
+ // Double or set to necessary, whichever is greater
39495
+ var nbuf = new u8(Math.max(bl * 2, l));
39496
+ nbuf.set(buf);
39497
+ buf = nbuf;
39498
+ }
39499
+ };
39500
+ // last chunk bitpos bytes
39501
+ var final = st.f || 0, pos = st.p || 0, bt = st.b || 0, lm = st.l, dm = st.d, lbt = st.m, dbt = st.n;
39502
+ // total bits
39503
+ var tbts = sl * 8;
39504
+ do {
39505
+ if (!lm) {
39506
+ // BFINAL - this is only 1 when last chunk is next
39507
+ final = bits(dat, pos, 1);
39508
+ // type: 0 = no compression, 1 = fixed huffman, 2 = dynamic huffman
39509
+ var type = bits(dat, pos + 1, 3);
39510
+ pos += 3;
39511
+ if (!type) {
39512
+ // go to end of byte boundary
39513
+ var s = shft(pos) + 4, l = dat[s - 4] | (dat[s - 3] << 8), t = s + l;
39514
+ if (t > sl) {
39515
+ if (noSt)
39516
+ err(0);
39517
+ break;
39518
+ }
39519
+ // ensure size
39520
+ if (resize)
39521
+ cbuf(bt + l);
39522
+ // Copy over uncompressed data
39523
+ buf.set(dat.subarray(s, t), bt);
39524
+ // Get new bitpos, update byte count
39525
+ st.b = bt += l, st.p = pos = t * 8, st.f = final;
39526
+ continue;
39527
+ }
39528
+ else if (type == 1)
39529
+ lm = flrm, dm = fdrm, lbt = 9, dbt = 5;
39530
+ else if (type == 2) {
39531
+ // literal lengths
39532
+ var hLit = bits(dat, pos, 31) + 257, hcLen = bits(dat, pos + 10, 15) + 4;
39533
+ var tl = hLit + bits(dat, pos + 5, 31) + 1;
39534
+ pos += 14;
39535
+ // length+distance tree
39536
+ var ldt = new u8(tl);
39537
+ // code length tree
39538
+ var clt = new u8(19);
39539
+ for (var i = 0; i < hcLen; ++i) {
39540
+ // use index map to get real code
39541
+ clt[clim[i]] = bits(dat, pos + i * 3, 7);
39542
+ }
39543
+ pos += hcLen * 3;
39544
+ // code lengths bits
39545
+ var clb = max(clt), clbmsk = (1 << clb) - 1;
39546
+ // code lengths map
39547
+ var clm = hMap(clt, clb, 1);
39548
+ for (var i = 0; i < tl;) {
39549
+ var r = clm[bits(dat, pos, clbmsk)];
39550
+ // bits read
39551
+ pos += r & 15;
39552
+ // symbol
39553
+ var s = r >> 4;
39554
+ // code length to copy
39555
+ if (s < 16) {
39556
+ ldt[i++] = s;
39557
+ }
39558
+ else {
39559
+ // copy count
39560
+ var c = 0, n = 0;
39561
+ if (s == 16)
39562
+ n = 3 + bits(dat, pos, 3), pos += 2, c = ldt[i - 1];
39563
+ else if (s == 17)
39564
+ n = 3 + bits(dat, pos, 7), pos += 3;
39565
+ else if (s == 18)
39566
+ n = 11 + bits(dat, pos, 127), pos += 7;
39567
+ while (n--)
39568
+ ldt[i++] = c;
39569
+ }
39570
+ }
39571
+ // length tree distance tree
39572
+ var lt = ldt.subarray(0, hLit), dt = ldt.subarray(hLit);
39573
+ // max length bits
39574
+ lbt = max(lt);
39575
+ // max dist bits
39576
+ dbt = max(dt);
39577
+ lm = hMap(lt, lbt, 1);
39578
+ dm = hMap(dt, dbt, 1);
39579
+ }
39580
+ else
39581
+ err(1);
39582
+ if (pos > tbts) {
39583
+ if (noSt)
39584
+ err(0);
39585
+ break;
39586
+ }
39587
+ }
39588
+ // Make sure the buffer can hold this + the largest possible addition
39589
+ // Maximum chunk size (practically, theoretically infinite) is 2^17
39590
+ if (resize)
39591
+ cbuf(bt + 131072);
39592
+ var lms = (1 << lbt) - 1, dms = (1 << dbt) - 1;
39593
+ var lpos = pos;
39594
+ for (;; lpos = pos) {
39595
+ // bits read, code
39596
+ var c = lm[bits16(dat, pos) & lms], sym = c >> 4;
39597
+ pos += c & 15;
39598
+ if (pos > tbts) {
39599
+ if (noSt)
39600
+ err(0);
39601
+ break;
39602
+ }
39603
+ if (!c)
39604
+ err(2);
39605
+ if (sym < 256)
39606
+ buf[bt++] = sym;
39607
+ else if (sym == 256) {
39608
+ lpos = pos, lm = null;
39609
+ break;
39610
+ }
39611
+ else {
39612
+ var add = sym - 254;
39613
+ // no extra bits needed if less
39614
+ if (sym > 264) {
39615
+ // index
39616
+ var i = sym - 257, b = fleb[i];
39617
+ add = bits(dat, pos, (1 << b) - 1) + fl[i];
39618
+ pos += b;
39619
+ }
39620
+ // dist
39621
+ var d = dm[bits16(dat, pos) & dms], dsym = d >> 4;
39622
+ if (!d)
39623
+ err(3);
39624
+ pos += d & 15;
39625
+ var dt = fd[dsym];
39626
+ if (dsym > 3) {
39627
+ var b = fdeb[dsym];
39628
+ dt += bits16(dat, pos) & (1 << b) - 1, pos += b;
39629
+ }
39630
+ if (pos > tbts) {
39631
+ if (noSt)
39632
+ err(0);
39633
+ break;
39634
+ }
39635
+ if (resize)
39636
+ cbuf(bt + 131072);
39637
+ var end = bt + add;
39638
+ if (bt < dt) {
39639
+ var shift = dl - dt, dend = Math.min(dt, end);
39640
+ if (shift + bt < 0)
39641
+ err(3);
39642
+ for (; bt < dend; ++bt)
39643
+ buf[bt] = dict[shift + bt];
39644
+ }
39645
+ for (; bt < end; ++bt)
39646
+ buf[bt] = buf[bt - dt];
39647
+ }
39648
+ }
39649
+ st.l = lm, st.p = lpos, st.b = bt, st.f = final;
39650
+ if (lm)
39651
+ final = 1, st.m = lbt, st.d = dm, st.n = dbt;
39652
+ } while (!final);
39653
+ // don't reallocate for streams or user buffers
39654
+ return bt != buf.length && noBuf ? slc(buf, 0, bt) : buf.subarray(0, bt);
39655
+ };
39656
+ // empty
39657
+ var et = /*#__PURE__*/ new u8(0);
39658
+ // read 2 bytes
39659
+ var b2 = function (d, b) { return d[b] | (d[b + 1] << 8); };
39660
+ // read 4 bytes
39661
+ var b4 = function (d, b) { return (d[b] | (d[b + 1] << 8) | (d[b + 2] << 16) | (d[b + 3] << 24)) >>> 0; };
39662
+ var b8 = function (d, b) { return b4(d, b) + (b4(d, b + 4) * 4294967296); };
39663
+ /**
39664
+ * Expands DEFLATE data with no wrapper
39665
+ * @param data The data to decompress
39666
+ * @param opts The decompression options
39667
+ * @returns The decompressed version of the data
39668
+ */
39669
+ function inflateSync(data, opts) {
39670
+ return inflt(data, { i: 2 }, opts && opts.out, opts && opts.dictionary);
39671
+ }
39672
+ // text decoder
39673
+ var td = typeof TextDecoder != 'undefined' && /*#__PURE__*/ new TextDecoder();
39674
+ // text decoder stream
39675
+ var tds = 0;
39676
+ try {
39677
+ td.decode(et, { stream: true });
39678
+ tds = 1;
39679
+ }
39680
+ catch (e) { }
39681
+ // decode UTF8
39682
+ var dutf8 = function (d) {
39683
+ for (var r = '', i = 0;;) {
39684
+ var c = d[i++];
39685
+ var eb = (c > 127) + (c > 223) + (c > 239);
39686
+ if (i + eb > d.length)
39687
+ return { s: r, r: slc(d, i - 1) };
39688
+ if (!eb)
39689
+ r += String.fromCharCode(c);
39690
+ else if (eb == 3) {
39691
+ c = ((c & 15) << 18 | (d[i++] & 63) << 12 | (d[i++] & 63) << 6 | (d[i++] & 63)) - 65536,
39692
+ r += String.fromCharCode(55296 | (c >> 10), 56320 | (c & 1023));
39693
+ }
39694
+ else if (eb & 1)
39695
+ r += String.fromCharCode((c & 31) << 6 | (d[i++] & 63));
39696
+ else
39697
+ r += String.fromCharCode((c & 15) << 12 | (d[i++] & 63) << 6 | (d[i++] & 63));
39698
+ }
39699
+ };
39700
+ /**
39701
+ * Converts a Uint8Array to a string
39702
+ * @param dat The data to decode to string
39703
+ * @param latin1 Whether or not to interpret the data as Latin-1. This should
39704
+ * not need to be true unless encoding to binary string.
39705
+ * @returns The original UTF-8/Latin-1 string
39706
+ */
39707
+ function strFromU8(dat, latin1) {
39708
+ if (latin1) {
39709
+ var r = '';
39710
+ for (var i = 0; i < dat.length; i += 16384)
39711
+ r += String.fromCharCode.apply(null, dat.subarray(i, i + 16384));
39712
+ return r;
39713
+ }
39714
+ else if (td) {
39715
+ return td.decode(dat);
39716
+ }
39717
+ else {
39718
+ var _a = dutf8(dat), s = _a.s, r = _a.r;
39719
+ if (r.length)
39720
+ err(8);
39721
+ return s;
39722
+ }
39723
+ }
39724
+ // skip local zip header
39725
+ var slzh = function (d, b) { return b + 30 + b2(d, b + 26) + b2(d, b + 28); };
39726
+ // read zip header
39727
+ var zh = function (d, b, z) {
39728
+ var fnl = b2(d, b + 28), fn = strFromU8(d.subarray(b + 46, b + 46 + fnl), !(b2(d, b + 8) & 2048)), es = b + 46 + fnl, bs = b4(d, b + 20);
39729
+ var _a = z && bs == 4294967295 ? z64e(d, es) : [bs, b4(d, b + 24), b4(d, b + 42)], sc = _a[0], su = _a[1], off = _a[2];
39730
+ return [b2(d, b + 10), sc, su, fn, es + b2(d, b + 30) + b2(d, b + 32), off];
39731
+ };
39732
+ // read zip64 extra field
39733
+ var z64e = function (d, b) {
39734
+ for (; b2(d, b) != 1; b += 4 + b2(d, b + 2))
39735
+ ;
39736
+ return [b8(d, b + 12), b8(d, b + 4), b8(d, b + 20)];
39737
+ };
39738
+ /**
39739
+ * Synchronously decompresses a ZIP archive. Prefer using `unzip` for better
39740
+ * performance with more than one file.
39741
+ * @param data The raw compressed ZIP file
39742
+ * @param opts The ZIP extraction options
39743
+ * @returns The decompressed files
39744
+ */
39745
+ function unzipSync(data, opts) {
39746
+ var files = {};
39747
+ var e = data.length - 22;
39748
+ for (; b4(data, e) != 0x6054B50; --e) {
39749
+ if (!e || data.length - e > 65558)
39750
+ err(13);
39751
+ }
39752
+ var c = b2(data, e + 8);
39753
+ if (!c)
39754
+ return {};
39755
+ var o = b4(data, e + 16);
39756
+ var z = o == 4294967295 || c == 65535;
39757
+ if (z) {
39758
+ var ze = b4(data, e - 12);
39759
+ z = b4(data, ze) == 0x6064B50;
39760
+ if (z) {
39761
+ c = b4(data, ze + 32);
39762
+ o = b4(data, ze + 48);
39763
+ }
39764
+ }
39765
+ for (var i = 0; i < c; ++i) {
39766
+ var _a = zh(data, o, z), c_2 = _a[0], sc = _a[1], su = _a[2], fn = _a[3], no = _a[4], off = _a[5], b = slzh(data, off);
39767
+ o = no;
39768
+ {
39769
+ if (!c_2)
39770
+ files[fn] = slc(data, b, b + sc);
39771
+ else if (c_2 == 8)
39772
+ files[fn] = inflateSync(data.subarray(b, b + sc), { out: new u8(su) });
39773
+ else
39774
+ err(14, 'unknown compression type ' + c_2);
39775
+ }
39776
+ }
39777
+ return files;
39760
39778
  }
39761
39779
 
39762
39780
  class UnLitMaterial extends Material {
@@ -40527,7 +40545,7 @@ class PostProcessingComponent extends ComponentBase {
40527
40545
  }
40528
40546
  }
40529
40547
 
40530
- const version = "1.0.10";
40548
+ const version = "1.0.11";
40531
40549
 
40532
40550
  class Engine3D {
40533
40551
  /**