@bct-app/game-engine 0.1.18 → 0.1.20
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/dist/index.d.mts +149 -2
- package/dist/index.d.ts +149 -2
- package/dist/index.js +681 -36
- package/dist/index.mjs +665 -36
- package/package.json +2 -2
package/dist/index.d.mts
CHANGED
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { TPlayer, TOperation, TAbility, TPopulatedCharacter, TTimeline, TTriggerPhase, TEffect, TTargetRef, TPlayerReminder, TReminder } from '@bct-app/game-model';
|
|
1
|
+
import { TPlayer, TOperation, TAbility, TPopulatedCharacter, TTimeline, TTriggerPhase, TEffect, TTargetRef, TPlayerReminder, TReminder, TTriggerAction, TDslExpr, TDslPath, TDslCountOperator, TDslOperator } from '@bct-app/game-model';
|
|
2
2
|
|
|
3
3
|
type TLifetimeCustomResolver = (input: {
|
|
4
4
|
key: string;
|
|
@@ -56,6 +56,15 @@ type TDerivedContext = {
|
|
|
56
56
|
nominator: number;
|
|
57
57
|
nominee: number;
|
|
58
58
|
}[];
|
|
59
|
+
yesterdayNominations: {
|
|
60
|
+
nominator: number;
|
|
61
|
+
nominee: number;
|
|
62
|
+
}[];
|
|
63
|
+
allNominations: {
|
|
64
|
+
nominator: number;
|
|
65
|
+
nominee: number;
|
|
66
|
+
turn: number;
|
|
67
|
+
}[];
|
|
59
68
|
effectorSeat: number;
|
|
60
69
|
effector: TPlayer | undefined;
|
|
61
70
|
abilityId: string;
|
|
@@ -117,4 +126,142 @@ declare const isReminder: (value: unknown) => value is TReminder;
|
|
|
117
126
|
*/
|
|
118
127
|
declare const isPlayerReminderArray: (value: unknown) => value is TPlayerReminder[];
|
|
119
128
|
|
|
120
|
-
|
|
129
|
+
declare const ACTIVE_TRIGGER_ACTIONS: Set<TTriggerAction>;
|
|
130
|
+
declare const isActiveTriggerAction: (action: TTriggerAction) => boolean;
|
|
131
|
+
|
|
132
|
+
type TDslPlayer = TPlayer & {
|
|
133
|
+
characterKind: string | undefined;
|
|
134
|
+
reminderMarks: string[];
|
|
135
|
+
effectiveAlive: boolean;
|
|
136
|
+
diedThisTurn: boolean;
|
|
137
|
+
wasExecuted: boolean;
|
|
138
|
+
wasExecutedToday: boolean;
|
|
139
|
+
};
|
|
140
|
+
type TDslNomination = {
|
|
141
|
+
nominator: number;
|
|
142
|
+
nominee: number;
|
|
143
|
+
};
|
|
144
|
+
type TDslNominationWithTurn = TDslNomination & {
|
|
145
|
+
turn: number;
|
|
146
|
+
};
|
|
147
|
+
type TDslContext = {
|
|
148
|
+
effector: TDslPlayer | undefined;
|
|
149
|
+
players: TDslPlayer[];
|
|
150
|
+
operations: {
|
|
151
|
+
all: TOperation[];
|
|
152
|
+
today: TOperation[];
|
|
153
|
+
tonight: TOperation[];
|
|
154
|
+
yesterdayDay: TOperation[];
|
|
155
|
+
yesterdayNight: TOperation[];
|
|
156
|
+
};
|
|
157
|
+
nominations: {
|
|
158
|
+
all: TDslNominationWithTurn[];
|
|
159
|
+
today: TDslNomination[];
|
|
160
|
+
yesterday: TDslNomination[];
|
|
161
|
+
};
|
|
162
|
+
currentTimeline: {
|
|
163
|
+
turn: number;
|
|
164
|
+
phase: string;
|
|
165
|
+
time: TTimeline['time'] | undefined;
|
|
166
|
+
isFirstOfPhase: boolean;
|
|
167
|
+
isExecution: boolean;
|
|
168
|
+
};
|
|
169
|
+
global: {
|
|
170
|
+
aliveCount: number;
|
|
171
|
+
deadCount: number;
|
|
172
|
+
executedTodayCount: number;
|
|
173
|
+
nominatedTodayCount: number;
|
|
174
|
+
executionHappenedToday: boolean;
|
|
175
|
+
playerDiedToday: boolean;
|
|
176
|
+
};
|
|
177
|
+
payload: unknown[];
|
|
178
|
+
};
|
|
179
|
+
declare const buildDslContextFromDerived: (derived: TDerivedContext, payload?: unknown[]) => TDslContext;
|
|
180
|
+
type TBuildDslContextFromLifetimeArgs = {
|
|
181
|
+
snapshotSeatMap: Map<number, TPlayer> | null;
|
|
182
|
+
timelines: TTimeline[];
|
|
183
|
+
nowTimelineIndex: number;
|
|
184
|
+
characterMap: Map<string, TPopulatedCharacter>;
|
|
185
|
+
effector: TPlayer | undefined;
|
|
186
|
+
payloads: unknown[];
|
|
187
|
+
};
|
|
188
|
+
declare const buildDslContextFromLifetime: ({ snapshotSeatMap, timelines, nowTimelineIndex, characterMap, effector, payloads, }: TBuildDslContextFromLifetimeArgs) => TDslContext;
|
|
189
|
+
|
|
190
|
+
type TBindings = Record<string, unknown>;
|
|
191
|
+
declare const rootBindings: (ctx: TDslContext) => TBindings;
|
|
192
|
+
declare const extendBindings: (parent: TBindings, name: string, value: unknown) => TBindings;
|
|
193
|
+
|
|
194
|
+
declare const evalExpr: (expr: TDslExpr, bindings: TBindings, depth?: number) => boolean;
|
|
195
|
+
declare const evalDslExpr: (expr: TDslExpr, ctx: TDslContext) => boolean;
|
|
196
|
+
|
|
197
|
+
declare const evaluatePath: (path: TDslPath, bindings: TBindings) => unknown;
|
|
198
|
+
|
|
199
|
+
declare const applyOperator: (op: TDslOperator, lhs: unknown, rhs: unknown) => boolean;
|
|
200
|
+
declare const applyCountOperator: (op: TDslCountOperator, actual: number, expected: number) => boolean;
|
|
201
|
+
|
|
202
|
+
type TDslFieldType = 'string' | 'number' | 'boolean' | 'string[]' | 'number[]' | 'player' | 'player[]' | 'operation' | 'operation[]' | 'nomination' | 'nomination[]' | 'object' | 'unknown[]';
|
|
203
|
+
type TDslCatalogField = {
|
|
204
|
+
name: string;
|
|
205
|
+
type: TDslFieldType;
|
|
206
|
+
label: string;
|
|
207
|
+
description?: string;
|
|
208
|
+
};
|
|
209
|
+
type TDslCatalogRoot = {
|
|
210
|
+
name: string;
|
|
211
|
+
type: TDslFieldType;
|
|
212
|
+
label: string;
|
|
213
|
+
description?: string;
|
|
214
|
+
fields?: TDslCatalogField[];
|
|
215
|
+
};
|
|
216
|
+
declare const DSL_CATALOG: TDslCatalogRoot[];
|
|
217
|
+
declare const DSL_ITEM_FIELDS: Record<string, TDslCatalogField[]>;
|
|
218
|
+
declare const DSL_OPERATORS: {
|
|
219
|
+
value: string;
|
|
220
|
+
label: string;
|
|
221
|
+
arity: 'unary' | 'binary';
|
|
222
|
+
}[];
|
|
223
|
+
|
|
224
|
+
type TDslTraceNode = {
|
|
225
|
+
op: 'AND';
|
|
226
|
+
ok: boolean;
|
|
227
|
+
children: TDslTraceNode[];
|
|
228
|
+
} | {
|
|
229
|
+
op: 'OR';
|
|
230
|
+
ok: boolean;
|
|
231
|
+
children: TDslTraceNode[];
|
|
232
|
+
} | {
|
|
233
|
+
op: 'NOT';
|
|
234
|
+
ok: boolean;
|
|
235
|
+
child: TDslTraceNode;
|
|
236
|
+
} | TDslTraceAtomNode;
|
|
237
|
+
type TDslTraceAtomNode = {
|
|
238
|
+
op: 'ATOM';
|
|
239
|
+
atomType: 'PATH';
|
|
240
|
+
ok: boolean;
|
|
241
|
+
path: string;
|
|
242
|
+
operator: string;
|
|
243
|
+
lhs: unknown;
|
|
244
|
+
rhs: unknown;
|
|
245
|
+
} | {
|
|
246
|
+
op: 'ATOM';
|
|
247
|
+
atomType: 'EXISTS' | 'FORALL';
|
|
248
|
+
ok: boolean;
|
|
249
|
+
source: string;
|
|
250
|
+
size: number;
|
|
251
|
+
matched: number;
|
|
252
|
+
bindings: string;
|
|
253
|
+
} | {
|
|
254
|
+
op: 'ATOM';
|
|
255
|
+
atomType: 'COUNT';
|
|
256
|
+
ok: boolean;
|
|
257
|
+
source: string;
|
|
258
|
+
size: number;
|
|
259
|
+
matched: number;
|
|
260
|
+
operator: string;
|
|
261
|
+
expected: number;
|
|
262
|
+
bindings: string;
|
|
263
|
+
};
|
|
264
|
+
declare const traceExpr: (expr: TDslExpr, bindings: TBindings) => TDslTraceNode;
|
|
265
|
+
declare const traceDslExpr: (expr: TDslExpr, ctx: TDslContext) => TDslTraceNode;
|
|
266
|
+
|
|
267
|
+
export { ACTIVE_TRIGGER_ACTIONS, DSL_CATALOG, DSL_ITEM_FIELDS, DSL_OPERATORS, type TBindings, type TCanInvokeAbilityArgs, type TCanInvokeAbilityCustomResolver, type TCanInvokeAbilityResult, type TDerivedContext, type TDslCatalogField, type TDslCatalogRoot, type TDslContext, type TDslFieldType, type TDslPlayer, type TDslTraceAtomNode, type TDslTraceNode, adjustValueAsNumber, adjustValueAsNumberArray, applyCountOperator, applyOperationToPlayers, applyOperator, buildDslContextFromDerived, buildDslContextFromLifetime, buildPlayerSeatMap, canInvokeAbility, copyPlayers, deriveContext, evalDslExpr, evalExpr as evalDslExprWithBindings, evaluatePath, extendBindings, getSourceValue, getValueFromPayloads, isActiveTriggerAction, isNumberOrNumberArray, isPlayerReminderArray, isReminder, resolveSourceValue, resolveTargetRef, rootBindings, traceDslExpr, traceExpr, transformEmptyArray };
|
package/dist/index.d.ts
CHANGED
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { TPlayer, TOperation, TAbility, TPopulatedCharacter, TTimeline, TTriggerPhase, TEffect, TTargetRef, TPlayerReminder, TReminder } from '@bct-app/game-model';
|
|
1
|
+
import { TPlayer, TOperation, TAbility, TPopulatedCharacter, TTimeline, TTriggerPhase, TEffect, TTargetRef, TPlayerReminder, TReminder, TTriggerAction, TDslExpr, TDslPath, TDslCountOperator, TDslOperator } from '@bct-app/game-model';
|
|
2
2
|
|
|
3
3
|
type TLifetimeCustomResolver = (input: {
|
|
4
4
|
key: string;
|
|
@@ -56,6 +56,15 @@ type TDerivedContext = {
|
|
|
56
56
|
nominator: number;
|
|
57
57
|
nominee: number;
|
|
58
58
|
}[];
|
|
59
|
+
yesterdayNominations: {
|
|
60
|
+
nominator: number;
|
|
61
|
+
nominee: number;
|
|
62
|
+
}[];
|
|
63
|
+
allNominations: {
|
|
64
|
+
nominator: number;
|
|
65
|
+
nominee: number;
|
|
66
|
+
turn: number;
|
|
67
|
+
}[];
|
|
59
68
|
effectorSeat: number;
|
|
60
69
|
effector: TPlayer | undefined;
|
|
61
70
|
abilityId: string;
|
|
@@ -117,4 +126,142 @@ declare const isReminder: (value: unknown) => value is TReminder;
|
|
|
117
126
|
*/
|
|
118
127
|
declare const isPlayerReminderArray: (value: unknown) => value is TPlayerReminder[];
|
|
119
128
|
|
|
120
|
-
|
|
129
|
+
declare const ACTIVE_TRIGGER_ACTIONS: Set<TTriggerAction>;
|
|
130
|
+
declare const isActiveTriggerAction: (action: TTriggerAction) => boolean;
|
|
131
|
+
|
|
132
|
+
type TDslPlayer = TPlayer & {
|
|
133
|
+
characterKind: string | undefined;
|
|
134
|
+
reminderMarks: string[];
|
|
135
|
+
effectiveAlive: boolean;
|
|
136
|
+
diedThisTurn: boolean;
|
|
137
|
+
wasExecuted: boolean;
|
|
138
|
+
wasExecutedToday: boolean;
|
|
139
|
+
};
|
|
140
|
+
type TDslNomination = {
|
|
141
|
+
nominator: number;
|
|
142
|
+
nominee: number;
|
|
143
|
+
};
|
|
144
|
+
type TDslNominationWithTurn = TDslNomination & {
|
|
145
|
+
turn: number;
|
|
146
|
+
};
|
|
147
|
+
type TDslContext = {
|
|
148
|
+
effector: TDslPlayer | undefined;
|
|
149
|
+
players: TDslPlayer[];
|
|
150
|
+
operations: {
|
|
151
|
+
all: TOperation[];
|
|
152
|
+
today: TOperation[];
|
|
153
|
+
tonight: TOperation[];
|
|
154
|
+
yesterdayDay: TOperation[];
|
|
155
|
+
yesterdayNight: TOperation[];
|
|
156
|
+
};
|
|
157
|
+
nominations: {
|
|
158
|
+
all: TDslNominationWithTurn[];
|
|
159
|
+
today: TDslNomination[];
|
|
160
|
+
yesterday: TDslNomination[];
|
|
161
|
+
};
|
|
162
|
+
currentTimeline: {
|
|
163
|
+
turn: number;
|
|
164
|
+
phase: string;
|
|
165
|
+
time: TTimeline['time'] | undefined;
|
|
166
|
+
isFirstOfPhase: boolean;
|
|
167
|
+
isExecution: boolean;
|
|
168
|
+
};
|
|
169
|
+
global: {
|
|
170
|
+
aliveCount: number;
|
|
171
|
+
deadCount: number;
|
|
172
|
+
executedTodayCount: number;
|
|
173
|
+
nominatedTodayCount: number;
|
|
174
|
+
executionHappenedToday: boolean;
|
|
175
|
+
playerDiedToday: boolean;
|
|
176
|
+
};
|
|
177
|
+
payload: unknown[];
|
|
178
|
+
};
|
|
179
|
+
declare const buildDslContextFromDerived: (derived: TDerivedContext, payload?: unknown[]) => TDslContext;
|
|
180
|
+
type TBuildDslContextFromLifetimeArgs = {
|
|
181
|
+
snapshotSeatMap: Map<number, TPlayer> | null;
|
|
182
|
+
timelines: TTimeline[];
|
|
183
|
+
nowTimelineIndex: number;
|
|
184
|
+
characterMap: Map<string, TPopulatedCharacter>;
|
|
185
|
+
effector: TPlayer | undefined;
|
|
186
|
+
payloads: unknown[];
|
|
187
|
+
};
|
|
188
|
+
declare const buildDslContextFromLifetime: ({ snapshotSeatMap, timelines, nowTimelineIndex, characterMap, effector, payloads, }: TBuildDslContextFromLifetimeArgs) => TDslContext;
|
|
189
|
+
|
|
190
|
+
type TBindings = Record<string, unknown>;
|
|
191
|
+
declare const rootBindings: (ctx: TDslContext) => TBindings;
|
|
192
|
+
declare const extendBindings: (parent: TBindings, name: string, value: unknown) => TBindings;
|
|
193
|
+
|
|
194
|
+
declare const evalExpr: (expr: TDslExpr, bindings: TBindings, depth?: number) => boolean;
|
|
195
|
+
declare const evalDslExpr: (expr: TDslExpr, ctx: TDslContext) => boolean;
|
|
196
|
+
|
|
197
|
+
declare const evaluatePath: (path: TDslPath, bindings: TBindings) => unknown;
|
|
198
|
+
|
|
199
|
+
declare const applyOperator: (op: TDslOperator, lhs: unknown, rhs: unknown) => boolean;
|
|
200
|
+
declare const applyCountOperator: (op: TDslCountOperator, actual: number, expected: number) => boolean;
|
|
201
|
+
|
|
202
|
+
type TDslFieldType = 'string' | 'number' | 'boolean' | 'string[]' | 'number[]' | 'player' | 'player[]' | 'operation' | 'operation[]' | 'nomination' | 'nomination[]' | 'object' | 'unknown[]';
|
|
203
|
+
type TDslCatalogField = {
|
|
204
|
+
name: string;
|
|
205
|
+
type: TDslFieldType;
|
|
206
|
+
label: string;
|
|
207
|
+
description?: string;
|
|
208
|
+
};
|
|
209
|
+
type TDslCatalogRoot = {
|
|
210
|
+
name: string;
|
|
211
|
+
type: TDslFieldType;
|
|
212
|
+
label: string;
|
|
213
|
+
description?: string;
|
|
214
|
+
fields?: TDslCatalogField[];
|
|
215
|
+
};
|
|
216
|
+
declare const DSL_CATALOG: TDslCatalogRoot[];
|
|
217
|
+
declare const DSL_ITEM_FIELDS: Record<string, TDslCatalogField[]>;
|
|
218
|
+
declare const DSL_OPERATORS: {
|
|
219
|
+
value: string;
|
|
220
|
+
label: string;
|
|
221
|
+
arity: 'unary' | 'binary';
|
|
222
|
+
}[];
|
|
223
|
+
|
|
224
|
+
type TDslTraceNode = {
|
|
225
|
+
op: 'AND';
|
|
226
|
+
ok: boolean;
|
|
227
|
+
children: TDslTraceNode[];
|
|
228
|
+
} | {
|
|
229
|
+
op: 'OR';
|
|
230
|
+
ok: boolean;
|
|
231
|
+
children: TDslTraceNode[];
|
|
232
|
+
} | {
|
|
233
|
+
op: 'NOT';
|
|
234
|
+
ok: boolean;
|
|
235
|
+
child: TDslTraceNode;
|
|
236
|
+
} | TDslTraceAtomNode;
|
|
237
|
+
type TDslTraceAtomNode = {
|
|
238
|
+
op: 'ATOM';
|
|
239
|
+
atomType: 'PATH';
|
|
240
|
+
ok: boolean;
|
|
241
|
+
path: string;
|
|
242
|
+
operator: string;
|
|
243
|
+
lhs: unknown;
|
|
244
|
+
rhs: unknown;
|
|
245
|
+
} | {
|
|
246
|
+
op: 'ATOM';
|
|
247
|
+
atomType: 'EXISTS' | 'FORALL';
|
|
248
|
+
ok: boolean;
|
|
249
|
+
source: string;
|
|
250
|
+
size: number;
|
|
251
|
+
matched: number;
|
|
252
|
+
bindings: string;
|
|
253
|
+
} | {
|
|
254
|
+
op: 'ATOM';
|
|
255
|
+
atomType: 'COUNT';
|
|
256
|
+
ok: boolean;
|
|
257
|
+
source: string;
|
|
258
|
+
size: number;
|
|
259
|
+
matched: number;
|
|
260
|
+
operator: string;
|
|
261
|
+
expected: number;
|
|
262
|
+
bindings: string;
|
|
263
|
+
};
|
|
264
|
+
declare const traceExpr: (expr: TDslExpr, bindings: TBindings) => TDslTraceNode;
|
|
265
|
+
declare const traceDslExpr: (expr: TDslExpr, ctx: TDslContext) => TDslTraceNode;
|
|
266
|
+
|
|
267
|
+
export { ACTIVE_TRIGGER_ACTIONS, DSL_CATALOG, DSL_ITEM_FIELDS, DSL_OPERATORS, type TBindings, type TCanInvokeAbilityArgs, type TCanInvokeAbilityCustomResolver, type TCanInvokeAbilityResult, type TDerivedContext, type TDslCatalogField, type TDslCatalogRoot, type TDslContext, type TDslFieldType, type TDslPlayer, type TDslTraceAtomNode, type TDslTraceNode, adjustValueAsNumber, adjustValueAsNumberArray, applyCountOperator, applyOperationToPlayers, applyOperator, buildDslContextFromDerived, buildDslContextFromLifetime, buildPlayerSeatMap, canInvokeAbility, copyPlayers, deriveContext, evalDslExpr, evalExpr as evalDslExprWithBindings, evaluatePath, extendBindings, getSourceValue, getValueFromPayloads, isActiveTriggerAction, isNumberOrNumberArray, isPlayerReminderArray, isReminder, resolveSourceValue, resolveTargetRef, rootBindings, traceDslExpr, traceExpr, transformEmptyArray };
|