@modern-js/plugin-polyfill 2.0.0-beta.2 → 2.0.0-beta.4
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/CHANGELOG.md +66 -0
- package/dist/js/modern/cli.js +13 -14
- package/dist/js/modern/const.js +8 -6
- package/dist/js/modern/global.d.js +0 -0
- package/dist/js/modern/index.js +45 -24
- package/dist/js/modern/libs/cache.js +13 -16
- package/dist/js/node/cli.js +31 -20
- package/dist/js/node/const.js +24 -11
- package/dist/js/node/global.d.js +0 -0
- package/dist/js/node/index.js +74 -38
- package/dist/js/node/libs/cache.js +36 -23
- package/dist/js/treeshaking/cli.js +22 -0
- package/dist/js/treeshaking/const.js +11 -0
- package/dist/js/treeshaking/global.d.js +1 -0
- package/dist/js/treeshaking/index.js +203 -0
- package/dist/js/treeshaking/libs/cache.js +77 -0
- package/dist/js/treeshaking/type.js +1 -0
- package/dist/types/cli.d.ts +2 -0
- package/dist/types/index.d.ts +2 -0
- package/package.json +7 -12
package/CHANGELOG.md
CHANGED
|
@@ -1,5 +1,71 @@
|
|
|
1
1
|
# @modern-js/plugin-polyfill
|
|
2
2
|
|
|
3
|
+
## 2.0.0-beta.4
|
|
4
|
+
|
|
5
|
+
### Major Changes
|
|
6
|
+
|
|
7
|
+
- dda38c9c3e: chore: v2
|
|
8
|
+
|
|
9
|
+
### Patch Changes
|
|
10
|
+
|
|
11
|
+
- ebbeed1ece: fix(plugin-polyfill): failed to join flags when restart CLI
|
|
12
|
+
|
|
13
|
+
fix(plugin-polyfill): 修复重启 CLI 时报错 join flags 失败的问题
|
|
14
|
+
|
|
15
|
+
- Updated dependencies [7879e8f]
|
|
16
|
+
- Updated dependencies [6aca875]
|
|
17
|
+
- Updated dependencies [2e6031955e]
|
|
18
|
+
- Updated dependencies [7b7d12c]
|
|
19
|
+
- Updated dependencies [92f0eade39]
|
|
20
|
+
- Updated dependencies [edd1cfb1af]
|
|
21
|
+
- Updated dependencies [cc971eabfc]
|
|
22
|
+
- Updated dependencies [5b9049f2e9]
|
|
23
|
+
- Updated dependencies [92004d1906]
|
|
24
|
+
- Updated dependencies [b8bbe036c7]
|
|
25
|
+
- Updated dependencies [d5a31df781]
|
|
26
|
+
- Updated dependencies [dda38c9c3e]
|
|
27
|
+
- Updated dependencies [3bbea92b2a]
|
|
28
|
+
- Updated dependencies [b710adb843]
|
|
29
|
+
- Updated dependencies [ea7cf06]
|
|
30
|
+
- Updated dependencies [bbe4c4a]
|
|
31
|
+
- Updated dependencies [e4558a0]
|
|
32
|
+
- Updated dependencies [abf3421a75]
|
|
33
|
+
- Updated dependencies [543be9558e]
|
|
34
|
+
- Updated dependencies [14b712da84]
|
|
35
|
+
- @modern-js/utils@2.0.0-beta.4
|
|
36
|
+
|
|
37
|
+
## 2.0.0-beta.3
|
|
38
|
+
|
|
39
|
+
### Major Changes
|
|
40
|
+
|
|
41
|
+
- dda38c9c3e: chore: v2
|
|
42
|
+
|
|
43
|
+
### Patch Changes
|
|
44
|
+
|
|
45
|
+
- ebbeed1ece: fix(plugin-polyfill): failed to join flags when restart CLI
|
|
46
|
+
|
|
47
|
+
fix(plugin-polyfill): 修复重启 CLI 时报错 join flags 失败的问题
|
|
48
|
+
|
|
49
|
+
- Updated dependencies [6aca875]
|
|
50
|
+
- Updated dependencies [2e60319]
|
|
51
|
+
- Updated dependencies [92f0eade39]
|
|
52
|
+
- Updated dependencies [edd1cfb1af]
|
|
53
|
+
- Updated dependencies [cc971eabfc]
|
|
54
|
+
- Updated dependencies [5b9049f2e9]
|
|
55
|
+
- Updated dependencies [92004d1906]
|
|
56
|
+
- Updated dependencies [b8bbe036c7]
|
|
57
|
+
- Updated dependencies [d5a31df781]
|
|
58
|
+
- Updated dependencies [dda38c9c3e]
|
|
59
|
+
- Updated dependencies [3bbea92b2a]
|
|
60
|
+
- Updated dependencies [b710adb]
|
|
61
|
+
- Updated dependencies [ea7cf06]
|
|
62
|
+
- Updated dependencies [bbe4c4a]
|
|
63
|
+
- Updated dependencies [e4558a0]
|
|
64
|
+
- Updated dependencies [abf3421a75]
|
|
65
|
+
- Updated dependencies [543be9558e]
|
|
66
|
+
- Updated dependencies [14b712da84]
|
|
67
|
+
- @modern-js/utils@2.0.0-beta.3
|
|
68
|
+
|
|
3
69
|
## 2.0.0-beta.2
|
|
4
70
|
|
|
5
71
|
### Major Changes
|
package/dist/js/modern/cli.js
CHANGED
|
@@ -1,19 +1,18 @@
|
|
|
1
1
|
import { defaultPolyfill } from "./const";
|
|
2
|
-
|
|
3
|
-
name:
|
|
4
|
-
setup: api => ({
|
|
5
|
-
htmlPartials({
|
|
6
|
-
entrypoint,
|
|
7
|
-
partials
|
|
8
|
-
}) {
|
|
2
|
+
var cli_default = () => ({
|
|
3
|
+
name: "@modern-js/plugin-polyfill",
|
|
4
|
+
setup: (api) => ({
|
|
5
|
+
htmlPartials({ entrypoint, partials }) {
|
|
9
6
|
const resolvedConfig = api.useResolvedConfigContext();
|
|
10
|
-
if (resolvedConfig.output.polyfill ===
|
|
11
|
-
partials.top.push(
|
|
7
|
+
if (resolvedConfig.output.polyfill === "ua") {
|
|
8
|
+
partials.top.push(
|
|
9
|
+
`<script src="${defaultPolyfill}" crossorigin><\/script>`
|
|
10
|
+
);
|
|
12
11
|
}
|
|
13
|
-
return {
|
|
14
|
-
partials,
|
|
15
|
-
entrypoint
|
|
16
|
-
};
|
|
12
|
+
return { partials, entrypoint };
|
|
17
13
|
}
|
|
18
14
|
})
|
|
19
|
-
})
|
|
15
|
+
});
|
|
16
|
+
export {
|
|
17
|
+
cli_default as default
|
|
18
|
+
};
|
package/dist/js/modern/const.js
CHANGED
|
@@ -1,6 +1,8 @@
|
|
|
1
|
-
|
|
2
|
-
|
|
3
|
-
es6: {
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
1
|
+
const defaultPolyfill = "/__polyfill__";
|
|
2
|
+
const getDefaultFeatures = () => ({
|
|
3
|
+
es6: { flags: ["gated"] }
|
|
4
|
+
});
|
|
5
|
+
export {
|
|
6
|
+
defaultPolyfill,
|
|
7
|
+
getDefaultFeatures
|
|
8
|
+
};
|
|
File without changes
|
package/dist/js/modern/index.js
CHANGED
|
@@ -1,32 +1,47 @@
|
|
|
1
|
-
|
|
2
|
-
|
|
3
|
-
|
|
1
|
+
var __async = (__this, __arguments, generator) => {
|
|
2
|
+
return new Promise((resolve, reject) => {
|
|
3
|
+
var fulfilled = (value) => {
|
|
4
|
+
try {
|
|
5
|
+
step(generator.next(value));
|
|
6
|
+
} catch (e) {
|
|
7
|
+
reject(e);
|
|
8
|
+
}
|
|
9
|
+
};
|
|
10
|
+
var rejected = (value) => {
|
|
11
|
+
try {
|
|
12
|
+
step(generator.throw(value));
|
|
13
|
+
} catch (e) {
|
|
14
|
+
reject(e);
|
|
15
|
+
}
|
|
16
|
+
};
|
|
17
|
+
var step = (x) => x.done ? resolve(x.value) : Promise.resolve(x.value).then(fulfilled, rejected);
|
|
18
|
+
step((generator = generator.apply(__this, __arguments)).next());
|
|
19
|
+
});
|
|
20
|
+
};
|
|
21
|
+
import { getPolyfillString } from "@modern-js/polyfill-lib";
|
|
22
|
+
import { mime } from "@modern-js/utils";
|
|
23
|
+
import Parser from "ua-parser-js";
|
|
4
24
|
import { getDefaultFeatures, defaultPolyfill } from "./const";
|
|
5
25
|
import PolyfillCache, { generateCacheKey } from "./libs/cache";
|
|
6
|
-
|
|
7
|
-
name:
|
|
26
|
+
var src_default = () => ({
|
|
27
|
+
name: "@modern-js/plugin-polyfill",
|
|
8
28
|
setup: () => ({
|
|
9
29
|
beforeProdServer() {
|
|
10
30
|
const cache = new PolyfillCache();
|
|
11
31
|
const route = defaultPolyfill;
|
|
12
32
|
const features = getDefaultFeatures();
|
|
13
|
-
const minify = process.env.NODE_ENV ===
|
|
14
|
-
const featureDig = Object.keys(features).map(name => {
|
|
15
|
-
const {
|
|
16
|
-
|
|
17
|
-
} = features[name];
|
|
18
|
-
const flagStr = flags.join(',');
|
|
33
|
+
const minify = process.env.NODE_ENV === "production";
|
|
34
|
+
const featureDig = Object.keys(features).map((name) => {
|
|
35
|
+
const { flags = ["gated"] } = features[name];
|
|
36
|
+
const flagStr = flags.join(",");
|
|
19
37
|
return `${name}-${flagStr}`;
|
|
20
|
-
}).join(
|
|
21
|
-
return
|
|
38
|
+
}).join(",");
|
|
39
|
+
return (context, next) => __async(this, null, function* () {
|
|
22
40
|
if (context.url !== route) {
|
|
23
41
|
return next();
|
|
24
42
|
}
|
|
25
|
-
const parsedUA = Parser(context.headers[
|
|
26
|
-
const {
|
|
27
|
-
name = '',
|
|
28
|
-
version = ''
|
|
29
|
-
} = parsedUA.browser;
|
|
43
|
+
const parsedUA = Parser(context.headers["user-agent"]);
|
|
44
|
+
const { name = "", version = "" } = parsedUA.browser;
|
|
30
45
|
const cacheKey = generateCacheKey({
|
|
31
46
|
name,
|
|
32
47
|
version,
|
|
@@ -35,18 +50,24 @@ export default (() => ({
|
|
|
35
50
|
});
|
|
36
51
|
const matched = cache.get(cacheKey);
|
|
37
52
|
if (matched) {
|
|
38
|
-
context.res.setHeader(
|
|
53
|
+
context.res.setHeader(
|
|
54
|
+
"content-type",
|
|
55
|
+
mime.contentType("js")
|
|
56
|
+
);
|
|
39
57
|
return context.res.end(matched);
|
|
40
58
|
}
|
|
41
|
-
const polyfill =
|
|
42
|
-
uaString: context.headers[
|
|
59
|
+
const polyfill = yield getPolyfillString({
|
|
60
|
+
uaString: context.headers["user-agent"],
|
|
43
61
|
minify,
|
|
44
62
|
features
|
|
45
63
|
});
|
|
46
64
|
cache.set(cacheKey, polyfill);
|
|
47
|
-
context.res.setHeader(
|
|
65
|
+
context.res.setHeader("content-type", mime.contentType("js"));
|
|
48
66
|
return context.res.end(polyfill);
|
|
49
|
-
};
|
|
67
|
+
});
|
|
50
68
|
}
|
|
51
69
|
})
|
|
52
|
-
})
|
|
70
|
+
});
|
|
71
|
+
export {
|
|
72
|
+
src_default as default
|
|
73
|
+
};
|
|
@@ -1,31 +1,24 @@
|
|
|
1
|
-
|
|
2
|
-
import
|
|
3
|
-
import LRUCache from 'lru-cache';
|
|
1
|
+
import crypto from "crypto";
|
|
2
|
+
import LRUCache from "lru-cache";
|
|
4
3
|
const KB = 1024;
|
|
5
4
|
const MB = 1024 * KB;
|
|
6
|
-
const keyCache = new LRUCache(
|
|
7
|
-
|
|
8
|
-
const {
|
|
9
|
-
name,
|
|
10
|
-
version,
|
|
11
|
-
features,
|
|
12
|
-
minify
|
|
13
|
-
} = options;
|
|
5
|
+
const keyCache = new LRUCache(1e4);
|
|
6
|
+
const generateCacheKey = (options) => {
|
|
7
|
+
const { name, version, features, minify } = options;
|
|
14
8
|
const str = `${name}-${version}-${Number(minify)}-${features}`;
|
|
15
9
|
const matched = keyCache.get(str);
|
|
16
10
|
if (matched) {
|
|
17
11
|
return matched;
|
|
18
12
|
}
|
|
19
|
-
const hash = crypto.createHmac(
|
|
13
|
+
const hash = crypto.createHmac("sha256", "^polyfill$").update(str).digest("hex");
|
|
20
14
|
keyCache.set(str, hash);
|
|
21
15
|
return hash;
|
|
22
16
|
};
|
|
23
|
-
|
|
17
|
+
class Cache {
|
|
24
18
|
constructor() {
|
|
25
|
-
_defineProperty(this, "caches", void 0);
|
|
26
19
|
this.caches = new LRUCache({
|
|
27
20
|
max: 200 * MB,
|
|
28
|
-
length: v => v.length
|
|
21
|
+
length: (v) => v.length
|
|
29
22
|
});
|
|
30
23
|
}
|
|
31
24
|
get(hash) {
|
|
@@ -34,4 +27,8 @@ export default class Cache {
|
|
|
34
27
|
set(hash, content) {
|
|
35
28
|
this.caches.set(hash, content);
|
|
36
29
|
}
|
|
37
|
-
}
|
|
30
|
+
}
|
|
31
|
+
export {
|
|
32
|
+
Cache as default,
|
|
33
|
+
generateCacheKey
|
|
34
|
+
};
|
package/dist/js/node/cli.js
CHANGED
|
@@ -1,26 +1,37 @@
|
|
|
1
|
-
|
|
2
|
-
|
|
3
|
-
Object.
|
|
4
|
-
|
|
1
|
+
var __defProp = Object.defineProperty;
|
|
2
|
+
var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
|
|
3
|
+
var __getOwnPropNames = Object.getOwnPropertyNames;
|
|
4
|
+
var __hasOwnProp = Object.prototype.hasOwnProperty;
|
|
5
|
+
var __export = (target, all) => {
|
|
6
|
+
for (var name in all)
|
|
7
|
+
__defProp(target, name, { get: all[name], enumerable: true });
|
|
8
|
+
};
|
|
9
|
+
var __copyProps = (to, from, except, desc) => {
|
|
10
|
+
if (from && typeof from === "object" || typeof from === "function") {
|
|
11
|
+
for (let key of __getOwnPropNames(from))
|
|
12
|
+
if (!__hasOwnProp.call(to, key) && key !== except)
|
|
13
|
+
__defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable });
|
|
14
|
+
}
|
|
15
|
+
return to;
|
|
16
|
+
};
|
|
17
|
+
var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod);
|
|
18
|
+
var stdin_exports = {};
|
|
19
|
+
__export(stdin_exports, {
|
|
20
|
+
default: () => cli_default
|
|
5
21
|
});
|
|
6
|
-
exports
|
|
7
|
-
var
|
|
8
|
-
var
|
|
9
|
-
name:
|
|
10
|
-
setup: api => ({
|
|
11
|
-
htmlPartials({
|
|
12
|
-
entrypoint,
|
|
13
|
-
partials
|
|
14
|
-
}) {
|
|
22
|
+
module.exports = __toCommonJS(stdin_exports);
|
|
23
|
+
var import_const = require("./const");
|
|
24
|
+
var cli_default = () => ({
|
|
25
|
+
name: "@modern-js/plugin-polyfill",
|
|
26
|
+
setup: (api) => ({
|
|
27
|
+
htmlPartials({ entrypoint, partials }) {
|
|
15
28
|
const resolvedConfig = api.useResolvedConfigContext();
|
|
16
|
-
if (resolvedConfig.output.polyfill ===
|
|
17
|
-
partials.top.push(
|
|
29
|
+
if (resolvedConfig.output.polyfill === "ua") {
|
|
30
|
+
partials.top.push(
|
|
31
|
+
`<script src="${import_const.defaultPolyfill}" crossorigin><\/script>`
|
|
32
|
+
);
|
|
18
33
|
}
|
|
19
|
-
return {
|
|
20
|
-
partials,
|
|
21
|
-
entrypoint
|
|
22
|
-
};
|
|
34
|
+
return { partials, entrypoint };
|
|
23
35
|
}
|
|
24
36
|
})
|
|
25
37
|
});
|
|
26
|
-
exports.default = _default;
|
package/dist/js/node/const.js
CHANGED
|
@@ -1,14 +1,27 @@
|
|
|
1
|
-
|
|
2
|
-
|
|
3
|
-
Object.
|
|
4
|
-
|
|
1
|
+
var __defProp = Object.defineProperty;
|
|
2
|
+
var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
|
|
3
|
+
var __getOwnPropNames = Object.getOwnPropertyNames;
|
|
4
|
+
var __hasOwnProp = Object.prototype.hasOwnProperty;
|
|
5
|
+
var __export = (target, all) => {
|
|
6
|
+
for (var name in all)
|
|
7
|
+
__defProp(target, name, { get: all[name], enumerable: true });
|
|
8
|
+
};
|
|
9
|
+
var __copyProps = (to, from, except, desc) => {
|
|
10
|
+
if (from && typeof from === "object" || typeof from === "function") {
|
|
11
|
+
for (let key of __getOwnPropNames(from))
|
|
12
|
+
if (!__hasOwnProp.call(to, key) && key !== except)
|
|
13
|
+
__defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable });
|
|
14
|
+
}
|
|
15
|
+
return to;
|
|
16
|
+
};
|
|
17
|
+
var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod);
|
|
18
|
+
var stdin_exports = {};
|
|
19
|
+
__export(stdin_exports, {
|
|
20
|
+
defaultPolyfill: () => defaultPolyfill,
|
|
21
|
+
getDefaultFeatures: () => getDefaultFeatures
|
|
5
22
|
});
|
|
6
|
-
|
|
7
|
-
const defaultPolyfill =
|
|
8
|
-
exports.defaultPolyfill = defaultPolyfill;
|
|
23
|
+
module.exports = __toCommonJS(stdin_exports);
|
|
24
|
+
const defaultPolyfill = "/__polyfill__";
|
|
9
25
|
const getDefaultFeatures = () => ({
|
|
10
|
-
es6: {
|
|
11
|
-
flags: ['gated']
|
|
12
|
-
}
|
|
26
|
+
es6: { flags: ["gated"] }
|
|
13
27
|
});
|
|
14
|
-
exports.getDefaultFeatures = getDefaultFeatures;
|
|
File without changes
|
package/dist/js/node/index.js
CHANGED
|
@@ -1,42 +1,76 @@
|
|
|
1
|
-
|
|
2
|
-
|
|
3
|
-
Object.
|
|
4
|
-
|
|
1
|
+
var __create = Object.create;
|
|
2
|
+
var __defProp = Object.defineProperty;
|
|
3
|
+
var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
|
|
4
|
+
var __getOwnPropNames = Object.getOwnPropertyNames;
|
|
5
|
+
var __getProtoOf = Object.getPrototypeOf;
|
|
6
|
+
var __hasOwnProp = Object.prototype.hasOwnProperty;
|
|
7
|
+
var __export = (target, all) => {
|
|
8
|
+
for (var name in all)
|
|
9
|
+
__defProp(target, name, { get: all[name], enumerable: true });
|
|
10
|
+
};
|
|
11
|
+
var __copyProps = (to, from, except, desc) => {
|
|
12
|
+
if (from && typeof from === "object" || typeof from === "function") {
|
|
13
|
+
for (let key of __getOwnPropNames(from))
|
|
14
|
+
if (!__hasOwnProp.call(to, key) && key !== except)
|
|
15
|
+
__defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable });
|
|
16
|
+
}
|
|
17
|
+
return to;
|
|
18
|
+
};
|
|
19
|
+
var __toESM = (mod, isNodeMode, target) => (target = mod != null ? __create(__getProtoOf(mod)) : {}, __copyProps(
|
|
20
|
+
isNodeMode || !mod || !mod.__esModule ? __defProp(target, "default", { value: mod, enumerable: true }) : target,
|
|
21
|
+
mod
|
|
22
|
+
));
|
|
23
|
+
var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod);
|
|
24
|
+
var stdin_exports = {};
|
|
25
|
+
__export(stdin_exports, {
|
|
26
|
+
default: () => src_default
|
|
5
27
|
});
|
|
6
|
-
exports
|
|
7
|
-
var
|
|
8
|
-
var
|
|
9
|
-
var
|
|
10
|
-
var
|
|
11
|
-
var
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
28
|
+
module.exports = __toCommonJS(stdin_exports);
|
|
29
|
+
var import_polyfill_lib = require("@modern-js/polyfill-lib");
|
|
30
|
+
var import_utils = require("@modern-js/utils");
|
|
31
|
+
var import_ua_parser_js = __toESM(require("ua-parser-js"));
|
|
32
|
+
var import_const = require("./const");
|
|
33
|
+
var import_cache = __toESM(require("./libs/cache"));
|
|
34
|
+
var __async = (__this, __arguments, generator) => {
|
|
35
|
+
return new Promise((resolve, reject) => {
|
|
36
|
+
var fulfilled = (value) => {
|
|
37
|
+
try {
|
|
38
|
+
step(generator.next(value));
|
|
39
|
+
} catch (e) {
|
|
40
|
+
reject(e);
|
|
41
|
+
}
|
|
42
|
+
};
|
|
43
|
+
var rejected = (value) => {
|
|
44
|
+
try {
|
|
45
|
+
step(generator.throw(value));
|
|
46
|
+
} catch (e) {
|
|
47
|
+
reject(e);
|
|
48
|
+
}
|
|
49
|
+
};
|
|
50
|
+
var step = (x) => x.done ? resolve(x.value) : Promise.resolve(x.value).then(fulfilled, rejected);
|
|
51
|
+
step((generator = generator.apply(__this, __arguments)).next());
|
|
52
|
+
});
|
|
53
|
+
};
|
|
54
|
+
var src_default = () => ({
|
|
55
|
+
name: "@modern-js/plugin-polyfill",
|
|
17
56
|
setup: () => ({
|
|
18
57
|
beforeProdServer() {
|
|
19
|
-
const cache = new
|
|
20
|
-
const route =
|
|
21
|
-
const features = (0,
|
|
22
|
-
const minify = process.env.NODE_ENV ===
|
|
23
|
-
const featureDig = Object.keys(features).map(name => {
|
|
24
|
-
const {
|
|
25
|
-
|
|
26
|
-
} = features[name];
|
|
27
|
-
const flagStr = flags.join(',');
|
|
58
|
+
const cache = new import_cache.default();
|
|
59
|
+
const route = import_const.defaultPolyfill;
|
|
60
|
+
const features = (0, import_const.getDefaultFeatures)();
|
|
61
|
+
const minify = process.env.NODE_ENV === "production";
|
|
62
|
+
const featureDig = Object.keys(features).map((name) => {
|
|
63
|
+
const { flags = ["gated"] } = features[name];
|
|
64
|
+
const flagStr = flags.join(",");
|
|
28
65
|
return `${name}-${flagStr}`;
|
|
29
|
-
}).join(
|
|
30
|
-
return
|
|
66
|
+
}).join(",");
|
|
67
|
+
return (context, next) => __async(this, null, function* () {
|
|
31
68
|
if (context.url !== route) {
|
|
32
69
|
return next();
|
|
33
70
|
}
|
|
34
|
-
const parsedUA = (0,
|
|
35
|
-
const {
|
|
36
|
-
|
|
37
|
-
version = ''
|
|
38
|
-
} = parsedUA.browser;
|
|
39
|
-
const cacheKey = (0, _cache.generateCacheKey)({
|
|
71
|
+
const parsedUA = (0, import_ua_parser_js.default)(context.headers["user-agent"]);
|
|
72
|
+
const { name = "", version = "" } = parsedUA.browser;
|
|
73
|
+
const cacheKey = (0, import_cache.generateCacheKey)({
|
|
40
74
|
name,
|
|
41
75
|
version,
|
|
42
76
|
features: featureDig,
|
|
@@ -44,19 +78,21 @@ var _default = () => ({
|
|
|
44
78
|
});
|
|
45
79
|
const matched = cache.get(cacheKey);
|
|
46
80
|
if (matched) {
|
|
47
|
-
context.res.setHeader(
|
|
81
|
+
context.res.setHeader(
|
|
82
|
+
"content-type",
|
|
83
|
+
import_utils.mime.contentType("js")
|
|
84
|
+
);
|
|
48
85
|
return context.res.end(matched);
|
|
49
86
|
}
|
|
50
|
-
const polyfill =
|
|
51
|
-
uaString: context.headers[
|
|
87
|
+
const polyfill = yield (0, import_polyfill_lib.getPolyfillString)({
|
|
88
|
+
uaString: context.headers["user-agent"],
|
|
52
89
|
minify,
|
|
53
90
|
features
|
|
54
91
|
});
|
|
55
92
|
cache.set(cacheKey, polyfill);
|
|
56
|
-
context.res.setHeader(
|
|
93
|
+
context.res.setHeader("content-type", import_utils.mime.contentType("js"));
|
|
57
94
|
return context.res.end(polyfill);
|
|
58
|
-
};
|
|
95
|
+
});
|
|
59
96
|
}
|
|
60
97
|
})
|
|
61
98
|
});
|
|
62
|
-
exports.default = _default;
|
|
@@ -1,39 +1,53 @@
|
|
|
1
|
-
|
|
2
|
-
|
|
3
|
-
Object.
|
|
4
|
-
|
|
1
|
+
var __create = Object.create;
|
|
2
|
+
var __defProp = Object.defineProperty;
|
|
3
|
+
var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
|
|
4
|
+
var __getOwnPropNames = Object.getOwnPropertyNames;
|
|
5
|
+
var __getProtoOf = Object.getPrototypeOf;
|
|
6
|
+
var __hasOwnProp = Object.prototype.hasOwnProperty;
|
|
7
|
+
var __export = (target, all) => {
|
|
8
|
+
for (var name in all)
|
|
9
|
+
__defProp(target, name, { get: all[name], enumerable: true });
|
|
10
|
+
};
|
|
11
|
+
var __copyProps = (to, from, except, desc) => {
|
|
12
|
+
if (from && typeof from === "object" || typeof from === "function") {
|
|
13
|
+
for (let key of __getOwnPropNames(from))
|
|
14
|
+
if (!__hasOwnProp.call(to, key) && key !== except)
|
|
15
|
+
__defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable });
|
|
16
|
+
}
|
|
17
|
+
return to;
|
|
18
|
+
};
|
|
19
|
+
var __toESM = (mod, isNodeMode, target) => (target = mod != null ? __create(__getProtoOf(mod)) : {}, __copyProps(
|
|
20
|
+
isNodeMode || !mod || !mod.__esModule ? __defProp(target, "default", { value: mod, enumerable: true }) : target,
|
|
21
|
+
mod
|
|
22
|
+
));
|
|
23
|
+
var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod);
|
|
24
|
+
var stdin_exports = {};
|
|
25
|
+
__export(stdin_exports, {
|
|
26
|
+
default: () => Cache,
|
|
27
|
+
generateCacheKey: () => generateCacheKey
|
|
5
28
|
});
|
|
6
|
-
|
|
7
|
-
var
|
|
8
|
-
var
|
|
9
|
-
function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
|
|
10
|
-
function _defineProperty(obj, key, value) { if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; }
|
|
29
|
+
module.exports = __toCommonJS(stdin_exports);
|
|
30
|
+
var import_crypto = __toESM(require("crypto"));
|
|
31
|
+
var import_lru_cache = __toESM(require("lru-cache"));
|
|
11
32
|
const KB = 1024;
|
|
12
33
|
const MB = 1024 * KB;
|
|
13
|
-
const keyCache = new
|
|
14
|
-
const generateCacheKey = options => {
|
|
15
|
-
const {
|
|
16
|
-
name,
|
|
17
|
-
version,
|
|
18
|
-
features,
|
|
19
|
-
minify
|
|
20
|
-
} = options;
|
|
34
|
+
const keyCache = new import_lru_cache.default(1e4);
|
|
35
|
+
const generateCacheKey = (options) => {
|
|
36
|
+
const { name, version, features, minify } = options;
|
|
21
37
|
const str = `${name}-${version}-${Number(minify)}-${features}`;
|
|
22
38
|
const matched = keyCache.get(str);
|
|
23
39
|
if (matched) {
|
|
24
40
|
return matched;
|
|
25
41
|
}
|
|
26
|
-
const hash =
|
|
42
|
+
const hash = import_crypto.default.createHmac("sha256", "^polyfill$").update(str).digest("hex");
|
|
27
43
|
keyCache.set(str, hash);
|
|
28
44
|
return hash;
|
|
29
45
|
};
|
|
30
|
-
exports.generateCacheKey = generateCacheKey;
|
|
31
46
|
class Cache {
|
|
32
47
|
constructor() {
|
|
33
|
-
|
|
34
|
-
this.caches = new _lruCache.default({
|
|
48
|
+
this.caches = new import_lru_cache.default({
|
|
35
49
|
max: 200 * MB,
|
|
36
|
-
length: v => v.length
|
|
50
|
+
length: (v) => v.length
|
|
37
51
|
});
|
|
38
52
|
}
|
|
39
53
|
get(hash) {
|
|
@@ -43,4 +57,3 @@ class Cache {
|
|
|
43
57
|
this.caches.set(hash, content);
|
|
44
58
|
}
|
|
45
59
|
}
|
|
46
|
-
exports.default = Cache;
|
|
@@ -0,0 +1,22 @@
|
|
|
1
|
+
import { defaultPolyfill } from "./const";
|
|
2
|
+
var cli_default = function() {
|
|
3
|
+
return {
|
|
4
|
+
name: "@modern-js/plugin-polyfill",
|
|
5
|
+
setup: function(api) {
|
|
6
|
+
return {
|
|
7
|
+
htmlPartials: function htmlPartials(param) {
|
|
8
|
+
var entrypoint = param.entrypoint, partials = param.partials;
|
|
9
|
+
var resolvedConfig = api.useResolvedConfigContext();
|
|
10
|
+
if (resolvedConfig.output.polyfill === "ua") {
|
|
11
|
+
partials.top.push('<script src="'.concat(defaultPolyfill, '" crossorigin></script>'));
|
|
12
|
+
}
|
|
13
|
+
return {
|
|
14
|
+
partials: partials,
|
|
15
|
+
entrypoint: entrypoint
|
|
16
|
+
};
|
|
17
|
+
}
|
|
18
|
+
};
|
|
19
|
+
}
|
|
20
|
+
};
|
|
21
|
+
};
|
|
22
|
+
export { cli_default as default };
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
"use strict";
|
|
@@ -0,0 +1,203 @@
|
|
|
1
|
+
function asyncGeneratorStep(gen, resolve, reject, _next, _throw, key, arg) {
|
|
2
|
+
try {
|
|
3
|
+
var info = gen[key](arg);
|
|
4
|
+
var value = info.value;
|
|
5
|
+
} catch (error) {
|
|
6
|
+
reject(error);
|
|
7
|
+
return;
|
|
8
|
+
}
|
|
9
|
+
if (info.done) {
|
|
10
|
+
resolve(value);
|
|
11
|
+
} else {
|
|
12
|
+
Promise.resolve(value).then(_next, _throw);
|
|
13
|
+
}
|
|
14
|
+
}
|
|
15
|
+
function _asyncToGenerator(fn) {
|
|
16
|
+
return function() {
|
|
17
|
+
var self = this, args = arguments;
|
|
18
|
+
return new Promise(function(resolve, reject) {
|
|
19
|
+
var gen = fn.apply(self, args);
|
|
20
|
+
function _next(value) {
|
|
21
|
+
asyncGeneratorStep(gen, resolve, reject, _next, _throw, "next", value);
|
|
22
|
+
}
|
|
23
|
+
function _throw(err) {
|
|
24
|
+
asyncGeneratorStep(gen, resolve, reject, _next, _throw, "throw", err);
|
|
25
|
+
}
|
|
26
|
+
_next(undefined);
|
|
27
|
+
});
|
|
28
|
+
};
|
|
29
|
+
}
|
|
30
|
+
var __generator = this && this.__generator || function(thisArg, body) {
|
|
31
|
+
var f, y, t, g, _ = {
|
|
32
|
+
label: 0,
|
|
33
|
+
sent: function() {
|
|
34
|
+
if (t[0] & 1) throw t[1];
|
|
35
|
+
return t[1];
|
|
36
|
+
},
|
|
37
|
+
trys: [],
|
|
38
|
+
ops: []
|
|
39
|
+
};
|
|
40
|
+
return(g = {
|
|
41
|
+
next: verb(0),
|
|
42
|
+
"throw": verb(1),
|
|
43
|
+
"return": verb(2)
|
|
44
|
+
}, typeof Symbol === "function" && (g[Symbol.iterator] = function() {
|
|
45
|
+
return this;
|
|
46
|
+
}), g);
|
|
47
|
+
function verb(n) {
|
|
48
|
+
return function(v) {
|
|
49
|
+
return step([
|
|
50
|
+
n,
|
|
51
|
+
v
|
|
52
|
+
]);
|
|
53
|
+
};
|
|
54
|
+
}
|
|
55
|
+
function step(op) {
|
|
56
|
+
if (f) throw new TypeError("Generator is already executing.");
|
|
57
|
+
while(_)try {
|
|
58
|
+
if (f = 1, y && (t = op[0] & 2 ? y["return"] : op[0] ? y["throw"] || ((t = y["return"]) && t.call(y), 0) : y.next) && !(t = t.call(y, op[1])).done) return t;
|
|
59
|
+
if (y = 0, t) op = [
|
|
60
|
+
op[0] & 2,
|
|
61
|
+
t.value
|
|
62
|
+
];
|
|
63
|
+
switch(op[0]){
|
|
64
|
+
case 0:
|
|
65
|
+
case 1:
|
|
66
|
+
t = op;
|
|
67
|
+
break;
|
|
68
|
+
case 4:
|
|
69
|
+
_.label++;
|
|
70
|
+
return {
|
|
71
|
+
value: op[1],
|
|
72
|
+
done: false
|
|
73
|
+
};
|
|
74
|
+
case 5:
|
|
75
|
+
_.label++;
|
|
76
|
+
y = op[1];
|
|
77
|
+
op = [
|
|
78
|
+
0
|
|
79
|
+
];
|
|
80
|
+
continue;
|
|
81
|
+
case 7:
|
|
82
|
+
op = _.ops.pop();
|
|
83
|
+
_.trys.pop();
|
|
84
|
+
continue;
|
|
85
|
+
default:
|
|
86
|
+
if (!(t = _.trys, t = t.length > 0 && t[t.length - 1]) && (op[0] === 6 || op[0] === 2)) {
|
|
87
|
+
_ = 0;
|
|
88
|
+
continue;
|
|
89
|
+
}
|
|
90
|
+
if (op[0] === 3 && (!t || op[1] > t[0] && op[1] < t[3])) {
|
|
91
|
+
_.label = op[1];
|
|
92
|
+
break;
|
|
93
|
+
}
|
|
94
|
+
if (op[0] === 6 && _.label < t[1]) {
|
|
95
|
+
_.label = t[1];
|
|
96
|
+
t = op;
|
|
97
|
+
break;
|
|
98
|
+
}
|
|
99
|
+
if (t && _.label < t[2]) {
|
|
100
|
+
_.label = t[2];
|
|
101
|
+
_.ops.push(op);
|
|
102
|
+
break;
|
|
103
|
+
}
|
|
104
|
+
if (t[2]) _.ops.pop();
|
|
105
|
+
_.trys.pop();
|
|
106
|
+
continue;
|
|
107
|
+
}
|
|
108
|
+
op = body.call(thisArg, _);
|
|
109
|
+
} catch (e) {
|
|
110
|
+
op = [
|
|
111
|
+
6,
|
|
112
|
+
e
|
|
113
|
+
];
|
|
114
|
+
y = 0;
|
|
115
|
+
} finally{
|
|
116
|
+
f = t = 0;
|
|
117
|
+
}
|
|
118
|
+
if (op[0] & 5) throw op[1];
|
|
119
|
+
return {
|
|
120
|
+
value: op[0] ? op[1] : void 0,
|
|
121
|
+
done: true
|
|
122
|
+
};
|
|
123
|
+
}
|
|
124
|
+
};
|
|
125
|
+
import { getPolyfillString } from "@modern-js/polyfill-lib";
|
|
126
|
+
import { mime } from "@modern-js/utils";
|
|
127
|
+
import Parser from "ua-parser-js";
|
|
128
|
+
import { getDefaultFeatures, defaultPolyfill } from "./const";
|
|
129
|
+
import PolyfillCache, { generateCacheKey } from "./libs/cache";
|
|
130
|
+
var src_default = function() {
|
|
131
|
+
return {
|
|
132
|
+
name: "@modern-js/plugin-polyfill",
|
|
133
|
+
setup: function() {
|
|
134
|
+
return {
|
|
135
|
+
beforeProdServer: function beforeProdServer() {
|
|
136
|
+
var cache = new PolyfillCache();
|
|
137
|
+
var route = defaultPolyfill;
|
|
138
|
+
var features = getDefaultFeatures();
|
|
139
|
+
var minify = process.env.NODE_ENV === "production";
|
|
140
|
+
var featureDig = Object.keys(features).map(function(name) {
|
|
141
|
+
var _name = features[name], _flags = _name.flags, flags = _flags === void 0 ? [
|
|
142
|
+
"gated"
|
|
143
|
+
] : _flags;
|
|
144
|
+
var flagStr = flags.join(",");
|
|
145
|
+
return "".concat(name, "-").concat(flagStr);
|
|
146
|
+
}).join(",");
|
|
147
|
+
return function() {
|
|
148
|
+
var _ref = _asyncToGenerator(function(context, next) {
|
|
149
|
+
var parsedUA, _browser, _name, name, _version, version, cacheKey, matched, polyfill;
|
|
150
|
+
return __generator(this, function(_state) {
|
|
151
|
+
switch(_state.label){
|
|
152
|
+
case 0:
|
|
153
|
+
if (context.url !== route) {
|
|
154
|
+
return [
|
|
155
|
+
2,
|
|
156
|
+
next()
|
|
157
|
+
];
|
|
158
|
+
}
|
|
159
|
+
parsedUA = Parser(context.headers["user-agent"]);
|
|
160
|
+
_browser = parsedUA.browser, _name = _browser.name, name = _name === void 0 ? "" : _name, _version = _browser.version, version = _version === void 0 ? "" : _version;
|
|
161
|
+
cacheKey = generateCacheKey({
|
|
162
|
+
name: name,
|
|
163
|
+
version: version,
|
|
164
|
+
features: featureDig,
|
|
165
|
+
minify: minify
|
|
166
|
+
});
|
|
167
|
+
matched = cache.get(cacheKey);
|
|
168
|
+
if (matched) {
|
|
169
|
+
context.res.setHeader("content-type", mime.contentType("js"));
|
|
170
|
+
return [
|
|
171
|
+
2,
|
|
172
|
+
context.res.end(matched)
|
|
173
|
+
];
|
|
174
|
+
}
|
|
175
|
+
return [
|
|
176
|
+
4,
|
|
177
|
+
getPolyfillString({
|
|
178
|
+
uaString: context.headers["user-agent"],
|
|
179
|
+
minify: minify,
|
|
180
|
+
features: features
|
|
181
|
+
})
|
|
182
|
+
];
|
|
183
|
+
case 1:
|
|
184
|
+
polyfill = _state.sent();
|
|
185
|
+
cache.set(cacheKey, polyfill);
|
|
186
|
+
context.res.setHeader("content-type", mime.contentType("js"));
|
|
187
|
+
return [
|
|
188
|
+
2,
|
|
189
|
+
context.res.end(polyfill)
|
|
190
|
+
];
|
|
191
|
+
}
|
|
192
|
+
});
|
|
193
|
+
});
|
|
194
|
+
return function(context, next) {
|
|
195
|
+
return _ref.apply(this, arguments);
|
|
196
|
+
};
|
|
197
|
+
}();
|
|
198
|
+
}
|
|
199
|
+
};
|
|
200
|
+
}
|
|
201
|
+
};
|
|
202
|
+
};
|
|
203
|
+
export { src_default as default };
|
|
@@ -0,0 +1,77 @@
|
|
|
1
|
+
function _classCallCheck(instance, Constructor) {
|
|
2
|
+
if (!(instance instanceof Constructor)) {
|
|
3
|
+
throw new TypeError("Cannot call a class as a function");
|
|
4
|
+
}
|
|
5
|
+
}
|
|
6
|
+
function _defineProperties(target, props) {
|
|
7
|
+
for(var i = 0; i < props.length; i++){
|
|
8
|
+
var descriptor = props[i];
|
|
9
|
+
descriptor.enumerable = descriptor.enumerable || false;
|
|
10
|
+
descriptor.configurable = true;
|
|
11
|
+
if ("value" in descriptor) descriptor.writable = true;
|
|
12
|
+
Object.defineProperty(target, descriptor.key, descriptor);
|
|
13
|
+
}
|
|
14
|
+
}
|
|
15
|
+
function _createClass(Constructor, protoProps, staticProps) {
|
|
16
|
+
if (protoProps) _defineProperties(Constructor.prototype, protoProps);
|
|
17
|
+
if (staticProps) _defineProperties(Constructor, staticProps);
|
|
18
|
+
return Constructor;
|
|
19
|
+
}
|
|
20
|
+
function _defineProperty(obj, key, value) {
|
|
21
|
+
if (key in obj) {
|
|
22
|
+
Object.defineProperty(obj, key, {
|
|
23
|
+
value: value,
|
|
24
|
+
enumerable: true,
|
|
25
|
+
configurable: true,
|
|
26
|
+
writable: true
|
|
27
|
+
});
|
|
28
|
+
} else {
|
|
29
|
+
obj[key] = value;
|
|
30
|
+
}
|
|
31
|
+
return obj;
|
|
32
|
+
}
|
|
33
|
+
import crypto from "crypto";
|
|
34
|
+
import LRUCache from "lru-cache";
|
|
35
|
+
var KB = 1024;
|
|
36
|
+
var MB = 1024 * KB;
|
|
37
|
+
var keyCache = new LRUCache(1e4);
|
|
38
|
+
var generateCacheKey = function(options) {
|
|
39
|
+
var name = options.name, version = options.version, features = options.features, minify = options.minify;
|
|
40
|
+
var str = "".concat(name, "-").concat(version, "-").concat(Number(minify), "-").concat(features);
|
|
41
|
+
var matched = keyCache.get(str);
|
|
42
|
+
if (matched) {
|
|
43
|
+
return matched;
|
|
44
|
+
}
|
|
45
|
+
var hash = crypto.createHmac("sha256", "^polyfill$").update(str).digest("hex");
|
|
46
|
+
keyCache.set(str, hash);
|
|
47
|
+
return hash;
|
|
48
|
+
};
|
|
49
|
+
var Cache = /*#__PURE__*/ function() {
|
|
50
|
+
"use strict";
|
|
51
|
+
function Cache() {
|
|
52
|
+
_classCallCheck(this, Cache);
|
|
53
|
+
_defineProperty(this, "caches", void 0);
|
|
54
|
+
this.caches = new LRUCache({
|
|
55
|
+
max: 200 * MB,
|
|
56
|
+
length: function(v) {
|
|
57
|
+
return v.length;
|
|
58
|
+
}
|
|
59
|
+
});
|
|
60
|
+
}
|
|
61
|
+
_createClass(Cache, [
|
|
62
|
+
{
|
|
63
|
+
key: "get",
|
|
64
|
+
value: function get(hash) {
|
|
65
|
+
return this.caches.get(hash);
|
|
66
|
+
}
|
|
67
|
+
},
|
|
68
|
+
{
|
|
69
|
+
key: "set",
|
|
70
|
+
value: function set(hash, content) {
|
|
71
|
+
this.caches.set(hash, content);
|
|
72
|
+
}
|
|
73
|
+
}
|
|
74
|
+
]);
|
|
75
|
+
return Cache;
|
|
76
|
+
}();
|
|
77
|
+
export { Cache as default, generateCacheKey };
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
"use strict";
|
package/dist/types/cli.d.ts
CHANGED
|
@@ -1,7 +1,9 @@
|
|
|
1
1
|
import type { CliPlugin } from '@modern-js/core';
|
|
2
2
|
import type { UserConfig, ServerOptions } from '@modern-js/server-core';
|
|
3
|
+
|
|
3
4
|
declare const _default: () => CliPlugin<{
|
|
4
5
|
userConfig: UserConfig;
|
|
5
6
|
normalizedConfig: ServerOptions;
|
|
6
7
|
}>;
|
|
8
|
+
|
|
7
9
|
export default _default;
|
package/dist/types/index.d.ts
CHANGED
package/package.json
CHANGED
|
@@ -11,7 +11,7 @@
|
|
|
11
11
|
"modern",
|
|
12
12
|
"modern.js"
|
|
13
13
|
],
|
|
14
|
-
"version": "2.0.0-beta.
|
|
14
|
+
"version": "2.0.0-beta.4",
|
|
15
15
|
"jsnext:source": "./src/index.ts",
|
|
16
16
|
"types": "./dist/types/index.d.ts",
|
|
17
17
|
"main": "./dist/js/node/index.js",
|
|
@@ -40,7 +40,7 @@
|
|
|
40
40
|
"@modern-js/polyfill-lib": "^1.0.0",
|
|
41
41
|
"lru-cache": "^6.0.0",
|
|
42
42
|
"ua-parser-js": "^0.7.28",
|
|
43
|
-
"@modern-js/utils": "2.0.0-beta.
|
|
43
|
+
"@modern-js/utils": "2.0.0-beta.4"
|
|
44
44
|
},
|
|
45
45
|
"devDependencies": {
|
|
46
46
|
"@types/jest": "^27",
|
|
@@ -49,18 +49,13 @@
|
|
|
49
49
|
"@types/ua-parser-js": "^0.7.36",
|
|
50
50
|
"typescript": "^4",
|
|
51
51
|
"jest": "^27",
|
|
52
|
-
"@modern-js/server-core": "2.0.0-beta.
|
|
53
|
-
"@modern-js/types": "2.0.0-beta.
|
|
54
|
-
"@modern-js/core": "2.0.0-beta.
|
|
55
|
-
"@scripts/build": "2.0.0-beta.
|
|
56
|
-
"@scripts/jest-config": "2.0.0-beta.
|
|
52
|
+
"@modern-js/server-core": "2.0.0-beta.4",
|
|
53
|
+
"@modern-js/types": "2.0.0-beta.4",
|
|
54
|
+
"@modern-js/core": "2.0.0-beta.4",
|
|
55
|
+
"@scripts/build": "2.0.0-beta.4",
|
|
56
|
+
"@scripts/jest-config": "2.0.0-beta.4"
|
|
57
57
|
},
|
|
58
58
|
"sideEffects": false,
|
|
59
|
-
"modernConfig": {
|
|
60
|
-
"output": {
|
|
61
|
-
"packageMode": "node-js"
|
|
62
|
-
}
|
|
63
|
-
},
|
|
64
59
|
"publishConfig": {
|
|
65
60
|
"registry": "https://registry.npmjs.org/",
|
|
66
61
|
"access": "public"
|