@woosh/meep-engine 2.95.1 → 2.96.0

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.
@@ -3169,35 +3169,39 @@ const cos$1 = Math.cos;
3169
3169
  let Quaternion$1 = class Quaternion {
3170
3170
  /**
3171
3171
  *
3172
- * @param {Number} [x=0]
3173
- * @param {Number} [y=0]
3174
- * @param {Number} [z=0]
3175
- * @param {Number} [w=1]
3172
+ * @param {number} [x=0]
3173
+ * @param {number} [y=0]
3174
+ * @param {number} [z=0]
3175
+ * @param {number} [w=1]
3176
3176
  * @constructor
3177
3177
  */
3178
3178
  constructor(x = 0, y = 0, z = 0, w = 1) {
3179
3179
 
3180
3180
  /**
3181
3181
  *
3182
- * @type {Number}
3182
+ * @type {number}
3183
3183
  */
3184
3184
  this.x = x;
3185
3185
  /**
3186
3186
  *
3187
- * @type {Number}
3187
+ * @type {number}
3188
3188
  */
3189
3189
  this.y = y;
3190
3190
  /**
3191
3191
  *
3192
- * @type {Number}
3192
+ * @type {number}
3193
3193
  */
3194
3194
  this.z = z;
3195
3195
  /**
3196
3196
  *
3197
- * @type {Number}
3197
+ * @type {number}
3198
3198
  */
3199
3199
  this.w = w;
3200
3200
 
3201
+ /**
3202
+ * @readonly
3203
+ * @type {Signal<number, number, number, number, number, number, number, number>}
3204
+ */
3201
3205
  this.onChanged = new Signal();
3202
3206
  }
3203
3207
 
@@ -4479,6 +4483,7 @@ let Quaternion$1 = class Quaternion {
4479
4483
 
4480
4484
  /**
4481
4485
  * Based on GDC talk from Bungie on destiny, compressing quaternions for animation
4486
+ * @deprecated use `quat_decode_from_uint32` instead
4482
4487
  * @param {number} value
4483
4488
  */
4484
4489
  decodeFromUint32(value) {
@@ -4487,6 +4492,7 @@ let Quaternion$1 = class Quaternion {
4487
4492
 
4488
4493
  /**
4489
4494
  * Based on GDC talk from Bungie on destiny, compressing quaternions for animation
4495
+ * @deprecated use `quat_encode_to_uint32` instead
4490
4496
  * @returns {number}
4491
4497
  */
4492
4498
  encodeToUint32() {
@@ -81286,132 +81292,6 @@ class Tag {
81286
81292
 
81287
81293
  Tag.typeName = "Tag";
81288
81294
 
81289
- const peq = new Uint32Array(0x10000);
81290
- const myers_32 = (a, b) => {
81291
- const n = a.length;
81292
- const m = b.length;
81293
- const lst = 1 << (n - 1);
81294
- let pv = -1;
81295
- let mv = 0;
81296
- let sc = n;
81297
- let i = n;
81298
- while (i--) {
81299
- peq[a.charCodeAt(i)] |= 1 << i;
81300
- }
81301
- for (i = 0; i < m; i++) {
81302
- let eq = peq[b.charCodeAt(i)];
81303
- const xv = eq | mv;
81304
- eq |= ((eq & pv) + pv) ^ pv;
81305
- mv |= ~(eq | pv);
81306
- pv &= eq;
81307
- if (mv & lst) {
81308
- sc++;
81309
- }
81310
- if (pv & lst) {
81311
- sc--;
81312
- }
81313
- mv = (mv << 1) | 1;
81314
- pv = (pv << 1) | ~(xv | mv);
81315
- mv &= xv;
81316
- }
81317
- i = n;
81318
- while (i--) {
81319
- peq[a.charCodeAt(i)] = 0;
81320
- }
81321
- return sc;
81322
- };
81323
- const myers_x = (b, a) => {
81324
- const n = a.length;
81325
- const m = b.length;
81326
- const mhc = [];
81327
- const phc = [];
81328
- const hsize = Math.ceil(n / 32);
81329
- const vsize = Math.ceil(m / 32);
81330
- for (let i = 0; i < hsize; i++) {
81331
- phc[i] = -1;
81332
- mhc[i] = 0;
81333
- }
81334
- let j = 0;
81335
- for (; j < vsize - 1; j++) {
81336
- let mv = 0;
81337
- let pv = -1;
81338
- const start = j * 32;
81339
- const vlen = Math.min(32, m) + start;
81340
- for (let k = start; k < vlen; k++) {
81341
- peq[b.charCodeAt(k)] |= 1 << k;
81342
- }
81343
- for (let i = 0; i < n; i++) {
81344
- const eq = peq[a.charCodeAt(i)];
81345
- const pb = (phc[(i / 32) | 0] >>> i) & 1;
81346
- const mb = (mhc[(i / 32) | 0] >>> i) & 1;
81347
- const xv = eq | mv;
81348
- const xh = ((((eq | mb) & pv) + pv) ^ pv) | eq | mb;
81349
- let ph = mv | ~(xh | pv);
81350
- let mh = pv & xh;
81351
- if ((ph >>> 31) ^ pb) {
81352
- phc[(i / 32) | 0] ^= 1 << i;
81353
- }
81354
- if ((mh >>> 31) ^ mb) {
81355
- mhc[(i / 32) | 0] ^= 1 << i;
81356
- }
81357
- ph = (ph << 1) | pb;
81358
- mh = (mh << 1) | mb;
81359
- pv = mh | ~(xv | ph);
81360
- mv = ph & xv;
81361
- }
81362
- for (let k = start; k < vlen; k++) {
81363
- peq[b.charCodeAt(k)] = 0;
81364
- }
81365
- }
81366
- let mv = 0;
81367
- let pv = -1;
81368
- const start = j * 32;
81369
- const vlen = Math.min(32, m - start) + start;
81370
- for (let k = start; k < vlen; k++) {
81371
- peq[b.charCodeAt(k)] |= 1 << k;
81372
- }
81373
- let score = m;
81374
- for (let i = 0; i < n; i++) {
81375
- const eq = peq[a.charCodeAt(i)];
81376
- const pb = (phc[(i / 32) | 0] >>> i) & 1;
81377
- const mb = (mhc[(i / 32) | 0] >>> i) & 1;
81378
- const xv = eq | mv;
81379
- const xh = ((((eq | mb) & pv) + pv) ^ pv) | eq | mb;
81380
- let ph = mv | ~(xh | pv);
81381
- let mh = pv & xh;
81382
- score += (ph >>> (m - 1)) & 1;
81383
- score -= (mh >>> (m - 1)) & 1;
81384
- if ((ph >>> 31) ^ pb) {
81385
- phc[(i / 32) | 0] ^= 1 << i;
81386
- }
81387
- if ((mh >>> 31) ^ mb) {
81388
- mhc[(i / 32) | 0] ^= 1 << i;
81389
- }
81390
- ph = (ph << 1) | pb;
81391
- mh = (mh << 1) | mb;
81392
- pv = mh | ~(xv | ph);
81393
- mv = ph & xv;
81394
- }
81395
- for (let k = start; k < vlen; k++) {
81396
- peq[b.charCodeAt(k)] = 0;
81397
- }
81398
- return score;
81399
- };
81400
- const distance = (a, b) => {
81401
- if (a.length < b.length) {
81402
- const tmp = b;
81403
- b = a;
81404
- a = tmp;
81405
- }
81406
- if (b.length === 0) {
81407
- return a.length;
81408
- }
81409
- if (a.length <= 32) {
81410
- return myers_32(a, b);
81411
- }
81412
- return myers_x(a, b);
81413
- };
81414
-
81415
81295
  class Token {
81416
81296
  /**
81417
81297
  * @template V,T
@@ -82322,6 +82202,161 @@ function seedVariablesIntoTemplateString(template, seed) {
82322
82202
  return result;
82323
82203
  }
82324
82204
 
82205
+ /**
82206
+ * Calculate the Jaro-Winkler distance between two strings
82207
+ * @param {string} first The string to compare
82208
+ * @param {string} second The string to compare with
82209
+ * @returns {number} similarity score, higher value means strings are more similar
82210
+ */
82211
+ function string_jaro_winkler(first, second) {
82212
+ const l1 = first.length;
82213
+ const l2 = second.length;
82214
+
82215
+ if (l1 === 0 && l2 === 0) {
82216
+ // special case for empty string
82217
+ return 1;
82218
+ }
82219
+
82220
+ const matches1 = BitSet.fixedSize(l1);
82221
+ const matches2 = BitSet.fixedSize(l2);
82222
+
82223
+ const matches = getMatching(first, second, matches1, matches2);
82224
+
82225
+ if (matches <= 0) {
82226
+ return 0;
82227
+ }
82228
+
82229
+ // Calculate the Jaro distance:
82230
+ const transpositions = getTranspositions(first, second, matches1, matches2);
82231
+ const similarity = (matches / l1 + matches / l2 + (matches - transpositions) / matches) / 3;
82232
+
82233
+ // Transform to Jaro-Winkler:
82234
+ // Prefix scale gives more favorable ratings to strings that share common prefixes:
82235
+ const prefix_scale = 0.1;
82236
+ const prefix = getPrefix(first, second, min3(l1, l2, 4));
82237
+ return similarity + prefix * prefix_scale * (1 - similarity);
82238
+ }
82239
+
82240
+ /**
82241
+ * Find matching characters in both strings according to Jaro algorithm
82242
+ * @param {string} a1
82243
+ * @param {string} a2
82244
+ * @param {BitSet} matches1
82245
+ * @param {BitSet} matches2
82246
+ * @return {number}
82247
+ */
82248
+ function getMatching(a1, a2, matches1, matches2) {
82249
+ const a1_length = a1.length;
82250
+ const a2_length = a2.length;
82251
+
82252
+ // Window is modified to work with string of length 1
82253
+ const matchWindow = max2(
82254
+ 0,
82255
+ Math.floor(max2(a1_length, a2_length) * 0.5) - 1
82256
+ );
82257
+
82258
+ let matches = 0;
82259
+
82260
+ // Loop to find matched characters:
82261
+ for (let index1 = 0; index1 < a1_length; index1++) {
82262
+
82263
+ // Use the highest of the window diff and the min of the window and string 2 length:
82264
+ const start = max2(0, index1 - matchWindow);
82265
+ const end = min2(index1 + matchWindow + 1, a2_length);
82266
+
82267
+ // Iterate second string index:
82268
+ for (let index2 = start; index2 < end; index2++) {
82269
+
82270
+ // If second string character already matched, skip:
82271
+ if (matches2.get(index2)) {
82272
+ continue;
82273
+ }
82274
+
82275
+ // If the characters don't match, skip:
82276
+ if (a1.charAt(index1) !== a2.charAt(index2)) {
82277
+ continue;
82278
+ }
82279
+
82280
+ // Assume match if the above 2 checks don't continue:
82281
+ matches1.set(index1, true);
82282
+ matches2.set(index2, true);
82283
+
82284
+ // Add matches by 1, break inner loop:
82285
+ ++matches;
82286
+ break;
82287
+ }
82288
+ }
82289
+
82290
+ return matches;
82291
+ }
82292
+
82293
+ /**
82294
+ * Calculate the number of transpositions between the two words
82295
+ * @param {string} a1 The first string to compare
82296
+ * @param {string} a2 The second string to compare
82297
+ * @param {BitSet} matches1
82298
+ * @param {BitSet} matches2
82299
+ */
82300
+ function getTranspositions(a1, a2, matches1, matches2) {
82301
+ let transpositions = 0;
82302
+
82303
+ // Loop to find transpositions:
82304
+ const a1_length = a1.length;
82305
+ const a2_length = a2.length;
82306
+
82307
+ for (let i1 = 0, i2 = 0; i1 < a1_length; i1++) {
82308
+ // If a non-matching character was found, skip:
82309
+ if (matches1.get(i1) === false) {
82310
+ continue;
82311
+ }
82312
+
82313
+ // Move i2 index to the next match:
82314
+ while (
82315
+ i2 < a2_length
82316
+ && matches2.get(i2) === false
82317
+ ) {
82318
+ i2++;
82319
+ }
82320
+
82321
+ // If the characters don't match, increase transposition:
82322
+ if (a1.charAt(i1) !== a2.charAt(i2)) {
82323
+ transpositions++;
82324
+ }
82325
+
82326
+ // Iterate i2 index normally:
82327
+ i2++;
82328
+ }
82329
+
82330
+ return Math.floor(transpositions * 0.5);
82331
+ }
82332
+
82333
+ /**
82334
+ * Counts the number of common characters at the beginning
82335
+ * of each word up to a maximum of 4
82336
+ * @param {string} a1 The first string to compare
82337
+ * @param {string} a2 The second string to compare
82338
+ * @param {number} character_limit
82339
+ * @returns {number}
82340
+ */
82341
+ function getPrefix(a1, a2, character_limit) {
82342
+
82343
+ let p = 0;
82344
+
82345
+ for (; p < character_limit; p++) {
82346
+ if (a1.charAt(p) !== a2.charAt(p)) {
82347
+ return p;
82348
+ }
82349
+ }
82350
+
82351
+ return ++p;
82352
+ }
82353
+
82354
+ /**
82355
+ * Higher value means string are more similar
82356
+ * @type {(function(string, string): number)}
82357
+ */
82358
+ const string_compute_similarity = string_jaro_winkler;
82359
+
82325
82360
  /**
82326
82361
  * Represents information about a language
82327
82362
  */
@@ -82527,7 +82562,7 @@ class Localization {
82527
82562
  * @param {number} value
82528
82563
  */
82529
82564
  formatIntegerByThousands(value) {
82530
- const formatter = new Intl.NumberFormat(this.locale.getValue(), {useGrouping: true});
82565
+ const formatter = new Intl.NumberFormat(this.locale.getValue(), { useGrouping: true });
82531
82566
 
82532
82567
  return formatter.format(value);
82533
82568
  }
@@ -82547,10 +82582,10 @@ class Localization {
82547
82582
 
82548
82583
  //try to find similar keys
82549
82584
  const similarities = Object.keys(this.json).map(function (key) {
82550
- const distance$1 = distance(key, id);
82585
+ const distance = string_compute_similarity(key, id);
82551
82586
  return {
82552
82587
  key,
82553
- distance: distance$1
82588
+ distance
82554
82589
  };
82555
82590
  });
82556
82591
 
package/package.json CHANGED
@@ -5,7 +5,7 @@
5
5
  "description": "Fully featured ECS game engine written in JavaScript",
6
6
  "type": "module",
7
7
  "author": "Alexander Goldring",
8
- "version": "2.95.1",
8
+ "version": "2.96.0",
9
9
  "main": "build/meep.module.js",
10
10
  "module": "build/meep.module.js",
11
11
  "exports": {
@@ -38,7 +38,6 @@
38
38
  "README.md"
39
39
  ],
40
40
  "dependencies": {
41
- "fastest-levenshtein": "1.0.16",
42
41
  "gl-matrix": "3.4.3",
43
42
  "opentype.js": "1.3.3",
44
43
  "robust-predicates": "3.0.2",
@@ -1 +1 @@
1
- {"version":3,"file":"Quaternion.d.ts","sourceRoot":"","sources":["../../../../src/core/geom/Quaternion.js"],"names":[],"mappings":";AA0BA;IA47CI;;;;OAIG;IACH,kCAFa,UAAU,CAQtB;IAED;;;;;;OAMG;IACH,0BALW,MAAM,KACN,MAAM,KACN,MAAM,GACJ,UAAU,CAQtB;IAED;;;;;;OAMG;IACH,6BALW,UAAU,QACV,UAAU,MACV,UAAU,aACV,MAAM,QAkBhB;IA9+CD;;;;;;;OAOG;IACH,4DAwBC;IAtBG;;;OAGG;IACH,UAAU;IACV;;;OAGG;IACH,UAAU;IACV;;;OAGG;IACH,UAAU;IACV;;;OAGG;IACH,UAAU;IAEV,0DAA6B;IAqBjC,mBAEC;IAlBD,gBAEC;IAkBD,mBAEC;IAlBD,gBAEC;IAkBD,mBAEC;IAlBD,gBAEC;IAkBD,mBAEC;IAlBD,gBAEC;IA+BD;;;;;;;;OAQG;IACH,kBAPW,MAAM,MACN,MAAM,MACN,MAAM,MACN,MAAM,MACN,MAAM,MACN,MAAM,QAiDhB;IAED;;;;;OAKG;IACH,uBAJW,OAAO,QACP,OAAO,QAMjB;IAED;;;;OAIG;IACH,WAHW,UAAU,GACT,MAAM,CAQjB;IAED;;;OAGG;IACH,mBAFW,UAAU,QAKpB;IAED;;OAEG;IACH,eAqBC;IAED;;;;OAIG;IACH,eAHW,UAAU,GACT,MAAM,CAoBjB;IAED;;;;OAIG;IACH,oBAHW,OAAO,SACP,MAAM,QAIhB;IAED;;;;;;OAMG;IACH,mBALW,MAAM,MACN,MAAM,MACN,MAAM,SACN,MAAM,QAwBhB;IAED;;;;;OAKG;IACH,2BAJW,OAAO,SACP,UAAU,SACV,UAAU,QA+BpB;IAED;;;;OAIG;IACH,wBAHW,OAAO,GACL,MAAM,CAYlB;IAED;;;;OAIG;IACH,kBAHW,OAAO,GACL,MAAM,CAkBlB;IAED,kBAWC;IAED;;;;OAIG;IACH,oBAHW,MAAM,GACL,UAAU,CASrB;IAED;;OAEG;IACH,gBAFW,UAAU,QAIpB;IAED;;;;OAIG;IACH,2BAHW,UAAU,UACV,UAAU,QAcpB;IAED;;;;;;;;;;;OAWG;IACH,yBAVW,MAAM,MACN,MAAM,MACN,MAAM,MACN,MAAM,MACN,MAAM,MACN,MAAM,MACN,MAAM,MACN,MAAM,GACL,UAAU,CAYrB;IAED;;;OAGG;IACH,UAFY,MAAM,CASjB;IAED;;;;OAIG;IACH,qBAHW,UAAU,aACV,MAAM,QAIhB;IAED;;;;;OAKG;IACH,4BAJW,OAAO,OACP,OAAO,YACP,OAAO,QAuBjB;IAED;;;;OAIG;IACH,eAHW,OAAO,UACP,OAAO,QAUjB;IAED;;;OAGG;IACH,wBAFsB,MAAM,QAM3B;IAED;;;;;;;OAOG;IACH,kBANW,MAAM,KACN,MAAM,KACN,MAAM,mBAEJ,UAAU,CAmCtB;IAED;;;;OAIG;IACH,yBAFW,OAAO,QA4BjB;IAED;;;OAGG;IACH,yBAFW,OAAO,QA2BjB;IAED;;;OAGG;IACH,yBAFW,OAAO,QA0BjB;IAED;;;;;;OAMG;IACH,mBAJW,MAAM,KACN,MAAM,KACN,MAAM,QAIhB;IAED;;;;;;;;OAQG;IACH,sBAJW,MAAM,KACN,MAAM,KACN,MAAM,QAqBhB;IAED;;;;;;;;OAQG;IACH,sBAJW,MAAM,KACN,MAAM,KACN,MAAM,QAqBhB;IAED;;;;;;;;OAQG;IACH,sBAJW,MAAM,KACN,MAAM,KACN,MAAM,QAqBhB;IAED;;;;;;;;OAQG;IACH,sBAJW,MAAM,KACN,MAAM,KACN,MAAM,QAqBhB;IAED;;;;;;;;OAQG;IACH,sBAJW,MAAM,KACN,MAAM,KACN,MAAM,QAqBhB;IAED;;;;;;;;OAQG;IACH,sBAJW,MAAM,KACN,MAAM,KACN,MAAM,QAqBhB;IAED;;;;OAIG;IACH,yBAHW,OAAO,MACP,OAAO,QA+CjB;IAED;;;;OAIG;IACH,uBAHW,OAAO,MACP,OAAO,QAiEjB;IAED;;;;OAIG;IACH,sBAHW,OAAO,MACP,OAAO,QAwCjB;IAED;;;OAGG;IACH,wCASC;IAED;;;;;;;;;;;;;;OAcG;IACH,6BAXW,MAAM,OACN,MAAM,OACN,MAAM,OACN,MAAM,OACN,MAAM,OACN,MAAM,OACN,MAAM,OACN,MAAM,OACN,MAAM,GACJ,UAAU,CA4EtB;IAED;;;;OAIG;IACH,YAHW,UAAU,KACV,MAAM,QAMhB;IAED;;;;;OAKG;IACH,uBAJW,UAAU,UACV,UAAU,KACV,MAAM,QAgBhB;IAED;;;;;OAKG;IACH,uBAJW,UAAU,MACV,UAAU,KACV,MAAM,QAiDhB;IAGD;;;;OAIG;IACH,aAHW,UAAU,KACV,MAAM,QAIhB;IAED;;;;;;OAMG;IACH,qCAJW,UAAU,KACV,UAAU,KACV,MAAM,QAIhB;IAED;;;OAGG;IACH,iCAIC;IAED;;;;OAIG;IACH,YAHW,UAAU,GACR,UAAU,CAItB;IAED;;;OAGG;IACH,SAFa,UAAU,CAQtB;IAED;;;;;;;OAOG;IACH,OANW,MAAM,KACN,MAAM,KACN,MAAM,KACN,MAAM,GACJ,UAAU,CA+BtB;IAED;;;OAGG;IACH,aAFa,UAAU,CAItB;IAED;;;;;MAOC;IAED,yBAEC;IAED;;;OAGG;IACH,2CAKC;IAED;;;OAGG;IACH,6CAOC;IAED;;;OAGG;IACH,kDAKC;IAED;;;OAGG;IACH,oDAOC;IAED;;;OAGG;IACH,wBAFW,MAAM,QAIhB;IAED;;;OAGG;IACH,kBAFa,MAAM,CAIlB;IAED;;;;OAIG;IACH,qBAHW,MAAM,EAAE,WACR,MAAM,QAShB;IAED;;;;OAIG;IACH,oBAHW,MAAM,EAAE,WACR,MAAM,QAOhB;IAED,oBAEC;IAED;;;;OAIG;IACH,cAHW,UAAU,GACR,OAAO,CAQnB;IAED;;;OAGG;IACH,QAFa,MAAM,CAQlB;IAED;;;;;OAKG;IACH,qBAJW,UAAU,cACV,MAAM,GACL,OAAO,CAIlB;IAED;;;;;;;;;OASG;IACH,uBAKC;IAED;;;;OAIG;IACH,sBAHsB,MAAM,GAChB,UAAU,CAkBrB;IAED,mBAEC;IAwDL,mBAjKe,MAAM,EAAE,WACR,MAAM,UAgKS;IAC9B,iBApJe,MAAM,EAAE,WACR,MAAM,UAmJO;IA96CxB;;OAEG;IACH,sDAOC;CAi6CJ;;kBAOS,UAAU;;mBA3gDD,4BAA4B;oBAU3B,cAAc"}
1
+ {"version":3,"file":"Quaternion.d.ts","sourceRoot":"","sources":["../../../../src/core/geom/Quaternion.js"],"names":[],"mappings":"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"}
@@ -27,35 +27,39 @@ const cos = Math.cos;
27
27
  class Quaternion {
28
28
  /**
29
29
  *
30
- * @param {Number} [x=0]
31
- * @param {Number} [y=0]
32
- * @param {Number} [z=0]
33
- * @param {Number} [w=1]
30
+ * @param {number} [x=0]
31
+ * @param {number} [y=0]
32
+ * @param {number} [z=0]
33
+ * @param {number} [w=1]
34
34
  * @constructor
35
35
  */
36
36
  constructor(x = 0, y = 0, z = 0, w = 1) {
37
37
 
38
38
  /**
39
39
  *
40
- * @type {Number}
40
+ * @type {number}
41
41
  */
42
42
  this.x = x;
43
43
  /**
44
44
  *
45
- * @type {Number}
45
+ * @type {number}
46
46
  */
47
47
  this.y = y;
48
48
  /**
49
49
  *
50
- * @type {Number}
50
+ * @type {number}
51
51
  */
52
52
  this.z = z;
53
53
  /**
54
54
  *
55
- * @type {Number}
55
+ * @type {number}
56
56
  */
57
57
  this.w = w;
58
58
 
59
+ /**
60
+ * @readonly
61
+ * @type {Signal<number, number, number, number, number, number, number, number>}
62
+ */
59
63
  this.onChanged = new Signal();
60
64
  }
61
65
 
@@ -1369,6 +1373,7 @@ class Quaternion {
1369
1373
 
1370
1374
  /**
1371
1375
  * Based on GDC talk from Bungie on destiny, compressing quaternions for animation
1376
+ * @deprecated use `quat_decode_from_uint32` instead
1372
1377
  * @param {number} value
1373
1378
  */
1374
1379
  decodeFromUint32(value) {
@@ -1377,6 +1382,7 @@ class Quaternion {
1377
1382
 
1378
1383
  /**
1379
1384
  * Based on GDC talk from Bungie on destiny, compressing quaternions for animation
1385
+ * @deprecated use `quat_encode_to_uint32` instead
1380
1386
  * @returns {number}
1381
1387
  */
1382
1388
  encodeToUint32() {
@@ -1 +1 @@
1
- {"version":3,"file":"Localization.d.ts","sourceRoot":"","sources":["../../../../src/core/localization/Localization.js"],"names":[],"mappings":"AA6BA;IAEQ;;;OAGG;IACH,cAFU,eAAa,IAAI,CAEH;IAExB,SAAc;IAEd;;;OAGG;IACH,6BAFU,gBAAgB,CAEwB;IAElD;;;OAGG;IACH,QAFU,cAAc,CAEY;IAEpC;;;OAGG;IACH,OAFU,OAAO,CAEA;IAEjB;;;OAGG;IACH,wBAGE;IAGN;;;;OAIG;IACH,4BAEC;IAED;;;;OAIG;IACH,0BAHW,MAAM,GACJ,MAAM,CAMlB;IAED;;;OAGG;IACH,wCAEC;IAED;;;OAGG;IACH,8BAHa,OAAO,CAoBnB;IAED;;;;;;OAMG;IACH,mBAJW,MAAM,SACN,MAAM,gBAgDhB;IAGD;;;OAGG;IACH,gCAFW,MAAM,UAMhB;IAED;;;;;OAKG;IACH,0BA0BC;IAED;;;;;;OAMG;IACH,eALW,MAAM,SACN,MAAM,GAEJ,MAAM,CAoBlB;IAED;;;;OAIG;IACH,eAHW,MAAM,GACL,OAAO,CAIlB;CACJ;iCAnP8B,uBAAuB;2BAJ3B,4BAA4B"}
1
+ {"version":3,"file":"Localization.d.ts","sourceRoot":"","sources":["../../../../src/core/localization/Localization.js"],"names":[],"mappings":"AA6BA;IAEQ;;;OAGG;IACH,cAFU,eAAa,IAAI,CAEH;IAExB,SAAc;IAEd;;;OAGG;IACH,6BAFU,gBAAgB,CAEwB;IAElD;;;OAGG;IACH,QAFU,cAAc,CAEY;IAEpC;;;OAGG;IACH,OAFU,OAAO,CAEA;IAEjB;;;OAGG;IACH,wBAGE;IAGN;;;;OAIG;IACH,4BAEC;IAED;;;;OAIG;IACH,0BAHW,MAAM,GACJ,MAAM,CAMlB;IAED;;;OAGG;IACH,wCAEC;IAED;;;OAGG;IACH,8BAHa,OAAO,CAoBnB;IAED;;;;;;OAMG;IACH,mBAJW,MAAM,SACN,MAAM,gBAgDhB;IAGD;;;OAGG;IACH,gCAFW,MAAM,UAMhB;IAED;;;;;OAKG;IACH,0BA0BC;IAED;;;;;;OAMG;IACH,eALW,MAAM,SACN,MAAM,GAEJ,MAAM,CAoBlB;IAED;;;;OAIG;IACH,eAHW,MAAM,GACL,OAAO,CAIlB;CACJ;iCAnPgC,uBAAuB;2BAL7B,4BAA4B"}
@@ -1,13 +1,13 @@
1
- import {distance as levenshtein_distance} from "fastest-levenshtein";
2
- import {parseTooltipString} from "../../view/tooltip/gml/parser/parseTooltipString.js";
3
- import {assert} from "../assert.js";
4
- import {Cache} from "../cache/Cache.js";
5
- import {computeHashArray} from "../collection/array/computeHashArray.js";
1
+ import { parseTooltipString } from "../../view/tooltip/gml/parser/parseTooltipString.js";
2
+ import { assert } from "../assert.js";
3
+ import { Cache } from "../cache/Cache.js";
4
+ import { computeHashArray } from "../collection/array/computeHashArray.js";
6
5
  import ObservedString from "../model/ObservedString.js";
7
- import {seedVariablesIntoTemplateString} from "../parser/seedVariablesIntoTemplateString.js";
8
- import {STRING_TEMPLATE_VARIABLE_REGEX} from "../parser/STRING_TEMPLATE_VARIABLE_REGEX.js";
9
- import {computeStringHash} from "../primitives/strings/computeStringHash.js";
10
- import {LanguageMetadata} from "./LanguageMetadata.js";
6
+ import { seedVariablesIntoTemplateString } from "../parser/seedVariablesIntoTemplateString.js";
7
+ import { STRING_TEMPLATE_VARIABLE_REGEX } from "../parser/STRING_TEMPLATE_VARIABLE_REGEX.js";
8
+ import { computeStringHash } from "../primitives/strings/computeStringHash.js";
9
+ import { string_compute_similarity } from "../primitives/strings/string_compute_similarity.js";
10
+ import { LanguageMetadata } from "./LanguageMetadata.js";
11
11
 
12
12
  /**
13
13
  * Validation utility method
@@ -176,7 +176,7 @@ export class Localization {
176
176
  * @param {number} value
177
177
  */
178
178
  formatIntegerByThousands(value) {
179
- const formatter = new Intl.NumberFormat(this.locale.getValue(), {useGrouping: true});
179
+ const formatter = new Intl.NumberFormat(this.locale.getValue(), { useGrouping: true });
180
180
 
181
181
  return formatter.format(value);
182
182
  }
@@ -196,7 +196,7 @@ export class Localization {
196
196
 
197
197
  //try to find similar keys
198
198
  const similarities = Object.keys(this.json).map(function (key) {
199
- const distance = levenshtein_distance(key, id);
199
+ const distance = string_compute_similarity(key, id);
200
200
  return {
201
201
  key,
202
202
  distance
@@ -1 +1 @@
1
- {"version":3,"file":"epsilonEquals.d.ts","sourceRoot":"","sources":["../../../../src/core/math/epsilonEquals.js"],"names":[],"mappings":"AAEA;;;;;;GAMG;AACH,iCALW,MAAM,KACN,MAAM,aACN,MAAM,GACJ,OAAO,CAQnB"}
1
+ {"version":3,"file":"epsilonEquals.d.ts","sourceRoot":"","sources":["../../../../src/core/math/epsilonEquals.js"],"names":[],"mappings":"AAEA;;;;;;GAMG;AACH,iCALW,MAAM,KACN,MAAM,aACN,MAAM,GACJ,OAAO,CASnB"}
@@ -11,6 +11,7 @@ export function epsilonEquals(a, b, tolerance) {
11
11
  assert.isNumber(a, 'a');
12
12
  assert.isNumber(b, 'b');
13
13
  assert.isNumber(tolerance, 'tolerance');
14
+ assert.greaterThanOrEqual(tolerance, 0, 'tolerance must be greater than 0');
14
15
 
15
16
  return Math.abs(a - b) <= tolerance;
16
17
  }
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=epsilonEquals.spec.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"epsilonEquals.spec.d.ts","sourceRoot":"","sources":["../../../../src/core/math/epsilonEquals.spec.js"],"names":[],"mappings":""}
@@ -0,0 +1,17 @@
1
+ import { epsilonEquals } from "./epsilonEquals.js";
2
+
3
+ test("basics", () => {
4
+
5
+ expect(epsilonEquals(0, 0, 0)).toBe(true);
6
+ expect(epsilonEquals(0, 1, 0)).toBe(false);
7
+ expect(epsilonEquals(1, 0, 0)).toBe(false);
8
+ expect(epsilonEquals(-1, 0, 0)).toBe(false);
9
+ expect(epsilonEquals(-1, 1, 0)).toBe(false);
10
+ expect(epsilonEquals(1, -1, 0)).toBe(false);
11
+
12
+ expect(epsilonEquals(1, 1.1, 0)).toBe(false);
13
+ expect(epsilonEquals(1, 1, 0.1)).toBe(true);
14
+ expect(epsilonEquals(1, 1.09, 0.1)).toBe(true);
15
+ expect(epsilonEquals(1, 1.11, 0.1)).toBe(false);
16
+
17
+ });
@@ -0,0 +1,6 @@
1
+ /**
2
+ * Higher value means string are more similar
3
+ * @type {(function(string, string): number)}
4
+ */
5
+ export const string_compute_similarity: ((arg0: string, arg1: string) => number);
6
+ //# sourceMappingURL=string_compute_similarity.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"string_compute_similarity.d.ts","sourceRoot":"","sources":["../../../../../src/core/primitives/strings/string_compute_similarity.js"],"names":[],"mappings":"AAEA;;;GAGG;AACH,wCAFU,QAAU,MAAM,QAAE,MAAM,KAAG,MAAM,CAAC,CAEiB"}
@@ -0,0 +1,7 @@
1
+ import { string_jaro_winkler } from "./string_jaro_winkler.js";
2
+
3
+ /**
4
+ * Higher value means string are more similar
5
+ * @type {(function(string, string): number)}
6
+ */
7
+ export const string_compute_similarity = string_jaro_winkler;
@@ -0,0 +1,8 @@
1
+ /**
2
+ * Calculate the Jaro-Winkler distance between two strings
3
+ * @param {string} first The string to compare
4
+ * @param {string} second The string to compare with
5
+ * @returns {number} similarity score, higher value means strings are more similar
6
+ */
7
+ export function string_jaro_winkler(first: string, second: string): number;
8
+ //# sourceMappingURL=string_jaro_winkler.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"string_jaro_winkler.d.ts","sourceRoot":"","sources":["../../../../../src/core/primitives/strings/string_jaro_winkler.js"],"names":[],"mappings":"AAKA;;;;;GAKG;AACH,2CAJW,MAAM,UACN,MAAM,GACJ,MAAM,CA6BlB"}