@vworlds/vecs-client 1.0.21 → 1.0.22

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.
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@vworlds/vecs-protocol",
3
- "version": "1.0.21",
3
+ "version": "1.0.22",
4
4
  "type": "module",
5
5
  "main": "./src/index.js",
6
6
  "types": "./src/index.d.ts",
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@vworlds/vecs-client",
3
- "version": "1.0.21",
3
+ "version": "1.0.22",
4
4
  "type": "module",
5
5
  "main": "./vecs-client/src/index.js",
6
6
  "types": "./vecs-client/src/index.d.ts",
@@ -16,9 +16,9 @@
16
16
  },
17
17
  "dependencies": {
18
18
  "@vworlds/dgram-client": "^1.0.8",
19
- "@vworlds/vecs": "1.0.21",
20
- "@vworlds/vecs-protocol": "1.0.21",
21
- "@vworlds/vecs-wire": "1.0.21",
19
+ "@vworlds/vecs": "1.0.22",
20
+ "@vworlds/vecs-protocol": "1.0.22",
21
+ "@vworlds/vecs-wire": "1.0.22",
22
22
  "eventemitter3": "^5.0.4"
23
23
  },
24
24
  "bundleDependencies": [
@@ -1,7 +1,7 @@
1
1
  import { NetworkWorld, type NetworkWorldOptions, type RPCHandler, type VecsSocket } from "@vworlds/vecs-protocol";
2
- import { type ComponentInstance, type IPhase } from "@vworlds/vecs";
2
+ import { type ComponentInstance, type Entity } from "@vworlds/vecs";
3
3
  import { EventEmitter } from "eventemitter3";
4
- import { ComponentSnapshot } from "./interpolator.js";
4
+ import { ComponentSnapshot, type ComponentInterpolator } from "./diff_buffer.js";
5
5
  export interface ClientWorldResetEvent {
6
6
  initial: boolean;
7
7
  fromFrame: number;
@@ -18,9 +18,16 @@ export interface ClientWorldOptions extends NetworkWorldOptions {
18
18
  interpolatorBucketLength?: number;
19
19
  serverTickIntervalMs?: number;
20
20
  ackIntervalMs?: number;
21
+ /**
22
+ * Component types to interpolate between server frames, keyed by component
23
+ * type id, with the function used to blend each one. Types without an entry
24
+ * are snapped to their latest received value. Defaults to interpolating the
25
+ * first network component (type 1) as a 2D position via `interpolatePosition`.
26
+ */
27
+ interpolators?: Iterable<readonly [number, ComponentInterpolator]>;
21
28
  }
22
29
  export interface InstallSystemsOptions {
23
- applyPhase?: string | IPhase;
30
+ applyPhase?: string | Entity;
24
31
  }
25
32
  export interface DgramConnectOptions extends Omit<ClientWorldOptions, "socket"> {
26
33
  host: string;
@@ -35,7 +42,7 @@ export declare class ClientWorld extends NetworkWorld {
35
42
  private _socket;
36
43
  private readonly _rpc;
37
44
  private readonly _rpcInbox;
38
- private readonly _interpolator;
45
+ private readonly _diffBuffer;
39
46
  private readonly _encodeBuffer;
40
47
  private readonly _ackIntervalMs;
41
48
  private readonly _networkedQuery;
@@ -61,6 +68,7 @@ export declare class ClientWorld extends NetworkWorld {
61
68
  private _removeComponent;
62
69
  private _destroyNetworkEntities;
63
70
  private _handleDisconnect;
71
+ private _phaseTarget;
64
72
  private _startAckTimer;
65
73
  private _stopAckTimer;
66
74
  }
@@ -1,7 +1,8 @@
1
1
  import { Client2Server, Server2Client, SessionRPC, ALL_COMPONENTS, cid_unpack, NetworkWorld, worldPath, } from "@vworlds/vecs-protocol";
2
+ import { ON_UPDATE, Phase, } from "@vworlds/vecs";
2
3
  import { Decoder, Encoder } from "@vworlds/vecs-wire";
3
4
  import { EventEmitter } from "eventemitter3";
4
- import { Interpolator, diffFromStateDiff } from "./interpolator.js";
5
+ import { DiffBuffer, diffFromStateDiff, } from "./diff_buffer.js";
5
6
  class Networked {
6
7
  }
7
8
  const DEFAULT_CLIENT_LOCAL_ENTITY_ID_START = 10000;
@@ -23,7 +24,7 @@ export class ClientWorld extends NetworkWorld {
23
24
  this._ackIntervalMs = options.ackIntervalMs ?? 1000 / 30;
24
25
  this.component(Networked);
25
26
  this._networkedQuery = this.query("ClientWorld:Networked").with(Networked).track().build();
26
- this._interpolator = new Interpolator(options.interpolatorBucketLength ?? 3, options.serverTickIntervalMs ?? 1000 / 30, (snapshot) => this.decodeComponentSnapshot(snapshot));
27
+ this._diffBuffer = new DiffBuffer(options.interpolatorBucketLength ?? 3, options.serverTickIntervalMs ?? 1000 / 30, (snapshot) => this.decodeComponentSnapshot(snapshot), options.interpolators);
27
28
  if (options.socket) {
28
29
  this.attachSocket(options.socket);
29
30
  }
@@ -47,7 +48,7 @@ export class ClientWorld extends NetworkWorld {
47
48
  return;
48
49
  }
49
50
  this._systemsInstalled = true;
50
- const applyPhase = options.applyPhase ?? "update";
51
+ const applyPhase = this._phaseTarget(options.applyPhase ?? ON_UPDATE);
51
52
  this.system("ClientWorld:Apply")
52
53
  .phase(applyPhase)
53
54
  .run((now) => this.apply(now));
@@ -66,7 +67,7 @@ export class ClientWorld extends NetworkWorld {
66
67
  const incoming = this._rpcInbox.splice(0);
67
68
  this._rpc.process(incoming);
68
69
  }
69
- const diff = this._interpolator.pull(now);
70
+ const diff = this._diffBuffer.pull(now);
70
71
  diff.snapshots.forEach((snapshot) => this._applySnapshot(snapshot));
71
72
  diff.removed?.forEach((key) => {
72
73
  const [eid, type] = cid_unpack(key);
@@ -78,7 +79,7 @@ export class ClientWorld extends NetworkWorld {
78
79
  return;
79
80
  }
80
81
  const rpc = this._rpc.getOutgoing();
81
- const ackFrame = this._interpolator.version < 0 ? 0 : this._interpolator.version;
82
+ const ackFrame = this._diffBuffer.version < 0 ? 0 : this._diffBuffer.version;
82
83
  const encoder = new Encoder(this._encodeBuffer);
83
84
  encoder.write(new Client2Server({ ackFrame, input: this._input, rpc }));
84
85
  this._socket.send(encoder.getBuffer());
@@ -100,7 +101,7 @@ export class ClientWorld extends NetworkWorld {
100
101
  // A diff with fromFrame === 0 is a full baseline: the complete authoritative
101
102
  // state at sd.toFrame. The server streams these whenever a client falls
102
103
  // outside its history window -- most commonly a backgrounded tab, where the
103
- // render loop (and therefore Interpolator.pull) is suspended and acks are
104
+ // render loop (and therefore DiffBuffer.pull) is suspended and acks are
104
105
  // throttled, so the server keeps resending the whole world until the client
105
106
  // catches up.
106
107
  //
@@ -117,19 +118,19 @@ export class ClientWorld extends NetworkWorld {
117
118
  // Skip baselines we have already advanced past (duplicates or, with the
118
119
  // unordered transport, stragglers). After a reconnect the server may have
119
120
  // restarted its frame counter, so a forced reset overrides this.
120
- if (!this._forceBaselineReset && sd.toFrame <= this._interpolator.version) {
121
+ if (!this._forceBaselineReset && sd.toFrame <= this._diffBuffer.version) {
121
122
  return;
122
123
  }
123
124
  this._forceBaselineReset = false;
124
125
  const initial = !this._baselineApplied;
125
126
  this._baselineApplied = true;
126
127
  this._destroyNetworkEntities();
127
- this._interpolator.reset();
128
- this._interpolator.push(diffFromStateDiff(sd));
128
+ this._diffBuffer.reset();
129
+ this._diffBuffer.push(diffFromStateDiff(sd));
129
130
  this.events.emit("reset", { initial, fromFrame: sd.fromFrame, toFrame: sd.toFrame });
130
131
  return;
131
132
  }
132
- this._interpolator.push(diffFromStateDiff(sd));
133
+ this._diffBuffer.push(diffFromStateDiff(sd));
133
134
  }
134
135
  decodeComponentSnapshot(snapshot) {
135
136
  if (!(snapshot.payload instanceof Uint8Array)) {
@@ -177,6 +178,9 @@ export class ClientWorld extends NetworkWorld {
177
178
  }
178
179
  this.events.emit("disconnect");
179
180
  }
181
+ _phaseTarget(phase) {
182
+ return (typeof phase === "string" ? this.entity(phase) : phase).add(Phase);
183
+ }
180
184
  _startAckTimer() {
181
185
  if (this._ackTimer !== undefined) {
182
186
  return;
@@ -1 +1 @@
1
- {"version":3,"file":"client_world.js","sourceRoot":"","sources":["../../../src/client_world.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"client_world.js","sourceRoot":"","sources":["../../../src/client_world.ts"],"names":[],"mappings":"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"}
@@ -5,6 +5,13 @@ export interface IPosition {
5
5
  readonly y: number;
6
6
  }
7
7
  type DecodeComponentSnapshot = (snapshot: ComponentSnapshot) => ComponentInstance;
8
+ /**
9
+ * Blends a source and target component toward render time. `alpha` is the
10
+ * normalized interpolation factor in the range [0, 1], where 0 returns the
11
+ * source value and 1 the target value. The returned value should be a fresh
12
+ * component instance; inputs must not be mutated.
13
+ */
14
+ export type ComponentInterpolator = (source: ComponentInstance, target: ComponentInstance, alpha: number) => ComponentInstance;
8
15
  export declare class ComponentSnapshot {
9
16
  readonly eid: EID;
10
17
  readonly type: number;
@@ -21,10 +28,12 @@ export declare class Diff {
21
28
  constructor(from: number, to: number, removed?: number[] | undefined);
22
29
  get smap(): Map<number, ComponentSnapshot>;
23
30
  set smap(v: Map<number, ComponentSnapshot>);
31
+ getSnapshot(cid: CID): ComponentSnapshot | undefined;
32
+ upsertSnapshot(snapshot: ComponentSnapshot): void;
24
33
  updateSnapshotsFromMap(): void;
25
34
  }
26
35
  export declare function diffFromStateDiff(sd: StateDiff): Diff;
27
- export declare class Interpolator {
36
+ export declare class DiffBuffer {
28
37
  private max_length;
29
38
  private server_tick_interval;
30
39
  private readonly _decodeComponentSnapshot?;
@@ -35,18 +44,25 @@ export declare class Interpolator {
35
44
  version: number;
36
45
  private _tServ;
37
46
  private _lastTime;
47
+ private readonly _componentInterpolators;
38
48
  constructor(max_length?: number, // max bucket length
39
49
  server_tick_interval?: number, // server tick interval FPS configuration
40
- _decodeComponentSnapshot?: DecodeComponentSnapshot | undefined);
50
+ _decodeComponentSnapshot?: DecodeComponentSnapshot | undefined, componentInterpolators?: Iterable<readonly [number, ComponentInterpolator]>);
41
51
  private _updateState;
42
52
  private _pop;
43
53
  pull(now: number): Diff;
44
54
  reset(): void;
45
55
  push(diff: Diff): void;
46
- private _decodePositionSnapshot;
47
- private _interpolatePositions;
56
+ private _decodeSnapshot;
57
+ private _interpolate;
48
58
  }
49
- export declare function merge(a: Diff | undefined, b: Diff, check?: boolean): Diff;
50
- export declare function merge(a: Diff, b: Diff | undefined, check?: boolean): Diff;
51
- export declare function merge(a: Diff | undefined, b: Diff | undefined, check?: boolean): Diff | undefined;
59
+ /**
60
+ * Default {@link ComponentInterpolator} for 2D point components: linearly
61
+ * interpolates the `x` and `y` fields. Exported so callers can interpolate
62
+ * their own position-like components without reimplementing the math.
63
+ */
64
+ export declare const interpolatePosition: ComponentInterpolator;
65
+ export declare function merge(a: Diff | undefined, b: Diff, check?: boolean, mutateAccumulator?: boolean): Diff;
66
+ export declare function merge(a: Diff, b: Diff | undefined, check?: boolean, mutateAccumulator?: boolean): Diff;
67
+ export declare function merge(a: Diff | undefined, b: Diff | undefined, check?: boolean, mutateAccumulator?: boolean): Diff | undefined;
52
68
  export {};
@@ -10,6 +10,12 @@ export class ComponentSnapshot {
10
10
  this.cid = cid_pack(eid, type);
11
11
  }
12
12
  }
13
+ // A Diff carries the component snapshots and removals for a frame range. It
14
+ // keeps two views of the same snapshots: `snapshots` (an ordered array, the
15
+ // form decoded from the wire and consumed by callers) and `smap` (a cid-keyed
16
+ // map, used for fast lookup and overwrite during merge). `smap` is built
17
+ // lazily from `snapshots` on first access. Use `getSnapshot`/`upsertSnapshot`
18
+ // when keyed access should preserve the current representation.
13
19
  export class Diff {
14
20
  constructor(from, to, removed) {
15
21
  this.from = from;
@@ -27,6 +33,25 @@ export class Diff {
27
33
  this._smap = v;
28
34
  this.updateSnapshotsFromMap();
29
35
  }
36
+ getSnapshot(cid) {
37
+ if (this._smap) {
38
+ return this._smap.get(cid);
39
+ }
40
+ return this.snapshots.find((snapshot) => snapshot.cid === cid);
41
+ }
42
+ upsertSnapshot(snapshot) {
43
+ if (this._smap) {
44
+ this._smap.set(snapshot.cid, snapshot);
45
+ this.updateSnapshotsFromMap();
46
+ return;
47
+ }
48
+ const index = this.snapshots.findIndex((existing) => existing.cid === snapshot.cid);
49
+ if (index === -1) {
50
+ this.snapshots.push(snapshot);
51
+ return;
52
+ }
53
+ this.snapshots[index] = snapshot;
54
+ }
30
55
  updateSnapshotsFromMap() {
31
56
  this.snapshots = [...this.smap.values()];
32
57
  }
@@ -40,10 +65,12 @@ export function diffFromStateDiff(sd) {
40
65
  d.removed = sd.removed.map(([eid, type]) => cid_pack(eid, type));
41
66
  return d;
42
67
  }
43
- export class Interpolator {
68
+ export class DiffBuffer {
44
69
  constructor(max_length = MAX_LENGTH, // max bucket length
45
70
  server_tick_interval = 1000 / 60, // server tick interval FPS configuration
46
- _decodeComponentSnapshot) {
71
+ _decodeComponentSnapshot, componentInterpolators = [
72
+ [POSITION_COMPONENT_TYPE, interpolatePosition],
73
+ ]) {
47
74
  this.max_length = max_length;
48
75
  this.server_tick_interval = server_tick_interval;
49
76
  this._decodeComponentSnapshot = _decodeComponentSnapshot;
@@ -65,6 +92,7 @@ export class Interpolator {
65
92
  throw new Error("minimum interpolation bucket length is 2");
66
93
  }
67
94
  this.bucket = Array(this.max_length).fill(undefined);
95
+ this._componentInterpolators = new Map(componentInterpolators);
68
96
  }
69
97
  _updateState(sd) {
70
98
  // apply diff to current state
@@ -110,8 +138,8 @@ export class Interpolator {
110
138
  if (this._tServ === -1) {
111
139
  this._tServ = now;
112
140
  }
113
- // lerpStart is the timestamp of the currently visualized state.
114
- let lerpStart = this._lastTime;
141
+ // interpolationStart is the timestamp of the currently visualized state.
142
+ let interpolationStart = this._lastTime;
115
143
  // The following loop will incorporate (merge) into the
116
144
  // proposed diff (sd) as many snapshots from the bucket
117
145
  // as it needs in order to catch up to server time, that is,
@@ -119,9 +147,11 @@ export class Interpolator {
119
147
  // snapshots until we are behind
120
148
  // or have eaten the whole buffer.
121
149
  for (let i = 0; i < this.bucket.length && now >= this._tServ; i++, this._tServ += this.server_tick_interval) {
122
- // take snapshot on bucket[0] and merge it on to the result:
123
- sd = merge(sd, this.bucket[0], false);
124
- lerpStart = this._tServ;
150
+ // take snapshot on bucket[0] and merge it on to the result. sd is owned
151
+ // exclusively by this pull(), so fold each frame in place to avoid copying
152
+ // the snapshot map on every iteration.
153
+ sd = merge(sd, this.bucket[0], false, true);
154
+ interpolationStart = this._tServ;
125
155
  this._pop(); //remove bucket[0] and shift contents to the left
126
156
  }
127
157
  // skip bucket items that are undefined. At the end of this
@@ -141,7 +171,7 @@ export class Interpolator {
141
171
  // callers can render fake frames between server ticks.
142
172
  const target = this.bucket[0];
143
173
  if (target) {
144
- this._interpolatePositions(sd, target, lerpStart, this._tServ, now);
174
+ this._interpolate(sd, target, interpolationStart, this._tServ, now);
145
175
  this._first = target.to;
146
176
  }
147
177
  else {
@@ -225,53 +255,53 @@ export class Interpolator {
225
255
  this.version = diff.to;
226
256
  }
227
257
  }
228
- _decodePositionSnapshot(snapshot) {
258
+ _decodeSnapshot(snapshot) {
229
259
  if (!(snapshot.payload instanceof Uint8Array)) {
230
- if (!isPosition(snapshot.payload)) {
231
- throw new Error(`Component type ${POSITION_COMPONENT_TYPE} must satisfy IPosition`);
232
- }
233
260
  return snapshot.payload;
234
261
  }
235
262
  if (!this._decodeComponentSnapshot) {
236
- throw new Error("Position interpolation requires a component snapshot decoder");
263
+ throw new Error("Component interpolation requires a component snapshot decoder");
237
264
  }
238
- const component = this._decodeComponentSnapshot(snapshot);
239
- if (!isPosition(component)) {
240
- throw new Error(`Component type ${POSITION_COMPONENT_TYPE} must satisfy IPosition`);
241
- }
242
- return component;
265
+ return this._decodeComponentSnapshot(snapshot);
243
266
  }
244
- _interpolatePositions(sd, target, start, end, now) {
267
+ _interpolate(sd, target, start, end, now) {
268
+ if (this._componentInterpolators.size === 0) {
269
+ return;
270
+ }
271
+ const alpha = end === start ? 1 : (now - start) / (end - start);
245
272
  target.snapshots.forEach((targetSnapshot) => {
246
- if (targetSnapshot.type !== POSITION_COMPONENT_TYPE) {
273
+ const interpolate = this._componentInterpolators.get(targetSnapshot.type);
274
+ if (!interpolate) {
247
275
  return;
248
276
  }
249
- const sourceSnapshot = sd.smap.get(targetSnapshot.cid) ?? this._state.get(targetSnapshot.cid);
277
+ const sourceSnapshot = sd.getSnapshot(targetSnapshot.cid) ?? this._state.get(targetSnapshot.cid);
250
278
  if (!sourceSnapshot) {
251
279
  return;
252
280
  }
253
- const sourcePosition = this._decodePositionSnapshot(sourceSnapshot);
254
- const targetPosition = this._decodePositionSnapshot(targetSnapshot);
255
- const position = lerp(sourcePosition, targetPosition, start, end, now);
256
- sd.smap.set(targetSnapshot.cid, new ComponentSnapshot(targetSnapshot.eid, POSITION_COMPONENT_TYPE, position));
281
+ const source = this._decodeSnapshot(sourceSnapshot);
282
+ const targetComponent = this._decodeSnapshot(targetSnapshot);
283
+ sd.upsertSnapshot(new ComponentSnapshot(targetSnapshot.eid, targetSnapshot.type, interpolate(source, targetComponent, alpha)));
257
284
  });
258
- sd.updateSnapshotsFromMap();
259
285
  }
260
286
  }
261
287
  function isPosition(component) {
262
288
  const candidate = component;
263
289
  return typeof candidate.x === "number" && typeof candidate.y === "number";
264
290
  }
265
- function lerp(a, b, start, end, t) {
266
- if (end === start) {
267
- return b;
291
+ /**
292
+ * Default {@link ComponentInterpolator} for 2D point components: linearly
293
+ * interpolates the `x` and `y` fields. Exported so callers can interpolate
294
+ * their own position-like components without reimplementing the math.
295
+ */
296
+ export const interpolatePosition = (source, target, alpha) => {
297
+ if (!isPosition(source) || !isPosition(target)) {
298
+ throw new Error(`Component type ${POSITION_COMPONENT_TYPE} must satisfy IPosition`);
268
299
  }
269
- const d = end - start;
270
- const position = new b.constructor();
271
- position.x = a.x + ((b.x - a.x) / d) * (t - start);
272
- position.y = a.y + ((b.y - a.y) / d) * (t - start);
273
- return position;
274
- }
300
+ const result = new target.constructor();
301
+ result.x = source.x + (target.x - source.x) * alpha;
302
+ result.y = source.y + (target.y - source.y) * alpha;
303
+ return result;
304
+ };
275
305
  // helper function to add items to a set
276
306
  function addToSet(set, data) {
277
307
  if (!data) {
@@ -281,7 +311,7 @@ function addToSet(set, data) {
281
311
  set.add(item);
282
312
  }
283
313
  }
284
- export function merge(a, b, check = true) {
314
+ export function merge(a, b, check = true, mutateAccumulator = false) {
285
315
  if (!a) {
286
316
  return b;
287
317
  }
@@ -294,21 +324,20 @@ export function merge(a, b, check = true) {
294
324
  // incremented version counter on its own.
295
325
  throw new Error("cannot merge snapshots");
296
326
  }
297
- const m = new Diff(a.from, b.to, undefined);
298
327
  const removed = new Set();
299
328
  addToSet(removed, a.removed);
300
329
  addToSet(removed, b.removed);
301
- const as = new Map(a.smap);
330
+ const as = mutateAccumulator ? a.smap : new Map(a.smap);
302
331
  const bs = b.smap;
303
332
  bs.forEach((s) => {
304
333
  as.set(s.cid, s);
305
334
  removed.delete(s.cid); // undelete re-added entities
306
335
  });
307
336
  removed.forEach((r) => as.delete(r));
308
- if (removed.size) {
309
- m.removed = [...removed];
310
- }
337
+ const m = mutateAccumulator ? a : new Diff(a.from, b.to, undefined);
338
+ m.to = b.to;
339
+ m.removed = removed.size ? [...removed] : undefined;
311
340
  m.smap = as;
312
341
  return m;
313
342
  }
314
- //# sourceMappingURL=interpolator.js.map
343
+ //# sourceMappingURL=diff_buffer.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"diff_buffer.js","sourceRoot":"","sources":["../../../src/diff_buffer.ts"],"names":[],"mappings":"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"}
@@ -1,4 +1,5 @@
1
- export { ComponentSnapshot, Diff, Interpolator } from "./interpolator.js";
1
+ export { ComponentSnapshot, Diff, DiffBuffer, interpolatePosition } from "./diff_buffer.js";
2
+ export type { ComponentInterpolator, IPosition } from "./diff_buffer.js";
2
3
  export { ClientWorld } from "./client_world.js";
3
4
  export type { ClientWorldOptions, DgramConnectOptions, InstallSystemsOptions, } from "./client_world.js";
4
5
  export { worldPath } from "@vworlds/vecs-protocol";
@@ -1,4 +1,4 @@
1
- export { ComponentSnapshot, Diff, Interpolator } from "./interpolator.js";
1
+ export { ComponentSnapshot, Diff, DiffBuffer, interpolatePosition } from "./diff_buffer.js";
2
2
  export { ClientWorld } from "./client_world.js";
3
3
  export { worldPath } from "@vworlds/vecs-protocol";
4
4
  //# sourceMappingURL=index.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,iBAAiB,EAAE,IAAI,EAAE,YAAY,EAAE,MAAM,mBAAmB,CAAC;AAC1E,OAAO,EAAE,WAAW,EAAE,MAAM,mBAAmB,CAAC;AAMhD,OAAO,EAAE,SAAS,EAAE,MAAM,wBAAwB,CAAC"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,iBAAiB,EAAE,IAAI,EAAE,UAAU,EAAE,mBAAmB,EAAE,MAAM,kBAAkB,CAAC;AAE5F,OAAO,EAAE,WAAW,EAAE,MAAM,mBAAmB,CAAC;AAMhD,OAAO,EAAE,SAAS,EAAE,MAAM,wBAAwB,CAAC"}
@@ -1 +0,0 @@
1
- {"version":3,"file":"interpolator.js","sourceRoot":"","sources":["../../../src/interpolator.ts"],"names":[],"mappings":"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"}