git-slot-machine 1.0.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 (87) hide show
  1. package/LICENSE +21 -0
  2. package/README.md +313 -0
  3. package/dist/animation/slotMachine.d.ts +9 -0
  4. package/dist/animation/slotMachine.d.ts.map +1 -0
  5. package/dist/animation/slotMachine.js +139 -0
  6. package/dist/animation/slotMachine.js.map +1 -0
  7. package/dist/api.d.ts +40 -0
  8. package/dist/api.d.ts.map +1 -0
  9. package/dist/api.js +154 -0
  10. package/dist/api.js.map +1 -0
  11. package/dist/balance.d.ts +11 -0
  12. package/dist/balance.d.ts.map +1 -0
  13. package/dist/balance.js +131 -0
  14. package/dist/balance.js.map +1 -0
  15. package/dist/commands/auth.d.ts +4 -0
  16. package/dist/commands/auth.d.ts.map +1 -0
  17. package/dist/commands/auth.js +91 -0
  18. package/dist/commands/auth.js.map +1 -0
  19. package/dist/commands/balance.d.ts +2 -0
  20. package/dist/commands/balance.d.ts.map +1 -0
  21. package/dist/commands/balance.js +32 -0
  22. package/dist/commands/balance.js.map +1 -0
  23. package/dist/commands/config.d.ts +3 -0
  24. package/dist/commands/config.d.ts.map +1 -0
  25. package/dist/commands/config.js +60 -0
  26. package/dist/commands/config.js.map +1 -0
  27. package/dist/commands/init.d.ts +2 -0
  28. package/dist/commands/init.d.ts.map +1 -0
  29. package/dist/commands/init.js +148 -0
  30. package/dist/commands/init.js.map +1 -0
  31. package/dist/commands/play.d.ts +7 -0
  32. package/dist/commands/play.d.ts.map +1 -0
  33. package/dist/commands/play.js +137 -0
  34. package/dist/commands/play.js.map +1 -0
  35. package/dist/commands/spin.d.ts +6 -0
  36. package/dist/commands/spin.d.ts.map +1 -0
  37. package/dist/commands/spin.js +17 -0
  38. package/dist/commands/spin.js.map +1 -0
  39. package/dist/commands/sync.d.ts +2 -0
  40. package/dist/commands/sync.d.ts.map +1 -0
  41. package/dist/commands/sync.js +52 -0
  42. package/dist/commands/sync.js.map +1 -0
  43. package/dist/commands/test.d.ts +6 -0
  44. package/dist/commands/test.d.ts.map +1 -0
  45. package/dist/commands/test.js +17 -0
  46. package/dist/commands/test.js.map +1 -0
  47. package/dist/config.d.ts +27 -0
  48. package/dist/config.d.ts.map +1 -0
  49. package/dist/config.js +144 -0
  50. package/dist/config.js.map +1 -0
  51. package/dist/index.d.ts +3 -0
  52. package/dist/index.d.ts.map +1 -0
  53. package/dist/index.js +100 -0
  54. package/dist/index.js.map +1 -0
  55. package/dist/patterns.d.ts +27 -0
  56. package/dist/patterns.d.ts.map +1 -0
  57. package/dist/patterns.js +266 -0
  58. package/dist/patterns.js.map +1 -0
  59. package/dist/templates/post-commit.d.ts +2 -0
  60. package/dist/templates/post-commit.d.ts.map +1 -0
  61. package/dist/templates/post-commit.js +19 -0
  62. package/dist/templates/post-commit.js.map +1 -0
  63. package/dist/utils/git.d.ts +4 -0
  64. package/dist/utils/git.d.ts.map +1 -0
  65. package/dist/utils/git.js +42 -0
  66. package/dist/utils/git.js.map +1 -0
  67. package/jest.config.js +12 -0
  68. package/package.json +50 -0
  69. package/src/animation/slotMachine.ts +159 -0
  70. package/src/api.ts +203 -0
  71. package/src/balance.ts +118 -0
  72. package/src/commands/auth.ts +92 -0
  73. package/src/commands/balance.ts +28 -0
  74. package/src/commands/config.ts +59 -0
  75. package/src/commands/init.ts +121 -0
  76. package/src/commands/play.ts +150 -0
  77. package/src/commands/spin.ts +17 -0
  78. package/src/commands/sync.ts +49 -0
  79. package/src/commands/test.ts +19 -0
  80. package/src/config.ts +154 -0
  81. package/src/index.ts +114 -0
  82. package/src/patterns.test.ts +44 -0
  83. package/src/patterns.ts +292 -0
  84. package/src/templates/post-commit.ts +15 -0
  85. package/src/utils/git.ts +38 -0
  86. package/test.txt +2 -0
  87. package/tsconfig.json +20 -0
@@ -0,0 +1,148 @@
1
+ "use strict";
2
+ var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
3
+ if (k2 === undefined) k2 = k;
4
+ var desc = Object.getOwnPropertyDescriptor(m, k);
5
+ if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
6
+ desc = { enumerable: true, get: function() { return m[k]; } };
7
+ }
8
+ Object.defineProperty(o, k2, desc);
9
+ }) : (function(o, m, k, k2) {
10
+ if (k2 === undefined) k2 = k;
11
+ o[k2] = m[k];
12
+ }));
13
+ var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
14
+ Object.defineProperty(o, "default", { enumerable: true, value: v });
15
+ }) : function(o, v) {
16
+ o["default"] = v;
17
+ });
18
+ var __importStar = (this && this.__importStar) || (function () {
19
+ var ownKeys = function(o) {
20
+ ownKeys = Object.getOwnPropertyNames || function (o) {
21
+ var ar = [];
22
+ for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;
23
+ return ar;
24
+ };
25
+ return ownKeys(o);
26
+ };
27
+ return function (mod) {
28
+ if (mod && mod.__esModule) return mod;
29
+ var result = {};
30
+ if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
31
+ __setModuleDefault(result, mod);
32
+ return result;
33
+ };
34
+ })();
35
+ var __importDefault = (this && this.__importDefault) || function (mod) {
36
+ return (mod && mod.__esModule) ? mod : { "default": mod };
37
+ };
38
+ Object.defineProperty(exports, "__esModule", { value: true });
39
+ exports.initCommand = initCommand;
40
+ const fs = __importStar(require("fs"));
41
+ const path = __importStar(require("path"));
42
+ const chalk_1 = __importDefault(require("chalk"));
43
+ const git_1 = require("../utils/git");
44
+ const post_commit_1 = require("../templates/post-commit");
45
+ const config_1 = require("../config");
46
+ async function isRepoPublic(owner, repo) {
47
+ try {
48
+ const response = await fetch(`https://api.github.com/repos/${owner}/${repo}`, {
49
+ headers: {
50
+ 'Accept': 'application/vnd.github+json',
51
+ 'X-GitHub-Api-Version': '2022-11-28',
52
+ },
53
+ });
54
+ if (response.ok) {
55
+ const data = await response.json();
56
+ return data.private === false;
57
+ }
58
+ // 404 could mean private or doesn't exist
59
+ return null;
60
+ }
61
+ catch (error) {
62
+ // Network error or API unavailable
63
+ return null;
64
+ }
65
+ }
66
+ async function initCommand() {
67
+ // Check if git repo
68
+ if (!(0, git_1.isGitRepo)()) {
69
+ console.error(chalk_1.default.red('Error: Not a git repository'));
70
+ console.log(chalk_1.default.dim('Run this command from the root of a git repository'));
71
+ process.exit(1);
72
+ }
73
+ // Extract and save GitHub username from remote URL (do this first)
74
+ const repoInfo = (0, config_1.getRepoInfo)();
75
+ if (!repoInfo) {
76
+ console.log();
77
+ console.error(chalk_1.default.red('Error: No GitHub remote detected'));
78
+ console.log();
79
+ console.log(chalk_1.default.yellow('Git Slot Machine requires a public GitHub repository.'));
80
+ console.log();
81
+ console.log(chalk_1.default.dim('Add a GitHub remote to this repo:'));
82
+ console.log(chalk_1.default.cyan(' git remote add origin https://github.com/username/repo.git'));
83
+ console.log();
84
+ console.log(chalk_1.default.dim('This prevents farming points in private/local repos.'));
85
+ console.log(chalk_1.default.dim('Your commits must be publicly verifiable.'));
86
+ process.exit(1);
87
+ }
88
+ const existingUsername = (0, config_1.getGitHubUsername)();
89
+ if (!existingUsername) {
90
+ (0, config_1.setGitHubUsername)(repoInfo.owner);
91
+ console.log(chalk_1.default.dim(`Detected GitHub username: ${repoInfo.owner}`));
92
+ }
93
+ // Check if repository is public
94
+ console.log(chalk_1.default.dim('Checking repository visibility...'));
95
+ const isPublic = await isRepoPublic(repoInfo.owner, repoInfo.name);
96
+ if (isPublic === false) {
97
+ console.log();
98
+ console.error(chalk_1.default.red('Error: Private repository detected'));
99
+ console.log();
100
+ console.log(chalk_1.default.yellow('Git Slot Machine only supports public repositories.'));
101
+ console.log();
102
+ console.log(chalk_1.default.dim('Why? Your commit hashes would be visible on the public'));
103
+ console.log(chalk_1.default.dim('leaderboard, which could expose information about your'));
104
+ console.log(chalk_1.default.dim('private repository.'));
105
+ console.log();
106
+ console.log(chalk_1.default.dim('Please use git-slot-machine with a public repository.'));
107
+ process.exit(1);
108
+ }
109
+ if (isPublic === null) {
110
+ console.log(chalk_1.default.yellow('⚠️ Could not verify repository visibility'));
111
+ console.log(chalk_1.default.dim('Proceeding with installation...'));
112
+ }
113
+ else {
114
+ console.log(chalk_1.default.green('✓ Public repository confirmed'));
115
+ }
116
+ const hookPath = path.join(process.cwd(), '.git', 'hooks', 'post-commit');
117
+ // Check if hook already exists
118
+ if (fs.existsSync(hookPath)) {
119
+ console.log(chalk_1.default.yellow('Warning: post-commit hook already exists'));
120
+ console.log(chalk_1.default.dim(`Location: ${hookPath}`));
121
+ // TODO: Could add merge logic or backup existing hook
122
+ console.log(chalk_1.default.red('Aborting to avoid overwriting existing hook'));
123
+ console.log(chalk_1.default.dim('Manually add git-slot-machine to your existing hook'));
124
+ process.exit(1);
125
+ }
126
+ // Write the hook
127
+ fs.writeFileSync(hookPath, post_commit_1.POST_COMMIT_HOOK, { mode: 0o755 });
128
+ console.log(chalk_1.default.green('✓ Post-commit hook installed'));
129
+ console.log();
130
+ console.log(chalk_1.default.cyan('Git Slot Machine is ready!'));
131
+ console.log(chalk_1.default.dim('Every commit will now spin the slot machine.'));
132
+ console.log();
133
+ console.log('Try it out:');
134
+ console.log(chalk_1.default.dim(' git commit --allow-empty -m "test"'));
135
+ console.log();
136
+ console.log(chalk_1.default.cyan('Optional: Sync with the API'));
137
+ console.log(chalk_1.default.dim(` git-slot-machine auth login ${repoInfo?.owner || 'your-github-username'}`));
138
+ console.log();
139
+ console.log(chalk_1.default.yellow('What gets sent to the server:'));
140
+ console.log(chalk_1.default.dim(' • Commit hash (7 and 40 character versions)'));
141
+ console.log(chalk_1.default.dim(' • Repository URL, owner, and name'));
142
+ console.log(chalk_1.default.dim(' • GitHub username'));
143
+ console.log(chalk_1.default.dim(' • Pattern type, payout, and balance'));
144
+ console.log();
145
+ console.log(chalk_1.default.dim('You can disable API sync anytime:'));
146
+ console.log(chalk_1.default.dim(' git-slot-machine config set sync-enabled false'));
147
+ }
148
+ //# sourceMappingURL=init.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"init.js","sourceRoot":"","sources":["../../src/commands/init.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AA6BA,kCA2FC;AAxHD,uCAAyB;AACzB,2CAA6B;AAC7B,kDAA0B;AAC1B,sCAAyC;AACzC,0DAA4D;AAC5D,sCAA8E;AAE9E,KAAK,UAAU,YAAY,CAAC,KAAa,EAAE,IAAY;IACrD,IAAI,CAAC;QACH,MAAM,QAAQ,GAAG,MAAM,KAAK,CAAC,gCAAgC,KAAK,IAAI,IAAI,EAAE,EAAE;YAC5E,OAAO,EAAE;gBACP,QAAQ,EAAE,6BAA6B;gBACvC,sBAAsB,EAAE,YAAY;aACrC;SACF,CAAC,CAAC;QAEH,IAAI,QAAQ,CAAC,EAAE,EAAE,CAAC;YAChB,MAAM,IAAI,GAAG,MAAM,QAAQ,CAAC,IAAI,EAA0B,CAAC;YAC3D,OAAO,IAAI,CAAC,OAAO,KAAK,KAAK,CAAC;QAChC,CAAC;QAED,0CAA0C;QAC1C,OAAO,IAAI,CAAC;IACd,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QACf,mCAAmC;QACnC,OAAO,IAAI,CAAC;IACd,CAAC;AACH,CAAC;AAEM,KAAK,UAAU,WAAW;IAC/B,oBAAoB;IACpB,IAAI,CAAC,IAAA,eAAS,GAAE,EAAE,CAAC;QACjB,OAAO,CAAC,KAAK,CAAC,eAAK,CAAC,GAAG,CAAC,6BAA6B,CAAC,CAAC,CAAC;QACxD,OAAO,CAAC,GAAG,CAAC,eAAK,CAAC,GAAG,CAAC,oDAAoD,CAAC,CAAC,CAAC;QAC7E,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IAClB,CAAC;IAED,mEAAmE;IACnE,MAAM,QAAQ,GAAG,IAAA,oBAAW,GAAE,CAAC;IAE/B,IAAI,CAAC,QAAQ,EAAE,CAAC;QACd,OAAO,CAAC,GAAG,EAAE,CAAC;QACd,OAAO,CAAC,KAAK,CAAC,eAAK,CAAC,GAAG,CAAC,kCAAkC,CAAC,CAAC,CAAC;QAC7D,OAAO,CAAC,GAAG,EAAE,CAAC;QACd,OAAO,CAAC,GAAG,CAAC,eAAK,CAAC,MAAM,CAAC,uDAAuD,CAAC,CAAC,CAAC;QACnF,OAAO,CAAC,GAAG,EAAE,CAAC;QACd,OAAO,CAAC,GAAG,CAAC,eAAK,CAAC,GAAG,CAAC,mCAAmC,CAAC,CAAC,CAAC;QAC5D,OAAO,CAAC,GAAG,CAAC,eAAK,CAAC,IAAI,CAAC,8DAA8D,CAAC,CAAC,CAAC;QACxF,OAAO,CAAC,GAAG,EAAE,CAAC;QACd,OAAO,CAAC,GAAG,CAAC,eAAK,CAAC,GAAG,CAAC,sDAAsD,CAAC,CAAC,CAAC;QAC/E,OAAO,CAAC,GAAG,CAAC,eAAK,CAAC,GAAG,CAAC,2CAA2C,CAAC,CAAC,CAAC;QACpE,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IAClB,CAAC;IAED,MAAM,gBAAgB,GAAG,IAAA,0BAAiB,GAAE,CAAC;IAC7C,IAAI,CAAC,gBAAgB,EAAE,CAAC;QACtB,IAAA,0BAAiB,EAAC,QAAQ,CAAC,KAAK,CAAC,CAAC;QAClC,OAAO,CAAC,GAAG,CAAC,eAAK,CAAC,GAAG,CAAC,6BAA6B,QAAQ,CAAC,KAAK,EAAE,CAAC,CAAC,CAAC;IACxE,CAAC;IAED,gCAAgC;IAChC,OAAO,CAAC,GAAG,CAAC,eAAK,CAAC,GAAG,CAAC,mCAAmC,CAAC,CAAC,CAAC;IAC5D,MAAM,QAAQ,GAAG,MAAM,YAAY,CAAC,QAAQ,CAAC,KAAK,EAAE,QAAQ,CAAC,IAAI,CAAC,CAAC;IAEnE,IAAI,QAAQ,KAAK,KAAK,EAAE,CAAC;QACvB,OAAO,CAAC,GAAG,EAAE,CAAC;QACd,OAAO,CAAC,KAAK,CAAC,eAAK,CAAC,GAAG,CAAC,oCAAoC,CAAC,CAAC,CAAC;QAC/D,OAAO,CAAC,GAAG,EAAE,CAAC;QACd,OAAO,CAAC,GAAG,CAAC,eAAK,CAAC,MAAM,CAAC,qDAAqD,CAAC,CAAC,CAAC;QACjF,OAAO,CAAC,GAAG,EAAE,CAAC;QACd,OAAO,CAAC,GAAG,CAAC,eAAK,CAAC,GAAG,CAAC,wDAAwD,CAAC,CAAC,CAAC;QACjF,OAAO,CAAC,GAAG,CAAC,eAAK,CAAC,GAAG,CAAC,wDAAwD,CAAC,CAAC,CAAC;QACjF,OAAO,CAAC,GAAG,CAAC,eAAK,CAAC,GAAG,CAAC,qBAAqB,CAAC,CAAC,CAAC;QAC9C,OAAO,CAAC,GAAG,EAAE,CAAC;QACd,OAAO,CAAC,GAAG,CAAC,eAAK,CAAC,GAAG,CAAC,uDAAuD,CAAC,CAAC,CAAC;QAChF,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IAClB,CAAC;IAED,IAAI,QAAQ,KAAK,IAAI,EAAE,CAAC;QACtB,OAAO,CAAC,GAAG,CAAC,eAAK,CAAC,MAAM,CAAC,4CAA4C,CAAC,CAAC,CAAC;QACxE,OAAO,CAAC,GAAG,CAAC,eAAK,CAAC,GAAG,CAAC,iCAAiC,CAAC,CAAC,CAAC;IAC5D,CAAC;SAAM,CAAC;QACN,OAAO,CAAC,GAAG,CAAC,eAAK,CAAC,KAAK,CAAC,+BAA+B,CAAC,CAAC,CAAC;IAC5D,CAAC;IAED,MAAM,QAAQ,GAAG,IAAI,CAAC,IAAI,CAAC,OAAO,CAAC,GAAG,EAAE,EAAE,MAAM,EAAE,OAAO,EAAE,aAAa,CAAC,CAAC;IAE1E,+BAA+B;IAC/B,IAAI,EAAE,CAAC,UAAU,CAAC,QAAQ,CAAC,EAAE,CAAC;QAC5B,OAAO,CAAC,GAAG,CAAC,eAAK,CAAC,MAAM,CAAC,0CAA0C,CAAC,CAAC,CAAC;QACtE,OAAO,CAAC,GAAG,CAAC,eAAK,CAAC,GAAG,CAAC,aAAa,QAAQ,EAAE,CAAC,CAAC,CAAC;QAEhD,sDAAsD;QACtD,OAAO,CAAC,GAAG,CAAC,eAAK,CAAC,GAAG,CAAC,6CAA6C,CAAC,CAAC,CAAC;QACtE,OAAO,CAAC,GAAG,CAAC,eAAK,CAAC,GAAG,CAAC,qDAAqD,CAAC,CAAC,CAAC;QAC9E,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IAClB,CAAC;IAED,iBAAiB;IACjB,EAAE,CAAC,aAAa,CAAC,QAAQ,EAAE,8BAAgB,EAAE,EAAE,IAAI,EAAE,KAAK,EAAE,CAAC,CAAC;IAE9D,OAAO,CAAC,GAAG,CAAC,eAAK,CAAC,KAAK,CAAC,8BAA8B,CAAC,CAAC,CAAC;IACzD,OAAO,CAAC,GAAG,EAAE,CAAC;IACd,OAAO,CAAC,GAAG,CAAC,eAAK,CAAC,IAAI,CAAC,4BAA4B,CAAC,CAAC,CAAC;IACtD,OAAO,CAAC,GAAG,CAAC,eAAK,CAAC,GAAG,CAAC,8CAA8C,CAAC,CAAC,CAAC;IACvE,OAAO,CAAC,GAAG,EAAE,CAAC;IACd,OAAO,CAAC,GAAG,CAAC,aAAa,CAAC,CAAC;IAC3B,OAAO,CAAC,GAAG,CAAC,eAAK,CAAC,GAAG,CAAC,sCAAsC,CAAC,CAAC,CAAC;IAC/D,OAAO,CAAC,GAAG,EAAE,CAAC;IACd,OAAO,CAAC,GAAG,CAAC,eAAK,CAAC,IAAI,CAAC,6BAA6B,CAAC,CAAC,CAAC;IACvD,OAAO,CAAC,GAAG,CAAC,eAAK,CAAC,GAAG,CAAC,iCAAiC,QAAQ,EAAE,KAAK,IAAI,sBAAsB,EAAE,CAAC,CAAC,CAAC;IACrG,OAAO,CAAC,GAAG,EAAE,CAAC;IACd,OAAO,CAAC,GAAG,CAAC,eAAK,CAAC,MAAM,CAAC,+BAA+B,CAAC,CAAC,CAAC;IAC3D,OAAO,CAAC,GAAG,CAAC,eAAK,CAAC,GAAG,CAAC,+CAA+C,CAAC,CAAC,CAAC;IACxE,OAAO,CAAC,GAAG,CAAC,eAAK,CAAC,GAAG,CAAC,qCAAqC,CAAC,CAAC,CAAC;IAC9D,OAAO,CAAC,GAAG,CAAC,eAAK,CAAC,GAAG,CAAC,qBAAqB,CAAC,CAAC,CAAC;IAC9C,OAAO,CAAC,GAAG,CAAC,eAAK,CAAC,GAAG,CAAC,uCAAuC,CAAC,CAAC,CAAC;IAChE,OAAO,CAAC,GAAG,EAAE,CAAC;IACd,OAAO,CAAC,GAAG,CAAC,eAAK,CAAC,GAAG,CAAC,mCAAmC,CAAC,CAAC,CAAC;IAC5D,OAAO,CAAC,GAAG,CAAC,eAAK,CAAC,GAAG,CAAC,kDAAkD,CAAC,CAAC,CAAC;AAC7E,CAAC"}
@@ -0,0 +1,7 @@
1
+ interface PlayOptions {
2
+ small?: boolean;
3
+ fullHash?: string;
4
+ }
5
+ export declare function playCommand(hash: string, options: PlayOptions): Promise<void>;
6
+ export {};
7
+ //# sourceMappingURL=play.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"play.d.ts","sourceRoot":"","sources":["../../src/commands/play.ts"],"names":[],"mappings":"AAOA,UAAU,WAAW;IACnB,KAAK,CAAC,EAAE,OAAO,CAAC;IAChB,QAAQ,CAAC,EAAE,MAAM,CAAC;CACnB;AAED,wBAAsB,WAAW,CAAC,IAAI,EAAE,MAAM,EAAE,OAAO,EAAE,WAAW,GAAG,OAAO,CAAC,IAAI,CAAC,CAyInF"}
@@ -0,0 +1,137 @@
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.playCommand = playCommand;
7
+ const patterns_1 = require("../patterns");
8
+ const slotMachine_1 = require("../animation/slotMachine");
9
+ const balance_1 = require("../balance");
10
+ const api_1 = require("../api");
11
+ const config_1 = require("../config");
12
+ const chalk_1 = __importDefault(require("chalk"));
13
+ async function playCommand(hash, options) {
14
+ try {
15
+ // Get balance before playing
16
+ const balanceBefore = (0, balance_1.getBalance)();
17
+ // Detect pattern
18
+ const result = (0, patterns_1.detectPattern)(hash);
19
+ // Animate based on mode
20
+ const config = {
21
+ finalHash: hash.toLowerCase(),
22
+ small: options.small || false,
23
+ patternResult: result
24
+ };
25
+ if (options.small) {
26
+ await (0, slotMachine_1.animateSmallMode)(config);
27
+ }
28
+ else {
29
+ await (0, slotMachine_1.animateSlotMachine)(config);
30
+ }
31
+ // Show result
32
+ if (!options.small) {
33
+ console.log();
34
+ // Center the text below the box (box width is 41 chars)
35
+ const boxWidth = 41;
36
+ if (result.payout > 0) {
37
+ const resultText = `${result.name}!`;
38
+ const resultPadding = Math.floor((boxWidth - resultText.length) / 2);
39
+ console.log(' '.repeat(resultPadding) + chalk_1.default.cyan.bold(resultText));
40
+ const payoutText = `+${result.payout} points`;
41
+ const payoutPadding = Math.floor((boxWidth - payoutText.length) / 2);
42
+ console.log(' '.repeat(payoutPadding) + chalk_1.default.white.bold(payoutText));
43
+ }
44
+ else {
45
+ const noWinText = 'No win';
46
+ const noWinPadding = Math.floor((boxWidth - noWinText.length) / 2);
47
+ console.log(' '.repeat(noWinPadding) + chalk_1.default.red.bold(noWinText));
48
+ const lossText = '-10 points';
49
+ const lossPadding = Math.floor((boxWidth - lossText.length) / 2);
50
+ console.log(' '.repeat(lossPadding) + chalk_1.default.white.bold(lossText));
51
+ }
52
+ console.log();
53
+ const descText = result.description;
54
+ const descPadding = Math.floor((boxWidth - descText.length) / 2);
55
+ console.log(' '.repeat(descPadding) + chalk_1.default.dim(descText));
56
+ }
57
+ // Validate GitHub remote for API sync
58
+ const repoInfo = (0, config_1.getRepoInfo)();
59
+ const githubUsername = (0, config_1.getGitHubUsername)();
60
+ if (!repoInfo && githubUsername) {
61
+ console.log();
62
+ console.log(chalk_1.default.yellow.bold('⚠ Warning: No GitHub remote detected'));
63
+ console.log(chalk_1.default.dim('This repo will not sync to the leaderboard.'));
64
+ console.log(chalk_1.default.dim('To sync, add a GitHub remote:'));
65
+ console.log(chalk_1.default.cyan(' git remote add origin https://github.com/username/repo.git'));
66
+ console.log();
67
+ }
68
+ // Update balance locally
69
+ let newBalance = (0, balance_1.updateBalance)(hash.toLowerCase(), result.payout);
70
+ // Send to API and sync balance with server
71
+ let shareUrl;
72
+ if (repoInfo && githubUsername) {
73
+ const playData = {
74
+ commit_hash: hash.toLowerCase(),
75
+ pattern_type: result.type,
76
+ pattern_name: result.name,
77
+ payout: result.payout,
78
+ wager: 10,
79
+ balance_before: balanceBefore,
80
+ balance_after: newBalance,
81
+ repo_url: repoInfo.url,
82
+ github_username: githubUsername,
83
+ repo_owner: repoInfo.owner,
84
+ repo_name: repoInfo.name,
85
+ };
86
+ // Only send full hash if we have one (not in test mode)
87
+ if (options.fullHash && options.fullHash.length === 40) {
88
+ playData.commit_full_hash = options.fullHash;
89
+ }
90
+ try {
91
+ const apiResponse = await (0, api_1.sendPlayToAPI)(playData);
92
+ // Sync local balance to match server's balance
93
+ if (apiResponse && apiResponse.balance !== undefined) {
94
+ (0, balance_1.setBalance)(apiResponse.balance);
95
+ newBalance = apiResponse.balance;
96
+ shareUrl = apiResponse.share_url;
97
+ }
98
+ }
99
+ catch (error) {
100
+ // Silently fail - local play already succeeded
101
+ }
102
+ }
103
+ // Show result and balance
104
+ if (options.small) {
105
+ // Small mode - everything on one line (animateSmallMode already wrote the hash without newline)
106
+ if (result.payout > 0) {
107
+ console.log(chalk_1.default.dim(' • ') + chalk_1.default.cyan.bold(`${result.name} +${result.payout}`) + chalk_1.default.dim(' • ') + chalk_1.default.white(`Balance: ${chalk_1.default.green.bold(newBalance)}`));
108
+ }
109
+ else {
110
+ console.log(chalk_1.default.dim(' • ') + chalk_1.default.red('No win -10') + chalk_1.default.dim(' • ') + chalk_1.default.white(`Balance: ${newBalance >= 0 ? chalk_1.default.green.bold(newBalance) : chalk_1.default.red.bold(newBalance)}`));
111
+ }
112
+ }
113
+ else {
114
+ console.log();
115
+ const boxWidth = 41;
116
+ // Note: we can't measure the exact length with color codes, so estimate based on text content
117
+ const balanceText = `Balance: ${newBalance} points`;
118
+ const balancePadding = Math.floor((boxWidth - balanceText.length) / 2);
119
+ console.log(' '.repeat(balancePadding) + chalk_1.default.white.bold(`Balance: ${newBalance >= 0 ? chalk_1.default.green.bold(newBalance) : chalk_1.default.red.bold(newBalance)} points`));
120
+ }
121
+ // Show share URL for wins
122
+ if (shareUrl && result.payout > 0 && !options.small) {
123
+ console.log();
124
+ const boxWidth = 41;
125
+ const shareText = 'Share your win:';
126
+ const sharePadding = Math.floor((boxWidth - shareText.length) / 2);
127
+ console.log(' '.repeat(sharePadding) + chalk_1.default.dim(shareText));
128
+ const urlPadding = Math.floor((boxWidth - shareUrl.length) / 2);
129
+ console.log(' '.repeat(urlPadding) + chalk_1.default.green.underline(shareUrl));
130
+ }
131
+ }
132
+ catch (error) {
133
+ console.error(chalk_1.default.red(`Error: ${error.message}`));
134
+ process.exit(1);
135
+ }
136
+ }
137
+ //# sourceMappingURL=play.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"play.js","sourceRoot":"","sources":["../../src/commands/play.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,6 @@
1
+ interface SpinOptions {
2
+ small?: boolean;
3
+ }
4
+ export declare function spinCommand(options: SpinOptions): Promise<void>;
5
+ export {};
6
+ //# sourceMappingURL=spin.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"spin.d.ts","sourceRoot":"","sources":["../../src/commands/spin.ts"],"names":[],"mappings":"AAGA,UAAU,WAAW;IACnB,KAAK,CAAC,EAAE,OAAO,CAAC;CACjB;AAED,wBAAsB,WAAW,CAAC,OAAO,EAAE,WAAW,GAAG,OAAO,CAAC,IAAI,CAAC,CASrE"}
@@ -0,0 +1,17 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.spinCommand = spinCommand;
4
+ const git_1 = require("../utils/git");
5
+ const play_1 = require("./play");
6
+ async function spinCommand(options) {
7
+ try {
8
+ const hash = (0, git_1.getCurrentCommitHash)();
9
+ const fullHash = (0, git_1.getCurrentCommitFullHash)();
10
+ await (0, play_1.playCommand)(hash, { ...options, fullHash });
11
+ }
12
+ catch (error) {
13
+ console.error(`Error: ${error.message}`);
14
+ process.exit(1);
15
+ }
16
+ }
17
+ //# sourceMappingURL=spin.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"spin.js","sourceRoot":"","sources":["../../src/commands/spin.ts"],"names":[],"mappings":";;AAOA,kCASC;AAhBD,sCAA8E;AAC9E,iCAAqC;AAM9B,KAAK,UAAU,WAAW,CAAC,OAAoB;IACpD,IAAI,CAAC;QACH,MAAM,IAAI,GAAG,IAAA,0BAAoB,GAAE,CAAC;QACpC,MAAM,QAAQ,GAAG,IAAA,8BAAwB,GAAE,CAAC;QAC5C,MAAM,IAAA,kBAAW,EAAC,IAAI,EAAE,EAAE,GAAG,OAAO,EAAE,QAAQ,EAAE,CAAC,CAAC;IACpD,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QACf,OAAO,CAAC,KAAK,CAAC,UAAW,KAAe,CAAC,OAAO,EAAE,CAAC,CAAC;QACpD,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IAClB,CAAC;AACH,CAAC"}
@@ -0,0 +1,2 @@
1
+ export declare function syncCommand(): Promise<void>;
2
+ //# sourceMappingURL=sync.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"sync.d.ts","sourceRoot":"","sources":["../../src/commands/sync.ts"],"names":[],"mappings":"AAIA,wBAAsB,WAAW,IAAI,OAAO,CAAC,IAAI,CAAC,CA4CjD"}
@@ -0,0 +1,52 @@
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.syncCommand = syncCommand;
7
+ const chalk_1 = __importDefault(require("chalk"));
8
+ const api_1 = require("../api");
9
+ const balance_1 = require("../balance");
10
+ async function syncCommand() {
11
+ try {
12
+ console.log(chalk_1.default.dim('Syncing with API...'));
13
+ const apiBalance = await (0, api_1.getBalance)();
14
+ if (!apiBalance) {
15
+ console.log(chalk_1.default.yellow('Unable to sync with API.'));
16
+ console.log(chalk_1.default.dim('Make sure you are authenticated and online.'));
17
+ return;
18
+ }
19
+ const localBalance = (0, balance_1.getBalance)();
20
+ console.log();
21
+ console.log(chalk_1.default.bold('Local Balance:'));
22
+ console.log(` Balance: ${chalk_1.default.green(localBalance)} points`);
23
+ console.log();
24
+ console.log(chalk_1.default.bold('API Balance:'));
25
+ console.log(` Balance: ${chalk_1.default.green(apiBalance.balance)} points`);
26
+ console.log(` Total Commits: ${chalk_1.default.cyan(apiBalance.total_commits)}`);
27
+ console.log(` Total Winnings: ${chalk_1.default.cyan(apiBalance.total_winnings)}`);
28
+ // Show biggest win with pattern and hash
29
+ if (apiBalance.biggest_win > 0) {
30
+ const winText = `${chalk_1.default.cyan(apiBalance.biggest_win)} points`;
31
+ const patternText = apiBalance.biggest_win_pattern ? ` (${chalk_1.default.yellow(apiBalance.biggest_win_pattern)})` : '';
32
+ const hashText = apiBalance.biggest_win_hash ? chalk_1.default.dim(` - ${apiBalance.biggest_win_hash}`) : '';
33
+ console.log(` Biggest Win: ${winText}${patternText}${hashText}`);
34
+ }
35
+ else {
36
+ console.log(` Biggest Win: ${chalk_1.default.cyan(apiBalance.biggest_win)}`);
37
+ }
38
+ console.log();
39
+ if (localBalance !== apiBalance.balance) {
40
+ console.log(chalk_1.default.yellow('Warning: Local and API balances differ.'));
41
+ console.log(chalk_1.default.dim('This is normal if you play offline or in multiple repos.'));
42
+ }
43
+ else {
44
+ console.log(chalk_1.default.green('Balances are in sync!'));
45
+ }
46
+ }
47
+ catch (error) {
48
+ console.error(chalk_1.default.red(`Error: ${error.message}`));
49
+ process.exit(1);
50
+ }
51
+ }
52
+ //# sourceMappingURL=sync.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"sync.js","sourceRoot":"","sources":["../../src/commands/sync.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,6 @@
1
+ interface TestOptions {
2
+ small?: boolean;
3
+ }
4
+ export declare function testCommand(options: TestOptions): Promise<void>;
5
+ export {};
6
+ //# sourceMappingURL=test.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"test.d.ts","sourceRoot":"","sources":["../../src/commands/test.ts"],"names":[],"mappings":"AAEA,UAAU,WAAW;IACnB,KAAK,CAAC,EAAE,OAAO,CAAC;CACjB;AAWD,wBAAsB,WAAW,CAAC,OAAO,EAAE,WAAW,GAAG,OAAO,CAAC,IAAI,CAAC,CAGrE"}
@@ -0,0 +1,17 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.testCommand = testCommand;
4
+ const play_1 = require("./play");
5
+ function generateRandomHash() {
6
+ const hexChars = '0123456789abcdef';
7
+ let hash = '';
8
+ for (let i = 0; i < 7; i++) {
9
+ hash += hexChars[Math.floor(Math.random() * hexChars.length)];
10
+ }
11
+ return hash;
12
+ }
13
+ async function testCommand(options) {
14
+ const randomHash = generateRandomHash();
15
+ await (0, play_1.playCommand)(randomHash, options);
16
+ }
17
+ //# sourceMappingURL=test.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"test.js","sourceRoot":"","sources":["../../src/commands/test.ts"],"names":[],"mappings":";;AAeA,kCAGC;AAlBD,iCAAqC;AAMrC,SAAS,kBAAkB;IACzB,MAAM,QAAQ,GAAG,kBAAkB,CAAC;IACpC,IAAI,IAAI,GAAG,EAAE,CAAC;IACd,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC;QAC3B,IAAI,IAAI,QAAQ,CAAC,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,MAAM,EAAE,GAAG,QAAQ,CAAC,MAAM,CAAC,CAAC,CAAC;IAChE,CAAC;IACD,OAAO,IAAI,CAAC;AACd,CAAC;AAEM,KAAK,UAAU,WAAW,CAAC,OAAoB;IACpD,MAAM,UAAU,GAAG,kBAAkB,EAAE,CAAC;IACxC,MAAM,IAAA,kBAAW,EAAC,UAAU,EAAE,OAAO,CAAC,CAAC;AACzC,CAAC"}
@@ -0,0 +1,27 @@
1
+ interface Config {
2
+ githubUsername?: string;
3
+ apiUrl?: string;
4
+ apiToken?: string;
5
+ syncEnabled?: boolean;
6
+ }
7
+ export declare function getConfig(): Config;
8
+ export declare function getRepoConfig(): Config;
9
+ export declare function getGlobalConfig(): Config;
10
+ export declare function saveRepoConfig(config: Config): void;
11
+ export declare function saveGlobalConfig(config: Config): void;
12
+ export declare function getGitHubUsername(): string | null;
13
+ export declare function setGitHubUsername(username: string): void;
14
+ export declare function getApiUrl(): string;
15
+ export declare function setApiUrl(url: string): void;
16
+ export declare function getApiToken(): string | null;
17
+ export declare function setApiToken(token: string): void;
18
+ export declare function clearApiToken(): void;
19
+ export declare function isSyncEnabled(): boolean;
20
+ export declare function setSyncEnabled(enabled: boolean): void;
21
+ export declare function getRepoInfo(): {
22
+ owner: string;
23
+ name: string;
24
+ url: string;
25
+ } | null;
26
+ export {};
27
+ //# sourceMappingURL=config.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"config.d.ts","sourceRoot":"","sources":["../src/config.ts"],"names":[],"mappings":"AAKA,UAAU,MAAM;IACd,cAAc,CAAC,EAAE,MAAM,CAAC;IACxB,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,WAAW,CAAC,EAAE,OAAO,CAAC;CACvB;AAqBD,wBAAgB,SAAS,IAAI,MAAM,CAKlC;AAGD,wBAAgB,aAAa,IAAI,MAAM,CAatC;AAGD,wBAAgB,eAAe,IAAI,MAAM,CAaxC;AAGD,wBAAgB,cAAc,CAAC,MAAM,EAAE,MAAM,GAAG,IAAI,CAGnD;AAGD,wBAAgB,gBAAgB,CAAC,MAAM,EAAE,MAAM,GAAG,IAAI,CAGrD;AAED,wBAAgB,iBAAiB,IAAI,MAAM,GAAG,IAAI,CAGjD;AAED,wBAAgB,iBAAiB,CAAC,QAAQ,EAAE,MAAM,GAAG,IAAI,CAIxD;AAED,wBAAgB,SAAS,IAAI,MAAM,CAGlC;AAED,wBAAgB,SAAS,CAAC,GAAG,EAAE,MAAM,GAAG,IAAI,CAI3C;AAED,wBAAgB,WAAW,IAAI,MAAM,GAAG,IAAI,CAG3C;AAED,wBAAgB,WAAW,CAAC,KAAK,EAAE,MAAM,GAAG,IAAI,CAI/C;AAED,wBAAgB,aAAa,IAAI,IAAI,CAIpC;AAED,wBAAgB,aAAa,IAAI,OAAO,CAGvC;AAED,wBAAgB,cAAc,CAAC,OAAO,EAAE,OAAO,GAAG,IAAI,CAIrD;AAED,wBAAgB,WAAW,IAAI;IAAE,KAAK,EAAE,MAAM,CAAC;IAAC,IAAI,EAAE,MAAM,CAAC;IAAC,GAAG,EAAE,MAAM,CAAA;CAAE,GAAG,IAAI,CAqBjF"}
package/dist/config.js ADDED
@@ -0,0 +1,144 @@
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.getConfig = getConfig;
7
+ exports.getRepoConfig = getRepoConfig;
8
+ exports.getGlobalConfig = getGlobalConfig;
9
+ exports.saveRepoConfig = saveRepoConfig;
10
+ exports.saveGlobalConfig = saveGlobalConfig;
11
+ exports.getGitHubUsername = getGitHubUsername;
12
+ exports.setGitHubUsername = setGitHubUsername;
13
+ exports.getApiUrl = getApiUrl;
14
+ exports.setApiUrl = setApiUrl;
15
+ exports.getApiToken = getApiToken;
16
+ exports.setApiToken = setApiToken;
17
+ exports.clearApiToken = clearApiToken;
18
+ exports.isSyncEnabled = isSyncEnabled;
19
+ exports.setSyncEnabled = setSyncEnabled;
20
+ exports.getRepoInfo = getRepoInfo;
21
+ const fs_1 = __importDefault(require("fs"));
22
+ const path_1 = __importDefault(require("path"));
23
+ const os_1 = __importDefault(require("os"));
24
+ const child_process_1 = require("child_process");
25
+ // Get repo-specific config path
26
+ function getRepoConfigPath() {
27
+ return path_1.default.join(process.cwd(), '.git', 'slot-machine-config.json');
28
+ }
29
+ // Get global config path
30
+ function getGlobalConfigPath() {
31
+ const homeDir = os_1.default.homedir();
32
+ const configDir = path_1.default.join(homeDir, '.git-slot-machine');
33
+ // Ensure config directory exists
34
+ if (!fs_1.default.existsSync(configDir)) {
35
+ fs_1.default.mkdirSync(configDir, { recursive: true });
36
+ }
37
+ return path_1.default.join(configDir, 'config.json');
38
+ }
39
+ // Get merged config (repo-specific overrides global)
40
+ function getConfig() {
41
+ const globalConfig = getGlobalConfig();
42
+ const repoConfig = getRepoConfig();
43
+ return { ...globalConfig, ...repoConfig };
44
+ }
45
+ // Get only repo-specific config
46
+ function getRepoConfig() {
47
+ const configPath = getRepoConfigPath();
48
+ if (!fs_1.default.existsSync(configPath)) {
49
+ return {};
50
+ }
51
+ try {
52
+ const content = fs_1.default.readFileSync(configPath, 'utf-8');
53
+ return JSON.parse(content);
54
+ }
55
+ catch {
56
+ return {};
57
+ }
58
+ }
59
+ // Get only global config
60
+ function getGlobalConfig() {
61
+ const configPath = getGlobalConfigPath();
62
+ if (!fs_1.default.existsSync(configPath)) {
63
+ return {};
64
+ }
65
+ try {
66
+ const content = fs_1.default.readFileSync(configPath, 'utf-8');
67
+ return JSON.parse(content);
68
+ }
69
+ catch {
70
+ return {};
71
+ }
72
+ }
73
+ // Save repo-specific config
74
+ function saveRepoConfig(config) {
75
+ const configPath = getRepoConfigPath();
76
+ fs_1.default.writeFileSync(configPath, JSON.stringify(config, null, 2));
77
+ }
78
+ // Save global config
79
+ function saveGlobalConfig(config) {
80
+ const configPath = getGlobalConfigPath();
81
+ fs_1.default.writeFileSync(configPath, JSON.stringify(config, null, 2));
82
+ }
83
+ function getGitHubUsername() {
84
+ const config = getConfig();
85
+ return config.githubUsername || null;
86
+ }
87
+ function setGitHubUsername(username) {
88
+ const config = getRepoConfig();
89
+ config.githubUsername = username;
90
+ saveRepoConfig(config);
91
+ }
92
+ function getApiUrl() {
93
+ const config = getConfig();
94
+ return config.apiUrl || process.env.GIT_SLOT_MACHINE_API_URL || 'https://gitslotmachine.com/api';
95
+ }
96
+ function setApiUrl(url) {
97
+ const config = getGlobalConfig();
98
+ config.apiUrl = url;
99
+ saveGlobalConfig(config);
100
+ }
101
+ function getApiToken() {
102
+ const config = getConfig();
103
+ return config.apiToken || null;
104
+ }
105
+ function setApiToken(token) {
106
+ const config = getGlobalConfig();
107
+ config.apiToken = token;
108
+ saveGlobalConfig(config);
109
+ }
110
+ function clearApiToken() {
111
+ const config = getGlobalConfig();
112
+ delete config.apiToken;
113
+ saveGlobalConfig(config);
114
+ }
115
+ function isSyncEnabled() {
116
+ const config = getConfig();
117
+ return config.syncEnabled !== false; // Default to true
118
+ }
119
+ function setSyncEnabled(enabled) {
120
+ const config = getGlobalConfig();
121
+ config.syncEnabled = enabled;
122
+ saveGlobalConfig(config);
123
+ }
124
+ function getRepoInfo() {
125
+ try {
126
+ const remoteUrl = (0, child_process_1.execSync)('git config --get remote.origin.url', { encoding: 'utf-8' }).trim();
127
+ // Parse GitHub URL (supports both HTTPS and SSH)
128
+ const match = remoteUrl.match(/github\.com[:/](.+?)\/(.+?)(\.git)?$/);
129
+ if (match) {
130
+ const owner = match[1];
131
+ const name = match[2];
132
+ return {
133
+ owner,
134
+ name,
135
+ url: `https://github.com/${owner}/${name}`,
136
+ };
137
+ }
138
+ return null;
139
+ }
140
+ catch {
141
+ return null;
142
+ }
143
+ }
144
+ //# sourceMappingURL=config.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"config.js","sourceRoot":"","sources":["../src/config.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,3 @@
1
+ #!/usr/bin/env node
2
+ export {};
3
+ //# sourceMappingURL=index.d.ts.map