@openzeppelin/wizard 0.1.0 → 0.2.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 (157) hide show
  1. package/README.md +28 -1
  2. package/dist/add-pausable.d.ts.map +1 -1
  3. package/dist/add-pausable.js +2 -2
  4. package/dist/add-pausable.js.map +1 -1
  5. package/dist/api.d.ts +8 -0
  6. package/dist/api.d.ts.map +1 -1
  7. package/dist/api.js +15 -5
  8. package/dist/api.js.map +1 -1
  9. package/dist/build-generic.d.ts +4 -0
  10. package/dist/build-generic.d.ts.map +1 -1
  11. package/dist/build-generic.js +3 -0
  12. package/dist/build-generic.js.map +1 -1
  13. package/dist/common-options.js +2 -2
  14. package/dist/common-options.js.map +1 -1
  15. package/dist/custom.d.ts +11 -0
  16. package/dist/custom.d.ts.map +1 -0
  17. package/dist/custom.js +47 -0
  18. package/dist/custom.js.map +1 -0
  19. package/dist/environments/hardhat/package-lock.json +14913 -0
  20. package/dist/environments/hardhat/package.json +34 -0
  21. package/dist/environments/hardhat/upgradeable/package-lock.json +15333 -0
  22. package/dist/environments/hardhat/upgradeable/package.json +35 -0
  23. package/dist/erc1155.d.ts +2 -0
  24. package/dist/erc1155.d.ts.map +1 -1
  25. package/dist/erc1155.js +16 -7
  26. package/dist/erc1155.js.map +1 -1
  27. package/dist/erc20.d.ts +1 -0
  28. package/dist/erc20.d.ts.map +1 -1
  29. package/dist/erc20.js +8 -3
  30. package/dist/erc20.js.map +1 -1
  31. package/dist/erc721.d.ts +1 -0
  32. package/dist/erc721.d.ts.map +1 -1
  33. package/dist/erc721.js +9 -2
  34. package/dist/erc721.js.map +1 -1
  35. package/dist/generate/custom.d.ts +3 -0
  36. package/dist/generate/custom.d.ts.map +1 -0
  37. package/dist/generate/custom.js +20 -0
  38. package/dist/generate/custom.js.map +1 -0
  39. package/dist/generate/erc1155.d.ts.map +1 -1
  40. package/dist/generate/erc1155.js +1 -0
  41. package/dist/generate/erc1155.js.map +1 -1
  42. package/dist/generate/sources.d.ts.map +1 -1
  43. package/dist/generate/sources.js +5 -1
  44. package/dist/generate/sources.js.map +1 -1
  45. package/dist/governor.d.ts +1 -0
  46. package/dist/governor.d.ts.map +1 -1
  47. package/dist/governor.js +8 -2
  48. package/dist/governor.js.map +1 -1
  49. package/dist/index.d.ts +1 -1
  50. package/dist/index.d.ts.map +1 -1
  51. package/dist/index.js +2 -1
  52. package/dist/index.js.map +1 -1
  53. package/dist/kind.js +1 -0
  54. package/dist/kind.js.map +1 -1
  55. package/dist/print.d.ts.map +1 -1
  56. package/dist/print.js +21 -14
  57. package/dist/print.js.map +1 -1
  58. package/dist/set-access-control.d.ts +9 -2
  59. package/dist/set-access-control.d.ts.map +1 -1
  60. package/dist/set-access-control.js +27 -6
  61. package/dist/set-access-control.js.map +1 -1
  62. package/dist/set-upgradeable.d.ts.map +1 -1
  63. package/dist/set-upgradeable.js +1 -1
  64. package/dist/set-upgradeable.js.map +1 -1
  65. package/dist/solidity-version.json +1 -0
  66. package/dist/test.js +30 -1
  67. package/dist/test.js.map +1 -1
  68. package/dist/utils/format-lines.d.ts +1 -0
  69. package/dist/utils/format-lines.d.ts.map +1 -1
  70. package/dist/utils/format-lines.js +9 -5
  71. package/dist/utils/format-lines.js.map +1 -1
  72. package/dist/zip-hardhat.d.ts +5 -0
  73. package/dist/zip-hardhat.d.ts.map +1 -0
  74. package/dist/zip-hardhat.js +187 -0
  75. package/dist/zip-hardhat.js.map +1 -0
  76. package/dist/zip.js +1 -1
  77. package/dist/zip.js.map +1 -1
  78. package/package.json +8 -6
  79. package/src/add-pausable.ts +3 -3
  80. package/src/api.ts +25 -8
  81. package/src/build-generic.ts +5 -0
  82. package/src/common-options.ts +2 -2
  83. package/src/custom.ts +55 -0
  84. package/src/environments/hardhat/package-lock.json +14913 -0
  85. package/src/environments/hardhat/package.json +34 -0
  86. package/src/environments/hardhat/upgradeable/package-lock.json +15333 -0
  87. package/src/environments/hardhat/upgradeable/package.json +35 -0
  88. package/src/erc1155.ts +17 -7
  89. package/src/erc20.ts +8 -4
  90. package/src/erc721.ts +9 -3
  91. package/src/generate/custom.ts +19 -0
  92. package/src/generate/erc1155.ts +1 -0
  93. package/src/generate/sources.ts +6 -1
  94. package/src/governor.ts +7 -2
  95. package/src/index.ts +1 -1
  96. package/src/kind.ts +1 -0
  97. package/src/print.ts +18 -14
  98. package/src/set-access-control.ts +27 -4
  99. package/src/set-upgradeable.ts +2 -2
  100. package/src/solidity-version.json +1 -0
  101. package/src/test.ts +34 -2
  102. package/src/utils/format-lines.ts +8 -3
  103. package/src/zip-hardhat.ts +186 -0
  104. package/src/zip.ts +1 -1
  105. package/dist/contract.test.d.ts +0 -2
  106. package/dist/contract.test.d.ts.map +0 -1
  107. package/dist/contract.test.js +0 -147
  108. package/dist/contract.test.js.map +0 -1
  109. package/dist/erc1155.test.d.ts +0 -2
  110. package/dist/erc1155.test.d.ts.map +0 -1
  111. package/dist/erc1155.test.js +0 -80
  112. package/dist/erc1155.test.js.map +0 -1
  113. package/dist/erc20.test.d.ts +0 -2
  114. package/dist/erc20.test.d.ts.map +0 -1
  115. package/dist/erc20.test.js +0 -126
  116. package/dist/erc20.test.js.map +0 -1
  117. package/dist/erc721.test.d.ts +0 -2
  118. package/dist/erc721.test.d.ts.map +0 -1
  119. package/dist/erc721.test.js +0 -106
  120. package/dist/erc721.test.js.map +0 -1
  121. package/dist/general.d.ts +0 -8
  122. package/dist/general.d.ts.map +0 -1
  123. package/dist/general.js +0 -22
  124. package/dist/general.js.map +0 -1
  125. package/dist/general.test.d.ts +0 -2
  126. package/dist/general.test.d.ts.map +0 -1
  127. package/dist/general.test.js +0 -42
  128. package/dist/general.test.js.map +0 -1
  129. package/dist/governor.test.d.ts +0 -2
  130. package/dist/governor.test.d.ts.map +0 -1
  131. package/dist/governor.test.js +0 -104
  132. package/dist/governor.test.js.map +0 -1
  133. package/dist/utils/to-identifier.test.d.ts +0 -2
  134. package/dist/utils/to-identifier.test.d.ts.map +0 -1
  135. package/dist/utils/to-identifier.test.js +0 -21
  136. package/dist/utils/to-identifier.test.js.map +0 -1
  137. package/dist/zip.test.d.ts +0 -2
  138. package/dist/zip.test.d.ts.map +0 -1
  139. package/dist/zip.test.js +0 -37
  140. package/dist/zip.test.js.map +0 -1
  141. package/src/contract.test.ts +0 -164
  142. package/src/contract.test.ts.md +0 -272
  143. package/src/contract.test.ts.snap +0 -0
  144. package/src/erc1155.test.ts +0 -90
  145. package/src/erc1155.test.ts.md +0 -416
  146. package/src/erc1155.test.ts.snap +0 -0
  147. package/src/erc20.test.ts +0 -144
  148. package/src/erc20.test.ts.md +0 -571
  149. package/src/erc20.test.ts.snap +0 -0
  150. package/src/erc721.test.ts +0 -122
  151. package/src/erc721.test.ts.md +0 -517
  152. package/src/erc721.test.ts.snap +0 -0
  153. package/src/governor.test.ts +0 -120
  154. package/src/governor.test.ts.md +0 -1419
  155. package/src/governor.test.ts.snap +0 -0
  156. package/src/utils/to-identifier.test.ts +0 -20
  157. package/src/zip.test.ts +0 -35
package/src/api.ts CHANGED
@@ -1,8 +1,9 @@
1
1
  import type { CommonOptions } from './common-options';
2
- import { printERC20, defaults as erc20defaults, ERC20Options } from './erc20';
3
- import { printERC721, defaults as erc721defaults, ERC721Options } from './erc721';
4
- import { printERC1155, defaults as erc1155defaults, ERC1155Options } from './erc1155';
5
- import { printGovernor, defaults as governorDefaults, GovernorOptions } from './governor';
2
+ import { printERC20, defaults as erc20defaults, isAccessControlRequired as erc20IsAccessControlRequired, ERC20Options } from './erc20';
3
+ import { printERC721, defaults as erc721defaults, isAccessControlRequired as erc721IsAccessControlRequired, ERC721Options } from './erc721';
4
+ import { printERC1155, defaults as erc1155defaults, isAccessControlRequired as erc1155IsAccessControlRequired, ERC1155Options } from './erc1155';
5
+ import { printGovernor, defaults as governorDefaults, isAccessControlRequired as governorIsAccessControlRequired, GovernorOptions } from './governor';
6
+ import { printCustom, defaults as customDefaults, isAccessControlRequired as customIsAccessControlRequired, CustomOptions } from './custom';
6
7
 
7
8
  export interface WizardContractAPI<Options extends CommonOptions> {
8
9
  /**
@@ -14,26 +15,42 @@ export interface WizardContractAPI<Options extends CommonOptions> {
14
15
  * The default options that are used for `print`.
15
16
  */
16
17
  defaults: Required<Options>;
18
+
19
+ /**
20
+ * Whether any of the provided options require access control to be enabled. If this returns `true`, then calling `print` with the
21
+ * same options would cause the `access` option to default to `'ownable'` if it was `undefined` or `false`.
22
+ */
23
+ isAccessControlRequired: (opts: Partial<Options>) => boolean,
17
24
  }
18
25
 
19
26
  export type ERC20 = WizardContractAPI<ERC20Options>;
20
27
  export type ERC721 = WizardContractAPI<ERC721Options>;
21
28
  export type ERC1155 = WizardContractAPI<ERC1155Options>;
22
29
  export type Governor = WizardContractAPI<GovernorOptions>;
30
+ export type Custom = WizardContractAPI<CustomOptions>;
23
31
 
24
32
  export const erc20: ERC20 = {
25
33
  print: printERC20,
26
- defaults: erc20defaults
34
+ defaults: erc20defaults,
35
+ isAccessControlRequired: erc20IsAccessControlRequired
27
36
  }
28
37
  export const erc721: ERC721 = {
29
38
  print: printERC721,
30
- defaults: erc721defaults
39
+ defaults: erc721defaults,
40
+ isAccessControlRequired: erc721IsAccessControlRequired
31
41
  }
32
42
  export const erc1155: ERC1155 = {
33
43
  print: printERC1155,
34
- defaults: erc1155defaults
44
+ defaults: erc1155defaults,
45
+ isAccessControlRequired: erc1155IsAccessControlRequired
35
46
  }
36
47
  export const governor: Governor = {
37
48
  print: printGovernor,
38
- defaults: governorDefaults
49
+ defaults: governorDefaults,
50
+ isAccessControlRequired: governorIsAccessControlRequired
51
+ }
52
+ export const custom: Custom = {
53
+ print: printCustom,
54
+ defaults: customDefaults,
55
+ isAccessControlRequired: customIsAccessControlRequired
39
56
  }
@@ -1,3 +1,4 @@
1
+ import { CustomOptions, buildCustom } from './custom';
1
2
  import { ERC20Options, buildERC20 } from './erc20';
2
3
  import { ERC721Options, buildERC721 } from './erc721';
3
4
  import { ERC1155Options, buildERC1155 } from './erc1155';
@@ -8,6 +9,7 @@ export interface KindedOptions {
8
9
  ERC721: { kind: 'ERC721' } & ERC721Options;
9
10
  ERC1155: { kind: 'ERC1155' } & ERC1155Options;
10
11
  Governor: { kind: 'Governor' } & GovernorOptions;
12
+ Custom: { kind: 'Custom' } & CustomOptions;
11
13
  }
12
14
 
13
15
  export type GenericOptions = KindedOptions[keyof KindedOptions];
@@ -26,6 +28,9 @@ export function buildGeneric(opts: GenericOptions) {
26
28
  case 'Governor':
27
29
  return buildGovernor(opts);
28
30
 
31
+ case 'Custom':
32
+ return buildCustom(opts);
33
+
29
34
  default:
30
35
  const _: never = opts;
31
36
  throw new Error('Unknown ERC');
@@ -4,7 +4,7 @@ import { defaults as infoDefaults } from "./set-info";
4
4
  import type { Upgradeable } from "./set-upgradeable";
5
5
 
6
6
  export const defaults: Required<CommonOptions> = {
7
- access: 'ownable',
7
+ access: false,
8
8
  upgradeable: false,
9
9
  info: infoDefaults,
10
10
  } as const;
@@ -17,7 +17,7 @@ export interface CommonOptions {
17
17
 
18
18
  export function withCommonDefaults(opts: CommonOptions): Required<CommonOptions> {
19
19
  return {
20
- access: opts.access ?? 'ownable',
20
+ access: opts.access ?? false,
21
21
  upgradeable: opts.upgradeable ?? false,
22
22
  info: opts.info ?? {},
23
23
  };
package/src/custom.ts ADDED
@@ -0,0 +1,55 @@
1
+ import { Contract, ContractBuilder } from './contract';
2
+ import { CommonOptions, withCommonDefaults, defaults as commonDefaults } from './common-options';
3
+ import { setUpgradeable } from './set-upgradeable';
4
+ import { setInfo } from './set-info';
5
+ import { setAccessControl } from './set-access-control';
6
+ import { addPausable } from './add-pausable';
7
+ import { printContract } from './print';
8
+
9
+ export interface CustomOptions extends CommonOptions {
10
+ name: string;
11
+ pausable?: boolean;
12
+ }
13
+
14
+ export const defaults: Required<CustomOptions> = {
15
+ name: 'MyContract',
16
+ pausable: false,
17
+ access: commonDefaults.access,
18
+ upgradeable: commonDefaults.upgradeable,
19
+ info: commonDefaults.info,
20
+ } as const;
21
+
22
+ function withDefaults(opts: CustomOptions): Required<CustomOptions> {
23
+ return {
24
+ ...opts,
25
+ ...withCommonDefaults(opts),
26
+ pausable: opts.pausable ?? defaults.pausable,
27
+ };
28
+ }
29
+
30
+ export function printCustom(opts: CustomOptions = defaults): string {
31
+ return printContract(buildCustom(opts));
32
+ }
33
+
34
+ export function isAccessControlRequired(opts: Partial<CustomOptions>): boolean {
35
+ return opts.pausable || opts.upgradeable === 'uups';
36
+ }
37
+
38
+ export function buildCustom(opts: CustomOptions): Contract {
39
+ const allOpts = withDefaults(opts);
40
+
41
+ const c = new ContractBuilder(allOpts.name);
42
+
43
+ const { access, upgradeable, info } = allOpts;
44
+
45
+ if (allOpts.pausable) {
46
+ addPausable(c, access, []);
47
+ }
48
+
49
+ setAccessControl(c, access);
50
+ setUpgradeable(c, upgradeable, access);
51
+ setInfo(c, info);
52
+
53
+ return c;
54
+ }
55
+