wasm-ast-types 0.23.0 → 0.24.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (38) hide show
  1. package/main/context/context.js +49 -5
  2. package/main/context/imports.js +42 -7
  3. package/main/index.js +13 -0
  4. package/main/provider/index.js +18 -0
  5. package/main/provider/provider.js +98 -0
  6. package/main/provider/provider.spec.js +63 -0
  7. package/main/utils/constants.js +9 -2
  8. package/main/utils/index.js +8 -1
  9. package/module/context/context.js +38 -4
  10. package/module/context/imports.js +35 -5
  11. package/module/index.js +2 -1
  12. package/module/provider/index.js +1 -0
  13. package/module/provider/provider.js +53 -0
  14. package/module/provider/provider.spec.js +58 -0
  15. package/module/utils/constants.js +7 -1
  16. package/module/utils/index.js +2 -1
  17. package/package.json +2 -2
  18. package/src/context/context.ts +59 -4
  19. package/src/context/imports.ts +84 -49
  20. package/src/index.ts +1 -0
  21. package/src/provider/__snapshots__/provider.spec.ts.snap +49 -0
  22. package/src/provider/index.ts +1 -0
  23. package/src/provider/provider.spec.ts +81 -0
  24. package/src/provider/provider.ts +237 -0
  25. package/src/react-query/react-query.ts +3 -3
  26. package/src/utils/constants.ts +7 -0
  27. package/src/utils/index.ts +1 -0
  28. package/types/client/client.d.ts +1 -3
  29. package/types/context/context.d.ts +34 -4
  30. package/types/context/imports.d.ts +3 -1
  31. package/types/index.d.ts +1 -0
  32. package/types/msg-builder/msg-builder.d.ts +3 -3
  33. package/types/provider/index.d.ts +1 -0
  34. package/types/provider/provider.d.ts +18 -0
  35. package/types/utils/babel.d.ts +1 -6
  36. package/types/utils/constants.d.ts +11 -0
  37. package/types/utils/index.d.ts +3 -0
  38. package/types/utils/types.d.ts +2 -7
@@ -5,7 +5,7 @@ var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefau
5
5
  Object.defineProperty(exports, "__esModule", {
6
6
  value: true
7
7
  });
8
- exports.getDefinitionSchema = exports.defaultOptions = exports.RenderContextBase = exports.RenderContext = void 0;
8
+ exports.getDefinitionSchema = exports.defaultOptions = exports.RenderContextBase = exports.RenderContext = exports.BuilderContext = void 0;
9
9
 
10
10
  var _inherits2 = _interopRequireDefault(require("@babel/runtime/helpers/inherits"));
11
11
 
@@ -25,6 +25,8 @@ var _imports = require("./imports");
25
25
 
26
26
  var _deepmerge = _interopRequireDefault(require("deepmerge"));
27
27
 
28
+ var _path = require("path");
29
+
28
30
  function _createSuper(Derived) { var hasNativeReflectConstruct = _isNativeReflectConstruct(); return function _createSuperInternal() { var Super = (0, _getPrototypeOf2["default"])(Derived), result; if (hasNativeReflectConstruct) { var NewTarget = (0, _getPrototypeOf2["default"])(this).constructor; result = Reflect.construct(Super, arguments, NewTarget); } else { result = Super.apply(this, arguments); } return (0, _possibleConstructorReturn2["default"])(this, result); }; }
29
31
 
30
32
  function _isNativeReflectConstruct() { if (typeof Reflect === "undefined" || !Reflect.construct) return false; if (Reflect.construct.sham) return false; if (typeof Proxy === "function") return true; try { Boolean.prototype.valueOf.call(Reflect.construct(Boolean, [], function () {})); return true; } catch (e) { return false; } }
@@ -76,6 +78,36 @@ var getDefinitionSchema = function getDefinitionSchema(schemas) {
76
78
  });
77
79
  return aggregateSchema;
78
80
  };
81
+
82
+ exports.getDefinitionSchema = getDefinitionSchema;
83
+
84
+ var BuilderContext = /*#__PURE__*/function () {
85
+ function BuilderContext() {
86
+ (0, _classCallCheck2["default"])(this, BuilderContext);
87
+ (0, _defineProperty2["default"])(this, "providers", {});
88
+ }
89
+
90
+ (0, _createClass2["default"])(BuilderContext, [{
91
+ key: "addProviderInfo",
92
+ value: function addProviderInfo(contractName, type, classname, filename) {
93
+ if (!this.providers[contractName]) {
94
+ this.providers[contractName] = {};
95
+ }
96
+
97
+ this.providers[contractName][type] = {
98
+ classname: classname,
99
+ filename: filename,
100
+ basename: (0, _path.basename)(filename, (0, _path.extname)(filename))
101
+ };
102
+ }
103
+ }, {
104
+ key: "getProviderInfos",
105
+ value: function getProviderInfos() {
106
+ return this.providers;
107
+ }
108
+ }]);
109
+ return BuilderContext;
110
+ }();
79
111
  /**
80
112
  * context object for generating code.
81
113
  * only mergeDefaultOpt needs to implementing for combine options and default options.
@@ -83,11 +115,12 @@ var getDefinitionSchema = function getDefinitionSchema(schemas) {
83
115
  */
84
116
 
85
117
 
86
- exports.getDefinitionSchema = getDefinitionSchema;
118
+ exports.BuilderContext = BuilderContext;
87
119
 
88
120
  var RenderContextBase = /*#__PURE__*/function () {
89
- function RenderContextBase(contract, options) {
121
+ function RenderContextBase(contract, options, builderContext) {
90
122
  (0, _classCallCheck2["default"])(this, RenderContextBase);
123
+ (0, _defineProperty2["default"])(this, "builderContext", void 0);
91
124
  (0, _defineProperty2["default"])(this, "contract", void 0);
92
125
  (0, _defineProperty2["default"])(this, "utils", []);
93
126
  (0, _defineProperty2["default"])(this, "schema", void 0);
@@ -95,6 +128,7 @@ var RenderContextBase = /*#__PURE__*/function () {
95
128
  this.contract = contract;
96
129
  this.schema = getDefinitionSchema(contract.schemas);
97
130
  this.options = this.mergeDefaultOpt(options);
131
+ this.builderContext = builderContext;
98
132
  }
99
133
  /**
100
134
  * merge options and default options
@@ -112,10 +146,20 @@ var RenderContextBase = /*#__PURE__*/function () {
112
146
  value: function addUtil(util) {
113
147
  this.utils[util] = true;
114
148
  }
149
+ }, {
150
+ key: "addProviderInfo",
151
+ value: function addProviderInfo(contractName, type, classname, filename) {
152
+ this.builderContext.addProviderInfo(contractName, type, classname, filename);
153
+ }
154
+ }, {
155
+ key: "getProviderInfos",
156
+ value: function getProviderInfos() {
157
+ return this.builderContext.providers;
158
+ }
115
159
  }, {
116
160
  key: "getImports",
117
- value: function getImports(registeredUtils) {
118
- return (0, _imports.getImportStatements)((0, _imports.convertUtilsToImportList)(this, Object.keys(this.utils), registeredUtils));
161
+ value: function getImports(registeredUtils, filepath) {
162
+ return (0, _imports.getImportStatements)((0, _imports.convertUtilsToImportList)(this, Object.keys(this.utils), registeredUtils), filepath);
119
163
  }
120
164
  }]);
121
165
  return RenderContextBase;
@@ -7,18 +7,26 @@ var _typeof = require("@babel/runtime/helpers/typeof");
7
7
  Object.defineProperty(exports, "__esModule", {
8
8
  value: true
9
9
  });
10
- exports.getImportStatements = exports.convertUtilsToImportList = exports.convertUtil = exports.UTILS = void 0;
10
+ exports.getRelativePath = exports.getImportStatements = exports.convertUtilsToImportList = exports.convertUtil = exports.UTIL_HELPERS = exports.UTILS = void 0;
11
11
 
12
12
  var _slicedToArray2 = _interopRequireDefault(require("@babel/runtime/helpers/slicedToArray"));
13
13
 
14
+ var _defineProperty2 = _interopRequireDefault(require("@babel/runtime/helpers/defineProperty"));
15
+
14
16
  var t = _interopRequireWildcard(require("@babel/types"));
15
17
 
16
18
  var _utils = require("../utils");
17
19
 
20
+ var _path = require("path");
21
+
18
22
  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); }
19
23
 
20
24
  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; }
21
25
 
26
+ function ownKeys(object, enumerableOnly) { var keys = Object.keys(object); if (Object.getOwnPropertySymbols) { var symbols = Object.getOwnPropertySymbols(object); enumerableOnly && (symbols = symbols.filter(function (sym) { return Object.getOwnPropertyDescriptor(object, sym).enumerable; })), keys.push.apply(keys, symbols); } return keys; }
27
+
28
+ function _objectSpread(target) { for (var i = 1; i < arguments.length; i++) { var source = null != arguments[i] ? arguments[i] : {}; i % 2 ? ownKeys(Object(source), !0).forEach(function (key) { (0, _defineProperty2["default"])(target, key, source[key]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(target, Object.getOwnPropertyDescriptors(source)) : ownKeys(Object(source)).forEach(function (key) { Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key)); }); } return target; }
29
+
22
30
  var makeReactQuerySwitch = function makeReactQuerySwitch(varName) {
23
31
  return function (context) {
24
32
  switch (context.options.reactQuery.version) {
@@ -57,6 +65,8 @@ var UTILS = {
57
65
  UseMutationOptions: makeReactQuerySwitch('UseMutationOptions')
58
66
  };
59
67
  exports.UTILS = UTILS;
68
+ var UTIL_HELPERS = ['__contractContextBase__'];
69
+ exports.UTIL_HELPERS = UTIL_HELPERS;
60
70
 
61
71
  var convertUtilsToImportList = function convertUtilsToImportList(context, utils, registeredUtils) {
62
72
  return utils.map(function (util) {
@@ -96,22 +106,38 @@ var convertUtil = function convertUtil(context, util, registeredUtils) {
96
106
  } else {
97
107
  return registeredUtils[util];
98
108
  }
99
- };
109
+ }; // __helpers__
110
+
100
111
 
101
112
  exports.convertUtil = convertUtil;
102
113
 
103
- var getImportStatements = function getImportStatements(list) {
104
- var imports = list.reduce(function (m, obj) {
114
+ var getImportStatements = function getImportStatements(list, filepath) {
115
+ // swap helpers with helpers file...
116
+ var modifiedImports = list.map(function (imp) {
117
+ if (filepath && UTIL_HELPERS.includes(imp.path)) {
118
+ var name = imp.path.replace(/__/g, '');
119
+ return _objectSpread(_objectSpread({}, imp), {}, {
120
+ path: getRelativePath(filepath, "./".concat(name))
121
+ });
122
+ }
123
+
124
+ return imp;
125
+ });
126
+ var imports = modifiedImports.reduce(function (m, obj) {
105
127
  m[obj.path] = m[obj.path] || [];
106
128
  var exists = m[obj.path].find(function (el) {
107
129
  return el.type === obj.type && el.path === obj.path && el.name === obj.name;
108
- }); // TODO some have google.protobuf.Any shows up... figure out the better way to handle this
130
+ }); // MARKED AS NOT DRY [google.protobuf names]
131
+ // TODO some have google.protobuf.Any shows up... figure out the better way to handle this
109
132
 
110
133
  if (/\./.test(obj.name)) {
111
134
  obj.name = obj.name.split('.')[obj.name.split('.').length - 1];
112
135
  }
113
136
 
114
- if (!exists) m[obj.path].push(obj);
137
+ if (!exists) {
138
+ m[obj.path].push(obj);
139
+ }
140
+
115
141
  return m;
116
142
  }, {});
117
143
  return Object.entries(imports).reduce(function (m, _ref) {
@@ -157,4 +183,13 @@ var getImportStatements = function getImportStatements(list) {
157
183
  }, []);
158
184
  };
159
185
 
160
- exports.getImportStatements = getImportStatements;
186
+ exports.getImportStatements = getImportStatements;
187
+
188
+ var getRelativePath = function getRelativePath(f1, f2) {
189
+ var rel = (0, _path.relative)((0, _path.dirname)(f1), f2);
190
+ var importPath = rel.replace((0, _path.extname)(rel), '');
191
+ if (!/^\./.test(importPath)) importPath = "./".concat(importPath);
192
+ return importPath;
193
+ };
194
+
195
+ exports.getRelativePath = getRelativePath;
package/main/index.js CHANGED
@@ -106,4 +106,17 @@ Object.keys(_msgBuilder).forEach(function (key) {
106
106
  return _msgBuilder[key];
107
107
  }
108
108
  });
109
+ });
110
+
111
+ var _provider = require("./provider");
112
+
113
+ Object.keys(_provider).forEach(function (key) {
114
+ if (key === "default" || key === "__esModule") return;
115
+ if (key in exports && exports[key] === _provider[key]) return;
116
+ Object.defineProperty(exports, key, {
117
+ enumerable: true,
118
+ get: function get() {
119
+ return _provider[key];
120
+ }
121
+ });
109
122
  });
@@ -0,0 +1,18 @@
1
+ "use strict";
2
+
3
+ Object.defineProperty(exports, "__esModule", {
4
+ value: true
5
+ });
6
+
7
+ var _provider = require("./provider");
8
+
9
+ Object.keys(_provider).forEach(function (key) {
10
+ if (key === "default" || key === "__esModule") return;
11
+ if (key in exports && exports[key] === _provider[key]) return;
12
+ Object.defineProperty(exports, key, {
13
+ enumerable: true,
14
+ get: function get() {
15
+ return _provider[key];
16
+ }
17
+ });
18
+ });
@@ -0,0 +1,98 @@
1
+ "use strict";
2
+
3
+ var _typeof = require("@babel/runtime/helpers/typeof");
4
+
5
+ Object.defineProperty(exports, "__esModule", {
6
+ value: true
7
+ });
8
+ exports.createProvider = exports.createProperty = exports.createIContractsContext = exports.createGettingProviders = void 0;
9
+
10
+ var t = _interopRequireWildcard(require("@babel/types"));
11
+
12
+ var _case = require("case");
13
+
14
+ var _constants = require("../utils/constants");
15
+
16
+ var _utils = require("../utils");
17
+
18
+ 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); }
19
+
20
+ 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; }
21
+
22
+ function _createForOfIteratorHelper(o, allowArrayLike) { var it = typeof Symbol !== "undefined" && o[Symbol.iterator] || o["@@iterator"]; if (!it) { if (Array.isArray(o) || (it = _unsupportedIterableToArray(o)) || allowArrayLike && o && typeof o.length === "number") { if (it) o = it; var i = 0; var F = function F() {}; return { s: F, n: function n() { if (i >= o.length) return { done: true }; return { done: false, value: o[i++] }; }, e: function e(_e) { throw _e; }, f: F }; } throw new TypeError("Invalid attempt to iterate non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method."); } var normalCompletion = true, didErr = false, err; return { s: function s() { it = it.call(o); }, n: function n() { var step = it.next(); normalCompletion = step.done; return step; }, e: function e(_e2) { didErr = true; err = _e2; }, f: function f() { try { if (!normalCompletion && it["return"] != null) it["return"](); } finally { if (didErr) throw err; } } }; }
23
+
24
+ function _unsupportedIterableToArray(o, minLen) { if (!o) return; if (typeof o === "string") return _arrayLikeToArray(o, minLen); var n = Object.prototype.toString.call(o).slice(8, -1); if (n === "Object" && o.constructor) n = o.constructor.name; if (n === "Map" || n === "Set") return Array.from(o); if (n === "Arguments" || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)) return _arrayLikeToArray(o, minLen); }
25
+
26
+ function _arrayLikeToArray(arr, len) { if (len == null || len > arr.length) len = arr.length; for (var i = 0, arr2 = new Array(len); i < len; i++) { arr2[i] = arr[i]; } return arr2; }
27
+
28
+ var createProvider = function createProvider(name, providerInfos) {
29
+ var classDeclaration = t.classDeclaration(t.identifier(name), t.identifier("ContractBase"), t.classBody([t.classMethod("constructor", t.identifier("constructor"), [(0, _utils.tsObjectPattern)([t.objectProperty(t.identifier("address"), t.identifier("address"), false, true), t.objectProperty(t.identifier("cosmWasmClient"), t.identifier("cosmWasmClient"), false, true), t.objectProperty(t.identifier("signingCosmWasmClient"), t.identifier("signingCosmWasmClient"), false, true)], t.tsTypeAnnotation(t.tsTypeReference(t.identifier("IContractConstructor"))))], t.blockStatement([t.expressionStatement(t.callExpression(t["super"](), [t.identifier("address"), t.identifier("cosmWasmClient"), t.identifier("signingCosmWasmClient"), t.identifier(providerInfos[_constants.PROVIDER_TYPES.SIGNING_CLIENT_TYPE] ? providerInfos[_constants.PROVIDER_TYPES.SIGNING_CLIENT_TYPE].classname : "undefined"), t.identifier(providerInfos[_constants.PROVIDER_TYPES.QUERY_CLIENT_TYPE] ? providerInfos[_constants.PROVIDER_TYPES.QUERY_CLIENT_TYPE].classname : "undefined"), t.identifier(providerInfos[_constants.PROVIDER_TYPES.MESSAGE_COMPOSER_TYPE] ? providerInfos[_constants.PROVIDER_TYPES.MESSAGE_COMPOSER_TYPE].classname : "undefined")]))]))]));
30
+ classDeclaration.superTypeParameters = t.tsTypeParameterInstantiation([t.tsTypeReference(t.identifier(providerInfos[_constants.PROVIDER_TYPES.SIGNING_CLIENT_TYPE] ? providerInfos[_constants.PROVIDER_TYPES.SIGNING_CLIENT_TYPE].classname : "IEmptyClient")), t.tsTypeReference(t.identifier(providerInfos[_constants.PROVIDER_TYPES.QUERY_CLIENT_TYPE] ? providerInfos[_constants.PROVIDER_TYPES.QUERY_CLIENT_TYPE].classname : "IEmptyClient")), t.tsTypeReference(t.identifier(providerInfos[_constants.PROVIDER_TYPES.MESSAGE_COMPOSER_TYPE] ? providerInfos[_constants.PROVIDER_TYPES.MESSAGE_COMPOSER_TYPE].classname : "IEmptyClient"))]);
31
+ return t.exportNamedDeclaration(classDeclaration);
32
+ };
33
+
34
+ exports.createProvider = createProvider;
35
+
36
+ var createIContractsContext = function createIContractsContext(providerInfos) {
37
+ var properties = [];
38
+
39
+ for (var _key in providerInfos) {
40
+ if (Object.prototype.hasOwnProperty.call(providerInfos, _key)) {
41
+ var contractProviderInfo = providerInfos[_key];
42
+ properties.push(createProperty(_key, contractProviderInfo));
43
+ }
44
+ }
45
+
46
+ return t.exportNamedDeclaration(t.tsInterfaceDeclaration(t.identifier("IContractsContext"), null, null, t.tsInterfaceBody(properties)));
47
+ };
48
+
49
+ exports.createIContractsContext = createIContractsContext;
50
+ var PROVIDER_MAPPING = {};
51
+ PROVIDER_MAPPING[_constants.PROVIDER_TYPES.SIGNING_CLIENT_TYPE] = "ISigningClientProvider";
52
+ PROVIDER_MAPPING[_constants.PROVIDER_TYPES.QUERY_CLIENT_TYPE] = "IQueryClientProvider";
53
+ PROVIDER_MAPPING[_constants.PROVIDER_TYPES.MESSAGE_COMPOSER_TYPE] = "IMessageComposerProvider";
54
+
55
+ var createProperty = function createProperty(name, providerInfos) {
56
+ var typeAnnotation = null;
57
+ var keys = Object.keys(providerInfos);
58
+
59
+ if ((keys === null || keys === void 0 ? void 0 : keys.length) == 1) {
60
+ var _key2 = keys[0];
61
+ typeAnnotation = t.tsTypeAnnotation(t.tsTypeReference(t.identifier(PROVIDER_MAPPING[_key2]), t.tsTypeParameterInstantiation([t.tsTypeReference(t.identifier(providerInfos[_key2].classname))])));
62
+ } else {
63
+ var typeRefs = [];
64
+
65
+ var _iterator = _createForOfIteratorHelper(keys),
66
+ _step;
67
+
68
+ try {
69
+ for (_iterator.s(); !(_step = _iterator.n()).done;) {
70
+ var _key3 = _step.value;
71
+ typeRefs.push(t.tsTypeReference(t.identifier(PROVIDER_MAPPING[_key3]), t.tsTypeParameterInstantiation([t.tsTypeReference(t.identifier(providerInfos[_key3].classname))])));
72
+ }
73
+ } catch (err) {
74
+ _iterator.e(err);
75
+ } finally {
76
+ _iterator.f();
77
+ }
78
+
79
+ typeAnnotation = t.tsTypeAnnotation(t.tsIntersectionType(typeRefs));
80
+ }
81
+
82
+ return t.tsPropertySignature(t.identifier((0, _case.camel)(name)), typeAnnotation);
83
+ };
84
+
85
+ exports.createProperty = createProperty;
86
+
87
+ var createGettingProviders = function createGettingProviders(providerInfos) {
88
+ var properties = [];
89
+
90
+ for (var _i = 0, _Object$keys = Object.keys(providerInfos); _i < _Object$keys.length; _i++) {
91
+ var _key4 = _Object$keys[_i];
92
+ properties.push(t.objectProperty(t.identifier((0, _case.camel)(_key4)), t.newExpression(t.identifier((0, _case.pascal)(_key4)), [t.objectExpression([t.objectProperty(t.identifier("address"), t.identifier("address"), false, true), t.objectProperty(t.identifier("cosmWasmClient"), t.identifier("cosmWasmClient"), false, true), t.objectProperty(t.identifier("signingCosmWasmClient"), t.identifier("signingCosmWasmClient"), false, true)])])));
93
+ }
94
+
95
+ return t.exportNamedDeclaration(t.variableDeclaration("const", [t.variableDeclarator(t.identifier("getProviders"), t.arrowFunctionExpression([(0, _utils.identifier)("address?", t.tsTypeAnnotation(t.tsTypeReference(t.identifier("string")))), (0, _utils.identifier)("cosmWasmClient?", t.tsTypeAnnotation(t.tsTypeReference(t.identifier("CosmWasmClient")))), (0, _utils.identifier)("signingCosmWasmClient?", t.tsTypeAnnotation(t.tsTypeReference(t.identifier("SigningCosmWasmClient"))))], t.objectExpression(properties)))]));
96
+ };
97
+
98
+ exports.createGettingProviders = createGettingProviders;
@@ -0,0 +1,63 @@
1
+ "use strict";
2
+
3
+ var _provider = require("./provider");
4
+
5
+ var _testUtils = require("../../test-utils");
6
+
7
+ var _constants = require("../utils/constants");
8
+
9
+ it("execute class", function () {
10
+ var info = {};
11
+ info[_constants.PROVIDER_TYPES.SIGNING_CLIENT_TYPE] = {
12
+ classname: "WhitelistClient"
13
+ };
14
+ info[_constants.PROVIDER_TYPES.QUERY_CLIENT_TYPE] = {
15
+ classname: "WhitelistQueryClient"
16
+ };
17
+ info[_constants.PROVIDER_TYPES.MESSAGE_COMPOSER_TYPE] = {
18
+ classname: "WhitelistMessageComposer"
19
+ };
20
+ (0, _testUtils.expectCode)((0, _provider.createProvider)("Whitelist", info));
21
+ });
22
+ it("execute class without message composer", function () {
23
+ var info = {};
24
+ info[_constants.PROVIDER_TYPES.SIGNING_CLIENT_TYPE] = {
25
+ classname: "WhitelistClient"
26
+ };
27
+ info[_constants.PROVIDER_TYPES.QUERY_CLIENT_TYPE] = {
28
+ classname: "WhitelistQueryClient"
29
+ };
30
+ (0, _testUtils.expectCode)((0, _provider.createProvider)("Whitelist", info));
31
+ });
32
+ it("create IContractsContext", function () {
33
+ var info = {
34
+ Whitelist: {},
35
+ Marketplace: {}
36
+ };
37
+ info["Whitelist"][_constants.PROVIDER_TYPES.SIGNING_CLIENT_TYPE] = {
38
+ classname: "WhitelistClient"
39
+ };
40
+ info["Whitelist"][_constants.PROVIDER_TYPES.QUERY_CLIENT_TYPE] = {
41
+ classname: "WhitelistQueryClient"
42
+ };
43
+ info["Marketplace"][_constants.PROVIDER_TYPES.SIGNING_CLIENT_TYPE] = {
44
+ classname: "MarketplaceClient"
45
+ };
46
+ (0, _testUtils.expectCode)((0, _provider.createIContractsContext)(info));
47
+ });
48
+ it("create getProviders", function () {
49
+ var info = {
50
+ Whitelist: {},
51
+ Marketplace: {}
52
+ };
53
+ info["Whitelist"][_constants.PROVIDER_TYPES.SIGNING_CLIENT_TYPE] = {
54
+ classname: "WhitelistClient"
55
+ };
56
+ info["Whitelist"][_constants.PROVIDER_TYPES.QUERY_CLIENT_TYPE] = {
57
+ classname: "WhitelistQueryClient"
58
+ };
59
+ info["Marketplace"][_constants.PROVIDER_TYPES.SIGNING_CLIENT_TYPE] = {
60
+ classname: "MarketplaceClient"
61
+ };
62
+ (0, _testUtils.expectCode)((0, _provider.createGettingProviders)(info));
63
+ });
@@ -5,7 +5,7 @@ var _typeof = require("@babel/runtime/helpers/typeof");
5
5
  Object.defineProperty(exports, "__esModule", {
6
6
  value: true
7
7
  });
8
- exports.OPTIONAL_MEMO_PARAM = exports.OPTIONAL_FUNDS_PARAM = exports.OPTIONAL_FEE_PARAM = exports.FIXED_EXECUTE_PARAMS = void 0;
8
+ exports.PROVIDER_TYPES = exports.OPTIONAL_MEMO_PARAM = exports.OPTIONAL_FUNDS_PARAM = exports.OPTIONAL_FEE_PARAM = exports.FIXED_EXECUTE_PARAMS = void 0;
9
9
 
10
10
  var _babel = require("./babel");
11
11
 
@@ -22,4 +22,11 @@ exports.OPTIONAL_FEE_PARAM = OPTIONAL_FEE_PARAM;
22
22
  var OPTIONAL_MEMO_PARAM = (0, _babel.identifier)('memo', t.tsTypeAnnotation(t.tsStringKeyword()), true);
23
23
  exports.OPTIONAL_MEMO_PARAM = OPTIONAL_MEMO_PARAM;
24
24
  var FIXED_EXECUTE_PARAMS = [OPTIONAL_FEE_PARAM, OPTIONAL_MEMO_PARAM, OPTIONAL_FUNDS_PARAM];
25
- exports.FIXED_EXECUTE_PARAMS = FIXED_EXECUTE_PARAMS;
25
+ exports.FIXED_EXECUTE_PARAMS = FIXED_EXECUTE_PARAMS;
26
+ var PROVIDER_TYPES = {
27
+ SIGNING_CLIENT_TYPE: "client",
28
+ QUERY_CLIENT_TYPE: "queryClient",
29
+ MESSAGE_COMPOSER_TYPE: 'message-composer',
30
+ PROVIDER_TYPE: 'provider'
31
+ };
32
+ exports.PROVIDER_TYPES = PROVIDER_TYPES;
@@ -5,7 +5,8 @@ Object.defineProperty(exports, "__esModule", {
5
5
  });
6
6
  var _exportNames = {
7
7
  OPTIONAL_FUNDS_PARAM: true,
8
- FIXED_EXECUTE_PARAMS: true
8
+ FIXED_EXECUTE_PARAMS: true,
9
+ PROVIDER_TYPES: true
9
10
  };
10
11
  Object.defineProperty(exports, "FIXED_EXECUTE_PARAMS", {
11
12
  enumerable: true,
@@ -19,6 +20,12 @@ Object.defineProperty(exports, "OPTIONAL_FUNDS_PARAM", {
19
20
  return _constants.OPTIONAL_FUNDS_PARAM;
20
21
  }
21
22
  });
23
+ Object.defineProperty(exports, "PROVIDER_TYPES", {
24
+ enumerable: true,
25
+ get: function get() {
26
+ return _constants.PROVIDER_TYPES;
27
+ }
28
+ });
22
29
 
23
30
  var _babel = require("./babel");
24
31
 
@@ -6,7 +6,8 @@ function _objectSpread(target) { for (var i = 1; i < arguments.length; i++) { va
6
6
 
7
7
  import { refLookup } from "../utils";
8
8
  import { convertUtilsToImportList, getImportStatements } from "./imports";
9
- import deepmerge from "deepmerge"; /// Plugin Types
9
+ import deepmerge from "deepmerge";
10
+ import { basename, extname } from 'path'; /// Plugin Types
10
11
 
11
12
  ;
12
13
  export const defaultOptions = {
@@ -49,6 +50,28 @@ export const getDefinitionSchema = schemas => {
49
50
  });
50
51
  return aggregateSchema;
51
52
  };
53
+ export class BuilderContext {
54
+ constructor() {
55
+ _defineProperty(this, "providers", {});
56
+ }
57
+
58
+ addProviderInfo(contractName, type, classname, filename) {
59
+ if (!this.providers[contractName]) {
60
+ this.providers[contractName] = {};
61
+ }
62
+
63
+ this.providers[contractName][type] = {
64
+ classname,
65
+ filename,
66
+ basename: basename(filename, extname(filename))
67
+ };
68
+ }
69
+
70
+ getProviderInfos() {
71
+ return this.providers;
72
+ }
73
+
74
+ }
52
75
  /**
53
76
  * context object for generating code.
54
77
  * only mergeDefaultOpt needs to implementing for combine options and default options.
@@ -56,7 +79,9 @@ export const getDefinitionSchema = schemas => {
56
79
  */
57
80
 
58
81
  export class RenderContextBase {
59
- constructor(contract, options) {
82
+ constructor(contract, options, builderContext) {
83
+ _defineProperty(this, "builderContext", void 0);
84
+
60
85
  _defineProperty(this, "contract", void 0);
61
86
 
62
87
  _defineProperty(this, "utils", []);
@@ -68,6 +93,7 @@ export class RenderContextBase {
68
93
  this.contract = contract;
69
94
  this.schema = getDefinitionSchema(contract.schemas);
70
95
  this.options = this.mergeDefaultOpt(options);
96
+ this.builderContext = builderContext;
71
97
  }
72
98
  /**
73
99
  * merge options and default options
@@ -83,8 +109,16 @@ export class RenderContextBase {
83
109
  this.utils[util] = true;
84
110
  }
85
111
 
86
- getImports(registeredUtils) {
87
- return getImportStatements(convertUtilsToImportList(this, Object.keys(this.utils), registeredUtils));
112
+ addProviderInfo(contractName, type, classname, filename) {
113
+ this.builderContext.addProviderInfo(contractName, type, classname, filename);
114
+ }
115
+
116
+ getProviderInfos() {
117
+ return this.builderContext.providers;
118
+ }
119
+
120
+ getImports(registeredUtils, filepath) {
121
+ return getImportStatements(convertUtilsToImportList(this, Object.keys(this.utils), registeredUtils), filepath);
88
122
  }
89
123
 
90
124
  }
@@ -1,5 +1,12 @@
1
+ import _defineProperty from "@babel/runtime/helpers/esm/defineProperty";
2
+
3
+ function ownKeys(object, enumerableOnly) { var keys = Object.keys(object); if (Object.getOwnPropertySymbols) { var symbols = Object.getOwnPropertySymbols(object); enumerableOnly && (symbols = symbols.filter(function (sym) { return Object.getOwnPropertyDescriptor(object, sym).enumerable; })), keys.push.apply(keys, symbols); } return keys; }
4
+
5
+ function _objectSpread(target) { for (var i = 1; i < arguments.length; i++) { var source = null != arguments[i] ? arguments[i] : {}; i % 2 ? ownKeys(Object(source), !0).forEach(function (key) { _defineProperty(target, key, source[key]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(target, Object.getOwnPropertyDescriptors(source)) : ownKeys(Object(source)).forEach(function (key) { Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key)); }); } return target; }
6
+
1
7
  import * as t from '@babel/types';
2
8
  import { importAs, importStmt } from "../utils";
9
+ import { relative, dirname, extname } from 'path';
3
10
 
4
11
  const makeReactQuerySwitch = varName => {
5
12
  return context => {
@@ -38,6 +45,7 @@ export const UTILS = {
38
45
  useMutation: makeReactQuerySwitch('useMutation'),
39
46
  UseMutationOptions: makeReactQuerySwitch('UseMutationOptions')
40
47
  };
48
+ export const UTIL_HELPERS = ['__contractContextBase__'];
41
49
  export const convertUtilsToImportList = (context, utils, registeredUtils) => {
42
50
  return utils.map(util => {
43
51
  let result = null;
@@ -73,17 +81,33 @@ export const convertUtil = (context, util, registeredUtils) => {
73
81
  } else {
74
82
  return registeredUtils[util];
75
83
  }
76
- };
77
- export const getImportStatements = list => {
78
- const imports = list.reduce((m, obj) => {
84
+ }; // __helpers__
85
+
86
+ export const getImportStatements = (list, filepath) => {
87
+ // swap helpers with helpers file...
88
+ const modifiedImports = list.map(imp => {
89
+ if (filepath && UTIL_HELPERS.includes(imp.path)) {
90
+ const name = imp.path.replace(/__/g, '');
91
+ return _objectSpread(_objectSpread({}, imp), {}, {
92
+ path: getRelativePath(filepath, `./${name}`)
93
+ });
94
+ }
95
+
96
+ return imp;
97
+ });
98
+ const imports = modifiedImports.reduce((m, obj) => {
79
99
  m[obj.path] = m[obj.path] || [];
80
- const exists = m[obj.path].find(el => el.type === obj.type && el.path === obj.path && el.name === obj.name); // TODO some have google.protobuf.Any shows up... figure out the better way to handle this
100
+ const exists = m[obj.path].find(el => el.type === obj.type && el.path === obj.path && el.name === obj.name); // MARKED AS NOT DRY [google.protobuf names]
101
+ // TODO some have google.protobuf.Any shows up... figure out the better way to handle this
81
102
 
82
103
  if (/\./.test(obj.name)) {
83
104
  obj.name = obj.name.split('.')[obj.name.split('.').length - 1];
84
105
  }
85
106
 
86
- if (!exists) m[obj.path].push(obj);
107
+ if (!exists) {
108
+ m[obj.path].push(obj);
109
+ }
110
+
87
111
  return m;
88
112
  }, {});
89
113
  return Object.entries(imports).reduce((m, [importPath, imports]) => {
@@ -113,4 +137,10 @@ export const getImportStatements = list => {
113
137
 
114
138
  return m;
115
139
  }, []);
140
+ };
141
+ export const getRelativePath = (f1, f2) => {
142
+ const rel = relative(dirname(f1), f2);
143
+ let importPath = rel.replace(extname(rel), '');
144
+ if (!/^\./.test(importPath)) importPath = `./${importPath}`;
145
+ return importPath;
116
146
  };
package/module/index.js CHANGED
@@ -5,4 +5,5 @@ export * from './recoil';
5
5
  export * from './message-composer';
6
6
  export * from './react-query';
7
7
  export * from './types';
8
- export * from './msg-builder';
8
+ export * from './msg-builder';
9
+ export * from './provider';
@@ -0,0 +1 @@
1
+ export * from './provider';
@@ -0,0 +1,53 @@
1
+ import * as t from "@babel/types";
2
+ import { camel, pascal } from "case";
3
+ import { PROVIDER_TYPES } from "../utils/constants";
4
+ import { identifier, tsObjectPattern } from "../utils";
5
+ export const createProvider = (name, providerInfos) => {
6
+ const classDeclaration = t.classDeclaration(t.identifier(name), t.identifier("ContractBase"), t.classBody([t.classMethod("constructor", t.identifier("constructor"), [tsObjectPattern([t.objectProperty(t.identifier("address"), t.identifier("address"), false, true), t.objectProperty(t.identifier("cosmWasmClient"), t.identifier("cosmWasmClient"), false, true), t.objectProperty(t.identifier("signingCosmWasmClient"), t.identifier("signingCosmWasmClient"), false, true)], t.tsTypeAnnotation(t.tsTypeReference(t.identifier("IContractConstructor"))))], t.blockStatement([t.expressionStatement(t.callExpression(t.super(), [t.identifier("address"), t.identifier("cosmWasmClient"), t.identifier("signingCosmWasmClient"), t.identifier(providerInfos[PROVIDER_TYPES.SIGNING_CLIENT_TYPE] ? providerInfos[PROVIDER_TYPES.SIGNING_CLIENT_TYPE].classname : "undefined"), t.identifier(providerInfos[PROVIDER_TYPES.QUERY_CLIENT_TYPE] ? providerInfos[PROVIDER_TYPES.QUERY_CLIENT_TYPE].classname : "undefined"), t.identifier(providerInfos[PROVIDER_TYPES.MESSAGE_COMPOSER_TYPE] ? providerInfos[PROVIDER_TYPES.MESSAGE_COMPOSER_TYPE].classname : "undefined")]))]))]));
7
+ classDeclaration.superTypeParameters = t.tsTypeParameterInstantiation([t.tsTypeReference(t.identifier(providerInfos[PROVIDER_TYPES.SIGNING_CLIENT_TYPE] ? providerInfos[PROVIDER_TYPES.SIGNING_CLIENT_TYPE].classname : "IEmptyClient")), t.tsTypeReference(t.identifier(providerInfos[PROVIDER_TYPES.QUERY_CLIENT_TYPE] ? providerInfos[PROVIDER_TYPES.QUERY_CLIENT_TYPE].classname : "IEmptyClient")), t.tsTypeReference(t.identifier(providerInfos[PROVIDER_TYPES.MESSAGE_COMPOSER_TYPE] ? providerInfos[PROVIDER_TYPES.MESSAGE_COMPOSER_TYPE].classname : "IEmptyClient"))]);
8
+ return t.exportNamedDeclaration(classDeclaration);
9
+ };
10
+ export const createIContractsContext = providerInfos => {
11
+ const properties = [];
12
+
13
+ for (const key in providerInfos) {
14
+ if (Object.prototype.hasOwnProperty.call(providerInfos, key)) {
15
+ const contractProviderInfo = providerInfos[key];
16
+ properties.push(createProperty(key, contractProviderInfo));
17
+ }
18
+ }
19
+
20
+ return t.exportNamedDeclaration(t.tsInterfaceDeclaration(t.identifier("IContractsContext"), null, null, t.tsInterfaceBody(properties)));
21
+ };
22
+ let PROVIDER_MAPPING = {};
23
+ PROVIDER_MAPPING[PROVIDER_TYPES.SIGNING_CLIENT_TYPE] = "ISigningClientProvider";
24
+ PROVIDER_MAPPING[PROVIDER_TYPES.QUERY_CLIENT_TYPE] = "IQueryClientProvider";
25
+ PROVIDER_MAPPING[PROVIDER_TYPES.MESSAGE_COMPOSER_TYPE] = "IMessageComposerProvider";
26
+ export const createProperty = (name, providerInfos) => {
27
+ let typeAnnotation = null;
28
+ const keys = Object.keys(providerInfos);
29
+
30
+ if (keys?.length == 1) {
31
+ const key = keys[0];
32
+ typeAnnotation = t.tsTypeAnnotation(t.tsTypeReference(t.identifier(PROVIDER_MAPPING[key]), t.tsTypeParameterInstantiation([t.tsTypeReference(t.identifier(providerInfos[key].classname))])));
33
+ } else {
34
+ const typeRefs = [];
35
+
36
+ for (const key of keys) {
37
+ typeRefs.push(t.tsTypeReference(t.identifier(PROVIDER_MAPPING[key]), t.tsTypeParameterInstantiation([t.tsTypeReference(t.identifier(providerInfos[key].classname))])));
38
+ }
39
+
40
+ typeAnnotation = t.tsTypeAnnotation(t.tsIntersectionType(typeRefs));
41
+ }
42
+
43
+ return t.tsPropertySignature(t.identifier(camel(name)), typeAnnotation);
44
+ };
45
+ export const createGettingProviders = providerInfos => {
46
+ const properties = [];
47
+
48
+ for (const key of Object.keys(providerInfos)) {
49
+ properties.push(t.objectProperty(t.identifier(camel(key)), t.newExpression(t.identifier(pascal(key)), [t.objectExpression([t.objectProperty(t.identifier("address"), t.identifier("address"), false, true), t.objectProperty(t.identifier("cosmWasmClient"), t.identifier("cosmWasmClient"), false, true), t.objectProperty(t.identifier("signingCosmWasmClient"), t.identifier("signingCosmWasmClient"), false, true)])])));
50
+ }
51
+
52
+ return t.exportNamedDeclaration(t.variableDeclaration("const", [t.variableDeclarator(t.identifier("getProviders"), t.arrowFunctionExpression([identifier("address?", t.tsTypeAnnotation(t.tsTypeReference(t.identifier("string")))), identifier("cosmWasmClient?", t.tsTypeAnnotation(t.tsTypeReference(t.identifier("CosmWasmClient")))), identifier("signingCosmWasmClient?", t.tsTypeAnnotation(t.tsTypeReference(t.identifier("SigningCosmWasmClient"))))], t.objectExpression(properties)))]));
53
+ };