@marko/compiler 5.39.21 → 5.39.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,5 +1,4 @@
1
1
  "use strict";var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault");exports.__esModule = true;exports.default = void 0;var _traverse = _interopRequireDefault(require("@babel/traverse"));
2
- var _crypto = require("crypto");
3
2
  var _path = _interopRequireDefault(require("path"));
4
3
 
5
4
  var t = _interopRequireWildcard(require("../babel-types"));
@@ -10,6 +9,7 @@ var _taglib = require("../taglib");
10
9
  var _config = _interopRequireDefault(require("../taglib/config"));
11
10
  var _buildCodeFrame = require("../util/build-code-frame");
12
11
  var _mergeErrors = _interopRequireDefault(require("../util/merge-errors"));
12
+ var _quickHash = require("../util/quick-hash");
13
13
  var _shouldOptimize = _interopRequireDefault(require("../util/should-optimize"));
14
14
  var _tryLoadTranslator = _interopRequireDefault(require("../util/try-load-translator"));
15
15
  var _file = require("./file");
@@ -159,10 +159,8 @@ function getMarkoFile(code, fileOpts, markoOpts) {
159
159
  const isMigrate = markoOpts.output === "migrate";
160
160
  const canCache = !(isSource || isMigrate);
161
161
  const id = (0, _tags.getTemplateId)(markoOpts, filename);
162
- const contentHash = canCache && (0, _crypto.createHash)("MD5").update(code).digest("hex");
163
- const cacheKey = canCache && (0, _crypto.createHash)("MD5").update(id).digest("hex");
164
-
165
- let cached = canCache && compileCache.get(cacheKey);
162
+ const contentHash = canCache && new _quickHash.Hash().update(code).digest();
163
+ let cached = canCache && compileCache.get(id);
166
164
 
167
165
  if (cached) {
168
166
  if (cached.contentHash !== contentHash) {
@@ -302,7 +300,7 @@ function getMarkoFile(code, fileOpts, markoOpts) {
302
300
  }
303
301
  }
304
302
 
305
- compileCache.set(cacheKey, {
303
+ compileCache.set(id, {
306
304
  time: Date.now(),
307
305
  file,
308
306
  contentHash
@@ -313,7 +311,7 @@ function getMarkoFile(code, fileOpts, markoOpts) {
313
311
  file.___compileStage = "analyze";
314
312
  traverseAll(file, translator.analyze);
315
313
  } catch (e) {
316
- compileCache.delete(cacheKey);
314
+ compileCache.delete(id);
317
315
  throw e;
318
316
  }
319
317
  }
@@ -1,9 +1,9 @@
1
1
  "use strict";var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault");exports.__esModule = true;exports.findAttributeTags = findAttributeTags;exports.findParentTag = findParentTag;exports.getArgOrSequence = getArgOrSequence;exports.getFullyResolvedTagName = getFullyResolvedTagName;exports.getMacroIdentifier = getMacroIdentifier;exports.getMacroIdentifierForName = getMacroIdentifierForName;exports.getTagDef = getTagDef;exports.getTagTemplate = getTagTemplate;exports.getTemplateId = getTemplateId;exports.hasMacro = hasMacro;exports.isAttributeTag = isAttributeTag;exports.isDynamicTag = isDynamicTag;exports.isLoopTag = isLoopTag;exports.isMacroTag = isMacroTag;exports.isNativeTag = isNativeTag;exports.isTransparentTag = isTransparentTag;exports.loadFileForImport = loadFileForImport;exports.loadFileForTag = loadFileForTag;exports.registerMacro = registerMacro;exports.resolveTagImport = resolveTagImport;var _compiler = require("@marko/compiler");
2
2
  var _modules = _interopRequireDefault(require("@marko/compiler/modules"));
3
- var _crypto = require("crypto");
4
3
  var _lassoPackageRoot = require("lasso-package-root");
5
4
  var _path = require("path");
6
5
 
6
+ var _quickHash = require("../util/quick-hash");
7
7
  var _diagnostics = require("./diagnostics");
8
8
  var _imports = require("./imports");
9
9
  var _taglib = require("./taglib");
@@ -350,12 +350,12 @@ function getTemplateId(opts, request, child) {
350
350
  }
351
351
  }
352
352
 
353
- const hash = (0, _crypto.createHash)("shake256", templateIdHashOpts).update(id);
353
+ const hash = new _quickHash.Hash().update(id);
354
354
  if (child) {
355
355
  hash.update(child);
356
356
  }
357
357
 
358
- return encodeTemplateId(parseInt(hash.digest("hex"), 16));
358
+ return encodeTemplateId(hash.digest());
359
359
  }
360
360
 
361
361
  return id + (child ? `_${child}` : "");
@@ -408,21 +408,16 @@ function createNewFileOpts(opts, filename) {
408
408
  };
409
409
  }
410
410
 
411
- function encodeTemplateId(index) {
412
- const encodeChars =
413
- "abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ$_0123456789";
414
- const encodeLen = encodeChars.length;
415
- const encodeStartLen = encodeLen - 11; // Avoids chars that cannot start a property name and _ (reserved).
416
- let cur = index;
417
- let mod = cur % encodeStartLen;
418
- let id = encodeChars[mod];
419
- cur = (cur - mod) / encodeStartLen;
420
-
421
- while (cur > 0) {
422
- mod = cur % encodeLen;
423
- id += encodeChars[mod];
424
- cur = (cur - mod) / encodeLen;
411
+ function encodeTemplateId(id) {
412
+ const c = "abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ$_0123456789";
413
+ let n = id;
414
+ let r = c[n % 53]; // Avoids chars that cannot start a property name and _ (reserved).
415
+ n = Math.floor(n / 53);
416
+
417
+ // ensure at most 7 characters.
418
+ for (let i = 6; n > 0 && i--; n = Math.floor(n / 64)) {
419
+ r += c[n & 63];
425
420
  }
426
421
 
427
- return id;
422
+ return r;
428
423
  }
@@ -0,0 +1,35 @@
1
+ "use strict";exports.__esModule = true;exports.Hash = void 0; /**
2
+ * Outputs a noncryptographic hash as a safe integer (<= Number.MAX_SAFE_INTEGER).
3
+ */
4
+ class Hash {
5
+ a = 0xdeadbeef;
6
+ b = 0x9e3779b9;
7
+
8
+ update(s) {
9
+ let a = this.a;
10
+ let b = this.b;
11
+ for (let i = s.length; i--;) {
12
+ a = Math.imul(a ^ s.charCodeAt(i), 0x85ebca6b);
13
+ a = a << 13 | a >>> 19;
14
+ b = Math.imul(b ^ a, 0xc2b2ae35);
15
+ b = b << 17 | b >>> 15;
16
+ a ^= b >>> 11;
17
+ b ^= a >>> 7;
18
+ }
19
+
20
+ this.a = a;
21
+ this.b = b;
22
+ return this;
23
+ }
24
+
25
+ digest() {
26
+ let a = this.a;
27
+ let b = this.b;
28
+ a = Math.imul(a ^ b, 0x27d4eb2f);
29
+ a ^= a >>> 16;
30
+ b = Math.imul(b ^ a, 0x165667b1);
31
+ b ^= b >>> 15;
32
+ a = Math.imul(a ^ b >>> 13, 0x5bd1e995);
33
+ return (b & 0x1fffff) * 0x100000000 + a;
34
+ }
35
+ }exports.Hash = Hash;
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@marko/compiler",
3
- "version": "5.39.21",
3
+ "version": "5.39.22",
4
4
  "description": "Marko template to JS compiler.",
5
5
  "keywords": [
6
6
  "babel",
@@ -87,7 +87,7 @@
87
87
  "source-map-support": "^0.5.21"
88
88
  },
89
89
  "devDependencies": {
90
- "marko": "^5.37.32"
90
+ "marko": "^5.37.33"
91
91
  },
92
92
  "engines": {
93
93
  "node": "18 || 20 || >=22"