@unibridge/cli 0.5.0 → 0.8.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.
- package/LICENSE +21 -0
- package/README.md +74 -0
- package/dist/commands/gameobject.d.ts +49 -0
- package/dist/commands/gameobject.d.ts.map +1 -0
- package/dist/commands/gameobject.js +218 -0
- package/dist/commands/gameobject.js.map +1 -0
- package/dist/commands/init.d.ts.map +1 -1
- package/dist/commands/init.js +2 -1
- package/dist/commands/init.js.map +1 -1
- package/dist/commands/logs.d.ts +16 -0
- package/dist/commands/logs.d.ts.map +1 -0
- package/dist/commands/logs.js +62 -0
- package/dist/commands/logs.js.map +1 -0
- package/dist/commands/scene.d.ts +22 -1
- package/dist/commands/scene.d.ts.map +1 -1
- package/dist/commands/scene.js +72 -0
- package/dist/commands/scene.js.map +1 -1
- package/dist/commands/test.d.ts +23 -0
- package/dist/commands/test.d.ts.map +1 -0
- package/dist/commands/test.js +94 -0
- package/dist/commands/test.js.map +1 -0
- package/dist/index.js +6 -0
- package/dist/index.js.map +1 -1
- package/dist/preflight.js +1 -1
- package/dist/preflight.js.map +1 -1
- package/package.json +32 -6
- package/src/commands/domain.ts +0 -49
- package/src/commands/execute.ts +0 -48
- package/src/commands/init.ts +0 -56
- package/src/commands/output.ts +0 -29
- package/src/commands/scene.ts +0 -135
- package/src/commands/status.ts +0 -49
- package/src/commands/with-unity-client.ts +0 -47
- package/src/index.ts +0 -29
- package/src/options.ts +0 -11
- package/src/preflight.test.ts +0 -39
- package/src/preflight.ts +0 -23
- package/tsconfig.json +0 -16
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"scene.js","sourceRoot":"","sources":["../../src/commands/scene.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"scene.js","sourceRoot":"","sources":["../../src/commands/scene.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,23 @@
|
|
|
1
|
+
import type { Command } from 'commander';
|
|
2
|
+
import type { TestListQuery, TestListResult, TestRunQuery, TestRunResult } from '@unibridge/sdk';
|
|
3
|
+
interface TestCommandOptions {
|
|
4
|
+
mode?: string;
|
|
5
|
+
filter?: string;
|
|
6
|
+
limit?: string;
|
|
7
|
+
offset?: string;
|
|
8
|
+
}
|
|
9
|
+
interface TestListDeps {
|
|
10
|
+
list: (query?: TestListQuery) => Promise<TestListResult>;
|
|
11
|
+
console: Pick<Console, 'log' | 'error'>;
|
|
12
|
+
exit?: (code: number) => void;
|
|
13
|
+
}
|
|
14
|
+
interface TestRunDeps {
|
|
15
|
+
run: (query?: TestRunQuery) => Promise<TestRunResult>;
|
|
16
|
+
console: Pick<Console, 'log' | 'error'>;
|
|
17
|
+
exit?: (code: number) => void;
|
|
18
|
+
}
|
|
19
|
+
export declare function handleTestList(opts: TestCommandOptions, jsonOutput: boolean, deps: TestListDeps): Promise<void>;
|
|
20
|
+
export declare function handleTestRun(opts: TestCommandOptions, jsonOutput: boolean, deps: TestRunDeps): Promise<void>;
|
|
21
|
+
export declare function registerTest(program: Command): void;
|
|
22
|
+
export {};
|
|
23
|
+
//# sourceMappingURL=test.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"test.d.ts","sourceRoot":"","sources":["../../src/commands/test.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,WAAW,CAAA;AACxC,OAAO,KAAK,EACV,aAAa,EACb,cAAc,EAEd,YAAY,EACZ,aAAa,EACd,MAAM,gBAAgB,CAAA;AAIvB,UAAU,kBAAkB;IAC1B,IAAI,CAAC,EAAE,MAAM,CAAA;IACb,MAAM,CAAC,EAAE,MAAM,CAAA;IACf,KAAK,CAAC,EAAE,MAAM,CAAA;IACd,MAAM,CAAC,EAAE,MAAM,CAAA;CAChB;AAED,UAAU,YAAY;IACpB,IAAI,EAAE,CAAC,KAAK,CAAC,EAAE,aAAa,KAAK,OAAO,CAAC,cAAc,CAAC,CAAA;IACxD,OAAO,EAAE,IAAI,CAAC,OAAO,EAAE,KAAK,GAAG,OAAO,CAAC,CAAA;IACvC,IAAI,CAAC,EAAE,CAAC,IAAI,EAAE,MAAM,KAAK,IAAI,CAAA;CAC9B;AAED,UAAU,WAAW;IACnB,GAAG,EAAE,CAAC,KAAK,CAAC,EAAE,YAAY,KAAK,OAAO,CAAC,aAAa,CAAC,CAAA;IACrD,OAAO,EAAE,IAAI,CAAC,OAAO,EAAE,KAAK,GAAG,OAAO,CAAC,CAAA;IACvC,IAAI,CAAC,EAAE,CAAC,IAAI,EAAE,MAAM,KAAK,IAAI,CAAA;CAC9B;AA0CD,wBAAsB,cAAc,CAClC,IAAI,EAAE,kBAAkB,EACxB,UAAU,EAAE,OAAO,EACnB,IAAI,EAAE,YAAY,GACjB,OAAO,CAAC,IAAI,CAAC,CAcf;AAED,wBAAsB,aAAa,CACjC,IAAI,EAAE,kBAAkB,EACxB,UAAU,EAAE,OAAO,EACnB,IAAI,EAAE,WAAW,GAChB,OAAO,CAAC,IAAI,CAAC,CAmBf;AAED,wBAAgB,YAAY,CAAC,OAAO,EAAE,OAAO,GAAG,IAAI,CAqDnD"}
|
|
@@ -0,0 +1,94 @@
|
|
|
1
|
+
import { runWithOutput } from "./output.js";
|
|
2
|
+
import { withUnityClient } from "./with-unity-client.js";
|
|
3
|
+
function parseMode(value) {
|
|
4
|
+
if (value == null) {
|
|
5
|
+
return undefined;
|
|
6
|
+
}
|
|
7
|
+
if (value === 'edit' || value === 'play') {
|
|
8
|
+
return value;
|
|
9
|
+
}
|
|
10
|
+
throw new Error('--mode must be one of: edit, play.');
|
|
11
|
+
}
|
|
12
|
+
function parseIntWithMinimum(value, label, defaultValue, minimum) {
|
|
13
|
+
if (value == null) {
|
|
14
|
+
return defaultValue;
|
|
15
|
+
}
|
|
16
|
+
const parsed = Number.parseInt(value, 10);
|
|
17
|
+
if (!Number.isFinite(parsed) || parsed < minimum) {
|
|
18
|
+
if (minimum <= 0) {
|
|
19
|
+
throw new Error(`${label} must be a non-negative integer.`);
|
|
20
|
+
}
|
|
21
|
+
throw new Error(`${label} must be an integer >= ${minimum}.`);
|
|
22
|
+
}
|
|
23
|
+
return parsed;
|
|
24
|
+
}
|
|
25
|
+
function parseQuery(opts) {
|
|
26
|
+
return {
|
|
27
|
+
mode: parseMode(opts.mode),
|
|
28
|
+
filter: opts.filter,
|
|
29
|
+
limit: parseIntWithMinimum(opts.limit, '--limit', 50, 1),
|
|
30
|
+
offset: parseIntWithMinimum(opts.offset, '--offset', 0, 0),
|
|
31
|
+
};
|
|
32
|
+
}
|
|
33
|
+
export async function handleTestList(opts, jsonOutput, deps) {
|
|
34
|
+
const query = parseQuery(opts);
|
|
35
|
+
await runWithOutput(jsonOutput, deps, () => deps.list(query), (result, output) => {
|
|
36
|
+
output.log(`Tests: ${result.tests.length} of ${result.total} (limit ${result.limit}, offset ${result.offset})`);
|
|
37
|
+
for (const test of result.tests) {
|
|
38
|
+
output.log(`${test.mode.toUpperCase()} ${test.fullName}`);
|
|
39
|
+
}
|
|
40
|
+
});
|
|
41
|
+
}
|
|
42
|
+
export async function handleTestRun(opts, jsonOutput, deps) {
|
|
43
|
+
const query = parseQuery(opts);
|
|
44
|
+
await runWithOutput(jsonOutput, deps, () => deps.run(query), (result, output) => {
|
|
45
|
+
output.log(`Ran ${result.total} tests`);
|
|
46
|
+
output.log(`Passed: ${result.passed} Failed: ${result.failed} Skipped: ${result.skipped} Inconclusive: ${result.inconclusive}`);
|
|
47
|
+
output.log(`Duration: ${result.durationMs}ms`);
|
|
48
|
+
for (const test of result.tests) {
|
|
49
|
+
output.log(`${test.status.toUpperCase()} ${test.fullName} (${test.durationMs}ms)`);
|
|
50
|
+
if (test.message) {
|
|
51
|
+
output.log(test.message);
|
|
52
|
+
}
|
|
53
|
+
}
|
|
54
|
+
});
|
|
55
|
+
}
|
|
56
|
+
export function registerTest(program) {
|
|
57
|
+
const test = program
|
|
58
|
+
.command('test')
|
|
59
|
+
.description('List and run Unity Test Framework tests');
|
|
60
|
+
const applyCommonOptions = (command) => command
|
|
61
|
+
.option('--mode <mode>', 'Test mode (edit|play)')
|
|
62
|
+
.option('--filter <text>', 'Filter by test full name substring')
|
|
63
|
+
.option('--limit <number>', 'Number of items to return (default: 50)')
|
|
64
|
+
.option('--offset <number>', 'Offset into filtered items (default: 0)');
|
|
65
|
+
applyCommonOptions(test
|
|
66
|
+
.command('list')
|
|
67
|
+
.description('List available tests with pagination')
|
|
68
|
+
.action(async (opts, command) => {
|
|
69
|
+
await withUnityClient(command, { requirePlugin: true }, async (client, ctx) => {
|
|
70
|
+
await handleTestList(opts, ctx.jsonOutput, {
|
|
71
|
+
list: (query) => client.testList(query),
|
|
72
|
+
console,
|
|
73
|
+
exit: (exitCode) => {
|
|
74
|
+
process.exitCode = exitCode;
|
|
75
|
+
},
|
|
76
|
+
});
|
|
77
|
+
});
|
|
78
|
+
}));
|
|
79
|
+
applyCommonOptions(test
|
|
80
|
+
.command('run')
|
|
81
|
+
.description('Run tests and return paginated results')
|
|
82
|
+
.action(async (opts, command) => {
|
|
83
|
+
await withUnityClient(command, { requirePlugin: true }, async (client, ctx) => {
|
|
84
|
+
await handleTestRun(opts, ctx.jsonOutput, {
|
|
85
|
+
run: (query) => client.testRun(query),
|
|
86
|
+
console,
|
|
87
|
+
exit: (exitCode) => {
|
|
88
|
+
process.exitCode = exitCode;
|
|
89
|
+
},
|
|
90
|
+
});
|
|
91
|
+
});
|
|
92
|
+
}));
|
|
93
|
+
}
|
|
94
|
+
//# sourceMappingURL=test.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"test.js","sourceRoot":"","sources":["../../src/commands/test.ts"],"names":[],"mappings":"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"}
|
package/dist/index.js
CHANGED
|
@@ -5,8 +5,11 @@ import { program } from 'commander';
|
|
|
5
5
|
import { registerDomain } from "./commands/domain.js";
|
|
6
6
|
import { registerInit } from "./commands/init.js";
|
|
7
7
|
import { registerExecute } from "./commands/execute.js";
|
|
8
|
+
import { registerGameObject } from "./commands/gameobject.js";
|
|
9
|
+
import { registerLogs } from "./commands/logs.js";
|
|
8
10
|
import { registerStatus } from "./commands/status.js";
|
|
9
11
|
import { registerScene } from "./commands/scene.js";
|
|
12
|
+
import { registerTest } from "./commands/test.js";
|
|
10
13
|
const { version } = JSON.parse(readFileSync(path.join(import.meta.dirname, '..', 'package.json'), 'utf-8'));
|
|
11
14
|
program
|
|
12
15
|
.name('unibridge')
|
|
@@ -18,7 +21,10 @@ program
|
|
|
18
21
|
registerDomain(program);
|
|
19
22
|
registerInit(program);
|
|
20
23
|
registerExecute(program);
|
|
24
|
+
registerGameObject(program);
|
|
25
|
+
registerLogs(program);
|
|
21
26
|
registerStatus(program);
|
|
22
27
|
registerScene(program);
|
|
28
|
+
registerTest(program);
|
|
23
29
|
program.parse();
|
|
24
30
|
//# sourceMappingURL=index.js.map
|
package/dist/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":";AACA,OAAO,EAAE,YAAY,EAAE,MAAM,SAAS,CAAA;AACtC,OAAO,IAAI,MAAM,WAAW,CAAA;AAC5B,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAA;AACnC,OAAO,EAAE,cAAc,EAAE,MAAM,sBAAsB,CAAA;AACrD,OAAO,EAAE,YAAY,EAAE,MAAM,oBAAoB,CAAA;AACjD,OAAO,EAAE,eAAe,EAAE,MAAM,uBAAuB,CAAA;AACvD,OAAO,EAAE,cAAc,EAAE,MAAM,sBAAsB,CAAA;AACrD,OAAO,EAAE,aAAa,EAAE,MAAM,qBAAqB,CAAA;
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":";AACA,OAAO,EAAE,YAAY,EAAE,MAAM,SAAS,CAAA;AACtC,OAAO,IAAI,MAAM,WAAW,CAAA;AAC5B,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAA;AACnC,OAAO,EAAE,cAAc,EAAE,MAAM,sBAAsB,CAAA;AACrD,OAAO,EAAE,YAAY,EAAE,MAAM,oBAAoB,CAAA;AACjD,OAAO,EAAE,eAAe,EAAE,MAAM,uBAAuB,CAAA;AACvD,OAAO,EAAE,kBAAkB,EAAE,MAAM,0BAA0B,CAAA;AAC7D,OAAO,EAAE,YAAY,EAAE,MAAM,oBAAoB,CAAA;AACjD,OAAO,EAAE,cAAc,EAAE,MAAM,sBAAsB,CAAA;AACrD,OAAO,EAAE,aAAa,EAAE,MAAM,qBAAqB,CAAA;AACnD,OAAO,EAAE,YAAY,EAAE,MAAM,oBAAoB,CAAA;AAEjD,MAAM,EAAE,OAAO,EAAE,GAAG,IAAI,CAAC,KAAK,CAC5B,YAAY,CAAC,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,OAAO,EAAE,IAAI,EAAE,cAAc,CAAC,EAAE,OAAO,CAAC,CACrD,CAAA;AAExB,OAAO;KACJ,IAAI,CAAC,WAAW,CAAC;KACjB,WAAW,CAAC,oCAAoC,CAAC;KACjD,OAAO,CAAC,OAAO,CAAC;KAChB,MAAM,CAAC,sBAAsB,EAAE,uBAAuB,CAAC;KACvD,MAAM,CAAC,QAAQ,EAAE,uBAAuB,CAAC;KACzC,MAAM,CAAC,cAAc,EAAE,0CAA0C,CAAC,CAAA;AAErE,cAAc,CAAC,OAAO,CAAC,CAAA;AACvB,YAAY,CAAC,OAAO,CAAC,CAAA;AACrB,eAAe,CAAC,OAAO,CAAC,CAAA;AACxB,kBAAkB,CAAC,OAAO,CAAC,CAAA;AAC3B,YAAY,CAAC,OAAO,CAAC,CAAA;AACrB,cAAc,CAAC,OAAO,CAAC,CAAA;AACvB,aAAa,CAAC,OAAO,CAAC,CAAA;AACtB,YAAY,CAAC,OAAO,CAAC,CAAA;AAErB,OAAO,CAAC,KAAK,EAAE,CAAA"}
|
package/dist/preflight.js
CHANGED
|
@@ -11,7 +11,7 @@ export function resolveCommandProject(opts, config) {
|
|
|
11
11
|
throw new Error('Execute is disabled for this invocation (--no-execute).');
|
|
12
12
|
}
|
|
13
13
|
if (config.requirePlugin && !isPluginInstalled(projectPath)) {
|
|
14
|
-
throw new Error('com.msanatan.unibridge is not installed. Run `unibridge init` first.');
|
|
14
|
+
throw new Error('com.msanatan.unibridge is not installed. Run `unibridge init` (or `unibridge update`) first.');
|
|
15
15
|
}
|
|
16
16
|
return projectPath;
|
|
17
17
|
}
|
package/dist/preflight.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"preflight.js","sourceRoot":"","sources":["../src/preflight.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,gBAAgB,EAAE,iBAAiB,EAAE,MAAM,gBAAgB,CAAA;AAEpE,MAAM,UAAU,qBAAqB,CACnC,IAA6C,EAC7C,MAA6D;IAE7D,IAAI,WAAmB,CAAA;IACvB,IAAI,CAAC;QACH,WAAW,GAAG,gBAAgB,CAAC,IAAI,CAAC,OAAO,CAAC,CAAA;IAC9C,CAAC;IAAC,MAAM,CAAC;QACP,MAAM,IAAI,KAAK,CAAC,+EAA+E,CAAC,CAAA;IAClG,CAAC;IAED,IAAI,MAAM,CAAC,eAAe,IAAI,IAAI,CAAC,OAAO,KAAK,KAAK,EAAE,CAAC;QACrD,MAAM,IAAI,KAAK,CAAC,yDAAyD,CAAC,CAAA;IAC5E,CAAC;IAED,IAAI,MAAM,CAAC,aAAa,IAAI,CAAC,iBAAiB,CAAC,WAAW,CAAC,EAAE,CAAC;QAC5D,MAAM,IAAI,KAAK,CAAC,
|
|
1
|
+
{"version":3,"file":"preflight.js","sourceRoot":"","sources":["../src/preflight.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,gBAAgB,EAAE,iBAAiB,EAAE,MAAM,gBAAgB,CAAA;AAEpE,MAAM,UAAU,qBAAqB,CACnC,IAA6C,EAC7C,MAA6D;IAE7D,IAAI,WAAmB,CAAA;IACvB,IAAI,CAAC;QACH,WAAW,GAAG,gBAAgB,CAAC,IAAI,CAAC,OAAO,CAAC,CAAA;IAC9C,CAAC;IAAC,MAAM,CAAC;QACP,MAAM,IAAI,KAAK,CAAC,+EAA+E,CAAC,CAAA;IAClG,CAAC;IAED,IAAI,MAAM,CAAC,eAAe,IAAI,IAAI,CAAC,OAAO,KAAK,KAAK,EAAE,CAAC;QACrD,MAAM,IAAI,KAAK,CAAC,yDAAyD,CAAC,CAAA;IAC5E,CAAC;IAED,IAAI,MAAM,CAAC,aAAa,IAAI,CAAC,iBAAiB,CAAC,WAAW,CAAC,EAAE,CAAC;QAC5D,MAAM,IAAI,KAAK,CAAC,8FAA8F,CAAC,CAAA;IACjH,CAAC;IAED,OAAO,WAAW,CAAA;AACpB,CAAC"}
|
package/package.json
CHANGED
|
@@ -1,22 +1,48 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@unibridge/cli",
|
|
3
|
-
"version": "0.
|
|
4
|
-
"description": "",
|
|
3
|
+
"version": "0.8.0",
|
|
4
|
+
"description": "UniBridge is a CLI for interacting with the Unity Editor.",
|
|
5
5
|
"main": "./dist/index.js",
|
|
6
6
|
"scripts": {
|
|
7
7
|
"test": "node --test src/*.test.ts src/**/*.test.ts",
|
|
8
8
|
"build": "tsc -p tsconfig.json",
|
|
9
9
|
"prepublishOnly": "npm run build"
|
|
10
10
|
},
|
|
11
|
-
"keywords": [
|
|
12
|
-
|
|
13
|
-
|
|
11
|
+
"keywords": [
|
|
12
|
+
"unibridge",
|
|
13
|
+
"unity",
|
|
14
|
+
"cli",
|
|
15
|
+
"automation",
|
|
16
|
+
"tooling"
|
|
17
|
+
],
|
|
18
|
+
"author": {
|
|
19
|
+
"name": "Marcus Sanatan",
|
|
20
|
+
"url": "https://gameboymarcus.com"
|
|
21
|
+
},
|
|
22
|
+
"license": "MIT",
|
|
14
23
|
"type": "module",
|
|
24
|
+
"repository": {
|
|
25
|
+
"type": "git",
|
|
26
|
+
"url": "git+https://github.com/msanatan/unibridge.git",
|
|
27
|
+
"directory": "packages/cli"
|
|
28
|
+
},
|
|
29
|
+
"homepage": "https://github.com/msanatan/unibridge/tree/main/packages/cli",
|
|
30
|
+
"bugs": {
|
|
31
|
+
"url": "https://github.com/msanatan/unibridge/issues"
|
|
32
|
+
},
|
|
33
|
+
"files": [
|
|
34
|
+
"dist",
|
|
35
|
+
"README.md",
|
|
36
|
+
"LICENSE"
|
|
37
|
+
],
|
|
38
|
+
"publishConfig": {
|
|
39
|
+
"access": "public"
|
|
40
|
+
},
|
|
15
41
|
"bin": {
|
|
16
42
|
"unibridge": "./dist/index.js"
|
|
17
43
|
},
|
|
18
44
|
"dependencies": {
|
|
19
|
-
"@unibridge/sdk": "0.
|
|
45
|
+
"@unibridge/sdk": "0.8.0",
|
|
20
46
|
"commander": "^14.0.3"
|
|
21
47
|
}
|
|
22
48
|
}
|
package/src/commands/domain.ts
DELETED
|
@@ -1,49 +0,0 @@
|
|
|
1
|
-
import type { Command } from 'commander'
|
|
2
|
-
import type { DomainReloadResult } from '@unibridge/sdk'
|
|
3
|
-
import { runWithOutput } from './output.ts'
|
|
4
|
-
import { withUnityClient } from './with-unity-client.ts'
|
|
5
|
-
|
|
6
|
-
interface DomainReloadDeps {
|
|
7
|
-
reload: () => Promise<DomainReloadResult>
|
|
8
|
-
console: Pick<Console, 'log' | 'error'>
|
|
9
|
-
exit?: (code: number) => void
|
|
10
|
-
}
|
|
11
|
-
|
|
12
|
-
export async function handleDomainReload(
|
|
13
|
-
jsonOutput: boolean,
|
|
14
|
-
deps: DomainReloadDeps,
|
|
15
|
-
): Promise<void> {
|
|
16
|
-
await runWithOutput(
|
|
17
|
-
jsonOutput,
|
|
18
|
-
deps,
|
|
19
|
-
() => deps.reload(),
|
|
20
|
-
(_result, output) => {
|
|
21
|
-
output.log('Domain reload triggered.')
|
|
22
|
-
},
|
|
23
|
-
)
|
|
24
|
-
}
|
|
25
|
-
|
|
26
|
-
export function registerDomain(program: Command): void {
|
|
27
|
-
const domain = program
|
|
28
|
-
.command('domain')
|
|
29
|
-
.description('Unity domain operations')
|
|
30
|
-
|
|
31
|
-
domain
|
|
32
|
-
.command('reload')
|
|
33
|
-
.description('Trigger an asset refresh and domain reload')
|
|
34
|
-
.action(async (_opts: Record<string, never>, command: Command) => {
|
|
35
|
-
await withUnityClient(
|
|
36
|
-
command,
|
|
37
|
-
{ requirePlugin: true },
|
|
38
|
-
async (client, ctx) => {
|
|
39
|
-
await handleDomainReload(ctx.jsonOutput, {
|
|
40
|
-
reload: () => client.domainReload(),
|
|
41
|
-
console,
|
|
42
|
-
exit: (exitCode) => {
|
|
43
|
-
process.exitCode = exitCode
|
|
44
|
-
},
|
|
45
|
-
})
|
|
46
|
-
},
|
|
47
|
-
)
|
|
48
|
-
})
|
|
49
|
-
}
|
package/src/commands/execute.ts
DELETED
|
@@ -1,48 +0,0 @@
|
|
|
1
|
-
import type { Command } from 'commander'
|
|
2
|
-
import { runWithOutput } from './output.ts'
|
|
3
|
-
import { withUnityClient } from './with-unity-client.ts'
|
|
4
|
-
|
|
5
|
-
interface ExecuteDeps {
|
|
6
|
-
execute: (code: string) => Promise<unknown>
|
|
7
|
-
console: Pick<Console, 'log' | 'error'>
|
|
8
|
-
exit?: (code: number) => void
|
|
9
|
-
}
|
|
10
|
-
|
|
11
|
-
export async function handleExecute(
|
|
12
|
-
code: string,
|
|
13
|
-
jsonOutput: boolean,
|
|
14
|
-
deps: ExecuteDeps,
|
|
15
|
-
): Promise<void> {
|
|
16
|
-
await runWithOutput(
|
|
17
|
-
jsonOutput,
|
|
18
|
-
deps,
|
|
19
|
-
() => deps.execute(code),
|
|
20
|
-
(result, output) => {
|
|
21
|
-
output.log(String(result))
|
|
22
|
-
},
|
|
23
|
-
)
|
|
24
|
-
}
|
|
25
|
-
|
|
26
|
-
export function registerExecute(program: Command): void {
|
|
27
|
-
program
|
|
28
|
-
.command('execute <code>')
|
|
29
|
-
.description('Execute C# code in the Unity Editor')
|
|
30
|
-
.action(async (code: string, _opts: Record<string, never>, command: Command) => {
|
|
31
|
-
await withUnityClient(
|
|
32
|
-
command,
|
|
33
|
-
{
|
|
34
|
-
requirePlugin: true,
|
|
35
|
-
requiresExecute: true,
|
|
36
|
-
},
|
|
37
|
-
async (client, ctx) => {
|
|
38
|
-
await handleExecute(code, ctx.jsonOutput, {
|
|
39
|
-
execute: (requestCode) => client.execute(requestCode),
|
|
40
|
-
console,
|
|
41
|
-
exit: (exitCode) => {
|
|
42
|
-
process.exitCode = exitCode
|
|
43
|
-
},
|
|
44
|
-
})
|
|
45
|
-
},
|
|
46
|
-
)
|
|
47
|
-
})
|
|
48
|
-
}
|
package/src/commands/init.ts
DELETED
|
@@ -1,56 +0,0 @@
|
|
|
1
|
-
import type { Command } from 'commander'
|
|
2
|
-
import { init as sdkInit, type InitOptions, type InitResult } from '@unibridge/sdk'
|
|
3
|
-
import { getGlobalOptions } from '../options.ts'
|
|
4
|
-
import { runWithOutput } from './output.ts'
|
|
5
|
-
|
|
6
|
-
interface InitCommandOptions {
|
|
7
|
-
local?: string
|
|
8
|
-
git?: string
|
|
9
|
-
}
|
|
10
|
-
|
|
11
|
-
interface InitHandlerDeps {
|
|
12
|
-
init: (options?: InitOptions) => Promise<InitResult>
|
|
13
|
-
console: Pick<Console, 'log' | 'error'>
|
|
14
|
-
}
|
|
15
|
-
|
|
16
|
-
export async function handleInit(
|
|
17
|
-
opts: InitCommandOptions,
|
|
18
|
-
jsonOutput: boolean,
|
|
19
|
-
deps: InitHandlerDeps = { init: sdkInit, console },
|
|
20
|
-
): Promise<void> {
|
|
21
|
-
const source = opts.local
|
|
22
|
-
? { type: 'local' as const, path: opts.local }
|
|
23
|
-
: opts.git
|
|
24
|
-
? { type: 'git' as const, url: opts.git }
|
|
25
|
-
: undefined
|
|
26
|
-
|
|
27
|
-
await runWithOutput(
|
|
28
|
-
jsonOutput,
|
|
29
|
-
deps,
|
|
30
|
-
() => deps.init({ source }),
|
|
31
|
-
(result, output) => {
|
|
32
|
-
output.log(`Found Unity ${result.unityVersion} at ${result.projectPath}`)
|
|
33
|
-
output.log(`Installed com.msanatan.unibridge@${result.pluginVersion}`)
|
|
34
|
-
output.log('Open Unity to load the plugin.')
|
|
35
|
-
},
|
|
36
|
-
)
|
|
37
|
-
}
|
|
38
|
-
|
|
39
|
-
export function registerInit(program: Command): void {
|
|
40
|
-
program
|
|
41
|
-
.command('init')
|
|
42
|
-
.description('Install the unibridge plugin into a Unity project')
|
|
43
|
-
.option('--local <path>', 'Install from a local path')
|
|
44
|
-
.option('--git <url>', 'Install from a custom git URL')
|
|
45
|
-
.action(async (opts: InitCommandOptions, command: Command) => {
|
|
46
|
-
const globalOpts = getGlobalOptions(command)
|
|
47
|
-
await handleInit(
|
|
48
|
-
opts,
|
|
49
|
-
globalOpts.json === true,
|
|
50
|
-
{
|
|
51
|
-
init: (initOpts) => sdkInit({ ...initOpts, projectPath: globalOpts.project }),
|
|
52
|
-
console,
|
|
53
|
-
},
|
|
54
|
-
)
|
|
55
|
-
})
|
|
56
|
-
}
|
package/src/commands/output.ts
DELETED
|
@@ -1,29 +0,0 @@
|
|
|
1
|
-
export interface CommandOutputDeps {
|
|
2
|
-
console: Pick<Console, 'log' | 'error'>
|
|
3
|
-
exit?: (code: number) => void
|
|
4
|
-
}
|
|
5
|
-
|
|
6
|
-
export async function runWithOutput<TResult>(
|
|
7
|
-
jsonOutput: boolean,
|
|
8
|
-
deps: CommandOutputDeps,
|
|
9
|
-
execute: () => Promise<TResult>,
|
|
10
|
-
renderText: (result: TResult, consoleLike: Pick<Console, 'log'>) => void,
|
|
11
|
-
): Promise<void> {
|
|
12
|
-
try {
|
|
13
|
-
const result = await execute()
|
|
14
|
-
if (jsonOutput) {
|
|
15
|
-
deps.console.log(JSON.stringify({ success: true, result }))
|
|
16
|
-
return
|
|
17
|
-
}
|
|
18
|
-
|
|
19
|
-
renderText(result, deps.console)
|
|
20
|
-
} catch (error) {
|
|
21
|
-
const message = error instanceof Error ? error.message : String(error)
|
|
22
|
-
if (jsonOutput) {
|
|
23
|
-
deps.console.log(JSON.stringify({ success: false, error: message }))
|
|
24
|
-
} else {
|
|
25
|
-
deps.console.error(`Error: ${message}`)
|
|
26
|
-
}
|
|
27
|
-
deps.exit?.(1)
|
|
28
|
-
}
|
|
29
|
-
}
|
package/src/commands/scene.ts
DELETED
|
@@ -1,135 +0,0 @@
|
|
|
1
|
-
import type { Command } from 'commander'
|
|
2
|
-
import type { SceneActiveResult, SceneCreateResult, SceneOpenResult } from '@unibridge/sdk'
|
|
3
|
-
import { runWithOutput } from './output.ts'
|
|
4
|
-
import { withUnityClient } from './with-unity-client.ts'
|
|
5
|
-
|
|
6
|
-
interface SceneActiveDeps {
|
|
7
|
-
active: () => Promise<SceneActiveResult>
|
|
8
|
-
console: Pick<Console, 'log' | 'error'>
|
|
9
|
-
exit?: (code: number) => void
|
|
10
|
-
}
|
|
11
|
-
|
|
12
|
-
export async function handleSceneActive(
|
|
13
|
-
jsonOutput: boolean,
|
|
14
|
-
deps: SceneActiveDeps,
|
|
15
|
-
): Promise<void> {
|
|
16
|
-
await runWithOutput(
|
|
17
|
-
jsonOutput,
|
|
18
|
-
deps,
|
|
19
|
-
() => deps.active(),
|
|
20
|
-
(result, output) => {
|
|
21
|
-
output.log(`Name: ${result.scene.name}`)
|
|
22
|
-
output.log(`Path: ${result.scene.path}`)
|
|
23
|
-
output.log(`Dirty: ${result.scene.isDirty ? 'yes' : 'no'}`)
|
|
24
|
-
},
|
|
25
|
-
)
|
|
26
|
-
}
|
|
27
|
-
|
|
28
|
-
interface SceneOpenDeps {
|
|
29
|
-
open: (path: string) => Promise<SceneOpenResult>
|
|
30
|
-
console: Pick<Console, 'log' | 'error'>
|
|
31
|
-
exit?: (code: number) => void
|
|
32
|
-
}
|
|
33
|
-
|
|
34
|
-
export async function handleSceneOpen(
|
|
35
|
-
path: string,
|
|
36
|
-
jsonOutput: boolean,
|
|
37
|
-
deps: SceneOpenDeps,
|
|
38
|
-
): Promise<void> {
|
|
39
|
-
await runWithOutput(
|
|
40
|
-
jsonOutput,
|
|
41
|
-
deps,
|
|
42
|
-
() => deps.open(path),
|
|
43
|
-
(result, output) => {
|
|
44
|
-
output.log(`Name: ${result.scene.name}`)
|
|
45
|
-
output.log(`Path: ${result.scene.path}`)
|
|
46
|
-
output.log(`Dirty: ${result.scene.isDirty ? 'yes' : 'no'}`)
|
|
47
|
-
},
|
|
48
|
-
)
|
|
49
|
-
}
|
|
50
|
-
|
|
51
|
-
interface SceneCreateDeps {
|
|
52
|
-
create: (path: string) => Promise<SceneCreateResult>
|
|
53
|
-
console: Pick<Console, 'log' | 'error'>
|
|
54
|
-
exit?: (code: number) => void
|
|
55
|
-
}
|
|
56
|
-
|
|
57
|
-
export async function handleSceneCreate(
|
|
58
|
-
path: string,
|
|
59
|
-
jsonOutput: boolean,
|
|
60
|
-
deps: SceneCreateDeps,
|
|
61
|
-
): Promise<void> {
|
|
62
|
-
await runWithOutput(
|
|
63
|
-
jsonOutput,
|
|
64
|
-
deps,
|
|
65
|
-
() => deps.create(path),
|
|
66
|
-
(result, output) => {
|
|
67
|
-
output.log(`Name: ${result.scene.name}`)
|
|
68
|
-
output.log(`Path: ${result.scene.path}`)
|
|
69
|
-
output.log(`Dirty: ${result.scene.isDirty ? 'yes' : 'no'}`)
|
|
70
|
-
},
|
|
71
|
-
)
|
|
72
|
-
}
|
|
73
|
-
|
|
74
|
-
export function registerScene(program: Command): void {
|
|
75
|
-
const scene = program
|
|
76
|
-
.command('scene')
|
|
77
|
-
.description('Read and modify Unity scenes')
|
|
78
|
-
|
|
79
|
-
scene
|
|
80
|
-
.command('active')
|
|
81
|
-
.description('Show the active scene')
|
|
82
|
-
.action(async (_opts: Record<string, never>, command: Command) => {
|
|
83
|
-
await withUnityClient(
|
|
84
|
-
command,
|
|
85
|
-
{ requirePlugin: true },
|
|
86
|
-
async (client, ctx) => {
|
|
87
|
-
await handleSceneActive(ctx.jsonOutput, {
|
|
88
|
-
active: () => client.sceneActive(),
|
|
89
|
-
console,
|
|
90
|
-
exit: (exitCode) => {
|
|
91
|
-
process.exitCode = exitCode
|
|
92
|
-
},
|
|
93
|
-
})
|
|
94
|
-
},
|
|
95
|
-
)
|
|
96
|
-
})
|
|
97
|
-
|
|
98
|
-
scene
|
|
99
|
-
.command('create <path>')
|
|
100
|
-
.description('Create a new scene at a project-relative path')
|
|
101
|
-
.action(async (path: string, _opts: Record<string, never>, command: Command) => {
|
|
102
|
-
await withUnityClient(
|
|
103
|
-
command,
|
|
104
|
-
{ requirePlugin: true },
|
|
105
|
-
async (client, ctx) => {
|
|
106
|
-
await handleSceneCreate(path, ctx.jsonOutput, {
|
|
107
|
-
create: (scenePath) => client.sceneCreate(scenePath),
|
|
108
|
-
console,
|
|
109
|
-
exit: (exitCode) => {
|
|
110
|
-
process.exitCode = exitCode
|
|
111
|
-
},
|
|
112
|
-
})
|
|
113
|
-
},
|
|
114
|
-
)
|
|
115
|
-
})
|
|
116
|
-
|
|
117
|
-
scene
|
|
118
|
-
.command('open <path>')
|
|
119
|
-
.description('Open a scene by project-relative path')
|
|
120
|
-
.action(async (path: string, _opts: Record<string, never>, command: Command) => {
|
|
121
|
-
await withUnityClient(
|
|
122
|
-
command,
|
|
123
|
-
{ requirePlugin: true },
|
|
124
|
-
async (client, ctx) => {
|
|
125
|
-
await handleSceneOpen(path, ctx.jsonOutput, {
|
|
126
|
-
open: (scenePath) => client.sceneOpen(scenePath),
|
|
127
|
-
console,
|
|
128
|
-
exit: (exitCode) => {
|
|
129
|
-
process.exitCode = exitCode
|
|
130
|
-
},
|
|
131
|
-
})
|
|
132
|
-
},
|
|
133
|
-
)
|
|
134
|
-
})
|
|
135
|
-
}
|
package/src/commands/status.ts
DELETED
|
@@ -1,49 +0,0 @@
|
|
|
1
|
-
import type { Command } from 'commander'
|
|
2
|
-
import type { StatusResult } from '@unibridge/sdk'
|
|
3
|
-
import { runWithOutput } from './output.ts'
|
|
4
|
-
import { withUnityClient } from './with-unity-client.ts'
|
|
5
|
-
|
|
6
|
-
interface StatusDeps {
|
|
7
|
-
status: () => Promise<StatusResult>
|
|
8
|
-
console: Pick<Console, 'log' | 'error'>
|
|
9
|
-
exit?: (code: number) => void
|
|
10
|
-
}
|
|
11
|
-
|
|
12
|
-
export async function handleStatus(
|
|
13
|
-
jsonOutput: boolean,
|
|
14
|
-
deps: StatusDeps,
|
|
15
|
-
): Promise<void> {
|
|
16
|
-
await runWithOutput(
|
|
17
|
-
jsonOutput,
|
|
18
|
-
deps,
|
|
19
|
-
() => deps.status(),
|
|
20
|
-
(result, output) => {
|
|
21
|
-
output.log(`Project: ${result.projectPath}`)
|
|
22
|
-
output.log(`Unity: ${result.unityVersion}`)
|
|
23
|
-
output.log(`Plugin: ${result.pluginVersion}`)
|
|
24
|
-
output.log(`Scene: ${result.activeScene}`)
|
|
25
|
-
output.log(`Mode: ${result.playMode}`)
|
|
26
|
-
},
|
|
27
|
-
)
|
|
28
|
-
}
|
|
29
|
-
|
|
30
|
-
export function registerStatus(program: Command): void {
|
|
31
|
-
program
|
|
32
|
-
.command('status')
|
|
33
|
-
.description('Show the current state of the Unity Editor')
|
|
34
|
-
.action(async (_opts: Record<string, never>, command: Command) => {
|
|
35
|
-
await withUnityClient(
|
|
36
|
-
command,
|
|
37
|
-
{ requirePlugin: true },
|
|
38
|
-
async (client, ctx) => {
|
|
39
|
-
await handleStatus(ctx.jsonOutput, {
|
|
40
|
-
status: () => client.status(),
|
|
41
|
-
console,
|
|
42
|
-
exit: (exitCode) => {
|
|
43
|
-
process.exitCode = exitCode
|
|
44
|
-
},
|
|
45
|
-
})
|
|
46
|
-
},
|
|
47
|
-
)
|
|
48
|
-
})
|
|
49
|
-
}
|