@helios-lang/contract-utils 0.1.17 → 0.1.18

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/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@helios-lang/contract-utils",
3
- "version": "0.1.17",
3
+ "version": "0.1.18",
4
4
  "description": "Convenience and type-safety utilities for using Helios validators from within Typescript",
5
5
  "main": "src/index.js",
6
6
  "types": "types/index.d.ts",
@@ -79,12 +79,21 @@ export class ContractContextBuilder {
79
79
  */
80
80
  validators
81
81
 
82
+ /**
83
+ * @private
84
+ * @readonly
85
+ * @type {Option<Module[]>}
86
+ */
87
+ forcedModules
88
+
82
89
  /**
83
90
  * @private
84
91
  * @param {T} validators
92
+ * @param {Option<Module[]>} forcedModules
85
93
  */
86
- constructor(validators) {
94
+ constructor(validators, forcedModules = None) {
87
95
  this.validators = validators
96
+ this.forcedModules = forcedModules
88
97
  }
89
98
 
90
99
  /**
@@ -108,6 +117,14 @@ export class ContractContextBuilder {
108
117
  })
109
118
  }
110
119
 
120
+ /**
121
+ * @param {Module[]} modules
122
+ * @returns {ContractContextBuilder<T>}
123
+ */
124
+ setModules(modules) {
125
+ return new ContractContextBuilder(this.validators, modules)
126
+ }
127
+
111
128
  /**
112
129
  * @private
113
130
  * @param {Lib} lib
@@ -121,6 +138,38 @@ export class ContractContextBuilder {
121
138
  )
122
139
  }
123
140
 
141
+ /**
142
+ * @private
143
+ * @param {Validator} validator
144
+ * @returns {Map<string, string>}
145
+ */
146
+ getModules(validator) {
147
+ if (this.forcedModules) {
148
+ return new Map(
149
+ this.forcedModules.map((m) => [m.$name, m.$sourceCode])
150
+ )
151
+ }
152
+
153
+ /**
154
+ * @type {Map<string, string>}
155
+ */
156
+ const result = new Map()
157
+ let stack = validator.$dependencies.slice()
158
+ let m = stack.pop()
159
+
160
+ while (m) {
161
+ if (!result.has(m.$name)) {
162
+ result.set(m.$name, m.$sourceCode)
163
+
164
+ stack = stack.concat(m.$dependencies)
165
+ }
166
+
167
+ m = stack.pop()
168
+ }
169
+
170
+ return result
171
+ }
172
+
124
173
  /**
125
174
  * @param {Option<{[name: string]: string}>} expectedHashes
126
175
  * @param {LibOptions} options
@@ -162,33 +211,6 @@ export class ContractContextBuilder {
162
211
  */
163
212
  const validators = {}
164
213
 
165
- /**
166
- * @param {Validator} validator
167
- * @returns {Map<string, string>}
168
- */
169
- function collectModules(validator) {
170
- /**
171
- * @type {Map<string, string>}
172
- */
173
- const result = new Map()
174
-
175
- let stack = validator.$dependencies.slice()
176
-
177
- let m = stack.pop()
178
-
179
- while (m) {
180
- if (!result.has(m.$name)) {
181
- result.set(m.$name, m.$sourceCode)
182
-
183
- stack = stack.concat(m.$dependencies)
184
- }
185
-
186
- m = stack.pop()
187
- }
188
-
189
- return result
190
- }
191
-
192
214
  /**
193
215
  * @returns {{[name: string]: {purpose: string, hash: string}}}
194
216
  */
@@ -227,7 +249,7 @@ export class ContractContextBuilder {
227
249
  /**
228
250
  * @param {Validator} validator
229
251
  */
230
- function buildValidator(validator) {
252
+ const buildValidator = (validator) => {
231
253
  const name = validator.$name
232
254
 
233
255
  if (name in validators) {
@@ -238,7 +260,7 @@ export class ContractContextBuilder {
238
260
  buildValidator(v)
239
261
  }
240
262
 
241
- const modules = collectModules(validator)
263
+ const modules = this.getModules(validator)
242
264
 
243
265
  const { cborHex: optimizedCborHex, prettyIR } = lib.compile(
244
266
  validator.$sourceCode,
@@ -265,29 +287,8 @@ export class ContractContextBuilder {
265
287
  }
266
288
  }
267
289
 
268
- /**
269
- * @type {ScriptHash}
270
- */
271
- let ownTypedHash
272
-
273
290
  const purpose = validator.$purpose
274
291
 
275
- switch (purpose) {
276
- case "spending":
277
- ownTypedHash = new ValidatorHash(ownHash)
278
- break
279
- case "minting":
280
- ownTypedHash = new MintingPolicyHash(ownHash)
281
- break
282
- case "staking":
283
- case "certifying":
284
- case "rewarding":
285
- ownTypedHash = new StakingValidatorHash(ownHash)
286
- break
287
- default:
288
- throw new Error("unhandled purpose")
289
- }
290
-
291
292
  const { cborHex: unoptimizedCborHex } = lib.compile(
292
293
  validator.$sourceCode,
293
294
  Array.from(modules.values()),
@@ -60,6 +60,7 @@ export class ContractContextBuilder<T extends {
60
60
  /**
61
61
  * @private
62
62
  * @param {T} validators
63
+ * @param {Option<Module[]>} forcedModules
63
64
  */
64
65
  private constructor();
65
66
  /**
@@ -68,6 +69,12 @@ export class ContractContextBuilder<T extends {
68
69
  * @type {T}
69
70
  */
70
71
  private readonly validators;
72
+ /**
73
+ * @private
74
+ * @readonly
75
+ * @type {Option<Module[]>}
76
+ */
77
+ private readonly forcedModules;
71
78
  /**
72
79
  * @template {Validator} V
73
80
  * @param {V} validator
@@ -76,12 +83,23 @@ export class ContractContextBuilder<T extends {
76
83
  * }>}
77
84
  */
78
85
  with<V extends Validator>(validator: V): ContractContextBuilder<T & { [K in V["$name"]]: V; }>;
86
+ /**
87
+ * @param {Module[]} modules
88
+ * @returns {ContractContextBuilder<T>}
89
+ */
90
+ setModules(modules: Module[]): ContractContextBuilder<T>;
79
91
  /**
80
92
  * @private
81
93
  * @param {Lib} lib
82
94
  * @returns {{[name: string]: any}}
83
95
  */
84
96
  private getValidatorTypes;
97
+ /**
98
+ * @private
99
+ * @param {Validator} validator
100
+ * @returns {Map<string, string>}
101
+ */
102
+ private getModules;
85
103
  /**
86
104
  * @param {Option<{[name: string]: string}>} expectedHashes
87
105
  * @param {LibOptions} options
@@ -1 +1 @@
1
- {"version":3,"file":"ContractContextBuilder.d.ts","sourceRoot":"","sources":["../../src/runtime/ContractContextBuilder.js"],"names":[],"mappings":"AAaA;;;;GAIG;AAEH;;;;GAIG;AAEH;;;;;;GAMG;AAEH;;;;GAIG;AAEH;;;GAGG;AAEH;;;GAGG;AAEH;;;;;;GAMG;AAEH;;;;;;;;;;;GAWG;AAEH;;GAEG;AACH;;;IAgBI;;OAEG;IACH,gBAFa,uBAAuB,EAAE,CAAC,CAItC;IAbD;;;OAGG;IACH,sBAEC;IAbD;;;;OAIG;IACH,4BAAU;IAiBV;;;;;;OAMG;IACH,+FAKC;IAED;;;;OAIG;IACH,0BAMC;IAED;;;;;;;;;;;;;;;;;;;;;;;;;;OA0BG;IACH;;kBAzBW,UAAU,qwBAiNpB;CACJ;kBAjUY,OAAO,iBAAiB,EAAE,GAAG;yBAC7B,OAAO,iBAAiB,EAAE,UAAU;gCACpC,OAAO,sBAAsB,EAAE,SAAS;mEAMxC,OAAO,qBAAqB,EAAE,cAAc,CAAC,eAAe,EAAE,mBAAmB,CAAC;oGAQlF,OAAO,qBAAqB,EAAE,eAAe,CAAC,YAAY,EAAE,gBAAgB,EAAE,eAAe,EAAE,mBAAmB,CAAC;mEAMnH,OAAO,qBAAqB,EAAE,cAAc,CAAC,eAAe,EAAE,mBAAmB,CAAC;6HAKlF,OAAO,qBAAqB,EAAE,cAAc,CAAC,CAAC,CAAC;yHAK/C,OAAO,iBAAiB,EAAE,UAAU,CAAC,CAAC,CAAC;qBAIvC;IACZ,KAAS,EAAE,MAAM,CAAA;IACjB,WAAe,EAAE,MAAM,CAAA;IACvB,aAAiB,EAAE,MAAM,EAAE,CAAA;CACxB;wBAIS;IACZ,KAAS,EAAE,MAAM,CAAA;IACjB,QAAY,EAAE,MAAM,CAAA;IACpB,WAAe,EAAE,MAAM,CAAA;IACvB,aAAiB,EAAE,MAAM,EAAE,CAAA;IAC3B,iBAAqB,EAAE,SAAS,EAAE,CAAA;IAClC,iBAAqB,EAAE,OAAO,CAAA;IAC9B,SAAa,EAAE,KAAK,GAAG,EAAE,GAAG,CAAC,CAAA;IAC7B,MAAU,CAAC,EAAE,KAAK,GAAG,EAAE,GAAG,CAAC,CAAA;CACxB;8BA7DG,qBAAqB;kCAArB,qBAAqB;qCAArB,qBAAqB;qBAIP,WAAW"}
1
+ {"version":3,"file":"ContractContextBuilder.d.ts","sourceRoot":"","sources":["../../src/runtime/ContractContextBuilder.js"],"names":[],"mappings":"AAaA;;;;GAIG;AAEH;;;;GAIG;AAEH;;;;;;GAMG;AAEH;;;;GAIG;AAEH;;;GAGG;AAEH;;;GAGG;AAEH;;;;;;GAMG;AAEH;;;;;;;;;;;GAWG;AAEH;;GAEG;AACH;;;IAyBI;;OAEG;IACH,gBAFa,uBAAuB,EAAE,CAAC,CAItC;IAfD;;;;OAIG;IACH,sBAGC;IAtBD;;;;OAIG;IACH,4BAAU;IAEV;;;;OAIG;IACH,+BAAa;IAmBb;;;;;;OAMG;IACH,+FAKC;IAED;;;OAGG;IACH,oBAHW,MAAM,EAAE,GACN,uBAAuB,CAAC,CAAC,CAIrC;IAED;;;;OAIG;IACH,0BAMC;IAED;;;;OAIG;IACH,mBAyBC;IAED;;;;;;;;;;;;;;;;;;;;;;;;;;OA0BG;IACH;;kBAzBW,UAAU,qwBAiKpB;CACJ;kBAlUY,OAAO,iBAAiB,EAAE,GAAG;yBAC7B,OAAO,iBAAiB,EAAE,UAAU;gCACpC,OAAO,sBAAsB,EAAE,SAAS;mEAMxC,OAAO,qBAAqB,EAAE,cAAc,CAAC,eAAe,EAAE,mBAAmB,CAAC;oGAQlF,OAAO,qBAAqB,EAAE,eAAe,CAAC,YAAY,EAAE,gBAAgB,EAAE,eAAe,EAAE,mBAAmB,CAAC;mEAMnH,OAAO,qBAAqB,EAAE,cAAc,CAAC,eAAe,EAAE,mBAAmB,CAAC;6HAKlF,OAAO,qBAAqB,EAAE,cAAc,CAAC,CAAC,CAAC;yHAK/C,OAAO,iBAAiB,EAAE,UAAU,CAAC,CAAC,CAAC;qBAIvC;IACZ,KAAS,EAAE,MAAM,CAAA;IACjB,WAAe,EAAE,MAAM,CAAA;IACvB,aAAiB,EAAE,MAAM,EAAE,CAAA;CACxB;wBAIS;IACZ,KAAS,EAAE,MAAM,CAAA;IACjB,QAAY,EAAE,MAAM,CAAA;IACpB,WAAe,EAAE,MAAM,CAAA;IACvB,aAAiB,EAAE,MAAM,EAAE,CAAA;IAC3B,iBAAqB,EAAE,SAAS,EAAE,CAAA;IAClC,iBAAqB,EAAE,OAAO,CAAA;IAC9B,SAAa,EAAE,KAAK,GAAG,EAAE,GAAG,CAAC,CAAA;IAC7B,MAAU,CAAC,EAAE,KAAK,GAAG,EAAE,GAAG,CAAC,CAAA;CACxB;8BA7DG,qBAAqB;kCAArB,qBAAqB;qCAArB,qBAAqB;qBAIP,WAAW"}