@clarigen/test 1.0.0-next.17 → 1.0.0-next.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/dist/index.d.ts CHANGED
@@ -1,75 +1,10 @@
1
- import { ResultAssets, CoreNodeEvent, Contracts, ContractCall, Response, ContractCalls, ContractInstances } from '@clarigen/core';
1
+ import { CoreNodeEvent, ResultAssets, Contracts, ContractCall, Response, ContractCalls, ContractInstances } from '@clarigen/core';
2
+ import { Costs, NativeClarityBinProvider, ClarinetAccounts } from '@clarigen/native-bin';
3
+ export { Allocation, createClarityBin, evalJson, executeJson } from '@clarigen/native-bin';
2
4
  import { ClarityValue, ResponseCV } from 'micro-stacks/clarity';
3
- import { NativeClarityBinProvider } from '@clarigen/native-bin';
4
5
  import { StacksNetworkVersion } from 'micro-stacks/crypto';
5
6
  import { IntegerType } from 'micro-stacks/common';
6
7
 
7
- interface Allocation {
8
- principal: string;
9
- amount: bigint;
10
- }
11
- interface Costs {
12
- read_count: number;
13
- read_length: number;
14
- runtime: number;
15
- write_count: number;
16
- write_length: number;
17
- }
18
- interface ExecuteOk {
19
- success: true;
20
- message: string;
21
- events: any[];
22
- output_serialized: string;
23
- costs: Costs;
24
- assets: ResultAssets;
25
- stderr: string;
26
- }
27
- interface ExecuteErr {
28
- message: string;
29
- error: any;
30
- output_serialized: string;
31
- costs: Costs;
32
- success: false;
33
- stderr: string;
34
- }
35
- declare type ExecuteResult = ExecuteOk | ExecuteErr;
36
- declare const executeJson: ({ contractAddress, senderAddress, functionName, provider, args, coverageFolder, }: {
37
- contractAddress: string;
38
- senderAddress: string;
39
- provider: NativeClarityBinProvider;
40
- functionName: string;
41
- args?: string[] | undefined;
42
- coverageFolder?: string | undefined;
43
- }) => Promise<ExecuteResult>;
44
- interface EvalOk {
45
- success: true;
46
- costs: Costs;
47
- output_serialized: string;
48
- }
49
- interface Eval extends EvalOk {
50
- stderr: string;
51
- }
52
- declare const evalJson: ({ contractAddress, functionName, provider, args, coverageFolder, }: {
53
- contractAddress: string;
54
- functionName: string;
55
- provider: NativeClarityBinProvider;
56
- args?: string[] | undefined;
57
- coverageFolder?: string | undefined;
58
- }) => Promise<Eval>;
59
- interface ClarinetAccount {
60
- balance: bigint;
61
- address: string;
62
- }
63
- interface ClarinetAccounts {
64
- deployer: ClarinetAccount;
65
- [key: string]: ClarinetAccount;
66
- }
67
- declare type AllocationOrAccounts = ClarinetAccounts | Allocation[];
68
- declare const createClarityBin: ({ allocations, testnet, }?: {
69
- allocations?: AllocationOrAccounts | undefined;
70
- testnet?: boolean | undefined;
71
- }) => Promise<NativeClarityBinProvider>;
72
-
73
8
  interface ReadOnlyResult<T> {
74
9
  value: T;
75
10
  clarityValue: ClarityValue;
@@ -136,4 +71,4 @@ declare class TestProvider {
136
71
  mapGet<T extends ContractCalls.Map<any, Val>, Val>(map: T): Promise<Val | null>;
137
72
  }
138
73
 
139
- export { Allocation, PublicResultErr, PublicResultOk, ReadOnlyResult, TestProvider, createClarityBin, evalJson, executeJson, finishCoverage, getBlockHeight, getStxBalance, makeRandomAddress, mineBlocks, setupCoverage };
74
+ export { PublicResultErr, PublicResultOk, ReadOnlyResult, TestProvider, finishCoverage, getBlockHeight, getStxBalance, makeRandomAddress, mineBlocks, setupCoverage };
package/dist/index.js CHANGED
@@ -1,17 +1,2 @@
1
- "use strict";Object.defineProperty(exports, "__esModule", {value: true});var L=Object.defineProperty,D=Object.defineProperties;var M=Object.getOwnPropertyDescriptors;var O=Object.getOwnPropertySymbols;var U=Object.prototype.hasOwnProperty,W=Object.prototype.propertyIsEnumerable;var T=(t,r,e)=>r in t?L(t,r,{enumerable:!0,configurable:!0,writable:!0,value:e}):t[r]=e,l=(t,r)=>{for(var e in r||(r={}))U.call(r,e)&&T(t,e,r[e]);if(O)for(var e of O(r))W.call(r,e)&&T(t,e,r[e]);return t},u=(t,r)=>D(t,M(r));var _core = require('@clarigen/core');var _crypto = require('micro-stacks/crypto');var _transactions = require('micro-stacks/transactions');var _nativebin = require('@clarigen/native-bin');var _clarity = require('micro-stacks/clarity');function f(t){return t?["--c",t]:[]}var g=async({contractAddress:t,senderAddress:r,functionName:e,provider:n,args:o=[],coverageFolder:s})=>{let i=await n.runCommand(["execute","--costs","--assets",...f(s),n.dbFilePath,t,e,r,...o]);process.env.PRINT_CLARIGEN_STDERR&&i.stderr&&console.log(i.stderr);try{let a=JSON.parse(i.stdout);if(a&&"error"in a)throw new Error(`Transaction error: ${JSON.stringify(a.error,null,2)}`);if(i.exitCode!==0)throw new Error(`Execution error: ${i.stderr}`);return u(l({},a),{stderr:i.stderr})}catch (e2){throw new Error(`Error parsing clarity execution.
2
- stdout: ${i.stdout}
3
- stderr:${i.stderr}`)}},y=async({contractAddress:t,code:r,provider:e,coverageFolder:n})=>{let o=await e.runCommand(["eval_at_chaintip","--costs",...f(n),t,e.dbFilePath],{stdin:r});process.env.PRINT_CLARIGEN_STDERR&&o.stderr&&console.log(o.stderr);try{let s=JSON.parse(o.stdout);if(!s.success)throw new Error(JSON.stringify(s.error,null,2));return u(l({},s),{stderr:o.stderr})}catch(s){throw console.error("[@clarigen/test] Invalid JSON result from `clarity-cli`:",o.stdout),console.error("[@clarigen/test] stderr:",o.stderr),s}},p= exports.evalJson =({contractAddress:t,functionName:r,provider:e,args:n=[],coverageFolder:o})=>{let s=`(${r} ${n.join(" ")})`;return y({contractAddress:t,provider:e,code:s,coverageFolder:o})};function nr(t){return t?"deployer"in t?Object.values(t).map(r=>({amount:r.balance,principal:r.address})):Array.isArray(t)?t:[]:[]}function or(t,r){return typeof r=="bigint"?`${r}n`:r}function sr(t){return JSON.stringify(t,or).replace(/"(-?\d+)n"/g,(e,n)=>n)}var E=async({allocations:t,testnet:r=!0}={})=>{let e=_nativebin.getDefaultBinaryFilePath.call(void 0, ),n=_nativebin.getTempFilePath.call(void 0, ),o=nr(t),s=new (0, _nativebin.NativeClarityBinProvider)(n,e),i=["initialize","-",n];r&&i.push("--testnet");let a=await s.runCommand(i,{stdin:sr(o)});return s};async function C({contractIdentifier:t,contractFilePath:r,provider:e,coverageFolder:n}){let o=await e.runCommand(["launch",t,r,e.dbFilePath,"--costs","--assets",...f(n)]);if(_nativebin.hasStdErr.call(void 0, o.stderr))throw new Error(`Error on ${r}:
4
- ${o.stderr}
5
- `);let s=JSON.parse(o.stdout);if(s.error){let{initialization:i}=s.error;if(i!=null&&i.includes(`
6
- Near:
7
- `)){let[a,c]=i.split(`
8
- Near:
9
- `),v="",k=/start_line: (\d+),/.exec(c);throw k&&(v=k[1]),new Error(`Error on ${r}:
10
- ${a}
11
- ${v?`Near line ${v}`:""}
12
- Raw trace:
13
- ${c}
14
- `)}throw new Error(`Error on ${r}:
15
- ${JSON.stringify(s.error,null,2)}
16
- `)}}function w(t){return _core.filterEvents.call(void 0, t,_core.CoreNodeEventType.ContractEvent).map(r=>{let e=r.contract_event.raw_value,n=_clarity.hexToCV.call(void 0, e);return _core.cvToValue.call(void 0, n)})}var _path = require('path');var _common = require('micro-stacks/common');var d="ST000000000000000000002AMW42H.clarigen-test-utils";async function B(t){let r=_path.join.call(void 0, __dirname,"..","..","contracts","test-utils.clar");__dirname.includes("dist")&&(r=_path.join.call(void 0, __dirname,"..","contracts","test-utils.clar")),await C({contractIdentifier:d,provider:t,contractFilePath:r})}function P(t){return"clarityBin"in t?t.clarityBin:t}async function ar(t){let r=P(t),{output_serialized:e}=await p({contractAddress:d,functionName:"get-block-height",args:[],provider:r}),n=_clarity.hexToCV.call(void 0, e);return _core.cvToValue.call(void 0, n)}async function cr(t){let r=P(t);await g({contractAddress:d,functionName:"mine-block",args:[],provider:r,senderAddress:"ST000000000000000000002AMW42H"})}async function lr(t,r){let e=_common.intToBigInt.call(void 0, t);for(let n=0;n<e;n++)await cr(r)}async function ur(t,r){let e=P(t),{output_serialized:n}=await p({contractAddress:d,functionName:"get-stx-balance",args:[`'${r}`],provider:e}),o=_clarity.hexToCV.call(void 0, n);return _core.cvToValue.call(void 0, o)}var _promises = require('fs/promises');async function gr(t){let r=_path.resolve.call(void 0, process.cwd(),"coverage");try{await _promises.mkdir.call(void 0, r)}catch (e3){}let n=(await _promises.readdir.call(void 0, r)).map(o=>_promises.unlink.call(void 0, _path.join.call(void 0, r,o)));return await Promise.all(n),r}async function Cr(t,r){let e=_path.join.call(void 0, r,"clarigen.lcov");await t.runCommand(["make_lcov",r,e])}function br(t=_crypto.StacksNetworkVersion.testnetP2PKH){let r=_transactions.makeRandomPrivKey.call(void 0, ),e=_transactions.getPublicKeyFromStacksPrivateKey.call(void 0, r);return _crypto.publicKeyToStxAddress.call(void 0, e.data,t)}function I(t){return t.map(r=>_core.cvToString.call(void 0, r))}function b(t){return`${t.contractAddress}.${t.contractName}`}function S(t){return t===""?[]:t.split(`
17
- `).map(r=>r.slice(62))}function J(t){let r=_clarity.hexToCV.call(void 0, t.output_serialized);return{value:_core.cvToValue.call(void 0, r,!0),clarityValue:r,logs:S(t.stderr),costs:t.costs}}async function z({tx:t,bin:r,coverageFolder:e}){let n=await p({functionName:t.function.name,args:I(t.functionArgs),contractAddress:b(t),provider:r,coverageFolder:e});return J(n)}async function x({contractAddress:t,code:r,bin:e,coverageFolder:n}){let o=await y({contractAddress:t,code:r,provider:e,coverageFolder:n});return J(o)}async function K({tx:t,senderAddress:r,bin:e,coverageFolder:n}){let o=await g({contractAddress:b(t),senderAddress:r,provider:e,functionName:t.function.name,args:I(t.functionArgs),coverageFolder:n}),s=_clarity.hexToCV.call(void 0, o.output_serialized),a={value:_core.cvToValue.call(void 0, s),logs:S(o.stderr),costs:o.costs};return o.success?u(l({},a),{isOk:!0,response:_clarity.responseOkCV.call(void 0, s),assets:o.assets,events:o.events,prints:w(o.events)}):u(l({},a),{isOk:!1,response:_clarity.responseErrorCV.call(void 0, s)})}async function j({map:t,bin:r}){let e=`(map-get? ${t.map.name} ${_core.cvToString.call(void 0, t.key)})`;return(await x({contractAddress:b(t),code:e,bin:r})).value}var H=class{constructor(r){this.clarityBin=r}static async fromContracts(r,e={}){let n=e.clarityBin||await E({allocations:e.accounts}),o={},s=e.coverageFolder;process.env.CLARIGEN_COVERAGE&&(s=_path.resolve.call(void 0, process.cwd(),"coverage")),await B(n);for(let a in r)if(Object.prototype.hasOwnProperty.call(r,a)){let c=r[a],v=_core.getContractIdentifier.call(void 0, c);await C({contractIdentifier:v,contractFilePath:c.contractFile,provider:n,coverageFolder:s});let R=c.contract(c.address,c.name);o[a]={identifier:_core.getContractIdentifier.call(void 0, c),contract:R}}let i=new this(n);return i.coverageFolder=s,{deployed:o,provider:i}}ro(r){return z({tx:r,bin:this.clarityBin,coverageFolder:this.coverageFolder})}async rov(r){return(await this.ro(r)).value}async roOk(r){let e=await this.ro(r),n=_core.expectOk.call(void 0, e.value);return u(l({},e),{value:n})}async roErr(r){let e=await this.ro(r),n=_core.expectErr.call(void 0, e.value);return u(l({},e),{value:n})}async rovOk(r){return(await this.roOk(r)).value}async rovErr(r){return(await this.roErr(r)).value}tx(r,e){return K({tx:r,senderAddress:e,bin:this.clarityBin,coverageFolder:this.coverageFolder})}async txOk(r,e){let n=await this.tx(r,e);if(!n.isOk)throw new Error(`Expected OK, received error: ${n.value}`);return n}async txErr(r,e){let n=await this.tx(r,e);if(n.isOk)throw new Error(`Expected Err, received ok: ${n.value}`);return n}evalCode(r,e=d){return x({contractAddress:e,code:r,bin:this.clarityBin,coverageFolder:this.coverageFolder})}async eval(r,e=d){return(await this.evalCode(r,e)).value}mapGet(r){return j({map:r,bin:this.clarityBin})}};exports.TestProvider = H; exports.createClarityBin = E; exports.evalJson = p; exports.executeJson = g; exports.finishCoverage = Cr; exports.getBlockHeight = ar; exports.getStxBalance = ur; exports.makeRandomAddress = br; exports.mineBlocks = lr; exports.setupCoverage = gr;
1
+ "use strict";Object.defineProperty(exports, "__esModule", {value: true});var K=Object.defineProperty,H=Object.defineProperties;var $=Object.getOwnPropertyDescriptors;var g=Object.getOwnPropertySymbols;var J=Object.prototype.hasOwnProperty,z=Object.prototype.propertyIsEnumerable;var P=(r,t,e)=>t in r?K(r,t,{enumerable:!0,configurable:!0,writable:!0,value:e}):r[t]=e,l=(r,t)=>{for(var e in t||(t={}))J.call(t,e)&&P(r,e,t[e]);if(g)for(var e of g(t))z.call(t,e)&&P(r,e,t[e]);return r},u=(r,t)=>H(r,$(t));var _nativebin = require('@clarigen/native-bin');var _core = require('@clarigen/core');var _crypto = require('micro-stacks/crypto');var _transactions = require('micro-stacks/transactions');var _clarity = require('micro-stacks/clarity');var _path = require('path');var _common = require('micro-stacks/common');var a="ST000000000000000000002AMW42H.clarigen-test-utils";async function R(r){let t=_path.join.call(void 0, __dirname,"..","..","contracts","test-utils.clar");__dirname.includes("dist")&&(t=_path.join.call(void 0, __dirname,"..","contracts","test-utils.clar")),await _nativebin.deployContract.call(void 0, {contractIdentifier:a,provider:r,contractFilePath:t})}function v(r){return"clarityBin"in r?r.clarityBin:r}async function U(r){let t=v(r),{output_serialized:e}=await _nativebin.evalJson.call(void 0, {contractAddress:a,functionName:"get-block-height",args:[],provider:t}),o=_clarity.hexToCV.call(void 0, e);return _core.cvToValue.call(void 0, o)}async function j(r){let t=v(r);await _nativebin.executeJson.call(void 0, {contractAddress:a,functionName:"mine-block",args:[],provider:t,senderAddress:"ST000000000000000000002AMW42H"})}async function D(r,t){let e=_common.intToBigInt.call(void 0, r);for(let o=0;o<e;o++)await j(t)}async function W(r,t){let e=v(r),{output_serialized:o}=await _nativebin.evalJson.call(void 0, {contractAddress:a,functionName:"get-stx-balance",args:[`'${t}`],provider:e}),n=_clarity.hexToCV.call(void 0, o);return _core.cvToValue.call(void 0, n)}var _promises = require('fs/promises');async function Z(r){let t=_path.resolve.call(void 0, process.cwd(),"coverage");try{await _promises.mkdir.call(void 0, t)}catch (e2){}let o=(await _promises.readdir.call(void 0, t)).map(n=>_promises.unlink.call(void 0, _path.join.call(void 0, t,n)));return await Promise.all(o),t}async function tt(r,t){let e=_path.join.call(void 0, t,"clarigen.lcov");await r.runCommand(["make_lcov",t,e])}function it(r=_crypto.StacksNetworkVersion.testnetP2PKH){let t=_transactions.makeRandomPrivKey.call(void 0, ),e=_transactions.getPublicKeyFromStacksPrivateKey.call(void 0, t);return _crypto.publicKeyToStxAddress.call(void 0, e.data,r)}function vt(r){return _core.filterEvents.call(void 0, r,_core.CoreNodeEventType.ContractEvent).map(t=>{let e=t.contract_event.raw_value,o=_clarity.hexToCV.call(void 0, e);return _core.cvToValue.call(void 0, o)})}function B(r){return r.map(t=>_core.cvToString.call(void 0, t))}function y(r){return`${r.contractAddress}.${r.contractName}`}function w(r){return r===""?[]:r.split(`
2
+ `).map(t=>t.slice(62))}function h(r){let t=_clarity.hexToCV.call(void 0, r.output_serialized);return{value:_core.cvToValue.call(void 0, t,!0),clarityValue:t,logs:w(r.stderr),costs:r.costs}}async function N({tx:r,bin:t,coverageFolder:e}){let o=await _nativebin.evalJson.call(void 0, {functionName:r.function.name,args:B(r.functionArgs),contractAddress:y(r),provider:t,coverageFolder:e});return h(o)}async function f({contractAddress:r,code:t,bin:e,coverageFolder:o}){let n=await _nativebin.evalRaw.call(void 0, {contractAddress:r,code:t,provider:e,coverageFolder:o});return h(n)}async function A({tx:r,senderAddress:t,bin:e,coverageFolder:o}){let n=await _nativebin.executeJson.call(void 0, {contractAddress:y(r),senderAddress:t,provider:e,functionName:r.function.name,args:B(r.functionArgs),coverageFolder:o}),i=_clarity.hexToCV.call(void 0, n.output_serialized),s={value:_core.cvToValue.call(void 0, i),logs:w(n.stderr),costs:n.costs};return n.success?u(l({},s),{isOk:!0,response:_clarity.responseOkCV.call(void 0, i),assets:n.assets,events:n.events,prints:vt(n.events)}):u(l({},s),{isOk:!1,response:_clarity.responseErrorCV.call(void 0, i)})}async function V({map:r,bin:t}){let e=`(map-get? ${r.map.name} ${_core.cvToString.call(void 0, r.key)})`;return(await f({contractAddress:y(r),code:e,bin:t})).value}var _=class{constructor(t){this.clarityBin=t}static async fromContracts(t,e={}){let o=e.clarityBin||await _nativebin.createClarityBin.call(void 0, {allocations:e.accounts}),n={},i=e.coverageFolder;process.env.CLARIGEN_COVERAGE&&(i=_path.resolve.call(void 0, process.cwd(),"coverage")),await R(o);for(let s in t)if(Object.prototype.hasOwnProperty.call(t,s)){let c=t[s],I=_core.getContractIdentifier.call(void 0, c);await _nativebin.deployContract.call(void 0, {contractIdentifier:I,contractFilePath:c.contractFile,provider:o,coverageFolder:i});let S=c.contract(c.address,c.name);n[s]={identifier:_core.getContractIdentifier.call(void 0, c),contract:S}}let p=new this(o);return p.coverageFolder=i,{deployed:n,provider:p}}ro(t){return N({tx:t,bin:this.clarityBin,coverageFolder:this.coverageFolder})}async rov(t){return(await this.ro(t)).value}async roOk(t){let e=await this.ro(t),o=_core.expectOk.call(void 0, e.value);return u(l({},e),{value:o})}async roErr(t){let e=await this.ro(t),o=_core.expectErr.call(void 0, e.value);return u(l({},e),{value:o})}async rovOk(t){return(await this.roOk(t)).value}async rovErr(t){return(await this.roErr(t)).value}tx(t,e){return A({tx:t,senderAddress:e,bin:this.clarityBin,coverageFolder:this.coverageFolder})}async txOk(t,e){let o=await this.tx(t,e);if(!o.isOk)throw new Error(`Expected OK, received error: ${o.value}`);return o}async txErr(t,e){let o=await this.tx(t,e);if(o.isOk)throw new Error(`Expected Err, received ok: ${o.value}`);return o}evalCode(t,e=a){return f({contractAddress:e,code:t,bin:this.clarityBin,coverageFolder:this.coverageFolder})}async eval(t,e=a){return(await this.evalCode(t,e)).value}mapGet(t){return V({map:t,bin:this.clarityBin})}};exports.Allocation = _nativebin.Allocation; exports.TestProvider = _; exports.createClarityBin = _nativebin.createClarityBin; exports.evalJson = _nativebin.evalJson; exports.executeJson = _nativebin.executeJson; exports.finishCoverage = tt; exports.getBlockHeight = U; exports.getStxBalance = W; exports.makeRandomAddress = it; exports.mineBlocks = D; exports.setupCoverage = Z;
package/dist/index.mjs CHANGED
@@ -1,17 +1,2 @@
1
- var H=Object.defineProperty,U=Object.defineProperties;var M=Object.getOwnPropertyDescriptors;var T=Object.getOwnPropertySymbols;var W=Object.prototype.hasOwnProperty,q=Object.prototype.propertyIsEnumerable;var w=(t,r,e)=>r in t?H(t,r,{enumerable:!0,configurable:!0,writable:!0,value:e}):t[r]=e,l=(t,r)=>{for(var e in r||(r={}))W.call(r,e)&&w(t,e,r[e]);if(T)for(var e of T(r))q.call(r,e)&&w(t,e,r[e]);return t},u=(t,r)=>U(t,M(r));import{fileURLToPath as Q}from"url";import X from"path";var Y=()=>Q(import.meta.url),Z=()=>X.dirname(Y()),d=Z();import{getContractIdentifier as D,expectOk as Nr,expectErr as Ar}from"@clarigen/core";import{publicKeyToStxAddress as br,StacksNetworkVersion as Rr}from"micro-stacks/crypto";import{getPublicKeyFromStacksPrivateKey as kr,makeRandomPrivKey as Or}from"micro-stacks/transactions";import{getTempFilePath as rr,NativeClarityBinProvider as tr,getDefaultBinaryFilePath as er,hasStdErr as nr}from"@clarigen/native-bin";import{CoreNodeEventType as or,cvToValue as sr,filterEvents as ir}from"@clarigen/core";import{hexToCV as ar}from"micro-stacks/clarity";function y(t){return t?["--c",t]:[]}var f=async({contractAddress:t,senderAddress:r,functionName:e,provider:n,args:o=[],coverageFolder:s})=>{let i=await n.runCommand(["execute","--costs","--assets",...y(s),n.dbFilePath,t,e,r,...o]);process.env.PRINT_CLARIGEN_STDERR&&i.stderr&&console.log(i.stderr);try{let a=JSON.parse(i.stdout);if(a&&"error"in a)throw new Error(`Transaction error: ${JSON.stringify(a.error,null,2)}`);if(i.exitCode!==0)throw new Error(`Execution error: ${i.stderr}`);return u(l({},a),{stderr:i.stderr})}catch{throw new Error(`Error parsing clarity execution.
2
- stdout: ${i.stdout}
3
- stderr:${i.stderr}`)}},E=async({contractAddress:t,code:r,provider:e,coverageFolder:n})=>{let o=await e.runCommand(["eval_at_chaintip","--costs",...y(n),t,e.dbFilePath],{stdin:r});process.env.PRINT_CLARIGEN_STDERR&&o.stderr&&console.log(o.stderr);try{let s=JSON.parse(o.stdout);if(!s.success)throw new Error(JSON.stringify(s.error,null,2));return u(l({},s),{stderr:o.stderr})}catch(s){throw console.error("[@clarigen/test] Invalid JSON result from `clarity-cli`:",o.stdout),console.error("[@clarigen/test] stderr:",o.stderr),s}},v=({contractAddress:t,functionName:r,provider:e,args:n=[],coverageFolder:o})=>{let s=`(${r} ${n.join(" ")})`;return E({contractAddress:t,provider:e,code:s,coverageFolder:o})};function cr(t){return t?"deployer"in t?Object.values(t).map(r=>({amount:r.balance,principal:r.address})):Array.isArray(t)?t:[]:[]}function lr(t,r){return typeof r=="bigint"?`${r}n`:r}function ur(t){return JSON.stringify(t,lr).replace(/"(-?\d+)n"/g,(e,n)=>n)}var P=async({allocations:t,testnet:r=!0}={})=>{let e=er(),n=rr(),o=cr(t),s=new tr(n,e),i=["initialize","-",n];r&&i.push("--testnet");let a=await s.runCommand(i,{stdin:ur(o)});return s};async function C({contractIdentifier:t,contractFilePath:r,provider:e,coverageFolder:n}){let o=await e.runCommand(["launch",t,r,e.dbFilePath,"--costs","--assets",...y(n)]);if(nr(o.stderr))throw new Error(`Error on ${r}:
4
- ${o.stderr}
5
- `);let s=JSON.parse(o.stdout);if(s.error){let{initialization:i}=s.error;if(i!=null&&i.includes(`
6
- Near:
7
- `)){let[a,c]=i.split(`
8
- Near:
9
- `),m="",O=/start_line: (\d+),/.exec(c);throw O&&(m=O[1]),new Error(`Error on ${r}:
10
- ${a}
11
- ${m?`Near line ${m}`:""}
12
- Raw trace:
13
- ${c}
14
- `)}throw new Error(`Error on ${r}:
15
- ${JSON.stringify(s.error,null,2)}
16
- `)}}function h(t){return ir(t,or.ContractEvent).map(r=>{let e=r.contract_event.raw_value,n=ar(e);return sr(n)})}import{hexToCV as A}from"micro-stacks/clarity";import{join as N}from"path";import{cvToValue as B}from"@clarigen/core";import{intToBigInt as dr}from"micro-stacks/common";var p="ST000000000000000000002AMW42H.clarigen-test-utils";async function F(t){let r=N(d,"..","..","contracts","test-utils.clar");d.includes("dist")&&(r=N(d,"..","contracts","test-utils.clar")),await C({contractIdentifier:p,provider:t,contractFilePath:r})}function x(t){return"clarityBin"in t?t.clarityBin:t}async function pr(t){let r=x(t),{output_serialized:e}=await v({contractAddress:p,functionName:"get-block-height",args:[],provider:r}),n=A(e);return B(n)}async function vr(t){let r=x(t);await f({contractAddress:p,functionName:"mine-block",args:[],provider:r,senderAddress:"ST000000000000000000002AMW42H"})}async function mr(t,r){let e=dr(t);for(let n=0;n<e;n++)await vr(r)}async function gr(t,r){let e=x(t),{output_serialized:n}=await v({contractAddress:p,functionName:"get-stx-balance",args:[`'${r}`],provider:e}),o=A(n);return B(o)}import{mkdir as fr,readdir as Cr,unlink as yr}from"fs/promises";import{join as _,resolve as Er}from"path";async function Pr(t){let r=Er(process.cwd(),"coverage");try{await fr(r)}catch{}let n=(await Cr(r)).map(o=>yr(_(r,o)));return await Promise.all(n),r}async function xr(t,r){let e=_(r,"clarigen.lcov");await t.runCommand(["make_lcov",r,e])}function Tr(t=Rr.testnetP2PKH){let r=Or(),e=kr(r);return br(e.data,t)}import{cvToString as V,cvToValue as $}from"@clarigen/core";import{hexToCV as I,responseErrorCV as wr,responseOkCV as hr}from"micro-stacks/clarity";function S(t){return t.map(r=>V(r))}function b(t){return`${t.contractAddress}.${t.contractName}`}function J(t){return t===""?[]:t.split(`
17
- `).map(r=>r.slice(62))}function z(t){let r=I(t.output_serialized);return{value:$(r,!0),clarityValue:r,logs:J(t.stderr),costs:t.costs}}async function K({tx:t,bin:r,coverageFolder:e}){let n=await v({functionName:t.function.name,args:S(t.functionArgs),contractAddress:b(t),provider:r,coverageFolder:e});return z(n)}async function R({contractAddress:t,code:r,bin:e,coverageFolder:n}){let o=await E({contractAddress:t,code:r,provider:e,coverageFolder:n});return z(o)}async function L({tx:t,senderAddress:r,bin:e,coverageFolder:n}){let o=await f({contractAddress:b(t),senderAddress:r,provider:e,functionName:t.function.name,args:S(t.functionArgs),coverageFolder:n}),s=I(o.output_serialized),a={value:$(s),logs:J(o.stderr),costs:o.costs};return o.success?u(l({},a),{isOk:!0,response:hr(s),assets:o.assets,events:o.events,prints:h(o.events)}):u(l({},a),{isOk:!1,response:wr(s)})}async function j({map:t,bin:r}){let e=`(map-get? ${t.map.name} ${V(t.key)})`;return(await R({contractAddress:b(t),code:e,bin:r})).value}import{resolve as Br}from"path";var G=class{constructor(r){this.clarityBin=r}static async fromContracts(r,e={}){let n=e.clarityBin||await P({allocations:e.accounts}),o={},s=e.coverageFolder;process.env.CLARIGEN_COVERAGE&&(s=Br(process.cwd(),"coverage")),await F(n);for(let a in r)if(Object.prototype.hasOwnProperty.call(r,a)){let c=r[a],m=D(c);await C({contractIdentifier:m,contractFilePath:c.contractFile,provider:n,coverageFolder:s});let k=c.contract(c.address,c.name);o[a]={identifier:D(c),contract:k}}let i=new this(n);return i.coverageFolder=s,{deployed:o,provider:i}}ro(r){return K({tx:r,bin:this.clarityBin,coverageFolder:this.coverageFolder})}async rov(r){return(await this.ro(r)).value}async roOk(r){let e=await this.ro(r),n=Nr(e.value);return u(l({},e),{value:n})}async roErr(r){let e=await this.ro(r),n=Ar(e.value);return u(l({},e),{value:n})}async rovOk(r){return(await this.roOk(r)).value}async rovErr(r){return(await this.roErr(r)).value}tx(r,e){return L({tx:r,senderAddress:e,bin:this.clarityBin,coverageFolder:this.coverageFolder})}async txOk(r,e){let n=await this.tx(r,e);if(!n.isOk)throw new Error(`Expected OK, received error: ${n.value}`);return n}async txErr(r,e){let n=await this.tx(r,e);if(n.isOk)throw new Error(`Expected Err, received ok: ${n.value}`);return n}evalCode(r,e=p){return R({contractAddress:e,code:r,bin:this.clarityBin,coverageFolder:this.coverageFolder})}async eval(r,e=p){return(await this.evalCode(r,e)).value}mapGet(r){return j({map:r,bin:this.clarityBin})}};export{G as TestProvider,P as createClarityBin,v as evalJson,f as executeJson,xr as finishCoverage,pr as getBlockHeight,gr as getStxBalance,Tr as makeRandomAddress,mr as mineBlocks,Pr as setupCoverage};
1
+ var H=Object.defineProperty,$=Object.defineProperties;var J=Object.getOwnPropertyDescriptors;var P=Object.getOwnPropertySymbols;var z=Object.prototype.hasOwnProperty,G=Object.prototype.propertyIsEnumerable;var k=(r,t,e)=>t in r?H(r,t,{enumerable:!0,configurable:!0,writable:!0,value:e}):r[t]=e,u=(r,t)=>{for(var e in t||(t={}))z.call(t,e)&&k(r,e,t[e]);if(P)for(var e of P(t))G.call(t,e)&&k(r,e,t[e]);return r},d=(r,t)=>$(r,J(t));import{fileURLToPath as L}from"url";import U from"path";var M=()=>L(import.meta.url),j=()=>U.dirname(M()),a=j();import{deployContract as Pt,createClarityBin as kt}from"@clarigen/native-bin";import{getContractIdentifier as _,expectOk as bt,expectErr as Tt}from"@clarigen/core";import{publicKeyToStxAddress as at,StacksNetworkVersion as st}from"micro-stacks/crypto";import{getPublicKeyFromStacksPrivateKey as ct,makeRandomPrivKey as lt}from"micro-stacks/transactions";import{hexToCV as T}from"micro-stacks/clarity";import{join as b}from"path";import{cvToValue as O}from"@clarigen/core";import{deployContract as D,evalJson as R,executeJson as W}from"@clarigen/native-bin";import{intToBigInt as q}from"micro-stacks/common";var s="ST000000000000000000002AMW42H.clarigen-test-utils";async function x(r){let t=b(a,"..","..","contracts","test-utils.clar");a.includes("dist")&&(t=b(a,"..","contracts","test-utils.clar")),await D({contractIdentifier:s,provider:r,contractFilePath:t})}function m(r){return"clarityBin"in r?r.clarityBin:r}async function Q(r){let t=m(r),{output_serialized:e}=await R({contractAddress:s,functionName:"get-block-height",args:[],provider:t}),o=T(e);return O(o)}async function X(r){let t=m(r);await W({contractAddress:s,functionName:"mine-block",args:[],provider:t,senderAddress:"ST000000000000000000002AMW42H"})}async function Y(r,t){let e=q(r);for(let o=0;o<e;o++)await X(t)}async function Z(r,t){let e=m(r),{output_serialized:o}=await R({contractAddress:s,functionName:"get-stx-balance",args:[`'${t}`],provider:e}),n=T(o);return O(n)}import{mkdir as tt,readdir as rt,unlink as et}from"fs/promises";import{join as E,resolve as ot}from"path";async function nt(r){let t=ot(process.cwd(),"coverage");try{await tt(t)}catch{}let o=(await rt(t)).map(n=>et(E(t,n)));return await Promise.all(o),t}async function it(r,t){let e=E(t,"clarigen.lcov");await r.runCommand(["make_lcov",t,e])}function ut(r=st.testnetP2PKH){let t=lt(),e=ct(t);return at(e.data,r)}import{cvToString as B,cvToValue as C,filterEvents as dt,CoreNodeEventType as pt}from"@clarigen/core";import{evalRaw as vt,evalJson as mt,executeJson as Ct}from"@clarigen/native-bin";import{hexToCV as y,responseErrorCV as yt,responseOkCV as ft}from"micro-stacks/clarity";function gt(r){return dt(r,pt.ContractEvent).map(t=>{let e=t.contract_event.raw_value,o=y(e);return C(o)})}function h(r){return r.map(t=>B(t))}function f(r){return`${r.contractAddress}.${r.contractName}`}function w(r){return r===""?[]:r.split(`
2
+ `).map(t=>t.slice(62))}function N(r){let t=y(r.output_serialized);return{value:C(t,!0),clarityValue:t,logs:w(r.stderr),costs:r.costs}}async function A({tx:r,bin:t,coverageFolder:e}){let o=await mt({functionName:r.function.name,args:h(r.functionArgs),contractAddress:f(r),provider:t,coverageFolder:e});return N(o)}async function g({contractAddress:r,code:t,bin:e,coverageFolder:o}){let n=await vt({contractAddress:r,code:t,provider:e,coverageFolder:o});return N(n)}async function V({tx:r,senderAddress:t,bin:e,coverageFolder:o}){let n=await Ct({contractAddress:f(r),senderAddress:t,provider:e,functionName:r.function.name,args:h(r.functionArgs),coverageFolder:o}),i=y(n.output_serialized),c={value:C(i),logs:w(n.stderr),costs:n.costs};return n.success?d(u({},c),{isOk:!0,response:ft(i),assets:n.assets,events:n.events,prints:gt(n.events)}):d(u({},c),{isOk:!1,response:yt(i)})}async function F({map:r,bin:t}){let e=`(map-get? ${r.map.name} ${B(r.key)})`;return(await g({contractAddress:f(r),code:e,bin:t})).value}import{resolve as Ot}from"path";import{Allocation as Or,createClarityBin as Rr,executeJson as xr,evalJson as Er}from"@clarigen/native-bin";var I=class{constructor(t){this.clarityBin=t}static async fromContracts(t,e={}){let o=e.clarityBin||await kt({allocations:e.accounts}),n={},i=e.coverageFolder;process.env.CLARIGEN_COVERAGE&&(i=Ot(process.cwd(),"coverage")),await x(o);for(let c in t)if(Object.prototype.hasOwnProperty.call(t,c)){let l=t[c],S=_(l);await Pt({contractIdentifier:S,contractFilePath:l.contractFile,provider:o,coverageFolder:i});let K=l.contract(l.address,l.name);n[c]={identifier:_(l),contract:K}}let v=new this(o);return v.coverageFolder=i,{deployed:n,provider:v}}ro(t){return A({tx:t,bin:this.clarityBin,coverageFolder:this.coverageFolder})}async rov(t){return(await this.ro(t)).value}async roOk(t){let e=await this.ro(t),o=bt(e.value);return d(u({},e),{value:o})}async roErr(t){let e=await this.ro(t),o=Tt(e.value);return d(u({},e),{value:o})}async rovOk(t){return(await this.roOk(t)).value}async rovErr(t){return(await this.roErr(t)).value}tx(t,e){return V({tx:t,senderAddress:e,bin:this.clarityBin,coverageFolder:this.coverageFolder})}async txOk(t,e){let o=await this.tx(t,e);if(!o.isOk)throw new Error(`Expected OK, received error: ${o.value}`);return o}async txErr(t,e){let o=await this.tx(t,e);if(o.isOk)throw new Error(`Expected Err, received ok: ${o.value}`);return o}evalCode(t,e=s){return g({contractAddress:e,code:t,bin:this.clarityBin,coverageFolder:this.coverageFolder})}async eval(t,e=s){return(await this.evalCode(t,e)).value}mapGet(t){return F({map:t,bin:this.clarityBin})}};export{Or as Allocation,I as TestProvider,Rr as createClarityBin,Er as evalJson,xr as executeJson,it as finishCoverage,Q as getBlockHeight,Z as getStxBalance,ut as makeRandomAddress,Y as mineBlocks,nt as setupCoverage};
package/package.json CHANGED
@@ -1,5 +1,5 @@
1
1
  {
2
- "version": "1.0.0-next.17",
2
+ "version": "1.0.0-next.18",
3
3
  "license": "MIT",
4
4
  "types": "./dist/index.d.ts",
5
5
  "main": "./dist/index.js",
@@ -27,12 +27,12 @@
27
27
  "name": "@clarigen/test",
28
28
  "author": "Hank Stoever",
29
29
  "dependencies": {
30
- "@clarigen/core": "1.0.0-next.17",
31
- "@clarigen/native-bin": "1.0.0-next.17",
30
+ "@clarigen/core": "1.0.0-next.18",
31
+ "@clarigen/native-bin": "1.0.0-next.18",
32
32
  "micro-stacks": "^0.2.0"
33
33
  },
34
34
  "publishConfig": {
35
35
  "access": "public"
36
36
  },
37
- "gitHead": "6f61daa93601c4f1517dcd83b4e027a688f2fb6c"
37
+ "gitHead": "597b4b53e6c876336126bf40b4b8850d1385af8f"
38
38
  }