@openzeppelin/wizard-stellar 0.1.0

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 (109) hide show
  1. package/LICENSE +661 -0
  2. package/NOTICE +8 -0
  3. package/README.md +57 -0
  4. package/dist/add-pausable.d.ts +4 -0
  5. package/dist/add-pausable.d.ts.map +1 -0
  6. package/dist/add-pausable.js +37 -0
  7. package/dist/add-pausable.js.map +1 -0
  8. package/dist/api.d.ts +22 -0
  9. package/dist/api.d.ts.map +1 -0
  10. package/dist/api.js +9 -0
  11. package/dist/api.js.map +1 -0
  12. package/dist/build-generic.d.ts +9 -0
  13. package/dist/build-generic.d.ts.map +1 -0
  14. package/dist/build-generic.js +15 -0
  15. package/dist/build-generic.js.map +1 -0
  16. package/dist/common-options.d.ts +15 -0
  17. package/dist/common-options.d.ts.map +1 -0
  18. package/dist/common-options.js +31 -0
  19. package/dist/common-options.js.map +1 -0
  20. package/dist/contract.d.ts +91 -0
  21. package/dist/contract.d.ts.map +1 -0
  22. package/dist/contract.js +123 -0
  23. package/dist/contract.js.map +1 -0
  24. package/dist/error.d.ts +8 -0
  25. package/dist/error.d.ts.map +1 -0
  26. package/dist/error.js +11 -0
  27. package/dist/error.js.map +1 -0
  28. package/dist/fungible.d.ts +24 -0
  29. package/dist/fungible.d.ts.map +1 -0
  30. package/dist/fungible.js +264 -0
  31. package/dist/fungible.js.map +1 -0
  32. package/dist/generate/alternatives.d.ts +7 -0
  33. package/dist/generate/alternatives.d.ts.map +1 -0
  34. package/dist/generate/alternatives.js +27 -0
  35. package/dist/generate/alternatives.js.map +1 -0
  36. package/dist/generate/fungible.d.ts +3 -0
  37. package/dist/generate/fungible.d.ts.map +1 -0
  38. package/dist/generate/fungible.js +21 -0
  39. package/dist/generate/fungible.js.map +1 -0
  40. package/dist/generate/sources.d.ts +16 -0
  41. package/dist/generate/sources.d.ts.map +1 -0
  42. package/dist/generate/sources.js +62 -0
  43. package/dist/generate/sources.js.map +1 -0
  44. package/dist/index.d.ts +16 -0
  45. package/dist/index.d.ts.map +1 -0
  46. package/dist/index.js +24 -0
  47. package/dist/index.js.map +1 -0
  48. package/dist/kind.d.ts +4 -0
  49. package/dist/kind.d.ts.map +1 -0
  50. package/dist/kind.js +24 -0
  51. package/dist/kind.js.map +1 -0
  52. package/dist/print.d.ts +3 -0
  53. package/dist/print.d.ts.map +1 -0
  54. package/dist/print.js +257 -0
  55. package/dist/print.js.map +1 -0
  56. package/dist/set-access-control.d.ts +15 -0
  57. package/dist/set-access-control.d.ts.map +1 -0
  58. package/dist/set-access-control.js +67 -0
  59. package/dist/set-access-control.js.map +1 -0
  60. package/dist/set-info.d.ts +10 -0
  61. package/dist/set-info.d.ts.map +1 -0
  62. package/dist/set-info.js +13 -0
  63. package/dist/set-info.js.map +1 -0
  64. package/dist/test.d.ts +2 -0
  65. package/dist/test.d.ts.map +1 -0
  66. package/dist/test.js +21 -0
  67. package/dist/test.js.map +1 -0
  68. package/dist/utils/convert-strings.d.ts +27 -0
  69. package/dist/utils/convert-strings.d.ts.map +1 -0
  70. package/dist/utils/convert-strings.js +81 -0
  71. package/dist/utils/convert-strings.js.map +1 -0
  72. package/dist/utils/define-functions.d.ts +5 -0
  73. package/dist/utils/define-functions.d.ts.map +1 -0
  74. package/dist/utils/define-functions.js +7 -0
  75. package/dist/utils/define-functions.js.map +1 -0
  76. package/dist/utils/format-lines.d.ts +6 -0
  77. package/dist/utils/format-lines.d.ts.map +1 -0
  78. package/dist/utils/format-lines.js +28 -0
  79. package/dist/utils/format-lines.js.map +1 -0
  80. package/dist/utils/sorted-by.d.ts +2 -0
  81. package/dist/utils/sorted-by.d.ts.map +1 -0
  82. package/dist/utils/sorted-by.js +7 -0
  83. package/dist/utils/sorted-by.js.map +1 -0
  84. package/dist/utils/version.d.ts +10 -0
  85. package/dist/utils/version.d.ts.map +1 -0
  86. package/dist/utils/version.js +13 -0
  87. package/dist/utils/version.js.map +1 -0
  88. package/package.json +33 -0
  89. package/src/add-pausable.ts +40 -0
  90. package/src/api.ts +30 -0
  91. package/src/build-generic.ts +19 -0
  92. package/src/common-options.ts +38 -0
  93. package/src/contract.ts +201 -0
  94. package/src/error.ts +7 -0
  95. package/src/fungible.ts +300 -0
  96. package/src/generate/alternatives.ts +32 -0
  97. package/src/generate/fungible.ts +21 -0
  98. package/src/generate/sources.ts +75 -0
  99. package/src/index.ts +24 -0
  100. package/src/kind.ts +26 -0
  101. package/src/print.ts +305 -0
  102. package/src/set-access-control.ts +73 -0
  103. package/src/set-info.ts +17 -0
  104. package/src/test.ts +26 -0
  105. package/src/utils/convert-strings.ts +83 -0
  106. package/src/utils/define-functions.ts +9 -0
  107. package/src/utils/format-lines.ts +26 -0
  108. package/src/utils/sorted-by.ts +3 -0
  109. package/src/utils/version.ts +10 -0
package/dist/print.js ADDED
@@ -0,0 +1,257 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.printContract = printContract;
4
+ const format_lines_1 = require("./utils/format-lines");
5
+ const common_options_1 = require("./common-options");
6
+ const version_1 = require("./utils/version");
7
+ const DEFAULT_SECTION = '1. with no section';
8
+ const STANDALONE_IMPORTS_GROUP = 'Standalone Imports';
9
+ const MAX_USE_CLAUSE_LINE_LENGTH = 90;
10
+ const TAB = ' ';
11
+ function printContract(contract) {
12
+ return (0, format_lines_1.formatLines)(...(0, format_lines_1.spaceBetween)([
13
+ `// SPDX-License-Identifier: ${contract.license}`,
14
+ `// Compatible with OpenZeppelin Stellar Soroban Contracts ${version_1.compatibleContractsSemver}`,
15
+ ], (0, format_lines_1.spaceBetween)(printUseClauses(contract), printVariables(contract), printContractStruct(contract), printContractErrors(contract), printContractFunctions(contract), printImplementedTraits(contract))));
16
+ }
17
+ function printContractStruct(contract) {
18
+ return ['#[contract]', `pub struct ${contract.name};`];
19
+ }
20
+ function printContractErrors(contract) {
21
+ if (contract.errors.length === 0) {
22
+ return [];
23
+ }
24
+ return [
25
+ '#[contracterror]',
26
+ '#[derive(Copy, Clone, Debug, Eq, PartialEq, PartialOrd, Ord)]',
27
+ '#[repr(u32)]',
28
+ `pub enum ${contract.name}Error {`,
29
+ contract.errors.map(e => `${e.name} = ${e.num},`),
30
+ `}`,
31
+ ];
32
+ }
33
+ function withSemicolons(lines) {
34
+ return lines.map(line => (line.endsWith(';') ? line : line + ';'));
35
+ }
36
+ function printVariables(contract) {
37
+ return withSemicolons(contract.variables.map(v => `const ${v.name}: ${v.type} = ${v.value}`));
38
+ }
39
+ function printUseClauses(contract) {
40
+ const useClauses = sortUseClauses(contract);
41
+ // group by containerPath
42
+ const grouped = useClauses.reduce((result, useClause) => {
43
+ if (useClause.groupable) {
44
+ (result[useClause.containerPath] = result[useClause.containerPath] || []).push(useClause);
45
+ }
46
+ else {
47
+ (result[STANDALONE_IMPORTS_GROUP] = result[STANDALONE_IMPORTS_GROUP] || []).push(useClause);
48
+ }
49
+ return result;
50
+ }, {});
51
+ const lines = Object.entries(grouped).flatMap(([groupName, group]) => getLinesFromUseClausesGroup(group, groupName));
52
+ return lines.flatMap(line => splitLongUseClauseLine(line.toString()));
53
+ }
54
+ function getLinesFromUseClausesGroup(group, groupName) {
55
+ const lines = [];
56
+ if (groupName === STANDALONE_IMPORTS_GROUP) {
57
+ for (const useClause of group) {
58
+ lines.push(`use ${useClause.containerPath}::${nameWithAlias(useClause)};`);
59
+ }
60
+ }
61
+ else {
62
+ if (group.length == 1) {
63
+ lines.push(`use ${groupName}::${nameWithAlias(group[0])};`);
64
+ }
65
+ else if (group.length > 1) {
66
+ const names = group.map(useClause => nameWithAlias(useClause)).join(', ');
67
+ lines.push(`use ${groupName}::{${names}};`);
68
+ }
69
+ }
70
+ return lines;
71
+ }
72
+ function nameWithAlias(useClause) {
73
+ return useClause.alias ? `${useClause.name} as ${useClause.alias}` : useClause.name;
74
+ }
75
+ // TODO: remove this when we can use a formatting js library
76
+ function splitLongUseClauseLine(line) {
77
+ const lines = [];
78
+ const containsBraces = line.indexOf('{') !== -1;
79
+ if (containsBraces && line.length > MAX_USE_CLAUSE_LINE_LENGTH) {
80
+ // split at the first brace
81
+ lines.push(line.slice(0, line.indexOf('{') + 1));
82
+ lines.push(...splitLongLineInner(line.slice(line.indexOf('{') + 1, -2)));
83
+ lines.push('};');
84
+ }
85
+ else {
86
+ lines.push(line);
87
+ }
88
+ return lines;
89
+ }
90
+ function splitLongLineInner(line) {
91
+ const lines = [];
92
+ if (line.length > MAX_USE_CLAUSE_LINE_LENGTH) {
93
+ const max_accessible_string = line.slice(0, MAX_USE_CLAUSE_LINE_LENGTH);
94
+ const lastCommaIndex = max_accessible_string.lastIndexOf(',');
95
+ if (lastCommaIndex !== -1) {
96
+ lines.push(TAB + max_accessible_string.slice(0, lastCommaIndex + 1));
97
+ lines.push(...splitLongLineInner(line.slice(lastCommaIndex + 2)));
98
+ }
99
+ else {
100
+ lines.push(TAB + max_accessible_string);
101
+ }
102
+ }
103
+ else {
104
+ lines.push(TAB + line);
105
+ }
106
+ return lines;
107
+ }
108
+ function sortUseClauses(contract) {
109
+ return contract.useClauses.sort((a, b) => {
110
+ if (a.containerPath === b.containerPath) {
111
+ if (a.name === 'self' && b.name !== 'self') {
112
+ return -1;
113
+ }
114
+ else if (a.name !== 'self' && b.name === 'self') {
115
+ return 1;
116
+ }
117
+ return nameWithAlias(a).localeCompare(nameWithAlias(b));
118
+ }
119
+ else {
120
+ return a.containerPath.localeCompare(b.containerPath);
121
+ }
122
+ });
123
+ }
124
+ function printImplementedTraits(contract) {
125
+ // sort first by priority, then number of tags, then name
126
+ const sortedTraits = contract.implementedTraits.sort((a, b) => {
127
+ var _a, _b;
128
+ if (a.priority !== b.priority) {
129
+ return ((_a = a.priority) !== null && _a !== void 0 ? _a : Infinity) - ((_b = b.priority) !== null && _b !== void 0 ? _b : Infinity);
130
+ }
131
+ if (a.tags.length !== b.tags.length) {
132
+ return a.tags.length - b.tags.length;
133
+ }
134
+ return a.name.localeCompare(b.name);
135
+ });
136
+ // group by section
137
+ const grouped = sortedTraits.reduce((result, current) => {
138
+ var _a;
139
+ // default to no section
140
+ const section = (_a = current.section) !== null && _a !== void 0 ? _a : DEFAULT_SECTION;
141
+ (result[section] = result[section] || []).push(current);
142
+ return result;
143
+ }, {});
144
+ const sections = Object.entries(grouped)
145
+ .sort((a, b) => a[0].localeCompare(b[0]))
146
+ .map(([section, impls]) => printImplementedTraitsSection(section, impls));
147
+ return (0, format_lines_1.spaceBetween)(...sections);
148
+ }
149
+ function printImplementedTraitsSection(section, impls) {
150
+ const lines = [];
151
+ const isDefaultSection = section === DEFAULT_SECTION;
152
+ if (!isDefaultSection) {
153
+ lines.push('//');
154
+ lines.push(`// ${section}`);
155
+ lines.push('//');
156
+ }
157
+ impls.forEach((trait, index) => {
158
+ if (index > 0 || !isDefaultSection) {
159
+ lines.push('');
160
+ }
161
+ lines.push(...printImplementedTrait(trait));
162
+ });
163
+ return lines;
164
+ }
165
+ function printImplementedTrait(trait) {
166
+ const implLines = [];
167
+ implLines.push(...trait.tags.map(t => `#[${t}]`));
168
+ implLines.push(`impl ${trait.name} for ${trait.for} {`);
169
+ const fns = trait.functions.map(fn => printFunction(fn));
170
+ implLines.push((0, format_lines_1.spaceBetween)(...fns));
171
+ implLines.push('}');
172
+ return implLines;
173
+ }
174
+ function printFunction(fn) {
175
+ var _a, _b;
176
+ const head = `fn ${fn.name}`;
177
+ const args = fn.args.map(a => printArgument(a));
178
+ const codeLines = (_b = (_a = fn.codeBefore) === null || _a === void 0 ? void 0 : _a.concat(fn.code)) !== null && _b !== void 0 ? _b : fn.code;
179
+ for (let i = 0; i < codeLines.length; i++) {
180
+ const line = codeLines[i];
181
+ const shouldEndWithSemicolon = i < codeLines.length - 1 || fn.returns === undefined;
182
+ if (line !== undefined && line.length > 0) {
183
+ if (shouldEndWithSemicolon && !['{', '}', ';'].includes(line.charAt(line.length - 1))) {
184
+ codeLines[i] += ';';
185
+ }
186
+ else if (!shouldEndWithSemicolon && line.endsWith(';')) {
187
+ codeLines[i] = line.slice(0, line.length - 1);
188
+ }
189
+ }
190
+ }
191
+ return printFunction2(head, args, fn.tag, fn.returns, undefined, codeLines);
192
+ }
193
+ function printContractFunctions(contract) {
194
+ const implLines = [];
195
+ implLines.push('#[contractimpl]');
196
+ implLines.push(`impl ${contract.name} {`);
197
+ implLines.push(printConstructor(contract));
198
+ implLines.push('}');
199
+ return implLines;
200
+ }
201
+ function printConstructor(contract) {
202
+ if (contract.constructorCode.length > 0) {
203
+ const head = 'pub fn __constructor';
204
+ const args = [(0, common_options_1.getSelfArg)(), ...contract.constructorArgs];
205
+ const body = (0, format_lines_1.spaceBetween)(withSemicolons(contract.constructorCode));
206
+ const constructor = printFunction2(head, args.map(a => printArgument(a)), undefined, undefined, undefined, body);
207
+ return constructor;
208
+ }
209
+ else {
210
+ return [];
211
+ }
212
+ }
213
+ // generic for functions and constructors
214
+ // kindedName = 'fn foo'
215
+ function printFunction2(kindedName, args, tag, returns, returnLine, code) {
216
+ const fn = [];
217
+ if (tag !== undefined) {
218
+ fn.push(`#[${tag}]`);
219
+ }
220
+ let accum = `${kindedName}(`;
221
+ if (args.length > 0) {
222
+ const formattedArgs = args.join(', ');
223
+ if (formattedArgs.length > 80) {
224
+ fn.push(accum);
225
+ accum = '';
226
+ // print each arg in a separate line
227
+ fn.push(args.map(arg => `${arg},`));
228
+ }
229
+ else {
230
+ accum += `${formattedArgs}`;
231
+ }
232
+ }
233
+ accum += ')';
234
+ if (returns === undefined) {
235
+ accum += ' {';
236
+ }
237
+ else {
238
+ accum += ` -> ${returns} {`;
239
+ }
240
+ fn.push(accum);
241
+ fn.push(code);
242
+ if (returnLine !== undefined) {
243
+ fn.push([returnLine]);
244
+ }
245
+ fn.push('}');
246
+ return fn;
247
+ }
248
+ function printArgument(arg) {
249
+ if (arg.type !== undefined) {
250
+ const type = arg.type;
251
+ return `${arg.name}: ${type}`;
252
+ }
253
+ else {
254
+ return `${arg.name}`;
255
+ }
256
+ }
257
+ //# sourceMappingURL=print.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"print.js","sourceRoot":"","sources":["../src/print.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,15 @@
1
+ import type { BaseFunction, BaseImplementedTrait, ContractBuilder } from './contract';
2
+ export declare const accessOptions: readonly [false, "ownable"];
3
+ export declare const DEFAULT_ACCESS_CONTROL = "ownable";
4
+ export type Access = (typeof accessOptions)[number];
5
+ /**
6
+ * Sets access control for the contract via constructor args.
7
+ */
8
+ export declare function setAccessControl(c: ContractBuilder, access: Access): void;
9
+ /**
10
+ * Enables access control for the contract and restricts the given function with access control.
11
+ *
12
+ * If `caller` is provided, requires that the caller is the owner. Otherwise, requires that the owner is authorized.
13
+ */
14
+ export declare function requireAccessControl(c: ContractBuilder, trait: BaseImplementedTrait, fn: BaseFunction, access: Access, caller?: string): void;
15
+ //# sourceMappingURL=set-access-control.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"set-access-control.d.ts","sourceRoot":"","sources":["../src/set-access-control.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,YAAY,EAAE,oBAAoB,EAAE,eAAe,EAAE,MAAM,YAAY,CAAC;AAEtF,eAAO,MAAM,aAAa,6BAA8B,CAAC;AACzD,eAAO,MAAM,sBAAsB,YAAY,CAAC;AAEhD,MAAM,MAAM,MAAM,GAAG,CAAC,OAAO,aAAa,CAAC,CAAC,MAAM,CAAC,CAAC;AAEpD;;GAEG;AACH,wBAAgB,gBAAgB,CAAC,CAAC,EAAE,eAAe,EAAE,MAAM,EAAE,MAAM,GAAG,IAAI,CAoBzE;AAED;;;;GAIG;AACH,wBAAgB,oBAAoB,CAClC,CAAC,EAAE,eAAe,EAClB,KAAK,EAAE,oBAAoB,EAC3B,EAAE,EAAE,YAAY,EAChB,MAAM,EAAE,MAAM,EACd,MAAM,CAAC,EAAE,MAAM,GACd,IAAI,CA6BN"}
@@ -0,0 +1,67 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.DEFAULT_ACCESS_CONTROL = exports.accessOptions = void 0;
4
+ exports.setAccessControl = setAccessControl;
5
+ exports.requireAccessControl = requireAccessControl;
6
+ exports.accessOptions = [false, 'ownable'];
7
+ exports.DEFAULT_ACCESS_CONTROL = 'ownable';
8
+ /**
9
+ * Sets access control for the contract via constructor args.
10
+ */
11
+ function setAccessControl(c, access) {
12
+ switch (access) {
13
+ case false:
14
+ break;
15
+ case 'ownable': {
16
+ if (!c.ownable) {
17
+ c.ownable = true;
18
+ c.addUseClause('soroban_sdk', 'symbol_short');
19
+ c.addUseClause('soroban_sdk', 'Symbol');
20
+ c.addVariable({ name: 'OWNER', type: 'Symbol', value: `symbol_short!("OWNER")` });
21
+ c.addConstructorArgument({ name: 'owner', type: 'Address' });
22
+ c.addConstructorCode('e.storage().instance().set(&OWNER, &owner);');
23
+ }
24
+ break;
25
+ }
26
+ default: {
27
+ const _ = access;
28
+ throw new Error('Unknown value for `access`');
29
+ }
30
+ }
31
+ }
32
+ /**
33
+ * Enables access control for the contract and restricts the given function with access control.
34
+ *
35
+ * If `caller` is provided, requires that the caller is the owner. Otherwise, requires that the owner is authorized.
36
+ */
37
+ function requireAccessControl(c, trait, fn, access, caller) {
38
+ if (access === false) {
39
+ access = exports.DEFAULT_ACCESS_CONTROL;
40
+ }
41
+ setAccessControl(c, access);
42
+ switch (access) {
43
+ case 'ownable': {
44
+ c.addUseClause('soroban_sdk', 'Address');
45
+ const getOwner = 'let owner: Address = e.storage().instance().get(&OWNER).expect("owner should be set");';
46
+ if (caller) {
47
+ c.addUseClause('soroban_sdk', 'panic_with_error');
48
+ c.addError('Unauthorized', 1); // TODO: Ensure there are no conflicts in error codes
49
+ c.addFunctionCodeBefore(trait, fn, [
50
+ getOwner,
51
+ 'if owner != caller {',
52
+ ` panic_with_error!(e, ${c.name}Error::Unauthorized)`,
53
+ '}',
54
+ ]);
55
+ }
56
+ else {
57
+ c.addFunctionCodeBefore(trait, fn, [getOwner, 'owner.require_auth();']);
58
+ }
59
+ break;
60
+ }
61
+ default: {
62
+ const _ = access;
63
+ throw new Error('Unknown value for `access`');
64
+ }
65
+ }
66
+ }
67
+ //# sourceMappingURL=set-access-control.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"set-access-control.js","sourceRoot":"","sources":["../src/set-access-control.ts"],"names":[],"mappings":";;;AAUA,4CAoBC;AAOD,oDAmCC;AAtEY,QAAA,aAAa,GAAG,CAAC,KAAK,EAAE,SAAS,CAAU,CAAC;AAC5C,QAAA,sBAAsB,GAAG,SAAS,CAAC;AAIhD;;GAEG;AACH,SAAgB,gBAAgB,CAAC,CAAkB,EAAE,MAAc;IACjE,QAAQ,MAAM,EAAE,CAAC;QACf,KAAK,KAAK;YACR,MAAM;QACR,KAAK,SAAS,CAAC,CAAC,CAAC;YACf,IAAI,CAAC,CAAC,CAAC,OAAO,EAAE,CAAC;gBACf,CAAC,CAAC,OAAO,GAAG,IAAI,CAAC;gBACjB,CAAC,CAAC,YAAY,CAAC,aAAa,EAAE,cAAc,CAAC,CAAC;gBAC9C,CAAC,CAAC,YAAY,CAAC,aAAa,EAAE,QAAQ,CAAC,CAAC;gBACxC,CAAC,CAAC,WAAW,CAAC,EAAE,IAAI,EAAE,OAAO,EAAE,IAAI,EAAE,QAAQ,EAAE,KAAK,EAAE,wBAAwB,EAAE,CAAC,CAAC;gBAClF,CAAC,CAAC,sBAAsB,CAAC,EAAE,IAAI,EAAE,OAAO,EAAE,IAAI,EAAE,SAAS,EAAE,CAAC,CAAC;gBAC7D,CAAC,CAAC,kBAAkB,CAAC,6CAA6C,CAAC,CAAC;YACtE,CAAC;YACD,MAAM;QACR,CAAC;QACD,OAAO,CAAC,CAAC,CAAC;YACR,MAAM,CAAC,GAAU,MAAM,CAAC;YACxB,MAAM,IAAI,KAAK,CAAC,4BAA4B,CAAC,CAAC;QAChD,CAAC;IACH,CAAC;AACH,CAAC;AAED;;;;GAIG;AACH,SAAgB,oBAAoB,CAClC,CAAkB,EAClB,KAA2B,EAC3B,EAAgB,EAChB,MAAc,EACd,MAAe;IAEf,IAAI,MAAM,KAAK,KAAK,EAAE,CAAC;QACrB,MAAM,GAAG,8BAAsB,CAAC;IAClC,CAAC;IACD,gBAAgB,CAAC,CAAC,EAAE,MAAM,CAAC,CAAC;IAE5B,QAAQ,MAAM,EAAE,CAAC;QACf,KAAK,SAAS,CAAC,CAAC,CAAC;YACf,CAAC,CAAC,YAAY,CAAC,aAAa,EAAE,SAAS,CAAC,CAAC;YACzC,MAAM,QAAQ,GAAG,wFAAwF,CAAC;YAC1G,IAAI,MAAM,EAAE,CAAC;gBACX,CAAC,CAAC,YAAY,CAAC,aAAa,EAAE,kBAAkB,CAAC,CAAC;gBAClD,CAAC,CAAC,QAAQ,CAAC,cAAc,EAAE,CAAC,CAAC,CAAC,CAAC,qDAAqD;gBACpF,CAAC,CAAC,qBAAqB,CAAC,KAAK,EAAE,EAAE,EAAE;oBACjC,QAAQ;oBACR,sBAAsB;oBACtB,4BAA4B,CAAC,CAAC,IAAI,sBAAsB;oBACxD,GAAG;iBACJ,CAAC,CAAC;YACL,CAAC;iBAAM,CAAC;gBACN,CAAC,CAAC,qBAAqB,CAAC,KAAK,EAAE,EAAE,EAAE,CAAC,QAAQ,EAAE,uBAAuB,CAAC,CAAC,CAAC;YAC1E,CAAC;YACD,MAAM;QACR,CAAC;QACD,OAAO,CAAC,CAAC,CAAC;YACR,MAAM,CAAC,GAAU,MAAM,CAAC;YACxB,MAAM,IAAI,KAAK,CAAC,4BAA4B,CAAC,CAAC;QAChD,CAAC;IACH,CAAC;AACH,CAAC"}
@@ -0,0 +1,10 @@
1
+ import type { ContractBuilder } from './contract';
2
+ export declare const infoOptions: readonly [{}, {
3
+ readonly license: "WTFPL";
4
+ }];
5
+ export declare const defaults: Info;
6
+ export type Info = {
7
+ license?: string;
8
+ };
9
+ export declare function setInfo(c: ContractBuilder, info: Info): void;
10
+ //# sourceMappingURL=set-info.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"set-info.d.ts","sourceRoot":"","sources":["../src/set-info.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,YAAY,CAAC;AAElD,eAAO,MAAM,WAAW;;EAAsC,CAAC;AAE/D,eAAO,MAAM,QAAQ,EAAE,IAAyB,CAAC;AAEjD,MAAM,MAAM,IAAI,GAAG;IACjB,OAAO,CAAC,EAAE,MAAM,CAAC;CAClB,CAAC;AAEF,wBAAgB,OAAO,CAAC,CAAC,EAAE,eAAe,EAAE,IAAI,EAAE,IAAI,GAAG,IAAI,CAM5D"}
@@ -0,0 +1,13 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.defaults = exports.infoOptions = void 0;
4
+ exports.setInfo = setInfo;
5
+ exports.infoOptions = [{}, { license: 'WTFPL' }];
6
+ exports.defaults = { license: 'MIT' };
7
+ function setInfo(c, info) {
8
+ const { license } = info;
9
+ if (license) {
10
+ c.license = license;
11
+ }
12
+ }
13
+ //# sourceMappingURL=set-info.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"set-info.js","sourceRoot":"","sources":["../src/set-info.ts"],"names":[],"mappings":";;;AAUA,0BAMC;AAdY,QAAA,WAAW,GAAG,CAAC,EAAE,EAAE,EAAE,OAAO,EAAE,OAAO,EAAE,CAAU,CAAC;AAElD,QAAA,QAAQ,GAAS,EAAE,OAAO,EAAE,KAAK,EAAE,CAAC;AAMjD,SAAgB,OAAO,CAAC,CAAkB,EAAE,IAAU;IACpD,MAAM,EAAE,OAAO,EAAE,GAAG,IAAI,CAAC;IAEzB,IAAI,OAAO,EAAE,CAAC;QACZ,CAAC,CAAC,OAAO,GAAG,OAAO,CAAC;IACtB,CAAC;AACH,CAAC"}
package/dist/test.d.ts ADDED
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=test.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"test.d.ts","sourceRoot":"","sources":["../src/test.ts"],"names":[],"mappings":""}
package/dist/test.js ADDED
@@ -0,0 +1,21 @@
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
+ const fs_1 = require("fs");
7
+ const os_1 = __importDefault(require("os"));
8
+ const ava_1 = __importDefault(require("ava"));
9
+ const path_1 = __importDefault(require("path"));
10
+ const sources_1 = require("./generate/sources");
11
+ const test = ava_1.default;
12
+ test.serial('fungible result generated', async (t) => {
13
+ await testGenerate(t, 'Fungible');
14
+ });
15
+ async function testGenerate(t, kind) {
16
+ const generatedSourcesPath = path_1.default.join(os_1.default.tmpdir(), 'oz-wizard-stellar');
17
+ await fs_1.promises.rm(generatedSourcesPath, { force: true, recursive: true });
18
+ await (0, sources_1.writeGeneratedSources)(generatedSourcesPath, true, kind);
19
+ t.pass();
20
+ }
21
+ //# sourceMappingURL=test.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"test.js","sourceRoot":"","sources":["../src/test.ts"],"names":[],"mappings":";;;;;AAAA,2BAAoC;AACpC,4CAAoB;AAEpB,8CAAwB;AACxB,gDAAwB;AAExB,gDAA2D;AAO3D,MAAM,IAAI,GAAG,aAAwB,CAAC;AAEtC,IAAI,CAAC,MAAM,CAAC,2BAA2B,EAAE,KAAK,EAAC,CAAC,EAAC,EAAE;IACjD,MAAM,YAAY,CAAC,CAAC,EAAE,UAAU,CAAC,CAAC;AACpC,CAAC,CAAC,CAAC;AAEH,KAAK,UAAU,YAAY,CAAC,CAA4B,EAAE,IAAyB;IACjF,MAAM,oBAAoB,GAAG,cAAI,CAAC,IAAI,CAAC,YAAE,CAAC,MAAM,EAAE,EAAE,mBAAmB,CAAC,CAAC;IACzE,MAAM,aAAE,CAAC,EAAE,CAAC,oBAAoB,EAAE,EAAE,KAAK,EAAE,IAAI,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC;IACpE,MAAM,IAAA,+BAAqB,EAAC,oBAAoB,EAAE,IAAI,EAAE,IAAI,CAAC,CAAC;IAE9D,CAAC,CAAC,IAAI,EAAE,CAAC;AACX,CAAC"}
@@ -0,0 +1,27 @@
1
+ /**
2
+ * Converts to an identifier according to the rules in https://docs.cairo-lang.org/language_constructs/identifiers.html
3
+ */
4
+ export declare function toIdentifier(str: string, capitalize?: boolean): string;
5
+ /**
6
+ * Converts to a ByteArray compatible string literal
7
+ */
8
+ export declare function toByteArray(str: string): string;
9
+ declare const UINT_MAX_VALUES: {
10
+ readonly u8: bigint;
11
+ readonly u16: bigint;
12
+ readonly u32: bigint;
13
+ readonly u64: bigint;
14
+ readonly u128: bigint;
15
+ readonly u256: bigint;
16
+ };
17
+ export type UintType = keyof typeof UINT_MAX_VALUES;
18
+ /**
19
+ * Checks that a string/number value is a valid `uint` value and converts it to bigint
20
+ */
21
+ export declare function toUint(value: number | string, field: string, type: UintType): bigint;
22
+ /**
23
+ * Checks that a string/number value is a valid `uint` value
24
+ */
25
+ export declare function validateUint(value: number | string, field: string, type: UintType): void;
26
+ export {};
27
+ //# sourceMappingURL=convert-strings.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"convert-strings.d.ts","sourceRoot":"","sources":["../../src/utils/convert-strings.ts"],"names":[],"mappings":"AAIA;;GAEG;AACH,wBAAgB,YAAY,CAAC,GAAG,EAAE,MAAM,EAAE,UAAU,UAAQ,GAAG,MAAM,CAepE;AAED;;GAEG;AACH,wBAAgB,WAAW,CAAC,GAAG,EAAE,MAAM,GAAG,MAAM,CAM/C;AAaD,QAAA,MAAM,eAAe;;;;;;;CAOX,CAAC;AAEX,MAAM,MAAM,QAAQ,GAAG,MAAM,OAAO,eAAe,CAAC;AAEpD;;GAEG;AACH,wBAAgB,MAAM,CAAC,KAAK,EAAE,MAAM,GAAG,MAAM,EAAE,KAAK,EAAE,MAAM,EAAE,IAAI,EAAE,QAAQ,GAAG,MAAM,CAepF;AAED;;GAEG;AACH,wBAAgB,YAAY,CAAC,KAAK,EAAE,MAAM,GAAG,MAAM,EAAE,KAAK,EAAE,MAAM,EAAE,IAAI,EAAE,QAAQ,GAAG,IAAI,CAExF"}
@@ -0,0 +1,81 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.toIdentifier = toIdentifier;
4
+ exports.toByteArray = toByteArray;
5
+ exports.toUint = toUint;
6
+ exports.validateUint = validateUint;
7
+ const error_1 = require("../error");
8
+ // TODO: Review and convert these to properly handle language restrictions for Stellar
9
+ /**
10
+ * Converts to an identifier according to the rules in https://docs.cairo-lang.org/language_constructs/identifiers.html
11
+ */
12
+ function toIdentifier(str, capitalize = false) {
13
+ const result = str
14
+ .normalize('NFD')
15
+ .replace(/[\u0300-\u036f]/g, '') // remove accents
16
+ .replace(/^[^a-zA-Z_]+/, '')
17
+ .replace(/^(.)/, c => (capitalize ? c.toUpperCase() : c))
18
+ .replace(/[^\w]+(.?)/g, (_, c) => c.toUpperCase());
19
+ if (result.length === 0) {
20
+ throw new error_1.OptionsError({
21
+ name: 'Identifier is empty or does not have valid characters',
22
+ });
23
+ }
24
+ else {
25
+ return result;
26
+ }
27
+ }
28
+ /**
29
+ * Converts to a ByteArray compatible string literal
30
+ */
31
+ function toByteArray(str) {
32
+ return str
33
+ .normalize('NFD')
34
+ .replace(/[\u0300-\u036f]/g, '') // remove accents
35
+ .replace(/[^\x20-\x7E]+/g, '') // remove non-ascii-printable characters
36
+ .replace(/(\\|")/g, (_, c) => '\\' + c); // escape backslash or double quotes
37
+ }
38
+ function maxValueOfUint(bits) {
39
+ if (bits <= 0) {
40
+ throw new Error(`Number of bits must be positive (actual '${bits}').`);
41
+ }
42
+ if (bits % 8 !== 0) {
43
+ throw new Error(`The number of bits must be a multiple of 8 (actual '${bits}').`);
44
+ }
45
+ const bytes = bits / 8;
46
+ return BigInt('0x' + 'ff'.repeat(bytes));
47
+ }
48
+ const UINT_MAX_VALUES = {
49
+ u8: maxValueOfUint(8),
50
+ u16: maxValueOfUint(16),
51
+ u32: maxValueOfUint(32),
52
+ u64: maxValueOfUint(64),
53
+ u128: maxValueOfUint(128),
54
+ u256: maxValueOfUint(256),
55
+ };
56
+ /**
57
+ * Checks that a string/number value is a valid `uint` value and converts it to bigint
58
+ */
59
+ function toUint(value, field, type) {
60
+ const valueAsStr = value.toString();
61
+ const isValidNumber = /^\d+$/.test(valueAsStr);
62
+ if (!isValidNumber) {
63
+ throw new error_1.OptionsError({
64
+ [field]: 'Not a valid number',
65
+ });
66
+ }
67
+ const numValue = BigInt(valueAsStr);
68
+ if (numValue > UINT_MAX_VALUES[type]) {
69
+ throw new error_1.OptionsError({
70
+ [field]: `Value is greater than ${type} max value`,
71
+ });
72
+ }
73
+ return numValue;
74
+ }
75
+ /**
76
+ * Checks that a string/number value is a valid `uint` value
77
+ */
78
+ function validateUint(value, field, type) {
79
+ const _ = toUint(value, field, type);
80
+ }
81
+ //# sourceMappingURL=convert-strings.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"convert-strings.js","sourceRoot":"","sources":["../../src/utils/convert-strings.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,5 @@
1
+ import type { BaseFunction } from '../contract';
2
+ type ImplicitNameFunction = Omit<BaseFunction, 'name'>;
3
+ export declare function defineFunctions<F extends string>(fns: Record<F, ImplicitNameFunction>): Record<F, BaseFunction>;
4
+ export {};
5
+ //# sourceMappingURL=define-functions.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"define-functions.d.ts","sourceRoot":"","sources":["../../src/utils/define-functions.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,aAAa,CAAC;AAEhD,KAAK,oBAAoB,GAAG,IAAI,CAAC,YAAY,EAAE,MAAM,CAAC,CAAC;AAEvD,wBAAgB,eAAe,CAAC,CAAC,SAAS,MAAM,EAAE,GAAG,EAAE,MAAM,CAAC,CAAC,EAAE,oBAAoB,CAAC,GAAG,MAAM,CAAC,CAAC,EAAE,YAAY,CAAC,CAAC"}
@@ -0,0 +1,7 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.defineFunctions = defineFunctions;
4
+ function defineFunctions(fns) {
5
+ return Object.fromEntries(Object.entries(fns).map(([name, fn]) => [name, Object.assign({ name }, fn)]));
6
+ }
7
+ //# sourceMappingURL=define-functions.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"define-functions.js","sourceRoot":"","sources":["../../src/utils/define-functions.ts"],"names":[],"mappings":";;AAMA,0CAEC;AAFD,SAAgB,eAAe,CAAC,GAAyC;IACvE,OAAO,MAAM,CAAC,WAAW,CAAC,MAAM,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC,IAAI,EAAE,MAAM,CAAC,MAAM,CAAC,EAAE,IAAI,EAAE,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC;AAC1G,CAAC"}
@@ -0,0 +1,6 @@
1
+ export type Lines = string | typeof whitespace | Lines[];
2
+ declare const whitespace: unique symbol;
3
+ export declare function formatLines(...lines: Lines[]): string;
4
+ export declare function spaceBetween(...lines: Lines[][]): Lines[];
5
+ export {};
6
+ //# sourceMappingURL=format-lines.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"format-lines.d.ts","sourceRoot":"","sources":["../../src/utils/format-lines.ts"],"names":[],"mappings":"AAAA,MAAM,MAAM,KAAK,GAAG,MAAM,GAAG,OAAO,UAAU,GAAG,KAAK,EAAE,CAAC;AAEzD,QAAA,MAAM,UAAU,eAAuB,CAAC;AAExC,wBAAgB,WAAW,CAAC,GAAG,KAAK,EAAE,KAAK,EAAE,GAAG,MAAM,CAErD;AAcD,wBAAgB,YAAY,CAAC,GAAG,KAAK,EAAE,KAAK,EAAE,EAAE,GAAG,KAAK,EAAE,CAKzD"}
@@ -0,0 +1,28 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.formatLines = formatLines;
4
+ exports.spaceBetween = spaceBetween;
5
+ const whitespace = Symbol('whitespace');
6
+ function formatLines(...lines) {
7
+ return [...indentEach(0, lines)].join('\n') + '\n';
8
+ }
9
+ function* indentEach(indent, lines) {
10
+ for (const line of lines) {
11
+ if (line === whitespace) {
12
+ yield '';
13
+ }
14
+ else if (Array.isArray(line)) {
15
+ yield* indentEach(indent + 1, line);
16
+ }
17
+ else {
18
+ yield ' '.repeat(indent) + line;
19
+ }
20
+ }
21
+ }
22
+ function spaceBetween(...lines) {
23
+ return lines
24
+ .filter(l => l.length > 0)
25
+ .flatMap(l => [whitespace, ...l])
26
+ .slice(1);
27
+ }
28
+ //# sourceMappingURL=format-lines.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"format-lines.js","sourceRoot":"","sources":["../../src/utils/format-lines.ts"],"names":[],"mappings":";;AAIA,kCAEC;AAcD,oCAKC;AAvBD,MAAM,UAAU,GAAG,MAAM,CAAC,YAAY,CAAC,CAAC;AAExC,SAAgB,WAAW,CAAC,GAAG,KAAc;IAC3C,OAAO,CAAC,GAAG,UAAU,CAAC,CAAC,EAAE,KAAK,CAAC,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,GAAG,IAAI,CAAC;AACrD,CAAC;AAED,QAAQ,CAAC,CAAC,UAAU,CAAC,MAAc,EAAE,KAAc;IACjD,KAAK,MAAM,IAAI,IAAI,KAAK,EAAE,CAAC;QACzB,IAAI,IAAI,KAAK,UAAU,EAAE,CAAC;YACxB,MAAM,EAAE,CAAC;QACX,CAAC;aAAM,IAAI,KAAK,CAAC,OAAO,CAAC,IAAI,CAAC,EAAE,CAAC;YAC/B,KAAK,CAAC,CAAC,UAAU,CAAC,MAAM,GAAG,CAAC,EAAE,IAAI,CAAC,CAAC;QACtC,CAAC;aAAM,CAAC;YACN,MAAM,MAAM,CAAC,MAAM,CAAC,MAAM,CAAC,GAAG,IAAI,CAAC;QACrC,CAAC;IACH,CAAC;AACH,CAAC;AAED,SAAgB,YAAY,CAAC,GAAG,KAAgB;IAC9C,OAAO,KAAK;SACT,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,MAAM,GAAG,CAAC,CAAC;SACzB,OAAO,CAAQ,CAAC,CAAC,EAAE,CAAC,CAAC,UAAU,EAAE,GAAG,CAAC,CAAC,CAAC;SACvC,KAAK,CAAC,CAAC,CAAC,CAAC;AACd,CAAC"}
@@ -0,0 +1,2 @@
1
+ export declare function sortedBy<T>(xs: Iterable<T>, fn: (x: T) => number): T[];
2
+ //# sourceMappingURL=sorted-by.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"sorted-by.d.ts","sourceRoot":"","sources":["../../src/utils/sorted-by.ts"],"names":[],"mappings":"AAAA,wBAAgB,QAAQ,CAAC,CAAC,EAAE,EAAE,EAAE,QAAQ,CAAC,CAAC,CAAC,EAAE,EAAE,EAAE,CAAC,CAAC,EAAE,CAAC,KAAK,MAAM,GAAG,CAAC,EAAE,CAEtE"}
@@ -0,0 +1,7 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.sortedBy = sortedBy;
4
+ function sortedBy(xs, fn) {
5
+ return Array.from(xs).sort((a, b) => fn(a) - fn(b));
6
+ }
7
+ //# sourceMappingURL=sorted-by.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"sorted-by.js","sourceRoot":"","sources":["../../src/utils/sorted-by.ts"],"names":[],"mappings":";;AAAA,4BAEC;AAFD,SAAgB,QAAQ,CAAI,EAAe,EAAE,EAAoB;IAC/D,OAAO,KAAK,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC,GAAG,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC;AACtD,CAAC"}