babel-plugin-hylid-bridge 2.12.0-alpha.1 → 2.12.0-alpha.22

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.
@@ -0,0 +1 @@
1
+ export default function combieExports(index1Path: string, index2Path: string): string;
@@ -0,0 +1,17 @@
1
+ "use strict";
2
+
3
+ var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault");
4
+ Object.defineProperty(exports, "__esModule", {
5
+ value: true
6
+ });
7
+ exports.default = combieExports;
8
+ var _path = _interopRequireDefault(require("path"));
9
+ var _fsExtra = _interopRequireDefault(require("fs-extra"));
10
+ var _hashIt = _interopRequireDefault(require("hash-it"));
11
+ var isTest = process.env.NODE_ENV === 'test';
12
+ function combieExports(index1Path, index2Path) {
13
+ var indexPath = _path.default.resolve(__dirname, '..', '.temp', (isTest ? 'test' : (0, _hashIt.default)("".concat(index1Path).concat(index2Path))) + '.js');
14
+ _fsExtra.default.ensureFileSync(indexPath);
15
+ _fsExtra.default.writeFileSync(indexPath, "\n import index1 from '".concat(index1Path, "';\n import index2 from '").concat(index2Path, "';\n\n export default {\n ...index1,\n ...index2,\n };\n "));
16
+ return indexPath;
17
+ }
@@ -0,0 +1 @@
1
+ export default function generateJSAPIs(targets: string[]): void;
@@ -0,0 +1,54 @@
1
+ "use strict";
2
+
3
+ var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault");
4
+ Object.defineProperty(exports, "__esModule", {
5
+ value: true
6
+ });
7
+ exports.default = generateJSAPIs;
8
+ var _slicedToArray2 = _interopRequireDefault(require("@babel/runtime/helpers/slicedToArray"));
9
+ var _path = _interopRequireDefault(require("path"));
10
+ var _fsExtra = _interopRequireDefault(require("fs-extra"));
11
+ var _parser = require("@babel/parser");
12
+ var _traverse = _interopRequireDefault(require("@babel/traverse"));
13
+ var _generator = _interopRequireDefault(require("@babel/generator"));
14
+ var _getLibraryDir = _interopRequireDefault(require("./getLibraryDir"));
15
+ var _helper = require("./helper");
16
+ function generateJSAPIs(targets) {
17
+ var lib = (0, _getLibraryDir.default)();
18
+ // 获取当前配置的环境信息
19
+ var appEnvList = targets.reduce(function (acc, target) {
20
+ var _splitTarget = (0, _helper.splitTarget)(target),
21
+ _splitTarget2 = (0, _slicedToArray2.default)(_splitTarget, 2),
22
+ platform = _splitTarget2[0],
23
+ client = _splitTarget2[1];
24
+ acc.push("".concat((0, _helper.camelCase)("is_".concat(platform, "_").concat(client))));
25
+ return acc;
26
+ }, []);
27
+ // 获取 lib 下的 bridge.js 文件
28
+ var bridgeFile = _path.default.join(lib, 'lib', 'bridges.js');
29
+ var ast = (0, _parser.parse)(_fsExtra.default.readFileSync(bridgeFile, 'utf-8'), {
30
+ sourceType: 'module'
31
+ });
32
+ (0, _traverse.default)(ast, {
33
+ IfStatement: function IfStatement(path) {
34
+ /**
35
+ * if 条件里有 n 多种写法,test 对应 n 多中类型。
36
+ * 下面为了方便,直接尝试访问 object.name 是否是 appEnv,在 bridge.js 中,符合这个条件的,一定是 jsapi 函数中 if 判断条件
37
+ */
38
+ var _ref = path.node.test || {},
39
+ object = _ref.object,
40
+ property = _ref.property;
41
+ if ((object === null || object === void 0 ? void 0 : object.name) === 'appEnv') {
42
+ var env = property.name;
43
+ // 删除不是目标的 appEnv 判断代码
44
+ if (!appEnvList.includes(env)) {
45
+ path.remove();
46
+ }
47
+ }
48
+ }
49
+ });
50
+ // 生成文件
51
+ var outPath = _path.default.join(lib, 'lib', '_entry.js');
52
+ var codes = ['// hylid-bridge babel 插件生成', "export * from './index'", "export { default } from './index'", (0, _generator.default)(ast).code];
53
+ _fsExtra.default.writeFileSync(outPath, codes.join('\n'));
54
+ }
@@ -0,0 +1,24 @@
1
+ import type babelCore from '@babel/core';
2
+ import { PluginPass } from '@babel/core';
3
+ export declare function snakeCaseTarget(input: string): string;
4
+ export declare function isTargetSupported(target: string, libraryDir: string): boolean;
5
+ export declare function getTargets(libraryDir: string, customTargets?: string[]): string[];
6
+ export declare function isApiExists(name: string, target: string, libraryDir: string, polyfillDir?: string): boolean | "" | undefined;
7
+ export declare function getUserAppEnvPath(appEnvPath?: string): string | undefined;
8
+ export declare function splitTarget(target: string): string[];
9
+ interface IState extends PluginPass {
10
+ usedJSAPIList: 'all' | string[];
11
+ }
12
+ export declare function getNames(node: babelCore.NodePath<babelCore.types.MemberExpression>['node'], scope: babelCore.NodePath<babelCore.types.MemberExpression>['scope'], state: IState, targets: string[]): {
13
+ objectName: string;
14
+ propertyName: undefined;
15
+ } | {
16
+ objectName: string;
17
+ propertyName: string;
18
+ } | {
19
+ objectName: undefined;
20
+ propertyName: undefined;
21
+ };
22
+ export declare function isJSAPIInTargets(jsapiName: string, targets: string[], filename: string, libraryDir: string, polyfillDir?: string): boolean;
23
+ export declare function camelCase(input: string): string;
24
+ export {};
package/lib/helper.js ADDED
@@ -0,0 +1,119 @@
1
+ "use strict";
2
+
3
+ var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault");
4
+ var _typeof = require("@babel/runtime/helpers/typeof");
5
+ Object.defineProperty(exports, "__esModule", {
6
+ value: true
7
+ });
8
+ exports.camelCase = camelCase;
9
+ exports.getNames = getNames;
10
+ exports.getTargets = getTargets;
11
+ exports.getUserAppEnvPath = getUserAppEnvPath;
12
+ exports.isApiExists = isApiExists;
13
+ exports.isJSAPIInTargets = isJSAPIInTargets;
14
+ exports.isTargetSupported = isTargetSupported;
15
+ exports.snakeCaseTarget = snakeCaseTarget;
16
+ exports.splitTarget = splitTarget;
17
+ var _path = _interopRequireDefault(require("path"));
18
+ var _fsExtra = _interopRequireDefault(require("fs-extra"));
19
+ var utils = _interopRequireWildcard(require("./utils"));
20
+ function _getRequireWildcardCache(e) { if ("function" != typeof WeakMap) return null; var r = new WeakMap(), t = new WeakMap(); return (_getRequireWildcardCache = function _getRequireWildcardCache(e) { return e ? t : r; })(e); }
21
+ function _interopRequireWildcard(e, r) { if (!r && e && e.__esModule) return e; if (null === e || "object" != _typeof(e) && "function" != typeof e) return { default: e }; var t = _getRequireWildcardCache(r); if (t && t.has(e)) return t.get(e); var n = { __proto__: null }, a = Object.defineProperty && Object.getOwnPropertyDescriptor; for (var u in e) if ("default" !== u && Object.prototype.hasOwnProperty.call(e, u)) { var i = a ? Object.getOwnPropertyDescriptor(e, u) : null; i && (i.get || i.set) ? Object.defineProperty(n, u, i) : n[u] = e[u]; } return n.default = e, t && t.set(e, n), n; }
22
+ function snakeCaseTarget(input) {
23
+ var words = input.replace(/[^a-zA-Z0-9]+/g, ' ').trim();
24
+ var wordArray = words.split(' ');
25
+ var snakeCasedWords = wordArray.map(function (word) {
26
+ return word.replace(/[A-Z]/g, function (match, index) {
27
+ return index === 0 ? match.toLowerCase() : "_".concat(match);
28
+ });
29
+ });
30
+ return snakeCasedWords.join('_');
31
+ }
32
+ function isTargetSupported(target, libraryDir) {
33
+ return ['MpWeb', 'Mp', 'Web'].some(function (prefix) {
34
+ if (target.startsWith(prefix)) {
35
+ var targetClientDir = _path.default.resolve(libraryDir, 'lib/clients', snakeCaseTarget(prefix), snakeCaseTarget(target.replace(prefix, '')));
36
+ return _fsExtra.default.existsSync(targetClientDir);
37
+ }
38
+ return false;
39
+ });
40
+ }
41
+ function getTargets(libraryDir, customTargets) {
42
+ var targets = customTargets || (process.env.HYLID_BRIDGE_TARGETS ? process.env.HYLID_BRIDGE_TARGETS.split(',') : []);
43
+ return targets.filter(function (target) {
44
+ return isTargetSupported(target, libraryDir);
45
+ });
46
+ }
47
+ function isApiExists(name, target, libraryDir, polyfillDir) {
48
+ var targetSplit = splitTarget(target);
49
+ if (targetSplit.length !== 2) {
50
+ throw new Error("Wrong target configuration: ".concat(target, "."));
51
+ }
52
+ return _fsExtra.default.existsSync(_path.default.resolve(libraryDir, "./lib/clients/".concat(targetSplit[0], "/").concat(targetSplit[1], "/").concat(name, ".js"))) || polyfillDir && (_fsExtra.default.existsSync(_path.default.resolve(polyfillDir, "./".concat(targetSplit[0], "/").concat(targetSplit[1], "/").concat(name, ".js"))) || _fsExtra.default.existsSync(_path.default.resolve(polyfillDir, "./".concat(targetSplit[0], "/").concat(targetSplit[1], "/").concat(name, ".ts"))));
53
+ }
54
+ function getUserAppEnvPath(appEnvPath) {
55
+ var realAppEnvPath = appEnvPath !== null && appEnvPath !== void 0 ? appEnvPath : _path.default.resolve(process.cwd(), './src/appEnv.ts');
56
+ if (!_fsExtra.default.existsSync(realAppEnvPath)) {
57
+ utils.log("Can not find the appEnv module at the path: ".concat(realAppEnvPath, "."));
58
+ return;
59
+ }
60
+ return realAppEnvPath;
61
+ }
62
+ function splitTarget(target) {
63
+ var prefixList = ['MpWeb', 'Mp', 'Web'];
64
+ for (var i = 0, il = prefixList.length; i < il; i++) {
65
+ var prefix = prefixList[i];
66
+ if (target.startsWith(prefix)) {
67
+ return [snakeCaseTarget(prefix), snakeCaseTarget(target.replace(prefix, ''))];
68
+ }
69
+ }
70
+ throw new Error("Invalid bridge target: ".concat(target, "."));
71
+ }
72
+ function getNames(node, scope, state, targets) {
73
+ var _state$filename;
74
+ // my.alert || my[a]
75
+ if (node.object.type === 'Identifier' && node.property.type === 'Identifier' &&
76
+ // Remix 中会编译所有 node_modules 下的模块
77
+ !((_state$filename = state.filename) !== null && _state$filename !== void 0 && _state$filename.includes("".concat(_path.default.sep, "node_modules").concat(_path.default.sep, "hylid-bridge").concat(_path.default.sep))) && targets && targets.length && !scope.hasBinding('my')) {
78
+ return node.computed ? {
79
+ objectName: node.object.name,
80
+ propertyName: undefined
81
+ } : {
82
+ objectName: node.object.name,
83
+ propertyName: node.property.name
84
+ };
85
+ }
86
+ // my['alert']
87
+ if (node.object.type === 'Identifier' && node.property.type === 'StringLiteral' && node.computed && targets && targets.length && !scope.hasBinding('my')) {
88
+ return {
89
+ objectName: node.object.name,
90
+ propertyName: node.property.value
91
+ };
92
+ }
93
+ return {
94
+ objectName: undefined,
95
+ propertyName: undefined
96
+ };
97
+ }
98
+ function isJSAPIInTargets(jsapiName, targets, filename, libraryDir, polyfillDir) {
99
+ return targets.every(function (target) {
100
+ var targetSplit = splitTarget(target);
101
+ if (!isApiExists(jsapiName, target, libraryDir, polyfillDir)) {
102
+ utils.warn("Can not find the API `".concat(jsapiName, "` in `").concat(_path.default.resolve(libraryDir, './lib/clients/' + targetSplit[0] + '/' + targetSplit[1]), "`. Fallback to import all API codes of ").concat(target, ". Current file path: `").concat(filename, "`."));
103
+ return false;
104
+ }
105
+ return true;
106
+ });
107
+ }
108
+ // lodash 把数字后面第一个字符变大了,所以这里单独实现下
109
+ function camelCase(input) {
110
+ var words = input.replace(/[^a-zA-Z0-9]+/g, ' ').trim();
111
+ var wordArray = words.split(' ');
112
+ var camelCasedWords = wordArray.map(function (word, index) {
113
+ if (index === 0) {
114
+ return word.toLowerCase();
115
+ }
116
+ return word.charAt(0).toUpperCase() + word.slice(1);
117
+ });
118
+ return camelCasedWords.join('');
119
+ }
package/lib/index.d.ts CHANGED
@@ -3,5 +3,11 @@ import { PluginPass } from '@babel/core';
3
3
  interface IState extends PluginPass {
4
4
  usedJSAPIList: 'all' | string[];
5
5
  }
6
- declare const _default: (core: typeof babelCore, opts?: Record<string, any>) => babelCore.PluginObj<IState>;
6
+ declare const _default: (core: typeof babelCore, opts?: {
7
+ targets?: string[];
8
+ appEnvPath?: string;
9
+ libraryDir?: string;
10
+ polyfillDir?: string;
11
+ transformMy?: boolean;
12
+ }) => babelCore.PluginObj<IState>;
7
13
  export default _default;
package/lib/index.js CHANGED
@@ -13,97 +13,40 @@ var _lodash = _interopRequireDefault(require("lodash"));
13
13
  var babelTypes = _interopRequireWildcard(require("@babel/types"));
14
14
  var _getLibraryDir = _interopRequireDefault(require("./getLibraryDir"));
15
15
  var utils = _interopRequireWildcard(require("./utils"));
16
- function _getRequireWildcardCache(nodeInterop) { if (typeof WeakMap !== "function") return null; var cacheBabelInterop = new WeakMap(); var cacheNodeInterop = new WeakMap(); return (_getRequireWildcardCache = function _getRequireWildcardCache(nodeInterop) { return nodeInterop ? cacheNodeInterop : cacheBabelInterop; })(nodeInterop); }
17
- function _interopRequireWildcard(obj, nodeInterop) { if (!nodeInterop && obj && obj.__esModule) { return obj; } if (obj === null || _typeof(obj) !== "object" && typeof obj !== "function") { return { default: obj }; } var cache = _getRequireWildcardCache(nodeInterop); if (cache && cache.has(obj)) { return cache.get(obj); } var newObj = {}; var hasPropertyDescriptor = Object.defineProperty && Object.getOwnPropertyDescriptor; for (var key in obj) { if (key !== "default" && Object.prototype.hasOwnProperty.call(obj, key)) { var desc = hasPropertyDescriptor ? Object.getOwnPropertyDescriptor(obj, key) : null; if (desc && (desc.get || desc.set)) { Object.defineProperty(newObj, key, desc); } else { newObj[key] = obj[key]; } } } newObj.default = obj; if (cache) { cache.set(obj, newObj); } return newObj; }
16
+ var _combineExports = _interopRequireDefault(require("./combineExports"));
17
+ var _helper = require("./helper");
18
+ var _generateJSAPIs = _interopRequireDefault(require("./generateJSAPIs"));
19
+ function _getRequireWildcardCache(e) { if ("function" != typeof WeakMap) return null; var r = new WeakMap(), t = new WeakMap(); return (_getRequireWildcardCache = function _getRequireWildcardCache(e) { return e ? t : r; })(e); }
20
+ function _interopRequireWildcard(e, r) { if (!r && e && e.__esModule) return e; if (null === e || "object" != _typeof(e) && "function" != typeof e) return { default: e }; var t = _getRequireWildcardCache(r); if (t && t.has(e)) return t.get(e); var n = { __proto__: null }, a = Object.defineProperty && Object.getOwnPropertyDescriptor; for (var u in e) if ("default" !== u && Object.prototype.hasOwnProperty.call(e, u)) { var i = a ? Object.getOwnPropertyDescriptor(e, u) : null; i && (i.get || i.set) ? Object.defineProperty(n, u, i) : n[u] = e[u]; } return n.default = e, t && t.set(e, n), n; }
18
21
  /**
19
22
  * https://astexplorer.net/
20
23
  */
21
24
 
22
25
  var identifierPrefix = '__hylid_bridge__';
23
26
  var libraryName = 'hylid-bridge';
24
- var libraryDir = (0, _getLibraryDir.default)();
25
- function snakeCaseTarget(value) {
26
- if (value === 'H5') {
27
- return 'h5';
28
- }
29
- return _lodash.default.snakeCase(value);
30
- }
31
- function isTargetSupported(target) {
32
- var libraryDir = (0, _getLibraryDir.default)();
33
- return ['MpWeb', 'Mp', 'Web'].some(function (prefix) {
34
- if (target.startsWith(prefix)) {
35
- var targetClientDir = _path.default.resolve(libraryDir, 'lib/clients', snakeCaseTarget(prefix), snakeCaseTarget(target.replace(prefix, '')));
36
- return _fsExtra.default.existsSync(targetClientDir);
37
- }
38
- return false;
39
- });
40
- }
41
- function getTargets(customTargets) {
42
- var targets = customTargets || (process.env.HYLID_BRIDGE_TARGETS ? process.env.HYLID_BRIDGE_TARGETS.split(',') : []);
43
- return targets.filter(isTargetSupported);
44
- }
45
- function isApiExists(name, target) {
46
- var targetSplit = splitTarget(target);
47
- if (targetSplit.length !== 2) {
48
- throw new Error("Wrong target configuration: ".concat(target, "."));
49
- }
50
- return _fsExtra.default.existsSync(_path.default.resolve(libraryDir, "./lib/clients/".concat(targetSplit[0], "/").concat(targetSplit[1], "/").concat(name, ".js")));
51
- }
52
- function getUserAppEnvPath(appEnvPath) {
53
- var realAppEnvPath = appEnvPath !== null && appEnvPath !== void 0 ? appEnvPath : _path.default.resolve(process.cwd(), './src/appEnv.ts');
54
- if (!_fsExtra.default.existsSync(realAppEnvPath)) {
55
- utils.log("Can not find the appEnv module at the path: ".concat(realAppEnvPath, "."));
56
- return;
57
- }
58
- return realAppEnvPath;
59
- }
60
- function splitTarget(target) {
61
- var prefixList = ['MpWeb', 'Mp', 'Web'];
62
- for (var i = 0, il = prefixList.length; i < il; i++) {
63
- var prefix = prefixList[i];
64
- if (target.startsWith(prefix)) {
65
- return [snakeCaseTarget(prefix), snakeCaseTarget(target.replace(prefix, ''))];
66
- }
67
- }
68
- throw new Error("Invalid bridge target: ".concat(target, "."));
69
- }
70
27
  var myLocalName = "".concat(identifierPrefix, "my__");
71
- function getNames(node, scope, state, targets) {
72
- var _state$filename;
73
- if (node.object.type === 'Identifier' && node.property.type === 'Identifier' &&
74
- // Remix 中会编译所有 node_modules 下的模块
75
- !((_state$filename = state.filename) !== null && _state$filename !== void 0 && _state$filename.includes("".concat(_path.default.sep, "node_modules").concat(_path.default.sep, "hylid-bridge").concat(_path.default.sep))) && targets && targets.length && !scope.hasBinding('my')) {
76
- return {
77
- objectName: node.object.name,
78
- propertyName: node.property.name
79
- };
80
- }
81
- return {
82
- objectName: undefined,
83
- propertyName: undefined
84
- };
85
- }
86
- function isJSAPIInTargets(jsapiName, targets, filename) {
87
- return targets.every(function (target) {
88
- var targetSplit = splitTarget(target);
89
- if (!isApiExists(jsapiName, target)) {
90
- utils.warn("Can not find the API `".concat(jsapiName, "` in `").concat(_path.default.resolve(libraryDir, './lib/clients/' + targetSplit[0] + '/' + targetSplit[1]), "`. Fallback to import all API codes of ").concat(target, ". Current file path: `").concat(filename, "`."));
91
- return false;
92
- }
93
- return true;
94
- });
95
- }
96
- var _default = function _default(core, opts) {
97
- var targets = getTargets(opts === null || opts === void 0 ? void 0 : opts.targets);
98
- var userAppEnvPath = getUserAppEnvPath(opts === null || opts === void 0 ? void 0 : opts.appEnvPath);
28
+ var _default = exports.default = function _default(core, opts) {
29
+ var _opts$libraryDir, _opts$transformMy;
30
+ var libraryDir = (_opts$libraryDir = opts === null || opts === void 0 ? void 0 : opts.libraryDir) !== null && _opts$libraryDir !== void 0 ? _opts$libraryDir : (0, _getLibraryDir.default)();
31
+ var targets = (0, _helper.getTargets)(libraryDir, opts === null || opts === void 0 ? void 0 : opts.targets);
32
+ var userAppEnvPath = (0, _helper.getUserAppEnvPath)(opts === null || opts === void 0 ? void 0 : opts.appEnvPath);
33
+ var polyfillDir = opts === null || opts === void 0 ? void 0 : opts.polyfillDir;
34
+ var transformMy = (_opts$transformMy = opts === null || opts === void 0 ? void 0 : opts.transformMy) !== null && _opts$transformMy !== void 0 ? _opts$transformMy : false;
35
+ // 生成 _entry 文件
36
+ (0, _generateJSAPIs.default)(targets);
99
37
  return {
100
38
  name: 'babel-plugin-hylid-bridge',
101
39
  visitor: {
40
+ ImportDeclaration: function ImportDeclaration(path) {
41
+ if (path.node.source.value === libraryName) {
42
+ path.node.source = core.types.stringLiteral("".concat(libraryName, "/lib/_entry.js"));
43
+ }
44
+ },
102
45
  MemberExpression: function MemberExpression(path, state) {
103
- var _getNames = getNames(path.node, path.scope, state, targets),
46
+ var _getNames = (0, _helper.getNames)(path.node, path.scope, state, targets),
104
47
  objectName = _getNames.objectName,
105
48
  propertyName = _getNames.propertyName;
106
- if (!propertyName || propertyName === 'call' || objectName !== 'my') {
49
+ if (propertyName === 'call' || objectName !== 'my' || !transformMy) {
107
50
  return;
108
51
  }
109
52
  var newNode = core.types.cloneNode(path.node, true, true);
@@ -112,38 +55,44 @@ var _default = function _default(core, opts) {
112
55
  path.replaceWith(newNode);
113
56
  return;
114
57
  }
115
- if (path.node.computed) {
58
+ if (!propertyName && path.node.computed) {
116
59
  state.usedJSAPIList = 'all';
117
- utils.warn("Detect visiting the property of `my` with computed mode: my[".concat(propertyName, "]. Fallback to import all API codes of ").concat(targets.join(','), ". Current file path: `").concat(state.filename, "`."));
118
- } else {
60
+ utils.warn("Detect visiting the property of `my` with computed mode. Fallback to import all API codes of ".concat(targets.join(','), ". Current file path: `").concat(state.filename, "`."));
61
+ path.replaceWith(newNode);
62
+ return;
63
+ }
64
+ if (propertyName) {
119
65
  state.usedJSAPIList = state.usedJSAPIList || [];
120
66
  var name = propertyName;
121
- if (isJSAPIInTargets(name, targets, state.filename)) {
67
+ if ((0, _helper.isJSAPIInTargets)(name, targets, state.filename, libraryDir, polyfillDir)) {
122
68
  state.usedJSAPIList.push(name);
123
69
  } else {
124
70
  state.usedJSAPIList = 'all';
125
71
  }
72
+ path.replaceWith(newNode);
73
+ return;
126
74
  }
127
- path.replaceWith(newNode);
128
75
  },
129
76
  CallExpression: function CallExpression(path, state) {
130
- if (path.node.callee.type !== 'MemberExpression') {
77
+ if (path.node.callee.type !== 'MemberExpression' || !transformMy) {
131
78
  return;
132
79
  }
133
- var _getNames2 = getNames(path.node.callee, path.scope, state, targets),
80
+ var _getNames2 = (0, _helper.getNames)(path.node.callee, path.scope, state, targets),
134
81
  objectName = _getNames2.objectName,
135
82
  propertyName = _getNames2.propertyName;
136
83
  if (objectName !== 'my' || propertyName !== 'call' || !path.node.arguments[0] || path.node.arguments[0].type !== 'StringLiteral') {
137
84
  return;
138
85
  }
139
- var newNode = core.types.callExpression(babelTypes.memberExpression(babelTypes.identifier(myLocalName), babelTypes.identifier(path.node.arguments[0].value)), path.node.arguments.slice(1));
86
+ var newNode = core.types.callExpression(
87
+ // @ts-ignore
88
+ babelTypes.memberExpression(babelTypes.identifier(myLocalName), babelTypes.identifier(path.node.arguments[0].value)), path.node.arguments.slice(1));
140
89
  if (state.usedJSAPIList === 'all') {
141
90
  path.replaceWith(newNode);
142
91
  return;
143
92
  }
144
93
  state.usedJSAPIList = state.usedJSAPIList || [];
145
94
  var name = path.node.arguments[0].value;
146
- if (isJSAPIInTargets(name, targets, state.filename)) {
95
+ if ((0, _helper.isJSAPIInTargets)(name, targets, state.filename, libraryDir, polyfillDir)) {
147
96
  state.usedJSAPIList.push(name);
148
97
  } else {
149
98
  state.usedJSAPIList = 'all';
@@ -173,21 +122,24 @@ var _default = function _default(core, opts) {
173
122
  nodes.push(babelTypes.importDeclaration([babelTypes.importDefaultSpecifier(babelTypes.identifier(objectSpreadName))], babelTypes.stringLiteral("".concat(libraryName, "/lib/objectSpread"))), babelTypes.variableDeclaration('var', [babelTypes.variableDeclarator(babelTypes.identifier(appEnvLocalName), babelTypes.callExpression(babelTypes.identifier(objectSpreadName), [babelTypes.identifier(innerAppEnvLocalName), babelTypes.identifier(userAppEnvLocalName)]))]));
174
123
  if (usedJSAPIList === 'all') {
175
124
  nodes.push.apply(nodes, (0, _toConsumableArray2.default)(targets.map(function (target) {
176
- var targetSplit = splitTarget(target);
177
- return babelTypes.importDeclaration([babelTypes.importDefaultSpecifier(babelTypes.identifier("".concat(identifierPrefix).concat(targetSplit[0], "_").concat(targetSplit[1], "_my__")))], babelTypes.stringLiteral("".concat(libraryName, "/lib/clients/").concat(targetSplit[0], "/").concat(targetSplit[1], "/index")));
125
+ var targetSplit = (0, _helper.splitTarget)(target);
126
+ var innerIndexPath = "".concat(libraryName, "/lib/clients/").concat(targetSplit[0], "/").concat(targetSplit[1], "/index");
127
+ var polyfillIndexPath = polyfillDir && _path.default.resolve(polyfillDir, targetSplit[0], targetSplit[1], 'index');
128
+ var normalizedIndexPath = polyfillIndexPath && (_fsExtra.default.existsSync("".concat(polyfillIndexPath, ".js")) || _fsExtra.default.existsSync("".concat(polyfillIndexPath, ".ts"))) ? (0, _combineExports.default)(require.resolve(innerIndexPath), polyfillIndexPath) : innerIndexPath;
129
+ return babelTypes.importDeclaration([babelTypes.importDefaultSpecifier(babelTypes.identifier("".concat(identifierPrefix).concat(targetSplit[0], "_").concat(targetSplit[1], "_my__")))], babelTypes.stringLiteral(normalizedIndexPath));
178
130
  })));
179
131
  var buildElseIf = function buildElseIf(targetList) {
180
132
  if (!targetList.length) {
181
133
  return;
182
134
  }
183
135
  var target = targetList[0];
184
- var targetSplit = splitTarget(target);
185
- return babelTypes.ifStatement(babelTypes.identifier("".concat(appEnvLocalName, ".").concat(_lodash.default.camelCase("is_".concat(targetSplit[0], "_").concat(targetSplit[1])))), babelTypes.blockStatement([babelTypes.expressionStatement(babelTypes.assignmentExpression('=', babelTypes.identifier(myLocalName), babelTypes.identifier("".concat(identifierPrefix).concat(targetSplit[0], "_").concat(targetSplit[1], "_my__"))))]), buildElseIf(targetList.slice(1)));
136
+ var targetSplit = (0, _helper.splitTarget)(target);
137
+ return babelTypes.ifStatement(babelTypes.identifier("".concat(appEnvLocalName, ".").concat((0, _helper.camelCase)("is_".concat(targetSplit[0], "_").concat(targetSplit[1])))), babelTypes.blockStatement([babelTypes.expressionStatement(babelTypes.assignmentExpression('=', babelTypes.identifier(myLocalName), babelTypes.identifier("".concat(identifierPrefix).concat(targetSplit[0], "_").concat(targetSplit[1], "_my__"))))]), buildElseIf(targetList.slice(1)));
186
138
  };
187
139
  nodes.push(babelTypes.variableDeclaration('var', [babelTypes.variableDeclarator(babelTypes.identifier(myLocalName))]));
188
140
  // Do not generate the `if statement` when there is just one target.
189
141
  if (targets.length === 1) {
190
- var targetSplit = splitTarget(targets[0]);
142
+ var targetSplit = (0, _helper.splitTarget)(targets[0]);
191
143
  nodes.push(babelTypes.expressionStatement(babelTypes.assignmentExpression('=', babelTypes.identifier(myLocalName), babelTypes.identifier("".concat(identifierPrefix).concat(targetSplit[0], "_").concat(targetSplit[1], "_my__")))));
192
144
  } else {
193
145
  var elseIfNode = buildElseIf(targets);
@@ -197,9 +149,11 @@ var _default = function _default(core, opts) {
197
149
  var normalizedJSAPIList = _lodash.default.uniq(usedJSAPIList);
198
150
  normalizedJSAPIList.forEach(function (name) {
199
151
  targets.forEach(function (target) {
200
- var targetSplit = splitTarget(target);
152
+ var targetSplit = (0, _helper.splitTarget)(target);
201
153
  var localName = "".concat(identifierPrefix).concat(targetSplit[0], "_").concat(targetSplit[1], "_").concat(name, "__");
202
- var n = babelTypes.importDeclaration([babelTypes.importDefaultSpecifier(babelTypes.identifier(localName))], babelTypes.stringLiteral("".concat(libraryName, "/lib/clients/").concat(targetSplit[0], "/").concat(targetSplit[1], "/").concat(name)));
154
+ var innerSourcePath = "".concat(libraryName, "/lib/clients/").concat(targetSplit[0], "/").concat(targetSplit[1], "/").concat(name);
155
+ var userSourcePath = polyfillDir ? _path.default.resolve(polyfillDir, targetSplit[0], targetSplit[1], name) : undefined;
156
+ var n = babelTypes.importDeclaration([babelTypes.importDefaultSpecifier(babelTypes.identifier(localName))], babelTypes.stringLiteral(userSourcePath && (_fsExtra.default.existsSync("".concat(userSourcePath, ".js")) || _fsExtra.default.existsSync("".concat(userSourcePath, ".ts"))) ? userSourcePath : innerSourcePath));
203
157
  nodes.push(n);
204
158
  });
205
159
  });
@@ -208,16 +162,16 @@ var _default = function _default(core, opts) {
208
162
  return;
209
163
  }
210
164
  var target = targetList[0];
211
- var targetSplit = splitTarget(target);
165
+ var targetSplit = (0, _helper.splitTarget)(target);
212
166
  var propertyList = normalizedJSAPIList.map(function (name) {
213
167
  return babelTypes.objectProperty(babelTypes.identifier(name), babelTypes.identifier("".concat(identifierPrefix).concat(targetSplit[0], "_").concat(targetSplit[1], "_").concat(name, "__")));
214
168
  });
215
- return babelTypes.ifStatement(babelTypes.identifier("".concat(appEnvLocalName, ".").concat(_lodash.default.camelCase("is_".concat(targetSplit[0], "_").concat(targetSplit[1])))), babelTypes.blockStatement([babelTypes.expressionStatement(babelTypes.assignmentExpression('=', babelTypes.identifier(myLocalName), babelTypes.objectExpression(propertyList)))]), _buildElseIf(targetList.slice(1)));
169
+ return babelTypes.ifStatement(babelTypes.identifier("".concat(appEnvLocalName, ".").concat((0, _helper.camelCase)("is_".concat(targetSplit[0], "_").concat(targetSplit[1])))), babelTypes.blockStatement([babelTypes.expressionStatement(babelTypes.assignmentExpression('=', babelTypes.identifier(myLocalName), babelTypes.objectExpression(propertyList)))]), _buildElseIf(targetList.slice(1)));
216
170
  };
217
171
  nodes.push(babelTypes.variableDeclaration('var', [babelTypes.variableDeclarator(babelTypes.identifier(myLocalName))]));
218
172
  // Do not generate the `if statement` when there is just one target.
219
173
  if (targets.length === 1) {
220
- var _targetSplit = splitTarget(targets[0]);
174
+ var _targetSplit = (0, _helper.splitTarget)(targets[0]);
221
175
  var propertyList = normalizedJSAPIList.map(function (name) {
222
176
  return babelTypes.objectProperty(babelTypes.identifier(name), babelTypes.identifier("".concat(identifierPrefix).concat(_targetSplit[0], "_").concat(_targetSplit[1], "_").concat(name, "__")));
223
177
  });
@@ -237,5 +191,4 @@ var _default = function _default(core, opts) {
237
191
  }
238
192
  }
239
193
  };
240
- };
241
- exports.default = _default;
194
+ };
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "babel-plugin-hylid-bridge",
3
- "version": "2.12.0-alpha.1",
3
+ "version": "2.12.0-alpha.22",
4
4
  "description": "babel-plugin-hylid-bridge",
5
5
  "main": "lib/index.js",
6
6
  "files": [
@@ -16,8 +16,15 @@
16
16
  "@types/lodash": "4.14.182",
17
17
  "chalk": "3.0.0",
18
18
  "fs-extra": "10.1.0",
19
+ "hash-it": "^6.0.0",
19
20
  "lodash": "4.17.21"
20
21
  },
22
+ "devDependencies": {
23
+ "@types/babel-plugin-tester": "^9.0.7",
24
+ "babel-plugin-tester": "^10.1.0",
25
+ "hylid-bridge": "^2.12.0-alpha.22"
26
+ },
21
27
  "sideEffects": false,
22
- "registry": "https://registry.npmjs.org/"
28
+ "registry": "https://registry.npmjs.org/",
29
+ "repository": "https://code.alipay.com/ant-ife/hylid-bridge.git"
23
30
  }
package/CHANGELOG.md DELETED
@@ -1,133 +0,0 @@
1
- # Change Log
2
-
3
- All notable changes to this project will be documented in this file.
4
- See [Conventional Commits](https://conventionalcommits.org) for commit guidelines.
5
-
6
- ## [2.12.0-alpha.1] (2023-07-19)
7
-
8
- **Note:** Version bump only for package babel-plugin-hylid-bridge
9
-
10
-
11
-
12
-
13
-
14
- ## [2.12.0-alpha.0] (2023-07-19)
15
-
16
-
17
- ### Features
18
-
19
- * 升级版本号
20
-
21
-
22
-
23
- ## [2.10.0] (2023-02-22)
24
-
25
- **Note:** Version bump only for package babel-plugin-hylid-bridge
26
-
27
-
28
-
29
-
30
-
31
- ## [2.9.0](https://code.alipay.com/ant-ife/hylid-bridge/compare/v2.9.0-alpha.0...v2.9.0) (2022-11-09)
32
-
33
-
34
- ### Bug Fixes
35
-
36
- * 类型兼容
37
-
38
-
39
- ## [2.9.0-alpha.0](https://code.alipay.com/ant-ife/hylid-bridge/compare/v2.8.0...v2.9.0-alpha.0) (2022-11-09)
40
-
41
-
42
- ### Features
43
-
44
- * 支持 my.call 调用
45
-
46
-
47
- ## [2.4.0](https://code.alipay.com/ant-ife/hylid-bridge/compare/v2.4.0-alpha.4...v2.4.0) (2022-08-18)
48
-
49
- **Note:** Version bump only for package babel-plugin-hylid-bridge
50
-
51
-
52
-
53
-
54
-
55
- ## [2.4.0-alpha.4](https://code.alipay.com/ant-ife/hylid-bridge/compare/v2.1.0...v2.4.0-alpha.4) (2022-08-18)
56
-
57
-
58
- ### Features
59
-
60
- * 避免频繁打印日志* 不修改全局的 my, 新建本地变量* 调整 eslint 配置* 根据源码注入 hylid-bridge 相应模块* 固定三方依赖版本号* 适配 Remix 中会编译所有 node_modules 下模块的逻辑
61
-
62
- ### Bug Fixes
63
-
64
- * 依赖* build error* split the target
65
-
66
-
67
- ## [2.4.0-alpha.3](https://code.alipay.com/ant-ife/hylid-bridge/compare/v2.4.0-alpha.2...v2.4.0-alpha.3) (2022-08-17)
68
-
69
- **Note:** Version bump only for package babel-plugin-hylid-bridge
70
-
71
-
72
-
73
-
74
-
75
- ## [2.4.0-alpha.2](https://code.alipay.com/ant-ife/hylid-bridge/compare/v2.4.0-alpha.1...v2.4.0-alpha.2) (2022-08-16)
76
-
77
-
78
- ### Features
79
-
80
- * 避免频繁打印日志* 适配 Remix 中会编译所有 node_modules 下模块的逻辑
81
-
82
-
83
- ## [2.4.0-alpha.1](https://code.alipay.com/ant-ife/hylid-bridge/compare/v2.4.0-alpha.0...v2.4.0-alpha.1) (2022-08-15)
84
-
85
-
86
- ### Features
87
-
88
- * 不修改全局的 my, 新建本地变量
89
-
90
-
91
- ## [2.4.0-alpha.0](https://code.alipay.com/ant-ife/hylid-bridge/compare/v2.1.0...v2.4.0-alpha.0) (2022-08-12)
92
-
93
-
94
- ### Features
95
-
96
- * 调整 eslint 配置* 根据源码注入 hylid-bridge 相应模块* 固定三方依赖版本号
97
-
98
- ### Bug Fixes
99
-
100
- * 依赖* build error* split the target
101
-
102
-
103
- ## [2.3.0](https://code.alipay.com/ant-ife/hylid-bridge/compare/v2.1.0...v2.3.0) (2022-08-05)
104
-
105
-
106
- ### Features
107
-
108
- * 调整 eslint 配置
109
-
110
- ### Bug Fixes
111
-
112
- * 依赖* build error* split the target
113
-
114
-
115
- ## [2.2.0](https://code.alipay.com/ant-ife/hylid-bridge/compare/v2.1.0...v2.2.0) (2022-07-08)
116
-
117
-
118
- ### Features
119
-
120
- * 调整 eslint 配置
121
-
122
- ### Bug Fixes
123
-
124
- * 依赖* build error* split the target
125
-
126
-
127
- # [2.1.0](https://code.alipay.com/ant-ife/hylid-bridge/compare/v1.1.0...v2.1.0) (2022-04-25)
128
-
129
-
130
- ### Features
131
-
132
- * 接入 babel 插件 ([fdb8885](https://code.alipay.com/ant-ife/hylid-bridge/commits/fdb8885c6d7f16b8fbc528540ff3b397096da60b))
133
- * 统一版本号 ([7539c2f](https://code.alipay.com/ant-ife/hylid-bridge/commits/7539c2f9fa4646fde964b609259e61d5e008c511))