UNPKG

5.03 kBJavaScriptView Raw
1"use strict";
2Object.defineProperty(exports, "__esModule", { value: true });
3var tslib_1 = require("tslib");
4var DEFAULT_PACKAGES_TO_PROCESS = {
5 '@shopify/async': ['createResolver'],
6 '@shopify/react-async': ['createAsyncContext', 'createAsyncComponent'],
7 '@shopify/react-graphql': ['createAsyncQueryComponent'],
8};
9function asyncBabelPlugin(_a) {
10 var t = _a.types;
11 return {
12 visitor: {
13 Program: function (_path, state) {
14 state.processPackages = new Map(Object.entries((state.opts && state.opts.packages) || DEFAULT_PACKAGES_TO_PROCESS));
15 },
16 ImportDeclaration: function (path, state) {
17 var e_1, _a;
18 var processPackages = state.processPackages;
19 if (!(processPackages instanceof Map)) {
20 return;
21 }
22 var source = path.node.source.value;
23 var processImports = processPackages.get(source) || [];
24 if (processImports.length === 0) {
25 return;
26 }
27 var importSpecifiersToProcess = path
28 .get('specifiers')
29 .filter(function (specifier) {
30 return (specifier.isImportSpecifier() &&
31 processImports.some(function (name) {
32 return specifier.get('imported').isIdentifier({ name: name });
33 }));
34 });
35 if (importSpecifiersToProcess.length === 0) {
36 return;
37 }
38 try {
39 for (var importSpecifiersToProcess_1 = tslib_1.__values(importSpecifiersToProcess), importSpecifiersToProcess_1_1 = importSpecifiersToProcess_1.next(); !importSpecifiersToProcess_1_1.done; importSpecifiersToProcess_1_1 = importSpecifiersToProcess_1.next()) {
40 var importSpecifier = importSpecifiersToProcess_1_1.value;
41 var bindingName = importSpecifier.node.local.name;
42 var binding = path.scope.getBinding(bindingName);
43 if (binding != null) {
44 addIdOption(binding, t, state.opts);
45 }
46 }
47 }
48 catch (e_1_1) { e_1 = { error: e_1_1 }; }
49 finally {
50 try {
51 if (importSpecifiersToProcess_1_1 && !importSpecifiersToProcess_1_1.done && (_a = importSpecifiersToProcess_1.return)) _a.call(importSpecifiersToProcess_1);
52 }
53 finally { if (e_1) throw e_1.error; }
54 }
55 },
56 },
57 };
58}
59exports.default = asyncBabelPlugin;
60function addIdOption(binding, t, _a) {
61 var _b = (_a === void 0 ? {} : _a).webpack, webpack = _b === void 0 ? true : _b;
62 binding.referencePaths.forEach(function (refPath) {
63 var callExpression = refPath.parentPath;
64 if (!callExpression.isCallExpression()) {
65 return;
66 }
67 var args = callExpression.get('arguments');
68 if (args.length === 0) {
69 return;
70 }
71 var options = args[0];
72 if (!options.isObjectExpression()) {
73 return;
74 }
75 var properties = options.get('properties');
76 var propertiesMap = {};
77 properties.forEach(function (property) {
78 if (!property.isObjectMember() || property.node.computed) {
79 return;
80 }
81 var key = property.get('key');
82 if (!key.isIdentifier()) {
83 return;
84 }
85 propertiesMap[key.node.name] = property;
86 });
87 var id = propertiesMap.id, loadProperty = propertiesMap.load;
88 if (id != null || loadProperty == null) {
89 return;
90 }
91 var loaderMethod = loadProperty.isObjectProperty()
92 ? loadProperty.get('value')
93 : loadProperty.get('body');
94 var dynamicImports = [];
95 if (!Array.isArray(loaderMethod)) {
96 loaderMethod.traverse({
97 Import: function (_a) {
98 var parentPath = _a.parentPath;
99 if (parentPath.isCallExpression()) {
100 dynamicImports.push(parentPath);
101 }
102 },
103 });
104 }
105 if (!dynamicImports.length) {
106 return;
107 }
108 if (webpack) {
109 loadProperty.insertAfter(t.objectProperty(t.identifier('id'), t.arrowFunctionExpression([], t.callExpression(t.memberExpression(t.identifier('require'), t.identifier('resolveWeak')), [dynamicImports[0].get('arguments')[0].node]))));
110 }
111 else {
112 propertiesMap.load.insertAfter(t.objectProperty(t.identifier('id'), t.arrowFunctionExpression([], t.callExpression(t.memberExpression(t.identifier('require'), t.identifier('resolve')), [dynamicImports[0].get('arguments')[0].node]))));
113 }
114 });
115}