@marko/compiler 5.20.9 → 5.21.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/dist/babel-plugin/file.js +1 -2
- package/dist/babel-plugin/index.js +1 -2
- package/dist/babel-plugin/parser.js +1 -2
- package/dist/babel-plugin/plugins/migrate.js +1 -2
- package/dist/babel-plugin/plugins/transform.js +1 -2
- package/dist/babel-plugin/util/plugin-hooks.js +1 -2
- package/dist/babel-types/generator/patch.js +1 -2
- package/dist/babel-types/index.js +1 -2
- package/dist/babel-types/traverse/patch.js +1 -2
- package/dist/babel-types/types/definitions.js +1 -2
- package/dist/babel-types/types/patch.js +1 -2
- package/dist/config.js +1 -2
- package/dist/index.js +1 -2
- package/dist/register.js +1 -2
- package/dist/taglib/finder/index.js +1 -2
- package/dist/taglib/fs.js +1 -2
- package/dist/taglib/index.js +1 -2
- package/dist/taglib/loader/Attribute.js +1 -2
- package/dist/taglib/loader/DependencyChain.js +1 -2
- package/dist/taglib/loader/Property.js +1 -2
- package/dist/taglib/loader/Tag.js +1 -2
- package/dist/taglib/loader/Taglib.js +1 -2
- package/dist/taglib/loader/Transformer.js +1 -2
- package/dist/taglib/loader/cache.js +1 -2
- package/dist/taglib/loader/index.js +1 -2
- package/dist/taglib/loader/json-file-reader.js +1 -2
- package/dist/taglib/loader/loadAttributeFromProps.js +1 -2
- package/dist/taglib/loader/loadAttributes.js +1 -2
- package/dist/taglib/loader/loadTagFromFile.js +1 -2
- package/dist/taglib/loader/loadTagFromProps.js +1 -2
- package/dist/taglib/loader/loadTaglibFromFile.js +1 -2
- package/dist/taglib/loader/loadTaglibFromProps.js +1 -2
- package/dist/taglib/loader/loaders.js +1 -2
- package/dist/taglib/loader/scanTagsDir.js +1 -2
- package/dist/taglib/loader/tag-def-from-code.js +1 -2
- package/dist/taglib/loader/types.js +1 -2
- package/dist/taglib/lookup/index.js +1 -2
- package/dist/traverse.d.ts +2 -0
- package/dist/util/should-optimize.js +1 -2
- package/dist/util/try-load-translator.js +1 -2
- package/index.d.ts +16 -8
- package/package.json +5 -6
- package/src/index.js +117 -0
- package/LICENSE +0 -21
- package/dist/babel-plugin/file.js.map +0 -1
- package/dist/babel-plugin/index.js.map +0 -1
- package/dist/babel-plugin/parser.js.map +0 -1
- package/dist/babel-plugin/plugins/migrate.js.map +0 -1
- package/dist/babel-plugin/plugins/transform.js.map +0 -1
- package/dist/babel-plugin/util/plugin-hooks.js.map +0 -1
- package/dist/babel-types/generator/patch.js.map +0 -1
- package/dist/babel-types/index.js.map +0 -1
- package/dist/babel-types/traverse/patch.js.map +0 -1
- package/dist/babel-types/types/definitions.js.map +0 -1
- package/dist/babel-types/types/patch.js.map +0 -1
- package/dist/config.js.map +0 -1
- package/dist/index.js.map +0 -1
- package/dist/register.js.map +0 -1
- package/dist/taglib/finder/index.js.map +0 -1
- package/dist/taglib/fs.js.map +0 -1
- package/dist/taglib/index.js.map +0 -1
- package/dist/taglib/loader/Attribute.js.map +0 -1
- package/dist/taglib/loader/DependencyChain.js.map +0 -1
- package/dist/taglib/loader/Property.js.map +0 -1
- package/dist/taglib/loader/Tag.js.map +0 -1
- package/dist/taglib/loader/Taglib.js.map +0 -1
- package/dist/taglib/loader/Transformer.js.map +0 -1
- package/dist/taglib/loader/cache.js.map +0 -1
- package/dist/taglib/loader/index.js.map +0 -1
- package/dist/taglib/loader/json-file-reader.js.map +0 -1
- package/dist/taglib/loader/loadAttributeFromProps.js.map +0 -1
- package/dist/taglib/loader/loadAttributes.js.map +0 -1
- package/dist/taglib/loader/loadTagFromFile.js.map +0 -1
- package/dist/taglib/loader/loadTagFromProps.js.map +0 -1
- package/dist/taglib/loader/loadTaglibFromFile.js.map +0 -1
- package/dist/taglib/loader/loadTaglibFromProps.js.map +0 -1
- package/dist/taglib/loader/loaders.js.map +0 -1
- package/dist/taglib/loader/scanTagsDir.js.map +0 -1
- package/dist/taglib/loader/tag-def-from-code.js.map +0 -1
- package/dist/taglib/loader/types.js.map +0 -1
- package/dist/taglib/lookup/index.js.map +0 -1
- package/dist/util/should-optimize.js.map +0 -1
- package/dist/util/try-load-translator.js.map +0 -1
|
@@ -2,5 +2,4 @@
|
|
|
2
2
|
require("./traverse/patch");
|
|
3
3
|
require("./generator/patch");
|
|
4
4
|
var _types = require("@babel/types");Object.keys(_types).forEach(function (key) {if (key === "default" || key === "__esModule") return;if (Object.prototype.hasOwnProperty.call(_exportNames, key)) return;if (key in exports && exports[key] === _types[key]) return;exports[key] = _types[key];});
|
|
5
|
-
var _definitions = require("./types/definitions");exports.MARKO_TYPES = _definitions.MARKO_TYPES;
|
|
6
|
-
//# sourceMappingURL=index.js.map
|
|
5
|
+
var _definitions = require("./types/definitions");exports.MARKO_TYPES = _definitions.MARKO_TYPES;
|
|
@@ -190,5 +190,4 @@ MarkoDefinitions;exports.default = _default;
|
|
|
190
190
|
const MARKO_TYPES = Object.keys(MarkoDefinitions);exports.MARKO_TYPES = MARKO_TYPES;
|
|
191
191
|
const MARKO_ALIAS_TYPES = Array.from(
|
|
192
192
|
new Set(
|
|
193
|
-
MARKO_TYPES.reduce((all, t) => all.concat(MarkoDefinitions[t].aliases), [])));exports.MARKO_ALIAS_TYPES = MARKO_ALIAS_TYPES;
|
|
194
|
-
//# sourceMappingURL=definitions.js.map
|
|
193
|
+
MARKO_TYPES.reduce((all, t) => all.concat(MarkoDefinitions[t].aliases), [])));exports.MARKO_ALIAS_TYPES = MARKO_ALIAS_TYPES;
|
package/dist/config.js
CHANGED
|
@@ -195,5 +195,4 @@ var _fs2 = require("./taglib/fs");let config;const globalThis = typeof window ==
|
|
|
195
195
|
* A regexp or function that receives an import path that matches file types known to be client side assets.
|
|
196
196
|
*/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)$/, /**
|
|
197
197
|
* Set to true in order to bring in the hot module replacement runtime.
|
|
198
|
-
*/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);
|
|
199
|
-
//# sourceMappingURL=config.js.map
|
|
198
|
+
*/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);
|
package/dist/index.js
CHANGED
package/dist/register.js
CHANGED
package/dist/taglib/fs.js
CHANGED
package/dist/taglib/index.js
CHANGED
|
@@ -34,5 +34,4 @@ exports.clearCache = clearCache;
|
|
|
34
34
|
exports.createTaglib = createTaglib;
|
|
35
35
|
exports.loadTaglibFromProps = loadTaglibFromProps;
|
|
36
36
|
exports.loadTaglibFromFile = loadTaglibFromFile;
|
|
37
|
-
exports.loadTag = loadTag;
|
|
38
|
-
//# sourceMappingURL=index.js.map
|
|
37
|
+
exports.loadTag = loadTag;
|
|
@@ -240,5 +240,4 @@ loadAttributeFromProps.isSupportedProperty = function (name) {
|
|
|
240
240
|
return hasOwnProperty.call(AttrLoader.prototype, name);
|
|
241
241
|
};
|
|
242
242
|
|
|
243
|
-
module.exports = loadAttributeFromProps;
|
|
244
|
-
//# sourceMappingURL=loadAttributeFromProps.js.map
|
|
243
|
+
module.exports = loadAttributeFromProps;
|
|
@@ -555,5 +555,4 @@ function loadTagFromProps(tag, tagProps, dependencyChain) {
|
|
|
555
555
|
|
|
556
556
|
module.exports = loadTagFromProps;
|
|
557
557
|
|
|
558
|
-
loadTagFromProps.isSupportedProperty = isSupportedProperty;
|
|
559
|
-
//# sourceMappingURL=loadTagFromProps.js.map
|
|
558
|
+
loadTagFromProps.isSupportedProperty = isSupportedProperty;
|
|
@@ -20,5 +20,4 @@ exports.loadTaglibFromProps = require("./loadTaglibFromProps");
|
|
|
20
20
|
exports.loadTaglibFromFile = require("./loadTaglibFromFile");
|
|
21
21
|
exports.loadAttributes = require("./loadAttributes");
|
|
22
22
|
exports.isSupportedAttributeProperty = isSupportedAttributeProperty;
|
|
23
|
-
exports.isSupportedTagProperty = isSupportedTagProperty;
|
|
24
|
-
//# sourceMappingURL=loaders.js.map
|
|
23
|
+
exports.isSupportedTagProperty = isSupportedTagProperty;
|
package/dist/traverse.d.ts
CHANGED
|
@@ -553,6 +553,8 @@ export class NodePath<T = Node> {
|
|
|
553
553
|
context?: boolean | TraversalContext,
|
|
554
554
|
): T[K] extends Array<Node | null | undefined>
|
|
555
555
|
? Array<NodePath<T[K][number]>>
|
|
556
|
+
: T[K] extends Array<Node | null | undefined> | null | undefined
|
|
557
|
+
? Array<NodePath<NonNullable<T[K]>[number]>> | NodePath<null | undefined>
|
|
556
558
|
: T[K] extends Node | null | undefined
|
|
557
559
|
? NodePath<T[K]>
|
|
558
560
|
: never;
|
package/index.d.ts
CHANGED
|
@@ -25,7 +25,12 @@ export type Config = {
|
|
|
25
25
|
translator?: any;
|
|
26
26
|
fileSystem?: typeof import("fs");
|
|
27
27
|
modules?: "esm" | "cjs";
|
|
28
|
-
resolveVirtualDependency?:
|
|
28
|
+
resolveVirtualDependency?:
|
|
29
|
+
| ((
|
|
30
|
+
filename: string,
|
|
31
|
+
dep: { virtualPath: string; code: string; map?: SourceMap }
|
|
32
|
+
) => string)
|
|
33
|
+
| null;
|
|
29
34
|
hydrateIncludeImports?: RegExp | ((request: string) => boolean);
|
|
30
35
|
optimize?: boolean;
|
|
31
36
|
cache?: Map<unknown, unknown>;
|
|
@@ -48,10 +53,7 @@ export type MarkoMeta = {
|
|
|
48
53
|
component?: string;
|
|
49
54
|
watchFiles: string[];
|
|
50
55
|
tags?: string[];
|
|
51
|
-
deps: Array<
|
|
52
|
-
| string
|
|
53
|
-
| Dep
|
|
54
|
-
>;
|
|
56
|
+
deps: Array<string | Dep>;
|
|
55
57
|
};
|
|
56
58
|
|
|
57
59
|
export type CompileResult = {
|
|
@@ -85,12 +87,18 @@ export function compileFileSync(
|
|
|
85
87
|
config?: Config
|
|
86
88
|
): CompileResult;
|
|
87
89
|
|
|
88
|
-
export function getRuntimeEntryFiles(
|
|
90
|
+
export function getRuntimeEntryFiles(
|
|
91
|
+
output: string,
|
|
92
|
+
translator?: string | undefined
|
|
93
|
+
): string[];
|
|
89
94
|
|
|
90
95
|
export namespace taglib {
|
|
91
96
|
export function excludeDir(dirname: string): void;
|
|
92
97
|
export function excludePackage(packageName: string): void;
|
|
93
|
-
export function register(id: string, props: { [x:string]: unknown }): void;
|
|
94
|
-
export function buildLookup(
|
|
98
|
+
export function register(id: string, props: { [x: string]: unknown }): void;
|
|
99
|
+
export function buildLookup(
|
|
100
|
+
dirname: string,
|
|
101
|
+
translator?: unknown
|
|
102
|
+
): TaglibLookup;
|
|
95
103
|
export function clearCaches(): void;
|
|
96
104
|
}
|
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.
|
|
4
|
+
"version": "5.21.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": {
|
|
@@ -13,7 +13,7 @@
|
|
|
13
13
|
"@babel/runtime": "^7.16.0",
|
|
14
14
|
"@babel/traverse": "^7.16.0",
|
|
15
15
|
"@babel/types": "^7.16.0",
|
|
16
|
-
"@marko/babel-utils": "^5.
|
|
16
|
+
"@marko/babel-utils": "^5.21.0",
|
|
17
17
|
"complain": "^1.6.0",
|
|
18
18
|
"he": "^1.2.0",
|
|
19
19
|
"htmljs-parser": "^3.3.1",
|
|
@@ -28,7 +28,7 @@
|
|
|
28
28
|
"strip-json-comments": "^3.1.1"
|
|
29
29
|
},
|
|
30
30
|
"devDependencies": {
|
|
31
|
-
"@marko/translator-default": "^5.
|
|
31
|
+
"@marko/translator-default": "^5.21.0"
|
|
32
32
|
},
|
|
33
33
|
"files": [
|
|
34
34
|
"dist",
|
|
@@ -48,7 +48,7 @@
|
|
|
48
48
|
"plugin"
|
|
49
49
|
],
|
|
50
50
|
"license": "MIT",
|
|
51
|
-
"main": "
|
|
51
|
+
"main": "src/index.js",
|
|
52
52
|
"main:dev": "src/index.js",
|
|
53
53
|
"main:npm": "dist/index.js",
|
|
54
54
|
"publishConfig": {
|
|
@@ -58,6 +58,5 @@
|
|
|
58
58
|
"type": "git",
|
|
59
59
|
"url": "https://github.com/marko-js/marko/tree/master/packages/compiler"
|
|
60
60
|
},
|
|
61
|
-
"types": "index.d.ts"
|
|
62
|
-
"gitHead": "637f064c6c8c5c9767d2f6e8a645937eca874a49"
|
|
61
|
+
"types": "index.d.ts"
|
|
63
62
|
}
|
package/src/index.js
ADDED
|
@@ -0,0 +1,117 @@
|
|
|
1
|
+
export * as types from "./babel-types";
|
|
2
|
+
import path from "path";
|
|
3
|
+
import * as babel from "@babel/core";
|
|
4
|
+
import corePlugin from "./babel-plugin";
|
|
5
|
+
import defaultConfig from "./config";
|
|
6
|
+
import * as taglib from "./taglib";
|
|
7
|
+
import shouldOptimize from "./util/should-optimize";
|
|
8
|
+
import tryLoadTranslator from "./util/try-load-translator";
|
|
9
|
+
export { taglib };
|
|
10
|
+
|
|
11
|
+
let globalConfig = { ...defaultConfig };
|
|
12
|
+
export function configure(newConfig) {
|
|
13
|
+
globalConfig = { ...defaultConfig, ...newConfig };
|
|
14
|
+
}
|
|
15
|
+
|
|
16
|
+
export async function compile(src, filename, config) {
|
|
17
|
+
const babelConfig = loadBabelConfig(filename, config);
|
|
18
|
+
const babelResult = await babel.transformAsync(src, babelConfig);
|
|
19
|
+
scheduleDefaultClear(config);
|
|
20
|
+
return buildResult(babelResult);
|
|
21
|
+
}
|
|
22
|
+
|
|
23
|
+
export function compileSync(src, filename, config) {
|
|
24
|
+
const babelConfig = loadBabelConfig(filename, config);
|
|
25
|
+
const babelResult = babel.transformSync(src, babelConfig);
|
|
26
|
+
scheduleDefaultClear(config);
|
|
27
|
+
return buildResult(babelResult);
|
|
28
|
+
}
|
|
29
|
+
|
|
30
|
+
export async function compileFile(filename, config) {
|
|
31
|
+
return new Promise((resolve, reject) => {
|
|
32
|
+
getFs(config).readFile(filename, "utf-8", (err, src) => {
|
|
33
|
+
if (err) {
|
|
34
|
+
return reject(err);
|
|
35
|
+
}
|
|
36
|
+
|
|
37
|
+
return resolve(compile(src, filename, config));
|
|
38
|
+
});
|
|
39
|
+
});
|
|
40
|
+
}
|
|
41
|
+
|
|
42
|
+
export function compileFileSync(filename, config) {
|
|
43
|
+
const src = getFs(config).readFileSync(filename, "utf-8");
|
|
44
|
+
return compileSync(src, filename, config);
|
|
45
|
+
}
|
|
46
|
+
|
|
47
|
+
export function getRuntimeEntryFiles(output, requestedTranslator) {
|
|
48
|
+
const translator = tryLoadTranslator(requestedTranslator);
|
|
49
|
+
if (translator && translator.getRuntimeEntryFiles) {
|
|
50
|
+
return translator.getRuntimeEntryFiles(output, shouldOptimize());
|
|
51
|
+
}
|
|
52
|
+
|
|
53
|
+
return [];
|
|
54
|
+
}
|
|
55
|
+
|
|
56
|
+
function loadBabelConfig(filename, config) {
|
|
57
|
+
const markoConfig = { ...globalConfig, ...config, babelConfig: undefined };
|
|
58
|
+
const requiredPlugins = [[corePlugin, markoConfig]];
|
|
59
|
+
const baseBabelConfig = {
|
|
60
|
+
filenameRelative: filename
|
|
61
|
+
? path.relative(process.cwd(), filename)
|
|
62
|
+
: undefined,
|
|
63
|
+
sourceFileName: filename ? path.basename(filename) : undefined,
|
|
64
|
+
...(config && config.babelConfig),
|
|
65
|
+
filename,
|
|
66
|
+
sourceType: "module",
|
|
67
|
+
sourceMaps: markoConfig.sourceMaps,
|
|
68
|
+
code: markoConfig.code,
|
|
69
|
+
ast: markoConfig.ast
|
|
70
|
+
};
|
|
71
|
+
|
|
72
|
+
if (markoConfig.modules === "cjs") {
|
|
73
|
+
requiredPlugins.push([
|
|
74
|
+
require.resolve("@babel/plugin-transform-modules-commonjs"),
|
|
75
|
+
{ loose: true }
|
|
76
|
+
]);
|
|
77
|
+
}
|
|
78
|
+
|
|
79
|
+
baseBabelConfig.plugins = requiredPlugins.concat(
|
|
80
|
+
baseBabelConfig.plugins || []
|
|
81
|
+
);
|
|
82
|
+
|
|
83
|
+
return babel.loadPartialConfig(baseBabelConfig).options;
|
|
84
|
+
}
|
|
85
|
+
|
|
86
|
+
function buildResult(babelResult) {
|
|
87
|
+
const {
|
|
88
|
+
ast,
|
|
89
|
+
map,
|
|
90
|
+
code,
|
|
91
|
+
metadata: { marko: meta }
|
|
92
|
+
} = babelResult;
|
|
93
|
+
return { ast, map, code, meta };
|
|
94
|
+
}
|
|
95
|
+
|
|
96
|
+
let clearingDefaultCache = false;
|
|
97
|
+
function scheduleDefaultClear(config) {
|
|
98
|
+
if (
|
|
99
|
+
!clearingDefaultCache &&
|
|
100
|
+
(clearingDefaultCache = isDefaultCache(config))
|
|
101
|
+
) {
|
|
102
|
+
setImmediate(_clearDefaults);
|
|
103
|
+
}
|
|
104
|
+
}
|
|
105
|
+
|
|
106
|
+
export function _clearDefaults() {
|
|
107
|
+
clearingDefaultCache = false;
|
|
108
|
+
globalConfig.cache.clear();
|
|
109
|
+
}
|
|
110
|
+
|
|
111
|
+
function isDefaultCache(config) {
|
|
112
|
+
return !config.cache || config.cache === globalConfig.cache;
|
|
113
|
+
}
|
|
114
|
+
|
|
115
|
+
function getFs(config) {
|
|
116
|
+
return config.fileSystem || globalConfig.fileSystem;
|
|
117
|
+
}
|
package/LICENSE
DELETED
|
@@ -1,21 +0,0 @@
|
|
|
1
|
-
The MIT License (MIT)
|
|
2
|
-
|
|
3
|
-
Copyright 2020 eBay Inc. and contributors
|
|
4
|
-
|
|
5
|
-
Permission is hereby granted, free of charge, to any person obtaining a copy
|
|
6
|
-
of this software and associated documentation files (the "Software"), to deal
|
|
7
|
-
in the Software without restriction, including without limitation the rights
|
|
8
|
-
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
|
9
|
-
copies of the Software, and to permit persons to whom the Software is
|
|
10
|
-
furnished to do so, subject to the following conditions:
|
|
11
|
-
|
|
12
|
-
The above copyright notice and this permission notice shall be included in
|
|
13
|
-
all copies or substantial portions of the Software.
|
|
14
|
-
|
|
15
|
-
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
|
16
|
-
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
|
17
|
-
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
|
18
|
-
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
|
19
|
-
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
|
20
|
-
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
|
|
21
|
-
THE SOFTWARE.
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"sources":["../../src/babel-plugin/file.js"],"names":["CWD","process","cwd","MarkoFile","File","addHelper","Error","buildCodeFrameError","node","msg","SyntaxError","loc","frame","code","start","line","column","end","undefined","highlightCode","finalMsg","path","relative","opts","filename","err","Object","defineProperty","get","set"],"mappings":"uJAAA;AACA;AACA;AACA,MAAMA,GAAG,GAAGC,OAAO,CAACC,GAAR,EAAZ;;AAEO,MAAMC,SAAN,SAAwBC,UAAxB,CAA6B;AAClCC,EAAAA,SAAS,GAAG;AACV,UAAM,IAAIC,KAAJ,CAAU,qDAAV,CAAN;AACD;;AAEDC,EAAAA,mBAAmB,CAACC,IAAD,EAAOC,GAAP,EAAYH,KAAK,GAAGI,WAApB,EAAiC;AAClD,UAAM,EAAEC,GAAF,KAAUH,IAAhB;AACA,UAAMI,KAAK;AACTD,IAAAA,GAAG;AACH;AACE,SAAKE,IADP;AAEE;AACEC,MAAAA,KAAK,EAAE;AACLC,QAAAA,IAAI,EAAEJ,GAAG,CAACG,KAAJ,CAAUC,IADX;AAELC,QAAAA,MAAM,EAAEL,GAAG,CAACG,KAAJ,CAAUE,MAAV,GAAmB,CAFtB,EADT;;AAKEC,MAAAA,GAAG;AACDN,MAAAA,GAAG,CAACM,GAAJ,IAAWN,GAAG,CAACG,KAAJ,CAAUC,IAAV,KAAmBJ,GAAG,CAACM,GAAJ,CAAQF,IAAtC;AACI;AACEA,QAAAA,IAAI,EAAEJ,GAAG,CAACM,GAAJ,CAAQF,IADhB;AAEEC,QAAAA,MAAM,EAAEL,GAAG,CAACM,GAAJ,CAAQD,MAAR,GAAiB,CAF3B,EADJ;;AAKIE,MAAAA,SAXR,EAFF;;AAeE,MAAEC,aAAa,EAAE,IAAjB,EAfF,CAFF;;;AAoBA,UAAMC,QAAQ,GAAI,GAAEC,cAAKC,QAAL,CAActB,GAAd,EAAmB,KAAKuB,IAAL,CAAUC,QAA7B,CAAuC;AACzDb,IAAAA,GAAG,GAAI,IAAGA,GAAG,CAACG,KAAJ,CAAUC,IAAK,IAAGJ,GAAG,CAACG,KAAJ,CAAUE,MAAV,GAAmB,CAAE,GAA9C,GAAmD;AACvD,SAAIP,GAAI,KAAIG,KAAK,IAAI,EAAG,EAFzB;;AAIA,UAAMa,GAAG,GAAG,IAAInB,KAAJ,EAAZ;;AAEA;AACAoB,IAAAA,MAAM,CAACC,cAAP,CAAsBF,GAAtB,EAA2B,SAA3B,EAAsC;AACpCG,MAAAA,GAAG,GAAG;AACJ,eAAOR,QAAP;AACD,OAHmC;AAIpCS,MAAAA,GAAG,GAAG,CAAE,CAJ4B,EAAtC;;AAMA,WAAOJ,GAAP;AACD,GAzCiC,C","sourcesContent":["import path from \"path\";\nimport { File } from \"@babel/core\";\nimport { codeFrameColumns } from \"@babel/code-frame\";\nconst CWD = process.cwd();\n\nexport class MarkoFile extends File {\n addHelper() {\n throw new Error(\"addHelper is not supported during a Marko transform\");\n }\n\n buildCodeFrameError(node, msg, Error = SyntaxError) {\n const { loc } = node;\n const frame =\n loc &&\n codeFrameColumns(\n this.code,\n {\n start: {\n line: loc.start.line,\n column: loc.start.column + 1\n },\n end:\n loc.end && loc.start.line === loc.end.line\n ? {\n line: loc.end.line,\n column: loc.end.column + 1\n }\n : undefined\n },\n { highlightCode: true }\n );\n\n const finalMsg = `${path.relative(CWD, this.opts.filename)}${\n loc ? `(${loc.start.line},${loc.start.column + 1})` : \"\"\n }: ${msg}\\n${frame || \"\"}`;\n\n const err = new Error();\n\n // Prevent babel from changing our error message.\n Object.defineProperty(err, \"message\", {\n get() {\n return finalMsg;\n },\n set() {}\n });\n return err;\n }\n}\n"],"file":"file.js"}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"sources":["../../src/babel-plugin/index.js"],"names":["SOURCE_FILES","WeakMap","api","markoOpts","assertVersion","translator","output","optimize","undefined","cache","using","shouldOptimize","translate","Error","resolveVirtualDependency","curOpts","name","manipulateOptions","opts","parserOverride","code","prevFS","curFS","fileSystem","file","getMarkoFile","finalAst","t","cloneNode","ast","set","pre","metadata","sourceFile","get","taglibLookup","___taglibLookup","rootTranslators","buildCodeFrameError","buildError","hub","marko","shallowClone","MarkoFile","prototype","bind","___getMarkoFile","id","taglibsById","addPlugin","push","traverseAll","watchFiles","filter","unique","fileOpts","compileCache","Map","filename","isSource","isMigrate","canCache","contentHash","update","digest","cacheKey","cached","watchFile","mtime","Infinity","statSync","time","path","dirname","type","program","sourceType","body","directives","meta","macros","deps","tags","scope","crawl","rootMigrators","migrator","migrators","migrate","rootTransformers","transformer","transformers","transform","taglibId","filePath","length","endsWith","Date","now","analyze","e","delete","data","clone","key","v","Ctor","constructor","Array","Object","Set","RegExp","mergeVisitors","all","isArray","visitors","merge","explode","Program","mergedVisitors","state","enter","_call","traverse","exit","arr","plugin","hook","default","item","i","list","indexOf"],"mappings":"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","sourcesContent":["import path from \"path\";\nimport { createHash } from \"crypto\";\nimport * as t from \"../babel-types\";\nimport { getTemplateId } from \"@marko/babel-utils\";\nimport { visitors } from \"@babel/traverse\";\nimport { buildLookup } from \"../taglib\";\nimport { parseMarko } from \"./parser\";\nimport { visitor as migrate } from \"./plugins/migrate\";\nimport { visitor as transform } from \"./plugins/transform\";\nimport { MarkoFile } from \"./file\";\nimport { curFS, setFS } from \"../taglib/fs\";\nimport tryLoadTranslator from \"../util/try-load-translator\";\nimport shouldOptimize from \"../util/should-optimize\";\n\nconst SOURCE_FILES = new WeakMap();\n\nexport default (api, markoOpts) => {\n api.assertVersion(7);\n const translator = (markoOpts.translator = tryLoadTranslator(\n markoOpts.translator\n ));\n markoOpts.output = markoOpts.output || \"html\";\n\n if (markoOpts.optimize === undefined) {\n api.cache.using(shouldOptimize);\n markoOpts.optimize = shouldOptimize();\n }\n\n if (!translator || !translator.translate) {\n throw new Error(\n \"@marko/compiler: translator must provide a translate visitor object\"\n );\n }\n\n if (\n markoOpts.output === \"hydrate\" &&\n typeof markoOpts.resolveVirtualDependency !== \"function\"\n ) {\n throw new Error(\n `@marko/compiler: the \"resolveVirtualDependency\" option must be supplied when output is \"hydrate\".`\n );\n }\n\n let curOpts;\n\n return {\n name: \"marko\",\n manipulateOptions(opts) {\n curOpts = opts;\n },\n parserOverride(code) {\n let prevFS = curFS;\n setFS(markoOpts.fileSystem);\n try {\n const file = getMarkoFile(code, curOpts, markoOpts);\n const finalAst = t.cloneNode(file.ast, true);\n SOURCE_FILES.set(finalAst, file);\n return finalAst;\n } finally {\n setFS(prevFS);\n }\n },\n pre(file) {\n let prevFS = curFS;\n curOpts = undefined;\n setFS(markoOpts.fileSystem);\n try {\n if (markoOpts.output === \"source\" || markoOpts.output === \"migrate\") {\n return file;\n }\n\n const { ast, metadata } = file;\n const sourceFile = SOURCE_FILES.get(ast);\n const taglibLookup = sourceFile.___taglibLookup;\n const rootTranslators = [];\n const { buildCodeFrameError } = file;\n const { buildError } = file.hub;\n metadata.marko = shallowClone(sourceFile.metadata.marko);\n file.buildCodeFrameError = MarkoFile.prototype.buildCodeFrameError;\n file.hub.buildError = file.buildCodeFrameError.bind(file);\n file.markoOpts = markoOpts;\n file.___taglibLookup = taglibLookup;\n file.___getMarkoFile = getMarkoFile;\n\n if (markoOpts.output !== \"hydrate\") {\n for (const id in taglibLookup.taglibsById) {\n addPlugin(\n metadata.marko,\n rootTranslators,\n taglibLookup.taglibsById[id].translator\n );\n }\n }\n\n rootTranslators.push(translator.translate);\n traverseAll(file, rootTranslators);\n file.buildCodeFrameError = buildCodeFrameError;\n file.hub.buildError = buildError;\n file.markoOpts =\n file.___taglibLookup =\n file.___getMarkoFile =\n undefined;\n\n metadata.marko.watchFiles = metadata.marko.watchFiles.filter(unique);\n } finally {\n setFS(prevFS);\n }\n }\n };\n};\n\nexport function getMarkoFile(code, fileOpts, markoOpts) {\n const { translator } = markoOpts;\n let compileCache = markoOpts.cache.get(translator);\n\n if (!compileCache) {\n markoOpts.cache.set(translator, (compileCache = new Map()));\n }\n\n const { filename } = fileOpts;\n const isSource = markoOpts.output === \"source\";\n const isMigrate = markoOpts.output === \"migrate\";\n const canCache = !(isSource || isMigrate);\n const id = getTemplateId(markoOpts.optimize, filename);\n const contentHash = canCache && createHash(\"MD5\").update(code).digest(\"hex\");\n const cacheKey = canCache && createHash(\"MD5\").update(id).digest(\"hex\");\n\n let cached = canCache && compileCache.get(cacheKey);\n\n if (cached) {\n if (cached.contentHash !== contentHash) {\n // File content changed, invalidate the cache.\n cached = undefined;\n } else {\n for (const watchFile of cached.file.metadata.marko.watchFiles) {\n let mtime = Infinity;\n try {\n mtime = markoOpts.fileSystem.statSync(watchFile).mtime;\n // eslint-disable-next-line no-empty\n } catch {}\n\n if (mtime > cached.time) {\n // Some dependency changed, invalidate the cache.\n cached = undefined;\n break;\n }\n }\n }\n }\n\n if (cached) {\n return cached.file;\n }\n\n const taglibLookup = buildLookup(path.dirname(filename), translator);\n\n const file = new MarkoFile(fileOpts, {\n code,\n ast: {\n type: \"File\",\n program: {\n type: \"Program\",\n sourceType: \"module\",\n body: [],\n directives: []\n }\n }\n });\n\n const meta = (file.metadata.marko = {\n id,\n macros: {},\n deps: [],\n tags: [],\n watchFiles: []\n });\n\n file.markoOpts = markoOpts;\n file.___taglibLookup = taglibLookup;\n file.___getMarkoFile = getMarkoFile;\n\n parseMarko(file);\n\n if (isSource) {\n return file;\n }\n\n file.path.scope.crawl(); // Initialize bindings.\n\n const rootMigrators = [];\n for (const id in taglibLookup.taglibsById) {\n for (const migrator of taglibLookup.taglibsById[id].migrators) {\n addPlugin(meta, rootMigrators, migrator);\n }\n }\n\n rootMigrators.push(migrate);\n traverseAll(file, rootMigrators);\n\n if (isMigrate) {\n return file;\n }\n\n const rootTransformers = [];\n for (const id in taglibLookup.taglibsById) {\n for (const transformer of taglibLookup.taglibsById[id].transformers) {\n addPlugin(meta, rootTransformers, transformer);\n }\n }\n\n rootTransformers.push(transform);\n traverseAll(file, rootTransformers);\n\n for (const taglibId in taglibLookup.taglibsById) {\n const { filePath } = taglibLookup.taglibsById[taglibId];\n\n if (\n filePath[filePath.length - 5] === \".\" &&\n filePath.endsWith(\"marko.json\")\n ) {\n meta.watchFiles.push(filePath);\n }\n }\n\n compileCache.set(cacheKey, {\n time: Date.now(),\n file,\n contentHash\n });\n\n if (translator.analyze) {\n try {\n traverseAll(file, translator.analyze);\n } catch (e) {\n compileCache.delete(cacheKey);\n throw e;\n }\n }\n\n return file;\n}\n\nfunction shallowClone(data) {\n const clone = {};\n\n for (const key in data) {\n const v = data[key];\n\n if (v !== undefined) {\n if (v === null || typeof v !== \"object\") {\n clone[key] = v;\n } else {\n const Ctor = v.constructor;\n\n switch (Ctor) {\n case Array:\n clone[key] = [...v];\n break;\n case Object:\n case null:\n clone[key] = { ...v };\n break;\n case Map:\n case Set:\n case Date:\n case RegExp:\n clone[key] = new Ctor(v);\n break;\n\n default:\n throw new Error(`Unsupported metadata type of ${Ctor.name}`);\n }\n }\n }\n }\n\n return clone;\n}\n\nfunction mergeVisitors(all) {\n if (Array.isArray(all)) {\n if (all.length === 1) {\n all = all[0];\n } else {\n return visitors.merge(all);\n }\n }\n\n return visitors.explode(all);\n}\n\nfunction traverseAll(file, visitors) {\n const program = file.path;\n const { Program, ...mergedVisitors } = mergeVisitors(visitors);\n program.state = {};\n\n // Traverse only walks into children by default\n // This manually traverses into the Program node as well.\n if (!(Program && Program.enter && program._call(Program.enter))) {\n program.traverse(mergedVisitors, program.state);\n\n if (Program && Program.exit) {\n program._call(Program.exit);\n }\n }\n}\n\nfunction addPlugin(meta, arr, plugin) {\n if (plugin) {\n const hook = plugin.hook.default || plugin.hook;\n\n if (plugin.path) {\n meta.watchFiles.push(plugin.path);\n }\n\n if (Array.isArray(hook)) {\n arr.push(...hook);\n } else {\n arr.push(hook);\n }\n }\n}\n\nfunction unique(item, i, list) {\n return list.indexOf(item) === i;\n}\n"],"file":"index.js"}
|