@marko/translator-default 5.32.4 → 5.32.6

Sign up to get free protection for your applications and to get access to all the features.
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": {