@esposter/shared 4.3.1 → 4.3.3

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.
Files changed (3) hide show
  1. package/dist/index.d.ts +0 -414
  2. package/dist/index.js +130 -260
  3. package/package.json +3 -3
package/dist/index.js CHANGED
@@ -3,47 +3,42 @@ import { ResultAsync, fromThrowable } from "neverthrow";
3
3
  import { parse } from "node-html-parser";
4
4
  import mimeDatabase from "mime-db/db.json" with { type: "json" };
5
5
  import { defaultTreeAdapter, html as html$1, parseFragment } from "parse5";
6
- //#region src/models/error/ForbiddenError.ts
6
+ // src/models/error/ForbiddenError.ts
7
7
  var ForbiddenError = class extends Error {
8
8
  constructor(message) {
9
9
  super(message);
10
10
  this.name = "ForbiddenError";
11
11
  }
12
12
  };
13
- //#endregion
14
- //#region src/models/error/InvalidOperationError.ts
13
+ // src/models/error/InvalidOperationError.ts
15
14
  var InvalidOperationError = class extends Error {
16
15
  constructor(operation, name, message) {
17
16
  super(`Invalid operation: ${operation}, name: ${name}, ${message}`);
18
17
  this.name = "InvalidOperationError";
19
18
  }
20
19
  };
21
- //#endregion
22
- //#region src/models/error/NotFoundError.ts
20
+ // src/models/error/NotFoundError.ts
23
21
  var NotFoundError = class extends Error {
24
22
  constructor(name, id) {
25
23
  super(`${name} is not found for id: ${id}`);
26
24
  this.name = "NotFoundError";
27
25
  }
28
26
  };
29
- //#endregion
30
- //#region src/models/error/NotInitializedError.ts
27
+ // src/models/error/NotInitializedError.ts
31
28
  var NotInitializedError = class extends Error {
32
29
  constructor(name) {
33
30
  super(`${name} is not initialized`);
34
31
  this.name = "NotInitializedError";
35
32
  }
36
33
  };
37
- //#endregion
38
- //#region src/models/error/WordFilteredError.ts
34
+ // src/models/error/WordFilteredError.ts
39
35
  var WordFilteredError = class extends Error {
40
36
  constructor(message) {
41
37
  super(message);
42
38
  this.name = "WordFilteredError";
43
39
  }
44
40
  };
45
- //#endregion
46
- //#region src/models/shared/Operation.ts
41
+ // src/models/shared/Operation.ts
47
42
  let Operation = /* @__PURE__ */ function(Operation) {
48
43
  Operation["Create"] = "Create";
49
44
  Operation["Delete"] = "Delete";
@@ -53,8 +48,7 @@ let Operation = /* @__PURE__ */ function(Operation) {
53
48
  Operation["Update"] = "Update";
54
49
  return Operation;
55
50
  }({});
56
- //#endregion
57
- //#region src/models/eventEmitter/TypedEventEmitter.ts
51
+ // src/models/eventEmitter/TypedEventEmitter.ts
58
52
  var TypedEventEmitter = class {
59
53
  #entriesMap = /* @__PURE__ */ new Map();
60
54
  emit(event, ...args) {
@@ -89,8 +83,7 @@ var TypedEventEmitter = class {
89
83
  else this.#entriesMap.set(event, entries);
90
84
  }
91
85
  };
92
- //#endregion
93
- //#region src/models/jsonPatch/JsonPatchOperationType.ts
86
+ // src/models/jsonPatch/JsonPatchOperationType.ts
94
87
  let JsonPatchOperationType = /* @__PURE__ */ function(JsonPatchOperationType) {
95
88
  JsonPatchOperationType["Add"] = "add";
96
89
  JsonPatchOperationType["Copy"] = "copy";
@@ -100,28 +93,24 @@ let JsonPatchOperationType = /* @__PURE__ */ function(JsonPatchOperationType) {
100
93
  JsonPatchOperationType["Test"] = "test";
101
94
  return JsonPatchOperationType;
102
95
  }({});
103
- //#endregion
104
- //#region src/models/message/MentionType.ts
96
+ // src/models/message/MentionType.ts
105
97
  let MentionType = /* @__PURE__ */ function(MentionType) {
106
98
  MentionType["Role"] = "role";
107
99
  MentionType["User"] = "user";
108
100
  return MentionType;
109
101
  }({});
110
- //#endregion
111
- //#region src/models/object/ObjectMethod.ts
102
+ // src/models/object/ObjectMethod.ts
112
103
  let ObjectMethod = /* @__PURE__ */ function(ObjectMethod) {
113
104
  ObjectMethod["ToString"] = "toString";
114
105
  ObjectMethod["ValueOf"] = "valueOf";
115
106
  return ObjectMethod;
116
107
  }({});
117
- //#endregion
118
- //#region src/services/app/constants.ts
108
+ // src/services/app/constants.ts
119
109
  const MAX_READ_LIMIT = 1e3;
120
110
  const SITE_NAME = "Esposter";
121
111
  const KIBIBYTE = 1024;
122
112
  const GIBIBYTE = KIBIBYTE ** 2 * KIBIBYTE;
123
- //#endregion
124
- //#region src/models/router/RoutePath.ts
113
+ // src/models/router/RoutePath.ts
125
114
  const RoutePath = {
126
115
  About: "/about",
127
116
  Achievements: "/achievements",
@@ -160,24 +149,20 @@ const RoutePath = {
160
149
  UserSettings: "/user/settings",
161
150
  View: (type, id) => `/view/${type}/${id}`
162
151
  };
163
- //#endregion
164
- //#region src/models/shared/ItemEntityType.ts
152
+ // src/models/shared/ItemEntityType.ts
165
153
  const createItemEntityTypeSchema = (schema) => z.object({ type: schema });
166
- //#endregion
167
- //#region src/models/shared/ItemMetadata.ts
154
+ // src/models/shared/ItemMetadata.ts
168
155
  var ItemMetadata = class {
169
156
  createdAt = /* @__PURE__ */ new Date();
170
157
  deletedAt = null;
171
158
  updatedAt = /* @__PURE__ */ new Date();
172
159
  };
173
- //#endregion
174
- //#region src/util/reactivity/getRawData.ts
160
+ // src/util/reactivity/getRawData.ts
175
161
  const getRawData = (data) => {
176
162
  const raw = data && data.__v_raw;
177
163
  return raw ? getRawData(raw) : data;
178
164
  };
179
- //#endregion
180
- //#region src/util/reactivity/toRawDeep.ts
165
+ // src/util/reactivity/toRawDeep.ts
181
166
  const toRawDeep = (data) => {
182
167
  const rawData = getRawData(data);
183
168
  for (const key in rawData) if (Object.hasOwn(rawData, key)) {
@@ -186,28 +171,23 @@ const toRawDeep = (data) => {
186
171
  }
187
172
  return rawData;
188
173
  };
189
- //#endregion
190
- //#region src/models/shared/Serializable.ts
174
+ // src/models/shared/Serializable.ts
191
175
  var Serializable = class {
192
176
  toJSON() {
193
177
  return structuredClone(toRawDeep(this));
194
178
  }
195
179
  };
196
- //#endregion
197
- //#region src/services/error/toAppError.ts
180
+ // src/services/error/toAppError.ts
198
181
  const toAppError = (error) => {
199
182
  if (error instanceof Error) return error;
200
183
  else if (typeof error === "object" && error !== null && "message" in error && typeof error.message === "string") return new Error(error.message, { cause: error });
201
184
  else return new Error(String(error), { cause: error });
202
185
  };
203
- //#endregion
204
- //#region src/services/error/getResult.ts
186
+ // src/services/error/getResult.ts
205
187
  const getResult = (callback) => fromThrowable(callback, toAppError)();
206
- //#endregion
207
- //#region src/services/error/getResultAsync.ts
188
+ // src/services/error/getResultAsync.ts
208
189
  const getResultAsync = (callback) => ResultAsync.fromThrowable(callback, toAppError)();
209
- //#endregion
210
- //#region src/services/error/reportFinalizerError.ts
190
+ // src/services/error/reportFinalizerError.ts
211
191
  const reportFinalizerError = (callbackResult, finalizerError) => {
212
192
  callbackResult.match(() => {
213
193
  throw finalizerError;
@@ -215,11 +195,9 @@ const reportFinalizerError = (callbackResult, finalizerError) => {
215
195
  console.error(finalizerError);
216
196
  });
217
197
  };
218
- //#endregion
219
- //#region src/util/function/noop.ts
198
+ // src/util/function/noop.ts
220
199
  const noop = () => {};
221
- //#endregion
222
- //#region src/services/error/withFinalizer.ts
200
+ // src/services/error/withFinalizer.ts
223
201
  const withFinalizer = (callback, finalizer) => {
224
202
  const callbackResult = getResult(callback);
225
203
  if (finalizer) getResult(finalizer).match(noop, (error) => {
@@ -229,8 +207,7 @@ const withFinalizer = (callback, finalizer) => {
229
207
  throw error;
230
208
  });
231
209
  };
232
- //#endregion
233
- //#region src/services/error/withFinalizerAsync.ts
210
+ // src/services/error/withFinalizerAsync.ts
234
211
  const withFinalizerAsync = async (callback, finalizer) => {
235
212
  const callbackResult = await getResultAsync(async () => callback());
236
213
  if (finalizer) await getResultAsync(async () => finalizer()).match(noop, (error) => {
@@ -240,15 +217,13 @@ const withFinalizerAsync = async (callback, finalizer) => {
240
217
  throw error;
241
218
  });
242
219
  };
243
- //#endregion
244
- //#region src/services/history/createHistory.ts
220
+ // src/services/history/createHistory.ts
245
221
  const createHistory = (limit) => ({
246
222
  future: [],
247
223
  limit,
248
224
  past: []
249
225
  });
250
- //#endregion
251
- //#region src/services/history/pushHistory.ts
226
+ // src/services/history/pushHistory.ts
252
227
  const pushHistory = (history, entry) => {
253
228
  const past = [...history.past, entry];
254
229
  return {
@@ -257,8 +232,7 @@ const pushHistory = (history, entry) => {
257
232
  past: past.slice(Math.max(past.length - history.limit, 0))
258
233
  };
259
234
  };
260
- //#endregion
261
- //#region src/services/history/redoHistory.ts
235
+ // src/services/history/redoHistory.ts
262
236
  const redoHistory = (history) => {
263
237
  const [entry] = history.future;
264
238
  if (entry === void 0) return { history };
@@ -270,8 +244,7 @@ const redoHistory = (history) => {
270
244
  }
271
245
  };
272
246
  };
273
- //#endregion
274
- //#region src/services/history/undoHistory.ts
247
+ // src/services/history/undoHistory.ts
275
248
  const undoHistory = (history) => {
276
249
  const entry = history.past.at(-1);
277
250
  if (entry === void 0) return { history };
@@ -284,11 +257,9 @@ const undoHistory = (history) => {
284
257
  }
285
258
  };
286
259
  };
287
- //#endregion
288
- //#region src/services/indexedDb/getRequestError.ts
260
+ // src/services/indexedDb/getRequestError.ts
289
261
  const getRequestError = (request) => request.error ?? new DOMException("The request failed without an error", "UnknownError");
290
- //#endregion
291
- //#region src/services/indexedDb/getTransactionDone.ts
262
+ // src/services/indexedDb/getTransactionDone.ts
292
263
  const getTransactionDone = (transaction) => new Promise((resolve, reject) => {
293
264
  transaction.addEventListener("complete", () => {
294
265
  resolve();
@@ -297,8 +268,7 @@ const getTransactionDone = (transaction) => new Promise((resolve, reject) => {
297
268
  reject(transaction.error ?? new DOMException("The transaction was aborted", "AbortError"));
298
269
  });
299
270
  });
300
- //#endregion
301
- //#region src/services/indexedDb/requestToPromise.ts
271
+ // src/services/indexedDb/requestToPromise.ts
302
272
  const requestToPromise = (request) => new Promise((resolve, reject) => {
303
273
  request.addEventListener("success", () => {
304
274
  resolve(request.result);
@@ -307,14 +277,12 @@ const requestToPromise = (request) => new Promise((resolve, reject) => {
307
277
  reject(getRequestError(request));
308
278
  });
309
279
  });
310
- //#endregion
311
- //#region src/services/indexedDb/wrapIndex.ts
280
+ // src/services/indexedDb/wrapIndex.ts
312
281
  const wrapIndex = (index) => ({
313
282
  getAll: (query, count) => requestToPromise(index.getAll(query, count)),
314
283
  getAllKeys: (query, count) => requestToPromise(index.getAllKeys(query, count))
315
284
  });
316
- //#endregion
317
- //#region src/services/indexedDb/wrapObjectStore.ts
285
+ // src/services/indexedDb/wrapObjectStore.ts
318
286
  const wrapObjectStore = (objectStore) => {
319
287
  const reader = {
320
288
  get: (key) => requestToPromise(objectStore.get(key)),
@@ -335,17 +303,14 @@ const wrapObjectStore = (objectStore) => {
335
303
  ...creator
336
304
  };
337
305
  };
338
- //#endregion
339
- //#region src/services/indexedDb/getTransactionObjectStore.ts
306
+ // src/services/indexedDb/getTransactionObjectStore.ts
340
307
  const getTransactionObjectStore = (transaction) => (name) => wrapObjectStore(transaction.objectStore(name));
341
- //#endregion
342
- //#region src/services/indexedDb/wrapTransaction.ts
308
+ // src/services/indexedDb/wrapTransaction.ts
343
309
  const wrapTransaction = (transaction) => ({
344
310
  done: getTransactionDone(transaction),
345
311
  objectStore: getTransactionObjectStore(transaction)
346
312
  });
347
- //#endregion
348
- //#region src/services/indexedDb/wrapDatabase.ts
313
+ // src/services/indexedDb/wrapDatabase.ts
349
314
  const wrapDatabase = (database) => {
350
315
  const getReadonlyObjectStore = (storeName) => wrapObjectStore(database.transaction(storeName, "readonly").objectStore(storeName));
351
316
  const getReadwriteObjectStore = (storeName) => wrapObjectStore(database.transaction(storeName, "readwrite").objectStore(storeName));
@@ -366,14 +331,12 @@ const wrapDatabase = (database) => {
366
331
  transaction
367
332
  };
368
333
  };
369
- //#endregion
370
- //#region src/services/indexedDb/wrapUpgradeDatabase.ts
334
+ // src/services/indexedDb/wrapUpgradeDatabase.ts
371
335
  const wrapUpgradeDatabase = (database) => ({
372
336
  ...wrapDatabase(database),
373
337
  createObjectStore: (name, options) => wrapObjectStore(database.createObjectStore(name, options))
374
338
  });
375
- //#endregion
376
- //#region src/services/indexedDb/wrapUpgradeTransaction.ts
339
+ // src/services/indexedDb/wrapUpgradeTransaction.ts
377
340
  const wrapUpgradeTransaction = (transaction) => {
378
341
  const done = getTransactionDone(transaction);
379
342
  getResultAsync(() => done).match(noop, (error) => {
@@ -386,8 +349,7 @@ const wrapUpgradeTransaction = (transaction) => {
386
349
  objectStore: getTransactionObjectStore(transaction)
387
350
  };
388
351
  };
389
- //#endregion
390
- //#region src/services/indexedDb/openDatabase.ts
352
+ // src/services/indexedDb/openDatabase.ts
391
353
  const openDatabase = (name, version, options = {}) => new Promise((resolve, reject) => {
392
354
  const request = indexedDB.open(name, version);
393
355
  request.addEventListener("blocked", (event) => {
@@ -415,36 +377,30 @@ const openDatabase = (name, version, options = {}) => new Promise((resolve, reje
415
377
  reject(getRequestError(request));
416
378
  });
417
379
  });
418
- //#endregion
419
- //#region src/services/jsonPatch/constants.ts
380
+ // src/services/jsonPatch/constants.ts
420
381
  const APPEND_SEGMENT = "-";
421
382
  const JSON_POINTER_REGEX = /^(?:\/(?:[^/~]|~[01])*)*$/u;
422
- //#endregion
423
- //#region src/services/jsonPatch/parseArrayIndex.ts
383
+ // src/services/jsonPatch/parseArrayIndex.ts
424
384
  const ARRAY_INDEX_REGEX = /^(?:0|[1-9]\d*)$/u;
425
385
  const parseArrayIndex = (segment, maxIndex) => {
426
386
  const index = Number(segment);
427
387
  return ARRAY_INDEX_REGEX.test(segment) && index <= maxIndex ? index : void 0;
428
388
  };
429
- //#endregion
430
- //#region src/services/jsonPatch/parseJsonPointer.ts
389
+ // src/services/jsonPatch/parseJsonPointer.ts
431
390
  const parseJsonPointer = (pointer) => {
432
391
  if (pointer === "") return [];
433
392
  else if (!JSON_POINTER_REGEX.test(pointer)) throw new InvalidOperationError("Read", pointer, "not a JSON Pointer");
434
393
  return pointer.slice(1).split("/").map((segment) => segment.replaceAll("~1", "/").replaceAll("~0", "~"));
435
394
  };
436
- //#endregion
437
- //#region src/services/jsonPatch/toJsonPointer.ts
395
+ // src/services/jsonPatch/toJsonPointer.ts
438
396
  const toJsonPointer = (segments) => segments.map((segment) => `/${segment.replaceAll("~", "~0").replaceAll("/", "~1")}`).join("");
439
- //#endregion
440
- //#region src/util/object/checkIsPlainObject.ts
397
+ // src/util/object/checkIsPlainObject.ts
441
398
  const checkIsPlainObject = (data) => {
442
399
  if (typeof data !== "object" || data === null) return false;
443
400
  const prototype = Object.getPrototypeOf(data);
444
401
  return prototype === null || prototype === Object.prototype;
445
402
  };
446
- //#endregion
447
- //#region src/services/jsonPatch/readJsonValue.ts
403
+ // src/services/jsonPatch/readJsonValue.ts
448
404
  const readJsonValue = (document, segments) => {
449
405
  let value = document;
450
406
  for (const segment of segments) {
@@ -455,8 +411,7 @@ const readJsonValue = (document, segments) => {
455
411
  }
456
412
  return value;
457
413
  };
458
- //#endregion
459
- //#region src/services/jsonPatch/updateJsonValue.ts
414
+ // src/services/jsonPatch/updateJsonValue.ts
460
415
  const updateJsonValue = (document, segments, update) => {
461
416
  const [segment, ...restSegments] = segments;
462
417
  if (segment === void 0) return update(document);
@@ -468,8 +423,7 @@ const updateJsonValue = (document, segments, update) => {
468
423
  };
469
424
  else throw new InvalidOperationError("Update", toJsonPointer(segments), "no such member");
470
425
  };
471
- //#endregion
472
- //#region src/services/jsonPatch/addJsonValue.ts
426
+ // src/services/jsonPatch/addJsonValue.ts
473
427
  const addJsonValue = (document, path, value) => {
474
428
  const segments = parseJsonPointer(path);
475
429
  const parentSegments = segments.slice(0, -1);
@@ -509,8 +463,7 @@ const addJsonValue = (document, path, value) => {
509
463
  };
510
464
  else throw new InvalidOperationError("Update", path, "its parent holds no members");
511
465
  };
512
- //#endregion
513
- //#region src/services/jsonPatch/removeJsonValue.ts
466
+ // src/services/jsonPatch/removeJsonValue.ts
514
467
  const removeJsonValue = (document, path) => {
515
468
  const segments = parseJsonPointer(path);
516
469
  const parentSegments = segments.slice(0, -1);
@@ -538,28 +491,23 @@ const removeJsonValue = (document, path) => {
538
491
  };
539
492
  } else throw new InvalidOperationError("Delete", path, "no such member");
540
493
  };
541
- //#endregion
542
- //#region src/util/object/checkIsCustomMethod.ts
494
+ // src/util/object/checkIsCustomMethod.ts
543
495
  const checkIsCustomMethod = (value, methodName) => {
544
496
  const method = Reflect.get(value, methodName);
545
497
  return typeof method === "function" && method !== Object.prototype[methodName];
546
498
  };
547
- //#endregion
548
- //#region src/util/object/checkIsSameBytes.ts
499
+ // src/util/object/checkIsSameBytes.ts
549
500
  const toBytes = (view) => ArrayBuffer.isView(view) ? new Uint8Array(view.buffer, view.byteOffset, view.byteLength) : new Uint8Array(view);
550
501
  const checkIsSameBytes = (first, second) => {
551
502
  const firstBytes = toBytes(first);
552
503
  const secondBytes = toBytes(second);
553
504
  return firstBytes.length === secondBytes.length && firstBytes.every((byte, index) => byte === secondBytes[index]);
554
505
  };
555
- //#endregion
556
- //#region src/util/object/checkIsSameValueZero.ts
506
+ // src/util/object/checkIsSameValueZero.ts
557
507
  const checkIsSameValueZero = (first, second) => first === second || Number.isNaN(first) && Number.isNaN(second);
558
- //#endregion
559
- //#region src/util/object/getEnumerableKeys.ts
508
+ // src/util/object/getEnumerableKeys.ts
560
509
  const getEnumerableKeys = (value) => Reflect.ownKeys(value).filter((key) => Object.prototype.propertyIsEnumerable.call(value, key));
561
- //#endregion
562
- //#region src/util/object/checkIsDeepEqual.ts
510
+ // src/util/object/checkIsDeepEqual.ts
563
511
  const checkIsBinary = (value) => ArrayBuffer.isView(value) || value instanceof ArrayBuffer || typeof SharedArrayBuffer !== "undefined" && value instanceof SharedArrayBuffer;
564
512
  const checkIsDeepEqual = (first, second) => {
565
513
  if (first === second) return true;
@@ -589,13 +537,11 @@ const checkIsDeepEqual = (first, second) => {
589
537
  if (firstKeys.length !== getEnumerableKeys(second).length) return false;
590
538
  return firstKeys.every((key) => Object.prototype.propertyIsEnumerable.call(second, key) && checkIsDeepEqual(Reflect.get(first, key), Reflect.get(second, key)));
591
539
  };
592
- //#endregion
593
- //#region src/util/validation/exhaustiveGuard.ts
540
+ // src/util/validation/exhaustiveGuard.ts
594
541
  const exhaustiveGuard = (value) => {
595
542
  throw new InvalidOperationError("Read", exhaustiveGuard.name, JSON.stringify(value));
596
543
  };
597
- //#endregion
598
- //#region src/services/jsonPatch/applyPatch.ts
544
+ // src/services/jsonPatch/applyPatch.ts
599
545
  const applyPatch = (document, operation) => {
600
546
  switch (operation.op) {
601
547
  case "add": return addJsonValue(document, operation.path, operation.value);
@@ -637,8 +583,7 @@ const applyPatch = (document, operation) => {
637
583
  default: return exhaustiveGuard(operation);
638
584
  }
639
585
  };
640
- //#endregion
641
- //#region src/services/jsonPatch/applyPatches.ts
586
+ // src/services/jsonPatch/applyPatches.ts
642
587
  const applyPatches = (document, operations) => {
643
588
  let patchedDocument = document;
644
589
  const inverseGroups = [];
@@ -652,8 +597,7 @@ const applyPatches = (document, operations) => {
652
597
  inverses: inverseGroups.toReversed().flat()
653
598
  };
654
599
  };
655
- //#endregion
656
- //#region src/services/message/constants.ts
600
+ // src/services/message/constants.ts
657
601
  const MENTION_ID_ATTRIBUTE = "data-id";
658
602
  const MENTION_ITEM_TYPE_ATTRIBUTE = "data-mention-type";
659
603
  const MENTION_LABEL_ATTRIBUTE = "data-label";
@@ -666,11 +610,9 @@ const CUSTOM_EMOJI_ID_ATTRIBUTE = "data-custom-emoji-id";
666
610
  const CUSTOM_EMOJI_NAME_ATTRIBUTE = "data-custom-emoji-name";
667
611
  const SPOILER_ATTRIBUTE = "data-spoiler";
668
612
  const SPOILER_SELECTOR = `span[${SPOILER_ATTRIBUTE}]`;
669
- //#endregion
670
- //#region src/services/message/getMentions.ts
613
+ // src/services/message/getMentions.ts
671
614
  const getMentions = (message) => parse(message).querySelectorAll(MENTION_SELECTOR);
672
- //#endregion
673
- //#region src/services/mime/constants.ts
615
+ // src/services/mime/constants.ts
674
616
  const MEDIA_TYPE_REGEX = /^\s*(?<mediaType>[^;\s]*)(?:;|\s|$)/u;
675
617
  const PATH_SEPARATOR_REGEX = /[/\\]/u;
676
618
  const TEXT_MEDIA_TYPE_REGEX = /^text\//iu;
@@ -696,26 +638,22 @@ const TypeScoreMap = /* @__PURE__ */ new Map([
696
638
  ["video", 3]
697
639
  ]);
698
640
  const DEFAULT_TYPE_SCORE = 0;
699
- //#endregion
700
- //#region src/services/mime/getMediaType.ts
641
+ // src/services/mime/getMediaType.ts
701
642
  const getMediaType = (value) => MEDIA_TYPE_REGEX.exec(value)?.groups?.mediaType ?? "";
702
- //#endregion
703
- //#region src/services/mime/getMimeTypeEntryMap.ts
643
+ // src/services/mime/getMimeTypeEntryMap.ts
704
644
  let mimeTypeEntryMap;
705
645
  const getMimeTypeEntryMap = () => {
706
646
  mimeTypeEntryMap ??= new Map(Object.entries(mimeDatabase));
707
647
  return mimeTypeEntryMap;
708
648
  };
709
- //#endregion
710
- //#region src/services/mime/charset.ts
649
+ // src/services/mime/charset.ts
711
650
  const charset = (type) => {
712
651
  const mediaType = getMediaType(type);
713
652
  const dataCharset = getMimeTypeEntryMap().get(mediaType.toLowerCase())?.charset;
714
653
  if (dataCharset) return dataCharset;
715
654
  return TEXT_MEDIA_TYPE_REGEX.test(mediaType) ? DEFAULT_TEXT_CHARSET : false;
716
655
  };
717
- //#endregion
718
- //#region src/services/mime/getMimeScore.ts
656
+ // src/services/mime/getMimeScore.ts
719
657
  const getMimeScore = (mimeType, source = "") => {
720
658
  if (mimeType === "application/octet-stream") return 0;
721
659
  const [type = "", subtype = ""] = mimeType.split("/");
@@ -726,8 +664,7 @@ const getMimeScore = (mimeType, source = "") => {
726
664
  const lengthScore = 1 - mimeType.length / 100;
727
665
  return facetScore + sourceScore + typeScore + lengthScore;
728
666
  };
729
- //#endregion
730
- //#region src/services/mime/getExtensionMimeTypeMap.ts
667
+ // src/services/mime/getExtensionMimeTypeMap.ts
731
668
  let extensionMimeTypeMap;
732
669
  const getPreferredMimeType = (currentMimeType, candidateMimeType) => {
733
670
  if (currentMimeType === void 0) return candidateMimeType;
@@ -742,8 +679,7 @@ const getExtensionMimeTypeMap = () => {
742
679
  }
743
680
  return extensionMimeTypeMap;
744
681
  };
745
- //#endregion
746
- //#region src/services/mime/lookup.ts
682
+ // src/services/mime/lookup.ts
747
683
  const getExtension = (path) => {
748
684
  const name = path.split(PATH_SEPARATOR_REGEX).at(-1) ?? "";
749
685
  const dotIndex = name.lastIndexOf(".");
@@ -755,8 +691,7 @@ const lookup = (path) => {
755
691
  if (!extension) return false;
756
692
  return getExtensionMimeTypeMap().get(extension) ?? false;
757
693
  };
758
- //#endregion
759
- //#region src/services/mime/contentType.ts
694
+ // src/services/mime/contentType.ts
760
695
  const contentType = (value) => {
761
696
  const mediaType = value.includes("/") ? value : lookup(value);
762
697
  if (!mediaType) return false;
@@ -764,17 +699,13 @@ const contentType = (value) => {
764
699
  const mediaCharset = charset(mediaType);
765
700
  return mediaCharset ? `${mediaType}; charset=${mediaCharset.toLowerCase()}` : mediaType;
766
701
  };
767
- //#endregion
768
- //#region src/services/mime/extension.ts
702
+ // src/services/mime/extension.ts
769
703
  const extension = (type) => getMimeTypeEntryMap().get(getMediaType(type).toLowerCase())?.extensions?.[0] ?? false;
770
- //#endregion
771
- //#region src/services/prettier/css.ts
704
+ // src/services/prettier/css.ts
772
705
  const css = String.raw;
773
- //#endregion
774
- //#region src/services/prettier/html.ts
706
+ // src/services/prettier/html.ts
775
707
  const html = String.raw;
776
- //#endregion
777
- //#region src/services/profanity/englishProfaneWords.ts
708
+ // src/services/profanity/englishProfaneWords.ts
778
709
  const englishProfaneWords = [
779
710
  "4r5e",
780
711
  "5h1t",
@@ -1226,8 +1157,7 @@ const englishProfaneWords = [
1226
1157
  "willies",
1227
1158
  "willy"
1228
1159
  ];
1229
- //#endregion
1230
- //#region src/services/profanity/checkContainsProfanity.ts
1160
+ // src/services/profanity/checkContainsProfanity.ts
1231
1161
  const WORD_CHARACTER_CLASS = String.raw`\p{L}\p{N}\p{M}`;
1232
1162
  const PROFANE_WORD_ALTERNATION = englishProfaneWords.map((word) => word.replaceAll(/[.*+?^${}()|[\]\\]/gu, String.raw`\$&`)).join("|");
1233
1163
  const WHOLE_WORD_PROFANITY_REGEX = new RegExp(`(?<![${WORD_CHARACTER_CLASS}])(?:${PROFANE_WORD_ALTERNATION})(?![${WORD_CHARACTER_CLASS}])`, "iu");
@@ -1236,11 +1166,9 @@ const checkContainsProfanity = (text, { isWholeWord = true } = {}) => {
1236
1166
  if (typeof text !== "string") return false;
1237
1167
  return (isWholeWord ? WHOLE_WORD_PROFANITY_REGEX : SUBSTRING_PROFANITY_REGEX).test(text);
1238
1168
  };
1239
- //#endregion
1240
- //#region src/services/sanitizeHtml/checkIsWhitespaceCharacter.ts
1169
+ // src/services/sanitizeHtml/checkIsWhitespaceCharacter.ts
1241
1170
  const checkIsWhitespaceCharacter = (character) => character.trim() === "";
1242
- //#endregion
1243
- //#region src/services/sanitizeHtml/checkIsUnsafeUrlCharacter.ts
1171
+ // src/services/sanitizeHtml/checkIsUnsafeUrlCharacter.ts
1244
1172
  const FIRST_PRINTABLE_CODE_POINT = 32;
1245
1173
  const DELETE_CODE_POINT = 127;
1246
1174
  const LAST_C1_CONTROL_CODE_POINT = 159;
@@ -1249,13 +1177,11 @@ const checkIsUnsafeUrlCharacter = (character) => {
1249
1177
  const codePoint = character.codePointAt(0) ?? 0;
1250
1178
  return checkIsWhitespaceCharacter(character) || codePoint < FIRST_PRINTABLE_CODE_POINT || codePoint >= DELETE_CODE_POINT && codePoint <= LAST_C1_CONTROL_CODE_POINT || character === GRAVE_ACCENT;
1251
1179
  };
1252
- //#endregion
1253
- //#region src/util/array/takeOne.ts
1180
+ // src/util/array/takeOne.ts
1254
1181
  const takeOne = (values, index = 0) => {
1255
1182
  return values[index];
1256
1183
  };
1257
- //#endregion
1258
- //#region src/services/sanitizeHtml/checkIsAllowedUrl.ts
1184
+ // src/services/sanitizeHtml/checkIsAllowedUrl.ts
1259
1185
  const PATH_DELIMITER_REGEX = /[/?#]/u;
1260
1186
  const NON_SCHEME_CHARACTERS_REGEX = /[^a-z\d+.-]/giu;
1261
1187
  const SCHEME_SEPARATOR = ":";
@@ -1267,8 +1193,7 @@ const checkIsAllowedUrl = (url, allowedSchemes) => {
1267
1193
  const scheme = beforePath.slice(0, separatorIndex).replaceAll(NON_SCHEME_CHARACTERS_REGEX, "").toLowerCase();
1268
1194
  return allowedSchemes.includes(scheme);
1269
1195
  };
1270
- //#endregion
1271
- //#region src/services/sanitizeHtml/constants.ts
1196
+ // src/services/sanitizeHtml/constants.ts
1272
1197
  const HTML_NAMESPACE = html$1.NS.HTML;
1273
1198
  const DEFAULT_ALLOWED_TAGS = [
1274
1199
  "address",
@@ -1403,22 +1328,18 @@ const SRCSET_DESCRIPTOR_REGEX = /^(?:\d+w|\d*\.?\d+x|\d+h)$/u;
1403
1328
  const ESCAPED_TEXT_CHARACTERS_REGEX = /[&<>]/gu;
1404
1329
  const ESCAPED_ATTRIBUTE_CHARACTERS_REGEX = /[&"<>]/gu;
1405
1330
  const SANITIZER_ADVISORY_WATCH_SINCE = "2026-10-21";
1406
- //#endregion
1407
- //#region src/services/sanitizeHtml/getChildNodes.ts
1331
+ // src/services/sanitizeHtml/getChildNodes.ts
1408
1332
  const getChildNodes = (element) => "content" in element ? element.content.childNodes : element.childNodes;
1409
- //#endregion
1410
- //#region src/services/sanitizeHtml/collectText.ts
1333
+ // src/services/sanitizeHtml/collectText.ts
1411
1334
  const collectText = (nodes, depth) => depth > 256 ? "" : nodes.map((node) => {
1412
1335
  if ("value" in node) return node.value;
1413
1336
  if (!("tagName" in node) || NON_TEXT_TAGS.includes(node.tagName)) return "";
1414
1337
  return collectText(getChildNodes(node), depth + 1);
1415
1338
  }).join("");
1416
- //#endregion
1417
- //#region src/services/sanitizeHtml/escapeCharacters.ts
1339
+ // src/services/sanitizeHtml/escapeCharacters.ts
1418
1340
  const NON_BREAKING_SPACE = String.fromCodePoint(160);
1419
1341
  const escapeCharacters = (value, charactersRegex, entities) => value.replace(charactersRegex, (character) => entities[character] ?? character).replaceAll(NON_BREAKING_SPACE, "&nbsp;");
1420
- //#endregion
1421
- //#region src/services/sanitizeHtml/escapeAttribute.ts
1342
+ // src/services/sanitizeHtml/escapeAttribute.ts
1422
1343
  const ESCAPED_ATTRIBUTE_CHARACTERS = {
1423
1344
  "\"": "&quot;",
1424
1345
  "&": "&amp;",
@@ -1426,26 +1347,22 @@ const ESCAPED_ATTRIBUTE_CHARACTERS = {
1426
1347
  ">": "&gt;"
1427
1348
  };
1428
1349
  const escapeAttribute = (value) => escapeCharacters(value, ESCAPED_ATTRIBUTE_CHARACTERS_REGEX, ESCAPED_ATTRIBUTE_CHARACTERS);
1429
- //#endregion
1430
- //#region src/services/sanitizeHtml/escapeText.ts
1350
+ // src/services/sanitizeHtml/escapeText.ts
1431
1351
  const ESCAPED_TEXT_CHARACTERS = {
1432
1352
  "&": "&amp;",
1433
1353
  "<": "&lt;",
1434
1354
  ">": "&gt;"
1435
1355
  };
1436
1356
  const escapeText = (text) => escapeCharacters(text, ESCAPED_TEXT_CHARACTERS_REGEX, ESCAPED_TEXT_CHARACTERS);
1437
- //#endregion
1438
- //#region src/services/sanitizeHtml/matchesClassPattern.ts
1357
+ // src/services/sanitizeHtml/matchesClassPattern.ts
1439
1358
  const matchesClassPattern = (className, pattern) => pattern.endsWith("*") ? className.startsWith(pattern.slice(0, -1)) : className === pattern;
1440
- //#endregion
1441
- //#region src/services/sanitizeHtml/filterClasses.ts
1359
+ // src/services/sanitizeHtml/filterClasses.ts
1442
1360
  const filterClasses = (value, patterns) => {
1443
1361
  if (!patterns) return void 0;
1444
1362
  const classNames = value.split(/\s+/u).filter((className) => className && patterns.some((pattern) => matchesClassPattern(className, pattern)));
1445
1363
  return classNames.length > 0 ? classNames.join(" ") : void 0;
1446
1364
  };
1447
- //#endregion
1448
- //#region src/services/sanitizeHtml/filterSrcset.ts
1365
+ // src/services/sanitizeHtml/filterSrcset.ts
1449
1366
  const COMMA = ",";
1450
1367
  const OPENING_PARENTHESIS = "(";
1451
1368
  const CLOSING_PARENTHESIS = ")";
@@ -1477,8 +1394,7 @@ const filterSrcset = (value, allowedSchemes) => {
1477
1394
  }
1478
1395
  return candidates.length > 0 ? candidates.join(", ") : void 0;
1479
1396
  };
1480
- //#endregion
1481
- //#region src/services/sanitizeHtml/filterStyle.ts
1397
+ // src/services/sanitizeHtml/filterStyle.ts
1482
1398
  const DECLARATION_SEPARATOR = ";";
1483
1399
  const PROPERTY_SEPARATOR = ":";
1484
1400
  const IMPORTANT_SUFFIX = "!important";
@@ -1503,8 +1419,7 @@ const filterStyle = (value, rules) => {
1503
1419
  if (declarations.size === 0) return void 0;
1504
1420
  return Array.from(declarations, ([property, { important, propertyValue }]) => `${property}${PROPERTY_SEPARATOR}${propertyValue}${important ? IMPORTANT_SUFFIX : ""}`).join(DECLARATION_SEPARATOR);
1505
1421
  };
1506
- //#endregion
1507
- //#region src/services/sanitizeHtml/filterAttributes.ts
1422
+ // src/services/sanitizeHtml/filterAttributes.ts
1508
1423
  const getTagPolicy = (tagPolicies, tagName) => Object.hasOwn(tagPolicies, tagName) ? tagPolicies[tagName] : void 0;
1509
1424
  const checkIsMetaRefresh = (tagName, attributes) => tagName === "meta" && attributes["http-equiv"]?.trim().toLowerCase() === "refresh";
1510
1425
  const filterAttributes = (element, policy) => {
@@ -1530,8 +1445,7 @@ const filterValue = (tagName, name, value, policy) => {
1530
1445
  if (URL_ATTRIBUTES.includes(name)) return checkIsAllowedUrl(value, policy.allowedSchemes) ? value : void 0;
1531
1446
  return value;
1532
1447
  };
1533
- //#endregion
1534
- //#region src/services/sanitizeHtml/renderNode.ts
1448
+ // src/services/sanitizeHtml/renderNode.ts
1535
1449
  const renderNode = (node, policy, depth) => {
1536
1450
  if (node.nodeName === "#text") return escapeText(node.value);
1537
1451
  if (!("tagName" in node) || depth > 256) return "";
@@ -1542,16 +1456,14 @@ const renderNode = (node, policy, depth) => {
1542
1456
  const opening = `<${element.tagName}${attributes}>`;
1543
1457
  return VOID_TAGS.includes(element.tagName) ? opening : `${opening}${children}</${element.tagName}>`;
1544
1458
  };
1545
- //#endregion
1546
- //#region src/services/sanitizeHtml/filterHtml.ts
1459
+ // src/services/sanitizeHtml/filterHtml.ts
1547
1460
  const filterHtml = (html, policy) => {
1548
1461
  const context = defaultTreeAdapter.createElement("body", HTML_NAMESPACE, []);
1549
1462
  const childNodes = parseFragment(context, html, {}).childNodes;
1550
1463
  const output = childNodes.map((node) => renderNode(node, policy, 0)).join("");
1551
1464
  return parseFragment(context, output, {}).childNodes.map((node) => renderNode(node, policy, 0)).join("") === output ? output : escapeText(collectText(childNodes, 0));
1552
1465
  };
1553
- //#endregion
1554
- //#region src/services/sanitizeHtml/sanitizeHtml.ts
1466
+ // src/services/sanitizeHtml/sanitizeHtml.ts
1555
1467
  const appendStyle = (style, declarations) => style ? `${style}; ${declarations}` : declarations;
1556
1468
  const transformCellAlign = ({ align, ...attributes }) => align ? {
1557
1469
  ...attributes,
@@ -1603,8 +1515,7 @@ const sanitizeHtml = (html, options) => filterHtml(html, {
1603
1515
  th: transformCellAlign
1604
1516
  }
1605
1517
  });
1606
- //#endregion
1607
- //#region src/services/sanitizeHtml/sanitizeTextHtml.ts
1518
+ // src/services/sanitizeHtml/sanitizeTextHtml.ts
1608
1519
  const COLOR_REGEXES = [
1609
1520
  /^#[\da-fA-F]{3,8}$/u,
1610
1521
  /^rgba?\(\d{1,3},\s*\d{1,3},\s*\d{1,3}(?:,\s*[\d.]+)?\)$/u,
@@ -1651,39 +1562,31 @@ const sanitizeTextHtml = (html) => sanitizeHtml(html, {
1651
1562
  type: "checkbox"
1652
1563
  }) }
1653
1564
  });
1654
- //#endregion
1655
- //#region src/services/shared/applyItemMetadataMixin.ts
1565
+ // src/services/shared/applyItemMetadataMixin.ts
1656
1566
  const applyItemMetadataMixin = (Base) => class ItemWithMetadata extends Base {
1657
1567
  createdAt = /* @__PURE__ */ new Date();
1658
1568
  deletedAt = null;
1659
1569
  updatedAt = /* @__PURE__ */ new Date();
1660
1570
  };
1661
- //#endregion
1662
- //#region src/util/text/normalizeString.ts
1571
+ // src/util/text/normalizeString.ts
1663
1572
  const normalizeString = (value) => value?.trim() ?? "";
1664
- //#endregion
1665
- //#region src/services/zod/createNormalizedStringSchema.ts
1573
+ // src/services/zod/createNormalizedStringSchema.ts
1666
1574
  const createNormalizedStringSchema = (maxLength, schema = z.string()) => schema.transform(normalizeString).pipe(z.string().max(maxLength));
1667
- //#endregion
1668
- //#region src/util/id/constants.ts
1575
+ // src/util/id/constants.ts
1669
1576
  const ID_SEPARATOR = "|";
1670
- //#endregion
1671
- //#region src/services/zod/createUniqueArraySchema.ts
1577
+ // src/services/zod/createUniqueArraySchema.ts
1672
1578
  const getItemKey = (item, key) => {
1673
1579
  const record = item;
1674
1580
  return typeof key === "string" ? record[key] : key.map((part) => record[part]).join("|");
1675
1581
  };
1676
1582
  const createUniqueArraySchema = (schema, key) => schema.array().refine((array) => new Set(key === void 0 ? array : array.map((item) => getItemKey(item, key))).size === array.length, { error: "Array items must be unique" });
1677
- //#endregion
1678
- //#region src/services/zstd/constants.ts
1583
+ // src/services/zstd/constants.ts
1679
1584
  const DEFAULT_COMPRESSION_LEVEL = 12;
1680
1585
  const MIN_WINDOW_LOG = 10;
1681
1586
  const MAX_WINDOW_LOG = 27;
1682
- //#endregion
1683
- //#region src/services/zstd/getWindowLog.ts
1587
+ // src/services/zstd/getWindowLog.ts
1684
1588
  const getWindowLog = (dictionaryByteCount, inputByteCount) => Math.min(27, Math.max(10, Math.ceil(Math.log2(dictionaryByteCount + inputByteCount + 1))));
1685
- //#endregion
1686
- //#region src/test/constants.ts
1589
+ // src/test/constants.ts
1687
1590
  const ALL_SPECIAL_VALUES = [
1688
1591
  {
1689
1592
  isPlainObject: true,
@@ -1730,15 +1633,13 @@ const ALL_SPECIAL_VALUES = [
1730
1633
  value: /(?:)/u
1731
1634
  }
1732
1635
  ];
1733
- //#endregion
1734
- //#region src/util/array/chunk.ts
1636
+ // src/util/array/chunk.ts
1735
1637
  const chunk = (array, size) => {
1736
1638
  const chunks = [];
1737
1639
  for (let index = 0; index < array.length; index += size) chunks.push(array.slice(index, index + size));
1738
1640
  return chunks;
1739
1641
  };
1740
- //#endregion
1741
- //#region src/util/array/chunkBySerializedSize.ts
1642
+ // src/util/array/chunkBySerializedSize.ts
1742
1643
  const ARRAY_SERIALIZATION_BYTES = 1;
1743
1644
  const chunkBySerializedSize = (items, maxBytes, maxCount) => {
1744
1645
  const textEncoder = new TextEncoder();
@@ -1758,17 +1659,13 @@ const chunkBySerializedSize = (items, maxBytes, maxCount) => {
1758
1659
  if (currentChunk.length > 0) chunks.push(currentChunk);
1759
1660
  return chunks;
1760
1661
  };
1761
- //#endregion
1762
- //#region src/util/array/takeRandom.ts
1662
+ // src/util/array/takeRandom.ts
1763
1663
  const takeRandom = (values, random) => takeOne(values, Math.floor(random() * values.length));
1764
- //#endregion
1765
- //#region src/util/date/getZonedDateTime.ts
1664
+ // src/util/date/getZonedDateTime.ts
1766
1665
  const getZonedDateTime = (date) => Temporal.Instant.fromEpochMilliseconds(date.getTime()).toZonedDateTimeISO(Temporal.Now.timeZoneId());
1767
- //#endregion
1768
- //#region src/util/date/getEndOfDay.ts
1666
+ // src/util/date/getEndOfDay.ts
1769
1667
  const getEndOfDay = (date) => /* @__PURE__ */ new Date(getZonedDateTime(date).startOfDay().add({ days: 1 }).epochMilliseconds - 1);
1770
- //#endregion
1771
- //#region src/util/dom/checkIsNestedControl.ts
1668
+ // src/util/dom/checkIsNestedControl.ts
1772
1669
  const NESTED_INTERACTION_SELECTOR = [
1773
1670
  "a[href]",
1774
1671
  "button",
@@ -1798,19 +1695,16 @@ const checkIsNestedControl = (event) => {
1798
1695
  const interactiveElement = target.closest(NESTED_INTERACTION_SELECTOR);
1799
1696
  return Boolean(interactiveElement && interactiveElement !== currentTarget && currentTarget.contains(interactiveElement));
1800
1697
  };
1801
- //#endregion
1802
- //#region src/util/dom/checkIsNestedInteraction.ts
1698
+ // src/util/dom/checkIsNestedInteraction.ts
1803
1699
  const checkIsNestedInteraction = (event) => checkIsNestedControl(event) || Boolean(window.getSelection()?.toString());
1804
- //#endregion
1805
- //#region src/util/dom/downloadUrl.ts
1700
+ // src/util/dom/downloadUrl.ts
1806
1701
  const downloadUrl = (url, filename) => {
1807
1702
  const anchor = window.document.createElement("a");
1808
1703
  anchor.href = url;
1809
1704
  anchor.download = filename;
1810
1705
  anchor.click();
1811
1706
  };
1812
- //#endregion
1813
- //#region src/util/dom/downloadFile.ts
1707
+ // src/util/dom/downloadFile.ts
1814
1708
  const downloadFile = (filename, blobPart, type) => {
1815
1709
  const url = URL.createObjectURL(new Blob([blobPart], { type }));
1816
1710
  downloadUrl(url, filename);
@@ -1818,11 +1712,9 @@ const downloadFile = (filename, blobPart, type) => {
1818
1712
  URL.revokeObjectURL(url);
1819
1713
  }, 0);
1820
1714
  };
1821
- //#endregion
1822
- //#region src/util/environment/checkIsServer.ts
1715
+ // src/util/environment/checkIsServer.ts
1823
1716
  const checkIsServer = () => typeof window === "undefined";
1824
- //#endregion
1825
- //#region src/util/function/getSynchronizedFunction.ts
1717
+ // src/util/function/getSynchronizedFunction.ts
1826
1718
  const pendingPromises = /* @__PURE__ */ new Set();
1827
1719
  const getSynchronizedFunction = (asyncFunction) => (...args) => {
1828
1720
  const promise = asyncFunction(...args).finally(() => {
@@ -1833,19 +1725,16 @@ const getSynchronizedFunction = (asyncFunction) => (...args) => {
1833
1725
  const waitForSynchronizedFunctions = async () => {
1834
1726
  await Promise.allSettled(pendingPromises);
1835
1727
  };
1836
- //#endregion
1837
- //#region src/util/id/uuid/constants.ts
1728
+ // src/util/id/uuid/constants.ts
1838
1729
  const UUIDV4_REGEX = /^[0-9A-F]{8}-[0-9A-F]{4}-[4][0-9A-F]{3}-[89AB][0-9A-F]{3}-[0-9A-F]{12}$/iu;
1839
- //#endregion
1840
- //#region src/util/map/getOrCreate.ts
1730
+ // src/util/map/getOrCreate.ts
1841
1731
  const getOrCreate = (map, key, create) => {
1842
1732
  if (map.has(key)) return map.get(key);
1843
1733
  const value = create();
1844
1734
  map.set(key, value);
1845
1735
  return value;
1846
1736
  };
1847
- //#endregion
1848
- //#region src/util/object/clonePlainDeep.ts
1737
+ // src/util/object/clonePlainDeep.ts
1849
1738
  const clone = (data, copies) => {
1850
1739
  if (!Array.isArray(data) && !checkIsPlainObject(data)) return data;
1851
1740
  else if (copies.has(data)) return copies.get(data);
@@ -1862,11 +1751,9 @@ const clone = (data, copies) => {
1862
1751
  }
1863
1752
  };
1864
1753
  const clonePlainDeep = (data) => clone(data, /* @__PURE__ */ new WeakMap());
1865
- //#endregion
1866
- //#region src/util/object/getPropertyNames.ts
1754
+ // src/util/object/getPropertyNames.ts
1867
1755
  const getPropertyNames = () => new Proxy({}, { get: (_target, property) => property });
1868
- //#endregion
1869
- //#region src/util/object/jsonDateParse.ts
1756
+ // src/util/object/jsonDateParse.ts
1870
1757
  const ISO_DATE_REGEX = /^(?<year>\d{4})-(?<month>\d{2})-(?<day>\d{2})T(?<hours>\d{2}):(?<minutes>\d{2}):(?<seconds>\d{2}(?:\.{0,1}\d*))(?:Z|(?<sign>\+|-)(?<offset>[\d|:]*))?$/u;
1871
1758
  const MS_AJAX_DATE_REGEX = /^\/Date\((?<timestamp>-?\d+(?:[-+]\d+)?)\)[/\\]$/u;
1872
1759
  const jsonDateParse = (text) => JSON.parse(text, (_key, value) => {
@@ -1877,11 +1764,9 @@ const jsonDateParse = (text) => JSON.parse(text, (_key, value) => {
1877
1764
  const timestampParts = takeOne(msAjaxDateMatch, 1).split(/[-+,.]/u);
1878
1765
  return new Date(timestampParts[0] ? Number(timestampParts[0]) : 0 - Number(timestampParts[1]));
1879
1766
  });
1880
- //#endregion
1881
- //#region src/util/object/mergeObjectsStrict.ts
1767
+ // src/util/object/mergeObjectsStrict.ts
1882
1768
  const mergeObjectsStrict = (...objects) => Object.assign({}, ...objects);
1883
- //#endregion
1884
- //#region src/util/object/omitDeep.ts
1769
+ // src/util/object/omitDeep.ts
1885
1770
  const checkIsWalkable = (value) => Object.prototype.toString.call(value) === "[object Object]";
1886
1771
  const omitValue = (value, omittedKeys) => {
1887
1772
  if (Array.isArray(value)) return value.map((element) => omitValue(element, omittedKeys));
@@ -1891,8 +1776,7 @@ const omitValue = (value, omittedKeys) => {
1891
1776
  return omittedValue;
1892
1777
  };
1893
1778
  const omitDeep = (value, ...keys) => omitValue(value, new Set(keys));
1894
- //#endregion
1895
- //#region src/util/promise/createEvictingPromiseCache.ts
1779
+ // src/util/promise/createEvictingPromiseCache.ts
1896
1780
  const createEvictingPromiseCache = (getKey, load) => {
1897
1781
  const promiseMap = /* @__PURE__ */ new Map();
1898
1782
  return (...args) => {
@@ -1905,8 +1789,7 @@ const createEvictingPromiseCache = (getKey, load) => {
1905
1789
  });
1906
1790
  };
1907
1791
  };
1908
- //#endregion
1909
- //#region src/util/promise/settleAll.ts
1792
+ // src/util/promise/settleAll.ts
1910
1793
  const settleAll = async (tasks, concurrencyLimit = tasks.length) => {
1911
1794
  if (tasks.length === 0) return [];
1912
1795
  const values = [];
@@ -1920,11 +1803,9 @@ const settleAll = async (tasks, concurrencyLimit = tasks.length) => {
1920
1803
  }
1921
1804
  return values;
1922
1805
  };
1923
- //#endregion
1924
- //#region src/util/text/capitalize.ts
1806
+ // src/util/text/capitalize.ts
1925
1807
  const capitalize = (string) => `${string.charAt(0).toUpperCase()}${string.slice(1)}`;
1926
- //#endregion
1927
- //#region src/util/text/dedent.ts
1808
+ // src/util/text/dedent.ts
1928
1809
  const ESCAPE_CHARACTER = "\\";
1929
1810
  const LINE_FEED = "\n";
1930
1811
  const LINE_FEED_CHARACTER = {
@@ -2123,8 +2004,7 @@ const createDedent = (options) => {
2123
2004
  return dedent;
2124
2005
  };
2125
2006
  const dedent = createDedent({});
2126
- //#endregion
2127
- //#region src/util/text/encodeUrlSubDelimiters.ts
2007
+ // src/util/text/encodeUrlSubDelimiters.ts
2128
2008
  const EncodedSubDelimiterMap = {
2129
2009
  "!": "%21",
2130
2010
  "'": "%27",
@@ -2133,36 +2013,29 @@ const EncodedSubDelimiterMap = {
2133
2013
  "*": "%2A"
2134
2014
  };
2135
2015
  const encodeUrlSubDelimiters = (value) => Object.entries(EncodedSubDelimiterMap).reduce((encoded, [subDelimiter, encodedSubDelimiter]) => encoded.replaceAll(subDelimiter, encodedSubDelimiter), value);
2136
- //#endregion
2137
- //#region src/util/text/getDecodedUriComponent.ts
2016
+ // src/util/text/getDecodedUriComponent.ts
2138
2017
  const getDecodedUriComponent = (value, fallback) => getResult(() => decodeURIComponent(value)).unwrapOr(fallback);
2139
- //#endregion
2140
- //#region src/util/text/streamToText.ts
2018
+ // src/util/text/streamToText.ts
2141
2019
  const streamToText = async (readable) => {
2142
2020
  readable.setEncoding("utf8");
2143
2021
  let data = "";
2144
2022
  for await (const chunk of readable) data += chunk.toString();
2145
2023
  return data;
2146
2024
  };
2147
- //#endregion
2148
- //#region src/util/text/toKebabCase.ts
2025
+ // src/util/text/toKebabCase.ts
2149
2026
  const toKebabCase = (string) => string.match(/[A-Z]{2,}(?=[A-Z][a-z]+[0-9]*|\b)|[A-Z]?[a-z]+[0-9]*|[A-Z]|[0-9]+/gu)?.map((x) => x.toLowerCase()).join("-") ?? "";
2150
- //#endregion
2151
- //#region src/util/text/truncate.ts
2027
+ // src/util/text/truncate.ts
2152
2028
  const SUFFIX = "...";
2153
2029
  const truncate = (string, length) => {
2154
2030
  if (string.length <= length) return string;
2155
2031
  else if (length < 3) return string.slice(0, length);
2156
2032
  else return `${string.slice(0, length - 3)}${SUFFIX}`;
2157
2033
  };
2158
- //#endregion
2159
- //#region src/util/text/uncapitalize.ts
2034
+ // src/util/text/uncapitalize.ts
2160
2035
  const uncapitalize = (string) => `${string.charAt(0).toLowerCase()}${string.slice(1)}`;
2161
- //#endregion
2162
- //#region src/util/time/constants.ts
2036
+ // src/util/time/constants.ts
2163
2037
  const MILLISECONDS_PER_SECOND = 1e3;
2164
- //#endregion
2165
- //#region src/util/time/hrtime.ts
2038
+ // src/util/time/hrtime.ts
2166
2039
  const hrtime = (previousHrTime) => {
2167
2040
  if (checkIsServer()) return process.hrtime(previousHrTime);
2168
2041
  const clocktime = performance.now() * .001;
@@ -2178,20 +2051,17 @@ const hrtime = (previousHrTime) => {
2178
2051
  }
2179
2052
  return [seconds, nanoseconds];
2180
2053
  };
2181
- //#endregion
2182
- //#region src/util/time/now.ts
2054
+ // src/util/time/now.ts
2183
2055
  const loadNanoseconds = hrtime();
2184
2056
  const loadMilliseconds = Date.now();
2185
2057
  const now = () => {
2186
2058
  const [seconds, nanoseconds] = hrtime(loadNanoseconds);
2187
2059
  return (BigInt(loadMilliseconds) * 10n ** 6n + (BigInt(seconds) * 10n ** 9n + BigInt(nanoseconds))).toString();
2188
2060
  };
2189
- //#endregion
2190
- //#region src/util/time/sleep.ts
2061
+ // src/util/time/sleep.ts
2191
2062
  const sleep = (durationMs) => new Promise((resolve) => {
2192
2063
  setTimeout(() => {
2193
2064
  resolve();
2194
2065
  }, durationMs);
2195
2066
  });
2196
- //#endregion
2197
2067
  export { ALL_SPECIAL_VALUES, APPEND_SEGMENT, CHARSET_PARAMETER_REGEX, CUSTOM_EMOJI_ID_ATTRIBUTE, CUSTOM_EMOJI_NAME_ATTRIBUTE, DEFAULT_ALLOWED_ATTRIBUTES, DEFAULT_ALLOWED_SCHEMES, DEFAULT_ALLOWED_TAGS, DEFAULT_COMPRESSION_LEVEL, DEFAULT_FACET_SCORE, DEFAULT_LINK_ATTRIBUTES, DEFAULT_SOURCE_SCORE, DEFAULT_TEXT_CHARSET, DEFAULT_TYPE_SCORE, ESCAPED_ATTRIBUTE_CHARACTERS_REGEX, ESCAPED_TEXT_CHARACTERS_REGEX, FacetScoreMap, ForbiddenError, GIBIBYTE, HTML_NAMESPACE, ID_SEPARATOR, IMPORTANT_REGEX, InvalidOperationError, ItemMetadata, JSON_POINTER_REGEX, JsonPatchOperationType, KIBIBYTE, MAX_NESTING_DEPTH, MAX_READ_LIMIT, MAX_WINDOW_LOG, MEDIA_TYPE_REGEX, MENTION_EVERYONE_ID, MENTION_HERE_ID, MENTION_ID_ATTRIBUTE, MENTION_ITEM_TYPE_ATTRIBUTE, MENTION_LABEL_ATTRIBUTE, MENTION_SELECTOR, MENTION_TYPE, MENTION_TYPE_ATTRIBUTE, MILLISECONDS_PER_SECOND, MIN_WINDOW_LOG, MentionType, NON_TEXT_TAGS, NotFoundError, NotInitializedError, ObjectMethod, Operation, PATH_SEPARATOR_REGEX, RoutePath, SANITIZER_ADVISORY_WATCH_SINCE, SITE_NAME, SPOILER_ATTRIBUTE, SPOILER_SELECTOR, SRCSET_ATTRIBUTE, SRCSET_DESCRIPTOR_REGEX, Serializable, SourceScoreMap, TEXT_MEDIA_TYPE_REGEX, TypeScoreMap, TypedEventEmitter, URL_ATTRIBUTES, UUIDV4_REGEX, VOID_TAGS, WordFilteredError, addJsonValue, applyItemMetadataMixin, applyPatch, applyPatches, capitalize, charset, checkContainsProfanity, checkIsAllowedUrl, checkIsCustomMethod, checkIsDeepEqual, checkIsNestedControl, checkIsNestedInteraction, checkIsPlainObject, checkIsSameBytes, checkIsSameValueZero, checkIsServer, checkIsUnsafeUrlCharacter, checkIsWhitespaceCharacter, chunk, chunkBySerializedSize, clonePlainDeep, collectText, contentType, createEvictingPromiseCache, createHistory, createItemEntityTypeSchema, createNormalizedStringSchema, createUniqueArraySchema, css, dedent, downloadFile, downloadUrl, encodeUrlSubDelimiters, englishProfaneWords, escapeAttribute, escapeCharacters, escapeText, exhaustiveGuard, extension, filterAttributes, filterClasses, filterHtml, filterSrcset, filterStyle, getChildNodes, getDecodedUriComponent, getEndOfDay, getEnumerableKeys, getExtensionMimeTypeMap, getMediaType, getMentions, getMimeScore, getMimeTypeEntryMap, getOrCreate, getPropertyNames, getRawData, getRequestError, getResult, getResultAsync, getSynchronizedFunction, getTransactionDone, getTransactionObjectStore, getWindowLog, getZonedDateTime, hrtime, html, jsonDateParse, lookup, matchesClassPattern, mergeObjectsStrict, noop, normalizeString, now, omitDeep, openDatabase, parseArrayIndex, parseJsonPointer, pushHistory, readJsonValue, redoHistory, removeJsonValue, renderNode, reportFinalizerError, requestToPromise, sanitizeHtml, sanitizeTextHtml, settleAll, sleep, streamToText, takeOne, takeRandom, toAppError, toJsonPointer, toKebabCase, toRawDeep, truncate, uncapitalize, undoHistory, updateJsonValue, waitForSynchronizedFunctions, withFinalizer, withFinalizerAsync, wrapDatabase, wrapIndex, wrapObjectStore, wrapTransaction, wrapUpgradeDatabase, wrapUpgradeTransaction };