@clarigen/test 1.0.0-next.22 → 1.0.0-next.26

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,5 +1,5 @@
1
- import { CoreNodeEvent, ResultAssets, Contracts, ContractFactory, AllContracts, ContractCall, Response, ContractCalls, ContractInstances } from '@clarigen/core';
2
- import { Costs, NativeClarityBinProvider, ClarinetAccounts } from '@clarigen/native-bin';
1
+ import { CoreNodeEvent, ResultAssets, Project, AllContracts, DeploymentsForContracts, ProjectFactory, Contracts, ContractFactory, ContractCall, Response, ContractCalls, ContractInstances, ResponseOk, ResponseErr } from '@clarigen/core';
2
+ import { Costs, ClarinetAccount, NativeClarityBinProvider, ClarinetAccounts } from '@clarigen/native-bin';
3
3
  export { Allocation, createClarityBin, evalJson, executeJson } from '@clarigen/native-bin';
4
4
  import { ClarityValue, ResponseCV } from 'micro-stacks/clarity';
5
5
  import { StacksNetworkVersion } from 'micro-stacks/crypto';
@@ -29,7 +29,22 @@ interface PublicResultOk<T> extends PublicResultBase<T> {
29
29
  assets: ResultAssets;
30
30
  prints: any[];
31
31
  }
32
- declare type PublicResult<Ok, Err> = PublicResultOk<Ok> | PublicResultErr<Err>;
32
+ declare type PublicResult<R> = PublicResultOk<R> | PublicResultErr<R>;
33
+
34
+ declare type Account = Omit<ClarinetAccount, 'balance'> & {
35
+ balance: number;
36
+ };
37
+ interface Simnet {
38
+ accounts: {
39
+ deployer: Account;
40
+ [key: string]: Account;
41
+ };
42
+ deployment: {
43
+ identifier: string;
44
+ file: string;
45
+ }[];
46
+ }
47
+ declare function testFactory<P extends Project<C, D>, C extends AllContracts, D extends DeploymentsForContracts<C>>(project: P): ProjectFactory<P, 'simnet'>;
33
48
 
34
49
  declare type Provider = NativeClarityBinProvider | {
35
50
  clarityBin: NativeClarityBinProvider;
@@ -47,29 +62,33 @@ interface FromContractsOptions {
47
62
  accounts?: ClarinetAccounts;
48
63
  clarityBin?: NativeClarityBinProvider;
49
64
  coverageFolder?: string;
65
+ clarinetPath?: string;
50
66
  }
51
67
  interface FromContracts<T extends Contracts<any>> {
52
68
  deployed: ContractInstances<T>;
53
69
  provider: TestProvider;
54
70
  }
71
+ declare type OkType<T> = T extends ResponseOk<infer Ok, unknown> ? Ok : never;
72
+ declare type ErrType<T> = T extends ResponseErr<unknown, infer Err> ? Err : never;
55
73
  declare class TestProvider {
56
74
  clarityBin: NativeClarityBinProvider;
57
75
  coverageFolder?: string;
58
76
  constructor(clarityBin: NativeClarityBinProvider);
59
77
  static fromContracts<T extends Contracts<any>>(contracts: T, options?: FromContractsOptions): Promise<FromContracts<T>>;
78
+ static fromProject(simnet: Simnet, options?: FromContractsOptions): Promise<TestProvider>;
60
79
  static fromFactory(contracts: ContractFactory<AllContracts>, options?: FromContractsOptions): Promise<TestProvider>;
61
80
  ro<T>(tx: ContractCall<T>): Promise<ReadOnlyResult<T>>;
62
81
  rov<T>(tx: ContractCall<T>): Promise<T>;
63
- roOk<Ok, Err>(tx: ContractCall<Response<Ok, Err>>): Promise<ReadOnlyResult<Ok>>;
64
- roErr<Ok, Err>(tx: ContractCall<Response<Ok, Err>>): Promise<ReadOnlyResult<Err>>;
65
- rovOk<Ok, Err>(tx: ContractCall<Response<Ok, Err>>): Promise<Ok>;
66
- rovErr<Ok, Err>(tx: ContractCall<Response<Ok, Err>>): Promise<Err>;
67
- tx<Ok, Err>(tx: ContractCalls.Public<Ok, Err>, senderAddress: string): Promise<PublicResult<Ok, Err>>;
68
- txOk<Ok, Err>(tx: ContractCalls.Public<Ok, Err>, senderAddress: string): Promise<PublicResultOk<Ok>>;
69
- txErr<Ok, Err>(tx: ContractCalls.Public<Ok, Err>, senderAddress: string): Promise<PublicResultErr<Err>>;
82
+ roOk<R extends Response<unknown, unknown>>(tx: ContractCall<R>): Promise<ReadOnlyResult<OkType<R>>>;
83
+ roErr<R extends Response<unknown, unknown>>(tx: ContractCall<R>): Promise<ReadOnlyResult<ErrType<R>>>;
84
+ rovOk<R extends Response<unknown, unknown>>(tx: ContractCall<R>): Promise<OkType<R>>;
85
+ rovErr<R extends Response<unknown, unknown>>(tx: ContractCall<R>): Promise<ErrType<R>>;
86
+ tx<R extends Response<unknown, unknown>>(tx: ContractCall<R>, senderAddress: string): Promise<PublicResult<R>>;
87
+ txOk<R extends Response<unknown, unknown>>(tx: ContractCall<R>, senderAddress: string): Promise<PublicResultOk<OkType<R>>>;
88
+ txErr<R extends Response<unknown, unknown>>(tx: ContractCall<R>, senderAddress: string): Promise<PublicResultErr<ErrType<R>>>;
70
89
  evalCode<T>(code: string, contractAddress?: string): Promise<ReadOnlyResult<T>>;
71
90
  eval<T>(code: string, contractAddress?: string): Promise<T>;
72
91
  mapGet<T extends ContractCalls.Map<any, Val>, Val>(map: T): Promise<Val | null>;
73
92
  }
74
93
 
75
- export { PublicResultErr, PublicResultOk, ReadOnlyResult, TestProvider, finishCoverage, getBlockHeight, getStxBalance, makeRandomAddress, mineBlocks, setupCoverage };
94
+ export { PublicResultErr, PublicResultOk, ReadOnlyResult, Simnet, TestProvider, finishCoverage, getBlockHeight, getStxBalance, makeRandomAddress, mineBlocks, setupCoverage, testFactory };
package/dist/index.js CHANGED
@@ -141,6 +141,8 @@ function makeRandomAddress(version = _crypto.StacksNetworkVersion.testnetP2PKH)
141
141
 
142
142
 
143
143
 
144
+
145
+
144
146
  function getPrints(events) {
145
147
  return _core.filterEvents.call(void 0, events, _core.CoreNodeEventType.ContractEvent).map((e) => {
146
148
  const hex = e.contract_event.raw_value;
@@ -213,10 +215,11 @@ async function tx({
213
215
  });
214
216
  const resultCV = _clarity.hexToCV.call(void 0, result.output_serialized);
215
217
  const value = _core.cvToValue.call(void 0, resultCV);
218
+ const resp = result.success ? _core.ok.call(void 0, value) : _core.err.call(void 0, value);
216
219
  const baseReturn = {
217
- value,
218
220
  logs: getLogs(result.stderr),
219
- costs: result.costs
221
+ costs: result.costs,
222
+ value: resp
220
223
  };
221
224
  if (result.success) {
222
225
  return __spreadProps(__spreadValues({}, baseReturn), {
@@ -248,6 +251,16 @@ async function mapGet({
248
251
  // src/index.ts
249
252
 
250
253
 
254
+ // src/utils/test-factory.ts
255
+
256
+
257
+
258
+ function testFactory(project) {
259
+ return _core.projectFactory.call(void 0, project, "simnet");
260
+ }
261
+
262
+ // src/index.ts
263
+
251
264
  var TestProvider = class {
252
265
  constructor(clarityBin) {
253
266
  this.clarityBin = clarityBin;
@@ -286,6 +299,34 @@ var TestProvider = class {
286
299
  provider
287
300
  };
288
301
  }
302
+ static async fromProject(simnet, options = {}) {
303
+ const allocations = Object.fromEntries(Object.entries(simnet.accounts).map(([name, account]) => {
304
+ return [name, __spreadProps(__spreadValues({}, account), { balance: BigInt(account.balance) })];
305
+ }));
306
+ const clarityBin = options.clarityBin || await _nativebin.createClarityBin.call(void 0, {
307
+ allocations
308
+ });
309
+ let coverageFolder = options.coverageFolder;
310
+ if (process.env.CLARIGEN_COVERAGE) {
311
+ coverageFolder = _path.resolve.call(void 0, process.cwd(), "coverage");
312
+ }
313
+ await deployUtilContract(clarityBin);
314
+ for (const contract of simnet.deployment) {
315
+ let contractFilePath = contract.file;
316
+ if (options.clarinetPath) {
317
+ contractFilePath = _path.resolve.call(void 0, process.cwd(), options.clarinetPath, contractFilePath);
318
+ }
319
+ await _nativebin.deployContract.call(void 0, {
320
+ contractIdentifier: contract.identifier,
321
+ contractFilePath,
322
+ provider: clarityBin,
323
+ coverageFolder
324
+ });
325
+ }
326
+ const provider = new this(clarityBin);
327
+ provider.coverageFolder = coverageFolder;
328
+ return provider;
329
+ }
289
330
  static async fromFactory(contracts, options = {}) {
290
331
  const clarityBin = options.clarityBin || await _nativebin.createClarityBin.call(void 0, {
291
332
  allocations: options.accounts
@@ -298,7 +339,10 @@ var TestProvider = class {
298
339
  for (const k in contracts) {
299
340
  if (Object.prototype.hasOwnProperty.call(contracts, k)) {
300
341
  const contract = contracts[k];
301
- const contractFilePath = contract.contractFile;
342
+ let contractFilePath = contract.contractFile;
343
+ if (options.clarinetPath) {
344
+ contractFilePath = _path.resolve.call(void 0, process.cwd(), options.clarinetPath, contractFilePath);
345
+ }
302
346
  if (typeof contractFilePath === "undefined") {
303
347
  throw new Error("Cannot setup @clarigen/test - missing contract file.");
304
348
  }
@@ -351,15 +395,21 @@ var TestProvider = class {
351
395
  }
352
396
  async txOk(tx2, senderAddress) {
353
397
  const result = await this.tx(tx2, senderAddress);
398
+ const value = _core.expectOk.call(void 0, result.value);
354
399
  if (!result.isOk)
355
400
  throw new Error(`Expected OK, received error: ${String(result.value)}`);
356
- return result;
401
+ return __spreadProps(__spreadValues({}, result), {
402
+ value
403
+ });
357
404
  }
358
405
  async txErr(tx2, senderAddress) {
359
406
  const result = await this.tx(tx2, senderAddress);
407
+ const value = _core.expectErr.call(void 0, result.value);
360
408
  if (result.isOk)
361
409
  throw new Error(`Expected Err, received ok: ${String(result.value)}`);
362
- return result;
410
+ return __spreadProps(__spreadValues({}, result), {
411
+ value
412
+ });
363
413
  }
364
414
  evalCode(code, contractAddress = UTIL_CONTRACT_ID) {
365
415
  return evalCode({
@@ -389,4 +439,5 @@ var TestProvider = class {
389
439
 
390
440
 
391
441
 
392
- exports.Allocation = _nativebin.Allocation; exports.TestProvider = TestProvider; exports.createClarityBin = _nativebin.createClarityBin; exports.evalJson = _nativebin.evalJson; exports.executeJson = _nativebin.executeJson; exports.finishCoverage = finishCoverage; exports.getBlockHeight = getBlockHeight; exports.getStxBalance = getStxBalance; exports.makeRandomAddress = makeRandomAddress; exports.mineBlocks = mineBlocks; exports.setupCoverage = setupCoverage;
442
+
443
+ exports.Allocation = _nativebin.Allocation; exports.TestProvider = TestProvider; exports.createClarityBin = _nativebin.createClarityBin; exports.evalJson = _nativebin.evalJson; exports.executeJson = _nativebin.executeJson; exports.finishCoverage = finishCoverage; exports.getBlockHeight = getBlockHeight; exports.getStxBalance = getStxBalance; exports.makeRandomAddress = makeRandomAddress; exports.mineBlocks = mineBlocks; exports.setupCoverage = setupCoverage; exports.testFactory = testFactory;
package/dist/index.mjs CHANGED
@@ -129,7 +129,9 @@ import {
129
129
  cvToString,
130
130
  cvToValue as cvToValue2,
131
131
  filterEvents,
132
- CoreNodeEventType
132
+ CoreNodeEventType,
133
+ ok,
134
+ err
133
135
  } from "@clarigen/core";
134
136
  import {
135
137
  evalRaw,
@@ -213,10 +215,11 @@ async function tx({
213
215
  });
214
216
  const resultCV = hexToCV2(result.output_serialized);
215
217
  const value = cvToValue2(resultCV);
218
+ const resp = result.success ? ok(value) : err(value);
216
219
  const baseReturn = {
217
- value,
218
220
  logs: getLogs(result.stderr),
219
- costs: result.costs
221
+ costs: result.costs,
222
+ value: resp
220
223
  };
221
224
  if (result.success) {
222
225
  return __spreadProps(__spreadValues({}, baseReturn), {
@@ -247,6 +250,16 @@ async function mapGet({
247
250
 
248
251
  // src/index.ts
249
252
  import { resolve as resolve2 } from "path";
253
+
254
+ // src/utils/test-factory.ts
255
+ import {
256
+ projectFactory
257
+ } from "@clarigen/core";
258
+ function testFactory(project) {
259
+ return projectFactory(project, "simnet");
260
+ }
261
+
262
+ // src/index.ts
250
263
  import { Allocation, createClarityBin as createClarityBin2, executeJson as executeJson3, evalJson as evalJson3 } from "@clarigen/native-bin";
251
264
  var TestProvider = class {
252
265
  constructor(clarityBin) {
@@ -286,6 +299,34 @@ var TestProvider = class {
286
299
  provider
287
300
  };
288
301
  }
302
+ static async fromProject(simnet, options = {}) {
303
+ const allocations = Object.fromEntries(Object.entries(simnet.accounts).map(([name, account]) => {
304
+ return [name, __spreadProps(__spreadValues({}, account), { balance: BigInt(account.balance) })];
305
+ }));
306
+ const clarityBin = options.clarityBin || await createClarityBin({
307
+ allocations
308
+ });
309
+ let coverageFolder = options.coverageFolder;
310
+ if (process.env.CLARIGEN_COVERAGE) {
311
+ coverageFolder = resolve2(process.cwd(), "coverage");
312
+ }
313
+ await deployUtilContract(clarityBin);
314
+ for (const contract of simnet.deployment) {
315
+ let contractFilePath = contract.file;
316
+ if (options.clarinetPath) {
317
+ contractFilePath = resolve2(process.cwd(), options.clarinetPath, contractFilePath);
318
+ }
319
+ await deployContract2({
320
+ contractIdentifier: contract.identifier,
321
+ contractFilePath,
322
+ provider: clarityBin,
323
+ coverageFolder
324
+ });
325
+ }
326
+ const provider = new this(clarityBin);
327
+ provider.coverageFolder = coverageFolder;
328
+ return provider;
329
+ }
289
330
  static async fromFactory(contracts, options = {}) {
290
331
  const clarityBin = options.clarityBin || await createClarityBin({
291
332
  allocations: options.accounts
@@ -298,7 +339,10 @@ var TestProvider = class {
298
339
  for (const k in contracts) {
299
340
  if (Object.prototype.hasOwnProperty.call(contracts, k)) {
300
341
  const contract = contracts[k];
301
- const contractFilePath = contract.contractFile;
342
+ let contractFilePath = contract.contractFile;
343
+ if (options.clarinetPath) {
344
+ contractFilePath = resolve2(process.cwd(), options.clarinetPath, contractFilePath);
345
+ }
302
346
  if (typeof contractFilePath === "undefined") {
303
347
  throw new Error("Cannot setup @clarigen/test - missing contract file.");
304
348
  }
@@ -351,15 +395,21 @@ var TestProvider = class {
351
395
  }
352
396
  async txOk(tx2, senderAddress) {
353
397
  const result = await this.tx(tx2, senderAddress);
398
+ const value = expectOk(result.value);
354
399
  if (!result.isOk)
355
400
  throw new Error(`Expected OK, received error: ${String(result.value)}`);
356
- return result;
401
+ return __spreadProps(__spreadValues({}, result), {
402
+ value
403
+ });
357
404
  }
358
405
  async txErr(tx2, senderAddress) {
359
406
  const result = await this.tx(tx2, senderAddress);
407
+ const value = expectErr(result.value);
360
408
  if (result.isOk)
361
409
  throw new Error(`Expected Err, received ok: ${String(result.value)}`);
362
- return result;
410
+ return __spreadProps(__spreadValues({}, result), {
411
+ value
412
+ });
363
413
  }
364
414
  evalCode(code, contractAddress = UTIL_CONTRACT_ID) {
365
415
  return evalCode({
@@ -388,5 +438,6 @@ export {
388
438
  getStxBalance,
389
439
  makeRandomAddress,
390
440
  mineBlocks,
391
- setupCoverage
441
+ setupCoverage,
442
+ testFactory
392
443
  };
package/package.json CHANGED
@@ -1,5 +1,5 @@
1
1
  {
2
- "version": "1.0.0-next.22",
2
+ "version": "1.0.0-next.26",
3
3
  "license": "MIT",
4
4
  "types": "./dist/index.d.ts",
5
5
  "main": "./dist/index.js",
@@ -16,12 +16,11 @@
16
16
  "name": "@clarigen/test",
17
17
  "author": "Hank Stoever",
18
18
  "devDependencies": {
19
- "jest-environment-node": "28.1.1",
20
- "@clarigen/cli": "1.0.0-next.22"
19
+ "jest-environment-node": "28.1.1"
21
20
  },
22
21
  "dependencies": {
23
- "@clarigen/core": "1.0.0-next.22",
24
- "@clarigen/native-bin": "1.0.0-next.22",
22
+ "@clarigen/core": "1.0.0-next.29",
23
+ "@clarigen/native-bin": "1.0.0-next.26",
25
24
  "micro-stacks": "^0.5.2"
26
25
  },
27
26
  "publishConfig": {
@@ -34,7 +33,7 @@
34
33
  "test": "pnpm build-test-types && jest",
35
34
  "lint": "eslint \"src/**/*.{ts,tsx}\" && prettier --check src/**/*.ts",
36
35
  "typecheck": "tsc --noEmit",
37
- "build-test-types": "cd test/clarinet-project && pnpm clarigen && cd ../..",
38
- "publish:dev": "yalc publish --push"
36
+ "build-test-types": "sh build-types.sh",
37
+ "publish:dev": "pnpm build && yalc publish --push"
39
38
  }
40
39
  }