ol 9.0.0-dev.1708383113293 → 9.0.0-dev.1708527052824
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/dist/ol.js +2 -2
- package/dist/ol.js.map +1 -1
- package/package.json +1 -1
- package/renderer/canvas/ImageLayer.d.ts.map +1 -1
- package/renderer/canvas/ImageLayer.js +5 -6
- package/renderer/canvas/Layer.d.ts +10 -0
- package/renderer/canvas/Layer.d.ts.map +1 -1
- package/renderer/canvas/Layer.js +24 -0
- package/renderer/canvas/TileLayer.d.ts +0 -5
- package/renderer/canvas/TileLayer.d.ts.map +1 -1
- package/renderer/canvas/TileLayer.js +3 -25
- package/renderer/canvas/VectorTileLayer.d.ts.map +1 -1
- package/renderer/canvas/VectorTileLayer.js +0 -1
- package/util.js +1 -1
package/package.json
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ImageLayer.d.ts","sourceRoot":"","sources":["ImageLayer.js"],"names":[],"mappings":";AAuBA;;;;GAIG;AACH;IACE;;OAEG;IACH,qEAQC;IALC;;;OAGG;IACH,kBAFW,OAAO,gBAAgB,EAAE,OAAO,QAEzB;IAGpB;;OAEG;IACH,YAFY,OAAO,mBAAmB,EAAE,SAAS,CAIhD;IAqDD;;;OAGG;IACH,eAHW,OAAO,gBAAgB,EAAE,KAAK,GAC7B,iBAAiB,CAyC5B;IAED;;;;;OAKG;IACH,wBAJW,OAAO,cAAc,EAAE,UAAU,UACjC,WAAW,GACV,WAAW,
|
|
1
|
+
{"version":3,"file":"ImageLayer.d.ts","sourceRoot":"","sources":["ImageLayer.js"],"names":[],"mappings":";AAuBA;;;;GAIG;AACH;IACE;;OAEG;IACH,qEAQC;IALC;;;OAGG;IACH,kBAFW,OAAO,gBAAgB,EAAE,OAAO,QAEzB;IAGpB;;OAEG;IACH,YAFY,OAAO,mBAAmB,EAAE,SAAS,CAIhD;IAqDD;;;OAGG;IACH,eAHW,OAAO,gBAAgB,EAAE,KAAK,GAC7B,iBAAiB,CAyC5B;IAED;;;;;OAKG;IACH,wBAJW,OAAO,cAAc,EAAE,UAAU,UACjC,WAAW,GACV,WAAW,CAqHtB;CACF;gCAxQ+B,YAAY"}
|
|
@@ -191,8 +191,8 @@ class CanvasImageLayerRenderer extends CanvasLayerRenderer {
|
|
|
191
191
|
|
|
192
192
|
this.useContainer(target, canvasTransform, this.getBackground(frameState));
|
|
193
193
|
|
|
194
|
-
const context = this.
|
|
195
|
-
const canvas = context.canvas;
|
|
194
|
+
const context = this.getRenderContext(frameState);
|
|
195
|
+
const canvas = this.context.canvas;
|
|
196
196
|
|
|
197
197
|
if (canvas.width != width || canvas.height != height) {
|
|
198
198
|
canvas.width = width;
|
|
@@ -243,17 +243,16 @@ class CanvasImageLayerRenderer extends CanvasLayerRenderer {
|
|
|
243
243
|
const dx = transform[4];
|
|
244
244
|
const dy = transform[5];
|
|
245
245
|
const opacity = layerState.opacity;
|
|
246
|
-
let previousAlpha;
|
|
247
246
|
if (opacity !== 1) {
|
|
248
|
-
|
|
247
|
+
context.save();
|
|
249
248
|
context.globalAlpha = opacity;
|
|
250
249
|
}
|
|
251
250
|
context.drawImage(img, 0, 0, +img.width, +img.height, dx, dy, dw, dh);
|
|
252
251
|
if (opacity !== 1) {
|
|
253
|
-
context.
|
|
252
|
+
context.restore();
|
|
254
253
|
}
|
|
255
254
|
}
|
|
256
|
-
this.postRender(context, frameState);
|
|
255
|
+
this.postRender(this.context, frameState);
|
|
257
256
|
|
|
258
257
|
if (clipped) {
|
|
259
258
|
context.restore();
|
|
@@ -44,6 +44,11 @@ declare class CanvasLayerRenderer<LayerType extends import("../../layer/Layer.js
|
|
|
44
44
|
* @type {CanvasRenderingContext2D}
|
|
45
45
|
*/
|
|
46
46
|
context: CanvasRenderingContext2D;
|
|
47
|
+
/**
|
|
48
|
+
* @private
|
|
49
|
+
* @type {ZIndexContext}
|
|
50
|
+
*/
|
|
51
|
+
private deferredContext_;
|
|
47
52
|
/**
|
|
48
53
|
* @type {boolean}
|
|
49
54
|
*/
|
|
@@ -107,6 +112,11 @@ declare class CanvasLayerRenderer<LayerType extends import("../../layer/Layer.js
|
|
|
107
112
|
* @param {import("../../Map.js").FrameState} frameState Frame state.
|
|
108
113
|
*/
|
|
109
114
|
renderDeferredInternal(frameState: import("../../Map.js").FrameState): void;
|
|
115
|
+
/**
|
|
116
|
+
* @param {import("../../Map.js").FrameState} frameState Frame state.
|
|
117
|
+
* @return {import('../../render/canvas/ZIndexContext.js').ZIndexContextProxy} Context.
|
|
118
|
+
*/
|
|
119
|
+
getRenderContext(frameState: import("../../Map.js").FrameState): import('../../render/canvas/ZIndexContext.js').ZIndexContextProxy;
|
|
110
120
|
/**
|
|
111
121
|
* Creates a transform for rendering to an element that will be rotated after rendering.
|
|
112
122
|
* @param {import("../../coordinate.js").Coordinate} center Center.
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"Layer.d.ts","sourceRoot":"","sources":["Layer.js"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"Layer.d.ts","sourceRoot":"","sources":["Layer.js"],"names":[],"mappings":"AAsBA;;GAEG;AACH,yBAFU,MAAM,iBAAiB,CAAC,CAEL;;AAa7B;;;;GAIG;AACH;IAOI;;;OAGG;IACH,qBAFU,WAAW,CAEA;IAErB;;;OAGG;IACH,8BAFU,MAAM,CAEO;IAEvB;;;;;OAKG;IACH,yBAFU,OAAO,oBAAoB,EAAE,SAAS,CAEV;IAEtC;;;;;OAKG;IACH,0BAFU,OAAO,oBAAoB,EAAE,SAAS,CAET;IAEvC;;;;;OAKG;IACH,iCAFU,OAAO,oBAAoB,EAAE,SAAS,CAEF;IAE9C;;OAEG;IACH,SAFU,wBAAwB,CAEf;IAEnB;;;OAGG;IACH,yBAA4B;IAE5B;;OAEG;IACH,iBAFU,OAAO,CAEW;IAE5B;;;OAGG;IACH,sBAAyB;IAEzB;;;OAGG;IACH,sBAFU,OAAO,cAAc,EAAE,UAAU,GAAC,IAAI,CAE1B;IAGxB;;;;;OAKG;IACH,oBALW,OAAO,mBAAmB,EAAE,SAAS,OACrC,MAAM,OACN,MAAM,GACL,iBAAiB,GAAC,IAAI,CAiBjC;IAED;;;OAGG;IACH,0BAHW,OAAO,cAAc,EAAE,UAAU,GAChC,MAAM,CASjB;IAED;;;;;OAKG;IACH,qBAJW,WAAW,aACX,MAAM,8CA2DhB;IAED;;;;;OAKG;IACH,iCALW,wBAAwB,cACxB,OAAO,cAAc,EAAE,UAAU,UACjC,OAAO,iBAAiB,EAAE,MAAM,QA2B1C;IAED;;;;;OAKG;IACH,6BAWC;IAED;;;;OAIG;IACH,6BAJW,wBAAwB,cACxB,OAAO,cAAc,EAAE,UAAU,QAS3C;IAED;;;;OAIG;IACH,8BAJW,wBAAwB,cACxB,OAAO,cAAc,EAAE,UAAU,QAQ3C;IAED;;OAEG;IACH,mCAFW,OAAO,cAAc,EAAE,UAAU,QAEP;IAErC;;;OAGG;IACH,6BAHW,OAAO,cAAc,EAAE,UAAU,GAChC,OAAO,sCAAsC,EAAE,kBAAkB,CAS5E;IA2BD;;;;;;;;;;;OAWG;IACH,qCAVW,OAAO,qBAAqB,EAAE,UAAU,cACxC,MAAM,YACN,MAAM,cACN,MAAM,SACN,MAAM,UACN,MAAM,WACN,MAAM,GAEJ,OAAO,oBAAoB,EAAE,SAAS,CA2BlD;CASF;0BAzXyB,aAAa"}
|
package/renderer/canvas/Layer.js
CHANGED
|
@@ -4,6 +4,7 @@
|
|
|
4
4
|
import LayerRenderer from '../Layer.js';
|
|
5
5
|
import RenderEvent from '../../render/Event.js';
|
|
6
6
|
import RenderEventType from '../../render/EventType.js';
|
|
7
|
+
import ZIndexContext from '../../render/canvas/ZIndexContext.js';
|
|
7
8
|
import {
|
|
8
9
|
apply as applyTransform,
|
|
9
10
|
compose as composeTransform,
|
|
@@ -88,6 +89,12 @@ class CanvasLayerRenderer extends LayerRenderer {
|
|
|
88
89
|
*/
|
|
89
90
|
this.context = null;
|
|
90
91
|
|
|
92
|
+
/**
|
|
93
|
+
* @private
|
|
94
|
+
* @type {ZIndexContext}
|
|
95
|
+
*/
|
|
96
|
+
this.deferredContext_ = null;
|
|
97
|
+
|
|
91
98
|
/**
|
|
92
99
|
* @type {boolean}
|
|
93
100
|
*/
|
|
@@ -287,6 +294,19 @@ class CanvasLayerRenderer extends LayerRenderer {
|
|
|
287
294
|
*/
|
|
288
295
|
renderDeferredInternal(frameState) {}
|
|
289
296
|
|
|
297
|
+
/**
|
|
298
|
+
* @param {import("../../Map.js").FrameState} frameState Frame state.
|
|
299
|
+
* @return {import('../../render/canvas/ZIndexContext.js').ZIndexContextProxy} Context.
|
|
300
|
+
*/
|
|
301
|
+
getRenderContext(frameState) {
|
|
302
|
+
if (frameState.declutter && !this.deferredContext_) {
|
|
303
|
+
this.deferredContext_ = new ZIndexContext();
|
|
304
|
+
}
|
|
305
|
+
return frameState.declutter
|
|
306
|
+
? this.deferredContext_.getContext()
|
|
307
|
+
: this.context;
|
|
308
|
+
}
|
|
309
|
+
|
|
290
310
|
/**
|
|
291
311
|
* @param {import("../../Map.js").FrameState} frameState Frame state.
|
|
292
312
|
* @override
|
|
@@ -300,6 +320,10 @@ class CanvasLayerRenderer extends LayerRenderer {
|
|
|
300
320
|
this.context,
|
|
301
321
|
frameState,
|
|
302
322
|
);
|
|
323
|
+
if (frameState.declutter && this.deferredContext_) {
|
|
324
|
+
this.deferredContext_.draw(this.context);
|
|
325
|
+
this.deferredContext_.clear();
|
|
326
|
+
}
|
|
303
327
|
this.renderDeferredInternal(frameState);
|
|
304
328
|
this.dispatchRenderEvent_(
|
|
305
329
|
RenderEventType.POSTRENDER,
|
|
@@ -56,10 +56,6 @@ declare class CanvasTileLayerRenderer<LayerType extends import("../../layer/Tile
|
|
|
56
56
|
* @type {import("../../TileRange.js").default}
|
|
57
57
|
*/
|
|
58
58
|
private tmpTileRange_;
|
|
59
|
-
/**
|
|
60
|
-
* @type {ZIndexContext}
|
|
61
|
-
*/
|
|
62
|
-
deferredContext_: ZIndexContext;
|
|
63
59
|
/**
|
|
64
60
|
* @protected
|
|
65
61
|
* @param {import("../../Tile.js").default} tile Tile.
|
|
@@ -146,5 +142,4 @@ declare class CanvasTileLayerRenderer<LayerType extends import("../../layer/Tile
|
|
|
146
142
|
protected manageTilePyramid(frameState: import("../../Map.js").FrameState, tileSource: import("../../source/Tile.js").default, tileGrid: import("../../tilegrid/TileGrid.js").default, pixelRatio: number, projection: import("../../proj/Projection.js").default, extent: import("../../extent.js").Extent, currentZ: number, preload: number, tileCallback?: ((arg0: import("../../Tile.js").default) => void) | undefined): void;
|
|
147
143
|
}
|
|
148
144
|
import CanvasLayerRenderer from './Layer.js';
|
|
149
|
-
import ZIndexContext from '../../render/canvas/ZIndexContext.js';
|
|
150
145
|
//# sourceMappingURL=TileLayer.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"TileLayer.d.ts","sourceRoot":"","sources":["TileLayer.js"],"names":[],"mappings":";
|
|
1
|
+
{"version":3,"file":"TileLayer.d.ts","sourceRoot":"","sources":["TileLayer.js"],"names":[],"mappings":";AA8BA;;;;;;GAMG;AACH;IACE;;OAEG;IACH,uBAFW,SAAS,EA0DnB;IArDC;;;OAGG;IACH,eAFU,OAAO,CAEQ;IAEzB;;;OAGG;IACH,wBAA2B;IAE3B;;;OAGG;IACH,8BAFU,MAAM,CAEO;IAEvB;;;OAGG;IACH,8BAFU,OAAO,0BAA0B,EAAE,OAAO,CAEtB;IAE9B;;;OAGG;IACH,4BAFU,MAAM,CAEK;IAErB;;;OAGG;IACH,yBAFW,MAAM,OAAO,eAAe,EAAE,OAAO,CAAC,CAE1B;IAEvB;;;OAGG;IACH,kBAAsB;IAEtB;;;OAGG;IACH,qBAFU,OAAO,iBAAiB,EAAE,MAAM,CAEZ;IAE9B;;;OAGG;IACH,sBAA8C;IAGhD;;;;OAIG;IACH,+BAHW,OAAO,eAAe,EAAE,OAAO,GAC9B,OAAO,CAWlB;IAED;;;;;;OAMG;IACH,WANW,MAAM,KACN,MAAM,KACN,MAAM,cACN,OAAO,cAAc,EAAE,UAAU,GAC/B,OAAO,eAAe,EAAE,OAAO,CAkB3C;IAED;;;OAGG;IACH,eAHW,OAAO,gBAAgB,EAAE,KAAK,GAC7B,iBAAiB,CA4E5B;IAwBD;;;;;OAKG;IACH,wBAJW,OAAO,cAAc,EAAE,UAAU,UACjC,WAAW,GACV,WAAW,CAuUtB;IAED;;;;;;;;;OASG;IACH,oBATW,OAAO,oBAAoB,EAAE,OAAO,cACpC,OAAO,cAAc,EAAE,UAAU,KACjC,MAAM,KACN,MAAM,KACN,MAAM,KACN,MAAM,UACN,MAAM,cACN,OAAO,QAsCjB;IAED;;OAEG;IACH,YAFY,iBAAiB,CAK5B;IAED;;;;;OAKG;IACH,6BAJW,OAAO,oBAAoB,EAAE,OAAO,GACnC,iBAAiB,GAAC,gBAAgB,GAAC,gBAAgB,CAK9D;IAED;;;;OAIG;IACH,0CAJW,OAAO,cAAc,EAAE,UAAU,cACjC,OAAO,sBAAsB,EAAE,OAAO,QA0BhD;IAED;;;;;OAKG;IACH;YALmB,MAAM;gBAAU,MAAM,GAAE,OAAO;;mBACvC,OAAO,sBAAsB,EAAE,OAAO,QACtC,OAAO,eAAe,EAAE,OAAO,QAUzC;IAED;;;;;;;;;;;;;;;;;OAiBG;IACH,wCAXW,OAAO,cAAc,EAAE,UAAU,cACjC,OAAO,sBAAsB,EAAE,OAAO,YACtC,OAAO,4BAA4B,EAAE,OAAO,cAC5C,MAAM,cACN,OAAO,0BAA0B,EAAE,OAAO,UAC1C,OAAO,iBAAiB,EAAE,MAAM,YAChC,MAAM,WACN,MAAM,yBACG,OAAO,eAAe,EAAE,OAAO,KAAE,IAAI,qBAmExD;CACF;gCA9vB+B,YAAY"}
|
|
@@ -6,7 +6,6 @@ import ImageTile from '../../ImageTile.js';
|
|
|
6
6
|
import ReprojTile from '../../reproj/Tile.js';
|
|
7
7
|
import TileRange from '../../TileRange.js';
|
|
8
8
|
import TileState from '../../TileState.js';
|
|
9
|
-
import ZIndexContext from '../../render/canvas/ZIndexContext.js';
|
|
10
9
|
import {
|
|
11
10
|
apply as applyTransform,
|
|
12
11
|
compose as composeTransform,
|
|
@@ -96,13 +95,6 @@ class CanvasTileLayerRenderer extends CanvasLayerRenderer {
|
|
|
96
95
|
* @type {import("../../TileRange.js").default}
|
|
97
96
|
*/
|
|
98
97
|
this.tmpTileRange_ = new TileRange(0, 0, 0, 0);
|
|
99
|
-
|
|
100
|
-
/**
|
|
101
|
-
* @type {ZIndexContext}
|
|
102
|
-
*/
|
|
103
|
-
this.deferredContext_ = tileLayer.getDeclutter()
|
|
104
|
-
? new ZIndexContext()
|
|
105
|
-
: null;
|
|
106
98
|
}
|
|
107
99
|
|
|
108
100
|
/**
|
|
@@ -391,9 +383,8 @@ class CanvasTileLayerRenderer extends CanvasLayerRenderer {
|
|
|
391
383
|
const canvasTransform = toTransformString(this.pixelTransform);
|
|
392
384
|
|
|
393
385
|
this.useContainer(target, canvasTransform, this.getBackground(frameState));
|
|
394
|
-
|
|
395
|
-
|
|
396
|
-
: this.context;
|
|
386
|
+
|
|
387
|
+
const context = this.getRenderContext(frameState);
|
|
397
388
|
const canvas = this.context.canvas;
|
|
398
389
|
|
|
399
390
|
makeInverse(this.inversePixelTransform, this.pixelTransform);
|
|
@@ -582,16 +573,6 @@ class CanvasTileLayerRenderer extends CanvasLayerRenderer {
|
|
|
582
573
|
return this.container;
|
|
583
574
|
}
|
|
584
575
|
|
|
585
|
-
/**
|
|
586
|
-
* @param {import("../../Map.js").FrameState} frameState Frame state.
|
|
587
|
-
*/
|
|
588
|
-
renderDeferredInternal(frameState) {
|
|
589
|
-
if (this.deferredContext_) {
|
|
590
|
-
this.deferredContext_.draw(this.context);
|
|
591
|
-
this.deferredContext_.clear();
|
|
592
|
-
}
|
|
593
|
-
}
|
|
594
|
-
|
|
595
576
|
/**
|
|
596
577
|
* @param {import("../../ImageTile.js").default} tile Tile.
|
|
597
578
|
* @param {import("../../Map.js").FrameState} frameState Frame state.
|
|
@@ -607,10 +588,7 @@ class CanvasTileLayerRenderer extends CanvasLayerRenderer {
|
|
|
607
588
|
if (!image) {
|
|
608
589
|
return;
|
|
609
590
|
}
|
|
610
|
-
|
|
611
|
-
const context = this.deferredContext_
|
|
612
|
-
? this.deferredContext_.getContext()
|
|
613
|
-
: this.context;
|
|
591
|
+
const context = this.getRenderContext(frameState);
|
|
614
592
|
const uid = getUid(this);
|
|
615
593
|
const layerState = frameState.layerStatesArray[frameState.layerIndex];
|
|
616
594
|
const alpha =
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"VectorTileLayer.d.ts","sourceRoot":"","sources":["VectorTileLayer.js"],"names":[],"mappings":";AA4DA;;;;;GAKG;AACH;IACE;;OAEG;IACH,mBAFW,OAAO,2BAA2B,EAAE,OAAO,EA2CrD;IAtCC,eAAe;IACf,qCAA2E;IAE3E;;;OAGG;IACH,+BAA2B;IAE3B;;;OAGG;IACH,4CAA+C;IAE/C;;;OAGG;IACH,0BAAsB;IAEtB;;;OAGG;IACH,yBAAyB;IAEzB;;;OAGG;IACH,sBAAsC;IAEtC;;;OAGG;IACH,0BAA6B;IAG/B;;;;;OAKG;IACH,kBALW,OAAO,2BAA2B,EAAE,OAAO,cAC3C,MAAM,cACN,OAAO,uBAAuB,EAAE,OAAO,GACtC,OAAO,GAAC,SAAS,CAY5B;IAkCD;;;OAGG;IACH,qBAHW,OAAO,2BAA2B,EAAE,OAAO,GAC1C,OAAO,CAUlB;IAED;;OAEG;IACH,6BAEC;IAgBD;;;;;OAKG;IACH,6BAqHC;IAyND;;;;OAIG;IACH,gCAEC;IAED;;;;OAIG;IACH,4BAHW,OAAO,cAAc,EAAE,UAAU,cACjC,OAAO,sBAAsB,EAAE,KAAK,QAiC9C;
|
|
1
|
+
{"version":3,"file":"VectorTileLayer.d.ts","sourceRoot":"","sources":["VectorTileLayer.js"],"names":[],"mappings":";AA4DA;;;;;GAKG;AACH;IACE;;OAEG;IACH,mBAFW,OAAO,2BAA2B,EAAE,OAAO,EA2CrD;IAtCC,eAAe;IACf,qCAA2E;IAE3E;;;OAGG;IACH,+BAA2B;IAE3B;;;OAGG;IACH,4CAA+C;IAE/C;;;OAGG;IACH,0BAAsB;IAEtB;;;OAGG;IACH,yBAAyB;IAEzB;;;OAGG;IACH,sBAAsC;IAEtC;;;OAGG;IACH,0BAA6B;IAG/B;;;;;OAKG;IACH,kBALW,OAAO,2BAA2B,EAAE,OAAO,cAC3C,MAAM,cACN,OAAO,uBAAuB,EAAE,OAAO,GACtC,OAAO,GAAC,SAAS,CAY5B;IAkCD;;;OAGG;IACH,qBAHW,OAAO,2BAA2B,EAAE,OAAO,GAC1C,OAAO,CAUlB;IAED;;OAEG;IACH,6BAEC;IAgBD;;;;;OAKG;IACH,6BAqHC;IAyND;;;;OAIG;IACH,gCAEC;IAED;;;;OAIG;IACH,4BAHW,OAAO,cAAc,EAAE,UAAU,cACjC,OAAO,sBAAsB,EAAE,KAAK,QAiC9C;IAoDD,6DA+BC;IAgID;;;;;;;;OAQG;IACH,uBARW,OAAO,kBAAkB,EAAE,WAAW,oBACtC,MAAM,UACN,OAAO,sBAAsB,EAAE,OAAO,GAAC,MAAM,OAAO,sBAAsB,EAAE,OAAO,CAAC,gBACpF,OAAO,qCAAqC,EAAE,OAAO,gEAGpD,OAAO,CAyClB;IAED;;;;OAIG;IACH,8BAcC;IAED;;;;OAIG;IACH,yBAwDC;CACF;oCAx5BmC,gBAAgB"}
|
|
@@ -587,7 +587,6 @@ class CanvasVectorTileLayerRenderer extends CanvasTileLayerRenderer {
|
|
|
587
587
|
* @param {import("../../Map.js").FrameState} frameState Frame state.
|
|
588
588
|
*/
|
|
589
589
|
renderDeferredInternal(frameState) {
|
|
590
|
-
super.renderDeferredInternal(frameState);
|
|
591
590
|
const tiles =
|
|
592
591
|
/** @type {Array<import("../../VectorRenderTile.js").default>} */ (
|
|
593
592
|
this.renderedTiles
|
package/util.js
CHANGED