@marketmotion/cli 0.1.1 → 0.1.3
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/README.md +6 -0
- package/dist/bin/motion.js +11 -1
- package/dist/bin/motion.js.map +1 -1
- package/dist/src/utils/updateNotifier.d.ts +4 -0
- package/dist/src/utils/updateNotifier.d.ts.map +1 -0
- package/dist/src/utils/updateNotifier.js +101 -0
- package/dist/src/utils/updateNotifier.js.map +1 -0
- package/package.json +1 -1
package/README.md
CHANGED
|
@@ -10,6 +10,12 @@ Intelligence terminal for prediction markets. Search 17,000+ entities, scan cros
|
|
|
10
10
|
npm install -g @marketmotion/cli
|
|
11
11
|
```
|
|
12
12
|
|
|
13
|
+
## Update
|
|
14
|
+
|
|
15
|
+
```bash
|
|
16
|
+
npm install -g @marketmotion/cli
|
|
17
|
+
```
|
|
18
|
+
|
|
13
19
|
## Quick Start
|
|
14
20
|
|
|
15
21
|
1. Get your API key at [marketmotion.xyz/developer](https://marketmotion.xyz/developer)
|
package/dist/bin/motion.js
CHANGED
|
@@ -10,11 +10,12 @@ import { registerNewsCommand } from '../src/commands/news.js';
|
|
|
10
10
|
import { registerGraphCommand } from '../src/commands/graph.js';
|
|
11
11
|
import { registerWebhookCommand } from '../src/commands/webhook.js';
|
|
12
12
|
import { requireAuth } from '../src/utils/auth.js';
|
|
13
|
+
import { getCurrentVersion, checkForUpdates, runUpdate } from '../src/utils/updateNotifier.js';
|
|
13
14
|
const program = new Command();
|
|
14
15
|
program
|
|
15
16
|
.name('motion')
|
|
16
17
|
.description('Market Motion CLI — Intelligence terminal for prediction markets')
|
|
17
|
-
.version(
|
|
18
|
+
.version(getCurrentVersion());
|
|
18
19
|
// Register all commands
|
|
19
20
|
registerAuthCommand(program);
|
|
20
21
|
registerEntitiesCommand(program);
|
|
@@ -25,6 +26,13 @@ registerArbCommand(program);
|
|
|
25
26
|
registerNewsCommand(program);
|
|
26
27
|
registerGraphCommand(program);
|
|
27
28
|
registerWebhookCommand(program);
|
|
29
|
+
// Update command
|
|
30
|
+
program
|
|
31
|
+
.command('update')
|
|
32
|
+
.description('Update the CLI to the latest version')
|
|
33
|
+
.action(async () => {
|
|
34
|
+
await runUpdate();
|
|
35
|
+
});
|
|
28
36
|
// Dashboard command (lazy-loaded since it pulls in ink/react)
|
|
29
37
|
program
|
|
30
38
|
.command('dashboard')
|
|
@@ -34,6 +42,8 @@ program
|
|
|
34
42
|
const { renderDashboard } = await import('../src/ui/Dashboard.js');
|
|
35
43
|
renderDashboard();
|
|
36
44
|
});
|
|
45
|
+
// Check for updates (non-blocking, once per day)
|
|
46
|
+
checkForUpdates();
|
|
37
47
|
// If no command given, show help
|
|
38
48
|
program.parse(process.argv);
|
|
39
49
|
if (program.args.length === 0 && process.argv.length <= 2) {
|
package/dist/bin/motion.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"motion.js","sourceRoot":"","sources":["../../bin/motion.ts"],"names":[],"mappings":";AAEA,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AACpC,OAAO,EAAE,mBAAmB,EAAE,MAAM,yBAAyB,CAAC;AAC9D,OAAO,EAAE,uBAAuB,EAAE,MAAM,6BAA6B,CAAC;AACtE,OAAO,EAAE,qBAAqB,EAAE,MAAM,2BAA2B,CAAC;AAClE,OAAO,EAAE,sBAAsB,EAAE,MAAM,4BAA4B,CAAC;AACpE,OAAO,EAAE,qBAAqB,EAAE,MAAM,2BAA2B,CAAC;AAClE,OAAO,EAAE,kBAAkB,EAAE,MAAM,wBAAwB,CAAC;AAC5D,OAAO,EAAE,mBAAmB,EAAE,MAAM,yBAAyB,CAAC;AAC9D,OAAO,EAAE,oBAAoB,EAAE,MAAM,0BAA0B,CAAC;AAChE,OAAO,EAAE,sBAAsB,EAAE,MAAM,4BAA4B,CAAC;AACpE,OAAO,EAAE,WAAW,EAAE,MAAM,sBAAsB,CAAC;
|
|
1
|
+
{"version":3,"file":"motion.js","sourceRoot":"","sources":["../../bin/motion.ts"],"names":[],"mappings":";AAEA,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AACpC,OAAO,EAAE,mBAAmB,EAAE,MAAM,yBAAyB,CAAC;AAC9D,OAAO,EAAE,uBAAuB,EAAE,MAAM,6BAA6B,CAAC;AACtE,OAAO,EAAE,qBAAqB,EAAE,MAAM,2BAA2B,CAAC;AAClE,OAAO,EAAE,sBAAsB,EAAE,MAAM,4BAA4B,CAAC;AACpE,OAAO,EAAE,qBAAqB,EAAE,MAAM,2BAA2B,CAAC;AAClE,OAAO,EAAE,kBAAkB,EAAE,MAAM,wBAAwB,CAAC;AAC5D,OAAO,EAAE,mBAAmB,EAAE,MAAM,yBAAyB,CAAC;AAC9D,OAAO,EAAE,oBAAoB,EAAE,MAAM,0BAA0B,CAAC;AAChE,OAAO,EAAE,sBAAsB,EAAE,MAAM,4BAA4B,CAAC;AACpE,OAAO,EAAE,WAAW,EAAE,MAAM,sBAAsB,CAAC;AACnD,OAAO,EAAE,iBAAiB,EAAE,eAAe,EAAE,SAAS,EAAE,MAAM,gCAAgC,CAAC;AAE/F,MAAM,OAAO,GAAG,IAAI,OAAO,EAAE,CAAC;AAE9B,OAAO;KACJ,IAAI,CAAC,QAAQ,CAAC;KACd,WAAW,CAAC,kEAAkE,CAAC;KAC/E,OAAO,CAAC,iBAAiB,EAAE,CAAC,CAAC;AAEhC,wBAAwB;AACxB,mBAAmB,CAAC,OAAO,CAAC,CAAC;AAC7B,uBAAuB,CAAC,OAAO,CAAC,CAAC;AACjC,qBAAqB,CAAC,OAAO,CAAC,CAAC;AAC/B,sBAAsB,CAAC,OAAO,CAAC,CAAC;AAChC,qBAAqB,CAAC,OAAO,CAAC,CAAC;AAC/B,kBAAkB,CAAC,OAAO,CAAC,CAAC;AAC5B,mBAAmB,CAAC,OAAO,CAAC,CAAC;AAC7B,oBAAoB,CAAC,OAAO,CAAC,CAAC;AAC9B,sBAAsB,CAAC,OAAO,CAAC,CAAC;AAEhC,iBAAiB;AACjB,OAAO;KACJ,OAAO,CAAC,QAAQ,CAAC;KACjB,WAAW,CAAC,sCAAsC,CAAC;KACnD,MAAM,CAAC,KAAK,IAAI,EAAE;IACjB,MAAM,SAAS,EAAE,CAAC;AACpB,CAAC,CAAC,CAAC;AAEL,8DAA8D;AAC9D,OAAO;KACJ,OAAO,CAAC,WAAW,CAAC;KACpB,WAAW,CAAC,2BAA2B,CAAC;KACxC,MAAM,CAAC,KAAK,IAAI,EAAE;IACjB,WAAW,EAAE,CAAC;IACd,MAAM,EAAE,eAAe,EAAE,GAAG,MAAM,MAAM,CAAC,wBAAwB,CAAC,CAAC;IACnE,eAAe,EAAE,CAAC;AACpB,CAAC,CAAC,CAAC;AAEL,iDAAiD;AACjD,eAAe,EAAE,CAAC;AAElB,iCAAiC;AACjC,OAAO,CAAC,KAAK,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC;AAE5B,IAAI,OAAO,CAAC,IAAI,CAAC,MAAM,KAAK,CAAC,IAAI,OAAO,CAAC,IAAI,CAAC,MAAM,IAAI,CAAC,EAAE,CAAC;IAC1D,OAAO,CAAC,IAAI,EAAE,CAAC;AACjB,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"updateNotifier.d.ts","sourceRoot":"","sources":["../../../src/utils/updateNotifier.ts"],"names":[],"mappings":"AAmBA,wBAAgB,iBAAiB,IAAI,MAAM,CAE1C;AA4BD,wBAAsB,eAAe,IAAI,OAAO,CAAC,IAAI,CAAC,CAsBrD;AAYD,wBAAsB,SAAS,IAAI,OAAO,CAAC,IAAI,CAAC,CA8B/C"}
|
|
@@ -0,0 +1,101 @@
|
|
|
1
|
+
import { createRequire } from 'node:module';
|
|
2
|
+
import { execSync } from 'node:child_process';
|
|
3
|
+
import Conf from 'conf';
|
|
4
|
+
import chalk from 'chalk';
|
|
5
|
+
const require = createRequire(import.meta.url);
|
|
6
|
+
const pkg = require('../../../package.json');
|
|
7
|
+
const cache = new Conf({
|
|
8
|
+
projectName: 'motion-update',
|
|
9
|
+
});
|
|
10
|
+
const ONE_DAY = 24 * 60 * 60 * 1000;
|
|
11
|
+
export function getCurrentVersion() {
|
|
12
|
+
return pkg.version;
|
|
13
|
+
}
|
|
14
|
+
async function fetchLatestVersion() {
|
|
15
|
+
try {
|
|
16
|
+
const controller = new AbortController();
|
|
17
|
+
const timeout = setTimeout(() => controller.abort(), 3000);
|
|
18
|
+
const res = await fetch('https://registry.npmjs.org/@marketmotion/cli/latest', {
|
|
19
|
+
signal: controller.signal,
|
|
20
|
+
});
|
|
21
|
+
clearTimeout(timeout);
|
|
22
|
+
if (!res.ok)
|
|
23
|
+
return null;
|
|
24
|
+
const data = (await res.json());
|
|
25
|
+
return data.version;
|
|
26
|
+
}
|
|
27
|
+
catch {
|
|
28
|
+
return null;
|
|
29
|
+
}
|
|
30
|
+
}
|
|
31
|
+
function compareVersions(current, latest) {
|
|
32
|
+
const c = current.split('.').map(Number);
|
|
33
|
+
const l = latest.split('.').map(Number);
|
|
34
|
+
for (let i = 0; i < 3; i++) {
|
|
35
|
+
if ((l[i] || 0) > (c[i] || 0))
|
|
36
|
+
return true;
|
|
37
|
+
if ((l[i] || 0) < (c[i] || 0))
|
|
38
|
+
return false;
|
|
39
|
+
}
|
|
40
|
+
return false;
|
|
41
|
+
}
|
|
42
|
+
export async function checkForUpdates() {
|
|
43
|
+
const lastCheck = cache.get('lastCheck') || 0;
|
|
44
|
+
const now = Date.now();
|
|
45
|
+
if (now - lastCheck < ONE_DAY) {
|
|
46
|
+
// Use cached result
|
|
47
|
+
const latestVersion = cache.get('latestVersion');
|
|
48
|
+
if (latestVersion && compareVersions(pkg.version, latestVersion)) {
|
|
49
|
+
printUpdateNotice(pkg.version, latestVersion);
|
|
50
|
+
}
|
|
51
|
+
return;
|
|
52
|
+
}
|
|
53
|
+
// Check in background (non-blocking)
|
|
54
|
+
fetchLatestVersion().then((latest) => {
|
|
55
|
+
if (!latest)
|
|
56
|
+
return;
|
|
57
|
+
cache.set('lastCheck', now);
|
|
58
|
+
cache.set('latestVersion', latest);
|
|
59
|
+
if (compareVersions(pkg.version, latest)) {
|
|
60
|
+
printUpdateNotice(pkg.version, latest);
|
|
61
|
+
}
|
|
62
|
+
}).catch(() => { });
|
|
63
|
+
}
|
|
64
|
+
function printUpdateNotice(current, latest) {
|
|
65
|
+
const msg = [
|
|
66
|
+
'',
|
|
67
|
+
chalk.yellow(` Update available: ${current} → ${chalk.green(latest)}`),
|
|
68
|
+
chalk.dim(` Run ${chalk.cyan('motion update')} to upgrade`),
|
|
69
|
+
'',
|
|
70
|
+
].join('\n');
|
|
71
|
+
console.error(msg);
|
|
72
|
+
}
|
|
73
|
+
export async function runUpdate() {
|
|
74
|
+
const current = pkg.version;
|
|
75
|
+
console.log(chalk.dim(`Current version: ${current}`));
|
|
76
|
+
console.log(chalk.dim('Checking for updates...'));
|
|
77
|
+
const latest = await fetchLatestVersion();
|
|
78
|
+
if (!latest) {
|
|
79
|
+
console.log(chalk.red('Failed to check for updates. Check your internet connection.'));
|
|
80
|
+
process.exit(1);
|
|
81
|
+
}
|
|
82
|
+
if (!compareVersions(current, latest)) {
|
|
83
|
+
console.log(chalk.green(`Already on the latest version (${current}).`));
|
|
84
|
+
return;
|
|
85
|
+
}
|
|
86
|
+
console.log(chalk.yellow(`Updating ${current} → ${chalk.green(latest)}...`));
|
|
87
|
+
console.log('');
|
|
88
|
+
try {
|
|
89
|
+
execSync('npm install -g @marketmotion/cli@latest', { stdio: 'inherit' });
|
|
90
|
+
console.log('');
|
|
91
|
+
console.log(chalk.green(`Successfully updated to v${latest}`));
|
|
92
|
+
// Clear cache
|
|
93
|
+
cache.set('lastCheck', Date.now());
|
|
94
|
+
cache.set('latestVersion', latest);
|
|
95
|
+
}
|
|
96
|
+
catch {
|
|
97
|
+
console.log(chalk.red('Update failed. Try manually: npm install -g @marketmotion/cli@latest'));
|
|
98
|
+
process.exit(1);
|
|
99
|
+
}
|
|
100
|
+
}
|
|
101
|
+
//# sourceMappingURL=updateNotifier.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"updateNotifier.js","sourceRoot":"","sources":["../../../src/utils/updateNotifier.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,aAAa,EAAE,MAAM,aAAa,CAAC;AAC5C,OAAO,EAAE,QAAQ,EAAE,MAAM,oBAAoB,CAAC;AAC9C,OAAO,IAAI,MAAM,MAAM,CAAC;AACxB,OAAO,KAAK,MAAM,OAAO,CAAC;AAE1B,MAAM,OAAO,GAAG,aAAa,CAAC,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;AAC/C,MAAM,GAAG,GAAG,OAAO,CAAC,uBAAuB,CAAC,CAAC;AAO7C,MAAM,KAAK,GAAG,IAAI,IAAI,CAAc;IAClC,WAAW,EAAE,eAAe;CAC7B,CAAC,CAAC;AAEH,MAAM,OAAO,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,IAAI,CAAC;AAEpC,MAAM,UAAU,iBAAiB;IAC/B,OAAO,GAAG,CAAC,OAAO,CAAC;AACrB,CAAC;AAED,KAAK,UAAU,kBAAkB;IAC/B,IAAI,CAAC;QACH,MAAM,UAAU,GAAG,IAAI,eAAe,EAAE,CAAC;QACzC,MAAM,OAAO,GAAG,UAAU,CAAC,GAAG,EAAE,CAAC,UAAU,CAAC,KAAK,EAAE,EAAE,IAAI,CAAC,CAAC;QAC3D,MAAM,GAAG,GAAG,MAAM,KAAK,CAAC,qDAAqD,EAAE;YAC7E,MAAM,EAAE,UAAU,CAAC,MAAM;SAC1B,CAAC,CAAC;QACH,YAAY,CAAC,OAAO,CAAC,CAAC;QACtB,IAAI,CAAC,GAAG,CAAC,EAAE;YAAE,OAAO,IAAI,CAAC;QACzB,MAAM,IAAI,GAAG,CAAC,MAAM,GAAG,CAAC,IAAI,EAAE,CAAwB,CAAC;QACvD,OAAO,IAAI,CAAC,OAAO,CAAC;IACtB,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,IAAI,CAAC;IACd,CAAC;AACH,CAAC;AAED,SAAS,eAAe,CAAC,OAAe,EAAE,MAAc;IACtD,MAAM,CAAC,GAAG,OAAO,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC;IACzC,MAAM,CAAC,GAAG,MAAM,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC;IACxC,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC;QAC3B,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC;YAAE,OAAO,IAAI,CAAC;QAC3C,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC;YAAE,OAAO,KAAK,CAAC;IAC9C,CAAC;IACD,OAAO,KAAK,CAAC;AACf,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,eAAe;IACnC,MAAM,SAAS,GAAG,KAAK,CAAC,GAAG,CAAC,WAAW,CAAC,IAAI,CAAC,CAAC;IAC9C,MAAM,GAAG,GAAG,IAAI,CAAC,GAAG,EAAE,CAAC;IAEvB,IAAI,GAAG,GAAG,SAAS,GAAG,OAAO,EAAE,CAAC;QAC9B,oBAAoB;QACpB,MAAM,aAAa,GAAG,KAAK,CAAC,GAAG,CAAC,eAAe,CAAC,CAAC;QACjD,IAAI,aAAa,IAAI,eAAe,CAAC,GAAG,CAAC,OAAO,EAAE,aAAa,CAAC,EAAE,CAAC;YACjE,iBAAiB,CAAC,GAAG,CAAC,OAAO,EAAE,aAAa,CAAC,CAAC;QAChD,CAAC;QACD,OAAO;IACT,CAAC;IAED,qCAAqC;IACrC,kBAAkB,EAAE,CAAC,IAAI,CAAC,CAAC,MAAM,EAAE,EAAE;QACnC,IAAI,CAAC,MAAM;YAAE,OAAO;QACpB,KAAK,CAAC,GAAG,CAAC,WAAW,EAAE,GAAG,CAAC,CAAC;QAC5B,KAAK,CAAC,GAAG,CAAC,eAAe,EAAE,MAAM,CAAC,CAAC;QACnC,IAAI,eAAe,CAAC,GAAG,CAAC,OAAO,EAAE,MAAM,CAAC,EAAE,CAAC;YACzC,iBAAiB,CAAC,GAAG,CAAC,OAAO,EAAE,MAAM,CAAC,CAAC;QACzC,CAAC;IACH,CAAC,CAAC,CAAC,KAAK,CAAC,GAAG,EAAE,GAAE,CAAC,CAAC,CAAC;AACrB,CAAC;AAED,SAAS,iBAAiB,CAAC,OAAe,EAAE,MAAc;IACxD,MAAM,GAAG,GAAG;QACV,EAAE;QACF,KAAK,CAAC,MAAM,CAAC,uBAAuB,OAAO,MAAM,KAAK,CAAC,KAAK,CAAC,MAAM,CAAC,EAAE,CAAC;QACvE,KAAK,CAAC,GAAG,CAAC,SAAS,KAAK,CAAC,IAAI,CAAC,eAAe,CAAC,aAAa,CAAC;QAC5D,EAAE;KACH,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;IACb,OAAO,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC;AACrB,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,SAAS;IAC7B,MAAM,OAAO,GAAG,GAAG,CAAC,OAAO,CAAC;IAC5B,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,GAAG,CAAC,oBAAoB,OAAO,EAAE,CAAC,CAAC,CAAC;IACtD,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,GAAG,CAAC,yBAAyB,CAAC,CAAC,CAAC;IAElD,MAAM,MAAM,GAAG,MAAM,kBAAkB,EAAE,CAAC;IAC1C,IAAI,CAAC,MAAM,EAAE,CAAC;QACZ,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,GAAG,CAAC,8DAA8D,CAAC,CAAC,CAAC;QACvF,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IAClB,CAAC;IAED,IAAI,CAAC,eAAe,CAAC,OAAO,EAAE,MAAM,CAAC,EAAE,CAAC;QACtC,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,KAAK,CAAC,kCAAkC,OAAO,IAAI,CAAC,CAAC,CAAC;QACxE,OAAO;IACT,CAAC;IAED,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,MAAM,CAAC,YAAY,OAAO,MAAM,KAAK,CAAC,KAAK,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,CAAC;IAC7E,OAAO,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;IAEhB,IAAI,CAAC;QACH,QAAQ,CAAC,yCAAyC,EAAE,EAAE,KAAK,EAAE,SAAS,EAAE,CAAC,CAAC;QAC1E,OAAO,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;QAChB,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,KAAK,CAAC,4BAA4B,MAAM,EAAE,CAAC,CAAC,CAAC;QAC/D,cAAc;QACd,KAAK,CAAC,GAAG,CAAC,WAAW,EAAE,IAAI,CAAC,GAAG,EAAE,CAAC,CAAC;QACnC,KAAK,CAAC,GAAG,CAAC,eAAe,EAAE,MAAM,CAAC,CAAC;IACrC,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,GAAG,CAAC,sEAAsE,CAAC,CAAC,CAAC;QAC/F,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IAClB,CAAC;AACH,CAAC"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@marketmotion/cli",
|
|
3
|
-
"version": "0.1.
|
|
3
|
+
"version": "0.1.3",
|
|
4
4
|
"description": "Market Motion CLI — Intelligence terminal for prediction markets. Search 17K+ entities, scan cross-venue arbitrage, monitor real-time alerts, and explore the entity graph from your terminal.",
|
|
5
5
|
"type": "module",
|
|
6
6
|
"main": "./dist/bin/motion.js",
|