@pkhex-everywhere/engine 0.7.1 → 0.8.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/CHANGELOG.md +22 -0
- package/_framework/{PKHeX.Core.fyumyoaqm5.wasm → PKHeX.Core.6as4mqwu45.wasm} +0 -0
- package/_framework/{PKHeX.Core.AutoMod.qmose8aztj.wasm → PKHeX.Core.AutoMod.x2uzxduw6t.wasm} +0 -0
- package/_framework/{PKHeX.Everywhere.Engine.Host.s482syx1hr.wasm → PKHeX.Everywhere.Engine.Host.xv25q7a107.wasm} +0 -0
- package/_framework/{PKHeX.Everywhere.Engine.PlugIns.9m33qomom7.wasm → PKHeX.Everywhere.Engine.PlugIns.zgak1u0lbr.wasm} +0 -0
- package/_framework/PKHeX.Everywhere.Engine.z5zg1tyuzh.wasm +0 -0
- package/_framework/{PKHeX.Everywhere.PlugIns.j1arn4to7e.wasm → PKHeX.Everywhere.PlugIns.wywqtjlojy.wasm} +0 -0
- package/_framework/PKHeX.Everywhere.RomHacks.xwhkv6stl7.wasm +0 -0
- package/_framework/PKHeX.Facade.60xdpoycab.wasm +0 -0
- package/_framework/{System.Collections.Immutable.qbt6hi6ua9.wasm → System.Collections.Immutable.98cu5knfnu.wasm} +0 -0
- package/_framework/System.Private.CoreLib.phe29nymlz.wasm +0 -0
- package/_framework/{System.Runtime.e142xy312z.wasm → System.Runtime.4q9htgq8pa.wasm} +0 -0
- package/_framework/dotnet.js +25 -25
- package/dist/generated/client.d.ts +11 -3
- package/dist/generated/types.d.ts +48 -5
- package/dist/index.js +1 -1
- package/dist/internal.js +1 -1
- package/dist/{topics-DLMAwtwP.js → topics-BD2tUWCQ.js} +13 -1
- package/package.json +1 -1
- package/_framework/PKHeX.Everywhere.Engine.v0w7kfa5sp.wasm +0 -0
- package/_framework/PKHeX.Everywhere.RomHacks.9xl4lkn6yi.wasm +0 -0
- package/_framework/PKHeX.Facade.wlicpcd4da.wasm +0 -0
- package/_framework/System.Private.CoreLib.a6aaw92q9z.wasm +0 -0
package/CHANGELOG.md
CHANGED
|
@@ -1,5 +1,27 @@
|
|
|
1
1
|
# @pkhex-everywhere/engine
|
|
2
2
|
|
|
3
|
+
## 0.8.0
|
|
4
|
+
|
|
5
|
+
### Minor Changes
|
|
6
|
+
|
|
7
|
+
- e6f46d6: `TrainerCard.gender` is now `null` for Red, Green, Blue, Yellow, Gold, Silver and Pokémon Stadium, which have no trainer gender, and `trainer.setGender` fails with `not-in-game` for them. `game.loadBlank` no longer throws for Gold, Silver and Crystal.
|
|
8
|
+
|
|
9
|
+
### Patch Changes
|
|
10
|
+
|
|
11
|
+
- c5cd974: New `box.list()` returns every box in the save, empty ones included, with its number, name and slot count. `name` is null when the save doesn't store box names, such as Generation 1 saves, Let's Go and ROM hacks.
|
|
12
|
+
- d03bb1c: `game.export()` now writes back only the Pokémon that changed. Exporting a Yellow, FireRed or Let's Go save with no edits used to rewrite stored stats and checksums of Pokémon nobody touched.
|
|
13
|
+
- 5bfab1b: Gen 3 and 4 saves no longer lock `nature`. `pokemon.update({ nature })` gives the Pokémon a new PID with that nature, keeping its gender, ability and shininess, and a Gen 3 Unown's letter.
|
|
14
|
+
- d8b8e64: Emerald Imperium no longer locks `ability`. A Pokémon's ability choices are its species' abilities, the only ones the save can store.
|
|
15
|
+
- 74c1996: Radical Red saves read Hakamo-o, which showed as Dhelmise. Red- and Blue-Striped Basculin no longer read as each other, and Ice and Shadow Rider Calyrex and Terastal Terapagos read as their form instead of the base form.
|
|
16
|
+
|
|
17
|
+
## 0.7.2
|
|
18
|
+
|
|
19
|
+
### Patch Changes
|
|
20
|
+
|
|
21
|
+
- f74dcdd: New `game.progress()` returns the save's play time, gym badges and Pokédex seen and caught counts. Each is null when the engine can't read it for the game. ROM hack saves give only play time.
|
|
22
|
+
- 40f058d: `events.get()` now works for Generation 1 saves. PKHeX has no labels for them, so `flags` and `work` are empty, but `events.flag()`, `events.setFlag()` and `events.setWork()` reach every index up to `flagCount` and `workCount`. `hasEvents` is true for these saves.
|
|
23
|
+
- 73a0afe: New `trainer.badges()` lists the gym badges by name with whether each is earned, and `trainer.setBadges(earned)` sets them. Both work on Generation 1, 2 and 3 saves, but not ROM hacks. `useTrainer()` gains `setBadges`.
|
|
24
|
+
|
|
3
25
|
## 0.7.1
|
|
4
26
|
|
|
5
27
|
### Patch Changes
|
|
Binary file
|
package/_framework/{PKHeX.Core.AutoMod.qmose8aztj.wasm → PKHeX.Core.AutoMod.x2uzxduw6t.wasm}
RENAMED
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
package/_framework/dotnet.js
CHANGED
|
@@ -4,7 +4,7 @@
|
|
|
4
4
|
var e=!1;const t=async()=>WebAssembly.validate(new Uint8Array([0,97,115,109,1,0,0,0,1,4,1,96,0,0,3,2,1,0,10,8,1,6,0,6,64,25,11,11])),o=async()=>WebAssembly.validate(new Uint8Array([0,97,115,109,1,0,0,0,1,5,1,96,0,1,123,3,2,1,0,10,15,1,13,0,65,1,253,15,65,2,253,15,253,128,2,11])),n=async()=>WebAssembly.validate(new Uint8Array([0,97,115,109,1,0,0,0,1,5,1,96,0,1,123,3,2,1,0,10,10,1,8,0,65,0,253,15,253,98,11])),r=Symbol.for("wasm promise_control");function i(e,t){let o=null;const n=new Promise((function(n,r){o={isDone:!1,promise:null,resolve:t=>{o.isDone||(o.isDone=!0,n(t),e&&e())},reject:e=>{o.isDone||(o.isDone=!0,r(e),t&&t())}}}));o.promise=n;const i=n;return i[r]=o,{promise:i,promise_control:o}}function s(e){return e[r]}function a(e){e&&function(e){return void 0!==e[r]}(e)||Be(!1,"Promise is not controllable")}const l="__mono_message__",c=["debug","log","trace","warn","info","error"],d="MONO_WASM: ";let u,f,m,g,p,h;function w(e){g=e}function b(e){if(Pe.diagnosticTracing){const t="function"==typeof e?e():e;console.debug(d+t)}}function y(e,...t){console.info(d+e,...t)}function v(e,...t){console.info(e,...t)}function E(e,...t){console.warn(d+e,...t)}function _(e,...t){if(t&&t.length>0&&t[0]&&"object"==typeof t[0]){if(t[0].silent)return;if(t[0].toString)return void console.error(d+e,t[0].toString())}console.error(d+e,...t)}function x(e,t,o){return function(...n){try{let r=n[0];if(void 0===r)r="undefined";else if(null===r)r="null";else if("function"==typeof r)r=r.toString();else if("string"!=typeof r)try{r=JSON.stringify(r)}catch(e){r=r.toString()}t(o?JSON.stringify({method:e,payload:r,arguments:n.slice(1)}):[e+r,...n.slice(1)])}catch(e){m.error(`proxyConsole failed: ${e}`)}}}function j(e,t,o){f=t,g=e,m={...t};const n=`${o}/console`.replace("https://","wss://").replace("http://","ws://");u=new WebSocket(n),u.addEventListener("error",A),u.addEventListener("close",S),function(){for(const e of c)f[e]=x(`console.${e}`,T,!0)}()}function R(e){let t=30;const o=()=>{u?0==u.bufferedAmount||0==t?(e&&v(e),function(){for(const e of c)f[e]=x(`console.${e}`,m.log,!1)}(),u.removeEventListener("error",A),u.removeEventListener("close",S),u.close(1e3,e),u=void 0):(t--,globalThis.setTimeout(o,100)):e&&m&&m.log(e)};o()}function T(e){u&&u.readyState===WebSocket.OPEN?u.send(e):m.log(e)}function A(e){m.error(`[${g}] proxy console websocket error: ${e}`,e)}function S(e){m.debug(`[${g}] proxy console websocket closed: ${e}`,e)}function D(){Pe.preferredIcuAsset=O(Pe.config);let e="invariant"==Pe.config.globalizationMode;if(!e)if(Pe.preferredIcuAsset)Pe.diagnosticTracing&&b("ICU data archive(s) available, disabling invariant mode");else{if("custom"===Pe.config.globalizationMode||"all"===Pe.config.globalizationMode||"sharded"===Pe.config.globalizationMode){const e="invariant globalization mode is inactive and no ICU data archives are available";throw _(`ERROR: ${e}`),new Error(e)}Pe.diagnosticTracing&&b("ICU data archive(s) not available, using invariant globalization mode"),e=!0,Pe.preferredIcuAsset=null}const t="DOTNET_SYSTEM_GLOBALIZATION_INVARIANT",o=Pe.config.environmentVariables;if(void 0===o[t]&&e&&(o[t]="1"),void 0===o.TZ)try{const e=Intl.DateTimeFormat().resolvedOptions().timeZone||null;e&&(o.TZ=e)}catch(e){y("failed to detect timezone, will fallback to UTC")}}function O(e){var t;if((null===(t=e.resources)||void 0===t?void 0:t.icu)&&"invariant"!=e.globalizationMode){const t=e.applicationCulture||(ke?globalThis.navigator&&globalThis.navigator.languages&&globalThis.navigator.languages[0]:Intl.DateTimeFormat().resolvedOptions().locale),o=e.resources.icu;let n=null;if("custom"===e.globalizationMode){if(o.length>=1)return o[0].name}else t&&"all"!==e.globalizationMode?"sharded"===e.globalizationMode&&(n=function(e){const t=e.split("-")[0];return"en"===t||["fr","fr-FR","it","it-IT","de","de-DE","es","es-ES"].includes(e)?"icudt_EFIGS.dat":["zh","ko","ja"].includes(t)?"icudt_CJK.dat":"icudt_no_CJK.dat"}(t)):n="icudt.dat";if(n)for(let e=0;e<o.length;e++){const t=o[e];if(t.virtualPath===n)return t.name}}return e.globalizationMode="invariant",null}(new Date).valueOf();const C=class{constructor(e){this.url=e}toString(){return this.url}};async function k(e,t){try{const o="function"==typeof globalThis.fetch;if(Se){const n=e.startsWith("file://");if(!n&&o)return globalThis.fetch(e,t||{credentials:"same-origin"});p||(h=Ne.require("url"),p=Ne.require("fs")),n&&(e=h.fileURLToPath(e));const r=await p.promises.readFile(e);return{ok:!0,headers:{length:0,get:()=>null},url:e,arrayBuffer:()=>r,json:()=>JSON.parse(r),text:()=>{throw new Error("NotImplementedException")}}}if(o)return globalThis.fetch(e,t||{credentials:"same-origin"});if("function"==typeof read)return{ok:!0,url:e,headers:{length:0,get:()=>null},arrayBuffer:()=>new Uint8Array(read(e,"binary")),json:()=>JSON.parse(read(e,"utf8")),text:()=>read(e,"utf8")}}catch(t){return{ok:!1,url:e,status:500,headers:{length:0,get:()=>null},statusText:"ERR28: "+t,arrayBuffer:()=>{throw t},json:()=>{throw t},text:()=>{throw t}}}throw new Error("No fetch implementation available")}function I(e){return"string"!=typeof e&&Be(!1,"url must be a string"),!M(e)&&0!==e.indexOf("./")&&0!==e.indexOf("../")&&globalThis.URL&&globalThis.document&&globalThis.document.baseURI&&(e=new URL(e,globalThis.document.baseURI).toString()),e}const U=/^[a-zA-Z][a-zA-Z\d+\-.]*?:\/\//,P=/[a-zA-Z]:[\\/]/;function M(e){return Se||Ie?e.startsWith("/")||e.startsWith("\\")||-1!==e.indexOf("///")||P.test(e):U.test(e)}let L,N=0;const $=[],z=[],W=new Map,F={"js-module-threads":!0,"js-module-runtime":!0,"js-module-dotnet":!0,"js-module-native":!0,"js-module-diagnostics":!0},B={...F,"js-module-library-initializer":!0},V={...F,dotnetwasm:!0,heap:!0,manifest:!0},q={...B,manifest:!0},H={...B,dotnetwasm:!0},J={dotnetwasm:!0,symbols:!0},Z={...B,dotnetwasm:!0,symbols:!0},Q={symbols:!0};function G(e){return!("icu"==e.behavior&&e.name!=Pe.preferredIcuAsset)}function K(e,t,o){null!=t||(t=[]),Be(1==t.length,`Expect to have one ${o} asset in resources`);const n=t[0];return n.behavior=o,X(n),e.push(n),n}function X(e){V[e.behavior]&&W.set(e.behavior,e)}function Y(e){Be(V[e],`Unknown single asset behavior ${e}`);const t=W.get(e);if(t&&!t.resolvedUrl)if(t.resolvedUrl=Pe.locateFile(t.name),F[t.behavior]){const e=ge(t);e?("string"!=typeof e&&Be(!1,"loadBootResource response for 'dotnetjs' type should be a URL string"),t.resolvedUrl=e):t.resolvedUrl=ce(t.resolvedUrl,t.behavior)}else if("dotnetwasm"!==t.behavior)throw new Error(`Unknown single asset behavior ${e}`);return t}function ee(e){const t=Y(e);return Be(t,`Single asset for ${e} not found`),t}let te=!1;async function oe(){if(!te){te=!0,Pe.diagnosticTracing&&b("mono_download_assets");try{const e=[],t=[],o=(e,t)=>{!Z[e.behavior]&&G(e)&&Pe.expected_instantiated_assets_count++,!H[e.behavior]&&G(e)&&(Pe.expected_downloaded_assets_count++,t.push(se(e)))};for(const t of $)o(t,e);for(const e of z)o(e,t);Pe.allDownloadsQueued.promise_control.resolve(),Promise.all([...e,...t]).then((()=>{Pe.allDownloadsFinished.promise_control.resolve()})).catch((e=>{throw Pe.err("Error in mono_download_assets: "+e),Xe(1,e),e})),await Pe.runtimeModuleLoaded.promise;const n=async e=>{const t=await e;if(t.buffer){if(!Z[t.behavior]){t.buffer&&"object"==typeof t.buffer||Be(!1,"asset buffer must be array-like or buffer-like or promise of these"),"string"!=typeof t.resolvedUrl&&Be(!1,"resolvedUrl must be string");const e=t.resolvedUrl,o=await t.buffer,n=new Uint8Array(o);pe(t),await Ue.beforeOnRuntimeInitialized.promise,Ue.instantiate_asset(t,e,n)}}else J[t.behavior]?("symbols"===t.behavior&&(await Ue.instantiate_symbols_asset(t),pe(t)),J[t.behavior]&&++Pe.actual_downloaded_assets_count):(t.isOptional||Be(!1,"Expected asset to have the downloaded buffer"),!H[t.behavior]&&G(t)&&Pe.expected_downloaded_assets_count--,!Z[t.behavior]&&G(t)&&Pe.expected_instantiated_assets_count--)},r=[],i=[];for(const t of e)r.push(n(t));for(const e of t)i.push(n(e));Promise.all(r).then((()=>{Ce||Ue.coreAssetsInMemory.promise_control.resolve()})).catch((e=>{throw Pe.err("Error in mono_download_assets: "+e),Xe(1,e),e})),Promise.all(i).then((async()=>{Ce||(await Ue.coreAssetsInMemory.promise,Ue.allAssetsInMemory.promise_control.resolve())})).catch((e=>{throw Pe.err("Error in mono_download_assets: "+e),Xe(1,e),e}))}catch(e){throw Pe.err("Error in mono_download_assets: "+e),e}}}let ne=!1;function re(){if(ne)return;ne=!0;const e=Pe.config,t=[];if(e.assets)for(const t of e.assets)"object"!=typeof t&&Be(!1,`asset must be object, it was ${typeof t} : ${t}`),"string"!=typeof t.behavior&&Be(!1,"asset behavior must be known string"),"string"!=typeof t.name&&Be(!1,"asset name must be string"),t.resolvedUrl&&"string"!=typeof t.resolvedUrl&&Be(!1,"asset resolvedUrl could be string"),t.hash&&"string"!=typeof t.hash&&Be(!1,"asset resolvedUrl could be string"),t.pendingDownload&&"object"!=typeof t.pendingDownload&&Be(!1,"asset pendingDownload could be object"),t.isCore?$.push(t):z.push(t),X(t);else if(e.resources){const o=e.resources;o.wasmNative||Be(!1,"resources.wasmNative must be defined"),o.jsModuleNative||Be(!1,"resources.jsModuleNative must be defined"),o.jsModuleRuntime||Be(!1,"resources.jsModuleRuntime must be defined"),K(z,o.wasmNative,"dotnetwasm"),K(t,o.jsModuleNative,"js-module-native"),K(t,o.jsModuleRuntime,"js-module-runtime"),o.jsModuleDiagnostics&&K(t,o.jsModuleDiagnostics,"js-module-diagnostics");const n=(e,t,o)=>{const n=e;n.behavior=t,o?(n.isCore=!0,$.push(n)):z.push(n)};if(o.coreAssembly)for(let e=0;e<o.coreAssembly.length;e++)n(o.coreAssembly[e],"assembly",!0);if(o.assembly)for(let e=0;e<o.assembly.length;e++)n(o.assembly[e],"assembly",!o.coreAssembly);if(0!=e.debugLevel&&Pe.isDebuggingSupported()){if(o.corePdb)for(let e=0;e<o.corePdb.length;e++)n(o.corePdb[e],"pdb",!0);if(o.pdb)for(let e=0;e<o.pdb.length;e++)n(o.pdb[e],"pdb",!o.corePdb)}if(e.loadAllSatelliteResources&&o.satelliteResources)for(const e in o.satelliteResources)for(let t=0;t<o.satelliteResources[e].length;t++){const r=o.satelliteResources[e][t];r.culture=e,n(r,"resource",!o.coreAssembly)}if(o.coreVfs)for(let e=0;e<o.coreVfs.length;e++)n(o.coreVfs[e],"vfs",!0);if(o.vfs)for(let e=0;e<o.vfs.length;e++)n(o.vfs[e],"vfs",!o.coreVfs);const r=O(e);if(r&&o.icu)for(let e=0;e<o.icu.length;e++){const t=o.icu[e];t.name===r&&n(t,"icu",!1)}if(o.wasmSymbols)for(let e=0;e<o.wasmSymbols.length;e++)n(o.wasmSymbols[e],"symbols",!1)}if(e.appsettings)for(let t=0;t<e.appsettings.length;t++){const o=e.appsettings[t],n=he(o);"appsettings.json"!==n&&n!==`appsettings.${e.applicationEnvironment}.json`||z.push({name:o,behavior:"vfs",cache:"no-cache",useCredentials:!0})}e.assets=[...$,...z,...t]}async function ie(e){const t=await se(e);return await t.pendingDownloadInternal.response,t.buffer}async function se(e){try{return await ae(e)}catch(t){if(!Pe.enableDownloadRetry)throw t;if(Ie||Se)throw t;if(e.pendingDownload&&e.pendingDownloadInternal==e.pendingDownload)throw t;if(e.resolvedUrl&&-1!=e.resolvedUrl.indexOf("file://"))throw t;if(t&&404==t.status)throw t;e.pendingDownloadInternal=void 0,await Pe.allDownloadsQueued.promise;try{return Pe.diagnosticTracing&&b(`Retrying download '${e.name}'`),await ae(e)}catch(t){return e.pendingDownloadInternal=void 0,await new Promise((e=>globalThis.setTimeout(e,100))),Pe.diagnosticTracing&&b(`Retrying download (2) '${e.name}' after delay`),await ae(e)}}}async function ae(e){for(;L;)await L.promise;try{++N,N==Pe.maxParallelDownloads&&(Pe.diagnosticTracing&&b("Throttling further parallel downloads"),L=i());const t=await async function(e){if(e.pendingDownload&&(e.pendingDownloadInternal=e.pendingDownload),e.pendingDownloadInternal&&e.pendingDownloadInternal.response)return e.pendingDownloadInternal.response;if(e.buffer){const t=await e.buffer;return e.resolvedUrl||(e.resolvedUrl="undefined://"+e.name),e.pendingDownloadInternal={url:e.resolvedUrl,name:e.name,response:Promise.resolve({ok:!0,arrayBuffer:()=>t,json:()=>JSON.parse(new TextDecoder("utf-8").decode(t)),text:()=>{throw new Error("NotImplementedException")},headers:{get:()=>{}}})},e.pendingDownloadInternal.response}const t=e.loadRemote&&Pe.config.remoteSources?Pe.config.remoteSources:[""];let o;for(let n of t){n=n.trim(),"./"===n&&(n="");const t=le(e,n);e.name===t?Pe.diagnosticTracing&&b(`Attempting to download '${t}'`):Pe.diagnosticTracing&&b(`Attempting to download '${t}' for ${e.name}`);try{e.resolvedUrl=t;const n=fe(e);if(e.pendingDownloadInternal=n,o=await n.response,!o||!o.ok)continue;return o}catch(e){o||(o={ok:!1,url:t,status:0,statusText:""+e});continue}}const n=e.isOptional||e.name.match(/\.pdb$/)&&Pe.config.ignorePdbLoadErrors;if(o||Be(!1,`Response undefined ${e.name}`),!n){const t=new Error(`download '${o.url}' for ${e.name} failed ${o.status} ${o.statusText}`);throw t.status=o.status,t}y(`optional download '${o.url}' for ${e.name} failed ${o.status} ${o.statusText}`)}(e);return t?(J[e.behavior]||(e.buffer=await t.arrayBuffer(),++Pe.actual_downloaded_assets_count),e):e}finally{if(--N,L&&N==Pe.maxParallelDownloads-1){Pe.diagnosticTracing&&b("Resuming more parallel downloads");const e=L;L=void 0,e.promise_control.resolve()}}}function le(e,t){let o;return null==t&&Be(!1,`sourcePrefix must be provided for ${e.name}`),e.resolvedUrl?o=e.resolvedUrl:(o=""===t?"assembly"===e.behavior||"pdb"===e.behavior?e.name:"resource"===e.behavior&&e.culture&&""!==e.culture?`${e.culture}/${e.name}`:e.name:t+e.name,o=ce(Pe.locateFile(o),e.behavior)),o&&"string"==typeof o||Be(!1,"attemptUrl need to be path or url string"),o}function ce(e,t){return Pe.modulesUniqueQuery&&q[t]&&(e+=Pe.modulesUniqueQuery),e}let de=0;const ue=new Set;function fe(e){try{e.resolvedUrl||Be(!1,"Request's resolvedUrl must be set");const t=function(e){let t=e.resolvedUrl;if(Pe.loadBootResource){const o=ge(e);if(o instanceof Promise)return o;"string"==typeof o&&(t=o)}const o={};return e.cache?o.cache=e.cache:Pe.config.disableNoCacheFetch||(o.cache="no-cache"),e.useCredentials?o.credentials="include":!Pe.config.disableIntegrityCheck&&e.hash&&(o.integrity=e.hash),Pe.fetch_like(t,o)}(e),o={name:e.name,url:e.resolvedUrl,response:t};return ue.add(e.name),o.response.then((()=>{"assembly"==e.behavior&&Pe.loadedAssemblies.push(e.name),de++,Pe.onDownloadResourceProgress&&Pe.onDownloadResourceProgress(de,ue.size)})),o}catch(t){const o={ok:!1,url:e.resolvedUrl,status:500,statusText:"ERR29: "+t,arrayBuffer:()=>{throw t},json:()=>{throw t}};return{name:e.name,url:e.resolvedUrl,response:Promise.resolve(o)}}}const me={resource:"assembly",assembly:"assembly",pdb:"pdb",icu:"globalization",vfs:"configuration",manifest:"manifest",dotnetwasm:"dotnetwasm","js-module-dotnet":"dotnetjs","js-module-native":"dotnetjs","js-module-runtime":"dotnetjs","js-module-threads":"dotnetjs"};function ge(e){var t;if(Pe.loadBootResource){const o=null!==(t=e.hash)&&void 0!==t?t:"",n=e.resolvedUrl,r=me[e.behavior];if(r){const t=Pe.loadBootResource(r,e.name,n,o,e.behavior);return"string"==typeof t?I(t):t}}}function pe(e){e.pendingDownloadInternal=null,e.pendingDownload=null,e.buffer=null,e.moduleExports=null}function he(e){let t=e.lastIndexOf("/");return t>=0&&t++,e.substring(t)}async function we(e){e&&await Promise.all((null!=e?e:[]).map((e=>async function(e){try{const t=e.name;if(!e.moduleExports){const o=ce(Pe.locateFile(t),"js-module-library-initializer");Pe.diagnosticTracing&&b(`Attempting to import '${o}' for ${e}`),e.moduleExports=await import(/*! webpackIgnore: true */o)}Pe.libraryInitializers.push({scriptName:t,exports:e.moduleExports})}catch(t){E(`Failed to import library initializer '${e}': ${t}`)}}(e))))}async function be(e,t){if(!Pe.libraryInitializers)return;const o=[];for(let n=0;n<Pe.libraryInitializers.length;n++){const r=Pe.libraryInitializers[n];r.exports[e]&&o.push(ye(r.scriptName,e,(()=>r.exports[e](...t))))}await Promise.all(o)}async function ye(e,t,o){try{await o()}catch(o){throw E(`Failed to invoke '${t}' on library initializer '${e}': ${o}`),Xe(1,o),o}}function ve(e,t){if(e===t)return e;const o={...t};return void 0!==o.assets&&o.assets!==e.assets&&(o.assets=[...e.assets||[],...o.assets||[]]),void 0!==o.resources&&(o.resources=_e(e.resources||{assembly:[],jsModuleNative:[],jsModuleRuntime:[],wasmNative:[]},o.resources)),void 0!==o.environmentVariables&&(o.environmentVariables={...e.environmentVariables||{},...o.environmentVariables||{}}),void 0!==o.runtimeOptions&&o.runtimeOptions!==e.runtimeOptions&&(o.runtimeOptions=[...e.runtimeOptions||[],...o.runtimeOptions||[]]),Object.assign(e,o)}function Ee(e,t){if(e===t)return e;const o={...t};return o.config&&(e.config||(e.config={}),o.config=ve(e.config,o.config)),Object.assign(e,o)}function _e(e,t){if(e===t)return e;const o={...t};return void 0!==o.coreAssembly&&(o.coreAssembly=[...e.coreAssembly||[],...o.coreAssembly||[]]),void 0!==o.assembly&&(o.assembly=[...e.assembly||[],...o.assembly||[]]),void 0!==o.lazyAssembly&&(o.lazyAssembly=[...e.lazyAssembly||[],...o.lazyAssembly||[]]),void 0!==o.corePdb&&(o.corePdb=[...e.corePdb||[],...o.corePdb||[]]),void 0!==o.pdb&&(o.pdb=[...e.pdb||[],...o.pdb||[]]),void 0!==o.jsModuleWorker&&(o.jsModuleWorker=[...e.jsModuleWorker||[],...o.jsModuleWorker||[]]),void 0!==o.jsModuleNative&&(o.jsModuleNative=[...e.jsModuleNative||[],...o.jsModuleNative||[]]),void 0!==o.jsModuleDiagnostics&&(o.jsModuleDiagnostics=[...e.jsModuleDiagnostics||[],...o.jsModuleDiagnostics||[]]),void 0!==o.jsModuleRuntime&&(o.jsModuleRuntime=[...e.jsModuleRuntime||[],...o.jsModuleRuntime||[]]),void 0!==o.wasmSymbols&&(o.wasmSymbols=[...e.wasmSymbols||[],...o.wasmSymbols||[]]),void 0!==o.wasmNative&&(o.wasmNative=[...e.wasmNative||[],...o.wasmNative||[]]),void 0!==o.icu&&(o.icu=[...e.icu||[],...o.icu||[]]),void 0!==o.satelliteResources&&(o.satelliteResources=function(e,t){if(e===t)return e;for(const o in t)e[o]=[...e[o]||[],...t[o]||[]];return e}(e.satelliteResources||{},o.satelliteResources||{})),void 0!==o.modulesAfterConfigLoaded&&(o.modulesAfterConfigLoaded=[...e.modulesAfterConfigLoaded||[],...o.modulesAfterConfigLoaded||[]]),void 0!==o.modulesAfterRuntimeReady&&(o.modulesAfterRuntimeReady=[...e.modulesAfterRuntimeReady||[],...o.modulesAfterRuntimeReady||[]]),void 0!==o.extensions&&(o.extensions={...e.extensions||{},...o.extensions||{}}),void 0!==o.vfs&&(o.vfs=[...e.vfs||[],...o.vfs||[]]),Object.assign(e,o)}function xe(){const e=Pe.config;if(e.environmentVariables=e.environmentVariables||{},e.runtimeOptions=e.runtimeOptions||[],e.resources=e.resources||{assembly:[],jsModuleNative:[],jsModuleWorker:[],jsModuleRuntime:[],wasmNative:[],vfs:[],satelliteResources:{}},e.assets){Pe.diagnosticTracing&&b("config.assets is deprecated, use config.resources instead");for(const t of e.assets){const o={};switch(t.behavior){case"assembly":o.assembly=[t];break;case"pdb":o.pdb=[t];break;case"resource":o.satelliteResources={},o.satelliteResources[t.culture]=[t];break;case"icu":o.icu=[t];break;case"symbols":o.wasmSymbols=[t];break;case"vfs":o.vfs=[t];break;case"dotnetwasm":o.wasmNative=[t];break;case"js-module-threads":o.jsModuleWorker=[t];break;case"js-module-runtime":o.jsModuleRuntime=[t];break;case"js-module-native":o.jsModuleNative=[t];break;case"js-module-diagnostics":o.jsModuleDiagnostics=[t];break;case"js-module-dotnet":break;default:throw new Error(`Unexpected behavior ${t.behavior} of asset ${t.name}`)}_e(e.resources,o)}}e.debugLevel,e.applicationEnvironment||(e.applicationEnvironment="Production"),e.applicationCulture&&(e.environmentVariables.LANG=`${e.applicationCulture}.UTF-8`),Ue.diagnosticTracing=Pe.diagnosticTracing=!!e.diagnosticTracing,Ue.waitForDebugger=e.waitForDebugger,Pe.maxParallelDownloads=e.maxParallelDownloads||Pe.maxParallelDownloads,Pe.enableDownloadRetry=void 0!==e.enableDownloadRetry?e.enableDownloadRetry:Pe.enableDownloadRetry}let je=!1;async function Re(e){var t;if(je)return void await Pe.afterConfigLoaded.promise;let o;try{if(e.configSrc||Pe.config&&0!==Object.keys(Pe.config).length&&(Pe.config.assets||Pe.config.resources)||(e.configSrc="dotnet.boot.js"),o=e.configSrc,je=!0,o&&(Pe.diagnosticTracing&&b("mono_wasm_load_config"),await async function(e){const t=e.configSrc,o=Pe.locateFile(t);let n=null;void 0!==Pe.loadBootResource&&(n=Pe.loadBootResource("manifest",t,o,"","manifest"));let r,i=null;if(n)if("string"==typeof n)n.includes(".json")?(i=await s(I(n)),r=await Ae(i)):r=(await import(I(n))).config;else{const e=await n;"function"==typeof e.json?(i=e,r=await Ae(i)):r=e.config}else o.includes(".json")?(i=await s(ce(o,"manifest")),r=await Ae(i)):r=(await import(ce(o,"manifest"))).config;function s(e){return Pe.fetch_like(e,{method:"GET",credentials:"include",cache:"no-cache"})}Pe.config.applicationEnvironment&&(r.applicationEnvironment=Pe.config.applicationEnvironment),ve(Pe.config,r)}(e)),xe(),await we(null===(t=Pe.config.resources)||void 0===t?void 0:t.modulesAfterConfigLoaded),await be("onRuntimeConfigLoaded",[Pe.config]),e.onConfigLoaded)try{await e.onConfigLoaded(Pe.config,Le),xe()}catch(e){throw _("onConfigLoaded() failed",e),e}xe(),Pe.afterConfigLoaded.promise_control.resolve(Pe.config)}catch(t){const n=`Failed to load config file ${o} ${t} ${null==t?void 0:t.stack}`;throw Pe.config=e.config=Object.assign(Pe.config,{message:n,error:t,isError:!0}),Xe(1,new Error(n)),t}}function Te(){return!!globalThis.navigator&&(Pe.isChromium||Pe.isFirefox)}async function Ae(e){const t=Pe.config,o=await e.json();t.applicationEnvironment||o.applicationEnvironment||(o.applicationEnvironment=e.headers.get("Blazor-Environment")||e.headers.get("DotNet-Environment")||void 0),o.environmentVariables||(o.environmentVariables={});const n=e.headers.get("DOTNET-MODIFIABLE-ASSEMBLIES");n&&(o.environmentVariables.DOTNET_MODIFIABLE_ASSEMBLIES=n);const r=e.headers.get("ASPNETCORE-BROWSER-TOOLS");return r&&(o.environmentVariables.__ASPNETCORE_BROWSER_TOOLS=r),o}"function"!=typeof importScripts||globalThis.onmessage||(globalThis.dotnetSidecar=!0);const Se="object"==typeof process&&"object"==typeof process.versions&&"string"==typeof process.versions.node,De="function"==typeof importScripts,Oe=De&&"undefined"!=typeof dotnetSidecar,Ce=De&&!Oe,ke="object"==typeof window||De&&!Se,Ie=!ke&&!Se;let Ue={},Pe={},Me={},Le={},Ne={},$e=!1;const ze={},We={config:ze},Fe={mono:{},binding:{},internal:Ne,module:We,loaderHelpers:Pe,runtimeHelpers:Ue,diagnosticHelpers:Me,api:Le};function Be(e,t){if(e)return;const o="Assert failed: "+("function"==typeof t?t():t),n=new Error(o);_(o,n),Ue.nativeAbort(n)}function Ve(){return void 0!==Pe.exitCode}function qe(){return Ue.runtimeReady&&!Ve()}function He(){Ve()&&Be(!1,`.NET runtime already exited with ${Pe.exitCode} ${Pe.exitReason}. You can use runtime.runMain() which doesn't exit the runtime.`),Ue.runtimeReady||Be(!1,".NET runtime didn't start yet. Please call dotnet.create() first.")}function Je(){ke&&(globalThis.addEventListener("unhandledrejection",et),globalThis.addEventListener("error",tt))}let Ze,Qe;function Ge(e){Qe&&Qe(e),Xe(e,Pe.exitReason)}function Ke(e){Ze&&Ze(e||Pe.exitReason),Xe(1,e||Pe.exitReason)}function Xe(t,o){var n,r;const i=o&&"object"==typeof o;t=i&&"number"==typeof o.status?o.status:void 0===t?-1:t;const s=i&&"string"==typeof o.message?o.message:""+o;(o=i?o:Ue.ExitStatus?function(e,t){const o=new Ue.ExitStatus(e);return o.message=t,o.toString=()=>t,o}(t,s):new Error("Exit with code "+t+" "+s)).status=t,o.message||(o.message=s);const a=""+(o.stack||(new Error).stack);try{Object.defineProperty(o,"stack",{get:()=>a})}catch(e){}const l=!!o.silent;if(o.silent=!0,Ve())Pe.diagnosticTracing&&b("mono_exit called after exit");else{try{We.onAbort==Ke&&(We.onAbort=Ze),We.onExit==Ge&&(We.onExit=Qe),ke&&(globalThis.removeEventListener("unhandledrejection",et),globalThis.removeEventListener("error",tt)),Ue.runtimeReady?(Ue.jiterpreter_dump_stats&&Ue.jiterpreter_dump_stats(!1),0===t&&(null===(n=Pe.config)||void 0===n?void 0:n.interopCleanupOnExit)&&Ue.forceDisposeProxies(!0,!0),e&&0!==t&&(null===(r=Pe.config)||void 0===r||r.dumpThreadsOnNonZeroExit)):(Pe.diagnosticTracing&&b(`abort_startup, reason: ${o}`),function(e){Pe.allDownloadsQueued.promise_control.reject(e),Pe.allDownloadsFinished.promise_control.reject(e),Pe.afterConfigLoaded.promise_control.reject(e),Pe.wasmCompilePromise.promise_control.reject(e),Pe.runtimeModuleLoaded.promise_control.reject(e),Ue.dotnetReady&&(Ue.dotnetReady.promise_control.reject(e),Ue.afterInstantiateWasm.promise_control.reject(e),Ue.beforePreInit.promise_control.reject(e),Ue.afterPreInit.promise_control.reject(e),Ue.afterPreRun.promise_control.reject(e),Ue.beforeOnRuntimeInitialized.promise_control.reject(e),Ue.afterOnRuntimeInitialized.promise_control.reject(e),Ue.afterPostRun.promise_control.reject(e))}(o))}catch(e){E("mono_exit A failed",e)}try{l||(function(e,t){if(0!==e&&t){const e=Ue.ExitStatus&&t instanceof Ue.ExitStatus?b:_;"string"==typeof t?e(t):(void 0===t.stack&&(t.stack=(new Error).stack+""),t.message?e(Ue.stringify_as_error_with_stack?Ue.stringify_as_error_with_stack(t.message+"\n"+t.stack):t.message+"\n"+t.stack):e(JSON.stringify(t)))}!Ce&&Pe.config&&(Pe.config.logExitCode?Pe.config.forwardConsoleLogsToWS?R("WASM EXIT "+e):v("WASM EXIT "+e):Pe.config.forwardConsoleLogsToWS&&R())}(t,o),function(e){if(ke&&!Ce&&Pe.config&&Pe.config.appendElementOnExit&&document){const t=document.createElement("label");t.id="tests_done",0!==e&&(t.style.background="red"),t.innerHTML=""+e,document.body.appendChild(t)}}(t))}catch(e){E("mono_exit B failed",e)}Pe.exitCode=t,Pe.exitReason||(Pe.exitReason=o),!Ce&&Ue.runtimeReady&&We.runtimeKeepalivePop()}if(Pe.config&&Pe.config.asyncFlushOnExit&&0===t)throw(async()=>{try{await async function(){try{const e=await import(/*! webpackIgnore: true */"process"),t=e=>new Promise(((t,o)=>{e.on("error",o),e.end("","utf8",t)})),o=t(e.stderr),n=t(e.stdout);let r;const i=new Promise((e=>{r=setTimeout((()=>e("timeout")),1e3)}));await Promise.race([Promise.all([n,o]),i]),clearTimeout(r)}catch(e){_(`flushing std* streams failed: ${e}`)}}()}finally{Ye(t,o)}})(),o;Ye(t,o)}function Ye(e,t){if(Ue.runtimeReady&&Ue.nativeExit)try{Ue.nativeExit(e)}catch(e){!Ue.ExitStatus||e instanceof Ue.ExitStatus||E("set_exit_code_and_quit_now failed: "+e.toString())}if(0!==e||!ke)throw Se&&Ne.process?Ne.process.exit(e):Ue.quit&&Ue.quit(e,t),t}function et(e){ot(e,e.reason,"rejection")}function tt(e){ot(e,e.error,"error")}function ot(e,t,o){e.preventDefault();try{t||(t=new Error("Unhandled "+o)),void 0===t.stack&&(t.stack=(new Error).stack),t.stack=t.stack+"",t.silent||(_("Unhandled error:",t),Xe(1,t))}catch(e){}}!function(e){if($e)throw new Error("Loader module already loaded");$e=!0,Ue=e.runtimeHelpers,Pe=e.loaderHelpers,Me=e.diagnosticHelpers,Le=e.api,Ne=e.internal,Object.assign(Le,{INTERNAL:Ne,invokeLibraryInitializers:be}),Object.assign(e.module,{config:ve(ze,{environmentVariables:{}})});const r={mono_wasm_bindings_is_ready:!1,config:e.module.config,diagnosticTracing:!1,nativeAbort:e=>{throw e||new Error("abort")},nativeExit:e=>{throw new Error("exit:"+e)}},l={gitHash:"95017c711e6afc1085133d440e42b4bd78155701",config:e.module.config,diagnosticTracing:!1,maxParallelDownloads:16,enableDownloadRetry:!0,_loaded_files:[],loadedFiles:[],loadedAssemblies:[],libraryInitializers:[],workerNextNumber:1,actual_downloaded_assets_count:0,actual_instantiated_assets_count:0,expected_downloaded_assets_count:0,expected_instantiated_assets_count:0,afterConfigLoaded:i(),allDownloadsQueued:i(),allDownloadsFinished:i(),wasmCompilePromise:i(),runtimeModuleLoaded:i(),loadingWorkers:i(),is_exited:Ve,is_runtime_running:qe,assert_runtime_running:He,mono_exit:Xe,createPromiseController:i,getPromiseController:s,assertIsControllablePromise:a,mono_download_assets:oe,resolve_single_asset_path:ee,setup_proxy_console:j,set_thread_prefix:w,installUnhandledErrorHandler:Je,retrieve_asset_download:ie,invokeLibraryInitializers:be,isDebuggingSupported:Te,exceptions:t,simd:n,relaxedSimd:o};Object.assign(Ue,r),Object.assign(Pe,l)}(Fe);let nt,rt,it,st=!1,at=!1;async function lt(e){if(!at){if(at=!0,ke&&Pe.config.forwardConsoleLogsToWS&&void 0!==globalThis.WebSocket&&j("main",globalThis.console,globalThis.location.origin),We||Be(!1,"Null moduleConfig"),Pe.config||Be(!1,"Null moduleConfig.config"),"function"==typeof e){const t=e(Fe.api);if(t.ready)throw new Error("Module.ready couldn't be redefined.");Object.assign(We,t),Ee(We,t)}else{if("object"!=typeof e)throw new Error("Can't use moduleFactory callback of createDotnetRuntime function.");Ee(We,e)}await async function(e){if(Se){const e=await import(/*! webpackIgnore: true */"process"),t=14;if(e.versions.node.split(".")[0]<t)throw new Error(`NodeJS at '${e.execPath}' has too low version '${e.versions.node}', please use at least ${t}. See also https://aka.ms/dotnet-wasm-features`)}const t=/*! webpackIgnore: true */import.meta.url,o=t.indexOf("?");var n;if(o>0&&(Pe.modulesUniqueQuery=t.substring(o)),Pe.scriptUrl=t.replace(/\\/g,"/").replace(/[?#].*/,""),Pe.scriptDirectory=(n=Pe.scriptUrl).slice(0,n.lastIndexOf("/"))+"/",Pe.locateFile=e=>"URL"in globalThis&&globalThis.URL!==C?new URL(e,Pe.scriptDirectory).toString():M(e)?e:Pe.scriptDirectory+e,Pe.fetch_like=k,Pe.out=console.log,Pe.err=console.error,Pe.onDownloadResourceProgress=e.onDownloadResourceProgress,ke&&globalThis.navigator){const e=globalThis.navigator,t=e.userAgentData&&e.userAgentData.brands;t&&t.length>0?Pe.isChromium=t.some((e=>"Google Chrome"===e.brand||"Microsoft Edge"===e.brand||"Chromium"===e.brand)):e.userAgent&&(Pe.isChromium=e.userAgent.includes("Chrome"),Pe.isFirefox=e.userAgent.includes("Firefox"))}Ne.require=Se?await import(/*! webpackIgnore: true */"module").then((e=>e.createRequire(/*! webpackIgnore: true */import.meta.url))):Promise.resolve((()=>{throw new Error("require not supported")})),void 0===globalThis.URL&&(globalThis.URL=C)}(We)}}async function ct(e){return await lt(e),Ze=We.onAbort,Qe=We.onExit,We.onAbort=Ke,We.onExit=Ge,We.ENVIRONMENT_IS_PTHREAD?async function(){(function(){const e=new MessageChannel,t=e.port1,o=e.port2;t.addEventListener("message",(e=>{var n,r;n=JSON.parse(e.data.config),r=JSON.parse(e.data.monoThreadInfo),st?Pe.diagnosticTracing&&b("mono config already received"):(ve(Pe.config,n),Ue.monoThreadInfo=r,xe(),Pe.diagnosticTracing&&b("mono config received"),st=!0,Pe.afterConfigLoaded.promise_control.resolve(Pe.config),ke&&n.forwardConsoleLogsToWS&&void 0!==globalThis.WebSocket&&Pe.setup_proxy_console("worker-idle",console,globalThis.location.origin)),t.close(),o.close()}),{once:!0}),t.start(),self.postMessage({[l]:{monoCmd:"preload",port:o}},[o])})(),await Pe.afterConfigLoaded.promise,function(){const e=Pe.config;e.assets||Be(!1,"config.assets must be defined");for(const t of e.assets)X(t),Q[t.behavior]&&z.push(t)}(),setTimeout((async()=>{try{await oe()}catch(e){Xe(1,e)}}),0);const e=dt(),t=await Promise.all(e);return await ut(t),We}():async function(){var e;await Re(We),re();const t=dt();(async function(){try{const e=ee("dotnetwasm");await se(e),e&&e.pendingDownloadInternal&&e.pendingDownloadInternal.response||Be(!1,"Can't load dotnet.native.wasm");const t=await e.pendingDownloadInternal.response,o=t.headers&&t.headers.get?t.headers.get("Content-Type"):void 0;let n;if("function"==typeof WebAssembly.compileStreaming&&"application/wasm"===o)n=await WebAssembly.compileStreaming(t);else{ke&&"application/wasm"!==o&&E('WebAssembly resource does not have the expected content type "application/wasm", so falling back to slower ArrayBuffer instantiation.');const e=await t.arrayBuffer();Pe.diagnosticTracing&&b("instantiate_wasm_module buffered"),n=Ie?await Promise.resolve(new WebAssembly.Module(e)):await WebAssembly.compile(e)}e.pendingDownloadInternal=null,e.pendingDownload=null,e.buffer=null,e.moduleExports=null,Pe.wasmCompilePromise.promise_control.resolve(n)}catch(e){Pe.wasmCompilePromise.promise_control.reject(e)}})(),setTimeout((async()=>{try{D(),await oe()}catch(e){Xe(1,e)}}),0);const o=await Promise.all(t);return await ut(o),await Ue.dotnetReady.promise,await we(null===(e=Pe.config.resources)||void 0===e?void 0:e.modulesAfterRuntimeReady),await be("onRuntimeReady",[Fe.api]),Le}()}function dt(){const e=ee("js-module-runtime"),t=ee("js-module-native");if(nt&&rt)return[nt,rt,it];"object"==typeof e.moduleExports?nt=e.moduleExports:(Pe.diagnosticTracing&&b(`Attempting to import '${e.resolvedUrl}' for ${e.name}`),nt=import(/*! webpackIgnore: true */e.resolvedUrl)),"object"==typeof t.moduleExports?rt=t.moduleExports:(Pe.diagnosticTracing&&b(`Attempting to import '${t.resolvedUrl}' for ${t.name}`),rt=import(/*! webpackIgnore: true */t.resolvedUrl));const o=Y("js-module-diagnostics");return o&&("object"==typeof o.moduleExports?it=o.moduleExports:(Pe.diagnosticTracing&&b(`Attempting to import '${o.resolvedUrl}' for ${o.name}`),it=import(/*! webpackIgnore: true */o.resolvedUrl))),[nt,rt,it]}async function ut(e){const{initializeExports:t,initializeReplacements:o,configureRuntimeStartup:n,configureEmscriptenStartup:r,configureWorkerStartup:i,setRuntimeGlobals:s,passEmscriptenInternals:a}=e[0],{default:l}=e[1],c=e[2];s(Fe),t(Fe),c&&c.setRuntimeGlobals(Fe),await n(We),Pe.runtimeModuleLoaded.promise_control.resolve(),l((e=>(Object.assign(We,{ready:e.ready,__dotnet_runtime:{initializeReplacements:o,configureEmscriptenStartup:r,configureWorkerStartup:i,passEmscriptenInternals:a}}),We))).catch((e=>{if(e.message&&e.message.toLowerCase().includes("out of memory"))throw new Error(".NET runtime has failed to start, because too much memory was requested. Please decrease the memory by adjusting EmccMaximumHeapSize. See also https://aka.ms/dotnet-wasm-features");throw e}))}const ft=new class{withModuleConfig(e){try{return Ee(We,e),this}catch(e){throw Xe(1,e),e}}withOnConfigLoaded(e){try{return Ee(We,{onConfigLoaded:e}),this}catch(e){throw Xe(1,e),e}}withConsoleForwarding(){try{return ve(ze,{forwardConsoleLogsToWS:!0}),this}catch(e){throw Xe(1,e),e}}withExitOnUnhandledError(){try{return ve(ze,{exitOnUnhandledError:!0}),Je(),this}catch(e){throw Xe(1,e),e}}withAsyncFlushOnExit(){try{return ve(ze,{asyncFlushOnExit:!0}),this}catch(e){throw Xe(1,e),e}}withExitCodeLogging(){try{return ve(ze,{logExitCode:!0}),this}catch(e){throw Xe(1,e),e}}withElementOnExit(){try{return ve(ze,{appendElementOnExit:!0}),this}catch(e){throw Xe(1,e),e}}withInteropCleanupOnExit(){try{return ve(ze,{interopCleanupOnExit:!0}),this}catch(e){throw Xe(1,e),e}}withDumpThreadsOnNonZeroExit(){try{return ve(ze,{dumpThreadsOnNonZeroExit:!0}),this}catch(e){throw Xe(1,e),e}}withWaitingForDebugger(e){try{return ve(ze,{waitForDebugger:e}),this}catch(e){throw Xe(1,e),e}}withInterpreterPgo(e,t){try{return ve(ze,{interpreterPgo:e,interpreterPgoSaveDelay:t}),ze.runtimeOptions?ze.runtimeOptions.push("--interp-pgo-recording"):ze.runtimeOptions=["--interp-pgo-recording"],this}catch(e){throw Xe(1,e),e}}withConfig(e){try{return ve(ze,e),this}catch(e){throw Xe(1,e),e}}withConfigSrc(e){try{return e&&"string"==typeof e||Be(!1,"must be file path or URL"),Ee(We,{configSrc:e}),this}catch(e){throw Xe(1,e),e}}withVirtualWorkingDirectory(e){try{return e&&"string"==typeof e||Be(!1,"must be directory path"),ve(ze,{virtualWorkingDirectory:e}),this}catch(e){throw Xe(1,e),e}}withEnvironmentVariable(e,t){try{const o={};return o[e]=t,ve(ze,{environmentVariables:o}),this}catch(e){throw Xe(1,e),e}}withEnvironmentVariables(e){try{return e&&"object"==typeof e||Be(!1,"must be dictionary object"),ve(ze,{environmentVariables:e}),this}catch(e){throw Xe(1,e),e}}withDiagnosticTracing(e){try{return"boolean"!=typeof e&&Be(!1,"must be boolean"),ve(ze,{diagnosticTracing:e}),this}catch(e){throw Xe(1,e),e}}withDebugging(e){try{return null!=e&&"number"==typeof e||Be(!1,"must be number"),ve(ze,{debugLevel:e}),this}catch(e){throw Xe(1,e),e}}withApplicationArguments(...e){try{return e&&Array.isArray(e)||Be(!1,"must be array of strings"),ve(ze,{applicationArguments:e}),this}catch(e){throw Xe(1,e),e}}withRuntimeOptions(e){try{return e&&Array.isArray(e)||Be(!1,"must be array of strings"),ze.runtimeOptions?ze.runtimeOptions.push(...e):ze.runtimeOptions=e,this}catch(e){throw Xe(1,e),e}}withMainAssembly(e){try{return ve(ze,{mainAssemblyName:e}),this}catch(e){throw Xe(1,e),e}}withApplicationArgumentsFromQuery(){try{if(!globalThis.window)throw new Error("Missing window to the query parameters from");if(void 0===globalThis.URLSearchParams)throw new Error("URLSearchParams is supported");const e=new URLSearchParams(globalThis.window.location.search).getAll("arg");return this.withApplicationArguments(...e)}catch(e){throw Xe(1,e),e}}withApplicationEnvironment(e){try{return ve(ze,{applicationEnvironment:e}),this}catch(e){throw Xe(1,e),e}}withApplicationCulture(e){try{return ve(ze,{applicationCulture:e}),this}catch(e){throw Xe(1,e),e}}withResourceLoader(e){try{return Pe.loadBootResource=e,this}catch(e){throw Xe(1,e),e}}async download(){try{await async function(){lt(We),await Re(We),re(),D(),oe(),await Pe.allDownloadsFinished.promise}()}catch(e){throw Xe(1,e),e}}async create(){try{return this.instance||(this.instance=await async function(){return await ct(We),Fe.api}()),this.instance}catch(e){throw Xe(1,e),e}}async run(){try{return We.config||Be(!1,"Null moduleConfig.config"),this.instance||await this.create(),this.instance.runMainAndExit()}catch(e){throw Xe(1,e),e}}},mt=Xe,gt=ct;Ie||"function"==typeof globalThis.URL||Be(!1,"This browser/engine doesn't support URL API. Please use a modern version. See also https://aka.ms/dotnet-wasm-features"),"function"!=typeof globalThis.BigInt64Array&&Be(!1,"This browser/engine doesn't support BigInt64Array API. Please use a modern version. See also https://aka.ms/dotnet-wasm-features"),ft.withConfig(/*json-start*/{
|
|
5
5
|
"mainAssemblyName": "PKHeX.Everywhere.Engine.Host",
|
|
6
6
|
"resources": {
|
|
7
|
-
"hash": "sha256-
|
|
7
|
+
"hash": "sha256-HMlEuzrbUtEpqtCmAGBqLG2FsMO7vm/gr7LBBpHVgFo=",
|
|
8
8
|
"jsModuleNative": [
|
|
9
9
|
{
|
|
10
10
|
"name": "dotnet.native.b6l13xorvf.js"
|
|
@@ -45,8 +45,8 @@ var e=!1;const t=async()=>WebAssembly.validate(new Uint8Array([0,97,115,109,1,0,
|
|
|
45
45
|
"coreAssembly": [
|
|
46
46
|
{
|
|
47
47
|
"virtualPath": "System.Private.CoreLib.wasm",
|
|
48
|
-
"name": "System.Private.CoreLib.
|
|
49
|
-
"hash": "sha256
|
|
48
|
+
"name": "System.Private.CoreLib.phe29nymlz.wasm",
|
|
49
|
+
"hash": "sha256-3bp33SNxHRJkV4wQ0JqFwNtw4zLeLb5fR8HfFOSq4lg=",
|
|
50
50
|
"cache": "force-cache"
|
|
51
51
|
},
|
|
52
52
|
{
|
|
@@ -70,51 +70,51 @@ var e=!1;const t=async()=>WebAssembly.validate(new Uint8Array([0,97,115,109,1,0,
|
|
|
70
70
|
"cache": "force-cache"
|
|
71
71
|
},
|
|
72
72
|
{
|
|
73
|
-
"virtualPath": "PKHeX.Core.
|
|
74
|
-
"name": "PKHeX.Core.
|
|
75
|
-
"hash": "sha256-
|
|
73
|
+
"virtualPath": "PKHeX.Core.wasm",
|
|
74
|
+
"name": "PKHeX.Core.6as4mqwu45.wasm",
|
|
75
|
+
"hash": "sha256-0pmO7np8gS7QBkKTTp1PsrNqo+0yLm04Oejo1MDekmc=",
|
|
76
76
|
"cache": "force-cache"
|
|
77
77
|
},
|
|
78
78
|
{
|
|
79
|
-
"virtualPath": "PKHeX.Core.wasm",
|
|
80
|
-
"name": "PKHeX.Core.
|
|
81
|
-
"hash": "sha256-
|
|
79
|
+
"virtualPath": "PKHeX.Core.AutoMod.wasm",
|
|
80
|
+
"name": "PKHeX.Core.AutoMod.x2uzxduw6t.wasm",
|
|
81
|
+
"hash": "sha256-CXj3eOlHyApqxWqxkBGOkRTKZ8/ZwHfm/OUxK3qeEAw=",
|
|
82
82
|
"cache": "force-cache"
|
|
83
83
|
},
|
|
84
84
|
{
|
|
85
85
|
"virtualPath": "PKHeX.Everywhere.Engine.Host.wasm",
|
|
86
|
-
"name": "PKHeX.Everywhere.Engine.Host.
|
|
87
|
-
"hash": "sha256-
|
|
86
|
+
"name": "PKHeX.Everywhere.Engine.Host.xv25q7a107.wasm",
|
|
87
|
+
"hash": "sha256-I6zmJjuSeF2J9jzh8abrHKuSCkHH3z9ETrfe+EUhsR8=",
|
|
88
88
|
"cache": "force-cache"
|
|
89
89
|
},
|
|
90
90
|
{
|
|
91
91
|
"virtualPath": "PKHeX.Everywhere.Engine.PlugIns.wasm",
|
|
92
|
-
"name": "PKHeX.Everywhere.Engine.PlugIns.
|
|
93
|
-
"hash": "sha256
|
|
92
|
+
"name": "PKHeX.Everywhere.Engine.PlugIns.zgak1u0lbr.wasm",
|
|
93
|
+
"hash": "sha256-/XSGEKdWxHObCJMX70w8eyUIYqasNvF48u+agRmULxg=",
|
|
94
94
|
"cache": "force-cache"
|
|
95
95
|
},
|
|
96
96
|
{
|
|
97
97
|
"virtualPath": "PKHeX.Everywhere.Engine.wasm",
|
|
98
|
-
"name": "PKHeX.Everywhere.Engine.
|
|
99
|
-
"hash": "sha256
|
|
98
|
+
"name": "PKHeX.Everywhere.Engine.z5zg1tyuzh.wasm",
|
|
99
|
+
"hash": "sha256-+RTz7qVa5TWDwGYY4MFpB8Dhi/vbHbMmBMm2US37mMk=",
|
|
100
100
|
"cache": "force-cache"
|
|
101
101
|
},
|
|
102
102
|
{
|
|
103
103
|
"virtualPath": "PKHeX.Everywhere.PlugIns.wasm",
|
|
104
|
-
"name": "PKHeX.Everywhere.PlugIns.
|
|
105
|
-
"hash": "sha256-
|
|
104
|
+
"name": "PKHeX.Everywhere.PlugIns.wywqtjlojy.wasm",
|
|
105
|
+
"hash": "sha256-mB1uQ/uTA4zJAa+n0m/59l/1v3O6/LnS/NPWfnLg2bU=",
|
|
106
106
|
"cache": "force-cache"
|
|
107
107
|
},
|
|
108
108
|
{
|
|
109
109
|
"virtualPath": "PKHeX.Everywhere.RomHacks.wasm",
|
|
110
|
-
"name": "PKHeX.Everywhere.RomHacks.
|
|
111
|
-
"hash": "sha256
|
|
110
|
+
"name": "PKHeX.Everywhere.RomHacks.xwhkv6stl7.wasm",
|
|
111
|
+
"hash": "sha256-TxGDLALEKLaWQrhw82Ne91xSYW98ExZtZY6Me83YSWU=",
|
|
112
112
|
"cache": "force-cache"
|
|
113
113
|
},
|
|
114
114
|
{
|
|
115
115
|
"virtualPath": "PKHeX.Facade.wasm",
|
|
116
|
-
"name": "PKHeX.Facade.
|
|
117
|
-
"hash": "sha256-
|
|
116
|
+
"name": "PKHeX.Facade.60xdpoycab.wasm",
|
|
117
|
+
"hash": "sha256-ViE7bBTHnpgBmy1ufioGprTLP8JyubSBgkknJONCn6k=",
|
|
118
118
|
"cache": "force-cache"
|
|
119
119
|
},
|
|
120
120
|
{
|
|
@@ -125,8 +125,8 @@ var e=!1;const t=async()=>WebAssembly.validate(new Uint8Array([0,97,115,109,1,0,
|
|
|
125
125
|
},
|
|
126
126
|
{
|
|
127
127
|
"virtualPath": "System.Collections.Immutable.wasm",
|
|
128
|
-
"name": "System.Collections.Immutable.
|
|
129
|
-
"hash": "sha256-
|
|
128
|
+
"name": "System.Collections.Immutable.98cu5knfnu.wasm",
|
|
129
|
+
"hash": "sha256-ab4ZbPr6/J5y6i/bo+sTS0g/SuKN95Jzqz5q5b3qzsA=",
|
|
130
130
|
"cache": "force-cache"
|
|
131
131
|
},
|
|
132
132
|
{
|
|
@@ -257,8 +257,8 @@ var e=!1;const t=async()=>WebAssembly.validate(new Uint8Array([0,97,115,109,1,0,
|
|
|
257
257
|
},
|
|
258
258
|
{
|
|
259
259
|
"virtualPath": "System.Runtime.wasm",
|
|
260
|
-
"name": "System.Runtime.
|
|
261
|
-
"hash": "sha256-
|
|
260
|
+
"name": "System.Runtime.4q9htgq8pa.wasm",
|
|
261
|
+
"hash": "sha256-fGj4he4HmYITrFuM1f3vPg5q8eFV2EqzFhBTzyTfHus=",
|
|
262
262
|
"cache": "force-cache"
|
|
263
263
|
},
|
|
264
264
|
{
|
|
@@ -1,7 +1,7 @@
|
|
|
1
|
-
import type { ActionPlacement, AddedPokemon, Binary, CatalogNames, CatalogNamesRequest, Choice, DeclaredPage, EditablePokemon, EncounterRow, EncounterVersions, ExportedPokemon, ExportedSave, FormatEntry, InstalledPlugIn, ItemHandle, LoadedSave, PlugInAction, PlugInDetails, PlugInFailure, PlugInOutcome, PlugInSetting, PlugInState, PokemonHandle, PokemonId, PokemonOptions, PokemonPatch, PokemonSummary, Pouch, PublishedVersion, SaveEvents, SaveSummary, SaveVersion, SpeciesEntry, TrainerCard, TrainerGender, VersionEntry } from './types';
|
|
1
|
+
import type { ActionPlacement, AddedPokemon, Badge, Binary, BoxEntry, CatalogNames, CatalogNamesRequest, Choice, DeclaredPage, EditablePokemon, EncounterRow, EncounterVersions, ExportedPokemon, ExportedSave, FormatEntry, GameProgress, InstalledPlugIn, ItemHandle, LoadedSave, PlugInAction, PlugInDetails, PlugInFailure, PlugInOutcome, PlugInSetting, PlugInState, PokemonHandle, PokemonId, PokemonOptions, PokemonPatch, PokemonSummary, Pouch, PublishedVersion, SaveEvents, SaveSummary, SaveVersion, SpeciesEntry, TrainerCard, TrainerGender, VersionEntry } from './types';
|
|
2
2
|
export type Invoke = <T>(call: CallName, args: unknown[]) => Promise<T>;
|
|
3
|
-
export declare const queries: readonly ['box.get', 'box.showdown', 'catalog.names', 'encounters.search', 'encounters.versions', 'events.flag', 'events.get', 'game.balls', 'game.blankVersions', 'game.formats', 'game.get', 'game.heldItems', 'game.languages', 'game.moves', 'game.natures', 'game.originGames', 'game.types', 'game.version', 'inventory.get', 'party.get', 'party.showdown', 'plugins.actions', 'plugins.details', 'plugins.failures', 'plugins.installed', 'plugins.isSupported', 'plugins.pageModule', 'plugins.pages', 'plugins.setting', 'plugins.state', 'pokemon.details', 'pokemon.export', 'pokemon.get', 'pokemon.options', 'pokemon.showdown', 'species.list', 'trainer.get'];
|
|
4
|
-
export declare const commands: readonly ['box.addEncounter', 'box.addFromFile', 'events.giveTickets', 'events.setFlag', 'events.setWork', 'game.close', 'game.enableFormat', 'game.export', 'game.file', 'game.load', 'game.loadBlank', 'inventory.setItem', 'plugins.dismissFailure', 'plugins.newestCompatible', 'plugins.register', 'plugins.run', 'plugins.setEnabled', 'plugins.setHookEnabled', 'plugins.unregister', 'plugins.updateSetting', 'pokemon.addToBox', 'pokemon.clone', 'pokemon.commit', 'pokemon.edit', 'pokemon.setLevel', 'pokemon.update', 'trainer.setBattlePoints', 'trainer.setGender', 'trainer.setMoney', 'trainer.setName'];
|
|
3
|
+
export declare const queries: readonly ['box.get', 'box.list', 'box.showdown', 'catalog.names', 'encounters.search', 'encounters.versions', 'events.flag', 'events.get', 'game.balls', 'game.blankVersions', 'game.formats', 'game.get', 'game.heldItems', 'game.languages', 'game.moves', 'game.natures', 'game.originGames', 'game.progress', 'game.types', 'game.version', 'inventory.get', 'party.get', 'party.showdown', 'plugins.actions', 'plugins.details', 'plugins.failures', 'plugins.installed', 'plugins.isSupported', 'plugins.pageModule', 'plugins.pages', 'plugins.setting', 'plugins.state', 'pokemon.details', 'pokemon.export', 'pokemon.get', 'pokemon.options', 'pokemon.showdown', 'species.list', 'trainer.badges', 'trainer.get'];
|
|
4
|
+
export declare const commands: readonly ['box.addEncounter', 'box.addFromFile', 'events.giveTickets', 'events.setFlag', 'events.setWork', 'game.close', 'game.enableFormat', 'game.export', 'game.file', 'game.load', 'game.loadBlank', 'inventory.setItem', 'plugins.dismissFailure', 'plugins.newestCompatible', 'plugins.register', 'plugins.run', 'plugins.setEnabled', 'plugins.setHookEnabled', 'plugins.unregister', 'plugins.updateSetting', 'pokemon.addToBox', 'pokemon.clone', 'pokemon.commit', 'pokemon.edit', 'pokemon.setLevel', 'pokemon.update', 'trainer.setBadges', 'trainer.setBattlePoints', 'trainer.setGender', 'trainer.setMoney', 'trainer.setName'];
|
|
5
5
|
export type QueryName = (typeof queries)[number];
|
|
6
6
|
export type CommandName = (typeof commands)[number];
|
|
7
7
|
export type CallName = QueryName | CommandName;
|
|
@@ -13,6 +13,8 @@ export interface EngineClient {
|
|
|
13
13
|
addFromFile(bytes: Binary): Promise<AddedPokemon>;
|
|
14
14
|
/** Requires a loaded save; throws `no-save` otherwise. */
|
|
15
15
|
get(): Promise<PokemonSummary[]>;
|
|
16
|
+
/** Lists every box in the save in order, empty ones included, with its name and slot count. Requires a loaded save; throws `no-save` otherwise. */
|
|
17
|
+
list(): Promise<BoxEntry[]>;
|
|
16
18
|
/** Requires a loaded save; throws `no-save` otherwise. */
|
|
17
19
|
showdown(): Promise<string>;
|
|
18
20
|
};
|
|
@@ -73,6 +75,8 @@ export interface EngineClient {
|
|
|
73
75
|
natures(): Promise<Choice[]>;
|
|
74
76
|
/** Requires a loaded save; throws `no-save` otherwise. */
|
|
75
77
|
originGames(): Promise<Choice[]>;
|
|
78
|
+
/** Reads the save's play time, gym badges and Pokédex counts. Requires a loaded save; throws `no-save` otherwise. */
|
|
79
|
+
progress(): Promise<GameProgress>;
|
|
76
80
|
/** Names the type ids in a Pokémon's `types`, from Normal (0) to Fairy (17). The list is the same for every save. Requires a loaded save; throws `no-save` otherwise. */
|
|
77
81
|
types(): Promise<Choice[]>;
|
|
78
82
|
version(): Promise<SaveVersion | null>;
|
|
@@ -137,8 +141,12 @@ export interface EngineClient {
|
|
|
137
141
|
list(): Promise<SpeciesEntry[]>;
|
|
138
142
|
};
|
|
139
143
|
trainer: {
|
|
144
|
+
/** Lists the gym badges in game order. Gold, Silver and Crystal list the Johto badges, then the Kanto ones. Returns null outside Generations 1 to 3 and for ROM hacks. Requires a loaded save; throws `no-save` otherwise. */
|
|
145
|
+
badges(): Promise<Badge[] | null>;
|
|
140
146
|
/** Requires a loaded save; throws `no-save` otherwise. */
|
|
141
147
|
get(): Promise<TrainerCard>;
|
|
148
|
+
/** Sets which gym badges the trainer has, one value per badge in the order `trainer.badges` lists them. Throws `not-supported` when `trainer.badges` returns null, and `out-of-range` when the number of values doesn't match. Requires a loaded save; throws `no-save` otherwise. */
|
|
149
|
+
setBadges(earned: boolean[]): Promise<void>;
|
|
142
150
|
/** Requires a loaded save; throws `no-save` otherwise. */
|
|
143
151
|
setBattlePoints(value: number): Promise<void>;
|
|
144
152
|
/** Requires a loaded save; throws `no-save` otherwise. */
|
|
@@ -14,10 +14,32 @@ export interface AddedPokemon {
|
|
|
14
14
|
/** The empty box slot it was placed in. */
|
|
15
15
|
at: PokemonHandle;
|
|
16
16
|
}
|
|
17
|
+
/** A gym badge, as `trainer.badges` lists it. */
|
|
18
|
+
export interface Badge {
|
|
19
|
+
/** The badge's English name without "Badge", such as `Boulder`. */
|
|
20
|
+
name: string;
|
|
21
|
+
/** Whether the trainer has the badge. */
|
|
22
|
+
earned: boolean;
|
|
23
|
+
}
|
|
24
|
+
/** Gym badges earned out of the badges the game has. */
|
|
25
|
+
export interface BadgeCount {
|
|
26
|
+
earned: number;
|
|
27
|
+
/** The badges the game has, such as 16 for Gold, Silver, Crystal, HeartGold and SoulSilver. */
|
|
28
|
+
total: number;
|
|
29
|
+
}
|
|
17
30
|
/** Bytes encoded as a base64 string. */
|
|
18
31
|
export type Base64 = string;
|
|
19
32
|
/** Bytes a call accepts. A `File` is a `Blob`, so it works too. */
|
|
20
33
|
export type Binary = Uint8Array | ArrayBuffer | Blob;
|
|
34
|
+
/** A box in the save, as `box.list` lists it. Empty boxes are included. */
|
|
35
|
+
export interface BoxEntry {
|
|
36
|
+
/** Zero-based box number, the same number a box `PokemonHandle` carries. */
|
|
37
|
+
box: number;
|
|
38
|
+
/** The name the save stores for the box, or null when the save doesn't store box names, such as Generation 1 saves, Let's Go and ROM hacks. */
|
|
39
|
+
name: string | null;
|
|
40
|
+
/** How many slots the box has. */
|
|
41
|
+
slots: number;
|
|
42
|
+
}
|
|
21
43
|
/** A species or item id with its display name. */
|
|
22
44
|
export interface CatalogName {
|
|
23
45
|
id: number;
|
|
@@ -235,6 +257,15 @@ export interface GameOverview {
|
|
|
235
257
|
/** The id of the save format the save loaded through, or null for a save PKHeX reads on its own. */
|
|
236
258
|
formatId: string | null;
|
|
237
259
|
}
|
|
260
|
+
/** How far the trainer has got, returned by `game.progress`. */
|
|
261
|
+
export interface GameProgress {
|
|
262
|
+
/** The play time the save records, or null when the save has none, such as a Stadium or Box save. */
|
|
263
|
+
playTime: PlayTime | null;
|
|
264
|
+
/** The gym badges earned, or null when the engine can't read them for the game. Games from Sun and Moon on report null, except Brilliant Diamond and Shining Pearl. */
|
|
265
|
+
badges: BadgeCount | null;
|
|
266
|
+
/** The Pokédex counts, or null when the save has no Pokédex or the engine can't read it. */
|
|
267
|
+
pokedex: PokedexCount | null;
|
|
268
|
+
}
|
|
238
269
|
/** The type and power of a Pokémon's Hidden Power. */
|
|
239
270
|
export interface HiddenPower {
|
|
240
271
|
/** Type name. */
|
|
@@ -341,6 +372,12 @@ export interface PartyMember {
|
|
|
341
372
|
/** The Pokémon's current level. */
|
|
342
373
|
level: number;
|
|
343
374
|
}
|
|
375
|
+
/** Hours, minutes and seconds played, as the game shows them. */
|
|
376
|
+
export interface PlayTime {
|
|
377
|
+
hours: number;
|
|
378
|
+
minutes: number;
|
|
379
|
+
seconds: number;
|
|
380
|
+
}
|
|
344
381
|
/** An action an enabled plug-in hook offers, as listed by `plugins.actions`. Run it with `plugins.run`. */
|
|
345
382
|
export interface PlugInAction {
|
|
346
383
|
/** The action's hook id, the full name of its .NET type. */
|
|
@@ -465,6 +502,11 @@ export interface PlugInUpdated {
|
|
|
465
502
|
/** The newly registered assembly's version. */
|
|
466
503
|
version: string;
|
|
467
504
|
}
|
|
505
|
+
/** The number of species the Pokédex has seen and caught, as PKHeX counts them. */
|
|
506
|
+
export interface PokedexCount {
|
|
507
|
+
seen: number;
|
|
508
|
+
caught: number;
|
|
509
|
+
}
|
|
468
510
|
/** Where a Pokémon added to the box came from: an imported Pokémon file (`box.addFromFile`) or an encounter search result (`box.addEncounter`). */
|
|
469
511
|
export type PokemonAddSource = 'file' | 'encounter';
|
|
470
512
|
/** Fires when `box.addFromFile` or `box.addEncounter` puts a Pokémon in the first empty box slot. */
|
|
@@ -520,7 +562,7 @@ export interface PokemonOptions {
|
|
|
520
562
|
moves: Choice[];
|
|
521
563
|
/** The items the save can store as held items, as `game.heldItems()` lists them, plus the unknown item it already holds. */
|
|
522
564
|
heldItems: ItemChoice[];
|
|
523
|
-
/** Fields the save can't change, such as `nature` in
|
|
565
|
+
/** Fields the save can't change, such as `nature` in Unbound and Radical Red, where it comes from the PID. Show them disabled. An update that changes one fails with `invalid-patch`. */
|
|
524
566
|
locked: PokemonField[];
|
|
525
567
|
}
|
|
526
568
|
/** A short description of a Pokémon, sent with events such as `pokemonAdded` and `pokemonSaved`. */
|
|
@@ -541,7 +583,7 @@ export interface PokemonPatch {
|
|
|
541
583
|
/** Form index. See `forms` in `pokemon.options()`. */
|
|
542
584
|
form?: number | null;
|
|
543
585
|
gender?: PokemonGender | null;
|
|
544
|
-
/** PKHeX nature id from `game.natures()`. Rejected when `locked` in `pokemon.options()` has `nature`. */
|
|
586
|
+
/** PKHeX nature id from `game.natures()`. Rejected when `locked` in `pokemon.options()` has `nature`. In Gen 3 and 4, where the nature comes from the PID, the Pokémon gets a new PID that keeps its gender, ability and shininess. */
|
|
545
587
|
nature?: number | null;
|
|
546
588
|
/** PKHeX ability id. See `abilities` in `pokemon.options()`. */
|
|
547
589
|
ability?: number | null;
|
|
@@ -635,9 +677,9 @@ export interface PublishedVersion {
|
|
|
635
677
|
export type SaveCapability = 'legality' | 'autoLegality' | 'encounters' | 'showdown' | 'events' | 'plugIns';
|
|
636
678
|
/** The save's event flags and work, returned by `events.get`, which returns null for saves without them. */
|
|
637
679
|
export interface SaveEvents {
|
|
638
|
-
/** The flags PKHeX has labels for. The save can have more. */
|
|
680
|
+
/** The flags PKHeX has labels for. The save can have more. Empty in Generation 1, which has no labels. */
|
|
639
681
|
flags: EventFlag[];
|
|
640
|
-
/** The work entries PKHeX has labels for. The save can have more. */
|
|
682
|
+
/** The work entries PKHeX has labels for. The save can have more. Empty in Generation 1, which has no labels. */
|
|
641
683
|
work: EventWork[];
|
|
642
684
|
/** How many flags the save has. `events.setFlag` accepts indexes from 0 to `flagCount - 1`. */
|
|
643
685
|
flagCount: number;
|
|
@@ -735,7 +777,8 @@ export interface TrainerCard {
|
|
|
735
777
|
name: string;
|
|
736
778
|
/** The longest name the game allows. `trainer.setName` cuts longer names to this length. */
|
|
737
779
|
maxNameLength: number;
|
|
738
|
-
gender:
|
|
780
|
+
/** The trainer's gender, or null for games without one: Red, Green, Blue, Yellow, Gold, Silver and Pokémon Stadium. `trainer.setGender` fails with `not-in-game` for those. */
|
|
781
|
+
gender: TrainerGender | null;
|
|
739
782
|
/** The trainer's money, or null when the save has none. `trainer.setMoney` accepts 0 to 999999 and caps it at the game's maximum. */
|
|
740
783
|
money: number | null;
|
|
741
784
|
/** The trainer's Battle Points, or null outside Generation 4 and 6 saves. `trainer.setBattlePoints` accepts 0 to 65535. */
|
package/dist/index.js
CHANGED
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { a as createEngine, n as topics, o as wasmHost, r as EngineError } from "./topics-
|
|
1
|
+
import { a as createEngine, n as topics, o as wasmHost, r as EngineError } from "./topics-BD2tUWCQ.js";
|
|
2
2
|
//#region src/generated/errors.ts
|
|
3
3
|
var errorCodes = [
|
|
4
4
|
"no-save",
|
package/dist/internal.js
CHANGED
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
import { i as call, s as affects, t as queryTopics } from "./topics-
|
|
1
|
+
import { i as call, s as affects, t as queryTopics } from "./topics-BD2tUWCQ.js";
|
|
2
2
|
export { affects, call, queryTopics };
|
|
@@ -28,6 +28,7 @@ function createClient(invoke) {
|
|
|
28
28
|
addEncounter: (index) => invoke("box.addEncounter", [index]),
|
|
29
29
|
addFromFile: async (bytes) => invoke("box.addFromFile", [await toBase64(bytes)]),
|
|
30
30
|
get: () => invoke("box.get", []),
|
|
31
|
+
list: () => invoke("box.list", []),
|
|
31
32
|
showdown: () => invoke("box.showdown", [])
|
|
32
33
|
},
|
|
33
34
|
catalog: { names: (request) => invoke("catalog.names", [request]) },
|
|
@@ -62,6 +63,7 @@ function createClient(invoke) {
|
|
|
62
63
|
moves: () => invoke("game.moves", []),
|
|
63
64
|
natures: () => invoke("game.natures", []),
|
|
64
65
|
originGames: () => invoke("game.originGames", []),
|
|
66
|
+
progress: () => invoke("game.progress", []),
|
|
65
67
|
types: () => invoke("game.types", []),
|
|
66
68
|
version: () => invoke("game.version", [])
|
|
67
69
|
},
|
|
@@ -111,7 +113,9 @@ function createClient(invoke) {
|
|
|
111
113
|
},
|
|
112
114
|
species: { list: () => invoke("species.list", []) },
|
|
113
115
|
trainer: {
|
|
116
|
+
badges: () => invoke("trainer.badges", []),
|
|
114
117
|
get: () => invoke("trainer.get", []),
|
|
118
|
+
setBadges: (earned) => invoke("trainer.setBadges", [earned]),
|
|
115
119
|
setBattlePoints: (value) => invoke("trainer.setBattlePoints", [value]),
|
|
116
120
|
setGender: (gender) => invoke("trainer.setGender", [gender]),
|
|
117
121
|
setMoney: (amount) => invoke("trainer.setMoney", [amount]),
|
|
@@ -126,7 +130,7 @@ var overlaps = (a, b) => covers(a, b) || covers(b, a);
|
|
|
126
130
|
var affects = (changed, read) => changed.some((c) => read.some((r) => overlaps(c, r)));
|
|
127
131
|
//#endregion
|
|
128
132
|
//#region package.json
|
|
129
|
-
var version = "0.
|
|
133
|
+
var version = "0.8.0";
|
|
130
134
|
//#endregion
|
|
131
135
|
//#region src/crypto.ts
|
|
132
136
|
var modes = {
|
|
@@ -373,6 +377,7 @@ var topics = [
|
|
|
373
377
|
];
|
|
374
378
|
var queryTopics = {
|
|
375
379
|
"box.get": ["box"],
|
|
380
|
+
"box.list": ["box"],
|
|
376
381
|
"box.showdown": ["box"],
|
|
377
382
|
"catalog.names": [],
|
|
378
383
|
"encounters.search": ["game"],
|
|
@@ -388,6 +393,12 @@ var queryTopics = {
|
|
|
388
393
|
"game.moves": ["game"],
|
|
389
394
|
"game.natures": ["game"],
|
|
390
395
|
"game.originGames": ["game"],
|
|
396
|
+
"game.progress": [
|
|
397
|
+
"game",
|
|
398
|
+
"events",
|
|
399
|
+
"party",
|
|
400
|
+
"box"
|
|
401
|
+
],
|
|
391
402
|
"game.types": ["game"],
|
|
392
403
|
"game.version": ["game"],
|
|
393
404
|
"inventory.get": ["inventory"],
|
|
@@ -428,6 +439,7 @@ var queryTopics = {
|
|
|
428
439
|
"draft"
|
|
429
440
|
],
|
|
430
441
|
"species.list": ["game"],
|
|
442
|
+
"trainer.badges": ["trainer", "events"],
|
|
431
443
|
"trainer.get": ["trainer"]
|
|
432
444
|
};
|
|
433
445
|
//#endregion
|
package/package.json
CHANGED
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|