@openzeppelin/wizard-stellar 0.4.2 → 0.4.4

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 (56) hide show
  1. package/README.md +2 -2
  2. package/dist/common-options.js +2 -4
  3. package/dist/common-options.js.map +1 -1
  4. package/dist/contract.d.ts +9 -3
  5. package/dist/contract.d.ts.map +1 -1
  6. package/dist/contract.js +13 -10
  7. package/dist/contract.js.map +1 -1
  8. package/dist/fungible.d.ts +1 -1
  9. package/dist/fungible.js +8 -10
  10. package/dist/fungible.js.map +1 -1
  11. package/dist/generate/alternatives.js +1 -1
  12. package/dist/generate/alternatives.js.map +1 -1
  13. package/dist/generate/non-fungible.d.ts.map +1 -1
  14. package/dist/generate/non-fungible.js +1 -0
  15. package/dist/generate/non-fungible.js.map +1 -1
  16. package/dist/non-fungible.d.ts +1 -0
  17. package/dist/non-fungible.d.ts.map +1 -1
  18. package/dist/non-fungible.js +12 -11
  19. package/dist/non-fungible.js.map +1 -1
  20. package/dist/print.d.ts.map +1 -1
  21. package/dist/print.js +6 -10
  22. package/dist/print.js.map +1 -1
  23. package/dist/set-info.d.ts +1 -2
  24. package/dist/set-info.d.ts.map +1 -1
  25. package/dist/set-info.js +5 -9
  26. package/dist/set-info.js.map +1 -1
  27. package/dist/stablecoin.js +3 -4
  28. package/dist/stablecoin.js.map +1 -1
  29. package/dist/utils/compile-test.d.ts +12 -0
  30. package/dist/utils/compile-test.d.ts.map +1 -0
  31. package/dist/utils/compile-test.js +49 -0
  32. package/dist/utils/compile-test.js.map +1 -0
  33. package/dist/utils/define-functions.js +4 -7
  34. package/dist/utils/define-functions.js.map +1 -1
  35. package/dist/utils/zip-test.d.ts +9 -0
  36. package/dist/utils/zip-test.d.ts.map +1 -0
  37. package/dist/utils/zip-test.js +43 -0
  38. package/dist/utils/zip-test.js.map +1 -0
  39. package/dist/zip-rust.d.ts.map +1 -1
  40. package/dist/zip-rust.js +2 -16
  41. package/dist/zip-rust.js.map +1 -1
  42. package/dist/zip-scaffold.d.ts.map +1 -1
  43. package/dist/zip-shared.d.ts.map +1 -1
  44. package/dist/zip-shared.js +18 -1
  45. package/dist/zip-shared.js.map +1 -1
  46. package/package.json +1 -1
  47. package/src/contract.ts +11 -5
  48. package/src/fungible.ts +1 -1
  49. package/src/generate/non-fungible.ts +1 -0
  50. package/src/non-fungible.ts +6 -3
  51. package/src/print.ts +4 -3
  52. package/src/set-info.ts +3 -11
  53. package/src/utils/compile-test.ts +69 -0
  54. package/src/utils/zip-test.ts +55 -0
  55. package/src/zip-rust.ts +1 -17
  56. package/src/zip-shared.ts +17 -0
package/dist/set-info.js CHANGED
@@ -1,17 +1,13 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.defaults = exports.infoOptions = exports.TAG_SECURITY_CONTACT = void 0;
3
+ exports.defaults = exports.infoOptions = void 0;
4
4
  exports.setInfo = setInfo;
5
- exports.TAG_SECURITY_CONTACT = `@custom:security-contact`;
6
5
  exports.infoOptions = [{}, { license: 'WTFPL' }];
7
6
  exports.defaults = { license: 'MIT' };
8
- function setInfo(c, info) {
9
- const { securityContact, license } = info;
10
- if (securityContact) {
11
- c.addSecurityTag(securityContact);
12
- }
13
- if (license) {
7
+ function setInfo(c, { securityContact, license }) {
8
+ if (securityContact)
9
+ c.addContractMetadata({ key: 'security_contact', value: securityContact });
10
+ if (license)
14
11
  c.license = license;
15
- }
16
12
  }
17
13
  //# sourceMappingURL=set-info.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"set-info.js","sourceRoot":"","sources":["../src/set-info.ts"],"names":[],"mappings":";;;AAaA,0BAUC;AArBY,QAAA,oBAAoB,GAAG,0BAA0B,CAAC;AAElD,QAAA,WAAW,GAAG,CAAC,EAAE,EAAE,EAAE,OAAO,EAAE,OAAO,EAAE,CAAU,CAAC;AAElD,QAAA,QAAQ,GAAS,EAAE,OAAO,EAAE,KAAK,EAAE,CAAC;AAOjD,SAAgB,OAAO,CAAC,CAAkB,EAAE,IAAU;IACpD,MAAM,EAAE,eAAe,EAAE,OAAO,EAAE,GAAG,IAAI,CAAC;IAE1C,IAAI,eAAe,EAAE,CAAC;QACpB,CAAC,CAAC,cAAc,CAAC,eAAe,CAAC,CAAC;IACpC,CAAC;IAED,IAAI,OAAO,EAAE,CAAC;QACZ,CAAC,CAAC,OAAO,GAAG,OAAO,CAAC;IACtB,CAAC;AACH,CAAC"}
1
+ {"version":3,"file":"set-info.js","sourceRoot":"","sources":["../src/set-info.ts"],"names":[],"mappings":";;;AAWA,0BAIC;AAbY,QAAA,WAAW,GAAG,CAAC,EAAE,EAAE,EAAE,OAAO,EAAE,OAAO,EAAE,CAAU,CAAC;AAElD,QAAA,QAAQ,GAAS,EAAE,OAAO,EAAE,KAAK,EAAE,CAAC;AAOjD,SAAgB,OAAO,CAAC,CAAkB,EAAE,EAAE,eAAe,EAAE,OAAO,EAAQ;IAC5E,IAAI,eAAe;QAAE,CAAC,CAAC,mBAAmB,CAAC,EAAE,GAAG,EAAE,kBAAkB,EAAE,KAAK,EAAE,eAAe,EAAE,CAAC,CAAC;IAEhG,IAAI,OAAO;QAAE,CAAC,CAAC,OAAO,GAAG,OAAO,CAAC;AACnC,CAAC"}
@@ -20,12 +20,11 @@ function printStablecoin(opts = exports.defaults) {
20
20
  return (0, print_1.printContract)(buildStablecoin(opts));
21
21
  }
22
22
  function withDefaults(opts) {
23
- var _a, _b, _c;
24
23
  return {
25
24
  ...(0, fungible_1.withDefaults)(opts),
26
- name: (_a = opts.name) !== null && _a !== void 0 ? _a : exports.defaults.name,
27
- symbol: (_b = opts.symbol) !== null && _b !== void 0 ? _b : exports.defaults.symbol,
28
- limitations: (_c = opts.limitations) !== null && _c !== void 0 ? _c : exports.defaults.limitations,
25
+ name: opts.name ?? exports.defaults.name,
26
+ symbol: opts.symbol ?? exports.defaults.symbol,
27
+ limitations: opts.limitations ?? exports.defaults.limitations,
29
28
  };
30
29
  }
31
30
  function isAccessControlRequired(opts) {
@@ -1 +1 @@
1
- {"version":3,"file":"stablecoin.js","sourceRoot":"","sources":["../src/stablecoin.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"stablecoin.js","sourceRoot":"","sources":["../src/stablecoin.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,12 @@
1
+ import type { ExecutionContext } from 'ava';
2
+ import type { GenericOptions } from '../build-generic';
3
+ import type { Contract } from '../contract';
4
+ export declare const runCargoTest: (t: ExecutionContext, temporaryFolder: string) => Promise<void>;
5
+ type WithTemporaryFolderTestFunction<Args extends unknown[]> = (...args: [...Args, ExecutionContext, string]) => Promise<void> | void;
6
+ export type MakeContract = (opt: GenericOptions) => Contract;
7
+ export declare const withTemporaryFolderDo: <Args extends unknown[]>(testFunction: WithTemporaryFolderTestFunction<Args>) => (...testFunctionArguments: Args) => (test: ExecutionContext) => Promise<void>;
8
+ export declare const runRustCompilationTest: (makeContract: MakeContract, opts: GenericOptions, testOptions: {
9
+ snapshotResult: boolean;
10
+ }) => (test: ExecutionContext) => Promise<void>;
11
+ export {};
12
+ //# sourceMappingURL=compile-test.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"compile-test.d.ts","sourceRoot":"","sources":["../../src/utils/compile-test.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,KAAK,CAAC;AAI5C,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,kBAAkB,CAAC;AACvD,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,aAAa,CAAC;AAQ5C,eAAO,MAAM,YAAY,GAAU,GAAG,gBAAgB,EAAE,iBAAiB,MAAM,kBAI9E,CAAC;AAEF,KAAK,+BAA+B,CAAC,IAAI,SAAS,OAAO,EAAE,IAAI,CAC7D,GAAG,IAAI,EAAE,CAAC,GAAG,IAAI,EAAE,gBAAgB,EAAE,MAAM,CAAC,KACzC,OAAO,CAAC,IAAI,CAAC,GAAG,IAAI,CAAC;AAE1B,MAAM,MAAM,YAAY,GAAG,CAAC,GAAG,EAAE,cAAc,KAAK,QAAQ,CAAC;AAE7D,eAAO,MAAM,qBAAqB,GAC/B,IAAI,SAAS,OAAO,EAAE,EAAE,cAAc,+BAA+B,CAAC,IAAI,CAAC,MAC3E,GAAG,uBAAuB,IAAI,MACxB,MAAM,gBAAgB,kBAQ5B,CAAC;AAEJ,eAAO,MAAM,sBAAsB;oBAIA,OAAO;OAdjC,MAAM,gBAAgB,kBAuC9B,CAAC"}
@@ -0,0 +1,49 @@
1
+ "use strict";
2
+ var __importDefault = (this && this.__importDefault) || function (mod) {
3
+ return (mod && mod.__esModule) ? mod : { "default": mod };
4
+ };
5
+ Object.defineProperty(exports, "__esModule", { value: true });
6
+ exports.runRustCompilationTest = exports.withTemporaryFolderDo = exports.runCargoTest = void 0;
7
+ const os_1 = require("os");
8
+ const path_1 = __importDefault(require("path"));
9
+ const util_1 = require("util");
10
+ const child_process_1 = require("child_process");
11
+ const zip_test_1 = require("./zip-test");
12
+ const promises_1 = require("fs/promises");
13
+ const zip_shared_1 = require("../zip-shared");
14
+ const zip_rust_1 = require("../zip-rust");
15
+ const asyncExec = (0, util_1.promisify)(child_process_1.exec);
16
+ const runCargoTest = async (t, temporaryFolder) => {
17
+ const result = await asyncExec(`cd "${temporaryFolder}" && cargo test`);
18
+ t.regex(result.stdout, /0 failed/);
19
+ };
20
+ exports.runCargoTest = runCargoTest;
21
+ const withTemporaryFolderDo = (testFunction) => (...testFunctionArguments) => async (test) => {
22
+ const temporaryFolder = await (0, promises_1.mkdtemp)(path_1.default.join((0, os_1.tmpdir)(), `compilation-test-${crypto.randomUUID()}`));
23
+ try {
24
+ await testFunction(...testFunctionArguments, test, temporaryFolder);
25
+ }
26
+ finally {
27
+ await (0, promises_1.rm)(temporaryFolder, { recursive: true, force: true });
28
+ }
29
+ };
30
+ exports.withTemporaryFolderDo = withTemporaryFolderDo;
31
+ exports.runRustCompilationTest = (0, exports.withTemporaryFolderDo)(async (makeContract, opts, testOptions, test, folderPath) => {
32
+ test.timeout(3000000);
33
+ const scaffoldContractName = (0, zip_shared_1.contractOptionsToContractName)(opts?.kind || 'contract');
34
+ const expectedZipFiles = [
35
+ `contracts/${scaffoldContractName}/src/contract.rs`,
36
+ `contracts/${scaffoldContractName}/src/test.rs`,
37
+ `contracts/${scaffoldContractName}/src/lib.rs`,
38
+ `contracts/${scaffoldContractName}/Cargo.toml`,
39
+ 'Cargo.toml',
40
+ 'README.md',
41
+ ];
42
+ const zip = await (0, zip_rust_1.zipRustProject)(makeContract(opts), opts);
43
+ (0, zip_test_1.assertLayout)(test, zip, (0, zip_test_1.expandPathsFromFilesPaths)(expectedZipFiles));
44
+ await (0, zip_test_1.extractPackage)(zip, folderPath);
45
+ await (0, exports.runCargoTest)(test, folderPath);
46
+ if (testOptions.snapshotResult)
47
+ await (0, zip_test_1.snapshotZipContents)(test, zip, expectedZipFiles);
48
+ });
49
+ //# sourceMappingURL=compile-test.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"compile-test.js","sourceRoot":"","sources":["../../src/utils/compile-test.ts"],"names":[],"mappings":";;;;;;AAAA,2BAA4B;AAE5B,gDAAwB;AACxB,+BAAiC;AACjC,iDAAqC;AAGrC,yCAA0G;AAC1G,0CAA0C;AAC1C,8CAA8D;AAC9D,0CAA6C;AAE7C,MAAM,SAAS,GAAG,IAAA,gBAAS,EAAC,oBAAI,CAAC,CAAC;AAE3B,MAAM,YAAY,GAAG,KAAK,EAAE,CAAmB,EAAE,eAAuB,EAAE,EAAE;IACjF,MAAM,MAAM,GAAG,MAAM,SAAS,CAAC,OAAO,eAAe,iBAAiB,CAAC,CAAC;IAExE,CAAC,CAAC,KAAK,CAAC,MAAM,CAAC,MAAM,EAAE,UAAU,CAAC,CAAC;AACrC,CAAC,CAAC;AAJW,QAAA,YAAY,gBAIvB;AAQK,MAAM,qBAAqB,GAChC,CAAyB,YAAmD,EAAE,EAAE,CAChF,CAAC,GAAG,qBAA2B,EAAE,EAAE,CACnC,KAAK,EAAE,IAAsB,EAAE,EAAE;IAC/B,MAAM,eAAe,GAAG,MAAM,IAAA,kBAAO,EAAC,cAAI,CAAC,IAAI,CAAC,IAAA,WAAM,GAAE,EAAE,oBAAoB,MAAM,CAAC,UAAU,EAAE,EAAE,CAAC,CAAC,CAAC;IAEtG,IAAI,CAAC;QACH,MAAM,YAAY,CAAC,GAAG,qBAAqB,EAAE,IAAI,EAAE,eAAe,CAAC,CAAC;IACtE,CAAC;YAAS,CAAC;QACT,MAAM,IAAA,aAAE,EAAC,eAAe,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,KAAK,EAAE,IAAI,EAAE,CAAC,CAAC;IAC9D,CAAC;AACH,CAAC,CAAC;AAXS,QAAA,qBAAqB,yBAW9B;AAES,QAAA,sBAAsB,GAAG,IAAA,6BAAqB,EACzD,KAAK,EACH,YAA0B,EAC1B,IAAoB,EACpB,WAAwC,EACxC,IAAsB,EACtB,UAAkB,EAClB,EAAE;IACF,IAAI,CAAC,OAAO,CAAC,OAAS,CAAC,CAAC;IAExB,MAAM,oBAAoB,GAAG,IAAA,0CAA6B,EAAC,IAAI,EAAE,IAAI,IAAI,UAAU,CAAC,CAAC;IAErF,MAAM,gBAAgB,GAAG;QACvB,aAAa,oBAAoB,kBAAkB;QACnD,aAAa,oBAAoB,cAAc;QAC/C,aAAa,oBAAoB,aAAa;QAC9C,aAAa,oBAAoB,aAAa;QAC9C,YAAY;QACZ,WAAW;KACZ,CAAC;IAEF,MAAM,GAAG,GAAG,MAAM,IAAA,yBAAc,EAAC,YAAY,CAAC,IAAI,CAAC,EAAE,IAAI,CAAC,CAAC;IAE3D,IAAA,uBAAY,EAAC,IAAI,EAAE,GAAG,EAAE,IAAA,oCAAyB,EAAC,gBAAgB,CAAC,CAAC,CAAC;IACrE,MAAM,IAAA,yBAAc,EAAC,GAAG,EAAE,UAAU,CAAC,CAAC;IACtC,MAAM,IAAA,oBAAY,EAAC,IAAI,EAAE,UAAU,CAAC,CAAC;IAErC,IAAI,WAAW,CAAC,cAAc;QAAE,MAAM,IAAA,8BAAmB,EAAC,IAAI,EAAE,GAAG,EAAE,gBAAgB,CAAC,CAAC;AACzF,CAAC,CACF,CAAC"}
@@ -2,12 +2,9 @@
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
3
  exports.defineFunctions = defineFunctions;
4
4
  function defineFunctions(fns) {
5
- return Object.fromEntries(Object.entries(fns).map(([implicitName, fn]) => {
6
- var _a;
7
- return [
8
- implicitName,
9
- Object.assign({ name: (_a = fn.name) !== null && _a !== void 0 ? _a : implicitName }, fn),
10
- ];
11
- }));
5
+ return Object.fromEntries(Object.entries(fns).map(([implicitName, fn]) => [
6
+ implicitName,
7
+ Object.assign({ name: fn.name ?? implicitName }, fn),
8
+ ]));
12
9
  }
13
10
  //# sourceMappingURL=define-functions.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"define-functions.js","sourceRoot":"","sources":["../../src/utils/define-functions.ts"],"names":[],"mappings":";;AAQA,0CAOC;AAPD,SAAgB,eAAe,CAAC,GAAoD;IAClF,OAAO,MAAM,CAAC,WAAW,CACvB,MAAM,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,YAAY,EAAE,EAAE,CAAC,EAAE,EAAE;;QAAC,OAAA;YAC9C,YAAY;YACZ,MAAM,CAAC,MAAM,CAAC,EAAE,IAAI,EAAE,MAAA,EAAE,CAAC,IAAI,mCAAI,YAAY,EAAE,EAAE,EAAE,CAAC;SACrD,CAAA;KAAA,CAAC,CACH,CAAC;AACJ,CAAC"}
1
+ {"version":3,"file":"define-functions.js","sourceRoot":"","sources":["../../src/utils/define-functions.ts"],"names":[],"mappings":";;AAQA,0CAOC;AAPD,SAAgB,eAAe,CAAC,GAAoD;IAClF,OAAO,MAAM,CAAC,WAAW,CACvB,MAAM,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,YAAY,EAAE,EAAE,CAAC,EAAE,EAAE,CAAC;QAC9C,YAAY;QACZ,MAAM,CAAC,MAAM,CAAC,EAAE,IAAI,EAAE,EAAE,CAAC,IAAI,IAAI,YAAY,EAAE,EAAE,EAAE,CAAC;KACrD,CAAC,CACH,CAAC;AACJ,CAAC"}
@@ -0,0 +1,9 @@
1
+ import type { JSZipObject } from 'jszip';
2
+ import type JSZip from 'jszip';
3
+ import type { ExecutionContext } from 'ava';
4
+ export declare const asString: (item: JSZipObject) => Promise<string>;
5
+ export declare const snapshotZipContents: (test: ExecutionContext, zip: JSZip, contentsPathToAsserts: string[]) => Promise<void>;
6
+ export declare const assertLayout: (test: ExecutionContext, zip: JSZip, expectedLayout: string[]) => boolean;
7
+ export declare const expandPathsFromFilesPaths: (filePaths: string[]) => string[];
8
+ export declare const extractPackage: (zip: JSZip, folderPath: string) => Promise<void>;
9
+ //# sourceMappingURL=zip-test.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"zip-test.d.ts","sourceRoot":"","sources":["../../src/utils/zip-test.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,OAAO,CAAC;AACzC,OAAO,KAAK,KAAK,MAAM,OAAO,CAAC;AAC/B,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,KAAK,CAAC;AAY5C,eAAO,MAAM,QAAQ,GAAU,MAAM,WAAW,oBAA4D,CAAC;AAE7G,eAAO,MAAM,mBAAmB,GAAU,MAAM,gBAAgB,EAAE,KAAK,KAAK,EAAE,uBAAuB,MAAM,EAAE,kBAG5G,CAAC;AAEF,eAAO,MAAM,YAAY,GAAI,MAAM,gBAAgB,EAAE,KAAK,KAAK,EAAE,gBAAgB,MAAM,EAAE,YAMtF,CAAC;AAEJ,eAAO,MAAM,yBAAyB,GAAI,WAAW,MAAM,EAAE,KAAG,MAAM,EAa5D,CAAC;AAEX,eAAO,MAAM,cAAc,GAAU,KAAK,KAAK,EAAE,YAAY,MAAM,kBAUlE,CAAC"}
@@ -0,0 +1,43 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.extractPackage = exports.expandPathsFromFilesPaths = exports.assertLayout = exports.snapshotZipContents = exports.asString = void 0;
4
+ const promises_1 = require("fs/promises");
5
+ const path_1 = require("path");
6
+ const getItemString = ({ files }) => async (key) => {
7
+ const obj = files[key];
8
+ if (obj === undefined)
9
+ throw Error(`Item ${key} not found in zip`);
10
+ return await (0, exports.asString)(obj);
11
+ };
12
+ const asString = async (item) => Buffer.from(await item.async('arraybuffer')).toString();
13
+ exports.asString = asString;
14
+ const snapshotZipContents = async (test, zip, contentsPathToAsserts) => {
15
+ const itemStrings = await Promise.all(contentsPathToAsserts.map(getItemString(zip)));
16
+ test.snapshot(itemStrings);
17
+ };
18
+ exports.snapshotZipContents = snapshotZipContents;
19
+ const assertLayout = (test, zip, expectedLayout) => test.deepEqual(Object.values(zip.files)
20
+ .map(f => f.name)
21
+ .sort(), expectedLayout.sort());
22
+ exports.assertLayout = assertLayout;
23
+ const expandPathsFromFilesPaths = (filePaths) => Array.from(new Set(filePaths.flatMap((filePath) => {
24
+ const parts = filePath.split('/');
25
+ if (parts.length === 1)
26
+ return [filePath];
27
+ const folders = parts.slice(0, -1).map((_, idx) => parts.slice(0, idx + 1).join('/') + '/');
28
+ return [...folders, filePath];
29
+ }))).sort();
30
+ exports.expandPathsFromFilesPaths = expandPathsFromFilesPaths;
31
+ const extractPackage = async (zip, folderPath) => {
32
+ const items = Object.values(Object.values(zip.files));
33
+ for (const item of items) {
34
+ if (item.dir) {
35
+ await (0, promises_1.mkdir)((0, path_1.join)(folderPath, item.name));
36
+ }
37
+ else {
38
+ await (0, promises_1.writeFile)((0, path_1.join)(folderPath, item.name), await (0, exports.asString)(item));
39
+ }
40
+ }
41
+ };
42
+ exports.extractPackage = extractPackage;
43
+ //# sourceMappingURL=zip-test.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"zip-test.js","sourceRoot":"","sources":["../../src/utils/zip-test.ts"],"names":[],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"zip-rust.d.ts","sourceRoot":"","sources":["../src/zip-rust.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,MAAM,OAAO,CAAC;AAC1B,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,iBAAiB,CAAC;AACtD,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,YAAY,CAAC;AAyC3C,eAAO,MAAM,wBAAwB,MAAO,QAAQ,QAAQ,cAAc,UAYzE,CAAC;AAIF,eAAO,MAAM,cAAc,MAAa,QAAQ,QAAQ,cAAc,mBACb,CAAC"}
1
+ {"version":3,"file":"zip-rust.d.ts","sourceRoot":"","sources":["../src/zip-rust.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,MAAM,OAAO,CAAC;AAC1B,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,iBAAiB,CAAC;AACtD,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,YAAY,CAAC;AAyB3C,eAAO,MAAM,wBAAwB,GAAI,GAAG,QAAQ,EAAE,MAAM,cAAc,UAYzE,CAAC;AAIF,eAAO,MAAM,cAAc,GAAU,GAAG,QAAQ,EAAE,MAAM,cAAc,mBACb,CAAC"}
package/dist/zip-rust.js CHANGED
@@ -7,20 +7,6 @@ exports.zipRustProject = exports.createRustZipEnvironment = void 0;
7
7
  const jszip_1 = __importDefault(require("jszip"));
8
8
  const print_1 = require("./print");
9
9
  const zip_shared_1 = require("./zip-shared");
10
- const version_1 = require("./utils/version");
11
- const workspaceCargo = `[workspace]
12
- resolver = "2"
13
- members = ["contracts/*"]
14
-
15
- [workspace.package]
16
- authors = []
17
- edition = "2021"
18
- license = "Apache-2.0"
19
- version = "0.0.1"
20
-
21
- [workspace.dependencies]
22
- ${(0, zip_shared_1.addDependenciesWith)(`"${version_1.compatibleSorobanVersion}"`, ['soroban-sdk'])}${(0, zip_shared_1.addDependenciesWith)(`"=${version_1.contractsVersion}"`, [...zip_shared_1.libDependencies])}
23
- `;
24
10
  const readme = `\
25
11
  # Sample Rust Contract Environment
26
12
 
@@ -37,12 +23,12 @@ Continue your development journey with [Stellar CLI](https://github.com/stellar/
37
23
  `;
38
24
  const createRustZipEnvironment = (c, opts) => {
39
25
  const zip = new jszip_1.default();
40
- const contractName = (0, zip_shared_1.contractOptionsToContractName)((opts === null || opts === void 0 ? void 0 : opts.kind) || 'contract');
26
+ const contractName = (0, zip_shared_1.contractOptionsToContractName)(opts?.kind || 'contract');
41
27
  zip.file(`contracts/${contractName}/src/contract.rs`, (0, print_1.removeCreateLevelAttributes)((0, print_1.printContract)(c)));
42
28
  zip.file(`contracts/${contractName}/src/test.rs`, (0, zip_shared_1.printRustNameTest)(c));
43
29
  zip.file(`contracts/${contractName}/src/lib.rs`, zip_shared_1.createRustLibFile);
44
30
  zip.file(`contracts/${contractName}/Cargo.toml`, (0, zip_shared_1.printContractCargo)(contractName));
45
- zip.file('Cargo.toml', workspaceCargo);
31
+ zip.file('Cargo.toml', zip_shared_1.workspaceCargo);
46
32
  return zip;
47
33
  };
48
34
  exports.createRustZipEnvironment = createRustZipEnvironment;
@@ -1 +1 @@
1
- {"version":3,"file":"zip-rust.js","sourceRoot":"","sources":["../src/zip-rust.ts"],"names":[],"mappings":";;;;;;AAAA,kDAA0B;AAG1B,mCAAqE;AACrE,6CAOsB;AACtB,6CAA6E;AAE7E,MAAM,cAAc,GAAG;;;;;;;;;;;EAWrB,IAAA,gCAAmB,EAAC,IAAI,kCAAwB,GAAG,EAAE,CAAC,aAAa,CAAC,CAAC,GAAG,IAAA,gCAAmB,EAAC,KAAK,0BAAgB,GAAG,EAAE,CAAC,GAAG,4BAAe,CAAC,CAAC;CAC5I,CAAC;AAEF,MAAM,MAAM,GAAG;;;;;;;;;;;;;CAad,CAAC;AAEK,MAAM,wBAAwB,GAAG,CAAC,CAAW,EAAE,IAAoB,EAAE,EAAE;IAC5E,MAAM,GAAG,GAAG,IAAI,eAAK,EAAE,CAAC;IAExB,MAAM,YAAY,GAAG,IAAA,0CAA6B,EAAC,CAAA,IAAI,aAAJ,IAAI,uBAAJ,IAAI,CAAE,IAAI,KAAI,UAAU,CAAC,CAAC;IAE7E,GAAG,CAAC,IAAI,CAAC,aAAa,YAAY,kBAAkB,EAAE,IAAA,mCAA2B,EAAC,IAAA,qBAAa,EAAC,CAAC,CAAC,CAAC,CAAC,CAAC;IACrG,GAAG,CAAC,IAAI,CAAC,aAAa,YAAY,cAAc,EAAE,IAAA,8BAAiB,EAAC,CAAC,CAAC,CAAC,CAAC;IACxE,GAAG,CAAC,IAAI,CAAC,aAAa,YAAY,aAAa,EAAE,8BAAiB,CAAC,CAAC;IACpE,GAAG,CAAC,IAAI,CAAC,aAAa,YAAY,aAAa,EAAE,IAAA,+BAAkB,EAAC,YAAY,CAAC,CAAC,CAAC;IACnF,GAAG,CAAC,IAAI,CAAC,YAAY,EAAE,cAAc,CAAC,CAAC;IAEvC,OAAO,GAAG,CAAC;AACb,CAAC,CAAC;AAZW,QAAA,wBAAwB,4BAYnC;AAEF,MAAM,oBAAoB,GAAG,CAAC,GAAU,EAAE,EAAE,CAAC,GAAG,CAAC,IAAI,CAAC,WAAW,EAAE,MAAM,CAAC,CAAC;AAEpE,MAAM,cAAc,GAAG,KAAK,EAAE,CAAW,EAAE,IAAoB,EAAE,EAAE,CACxE,oBAAoB,CAAC,IAAA,gCAAwB,EAAC,CAAC,EAAE,IAAI,CAAC,CAAC,CAAC;AAD7C,QAAA,cAAc,kBAC+B"}
1
+ {"version":3,"file":"zip-rust.js","sourceRoot":"","sources":["../src/zip-rust.ts"],"names":[],"mappings":";;;;;;AAAA,kDAA0B;AAG1B,mCAAqE;AACrE,6CAMsB;AAEtB,MAAM,MAAM,GAAG;;;;;;;;;;;;;CAad,CAAC;AAEK,MAAM,wBAAwB,GAAG,CAAC,CAAW,EAAE,IAAoB,EAAE,EAAE;IAC5E,MAAM,GAAG,GAAG,IAAI,eAAK,EAAE,CAAC;IAExB,MAAM,YAAY,GAAG,IAAA,0CAA6B,EAAC,IAAI,EAAE,IAAI,IAAI,UAAU,CAAC,CAAC;IAE7E,GAAG,CAAC,IAAI,CAAC,aAAa,YAAY,kBAAkB,EAAE,IAAA,mCAA2B,EAAC,IAAA,qBAAa,EAAC,CAAC,CAAC,CAAC,CAAC,CAAC;IACrG,GAAG,CAAC,IAAI,CAAC,aAAa,YAAY,cAAc,EAAE,IAAA,8BAAiB,EAAC,CAAC,CAAC,CAAC,CAAC;IACxE,GAAG,CAAC,IAAI,CAAC,aAAa,YAAY,aAAa,EAAE,8BAAiB,CAAC,CAAC;IACpE,GAAG,CAAC,IAAI,CAAC,aAAa,YAAY,aAAa,EAAE,IAAA,+BAAkB,EAAC,YAAY,CAAC,CAAC,CAAC;IACnF,GAAG,CAAC,IAAI,CAAC,YAAY,EAAE,2BAAc,CAAC,CAAC;IAEvC,OAAO,GAAG,CAAC;AACb,CAAC,CAAC;AAZW,QAAA,wBAAwB,4BAYnC;AAEF,MAAM,oBAAoB,GAAG,CAAC,GAAU,EAAE,EAAE,CAAC,GAAG,CAAC,IAAI,CAAC,WAAW,EAAE,MAAM,CAAC,CAAC;AAEpE,MAAM,cAAc,GAAG,KAAK,EAAE,CAAW,EAAE,IAAoB,EAAE,EAAE,CACxE,oBAAoB,CAAC,IAAA,gCAAwB,EAAC,CAAC,EAAE,IAAI,CAAC,CAAC,CAAC;AAD7C,QAAA,cAAc,kBAC+B"}
@@ -1 +1 @@
1
- {"version":3,"file":"zip-scaffold.d.ts","sourceRoot":"","sources":["../src/zip-scaffold.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,KAAK,MAAM,OAAO,CAAC;AAC/B,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,iBAAiB,CAAC;AACtD,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,YAAY,CAAC;AAmH3C,eAAO,MAAM,kBAAkB,MAAa,QAAQ,QAAQ,cAAc,mBACd,CAAC"}
1
+ {"version":3,"file":"zip-scaffold.d.ts","sourceRoot":"","sources":["../src/zip-scaffold.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,KAAK,MAAM,OAAO,CAAC;AAC/B,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,iBAAiB,CAAC;AACtD,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,YAAY,CAAC;AAmH3C,eAAO,MAAM,kBAAkB,GAAU,GAAG,QAAQ,EAAE,MAAM,cAAc,mBACd,CAAC"}
@@ -1 +1 @@
1
- {"version":3,"file":"zip-shared.d.ts","sourceRoot":"","sources":["../src/zip-shared.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,YAAY,CAAC;AAG3C,iBAAS,iBAAiB,CAAC,MAAM,EAAE,MAAM,UAKxC;AAED,eAAO,MAAM,6BAA6B,0BAAoB,CAAC;AAE/D,wBAAgB,cAAc,CAAC,CAAC,EAAE,IAAI,CAAC,QAAQ,EAAE,iBAAiB,CAAC,GAAG,MAAM,EAAE,CAI7E;AAED,eAAO,MAAM,iBAAiB,MAAO,IAAI,CAAC,QAAQ,EAAE,iBAAiB,GAAG,MAAM,CAAC,WAqB9E,CAAC;AAEF,eAAO,MAAM,eAAe,2FAKlB,CAAC;AAEX,eAAO,MAAM,eAAe,0GAA+C,CAAC;AAE5E,eAAO,MAAM,mBAAmB,oBAAqB,MAAM,qBAAqB,MAAM,EAAE,WACG,CAAC;AAE5F,eAAO,MAAM,kBAAkB,yBAA0B,MAAM,WAc2B,CAAC;AAE3F,eAAO,MAAM,iBAAiB,mEAK7B,CAAC;AAEF,eAAO,MAAM,cAAc,QAY1B,CAAC"}
1
+ {"version":3,"file":"zip-shared.d.ts","sourceRoot":"","sources":["../src/zip-shared.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,YAAY,CAAC;AAG3C,iBAAS,iBAAiB,CAAC,MAAM,EAAE,MAAM,UAKxC;AAED,eAAO,MAAM,6BAA6B,0BAAoB,CAAC;AAE/D,wBAAgB,cAAc,CAAC,CAAC,EAAE,IAAI,CAAC,QAAQ,EAAE,iBAAiB,CAAC,GAAG,MAAM,EAAE,CAI7E;AAED,eAAO,MAAM,iBAAiB,GAAI,GAAG,IAAI,CAAC,QAAQ,EAAE,iBAAiB,GAAG,MAAM,CAAC,WAqB9E,CAAC;AAEF,eAAO,MAAM,eAAe,2FAKlB,CAAC;AAEX,eAAO,MAAM,eAAe,0GAA+C,CAAC;AAE5E,eAAO,MAAM,mBAAmB,GAAI,iBAAiB,MAAM,EAAE,mBAAmB,MAAM,EAAE,WACG,CAAC;AAE5F,eAAO,MAAM,kBAAkB,GAAI,sBAAsB,MAAM,WAiB2B,CAAC;AAE3F,eAAO,MAAM,iBAAiB,mEAK7B,CAAC;AAEF,eAAO,MAAM,cAAc,QA0B1B,CAAC"}
@@ -12,7 +12,7 @@ function pascalToSnakeCase(string) {
12
12
  exports.contractOptionsToContractName = pascalToSnakeCase;
13
13
  function getAddressArgs(c) {
14
14
  return (c.constructorArgs || [])
15
- .filter(constructorArg => { var _a; return ((_a = constructorArg.type) === null || _a === void 0 ? void 0 : _a.trim()) === 'Address'; })
15
+ .filter(constructorArg => constructorArg.type?.trim() === 'Address')
16
16
  .map(constructorArg => constructorArg.name);
17
17
  }
18
18
  const printRustNameTest = (c) => `#![cfg(test)]
@@ -54,6 +54,9 @@ license.workspace = true
54
54
  publish = false
55
55
  version.workspace = true
56
56
 
57
+ [package.metadata.stellar]
58
+ cargo_inherit = true
59
+
57
60
  [lib]
58
61
  crate-type = ["cdylib"]
59
62
  doctest = false
@@ -81,5 +84,19 @@ version = "0.0.1"
81
84
 
82
85
  [workspace.dependencies]
83
86
  ${(0, exports.addDependenciesWith)(`"${version_1.compatibleSorobanVersion}"`, ['soroban-sdk'])}${(0, exports.addDependenciesWith)(`"=${version_1.contractsVersion}"`, [...exports.libDependencies])}
87
+
88
+ [profile.release]
89
+ opt-level = "z"
90
+ overflow-checks = true
91
+ debug = 0
92
+ strip = "symbols"
93
+ debug-assertions = false
94
+ panic = "abort"
95
+ codegen-units = 1
96
+ lto = true
97
+
98
+ [profile.release-with-logs]
99
+ inherits = "release"
100
+ debug-assertions = true
84
101
  `;
85
102
  //# sourceMappingURL=zip-shared.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"zip-shared.js","sourceRoot":"","sources":["../src/zip-shared.ts"],"names":[],"mappings":";;;AAYA,wCAIC;AAfD,6CAA6E;AAE7E,SAAS,iBAAiB,CAAC,MAAc;IACvC,OAAO,MAAM;SACV,OAAO,CAAC,UAAU,EAAE,KAAK,CAAC;SAC1B,OAAO,CAAC,IAAI,EAAE,EAAE,CAAC;SACjB,WAAW,EAAE,CAAC;AACnB,CAAC;AAEY,QAAA,6BAA6B,GAAG,iBAAiB,CAAC;AAE/D,SAAgB,cAAc,CAAC,CAAoC;IACjE,OAAO,CAAC,CAAC,CAAC,eAAe,IAAI,EAAE,CAAC;SAC7B,MAAM,CAAC,cAAc,CAAC,EAAE,WAAC,OAAA,CAAA,MAAA,cAAc,CAAC,IAAI,0CAAE,IAAI,EAAE,MAAK,SAAS,CAAA,EAAA,CAAC;SACnE,GAAG,CAAC,cAAc,CAAC,EAAE,CAAC,cAAc,CAAC,IAAI,CAAC,CAAC;AAChD,CAAC;AAEM,MAAM,iBAAiB,GAAG,CAAC,CAA6C,EAAE,EAAE,CAAC;;;;qBAI/D,cAAc,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,oCAAoC,CAAC,CAAC,CAAC,EAAE;;yBAEhE,CAAC,CAAC,IAAI,KAAK,CAAC,CAAC,IAAI;;;;;;uCAMH,CAAC,CAAC,IAAI,MAAM,cAAc,CAAC,CAAC,CAAC;KAC7D,GAAG,CAAC,GAAG,EAAE,CAAC,yBAAyB,CAAC;KACpC,IAAI,CAAC,GAAG,CAAC,GAAG,cAAc,CAAC,CAAC,CAAC,CAAC,MAAM,KAAK,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE;mBACzC,CAAC,CAAC,IAAI;;wDAE+B,CAAC,CAAC,IAAI;;;;CAI7D,CAAC;AArBW,QAAA,iBAAiB,qBAqB5B;AAEW,QAAA,eAAe,GAAG;IAC7B,gBAAgB;IAChB,gBAAgB;IAChB,wBAAwB;IACxB,gBAAgB;CACR,CAAC;AAEE,QAAA,eAAe,GAAG,CAAC,GAAG,uBAAe,EAAE,aAAa,CAAU,CAAC;AAErE,MAAM,mBAAmB,GAAG,CAAC,eAAuB,EAAE,iBAA2B,EAAE,EAAE,CAC1F,GAAG,iBAAiB,CAAC,GAAG,CAAC,UAAU,CAAC,EAAE,CAAC,GAAG,UAAU,MAAM,eAAe,IAAI,CAAC,CAAC,IAAI,CAAC,EAAE,CAAC,EAAE,CAAC;AAD/E,QAAA,mBAAmB,uBAC4D;AAErF,MAAM,kBAAkB,GAAG,CAAC,oBAA4B,EAAE,EAAE,CAAC;UAC1D,oBAAoB,CAAC,OAAO,CAAC,GAAG,EAAE,GAAG,CAAC;;;;;;;;;;;EAW9C,IAAA,2BAAmB,EAAC,sBAAsB,EAAE,CAAC,GAAG,uBAAe,CAAC,CAAC;;EAEjE,IAAA,2BAAmB,EAAC,gDAAgD,EAAE,CAAC,aAAa,CAAC,CAAC,EAAE,CAAC;AAd9E,QAAA,kBAAkB,sBAc4D;AAE9E,QAAA,iBAAiB,GAAG;;;;;CAKhC,CAAC;AAEW,QAAA,cAAc,GAAG;;;;;;;;;;;EAW5B,IAAA,2BAAmB,EAAC,IAAI,kCAAwB,GAAG,EAAE,CAAC,aAAa,CAAC,CAAC,GAAG,IAAA,2BAAmB,EAAC,KAAK,0BAAgB,GAAG,EAAE,CAAC,GAAG,uBAAe,CAAC,CAAC;CAC5I,CAAC"}
1
+ {"version":3,"file":"zip-shared.js","sourceRoot":"","sources":["../src/zip-shared.ts"],"names":[],"mappings":";;;AAYA,wCAIC;AAfD,6CAA6E;AAE7E,SAAS,iBAAiB,CAAC,MAAc;IACvC,OAAO,MAAM;SACV,OAAO,CAAC,UAAU,EAAE,KAAK,CAAC;SAC1B,OAAO,CAAC,IAAI,EAAE,EAAE,CAAC;SACjB,WAAW,EAAE,CAAC;AACnB,CAAC;AAEY,QAAA,6BAA6B,GAAG,iBAAiB,CAAC;AAE/D,SAAgB,cAAc,CAAC,CAAoC;IACjE,OAAO,CAAC,CAAC,CAAC,eAAe,IAAI,EAAE,CAAC;SAC7B,MAAM,CAAC,cAAc,CAAC,EAAE,CAAC,cAAc,CAAC,IAAI,EAAE,IAAI,EAAE,KAAK,SAAS,CAAC;SACnE,GAAG,CAAC,cAAc,CAAC,EAAE,CAAC,cAAc,CAAC,IAAI,CAAC,CAAC;AAChD,CAAC;AAEM,MAAM,iBAAiB,GAAG,CAAC,CAA6C,EAAE,EAAE,CAAC;;;;qBAI/D,cAAc,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,oCAAoC,CAAC,CAAC,CAAC,EAAE;;yBAEhE,CAAC,CAAC,IAAI,KAAK,CAAC,CAAC,IAAI;;;;;;uCAMH,CAAC,CAAC,IAAI,MAAM,cAAc,CAAC,CAAC,CAAC;KAC7D,GAAG,CAAC,GAAG,EAAE,CAAC,yBAAyB,CAAC;KACpC,IAAI,CAAC,GAAG,CAAC,GAAG,cAAc,CAAC,CAAC,CAAC,CAAC,MAAM,KAAK,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE;mBACzC,CAAC,CAAC,IAAI;;wDAE+B,CAAC,CAAC,IAAI;;;;CAI7D,CAAC;AArBW,QAAA,iBAAiB,qBAqB5B;AAEW,QAAA,eAAe,GAAG;IAC7B,gBAAgB;IAChB,gBAAgB;IAChB,wBAAwB;IACxB,gBAAgB;CACR,CAAC;AAEE,QAAA,eAAe,GAAG,CAAC,GAAG,uBAAe,EAAE,aAAa,CAAU,CAAC;AAErE,MAAM,mBAAmB,GAAG,CAAC,eAAuB,EAAE,iBAA2B,EAAE,EAAE,CAC1F,GAAG,iBAAiB,CAAC,GAAG,CAAC,UAAU,CAAC,EAAE,CAAC,GAAG,UAAU,MAAM,eAAe,IAAI,CAAC,CAAC,IAAI,CAAC,EAAE,CAAC,EAAE,CAAC;AAD/E,QAAA,mBAAmB,uBAC4D;AAErF,MAAM,kBAAkB,GAAG,CAAC,oBAA4B,EAAE,EAAE,CAAC;UAC1D,oBAAoB,CAAC,OAAO,CAAC,GAAG,EAAE,GAAG,CAAC;;;;;;;;;;;;;;EAc9C,IAAA,2BAAmB,EAAC,sBAAsB,EAAE,CAAC,GAAG,uBAAe,CAAC,CAAC;;EAEjE,IAAA,2BAAmB,EAAC,gDAAgD,EAAE,CAAC,aAAa,CAAC,CAAC,EAAE,CAAC;AAjB9E,QAAA,kBAAkB,sBAiB4D;AAE9E,QAAA,iBAAiB,GAAG;;;;;CAKhC,CAAC;AAEW,QAAA,cAAc,GAAG;;;;;;;;;;;EAW5B,IAAA,2BAAmB,EAAC,IAAI,kCAAwB,GAAG,EAAE,CAAC,aAAa,CAAC,CAAC,GAAG,IAAA,2BAAmB,EAAC,KAAK,0BAAgB,GAAG,EAAE,CAAC,GAAG,uBAAe,CAAC,CAAC;;;;;;;;;;;;;;;CAe5I,CAAC"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@openzeppelin/wizard-stellar",
3
- "version": "0.4.2",
3
+ "version": "0.4.4",
4
4
  "description": "A boilerplate generator to get started with OpenZeppelin Stellar Soroban Contracts",
5
5
  "license": "AGPL-3.0-only",
6
6
  "repository": "https://github.com/OpenZeppelin/contracts-wizard",
package/src/contract.ts CHANGED
@@ -1,8 +1,8 @@
1
- import { toIdentifier } from './utils/convert-strings';
1
+ import { toByteArray, toIdentifier } from './utils/convert-strings';
2
2
 
3
3
  export interface Contract {
4
+ metadata: Map<string, string>;
4
5
  license: string;
5
- securityContact: string;
6
6
  documentations: string[];
7
7
  name: string;
8
8
  useClauses: UseClause[];
@@ -74,7 +74,7 @@ export interface Argument {
74
74
  export class ContractBuilder implements Contract {
75
75
  readonly name: string;
76
76
  license = 'MIT';
77
- securityContact = '';
77
+ metadata = new Map<string, string>();
78
78
  ownable = false;
79
79
 
80
80
  readonly documentations: string[] = [];
@@ -267,7 +267,13 @@ export class ContractBuilder implements Contract {
267
267
  this.documentations.push(description);
268
268
  }
269
269
 
270
- addSecurityTag(securityContact: string) {
271
- this.securityContact = securityContact;
270
+ addContractMetadata(metadata: { key: string; value: string }[] | { key: string; value: string }) {
271
+ (Array.isArray(metadata) ? metadata : [metadata]).forEach(({ key, value }) => {
272
+ if (this.metadata.has(key)) throw new Error(`Setting metadata failed: ${key} is already set`);
273
+
274
+ this.metadata.set(key, toByteArray(value));
275
+ });
276
+
277
+ if (this.metadata.size > 0) this.addUseClause('soroban_sdk', 'contractmeta');
272
278
  }
273
279
  }
package/src/fungible.ts CHANGED
@@ -204,7 +204,7 @@ function addPremint(c: ContractBuilder, amount: string) {
204
204
  }
205
205
 
206
206
  /**
207
- * Calculates the initial supply that would be used in an Fungible contract based on a given premint amount and number of decimals.
207
+ * Calculates the initial supply that would be used in a Fungible contract based on a given premint amount and number of decimals.
208
208
  *
209
209
  * @param premint Premint amount in token units, may be fractional
210
210
  * @param decimals The number of decimals in the token
@@ -8,6 +8,7 @@ const booleans = [true, false];
8
8
  const blueprint = {
9
9
  name: ['MyToken'],
10
10
  symbol: ['MTK'],
11
+ tokenUri: ['https://www.mytoken.com'],
11
12
  burnable: booleans,
12
13
  pausable: booleans,
13
14
  upgradeable: booleans,
@@ -16,6 +16,7 @@ import { toByteArray } from './utils/convert-strings';
16
16
  export const defaults: Required<NonFungibleOptions> = {
17
17
  name: 'MyToken',
18
18
  symbol: 'MTK',
19
+ tokenUri: 'https://www.mytoken.com',
19
20
  burnable: false,
20
21
  enumerable: false,
21
22
  consecutive: false,
@@ -34,6 +35,7 @@ export function printNonFungible(opts: NonFungibleOptions = defaults): string {
34
35
  export interface NonFungibleOptions extends CommonContractOptions {
35
36
  name: string;
36
37
  symbol: string;
38
+ tokenUri?: string;
37
39
  burnable?: boolean;
38
40
  enumerable?: boolean;
39
41
  consecutive?: boolean;
@@ -47,6 +49,7 @@ function withDefaults(opts: NonFungibleOptions): Required<NonFungibleOptions> {
47
49
  return {
48
50
  ...opts,
49
51
  ...withCommonContractDefaults(opts),
52
+ tokenUri: opts.tokenUri ?? defaults.tokenUri,
50
53
  burnable: opts.burnable ?? defaults.burnable,
51
54
  consecutive: opts.consecutive ?? defaults.consecutive,
52
55
  enumerable: opts.enumerable ?? defaults.enumerable,
@@ -87,7 +90,7 @@ export function buildNonFungible(opts: NonFungibleOptions): Contract {
87
90
  throw new OptionsError(errors);
88
91
  }
89
92
 
90
- addBase(c, toByteArray(allOpts.name), toByteArray(allOpts.symbol), allOpts.pausable);
93
+ addBase(c, toByteArray(allOpts.name), toByteArray(allOpts.symbol), toByteArray(allOpts.tokenUri), allOpts.pausable);
91
94
 
92
95
  if (allOpts.pausable) {
93
96
  addPausable(c, allOpts.access);
@@ -119,9 +122,9 @@ export function buildNonFungible(opts: NonFungibleOptions): Contract {
119
122
  return c;
120
123
  }
121
124
 
122
- function addBase(c: ContractBuilder, name: string, symbol: string, pausable: boolean) {
125
+ function addBase(c: ContractBuilder, name: string, symbol: string, tokenUri: string, pausable: boolean) {
123
126
  // Set metadata
124
- c.addConstructorCode('let uri = String::from_str(e, "www.mytoken.com");');
127
+ c.addConstructorCode(`let uri = String::from_str(e, "${tokenUri}");`);
125
128
  c.addConstructorCode(`let name = String::from_str(e, "${name}");`);
126
129
  c.addConstructorCode(`let symbol = String::from_str(e, "${symbol}");`);
127
130
  c.addConstructorCode(`Base::set_metadata(e, uri, name, symbol);`);
package/src/print.ts CHANGED
@@ -4,6 +4,7 @@ import type { Lines } from './utils/format-lines';
4
4
  import { formatLines, spaceBetween } from './utils/format-lines';
5
5
  import { getSelfArg } from './common-options';
6
6
  import { compatibleContractsSemver } from './utils/version';
7
+ import { toByteArray } from './utils/convert-strings';
7
8
 
8
9
  const DEFAULT_SECTION = '1. with no section';
9
10
  const STANDALONE_IMPORTS_GROUP = 'Standalone Imports';
@@ -24,11 +25,11 @@ export function printContract(contract: Contract): string {
24
25
  `// SPDX-License-Identifier: ${contract.license}`,
25
26
  `// Compatible with OpenZeppelin Stellar Soroban Contracts ${compatibleContractsSemver}`,
26
27
  ...(contract.documentations.length ? ['', ...printDocumentations(contract.documentations)] : []),
27
- ...(contract.securityContact ? ['', ...printSecurityTag(contract.securityContact)] : []),
28
28
  ...createLevelAttributes,
29
29
  ],
30
30
  spaceBetween(
31
31
  printUseClauses(contract),
32
+ printMetadata(contract),
32
33
  printVariables(contract),
33
34
  printContractStruct(contract),
34
35
  printContractErrors(contract),
@@ -367,6 +368,6 @@ function printDocumentations(documentations: string[]): string[] {
367
368
  return documentations.map(documentation => `//! ${documentation}`);
368
369
  }
369
370
 
370
- function printSecurityTag(securityContact: string) {
371
- return ['//! # Security', '//!', `//! For security issues, please contact: ${securityContact}`];
371
+ function printMetadata(contract: Contract) {
372
+ return Array.from(contract.metadata.entries()).map(([key, value]) => `contractmeta!(key="${key}", val="${value}");`);
372
373
  }
package/src/set-info.ts CHANGED
@@ -1,7 +1,5 @@
1
1
  import type { ContractBuilder } from './contract';
2
2
 
3
- export const TAG_SECURITY_CONTACT = `@custom:security-contact`;
4
-
5
3
  export const infoOptions = [{}, { license: 'WTFPL' }] as const;
6
4
 
7
5
  export const defaults: Info = { license: 'MIT' };
@@ -11,14 +9,8 @@ export type Info = {
11
9
  securityContact?: string;
12
10
  };
13
11
 
14
- export function setInfo(c: ContractBuilder, info: Info): void {
15
- const { securityContact, license } = info;
16
-
17
- if (securityContact) {
18
- c.addSecurityTag(securityContact);
19
- }
12
+ export function setInfo(c: ContractBuilder, { securityContact, license }: Info): void {
13
+ if (securityContact) c.addContractMetadata({ key: 'security_contact', value: securityContact });
20
14
 
21
- if (license) {
22
- c.license = license;
23
- }
15
+ if (license) c.license = license;
24
16
  }
@@ -0,0 +1,69 @@
1
+ import { tmpdir } from 'os';
2
+ import type { ExecutionContext } from 'ava';
3
+ import path from 'path';
4
+ import { promisify } from 'util';
5
+ import { exec } from 'child_process';
6
+ import type { GenericOptions } from '../build-generic';
7
+ import type { Contract } from '../contract';
8
+ import { assertLayout, snapshotZipContents, expandPathsFromFilesPaths, extractPackage } from './zip-test';
9
+ import { mkdtemp, rm } from 'fs/promises';
10
+ import { contractOptionsToContractName } from '../zip-shared';
11
+ import { zipRustProject } from '../zip-rust';
12
+
13
+ const asyncExec = promisify(exec);
14
+
15
+ export const runCargoTest = async (t: ExecutionContext, temporaryFolder: string) => {
16
+ const result = await asyncExec(`cd "${temporaryFolder}" && cargo test`);
17
+
18
+ t.regex(result.stdout, /0 failed/);
19
+ };
20
+
21
+ type WithTemporaryFolderTestFunction<Args extends unknown[]> = (
22
+ ...args: [...Args, ExecutionContext, string]
23
+ ) => Promise<void> | void;
24
+
25
+ export type MakeContract = (opt: GenericOptions) => Contract;
26
+
27
+ export const withTemporaryFolderDo =
28
+ <Args extends unknown[]>(testFunction: WithTemporaryFolderTestFunction<Args>) =>
29
+ (...testFunctionArguments: Args) =>
30
+ async (test: ExecutionContext) => {
31
+ const temporaryFolder = await mkdtemp(path.join(tmpdir(), `compilation-test-${crypto.randomUUID()}`));
32
+
33
+ try {
34
+ await testFunction(...testFunctionArguments, test, temporaryFolder);
35
+ } finally {
36
+ await rm(temporaryFolder, { recursive: true, force: true });
37
+ }
38
+ };
39
+
40
+ export const runRustCompilationTest = withTemporaryFolderDo(
41
+ async (
42
+ makeContract: MakeContract,
43
+ opts: GenericOptions,
44
+ testOptions: { snapshotResult: boolean },
45
+ test: ExecutionContext,
46
+ folderPath: string,
47
+ ) => {
48
+ test.timeout(3_000_000);
49
+
50
+ const scaffoldContractName = contractOptionsToContractName(opts?.kind || 'contract');
51
+
52
+ const expectedZipFiles = [
53
+ `contracts/${scaffoldContractName}/src/contract.rs`,
54
+ `contracts/${scaffoldContractName}/src/test.rs`,
55
+ `contracts/${scaffoldContractName}/src/lib.rs`,
56
+ `contracts/${scaffoldContractName}/Cargo.toml`,
57
+ 'Cargo.toml',
58
+ 'README.md',
59
+ ];
60
+
61
+ const zip = await zipRustProject(makeContract(opts), opts);
62
+
63
+ assertLayout(test, zip, expandPathsFromFilesPaths(expectedZipFiles));
64
+ await extractPackage(zip, folderPath);
65
+ await runCargoTest(test, folderPath);
66
+
67
+ if (testOptions.snapshotResult) await snapshotZipContents(test, zip, expectedZipFiles);
68
+ },
69
+ );