Skip to content

Commit 4c8ecc1

Browse files
authored
refactor: migrate outputs and conditions to TS (quisquous#2496)
1 parent 0f5ecdd commit 4c8ecc1

File tree

148 files changed

+225
-228
lines changed

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

148 files changed

+225
-228
lines changed

.editorconfig

+1-1
Original file line numberDiff line numberDiff line change
@@ -10,7 +10,7 @@ root = true
1010
insert_final_newline = true
1111
indent_style = space
1212

13-
[*{.js,.json}]
13+
[*.{js,json,cjs,mjs,ts}]
1414
indent_size = 2
1515

1616
[*.py]

.mocharc.cjs

+16-15
Original file line numberDiff line numberDiff line change
@@ -1,19 +1,20 @@
11
'use strict';
22

33
module.exports = {
4-
recursive: true,
5-
colors: true,
6-
exclude: [
7-
// Run via test_raidboss_data.js.
8-
'test/helper/*',
9-
],
10-
loader: [
11-
'ts-node/esm',
12-
],
13-
extension: [
14-
'.js',
15-
'.cjs',
16-
'.mjs',
17-
'.ts',
18-
],
4+
recursive: true,
5+
colors: true,
6+
exclude: [
7+
// Run via test_raidboss_data.js.
8+
'test/helper/*',
9+
],
10+
loader: [
11+
'ts-node/esm',
12+
],
13+
extension: [
14+
'.js',
15+
'.cjs',
16+
'.mjs',
17+
'.ts',
18+
'.d.ts',
19+
],
1920
};

docs/CactbotCustomization.md

+2-2
Original file line numberDiff line numberDiff line change
@@ -431,12 +431,12 @@ User files are `eval`'d in JavaScript,
431431
and thus cannot `import` in the same way that built-in trigger files do.
432432
User javascript files have access to the following globals:
433433

434-
- [Conditions](../resources/conditions.js)
434+
- [Conditions](../resources/conditions.ts)
435435
- [ContentType](../resources/content_type.js)
436436
- [NetRegexes](../resources/netregexes.js)
437437
- [Regexes](../resources/regexes.js)
438438
- [Responses](../resources/responses.js)
439-
- [Outputs](../resources/outputs.js)
439+
- [Outputs](../resources/outputs.ts)
440440
- [Util](../resources/common.js)
441441
- [ZoneId](../resources/zone_id.js)
442442
- [ZoneInfo](../resources/zone_info.js)

docs/RaidbossGuide.md

+2-2
Original file line numberDiff line numberDiff line change
@@ -181,7 +181,7 @@ We're not there yet, but there's always someday.)
181181
Activates the trigger if the function returns `true`.
182182
If it does not return `true`, nothing is shown/sounded/run.
183183
If multiple functions are present on the trigger, this has first priority to run.
184-
(Pre-made "canned" conditions are available within [conditions.js](https://github.com/quisquous/cactbot/blob/main/resources/conditions.js).
184+
(Pre-made "canned" conditions are available within [conditions.ts](https://github.com/quisquous/cactbot/blob/main/resources/conditions.ts).
185185
Generally speaking it's best to use one of these if it fits the situation.)
186186

187187
**preRun: function(data, matches, output)**
@@ -386,7 +386,7 @@ Use of these helpers makes automated testing significantly easier,
386386
and allows humans to catch errors and inconsistencies more easily when reviewing pull requests.
387387

388388
Currently, three separate elements have pre-made structures defined:
389-
[Condition](https://github.com/quisquous/cactbot/blob/main/resources/conditions.js), [Regex](https://github.com/quisquous/cactbot/blob/main/resources/regexes.js), and [Response](https://github.com/quisquous/cactbot/blob/main/resources/responses.js).
389+
[Condition](https://github.com/quisquous/cactbot/blob/main/resources/conditions.ts), [Regex](https://github.com/quisquous/cactbot/blob/main/resources/regexes.js), and [Response](https://github.com/quisquous/cactbot/blob/main/resources/responses.js).
390390
`Condition` functions take no arguments. Almost all `Response` functions take one optional argument, `severity`,
391391
used to determine what level of popup text to display to the user when the trigger activates.
392392
`Regex` functions can take several arguments [(`gainsEffect()` is a good example)](https://github.com/quisquous/cactbot/blob/dcdf3ee4cd1b6d5bdfb9a8052cc9e4c9b10844d8/resources/regexes.js#L176) depending on which log line is being matched against,

docs/zh-CN/RaidbossGuide.md

+2-2
Original file line numberDiff line numberDiff line change
@@ -106,7 +106,7 @@
106106

107107
(理论上,以后我们可能不再需要独立的语言特定正则表达式, 而是采用 `timelineReplace` 对象自动地替换这些正则表达式。 我们还没有确定具体的实现方式,但条条大路通罗马。)
108108

109-
**condition: function(data, matches)** 当函数返回 `true` 时激活该触发器。 若返回的不是 `true`,则当前触发器不会有任何响应。 不管触发器对象里定义了多少函数,该函数总是第一个执行。 ([conditions.js](https://github.com/quisquous/cactbot/blob/main/resources/conditions.js) 中定义了一部分高阶条件函数。 一般情况下,如果与情境相符,使用这些函数是最佳解决方案。)
109+
**condition: function(data, matches)** 当函数返回 `true` 时激活该触发器。 若返回的不是 `true`,则当前触发器不会有任何响应。 不管触发器对象里定义了多少函数,该函数总是第一个执行。 ([conditions.ts](https://github.com/quisquous/cactbot/blob/main/resources/conditions.ts) 中定义了一部分高阶条件函数。 一般情况下,如果与情境相符,使用这些函数是最佳解决方案。)
110110

111111
**preRun: function(data, matches)** 当触发器被激活时,该函数会在条件判定成功后立刻执行。
112112

@@ -180,7 +180,7 @@
180180

181181
为统一触发器构造,以及减轻翻译时的手动负担, cactbot的触发器元素广泛运用了高阶函数。 诸如此类的工具函数使自动化测试更为简单, 并让人们在审查拉取更改时更容易捕获错误及不一致。
182182

183-
目前我们对于元素的独立预定义结构有3种: [Condition](https://github.com/quisquous/cactbot/blob/main/resources/conditions.js)[Regex](https://github.com/quisquous/cactbot/blob/main/resources/regexes.js) 以及 [Response](https://github.com/quisquous/cactbot/blob/main/resources/responses.js)`Condition` 函数不接受参数。 几乎所有的 `Response` 函数都接受 `severity`参数, 用于定义触发器被激活时输出的警报文本的等级。 `Regex` 函数根据匹配的日志行,接受若干参数 [(例如 `gainsEffect()`)](https://github.com/quisquous/cactbot/blob/dcdf3ee4cd1b6d5bdfb9a8052cc9e4c9b10844d8/resources/regexes.js#L176), 不管哪种日志行一般都接受 `source` 属性 (技能的咏唱者/释放者的名称), `id` 属性 (十六进制的技能ID,例如 `2478`), 以及正则表达式匹配时是否启用捕获组 (`capture: false`)。 `Regex` 函数默认开启捕获组,但按惯例应当仅对依赖捕获数据的触发器开启捕获。
183+
目前我们对于元素的独立预定义结构有3种: [Condition](https://github.com/quisquous/cactbot/blob/main/resources/conditions.ts)[Regex](https://github.com/quisquous/cactbot/blob/main/resources/regexes.js) 以及 [Response](https://github.com/quisquous/cactbot/blob/main/resources/responses.js)`Condition` 函数不接受参数。 几乎所有的 `Response` 函数都接受 `severity`参数, 用于定义触发器被激活时输出的警报文本的等级。 `Regex` 函数根据匹配的日志行,接受若干参数 [(例如 `gainsEffect()`)](https://github.com/quisquous/cactbot/blob/dcdf3ee4cd1b6d5bdfb9a8052cc9e4c9b10844d8/resources/regexes.js#L176), 不管哪种日志行一般都接受 `source` 属性 (技能的咏唱者/释放者的名称), `id` 属性 (十六进制的技能ID,例如 `2478`), 以及正则表达式匹配时是否启用捕获组 (`capture: false`)。 `Regex` 函数默认开启捕获组,但按惯例应当仅对依赖捕获数据的触发器开启捕获。
184184

185185
以下是使用了这三种元素的示例触发器:
186186

resources/conditions.js

-21
This file was deleted.

resources/conditions.ts

+24
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,24 @@
1+
// For consistency with Responses, Conditions
2+
// are also functions.
3+
4+
5+
import { Data } from '../types/data';
6+
import { Matches } from '../types/trigger';
7+
8+
export default {
9+
targetIsYou(): (data: Data, matches: Matches) => boolean {
10+
return (data: Data, matches: Matches) => data.me === matches.target;
11+
},
12+
targetIsNotYou(): (data: Data, matches: Matches) => boolean {
13+
return (data: Data, matches: Matches) => data.me !== matches.target;
14+
},
15+
caresAboutAOE(): (data: Data) => boolean {
16+
return (data: Data) => data.role === 'tank' || data.role === 'healer' || data.CanAddle() || data.job === 'BLU';
17+
},
18+
caresAboutMagical(): (data: Data) => boolean {
19+
return (data: Data) => data.role === 'tank' || data.role === 'healer' || data.CanAddle() || data.job === 'BLU';
20+
},
21+
caresAboutPhysical(): (data: Data) => boolean {
22+
return (data: Data) => data.role === 'tank' || data.role === 'healer' || data.CanFeint() || data.job === 'BLU';
23+
},
24+
};

resources/outputs.js renamed to resources/outputs.ts

+4-32
Original file line numberDiff line numberDiff line change
@@ -1,35 +1,8 @@
1-
// TODO: make this a static class with static members
2-
// this requires babel-eslint or being patient.
3-
4-
// Throw exceptions on invalid property names to catch easy typos.
5-
class ThrowOnInvalidProxy {
6-
constructor(obj) {
7-
this.obj = obj;
8-
9-
if ('toJSON' in obj)
10-
throw new Error('Cannot have toJSON property.');
11-
12-
return new Proxy(this, {
13-
set(target, property, value) {
14-
throw new Error('Cannot set readonly object.');
15-
},
16-
17-
get(target, name) {
18-
if (name === 'toJSON')
19-
return JSON.stringify(obj);
20-
21-
if (name in target.obj)
22-
return target.obj[name];
23-
24-
throw new Error(`Unknown property ${name}`);
25-
},
26-
});
27-
}
28-
}
1+
import { TranslatableText } from '../types/trigger';
292

303
// Output strings for now require a field for every language, so this is a
314
// helper function to generate one for literal numbers.
32-
const numberToOutputString = (n) => {
5+
const numberToOutputString = function(n: number): TranslatableText {
336
const str = n.toString();
347
return {
358
en: str,
@@ -47,7 +20,7 @@ const numberToOutputString = (n) => {
4720
// * use OnTarget suffix for things with `${name}`
4821
// * any other parameters (of which there are none, currently) should use consistent suffixes.
4922
// * the value of each property should be a single object with localized keys
50-
const Outputs = new ThrowOnInvalidProxy({
23+
export default {
5124
aoe: {
5225
en: 'aoe',
5326
de: 'AoE',
@@ -741,6 +714,5 @@ const Outputs = new ThrowOnInvalidProxy({
741714
num7: numberToOutputString(7),
742715
num8: numberToOutputString(8),
743716
num9: numberToOutputString(9),
744-
});
717+
} as const;
745718

746-
export default Outputs;

resources/responses.js

+1-1
Original file line numberDiff line numberDiff line change
@@ -18,7 +18,7 @@
1818
// function that sets outputStrings and returns an object without doing
1919
// anything with data or matches. See `responses_test.js`.
2020

21-
import Outputs from './outputs.js';
21+
import Outputs from './outputs.ts';
2222

2323
export const builtInResponseStr = 'cactbot-builtin-response';
2424

resources/user_config.js

+2-2
Original file line numberDiff line numberDiff line change
@@ -7,7 +7,7 @@ import './overlay_plugin_api.js';
77
// create a variable of the same name, the eval()'d code does not know
88
// about the import, and thus throws ReferenceErrors.
99
// Used by downstream eval
10-
import _Conditions from './conditions.js';
10+
import _Conditions from './conditions.ts';
1111
const Conditions = _Conditions;
1212
import _ContentType from './content_type.js';
1313
const ContentType = _ContentType;
@@ -17,7 +17,7 @@ import _Regexes from './regexes.js';
1717
const Regexes = _Regexes;
1818
import { Responses as _Responses } from './responses.js';
1919
const Responses = _Responses;
20-
import _Outputs from './outputs.js';
20+
import _Outputs from './outputs.ts';
2121
const Outputs = _Outputs;
2222
import _Util from './util.ts';
2323
const Util = _Util;

types/trigger.d.ts

+21
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,21 @@
1+
import { Lang } from './global';
2+
3+
export type Matches = {
4+
target?: string;
5+
[s: string]: string;
6+
}
7+
8+
9+
type TranslatableText = {
10+
[s in Lang]: string;
11+
};
12+
13+
14+
type TranslatedText = {
15+
en: string;
16+
de: string;
17+
fr: string;
18+
ja: string;
19+
cn: string;
20+
ko: string;
21+
};

ui/oopsyraidsy/data/05-shb/raid/e12s.js

+1-1
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
11
import NetRegexes from '../../../../../resources/netregexes.js';
2-
import Outputs from '../../../../../resources/outputs.js';
2+
import Outputs from '../../../../../resources/outputs.ts';
33
import ZoneId from '../../../../../resources/zone_id.js';
44

55
// TODO: add separate damageWarn-esque icon for damage downs?

ui/raidboss/data/02-arr/dungeon/haukke_manor.js

+1-1
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
import Conditions from '../../../../../resources/conditions.js';
1+
import Conditions from '../../../../../resources/conditions.ts';
22
import NetRegexes from '../../../../../resources/netregexes.js';
33
import { Responses } from '../../../../../resources/responses.js';
44
import ZoneId from '../../../../../resources/zone_id.js';

ui/raidboss/data/02-arr/raid/t1.js

+1-1
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
import Conditions from '../../../../../resources/conditions.js';
1+
import Conditions from '../../../../../resources/conditions.ts';
22
import NetRegexes from '../../../../../resources/netregexes.js';
33
import { Responses } from '../../../../../resources/responses.js';
44
import ZoneId from '../../../../../resources/zone_id.js';

ui/raidboss/data/02-arr/raid/t11.js

+1-1
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
import Conditions from '../../../../../resources/conditions.js';
1+
import Conditions from '../../../../../resources/conditions.ts';
22
import NetRegexes from '../../../../../resources/netregexes.js';
33
import Regexes from '../../../../../resources/regexes.js';
44
import { Responses } from '../../../../../resources/responses.js';

ui/raidboss/data/02-arr/raid/t12.js

+1-1
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
import Conditions from '../../../../../resources/conditions.js';
1+
import Conditions from '../../../../../resources/conditions.ts';
22
import NetRegexes from '../../../../../resources/netregexes.js';
33
import ZoneId from '../../../../../resources/zone_id.js';
44

ui/raidboss/data/02-arr/raid/t13.js

+1-1
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
import Conditions from '../../../../../resources/conditions.js';
1+
import Conditions from '../../../../../resources/conditions.ts';
22
import NetRegexes from '../../../../../resources/netregexes.js';
33
import { Responses } from '../../../../../resources/responses.js';
44
import ZoneId from '../../../../../resources/zone_id.js';

ui/raidboss/data/02-arr/raid/t2.js

+1-1
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
import Conditions from '../../../../../resources/conditions.js';
1+
import Conditions from '../../../../../resources/conditions.ts';
22
import NetRegexes from '../../../../../resources/netregexes.js';
33
import { Responses } from '../../../../../resources/responses.js';
44
import ZoneId from '../../../../../resources/zone_id.js';

ui/raidboss/data/02-arr/raid/t4.js

+1-1
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
import Conditions from '../../../../../resources/conditions.js';
1+
import Conditions from '../../../../../resources/conditions.ts';
22
import NetRegexes from '../../../../../resources/netregexes.js';
33
import ZoneId from '../../../../../resources/zone_id.js';
44

ui/raidboss/data/02-arr/raid/t6.js

+1-1
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
import Conditions from '../../../../../resources/conditions.js';
1+
import Conditions from '../../../../../resources/conditions.ts';
22
import NetRegexes from '../../../../../resources/netregexes.js';
33
import Regexes from '../../../../../resources/regexes.js';
44
import { Responses } from '../../../../../resources/responses.js';

ui/raidboss/data/02-arr/raid/t7.js

+1-1
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
import Conditions from '../../../../../resources/conditions.js';
1+
import Conditions from '../../../../../resources/conditions.ts';
22
import NetRegexes from '../../../../../resources/netregexes.js';
33
import Regexes from '../../../../../resources/regexes.js';
44
import { Responses } from '../../../../../resources/responses.js';

ui/raidboss/data/02-arr/raid/t9.js

+2-2
Original file line numberDiff line numberDiff line change
@@ -1,9 +1,9 @@
1-
import Conditions from '../../../../../resources/conditions.js';
1+
import Conditions from '../../../../../resources/conditions.ts';
22
import NetRegexes from '../../../../../resources/netregexes.js';
33
import Regexes from '../../../../../resources/regexes.js';
44
import { Responses } from '../../../../../resources/responses.js';
55
import ZoneId from '../../../../../resources/zone_id.js';
6-
import Outputs from '../../../../../resources/outputs.js';
6+
import Outputs from '../../../../../resources/outputs.ts';
77

88
const diveDirections = {
99
unknown: {

ui/raidboss/data/02-arr/trial/shiva-ex.js

+1-1
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
import Conditions from '../../../../../resources/conditions.js';
1+
import Conditions from '../../../../../resources/conditions.ts';
22
import NetRegexes from '../../../../../resources/netregexes.js';
33
import { Responses } from '../../../../../resources/responses.js';
44
import ZoneId from '../../../../../resources/zone_id.js';

ui/raidboss/data/02-arr/trial/shiva-hm.js

+1-1
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
import Conditions from '../../../../../resources/conditions.js';
1+
import Conditions from '../../../../../resources/conditions.ts';
22
import NetRegexes from '../../../../../resources/netregexes.js';
33
import { Responses } from '../../../../../resources/responses.js';
44
import ZoneId from '../../../../../resources/zone_id.js';

ui/raidboss/data/02-arr/trial/titan-ex.js

+1-1
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
import Conditions from '../../../../../resources/conditions.js';
1+
import Conditions from '../../../../../resources/conditions.ts';
22
import NetRegexes from '../../../../../resources/netregexes.js';
33
import { Responses } from '../../../../../resources/responses.js';
44
import ZoneId from '../../../../../resources/zone_id.js';

ui/raidboss/data/02-arr/trial/titan-hm.js

+1-1
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
import Conditions from '../../../../../resources/conditions.js';
1+
import Conditions from '../../../../../resources/conditions.ts';
22
import NetRegexes from '../../../../../resources/netregexes.js';
33
import { Responses } from '../../../../../resources/responses.js';
44
import ZoneId from '../../../../../resources/zone_id.js';

ui/raidboss/data/02-arr/trial/titan-nm.js

+1-1
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
import Conditions from '../../../../../resources/conditions.js';
1+
import Conditions from '../../../../../resources/conditions.ts';
22
import NetRegexes from '../../../../../resources/netregexes.js';
33
import { Responses } from '../../../../../resources/responses.js';
44
import ZoneId from '../../../../../resources/zone_id.js';

ui/raidboss/data/03-hw/alliance/dun_scaith.js

+1-1
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
import Conditions from '../../../../../resources/conditions.js';
1+
import Conditions from '../../../../../resources/conditions.ts';
22
import NetRegexes from '../../../../../resources/netregexes.js';
33
import { Responses } from '../../../../../resources/responses.js';
44
import ZoneId from '../../../../../resources/zone_id.js';

ui/raidboss/data/03-hw/alliance/weeping_city.js

+1-1
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
import Conditions from '../../../../../resources/conditions.js';
1+
import Conditions from '../../../../../resources/conditions.ts';
22
import NetRegexes from '../../../../../resources/netregexes.js';
33
import { Responses } from '../../../../../resources/responses.js';
44
import ZoneId from '../../../../../resources/zone_id.js';

ui/raidboss/data/03-hw/dungeon/aetherochemical_research_facility.js

+1-1
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
import Conditions from '../../../../../resources/conditions.js';
1+
import Conditions from '../../../../../resources/conditions.ts';
22
import NetRegexes from '../../../../../resources/netregexes.js';
33
import { Responses } from '../../../../../resources/responses.js';
44
import ZoneId from '../../../../../resources/zone_id.js';

ui/raidboss/data/03-hw/dungeon/fractal_continuum.js

+1-1
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
import Conditions from '../../../../../resources/conditions.js';
1+
import Conditions from '../../../../../resources/conditions.ts';
22
import NetRegexes from '../../../../../resources/netregexes.js';
33
import { Responses } from '../../../../../resources/responses.js';
44
import ZoneId from '../../../../../resources/zone_id.js';

ui/raidboss/data/03-hw/dungeon/gubal_library_hard.js

+1-1
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
import Conditions from '../../../../../resources/conditions.js';
1+
import Conditions from '../../../../../resources/conditions.ts';
22
import NetRegexes from '../../../../../resources/netregexes.js';
33
import { Responses } from '../../../../../resources/responses.js';
44
import ZoneId from '../../../../../resources/zone_id.js';

ui/raidboss/data/03-hw/dungeon/sohm_al.js

+1-1
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
import Conditions from '../../../../../resources/conditions.js';
1+
import Conditions from '../../../../../resources/conditions.ts';
22
import NetRegexes from '../../../../../resources/netregexes.js';
33
import { Responses } from '../../../../../resources/responses.js';
44
import ZoneId from '../../../../../resources/zone_id.js';

ui/raidboss/data/03-hw/dungeon/sohm_al_hard.js

+1-1
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
import Conditions from '../../../../../resources/conditions.js';
1+
import Conditions from '../../../../../resources/conditions.ts';
22
import NetRegexes from '../../../../../resources/netregexes.js';
33
import { Responses } from '../../../../../resources/responses.js';
44
import ZoneId from '../../../../../resources/zone_id.js';

ui/raidboss/data/03-hw/dungeon/the_vault.js

+1-1
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
import Conditions from '../../../../../resources/conditions.js';
1+
import Conditions from '../../../../../resources/conditions.ts';
22
import NetRegexes from '../../../../../resources/netregexes.js';
33
import { Responses } from '../../../../../resources/responses.js';
44
import ZoneId from '../../../../../resources/zone_id.js';

0 commit comments

Comments
 (0)