@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/README.md +9 -0
- package/dist/index.d.ts +1 -3
- package/dist/index.global.js +139 -453
- package/dist/index.global.js.map +1 -1
- package/dist/index.js +77 -172
- package/dist/index.js.map +1 -1
- package/package.json +63 -64
package/dist/index.js
CHANGED
|
@@ -82,7 +82,7 @@ function klona(val) {
|
|
|
82
82
|
}
|
|
83
83
|
|
|
84
84
|
// src/utils.ts
|
|
85
|
-
import {
|
|
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 {
|
|
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
|
|
165
|
-
|
|
166
|
-
|
|
167
|
-
|
|
168
|
-
|
|
169
|
-
|
|
170
|
-
|
|
171
|
-
const
|
|
172
|
-
|
|
173
|
-
|
|
174
|
-
|
|
175
|
-
|
|
176
|
-
|
|
177
|
-
const
|
|
178
|
-
|
|
179
|
-
|
|
180
|
-
if (support
|
|
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
|
-
|
|
188
|
-
|
|
189
|
-
|
|
190
|
-
|
|
191
|
-
|
|
192
|
-
|
|
193
|
-
|
|
194
|
-
|
|
195
|
-
|
|
196
|
-
|
|
197
|
-
|
|
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
|
|
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
|
|
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 = (
|
|
538
|
-
|
|
539
|
-
|
|
540
|
-
|
|
541
|
-
|
|
542
|
-
|
|
543
|
-
|
|
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 (
|
|
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
|
-
|
|
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(
|
|
1406
|
+
return getResourseType(url, request);
|
|
1502
1407
|
};
|
|
1503
1408
|
const getCharacterColor = (c) => {
|
|
1504
1409
|
return c in characters ? characters[c].color : "#000000";
|