@marko/compiler 5.39.44 → 5.39.46

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/babel-utils.d.ts CHANGED
@@ -85,6 +85,8 @@ export interface TaglibLookup {
85
85
  tagName: string,
86
86
  callback: (attr: AttributeDefinition, tag: TagDefinition) => void,
87
87
  ): void;
88
+ exclusiveTagDiscoveryDirs: undefined | false | string;
89
+ manualTagsDirs: undefined | Set<string>;
88
90
  }
89
91
 
90
92
  export interface Attribute {
@@ -220,7 +220,8 @@ function getMarkoFile(code, fileOpts, markoOpts) {
220
220
  deps: [],
221
221
  tags: [],
222
222
  watchFiles: [],
223
- diagnostics: []
223
+ diagnostics: [],
224
+ api: translator.preferAPI
224
225
  };
225
226
 
226
227
  (0, _parser.parseMarko)(file);
@@ -51,27 +51,13 @@ function getAllDependencyNames(pkg) {
51
51
  }
52
52
 
53
53
  function find(dirname, registeredTaglibs, tagDiscoveryDirs) {
54
- var found = findCache[dirname];
55
- if (found) {
56
- return found;
54
+ var cached = findCache[dirname];
55
+ if (cached) {
56
+ return cached.taglibs;
57
57
  }
58
58
 
59
- found = [];
60
-
61
- var added = {};
62
-
63
- var helper = {
64
- addTaglib: function (taglib) {
65
- if (added[taglib.id]) {
66
- return;
67
- }
68
-
69
- added[taglib.id] = true;
70
- found.push(taglib);
71
- },
72
- foundTaglibPackages: {}
73
- };
74
-
59
+ var taglibs = [];
60
+ var added = new Set();
75
61
  var rootDirname = markoModules.cwd; // Don't search up past this directory
76
62
  var rootPkg = getModuleRootPackage(dirname);
77
63
  if (rootPkg) {
@@ -80,27 +66,41 @@ function find(dirname, registeredTaglibs, tagDiscoveryDirs) {
80
66
 
81
67
  // First walk up the directory tree looking for marko.json files or components/ directories
82
68
  let curDirname = dirname;
69
+ // exclusiveTagDiscoveryDirs is used for the interop to detect if `tags` directories are used exclusively when finding tags
70
+ let exclusiveTagDiscoveryDirs = undefined;
83
71
 
84
72
  while (true) {
85
73
  if (!excludedDirs[curDirname]) {
86
74
  let taglibPath = nodePath.join(curDirname, "marko.json");
87
75
  let taglib;
76
+ let manualTagsDir;
88
77
 
89
78
  if (existsSync(taglibPath)) {
90
79
  taglib = taglibLoader.loadTaglibFromFile(taglibPath);
91
- helper.addTaglib(taglib);
80
+ manualTagsDir = taglib.tagsDir;
81
+ addTaglib(taglib);
92
82
  }
93
83
 
94
- if (!taglib || taglib.tagsDir === undefined) {
84
+ if (manualTagsDir === undefined) {
95
85
  for (const tagDiscoveryDir of tagDiscoveryDirs) {
96
86
  const componentsPath = nodePath.join(curDirname, tagDiscoveryDir);
97
87
 
98
88
  if (existsSync(componentsPath) && !excludedDirs[componentsPath]) {
99
- helper.addTaglib(
89
+ if (exclusiveTagDiscoveryDirs !== false) {
90
+ if (exclusiveTagDiscoveryDirs === undefined) {
91
+ exclusiveTagDiscoveryDirs = tagDiscoveryDir;
92
+ } else if (exclusiveTagDiscoveryDirs !== tagDiscoveryDir) {
93
+ exclusiveTagDiscoveryDirs = false;
94
+ }
95
+ }
96
+
97
+ addTaglib(
100
98
  taglibLoader.loadTaglibFromDir(curDirname, tagDiscoveryDir)
101
99
  );
102
100
  }
103
101
  }
102
+ } else if (manualTagsDir) {
103
+ exclusiveTagDiscoveryDirs = false;
104
104
  }
105
105
  }
106
106
 
@@ -120,26 +120,41 @@ function find(dirname, registeredTaglibs, tagDiscoveryDirs) {
120
120
  getAllDependencyNames(rootPkg).forEach((name) => {
121
121
  if (!excludedPackages[name]) {
122
122
  let taglibPath = markoModules.tryResolve(
123
- nodePath.join(name, "marko.json"),
123
+ name + "/marko.json",
124
124
  rootPkg.__dirname
125
125
  );
126
126
  if (taglibPath) {
127
127
  var taglib = taglibLoader.loadTaglibFromFile(taglibPath, true);
128
- helper.addTaglib(taglib);
128
+ addTaglib(taglib);
129
129
  }
130
130
  }
131
131
  });
132
132
  }
133
133
 
134
134
  for (let i = registeredTaglibs.length; i--;) {
135
- helper.addTaglib(registeredTaglibs[i]);
135
+ addTaglib(registeredTaglibs[i]);
136
136
  }
137
137
 
138
- findCache[dirname] = found;
138
+ findCache[dirname] = { exclusiveTagDiscoveryDirs, taglibs };
139
+ return taglibs;
139
140
 
140
- return found;
141
+ function addTaglib(taglib) {
142
+ if (!added.has(taglib.id)) {
143
+ added.add(taglib.id);
144
+ taglibs.push(taglib);
145
+ }
146
+ }
141
147
  }
142
148
 
149
+ find._withMeta = function findWithMeta(
150
+ dirname,
151
+ registeredTaglibs,
152
+ tagDiscoveryDirs)
153
+ {
154
+ find(dirname, registeredTaglibs, tagDiscoveryDirs);
155
+ return findCache[dirname];
156
+ };
157
+
143
158
  function clearCache() {
144
159
  findCache = {};
145
160
  }
@@ -32,6 +32,7 @@ function buildLookup(dirname, requestedTranslator, onError) {
32
32
  }
33
33
 
34
34
  let taglibsForDir = loadedTranslatorsTaglibs.get(translator);
35
+ let exclusiveTagDiscoveryDirs = undefined;
35
36
 
36
37
  if (!taglibsForDir) {
37
38
  loadedTranslatorsTaglibs.set(
@@ -45,11 +46,13 @@ function buildLookup(dirname, requestedTranslator, onError) {
45
46
  }
46
47
 
47
48
  runAndCatchErrors(() => {
48
- taglibsForDir = _finder2.default.find(
49
+ const foundMeta = _finder2.default.find._withMeta(
49
50
  dirname,
50
51
  taglibsForDir,
51
52
  translator.tagDiscoveryDirs
52
53
  );
54
+ taglibsForDir = foundMeta.taglibs;
55
+ exclusiveTagDiscoveryDirs = foundMeta.exclusiveTagDiscoveryDirs;
53
56
  }, onError);
54
57
 
55
58
  const cacheKey = taglibsForDir.
@@ -60,6 +63,7 @@ function buildLookup(dirname, requestedTranslator, onError) {
60
63
 
61
64
  if (!lookup) {
62
65
  lookup = lookupCache[cacheKey] = new _lookup.default();
66
+ lookup.exclusiveTagDiscoveryDirs = exclusiveTagDiscoveryDirs;
63
67
  for (let i = taglibsForDir.length; i--;) {
64
68
  const taglib = taglibsForDir[i];
65
69
  lookup.addTaglib(taglib);
@@ -39,6 +39,7 @@ class Taglib {
39
39
  this.patternAttributes = [];
40
40
  this.imports = null;
41
41
  this.importsLookup = null;
42
+ this.tagsDir = undefined;
42
43
  }
43
44
 
44
45
  addAttribute(attribute) {
@@ -1,5 +1,6 @@
1
1
  "use strict";
2
2
 
3
+ var nodePath = require("path");
3
4
  var ok = require("assert").ok;
4
5
  var extend = require("raptor-util/extend");
5
6
  var taglibTypes = require("../loader/types");
@@ -51,6 +52,8 @@ class TaglibLookup {
51
52
  this.taglibsById = {};
52
53
 
53
54
  this._sortedTags = undefined;
55
+ this.exclusiveTagDiscoveryDirs = undefined;
56
+ this.manualTagsDirs = undefined;
54
57
  }
55
58
 
56
59
  hasTaglib(taglib) {
@@ -96,6 +99,16 @@ class TaglibLookup {
96
99
  return;
97
100
  }
98
101
 
102
+ if (
103
+ taglib.dirname &&
104
+ typeof taglib.tagsDir === "string" &&
105
+ /[/\\]tags[/\\]?$/.test(taglib.tagsDir))
106
+ {
107
+ (this.manualTagsDirs || (this.manualTagsDirs = new Set())).add(
108
+ nodePath.resolve(taglib.dirname, taglib.tagsDir)
109
+ );
110
+ }
111
+
99
112
  // console.log("TAGLIB:", taglib);
100
113
 
101
114
  this._sortedTags = undefined;
package/index.d.ts CHANGED
@@ -29,6 +29,7 @@ export interface MarkoMeta {
29
29
  deps: Array<string | Dep | VirtualDep>;
30
30
  analyzedTags?: [string, ...string[]];
31
31
  diagnostics: Diagnostic[];
32
+ api: undefined | string;
32
33
  }
33
34
 
34
35
  export interface CompileResult {
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@marko/compiler",
3
- "version": "5.39.44",
3
+ "version": "5.39.46",
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.38.0"
90
+ "marko": "^5.38.1"
91
91
  },
92
92
  "engines": {
93
93
  "node": "18 || 20 || >=22"
@@ -112,7 +112,10 @@
112
112
  "types": "./register.d.ts",
113
113
  "default": "./src/register.js"
114
114
  },
115
- "./modules": "./modules.js",
115
+ "./modules": {
116
+ "types": "./modules.d.ts",
117
+ "default": "./modules.js"
118
+ },
116
119
  "./babel-types": "./babel-types.d.ts",
117
120
  "./dist/types": "./dist/types.d.ts",
118
121
  "./package": "./package.json",