@marko/translator-default 5.32.5 → 5.32.7

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: {
@@ -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",