hybrid 0.1.1 → 0.1.2

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/cli.d.ts CHANGED
@@ -1 +1,2 @@
1
1
  #!/usr/bin/env node
2
+ export {};
package/dist/cli.mjs CHANGED
@@ -1,577 +1,5 @@
1
1
  #!/usr/bin/env node
2
- var __defProp = Object.defineProperty;
3
- var __defProps = Object.defineProperties;
4
- var __getOwnPropDescs = Object.getOwnPropertyDescriptors;
5
- var __getOwnPropNames = Object.getOwnPropertyNames;
6
- var __getOwnPropSymbols = Object.getOwnPropertySymbols;
7
- var __hasOwnProp = Object.prototype.hasOwnProperty;
8
- var __propIsEnum = Object.prototype.propertyIsEnumerable;
9
- var __defNormalProp = (obj, key, value) => key in obj ? __defProp(obj, key, { enumerable: true, configurable: true, writable: true, value }) : obj[key] = value;
10
- var __spreadValues = (a, b) => {
11
- for (var prop in b || (b = {}))
12
- if (__hasOwnProp.call(b, prop))
13
- __defNormalProp(a, prop, b[prop]);
14
- if (__getOwnPropSymbols)
15
- for (var prop of __getOwnPropSymbols(b)) {
16
- if (__propIsEnum.call(b, prop))
17
- __defNormalProp(a, prop, b[prop]);
18
- }
19
- return a;
20
- };
21
- var __spreadProps = (a, b) => __defProps(a, __getOwnPropDescs(b));
22
- var __esm = (fn, res) => function __init() {
23
- return fn && (res = (0, fn[__getOwnPropNames(fn)[0]])(fn = 0)), res;
24
- };
25
- var __commonJS = (cb, mod) => function __require() {
26
- return mod || (0, cb[__getOwnPropNames(cb)[0]])((mod = { exports: {} }).exports, mod), mod.exports;
27
- };
28
- var __async = (__this, __arguments, generator) => {
29
- return new Promise((resolve, reject) => {
30
- var fulfilled = (value) => {
31
- try {
32
- step(generator.next(value));
33
- } catch (e) {
34
- reject(e);
35
- }
36
- };
37
- var rejected = (value) => {
38
- try {
39
- step(generator.throw(value));
40
- } catch (e) {
41
- reject(e);
42
- }
43
- };
44
- var step = (x) => x.done ? resolve(x.value) : Promise.resolve(x.value).then(fulfilled, rejected);
45
- step((generator = generator.apply(__this, __arguments)).next());
46
- });
47
- };
2
+ import { run } from '@hybrd/cli';
48
3
 
49
- // src/lib/helpers.ts
50
- import { spawn } from "child_process";
51
- import fs from "fs";
52
- import ora from "ora";
53
- function writeFile(path3, data) {
54
- return __async(this, null, function* () {
55
- return fs.writeFileSync(path3, data);
56
- });
57
- }
58
- function cmd(_0, _1) {
59
- return __async(this, arguments, function* (cmd2, args, opts = {
60
- encoding: "utf8"
61
- }) {
62
- return new Promise((resolve, reject) => {
63
- const install = spawn(cmd2, args, opts);
64
- install.stdout.on("data", (data) => {
65
- var _a;
66
- (_a = opts.stdout) == null ? void 0 : _a.call(opts, data.toString());
67
- });
68
- install.stderr.on("data", (data) => {
69
- var _a;
70
- (_a = opts.stderr) == null ? void 0 : _a.call(opts, data.toString());
71
- });
72
- install.on("error", (error) => {
73
- reject(error);
74
- });
75
- install.on("close", (code) => {
76
- resolve(code);
77
- });
78
- });
79
- });
80
- }
81
- function spinner(label, fn) {
82
- return __async(this, null, function* () {
83
- let spinner2;
84
- if (label)
85
- spinner2 = ora(label).start();
86
- return fn().then(() => {
87
- spinner2 == null ? void 0 : spinner2.succeed(`${label} ... DONE`);
88
- }).catch((err) => {
89
- spinner2 == null ? void 0 : spinner2.fail(`${label}`);
90
- console.error(err);
91
- });
92
- });
93
- }
94
- var init_helpers = __esm({
95
- "src/lib/helpers.ts"() {
96
- }
97
- });
98
-
99
- // src/lib/foundry.ts
100
- function build() {
101
- return __async(this, arguments, function* (opts = {}) {
102
- return new Promise((resolve, reject) => __async(this, null, function* () {
103
- return cmd("forge", ["build", "--force"], __spreadProps(__spreadValues({}, opts), {
104
- // hijack the stderr and reject if anything comes thru
105
- stderr: (msg) => reject(msg)
106
- })).then(resolve);
107
- }));
108
- });
109
- }
110
- function forgeDeploy(name, rpc, key) {
111
- return __async(this, null, function* () {
112
- const output = [];
113
- const error = [];
114
- yield cmd("forge", ["create", name, `--rpc-url`, rpc, "--private-key", key], {
115
- stdout: (msg) => output.push(msg),
116
- stderr: (err) => error.push(err)
117
- });
118
- const address = output.join("").match(/Deployed to: (0x.{40})/);
119
- const hash = output.join("").match(/Transaction hash: (0x.{64})/);
120
- return {
121
- address: address ? address[1] : null,
122
- hash: hash ? hash[1] : null
123
- };
124
- });
125
- }
126
- function anvil(mnemonic, forkUrl) {
127
- return __async(this, null, function* () {
128
- return new Promise((resolve) => {
129
- cmd(
130
- "anvil",
131
- ["--mnemonic", mnemonic, "--fork-url", forkUrl, "--chain-id", "1337"],
132
- {
133
- stdout: (str) => {
134
- const keys = str.match(/0x.{64}/g);
135
- const listens = str.match(/Listening on (.*?)\n/);
136
- if (listens) {
137
- const [host, port] = listens[1].split(":");
138
- resolve({
139
- host,
140
- port,
141
- keys
142
- });
143
- }
144
- },
145
- stderr: (str) => process.stderr.write(str)
146
- }
147
- );
148
- });
149
- });
150
- }
151
- var init_foundry = __esm({
152
- "src/lib/foundry.ts"() {
153
- init_helpers();
154
- }
155
- });
156
-
157
- // src/cmd/build.ts
158
- function build2() {
159
- return __async(this, null, function* () {
160
- return spinner("Building contracts...", () => build());
161
- });
162
- }
163
- var init_build = __esm({
164
- "src/cmd/build.ts"() {
165
- init_foundry();
166
- init_helpers();
167
- }
168
- });
169
-
170
- // src/cmd/test.ts
171
- import { execSync } from "child_process";
172
- function test() {
173
- return __async(this, null, function* () {
174
- return execSync("forge test", { stdio: "inherit" });
175
- });
176
- }
177
- var init_test = __esm({
178
- "src/cmd/test.ts"() {
179
- }
180
- });
181
-
182
- // src/lib/builder.ts
183
- import fs2 from "fs";
184
- var writeConfig, listContracts;
185
- var init_builder = __esm({
186
- "src/lib/builder.ts"() {
187
- writeConfig = () => __async(void 0, null, function* () {
188
- const contracts = yield listContracts(process.cwd() + "/contracts");
189
- const abis = contracts.reduce((acc, filename) => {
190
- const name = filename.replace(".sol", "");
191
- acc[name] = `require("./out/${name}.sol/${name}.json").abi as Abi`;
192
- return acc;
193
- }, {});
194
- return fs2.writeFileSync(
195
- process.cwd() + "/.hybrid/index.ts",
196
- `
197
- import { Abi } from "abitype";
198
-
199
- export const ABI = {
200
- ${Object.keys(abis).map((name) => `${name}: ${abis[name]}`).join(",\n ")}
201
- };
202
- `
203
- );
204
- });
205
- listContracts = (dir) => __async(void 0, null, function* () {
206
- const files = yield fs2.readdirSync(dir);
207
- return files.filter((f) => !f.match(/(t|test)\.sol$/));
208
- });
209
- }
210
- });
211
-
212
- // src/cmd/dev.ts
213
- import bip39 from "bip39";
214
- import chokidar from "chokidar";
215
- import path from "path";
216
- import boxen from "boxen";
217
- import ora2 from "ora";
218
- function dev() {
219
- return __async(this, null, function* () {
220
- const contractsDir = process.cwd() + "/contracts";
221
- const forkUrl = "https://goerli.infura.io/v3/e6481145ca1442b7bf2a8444a8cd0fc8";
222
- const mnemonic = bip39.generateMnemonic();
223
- const [testnet] = yield Promise.all([
224
- anvil(mnemonic, forkUrl)
225
- // @todo - some sort of dev interface
226
- ]);
227
- console.log();
228
- console.log(
229
- boxen(
230
- `
231
- Dev UI | http://127.0.0.1:8580
232
- RPC Node | http://${testnet.host}:${testnet.port}
233
- ----------+----------------------
234
- Docs | https://hybrid.dev
235
- Watching | ${"./" + path.relative(process.cwd(), contractsDir)}
236
- `.trim(),
237
- {
238
- title: "Hybrid Dev Server",
239
- titleAlignment: "left",
240
- borderColor: "greenBright",
241
- padding: 1,
242
- margin: 0.5,
243
- borderStyle: "double"
244
- }
245
- )
246
- );
247
- console.log();
248
- console.log("Keys:");
249
- console.log(testnet.keys.join("\n"));
250
- console.log();
251
- chokidar.watch(contractsDir).on("all", (event, file) => {
252
- switch (event) {
253
- case "change":
254
- if (!file.endsWith(".sol"))
255
- return;
256
- if (file.endsWith(".test.sol")) {
257
- return;
258
- } else {
259
- const filename = path.basename(file);
260
- const name = filename.replace(".sol", "");
261
- let spinner2 = ora2("Deploying " + name).start();
262
- forgeDeploy(name, "http://localhost:8545", testnet.keys[0]).then(
263
- ({ address }) => {
264
- writeConfig();
265
- spinner2.succeed(name + " deployed to " + address);
266
- }
267
- );
268
- }
269
- break;
270
- default:
271
- break;
272
- }
273
- });
274
- });
275
- }
276
- var init_dev = __esm({
277
- "src/cmd/dev.ts"() {
278
- init_foundry();
279
- init_builder();
280
- }
281
- });
282
-
283
- // package.json
284
- var require_package = __commonJS({
285
- "package.json"(exports, module) {
286
- module.exports = {
287
- name: "hybrid",
288
- version: "0.1.0",
289
- description: "Solidity + TypeScript Framework for Web3 Development",
290
- author: "Ian Hunter <ian@ianh.xyz>",
291
- homepage: "https://github.com/ian/hybrid#readme",
292
- license: "ISC",
293
- main: "dist/cli.js",
294
- module: "dist/cli.mjs",
295
- bin: {
296
- hy: "dist/cli.mjs",
297
- hybrid: "dist/cli.mjs"
298
- },
299
- files: [
300
- "dist"
301
- ],
302
- repository: {
303
- type: "git",
304
- url: "git+https://github.com/ian/hybrid.git"
305
- },
306
- scripts: {
307
- clean: "rm -rf dist",
308
- build: "tsup",
309
- dev: "nodemon",
310
- test: "node ./__tests__/cli.test.js"
311
- },
312
- bugs: {
313
- url: "https://github.com/ian/hybrid/issues"
314
- },
315
- dependencies: {
316
- "@hybrd/contracts": "^0.1.0",
317
- "@hybrd/react": "^0.1.0",
318
- bip39: "^3.1.0",
319
- boxen: "^7.0.2",
320
- chalk: "4.1.2",
321
- chokidar: "^3.5.3",
322
- commander: "^10.0.0",
323
- "ethereum-private-key-to-address": "^0.0.7",
324
- ethers: "^6.1.0",
325
- figlet: "^1.5.2",
326
- inquirer: "^9.1.4",
327
- ora: "5.4.0",
328
- viem: "^0.1.10"
329
- },
330
- devDependencies: {
331
- "@types/inquirer": "^9.0.3",
332
- "@types/node": "^18.14.6",
333
- nodemon: "^2.0.21",
334
- tsup: "^6.6.3",
335
- tsx: "^3.12.3",
336
- typescript: "^4.9.5"
337
- },
338
- gitHead: "4dc22eb383621ec5bcdb4989d123489b726af4e7"
339
- };
340
- }
341
- });
342
-
343
- // src/cmd/init.ts
344
- import chalk from "chalk";
345
- import fs3 from "fs";
346
- import path2 from "path";
347
- import inquirer from "inquirer";
348
- function init() {
349
- return __async(this, null, function* () {
350
- const mdVersion = require_package().version;
351
- console.log(`
352
-
353
- \u2588\u2588\u2584
354
- \u2584\u2588\u2584 \u2580\u2588\u2588\u2584
355
- \u2584\u2588\u2588 \u2580\u2588\u2588 \u2588\u2588 \u2580\u2580 \u2593\u2588 \u2593\u2588
356
- \u2588\u2588 \u2584 \u2580\u2588\u2588 \u2588\u2588\u2584 \u2590\u2588\u2588\u2588\u2588\u2584\u2593\u2588\u2588\u2593 \u2593\u2588 \u2593\u2588\u2588\u2588\u2588\u2584 \u2593\u2588\u2588\u2588 \u2584\u2588\u2588\u2588\u2588\u2588\u2588 \u2593\u2588\u2588\u258C \u2584\u2593\u2588\u2588\u2588\u2584 \u2593\u2588\u2593\u2588\u2588\u2588\u2584
357
- \u2593\u2588 \u2593\u2588\u2580 \u2588\u2588 \u2588\u2588 \u2590\u2588 \u2588\u258C \u2588\u2588 \u2588\u2588 \u2588\u2588 \u2588\u258C \u2593\u2588 \u2588\u2588 \u2588\u2588 \u2593\u2588 \u2590\u2588 \u2588\u2588 \u2588\u2588 \u2588\u2588
358
- \u2588\u2588 \u2588\u2588 \u2590\u2588\u2580 \u2593\u2588 \u2590\u2588 \u2588\u258C \u2588\u2588 \u2588\u2588 \u2588\u2588 \u2588\u258C \u2593\u2588 \u2580\u2588\u2584 \u2584\u2588\u2588 \u2593\u2588 \u2590\u2588\u2584 \u2588\u2588 \u2588\u2588\u2584 \u2588\u2588
359
- \u2590\u2588\u258C \u2590\u2588\u2588\u2584\u2584\u2593\u2588\u2580 \u2588\u2588 \u2580 \u2580\u2580 \u2580\u2580 \u2580\u2580 \u2580\u2580 \u2580 \u2580\u2580 \u2580\u2580\u2580\u2580\u2580\u2580 \u2580\u2580 \u2580\u2580\u2580\u2580 \u2588\u2588\u2580\u2580\u2580\u2580
360
- \u2580\u2588\u2588\u2584 \u2584\u2588\u2580 \u2588\u2588
361
- \u2580\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2580 The NFT Development Framework.
362
-
363
-
364
- Installing Hybrid v${mdVersion} ...
365
- `);
366
- if (!fs3.existsSync("./package.json")) {
367
- console.error(
368
- chalk.red("Error: No package.json found. Are you in the right directory?")
369
- );
370
- process.exit();
371
- }
372
- const pkgManager = fs3.existsSync("./yarn.lock") ? "yarn" : fs3.existsSync("./pnpm-lock.yaml") ? "pnpm" : "npm";
373
- const cwd = process.cwd();
374
- const answers = yield inquirer.prompt([
375
- {
376
- name: "chain",
377
- type: "list",
378
- choices: [
379
- "Ethereum",
380
- "Polygon",
381
- "Arbitrum",
382
- "Binance Smart Chain",
383
- "Base"
384
- ]
385
- }
386
- ]);
387
- yield spinner(
388
- "Installing Hybrid dependencies",
389
- () => __async(this, null, function* () {
390
- return cmd(pkgManager, ["add", "hybrid", "hybrid/react"], {
391
- cwd
392
- });
393
- })
394
- );
395
- yield spinner("Adding smart contracts", () => __async(this, null, function* () {
396
- const solidityPragma = "pragma solidity ^0.8.13";
397
- yield cmd("sh", ["-c", "curl -L https://foundry.paradigm.xyz | bash"], {
398
- cwd
399
- });
400
- yield cmd("foundryup", [], {
401
- cwd
402
- });
403
- yield writeFile(
404
- [cwd, "foundry.toml"].join("/"),
405
- `# See more config options https://github.com/foundry-rs/foundry/tree/master/config
406
-
407
- [profile.default]
408
- src = './contracts'
409
- test = './contracts'
410
- cache = true
411
- cache_path = '.hybrid/cache'
412
- out = '.hybrid/out'
413
- libs = ["node_modules"]
414
- gas_reports = ["*"]`
415
- );
416
- yield fs3.mkdirSync([cwd, "contracts"].join("/"), { recursive: true });
417
- yield writeFile(
418
- [cwd, "contracts/MyNFT.sol"].join("/"),
419
- `// SPDX-License-Identifier: UNLICENSED
420
- ${solidityPragma};
421
-
422
- import "erc721a/contracts/ERC721A.sol";
423
-
424
- contract MyNFT is ERC721A {
425
- constructor() ERC721A("My NFT", "NFT") {}
426
-
427
- // We prefer tokenIds to start at 1
428
- function _startTokenId() internal pure override returns (uint256) {
429
- return 1;
430
- }
431
-
432
- function mint(uint256 quantity) external payable {
433
- _mint(msg.sender, quantity);
434
- }
435
-
436
- /**
437
- * @dev override both ERC721A and ERC2981
438
- */
439
- function supportsInterface(
440
- bytes4 interfaceId
441
- ) public view override(ERC721A) returns (bool) {
442
- return ERC721A.supportsInterface(interfaceId);
443
- }
444
- }
445
- `
446
- );
447
- yield writeFile(
448
- [cwd, "contracts/MyNFT.test.sol"].join("/"),
449
- `// SPDX-License-Identifier: UNLICENSED
450
- ${solidityPragma};
451
-
452
- import "forge-std/console.sol";
453
- import "forge-std/Test.sol";
454
-
455
- import "./MyNFT.sol";
456
-
457
- contract MyContractTest is Test {
458
- MyNFT public mock;
459
-
460
- function setUp() public {
461
- mock = new MyNFT();
462
- }
463
-
464
- function testMint() public {
465
- address minter = makeAddr("minter");
466
- assertEq(mock.balanceOf(minter), 0);
467
- vm.prank(minter);
468
- mock.mint(1);
469
- assertEq(mock.balanceOf(minter), 1);
470
- }
471
- }
472
- `
473
- );
474
- }));
475
- yield spinner(
476
- "Adding hybrid.config.js",
477
- () => __async(this, null, function* () {
478
- return writeFile(
479
- [cwd, "hybrid.config.js"].join("/"),
480
- `
481
- module.exports = {
482
- token: "1234567890",
483
- chain: "${answers.chain}",
484
- }
485
- `
486
- );
487
- })
488
- );
489
- console.log();
490
- console.log(
491
- chalk.green.bold("Success!"),
492
- `Hybrid Installed`,
493
- path2.relative(process.cwd(), cwd)
494
- );
495
- });
496
- }
497
- var init_init = __esm({
498
- "src/cmd/init.ts"() {
499
- init_helpers();
500
- }
501
- });
502
-
503
- // src/cmd/deploy.ts
504
- import inquirer2 from "inquirer";
505
- function deploy(contract, target) {
506
- return __async(this, null, function* () {
507
- const { key } = yield inquirer2.prompt([
508
- {
509
- name: "key",
510
- message: "Private Key",
511
- type: "input"
512
- }
513
- ]);
514
- switch (target) {
515
- case "local":
516
- return forgeDeploy(contract, "http://localhost:8545", key);
517
- default:
518
- throw new Error("Unknown target" + target);
519
- }
520
- });
521
- }
522
- var init_deploy = __esm({
523
- "src/cmd/deploy.ts"() {
524
- init_foundry();
525
- }
526
- });
527
-
528
- // src/cli.ts
529
- import { Command } from "commander";
530
- import boxen2 from "boxen";
531
- var require_cli = __commonJS({
532
- "src/cli.ts"(exports) {
533
- init_build();
534
- init_test();
535
- init_dev();
536
- init_init();
537
- init_deploy();
538
- if (process.argv[2] === "init") {
539
- init();
540
- } else {
541
- const program = new Command();
542
- program.name("mint").description("The Hybrid NFT Development Framework").version(require_package().version);
543
- program.command("build").description("Builds smart contracts and generates TS types").action(() => {
544
- build2();
545
- });
546
- program.command("test").description("Run smart contract tests").action(() => {
547
- test();
548
- });
549
- program.command("dev").description("Starts hybrid in development mode").action(() => {
550
- dev();
551
- });
552
- program.command("deploy").description("Deploy smart contracts").argument("<contract>", "Contract name").argument("<target>", "Deploy target [test|prod]").action((contract, target) => __async(exports, null, function* () {
553
- yield deploy(contract, target).then(({ address, hash }) => {
554
- console.log();
555
- console.log(
556
- boxen2(
557
- `Address: ${address}
558
- Tx Hash: ${hash}`,
559
- {
560
- title: `Contract ${contract} Deployed to ${target}`,
561
- titleAlignment: "left",
562
- borderColor: "yellowBright",
563
- padding: 1,
564
- margin: 0.5,
565
- borderStyle: "double"
566
- }
567
- )
568
- );
569
- console.log();
570
- });
571
- }));
572
- program.parse();
573
- }
574
- }
575
- });
576
- export default require_cli();
577
- //# sourceMappingURL=cli.mjs.map
4
+ run();
5
+ //# sourceMappingURL=cli.mjs.map
package/dist/cli.mjs.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"sources":["../src/lib/helpers.ts","../src/lib/foundry.ts","../src/cmd/build.ts","../src/cmd/test.ts","../src/lib/builder.ts","../src/cmd/dev.ts","../package.json","../src/cmd/init.ts","../src/cmd/deploy.ts","../src/cli.ts"],"sourcesContent":["import { spawn } from \"child_process\"\nimport fs from \"fs\"\nimport ora, { Ora } from \"ora\"\n\nexport async function writeFile(path: string, data: string) {\n return fs.writeFileSync(path, data)\n}\n\nexport type SpawnOpts = {\n cwd?: string\n encoding?: string\n stdout?: (data: string) => void\n stderr?: (data: string) => void\n}\n\nexport async function cmd(\n cmd: string,\n args: string[],\n opts: SpawnOpts = {\n encoding: \"utf8\"\n }\n) {\n return new Promise((resolve, reject) => {\n const install = spawn(cmd, args, opts)\n\n install.stdout.on(\"data\", (data: any) => {\n opts.stdout?.(data.toString())\n })\n\n install.stderr.on(\"data\", (data: any) => {\n opts.stderr?.(data.toString())\n })\n\n install.on(\"error\", (error: Error) => {\n reject(error)\n })\n\n install.on(\"close\", (code: number) => {\n resolve(code)\n })\n })\n}\n\nexport async function spinner(label: string, fn: () => Promise<any>) {\n let spinner: Ora\n if (label) spinner = ora(label).start()\n return fn()\n .then(() => {\n spinner?.succeed(`${label} ... DONE`)\n })\n .catch((err) => {\n spinner?.fail(`${label}`)\n console.error(err)\n })\n}\n","import { SpawnOpts, cmd } from \"./helpers\"\n\nexport type BuildOpts = {\n // todo - add more options\n} & SpawnOpts\n\nexport async function build(opts: BuildOpts = {}) {\n return new Promise(async (resolve, reject) => {\n return cmd(\"forge\", [\"build\", \"--force\"], {\n ...opts,\n // hijack the stderr and reject if anything comes thru\n stderr: (msg) => reject(msg)\n }).then(resolve)\n })\n}\n\nexport async function forgeDeploy(name: string, rpc: string, key: string) {\n const output: string[] = []\n const error: string[] = []\n\n await cmd(\"forge\", [\"create\", name, `--rpc-url`, rpc, \"--private-key\", key], {\n stdout: (msg) => output.push(msg),\n stderr: (err) => error.push(err)\n })\n\n const address = output.join(\"\").match(/Deployed to: (0x.{40})/)\n const hash = output.join(\"\").match(/Transaction hash: (0x.{64})/)\n\n return {\n address: address ? address[1] : null,\n hash: hash ? hash[1] : null\n }\n}\n\ntype AnvilListening = {\n host: string\n port: string\n keys: `0x${string}`[]\n}\n\nexport async function anvil(\n mnemonic: string,\n forkUrl: string\n): Promise<AnvilListening> {\n return new Promise((resolve) => {\n cmd(\n \"anvil\",\n [\"--mnemonic\", mnemonic, \"--fork-url\", forkUrl, \"--chain-id\", \"1337\"],\n {\n stdout: (str) => {\n const keys = str.match(/0x.{64}/g) as `0x${string}`[]\n const listens = str.match(/Listening on (.*?)\\n/)\n\n if (listens) {\n const [host, port] = listens[1].split(\":\")\n resolve({\n host,\n port,\n keys\n })\n }\n },\n stderr: (str) => process.stderr.write(str)\n }\n )\n })\n}\n","import * as foundry from \"../lib/foundry\"\nimport { spinner } from \"../lib/helpers\"\n\nexport async function build() {\n return spinner(\"Building contracts...\", () => foundry.build())\n}\n","import { execSync } from \"child_process\"\n\nexport async function test() {\n return execSync(\"forge test\", { stdio: \"inherit\" })\n}\n","import fs from \"fs\"\n\n// import { Abi } from \"abitype\";\n\n// export const ABI = {\n// MyNFT: require(\"./out/MyNFT.sol/MyNFT.json\").abi as Abi,\n// };\n\nexport const writeConfig = async () => {\n const contracts = await listContracts(process.cwd() + \"/contracts\")\n\n const abis = contracts.reduce((acc, filename: string) => {\n const name = filename.replace(\".sol\", \"\")\n acc[name] = `require(\"./out/${name}.sol/${name}.json\").abi as Abi`\n return acc\n }, {})\n\n return fs.writeFileSync(\n process.cwd() + \"/.hybrid/index.ts\",\n `\nimport { Abi } from \"abitype\";\n\nexport const ABI = {\n ${Object.keys(abis)\n .map((name) => `${name}: ${abis[name]}`)\n .join(\",\\n \")}\n};\n `\n )\n}\n\nconst listContracts = async (dir) => {\n const files = await fs.readdirSync(dir)\n return files.filter((f) => !f.match(/(t|test)\\.sol$/))\n}\n","import bip39 from \"bip39\"\nimport chokidar from \"chokidar\"\nimport path from \"path\"\nimport { anvil, forgeDeploy } from \"../lib/foundry\"\nimport boxen from \"boxen\"\nimport ora from \"ora\"\nimport { writeConfig } from \"../lib/builder\"\n\n// @todo\n// [] - switch to config object for paths\n\nexport async function dev() {\n const contractsDir = process.cwd() + \"/contracts\"\n const forkUrl = \"https://goerli.infura.io/v3/e6481145ca1442b7bf2a8444a8cd0fc8\"\n const mnemonic = bip39.generateMnemonic()\n\n const [testnet] = await Promise.all([\n anvil(mnemonic, forkUrl)\n // @todo - some sort of dev interface\n ])\n\n console.log()\n console.log(\n boxen(\n `\nDev UI | http://127.0.0.1:8580\nRPC Node | http://${testnet.host}:${testnet.port}\n----------+----------------------\nDocs | https://hybrid.dev\nWatching | ${\"./\" + path.relative(process.cwd(), contractsDir)}\n`.trim(),\n {\n title: \"Hybrid Dev Server\",\n titleAlignment: \"left\",\n borderColor: \"greenBright\",\n\n padding: 1,\n margin: 0.5,\n borderStyle: \"double\"\n }\n )\n )\n console.log()\n console.log(\"Keys:\")\n console.log(testnet.keys.join(\"\\n\"))\n console.log()\n\n // listCompiled().then((files) => {\n // return files.map((file) =>\n // readCompiled(file).then(({ abi, bytecode }) =>\n // deployContract({\n // privateKey: testnet.keys[0],\n // abi,\n // bytecode\n // }).then(console.log)\n // )\n // )\n // })\n\n chokidar.watch(contractsDir).on(\"all\", (event, file) => {\n switch (event) {\n // case \"add\":\n // console.log(event, path)\n // break\n\n case \"change\":\n if (!file.endsWith(\".sol\")) return\n if (file.endsWith(\".test.sol\")) {\n // console.log(\"Skipping test file\", file)\n return\n } else {\n // build().then(() => {\n\n // })\n\n const filename = path.basename(file)\n const name = filename.replace(\".sol\", \"\")\n\n let spinner = ora(\"Deploying \" + name).start()\n forgeDeploy(name, \"http://localhost:8545\", testnet.keys[0]).then(\n ({ address }) => {\n writeConfig()\n spinner.succeed(name + \" deployed to \" + address)\n }\n )\n\n // .then(() => readCompiled(file))\n // .then(\n // ({ abi, bytecode }) =>\n // forgeDeploy(contract, \"http://localhost:8545\", key)\n // // deployContract({\n // // privateKey: testnet.keys[0],\n // // abi,\n // // bytecode\n // // }).then(console.log)\n // )\n }\n\n break\n default:\n // console.log(event, path)\n break\n }\n })\n}\n\n// const readCompiled = async (file: string) => {\n// const distDir = process.cwd() + \"/.hybrid/out\"\n// const filename = path.basename(file)\n// const name = filename.replace(\".sol\", \"\")\n// const contents = await fs\n// .readFileSync(`${distDir}/${filename}/${name}.json`)\n// .toString()\n// return JSON.parse(contents)\n// }\n","{\n \"name\": \"hybrid\",\n \"version\": \"0.1.0\",\n \"description\": \"Solidity + TypeScript Framework for Web3 Development\",\n \"author\": \"Ian Hunter <ian@ianh.xyz>\",\n \"homepage\": \"https://github.com/ian/hybrid#readme\",\n \"license\": \"ISC\",\n \"main\": \"dist/cli.js\",\n \"module\": \"dist/cli.mjs\",\n \"bin\": {\n \"hy\": \"dist/cli.mjs\",\n \"hybrid\": \"dist/cli.mjs\"\n },\n \"files\": [\n \"dist\"\n ],\n \"repository\": {\n \"type\": \"git\",\n \"url\": \"git+https://github.com/ian/hybrid.git\"\n },\n \"scripts\": {\n \"clean\": \"rm -rf dist\",\n \"build\": \"tsup\",\n \"dev\": \"nodemon\",\n \"test\": \"node ./__tests__/cli.test.js\"\n },\n \"bugs\": {\n \"url\": \"https://github.com/ian/hybrid/issues\"\n },\n \"dependencies\": {\n \"@hybrd/contracts\": \"^0.1.0\",\n \"@hybrd/react\": \"^0.1.0\",\n \"bip39\": \"^3.1.0\",\n \"boxen\": \"^7.0.2\",\n \"chalk\": \"4.1.2\",\n \"chokidar\": \"^3.5.3\",\n \"commander\": \"^10.0.0\",\n \"ethereum-private-key-to-address\": \"^0.0.7\",\n \"ethers\": \"^6.1.0\",\n \"figlet\": \"^1.5.2\",\n \"inquirer\": \"^9.1.4\",\n \"ora\": \"5.4.0\",\n \"viem\": \"^0.1.10\"\n },\n \"devDependencies\": {\n \"@types/inquirer\": \"^9.0.3\",\n \"@types/node\": \"^18.14.6\",\n \"nodemon\": \"^2.0.21\",\n \"tsup\": \"^6.6.3\",\n \"tsx\": \"^3.12.3\",\n \"typescript\": \"^4.9.5\"\n },\n \"gitHead\": \"4dc22eb383621ec5bcdb4989d123489b726af4e7\"\n}\n","import chalk from \"chalk\"\nimport fs from \"fs\"\nimport path from \"path\"\nimport inquirer from \"inquirer\"\nimport { cmd, spinner, writeFile } from \"../lib/helpers\"\n\nexport async function init() {\n const mdVersion = require(\"../../package.json\").version\n\n console.log(`\n\n ██▄\n ▄█▄ ▀██▄\n ▄██ ▀██ ██ ▀▀ ▓█ ▓█\n ██ ▄ ▀██ ██▄ ▐████▄▓██▓ ▓█ ▓████▄ ▓███ ▄██████ ▓██▌ ▄▓███▄ ▓█▓███▄\n ▓█ ▓█▀ ██ ██ ▐█ █▌ ██ ██ ██ █▌ ▓█ ██ ██ ▓█ ▐█ ██ ██ ██\n ██ ██ ▐█▀ ▓█ ▐█ █▌ ██ ██ ██ █▌ ▓█ ▀█▄ ▄██ ▓█ ▐█▄ ██ ██▄ ██\n ▐█▌ ▐██▄▄▓█▀ ██ ▀ ▀▀ ▀▀ ▀▀ ▀▀ ▀ ▀▀ ▀▀▀▀▀▀ ▀▀ ▀▀▀▀ ██▀▀▀▀\n ▀██▄ ▄█▀ ██\n ▀███████▀ The NFT Development Framework.\n\n\nInstalling Hybrid v${mdVersion} ...\n`)\n\n if (!fs.existsSync(\"./package.json\")) {\n console.error(\n chalk.red(\"Error: No package.json found. Are you in the right directory?\")\n )\n process.exit()\n }\n\n const pkgManager = fs.existsSync(\"./yarn.lock\")\n ? \"yarn\"\n : fs.existsSync(\"./pnpm-lock.yaml\")\n ? \"pnpm\"\n : \"npm\"\n\n const cwd = process.cwd()\n const answers = await inquirer.prompt([\n {\n name: \"chain\",\n type: \"list\",\n choices: [\n \"Ethereum\",\n \"Polygon\",\n \"Arbitrum\",\n \"Binance Smart Chain\",\n \"Base\"\n ]\n }\n ])\n\n await spinner(\"Installing Hybrid dependencies\", async () =>\n cmd(pkgManager, [\"add\", \"hybrid\", \"hybrid/react\"], {\n cwd\n })\n )\n\n await spinner(\"Adding smart contracts\", async () => {\n const solidityPragma = \"pragma solidity ^0.8.13\"\n\n await cmd(\"sh\", [\"-c\", \"curl -L https://foundry.paradigm.xyz | bash\"], {\n cwd\n })\n\n await cmd(\"foundryup\", [], {\n cwd\n })\n\n await writeFile(\n [cwd, \"foundry.toml\"].join(\"/\"),\n `# See more config options https://github.com/foundry-rs/foundry/tree/master/config\n\n[profile.default]\nsrc = './contracts'\ntest = './contracts'\ncache = true\ncache_path = '.hybrid/cache'\nout = '.hybrid/out'\nlibs = [\"node_modules\"]\ngas_reports = [\"*\"]`\n )\n\n await fs.mkdirSync([cwd, \"contracts\"].join(\"/\"), { recursive: true })\n\n await writeFile(\n [cwd, \"contracts/MyNFT.sol\"].join(\"/\"),\n `// SPDX-License-Identifier: UNLICENSED\n${solidityPragma};\n\nimport \"erc721a/contracts/ERC721A.sol\";\n\ncontract MyNFT is ERC721A {\n\tconstructor() ERC721A(\"My NFT\", \"NFT\") {}\n\n\t// We prefer tokenIds to start at 1\n\tfunction _startTokenId() internal pure override returns (uint256) {\n\t\treturn 1;\n\t}\n\n\tfunction mint(uint256 quantity) external payable {\n\t\t_mint(msg.sender, quantity);\n\t}\n\n\t/**\n\t * @dev override both ERC721A and ERC2981\n\t */\n\tfunction supportsInterface(\n\t\tbytes4 interfaceId\n\t) public view override(ERC721A) returns (bool) {\n\t\treturn ERC721A.supportsInterface(interfaceId);\n\t}\n}\n `\n )\n\n await writeFile(\n [cwd, \"contracts/MyNFT.test.sol\"].join(\"/\"),\n `// SPDX-License-Identifier: UNLICENSED\n${solidityPragma};\n\nimport \"forge-std/console.sol\";\nimport \"forge-std/Test.sol\";\n\nimport \"./MyNFT.sol\";\n\ncontract MyContractTest is Test {\n\tMyNFT public mock;\n\n\tfunction setUp() public {\n\t\tmock = new MyNFT();\n\t}\n\n\tfunction testMint() public {\n\t\taddress minter = makeAddr(\"minter\");\n\t\tassertEq(mock.balanceOf(minter), 0);\n\t\tvm.prank(minter);\n\t\tmock.mint(1);\n\t\tassertEq(mock.balanceOf(minter), 1);\n\t}\n}\n `\n )\n })\n\n await spinner(\"Adding hybrid.config.js\", async () =>\n writeFile(\n [cwd, \"hybrid.config.js\"].join(\"/\"),\n `\nmodule.exports = {\n token: \"1234567890\",\n chain: \"${answers.chain}\",\n}\n `\n )\n )\n\n console.log()\n console.log(\n chalk.green.bold(\"Success!\"),\n `Hybrid Installed`,\n path.relative(process.cwd(), cwd)\n )\n}\n","import inquirer from \"inquirer\"\nimport { cmd } from \"../lib/helpers\"\nimport { forgeDeploy } from \"../lib/foundry\"\n\nexport async function deploy(contract: string, target: string) {\n // \"contracts:goerli\": \"forge create contracts/src/MintingTest.sol:MintingTest --constructor-args-path ./contracts/.args.goerli --verify --etherscan-api-key $ETHERSCAN_API_KEY --chain goerli --rpc-url $GOERLI_RPC_URL --interactive\",\n // \"contracts:mainnet\": \"forge create contracts/src/AerialExplorers.sol:AerialExplorers --gas-limit 3000000 --constructor-args-path ./contracts/.args.mainnet --verify --etherscan-api-key $ETHERSCAN_API_KEY --chain mainnet --rpc-url $MAINNET_RPC_URL --interactive\",\n\n const { key } = await inquirer.prompt([\n {\n name: \"key\",\n message: \"Private Key\",\n type: \"input\"\n }\n ])\n\n switch (target) {\n case \"local\":\n return forgeDeploy(contract, \"http://localhost:8545\", key)\n default:\n throw new Error(\"Unknown target\" + target)\n }\n}\n","#!/usr/bin/env node\n\nimport { Command } from \"commander\"\nimport { build } from \"./cmd/build\"\nimport { test } from \"./cmd/test\"\nimport { dev } from \"./cmd/dev\"\nimport { init } from \"./cmd/init\"\nimport { deploy } from \"./cmd/deploy\"\nimport boxen from \"boxen\"\n\nif (process.argv[2] === \"init\") {\n // Handle init separately, best to not surface this in the help menu\n init()\n} else {\n const program = new Command()\n program\n .name(\"mint\")\n .description(\"The Hybrid NFT Development Framework\")\n .version(require(\"../package.json\").version)\n\n program\n .command(\"build\")\n .description(\"Builds smart contracts and generates TS types\")\n .action((/* opts */) => {\n build()\n })\n\n program\n .command(\"test\")\n .description(\"Run smart contract tests\")\n .action((/* opts */) => {\n test()\n })\n\n program\n .command(\"dev\")\n .description(\"Starts hybrid in development mode\")\n .action((/* opts */) => {\n dev()\n })\n\n program\n .command(\"deploy\")\n .description(\"Deploy smart contracts\")\n .argument(\"<contract>\", \"Contract name\")\n .argument(\"<target>\", \"Deploy target [test|prod]\")\n .action(async (contract, target) => {\n await deploy(contract, target).then(({ address, hash }) => {\n console.log()\n console.log(\n boxen(\n `Address: ${address}\nTx Hash: ${hash}`,\n {\n title: `Contract ${contract} Deployed to ${target}`,\n titleAlignment: \"left\",\n borderColor: \"yellowBright\",\n padding: 1,\n margin: 0.5,\n borderStyle: \"double\"\n }\n )\n )\n console.log()\n })\n })\n\n program.parse()\n}\n"],"mappings":"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","names":["path","cmd","spinner","build","fs","ora","spinner","fs","path","inquirer","boxen","build"]}
1
+ {"version":3,"file":"cli.mjs","sources":["../src/cli.ts"],"sourcesContent":["#!/usr/bin/env node\n\nimport { run } from \"@hybrd/cli\"\n\nrun()\n"],"names":[],"mappings":";;;AAIA,CAAG,CAAA,CAAA,CAAA,CAAA"}
@@ -0,0 +1,10 @@
1
+ /// <reference types="react" />
2
+ export type DefaultButtonProps = {
3
+ className?: string;
4
+ intent?: "default" | "success" | "error";
5
+ onClick?: () => void;
6
+ children: React.ReactNode;
7
+ disabled?: boolean;
8
+ };
9
+ declare const DefaultButton: (props: DefaultButtonProps) => JSX.Element;
10
+ export default DefaultButton;
@@ -0,0 +1,10 @@
1
+ /// <reference types="react" />
2
+ import { DefaultButtonProps } from "./DefaultButton";
3
+ import { Contract } from "types";
4
+ type MintButtonProps = {
5
+ className?: string;
6
+ contract: Contract;
7
+ button?: React.FC<DefaultButtonProps>;
8
+ };
9
+ declare const MintButton: (props: MintButtonProps) => JSX.Element;
10
+ export default MintButton;
@@ -0,0 +1 @@
1
+ export { default as MintButton } from "./MintButton";
@@ -0,0 +1 @@
1
+ export * from "./useMinting";
@@ -0,0 +1 @@
1
+ export * from "./useContext";
@@ -0,0 +1,4 @@
1
+ export declare function useContext(): {
2
+ address: string;
3
+ chainId: number;
4
+ };