@marko/translator-default 5.32.4 → 5.32.6

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: {
@@ -494,15 +495,13 @@ function getRuntimeEntryFiles(output, optimize) {
494
495
  `${base}core-tags/components/preferred-script-location-tag.js`,
495
496
  `${base}core-tags/core/__flush_here_and_after__.js`,
496
497
  `${base}core-tags/core/await/renderer.js`,
497
- `${base}core-tags/core/await/reorderer-renderer.js`,
498
- `${base}runtime/helpers/tags-compat/html${optimize ? "" : "-debug"}.mjs`] :
498
+ `${base}core-tags/core/await/reorderer-renderer.js`] :
499
499
 
500
500
  [
501
501
  `${base}runtime/vdom/index.js`,
502
502
  `${base}runtime/vdom/hot-reload.js`,
503
503
  `${base}runtime/vdom/helpers/attrs.js`,
504
- `${base}runtime/vdom/helpers/const-element.js`,
505
- `${base}runtime/helpers/tags-compat/dom${optimize ? "" : "-debug"}.mjs`])];
504
+ `${base}runtime/vdom/helpers/const-element.js`])];
506
505
 
507
506
 
508
507
  }
@@ -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,148 @@ 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
- );
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, visitChild);
35
+ }
43
36
  }
37
+ });
44
38
 
45
- body.unshift(markoComponentsImport);
39
+ programNode.body = entryBuilder.build(entryFile);
40
+ program.skip();
41
+ };exports.default = _default;
46
42
 
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
- []
56
- )
57
- )
43
+ const entryBuilder = exports.entryBuilder = {
44
+ build(entryFile) {
45
+ const state = entryFile[kEntryState];
46
+ if (!state) {
47
+ throw entryFile.path.buildCodeFrameError(
48
+ "Unable to build hydrate code, no files were visited before finalizing the build"
58
49
  );
59
50
  }
60
- }
61
-
62
- entryFile.metadata.marko.watchFiles = Array.from(watchFiles);
63
- program.node.body = body;
64
- program.skip();
65
-
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);
51
+ const { markoOpts } = entryFile;
52
+ const entryMarkoMeta = entryFile.metadata.marko;
53
+ const { body } = state;
54
+ entryMarkoMeta.watchFiles = Array.from(state.watchFiles);
55
+
56
+ if (state.hasComponents) {
57
+ const initId = _compiler.types.identifier("init");
58
+ const markoComponentsImport = importPath(
59
+ (0, _babelUtils.resolveRelativePath)(entryFile, "marko/src/runtime/components/index.js")
60
+ );
61
+ if (state.splitComponentIndex) {
62
+ markoComponentsImport.specifiers.push(
63
+ _compiler.types.importSpecifier(_compiler.types.identifier("register"), _compiler.types.identifier("register"))
64
+ );
65
+ }
72
66
 
73
- if (meta.component) {
74
- hasComponents = true;
67
+ body.unshift(markoComponentsImport);
68
+
69
+ if (markoOpts.hydrateInit) {
70
+ markoComponentsImport.specifiers.push(
71
+ _compiler.types.importSpecifier(initId, initId)
72
+ );
73
+ body.push(
74
+ _compiler.types.expressionStatement(
75
+ _compiler.types.callExpression(
76
+ initId,
77
+ markoOpts.runtimeId ? [_compiler.types.stringLiteral(markoOpts.runtimeId)] : []
78
+ )
79
+ )
80
+ );
81
+ }
82
+ }
75
83
 
76
- if (_path.default.basename(meta.component) === _path.default.basename(file.opts.filename)) {
84
+ return body;
85
+ },
86
+ visit(file, entryFile, visitChild) {
87
+ const fileMeta = file.metadata.marko;
88
+ const fileName = file.opts.filename;
89
+ const state = entryFile[kEntryState] ||= {
90
+ shouldIncludeImport: toTestFn(file.markoOpts.hydrateIncludeImports),
91
+ watchFiles: new Set(),
92
+ imports: new Set(),
93
+ hasComponents: false,
94
+ splitComponentIndex: 0,
95
+ body: []
96
+ };
97
+
98
+ const { watchFiles, imports, body } = state;
99
+
100
+ if (fileMeta.component) {
101
+ state.hasComponents = true;
102
+
103
+ if (_path.default.basename(fileMeta.component) === _path.default.basename(fileName)) {
77
104
  // Stateful component.
78
- addDep(resolved);
105
+ addImport(imports, body, (0, _babelUtils.resolveRelativePath)(entryFile, fileName));
79
106
  return;
80
107
  }
81
108
  }
82
109
 
83
- watchFiles.add(file.opts.filename);
110
+ watchFiles.add(fileName);
84
111
 
85
- for (const watchFile of meta.watchFiles) {
112
+ for (const watchFile of fileMeta.watchFiles) {
86
113
  watchFiles.add(watchFile);
87
114
  }
88
115
 
89
- scanBrowserDeps(file);
116
+ addBrowserImports(imports, body, file, entryFile);
90
117
 
91
118
  for (const child of file.path.node.body) {
92
119
  if (_compiler.types.isImportDeclaration(child)) {
93
120
  const { value } = child.source;
94
- if (shouldIncludeImport(value)) {
95
- addDep(resolvePath(file, value));
121
+ if (state.shouldIncludeImport(value)) {
122
+ addImport(
123
+ imports,
124
+ body,
125
+ resolveRelativeToEntry(entryFile, file, value)
126
+ );
96
127
  }
97
128
  }
98
129
  }
99
130
 
100
- for (const tag of meta.tags) {
131
+ for (const tag of fileMeta.tags) {
101
132
  if (tag.endsWith(".marko")) {
102
- if (!hydratedTemplates.has(resolvePath(file, tag))) {
103
- scanHydrateDeps((0, _babelUtils.loadFileForImport)(file, tag));
104
- }
133
+ visitChild(tag);
105
134
  } else {
106
135
  const importedTemplates = tryGetTemplateImports(file, tag);
107
136
  if (importedTemplates) {
108
137
  for (const templateFile of importedTemplates) {
109
- if (!hydratedTemplates.has(resolvePath(file, templateFile))) {
110
- scanHydrateDeps((0, _babelUtils.loadFileForImport)(file, templateFile));
111
- }
138
+ visitChild(templateFile);
112
139
  }
113
140
  }
114
141
  }
115
142
  }
116
143
 
117
- if (meta.component) {
144
+ if (fileMeta.component) {
118
145
  // Split component
119
146
  const splitComponentId = _compiler.types.identifier(
120
- `component_${splitComponentIndex++}`
147
+ `component_${state.splitComponentIndex++}`
121
148
  );
122
149
  const splitComponentImport = importPath(
123
- resolvePath(file, meta.component)
150
+ resolveRelativeToEntry(entryFile, file, fileMeta.component)
124
151
  );
125
152
  splitComponentImport.specifiers.push(
126
153
  _compiler.types.importDefaultSpecifier(splitComponentId)
@@ -129,78 +156,75 @@ var _resolveFrom = _interopRequireDefault(require("resolve-from"));var _default
129
156
  splitComponentImport,
130
157
  _compiler.types.expressionStatement(
131
158
  _compiler.types.callExpression(_compiler.types.identifier("register"), [
132
- _compiler.types.stringLiteral(meta.id),
159
+ _compiler.types.stringLiteral(fileMeta.id),
133
160
  splitComponentId]
134
161
  )
135
162
  )
136
163
  );
137
164
  }
138
165
  }
166
+ };
167
+
168
+ function addBrowserImports(seenImports, body, file, entryFile) {
169
+ const { filename, sourceMaps } = file.opts;
170
+ let s;
171
+
172
+ for (let dep of file.metadata.marko.deps) {
173
+ if (typeof dep !== "string") {
174
+ const { virtualPath } = dep;
175
+ let { code } = dep;
176
+ let map;
177
+
178
+ if (sourceMaps && dep.startPos !== undefined) {
179
+ s = s || new _magicString.default(file.code, { source: filename });
180
+ map = s.snip(dep.startPos, dep.endPos).generateMap({
181
+ source: filename,
182
+ includeContent: true
183
+ });
139
184
 
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
- }
185
+ if (sourceMaps === "inline" || sourceMaps === "both") {
186
+ code += dep.style ?
187
+ `\n/*# sourceMappingURL=${map.toUrl()}*/` :
188
+ `\n//# sourceMappingURL=${map.toUrl()}`;
189
+
190
+ if (sourceMaps === "inline") {
191
+ map = undefined;
165
192
  }
166
193
  }
194
+ }
167
195
 
168
- dep = resolveVirtualDependency(filename, {
169
- map,
170
- code,
171
- virtualPath
172
- });
196
+ dep = file.markoOpts.resolveVirtualDependency(filename, {
197
+ map,
198
+ code,
199
+ virtualPath
200
+ });
173
201
 
174
- if (!dep) {
175
- continue;
176
- }
177
- } else if (dep.startsWith("package:")) {
202
+ if (!dep) {
178
203
  continue;
179
204
  }
180
-
181
- addDep(resolvePath(file, dep));
205
+ } else if (dep.startsWith("package:")) {
206
+ continue;
182
207
  }
183
- }
184
208
 
185
- function addDep(resolved) {
186
- if (resolvedDeps.has(resolved)) return;
187
- resolvedDeps.add(resolved);
188
- body.push(importPath(resolved));
209
+ addImport(seenImports, body, resolveRelativeToEntry(entryFile, file, dep));
189
210
  }
211
+ }
190
212
 
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
- }
213
+ function addImport(seenImports, body, resolved) {
214
+ if (seenImports.has(resolved)) return;
215
+ seenImports.add(resolved);
216
+ body.push(importPath(resolved));
217
+ }
199
218
 
200
- function importPath(path) {
201
- return _compiler.types.importDeclaration([], _compiler.types.stringLiteral(path));
202
- }
203
- };exports.default = _default;
219
+ function resolveRelativeToEntry(entryFile, file, req) {
220
+ return file === entryFile ?
221
+ (0, _babelUtils.resolveRelativePath)(file, req) :
222
+ (0, _babelUtils.resolveRelativePath)(entryFile, _path.default.join(file.opts.filename, "..", req));
223
+ }
224
+
225
+ function importPath(path) {
226
+ return _compiler.types.importDeclaration([], _compiler.types.stringLiteral(path));
227
+ }
204
228
 
205
229
  function tryGetTemplateImports(file, rendererRelativePath) {
206
230
  const resolvedRendererPath = _path.default.join(
@@ -216,7 +240,7 @@ function tryGetTemplateImports(file, rendererRelativePath) {
216
240
  file.markoOpts.fileSystem.readFileSync(resolvedRendererPath, "utf-8")
217
241
  )) {
218
242
  if (statement.type === "ImportDeclaration") {
219
- addImport(statement.source.value);
243
+ addTemplateImport(statement.source.value);
220
244
  } else {
221
245
  _compiler.types.traverseFast(statement, (node) => {
222
246
  if (
@@ -230,7 +254,7 @@ function tryGetTemplateImports(file, rendererRelativePath) {
230
254
  node.arguments.length === 1 &&
231
255
  node.arguments[0].type === "StringLiteral")
232
256
  {
233
- addImport(node.arguments[0].value);
257
+ addTemplateImport(node.arguments[0].value);
234
258
  }
235
259
  });
236
260
  }
@@ -241,7 +265,7 @@ function tryGetTemplateImports(file, rendererRelativePath) {
241
265
  }
242
266
  return templateImports;
243
267
 
244
- function addImport(request) {
268
+ function addTemplateImport(request) {
245
269
  if (request.endsWith(".marko")) {
246
270
  const resolvedTemplatePath =
247
271
  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.4",
3
+ "version": "5.32.6",
4
4
  "description": "Translates Marko templates to the default Marko runtime.",
5
5
  "keywords": [
6
6
  "babel",
@@ -29,12 +29,12 @@
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",
37
+ "@marko/compiler": "^5.35.5",
38
38
  "marko": "^5.33.6"
39
39
  },
40
40
  "peerDependencies": {