@novely/core 0.39.0 → 0.40.0-next

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/dist/index.js CHANGED
@@ -82,7 +82,7 @@ function klona(val) {
82
82
  }
83
83
 
84
84
  // src/utils.ts
85
- import { default as memoize2 } from "micro-memoize";
85
+ import { memoize as memoize2 } from "es-toolkit/function";
86
86
 
87
87
  // src/asset.ts
88
88
  import { DEV } from "esm-env";
@@ -147,7 +147,7 @@ var loadImageFormatsSupport = async () => {
147
147
  loadImageFormatsSupport();
148
148
 
149
149
  // src/asset.ts
150
- import { default as memoize } from "micro-memoize";
150
+ import { memoize, once } from "es-toolkit/function";
151
151
  var getType = memoize((extensions) => {
152
152
  if (extensions.every((extension) => HOWLER_SUPPORTED_FILE_FORMATS.has(extension))) {
153
153
  return "audio";
@@ -161,43 +161,51 @@ var SUPPORT_MAPS = {
161
161
  "image": supportsMap2,
162
162
  "audio": supportsMap
163
163
  };
164
- var asset = memoize((...variants) => {
165
- if (DEV && variants.length === 0) {
166
- throw new Error(`Attempt to use "asset" function without arguments`);
167
- }
168
- const map = {};
169
- const extensions = [];
170
- for (const v of variants) {
171
- const e = getUrlFileExtension(v);
172
- map[e] = v;
173
- extensions.push(e);
174
- }
175
- const type = getType(extensions);
176
- const getSource = memoize(() => {
177
- const support = SUPPORT_MAPS[type];
178
- for (const extension of extensions) {
179
- if (extension in support) {
180
- if (support[extension]) {
164
+ var assetPrivate = memoize(
165
+ (variants) => {
166
+ if (DEV && variants.length === 0) {
167
+ throw new Error(`Attempt to use "asset" function without arguments`);
168
+ }
169
+ const map = {};
170
+ const extensions = [];
171
+ for (const v of variants) {
172
+ const e = getUrlFileExtension(v);
173
+ map[e] = v;
174
+ extensions.push(e);
175
+ }
176
+ const type = getType(extensions);
177
+ const getSource = once(() => {
178
+ const support = SUPPORT_MAPS[type];
179
+ for (const extension of extensions) {
180
+ if (extension in support) {
181
+ if (support[extension]) {
182
+ return map[extension];
183
+ }
184
+ } else {
181
185
  return map[extension];
182
186
  }
183
- } else {
184
- return map[extension];
185
187
  }
186
- }
187
- if (DEV) {
188
- throw new Error(`No matching asset was found for ${variants.map((v) => `"${v}"`).join(", ")}`);
189
- }
190
- return "";
191
- });
192
- return {
193
- get source() {
194
- return getSource();
195
- },
196
- get type() {
197
- return type;
198
- }
199
- };
200
- });
188
+ if (DEV) {
189
+ throw new Error(`No matching asset was found for ${variants.map((v) => `"${v}"`).join(", ")}`);
190
+ }
191
+ return "";
192
+ });
193
+ return {
194
+ get source() {
195
+ return getSource();
196
+ },
197
+ get type() {
198
+ return type;
199
+ }
200
+ };
201
+ },
202
+ {
203
+ getCacheKey: (variants) => variants.join("~")
204
+ }
205
+ );
206
+ var asset = (...variants) => {
207
+ return assetPrivate(variants);
208
+ };
201
209
  var isAsset = (suspect) => {
202
210
  return suspect !== null && typeof suspect === "object" && "source" in suspect && "type" in suspect;
203
211
  };
@@ -264,34 +272,6 @@ var getLanguage = (languages) => {
264
272
  }
265
273
  return languages[0];
266
274
  };
267
- var throttle = (fn, ms) => {
268
- let throttled = false, savedArgs, savedThis;
269
- function wrapper(...args) {
270
- if (throttled) {
271
- savedArgs = args;
272
- savedThis = this;
273
- return;
274
- }
275
- fn.apply(this, args);
276
- throttled = true;
277
- setTimeout(() => {
278
- throttled = false;
279
- if (savedArgs) {
280
- wrapper.apply(savedThis, savedArgs);
281
- savedArgs = savedThis = null;
282
- }
283
- }, ms);
284
- }
285
- return wrapper;
286
- };
287
- var findLastIndex = (array, fn) => {
288
- for (let i = array.length - 1; i >= 0; i--) {
289
- if (fn.call(array, array[i], i, array)) {
290
- return i;
291
- }
292
- }
293
- return -1;
294
- };
295
275
  var createControlledPromise = () => {
296
276
  const object = {
297
277
  resolve: null,
@@ -315,11 +295,11 @@ var createControlledPromise = () => {
315
295
  return init(), object;
316
296
  };
317
297
  var findLastPathItemBeforeItemOfType = (path, name) => {
318
- const index = findLastIndex(path, ([_name, _value], i, array) => {
298
+ const item = path.findLast(([_name, _value], i, array) => {
319
299
  const next = array[i + 1];
320
300
  return isNull(_name) && isNumber(_value) && next != null && next[0] === name;
321
301
  });
322
- return path[index];
302
+ return item;
323
303
  };
324
304
  var isBlockStatement = (statement) => {
325
305
  return BLOCK_STATEMENTS.has(statement);
@@ -534,14 +514,15 @@ var createQueueProcessor = (queue, options) => {
534
514
  }
535
515
  };
536
516
  };
537
- var getStack = (ctx) => {
538
- const { id } = ctx;
539
- const cached = STACK_MAP.get(id);
540
- if (cached) return cached;
541
- const stack = [];
542
- STACK_MAP.set(id, stack);
543
- return stack;
544
- };
517
+ var getStack = memoize2(
518
+ (_) => {
519
+ return [];
520
+ },
521
+ {
522
+ cache: STACK_MAP,
523
+ getCacheKey: (ctx) => ctx.id
524
+ }
525
+ );
545
526
  var createUseStackFunction = (renderer) => {
546
527
  const useStack = (context) => {
547
528
  const ctx = typeof context === "string" ? renderer.getContext(context) : context;
@@ -591,7 +572,7 @@ var getUrlFileExtension = (address) => {
591
572
  return "";
592
573
  }
593
574
  };
594
- var fetchContentType = async (request, url) => {
575
+ var fetchContentType = async (url, request) => {
595
576
  try {
596
577
  const response = await request(url, {
597
578
  method: "HEAD"
@@ -604,31 +585,26 @@ var fetchContentType = async (request, url) => {
604
585
  return "";
605
586
  }
606
587
  };
607
- var getResourseType = memoize2(
608
- async (request, url) => {
609
- if (!isCSSImage(url)) {
610
- return "other";
611
- }
612
- const extension = getUrlFileExtension(url);
613
- if (HOWLER_SUPPORTED_FILE_FORMATS.has(extension)) {
614
- return "audio";
615
- }
616
- if (SUPPORTED_IMAGE_FILE_FORMATS.has(extension)) {
617
- return "image";
618
- }
619
- const contentType = await fetchContentType(request, url);
620
- if (contentType.includes("audio")) {
621
- return "audio";
622
- }
623
- if (contentType.includes("image")) {
624
- return "image";
625
- }
588
+ var getResourseType = memoize2(async (url, request) => {
589
+ if (!isCSSImage(url)) {
626
590
  return "other";
627
- },
628
- {
629
- isPromise: true
630
591
  }
631
- );
592
+ const extension = getUrlFileExtension(url);
593
+ if (HOWLER_SUPPORTED_FILE_FORMATS.has(extension)) {
594
+ return "audio";
595
+ }
596
+ if (SUPPORTED_IMAGE_FILE_FORMATS.has(extension)) {
597
+ return "image";
598
+ }
599
+ const contentType = await fetchContentType(url, request);
600
+ if (contentType.includes("audio")) {
601
+ return "audio";
602
+ }
603
+ if (contentType.includes("image")) {
604
+ return "image";
605
+ }
606
+ return "other";
607
+ });
632
608
  var capitalize = (str2) => {
633
609
  return str2[0].toUpperCase() + str2.slice(1);
634
610
  };
@@ -810,6 +786,8 @@ var toArray = (target) => {
810
786
  };
811
787
 
812
788
  // src/novely.ts
789
+ import { throttle } from "es-toolkit/function";
790
+ import { merge as deepmerge } from "es-toolkit/object";
813
791
  import { dequal } from "dequal/lite";
814
792
 
815
793
  // src/store.ts
@@ -835,79 +813,6 @@ var store = (current, subscribers = /* @__PURE__ */ new Set()) => {
835
813
  return { subscribe, update, set, get };
836
814
  };
837
815
 
838
- // ../deepmerge/dist/index.js
839
- var { isArray } = Array;
840
- var { hasOwnProperty, propertyIsEnumerable, getOwnPropertySymbols } = Object;
841
- var propertyIsOnObject = (object, property) => {
842
- try {
843
- return property in object;
844
- } catch {
845
- return false;
846
- }
847
- };
848
- var propertyIsUnsafe = (target, key) => {
849
- return propertyIsOnObject(target, key) && // Properties are safe to merge if they don't exist in the target yet,
850
- !(hasOwnProperty.call(target, key) && // unsafe if they exist up the prototype chain,
851
- propertyIsEnumerable.call(target, key));
852
- };
853
- var getEnumerableOwnPropertySymbols = (target) => {
854
- if (!getOwnPropertySymbols) return [];
855
- return getOwnPropertySymbols(target).filter((symbol) => propertyIsEnumerable.call(target, symbol));
856
- };
857
- var keys = (target) => {
858
- return [...Object.keys(target), ...getEnumerableOwnPropertySymbols(target)];
859
- };
860
- var isMergeableObject = (value) => {
861
- return !!value && typeof value === "object" && !["RegExp", "Date"].includes(Object.prototype.toString.call(value).slice(8, -1));
862
- };
863
- var empty = (value) => {
864
- return isArray(value) ? [] : {};
865
- };
866
- var clone = (value) => {
867
- return isMergeableObject(value) ? deepmerge(empty(value), value) : value;
868
- };
869
- var mergeArray = (target, source) => {
870
- const destination = target.slice();
871
- source.forEach((item, index) => {
872
- if (typeof destination[index] === "undefined") {
873
- destination[index] = clone(item);
874
- } else if (isMergeableObject(item)) {
875
- destination[index] = deepmerge(target[index], item);
876
- } else if (target.indexOf(item) === -1) {
877
- destination.push(item);
878
- }
879
- });
880
- return destination;
881
- };
882
- var mergeObject = (target, source) => {
883
- const destination = {};
884
- for (const key of keys(target)) {
885
- destination[key] = clone(target[key]);
886
- }
887
- for (const key of keys(source)) {
888
- if (propertyIsUnsafe(target, key)) {
889
- continue;
890
- }
891
- if (propertyIsOnObject(target, key) && isMergeableObject(source[key])) {
892
- destination[key] = deepmerge(target[key], source[key]);
893
- } else {
894
- destination[key] = clone(source[key]);
895
- }
896
- }
897
- return destination;
898
- };
899
- var deepmerge = (target, source) => {
900
- if (isArray(target) && isArray(source)) {
901
- const merged = mergeArray(target, source);
902
- return merged;
903
- } else if (!isArray(target) && !isArray(source)) {
904
- const merged = mergeObject(target, source);
905
- return merged;
906
- } else {
907
- return clone(source);
908
- }
909
- };
910
-
911
816
  // src/translation.ts
912
817
  var RGX = /{{(.*?)}}/g;
913
818
  var split = (input, delimeters) => {
@@ -1498,7 +1403,7 @@ var novely = ({
1498
1403
  getCustomActionHolder(ctx, fn).cleanup();
1499
1404
  };
1500
1405
  const getResourseTypeForRenderer = (url) => {
1501
- return getResourseType(request, url);
1406
+ return getResourseType(url, request);
1502
1407
  };
1503
1408
  const getCharacterColor = (c) => {
1504
1409
  return c in characters ? characters[c].color : "#000000";