@helios-lang/contract-utils 0.1.17 → 0.1.19

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.19",
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
  /**
@@ -94,6 +103,14 @@ export class ContractContextBuilder {
94
103
  return new ContractContextBuilder({})
95
104
  }
96
105
 
106
+ /**
107
+ * @param {Module[]} modules
108
+ * @returns {ContractContextBuilder<T>}
109
+ */
110
+ setModules(modules) {
111
+ return new ContractContextBuilder(this.validators, modules)
112
+ }
113
+
97
114
  /**
98
115
  * @template {Validator} V
99
116
  * @param {V} validator
@@ -102,10 +119,45 @@ export class ContractContextBuilder {
102
119
  * }>}
103
120
  */
104
121
  with(validator) {
105
- return new ContractContextBuilder({
106
- ...this.validators,
107
- [validator.$name]: validator
108
- })
122
+ return new ContractContextBuilder(
123
+ {
124
+ ...this.validators,
125
+ [validator.$name]: validator
126
+ },
127
+ this.forcedModules
128
+ )
129
+ }
130
+
131
+ /**
132
+ * @private
133
+ * @param {Validator} validator
134
+ * @returns {Map<string, string>}
135
+ */
136
+ getModules(validator) {
137
+ if (this.forcedModules) {
138
+ return new Map(
139
+ this.forcedModules.map((m) => [m.$name, m.$sourceCode])
140
+ )
141
+ }
142
+
143
+ /**
144
+ * @type {Map<string, string>}
145
+ */
146
+ const result = new Map()
147
+ let stack = validator.$dependencies.slice()
148
+ let m = stack.pop()
149
+
150
+ while (m) {
151
+ if (!result.has(m.$name)) {
152
+ result.set(m.$name, m.$sourceCode)
153
+
154
+ stack = stack.concat(m.$dependencies)
155
+ }
156
+
157
+ m = stack.pop()
158
+ }
159
+
160
+ return result
109
161
  }
110
162
 
111
163
  /**
@@ -162,33 +214,6 @@ export class ContractContextBuilder {
162
214
  */
163
215
  const validators = {}
164
216
 
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
217
  /**
193
218
  * @returns {{[name: string]: {purpose: string, hash: string}}}
194
219
  */
@@ -227,7 +252,7 @@ export class ContractContextBuilder {
227
252
  /**
228
253
  * @param {Validator} validator
229
254
  */
230
- function buildValidator(validator) {
255
+ const buildValidator = (validator) => {
231
256
  const name = validator.$name
232
257
 
233
258
  if (name in validators) {
@@ -238,7 +263,7 @@ export class ContractContextBuilder {
238
263
  buildValidator(v)
239
264
  }
240
265
 
241
- const modules = collectModules(validator)
266
+ const modules = this.getModules(validator)
242
267
 
243
268
  const { cborHex: optimizedCborHex, prettyIR } = lib.compile(
244
269
  validator.$sourceCode,
@@ -265,29 +290,8 @@ export class ContractContextBuilder {
265
290
  }
266
291
  }
267
292
 
268
- /**
269
- * @type {ScriptHash}
270
- */
271
- let ownTypedHash
272
-
273
293
  const purpose = validator.$purpose
274
294
 
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
295
  const { cborHex: unoptimizedCborHex } = lib.compile(
292
296
  validator.$sourceCode,
293
297
  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,17 @@ 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;
78
+ /**
79
+ * @param {Module[]} modules
80
+ * @returns {ContractContextBuilder<T>}
81
+ */
82
+ setModules(modules: Module[]): ContractContextBuilder<T>;
71
83
  /**
72
84
  * @template {Validator} V
73
85
  * @param {V} validator
@@ -76,6 +88,12 @@ export class ContractContextBuilder<T extends {
76
88
  * }>}
77
89
  */
78
90
  with<V extends Validator>(validator: V): ContractContextBuilder<T & { [K in V["$name"]]: V; }>;
91
+ /**
92
+ * @private
93
+ * @param {Validator} validator
94
+ * @returns {Map<string, string>}
95
+ */
96
+ private getModules;
79
97
  /**
80
98
  * @private
81
99
  * @param {Lib} lib
@@ -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;;;OAGG;IACH,oBAHW,MAAM,EAAE,GACN,uBAAuB,CAAC,CAAC,CAIrC;IAED;;;;;;OAMG;IACH,+FAQC;IAED;;;;OAIG;IACH,mBAyBC;IAED;;;;OAIG;IACH,0BAMC;IAED;;;;;;;;;;;;;;;;;;;;;;;;;;OA0BG;IACH;;kBAzBW,UAAU,qwBAiKpB;CACJ;kBArUY,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"}