@novely/core 0.40.0-next → 0.40.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/index.d.ts +2 -1
- package/dist/index.global.js +105 -28
- package/dist/index.global.js.map +1 -1
- package/dist/index.js +105 -28
- package/dist/index.js.map +1 -1
- package/package.json +63 -63
package/dist/index.d.ts
CHANGED
|
@@ -327,6 +327,7 @@ type CharactersData<$Characters extends Record<string, Character<Lang>>> = {
|
|
|
327
327
|
emotions: Array<keyof $Characters[Character]['emotions']>;
|
|
328
328
|
};
|
|
329
329
|
};
|
|
330
|
+
type AssetsPreloading = 'lazy' | 'blocking' | 'automatic';
|
|
330
331
|
interface NovelyInit<$Language extends Lang, $Characters extends Record<string, Character<NoInfer<$Language>>>, $State extends State, $Data extends Data, $Actions extends Record<string, (...args: any[]) => ValidAction>> {
|
|
331
332
|
/**
|
|
332
333
|
* An object containing the characters in the game.
|
|
@@ -503,7 +504,7 @@ interface NovelyInit<$Language extends Lang, $Characters extends Record<string,
|
|
|
503
504
|
/**
|
|
504
505
|
* @default "lazy"
|
|
505
506
|
*/
|
|
506
|
-
preloadAssets?:
|
|
507
|
+
preloadAssets?: AssetsPreloading;
|
|
507
508
|
/**
|
|
508
509
|
* Fetching function
|
|
509
510
|
*/
|
package/dist/index.global.js
CHANGED
|
@@ -655,26 +655,31 @@ var Novely = (() => {
|
|
|
655
655
|
return "";
|
|
656
656
|
}
|
|
657
657
|
};
|
|
658
|
-
var getResourseType = memoize(
|
|
659
|
-
|
|
658
|
+
var getResourseType = memoize(
|
|
659
|
+
async ({ url, request }) => {
|
|
660
|
+
if (!isCSSImage(url)) {
|
|
661
|
+
return "other";
|
|
662
|
+
}
|
|
663
|
+
const extension = getUrlFileExtension(url);
|
|
664
|
+
if (HOWLER_SUPPORTED_FILE_FORMATS.has(extension)) {
|
|
665
|
+
return "audio";
|
|
666
|
+
}
|
|
667
|
+
if (SUPPORTED_IMAGE_FILE_FORMATS.has(extension)) {
|
|
668
|
+
return "image";
|
|
669
|
+
}
|
|
670
|
+
const contentType = await fetchContentType(url, request);
|
|
671
|
+
if (contentType.includes("audio")) {
|
|
672
|
+
return "audio";
|
|
673
|
+
}
|
|
674
|
+
if (contentType.includes("image")) {
|
|
675
|
+
return "image";
|
|
676
|
+
}
|
|
660
677
|
return "other";
|
|
678
|
+
},
|
|
679
|
+
{
|
|
680
|
+
getCacheKey: ({ url }) => url
|
|
661
681
|
}
|
|
662
|
-
|
|
663
|
-
if (HOWLER_SUPPORTED_FILE_FORMATS.has(extension)) {
|
|
664
|
-
return "audio";
|
|
665
|
-
}
|
|
666
|
-
if (SUPPORTED_IMAGE_FILE_FORMATS.has(extension)) {
|
|
667
|
-
return "image";
|
|
668
|
-
}
|
|
669
|
-
const contentType = await fetchContentType(url, request);
|
|
670
|
-
if (contentType.includes("audio")) {
|
|
671
|
-
return "audio";
|
|
672
|
-
}
|
|
673
|
-
if (contentType.includes("image")) {
|
|
674
|
-
return "image";
|
|
675
|
-
}
|
|
676
|
-
return "other";
|
|
677
|
-
});
|
|
682
|
+
);
|
|
678
683
|
var capitalize = (str2) => {
|
|
679
684
|
return str2[0].toUpperCase() + str2.slice(1);
|
|
680
685
|
};
|
|
@@ -854,6 +859,17 @@ var Novely = (() => {
|
|
|
854
859
|
var toArray = (target) => {
|
|
855
860
|
return Array.isArray(target) ? target : [target];
|
|
856
861
|
};
|
|
862
|
+
var getLanguageFromStore = (store2) => {
|
|
863
|
+
return store2.get().meta[0];
|
|
864
|
+
};
|
|
865
|
+
var getVolumeFromStore = (store2) => {
|
|
866
|
+
const { meta } = store2.get();
|
|
867
|
+
return {
|
|
868
|
+
music: meta[2],
|
|
869
|
+
sound: meta[3],
|
|
870
|
+
voice: meta[4]
|
|
871
|
+
};
|
|
872
|
+
};
|
|
857
873
|
|
|
858
874
|
// ../../node_modules/.pnpm/es-toolkit@1.16.0/node_modules/es-toolkit/dist/compat/predicate/isObjectLike.mjs
|
|
859
875
|
function isObjectLike(value) {
|
|
@@ -1207,6 +1223,11 @@ var Novely = (() => {
|
|
|
1207
1223
|
}
|
|
1208
1224
|
|
|
1209
1225
|
// src/preloading.ts
|
|
1226
|
+
var ACTION_NAME_TO_VOLUME_MAP = {
|
|
1227
|
+
"playMusic": "music",
|
|
1228
|
+
"playSound": "sound",
|
|
1229
|
+
"voice": "voice"
|
|
1230
|
+
};
|
|
1210
1231
|
var enqueueAssetForPreloading = (asset2) => {
|
|
1211
1232
|
if (!PRELOADED_ASSETS.has(asset2)) {
|
|
1212
1233
|
ASSETS_TO_PRELOAD.add(asset2);
|
|
@@ -1215,7 +1236,10 @@ var Novely = (() => {
|
|
|
1215
1236
|
var handleAssetsPreloading = async ({ request, limiter, preloadAudioBlocking, preloadImageBlocking }) => {
|
|
1216
1237
|
const list = mapSet(ASSETS_TO_PRELOAD, (asset2) => {
|
|
1217
1238
|
return limiter(async () => {
|
|
1218
|
-
const type = await getResourseType(
|
|
1239
|
+
const type = await getResourseType({
|
|
1240
|
+
url: asset2,
|
|
1241
|
+
request
|
|
1242
|
+
});
|
|
1219
1243
|
switch (type) {
|
|
1220
1244
|
case "audio": {
|
|
1221
1245
|
await preloadAudioBlocking(asset2);
|
|
@@ -1233,7 +1257,7 @@ var Novely = (() => {
|
|
|
1233
1257
|
await Promise.allSettled(list);
|
|
1234
1258
|
ASSETS_TO_PRELOAD.clear();
|
|
1235
1259
|
};
|
|
1236
|
-
var huntAssets = ({ characters, action, props, handle }) => {
|
|
1260
|
+
var huntAssets = ({ volume, lang, mode, characters, action, props, handle }) => {
|
|
1237
1261
|
if (action === "showBackground") {
|
|
1238
1262
|
if (isString(props[0])) {
|
|
1239
1263
|
handle(handleAudioAsset(props[0]));
|
|
@@ -1242,13 +1266,39 @@ var Novely = (() => {
|
|
|
1242
1266
|
for (const value of Object.values(props[0])) {
|
|
1243
1267
|
if (isImageAsset(value)) {
|
|
1244
1268
|
handle(value);
|
|
1269
|
+
} else if (isAsset(value)) {
|
|
1270
|
+
const unwrapped = handleImageAsset(value);
|
|
1271
|
+
if (isImageAsset(unwrapped)) {
|
|
1272
|
+
handle(unwrapped);
|
|
1273
|
+
}
|
|
1245
1274
|
}
|
|
1246
1275
|
}
|
|
1247
1276
|
}
|
|
1248
1277
|
return;
|
|
1249
1278
|
}
|
|
1279
|
+
const getVolumeFor = (action2) => {
|
|
1280
|
+
if (action2 in ACTION_NAME_TO_VOLUME_MAP) {
|
|
1281
|
+
return volume[ACTION_NAME_TO_VOLUME_MAP[action2]];
|
|
1282
|
+
}
|
|
1283
|
+
return 0;
|
|
1284
|
+
};
|
|
1250
1285
|
if (isAudioAction(action) && isString(props[0])) {
|
|
1251
|
-
|
|
1286
|
+
if (getVolumeFor(action) > 0) {
|
|
1287
|
+
handle(handleAudioAsset(props[0]));
|
|
1288
|
+
}
|
|
1289
|
+
return;
|
|
1290
|
+
}
|
|
1291
|
+
if (action === "voice" && typeof props[0] === "object") {
|
|
1292
|
+
if (getVolumeFor("voice") == 0) {
|
|
1293
|
+
return;
|
|
1294
|
+
}
|
|
1295
|
+
for (const [language, value] of Object.entries(props[0])) {
|
|
1296
|
+
if (mode === "blocking") {
|
|
1297
|
+
value && handle(handleAudioAsset(value));
|
|
1298
|
+
} else if (language === lang) {
|
|
1299
|
+
value && handle(handleAudioAsset(value));
|
|
1300
|
+
}
|
|
1301
|
+
}
|
|
1252
1302
|
return;
|
|
1253
1303
|
}
|
|
1254
1304
|
if (action === "showCharacter" && isString(props[0]) && isString(props[1])) {
|
|
@@ -1340,7 +1390,15 @@ var Novely = (() => {
|
|
|
1340
1390
|
}
|
|
1341
1391
|
return (...props) => {
|
|
1342
1392
|
if (preloadAssets === "blocking") {
|
|
1343
|
-
huntAssets({
|
|
1393
|
+
huntAssets({
|
|
1394
|
+
action: action2,
|
|
1395
|
+
props,
|
|
1396
|
+
mode: preloadAssets,
|
|
1397
|
+
characters,
|
|
1398
|
+
lang: getLanguageFromStore(storageData),
|
|
1399
|
+
volume: getVolumeFromStore(storageData),
|
|
1400
|
+
handle: enqueueAssetForPreloading
|
|
1401
|
+
});
|
|
1344
1402
|
}
|
|
1345
1403
|
return [action2, ...props];
|
|
1346
1404
|
};
|
|
@@ -1603,7 +1661,15 @@ var Novely = (() => {
|
|
|
1603
1661
|
if (isAudioAction(action2)) return;
|
|
1604
1662
|
if (action2 === "vibrate") return;
|
|
1605
1663
|
if (action2 === "end") return;
|
|
1606
|
-
huntAssets({
|
|
1664
|
+
huntAssets({
|
|
1665
|
+
action: action2,
|
|
1666
|
+
props,
|
|
1667
|
+
mode: preloadAssets,
|
|
1668
|
+
characters,
|
|
1669
|
+
lang: getLanguageFromStore(storageData),
|
|
1670
|
+
volume: getVolumeFromStore(storageData),
|
|
1671
|
+
handle: assets.push.bind(assets)
|
|
1672
|
+
});
|
|
1607
1673
|
return match(action2, props, {
|
|
1608
1674
|
ctx,
|
|
1609
1675
|
data: data2
|
|
@@ -1644,7 +1710,10 @@ var Novely = (() => {
|
|
|
1644
1710
|
getCustomActionHolder(ctx, fn).cleanup();
|
|
1645
1711
|
};
|
|
1646
1712
|
const getResourseTypeForRenderer = (url) => {
|
|
1647
|
-
return getResourseType(
|
|
1713
|
+
return getResourseType({
|
|
1714
|
+
url,
|
|
1715
|
+
request
|
|
1716
|
+
});
|
|
1648
1717
|
};
|
|
1649
1718
|
const getCharacterColor = (c) => {
|
|
1650
1719
|
return c in characters ? characters[c].color : "#000000";
|
|
@@ -1713,7 +1782,15 @@ var Novely = (() => {
|
|
|
1713
1782
|
refer
|
|
1714
1783
|
});
|
|
1715
1784
|
for (const [action3, ...props2] of collection) {
|
|
1716
|
-
huntAssets({
|
|
1785
|
+
huntAssets({
|
|
1786
|
+
action: action3,
|
|
1787
|
+
props: props2,
|
|
1788
|
+
mode: preloadAssets,
|
|
1789
|
+
characters,
|
|
1790
|
+
lang: getLanguageFromStore(storageData),
|
|
1791
|
+
volume: getVolumeFromStore(storageData),
|
|
1792
|
+
handle: enqueueAssetForPreloading
|
|
1793
|
+
});
|
|
1717
1794
|
}
|
|
1718
1795
|
handleAssetsPreloading({
|
|
1719
1796
|
...renderer.misc,
|
|
@@ -1832,7 +1909,7 @@ var Novely = (() => {
|
|
|
1832
1909
|
function({ ctx, push }, [fn]) {
|
|
1833
1910
|
const { restoring, goingBack, preview: preview2 } = ctx.meta;
|
|
1834
1911
|
const result = fn({
|
|
1835
|
-
lang: storageData
|
|
1912
|
+
lang: getLanguageFromStore(storageData),
|
|
1836
1913
|
goingBack,
|
|
1837
1914
|
restoring,
|
|
1838
1915
|
preview: preview2,
|
|
@@ -1851,7 +1928,7 @@ var Novely = (() => {
|
|
|
1851
1928
|
}
|
|
1852
1929
|
const transformedChoices = choices.map(([content, action2, visible]) => {
|
|
1853
1930
|
const shown = !visible || visible({
|
|
1854
|
-
lang: storageData
|
|
1931
|
+
lang: getLanguageFromStore(storageData),
|
|
1855
1932
|
state: getStateAtCtx(ctx)
|
|
1856
1933
|
});
|
|
1857
1934
|
if (DEV && action2.length === 0 && !shown) {
|
|
@@ -1938,7 +2015,7 @@ var Novely = (() => {
|
|
|
1938
2015
|
ctx.clearBlockingActions(void 0);
|
|
1939
2016
|
}
|
|
1940
2017
|
const state = getStateFunction(ctx);
|
|
1941
|
-
const lang = storageData
|
|
2018
|
+
const lang = getLanguageFromStore(storageData);
|
|
1942
2019
|
const result = handleCustomAction(ctx, fn, {
|
|
1943
2020
|
...ctx.custom(fn),
|
|
1944
2021
|
state,
|