@notask/unity-cli-tools 1.2.0-rc.1 → 2.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.
- package/.claude/settings.local.json +7 -0
- package/CHANGELOG.md +164 -164
- package/LICENSE +23 -23
- package/README.md +809 -347
- package/dist/cjs/errors/Result.js +76 -0
- package/dist/cjs/errors/UnityError.js +77 -0
- package/dist/cjs/errors/index.js +18 -0
- package/dist/cjs/events/hubEventEmitter.js +16 -16
- package/dist/cjs/events/hubEventParser.js +97 -27
- package/dist/cjs/events/patterns/implementations/bracketModulePattern.js +57 -0
- package/dist/cjs/events/patterns/implementations/errorPattern.js +99 -0
- package/dist/cjs/events/patterns/implementations/fallbackPattern.js +63 -0
- package/dist/cjs/events/patterns/implementations/index.js +9 -0
- package/dist/cjs/events/patterns/index.js +23 -0
- package/dist/cjs/events/patterns/patternRegistry.js +69 -0
- package/dist/cjs/events/patterns/statusNormalizer.js +280 -0
- package/dist/cjs/events/patterns/types.js +2 -0
- package/dist/cjs/index.js +8 -11
- package/dist/cjs/unityEditor.js +182 -230
- package/dist/cjs/unityHub.js +110 -85
- package/dist/cjs/utils/commandExecutor.js +8 -9
- package/dist/esm/errors/Result.d.ts +21 -0
- package/dist/esm/errors/Result.js +63 -0
- package/dist/esm/errors/UnityError.d.ts +36 -0
- package/dist/esm/errors/UnityError.js +64 -0
- package/dist/esm/errors/index.d.ts +2 -0
- package/dist/esm/errors/index.js +2 -0
- package/dist/esm/events/hubEventEmitter.d.ts +1 -1
- package/dist/esm/events/hubEventParser.d.ts +17 -3
- package/dist/esm/events/hubEventParser.js +97 -27
- package/dist/esm/events/patterns/implementations/bracketModulePattern.d.ts +11 -0
- package/dist/esm/events/patterns/implementations/bracketModulePattern.js +53 -0
- package/dist/esm/events/patterns/implementations/errorPattern.d.ts +22 -0
- package/dist/esm/events/patterns/implementations/errorPattern.js +95 -0
- package/dist/esm/events/patterns/implementations/fallbackPattern.d.ts +13 -0
- package/dist/esm/events/patterns/implementations/fallbackPattern.js +59 -0
- package/dist/esm/events/patterns/implementations/index.d.ts +3 -0
- package/dist/esm/events/patterns/implementations/index.js +3 -0
- package/dist/esm/events/patterns/index.d.ts +4 -0
- package/dist/esm/events/patterns/index.js +4 -0
- package/dist/esm/events/patterns/patternRegistry.d.ts +14 -0
- package/dist/esm/events/patterns/patternRegistry.js +65 -0
- package/dist/esm/events/patterns/statusNormalizer.d.ts +15 -0
- package/dist/esm/events/patterns/statusNormalizer.js +276 -0
- package/dist/esm/events/patterns/types.d.ts +30 -0
- package/dist/esm/events/patterns/types.js +1 -0
- package/dist/esm/index.d.ts +5 -6
- package/dist/esm/index.js +1 -2
- package/dist/esm/unityEditor.d.ts +11 -15
- package/dist/esm/unityEditor.js +196 -244
- package/dist/esm/unityHub.d.ts +13 -11
- package/dist/esm/unityHub.js +108 -83
- package/dist/esm/utils/commandExecutor.d.ts +4 -3
- package/dist/esm/utils/commandExecutor.js +8 -9
- package/package.json +70 -70
- package/sandbox/index.js +51 -0
- package/sandbox/node_modules/.package-lock.json +10495 -0
- package/sandbox/package.json +13 -0
- package/dist/cjs/configs/unityConfig.js +0 -74
- package/dist/cjs/unityTemplates.js +0 -29
- package/dist/esm/configs/unityConfig.d.ts +0 -25
- package/dist/esm/configs/unityConfig.js +0 -68
- package/dist/esm/unityTemplates.d.ts +0 -10
- package/dist/esm/unityTemplates.js +0 -24
|
@@ -0,0 +1,76 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.ok = ok;
|
|
4
|
+
exports.err = err;
|
|
5
|
+
exports.isOk = isOk;
|
|
6
|
+
exports.isErr = isErr;
|
|
7
|
+
exports.unwrap = unwrap;
|
|
8
|
+
exports.unwrapOr = unwrapOr;
|
|
9
|
+
exports.map = map;
|
|
10
|
+
exports.mapErr = mapErr;
|
|
11
|
+
exports.andThen = andThen;
|
|
12
|
+
exports.firstOk = firstOk;
|
|
13
|
+
exports.combine = combine;
|
|
14
|
+
function ok(value) {
|
|
15
|
+
return { success: true, value };
|
|
16
|
+
}
|
|
17
|
+
function err(error) {
|
|
18
|
+
return { success: false, error };
|
|
19
|
+
}
|
|
20
|
+
function isOk(result) {
|
|
21
|
+
return result.success === true;
|
|
22
|
+
}
|
|
23
|
+
function isErr(result) {
|
|
24
|
+
return result.success === false;
|
|
25
|
+
}
|
|
26
|
+
function unwrap(result) {
|
|
27
|
+
if (isOk(result)) {
|
|
28
|
+
return result.value;
|
|
29
|
+
}
|
|
30
|
+
throw result.error;
|
|
31
|
+
}
|
|
32
|
+
function unwrapOr(result, defaultValue) {
|
|
33
|
+
if (isOk(result)) {
|
|
34
|
+
return result.value;
|
|
35
|
+
}
|
|
36
|
+
return defaultValue;
|
|
37
|
+
}
|
|
38
|
+
function map(result, fn) {
|
|
39
|
+
if (isOk(result)) {
|
|
40
|
+
return ok(fn(result.value));
|
|
41
|
+
}
|
|
42
|
+
return result;
|
|
43
|
+
}
|
|
44
|
+
function mapErr(result, fn) {
|
|
45
|
+
if (isErr(result)) {
|
|
46
|
+
return err(fn(result.error));
|
|
47
|
+
}
|
|
48
|
+
return result;
|
|
49
|
+
}
|
|
50
|
+
function andThen(result, fn) {
|
|
51
|
+
if (isOk(result)) {
|
|
52
|
+
return fn(result.value);
|
|
53
|
+
}
|
|
54
|
+
return result;
|
|
55
|
+
}
|
|
56
|
+
function firstOk(results) {
|
|
57
|
+
if (results.length === 0) {
|
|
58
|
+
throw new Error("Cannot call firstOk on empty array");
|
|
59
|
+
}
|
|
60
|
+
for (const result of results) {
|
|
61
|
+
if (isOk(result)) {
|
|
62
|
+
return result;
|
|
63
|
+
}
|
|
64
|
+
}
|
|
65
|
+
return results[results.length - 1];
|
|
66
|
+
}
|
|
67
|
+
function combine(results) {
|
|
68
|
+
const values = [];
|
|
69
|
+
for (const result of results) {
|
|
70
|
+
if (isErr(result)) {
|
|
71
|
+
return result;
|
|
72
|
+
}
|
|
73
|
+
values.push(result.value);
|
|
74
|
+
}
|
|
75
|
+
return ok(values);
|
|
76
|
+
}
|
|
@@ -0,0 +1,77 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.InvalidArgumentError = exports.UnityTestError = exports.UnityPackageError = exports.UnityLicenseError = exports.UnityProjectError = exports.UnityInstallationError = exports.UnityCommandError = exports.UnityEditorNotFoundError = exports.UnityHubNotFoundError = exports.UnityError = void 0;
|
|
4
|
+
class UnityError extends Error {
|
|
5
|
+
code;
|
|
6
|
+
context;
|
|
7
|
+
constructor(message, code, context) {
|
|
8
|
+
super(message);
|
|
9
|
+
this.name = this.constructor.name;
|
|
10
|
+
this.code = code;
|
|
11
|
+
this.context = context;
|
|
12
|
+
Error.captureStackTrace(this, this.constructor);
|
|
13
|
+
}
|
|
14
|
+
}
|
|
15
|
+
exports.UnityError = UnityError;
|
|
16
|
+
class UnityHubNotFoundError extends UnityError {
|
|
17
|
+
constructor(message = "Unity Hub is not available", context) {
|
|
18
|
+
super(message, "UNITY_HUB_NOT_FOUND", context);
|
|
19
|
+
}
|
|
20
|
+
}
|
|
21
|
+
exports.UnityHubNotFoundError = UnityHubNotFoundError;
|
|
22
|
+
class UnityEditorNotFoundError extends UnityError {
|
|
23
|
+
constructor(version, path) {
|
|
24
|
+
super(`Unity Editor version ${version} not found${path ? ` at path: ${path}` : ""}`, "UNITY_EDITOR_NOT_FOUND", { version, path });
|
|
25
|
+
}
|
|
26
|
+
}
|
|
27
|
+
exports.UnityEditorNotFoundError = UnityEditorNotFoundError;
|
|
28
|
+
class UnityCommandError extends UnityError {
|
|
29
|
+
stdout;
|
|
30
|
+
stderr;
|
|
31
|
+
exitCode;
|
|
32
|
+
constructor(message, stdout = "", stderr = "", exitCode, context) {
|
|
33
|
+
super(message, "UNITY_COMMAND_ERROR", context);
|
|
34
|
+
this.stdout = stdout;
|
|
35
|
+
this.stderr = stderr;
|
|
36
|
+
this.exitCode = exitCode;
|
|
37
|
+
}
|
|
38
|
+
}
|
|
39
|
+
exports.UnityCommandError = UnityCommandError;
|
|
40
|
+
class UnityInstallationError extends UnityError {
|
|
41
|
+
constructor(message, context) {
|
|
42
|
+
super(message, "UNITY_INSTALLATION_ERROR", context);
|
|
43
|
+
}
|
|
44
|
+
}
|
|
45
|
+
exports.UnityInstallationError = UnityInstallationError;
|
|
46
|
+
class UnityProjectError extends UnityError {
|
|
47
|
+
constructor(message, context) {
|
|
48
|
+
super(message, "UNITY_PROJECT_ERROR", context);
|
|
49
|
+
}
|
|
50
|
+
}
|
|
51
|
+
exports.UnityProjectError = UnityProjectError;
|
|
52
|
+
class UnityLicenseError extends UnityError {
|
|
53
|
+
constructor(message, context) {
|
|
54
|
+
super(message, "UNITY_LICENSE_ERROR", context);
|
|
55
|
+
}
|
|
56
|
+
}
|
|
57
|
+
exports.UnityLicenseError = UnityLicenseError;
|
|
58
|
+
class UnityPackageError extends UnityError {
|
|
59
|
+
constructor(message, context) {
|
|
60
|
+
super(message, "UNITY_PACKAGE_ERROR", context);
|
|
61
|
+
}
|
|
62
|
+
}
|
|
63
|
+
exports.UnityPackageError = UnityPackageError;
|
|
64
|
+
class UnityTestError extends UnityError {
|
|
65
|
+
testOutput;
|
|
66
|
+
constructor(message, testOutput = "", context) {
|
|
67
|
+
super(message, "UNITY_TEST_ERROR", context);
|
|
68
|
+
this.testOutput = testOutput;
|
|
69
|
+
}
|
|
70
|
+
}
|
|
71
|
+
exports.UnityTestError = UnityTestError;
|
|
72
|
+
class InvalidArgumentError extends UnityError {
|
|
73
|
+
constructor(message, context) {
|
|
74
|
+
super(message, "INVALID_ARGUMENT", context);
|
|
75
|
+
}
|
|
76
|
+
}
|
|
77
|
+
exports.InvalidArgumentError = InvalidArgumentError;
|
|
@@ -0,0 +1,18 @@
|
|
|
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 __exportStar = (this && this.__exportStar) || function(m, exports) {
|
|
14
|
+
for (var p in m) if (p !== "default" && !Object.prototype.hasOwnProperty.call(exports, p)) __createBinding(exports, m, p);
|
|
15
|
+
};
|
|
16
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
17
|
+
__exportStar(require("./Result.js"), exports);
|
|
18
|
+
__exportStar(require("./UnityError.js"), exports);
|
|
@@ -2,8 +2,8 @@
|
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
3
|
exports.UnityHubInstallerEvent = void 0;
|
|
4
4
|
const events_1 = require("events");
|
|
5
|
-
const
|
|
6
|
-
const
|
|
5
|
+
const unity_js_1 = require("../types/unity.js");
|
|
6
|
+
const hubEventParser_js_1 = require("./hubEventParser.js");
|
|
7
7
|
class UnityHubInstallerEvent extends events_1.EventEmitter {
|
|
8
8
|
#moduleTracker = new Map();
|
|
9
9
|
constructor() {
|
|
@@ -24,37 +24,37 @@ class UnityHubInstallerEvent extends events_1.EventEmitter {
|
|
|
24
24
|
reject(new Error("Cancelled"));
|
|
25
25
|
};
|
|
26
26
|
const cleanup = () => {
|
|
27
|
-
this.off(
|
|
28
|
-
this.off(
|
|
29
|
-
this.off(
|
|
27
|
+
this.off(unity_js_1.InstallerEventType.Completed, onComplete);
|
|
28
|
+
this.off(unity_js_1.InstallerEventType.Error, onError);
|
|
29
|
+
this.off(unity_js_1.InstallerEventType.Cancelled, onCancel);
|
|
30
30
|
};
|
|
31
|
-
this.on(
|
|
32
|
-
this.on(
|
|
33
|
-
this.on(
|
|
31
|
+
this.on(unity_js_1.InstallerEventType.Completed, onComplete);
|
|
32
|
+
this.on(unity_js_1.InstallerEventType.Error, onError);
|
|
33
|
+
this.on(unity_js_1.InstallerEventType.Cancelled, onCancel);
|
|
34
34
|
});
|
|
35
35
|
}
|
|
36
36
|
Progress(raw) {
|
|
37
|
-
const events =
|
|
37
|
+
const events = hubEventParser_js_1.UnityHubEventParser.parseUnityHubEvent(raw);
|
|
38
38
|
if (events.length === 0)
|
|
39
39
|
return;
|
|
40
40
|
this.#Error(events);
|
|
41
|
-
const progressEvents = events.filter((e) => e.status !==
|
|
41
|
+
const progressEvents = events.filter((e) => e.status !== unity_js_1.InstallerStatus.Error);
|
|
42
42
|
if (progressEvents.length === 0)
|
|
43
43
|
return;
|
|
44
|
-
this.emit(
|
|
44
|
+
this.emit(unity_js_1.InstallerEventType.Progress, progressEvents);
|
|
45
45
|
this.#updateModuleTracker(events);
|
|
46
46
|
this.#Complete(progressEvents);
|
|
47
47
|
}
|
|
48
48
|
#Error(events) {
|
|
49
|
-
const errorEvents = events.filter((e) => e.status ===
|
|
49
|
+
const errorEvents = events.filter((e) => e.status === unity_js_1.InstallerStatus.Error);
|
|
50
50
|
if (errorEvents.length === 0)
|
|
51
51
|
return;
|
|
52
|
-
this.emit(
|
|
52
|
+
this.emit(unity_js_1.InstallerEventType.Error, errorEvents);
|
|
53
53
|
}
|
|
54
54
|
#Complete(events) {
|
|
55
|
-
const installed = events.filter((e) => e.status ===
|
|
55
|
+
const installed = events.filter((e) => e.status === unity_js_1.InstallerStatus.Installed);
|
|
56
56
|
if (installed.length > 0 && installed.length === events.length) {
|
|
57
|
-
this.emit(
|
|
57
|
+
this.emit(unity_js_1.InstallerEventType.Completed, installed);
|
|
58
58
|
}
|
|
59
59
|
}
|
|
60
60
|
Cancel() {
|
|
@@ -62,7 +62,7 @@ class UnityHubInstallerEvent extends events_1.EventEmitter {
|
|
|
62
62
|
this.#Cancelled([]);
|
|
63
63
|
}
|
|
64
64
|
#Cancelled(event) {
|
|
65
|
-
this.emit(
|
|
65
|
+
this.emit(unity_js_1.InstallerEventType.Cancelled, event);
|
|
66
66
|
}
|
|
67
67
|
#updateModuleTracker(events) {
|
|
68
68
|
for (const event of events) {
|
|
@@ -1,44 +1,114 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
3
|
exports.UnityHubEventParser = void 0;
|
|
4
|
-
const
|
|
4
|
+
const index_js_1 = require("./patterns/index.js");
|
|
5
5
|
class UnityHubEventParser {
|
|
6
|
-
static
|
|
6
|
+
static patternRegistry;
|
|
7
|
+
static statusNormalizer;
|
|
8
|
+
static config = {
|
|
9
|
+
locale: "en",
|
|
10
|
+
logUnknownStatuses: true,
|
|
11
|
+
minConfidence: 30,
|
|
12
|
+
useFallbackPatterns: true,
|
|
13
|
+
};
|
|
14
|
+
static initialize() {
|
|
15
|
+
if (this.patternRegistry) {
|
|
16
|
+
return;
|
|
17
|
+
}
|
|
18
|
+
this.statusNormalizer = new index_js_1.StatusNormalizer();
|
|
19
|
+
this.patternRegistry = new index_js_1.PatternRegistry();
|
|
20
|
+
this.patternRegistry.register(new index_js_1.ErrorPattern(this.config.locale));
|
|
21
|
+
this.patternRegistry.register(new index_js_1.BracketModulePattern(this.statusNormalizer, this.config.locale));
|
|
22
|
+
if (this.config.useFallbackPatterns) {
|
|
23
|
+
this.patternRegistry.register(new index_js_1.FallbackPattern(this.statusNormalizer, this.config.locale));
|
|
24
|
+
}
|
|
25
|
+
}
|
|
7
26
|
static parseUnityHubEvent(event) {
|
|
27
|
+
this.initialize();
|
|
28
|
+
const result = this.parseWithDetails(event);
|
|
29
|
+
return result.events;
|
|
30
|
+
}
|
|
31
|
+
static parseWithDetails(event) {
|
|
32
|
+
this.initialize();
|
|
8
33
|
const events = [];
|
|
9
|
-
const
|
|
34
|
+
const unparsedLines = [];
|
|
35
|
+
const lines = event.split(/\r?\n/);
|
|
10
36
|
for (const line of lines) {
|
|
11
|
-
const
|
|
12
|
-
if (
|
|
13
|
-
events.push(errorLine);
|
|
37
|
+
const trimmedLine = line.trim();
|
|
38
|
+
if (!trimmedLine) {
|
|
14
39
|
continue;
|
|
15
40
|
}
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
for (const line of lines) {
|
|
19
|
-
const match = line.match(pattern);
|
|
20
|
-
if (match?.groups) {
|
|
21
|
-
const { module, status, progress } = match.groups;
|
|
41
|
+
const match = this.patternRegistry.match(trimmedLine, this.config.locale, this.config.minConfidence);
|
|
42
|
+
if (match) {
|
|
22
43
|
events.push({
|
|
23
|
-
module: module
|
|
24
|
-
status: status
|
|
25
|
-
progress: progress
|
|
44
|
+
module: match.module,
|
|
45
|
+
status: match.status,
|
|
46
|
+
progress: match.progress,
|
|
47
|
+
error: match.error,
|
|
26
48
|
});
|
|
27
49
|
}
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
if (pattern.test(line)) {
|
|
34
|
-
return {
|
|
35
|
-
module: "UnityHub",
|
|
36
|
-
status: unity_ts_1.InstallerStatus.Error,
|
|
37
|
-
error: line.trim(),
|
|
38
|
-
};
|
|
50
|
+
else {
|
|
51
|
+
unparsedLines.push(trimmedLine);
|
|
52
|
+
if (this.config.logUnknownStatuses) {
|
|
53
|
+
console.debug(`UnityHubEventParser: Could not parse line: "${trimmedLine}"`);
|
|
54
|
+
}
|
|
39
55
|
}
|
|
40
56
|
}
|
|
41
|
-
return
|
|
57
|
+
return {
|
|
58
|
+
events,
|
|
59
|
+
unknownStatuses: this.statusNormalizer.getUnknownStatuses(),
|
|
60
|
+
unparsedLines,
|
|
61
|
+
};
|
|
62
|
+
}
|
|
63
|
+
static setLocale(locale) {
|
|
64
|
+
this.config.locale = locale;
|
|
65
|
+
if (this.patternRegistry) {
|
|
66
|
+
this.patternRegistry.clear();
|
|
67
|
+
this.initialize();
|
|
68
|
+
}
|
|
69
|
+
}
|
|
70
|
+
static getLocale() {
|
|
71
|
+
return this.config.locale;
|
|
72
|
+
}
|
|
73
|
+
static registerCustomPattern(pattern) {
|
|
74
|
+
this.initialize();
|
|
75
|
+
this.patternRegistry.register(pattern);
|
|
76
|
+
}
|
|
77
|
+
static addStatusNormalization(statusText, status, locale) {
|
|
78
|
+
this.initialize();
|
|
79
|
+
this.statusNormalizer.addNormalization({ text: statusText, status, locale });
|
|
80
|
+
}
|
|
81
|
+
static getUnknownStatuses() {
|
|
82
|
+
this.initialize();
|
|
83
|
+
return this.statusNormalizer.getUnknownStatuses();
|
|
84
|
+
}
|
|
85
|
+
static clearUnknownStatuses() {
|
|
86
|
+
this.initialize();
|
|
87
|
+
this.statusNormalizer.clearUnknownStatuses();
|
|
88
|
+
}
|
|
89
|
+
static configure(config) {
|
|
90
|
+
this.config = { ...this.config, ...config };
|
|
91
|
+
if (config.locale && this.patternRegistry) {
|
|
92
|
+
this.patternRegistry.clear();
|
|
93
|
+
this.initialize();
|
|
94
|
+
}
|
|
95
|
+
}
|
|
96
|
+
static getConfig() {
|
|
97
|
+
return { ...this.config };
|
|
98
|
+
}
|
|
99
|
+
static reset() {
|
|
100
|
+
this.patternRegistry = undefined;
|
|
101
|
+
this.statusNormalizer = undefined;
|
|
102
|
+
this.config = {
|
|
103
|
+
locale: "en",
|
|
104
|
+
logUnknownStatuses: true,
|
|
105
|
+
minConfidence: 30,
|
|
106
|
+
useFallbackPatterns: true,
|
|
107
|
+
};
|
|
108
|
+
}
|
|
109
|
+
static getPatternNames() {
|
|
110
|
+
this.initialize();
|
|
111
|
+
return this.patternRegistry.getPatternNames();
|
|
42
112
|
}
|
|
43
113
|
}
|
|
44
114
|
exports.UnityHubEventParser = UnityHubEventParser;
|
|
@@ -0,0 +1,57 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.BracketModulePattern = void 0;
|
|
4
|
+
const unity_js_1 = require("../../../types/unity.js");
|
|
5
|
+
class BracketModulePattern {
|
|
6
|
+
name = "BracketModulePattern";
|
|
7
|
+
priority = 80;
|
|
8
|
+
locale;
|
|
9
|
+
statusNormalizer;
|
|
10
|
+
pattern = /^\s*[\[\(]([^\]\)]+)[\]\)]\s+(.+?)(?:\s+(\d+(?:\.\d+)?)\s*%)?\.{0,3}\s*$/;
|
|
11
|
+
constructor(statusNormalizer, locale) {
|
|
12
|
+
this.statusNormalizer = statusNormalizer;
|
|
13
|
+
this.locale = locale;
|
|
14
|
+
}
|
|
15
|
+
match(line, locale) {
|
|
16
|
+
const trimmedLine = line.trim();
|
|
17
|
+
if (!trimmedLine) {
|
|
18
|
+
return null;
|
|
19
|
+
}
|
|
20
|
+
const match = trimmedLine.match(this.pattern);
|
|
21
|
+
if (!match) {
|
|
22
|
+
return null;
|
|
23
|
+
}
|
|
24
|
+
const [, moduleName, statusText, progressStr] = match;
|
|
25
|
+
if (!moduleName || !statusText) {
|
|
26
|
+
return null;
|
|
27
|
+
}
|
|
28
|
+
const effectiveLocale = locale || this.locale;
|
|
29
|
+
const normalizedStatus = this.statusNormalizer.normalize(statusText, effectiveLocale);
|
|
30
|
+
if (!normalizedStatus) {
|
|
31
|
+
return {
|
|
32
|
+
module: moduleName.trim(),
|
|
33
|
+
status: statusText.trim(),
|
|
34
|
+
progress: progressStr ? parseFloat(progressStr) : null,
|
|
35
|
+
confidence: 40,
|
|
36
|
+
};
|
|
37
|
+
}
|
|
38
|
+
let progress = null;
|
|
39
|
+
if (progressStr) {
|
|
40
|
+
const parsed = parseFloat(progressStr);
|
|
41
|
+
if (!isNaN(parsed) && parsed >= 0 && parsed <= 100) {
|
|
42
|
+
progress = parsed;
|
|
43
|
+
}
|
|
44
|
+
}
|
|
45
|
+
else if (normalizedStatus === unity_js_1.InstallerStatus.Downloading ||
|
|
46
|
+
normalizedStatus === unity_js_1.InstallerStatus.Installing) {
|
|
47
|
+
progress = 0;
|
|
48
|
+
}
|
|
49
|
+
return {
|
|
50
|
+
module: moduleName.trim(),
|
|
51
|
+
status: normalizedStatus,
|
|
52
|
+
progress,
|
|
53
|
+
confidence: 85,
|
|
54
|
+
};
|
|
55
|
+
}
|
|
56
|
+
}
|
|
57
|
+
exports.BracketModulePattern = BracketModulePattern;
|
|
@@ -0,0 +1,99 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.ErrorPattern = void 0;
|
|
4
|
+
const unity_js_1 = require("../../../types/unity.js");
|
|
5
|
+
var ErrorSeverity;
|
|
6
|
+
(function (ErrorSeverity) {
|
|
7
|
+
ErrorSeverity["Critical"] = "critical";
|
|
8
|
+
ErrorSeverity["Error"] = "error";
|
|
9
|
+
ErrorSeverity["Warning"] = "warning";
|
|
10
|
+
})(ErrorSeverity || (ErrorSeverity = {}));
|
|
11
|
+
class ErrorPattern {
|
|
12
|
+
name = "ErrorPattern";
|
|
13
|
+
priority = 90;
|
|
14
|
+
locale;
|
|
15
|
+
criticalPatterns = [
|
|
16
|
+
/\b(?:fatal|critical|emergency)\b/i,
|
|
17
|
+
/\bexception\b/i,
|
|
18
|
+
/\bstack\s*trace\b/i,
|
|
19
|
+
/\bcrash(?:ed)?\b/i,
|
|
20
|
+
];
|
|
21
|
+
errorPatterns = [
|
|
22
|
+
/\berror\s*:/i,
|
|
23
|
+
/\berror\b/i,
|
|
24
|
+
/\bfailed\b/i,
|
|
25
|
+
/\bcannot\b/i,
|
|
26
|
+
/\bunable\s+to\b/i,
|
|
27
|
+
/\bcould\s+not\b/i,
|
|
28
|
+
/\bfailure\b/i,
|
|
29
|
+
];
|
|
30
|
+
warningPatterns = [/\bwarning\s*:/i, /\bwarning\b/i, /\bcaution\b/i];
|
|
31
|
+
localizedErrorPatterns = new Map([
|
|
32
|
+
["ja", [/エラー/, /失敗/, /例外/, /できません/]],
|
|
33
|
+
["de", [/fehler/i, /fehlgeschlagen/i, /ausnahme/i, /kann\s+nicht/i]],
|
|
34
|
+
["fr", [/erreur/i, /échec/i, /échoué/i, /exception/i, /impossible/i]],
|
|
35
|
+
["es", [/error/i, /fallo/i, /fallido/i, /excepción/i, /no\s+se\s+puede/i]],
|
|
36
|
+
["zh-Hans", [/错误/, /失败/, /异常/, /无法/]],
|
|
37
|
+
["zh-Hant", [/錯誤/, /失敗/, /異常/, /無法/]],
|
|
38
|
+
["ko", [/오류/, /실패/, /예외/, /할\s*수\s*없습니다/]],
|
|
39
|
+
]);
|
|
40
|
+
constructor(locale) {
|
|
41
|
+
this.locale = locale;
|
|
42
|
+
}
|
|
43
|
+
match(line, locale) {
|
|
44
|
+
const trimmedLine = line.trim();
|
|
45
|
+
if (!trimmedLine) {
|
|
46
|
+
return null;
|
|
47
|
+
}
|
|
48
|
+
const effectiveLocale = locale || this.locale;
|
|
49
|
+
if (this.matchesAnyPattern(trimmedLine, this.criticalPatterns)) {
|
|
50
|
+
return this.createErrorMatch(trimmedLine, ErrorSeverity.Critical, 95);
|
|
51
|
+
}
|
|
52
|
+
if (this.matchesAnyPattern(trimmedLine, this.errorPatterns)) {
|
|
53
|
+
return this.createErrorMatch(trimmedLine, ErrorSeverity.Error, 90);
|
|
54
|
+
}
|
|
55
|
+
if (effectiveLocale && this.localizedErrorPatterns.has(effectiveLocale)) {
|
|
56
|
+
const patterns = this.localizedErrorPatterns.get(effectiveLocale);
|
|
57
|
+
if (this.matchesAnyPattern(trimmedLine, patterns)) {
|
|
58
|
+
return this.createErrorMatch(trimmedLine, ErrorSeverity.Error, 88);
|
|
59
|
+
}
|
|
60
|
+
}
|
|
61
|
+
if (this.matchesAnyPattern(trimmedLine, this.warningPatterns)) {
|
|
62
|
+
return this.createErrorMatch(trimmedLine, ErrorSeverity.Warning, 70);
|
|
63
|
+
}
|
|
64
|
+
return null;
|
|
65
|
+
}
|
|
66
|
+
matchesAnyPattern(line, patterns) {
|
|
67
|
+
return patterns.some((pattern) => pattern.test(line));
|
|
68
|
+
}
|
|
69
|
+
createErrorMatch(line, severity, confidence) {
|
|
70
|
+
const bracketMatch = line.match(/^\s*[\[\(]([^\]\)]+)[\]\)]/);
|
|
71
|
+
const module = bracketMatch ? bracketMatch[1].trim() : "UnityHub";
|
|
72
|
+
return {
|
|
73
|
+
module,
|
|
74
|
+
status: unity_js_1.InstallerStatus.Error,
|
|
75
|
+
error: line.trim(),
|
|
76
|
+
confidence,
|
|
77
|
+
};
|
|
78
|
+
}
|
|
79
|
+
addErrorPattern(pattern, severity = ErrorSeverity.Error) {
|
|
80
|
+
switch (severity) {
|
|
81
|
+
case ErrorSeverity.Critical:
|
|
82
|
+
this.criticalPatterns.push(pattern);
|
|
83
|
+
break;
|
|
84
|
+
case ErrorSeverity.Error:
|
|
85
|
+
this.errorPatterns.push(pattern);
|
|
86
|
+
break;
|
|
87
|
+
case ErrorSeverity.Warning:
|
|
88
|
+
this.warningPatterns.push(pattern);
|
|
89
|
+
break;
|
|
90
|
+
}
|
|
91
|
+
}
|
|
92
|
+
addLocalizedPatterns(locale, patterns) {
|
|
93
|
+
if (!this.localizedErrorPatterns.has(locale)) {
|
|
94
|
+
this.localizedErrorPatterns.set(locale, []);
|
|
95
|
+
}
|
|
96
|
+
this.localizedErrorPatterns.get(locale).push(...patterns);
|
|
97
|
+
}
|
|
98
|
+
}
|
|
99
|
+
exports.ErrorPattern = ErrorPattern;
|
|
@@ -0,0 +1,63 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.FallbackPattern = void 0;
|
|
4
|
+
class FallbackPattern {
|
|
5
|
+
name = "FallbackPattern";
|
|
6
|
+
priority = 20;
|
|
7
|
+
locale;
|
|
8
|
+
statusNormalizer;
|
|
9
|
+
constructor(statusNormalizer, locale) {
|
|
10
|
+
this.statusNormalizer = statusNormalizer;
|
|
11
|
+
this.locale = locale;
|
|
12
|
+
}
|
|
13
|
+
match(line, locale) {
|
|
14
|
+
const trimmedLine = line.trim();
|
|
15
|
+
if (!trimmedLine) {
|
|
16
|
+
return null;
|
|
17
|
+
}
|
|
18
|
+
const effectiveLocale = locale || this.locale;
|
|
19
|
+
const progressMatch = trimmedLine.match(/(\d+(?:\.\d+)?)\s*%/);
|
|
20
|
+
const progress = progressMatch ? parseFloat(progressMatch[1]) : null;
|
|
21
|
+
const statusMatch = this.findStatusInLine(trimmedLine, effectiveLocale);
|
|
22
|
+
if (!statusMatch) {
|
|
23
|
+
return null;
|
|
24
|
+
}
|
|
25
|
+
const moduleName = this.extractModuleName(trimmedLine, statusMatch.statusText);
|
|
26
|
+
return {
|
|
27
|
+
module: moduleName || "Unknown",
|
|
28
|
+
status: statusMatch.status,
|
|
29
|
+
progress,
|
|
30
|
+
confidence: 30,
|
|
31
|
+
};
|
|
32
|
+
}
|
|
33
|
+
findStatusInLine(line, locale) {
|
|
34
|
+
const normalizations = this.statusNormalizer.getNormalizationsForLocale(locale);
|
|
35
|
+
const sortedNormalizations = Array.from(normalizations.entries()).sort((a, b) => b[0].length - a[0].length);
|
|
36
|
+
for (const [statusText, status] of sortedNormalizations) {
|
|
37
|
+
const pattern = new RegExp(`\\b${this.escapeRegex(statusText)}\\b`, "i");
|
|
38
|
+
if (pattern.test(line)) {
|
|
39
|
+
return { status, statusText };
|
|
40
|
+
}
|
|
41
|
+
}
|
|
42
|
+
return null;
|
|
43
|
+
}
|
|
44
|
+
extractModuleName(line, statusText) {
|
|
45
|
+
let cleanLine = line.replace(new RegExp(`\\b${this.escapeRegex(statusText)}\\b`, "gi"), "");
|
|
46
|
+
cleanLine = cleanLine.replace(/\d+(?:\.\d+)?\s*%/, "");
|
|
47
|
+
cleanLine = cleanLine.replace(/[:\-\[\]\(\)]/g, " ");
|
|
48
|
+
cleanLine = cleanLine.trim();
|
|
49
|
+
const words = cleanLine.split(/\s+/).filter((w) => w.length > 0);
|
|
50
|
+
if (words.length === 0) {
|
|
51
|
+
return null;
|
|
52
|
+
}
|
|
53
|
+
const capitalizedWords = words.filter((w) => /^[A-Z]/.test(w));
|
|
54
|
+
if (capitalizedWords.length > 0) {
|
|
55
|
+
return capitalizedWords.join(" ");
|
|
56
|
+
}
|
|
57
|
+
return words.join(" ");
|
|
58
|
+
}
|
|
59
|
+
escapeRegex(str) {
|
|
60
|
+
return str.replace(/[.*+?^${}()|[\]\\]/g, "\\$&");
|
|
61
|
+
}
|
|
62
|
+
}
|
|
63
|
+
exports.FallbackPattern = FallbackPattern;
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.FallbackPattern = exports.ErrorPattern = exports.BracketModulePattern = void 0;
|
|
4
|
+
var bracketModulePattern_js_1 = require("./bracketModulePattern.js");
|
|
5
|
+
Object.defineProperty(exports, "BracketModulePattern", { enumerable: true, get: function () { return bracketModulePattern_js_1.BracketModulePattern; } });
|
|
6
|
+
var errorPattern_js_1 = require("./errorPattern.js");
|
|
7
|
+
Object.defineProperty(exports, "ErrorPattern", { enumerable: true, get: function () { return errorPattern_js_1.ErrorPattern; } });
|
|
8
|
+
var fallbackPattern_js_1 = require("./fallbackPattern.js");
|
|
9
|
+
Object.defineProperty(exports, "FallbackPattern", { enumerable: true, get: function () { return fallbackPattern_js_1.FallbackPattern; } });
|
|
@@ -0,0 +1,23 @@
|
|
|
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 __exportStar = (this && this.__exportStar) || function(m, exports) {
|
|
14
|
+
for (var p in m) if (p !== "default" && !Object.prototype.hasOwnProperty.call(exports, p)) __createBinding(exports, m, p);
|
|
15
|
+
};
|
|
16
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
17
|
+
exports.PatternRegistry = exports.StatusNormalizer = void 0;
|
|
18
|
+
__exportStar(require("./types.js"), exports);
|
|
19
|
+
var statusNormalizer_js_1 = require("./statusNormalizer.js");
|
|
20
|
+
Object.defineProperty(exports, "StatusNormalizer", { enumerable: true, get: function () { return statusNormalizer_js_1.StatusNormalizer; } });
|
|
21
|
+
var patternRegistry_js_1 = require("./patternRegistry.js");
|
|
22
|
+
Object.defineProperty(exports, "PatternRegistry", { enumerable: true, get: function () { return patternRegistry_js_1.PatternRegistry; } });
|
|
23
|
+
__exportStar(require("./implementations/index.js"), exports);
|