@marko/compiler 5.23.6 → 5.25.0

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/config.d.ts ADDED
@@ -0,0 +1,36 @@
1
+ const Config: {
2
+ output?: "html" | "dom" | "hydrate" | "migrate" | "source";
3
+ stripTypes?: boolean;
4
+ runtimeId?: string | null;
5
+ ast?: boolean;
6
+ code?: boolean;
7
+ writeVersionComment?: boolean;
8
+ ignoreUnrecognizedTags?: boolean;
9
+ sourceMaps?: boolean | "inline" | "both";
10
+ translator?: any;
11
+ fileSystem?: typeof import("fs");
12
+ modules?: "esm" | "cjs";
13
+ resolveVirtualDependency?:
14
+ | ((
15
+ filename: string,
16
+ dep: { virtualPath: string; code: string; map?: SourceMap }
17
+ ) => string)
18
+ | null;
19
+ hydrateIncludeImports?: RegExp | ((request: string) => boolean);
20
+ optimize?: boolean;
21
+ cache?: Map<unknown, unknown>;
22
+ hot?: boolean;
23
+ /** @deprecated */
24
+ meta?: boolean;
25
+ babelConfig?: {
26
+ ast?: boolean | null;
27
+ code?: boolean | null;
28
+ comments?: boolean | null;
29
+ compact?: boolean | "auto" | null;
30
+ caller?: { name?: string; [x: string]: unknown };
31
+ minified?: boolean | null;
32
+ [x: string]: unknown;
33
+ };
34
+ };
35
+
36
+ export = Config;
package/config.js ADDED
@@ -0,0 +1 @@
1
+ module.exports = require("./dist/config");
@@ -8,7 +8,7 @@ var _parser = require("./parser");
8
8
  var _migrate = require("./plugins/migrate");
9
9
  var _transform = require("./plugins/transform");
10
10
  var _file = require("./file");
11
- var _fs = require("../taglib/fs");
11
+ var _config = _interopRequireDefault(require("../taglib/config"));
12
12
  var _tryLoadTranslator = _interopRequireDefault(require("../util/try-load-translator"));
13
13
  var _shouldOptimize = _interopRequireDefault(require("../util/should-optimize"));function _getRequireWildcardCache(nodeInterop) {if (typeof WeakMap !== "function") return null;var cacheBabelInterop = new WeakMap();var cacheNodeInterop = new WeakMap();return (_getRequireWildcardCache = function (nodeInterop) {return nodeInterop ? cacheNodeInterop : cacheBabelInterop;})(nodeInterop);}function _interopRequireWildcard(obj, nodeInterop) {if (!nodeInterop && obj && obj.__esModule) {return obj;}if (obj === null || typeof obj !== "object" && typeof obj !== "function") {return { default: obj };}var cache = _getRequireWildcardCache(nodeInterop);if (cache && cache.has(obj)) {return cache.get(obj);}var newObj = {};var hasPropertyDescriptor = Object.defineProperty && Object.getOwnPropertyDescriptor;for (var key in obj) {if (key !== "default" && Object.prototype.hasOwnProperty.call(obj, key)) {var desc = hasPropertyDescriptor ? Object.getOwnPropertyDescriptor(obj, key) : null;if (desc && (desc.get || desc.set)) {Object.defineProperty(newObj, key, desc);} else {newObj[key] = obj[key];}}}newObj.default = obj;if (cache) {cache.set(obj, newObj);}return newObj;}
14
14
 
@@ -49,21 +49,21 @@ const SOURCE_FILES = new WeakMap();var _default =
49
49
  curOpts = opts;
50
50
  },
51
51
  parserOverride(code) {
52
- let prevFS = _fs.curFS;
53
- (0, _fs.setFS)(markoOpts.fileSystem);
52
+ let prevFS = _config.default.fs;
53
+ _config.default.fs = markoOpts.fileSystem;
54
54
  try {
55
55
  const file = getMarkoFile(code, curOpts, markoOpts);
56
56
  const finalAst = t.cloneNode(file.ast, true);
57
57
  SOURCE_FILES.set(finalAst, file);
58
58
  return finalAst;
59
59
  } finally {
60
- (0, _fs.setFS)(prevFS);
60
+ _config.default.fs = prevFS;
61
61
  }
62
62
  },
63
63
  pre(file) {
64
- let prevFS = _fs.curFS;
64
+ let prevFS = _config.default.fs;
65
+ _config.default.fs = markoOpts.fileSystem;
65
66
  curOpts = undefined;
66
- (0, _fs.setFS)(markoOpts.fileSystem);
67
67
  try {
68
68
  if (markoOpts.output === "source" || markoOpts.output === "migrate") {
69
69
  return file;
@@ -104,7 +104,7 @@ const SOURCE_FILES = new WeakMap();var _default =
104
104
  metadata.marko.watchFiles = metadata.marko.watchFiles.filter(unique);
105
105
  file.path.scope.crawl(); // Ensure all scopes are accurate for subsequent babel plugins
106
106
  } finally {
107
- (0, _fs.setFS)(prevFS);
107
+ _config.default.fs = prevFS;
108
108
  }
109
109
  }
110
110
  };
package/dist/config.js CHANGED
@@ -156,7 +156,7 @@ var _lassoPackageRoot = require("lasso-package-root");
156
156
 
157
157
 
158
158
 
159
- var _fs2 = require("./taglib/fs");let config;const globalThis = typeof window === "undefined" ? global : window;const MARKO_CONFIG_KEY = Symbol("Default Marko Compiler Config");if (globalThis[MARKO_CONFIG_KEY]) {config = globalThis[MARKO_CONFIG_KEY];} else {config = globalThis[MARKO_CONFIG_KEY] = { // The default output mode for compiled templates
159
+ var _config = _interopRequireDefault(require("./taglib/config"));let config;const globalThis = typeof window === "undefined" ? global : window;const MARKO_CONFIG_KEY = Symbol("Default Marko Compiler Config");if (globalThis[MARKO_CONFIG_KEY]) {config = globalThis[MARKO_CONFIG_KEY];} else {config = globalThis[MARKO_CONFIG_KEY] = { // The default output mode for compiled templates
160
160
  output: "html", // Override the runtimeid used when calling `marko/components.init` in the `hydrate` output.
161
161
  runtimeId: null, /**
162
162
  * Remove all typescript types from the output.
@@ -206,4 +206,4 @@ var _fs2 = require("./taglib/fs");let config;const globalThis = typeof window ==
206
206
  * A regexp or function that receives an import path that matches file types known to be client side assets.
207
207
  */hydrateIncludeImports: /\.(css|less|s[ac]ss|styl|png|jpe?g|gif|svg|ico|webp|avif|mp4|webm|ogg|mp3|wav|flac|aac|woff2?|eot|ttf|otf)$/, /**
208
208
  * Set to true in order to bring in the hot module replacement runtime.
209
- */hot: false };if (process.env.MARKO_CONFIG) {Object.assign(config, JSON.parse(process.env.MARKO_CONFIG));}}var _default = config;exports.default = _default;(0, _fs2.setFS)(config.fileSystem);
209
+ */hot: false };if (process.env.MARKO_CONFIG) {Object.assign(config, JSON.parse(process.env.MARKO_CONFIG));}}var _default = config;exports.default = _default;_config.default.fs = config.fileSystem;
@@ -0,0 +1,6 @@
1
+ "use strict";module.exports = {
2
+ fs: undefined,
3
+ onError: (err) => {
4
+ throw err;
5
+ }
6
+ };
@@ -1,7 +1,7 @@
1
1
  "use strict";
2
2
  var nodePath = require("path");
3
3
  var resolveFrom = require("resolve-from").silent;
4
- var taglibFS = require("../fs");
4
+ var taglibConfig = require("../config");
5
5
  var taglibLoader = require("../loader");
6
6
  var lassoPackageRoot = require("lasso-package-root");
7
7
  var findCache = {};
@@ -148,7 +148,7 @@ function excludePackage(name) {
148
148
 
149
149
  function existsSync(file) {
150
150
  try {
151
- taglibFS.curFS.statSync(file);
151
+ taglibConfig.fs.statSync(file);
152
152
  return true;
153
153
  } catch (_) {
154
154
  return false;
@@ -1,6 +1,7 @@
1
1
  "use strict";var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault");exports.__esModule = true;exports._loader = exports._finder = void 0;exports.buildLookup = buildLookup;exports.clearCaches = clearCaches;exports.excludePackage = exports.excludeDir = void 0;exports.register = register;var _loader2 = _interopRequireDefault(require("./loader"));
2
2
  var _finder2 = _interopRequireDefault(require("./finder"));
3
3
  var _lookup = _interopRequireDefault(require("./lookup"));
4
+ var _config = _interopRequireDefault(require("./config"));
4
5
  var _tryLoadTranslator = _interopRequireDefault(require("../util/try-load-translator"));
5
6
 
6
7
 
@@ -18,7 +19,7 @@ register("marko/html", _markoHtml.default);
18
19
  register("marko/svg", _markoSvg.default);
19
20
  register("marko/math", _markoMath.default);
20
21
 
21
- function buildLookup(dirname, requestedTranslator) {
22
+ function buildLookup(dirname, requestedTranslator, onError) {
22
23
  const translator = (0, _tryLoadTranslator.default)(requestedTranslator);
23
24
  if (!translator || !Array.isArray(translator.taglibs)) {
24
25
  throw new Error(
@@ -26,19 +27,35 @@ function buildLookup(dirname, requestedTranslator) {
26
27
 
27
28
  }
28
29
 
29
- if (!loadedTranslatorsTaglibs.has(translator)) {
30
+ let taglibsForDir = loadedTranslatorsTaglibs.get(translator);
31
+
32
+ if (!taglibsForDir) {
30
33
  loadedTranslatorsTaglibs.set(
31
34
  translator,
32
- translator.taglibs.map(([id, props]) => loadTaglib(id, props)));
35
+ taglibsForDir = registeredTaglibs.concat(
36
+ translator.taglibs.map(([id, props]) => loadTaglib(id, props))));
33
37
 
34
- }
35
38
 
36
- const taglibsForDir = _finder2.default.find(
37
- dirname,
38
- registeredTaglibs.concat(loadedTranslatorsTaglibs.get(translator)));
39
+ }
39
40
 
41
+ if (onError) {
42
+ const prevOnError = _config.default.onError;
43
+ _config.default.onError = onError;
44
+ try {
45
+ taglibsForDir = _finder2.default.find(dirname, taglibsForDir);
46
+ } catch (err) {
47
+ _config.default.onError(err);
48
+ } finally {
49
+ _config.default.onError = prevOnError;
50
+ }
51
+ } else {
52
+ taglibsForDir = _finder2.default.find(dirname, taglibsForDir);
53
+ }
40
54
 
41
- const cacheKey = taglibsForDir.map((it) => it.id).join();
55
+ const cacheKey = taglibsForDir.
56
+ map((it) => it.id).
57
+ sort().
58
+ join();
42
59
  let lookup = lookupCache[cacheKey];
43
60
 
44
61
  if (!lookup) {
@@ -1,9 +1,9 @@
1
- "use strict";var taglibFS = require("../fs");
1
+ "use strict";var taglibConfig = require("../config");
2
2
  var stripJsonComments = require("strip-json-comments");
3
3
  var fsReadOptions = { encoding: "utf8" };
4
4
 
5
5
  exports.readFileSync = function (path) {
6
- var json = String(taglibFS.curFS.readFileSync(path, fsReadOptions));
6
+ var json = String(taglibConfig.fs.readFileSync(path, fsReadOptions));
7
7
 
8
8
  try {
9
9
  var taglibProps = JSON.parse(stripJsonComments(json));
@@ -2,7 +2,7 @@
2
2
 
3
3
  var assert = require("assert");
4
4
  var raptorRegexp = require("raptor-regexp");
5
- var propertyHandlers = require("property-handlers");
5
+ var propertyHandlers = require("./property-handlers");
6
6
  var types = require("./types");
7
7
  var createError = require("raptor-util/createError");
8
8
  var hasOwnProperty = Object.prototype.hasOwnProperty;
@@ -2,11 +2,11 @@
2
2
 
3
3
  var ok = require("assert").ok;
4
4
  var resolveFrom = require("resolve-from").silent;
5
- var propertyHandlers = require("property-handlers");
5
+ var propertyHandlers = require("./property-handlers");
6
6
  var isObjectEmpty = require("raptor-util/isObjectEmpty");
7
7
  var nodePath = require("path");
8
8
  var createError = require("raptor-util/createError");
9
- var taglibFS = require("../fs");
9
+ var taglibConfig = require("../config");
10
10
  var types = require("./types");
11
11
  var loaders = require("./loaders");
12
12
  var markoModules = require("../../../modules");
@@ -315,7 +315,7 @@ class TagLoader {
315
315
  var path = nodePath.resolve(dirname, value);
316
316
 
317
317
  try {
318
- taglibFS.curFS.statSync(path);
318
+ taglibConfig.fs.statSync(path);
319
319
  tag.template = path;
320
320
  } catch (_) {
321
321
  throw new Error('Template at path "' + path + '" does not exist.');
@@ -4,9 +4,9 @@ var ok = require("assert").ok;
4
4
  var resolveFrom = require("resolve-from").silent;
5
5
  var nodePath = require("path");
6
6
  var types = require("./types");
7
- var taglibFS = require("../fs");
7
+ var taglibFS = require("../config");
8
8
  var scanTagsDir = require("./scanTagsDir");
9
- var propertyHandlers = require("property-handlers");
9
+ var propertyHandlers = require("./property-handlers");
10
10
  var jsonFileReader = require("./json-file-reader");
11
11
  var DependencyChain = require("./DependencyChain");
12
12
  var createError = require("raptor-util/createError");
@@ -98,7 +98,7 @@ class TaglibLoader {
98
98
  tagFilePath = nodePath.resolve(this.dirname, value);
99
99
 
100
100
  try {
101
- taglibFS.curFS.statSync(tagFilePath);
101
+ taglibFS.fs.statSync(tagFilePath);
102
102
  } catch (_) {
103
103
  throw new Error(
104
104
  'Tag at path "' +
@@ -0,0 +1,85 @@
1
+ "use strict";
2
+
3
+ const { hasOwnProperty } = Object.prototype;
4
+ const taglibConfig = require("../config");
5
+
6
+ function removeDashes(str) {
7
+ return str.replace(/-([a-z])/g, function (match, lower) {
8
+ return lower.toUpperCase();
9
+ });
10
+ }
11
+
12
+ module.exports = function invokeHandlers(config, handlers, path) {
13
+ function error(message, cause) {
14
+ if (cause) {
15
+ if (cause.__propertyHandlers) {
16
+ throw cause;
17
+ }
18
+
19
+ message += ". Cause: " + (cause.stack || cause);
20
+ }
21
+
22
+ if (path) {
23
+ message += " (" + path + ")";
24
+ }
25
+
26
+ var e = new Error(message);
27
+ e.__propertyHandlers = true;
28
+ taglibConfig.onError(e);
29
+ }
30
+
31
+ if (!config) {
32
+ error('"config" argument is required');
33
+ }
34
+
35
+ if (typeof config !== "object") {
36
+ error("object expected");
37
+ }
38
+
39
+ for (var k in config) {
40
+ if (hasOwnProperty.call(config, k)) {
41
+ var value = config[k];
42
+ var keyNoDashes = removeDashes(k);
43
+ var handler = handlers[keyNoDashes];
44
+ var isDefaultHandler = false;
45
+
46
+ if (!handler) {
47
+ handler = handlers["*"];
48
+ isDefaultHandler = true;
49
+ }
50
+
51
+ if (!handler) {
52
+ var badProperty = JSON.stringify(k);
53
+ if (k !== keyNoDashes) {
54
+ badProperty += "/" + JSON.stringify(keyNoDashes);
55
+ }
56
+ error(
57
+ "Invalid option of " +
58
+ badProperty +
59
+ ". Allowed: " +
60
+ Object.keys(handlers).join(", "));
61
+
62
+ }
63
+
64
+ try {
65
+ if (isDefaultHandler) {
66
+ if (handler.call(handlers, k, value) === false) {
67
+ error("Invalid option: " + k);
68
+ }
69
+ } else {
70
+ handler.call(handlers, value);
71
+ }
72
+ } catch (e) {
73
+ error('Error while applying option of "' + k + '"', e);
74
+ }
75
+ }
76
+ }
77
+
78
+ if (handlers._end) {
79
+ try {
80
+ handlers._end();
81
+ } catch (e) {
82
+ error("Error after applying properties", e);
83
+ }
84
+ }
85
+ };
@@ -1,7 +1,7 @@
1
1
  "use strict";
2
2
 
3
3
  const nodePath = require("path");
4
- const taglibFS = require("../fs");
4
+ const taglibConfig = require("../config");
5
5
  const jsonFileReader = require("./json-file-reader");
6
6
  const tagDefFromCode = require("./tag-def-from-code");
7
7
  const loaders = require("./loaders");
@@ -48,7 +48,7 @@ function createDefaultTagDef() {
48
48
 
49
49
  function getFileMap(dirname) {
50
50
  let fileMap = {};
51
- let files = taglibFS.curFS.readdirSync(dirname);
51
+ let files = taglibConfig.fs.readdirSync(dirname);
52
52
 
53
53
  files.forEach((file) => {
54
54
  let extName = nodePath.extname(file);
@@ -77,7 +77,7 @@ function getPath(filename, fileMap) {
77
77
 
78
78
  function findAndSetFile(tagDef, tagDirname) {
79
79
  try {
80
- if (!taglibFS.curFS.statSync(tagDirname).isDirectory()) {
80
+ if (!taglibConfig.fs.statSync(tagDirname).isDirectory()) {
81
81
  return;
82
82
  }
83
83
  } catch (_) {
@@ -133,7 +133,7 @@ dependencyChain)
133
133
  }
134
134
 
135
135
  dir = nodePath.resolve(tagsConfigDirname, dir);
136
- let children = taglibFS.curFS.readdirSync(dir);
136
+ let children = taglibConfig.fs.readdirSync(dir);
137
137
 
138
138
  for (let i = 0, len = children.length; i < len; i++) {
139
139
  let childFilename = children[i];
@@ -160,7 +160,7 @@ dependencyChain)
160
160
 
161
161
  let hasTagJson = false;
162
162
  try {
163
- taglibFS.curFS.statSync(tagJsonPath);
163
+ taglibConfig.fs.statSync(tagJsonPath);
164
164
  hasTagJson = true;
165
165
  // eslint-disable-next-line no-empty
166
166
  } catch (_) {}
@@ -191,7 +191,7 @@ dependencyChain)
191
191
 
192
192
  if (!hasTagJson && (tagDef.renderer || tagDef.template)) {
193
193
  let templateCode = String(
194
- taglibFS.curFS.readFileSync(
194
+ taglibConfig.fs.readFileSync(
195
195
  tagDef.renderer || tagDef.template,
196
196
  fsReadOptions));
197
197
 
package/index.d.ts CHANGED
@@ -3,6 +3,8 @@ import { TaglibLookup } from "@marko/babel-utils";
3
3
  import * as types from "./babel-types";
4
4
  export { types };
5
5
 
6
+ export type Config = typeof import("./config");
7
+
6
8
  type Dep = {
7
9
  type: string;
8
10
  code: string;
@@ -14,41 +16,6 @@ type Dep = {
14
16
  [x: string]: unknown;
15
17
  };
16
18
 
17
- export type Config = {
18
- output?: "html" | "dom" | "hydrate" | "migrate" | "source";
19
- stripTypes?: boolean;
20
- runtimeId?: string | null;
21
- ast?: boolean;
22
- code?: boolean;
23
- writeVersionComment?: boolean;
24
- ignoreUnrecognizedTags?: boolean;
25
- sourceMaps?: boolean | "inline" | "both";
26
- translator?: any;
27
- fileSystem?: typeof import("fs");
28
- modules?: "esm" | "cjs";
29
- resolveVirtualDependency?:
30
- | ((
31
- filename: string,
32
- dep: { virtualPath: string; code: string; map?: SourceMap }
33
- ) => string)
34
- | null;
35
- hydrateIncludeImports?: RegExp | ((request: string) => boolean);
36
- optimize?: boolean;
37
- cache?: Map<unknown, unknown>;
38
- hot?: boolean;
39
- /** @deprecated */
40
- meta?: boolean;
41
- babelConfig?: {
42
- ast?: boolean | null;
43
- code?: boolean | null;
44
- comments?: boolean | null;
45
- compact?: boolean | "auto" | null;
46
- caller?: { name?: string; [x: string]: unknown };
47
- minified?: boolean | null;
48
- [x: string]: unknown;
49
- };
50
- };
51
-
52
19
  export type MarkoMeta = {
53
20
  id: string;
54
21
  component?: string;
@@ -99,7 +66,8 @@ export namespace taglib {
99
66
  export function register(id: string, props: { [x: string]: unknown }): void;
100
67
  export function buildLookup(
101
68
  dirname: string,
102
- translator?: unknown
69
+ translator?: unknown,
70
+ onError?: (err: Error) => void
103
71
  ): TaglibLookup;
104
72
  export function clearCaches(): void;
105
73
  }
package/package.json CHANGED
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "name": "@marko/compiler",
3
3
  "description": "Marko template to JS compiler.",
4
- "version": "5.23.6",
4
+ "version": "5.25.0",
5
5
  "author": "Dylan Piercey <dpiercey@ebay.com>",
6
6
  "bugs": "https://github.com/marko-js/marko/issues/new?template=Bug_report.md",
7
7
  "dependencies": {
@@ -21,7 +21,6 @@
21
21
  "htmljs-parser": "^5.1.5",
22
22
  "jsesc": "^3.0.2",
23
23
  "lasso-package-root": "^1.0.1",
24
- "property-handlers": "^1.1.1",
25
24
  "raptor-regexp": "^1.0.1",
26
25
  "raptor-util": "^3.2.0",
27
26
  "resolve-from": "^5.0.0",
@@ -30,10 +29,12 @@
30
29
  "strip-json-comments": "^3.1.1"
31
30
  },
32
31
  "devDependencies": {
33
- "@marko/translator-default": "^5.22.6"
32
+ "@marko/translator-default": "^5.23.0"
34
33
  },
35
34
  "files": [
36
35
  "dist",
36
+ "config.js",
37
+ "config.d.ts",
37
38
  "modules.js",
38
39
  "index.d.ts",
39
40
  "babel-types.d.ts",
package/dist/taglib/fs.js DELETED
@@ -1,4 +0,0 @@
1
- "use strict";exports.__esModule = true;exports.curFS = void 0;exports.setFS = setFS;let curFS;exports.curFS = curFS;
2
- function setFS(fs) {
3
- exports.curFS = curFS = fs;
4
- }