@marko/translator-default 5.32.5 → 5.32.7

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/index.js CHANGED
@@ -1,4 +1,4 @@
1
- "use strict";var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault");exports.__esModule = true;exports.analyze = void 0;exports.getRuntimeEntryFiles = getRuntimeEntryFiles;exports.translate = exports.taglibs = void 0;var _path = require("path");
1
+ "use strict";var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault");exports.__esModule = true;exports.analyze = void 0;exports.getRuntimeEntryFiles = getRuntimeEntryFiles;exports.translate = exports.taglibs = exports.internalEntryBuilder = void 0;var _path = require("path");
2
2
  var _babelUtils = require("@marko/babel-utils");
3
3
 
4
4
 
@@ -25,12 +25,13 @@ var _placeholder = _interopRequireDefault(require("./placeholder"));
25
25
  var _scriptlet = _interopRequireDefault(require("./scriptlet"));
26
26
  var _tag = _interopRequireDefault(require("./tag"));
27
27
  var _text = _interopRequireDefault(require("./text"));
28
- var _addDependencies = _interopRequireDefault(require("./util/add-dependencies"));
28
+ var _addDependencies = _interopRequireWildcard(require("./util/add-dependencies"));exports.internalEntryBuilder = _addDependencies.entryBuilder;
29
29
  var _getComponentFiles = _interopRequireDefault(require("./util/get-component-files"));
30
30
  var _optimizeHtmlWrites = require("./util/optimize-html-writes");
31
31
  var _optimizeVdomCreate = require("./util/optimize-vdom-create");
32
32
 
33
- var _taglib = _interopRequireDefault(require("./taglib"));exports.taglibs = _taglib.default;
33
+ var _taglib = _interopRequireDefault(require("./taglib"));exports.taglibs = _taglib.default;function _getRequireWildcardCache(e) {if ("function" != typeof WeakMap) return null;var r = new WeakMap(),t = new WeakMap();return (_getRequireWildcardCache = function (e) {return e ? t : r;})(e);}function _interopRequireWildcard(e, r) {if (!r && e && e.__esModule) return e;if (null === e || "object" != typeof e && "function" != typeof e) return { default: e };var t = _getRequireWildcardCache(r);if (t && t.has(e)) return t.get(e);var n = { __proto__: null },a = Object.defineProperty && Object.getOwnPropertyDescriptor;for (var u in e) if ("default" !== u && Object.prototype.hasOwnProperty.call(e, u)) {var i = a ? Object.getOwnPropertyDescriptor(e, u) : null;i && (i.get || i.set) ? Object.defineProperty(n, u, i) : n[u] = e[u];}return n.default = e, t && t.set(e, n), n;}
34
+
34
35
 
35
36
  const analyze = exports.analyze = {
36
37
  Program: {
@@ -1,4 +1,4 @@
1
- "use strict";var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault");exports.__esModule = true;exports.default = void 0;var _path = _interopRequireDefault(require("path"));
1
+ "use strict";var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault");exports.__esModule = true;exports.entryBuilder = exports.default = void 0;var _path = _interopRequireDefault(require("path"));
2
2
  var _babelUtils = require("@marko/babel-utils");
3
3
 
4
4
 
@@ -6,121 +6,155 @@ var _babelUtils = require("@marko/babel-utils");
6
6
 
7
7
  var _compiler = require("@marko/compiler");
8
8
  var _magicString = _interopRequireDefault(require("magic-string"));
9
- var _resolveFrom = _interopRequireDefault(require("resolve-from"));var _default =
9
+ var _resolveFrom = _interopRequireDefault(require("resolve-from"));
10
+ const kEntryState = Symbol();var _default =
10
11
 
11
12
  (entryFile, isHydrate) => {
12
- const { resolveVirtualDependency, hydrateIncludeImports, hydrateInit } =
13
- entryFile.markoOpts;
14
13
  const program = entryFile.path;
15
- const shouldIncludeImport = toTestFn(hydrateIncludeImports);
16
- const resolvedDeps = new Set();
17
- const body = [];
14
+ const programNode = program.node;
18
15
 
19
16
  if (!isHydrate) {
20
- scanBrowserDeps(entryFile);
17
+ const imports = new Set();
18
+ const body = [];
19
+ addBrowserImports(imports, body, entryFile, entryFile);
21
20
  if (body.length) {
22
- program.node.body = body.concat(program.node.body);
21
+ programNode.body = body.concat(programNode.body);
23
22
  }
24
23
  return;
25
24
  }
26
25
 
27
- const hydratedTemplates = new Set();
28
- const watchFiles = new Set();
29
- let hasComponents = false;
30
- let splitComponentIndex = 0;
31
-
32
- scanHydrateDeps(entryFile);
33
-
34
- if (hasComponents) {
35
- const initId = _compiler.types.identifier("init");
36
- const markoComponentsImport = importPath(
37
- resolvePath(entryFile, "marko/src/runtime/components/index.js")
38
- );
39
- if (splitComponentIndex) {
40
- markoComponentsImport.specifiers.push(
41
- _compiler.types.importSpecifier(_compiler.types.identifier("register"), _compiler.types.identifier("register"))
42
- );
43
- }
44
-
45
- body.unshift(markoComponentsImport);
46
-
47
- if (hydrateInit) {
48
- markoComponentsImport.specifiers.push(_compiler.types.importSpecifier(initId, initId));
49
- body.push(
50
- _compiler.types.expressionStatement(
51
- _compiler.types.callExpression(
52
- initId,
53
- entryFile.markoOpts.runtimeId ?
54
- [_compiler.types.stringLiteral(entryFile.markoOpts.runtimeId)] :
55
- []
26
+ const visitedFiles = new Set([
27
+ (0, _babelUtils.resolveRelativePath)(entryFile, entryFile.opts.filename)]
28
+ );
29
+ entryBuilder.visit(entryFile, entryFile, function visitChild(resolved) {
30
+ if (!visitedFiles.has(resolved)) {
31
+ visitedFiles.add(resolved);
32
+ const file = (0, _babelUtils.loadFileForImport)(entryFile, resolved);
33
+ if (file) {
34
+ entryBuilder.visit(file, entryFile, (id) =>
35
+ visitChild(
36
+ (0, _babelUtils.resolveRelativePath)(
37
+ entryFile,
38
+ _path.default.join(file.opts.filename, "..", id)
56
39
  )
57
40
  )
58
- );
41
+ );
42
+ }
59
43
  }
60
- }
44
+ });
61
45
 
62
- entryFile.metadata.marko.watchFiles = Array.from(watchFiles);
63
- program.node.body = body;
46
+ programNode.body = entryBuilder.build(entryFile);
64
47
  program.skip();
48
+ };exports.default = _default;
65
49
 
66
- function scanHydrateDeps(file) {
67
- const meta = file.metadata.marko;
68
- const resolved = (0, _babelUtils.resolveRelativePath)(entryFile, file.opts.filename);
69
- if (hydratedTemplates.has(resolved)) return;
70
-
71
- hydratedTemplates.add(resolved);
50
+ const entryBuilder = exports.entryBuilder = {
51
+ build(entryFile) {
52
+ const state = entryFile[kEntryState];
53
+ if (!state) {
54
+ throw entryFile.path.buildCodeFrameError(
55
+ "Unable to build hydrate code, no files were visited before finalizing the build"
56
+ );
57
+ }
58
+ const { markoOpts } = entryFile;
59
+ const entryMarkoMeta = entryFile.metadata.marko;
60
+ const { body } = state;
61
+ entryMarkoMeta.watchFiles = Array.from(state.watchFiles);
62
+
63
+ if (state.hasComponents) {
64
+ const initId = _compiler.types.identifier("init");
65
+ const markoComponentsImport = importPath(
66
+ (0, _babelUtils.resolveRelativePath)(entryFile, "marko/src/runtime/components/index.js")
67
+ );
68
+ if (state.splitComponentIndex) {
69
+ markoComponentsImport.specifiers.push(
70
+ _compiler.types.importSpecifier(_compiler.types.identifier("register"), _compiler.types.identifier("register"))
71
+ );
72
+ }
72
73
 
73
- if (meta.component) {
74
- hasComponents = true;
74
+ body.unshift(markoComponentsImport);
75
+
76
+ if (markoOpts.hydrateInit) {
77
+ markoComponentsImport.specifiers.push(
78
+ _compiler.types.importSpecifier(initId, initId)
79
+ );
80
+ body.push(
81
+ _compiler.types.expressionStatement(
82
+ _compiler.types.callExpression(
83
+ initId,
84
+ markoOpts.runtimeId ? [_compiler.types.stringLiteral(markoOpts.runtimeId)] : []
85
+ )
86
+ )
87
+ );
88
+ }
89
+ }
75
90
 
76
- if (_path.default.basename(meta.component) === _path.default.basename(file.opts.filename)) {
91
+ return body;
92
+ },
93
+ visit(file, entryFile, visitChild) {
94
+ const fileMeta = file.metadata.marko;
95
+ const fileName = file.opts.filename;
96
+ const state = entryFile[kEntryState] ||= {
97
+ shouldIncludeImport: toTestFn(file.markoOpts.hydrateIncludeImports),
98
+ watchFiles: new Set(),
99
+ imports: new Set(),
100
+ hasComponents: false,
101
+ splitComponentIndex: 0,
102
+ body: []
103
+ };
104
+
105
+ const { watchFiles, imports, body } = state;
106
+
107
+ if (fileMeta.component) {
108
+ state.hasComponents = true;
109
+
110
+ if (_path.default.basename(fileMeta.component) === _path.default.basename(fileName)) {
77
111
  // Stateful component.
78
- addDep(resolved);
112
+ addImport(imports, body, (0, _babelUtils.resolveRelativePath)(entryFile, fileName));
79
113
  return;
80
114
  }
81
115
  }
82
116
 
83
- watchFiles.add(file.opts.filename);
117
+ watchFiles.add(fileName);
84
118
 
85
- for (const watchFile of meta.watchFiles) {
119
+ for (const watchFile of fileMeta.watchFiles) {
86
120
  watchFiles.add(watchFile);
87
121
  }
88
122
 
89
- scanBrowserDeps(file);
123
+ addBrowserImports(imports, body, file, entryFile);
90
124
 
91
125
  for (const child of file.path.node.body) {
92
126
  if (_compiler.types.isImportDeclaration(child)) {
93
127
  const { value } = child.source;
94
- if (shouldIncludeImport(value)) {
95
- addDep(resolvePath(file, value));
128
+ if (state.shouldIncludeImport(value)) {
129
+ addImport(
130
+ imports,
131
+ body,
132
+ resolveRelativeToEntry(entryFile, file, value)
133
+ );
96
134
  }
97
135
  }
98
136
  }
99
137
 
100
- for (const tag of meta.tags) {
138
+ for (const tag of fileMeta.tags) {
101
139
  if (tag.endsWith(".marko")) {
102
- if (!hydratedTemplates.has(resolvePath(file, tag))) {
103
- scanHydrateDeps((0, _babelUtils.loadFileForImport)(file, tag));
104
- }
140
+ visitChild(tag);
105
141
  } else {
106
142
  const importedTemplates = tryGetTemplateImports(file, tag);
107
143
  if (importedTemplates) {
108
144
  for (const templateFile of importedTemplates) {
109
- if (!hydratedTemplates.has(resolvePath(file, templateFile))) {
110
- scanHydrateDeps((0, _babelUtils.loadFileForImport)(file, templateFile));
111
- }
145
+ visitChild(templateFile);
112
146
  }
113
147
  }
114
148
  }
115
149
  }
116
150
 
117
- if (meta.component) {
151
+ if (fileMeta.component) {
118
152
  // Split component
119
153
  const splitComponentId = _compiler.types.identifier(
120
- `component_${splitComponentIndex++}`
154
+ `component_${state.splitComponentIndex++}`
121
155
  );
122
156
  const splitComponentImport = importPath(
123
- resolvePath(file, meta.component)
157
+ resolveRelativeToEntry(entryFile, file, fileMeta.component)
124
158
  );
125
159
  splitComponentImport.specifiers.push(
126
160
  _compiler.types.importDefaultSpecifier(splitComponentId)
@@ -129,78 +163,75 @@ var _resolveFrom = _interopRequireDefault(require("resolve-from"));var _default
129
163
  splitComponentImport,
130
164
  _compiler.types.expressionStatement(
131
165
  _compiler.types.callExpression(_compiler.types.identifier("register"), [
132
- _compiler.types.stringLiteral(meta.id),
166
+ _compiler.types.stringLiteral(fileMeta.id),
133
167
  splitComponentId]
134
168
  )
135
169
  )
136
170
  );
137
171
  }
138
172
  }
173
+ };
174
+
175
+ function addBrowserImports(seenImports, body, file, entryFile) {
176
+ const { filename, sourceMaps } = file.opts;
177
+ let s;
178
+
179
+ for (let dep of file.metadata.marko.deps) {
180
+ if (typeof dep !== "string") {
181
+ const { virtualPath } = dep;
182
+ let { code } = dep;
183
+ let map;
184
+
185
+ if (sourceMaps && dep.startPos !== undefined) {
186
+ s = s || new _magicString.default(file.code, { source: filename });
187
+ map = s.snip(dep.startPos, dep.endPos).generateMap({
188
+ source: filename,
189
+ includeContent: true
190
+ });
139
191
 
140
- function scanBrowserDeps(file) {
141
- const { filename, sourceMaps } = file.opts;
142
- let s;
143
-
144
- for (let dep of file.metadata.marko.deps) {
145
- if (typeof dep !== "string") {
146
- const { virtualPath } = dep;
147
- let { code } = dep;
148
- let map;
149
-
150
- if (sourceMaps && dep.startPos !== undefined) {
151
- s = s || new _magicString.default(file.code, { source: filename });
152
- map = s.snip(dep.startPos, dep.endPos).generateMap({
153
- source: filename,
154
- includeContent: true
155
- });
156
-
157
- if (sourceMaps === "inline" || sourceMaps === "both") {
158
- code += dep.style ?
159
- `\n/*# sourceMappingURL=${map.toUrl()}*/` :
160
- `\n//# sourceMappingURL=${map.toUrl()}`;
161
-
162
- if (sourceMaps === "inline") {
163
- map = undefined;
164
- }
192
+ if (sourceMaps === "inline" || sourceMaps === "both") {
193
+ code += dep.style ?
194
+ `\n/*# sourceMappingURL=${map.toUrl()}*/` :
195
+ `\n//# sourceMappingURL=${map.toUrl()}`;
196
+
197
+ if (sourceMaps === "inline") {
198
+ map = undefined;
165
199
  }
166
200
  }
201
+ }
167
202
 
168
- dep = resolveVirtualDependency(filename, {
169
- map,
170
- code,
171
- virtualPath
172
- });
203
+ dep = file.markoOpts.resolveVirtualDependency(filename, {
204
+ map,
205
+ code,
206
+ virtualPath
207
+ });
173
208
 
174
- if (!dep) {
175
- continue;
176
- }
177
- } else if (dep.startsWith("package:")) {
209
+ if (!dep) {
178
210
  continue;
179
211
  }
180
-
181
- addDep(resolvePath(file, dep));
212
+ } else if (dep.startsWith("package:")) {
213
+ continue;
182
214
  }
183
- }
184
215
 
185
- function addDep(resolved) {
186
- if (resolvedDeps.has(resolved)) return;
187
- resolvedDeps.add(resolved);
188
- body.push(importPath(resolved));
216
+ addImport(seenImports, body, resolveRelativeToEntry(entryFile, file, dep));
189
217
  }
218
+ }
190
219
 
191
- function resolvePath(file, req) {
192
- return file === entryFile ?
193
- (0, _babelUtils.resolveRelativePath)(file, req) :
194
- (0, _babelUtils.resolveRelativePath)(
195
- entryFile,
196
- _path.default.join(file.opts.filename, "..", req)
197
- );
198
- }
220
+ function addImport(seenImports, body, resolved) {
221
+ if (seenImports.has(resolved)) return;
222
+ seenImports.add(resolved);
223
+ body.push(importPath(resolved));
224
+ }
199
225
 
200
- function importPath(path) {
201
- return _compiler.types.importDeclaration([], _compiler.types.stringLiteral(path));
202
- }
203
- };exports.default = _default;
226
+ function resolveRelativeToEntry(entryFile, file, req) {
227
+ return file === entryFile ?
228
+ (0, _babelUtils.resolveRelativePath)(file, req) :
229
+ (0, _babelUtils.resolveRelativePath)(entryFile, _path.default.join(file.opts.filename, "..", req));
230
+ }
231
+
232
+ function importPath(path) {
233
+ return _compiler.types.importDeclaration([], _compiler.types.stringLiteral(path));
234
+ }
204
235
 
205
236
  function tryGetTemplateImports(file, rendererRelativePath) {
206
237
  const resolvedRendererPath = _path.default.join(
@@ -216,7 +247,7 @@ function tryGetTemplateImports(file, rendererRelativePath) {
216
247
  file.markoOpts.fileSystem.readFileSync(resolvedRendererPath, "utf-8")
217
248
  )) {
218
249
  if (statement.type === "ImportDeclaration") {
219
- addImport(statement.source.value);
250
+ addTemplateImport(statement.source.value);
220
251
  } else {
221
252
  _compiler.types.traverseFast(statement, (node) => {
222
253
  if (
@@ -230,7 +261,7 @@ function tryGetTemplateImports(file, rendererRelativePath) {
230
261
  node.arguments.length === 1 &&
231
262
  node.arguments[0].type === "StringLiteral")
232
263
  {
233
- addImport(node.arguments[0].value);
264
+ addTemplateImport(node.arguments[0].value);
234
265
  }
235
266
  });
236
267
  }
@@ -241,7 +272,7 @@ function tryGetTemplateImports(file, rendererRelativePath) {
241
272
  }
242
273
  return templateImports;
243
274
 
244
- function addImport(request) {
275
+ function addTemplateImport(request) {
245
276
  if (request.endsWith(".marko")) {
246
277
  const resolvedTemplatePath =
247
278
  request[0] === "." ?
package/index.d.ts CHANGED
@@ -2,3 +2,4 @@ export const taglibs: any;
2
2
  export const analyze: any;
3
3
  export const translate: any;
4
4
  export const getRuntimeEntryFiles: any;
5
+ export const internalEntryBuilder: any;
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@marko/translator-default",
3
- "version": "5.32.5",
3
+ "version": "5.32.7",
4
4
  "description": "Translates Marko templates to the default Marko runtime.",
5
5
  "keywords": [
6
6
  "babel",
@@ -29,13 +29,13 @@
29
29
  },
30
30
  "dependencies": {
31
31
  "@babel/runtime": "^7.24.0",
32
- "@marko/babel-utils": "^6.4.1",
32
+ "@marko/babel-utils": "^6.4.2",
33
33
  "magic-string": "^0.30.8",
34
34
  "self-closing-tags": "^1.0.1"
35
35
  },
36
36
  "devDependencies": {
37
- "@marko/compiler": "^5.35.4",
38
- "marko": "^5.33.6"
37
+ "@marko/compiler": "^5.35.6",
38
+ "marko": "^5.33.7"
39
39
  },
40
40
  "peerDependencies": {
41
41
  "@marko/compiler": "^5.16.1",