@qiankunjs/shared 0.0.1-rc.0 → 0.0.1-rc.2
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/cjs/assets-transpilers/index.js.map +1 -1
- package/dist/cjs/assets-transpilers/link.js +29 -46
- package/dist/cjs/assets-transpilers/link.js.map +1 -1
- package/dist/cjs/assets-transpilers/script.d.ts +3 -3
- package/dist/cjs/assets-transpilers/script.js +8 -9
- package/dist/cjs/assets-transpilers/script.js.map +1 -1
- package/dist/cjs/assets-transpilers/types.d.ts +3 -3
- package/dist/cjs/assets-transpilers/types.js +3 -3
- package/dist/cjs/assets-transpilers/types.js.map +1 -1
- package/dist/cjs/assets-transpilers/utils.d.ts +1 -0
- package/dist/cjs/assets-transpilers/utils.js +22 -0
- package/dist/cjs/assets-transpilers/utils.js.map +1 -0
- package/dist/cjs/module-resolver/index.d.ts +1 -1
- package/dist/cjs/module-resolver/index.js +10 -10
- package/dist/cjs/module-resolver/index.js.map +1 -1
- package/dist/esm/assets-transpilers/index.js.map +1 -1
- package/dist/esm/assets-transpilers/link.js +29 -46
- package/dist/esm/assets-transpilers/link.js.map +1 -1
- package/dist/esm/assets-transpilers/script.d.ts +3 -3
- package/dist/esm/assets-transpilers/script.js +8 -9
- package/dist/esm/assets-transpilers/script.js.map +1 -1
- package/dist/esm/assets-transpilers/types.d.ts +3 -3
- package/dist/esm/assets-transpilers/types.js +3 -3
- package/dist/esm/assets-transpilers/types.js.map +1 -1
- package/dist/esm/assets-transpilers/utils.d.ts +1 -0
- package/dist/esm/assets-transpilers/utils.js +13 -0
- package/dist/esm/assets-transpilers/utils.js.map +1 -0
- package/dist/esm/module-resolver/index.d.ts +1 -1
- package/dist/esm/module-resolver/index.js +10 -10
- package/dist/esm/module-resolver/index.js.map +1 -1
- package/package.json +2 -2
- package/src/assets-transpilers/index.ts +3 -3
- package/src/assets-transpilers/link.ts +23 -43
- package/src/assets-transpilers/script.ts +11 -14
- package/src/assets-transpilers/types.ts +3 -3
- package/src/assets-transpilers/utils.ts +16 -0
- package/src/module-resolver/index.ts +9 -9
|
@@ -7,17 +7,20 @@ import _objectSpread from "@babel/runtime/helpers/esm/objectSpread2";
|
|
|
7
7
|
import { getEntireUrl } from "../utils";
|
|
8
8
|
import { preTranspile as preTranspileScript } from "./script";
|
|
9
9
|
import { Mode } from "./types";
|
|
10
|
-
|
|
10
|
+
import { createReusingObjectUrl } from "./utils";
|
|
11
|
+
var preTranspileStyleSheetLink = function preTranspileStyleSheetLink(link, baseURI, opts) {
|
|
11
12
|
var sandbox = opts.sandbox,
|
|
12
13
|
moduleResolver = opts.moduleResolver;
|
|
13
|
-
var href = link.href
|
|
14
|
+
var href = link.href,
|
|
15
|
+
rel = link.rel;
|
|
14
16
|
if (sandbox) {
|
|
15
|
-
|
|
17
|
+
// filter preload links
|
|
18
|
+
if (href && rel === 'stylesheet') {
|
|
16
19
|
var linkHref = getEntireUrl(href, baseURI);
|
|
17
20
|
var matchedAssets = moduleResolver === null || moduleResolver === void 0 ? void 0 : moduleResolver(linkHref);
|
|
18
21
|
if (matchedAssets) {
|
|
19
22
|
return {
|
|
20
|
-
mode: Mode.
|
|
23
|
+
mode: Mode.REUSED_DEP_IN_SANDBOX,
|
|
21
24
|
result: _objectSpread({
|
|
22
25
|
src: linkHref
|
|
23
26
|
}, matchedAssets)
|
|
@@ -29,26 +32,9 @@ var preTranspile = function preTranspile(link, baseURI, opts) {
|
|
|
29
32
|
mode: Mode.NONE
|
|
30
33
|
};
|
|
31
34
|
};
|
|
32
|
-
|
|
33
|
-
/**
|
|
34
|
-
* While the assets are transpiling in sandbox, it means they will be evaluated with manual fetching,
|
|
35
|
-
* thus we need to set the attribute `as` to fetch instead of script or style to avoid preload cache missing.
|
|
36
|
-
* see https://stackoverflow.com/questions/52635660/can-link-rel-preload-be-made-to-work-with-fetch/63814972#63814972
|
|
37
|
-
*/
|
|
38
35
|
var postProcessPreloadLink = function postProcessPreloadLink(link, baseURI, opts) {
|
|
39
36
|
var as = link.as,
|
|
40
37
|
href = link.href;
|
|
41
|
-
var revokeAfterLoaded = function revokeAfterLoaded(objectURL, link) {
|
|
42
|
-
var revoke = function revoke() {
|
|
43
|
-
return URL.revokeObjectURL(objectURL);
|
|
44
|
-
};
|
|
45
|
-
link.addEventListener('load', revoke, {
|
|
46
|
-
once: true
|
|
47
|
-
});
|
|
48
|
-
link.addEventListener('error', revoke, {
|
|
49
|
-
once: true
|
|
50
|
-
});
|
|
51
|
-
};
|
|
52
38
|
switch (as) {
|
|
53
39
|
case 'script':
|
|
54
40
|
{
|
|
@@ -58,19 +44,20 @@ var postProcessPreloadLink = function postProcessPreloadLink(link, baseURI, opts
|
|
|
58
44
|
mode = _preTranspileScript.mode,
|
|
59
45
|
result = _preTranspileScript.result;
|
|
60
46
|
switch (mode) {
|
|
61
|
-
|
|
47
|
+
/**
|
|
48
|
+
* While the assets are transpiling in sandbox, it means they will be evaluated with manual fetching,
|
|
49
|
+
* thus we need to set the attribute `as` to fetch instead of script or style to avoid preload cache missing.
|
|
50
|
+
* see https://stackoverflow.com/questions/52635660/can-link-rel-preload-be-made-to-work-with-fetch/63814972#63814972
|
|
51
|
+
*/
|
|
52
|
+
case Mode.REMOTE_ASSETS_IN_SANDBOX:
|
|
62
53
|
{
|
|
63
54
|
link.as = 'fetch';
|
|
64
55
|
break;
|
|
65
56
|
}
|
|
66
|
-
case Mode.
|
|
57
|
+
case Mode.REUSED_DEP_IN_SANDBOX:
|
|
67
58
|
{
|
|
68
59
|
var url = result.url;
|
|
69
|
-
|
|
70
|
-
type: 'text/javascript'
|
|
71
|
-
}));
|
|
72
|
-
link.href = objectURL;
|
|
73
|
-
revokeAfterLoaded(objectURL, link);
|
|
60
|
+
link.href = createReusingObjectUrl(href, url, 'text/javascript');
|
|
74
61
|
break;
|
|
75
62
|
}
|
|
76
63
|
}
|
|
@@ -78,20 +65,17 @@ var postProcessPreloadLink = function postProcessPreloadLink(link, baseURI, opts
|
|
|
78
65
|
}
|
|
79
66
|
case 'style':
|
|
80
67
|
{
|
|
81
|
-
var
|
|
82
|
-
href: href
|
|
68
|
+
var _preTranspileStyleShe = preTranspileStyleSheetLink({
|
|
69
|
+
href: href,
|
|
70
|
+
rel: 'stylesheet'
|
|
83
71
|
}, baseURI, opts),
|
|
84
|
-
_mode =
|
|
85
|
-
_result =
|
|
72
|
+
_mode = _preTranspileStyleShe.mode,
|
|
73
|
+
_result = _preTranspileStyleShe.result;
|
|
86
74
|
switch (_mode) {
|
|
87
|
-
case Mode.
|
|
75
|
+
case Mode.REUSED_DEP_IN_SANDBOX:
|
|
88
76
|
{
|
|
89
77
|
var _url = _result.url;
|
|
90
|
-
|
|
91
|
-
type: 'text/css'
|
|
92
|
-
}));
|
|
93
|
-
link.href = _objectURL;
|
|
94
|
-
revokeAfterLoaded(_objectURL, link);
|
|
78
|
+
link.href = createReusingObjectUrl(href, _url, 'text/css');
|
|
95
79
|
break;
|
|
96
80
|
}
|
|
97
81
|
}
|
|
@@ -103,22 +87,21 @@ var postProcessPreloadLink = function postProcessPreloadLink(link, baseURI, opts
|
|
|
103
87
|
};
|
|
104
88
|
export default function transpileLink(link, baseURI, opts) {
|
|
105
89
|
var hrefAttribute = link.getAttribute('href');
|
|
106
|
-
var
|
|
107
|
-
href: hrefAttribute || undefined
|
|
90
|
+
var _preTranspileStyleShe2 = preTranspileStyleSheetLink({
|
|
91
|
+
href: hrefAttribute || undefined,
|
|
92
|
+
rel: link.rel
|
|
108
93
|
}, baseURI, opts),
|
|
109
|
-
mode =
|
|
110
|
-
result =
|
|
94
|
+
mode = _preTranspileStyleShe2.mode,
|
|
95
|
+
result = _preTranspileStyleShe2.result;
|
|
111
96
|
switch (mode) {
|
|
112
|
-
case Mode.
|
|
97
|
+
case Mode.REUSED_DEP_IN_SANDBOX:
|
|
113
98
|
{
|
|
114
99
|
var src = result.src,
|
|
115
100
|
version = result.version,
|
|
116
101
|
url = result.url;
|
|
117
102
|
link.dataset.href = src;
|
|
118
103
|
link.dataset.version = version;
|
|
119
|
-
link.href =
|
|
120
|
-
type: 'text/css'
|
|
121
|
-
}));
|
|
104
|
+
link.href = createReusingObjectUrl(src, url, 'text/css');
|
|
122
105
|
return link;
|
|
123
106
|
}
|
|
124
107
|
case Mode.NONE:
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"names":["getEntireUrl","preTranspile","preTranspileScript","Mode","link","baseURI","opts","sandbox","moduleResolver","href","linkHref","matchedAssets","mode","
|
|
1
|
+
{"version":3,"names":["getEntireUrl","preTranspile","preTranspileScript","Mode","createReusingObjectUrl","preTranspileStyleSheetLink","link","baseURI","opts","sandbox","moduleResolver","href","rel","linkHref","matchedAssets","mode","REUSED_DEP_IN_SANDBOX","result","_objectSpread","src","NONE","postProcessPreloadLink","as","_preTranspileScript","REMOTE_ASSETS_IN_SANDBOX","url","_preTranspileStyleShe","transpileLink","hrefAttribute","getAttribute","_preTranspileStyleShe2","undefined","version","dataset"],"sources":["../../../src/assets-transpilers/link.ts"],"sourcesContent":["/**\n * @author Kuitos\n * @since 2023-04-26\n */\nimport type { MatchResult } from '../module-resolver';\nimport { getEntireUrl } from '../utils';\nimport { preTranspile as preTranspileScript } from './script';\nimport type { AssetsTranspilerOpts, BaseTranspilerOpts } from './types';\nimport { Mode } from './types';\nimport { createReusingObjectUrl } from './utils';\n\ntype PreTranspileResult =\n | { mode: Mode.REUSED_DEP_IN_SANDBOX; result: { src: string } & MatchResult }\n | { mode: Mode.NONE; result?: never };\nconst preTranspileStyleSheetLink = (\n link: Partial<Pick<HTMLLinkElement, 'href' | 'rel'>>,\n baseURI: string,\n opts: BaseTranspilerOpts,\n): PreTranspileResult => {\n const { sandbox, moduleResolver } = opts;\n const { href, rel } = link;\n\n if (sandbox) {\n // filter preload links\n if (href && rel === 'stylesheet') {\n const linkHref = getEntireUrl(href, baseURI);\n\n const matchedAssets = moduleResolver?.(linkHref);\n if (matchedAssets) {\n return {\n mode: Mode.REUSED_DEP_IN_SANDBOX,\n result: { src: linkHref, ...matchedAssets },\n };\n }\n }\n }\n\n return {\n mode: Mode.NONE,\n };\n};\n\nconst postProcessPreloadLink = (link: HTMLLinkElement, baseURI: string, opts: AssetsTranspilerOpts): void => {\n const { as, href } = link;\n switch (as) {\n case 'script': {\n const { mode, result } = preTranspileScript({ src: href }, baseURI, opts);\n\n switch (mode) {\n /**\n * While the assets are transpiling in sandbox, it means they will be evaluated with manual fetching,\n * thus we need to set the attribute `as` to fetch instead of script or style to avoid preload cache missing.\n * see https://stackoverflow.com/questions/52635660/can-link-rel-preload-be-made-to-work-with-fetch/63814972#63814972\n */\n case Mode.REMOTE_ASSETS_IN_SANDBOX: {\n link.as = 'fetch';\n break;\n }\n\n case Mode.REUSED_DEP_IN_SANDBOX: {\n const { url } = result;\n link.href = createReusingObjectUrl(href, url, 'text/javascript');\n\n break;\n }\n }\n\n break;\n }\n\n case 'style': {\n const { mode, result } = preTranspileStyleSheetLink({ href, rel: 'stylesheet' }, baseURI, opts);\n\n switch (mode) {\n case Mode.REUSED_DEP_IN_SANDBOX: {\n const { url } = result;\n link.href = createReusingObjectUrl(href, url, 'text/css');\n break;\n }\n }\n\n break;\n }\n\n default:\n break;\n }\n};\n\nexport default function transpileLink(\n link: HTMLLinkElement,\n baseURI: string,\n opts: AssetsTranspilerOpts,\n): HTMLLinkElement {\n const hrefAttribute = link.getAttribute('href');\n const { mode, result } = preTranspileStyleSheetLink(\n {\n href: hrefAttribute || undefined,\n rel: link.rel,\n },\n baseURI,\n opts,\n );\n\n switch (mode) {\n case Mode.REUSED_DEP_IN_SANDBOX: {\n const { src, version, url } = result;\n link.dataset.href = src;\n link.dataset.version = version;\n link.href = createReusingObjectUrl(src, url, 'text/css');\n\n return link;\n }\n\n case Mode.NONE:\n default: {\n if (hrefAttribute) {\n link.href = getEntireUrl(hrefAttribute, baseURI);\n\n if (link.rel === 'preload') {\n postProcessPreloadLink(link, baseURI, opts);\n }\n\n return link;\n }\n\n return link;\n }\n }\n}\n"],"mappings":"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"}
|
|
@@ -6,17 +6,17 @@ import type { MatchResult } from '../module-resolver';
|
|
|
6
6
|
import type { AssetsTranspilerOpts } from './types';
|
|
7
7
|
import { Mode } from './types';
|
|
8
8
|
type PreTranspileResult = {
|
|
9
|
-
mode: Mode.
|
|
9
|
+
mode: Mode.REMOTE_ASSETS_IN_SANDBOX;
|
|
10
10
|
result: {
|
|
11
11
|
src: string;
|
|
12
12
|
};
|
|
13
13
|
} | {
|
|
14
|
-
mode: Mode.
|
|
14
|
+
mode: Mode.REUSED_DEP_IN_SANDBOX;
|
|
15
15
|
result: {
|
|
16
16
|
src: string;
|
|
17
17
|
} & MatchResult;
|
|
18
18
|
} | {
|
|
19
|
-
mode: Mode.
|
|
19
|
+
mode: Mode.INLINE_CODE_IN_SANDBOX;
|
|
20
20
|
result: {
|
|
21
21
|
code: string;
|
|
22
22
|
};
|
|
@@ -6,6 +6,7 @@ import _objectSpread from "@babel/runtime/helpers/esm/objectSpread2";
|
|
|
6
6
|
|
|
7
7
|
import { getEntireUrl } from "../utils";
|
|
8
8
|
import { Mode } from "./types";
|
|
9
|
+
import { createReusingObjectUrl } from "./utils";
|
|
9
10
|
var isValidJavaScriptType = function isValidJavaScriptType(type) {
|
|
10
11
|
var handleTypes = ['text/javascript', 'module', 'application/javascript', 'text/ecmascript', 'application/ecmascript'];
|
|
11
12
|
return !type || handleTypes.indexOf(type) !== -1;
|
|
@@ -31,14 +32,14 @@ export var preTranspile = function preTranspile(script, baseURI, opts) {
|
|
|
31
32
|
var matchedScript = moduleResolver === null || moduleResolver === void 0 ? void 0 : moduleResolver(entireUrl);
|
|
32
33
|
if (matchedScript) {
|
|
33
34
|
return {
|
|
34
|
-
mode: Mode.
|
|
35
|
+
mode: Mode.REUSED_DEP_IN_SANDBOX,
|
|
35
36
|
result: _objectSpread({
|
|
36
37
|
src: entireUrl
|
|
37
38
|
}, matchedScript)
|
|
38
39
|
};
|
|
39
40
|
}
|
|
40
41
|
return {
|
|
41
|
-
mode: Mode.
|
|
42
|
+
mode: Mode.REMOTE_ASSETS_IN_SANDBOX,
|
|
42
43
|
result: {
|
|
43
44
|
src: entireUrl
|
|
44
45
|
}
|
|
@@ -50,7 +51,7 @@ export var preTranspile = function preTranspile(script, baseURI, opts) {
|
|
|
50
51
|
var code = scriptNode.textContent;
|
|
51
52
|
if (code) {
|
|
52
53
|
return {
|
|
53
|
-
mode: Mode.
|
|
54
|
+
mode: Mode.INLINE_CODE_IN_SANDBOX,
|
|
54
55
|
result: {
|
|
55
56
|
code: code
|
|
56
57
|
}
|
|
@@ -76,7 +77,7 @@ export default function transpileScript(script, baseURI, opts) {
|
|
|
76
77
|
mode = _preTranspile.mode,
|
|
77
78
|
result = _preTranspile.result;
|
|
78
79
|
switch (mode) {
|
|
79
|
-
case Mode.
|
|
80
|
+
case Mode.REMOTE_ASSETS_IN_SANDBOX:
|
|
80
81
|
{
|
|
81
82
|
var src = result.src;
|
|
82
83
|
|
|
@@ -104,7 +105,7 @@ export default function transpileScript(script, baseURI, opts) {
|
|
|
104
105
|
});
|
|
105
106
|
return script;
|
|
106
107
|
}
|
|
107
|
-
case Mode.
|
|
108
|
+
case Mode.INLINE_CODE_IN_SANDBOX:
|
|
108
109
|
{
|
|
109
110
|
var rawNode = opts.rawNode;
|
|
110
111
|
var scriptNode = script.textContent ? script : rawNode.childNodes[0];
|
|
@@ -114,7 +115,7 @@ export default function transpileScript(script, baseURI, opts) {
|
|
|
114
115
|
script.dataset.consumed = 'true';
|
|
115
116
|
return script;
|
|
116
117
|
}
|
|
117
|
-
case Mode.
|
|
118
|
+
case Mode.REUSED_DEP_IN_SANDBOX:
|
|
118
119
|
{
|
|
119
120
|
var url = result.url,
|
|
120
121
|
version = result.version,
|
|
@@ -128,9 +129,7 @@ export default function transpileScript(script, baseURI, opts) {
|
|
|
128
129
|
}
|
|
129
130
|
|
|
130
131
|
// When the script hits the dependency reuse logic, the current script is not executed, and an empty script is returned directly
|
|
131
|
-
script.src =
|
|
132
|
-
type: 'text/javascript'
|
|
133
|
-
}));
|
|
132
|
+
script.src = createReusingObjectUrl(_src, url, 'text/javascript');
|
|
134
133
|
return script;
|
|
135
134
|
}
|
|
136
135
|
case Mode.NONE:
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"names":["getEntireUrl","Mode","isValidJavaScriptType","type","handleTypes","indexOf","getCredentials","crossOrigin","undefined","preTranspile","script","baseURI","opts","sandbox","moduleResolver","src","entireUrl","matchedScript","mode","
|
|
1
|
+
{"version":3,"names":["getEntireUrl","Mode","createReusingObjectUrl","isValidJavaScriptType","type","handleTypes","indexOf","getCredentials","crossOrigin","undefined","preTranspile","script","baseURI","opts","sandbox","moduleResolver","src","entireUrl","matchedScript","mode","REUSED_DEP_IN_SANDBOX","result","_objectSpread","REMOTE_ASSETS_IN_SANDBOX","rawNode","scriptNode","textContent","childNodes","code","INLINE_CODE_IN_SANDBOX","NONE","transpileScript","srcAttribute","getAttribute","fetch","_preTranspile","removeAttribute","dataset","syncMode","hasAttribute","priority","credentials","then","res","text","codeFactory","makeEvaluateFactory","fetchPriority","URL","createObjectURL","Blob","consumed","url","version"],"sources":["../../../src/assets-transpilers/script.ts"],"sourcesContent":["/**\n * @author Kuitos\n * @since 2023-03-16\n */\n\nimport type { MatchResult } from '../module-resolver';\nimport { getEntireUrl } from '../utils';\nimport type { AssetsTranspilerOpts } from './types';\nimport { Mode } from './types';\nimport { createReusingObjectUrl } from './utils';\n\nconst isValidJavaScriptType = (type?: string): boolean => {\n const handleTypes = [\n 'text/javascript',\n 'module',\n 'application/javascript',\n 'text/ecmascript',\n 'application/ecmascript',\n ];\n return !type || handleTypes.indexOf(type) !== -1;\n};\n\nconst getCredentials = (crossOrigin: string | null): RequestInit['credentials'] | undefined => {\n switch (crossOrigin) {\n case 'anonymous':\n return 'same-origin';\n case 'use-credentials':\n return 'include';\n default:\n return undefined;\n }\n};\n\ntype PreTranspileResult =\n | { mode: Mode.REMOTE_ASSETS_IN_SANDBOX; result: { src: string } }\n | { mode: Mode.REUSED_DEP_IN_SANDBOX; result: { src: string } & MatchResult }\n | { mode: Mode.INLINE_CODE_IN_SANDBOX; result: { code: string } }\n | { mode: Mode.NONE; result?: never };\n\nexport const preTranspile = (\n script: Partial<Pick<HTMLScriptElement, 'src' | 'type' | 'textContent'>>,\n baseURI: string,\n opts: AssetsTranspilerOpts,\n): PreTranspileResult => {\n const { sandbox, moduleResolver } = opts;\n\n const { src, type } = script;\n\n if (sandbox) {\n if (src) {\n const entireUrl = getEntireUrl(src, baseURI);\n const matchedScript = moduleResolver?.(entireUrl);\n if (matchedScript) {\n return {\n mode: Mode.REUSED_DEP_IN_SANDBOX,\n result: { src: entireUrl, ...matchedScript },\n };\n }\n\n return {\n mode: Mode.REMOTE_ASSETS_IN_SANDBOX,\n result: { src: entireUrl },\n };\n }\n\n if (isValidJavaScriptType(type)) {\n const rawNode = opts.rawNode as HTMLScriptElement;\n const scriptNode = script.textContent ? script : rawNode.childNodes[0];\n\n const code = scriptNode.textContent;\n if (code) {\n return {\n mode: Mode.INLINE_CODE_IN_SANDBOX,\n result: {\n code,\n },\n };\n }\n }\n }\n\n return { mode: Mode.NONE };\n};\n\nexport default function transpileScript(\n script: HTMLScriptElement,\n baseURI: string,\n opts: AssetsTranspilerOpts,\n): HTMLScriptElement {\n // Can't use script.src directly, because it will be resolved to absolute path by browser with Node.baseURI\n // Such as <script src=\"./foo.js\"></script> will be resolved to http://localhost:8000/foo.js while read script.src\n const srcAttribute = script.getAttribute('src');\n const { sandbox, fetch } = opts;\n\n const { mode, result } = preTranspile(\n {\n src: srcAttribute || undefined,\n type: script.type,\n textContent: script.textContent,\n },\n baseURI,\n opts,\n );\n\n switch (mode) {\n case Mode.REMOTE_ASSETS_IN_SANDBOX: {\n const { src } = result;\n\n // We must remove script src to avoid self execution as we need to fetch the script content and transpile it\n script.removeAttribute('src');\n script.dataset.src = src;\n\n const syncMode = !script.hasAttribute('async');\n const priority: Priority = syncMode ? 'high' : 'low';\n const credentials = getCredentials(script.crossOrigin);\n\n void fetch(src, { credentials, priority })\n .then((res) => res.text())\n .then((code) => {\n const codeFactory = sandbox!.makeEvaluateFactory(code, src);\n\n // HTMLScriptElement default fetchPriority is 'auto', we should set it to 'high' to make it execute earlier while it's not async script\n if (syncMode) {\n script.fetchPriority = 'high';\n }\n\n script.src = URL.createObjectURL(new Blob([codeFactory], { type: 'text/javascript' }));\n });\n\n return script;\n }\n\n case Mode.INLINE_CODE_IN_SANDBOX: {\n const rawNode = opts.rawNode as HTMLScriptElement;\n const scriptNode = script.textContent ? script : rawNode.childNodes[0];\n const { code } = result;\n\n scriptNode.textContent = sandbox!.makeEvaluateFactory(code, baseURI);\n // mark the script have consumed\n script.dataset.consumed = 'true';\n\n return script;\n }\n\n case Mode.REUSED_DEP_IN_SANDBOX: {\n const { url, version, src } = result;\n\n script.dataset.src = src;\n script.dataset.version = version;\n\n const syncMode = !script.getAttribute('async');\n // HTMLScriptElement default fetchPriority is 'auto', we should set it to 'high' to make it execute earlier while it's not async script\n if (syncMode) {\n script.fetchPriority = 'high';\n }\n\n // When the script hits the dependency reuse logic, the current script is not executed, and an empty script is returned directly\n script.src = createReusingObjectUrl(src, url, 'text/javascript');\n\n return script;\n }\n\n case Mode.NONE:\n default: {\n if (srcAttribute) {\n script.src = getEntireUrl(srcAttribute, baseURI);\n return script;\n }\n\n return script;\n }\n }\n\n // TODO find entry exports\n}\n"],"mappings":"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"}
|
|
@@ -13,8 +13,8 @@ export type AssetsTranspilerOpts = BaseTranspilerOpts & {
|
|
|
13
13
|
rawNode: Node;
|
|
14
14
|
};
|
|
15
15
|
export declare enum Mode {
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
16
|
+
REMOTE_ASSETS_IN_SANDBOX = "RAIS",
|
|
17
|
+
REUSED_DEP_IN_SANDBOX = "RDIS",
|
|
18
|
+
INLINE_CODE_IN_SANDBOX = "ICIS",
|
|
19
19
|
NONE = "NONE"
|
|
20
20
|
}
|
|
@@ -4,9 +4,9 @@
|
|
|
4
4
|
*/
|
|
5
5
|
|
|
6
6
|
export var Mode = /*#__PURE__*/function (Mode) {
|
|
7
|
-
Mode["
|
|
8
|
-
Mode["
|
|
9
|
-
Mode["
|
|
7
|
+
Mode["REMOTE_ASSETS_IN_SANDBOX"] = "RAIS";
|
|
8
|
+
Mode["REUSED_DEP_IN_SANDBOX"] = "RDIS";
|
|
9
|
+
Mode["INLINE_CODE_IN_SANDBOX"] = "ICIS";
|
|
10
10
|
Mode["NONE"] = "NONE";
|
|
11
11
|
return Mode;
|
|
12
12
|
}({});
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"names":["Mode"],"sources":["../../../src/assets-transpilers/types.ts"],"sourcesContent":["/**\n * @author Kuitos\n * @since 2023-08-26\n */\nimport type { Sandbox } from '@qiankunjs/sandbox';\nimport type { BaseLoaderOpts } from '../common';\n\nimport type { MatchResult } from '../module-resolver';\n\nexport type BaseTranspilerOpts = BaseLoaderOpts & {\n moduleResolver?: (url: string) => MatchResult | undefined;\n sandbox?: Sandbox;\n};\n\nexport type AssetsTranspilerOpts = BaseTranspilerOpts & { rawNode: Node };\n\nexport enum Mode {\n
|
|
1
|
+
{"version":3,"names":["Mode"],"sources":["../../../src/assets-transpilers/types.ts"],"sourcesContent":["/**\n * @author Kuitos\n * @since 2023-08-26\n */\nimport type { Sandbox } from '@qiankunjs/sandbox';\nimport type { BaseLoaderOpts } from '../common';\n\nimport type { MatchResult } from '../module-resolver';\n\nexport type BaseTranspilerOpts = BaseLoaderOpts & {\n moduleResolver?: (url: string) => MatchResult | undefined;\n sandbox?: Sandbox;\n};\n\nexport type AssetsTranspilerOpts = BaseTranspilerOpts & { rawNode: Node };\n\nexport enum Mode {\n REMOTE_ASSETS_IN_SANDBOX = 'RAIS',\n REUSED_DEP_IN_SANDBOX = 'RDIS',\n INLINE_CODE_IN_SANDBOX = 'ICIS',\n NONE = 'NONE',\n}\n"],"mappings":"AAAA;AACA;AACA;AACA;;AAaA,WAAYA,IAAI,0BAAJA,IAAI;EAAJA,IAAI;EAAJA,IAAI;EAAJA,IAAI;EAAJA,IAAI;EAAA,OAAJA,IAAI;AAAA"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export declare const createReusingObjectUrl: ((src: string, url: string, type: 'text/javascript' | 'text/css') => string) & import("lodash").MemoizedFunction;
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
import _memoize from "lodash/memoize";
|
|
2
|
+
/**
|
|
3
|
+
* @author Kuitos
|
|
4
|
+
* @since 2023-10-09
|
|
5
|
+
*/
|
|
6
|
+
export var createReusingObjectUrl = _memoize(function (src, url, type) {
|
|
7
|
+
return URL.createObjectURL(new Blob(["/* ".concat(src, " is reusing the execution result of ").concat(url, " */")], {
|
|
8
|
+
type: type
|
|
9
|
+
}));
|
|
10
|
+
}, function (src, url, type) {
|
|
11
|
+
return "".concat(src, "#").concat(url, "#").concat(type);
|
|
12
|
+
});
|
|
13
|
+
//# sourceMappingURL=utils.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"names":["createReusingObjectUrl","_memoize","src","url","type","URL","createObjectURL","Blob","concat"],"sources":["../../../src/assets-transpilers/utils.ts"],"sourcesContent":["/**\n * @author Kuitos\n * @since 2023-10-09\n */\nimport { memoize } from 'lodash';\n\nexport const createReusingObjectUrl = memoize(\n (src: string, url: string, type: 'text/javascript' | 'text/css'): string => {\n return URL.createObjectURL(\n new Blob([`/* ${src} is reusing the execution result of ${url} */`], {\n type,\n }),\n );\n },\n (src, url, type) => `${src}#${url}#${type}`,\n);\n"],"mappings":";AAAA;AACA;AACA;AACA;AAGA,OAAO,IAAMA,sBAAsB,GAAGC,QAAA,CACpC,UAACC,GAAW,EAAEC,GAAW,EAAEC,IAAoC,EAAa;EAC1E,OAAOC,GAAG,CAACC,eAAe,CACxB,IAAIC,IAAI,CAAC,OAAAC,MAAA,CAAON,GAAG,0CAAAM,MAAA,CAAuCL,GAAG,SAAM,EAAE;IACnEC,IAAI,EAAJA;EACF,CAAC,CACH,CAAC;AACH,CAAC,EACD,UAACF,GAAG,EAAEC,GAAG,EAAEC,IAAI;EAAA,UAAAI,MAAA,CAAQN,GAAG,OAAAM,MAAA,CAAIL,GAAG,OAAAK,MAAA,CAAIJ,IAAI;AAAA,CAC3C,CAAC"}
|
|
@@ -17,10 +17,10 @@ export function moduleResolver(url, microAppContainer, mainAppContainer) {
|
|
|
17
17
|
if (mainAppDependencyMapString) {
|
|
18
18
|
var _microAppContainer$__;
|
|
19
19
|
var mainAppDependencyMap = JSON.parse(mainAppDependencyMapString);
|
|
20
|
-
var
|
|
21
|
-
var matchedDep = findDependency(microAppDependency, normalizeDependencies(mainAppDependencyMap.dependencies),
|
|
20
|
+
var matchedDeps = (_microAppContainer$__ = microAppContainer.__matched_deps__) !== null && _microAppContainer$__ !== void 0 ? _microAppContainer$__ : microAppContainer.__matched_deps__ = [];
|
|
21
|
+
var matchedDep = findDependency(microAppDependency, normalizeDependencies(mainAppDependencyMap.dependencies), matchedDeps);
|
|
22
22
|
if (matchedDep) {
|
|
23
|
-
|
|
23
|
+
matchedDeps.push(matchedDep.name);
|
|
24
24
|
return matchedDep;
|
|
25
25
|
}
|
|
26
26
|
}
|
|
@@ -28,13 +28,13 @@ export function moduleResolver(url, microAppContainer, mainAppContainer) {
|
|
|
28
28
|
}
|
|
29
29
|
return undefined;
|
|
30
30
|
}
|
|
31
|
-
function findDependency(dependency, mainAppDependencies,
|
|
32
|
-
var matched = mainAppDependencies.find(function (
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
(
|
|
36
|
-
return
|
|
37
|
-
})
|
|
31
|
+
function findDependency(dependency, mainAppDependencies, matchedDependencies) {
|
|
32
|
+
var matched = mainAppDependencies.find(function (mainAppDependency) {
|
|
33
|
+
return mainAppDependency.name === dependency.name && satisfies(mainAppDependency.version, dependency.range) &&
|
|
34
|
+
// peer dependencies must be cached before
|
|
35
|
+
(dependency.peerDeps || []).every(function (peerDep) {
|
|
36
|
+
return matchedDependencies.indexOf(peerDep) !== -1;
|
|
37
|
+
});
|
|
38
38
|
});
|
|
39
39
|
if (matched) {
|
|
40
40
|
return {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"names":["satisfies","moduleResolver","url","microAppContainer","mainAppContainer","_microAppContainer$qu","dependencyMapSelector","microAppDependenciesString","querySelector","innerHTML","_ref","JSON","parse","dependencies","normalizedDependencies","normalizeDependencies","microAppDependency","find","v","_mainAppContainer$que","mainAppDependencyMapString","_microAppContainer$__","mainAppDependencyMap","
|
|
1
|
+
{"version":3,"names":["satisfies","moduleResolver","url","microAppContainer","mainAppContainer","_microAppContainer$qu","dependencyMapSelector","microAppDependenciesString","querySelector","innerHTML","_ref","JSON","parse","dependencies","normalizedDependencies","normalizeDependencies","microAppDependency","find","v","_mainAppContainer$que","mainAppDependencyMapString","_microAppContainer$__","mainAppDependencyMap","matchedDeps","__matched_deps__","matchedDep","findDependency","push","name","undefined","dependency","mainAppDependencies","matchedDependencies","matched","mainAppDependency","version","range","peerDeps","every","peerDep","indexOf","Object","keys","map","_objectSpread"],"sources":["../../../src/module-resolver/index.ts"],"sourcesContent":["import satisfies from 'semver/functions/satisfies';\nimport type { MatchResult } from './types';\n\ndeclare global {\n interface HTMLElement {\n __matched_deps__?: string[];\n }\n}\n\ntype Dependency = {\n url: string;\n version: string;\n range: string;\n peerDeps?: string[];\n};\n\ntype NormalizedDependency = {\n name: string;\n} & Dependency;\n\ntype DependencyMap = {\n dependencies: Record<string, Dependency>;\n};\n\nexport type { MatchResult } from './types';\n\nexport function moduleResolver(\n url: string,\n microAppContainer: HTMLElement,\n mainAppContainer: HTMLElement,\n): MatchResult | undefined {\n const dependencyMapSelector = 'script[type=dependencymap]';\n\n const microAppDependenciesString = microAppContainer.querySelector(dependencyMapSelector)?.innerHTML;\n if (microAppDependenciesString) {\n const { dependencies } = JSON.parse(microAppDependenciesString) as DependencyMap;\n const normalizedDependencies = normalizeDependencies(dependencies);\n const microAppDependency = normalizedDependencies.find((v) => v.url === url);\n\n if (microAppDependency) {\n const mainAppDependencyMapString = mainAppContainer.querySelector(dependencyMapSelector)?.innerHTML;\n\n if (mainAppDependencyMapString) {\n const mainAppDependencyMap = JSON.parse(mainAppDependencyMapString) as DependencyMap;\n const matchedDeps = (microAppContainer.__matched_deps__ ??= []);\n const matchedDep = findDependency(\n microAppDependency,\n normalizeDependencies(mainAppDependencyMap.dependencies),\n matchedDeps,\n );\n\n if (matchedDep) {\n matchedDeps.push(matchedDep.name);\n return matchedDep;\n }\n }\n }\n }\n\n return undefined;\n}\n\nfunction findDependency(\n dependency: NormalizedDependency,\n mainAppDependencies: NormalizedDependency[],\n matchedDependencies: string[],\n): MatchResult | undefined {\n const matched = mainAppDependencies.find(\n (mainAppDependency) =>\n mainAppDependency.name === dependency.name &&\n satisfies(mainAppDependency.version, dependency.range) &&\n // peer dependencies must be cached before\n (dependency.peerDeps || []).every((peerDep) => matchedDependencies.indexOf(peerDep) !== -1),\n );\n\n if (matched) {\n return {\n name: matched.name,\n version: matched.version,\n url: matched.url,\n };\n }\n\n return undefined;\n}\n\nfunction normalizeDependencies(dependencies: DependencyMap['dependencies']): NormalizedDependency[] {\n return Object.keys(dependencies).map((name) => ({\n name,\n ...dependencies[name],\n }));\n}\n"],"mappings":";AAAA,OAAOA,SAAS,MAAM,4BAA4B;AA0BlD,OAAO,SAASC,cAAcA,CAC5BC,GAAW,EACXC,iBAA8B,EAC9BC,gBAA6B,EACJ;EAAA,IAAAC,qBAAA;EACzB,IAAMC,qBAAqB,GAAG,4BAA4B;EAE1D,IAAMC,0BAA0B,IAAAF,qBAAA,GAAGF,iBAAiB,CAACK,aAAa,CAACF,qBAAqB,CAAC,cAAAD,qBAAA,uBAAtDA,qBAAA,CAAwDI,SAAS;EACpG,IAAIF,0BAA0B,EAAE;IAC9B,IAAAG,IAAA,GAAyBC,IAAI,CAACC,KAAK,CAACL,0BAA0B,CAAC;MAAvDM,YAAY,GAAAH,IAAA,CAAZG,YAAY;IACpB,IAAMC,sBAAsB,GAAGC,qBAAqB,CAACF,YAAY,CAAC;IAClE,IAAMG,kBAAkB,GAAGF,sBAAsB,CAACG,IAAI,CAAC,UAACC,CAAC;MAAA,OAAKA,CAAC,CAAChB,GAAG,KAAKA,GAAG;IAAA,EAAC;IAE5E,IAAIc,kBAAkB,EAAE;MAAA,IAAAG,qBAAA;MACtB,IAAMC,0BAA0B,IAAAD,qBAAA,GAAGf,gBAAgB,CAACI,aAAa,CAACF,qBAAqB,CAAC,cAAAa,qBAAA,uBAArDA,qBAAA,CAAuDV,SAAS;MAEnG,IAAIW,0BAA0B,EAAE;QAAA,IAAAC,qBAAA;QAC9B,IAAMC,oBAAoB,GAAGX,IAAI,CAACC,KAAK,CAACQ,0BAA0B,CAAkB;QACpF,IAAMG,WAAW,IAAAF,qBAAA,GAAIlB,iBAAiB,CAACqB,gBAAgB,cAAAH,qBAAA,cAAAA,qBAAA,GAAlClB,iBAAiB,CAACqB,gBAAgB,GAAK,EAAG;QAC/D,IAAMC,UAAU,GAAGC,cAAc,CAC/BV,kBAAkB,EAClBD,qBAAqB,CAACO,oBAAoB,CAACT,YAAY,CAAC,EACxDU,WACF,CAAC;QAED,IAAIE,UAAU,EAAE;UACdF,WAAW,CAACI,IAAI,CAACF,UAAU,CAACG,IAAI,CAAC;UACjC,OAAOH,UAAU;QACnB;MACF;IACF;EACF;EAEA,OAAOI,SAAS;AAClB;AAEA,SAASH,cAAcA,CACrBI,UAAgC,EAChCC,mBAA2C,EAC3CC,mBAA6B,EACJ;EACzB,IAAMC,OAAO,GAAGF,mBAAmB,CAACd,IAAI,CACtC,UAACiB,iBAAiB;IAAA,OAChBA,iBAAiB,CAACN,IAAI,KAAKE,UAAU,CAACF,IAAI,IAC1C5B,SAAS,CAACkC,iBAAiB,CAACC,OAAO,EAAEL,UAAU,CAACM,KAAK,CAAC;IACtD;IACA,CAACN,UAAU,CAACO,QAAQ,IAAI,EAAE,EAAEC,KAAK,CAAC,UAACC,OAAO;MAAA,OAAKP,mBAAmB,CAACQ,OAAO,CAACD,OAAO,CAAC,KAAK,CAAC,CAAC;IAAA,EAAC;EAAA,CAC/F,CAAC;EAED,IAAIN,OAAO,EAAE;IACX,OAAO;MACLL,IAAI,EAAEK,OAAO,CAACL,IAAI;MAClBO,OAAO,EAAEF,OAAO,CAACE,OAAO;MACxBjC,GAAG,EAAE+B,OAAO,CAAC/B;IACf,CAAC;EACH;EAEA,OAAO2B,SAAS;AAClB;AAEA,SAASd,qBAAqBA,CAACF,YAA2C,EAA0B;EAClG,OAAO4B,MAAM,CAACC,IAAI,CAAC7B,YAAY,CAAC,CAAC8B,GAAG,CAAC,UAACf,IAAI;IAAA,OAAAgB,aAAA;MACxChB,IAAI,EAAJA;IAAI,GACDf,YAAY,CAACe,IAAI,CAAC;EAAA,CACrB,CAAC;AACL"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@qiankunjs/shared",
|
|
3
|
-
"version": "0.0.1-rc.
|
|
3
|
+
"version": "0.0.1-rc.2",
|
|
4
4
|
"description": "",
|
|
5
5
|
"main": "./dist/cjs/index.js",
|
|
6
6
|
"module": "./dist/esm/index.js",
|
|
@@ -12,7 +12,7 @@
|
|
|
12
12
|
"@babel/runtime": "^7.10.5",
|
|
13
13
|
"lodash": "^4.17.11",
|
|
14
14
|
"semver": "^7.5.3",
|
|
15
|
-
"@qiankunjs/sandbox": "^0.0.1-rc.
|
|
15
|
+
"@qiankunjs/sandbox": "^0.0.1-rc.2"
|
|
16
16
|
},
|
|
17
17
|
"files": [
|
|
18
18
|
"dist",
|
|
@@ -7,16 +7,16 @@ import transpileScript from './script';
|
|
|
7
7
|
import type { AssetsTranspilerOpts } from './types';
|
|
8
8
|
|
|
9
9
|
export function transpileAssets<T extends Node>(node: T, baseURI: string, opts: AssetsTranspilerOpts): T {
|
|
10
|
-
const htmlElement =
|
|
10
|
+
const htmlElement = node as unknown as HTMLElement;
|
|
11
11
|
const { tagName } = htmlElement;
|
|
12
12
|
|
|
13
13
|
switch (tagName) {
|
|
14
14
|
case 'SCRIPT': {
|
|
15
|
-
return
|
|
15
|
+
return transpileScript(htmlElement as HTMLScriptElement, baseURI, opts) as unknown as T;
|
|
16
16
|
}
|
|
17
17
|
|
|
18
18
|
case 'LINK': {
|
|
19
|
-
return
|
|
19
|
+
return transpileLink(htmlElement as HTMLLinkElement, baseURI, opts) as unknown as T;
|
|
20
20
|
}
|
|
21
21
|
|
|
22
22
|
default:
|