@dev-blinq/bvt-playwright-js 1.0.0-dev.3 → 1.0.0-dev.4.staging.63.1

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/index.mjs CHANGED
@@ -343,7 +343,7 @@ var TestDataApi = class {
343
343
  };
344
344
 
345
345
  //#endregion
346
- //#region ../../node_modules/zod/v4/core/core.js
346
+ //#region ../../node_modules/.pnpm/zod@4.3.6/node_modules/zod/v4/core/core.js
347
347
  /** A special constant with type `never` */
348
348
  const NEVER = Object.freeze({ status: "aborted" });
349
349
  function $constructor(name, initializer, params) {
@@ -403,7 +403,7 @@ function config(newConfig) {
403
403
  }
404
404
 
405
405
  //#endregion
406
- //#region ../../node_modules/zod/v4/core/util.js
406
+ //#region ../../node_modules/.pnpm/zod@4.3.6/node_modules/zod/v4/core/util.js
407
407
  function getEnumValues(entries) {
408
408
  const numericValues = Object.values(entries).filter((v) => typeof v === "number");
409
409
  return Object.entries(entries).filter(([k, _]) => numericValues.indexOf(+k) === -1).map(([_, v]) => v);
@@ -717,7 +717,7 @@ function issue(...args) {
717
717
  }
718
718
 
719
719
  //#endregion
720
- //#region ../../node_modules/zod/v4/core/errors.js
720
+ //#region ../../node_modules/.pnpm/zod@4.3.6/node_modules/zod/v4/core/errors.js
721
721
  const initializer$1 = (inst, def) => {
722
722
  inst.name = "$ZodError";
723
723
  Object.defineProperty(inst, "_zod", {
@@ -775,7 +775,7 @@ function formatError(error, mapper = (issue) => issue.message) {
775
775
  }
776
776
 
777
777
  //#endregion
778
- //#region ../../node_modules/zod/v4/core/parse.js
778
+ //#region ../../node_modules/.pnpm/zod@4.3.6/node_modules/zod/v4/core/parse.js
779
779
  const _parse = (_Err) => (schema, value, _ctx, _params) => {
780
780
  const ctx = _ctx ? Object.assign(_ctx, { async: false }) : { async: false };
781
781
  const result = schema._zod.run({
@@ -879,7 +879,7 @@ const _safeDecodeAsync = (_Err) => async (schema, value, _ctx) => {
879
879
  const safeDecodeAsync$1 = /* @__PURE__ */ _safeDecodeAsync($ZodRealError);
880
880
 
881
881
  //#endregion
882
- //#region ../../node_modules/zod/v4/core/regexes.js
882
+ //#region ../../node_modules/.pnpm/zod@4.3.6/node_modules/zod/v4/core/regexes.js
883
883
  const cuid = /^[cC][^\s-]{8,}$/;
884
884
  const cuid2 = /^[0-9a-z]+$/;
885
885
  const ulid$1 = /^[0-9A-HJKMNP-TV-Za-hjkmnp-tv-z]{26}$/;
@@ -939,7 +939,7 @@ const lowercase = /^[^A-Z]*$/;
939
939
  const uppercase = /^[^a-z]*$/;
940
940
 
941
941
  //#endregion
942
- //#region ../../node_modules/zod/v4/core/checks.js
942
+ //#region ../../node_modules/.pnpm/zod@4.3.6/node_modules/zod/v4/core/checks.js
943
943
  const $ZodCheck = /* @__PURE__ */ $constructor("$ZodCheck", (inst, def) => {
944
944
  var _a;
945
945
  inst._zod ?? (inst._zod = {});
@@ -1298,7 +1298,7 @@ const $ZodCheckOverwrite = /* @__PURE__ */ $constructor("$ZodCheckOverwrite", (i
1298
1298
  });
1299
1299
 
1300
1300
  //#endregion
1301
- //#region ../../node_modules/zod/v4/core/doc.js
1301
+ //#region ../../node_modules/.pnpm/zod@4.3.6/node_modules/zod/v4/core/doc.js
1302
1302
  var Doc = class {
1303
1303
  constructor(args = []) {
1304
1304
  this.content = [];
@@ -1330,7 +1330,7 @@ var Doc = class {
1330
1330
  };
1331
1331
 
1332
1332
  //#endregion
1333
- //#region ../../node_modules/zod/v4/core/versions.js
1333
+ //#region ../../node_modules/.pnpm/zod@4.3.6/node_modules/zod/v4/core/versions.js
1334
1334
  const version$1 = {
1335
1335
  major: 4,
1336
1336
  minor: 3,
@@ -1338,7 +1338,7 @@ const version$1 = {
1338
1338
  };
1339
1339
 
1340
1340
  //#endregion
1341
- //#region ../../node_modules/zod/v4/core/schemas.js
1341
+ //#region ../../node_modules/.pnpm/zod@4.3.6/node_modules/zod/v4/core/schemas.js
1342
1342
  const $ZodType = /* @__PURE__ */ $constructor("$ZodType", (inst, def) => {
1343
1343
  var _a;
1344
1344
  inst ?? (inst = {});
@@ -2586,7 +2586,7 @@ function handleRefineResult(result, payload, input, inst) {
2586
2586
  }
2587
2587
 
2588
2588
  //#endregion
2589
- //#region ../../node_modules/zod/v4/core/registries.js
2589
+ //#region ../../node_modules/.pnpm/zod@4.3.6/node_modules/zod/v4/core/registries.js
2590
2590
  var _a;
2591
2591
  var $ZodRegistry = class {
2592
2592
  constructor() {
@@ -2634,7 +2634,7 @@ function registry() {
2634
2634
  const globalRegistry = globalThis.__zod_globalRegistry;
2635
2635
 
2636
2636
  //#endregion
2637
- //#region ../../node_modules/zod/v4/core/api.js
2637
+ //#region ../../node_modules/.pnpm/zod@4.3.6/node_modules/zod/v4/core/api.js
2638
2638
  /* @__NO_SIDE_EFFECTS__ */
2639
2639
  function _string(Class, params) {
2640
2640
  return new Class({
@@ -3175,7 +3175,7 @@ function meta$1(metadata) {
3175
3175
  }
3176
3176
 
3177
3177
  //#endregion
3178
- //#region ../../node_modules/zod/v4/core/to-json-schema.js
3178
+ //#region ../../node_modules/.pnpm/zod@4.3.6/node_modules/zod/v4/core/to-json-schema.js
3179
3179
  function initializeContext(params) {
3180
3180
  let target = params?.target ?? "draft-2020-12";
3181
3181
  if (target === "draft-4") target = "draft-04";
@@ -3461,7 +3461,7 @@ const createStandardJSONSchemaMethod = (schema, io, processors = {}) => (params)
3461
3461
  };
3462
3462
 
3463
3463
  //#endregion
3464
- //#region ../../node_modules/zod/v4/core/json-schema-processors.js
3464
+ //#region ../../node_modules/.pnpm/zod@4.3.6/node_modules/zod/v4/core/json-schema-processors.js
3465
3465
  const formatMap = {
3466
3466
  guid: "uuid",
3467
3467
  url: "uri",
@@ -3745,7 +3745,7 @@ const lazyProcessor = (schema, ctx, _json, params) => {
3745
3745
  };
3746
3746
 
3747
3747
  //#endregion
3748
- //#region ../../node_modules/zod/v4/classic/iso.js
3748
+ //#region ../../node_modules/.pnpm/zod@4.3.6/node_modules/zod/v4/classic/iso.js
3749
3749
  const ZodISODateTime = /* @__PURE__ */ $constructor("ZodISODateTime", (inst, def) => {
3750
3750
  $ZodISODateTime.init(inst, def);
3751
3751
  ZodStringFormat.init(inst, def);
@@ -3776,7 +3776,7 @@ function duration(params) {
3776
3776
  }
3777
3777
 
3778
3778
  //#endregion
3779
- //#region ../../node_modules/zod/v4/classic/errors.js
3779
+ //#region ../../node_modules/.pnpm/zod@4.3.6/node_modules/zod/v4/classic/errors.js
3780
3780
  const initializer = (inst, issues) => {
3781
3781
  $ZodError.init(inst, issues);
3782
3782
  inst.name = "ZodError";
@@ -3800,7 +3800,7 @@ const ZodError = $constructor("ZodError", initializer);
3800
3800
  const ZodRealError = $constructor("ZodError", initializer, { Parent: Error });
3801
3801
 
3802
3802
  //#endregion
3803
- //#region ../../node_modules/zod/v4/classic/parse.js
3803
+ //#region ../../node_modules/.pnpm/zod@4.3.6/node_modules/zod/v4/classic/parse.js
3804
3804
  const parse$1 = /* @__PURE__ */ _parse(ZodRealError);
3805
3805
  const parseAsync = /* @__PURE__ */ _parseAsync(ZodRealError);
3806
3806
  const safeParse = /* @__PURE__ */ _safeParse(ZodRealError);
@@ -3815,7 +3815,7 @@ const safeEncodeAsync = /* @__PURE__ */ _safeEncodeAsync(ZodRealError);
3815
3815
  const safeDecodeAsync = /* @__PURE__ */ _safeDecodeAsync(ZodRealError);
3816
3816
 
3817
3817
  //#endregion
3818
- //#region ../../node_modules/zod/v4/classic/schemas.js
3818
+ //#region ../../node_modules/.pnpm/zod@4.3.6/node_modules/zod/v4/classic/schemas.js
3819
3819
  const ZodType = /* @__PURE__ */ $constructor("ZodType", (inst, def) => {
3820
3820
  $ZodType.init(inst, def);
3821
3821
  Object.assign(inst["~standard"], { jsonSchema: {
@@ -4467,7 +4467,7 @@ function preprocess(fn, schema) {
4467
4467
  }
4468
4468
 
4469
4469
  //#endregion
4470
- //#region ../../node_modules/zod/v4/classic/compat.js
4470
+ //#region ../../node_modules/.pnpm/zod@4.3.6/node_modules/zod/v4/classic/compat.js
4471
4471
  /** @deprecated Use the raw string literal codes instead, e.g. "invalid_type". */
4472
4472
  const ZodIssueCode = {
4473
4473
  invalid_type: "invalid_type",
@@ -6265,9 +6265,12 @@ const ProjectBrowserLaunchConfigurationSchema = object({
6265
6265
  height: 900
6266
6266
  } })
6267
6267
  }).strict();
6268
+ const ProjectGitCodegenFormats = ["playwright", "gherkin"];
6269
+ const ProjectGitCodegenFormatSchema = _enum(ProjectGitCodegenFormats).default("playwright");
6268
6270
  const ProjectSettingsSchema = object({
6269
6271
  _id: EntityIdSchema,
6270
6272
  projectId: EntityIdSchema,
6273
+ gitCodegenFormat: ProjectGitCodegenFormatSchema,
6271
6274
  browerLaunchConfiguration: ProjectBrowserLaunchConfigurationSchema.default({
6272
6275
  browser: {},
6273
6276
  browserContext: { viewport: {
@@ -6458,7 +6461,7 @@ const BrowserObserverStateKSchema = union([_enum([
6458
6461
  ]), _null()]);
6459
6462
 
6460
6463
  //#endregion
6461
- //#region ../../node_modules/xstate/dev/dist/xstate-dev.esm.js
6464
+ //#region ../../node_modules/.pnpm/xstate@5.28.0/node_modules/xstate/dev/dist/xstate-dev.esm.js
6462
6465
  function getGlobal$1() {
6463
6466
  if (typeof globalThis !== "undefined") return globalThis;
6464
6467
  if (typeof self !== "undefined") return self;
@@ -6476,7 +6479,7 @@ const devToolsAdapter = (service) => {
6476
6479
  };
6477
6480
 
6478
6481
  //#endregion
6479
- //#region ../../node_modules/xstate/dist/raise-34c45204.esm.js
6482
+ //#region ../../node_modules/.pnpm/xstate@5.28.0/node_modules/xstate/dist/raise-34c45204.esm.js
6480
6483
  var Mailbox = class {
6481
6484
  constructor(_process) {
6482
6485
  this._process = _process;
@@ -8380,7 +8383,7 @@ function raise(eventOrExpr, options) {
8380
8383
  }
8381
8384
 
8382
8385
  //#endregion
8383
- //#region ../../node_modules/xstate/actors/dist/xstate-actors.esm.js
8386
+ //#region ../../node_modules/.pnpm/xstate@5.28.0/node_modules/xstate/actors/dist/xstate-actors.esm.js
8384
8387
  /**
8385
8388
  * Represents an actor created by `fromTransition`.
8386
8389
  *
@@ -8691,7 +8694,7 @@ function fromCallback(callback) {
8691
8694
  const emptyLogic = fromTransition((_) => void 0, void 0);
8692
8695
 
8693
8696
  //#endregion
8694
- //#region ../../node_modules/xstate/dist/assign-5f7ff891.esm.js
8697
+ //#region ../../node_modules/.pnpm/xstate@5.28.0/node_modules/xstate/dist/assign-5f7ff891.esm.js
8695
8698
  function createSpawner(actorScope, { machine, context }, event, spawnedChildren) {
8696
8699
  const spawn = (src, options) => {
8697
8700
  if (typeof src === "string") {
@@ -8801,7 +8804,7 @@ function assign(assignment) {
8801
8804
  }
8802
8805
 
8803
8806
  //#endregion
8804
- //#region ../../node_modules/xstate/dist/StateMachine-9ef88566.esm.js
8807
+ //#region ../../node_modules/.pnpm/xstate@5.28.0/node_modules/xstate/dist/StateMachine-9ef88566.esm.js
8805
8808
  const cache = /* @__PURE__ */ new WeakMap();
8806
8809
  function memo(object, key, fn) {
8807
8810
  let memoizedData = cache.get(object);
@@ -9267,7 +9270,7 @@ var StateMachine = class StateMachine {
9267
9270
  };
9268
9271
 
9269
9272
  //#endregion
9270
- //#region ../../node_modules/xstate/dist/log-1324d455.esm.js
9273
+ //#region ../../node_modules/.pnpm/xstate@5.28.0/node_modules/xstate/dist/log-1324d455.esm.js
9271
9274
  function resolveEmit(_, snapshot, args, actionParams, { event: eventOrExpr }) {
9272
9275
  return [
9273
9276
  snapshot,
@@ -9551,7 +9554,7 @@ function log(value = ({ context, event }) => ({
9551
9554
  }
9552
9555
 
9553
9556
  //#endregion
9554
- //#region ../../node_modules/xstate/dist/xstate.esm.js
9557
+ //#region ../../node_modules/.pnpm/xstate@5.28.0/node_modules/xstate/dist/xstate.esm.js
9555
9558
  /**
9556
9559
  * Creates a state machine (statechart) with the given configuration.
9557
9560
  *
@@ -12157,11 +12160,11 @@ function attachDownloadInterceptor(page, options) {
12157
12160
  //#endregion
12158
12161
  //#region ../../core/bvt-agent/src/agent/recovery/types.ts
12159
12162
  const RECOVERY_USER_FACING_MESSAGES = {
12160
- analyzing: "Analyzing failure",
12161
- trying_fix: "Trying a fix",
12162
- checking_fix: "Checking the fix",
12163
- fixed: "Fixed automatically",
12164
- failed: "Automatic fix did not pass"
12163
+ analyzing: "AI Test Engineer is analyzing the failure",
12164
+ trying_fix: "AI Test Engineer is trying a fix",
12165
+ checking_fix: "AI Test Engineer is checking the fix",
12166
+ fixed: "AI Test Engineer fixed this automatically",
12167
+ failed: "AI Test Engineer could not fix this automatically"
12165
12168
  };
12166
12169
 
12167
12170
  //#endregion
@@ -12183,7 +12186,7 @@ var NoOpRecoveryController = class {
12183
12186
  };
12184
12187
 
12185
12188
  //#endregion
12186
- //#region ../../node_modules/ulid/dist/node/index.js
12189
+ //#region ../../node_modules/.pnpm/ulid@3.0.1/node_modules/ulid/dist/node/index.js
12187
12190
  const ENCODING = "0123456789ABCDEFGHJKMNPQRSTVWXYZ";
12188
12191
  const ENCODING_LEN = 32;
12189
12192
  const RANDOM_LEN = 16;
@@ -12465,7 +12468,7 @@ var CommandPreprocessorPipeline = class {
12465
12468
  };
12466
12469
 
12467
12470
  //#endregion
12468
- //#region ../../node_modules/acorn/dist/acorn.mjs
12471
+ //#region ../../node_modules/.pnpm/acorn@8.16.0/node_modules/acorn/dist/acorn.mjs
12469
12472
  var astralIdentifierCodes = [
12470
12473
  509,
12471
12474
  0,
@@ -13642,10 +13645,10 @@ function nextLineBreak(code, from, end) {
13642
13645
  var nonASCIIwhitespace = /[\u1680\u2000-\u200a\u202f\u205f\u3000\ufeff]/;
13643
13646
  var skipWhiteSpace = /(?:\s|\/\/.*|\/\*[^]*?\*\/)*/g;
13644
13647
  var ref = Object.prototype;
13645
- var hasOwnProperty = ref.hasOwnProperty;
13648
+ var hasOwnProperty$1 = ref.hasOwnProperty;
13646
13649
  var toString = ref.toString;
13647
13650
  var hasOwn = Object.hasOwn || (function(obj, propName) {
13648
- return hasOwnProperty.call(obj, propName);
13651
+ return hasOwnProperty$1.call(obj, propName);
13649
13652
  });
13650
13653
  var isArray = Array.isArray || (function(obj) {
13651
13654
  return toString.call(obj) === "[object Array]";
@@ -17552,7 +17555,7 @@ function parse(input, options) {
17552
17555
  }
17553
17556
 
17554
17557
  //#endregion
17555
- //#region ../../node_modules/acorn-walk/dist/walk.mjs
17558
+ //#region ../../node_modules/.pnpm/acorn-walk@8.3.5/node_modules/acorn-walk/dist/walk.mjs
17556
17559
  function simple(node, visitors, baseVisitor, state, override) {
17557
17560
  if (!baseVisitor) baseVisitor = base;
17558
17561
  (function c(node, st, override) {
@@ -17943,11 +17946,11 @@ async function validatePlaywrightCode(code) {
17943
17946
  }
17944
17947
 
17945
17948
  //#endregion
17946
- //#region ../../node_modules/@opentelemetry/api/build/esm/version.js
17949
+ //#region ../../node_modules/.pnpm/@opentelemetry+api@1.9.1/node_modules/@opentelemetry/api/build/esm/version.js
17947
17950
  const VERSION = "1.9.1";
17948
17951
 
17949
17952
  //#endregion
17950
- //#region ../../node_modules/@opentelemetry/api/build/esm/internal/semver.js
17953
+ //#region ../../node_modules/.pnpm/@opentelemetry+api@1.9.1/node_modules/@opentelemetry/api/build/esm/internal/semver.js
17951
17954
  const re = /^(\d+)\.(\d+)\.(\d+)(-(.+))?$/;
17952
17955
  /**
17953
17956
  * Create a function to test an API version to see if it is compatible with the provided ownVersion.
@@ -18026,7 +18029,7 @@ function _makeCompatibilityCheck(ownVersion) {
18026
18029
  const isCompatible = _makeCompatibilityCheck(VERSION);
18027
18030
 
18028
18031
  //#endregion
18029
- //#region ../../node_modules/@opentelemetry/api/build/esm/internal/global-utils.js
18032
+ //#region ../../node_modules/.pnpm/@opentelemetry+api@1.9.1/node_modules/@opentelemetry/api/build/esm/internal/global-utils.js
18030
18033
  const major = VERSION.split(".")[0];
18031
18034
  const GLOBAL_OPENTELEMETRY_API_KEY = Symbol.for(`opentelemetry.js.api.${major}`);
18032
18035
  const _global = typeof globalThis === "object" ? globalThis : typeof self === "object" ? self : typeof window === "object" ? window : typeof global === "object" ? global : {};
@@ -18060,7 +18063,7 @@ function unregisterGlobal(type, diag) {
18060
18063
  }
18061
18064
 
18062
18065
  //#endregion
18063
- //#region ../../node_modules/@opentelemetry/api/build/esm/diag/ComponentLogger.js
18066
+ //#region ../../node_modules/.pnpm/@opentelemetry+api@1.9.1/node_modules/@opentelemetry/api/build/esm/diag/ComponentLogger.js
18064
18067
  /**
18065
18068
  * Component Logger which is meant to be used as part of any component which
18066
18069
  * will add automatically additional namespace in front of the log message.
@@ -18097,7 +18100,7 @@ function logProxy(funcName, namespace, args) {
18097
18100
  }
18098
18101
 
18099
18102
  //#endregion
18100
- //#region ../../node_modules/@opentelemetry/api/build/esm/diag/types.js
18103
+ //#region ../../node_modules/.pnpm/@opentelemetry+api@1.9.1/node_modules/@opentelemetry/api/build/esm/diag/types.js
18101
18104
  /**
18102
18105
  * Defines the available internal logging levels for the diagnostic logger, the numeric values
18103
18106
  * of the levels are defined to match the original values from the initial LogLevel to avoid
@@ -18125,7 +18128,7 @@ var DiagLogLevel;
18125
18128
  })(DiagLogLevel || (DiagLogLevel = {}));
18126
18129
 
18127
18130
  //#endregion
18128
- //#region ../../node_modules/@opentelemetry/api/build/esm/diag/internal/logLevelLogger.js
18131
+ //#region ../../node_modules/.pnpm/@opentelemetry+api@1.9.1/node_modules/@opentelemetry/api/build/esm/diag/internal/logLevelLogger.js
18129
18132
  function createLogLevelDiagLogger(maxLevel, logger) {
18130
18133
  if (maxLevel < DiagLogLevel.NONE) maxLevel = DiagLogLevel.NONE;
18131
18134
  else if (maxLevel > DiagLogLevel.ALL) maxLevel = DiagLogLevel.ALL;
@@ -18145,7 +18148,7 @@ function createLogLevelDiagLogger(maxLevel, logger) {
18145
18148
  }
18146
18149
 
18147
18150
  //#endregion
18148
- //#region ../../node_modules/@opentelemetry/api/build/esm/api/diag.js
18151
+ //#region ../../node_modules/.pnpm/@opentelemetry+api@1.9.1/node_modules/@opentelemetry/api/build/esm/api/diag.js
18149
18152
  const API_NAME$2 = "diag";
18150
18153
  /**
18151
18154
  * Singleton object which represents the entry point to the OpenTelemetry internal
@@ -18205,7 +18208,7 @@ var DiagAPI = class DiagAPI {
18205
18208
  };
18206
18209
 
18207
18210
  //#endregion
18208
- //#region ../../node_modules/@opentelemetry/api/build/esm/context/context.js
18211
+ //#region ../../node_modules/.pnpm/@opentelemetry+api@1.9.1/node_modules/@opentelemetry/api/build/esm/context/context.js
18209
18212
  /**
18210
18213
  * Get a key to uniquely identify a context value
18211
18214
  *
@@ -18244,7 +18247,7 @@ var BaseContext = class BaseContext {
18244
18247
  const ROOT_CONTEXT = new BaseContext();
18245
18248
 
18246
18249
  //#endregion
18247
- //#region ../../node_modules/@opentelemetry/api/build/esm/context/NoopContextManager.js
18250
+ //#region ../../node_modules/.pnpm/@opentelemetry+api@1.9.1/node_modules/@opentelemetry/api/build/esm/context/NoopContextManager.js
18248
18251
  var NoopContextManager = class {
18249
18252
  active() {
18250
18253
  return ROOT_CONTEXT;
@@ -18264,7 +18267,7 @@ var NoopContextManager = class {
18264
18267
  };
18265
18268
 
18266
18269
  //#endregion
18267
- //#region ../../node_modules/@opentelemetry/api/build/esm/api/context.js
18270
+ //#region ../../node_modules/.pnpm/@opentelemetry+api@1.9.1/node_modules/@opentelemetry/api/build/esm/api/context.js
18268
18271
  const API_NAME$1 = "context";
18269
18272
  const NOOP_CONTEXT_MANAGER = new NoopContextManager();
18270
18273
  /**
@@ -18325,7 +18328,7 @@ var ContextAPI = class ContextAPI {
18325
18328
  };
18326
18329
 
18327
18330
  //#endregion
18328
- //#region ../../node_modules/@opentelemetry/api/build/esm/trace/trace_flags.js
18331
+ //#region ../../node_modules/.pnpm/@opentelemetry+api@1.9.1/node_modules/@opentelemetry/api/build/esm/trace/trace_flags.js
18329
18332
  /**
18330
18333
  * @since 1.0.0
18331
18334
  */
@@ -18338,7 +18341,7 @@ var TraceFlags;
18338
18341
  })(TraceFlags || (TraceFlags = {}));
18339
18342
 
18340
18343
  //#endregion
18341
- //#region ../../node_modules/@opentelemetry/api/build/esm/trace/invalid-span-constants.js
18344
+ //#region ../../node_modules/.pnpm/@opentelemetry+api@1.9.1/node_modules/@opentelemetry/api/build/esm/trace/invalid-span-constants.js
18342
18345
  /**
18343
18346
  * @since 1.0.0
18344
18347
  */
@@ -18357,7 +18360,7 @@ const INVALID_SPAN_CONTEXT = {
18357
18360
  };
18358
18361
 
18359
18362
  //#endregion
18360
- //#region ../../node_modules/@opentelemetry/api/build/esm/trace/NonRecordingSpan.js
18363
+ //#region ../../node_modules/.pnpm/@opentelemetry+api@1.9.1/node_modules/@opentelemetry/api/build/esm/trace/NonRecordingSpan.js
18361
18364
  /**
18362
18365
  * The NonRecordingSpan is the default {@link Span} that is used when no Span
18363
18366
  * implementation is available. All operations are no-op including context
@@ -18399,7 +18402,7 @@ var NonRecordingSpan = class {
18399
18402
  };
18400
18403
 
18401
18404
  //#endregion
18402
- //#region ../../node_modules/@opentelemetry/api/build/esm/trace/context-utils.js
18405
+ //#region ../../node_modules/.pnpm/@opentelemetry+api@1.9.1/node_modules/@opentelemetry/api/build/esm/trace/context-utils.js
18403
18406
  /**
18404
18407
  * span key
18405
18408
  */
@@ -18456,7 +18459,7 @@ function getSpanContext(context) {
18456
18459
  }
18457
18460
 
18458
18461
  //#endregion
18459
- //#region ../../node_modules/@opentelemetry/api/build/esm/trace/spancontext-utils.js
18462
+ //#region ../../node_modules/.pnpm/@opentelemetry+api@1.9.1/node_modules/@opentelemetry/api/build/esm/trace/spancontext-utils.js
18460
18463
  const isHex = new Uint8Array([
18461
18464
  0,
18462
18465
  0,
@@ -18600,7 +18603,7 @@ function wrapSpanContext(spanContext) {
18600
18603
  }
18601
18604
 
18602
18605
  //#endregion
18603
- //#region ../../node_modules/@opentelemetry/api/build/esm/trace/NoopTracer.js
18606
+ //#region ../../node_modules/.pnpm/@opentelemetry+api@1.9.1/node_modules/@opentelemetry/api/build/esm/trace/NoopTracer.js
18604
18607
  const contextApi = ContextAPI.getInstance();
18605
18608
  /**
18606
18609
  * No-op implementations of {@link Tracer}.
@@ -18637,7 +18640,7 @@ function isSpanContext(spanContext) {
18637
18640
  }
18638
18641
 
18639
18642
  //#endregion
18640
- //#region ../../node_modules/@opentelemetry/api/build/esm/trace/ProxyTracer.js
18643
+ //#region ../../node_modules/.pnpm/@opentelemetry+api@1.9.1/node_modules/@opentelemetry/api/build/esm/trace/ProxyTracer.js
18641
18644
  const NOOP_TRACER = new NoopTracer();
18642
18645
  /**
18643
18646
  * Proxy tracer provided by the proxy tracer provider
@@ -18672,7 +18675,7 @@ var ProxyTracer = class {
18672
18675
  };
18673
18676
 
18674
18677
  //#endregion
18675
- //#region ../../node_modules/@opentelemetry/api/build/esm/trace/NoopTracerProvider.js
18678
+ //#region ../../node_modules/.pnpm/@opentelemetry+api@1.9.1/node_modules/@opentelemetry/api/build/esm/trace/NoopTracerProvider.js
18676
18679
  /**
18677
18680
  * An implementation of the {@link TracerProvider} which returns an impotent
18678
18681
  * Tracer for all calls to `getTracer`.
@@ -18686,7 +18689,7 @@ var NoopTracerProvider = class {
18686
18689
  };
18687
18690
 
18688
18691
  //#endregion
18689
- //#region ../../node_modules/@opentelemetry/api/build/esm/trace/ProxyTracerProvider.js
18692
+ //#region ../../node_modules/.pnpm/@opentelemetry+api@1.9.1/node_modules/@opentelemetry/api/build/esm/trace/ProxyTracerProvider.js
18690
18693
  const NOOP_TRACER_PROVIDER = new NoopTracerProvider();
18691
18694
  /**
18692
18695
  * Tracer provider which provides {@link ProxyTracer}s.
@@ -18724,7 +18727,7 @@ var ProxyTracerProvider = class {
18724
18727
  };
18725
18728
 
18726
18729
  //#endregion
18727
- //#region ../../node_modules/@opentelemetry/api/build/esm/trace/span_kind.js
18730
+ //#region ../../node_modules/.pnpm/@opentelemetry+api@1.9.1/node_modules/@opentelemetry/api/build/esm/trace/span_kind.js
18728
18731
  /**
18729
18732
  * @since 1.0.0
18730
18733
  */
@@ -18757,7 +18760,7 @@ var SpanKind;
18757
18760
  })(SpanKind || (SpanKind = {}));
18758
18761
 
18759
18762
  //#endregion
18760
- //#region ../../node_modules/@opentelemetry/api/build/esm/trace/status.js
18763
+ //#region ../../node_modules/.pnpm/@opentelemetry+api@1.9.1/node_modules/@opentelemetry/api/build/esm/trace/status.js
18761
18764
  /**
18762
18765
  * An enumeration of status codes.
18763
18766
  *
@@ -18781,7 +18784,7 @@ var SpanStatusCode;
18781
18784
  })(SpanStatusCode || (SpanStatusCode = {}));
18782
18785
 
18783
18786
  //#endregion
18784
- //#region ../../node_modules/@opentelemetry/api/build/esm/api/trace.js
18787
+ //#region ../../node_modules/.pnpm/@opentelemetry+api@1.9.1/node_modules/@opentelemetry/api/build/esm/api/trace.js
18785
18788
  const API_NAME = "trace";
18786
18789
  /**
18787
18790
  * Singleton object which represents the entry point to the OpenTelemetry Tracing API
@@ -18836,7 +18839,7 @@ var TraceAPI = class TraceAPI {
18836
18839
  };
18837
18840
 
18838
18841
  //#endregion
18839
- //#region ../../node_modules/@opentelemetry/api/build/esm/trace-api.js
18842
+ //#region ../../node_modules/.pnpm/@opentelemetry+api@1.9.1/node_modules/@opentelemetry/api/build/esm/trace-api.js
18840
18843
  /**
18841
18844
  * Entrypoint for trace API
18842
18845
  *
@@ -18845,7 +18848,7 @@ var TraceAPI = class TraceAPI {
18845
18848
  const trace = TraceAPI.getInstance();
18846
18849
 
18847
18850
  //#endregion
18848
- //#region ../../node_modules/@arizeai/openinference-semantic-conventions/dist/esm/trace/SemanticConventions.js
18851
+ //#region ../../node_modules/.pnpm/@arizeai+openinference-semantic-conventions@2.4.0/node_modules/@arizeai/openinference-semantic-conventions/dist/esm/trace/SemanticConventions.js
18849
18852
  /**
18850
18853
  * Semantic conventions for OpenInference tracing
18851
18854
  */
@@ -20614,6 +20617,213 @@ async function executePlaywrightCode({ page, code, context, timeoutMs = PLAYWRIG
20614
20617
  }
20615
20618
  }
20616
20619
 
20620
+ //#endregion
20621
+ //#region ../../shared/observability/src/logger.ts
20622
+ function extractEventName(metadata) {
20623
+ if (!metadata) return {};
20624
+ const rawEventName = metadata.eventName;
20625
+ if (typeof rawEventName !== "string" || rawEventName.trim().length === 0) return { sanitizedMetadata: metadata };
20626
+ const { eventName: _eventName, ...restMetadata } = metadata;
20627
+ return {
20628
+ eventName: rawEventName,
20629
+ sanitizedMetadata: Object.keys(restMetadata).length > 0 ? restMetadata : void 0
20630
+ };
20631
+ }
20632
+ var Logger = class Logger {
20633
+ constructor(transports, defaultContext = { system: true }) {
20634
+ this.transports = transports;
20635
+ this.defaultContext = defaultContext;
20636
+ }
20637
+ debug(message, metadata, context) {
20638
+ this.emit("debug", message, metadata, context);
20639
+ }
20640
+ info(message, metadata, context) {
20641
+ this.emit("info", message, metadata, context);
20642
+ }
20643
+ warn(message, metadata, context) {
20644
+ this.emit("warn", message, metadata, context);
20645
+ }
20646
+ error(message, metadata, context) {
20647
+ this.emit("error", message, metadata, context);
20648
+ }
20649
+ /** Returns a new Logger instance bound to the given context. */
20650
+ withContext(context) {
20651
+ return new Logger(this.transports, context);
20652
+ }
20653
+ emit(level, message, metadata, context) {
20654
+ const { eventName, sanitizedMetadata } = extractEventName(metadata);
20655
+ const entry = {
20656
+ level,
20657
+ message,
20658
+ ...eventName ? { eventName } : {},
20659
+ context: context ?? this.defaultContext,
20660
+ timestamp: /* @__PURE__ */ new Date(),
20661
+ metadata: sanitizedMetadata
20662
+ };
20663
+ for (const transport of this.transports) try {
20664
+ const result = transport.log?.(entry);
20665
+ if (result instanceof Promise) result.catch((err) => {
20666
+ console.error(`[observability] Transport "${transport.name}" log() failed:`, err);
20667
+ });
20668
+ } catch (err) {
20669
+ console.error(`[observability] Transport "${transport.name}" log() threw:`, err);
20670
+ }
20671
+ }
20672
+ };
20673
+
20674
+ //#endregion
20675
+ //#region ../../shared/observability/src/error-serialization.ts
20676
+ const DEFAULT_MAX_DEPTH = 8;
20677
+ const DEFAULT_MAX_ARRAY_LENGTH = 100;
20678
+ const DEFAULT_MAX_OBJECT_KEYS = 100;
20679
+ const DEFAULT_MAX_STRING_LENGTH = Number.MAX_SAFE_INTEGER;
20680
+ const ERROR_FIELD_NAMES = [
20681
+ "name",
20682
+ "message",
20683
+ "code",
20684
+ "status",
20685
+ "statusCode",
20686
+ "stack"
20687
+ ];
20688
+ const ERROR_RESERVED_FIELDS = new Set([
20689
+ ...ERROR_FIELD_NAMES,
20690
+ "cause",
20691
+ "errors",
20692
+ "details"
20693
+ ]);
20694
+ function safeString(value) {
20695
+ try {
20696
+ return String(value);
20697
+ } catch {
20698
+ return "[Unstringifiable]";
20699
+ }
20700
+ }
20701
+ function createSerializationState(options = {}) {
20702
+ return {
20703
+ seen: /* @__PURE__ */ new WeakSet(),
20704
+ maxDepth: options.maxDepth ?? DEFAULT_MAX_DEPTH,
20705
+ maxArrayLength: options.maxArrayLength ?? DEFAULT_MAX_ARRAY_LENGTH,
20706
+ maxObjectKeys: options.maxObjectKeys ?? DEFAULT_MAX_OBJECT_KEYS,
20707
+ maxStringLength: options.maxStringLength ?? DEFAULT_MAX_STRING_LENGTH
20708
+ };
20709
+ }
20710
+ function truncateString(value, state) {
20711
+ if (value.length <= state.maxStringLength) return value;
20712
+ return `${value.slice(0, state.maxStringLength)}...[truncated ${value.length - state.maxStringLength} chars]`;
20713
+ }
20714
+ function readProperty(record, key) {
20715
+ try {
20716
+ return record[key];
20717
+ } catch (error) {
20718
+ return `[Unreadable property: ${error instanceof Error ? error.message : safeString(error)}]`;
20719
+ }
20720
+ }
20721
+ function hasOwnProperty(value, key) {
20722
+ return Object.prototype.hasOwnProperty.call(value, key);
20723
+ }
20724
+ function tryCustomToString(value) {
20725
+ const toStringMethod = value.toString;
20726
+ if (typeof toStringMethod !== "function" || toStringMethod === Object.prototype.toString || toStringMethod === Error.prototype.toString) return;
20727
+ try {
20728
+ const result = toStringMethod.call(value);
20729
+ return typeof result === "string" ? result : void 0;
20730
+ } catch {
20731
+ return;
20732
+ }
20733
+ }
20734
+ function toSafeValue(value, state, depth = 0) {
20735
+ if (value === null || value === void 0) return value;
20736
+ if (typeof value === "string") return truncateString(value, state);
20737
+ if (typeof value === "number" || typeof value === "boolean") return value;
20738
+ if (typeof value === "bigint") return value.toString();
20739
+ if (typeof value === "symbol") return value.toString();
20740
+ if (typeof value === "function") return `[Function ${value.name || "anonymous"}]`;
20741
+ if (value instanceof Date) return Number.isNaN(value.getTime()) ? value.toString() : value.toISOString();
20742
+ if (value instanceof Error) return serializeErrorInternal(value, state, depth);
20743
+ if (typeof value !== "object") return safeString(value);
20744
+ if (state.seen.has(value)) return "[Circular]";
20745
+ if (depth >= state.maxDepth) return "[MaxDepth]";
20746
+ state.seen.add(value);
20747
+ try {
20748
+ if (Array.isArray(value)) {
20749
+ const items = value.slice(0, state.maxArrayLength).map((item) => toSafeValue(item, state, depth + 1));
20750
+ if (value.length > state.maxArrayLength) items.push(`[Truncated ${value.length - state.maxArrayLength} items]`);
20751
+ return items;
20752
+ }
20753
+ if (value instanceof Map) return {
20754
+ type: "Map",
20755
+ entries: toSafeValue(Array.from(value.entries()), state, depth + 1)
20756
+ };
20757
+ if (value instanceof Set) return {
20758
+ type: "Set",
20759
+ values: toSafeValue(Array.from(value.values()), state, depth + 1)
20760
+ };
20761
+ const record = value;
20762
+ const output = {};
20763
+ const customToString = tryCustomToString(value);
20764
+ if (customToString) output.stringValue = truncateString(customToString, state);
20765
+ const keys = Object.keys(record);
20766
+ for (const key of keys.slice(0, state.maxObjectKeys)) output[key] = toSafeValue(readProperty(record, key), state, depth + 1);
20767
+ if (keys.length > state.maxObjectKeys) output.__truncatedKeys = keys.length - state.maxObjectKeys;
20768
+ return output;
20769
+ } finally {
20770
+ state.seen.delete(value);
20771
+ }
20772
+ }
20773
+ function copyErrorField(output, input, fieldName, state, depth) {
20774
+ if (!hasOwnProperty(input, fieldName)) return;
20775
+ const value = readProperty(input, fieldName);
20776
+ if (value !== void 0) output[fieldName] = toSafeValue(value, state, depth + 1);
20777
+ }
20778
+ function serializeErrorInternal(error, state, depth = 0) {
20779
+ if (error === null || error === void 0) return { message: safeString(error) };
20780
+ if (typeof error !== "object") return { message: safeString(error) };
20781
+ if (state.seen.has(error)) return { message: "[Circular]" };
20782
+ state.seen.add(error);
20783
+ try {
20784
+ const record = error;
20785
+ const output = {};
20786
+ if (error instanceof Error) {
20787
+ output.name = error.name;
20788
+ output.message = error.message;
20789
+ if (error.stack) output.stack = truncateString(error.stack, state);
20790
+ }
20791
+ for (const fieldName of ERROR_FIELD_NAMES) copyErrorField(output, record, fieldName, state, depth);
20792
+ const customToString = tryCustomToString(error);
20793
+ if (customToString) output.stringValue = truncateString(customToString, state);
20794
+ if (hasOwnProperty(record, "details")) output.details = toSafeValue(readProperty(record, "details"), state, depth + 1);
20795
+ if (hasOwnProperty(record, "cause")) output.cause = serializeErrorInternal(readProperty(record, "cause"), state, depth + 1);
20796
+ if (hasOwnProperty(record, "errors")) output.errors = toSafeValue(readProperty(record, "errors"), state, depth + 1);
20797
+ for (const key of Object.keys(record).slice(0, state.maxObjectKeys)) {
20798
+ if (ERROR_RESERVED_FIELDS.has(key) || key in output) continue;
20799
+ output[key] = toSafeValue(readProperty(record, key), state, depth + 1);
20800
+ }
20801
+ if (Object.keys(output).length === 0) return {
20802
+ message: safeString(error),
20803
+ value: toSafeValue(error, state, depth + 1)
20804
+ };
20805
+ return output;
20806
+ } finally {
20807
+ state.seen.delete(error);
20808
+ }
20809
+ }
20810
+ function serializeErrorLike(error, options = {}) {
20811
+ return serializeErrorInternal(error, createSerializationState(options));
20812
+ }
20813
+ function toJsonSafeValue(value, options = {}) {
20814
+ return toSafeValue(value, createSerializationState(options));
20815
+ }
20816
+ function safeJsonStringify(value, space) {
20817
+ try {
20818
+ return JSON.stringify(toJsonSafeValue(value), null, space) ?? "undefined";
20819
+ } catch (error) {
20820
+ return JSON.stringify({
20821
+ serializationError: error instanceof Error ? error.message : safeString(error),
20822
+ fallback: safeString(value)
20823
+ });
20824
+ }
20825
+ }
20826
+
20617
20827
  //#endregion
20618
20828
  //#region ../../core/bvt-agent/src/agent/utils.ts
20619
20829
  const hasUnresolvedTokens = (obj) => {
@@ -20632,6 +20842,25 @@ const formatForLog = (value) => {
20632
20842
  return String(value);
20633
20843
  }
20634
20844
  };
20845
+ const OBJECT_OBJECT_TOKEN = "[object Object]";
20846
+ const stripObjectObject = (message) => {
20847
+ const trimmed = message.trim();
20848
+ if (!trimmed.includes(OBJECT_OBJECT_TOKEN)) return trimmed;
20849
+ return trimmed.split(OBJECT_OBJECT_TOKEN).join("").replace(/[A-Za-z$_][\w$]*:\s*$/, "").replace(/[\s:]+$/, "").trim();
20850
+ };
20851
+ const getErrorMessage = (error, fallback = "Unknown error") => {
20852
+ const serialized = serializeErrorLike(error);
20853
+ const message = typeof serialized.message === "string" ? stripObjectObject(serialized.message) : "";
20854
+ if (message) return message;
20855
+ if (error !== null && typeof error === "object" && !(error instanceof Error)) {
20856
+ const json = stripObjectObject(safeJsonStringify(error));
20857
+ if (json && json !== "{}") return json;
20858
+ }
20859
+ return fallback;
20860
+ };
20861
+ const toExecutionError = (error, fallback = "Unknown error") => {
20862
+ return error instanceof Error ? error : new Error(getErrorMessage(error, fallback));
20863
+ };
20635
20864
  const getValueFromStringOrRegex = (input) => {
20636
20865
  switch (input.type) {
20637
20866
  case "string": return input.value;
@@ -20928,7 +21157,7 @@ var Tester = class {
20928
21157
  return this.pageList[this.pageList.length - 1] ?? null;
20929
21158
  }
20930
21159
  toExecutionError(error) {
20931
- return error instanceof Error ? error : new Error(String(error));
21160
+ return toExecutionError(error);
20932
21161
  }
20933
21162
  toFailureResult(error) {
20934
21163
  const executionError = this.toExecutionError(error);
@@ -20943,7 +21172,7 @@ var Tester = class {
20943
21172
  name: error.name,
20944
21173
  message: error.message
20945
21174
  };
20946
- return { message: String(error) };
21175
+ return { message: getErrorMessage(error) };
20947
21176
  }
20948
21177
  summarizeSessionForExecutionLog(session) {
20949
21178
  if (!session) return { type: "none" };
@@ -22135,7 +22364,7 @@ var Tester = class {
22135
22364
  return;
22136
22365
  } catch (error) {
22137
22366
  this.obs.logger.warn(`Action "${data.type}" failed on selector "${JSON.stringify(selectorInfo, null, 2)}". Trying next selector if available...`, error);
22138
- errors.push(error instanceof Error ? error : new Error(String(error)));
22367
+ errors.push(this.toExecutionError(error));
22139
22368
  }
22140
22369
  for (let i = 0; i < target.uniqueSelectors.length; i++) {
22141
22370
  if (i === chosenSelectorIndex) continue;
@@ -22156,7 +22385,7 @@ var Tester = class {
22156
22385
  return;
22157
22386
  } catch (error) {
22158
22387
  this.obs.logger.warn(`Action "${data.type}" failed on fallback selector "${JSON.stringify(selectorInfo, null, 2)}". Trying next selector if available...`, error);
22159
- errors.push(error instanceof Error ? error : new Error(String(error)));
22388
+ errors.push(this.toExecutionError(error));
22160
22389
  }
22161
22390
  }
22162
22391
  throw new Error(`All selectors failed for element action "${data.type}". Errors: ${errors.map((e) => e.message).join("; ")}`);
@@ -22186,7 +22415,7 @@ var Tester = class {
22186
22415
  return;
22187
22416
  } catch (error) {
22188
22417
  this.obs.logger.warn(`Assertion "${data.type}" failed on selector "${JSON.stringify(selectorInfo, null, 2)}". Trying next selector if available...`, error);
22189
- errors.push(error instanceof Error ? error : new Error(String(error)));
22418
+ errors.push(this.toExecutionError(error));
22190
22419
  }
22191
22420
  for (let i = 0; i < target.uniqueSelectors.length; i++) {
22192
22421
  if (i === chosenSelectorIndex) continue;
@@ -22206,7 +22435,7 @@ var Tester = class {
22206
22435
  return;
22207
22436
  } catch (error) {
22208
22437
  this.obs.logger.warn(`Assertion "${data.type}" failed on fallback selector "${JSON.stringify(selectorInfo, null, 2)}". Trying next selector if available...`, error);
22209
- errors.push(error instanceof Error ? error : new Error(String(error)));
22438
+ errors.push(this.toExecutionError(error));
22210
22439
  }
22211
22440
  }
22212
22441
  throw new Error(`All selectors failed for element assertion "${data.type}". Errors: ${errors.map((e) => e.message).join("; ")}`);
@@ -22232,7 +22461,7 @@ var Tester = class {
22232
22461
  return;
22233
22462
  } catch (error) {
22234
22463
  this.obs.logger.warn(`Extraction "${extract.type}" failed on selector "${JSON.stringify(selectorInfo, null, 2)}". Trying next selector if available...`, error);
22235
- errors.push(error instanceof Error ? error : new Error(String(error)));
22464
+ errors.push(this.toExecutionError(error));
22236
22465
  }
22237
22466
  for (let i = 0; i < target.uniqueSelectors.length; i++) {
22238
22467
  if (i === chosenSelectorIndex) continue;
@@ -22245,7 +22474,7 @@ var Tester = class {
22245
22474
  return;
22246
22475
  } catch (error) {
22247
22476
  this.obs.logger.warn(`Extraction "${extract.type}" failed on fallback selector "${JSON.stringify(fallbackSelectorInfo, null, 2)}". Trying next selector if available...`, error);
22248
- errors.push(error instanceof Error ? error : new Error(String(error)));
22477
+ errors.push(this.toExecutionError(error));
22249
22478
  }
22250
22479
  }
22251
22480
  throw new Error(`All selectors failed for element extraction "${extract.type}". Errors: ${errors.map((e) => e.message).join("; ")}`);
@@ -22528,101 +22757,6 @@ function createStepParameterPreprocessor() {
22528
22757
  };
22529
22758
  }
22530
22759
 
22531
- //#endregion
22532
- //#region ../../core/bvt-agent/src/agent/data-resolver.preprocessor.ts
22533
- function createDataResolverPreprocessor(resolver) {
22534
- return async (command, context) => {
22535
- if (!context.resolutionContext) return command;
22536
- if (command.type === "custom" && typeof command.code === "string" && !command.code.includes("{{")) {
22537
- const { code, ...rest } = command;
22538
- return {
22539
- ...await resolver.resolveObject(rest, context.resolutionContext),
22540
- code
22541
- };
22542
- }
22543
- if (command.type === "custom.code" && typeof command.code === "string") {
22544
- const { code, ...rest } = command;
22545
- return {
22546
- ...await resolver.resolveObject(rest, context.resolutionContext),
22547
- code
22548
- };
22549
- }
22550
- return resolver.resolveObject(command, context.resolutionContext);
22551
- };
22552
- }
22553
-
22554
- //#endregion
22555
- //#region ../../shared/observability/src/logger.ts
22556
- function extractEventName(metadata) {
22557
- if (!metadata) return {};
22558
- const rawEventName = metadata.eventName;
22559
- if (typeof rawEventName !== "string" || rawEventName.trim().length === 0) return { sanitizedMetadata: metadata };
22560
- const { eventName: _eventName, ...restMetadata } = metadata;
22561
- return {
22562
- eventName: rawEventName,
22563
- sanitizedMetadata: Object.keys(restMetadata).length > 0 ? restMetadata : void 0
22564
- };
22565
- }
22566
- var Logger = class Logger {
22567
- constructor(transports, defaultContext = { system: true }) {
22568
- this.transports = transports;
22569
- this.defaultContext = defaultContext;
22570
- }
22571
- debug(message, metadata, context) {
22572
- this.emit("debug", message, metadata, context);
22573
- }
22574
- info(message, metadata, context) {
22575
- this.emit("info", message, metadata, context);
22576
- }
22577
- warn(message, metadata, context) {
22578
- this.emit("warn", message, metadata, context);
22579
- }
22580
- error(message, metadata, context) {
22581
- this.emit("error", message, metadata, context);
22582
- }
22583
- /** Returns a new Logger instance bound to the given context. */
22584
- withContext(context) {
22585
- return new Logger(this.transports, context);
22586
- }
22587
- emit(level, message, metadata, context) {
22588
- const { eventName, sanitizedMetadata } = extractEventName(metadata);
22589
- const entry = {
22590
- level,
22591
- message,
22592
- ...eventName ? { eventName } : {},
22593
- context: context ?? this.defaultContext,
22594
- timestamp: /* @__PURE__ */ new Date(),
22595
- metadata: sanitizedMetadata
22596
- };
22597
- for (const transport of this.transports) try {
22598
- const result = transport.log?.(entry);
22599
- if (result instanceof Promise) result.catch((err) => {
22600
- console.error(`[observability] Transport "${transport.name}" log() failed:`, err);
22601
- });
22602
- } catch (err) {
22603
- console.error(`[observability] Transport "${transport.name}" log() threw:`, err);
22604
- }
22605
- }
22606
- };
22607
-
22608
- //#endregion
22609
- //#region ../../shared/observability/src/error-serialization.ts
22610
- const DEFAULT_MAX_STRING_LENGTH = Number.MAX_SAFE_INTEGER;
22611
- const ERROR_FIELD_NAMES = [
22612
- "name",
22613
- "message",
22614
- "code",
22615
- "status",
22616
- "statusCode",
22617
- "stack"
22618
- ];
22619
- const ERROR_RESERVED_FIELDS = new Set([
22620
- ...ERROR_FIELD_NAMES,
22621
- "cause",
22622
- "errors",
22623
- "details"
22624
- ]);
22625
-
22626
22760
  //#endregion
22627
22761
  //#region ../../core/data-resolver/src/types.ts
22628
22762
  var CircularDependencyError = class extends Error {
@@ -22946,7 +23080,7 @@ function parsePath(path) {
22946
23080
  }
22947
23081
 
22948
23082
  //#endregion
22949
- //#region ../../node_modules/dlv/dist/dlv.js
23083
+ //#region ../../node_modules/.pnpm/dlv@1.1.3/node_modules/dlv/dist/dlv.js
22950
23084
  var require_dlv = /* @__PURE__ */ __commonJSMin(((exports, module) => {
22951
23085
  module.exports = function(t, e, l, n, o) {
22952
23086
  for (e = e.split ? e.split(".") : e, n = 0; n < e.length; n++) t = t ? t[e[n]] : o;
@@ -23034,7 +23168,7 @@ async function decrypt(encrypted, keyMaterial) {
23034
23168
  * @returns 6-digit TOTP code as a string
23035
23169
  */
23036
23170
  async function generateTOTP(seed) {
23037
- const { TOTP } = await import("./otpauth.node-k0uQ9qOV.mjs");
23171
+ const { TOTP } = await import("./otpauth.node-flL8gowF.mjs");
23038
23172
  return new TOTP({
23039
23173
  secret: seed,
23040
23174
  digits: 6,
@@ -23074,6 +23208,7 @@ var DataResolver = class {
23074
23208
  encryptionKey;
23075
23209
  decryptSecret;
23076
23210
  decryptTotpSeed;
23211
+ skipJSNormalization;
23077
23212
  constructor(scopeManager, evaluatorRegistry, options) {
23078
23213
  this.scopeManager = scopeManager;
23079
23214
  this.registry = evaluatorRegistry;
@@ -23081,6 +23216,7 @@ var DataResolver = class {
23081
23216
  this.encryptionKey = options?.encryptionKey;
23082
23217
  this.decryptSecret = options?.decryptSecret;
23083
23218
  this.decryptTotpSeed = options?.decryptTotpSeed;
23219
+ this.skipJSNormalization = options?.skipJSNormalization ?? false;
23084
23220
  this.logger = options?.logger ?? silentLogger;
23085
23221
  if (!this.registry.has("literal")) this.registry.register(new LiteralEvaluator());
23086
23222
  }
@@ -23127,7 +23263,12 @@ var DataResolver = class {
23127
23263
  return this.resolveValue(input, new ResolutionStack(), [], [], log, context);
23128
23264
  }
23129
23265
  async resolveString(input, stack, warnings, usedKeys, log, context) {
23130
- const normalized = normalizeJSTokens(input);
23266
+ const normalized = this.skipJSNormalization ? input : normalizeJSTokens(input);
23267
+ if (normalized !== input && !this.skipJSNormalization) log.warn("[DataResolver] ${...} shorthand is deprecated — use {{js:...}} instead", {
23268
+ input,
23269
+ normalized,
23270
+ projectId: context?.projectId
23271
+ });
23131
23272
  if (!hasTokens(normalized)) return input;
23132
23273
  if (stack.depth >= this.maxRecursionDepth) {
23133
23274
  const message = `Maximum recursion depth (${this.maxRecursionDepth}) reached`;
@@ -23596,7 +23737,7 @@ var FakerEvaluator = class {
23596
23737
  this.fakerInstance = faker;
23597
23738
  return faker;
23598
23739
  } catch {
23599
- const { faker } = await import("./en-Bp7eyprf.mjs");
23740
+ const { faker } = await import("./en-KbNSnMPf.mjs");
23600
23741
  this.fakerInstance = faker;
23601
23742
  return faker;
23602
23743
  }
@@ -23670,7 +23811,7 @@ var FakerEvaluator = class {
23670
23811
  };
23671
23812
 
23672
23813
  //#endregion
23673
- //#region ../../node_modules/jsep/dist/jsep.js
23814
+ //#region ../../node_modules/.pnpm/jsep@1.4.0/node_modules/jsep/dist/jsep.js
23674
23815
  /**
23675
23816
  * @implements {IHooks}
23676
23817
  */
@@ -25034,35 +25175,2614 @@ var JSEvaluator = class {
25034
25175
  };
25035
25176
 
25036
25177
  //#endregion
25037
- //#region ../../core/data-resolver/src/evaluators/date-evaluator.ts
25038
- /**
25039
- * DateEvaluator: Parses and formats dates using chrono-node.
25040
- * Supports natural language like "today", "tomorrow", or "next Friday".
25041
- *
25042
- * Syntax: `{{date:tomorrow|iso}}` or `{{date:today}}`
25043
- */
25044
- var DateEvaluator = class {
25045
- prefix = "date";
25046
- async evaluate(expression, _scopeValues) {
25047
- return `[Date expression: ${expression}]`;
25048
- }
25049
- };
25178
+ //#region ../../node_modules/.pnpm/chrono-node@2.9.0/node_modules/chrono-node/dist/esm/types.js
25179
+ var Meridiem;
25180
+ (function(Meridiem) {
25181
+ Meridiem[Meridiem["AM"] = 0] = "AM";
25182
+ Meridiem[Meridiem["PM"] = 1] = "PM";
25183
+ })(Meridiem || (Meridiem = {}));
25184
+ var Weekday;
25185
+ (function(Weekday) {
25186
+ Weekday[Weekday["SUNDAY"] = 0] = "SUNDAY";
25187
+ Weekday[Weekday["MONDAY"] = 1] = "MONDAY";
25188
+ Weekday[Weekday["TUESDAY"] = 2] = "TUESDAY";
25189
+ Weekday[Weekday["WEDNESDAY"] = 3] = "WEDNESDAY";
25190
+ Weekday[Weekday["THURSDAY"] = 4] = "THURSDAY";
25191
+ Weekday[Weekday["FRIDAY"] = 5] = "FRIDAY";
25192
+ Weekday[Weekday["SATURDAY"] = 6] = "SATURDAY";
25193
+ })(Weekday || (Weekday = {}));
25194
+ var Month;
25195
+ (function(Month) {
25196
+ Month[Month["JANUARY"] = 1] = "JANUARY";
25197
+ Month[Month["FEBRUARY"] = 2] = "FEBRUARY";
25198
+ Month[Month["MARCH"] = 3] = "MARCH";
25199
+ Month[Month["APRIL"] = 4] = "APRIL";
25200
+ Month[Month["MAY"] = 5] = "MAY";
25201
+ Month[Month["JUNE"] = 6] = "JUNE";
25202
+ Month[Month["JULY"] = 7] = "JULY";
25203
+ Month[Month["AUGUST"] = 8] = "AUGUST";
25204
+ Month[Month["SEPTEMBER"] = 9] = "SEPTEMBER";
25205
+ Month[Month["OCTOBER"] = 10] = "OCTOBER";
25206
+ Month[Month["NOVEMBER"] = 11] = "NOVEMBER";
25207
+ Month[Month["DECEMBER"] = 12] = "DECEMBER";
25208
+ })(Month || (Month = {}));
25050
25209
 
25051
25210
  //#endregion
25052
- //#region ../../core/bvt-agent/src/agent/ai-chat-code-token.preprocessor.ts
25053
- var UnknownKeyError = class extends Error {
25054
- constructor(key) {
25055
- super(`Unknown test-data key in ai-chat generated code: ${key}`);
25056
- this.key = key;
25057
- this.name = "UnknownKeyError";
25211
+ //#region ../../node_modules/.pnpm/chrono-node@2.9.0/node_modules/chrono-node/dist/esm/utils/dates.js
25212
+ function assignSimilarDate(component, target) {
25213
+ component.assign("day", target.getDate());
25214
+ component.assign("month", target.getMonth() + 1);
25215
+ component.assign("year", target.getFullYear());
25216
+ }
25217
+ function assignSimilarTime(component, target) {
25218
+ component.assign("hour", target.getHours());
25219
+ component.assign("minute", target.getMinutes());
25220
+ component.assign("second", target.getSeconds());
25221
+ component.assign("millisecond", target.getMilliseconds());
25222
+ component.assign("meridiem", target.getHours() < 12 ? Meridiem.AM : Meridiem.PM);
25223
+ }
25224
+ function implySimilarDate(component, target) {
25225
+ component.imply("day", target.getDate());
25226
+ component.imply("month", target.getMonth() + 1);
25227
+ component.imply("year", target.getFullYear());
25228
+ }
25229
+ function implySimilarTime(component, target) {
25230
+ component.imply("hour", target.getHours());
25231
+ component.imply("minute", target.getMinutes());
25232
+ component.imply("second", target.getSeconds());
25233
+ component.imply("millisecond", target.getMilliseconds());
25234
+ component.imply("meridiem", target.getHours() < 12 ? Meridiem.AM : Meridiem.PM);
25235
+ }
25236
+
25237
+ //#endregion
25238
+ //#region ../../node_modules/.pnpm/chrono-node@2.9.0/node_modules/chrono-node/dist/esm/timezone.js
25239
+ const TIMEZONE_ABBR_MAP = {
25240
+ ACDT: 630,
25241
+ ACST: 570,
25242
+ ADT: -180,
25243
+ AEDT: 660,
25244
+ AEST: 600,
25245
+ AFT: 270,
25246
+ AKDT: -480,
25247
+ AKST: -540,
25248
+ ALMT: 360,
25249
+ AMST: -180,
25250
+ AMT: -240,
25251
+ ANAST: 720,
25252
+ ANAT: 720,
25253
+ AQTT: 300,
25254
+ ART: -180,
25255
+ AST: -240,
25256
+ AWDT: 540,
25257
+ AWST: 480,
25258
+ AZOST: 0,
25259
+ AZOT: -60,
25260
+ AZST: 300,
25261
+ AZT: 240,
25262
+ BNT: 480,
25263
+ BOT: -240,
25264
+ BRST: -120,
25265
+ BRT: -180,
25266
+ BST: 60,
25267
+ BTT: 360,
25268
+ CAST: 480,
25269
+ CAT: 120,
25270
+ CCT: 390,
25271
+ CDT: -300,
25272
+ CEST: 120,
25273
+ CET: {
25274
+ timezoneOffsetDuringDst: 120,
25275
+ timezoneOffsetNonDst: 60,
25276
+ dstStart: (year) => getLastWeekdayOfMonth(year, Month.MARCH, Weekday.SUNDAY, 2),
25277
+ dstEnd: (year) => getLastWeekdayOfMonth(year, Month.OCTOBER, Weekday.SUNDAY, 3)
25278
+ },
25279
+ CHADT: 825,
25280
+ CHAST: 765,
25281
+ CKT: -600,
25282
+ CLST: -180,
25283
+ CLT: -240,
25284
+ COT: -300,
25285
+ CST: -360,
25286
+ CT: {
25287
+ timezoneOffsetDuringDst: -300,
25288
+ timezoneOffsetNonDst: -360,
25289
+ dstStart: (year) => getNthWeekdayOfMonth(year, Month.MARCH, Weekday.SUNDAY, 2, 2),
25290
+ dstEnd: (year) => getNthWeekdayOfMonth(year, Month.NOVEMBER, Weekday.SUNDAY, 1, 2)
25291
+ },
25292
+ CVT: -60,
25293
+ CXT: 420,
25294
+ ChST: 600,
25295
+ DAVT: 420,
25296
+ EASST: -300,
25297
+ EAST: -360,
25298
+ EAT: 180,
25299
+ ECT: -300,
25300
+ EDT: -240,
25301
+ EEST: 180,
25302
+ EET: 120,
25303
+ EGST: 0,
25304
+ EGT: -60,
25305
+ EST: -300,
25306
+ ET: {
25307
+ timezoneOffsetDuringDst: -240,
25308
+ timezoneOffsetNonDst: -300,
25309
+ dstStart: (year) => getNthWeekdayOfMonth(year, Month.MARCH, Weekday.SUNDAY, 2, 2),
25310
+ dstEnd: (year) => getNthWeekdayOfMonth(year, Month.NOVEMBER, Weekday.SUNDAY, 1, 2)
25311
+ },
25312
+ FJST: 780,
25313
+ FJT: 720,
25314
+ FKST: -180,
25315
+ FKT: -240,
25316
+ FNT: -120,
25317
+ GALT: -360,
25318
+ GAMT: -540,
25319
+ GET: 240,
25320
+ GFT: -180,
25321
+ GILT: 720,
25322
+ GMT: 0,
25323
+ GST: 240,
25324
+ GYT: -240,
25325
+ HAA: -180,
25326
+ HAC: -300,
25327
+ HADT: -540,
25328
+ HAE: -240,
25329
+ HAP: -420,
25330
+ HAR: -360,
25331
+ HAST: -600,
25332
+ HAT: -90,
25333
+ HAY: -480,
25334
+ HKT: 480,
25335
+ HLV: -210,
25336
+ HNA: -240,
25337
+ HNC: -360,
25338
+ HNE: -300,
25339
+ HNP: -480,
25340
+ HNR: -420,
25341
+ HNT: -150,
25342
+ HNY: -540,
25343
+ HOVT: 420,
25344
+ ICT: 420,
25345
+ IDT: 180,
25346
+ IOT: 360,
25347
+ IRDT: 270,
25348
+ IRKST: 540,
25349
+ IRKT: 540,
25350
+ IRST: 210,
25351
+ IST: 330,
25352
+ JST: 540,
25353
+ KGT: 360,
25354
+ KRAST: 480,
25355
+ KRAT: 480,
25356
+ KST: 540,
25357
+ KUYT: 240,
25358
+ LHDT: 660,
25359
+ LHST: 630,
25360
+ LINT: 840,
25361
+ MAGST: 720,
25362
+ MAGT: 720,
25363
+ MART: -510,
25364
+ MAWT: 300,
25365
+ MDT: -360,
25366
+ MESZ: 120,
25367
+ MEZ: 60,
25368
+ MHT: 720,
25369
+ MMT: 390,
25370
+ MSD: 240,
25371
+ MSK: 180,
25372
+ MST: -420,
25373
+ MT: {
25374
+ timezoneOffsetDuringDst: -360,
25375
+ timezoneOffsetNonDst: -420,
25376
+ dstStart: (year) => getNthWeekdayOfMonth(year, Month.MARCH, Weekday.SUNDAY, 2, 2),
25377
+ dstEnd: (year) => getNthWeekdayOfMonth(year, Month.NOVEMBER, Weekday.SUNDAY, 1, 2)
25378
+ },
25379
+ MUT: 240,
25380
+ MVT: 300,
25381
+ MYT: 480,
25382
+ NCT: 660,
25383
+ NDT: -90,
25384
+ NFT: 690,
25385
+ NOVST: 420,
25386
+ NOVT: 360,
25387
+ NPT: 345,
25388
+ NST: -150,
25389
+ NUT: -660,
25390
+ NZDT: 780,
25391
+ NZST: 720,
25392
+ OMSST: 420,
25393
+ OMST: 420,
25394
+ PDT: -420,
25395
+ PET: -300,
25396
+ PETST: 720,
25397
+ PETT: 720,
25398
+ PGT: 600,
25399
+ PHOT: 780,
25400
+ PHT: 480,
25401
+ PKT: 300,
25402
+ PMDT: -120,
25403
+ PMST: -180,
25404
+ PONT: 660,
25405
+ PST: -480,
25406
+ PT: {
25407
+ timezoneOffsetDuringDst: -420,
25408
+ timezoneOffsetNonDst: -480,
25409
+ dstStart: (year) => getNthWeekdayOfMonth(year, Month.MARCH, Weekday.SUNDAY, 2, 2),
25410
+ dstEnd: (year) => getNthWeekdayOfMonth(year, Month.NOVEMBER, Weekday.SUNDAY, 1, 2)
25411
+ },
25412
+ PWT: 540,
25413
+ PYST: -180,
25414
+ PYT: -240,
25415
+ RET: 240,
25416
+ SAMT: 240,
25417
+ SAST: 120,
25418
+ SBT: 660,
25419
+ SCT: 240,
25420
+ SGT: 480,
25421
+ SRT: -180,
25422
+ SST: -660,
25423
+ TAHT: -600,
25424
+ TFT: 300,
25425
+ TJT: 300,
25426
+ TKT: 780,
25427
+ TLT: 540,
25428
+ TMT: 300,
25429
+ TVT: 720,
25430
+ ULAT: 480,
25431
+ UTC: 0,
25432
+ UYST: -120,
25433
+ UYT: -180,
25434
+ UZT: 300,
25435
+ VET: -210,
25436
+ VLAST: 660,
25437
+ VLAT: 660,
25438
+ VUT: 660,
25439
+ WAST: 120,
25440
+ WAT: 60,
25441
+ WEST: 60,
25442
+ WESZ: 60,
25443
+ WET: 0,
25444
+ WEZ: 0,
25445
+ WFT: 720,
25446
+ WGST: -120,
25447
+ WGT: -180,
25448
+ WIB: 420,
25449
+ WIT: 540,
25450
+ WITA: 480,
25451
+ WST: 780,
25452
+ WT: 0,
25453
+ YAKST: 600,
25454
+ YAKT: 600,
25455
+ YAPT: 600,
25456
+ YEKST: 360,
25457
+ YEKT: 360
25458
+ };
25459
+ function getNthWeekdayOfMonth(year, month, weekday, n, hour = 0) {
25460
+ let dayOfMonth = 0;
25461
+ let i = 0;
25462
+ while (i < n) {
25463
+ dayOfMonth++;
25464
+ if (new Date(year, month - 1, dayOfMonth).getDay() === weekday) i++;
25465
+ }
25466
+ return new Date(year, month - 1, dayOfMonth, hour);
25467
+ }
25468
+ function getLastWeekdayOfMonth(year, month, weekday, hour = 0) {
25469
+ const oneIndexedWeekday = weekday === 0 ? 7 : weekday;
25470
+ const date = new Date(year, month - 1 + 1, 1, 12);
25471
+ const firstWeekdayNextMonth = date.getDay() === 0 ? 7 : date.getDay();
25472
+ let dayDiff;
25473
+ if (firstWeekdayNextMonth === oneIndexedWeekday) dayDiff = 7;
25474
+ else if (firstWeekdayNextMonth < oneIndexedWeekday) dayDiff = 7 + firstWeekdayNextMonth - oneIndexedWeekday;
25475
+ else dayDiff = firstWeekdayNextMonth - oneIndexedWeekday;
25476
+ date.setDate(date.getDate() - dayDiff);
25477
+ return new Date(year, month - 1, date.getDate(), hour);
25478
+ }
25479
+ function toTimezoneOffset(timezoneInput, date, timezoneOverrides = {}) {
25480
+ if (timezoneInput == null) return null;
25481
+ if (typeof timezoneInput === "number") return timezoneInput;
25482
+ const matchedTimezone = timezoneOverrides[timezoneInput] ?? TIMEZONE_ABBR_MAP[timezoneInput];
25483
+ if (matchedTimezone == null) return null;
25484
+ if (typeof matchedTimezone == "number") return matchedTimezone;
25485
+ if (date == null) return null;
25486
+ if (date > matchedTimezone.dstStart(date.getFullYear()) && !(date > matchedTimezone.dstEnd(date.getFullYear()))) return matchedTimezone.timezoneOffsetDuringDst;
25487
+ return matchedTimezone.timezoneOffsetNonDst;
25488
+ }
25489
+
25490
+ //#endregion
25491
+ //#region ../../node_modules/.pnpm/chrono-node@2.9.0/node_modules/chrono-node/dist/esm/calculation/duration.js
25492
+ const EmptyDuration = {
25493
+ day: 0,
25494
+ second: 0,
25495
+ millisecond: 0
25496
+ };
25497
+ function addDuration(ref, duration) {
25498
+ let date = new Date(ref);
25499
+ if (duration["y"]) {
25500
+ duration["year"] = duration["y"];
25501
+ delete duration["y"];
25502
+ }
25503
+ if (duration["mo"]) {
25504
+ duration["month"] = duration["mo"];
25505
+ delete duration["mo"];
25506
+ }
25507
+ if (duration["M"]) {
25508
+ duration["month"] = duration["M"];
25509
+ delete duration["M"];
25510
+ }
25511
+ if (duration["w"]) {
25512
+ duration["week"] = duration["w"];
25513
+ delete duration["w"];
25514
+ }
25515
+ if (duration["d"]) {
25516
+ duration["day"] = duration["d"];
25517
+ delete duration["d"];
25518
+ }
25519
+ if (duration["h"]) {
25520
+ duration["hour"] = duration["h"];
25521
+ delete duration["h"];
25522
+ }
25523
+ if (duration["m"]) {
25524
+ duration["minute"] = duration["m"];
25525
+ delete duration["m"];
25526
+ }
25527
+ if (duration["s"]) {
25528
+ duration["second"] = duration["s"];
25529
+ delete duration["s"];
25530
+ }
25531
+ if (duration["ms"]) {
25532
+ duration["millisecond"] = duration["ms"];
25533
+ delete duration["ms"];
25534
+ }
25535
+ if ("year" in duration) {
25536
+ const floor = Math.floor(duration["year"]);
25537
+ date.setFullYear(date.getFullYear() + floor);
25538
+ const remainingFraction = duration["year"] - floor;
25539
+ if (remainingFraction > 0) {
25540
+ duration.month = duration?.month ?? 0;
25541
+ duration.month += remainingFraction * 12;
25542
+ }
25543
+ }
25544
+ if ("quarter" in duration) {
25545
+ const floor = Math.floor(duration["quarter"]);
25546
+ date.setMonth(date.getMonth() + floor * 3);
25547
+ }
25548
+ if ("month" in duration) {
25549
+ const floor = Math.floor(duration["month"]);
25550
+ date.setMonth(date.getMonth() + floor);
25551
+ const remainingFraction = duration["month"] - floor;
25552
+ if (remainingFraction > 0) {
25553
+ duration.week = duration?.week ?? 0;
25554
+ duration.week += remainingFraction * 4;
25555
+ }
25556
+ }
25557
+ if ("week" in duration) {
25558
+ const floor = Math.floor(duration["week"]);
25559
+ date.setDate(date.getDate() + floor * 7);
25560
+ const remainingFraction = duration["week"] - floor;
25561
+ if (remainingFraction > 0) {
25562
+ duration.day = duration?.day ?? 0;
25563
+ duration.day += Math.round(remainingFraction * 7);
25564
+ }
25565
+ }
25566
+ if ("day" in duration) {
25567
+ const floor = Math.floor(duration["day"]);
25568
+ date.setDate(date.getDate() + floor);
25569
+ const remainingFraction = duration["day"] - floor;
25570
+ if (remainingFraction > 0) {
25571
+ duration.hour = duration?.hour ?? 0;
25572
+ duration.hour += Math.round(remainingFraction * 24);
25573
+ }
25574
+ }
25575
+ if ("hour" in duration) {
25576
+ const floor = Math.floor(duration["hour"]);
25577
+ date.setHours(date.getHours() + floor);
25578
+ const remainingFraction = duration["hour"] - floor;
25579
+ if (remainingFraction > 0) {
25580
+ duration.minute = duration?.minute ?? 0;
25581
+ duration.minute += Math.round(remainingFraction * 60);
25582
+ }
25583
+ }
25584
+ if ("minute" in duration) {
25585
+ const floor = Math.floor(duration["minute"]);
25586
+ date.setMinutes(date.getMinutes() + floor);
25587
+ const remainingFraction = duration["minute"] - floor;
25588
+ if (remainingFraction > 0) {
25589
+ duration.second = duration?.second ?? 0;
25590
+ duration.second += Math.round(remainingFraction * 60);
25591
+ }
25592
+ }
25593
+ if ("second" in duration) {
25594
+ const floor = Math.floor(duration["second"]);
25595
+ date.setSeconds(date.getSeconds() + floor);
25596
+ const remainingFraction = duration["second"] - floor;
25597
+ if (remainingFraction > 0) {
25598
+ duration.millisecond = duration?.millisecond ?? 0;
25599
+ duration.millisecond += Math.round(remainingFraction * 1e3);
25600
+ }
25601
+ }
25602
+ if ("millisecond" in duration) {
25603
+ const floor = Math.floor(duration["millisecond"]);
25604
+ date.setMilliseconds(date.getMilliseconds() + floor);
25605
+ }
25606
+ return date;
25607
+ }
25608
+ function reverseDuration(duration) {
25609
+ const reversed = {};
25610
+ for (const key in duration) reversed[key] = -duration[key];
25611
+ return reversed;
25612
+ }
25613
+
25614
+ //#endregion
25615
+ //#region ../../node_modules/.pnpm/chrono-node@2.9.0/node_modules/chrono-node/dist/esm/results.js
25616
+ var ReferenceWithTimezone = class ReferenceWithTimezone {
25617
+ instant;
25618
+ timezoneOffset;
25619
+ constructor(instant, timezoneOffset) {
25620
+ this.instant = instant ?? /* @__PURE__ */ new Date();
25621
+ this.timezoneOffset = timezoneOffset ?? null;
25622
+ }
25623
+ static fromDate(date) {
25624
+ return new ReferenceWithTimezone(date);
25625
+ }
25626
+ static fromInput(input, timezoneOverrides) {
25627
+ if (input instanceof Date) return ReferenceWithTimezone.fromDate(input);
25628
+ const instant = input?.instant ?? /* @__PURE__ */ new Date();
25629
+ return new ReferenceWithTimezone(instant, toTimezoneOffset(input?.timezone, instant, timezoneOverrides));
25630
+ }
25631
+ getDateWithAdjustedTimezone() {
25632
+ const date = new Date(this.instant);
25633
+ if (this.timezoneOffset !== null) date.setMinutes(date.getMinutes() - this.getSystemTimezoneAdjustmentMinute(this.instant));
25634
+ return date;
25635
+ }
25636
+ getSystemTimezoneAdjustmentMinute(date, overrideTimezoneOffset) {
25637
+ if (!date || date.getTime() < 0) date = /* @__PURE__ */ new Date();
25638
+ const currentTimezoneOffset = -date.getTimezoneOffset();
25639
+ return currentTimezoneOffset - (overrideTimezoneOffset ?? this.timezoneOffset ?? currentTimezoneOffset);
25640
+ }
25641
+ getTimezoneOffset() {
25642
+ return this.timezoneOffset ?? -this.instant.getTimezoneOffset();
25643
+ }
25644
+ };
25645
+ var ParsingComponents = class ParsingComponents {
25646
+ knownValues;
25647
+ impliedValues;
25648
+ reference;
25649
+ _tags = /* @__PURE__ */ new Set();
25650
+ constructor(reference, knownComponents) {
25651
+ this.reference = reference;
25652
+ this.knownValues = {};
25653
+ this.impliedValues = {};
25654
+ if (knownComponents) for (const key in knownComponents) this.knownValues[key] = knownComponents[key];
25655
+ const date = reference.getDateWithAdjustedTimezone();
25656
+ this.imply("day", date.getDate());
25657
+ this.imply("month", date.getMonth() + 1);
25658
+ this.imply("year", date.getFullYear());
25659
+ this.imply("hour", 12);
25660
+ this.imply("minute", 0);
25661
+ this.imply("second", 0);
25662
+ this.imply("millisecond", 0);
25663
+ }
25664
+ static createRelativeFromReference(reference, duration = EmptyDuration) {
25665
+ let date = addDuration(reference.getDateWithAdjustedTimezone(), duration);
25666
+ const components = new ParsingComponents(reference);
25667
+ components.addTag("result/relativeDate");
25668
+ if ("hour" in duration || "minute" in duration || "second" in duration || "millisecond" in duration) {
25669
+ components.addTag("result/relativeDateAndTime");
25670
+ assignSimilarTime(components, date);
25671
+ assignSimilarDate(components, date);
25672
+ components.assign("timezoneOffset", reference.getTimezoneOffset());
25673
+ } else {
25674
+ implySimilarTime(components, date);
25675
+ components.imply("timezoneOffset", reference.getTimezoneOffset());
25676
+ if ("day" in duration) {
25677
+ components.assign("day", date.getDate());
25678
+ components.assign("month", date.getMonth() + 1);
25679
+ components.assign("year", date.getFullYear());
25680
+ components.assign("weekday", date.getDay());
25681
+ } else if ("week" in duration) {
25682
+ components.assign("day", date.getDate());
25683
+ components.assign("month", date.getMonth() + 1);
25684
+ components.assign("year", date.getFullYear());
25685
+ components.imply("weekday", date.getDay());
25686
+ } else {
25687
+ components.imply("day", date.getDate());
25688
+ if ("month" in duration) {
25689
+ components.assign("month", date.getMonth() + 1);
25690
+ components.assign("year", date.getFullYear());
25691
+ } else {
25692
+ components.imply("month", date.getMonth() + 1);
25693
+ if ("year" in duration) components.assign("year", date.getFullYear());
25694
+ else components.imply("year", date.getFullYear());
25695
+ }
25696
+ }
25697
+ }
25698
+ return components;
25058
25699
  }
25059
- toString() {
25060
- return `${this.name}: ${this.message}`;
25700
+ get(component) {
25701
+ if (component in this.knownValues) return this.knownValues[component];
25702
+ if (component in this.impliedValues) return this.impliedValues[component];
25703
+ return null;
25061
25704
  }
25062
- };
25063
- function scanJsContext(source) {
25064
- const stateAt = Array.from({ length: source.length });
25065
- const stringLiterals = [];
25705
+ isCertain(component) {
25706
+ return component in this.knownValues;
25707
+ }
25708
+ getCertainComponents() {
25709
+ return Object.keys(this.knownValues);
25710
+ }
25711
+ imply(component, value) {
25712
+ if (component in this.knownValues) return this;
25713
+ this.impliedValues[component] = value;
25714
+ return this;
25715
+ }
25716
+ assign(component, value) {
25717
+ this.knownValues[component] = value;
25718
+ delete this.impliedValues[component];
25719
+ return this;
25720
+ }
25721
+ addDurationAsImplied(duration) {
25722
+ const date = addDuration(this.dateWithoutTimezoneAdjustment(), duration);
25723
+ if ("day" in duration || "week" in duration || "month" in duration || "year" in duration) {
25724
+ this.delete([
25725
+ "day",
25726
+ "weekday",
25727
+ "month",
25728
+ "year"
25729
+ ]);
25730
+ this.imply("day", date.getDate());
25731
+ this.imply("weekday", date.getDay());
25732
+ this.imply("month", date.getMonth() + 1);
25733
+ this.imply("year", date.getFullYear());
25734
+ }
25735
+ if ("second" in duration || "minute" in duration || "hour" in duration) {
25736
+ this.delete([
25737
+ "second",
25738
+ "minute",
25739
+ "hour"
25740
+ ]);
25741
+ this.imply("second", date.getSeconds());
25742
+ this.imply("minute", date.getMinutes());
25743
+ this.imply("hour", date.getHours());
25744
+ }
25745
+ return this;
25746
+ }
25747
+ delete(components) {
25748
+ if (typeof components === "string") components = [components];
25749
+ for (const component of components) {
25750
+ delete this.knownValues[component];
25751
+ delete this.impliedValues[component];
25752
+ }
25753
+ }
25754
+ clone() {
25755
+ const component = new ParsingComponents(this.reference);
25756
+ component.knownValues = {};
25757
+ component.impliedValues = {};
25758
+ for (const key in this.knownValues) component.knownValues[key] = this.knownValues[key];
25759
+ for (const key in this.impliedValues) component.impliedValues[key] = this.impliedValues[key];
25760
+ return component;
25761
+ }
25762
+ isOnlyDate() {
25763
+ return !this.isCertain("hour") && !this.isCertain("minute") && !this.isCertain("second");
25764
+ }
25765
+ isOnlyTime() {
25766
+ return !this.isCertain("weekday") && !this.isCertain("day") && !this.isCertain("month") && !this.isCertain("year");
25767
+ }
25768
+ isOnlyWeekdayComponent() {
25769
+ return this.isCertain("weekday") && !this.isCertain("day") && !this.isCertain("month");
25770
+ }
25771
+ isDateWithUnknownYear() {
25772
+ return this.isCertain("month") && !this.isCertain("year");
25773
+ }
25774
+ isValidDate() {
25775
+ const date = this.dateWithoutTimezoneAdjustment();
25776
+ if (date.getFullYear() !== this.get("year")) return false;
25777
+ if (date.getMonth() !== this.get("month") - 1) return false;
25778
+ if (date.getDate() !== this.get("day")) return false;
25779
+ if (this.get("hour") != null && date.getHours() != this.get("hour")) return false;
25780
+ if (this.get("minute") != null && date.getMinutes() != this.get("minute")) return false;
25781
+ return true;
25782
+ }
25783
+ toString() {
25784
+ return `[ParsingComponents {
25785
+ tags: ${JSON.stringify(Array.from(this._tags).sort())},
25786
+ knownValues: ${JSON.stringify(this.knownValues)},
25787
+ impliedValues: ${JSON.stringify(this.impliedValues)}},
25788
+ reference: ${JSON.stringify(this.reference)}]`;
25789
+ }
25790
+ date() {
25791
+ const date = this.dateWithoutTimezoneAdjustment();
25792
+ const timezoneAdjustment = this.reference.getSystemTimezoneAdjustmentMinute(date, this.get("timezoneOffset"));
25793
+ return new Date(date.getTime() + timezoneAdjustment * 6e4);
25794
+ }
25795
+ addTag(tag) {
25796
+ this._tags.add(tag);
25797
+ return this;
25798
+ }
25799
+ addTags(tags) {
25800
+ for (const tag of tags) this._tags.add(tag);
25801
+ return this;
25802
+ }
25803
+ tags() {
25804
+ return new Set(this._tags);
25805
+ }
25806
+ dateWithoutTimezoneAdjustment() {
25807
+ const date = new Date(this.get("year"), this.get("month") - 1, this.get("day"), this.get("hour"), this.get("minute"), this.get("second"), this.get("millisecond"));
25808
+ date.setFullYear(this.get("year"));
25809
+ return date;
25810
+ }
25811
+ };
25812
+ var ParsingResult = class ParsingResult {
25813
+ refDate;
25814
+ index;
25815
+ text;
25816
+ reference;
25817
+ start;
25818
+ end;
25819
+ constructor(reference, index, text, start, end) {
25820
+ this.reference = reference;
25821
+ this.refDate = reference.instant;
25822
+ this.index = index;
25823
+ this.text = text;
25824
+ this.start = start || new ParsingComponents(reference);
25825
+ this.end = end;
25826
+ }
25827
+ clone() {
25828
+ const result = new ParsingResult(this.reference, this.index, this.text);
25829
+ result.start = this.start ? this.start.clone() : null;
25830
+ result.end = this.end ? this.end.clone() : null;
25831
+ return result;
25832
+ }
25833
+ date() {
25834
+ return this.start.date();
25835
+ }
25836
+ addTag(tag) {
25837
+ this.start.addTag(tag);
25838
+ if (this.end) this.end.addTag(tag);
25839
+ return this;
25840
+ }
25841
+ addTags(tags) {
25842
+ this.start.addTags(tags);
25843
+ if (this.end) this.end.addTags(tags);
25844
+ return this;
25845
+ }
25846
+ tags() {
25847
+ const combinedTags = new Set(this.start.tags());
25848
+ if (this.end) for (const tag of this.end.tags()) combinedTags.add(tag);
25849
+ return combinedTags;
25850
+ }
25851
+ toString() {
25852
+ const tags = Array.from(this.tags()).sort();
25853
+ return `[ParsingResult {index: ${this.index}, text: '${this.text}', tags: ${JSON.stringify(tags)} ...}]`;
25854
+ }
25855
+ };
25856
+
25857
+ //#endregion
25858
+ //#region ../../node_modules/.pnpm/chrono-node@2.9.0/node_modules/chrono-node/dist/esm/utils/pattern.js
25859
+ function repeatedTimeunitPattern(prefix, singleTimeunitPattern, connectorPattern = "\\s{0,5},?\\s{0,5}") {
25860
+ const singleTimeunitPatternNoCapture = singleTimeunitPattern.replace(/\((?!\?)/g, "(?:");
25861
+ return `${prefix}${singleTimeunitPatternNoCapture}(?:${connectorPattern}${singleTimeunitPatternNoCapture}){0,10}`;
25862
+ }
25863
+ function extractTerms(dictionary) {
25864
+ let keys;
25865
+ if (dictionary instanceof Array) keys = [...dictionary];
25866
+ else if (dictionary instanceof Map) keys = Array.from(dictionary.keys());
25867
+ else keys = Object.keys(dictionary);
25868
+ return keys;
25869
+ }
25870
+ function matchAnyPattern(dictionary) {
25871
+ return `(?:${extractTerms(dictionary).sort((a, b) => b.length - a.length).join("|").replace(/\./g, "\\.")})`;
25872
+ }
25873
+
25874
+ //#endregion
25875
+ //#region ../../node_modules/.pnpm/chrono-node@2.9.0/node_modules/chrono-node/dist/esm/calculation/years.js
25876
+ function findMostLikelyADYear(yearNumber) {
25877
+ if (yearNumber < 100) if (yearNumber > 50) yearNumber = yearNumber + 1900;
25878
+ else yearNumber = yearNumber + 2e3;
25879
+ return yearNumber;
25880
+ }
25881
+ function findYearClosestToRef(refDate, day, month) {
25882
+ let date = new Date(refDate);
25883
+ date.setMonth(month - 1);
25884
+ date.setDate(day);
25885
+ const nextYear = addDuration(date, { "year": 1 });
25886
+ const lastYear = addDuration(date, { "year": -1 });
25887
+ if (Math.abs(nextYear.getTime() - refDate.getTime()) < Math.abs(date.getTime() - refDate.getTime())) date = nextYear;
25888
+ else if (Math.abs(lastYear.getTime() - refDate.getTime()) < Math.abs(date.getTime() - refDate.getTime())) date = lastYear;
25889
+ return date.getFullYear();
25890
+ }
25891
+
25892
+ //#endregion
25893
+ //#region ../../node_modules/.pnpm/chrono-node@2.9.0/node_modules/chrono-node/dist/esm/locales/en/constants.js
25894
+ const WEEKDAY_DICTIONARY = {
25895
+ sunday: 0,
25896
+ sun: 0,
25897
+ "sun.": 0,
25898
+ monday: 1,
25899
+ mon: 1,
25900
+ "mon.": 1,
25901
+ tuesday: 2,
25902
+ tue: 2,
25903
+ "tue.": 2,
25904
+ wednesday: 3,
25905
+ wed: 3,
25906
+ "wed.": 3,
25907
+ thursday: 4,
25908
+ thurs: 4,
25909
+ "thurs.": 4,
25910
+ thur: 4,
25911
+ "thur.": 4,
25912
+ thu: 4,
25913
+ "thu.": 4,
25914
+ friday: 5,
25915
+ fri: 5,
25916
+ "fri.": 5,
25917
+ saturday: 6,
25918
+ sat: 6,
25919
+ "sat.": 6
25920
+ };
25921
+ const FULL_MONTH_NAME_DICTIONARY = {
25922
+ january: 1,
25923
+ february: 2,
25924
+ march: 3,
25925
+ april: 4,
25926
+ may: 5,
25927
+ june: 6,
25928
+ july: 7,
25929
+ august: 8,
25930
+ september: 9,
25931
+ october: 10,
25932
+ november: 11,
25933
+ december: 12
25934
+ };
25935
+ const MONTH_DICTIONARY = {
25936
+ ...FULL_MONTH_NAME_DICTIONARY,
25937
+ jan: 1,
25938
+ "jan.": 1,
25939
+ feb: 2,
25940
+ "feb.": 2,
25941
+ mar: 3,
25942
+ "mar.": 3,
25943
+ apr: 4,
25944
+ "apr.": 4,
25945
+ jun: 6,
25946
+ "jun.": 6,
25947
+ jul: 7,
25948
+ "jul.": 7,
25949
+ aug: 8,
25950
+ "aug.": 8,
25951
+ sep: 9,
25952
+ "sep.": 9,
25953
+ sept: 9,
25954
+ "sept.": 9,
25955
+ oct: 10,
25956
+ "oct.": 10,
25957
+ nov: 11,
25958
+ "nov.": 11,
25959
+ dec: 12,
25960
+ "dec.": 12
25961
+ };
25962
+ const INTEGER_WORD_DICTIONARY = {
25963
+ one: 1,
25964
+ two: 2,
25965
+ three: 3,
25966
+ four: 4,
25967
+ five: 5,
25968
+ six: 6,
25969
+ seven: 7,
25970
+ eight: 8,
25971
+ nine: 9,
25972
+ ten: 10,
25973
+ eleven: 11,
25974
+ twelve: 12
25975
+ };
25976
+ const ORDINAL_WORD_DICTIONARY = {
25977
+ first: 1,
25978
+ second: 2,
25979
+ third: 3,
25980
+ fourth: 4,
25981
+ fifth: 5,
25982
+ sixth: 6,
25983
+ seventh: 7,
25984
+ eighth: 8,
25985
+ ninth: 9,
25986
+ tenth: 10,
25987
+ eleventh: 11,
25988
+ twelfth: 12,
25989
+ thirteenth: 13,
25990
+ fourteenth: 14,
25991
+ fifteenth: 15,
25992
+ sixteenth: 16,
25993
+ seventeenth: 17,
25994
+ eighteenth: 18,
25995
+ nineteenth: 19,
25996
+ twentieth: 20,
25997
+ "twenty first": 21,
25998
+ "twenty-first": 21,
25999
+ "twenty second": 22,
26000
+ "twenty-second": 22,
26001
+ "twenty third": 23,
26002
+ "twenty-third": 23,
26003
+ "twenty fourth": 24,
26004
+ "twenty-fourth": 24,
26005
+ "twenty fifth": 25,
26006
+ "twenty-fifth": 25,
26007
+ "twenty sixth": 26,
26008
+ "twenty-sixth": 26,
26009
+ "twenty seventh": 27,
26010
+ "twenty-seventh": 27,
26011
+ "twenty eighth": 28,
26012
+ "twenty-eighth": 28,
26013
+ "twenty ninth": 29,
26014
+ "twenty-ninth": 29,
26015
+ "thirtieth": 30,
26016
+ "thirty first": 31,
26017
+ "thirty-first": 31
26018
+ };
26019
+ const TIME_UNIT_DICTIONARY_NO_ABBR = {
26020
+ second: "second",
26021
+ seconds: "second",
26022
+ minute: "minute",
26023
+ minutes: "minute",
26024
+ hour: "hour",
26025
+ hours: "hour",
26026
+ day: "day",
26027
+ days: "day",
26028
+ week: "week",
26029
+ weeks: "week",
26030
+ month: "month",
26031
+ months: "month",
26032
+ quarter: "quarter",
26033
+ quarters: "quarter",
26034
+ year: "year",
26035
+ years: "year"
26036
+ };
26037
+ const TIME_UNIT_DICTIONARY = {
26038
+ s: "second",
26039
+ sec: "second",
26040
+ second: "second",
26041
+ seconds: "second",
26042
+ m: "minute",
26043
+ min: "minute",
26044
+ mins: "minute",
26045
+ minute: "minute",
26046
+ minutes: "minute",
26047
+ h: "hour",
26048
+ hr: "hour",
26049
+ hrs: "hour",
26050
+ hour: "hour",
26051
+ hours: "hour",
26052
+ d: "day",
26053
+ day: "day",
26054
+ days: "day",
26055
+ w: "week",
26056
+ week: "week",
26057
+ weeks: "week",
26058
+ mo: "month",
26059
+ mon: "month",
26060
+ mos: "month",
26061
+ month: "month",
26062
+ months: "month",
26063
+ qtr: "quarter",
26064
+ quarter: "quarter",
26065
+ quarters: "quarter",
26066
+ y: "year",
26067
+ yr: "year",
26068
+ year: "year",
26069
+ years: "year",
26070
+ ...TIME_UNIT_DICTIONARY_NO_ABBR
26071
+ };
26072
+ const NUMBER_PATTERN = `(?:${matchAnyPattern(INTEGER_WORD_DICTIONARY)}|[0-9]+|[0-9]+\\.[0-9]+|half(?:\\s{0,2}an?)?|an?\\b(?:\\s{0,2}few)?|few|several|the|a?\\s{0,2}couple\\s{0,2}(?:of)?)`;
26073
+ function parseNumberPattern(match) {
26074
+ const num = match.toLowerCase();
26075
+ if (INTEGER_WORD_DICTIONARY[num] !== void 0) return INTEGER_WORD_DICTIONARY[num];
26076
+ else if (num === "a" || num === "an" || num == "the") return 1;
26077
+ else if (num.match(/few/)) return 3;
26078
+ else if (num.match(/half/)) return .5;
26079
+ else if (num.match(/couple/)) return 2;
26080
+ else if (num.match(/several/)) return 7;
26081
+ return parseFloat(num);
26082
+ }
26083
+ const ORDINAL_NUMBER_PATTERN = `(?:${matchAnyPattern(ORDINAL_WORD_DICTIONARY)}|[0-9]{1,2}(?:st|nd|rd|th)?)`;
26084
+ function parseOrdinalNumberPattern(match) {
26085
+ let num = match.toLowerCase();
26086
+ if (ORDINAL_WORD_DICTIONARY[num] !== void 0) return ORDINAL_WORD_DICTIONARY[num];
26087
+ num = num.replace(/(?:st|nd|rd|th)$/i, "");
26088
+ return parseInt(num);
26089
+ }
26090
+ const YEAR_PATTERN = `(?:[1-9][0-9]{0,3}\\s{0,2}(?:BE|AD|BC|BCE|CE)|[1-2][0-9]{3}|[5-9][0-9]|2[0-5])`;
26091
+ function parseYear(match) {
26092
+ if (/BE/i.test(match)) {
26093
+ match = match.replace(/BE/i, "");
26094
+ return parseInt(match) - 543;
26095
+ }
26096
+ if (/BCE?/i.test(match)) {
26097
+ match = match.replace(/BCE?/i, "");
26098
+ return -parseInt(match);
26099
+ }
26100
+ if (/(AD|CE)/i.test(match)) {
26101
+ match = match.replace(/(AD|CE)/i, "");
26102
+ return parseInt(match);
26103
+ }
26104
+ return findMostLikelyADYear(parseInt(match));
26105
+ }
26106
+ const SINGLE_TIME_UNIT_PATTERN = `(${NUMBER_PATTERN})\\s{0,3}(${matchAnyPattern(TIME_UNIT_DICTIONARY)})`;
26107
+ const SINGLE_TIME_UNIT_REGEX = new RegExp(SINGLE_TIME_UNIT_PATTERN, "i");
26108
+ const SINGLE_TIME_UNIT_NO_ABBR_PATTERN = `(${NUMBER_PATTERN})\\s{0,3}(${matchAnyPattern(TIME_UNIT_DICTIONARY_NO_ABBR)})`;
26109
+ const TIME_UNIT_CONNECTOR_PATTERN = `\\s{0,5},?(?:\\s*and)?\\s{0,5}`;
26110
+ const TIME_UNITS_PATTERN = repeatedTimeunitPattern(`(?:(?:about|around)\\s{0,3})?`, SINGLE_TIME_UNIT_PATTERN, TIME_UNIT_CONNECTOR_PATTERN);
26111
+ const TIME_UNITS_NO_ABBR_PATTERN = repeatedTimeunitPattern(`(?:(?:about|around)\\s{0,3})?`, SINGLE_TIME_UNIT_NO_ABBR_PATTERN, TIME_UNIT_CONNECTOR_PATTERN);
26112
+ function parseDuration(timeunitText) {
26113
+ const fragments = {};
26114
+ let remainingText = timeunitText;
26115
+ let match = SINGLE_TIME_UNIT_REGEX.exec(remainingText);
26116
+ while (match) {
26117
+ collectDateTimeFragment(fragments, match);
26118
+ remainingText = remainingText.substring(match[0].length).trim();
26119
+ match = SINGLE_TIME_UNIT_REGEX.exec(remainingText);
26120
+ }
26121
+ if (Object.keys(fragments).length == 0) return null;
26122
+ return fragments;
26123
+ }
26124
+ function collectDateTimeFragment(fragments, match) {
26125
+ if (match[0].match(/^[a-zA-Z]+$/)) return;
26126
+ const num = parseNumberPattern(match[1]);
26127
+ const unit = TIME_UNIT_DICTIONARY[match[2].toLowerCase()];
26128
+ fragments[unit] = num;
26129
+ }
26130
+
26131
+ //#endregion
26132
+ //#region ../../node_modules/.pnpm/chrono-node@2.9.0/node_modules/chrono-node/dist/esm/common/parsers/AbstractParserWithWordBoundary.js
26133
+ var AbstractParserWithWordBoundaryChecking = class {
26134
+ innerPatternHasChange(context, currentInnerPattern) {
26135
+ return this.innerPattern(context) !== currentInnerPattern;
26136
+ }
26137
+ patternLeftBoundary() {
26138
+ return `(\\W|^)`;
26139
+ }
26140
+ cachedInnerPattern = null;
26141
+ cachedPattern = null;
26142
+ pattern(context) {
26143
+ if (this.cachedInnerPattern) {
26144
+ if (!this.innerPatternHasChange(context, this.cachedInnerPattern)) return this.cachedPattern;
26145
+ }
26146
+ this.cachedInnerPattern = this.innerPattern(context);
26147
+ this.cachedPattern = new RegExp(`${this.patternLeftBoundary()}${this.cachedInnerPattern.source}`, this.cachedInnerPattern.flags);
26148
+ return this.cachedPattern;
26149
+ }
26150
+ extract(context, match) {
26151
+ const header = match[1] ?? "";
26152
+ match.index = match.index + header.length;
26153
+ match[0] = match[0].substring(header.length);
26154
+ for (let i = 2; i < match.length; i++) match[i - 1] = match[i];
26155
+ return this.innerExtract(context, match);
26156
+ }
26157
+ };
26158
+
26159
+ //#endregion
26160
+ //#region ../../node_modules/.pnpm/chrono-node@2.9.0/node_modules/chrono-node/dist/esm/locales/en/parsers/ENTimeUnitWithinFormatParser.js
26161
+ const PATTERN_WITH_OPTIONAL_PREFIX = new RegExp(`(?:(?:within|in|for)\\s*)?(?:(?:about|around|roughly|approximately|just)\\s*(?:~\\s*)?)?(${TIME_UNITS_PATTERN})(?=\\W|$)`, "i");
26162
+ const PATTERN_WITH_PREFIX = new RegExp(`(?:within|in|for)\\s*(?:(?:about|around|roughly|approximately|just)\\s*(?:~\\s*)?)?(${TIME_UNITS_PATTERN})(?=\\W|$)`, "i");
26163
+ const PATTERN_WITH_PREFIX_STRICT = new RegExp(`(?:within|in|for)\\s*(?:(?:about|around|roughly|approximately|just)\\s*(?:~\\s*)?)?(${TIME_UNITS_NO_ABBR_PATTERN})(?=\\W|$)`, "i");
26164
+ var ENTimeUnitWithinFormatParser = class extends AbstractParserWithWordBoundaryChecking {
26165
+ strictMode;
26166
+ constructor(strictMode) {
26167
+ super();
26168
+ this.strictMode = strictMode;
26169
+ }
26170
+ innerPattern(context) {
26171
+ if (this.strictMode) return PATTERN_WITH_PREFIX_STRICT;
26172
+ return context.option.forwardDate ? PATTERN_WITH_OPTIONAL_PREFIX : PATTERN_WITH_PREFIX;
26173
+ }
26174
+ innerExtract(context, match) {
26175
+ if (match[0].match(/^for\s*the\s*\w+/)) return null;
26176
+ const timeUnits = parseDuration(match[1]);
26177
+ if (!timeUnits) return null;
26178
+ return ParsingComponents.createRelativeFromReference(context.reference, timeUnits);
26179
+ }
26180
+ };
26181
+
26182
+ //#endregion
26183
+ //#region ../../node_modules/.pnpm/chrono-node@2.9.0/node_modules/chrono-node/dist/esm/locales/en/parsers/ENMonthNameLittleEndianParser.js
26184
+ const PATTERN$13 = new RegExp(`(?:on\\s{0,3})?(${ORDINAL_NUMBER_PATTERN})(?:\\s{0,3}(?:to|\\-|\\–|until|through|till)?\\s{0,3}(${ORDINAL_NUMBER_PATTERN}))?(?:-|/|\\s{0,3}(?:of)?\\s{0,3})(${matchAnyPattern(MONTH_DICTIONARY)})(?:(?:-|/|,?\\s{0,3})(${YEAR_PATTERN}(?!\\w)))?(?=\\W|\$)`, "i");
26185
+ const DATE_GROUP$1 = 1;
26186
+ const DATE_TO_GROUP$1 = 2;
26187
+ const MONTH_NAME_GROUP$3 = 3;
26188
+ const YEAR_GROUP$5 = 4;
26189
+ var ENMonthNameLittleEndianParser = class extends AbstractParserWithWordBoundaryChecking {
26190
+ innerPattern() {
26191
+ return PATTERN$13;
26192
+ }
26193
+ innerExtract(context, match) {
26194
+ const result = context.createParsingResult(match.index, match[0]);
26195
+ const month = MONTH_DICTIONARY[match[MONTH_NAME_GROUP$3].toLowerCase()];
26196
+ const day = parseOrdinalNumberPattern(match[DATE_GROUP$1]);
26197
+ if (day > 31) {
26198
+ match.index = match.index + match[DATE_GROUP$1].length;
26199
+ return null;
26200
+ }
26201
+ result.start.assign("month", month);
26202
+ result.start.assign("day", day);
26203
+ if (match[YEAR_GROUP$5]) {
26204
+ const yearNumber = parseYear(match[YEAR_GROUP$5]);
26205
+ result.start.assign("year", yearNumber);
26206
+ } else {
26207
+ const year = findYearClosestToRef(context.refDate, day, month);
26208
+ result.start.imply("year", year);
26209
+ }
26210
+ if (match[DATE_TO_GROUP$1]) {
26211
+ const endDate = parseOrdinalNumberPattern(match[DATE_TO_GROUP$1]);
26212
+ result.end = result.start.clone();
26213
+ result.end.assign("day", endDate);
26214
+ }
26215
+ return result;
26216
+ }
26217
+ };
26218
+
26219
+ //#endregion
26220
+ //#region ../../node_modules/.pnpm/chrono-node@2.9.0/node_modules/chrono-node/dist/esm/locales/en/parsers/ENMonthNameMiddleEndianParser.js
26221
+ const PATTERN$12 = new RegExp(`(${matchAnyPattern(MONTH_DICTIONARY)})(?:-|/|\\s*,?\\s*)(${ORDINAL_NUMBER_PATTERN})(?!\\s*(?:am|pm))\\s*(?:(?:to|\\-)\\s*(${ORDINAL_NUMBER_PATTERN})\\s*)?(?:(?:-|/|\\s*,\\s*|\\s+)(${YEAR_PATTERN}))?(?=\\W|\$)(?!\\:\\d)`, "i");
26222
+ const MONTH_NAME_GROUP$2 = 1;
26223
+ const DATE_GROUP = 2;
26224
+ const DATE_TO_GROUP = 3;
26225
+ const YEAR_GROUP$4 = 4;
26226
+ var ENMonthNameMiddleEndianParser = class extends AbstractParserWithWordBoundaryChecking {
26227
+ shouldSkipYearLikeDate;
26228
+ constructor(shouldSkipYearLikeDate) {
26229
+ super();
26230
+ this.shouldSkipYearLikeDate = shouldSkipYearLikeDate;
26231
+ }
26232
+ innerPattern() {
26233
+ return PATTERN$12;
26234
+ }
26235
+ innerExtract(context, match) {
26236
+ const month = MONTH_DICTIONARY[match[MONTH_NAME_GROUP$2].toLowerCase()];
26237
+ const day = parseOrdinalNumberPattern(match[DATE_GROUP]);
26238
+ if (day > 31) return null;
26239
+ if (this.shouldSkipYearLikeDate) {
26240
+ if (!match[DATE_TO_GROUP] && !match[YEAR_GROUP$4] && match[DATE_GROUP].match(/^2[0-5]$/)) return null;
26241
+ }
26242
+ const components = context.createParsingComponents({
26243
+ day,
26244
+ month
26245
+ }).addTag("parser/ENMonthNameMiddleEndianParser");
26246
+ if (match[YEAR_GROUP$4]) {
26247
+ const year = parseYear(match[YEAR_GROUP$4]);
26248
+ components.assign("year", year);
26249
+ } else {
26250
+ const year = findYearClosestToRef(context.refDate, day, month);
26251
+ components.imply("year", year);
26252
+ }
26253
+ if (!match[DATE_TO_GROUP]) return components;
26254
+ const endDate = parseOrdinalNumberPattern(match[DATE_TO_GROUP]);
26255
+ const result = context.createParsingResult(match.index, match[0]);
26256
+ result.start = components;
26257
+ result.end = components.clone();
26258
+ result.end.assign("day", endDate);
26259
+ return result;
26260
+ }
26261
+ };
26262
+
26263
+ //#endregion
26264
+ //#region ../../node_modules/.pnpm/chrono-node@2.9.0/node_modules/chrono-node/dist/esm/locales/en/parsers/ENMonthNameParser.js
26265
+ const PATTERN$11 = new RegExp(`((?:in)\\s*)?(${matchAnyPattern(MONTH_DICTIONARY)})\\s*(?:(?:,|-|of)?\\s*(${YEAR_PATTERN})?)?(?=[^\\s\\w]|\\s+[^0-9]|\\s+\$|\$)`, "i");
26266
+ const PREFIX_GROUP$1 = 1;
26267
+ const MONTH_NAME_GROUP$1 = 2;
26268
+ const YEAR_GROUP$3 = 3;
26269
+ var ENMonthNameParser = class extends AbstractParserWithWordBoundaryChecking {
26270
+ innerPattern() {
26271
+ return PATTERN$11;
26272
+ }
26273
+ innerExtract(context, match) {
26274
+ const monthName = match[MONTH_NAME_GROUP$1].toLowerCase();
26275
+ if (match[0].length <= 3 && !FULL_MONTH_NAME_DICTIONARY[monthName]) return null;
26276
+ const result = context.createParsingResult(match.index + (match[PREFIX_GROUP$1] || "").length, match.index + match[0].length);
26277
+ result.start.imply("day", 1);
26278
+ result.start.addTag("parser/ENMonthNameParser");
26279
+ const month = MONTH_DICTIONARY[monthName];
26280
+ result.start.assign("month", month);
26281
+ if (match[YEAR_GROUP$3]) {
26282
+ const year = parseYear(match[YEAR_GROUP$3]);
26283
+ result.start.assign("year", year);
26284
+ } else {
26285
+ const year = findYearClosestToRef(context.refDate, 1, month);
26286
+ result.start.imply("year", year);
26287
+ }
26288
+ return result;
26289
+ }
26290
+ };
26291
+
26292
+ //#endregion
26293
+ //#region ../../node_modules/.pnpm/chrono-node@2.9.0/node_modules/chrono-node/dist/esm/locales/en/parsers/ENYearMonthDayParser.js
26294
+ const PATTERN$10 = new RegExp(`([0-9]{4})[-\\.\\/\\s](?:(${matchAnyPattern(MONTH_DICTIONARY)})|([0-9]{1,2}))[-\\.\\/\\s]([0-9]{1,2})(?=\\W|\$)`, "i");
26295
+ const YEAR_NUMBER_GROUP$1 = 1;
26296
+ const MONTH_NAME_GROUP = 2;
26297
+ const MONTH_NUMBER_GROUP$1 = 3;
26298
+ const DATE_NUMBER_GROUP$1 = 4;
26299
+ var ENYearMonthDayParser = class extends AbstractParserWithWordBoundaryChecking {
26300
+ strictMonthDateOrder;
26301
+ constructor(strictMonthDateOrder) {
26302
+ super();
26303
+ this.strictMonthDateOrder = strictMonthDateOrder;
26304
+ }
26305
+ innerPattern() {
26306
+ return PATTERN$10;
26307
+ }
26308
+ innerExtract(context, match) {
26309
+ const year = parseInt(match[YEAR_NUMBER_GROUP$1]);
26310
+ let day = parseInt(match[DATE_NUMBER_GROUP$1]);
26311
+ let month = match[MONTH_NUMBER_GROUP$1] ? parseInt(match[MONTH_NUMBER_GROUP$1]) : MONTH_DICTIONARY[match[MONTH_NAME_GROUP].toLowerCase()];
26312
+ if (month < 1 || month > 12) {
26313
+ if (this.strictMonthDateOrder) return null;
26314
+ if (day >= 1 && day <= 12) [month, day] = [day, month];
26315
+ }
26316
+ if (day < 1 || day > 31) return null;
26317
+ return {
26318
+ day,
26319
+ month,
26320
+ year
26321
+ };
26322
+ }
26323
+ };
26324
+
26325
+ //#endregion
26326
+ //#region ../../node_modules/.pnpm/chrono-node@2.9.0/node_modules/chrono-node/dist/esm/locales/en/parsers/ENSlashMonthFormatParser.js
26327
+ const PATTERN$9 = new RegExp("([0-9]|0[1-9]|1[012])/([0-9]{4})", "i");
26328
+ const MONTH_GROUP = 1;
26329
+ const YEAR_GROUP$2 = 2;
26330
+ var ENSlashMonthFormatParser = class extends AbstractParserWithWordBoundaryChecking {
26331
+ innerPattern() {
26332
+ return PATTERN$9;
26333
+ }
26334
+ innerExtract(context, match) {
26335
+ const year = parseInt(match[YEAR_GROUP$2]);
26336
+ const month = parseInt(match[MONTH_GROUP]);
26337
+ return context.createParsingComponents().imply("day", 1).assign("month", month).assign("year", year);
26338
+ }
26339
+ };
26340
+
26341
+ //#endregion
26342
+ //#region ../../node_modules/.pnpm/chrono-node@2.9.0/node_modules/chrono-node/dist/esm/common/parsers/AbstractTimeExpressionParser.js
26343
+ function primaryTimePattern(leftBoundary, primaryPrefix, primarySuffix, flags) {
26344
+ return new RegExp(`${leftBoundary}${primaryPrefix}(\\d{1,4})(?:(?:\\.|:|:)(\\d{1,2})(?:(?::|:)(\\d{2})(?:\\.(\\d{1,6}))?)?)?(?:\\s*(a\\.m\\.|p\\.m\\.|am?|pm?))?${primarySuffix}`, flags);
26345
+ }
26346
+ function followingTimePatten(followingPhase, followingSuffix) {
26347
+ return new RegExp(`^(${followingPhase})(\\d{1,4})(?:(?:\\.|\\:|\\:)(\\d{1,2})(?:(?:\\.|\\:|\\:)(\\d{1,2})(?:\\.(\\d{1,6}))?)?)?(?:\\s*(a\\.m\\.|p\\.m\\.|am?|pm?))?${followingSuffix}`, "i");
26348
+ }
26349
+ const HOUR_GROUP = 2;
26350
+ const MINUTE_GROUP = 3;
26351
+ const SECOND_GROUP = 4;
26352
+ const MILLI_SECOND_GROUP = 5;
26353
+ const AM_PM_HOUR_GROUP = 6;
26354
+ var AbstractTimeExpressionParser = class {
26355
+ strictMode;
26356
+ constructor(strictMode = false) {
26357
+ this.strictMode = strictMode;
26358
+ }
26359
+ patternFlags() {
26360
+ return "i";
26361
+ }
26362
+ primaryPatternLeftBoundary() {
26363
+ return `(^|\\s|T|\\b)`;
26364
+ }
26365
+ primarySuffix() {
26366
+ return `(?!/)(?=\\W|$)`;
26367
+ }
26368
+ followingSuffix() {
26369
+ return `(?!/)(?=\\W|$)`;
26370
+ }
26371
+ pattern(context) {
26372
+ return this.getPrimaryTimePatternThroughCache();
26373
+ }
26374
+ extract(context, match) {
26375
+ const startComponents = this.extractPrimaryTimeComponents(context, match);
26376
+ if (!startComponents) {
26377
+ if (match[0].match(/^\d{4}/)) {
26378
+ match.index += 4;
26379
+ return null;
26380
+ }
26381
+ match.index += match[0].length;
26382
+ return null;
26383
+ }
26384
+ const index = match.index + match[1].length;
26385
+ const text = match[0].substring(match[1].length);
26386
+ const result = context.createParsingResult(index, text, startComponents);
26387
+ match.index += match[0].length;
26388
+ const remainingText = context.text.substring(match.index);
26389
+ const followingMatch = this.getFollowingTimePatternThroughCache().exec(remainingText);
26390
+ if (text.match(/^\d{3,4}/) && followingMatch) {
26391
+ if (followingMatch[0].match(/^\s*([+-])\s*\d{2,4}$/)) return null;
26392
+ if (followingMatch[0].match(/^\s*([+-])\s*\d{2}\W\d{2}/)) return null;
26393
+ }
26394
+ if (!followingMatch || followingMatch[0].match(/^\s*([+-])\s*\d{3,4}$/)) return this.checkAndReturnWithoutFollowingPattern(result);
26395
+ result.end = this.extractFollowingTimeComponents(context, followingMatch, result);
26396
+ if (result.end) result.text += followingMatch[0];
26397
+ return this.checkAndReturnWithFollowingPattern(result);
26398
+ }
26399
+ extractPrimaryTimeComponents(context, match, strict = false) {
26400
+ const components = context.createParsingComponents();
26401
+ let minute = 0;
26402
+ let meridiem = null;
26403
+ let hour = parseInt(match[HOUR_GROUP]);
26404
+ if (hour > 100) {
26405
+ if (match[HOUR_GROUP].length == 4 && match[MINUTE_GROUP] == null && !match[AM_PM_HOUR_GROUP]) return null;
26406
+ if (this.strictMode || match[MINUTE_GROUP] != null) return null;
26407
+ minute = hour % 100;
26408
+ hour = Math.floor(hour / 100);
26409
+ }
26410
+ if (hour > 24) return null;
26411
+ if (match[MINUTE_GROUP] != null) {
26412
+ if (match[MINUTE_GROUP].length == 1 && !match[AM_PM_HOUR_GROUP]) return null;
26413
+ minute = parseInt(match[MINUTE_GROUP]);
26414
+ }
26415
+ if (minute >= 60) return null;
26416
+ if (hour > 12) meridiem = Meridiem.PM;
26417
+ if (match[AM_PM_HOUR_GROUP] != null) {
26418
+ if (hour > 12) return null;
26419
+ const ampm = match[AM_PM_HOUR_GROUP][0].toLowerCase();
26420
+ if (ampm == "a") {
26421
+ meridiem = Meridiem.AM;
26422
+ if (hour == 12) hour = 0;
26423
+ }
26424
+ if (ampm == "p") {
26425
+ meridiem = Meridiem.PM;
26426
+ if (hour != 12) hour += 12;
26427
+ }
26428
+ }
26429
+ components.assign("hour", hour);
26430
+ components.assign("minute", minute);
26431
+ if (meridiem !== null) components.assign("meridiem", meridiem);
26432
+ else if (hour < 12) components.imply("meridiem", Meridiem.AM);
26433
+ else components.imply("meridiem", Meridiem.PM);
26434
+ if (match[MILLI_SECOND_GROUP] != null) {
26435
+ const millisecond = parseInt(match[MILLI_SECOND_GROUP].substring(0, 3));
26436
+ if (millisecond >= 1e3) return null;
26437
+ components.assign("millisecond", millisecond);
26438
+ }
26439
+ if (match[SECOND_GROUP] != null) {
26440
+ const second = parseInt(match[SECOND_GROUP]);
26441
+ if (second >= 60) return null;
26442
+ components.assign("second", second);
26443
+ }
26444
+ return components;
26445
+ }
26446
+ extractFollowingTimeComponents(context, match, result) {
26447
+ const components = context.createParsingComponents();
26448
+ if (match[MILLI_SECOND_GROUP] != null) {
26449
+ const millisecond = parseInt(match[MILLI_SECOND_GROUP].substring(0, 3));
26450
+ if (millisecond >= 1e3) return null;
26451
+ components.assign("millisecond", millisecond);
26452
+ }
26453
+ if (match[SECOND_GROUP] != null) {
26454
+ const second = parseInt(match[SECOND_GROUP]);
26455
+ if (second >= 60) return null;
26456
+ components.assign("second", second);
26457
+ }
26458
+ let hour = parseInt(match[HOUR_GROUP]);
26459
+ let minute = 0;
26460
+ let meridiem = -1;
26461
+ if (match[MINUTE_GROUP] != null) minute = parseInt(match[MINUTE_GROUP]);
26462
+ else if (hour > 100) {
26463
+ minute = hour % 100;
26464
+ hour = Math.floor(hour / 100);
26465
+ }
26466
+ if (minute >= 60 || hour > 24) return null;
26467
+ if (hour >= 12) meridiem = Meridiem.PM;
26468
+ if (match[AM_PM_HOUR_GROUP] != null) {
26469
+ if (hour > 12) return null;
26470
+ const ampm = match[AM_PM_HOUR_GROUP][0].toLowerCase();
26471
+ if (ampm == "a") {
26472
+ meridiem = Meridiem.AM;
26473
+ if (hour == 12) {
26474
+ hour = 0;
26475
+ if (!components.isCertain("day")) components.imply("day", components.get("day") + 1);
26476
+ }
26477
+ }
26478
+ if (ampm == "p") {
26479
+ meridiem = Meridiem.PM;
26480
+ if (hour != 12) hour += 12;
26481
+ }
26482
+ if (!result.start.isCertain("meridiem")) if (meridiem == Meridiem.AM) {
26483
+ result.start.imply("meridiem", Meridiem.AM);
26484
+ if (result.start.get("hour") == 12) result.start.assign("hour", 0);
26485
+ } else {
26486
+ result.start.imply("meridiem", Meridiem.PM);
26487
+ if (result.start.get("hour") != 12) result.start.assign("hour", result.start.get("hour") + 12);
26488
+ }
26489
+ }
26490
+ components.assign("hour", hour);
26491
+ components.assign("minute", minute);
26492
+ if (meridiem >= 0) components.assign("meridiem", meridiem);
26493
+ else if (result.start.isCertain("meridiem") && result.start.get("hour") > 12) {
26494
+ if (result.start.get("hour") - 12 > hour) components.imply("meridiem", Meridiem.AM);
26495
+ else if (hour <= 12) {
26496
+ components.assign("hour", hour + 12);
26497
+ components.assign("meridiem", Meridiem.PM);
26498
+ }
26499
+ } else if (hour > 12) components.imply("meridiem", Meridiem.PM);
26500
+ else if (hour <= 12) components.imply("meridiem", Meridiem.AM);
26501
+ if (components.date().getTime() < result.start.date().getTime()) components.imply("day", components.get("day") + 1);
26502
+ return components;
26503
+ }
26504
+ checkAndReturnWithoutFollowingPattern(result) {
26505
+ if (result.text.match(/^\d$/)) return null;
26506
+ if (result.text.match(/^\d\d\d+$/)) return null;
26507
+ if (result.text.match(/\d[apAP]$/)) return null;
26508
+ const endingWithNumbers = result.text.match(/[^\d:.](\d[\d.]+)$/);
26509
+ if (endingWithNumbers) {
26510
+ const endingNumbers = endingWithNumbers[1];
26511
+ if (this.strictMode) return null;
26512
+ if (endingNumbers.includes(".") && !endingNumbers.match(/\d(\.\d{2})+$/)) return null;
26513
+ if (parseInt(endingNumbers) > 24) return null;
26514
+ }
26515
+ return result;
26516
+ }
26517
+ checkAndReturnWithFollowingPattern(result) {
26518
+ if (result.text.match(/^\d+-\d+$/)) return null;
26519
+ const endingWithNumbers = result.text.match(/[^\d:.](\d[\d.]+)\s*-\s*(\d[\d.]+)$/);
26520
+ if (endingWithNumbers) {
26521
+ if (this.strictMode) return null;
26522
+ const startingNumbers = endingWithNumbers[1];
26523
+ const endingNumbers = endingWithNumbers[2];
26524
+ if (endingNumbers.includes(".") && !endingNumbers.match(/\d(\.\d{2})+$/)) return null;
26525
+ if (parseInt(endingNumbers) > 24 || parseInt(startingNumbers) > 24) return null;
26526
+ }
26527
+ return result;
26528
+ }
26529
+ cachedPrimaryPrefix = null;
26530
+ cachedPrimarySuffix = null;
26531
+ cachedPrimaryTimePattern = null;
26532
+ getPrimaryTimePatternThroughCache() {
26533
+ const primaryPrefix = this.primaryPrefix();
26534
+ const primarySuffix = this.primarySuffix();
26535
+ if (this.cachedPrimaryPrefix === primaryPrefix && this.cachedPrimarySuffix === primarySuffix) return this.cachedPrimaryTimePattern;
26536
+ this.cachedPrimaryTimePattern = primaryTimePattern(this.primaryPatternLeftBoundary(), primaryPrefix, primarySuffix, this.patternFlags());
26537
+ this.cachedPrimaryPrefix = primaryPrefix;
26538
+ this.cachedPrimarySuffix = primarySuffix;
26539
+ return this.cachedPrimaryTimePattern;
26540
+ }
26541
+ cachedFollowingPhase = null;
26542
+ cachedFollowingSuffix = null;
26543
+ cachedFollowingTimePatten = null;
26544
+ getFollowingTimePatternThroughCache() {
26545
+ const followingPhase = this.followingPhase();
26546
+ const followingSuffix = this.followingSuffix();
26547
+ if (this.cachedFollowingPhase === followingPhase && this.cachedFollowingSuffix === followingSuffix) return this.cachedFollowingTimePatten;
26548
+ this.cachedFollowingTimePatten = followingTimePatten(followingPhase, followingSuffix);
26549
+ this.cachedFollowingPhase = followingPhase;
26550
+ this.cachedFollowingSuffix = followingSuffix;
26551
+ return this.cachedFollowingTimePatten;
26552
+ }
26553
+ };
26554
+
26555
+ //#endregion
26556
+ //#region ../../node_modules/.pnpm/chrono-node@2.9.0/node_modules/chrono-node/dist/esm/locales/en/parsers/ENTimeExpressionParser.js
26557
+ var ENTimeExpressionParser = class extends AbstractTimeExpressionParser {
26558
+ constructor(strictMode) {
26559
+ super(strictMode);
26560
+ }
26561
+ followingPhase() {
26562
+ return "\\s*(?:\\-|\\–|\\~|\\〜|to|until|through|till|\\?)\\s*";
26563
+ }
26564
+ primaryPrefix() {
26565
+ return "(?:(?:at|from)\\s*)??";
26566
+ }
26567
+ primarySuffix() {
26568
+ return "(?:\\s*(?:o\\W*clock|at\\s*night|in\\s*the\\s*(?:morning|afternoon)))?(?!/)(?=\\W|$)";
26569
+ }
26570
+ extractPrimaryTimeComponents(context, match) {
26571
+ const components = super.extractPrimaryTimeComponents(context, match);
26572
+ if (!components) return components;
26573
+ if (match[0].endsWith("night")) {
26574
+ const hour = components.get("hour");
26575
+ if (hour >= 6 && hour < 12) {
26576
+ components.assign("hour", components.get("hour") + 12);
26577
+ components.assign("meridiem", Meridiem.PM);
26578
+ } else if (hour < 6) components.assign("meridiem", Meridiem.AM);
26579
+ }
26580
+ if (match[0].endsWith("afternoon")) {
26581
+ components.assign("meridiem", Meridiem.PM);
26582
+ const hour = components.get("hour");
26583
+ if (hour >= 0 && hour <= 6) components.assign("hour", components.get("hour") + 12);
26584
+ }
26585
+ if (match[0].endsWith("morning")) {
26586
+ components.assign("meridiem", Meridiem.AM);
26587
+ if (components.get("hour") < 12) components.assign("hour", components.get("hour"));
26588
+ }
26589
+ return components.addTag("parser/ENTimeExpressionParser");
26590
+ }
26591
+ extractFollowingTimeComponents(context, match, result) {
26592
+ const followingComponents = super.extractFollowingTimeComponents(context, match, result);
26593
+ if (followingComponents) followingComponents.addTag("parser/ENTimeExpressionParser");
26594
+ return followingComponents;
26595
+ }
26596
+ };
26597
+
26598
+ //#endregion
26599
+ //#region ../../node_modules/.pnpm/chrono-node@2.9.0/node_modules/chrono-node/dist/esm/locales/en/parsers/ENTimeUnitAgoFormatParser.js
26600
+ const PATTERN$8 = new RegExp(`(${TIME_UNITS_PATTERN})\\s{0,5}(?:ago|before|earlier)(?=\\W|$)`, "i");
26601
+ const STRICT_PATTERN$1 = new RegExp(`(${TIME_UNITS_NO_ABBR_PATTERN})\\s{0,5}(?:ago|before|earlier)(?=\\W|$)`, "i");
26602
+ var ENTimeUnitAgoFormatParser = class extends AbstractParserWithWordBoundaryChecking {
26603
+ strictMode;
26604
+ constructor(strictMode) {
26605
+ super();
26606
+ this.strictMode = strictMode;
26607
+ }
26608
+ innerPattern() {
26609
+ return this.strictMode ? STRICT_PATTERN$1 : PATTERN$8;
26610
+ }
26611
+ innerExtract(context, match) {
26612
+ const duration = parseDuration(match[1]);
26613
+ if (!duration) return null;
26614
+ return ParsingComponents.createRelativeFromReference(context.reference, reverseDuration(duration));
26615
+ }
26616
+ };
26617
+
26618
+ //#endregion
26619
+ //#region ../../node_modules/.pnpm/chrono-node@2.9.0/node_modules/chrono-node/dist/esm/locales/en/parsers/ENTimeUnitLaterFormatParser.js
26620
+ const PATTERN$7 = new RegExp(`(${TIME_UNITS_PATTERN})\\s{0,5}(?:later|after|from now|henceforth|forward|out)(?=(?:\\W|\$))`, "i");
26621
+ const STRICT_PATTERN = new RegExp(`(${TIME_UNITS_NO_ABBR_PATTERN})\\s{0,5}(later|after|from now)(?=\\W|$)`, "i");
26622
+ const GROUP_NUM_TIMEUNITS = 1;
26623
+ var ENTimeUnitLaterFormatParser = class extends AbstractParserWithWordBoundaryChecking {
26624
+ strictMode;
26625
+ constructor(strictMode) {
26626
+ super();
26627
+ this.strictMode = strictMode;
26628
+ }
26629
+ innerPattern() {
26630
+ return this.strictMode ? STRICT_PATTERN : PATTERN$7;
26631
+ }
26632
+ innerExtract(context, match) {
26633
+ const timeUnits = parseDuration(match[GROUP_NUM_TIMEUNITS]);
26634
+ if (!timeUnits) return null;
26635
+ return ParsingComponents.createRelativeFromReference(context.reference, timeUnits);
26636
+ }
26637
+ };
26638
+
26639
+ //#endregion
26640
+ //#region ../../node_modules/.pnpm/chrono-node@2.9.0/node_modules/chrono-node/dist/esm/common/abstractRefiners.js
26641
+ var Filter = class {
26642
+ refine(context, results) {
26643
+ return results.filter((r) => this.isValid(context, r));
26644
+ }
26645
+ };
26646
+ var MergingRefiner = class {
26647
+ refine(context, results) {
26648
+ if (results.length < 2) return results;
26649
+ const mergedResults = [];
26650
+ let curResult = results[0];
26651
+ let nextResult = null;
26652
+ for (let i = 1; i < results.length; i++) {
26653
+ nextResult = results[i];
26654
+ const textBetween = context.text.substring(curResult.index + curResult.text.length, nextResult.index);
26655
+ if (!this.shouldMergeResults(textBetween, curResult, nextResult, context)) {
26656
+ mergedResults.push(curResult);
26657
+ curResult = nextResult;
26658
+ } else {
26659
+ const left = curResult;
26660
+ const right = nextResult;
26661
+ const mergedResult = this.mergeResults(textBetween, left, right, context);
26662
+ context.debug(() => {
26663
+ console.log(`${this.constructor.name} merged ${left} and ${right} into ${mergedResult}`);
26664
+ });
26665
+ curResult = mergedResult;
26666
+ }
26667
+ }
26668
+ if (curResult != null) mergedResults.push(curResult);
26669
+ return mergedResults;
26670
+ }
26671
+ };
26672
+
26673
+ //#endregion
26674
+ //#region ../../node_modules/.pnpm/chrono-node@2.9.0/node_modules/chrono-node/dist/esm/common/refiners/AbstractMergeDateRangeRefiner.js
26675
+ var AbstractMergeDateRangeRefiner = class extends MergingRefiner {
26676
+ shouldMergeResults(textBetween, currentResult, nextResult) {
26677
+ return !currentResult.end && !nextResult.end && textBetween.match(this.patternBetween()) != null;
26678
+ }
26679
+ mergeResults(textBetween, fromResult, toResult) {
26680
+ if (!fromResult.start.isOnlyWeekdayComponent() && !toResult.start.isOnlyWeekdayComponent()) {
26681
+ toResult.start.getCertainComponents().forEach((key) => {
26682
+ if (!fromResult.start.isCertain(key)) fromResult.start.imply(key, toResult.start.get(key));
26683
+ });
26684
+ fromResult.start.getCertainComponents().forEach((key) => {
26685
+ if (!toResult.start.isCertain(key)) toResult.start.imply(key, fromResult.start.get(key));
26686
+ });
26687
+ }
26688
+ if (fromResult.start.date() > toResult.start.date()) {
26689
+ let fromDate = fromResult.start.date();
26690
+ let toDate = toResult.start.date();
26691
+ if (toResult.start.isOnlyWeekdayComponent() && addDuration(toDate, { day: 7 }) > fromDate) {
26692
+ toDate = addDuration(toDate, { day: 7 });
26693
+ toResult.start.imply("day", toDate.getDate());
26694
+ toResult.start.imply("month", toDate.getMonth() + 1);
26695
+ toResult.start.imply("year", toDate.getFullYear());
26696
+ } else if (fromResult.start.isOnlyWeekdayComponent() && addDuration(fromDate, { day: -7 }) < toDate) {
26697
+ fromDate = addDuration(fromDate, { day: -7 });
26698
+ fromResult.start.imply("day", fromDate.getDate());
26699
+ fromResult.start.imply("month", fromDate.getMonth() + 1);
26700
+ fromResult.start.imply("year", fromDate.getFullYear());
26701
+ } else if (toResult.start.isDateWithUnknownYear() && addDuration(toDate, { year: 1 }) > fromDate) {
26702
+ toDate = addDuration(toDate, { year: 1 });
26703
+ toResult.start.imply("year", toDate.getFullYear());
26704
+ } else if (fromResult.start.isDateWithUnknownYear() && addDuration(fromDate, { year: -1 }) < toDate) {
26705
+ fromDate = addDuration(fromDate, { year: -1 });
26706
+ fromResult.start.imply("year", fromDate.getFullYear());
26707
+ } else [toResult, fromResult] = [fromResult, toResult];
26708
+ }
26709
+ const result = fromResult.clone();
26710
+ result.start = fromResult.start;
26711
+ result.end = toResult.start;
26712
+ result.index = Math.min(fromResult.index, toResult.index);
26713
+ if (fromResult.index < toResult.index) result.text = fromResult.text + textBetween + toResult.text;
26714
+ else result.text = toResult.text + textBetween + fromResult.text;
26715
+ return result;
26716
+ }
26717
+ };
26718
+
26719
+ //#endregion
26720
+ //#region ../../node_modules/.pnpm/chrono-node@2.9.0/node_modules/chrono-node/dist/esm/locales/en/refiners/ENMergeDateRangeRefiner.js
26721
+ var ENMergeDateRangeRefiner = class extends AbstractMergeDateRangeRefiner {
26722
+ patternBetween() {
26723
+ return /^\s*(to|-|–|until|through|till)\s*$/i;
26724
+ }
26725
+ };
26726
+
26727
+ //#endregion
26728
+ //#region ../../node_modules/.pnpm/chrono-node@2.9.0/node_modules/chrono-node/dist/esm/calculation/mergingCalculation.js
26729
+ function mergeDateTimeResult(dateResult, timeResult) {
26730
+ const result = dateResult.clone();
26731
+ const beginDate = dateResult.start;
26732
+ const beginTime = timeResult.start;
26733
+ result.start = mergeDateTimeComponent(beginDate, beginTime);
26734
+ if (dateResult.end != null || timeResult.end != null) {
26735
+ const endDateTime = mergeDateTimeComponent(dateResult.end == null ? dateResult.start : dateResult.end, timeResult.end == null ? timeResult.start : timeResult.end);
26736
+ if (dateResult.end == null && endDateTime.date().getTime() < result.start.date().getTime()) {
26737
+ const nextDay = new Date(endDateTime.date().getTime());
26738
+ nextDay.setDate(nextDay.getDate() + 1);
26739
+ if (endDateTime.isCertain("day")) assignSimilarDate(endDateTime, nextDay);
26740
+ else implySimilarDate(endDateTime, nextDay);
26741
+ }
26742
+ result.end = endDateTime;
26743
+ }
26744
+ return result;
26745
+ }
26746
+ function mergeDateTimeComponent(dateComponent, timeComponent) {
26747
+ const dateTimeComponent = dateComponent.clone();
26748
+ if (timeComponent.isCertain("hour")) {
26749
+ dateTimeComponent.assign("hour", timeComponent.get("hour"));
26750
+ dateTimeComponent.assign("minute", timeComponent.get("minute"));
26751
+ if (timeComponent.isCertain("second")) {
26752
+ dateTimeComponent.assign("second", timeComponent.get("second"));
26753
+ if (timeComponent.isCertain("millisecond")) dateTimeComponent.assign("millisecond", timeComponent.get("millisecond"));
26754
+ else dateTimeComponent.imply("millisecond", timeComponent.get("millisecond"));
26755
+ } else {
26756
+ dateTimeComponent.imply("second", timeComponent.get("second"));
26757
+ dateTimeComponent.imply("millisecond", timeComponent.get("millisecond"));
26758
+ }
26759
+ } else {
26760
+ dateTimeComponent.imply("hour", timeComponent.get("hour"));
26761
+ dateTimeComponent.imply("minute", timeComponent.get("minute"));
26762
+ dateTimeComponent.imply("second", timeComponent.get("second"));
26763
+ dateTimeComponent.imply("millisecond", timeComponent.get("millisecond"));
26764
+ }
26765
+ if (timeComponent.isCertain("timezoneOffset")) dateTimeComponent.assign("timezoneOffset", timeComponent.get("timezoneOffset"));
26766
+ if (timeComponent.isCertain("meridiem")) dateTimeComponent.assign("meridiem", timeComponent.get("meridiem"));
26767
+ else if (timeComponent.get("meridiem") != null && dateTimeComponent.get("meridiem") == null) dateTimeComponent.imply("meridiem", timeComponent.get("meridiem"));
26768
+ if (dateTimeComponent.get("meridiem") == Meridiem.PM && dateTimeComponent.get("hour") < 12) if (timeComponent.isCertain("hour")) dateTimeComponent.assign("hour", dateTimeComponent.get("hour") + 12);
26769
+ else dateTimeComponent.imply("hour", dateTimeComponent.get("hour") + 12);
26770
+ dateTimeComponent.addTags(dateComponent.tags());
26771
+ dateTimeComponent.addTags(timeComponent.tags());
26772
+ return dateTimeComponent;
26773
+ }
26774
+
26775
+ //#endregion
26776
+ //#region ../../node_modules/.pnpm/chrono-node@2.9.0/node_modules/chrono-node/dist/esm/common/refiners/AbstractMergeDateTimeRefiner.js
26777
+ var AbstractMergeDateTimeRefiner = class extends MergingRefiner {
26778
+ shouldMergeResults(textBetween, currentResult, nextResult) {
26779
+ return (currentResult.start.isOnlyDate() && nextResult.start.isOnlyTime() || nextResult.start.isOnlyDate() && currentResult.start.isOnlyTime()) && textBetween.match(this.patternBetween()) != null;
26780
+ }
26781
+ mergeResults(textBetween, currentResult, nextResult) {
26782
+ const result = currentResult.start.isOnlyDate() ? mergeDateTimeResult(currentResult, nextResult) : mergeDateTimeResult(nextResult, currentResult);
26783
+ result.index = currentResult.index;
26784
+ result.text = currentResult.text + textBetween + nextResult.text;
26785
+ return result;
26786
+ }
26787
+ };
26788
+
26789
+ //#endregion
26790
+ //#region ../../node_modules/.pnpm/chrono-node@2.9.0/node_modules/chrono-node/dist/esm/locales/en/refiners/ENMergeDateTimeRefiner.js
26791
+ var ENMergeDateTimeRefiner = class extends AbstractMergeDateTimeRefiner {
26792
+ patternBetween() {
26793
+ return /* @__PURE__ */ new RegExp("^\\s*(T|at|after|before|on|of|,|-|\\.|∙|:)?\\s*$");
26794
+ }
26795
+ };
26796
+
26797
+ //#endregion
26798
+ //#region ../../node_modules/.pnpm/chrono-node@2.9.0/node_modules/chrono-node/dist/esm/common/refiners/ExtractTimezoneAbbrRefiner.js
26799
+ const TIMEZONE_NAME_PATTERN = /* @__PURE__ */ new RegExp("^\\s*,?\\s*\\(?([A-Z]{2,4})\\)?(?=\\W|$)", "i");
26800
+ var ExtractTimezoneAbbrRefiner = class {
26801
+ timezoneOverrides;
26802
+ constructor(timezoneOverrides) {
26803
+ this.timezoneOverrides = timezoneOverrides;
26804
+ }
26805
+ refine(context, results) {
26806
+ const timezoneOverrides = context.option.timezones ?? {};
26807
+ results.forEach((result) => {
26808
+ const suffix = context.text.substring(result.index + result.text.length);
26809
+ const match = TIMEZONE_NAME_PATTERN.exec(suffix);
26810
+ if (!match) return;
26811
+ const timezoneAbbr = match[1].toUpperCase();
26812
+ const extractedTimezoneOffset = toTimezoneOffset(timezoneAbbr, result.start.date() ?? result.refDate ?? /* @__PURE__ */ new Date(), {
26813
+ ...this.timezoneOverrides,
26814
+ ...timezoneOverrides
26815
+ });
26816
+ if (extractedTimezoneOffset == null) return;
26817
+ context.debug(() => {
26818
+ console.log(`Extracting timezone: '${timezoneAbbr}' into: ${extractedTimezoneOffset} for: ${result.start}`);
26819
+ });
26820
+ const currentTimezoneOffset = result.start.get("timezoneOffset");
26821
+ if (currentTimezoneOffset !== null && extractedTimezoneOffset != currentTimezoneOffset) {
26822
+ if (result.start.isCertain("timezoneOffset")) return;
26823
+ if (timezoneAbbr != match[1]) return;
26824
+ }
26825
+ if (result.start.isOnlyDate()) {
26826
+ if (timezoneAbbr != match[1]) return;
26827
+ }
26828
+ result.text += match[0];
26829
+ if (!result.start.isCertain("timezoneOffset")) result.start.assign("timezoneOffset", extractedTimezoneOffset);
26830
+ if (result.end != null && !result.end.isCertain("timezoneOffset")) result.end.assign("timezoneOffset", extractedTimezoneOffset);
26831
+ });
26832
+ return results;
26833
+ }
26834
+ };
26835
+
26836
+ //#endregion
26837
+ //#region ../../node_modules/.pnpm/chrono-node@2.9.0/node_modules/chrono-node/dist/esm/common/refiners/ExtractTimezoneOffsetRefiner.js
26838
+ const TIMEZONE_OFFSET_PATTERN = /* @__PURE__ */ new RegExp("^\\s*(?:\\(?(?:GMT|UTC)\\s?)?([+-])(\\d{1,2})(?::?(\\d{2}))?\\)?", "i");
26839
+ const TIMEZONE_OFFSET_SIGN_GROUP = 1;
26840
+ const TIMEZONE_OFFSET_HOUR_OFFSET_GROUP = 2;
26841
+ const TIMEZONE_OFFSET_MINUTE_OFFSET_GROUP = 3;
26842
+ var ExtractTimezoneOffsetRefiner = class {
26843
+ refine(context, results) {
26844
+ results.forEach(function(result) {
26845
+ if (result.start.isCertain("timezoneOffset")) return;
26846
+ const suffix = context.text.substring(result.index + result.text.length);
26847
+ const match = TIMEZONE_OFFSET_PATTERN.exec(suffix);
26848
+ if (!match) return;
26849
+ context.debug(() => {
26850
+ console.log(`Extracting timezone: '${match[0]}' into : ${result}`);
26851
+ });
26852
+ const hourOffset = parseInt(match[TIMEZONE_OFFSET_HOUR_OFFSET_GROUP]);
26853
+ const minuteOffset = parseInt(match[TIMEZONE_OFFSET_MINUTE_OFFSET_GROUP] || "0");
26854
+ let timezoneOffset = hourOffset * 60 + minuteOffset;
26855
+ if (timezoneOffset > 840) return;
26856
+ if (match[TIMEZONE_OFFSET_SIGN_GROUP] === "-") timezoneOffset = -timezoneOffset;
26857
+ if (result.end != null) result.end.assign("timezoneOffset", timezoneOffset);
26858
+ result.start.assign("timezoneOffset", timezoneOffset);
26859
+ result.text += match[0];
26860
+ });
26861
+ return results;
26862
+ }
26863
+ };
26864
+
26865
+ //#endregion
26866
+ //#region ../../node_modules/.pnpm/chrono-node@2.9.0/node_modules/chrono-node/dist/esm/common/refiners/OverlapRemovalRefiner.js
26867
+ var OverlapRemovalRefiner = class {
26868
+ refine(context, results) {
26869
+ if (results.length < 2) return results;
26870
+ const filteredResults = [];
26871
+ let prevResult = results[0];
26872
+ for (let i = 1; i < results.length; i++) {
26873
+ const result = results[i];
26874
+ if (result.index >= prevResult.index + prevResult.text.length) {
26875
+ filteredResults.push(prevResult);
26876
+ prevResult = result;
26877
+ continue;
26878
+ }
26879
+ let kept = null;
26880
+ let removed = null;
26881
+ if (result.text.length > prevResult.text.length) {
26882
+ kept = result;
26883
+ removed = prevResult;
26884
+ } else {
26885
+ kept = prevResult;
26886
+ removed = result;
26887
+ }
26888
+ context.debug(() => {
26889
+ console.log(`${this.constructor.name} remove ${removed} by ${kept}`);
26890
+ });
26891
+ prevResult = kept;
26892
+ }
26893
+ if (prevResult != null) filteredResults.push(prevResult);
26894
+ return filteredResults;
26895
+ }
26896
+ };
26897
+
26898
+ //#endregion
26899
+ //#region ../../node_modules/.pnpm/chrono-node@2.9.0/node_modules/chrono-node/dist/esm/common/refiners/ForwardDateRefiner.js
26900
+ var ForwardDateRefiner = class {
26901
+ refine(context, results) {
26902
+ if (!context.option.forwardDate) return results;
26903
+ results.forEach((result) => {
26904
+ let refDate = context.reference.getDateWithAdjustedTimezone();
26905
+ if (result.start.isOnlyTime() && context.reference.instant > result.start.date()) {
26906
+ const refDate = context.reference.getDateWithAdjustedTimezone();
26907
+ const refFollowingDay = new Date(refDate);
26908
+ refFollowingDay.setDate(refFollowingDay.getDate() + 1);
26909
+ implySimilarDate(result.start, refFollowingDay);
26910
+ context.debug(() => {
26911
+ console.log(`${this.constructor.name} adjusted ${result} time from the ref date (${refDate}) to the following day (${refFollowingDay})`);
26912
+ });
26913
+ if (result.end && result.end.isOnlyTime()) {
26914
+ implySimilarDate(result.end, refFollowingDay);
26915
+ if (result.start.date() > result.end.date()) {
26916
+ refFollowingDay.setDate(refFollowingDay.getDate() + 1);
26917
+ implySimilarDate(result.end, refFollowingDay);
26918
+ }
26919
+ }
26920
+ }
26921
+ if (result.start.isOnlyWeekdayComponent() && refDate > result.start.date()) {
26922
+ let daysToAdd = result.start.get("weekday") - refDate.getDay();
26923
+ if (daysToAdd <= 0) daysToAdd += 7;
26924
+ refDate = addDuration(refDate, { day: daysToAdd });
26925
+ implySimilarDate(result.start, refDate);
26926
+ context.debug(() => {
26927
+ console.log(`${this.constructor.name} adjusted ${result} weekday (${result.start})`);
26928
+ });
26929
+ if (result.end && result.end.isOnlyWeekdayComponent()) {
26930
+ let daysToAdd = result.end.get("weekday") - refDate.getDay();
26931
+ if (daysToAdd <= 0) daysToAdd += 7;
26932
+ refDate = addDuration(refDate, { day: daysToAdd });
26933
+ implySimilarDate(result.end, refDate);
26934
+ context.debug(() => {
26935
+ console.log(`${this.constructor.name} adjusted ${result} weekday (${result.end})`);
26936
+ });
26937
+ }
26938
+ }
26939
+ if (result.start.isDateWithUnknownYear() && refDate > result.start.date()) for (let i = 0; i < 3 && refDate > result.start.date(); i++) {
26940
+ result.start.imply("year", result.start.get("year") + 1);
26941
+ context.debug(() => {
26942
+ console.log(`${this.constructor.name} adjusted ${result} year (${result.start})`);
26943
+ });
26944
+ if (result.end && !result.end.isCertain("year")) {
26945
+ result.end.imply("year", result.end.get("year") + 1);
26946
+ context.debug(() => {
26947
+ console.log(`${this.constructor.name} adjusted ${result} month (${result.start})`);
26948
+ });
26949
+ }
26950
+ }
26951
+ });
26952
+ return results;
26953
+ }
26954
+ };
26955
+
26956
+ //#endregion
26957
+ //#region ../../node_modules/.pnpm/chrono-node@2.9.0/node_modules/chrono-node/dist/esm/common/refiners/UnlikelyFormatFilter.js
26958
+ var UnlikelyFormatFilter = class extends Filter {
26959
+ strictMode;
26960
+ constructor(strictMode) {
26961
+ super();
26962
+ this.strictMode = strictMode;
26963
+ }
26964
+ isValid(context, result) {
26965
+ if (result.text.replace(" ", "").match(/^\d*(\.\d*)?$/)) {
26966
+ context.debug(() => {
26967
+ console.log(`Removing unlikely result '${result.text}'`);
26968
+ });
26969
+ return false;
26970
+ }
26971
+ if (!result.start.isValidDate()) {
26972
+ context.debug(() => {
26973
+ console.log(`Removing invalid result: ${result} (${result.start})`);
26974
+ });
26975
+ return false;
26976
+ }
26977
+ if (result.end && !result.end.isValidDate()) {
26978
+ context.debug(() => {
26979
+ console.log(`Removing invalid result: ${result} (${result.end})`);
26980
+ });
26981
+ return false;
26982
+ }
26983
+ if (this.strictMode) return this.isStrictModeValid(context, result);
26984
+ return true;
26985
+ }
26986
+ isStrictModeValid(context, result) {
26987
+ if (result.start.isOnlyWeekdayComponent()) {
26988
+ context.debug(() => {
26989
+ console.log(`(Strict) Removing weekday only component: ${result} (${result.end})`);
26990
+ });
26991
+ return false;
26992
+ }
26993
+ return true;
26994
+ }
26995
+ };
26996
+
26997
+ //#endregion
26998
+ //#region ../../node_modules/.pnpm/chrono-node@2.9.0/node_modules/chrono-node/dist/esm/common/parsers/ISOFormatParser.js
26999
+ const PATTERN$6 = new RegExp("([0-9]{4})\\-([0-9]{1,2})\\-([0-9]{1,2})(?:T([0-9]{1,2}):([0-9]{1,2})(?::([0-9]{1,2})(?:\\.(\\d{1,4}))?)?(Z|([+-]\\d{2}):?(\\d{2})?)?)?(?=\\W|$)", "i");
27000
+ const YEAR_NUMBER_GROUP = 1;
27001
+ const MONTH_NUMBER_GROUP = 2;
27002
+ const DATE_NUMBER_GROUP = 3;
27003
+ const HOUR_NUMBER_GROUP = 4;
27004
+ const MINUTE_NUMBER_GROUP = 5;
27005
+ const SECOND_NUMBER_GROUP = 6;
27006
+ const MILLISECOND_NUMBER_GROUP = 7;
27007
+ const TZD_GROUP = 8;
27008
+ const TZD_HOUR_OFFSET_GROUP = 9;
27009
+ const TZD_MINUTE_OFFSET_GROUP = 10;
27010
+ var ISOFormatParser = class extends AbstractParserWithWordBoundaryChecking {
27011
+ innerPattern() {
27012
+ return PATTERN$6;
27013
+ }
27014
+ innerExtract(context, match) {
27015
+ const components = context.createParsingComponents({
27016
+ "year": parseInt(match[YEAR_NUMBER_GROUP]),
27017
+ "month": parseInt(match[MONTH_NUMBER_GROUP]),
27018
+ "day": parseInt(match[DATE_NUMBER_GROUP])
27019
+ });
27020
+ if (match[HOUR_NUMBER_GROUP] != null) {
27021
+ components.assign("hour", parseInt(match[HOUR_NUMBER_GROUP]));
27022
+ components.assign("minute", parseInt(match[MINUTE_NUMBER_GROUP]));
27023
+ if (match[SECOND_NUMBER_GROUP] != null) components.assign("second", parseInt(match[SECOND_NUMBER_GROUP]));
27024
+ if (match[MILLISECOND_NUMBER_GROUP] != null) components.assign("millisecond", parseInt(match[MILLISECOND_NUMBER_GROUP]));
27025
+ if (match[TZD_GROUP] != null) {
27026
+ let offset = 0;
27027
+ if (match[TZD_HOUR_OFFSET_GROUP]) {
27028
+ const hourOffset = parseInt(match[TZD_HOUR_OFFSET_GROUP]);
27029
+ let minuteOffset = 0;
27030
+ if (match[TZD_MINUTE_OFFSET_GROUP] != null) minuteOffset = parseInt(match[TZD_MINUTE_OFFSET_GROUP]);
27031
+ offset = hourOffset * 60;
27032
+ if (offset < 0) offset -= minuteOffset;
27033
+ else offset += minuteOffset;
27034
+ }
27035
+ components.assign("timezoneOffset", offset);
27036
+ }
27037
+ }
27038
+ return components.addTag("parser/ISOFormatParser");
27039
+ }
27040
+ };
27041
+
27042
+ //#endregion
27043
+ //#region ../../node_modules/.pnpm/chrono-node@2.9.0/node_modules/chrono-node/dist/esm/common/refiners/MergeWeekdayComponentRefiner.js
27044
+ var MergeWeekdayComponentRefiner = class extends MergingRefiner {
27045
+ mergeResults(textBetween, currentResult, nextResult) {
27046
+ const newResult = nextResult.clone();
27047
+ newResult.index = currentResult.index;
27048
+ newResult.text = currentResult.text + textBetween + newResult.text;
27049
+ newResult.start.assign("weekday", currentResult.start.get("weekday"));
27050
+ if (newResult.end) newResult.end.assign("weekday", currentResult.start.get("weekday"));
27051
+ return newResult;
27052
+ }
27053
+ shouldMergeResults(textBetween, currentResult, nextResult) {
27054
+ return currentResult.start.isOnlyWeekdayComponent() && !currentResult.start.isCertain("hour") && nextResult.start.isCertain("day") && textBetween.match(/^,?\s*$/) != null;
27055
+ }
27056
+ };
27057
+
27058
+ //#endregion
27059
+ //#region ../../node_modules/.pnpm/chrono-node@2.9.0/node_modules/chrono-node/dist/esm/configurations.js
27060
+ function includeCommonConfiguration(configuration, strictMode = false) {
27061
+ configuration.parsers.unshift(new ISOFormatParser());
27062
+ configuration.refiners.unshift(new MergeWeekdayComponentRefiner());
27063
+ configuration.refiners.unshift(new ExtractTimezoneOffsetRefiner());
27064
+ configuration.refiners.unshift(new OverlapRemovalRefiner());
27065
+ configuration.refiners.push(new ExtractTimezoneAbbrRefiner());
27066
+ configuration.refiners.push(new OverlapRemovalRefiner());
27067
+ configuration.refiners.push(new ForwardDateRefiner());
27068
+ configuration.refiners.push(new UnlikelyFormatFilter(strictMode));
27069
+ return configuration;
27070
+ }
27071
+
27072
+ //#endregion
27073
+ //#region ../../node_modules/.pnpm/chrono-node@2.9.0/node_modules/chrono-node/dist/esm/common/casualReferences.js
27074
+ function now(reference) {
27075
+ const targetDate = reference.getDateWithAdjustedTimezone();
27076
+ const component = new ParsingComponents(reference, {});
27077
+ assignSimilarDate(component, targetDate);
27078
+ assignSimilarTime(component, targetDate);
27079
+ component.assign("timezoneOffset", reference.getTimezoneOffset());
27080
+ component.addTag("casualReference/now");
27081
+ return component;
27082
+ }
27083
+ function today(reference) {
27084
+ const targetDate = reference.getDateWithAdjustedTimezone();
27085
+ const component = new ParsingComponents(reference, {});
27086
+ assignSimilarDate(component, targetDate);
27087
+ implySimilarTime(component, targetDate);
27088
+ component.delete("meridiem");
27089
+ component.addTag("casualReference/today");
27090
+ return component;
27091
+ }
27092
+ function yesterday(reference) {
27093
+ return theDayBefore(reference, 1).addTag("casualReference/yesterday");
27094
+ }
27095
+ function tomorrow(reference) {
27096
+ return theDayAfter(reference, 1).addTag("casualReference/tomorrow");
27097
+ }
27098
+ function theDayBefore(reference, numDay) {
27099
+ return theDayAfter(reference, -numDay);
27100
+ }
27101
+ function theDayAfter(reference, nDays) {
27102
+ const targetDate = reference.getDateWithAdjustedTimezone();
27103
+ const component = new ParsingComponents(reference, {});
27104
+ const newDate = new Date(targetDate.getTime());
27105
+ newDate.setDate(newDate.getDate() + nDays);
27106
+ assignSimilarDate(component, newDate);
27107
+ implySimilarTime(component, newDate);
27108
+ component.delete("meridiem");
27109
+ return component;
27110
+ }
27111
+ function tonight(reference, implyHour = 22) {
27112
+ const targetDate = reference.getDateWithAdjustedTimezone();
27113
+ const component = new ParsingComponents(reference, {});
27114
+ assignSimilarDate(component, targetDate);
27115
+ component.imply("hour", implyHour);
27116
+ component.imply("meridiem", Meridiem.PM);
27117
+ component.addTag("casualReference/tonight");
27118
+ return component;
27119
+ }
27120
+ function evening(reference, implyHour = 20) {
27121
+ const component = new ParsingComponents(reference, {});
27122
+ component.imply("meridiem", Meridiem.PM);
27123
+ component.imply("hour", implyHour);
27124
+ component.addTag("casualReference/evening");
27125
+ return component;
27126
+ }
27127
+ function midnight(reference) {
27128
+ const component = new ParsingComponents(reference, {});
27129
+ if (reference.getDateWithAdjustedTimezone().getHours() > 2) component.addDurationAsImplied({ day: 1 });
27130
+ component.assign("hour", 0);
27131
+ component.imply("minute", 0);
27132
+ component.imply("second", 0);
27133
+ component.imply("millisecond", 0);
27134
+ component.addTag("casualReference/midnight");
27135
+ return component;
27136
+ }
27137
+ function morning(reference, implyHour = 6) {
27138
+ const component = new ParsingComponents(reference, {});
27139
+ component.imply("meridiem", Meridiem.AM);
27140
+ component.imply("hour", implyHour);
27141
+ component.imply("minute", 0);
27142
+ component.imply("second", 0);
27143
+ component.imply("millisecond", 0);
27144
+ component.addTag("casualReference/morning");
27145
+ return component;
27146
+ }
27147
+ function afternoon(reference, implyHour = 15) {
27148
+ const component = new ParsingComponents(reference, {});
27149
+ component.imply("meridiem", Meridiem.PM);
27150
+ component.imply("hour", implyHour);
27151
+ component.imply("minute", 0);
27152
+ component.imply("second", 0);
27153
+ component.imply("millisecond", 0);
27154
+ component.addTag("casualReference/afternoon");
27155
+ return component;
27156
+ }
27157
+ function noon(reference) {
27158
+ const component = new ParsingComponents(reference, {});
27159
+ component.imply("meridiem", Meridiem.AM);
27160
+ component.assign("hour", 12);
27161
+ component.imply("minute", 0);
27162
+ component.imply("second", 0);
27163
+ component.imply("millisecond", 0);
27164
+ component.addTag("casualReference/noon");
27165
+ return component;
27166
+ }
27167
+
27168
+ //#endregion
27169
+ //#region ../../node_modules/.pnpm/chrono-node@2.9.0/node_modules/chrono-node/dist/esm/locales/en/parsers/ENCasualDateParser.js
27170
+ const PATTERN$5 = /(now|today|tonight|tomorrow|overmorrow|tmr|tmrw|yesterday|last\s*night)(?=\W|$)/i;
27171
+ var ENCasualDateParser = class extends AbstractParserWithWordBoundaryChecking {
27172
+ innerPattern(context) {
27173
+ return PATTERN$5;
27174
+ }
27175
+ innerExtract(context, match) {
27176
+ let targetDate = context.refDate;
27177
+ const lowerText = match[0].toLowerCase();
27178
+ let component = context.createParsingComponents();
27179
+ switch (lowerText) {
27180
+ case "now":
27181
+ component = now(context.reference);
27182
+ break;
27183
+ case "today":
27184
+ component = today(context.reference);
27185
+ break;
27186
+ case "yesterday":
27187
+ component = yesterday(context.reference);
27188
+ break;
27189
+ case "tomorrow":
27190
+ case "tmr":
27191
+ case "tmrw":
27192
+ component = tomorrow(context.reference);
27193
+ break;
27194
+ case "tonight":
27195
+ component = tonight(context.reference);
27196
+ break;
27197
+ case "overmorrow":
27198
+ component = theDayAfter(context.reference, 2);
27199
+ break;
27200
+ default:
27201
+ if (lowerText.match(/last\s*night/)) {
27202
+ if (targetDate.getHours() > 6) {
27203
+ const previousDay = new Date(targetDate.getTime());
27204
+ previousDay.setDate(previousDay.getDate() - 1);
27205
+ targetDate = previousDay;
27206
+ }
27207
+ assignSimilarDate(component, targetDate);
27208
+ component.imply("hour", 0);
27209
+ }
27210
+ break;
27211
+ }
27212
+ component.addTag("parser/ENCasualDateParser");
27213
+ return component;
27214
+ }
27215
+ };
27216
+
27217
+ //#endregion
27218
+ //#region ../../node_modules/.pnpm/chrono-node@2.9.0/node_modules/chrono-node/dist/esm/locales/en/parsers/ENCasualTimeParser.js
27219
+ const PATTERN$4 = /(?:this)?\s{0,3}(morning|afternoon|evening|night|midnight|midday|noon)(?=\W|$)/i;
27220
+ var ENCasualTimeParser = class extends AbstractParserWithWordBoundaryChecking {
27221
+ innerPattern() {
27222
+ return PATTERN$4;
27223
+ }
27224
+ innerExtract(context, match) {
27225
+ let component = null;
27226
+ switch (match[1].toLowerCase()) {
27227
+ case "afternoon":
27228
+ component = afternoon(context.reference);
27229
+ break;
27230
+ case "evening":
27231
+ case "night":
27232
+ component = evening(context.reference);
27233
+ break;
27234
+ case "midnight":
27235
+ component = midnight(context.reference);
27236
+ break;
27237
+ case "morning":
27238
+ component = morning(context.reference);
27239
+ break;
27240
+ case "noon":
27241
+ case "midday":
27242
+ component = noon(context.reference);
27243
+ break;
27244
+ }
27245
+ if (component) component.addTag("parser/ENCasualTimeParser");
27246
+ return component;
27247
+ }
27248
+ };
27249
+
27250
+ //#endregion
27251
+ //#region ../../node_modules/.pnpm/chrono-node@2.9.0/node_modules/chrono-node/dist/esm/calculation/weekdays.js
27252
+ function createParsingComponentsAtWeekday(reference, weekday, modifier) {
27253
+ const daysToWeekday = getDaysToWeekday(reference.getDateWithAdjustedTimezone(), weekday, modifier);
27254
+ let components = new ParsingComponents(reference);
27255
+ components = components.addDurationAsImplied({ day: daysToWeekday });
27256
+ components.assign("weekday", weekday);
27257
+ return components;
27258
+ }
27259
+ function getDaysToWeekday(refDate, weekday, modifier) {
27260
+ const refWeekday = refDate.getDay();
27261
+ switch (modifier) {
27262
+ case "this": return getDaysForwardToWeekday(refDate, weekday);
27263
+ case "last": return getBackwardDaysToWeekday(refDate, weekday);
27264
+ case "next":
27265
+ if (refWeekday == Weekday.SUNDAY) return weekday == Weekday.SUNDAY ? 7 : weekday;
27266
+ if (refWeekday == Weekday.SATURDAY) {
27267
+ if (weekday == Weekday.SATURDAY) return 7;
27268
+ if (weekday == Weekday.SUNDAY) return 8;
27269
+ return 1 + weekday;
27270
+ }
27271
+ if (weekday < refWeekday && weekday != Weekday.SUNDAY) return getDaysForwardToWeekday(refDate, weekday);
27272
+ else return getDaysForwardToWeekday(refDate, weekday) + 7;
27273
+ }
27274
+ return getDaysToWeekdayClosest(refDate, weekday);
27275
+ }
27276
+ function getDaysToWeekdayClosest(refDate, weekday) {
27277
+ const backward = getBackwardDaysToWeekday(refDate, weekday);
27278
+ const forward = getDaysForwardToWeekday(refDate, weekday);
27279
+ return forward < -backward ? forward : backward;
27280
+ }
27281
+ function getDaysForwardToWeekday(refDate, weekday) {
27282
+ let forwardCount = weekday - refDate.getDay();
27283
+ if (forwardCount < 0) forwardCount += 7;
27284
+ return forwardCount;
27285
+ }
27286
+ function getBackwardDaysToWeekday(refDate, weekday) {
27287
+ let backwardCount = weekday - refDate.getDay();
27288
+ if (backwardCount >= 0) backwardCount -= 7;
27289
+ return backwardCount;
27290
+ }
27291
+
27292
+ //#endregion
27293
+ //#region ../../node_modules/.pnpm/chrono-node@2.9.0/node_modules/chrono-node/dist/esm/locales/en/parsers/ENWeekdayParser.js
27294
+ const PATTERN$3 = new RegExp(`(?:(?:\\,|\\(|\\()\\s*)?(?:on\\s*?)?(?:(this|last|past|next)\\s*)?(${matchAnyPattern(WEEKDAY_DICTIONARY)}|weekend|weekday)(?:\\s*(?:\\,|\\)|\\)))?(?:\\s*(this|last|past|next)\\s*week)?(?=\\W|\$)`, "i");
27295
+ const PREFIX_GROUP = 1;
27296
+ const WEEKDAY_GROUP = 2;
27297
+ const POSTFIX_GROUP = 3;
27298
+ var ENWeekdayParser = class extends AbstractParserWithWordBoundaryChecking {
27299
+ innerPattern() {
27300
+ return PATTERN$3;
27301
+ }
27302
+ innerExtract(context, match) {
27303
+ const prefix = match[PREFIX_GROUP];
27304
+ const postfix = match[POSTFIX_GROUP];
27305
+ let modifierWord = prefix || postfix;
27306
+ modifierWord = modifierWord || "";
27307
+ modifierWord = modifierWord.toLowerCase();
27308
+ let modifier = null;
27309
+ if (modifierWord == "last" || modifierWord == "past") modifier = "last";
27310
+ else if (modifierWord == "next") modifier = "next";
27311
+ else if (modifierWord == "this") modifier = "this";
27312
+ const weekday_word = match[WEEKDAY_GROUP].toLowerCase();
27313
+ let weekday;
27314
+ if (WEEKDAY_DICTIONARY[weekday_word] !== void 0) weekday = WEEKDAY_DICTIONARY[weekday_word];
27315
+ else if (weekday_word == "weekend") weekday = modifier == "last" ? Weekday.SUNDAY : Weekday.SATURDAY;
27316
+ else if (weekday_word == "weekday") {
27317
+ const refWeekday = context.reference.getDateWithAdjustedTimezone().getDay();
27318
+ if (refWeekday == Weekday.SUNDAY || refWeekday == Weekday.SATURDAY) weekday = modifier == "last" ? Weekday.FRIDAY : Weekday.MONDAY;
27319
+ else {
27320
+ weekday = refWeekday - 1;
27321
+ weekday = modifier == "last" ? weekday - 1 : weekday + 1;
27322
+ weekday = weekday % 5 + 1;
27323
+ }
27324
+ } else return null;
27325
+ return createParsingComponentsAtWeekday(context.reference, weekday, modifier);
27326
+ }
27327
+ };
27328
+
27329
+ //#endregion
27330
+ //#region ../../node_modules/.pnpm/chrono-node@2.9.0/node_modules/chrono-node/dist/esm/locales/en/parsers/ENRelativeDateFormatParser.js
27331
+ const PATTERN$2 = new RegExp(`(this|last|past|next|after\\s*this)\\s*(${matchAnyPattern(TIME_UNIT_DICTIONARY)})(?=\\s*)(?=\\W|\$)`, "i");
27332
+ const MODIFIER_WORD_GROUP = 1;
27333
+ const RELATIVE_WORD_GROUP = 2;
27334
+ var ENRelativeDateFormatParser = class extends AbstractParserWithWordBoundaryChecking {
27335
+ innerPattern() {
27336
+ return PATTERN$2;
27337
+ }
27338
+ innerExtract(context, match) {
27339
+ const modifier = match[MODIFIER_WORD_GROUP].toLowerCase();
27340
+ const unitWord = match[RELATIVE_WORD_GROUP].toLowerCase();
27341
+ const timeunit = TIME_UNIT_DICTIONARY[unitWord];
27342
+ if (modifier == "next" || modifier.startsWith("after")) {
27343
+ const timeUnits = {};
27344
+ timeUnits[timeunit] = 1;
27345
+ return ParsingComponents.createRelativeFromReference(context.reference, timeUnits);
27346
+ }
27347
+ if (modifier == "last" || modifier == "past") {
27348
+ const timeUnits = {};
27349
+ timeUnits[timeunit] = -1;
27350
+ return ParsingComponents.createRelativeFromReference(context.reference, timeUnits);
27351
+ }
27352
+ const components = context.createParsingComponents();
27353
+ let date = new Date(context.reference.instant.getTime());
27354
+ if (unitWord.match(/week/i)) {
27355
+ date.setDate(date.getDate() - date.getDay());
27356
+ components.imply("day", date.getDate());
27357
+ components.imply("month", date.getMonth() + 1);
27358
+ components.imply("year", date.getFullYear());
27359
+ } else if (unitWord.match(/month/i)) {
27360
+ date.setDate(1);
27361
+ components.imply("day", date.getDate());
27362
+ components.assign("year", date.getFullYear());
27363
+ components.assign("month", date.getMonth() + 1);
27364
+ } else if (unitWord.match(/year/i)) {
27365
+ date.setDate(1);
27366
+ date.setMonth(0);
27367
+ components.imply("day", date.getDate());
27368
+ components.imply("month", date.getMonth() + 1);
27369
+ components.assign("year", date.getFullYear());
27370
+ }
27371
+ return components;
27372
+ }
27373
+ };
27374
+
27375
+ //#endregion
27376
+ //#region ../../node_modules/.pnpm/chrono-node@2.9.0/node_modules/chrono-node/dist/esm/common/parsers/SlashDateFormatParser.js
27377
+ const PATTERN$1 = new RegExp("([^\\d]|^)([0-3]{0,1}[0-9]{1})[\\/\\.\\-]([0-3]{0,1}[0-9]{1})(?:[\\/\\.\\-]([0-9]{4}|[0-9]{2}))?(\\W|$)", "i");
27378
+ const OPENING_GROUP = 1;
27379
+ const ENDING_GROUP = 5;
27380
+ const FIRST_NUMBERS_GROUP = 2;
27381
+ const SECOND_NUMBERS_GROUP = 3;
27382
+ const YEAR_GROUP$1 = 4;
27383
+ var SlashDateFormatParser = class {
27384
+ groupNumberMonth;
27385
+ groupNumberDay;
27386
+ constructor(littleEndian) {
27387
+ this.groupNumberMonth = littleEndian ? SECOND_NUMBERS_GROUP : FIRST_NUMBERS_GROUP;
27388
+ this.groupNumberDay = littleEndian ? FIRST_NUMBERS_GROUP : SECOND_NUMBERS_GROUP;
27389
+ }
27390
+ pattern() {
27391
+ return PATTERN$1;
27392
+ }
27393
+ extract(context, match) {
27394
+ const index = match.index + match[OPENING_GROUP].length;
27395
+ const indexEnd = match.index + match[0].length - match[ENDING_GROUP].length;
27396
+ if (index > 0) {
27397
+ if (context.text.substring(0, index).match("\\d/?$")) return;
27398
+ }
27399
+ if (indexEnd < context.text.length) {
27400
+ if (context.text.substring(indexEnd).match("^/?\\d")) return;
27401
+ }
27402
+ const text = context.text.substring(index, indexEnd);
27403
+ if (text.match(/^\d\.\d$/) || text.match(/^\d\.\d{1,2}\.\d{1,2}\s*$/)) return;
27404
+ if (!match[YEAR_GROUP$1] && text.indexOf("/") < 0) return;
27405
+ const result = context.createParsingResult(index, text);
27406
+ let month = parseInt(match[this.groupNumberMonth]);
27407
+ let day = parseInt(match[this.groupNumberDay]);
27408
+ if (month < 1 || month > 12) {
27409
+ if (month > 12) if (day >= 1 && day <= 12 && month <= 31) [day, month] = [month, day];
27410
+ else return null;
27411
+ }
27412
+ if (day < 1 || day > 31) return null;
27413
+ result.start.assign("day", day);
27414
+ result.start.assign("month", month);
27415
+ if (match[YEAR_GROUP$1]) {
27416
+ const year = findMostLikelyADYear(parseInt(match[YEAR_GROUP$1]));
27417
+ result.start.assign("year", year);
27418
+ } else {
27419
+ const year = findYearClosestToRef(context.refDate, day, month);
27420
+ result.start.imply("year", year);
27421
+ }
27422
+ return result.addTag("parser/SlashDateFormatParser");
27423
+ }
27424
+ };
27425
+
27426
+ //#endregion
27427
+ //#region ../../node_modules/.pnpm/chrono-node@2.9.0/node_modules/chrono-node/dist/esm/locales/en/parsers/ENTimeUnitCasualRelativeFormatParser.js
27428
+ const PATTERN = new RegExp(`(this|last|past|next|after|\\+|-)\\s*(${TIME_UNITS_PATTERN})(?=\\W|$)`, "i");
27429
+ const PATTERN_NO_ABBR = new RegExp(`(this|last|past|next|after|\\+|-)\\s*(${TIME_UNITS_NO_ABBR_PATTERN})(?=\\W|$)`, "i");
27430
+ var ENTimeUnitCasualRelativeFormatParser = class extends AbstractParserWithWordBoundaryChecking {
27431
+ allowAbbreviations;
27432
+ constructor(allowAbbreviations = true) {
27433
+ super();
27434
+ this.allowAbbreviations = allowAbbreviations;
27435
+ }
27436
+ innerPattern() {
27437
+ return this.allowAbbreviations ? PATTERN : PATTERN_NO_ABBR;
27438
+ }
27439
+ innerExtract(context, match) {
27440
+ const prefix = match[1].toLowerCase();
27441
+ let duration = parseDuration(match[2]);
27442
+ if (!duration) return null;
27443
+ switch (prefix) {
27444
+ case "last":
27445
+ case "past":
27446
+ case "-":
27447
+ duration = reverseDuration(duration);
27448
+ break;
27449
+ }
27450
+ return ParsingComponents.createRelativeFromReference(context.reference, duration);
27451
+ }
27452
+ };
27453
+
27454
+ //#endregion
27455
+ //#region ../../node_modules/.pnpm/chrono-node@2.9.0/node_modules/chrono-node/dist/esm/locales/en/refiners/ENMergeRelativeAfterDateRefiner.js
27456
+ function IsPositiveFollowingReference(result) {
27457
+ return result.text.match(/^[+-]/i) != null;
27458
+ }
27459
+ function IsNegativeFollowingReference(result) {
27460
+ return result.text.match(/^-/i) != null;
27461
+ }
27462
+ var ENMergeRelativeAfterDateRefiner = class extends MergingRefiner {
27463
+ shouldMergeResults(textBetween, currentResult, nextResult) {
27464
+ if (!textBetween.match(/^\s*$/i)) return false;
27465
+ return IsPositiveFollowingReference(nextResult) || IsNegativeFollowingReference(nextResult);
27466
+ }
27467
+ mergeResults(textBetween, currentResult, nextResult, context) {
27468
+ let timeUnits = parseDuration(nextResult.text);
27469
+ if (IsNegativeFollowingReference(nextResult)) timeUnits = reverseDuration(timeUnits);
27470
+ const components = ParsingComponents.createRelativeFromReference(ReferenceWithTimezone.fromDate(currentResult.start.date()), timeUnits);
27471
+ return new ParsingResult(currentResult.reference, currentResult.index, `${currentResult.text}${textBetween}${nextResult.text}`, components);
27472
+ }
27473
+ };
27474
+
27475
+ //#endregion
27476
+ //#region ../../node_modules/.pnpm/chrono-node@2.9.0/node_modules/chrono-node/dist/esm/locales/en/refiners/ENMergeRelativeFollowByDateRefiner.js
27477
+ function hasImpliedEarlierReferenceDate(result) {
27478
+ return result.text.match(/\s+(before|from)$/i) != null;
27479
+ }
27480
+ function hasImpliedLaterReferenceDate(result) {
27481
+ return result.text.match(/\s+(after|since)$/i) != null;
27482
+ }
27483
+ var ENMergeRelativeFollowByDateRefiner = class extends MergingRefiner {
27484
+ patternBetween() {
27485
+ return /^\s*$/i;
27486
+ }
27487
+ shouldMergeResults(textBetween, currentResult, nextResult) {
27488
+ if (!textBetween.match(this.patternBetween())) return false;
27489
+ if (!hasImpliedEarlierReferenceDate(currentResult) && !hasImpliedLaterReferenceDate(currentResult)) return false;
27490
+ return !!nextResult.start.get("day") && !!nextResult.start.get("month") && !!nextResult.start.get("year");
27491
+ }
27492
+ mergeResults(textBetween, currentResult, nextResult) {
27493
+ let duration = parseDuration(currentResult.text);
27494
+ if (hasImpliedEarlierReferenceDate(currentResult)) duration = reverseDuration(duration);
27495
+ const components = ParsingComponents.createRelativeFromReference(ReferenceWithTimezone.fromDate(nextResult.start.date()), duration);
27496
+ return new ParsingResult(nextResult.reference, currentResult.index, `${currentResult.text}${textBetween}${nextResult.text}`, components);
27497
+ }
27498
+ };
27499
+
27500
+ //#endregion
27501
+ //#region ../../node_modules/.pnpm/chrono-node@2.9.0/node_modules/chrono-node/dist/esm/locales/en/refiners/ENExtractYearSuffixRefiner.js
27502
+ const YEAR_SUFFIX_PATTERN = new RegExp(`^\\s*(${YEAR_PATTERN})`, "i");
27503
+ const YEAR_GROUP = 1;
27504
+ var ENExtractYearSuffixRefiner = class {
27505
+ refine(context, results) {
27506
+ results.forEach(function(result) {
27507
+ if (!result.start.isDateWithUnknownYear()) return;
27508
+ const suffix = context.text.substring(result.index + result.text.length);
27509
+ const match = YEAR_SUFFIX_PATTERN.exec(suffix);
27510
+ if (!match) return;
27511
+ if (match[0].trim().length <= 3) return;
27512
+ context.debug(() => {
27513
+ console.log(`Extracting year: '${match[0]}' into : ${result}`);
27514
+ });
27515
+ const year = parseYear(match[YEAR_GROUP]);
27516
+ if (result.end != null) result.end.assign("year", year);
27517
+ result.start.assign("year", year);
27518
+ result.text += match[0];
27519
+ });
27520
+ return results;
27521
+ }
27522
+ };
27523
+
27524
+ //#endregion
27525
+ //#region ../../node_modules/.pnpm/chrono-node@2.9.0/node_modules/chrono-node/dist/esm/locales/en/refiners/ENUnlikelyFormatFilter.js
27526
+ var ENUnlikelyFormatFilter = class extends Filter {
27527
+ constructor() {
27528
+ super();
27529
+ }
27530
+ isValid(context, result) {
27531
+ const text = result.text.trim();
27532
+ if (text === context.text.trim()) return true;
27533
+ if (text.toLowerCase() === "may") {
27534
+ if (!context.text.substring(0, result.index).trim().match(/\b(in)$/i)) {
27535
+ context.debug(() => {
27536
+ console.log(`Removing unlikely result: ${result}`);
27537
+ });
27538
+ return false;
27539
+ }
27540
+ }
27541
+ if (text.toLowerCase().endsWith("the second")) {
27542
+ if (context.text.substring(result.index + result.text.length).trim().length > 0) context.debug(() => {
27543
+ console.log(`Removing unlikely result: ${result}`);
27544
+ });
27545
+ return false;
27546
+ }
27547
+ return true;
27548
+ }
27549
+ };
27550
+
27551
+ //#endregion
27552
+ //#region ../../node_modules/.pnpm/chrono-node@2.9.0/node_modules/chrono-node/dist/esm/locales/en/configuration.js
27553
+ var ENDefaultConfiguration = class {
27554
+ createCasualConfiguration(littleEndian = false) {
27555
+ const option = this.createConfiguration(false, littleEndian);
27556
+ option.parsers.push(new ENCasualDateParser());
27557
+ option.parsers.push(new ENCasualTimeParser());
27558
+ option.parsers.push(new ENMonthNameParser());
27559
+ option.parsers.push(new ENRelativeDateFormatParser());
27560
+ option.parsers.push(new ENTimeUnitCasualRelativeFormatParser());
27561
+ option.refiners.push(new ENUnlikelyFormatFilter());
27562
+ return option;
27563
+ }
27564
+ createConfiguration(strictMode = true, littleEndian = false) {
27565
+ const options = includeCommonConfiguration({
27566
+ parsers: [
27567
+ new SlashDateFormatParser(littleEndian),
27568
+ new ENTimeUnitWithinFormatParser(strictMode),
27569
+ new ENMonthNameLittleEndianParser(),
27570
+ new ENMonthNameMiddleEndianParser(littleEndian),
27571
+ new ENWeekdayParser(),
27572
+ new ENSlashMonthFormatParser(),
27573
+ new ENTimeExpressionParser(strictMode),
27574
+ new ENTimeUnitAgoFormatParser(strictMode),
27575
+ new ENTimeUnitLaterFormatParser(strictMode)
27576
+ ],
27577
+ refiners: [new ENMergeDateTimeRefiner()]
27578
+ }, strictMode);
27579
+ options.parsers.unshift(new ENYearMonthDayParser(strictMode));
27580
+ options.refiners.unshift(new ENMergeRelativeFollowByDateRefiner());
27581
+ options.refiners.unshift(new ENMergeRelativeAfterDateRefiner());
27582
+ options.refiners.unshift(new OverlapRemovalRefiner());
27583
+ options.refiners.push(new ENMergeDateTimeRefiner());
27584
+ options.refiners.push(new ENExtractYearSuffixRefiner());
27585
+ options.refiners.push(new ENMergeDateRangeRefiner());
27586
+ return options;
27587
+ }
27588
+ };
27589
+
27590
+ //#endregion
27591
+ //#region ../../node_modules/.pnpm/chrono-node@2.9.0/node_modules/chrono-node/dist/esm/chrono.js
27592
+ var Chrono = class Chrono {
27593
+ parsers;
27594
+ refiners;
27595
+ defaultConfig = new ENDefaultConfiguration();
27596
+ constructor(configuration) {
27597
+ configuration = configuration || this.defaultConfig.createCasualConfiguration();
27598
+ this.parsers = [...configuration.parsers];
27599
+ this.refiners = [...configuration.refiners];
27600
+ }
27601
+ clone() {
27602
+ return new Chrono({
27603
+ parsers: [...this.parsers],
27604
+ refiners: [...this.refiners]
27605
+ });
27606
+ }
27607
+ parseDate(text, referenceDate, option) {
27608
+ const results = this.parse(text, referenceDate, option);
27609
+ return results.length > 0 ? results[0].start.date() : null;
27610
+ }
27611
+ parse(text, referenceDate, option) {
27612
+ const context = new ParsingContext(text, referenceDate, option);
27613
+ let results = [];
27614
+ this.parsers.forEach((parser) => {
27615
+ const parsedResults = Chrono.executeParser(context, parser);
27616
+ results = results.concat(parsedResults);
27617
+ });
27618
+ results.sort((a, b) => {
27619
+ return a.index - b.index;
27620
+ });
27621
+ this.refiners.forEach(function(refiner) {
27622
+ results = refiner.refine(context, results);
27623
+ });
27624
+ return results;
27625
+ }
27626
+ static executeParser(context, parser) {
27627
+ const results = [];
27628
+ const pattern = parser.pattern(context);
27629
+ const originalText = context.text;
27630
+ let remainingText = context.text;
27631
+ let match = pattern.exec(remainingText);
27632
+ while (match) {
27633
+ const index = match.index + originalText.length - remainingText.length;
27634
+ match.index = index;
27635
+ const result = parser.extract(context, match);
27636
+ if (!result) {
27637
+ remainingText = originalText.substring(match.index + 1);
27638
+ match = pattern.exec(remainingText);
27639
+ continue;
27640
+ }
27641
+ let parsedResult = null;
27642
+ if (result instanceof ParsingResult) parsedResult = result;
27643
+ else if (result instanceof ParsingComponents) {
27644
+ parsedResult = context.createParsingResult(match.index, match[0]);
27645
+ parsedResult.start = result;
27646
+ } else parsedResult = context.createParsingResult(match.index, match[0], result);
27647
+ const parsedIndex = parsedResult.index;
27648
+ const parsedText = parsedResult.text;
27649
+ context.debug(() => console.log(`${parser.constructor.name} extracted (at index=${parsedIndex}) '${parsedText}'`));
27650
+ results.push(parsedResult);
27651
+ remainingText = originalText.substring(parsedIndex + parsedText.length);
27652
+ match = pattern.exec(remainingText);
27653
+ }
27654
+ return results;
27655
+ }
27656
+ };
27657
+ var ParsingContext = class {
27658
+ text;
27659
+ option;
27660
+ reference;
27661
+ refDate;
27662
+ constructor(text, refDate, option) {
27663
+ this.text = text;
27664
+ this.option = option ?? {};
27665
+ this.reference = ReferenceWithTimezone.fromInput(refDate, this.option.timezones);
27666
+ this.refDate = this.reference.instant;
27667
+ }
27668
+ createParsingComponents(components) {
27669
+ if (components instanceof ParsingComponents) return components;
27670
+ return new ParsingComponents(this.reference, components);
27671
+ }
27672
+ createParsingResult(index, textOrEndIndex, startComponents, endComponents) {
27673
+ const text = typeof textOrEndIndex === "string" ? textOrEndIndex : this.text.substring(index, textOrEndIndex);
27674
+ const start = startComponents ? this.createParsingComponents(startComponents) : null;
27675
+ const end = endComponents ? this.createParsingComponents(endComponents) : null;
27676
+ return new ParsingResult(this.reference, index, text, start, end);
27677
+ }
27678
+ debug(block) {
27679
+ if (this.option.debug) if (this.option.debug instanceof Function) this.option.debug(block);
27680
+ else this.option.debug.debug(block);
27681
+ }
27682
+ };
27683
+
27684
+ //#endregion
27685
+ //#region ../../node_modules/.pnpm/chrono-node@2.9.0/node_modules/chrono-node/dist/esm/locales/en/index.js
27686
+ const configuration = new ENDefaultConfiguration();
27687
+ const casual$1 = new Chrono(configuration.createCasualConfiguration(false));
27688
+ const strict$1 = new Chrono(configuration.createConfiguration(true, false));
27689
+ const GB = new Chrono(configuration.createCasualConfiguration(true));
27690
+
27691
+ //#endregion
27692
+ //#region ../../node_modules/.pnpm/chrono-node@2.9.0/node_modules/chrono-node/dist/esm/index.js
27693
+ const strict = strict$1;
27694
+ const casual = casual$1;
27695
+ function parseDate(text, ref, option) {
27696
+ return casual.parseDate(text, ref, option);
27697
+ }
27698
+
27699
+ //#endregion
27700
+ //#region ../../core/data-resolver/src/evaluators/date-evaluator.ts
27701
+ /**
27702
+ * DateEvaluator: Parses and formats dates using chrono-node.
27703
+ *
27704
+ * Syntax:
27705
+ * {{date:tomorrow|iso}}
27706
+ * {{date: next friday >> dd-mm-yyyy}}
27707
+ * {{date: random 3 months >> yyyy-MM-ddT09:30:00}}
27708
+ * {{date: random}} — random date in next 30 days, ISO output
27709
+ *
27710
+ * Format tokens: yyyy/YYYY, MM (month), dd/DD. Non-token chars are literal.
27711
+ * "iso" format → full ISO 8601 string.
27712
+ */
27713
+ var DateEvaluator = class {
27714
+ prefix = "date";
27715
+ async evaluate(expression, _scopeValues) {
27716
+ const separatorMatch = expression.match(/^(.*?)\s*(?:>>|\|)\s*(.+)$/);
27717
+ let dateExpr;
27718
+ let format;
27719
+ if (separatorMatch) {
27720
+ dateExpr = separatorMatch[1].trim();
27721
+ format = separatorMatch[2].trim();
27722
+ } else {
27723
+ dateExpr = expression.trim();
27724
+ format = "iso";
27725
+ }
27726
+ const date = this.parseDate(dateExpr);
27727
+ if (!date) throw new Error(`DateEvaluator: could not parse date expression "${dateExpr}"`);
27728
+ return this.formatDate(date, format);
27729
+ }
27730
+ parseDate(expr) {
27731
+ const now = /* @__PURE__ */ new Date();
27732
+ if (expr.toLowerCase().startsWith("random")) {
27733
+ const rest = expr.slice(6).trim();
27734
+ const upperBound = rest ? parseDate(`in ${rest}`, now, { forwardDate: true }) ?? new Date(now.getTime() + 720 * 60 * 60 * 1e3) : new Date(now.getTime() + 720 * 60 * 60 * 1e3);
27735
+ return new Date(now.getTime() + Math.random() * (upperBound.getTime() - now.getTime()));
27736
+ }
27737
+ return parseDate(expr, now, { forwardDate: true });
27738
+ }
27739
+ formatDate(date, format) {
27740
+ if (format === "iso") return date.toISOString();
27741
+ const yyyy = date.getFullYear().toString();
27742
+ const MM = (date.getMonth() + 1).toString().padStart(2, "0");
27743
+ const dd = date.getDate().toString().padStart(2, "0");
27744
+ return format.replace(/yyyy/gi, yyyy).replace(/MM/gi, MM).replace(/dd/gi, dd);
27745
+ }
27746
+ };
27747
+
27748
+ //#endregion
27749
+ //#region ../../core/bvt-agent/src/agent/data-resolver.preprocessor.ts
27750
+ function createDataResolverPreprocessor(resolver) {
27751
+ return async (command, context) => {
27752
+ if (!context.resolutionContext) return command;
27753
+ if (command.type === "custom" && typeof command.code === "string" && !command.code.includes("{{")) {
27754
+ const { code, ...rest } = command;
27755
+ return {
27756
+ ...await resolver.resolveObject(rest, context.resolutionContext),
27757
+ code
27758
+ };
27759
+ }
27760
+ if (command.type === "custom.code" && typeof command.code === "string") {
27761
+ const { code, ...rest } = command;
27762
+ return {
27763
+ ...await resolver.resolveObject(rest, context.resolutionContext),
27764
+ code
27765
+ };
27766
+ }
27767
+ return resolver.resolveObject(command, context.resolutionContext);
27768
+ };
27769
+ }
27770
+
27771
+ //#endregion
27772
+ //#region ../../core/bvt-agent/src/agent/ai-chat-code-token.preprocessor.ts
27773
+ var UnknownKeyError = class extends Error {
27774
+ constructor(key) {
27775
+ super(`Unknown test-data key in ai-chat generated code: ${key}`);
27776
+ this.key = key;
27777
+ this.name = "UnknownKeyError";
27778
+ }
27779
+ toString() {
27780
+ return `${this.name}: ${this.message}`;
27781
+ }
27782
+ };
27783
+ function scanJsContext(source) {
27784
+ const stateAt = Array.from({ length: source.length });
27785
+ const stringLiterals = [];
25066
27786
  const commentRanges = [];
25067
27787
  const stack = [];
25068
27788
  let i = 0;
@@ -25535,6 +28255,63 @@ function toMatcherValue(value) {
25535
28255
  default: throw new Error(`Invalid matcher value: unknown type "${value.type}"`);
25536
28256
  }
25537
28257
  }
28258
+ var BlinqApiRuntime = class {
28259
+ last;
28260
+ constructor(testDataApi) {
28261
+ this.testDataApi = testDataApi;
28262
+ }
28263
+ get lastResponse() {
28264
+ return this.last;
28265
+ }
28266
+ async request(request) {
28267
+ const response = await executeApiRequest(request);
28268
+ this.last = response;
28269
+ if (request.saveAs) await this.testDataApi.setRuntime(request.saveAs, serializeApiResponseForRuntime(response), { dataType: "string" });
28270
+ return response;
28271
+ }
28272
+ async assert(assertion) {
28273
+ if (!this.last) throw new Error("API assertion requires a previous API request command in the same step.");
28274
+ assertApiResponse(this.last, assertion);
28275
+ }
28276
+ };
28277
+ const AI_CHAT_COMMAND_DELAY_MS = 1e3;
28278
+ /**
28279
+ * Build the AI-chat command globals. Mirrors the recorder sandbox:
28280
+ * `onCommandStart` waits the watch-delay then records the command boundary,
28281
+ * `onCommandPass` waits the (overridable) watch-delay, and `checkpoint`
28282
+ * records a labelled marker. In a standalone Playwright run the sandbox's
28283
+ * live-timeline bridge is replaced by Playwright test annotations (via the
28284
+ * injected `annotate` callback).
28285
+ */
28286
+ function createAiChatGlobals(input) {
28287
+ const { testDataApi, parameters, annotate } = input;
28288
+ return {
28289
+ context: {
28290
+ testData: testDataApi,
28291
+ ...parameters.projectId ? { projectId: parameters.projectId } : {},
28292
+ ...parameters.environmentId ? { environmentId: parameters.environmentId } : {},
28293
+ ...parameters.featureId ? { featureId: parameters.featureId } : {},
28294
+ ...parameters.scenarioId ? { scenarioId: parameters.scenarioId } : {},
28295
+ ...parameters.executionId ? { executionId: parameters.executionId } : {}
28296
+ },
28297
+ checkpoint(label, data) {
28298
+ annotate({
28299
+ type: "blinq:checkpoint",
28300
+ description: data === void 0 ? label : `${label} ${JSON.stringify(data)}`
28301
+ });
28302
+ },
28303
+ async onCommandStart(label) {
28304
+ await sleep(AI_CHAT_COMMAND_DELAY_MS);
28305
+ annotate({
28306
+ type: "blinq:command-start",
28307
+ description: label
28308
+ });
28309
+ },
28310
+ async onCommandPass(opts) {
28311
+ await sleep(opts && typeof opts.delayMs === "number" && opts.delayMs >= 0 ? opts.delayMs : AI_CHAT_COMMAND_DELAY_MS);
28312
+ }
28313
+ };
28314
+ }
25538
28315
  const DEFAULT_PROJECT_ID = "01K00000000000000000000000";
25539
28316
  const BLINQ_ENVIRONMENT_ENV_VAR = "BLINQ_ENVIRONMENT";
25540
28317
  function toFilePath(target) {
@@ -25690,6 +28467,7 @@ var PlaywrightRunner = class {
25690
28467
  scopeManager;
25691
28468
  preprocessors;
25692
28469
  resolutionContext;
28470
+ apiRuntime;
25693
28471
  constructor(options = {}, dependencies = {}) {
25694
28472
  this.parameters = options.parameters ?? {};
25695
28473
  this.resolutionContext = createResolutionContext(this.parameters);
@@ -25731,6 +28509,20 @@ var PlaywrightRunner = class {
25731
28509
  detach() {
25732
28510
  this.activePage = null;
25733
28511
  }
28512
+ /**
28513
+ * Stateful API helper for `api.action` / `api.assertion` steps. Lazily built
28514
+ * and held for the runner's lifetime so a request and its following assertion
28515
+ * share `lastResponse`. Throws if no test-data provider/context is available
28516
+ * (the `saveAs` path needs it).
28517
+ */
28518
+ get api() {
28519
+ if (!this.apiRuntime) {
28520
+ const testDataApi = this.tester.testDataApi;
28521
+ if (!testDataApi) throw new Error("bvt.api is unavailable: the runner has no test-data provider/context. API steps require a configured test-data layer.");
28522
+ this.apiRuntime = new BlinqApiRuntime(testDataApi);
28523
+ }
28524
+ return this.apiRuntime;
28525
+ }
25734
28526
  async executeCommand(command, parameters = {}) {
25735
28527
  if (!this.activePage) throw new Error("PlaywrightRunner has no active page. Call attach(page) before executeCommand.");
25736
28528
  this.runtimeContext = {
@@ -25881,11 +28673,21 @@ function createBlinqTest(options = {}) {
25881
28673
  runner.attach(page);
25882
28674
  const testDataApi = runner.tester.testDataApi;
25883
28675
  if (!testDataApi) throw new Error("bvt.testDataApi is unavailable: the runner has no test-data provider/context. Extract steps require a configured test-data layer.");
28676
+ const aiChat = createAiChatGlobals({
28677
+ testDataApi,
28678
+ parameters: runner.parameters,
28679
+ annotate: (annotation) => testInfo.annotations.push(annotation)
28680
+ });
25884
28681
  try {
25885
28682
  await use({
25886
28683
  page,
25887
28684
  parameters: runner.parameters,
25888
28685
  testDataApi,
28686
+ api: runner.api,
28687
+ aiChatContext: aiChat.context,
28688
+ checkpoint: aiChat.checkpoint,
28689
+ onCommandStart: aiChat.onCommandStart,
28690
+ onCommandPass: aiChat.onCommandPass,
25889
28691
  executeCommand: (command, stepParameters) => runner.executeCommand(command, stepParameters),
25890
28692
  resolveCommand: (command, stepParameters) => runner.resolveCommand(command, stepParameters),
25891
28693
  find: (command) => runner.find(command),
@@ -25903,5 +28705,5 @@ function createBlinqTest(options = {}) {
25903
28705
  }
25904
28706
 
25905
28707
  //#endregion
25906
- export { PlaywrightRunner, TempFileTestDataProvider, createBlinqTest, createBlinqTest as default, toMatcherValue };
28708
+ export { PlaywrightRunner, TempFileTestDataProvider, createAiChatGlobals, createBlinqTest, createBlinqTest as default, toMatcherValue };
25907
28709
  //# sourceMappingURL=index.mjs.map