diff --git a/enum.js b/enum.js index 163017bf..6fc4c99d 100644 --- a/enum.js +++ b/enum.js @@ -37,10 +37,6 @@ const BackgroundHistoryEnum = { NoBackground: 'no_background', } -const PresetTypeEnum = { - SDPreset: 'sd_preset', - ControlNetPreset: 'controlnet_preset', -} module.exports = { clickTypeEnum, generationModeEnum, @@ -49,5 +45,4 @@ module.exports = { RequestStateEnum, BackgroundHistoryEnum, - PresetTypeEnum, } diff --git a/index.html b/index.html index c3d6875f..ba242ef4 100644 --- a/index.html +++ b/index.html @@ -55,7 +55,7 @@ .content { padding: 0 18px; - display: none; + /* display: none; */ overflow: hidden; } @@ -425,9 +425,6 @@ #tiNumberOfSteps { width: 50%; - } - - #tiNumberOfSteps { width: auto; } @@ -742,9 +739,7 @@
ControlNet
- + @@ -769,9 +764,7 @@
Extras
- +
Settings
@@ -843,14 +836,7 @@ data-tab-name="sp-viewer-tab" >Viewer - History +
-
- View your generated images on the canvas -
+
-
- - - - -
- - - - -
- -
-
- - - -
- - Progress... - - -
- -
-
- - Thumbnail Size: - - Square 1:1 -
-
-
-
- history of all the images you generated -
- Seed:00000000000 -
-
-
-
- - -
-
- -
-
- +
Explore Lexica for prompts and inspirationSelect Backend: - - Native Horde + > -->
-
- - - Resize - 2 - -
-
- - -
- No work in progress -
-
- Upscaler 1: - - - - - - -
- Upscaler 2: - - - - - - -
-
- - - Upscaler 2 visibility: - - 0 - -
-
- - - GFPGAN visibility: - - 0 - -
-
- - - CodeFormer visibility: - - 0 - -
-
- - - CodeFormer weight: - - 0 - -
+
+ +
-
- -
-
- -
- - Preset Type: - - SD Preset - ControlNet Preset - -
- - - -
- - - - - -
-
- -
-
- -
-
-
- -
- - Settings - Custom Presets - -
SD Url:
- use sharp mask - Smart Object - Live Progress Image - Restore Original Prompt - Image Cfg Scale Slider +
+ Smart Object +
+ +
+ Restore Original Prompt +
Use Colab -
- - Select Extension: - - Proxy Server - Auto111 Extension - None - - -
+
- +
-
- - - - - - - - - - - -
- -
-
-
- - Progress... - - -
- - -
-
-
- - -
- - - -
-
- - - -
- - - -
- Edit Text -
- -
- - - - - - -
-
- - - -
- - - -
- -
- -
- - - - - -
-
- - -
- - - - - - - - - - -
-
- - -
- - - - - - - - - -
-
-
- - -
- -
- - -
- -
- -
-
- - - - txt2img - img2img - inpaint - outpaint - - -
- -
-
- - -
- - - - - - - - - - -
-
- - -
- -
-
- -
-
-
-
-
- -
-
- -
-
-
-
-
-
-
-
-
- Batch Size: -
-
- Batch Count: -
-
- Sampling Steps -
-
-
-
-
-
- Selection Mode: -
- - -
- - Width: - 512 - - - - Height: - 512 - - - - -
- -
- - CFG Scale: - - - - - Denoising Strength: - 0.7 - -
- - - - Mask Blur: - - - - Mask Expansion: - - - -
- - Inpainting conditioning mask - strength: - 1 - -
- -
- - Mask Content: - fill - original - latent noise - latent nothing - -
- -
- Inpaint at Full Res - Restore Faces - Hi Res Fix -
- - - Inpaint Padding: - 0 - - -
-
- -
- Seed: - - -
- - - Select Sampler: - Euler a - Euler - LMS - Heun - DPM2 - DPM2 a - DPM++ 2S a - DPM++ 2M - DPM++ SDE - DPM fast - DPM adaptive - LMS Karras - DPM2 Karras - DPM2 a Karras - DPM++ 2S a Karras - DPM++ 2M Karras - DPM++ SDE Karras - -
+
+ +
@@ -2828,6 +1234,9 @@
+
+ +
@@ -2854,49 +1263,267 @@ >
-
- - - - - - -
- -
+
+
+ + +
+ + + +
+
+ + + +
+ + + +
+ Edit Text +
+ +
+ + + + + + +
+
+ + + +
+ + + +
+ +
+ +
+ + + + + +
+
+ + +
+ + + + + + + + + + +
+
+ + +
+ + + + + + + + + +
+
+
diff --git a/index.js b/index.js index 3e376e8f..98964c0a 100644 --- a/index.js +++ b/index.js @@ -8,29 +8,31 @@ const _log = console.log const _warn = console.warn const _error = console.error let g_timer_value = 300 // temporary global variable for testing the timer pause function -let g_version = 'v1.3.1' + +let g_version = 'v1.3.2' + let g_sd_url = 'http://127.0.0.1:7860' let g_online_data_url = 'https://raw.githubusercontent.com/AbdullahAlfaraj/Auto-Photoshop-StableDiffusion-Plugin/master/utility/online_data.json' const Jimp = require('./jimp/browser/lib/jimp.min') const Enum = require('./enum') const helper = require('./helper') -const sd_tab = require('./utility/tab/sd') const sdapi = require('./sdapi_py_re') // const exportHelper = require('./export_png') -const outpaint = require('./outpaint') + const psapi = require('./psapi') const app = window.require('photoshop').app const constants = require('photoshop').constants const { batchPlay } = require('photoshop').action const { executeAsModal } = require('photoshop').core -const dialog_box = require('./dialog_box') +// const dialog_box = require('./dialog_box') // const {entrypoints} = require('uxp') +const { sd_tab_store } = require('./typescripts/dist/bundle') const html_manip = require('./utility/html_manip') // const export_png = require('./export_png') -const viewerJs = require('./viewer') + const selection = require('./selection') const layer_util = require('./utility/layer') const sd_options = require('./utility/sdapi/options') @@ -38,8 +40,6 @@ const sd_options = require('./utility/sdapi/options') const session = require('./utility/session') const { getSettings } = require('./utility/session') -const ui = require('./utility/ui') -const preset_util = require('./utility/presets/preset') const script_horde = require('./utility/sd_scripts/horde') const prompt_shortcut = require('./utility/sdapi/prompt_shortcut') const formats = require('uxp').storage.formats @@ -52,16 +52,15 @@ const dummy = require('./utility/dummy') const general = require('./utility/general') const thumbnail = require('./thumbnail') const note = require('./utility/notification') -const sampler_data = require('./utility/sampler') + const settings_tab = require('./utility/tab/settings') //load tabs -const history_tab = require('./utility/tab/history_tab') + const image_search_tab = require('./utility/tab/image_search_tab') const lexica_tab = require('./utility/tab/lexica_tab') -const share_tab = require('./utility/tab/share_tab') +// const share_tab = require('./utility/tab/share_tab') const api = require('./utility/api') -// const ultimate_sd_upscaler = require('./ultimate_sd_upscaler/dist/ultimate_sd_upscaler') -// const ultimate_sd_upscaler_script = require('./ultimate_sd_upscaler/dist/ultimate_sd_upscaler.bundle') + const { scripts, main, @@ -71,13 +70,26 @@ const { toJS, viewer, preview, - session_ts, + // session_ts, + session_store, progress, sd_tab_ts, + // sd_tab_store, sam, settings_tab_ts, one_button_prompt, enum_ts, + multiPrompts, + ui_ts, + preset, + preset_util, + dialog_box, + sd_tab_util, + node_fs, + io_ts, + extra_page, + selection_ts, + stores, } = require('./typescripts/dist/bundle') const io = require('./utility/io') @@ -145,7 +157,6 @@ function setLogMethod(should_log_to_file = true) { } } setLogMethod(settings_tab_ts.store.data.should_log_to_file) -// const ultimate_sd_upscaler_script_test = require('./ultimate_sd_upscaler/dist/main') // const { // script_args, @@ -154,7 +165,7 @@ setLogMethod(settings_tab_ts.store.data.should_log_to_file) let g_horde_generator = new horde_native.hordeGenerator() let g_automatic_status = Enum.AutomaticStatusEnum['Offline'] -let g_models_status = false + let g_current_batch_index = 0 let g_is_laso_inapint_mode = true //REFACTOR: move to session.js @@ -181,10 +192,10 @@ async function hasSessionSelectionChanged() { return false } } -//REFACTOR: move to selection.js, add selection mode as attribute (linked to rbSelectionMode event) + async function calcWidthHeightFromSelection() { //set the width and height, hrWidth, and hrHeight using selection info and selection mode - const selection_mode = html_manip.getSelectionMode() + const selection_mode = sd_tab_store.data.selection_mode if (selection_mode === 'ratio') { //change (width and height) and (hrWidth, hrHeight) to match the ratio of selection const [width, height, hr_width, hr_height] = @@ -211,7 +222,7 @@ const eventHandler = async (event, descriptor) => { try { console.log(event, descriptor) const new_selection_info = await psapi.getSelectionInfoExe() - session_ts.store.updateProperty( + session_store.updateProperty( 'current_selection_info', new_selection_info ) @@ -277,12 +288,6 @@ async function getUniqueDocumentId() { } } -// document -// .getElementById('btnLinkCurrentDocument') -// .addEventListener('click', async () => { -// await getUniqueDocumentId() -// }) - // attach event listeners for tabs //REFACTOR: move to html_manip.js (?) - if there is no business logic here and it's only for UI. Array.from(document.querySelectorAll('.sp-tab')).forEach((theTab) => { @@ -314,28 +319,7 @@ Array.from(document.querySelectorAll('.sp-tab')).forEach((theTab) => { } } }) -//REFACTOR: move to events.js -document.getElementById('sp-viewer-tab').addEventListener('click', async () => { - if ( - g_generation_session.isActive() && - g_generation_session.mode === 'upscale' - ) { - g_sd_mode = 'upscale' - } else { - g_sd_mode = html_manip.getMode() - } -}) -//REFACTOR: move to events.js -document.getElementById('sp-viewer-tab').addEventListener('click', async () => { - moveElementToAnotherTab('batchNumberUi', 'batchNumberViewerTabContainer') - await displayUpdate() -}) -//REFACTOR: move to events.js -document - .getElementById('sp-stable-diffusion-ui-tab') - .addEventListener('click', () => { - moveElementToAnotherTab('batchNumberUi', 'batchNumber-steps-container') - }) + // entrypoints.setup({ // panels:{ @@ -408,20 +392,6 @@ function getCommentedString() { console.log('getCommentedString: ', result) } -//REFACTOR: move to helpers.js -function tempDisableElement(element, time) { - element.classList.add('disableBtn') - element.disabled = true - // element.style.opacity = '0.65' - // element.style.cursor = 'not-allowed' - setTimeout(function () { - element.disabled = false - element.classList.remove('disableBtn') - // element.style.opacity = '1.0' - // element.style.cursor = 'default' - }, time) -} - //REFACTOR: move to the notfication.js async function displayNotification(automatic_status) { if (automatic_status === Enum.AutomaticStatusEnum['RunningWithApi']) { @@ -450,12 +420,12 @@ async function checkAutoStatus() { if (heartbeat) { html_manip.setProxyServerStatus('connected', 'disconnected') - session_ts.store.data.auto_photoshop_sd_extension_status = true + session_store.data.auto_photoshop_sd_extension_status = true } else { html_manip.setProxyServerStatus('disconnected', 'connected') g_automatic_status = Enum.AutomaticStatusEnum['AutoPhotoshopSDExtensionMissing'] - session_ts.store.data.auto_photoshop_sd_extension_status = false + session_store.data.auto_photoshop_sd_extension_status = false } // html_manip.setProxyServerStatus('connected','disconnected') } else { @@ -479,173 +449,6 @@ async function checkAutoStatus() { return g_automatic_status } -//REFACTOR: move to ui.js -async function refreshUI() { - try { - const b_proxy_server_status = await updateVersionUI() - if (b_proxy_server_status) { - html_manip.setProxyServerStatus('connected', 'disconnected') - // g_automatic_status = Enum.AutomaticStatusEnum['RunningWithApi'] - } else { - html_manip.setProxyServerStatus('disconnected', 'connected') - } - - g_automatic_status = await checkAutoStatus() - await displayNotification(g_automatic_status) - - const bSamplersStatus = await initSamplers() - - g_models_status = await refreshModels() - await refreshExtraUpscalers() - - await sdapi.setInpaintMaskWeight(1.0) //set the inpaint conditional mask to 1 when the on plugin start - - //get the latest options - - await g_sd_options_obj.getOptions() - //get the selected model - const current_model_title = g_sd_options_obj.getCurrentModel() - //update the ui with that model title - const current_model_hash = - html_manip.getModelHashByTitle(current_model_title) - html_manip.autoFillInModel(current_model_hash) - - //fetch the inpaint mask weight from sd webui and update the slider with it. - const inpainting_mask_weight = - await g_sd_options_obj.getInpaintingMaskWeight() - console.log('inpainting_mask_weight: ', inpainting_mask_weight) - html_manip.autoFillInInpaintMaskWeight(inpainting_mask_weight) - - //init ControlNet Tab - - g_hi_res_upscaler_models = await sd_tab.requestGetHiResUpscalers() - - g_controlnet_max_models = await control_net.requestControlNetMaxUnits() - await control_net.initializeControlNetTab(g_controlnet_max_models) - await main.populateVAE() - } catch (e) { - console.warn(e) - } -} -//REFACTOR: move to generation_settings.js -async function refreshModels() { - let b_result = false - try { - g_models = await sdapi.requestGetModels() - if (g_models.length > 0) { - b_result = true - } - - // const models_menu_element = document.getElementById('mModelsMenu') - // models_menu_element.value = "" - document.getElementById('mModelsMenu').innerHTML = '' - - for (let model of g_models) { - // console.log(model.title)//Log - const menu_item_element = document.createElement('sp-menu-item') - menu_item_element.className = 'mModelMenuItem' - menu_item_element.innerHTML = model.title - menu_item_element.dataset.model_hash = model.hash - menu_item_element.dataset.model_title = model.title - document - .getElementById('mModelsMenu') - .appendChild(menu_item_element) - } - } catch (e) { - b_result = false - console.warn(e) - } - return b_result -} -//REFACTOR: move to generation_settings.js -async function refreshExtraUpscalers() { - try { - //cycle through hrModelsMenuClass and reset innerHTML - var hrModelsMenuClass = document.getElementsByClassName( - 'hrExtrasUpscaleModelsMenuClass' - ) - for (let i = 0; i < hrModelsMenuClass.length; i++) { - hrModelsMenuClass[i].innerHTML = '' - } - g_extra_upscalers = await sdapi.requestGetUpscalers() - - for (let model of g_extra_upscalers) { - var hrModelsMenuClass = document.getElementsByClassName( - 'hrExtrasUpscaleModelsMenuClass' - ) - for (let i = 0; i < hrModelsMenuClass.length; i++) { - const menu_item_element = document.createElement('sp-menu-item') - menu_item_element.className = 'hrExtrasUpscaleModelsMenuItem' - menu_item_element.innerHTML = model.name - hrModelsMenuClass[i].appendChild(menu_item_element) - // console.log(model + ' added to ' + hrModelsMenuClass[i].id)//Log - } - } - } catch (e) { - console.warn(e) - } -} - -//REFACTOR: move to ui.js -async function updateVersionUI() { - let bStatus = false - try { - version = await sdapi.getVersionRequest() - document.getElementById('lVersionNumber').textContent = version - if (version !== 'v0.0.0') { - bStatus = true - } - } catch (e) { - console.warn(e) - document.getElementById('lVersionNumber').textContent = 'v0.0.0' - bStatus = false - } - return bStatus -} -//REFACTOR: move to generation_settings.js -async function initSamplers() { - let bStatus = false - try { - let sampler_group = document.getElementById('sampler_group') - sampler_group.innerHTML = '' - - let samplers = await sdapi.requestGetSamplers() - if (!samplers) { - //if we failed to get the sampler list from auto1111, use the list stored in sampler.js - - samplers = sampler_data.samplers - } - - for (let sampler of samplers) { - // console.log(sampler)//Log - // sampler.name - // Euler - const rbSampler = document.createElement('sp-radio') - - rbSampler.innerHTML = sampler.name - rbSampler.setAttribute('class', 'rbSampler') - rbSampler.setAttribute('value', sampler.name) - - sampler_group.appendChild(rbSampler) - //add click event on radio button for Sampler radio button, so that when a button is clicked it change g_sd_sampler globally - - //we could delete the click() event - rbSampler.addEventListener('click', (evt) => { - g_sd_sampler = evt.target.value - console.log(`You clicked: ${g_sd_sampler}`) - }) - } - document - .getElementsByClassName('rbSampler')[0] - .setAttribute('checked', '') - if (samplers.length > 0) { - bStatus = true - } - } catch (e) { - console.warn(e) - } - return bStatus -} //REFACTOR: move to helper.js function promptShortcutExample() { let prompt_shortcut_example = { @@ -672,26 +475,21 @@ let g_image_path_to_layer = {} let g_init_images_dir = './server/python_server/init_images' //REFACTOR: move to generationSettings.js gCurrentImagePath = '' -//REFACTOR: move to generationSettings.js -let g_init_image_name = '' + // let g_init_mask_layer; //REFACTOR: move to generationSettings.js -let g_init_image_mask_name = '' + // let g_mask_related_layers = {} // let g_init_image_related_layers = {} //REFACTOR: move to generationSettings.js, Note: numberOfImages deprecated global variable // let numberOfImages = document.querySelector('#tiNumberOfImages').value //REFACTOR: move to generationSettings.js -let g_sd_mode = 'txt2img' -// let g_sd_mode_last = g_sd_mode -//REFACTOR: move to generationSettings.js -let g_sd_mode_last = g_sd_mode + //REFACTOR: move to generationSettings.js let g_sd_sampler = 'Euler a' //REFACTOR: move to generationSettings.js let g_denoising_strength = 0.7 -//REFACTOR: move to generationSettings.js -let g_use_mask_image = false + let g_models = [] // let g_models_horde = [] let g_model_title = '' @@ -710,7 +508,7 @@ let h_denoising_strength = 0.7 //REFACTOR: move to generationSettings.js let g_metadatas = [] -let g_last_seed = '-1' + //REFACTOR: move to generationSettings.js let g_can_request_progress = true let g_saved_active_layers = [] @@ -731,38 +529,12 @@ let g_sd_options_obj = new sd_options.SdOptions() g_sd_options_obj.getOptions() -// let g_width_slider = new ui.UIElement() -// g_width_slider.getValue = html_manip.getWidth -// ui_settings.uiElements.push = -let g_old_slider_width = 512 -let g_old_slider_height = 512 - -let g_hi_res_upscaler_models let g_controlnet_max_models -;(async function () { - g_hi_res_upscaler_models = await sd_tab.requestGetHiResUpscalers() - - g_controlnet_max_models = await control_net.requestControlNetMaxUnits() - - for (let model of g_hi_res_upscaler_models) { - //update the hi res upscaler models menu - let hrModelsMenuClass = - document.getElementsByClassName('hrModelsMenuClass') - for (let i = 0; i < hrModelsMenuClass.length; i++) { - const menu_item_element = document.createElement('sp-menu-item') - menu_item_element.className = 'hrModelsMenuItem' - menu_item_element.innerHTML = model - hrModelsMenuClass[i].appendChild(menu_item_element) - // console.log(model + ' added to ' + hrModelsMenuClass[i].id)//Log - } - } -})() let g_generation_session = new session.GenerationSession(0) //session manager g_generation_session.deactivate() //session starte as inactive -let g_ui = new ui.UI() -let g_ui_settings_object = ui.getUISettingsObject() +let g_ui_settings_object = ui_ts.getUISettingsObject() let g_batch_count_interrupt_status = false const requestState = { Generate: 'generate', @@ -786,68 +558,15 @@ const backendTypeEnum = { } g_generation_session.mode = generationMode['Txt2Img'] -let g_viewer_manager = new viewerJs.ViewerManager() //********** End: global variables */ -//***********Start: init function calls */ -//REFACTOR: keep in index.js -async function initPlugin() { - //*) load plugin settings - //*) load horde settings - //*) - //*) initialize the samplers - //*) - await settings_tab.loadSettings() - await horde_native.HordeSettings.loadSettings() - const bSamplersStatus = await initSamplers() //initialize the sampler - await sdapi.setInpaintMaskWeight(1.0) //set the inpaint conditional mask to 1 when the on plugin start - await refreshUI() - await displayUpdate() - // promptShortcutExample() - await loadPromptShortcut() - await refreshPromptMenue() -} -initPlugin() -// refreshModels() // get the models when the plugin loads -// initSamplers() -// updateVersionUI() -// refreshUI() -// displayUpdate() -// loadPromptShortcut() -// // promptShortcutExample() - -//***********End: init function calls */ - -//add click event on radio button mode, so that when a button is clicked it change g_sd_mode globally -//REFACTOR: move to events.js -rbModeElements = document.getElementsByClassName('rbMode') -for (let rbModeElement of rbModeElements) { - rbModeElement.addEventListener('click', async (evt) => { - try { - g_sd_mode = evt.target.value - scripts.script_store.setMode(g_sd_mode) - sd_tab_ts.store.updateProperty('mode', g_sd_mode) - // console.log(`You clicked: ${g_sd_mode}`) - await displayUpdate() - await postModeSelection() // do things after selection - } catch (e) { - console.warn(e) - } - }) -} - -//swaps g_sd_mode when clicking on extras tab and swaps it back to previous value when clicking on main tab -//REFACTOR: move to events.js document .getElementById('sp-extras-tab') .addEventListener('click', async (evt) => { try { - // g_sd_mode_last = g_sd_mode - g_sd_mode = 'upscale' - sd_tab_ts.store.updateProperty('mode', 'upscale') - console.log(`You clicked: ${g_sd_mode}`) - await displayUpdate() + sd_tab_store.updateProperty('mode', 'upscale') + await postModeSelection() // do things after selection } catch (e) { console.warn(e) @@ -858,11 +577,8 @@ document .getElementById('sp-stable-diffusion-ui-tab') .addEventListener('click', async (evt) => { try { - // g_sd_mode = g_sd_mode_last - g_sd_mode = html_manip.getMode() - sd_tab_ts.store.updateProperty('mode', html_manip.getMode()) - console.log(`mode restored to: ${g_sd_mode}`) - await displayUpdate() + sd_tab_store.updateProperty('mode', sd_tab_store.data.rb_mode) + await postModeSelection() // do things after selection } catch (e) { console.warn(e) @@ -914,7 +630,7 @@ async function deleteTempInpaintMaskLayer() { //REFACTOR: move to ui.js async function postModeSelection() { try { - if (g_sd_mode === generationMode['Inpaint']) { + if (sd_tab_store.data.rb_mode === generationMode['Inpaint']) { //check if the we already have created a mask layer await createTempInpaintMaskLayer() } else { @@ -926,44 +642,7 @@ async function postModeSelection() { console.warn(e) } } -rbMaskContentElements = document.getElementsByClassName('rbMaskContent') -//REFACTOR: move to events.js -for (let rbMaskContentElement of rbMaskContentElements) { - rbMaskContentElement.addEventListener('click', async (evt) => { - // g_inpainting_fill = evt.target.value - // console.log(`You clicked: ${g_inpainting_fill}`) - }) -} - -btnSquareClass = document.getElementsByClassName('btnSquare') -//REFACTOR: move to events.js -for (let btnSquareButton of btnSquareClass) { - btnSquareButton.addEventListener('click', async (evt) => { - // document.activeElement.blur() - setTimeout(() => { - try { - evt.target.blur() - } catch (e) { - console.warn(e) - } - }, 500) - }) -} -btnRefreshModelsClass = document.getElementsByClassName('btnRefreshModels') -//REFACTOR: move to events.js -for (let btnRefreshModel of btnRefreshModelsClass) { - btnRefreshModel.addEventListener('click', async (evt) => { - // document.activeElement.blur() - setTimeout(() => { - try { - evt.target.blur() - } catch (e) { - console.warn(e) - } - }, 500) - }) -} //REFACTOR: move to events.js document.addEventListener('mouseenter', async (event) => { try { @@ -971,7 +650,7 @@ document.addEventListener('mouseenter', async (event) => { // changing the mode will trigger it's own procedure, so doing it here again is redundant if ( g_generation_session.isActive() && - g_generation_session.mode === g_sd_mode + g_generation_session.mode === sd_tab_store.data.rb_mode ) { //if the generation session is active and the selected mode is still the same as the generation mode @@ -989,240 +668,16 @@ document.addEventListener('mouseenter', async (event) => { // if there is an active selection and if the selection has changed await calcWidthHeightFromSelection() - - if ( - g_generation_session.state === - session.SessionState['Active'] - ) { - //indicate that the session will end if you generate - //only if you move the selection while the session is active - // g_ui.endSessionUI() - const selected_mode = html_manip.getMode() - g_ui.generateModeUI(selected_mode) - } else { - // move the selection while the session is inactive - } } else { // sessionStartHtml(true)//generate more, green color //if you didn't move the selection. - // g_ui.startSessionUI() - g_ui.generateMoreUI() } } } catch (e) { console.warn(e) } }) -////add tips to element when mouse hover on an element -// function getToolTipElement(){ -// const tool_tip = document.getElementById("tool_tip") -// return tool_tip -// } -// function moveTip(x,y){ -// var tool_tip = document.getElementById("tool_tip") - -// tool_tip.style.position = 'absolute'; -// tool_tip.style.left = x; -// tool_tip.style.top = y; -// } -// document.getElementById('rbOutpaintMode').addEventListener("mouseover",(e)=>{ - -// console.log("e.shiftKey:",e.shiftKey) - -// if(e.shiftKey) -// { -// const rect = e.target.getBoundingClientRect() -// const tool_tip = getToolTipElement() -// setTimeout(()=>{ -// tool_tip.style.display = "none" -// },5000) -// tool_tip.style.display = "inline-block" - -// tool_tip.style["z-index"] = 100; -// console.log("Use this mode when you want to fill empty areas of the canvas") -// // var x = e.pageX; -// // var y = e.pageY; -// console.log("(e.pageX,e.pageY): ",(e.pageX,e.pageY)) -// const tip_x = e.pageX - (tool_tip.offsetWidth/2) -// // const tip_y = e.pageY + - tool_tip.offsetHeight -// const tip_y = rect.top + - tool_tip.offsetHeight - -// moveTip(tip_x,tip_y) -// } -// else{// rlease the shift key -// console.log("tip will disappear in 1 second") -// } - -// }); - -// document.getElementById('rbOutpaintMode').addEventListener("mouseout",(e)=>{ - -// console.log("e.shiftKey:",e.shiftKey) - -// console.log("no tip, tip will disappear in 1 second") -// // getToolTipElement().style.display = "none" - -// }); - -// show the interface that need to be shown and hide the interface that need to be hidden -//REFACTOR: move to ui.js -async function displayUpdate() { - try { - sd_tab.displayImageCfgScaleSlider(g_sd_mode) - if (g_sd_mode == 'txt2img') { - document.getElementById('slDenoisingStrength').style.display = - 'none' // hide denoising strength slider - // document.getElementById("image_viewer").style.display = 'none' // hide images - document.getElementById('init_image_container').style.display = - 'none' // hide init image - document.getElementById('init_image_mask_container').style.display = - 'none' // hide init mask - document.getElementById('slInpainting_fill').style.display = 'none' // hide inpainting fill mode - document.getElementById('chInpaintFullRes').style.display = 'none' - - document.getElementById('slInpaintingMaskWeight').style.display = - 'none' // hide inpainting conditional mask weight - - document.getElementById('chHiResFixs').style.display = 'flex' - if (html_manip.getHiResFixs()) { - document.getElementById('HiResDiv').style.display = 'block' - } - - document.getElementById('slMaskExpansion').style.display = 'none' - - document.getElementById('slInpaintPadding').style.display = 'none' - document.getElementById('slMaskBlur').style.display = 'none' - // document.getElementById('slImageCfgScale').style.display = 'none' - // document.getElementById('btnSnapAndFill').style.display = 'none'//"none" will misaligned the table // hide snap and fill button - } - - if (g_sd_mode == 'img2img') { - document.getElementById('slDenoisingStrength').style.display = - 'block' // show denoising strength - document.getElementById('slMaskExpansion').style.display = 'none' - // document.getElementById("image_viewer").style.display = 'block' - document.getElementById('init_image_container').style.display = - 'block' // hide init image - - document.getElementById('init_image_mask_container').style.display = - 'none' // hide mask - document.getElementById('slInpainting_fill').style.display = 'none' // hide inpainting fill mode - // document.getElementById('btnSnapAndFill').style.display = 'inline-flex' // hide snap and fill button mode - document.getElementById('HiResDiv').style.display = 'none' - document.getElementById('chInpaintFullRes').style.display = 'none' - document.getElementById('slInpaintPadding').style.display = 'none' - document.getElementById('slMaskBlur').style.display = 'none' - document.getElementById('chHiResFixs').style.display = 'none' - document.getElementById('slInpaintingMaskWeight').style.display = - 'block' // hide inpainting conditional mask weight - - // document.getElementById('slImageCfgScale').style.display = 'block' - } - - if (g_sd_mode == 'inpaint' || g_sd_mode == 'outpaint') { - ///fix the misalignment problem in the ui (init image is not aligned with init mask when switching from img2img to inpaint ). note: code needs refactoring - // document.getElementById('btnSnapAndFill').style.display = 'none'//"none" will misaligned the table // hide snap and fill button - document.getElementById('tableInitImageContainer').style.display = - 'none' // hide the table - document.getElementById('slMaskExpansion').style.display = 'block' - setTimeout(() => { - try { - document.getElementById( - 'tableInitImageContainer' - ).style.display = 'table' // show the table after some time so it gets rendered. - } catch (e) { - console.warn(e) - } - }, 100) - - document.getElementById('slDenoisingStrength').style.display = - 'block' - document.getElementById('init_image_mask_container').style.display = - 'block' - document.getElementById('slInpainting_fill').style.display = 'block' - document.getElementById('init_image_container').style.display = - 'block' // hide init image - document.getElementById('slInpaintingMaskWeight').style.display = - 'block' // hide inpainting conditional mask weight - - document.getElementById('HiResDiv').style.display = 'none' - document.getElementById('chInpaintFullRes').style.display = - 'inline-flex' - if (document.getElementById('chInpaintFullRes').checked) { - document.getElementById('slInpaintPadding').style.display = - 'block' - } else { - document.getElementById('slInpaintPadding').style.display = - 'none' - } - document.getElementById('slMaskBlur').style.display = 'block' - document.getElementById('chHiResFixs').style.display = 'none' - - // document.getElementById('btnInitOutpaint').style.display = 'inline-flex' - // document.getElementById('btnInitInpaint').style.display = 'inline-flex' - // document.getElementById('btnInitOutpaint').style.display = 'none' - // document.getElementById('btnInitInpaint').style.display = 'none' - } else { - //txt2img or img2img - // document.getElementById('btnInitOutpaint').style.display = 'none' - // document.getElementById('btnInitInpaint').style.display = 'none' - } - - if (g_generation_session.isActive()) { - //Note: remove the "or" operation after refactoring the code - //if the session is active - - if (g_generation_session.mode !== g_sd_mode) { - //if a generation session is active but we changed mode. the generate button will reflect that - //Note: add this code to the UI class - const generate_btns = Array.from( - document.getElementsByClassName('btnGenerateClass') - ) - generate_btns.forEach((element) => { - const selected_mode = - getCurrentGenerationModeByValue(g_sd_mode) - element.textContent = `Generate ${selected_mode}` - }) - html_manip.setGenerateButtonsColor('generate', 'generate-more') - } else { - //1) and the session is active - //2) is the same generation mode - - if (!(await hasSessionSelectionChanged())) { - //3a) and the selection hasn't change - - const generate_btns = Array.from( - document.getElementsByClassName('btnGenerateClass') - ) - - // const selected_mode = - // getCurrentGenerationModeByValue(g_sd_mode) - const generation_mode = g_generation_session.mode - const generation_name = - getCurrentGenerationModeByValue(generation_mode) - generate_btns.forEach((element) => { - element.textContent = `Generate More ${generation_name}` - }) - - html_manip.setGenerateButtonsColor( - 'generate-more', - 'generate' - ) - } else { - //3b) selection has change - } - } - } else { - //session is not active - const selected_mode = getCurrentGenerationModeByValue(g_sd_mode) - g_ui.setGenerateBtnText(`Generate ${selected_mode}`) - html_manip.setGenerateButtonsColor('generate', 'generate-more') - } - } catch (e) { - console.warn(e) - } -} // function showLayerNames () { // const app = window.require('photoshop').app // const allLayers = app.activeDocument.layers @@ -1314,1585 +769,122 @@ function sliderToResolution(sliderValue) { return sliderValue * 64 } -//REFACTOR: move to events.js -document.querySelector('#hrHeight').addEventListener('input', (evt) => { - hHeight = sliderToResolution(evt.target.value) - document.querySelector('#hHeight').textContent = hHeight -}) -//REFACTOR: move to events.js -document.querySelector('#hrWidth').addEventListener('input', (evt) => { - hWidth = sliderToResolution(evt.target.value) - document.querySelector('#hWidth').textContent = hWidth -}) +//REFACTOR: move to psapi.js +//store active layers only if they are not stored. +async function storeActiveLayers() { + setTimeout(async () => { + const layers = await app.activeDocument.activeLayers + console.log('storeActiveLayers: ', layers.length) -//REFACTOR: move to events.js -document.querySelector('#slInpaintPadding').addEventListener('input', (evt) => { - padding = evt.target.value * 4 - document.querySelector('#lInpaintPadding').textContent = padding -}) + if (layers.length > 0) { + g_saved_active_layers = layers + await psapi.unselectActiveLayersExe() + } + }, 200) -// document -// .querySelector('#slDenoisingStrength') -// .addEventListener('input', evt => { -// const denoising_string_value = evt.target.value / 100.0 -// g_denoising_strength = denoising_string_value -// // document.querySelector('#lDenoisingStrength').value= Number(denoising_string_value) -// document.querySelector('#lDenoisingStrength').textContent = -// denoising_string_value -// document.getElementById( -// 'lDenoisingStrength' -// ).innerHTML = `${denoising_string_value}` -// // console.log(`New denoising_string_value: ${document.querySelector('#tiDenoisingStrength').value}`) -// }) -// document -// .querySelector('#hrDenoisingStrength') -// .addEventListener('input', evt => { -// const denoising_string_value = evt.target.value / 100.0 -// h_denoising_strength = denoising_string_value - -// document.getElementById( -// 'hDenoisingStrength' -// ).innerHTML = `${denoising_string_value}` -// // console.log(`New denoising_string_value: ${document.querySelector('#tiDenoisingStrength').value}`) -// }) -// // document.getElementById('btnPopulate').addEventListener('click', showLayerNames) + // if (g_is_active_layers_stored == false) { + // g_saved_active_layers = await app.activeDocument.activeLayers + // g_is_active_layers_stored = true + // await psapi.unselectActiveLayersExe() + // } else { + // } +} //REFACTOR: move to psapi.js -async function snapAndFillHandler() { - try { - const isSelectionAreaValid = await psapi.checkIfSelectionAreaIsActive() - if (isSelectionAreaValid) { - if (g_generation_session.isFirstGeneration) { - // clear the layers related to the last mask operation. - // g_last_snap_and_fill_layers = await psapi.cleanLayers( - // g_last_snap_and_fill_layers - // ) - // create new layers related to the current mask operation. - await executeAsModal( - async () => { - // g_last_snap_and_fill_layers = await outpaint.snapAndFillExe(random_session_id) - await outpaint.snapAndFillExe(random_session_id) - }, - { commandName: 'Snap And Fill' } - ) - // console.log( - // 'outpaint.snapAndFillExe(random_session_id):, g_last_snap_and_fill_layers: ', - // g_last_snap_and_fill_layers - // ) - } - } else { - psapi.promptForMarqueeTool() - } - } catch (e) { - console.warn(e) +async function restoreActiveLayers() { + const layers = await app.activeDocument.activeLayers + console.log('restoreActiveLayers: ', layers.length) + if (layers.length == 0) { + await psapi.selectLayersExe(g_saved_active_layers) + g_saved_active_layers = [] } + // if (g_is_active_layers_stored == true) { + // // g_saved_active_layers = await app.activeDocument.activeLayers + // await psapi.selectLayersExe(g_saved_active_layers) + // g_is_active_layers_stored = false + // g_saved_active_layers = [] + // } } -// document -// .getElementById('btnSnapAndFill') -// .addEventListener('click', async () => { - -// await snapAndFillHandler() -// }) -//REFACTOR: move to generation.js -async function easyModeOutpaint() { +//store active selection only if they are not stored. +//REFACTOR: move to psapi.js +async function storeActiveSelection() { try { - if (g_generation_session.isFirstGeneration) { - // clear the layers related to the last mask operation. - // g_last_outpaint_layers = await psapi.cleanLayers(g_last_outpaint_layers) + setTimeout(async () => { + const layers = await app.activeDocument.activeLayers + const current_selection = await psapi.checkIfSelectionAreaIsActive() + console.log('storeActiveSelection: ', current_selection) - // create new layers related to the current mask operation. - // g_last_outpaint_layers = await outpaint.outpaintExe(random_session_id) - await outpaint.outpaintExe(random_session_id) - } + if (current_selection) { + g_saved_active_selection = current_selection + await psapi.unSelectMarqueeExe() + } + }, 200) } catch (e) { console.warn(e) } } -//REFACTOR: move to generation.js -async function btnInitInpaintHandler() { +//REFACTOR: move to psapi.js +async function restoreActiveSelection() { try { - if (g_generation_session.isFirstGeneration) { - // delete the layers of the previous mask operation - // g_last_inpaint_layers = await psapi.cleanLayers(g_last_inpaint_layers) - // store the layer of the current mask operation - // g_last_inpaint_layers = await outpaint.inpaintFasterExe(random_session_id) - await outpaint.inpaintFasterExe(random_session_id) - - // console.log ("outpaint.inpaintFasterExe(random_session_id):, g_last_inpaint_layers: ",g_last_inpaint_layers) + const current_selection = await psapi.checkIfSelectionAreaIsActive() + + console.log('restoreActiveSelection: ', current_selection) + if ( + !current_selection && + psapi.isSelectionValid(g_saved_active_selection) + ) { + await psapi.reSelectMarqueeExe(g_saved_active_selection) + g_saved_active_selection = {} } } catch (e) { console.warn(e) } } -// document -// .getElementById('btnInitInpaint') -// .addEventListener('click', async () => { -// await btnInitInpaintHandler() -// }) -//REFACTOR: move to ui.js -function toggleTwoButtonsByClass(isVisible, first_class, second_class) { - const first_class_btns = Array.from( - document.getElementsByClassName(first_class) - ) - const second_class_btns = Array.from( - document.getElementsByClassName(second_class) - ) - if (isVisible) { - //show interrup button - first_class_btns.forEach((element) => (element.style.display = 'none')) - second_class_btns.forEach( - (element) => (element.style.display = 'inline-block') - ) - // console.log('first_class_btns: ', first_class_btns) - } else { - //show generate or generate more button - first_class_btns.forEach( - (element) => (element.style.display = 'inline-block') - ) - if (g_generation_session.isActive()) { - //show generate more - // const selected_mode = getCurrentGenerationModeByValue(g_sd_mode) - const generation_mode = g_generation_session.mode - const generation_name = - getCurrentGenerationModeByValue(generation_mode) - first_class_btns.forEach( - (element) => - (element.textContent = `Generate More ${generation_name}`) - ) - } else { - //show generate button - first_class_btns.forEach( - (element) => - (element.textContent = `Generate ${getCurrentGenerationModeByValue( - g_sd_mode - )}`) - ) - } - second_class_btns.forEach((element) => (element.style.display = 'none')) - } - return isVisible -} -//REFACTOR: move to session.js -async function discardAll() { - //discard all generated images setting highlight to false - //then call discard() to garbage collect the mask related layers - try { - for (const [path, viewer_image_obj] of Object.entries( - g_viewer_manager.pathToViewerImage - )) { - try { - viewer_image_obj.active(false) //deactivate the layer - viewer_image_obj.setHighlight(false) // mark each layer as discarded - } catch (e) { - console.error(e) - } - } - await discard() // clean viewer tab - await layer_util.deleteLayers([g_generation_session.outputGroup]) //delete the group folder since it's empty - } catch (e) { - console.warn(e) - } -} -//REFACTOR: move to session.js -async function acceptAll() { - //accept all generated images by highlighting them - //then call discard() to garbage collect the mask related layers - try { - for (const [path, viewer_image_obj] of Object.entries( - g_viewer_manager.pathToViewerImage - )) { - try { - if ( - viewer_image_obj.isActive() && - viewer_image_obj instanceof viewerJs.OutputImage - ) { - //check if the active viewer_image_obj is a type of OutputImage and move it to the top of the output group folder - //this is so when we accept all layers the canvas will look the same. otherwise the image could be cover by another generated image - if ( - layer_util.Layer.doesLayerExist(viewer_image_obj.layer) - ) { - await g_generation_session.moveToTopOfOutputGroup( - viewer_image_obj.layer - ) - } - } - viewer_image_obj.setHighlight(true) // mark each layer as accepted - } catch (e) { - console.error(e) - } - } - await discard() // clean viewer tab - } catch (e) { - console.warn(e) - } -} -//REFACTOR: move to session.js -async function discardSelected() { - //discard all generated images setting highlight to false - //then call discard() to garbage collect the mask related layers - try { - for (const [path, viewer_image_obj] of Object.entries( - g_viewer_manager.pathToViewerImage - )) { - try { - if (viewer_image_obj.is_active) { - viewer_image_obj.active(false) //convert active to highlight - viewer_image_obj.setHighlight(true) //highlight the active image, since active images are not highlighted in the viewer - } - - viewer_image_obj.toggleHighlight() // if invert the highlights on all images - } catch (e) { - console.error(e) - } - } - await discard() // delete the images that currently highlighted - } catch (e) { - console.warn(e) - } -} -//REFACTOR: move to events.js -const discard_selected_class_btns = Array.from( - document.getElementsByClassName('discardSelectedClass') -) -//REFACTOR: move to events.js -discard_selected_class_btns.forEach((element) => - element.addEventListener('click', async () => { - try { - await g_generation_session.endSession( - session.GarbageCollectionState['DiscardSelected'] - ) //end session and accept only selected images - g_ui.onEndSessionUI() - } catch (e) { - console.warn(e) - } - }) -) - -//REFACTOR: move to events.js -const accept_selected_class_btns = Array.from( - document.getElementsByClassName('acceptSelectedClass') -) -//REFACTOR: move to events.js -accept_selected_class_btns.forEach((element) => - element.addEventListener('click', async () => { - try { - await g_generation_session.endSession( - session.GarbageCollectionState['AcceptSelected'] - ) //end session and accept only selected images - g_ui.onEndSessionUI() - } catch (e) { - console.warn(e) - } - }) -) -//REFACTOR: move to events.js -const accept_class_btns = Array.from( - document.getElementsByClassName('acceptClass') -) -//REFACTOR: move to events.js -accept_class_btns.forEach((element) => - element.addEventListener('click', async () => { - try { - await g_generation_session.endSession( - session.GarbageCollectionState['Accept'] - ) //end session and accept all images - g_ui.onEndSessionUI() - - // await acceptAll() - } catch (e) { - console.warn(e) - } - }) -) -//REFACTOR: move to ui.js -function toggleTwoButtons(defaultVal, first_btn_id, second_btn_id) { - if (defaultVal) { - document.getElementById(first_btn_id).style.display = 'none' // hide generate button - document.getElementById(second_btn_id).style.display = 'inline-block' // show interrupt button - } else { - document.getElementById(first_btn_id).style.display = 'inline-block' // hide generate button - document.getElementById(second_btn_id).style.display = 'none' // show interrupt button - } - return defaultVal -} -//REFACTOR: move to events.js -document.getElementById('btnRandomSeed').addEventListener('click', async () => { - document.querySelector('#tiSeed').value = '-1' -}) -//REFACTOR: move to events.js -document.getElementById('btnLastSeed').addEventListener('click', async () => { - try { - // console.log('click on Last seed') - let seed = '-1' - - if (g_last_seed >= 0) { - seed = g_last_seed.toString() //make sure the seed is a string - } - - // console.log('seed:', seed) - document.querySelector('#tiSeed').value = seed - } catch (e) { - console.warn(e) - } -}) -//REFACTOR: move to session.js -async function discard() { - try { - await executeAsModal(async () => { - await psapi.selectLayersExe([g_generation_session.outputGroup]) //must select the layer to change allLocked - g_generation_session.outputGroup.allLocked = false //unlock the session folder on session end - }) - - // console.log( - // 'click on btnCleanLayers, g_last_outpaint_layers:', - // g_last_outpaint_layers - // ) - // console.log( - // 'click on btnCleanLayers, g_last_inpaint_layers:', - // g_last_inpaint_layers - // ) - - // console.log( - // 'click on btnCleanLayers, g_last_snap_and_fill_layers:', - // g_last_snap_and_fill_layers - // ) - - // console.log('g_last_snap_and_fill_layers') - // g_last_snap_and_fill_layers = await psapi.cleanLayers( - // g_last_snap_and_fill_layers - // ) - - // if (g_last_outpaint_layers.length > 0) { - // g_last_outpaint_layers = await psapi.cleanLayers(g_last_outpaint_layers) - // console.log('g_last_outpaint_layers has 1 layers') - // } - // if (g_last_inpaint_layers.length > 0) { - // g_last_inpaint_layers = await psapi.cleanLayers(g_last_inpaint_layers) - // g_b_mask_layer_exist = false - - // } - const random_img_src = 'https://source.unsplash.com/random' - html_manip.setInitImageSrc(random_img_src) - html_manip.setInitImageMaskSrc(random_img_src) - - // psapi.cleanLayers(last_gen_layers) - await deleteNoneSelected(g_viewer_manager.pathToViewerImage) - } catch (e) { - console.warn(e) - } -} -//REFACTOR: move to events.js -Array.from(document.getElementsByClassName('discardClass')).forEach( - (element) => { - element.addEventListener('click', async () => { - //end session here - await g_generation_session.endSession( - session.GarbageCollectionState['Discard'] - ) //end session and remove all images - g_ui.onEndSessionUI() - - // await discard() - }) - } -) -//REFACTOR: move to events.js -// Array.from(document.getElementsByClassName('btnInterruptClass')).forEach( -// (element) => { -// element.addEventListener('click', async () => { -// try { -// if ( -// g_generation_session.request_status === -// Enum.RequestStateEnum['Finished'] -// ) { -// toggleTwoButtonsByClass( -// false, -// 'btnGenerateClass', -// 'btnInterruptClass' -// ) -// g_can_request_progress = false - -// return null // cann't inturrept a finished generation -// } -// g_generation_session.request_status = -// Enum.RequestStateEnum['Interrupted'] - -// g_batch_count_interrupt_status = true // interrupt batch count generations -// const backend_type = html_manip.getBackendType() - -// if (backend_type === backendTypeEnum['HordeNative']) { -// //interrupt the horde - -// await g_horde_generator.interrupt() -// } else { -// //interrupt auto1111 - -// json = await sdapi.requestInterrupt() -// } - -// toggleTwoButtonsByClass( -// false, -// 'btnGenerateClass', -// 'btnInterruptClass' -// ) -// g_can_request_progress = false - -// // g_can_request_progress = toggleTwoButtons(false,'btnGenerate','btnInterrupt') -// } catch (e) { -// // g_can_request_progress = toggleTwoButtons(false,'btnGenerate','btnInterrupt') -// toggleTwoButtonsByClass( -// false, -// 'btnGenerateClass', -// 'btnInterruptClass' -// ) -// g_can_request_progress = false -// console.warn(e) -// } -// }) -// } -// ) -//REFACTOR: move to psapi.js -//store active layers only if they are not stored. -async function storeActiveLayers() { - setTimeout(async () => { - const layers = await app.activeDocument.activeLayers - console.log('storeActiveLayers: ', layers.length) - - if (layers.length > 0) { - g_saved_active_layers = layers - await psapi.unselectActiveLayersExe() - } - }, 200) - - // if (g_is_active_layers_stored == false) { - // g_saved_active_layers = await app.activeDocument.activeLayers - // g_is_active_layers_stored = true - // await psapi.unselectActiveLayersExe() - // } else { - // } -} -//REFACTOR: move to psapi.js -async function restoreActiveLayers() { - const layers = await app.activeDocument.activeLayers - console.log('restoreActiveLayers: ', layers.length) - if (layers.length == 0) { - await psapi.selectLayersExe(g_saved_active_layers) - g_saved_active_layers = [] - } - // if (g_is_active_layers_stored == true) { - // // g_saved_active_layers = await app.activeDocument.activeLayers - // await psapi.selectLayersExe(g_saved_active_layers) - // g_is_active_layers_stored = false - // g_saved_active_layers = [] - // } -} - -//store active selection only if they are not stored. -//REFACTOR: move to psapi.js -async function storeActiveSelection() { - try { - setTimeout(async () => { - const layers = await app.activeDocument.activeLayers - const current_selection = await psapi.checkIfSelectionAreaIsActive() - console.log('storeActiveSelection: ', current_selection) - - if (current_selection) { - g_saved_active_selection = current_selection - await psapi.unSelectMarqueeExe() - } - }, 200) - } catch (e) { - console.warn(e) - } -} -//REFACTOR: move to psapi.js -async function restoreActiveSelection() { - try { - const current_selection = await psapi.checkIfSelectionAreaIsActive() - - console.log('restoreActiveSelection: ', current_selection) - if ( - !current_selection && - psapi.isSelectionValid(g_saved_active_selection) - ) { - await psapi.reSelectMarqueeExe(g_saved_active_selection) - g_saved_active_selection = {} - } - } catch (e) { - console.warn(e) - } -} -//REFACTOR: move to events.js -document.querySelector('#taPrompt').addEventListener('focus', async () => { - // if (!g_generation_session.isLoadingActive) { - // console.log('taPrompt focus') - // // console.log('we are in prompt textarea') - // // console.log("g_is_active_layers_stored: ",g_is_active_layers_stored) - // await storeActiveLayers() - // await storeActiveSelection() - // // await psapi.unselectActiveLayersExe() - // } -}) -//REFACTOR: move to events.js -document.querySelector('#taPrompt').addEventListener('blur', async () => { - // console.log('taPrompt blur') - // // console.log('we are out of prompt textarea') - // // await psapi.unselectActiveLayersExe() - // // console.log("g_is_active_layers_stored: ",g_is_active_layers_stored) - // await restoreActiveLayers() - // await restoreActiveSelection() -}) -//REFACTOR: move to events.js -document - .querySelector('#taNegativePrompt') - .addEventListener('focus', async () => { - // if (!g_generation_session.isLoadingActive) { - // console.log('taNegativePrompt focus') - // // console.log('we are in prompt textarea') - // await storeActiveLayers() - // await storeActiveSelection() - // // await psapi.unselectActiveLayersExe() - // } - }) -//REFACTOR: move to events.js -document - .querySelector('#taNegativePrompt') - .addEventListener('blur', async () => { - // console.log('taNegativePrompt blur') - // // console.log('we are out of prompt textarea') - // // await psapi.unselectActiveLayersExe() - // await restoreActiveLayers() - // await restoreActiveSelection() - }) //REFACTOR: unused, remove? function updateMetadata(new_metadata) { const metadatas = [] try { for (metadata of new_metadata) { metadata_json = JSON.parse(metadata) - console.log('metadata_json:', metadata_json) - metadatas.push(metadata_json) - } - } catch (e) { - console.warn(e) - } - return metadatas -} - -//REFACTOR: move to generation_settings.js -async function getExtraSettings() { - let payload = {} - try { - const html_manip = require('./utility/html_manip') - const upscaling_resize = html_manip.getUpscaleSize() - const gfpgan_visibility = html_manip.getGFPGANVisibility() - const codeformer_visibility = html_manip.getCodeFormerVisibility() - const codeformer_weight = html_manip.getCodeFormerWeight() - const selection_info = await psapi.getSelectionInfoExe() - const width = selection_info.width * upscaling_resize - const height = selection_info.height * upscaling_resize - //resize_mode = 0 means "resize to upscaling_resize" - //resize_mode = 1 means "resize to width and height" - payload['resize_mode'] = 0 - payload['show_extras_results'] = 0 - payload['gfpgan_visibility'] = gfpgan_visibility - payload['codeformer_visibility'] = codeformer_visibility - payload['codeformer_weight'] = codeformer_weight - payload['upscaling_resize'] = upscaling_resize - payload['upscaling_resize_w'] = width - payload['upscaling_resize_h'] = height - payload['upscaling_crop'] = true - const upscaler1 = document.querySelector('#hrModelsMenuUpscale1').value - payload['upscaler_1'] = upscaler1 === undefined ? 'None' : upscaler1 - const upscaler2 = document.querySelector('#hrModelsMenuUpscale2').value - payload['upscaler_2'] = upscaler2 === undefined ? 'None' : upscaler2 - const extras_upscaler_2_visibility = html_manip.getUpscaler2Visibility() - payload['extras_upscaler_2_visibility'] = extras_upscaler_2_visibility - payload['upscale_first'] = false - const uniqueDocumentId = await getUniqueDocumentId() - payload['uniqueDocumentId'] = uniqueDocumentId - - // const layer = await app.activeDocument.activeLayers[0] - const layer = await app.activeDocument.activeLayers[0] - const old_name = layer.name - - // image_name = await app.activeDocument.activeLayers[0].name - - //convert layer name to a file name - let image_name = psapi.layerNameToFileName( - old_name, - layer.id, - random_session_id - ) - image_name = `${image_name}.png` - - const base64_image = g_generation_session.activeBase64InitImage - - payload['image'] = base64_image - } catch (e) { - console.error(e) - } - return payload -} -//REFACTOR: move to generation.js -async function generateImg2Img(settings) { - let json = {} - try { - const backend_type = html_manip.getBackendType() - if (backend_type === backendTypeEnum['HordeNative']) { - json = await g_horde_generator.generate() - // json = await g_horde_generator.toGenerationFormat(images_info) - // json = { images_info: images_info } - } else if ( - backend_type === backendTypeEnum['Auto1111'] || - backend_type === backendTypeEnum['Auto1111HordeExtension'] - ) { - //checks on index 0 as if not enabled ingores the rest - const b_enable_control_net = control_net.isControlNetModeEnable() - - if (b_enable_control_net) { - //use control net - json = await sdapi.requestControlNetImg2Img(settings) - } else { - json = await sdapi.requestImg2Img(settings) - } - } - } catch (e) { - console.warn(e) - json = {} - } - - return json -} -//REFACTOR: move to generation.js -async function generateTxt2Img(settings) { - let json = {} - try { - const backend_type = html_manip.getBackendType() - if (backend_type === backendTypeEnum['HordeNative']) { - json = await g_horde_generator.generate() - // json = await g_horde_generator.toGenerationFormat(images_info) - // json = { images_info: images_info } - } else if ( - backend_type === backendTypeEnum['Auto1111'] || - backend_type === backendTypeEnum['Auto1111HordeExtension'] - ) { - // const b_enable_control_net = control_net.getEnableControlNet() - const b_enable_control_net = control_net.isControlNetModeEnable() - - if (b_enable_control_net) { - //use control net - - json = await sdapi.requestControlNetTxt2Img(settings) - } else { - json = await sdapi.requestTxt2Img(settings) - } - } - } catch (e) { - console.warn(e) - json = {} - } - - return json -} -//REFACTOR: move to selection.js -async function hasSelectionChanged(new_selection, old_selection) { - if ( - new_selection.left === old_selection.left && - new_selection.bottom === old_selection.bottom && - new_selection.right === old_selection.right && - new_selection.top === old_selection.top - ) { - return false - } else { - return true - } -} -//REFACTOR: move to generation.js -async function easyModeGenerate(mode) { - try { - //save laso selection - if (g_is_laso_inapint_mode) { - await selection.makeMaskChannelExe('mask') - } - } catch (e) { - console.warn(e) - } - - try { - if ( - g_generation_session.request_status !== - Enum.RequestStateEnum['Finished'] - ) { - app.showAlert( - 'A generation is still active in the background. \nPlease check your Automatic1111 command line.' - ) - return null - } - - g_generation_session.request_status = - Enum.RequestStateEnum['Generating'] - await executeAsModal(async (context) => { - const document_type = await findDocumentType() - - const history_id = await context.hostControl.suspendHistory({ - documentID: app.activeDocument.id, //TODO: change this to the session document id - name: 'Correct Background', - }) - //store selection - //store active layer - const selectionInfo = await psapi.getSelectionInfoExe() - await psapi.unSelectMarqueeExe() - const active_layers = app.activeDocument.activeLayers - - //1)check if the documnet has a background layer - - await correctDocumentType(document_type) - - //retore selection - //restore active layer - await psapi.reSelectMarqueeExe(selectionInfo) - await psapi.selectLayersExe(active_layers) - await context.hostControl.resumeHistory(history_id) - }) - - // if ( - // (await layer_util.hasBackgroundLayer()) === false && //doesn't have backround layer - // (await note.Notification.backgroundLayerIsMissing()) === false //and the user cancled the creation of background layer - // ) { - // // const is_canceld = - // // await note.Notification.backgroundLayerIsMissing() // - - // return false - // } - const backend_type = html_manip.getBackendType() - if ( - backend_type === backendTypeEnum['Auto1111'] || - backend_type === backendTypeEnum['Auto1111HordeExtension'] - ) { - g_automatic_status = await checkAutoStatus() - await displayNotification(g_automatic_status) - if ( - g_automatic_status === Enum.AutomaticStatusEnum['Offline'] || - g_automatic_status === Enum.AutomaticStatusEnum['RunningNoApi'] - ) { - g_generation_session.request_status = - Enum.RequestStateEnum['Finished'] - return false - } - } - - let active_layer = await app.activeDocument.activeLayers[0] // store the active layer so we could reselected after the session end clean up - //make sure you have selection area active on the canvas - const isSelectionAreaValid = await psapi.checkIfSelectionAreaIsActive() - if ( - !isSelectionAreaValid && // no selection area - (await note.Notification.inactiveSelectionArea( - g_generation_session.isActive() - )) === false // means did not activate the session selection area if it's available - ) { - g_generation_session.request_status = - Enum.RequestStateEnum['Finished'] - return null - } - - console.log('easyModeGenerate mdoe: ', mode) - if (psapi.isSelectionValid(g_generation_session.selectionInfo)) { - // check we have an old selection stored - const new_selection = await psapi.getSelectionInfoExe() - if ( - await hasSelectionChanged( - new_selection, - g_generation_session.selectionInfo - ) - ) { - // check the new selection is difference than the old - // end current session - g_generation_session.selectionInfo = new_selection - try { - await g_generation_session.endSession( - session.GarbageCollectionState['Accept'] - ) //end session and accept all images - g_ui.onEndSessionUI() - - // await acceptAll() - } catch (e) { - console.warn(e) - } - } - } else { - // store selection value - g_generation_session.selectionInfo = - await psapi.getSelectionInfoExe() - } - - if (g_generation_session.isActive()) { - //active session - - if (g_generation_session.mode !== mode) { - //active session but it's a new mode - - await g_generation_session.endSession( - session.GarbageCollectionState['Accept'] - ) - g_ui.onEndSessionUI() - //start new session after you ended the old one - await g_generation_session.startSession() - - g_generation_session.mode = mode - } - } else { - // new session - g_generation_session.mode = mode - await g_generation_session.startSession() //start the session and create a output folder - } - - await psapi.selectLayersExe([active_layer]) //reselect the active layer since the clean up of the session sometime will change which layer is selected - let init_image - let mask - if (mode === 'txt2img') { - //Note: keep it for clearity/ readibility - } else if (mode === 'img2img' || mode === 'upscale') { - // await snapAndFillHandler() - init_image = await io.getImg2ImgInitImage() - g_generation_session.activeBase64InitImage = init_image - } else if (mode === 'inpaint') { - // await btnInitInpaintHandler() - - if (g_is_laso_inapint_mode) { - await selection.channelToSelectionExe('mask') - const [init_image_base64, mask_base64] = - await selection.inpaintLassoInitImageAndMask() - init_image = init_image_base64 - mask = mask_base64 - g_generation_session.activeBase64InitImage = init_image - g_generation_session.activeBase64MaskImage = mask - } else { - //normal inpaint - try { - await executeAsModal(async () => { - g_inpaint_mask_layer.opacity = 100 - }) - } catch (e) { - console.warn(e) - } - const obj = await io.getInpaintInitImageAndMask() - - init_image = obj.init_image - g_generation_session.activeBase64InitImage = init_image - mask = obj.mask - g_generation_session.activeBase64MaskImage = mask - } - } else if (mode === 'outpaint') { - // await easyModeOutpaint() - const obj = await io.getOutpaintInitImageAndMask() - init_image = obj.init_image - g_generation_session.activeBase64InitImage = init_image - mask = obj.mask - g_generation_session.activeBase64MaskImage = mask - } - - //safe to close the previous generation_session outputfolder, since closing a folder will unselect any layer in it. - ////and the plugin may still need those layers for inpainting mode for example. - - await g_generation_session.closePreviousOutputGroup() - - const settings = - mode === 'upscale' ? await getExtraSettings() : await getSettings() - - if (mode === 'img2img') { - // const init_image = await io.getImg2ImgInitImage() - settings['init_images'] = [init_image] - } else if (mode === 'inpaint') { - // const { init_image, mask } = await io.getInpaintInitImageAndMask() - settings['init_images'] = [init_image] - // settings['mask'] = mask - } else if (mode === 'outpaint') { - settings['init_images'] = [init_image] - // settings['mask'] = mask - } - g_generation_session.last_settings = settings - - async function updateViewerStore(store, images) { - try { - if (typeof images === 'undefined' || !images) { - return null - } - store.data.images = images - const thumbnail_list = [] - for (const base64 of images) { - const thumbnail = await io.createThumbnail(base64, 300) - thumbnail_list.push(thumbnail) - } - - store.data.thumbnails = thumbnail_list - } catch (e) { - console.warn(e) - console.warn('images: ', images) - } - } - - await updateViewerStore(viewer.init_store, settings?.init_images) - await updateViewerStore(viewer.mask_store, [settings?.mask]) - - // g_generation_session.is_control_net = control_net.getEnableControlNet() - g_generation_session.is_control_net = - control_net.isControlNetModeEnable() - - await generate(settings, mode) - - // await g_generation_session.deleteProgressLayer() // delete the old progress layer - await g_generation_session.deleteProgressImage() - } catch (e) { - await g_generation_session.deleteProgressImage() - console.warn(e) - g_generation_session.request_status = Enum.RequestStateEnum['Finished'] - } - toggleTwoButtonsByClass(false, 'btnGenerateClass', 'btnInterruptClass') - g_can_request_progress = false - - g_generation_session.request_status = Enum.RequestStateEnum['Finished'] - - if (g_generation_session.sudo_timer_id) { - //disable the sudo timer at the end of the generation - g_generation_session.sudo_timer_id = clearInterval( - g_generation_session.sudo_timer_id - ) - } -} - -//REFACTOR: move to generation.js -async function generate(settings, mode) { - try { - //pre generation - // toggleGenerateInterruptButton(true) - - // const isFirstGeneration = !(g_is_generation_session_active) // check if this is the first generation in the session - // const isFirstGeneration = !(g_generation_session.isActive()) // check if this is the first generation in the session - const isFirstGeneration = g_generation_session.isFirstGeneration - - // g_generation_session.startSession() - g_generation_session.activate() - - g_ui.onStartSessionUI() - // toggleTwoButtons(true,'btnGenerate','btnInterrupt') - toggleTwoButtonsByClass(true, 'btnGenerateClass', 'btnInterruptClass') - g_can_request_progress = true - //wait 2 seconds till you check for progress - - if ( - html_manip.getBackendType() !== backendTypeEnum['HordeNative'] // anything other than horde native - ) { - setTimeout(async function () { - // change this to setInterval() - await progressRecursive() - }, 2000) - } - - if ( - html_manip.getBackendType() === backendTypeEnum['Auto1111'] && - g_generation_session.is_control_net - ) { - g_generation_session.sudo_timer_id = general.sudoTimer() - } - - console.log(settings) - - g_generation_session.request_status = - Enum.RequestStateEnum['Generating'] - let json = {} - if (mode == 'txt2img') { - json = await generateTxt2Img(settings) - } else if ( - mode == 'img2img' || - mode == 'inpaint' || - mode == 'outpaint' - ) { - // json = await sdapi.requestImg2Img(settings) - - json = await generateImg2Img(settings) - } else if (mode == 'upscale') { - json = await sdapi.requestExtraSingleImage(settings) - } - - // if (g_sd_mode == 'outpaint') { - // // await easyModeOutpaint() - // json = await sdapi.requestImg2Img(settings) - - // // await setTimeout(async ()=> { - // // json = await sdapi.requestImg2Img(settings) - - // // },5000) - // } - if ( - g_generation_session.request_status === - Enum.RequestStateEnum['Interrupted'] - ) { - //when generate request get interrupted. reset progress bar to 0, discard any meta data and images returned from the proxy server by returning from the function. - html_manip.updateProgressBarsHtml(0) - console.log( - 'before delete g_generation_session.progress_layer: ', - g_generation_session.progress_layer - ) - await g_generation_session.deleteProgressImage() - console.log( - 'after delete g_generation_session.progress_layer: ', - g_generation_session.progress_layer - ) - //check whether request was "generate" or "generate more" - //if it's generate discard the session - if (isFirstGeneration) { - await loadViewerImages() - await g_generation_session.endSession( - session.GarbageCollectionState['Discard'] - ) //end session and delete all images - g_ui.onEndSessionUI() - - // //delete all mask related layers - } - g_generation_session.request_status = - Enum.RequestStateEnum['Finished'] - return null - } - - // check if json is empty {}, {} means the proxy server didn't return a valid data - if (Object.keys(json).length === 0) { - if (isFirstGeneration) { - await g_generation_session.endSession( - session.GarbageCollectionState['Discard'] - ) //end session and delete all images - g_ui.onEndSessionUI() - - // //delete all mask related layers - } - g_generation_session.request_status = - Enum.RequestStateEnum['Finished'] - return null - } - - //post generation: will execute only if the generate request doesn't get interrupted - //get the updated metadata from json response - - // g_metadatas = updateMetadata(json.images_info.auto_metadata) - g_last_seed = json.images_info[0]?.auto_metadata?.Seed - //finished generating, set the button back to generate - - // toggleTwoButtons(false,'btnGenerate','btnInterrupt') - toggleTwoButtonsByClass(false, 'btnGenerateClass', 'btnInterruptClass') - g_can_request_progress = false - html_manip.updateProgressBarsHtml(0) - - const images_info = json?.images_info - // gImage_paths = images_info.images_paths - //open the generated images from disk and load them onto the canvas - // const b_use_silent_import = - // document.getElementById('chUseSilentMode').checked - - if (isFirstGeneration) { - //this is new generation session - - // g_generation_session.image_paths_to_layers = - // await silentImagesToLayersExe(images_info) - - g_generation_session.base64OutputImages = {} //delete all previouse images, Note move this to session end () - for (const image_info of images_info) { - const path = image_info['path'] - const base64_image = image_info['base64'] - g_generation_session.base64OutputImages[path] = base64_image - const [document_name, image_name] = path.split('/') - await io.saveFileInSubFolder( - base64_image, - document_name, - image_name - ) //save the output image - const json_file_name = `${image_name.split('.')[0]}.json` - settings['auto_metadata'] = image_info?.auto_metadata - await io.saveJsonFileInSubFolder( - settings, - document_name, - json_file_name - ) //save the settings - } - - g_number_generation_per_session = 1 - g_generation_session.isFirstGeneration = false - } else { - // generation session is active so we will generate more - - // let last_images_paths = await silentImagesToLayersExe(images_info) - - for (const image_info of images_info) { - const path = image_info['path'] - const base64_image = image_info['base64'] - g_generation_session.base64OutputImages[path] = base64_image - const [document_name, image_name] = path.split('/') - await io.saveFileInSubFolder( - base64_image, - document_name, - image_name - ) - const json_file_name = `${image_name.split('.')[0]}.json` - settings['auto_metadata'] = image_info?.auto_metadata - await io.saveJsonFileInSubFolder( - settings, - document_name, - json_file_name - ) //save the settings - } - - // g_generation_session.image_paths_to_layers = { - // ...g_generation_session.image_paths_to_layers, - // ...last_images_paths, - // } - g_number_generation_per_session++ - } - await psapi.reSelectMarqueeExe(g_generation_session.selectionInfo) - //update the viewer - const base64_list = Object.entries( - g_generation_session.base64OutputImages - ).map((obj) => obj[1] ?? '') - - const thumbnail_list = [] - for (const base64 of base64_list) { - const thumbnail = await io.createThumbnail(base64, 300) - thumbnail_list.push(thumbnail) - } - - viewer.store.updateProperty('thumbnails', thumbnail_list) - viewer.store.updateProperty('images', base64_list) - //load react viewer - //*) extract thumbnails - //*) extract images - //*) on thumbnail click - //*) delete previous layer if it exist - //*) load image to canvas - //*) - - // - await loadViewerImages() - - //esnures that progress bars are set to 0 (as last progress request call might have returned less than 100%) - updateProgressBarsHtml(0) - } catch (e) { - console.error(`btnGenerate.click(): `, e) - g_generation_session.request_status = Enum.RequestStateEnum['Finished'] - } - g_generation_session.request_status = Enum.RequestStateEnum['Finished'] -} -//REFACTOR: move to events.js -Array.from(document.getElementsByClassName('btnGenerateClass')).forEach( - (btn) => { - btn.addEventListener('click', async (evt) => { - tempDisableElement(evt.target, 5000) - const numberOfBatchCount = parseInt( - document.querySelector('#tiNumberOfBatchCount').value - ) - for (let i = 0; i < numberOfBatchCount; i++) { - if (g_batch_count_interrupt_status === true) { - break - } - g_current_batch_index = i - await easyModeGenerate(g_sd_mode) - } - g_batch_count_interrupt_status = false // reset for next generation - g_current_batch_index = 0 // reset curent_batch_number - }) - } -) //REFACTOR: move to events.js - -document - .getElementById('btnRefreshModels') - .addEventListener('click', async (e) => { - await refreshUI() - await sd_tab.refreshSDTab() - tempDisableElement(e.target, 3000) - }) -//REFACTOR: move to events.js -document.querySelector('#mModelsMenu').addEventListener('change', (evt) => { - const model_index = evt.target.selectedIndex - console.log(`Selected item: ${evt.target.selectedIndex}`) - let model = g_models[0] - if (model_index < g_models.length) { - model = g_models[model_index] - } - // g_model_name = `${model.model_name}.ckpt` - g_model_title = model.title - console.log('g_model_title: ', g_model_title) - sdapi.requestSwapModel(g_model_title) -}) -//REFACTOR: move to events.js -document.querySelectorAll('.btnLayerToSelection').forEach((el) => { - el.addEventListener('click', async () => { - try { - const isSelectionAreaValid = - await psapi.checkIfSelectionAreaIsActive() - if (isSelectionAreaValid) { - const validSelection = isSelectionAreaValid - await psapi.layerToSelection(validSelection) - } else { - await psapi.promptForMarqueeTool() - } - } catch (e) { - console.warn(e) - } - }) -}) - -//REFACTOR: move to events.js -document - .getElementById('btnSetInitImageViewer') - .addEventListener('click', async () => { - //set init image event listener, use when session is active - const layer = await app.activeDocument.activeLayers[0] - const image_info = await psapi.silentSetInitImage( - layer, - random_session_id - ) - const image_name = image_info['name'] - const path = `./server/python_server/init_images/${image_name}` - g_viewer_manager.addInitImageLayers(layer, path, false) - await g_viewer_manager.loadInitImageViewerObject(path) - // await loadInitImageViewerObject( - // group, - // snapshot, - // solid_background, - // path, - // auto_delete, - // base64_image - // ) - }) -//REFACTOR: move to psapi.js -async function setMaskViewer() { - try { - await executeAsModal(async () => { - if (g_viewer_manager.mask_solid_background) { - g_viewer_manager.mask_solid_background.visible = true - } - }) - const layer = g_viewer_manager.maskGroup - // const layer = await app.activeDocument.activeLayers[0] - const mask_info = await psapi.silentSetInitImageMask( - layer, - random_session_id - ) - const image_name = mask_info['name'] - const path = `./server/python_server/init_images/${image_name}` - g_viewer_manager.addMaskLayers(layer, path, false, mask_info['base64']) //can be autodeleted? - await psapi.unselectActiveLayersExe() - } catch (e) { - console.warn(e) - } -} -//REFACTOR: move to events.js -document - .getElementById('btnSetMaskViewer') - .addEventListener('click', async () => { - await setMaskViewer() - }) - -//REFACTOR: move to psapi.js -function moveElementToAnotherTab(elementId, newParentId) { - const element = document.getElementById(elementId) - document.getElementById(newParentId).appendChild(element) -} - -// moveElementToAnotherTab("batchNumberUi","batchNumberViewerTabContainer") -//REFACTOR: move to ui.js -function updateProgressBarsHtml(new_value) { - document.querySelectorAll('.pProgressBars').forEach((el) => { - // id = el.getAttribute("id") - // console.log("progressbar id:", id) - el.setAttribute('value', new_value) - }) - document.querySelectorAll('.lProgressLabel').forEach((el) => { - console.log('updateProgressBarsHtml: ', new_value) - if (new_value > 0) el.innerHTML = 'In progress...' - else el.innerHTML = 'No work in progress' - }) - // document.querySelector('#pProgressBar').value -} -//REFACTOR: move to ui.js -async function updateProgressImage(progress_base64) { - try { - await executeAsModal(async (context) => { - const history_id = await context.hostControl.suspendHistory({ - documentID: app.activeDocument.id, //TODO: change this to the session document id - name: 'Progress Image', - }) - await g_generation_session.deleteProgressLayer() // delete the old progress layer - - //update the progress image - const selection_info = await g_generation_session.selectionInfo - const b_exsit = layer_util.Layer.doesLayerExist( - g_generation_session.progress_layer - ) - if (!b_exsit) { - const layer = await io.IO.base64ToLayer( - progress_base64, - 'temp_progress_image.png', - selection_info.left, - selection_info.top, - selection_info.width, - selection_info.height - ) - g_generation_session.progress_layer = layer // sotre the new progress layer// TODO: make sure you delete the progress layer when the geneeration request end - } else { - // if ,somehow, the layer still exsit - await layer_util.deleteLayers([ - g_generation_session.progress_layer, - ]) // delete the old progress layer - } - await context.hostControl.resumeHistory(history_id) - }) - } catch (e) { - console.warn(e) - } -} -//REFACTOR: move to ui.js -async function progressRecursive() { - try { - let json = await sdapi.requestProgress() - // document.querySelector('#pProgressBar').value = json.progress * 100 - const progress_value = json.progress * 100 - if (g_generation_session.sudo_timer_id) { - //for sudo timer update - //for controlnet only: disable the sudo timer when the real timer start - // - if (progress_value > 1) { - //disable the sudo timer at the end of the generation - g_generation_session.sudo_timer_id = clearInterval( - g_generation_session.sudo_timer_id - ) - } - } else { - //for normal progress bar - - html_manip.updateProgressBarsHtml(progress_value) - } - - if ( - json?.current_image && - g_generation_session.request_status === - Enum.RequestStateEnum['Generating'] - ) { - const base64_url = general.base64ToBase64Url(json.current_image) - preview.store.updateProperty('image', json.current_image) - - const progress_image_html = document.getElementById('progressImage') - const container_width = document.querySelector( - '#divProgressImageViewerContainer' - ).offsetWidth - //*) find the parent container width - //*) set the width of the image to auto - //*) scale to closest while keeping the ratio, the hieght should not be larger than the width of the container - - // height: 10000px; - // width: auto; - // background-size: contain; - - // progress_image_html.style.backgroundSize = 'contain' - // progress_image_html.style.height = '10000px' - - // document.getElementById( - // 'divProgressImageViewerContainer' - // ).style.backgroundImage = `url('${base64_url}')` - - html_manip.setProgressImageSrc(base64_url) - - // if (progress_image_html.style.width !== 'auto') { - // progress_image_html.style.width = 'auto' - // } - // if ((progress_image_html.style.height = 'auto' !== 'auto')) { - // progress_image_html.style.height = 'auto' - // } - - // progress_image_html = new_height - // progress_image_html.style.width = progress_image_html.naturalWidth - // progress_image_html.style.height = progress_image_html.naturalHeight - - if ( - g_generation_session.last_settings.batch_size === 1 && - settings_tab.getUseLiveProgressImage() - ) { - //only update the canvas if the number of images are one - //don't update the canvas with multiple images. - await updateProgressImage(json.current_image) - } - } - if (g_generation_session.isActive() && g_can_request_progress == true) { - //refactor this code - setTimeout(async () => { - await progressRecursive() - }, 1000) - } - } catch (e) { - console.warn(e) - if ( - g_generation_session.isActive() && - g_can_request_progress === true - ) { - setTimeout(async () => { - await progressRecursive() - }, 1000) - } - } -} -//REFACTOR: move to ui.js -function changeImage() { - let img = document.getElementById('img1') - img.src = 'https://source.unsplash.com/random' -} - -// document.getElementById('btnChangeImage').addEventListener('click', changeImage) -//REFACTOR: move to psapi.js -async function imageToSmartObject() { - const { batchPlay } = require('photoshop').action - const { executeAsModal } = require('photoshop').core - - try { - // const file = await fs.getFileForOpening() - // token = await fs.getEntryForPersistentToken(file); - // const entry = await fs.getEntryForPersistentToken(token); - // const session_token = await fs.createSessionToken(entry); - // // let token = await fs.createSessionToken(entry) - await executeAsModal( - async () => { - console.log('imageToSmartObject():') - const storage = require('uxp').storage - const fs = storage.localFileSystem - let pluginFolder = await fs.getPluginFolder() - let img = await pluginFolder.getEntry( - 'output- 1672730735.1670313.png' - ) - const result = await batchPlay( - [ - { - _obj: 'placeEvent', - ID: 95, - null: { - _path: img, - _kind: 'local', - }, - freeTransformCenterState: { - _enum: 'quadCenterState', - _value: 'QCSAverage', - }, - offset: { - _obj: 'offset', - horizontal: { - _unit: 'pixelsUnit', - _value: 0, - }, - vertical: { - _unit: 'pixelsUnit', - _value: 0, - }, - }, - replaceLayer: { - _obj: 'placeEvent', - from: { - _ref: 'layer', - _id: 56, - }, - to: { - _ref: 'layer', - _id: 70, - }, - }, - _options: { - dialogOptions: 'dontDisplay', - }, - }, - ], - { - synchronousExecution: true, - modalBehavior: 'execute', - } - ) - }, - { - commandName: 'Create Label', - } - ) + console.log('metadata_json:', metadata_json) + metadatas.push(metadata_json) + } } catch (e) { - console.log('imageToSmartObject() => error: ') console.warn(e) } + return metadatas } -// document.getElementById('btnNewLayer').addEventListener('click', imageToSmartObject ) -//REFACTOR: move to psapi.js -async function placeEmbedded(image_name, dir_entery) { - //silent importer - - try { - // console.log('placeEmbedded(): image_path: ', image_path) - - const formats = require('uxp').storage.formats - const storage = require('uxp').storage - const fs = storage.localFileSystem - // const names = image_path.split('/') - // const length = names.length - // const image_name = names[length - 1] - // const project_name = names[length - 2] - let image_dir = dir_entery - // const image_dir = `./server/python_server/output/${project_name}` - // image_path = "output/f027258e-71b8-430a-9396-0a19425f2b44/output- 1674323725.126322.png" - - // let img_dir = await .getEntry(image_dir) - // const file = await img_dir.createFile('output- 1674298902.0571606.png', {overwrite: true}); - - const file = await image_dir.createFile(image_name, { overwrite: true }) - - const img = await file.read({ format: formats.binary }) - const token = await storage.localFileSystem.createSessionToken(file) - let place_event_result - await executeAsModal(async () => { - const result = await batchPlay( - [ - { - _obj: 'placeEvent', - ID: 6, - null: { - _path: token, - _kind: 'local', - }, - freeTransformCenterState: { - _enum: 'quadCenterState', - _value: 'QCSAverage', - }, - offset: { - _obj: 'offset', - horizontal: { - _unit: 'pixelsUnit', - _value: 0, - }, - vertical: { - _unit: 'pixelsUnit', - _value: 0, - }, - }, - _isCommand: true, - _options: { - dialogOptions: 'dontDisplay', - }, - }, - ], - { - synchronousExecution: true, - modalBehavior: 'execute', - } - ) - console.log('placeEmbedd batchPlay result: ', result) - - place_event_result = result[0] - }) - - return place_event_result - } catch (e) { - console.warn(e) +//REFACTOR: move to selection.js +async function hasSelectionChanged(new_selection, old_selection) { + if ( + new_selection.left === old_selection.left && + new_selection.bottom === old_selection.bottom && + new_selection.right === old_selection.right && + new_selection.top === old_selection.top + ) { + return false + } else { + return true } } + +//REFACTOR: move to ui.js +function updateProgressBarsHtml(new_value) { + document.querySelectorAll('.pProgressBars').forEach((el) => { + // id = el.getAttribute("id") + // console.log("progressbar id:", id) + el.setAttribute('value', new_value) + }) + document.querySelectorAll('.lProgressLabel').forEach((el) => { + console.log('updateProgressBarsHtml: ', new_value) + if (new_value > 0) el.innerHTML = 'In progress...' + else el.innerHTML = 'No work in progress' + }) + // document.querySelector('#pProgressBar').value +} + //REFACTOR: move to psapi.js function _base64ToArrayBuffer(base64) { var binary_string = window.atob(base64) @@ -3029,8 +1021,6 @@ async function placeImageB64ToLayer(image_path, entery) { //silent importer try { - console.log('placeEmbedded(): image_path: ', image_path) - const formats = require('uxp').storage.formats const storage = require('uxp').storage const fs = storage.localFileSystem @@ -3099,8 +1089,6 @@ async function placeImageB64ToLayer(image_path, entery) { } } -// document.getElementById('btnImageFileToLayer').addEventListener('click', placeEmbedded) - // open an image in the plugin folder as new document //REFACTOR: move to document.js async function openImageAction() { @@ -3195,7 +1183,7 @@ async function silentImagesToLayersExe_old(images_info) { // if (base64_images) { // placeEventResult = await base64ToFile(base64_images) //silent import into the document // } else { - // placeEventResult = await placeEmbedded(image_path) //silent import into the document + // } placeEventResult = await base64ToFile(image_info.base64) //silent import into the document @@ -3282,7 +1270,7 @@ async function silentImagesToLayersExe(images_info) { // if (base64_images) { // placeEventResult = await base64ToFile(base64_images) //silent import into the document // } else { - // placeEventResult = await placeEmbedded(image_path) //silent import into the document + // } // imported_layer = await base64ToFile(image_info.base64) //silent import into the document const selection_info = await g_generation_session.selectionInfo @@ -3337,8 +1325,6 @@ async function silentImagesToLayersExe(images_info) { g_generation_session.isLoadingActive = false } -// document.getElementById('btnLoadImages').addEventListener('click',ImagesToLayersExe) - //stack layer to original document //REFACTOR: move to psapi.js async function stackLayers() { @@ -3376,19 +1362,6 @@ async function stackLayers() { } }) } -//REFACTOR: move to events.js -document.getElementById('collapsible').addEventListener('click', function () { - this.classList.toggle('active') - var content = this.nextElementSibling - console.log('content:', content) - if (content.style.display === 'block') { - content.style.display = 'none' - this.textContent = 'Show Samplers' - } else { - content.style.display = 'block' - this.textContent = 'Hide Samplers' - } -}) function removeInitImageFromViewer() {} function removeMaskFromViewer() {} @@ -3465,291 +1438,12 @@ async function turnMaskVisible( console.warn(e) } } -//REFACTOR: move to viewer.js -async function loadInitImageViewerObject( - group, - snapshot, - solid_background, - path, - auto_delete, - base64_image -) { - const initImage = g_viewer_manager.addInitImage( - group, - snapshot, - solid_background, - path, - auto_delete - ) - - const init_img_html = createViewerImgHtml( - './server/python_server/init_images/', - path, - base64_image - ) - initImage.createThumbnailNew(init_img_html) - g_viewer_manager.init_image_container.appendChild( - initImage.thumbnail_container - ) - initImage.setImgHtml(init_img_html) - - init_img_html.addEventListener('click', async (e) => { - await viewerThumbnailclickHandler(e, initImage) - }) -} -//REFACTOR: move to viewer.js -async function loadViewerImages() { - try { - //get the images path - console.log( - 'g_generation_session.image_paths_to_layers:', - g_generation_session.image_paths_to_layers - ) - - const output_dir_relative = './server/python_server/' - // const init_image_container = document.getElementById( - // 'divInitImageViewerContainer' - // ) - const mask_container = document.getElementById( - 'divInitMaskViewerContainer' - ) - const output_image_container = document.getElementById( - 'divViewerImagesContainer' - ) - - // while(container.firstChild){ - // container.removeChild(container.firstChild); - // } - image_paths = Object.keys(g_generation_session.image_paths_to_layers) - // console.log('image_paths: ', image_paths) - let i = 0 - - // const viewer_layers = [] - - // if(g_viewer_manager.g_init_image_related_layers.hasOwnProperty('init_image_group') ) - if (g_viewer_manager.initGroup) { - //it means we are in an img2img related mode - - const paths = Object.keys(g_viewer_manager.initImageLayersJson) - for (const path of paths) { - if (!g_viewer_manager.hasViewerImage(path)) { - // const group = - // g_viewer_manager.initImageLayersJson[path].group - // const snapshot = - // g_viewer_manager.initImageLayersJson[path].snapshot - // const solid_background = - // g_viewer_manager.initImageLayersJson[path] - // .solid_background - // const auto_delete = - // g_viewer_manager.initImageLayersJson[path].autoDelete - // const base64_image = - // g_generation_session.base64initImages[path] - // await loadInitImageViewerObject( - // group, - // snapshot, - // solid_background, - // path, - // auto_delete, - // base64_image - // ) - await g_viewer_manager.loadInitImageViewerObject(path) - - // await NewViewerImageClickHandler(init_img_html, initImage) // create click handler for each images - } - } - } - - // if (g_mask_related_layers.hasOwnProperty('mask_group')) { - if (g_viewer_manager.maskGroup) { - const path = `./server/python_server/init_images/${g_init_image_mask_name}` - if (!g_viewer_manager.hasViewerImage(path)) { - // const group = g_mask_related_layers['mask_group'] - // const white_mark = g_mask_related_layers['white_mark'] - // const solid_background = g_mask_related_layers['solid_black'] - - const group = g_viewer_manager.maskLayersJson[path].group - const white_mark = - g_viewer_manager.maskLayersJson[path].white_mark - const solid_background = - g_viewer_manager.maskLayersJson[path].solid_background - const mask_obj = g_viewer_manager.addMask( - group, - white_mark, - solid_background, - path - ) - - const mask_img_html = createViewerImgHtml( - './server/python_server/init_images/', - g_init_image_mask_name, - g_generation_session.base64maskImage[path] - ) - - mask_obj.createThumbnailNew(mask_img_html) - mask_container.appendChild(mask_obj.thumbnail_container) - mask_obj.setImgHtml(mask_img_html) - - // await NewViewerImageClickHandler(mask_img_html, mask_obj) // create click handler for each images ,viewer_layers)// create click handler for each images - - mask_img_html.addEventListener('click', async (e) => { - await viewerThumbnailclickHandler(e, mask_obj) - }) - - // await viewerImageClickHandler(mask_img_html,viewer_layers)// create click handler for each images - } - } - - // console.log('image_paths: ', image_paths) - let lastOutputImage - for (const path of image_paths) { - // const path = image_path - //check if viewer obj already exist by using the path on hard drive - if (!g_viewer_manager.hasViewerImage(path)) { - //create viewer object if it doesn't exist - - //create an html image element and attach it container, and link it to the viewer obj - - const layer = g_generation_session.image_paths_to_layers[path] - const img = createViewerImgHtml( - output_dir_relative, - path, - g_generation_session.base64OutputImages[path] - ) - const output_image_obj = g_viewer_manager.addOutputImage( - layer, - path - ) - lastOutputImage = output_image_obj - const b_button_visible = - g_generation_session.mode !== generationMode['Txt2Img'] - ? true - : false - - output_image_obj.createThumbnailNew(img, b_button_visible) - // output_image_obj.setImgHtml(img) - // if (g_generation_session.mode !== generationMode['Txt2Img']) { - // //we don't need a button in txt2img mode - // // output_image_obj.addButtonHtml() - // } - output_image_container.appendChild( - output_image_obj.thumbnail_container - ) - //add on click event handler to the html img - // await NewViewerImageClickHandler(img, output_image_obj) - img.addEventListener('click', async (e) => { - await viewerThumbnailclickHandler(e, output_image_obj) - }) - } - - // i++ - } - - const thumbnail_size_slider = document.getElementById('slThumbnailSize') - scaleThumbnailsEvenHandler( - thumbnail_size_slider.value, - thumbnail_size_slider.max, - thumbnail_size_slider.min - ) - if (lastOutputImage) { - //select the last generate/output image - // lastOutputImage.img_html.click() - await executeAsModal(async () => { - await lastOutputImage.click(Enum.clickTypeEnum['Click']) - }) - } - } catch (e) { - console.error(`loadViewer images: `, e) - } -} -//REFACTOR: move to session.js -async function deleteNoneSelected(viewer_objects) { - try { - // visible layer - //delete all hidden layers - - await executeAsModal(async () => { - for (const [path, viewer_object] of Object.entries( - viewer_objects - )) { - try { - // if (viewer_object.getHighlight() || viewer_object.is_active){//keep it if it's highlighted - // const path = viewer_object.path - - viewer_object.visible(true) //make them visiable on the canvas - - await viewer_object.delete() //delete the layer from layers stack - - // if(viewer_object.state === viewer.ViewerObjState['Unlink']){ - // viewer_object.unlink() // just delete the html image but keep the layer in the layers stack - // viewer_object.visible(true)//make them visiable on the canvas - // }else if(viewer_object.state === viewer.ViewerObjState['Delete']){// delete it if it isn't highlighted - // await viewer_object.delete()//delete the layer from layers stack - - // } - delete g_generation_session.image_paths_to_layers[path] - } catch (e) { - console.warn(e) - } - } - - //Refactor: move to viewerManager.onSessionEnd() - g_viewer_manager.pathToViewerImage = {} - g_viewer_manager.initImageLayersJson = {} - g_viewer_manager.outputImages = [] - - g_generation_session.image_paths_to_layers = {} - }) - } catch (e) { - console.warn(e) - } -} - -// document.getElementById('btnLoadViewer').addEventListener('click', loadViewerImages) - -//REFACTOR: move to document.js -// async function moveHistoryImageToLayer(img) { -// let image_path = img.dataset.path -// const image_path_escape = image_path.replace(/\o/g, '/o') //escape string "\o" in "\output" - -// // load the image from "data:image/png;base64," base64_str -// const base64_image = img.src.replace('data:image/png;base64,', '') -// // await base64ToFile(base64_image) -// const metadata_json = JSON.parse(img.dataset.metadata_json_string) -// const to_x = metadata_json['selection_info']?.left -// const to_y = metadata_json['selection_info']?.top -// const width = metadata_json['selection_info']?.width -// const height = metadata_json['selection_info']?.height -// await io.IO.base64ToLayer( -// base64_image, -// 'History Image', -// to_x, -// to_y, -// width, -// height -// ) -// } - -//REFACTOR: move to document.js -async function loadPromptShortcut() { - try { - let prompt_shortcut = await sdapi.loadPromptShortcut() - if (!prompt_shortcut || prompt_shortcut === {}) { - prompt_shortcut = promptShortcutExample() - } - // var JSONInPrettyFormat = JSON.stringify(prompt_shortcut, undefined, 4); - // document.getElementById('taPromptShortcut').value = JSONInPrettyFormat - html_manip.setPromptShortcut(prompt_shortcut) // fill the prompt shortcut textarea - await refreshPromptMenue() //refresh the prompt menue - } catch (e) { - console.warn(`loadPromptShortcut warning: ${e}`) - } -} //REFACTOR: move to events.js document .getElementById('btnLoadPromptShortcut') .addEventListener('click', async function () { - await loadPromptShortcut() + await sd_tab_util.loadPromptShortcut() }) //REFACTOR: move to events.js document @@ -3773,7 +1467,7 @@ document console.log(JSONInPrettyFormat) document.getElementById('taPromptShortcut').value = JSONInPrettyFormat - await refreshPromptMenue() + await refreshPromptMenu() } catch (e) { console.warn(`loadPromptShortcut warning: ${e}`) } @@ -3810,18 +1504,24 @@ document } }) -var chHiResFixs = document.getElementById('chHiResFixs') -var div = document.getElementById('HiResDiv') -//REFACTOR: move to events.js -chHiResFixs.addEventListener('change', function () { - if (chHiResFixs.checked) { - div.style.display = 'block' - } else { - div.style.display = 'none' +//REFACTOR: move to document.js +async function loadPromptShortcut() { + try { + let prompt_shortcut = await sdapi.loadPromptShortcut() + if (!prompt_shortcut || prompt_shortcut === {}) { + prompt_shortcut = promptShortcutExample() + } + + // var JSONInPrettyFormat = JSON.stringify(prompt_shortcut, undefined, 4); + // document.getElementById('taPromptShortcut').value = JSONInPrettyFormat + html_manip.setPromptShortcut(prompt_shortcut) // fill the prompt shortcut textarea + await refreshPromptMenu() //refresh the prompt menue + } catch (e) { + console.warn(`loadPromptShortcut warning: ${e}`) } -}) +} //REFACTOR: move to ui.js -async function refreshPromptMenue() { +async function refreshPromptMenu() { try { //get the prompt_shortcut_json //iterate over the each entery @@ -3859,7 +1559,7 @@ document document .getElementById('btnRefreshPromptShortcutMenu') .addEventListener('click', async () => { - await refreshPromptMenue() + await refreshPromptMenu() }) //REFACTOR: move to ui.js function changePromptShortcutKey(new_key) { @@ -3870,40 +1570,6 @@ function changePromptShortcutValue(new_value) { document.getElementById('ValuePromptShortcut').value = new_value } -// adding a listner here for the inpaint_mask_strengh to be able to use api calls, allowing to dynamicly change the value -// a set button could be added to the ui to reduce the number of api calls in case of a slow connection -//REFACTOR: move to events.js -document - .querySelector('#slInpaintingMaskWeight') - .addEventListener('input', async (evt) => { - const label_value = evt.target.value / 100 - document.getElementById( - 'lInpaintingMaskWeight' - ).innerHTML = `${label_value}` - // await sdapi.setInpaintMaskWeight(label_value) - }) -//REFACTOR: move to events.js -document - .querySelector('#slInpaintingMaskWeight') - .addEventListener('change', async (evt) => { - try { - const label_value = evt.target.value / 100 - document.getElementById( - 'lInpaintingMaskWeight' - ).innerHTML = `${label_value}` - await sdapi.setInpaintMaskWeight(label_value) - - // //get the inpaint mask weight from the webui sd - // await g_sd_options_obj.getOptions() - // const inpainting_mask_weight = - // await g_sd_options_obj.getInpaintingMaskWeight() - - // console.log('inpainting_mask_weight: ', inpainting_mask_weight) - // html_manip.autoFillInInpaintMaskWeight(inpainting_mask_weight) - } catch (e) { - console.warn(e) - } - }) //REFACTOR: move to document.js async function downloadIt(link, writeable_entry, image_file_name) { const image = await fetch(link) @@ -3957,34 +1623,6 @@ async function downloadItExe(link, writeable_entry, image_file_name) { return new_layer } -//REFACTOR: move to session.js or selection.js -async function activateSessionSelectionArea() { - try { - if (psapi.isSelectionValid(session_ts.store.data.selectionInfo)) { - await psapi.reSelectMarqueeExe(session_ts.store.data.selectionInfo) - await eventHandler() - } - } catch (e) { - console.warn(e) - } -} -//REFACTOR: move to events.js -document - .getElementById('btnSelectionArea') - .addEventListener('click', async () => { - // try { - // if (psapi.isSelectionValid(g_generation_session.selectionInfo)) { - // await psapi.reSelectMarqueeExe( - // g_generation_session.selectionInfo - // ) - // await eventHandler() - // } - // } catch (e) { - // console.warn(e) - // } - await activateSessionSelectionArea() - }) - //REFACTOR: move to psapi.js function base64ToSrc(base64_image) { const image_src = `data:image/png;base64, ${base64_image}` @@ -4010,51 +1648,7 @@ function getDimensions(image) { // } }) } -//REFACTOR: move to ui.js -function scaleThumbnailsEvenHandler(scale_index, max_index, min_index) { - const slider_max = max_index - const slider_min = min_index - const scaler_value = general.mapRange(scale_index, 0, slider_max, 0, 2) - g_viewer_manager.thumbnail_scaler = scaler_value - try { - g_viewer_manager.scaleThumbnails( - 0, - 0, - 0, - 0, - g_viewer_manager.thumbnail_scaler - ) - } catch (e) { - console.warn(e) - } -} -//REFACTOR: move to events.js -document.getElementById('slThumbnailSize').addEventListener('input', (evt) => { - scaleThumbnailsEvenHandler(evt.target.value, evt.target.max, evt.target.min) -}) -//REFACTOR: move to events.js -document.getElementById('linkWidthHeight').addEventListener('click', (evt) => { - evt.target.classList.toggle('blackChain') - const b_state = !evt.target.classList.contains('blackChain') //if doesn't has blackChain means => it's white => b_state == true - html_manip.setLinkWidthHeightState(b_state) -}) -//REFACTOR: move to events.js -document - .getElementById('chSquareThumbnail') - .addEventListener('click', (evt) => { - if (evt.target.checked) { - g_viewer_manager.isSquareThumbnail = true - } else { - g_viewer_manager.isSquareThumbnail = false - } - const thumbnail_size_slider = document.getElementById('slThumbnailSize') - scaleThumbnailsEvenHandler( - thumbnail_size_slider.value, - thumbnail_size_slider.max, - thumbnail_size_slider.min - ) - }) //REFACTOR: move to events.js function switchMenu(rb) { @@ -4072,7 +1666,7 @@ function switchMenu(rb) { .getElementById(tab_page_name) .querySelector(`.${contianer_class}`) // .querySelector('.subTabOptionsContainer') - // const radio_group = document.getElementById('rgSubTab') + rb.checked = true option_container.appendChild(radio_group) }) @@ -4085,28 +1679,6 @@ function switchMenu(rb) { } } -//REFACTOR: move to ui.js -async function updateResDifferenceLabel() { - const ratio = await selection.Selection.getImageToSelectionDifference() - const arrow = ratio >= 1 ? '↑' : '↓' - let final_ratio = ratio // this ratio will always be >= 1 - if (ratio >= 1) { - // percentage = percentage >= 1 ? percentage : 1 / percentage - - // const percentage_str = `${arrow}X${percentage.toFixed(2)}` - - // console.log('scale_info_str: ', scale_info_str) - // console.log('percentage_str: ', percentage_str) - document - .getElementById('res-difference') - .classList.remove('res-decrease') - } else { - final_ratio = 1 / ratio - document.getElementById('res-difference').classList.add('res-decrease') - } - const ratio_str = `${arrow}x${final_ratio.toFixed(2)}` - document.getElementById('res-difference').innerText = ratio_str -} //REFACTOR: move to events.js document .getElementById('btnSaveHordeSettings') @@ -4133,11 +1705,7 @@ const submenu = { Label: 'Prompts Library', 'data-tab-name': 'sp-prompts-library-tab', }, - history: { - value: 'history', - Label: 'History', - 'data-tab-name': 'sp-history-tab', - }, + lexica: { value: 'lexica', Label: 'Lexica', @@ -4209,7 +1777,7 @@ function switchMenu_new(rb) { .getElementById(tab_page_name) .querySelector(`.${contianer_class}`) // .querySelector('.subTabOptionsContainer') - // const radio_group = document.getElementById('rgSubTab') + rb.checked = true option_container.appendChild(radio_group) }) @@ -4237,25 +1805,9 @@ Array.from(document.querySelectorAll('.rbSubTab')).forEach((rb) => { switchMenu(rb) }) -document.getElementById('scrollToPrompt').addEventListener('click', () => { - document - .querySelector('#search_second_panel > div.previewContainer') - .scrollIntoView() - // document.getElementById('taPrompt').scrollIntoView() -}) - // document.getElementById('scrollToViewer').addEventListener('click', () => { // document // .querySelector('#sp-stable-diffusion-ui-tab-page .reactViewerContainer') // .scrollIntoView() // }) - -// class CustomElement extends HTMLElement { -// constructor() { -// super() -// this.attachShadow({ mode: 'open' }) -// this.shadowRoot.innerHTML = '

Hello World!

' -// } -// } -// customElements.define('custom-element', CustomElement) diff --git a/main/dist/all.bundle.js b/main/dist/all.bundle.js deleted file mode 100644 index fbd6955c..00000000 --- a/main/dist/all.bundle.js +++ /dev/null @@ -1,49816 +0,0 @@ -/******/ (() => { // webpackBootstrap -/******/ var __webpack_modules__ = ({ - -/***/ "../stable-diffusion-webui/extensions/Auto-Photoshop-StableDiffusion-Plugin/dialog_box.js": -/*!************************************************************************************************!*\ - !*** ../stable-diffusion-webui/extensions/Auto-Photoshop-StableDiffusion-Plugin/dialog_box.js ***! - \************************************************************************************************/ -/***/ ((module) => { - -async function prompt(heading, body, buttons = ['Cancel', 'Ok'], options = { - title: heading, - size: { - width: 360, - height: 280 - } -}) { - const [dlgEl, formEl, headingEl, dividerEl, bodyEl, footerEl] = ['dialog', 'form', 'sp-heading', 'sp-divider', 'sp-body', 'footer'].map(tag => document.createElement(tag)); - [headingEl, dividerEl, bodyEl, footerEl].forEach(el => { - el.style.margin = '6px'; - el.style.width = 'calc(100% - 12px)'; - }); - formEl.setAttribute('method', 'dialog'); - formEl.addEventListener('submit', () => dlgEl.close()); - footerEl.style.marginTop = '26px'; - dividerEl.setAttribute('size', 'large'); - headingEl.textContent = heading; - bodyEl.textContent = body; - buttons.forEach((btnText, idx) => { - const btnEl = document.createElement('sp-button'); - btnEl.setAttribute('variant', idx === buttons.length - 1 ? btnText.variant || 'cta' : 'secondary'); - if (idx === buttons.length - 1) btnEl.setAttribute('autofocus', 'autofocus'); - if (idx < buttons.length - 1) btnEl.setAttribute('quiet'); - btnEl.textContent = btnText.text || btnText; - btnEl.style.marginLeft = '12px'; - btnEl.addEventListener('click', () => dlgEl.close(btnText.text || btnText)); - footerEl.appendChild(btnEl); - }); - [headingEl, dividerEl, bodyEl, footerEl].forEach(el => formEl.appendChild(el)); - dlgEl.appendChild(formEl); - document.body.appendChild(dlgEl); - return dlgEl.uxpShowModal(options); -} - -// const r1 = await prompt( -// 'Upload Large File', -// 'This is a large file (over 100MB) -- it may take a few moments to upload.', -// ['Skip', 'Upload'] -// ) -// if ((r1 || 'Upload') !== 'Upload') { -// /* cancelled or No */ -// } else { -// /* Yes */ -// } - -// const r2 = await prompt( -// 'Delete File', -// 'Are you sure you wish to delete this file? This action cannot be undone.', -// ['Cancel', { variant: 'warning', text: 'Delete' }] -// ) -// if (r2 !== 'Delete') { -// /* nope, don't do it! */ -// } else { -// /* Do the delete */ -// } - -module.exports = { - prompt -}; - -/***/ }), - -/***/ "../stable-diffusion-webui/extensions/Auto-Photoshop-StableDiffusion-Plugin/enum.js": -/*!******************************************************************************************!*\ - !*** ../stable-diffusion-webui/extensions/Auto-Photoshop-StableDiffusion-Plugin/enum.js ***! - \******************************************************************************************/ -/***/ ((module) => { - -const clickTypeEnum = { - Click: 'click', - ShiftClick: 'shift_click', - AltClick: 'alt_click', - SecondClick: 'second_click' //when we click a thumbnail that is active/ has orange border -}; - -const generationModeEnum = { - Txt2Img: 'txt2img', - Img2Img: 'img2img', - Inpaint: 'inpaint', - Outpaint: 'outpaint', - Upscale: 'upscale' -}; -const AutomaticStatusEnum = { - NoApi: 'no_api', - Offline: 'offline', - RunningNoApi: 'running_no_api', - RunningWithApi: 'running_with_api' -}; -const ViewerObjectTypeEnum = { - OutputImage: 'output_image', - InitImage: 'init_image', - MaskImage: 'mask_image' -}; -const RequestStateEnum = { - Generating: 'generating', - // in the generation process - Interrupted: 'interrupted', - // canceled/ interrupted - Finished: 'finished' // finished generating -}; - -const DocumentTypeEnum = { - NoBackground: 'no_background', - ImageBackground: 'image_background', - SolidBackground: 'solid_background', - ArtBoard: 'artboard' -}; -const BackgroundHistoryEnum = { - CorrectBackground: 'correct_background', - NoBackground: 'no_background' -}; -const PresetTypeEnum = { - SDPreset: 'sd_preset', - ControlNetPreset: 'controlnet_preset' -}; -module.exports = { - clickTypeEnum, - generationModeEnum, - AutomaticStatusEnum, - ViewerObjectTypeEnum, - RequestStateEnum, - DocumentTypeEnum, - BackgroundHistoryEnum, - PresetTypeEnum -}; - -/***/ }), - -/***/ "../stable-diffusion-webui/extensions/Auto-Photoshop-StableDiffusion-Plugin/jimp/browser/lib/jimp.min.js": -/*!***************************************************************************************************************!*\ - !*** ../stable-diffusion-webui/extensions/Auto-Photoshop-StableDiffusion-Plugin/jimp/browser/lib/jimp.min.js ***! - \***************************************************************************************************************/ -/***/ ((module, __unused_webpack_exports, __webpack_require__) => { - -function ownKeys(object,enumerableOnly){var keys=Object.keys(object);if(Object.getOwnPropertySymbols){var symbols=Object.getOwnPropertySymbols(object);enumerableOnly&&(symbols=symbols.filter(function(sym){return Object.getOwnPropertyDescriptor(object,sym).enumerable;})),keys.push.apply(keys,symbols);}return keys;}function _objectSpread(target){for(var i=1;i=o?(n[i++]=parseInt(r/o,10),r%=o):i>0&&(n[i++]=0);s=i,u=this.dstAlphabet.slice(r,r+1).concat(u);}while(0!==i);return u;},i.prototype.isValid=function(t){for(var e=0;e=0;s--)if(u[s]!==h[s])return!1;for(s=u.length-1;s>=0;s--)if(o=u[s],!d(t[o],e[o],r,i))return!1;return!0;}function b(t,e,r){d(t,e,!0)&&f(t,e,r,"notDeepStrictEqual",b);}function g(t,e){if(!t||!e)return!1;if("[object RegExp]"==Object.prototype.toString.call(e))return e.test(t);try{if(t instanceof e)return!0;}catch(t){}return!Error.isPrototypeOf(e)&&!0===e.call({},t);}function _(t){var e;try{t();}catch(t){e=t;}return e;}function v(t,e,r,i){var n;if("function"!=typeof e)throw new TypeError('"block" argument must be a function');"string"==typeof r&&(i=r,r=null),n=_(e),i=(r&&r.name?" ("+r.name+").":".")+(i?" "+i:"."),t&&!n&&f(n,r,"Missing expected exception"+i);var a="string"==typeof i,o=!t&&E.isError(n),s=!t&&n&&!r;if((o&&a&&g(n,r)||s)&&f(n,r,"Got unwanted exception"+i),t&&n&&r&&!g(n,r)||!t&&n)throw n;}function y(t,e){t||f(t,!0,e,"==",y);}var w=t("object-assign"),E=t("util/"),x=Object.prototype.hasOwnProperty,S=Array.prototype.slice,k="foo"===function(){}.name,M=e.exports=c,A=/\s*function\s+([^\(\s]*)\s*/;M.AssertionError=function(t){this.name="AssertionError",this.actual=t.actual,this.expected=t.expected,this.operator=t.operator,t.message?(this.message=t.message,this.generatedMessage=!1):(this.message=l(this),this.generatedMessage=!0);var e=t.stackStartFunction||f;if(Error.captureStackTrace)Error.captureStackTrace(this,e);else{var r=new Error();if(r.stack){var i=r.stack,n=s(e),a=i.indexOf("\n"+n);if(a>=0){var o=i.indexOf("\n",a+1);i=i.substring(o+1);}this.stack=i;}}},E.inherits(M.AssertionError,Error),M.fail=f,M.ok=c,M.equal=function(t,e,r){t!=e&&f(t,e,r,"==",M.equal);},M.notEqual=function(t,e,r){t==e&&f(t,e,r,"!=",M.notEqual);},M.deepEqual=function(t,e,r){d(t,e,!1)||f(t,e,r,"deepEqual",M.deepEqual);},M.deepStrictEqual=function(t,e,r){d(t,e,!0)||f(t,e,r,"deepStrictEqual",M.deepStrictEqual);},M.notDeepEqual=function(t,e,r){d(t,e,!1)&&f(t,e,r,"notDeepEqual",M.notDeepEqual);},M.notDeepStrictEqual=b,M.strictEqual=function(t,e,r){t!==e&&f(t,e,r,"===",M.strictEqual);},M.notStrictEqual=function(t,e,r){t===e&&f(t,e,r,"!==",M.notStrictEqual);},M.throws=function(t,e,r){v(!0,t,e,r);},M.doesNotThrow=function(t,e,r){v(!1,t,e,r);},M.ifError=function(t){if(t)throw t;},M.strict=w(y,M,{equal:M.strictEqual,deepEqual:M.deepStrictEqual,notEqual:M.notStrictEqual,notDeepEqual:M.notDeepStrictEqual}),M.strict.strict=M.strict;var I=Object.keys||function(t){var e=[];for(var r in t)x.call(t,r)&&e.push(r);return e;};}).call(this,"undefined"!=typeof __webpack_require__.g?__webpack_require__.g:"undefined"!=typeof self?self:void 0!==window?window:{});},{"object-assign":84,"util/":28}],26:[function(t,e,r){"function"==typeof Object.create?e.exports=function(t,e){t.super_=e,t.prototype=Object.create(e.prototype,{constructor:{value:t,enumerable:!1,writable:!0,configurable:!0}});}:e.exports=function(t,e){t.super_=e;var r=function(){};r.prototype=e.prototype,t.prototype=new r(),t.prototype.constructor=t;};},{}],27:[function(t,e,r){e.exports=function(t){return t&&"object"==typeof t&&"function"==typeof t.copy&&"function"==typeof t.fill&&"function"==typeof t.readUInt8;};},{}],28:[function(t,e,r){(function(e,i){function n(t,e){var i={seen:[],stylize:o};return arguments.length>=3&&(i.depth=arguments[2]),arguments.length>=4&&(i.colors=arguments[3]),m(e)?i.showHidden=e:e&&r._extend(i,e),w(i.showHidden)&&(i.showHidden=!1),w(i.depth)&&(i.depth=2),w(i.colors)&&(i.colors=!1),w(i.customInspect)&&(i.customInspect=!0),i.colors&&(i.stylize=a),u(i,t,i.depth);}function a(t,e){var r=n.styles[e];return r?"["+n.colors[r][0]+"m"+t+"["+n.colors[r][1]+"m":t;}function o(t,e){return t;}function s(t){var e={};return t.forEach(function(t,r){e[t]=!0;}),e;}function u(t,e,i){if(t.customInspect&&e&&M(e.inspect)&&e.inspect!==r.inspect&&(!e.constructor||e.constructor.prototype!==e)){var n=e.inspect(i,t);return v(n)||(n=u(t,n,i)),n;}var a=h(t,e);if(a)return a;var o=Object.keys(e),m=s(o);if(t.showHidden&&(o=Object.getOwnPropertyNames(e)),k(e)&&(o.indexOf("message")>=0||o.indexOf("description")>=0))return l(e);if(0===o.length){if(M(e)){var b=e.name?": "+e.name:"";return t.stylize("[Function"+b+"]","special");}if(E(e))return t.stylize(RegExp.prototype.toString.call(e),"regexp");if(S(e))return t.stylize(Date.prototype.toString.call(e),"date");if(k(e))return l(e);}var g,_="",y=!1,w=["{","}"];if(p(e)&&(y=!0,w=["[","]"]),M(e)){var x=e.name?": "+e.name:"";_=" [Function"+x+"]";}return E(e)&&(_=" "+RegExp.prototype.toString.call(e)),S(e)&&(_=" "+Date.prototype.toUTCString.call(e)),k(e)&&(_=" "+l(e)),0!==o.length||y&&0!=e.length?i<0?E(e)?t.stylize(RegExp.prototype.toString.call(e),"regexp"):t.stylize("[Object]","special"):(t.seen.push(e),g=y?f(t,e,i,m,o):o.map(function(r){return c(t,e,i,m,r,y);}),t.seen.pop(),d(g,_,w)):w[0]+_+w[1];}function h(t,e){if(w(e))return t.stylize("undefined","undefined");if(v(e)){var r="'"+JSON.stringify(e).replace(/^"|"$/g,"").replace(/'/g,"\\'").replace(/\\"/g,'"')+"'";return t.stylize(r,"string");}return _(e)?t.stylize(""+e,"number"):m(e)?t.stylize(""+e,"boolean"):b(e)?t.stylize("null","null"):void 0;}function l(t){return"["+Error.prototype.toString.call(t)+"]";}function f(t,e,r,i,n){for(var a=[],o=0,s=e.length;o-1&&(s=a?s.split("\n").map(function(t){return" "+t;}).join("\n").substr(2):"\n"+s.split("\n").map(function(t){return" "+t;}).join("\n"))):s=t.stylize("[Circular]","special")),w(o)){if(a&&n.match(/^\d+$/))return s;o=JSON.stringify(""+n),o.match(/^"([a-zA-Z_][a-zA-Z_0-9]*)"$/)?(o=o.substr(1,o.length-2),o=t.stylize(o,"name")):(o=o.replace(/'/g,"\\'").replace(/\\"/g,'"').replace(/(^"|"$)/g,"'"),o=t.stylize(o,"string"));}return o+": "+s;}function d(t,e,r){var i=t.reduce(function(t,e){return 0,e.indexOf("\n")>=0&&0,t+e.replace(/\u001b\[\d\d?m/g,"").length+1;},0);return i>60?r[0]+(""===e?"":e+"\n ")+" "+t.join(",\n ")+" "+r[1]:r[0]+e+" "+t.join(", ")+" "+r[1];}function p(t){return Array.isArray(t);}function m(t){return"boolean"==typeof t;}function b(t){return null===t;}function g(t){return null==t;}function _(t){return"number"==typeof t;}function v(t){return"string"==typeof t;}function y(t){return"symbol"==typeof t;}function w(t){return void 0===t;}function E(t){return x(t)&&"[object RegExp]"===I(t);}function x(t){return"object"==typeof t&&null!==t;}function S(t){return x(t)&&"[object Date]"===I(t);}function k(t){return x(t)&&("[object Error]"===I(t)||t instanceof Error);}function M(t){return"function"==typeof t;}function A(t){return null===t||"boolean"==typeof t||"number"==typeof t||"string"==typeof t||"symbol"==typeof t||void 0===t;}function I(t){return Object.prototype.toString.call(t);}function T(t){return t<10?"0"+t.toString(10):t.toString(10);}function R(){var t=new Date(),e=[T(t.getHours()),T(t.getMinutes()),T(t.getSeconds())].join(":");return[t.getDate(),B[t.getMonth()],e].join(" ");}function P(t,e){return Object.prototype.hasOwnProperty.call(t,e);}var C=/%[sdj%]/g;r.format=function(t){if(!v(t)){for(var e=[],r=0;r=a)return t;switch(t){case"%s":return String(i[r++]);case"%d":return Number(i[r++]);case"%j":try{return JSON.stringify(i[r++]);}catch(t){return"[Circular]";}default:return t;}}),s=i[r];r0)throw new Error("Invalid string. Length must be a multiple of 4");var r=t.indexOf("=");-1===r&&(r=e);var i=r===e?0:4-r%4;return[r,i];}function n(t){var e=i(t),r=e[0],n=e[1];return 3*(r+n)/4-n;}function a(t,e,r){return 3*(e+r)/4-r;}function o(t){var e,r,n=i(t),o=n[0],s=n[1],u=new c(a(t,o,s)),h=0,l=s>0?o-4:o;for(r=0;r>16&255,u[h++]=e>>8&255,u[h++]=255&e;return 2===s&&(e=f[t.charCodeAt(r)]<<2|f[t.charCodeAt(r+1)]>>4,u[h++]=255&e),1===s&&(e=f[t.charCodeAt(r)]<<10|f[t.charCodeAt(r+1)]<<4|f[t.charCodeAt(r+2)]>>2,u[h++]=e>>8&255,u[h++]=255&e),u;}function s(t){return l[t>>18&63]+l[t>>12&63]+l[t>>6&63]+l[63&t];}function u(t,e,r){for(var i,n=[],a=e;as?s:o+a));return 1===i?(e=t[r-1],n.push(l[e>>2]+l[e<<4&63]+"==")):2===i&&(e=(t[r-2]<<8)+t[r-1],n.push(l[e>>10]+l[e>>4&63]+l[e<<2&63]+"=")),n.join("");}r.byteLength=n,r.toByteArray=o,r.fromByteArray=h;for(var l=[],f=[],c="undefined"!=typeof Uint8Array?Uint8Array:Array,d="ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/",p=0,m=d.length;p=0?this.height-1:-this.height;for(r=this.height-1;r>=0;r--){for(var i=this.bottom_up?r:this.height-1-r,n=0;n>7-s&1];this.data[o+4*s]=0,this.data[o+4*s+1]=u.blue,this.data[o+4*s+2]=u.green,this.data[o+4*s+3]=u.red;}0!=e&&(this.pos+=4-e);}},r.prototype.bit4=function(){if(2==this.compress){this.data.fill(255);for(var t=0,e=this.bottom_up?this.height-1:0,r=!1;t>4),1&u&&u+1>1&1)&&this.pos++;}}else for(u=0;u>4),r=!r;}function h(e){var r=this.palette[e];this.data[t]=0,this.data[t+1]=r.blue,this.data[t+2]=r.green,this.data[t+3]=r.red,t+=4;}}else{var l=Math.ceil(this.width/2),f=l%4;for(o=this.height-1;o>=0;o--){var c=this.bottom_up?o:this.height-1-o;for(a=0;a>4,p=15&n,m=this.palette[d];if(this.data[t]=0,this.data[t+1]=m.blue,this.data[t+2]=m.green,this.data[t+3]=m.red,2*a+1>=this.width)break;m=this.palette[p],this.data[t+4]=0,this.data[t+4+1]=m.blue,this.data[t+4+2]=m.green,this.data[t+4+3]=m.red;}0!=f&&(this.pos+=4-f);}}},r.prototype.bit8=function(){if(1==this.compress){this.data.fill(255);for(var t=0,e=this.bottom_up?this.height-1:0;t=0;a--){var l=this.bottom_up?a:this.height-1-a;for(n=0;n=0;i--){for(var n=this.bottom_up?i:this.height-1-i,a=0;a>5&r)/r*255|0,h=(o>>10&r)/r*255|0,l=o>>15?255:0,f=n*this.width*4+4*a;this.data[f]=l,this.data[f+1]=s,this.data[f+2]=u,this.data[f+3]=h;}this.pos+=t;}},r.prototype.bit16=function(){var t=this.width%2*2;this.maskRed=31744,this.maskGreen=992,this.maskBlue=31,this.mask0=0,3==this.compress&&(this.maskRed=this.buffer.readUInt32LE(this.pos),this.pos+=4,this.maskGreen=this.buffer.readUInt32LE(this.pos),this.pos+=4,this.maskBlue=this.buffer.readUInt32LE(this.pos),this.pos+=4,this.mask0=this.buffer.readUInt32LE(this.pos),this.pos+=4);for(var e=[0,0,0],r=0;r<16;r++)this.maskRed>>r&1&&e[0]++,this.maskGreen>>r&1&&e[1]++,this.maskBlue>>r&1&&e[2]++;e[1]+=e[0],e[2]+=e[1],e[0]=8-e[0],e[1]-=8,e[2]-=8;for(var i=this.height-1;i>=0;i--){for(var n=this.bottom_up?i:this.height-1-i,a=0;a>e[1],h=(o&this.maskRed)>>e[2],l=n*this.width*4+4*a;this.data[l]=0,this.data[l+1]=s,this.data[l+2]=u,this.data[l+3]=h;}this.pos+=t;}},r.prototype.bit24=function(){for(var t=this.height-1;t>=0;t--){for(var e=this.bottom_up?t:this.height-1-t,r=0;r=0;t--)for(var e=this.bottom_up?t:this.height-1-t,r=0;r=0;t--)for(e=this.bottom_up?t:this.height-1-t,r=0;r0){var s=this.pos+n*i+3*this.width;e.fill(0,s,s+this.extraBytes);}}return e;},e.exports=function(t,e){void 0===e&&(e=100);var i=new r(t),n=i.encode();return{data:n,width:t.width,height:t.height};};}).call(this,t("buffer").Buffer);},{buffer:48}],33:[function(t,e,r){},{}],34:[function(t,e,r){(function(e,i){"use strict";function n(t){if("number"!=typeof t||tr.UNZIP)throw new TypeError("Bad argument");this.dictionary=null,this.err=0,this.flush=0,this.init_done=!1,this.level=0,this.memLevel=0,this.mode=t,this.strategy=0,this.windowBits=0,this.write_in_progress=!1,this.pending_close=!1,this.gzip_id_bytes_read=0;}var a=t("assert"),o=t("pako/lib/zlib/zstream"),s=t("pako/lib/zlib/deflate.js"),u=t("pako/lib/zlib/inflate.js"),h=t("pako/lib/zlib/constants");for(var l in h)r[l]=h[l];r.NONE=0,r.DEFLATE=1,r.INFLATE=2,r.GZIP=3,r.GUNZIP=4,r.DEFLATERAW=5,r.INFLATERAW=6,r.UNZIP=7;var f=31,c=139;n.prototype.close=function(){this.write_in_progress?this.pending_close=!0:(this.pending_close=!1,a(this.init_done,"close before init"),a(this.mode<=r.UNZIP),this.mode===r.DEFLATE||this.mode===r.GZIP||this.mode===r.DEFLATERAW?s.deflateEnd(this.strm):this.mode!==r.INFLATE&&this.mode!==r.GUNZIP&&this.mode!==r.INFLATERAW&&this.mode!==r.UNZIP||u.inflateEnd(this.strm),this.mode=r.NONE,this.dictionary=null);},n.prototype.write=function(t,e,r,i,n,a,o){return this._write(!0,t,e,r,i,n,a,o);},n.prototype.writeSync=function(t,e,r,i,n,a,o){return this._write(!1,t,e,r,i,n,a,o);},n.prototype._write=function(t,n,o,s,u,h,l,f){if(a.equal(arguments.length,8),a(this.init_done,"write before init"),a(this.mode!==r.NONE,"already finalized"),a.equal(!1,this.write_in_progress,"write already in progress"),a.equal(!1,this.pending_close,"close is pending"),this.write_in_progress=!0,a.equal(!1,void 0===n,"must provide flush value"),this.write_in_progress=!0,n!==r.Z_NO_FLUSH&&n!==r.Z_PARTIAL_FLUSH&&n!==r.Z_SYNC_FLUSH&&n!==r.Z_FULL_FLUSH&&n!==r.Z_FINISH&&n!==r.Z_BLOCK)throw new Error("Invalid flush value");if(null==o&&(o=i.alloc(0),u=0,s=0),this.strm.avail_in=u,this.strm.input=o,this.strm.next_in=s,this.strm.avail_out=f,this.strm.output=h,this.strm.next_out=l,this.flush=n,!t)return this._process(),this._checkError()?this._afterSync():void 0;var c=this;return e.nextTick(function(){c._process(),c._after();}),this;},n.prototype._afterSync=function(){var t=this.strm.avail_out,e=this.strm.avail_in;return this.write_in_progress=!1,[e,t];},n.prototype._process=function(){var t=null;switch(this.mode){case r.DEFLATE:case r.GZIP:case r.DEFLATERAW:this.err=s.deflate(this.strm,this.flush);break;case r.UNZIP:switch(this.strm.avail_in>0&&(t=this.strm.next_in),this.gzip_id_bytes_read){case 0:if(null===t)break;if(this.strm.input[t]!==f){this.mode=r.INFLATE;break;}if(this.gzip_id_bytes_read=1,t++,1===this.strm.avail_in)break;case 1:if(null===t)break;this.strm.input[t]===c?(this.gzip_id_bytes_read=2,this.mode=r.GUNZIP):this.mode=r.INFLATE;break;default:throw new Error("invalid number of gzip magic number bytes read");}case r.INFLATE:case r.GUNZIP:case r.INFLATERAW:for(this.err=u.inflate(this.strm,this.flush),this.err===r.Z_NEED_DICT&&this.dictionary&&(this.err=u.inflateSetDictionary(this.strm,this.dictionary),this.err===r.Z_OK?this.err=u.inflate(this.strm,this.flush):this.err===r.Z_DATA_ERROR&&(this.err=r.Z_NEED_DICT));this.strm.avail_in>0&&this.mode===r.GUNZIP&&this.err===r.Z_STREAM_END&&0!==this.strm.next_in[0];)this.reset(),this.err=u.inflate(this.strm,this.flush);break;default:throw new Error("Unknown mode "+this.mode);}},n.prototype._checkError=function(){switch(this.err){case r.Z_OK:case r.Z_BUF_ERROR:if(0!==this.strm.avail_out&&this.flush===r.Z_FINISH)return this._error("unexpected end of file"),!1;break;case r.Z_STREAM_END:break;case r.Z_NEED_DICT:return null==this.dictionary?this._error("Missing dictionary"):this._error("Bad dictionary"),!1;default:return this._error("Zlib error"),!1;}return!0;},n.prototype._after=function(){if(this._checkError()){var t=this.strm.avail_out,e=this.strm.avail_in;this.write_in_progress=!1,this.callback(e,t),this.pending_close&&this.close();}},n.prototype._error=function(t){this.strm.msg&&(t=this.strm.msg),this.onerror(t,this.err),this.write_in_progress=!1,this.pending_close&&this.close();},n.prototype.init=function(t,e,i,n,o){a(4===arguments.length||5===arguments.length,"init(windowBits, level, memLevel, strategy, [dictionary])"),a(t>=8&&t<=15,"invalid windowBits"),a(e>=-1&&e<=9,"invalid compression level"),a(i>=1&&i<=9,"invalid memlevel"),a(n===r.Z_FILTERED||n===r.Z_HUFFMAN_ONLY||n===r.Z_RLE||n===r.Z_FIXED||n===r.Z_DEFAULT_STRATEGY,"invalid strategy"),this._init(e,t,i,n,o),this._setDictionary();},n.prototype.params=function(){throw new Error("deflateParams Not supported");},n.prototype.reset=function(){this._reset(),this._setDictionary();},n.prototype._init=function(t,e,i,n,a){switch(this.level=t,this.windowBits=e,this.memLevel=i,this.strategy=n,this.flush=r.Z_NO_FLUSH,this.err=r.Z_OK,this.mode!==r.GZIP&&this.mode!==r.GUNZIP||(this.windowBits+=16),this.mode===r.UNZIP&&(this.windowBits+=32),this.mode!==r.DEFLATERAW&&this.mode!==r.INFLATERAW||(this.windowBits=-1*this.windowBits),this.strm=new o(),this.mode){case r.DEFLATE:case r.GZIP:case r.DEFLATERAW:this.err=s.deflateInit2(this.strm,this.level,r.Z_DEFLATED,this.windowBits,this.memLevel,this.strategy);break;case r.INFLATE:case r.GUNZIP:case r.INFLATERAW:case r.UNZIP:this.err=u.inflateInit2(this.strm,this.windowBits);break;default:throw new Error("Unknown mode "+this.mode);}this.err!==r.Z_OK&&this._error("Init error"),this.dictionary=a,this.write_in_progress=!1,this.init_done=!0;},n.prototype._setDictionary=function(){if(null!=this.dictionary){switch(this.err=r.Z_OK,this.mode){case r.DEFLATE:case r.DEFLATERAW:this.err=s.deflateSetDictionary(this.strm,this.dictionary);}this.err!==r.Z_OK&&this._error("Failed to set dictionary");}},n.prototype._reset=function(){switch(this.err=r.Z_OK,this.mode){case r.DEFLATE:case r.DEFLATERAW:case r.GZIP:this.err=s.deflateReset(this.strm);break;case r.INFLATE:case r.INFLATERAW:case r.GUNZIP:this.err=u.inflateReset(this.strm);}this.err!==r.Z_OK&&this._error("Failed to reset stream");},r.Zlib=n;}).call(this,t("_process"),t("buffer").Buffer);},{_process:133,assert:25,buffer:48,"pako/lib/zlib/constants":38,"pako/lib/zlib/deflate.js":40,"pako/lib/zlib/inflate.js":42,"pako/lib/zlib/zstream":46}],35:[function(t,e,r){(function(e){"use strict";function i(t,e,r){function i(){for(var e;null!==(e=t.read());)o.push(e),s+=e.length;t.once("readable",i);}function n(e){t.removeListener("end",a),t.removeListener("readable",i),r(e);}function a(){var e,i=null;s>=w?i=new RangeError(E):e=b.concat(o,s),o=[],t.close(),r(i,e);}var o=[],s=0;t.on("error",n),t.on("end",a),t.end(e),i();}function n(t,e){if("string"==typeof e&&(e=b.from(e)),!b.isBuffer(e))throw new TypeError("Not a string or buffer");var r=t._finishFlushFlag;return t._processChunk(e,r);}function a(t){if(!(this instanceof a))return new a(t);d.call(this,t,_.DEFLATE);}function o(t){if(!(this instanceof o))return new o(t);d.call(this,t,_.INFLATE);}function s(t){if(!(this instanceof s))return new s(t);d.call(this,t,_.GZIP);}function u(t){if(!(this instanceof u))return new u(t);d.call(this,t,_.GUNZIP);}function h(t){if(!(this instanceof h))return new h(t);d.call(this,t,_.DEFLATERAW);}function l(t){if(!(this instanceof l))return new l(t);d.call(this,t,_.INFLATERAW);}function f(t){if(!(this instanceof f))return new f(t);d.call(this,t,_.UNZIP);}function c(t){return t===_.Z_NO_FLUSH||t===_.Z_PARTIAL_FLUSH||t===_.Z_SYNC_FLUSH||t===_.Z_FULL_FLUSH||t===_.Z_FINISH||t===_.Z_BLOCK;}function d(t,e){var i=this;if(this._opts=t=t||{},this._chunkSize=t.chunkSize||r.Z_DEFAULT_CHUNK,g.call(this,t),t.flush&&!c(t.flush))throw new Error("Invalid flush flag: "+t.flush);if(t.finishFlush&&!c(t.finishFlush))throw new Error("Invalid flush flag: "+t.finishFlush);if(this._flushFlag=t.flush||_.Z_NO_FLUSH,this._finishFlushFlag=void 0!==t.finishFlush?t.finishFlush:_.Z_FINISH,t.chunkSize&&(t.chunkSizer.Z_MAX_CHUNK))throw new Error("Invalid chunk size: "+t.chunkSize);if(t.windowBits&&(t.windowBitsr.Z_MAX_WINDOWBITS))throw new Error("Invalid windowBits: "+t.windowBits);if(t.level&&(t.levelr.Z_MAX_LEVEL))throw new Error("Invalid compression level: "+t.level);if(t.memLevel&&(t.memLevelr.Z_MAX_MEMLEVEL))throw new Error("Invalid memLevel: "+t.memLevel);if(t.strategy&&t.strategy!=r.Z_FILTERED&&t.strategy!=r.Z_HUFFMAN_ONLY&&t.strategy!=r.Z_RLE&&t.strategy!=r.Z_FIXED&&t.strategy!=r.Z_DEFAULT_STRATEGY)throw new Error("Invalid strategy: "+t.strategy);if(t.dictionary&&!b.isBuffer(t.dictionary))throw new Error("Invalid dictionary: it should be a Buffer instance");this._handle=new _.Zlib(e);var n=this;this._hadError=!1,this._handle.onerror=function(t,e){p(n),n._hadError=!0;var i=new Error(t);i.errno=e,i.code=r.codes[e],n.emit("error",i);};var a=r.Z_DEFAULT_COMPRESSION;"number"==typeof t.level&&(a=t.level);var o=r.Z_DEFAULT_STRATEGY;"number"==typeof t.strategy&&(o=t.strategy),this._handle.init(t.windowBits||r.Z_DEFAULT_WINDOWBITS,a,t.memLevel||r.Z_DEFAULT_MEMLEVEL,o,t.dictionary),this._buffer=b.allocUnsafe(this._chunkSize),this._offset=0,this._level=a,this._strategy=o,this.once("end",this.close),Object.defineProperty(this,"_closed",{get:function(){return!i._handle;},configurable:!0,enumerable:!0});}function p(t,r){r&&e.nextTick(r),t._handle&&(t._handle.close(),t._handle=null);}function m(t){t.emit("close");}var b=t("buffer").Buffer,g=t("stream").Transform,_=t("./binding"),v=t("util"),y=t("assert").ok,w=t("buffer").kMaxLength,E="Cannot create final Buffer. It would be larger than 0x"+w.toString(16)+" bytes";_.Z_MIN_WINDOWBITS=8,_.Z_MAX_WINDOWBITS=15,_.Z_DEFAULT_WINDOWBITS=15,_.Z_MIN_CHUNK=64,_.Z_MAX_CHUNK=1/0,_.Z_DEFAULT_CHUNK=16384,_.Z_MIN_MEMLEVEL=1,_.Z_MAX_MEMLEVEL=9,_.Z_DEFAULT_MEMLEVEL=8,_.Z_MIN_LEVEL=-1,_.Z_MAX_LEVEL=9,_.Z_DEFAULT_LEVEL=_.Z_DEFAULT_COMPRESSION;for(var x=Object.keys(_),S=0;Sr.Z_MAX_LEVEL)throw new RangeError("Invalid compression level: "+t);if(i!=r.Z_FILTERED&&i!=r.Z_HUFFMAN_ONLY&&i!=r.Z_RLE&&i!=r.Z_FIXED&&i!=r.Z_DEFAULT_STRATEGY)throw new TypeError("Invalid strategy: "+i);if(this._level!==t||this._strategy!==i){var a=this;this.flush(_.Z_SYNC_FLUSH,function(){y(a._handle,"zlib binding closed"),a._handle.params(t,i),a._hadError||(a._level=t,a._strategy=i,n&&n());});}else e.nextTick(n);},d.prototype.reset=function(){return y(this._handle,"zlib binding closed"),this._handle.reset();},d.prototype._flush=function(t){this._transform(b.alloc(0),"",t);},d.prototype.flush=function(t,r){var i=this,n=this._writableState;("function"==typeof t||void 0===t&&!r)&&(r=t,t=_.Z_FULL_FLUSH),n.ended?r&&e.nextTick(r):n.ending?r&&this.once("end",r):n.needDrain?r&&this.once("drain",function(){return i.flush(t,r);}):(this._flushFlag=t,this.write(b.alloc(0),"",r));},d.prototype.close=function(t){p(this,t),e.nextTick(m,this);},d.prototype._transform=function(t,e,r){var i,n=this._writableState,a=n.ending||n.ended,o=a&&(!t||n.length===t.length);return null===t||b.isBuffer(t)?this._handle?(o?i=this._finishFlushFlag:(i=this._flushFlag,t.length>=n.length&&(this._flushFlag=this._opts.flush||_.Z_NO_FLUSH)),void this._processChunk(t,i,r)):r(new Error("zlib binding closed")):r(new Error("invalid input"));},d.prototype._processChunk=function(t,e,r){function i(h,c){if(this&&(this.buffer=null,this.callback=null),!s._hadError){var d=a-c;if(y(d>=0,"have should not go down"),d>0){var p=s._buffer.slice(s._offset,s._offset+d);s._offset+=d,u?s.push(p):(l.push(p),f+=p.length);}if((0===c||s._offset>=s._chunkSize)&&(a=s._chunkSize,s._offset=0,s._buffer=b.allocUnsafe(s._chunkSize)),0===c){if(o+=n-h,n=h,!u)return!0;var m=s._handle.write(e,t,o,n,s._buffer,s._offset,s._chunkSize);return m.callback=i,void(m.buffer=t);}if(!u)return!1;r();}}var n=t&&t.length,a=this._chunkSize-this._offset,o=0,s=this,u="function"==typeof r;if(!u){var h,l=[],f=0;this.on("error",function(t){h=t;}),y(this._handle,"zlib binding closed");do{var c=this._handle.writeSync(e,t,o,n,this._buffer,this._offset,a);}while(!this._hadError&&i(c[0],c[1]));if(this._hadError)throw h;if(f>=w)throw p(this),new RangeError(E);var d=b.concat(l,f);return p(this),d;}y(this._handle,"zlib binding closed");var m=this._handle.write(e,t,o,n,this._buffer,this._offset,a);m.buffer=t,m.callback=i;},v.inherits(a,d),v.inherits(o,d),v.inherits(s,d),v.inherits(u,d),v.inherits(h,d),v.inherits(l,d),v.inherits(f,d);}).call(this,t("_process"));},{"./binding":34,_process:133,assert:25,buffer:48,stream:155,util:186}],36:[function(t,e,r){"use strict";function i(t,e){return Object.prototype.hasOwnProperty.call(t,e);}var n="undefined"!=typeof Uint8Array&&"undefined"!=typeof Uint16Array&&"undefined"!=typeof Int32Array;r.assign=function(t){for(var e=Array.prototype.slice.call(arguments,1);e.length;){var r=e.shift();if(r){if("object"!=typeof r)throw new TypeError(r+"must be non-object");for(var n in r)i(r,n)&&(t[n]=r[n]);}}return t;},r.shrinkBuf=function(t,e){return t.length===e?t:t.subarray?t.subarray(0,e):(t.length=e,t);};var a={arraySet:function(t,e,r,i,n){if(e.subarray&&t.subarray)t.set(e.subarray(r,r+i),n);else for(var a=0;a>>16&65535|0,o=0;0!==r;){o=r>2e3?2e3:r,r-=o;do{n=n+e[i++]|0,a=a+n|0;}while(--o);n%=65521,a%=65521;}return n|a<<16|0;}e.exports=i;},{}],38:[function(t,e,r){"use strict";e.exports={Z_NO_FLUSH:0,Z_PARTIAL_FLUSH:1,Z_SYNC_FLUSH:2,Z_FULL_FLUSH:3,Z_FINISH:4,Z_BLOCK:5,Z_TREES:6,Z_OK:0,Z_STREAM_END:1,Z_NEED_DICT:2,Z_ERRNO:-1,Z_STREAM_ERROR:-2,Z_DATA_ERROR:-3,Z_BUF_ERROR:-5,Z_NO_COMPRESSION:0,Z_BEST_SPEED:1,Z_BEST_COMPRESSION:9,Z_DEFAULT_COMPRESSION:-1,Z_FILTERED:1,Z_HUFFMAN_ONLY:2,Z_RLE:3,Z_FIXED:4,Z_DEFAULT_STRATEGY:0,Z_BINARY:0,Z_TEXT:1,Z_UNKNOWN:2,Z_DEFLATED:8};},{}],39:[function(t,e,r){"use strict";function i(){for(var t,e=[],r=0;r<256;r++){t=r;for(var i=0;i<8;i++)t=1&t?3988292384^t>>>1:t>>>1;e[r]=t;}return e;}function n(t,e,r,i){var n=a,o=i+r;t^=-1;for(var s=i;s>>8^n[255&(t^e[s])];return-1^t;}var a=i();e.exports=n;},{}],40:[function(t,e,r){"use strict";function i(t,e){return t.msg=L[e],e;}function n(t){return(t<<1)-(t>4?9:0);}function a(t){for(var e=t.length;--e>=0;)t[e]=0;}function o(t){var e=t.state,r=e.pending;r>t.avail_out&&(r=t.avail_out),0!==r&&(R.arraySet(t.output,e.pending_buf,e.pending_out,r,t.next_out),t.next_out+=r,e.pending_out+=r,t.total_out+=r,t.avail_out-=r,e.pending-=r,0===e.pending&&(e.pending_out=0));}function s(t,e){P._tr_flush_block(t,t.block_start>=0?t.block_start:-1,t.strstart-t.block_start,e),t.block_start=t.strstart,o(t.strm);}function u(t,e){t.pending_buf[t.pending++]=e;}function h(t,e){t.pending_buf[t.pending++]=e>>>8&255,t.pending_buf[t.pending++]=255&e;}function l(t,e,r,i){var n=t.avail_in;return n>i&&(n=i),0===n?0:(t.avail_in-=n,R.arraySet(e,t.input,t.next_in,n,r),1===t.state.wrap?t.adler=C(t.adler,e,n,r):2===t.state.wrap&&(t.adler=O(t.adler,e,n,r)),t.next_in+=n,t.total_in+=n,n);}function f(t,e){var r,i,n=t.max_chain_length,a=t.strstart,o=t.prev_length,s=t.nice_match,u=t.strstart>t.w_size-ft?t.strstart-(t.w_size-ft):0,h=t.window,l=t.w_mask,f=t.prev,c=t.strstart+lt,d=h[a+o-1],p=h[a+o];t.prev_length>=t.good_match&&(n>>=2),s>t.lookahead&&(s=t.lookahead);do{if(r=e,h[r+o]===p&&h[r+o-1]===d&&h[r]===h[a]&&h[++r]===h[a+1]){a+=2,r++;do{}while(h[++a]===h[++r]&&h[++a]===h[++r]&&h[++a]===h[++r]&&h[++a]===h[++r]&&h[++a]===h[++r]&&h[++a]===h[++r]&&h[++a]===h[++r]&&h[++a]===h[++r]&&ao){if(t.match_start=e,o=i,i>=s)break;d=h[a+o-1],p=h[a+o];}}}while((e=f[e&l])>u&&0!=--n);return o<=t.lookahead?o:t.lookahead;}function c(t){var e,r,i,n,a,o=t.w_size;do{if(n=t.window_size-t.lookahead-t.strstart,t.strstart>=o+(o-ft)){R.arraySet(t.window,t.window,o,o,0),t.match_start-=o,t.strstart-=o,t.block_start-=o,r=t.hash_size,e=r;do{i=t.head[--e],t.head[e]=i>=o?i-o:0;}while(--r);r=o,e=r;do{i=t.prev[--e],t.prev[e]=i>=o?i-o:0;}while(--r);n+=o;}if(0===t.strm.avail_in)break;if(r=l(t.strm,t.window,t.strstart+t.lookahead,n),t.lookahead+=r,t.lookahead+t.insert>=ht)for(a=t.strstart-t.insert,t.ins_h=t.window[a],t.ins_h=(t.ins_h<t.pending_buf_size-5&&(r=t.pending_buf_size-5);;){if(t.lookahead<=1){if(c(t),0===t.lookahead&&e===B)return yt;if(0===t.lookahead)break;}t.strstart+=t.lookahead,t.lookahead=0;var i=t.block_start+r;if((0===t.strstart||t.strstart>=i)&&(t.lookahead=t.strstart-i,t.strstart=i,s(t,!1),0===t.strm.avail_out))return yt;if(t.strstart-t.block_start>=t.w_size-ft&&(s(t,!1),0===t.strm.avail_out))return yt;}return t.insert=0,e===z?(s(t,!0),0===t.strm.avail_out?Et:xt):(t.strstart>t.block_start&&(s(t,!1),t.strm.avail_out),yt);}function p(t,e){for(var r,i;;){if(t.lookahead=ht&&(t.ins_h=(t.ins_h<=ht){if(i=P._tr_tally(t,t.strstart-t.match_start,t.match_length-ht),t.lookahead-=t.match_length,t.match_length<=t.max_lazy_match&&t.lookahead>=ht){t.match_length--;do{t.strstart++,t.ins_h=(t.ins_h<=ht&&(t.ins_h=(t.ins_h<4096)&&(t.match_length=ht-1)),t.prev_length>=ht&&t.match_length<=t.prev_length){n=t.strstart+t.lookahead-ht,i=P._tr_tally(t,t.strstart-1-t.prev_match,t.prev_length-ht),t.lookahead-=t.prev_length-1,t.prev_length-=2;do{++t.strstart<=n&&(t.ins_h=(t.ins_h<=ht&&t.strstart>0&&(n=t.strstart-1,i=o[n],i===o[++n]&&i===o[++n]&&i===o[++n])){a=t.strstart+lt;do{}while(i===o[++n]&&i===o[++n]&&i===o[++n]&&i===o[++n]&&i===o[++n]&&i===o[++n]&&i===o[++n]&&i===o[++n]&&nt.lookahead&&(t.match_length=t.lookahead);}if(t.match_length>=ht?(r=P._tr_tally(t,1,t.match_length-ht),t.lookahead-=t.match_length,t.strstart+=t.match_length,t.match_length=0):(r=P._tr_tally(t,0,t.window[t.strstart]),t.lookahead--,t.strstart++),r&&(s(t,!1),0===t.strm.avail_out))return yt;}return t.insert=0,e===z?(s(t,!0),0===t.strm.avail_out?Et:xt):t.last_lit&&(s(t,!1),0===t.strm.avail_out)?yt:wt;}function g(t,e){for(var r;;){if(0===t.lookahead&&(c(t),0===t.lookahead)){if(e===B)return yt;break;}if(t.match_length=0,r=P._tr_tally(t,0,t.window[t.strstart]),t.lookahead--,t.strstart++,r&&(s(t,!1),0===t.strm.avail_out))return yt;}return t.insert=0,e===z?(s(t,!0),0===t.strm.avail_out?Et:xt):t.last_lit&&(s(t,!1),0===t.strm.avail_out)?yt:wt;}function _(t,e,r,i,n){this.good_length=t,this.max_lazy=e,this.nice_length=r,this.max_chain=i,this.func=n;}function v(t){t.window_size=2*t.w_size,a(t.head),t.max_lazy_match=T[t.level].max_lazy,t.good_match=T[t.level].good_length,t.nice_match=T[t.level].nice_length,t.max_chain_length=T[t.level].max_chain,t.strstart=0,t.block_start=0,t.lookahead=0,t.insert=0,t.match_length=t.prev_length=ht-1,t.match_available=0,t.ins_h=0;}function y(){this.strm=null,this.status=0,this.pending_buf=null,this.pending_buf_size=0,this.pending_out=0,this.pending=0,this.wrap=0,this.gzhead=null,this.gzindex=0,this.method=K,this.last_flush=-1,this.w_size=0,this.w_bits=0,this.w_mask=0,this.window=null,this.window_size=0,this.prev=null,this.head=null,this.ins_h=0,this.hash_size=0,this.hash_bits=0,this.hash_mask=0,this.hash_shift=0,this.block_start=0,this.match_length=0,this.prev_match=0,this.match_available=0,this.strstart=0,this.match_start=0,this.lookahead=0,this.prev_length=0,this.max_chain_length=0,this.max_lazy_match=0,this.level=0,this.strategy=0,this.good_match=0,this.nice_match=0,this.dyn_ltree=new R.Buf16(2*st),this.dyn_dtree=new R.Buf16(2*(2*at+1)),this.bl_tree=new R.Buf16(2*(2*ot+1)),a(this.dyn_ltree),a(this.dyn_dtree),a(this.bl_tree),this.l_desc=null,this.d_desc=null,this.bl_desc=null,this.bl_count=new R.Buf16(ut+1),this.heap=new R.Buf16(2*nt+1),a(this.heap),this.heap_len=0,this.heap_max=0,this.depth=new R.Buf16(2*nt+1),a(this.depth),this.l_buf=0,this.lit_bufsize=0,this.last_lit=0,this.d_buf=0,this.opt_len=0,this.static_len=0,this.matches=0,this.insert=0,this.bi_buf=0,this.bi_valid=0;}function w(t){var e;return t&&t.state?(t.total_in=t.total_out=0,t.data_type=J,e=t.state,e.pending=0,e.pending_out=0,e.wrap<0&&(e.wrap=-e.wrap),e.status=e.wrap?dt:_t,t.adler=2===e.wrap?0:1,e.last_flush=B,P._tr_init(e),U):i(t,G);}function E(t){var e=w(t);return e===U&&v(t.state),e;}function x(t,e){return t&&t.state?2!==t.state.wrap?G:(t.state.gzhead=e,U):G;}function S(t,e,r,n,a,o){if(!t)return G;var s=1;if(e===W&&(e=6),n<0?(s=0,n=-n):n>15&&(s=2,n-=16),a<1||a>$||r!==K||n<8||n>15||e<0||e>9||o<0||o>X)return i(t,G);8===n&&(n=9);var u=new y();return t.state=u,u.strm=t,u.wrap=s,u.gzhead=null,u.w_bits=n,u.w_size=1<j||e<0)return t?i(t,G):G;if(s=t.state,!t.output||!t.input&&0!==t.avail_in||s.status===vt&&e!==z)return i(t,0===t.avail_out?q:G);if(s.strm=t,r=s.last_flush,s.last_flush=e,s.status===dt)if(2===s.wrap)t.adler=0,u(s,31),u(s,139),u(s,8),s.gzhead?(u(s,(s.gzhead.text?1:0)+(s.gzhead.hcrc?2:0)+(s.gzhead.extra?4:0)+(s.gzhead.name?8:0)+(s.gzhead.comment?16:0)),u(s,255&s.gzhead.time),u(s,s.gzhead.time>>8&255),u(s,s.gzhead.time>>16&255),u(s,s.gzhead.time>>24&255),u(s,9===s.level?2:s.strategy>=Y||s.level<2?4:0),u(s,255&s.gzhead.os),s.gzhead.extra&&s.gzhead.extra.length&&(u(s,255&s.gzhead.extra.length),u(s,s.gzhead.extra.length>>8&255)),s.gzhead.hcrc&&(t.adler=O(t.adler,s.pending_buf,s.pending,0)),s.gzindex=0,s.status=pt):(u(s,0),u(s,0),u(s,0),u(s,0),u(s,0),u(s,9===s.level?2:s.strategy>=Y||s.level<2?4:0),u(s,St),s.status=_t);else{var c=K+(s.w_bits-8<<4)<<8,d=-1;d=s.strategy>=Y||s.level<2?0:s.level<6?1:6===s.level?2:3,c|=d<<6,0!==s.strstart&&(c|=ct),c+=31-c%31,s.status=_t,h(s,c),0!==s.strstart&&(h(s,t.adler>>>16),h(s,65535&t.adler)),t.adler=1;}if(s.status===pt)if(s.gzhead.extra){for(l=s.pending;s.gzindex<(65535&s.gzhead.extra.length)&&(s.pending!==s.pending_buf_size||(s.gzhead.hcrc&&s.pending>l&&(t.adler=O(t.adler,s.pending_buf,s.pending-l,l)),o(t),l=s.pending,s.pending!==s.pending_buf_size));)u(s,255&s.gzhead.extra[s.gzindex]),s.gzindex++;s.gzhead.hcrc&&s.pending>l&&(t.adler=O(t.adler,s.pending_buf,s.pending-l,l)),s.gzindex===s.gzhead.extra.length&&(s.gzindex=0,s.status=mt);}else s.status=mt;if(s.status===mt)if(s.gzhead.name){l=s.pending;do{if(s.pending===s.pending_buf_size&&(s.gzhead.hcrc&&s.pending>l&&(t.adler=O(t.adler,s.pending_buf,s.pending-l,l)),o(t),l=s.pending,s.pending===s.pending_buf_size)){f=1;break;}f=s.gzindexl&&(t.adler=O(t.adler,s.pending_buf,s.pending-l,l)),0===f&&(s.gzindex=0,s.status=bt);}else s.status=bt;if(s.status===bt)if(s.gzhead.comment){l=s.pending;do{if(s.pending===s.pending_buf_size&&(s.gzhead.hcrc&&s.pending>l&&(t.adler=O(t.adler,s.pending_buf,s.pending-l,l)),o(t),l=s.pending,s.pending===s.pending_buf_size)){f=1;break;}f=s.gzindexl&&(t.adler=O(t.adler,s.pending_buf,s.pending-l,l)),0===f&&(s.status=gt);}else s.status=gt;if(s.status===gt&&(s.gzhead.hcrc?(s.pending+2>s.pending_buf_size&&o(t),s.pending+2<=s.pending_buf_size&&(u(s,255&t.adler),u(s,t.adler>>8&255),t.adler=0,s.status=_t)):s.status=_t),0!==s.pending){if(o(t),0===t.avail_out)return s.last_flush=-1,U;}else if(0===t.avail_in&&n(e)<=n(r)&&e!==z)return i(t,q);if(s.status===vt&&0!==t.avail_in)return i(t,q);if(0!==t.avail_in||0!==s.lookahead||e!==B&&s.status!==vt){var p=s.strategy===Y?g(s,e):s.strategy===V?b(s,e):T[s.level].func(s,e);if(p!==Et&&p!==xt||(s.status=vt),p===yt||p===Et)return 0===t.avail_out&&(s.last_flush=-1),U;if(p===wt&&(e===D?P._tr_align(s):e!==j&&(P._tr_stored_block(s,0,0,!1),e===N&&(a(s.head),0===s.lookahead&&(s.strstart=0,s.block_start=0,s.insert=0))),o(t),0===t.avail_out))return s.last_flush=-1,U;}return e!==z?U:s.wrap<=0?F:(2===s.wrap?(u(s,255&t.adler),u(s,t.adler>>8&255),u(s,t.adler>>16&255),u(s,t.adler>>24&255),u(s,255&t.total_in),u(s,t.total_in>>8&255),u(s,t.total_in>>16&255),u(s,t.total_in>>24&255)):(h(s,t.adler>>>16),h(s,65535&t.adler)),o(t),s.wrap>0&&(s.wrap=-s.wrap),0!==s.pending?U:F);}function A(t){var e;return t&&t.state?(e=t.state.status,e!==dt&&e!==pt&&e!==mt&&e!==bt&&e!==gt&&e!==_t&&e!==vt?i(t,G):(t.state=null,e===_t?i(t,H):U)):G;}function I(t,e){var r,i,n,o,s,u,h,l,f=e.length;if(!t||!t.state)return G;if(r=t.state,o=r.wrap,2===o||1===o&&r.status!==dt||r.lookahead)return G;for(1===o&&(t.adler=C(t.adler,e,f,0)),r.wrap=0,f>=r.w_size&&(0===o&&(a(r.head),r.strstart=0,r.block_start=0,r.insert=0),l=new R.Buf8(r.w_size),R.arraySet(l,e,f-r.w_size,r.w_size,0),e=l,f=r.w_size),s=t.avail_in,u=t.next_in,h=t.input,t.avail_in=f,t.next_in=0,t.input=e,c(r);r.lookahead>=ht;){i=r.strstart,n=r.lookahead-(ht-1);do{r.ins_h=(r.ins_h<>>24,m>>>=E,b-=E,E=w>>>16&255,0===E)I[s++]=65535&w;else{if(!(16&E)){if(0==(64&E)){w=g[(65535&w)+(m&(1<>>=E,b-=E),b<15&&(m+=A[a++]<>>24,m>>>=E,b-=E,E=w>>>16&255,!(16&E)){if(0==(64&E)){w=_[(65535&w)+(m&(1<l){t.msg="invalid distance too far back",r.mode=i;break t;}if(m>>>=E,b-=E,E=s-u,S>E){if(E=S-E,E>c&&r.sane){t.msg="invalid distance too far back",r.mode=i;break t;}if(k=0,M=p,0===d){if(k+=f-E,E2;)I[s++]=M[k++],I[s++]=M[k++],I[s++]=M[k++],x-=3;x&&(I[s++]=M[k++],x>1&&(I[s++]=M[k++]));}else{k=s-S;do{I[s++]=I[k++],I[s++]=I[k++],I[s++]=I[k++],x-=3;}while(x>2);x&&(I[s++]=I[k++],x>1&&(I[s++]=I[k++]));}break;}}break;}}while(a>3,a-=x,b-=x<<3,m&=(1<>>24&255)+(t>>>8&65280)+((65280&t)<<8)+((255&t)<<24);}function n(){this.mode=0,this.last=!1,this.wrap=0,this.havedict=!1,this.flags=0,this.dmax=0,this.check=0,this.total=0,this.head=null,this.wbits=0,this.wsize=0,this.whave=0,this.wnext=0,this.window=null,this.hold=0,this.bits=0,this.length=0,this.offset=0,this.extra=0,this.lencode=null,this.distcode=null,this.lenbits=0,this.distbits=0,this.ncode=0,this.nlen=0,this.ndist=0,this.have=0,this.next=null,this.lens=new _.Buf16(320),this.work=new _.Buf16(288),this.lendyn=null,this.distdyn=null,this.sane=0,this.back=0,this.was=0;}function a(t){var e;return t&&t.state?(e=t.state,t.total_in=t.total_out=e.total=0,t.msg="",e.wrap&&(t.adler=1&e.wrap),e.mode=N,e.last=0,e.havedict=0,e.dmax=32768,e.head=null,e.hold=0,e.bits=0,e.lencode=e.lendyn=new _.Buf32(mt),e.distcode=e.distdyn=new _.Buf32(bt),e.sane=1,e.back=-1,T):C;}function o(t){var e;return t&&t.state?(e=t.state,e.wsize=0,e.whave=0,e.wnext=0,a(t)):C;}function s(t,e){var r,i;return t&&t.state?(i=t.state,e<0?(r=0,e=-e):(r=1+(e>>4),e<48&&(e&=15)),e&&(e<8||e>15)?C:(null!==i.window&&i.wbits!==e&&(i.window=null),i.wrap=r,i.wbits=e,o(t))):C;}function u(t,e){var r,i;return t?(i=new n(),t.state=i,i.window=null,r=s(t,e),r!==T&&(t.state=null),r):C;}function h(t){return u(t,_t);}function l(t){if(vt){var e;for(b=new _.Buf32(512),g=new _.Buf32(32),e=0;e<144;)t.lens[e++]=8;for(;e<256;)t.lens[e++]=9;for(;e<280;)t.lens[e++]=7;for(;e<288;)t.lens[e++]=8;for(E(S,t.lens,0,288,b,0,t.work,{bits:9}),e=0;e<32;)t.lens[e++]=5;E(k,t.lens,0,32,g,0,t.work,{bits:5}),vt=!1;}t.lencode=b,t.lenbits=9,t.distcode=g,t.distbits=5;}function f(t,e,r,i){var n,a=t.state;return null===a.window&&(a.wsize=1<=a.wsize?(_.arraySet(a.window,e,r-a.wsize,a.wsize,0),a.wnext=0,a.whave=a.wsize):(n=a.wsize-a.wnext,n>i&&(n=i),_.arraySet(a.window,e,r-i,n,a.wnext),i-=n,i?(_.arraySet(a.window,e,r-i,i,0),a.wnext=i,a.whave=a.wsize):(a.wnext+=n,a.wnext===a.wsize&&(a.wnext=0),a.whave>>8&255,r.check=y(r.check,At,2,0),c=0,d=0,r.mode=z;break;}if(r.flags=0,r.head&&(r.head.done=!1),!(1&r.wrap)||(((255&c)<<8)+(c>>8))%31){t.msg="incorrect header check",r.mode=ct;break;}if((15&c)!==D){t.msg="unknown compression method",r.mode=ct;break;}if(c>>>=4,d-=4,Et=8+(15&c),0===r.wbits)r.wbits=Et;else if(Et>r.wbits){t.msg="invalid window size",r.mode=ct;break;}r.dmax=1<>8&1),512&r.flags&&(At[0]=255&c,At[1]=c>>>8&255,r.check=y(r.check,At,2,0)),c=0,d=0,r.mode=j;case j:for(;d<32;){if(0===u)break t;u--,c+=n[o++]<>>8&255,At[2]=c>>>16&255,At[3]=c>>>24&255,r.check=y(r.check,At,4,0)),c=0,d=0,r.mode=U;case U:for(;d<16;){if(0===u)break t;u--,c+=n[o++]<>8),512&r.flags&&(At[0]=255&c,At[1]=c>>>8&255,r.check=y(r.check,At,2,0)),c=0,d=0,r.mode=F;case F:if(1024&r.flags){for(;d<16;){if(0===u)break t;u--,c+=n[o++]<>>8&255,r.check=y(r.check,At,2,0)),c=0,d=0;}else r.head&&(r.head.extra=null);r.mode=G;case G:if(1024&r.flags&&(b=r.length,b>u&&(b=u),b&&(r.head&&(Et=r.head.extra_len-r.length,r.head.extra||(r.head.extra=new Array(r.head.extra_len)),_.arraySet(r.head.extra,n,o,b,Et)),512&r.flags&&(r.check=y(r.check,n,b,o)),u-=b,o+=b,r.length-=b),r.length))break t;r.length=0,r.mode=H;case H:if(2048&r.flags){if(0===u)break t;b=0;do{Et=n[o+b++],r.head&&Et&&r.length<65536&&(r.head.name+=String.fromCharCode(Et));}while(Et&&b>9&1,r.head.done=!0),t.adler=r.check=0,r.mode=V;break;case Z:for(;d<32;){if(0===u)break t;u--,c+=n[o++]<>>=7&d,d-=7&d,r.mode=ht;break;}for(;d<3;){if(0===u)break t;u--,c+=n[o++]<>>=1,d-=1,3&c){case 0:r.mode=Q;break;case 1:if(l(r),r.mode=rt,e===I){c>>>=2,d-=2;break t;}break;case 2:r.mode=$;break;case 3:t.msg="invalid block type",r.mode=ct;}c>>>=2,d-=2;break;case Q:for(c>>>=7&d,d-=7&d;d<32;){if(0===u)break t;u--,c+=n[o++]<>>16^65535)){t.msg="invalid stored block lengths",r.mode=ct;break;}if(r.length=65535&c,c=0,d=0,r.mode=J,e===I)break t;case J:r.mode=K;case K:if(b=r.length,b){if(b>u&&(b=u),b>h&&(b=h),0===b)break t;_.arraySet(a,n,o,b,s),u-=b,o+=b,h-=b,s+=b,r.length-=b;break;}r.mode=V;break;case $:for(;d<14;){if(0===u)break t;u--,c+=n[o++]<>>=5,d-=5,r.ndist=1+(31&c),c>>>=5,d-=5,r.ncode=4+(15&c),c>>>=4,d-=4,r.nlen>286||r.ndist>30){t.msg="too many length or distance symbols",r.mode=ct;break;}r.have=0,r.mode=tt;case tt:for(;r.have>>=3,d-=3;}for(;r.have<19;)r.lens[It[r.have++]]=0;if(r.lencode=r.lendyn,r.lenbits=7,St={bits:r.lenbits},xt=E(x,r.lens,0,19,r.lencode,0,r.work,St),r.lenbits=St.bits,xt){t.msg="invalid code lengths set",r.mode=ct;break;}r.have=0,r.mode=et;case et:for(;r.have>>24,gt=Mt>>>16&255,_t=65535&Mt,!(bt<=d);){if(0===u)break t;u--,c+=n[o++]<>>=bt,d-=bt,r.lens[r.have++]=_t;else{if(16===_t){for(kt=bt+2;d>>=bt,d-=bt,0===r.have){t.msg="invalid bit length repeat",r.mode=ct;break;}Et=r.lens[r.have-1],b=3+(3&c),c>>>=2,d-=2;}else if(17===_t){for(kt=bt+3;d>>=bt,d-=bt,Et=0,b=3+(7&c),c>>>=3,d-=3;}else{for(kt=bt+7;d>>=bt,d-=bt,Et=0,b=11+(127&c),c>>>=7,d-=7;}if(r.have+b>r.nlen+r.ndist){t.msg="invalid bit length repeat",r.mode=ct;break;}for(;b--;)r.lens[r.have++]=Et;}}if(r.mode===ct)break;if(0===r.lens[256]){t.msg="invalid code -- missing end-of-block",r.mode=ct;break;}if(r.lenbits=9,St={bits:r.lenbits},xt=E(S,r.lens,0,r.nlen,r.lencode,0,r.work,St),r.lenbits=St.bits,xt){t.msg="invalid literal/lengths set",r.mode=ct;break;}if(r.distbits=6,r.distcode=r.distdyn,St={bits:r.distbits},xt=E(k,r.lens,r.nlen,r.ndist,r.distcode,0,r.work,St),r.distbits=St.bits,xt){t.msg="invalid distances set",r.mode=ct;break;}if(r.mode=rt,e===I)break t;case rt:r.mode=it;case it:if(u>=6&&h>=258){t.next_out=s,t.avail_out=h,t.next_in=o,t.avail_in=u,r.hold=c,r.bits=d,w(t,m),s=t.next_out,a=t.output,h=t.avail_out,o=t.next_in,n=t.input,u=t.avail_in,c=r.hold,d=r.bits,r.mode===V&&(r.back=-1);break;}for(r.back=0;Mt=r.lencode[c&(1<>>24,gt=Mt>>>16&255,_t=65535&Mt,!(bt<=d);){if(0===u)break t;u--,c+=n[o++]<>vt)],bt=Mt>>>24,gt=Mt>>>16&255,_t=65535&Mt,!(vt+bt<=d);){if(0===u)break t;u--,c+=n[o++]<>>=vt,d-=vt,r.back+=vt;}if(c>>>=bt,d-=bt,r.back+=bt,r.length=_t,0===gt){r.mode=ut;break;}if(32>){r.back=-1,r.mode=V;break;}if(64>){t.msg="invalid literal/length code",r.mode=ct;break;}r.extra=15>,r.mode=nt;case nt:if(r.extra){for(kt=r.extra;d>>=r.extra,d-=r.extra,r.back+=r.extra;}r.was=r.length,r.mode=at;case at:for(;Mt=r.distcode[c&(1<>>24,gt=Mt>>>16&255,_t=65535&Mt,!(bt<=d);){if(0===u)break t;u--,c+=n[o++]<>vt)],bt=Mt>>>24,gt=Mt>>>16&255,_t=65535&Mt,!(vt+bt<=d);){if(0===u)break t;u--,c+=n[o++]<>>=vt,d-=vt,r.back+=vt;}if(c>>>=bt,d-=bt,r.back+=bt,64>){t.msg="invalid distance code",r.mode=ct;break;}r.offset=_t,r.extra=15>,r.mode=ot;case ot:if(r.extra){for(kt=r.extra;d>>=r.extra,d-=r.extra,r.back+=r.extra;}if(r.offset>r.dmax){t.msg="invalid distance too far back",r.mode=ct;break;}r.mode=st;case st:if(0===h)break t;if(b=m-h,r.offset>b){if(b=r.offset-b,b>r.whave&&r.sane){t.msg="invalid distance too far back",r.mode=ct;break;}b>r.wnext?(b-=r.wnext,g=r.wsize-b):g=r.wnext-b,b>r.length&&(b=r.length),mt=r.window;}else mt=a,g=s-r.offset,b=r.length;b>h&&(b=h),h-=b,r.length-=b;do{a[s++]=mt[g++];}while(--b);0===r.length&&(r.mode=it);break;case ut:if(0===h)break t;a[s++]=r.length,h--,r.mode=it;break;case ht:if(r.wrap){for(;d<32;){if(0===u)break t;u--,c|=n[o++]<=1&&0===F[C];C--);if(O>C&&(O=C),0===C)return m[b++]=20971520,m[b++]=20971520,_.bits=1,0;for(P=1;P0&&(t===s||1!==C))return-1;for(G[1]=0,T=1;Ta||t===h&&N>o)return 1;for(;;){k=T-B,g[R]S?(M=H[q+g[R]],A=j[U+g[R]]):(M=96,A=0),v=1<>B)+y]=k<<24|M<<16|A|0;}while(0!==y);for(v=1<>=1;if(0!==v?(z&=v-1,z+=v):z=0,R++,0==--F[T]){if(T===C)break;T=e[r+g[R]];}if(T>O&&(z&E)!==w){for(0===B&&(B=O),x+=P,L=T-B,D=1<a||t===h&&N>o)return 1;w=z&E,m[w]=O<<24|L<<16|x-b|0;}}return 0!==z&&(m[x+z]=T-B<<24|64<<16|0),_.bits=O,0;};},{"../utils/common":36}],44:[function(t,e,r){"use strict";e.exports={2:"need dictionary",1:"stream end",0:"","-1":"file error","-2":"stream error","-3":"data error","-4":"insufficient memory","-5":"buffer error","-6":"incompatible version"};},{}],45:[function(t,e,r){"use strict";function i(t){for(var e=t.length;--e>=0;)t[e]=0;}function n(t,e,r,i,n){this.static_tree=t,this.extra_bits=e,this.extra_base=r,this.elems=i,this.max_length=n,this.has_stree=t&&t.length;}function a(t,e){this.dyn_tree=t,this.max_code=0,this.stat_desc=e;}function o(t){return t<256?ut[t]:ut[256+(t>>>7)];}function s(t,e){t.pending_buf[t.pending++]=255&e,t.pending_buf[t.pending++]=e>>>8&255;}function u(t,e,r){t.bi_valid>X-r?(t.bi_buf|=e<>X-t.bi_valid,t.bi_valid+=r-X):(t.bi_buf|=e<>>=1,r<<=1;}while(--e>0);return r>>>1;}function f(t){16===t.bi_valid?(s(t,t.bi_buf),t.bi_buf=0,t.bi_valid=0):t.bi_valid>=8&&(t.pending_buf[t.pending++]=255&t.bi_buf,t.bi_buf>>=8,t.bi_valid-=8);}function c(t,e){var r,i,n,a,o,s,u=e.dyn_tree,h=e.max_code,l=e.stat_desc.static_tree,f=e.stat_desc.has_stree,c=e.stat_desc.extra_bits,d=e.stat_desc.extra_base,p=e.stat_desc.max_length,m=0;for(a=0;a<=V;a++)t.bl_count[a]=0;for(u[2*t.heap[t.heap_max]+1]=0,r=t.heap_max+1;rp&&(a=p,m++),u[2*i+1]=a,i>h||(t.bl_count[a]++,o=0,i>=d&&(o=c[i-d]),s=u[2*i],t.opt_len+=s*(a+o),f&&(t.static_len+=s*(l[2*i+1]+o)));if(0!==m){do{for(a=p-1;0===t.bl_count[a];)a--;t.bl_count[a]--,t.bl_count[a+1]+=2,t.bl_count[p]--,m-=2;}while(m>0);for(a=p;0!==a;a--)for(i=t.bl_count[a];0!==i;)n=t.heap[--r],n>h||(u[2*n+1]!==a&&(t.opt_len+=(a-u[2*n+1])*u[2*n],u[2*n+1]=a),i--);}}function d(t,e,r){var i,n,a=new Array(V+1),o=0;for(i=1;i<=V;i++)a[i]=o=o+r[i-1]<<1;for(n=0;n<=e;n++){var s=t[2*n+1];0!==s&&(t[2*n]=l(a[s]++,s));}}function p(){var t,e,r,i,a,o=new Array(V+1);for(r=0,i=0;i>=7;i8?s(t,t.bi_buf):t.bi_valid>0&&(t.pending_buf[t.pending++]=t.bi_buf),t.bi_buf=0,t.bi_valid=0;}function g(t,e,r,i){b(t),i&&(s(t,r),s(t,~r)),C.arraySet(t.pending_buf,t.window,e,r,t.pending),t.pending+=r;}function _(t,e,r,i){var n=2*e,a=2*r;return t[n]>1;r>=1;r--)v(t,a,r);n=u;do{r=t.heap[1],t.heap[1]=t.heap[t.heap_len--],v(t,a,1),i=t.heap[1],t.heap[--t.heap_max]=r,t.heap[--t.heap_max]=i,a[2*n]=a[2*r]+a[2*i],t.depth[n]=(t.depth[r]>=t.depth[i]?t.depth[r]:t.depth[i])+1,a[2*r+1]=a[2*i+1]=n,t.heap[1]=n++,v(t,a,1);}while(t.heap_len>=2);t.heap[--t.heap_max]=t.heap[1],c(t,e),d(a,h,t.bl_count);}function E(t,e,r){var i,n,a=-1,o=e[1],s=0,u=7,h=4;for(0===o&&(u=138,h=3),e[2*(r+1)+1]=65535,i=0;i<=r;i++)n=o,o=e[2*(i+1)+1],++s=3&&0===t.bl_tree[2*nt[e]+1];e--);return t.opt_len+=3*(e+1)+5+5+4,e;}function k(t,e,r,i){var n;for(u(t,e-257,5),u(t,r-1,5),u(t,i-4,4),n=0;n>>=1)if(1&r&&0!==t.dyn_ltree[2*e])return L;if(0!==t.dyn_ltree[18]||0!==t.dyn_ltree[20]||0!==t.dyn_ltree[26])return B;for(e=32;e0?(t.strm.data_type===D&&(t.strm.data_type=M(t)),w(t,t.l_desc),w(t,t.d_desc),o=S(t),n=t.opt_len+3+7>>>3,a=t.static_len+3+7>>>3,a<=n&&(n=a)):n=a=r+5,r+4<=n&&-1!==e?I(t,e,r,i):t.strategy===O||a===n?(u(t,(z<<1)+(i?1:0),3),y(t,ot,st)):(u(t,(j<<1)+(i?1:0),3),k(t,t.l_desc.max_code+1,t.d_desc.max_code+1,o+1),y(t,t.dyn_ltree,t.dyn_dtree)),m(t),i&&b(t);}function P(t,e,r){return t.pending_buf[t.d_buf+2*t.last_lit]=e>>>8&255,t.pending_buf[t.d_buf+2*t.last_lit+1]=255&e,t.pending_buf[t.l_buf+t.last_lit]=255&r,t.last_lit++,0===e?t.dyn_ltree[2*r]++:(t.matches++,e--,t.dyn_ltree[2*(ht[r]+H+1)]++,t.dyn_dtree[2*o(e)]++),t.last_lit===t.lit_bufsize-1;}var C=t("../utils/common"),O=4,L=0,B=1,D=2,N=0,z=1,j=2,U=3,F=258,G=29,H=256,q=H+1+G,W=30,Z=19,Y=2*q+1,V=15,X=16,Q=7,J=256,K=16,$=17,tt=18,et=[0,0,0,0,0,0,0,0,1,1,1,1,2,2,2,2,3,3,3,3,4,4,4,4,5,5,5,5,0],rt=[0,0,0,0,1,1,2,2,3,3,4,4,5,5,6,6,7,7,8,8,9,9,10,10,11,11,12,12,13,13],it=[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,2,3,7],nt=[16,17,18,0,8,7,9,6,10,5,11,4,12,3,13,2,14,1,15],at=512,ot=new Array(2*(q+2));i(ot);var st=new Array(2*W);i(st);var ut=new Array(at);i(ut);var ht=new Array(F-U+1);i(ht);var lt=new Array(G);i(lt);var ft,ct,dt,pt=new Array(W);i(pt);var mt=!1;r._tr_init=A,r._tr_stored_block=I,r._tr_flush_block=R,r._tr_tally=P,r._tr_align=T;},{"../utils/common":36}],46:[function(t,e,r){"use strict";function i(){this.input=null,this.next_in=0,this.avail_in=0,this.total_in=0,this.output=null,this.next_out=0,this.avail_out=0,this.total_out=0,this.msg="",this.state=null,this.data_type=2,this.adler=0;}e.exports=i;},{}],47:[function(t,e,r){arguments[4][33][0].apply(r,arguments);},{dup:33}],48:[function(t,e,r){(function(e){"use strict";function i(){try{var t=new Uint8Array(1),e={foo:function(){return 42;}};return Object.setPrototypeOf(e,Uint8Array.prototype),Object.setPrototypeOf(t,e),42===t.foo();}catch(t){return!1;}}function n(t){if(t>X)throw new RangeError('The value "'+t+'" is invalid for option "size"');var r=new Uint8Array(t);return Object.setPrototypeOf(r,e.prototype),r;}function e(t,e,r){if("number"==typeof t){if("string"==typeof e)throw new TypeError('The "string" argument must be of type string. Received type number');return u(t);}return a(t,e,r);}function a(t,r,i){if("string"==typeof t)return h(t,r);if(ArrayBuffer.isView(t))return l(t);if(null==t)throw new TypeError("The first argument must be one of type string, Buffer, ArrayBuffer, Array, or Array-like Object. Received type "+typeof t);if(q(t,ArrayBuffer)||t&&q(t.buffer,ArrayBuffer))return f(t,r,i);if("number"==typeof t)throw new TypeError('The "value" argument must not be of type number. Received type number');var n=t.valueOf&&t.valueOf();if(null!=n&&n!==t)return e.from(n,r,i);var a=c(t);if(a)return a;if("undefined"!=typeof Symbol&&null!=Symbol.toPrimitive&&"function"==typeof t[Symbol.toPrimitive])return e.from(t[Symbol.toPrimitive]("string"),r,i);throw new TypeError("The first argument must be one of type string, Buffer, ArrayBuffer, Array, or Array-like Object. Received type "+typeof t);}function o(t){if("number"!=typeof t)throw new TypeError('"size" argument must be of type number');if(t<0)throw new RangeError('The value "'+t+'" is invalid for option "size"');}function s(t,e,r){return o(t),t<=0?n(t):void 0!==e?"string"==typeof r?n(t).fill(e,r):n(t).fill(e):n(t);}function u(t){return o(t),n(t<0?0:0|d(t));}function h(t,r){if("string"==typeof r&&""!==r||(r="utf8"),!e.isEncoding(r))throw new TypeError("Unknown encoding: "+r);var i=0|m(t,r),a=n(i),o=a.write(t,r);return o!==i&&(a=a.slice(0,o)),a;}function l(t){for(var e=t.length<0?0:0|d(t.length),r=n(e),i=0;i=X)throw new RangeError("Attempt to allocate Buffer larger than maximum size: 0x"+X.toString(16)+" bytes");return 0|t;}function p(t){return+t!=t&&(t=0),e.alloc(+t);}function m(t,r){if(e.isBuffer(t))return t.length;if(ArrayBuffer.isView(t)||q(t,ArrayBuffer))return t.byteLength;if("string"!=typeof t)throw new TypeError('The "string" argument must be one of type string, Buffer, or ArrayBuffer. Received type '+typeof t);var i=t.length,n=arguments.length>2&&!0===arguments[2];if(!n&&0===i)return 0;for(var a=!1;;)switch(r){case"ascii":case"latin1":case"binary":return i;case"utf8":case"utf-8":return j(t).length;case"ucs2":case"ucs-2":case"utf16le":case"utf-16le":return 2*i;case"hex":return i>>>1;case"base64":return G(t).length;default:if(a)return n?-1:j(t).length;r=(""+r).toLowerCase(),a=!0;}}function b(t,e,r){var i=!1;if((void 0===e||e<0)&&(e=0),e>this.length)return"";if((void 0===r||r>this.length)&&(r=this.length),r<=0)return"";if(r>>>=0,e>>>=0,r<=e)return"";for(t||(t="utf8");;)switch(t){case"hex":return P(this,e,r);case"utf8":case"utf-8":return A(this,e,r);case"ascii":return T(this,e,r);case"latin1":case"binary":return R(this,e,r);case"base64":return M(this,e,r);case"ucs2":case"ucs-2":case"utf16le":case"utf-16le":return C(this,e,r);default:if(i)throw new TypeError("Unknown encoding: "+t);t=(t+"").toLowerCase(),i=!0;}}function g(t,e,r){var i=t[e];t[e]=t[r],t[r]=i;}function _(t,r,i,n,a){if(0===t.length)return-1;if("string"==typeof i?(n=i,i=0):i>2147483647?i=2147483647:i<-2147483648&&(i=-2147483648),i=+i,W(i)&&(i=a?0:t.length-1),i<0&&(i=t.length+i),i>=t.length){if(a)return-1;i=t.length-1;}else if(i<0){if(!a)return-1;i=0;}if("string"==typeof r&&(r=e.from(r,n)),e.isBuffer(r))return 0===r.length?-1:v(t,r,i,n,a);if("number"==typeof r)return r&=255,"function"==typeof Uint8Array.prototype.indexOf?a?Uint8Array.prototype.indexOf.call(t,r,i):Uint8Array.prototype.lastIndexOf.call(t,r,i):v(t,[r],i,n,a);throw new TypeError("val must be string, number or Buffer");}function v(t,e,r,i,n){function a(t,e){return 1===s?t[e]:t.readUInt16BE(e*s);}var o,s=1,u=t.length,h=e.length;if(void 0!==i&&(i=String(i).toLowerCase(),"ucs2"===i||"ucs-2"===i||"utf16le"===i||"utf-16le"===i)){if(t.length<2||e.length<2)return-1;s=2,u/=2,h/=2,r/=2;}if(n){var l=-1;for(o=r;ou&&(r=u-h),o=r;o>=0;o--){for(var f=!0,c=0;cn&&(i=n)):i=n;var a=e.length;i>a/2&&(i=a/2);for(var o=0;o239?4:h>223?3:h>191?2:1;if(n+f<=r)switch(f){case 1:h<128&&(l=h);break;case 2:a=t[n+1],128==(192&a)&&(u=(31&h)<<6|63&a,u>127&&(l=u));break;case 3:a=t[n+1],o=t[n+2],128==(192&a)&&128==(192&o)&&(u=(15&h)<<12|(63&a)<<6|63&o,u>2047&&(u<55296||u>57343)&&(l=u));break;case 4:a=t[n+1],o=t[n+2],s=t[n+3],128==(192&a)&&128==(192&o)&&128==(192&s)&&(u=(15&h)<<18|(63&a)<<12|(63&o)<<6|63&s,u>65535&&u<1114112&&(l=u));}null===l?(l=65533,f=1):l>65535&&(l-=65536,i.push(l>>>10&1023|55296),l=56320|1023&l),i.push(l),n+=f;}return I(i);}function I(t){var e=t.length;if(e<=Q)return String.fromCharCode.apply(String,t);for(var r="",i=0;ii)&&(r=i);for(var n="",a=e;ar)throw new RangeError("Trying to access beyond buffer length");}function L(t,r,i,n,a,o){if(!e.isBuffer(t))throw new TypeError('"buffer" argument must be a Buffer instance');if(r>a||rt.length)throw new RangeError("Index out of range");}function B(t,e,r,i,n,a){if(r+i>t.length)throw new RangeError("Index out of range");if(r<0)throw new RangeError("Index out of range");}function D(t,e,r,i,n){return e=+e,r>>>=0,n||B(t,e,r,4,3.4028234663852886e38,-3.4028234663852886e38),Y.write(t,e,r,i,23,4),r+4;}function N(t,e,r,i,n){return e=+e,r>>>=0,n||B(t,e,r,8,1.7976931348623157e308,-1.7976931348623157e308),Y.write(t,e,r,i,52,8),r+8;}function z(t){if(t=t.split("=")[0],t=t.trim().replace(J,""),t.length<2)return"";for(;t.length%4!=0;)t+="=";return t;}function j(t,e){var r;e=e||1/0;for(var i=t.length,n=null,a=[],o=0;o55295&&r<57344){if(!n){if(r>56319){(e-=3)>-1&&a.push(239,191,189);continue;}if(o+1===i){(e-=3)>-1&&a.push(239,191,189);continue;}n=r;continue;}if(r<56320){(e-=3)>-1&&a.push(239,191,189),n=r;continue;}r=65536+(n-55296<<10|r-56320);}else n&&(e-=3)>-1&&a.push(239,191,189);if(n=null,r<128){if((e-=1)<0)break;a.push(r);}else if(r<2048){if((e-=2)<0)break;a.push(r>>6|192,63&r|128);}else if(r<65536){if((e-=3)<0)break;a.push(r>>12|224,r>>6&63|128,63&r|128);}else{if(!(r<1114112))throw new Error("Invalid code point");if((e-=4)<0)break;a.push(r>>18|240,r>>12&63|128,r>>6&63|128,63&r|128);}}return a;}function U(t){for(var e=[],r=0;r>8,n=r%256,a.push(n),a.push(i);return a;}function G(t){return Z.toByteArray(z(t));}function H(t,e,r,i){for(var n=0;n=e.length||n>=t.length);++n)e[n+r]=t[n];return n;}function q(t,e){return t instanceof e||null!=t&&null!=t.constructor&&null!=t.constructor.name&&t.constructor.name===e.name;}function W(t){return t!=t;}var Z=t("base64-js"),Y=t("ieee754"),V="function"==typeof Symbol&&"function"==typeof Symbol.for?Symbol.for("nodejs.util.inspect.custom"):null;r.Buffer=e,r.SlowBuffer=p,r.INSPECT_MAX_BYTES=50;var X=2147483647;r.kMaxLength=X,e.TYPED_ARRAY_SUPPORT=i(),e.TYPED_ARRAY_SUPPORT||"undefined"==typeof console||"function"!=typeof console.error||console.error("This browser lacks typed array (Uint8Array) support which is required by `buffer` v5.x. Use `buffer` v4.x if you require old browser support."),Object.defineProperty(e.prototype,"parent",{enumerable:!0,get:function(){if(e.isBuffer(this))return this.buffer;}}),Object.defineProperty(e.prototype,"offset",{enumerable:!0,get:function(){if(e.isBuffer(this))return this.byteOffset;}}),"undefined"!=typeof Symbol&&null!=Symbol.species&&e[Symbol.species]===e&&Object.defineProperty(e,Symbol.species,{value:null,configurable:!0,enumerable:!1,writable:!1}),e.poolSize=8192,e.from=function(t,e,r){return a(t,e,r);},Object.setPrototypeOf(e.prototype,Uint8Array.prototype),Object.setPrototypeOf(e,Uint8Array),e.alloc=function(t,e,r){return s(t,e,r);},e.allocUnsafe=function(t){return u(t);},e.allocUnsafeSlow=function(t){return u(t);},e.isBuffer=function(t){return null!=t&&!0===t._isBuffer&&t!==e.prototype;},e.compare=function(t,r){if(q(t,Uint8Array)&&(t=e.from(t,t.offset,t.byteLength)),q(r,Uint8Array)&&(r=e.from(r,r.offset,r.byteLength)),!e.isBuffer(t)||!e.isBuffer(r))throw new TypeError('The "buf1", "buf2" arguments must be one of type Buffer or Uint8Array');if(t===r)return 0;for(var i=t.length,n=r.length,a=0,o=Math.min(i,n);ae&&(t+=" ... "),"";},V&&(e.prototype[V]=e.prototype.inspect),e.prototype.compare=function(t,r,i,n,a){if(q(t,Uint8Array)&&(t=e.from(t,t.offset,t.byteLength)),!e.isBuffer(t))throw new TypeError('The "target" argument must be one of type Buffer or Uint8Array. Received type '+typeof t);if(void 0===r&&(r=0),void 0===i&&(i=t?t.length:0),void 0===n&&(n=0),void 0===a&&(a=this.length),r<0||i>t.length||n<0||a>this.length)throw new RangeError("out of range index");if(n>=a&&r>=i)return 0;if(n>=a)return-1;if(r>=i)return 1;if(r>>>=0,i>>>=0,n>>>=0,a>>>=0,this===t)return 0;for(var o=a-n,s=i-r,u=Math.min(o,s),h=this.slice(n,a),l=t.slice(r,i),f=0;f>>=0,isFinite(r)?(r>>>=0,void 0===i&&(i="utf8")):(i=r,r=void 0);}var n=this.length-e;if((void 0===r||r>n)&&(r=n),t.length>0&&(r<0||e<0)||e>this.length)throw new RangeError("Attempt to write outside buffer bounds");i||(i="utf8");for(var a=!1;;)switch(i){case"hex":return y(this,t,e,r);case"utf8":case"utf-8":return w(this,t,e,r);case"ascii":return E(this,t,e,r);case"latin1":case"binary":return x(this,t,e,r);case"base64":return S(this,t,e,r);case"ucs2":case"ucs-2":case"utf16le":case"utf-16le":return k(this,t,e,r);default:if(a)throw new TypeError("Unknown encoding: "+i);i=(""+i).toLowerCase(),a=!0;}},e.prototype.toJSON=function(){return{type:"Buffer",data:Array.prototype.slice.call(this._arr||this,0)};};var Q=4096;e.prototype.slice=function(t,r){var i=this.length;t=~~t,r=void 0===r?i:~~r,t<0?(t+=i,t<0&&(t=0)):t>i&&(t=i),r<0?(r+=i,r<0&&(r=0)):r>i&&(r=i),r>>=0,e>>>=0,r||O(t,e,this.length);for(var i=this[t],n=1,a=0;++a>>=0,e>>>=0,r||O(t,e,this.length);for(var i=this[t+--e],n=1;e>0&&(n*=256);)i+=this[t+--e]*n;return i;},e.prototype.readUInt8=function(t,e){return t>>>=0,e||O(t,1,this.length),this[t];},e.prototype.readUInt16LE=function(t,e){return t>>>=0,e||O(t,2,this.length),this[t]|this[t+1]<<8;},e.prototype.readUInt16BE=function(t,e){return t>>>=0,e||O(t,2,this.length),this[t]<<8|this[t+1];},e.prototype.readUInt32LE=function(t,e){return t>>>=0,e||O(t,4,this.length),(this[t]|this[t+1]<<8|this[t+2]<<16)+16777216*this[t+3];},e.prototype.readUInt32BE=function(t,e){return t>>>=0,e||O(t,4,this.length),16777216*this[t]+(this[t+1]<<16|this[t+2]<<8|this[t+3]);},e.prototype.readIntLE=function(t,e,r){t>>>=0,e>>>=0,r||O(t,e,this.length);for(var i=this[t],n=1,a=0;++a=n&&(i-=Math.pow(2,8*e)),i;},e.prototype.readIntBE=function(t,e,r){t>>>=0,e>>>=0,r||O(t,e,this.length);for(var i=e,n=1,a=this[t+--i];i>0&&(n*=256);)a+=this[t+--i]*n;return n*=128,a>=n&&(a-=Math.pow(2,8*e)),a;},e.prototype.readInt8=function(t,e){return t>>>=0,e||O(t,1,this.length),128&this[t]?-1*(255-this[t]+1):this[t];},e.prototype.readInt16LE=function(t,e){t>>>=0,e||O(t,2,this.length);var r=this[t]|this[t+1]<<8;return 32768&r?4294901760|r:r;},e.prototype.readInt16BE=function(t,e){t>>>=0,e||O(t,2,this.length);var r=this[t+1]|this[t]<<8;return 32768&r?4294901760|r:r;},e.prototype.readInt32LE=function(t,e){return t>>>=0,e||O(t,4,this.length),this[t]|this[t+1]<<8|this[t+2]<<16|this[t+3]<<24;},e.prototype.readInt32BE=function(t,e){return t>>>=0,e||O(t,4,this.length),this[t]<<24|this[t+1]<<16|this[t+2]<<8|this[t+3];},e.prototype.readFloatLE=function(t,e){return t>>>=0,e||O(t,4,this.length),Y.read(this,t,!0,23,4);},e.prototype.readFloatBE=function(t,e){return t>>>=0,e||O(t,4,this.length),Y.read(this,t,!1,23,4);},e.prototype.readDoubleLE=function(t,e){return t>>>=0,e||O(t,8,this.length),Y.read(this,t,!0,52,8);},e.prototype.readDoubleBE=function(t,e){return t>>>=0,e||O(t,8,this.length),Y.read(this,t,!1,52,8);},e.prototype.writeUIntLE=function(t,e,r,i){if(t=+t,e>>>=0,r>>>=0,!i){var n=Math.pow(2,8*r)-1;L(this,t,e,r,n,0);}var a=1,o=0;for(this[e]=255&t;++o>>=0,r>>>=0,!i){var n=Math.pow(2,8*r)-1;L(this,t,e,r,n,0);}var a=r-1,o=1;for(this[e+a]=255&t;--a>=0&&(o*=256);)this[e+a]=t/o&255;return e+r;},e.prototype.writeUInt8=function(t,e,r){return t=+t,e>>>=0,r||L(this,t,e,1,255,0),this[e]=255&t,e+1;},e.prototype.writeUInt16LE=function(t,e,r){return t=+t,e>>>=0,r||L(this,t,e,2,65535,0),this[e]=255&t,this[e+1]=t>>>8,e+2;},e.prototype.writeUInt16BE=function(t,e,r){return t=+t,e>>>=0,r||L(this,t,e,2,65535,0),this[e]=t>>>8,this[e+1]=255&t,e+2;},e.prototype.writeUInt32LE=function(t,e,r){return t=+t,e>>>=0,r||L(this,t,e,4,4294967295,0),this[e+3]=t>>>24,this[e+2]=t>>>16,this[e+1]=t>>>8,this[e]=255&t,e+4;},e.prototype.writeUInt32BE=function(t,e,r){return t=+t,e>>>=0,r||L(this,t,e,4,4294967295,0),this[e]=t>>>24,this[e+1]=t>>>16,this[e+2]=t>>>8,this[e+3]=255&t,e+4;},e.prototype.writeIntLE=function(t,e,r,i){if(t=+t,e>>>=0,!i){var n=Math.pow(2,8*r-1);L(this,t,e,r,n-1,-n);}var a=0,o=1,s=0;for(this[e]=255&t;++a>0)-s&255;return e+r;},e.prototype.writeIntBE=function(t,e,r,i){if(t=+t,e>>>=0,!i){var n=Math.pow(2,8*r-1);L(this,t,e,r,n-1,-n);}var a=r-1,o=1,s=0;for(this[e+a]=255&t;--a>=0&&(o*=256);)t<0&&0===s&&0!==this[e+a+1]&&(s=1),this[e+a]=(t/o>>0)-s&255;return e+r;},e.prototype.writeInt8=function(t,e,r){return t=+t,e>>>=0,r||L(this,t,e,1,127,-128),t<0&&(t=255+t+1),this[e]=255&t,e+1;},e.prototype.writeInt16LE=function(t,e,r){return t=+t,e>>>=0,r||L(this,t,e,2,32767,-32768),this[e]=255&t,this[e+1]=t>>>8,e+2;},e.prototype.writeInt16BE=function(t,e,r){return t=+t,e>>>=0,r||L(this,t,e,2,32767,-32768),this[e]=t>>>8,this[e+1]=255&t,e+2;},e.prototype.writeInt32LE=function(t,e,r){return t=+t,e>>>=0,r||L(this,t,e,4,2147483647,-2147483648),this[e]=255&t,this[e+1]=t>>>8,this[e+2]=t>>>16,this[e+3]=t>>>24,e+4;},e.prototype.writeInt32BE=function(t,e,r){return t=+t,e>>>=0,r||L(this,t,e,4,2147483647,-2147483648),t<0&&(t=4294967295+t+1),this[e]=t>>>24,this[e+1]=t>>>16,this[e+2]=t>>>8,this[e+3]=255&t,e+4;},e.prototype.writeFloatLE=function(t,e,r){return D(this,t,e,!0,r);},e.prototype.writeFloatBE=function(t,e,r){return D(this,t,e,!1,r);},e.prototype.writeDoubleLE=function(t,e,r){return N(this,t,e,!0,r);},e.prototype.writeDoubleBE=function(t,e,r){return N(this,t,e,!1,r);},e.prototype.copy=function(t,r,i,n){if(!e.isBuffer(t))throw new TypeError("argument should be a Buffer");if(i||(i=0),n||0===n||(n=this.length),r>=t.length&&(r=t.length),r||(r=0),n>0&&n=this.length)throw new RangeError("Index out of range");if(n<0)throw new RangeError("sourceEnd out of bounds");n>this.length&&(n=this.length),t.length-r=0;--o)t[o+r]=this[o+i];else Uint8Array.prototype.set.call(t,this.subarray(i,n),r);return a;},e.prototype.fill=function(t,r,i,n){if("string"==typeof t){if("string"==typeof r?(n=r,r=0,i=this.length):"string"==typeof i&&(n=i,i=this.length),void 0!==n&&"string"!=typeof n)throw new TypeError("encoding must be a string");if("string"==typeof n&&!e.isEncoding(n))throw new TypeError("Unknown encoding: "+n);if(1===t.length){var a=t.charCodeAt(0);("utf8"===n&&a<128||"latin1"===n)&&(t=a);}}else"number"==typeof t?t&=255:"boolean"==typeof t&&(t=Number(t));if(r<0||this.length>>=0,i=void 0===i?this.length:i>>>0,t||(t=0),"number"==typeof t)for(o=r;o0&&s.length>a)){s.warned=!0;var u=new Error("Possible EventEmitter memory leak detected. "+s.length+' "'+String(e)+'" listeners added. Use emitter.setMaxListeners() to increase limit.');u.name="MaxListenersExceededWarning",u.emitter=t,u.type=e,u.count=s.length,"object"==typeof console&&console.warn&&console.warn("%s: %s",u.name,u.message);}}else s=o[e]=r,++t._eventsCount;return t;}function f(){if(!this.fired)switch(this.target.removeListener(this.type,this.wrapFn),this.fired=!0,arguments.length){case 0:return this.listener.call(this.target);case 1:return this.listener.call(this.target,arguments[0]);case 2:return this.listener.call(this.target,arguments[0],arguments[1]);case 3:return this.listener.call(this.target,arguments[0],arguments[1],arguments[2]);default:for(var t=new Array(arguments.length),e=0;e1&&(e=arguments[1]),e instanceof Error)throw e;var d=new Error('Unhandled "error" event. ('+e+")");throw d.context=e,d;}if(r=f[t],!r)return!1;var p="function"==typeof r;switch(i=arguments.length,i){case 1:a(r,p,this);break;case 2:o(r,p,this,arguments[1]);break;case 3:s(r,p,this,arguments[1],arguments[2]);break;case 4:u(r,p,this,arguments[1],arguments[2],arguments[3]);break;default:for(n=new Array(i-1),l=1;l=0;a--)if(r[a]===e||r[a].listener===e){o=r[a].listener,n=a;break;}if(n<0)return this;0===n?r.shift():m(r,n),1===r.length&&(i[t]=r[0]),i.removeListener&&this.emit("removeListener",t,o||e);}return this;},i.prototype.removeAllListeners=function(t){var e,r,i;if(r=this._events,!r)return this;if(!r.removeListener)return 0===arguments.length?(this._events=w(null),this._eventsCount=0):r[t]&&(0==--this._eventsCount?this._events=w(null):delete r[t]),this;if(0===arguments.length){var n,a=E(r);for(i=0;i=0;i--)this.removeListener(t,e[i]);return this;},i.prototype.listeners=function(t){return d(this,t,!0);},i.prototype.rawListeners=function(t){return d(this,t,!1);},i.listenerCount=function(t,e){return"function"==typeof t.listenerCount?t.listenerCount(e):p.call(t,e);},i.prototype.listenerCount=p,i.prototype.eventNames=function(){return this._eventsCount>0?Reflect.ownKeys(this._events):[];};},{}],53:[function(t,e,r){function i(){return(0,eval)("this");}var n=t("./lib/parser");e.exports={create:function(e,r){if(r=r||i(),e instanceof r.ArrayBuffer){var a=t("./lib/dom-bufferstream");return new n(new a(e,0,e.byteLength,!0,r));}var o=t("./lib/bufferstream");return new n(new o(e,0,e.length,!0));}};},{"./lib/bufferstream":54,"./lib/dom-bufferstream":56,"./lib/parser":60}],54:[function(t,e,r){function i(t,e,r,i){this.buffer=t,this.offset=e||0,r="number"==typeof r?r:t.length,this.endPosition=this.offset+r,this.setBigEndian(i);}i.prototype={setBigEndian:function(t){this.bigEndian=!!t;},nextUInt8:function(){var t=this.buffer.readUInt8(this.offset);return this.offset+=1,t;},nextInt8:function(){var t=this.buffer.readInt8(this.offset);return this.offset+=1,t;},nextUInt16:function(){var t=this.bigEndian?this.buffer.readUInt16BE(this.offset):this.buffer.readUInt16LE(this.offset);return this.offset+=2,t;},nextUInt32:function(){var t=this.bigEndian?this.buffer.readUInt32BE(this.offset):this.buffer.readUInt32LE(this.offset);return this.offset+=4,t;},nextInt16:function(){var t=this.bigEndian?this.buffer.readInt16BE(this.offset):this.buffer.readInt16LE(this.offset);return this.offset+=2,t;},nextInt32:function(){var t=this.bigEndian?this.buffer.readInt32BE(this.offset):this.buffer.readInt32LE(this.offset);return this.offset+=4,t;},nextFloat:function(){var t=this.bigEndian?this.buffer.readFloatBE(this.offset):this.buffer.readFloatLE(this.offset);return this.offset+=4,t;},nextDouble:function(){var t=this.bigEndian?this.buffer.readDoubleBE(this.offset):this.buffer.readDoubleLE(this.offset);return this.offset+=8,t;},nextBuffer:function(t){var e=this.buffer.slice(this.offset,this.offset+t);return this.offset+=t,e;},remainingLength:function(){return this.endPosition-this.offset;},nextString:function(t){var e=this.buffer.toString("utf8",this.offset,this.offset+t);return this.offset+=t,e;},mark:function(){var t=this;return{openWithOffset:function(e){return e=(e||0)+this.offset,new i(t.buffer,e,t.endPosition-e,t.bigEndian);},offset:this.offset};},offsetFrom:function(t){return this.offset-t.offset;},skip:function(t){this.offset+=t;},branch:function(t,e){return e="number"==typeof e?e:this.endPosition-(this.offset+t),new i(this.buffer,this.offset+t,e,this.bigEndian);}},e.exports=i;},{}],55:[function(t,e,r){function i(t){return parseInt(t,10);}function n(t,e){t=t.map(i),e=e.map(i);var r=t[0],n=t[1]-1,a=t[2],o=e[0],s=e[1],u=e[2],h=Date.UTC(r,n,a,o,s,u,0),l=h/1e3;return l;}function a(t){var e=t.substr(0,10).split("-"),r=t.substr(11,8).split(":"),a=t.substr(19,6),o=a.split(":").map(i),s=o[0]*u+o[1]*h,l=n(e,r);if(l-=s,"number"==typeof l&&!isNaN(l))return l;}function o(t){var e=t.split(" "),r=e[0].split(":"),i=e[1].split(":"),a=n(r,i);if("number"==typeof a&&!isNaN(a))return a;}function s(t){var e=19===t.length&&":"===t.charAt(4),r=25===t.length&&"T"===t.charAt(10);return r?a(t):e?o(t):void 0;}var u=3600,h=60;e.exports={parseDateWithSpecFormat:o,parseDateWithTimezoneFormat:a,parseExifDate:s};},{}],56:[function(t,e,r){function i(t,e,r,i,n,a){this.global=n,e=e||0,r=r||t.byteLength-e,this.arrayBuffer=t.slice(e,e+r),this.view=new n.DataView(this.arrayBuffer,0,this.arrayBuffer.byteLength),this.setBigEndian(i),this.offset=0,this.parentOffset=(a||0)+e;}i.prototype={setBigEndian:function(t){this.littleEndian=!t;},nextUInt8:function(){var t=this.view.getUint8(this.offset);return this.offset+=1,t;},nextInt8:function(){var t=this.view.getInt8(this.offset);return this.offset+=1,t;},nextUInt16:function(){var t=this.view.getUint16(this.offset,this.littleEndian);return this.offset+=2,t;},nextUInt32:function(){var t=this.view.getUint32(this.offset,this.littleEndian);return this.offset+=4,t;},nextInt16:function(){var t=this.view.getInt16(this.offset,this.littleEndian);return this.offset+=2,t;},nextInt32:function(){var t=this.view.getInt32(this.offset,this.littleEndian);return this.offset+=4,t;},nextFloat:function(){var t=this.view.getFloat32(this.offset,this.littleEndian);return this.offset+=4,t;},nextDouble:function(){var t=this.view.getFloat64(this.offset,this.littleEndian);return this.offset+=8,t;},nextBuffer:function(t){var e=this.arrayBuffer.slice(this.offset,this.offset+t);return this.offset+=t,e;},remainingLength:function(){return this.arrayBuffer.byteLength-this.offset;},nextString:function(t){var e=this.arrayBuffer.slice(this.offset,this.offset+t);return e=String.fromCharCode.apply(null,new this.global.Uint8Array(e)),this.offset+=t,e;},mark:function(){var t=this;return{openWithOffset:function(e){return e=(e||0)+this.offset,new i(t.arrayBuffer,e,t.arrayBuffer.byteLength-e,!t.littleEndian,t.global,t.parentOffset);},offset:this.offset,getParentOffset:function(){return t.parentOffset;}};},offsetFrom:function(t){return this.parentOffset+this.offset-(t.offset+t.getParentOffset());},skip:function(t){this.offset+=t;},branch:function(t,e){return e="number"==typeof e?e:this.arrayBuffer.byteLength-(this.offset+t),new i(this.arrayBuffer,this.offset+t,e,!this.littleEndian,this.global,this.parentOffset);}},e.exports=i;},{}],57:[function(t,e,r){e.exports={exif:{1:"InteropIndex",2:"InteropVersion",11:"ProcessingSoftware",254:"SubfileType",255:"OldSubfileType",256:"ImageWidth",257:"ImageHeight",258:"BitsPerSample",259:"Compression",262:"PhotometricInterpretation",263:"Thresholding",264:"CellWidth",265:"CellLength",266:"FillOrder",269:"DocumentName",270:"ImageDescription",271:"Make",272:"Model",273:"StripOffsets",274:"Orientation",277:"SamplesPerPixel",278:"RowsPerStrip",279:"StripByteCounts",280:"MinSampleValue",281:"MaxSampleValue",282:"XResolution",283:"YResolution",284:"PlanarConfiguration",285:"PageName",286:"XPosition",287:"YPosition",288:"FreeOffsets",289:"FreeByteCounts",290:"GrayResponseUnit",291:"GrayResponseCurve",292:"T4Options",293:"T6Options",296:"ResolutionUnit",297:"PageNumber",300:"ColorResponseUnit",301:"TransferFunction",305:"Software",306:"ModifyDate",315:"Artist",316:"HostComputer",317:"Predictor",318:"WhitePoint",319:"PrimaryChromaticities",320:"ColorMap",321:"HalftoneHints",322:"TileWidth",323:"TileLength",324:"TileOffsets",325:"TileByteCounts",326:"BadFaxLines",327:"CleanFaxData",328:"ConsecutiveBadFaxLines",330:"SubIFD",332:"InkSet",333:"InkNames",334:"NumberofInks",336:"DotRange",337:"TargetPrinter",338:"ExtraSamples",339:"SampleFormat",340:"SMinSampleValue",341:"SMaxSampleValue",342:"TransferRange",343:"ClipPath",344:"XClipPathUnits",345:"YClipPathUnits",346:"Indexed",347:"JPEGTables",351:"OPIProxy",400:"GlobalParametersIFD",401:"ProfileType",402:"FaxProfile",403:"CodingMethods",404:"VersionYear",405:"ModeNumber",433:"Decode",434:"DefaultImageColor",435:"T82Options",437:"JPEGTables",512:"JPEGProc",513:"ThumbnailOffset",514:"ThumbnailLength",515:"JPEGRestartInterval",517:"JPEGLosslessPredictors",518:"JPEGPointTransforms",519:"JPEGQTables",520:"JPEGDCTables",521:"JPEGACTables",529:"YCbCrCoefficients",530:"YCbCrSubSampling",531:"YCbCrPositioning",532:"ReferenceBlackWhite",559:"StripRowCounts",700:"ApplicationNotes",999:"USPTOMiscellaneous",4096:"RelatedImageFileFormat",4097:"RelatedImageWidth",4098:"RelatedImageHeight",18246:"Rating",18247:"XP_DIP_XML",18248:"StitchInfo",18249:"RatingPercent",32781:"ImageID",32931:"WangTag1",32932:"WangAnnotation",32933:"WangTag3",32934:"WangTag4",32995:"Matteing",32996:"DataType",32997:"ImageDepth",32998:"TileDepth",33405:"Model2",33421:"CFARepeatPatternDim",33422:"CFAPattern2",33423:"BatteryLevel",33424:"KodakIFD",33432:"Copyright",33434:"ExposureTime",33437:"FNumber",33445:"MDFileTag",33446:"MDScalePixel",33447:"MDColorTable",33448:"MDLabName",33449:"MDSampleInfo",33450:"MDPrepDate",33451:"MDPrepTime",33452:"MDFileUnits",33550:"PixelScale",33589:"AdventScale",33590:"AdventRevision",33628:"UIC1Tag",33629:"UIC2Tag",33630:"UIC3Tag",33631:"UIC4Tag",33723:"IPTC-NAA",33918:"IntergraphPacketData",33919:"IntergraphFlagRegisters",33920:"IntergraphMatrix",33921:"INGRReserved",33922:"ModelTiePoint",34016:"Site",34017:"ColorSequence",34018:"IT8Header",34019:"RasterPadding",34020:"BitsPerRunLength",34021:"BitsPerExtendedRunLength",34022:"ColorTable",34023:"ImageColorIndicator",34024:"BackgroundColorIndicator",34025:"ImageColorValue",34026:"BackgroundColorValue",34027:"PixelIntensityRange",34028:"TransparencyIndicator",34029:"ColorCharacterization",34030:"HCUsage",34031:"TrapIndicator",34032:"CMYKEquivalent",34118:"SEMInfo",34152:"AFCP_IPTC",34232:"PixelMagicJBIGOptions",34264:"ModelTransform",34306:"WB_GRGBLevels",34310:"LeafData",34377:"PhotoshopSettings",34665:"ExifOffset",34675:"ICC_Profile",34687:"TIFF_FXExtensions",34688:"MultiProfiles",34689:"SharedData",34690:"T88Options",34732:"ImageLayer",34735:"GeoTiffDirectory",34736:"GeoTiffDoubleParams",34737:"GeoTiffAsciiParams",34850:"ExposureProgram",34852:"SpectralSensitivity",34853:"GPSInfo",34855:"ISO",34856:"Opto-ElectricConvFactor",34857:"Interlace",34858:"TimeZoneOffset",34859:"SelfTimerMode",34864:"SensitivityType",34865:"StandardOutputSensitivity",34866:"RecommendedExposureIndex",34867:"ISOSpeed",34868:"ISOSpeedLatitudeyyy",34869:"ISOSpeedLatitudezzz",34908:"FaxRecvParams",34909:"FaxSubAddress",34910:"FaxRecvTime",34954:"LeafSubIFD",36864:"ExifVersion",36867:"DateTimeOriginal",36868:"CreateDate",37121:"ComponentsConfiguration",37122:"CompressedBitsPerPixel",37377:"ShutterSpeedValue",37378:"ApertureValue",37379:"BrightnessValue",37380:"ExposureCompensation",37381:"MaxApertureValue",37382:"SubjectDistance",37383:"MeteringMode",37384:"LightSource",37385:"Flash",37386:"FocalLength",37387:"FlashEnergy",37388:"SpatialFrequencyResponse",37389:"Noise",37390:"FocalPlaneXResolution",37391:"FocalPlaneYResolution",37392:"FocalPlaneResolutionUnit",37393:"ImageNumber",37394:"SecurityClassification",37395:"ImageHistory",37396:"SubjectArea",37397:"ExposureIndex",37398:"TIFF-EPStandardID",37399:"SensingMethod",37434:"CIP3DataFile",37435:"CIP3Sheet",37436:"CIP3Side",37439:"StoNits",37500:"MakerNote",37510:"UserComment",37520:"SubSecTime",37521:"SubSecTimeOriginal",37522:"SubSecTimeDigitized",37679:"MSDocumentText",37680:"MSPropertySetStorage",37681:"MSDocumentTextPosition",37724:"ImageSourceData",40091:"XPTitle",40092:"XPComment",40093:"XPAuthor",40094:"XPKeywords",40095:"XPSubject",40960:"FlashpixVersion",40961:"ColorSpace",40962:"ExifImageWidth",40963:"ExifImageHeight",40964:"RelatedSoundFile",40965:"InteropOffset",41483:"FlashEnergy",41484:"SpatialFrequencyResponse",41485:"Noise",41486:"FocalPlaneXResolution",41487:"FocalPlaneYResolution",41488:"FocalPlaneResolutionUnit",41489:"ImageNumber",41490:"SecurityClassification",41491:"ImageHistory",41492:"SubjectLocation",41493:"ExposureIndex",41494:"TIFF-EPStandardID",41495:"SensingMethod",41728:"FileSource",41729:"SceneType",41730:"CFAPattern",41985:"CustomRendered",41986:"ExposureMode",41987:"WhiteBalance",41988:"DigitalZoomRatio",41989:"FocalLengthIn35mmFormat",41990:"SceneCaptureType",41991:"GainControl",41992:"Contrast",41993:"Saturation",41994:"Sharpness",41995:"DeviceSettingDescription",41996:"SubjectDistanceRange",42016:"ImageUniqueID",42032:"OwnerName",42033:"SerialNumber",42034:"LensInfo",42035:"LensMake",42036:"LensModel",42037:"LensSerialNumber",42112:"GDALMetadata",42113:"GDALNoData",42240:"Gamma",44992:"ExpandSoftware",44993:"ExpandLens",44994:"ExpandFilm",44995:"ExpandFilterLens",44996:"ExpandScanner",44997:"ExpandFlashLamp",48129:"PixelFormat",48130:"Transformation",48131:"Uncompressed",48132:"ImageType",48256:"ImageWidth",48257:"ImageHeight",48258:"WidthResolution",48259:"HeightResolution",48320:"ImageOffset",48321:"ImageByteCount",48322:"AlphaOffset",48323:"AlphaByteCount",48324:"ImageDataDiscard",48325:"AlphaDataDiscard",50215:"OceScanjobDesc",50216:"OceApplicationSelector",50217:"OceIDNumber",50218:"OceImageLogic",50255:"Annotations",50341:"PrintIM",50560:"USPTOOriginalContentType",50706:"DNGVersion",50707:"DNGBackwardVersion",50708:"UniqueCameraModel",50709:"LocalizedCameraModel",50710:"CFAPlaneColor",50711:"CFALayout",50712:"LinearizationTable",50713:"BlackLevelRepeatDim",50714:"BlackLevel",50715:"BlackLevelDeltaH",50716:"BlackLevelDeltaV",50717:"WhiteLevel",50718:"DefaultScale",50719:"DefaultCropOrigin",50720:"DefaultCropSize",50721:"ColorMatrix1",50722:"ColorMatrix2",50723:"CameraCalibration1",50724:"CameraCalibration2",50725:"ReductionMatrix1",50726:"ReductionMatrix2",50727:"AnalogBalance",50728:"AsShotNeutral",50729:"AsShotWhiteXY",50730:"BaselineExposure",50731:"BaselineNoise",50732:"BaselineSharpness",50733:"BayerGreenSplit",50734:"LinearResponseLimit",50735:"CameraSerialNumber",50736:"DNGLensInfo",50737:"ChromaBlurRadius",50738:"AntiAliasStrength",50739:"ShadowScale",50740:"DNGPrivateData",50741:"MakerNoteSafety",50752:"RawImageSegmentation",50778:"CalibrationIlluminant1",50779:"CalibrationIlluminant2",50780:"BestQualityScale",50781:"RawDataUniqueID",50784:"AliasLayerMetadata",50827:"OriginalRawFileName",50828:"OriginalRawFileData",50829:"ActiveArea",50830:"MaskedAreas",50831:"AsShotICCProfile",50832:"AsShotPreProfileMatrix",50833:"CurrentICCProfile",50834:"CurrentPreProfileMatrix",50879:"ColorimetricReference",50898:"PanasonicTitle",50899:"PanasonicTitle2",50931:"CameraCalibrationSig",50932:"ProfileCalibrationSig",50933:"ProfileIFD",50934:"AsShotProfileName",50935:"NoiseReductionApplied",50936:"ProfileName",50937:"ProfileHueSatMapDims",50938:"ProfileHueSatMapData1",50939:"ProfileHueSatMapData2",50940:"ProfileToneCurve",50941:"ProfileEmbedPolicy",50942:"ProfileCopyright",50964:"ForwardMatrix1",50965:"ForwardMatrix2",50966:"PreviewApplicationName",50967:"PreviewApplicationVersion",50968:"PreviewSettingsName",50969:"PreviewSettingsDigest",50970:"PreviewColorSpace",50971:"PreviewDateTime",50972:"RawImageDigest",50973:"OriginalRawFileDigest",50974:"SubTileBlockSize",50975:"RowInterleaveFactor",50981:"ProfileLookTableDims",50982:"ProfileLookTableData",51008:"OpcodeList1",51009:"OpcodeList2",51022:"OpcodeList3",51041:"NoiseProfile",51043:"TimeCodes",51044:"FrameRate",51058:"TStop",51081:"ReelName",51089:"OriginalDefaultFinalSize",51090:"OriginalBestQualitySize",51091:"OriginalDefaultCropSize",51105:"CameraLabel",51107:"ProfileHueSatMapEncoding",51108:"ProfileLookTableEncoding",51109:"BaselineExposureOffset",51110:"DefaultBlackRender",51111:"NewRawImageDigest",51112:"RawToPreviewGain",51125:"DefaultUserCrop",59932:"Padding",59933:"OffsetSchema",65000:"OwnerName",65001:"SerialNumber",65002:"Lens",65024:"KDC_IFD",65100:"RawFile",65101:"Converter",65102:"WhiteBalance",65105:"Exposure",65106:"Shadows",65107:"Brightness",65108:"Contrast",65109:"Saturation",65110:"Sharpness",65111:"Smoothness",65112:"MoireFilter"},gps:{0:"GPSVersionID",1:"GPSLatitudeRef",2:"GPSLatitude",3:"GPSLongitudeRef",4:"GPSLongitude",5:"GPSAltitudeRef",6:"GPSAltitude",7:"GPSTimeStamp",8:"GPSSatellites",9:"GPSStatus",10:"GPSMeasureMode",11:"GPSDOP",12:"GPSSpeedRef",13:"GPSSpeed",14:"GPSTrackRef",15:"GPSTrack",16:"GPSImgDirectionRef",17:"GPSImgDirection",18:"GPSMapDatum",19:"GPSDestLatitudeRef",20:"GPSDestLatitude",21:"GPSDestLongitudeRef",22:"GPSDestLongitude",23:"GPSDestBearingRef",24:"GPSDestBearing",25:"GPSDestDistanceRef",26:"GPSDestDistance",27:"GPSProcessingMethod",28:"GPSAreaInformation",29:"GPSDateStamp",30:"GPSDifferential",31:"GPSHPositioningError"}};},{}],58:[function(t,e,r){function i(t,e){switch(t){case 1:return e.nextUInt8();case 3:return e.nextUInt16();case 4:return e.nextUInt32();case 5:return[e.nextUInt32(),e.nextUInt32()];case 6:return e.nextInt8();case 8:return e.nextUInt16();case 9:return e.nextUInt32();case 10:return[e.nextInt32(),e.nextInt32()];case 11:return e.nextFloat();case 12:return e.nextDouble();default:throw new Error("Invalid format while decoding: "+t);}}function n(t){switch(t){case 1:case 2:case 6:case 7:return 1;case 3:case 8:return 2;case 4:case 9:case 11:return 4;case 5:case 10:case 12:return 8;default:return 0;}}function a(t,e){var r,a,o=e.nextUInt16(),s=e.nextUInt16(),u=n(s),h=e.nextUInt32(),l=u*h;if(l>4&&(e=t.openWithOffset(e.nextUInt32())),2===s){r=e.nextString(h);var f=r.indexOf("\0");-1!==f&&(r=r.substr(0,f));}else if(7===s)r=e.nextBuffer(h);else if(0!==s)for(r=[],a=0;a0&&218!==i;){if(255!==t.nextUInt8())throw new Error("Invalid JPEG section offset");i=t.nextUInt8(),r=i>=208&&i<=217||218===i?0:t.nextUInt16()-2,e(i,t.branch(0,r)),t.skip(r);}},getSizeFromSOFSection:function(t){return t.skip(1),{height:t.nextUInt16(),width:t.nextUInt16()};},getSectionName:function(t){var e,r;switch(t){case 216:e="SOI";break;case 196:e="DHT";break;case 219:e="DQT";break;case 221:e="DRI";break;case 218:e="SOS";break;case 254:e="COM";break;case 217:e="EOI";break;default:t>=224&&t<=239?(e="APP",r=t-224):t>=192&&t<=207&&196!==t&&200!==t&&204!==t?(e="SOF",r=t-192):t>=208&&t<=215&&(e="RST",r=t-208);}var i={name:e};return"number"==typeof r&&(i.index=r),i;}};},{}],60:[function(t,e,r){function i(t,e,r,i,n,a,o){this.startMarker=t,this.tags=e,this.imageSize=r,this.thumbnailOffset=i,this.thumbnailLength=n,this.thumbnailType=a,this.app1Offset=o;}function n(t){this.stream=t,this.flags={readBinaryTags:!1,resolveTagNames:!0,simplifyValues:!0,imageSize:!0,hidePointers:!0,returnTags:!0};}var a=t("./jpeg"),o=t("./exif"),s=t("./simplify");i.prototype={hasThumbnail:function(t){return!(!this.thumbnailOffset||!this.thumbnailLength)&&("string"!=typeof t||("image/jpeg"===t.toLowerCase().trim()?6===this.thumbnailType:"image/tiff"===t.toLowerCase().trim()&&1===this.thumbnailType));},getThumbnailOffset:function(){return this.app1Offset+6+this.thumbnailOffset;},getThumbnailLength:function(){return this.thumbnailLength;},getThumbnailBuffer:function(){return this._getThumbnailStream().nextBuffer(this.thumbnailLength);},_getThumbnailStream:function(){return this.startMarker.openWithOffset(this.getThumbnailOffset());},getImageSize:function(){return this.imageSize;},getThumbnailSize:function(){var t,e=this._getThumbnailStream();return a.parseSections(e,function(e,r){"SOF"===a.getSectionName(e).name&&(t=a.getSizeFromSOFSection(r));}),t;}},n.prototype={enableBinaryFields:function(t){return this.flags.readBinaryTags=!!t,this;},enablePointers:function(t){return this.flags.hidePointers=!t,this;},enableTagNames:function(t){return this.flags.resolveTagNames=!!t,this;},enableImageSize:function(t){return this.flags.imageSize=!!t,this;},enableReturnTags:function(t){return this.flags.returnTags=!!t,this;},enableSimpleValues:function(t){return this.flags.simplifyValues=!!t,this;},parse:function(){var e,r,n,u,h,l,f,c,d,p=this.stream.mark(),m=p.openWithOffset(0),b=this.flags;return b.resolveTagNames&&(f=t("./exif-tags")),b.resolveTagNames?(e={},c=function(t){return e[t.name];},d=function(t,r){e[t.name]=r;}):(e=[],c=function(t){var r;for(r=0;r1))return null;var r=function(t,r){r=Object.assign({offset:0},r);for(var i=0;i1&&void 0!==arguments[1]?arguments[1]:0;return t.findIndex(function(t,r,i){return r>=e&&80===i[r]&&75===i[r+1]&&3===i[r+2]&&4===i[r+3];});},l=0,f=!1,c=null;do{var d=l+30;if(f||(f=r(s,{offset:d})||r(u,{offset:d})),c||(i("word/",{offset:d})?c={ext:"docx",mime:"application/vnd.openxmlformats-officedocument.wordprocessingml.document"}:i("ppt/",{offset:d})?c={ext:"pptx",mime:"application/vnd.openxmlformats-officedocument.presentationml.presentation"}:i("xl/",{offset:d})&&(c={ext:"xlsx",mime:"application/vnd.openxmlformats-officedocument.spreadsheetml.sheet"})),f&&c)return c;l=h(e,d);}while(l>=0);if(c)return c;}if(r([80,75])&&(3===e[2]||5===e[2]||7===e[2])&&(4===e[3]||6===e[3]||8===e[3]))return{ext:"zip",mime:"application/zip"};if(r([117,115,116,97,114],{offset:257}))return{ext:"tar",mime:"application/x-tar"};if(r([82,97,114,33,26,7])&&(0===e[6]||1===e[6]))return{ext:"rar",mime:"application/x-rar-compressed"};if(r([31,139,8]))return{ext:"gz",mime:"application/gzip"};if(r([66,90,104]))return{ext:"bz2",mime:"application/x-bzip2"};if(r([55,122,188,175,39,28]))return{ext:"7z",mime:"application/x-7z-compressed"};if(r([120,1]))return{ext:"dmg",mime:"application/x-apple-diskimage"};if(r([51,103,112,53])||r([0,0,0])&&r([102,116,121,112],{offset:4})&&(r([109,112,52,49],{offset:8})||r([109,112,52,50],{offset:8})||r([105,115,111,109],{offset:8})||r([105,115,111,50],{offset:8})||r([109,109,112,52],{offset:8})||r([77,52,86],{offset:8})||r([100,97,115,104],{offset:8})))return{ext:"mp4",mime:"video/mp4"};if(r([77,84,104,100]))return{ext:"mid",mime:"audio/midi"};if(r([26,69,223,163])){var p=e.subarray(4,4100),m=p.findIndex(function(t,e,r){return 66===r[e]&&130===r[e+1];});if(-1!==m){var b=m+3,g=function(t){return(0,n.default)(t).every(function(t,e){return p[b+e]===t.charCodeAt(0);});};if(g("matroska"))return{ext:"mkv",mime:"video/x-matroska"};if(g("webm"))return{ext:"webm",mime:"video/webm"};}}if(r([0,0,0,20,102,116,121,112,113,116,32,32])||r([102,114,101,101],{offset:4})||r([102,116,121,112,113,116,32,32],{offset:4})||r([109,100,97,116],{offset:4})||r([119,105,100,101],{offset:4}))return{ext:"mov",mime:"video/quicktime"};if(r([82,73,70,70])){if(r([65,86,73],{offset:8}))return{ext:"avi",mime:"video/vnd.avi"};if(r([87,65,86,69],{offset:8}))return{ext:"wav",mime:"audio/vnd.wave"};if(r([81,76,67,77],{offset:8}))return{ext:"qcp",mime:"audio/qcelp"};}if(r([48,38,178,117,142,102,207,17,166,217]))return{ext:"wmv",mime:"video/x-ms-wmv"};if(r([0,0,1,186])||r([0,0,1,179]))return{ext:"mpg",mime:"video/mpeg"};if(r([102,116,121,112,51,103],{offset:4}))return{ext:"3gp",mime:"video/3gpp"};for(var _=0;_<2&&_=3&&(a=r),"[object Array]"===n.call(t)?o(t,e,a):"string"==typeof t?s(t,e,a):u(t,e,a);};e.exports=h;},{"is-callable":77}],64:[function(t,e,r){"use strict";function i(t,e,r,i){function a(t){var e=t.length;if(e<2||e>256||e&e-1)throw new Error("Invalid code/color length, must be power of 2 and 2 .. 256.");return e;}var o=0,s=(i=void 0===i?{}:i,void 0===i.loop?null:i.loop),u=void 0===i.palette?null:i.palette;if(e<=0||r<=0||e>65535||r>65535)throw new Error("Width/Height invalid.");t[o++]=71,t[o++]=73,t[o++]=70,t[o++]=56,t[o++]=57,t[o++]=97;var h=0,l=0;if(null!==u){for(var f=a(u);f>>=1;)++h;if(f=1<=f)throw new Error("Background index out of range.");if(0===l)throw new Error("Background index explicitly passed as 0.");}}if(t[o++]=255&e,t[o++]=e>>8&255,t[o++]=255&r,t[o++]=r>>8&255,t[o++]=(null!==u?128:0)|h,t[o++]=l,t[o++]=0,null!==u)for(var c=0,d=u.length;c>16&255,t[o++]=p>>8&255,t[o++]=255&p;}if(null!==s){if(s<0||s>65535)throw new Error("Loop count invalid.");t[o++]=33,t[o++]=255,t[o++]=11,t[o++]=78,t[o++]=69,t[o++]=84,t[o++]=83,t[o++]=67,t[o++]=65,t[o++]=80,t[o++]=69,t[o++]=50,t[o++]=46,t[o++]=48,t[o++]=3,t[o++]=1,t[o++]=255&s,t[o++]=s>>8&255,t[o++]=0;}var m=!1;this.addFrame=function(e,r,i,s,h,l){if(!0===m&&(--o,m=!1),l=void 0===l?{}:l,e<0||r<0||e>65535||r>65535)throw new Error("x/y invalid.");if(i<=0||s<=0||i>65535||s>65535)throw new Error("Width/Height invalid.");if(h.length>=1;)++p;d=1<3)throw new Error("Disposal out of range.");var _=!1,v=0;if(void 0!==l.transparent&&null!==l.transparent&&(_=!0,v=l.transparent,v<0||v>=d))throw new Error("Transparent color index.");if((0!==g||_||0!==b)&&(t[o++]=33,t[o++]=249,t[o++]=4,t[o++]=g<<2|(!0===_?1:0),t[o++]=255&b,t[o++]=b>>8&255,t[o++]=v,t[o++]=0),t[o++]=44,t[o++]=255&e,t[o++]=e>>8&255,t[o++]=255&r,t[o++]=r>>8&255,t[o++]=255&i,t[o++]=i>>8&255,t[o++]=255&s,t[o++]=s>>8&255,t[o++]=!0===f?128|p-1:0,!0===f)for(var y=0,w=c.length;y>16&255,t[o++]=E>>8&255,t[o++]=255&E;}return o=n(t,o,p<2?2:p,h),o;},this.end=function(){return!1===m&&(t[o++]=59,m=!0),o;},this.getOutputBuffer=function(){return t;},this.setOutputBuffer=function(e){t=e;},this.getOutputBufferPosition=function(){return o;},this.setOutputBufferPosition=function(t){o=t;};}function n(t,e,r,i){function n(r){for(;c>=r;)t[e++]=255&d,d>>=8,c-=8,e===o+256&&(t[o]=255,o=e++);}function a(t){d|=t<=8;)t[e++]=255&d,d>>=8,c-=8,e===o+256&&(t[o]=255,o=e++);4096===l?(a(s),l=h+1,f=r+1,m={}):(l>=1<>7,s=7&n,u=1<=0))throw Error("Invalid block size");if(0===g)break;e+=g;}break;case 249:if(4!==t[e++]||0!==t[e+4])throw new Error("Invalid graphics extension block.");var _=t[e++];d=t[e++]|t[e++]<<8,p=t[e++],0==(1&_)&&(p=null),m=_>>2&7,e++;break;case 254:for(;;){g=t[e++];if(!(g>=0))throw Error("Invalid block size");if(0===g)break;e+=g;}break;default:throw new Error("Unknown graphic control label: 0x"+t[e-1].toString(16));}break;case 44:var v=t[e++]|t[e++]<<8,y=t[e++]|t[e++]<<8,w=t[e++]|t[e++]<<8,E=t[e++]|t[e++]<<8,x=t[e++],S=x>>7,k=x>>6&1,M=7&x,A=1<=0))throw Error("Invalid block size");if(0===g)break;e+=g;}c.push({x:v,y:y,width:w,height:E,has_local_palette:R,palette_offset:I,palette_size:T,data_offset:P,data_length:e-P,transparent_index:p,interlaced:!!k,delay:d,disposal:m});break;case 59:f=!1;break;default:throw new Error("Unknown gif block: 0x"+t[e-1].toString(16));}this.numFrames=function(){return c.length;},this.loopCount=function(){return b;},this.frameInfo=function(t){if(t<0||t>=c.length)throw new Error("Frame index out of range.");return c[t];},this.decodeAndBlitFrameBGRA=function(e,i){var n=this.frameInfo(e),a=n.width*n.height,s=new Uint8Array(a);o(t,n.data_offset,s,a);var u=n.palette_offset,h=n.transparent_index;null===h&&(h=256);var l=n.width,f=r-l,c=l,d=4*(n.y*r+n.x),p=4*((n.y+n.height)*r+n.x),m=d,b=4*f;!0===n.interlaced&&(b+=4*r*7);for(var g=8,_=0,v=s.length;_=p&&(b=4*f+4*r*(g-1),m=d+(l+f)*(g<<1),g>>=1)),y===h)m+=4;else{var w=t[u+3*y],E=t[u+3*y+1],x=t[u+3*y+2];i[m++]=x,i[m++]=E,i[m++]=w,i[m++]=255;}--c;}},this.decodeAndBlitFrameRGBA=function(e,i){var n=this.frameInfo(e),a=n.width*n.height,s=new Uint8Array(a);o(t,n.data_offset,s,a);var u=n.palette_offset,h=n.transparent_index;null===h&&(h=256);var l=n.width,f=r-l,c=l,d=4*(n.y*r+n.x),p=4*((n.y+n.height)*r+n.x),m=d,b=4*f;!0===n.interlaced&&(b+=4*r*7);for(var g=8,_=0,v=s.length;_=p&&(b=4*f+4*r*(g-1),m=d+(l+f)*(g<<1),g>>=1)),y===h)m+=4;else{var w=t[u+3*y],E=t[u+3*y+1],x=t[u+3*y+2];i[m++]=w,i[m++]=E,i[m++]=x,i[m++]=255;}--c;}};}function o(t,e,r,i){for(var n=t[e++],a=1<>=u,l-=u,b!==a){if(b===o)break;for(var g=ba;)v=p[v]>>8,++_;var y=v,w=c+_+(g!==b?1:0);if(w>i)return void console.log("Warning, gif stream longer than expected.");r[c++]=y,c+=_;var E=c;for(g!==b&&(r[c++]=y),v=g;_--;)v=p[v],r[--E]=255&v,v>>=8;null!==m&&s<4096&&(p[s++]=m<<8|y,s>=h+1&&u<12&&(++u,h=h<<1|1)),m=b;}else s=o+1,u=n+1,h=(1<this.bitmap.width)throw new Error("copy exceeds width of source bitmap");if(e+a>t.bitmap.width)throw new Error("copy exceeds width of target bitmap");if(n+o>this.bitmap.height)throw new Error("copy exceeds height of source bitmap");if(r+o>t.bitmap.height)throw new Erro("copy exceeds height of target bitmap");const s=this.bitmap.data,u=t.bitmap.data,h=4*this.bitmap.width,l=4*t.bitmap.width,f=4*a;let c=n*h+4*i,d=r*l+4*e;for(;--o>=0;)s.copy(u,d,c,c+f),c+=h,d+=l;return this;}fillRGBA(t){const e=this.bitmap.data,r=4*this.bitmap.height;let i=0;for(;i{const n=Math.round(.299*t[i]+.587*t[i+1]+.114*t[i+2]);t[i]=n,t[i+1]=n,t[i+2]=n;}),this;}reframe(t,e,i,n,a){const o=t<0?0:t,s=e<0?0:e,u=i+o>this.bitmap.width?this.bitmap.width-o:i,h=n+s>this.bitmap.height?this.bitmap.height-s:n,l=t<0?-t:0,f=e<0?-e:0;let c;if(void 0===a){if(o!==t||s!=e||u!==i||h!==n)throw new GifError("fillRGBA required for this reframing");c=new r(i,n);}else c=new r(i,n,a);return this.blit(c,l,f,o,s,u,h),this.bitmap=c.bitmap,this;}scale(e){if(1===e)return;if(!Number.isInteger(e)||e<1)throw new Error("the scale must be an integer >= 1");const r=this.bitmap.width,i=this.bitmap.height,n=r*e*4,a=this.bitmap.data,o=new t(i*n*e);let s,u=0,h=0;for(let t=0;te)n=r-1;else{if(!(t[r]i;)i<<=1;e.length=i,e.fill(0,r);}function h(t,e){let r=t.bitmap.width*t.bitmap.height;return r=Math.ceil(r*e/8),r+=Math.ceil(r/255),v+r+768;}function l(t,e,r){const o=r.colors,s=o.length<=8?n:a,u=e.bitmap.data,h=new i(u.length/4);let l=o.length,f=0,c=0;for(;f>8&16777215;h[c]=s(o,t);}else h[c]=l;f+=4,++c;}if(r.usesTransparency){if(256===l)throw new m(`Frame ${t} already has 256 colors`+"and so can't use transparency");}else l=null;return{buffer:h,transparentIndex:l};}function f(t){let e=t.indexCount,r=0;for(--e;e;)++r,e>>=1;return r>0?r:1;}function c(t,e,r,n,a){if(r.interlaced)throw new m("writing interlaced GIFs is not supported");const o=l(e,r,n),s={delay:r.delayCentisecs,disposal:r.disposalMethod,transparent:o.transparentIndex};a&&(u(n),s.palette=n.colors);try{let e,n=t.getOutputBuffer(),a=t.getOutputBufferPosition(),u=!0;for(;u;)if(e=t.addFrame(r.xOffset,r.yOffset,r.bitmap.width,r.bitmap.height,o.buffer,s),u=!1,e>=n.length-1){const e=new i(1.5*n.length);n.copy(e),t.setOutputBuffer(e),t.setOutputBufferPosition(a),n=e,u=!0;}return n;}catch(t){throw new m(t);}}const d=t("omggif"),{Gif:p,GifError:m}=t("./gif");let b;e.nextTick(()=>{b=t("./gifutil");});const{GifFrame:g}=t("./gifframe"),_=200,v=100;class y{constructor(t={}){this._transparentRGB=null,"number"==typeof t.transparentRGB&&0!==t.transparentRGB&&(this._transparentRGBA=256*t.transparentRGB),this._testInitialBufferSize=0;}decodeGif(t){try{let e;try{e=new d.GifReader(t);}catch(t){throw new m(t);}const r=e.numFrames(),i=[],n={width:e.width,height:e.height,loops:e.loopCount(),usesTransparency:!1};for(let t=0;tn.width)for(let e=0;e0)return this._testInitialBufferSize;let r=_+768;const i=f(t);return e.forEach(t=>{r+=h(t,i);}),r;}_getSizeEstimateLocal(t,e){if(this._testInitialBufferSize>0)return this._testInitialBufferSize;let r=_;for(let i=0;i>8&16777215;t.add(i);}r+=4;}const n=new Array(t.size),a=t.values();for(r=0;rt-e);let o=n.length;return i&&++o,{colors:n,usesTransparency:i,indexCount:o};}}a.DisposeToAnything=0,a.DisposeNothing=1,a.DisposeToBackgroundColor=2,a.DisposeToPrevious=3,r.GifFrame=a;},{"./bitmapimage":65,"./gif":66}],69:[function(t,e,r){(function(e){"use strict";function i(t,e,r,i,n){const a=Array.isArray(t)?t:[t],o=["FloydSteinberg","FalseFloydSteinberg","Stucki","Atkinson","Jarvis","Burkes","Sierra","TwoSierra","SierraLite"];if(n){if(o.indexOf(n.ditherAlgorithm)<0)throw new Error(`Invalid ditherAlgorithm '${n.ditherAlgorithm}'`);void 0===n.serpentine&&(n.serpentine=!0),void 0===n.minimumColorDistanceToDither&&(n.minimumColorDistanceToDither=0),void 0===n.calculateErrorLikeGIMP&&(n.calculateErrorLikeGIMP=!1);}const u=new s.distance.Euclidean(),h=new s.palette[e](u,r,i);let l;l=n?new s.image.ErrorDiffusionArray(u,s.image.ErrorDiffusionArrayKernel[n.ditherAlgorithm],n.serpentine,n.minimumColorDistanceToDither,n.calculateErrorLikeGIMP):new s.image.NearestColor(u);const f=[];a.forEach(t=>{const e=t.bitmap.data,r=new ArrayBuffer(e.length),i=new Uint32Array(r);for(let t=0,r=0;t{o.readFile(t,(t,i)=>t?r(t):e(i));});}function a(t,e){return new Promise((r,i)=>{o.writeFile(t,e,t=>t?i(t):r());});}const o=t("fs"),s=t("image-q"),u=t("./bitmapimage"),{GifFrame:h}=t("./gifframe"),{GifError:l}=t("./gif"),{GifCodec:f}=t("./gifcodec"),c=[".jpg",".jpeg",".png",".bmp"],d=new f();r.cloneFrames=function(t){let e=[];return t.forEach(t=>{e.push(new h(t));}),e;},r.getColorInfo=function(t,e){let r=!1;const i=[];for(let e=0;e256)throw new l(`Frame ${e} uses more than 256 color indexes`);i.push(n);}if(0===e)return{usesTransparency:r,palettes:i};const n=new Set();i.forEach(t=>{t.colors.forEach(t=>{n.add(t);});});let a=n.size;if(r&&++a,e&&a>e)return{usesTransparency:r,palettes:i};const o=new Array(n.size),s=n.values();for(let t=0;tt-e),{colors:o,indexCount:a,usesTransparency:r,palettes:i};},r.copyAsJimp=function(t,e){return r.shareAsJimp(t,new u(e));},r.getMaxDimensions=function(t){let e=0,r=0;return t.forEach(t=>{const i=t.xOffset+t.bitmap.width;i>e&&(e=i);const n=t.yOffset+t.bitmap.height;n>r&&(r=n);}),{maxWidth:e,maxHeight:r};},r.quantizeDekker=function(t,e,r){e=e||256,i(t,"NeuQuantFloat",e,0,r);},r.quantizeSorokin=function(t,e,r,n){let a;switch(e=e||256,r=r||"min-pop",r){case"min-pop":a=2;break;case"top-pop":a=1;break;default:throw new Error(`Invalid quantizeSorokin histogram '${r}'`);}i(t,"RGBQuant",e,a,n);},r.quantizeWu=function(t,e,r,n){if(e=e||256,r=r||5,r<1||r>8)throw new Error("Invalid quantization quality");i(t,"WuQuant",e,r,n);},r.read=function(t,r){return r=r||d,e.isBuffer(t)?r.decodeGif(t):n(t).then(t=>r.decodeGif(t));},r.shareAsJimp=function(t,e){const r=new t(e.bitmap.width,e.bitmap.height,0);return r.bitmap.data=e.bitmap.data,r;},r.write=function(t,e,r,i){i=i||d;const n=t.match(/\.[a-zA-Z]+$/);if(null!==n&&c.includes(n[0].toLowerCase()))throw new Error(`GIF '${t}' has an unexpected suffix`);return i.encodeGif(e,r).then(e=>a(t,e.buffer).then(()=>e));};}).call(this,{isBuffer:t("../../is-buffer/index.js")});},{"../../is-buffer/index.js":76,"./bitmapimage":65,"./gif":66,"./gifcodec":67,"./gifframe":68,fs:47,"image-q":74}],70:[function(t,e,r){"use strict";const i=t("./bitmapimage"),{Gif:n,GifError:a}=t("./gif"),{GifCodec:o}=t("./gifcodec"),{GifFrame:s}=t("./gifframe"),u=t("./gifutil");e.exports={BitmapImage:i,Gif:n,GifCodec:o,GifFrame:s,GifUtil:u,GifError:a};},{"./bitmapimage":65,"./gif":66,"./gifcodec":67,"./gifframe":68,"./gifutil":69}],71:[function(t,e,r){(function(t){var r;r=void 0!==window?window:void 0!==t?t:"undefined"!=typeof self?self:{},e.exports=r;}).call(this,"undefined"!=typeof __webpack_require__.g?__webpack_require__.g:"undefined"!=typeof self?self:void 0!==window?window:{});},{}],72:[function(t,e,r){function i(t){if("string"==typeof t&&(t=a.parse(t)),t.protocol||(t.protocol="https:"),"https:"!==t.protocol)throw new Error('Protocol "'+t.protocol+'" not supported. Expected "https:"');return t;}var n=t("http"),a=t("url"),o=e.exports;for(var s in n)n.hasOwnProperty(s)&&(o[s]=n[s]);o.request=function(t,e){return t=i(t),n.request.call(this,t,e);},o.get=function(t,e){return t=i(t),n.get.call(this,t,e);};},{http:156,url:180}],73:[function(t,e,r){r.read=function(t,e,r,i,n){var a,o,s=8*n-i-1,u=(1<>1,l=-7,f=r?n-1:0,c=r?-1:1,d=t[e+f];for(f+=c,a=d&(1<<-l)-1,d>>=-l,l+=s;l>0;a=256*a+t[e+f],f+=c,l-=8);for(o=a&(1<<-l)-1,a>>=-l,l+=i;l>0;o=256*o+t[e+f],f+=c,l-=8);if(0===a)a=1-h;else{if(a===u)return o?NaN:1/0*(d?-1:1);o+=Math.pow(2,i),a-=h;}return(d?-1:1)*o*Math.pow(2,a-i);},r.write=function(t,e,r,i,n,a){var o,s,u,h=8*a-n-1,l=(1<>1,c=23===n?Math.pow(2,-24)-Math.pow(2,-77):0,d=i?0:a-1,p=i?1:-1,m=e<0||0===e&&1/e<0?1:0;for(e=Math.abs(e),isNaN(e)||e===1/0?(s=isNaN(e)?1:0,o=l):(o=Math.floor(Math.log(e)/Math.LN2),e*(u=Math.pow(2,-o))<1&&(o--,u*=2),e+=o+f>=1?c/u:c*Math.pow(2,1-f),e*u>=2&&(o++,u/=2),o+f>=l?(s=0,o=l):o+f>=1?(s=(e*u-1)*Math.pow(2,n),o+=f):(s=e*Math.pow(2,f-1)*Math.pow(2,n),o=0));n>=8;t[r+d]=255&s,d+=p,s/=256,n-=8);for(o=o<0;t[r+d]=255&o,d+=p,o/=256,h-=8);t[r+d-p]|=128*m;};},{}],74:[function(e,r,i){var n,a;n=this,a=function(){return function(t){function e(i){if(r[i])return r[i].exports;var n=r[i]={exports:{},id:i,loaded:!1};return t[i].call(n.exports,n,n.exports,e),n.loaded=!0,n.exports;}var r={};return e.m=t,e.c=r,e.p="",e(0);}([function(t,e,r){"use strict";var i=r(1);e.constants=i;var n=r(3);e.conversion=n;var a=r(12);e.distance=a;var o=r(20);e.palette=o;var s=r(30);e.image=s;var u=r(35);e.quality=u;var h=r(37);e.utils=h;},function(t,e,r){"use strict";var i=r(2);e.bt709=i;},function(t,e){"use strict";var r,i,n;(function(t){t[t.RED=.2126]="RED",t[t.GREEN=.7152]="GREEN",t[t.BLUE=.0722]="BLUE",t[t.WHITE=1]="WHITE";})(r||(r={})),e.Y=r,function(t){t[t.RED=.64]="RED",t[t.GREEN=.3]="GREEN",t[t.BLUE=.15]="BLUE",t[t.WHITE=.3127]="WHITE";}(i||(i={})),e.x=i,function(t){t[t.RED=.33]="RED",t[t.GREEN=.6]="GREEN",t[t.BLUE=.06]="BLUE",t[t.WHITE=.329]="WHITE";}(n||(n={})),e.y=n;},function(t,e,r){"use strict";var i=r(4);e.rgb2xyz=i.rgb2xyz;var n=r(5);e.rgb2hsl=n.rgb2hsl;var a=r(7);e.rgb2lab=a.rgb2lab;var o=r(9);e.lab2xyz=o.lab2xyz;var s=r(10);e.lab2rgb=s.lab2rgb;var u=r(8);e.xyz2lab=u.xyz2lab;var h=r(11);e.xyz2rgb=h.xyz2rgb;},function(t,e){"use strict";function r(t){return t>.04045?Math.pow((t+.055)/1.055,2.4):t/12.92;}function i(t,e,i){return t=r(t/255),e=r(e/255),i=r(i/255),{x:.4124*t+.3576*e+.1805*i,y:.2126*t+.7152*e+.0722*i,z:.0193*t+.1192*e+.9505*i};}e.rgb2xyz=i;},function(t,e,r){"use strict";function i(t,e,r){var i=n.min3(t,e,r),a=n.max3(t,e,r),o=a-i,s=(i+a)/510,u=0;s>0&&s<1&&(u=o/(s<.5?a+i:510-a-i));var h=0;return o>0&&(h=a===t?(e-r)/o:a===e?2+(r-t)/o:4+(t-e)/o,h*=60,h<0&&(h+=360)),{h:h,s:u,l:s};}var n=r(6);e.rgb2hsl=i;},function(t,e){"use strict";function r(t){return t*(Math.PI/180);}function i(t,e,r){var i=t;return ie&&(i=e),i>r&&(i=r),i;}function a(t,e,r){return t>r&&(t=r),t255?t=255:t<0&&(t=0),t;}function s(t){return t>255?t=255:t<0&&(t=0),t;}function u(t,e){var r,i=typeof t[0];if("number"===i||"string"===i){for(var n=Object.create(null),a=0,o=t.length;a.008856?Math.pow(t,1/3):7.787*t+16/116;}function i(t,e,i){if(t=r(t/n),e=r(e/a),i=r(i/o),116*e-16<0)throw new Error("xxx");return{L:Math.max(0,116*e-16),a:500*(t-e),b:200*(e-i)};}var n=.95047,a=1,o=1.08883;e.xyz2lab=i;},function(t,e){"use strict";function r(t){return t>.206893034?Math.pow(t,3):(t-16/116)/7.787;}function i(t,e,i){var s=(t+16)/116,u=e/500+s,h=s-i/200;return{x:n*r(u),y:a*r(s),z:o*r(h)};}var n=.95047,a=1,o=1.08883;e.lab2xyz=i;},function(t,e,r){"use strict";function i(t,e,r){var i=n.lab2xyz(t,e,r);return a.xyz2rgb(i.x,i.y,i.z);}var n=r(9),a=r(11);e.lab2rgb=i;},function(t,e,r){"use strict";function i(t){return t>.0031308?1.055*Math.pow(t,1/2.4)-.055:12.92*t;}function n(t,e,r){var n=i(3.2406*t+-1.5372*e+-.4986*r),o=i(-.9689*t+1.8758*e+.0415*r),s=i(.0557*t+-.204*e+1.057*r);return{r:a.inRange0to255Rounded(255*n),g:a.inRange0to255Rounded(255*o),b:a.inRange0to255Rounded(255*s)};}var a=r(6);e.xyz2rgb=n;},function(t,e,r){"use strict";var i=r(13);e.AbstractDistanceCalculator=i.AbstractDistanceCalculator;var n=r(14);e.CIE94Textiles=n.CIE94Textiles,e.CIE94GraphicArts=n.CIE94GraphicArts;var a=r(15);e.CIEDE2000=a.CIEDE2000;var o=r(16);e.CMETRIC=o.CMETRIC;var s=r(17);e.AbstractEuclidean=s.AbstractEuclidean,e.Euclidean=s.Euclidean,e.EuclideanRgbQuantWOAlpha=s.EuclideanRgbQuantWOAlpha,e.EuclideanRgbQuantWithAlpha=s.EuclideanRgbQuantWithAlpha;var u=r(18);e.AbstractManhattan=u.AbstractManhattan,e.Manhattan=u.Manhattan,e.ManhattanSRGB=u.ManhattanSRGB,e.ManhattanNommyde=u.ManhattanNommyde;var h=r(19);e.PNGQUANT=h.PNGQUANT;},function(t,e){"use strict";var r=function(){function t(){this._setDefaults(),this.setWhitePoint(255,255,255,255);}return t.prototype.setWhitePoint=function(t,e,r,i){this._whitePoint={r:t>0?255/t:0,g:e>0?255/e:0,b:r>0?255/r:0,a:i>0?255/i:0},this._maxDistance=this.calculateRaw(t,e,r,i,0,0,0,0);},t.prototype.calculateNormalized=function(t,e){return this.calculateRaw(t.r,t.g,t.b,t.a,e.r,e.g,e.b,e.a)/this._maxDistance;},t.prototype._setDefaults=function(){},t;}();e.AbstractDistanceCalculator=r;},function(t,e,r){"use strict";var i=this&&this.__extends||function(t,e){function r(){this.constructor=t;}for(var i in e)e.hasOwnProperty(i)&&(t[i]=e[i]);t.prototype=null===e?Object.create(e):(r.prototype=e.prototype,new r());},n=r(13),a=r(7),o=r(6),s=function(t){function e(){t.apply(this,arguments);}return i(e,t),e.prototype.calculateRaw=function(t,e,r,i,n,s,u,h){var l=a.rgb2lab(o.inRange0to255(t*this._whitePoint.r),o.inRange0to255(e*this._whitePoint.g),o.inRange0to255(r*this._whitePoint.b)),f=a.rgb2lab(o.inRange0to255(n*this._whitePoint.r),o.inRange0to255(s*this._whitePoint.g),o.inRange0to255(u*this._whitePoint.b)),c=l.L-f.L,d=l.a-f.a,p=l.b-f.b,m=Math.sqrt(l.a*l.a+l.b*l.b),b=Math.sqrt(f.a*f.a+f.b*f.b),g=m-b,_=d*d+p*p-g*g;_=_<0?0:Math.sqrt(_);var v=(h-i)*this._whitePoint.a*this._kA;return Math.sqrt(Math.pow(c/this._Kl,2)+Math.pow(g/(1+this._K1*m),2)+Math.pow(_/(1+this._K2*m),2)+Math.pow(v,2));},e;}(n.AbstractDistanceCalculator);e.AbstractCIE94=s;var u=function(t){function e(){t.apply(this,arguments);}return i(e,t),e.prototype._setDefaults=function(){this._Kl=2,this._K1=.048,this._K2=.014,this._kA=12.5/255;},e;}(s);e.CIE94Textiles=u;var h=function(t){function e(){t.apply(this,arguments);}return i(e,t),e.prototype._setDefaults=function(){this._Kl=1,this._K1=.045,this._K2=.015,this._kA=25/255;},e;}(s);e.CIE94GraphicArts=h;},function(t,e,r){"use strict";var i=this&&this.__extends||function(t,e){function r(){this.constructor=t;}for(var i in e)e.hasOwnProperty(i)&&(t[i]=e[i]);t.prototype=null===e?Object.create(e):(r.prototype=e.prototype,new r());},n=r(13),a=r(7),o=r(6),s=function(t){function e(){t.apply(this,arguments);}return i(e,t),e.prototype.calculateRaw=function(t,r,i,n,s,u,h,l){var f=a.rgb2lab(o.inRange0to255(t*this._whitePoint.r),o.inRange0to255(r*this._whitePoint.g),o.inRange0to255(i*this._whitePoint.b)),c=a.rgb2lab(o.inRange0to255(s*this._whitePoint.r),o.inRange0to255(u*this._whitePoint.g),o.inRange0to255(h*this._whitePoint.b)),d=(l-n)*this._whitePoint.a*e._kA,p=this.calculateRawInLab(f,c);return Math.sqrt(p+d*d);},e.prototype.calculateRawInLab=function(t,r){var i=t.L,n=t.a,a=t.b,o=r.L,s=r.a,u=r.b,h=Math.sqrt(n*n+a*a),l=Math.sqrt(s*s+u*u),f=Math.pow((h+l)/2,7),c=.5*(1-Math.sqrt(f/(f+e._pow25to7))),d=(1+c)*n,p=(1+c)*s,m=Math.sqrt(d*d+a*a),b=Math.sqrt(p*p+u*u),g=m*b,_=e._calculatehp(a,d),v=e._calculatehp(u,p),y=Math.abs(_-v),w=o-i,E=b-m,x=e._calculate_dHp(g,y,v,_),S=e._calculate_ahp(g,y,_,v),k=e._calculateT(S),M=(m+b)/2,A=Math.pow((i+o)/2-50,2),I=1+.015*A/Math.sqrt(20+A),T=1+.045*M,R=1+.015*k*M,P=e._calculateRT(S,M),C=w/I,O=E/T,L=x/R;return Math.pow(C,2)+Math.pow(O,2)+Math.pow(L,2)+P*O*L;},e._calculatehp=function(t,r){var i=Math.atan2(t,r);return i>=0?i:i+e._deg360InRad;},e._calculateRT=function(t,r){var i=Math.pow(r,7),n=2*Math.sqrt(i/(i+e._pow25to7)),a=e._deg30InRad*Math.exp(-Math.pow((t-e._deg275InRad)/e._deg25InRad,2));return-Math.sin(2*a)*n;},e._calculateT=function(t){return 1-.17*Math.cos(t-e._deg30InRad)+.24*Math.cos(2*t)+.32*Math.cos(3*t+e._deg6InRad)-.2*Math.cos(4*t-e._deg63InRad);},e._calculate_ahp=function(t,r,i,n){var a=i+n;return 0==t?a:r<=e._deg180InRad?a/2:a>8)+4*l*l+((767-u)*f*f>>8),d=(s-i)*this._whitePoint.a;return Math.sqrt(c+d*d);},e;}(n.AbstractDistanceCalculator);e.CMETRIC=a;},function(t,e,r){"use strict";var i=this&&this.__extends||function(t,e){function r(){this.constructor=t;}for(var i in e)e.hasOwnProperty(i)&&(t[i]=e[i]);t.prototype=null===e?Object.create(e):(r.prototype=e.prototype,new r());},n=r(13),a=r(2),o=function(t){function e(){t.apply(this,arguments);}return i(e,t),e.prototype.calculateRaw=function(t,e,r,i,n,a,o,s){var u=n-t,h=a-e,l=o-r,f=s-i;return Math.sqrt(this._kR*u*u+this._kG*h*h+this._kB*l*l+this._kA*f*f);},e;}(n.AbstractDistanceCalculator);e.AbstractEuclidean=o;var s=function(t){function e(){t.apply(this,arguments);}return i(e,t),e.prototype._setDefaults=function(){this._kR=1,this._kG=1,this._kB=1,this._kA=1;},e;}(o);e.Euclidean=s;var u=function(t){function e(){t.apply(this,arguments);}return i(e,t),e.prototype._setDefaults=function(){this._kR=a.Y.RED,this._kG=a.Y.GREEN,this._kB=a.Y.BLUE,this._kA=1;},e;}(o);e.EuclideanRgbQuantWithAlpha=u;var h=function(t){function e(){t.apply(this,arguments);}return i(e,t),e.prototype._setDefaults=function(){this._kR=a.Y.RED,this._kG=a.Y.GREEN,this._kB=a.Y.BLUE,this._kA=0;},e;}(o);e.EuclideanRgbQuantWOAlpha=h;},function(t,e,r){"use strict";var i=this&&this.__extends||function(t,e){function r(){this.constructor=t;}for(var i in e)e.hasOwnProperty(i)&&(t[i]=e[i]);t.prototype=null===e?Object.create(e):(r.prototype=e.prototype,new r());},n=r(13),a=r(2),o=function(t){function e(){t.apply(this,arguments);}return i(e,t),e.prototype.calculateRaw=function(t,e,r,i,n,a,o,s){var u=n-t,h=a-e,l=o-r,f=s-i;return u<0&&(u=0-u),h<0&&(h=0-h),l<0&&(l=0-l),f<0&&(f=0-f),this._kR*u+this._kG*h+this._kB*l+this._kA*f;},e;}(n.AbstractDistanceCalculator);e.AbstractManhattan=o;var s=function(t){function e(){t.apply(this,arguments);}return i(e,t),e.prototype._setDefaults=function(){this._kR=1,this._kG=1,this._kB=1,this._kA=1;},e;}(o);e.Manhattan=s;var u=function(t){function e(){t.apply(this,arguments);}return i(e,t),e.prototype._setDefaults=function(){this._kR=.4984,this._kG=.8625,this._kB=.2979,this._kA=1;},e;}(o);e.ManhattanNommyde=u;var h=function(t){function e(){t.apply(this,arguments);}return i(e,t),e.prototype._setDefaults=function(){this._kR=a.Y.RED,this._kG=a.Y.GREEN,this._kB=a.Y.BLUE,this._kA=1;},e;}(o);e.ManhattanSRGB=h;},function(t,e,r){"use strict";var i=this&&this.__extends||function(t,e){function r(){this.constructor=t;}for(var i in e)e.hasOwnProperty(i)&&(t[i]=e[i]);t.prototype=null===e?Object.create(e):(r.prototype=e.prototype,new r());},n=r(13),a=function(t){function e(){t.apply(this,arguments);}return i(e,t),e.prototype.calculateRaw=function(t,e,r,i,n,a,o,s){var u=(s-i)*this._whitePoint.a;return this._colordifference_ch(t*this._whitePoint.r,n*this._whitePoint.r,u)+this._colordifference_ch(e*this._whitePoint.g,a*this._whitePoint.g,u)+this._colordifference_ch(r*this._whitePoint.b,o*this._whitePoint.b,u);},e.prototype._colordifference_ch=function(t,e,r){var i=t-e,n=i+r;return i*i+n*n;},e;}(n.AbstractDistanceCalculator);e.PNGQUANT=a;},function(t,e,r){"use strict";var i=r(21);e.NeuQuant=i.NeuQuant;var n=r(25);e.NeuQuantFloat=n.NeuQuantFloat;var a=r(26);e.RGBQuant=a.RGBQuant;var o=r(27);e.ColorHistogram=o.ColorHistogram;var s=r(29);e.WuQuant=s.WuQuant,e.WuColorCube=s.WuColorCube;},function(t,e,r){"use strict";var i=r(22),n=r(24),a=3,o=function(){function t(t){this.r=this.g=this.b=this.a=t;}return t.prototype.toPoint=function(){return n.Point.createByRGBA(this.r>>a,this.g>>a,this.b>>a,this.a>>a);},t.prototype.subtract=function(t,e,r,i){this.r-=0|t,this.g-=0|e,this.b-=0|r,this.a-=0|i;},t;}(),s=function(){function t(t,e){void 0===e&&(e=256),this._distance=t,this._pointArray=[],this._sampleFactor=1,this._networkSize=e,this._distance.setWhitePoint(255<>3)*t._radiusBias,l=h>>t._radiusBiasShift;l<=1&&(l=0);for(var f=0;f>>0;i=r=r&&(c-=r),f++,0===s&&(s=1),f%s==0){u-=u/n|0,h-=h/t._radiusDecrease|0,l=h>>t._radiusBiasShift,l<=1&&(l=0);for(var v=0;v>>0;}}},t.prototype._buildPalette=function(){var t=new i.Palette();return this._network.forEach(function(e){t.add(e.toPoint());}),t.sort(),t;},t.prototype._alterNeighbour=function(e,r,i,n,a,o){var s=r-e;s<-1&&(s=-1);var u=r+e;u>this._networkSize&&(u=this._networkSize);for(var h=r+1,l=r-1,f=1;hs;){var c=this._radPower[f++]/t._alphaRadBias;if(hs){d=this._network[l--];d.subtract(c*(d.r-a),c*(d.g-n),c*(d.b-i),c*(d.a-o));}}},t.prototype._alterSingle=function(e,r,i,n,a,o){e/=t._initAlpha;var s=this._network[r];s.subtract(e*(s.r-a),e*(s.g-n),e*(s.b-i),e*(s.a-o));},t.prototype._contest=function(e,r,i,n){for(var o=1020<>t._initialBiasShift-a);p>t._betaShift;this._freq[f]-=m,this._bias[f]+=m<>t._betaShift,t._betaGamma=t._initialBias<=o&&t=0;e--)if(t.uint32===this._pointArray[e].uint32)return!0;return!1;},t.prototype.getNearestColor=function(t,e){return this._pointArray[0|this.getNearestIndex(t,e)];},t.prototype.getPointContainer=function(){return this._pointContainer;},t.prototype._nearestPointFromCache=function(t){return"number"==typeof this._i32idx[t]?this._i32idx[t]:-1;},t.prototype.getNearestIndex=function(t,e){var r=this._nearestPointFromCache(""+e.uint32);if(r>=0)return r;var i=Number.MAX_VALUE;r=0;for(var n=0,a=this._pointArray.length;n>>0,this.r=this.g=this.b=this.a=0,this.rgba=new Array(4),this.rgba[0]=0,this.rgba[1]=0,this.rgba[2]=0,this.rgba[3]=0;}return t.createByQuadruplet=function(e){var r=new t();return r.r=0|e[0],r.g=0|e[1],r.b=0|e[2],r.a=0|e[3],r._loadUINT32(),r._loadQuadruplet(),r;},t.createByRGBA=function(e,r,i,n){var a=new t();return a.r=0|e,a.g=0|r,a.b=0|i,a.a=0|n,a._loadUINT32(),a._loadQuadruplet(),a;},t.createByUint32=function(e){var r=new t();return r.uint32=e>>>0,r._loadRGBA(),r._loadQuadruplet(),r;},t.prototype.from=function(t){this.r=t.r,this.g=t.g,this.b=t.b,this.a=t.a,this.uint32=t.uint32,this.rgba[0]=t.r,this.rgba[1]=t.g,this.rgba[2]=t.b,this.rgba[3]=t.a;},t.prototype.getLuminosity=function(t){var e=this.r,r=this.g,n=this.b;return t&&(e=Math.min(255,255-this.a+this.a*e/255),r=Math.min(255,255-this.a+this.a*r/255),n=Math.min(255,255-this.a+this.a*n/255)),e*i.Y.RED+r*i.Y.GREEN+n*i.Y.BLUE;},t.prototype._loadUINT32=function(){this.uint32=(this.a<<24|this.b<<16|this.g<<8|this.r)>>>0;},t.prototype._loadRGBA=function(){this.r=255&this.uint32,this.g=this.uint32>>>8&255,this.b=this.uint32>>>16&255,this.a=this.uint32>>>24&255;},t.prototype._loadQuadruplet=function(){this.rgba[0]=this.r,this.rgba[1]=this.g,this.rgba[2]=this.b,this.rgba[3]=this.a;},t;}();e.Point=n;},function(t,e,r){"use strict";var i=r(22),n=r(24),a=3,o=function(){function t(t){this.r=this.g=this.b=this.a=t;}return t.prototype.toPoint=function(){return n.Point.createByRGBA(this.r>>a,this.g>>a,this.b>>a,this.a>>a);},t.prototype.subtract=function(t,e,r,i){this.r-=t,this.g-=e,this.b-=r,this.a-=i;},t;}(),s=function(){function t(t,e){void 0===e&&(e=256),this._distance=t,this._pointArray=[],this._sampleFactor=1,this._networkSize=e,this._distance.setWhitePoint(255<>3)*t._radiusBias,l=h>>t._radiusBiasShift;l<=1&&(l=0);for(var f=0;f=r&&(c-=r),f++,0==s&&(s=1),f%s==0){u-=u/n,h-=h/t._radiusDecrease,l=h>>t._radiusBiasShift,l<=1&&(l=0);for(var v=0;vthis._networkSize&&(u=this._networkSize);for(var h=r+1,l=r-1,f=1;hs;){var c=this._radPower[f++]/t._alphaRadBias;if(hs){d=this._network[l--];d.subtract(c*(d.r-a),c*(d.g-n),c*(d.b-i),c*(d.a-o));}}},t.prototype._alterSingle=function(e,r,i,n,a,o){e/=t._initAlpha;var s=this._network[r];s.subtract(e*(s.r-a),e*(s.g-n),e*(s.b-i),e*(s.a-o));},t.prototype._contest=function(e,r,i,n){for(var o=1020<>t._initialBiasShift-a);p>t._betaShift;this._freq[f]-=m,this._bias[f]+=m<>t._betaShift,t._betaGamma=t._initialBias<this._colors;){l.length=0;for(u=0;u3*this._colors?this._initialDistance:this._distanceIncrement;}if(f=0;y--)0===a[y]&&(y!==v-1&&(r[y]=r[v-1]),--v);return r.length=v,e;},t;}();e.RGBQuant=u;},function(t,e,r){"use strict";var i=r(28),n=r(6),a=function(){function t(e,r){this._method=e,this._minHueCols=r<<2,this._initColors=r<<2,this._hueStats=new i.HueStatistics(t._hueGroups,this._minHueCols),this._histogram=Object.create(null);}return t.prototype.sample=function(t){switch(this._method){case 1:this._colorStats1D(t);break;case 2:this._colorStats2D(t);}},t.prototype.getImportanceSortedColorsIDXI32=function(){var t,e=this,r=n.stableSort(Object.keys(this._histogram),function(t,r){return e._histogram[r]-e._histogram[t];});if(0===r.length)return[];switch(this._method){case 1:var i=Math.min(r.length,this._initColors),a=r[i-1],o=this._histogram[a];t=r.slice(0,i);for(var s=i,u=r.length;s=n&&(l[e]=o[e]):o[e]=1;});}),this._hueStats.injectIntoDictionary(l);},t.prototype._iterateBox=function(t,e,r){var i=t,n=i.y*e+i.x,a=(i.y+i.h-1)*e+(i.x+i.w-1),o=e-i.w+1,s=0,u=n;do{r.call(this,u),u+=++s%i.w==0?o:1;}while(u<=a);},t.prototype._makeBoxes=function(t,e,r,i){for(var n=t%r,a=e%i,o=t-n,s=e-a,u=[],h=0;h>>8&255,a=t>>>16&255,o=e==r&&r==a?0:1+n.hueGroup(i.rgb2hsl(e,r,a).h,this._numGroups),s=this._stats[o],u=this._minCols;s.num++,s.num>u||(s.num==u&&this._groupsFull++,s.num<=u&&this._stats[o].cols.push(t));},t.prototype.injectIntoDictionary=function(t){for(var e=0;e<=this._numGroups;e++)this._stats[e].num<=this._minCols&&this._stats[e].cols.forEach(function(e){t[e]?t[e]++:t[e]=1;});},t.prototype.injectIntoArray=function(t){for(var e=0;e<=this._numGroups;e++)this._stats[e].num<=this._minCols&&this._stats[e].cols.forEach(function(e){-1==t.indexOf(e)&&t.push(e);});},t;}();e.HueStatistics=o;},function(t,e,r){"use strict";function i(t){for(var e=[],r=0;r0){var r=this._sums[e],i=this._reds[e]/r,n=this._greens[e]/r,a=this._blues[e]/r,o=this._alphas[e]/r,s=h.Point.createByRGBA(0|i,0|n,0|a,0|o);t.add(s);}return t.sort(),t;},t.prototype._preparePalette=function(){this._calculateMoments();for(var e=0,r=i(this._colors),n=1;n1?this._calculateVariance(this._cubes[e]):0,r[n]=this._cubes[n].volume>1?this._calculateVariance(this._cubes[n]):0):(r[e]=0,n--),e=0;for(var a=r[0],o=1;o<=n;++o)r[o]>a&&(a=r[o],e=o);if(a<=0){this._colors=n+1;break;}}for(var s=[],u=[],h=[],l=[],f=0;f0?(s[f]=t._volume(this._cubes[f],this._momentsRed)/c|0,u[f]=t._volume(this._cubes[f],this._momentsGreen)/c|0,h[f]=t._volume(this._cubes[f],this._momentsBlue)/c|0,l[f]=t._volume(this._cubes[f],this._momentsAlpha)/c|0):(s[f]=0,u[f]=0,h[f]=0,l[f]=0);}this._reds=i(this._colors+1),this._greens=i(this._colors+1),this._blues=i(this._colors+1),this._alphas=i(this._colors+1),this._sums=i(this._colors+1);o=0;for(var d=this._pixels.length;o>e),i=1+(t.g>>e),n=1+(t.b>>e),a=1+(t.a>>e);this._weights[a][r][i][n]++,this._momentsRed[a][r][i][n]+=t.r,this._momentsGreen[a][r][i][n]+=t.g,this._momentsBlue[a][r][i][n]+=t.b,this._momentsAlpha[a][r][i][n]+=t.a,this._moments[a][r][i][n]+=this._table[t.r]+this._table[t.g]+this._table[t.b]+this._table[t.a];},t.prototype._calculateMoments=function(){for(var t=[],e=[],r=[],i=[],n=[],u=[],h=a(this._sideSize,this._sideSize,this._sideSize),l=a(this._sideSize,this._sideSize,this._sideSize),f=a(this._sideSize,this._sideSize,this._sideSize),c=a(this._sideSize,this._sideSize,this._sideSize),d=a(this._sideSize,this._sideSize,this._sideSize),p=a(this._sideSize,this._sideSize,this._sideSize),m=1;m<=this._alphaMaxSideIndex;++m){o(h,this._sideSize,this._sideSize,this._sideSize,0),o(l,this._sideSize,this._sideSize,this._sideSize,0),o(f,this._sideSize,this._sideSize,this._sideSize,0),o(c,this._sideSize,this._sideSize,this._sideSize,0),o(d,this._sideSize,this._sideSize,this._sideSize,0),o(p,this._sideSize,this._sideSize,this._sideSize,0);for(var b=1;b<=this._maxSideIndex;++b){s(t,this._sideSize,0),s(e,this._sideSize,0),s(r,this._sideSize,0),s(i,this._sideSize,0),s(n,this._sideSize,0),s(u,this._sideSize,0);for(var g=1;g<=this._maxSideIndex;++g)for(var _=0,v=0,y=0,w=0,E=0,x=0,S=1;S<=this._maxSideIndex;++S)_+=this._weights[m][b][g][S],v+=this._momentsRed[m][b][g][S],y+=this._momentsGreen[m][b][g][S],w+=this._momentsBlue[m][b][g][S],E+=this._momentsAlpha[m][b][g][S],x+=this._moments[m][b][g][S],t[S]+=_,e[S]+=v,r[S]+=y,i[S]+=w,n[S]+=E,u[S]+=x,h[b][g][S]=h[b-1][g][S]+t[S],l[b][g][S]=l[b-1][g][S]+e[S],f[b][g][S]=f[b-1][g][S]+r[S],c[b][g][S]=c[b-1][g][S]+i[S],d[b][g][S]=d[b-1][g][S]+n[S],p[b][g][S]=p[b-1][g][S]+u[S],this._weights[m][b][g][S]=this._weights[m-1][b][g][S]+h[b][g][S],this._momentsRed[m][b][g][S]=this._momentsRed[m-1][b][g][S]+l[b][g][S],this._momentsGreen[m][b][g][S]=this._momentsGreen[m-1][b][g][S]+f[b][g][S],this._momentsBlue[m][b][g][S]=this._momentsBlue[m-1][b][g][S]+c[b][g][S],this._momentsAlpha[m][b][g][S]=this._momentsAlpha[m-1][b][g][S]+d[b][g][S],this._moments[m][b][g][S]=this._moments[m-1][b][g][S]+p[b][g][S];}}},t._volumeFloat=function(t,e){return e[t.alphaMaximum][t.redMaximum][t.greenMaximum][t.blueMaximum]-e[t.alphaMaximum][t.redMaximum][t.greenMinimum][t.blueMaximum]-e[t.alphaMaximum][t.redMinimum][t.greenMaximum][t.blueMaximum]+e[t.alphaMaximum][t.redMinimum][t.greenMinimum][t.blueMaximum]-e[t.alphaMinimum][t.redMaximum][t.greenMaximum][t.blueMaximum]+e[t.alphaMinimum][t.redMaximum][t.greenMinimum][t.blueMaximum]+e[t.alphaMinimum][t.redMinimum][t.greenMaximum][t.blueMaximum]-e[t.alphaMinimum][t.redMinimum][t.greenMinimum][t.blueMaximum]-(e[t.alphaMaximum][t.redMaximum][t.greenMaximum][t.blueMinimum]-e[t.alphaMinimum][t.redMaximum][t.greenMaximum][t.blueMinimum]-e[t.alphaMaximum][t.redMaximum][t.greenMinimum][t.blueMinimum]+e[t.alphaMinimum][t.redMaximum][t.greenMinimum][t.blueMinimum]-e[t.alphaMaximum][t.redMinimum][t.greenMaximum][t.blueMinimum]+e[t.alphaMinimum][t.redMinimum][t.greenMaximum][t.blueMinimum]+e[t.alphaMaximum][t.redMinimum][t.greenMinimum][t.blueMinimum]-e[t.alphaMinimum][t.redMinimum][t.greenMinimum][t.blueMinimum]);},t._volume=function(e,r){return 0|t._volumeFloat(e,r);},t._top=function(e,r,i,n){var a;switch(r){case t.alpha:a=n[i][e.redMaximum][e.greenMaximum][e.blueMaximum]-n[i][e.redMaximum][e.greenMinimum][e.blueMaximum]-n[i][e.redMinimum][e.greenMaximum][e.blueMaximum]+n[i][e.redMinimum][e.greenMinimum][e.blueMaximum]-(n[i][e.redMaximum][e.greenMaximum][e.blueMinimum]-n[i][e.redMaximum][e.greenMinimum][e.blueMinimum]-n[i][e.redMinimum][e.greenMaximum][e.blueMinimum]+n[i][e.redMinimum][e.greenMinimum][e.blueMinimum]);break;case t.red:a=n[e.alphaMaximum][i][e.greenMaximum][e.blueMaximum]-n[e.alphaMaximum][i][e.greenMinimum][e.blueMaximum]-n[e.alphaMinimum][i][e.greenMaximum][e.blueMaximum]+n[e.alphaMinimum][i][e.greenMinimum][e.blueMaximum]-(n[e.alphaMaximum][i][e.greenMaximum][e.blueMinimum]-n[e.alphaMaximum][i][e.greenMinimum][e.blueMinimum]-n[e.alphaMinimum][i][e.greenMaximum][e.blueMinimum]+n[e.alphaMinimum][i][e.greenMinimum][e.blueMinimum]);break;case t.green:a=n[e.alphaMaximum][e.redMaximum][i][e.blueMaximum]-n[e.alphaMaximum][e.redMinimum][i][e.blueMaximum]-n[e.alphaMinimum][e.redMaximum][i][e.blueMaximum]+n[e.alphaMinimum][e.redMinimum][i][e.blueMaximum]-(n[e.alphaMaximum][e.redMaximum][i][e.blueMinimum]-n[e.alphaMaximum][e.redMinimum][i][e.blueMinimum]-n[e.alphaMinimum][e.redMaximum][i][e.blueMinimum]+n[e.alphaMinimum][e.redMinimum][i][e.blueMinimum]);break;case t.blue:a=n[e.alphaMaximum][e.redMaximum][e.greenMaximum][i]-n[e.alphaMaximum][e.redMaximum][e.greenMinimum][i]-n[e.alphaMaximum][e.redMinimum][e.greenMaximum][i]+n[e.alphaMaximum][e.redMinimum][e.greenMinimum][i]-(n[e.alphaMinimum][e.redMaximum][e.greenMaximum][i]-n[e.alphaMinimum][e.redMaximum][e.greenMinimum][i]-n[e.alphaMinimum][e.redMinimum][e.greenMaximum][i]+n[e.alphaMinimum][e.redMinimum][e.greenMinimum][i]);break;default:throw new Error("impossible");}return 0|a;},t._bottom=function(e,r,i){switch(r){case t.alpha:return-i[e.alphaMinimum][e.redMaximum][e.greenMaximum][e.blueMaximum]+i[e.alphaMinimum][e.redMaximum][e.greenMinimum][e.blueMaximum]+i[e.alphaMinimum][e.redMinimum][e.greenMaximum][e.blueMaximum]-i[e.alphaMinimum][e.redMinimum][e.greenMinimum][e.blueMaximum]-(-i[e.alphaMinimum][e.redMaximum][e.greenMaximum][e.blueMinimum]+i[e.alphaMinimum][e.redMaximum][e.greenMinimum][e.blueMinimum]+i[e.alphaMinimum][e.redMinimum][e.greenMaximum][e.blueMinimum]-i[e.alphaMinimum][e.redMinimum][e.greenMinimum][e.blueMinimum]);case t.red:return-i[e.alphaMaximum][e.redMinimum][e.greenMaximum][e.blueMaximum]+i[e.alphaMaximum][e.redMinimum][e.greenMinimum][e.blueMaximum]+i[e.alphaMinimum][e.redMinimum][e.greenMaximum][e.blueMaximum]-i[e.alphaMinimum][e.redMinimum][e.greenMinimum][e.blueMaximum]-(-i[e.alphaMaximum][e.redMinimum][e.greenMaximum][e.blueMinimum]+i[e.alphaMaximum][e.redMinimum][e.greenMinimum][e.blueMinimum]+i[e.alphaMinimum][e.redMinimum][e.greenMaximum][e.blueMinimum]-i[e.alphaMinimum][e.redMinimum][e.greenMinimum][e.blueMinimum]);case t.green:return-i[e.alphaMaximum][e.redMaximum][e.greenMinimum][e.blueMaximum]+i[e.alphaMaximum][e.redMinimum][e.greenMinimum][e.blueMaximum]+i[e.alphaMinimum][e.redMaximum][e.greenMinimum][e.blueMaximum]-i[e.alphaMinimum][e.redMinimum][e.greenMinimum][e.blueMaximum]-(-i[e.alphaMaximum][e.redMaximum][e.greenMinimum][e.blueMinimum]+i[e.alphaMaximum][e.redMinimum][e.greenMinimum][e.blueMinimum]+i[e.alphaMinimum][e.redMaximum][e.greenMinimum][e.blueMinimum]-i[e.alphaMinimum][e.redMinimum][e.greenMinimum][e.blueMinimum]);case t.blue:return-i[e.alphaMaximum][e.redMaximum][e.greenMaximum][e.blueMinimum]+i[e.alphaMaximum][e.redMaximum][e.greenMinimum][e.blueMinimum]+i[e.alphaMaximum][e.redMinimum][e.greenMaximum][e.blueMinimum]-i[e.alphaMaximum][e.redMinimum][e.greenMinimum][e.blueMinimum]-(-i[e.alphaMinimum][e.redMaximum][e.greenMaximum][e.blueMinimum]+i[e.alphaMinimum][e.redMaximum][e.greenMinimum][e.blueMinimum]+i[e.alphaMinimum][e.redMinimum][e.greenMaximum][e.blueMinimum]-i[e.alphaMinimum][e.redMinimum][e.greenMinimum][e.blueMinimum]);default:return 0;}},t.prototype._calculateVariance=function(e){var r=t._volume(e,this._momentsRed),i=t._volume(e,this._momentsGreen),n=t._volume(e,this._momentsBlue),a=t._volume(e,this._momentsAlpha),o=t._volumeFloat(e,this._moments),s=t._volume(e,this._weights),u=r*r+i*i+n*n+a*a;return o-u/s;},t.prototype._maximize=function(e,r,i,n,a,o,s,u,h){for(var l=0|t._bottom(e,r,this._momentsRed),f=0|t._bottom(e,r,this._momentsGreen),c=0|t._bottom(e,r,this._momentsBlue),d=0|t._bottom(e,r,this._momentsAlpha),p=0|t._bottom(e,r,this._weights),m=0,b=-1,g=i;gm&&(m=S,b=g));}}return{max:m,position:b};},t.prototype._cut=function(e,r){var i,n=t._volume(e,this._momentsRed),a=t._volume(e,this._momentsGreen),o=t._volume(e,this._momentsBlue),s=t._volume(e,this._momentsAlpha),u=t._volume(e,this._weights),h=this._maximize(e,t.red,e.redMinimum+1,e.redMaximum,n,a,o,s,u),l=this._maximize(e,t.green,e.greenMinimum+1,e.greenMaximum,n,a,o,s,u),f=this._maximize(e,t.blue,e.blueMinimum+1,e.blueMaximum,n,a,o,s,u),c=this._maximize(e,t.alpha,e.alphaMinimum+1,e.alphaMaximum,n,a,o,s,u);if(c.max>=h.max&&c.max>=l.max&&c.max>=f.max){if(i=t.alpha,c.position<0)return!1;}else i=h.max>=c.max&&h.max>=l.max&&h.max>=f.max?t.red:l.max>=c.max&&l.max>=h.max&&l.max>=f.max?t.green:t.blue;switch(r.redMaximum=e.redMaximum,r.greenMaximum=e.greenMaximum,r.blueMaximum=e.blueMaximum,r.alphaMaximum=e.alphaMaximum,i){case t.red:r.redMinimum=e.redMaximum=h.position,r.greenMinimum=e.greenMinimum,r.blueMinimum=e.blueMinimum,r.alphaMinimum=e.alphaMinimum;break;case t.green:r.greenMinimum=e.greenMaximum=l.position,r.redMinimum=e.redMinimum,r.blueMinimum=e.blueMinimum,r.alphaMinimum=e.alphaMinimum;break;case t.blue:r.blueMinimum=e.blueMaximum=f.position,r.redMinimum=e.redMinimum,r.greenMinimum=e.greenMinimum,r.alphaMinimum=e.alphaMinimum;break;case t.alpha:r.alphaMinimum=e.alphaMaximum=c.position,r.blueMinimum=e.blueMinimum,r.redMinimum=e.redMinimum,r.greenMinimum=e.greenMinimum;}return e.volume=(e.redMaximum-e.redMinimum)*(e.greenMaximum-e.greenMinimum)*(e.blueMaximum-e.blueMinimum)*(e.alphaMaximum-e.alphaMinimum),r.volume=(r.redMaximum-r.redMinimum)*(r.greenMaximum-r.greenMinimum)*(r.blueMaximum-r.blueMinimum)*(r.alphaMaximum-r.alphaMinimum),!0;},t.prototype._initialize=function(t){this._colors=t,this._cubes=[];for(var e=0;e=0&&P+_=0&&C+de&&(t.length=e);for(var r=t.length,i=0;i=0&&this._x=0&&this._y0&&(l.comments=s.comments);}catch(t){if(t instanceof RangeError)throw new Error("Could not allocate enough memory for the image. Required: "+h);if(t instanceof ReferenceError&&"Buffer is not defined"===t.message)throw new Error("Buffer is not globally defined in this environment. Consider setting useTArray to true");throw t;}return s.copyToImageData(l,a.formatAsRGBA),l;}var i=function(){"use strict";function t(){}function e(t,e){for(var r,i,n=0,a=[],o=16;o>0&&!t[o-1];)o--;a.push({children:[],index:0});var s,u=a[0];for(r=0;r0;){if(0===a.length)throw new Error("Could not recreate Huffman Table");u=a.pop();}for(u.index++,a.push(u);a.length<=r;)a.push(s={children:[],index:0}),u.children[u.index]=s.children,u=s;n++;}r+10)return O--,C>>O&1;if(C=t[e++],255==C){var r=t[e++];if(r)throw new Error("unexpected marker: "+(C<<8|r).toString(16));}return O=7,C>>>7;}function c(t){for(var e,r=t;null!==(e=f());){if(r=r[e],"number"==typeof r)return r;if("object"!=typeof r)throw new Error("invalid huffman sequence");}return null;}function d(t){for(var e=0;t>0;){var r=f();if(null===r)return;e=e<<1|r,t--;}return e;}function p(t){var e=d(t);return e>=1<>4;if(0!==s){n+=u;var h=o[n];e[h]=p(s),n++;}else{if(u<15)break;n+=16;}}}function b(t,e){var r=c(t.huffmanTableDC),i=0===r?0:p(r)<0)L--;else for(var r=a,i=s;r<=i;){var n=c(t.huffmanTableAC),u=15&n,l=n>>4;if(0!==u){r+=l;var f=o[r];e[f]=p(u)*(1<>4;if(0===b)n<15?(L=d(n)+(1<=65488&&N<=65495))break;e+=2;}return e-P;}function i(t,e){function r(t,r,i){var n,a,o,m,b,g,_,v,y,w,E=e.quantizationTable,x=i;for(w=0;w<64;w++)x[w]=t[w]*E[w];for(w=0;w<8;++w){var S=8*w;0!=x[1+S]||0!=x[2+S]||0!=x[3+S]||0!=x[4+S]||0!=x[5+S]||0!=x[6+S]||0!=x[7+S]?(n=d*x[0+S]+128>>8,a=d*x[4+S]+128>>8,o=x[2+S],m=x[6+S],b=p*(x[1+S]-x[7+S])+128>>8,v=p*(x[1+S]+x[7+S])+128>>8,g=x[3+S]<<4,_=x[5+S]<<4,y=n-a+1>>1,n=n+a+1>>1,a=y,y=o*c+m*f+128>>8,o=o*f-m*c+128>>8,m=y,y=b-_+1>>1,b=b+_+1>>1,_=y,y=v+g+1>>1,g=v-g+1>>1,v=y,y=n-m+1>>1,n=n+m+1>>1,m=y,y=a-o+1>>1,a=a+o+1>>1,o=y,y=b*l+v*h+2048>>12,b=b*h-v*l+2048>>12,v=y,y=g*u+_*s+2048>>12,g=g*s-_*u+2048>>12,_=y,x[0+S]=n+v,x[7+S]=n-v,x[1+S]=a+_,x[6+S]=a-_,x[2+S]=o+g,x[5+S]=o-g,x[3+S]=m+b,x[4+S]=m-b):(y=d*x[0+S]+512>>10,x[0+S]=y,x[1+S]=y,x[2+S]=y,x[3+S]=y,x[4+S]=y,x[5+S]=y,x[6+S]=y,x[7+S]=y);}for(w=0;w<8;++w){var k=w;0!=x[8+k]||0!=x[16+k]||0!=x[24+k]||0!=x[32+k]||0!=x[40+k]||0!=x[48+k]||0!=x[56+k]?(n=d*x[0+k]+2048>>12,a=d*x[32+k]+2048>>12,o=x[16+k],m=x[48+k],b=p*(x[8+k]-x[56+k])+2048>>12,v=p*(x[8+k]+x[56+k])+2048>>12,g=x[24+k],_=x[40+k],y=n-a+1>>1,n=n+a+1>>1,a=y,y=o*c+m*f+2048>>12,o=o*f-m*c+2048>>12,m=y,y=b-_+1>>1,b=b+_+1>>1,_=y,y=v+g+1>>1,g=v-g+1>>1,v=y,y=n-m+1>>1,n=n+m+1>>1,m=y,y=a-o+1>>1,a=a+o+1>>1,o=y,y=b*l+v*h+2048>>12,b=b*h-v*l+2048>>12,v=y,y=g*u+_*s+2048>>12,g=g*s-_*u+2048>>12,_=y,x[0+k]=n+v,x[56+k]=n-v,x[8+k]=a+_,x[48+k]=a-_,x[16+k]=o+g,x[40+k]=o-g,x[24+k]=m+b,x[32+k]=m-b):(y=d*i[w+0]+8192>>14,x[0+k]=y,x[8+k]=y,x[16+k]=y,x[24+k]=y,x[32+k]=y,x[40+k]=y,x[48+k]=y,x[56+k]=y);}for(w=0;w<64;++w){var M=128+(x[w]+8>>4);r[w]=M<0?0:M>255?255:M;}}var i,n,o=[],m=e.blocksPerLine,b=e.blocksPerColumn,g=m<<3,_=new Int32Array(64),v=new Uint8Array(64);a(g*b*8);for(var y=0;y255?255:t;}function a(t=0){var e=m+t;if(e>b){var r=Math.ceil((e-b)/1024/1024);throw new Error(`maxMemoryUsageInMB limit exceeded by at least ${r}MB`);}m=e;}var o=new Int32Array([0,1,8,16,9,2,3,10,17,24,32,25,18,11,4,5,12,19,26,33,40,48,41,34,27,20,13,6,7,14,21,28,35,42,49,56,57,50,43,36,29,22,15,23,30,37,44,51,58,59,52,45,38,31,39,46,53,60,61,54,47,55,62,63]),s=4017,u=799,h=3406,l=2276,f=1567,c=3784,d=5793,p=2896;t.prototype={load:function(t){var e=new XMLHttpRequest();e.open("GET",t,!0),e.responseType="arraybuffer",e.onload=function(){var t=new Uint8Array(e.response||e.mozResponseArrayBuffer);this.parse(t),this.onload&&this.onload();}.bind(this),e.send(null);},parse:function(t){function n(){var e=t[c]<<8|t[c+1];return c+=2,e;}function s(){var e=n(),r=t.subarray(c,c+e-2);return c+=r.length,r;}function u(t){var e,r,i=1,n=1;for(r in t.components)t.components.hasOwnProperty(r)&&(e=t.components[r],i>4==0)for(X=0;X<64;X++){var A=o[X];M[A]=t[c++];}else{if(k>>4!=1)throw new Error("DQT: invalid table spec");for(X=0;X<64;X++){A=o[X];M[A]=n();}}m[15&k]=M;}break;case 65472:case 65473:case 65474:n(),h={},h.extended=65473===v,h.progressive=65474===v,h.precision=t[c++],h.scanLines=n(),h.samplesPerLine=n(),h.components={},h.componentsOrder=[];var I=h.scanLines*h.samplesPerLine;if(I>f){var T=Math.ceil((I-f)/1e6);throw new Error(`maxResolutionInMP limit exceeded by ${T}MP`);}var R,P=t[c++];for(Y=0;Y>4,O=15&t[c+1],L=t[c+2];if(C<=0||O<=0)throw new Error("Invalid sampling factor, expected values above 0");h.componentsOrder.push(R),h.components[R]={h:C,v:O,quantizationIdx:L},c+=3;}u(h),b.push(h);break;case 65476:var B=n();for(Y=2;Y>4==0?_:g)[15&D]=e(N,j);}break;case 65501:n(),l=n();break;case 65500:n(),n();break;case 65498:n();var U=t[c++],F=[];for(Y=0;Y>4],Q.huffmanTableAC=g[15&G],F.push(Q);}var H=t[c++],q=t[c++],W=t[c++],Z=r(t,c,h,F,l,H,q,W>>4,15&W,this.opts);c+=Z;break;case 65535:255!==t[c]&&c--;break;default:if(255==t[c-3]&&t[c-2]>=192&&t[c-2]<=254){c-=3;break;}if(224===v||225==v){if(-1!==y)throw new Error(`first unknown JPEG marker at offset ${y.toString(16)}, second unknown JPEG marker ${v.toString(16)} at offset ${(c-1).toString(16)}`);y=c-1;const e=n();if(255===t[c+e-2]){c+=e-2;break;}}throw new Error("unknown JPEG marker "+v.toString(16));}v=n();}if(1!=b.length)throw new Error("only single frame JPEGs supported");for(var Y=0;Y255&&(i=255),T[W[r]]=i;}for(var n=[17,18,24,47,99,99,99,99,18,21,26,66,99,99,99,99,24,26,56,99,99,99,99,99,47,66,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99],a=0;a<64;a++){var o=I((n[a]*t+50)/100);o<1?o=1:o>255&&(o=255),R[W[a]]=o;}for(var s=[1,1.387039845,1.306562965,1.175875602,1,.785694958,.5411961,.275899379],u=0,h=0;h<8;h++)for(var l=0;l<8;l++)P[u]=1/(T[W[u]]*s[h]*s[l]*8),C[u]=1/(R[W[u]]*s[h]*s[l]*8),u++;}function n(t,e){for(var r=0,i=0,n=new Array(),a=1;a<=16;a++){for(var o=1;o<=t[a];o++)n[e[i]]=[],n[e[i]][0]=r,n[e[i]][1]=a,i++,r++;r*=2;}return n;}function a(){x=n(Z,Y),S=n(Q,J),k=n(V,X),M=n(K,$);}function o(){for(var t=1,e=2,r=1;r<=15;r++){for(var i=t;i>0]=38470*t,q[t+512>>0]=7471*t+32768,q[t+768>>0]=-11059*t,q[t+1024>>0]=-21709*t,q[t+1280>>0]=32768*t+8421375,q[t+1536>>0]=-27439*t,q[t+1792>>0]=-5329*t;}function u(t){for(var e=t[0],r=t[1]-1;r>=0;)e&1<>8&255),h(255&t);}function f(t,e){var r,i,n,a,o,s,u,h,l,f,c=0,d=8,p=64;for(l=0;l0?f+.5|0:f-.5|0;return B;}function c(){l(65504),l(16),h(74),h(70),h(73),h(70),h(0),h(1),h(1),h(0),l(1),l(1),h(0),h(0);}function d(t){if(t){l(65505),69===t[0]&&120===t[1]&&105===t[2]&&102===t[3]?l(t.length+2):(l(t.length+5+2),h(69),h(120),h(105),h(102),h(0));for(var e=0;e{if("string"==typeof t){l(65534);var e,r=t.length;for(l(r+2),e=0;e0&&0==D[b];b--);if(0==b)return u(o),r;for(var g,_=1;_<=b;){for(var v=_;0==D[_]&&_<=b;++_);var y=_-v;if(y>=h){g=y>>4;for(var w=1;w<=g;++w)u(s);y&=15;}a=32767+D[_],u(n[(y<<4)+L[a]]),u(O[a]),_++;}return b!=l&&u(o),r;}function y(){for(var t=String.fromCharCode,e=0;e<256;e++)H[e]=t(e);}function w(t){if(t<=0&&(t=1),t>100&&(t=100),A!=t){var e=0;e=t<50?Math.floor(5e3/t):Math.floor(200-2*t),i(e),A=t;}}function E(){var t=new Date().getTime();r||(r=50),y(),a(),o(),s(),w(r);new Date().getTime();}Math.round;var x,S,k,M,A,I=Math.floor,T=new Array(64),R=new Array(64),P=new Array(64),C=new Array(64),O=new Array(65535),L=new Array(65535),B=new Array(64),D=new Array(64),N=[],z=0,j=7,U=new Array(64),F=new Array(64),G=new Array(64),H=new Array(256),q=new Array(2048),W=[0,1,5,6,14,15,27,28,2,4,7,13,16,26,29,42,3,8,12,17,25,30,41,43,9,11,18,24,31,40,44,53,10,19,23,32,39,45,52,54,20,22,33,38,46,51,55,60,21,34,37,47,50,56,59,61,35,36,48,49,57,58,62,63],Z=[0,0,1,5,1,1,1,1,1,1,0,0,0,0,0,0,0],Y=[0,1,2,3,4,5,6,7,8,9,10,11],V=[0,0,2,1,3,3,2,4,3,5,5,4,4,0,0,1,125],X=[1,2,3,0,4,17,5,18,33,49,65,6,19,81,97,7,34,113,20,50,129,145,161,8,35,66,177,193,21,82,209,240,36,51,98,114,130,9,10,22,23,24,25,26,37,38,39,40,41,42,52,53,54,55,56,57,58,67,68,69,70,71,72,73,74,83,84,85,86,87,88,89,90,99,100,101,102,103,104,105,106,115,116,117,118,119,120,121,122,131,132,133,134,135,136,137,138,146,147,148,149,150,151,152,153,154,162,163,164,165,166,167,168,169,170,178,179,180,181,182,183,184,185,186,194,195,196,197,198,199,200,201,202,210,211,212,213,214,215,216,217,218,225,226,227,228,229,230,231,232,233,234,241,242,243,244,245,246,247,248,249,250],Q=[0,0,3,1,1,1,1,1,1,1,1,1,0,0,0,0,0],J=[0,1,2,3,4,5,6,7,8,9,10,11],K=[0,0,2,1,2,4,4,3,4,7,5,4,4,0,1,2,119],$=[0,1,2,3,17,4,5,33,49,6,18,65,81,7,97,113,19,34,50,129,8,20,66,145,161,177,193,9,35,51,82,240,21,98,114,209,10,22,36,52,225,37,241,23,24,25,26,38,39,40,41,42,53,54,55,56,57,58,67,68,69,70,71,72,73,74,83,84,85,86,87,88,89,90,99,100,101,102,103,104,105,106,115,116,117,118,119,120,121,122,130,131,132,133,134,135,136,137,138,146,147,148,149,150,151,152,153,154,162,163,164,165,166,167,168,169,170,178,179,180,181,182,183,184,185,186,194,195,196,197,198,199,200,201,202,210,211,212,213,214,215,216,217,218,226,227,228,229,230,231,232,233,234,242,243,244,245,246,247,248,249,250];this.encode=function(r,i){new Date().getTime();i&&w(i),N=new Array(),z=0,j=7,l(65496),c(),g(r.comments),d(r.exifBuffer),m(),p(r.width,r.height),b(),_();var n=0,a=0,o=0;z=0,j=7,this.encode.displayName="_encode_";for(var s,h,f,y,E,A,I,T,R,O=r.data,L=r.width,B=r.height,D=4*L,H=0;H>3,I=4*(7&R),A=E+T*D+I,H+T>=B&&(A-=D*(H+1+T-B)),s+I>=D&&(A-=s+I-D+4),h=O[A++],f=O[A++],y=O[A++],U[R]=(q[h]+q[f+256>>0]+q[y+512>>0]>>16)-128,F[R]=(q[h+768>>0]+q[f+1024>>0]+q[y+1280>>0]>>16)-128,G[R]=(q[h+1280>>0]+q[f+1536>>0]+q[y+1792>>0]>>16)-128;n=v(U,P,n,x,k),a=v(F,C,a,S,M),o=v(G,C,o,S,M),s+=32;}H+=8;}if(j>=0){var W=[];W[1]=j+1,W[0]=(1<0?e.windowBits=-e.windowBits:e.gzip&&e.windowBits>0&&e.windowBits<16&&(e.windowBits+=16),this.err=0,this.msg="",this.ended=!1,this.chunks=[],this.strm=new f(),this.strm.avail_out=0;var r=s.deflateInit2(this.strm,e.level,e.method,e.windowBits,e.memLevel,e.strategy);if(r!==m)throw new Error(l[r]);if(e.header&&s.deflateSetHeader(this.strm,e.header),e.dictionary){var n;if(n="string"==typeof e.dictionary?h.string2buf(e.dictionary):"[object ArrayBuffer]"===c.call(e.dictionary)?new Uint8Array(e.dictionary):e.dictionary,r=s.deflateSetDictionary(this.strm,n),r!==m)throw new Error(l[r]);this._dict_set=!0;}}function n(t,e){var r=new i(e);if(r.push(t,!0),r.err)throw r.msg||l[r.err];return r.result;}function a(t,e){return e=e||{},e.raw=!0,n(t,e);}function o(t,e){return e=e||{},e.gzip=!0,n(t,e);}var s=t("./zlib/deflate"),u=t("./utils/common"),h=t("./utils/strings"),l=t("./zlib/messages"),f=t("./zlib/zstream"),c=Object.prototype.toString,d=0,p=4,m=0,b=1,g=2,_=-1,v=0,y=8;i.prototype.push=function(t,e){var r,i,n=this.strm,a=this.options.chunkSize;if(this.ended)return!1;i=e===~~e?e:!0===e?p:d,"string"==typeof t?n.input=h.string2buf(t):"[object ArrayBuffer]"===c.call(t)?n.input=new Uint8Array(t):n.input=t,n.next_in=0,n.avail_in=n.input.length;do{if(0===n.avail_out&&(n.output=new u.Buf8(a),n.next_out=0,n.avail_out=a),r=s.deflate(n,i),r!==b&&r!==m)return this.onEnd(r),this.ended=!0,!1;0!==n.avail_out&&(0!==n.avail_in||i!==p&&i!==g)||("string"===this.options.to?this.onData(h.buf2binstring(u.shrinkBuf(n.output,n.next_out))):this.onData(u.shrinkBuf(n.output,n.next_out)));}while((n.avail_in>0||0===n.avail_out)&&r!==b);return i===p?(r=s.deflateEnd(this.strm),this.onEnd(r),this.ended=!0,r===m):i!==g||(this.onEnd(m),n.avail_out=0,!0);},i.prototype.onData=function(t){this.chunks.push(t);},i.prototype.onEnd=function(t){t===m&&("string"===this.options.to?this.result=this.chunks.join(""):this.result=u.flattenChunks(this.chunks)),this.chunks=[],this.err=t,this.msg=this.strm.msg;},r.Deflate=i,r.deflate=n,r.deflateRaw=a,r.gzip=o;},{"./utils/common":89,"./utils/strings":90,"./zlib/deflate":94,"./zlib/messages":99,"./zlib/zstream":101}],88:[function(t,e,r){"use strict";function i(t){if(!(this instanceof i))return new i(t);this.options=s.assign({chunkSize:16384,windowBits:0,to:""},t||{});var e=this.options;e.raw&&e.windowBits>=0&&e.windowBits<16&&(e.windowBits=-e.windowBits,0===e.windowBits&&(e.windowBits=-15)),!(e.windowBits>=0&&e.windowBits<16)||t&&t.windowBits||(e.windowBits+=32),e.windowBits>15&&e.windowBits<48&&0==(15&e.windowBits)&&(e.windowBits|=15),this.err=0,this.msg="",this.ended=!1,this.chunks=[],this.strm=new f(),this.strm.avail_out=0;var r=o.inflateInit2(this.strm,e.windowBits);if(r!==h.Z_OK)throw new Error(l[r]);this.header=new c(),o.inflateGetHeader(this.strm,this.header);}function n(t,e){var r=new i(e);if(r.push(t,!0),r.err)throw r.msg||l[r.err];return r.result;}function a(t,e){return e=e||{},e.raw=!0,n(t,e);}var o=t("./zlib/inflate"),s=t("./utils/common"),u=t("./utils/strings"),h=t("./zlib/constants"),l=t("./zlib/messages"),f=t("./zlib/zstream"),c=t("./zlib/gzheader"),d=Object.prototype.toString;i.prototype.push=function(t,e){var r,i,n,a,l,f,c=this.strm,p=this.options.chunkSize,m=this.options.dictionary,b=!1;if(this.ended)return!1;i=e===~~e?e:!0===e?h.Z_FINISH:h.Z_NO_FLUSH,"string"==typeof t?c.input=u.binstring2buf(t):"[object ArrayBuffer]"===d.call(t)?c.input=new Uint8Array(t):c.input=t,c.next_in=0,c.avail_in=c.input.length;do{if(0===c.avail_out&&(c.output=new s.Buf8(p),c.next_out=0,c.avail_out=p),r=o.inflate(c,h.Z_NO_FLUSH),r===h.Z_NEED_DICT&&m&&(f="string"==typeof m?u.string2buf(m):"[object ArrayBuffer]"===d.call(m)?new Uint8Array(m):m,r=o.inflateSetDictionary(this.strm,f)),r===h.Z_BUF_ERROR&&!0===b&&(r=h.Z_OK,b=!1),r!==h.Z_STREAM_END&&r!==h.Z_OK)return this.onEnd(r),this.ended=!0,!1;c.next_out&&(0!==c.avail_out&&r!==h.Z_STREAM_END&&(0!==c.avail_in||i!==h.Z_FINISH&&i!==h.Z_SYNC_FLUSH)||("string"===this.options.to?(n=u.utf8border(c.output,c.next_out),a=c.next_out-n,l=u.buf2string(c.output,n),c.next_out=a,c.avail_out=p-a,a&&s.arraySet(c.output,c.output,n,a,0),this.onData(l)):this.onData(s.shrinkBuf(c.output,c.next_out)))),0===c.avail_in&&0===c.avail_out&&(b=!0);}while((c.avail_in>0||0===c.avail_out)&&r!==h.Z_STREAM_END);return r===h.Z_STREAM_END&&(i=h.Z_FINISH),i===h.Z_FINISH?(r=o.inflateEnd(this.strm),this.onEnd(r),this.ended=!0,r===h.Z_OK):i!==h.Z_SYNC_FLUSH||(this.onEnd(h.Z_OK),c.avail_out=0,!0);},i.prototype.onData=function(t){this.chunks.push(t);},i.prototype.onEnd=function(t){t===h.Z_OK&&("string"===this.options.to?this.result=this.chunks.join(""):this.result=s.flattenChunks(this.chunks)),this.chunks=[],this.err=t,this.msg=this.strm.msg;},r.Inflate=i,r.inflate=n,r.inflateRaw=a,r.ungzip=n;},{"./utils/common":89,"./utils/strings":90,"./zlib/constants":92,"./zlib/gzheader":95,"./zlib/inflate":97,"./zlib/messages":99,"./zlib/zstream":101}],89:[function(t,e,r){arguments[4][36][0].apply(r,arguments);},{dup:36}],90:[function(t,e,r){"use strict";function i(t,e){if(e<65537&&(t.subarray&&o||!t.subarray&&a))return String.fromCharCode.apply(null,n.shrinkBuf(t,e));for(var r="",i=0;i=252?6:u>=248?5:u>=240?4:u>=224?3:u>=192?2:1;s[254]=s[254]=1,r.string2buf=function(t){var e,r,i,a,o,s=t.length,u=0;for(a=0;a>>6,e[o++]=128|63&r):r<65536?(e[o++]=224|r>>>12,e[o++]=128|r>>>6&63,e[o++]=128|63&r):(e[o++]=240|r>>>18,e[o++]=128|r>>>12&63,e[o++]=128|r>>>6&63,e[o++]=128|63&r);return e;},r.buf2binstring=function(t){return i(t,t.length);},r.binstring2buf=function(t){for(var e=new n.Buf8(t.length),r=0,i=e.length;r4)h[n++]=65533,r+=o-1;else{for(a&=2===o?31:3===o?15:7;o>1&&r1?h[n++]=65533:a<65536?h[n++]=a:(a-=65536,h[n++]=55296|a>>10&1023,h[n++]=56320|1023&a);}return i(h,n);},r.utf8border=function(t,e){var r;for(e=e||t.length,e>t.length&&(e=t.length),r=e-1;r>=0&&128==(192&t[r]);)r--;return r<0?e:0===r?e:r+s[t[r]]>e?r:e;};},{"./common":89}],91:[function(t,e,r){arguments[4][37][0].apply(r,arguments);},{dup:37}],92:[function(t,e,r){arguments[4][38][0].apply(r,arguments);},{dup:38}],93:[function(t,e,r){arguments[4][39][0].apply(r,arguments);},{dup:39}],94:[function(t,e,r){"use strict";function i(t,e){return t.msg=L[e],e;}function n(t){return(t<<1)-(t>4?9:0);}function a(t){for(var e=t.length;--e>=0;)t[e]=0;}function o(t){var e=t.state,r=e.pending;r>t.avail_out&&(r=t.avail_out),0!==r&&(R.arraySet(t.output,e.pending_buf,e.pending_out,r,t.next_out),t.next_out+=r,e.pending_out+=r,t.total_out+=r,t.avail_out-=r,e.pending-=r,0===e.pending&&(e.pending_out=0));}function s(t,e){P._tr_flush_block(t,t.block_start>=0?t.block_start:-1,t.strstart-t.block_start,e),t.block_start=t.strstart,o(t.strm);}function u(t,e){t.pending_buf[t.pending++]=e;}function h(t,e){t.pending_buf[t.pending++]=e>>>8&255,t.pending_buf[t.pending++]=255&e;}function l(t,e,r,i){var n=t.avail_in;return n>i&&(n=i),0===n?0:(t.avail_in-=n,R.arraySet(e,t.input,t.next_in,n,r),1===t.state.wrap?t.adler=C(t.adler,e,n,r):2===t.state.wrap&&(t.adler=O(t.adler,e,n,r)),t.next_in+=n,t.total_in+=n,n);}function f(t,e){var r,i,n=t.max_chain_length,a=t.strstart,o=t.prev_length,s=t.nice_match,u=t.strstart>t.w_size-ft?t.strstart-(t.w_size-ft):0,h=t.window,l=t.w_mask,f=t.prev,c=t.strstart+lt,d=h[a+o-1],p=h[a+o];t.prev_length>=t.good_match&&(n>>=2),s>t.lookahead&&(s=t.lookahead);do{if(r=e,h[r+o]===p&&h[r+o-1]===d&&h[r]===h[a]&&h[++r]===h[a+1]){a+=2,r++;do{}while(h[++a]===h[++r]&&h[++a]===h[++r]&&h[++a]===h[++r]&&h[++a]===h[++r]&&h[++a]===h[++r]&&h[++a]===h[++r]&&h[++a]===h[++r]&&h[++a]===h[++r]&&ao){if(t.match_start=e,o=i,i>=s)break;d=h[a+o-1],p=h[a+o];}}}while((e=f[e&l])>u&&0!=--n);return o<=t.lookahead?o:t.lookahead;}function c(t){var e,r,i,n,a,o=t.w_size;do{if(n=t.window_size-t.lookahead-t.strstart,t.strstart>=o+(o-ft)){R.arraySet(t.window,t.window,o,o,0),t.match_start-=o,t.strstart-=o,t.block_start-=o,r=t.hash_size,e=r;do{i=t.head[--e],t.head[e]=i>=o?i-o:0;}while(--r);r=o,e=r;do{i=t.prev[--e],t.prev[e]=i>=o?i-o:0;}while(--r);n+=o;}if(0===t.strm.avail_in)break;if(r=l(t.strm,t.window,t.strstart+t.lookahead,n),t.lookahead+=r,t.lookahead+t.insert>=ht)for(a=t.strstart-t.insert,t.ins_h=t.window[a],t.ins_h=(t.ins_h<t.pending_buf_size-5&&(r=t.pending_buf_size-5);;){if(t.lookahead<=1){if(c(t),0===t.lookahead&&e===B)return yt;if(0===t.lookahead)break;}t.strstart+=t.lookahead,t.lookahead=0;var i=t.block_start+r;if((0===t.strstart||t.strstart>=i)&&(t.lookahead=t.strstart-i,t.strstart=i,s(t,!1),0===t.strm.avail_out))return yt;if(t.strstart-t.block_start>=t.w_size-ft&&(s(t,!1),0===t.strm.avail_out))return yt;}return t.insert=0,e===z?(s(t,!0),0===t.strm.avail_out?Et:xt):(t.strstart>t.block_start&&(s(t,!1),t.strm.avail_out),yt);}function p(t,e){for(var r,i;;){if(t.lookahead=ht&&(t.ins_h=(t.ins_h<=ht){if(i=P._tr_tally(t,t.strstart-t.match_start,t.match_length-ht),t.lookahead-=t.match_length,t.match_length<=t.max_lazy_match&&t.lookahead>=ht){t.match_length--;do{t.strstart++,t.ins_h=(t.ins_h<=ht&&(t.ins_h=(t.ins_h<4096)&&(t.match_length=ht-1)),t.prev_length>=ht&&t.match_length<=t.prev_length){n=t.strstart+t.lookahead-ht,i=P._tr_tally(t,t.strstart-1-t.prev_match,t.prev_length-ht),t.lookahead-=t.prev_length-1,t.prev_length-=2;do{++t.strstart<=n&&(t.ins_h=(t.ins_h<=ht&&t.strstart>0&&(n=t.strstart-1,i=o[n],i===o[++n]&&i===o[++n]&&i===o[++n])){a=t.strstart+lt;do{}while(i===o[++n]&&i===o[++n]&&i===o[++n]&&i===o[++n]&&i===o[++n]&&i===o[++n]&&i===o[++n]&&i===o[++n]&&nt.lookahead&&(t.match_length=t.lookahead);}if(t.match_length>=ht?(r=P._tr_tally(t,1,t.match_length-ht),t.lookahead-=t.match_length,t.strstart+=t.match_length,t.match_length=0):(r=P._tr_tally(t,0,t.window[t.strstart]),t.lookahead--,t.strstart++),r&&(s(t,!1),0===t.strm.avail_out))return yt;}return t.insert=0,e===z?(s(t,!0),0===t.strm.avail_out?Et:xt):t.last_lit&&(s(t,!1),0===t.strm.avail_out)?yt:wt;}function g(t,e){for(var r;;){if(0===t.lookahead&&(c(t),0===t.lookahead)){if(e===B)return yt;break;}if(t.match_length=0,r=P._tr_tally(t,0,t.window[t.strstart]),t.lookahead--,t.strstart++,r&&(s(t,!1),0===t.strm.avail_out))return yt;}return t.insert=0,e===z?(s(t,!0),0===t.strm.avail_out?Et:xt):t.last_lit&&(s(t,!1),0===t.strm.avail_out)?yt:wt;}function _(t,e,r,i,n){this.good_length=t,this.max_lazy=e,this.nice_length=r,this.max_chain=i,this.func=n;}function v(t){t.window_size=2*t.w_size,a(t.head),t.max_lazy_match=T[t.level].max_lazy,t.good_match=T[t.level].good_length,t.nice_match=T[t.level].nice_length,t.max_chain_length=T[t.level].max_chain,t.strstart=0,t.block_start=0,t.lookahead=0,t.insert=0,t.match_length=t.prev_length=ht-1,t.match_available=0,t.ins_h=0;}function y(){this.strm=null,this.status=0,this.pending_buf=null,this.pending_buf_size=0,this.pending_out=0,this.pending=0,this.wrap=0,this.gzhead=null,this.gzindex=0,this.method=K,this.last_flush=-1,this.w_size=0,this.w_bits=0,this.w_mask=0,this.window=null,this.window_size=0,this.prev=null,this.head=null,this.ins_h=0,this.hash_size=0,this.hash_bits=0,this.hash_mask=0,this.hash_shift=0,this.block_start=0,this.match_length=0,this.prev_match=0,this.match_available=0,this.strstart=0,this.match_start=0,this.lookahead=0,this.prev_length=0,this.max_chain_length=0,this.max_lazy_match=0,this.level=0,this.strategy=0,this.good_match=0,this.nice_match=0,this.dyn_ltree=new R.Buf16(2*st),this.dyn_dtree=new R.Buf16(2*(2*at+1)),this.bl_tree=new R.Buf16(2*(2*ot+1)),a(this.dyn_ltree),a(this.dyn_dtree),a(this.bl_tree),this.l_desc=null,this.d_desc=null,this.bl_desc=null,this.bl_count=new R.Buf16(ut+1),this.heap=new R.Buf16(2*nt+1),a(this.heap),this.heap_len=0,this.heap_max=0,this.depth=new R.Buf16(2*nt+1),a(this.depth),this.l_buf=0,this.lit_bufsize=0,this.last_lit=0,this.d_buf=0,this.opt_len=0,this.static_len=0,this.matches=0,this.insert=0,this.bi_buf=0,this.bi_valid=0;}function w(t){var e;return t&&t.state?(t.total_in=t.total_out=0,t.data_type=J,e=t.state,e.pending=0,e.pending_out=0,e.wrap<0&&(e.wrap=-e.wrap),e.status=e.wrap?dt:_t,t.adler=2===e.wrap?0:1,e.last_flush=B,P._tr_init(e),U):i(t,G);}function E(t){var e=w(t);return e===U&&v(t.state),e;}function x(t,e){return t&&t.state?2!==t.state.wrap?G:(t.state.gzhead=e,U):G;}function S(t,e,r,n,a,o){if(!t)return G;var s=1;if(e===W&&(e=6),n<0?(s=0,n=-n):n>15&&(s=2,n-=16),a<1||a>$||r!==K||n<8||n>15||e<0||e>9||o<0||o>X)return i(t,G);8===n&&(n=9);var u=new y();return t.state=u,u.strm=t,u.wrap=s,u.gzhead=null,u.w_bits=n,u.w_size=1<j||e<0)return t?i(t,G):G;if(s=t.state,!t.output||!t.input&&0!==t.avail_in||s.status===vt&&e!==z)return i(t,0===t.avail_out?q:G);if(s.strm=t,r=s.last_flush,s.last_flush=e,s.status===dt)if(2===s.wrap)t.adler=0,u(s,31),u(s,139),u(s,8),s.gzhead?(u(s,(s.gzhead.text?1:0)+(s.gzhead.hcrc?2:0)+(s.gzhead.extra?4:0)+(s.gzhead.name?8:0)+(s.gzhead.comment?16:0)),u(s,255&s.gzhead.time),u(s,s.gzhead.time>>8&255),u(s,s.gzhead.time>>16&255),u(s,s.gzhead.time>>24&255),u(s,9===s.level?2:s.strategy>=Y||s.level<2?4:0),u(s,255&s.gzhead.os),s.gzhead.extra&&s.gzhead.extra.length&&(u(s,255&s.gzhead.extra.length),u(s,s.gzhead.extra.length>>8&255)),s.gzhead.hcrc&&(t.adler=O(t.adler,s.pending_buf,s.pending,0)),s.gzindex=0,s.status=pt):(u(s,0),u(s,0),u(s,0),u(s,0),u(s,0),u(s,9===s.level?2:s.strategy>=Y||s.level<2?4:0),u(s,St),s.status=_t);else{var c=K+(s.w_bits-8<<4)<<8,d=-1;d=s.strategy>=Y||s.level<2?0:s.level<6?1:6===s.level?2:3,c|=d<<6,0!==s.strstart&&(c|=ct),c+=31-c%31,s.status=_t,h(s,c),0!==s.strstart&&(h(s,t.adler>>>16),h(s,65535&t.adler)),t.adler=1;}if(s.status===pt)if(s.gzhead.extra){for(l=s.pending;s.gzindex<(65535&s.gzhead.extra.length)&&(s.pending!==s.pending_buf_size||(s.gzhead.hcrc&&s.pending>l&&(t.adler=O(t.adler,s.pending_buf,s.pending-l,l)),o(t),l=s.pending,s.pending!==s.pending_buf_size));)u(s,255&s.gzhead.extra[s.gzindex]),s.gzindex++;s.gzhead.hcrc&&s.pending>l&&(t.adler=O(t.adler,s.pending_buf,s.pending-l,l)),s.gzindex===s.gzhead.extra.length&&(s.gzindex=0,s.status=mt);}else s.status=mt;if(s.status===mt)if(s.gzhead.name){l=s.pending;do{if(s.pending===s.pending_buf_size&&(s.gzhead.hcrc&&s.pending>l&&(t.adler=O(t.adler,s.pending_buf,s.pending-l,l)),o(t),l=s.pending,s.pending===s.pending_buf_size)){f=1;break;}f=s.gzindexl&&(t.adler=O(t.adler,s.pending_buf,s.pending-l,l)),0===f&&(s.gzindex=0,s.status=bt);}else s.status=bt;if(s.status===bt)if(s.gzhead.comment){l=s.pending;do{if(s.pending===s.pending_buf_size&&(s.gzhead.hcrc&&s.pending>l&&(t.adler=O(t.adler,s.pending_buf,s.pending-l,l)),o(t),l=s.pending,s.pending===s.pending_buf_size)){f=1;break;}f=s.gzindexl&&(t.adler=O(t.adler,s.pending_buf,s.pending-l,l)),0===f&&(s.status=gt);}else s.status=gt;if(s.status===gt&&(s.gzhead.hcrc?(s.pending+2>s.pending_buf_size&&o(t),s.pending+2<=s.pending_buf_size&&(u(s,255&t.adler),u(s,t.adler>>8&255),t.adler=0,s.status=_t)):s.status=_t),0!==s.pending){if(o(t),0===t.avail_out)return s.last_flush=-1,U;}else if(0===t.avail_in&&n(e)<=n(r)&&e!==z)return i(t,q);if(s.status===vt&&0!==t.avail_in)return i(t,q);if(0!==t.avail_in||0!==s.lookahead||e!==B&&s.status!==vt){var p=s.strategy===Y?g(s,e):s.strategy===V?b(s,e):T[s.level].func(s,e);if(p!==Et&&p!==xt||(s.status=vt),p===yt||p===Et)return 0===t.avail_out&&(s.last_flush=-1),U;if(p===wt&&(e===D?P._tr_align(s):e!==j&&(P._tr_stored_block(s,0,0,!1),e===N&&(a(s.head),0===s.lookahead&&(s.strstart=0,s.block_start=0,s.insert=0))),o(t),0===t.avail_out))return s.last_flush=-1,U;}return e!==z?U:s.wrap<=0?F:(2===s.wrap?(u(s,255&t.adler),u(s,t.adler>>8&255),u(s,t.adler>>16&255),u(s,t.adler>>24&255),u(s,255&t.total_in),u(s,t.total_in>>8&255),u(s,t.total_in>>16&255),u(s,t.total_in>>24&255)):(h(s,t.adler>>>16),h(s,65535&t.adler)),o(t),s.wrap>0&&(s.wrap=-s.wrap),0!==s.pending?U:F);}function A(t){var e;return t&&t.state?(e=t.state.status,e!==dt&&e!==pt&&e!==mt&&e!==bt&&e!==gt&&e!==_t&&e!==vt?i(t,G):(t.state=null,e===_t?i(t,H):U)):G;}function I(t,e){var r,i,n,o,s,u,h,l,f=e.length;if(!t||!t.state)return G;if(r=t.state,o=r.wrap,2===o||1===o&&r.status!==dt||r.lookahead)return G;for(1===o&&(t.adler=C(t.adler,e,f,0)),r.wrap=0,f>=r.w_size&&(0===o&&(a(r.head),r.strstart=0,r.block_start=0,r.insert=0),l=new R.Buf8(r.w_size),R.arraySet(l,e,f-r.w_size,r.w_size,0),e=l,f=r.w_size),s=t.avail_in,u=t.next_in,h=t.input,t.avail_in=f,t.next_in=0,t.input=e,c(r);r.lookahead>=ht;){i=r.strstart,n=r.lookahead-(ht-1);do{r.ins_h=(r.ins_h<=0;)t[e]=0;}function n(t,e,r,i,n){this.static_tree=t,this.extra_bits=e,this.extra_base=r,this.elems=i,this.max_length=n,this.has_stree=t&&t.length;}function a(t,e){this.dyn_tree=t,this.max_code=0,this.stat_desc=e;}function o(t){return t<256?ut[t]:ut[256+(t>>>7)];}function s(t,e){t.pending_buf[t.pending++]=255&e,t.pending_buf[t.pending++]=e>>>8&255;}function u(t,e,r){t.bi_valid>X-r?(t.bi_buf|=e<>X-t.bi_valid,t.bi_valid+=r-X):(t.bi_buf|=e<>>=1,r<<=1;}while(--e>0);return r>>>1;}function f(t){16===t.bi_valid?(s(t,t.bi_buf),t.bi_buf=0,t.bi_valid=0):t.bi_valid>=8&&(t.pending_buf[t.pending++]=255&t.bi_buf,t.bi_buf>>=8,t.bi_valid-=8);}function c(t,e){var r,i,n,a,o,s,u=e.dyn_tree,h=e.max_code,l=e.stat_desc.static_tree,f=e.stat_desc.has_stree,c=e.stat_desc.extra_bits,d=e.stat_desc.extra_base,p=e.stat_desc.max_length,m=0;for(a=0;a<=V;a++)t.bl_count[a]=0;for(u[2*t.heap[t.heap_max]+1]=0,r=t.heap_max+1;rp&&(a=p,m++),u[2*i+1]=a,i>h||(t.bl_count[a]++,o=0,i>=d&&(o=c[i-d]),s=u[2*i],t.opt_len+=s*(a+o),f&&(t.static_len+=s*(l[2*i+1]+o)));if(0!==m){do{for(a=p-1;0===t.bl_count[a];)a--;t.bl_count[a]--,t.bl_count[a+1]+=2,t.bl_count[p]--,m-=2;}while(m>0);for(a=p;0!==a;a--)for(i=t.bl_count[a];0!==i;)n=t.heap[--r],n>h||(u[2*n+1]!==a&&(t.opt_len+=(a-u[2*n+1])*u[2*n],u[2*n+1]=a),i--);}}function d(t,e,r){var i,n,a=new Array(V+1),o=0;for(i=1;i<=V;i++)a[i]=o=o+r[i-1]<<1;for(n=0;n<=e;n++){var s=t[2*n+1];0!==s&&(t[2*n]=l(a[s]++,s));}}function p(){var t,e,r,i,a,o=new Array(V+1);for(r=0,i=0;i>=7;i8?s(t,t.bi_buf):t.bi_valid>0&&(t.pending_buf[t.pending++]=t.bi_buf),t.bi_buf=0,t.bi_valid=0;}function g(t,e,r,i){b(t),i&&(s(t,r),s(t,~r)),C.arraySet(t.pending_buf,t.window,e,r,t.pending),t.pending+=r;}function _(t,e,r,i){var n=2*e,a=2*r;return t[n]>1;r>=1;r--)v(t,a,r);n=u;do{r=t.heap[1],t.heap[1]=t.heap[t.heap_len--],v(t,a,1),i=t.heap[1],t.heap[--t.heap_max]=r,t.heap[--t.heap_max]=i,a[2*n]=a[2*r]+a[2*i],t.depth[n]=(t.depth[r]>=t.depth[i]?t.depth[r]:t.depth[i])+1,a[2*r+1]=a[2*i+1]=n,t.heap[1]=n++,v(t,a,1);}while(t.heap_len>=2);t.heap[--t.heap_max]=t.heap[1],c(t,e),d(a,h,t.bl_count);}function E(t,e,r){var i,n,a=-1,o=e[1],s=0,u=7,h=4;for(0===o&&(u=138,h=3),e[2*(r+1)+1]=65535,i=0;i<=r;i++)n=o,o=e[2*(i+1)+1],++s=3&&0===t.bl_tree[2*nt[e]+1];e--);return t.opt_len+=3*(e+1)+5+5+4,e;}function k(t,e,r,i){var n;for(u(t,e-257,5),u(t,r-1,5),u(t,i-4,4),n=0;n>>=1)if(1&r&&0!==t.dyn_ltree[2*e])return L;if(0!==t.dyn_ltree[18]||0!==t.dyn_ltree[20]||0!==t.dyn_ltree[26])return B;for(e=32;e0?(t.strm.data_type===D&&(t.strm.data_type=M(t)),w(t,t.l_desc),w(t,t.d_desc),o=S(t),n=t.opt_len+3+7>>>3,a=t.static_len+3+7>>>3,a<=n&&(n=a)):n=a=r+5,r+4<=n&&-1!==e?I(t,e,r,i):t.strategy===O||a===n?(u(t,(z<<1)+(i?1:0),3),y(t,ot,st)):(u(t,(j<<1)+(i?1:0),3),k(t,t.l_desc.max_code+1,t.d_desc.max_code+1,o+1),y(t,t.dyn_ltree,t.dyn_dtree)),m(t),i&&b(t);}function P(t,e,r){return t.pending_buf[t.d_buf+2*t.last_lit]=e>>>8&255,t.pending_buf[t.d_buf+2*t.last_lit+1]=255&e,t.pending_buf[t.l_buf+t.last_lit]=255&r,t.last_lit++,0===e?t.dyn_ltree[2*r]++:(t.matches++,e--,t.dyn_ltree[2*(ht[r]+H+1)]++,t.dyn_dtree[2*o(e)]++),t.last_lit===t.lit_bufsize-1;}var C=t("../utils/common"),O=4,L=0,B=1,D=2,N=0,z=1,j=2,U=3,F=258,G=29,H=256,q=H+1+G,W=30,Z=19,Y=2*q+1,V=15,X=16,Q=7,J=256,K=16,$=17,tt=18,et=[0,0,0,0,0,0,0,0,1,1,1,1,2,2,2,2,3,3,3,3,4,4,4,4,5,5,5,5,0],rt=[0,0,0,0,1,1,2,2,3,3,4,4,5,5,6,6,7,7,8,8,9,9,10,10,11,11,12,12,13,13],it=[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,2,3,7],nt=[16,17,18,0,8,7,9,6,10,5,11,4,12,3,13,2,14,1,15],at=512,ot=new Array(2*(q+2));i(ot);var st=new Array(2*W);i(st);var ut=new Array(at);i(ut);var ht=new Array(F-U+1);i(ht);var lt=new Array(G);i(lt);var ft,ct,dt,pt=new Array(W);i(pt);var mt=!1;r._tr_init=A,r._tr_stored_block=I,r._tr_flush_block=R,r._tr_tally=P,r._tr_align=T;},{"../utils/common":89}],101:[function(t,e,r){arguments[4][46][0].apply(r,arguments);},{dup:46}],102:[function(t,e,r){function i(t,e){if(t=t.replace(/\t+/g," ").trim(),!t)return null;var r=t.indexOf(" ");if(-1===r)throw new Error("no named row at line "+e);var i=t.substring(0,r);t=t.substring(r+1),t=t.replace(/letter=[\'\"]\S+[\'\"]/gi,""),t=t.split("="),t=t.map(function(t){return t.trim().match(/(".*?"|[^"\s]+)+(?=\s*|\s*$)/g);});for(var a=[],o=0;oe.length-1)return 0;var i=e.readUInt8(r++),h=e.readInt32LE(r);switch(r+=4,i){case 1:t.info=n(e,r);break;case 2:t.common=a(e,r);break;case 3:t.pages=o(e,r,h);break;case 4:t.chars=s(e,r,h);break;case 5:t.kernings=u(e,r,h);}return 5+h;}function n(t,e){var r={};r.size=t.readInt16LE(e);var i=t.readUInt8(e+2);return r.smooth=i>>7&1,r.unicode=i>>6&1,r.italic=i>>5&1,r.bold=i>>4&1,i>>3&1&&(r.fixedHeight=1),r.charset=t.readUInt8(e+3)||"",r.stretchH=t.readUInt16LE(e+4),r.aa=t.readUInt8(e+6),r.padding=[t.readInt8(e+7),t.readInt8(e+8),t.readInt8(e+9),t.readInt8(e+10)],r.spacing=[t.readInt8(e+11),t.readInt8(e+12)],r.outline=t.readUInt8(e+13),r.face=l(t,e+14),r;}function a(t,e){var r={};r.lineHeight=t.readUInt16LE(e),r.base=t.readUInt16LE(e+2),r.scaleW=t.readUInt16LE(e+4),r.scaleH=t.readUInt16LE(e+6),r.pages=t.readUInt16LE(e+8);t.readUInt8(e+10);return r.packed=0,r.alphaChnl=t.readUInt8(e+11),r.redChnl=t.readUInt8(e+12),r.greenChnl=t.readUInt8(e+13),r.blueChnl=t.readUInt8(e+14),r;}function o(t,e,r){for(var i=[],n=h(t,e),a=n.length+1,o=r/a,s=0;s3)throw new Error("Only supports BMFont Binary v3 (BMFont App v1.10)");for(var a={kernings:[],chars:[]},o=0;o<5;o++)r+=i(a,t,r);return a;};},{}],104:[function(t,e,r){function i(t){var e=n(t);return e.reduce(function(t,e){var r=a(e.nodeName);return t[r]=e.nodeValue,t;},{});}function n(t){for(var e=[],r=0;r element");for(var a=n.getElementsByTagName("page"),u=0;u=0;i--){var n=t[i];"."===n?t.splice(i,1):".."===n?(t.splice(i,1),r++):r&&(t.splice(i,1),r--);}if(e)for(;r--;r)t.unshift("..");return t;}function i(t){"string"!=typeof t&&(t+="");var e,r=0,i=-1,n=!0;for(e=t.length-1;e>=0;--e)if(47===t.charCodeAt(e)){if(!n){r=e+1;break;}}else-1===i&&(n=!1,i=e+1);return-1===i?"":t.slice(r,i);}function n(t,e){if(t.filter)return t.filter(e);for(var r=[],i=0;i=-1&&!i;a--){var o=a>=0?arguments[a]:t.cwd();if("string"!=typeof o)throw new TypeError("Arguments to path.resolve must be strings");o&&(r=o+"/"+r,i="/"===o.charAt(0));}return r=e(n(r.split("/"),function(t){return!!t;}),!i).join("/"),(i?"/":"")+r||".";},r.normalize=function(t){var i=r.isAbsolute(t),o="/"===a(t,-1);return t=e(n(t.split("/"),function(t){return!!t;}),!i).join("/"),t||i||(t="."),t&&o&&(t+="/"),(i?"/":"")+t;},r.isAbsolute=function(t){return"/"===t.charAt(0);},r.join=function(){var t=Array.prototype.slice.call(arguments,0);return r.normalize(n(t,function(t,e){if("string"!=typeof t)throw new TypeError("Arguments to path.join must be strings");return t;}).join("/"));},r.relative=function(t,e){function i(t){for(var e=0;e=0&&""===t[r];r--);return e>r?[]:t.slice(e,r-e+1);}t=r.resolve(t).substr(1),e=r.resolve(e).substr(1);for(var n=i(t.split("/")),a=i(e.split("/")),o=Math.min(n.length,a.length),s=o,u=0;u=1;--a)if(e=t.charCodeAt(a),47===e){if(!n){i=a;break;}}else n=!1;return-1===i?r?"/":".":r&&1===i?"/":t.slice(0,i);},r.basename=function(t,e){var r=i(t);return e&&r.substr(-1*e.length)===e&&(r=r.substr(0,r.length-e.length)),r;},r.extname=function(t){"string"!=typeof t&&(t+="");for(var e=-1,r=0,i=-1,n=!0,a=0,o=t.length-1;o>=0;--o){var s=t.charCodeAt(o);if(47!==s)-1===i&&(n=!1,i=o+1),46===s?-1===e?e=o:1!==a&&(a=1):-1!==e&&(a=-1);else if(!n){r=o+1;break;}}return-1===e||-1===i||0===a||1===a&&e===i-1&&e===r+1?"":t.slice(e,i);};var a= true?function(t,e,r){return t.substr(e,r);}:0;}).call(this,t("_process"));},{_process:133}],108:[function(t,e,r){(function(r){"use strict";var i="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(t){return typeof t;}:function(t){return t&&"function"==typeof Symbol&&t.constructor===Symbol&&t!==Symbol.prototype?"symbol":typeof t;},n=t("http"),a=t("https"),o=t("url"),s=t("querystring"),u=t("zlib"),h=t("util"),l=function(t,e){if("string"!=typeof t&&!t.hasOwnProperty("url"))throw new Error("Missing url option from options for request method.");var h="object"===(void 0===t?"undefined":i(t))?o.parse(t.url):o.parse(t),l={hostname:h.hostname,port:h.port||("http:"===h.protocol.toLowerCase()?80:443),path:h.path,method:"GET",headers:{},auth:h.auth||null,parse:"none",stream:!1};if("object"===(void 0===t?"undefined":i(t))&&(l=Object.assign(l,t)),l.port=Number(l.port),l.hasOwnProperty("timeout")&&delete l.timeout,!0===l.compressed&&(l.headers["accept-encoding"]="gzip, deflate"),t.hasOwnProperty("form")){if("object"!==i(t.form))throw new Error("phin 'form' option must be of type Object if present.");var f=s.stringify(t.form);l.headers["Content-Type"]="application/x-www-form-urlencoded",l.headers["Content-Length"]=r.byteLength(f),t.data=f;}var c=void 0,d=function(t){var i=t;!0===l.compressed&&("gzip"===t.headers["content-encoding"]?i=t.pipe(u.createGunzip()):"deflate"===t.headers["content-encoding"]&&(i=t.pipe(u.createInflate()))),!0===l.stream?(t.stream=i,e(null,t)):(t.body=new r([]),i.on("data",function(e){t.body=r.concat([t.body,e]);}),i.on("end",function(){if(e){if("json"===l.parse)try{t.body=JSON.parse(t.body.toString());}catch(r){return void e("Invalid JSON received.",t);}e(null,t);}}));};switch(h.protocol.toLowerCase()){case"http:":c=n.request(l,d);break;case"https:":c=a.request(l,d);break;default:return void(e&&e(new Error("Invalid / unknown URL protocol. Expected HTTP or HTTPS."),null));}if("number"==typeof t.timeout&&c.setTimeout(t.timeout,function(){c.abort(),e(new Error("Timeout has been reached."),null),e=null;}),c.on("error",function(t){e&&e(t,null);}),t.hasOwnProperty("data")){var p=t.data;if(!(t.data instanceof r)&&"object"===i(t.data)){var m=l.headers["content-type"]||l.headers["Content-Type"];if("application/x-www-form-urlencoded"===m)p=s.stringify(t.data);else try{p=JSON.stringify(t.data);}catch(t){e(new Error("Couldn't stringify object. (Likely due to a circular reference.)"),null);}}c.write(p);}c.end();};l.promisified=function(t,e){return new Promise(function(r,i){l(t,function(t,e){t?i(t):r(e);},e);});},h.promisify&&(l[h.promisify.custom]=l.promisified),e.exports=l;}).call(this,t("buffer").Buffer);},{buffer:48,http:156,https:72,querystring:137,url:180,util:186,zlib:35}],109:[function(t,e,r){"use strict";function i(t,e,r,i,o,s){s||(s={});for(var u=void 0===s.threshold?.1:s.threshold,c=35215*u*u,d=0,p=0;pc)s.includeAA||!n(t,m,p,i,o,e)&&!n(e,m,p,i,o,t)?(r&&l(r,b,255,0,0),d++):r&&l(r,b,255,255,0);else if(r){var _=h(f(t,b),.1);l(r,b,_,_,_);}}return d;}function n(t,e,r,i,o,s){for(var u,h,l,f,c=Math.max(e-1,0),d=Math.max(r-1,0),p=Math.min(e+1,i-1),m=Math.min(r+1,o-1),b=4*(r*i+e),g=0,_=0,v=0,y=0,w=0,E=c;E<=p;E++)for(var x=d;x<=m;x++)if(E!==e||x!==r){var S=a(t,t,b,4*(x*i+E),!0);if(0===S?g++:S<0?v++:S>0&&_++,g>2)return!1;s&&(Sw&&(w=S,l=E,f=x));}return!s||0!==v&&0!==_&&(!n(t,u,h,i,o)&&!n(s,u,h,i,o)||!n(t,l,f,i,o)&&!n(s,l,f,i,o));}function a(t,e,r,i,n){var a=t[r+3]/255,l=e[i+3]/255,f=h(t[r+0],a),c=h(t[r+1],a),d=h(t[r+2],a),p=h(e[i+0],l),m=h(e[i+1],l),b=h(e[i+2],l),g=o(f,c,d)-o(p,m,b);if(n)return g;var _=s(f,c,d)-s(p,m,b),v=u(f,c,d)-u(p,m,b);return .5053*g*g+.299*_*_+.1957*v*v;}function o(t,e,r){return .29889531*t+.58662247*e+.11448223*r;}function s(t,e,r){return .59597799*t-.2741761*e-.32180189*r;}function u(t,e,r){return .21147017*t-.52261711*e+.31114694*r;}function h(t,e){return 255+(t-255)*e;}function l(t,e,r,i,n){t[e+0]=r,t[e+1]=i,t[e+2]=n,t[e+3]=255;}function f(t,e){var r=t[e+3]/255,i=h(t[e+0],r),n=h(t[e+1],r),a=h(t[e+2],r);return o(i,n,a);}e.exports=i;},{}],110:[function(t,e,r){(function(e){"use strict";function i(t,e){function r(){if(n===t.length)throw new Error("Ran out of data");var r,a,o,s,u,h,l,f,c=t[n];switch(n++,e){default:throw new Error("unrecognised depth");case 16:l=t[n],n++,i.push((c<<8)+l);break;case 4:l=15&c,f=c>>4,i.push(f,l);break;case 2:u=3&c,h=c>>2&3,l=c>>4&3,f=c>>6&3,i.push(f,l,h,u);break;case 1:r=1&c,a=c>>1&1,o=c>>2&1,s=c>>3&1,u=c>>4&1,h=c>>5&1,l=c>>6&1,f=c>>7&1,i.push(f,l,h,u,s,o,a,r);}}var i=[],n=0;return{get:function(t){for(;i.length0&&(this._paused=!1,this.emit("drain"));}.bind(this));},o.prototype.write=function(t,e){return this.writable?(r=i.isBuffer(t)?t:new i(t,e||this._encoding),this._buffers.push(r),this._buffered+=r.length,this._process(),this._reads&&0===this._reads.length&&(this._paused=!0),this.writable&&!this._paused):(this.emit("error",new Error("Stream not writable")),!1);var r;},o.prototype.end=function(t,e){t&&this.write(t,e),this.writable=!1,this._buffers&&(0===this._buffers.length?this._end():(this._buffers.push(null),this._process()));},o.prototype.destroySoon=o.prototype.end,o.prototype._end=function(){this._reads.length>0&&this.emit("error",new Error("There are some read requests waiting on finished stream")),this.destroy();},o.prototype.destroy=function(){this._buffers&&(this.writable=!1,this._reads=null,this._buffers=null,this.emit("close"));},o.prototype._processReadAllowingLess=function(t){this._reads.shift();var e=this._buffers[0];e.length>t.length?(this._buffered-=t.length,this._buffers[0]=e.slice(t.length),t.func.call(this,e.slice(0,t.length))):(this._buffered-=e.length,this._buffers.shift(),t.func.call(this,e));},o.prototype._processRead=function(t){this._reads.shift();for(var e=0,r=0,n=new i(t.length);e0&&this._buffers.splice(0,r),this._buffered-=t.length,t.func.call(this,n);},o.prototype._process=function(){try{for(;this._buffered>0&&this._reads&&this._reads.length>0;){var t=this._reads[0];if(t.allowLess)this._processReadAllowingLess(t);else{if(!(this._buffered>=t.length))break;this._processRead(t);}}this._buffers&&this._buffers.length>0&&null===this._buffers[0]&&this._end();}catch(t){this.emit("error",t);}};}).call(this,t("_process"),t("buffer").Buffer);},{_process:133,buffer:48,stream:155,util:186}],113:[function(t,e,r){"use strict";e.exports={PNG_SIGNATURE:[137,80,78,71,13,10,26,10],TYPE_IHDR:1229472850,TYPE_IEND:1229278788,TYPE_IDAT:1229209940,TYPE_PLTE:1347179589,TYPE_tRNS:1951551059,TYPE_gAMA:1732332865,COLORTYPE_GRAYSCALE:0,COLORTYPE_PALETTE:1,COLORTYPE_COLOR:2,COLORTYPE_ALPHA:4,COLORTYPE_PALETTE_COLOR:3,COLORTYPE_COLOR_ALPHA:6,COLORTYPE_TO_BPP_MAP:{0:1,2:3,3:1,4:2,6:4},GAMMA_DIVISION:1e5};},{}],114:[function(t,e,r){"use strict";var i=[];(function(){for(var t=0;t<256;t++){for(var e=t,r=0;r<8;r++)1&e?e=3988292384^e>>>1:e>>>=1;i[t]=e;}})();var n=e.exports=function(){this._crc=-1;};n.prototype.write=function(t){for(var e=0;e>>8;return!0;},n.prototype.crc32=function(){return-1^this._crc;},n.crc32=function(t){for(var e=-1,r=0;r>>8;return-1^e;};},{}],115:[function(t,e,r){(function(r){"use strict";function i(t,e,r,i,n){for(var a=0;a=a?t[e+o-a]:0,u=t[e+o]-s;i[n+o]=u;}}function o(t,e,r,i){for(var n=0,a=0;a=i?t[e+a-i]:0,s=t[e+a]-o;n+=Math.abs(s);}return n;}function s(t,e,r,i,n){for(var a=0;a0?t[e+a-r]:0,s=t[e+a]-o;i[n+a]=s;}}function u(t,e,r){for(var i=0,n=e+r,a=e;a0?t[a-r]:0,s=t[a]-o;i+=Math.abs(s);}return i;}function h(t,e,r,i,n,a){for(var o=0;o=a?t[e+o-a]:0,u=e>0?t[e+o-r]:0,h=t[e+o]-(s+u>>1);i[n+o]=h;}}function l(t,e,r,i){for(var n=0,a=0;a=i?t[e+a-i]:0,s=e>0?t[e+a-r]:0,u=t[e+a]-(o+s>>1);n+=Math.abs(u);}return n;}function f(t,e,r,i,n,a){for(var o=0;o=a?t[e+o-a]:0,u=e>0?t[e+o-r]:0,h=e>0&&o>=a?t[e+o-(r+a)]:0,l=t[e+o]-d(s,u,h);i[n+o]=l;}}function c(t,e,r,i){for(var n=0,a=0;a=i?t[e+a-i]:0,s=e>0?t[e+a-r]:0,u=e>0&&a>=i?t[e+a-(r+i)]:0,h=t[e+a]-d(o,s,u);n+=Math.abs(h);}return n;}var d=t("./paeth-predictor"),p={0:i,1:a,2:s,3:h,4:f},m={0:n,1:o,2:u,3:l,4:c};e.exports=function(t,e,i,n,a){var o;if("filterType"in n&&-1!==n.filterType){if("number"!=typeof n.filterType)throw new Error("unrecognised filter types");o=[n.filterType];}else o=[0,1,2,3,4];16===n.bitDepth&&(a*=2);for(var s=e*a,u=0,h=0,l=new r((s+1)*i),f=o[0],c=0;c1)for(var d=1/0,b=0;bn?e[a-i]:0;e[a]=o+s;}},o.prototype._unFilterType2=function(t,e,r){for(var i=this._lastLine,n=0;nn?e[o-i]:0,l=Math.floor((h+u)/2);e[o]=s+l;}},o.prototype._unFilterType4=function(t,e,r){for(var i=this._xComparison,n=i-1,o=this._lastLine,s=0;sn?e[s-i]:0,f=s>n&&o?o[s-i]:0,c=a(l,h,f);e[s]=u+c;}},o.prototype._reverseFilterLine=function(t){var e,i=t[0],n=this._images[this._imageIndex],a=n.byteWidth;if(0===i)e=t.slice(1,a+1);else switch(e=new r(a),i){case 1:this._unFilterType1(t,e,a);break;case 2:this._unFilterType2(t,e,a);break;case 3:this._unFilterType3(t,e,a);break;case 4:this._unFilterType4(t,e,a);break;default:throw new Error("Unrecognised filter type - "+i);}this.write(e),n.lineIndex++,n.lineIndex>=n.height?(this._lastLine=null,this._imageIndex++,n=this._images[this._imageIndex]):this._lastLine=e,n?this.read(n.byteWidth+1,this._reverseFilterLine.bind(this)):(this._lastLine=null,this.complete());};}).call(this,t("buffer").Buffer);},{"./interlace":120,"./paeth-predictor":124,buffer:48}],119:[function(t,e,r){(function(t){"use strict";function r(t,e,r,i,n){for(var a=0,o=0;o0&&f>0&&r.push({width:l,height:f,index:u});}return r;},r.getInterlaceIterator=function(t){return function(e,r,n){var a=e%i[n].x.length,o=(e-a)/i[n].x.length*8+i[n].x[a],s=r%i[n].y.length,u=(r-s)/i[n].y.length*8+i[n].y[s];return 4*o+u*t*4;};};},{}],121:[function(t,e,r){(function(r){"use strict";var i=t("util"),n=t("stream"),a=t("./constants"),o=t("./packer"),s=e.exports=function(t){n.call(this);var e=t||{};this._packer=new o(e),this._deflate=this._packer.createDeflate(),this.readable=!0;};i.inherits(s,n),s.prototype.pack=function(t,e,i,n){this.emit("data",new r(a.PNG_SIGNATURE)),this.emit("data",this._packer.packIHDR(e,i)),n&&this.emit("data",this._packer.packGAMA(n));var o=this._packer.filterData(t,e,i);this._deflate.on("error",this.emit.bind(this,"error")),this._deflate.on("data",function(t){this.emit("data",this._packer.packIDAT(t));}.bind(this)),this._deflate.on("end",function(){this.emit("data",this._packer.packIEND()),this.emit("end");}.bind(this)),this._deflate.end(o);};}).call(this,t("buffer").Buffer);},{"./constants":113,"./packer":123,buffer:48,stream:155,util:186}],122:[function(t,e,r){(function(r){"use strict";var i=!0,n=t("zlib");n.deflateSync||(i=!1);var a=t("./constants"),o=t("./packer");e.exports=function(t,e){if(!i)throw new Error("To use the sync capability of this library in old node versions, please pin pngjs to v2.3.0");var s=e||{},u=new o(s),h=[];h.push(new r(a.PNG_SIGNATURE)),h.push(u.packIHDR(t.width,t.height)),t.gamma&&h.push(u.packGAMA(t.gamma));var l=u.filterData(t.data,t.width,t.height),f=n.deflateSync(l,u.getDeflateOptions());if(l=null,!f||!f.length)throw new Error("bad png - invalid compressed data response");return h.push(u.packIDAT(f)),h.push(u.packIEND()),r.concat(h);};}).call(this,t("buffer").Buffer);},{"./constants":113,"./packer":123,buffer:48,zlib:35}],123:[function(t,e,r){(function(r){"use strict";var i=t("./constants"),n=t("./crc"),a=t("./bitpacker"),o=t("./filter-pack"),s=t("zlib"),u=e.exports=function(t){if(this._options=t,t.deflateChunkSize=t.deflateChunkSize||32768,t.deflateLevel=null!=t.deflateLevel?t.deflateLevel:9,t.deflateStrategy=null!=t.deflateStrategy?t.deflateStrategy:3,t.inputHasAlpha=null==t.inputHasAlpha||t.inputHasAlpha,t.deflateFactory=t.deflateFactory||s.createDeflate,t.bitDepth=t.bitDepth||8,t.colorType="number"==typeof t.colorType?t.colorType:i.COLORTYPE_COLOR_ALPHA,t.inputColorType="number"==typeof t.inputColorType?t.inputColorType:i.COLORTYPE_COLOR_ALPHA,-1===[i.COLORTYPE_GRAYSCALE,i.COLORTYPE_COLOR,i.COLORTYPE_COLOR_ALPHA,i.COLORTYPE_ALPHA].indexOf(t.colorType))throw new Error("option color type:"+t.colorType+" is not supported at present");if(-1===[i.COLORTYPE_GRAYSCALE,i.COLORTYPE_COLOR,i.COLORTYPE_COLOR_ALPHA,i.COLORTYPE_ALPHA].indexOf(t.inputColorType))throw new Error("option input color type:"+t.inputColorType+" is not supported at present");if(8!==t.bitDepth&&16!==t.bitDepth)throw new Error("option bit depth:"+t.bitDepth+" is not supported at present");};u.prototype.getDeflateOptions=function(){return{chunkSize:this._options.deflateChunkSize,level:this._options.deflateLevel,strategy:this._options.deflateStrategy};},u.prototype.createDeflate=function(){return this._options.deflateFactory(this.getDeflateOptions());},u.prototype.filterData=function(t,e,r){var n=a(t,e,r,this._options),s=i.COLORTYPE_TO_BPP_MAP[this._options.colorType],u=o(n,e,r,this._options,s);return u;},u.prototype._packChunk=function(t,e){var i=e?e.length:0,a=new r(i+12);return a.writeUInt32BE(i,0),a.writeUInt32BE(t,4),e&&e.copy(a,8),a.writeInt32BE(n.crc32(a.slice(4,a.length-4)),a.length-4),a;},u.prototype.packGAMA=function(t){var e=new r(4);return e.writeUInt32BE(Math.floor(t*i.GAMMA_DIVISION),0),this._packChunk(i.TYPE_gAMA,e);},u.prototype.packIHDR=function(t,e){var n=new r(13);return n.writeUInt32BE(t,0),n.writeUInt32BE(e,4),n[8]=this._options.bitDepth,n[9]=this._options.colorType,n[10]=0,n[11]=0,n[12]=0,this._packChunk(i.TYPE_IHDR,n);},u.prototype.packIDAT=function(t){return this._packChunk(i.TYPE_IDAT,t);},u.prototype.packIEND=function(){return this._packChunk(i.TYPE_IEND,null);};}).call(this,t("buffer").Buffer);},{"./bitpacker":111,"./constants":113,"./crc":114,"./filter-pack":115,buffer:48,zlib:35}],124:[function(t,e,r){"use strict";e.exports=function(t,e,r){var i=t+e-r,n=Math.abs(i-t),a=Math.abs(i-e),o=Math.abs(i-r);return n<=a&&n<=o?t:a<=o?e:r;};},{}],125:[function(t,e,r){"use strict";var i=t("util"),n=t("zlib"),a=t("./chunkstream"),o=t("./filter-parse-async"),s=t("./parser"),u=t("./bitmapper"),h=t("./format-normaliser"),l=e.exports=function(t){a.call(this),this._parser=new s(t,{read:this.read.bind(this),error:this._handleError.bind(this),metadata:this._handleMetaData.bind(this),gamma:this.emit.bind(this,"gamma"),palette:this._handlePalette.bind(this),transColor:this._handleTransColor.bind(this),finished:this._finished.bind(this),inflateData:this._inflateData.bind(this)}),this._options=t,this.writable=!0,this._parser.start();};i.inherits(l,a),l.prototype._handleError=function(t){this.emit("error",t),this.writable=!1,this.destroy(),this._inflate&&this._inflate.destroy&&this._inflate.destroy(),this._filter&&(this._filter.destroy(),this._filter.on("error",function(){})),this.errord=!0;},l.prototype._inflateData=function(t){if(!this._inflate)if(this._bitmapInfo.interlace)this._inflate=n.createInflate(),this._inflate.on("error",this.emit.bind(this,"error")),this._filter.on("complete",this._complete.bind(this)),this._inflate.pipe(this._filter);else{var e=1+(this._bitmapInfo.width*this._bitmapInfo.bpp*this._bitmapInfo.depth+7>>3),r=e*this._bitmapInfo.height,i=Math.max(r,n.Z_MIN_CHUNK);this._inflate=n.createInflate({chunkSize:i});var a=r,o=this.emit.bind(this,"error");this._inflate.on("error",function(t){a&&o(t);}),this._filter.on("complete",this._complete.bind(this));var s=this._filter.write.bind(this._filter);this._inflate.on("data",function(t){a&&(t.length>a&&(t=t.slice(0,a)),a-=t.length,s(t));}),this._inflate.on("end",this._filter.end.bind(this._filter));}this._inflate.write(t);},l.prototype._handleMetaData=function(t){this.emit("metadata",t),this._bitmapInfo=Object.create(t),this._filter=new o(this._bitmapInfo);},l.prototype._handleTransColor=function(t){this._bitmapInfo.transColor=t;},l.prototype._handlePalette=function(t){this._bitmapInfo.palette=t;},l.prototype._finished=function(){this.errord||(this._inflate?this._inflate.end():this.emit("error","No Inflate block"),this.destroySoon());},l.prototype._complete=function(t){if(!this.errord){try{var e=u.dataToBitMap(t,this._bitmapInfo),r=h(e,this._bitmapInfo);e=null;}catch(t){return void this._handleError(t);}this.emit("parsed",r);}};},{"./bitmapper":110,"./chunkstream":112,"./filter-parse-async":116,"./format-normaliser":119,"./parser":127,util:186,zlib:35}],126:[function(t,e,r){(function(r){"use strict";var i=!0,n=t("zlib"),a=t("./sync-inflate");n.deflateSync||(i=!1);var o=t("./sync-reader"),s=t("./filter-parse-sync"),u=t("./parser"),h=t("./bitmapper"),l=t("./format-normaliser");e.exports=function(t,e){function f(t){g=t;}function c(t){_=t;}function d(t){_.transColor=t;}function p(t){_.palette=t;}function m(t){v=t;}function b(t){y.push(t);}if(!i)throw new Error("To use the sync capability of this library in old node versions, please pin pngjs to v2.3.0");var g,_,v,y=[],w=new o(t),E=new u(e,{read:w.read.bind(w),error:f,metadata:c,gamma:m,palette:p,transColor:d,inflateData:b});if(E.start(),w.process(),g)throw g;var x,S=r.concat(y);if(y.length=0,_.interlace)x=n.inflateSync(S);else{var k=1+(_.width*_.bpp*_.depth+7>>3),M=k*_.height;x=a(S,{chunkSize:M,maxLength:M});}if(S=null,!x||!x.length)throw new Error("bad png - invalid inflate data response");var A=s.process(x,_);S=null;var I=h.dataToBitMap(A,_);A=null;var T=l(I,_);return _.data=T,_.gamma=v||0,_;};}).call(this,t("buffer").Buffer);},{"./bitmapper":110,"./filter-parse-sync":117,"./format-normaliser":119,"./parser":127,"./sync-inflate":130,"./sync-reader":131,buffer:48,zlib:35}],127:[function(t,e,r){(function(r){"use strict";var i=t("./constants"),n=t("./crc"),a=e.exports=function(t,e){this._options=t,t.checkCRC=!1!==t.checkCRC,this._hasIHDR=!1,this._hasIEND=!1,this._palette=[],this._colorType=0,this._chunks={},this._chunks[i.TYPE_IHDR]=this._handleIHDR.bind(this),this._chunks[i.TYPE_IEND]=this._handleIEND.bind(this),this._chunks[i.TYPE_IDAT]=this._handleIDAT.bind(this),this._chunks[i.TYPE_PLTE]=this._handlePLTE.bind(this),this._chunks[i.TYPE_tRNS]=this._handleTRNS.bind(this),this._chunks[i.TYPE_gAMA]=this._handleGAMA.bind(this),this.read=e.read,this.error=e.error,this.metadata=e.metadata,this.gamma=e.gamma,this.transColor=e.transColor,this.palette=e.palette,this.parsed=e.parsed,this.inflateData=e.inflateData,this.finished=e.finished;};a.prototype.start=function(){this.read(i.PNG_SIGNATURE.length,this._parseSignature.bind(this));},a.prototype._parseSignature=function(t){for(var e=i.PNG_SIGNATURE,r=0;rthis._palette.length)return void this.error(new Error("More transparent colors than palette size"));for(var e=0;e0?this._handleIDAT(r):this._handleChunkEnd();},a.prototype._handleIEND=function(t){this.read(t,this._parseIEND.bind(this));},a.prototype._parseIEND=function(t){this._crc.write(t),this._hasIEND=!0,this._handleChunkEnd(),this.finished&&this.finished();};}).call(this,t("buffer").Buffer);},{"./constants":113,"./crc":114,buffer:48}],128:[function(t,e,r){"use strict";var i=t("./parser-sync"),n=t("./packer-sync");r.read=function(t,e){return i(t,e||{});},r.write=function(t,e){return n(t,e);};},{"./packer-sync":122,"./parser-sync":126}],129:[function(t,e,r){(function(e,i){"use strict";var n=t("util"),a=t("stream"),o=t("./parser-async"),s=t("./packer-async"),u=t("./png-sync"),h=r.PNG=function(t){a.call(this),t=t||{},this.width=0|t.width,this.height=0|t.height,this.data=this.width>0&&this.height>0?new i(4*this.width*this.height):null,t.fill&&this.data&&this.data.fill(0),this.gamma=0,this.readable=this.writable=!0,this._parser=new o(t),this._parser.on("error",this.emit.bind(this,"error")),this._parser.on("close",this._handleClose.bind(this)),this._parser.on("metadata",this._metadata.bind(this)),this._parser.on("gamma",this._gamma.bind(this)),this._parser.on("parsed",function(t){this.data=t,this.emit("parsed",t);}.bind(this)),this._packer=new s(t),this._packer.on("data",this.emit.bind(this,"data")),this._packer.on("end",this.emit.bind(this,"end")),this._parser.on("close",this._handleClose.bind(this)),this._packer.on("error",this.emit.bind(this,"error"));};n.inherits(h,a),h.sync=u,h.prototype.pack=function(){return this.data&&this.data.length?(e.nextTick(function(){this._packer.pack(this.data,this.width,this.height,this.gamma);}.bind(this)),this):(this.emit("error","No data provided"),this);},h.prototype.parse=function(t,e){var r,i;e&&(r=function(t){this.removeListener("error",i),this.data=t,e(null,this);}.bind(this),i=function(t){this.removeListener("parsed",r),e(t,null);}.bind(this),this.once("parsed",r),this.once("error",i));return this.end(t),this;},h.prototype.write=function(t){return this._parser.write(t),!0;},h.prototype.end=function(t){this._parser.end(t);},h.prototype._metadata=function(t){this.width=t.width,this.height=t.height,this.emit("metadata",t);},h.prototype._gamma=function(t){this.gamma=t;},h.prototype._handleClose=function(){this._parser.writable||this._packer.readable||this.emit("close");},h.bitblt=function(t,e,r,i,n,a,o,s){if(r|=0,i|=0,n|=0,a|=0,o|=0,s|=0,r>t.width||i>t.height||r+n>t.width||i+a>t.height)throw new Error("bitblt reading outside image");if(o>e.width||s>e.height||o+n>e.width||s+a>e.height)throw new Error("bitblt writing outside image");for(var u=0;u=0,"have should not go down"),r>0){var i=o._buffer.slice(o._offset,o._offset+r);if(o._offset+=r,i.length>c&&(i=i.slice(0,c)),m.push(i),b+=i.length,c-=i.length,0===c)return!1;}return(0===e||o._offset>=o._chunkSize)&&(h=o._chunkSize,o._offset=0,o._buffer=n.allocUnsafe(o._chunkSize)),0===e&&(p+=u-t,u=t,!0);}}if("function"==typeof r)return f.Inflate._processChunk.call(this,t,e,r);var a,o=this,u=t&&t.length,h=this._chunkSize-this._offset,c=this._maxLength,p=0,m=[],b=0;this.on("error",function(t){a=t;}),l(this._handle,"zlib binding closed");do{var g=this._handle.writeSync(e,t,p,u,this._buffer,this._offset,h);g=g||this._writeState;}while(!this._hadError&&i(g[0],g[1]));if(this._hadError)throw a;if(b>=d)throw s(this),new RangeError("Cannot create final Buffer. It would be larger than 0x"+d.toString(16)+" bytes");var _=n.concat(m,b);return s(this),_;},c.inherits(a,f.Inflate),e.exports=r=h,r.Inflate=a,r.createInflate=o,r.inflateSync=h;}).call(this,t("_process"),t("buffer").Buffer);},{_process:133,assert:25,buffer:48,util:186,zlib:35}],131:[function(t,e,r){"use strict";var i=e.exports=function(t){this._buffer=t,this._reads=[];};i.prototype.read=function(t,e){this._reads.push({length:Math.abs(t),allowLess:t<0,func:e});},i.prototype.process=function(){for(;this._reads.length>0&&this._buffer.length;){var t=this._reads[0];if(!this._buffer.length||!(this._buffer.length>=t.length||t.allowLess))break;this._reads.shift();var e=this._buffer;this._buffer=e.slice(t.length),t.func.call(this,e.slice(0,t.length));}return this._reads.length>0?new Error("There are some read requests waitng on finished stream"):this._buffer.length>0?new Error("unrecognised content at end of stream"):void 0;};},{}],132:[function(t,e,r){(function(t){"use strict";function r(e,r,i,n){if("function"!=typeof e)throw new TypeError('"callback" argument must be a function');var a,o,s=arguments.length;switch(s){case 0:case 1:return t.nextTick(e);case 2:return t.nextTick(function(){e.call(null,r);});case 3:return t.nextTick(function(){e.call(null,r,i);});case 4:return t.nextTick(function(){e.call(null,r,i,n);});default:for(a=new Array(s-1),o=0;o1)for(var r=1;r1&&(i=r[0]+"@",t=r[1]),t=t.replace(O,".");var n=t.split("."),a=o(n,e).join(".");return i+a;}function u(t){for(var e,r,i=[],n=0,a=t.length;n=55296&&e<=56319&&n65535&&(t-=65536,e+=N(t>>>10&1023|55296),t=56320|1023&t),e+=N(t),e;}).join("");}function l(t){return t-48<10?t-22:t-65<26?t-65:t-97<26?t-97:x;}function f(t,e){return t+22+75*(t<26)-((0!=e)<<5);}function c(t,e,r){var i=0;for(t=r?D(t/A):t>>1,t+=D(t/e);t>B*k>>1;i+=x)t=D(t/B);return D(i+(B+1)*t/(t+M));}function d(t){var e,r,i,n,o,s,u,f,d,p,m=[],b=t.length,g=0,_=T,v=I;for(r=t.lastIndexOf(R),r<0&&(r=0),i=0;i=128&&a("not-basic"),m.push(t.charCodeAt(i));for(n=r>0?r+1:0;n=b&&a("invalid-input"),f=l(t.charCodeAt(n++)),(f>=x||f>D((E-g)/s))&&a("overflow"),g+=f*s,d=u<=v?S:u>=v+k?k:u-v,!(fD(E/p)&&a("overflow"),s*=p;e=m.length+1,v=c(g-o,e,0==o),D(g/e)>E-_&&a("overflow"),_+=D(g/e),g%=e,m.splice(g++,0,_);}return h(m);}function p(t){var e,r,i,n,o,s,h,l,d,p,m,b,g,_,v,y=[];for(t=u(t),b=t.length,e=T,r=0,o=I,s=0;s=e&&mD((E-r)/g)&&a("overflow"),r+=(h-e)*g,e=h,s=0;sE&&a("overflow"),m==e){for(l=r,d=x;p=d<=o?S:d>=o+k?k:d-o,!(l= 0x80 (not a basic code point)","invalid-input":"Invalid input"},B=x-S,D=Math.floor,N=String.fromCharCode;if(y={version:"1.4.1",ucs2:{decode:u,encode:h},decode:d,encode:p,toASCII:b,toUnicode:m},"function"==typeof t&&"object"==typeof t.amd&&t.amd)t("punycode",function(){return y;});else if(g&&_){if(r.exports==g)_.exports=y;else for(w in y)y.hasOwnProperty(w)&&(g[w]=y[w]);}else n.punycode=y;})(this);}).call(this,"undefined"!=typeof __webpack_require__.g?__webpack_require__.g:"undefined"!=typeof self?self:void 0!==window?window:{});},{}],135:[function(t,e,r){"use strict";function i(t,e){return Object.prototype.hasOwnProperty.call(t,e);}e.exports=function(t,e,r,a){e=e||"&",r=r||"=";var o={};if("string"!=typeof t||0===t.length)return o;var s=/\+/g;t=t.split(e);var u=1e3;a&&"number"==typeof a.maxKeys&&(u=a.maxKeys);var h=t.length;u>0&&h>u&&(h=u);for(var l=0;l=0?(f=m.substr(0,b),c=m.substr(b+1)):(f=m,c=""),d=decodeURIComponent(f),p=decodeURIComponent(c),i(o,d)?n(o[d])?o[d].push(p):o[d]=[o[d],p]:o[d]=p;}return o;};var n=Array.isArray||function(t){return"[object Array]"===Object.prototype.toString.call(t);};},{}],136:[function(t,e,r){"use strict";function i(t,e){if(t.map)return t.map(e);for(var r=[],i=0;i0?("string"==typeof e||s.objectMode||Object.getPrototypeOf(e)===N.prototype||(e=n(e)),i?s.endEmitted?t.emit("error",new Error("stream.unshift() after end event")):l(t,s,e,!0):s.ended?t.emit("error",new Error("stream.push() after EOF")):(s.reading=!1,s.decoder&&!r?(e=s.decoder.write(e),s.objectMode||0!==e.length?l(t,s,e,!1):_(t,s)):l(t,s,e,!1))):i||(s.reading=!1));return c(s);}function l(t,e,r,i){e.flowing&&0===e.length&&!e.sync?(t.emit("data",r),t.read(0)):(e.length+=e.objectMode?1:r.length,i?e.buffer.unshift(r):e.buffer.push(r),e.needReadable&&b(t)),_(t,e);}function f(t,e){var r;return a(e)||"string"==typeof e||void 0===e||t.objectMode||(r=new TypeError("Invalid non-string/buffer chunk")),r;}function c(t){return!t.ended&&(t.needReadable||t.length=Z?t=Z:(t--,t|=t>>>1,t|=t>>>2,t|=t>>>4,t|=t>>>8,t|=t>>>16,t++),t;}function p(t,e){return t<=0||0===e.length&&e.ended?0:e.objectMode?1:t!=t?e.flowing&&e.length?e.buffer.head.data.length:e.length:(t>e.highWaterMark&&(e.highWaterMark=d(t)),t<=e.length?t:e.ended?e.length:(e.needReadable=!0,0));}function m(t,e){if(!e.ended){if(e.decoder){var r=e.decoder.end();r&&r.length&&(e.buffer.push(r),e.length+=e.objectMode?1:r.length);}e.ended=!0,b(t);}}function b(t){var e=t._readableState;e.needReadable=!1,e.emittedReadable||(F("emitReadable",e.flowing),e.emittedReadable=!0,e.sync?C.nextTick(g,t):g(t));}function g(t){F("emit readable"),t.emit("readable"),S(t);}function _(t,e){e.readingMore||(e.readingMore=!0,C.nextTick(v,t,e));}function v(t,e){for(var r=e.length;!e.reading&&!e.flowing&&!e.ended&&e.length=e.length?(r=e.decoder?e.buffer.join(""):1===e.buffer.length?e.buffer.head.data:e.buffer.concat(e.length),e.buffer.clear()):r=M(t,e.buffer,e.decoder),r);var r;}function M(t,e,r){var i;return ta.length?a.length:t;if(o===a.length?n+=a:n+=a.slice(0,t),t-=o,0===t){o===a.length?(++i,r.next?e.head=r.next:e.head=e.tail=null):(e.head=r,r.data=a.slice(o));break;}++i;}return e.length-=i,n;}function I(t,e){var r=N.allocUnsafe(t),i=e.head,n=1;for(i.data.copy(r),t-=i.data.length;i=i.next;){var a=i.data,o=t>a.length?a.length:t;if(a.copy(r,r.length-t,0,o),t-=o,0===t){o===a.length?(++n,i.next?e.head=i.next:e.head=e.tail=null):(e.head=i,i.data=a.slice(o));break;}++n;}return e.length-=n,r;}function T(t){var e=t._readableState;if(e.length>0)throw new Error('"endReadable()" called on non-empty stream');e.endEmitted||(e.ended=!0,C.nextTick(R,e,t));}function R(t,e){t.endEmitted||0!==t.length||(t.endEmitted=!0,e.readable=!1,e.emit("end"));}function P(t,e){for(var r=0,i=t.length;r=e.highWaterMark||e.ended))return F("read: emitReadable",e.length,e.ended),0===e.length&&e.ended?T(this):b(this),null;if(t=p(t,e),0===t&&e.ended)return 0===e.length&&T(this),null;var i,n=e.needReadable;return F("need readable",n),(0===e.length||e.length-t0?k(t,e):null,null===i?(e.needReadable=!0,t=0):e.length-=t,0===e.length&&(e.ended||(e.needReadable=!0),r!==t&&e.ended&&T(this)),null!==i&&this.emit("data",i),i;},u.prototype._read=function(t){this.emit("error",new Error("_read() is not implemented"));},u.prototype.pipe=function(t,e){function i(t,e){F("onunpipe"),t===c&&e&&!1===e.hasUnpiped&&(e.hasUnpiped=!0,a());}function n(){F("onend"),t.end();}function a(){F("cleanup"),t.removeListener("close",h),t.removeListener("finish",l),t.removeListener("drain",b),t.removeListener("error",u),t.removeListener("unpipe",i),c.removeListener("end",n),c.removeListener("end",f),c.removeListener("data",s),g=!0,!d.awaitDrain||t._writableState&&!t._writableState.needDrain||b();}function s(e){F("ondata"),_=!1;var r=t.write(e);!1!==r||_||((1===d.pipesCount&&d.pipes===t||d.pipesCount>1&&-1!==P(d.pipes,t))&&!g&&(F("false write response, pause",c._readableState.awaitDrain),c._readableState.awaitDrain++,_=!0),c.pause());}function u(e){F("onerror",e),f(),t.removeListener("error",u),0===B(t,"error")&&t.emit("error",e);}function h(){t.removeListener("finish",l),f();}function l(){F("onfinish"),t.removeListener("close",h),f();}function f(){F("unpipe"),c.unpipe(t);}var c=this,d=this._readableState;switch(d.pipesCount){case 0:d.pipes=t;break;case 1:d.pipes=[d.pipes,t];break;default:d.pipes.push(t);}d.pipesCount+=1,F("pipe count=%d opts=%j",d.pipesCount,e);var p=(!e||!1!==e.end)&&t!==r.stdout&&t!==r.stderr,m=p?n:f;d.endEmitted?C.nextTick(m):c.once("end",m),t.on("unpipe",i);var b=y(c);t.on("drain",b);var g=!1,_=!1;return c.on("data",s),o(t,"error",u),t.once("close",h),t.once("finish",l),t.emit("pipe",c),d.flowing||(F("pipe resume"),c.resume()),t;},u.prototype.unpipe=function(t){var e=this._readableState,r={hasUnpiped:!1};if(0===e.pipesCount)return this;if(1===e.pipesCount)return t&&t!==e.pipes?this:(t||(t=e.pipes),e.pipes=null,e.pipesCount=0,e.flowing=!1,t&&t.emit("unpipe",this,r),this);if(!t){var i=e.pipes,n=e.pipesCount;e.pipes=null,e.pipesCount=0,e.flowing=!1;for(var a=0;a-1?n:I.nextTick;l.WritableState=h;var P=t("core-util-is");P.inherits=t("inherits");var C,O={deprecate:t("util-deprecate")},L=t("./internal/streams/stream"),B=t("safe-buffer").Buffer,D=i.Uint8Array||function(){},N=t("./internal/streams/destroy");P.inherits(l,L),h.prototype.getBuffer=function(){for(var t=this.bufferedRequest,e=[];t;)e.push(t),t=t.next;return e;},function(){try{Object.defineProperty(h.prototype,"buffer",{get:O.deprecate(function(){return this.getBuffer();},"_writableState.buffer is deprecated. Use _writableState.getBuffer instead.","DEP0003")});}catch(t){}}(),"function"==typeof Symbol&&Symbol.hasInstance&&"function"==typeof Function.prototype[Symbol.hasInstance]?(C=Function.prototype[Symbol.hasInstance],Object.defineProperty(l,Symbol.hasInstance,{value:function(t){return!!C.call(this,t)||this===l&&t&&t._writableState instanceof h;}})):C=function(t){return t instanceof this;},l.prototype.pipe=function(){this.emit("error",new Error("Cannot pipe, not readable"));},l.prototype.write=function(t,e,r){var i=this._writableState,n=!1,a=!i.objectMode&&s(t);return a&&!B.isBuffer(t)&&(t=o(t)),"function"==typeof e&&(r=e,e=null),a?e="buffer":e||(e=i.defaultEncoding),"function"!=typeof r&&(r=u),i.ended?f(this,r):(a||c(this,i,t,r))&&(i.pendingcb++,n=p(this,i,a,t,e,r)),n;},l.prototype.cork=function(){var t=this._writableState;t.corked++;},l.prototype.uncork=function(){var t=this._writableState;t.corked&&(t.corked--,t.writing||t.corked||t.finished||t.bufferProcessing||!t.bufferedRequest||w(this,t));},l.prototype.setDefaultEncoding=function(t){if("string"==typeof t&&(t=t.toLowerCase()),!(["hex","utf8","utf-8","ascii","binary","base64","ucs2","ucs-2","utf16le","utf-16le","raw"].indexOf((t+"").toLowerCase())>-1))throw new TypeError("Unknown encoding: "+t);return this._writableState.defaultEncoding=t,this;},Object.defineProperty(l.prototype,"writableHighWaterMark",{enumerable:!1,get:function(){return this._writableState.highWaterMark;}}),l.prototype._write=function(t,e,r){r(new Error("_write() is not implemented"));},l.prototype._writev=null,l.prototype.end=function(t,e,r){var i=this._writableState;"function"==typeof t?(r=t,t=null,e=null):"function"==typeof e&&(r=e,e=null),null!=t&&this.write(t,e),i.corked&&(i.corked=1,this.uncork()),i.ending||i.finished||M(this,i,r);},Object.defineProperty(l.prototype,"destroyed",{get:function(){return void 0!==this._writableState&&this._writableState.destroyed;},set:function(t){this._writableState&&(this._writableState.destroyed=t);}}),l.prototype.destroy=N.destroy,l.prototype._undestroy=N.undestroy,l.prototype._destroy=function(t,e){this.end(),e(t);};}).call(this,t("_process"),"undefined"!=typeof __webpack_require__.g?__webpack_require__.g:"undefined"!=typeof self?self:void 0!==window?window:{},t("timers").setImmediate);},{"./_stream_duplex":139,"./internal/streams/destroy":145,"./internal/streams/stream":146,_process:133,"core-util-is":51,inherits:75,"process-nextick-args":132,"safe-buffer":147,timers:176,"util-deprecate":183}],144:[function(t,e,r){"use strict";function i(t,e){if(!(t instanceof e))throw new TypeError("Cannot call a class as a function");}function n(t,e,r){t.copy(e,r);}var a=t("safe-buffer").Buffer,o=t("util");e.exports=function(){function t(){i(this,t),this.head=null,this.tail=null,this.length=0;}return t.prototype.push=function(t){var e={data:t,next:null};this.length>0?this.tail.next=e:this.head=e,this.tail=e,++this.length;},t.prototype.unshift=function(t){var e={data:t,next:this.head};0===this.length&&(this.tail=e),this.head=e,++this.length;},t.prototype.shift=function(){if(0!==this.length){var t=this.head.data;return 1===this.length?this.head=this.tail=null:this.head=this.head.next,--this.length,t;}},t.prototype.clear=function(){this.head=this.tail=null,this.length=0;},t.prototype.join=function(t){if(0===this.length)return"";for(var e=this.head,r=""+e.data;e=e.next;)r+=t+e.data;return r;},t.prototype.concat=function(t){if(0===this.length)return a.alloc(0);if(1===this.length)return this.head.data;for(var e=a.allocUnsafe(t>>>0),r=this.head,i=0;r;)n(r.data,e,i),i+=r.data.length,r=r.next;return e;},t;}(),o&&o.inspect&&o.inspect.custom&&(e.exports.prototype[o.inspect.custom]=function(){var t=o.inspect({length:this.length});return this.constructor.name+" "+t;});},{"safe-buffer":147,util:33}],145:[function(t,e,r){"use strict";function i(t,e){var r=this,i=this._readableState&&this._readableState.destroyed,n=this._writableState&&this._writableState.destroyed;return i||n?(e?e(t):!t||this._writableState&&this._writableState.errorEmitted||o.nextTick(a,this,t),this):(this._readableState&&(this._readableState.destroyed=!0),this._writableState&&(this._writableState.destroyed=!0),this._destroy(t||null,function(t){!e&&t?(o.nextTick(a,r,t),r._writableState&&(r._writableState.errorEmitted=!0)):e&&e(t);}),this);}function n(){this._readableState&&(this._readableState.destroyed=!1,this._readableState.reading=!1,this._readableState.ended=!1,this._readableState.endEmitted=!1),this._writableState&&(this._writableState.destroyed=!1,this._writableState.ended=!1,this._writableState.ending=!1,this._writableState.finished=!1,this._writableState.errorEmitted=!1);}function a(t,e){t.emit("error",e);}var o=t("process-nextick-args");e.exports={destroy:i,undestroy:n};},{"process-nextick-args":132}],146:[function(t,e,r){e.exports=t("events").EventEmitter;},{events:52}],147:[function(t,e,r){function i(t,e){for(var r in t)e[r]=t[r];}function n(t,e,r){return o(t,e,r);}var a=t("buffer"),o=a.Buffer;o.from&&o.alloc&&o.allocUnsafe&&o.allocUnsafeSlow?e.exports=a:(i(a,r),r.Buffer=n),i(o,n),n.from=function(t,e,r){if("number"==typeof t)throw new TypeError("Argument must not be a number");return o(t,e,r);},n.alloc=function(t,e,r){if("number"!=typeof t)throw new TypeError("Argument must be a number");var i=o(t);return void 0!==e?"string"==typeof r?i.fill(e,r):i.fill(e):i.fill(0),i;},n.allocUnsafe=function(t){if("number"!=typeof t)throw new TypeError("Argument must be a number");return o(t);},n.allocUnsafeSlow=function(t){if("number"!=typeof t)throw new TypeError("Argument must be a number");return a.SlowBuffer(t);};},{buffer:48}],148:[function(t,e,r){"use strict";function i(t){if(!t)return"utf8";for(var e;;)switch(t){case"utf8":case"utf-8":return"utf8";case"ucs2":case"ucs-2":case"utf16le":case"utf-16le":return"utf16le";case"latin1":case"binary":return"latin1";case"base64":case"ascii":case"hex":return t;default:if(e)return;t=(""+t).toLowerCase(),e=!0;}}function n(t){var e=i(t);if("string"!=typeof e&&(_.isEncoding===v||!v(t)))throw new Error("Unknown encoding: "+t);return e||t;}function a(t){var e;switch(this.encoding=n(t),this.encoding){case"utf16le":this.text=c,this.end=d,e=4;break;case"utf8":this.fillLast=h,e=4;break;case"base64":this.text=p,this.end=m,e=3;break;default:return this.write=b,void(this.end=g);}this.lastNeed=0,this.lastTotal=0,this.lastChar=_.allocUnsafe(e);}function o(t){return t<=127?0:t>>5==6?2:t>>4==14?3:t>>3==30?4:t>>6==2?-1:-2;}function s(t,e,r){var i=e.length-1;if(i=0?(n>0&&(t.lastNeed=n-1),n):--i=0?(n>0&&(t.lastNeed=n-2),n):--i=0?(n>0&&(2===n?n=0:t.lastNeed=n-3),n):0));}function u(t,e,r){if(128!=(192&e[0]))return t.lastNeed=0,"�";if(t.lastNeed>1&&e.length>1){if(128!=(192&e[1]))return t.lastNeed=1,"�";if(t.lastNeed>2&&e.length>2&&128!=(192&e[2]))return t.lastNeed=2,"�";}}function h(t){var e=this.lastTotal-this.lastNeed,r=u(this,t,e);return void 0!==r?r:this.lastNeed<=t.length?(t.copy(this.lastChar,e,0,this.lastNeed),this.lastChar.toString(this.encoding,0,this.lastTotal)):(t.copy(this.lastChar,e,0,t.length),void(this.lastNeed-=t.length));}function l(t,e){var r=s(this,t,e);if(!this.lastNeed)return t.toString("utf8",e);this.lastTotal=r;var i=t.length-(r-this.lastNeed);return t.copy(this.lastChar,0,i),t.toString("utf8",e,i);}function f(t){var e=t&&t.length?this.write(t):"";return this.lastNeed?e+"�":e;}function c(t,e){if((t.length-e)%2==0){var r=t.toString("utf16le",e);if(r){var i=r.charCodeAt(r.length-1);if(i>=55296&&i<=56319)return this.lastNeed=2,this.lastTotal=4,this.lastChar[0]=t[t.length-2],this.lastChar[1]=t[t.length-1],r.slice(0,-1);}return r;}return this.lastNeed=1,this.lastTotal=2,this.lastChar[0]=t[t.length-1],t.toString("utf16le",e,t.length-1);}function d(t){var e=t&&t.length?this.write(t):"";if(this.lastNeed){var r=this.lastTotal-this.lastNeed;return e+this.lastChar.toString("utf16le",0,r);}return e;}function p(t,e){var r=(t.length-e)%3;return 0===r?t.toString("base64",e):(this.lastNeed=3-r,this.lastTotal=3,1===r?this.lastChar[0]=t[t.length-1]:(this.lastChar[0]=t[t.length-2],this.lastChar[1]=t[t.length-1]),t.toString("base64",e,t.length-r));}function m(t){var e=t&&t.length?this.write(t):"";return this.lastNeed?e+this.lastChar.toString("base64",0,3-this.lastNeed):e;}function b(t){return t.toString(this.encoding);}function g(t){return t&&t.length?this.write(t):"";}var _=t("safe-buffer").Buffer,v=_.isEncoding||function(t){switch(t=""+t,t&&t.toLowerCase()){case"hex":case"utf8":case"utf-8":case"ascii":case"binary":case"base64":case"ucs2":case"ucs-2":case"utf16le":case"utf-16le":case"raw":return!0;default:return!1;}};r.StringDecoder=a,a.prototype.write=function(t){if(0===t.length)return"";var e,r;if(this.lastNeed){if(e=this.fillLast(t),void 0===e)return"";r=this.lastNeed,this.lastNeed=0;}else r=0;return r=0;--i){var n=this.tryEntries[i],a=n.completion;if("root"===n.tryLoc)return e("end");if(n.tryLoc<=this.prev){var o=g.call(n,"catchLoc"),s=g.call(n,"finallyLoc");if(o&&s){if(this.prev=0;--r){var i=this.tryEntries[r];if(i.tryLoc<=this.prev&&g.call(i,"finallyLoc")&&this.prev=0;--e){var r=this.tryEntries[e];if(r.finallyLoc===t)return this.complete(r.completion,r.afterLoc),f(r),M;}},catch:function(t){for(var e=this.tryEntries.length-1;e>=0;--e){var r=this.tryEntries[e];if(r.tryLoc===t){var i=r.completion;if("throw"===i.type){var n=i.arg;f(r);}return n;}}throw new Error("illegal catch attempt");},delegateYield:function(t,e,r){return this.delegate={iterator:d(t),resultName:e,nextLoc:r},"next"===this.method&&(this.arg=m),M;}},t;}("object"==typeof e?e.exports:{});try{regeneratorRuntime=i;}catch(t){Function("r","regeneratorRuntime = r")(i);}},{}],154:[function(t,e,r){function i(t,e){for(var r in t)e[r]=t[r];}function n(t,e,r){return o(t,e,r);}var a=t("buffer"),o=a.Buffer;o.from&&o.alloc&&o.allocUnsafe&&o.allocUnsafeSlow?e.exports=a:(i(a,r),r.Buffer=n),n.prototype=Object.create(o.prototype),i(o,n),n.from=function(t,e,r){if("number"==typeof t)throw new TypeError("Argument must not be a number");return o(t,e,r);},n.alloc=function(t,e,r){if("number"!=typeof t)throw new TypeError("Argument must be a number");var i=o(t);return void 0!==e?"string"==typeof r?i.fill(e,r):i.fill(e):i.fill(0),i;},n.allocUnsafe=function(t){if("number"!=typeof t)throw new TypeError("Argument must be a number");return o(t);},n.allocUnsafeSlow=function(t){if("number"!=typeof t)throw new TypeError("Argument must be a number");return a.SlowBuffer(t);};},{buffer:48}],155:[function(t,e,r){function i(){n.call(this);}e.exports=i;var n=t("events").EventEmitter,a=t("inherits");a(i,n),i.Readable=t("readable-stream/readable.js"),i.Writable=t("readable-stream/writable.js"),i.Duplex=t("readable-stream/duplex.js"),i.Transform=t("readable-stream/transform.js"),i.PassThrough=t("readable-stream/passthrough.js"),i.Stream=i,i.prototype.pipe=function(t,e){function r(e){t.writable&&!1===t.write(e)&&h.pause&&h.pause();}function i(){h.readable&&h.resume&&h.resume();}function a(){l||(l=!0,t.end());}function o(){l||(l=!0,"function"==typeof t.destroy&&t.destroy());}function s(t){if(u(),0===n.listenerCount(this,"error"))throw t;}function u(){h.removeListener("data",r),t.removeListener("drain",i),h.removeListener("end",a),h.removeListener("close",o),h.removeListener("error",s),t.removeListener("error",s),h.removeListener("end",u),h.removeListener("close",u),t.removeListener("close",u);}var h=this;h.on("data",r),t.on("drain",i),t._isStdio||e&&!1===e.end||(h.on("end",a),h.on("close",o));var l=!1;return h.on("error",s),t.on("error",s),h.on("end",u),h.on("close",u),t.on("close",u),t.emit("pipe",h),t;};},{events:52,inherits:75,"readable-stream/duplex.js":138,"readable-stream/passthrough.js":149,"readable-stream/readable.js":150,"readable-stream/transform.js":151,"readable-stream/writable.js":152}],156:[function(t,e,r){(function(e){var i=t("./lib/request"),n=t("./lib/response"),a=t("xtend"),o=t("builtin-status-codes"),s=t("url"),u=r;u.request=function(t,r){t="string"==typeof t?s.parse(t):a(t);var n=-1===e.location.protocol.search(/^https?:$/)?"http:":"",o=t.protocol||n,u=t.hostname||t.host,h=t.port,l=t.path||"/";u&&-1!==u.indexOf(":")&&(u="["+u+"]"),t.url=(u?o+"//"+u:"")+(h?":"+h:"")+l,t.method=(t.method||"GET").toUpperCase(),t.headers=t.headers||{};var f=new i(t);return r&&f.on("response",r),f;},u.get=function(t,e){var r=u.request(t,e);return r.end(),r;},u.ClientRequest=i,u.IncomingMessage=n.IncomingMessage,u.Agent=function(){},u.Agent.defaultMaxSockets=4,u.globalAgent=new u.Agent(),u.STATUS_CODES=o,u.METHODS=["CHECKOUT","CONNECT","COPY","DELETE","GET","HEAD","LOCK","M-SEARCH","MERGE","MKACTIVITY","MKCOL","MOVE","NOTIFY","OPTIONS","PATCH","POST","PROPFIND","PROPPATCH","PURGE","PUT","REPORT","SEARCH","SUBSCRIBE","TRACE","UNLOCK","UNSUBSCRIBE"];}).call(this,"undefined"!=typeof __webpack_require__.g?__webpack_require__.g:"undefined"!=typeof self?self:void 0!==window?window:{});},{"./lib/request":158,"./lib/response":159,"builtin-status-codes":50,url:180,xtend:189}],157:[function(t,e,r){(function(t){function e(){if(void 0!==a)return a;if(t.XMLHttpRequest){a=new t.XMLHttpRequest();try{a.open("GET",t.XDomainRequest?"/":"https://example.com");}catch(t){a=null;}}else a=null;return a;}function i(t){var r=e();if(!r)return!1;try{return r.responseType=t,r.responseType===t;}catch(t){}return!1;}function n(t){return"function"==typeof t;}var a;r.fetch=n(t.fetch)&&n(t.ReadableStream),r.writableStream=n(t.WritableStream),r.abortController=n(t.AbortController),r.arraybuffer=r.fetch||i("arraybuffer"),r.msstream=!r.fetch&&i("ms-stream"),r.mozchunkedarraybuffer=!r.fetch&&i("moz-chunked-arraybuffer"),r.overrideMimeType=r.fetch||!!e()&&n(e().overrideMimeType),a=null;}).call(this,"undefined"!=typeof __webpack_require__.g?__webpack_require__.g:"undefined"!=typeof self?self:void 0!==window?window:{});},{}],158:[function(t,e,r){(function(r,i,n){function a(t,e){return s.fetch&&e?"fetch":s.mozchunkedarraybuffer?"moz-chunked-arraybuffer":s.msstream?"ms-stream":s.arraybuffer&&t?"arraybuffer":"text";}function o(t){try{var e=t.status;return null!==e&&0!==e;}catch(t){return!1;}}var s=t("./capability"),u=t("inherits"),h=t("./response"),l=t("readable-stream"),f=h.IncomingMessage,c=h.readyStates,d=e.exports=function(t){var e,r=this;l.Writable.call(r),r._opts=t,r._body=[],r._headers={},t.auth&&r.setHeader("Authorization","Basic "+n.from(t.auth).toString("base64")),Object.keys(t.headers).forEach(function(e){r.setHeader(e,t.headers[e]);});var i=!0;if("disable-fetch"===t.mode||"requestTimeout"in t&&!s.abortController)i=!1,e=!0;else if("prefer-streaming"===t.mode)e=!1;else if("allow-wrong-content-type"===t.mode)e=!s.overrideMimeType;else{if(t.mode&&"default"!==t.mode&&"prefer-fast"!==t.mode)throw new Error("Invalid value for opts.mode");e=!0;}r._mode=a(e,i),r._fetchTimer=null,r.on("finish",function(){r._onFinish();});};u(d,l.Writable),d.prototype.setHeader=function(t,e){var r=this,i=t.toLowerCase();-1===p.indexOf(i)&&(r._headers[i]={name:t,value:e});},d.prototype.getHeader=function(t){var e=this._headers[t.toLowerCase()];return e?e.value:null;},d.prototype.removeHeader=function(t){var e=this;delete e._headers[t.toLowerCase()];},d.prototype._onFinish=function(){var t=this;if(!t._destroyed){var e=t._opts,n=t._headers,a=null;"GET"!==e.method&&"HEAD"!==e.method&&(a=new Blob(t._body,{type:(n["content-type"]||{}).value||""}));var o=[];if(Object.keys(n).forEach(function(t){var e=n[t].name,r=n[t].value;Array.isArray(r)?r.forEach(function(t){o.push([e,t]);}):o.push([e,r]);}),"fetch"===t._mode){var u=null;if(s.abortController){var h=new AbortController();u=h.signal,t._fetchAbortController=h,"requestTimeout"in e&&0!==e.requestTimeout&&(t._fetchTimer=i.setTimeout(function(){t.emit("requestTimeout"),t._fetchAbortController&&t._fetchAbortController.abort();},e.requestTimeout));}i.fetch(t._opts.url,{method:t._opts.method,headers:o,body:a||void 0,mode:"cors",credentials:e.withCredentials?"include":"same-origin",signal:u}).then(function(e){t._fetchResponse=e,t._connect();},function(e){i.clearTimeout(t._fetchTimer),t._destroyed||t.emit("error",e);});}else{var l=t._xhr=new i.XMLHttpRequest();try{l.open(t._opts.method,t._opts.url,!0);}catch(e){return void r.nextTick(function(){t.emit("error",e);});}"responseType"in l&&(l.responseType=t._mode),"withCredentials"in l&&(l.withCredentials=!!e.withCredentials),"text"===t._mode&&"overrideMimeType"in l&&l.overrideMimeType("text/plain; charset=x-user-defined"),"requestTimeout"in e&&(l.timeout=e.requestTimeout,l.ontimeout=function(){t.emit("requestTimeout");}),o.forEach(function(t){l.setRequestHeader(t[0],t[1]);}),t._response=null,l.onreadystatechange=function(){switch(l.readyState){case c.LOADING:case c.DONE:t._onXHRProgress();}},"moz-chunked-arraybuffer"===t._mode&&(l.onprogress=function(){t._onXHRProgress();}),l.onerror=function(){t._destroyed||t.emit("error",new Error("XHR error"));};try{l.send(a);}catch(e){return void r.nextTick(function(){t.emit("error",e);});}}}},d.prototype._onXHRProgress=function(){var t=this;o(t._xhr)&&!t._destroyed&&(t._response||t._connect(),t._response._onXHRProgress());},d.prototype._connect=function(){var t=this;t._destroyed||(t._response=new f(t._xhr,t._fetchResponse,t._mode,t._fetchTimer),t._response.on("error",function(e){t.emit("error",e);}),t.emit("response",t._response));},d.prototype._write=function(t,e,r){var i=this;i._body.push(t),r();},d.prototype.abort=d.prototype.destroy=function(){var t=this;t._destroyed=!0,i.clearTimeout(t._fetchTimer),t._response&&(t._response._destroyed=!0),t._xhr?t._xhr.abort():t._fetchAbortController&&t._fetchAbortController.abort();},d.prototype.end=function(t,e,r){var i=this;"function"==typeof t&&(r=t,t=void 0),l.Writable.prototype.end.call(i,t,e,r);},d.prototype.flushHeaders=function(){},d.prototype.setTimeout=function(){},d.prototype.setNoDelay=function(){},d.prototype.setSocketKeepAlive=function(){};var p=["accept-charset","accept-encoding","access-control-request-headers","access-control-request-method","connection","content-length","cookie","cookie2","date","dnt","expect","host","keep-alive","origin","referer","te","trailer","transfer-encoding","upgrade","via"];}).call(this,t("_process"),"undefined"!=typeof __webpack_require__.g?__webpack_require__.g:"undefined"!=typeof self?self:void 0!==window?window:{},t("buffer").Buffer);},{"./capability":157,"./response":159,_process:133,buffer:48,inherits:75,"readable-stream":174}],159:[function(t,e,r){(function(e,i,n){var a=t("./capability"),o=t("inherits"),s=t("readable-stream"),u=r.readyStates={UNSENT:0,OPENED:1,HEADERS_RECEIVED:2,LOADING:3,DONE:4},h=r.IncomingMessage=function(t,r,o,u){var h=this;if(s.Readable.call(h),h._mode=o,h.headers={},h.rawHeaders=[],h.trailers={},h.rawTrailers=[],h.on("end",function(){e.nextTick(function(){h.emit("close");});}),"fetch"===o){if(h._fetchResponse=r,h.url=r.url,h.statusCode=r.status,h.statusMessage=r.statusText,r.headers.forEach(function(t,e){h.headers[e.toLowerCase()]=t,h.rawHeaders.push(e,t);}),a.writableStream){var l=new WritableStream({write:function(t){return new Promise(function(e,r){h._destroyed?r():h.push(n.from(t))?e():h._resumeFetch=e;});},close:function(){i.clearTimeout(u),h._destroyed||h.push(null);},abort:function(t){h._destroyed||h.emit("error",t);}});try{return void r.body.pipeTo(l).catch(function(t){i.clearTimeout(u),h._destroyed||h.emit("error",t);});}catch(t){}}var f=r.body.getReader();function c(){f.read().then(function(t){if(!h._destroyed){if(t.done)return i.clearTimeout(u),void h.push(null);h.push(n.from(t.value)),c();}}).catch(function(t){i.clearTimeout(u),h._destroyed||h.emit("error",t);});}c();}else{h._xhr=t,h._pos=0,h.url=t.responseURL,h.statusCode=t.status,h.statusMessage=t.statusText;var d=t.getAllResponseHeaders().split(/\r?\n/);if(d.forEach(function(t){var e=t.match(/^([^:]+):\s*(.*)/);if(e){var r=e[1].toLowerCase();"set-cookie"===r?(void 0===h.headers[r]&&(h.headers[r]=[]),h.headers[r].push(e[2])):void 0!==h.headers[r]?h.headers[r]+=", "+e[2]:h.headers[r]=e[2],h.rawHeaders.push(e[1],e[2]);}}),h._charset="x-user-defined",!a.overrideMimeType){var p=h.rawHeaders["mime-type"];if(p){var m=p.match(/;\s*charset=([^;])(;|$)/);m&&(h._charset=m[1].toLowerCase());}h._charset||(h._charset="utf-8");}}};o(h,s.Readable),h.prototype._read=function(){var t=this,e=t._resumeFetch;e&&(t._resumeFetch=null,e());},h.prototype._onXHRProgress=function(){var t=this,e=t._xhr,r=null;switch(t._mode){case"text":if(r=e.responseText,r.length>t._pos){var a=r.substr(t._pos);if("x-user-defined"===t._charset){for(var o=n.alloc(a.length),s=0;st._pos&&(t.push(n.from(new Uint8Array(h.result.slice(t._pos)))),t._pos=h.result.byteLength);},h.onload=function(){t.push(null);},h.readAsArrayBuffer(r);}t._xhr.readyState===u.DONE&&"ms-stream"!==t._mode&&t.push(null);};}).call(this,t("_process"),"undefined"!=typeof __webpack_require__.g?__webpack_require__.g:"undefined"!=typeof self?self:void 0!==window?window:{},t("buffer").Buffer);},{"./capability":157,_process:133,buffer:48,inherits:75,"readable-stream":174}],160:[function(t,e,r){"use strict";function i(t,e){t.prototype=Object.create(e.prototype),t.prototype.constructor=t,t.__proto__=e;}function n(t,e,r){function n(t,r,i){return"string"==typeof e?e:e(t,r,i);}r||(r=Error);var a=function(t){function e(e,r,i){return t.call(this,n(e,r,i))||this;}return i(e,t),e;}(r);a.prototype.name=r.name,a.prototype.code=t,h[t]=a;}function a(t,e){if(Array.isArray(t)){var r=t.length;return t=t.map(function(t){return String(t);}),r>2?"one of ".concat(e," ").concat(t.slice(0,r-1).join(", "),", or ")+t[r-1]:2===r?"one of ".concat(e," ").concat(t[0]," or ").concat(t[1]):"of ".concat(e," ").concat(t[0]);}return"of ".concat(e," ").concat(String(t));}function o(t,e,r){return t.substr(!r||r<0?0:+r,e.length)===e;}function s(t,e,r){return(void 0===r||r>t.length)&&(r=t.length),t.substring(r-e.length,r)===e;}function u(t,e,r){return"number"!=typeof r&&(r=0),!(r+e.length>t.length)&&-1!==t.indexOf(e,r);}var h={};n("ERR_INVALID_OPT_VALUE",function(t,e){return'The value "'+e+'" is invalid for option "'+t+'"';},TypeError),n("ERR_INVALID_ARG_TYPE",function(t,e,r){var i,n;if("string"==typeof e&&o(e,"not ")?(i="must not be",e=e.replace(/^not /,"")):i="must be",s(t," argument"))n="The ".concat(t," ").concat(i," ").concat(a(e,"type"));else{var h=u(t,".")?"property":"argument";n='The "'.concat(t,'" ').concat(h," ").concat(i," ").concat(a(e,"type"));}return n+=". Received type ".concat(typeof r),n;},TypeError),n("ERR_STREAM_PUSH_AFTER_EOF","stream.push() after EOF"),n("ERR_METHOD_NOT_IMPLEMENTED",function(t){return"The "+t+" method is not implemented";}),n("ERR_STREAM_PREMATURE_CLOSE","Premature close"),n("ERR_STREAM_DESTROYED",function(t){return"Cannot call "+t+" after a stream was destroyed";}),n("ERR_MULTIPLE_CALLBACK","Callback called multiple times"),n("ERR_STREAM_CANNOT_PIPE","Cannot pipe, not readable"),n("ERR_STREAM_WRITE_AFTER_END","write after end"),n("ERR_STREAM_NULL_VALUES","May not write null values to stream",TypeError),n("ERR_UNKNOWN_ENCODING",function(t){return"Unknown encoding: "+t;},TypeError),n("ERR_STREAM_UNSHIFT_AFTER_END_EVENT","stream.unshift() after end event"),e.exports.codes=h;},{}],161:[function(t,e,r){(function(t){"use strict";function r(e){if(!n.has(e)){var r=e+" is an experimental feature. This feature could change at any time";n.add(e),t.emitWarning(r,"ExperimentalWarning");}}function i(){}var n=new Set();e.exports.emitExperimentalWarning=t.emitWarning?r:i;}).call(this,t("_process"));},{_process:133}],162:[function(t,e,r){(function(r){"use strict";function i(t){if(!(this instanceof i))return new i(t);s.call(this,t),u.call(this,t),this.allowHalfOpen=!0,t&&(!1===t.readable&&(this.readable=!1),!1===t.writable&&(this.writable=!1),!1===t.allowHalfOpen&&(this.allowHalfOpen=!1,this.once("end",n)));}function n(){this._writableState.ended||r.nextTick(a,this);}function a(t){t.end();}var o=Object.keys||function(t){var e=[];for(var r in t)e.push(r);return e;};e.exports=i;var s=t("./_stream_readable"),u=t("./_stream_writable");t("inherits")(i,s);for(var h=o(u.prototype),l=0;l0){if("string"==typeof e||s.objectMode||Object.getPrototypeOf(e)===O.prototype||(e=n(e)),i)s.endEmitted?t.emit("error",new Z()):l(t,s,e,!0);else if(s.ended)t.emit("error",new q());else{if(s.destroyed)return!1;s.reading=!1,s.decoder&&!r?(e=s.decoder.write(e),s.objectMode||0!==e.length?l(t,s,e,!1):g(t,s)):l(t,s,e,!1);}}else i||(s.reading=!1,g(t,s));return!s.ended&&(s.length=Q?t=Q:(t--,t|=t>>>1,t|=t>>>2,t|=t>>>4,t|=t>>>8,t|=t>>>16,t++),t;}function d(t,e){return t<=0||0===e.length&&e.ended?0:e.objectMode?1:t!=t?e.flowing&&e.length?e.buffer.head.data.length:e.length:(t>e.highWaterMark&&(e.highWaterMark=c(t)),t<=e.length?t:e.ended?e.length:(e.needReadable=!0,0));}function p(t,e){if(!e.ended){if(e.decoder){var r=e.decoder.end();r&&r.length&&(e.buffer.push(r),e.length+=e.objectMode?1:r.length);}e.ended=!0,e.sync?m(t):(e.needReadable=!1,e.emittedReadable||(e.emittedReadable=!0,b(t)));}}function m(t){var e=t._readableState;e.needReadable=!1,e.emittedReadable||(R("emitReadable",e.flowing),e.emittedReadable=!0,r.nextTick(b,t));}function b(t){var e=t._readableState;R("emitReadable_",e.destroyed,e.length,e.ended),e.destroyed||!e.length&&!e.ended||t.emit("readable"),e.needReadable=!e.flowing&&!e.ended&&e.length<=e.highWaterMark,S(t);}function g(t,e){e.readingMore||(e.readingMore=!0,r.nextTick(_,t,e));}function _(t,e){for(;!e.reading&&!e.ended&&(e.length0,e.resumeScheduled&&!e.paused?e.flowing=!0:t.listenerCount("data")>0&&t.resume();}function w(t){R("readable nexttick read 0"),t.read(0);}function E(t,e){e.resumeScheduled||(e.resumeScheduled=!0,r.nextTick(x,t,e));}function x(t,e){R("resume",e.reading),e.reading||t.read(0),e.resumeScheduled=!1,t.emit("resume"),S(t),e.flowing&&!e.reading&&t.read(0);}function S(t){var e=t._readableState;for(R("flow",e.flowing);e.flowing&&null!==t.read(););}function k(t,e){return 0===e.length?null:(e.objectMode?r=e.buffer.shift():!t||t>=e.length?(r=e.decoder?e.buffer.join(""):1===e.buffer.length?e.buffer.first():e.buffer.concat(e.length),e.buffer.clear()):r=e.buffer.consume(t,e.decoder),r);var r;}function M(t){var e=t._readableState;R("endReadable",e.endEmitted),e.endEmitted||(e.ended=!0,r.nextTick(A,e,t));}function A(t,e){R("endReadableNT",t.endEmitted,t.length),t.endEmitted||0!==t.length||(t.endEmitted=!0,e.readable=!1,e.emit("end"));}function I(t,e){for(var r=0,i=t.length;r=e.highWaterMark:e.length>0)||e.ended))return R("read: emitReadable",e.length,e.ended),0===e.length&&e.ended?M(this):m(this),null;if(t=d(t,e),0===t&&e.ended)return 0===e.length&&M(this),null;var i,n=e.needReadable;return R("need readable",n),(0===e.length||e.length-t0?k(t,e):null,null===i?(e.needReadable=!0,t=0):(e.length-=t,e.awaitDrain=0),0===e.length&&(e.ended||(e.needReadable=!0),r!==t&&e.ended&&M(this)),null!==i&&this.emit("data",i),i;},u.prototype._read=function(t){this.emit("error",new W("_read()"));},u.prototype.pipe=function(t,e){function i(t,e){R("onunpipe"),t===c&&e&&!1===e.hasUnpiped&&(e.hasUnpiped=!0,a());}function n(){R("onend"),t.end();}function a(){R("cleanup"),t.removeListener("close",h),t.removeListener("finish",l),t.removeListener("drain",b),t.removeListener("error",u),t.removeListener("unpipe",i),c.removeListener("end",n),c.removeListener("end",f),c.removeListener("data",s),g=!0,!d.awaitDrain||t._writableState&&!t._writableState.needDrain||b();}function s(e){R("ondata");var r=t.write(e);R("dest.write",r),!1===r&&((1===d.pipesCount&&d.pipes===t||d.pipesCount>1&&-1!==I(d.pipes,t))&&!g&&(R("false write response, pause",d.awaitDrain),d.awaitDrain++),c.pause());}function u(e){R("onerror",e),f(),t.removeListener("error",u),0===P(t,"error")&&t.emit("error",e);}function h(){t.removeListener("finish",l),f();}function l(){R("onfinish"),t.removeListener("close",h),f();}function f(){R("unpipe"),c.unpipe(t);}var c=this,d=this._readableState;switch(d.pipesCount){case 0:d.pipes=t;break;case 1:d.pipes=[d.pipes,t];break;default:d.pipes.push(t);}d.pipesCount+=1,R("pipe count=%d opts=%j",d.pipesCount,e);var p=(!e||!1!==e.end)&&t!==r.stdout&&t!==r.stderr,m=p?n:f;d.endEmitted?r.nextTick(m):c.once("end",m),t.on("unpipe",i);var b=v(c);t.on("drain",b);var g=!1;return c.on("data",s),o(t,"error",u),t.once("close",h),t.once("finish",l),t.emit("pipe",c),d.flowing||(R("pipe resume"),c.resume()),t;},u.prototype.unpipe=function(t){var e=this._readableState,r={hasUnpiped:!1};if(0===e.pipesCount)return this;if(1===e.pipesCount)return t&&t!==e.pipes?this:(t||(t=e.pipes),e.pipes=null,e.pipesCount=0,e.flowing=!1,t&&t.emit("unpipe",this,r),this);if(!t){var i=e.pipes,n=e.pipesCount;e.pipes=null,e.pipesCount=0,e.flowing=!1;for(var a=0;a0,!1!==n.flowing&&this.resume()):"readable"===t&&(n.endEmitted||n.readableListening||(n.readableListening=n.needReadable=!0,n.flowing=!1,n.emittedReadable=!1,R("on readable",n.length,n.reading),n.length?m(this):n.reading||r.nextTick(w,this))),i;},u.prototype.addListener=u.prototype.on,u.prototype.removeListener=function(t,e){var i=C.prototype.removeListener.call(this,t,e);return"readable"===t&&r.nextTick(y,this),i;},u.prototype.removeAllListeners=function(t){var e=C.prototype.removeAllListeners.apply(this,arguments);return"readable"!==t&&void 0!==t||r.nextTick(y,this),e;},u.prototype.resume=function(){var t=this._readableState;return t.flowing||(R("resume"),t.flowing=!t.readableListening,E(this,t)),t.paused=!1,this;},u.prototype.pause=function(){return R("call pause flowing=%j",this._readableState.flowing),!1!==this._readableState.flowing&&(R("pause"),this._readableState.flowing=!1,this.emit("pause")),this._readableState.paused=!0,this;},u.prototype.wrap=function(t){var e=this,r=this._readableState,i=!1;for(var n in t.on("end",function(){if(R("wrapped end"),r.decoder&&!r.ended){var t=r.decoder.end();t&&t.length&&e.push(t);}e.push(null);}),t.on("data",function(n){if(R("wrapped data"),r.decoder&&(n=r.decoder.write(n)),(!r.objectMode||null!=n)&&(r.objectMode||n&&n.length)){var a=e.push(n);a||(i=!0,t.pause());}}),t)void 0===this[n]&&"function"==typeof t[n]&&(this[n]=function(e){return function(){return t[e].apply(t,arguments);};}(n));for(var a=0;a-1))throw new q(t);return this._writableState.defaultEncoding=t,this;},Object.defineProperty(h.prototype,"writableBuffer",{enumerable:!1,get:function(){return this._writableState&&this._writableState.getBuffer();}}),Object.defineProperty(h.prototype,"writableHighWaterMark",{enumerable:!1,get:function(){return this._writableState.highWaterMark;}}),h.prototype._write=function(t,e,r){r(new z("_write()"));},h.prototype._writev=null,h.prototype.end=function(t,e,r){var i=this._writableState;return"function"==typeof t?(r=t,t=null,e=null):"function"==typeof e&&(r=e,e=null),null!=t&&this.write(t,e),i.corked&&(i.corked=1,this.uncork()),i.ending||k(this,i,r),this;},Object.defineProperty(h.prototype,"writableLength",{enumerable:!1,get:function(){return this._writableState.length;}}),Object.defineProperty(h.prototype,"destroyed",{enumerable:!1,get:function(){return void 0!==this._writableState&&this._writableState.destroyed;},set:function(t){this._writableState&&(this._writableState.destroyed=t);}}),h.prototype.destroy=O.destroy,h.prototype._undestroy=O.undestroy,h.prototype._destroy=function(t,e){e(t);};}).call(this,t("_process"),"undefined"!=typeof __webpack_require__.g?__webpack_require__.g:"undefined"!=typeof self?self:void 0!==window?window:{});},{"../errors":160,"./_stream_duplex":162,"./internal/streams/destroy":169,"./internal/streams/state":172,"./internal/streams/stream":173,_process:133,buffer:48,inherits:75,"util-deprecate":183}],167:[function(t,e,r){(function(r){"use strict";function i(t,e,r){return e in t?Object.defineProperty(t,e,{value:r,enumerable:!0,configurable:!0,writable:!0}):t[e]=r,t;}function n(t,e){return{value:t,done:e};}function a(t){var e=t[l];if(null!==e){var r=t[b].read();null!==r&&(t[p]=null,t[l]=null,t[f]=null,e(n(r,!1)));}}function o(t){r.nextTick(a,t);}function s(t,e){return function(r,i){t.then(function(){e[d]?r(n(void 0,!0)):e[m](r,i);},i);};}var u,h=t("./end-of-stream"),l=Symbol("lastResolve"),f=Symbol("lastReject"),c=Symbol("error"),d=Symbol("ended"),p=Symbol("lastPromise"),m=Symbol("handlePromise"),b=Symbol("stream"),g=Object.getPrototypeOf(function(){}),_=Object.setPrototypeOf((u={get stream(){return this[b];},next:function(){var t=this,e=this[c];if(null!==e)return Promise.reject(e);if(this[d])return Promise.resolve(n(void 0,!0));if(this[b].destroyed)return new Promise(function(e,i){r.nextTick(function(){t[c]?i(t[c]):e(n(void 0,!0));});});var i,a=this[p];if(a)i=new Promise(s(a,this));else{var o=this[b].read();if(null!==o)return Promise.resolve(n(o,!1));i=new Promise(this[m]);}return this[p]=i,i;}},i(u,Symbol.asyncIterator,function(){return this;}),i(u,"return",function(){var t=this;return new Promise(function(e,r){t[b].destroy(null,function(t){t?r(t):e(n(void 0,!0));});});}),u),g),v=function(t){var e,r=Object.create(_,(e={},i(e,b,{value:t,writable:!0}),i(e,l,{value:null,writable:!0}),i(e,f,{value:null,writable:!0}),i(e,c,{value:null,writable:!0}),i(e,d,{value:t._readableState.endEmitted,writable:!0}),i(e,m,{value:function(t,e){var i=r[b].read();i?(r[p]=null,r[l]=null,r[f]=null,t(n(i,!1))):(r[l]=t,r[f]=e);},writable:!0}),e));return r[p]=null,h(t,function(t){if(t&&"ERR_STREAM_PREMATURE_CLOSE"!==t.code){var e=r[f];return null!==e&&(r[p]=null,r[l]=null,r[f]=null,e(t)),void(r[c]=t);}var i=r[l];null!==i&&(r[p]=null,r[l]=null,r[f]=null,i(n(void 0,!0))),r[d]=!0;}),t.on("readable",o.bind(null,r)),r;};e.exports=v;}).call(this,t("_process"));},{"./end-of-stream":170,_process:133}],168:[function(t,e,r){"use strict";function i(t){for(var e=1;e0?this.tail.next=e:this.head=e,this.tail=e,++this.length;},e.unshift=function(t){var e={data:t,next:this.head};0===this.length&&(this.tail=e),this.head=e,++this.length;},e.shift=function(){if(0!==this.length){var t=this.head.data;return 1===this.length?this.head=this.tail=null:this.head=this.head.next,--this.length,t;}},e.clear=function(){this.head=this.tail=null,this.length=0;},e.join=function(t){if(0===this.length)return"";for(var e=this.head,r=""+e.data;e=e.next;)r+=t+e.data;return r;},e.concat=function(t){if(0===this.length)return s.alloc(0);for(var e=s.allocUnsafe(t>>>0),r=this.head,i=0;r;)a(r.data,e,i),i+=r.data.length,r=r.next;return e;},e.consume=function(t,e){var r;return tn.length?n.length:t;if(a===n.length?i+=n:i+=n.slice(0,t),t-=a,0===t){a===n.length?(++r,e.next?this.head=e.next:this.head=this.tail=null):(this.head=e,e.data=n.slice(a));break;}++r;}return this.length-=r,i;},e._getBuffer=function(t){var e=s.allocUnsafe(t),r=this.head,i=1;for(r.data.copy(e),t-=r.data.length;r=r.next;){var n=r.data,a=t>n.length?n.length:t;if(n.copy(e,e.length-t,0,a),t-=a,0===t){a===n.length?(++i,r.next?this.head=r.next:this.head=this.tail=null):(this.head=r,r.data=n.slice(a));break;}++i;}return this.length-=i,e;},e[l]=function(t,e){return h(this,i({},e,{depth:0,customInspect:!1}));},t;}();},{buffer:48,util:33}],169:[function(t,e,r){(function(t){"use strict";function r(e,r){var a=this,s=this._readableState&&this._readableState.destroyed,u=this._writableState&&this._writableState.destroyed;return s||u?(r?r(e):!e||this._writableState&&this._writableState.errorEmitted||t.nextTick(o,this,e),this):(this._readableState&&(this._readableState.destroyed=!0),this._writableState&&(this._writableState.destroyed=!0),this._destroy(e||null,function(e){!r&&e?(t.nextTick(i,a,e),a._writableState&&(a._writableState.errorEmitted=!0)):r?(t.nextTick(n,a),r(e)):t.nextTick(n,a);}),this);}function i(t,e){o(t,e),n(t);}function n(t){t._writableState&&!t._writableState.emitClose||t._readableState&&!t._readableState.emitClose||t.emit("close");}function a(){this._readableState&&(this._readableState.destroyed=!1,this._readableState.reading=!1,this._readableState.ended=!1,this._readableState.endEmitted=!1),this._writableState&&(this._writableState.destroyed=!1,this._writableState.ended=!1,this._writableState.ending=!1,this._writableState.finalCalled=!1,this._writableState.prefinished=!1,this._writableState.finished=!1,this._writableState.errorEmitted=!1);}function o(t,e){t.emit("error",e);}e.exports={destroy:r,undestroy:a};}).call(this,t("_process"));},{_process:133}],170:[function(t,e,r){"use strict";function i(t){var e=!1;return function(){if(!e){e=!0;for(var r=arguments.length,i=new Array(r),n=0;n0;return o(t,u,h,function(t){i||(i=t),t&&a.forEach(s),u||(a.forEach(s),n(i));});});return e.reduce(u);}var f,c=t("../../../errors").codes,d=c.ERR_MISSING_ARGS,p=c.ERR_STREAM_DESTROYED;e.exports=l;},{"../../../errors":160,"./end-of-stream":170}],172:[function(t,e,r){"use strict";function i(t,e,r){return null!=t.highWaterMark?t.highWaterMark:e?t[r]:null;}function n(t,e,r,n){var o=i(e,n,r);if(null!=o){if(!isFinite(o)||Math.floor(o)!==o||o<0){var s=n?r:"highWaterMark";throw new a(s,o);}return Math.floor(o);}return t.objectMode?16:16384;}var a=t("../../../errors").codes.ERR_INVALID_OPT_VALUE;e.exports={getHighWaterMark:n};},{"../../../errors":160}],173:[function(t,e,r){arguments[4][146][0].apply(r,arguments);},{dup:146,events:52}],174:[function(t,e,r){r=e.exports=t("./lib/_stream_readable.js"),r.Stream=r,r.Readable=r,r.Writable=t("./lib/_stream_writable.js"),r.Duplex=t("./lib/_stream_duplex.js"),r.Transform=t("./lib/_stream_transform.js"),r.PassThrough=t("./lib/_stream_passthrough.js"),r.finished=t("./lib/internal/streams/end-of-stream.js"),r.pipeline=t("./lib/internal/streams/pipeline.js");},{"./lib/_stream_duplex.js":162,"./lib/_stream_passthrough.js":163,"./lib/_stream_readable.js":164,"./lib/_stream_transform.js":165,"./lib/_stream_writable.js":166,"./lib/internal/streams/end-of-stream.js":170,"./lib/internal/streams/pipeline.js":171}],175:[function(t,e,r){arguments[4][148][0].apply(r,arguments);},{dup:148,"safe-buffer":154}],176:[function(t,e,r){(function(e,i){function n(t,e){this._id=t,this._clearFn=e;}var a=t("process/browser.js").nextTick,o=Function.prototype.apply,s=Array.prototype.slice,u={},h=0;r.setTimeout=function(){return new n(o.call(setTimeout,window,arguments),clearTimeout);},r.setInterval=function(){return new n(o.call(setInterval,window,arguments),clearInterval);},r.clearTimeout=r.clearInterval=function(t){t.close();},n.prototype.unref=n.prototype.ref=function(){},n.prototype.close=function(){this._clearFn.call(window,this._id);},r.enroll=function(t,e){clearTimeout(t._idleTimeoutId),t._idleTimeout=e;},r.unenroll=function(t){clearTimeout(t._idleTimeoutId),t._idleTimeout=-1;},r._unrefActive=r.active=function(t){clearTimeout(t._idleTimeoutId);var e=t._idleTimeout;e>=0&&(t._idleTimeoutId=setTimeout(function(){t._onTimeout&&t._onTimeout();},e));},r.setImmediate="function"==typeof e?e:function(t){var e=h++,i=!(arguments.length<2)&&s.call(arguments,1);return u[e]=!0,a(function(){u[e]&&(i?t.apply(null,i):t.call(null),r.clearImmediate(e));}),e;},r.clearImmediate="function"==typeof i?i:function(t){delete u[t];};}).call(this,t("timers").setImmediate,t("timers").clearImmediate);},{"process/browser.js":133,timers:176}],177:[function(t,e,r){(function(t){"use strict";function e(t){throw new Error(t);}function i(t){var e=Object.keys(t);return Object.getOwnPropertySymbols?e.concat(Object.getOwnPropertySymbols(t)):e;}function n(t){if(Array.isArray(t))return t.slice();for(var e=i(t),r={},n=0;n3?f-3:0),d=3;d=t.length||e<0?t:t.slice(0,e).concat(t.slice(e+1));}function d(t,e,r){if(t[e]===r)return t;for(var i=t.length,n=Array(i),a=0;a6?s-6:0),h=6;h6?s-6:0),h=6;h7?l-7:0),c=7;c=0||(o[h]=t[h]);}return o;}function S(t,e,r,i,n,o){for(var s=arguments.length,u=Array(s>6?s-6:0),h=6;h.5?u/(2-a-o):u/(a+o),a){case t:i=(e-r)/u+(e1&&(r-=1),r<1/6?t+6*(e-t)*r:r<.5?e:r<2/3?t+(e-t)*(2/3-r)*6:t;}var n,a,o;if(t=I(t,360),e=I(e,100),r=I(r,100),0===e)n=a=o=r;else{var s=r<.5?r*(1+e):r+e-r*e,u=2*r-s;n=i(u,s,t+1/3),a=i(u,s,t),o=i(u,s,t-1/3);}return{r:255*n,g:255*a,b:255*o};}function u(t,e,r){t=I(t,255),e=I(e,255),r=I(r,255);var i,n,a=W(t,e,r),o=q(t,e,r),s=a,u=a-o;if(n=0===a?0:u/a,a==o)i=0;else{switch(a){case t:i=(e-r)/u+(e>1)+720)%360;--e;)n.h=(n.h+a)%360,o.push(i(n));return o;}function k(t,e){e=e||6;for(var r=i(t).toHsv(),n=r.h,a=r.s,o=r.v,s=[],u=1/e;e--;)s.push(i({h:n,s:a,v:o})),o=(o+u)%1;return s;}function M(t){var e={};for(var r in t)t.hasOwnProperty(r)&&(e[t[r]]=r);return e;}function A(t){return t=parseFloat(t),(isNaN(t)||t<0||t>1)&&(t=1),t;}function I(t,r){P(t)&&(t="100%");var i=C(t);return t=q(r,W(0,parseFloat(t))),i&&(t=parseInt(t*r,10)/100),e.abs(t-r)<1e-6?1:t%r/parseFloat(r);}function T(t){return q(1,W(0,t));}function R(t){return parseInt(t,16);}function P(t){return"string"==typeof t&&-1!=t.indexOf(".")&&1===parseFloat(t);}function C(t){return"string"==typeof t&&-1!=t.indexOf("%");}function O(t){return 1==t.length?"0"+t:""+t;}function L(t){return t<=1&&(t=100*t+"%"),t;}function B(t){return e.round(255*parseFloat(t)).toString(16);}function D(t){return R(t)/255;}function N(t){return!!tt.CSS_UNIT.exec(t);}function z(t){t=t.replace(U,"").replace(F,"").toLowerCase();var e,r=!1;if(K[t])t=K[t],r=!0;else if("transparent"==t)return{r:0,g:0,b:0,a:0,format:"name"};return(e=tt.rgb.exec(t))?{r:e[1],g:e[2],b:e[3]}:(e=tt.rgba.exec(t))?{r:e[1],g:e[2],b:e[3],a:e[4]}:(e=tt.hsl.exec(t))?{h:e[1],s:e[2],l:e[3]}:(e=tt.hsla.exec(t))?{h:e[1],s:e[2],l:e[3],a:e[4]}:(e=tt.hsv.exec(t))?{h:e[1],s:e[2],v:e[3]}:(e=tt.hsva.exec(t))?{h:e[1],s:e[2],v:e[3],a:e[4]}:(e=tt.hex8.exec(t))?{r:R(e[1]),g:R(e[2]),b:R(e[3]),a:D(e[4]),format:r?"name":"hex8"}:(e=tt.hex6.exec(t))?{r:R(e[1]),g:R(e[2]),b:R(e[3]),format:r?"name":"hex"}:(e=tt.hex4.exec(t))?{r:R(e[1]+""+e[1]),g:R(e[2]+""+e[2]),b:R(e[3]+""+e[3]),a:D(e[4]+""+e[4]),format:r?"name":"hex8"}:!!(e=tt.hex3.exec(t))&&{r:R(e[1]+""+e[1]),g:R(e[2]+""+e[2]),b:R(e[3]+""+e[3]),format:r?"name":"hex"};}function j(t){var e,r;return t=t||{level:"AA",size:"small"},e=(t.level||"AA").toUpperCase(),r=(t.size||"small").toLowerCase(),"AA"!==e&&"AAA"!==e&&(e="AA"),"small"!==r&&"large"!==r&&(r="small"),{level:e,size:r};}var U=/^\s+/,F=/\s+$/,G=0,H=e.round,q=e.min,W=e.max,Z=e.random;i.prototype={isDark:function(){return this.getBrightness()<128;},isLight:function(){return!this.isDark();},isValid:function(){return this._ok;},getOriginalInput:function(){return this._originalInput;},getFormat:function(){return this._format;},getAlpha:function(){return this._a;},getBrightness:function(){var t=this.toRgb();return(299*t.r+587*t.g+114*t.b)/1e3;},getLuminance:function(){var t,r,i,n,a,o,s=this.toRgb();return t=s.r/255,r=s.g/255,i=s.b/255,n=t<=.03928?t/12.92:e.pow((t+.055)/1.055,2.4),a=r<=.03928?r/12.92:e.pow((r+.055)/1.055,2.4),o=i<=.03928?i/12.92:e.pow((i+.055)/1.055,2.4),.2126*n+.7152*a+.0722*o;},setAlpha:function(t){return this._a=A(t),this._roundA=H(100*this._a)/100,this;},toHsv:function(){var t=u(this._r,this._g,this._b);return{h:360*t.h,s:t.s,v:t.v,a:this._a};},toHsvString:function(){var t=u(this._r,this._g,this._b),e=H(360*t.h),r=H(100*t.s),i=H(100*t.v);return 1==this._a?"hsv("+e+", "+r+"%, "+i+"%)":"hsva("+e+", "+r+"%, "+i+"%, "+this._roundA+")";},toHsl:function(){var t=o(this._r,this._g,this._b);return{h:360*t.h,s:t.s,l:t.l,a:this._a};},toHslString:function(){var t=o(this._r,this._g,this._b),e=H(360*t.h),r=H(100*t.s),i=H(100*t.l);return 1==this._a?"hsl("+e+", "+r+"%, "+i+"%)":"hsla("+e+", "+r+"%, "+i+"%, "+this._roundA+")";},toHex:function(t){return l(this._r,this._g,this._b,t);},toHexString:function(t){return"#"+this.toHex(t);},toHex8:function(t){return f(this._r,this._g,this._b,this._a,t);},toHex8String:function(t){return"#"+this.toHex8(t);},toRgb:function(){return{r:H(this._r),g:H(this._g),b:H(this._b),a:this._a};},toRgbString:function(){return 1==this._a?"rgb("+H(this._r)+", "+H(this._g)+", "+H(this._b)+")":"rgba("+H(this._r)+", "+H(this._g)+", "+H(this._b)+", "+this._roundA+")";},toPercentageRgb:function(){return{r:H(100*I(this._r,255))+"%",g:H(100*I(this._g,255))+"%",b:H(100*I(this._b,255))+"%",a:this._a};},toPercentageRgbString:function(){return 1==this._a?"rgb("+H(100*I(this._r,255))+"%, "+H(100*I(this._g,255))+"%, "+H(100*I(this._b,255))+"%)":"rgba("+H(100*I(this._r,255))+"%, "+H(100*I(this._g,255))+"%, "+H(100*I(this._b,255))+"%, "+this._roundA+")";},toName:function(){return 0===this._a?"transparent":!(this._a<1)&&($[l(this._r,this._g,this._b,!0)]||!1);},toFilter:function(t){var e="#"+c(this._r,this._g,this._b,this._a),r=e,n=this._gradientType?"GradientType = 1, ":"";if(t){var a=i(t);r="#"+c(a._r,a._g,a._b,a._a);}return"progid:DXImageTransform.Microsoft.gradient("+n+"startColorstr="+e+",endColorstr="+r+")";},toString:function(t){var e=!!t;t=t||this._format;var r=!1,i=this._a<1&&this._a>=0,n=!e&&i&&("hex"===t||"hex6"===t||"hex3"===t||"hex4"===t||"hex8"===t||"name"===t);return n?"name"===t&&0===this._a?this.toName():this.toRgbString():("rgb"===t&&(r=this.toRgbString()),"prgb"===t&&(r=this.toPercentageRgbString()),"hex"!==t&&"hex6"!==t||(r=this.toHexString()),"hex3"===t&&(r=this.toHexString(!0)),"hex4"===t&&(r=this.toHex8String(!0)),"hex8"===t&&(r=this.toHex8String()),"name"===t&&(r=this.toName()),"hsl"===t&&(r=this.toHslString()),"hsv"===t&&(r=this.toHsvString()),r||this.toHexString());},clone:function(){return i(this.toString());},_applyModification:function(t,e){var r=t.apply(null,[this].concat([].slice.call(e)));return this._r=r._r,this._g=r._g,this._b=r._b,this.setAlpha(r._a),this;},lighten:function(){return this._applyModification(b,arguments);},brighten:function(){return this._applyModification(g,arguments);},darken:function(){return this._applyModification(_,arguments);},desaturate:function(){return this._applyModification(d,arguments);},saturate:function(){return this._applyModification(p,arguments);},greyscale:function(){return this._applyModification(m,arguments);},spin:function(){return this._applyModification(v,arguments);},_applyCombination:function(t,e){return t.apply(null,[this].concat([].slice.call(e)));},analogous:function(){return this._applyCombination(S,arguments);},complement:function(){return this._applyCombination(y,arguments);},monochromatic:function(){return this._applyCombination(k,arguments);},splitcomplement:function(){return this._applyCombination(x,arguments);},triad:function(){return this._applyCombination(w,arguments);},tetrad:function(){return this._applyCombination(E,arguments);}},i.fromRatio=function(t,e){if("object"==typeof t){var r={};for(var n in t)t.hasOwnProperty(n)&&(r[n]="a"===n?t[n]:L(t[n]));t=r;}return i(t,e);},i.equals=function(t,e){return!(!t||!e)&&i(t).toRgbString()==i(e).toRgbString();},i.random=function(){return i.fromRatio({r:Z(),g:Z(),b:Z()});},i.mix=function(t,e,r){r=0===r?0:r||50;var n=i(t).toRgb(),a=i(e).toRgb(),o=r/100,s={r:(a.r-n.r)*o+n.r,g:(a.g-n.g)*o+n.g,b:(a.b-n.b)*o+n.b,a:(a.a-n.a)*o+n.a};return i(s);},i.readability=function(t,r){var n=i(t),a=i(r);return(e.max(n.getLuminance(),a.getLuminance())+.05)/(e.min(n.getLuminance(),a.getLuminance())+.05);},i.isReadable=function(t,e,r){var n,a,o=i.readability(t,e);switch(a=!1,n=j(r),n.level+n.size){case"AAsmall":case"AAAlarge":a=o>=4.5;break;case"AAlarge":a=o>=3;break;case"AAAsmall":a=o>=7;}return a;},i.mostReadable=function(t,e,r){var n,a,o,s,u=null,h=0;r=r||{},a=r.includeFallbackColors,o=r.level,s=r.size;for(var l=0;lh&&(h=n,u=i(e[l]));return i.isReadable(t,u,{level:o,size:s})||!a?u:(r.includeFallbackColors=!1,i.mostReadable(t,["#fff","#000"],r));};var Y,V,X,Q,J,K=i.names={aliceblue:"f0f8ff",antiquewhite:"faebd7",aqua:"0ff",aquamarine:"7fffd4",azure:"f0ffff",beige:"f5f5dc",bisque:"ffe4c4",black:"000",blanchedalmond:"ffebcd",blue:"00f",blueviolet:"8a2be2",brown:"a52a2a",burlywood:"deb887",burntsienna:"ea7e5d",cadetblue:"5f9ea0",chartreuse:"7fff00",chocolate:"d2691e",coral:"ff7f50",cornflowerblue:"6495ed",cornsilk:"fff8dc",crimson:"dc143c",cyan:"0ff",darkblue:"00008b",darkcyan:"008b8b",darkgoldenrod:"b8860b",darkgray:"a9a9a9",darkgreen:"006400",darkgrey:"a9a9a9",darkkhaki:"bdb76b",darkmagenta:"8b008b",darkolivegreen:"556b2f",darkorange:"ff8c00",darkorchid:"9932cc",darkred:"8b0000",darksalmon:"e9967a",darkseagreen:"8fbc8f",darkslateblue:"483d8b",darkslategray:"2f4f4f",darkslategrey:"2f4f4f",darkturquoise:"00ced1",darkviolet:"9400d3",deeppink:"ff1493",deepskyblue:"00bfff",dimgray:"696969",dimgrey:"696969",dodgerblue:"1e90ff",firebrick:"b22222",floralwhite:"fffaf0",forestgreen:"228b22",fuchsia:"f0f",gainsboro:"dcdcdc",ghostwhite:"f8f8ff",gold:"ffd700",goldenrod:"daa520",gray:"808080",green:"008000",greenyellow:"adff2f",grey:"808080",honeydew:"f0fff0",hotpink:"ff69b4",indianred:"cd5c5c",indigo:"4b0082",ivory:"fffff0",khaki:"f0e68c",lavender:"e6e6fa",lavenderblush:"fff0f5",lawngreen:"7cfc00",lemonchiffon:"fffacd",lightblue:"add8e6",lightcoral:"f08080",lightcyan:"e0ffff",lightgoldenrodyellow:"fafad2",lightgray:"d3d3d3",lightgreen:"90ee90",lightgrey:"d3d3d3",lightpink:"ffb6c1",lightsalmon:"ffa07a",lightseagreen:"20b2aa",lightskyblue:"87cefa",lightslategray:"789",lightslategrey:"789",lightsteelblue:"b0c4de",lightyellow:"ffffe0",lime:"0f0",limegreen:"32cd32",linen:"faf0e6",magenta:"f0f",maroon:"800000",mediumaquamarine:"66cdaa",mediumblue:"0000cd",mediumorchid:"ba55d3",mediumpurple:"9370db",mediumseagreen:"3cb371",mediumslateblue:"7b68ee",mediumspringgreen:"00fa9a",mediumturquoise:"48d1cc",mediumvioletred:"c71585",midnightblue:"191970",mintcream:"f5fffa",mistyrose:"ffe4e1",moccasin:"ffe4b5",navajowhite:"ffdead",navy:"000080",oldlace:"fdf5e6",olive:"808000",olivedrab:"6b8e23",orange:"ffa500",orangered:"ff4500",orchid:"da70d6",palegoldenrod:"eee8aa",palegreen:"98fb98",paleturquoise:"afeeee",palevioletred:"db7093",papayawhip:"ffefd5",peachpuff:"ffdab9",peru:"cd853f",pink:"ffc0cb",plum:"dda0dd",powderblue:"b0e0e6",purple:"800080",rebeccapurple:"663399",red:"f00",rosybrown:"bc8f8f",royalblue:"4169e1",saddlebrown:"8b4513",salmon:"fa8072",sandybrown:"f4a460",seagreen:"2e8b57",seashell:"fff5ee",sienna:"a0522d",silver:"c0c0c0",skyblue:"87ceeb",slateblue:"6a5acd",slategray:"708090",slategrey:"708090",snow:"fffafa",springgreen:"00ff7f",steelblue:"4682b4",tan:"d2b48c",teal:"008080",thistle:"d8bfd8",tomato:"ff6347",turquoise:"40e0d0",violet:"ee82ee",wheat:"f5deb3",white:"fff",whitesmoke:"f5f5f5",yellow:"ff0",yellowgreen:"9acd32"},$=i.hexNames=M(K),tt=(Y="[-\\+]?\\d+%?",V="[-\\+]?\\d*\\.\\d+%?",X="(?:"+V+")|(?:"+Y+")",Q="[\\s|\\(]+("+X+")[,|\\s]+("+X+")[,|\\s]+("+X+")\\s*\\)?",J="[\\s|\\(]+("+X+")[,|\\s]+("+X+")[,|\\s]+("+X+")[,|\\s]+("+X+")\\s*\\)?",{CSS_UNIT:new RegExp(X),rgb:new RegExp("rgb"+Q),rgba:new RegExp("rgba"+J),hsl:new RegExp("hsl"+Q),hsla:new RegExp("hsla"+J),hsv:new RegExp("hsv"+Q),hsva:new RegExp("hsva"+J),hex3:/^#?([0-9a-fA-F]{1})([0-9a-fA-F]{1})([0-9a-fA-F]{1})$/,hex6:/^#?([0-9a-fA-F]{2})([0-9a-fA-F]{2})([0-9a-fA-F]{2})$/,hex4:/^#?([0-9a-fA-F]{1})([0-9a-fA-F]{1})([0-9a-fA-F]{1})([0-9a-fA-F]{1})$/,hex8:/^#?([0-9a-fA-F]{2})([0-9a-fA-F]{2})([0-9a-fA-F]{2})([0-9a-fA-F]{2})$/});void 0!==r&&r.exports?r.exports=i:"function"==typeof t&&t.amd?t(function(){return i;}):window.tinycolor=i;})(Math);},{}],179:[function(t,e,r){function i(t){return t.replace(/^\s*|\s*$/g,"");}r=e.exports=i,r.left=function(t){return t.replace(/^\s*/,"");},r.right=function(t){return t.replace(/\s*$/,"");};},{}],180:[function(t,e,r){"use strict";function i(){this.protocol=null,this.slashes=null,this.auth=null,this.host=null,this.port=null,this.hostname=null,this.hash=null,this.search=null,this.query=null,this.pathname=null,this.path=null,this.href=null;}function n(t,e,r){if(t&&h.isObject(t)&&t instanceof i)return t;var n=new i();return n.parse(t,e,r),n;}function a(t){return h.isString(t)&&(t=n(t)),t instanceof i?t.format():i.prototype.format.call(t);}function o(t,e){return n(t,!1,!0).resolve(e);}function s(t,e){return t?n(t,!1,!0).resolveObject(e):e;}var u=t("punycode"),h=t("./util");r.parse=n,r.resolve=o,r.resolveObject=s,r.format=a,r.Url=i;var l=/^([a-z0-9.+-]+:)/i,f=/:[0-9]*$/,c=/^(\/\/?(?!\/)[^\?\s]*)(\?[^\s]*)?$/,d=["<",">",'"',"`"," ","\r","\n","\t"],p=["{","}","|","\\","^","`"].concat(d),m=["'"].concat(p),b=["%","/","?",";","#"].concat(m),g=["/","?","#"],_=255,v=/^[+a-z0-9A-Z_-]{0,63}$/,y=/^([+a-z0-9A-Z_-]{0,63})(.*)$/,w={javascript:!0,"javascript:":!0},E={javascript:!0,"javascript:":!0},x={http:!0,https:!0,ftp:!0,gopher:!0,file:!0,"http:":!0,"https:":!0,"ftp:":!0,"gopher:":!0,"file:":!0},S=t("querystring");i.prototype.parse=function(t,e,r){if(!h.isString(t))throw new TypeError("Parameter 'url' must be a string, not "+typeof t);var i=t.indexOf("?"),n=-1!==i&&i127?B+="x":B+=L[D];if(!B.match(v)){var z=C.slice(0,T),j=C.slice(T+1),U=L.match(y);U&&(z.push(U[1]),j.unshift(U[2])),j.length&&(s="/"+j.join(".")+s),this.hostname=z.join(".");break;}}}this.hostname.length>_?this.hostname="":this.hostname=this.hostname.toLowerCase(),P||(this.hostname=u.toASCII(this.hostname));var F=this.port?":"+this.port:"",G=this.hostname||"";this.host=G+F,this.href+=this.host,P&&(this.hostname=this.hostname.substr(1,this.hostname.length-2),"/"!==s[0]&&(s="/"+s));}if(!w[p])for(T=0,O=m.length;T0)&&r.host.split("@");k&&(r.auth=k.shift(),r.host=r.hostname=k.shift());}return r.search=t.search,r.query=t.query,h.isNull(r.pathname)&&h.isNull(r.search)||(r.path=(r.pathname?r.pathname:"")+(r.search?r.search:"")),r.href=r.format(),r;}if(!w.length)return r.pathname=null,r.search?r.path="/"+r.search:r.path=null,r.href=r.format(),r;for(var M=w.slice(-1)[0],A=(r.host||t.host||w.length>1)&&("."===M||".."===M)||""===M,I=0,T=w.length;T>=0;T--)M=w[T],"."===M?w.splice(T,1):".."===M?(w.splice(T,1),I++):I&&(w.splice(T,1),I--);if(!v&&!y)for(;I--;I)w.unshift("..");!v||""===w[0]||w[0]&&"/"===w[0].charAt(0)||w.unshift(""),A&&"/"!==w.join("/").substr(-1)&&w.push("");var R=""===w[0]||w[0]&&"/"===w[0].charAt(0);if(S){r.hostname=r.host=R?"":w.length?w.shift():"";k=!!(r.host&&r.host.indexOf("@")>0)&&r.host.split("@");k&&(r.auth=k.shift(),r.host=r.hostname=k.shift());}return v=v||r.host&&w.length,v&&!R&&w.unshift(""),w.length?r.pathname=w.join("/"):(r.pathname=null,r.path=null),h.isNull(r.pathname)&&h.isNull(r.search)||(r.path=(r.pathname?r.pathname:"")+(r.search?r.search:"")),r.auth=t.auth||r.auth,r.slashes=r.slashes||t.slashes,r.href=r.format(),r;},i.prototype.parseHost=function(){var t=this.host,e=f.exec(t);e&&(e=e[0],":"!==e&&(this.port=e.substr(1)),t=t.substr(0,t.length-e.length)),t&&(this.hostname=t);};},{"./util":181,punycode:134,querystring:137}],181:[function(t,e,r){"use strict";e.exports={isString:function(t){return"string"==typeof t;},isObject:function(t){return"object"==typeof t&&null!==t;},isNull:function(t){return null===t;},isNullOrUndefined:function(t){return null==t;}};},{}],182:[function(t,e,r){(function(r){(function(){function i(){void 0!==r&&"development"!=r.env.NODE_ENV||console.log.apply(console,arguments);}var n,a={};"object"==typeof e?e.exports=a:self.UTIF=a,n="function"==typeof t?t("pako"):self.pako,function(t,e){var r,n,a;r="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(t){return typeof t;}:function(t){return t&&"function"==typeof Symbol&&t.constructor===Symbol&&t!==Symbol.prototype?"symbol":typeof t;},n=function(){function t(t){this.message="JPEG error: "+t;}return t.prototype=Error(),t.prototype.name="JpegError",t.constructor=t;}(),a=function(){function t(t,e){this.message=t,this.g=e;}return t.prototype=Error(),t.prototype.name="DNLMarkerError",t.constructor=t;}(),function(){function e(){this.M=null,this.B=-1;}function i(t,e){for(var r,i,n=0,a=[],o=16;0>L&1;if(O=t[e++],255===O){var r=t[e++];if(r){if(220===r&&R){e+=2;var o=t[e++]<<8|t[e++];if(0>>7;}function m(t){for(;;){if(t=t[p()],"number"==typeof t)return t;if("object"!==(void 0===t?"undefined":r(t)))throw new n("invalid huffman sequence");}}function b(t){for(var e=0;0=1<r;){var i=m(t.o),n=15&i;if(i>>=4,0===n){if(15>i)break;r+=16;}else r+=i,t.a[e+h[r]]=g(n),r++;}}function v(t,e){var r=m(t.D);r=0===r?0:g(r)<>=4,0===n){if(15>i){B=b(i)+(1<t.a[r]?-1:1;switch(D){case 0:if(a=m(t.o),r=15&a,a>>=4,0===r)15>a?(B=b(a)+(1<=G)throw new n("marker was not found");if(!(65488<=G&&65495>=G))break;e+=2;}return(G=u(t,e))&&G.f&&((0,_util.warn)("decodeScan - unexpected Scan data, current marker is: "+G.f),e=G.offset),e-C;}function s(t,e){for(var r=e.c,i=e.l,a=new Int16Array(64),o=0;oc;c+=8){var d=f[u+c],p=f[u+c+1],m=f[u+c+2],b=f[u+c+3],g=f[u+c+4],_=f[u+c+5],v=f[u+c+6],y=f[u+c+7];if(d*=l[c],0==(p|m|b|g|_|v|y))d=5793*d+512>>10,h[c]=d,h[c+1]=d,h[c+2]=d,h[c+3]=d,h[c+4]=d,h[c+5]=d,h[c+6]=d,h[c+7]=d;else{p*=l[c+1],m*=l[c+2],b*=l[c+3],g*=l[c+4],_*=l[c+5],v*=l[c+6],y*=l[c+7];var w=5793*d+128>>8,E=5793*g+128>>8,x=m,S=v;g=2896*(p-y)+128>>8,y=2896*(p+y)+128>>8,b<<=4,_<<=4,w=w+E+1>>1,E=w-E,d=3784*x+1567*S+128>>8,x=1567*x-3784*S+128>>8,S=d,g=g+_+1>>1,_=g-_,y=y+b+1>>1,b=y-b,w=w+S+1>>1,S=w-S,E=E+x+1>>1,x=E-x,d=2276*g+3406*y+2048>>12,g=3406*g-2276*y+2048>>12,y=d,d=799*b+4017*_+2048>>12,b=4017*b-799*_+2048>>12,_=d,h[c]=w+y,h[c+7]=w-y,h[c+1]=E+_,h[c+6]=E-_,h[c+2]=x+b,h[c+5]=x-b,h[c+3]=S+g,h[c+4]=S-g;}}for(l=0;8>l;++l)d=h[l],p=h[l+8],m=h[l+16],b=h[l+24],g=h[l+32],_=h[l+40],v=h[l+48],y=h[l+56],0==(p|m|b|g|_|v|y)?(d=5793*d+8192>>14,d=-2040>d?0:2024<=d?255:d+2056>>4,f[u+l]=d,f[u+l+8]=d,f[u+l+16]=d,f[u+l+24]=d,f[u+l+32]=d,f[u+l+40]=d,f[u+l+48]=d,f[u+l+56]=d):(w=5793*d+2048>>12,E=5793*g+2048>>12,x=m,S=v,g=2896*(p-y)+2048>>12,y=2896*(p+y)+2048>>12,w=4112+(w+E+1>>1),E=w-E,d=3784*x+1567*S+2048>>12,x=1567*x-3784*S+2048>>12,S=d,g=g+_+1>>1,_=g-_,y=y+b+1>>1,b=y-b,w=w+S+1>>1,S=w-S,E=E+x+1>>1,x=E-x,d=2276*g+3406*y+2048>>12,g=3406*g-2276*y+2048>>12,y=d,d=799*b+4017*_+2048>>12,b=4017*b-799*_+2048>>12,_=d,d=w+y,y=w-y,p=E+_,v=E-_,m=x+b,_=x-b,b=S+g,g=S-g,d=16>d?0:4080<=d?255:d>>4,p=16>p?0:4080<=p?255:p>>4,m=16>m?0:4080<=m?255:m>>4,b=16>b?0:4080<=b?255:b>>4,g=16>g?0:4080<=g?255:g>>4,_=16>_?0:4080<=_?255:_>>4,v=16>v?0:4080<=v?255:v>>4,y=16>y?0:4080<=y?255:y>>4,f[u+l]=d,f[u+l+8]=p,f[u+l+16]=m,f[u+l+24]=b,f[u+l+32]=g,f[u+l+40]=_,f[u+l+48]=v,f[u+l+56]=y);}return e.a;}function u(t,e){var r=2=i)return null;var n=t[e]<<8|t[e+1];if(65472<=n&&65534>=n)return{f:null,F:n,offset:e};for(var a=t[r]<<8|t[r+1];!(65472<=a&&65534>=a);){if(++r>=i)return null;a=t[r]<<8|t[r+1];}return{f:n.toString(16),F:a,offset:r};}var h=new Uint8Array([0,1,8,16,9,2,3,10,17,24,32,25,18,11,4,5,12,19,26,33,40,48,41,34,27,20,13,6,7,14,21,28,35,42,49,56,57,50,43,36,29,22,15,23,30,37,44,51,58,59,52,45,38,31,39,46,53,60,61,54,47,55,62,63]);e.prototype={parse:function(t){function e(){var e=t[d]<<8|t[d+1];return d+=2,e;}function r(){var r=e();r=d+r-2;var i=u(t,r,d);return i&&i.f&&((0,_util.warn)("readDataBlock - incorrect length, current marker is: "+i.f),r=i.offset),r=t.subarray(d,r),d+=r.length,r;}function l(t){for(var e=Math.ceil(t.v/8/t.s),r=Math.ceil(t.g/8/t.u),i=0;i>4)for(v=0;64>v;v++)y=h[v],E[y]=t[d++];else{if(1!=w>>4)throw new n("DQT - invalid table spec");for(v=0;64>v;v++)y=h[v],E[y]=e();}f[15&w]=E;}break;case 65472:case 65473:case 65474:if(x)throw new n("Only single frame JPEGs supported");e();var x={};for(x.X=65473===_,x.S=65474===_,x.precision=t[d++],_=e(),x.g=c||_,x.v=e(),x.b=[],x.C={},v=t[d++],_=E=w=0;_>4,k=15&t[d+1];wv;v++,d++)S+=E[v]=t[d];for(k=new Uint8Array(S),v=0;v>4?g:b)[15&w]=i(E,k);}break;case 65501:e();var M=e();break;case 65498:for(v=1==++m&&!c,e(),w=t[d++],y=[],_=0;_>4],A.o=b[15&E],y.push(A);}_=t[d++],w=t[d++],E=t[d++];try{var I=o(t,d,x,y,M,_,w,E>>4,15&E,v);d+=I;}catch(e){if(e instanceof a)return(0,_util.warn)('Attempting to re-parse JPEG image using "scanLines" parameter found in DNL marker (0xFFDC) segment.'),this.parse(t,{N:e.g});throw e;}break;case 65500:d+=4;break;case 65535:255!==t[d]&&d--;break;default:if(255===t[d-3]&&192<=t[d-2]&&254>=t[d-2])d-=3;else{if(!(v=u(t,d-2))||!v.f)throw new n("unknown marker "+_.toString(16));(0,_util.warn)("JpegImage.parse - unexpected data, current marker is: "+v.f),d=v.offset;}}_=e();}for(this.width=x.v,this.height=x.g,this.A=p,this.b=[],_=0;_>8)+a[n+1];return u;},w:function(){return this.A?!!this.A.W:3===this.i?0!==this.B:1===this.B;},I:function(t){for(var e,r,i,n=0,a=t.length;n>>3)]),null==d&&(d=s.t325);var p=new Uint8Array(s.height*(f>>>3)),m=0;if(null!=s.t322){for(var b=s.t322[0],g=s.t323[0],_=Math.floor((s.width+b-1)/b),v=Math.floor((s.height+g-1)/g),y=new Uint8Array(0|Math.ceil(b*g*l/8)),w=0;w>>8;else{if(12!=b)throw new Error("unsupported bit depth "+b);for(d=0;d>>4,a[o++]=255&(_[d]<<4|_[d+1]>>>8),a[o++]=255&_[d+1];}}else{var y=new t.JpegDecoder();y.parse(h);var w=y.getData(y.width,y.height);for(d=0;d1),!_){if(255==e[r]&&e[r+1]==l)return{jpegOffset:r};if(null!=v&&(255==e[r+y]&&e[r+y+1]==l?b=r+y:i("JPEGInterchangeFormat does not point to SOI"),null==w?i("JPEGInterchangeFormatLength field is missing"):(y>=g||y+E<=g)&&i("JPEGInterchangeFormatLength field value is invalid"),null!=b))return{jpegOffset:b};}if(null!=S&&(k=S[0],M=S[1]),null!=v&&null!=w)if(E>=2&&y+E<=g){for(a=255==e[r+y+E-2]&&e[r+y+E-1]==l?new Uint8Array(E-2):new Uint8Array(E),s=0;s offset to first strip or tile");if(null==a){var T=0,R=[];R[T++]=255,R[T++]=l;var P=t.t519;if(null==P)throw new Error("JPEGQTables tag is missing");for(s=0;s>>8,R[T++]=255&O,R[T++]=s|h<<4,u=0;u<16;u++)R[T++]=e[r+C[s]+u];for(u=0;u>>8&255,R[T++]=255&t.height,R[T++]=t.width>>>8&255,R[T++]=255&t.width,R[T++]=A,1==A)R[T++]=1,R[T++]=17,R[T++]=0;else for(s=0;s<3;s++)R[T++]=s+1,R[T++]=0!=s?17:(15&k)<<4|15&M,R[T++]=s;null!=I&&0!=I[0]&&(R[T++]=255,R[T++]=d,R[T++]=0,R[T++]=4,R[T++]=I[0]>>>8&255,R[T++]=255&I[0]),a=new Uint8Array(R);}var L=-1;for(s=0;s>>8&255,a[D++]=255&t.height,a[D++]=t.width>>>8&255,a[D++]=255&t.width,a[D++]=A,1==A)a[D++]=1,a[D++]=17,a[D++]=0;else for(s=0;s<3;s++)a[D++]=s+1,a[D++]=0!=s?17:(15&k)<<4|15&M,a[D++]=s;}if(255==e[g]&&e[g+1]==m){var N=e[g+2]<<8|e[g+3];for(o=new Uint8Array(N+2),o[0]=e[g],o[1]=e[g+1],o[2]=e[g+2],o[3]=e[g+3],s=0;s>>8&255,h[l.sofPosition+6]=255&e.height,h[l.sofPosition+7]=e.width>>>8&255,h[l.sofPosition+8]=255&e.width,255==r[i]&&r[i+1]==SOS||(h.set(l.sosMarker,bufoff),bufoff+=sosMarker.length),d=0;d=0&&u<128)for(var h=0;h=-127&&u<0){for(h=0;h<1-u;h++)o[n]=a[e],n++;e++;}}},t.decode._decodeThunder=function(t,e,r,i,n){for(var a=[0,1,0,-1],o=[0,1,2,3,0,-3,-2,-1],s=e+r,u=2*n,h=0;e>>6,c=63&l;if(e++,3==f&&(h=15&c,i[u>>>1]|=h<<4*(1-u&1),u++),0==f)for(var d=0;d>>1]|=h<<4*(1-u&1),u++;if(2==f)for(d=0;d<2;d++){var p=c>>>3*(1-d)&7;4!=p&&(h+=o[p],i[u>>>1]|=h<<4*(1-u&1),u++);}if(1==f)for(d=0;d<3;d++){p=c>>>2*(2-d)&3;2!=p&&(h+=a[p],i[u>>>1]|=h<<4*(1-u&1),u++);}}},t.decode._dmap={1:0,"011":1,"000011":2,"0000011":3,"010":-1,"000010":-2,"0000010":-3},t.decode._lens=function(){var t=function(t,e,r,i){for(var n=0;n>>3>>3]>>>7-(7&h)&1),2==s&&(S=e[h>>>3]>>>(7&h)&1),h++,f+=S,"H"==w){if(null!=u._lens[v][f]){var k=u._lens[v][f];f="",l+=k,k<64&&(u._addNtimes(c,l,v),m+=l,v=1-v,l=0,E--,0==E&&(w=""));}}else"0001"==f&&(f="",u._addNtimes(c,_-m,v),m=_),"001"==f&&(f="",w="H",E=2),null!=u._dmap[f]&&(b=g+u._dmap[f],u._addNtimes(c,b-m,v),m=b,f="",v=1-v);c.length==o&&""==w&&(u._writeBits(c,n,8*a+y*x),v=0,y++,m=0,d=u._makeDiff(c),c=[]);}},t.decode._findDiff=function(t,e,r){for(var i=0;i=e&&t[i+1]==r)return t[i];},t.decode._makeDiff=function(t){var e=[];1==t[0]&&e.push(0,1);for(var r=1;r>>3>>3]>>>7-(7&h)&1),2==s&&(k=e[h>>>3]>>>(7&h)&1),h++,f+=k,x){if(null!=u._lens[v][f]){var M=u._lens[v][f];f="",l+=M,M<64&&(u._addNtimes(c,l,v),v=1-v,l=0);}}else if("H"==w){if(null!=u._lens[v][f]){M=u._lens[v][f];f="",l+=M,M<64&&(u._addNtimes(c,l,v),m+=l,v=1-v,l=0,E--,0==E&&(w=""));}}else"0001"==f&&(f="",u._addNtimes(c,_-m,v),m=_),"001"==f&&(f="",w="H",E=2),null!=u._dmap[f]&&(b=g+u._dmap[f],u._addNtimes(c,b-m,v),m=b,f="",v=1-v);f.endsWith("000000000001")&&(y>=0&&u._writeBits(c,n,8*a+y*S),1==s&&(x=1==(e[h>>>3]>>>7-(7&h)&1)),2==s&&(x=1==(e[h>>>3]>>>(7&h)&1)),h++,null==u._decodeG3.allow2D&&(u._decodeG3.allow2D=x),u._decodeG3.allow2D||(x=!0,h--),f="",v=0,y++,m=0,d=u._makeDiff(c),c=[]);}c.length==o&&u._writeBits(c,n,8*a+y*S);},t.decode._addNtimes=function(t,e,r){for(var i=0;i>>3]|=t[i]<<7-(r+i&7);},t.decode._decodeLZW=function(e,r,i,n){if(null==t.decode._lzwTab){for(var a=new Uint32Array(65535),o=new Uint16Array(65535),s=new Uint8Array(2e6),u=0;u<256;u++)s[u<<2]=u,a[u]=u<<2,o[u]=1;t.decode._lzwTab=[a,o,s];}for(var h=t.decode._copyData,l=t.decode._lzwTab[0],f=t.decode._lzwTab[1],c=(s=t.decode._lzwTab[2],258),d=1032,p=9,m=r<<3,b=256,g=257,_=0,v=0,y=0;_=e[m>>>3]<<16|e[m+8>>>3]<<8|e[m+16>>>3],v=_>>24-(7&m)-p&(1<>>3]<<16|e[m+8>>>3]<<8|e[m+16>>>3],v=_>>24-(7&m)-p&(1<=c)l[c]=d,s[l[c]]=w[0],f[c]=1,d=d+1+3&-4,c++;else{l[c]=d;var x=l[y],S=f[y];h(s,x,s,d,S),s[d+S]=s[w],S++,f[c]=S,c++,d=d+S+3&-4;}c+1==1<=c)l[c]=d,f[c]=0,c++;else{l[c]=d;x=l[y],S=f[y];h(s,x,s,d,S),s[d+S]=s[d],S++,f[c]=S,c++,h(s,d,i,n,S),n+=S,d=d+S+3&-4;}c+1==1<4&&(e.writeUint(r,i,o),p=o),2==l&&e.writeASCII(r,p,f),3==l)for(var m=0;m4&&(d+=1&d,o+=d),i+=4;}return[i,o];},t.toRGBA8=function(t){var e=t.width,r=t.height,n=e*r,a=4*n,o=t.data,s=new Uint8Array(4*n),u=t.t262[0],h=t.t258?Math.min(32,t.t258[0]):1,l=t.isLE?1:0;if(0==u)for(var f=Math.ceil(h*e/8),c=0;c>3)]>>7-(7&m)&1;s[b]=s[b+1]=s[b+2]=255*(1-g),s[b+3]=255;}if(4==h)for(m=0;m>1)]>>4-4*(1&m)&15;s[b]=s[b+1]=s[b+2]=17*(15-g),s[b+3]=255;}if(8==h)for(m=0;m>3)]>>7-(7&m)&1;s[b]=s[b+1]=s[b+2]=255*g,s[b+3]=255;}if(2==h)for(m=0;m>2)]>>6-2*(3&m)&3;s[b]=s[b+1]=s[b+2]=85*g,s[b+3]=255;}if(8==h)for(m=0;m0)for(m=0;m>8,s[b+1]=y[256+w]>>8,s[b+2]=y[512+w]>>8,s[b+3]=255;}}else if(5==u){_=t.t258?t.t258.length:4;var E=_>4?1:0;for(m=0;m>8&255,t[e+1]=255&r;},writeUint:function(t,e,r){t[e]=r>>24&255,t[e+1]=r>>16&255,t[e+2]=r>>8&255,t[e+3]=r>>0&255;},writeASCII:function(t,e,r){for(var i=0;i0&&(p=setTimeout(function(){if(!h){h=!0,d.abort("timeout");var t=new Error("XMLHttpRequest timeout");t.code="ETIMEDOUT",i(t);}},t.timeout)),d.setRequestHeader)for(s in _)_.hasOwnProperty(s)&&d.setRequestHeader(s,_[s]);else if(t.headers&&!n(t.headers))throw new Error("Headers cannot be set on an XDomainRequest object");return"responseType"in t&&(d.responseType=t.responseType),"beforeSend"in t&&"function"==typeof t.beforeSend&&t.beforeSend(d),d.send(g||null),d;}function u(t){try{if("document"===t.responseType)return t.responseXML;var e=t.responseXML&&"parsererror"===t.responseXML.documentElement.nodeName;if(""===t.responseType&&!e)return t.responseXML;}catch(t){}return null;}function h(){}var l=t("global/window"),f=t("is-function"),c=t("parse-headers"),d=t("xtend");e.exports=o,e.exports.default=o,o.XMLHttpRequest=l.XMLHttpRequest||h,o.XDomainRequest="withCredentials"in new o.XMLHttpRequest()?o.XMLHttpRequest:l.XDomainRequest,i(["get","put","post","patch","head","delete"],function(t){o["delete"===t?"del":t]=function(e,r,i){return r=a(e,r,i),r.method=t.toUpperCase(),s(r);};});},{"global/window":71,"is-function":78,"parse-headers":106,xtend:189}],188:[function(t,e,r){e.exports=void 0!==self.DOMParser?function(t){var e=new self.DOMParser();return e.parseFromString(t,"application/xml");}:void 0!==self.ActiveXObject&&new self.ActiveXObject("Microsoft.XMLDOM")?function(t){var e=new self.ActiveXObject("Microsoft.XMLDOM");return e.async="false",e.loadXML(t),e;}:function(t){var e=document.createElement("div");return e.innerHTML=t,e;};},{}],189:[function(t,e,r){function i(){for(var t={},e=0;e2&&void 0!==arguments[2]?arguments[2]:1;t.a*=r;var i=e.a+t.a-e.a*t.a,n=(t.r*t.a+e.r*e.a*(1-t.a))/i,a=(t.g*t.a+e.g*e.a*(1-t.a))/i,o=(t.b*t.a+e.b*e.a*(1-t.a))/i;return{r:n,g:a,b:o,a:i};}function n(t,e){var r=arguments.length>2&&void 0!==arguments[2]?arguments[2]:1;t.a*=r;var i=e.a+t.a-e.a*t.a,n=(e.r*e.a+t.r*t.a*(1-e.a))/i,a=(e.g*e.a+t.g*t.a*(1-e.a))/i,o=(e.b*e.a+t.b*t.a*(1-e.a))/i;return{r:n,g:a,b:o,a:i};}function a(t,e){var r=arguments.length>2&&void 0!==arguments[2]?arguments[2]:1;t.a*=r;var i=e.a+t.a-e.a*t.a,n=t.r*t.a,a=t.g*t.a,o=t.b*t.a,s=e.r*e.a,u=e.g*e.a,h=e.b*e.a,l=(n*s+n*(1-e.a)+s*(1-t.a))/i,f=(a*u+a*(1-e.a)+u*(1-t.a))/i,c=(o*h+o*(1-e.a)+h*(1-t.a))/i;return{r:l,g:f,b:c,a:i};}function o(t,e){var r=arguments.length>2&&void 0!==arguments[2]?arguments[2]:1;t.a*=r;var i=e.a+t.a-e.a*t.a,n=t.r*t.a,a=t.g*t.a,o=t.b*t.a,s=e.r*e.a,u=e.g*e.a,h=e.b*e.a,l=(n+s)/i,f=(a+u)/i,c=(o+h)/i;return{r:l,g:f,b:c,a:i};}function s(t,e){var r=arguments.length>2&&void 0!==arguments[2]?arguments[2]:1;t.a*=r;var i=e.a+t.a-e.a*t.a,n=t.r*t.a,a=t.g*t.a,o=t.b*t.a,s=e.r*e.a,u=e.g*e.a,h=e.b*e.a,l=(n*e.a+s*t.a-n*s+n*(1-e.a)+s*(1-t.a))/i,f=(a*e.a+u*t.a-a*u+a*(1-e.a)+u*(1-t.a))/i,c=(o*e.a+h*t.a-o*h+o*(1-e.a)+h*(1-t.a))/i;return{r:l,g:f,b:c,a:i};}function u(t,e){var r=arguments.length>2&&void 0!==arguments[2]?arguments[2]:1;t.a*=r;var i=e.a+t.a-e.a*t.a,n=t.r*t.a,a=t.g*t.a,o=t.b*t.a,s=e.r*e.a,u=e.g*e.a,h=e.b*e.a,l=(2*s<=e.a?2*n*s+n*(1-e.a)+s*(1-t.a):n*(1+e.a)+s*(1+t.a)-2*s*n-e.a*t.a)/i,f=(2*u<=e.a?2*a*u+a*(1-e.a)+u*(1-t.a):a*(1+e.a)+u*(1+t.a)-2*u*a-e.a*t.a)/i,c=(2*h<=e.a?2*o*h+o*(1-e.a)+h*(1-t.a):o*(1+e.a)+h*(1+t.a)-2*h*o-e.a*t.a)/i;return{r:l,g:f,b:c,a:i};}function h(t,e){var r=arguments.length>2&&void 0!==arguments[2]?arguments[2]:1;t.a*=r;var i=e.a+t.a-e.a*t.a,n=t.r*t.a,a=t.g*t.a,o=t.b*t.a,s=e.r*e.a,u=e.g*e.a,h=e.b*e.a,l=(Math.min(n*e.a,s*t.a)+n*(1-e.a)+s*(1-t.a))/i,f=(Math.min(a*e.a,u*t.a)+a*(1-e.a)+u*(1-t.a))/i,c=(Math.min(o*e.a,h*t.a)+o*(1-e.a)+h*(1-t.a))/i;return{r:l,g:f,b:c,a:i};}function l(t,e){var r=arguments.length>2&&void 0!==arguments[2]?arguments[2]:1;t.a*=r;var i=e.a+t.a-e.a*t.a,n=t.r*t.a,a=t.g*t.a,o=t.b*t.a,s=e.r*e.a,u=e.g*e.a,h=e.b*e.a,l=(Math.max(n*e.a,s*t.a)+n*(1-e.a)+s*(1-t.a))/i,f=(Math.max(a*e.a,u*t.a)+a*(1-e.a)+u*(1-t.a))/i,c=(Math.max(o*e.a,h*t.a)+o*(1-e.a)+h*(1-t.a))/i;return{r:l,g:f,b:c,a:i};}function f(t,e){var r=arguments.length>2&&void 0!==arguments[2]?arguments[2]:1;t.a*=r;var i=e.a+t.a-e.a*t.a,n=t.r*t.a,a=t.g*t.a,o=t.b*t.a,s=e.r*e.a,u=e.g*e.a,h=e.b*e.a,l=(2*n<=t.a?2*n*s+n*(1-e.a)+s*(1-t.a):n*(1+e.a)+s*(1+t.a)-2*s*n-e.a*t.a)/i,f=(2*a<=t.a?2*a*u+a*(1-e.a)+u*(1-t.a):a*(1+e.a)+u*(1+t.a)-2*u*a-e.a*t.a)/i,c=(2*o<=t.a?2*o*h+o*(1-e.a)+h*(1-t.a):o*(1+e.a)+h*(1+t.a)-2*h*o-e.a*t.a)/i;return{r:l,g:f,b:c,a:i};}function c(t,e){var r=arguments.length>2&&void 0!==arguments[2]?arguments[2]:1;t.a*=r;var i=e.a+t.a-e.a*t.a,n=t.r*t.a,a=t.g*t.a,o=t.b*t.a,s=e.r*e.a,u=e.g*e.a,h=e.b*e.a,l=(n+s-2*Math.min(n*e.a,s*t.a))/i,f=(a+u-2*Math.min(a*e.a,u*t.a))/i,c=(o+h-2*Math.min(o*e.a,h*t.a))/i;return{r:l,g:f,b:c,a:i};}function d(t,e){var r=arguments.length>2&&void 0!==arguments[2]?arguments[2]:1;t.a*=r;var i=e.a+t.a-e.a*t.a,n=t.r*t.a,a=t.g*t.a,o=t.b*t.a,s=e.r*e.a,u=e.g*e.a,h=e.b*e.a,l=(n*e.a+s*t.a-2*n*s+n*(1-e.a)+s*(1-t.a))/i,f=(a*e.a+u*t.a-2*a*u+a*(1-e.a)+u*(1-t.a))/i,c=(o*e.a+h*t.a-2*o*h+o*(1-e.a)+h*(1-t.a))/i;return{r:l,g:f,b:c,a:i};}Object.defineProperty(r,"__esModule",{value:!0}),r.srcOver=i,r.dstOver=n,r.multiply=a,r.add=o,r.screen=s,r.overlay=u,r.darken=h,r.lighten=l,r.hardLight=f,r.difference=c,r.exclusion=d;},{}],191:[function(t,e,r){"use strict";function i(t,e,r){var i=arguments.length>3&&void 0!==arguments[3]?arguments[3]:{},n=arguments.length>4?arguments[4]:void 0;if("function"==typeof i&&(n=i,i={}),!(t instanceof this.constructor))return a.throwError.call(this,"The source must be a Jimp image",n);if("number"!=typeof e||"number"!=typeof r)return a.throwError.call(this,"x and y must be numbers",n);var u=i,h=u.mode,l=u.opacitySource,f=u.opacityDest;h||(h=o.BLEND_SOURCE_OVER),("number"!=typeof l||l<0||l>1)&&(l=1),("number"!=typeof f||f<0||f>1)&&(f=1);var c=s[h];e=Math.round(e),r=Math.round(r);var d=this;return 1!==f&&d.opacity(f),t.scanQuiet(0,0,t.bitmap.width,t.bitmap.height,function(t,i,n){var a=d.getPixelIndex(e+t,r+i,o.EDGE_CROP),s=c({r:this.bitmap.data[n+0]/255,g:this.bitmap.data[n+1]/255,b:this.bitmap.data[n+2]/255,a:this.bitmap.data[n+3]/255},{r:d.bitmap.data[a+0]/255,g:d.bitmap.data[a+1]/255,b:d.bitmap.data[a+2]/255,a:d.bitmap.data[a+3]/255},l);d.bitmap.data[a+0]=this.constructor.limit255(255*s.r),d.bitmap.data[a+1]=this.constructor.limit255(255*s.g),d.bitmap.data[a+2]=this.constructor.limit255(255*s.b),d.bitmap.data[a+3]=this.constructor.limit255(255*s.a);}),(0,a.isNodePattern)(n)&&n.call(this,null,this),this;}var n=t("@babel/runtime/helpers/interopRequireWildcard");Object.defineProperty(r,"__esModule",{value:!0}),r.default=i;var a=t("@jimp/utils"),o=n(t("../constants")),s=n(t("./composite-modes"));e.exports=r.default;},{"../constants":192,"./composite-modes":190,"@babel/runtime/helpers/interopRequireWildcard":12,"@jimp/utils":235}],192:[function(t,e,r){"use strict";Object.defineProperty(r,"__esModule",{value:!0}),r.EDGE_CROP=r.EDGE_WRAP=r.EDGE_EXTEND=r.BLEND_EXCLUSION=r.BLEND_DIFFERENCE=r.BLEND_HARDLIGHT=r.BLEND_LIGHTEN=r.BLEND_DARKEN=r.BLEND_OVERLAY=r.BLEND_SCREEN=r.BLEND_ADD=r.BLEND_MULTIPLY=r.BLEND_DESTINATION_OVER=r.BLEND_SOURCE_OVER=r.VERTICAL_ALIGN_BOTTOM=r.VERTICAL_ALIGN_MIDDLE=r.VERTICAL_ALIGN_TOP=r.HORIZONTAL_ALIGN_RIGHT=r.HORIZONTAL_ALIGN_CENTER=r.HORIZONTAL_ALIGN_LEFT=r.AUTO=void 0;var i=-1;r.AUTO=i;var n=1;r.HORIZONTAL_ALIGN_LEFT=n;var a=2;r.HORIZONTAL_ALIGN_CENTER=a;var o=4;r.HORIZONTAL_ALIGN_RIGHT=o;var s=8;r.VERTICAL_ALIGN_TOP=s;var u=16;r.VERTICAL_ALIGN_MIDDLE=u;var h=32;r.VERTICAL_ALIGN_BOTTOM=h;var l="srcOver";r.BLEND_SOURCE_OVER=l;var f="dstOver";r.BLEND_DESTINATION_OVER=f;var c="multiply";r.BLEND_MULTIPLY=c;var d="add";r.BLEND_ADD=d;var p="screen";r.BLEND_SCREEN=p;var m="overlay";r.BLEND_OVERLAY=m;var b="darken";r.BLEND_DARKEN=b;var g="lighten";r.BLEND_LIGHTEN=g;var _="hardLight";r.BLEND_HARDLIGHT=_;var v="difference";r.BLEND_DIFFERENCE=v;var y="exclusion";r.BLEND_EXCLUSION=y;var w=1;r.EDGE_EXTEND=w;var E=2;r.EDGE_WRAP=E;var x=3;r.EDGE_CROP=x;},{}],193:[function(t,e,r){(function(e){"use strict";function i(){}function n(t){return Object.prototype.toString.call(t).toLowerCase().indexOf("arraybuffer")>-1;}function a(t){for(var r=e.alloc(t.byteLength),i=new Uint8Array(t),n=0;n (HTTP: "+n.statusCode+")";return new Error(s);});}function s(t,e){M.default&&"function"==typeof M.default.readFile&&!t.match(/^(http|ftp)s?:\/\/./)?M.default.readFile(t,e):o({url:t},e);}function u(t){return t&&"object"===(0,k.default)(t)&&"number"==typeof t.width&&"number"==typeof t.height&&(e.isBuffer(t.data)||t.data instanceof Uint8Array||"function"==typeof Uint8ClampedArray&&t.data instanceof Uint8ClampedArray)&&(t.data.length===t.width*t.height*4||t.data.length===t.width*t.height*3);}function h(t){if(t.length%3!=0)throw new Error("Buffer length is incorrect");for(var r=e.allocUnsafe(t.length/3*4),i=0,n=0;n1&&void 0!==arguments[1]?arguments[1]:Y;Object.entries(t).forEach(function(t){var r=(0,g.default)(t,2),i=r[0],n=r[1];e[i]=n;});}function f(t){var e=arguments.length>1&&void 0!==arguments[1]?arguments[1]:Y;Object.entries(t).forEach(function(t){var r=(0,g.default)(t,2),i=r[0],n=r[1];e.prototype[i]=n;});}function c(t,e,r){var i="before-"+e,n=e.replace(/e$/,"")+"ed";Y.prototype[t]=function(){for(var e,a=arguments.length,o=new Array(a),s=0;s2&&void 0!==arguments[2]?arguments[2]:{};r=Object.assign(r,{methodName:t,eventName:e}),this.emit("any",r),t&&this.emit(t,r),this.emit(e,r);}},{key:"emitError",value:function(t,e){this.emitMulti(t,"error",e);}},{key:"getHeight",value:function(){return this.bitmap.height;}},{key:"getWidth",value:function(){return this.bitmap.width;}},{key:"inspect",value:function(){return"";}},{key:"toString",value:function(){return"[object Jimp]";}},{key:"getMIME",value:function(){var t=this._originalMime||r.MIME_PNG;return t;}},{key:"getExtension",value:function(){var t=this.getMIME();return z.getExtension(t);}},{key:"write",value:function(t,e){var r=this;if(!M.default||!M.default.createWriteStream)throw new Error("Cant access the filesystem. You can use the getBase64 method.");if("string"!=typeof t)return T.throwError.call(this,"path must be a string",e);if(void 0===e&&(e=i),"function"!=typeof e)return T.throwError.call(this,"cb must be a function",e);var n=z.getType(t)||this.getMIME(),a=A.default.parse(t);return a.dir&&P.default.sync(a.dir),this.getBuffer(n,function(i,n){if(i)return T.throwError.call(r,i,e);var a=M.default.createWriteStream(t);a.on("open",function(){a.write(n),a.end();}).on("error",function(t){return T.throwError.call(r,t,e);}),a.on("finish",function(){e.call(r,null,r);});}),this;}},{key:"getBase64",value:function(t,e){return t===r.AUTO&&(t=this.getMIME()),"string"!=typeof t?T.throwError.call(this,"mime must be a string",e):"function"!=typeof e?T.throwError.call(this,"cb must be a function",e):(this.getBuffer(t,function(r,i){if(r)return T.throwError.call(this,r,e);var n="data:"+t+";base64,"+i.toString("base64");e.call(this,null,n);}),this);}},{key:"hash",value:function(t,e){if(t=t||64,"function"==typeof t&&(e=t,t=64),"number"!=typeof t)return T.throwError.call(this,"base must be a number",e);if(t<2||t>64)return T.throwError.call(this,"base must be a number between 2 and 64",e);var r=this.pHash();for(r=(0,R.default)(R.default.BIN,F.slice(0,t))(r);r.length=this.bitmap.width&&(a=this.bitmap.width-1),e<0&&(o=0),e>=this.bitmap.height&&(o=this.bitmap.height-1)),i===r.EDGE_WRAP&&(t<0&&(a=this.bitmap.width+t),t>=this.bitmap.width&&(a=t%this.bitmap.width),e<0&&(a=this.bitmap.height+e),e>=this.bitmap.height&&(o=e%this.bitmap.height));var s=this.bitmap.width*o+a<<2;return(a<0||a>=this.bitmap.width)&&(s=-1),(o<0||o>=this.bitmap.height)&&(s=-1),(0,T.isNodePattern)(n)&&n.call(this,null,s),s;}},{key:"getPixelColor",value:function(t,e,r){if("number"!=typeof t||"number"!=typeof e)return T.throwError.call(this,"x and y must be numbers",r);t=Math.round(t),e=Math.round(e);var i=this.getPixelIndex(t,e),n=this.bitmap.data.readUInt32BE(i);return(0,T.isNodePattern)(r)&&r.call(this,null,n),n;}},{key:"setPixelColor",value:function(t,e,r,i){if("number"!=typeof t||"number"!=typeof e||"number"!=typeof r)return T.throwError.call(this,"hex, x and y must be numbers",i);e=Math.round(e),r=Math.round(r);var n=this.getPixelIndex(e,r);return this.bitmap.data.writeUInt32BE(t,n),(0,T.isNodePattern)(i)&&i.call(this,null,this),this;}},{key:"hasAlpha",value:function(){for(var t=0;t255)return T.throwError.call(this,"r must be between 0 and 255",n);if((e<0||e>255)&&T.throwError.call(this,"g must be between 0 and 255",n),r<0||r>255)return T.throwError.call(this,"b must be between 0 and 255",n);if(i<0||i>255)return T.throwError.call(this,"a must be between 0 and 255",n);t=Math.round(t),r=Math.round(r),e=Math.round(e),i=Math.round(i);var a=t*Math.pow(256,3)+e*Math.pow(256,2)+r*Math.pow(256,1)+i*Math.pow(256,0);return(0,T.isNodePattern)(n)&&n.call(this,null,a),a;},Y.intToRGBA=function(t,e){if("number"!=typeof t)return T.throwError.call(this,"i must be a number",e);var r={};return r.r=Math.floor(t/Math.pow(256,3)),r.g=Math.floor((t-r.r*Math.pow(256,3))/Math.pow(256,2)),r.b=Math.floor((t-r.r*Math.pow(256,3)-r.g*Math.pow(256,2))/Math.pow(256,1)),r.a=Math.floor((t-r.r*Math.pow(256,3)-r.g*Math.pow(256,2)-r.b*Math.pow(256,1))/Math.pow(256,0)),(0,T.isNodePattern)(e)&&e.call(this,null,r),r;},Y.cssColorToHex=function(t){return t=t||0,"number"==typeof t?Number(t):parseInt((0,O.default)(t).toHex8(),16);},Y.limit255=function(t){return t=Math.max(t,0),t=Math.min(t,255),t;},Y.diff=function(t,e){var r=arguments.length>2&&void 0!==arguments[2]?arguments[2]:.1;if(!(t instanceof Y&&e instanceof Y))return T.throwError.call(this,"img1 and img2 must be an Jimp images");var i=t.bitmap,n=e.bitmap;if(i.width===n.width&&i.height===n.height||(i.width*i.height>n.width*n.height?t=t.cloneQuiet().resize(n.width,n.height):e=e.cloneQuiet().resize(i.width,i.height)),"number"!=typeof r||r<0||r>1)return T.throwError.call(this,"threshold must be a number between 0 and 1");var a=new Y(i.width,i.height,4294967295),o=(0,C.default)(i.data,n.data,a.bitmap.data,a.bitmap.width,a.bitmap.height,{threshold:r});return{percent:o/(a.bitmap.width*a.bitmap.height),image:a};},Y.distance=function(t,e){var r=new L.default(),i=r.getHash(t),n=r.getHash(e);return r.distance(i,n);},Y.compareHashes=function(t,e){var r=new L.default();return r.distance(t,e);},Y.colorDiff=function(t,e){var r=function(t){return Math.pow(t,2);},i=Math.max,n=195075;return 0===t.a||t.a||(t.a=255),0===e.a||e.a||(e.a=255),(i(r(t.r-e.r),r(t.r-e.r-t.a+e.a))+i(r(t.g-e.g),r(t.g-e.g-t.a+e.a))+i(r(t.b-e.b),r(t.b-e.b-t.a+e.a)))/n;},c("clone","clone",function(t){var e=new Y(this);return(0,T.isNodePattern)(t)&&t.call(e,null,e),e;}),d("background",function(t,e){return"number"!=typeof t?T.throwError.call(this,"hex must be a hexadecimal rgba value",e):(this._background=t,(0,T.isNodePattern)(e)&&e.call(this,null,this),this);}),d("scan",function(t,e,r,i,n,a){if("number"!=typeof t||"number"!=typeof e)return T.throwError.call(this,"x and y must be numbers",a);if("number"!=typeof r||"number"!=typeof i)return T.throwError.call(this,"w and h must be numbers",a);if("function"!=typeof n)return T.throwError.call(this,"f must be a function",a);var o=(0,T.scan)(this,t,e,r,i,n);return(0,T.isNodePattern)(a)&&a.call(this,null,o),o;}),void 0!==window&&"object"===(void 0===window?"undefined":(0,k.default)(window))&&(W=window),"undefined"!=typeof self&&"object"===("undefined"==typeof self?"undefined":(0,k.default)(self))&&(W=self),W.Jimp=Y,W.Buffer=e;var V=Y;r.default=V;}).call(this,t("buffer").Buffer);},{"./composite":191,"./constants":192,"./modules/phash":194,"./request":195,"./utils/image-bitmap":196,"./utils/mime":197,"./utils/promisify":198,"@babel/runtime/helpers/assertThisInitialized":3,"@babel/runtime/helpers/classCallCheck":4,"@babel/runtime/helpers/construct":5,"@babel/runtime/helpers/createClass":6,"@babel/runtime/helpers/defineProperty":7,"@babel/runtime/helpers/getPrototypeOf":9,"@babel/runtime/helpers/inherits":10,"@babel/runtime/helpers/interopRequireDefault":11,"@babel/runtime/helpers/interopRequireWildcard":12,"@babel/runtime/helpers/possibleConstructorReturn":17,"@babel/runtime/helpers/slicedToArray":19,"@babel/runtime/helpers/typeof":21,"@jimp/utils":235,"any-base":23,buffer:48,events:52,fs:47,mkdirp:83,path:107,pixelmatch:109,tinycolor2:178}],194:[function(t,e,r){"use strict";function i(t,e){this.size=this.size||t,this.smallerSize=this.smallerSize||e,a(this.size);}function n(t){var e={};return e.r=Math.floor(t/Math.pow(256,3)),e.g=Math.floor((t-e.r*Math.pow(256,3))/Math.pow(256,2)),e.b=Math.floor((t-e.r*Math.pow(256,3)-e.g*Math.pow(256,2))/Math.pow(256,1)),e.a=Math.floor((t-e.r*Math.pow(256,3)-e.g*Math.pow(256,2)-e.b*Math.pow(256,1))/Math.pow(256,0)),e;}function a(t){for(var e=1;el?"1":"0";return f;};var s=[];e.exports=i;},{}],195:[function(t,e,r){(function(r,i){"use strict";var n=t("@babel/runtime/helpers/interopRequireDefault");n(t("@babel/runtime/helpers/defineProperty")),n(t("@babel/runtime/helpers/extends"));r.browser,e.exports=function(t,e){var r=new XMLHttpRequest();r.open("GET",t.url,!0),r.responseType="arraybuffer",r.addEventListener("load",function(){if(r.status<400)try{var n=i.from(this.response);e(null,r,n);}catch(r){return e(new Error("Response is not a buffer for url "+t.url+". Error: "+r.message));}else e(new Error("HTTP Status "+r.status+" for url "+t.url));}),r.addEventListener("error",function(t){e(t);}),r.send();};}).call(this,t("_process"),t("buffer").Buffer);},{"@babel/runtime/helpers/defineProperty":7,"@babel/runtime/helpers/extends":8,"@babel/runtime/helpers/interopRequireDefault":11,_process:133,buffer:48,phin:108}],196:[function(t,e,r){(function(e){"use strict";function i(t,e){var r=(0,m.default)(t);return r?r.mime:e?v.getType(e):null;}function n(t){return t._exif&&t._exif.tags&&t._exif.tags.Orientation||1;}function a(t){var e=t.getWidth(),r=t.getHeight();switch(n(t)){case 1:return null;case 2:return function(t,r){return[e-t-1,r];};case 3:return function(t,i){return[e-t-1,r-i-1];};case 4:return function(t,e){return[t,r-e-1];};case 5:return function(t,e){return[e,t];};case 6:return function(t,e){return[e,r-t-1];};case 7:return function(t,i){return[e-i-1,r-t-1];};case 8:return function(t,r){return[e-r-1,t];};default:return null;}}function o(t,r,i,n){for(var a=t.bitmap.data,o=t.bitmap.width,s=e.alloc(a.length),u=0;u4,i=r?t.bitmap.height:t.bitmap.width,s=r?t.bitmap.width:t.bitmap.height;o(t,i,s,e);}}function u(t,e,r){var n=i(t,e);if("string"!=typeof n)return r(new Error("Could not find MIME for Buffer <"+e+">"));this._originalMime=n.toLowerCase();try{var a=this.getMIME();if(!this.constructor.decoders[a])return g.throwError.call(this,"Unsupported MIME type: "+a,r);this.bitmap=this.constructor.decoders[a](t);}catch(t){return r.call(this,t,this);}try{this._exif=b.default.create(t).parse(),s(this);}catch(t){}return r.call(this,null,this),this;}function h(t,e){return new t(e.bitmap.width,e.bitmap.height,e._background).composite(e,0,0).bitmap;}function l(t,r){if(t===_.AUTO&&(t=this.getMIME()),"string"!=typeof t)return g.throwError.call(this,"mime must be a string",r);if("function"!=typeof r)return g.throwError.call(this,"cb must be a function",r);if(t=t.toLowerCase(),this._rgba&&this.constructor.hasAlpha[t]?this.bitmap.data=e.from(this.bitmap.data):this.bitmap.data=h(this.constructor,this).data,this.constructor.encoders[t]){var i=this.constructor.encoders[t](this);r.call(this,null,i);}else r.call(this,"Unsupported MIME type: "+t);return this;}function f(t){return(0,y.default)(l,this,t);}var c=t("@babel/runtime/helpers/interopRequireWildcard"),d=t("@babel/runtime/helpers/interopRequireDefault");Object.defineProperty(r,"__esModule",{value:!0}),r.parseBitmap=u,r.getBuffer=l,r.getBufferAsync=f;var p=d(t("@babel/runtime/helpers/slicedToArray")),m=d(t("file-type")),b=d(t("exif-parser")),g=t("@jimp/utils"),_=c(t("../constants")),v=c(t("./mime")),y=d(t("./promisify"));}).call(this,t("buffer").Buffer);},{"../constants":192,"./mime":197,"./promisify":198,"@babel/runtime/helpers/interopRequireDefault":11,"@babel/runtime/helpers/interopRequireWildcard":12,"@babel/runtime/helpers/slicedToArray":19,"@jimp/utils":235,buffer:48,"exif-parser":53,"file-type":62}],197:[function(t,e,r){"use strict";Object.defineProperty(r,"__esModule",{value:!0}),r.getExtension=r.getType=r.addType=void 0;var i={},n=function(t){return Object.entries(i).find(function(e){return e[1].includes(t);})||[];},a=function(t,e){i[t]=e;};r.addType=a;var o=function(t){var e=t.split("/").slice(-1),r=e[e.length-1].split(".").pop(),i=n(r);return i[0];};r.getType=o;var s=function(t){return(i[t.toLowerCase()]||[])[0];};r.getExtension=s;},{}],198:[function(t,e,r){"use strict";Object.defineProperty(r,"__esModule",{value:!0}),r.default=void 0;var i=function(t,e){for(var r=arguments.length,i=new Array(r>2?r-2:0),n=2;n1&&void 0!==arguments[1]?arguments[1]:f.default,o={hasAlpha:{},encoders:{},decoders:{},class:{},constants:{}};return t.types&&(t.types.forEach(r),a.decoders=n({},a.decoders,{},o.decoders),a.encoders=n({},a.encoders,{},o.encoders),a.hasAlpha=n({},a.hasAlpha,{},o.hasAlpha)),t.plugins&&t.plugins.forEach(i),(0,f.addJimpMethods)(o.class,a),(0,f.addConstants)(o.constants,a),f.default;}var o=t("@babel/runtime/helpers/interopRequireWildcard"),s=t("@babel/runtime/helpers/interopRequireDefault");Object.defineProperty(r,"__esModule",{value:!0}),r.default=a;var u=s(t("@babel/runtime/helpers/toConsumableArray")),h=s(t("@babel/runtime/helpers/defineProperty")),l=s(t("@babel/runtime/helpers/slicedToArray")),f=o(t("@jimp/core"));e.exports=r.default;},{"@babel/runtime/helpers/defineProperty":7,"@babel/runtime/helpers/interopRequireDefault":11,"@babel/runtime/helpers/interopRequireWildcard":12,"@babel/runtime/helpers/slicedToArray":19,"@babel/runtime/helpers/toConsumableArray":20,"@jimp/core":193}],200:[function(t,e,r){"use strict";var i=t("@babel/runtime/helpers/interopRequireDefault");Object.defineProperty(r,"__esModule",{value:!0}),r.default=void 0;var n=i(t("@jimp/custom")),a=i(t("@jimp/types")),o=i(t("@jimp/plugins")),s=(0,n.default)({types:[a.default],plugins:[o.default]});r.default=s,e.exports=r.default;},{"@babel/runtime/helpers/interopRequireDefault":11,"@jimp/custom":199,"@jimp/plugins":228,"@jimp/types":234}],201:[function(t,e,r){"use strict";var i=t("@babel/runtime/helpers/interopRequireDefault");Object.defineProperty(r,"__esModule",{value:!0}),r.default=void 0;var n=i(t("@babel/runtime/helpers/typeof")),a=t("@jimp/utils"),o=function(){return{blit:function(t,e,r,i,o,s,u,h){if(!(t instanceof this.constructor))return a.throwError.call(this,"The source must be a Jimp image",h);if("number"!=typeof e||"number"!=typeof r)return a.throwError.call(this,"x and y must be numbers",h);if("function"==typeof i)h=i,i=0,o=0,s=t.bitmap.width,u=t.bitmap.height;else{if((0,n.default)(i)!==(0,n.default)(o)||(0,n.default)(o)!==(0,n.default)(s)||(0,n.default)(s)!==(0,n.default)(u))return a.throwError.call(this,"srcx, srcy, srcw, srch must be numbers",h);i=i||0,o=o||0,s=s||t.bitmap.width,u=u||t.bitmap.height;}e=Math.round(e),r=Math.round(r),i=Math.round(i),o=Math.round(o),s=Math.round(s),u=Math.round(u);var l=this.bitmap.width,f=this.bitmap.height,c=this;return t.scanQuiet(i,o,s,u,function(t,n,a){var s=e+t-i,u=r+n-o;if(s>=0&&u>=0&&l-s>0&&f-u>0){var h=c.getPixelIndex(s,u),d={r:this.bitmap.data[a],g:this.bitmap.data[a+1],b:this.bitmap.data[a+2],a:this.bitmap.data[a+3]},p={r:c.bitmap.data[h],g:c.bitmap.data[h+1],b:c.bitmap.data[h+2],a:c.bitmap.data[h+3]};c.bitmap.data[h]=(d.a*(d.r-p.r)-p.r+255>>8)+p.r,c.bitmap.data[h+1]=(d.a*(d.g-p.g)-p.g+255>>8)+p.g,c.bitmap.data[h+2]=(d.a*(d.b-p.b)-p.b+255>>8)+p.b,c.bitmap.data[h+3]=this.constructor.limit255(p.a+d.a);}}),(0,a.isNodePattern)(h)&&h.call(this,null,this),this;}};};r.default=o,e.exports=r.default;},{"@babel/runtime/helpers/interopRequireDefault":11,"@babel/runtime/helpers/typeof":21,"@jimp/utils":235}],202:[function(t,e,r){"use strict";Object.defineProperty(r,"__esModule",{value:!0}),r.shgTable=r.mulTable=void 0;var i=[1,57,41,21,203,34,97,73,227,91,149,62,105,45,39,137,241,107,3,173,39,71,65,238,219,101,187,87,81,151,141,133,249,117,221,209,197,187,177,169,5,153,73,139,133,127,243,233,223,107,103,99,191,23,177,171,165,159,77,149,9,139,135,131,253,245,119,231,224,109,211,103,25,195,189,23,45,175,171,83,81,79,155,151,147,9,141,137,67,131,129,251,123,30,235,115,113,221,217,53,13,51,50,49,193,189,185,91,179,175,43,169,83,163,5,79,155,19,75,147,145,143,35,69,17,67,33,65,255,251,247,243,239,59,29,229,113,111,219,27,213,105,207,51,201,199,49,193,191,47,93,183,181,179,11,87,43,85,167,165,163,161,159,157,155,77,19,75,37,73,145,143,141,35,138,137,135,67,33,131,129,255,63,250,247,61,121,239,237,117,29,229,227,225,111,55,109,216,213,211,209,207,205,203,201,199,197,195,193,48,190,47,93,185,183,181,179,178,176,175,173,171,85,21,167,165,41,163,161,5,79,157,78,154,153,19,75,149,74,147,73,144,143,71,141,140,139,137,17,135,134,133,66,131,65,129,1];r.mulTable=i;var n=[0,9,10,10,14,12,14,14,16,15,16,15,16,15,15,17,18,17,12,18,16,17,17,19,19,18,19,18,18,19,19,19,20,19,20,20,20,20,20,20,15,20,19,20,20,20,21,21,21,20,20,20,21,18,21,21,21,21,20,21,17,21,21,21,22,22,21,22,22,21,22,21,19,22,22,19,20,22,22,21,21,21,22,22,22,18,22,22,21,22,22,23,22,20,23,22,22,23,23,21,19,21,21,21,23,23,23,22,23,23,21,23,22,23,18,22,23,20,22,23,23,23,21,22,20,22,21,22,24,24,24,24,24,22,21,24,23,23,24,21,24,23,24,22,24,24,22,24,24,22,23,24,24,24,20,23,22,23,24,24,24,24,24,24,24,23,21,23,22,23,24,24,24,22,24,24,24,23,22,24,24,25,23,25,25,23,24,25,25,24,22,25,25,25,24,23,24,25,25,25,25,25,25,25,25,25,25,25,25,23,25,23,24,25,25,25,25,25,25,25,25,25,24,22,25,25,23,25,25,20,24,25,24,25,25,22,24,25,24,25,24,25,25,24,25,25,25,25,22,25,25,25,24,25,24,25,18];r.shgTable=n;},{}],203:[function(t,e,r){"use strict";Object.defineProperty(r,"__esModule",{value:!0}),r.default=void 0;var i=t("@jimp/utils"),n=t("./blur-tables"),a=function(){return{blur:function(t,e){if("number"!=typeof t)return i.throwError.call(this,"r must be a number",e);if(t<1)return i.throwError.call(this,"r must be greater than 0",e);for(var r,a,o,s,u,h,l,f,c,d,p,m,b,g,_=this.bitmap.width-1,v=this.bitmap.height-1,y=t+1,w=n.mulTable[t],E=n.shgTable[t],x=[],S=[],k=[],M=[],A=[],I=[],T=2;T-->0;){for(m=0,b=0,h=0;h_?_:l)<<2),r+=this.bitmap.data[f++],a+=this.bitmap.data[f++],o+=this.bitmap.data[f++],s+=this.bitmap.data[f];for(u=0;u0?f<<2:0),c=b+A[u],d=b+I[u],r+=this.bitmap.data[c++]-this.bitmap.data[d++],a+=this.bitmap.data[c++]-this.bitmap.data[d++],o+=this.bitmap.data[c++]-this.bitmap.data[d++],s+=this.bitmap.data[c]-this.bitmap.data[d],m++;b+=this.bitmap.width<<2;}for(u=0;uv?0:this.bitmap.width,r+=x[p],a+=S[p],o+=k[p],s+=M[p];for(m=u<<2,h=0;h>>E,this.bitmap.data[m+3]=g,g>255&&(this.bitmap.data[m+3]=255),g>0?(g=255/g,this.bitmap.data[m]=(r*w>>>E)*g,this.bitmap.data[m+1]=(a*w>>>E)*g,this.bitmap.data[m+2]=(o*w>>>E)*g):(this.bitmap.data[m+2]=0,this.bitmap.data[m+1]=0,this.bitmap.data[m]=0),0===u&&(A[h]=((f=h+y)0?f*this.bitmap.width:0),c=u+A[h],d=u+I[h],r+=x[c]-x[d],a+=S[c]-S[d],o+=k[c]-k[d],s+=M[c]-M[d],m+=this.bitmap.width<<2;}}return(0,i.isNodePattern)(e)&&e.call(this,null,this),this;}};};r.default=a,e.exports=r.default;},{"./blur-tables":202,"@jimp/utils":235}],204:[function(t,e,r){"use strict";Object.defineProperty(r,"__esModule",{value:!0}),r.default=void 0;var i=t("@jimp/utils"),n=function(){return{circle:function(){var t=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{},e=arguments.length>1?arguments[1]:void 0;"function"==typeof t&&(e=t,t={});var r=t.radius||(this.bitmap.width>this.bitmap.height?this.bitmap.height:this.bitmap.width)/2,n={x:"number"==typeof t.x?t.x:this.bitmap.width/2,y:"number"==typeof t.y?t.y:this.bitmap.height/2};return this.scanQuiet(0,0,this.bitmap.width,this.bitmap.height,function(t,e,i){var a=Math.sqrt(Math.pow(t-n.x,2)+Math.pow(e-n.y,2));r-a<=0?this.bitmap.data[i+3]=0:r-a<1&&(this.bitmap.data[i+3]=255*(r-a));}),(0,i.isNodePattern)(e)&&e.call(this,null,this),this;}};};r.default=n,e.exports=r.default;},{"@jimp/utils":235}],205:[function(t,e,r){(function(i){"use strict";function n(t,e,r,i){for(var n=[0,0,0],a=(e.length-1)/2,o=0;o2&&void 0!==arguments[2]?arguments[2]:50;return{r:(e.r-t.r)*(r/100)+t.r,g:(e.g-t.g)*(r/100)+t.g,b:(e.b-t.b)*(r/100)+t.b};}function s(t,e){var r=this;return t&&Array.isArray(t)?(t=t.map(function(t){return"xor"!==t.apply&&"mix"!==t.apply||(t.params[0]=(0,l.default)(t.params[0]).toRgb()),t;}),this.scanQuiet(0,0,this.bitmap.width,this.bitmap.height,function(i,n,a){var s={r:r.bitmap.data[a],g:r.bitmap.data[a+1],b:r.bitmap.data[a+2]},u=function(t,e){return r.constructor.limit255(s[t]+e);};t.forEach(function(t){if("mix"===t.apply)s=o(s,t.params[0],t.params[1]);else if("tint"===t.apply)s=o(s,{r:255,g:255,b:255},t.params[0]);else if("shade"===t.apply)s=o(s,{r:0,g:0,b:0},t.params[0]);else if("xor"===t.apply)s={r:s.r^t.params[0].r,g:s.g^t.params[0].g,b:s.b^t.params[0].b};else if("red"===t.apply)s.r=u("r",t.params[0]);else if("green"===t.apply)s.g=u("g",t.params[0]);else if("blue"===t.apply)s.b=u("b",t.params[0]);else{var i;if("hue"===t.apply&&(t.apply="spin"),s=(0,l.default)(s),!s[t.apply])return f.throwError.call(r,"action "+t.apply+" not supported",e);s=(i=s)[t.apply].apply(i,(0,h.default)(t.params)).toRgb();}}),r.bitmap.data[a]=s.r,r.bitmap.data[a+1]=s.g,r.bitmap.data[a+2]=s.b;}),(0,f.isNodePattern)(e)&&e.call(this,null,this),this):f.throwError.call(this,"actions must be an array",e);}var u=t("@babel/runtime/helpers/interopRequireDefault");Object.defineProperty(r,"__esModule",{value:!0}),r.default=void 0;var h=u(t("@babel/runtime/helpers/toConsumableArray")),l=u(t("tinycolor2")),f=t("@jimp/utils"),c=function(t){return null!=t;},d=function(){return{brightness:function(t,e){return"number"!=typeof t?f.throwError.call(this,"val must be numbers",e):t<-1||t>1?f.throwError.call(this,"val must be a number between -1 and +1",e):(this.scanQuiet(0,0,this.bitmap.width,this.bitmap.height,function(e,r,i){t<0?(this.bitmap.data[i]=this.bitmap.data[i]*(1+t),this.bitmap.data[i+1]=this.bitmap.data[i+1]*(1+t),this.bitmap.data[i+2]=this.bitmap.data[i+2]*(1+t)):(this.bitmap.data[i]=this.bitmap.data[i]+(255-this.bitmap.data[i])*t,this.bitmap.data[i+1]=this.bitmap.data[i+1]+(255-this.bitmap.data[i+1])*t,this.bitmap.data[i+2]=this.bitmap.data[i+2]+(255-this.bitmap.data[i+2])*t);}),(0,f.isNodePattern)(e)&&e.call(this,null,this),this);},contrast:function(t,e){function r(t){return t=Math.floor(i*(t-127)+127),t<0?0:t>255?255:t;}if("number"!=typeof t)return f.throwError.call(this,"val must be numbers",e);if(t<-1||t>1)return f.throwError.call(this,"val must be a number between -1 and +1",e);var i=(t+1)/(1-t);return this.scanQuiet(0,0,this.bitmap.width,this.bitmap.height,function(t,e,i){this.bitmap.data[i]=r(this.bitmap.data[i]),this.bitmap.data[i+1]=r(this.bitmap.data[i+1]),this.bitmap.data[i+2]=r(this.bitmap.data[i+2]);}),(0,f.isNodePattern)(e)&&e.call(this,null,this),this;},posterize:function(t,e){return"number"!=typeof t?f.throwError.call(this,"n must be numbers",e):(t<2&&(t=2),this.scanQuiet(0,0,this.bitmap.width,this.bitmap.height,function(e,r,i){this.bitmap.data[i]=Math.floor(this.bitmap.data[i]/255*(t-1))/(t-1)*255,this.bitmap.data[i+1]=Math.floor(this.bitmap.data[i+1]/255*(t-1))/(t-1)*255,this.bitmap.data[i+2]=Math.floor(this.bitmap.data[i+2]/255*(t-1))/(t-1)*255;}),(0,f.isNodePattern)(e)&&e.call(this,null,this),this);},greyscale:a,grayscale:a,opacity:function(t,e){return"number"!=typeof t?f.throwError.call(this,"f must be a number",e):t<0||t>1?f.throwError.call(this,"f must be a number from 0 to 1",e):(this.scanQuiet(0,0,this.bitmap.width,this.bitmap.height,function(e,r,i){var n=this.bitmap.data[i+3]*t;this.bitmap.data[i+3]=n;}),(0,f.isNodePattern)(e)&&e.call(this,null,this),this);},sepia:function(t){return this.scanQuiet(0,0,this.bitmap.width,this.bitmap.height,function(t,e,r){var i=this.bitmap.data[r],n=this.bitmap.data[r+1],a=this.bitmap.data[r+2];i=.393*i+.769*n+.189*a,n=.349*i+.686*n+.168*a,a=.272*i+.534*n+.131*a,this.bitmap.data[r]=i<255?i:255,this.bitmap.data[r+1]=n<255?n:255,this.bitmap.data[r+2]=a<255?a:255;}),(0,f.isNodePattern)(t)&&t.call(this,null,this),this;},fade:function(t,e){return"number"!=typeof t?f.throwError.call(this,"f must be a number",e):t<0||t>1?f.throwError.call(this,"f must be a number from 0 to 1",e):(this.opacity(1-t),(0,f.isNodePattern)(e)&&e.call(this,null,this),this);},convolution:function(t,e,r){"function"==typeof e&&void 0===r&&(r=e,e=null),e||(e=this.constructor.EDGE_EXTEND);var n,a,o,s,u,h,l,c,d,p,m=i.from(this.bitmap.data),b=t.length,g=t[0].length,_=Math.floor(b/2),v=Math.floor(g/2),y=-_,w=-v;return this.scanQuiet(0,0,this.bitmap.width,this.bitmap.height,function(r,i,f){s=0,o=0,a=0;for(var b=y;b<=_;b++)for(var g=w;g<=v;g++)c=r+g,d=i+b,n=t[b+_][g+v],p=this.getPixelIndex(c,d,e),-1===p?(l=0,h=0,u=0):(u=this.bitmap.data[p+0],h=this.bitmap.data[p+1],l=this.bitmap.data[p+2]),a+=n*u,o+=n*h,s+=n*l;a<0&&(a=0),o<0&&(o=0),s<0&&(s=0),a>255&&(a=255),o>255&&(o=255),s>255&&(s=255),m[f+0]=a,m[f+1]=o,m[f+2]=s;}),this.bitmap.data=m,(0,f.isNodePattern)(r)&&r.call(this,null,this),this;},opaque:function(t){return this.scanQuiet(0,0,this.bitmap.width,this.bitmap.height,function(t,e,r){this.bitmap.data[r+3]=255;}),(0,f.isNodePattern)(t)&&t.call(this,null,this),this;},pixelate:function(t,e,r,i,a,o){if("function"==typeof e)o=e,a=null,i=null,r=null,e=null;else{if("number"!=typeof t)return f.throwError.call(this,"size must be a number",o);if(c(e)&&"number"!=typeof e)return f.throwError.call(this,"x must be a number",o);if(c(r)&&"number"!=typeof r)return f.throwError.call(this,"y must be a number",o);if(c(i)&&"number"!=typeof i)return f.throwError.call(this,"w must be a number",o);if(c(a)&&"number"!=typeof a)return f.throwError.call(this,"h must be a number",o);}var s=[[1/16,.125,1/16],[.125,.25,.125],[1/16,.125,1/16]];e=e||0,r=r||0,i=c(i)?i:this.bitmap.width-e,a=c(a)?a:this.bitmap.height-r;var u=this.cloneQuiet();return this.scanQuiet(e,r,i,a,function(e,r,i){e=t*Math.floor(e/t),r=t*Math.floor(r/t);var a=n(u,s,e,r);this.bitmap.data[i]=a[0],this.bitmap.data[i+1]=a[1],this.bitmap.data[i+2]=a[2];}),(0,f.isNodePattern)(o)&&o.call(this,null,this),this;},convolute:function(t,e,r,i,a,o){if(!Array.isArray(t))return f.throwError.call(this,"the kernel must be an array",o);if("function"==typeof e)o=e,e=null,r=null,i=null,a=null;else{if(c(e)&&"number"!=typeof e)return f.throwError.call(this,"x must be a number",o);if(c(r)&&"number"!=typeof r)return f.throwError.call(this,"y must be a number",o);if(c(i)&&"number"!=typeof i)return f.throwError.call(this,"w must be a number",o);if(c(a)&&"number"!=typeof a)return f.throwError.call(this,"h must be a number",o);}var s=(t.length-1)/2;e=c(e)?e:s,r=c(r)?r:s,i=c(i)?i:this.bitmap.width-e,a=c(a)?a:this.bitmap.height-r;var u=this.cloneQuiet();return this.scanQuiet(e,r,i,a,function(e,r,i){var a=n(u,t,e,r);this.bitmap.data[i]=this.constructor.limit255(a[0]),this.bitmap.data[i+1]=this.constructor.limit255(a[1]),this.bitmap.data[i+2]=this.constructor.limit255(a[2]);}),(0,f.isNodePattern)(o)&&o.call(this,null,this),this;},color:s,colour:s};};r.default=d,e.exports=r.default;}).call(this,t("buffer").Buffer);},{"@babel/runtime/helpers/interopRequireDefault":11,"@babel/runtime/helpers/toConsumableArray":20,"@jimp/utils":235,buffer:48,tinycolor2:178}],206:[function(t,e,r){"use strict";Object.defineProperty(r,"__esModule",{value:!0}),r.default=void 0;var i=t("@jimp/utils"),n=function(){return{contain:function(t,e,r,n,a){if("number"!=typeof t||"number"!=typeof e)return i.throwError.call(this,"w and h must be numbers",a);"string"==typeof r&&("function"==typeof n&&void 0===a&&(a=n),n=r,r=null),"function"==typeof r&&(void 0===a&&(a=r),n=null,r=null),"function"==typeof n&&void 0===a&&(a=n,n=null),r=r||this.constructor.HORIZONTAL_ALIGN_CENTER|this.constructor.VERTICAL_ALIGN_MIDDLE;var o=7&r,s=r>>3;if((0===o||o&o-1)&&(0===s||s&s-1))return i.throwError.call(this,"only use one flag per alignment direction",a);var u=o>>1,h=s>>1,l=t/e>this.bitmap.width/this.bitmap.height?e/this.bitmap.height:t/this.bitmap.width,f=this.cloneQuiet().scale(l,n);return this.resize(t,e,n),this.scanQuiet(0,0,this.bitmap.width,this.bitmap.height,function(t,e,r){this.bitmap.data.writeUInt32BE(this._background,r);}),this.blit(f,(this.bitmap.width-f.bitmap.width)/2*u,(this.bitmap.height-f.bitmap.height)/2*h),(0,i.isNodePattern)(a)&&a.call(this,null,this),this;}};};r.default=n,e.exports=r.default;},{"@jimp/utils":235}],207:[function(t,e,r){"use strict";Object.defineProperty(r,"__esModule",{value:!0}),r.default=void 0;var i=t("@jimp/utils"),n=function(){return{cover:function(t,e,r,n,a){if("number"!=typeof t||"number"!=typeof e)return i.throwError.call(this,"w and h must be numbers",a);r&&"function"==typeof r&&void 0===a?(a=r,r=null,n=null):"function"==typeof n&&void 0===a&&(a=n,n=null),r=r||this.constructor.HORIZONTAL_ALIGN_CENTER|this.constructor.VERTICAL_ALIGN_MIDDLE;var o=7&r,s=r>>3;if((0===o||o&o-1)&&(0===s||s&s-1))return i.throwError.call(this,"only use one flag per alignment direction",a);var u=o>>1,h=s>>1,l=t/e>this.bitmap.width/this.bitmap.height?t/this.bitmap.width:e/this.bitmap.height;return this.scale(l,n),this.crop((this.bitmap.width-t)/2*u,(this.bitmap.height-e)/2*h,t,e),(0,i.isNodePattern)(a)&&a.call(this,null,this),this;}};};r.default=n,e.exports=r.default;},{"@jimp/utils":235}],208:[function(t,e,r){(function(i){"use strict";function n(t){return t("crop",function(t,e,r,n,a){if("number"!=typeof t||"number"!=typeof e)return s.throwError.call(this,"x and y must be numbers",a);if("number"!=typeof r||"number"!=typeof n)return s.throwError.call(this,"w and h must be numbers",a);if(t=Math.round(t),e=Math.round(e),r=Math.round(r),n=Math.round(n),0===t&&r===this.bitmap.width){var o=r*e+t<<2,u=o+n*r<<2;this.bitmap.data=this.bitmap.data.slice(o,u);}else{var h=i.allocUnsafe(r*n*4),l=0;this.scanQuiet(t,e,r,n,function(t,e,r){var i=this.bitmap.data.readUInt32BE(r,!0);h.writeUInt32BE(i,l,!0),l+=4;}),this.bitmap.data=h;}return this.bitmap.width=r,this.bitmap.height=n,(0,s.isNodePattern)(a)&&a.call(this,null,this),this;}),{class:{autocrop:function(){for(var t,e=this.bitmap.width,r=this.bitmap.height,i=1,n=0,a=2e-4,u=!0,h=!1,l={north:!1,south:!1,east:!1,west:!1},f=arguments.length,c=new Array(f),d=0;da)break t;}v++;}if(g=this.getPixelColor(e,0),!l.east)t:for(var A=0;Aa)break t;}y++;}if(g=this.getPixelColor(0,r),!l.south)t:for(var P=r-1;P>=v+i;P--){for(var C=e-y-1;C>=0;C--){var O=this.getPixelColor(C,P),L=this.constructor.intToRGBA(O);if(this.constructor.colorDiff(_,L)>a)break t;}w++;}if(g=this.getPixelColor(e,r),!l.west)t:for(var B=e-1;B>=0+y+i;B--){for(var D=r-1;D>=0+v;D--){var N=this.getPixelColor(B,D),z=this.constructor.intToRGBA(N);if(this.constructor.colorDiff(_,z)>a)break t;}E++;}var j=!1;if(E-=n,y-=n,v-=n,w-=n,h){var U=Math.min(y,E),F=Math.min(v,w);E=U,y=U,v=F,w=F;}E=E>=0?E:0,y=y>=0?y:0,v=v>=0?v:0,w=w>=0?w:0;var G=e-(E+y),H=r-(w+v);return j=u?0!==y&&0!==v&&0!==E&&0!==w:0!==y||0!==v||0!==E||0!==w,j&&this.crop(y,v,G,H),(0,s.isNodePattern)(t)&&t.call(this,null,this),this;}}};}var a=t("@babel/runtime/helpers/interopRequireDefault");Object.defineProperty(r,"__esModule",{value:!0}),r.default=n;var o=a(t("@babel/runtime/helpers/typeof")),s=t("@jimp/utils");e.exports=r.default;}).call(this,t("buffer").Buffer);},{"@babel/runtime/helpers/interopRequireDefault":11,"@babel/runtime/helpers/typeof":21,"@jimp/utils":235,buffer:48}],209:[function(t,e,r){"use strict";var i=t("@babel/runtime/helpers/interopRequireDefault");Object.defineProperty(r,"__esModule",{value:!0}),r.default=void 0;var n=i(t("@babel/runtime/helpers/typeof")),a=t("@jimp/utils"),o=function(){return{displace:function(t,e,r){if("object"!==(0,n.default)(t)||t.constructor!==this.constructor)return a.throwError.call(this,"The source must be a Jimp image",r);if("number"!=typeof e)return a.throwError.call(this,"factor must be a number",r);var i=this.cloneQuiet();return this.scanQuiet(0,0,this.bitmap.width,this.bitmap.height,function(r,n,a){var o=t.bitmap.data[a]/256*e;o=Math.round(o);var s=this.getPixelIndex(r+o,n);this.bitmap.data[s]=i.bitmap.data[a],this.bitmap.data[s+1]=i.bitmap.data[a+1],this.bitmap.data[s+2]=i.bitmap.data[a+2];}),(0,a.isNodePattern)(r)&&r.call(this,null,this),this;}};};r.default=o,e.exports=r.default;},{"@babel/runtime/helpers/interopRequireDefault":11,"@babel/runtime/helpers/typeof":21,"@jimp/utils":235}],210:[function(t,e,r){"use strict";function i(t){var e=[1,9,3,11,13,5,15,7,4,12,2,10,16,8,14,6];return this.scanQuiet(0,0,this.bitmap.width,this.bitmap.height,function(t,r,i){var n=((3&r)<<2)+t%4,a=e[n];this.bitmap.data[i]=Math.min(this.bitmap.data[i]+a,255),this.bitmap.data[i+1]=Math.min(this.bitmap.data[i+1]+a,255),this.bitmap.data[i+2]=Math.min(this.bitmap.data[i+2]+a,255);}),(0,n.isNodePattern)(t)&&t.call(this,null,this),this;}Object.defineProperty(r,"__esModule",{value:!0}),r.default=void 0;var n=t("@jimp/utils"),a=function(){return{dither565:i,dither16:i};};r.default=a,e.exports=r.default;},{"@jimp/utils":235}],211:[function(t,e,r){"use strict";Object.defineProperty(r,"__esModule",{value:!0}),r.default=void 0;var i=t("@jimp/utils"),n=function(){return{fisheye:function(){var t=this,e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{r:2.5},r=arguments.length>1?arguments[1]:void 0;"function"==typeof e&&(r=e,e={r:2.5});var n=this.cloneQuiet(),a=n.bitmap,o=a.width,s=a.height;return n.scanQuiet(0,0,o,s,function(r,i){var a=r/o,u=i/s,h=Math.sqrt(Math.pow(a-.5,2)+Math.pow(u-.5,2)),l=2*Math.pow(h,e.r),f=(a-.5)/h,c=(u-.5)/h,d=Math.round((l*f+.5)*o),p=Math.round((l*c+.5)*s),m=n.getPixelColor(d,p);t.setPixelColor(m,r,i);}),this.setPixelColor(n.getPixelColor(o/2,s/2),o/2,s/2),(0,i.isNodePattern)(r)&&r.call(this,null,this),this;}};};r.default=n,e.exports=r.default;},{"@jimp/utils":235}],212:[function(t,e,r){(function(i){"use strict";function n(t,e,r){if("boolean"!=typeof t||"boolean"!=typeof e)return a.throwError.call(this,"horizontal and vertical must be Booleans",r);var n=i.alloc(this.bitmap.data.length);return this.scanQuiet(0,0,this.bitmap.width,this.bitmap.height,function(r,i,a){var o=t?this.bitmap.width-1-r:r,s=e?this.bitmap.height-1-i:i,u=this.bitmap.width*s+o<<2,h=this.bitmap.data.readUInt32BE(a);n.writeUInt32BE(h,u);}),this.bitmap.data=i.from(n),(0,a.isNodePattern)(r)&&r.call(this,null,this),this;}Object.defineProperty(r,"__esModule",{value:!0}),r.default=void 0;var a=t("@jimp/utils"),o=function(){return{flip:n,mirror:n};};r.default=o,e.exports=r.default;}).call(this,t("buffer").Buffer);},{"@jimp/utils":235,buffer:48}],213:[function(t,e,r){"use strict";Object.defineProperty(r,"__esModule",{value:!0}),r.default=void 0;var i=t("@jimp/utils"),n=function(){return{gaussian:function(t,e){if("number"!=typeof t)return i.throwError.call(this,"r must be a number",e);if(t<1)return i.throwError.call(this,"r must be greater than 0",e);for(var r=Math.ceil(2.57*t),n=2*r+1,a=t*t*2,o=a*Math.PI,s=[],u=0;u1&&void 0!==arguments[1]?arguments[1]:0,r=arguments.length>2&&void 0!==arguments[2]?arguments[2]:0,n=arguments.length>3?arguments[3]:void 0;if(!(t instanceof this.constructor))return i.throwError.call(this,"The source must be a Jimp image",n);if("number"!=typeof e||"number"!=typeof r)return i.throwError.call(this,"x and y must be numbers",n);e=Math.round(e),r=Math.round(r);var a=this.bitmap.width,o=this.bitmap.height,s=this;return t.scanQuiet(0,0,t.bitmap.width,t.bitmap.height,function(t,i,n){var u=e+t,h=r+i;if(u>=0&&h>=0&&u0;}),255-t.slice().reverse().findIndex(function(t){return t>0;})];},s=function(){return{normalize:function(t){var e=i.call(this),r={r:o(e.r),g:o(e.g),b:o(e.b)};return this.scanQuiet(0,0,this.bitmap.width,this.bitmap.height,function(t,e,i){var n=this.bitmap.data[i+0],o=this.bitmap.data[i+1],s=this.bitmap.data[i+2];this.bitmap.data[i+0]=a(n,r.r[0],r.r[1]),this.bitmap.data[i+1]=a(o,r.g[0],r.g[1]),this.bitmap.data[i+2]=a(s,r.b[0],r.b[1]);}),(0,n.isNodePattern)(t)&&t.call(this,null,this),this;}};};r.default=s,e.exports=r.default;},{"@jimp/utils":235}],217:[function(t,e,r){(function(i){"use strict";function n(t,e,r,i,n){return n===t.HORIZONTAL_ALIGN_LEFT?0:n===t.HORIZONTAL_ALIGN_CENTER?(i-(0,m.measureText)(e,r))/2:i-(0,m.measureText)(e,r);}function a(t,e,r,i,n){if(n.width>0&&n.height>0){var a=e.pages[n.page];t.blit(a,r+n.xoffset,i+n.yoffset,n.x,n.y,n.width,n.height);}return t;}function o(t,e,r,i,n){for(var o=0;oo&&(o=s),a.push(e)):(n.push(a),a=[e]);}),n.push(a),{lines:n,longestLine:o};}function u(t,e,r){var i=r.map(function(r){return t.read(e+"/"+r);});return Promise.all(i);}var h=t("@babel/runtime/helpers/interopRequireDefault");Object.defineProperty(r,"__esModule",{value:!0}),r.default=void 0;var l=h(t("@babel/runtime/helpers/typeof")),f=h(t("@babel/runtime/helpers/toConsumableArray")),c=h(t("path")),d=h(t("load-bmfont")),p=t("@jimp/utils"),m=t("./measure-text"),b="browser/lib/",g=function(){return{constants:{measureText:m.measureText,measureTextHeight:m.measureTextHeight,FONT_SANS_8_BLACK:c.default.join(b,"fonts/open-sans/open-sans-8-black/open-sans-8-black.fnt"),FONT_SANS_10_BLACK:c.default.join(b,"fonts/open-sans/open-sans-10-black/open-sans-10-black.fnt"),FONT_SANS_12_BLACK:c.default.join(b,"fonts/open-sans/open-sans-12-black/open-sans-12-black.fnt"),FONT_SANS_14_BLACK:c.default.join(b,"fonts/open-sans/open-sans-14-black/open-sans-14-black.fnt"),FONT_SANS_16_BLACK:c.default.join(b,"fonts/open-sans/open-sans-16-black/open-sans-16-black.fnt"),FONT_SANS_32_BLACK:c.default.join(b,"fonts/open-sans/open-sans-32-black/open-sans-32-black.fnt"),FONT_SANS_64_BLACK:c.default.join(b,"fonts/open-sans/open-sans-64-black/open-sans-64-black.fnt"),FONT_SANS_128_BLACK:c.default.join(b,"fonts/open-sans/open-sans-128-black/open-sans-128-black.fnt"),FONT_SANS_8_WHITE:c.default.join(b,"fonts/open-sans/open-sans-8-white/open-sans-8-white.fnt"),FONT_SANS_16_WHITE:c.default.join(b,"fonts/open-sans/open-sans-16-white/open-sans-16-white.fnt"),FONT_SANS_32_WHITE:c.default.join(b,"fonts/open-sans/open-sans-32-white/open-sans-32-white.fnt"),FONT_SANS_64_WHITE:c.default.join(b,"fonts/open-sans/open-sans-64-white/open-sans-64-white.fnt"),FONT_SANS_128_WHITE:c.default.join(b,"fonts/open-sans/open-sans-128-white/open-sans-128-white.fnt"),loadFont:function(t,e){var r=this;return"string"!=typeof t?p.throwError.call(this,"file must be a string",e):new Promise(function(i,n){e=e||function(t,e){t?n(t):i(e);},(0,d.default)(t,function(i,n){var a={},o={};if(i)return p.throwError.call(r,i,e);for(var s=0;sr&&s>0?(o+=t.common.lineHeight,a=n[s]+" "):a=u;}return o;}Object.defineProperty(r,"__esModule",{value:!0}),r.measureText=i,r.measureTextHeight=n;},{}],219:[function(t,e,r){(function(r){function i(t){var e=Object.prototype.toString;return"[object ArrayBuffer]"===e.call(t);}function n(t){if(c)return f(t,{responseType:"arraybuffer"});if(void 0===self.XMLHttpRequest)throw new Error("your browser does not support XHR loading");var e=new self.XMLHttpRequest();return e.overrideMimeType("text/plain; charset=x-user-defined"),f({xhr:e},t);}var a=t("xhr"),o=function(){},s=t("parse-bmfont-ascii"),u=t("parse-bmfont-xml"),h=t("parse-bmfont-binary"),l=t("./lib/is-binary"),f=t("xtend"),c=self.XMLHttpRequest&&"withCredentials"in new XMLHttpRequest();e.exports=function(t,e){e="function"==typeof e?e:o,"string"==typeof t?t={uri:t}:t||(t={});var f=t.binary;f&&(t=n(t)),a(t,function(n,a,f){if(n)return e(n);if(!/^2/.test(a.statusCode))return e(new Error("http status code: "+a.statusCode));if(!f)return e(new Error("no body result"));var c,d=!1;if(i(f)){var p=new Uint8Array(f);f=new r(p,"binary");}l(f)&&(d=!0,"string"==typeof f&&(f=new r(f,"binary"))),d||(r.isBuffer(f)&&(f=f.toString(t.encoding)),f=f.trim());try{var m=a.headers["content-type"];c=d?h(f):/json/.test(m)||"{"===f.charAt(0)?JSON.parse(f):/xml/.test(m)||"<"===f.charAt(0)?u(f):s(f);}catch(t){e(new Error("error parsing font "+t.message)),e=o;}e(null,c);});};}).call(this,t("buffer").Buffer);},{"./lib/is-binary":220,buffer:48,"parse-bmfont-ascii":102,"parse-bmfont-binary":103,"parse-bmfont-xml":104,xhr:187,xtend:189}],220:[function(t,e,r){(function(r){var i=t("buffer-equal"),n=new r([66,77,70,3]);e.exports=function(t){return"string"==typeof t?"BMF"===t.substring(0,3):t.length>4&&i(t.slice(0,4),n);};}).call(this,t("buffer").Buffer);},{buffer:48,"buffer-equal":49}],221:[function(t,e,r){(function(i){"use strict";var n=t("@babel/runtime/helpers/interopRequireDefault");Object.defineProperty(r,"__esModule",{value:!0}),r.default=void 0;var a=t("@jimp/utils"),o=n(t("./modules/resize")),s=n(t("./modules/resize2")),u=function(){return{constants:{RESIZE_NEAREST_NEIGHBOR:"nearestNeighbor",RESIZE_BILINEAR:"bilinearInterpolation",RESIZE_BICUBIC:"bicubicInterpolation",RESIZE_HERMITE:"hermiteInterpolation",RESIZE_BEZIER:"bezierInterpolation"},class:{resize:function(t,e,r,n){if("number"!=typeof t||"number"!=typeof e)return a.throwError.call(this,"w and h must be numbers",n);if("function"==typeof r&&void 0===n&&(n=r,r=null),t===this.constructor.AUTO&&e===this.constructor.AUTO)return a.throwError.call(this,"w and h cannot both be set to auto",n);if(t===this.constructor.AUTO&&(t=this.bitmap.width*(e/this.bitmap.height)),e===this.constructor.AUTO&&(e=this.bitmap.height*(t/this.bitmap.width)),t<0||e<0)return a.throwError.call(this,"w and h must be positive numbers",n);if(t=Math.round(t),e=Math.round(e),"function"==typeof s.default[r]){var u={data:i.alloc(t*e*4),width:t,height:e};s.default[r](this.bitmap,u),this.bitmap=u;}else{var h=this,l=new o.default(this.bitmap.width,this.bitmap.height,t,e,!0,!0,function(r){h.bitmap.data=i.from(r),h.bitmap.width=t,h.bitmap.height=e;});l.resize(this.bitmap.data);}return(0,a.isNodePattern)(n)&&n.call(this,null,this),this;}}};};r.default=u,e.exports=r.default;}).call(this,t("buffer").Buffer);},{"./modules/resize":222,"./modules/resize2":223,"@babel/runtime/helpers/interopRequireDefault":11,"@jimp/utils":235,buffer:48}],222:[function(t,e,r){"use strict";function i(t,e,r,i,n,a,o){this.widthOriginal=Math.abs(Math.floor(t)||0),this.heightOriginal=Math.abs(Math.floor(e)||0),this.targetWidth=Math.abs(Math.floor(r)||0),this.targetHeight=Math.abs(Math.floor(i)||0),this.colorChannels=n?4:3,this.interpolationPass=Boolean(a),this.resizeCallback="function"==typeof o?o:function(){},this.targetWidthMultipliedByChannels=this.targetWidth*this.colorChannels,this.originalWidthMultipliedByChannels=this.widthOriginal*this.colorChannels,this.originalHeightMultipliedByChannels=this.heightOriginal*this.colorChannels,this.widthPassResultSize=this.targetWidthMultipliedByChannels*this.heightOriginal,this.finalResultSize=this.targetWidthMultipliedByChannels*this.targetHeight,this.initialize();}i.prototype.initialize=function(){if(!(this.widthOriginal>0&&this.heightOriginal>0&&this.targetWidth>0&&this.targetHeight>0))throw new Error("Invalid settings specified for the resizer.");this.configurePasses();},i.prototype.configurePasses=function(){this.widthOriginal===this.targetWidth?this.resizeWidth=this.bypassResizer:(this.ratioWeightWidthPass=this.widthOriginal/this.targetWidth,this.ratioWeightWidthPass<1&&this.interpolationPass?(this.initializeFirstPassBuffers(!0),this.resizeWidth=4===this.colorChannels?this.resizeWidthInterpolatedRGBA:this.resizeWidthInterpolatedRGB):(this.initializeFirstPassBuffers(!1),this.resizeWidth=4===this.colorChannels?this.resizeWidthRGBA:this.resizeWidthRGB)),this.heightOriginal===this.targetHeight?this.resizeHeight=this.bypassResizer:(this.ratioWeightHeightPass=this.heightOriginal/this.targetHeight,this.ratioWeightHeightPass<1&&this.interpolationPass?(this.initializeSecondPassBuffers(!0),this.resizeHeight=this.resizeHeightInterpolated):(this.initializeSecondPassBuffers(!1),this.resizeHeight=4===this.colorChannels?this.resizeHeightRGBA:this.resizeHeightRGB));},i.prototype._resizeWidthInterpolatedRGBChannels=function(t,e){var r,i,n=e?4:3,a=this.ratioWeightWidthPass,o=this.widthBuffer,s=0,u=0,h=0,l=0,f=0;for(r=0;s<1/3;r+=n,s+=a)for(u=r,h=0;u=f)){d+=l;break;}c+=r,d=c,l-=f;}while(l>0&&c=u)){l+=s;break;}h=d,l=h,s-=u;}while(s>0&&h3&&(this.outputWidthWorkBenchOpaquePixelsCount=this.generateFloat64Buffer(this.heightOriginal)));},i.prototype.initializeSecondPassBuffers=function(t){this.heightBuffer=this.generateUint8Buffer(this.finalResultSize),t||(this.outputHeightWorkBench=this.generateFloatBuffer(this.targetWidthMultipliedByChannels),this.colorChannels>3&&(this.outputHeightWorkBenchOpaquePixelsCount=this.generateFloat64Buffer(this.targetWidth)));},i.prototype.generateFloatBuffer=function(t){try{return new Float32Array(t);}catch(t){return[];}},i.prototype.generateFloat64Buffer=function(t){try{return new Float64Array(t);}catch(t){return[];}},i.prototype.generateUint8Buffer=function(t){try{return new Uint8Array(t);}catch(t){return[];}},e.exports=i;},{}],223:[function(t,e,r){(function(t){"use strict";e.exports={nearestNeighbor:function(t,e){for(var r=t.width,i=t.height,n=e.width,a=e.height,o=t.data,s=e.data,u=0;u0?a[S-4]:2*a[S]-a[S+4],M=a[S],A=a[S+4],I=v0?m[z-4*c]:2*m[z]-m[z+4*c],U=m[z],F=m[z+4*c],G=O1)for(var q=0;q=0&&v.x=0&&v.ythis.bitmap.width/this.bitmap.height?e/this.bitmap.height:t/this.bitmap.width;return this.scale(a,r),(0,i.isNodePattern)(n)&&n.call(this,null,this),this;}};};r.default=n,e.exports=r.default;},{"@jimp/utils":235}],226:[function(t,e,r){"use strict";Object.defineProperty(r,"__esModule",{value:!0}),r.default=void 0;var i=t("@jimp/utils"),n=function(){return{shadow:function(){var t=this,e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{},r=arguments.length>1?arguments[1]:void 0;"function"==typeof e&&(r=e,e={});var n=e,a=n.opacity,o=void 0===a?.7:a,s=n.size,u=void 0===s?1.1:s,h=n.x,l=void 0===h?-25:h,f=n.y,c=void 0===f?25:f,d=n.blur,p=void 0===d?5:d,m=this.clone(),b=this.clone();return b.scan(0,0,b.bitmap.width,b.bitmap.height,function(e,r,i){b.bitmap.data[i]=0,b.bitmap.data[i+1]=0,b.bitmap.data[i+2]=0,b.bitmap.data[i+3]=b.constructor.limit255(b.bitmap.data[i+3]*o),t.bitmap.data[i]=0,t.bitmap.data[i+1]=0,t.bitmap.data[i+2]=0,t.bitmap.data[i+3]=0;}),b.resize(b.bitmap.width*u,b.bitmap.height*u).blur(p),this.composite(b,l,c),this.composite(m,0,0),(0,i.isNodePattern)(r)&&r.call(this,null,this),this;}};};r.default=n,e.exports=r.default;},{"@jimp/utils":235}],227:[function(t,e,r){"use strict";Object.defineProperty(r,"__esModule",{value:!0}),r.default=void 0;var i=t("@jimp/utils"),n=function(){return{threshold:function(t,e){var r=this,n=t.max,a=t.replace,o=void 0===a?255:a,s=t.autoGreyscale,u=void 0===s||s;return"number"!=typeof n?i.throwError.call(this,"max must be a number",e):"number"!=typeof o?i.throwError.call(this,"replace must be a number",e):"boolean"!=typeof u?i.throwError.call(this,"autoGreyscale must be a boolean",e):(n=this.constructor.limit255(n),o=this.constructor.limit255(o),u&&this.greyscale(),this.scanQuiet(0,0,this.bitmap.width,this.bitmap.height,function(t,e,i){var a=r.bitmap.data[i]100?o.throwError.call(this,"n must be a number 0 - 100",e):(this._quality=Math.round(t),(0,o.isNodePattern)(e)&&e.call(this,null,this),this);}}};};r.default=u,e.exports=r.default;},{"@babel/runtime/helpers/defineProperty":7,"@babel/runtime/helpers/interopRequireDefault":11,"@jimp/utils":235,"jpeg-js":80}],232:[function(t,e,r){"use strict";var i=t("@babel/runtime/helpers/interopRequireDefault");Object.defineProperty(r,"__esModule",{value:!0}),r.default=void 0;var n=i(t("@babel/runtime/helpers/defineProperty")),a=t("pngjs"),o=t("@jimp/utils"),s="image/png",u=-1,h=0,l=1,f=2,c=3,d=4,p=function(){return{mime:(0,n.default)({},s,["png"]),constants:{MIME_PNG:s,PNG_FILTER_AUTO:u,PNG_FILTER_NONE:h,PNG_FILTER_SUB:l,PNG_FILTER_UP:f,PNG_FILTER_AVERAGE:c,PNG_FILTER_PATH:d},hasAlpha:(0,n.default)({},s,!0),decoders:(0,n.default)({},s,a.PNG.sync.read),encoders:(0,n.default)({},s,function(t){var e=new a.PNG({width:t.bitmap.width,height:t.bitmap.height});return e.data=t.bitmap.data,a.PNG.sync.write(e,{width:t.bitmap.width,height:t.bitmap.height,deflateLevel:t._deflateLevel,deflateStrategy:t._deflateStrategy,filterType:t._filterType,colorType:"number"==typeof t._colorType?t._colorType:t._rgba?6:2,inputHasAlpha:t._rgba});}),class:{_deflateLevel:9,_deflateStrategy:3,_filterType:u,_colorType:null,deflateLevel:function(t,e){return"number"!=typeof t?o.throwError.call(this,"l must be a number",e):t<0||t>9?o.throwError.call(this,"l must be a number 0 - 9",e):(this._deflateLevel=Math.round(t),(0,o.isNodePattern)(e)&&e.call(this,null,this),this);},deflateStrategy:function(t,e){return"number"!=typeof t?o.throwError.call(this,"s must be a number",e):t<0||t>3?o.throwError.call(this,"s must be a number 0 - 3",e):(this._deflateStrategy=Math.round(t),(0,o.isNodePattern)(e)&&e.call(this,null,this),this);},filterType:function(t,e){return"number"!=typeof t?o.throwError.call(this,"n must be a number",e):t<-1||t>4?o.throwError.call(this,"n must be -1 (auto) or a number 0 - 4",e):(this._filterType=Math.round(t),(0,o.isNodePattern)(e)&&e.call(this,null,this),this);},colorType:function(t,e){return"number"!=typeof t?o.throwError.call(this,"s must be a number",e):0!==t&&2!==t&&4!==t&&6!==t?o.throwError.call(this,"s must be a number 0, 2, 4, 6.",e):(this._colorType=Math.round(t),(0,o.isNodePattern)(e)&&e.call(this,null,this),this);}}};};r.default=p,e.exports=r.default;},{"@babel/runtime/helpers/defineProperty":7,"@babel/runtime/helpers/interopRequireDefault":11,"@jimp/utils":235,pngjs:129}],233:[function(t,e,r){(function(i){"use strict";var n=t("@babel/runtime/helpers/interopRequireDefault");Object.defineProperty(r,"__esModule",{value:!0}),r.default=void 0;var a=n(t("@babel/runtime/helpers/defineProperty")),o=n(t("utif")),s="image/tiff",u=function(){return{mime:(0,a.default)({},s,["tiff","tif"]),constants:{MIME_TIFF:s},decoders:(0,a.default)({},s,function(t){var e=o.default.decode(t),r=e[0];o.default.decodeImages(t,e);var n=o.default.toRGBA8(r);return{data:i.from(n),width:r.t256[0],height:r.t257[0]};}),encoders:(0,a.default)({},s,function(t){var e=o.default.encodeImage(t.bitmap.data,t.bitmap.width,t.bitmap.height);return i.from(e);})};};r.default=u,e.exports=r.default;}).call(this,t("buffer").Buffer);},{"@babel/runtime/helpers/defineProperty":7,"@babel/runtime/helpers/interopRequireDefault":11,buffer:48,utif:182}],234:[function(t,e,r){"use strict";var i=t("@babel/runtime/helpers/interopRequireDefault");Object.defineProperty(r,"__esModule",{value:!0}),r.default=void 0;var n=t("timm"),a=i(t("@jimp/jpeg")),o=i(t("@jimp/png")),s=i(t("@jimp/bmp")),u=i(t("@jimp/tiff")),h=i(t("@jimp/gif")),l=function(){return(0,n.mergeDeep)((0,a.default)(),(0,o.default)(),(0,s.default)(),(0,u.default)(),(0,h.default)());};r.default=l,e.exports=r.default;},{"@babel/runtime/helpers/interopRequireDefault":11,"@jimp/bmp":229,"@jimp/gif":230,"@jimp/jpeg":231,"@jimp/png":232,"@jimp/tiff":233,timm:177}],235:[function(t,e,r){"use strict";function i(t){if(void 0===t)return!1;if("function"!=typeof t)throw new TypeError("Callback must be a function");return!0;}function n(t,e){if("string"==typeof t&&(t=new Error(t)),"function"==typeof e)return e.call(this,t);throw t;}function a(t,e,r,i,n,a){e=Math.round(e),r=Math.round(r),i=Math.round(i),n=Math.round(n);for(var o=r;o { - -const app = window.require('photoshop').app; -const batchPlay = (__webpack_require__(/*! photoshop */ "photoshop").action.batchPlay); -const { - executeAsModal -} = (__webpack_require__(/*! photoshop */ "photoshop").core); -// const export_png = require('./export_png') - -// const { layerToSelection } = require('./helper') - -const storage = (__webpack_require__(/*! uxp */ "uxp").storage); -const fs = storage.localFileSystem; -async function createSolidLayer(r, g, b) { - console.warn('this function is deprecated'); - await executeAsModal(async () => { - const result = await batchPlay([{ - _obj: 'make', - _target: [{ - _ref: 'contentLayer' - }], - using: { - _obj: 'contentLayer', - type: { - _obj: 'solidColorLayer', - color: { - _obj: 'RGBColor', - red: r, - grain: g, - blue: b - } - } - }, - _options: { - dialogOptions: 'dontDisplay' - } - }], { - synchronousExecution: true, - modalBehavior: 'execute' - }); - }); -} -async function makeGroupCommand() { - const result = await batchPlay([{ - _obj: 'make', - _target: [{ - _ref: 'layerSection' - }], - layerSectionStart: 405, - layerSectionEnd: 406, - name: 'Group 16', - _options: { - dialogOptions: 'dontDisplay' - } - }], { - synchronousExecution: true, - modalBehavior: 'execute' - }); - console.log('makeGroupCommand: ', result); - return result; -} -async function createEmptyGroup(name = 'New Group') { - let groupLayer; - await executeAsModal(async () => { - await makeGroupCommand(); - groupLayer = app.activeDocument.activeLayers[0]; - groupLayer.name = name; - }); - console.log('groupLayer:', groupLayer); - return groupLayer; -} -async function moveToGroupCommand(to_index, layerIDs) { - const batchPlay = (__webpack_require__(/*! photoshop */ "photoshop").action.batchPlay); - console.log('to_index:', to_index); - console.log('layerIDs:', layerIDs); - const result = await batchPlay([{ - _obj: 'move', - _target: [{ - _ref: 'layer', - _enum: 'ordinal', - _value: 'targetEnum' - }], - to: { - _ref: 'layer', - _index: to_index - }, - adjustment: false, - version: 5, - layerID: layerIDs, - _options: { - dialogOptions: 'dontDisplay' - } - }], { - synchronousExecution: true, - modalBehavior: 'execute' - }); -} -function MoveToGroupExe(toIndex, layerIDs) { - try { - executeAsModal(async () => { - await moveToGroupCommand(toIndex, layerIDs); - }); - } catch (e) { - console.warn('executeCommand error:', e); - } -} -async function getIndexCommand(layer_id) { - const idx = batchPlay([{ - _obj: 'get', - _target: [{ - _property: 'itemIndex' - }, { - _ref: 'layer', - // _name: 'myGroup' - _id: layer_id - }], - _options: { - dialogOptions: 'dontDisplay' - } - }], { - synchronousExecution: true - })[0]['itemIndex']; - console.log('index:', idx); - return idx; -} -async function getLayerIndex(layer_id) { - const { - executeAsModal - } = (__webpack_require__(/*! photoshop */ "photoshop").core); - try { - let index; - await executeAsModal(async () => { - index = await getIndexCommand(layer_id); - console.log('getIndex: ', index); - }); - return index; - } catch (e) { - console.warn('getIndex error:', e); - } -} -async function unselectActiveLayers() { - const layers = await app.activeDocument.activeLayers; - for (layer of layers) { - layer.selected = false; - } -} -async function unselectActiveLayersExe() { - await executeAsModal(async () => { - await unselectActiveLayers(); - }); -} -async function selectLayers(layers) { - await unselectActiveLayers(); - for (layer of layers) { - try { - if (layer) { - const is_visible = layer.visible; // don't change the visibility when selecting the layer - layer.selected = true; - layer.visible = is_visible; - } - } catch (e) { - console.warn(e); - } - } -} -async function setVisibleExe(layer, is_visible) { - try { - await executeAsModal(async () => { - layer.visible = is_visible; - }); - } catch (e) { - console.warn(e); - } -} -async function selectLayersExe(layers) { - await executeAsModal(async () => { - await selectLayers(layers); - }); -} -async function selectGroup(layer) { - await unselectActiveLayers(); - layer.parent.selected = true; -} -async function collapseGroup(layer) { - await selectGroup(layer); - await app.activeDocument.activeLayers[0].merge(); -} -async function createMaskCommand() { - const batchPlay = (__webpack_require__(/*! photoshop */ "photoshop").action.batchPlay); - const result = await batchPlay([{ - _obj: 'make', - new: { - _class: 'channel' - }, - at: { - _ref: 'channel', - _enum: 'channel', - _value: 'mask' - }, - using: { - _enum: 'userMaskEnabled', - _value: 'revealSelection' - }, - _options: { - dialogOptions: 'dontDisplay' - } - }], { - synchronousExecution: true, - modalBehavior: 'execute' - }); -} -async function createMaskExe() { - const { - executeAsModal - } = (__webpack_require__(/*! photoshop */ "photoshop").core); - await executeAsModal(createMaskCommand); -} - -//unselect the rectangular marquee selection area -async function unSelectMarqueeCommand() { - const batchPlay = (__webpack_require__(/*! photoshop */ "photoshop").action.batchPlay); - const result = await batchPlay([{ - _obj: 'set', - _target: [{ - _ref: 'channel', - _property: 'selection' - }], - to: { - _enum: 'ordinal', - _value: 'none' - }, - _options: { - dialogOptions: 'dontDisplay' - } - }], { - synchronousExecution: true, - modalBehavior: 'execute' - }); - return result; -} -async function unSelectMarqueeExe() { - try { - await executeAsModal(unSelectMarqueeCommand); - } catch (e) { - console.warn(e); - } -} - -//REFACTOR: move to selection.js -async function selectMarqueeRectangularToolExe() { - async function selectMarqueeRectangularToolCommand() { - const result = await batchPlay([{ - _obj: 'select', - _target: [{ - _ref: 'marqueeRectTool' - }], - _options: { - dialogOptions: 'dontDisplay' - } - }], { - synchronousExecution: true, - modalBehavior: 'execute' - }); - return result; - } - await executeAsModal(async () => { - await selectMarqueeRectangularToolCommand(); - }); -} -async function promptForMarqueeTool() { - console.warn('promptForMarqueeTool is deprecated use Notification class'); - (async () => { - const r1 = await dialog_box.prompt('Please Select a Rectangular Area', 'You Forgot to select a Rectangular Area', ['Cancel', 'Rectangular Marquee']); - if ((r1 || 'Rectangular Marquee') !== 'Rectangular Marquee') { - /* cancelled or No */ - console.log('cancel'); - } else { - /* Yes */ - console.log('Rectangular Marquee'); - selectMarqueeRectangularToolExe(); - } - })(); -} -async function selectLayerChannelCommand() { - // const result = await batchPlay( - // [ - // { - // _obj: 'set', - // _target: [ - // { - // _ref: 'channel', - // _property: 'selection' - // } - // ], - // to: { - // _ref: [ - // { - // _ref: 'channel', - // _enum: 'channel', - // _value: 'transparencyEnum' - // }, - // { - // _ref: 'layer', - // _name: 'Group 5' - // } - // ] - // }, - // _options: { - // dialogOptions: 'dontDisplay' - // } - // } - // ], - // { - // synchronousExecution: false, - // modalBehavior: 'execute' - // } - // ) - const batchPlay = (__webpack_require__(/*! photoshop */ "photoshop").action.batchPlay); - const result = await batchPlay([{ - _obj: 'set', - _target: [{ - _ref: 'channel', - _property: 'selection' - }], - to: { - _ref: 'channel', - _enum: 'channel', - _value: 'transparencyEnum' - }, - _options: { - dialogOptions: 'dontDisplay' - } - }], { - synchronousExecution: true, - modalBehavior: 'execute' - }); -} -async function getSelectionInfoCommand() { - // console.warn('getSelectionInfoCommand is deprecated use SelectionInfoDesc') - const result = await batchPlay([{ - _obj: 'get', - _target: [{ - _property: 'selection' - }, { - _ref: 'document', - _id: app.activeDocument._id - }], - _options: { - dialogOptions: 'dontDisplay' - } - }], { - synchronousExecution: true, - modalBehavior: 'execute' - }); - return result; -} -function isSelectionValid(selection) { - // console.warn( - // 'isSelectionValid is deprecated use selection.isSelectionValid instead' - // ) - if (selection && - // check if the selection is defined - selection.hasOwnProperty('left') && selection.hasOwnProperty('right') && selection.hasOwnProperty('top') && selection.hasOwnProperty('bottom')) { - return true; - } - return false; -} -async function getSelectionInfoExe() { - // console.log('getSelectionInfo was called') - // console.warn( - // 'getSelectionInfoExe is deprecated use selection.getSelectionInfoExe instead' - // ) - try { - const selection = (await executeAsModal(getSelectionInfoCommand))[0].selection; - if (isSelectionValid(selection)) { - let selection_info = { - left: selection.left._value, - right: selection.right._value, - bottom: selection.bottom._value, - top: selection.top._value, - height: selection.bottom._value - selection.top._value, - width: selection.right._value - selection.left._value - }; - // console.dir({selection_info}) - return selection_info; - } - } catch (e) { - console.warn('selection info error', e); - } -} -async function reSelectMarqueeCommand(selectionInfo) { - const result = await batchPlay([{ - _obj: 'set', - _target: [{ - _ref: 'channel', - _property: 'selection' - }], - to: { - _obj: 'rectangle', - top: { - _unit: 'pixelsUnit', - _value: selectionInfo.top - }, - left: { - _unit: 'pixelsUnit', - _value: selectionInfo.left - }, - bottom: { - _unit: 'pixelsUnit', - _value: selectionInfo.bottom - }, - right: { - _unit: 'pixelsUnit', - _value: selectionInfo.right - } - }, - _options: { - dialogOptions: 'dontDisplay' - } - }], { - synchronousExecution: true, - modalBehavior: 'execute' - }); -} -async function reSelectMarqueeExe(selectionInfo) { - try { - if (isSelectionValid(selectionInfo)) { - //only try to reactivate the selection area if it is valid - await executeAsModal(async () => { - await reSelectMarqueeCommand(selectionInfo); - }); - } - } catch (e) { - console.warn(e); - } -} -async function snapshot_layer() { - let psAction = (__webpack_require__(/*! photoshop */ "photoshop").action); - // const ids = (await app.activeDocument.activeLayers).map(layer => layer.id) - const ids = await app.activeDocument.layers.map(layer => layer.id); - let command = [ - // Select All Layers current layer - { - _obj: 'selectAllLayers', - _target: [{ - _enum: 'ordinal', - _ref: 'layer', - _value: 'targetEnum' - }] - }, - // Duplicate current layer - // {"ID":[459,460,461,462,463,464,465,466,467,468,469,470,471,472,473,474,475,476,477,478,479,480,481,482,483,484,485,486,487,488,489,490,491,492,493,494,495,496,497,498,499,500,501,502,503,504,505,506,507,508,509,510,511,512,513],"_obj":"duplicate","_target":[{"_enum":"ordinal","_ref":"layer","_value":"targetEnum"}],"version":5}, - { - ID: ids, - _obj: 'duplicate', - _target: [{ - _enum: 'ordinal', - _ref: 'layer', - _value: 'targetEnum' - }] - // version: 5 - }, - // Merge Layers - { - _obj: 'mergeLayersNew' - }, - // Make - { - _obj: 'make', - at: { - _enum: 'channel', - _ref: 'channel', - _value: 'mask' - }, - new: { - _class: 'channel' - }, - using: { - _enum: 'userMaskEnabled', - _value: 'revealSelection' - } - }, - // Set Selection - { - _obj: 'set', - _target: [{ - _property: 'selection', - _ref: 'channel' - }], - to: { - _enum: 'ordinal', - _ref: 'channel', - _value: 'targetEnum' - } - }]; - const result = await psAction.batchPlay(command, { - synchronousExecution: true, - modalBehavior: 'execute' - }); - console.log('snapshot_layer: result: ', result); - return result; -} -async function snapshot_layer_new() { - //similar to snapshot_layer() but fixes the problem with smart effects - - let psAction = (__webpack_require__(/*! photoshop */ "photoshop").action); - const ids = await app.activeDocument.layers.map(layer => layer.id); - const selection_info = await getSelectionInfoExe(); - let create_snapshot_layer_command = [ - // Select All Layers current layer - { - _obj: 'selectAllLayers', - _target: [{ - _enum: 'ordinal', - _ref: 'layer', - _value: 'targetEnum' - }] - }, - // Duplicate current layer - - { - ID: ids, - _obj: 'duplicate', - _target: [{ - _enum: 'ordinal', - _ref: 'layer', - _value: 'targetEnum' - }] - // version: 5 - }, - // Merge Layers - { - _obj: 'mergeLayersNew' - }]; - const result = await psAction.batchPlay(create_snapshot_layer_command, { - synchronousExecution: true, - modalBehavior: 'execute' - }); - await reSelectMarqueeExe(selection_info); //reselect the selection area for the mask - //make a mask of the selection area - const make_mask_command = [ - // Make - { - _obj: 'make', - at: { - _enum: 'channel', - _ref: 'channel', - _value: 'mask' - }, - new: { - _class: 'channel' - }, - using: { - _enum: 'userMaskEnabled', - _value: 'revealSelection' - } - } - // // Set Selection - // { - // _obj: 'set', - // _target: [{ _property: 'selection', _ref: 'channel' }], - // to: { _enum: 'ordinal', _ref: 'channel', _value: 'targetEnum' }, - // }, - ]; - - const result_2 = await psAction.batchPlay(make_mask_command, { - synchronousExecution: true, - modalBehavior: 'execute' - }); - await reSelectMarqueeExe(selection_info); //reselect the selection area again so we don't break other functionality - - console.log('snapshot_layer: result: ', result); - return result; -} -async function snapshot_layerExe() { - try { - await executeAsModal(async () => { - await snapshot_layer_new(); - }, { - commandName: 'Action Commands' - }); - } catch (e) { - console.error(e); - } -} -async function snapshot_layer_no_slide() { - let psAction = (__webpack_require__(/*! photoshop */ "photoshop").action); - // const ids = (await app.activeDocument.activeLayers).map(layer => layer.id) - const ids = await app.activeDocument.layers.map(layer => layer.id); - let command = [ - // Select All Layers current layer - { - _obj: 'selectAllLayers', - _target: [{ - _enum: 'ordinal', - _ref: 'layer', - _value: 'targetEnum' - }] - }, - // Duplicate current layer - // {"ID":[459,460,461,462,463,464,465,466,467,468,469,470,471,472,473,474,475,476,477,478,479,480,481,482,483,484,485,486,487,488,489,490,491,492,493,494,495,496,497,498,499,500,501,502,503,504,505,506,507,508,509,510,511,512,513],"_obj":"duplicate","_target":[{"_enum":"ordinal","_ref":"layer","_value":"targetEnum"}],"version":5}, - { - ID: ids, - _obj: 'duplicate', - _target: [{ - _enum: 'ordinal', - _ref: 'layer', - _value: 'targetEnum' - }] - // version: 5 - } - - // // Merge Layers - // { _obj: 'mergeLayersNew' }, - // // Make - // { - // _obj: 'make', - // at: { _enum: 'channel', _ref: 'channel', _value: 'mask' }, - // new: { _class: 'channel' }, - // using: { _enum: 'userMaskEnabled', _value: 'revealSelection' }, - // }, - // // Set Selection - // { - // _obj: 'set', - // _target: [{ _property: 'selection', _ref: 'channel' }], - // to: { _enum: 'ordinal', _ref: 'channel', _value: 'targetEnum' }, - // }, - ]; - - const result = await psAction.batchPlay(command, { - synchronousExecution: true, - modalBehavior: 'execute' - }); - console.log('snapshot_layer: result: ', result); - return result; -} -async function snapshot_layer_no_slide_Exe() { - try { - await executeAsModal(async () => { - await snapshot_layer_no_slide(); - }, { - commandName: 'Action Commands' - }); - } catch (e) { - console.error(e); - } -} - -// await runModalFunction(); - -async function fillAndGroup() { - let result; - let psAction = (__webpack_require__(/*! photoshop */ "photoshop").action); - - // let newCommand =[ - // // snapshotLayer - - // // makeGroupCommand - - // // Make fill layer - // {"_obj":"make","_target":[{"_ref":"contentLayer"}],"using":{"_obj":"contentLayer","type":{"_obj":"solidColorLayer","color":{"_obj":"RGBColor","blue":255.0,"grain":255.0,"red":255.0}}}}, - - // ] - - let command = [ - // Make fill layer - { - _obj: 'make', - _target: [{ - _ref: 'contentLayer' - }], - using: { - _obj: 'contentLayer', - type: { - _obj: 'solidColorLayer', - color: { - _obj: 'RGBColor', - blue: 255.0, - grain: 255.0, - red: 255.0 - } - } - } - } - // Move current layer - // {"_obj":"move","_target":[{"_enum":"ordinal","_ref":"layer","_value":"targetEnum"}],"adjustment":false,"layerID":[17],"to":{"_index":7,"_ref":"layer"},"version":5}, - // Select layer “Layer 4 copy” - // {"_obj":"select","_target":[{"_name":"Layer 4 copy","_ref":"layer"}],"layerID":[17,15],"makeVisible":false,"selectionModifier":{"_enum":"selectionModifierType","_value":"addToSelectionContinuous"}}, - // Make Group - // {"_obj":"make","_target":[{"_ref":"layerSection"}],"from":{"_enum":"ordinal","_ref":"layer","_value":"targetEnum"},"layerSectionEnd":19,"layerSectionStart":18,"name":"Group 1"} - ]; - - const snapshotLayer = await app.activeDocument.activeLayers[0]; - await makeGroupCommand(); - const groupLayer = app.activeDocument.activeLayers[0]; - result = await psAction.batchPlay(command, {}); - const fillLayer = app.activeDocument.activeLayers[0]; - snapshotLayer.moveAbove(fillLayer); - // await app.activeDocument.activeLayers[0].moveAbove() - // const layerIDs = [] - // const to_index = await getIndexCommand(groupLayer.id) - // await moveToGroupCommand(to_index, layerIDs) -} - -async function fillAndGroupExe() { - await (__webpack_require__(/*! photoshop */ "photoshop").core.executeAsModal)(fillAndGroup, { - commandName: 'Action Commands' - }); -} -async function fastSnapshot() { - await snapshot_layerExe(); - await fillAndGroupExe(); -} -function layerToFileName(layer, session_id) { - file_name = `${layer.name}_${layer.id}_${session_id}`; - return file_name; -} -function layerNameToFileName(layer_name, layer_id, session_id) { - file_name = `${layer_name}_${layer_id}_${session_id}`; - return file_name; -} -async function silentSetInitImage(layer, session_id) { - try { - const html_manip = __webpack_require__(/*! ./utility/html_manip */ "../stable-diffusion-webui/extensions/Auto-Photoshop-StableDiffusion-Plugin/utility/html_manip.js"); - const io = __webpack_require__(/*! ./utility/io */ "../stable-diffusion-webui/extensions/Auto-Photoshop-StableDiffusion-Plugin/utility/io.js"); - // const layer = await app.activeDocument.activeLayers[0] - const old_name = layer.name; - - // image_name = await app.activeDocument.activeLayers[0].name - - //convert layer name to a file name - let image_name = layerNameToFileName(old_name, layer.id, session_id); - image_name = `${image_name}.png`; - - //the width and height of the exported image - const width = html_manip.getWidth(); - const height = html_manip.getHeight(); - - //get the selection from the canvas as base64 png, make sure to resize to the width and height slider - const selectionInfo = g_generation_session.selectionInfo; - // const base64_image = await io.IO.getSelectionFromCanvasAsBase64Silent( - // selectionInfo, - // true, - // width, - // height - // ) - - const use_silent_mode = html_manip.getUseSilentMode(); - // if (use_silent_mode) { - // base64_image = await io.IO.getSelectionFromCanvasAsBase64Silent( - // selectionInfo, - // true, - // width, - // height - // ) - // } else { - // base64_image = await io.IO.getSelectionFromCanvasAsBase64NonSilent( - // layer, - - // image_name, - // width, - // height - // ) - // } - const base64_image = await io.IO.getSelectionFromCanvasAsBase64Interface(width, height, layer, selectionInfo, true, use_silent_mode, image_name); - //save base64 as file in the init_images directory - const init_entry = await getInitImagesDir(); - await io.IO.base64PngToPngFile(base64_image, init_entry, image_name); - g_init_image_name = image_name; - console.log(image_name); - const path = `${g_init_images_dir}/${image_name}`; - - //store the base64 init image and also set it as the active/latest init image - g_generation_session.base64initImages[path] = base64_image; - g_generation_session.activeBase64InitImage = base64_image; - const init_src = base64ToSrc(g_generation_session.activeBase64InitImage); - html_manip.setInitImageSrc(init_src); - return image_info = { - name: image_name, - base64: base64_image - }; - } catch (e) { - console.error(`psapi.js silentSetInitImage error:, ${e}`); - } -} -async function silentSetInitImageMask(layer, session_id) { - try { - const html_manip = __webpack_require__(/*! ./utility/html_manip */ "../stable-diffusion-webui/extensions/Auto-Photoshop-StableDiffusion-Plugin/utility/html_manip.js"); - - // const layer = await app.activeDocument.activeLayers[0] - const old_name = layer.name; - image_name = layerNameToFileName(old_name, layer.id, session_id); - image_name = `${image_name}.png`; - const width = html_manip.getWidth(); - const height = html_manip.getHeight(); - - //get the selection from the canvas as base64 png, make sure to resize to the width and height slider - const selectionInfo = g_generation_session.selectionInfo; - const use_silent_mode = html_manip.getUseSilentMode(); - const base64_image = await io.IO.getSelectionFromCanvasAsBase64Interface(width, height, layer, selectionInfo, true, use_silent_mode, image_name); - - //save base64 as file in the init_images directory - const init_entry = await getInitImagesDir(); - await io.IO.base64PngToPngFile(base64_image, init_entry, image_name); - g_init_image_mask_name = image_name; // this is the name we will send to the server - - console.log(image_name); - const path = `${g_init_images_dir}/${image_name}`; - g_generation_session.base64maskImage[path] = base64_image; - g_generation_session.activeBase64MaskImage = base64_image; - const mask_src = base64ToSrc(g_generation_session.activeBase64MaskImage); - html_manip.setInitImageMaskSrc(mask_src); - return image_info = { - name: image_name, - base64: base64_image - }; - } catch (e) { - console.error(`psapi.js setInitImageMask error: `, e); - } -} - -// remove the generated mask related layers from the canvas and "layers" panel - -// async function cleanSnapAndFill(layers){ -// // we can delete this function and use cleanLayers() instead -// //delete init image group -// //delete init image (snapshot layer) -// //delete fill layer - -// for (layer of layers){ -// try{ - -// await executeAsModal(async ()=>{await layer.delete()}) -// }catch(e){ -// console.warn("cleanSnapAndFill, issue deleting a layer",e) -// } -// } -// return [] -// } - -async function cleanLayers(layers) { - // g_init_image_related_layers = {} - // g_mask_related_layers = {} - // await loadViewerImages()// we should move loadViewerImages to a new file viewer.js - console.log('cleanLayers() -> layers:', layers); - for (layer of layers) { - try { - if (layer_util.Layer.doesLayerExist(layer)) { - await executeAsModal(async () => { - await layer.delete(); - }); - } - } catch (e) { - console.warn('warning attempting to a delete layer,layer.name: ', layer.name, layer, e); - continue; - } - } - return []; -} - -// async function cleanLayersOutpaint(layers){ -// //delete group mask layer -// //delete mask layer -// //delete group init image layer -// //delete init image layer (snapshot layer) -// //delete fill layer - -// for (layer of layers){ -// try { -// await executeAsModal(async ()=>{await layer.delete()})} -// catch(e){ -// console.warn("warning attempting to a delete layer: ",e) -// } -// } - -// return [] -// } -// async function cleanLayersInpaint(layers){ -// //delete group mask layer -// //delete white mask layer -// //delete the black fill layer -// //delete init image layer (snapshot layer) - -// for (layer of layers){ -// await executeAsModal(async ()=>{await layer.delete()}) -// } - -// return [] -// } -async function createClippingMaskExe() { - const batchPlay = (__webpack_require__(/*! photoshop */ "photoshop").action.batchPlay); - async function createClippingMaskCommand() { - const result = await batchPlay([{ - _obj: 'make', - new: { - _class: 'channel' - }, - at: { - _ref: 'channel', - _enum: 'channel', - _value: 'mask' - }, - using: { - _enum: 'userMaskEnabled', - _value: 'revealSelection' - }, - _options: { - dialogOptions: 'dontDisplay' - } - }], { - synchronousExecution: true, - modalBehavior: 'execute' - }); - } - await executeAsModal(async () => { - await createClippingMaskCommand(); - }); -} -//REFACTOR: delete and replace with getSelectionInfoExe() -async function checkIfSelectionAreaIsActive() { - try { - let isSelectionAreaValid = await getSelectionInfoExe(); - return isSelectionAreaValid; - } catch (e) { - console.warn(e); - } -} -async function saveUniqueDocumentIdExe(new_id) { - const batchPlay = (__webpack_require__(/*! photoshop */ "photoshop").action.batchPlay); - async function saveUniqueDocumentIdCommand() { - const batchPlay = (__webpack_require__(/*! photoshop */ "photoshop").action.batchPlay); - const result = await batchPlay([{ - _obj: 'set', - _target: [{ - _ref: 'property', - _property: 'fileInfo' - }, { - _ref: 'document', - _enum: 'ordinal', - _value: 'targetEnum' - }], - to: { - _obj: 'fileInfo', - caption: new_id, - keywords: [new_id] - }, - _options: { - dialogOptions: 'dontDisplay' - } - }], { - synchronousExecution: true, - modalBehavior: 'execute' - }); - } - await executeAsModal(async () => { - await saveUniqueDocumentIdCommand(); - }); -} -async function readUniqueDocumentIdExe() { - const batchPlay = (__webpack_require__(/*! photoshop */ "photoshop").action.batchPlay); - async function readUniqueDocumentIdCommand() { - const batchPlay = (__webpack_require__(/*! photoshop */ "photoshop").action.batchPlay); - const result = await batchPlay([{ - _obj: 'get', - _target: [{ - _ref: 'property', - _property: 'fileInfo' - }, { - _ref: 'document', - _enum: 'ordinal', - _value: 'targetEnum' - }], - // to: { - // _obj: 'fileInfo', - // caption: new_id, - // keywords: [new_id] - // }, - _options: { - dialogOptions: 'dontDisplay' - } - }], { - synchronousExecution: true, - modalBehavior: 'execute' - }); - console.log('readUniqueDocumentIdCommand: result ', result); - return result; - } - let uniqueDocumentId = ''; - try { - await executeAsModal(async () => { - uniqueDocumentId = (await readUniqueDocumentIdCommand())[0].fileInfo.caption; - if (typeof uniqueDocumentId === 'string') { - uniqueDocumentId = uniqueDocumentId.trim(); - } - }); - } catch (e) { - console.warn('readUniqueDocumentIdExe: ', e); - uniqueDocumentId = ''; - } - return uniqueDocumentId; -} -const readPng = async image_name => { - //it will save the document then read it. store it in memory - // image_name = 'test.png' - try { - let img_buffer; - await executeAsModal(async control => { - const folder = await fs.getTemporaryFolder(); - // const pluginFolder = await fs.getPluginFolder() - - // let init_images_dir = await pluginFolder.getEntry( - // './server/python_server/init_images' - // ) - - const file = await folder.createFile(image_name, { - overwrite: true - }); - const currentDocument = app.activeDocument; - await currentDocument.saveAs.png(file, - // { - // compression: 6, - // }, - null, true); - const arrayBuffer = await file.read({ - format: formats.binary - }); - // console.log(arrayBuffer, 'arrayBuffer') ; - img_buffer = arrayBuffer; - }, { - commandName: 'readPng' - }); - return img_buffer; - } catch (e) { - console.warn(e); - } -}; -async function selectCanvasCommand() { - // const result = await batchPlay( - // [ - // { - // _obj: "historyStateChanged", - // documentID: 1044, - // ID: 1058, - // name: "Select Canvas", - // hasEnglish: true, - // itemIndex: 7, - // commandID: 1017, - // _options: { - // dialogOptions: "dontDisplay" - // } - // } - // ],{ - // synchronousExecution: true, - // modalBehavior: "execute" - // }); - - const result = await batchPlay([{ - _obj: 'set', - _target: [{ - _ref: 'channel', - _property: 'selection' - }], - to: { - _enum: 'ordinal', - _value: 'allEnum' - }, - _options: { - dialogOptions: 'dontDisplay' - } - }], { - synchronousExecution: true, - modalBehavior: 'execute' - }); - return result; -} -async function selectCanvasExe() { - await executeAsModal(async () => { - await selectCanvasCommand(); - }, { - commandName: 'selectCanvasExe' - }); -} -async function newExportPng(layer, image_name, width, height) { - //store layers we want to export in variables - // let layerToExports = - // create new document - // duplicate the layers to the new documnet - //select the layer channel selectLayerChannelCommand - //document.crop - //export using readPng() - - try { - //get the active layers - // const layersToExport = app.activeDocument.activeLayers - - //create new document - // let exportDoc = await executeAsModal(app.documents.add) - let exportDoc; - const makeDoc = async () => { - let exportDoc = await app.documents.add({ - width: width, - height: height, - resolution: await app.activeDocument.resolution, - mode: 'RGBColorMode', - fill: 'transparent' - }); - }; - let image_buffer; - await executeAsModal(async () => { - // await app.documents.add() - await makeDoc(); - exportDoc = app.activeDocument; - console.log('exportDoc.id: ', exportDoc.id); - // for (layer of layersToExport) { - - console.log(layer.id); - const dupLayer = await layer.duplicate(exportDoc); - await selectLayers([dupLayer]); - // await selectLayerChannelCommand() - await selectCanvasExe(); - const canvas_selection_info = await getSelectionInfoExe(); - await layerToSelection(canvas_selection_info); - // const selection_info = await getSelectionInfoExe() - // await exportDoc.crop(selection_info) - // export_image_name = `${layer.name}.png` - image_buffer = await readPng(image_name); - await exportDoc.closeWithoutSaving(); - }, { - commandName: 'NewExportPng' - }); - return image_buffer; - // } - } catch (e) { - console.error(`newExportPng error: ,${e}`); - } -} -async function tempExportPng(layer, image_name, width, height) { - //store layers we want to export in variables - // let layerToExports = - // create new document - // duplicate the layers to the new documnet - //select the layer channel selectLayerChannelCommand - //document.crop - //export using readPng() - - try { - //get the active layers - // const layersToExport = app.activeDocument.activeLayers - - //create new document - // let exportDoc = await executeAsModal(app.documents.add) - let exportDoc; - const makeDoc = async () => { - let exportDoc = await app.documents.add({ - width: width, - height: height, - resolution: await app.activeDocument.resolution, - mode: 'RGBColorMode', - fill: 'transparent' - }); - }; - await executeAsModal(async () => { - // await app.documents.add() - await makeDoc(); - exportDoc = app.activeDocument; - console.log('exportDoc.id: ', exportDoc.id); - // for (layer of layersToExport) { - - console.log(layer.id); - const dupLayer = await layer.duplicate(exportDoc); - await selectLayers([dupLayer]); - // await selectLayerChannelCommand() - await selectCanvasExe(); - const canvas_selection_info = await getSelectionInfoExe(); - await layerToSelection(canvas_selection_info); - // const selection_info = await getSelectionInfoExe() - // await exportDoc.crop(selection_info) - // export_image_name = `${layer.name}.png` - await readPng(image_name); - await exportDoc.closeWithoutSaving(); - }, { - commandName: 'tempExportPng' - }); - // } - } catch (e) { - console.error(`newExportPng error: ,${e}`); - } -} -async function mergeVisibleCommand() { - const result = await batchPlay([{ - _obj: 'mergeVisible', - duplicate: true, - _isCommand: true - // "_options": { - // // "dialogOptions": "dontDisplay" - // } - }], { - synchronousExecution: true, - modalBehavior: 'execute' - }); - return result; -} -async function mergeVisibleExe() { - await executeAsModal(async () => { - await mergeVisibleCommand(); - }); -} -async function layerToSelection(selection_info) { - //store active layer for later - - try { - //Store selection info - //unSelect - //move layer - //scale layer - //Select from selection info - // let selection_info = await getSelectionInfo() - - console.log('selection_info:', selection_info); - console.log('unSelect'); - function getLayerSize(layer) { - console.log('layer.bounds:'); - console.dir(layer.bounds); - const bounds = layer.bounds; - const height = bounds.bottom - bounds.top; - const width = bounds.right - bounds.left; - return { - height: height, - width: width, - left: bounds.left, - right: bounds.right, - top: bounds.top, - bottom: bounds.bottom - }; - } - //scale layer - async function scaleLayer(layer, selection_info) { - console.log('scaleLayer got called'); - // const activeLayer = getActiveLayer() - // const activeLayer = await app.activeDocument.activeLayers[0] - - let layer_info = getLayerSize(layer); - scale_x_ratio = selection_info.width / layer_info.width * 100; - scale_y_ratio = selection_info.height / layer_info.height * 100; - console.log('scale_x_y_ratio:', scale_x_ratio, scale_y_ratio); - await layer.scale(scale_x_ratio, scale_y_ratio); - } - async function moveLayerExe(layerToMove, selection_info) { - let layer_info = getLayerSize(layerToMove); - top_dist = layer_info.top - selection_info.top; - left_dist = layer_info.left - selection_info.left; - await layerToMove.translate(-left_dist, -top_dist); - } - // const activeLayer = await getActiveLayer() - - //store all active layers - const activeLayers = await app.activeDocument.activeLayers; - await unSelectMarqueeExe(); - // await executeAsModal(unSelect, {'commandName': 'unSelect'}) - // await executeAsModal(scaleLayer, {'commandName': 'scaleLayer'}) - - await executeAsModal(async () => { - for (let layer of activeLayers) { - await selectLayers([layer]); // make sure only one layer is selected - await scaleLayer(layer, selection_info); //scale to selection size - await moveLayerExe(layer, selection_info); //move to selection - } - }, { - commandName: 'moveLayerExe' - }); - - // await reselect(selection_info) - } catch (e) { - console.warn(e); - } -} -function executeCommandExe(commandFunc) { - try { - ; - (async () => { - await executeAsModal(async () => { - await commandFunc(); - }); - })(); - } catch (e) { - console.warn(e); - } -} -async function executeDescExe(Desc) { - try { - await executeAsModal(async () => { - const result = await batchPlay([Desc], { - synchronousExecution: true, - modalBehavior: 'execute' - }); - console.log(result); - }); - } catch (e) { - console.warn(e); - } -} -module.exports = { - createSolidLayer, - createEmptyGroup, - getLayerIndex, - collapseGroup, - moveToGroupCommand, - MoveToGroupExe, - selectLayers, - selectLayersExe, - unselectActiveLayers, - unselectActiveLayersExe, - createMaskExe, - getSelectionInfoExe, - unSelectMarqueeCommand, - unSelectMarqueeExe, - reSelectMarqueeExe, - selectLayerChannelCommand, - snapshot_layer, - snapshot_layerExe, - fillAndGroupExe, - fastSnapshot, - layerToFileName, - layerNameToFileName, - // cleanLayersOutpaint, - // cleanLayersInpaint, - // cleanSnapAndFill, - cleanLayers, - createClippingMaskExe, - checkIfSelectionAreaIsActive, - selectMarqueeRectangularToolExe, - promptForMarqueeTool, - saveUniqueDocumentIdExe, - readUniqueDocumentIdExe, - newExportPng, - mergeVisibleExe, - selectCanvasExe, - layerToSelection, - isSelectionValid, - snapshot_layer_no_slide_Exe, - setVisibleExe, - silentSetInitImage, - silentSetInitImageMask, - executeCommandExe, - executeDescExe, - getSelectionInfoCommand -}; - -/***/ }), - -/***/ "../stable-diffusion-webui/extensions/Auto-Photoshop-StableDiffusion-Plugin/sdapi_py_re.js": -/*!*************************************************************************************************!*\ - !*** ../stable-diffusion-webui/extensions/Auto-Photoshop-StableDiffusion-Plugin/sdapi_py_re.js ***! - \*************************************************************************************************/ -/***/ ((module, __unused_webpack_exports, __webpack_require__) => { - -const { - getDummyBase64, - getDummyBase64_2 -} = __webpack_require__(/*! ./utility/dummy */ "../stable-diffusion-webui/extensions/Auto-Photoshop-StableDiffusion-Plugin/utility/dummy.js"); -const { - base64ToBase64Url -} = __webpack_require__(/*! ./utility/general */ "../stable-diffusion-webui/extensions/Auto-Photoshop-StableDiffusion-Plugin/utility/general.js"); -const { - getExtensionType -} = __webpack_require__(/*! ./utility/html_manip */ "../stable-diffusion-webui/extensions/Auto-Photoshop-StableDiffusion-Plugin/utility/html_manip.js"); -const py_re = __webpack_require__(/*! ./utility/sdapi/python_replacement */ "../stable-diffusion-webui/extensions/Auto-Photoshop-StableDiffusion-Plugin/utility/sdapi/python_replacement.js"); -const Enum = __webpack_require__(/*! ./enum */ "../stable-diffusion-webui/extensions/Auto-Photoshop-StableDiffusion-Plugin/enum.js"); -// const control_net = require('./utility/tab/control_net') -const { - mapPluginSettingsToControlNet, - getEnableControlNet, - getModuleDetail -} = __webpack_require__(/*! ./utility/tab/control_net */ "../stable-diffusion-webui/extensions/Auto-Photoshop-StableDiffusion-Plugin/utility/tab/control_net.js"); -const api = __webpack_require__(/*! ./utility/api */ "../stable-diffusion-webui/extensions/Auto-Photoshop-StableDiffusion-Plugin/utility/api.js"); -//javascript plugin can't read images from local directory so we send a request to local server to read the image file and send it back to plugin as image string base64 - -//REFACTOR: move this function to io.js -async function requestSavePng(base64_image, image_name) { - try { - console.log('requestSavePng():'); - const uniqueDocumentId = await getUniqueDocumentId(); - const folder = `${uniqueDocumentId}/init_images`; - const init_entry = await getInitImagesDir(); - saveFileInSubFolder(base64_image, folder, image_name); - console.warn('this function is deprecated'); - } catch (e) { - console.warn(e); - return {}; - } -} -async function requestTxt2Img(payload) { - try { - console.log('requestTxt2Img(): about to send a fetch request'); - let json = await py_re.txt2ImgRequest(payload); - console.log('requestTxt2Img json:', json); - return json; - } catch (e) { - console.warn(e); - return {}; - } -} -async function requestImg2Img(payload) { - console.log('requestImg2Img(): about to send a fetch request'); - try { - let json = await py_re.img2ImgRequest(g_sd_url, payload); - console.log('requestImg2Img json:'); - console.dir(json); - return json; - } catch (e) { - console.warn(e); - return {}; - } -} -async function requestProgress() { - let json = {}; - try { - console.log('requestProgress: '); - const full_url = `${g_sd_url}/sdapi/v1/progress?skip_current_image=false`; - let request = await fetch(full_url); - json = await request.json(); - console.log('progress json:', json); - return json; - } catch (e) { - console.warn(e); - // console.log('json: ', json) - } -} - -async function requestGetModels() { - console.log('requestGetModels: '); - let json = []; - const full_url = `${g_sd_url}/sdapi/v1/sd-models`; - try { - let request = await fetch(full_url); - json = await request.json(); - console.log('models json:'); - console.dir(json); - } catch (e) { - console.warn(`issues requesting from ${full_url}`, e); - } - return json; -} -async function requestGetSamplers() { - let json = null; - try { - console.log('requestGetSamplers: '); - const full_url = `${g_sd_url}/sdapi/v1/samplers`; - let request = await fetch(full_url); - json = await request.json(); - console.log('samplers json:', json); - } catch (e) { - console.warn(e); - } - return json; -} -async function requestSwapModel(model_title) { - console.log('requestSwapModel: '); - const full_url = `${g_sd_url}/sdapi/v1/options`; - payload = { - sd_model_checkpoint: model_title - }; - let request = await fetch(full_url, { - method: 'POST', - headers: { - Accept: 'application/json', - 'Content-Type': 'application/json' - }, - body: JSON.stringify(payload) - }); - let json = await request.json(); - console.log('models json:'); - console.dir(json); - return json; -} -async function requestInterrupt() { - const full_url = `${g_sd_url}/sdapi/v1/interrupt`; - try { - console.log('requestInterrupt: '); - payload = ''; - let request = await fetch(full_url, { - method: 'POST', - headers: { - Accept: 'application/json', - 'Content-Type': 'application/json' - } - // body: JSON.stringify(payload) - // "body": payload - }); - - console.log('interrupt request:', request); - let json = await request.json(); - return json; - } catch (e) { - console.warn(e); - } -} -async function getVersionRequest() { - console.log('requestGetSamplers: '); - const current_version = g_version; - return current_version; -} -async function changeSdUrl(new_sd_url) { - // version = "v0.0.0" - console.log('changeSdUrl: new_sd_url:', new_sd_url); - try { - payload = { - sd_url: new_sd_url - }; - - // const full_url = `${g_sd_url}/sd_url/` - // console.log('changeSdUrl: payload: ', payload) - // let request = await fetch(full_url, { - // method: 'POST', - // headers: { - // Accept: 'application/json', - // 'Content-Type': 'application/json', - // }, - // body: JSON.stringify(payload), - // }) - - g_sd_url = new_sd_url; - // console.log('changeSdUrl: request: ', request) - } catch (e) { - console.warn(e); - } -} - -// function printTheJSONInPrettyFormat(json) { -// // var badJSON = document.getElementById('prettyJSONFormat').value; -// // var parseJSON = JSON.parse(badJSON); -// // var JSONInPrettyFormat = JSON.stringify(json, undefined, 4); -// // return -// } -async function loadHistory(uniqueDocumentId) { - let json = {}; - try { - payload = { - uniqueDocumentId: uniqueDocumentId - }; - json = await py_re.loadHistory(payload); - } catch (e) { - console.warn(e); - } - return [json['image_paths'], json['metadata_jsons'], json['base64_images']]; -} -async function loadPromptShortcut() { - let prompt_shortcut_json = {}; - try { - prompt_shortcut_json = await py_re.loadPromptShortcut('prompt_shortcut.json'); - console.log('loadPromptShortcut:', prompt_shortcut_json); - // console.log('loadPromptShortcut: request: ',request) - } catch (e) { - console.warn(e); - prompt_shortcut_json = {}; - } - return prompt_shortcut_json; - // return json['prompt_shortcut'] -} - -async function savePromptShortcut(prompt_shortcut) { - let json = prompt_shortcut; - try { - await py_re.savePromptShortcut(json, 'prompt_shortcut.json'); - console.log('savePromptShortcut:', json); - // console.log('loadPromptShortcut: request: ',request) - } catch (e) { - console.warn(e); - } - return json['prompt_shortcut']; -} -async function setInpaintMaskWeight(value) { - const full_url = `${g_sd_url}/sdapi/v1/options`; - try { - const payload = { - inpainting_mask_weight: value - }; - await fetch(full_url, { - method: 'POST', - headers: { - Accept: 'application/json', - 'Content-Type': 'application/json' - }, - body: JSON.stringify(payload) - }); - } catch (e) { - console.warn(e); - } -} -async function requestGetConfig() { - console.log('requestGetConfig: '); - let json = []; - const full_url = `${g_sd_url}/config`; - try { - let request = await fetch(full_url); - json = await request.json(); - console.log('models json:'); - console.dir(json); - } catch (e) { - console.warn(`issues requesting from ${full_url}`, e); - } - return json; -} -async function requestGetOptions() { - console.log('requestGetOptions: '); - let json = null; - const full_url = `${g_sd_url}/sdapi/v1/options`; - try { - let request = await fetch(full_url); - if (request.status === 404) { - return null; - } - json = await request.json(); - console.log('models json:'); - console.dir(json); - } catch (e) { - console.warn(`issues requesting from ${full_url}`, e); - } - return json; -} -async function imageSearch(keywords) { - let json = {}; - const extension_url = py_re.getExtensionUrl(); - const full_url = `${extension_url}/search/image/`; - try { - payload = { - keywords: keywords - }; - let request = await fetch(full_url, { - method: 'POST', - headers: { - Accept: 'application/json', - 'Content-Type': 'application/json' - }, - body: JSON.stringify(payload) - }); - json = await request.json(); - console.log('imageSearch:', json); - return json['images']; - } catch (e) { - console.warn(e); - } - return []; -} - -// async function requestHorde(payload) { -// payload = { -// prompt: 'string', -// params: { -// sampler_name: 'k_lms', -// toggles: [1, 4], -// cfg_scale: 5, -// denoising_strength: 0.75, -// seed: 'string', -// height: 512, -// width: 512, -// seed_variation: 1, -// post_processing: ['GFPGAN'], -// karras: false, -// tiling: false, -// steps: 30, -// n: 1, -// }, -// nsfw: false, -// trusted_workers: true, -// censor_nsfw: false, -// workers: ['4c79ab19-8e6c-4054-83b3-773b7ce71ece'], -// models: ['stable_diffusion'], -// // source_image: 'string', -// // source_processing: 'img2img', -// // source_mask: 'string', -// r2: true, -// shared: false, -// } -// try { -// console.log('requestHorde():') - -// const full_url = 'https://stablehorde.net/api/v2/generate/async' -// // const full_url = 'https://stablehorde.net/api/v2/generate/sync' -// console.log(full_url) - -// let request = await fetch(full_url, { -// method: 'POST', -// headers: { -// Accept: 'application/json', -// 'Content-Type': 'application/json', -// apikey: '0000000000', -// // 'Client-Agent': '4c79ab19-8e6c-4054-83b3-773b7ce71ece', -// 'Client-Agent': 'unknown:0:unknown', -// }, -// body: JSON.stringify(payload), -// }) - -// let json = await request.json() -// console.log('requestHorde json:', json) - -// return json -// } catch (e) { -// console.warn(e) -// return {} -// } -// } -// async function requestHordeCheck(id) { -// try { -// console.log('requestHordeCheck():') -// const base_url = 'https://stablehorde.net/api/v2/generate/check' - -// const full_url = `${base_url}/${id}` -// // const full_url = 'https://stablehorde.net/api/v2/generate/sync' -// console.log(full_url) -// const payload = {} -// let request = await fetch(full_url, { -// method: 'GET', -// headers: { -// Accept: 'application/json', -// 'Content-Type': 'application/json', -// // 'Client-Agent': '4c79ab19-8e6c-4054-83b3-773b7ce71ece', -// 'Client-Agent': 'unknown:0:unknown', -// }, -// }) - -// let json = await request.json() -// console.log('requestHordeCheck json:', json) - -// return json -// } catch (e) { -// console.warn(e) -// return {} -// } -// } - -// async function requestHordeStatus(id) { -// try { -// console.log('requestHordeStatus():') -// const base_url = 'https://stablehorde.net/api/v2/generate/status' - -// const full_url = `${base_url}/${id}` -// // const full_url = 'https://stablehorde.net/api/v2/generate/sync' -// console.log(full_url) -// const payload = {} -// let request = await fetch(full_url, { -// method: 'GET', -// headers: { -// Accept: 'application/json', -// 'Content-Type': 'application/json', -// // 'Client-Agent': '4c79ab19-8e6c-4054-83b3-773b7ce71ece', -// 'Client-Agent': 'unknown:0:unknown', -// }, -// }) - -// let json = await request.json() -// console.log('requestHordeStatus json:', json) - -// return json -// } catch (e) { -// console.warn(e) -// return {} -// } -// } - -async function requestExtraSingleImage(payload) { - console.log('requestExtraSingleImage(): about to send a fetch request'); - try { - let json = await py_re.extraSingleImageRequest(g_sd_url, payload); - console.log('requestExtraSingleImage json:'); - console.dir(json); - return json; - } catch (e) { - console.warn(e); - return {}; - } -} -async function requestGetUpscalers() { - console.log('requestGetUpscalers: '); - let json = []; - const full_url = `${g_sd_url}/sdapi/v1/upscalers`; - try { - let request = await fetch(full_url); - json = await request.json(); - console.log('upscalers json:'); - console.dir(json); - } catch (e) { - console.warn(`issues requesting from ${full_url}`, e); - } - return json; -} - -//REFACTOR: reuse the same code for (requestControlNetTxt2Img,requestControlNetImg2Img) -async function requestControlNetTxt2Img(plugin_settings) { - console.log('requestControlNetTxt2Img: '); - - // const full_url = `${g_sd_url}/controlnet/txt2img` - const full_url = `${g_sd_url}/sdapi/v1/txt2img`; - // debugger - const control_net_settings = mapPluginSettingsToControlNet(plugin_settings); - let control_networks = []; - // let active_control_networks = 0 - for (let index = 0; index < g_controlnet_max_models; index++) { - if (!getEnableControlNet(index)) { - control_networks[index] = false; - continue; - } - control_networks[index] = true; - // debugger - if (!control_net_settings['controlnet_units'][index]['input_image']) { - app.showAlert('you need to add a valid ControlNet input image'); - throw 'you need to add a valid ControlNet input image'; - } - if (!control_net_settings['controlnet_units'][index]['module']) { - app.showAlert('you need to select a valid ControlNet Module'); - throw 'you need to select a valid ControlNet Module'; - } - if (!control_net_settings['controlnet_units'][index]['model'] && !getModuleDetail()[control_net_settings['controlnet_units'][index]['module']].model_free) { - app.showAlert('you need to select a valid ControlNet Model'); - throw 'you need to select a valid ControlNet Model'; - } - // active_control_networks++ - } - - let request = await fetch(full_url, { - method: 'POST', - headers: { - Accept: 'application/json', - 'Content-Type': 'application/json' - }, - body: JSON.stringify(control_net_settings) - }); - let json = await request.json(); - console.log('json:', json); - - //update the mask in controlNet tab - const numOfImages = json['images'].length; - let numberOfAnnotations = numOfImages - g_generation_session.last_settings.batch_size; - if (numberOfAnnotations < 0) numberOfAnnotations = 0; - const base64_mask = json['images'].slice(numOfImages - numberOfAnnotations); - let mask_index = 0; - for (let index = 0; index < control_networks.length; index++) { - if (control_networks[index] == false || mask_index >= numberOfAnnotations) continue; - html_manip.setControlMaskSrc(base64ToBase64Url(base64_mask[mask_index]), index); - g_generation_session.controlNetMask[index] = base64_mask[mask_index]; - mask_index++; - } - // g_generation_session.controlNetMask = base64_mask - - const standard_response = await py_re.convertToStandardResponse(control_net_settings, json['images'].slice(0, numOfImages - numberOfAnnotations), plugin_settings['uniqueDocumentId']); - console.log('standard_response:', standard_response); - return standard_response; -} - -//REFACTOR: reuse the same code for (requestControlNetTxt2Img,requestControlNetImg2Img) -async function requestControlNetImg2Img(plugin_settings) { - console.log('requestControlNetImg2Img: '); - const full_url = `${g_sd_url}/sdapi/v1/img2img`; - const control_net_settings = mapPluginSettingsToControlNet(plugin_settings); - - // let control_networks = 0 - let control_networks = []; - for (let index = 0; index < g_controlnet_max_models; index++) { - if (!getEnableControlNet(index)) { - control_networks[index] = false; - continue; - } - control_networks[index] = true; - if (!control_net_settings['controlnet_units'][index]['input_image']) { - app.showAlert('you need to add a valid ControlNet input image'); - throw 'you need to add a valid ControlNet input image'; - } - if (!control_net_settings['controlnet_units'][index]['module']) { - app.showAlert('you need to select a valid ControlNet Module'); - throw 'you need to select a valid ControlNet Module'; - } - if (!control_net_settings['controlnet_units'][index]['model'] && !getModuleDetail()[control_net_settings['controlnet_units'][index]['module']].model_free) { - app.showAlert('you need to select a valid ControlNet Model'); - throw 'you need to select a valid ControlNet Model'; - } - } - let request = await fetch(full_url, { - method: 'POST', - headers: { - Accept: 'application/json', - 'Content-Type': 'application/json' - }, - body: JSON.stringify(control_net_settings) - // body: JSON.stringify(payload), - }); - - let json = await request.json(); - console.log('json:', json); - - //update the mask in controlNet tab - const numOfImages = json['images'].length; - let numberOfAnnotations = numOfImages - g_generation_session.last_settings.batch_size; - if (numberOfAnnotations < 0) numberOfAnnotations = 0; - - // To fix a bug: when Ultimate SD Upscale is active and running, the detection maps won’t be retrieved. - // So set its value to 0 to avoid the result images being loaded in the annotation map interface. - if (scripts.script_store.isInstalled() && scripts.script_store.is_active && scripts.script_store.selected_script_name !== 'None' && scripts.script_store.is_selected_script_available) { - numberOfAnnotations = 0; - } - const base64_mask = json['images'].slice(numOfImages - numberOfAnnotations); - let mask_index = 0; - for (let index = 0; index < control_networks.length; index++) { - if (control_networks[index] == false || mask_index >= numberOfAnnotations) continue; - html_manip.setControlMaskSrc(base64ToBase64Url(base64_mask[mask_index]), index); - g_generation_session.controlNetMask[index] = base64_mask[mask_index]; - mask_index++; - } - - // g_generation_session.controlNetMask = base64_mask - - const standard_response = await py_re.convertToStandardResponse(control_net_settings, json['images'].slice(0, numOfImages - numberOfAnnotations), plugin_settings['uniqueDocumentId']); - console.log('standard_response:', standard_response); - - // //get all images except last because it's the mask - // for (const image of json['images'].slice(0, -1)) { - // await io.IO.base64ToLayer(image) - // } - - return standard_response; -} -async function isWebuiRunning() { - console.log('isWebuiRunning: '); - let json = []; - const full_url = `${g_sd_url}/user`; - try { - let request = await fetch(full_url); - json = await request.json(); - console.log('json:'); - console.dir(json); - } catch (e) { - console.warn(`issues requesting from ${full_url}`, e); - return false; - } - return true; -} -async function requestLoraModels() { - const full_url = `${g_sd_url}/sdapi/v1/loras`; - const lora_models = (await api.requestGet(full_url)) ?? []; - return lora_models; -} -module.exports = { - requestTxt2Img, - requestImg2Img, - requestProgress, - requestGetModels, - requestSwapModel, - requestInterrupt, - requestGetSamplers, - getVersionRequest, - changeSdUrl, - loadPromptShortcut, - savePromptShortcut, - loadHistory, - setInpaintMaskWeight, - requestGetConfig, - requestGetOptions, - imageSearch, - requestSavePng, - // requestHorde, - // requestHordeCheck, - // requestHordeStatus, - requestExtraSingleImage, - requestGetUpscalers, - requestControlNetTxt2Img, - requestControlNetImg2Img, - isWebuiRunning, - requestLoraModels -}; - -/***/ }), - -/***/ "../stable-diffusion-webui/extensions/Auto-Photoshop-StableDiffusion-Plugin/selection.js": -/*!***********************************************************************************************!*\ - !*** ../stable-diffusion-webui/extensions/Auto-Photoshop-StableDiffusion-Plugin/selection.js ***! - \***********************************************************************************************/ -/***/ ((module, __unused_webpack_exports, __webpack_require__) => { - -const psapi = __webpack_require__(/*! ./psapi */ "../stable-diffusion-webui/extensions/Auto-Photoshop-StableDiffusion-Plugin/psapi.js"); -const html_manip = __webpack_require__(/*! ./utility/html_manip */ "../stable-diffusion-webui/extensions/Auto-Photoshop-StableDiffusion-Plugin/utility/html_manip.js"); -function finalWidthHeight(selectionWidth, selectionHeight, minWidth, minHeight) { - // const minWidth = 512 - // const minHeight = 512 - - // const selectionWidth = 256 - // const selectionHeight = 1000 - - let finalWidth = 0; - let finalHeight = 0; - if (selectionWidth <= selectionHeight) { - //do operation on the smaller dimension - const scaleRatio = selectionWidth / minWidth; - finalWidth = minWidth; - finalHeight = selectionHeight / scaleRatio; - } else { - const scaleRatio = selectionHeight / minHeight; - finalHeight = minHeight; - finalWidth = selectionWidth / scaleRatio; - } - return [finalWidth, finalHeight]; -} -async function selectionToFinalWidthHeight() { - // const { getSelectionInfoExe } = require('./psapi') - try { - const selectionInfo = await psapi.getSelectionInfoExe(); - const [finalWidth, finalHeight] = finalWidthHeight(selectionInfo.width, selectionInfo.height, 512, 512); - return [parseInt(finalWidth), parseInt(finalHeight), selectionInfo.width, selectionInfo.height]; - } catch (e) { - console.warn('you need a rectangular selection', e); - } -} -async function selectBoundingBox() { - let l = await app.activeDocument.activeLayers[0]; - let bounds = await l.boundsNoEffects; - let selectionInfo = convertSelectionObjectToSelectionInfo(bounds); - await psapi.reSelectMarqueeExe(selectionInfo); - return selectionInfo; -} -function convertSelectionObjectToSelectionInfo(selection_obj) { - let selection_info = { - left: selection_obj._left, - right: selection_obj._right, - bottom: selection_obj._bottom, - top: selection_obj._top, - height: selection_obj._bottom - selection_obj._top, - width: selection_obj._right - selection_obj._left - }; - return selection_info; -} -const SelectionInfoDesc = () => ({ - _obj: 'get', - _target: [{ - _property: 'selection' - }, { - _ref: 'document', - _id: app.activeDocument._id - }], - _options: { - dialogOptions: 'dontDisplay' - } -}); -async function createChannelIfNotExists(channelName) { - // const photoshop = require('photoshop') - // const app = photoshop.app - // const batchPlay = photoshop.action.batchPlay - - // // Check if the channel exists - // let channelExists = false - // for (const channel of app.activeDocument.channels) { - // if (channel.name === channelName) { - // channelExists = true - // break - // } - // } - - // // Create the channel if it doesn't exist - // if (!channelExists) { - // await batchPlay( - // [ - // { - // _obj: 'make', - // _target: [ - // { - // _ref: 'channel', - // }, - // ], - // using: { - // _obj: 'channel', - // name: channelName, - // }, - // }, - // ], - // {} - // ) - // } - if (!app.activeDocument.channels.getByName(channelName)) {} -} -const makeMaskChannel = () => ({ - _obj: 'set', - _target: { - _ref: 'channel', - _property: 'selection' - }, - to: { - _ref: 'channel', - _name: 'inpaint_mask' - } -}); -async function makeMaskChannelExe() { - await executeAsModal(async () => { - const result = await batchPlay([ - // SelectionInfoDesc(), - // makeMaskChannel(), - { - _obj: 'duplicate', - _target: [{ - _ref: 'channel', - _property: 'selection' - }], - name: 'inpaint_mask_2', - _isCommand: true - }, - // { - // _obj: 'set', - // _target: { _ref: 'channel', _property: 'selection' }, - // to: { _ref: 'channel', _name: 'inpaint_mask' }, - // }, - { - _obj: 'make', - new: { - _class: 'channel' - }, - at: { - _ref: 'channel', - _enum: 'channel', - _value: 'mask' - }, - using: { - _enum: 'userMaskEnabled', - _value: 'revealSelection' - } - }], { - synchronousExecution: true, - modalBehavior: 'execute' - }); - console.log('result: ', result); - }); -} -async function fillSelectionWhiteOutsideBlack() { - // Create a new layer - const layer_name = 'inpaint_laso_mask'; - const getSelectionDesc = () => ({ - _obj: 'get', - _target: [{ - _property: 'selection' - }, { - _ref: 'document', - _id: app.activeDocument._id - }], - _options: { - dialogOptions: 'dontDisplay' - } - }); - const invertSelection = () => ({ - _obj: 'inverse', - _isCommand: true - }); - await batchPlay([getSelectionDesc(), { - _obj: 'fill', - using: { - _enum: 'fillContents', - _value: 'white' - }, - opacity: { - _unit: 'percentUnit', - _value: 100 - }, - mode: { - _enum: 'blendMode', - _value: 'normal' - } - }, - // { - // _obj: 'select', - // _target: [ - // { - // _ref: 'channel', - // _property: 'selection', - // }, - // ], - // }, - invertSelection(), { - _obj: 'fill', - using: { - _enum: 'fillContents', - _value: 'black' - }, - opacity: { - _unit: 'percentUnit', - _value: 100 - }, - mode: { - _enum: 'blendMode', - _value: 'normal' - } - }, - // { - // _obj: 'invert', - // _target: [ - // { - // _ref: 'channel', - // _property: 'selection', - // }, - // ], - // }, - - //make new layer - // { - // _obj: 'make', - // _target: [ - // { - // _ref: 'layer', - // }, - // ], - // using: { - // _obj: 'layer', - // name: 'Fill Layer', - // }, - // }, - - { - _obj: 'set', - _target: [{ - _ref: 'layer', - _enum: 'ordinal', - _value: 'targetEnum' - }], - to: { - _obj: 'layer', - name: layer_name - }, - _options: { - dialogOptions: 'dontDisplay' - }, - _isCommand: true - }, - // getSelectionDesc(), - //undo the first inversion of the selection - invertSelection()], { - modalBehavior: 'execute' - }); - - //get the rectangular bounding box selection - - const rect_selection_info = await psapi.getSelectionInfoExe(); - await psapi.reSelectMarqueeExe(rect_selection_info); - const width = html_manip.getWidth(); - const height = html_manip.getHeight(); - - //convert the selection area on the canvas to base64 image - const base64 = await io.IO.getSelectionFromCanvasAsBase64Interface_New(width, height, rect_selection_info, true, layer_name + '.png'); - - //import the base64 image into the canvas as a new layer - await io.IO.base64ToLayer(base64, 'base64_to_layer_temp.png', rect_selection_info.left, rect_selection_info.top, rect_selection_info.width, rect_selection_info.height); - // Fill the current selection with white - // await batchPlay( - // [ - // { - // _obj: 'fill', - // using: { - // _enum: 'fillContents', - // _value: 'white', - // }, - // opacity: { - // _unit: 'percentUnit', - // _value: 100, - // }, - // mode: { - // _enum: 'blendMode', - // _value: 'normal', - // }, - // }, - // ], - // { modalBehavior: 'execute' } - // ) - - // // Invert the selection - // await batchPlay( - // [ - // { - // _obj: 'invert', - // _target: [ - // { - // _ref: 'channel', - // _property: 'selection', - // }, - // ], - // }, - // ], - // { modalBehavior: 'execute' } - // ) - - // // Fill the inverted selection with black - // await batchPlay( - // [ - // { - // _obj: 'fill', - // using: { - // _enum: 'fillContents', - // _value: 'black', - // }, - // opacity: { - // _unit: 'percentUnit', - // _value: 100, - // }, - // mode: { - // _enum: 'blendMode', - // _value: 'normal', - // }, - // }, - // ], - // { modalBehavior: 'execute' } - // ) -} - -async function inpaintLasoInitImage() { - // Create a new layer - const layer_name = 'inpaint_laso_init_image'; - const getSelectionDesc = () => ({ - _obj: 'get', - _target: [{ - _property: 'selection' - }, { - _ref: 'document', - _id: app.activeDocument._id - }], - _options: { - dialogOptions: 'dontDisplay' - } - }); - const invertSelection = () => ({ - _obj: 'inverse', - _isCommand: true - }); - await batchPlay([getSelectionDesc(), { - _obj: 'fill', - using: { - _enum: 'fillContents', - _value: 'white' - }, - opacity: { - _unit: 'percentUnit', - _value: 100 - }, - mode: { - _enum: 'blendMode', - _value: 'normal' - } - }, - // { - // _obj: 'select', - // _target: [ - // { - // _ref: 'channel', - // _property: 'selection', - // }, - // ], - // }, - invertSelection(), { - _obj: 'fill', - using: { - _enum: 'fillContents', - _value: 'black' - }, - opacity: { - _unit: 'percentUnit', - _value: 100 - }, - mode: { - _enum: 'blendMode', - _value: 'normal' - } - }, - // { - // _obj: 'invert', - // _target: [ - // { - // _ref: 'channel', - // _property: 'selection', - // }, - // ], - // }, - - //make new layer - // { - // _obj: 'make', - // _target: [ - // { - // _ref: 'layer', - // }, - // ], - // using: { - // _obj: 'layer', - // name: 'Fill Layer', - // }, - // }, - - { - _obj: 'set', - _target: [{ - _ref: 'layer', - _enum: 'ordinal', - _value: 'targetEnum' - }], - to: { - _obj: 'layer', - name: layer_name - }, - _options: { - dialogOptions: 'dontDisplay' - }, - _isCommand: true - }, - // getSelectionDesc(), - //undo the first inversion of the selection - invertSelection()], { - modalBehavior: 'execute' - }); - - //get the rectangular bounding box selection - - const rect_selection_info = await psapi.getSelectionInfoExe(); - await psapi.reSelectMarqueeExe(rect_selection_info); - const width = html_manip.getWidth(); - const height = html_manip.getHeight(); - - //convert the selection area on the canvas to base64 image - const base64 = await io.IO.getSelectionFromCanvasAsBase64Interface_New(width, height, rect_selection_info, true, layer_name + '.png'); - - //import the base64 image into the canvas as a new layer - await io.IO.base64ToLayer(base64, 'base64_to_layer_temp.png', rect_selection_info.left, rect_selection_info.top, rect_selection_info.width, rect_selection_info.height); - // Fill the current selection with white - // await batchPlay( - // [ - // { - // _obj: 'fill', - // using: { - // _enum: 'fillContents', - // _value: 'white', - // }, - // opacity: { - // _unit: 'percentUnit', - // _value: 100, - // }, - // mode: { - // _enum: 'blendMode', - // _value: 'normal', - // }, - // }, - // ], - // { modalBehavior: 'execute' } - // ) - - // // Invert the selection - // await batchPlay( - // [ - // { - // _obj: 'invert', - // _target: [ - // { - // _ref: 'channel', - // _property: 'selection', - // }, - // ], - // }, - // ], - // { modalBehavior: 'execute' } - // ) - - // // Fill the inverted selection with black - // await batchPlay( - // [ - // { - // _obj: 'fill', - // using: { - // _enum: 'fillContents', - // _value: 'black', - // }, - // opacity: { - // _unit: 'percentUnit', - // _value: 100, - // }, - // mode: { - // _enum: 'blendMode', - // _value: 'normal', - // }, - // }, - // ], - // { modalBehavior: 'execute' } - // ) -} - -class Selection { - static async getSelectionInfoExe() { - //return a selectionInfo object or undefined - try { - const selection = await executeAsModal(async () => { - const result = await batchPlay([SelectionInfoDesc()], { - synchronousExecution: true, - modalBehavior: 'execute' - }); - return result[0]?.selection; - }); - if (this.isSelectionValid(selection)) { - let selection_info = { - left: selection.left._value, - right: selection.right._value, - bottom: selection.bottom._value, - top: selection.top._value, - height: selection.bottom._value - selection.top._value, - width: selection.right._value - selection.left._value - }; - // console.dir({selection_info}) - return selection_info; - } - } catch (e) { - console.warn('selection info error', e); - } - } - static isSelectionValid(selection) { - console.warn('isSelectionValid is deprecated use selection.isSelectionValid instead'); - if (selection && - // check if the selection is defined - selection.hasOwnProperty('left') && selection.hasOwnProperty('right') && selection.hasOwnProperty('top') && selection.hasOwnProperty('bottom')) { - return true; - } - return false; - } - static reselectArea(selection_info) {} - static isSameSelection(selection_info_1, selection_info_2) {} - static async getImageToSelectionDifference() { - const selectionInfo = await psapi.getSelectionInfoExe(); - const width = html_manip.getWidth(); - const height = html_manip.getHeight(); - const scale_info_str = `${parseInt(width)}x${parseInt(height)} => ${parseInt(selectionInfo.width)}x${parseInt(selectionInfo.height)} `; - let ratio = width * height / (selectionInfo.width * selectionInfo.height); - - // const arrow = percentage >= 1 ? '↑' : '↓' - // percentage = percentage >= 1 ? percentage : 1 / percentage - - // const percentage_str = `${arrow}X${percentage.toFixed(2)}` - - // console.log('scale_info_str: ', scale_info_str) - // console.log('percentage_str: ', percentage_str) - return ratio; - } - static {} -} -module.exports = { - finalWidthHeight, - selectionToFinalWidthHeight, - selectBoundingBox, - convertSelectionObjectToSelectionInfo, - Selection, - makeMaskChannel, - makeMaskChannelExe, - fillSelectionWhiteOutsideBlack -}; - -/***/ }), - -/***/ "../stable-diffusion-webui/extensions/Auto-Photoshop-StableDiffusion-Plugin/utility/api.js": -/*!*************************************************************************************************!*\ - !*** ../stable-diffusion-webui/extensions/Auto-Photoshop-StableDiffusion-Plugin/utility/api.js ***! - \*************************************************************************************************/ -/***/ ((module) => { - -async function requestGet(url) { - let json = null; - const full_url = url; - try { - let request = await fetch(full_url); - if (request.status === 404) { - return null; - } - json = await request.json(); - console.log('json: ', json); - } catch (e) { - console.warn(`issues requesting from ${full_url}`, e); - } - return json; -} -async function requestPost(url, payload) { - let json = null; - const full_url = url; - try { - let request = await fetch(full_url, { - method: 'POST', - headers: { - Accept: 'application/json', - 'Content-Type': 'application/json' - }, - body: JSON.stringify(payload) - }); - if (request.status === 404) { - return null; - } - json = await request.json(); - console.log('json: ', json); - } catch (e) { - console.warn(`issues requesting from ${full_url}`, e); - } - return json; -} -async function requestFormDataPost(url, payload) { - try { - var myHeaders = new Headers(); - myHeaders.append('Cookie', 'PHPSESSID=n70fa2vmvm6tfmktf4jmstmd1i'); - var formdata = new FormData(); - for ([key, value] of Object.entries(payload)) { - formdata.append(key, value); - } - // formdata.append( - // 'source', - // 'iVBORw0KGgoAAAANSUhEUgAAABgAAAAYCAYAAADgdz34AAAABHNCSVQICAgIfAhkiAAAAAlwSFlzAAAApgAAAKYB3X3/OAAAABl0RVh0U29mdHdhcmUAd3d3Lmlua3NjYXBlLm9yZ5vuPBoAAANCSURBVEiJtZZPbBtFFMZ/M7ubXdtdb1xSFyeilBapySVU8h8OoFaooFSqiihIVIpQBKci6KEg9Q6H9kovIHoCIVQJJCKE1ENFjnAgcaSGC6rEnxBwA04Tx43t2FnvDAfjkNibxgHxnWb2e/u992bee7tCa00YFsffekFY+nUzFtjW0LrvjRXrCDIAaPLlW0nHL0SsZtVoaF98mLrx3pdhOqLtYPHChahZcYYO7KvPFxvRl5XPp1sN3adWiD1ZAqD6XYK1b/dvE5IWryTt2udLFedwc1+9kLp+vbbpoDh+6TklxBeAi9TL0taeWpdmZzQDry0AcO+jQ12RyohqqoYoo8RDwJrU+qXkjWtfi8Xxt58BdQuwQs9qC/afLwCw8tnQbqYAPsgxE1S6F3EAIXux2oQFKm0ihMsOF71dHYx+f3NND68ghCu1YIoePPQN1pGRABkJ6Bus96CutRZMydTl+TvuiRW1m3n0eDl0vRPcEysqdXn+jsQPsrHMquGeXEaY4Yk4wxWcY5V/9scqOMOVUFthatyTy8QyqwZ+kDURKoMWxNKr2EeqVKcTNOajqKoBgOE28U4tdQl5p5bwCw7BWquaZSzAPlwjlithJtp3pTImSqQRrb2Z8PHGigD4RZuNX6JYj6wj7O4TFLbCO/Mn/m8R+h6rYSUb3ekokRY6f/YukArN979jcW+V/S8g0eT/N3VN3kTqWbQ428m9/8k0P/1aIhF36PccEl6EhOcAUCrXKZXXWS3XKd2vc/TRBG9O5ELC17MmWubD2nKhUKZa26Ba2+D3P+4/MNCFwg59oWVeYhkzgN/JDR8deKBoD7Y+ljEjGZ0sosXVTvbc6RHirr2reNy1OXd6pJsQ+gqjk8VWFYmHrwBzW/n+uMPFiRwHB2I7ih8ciHFxIkd/3Omk5tCDV1t+2nNu5sxxpDFNx+huNhVT3/zMDz8usXC3ddaHBj1GHj/As08fwTS7Kt1HBTmyN29vdwAw+/wbwLVOJ3uAD1wi/dUH7Qei66PfyuRj4Ik9is+hglfbkbfR3cnZm7chlUWLdwmprtCohX4HUtlOcQjLYCu+fzGJH2QRKvP3UNz8bWk1qMxjGTOMThZ3kvgLI5AzFfo379UAAAAASUVORK5CYII=' - // ) - // formdata.append('key', '6d207e02198a847aa98d0a2a901485a5') - - var requestOptions = { - method: 'POST', - headers: myHeaders, - body: formdata, - redirect: 'follow' - }; - const response = await fetch(url, requestOptions); - const result_json = response.json(); - return result_json; - } catch (e) { - console.warn(e); - } -} -module.exports = { - requestGet, - requestPost, - requestFormDataPost -}; - -/***/ }), - -/***/ "../stable-diffusion-webui/extensions/Auto-Photoshop-StableDiffusion-Plugin/utility/dummy.js": -/*!***************************************************************************************************!*\ - !*** ../stable-diffusion-webui/extensions/Auto-Photoshop-StableDiffusion-Plugin/utility/dummy.js ***! - \***************************************************************************************************/ -/***/ ((module) => { - -function getDummyBase64(){const b64Image='iVBORw0KGgoAAAANSUhEUgAAAQAAAAEACAIAAADTED8xAAADMElEQVR4nOzVwQnAIBQFQYXff81RUkQCOyDj1YOPnbXWPmeTRef+/3O/OyBjzh3CD95BfqICMK0CMK0CMK0CMK0CMK0CMK0CMK0CMK0CMK0CMK0CMK0CMK0CMK0CMK0CMK0CMK0CMK0CMK0CMK0CMK0CMK0CMK0CMK0CMK0CMK0CMK0CMK0CMK0CMK0CMK0CMK0CMK0CMK0CMK0CMK0CMK0CMK0CMK0CMK0CMK0CMK0CMK0CMK0CMK0CMK0CMK0CMK0CMK0CMK0CMK0CMK0CMK0CMK0CMK0CMK0CMK0CMK0CMK0CMK0CMK0CMK0CMK0CMK0CMK0CMK0CMK0CMK0CMK0CMK0CMK0CMK0CMK0CMK0CMK0CMK0CMK0CMK0CMK0CMK0CMK0CMK0CMK0CMK0CMK0CMK0CMK0CMK0CMK0CMK0CMK0CMK0CMK0CMK0CMK0CMK0CMK0CMK0CMK0CMK0CMK0CMK0CMK0CMK0CMK0CMK0CMK0CMK0CMK0CMK0CMK0CMK0CMK0CMK0CMK0CMK0CMK0CMK0CMK0CMK0CMK0CMK0CMK0CMK0CMK0CMK0CMK0CMK0CMK0CMK0CMK0CMK0CMK0CMK0CMK0CMK0CMK0CMK0CMK0CMK0CMK0CMK0CMK0CMK0CMK0CMK0CMK0CMK0CMK0CMK0CMK0CMK0CMK0CMK0CMK0CMK0CMK0CMK0CMK0CMK0CMK0CMK0CMK0CMK0CMK0CMK0CMK0CMK0CMK0CMK0CMK0CMK0CMK0CMK0CMK0CMK0CMK0CMK0CMK0CMK0CMK0CMK0CMK0CMK0CMK0CMK0CMK0CMK0CMK0CMK0CMK0CMK0CMK0CMK0CMK0CMK0CMK0CMK0CMK0CMK0CMK0CMK0CMK0CMK0CMK0CMK0CMK0CMK0CMK0CMK0CMK0CMK0CMK0CMK0CMK0CMK0CMK0CMK0CMK0CMK0CMK0CMK0CMK0CMK0CMK0CMK0CMK0CMK0CMK0CMK0CMK0CMK0CMK0CMK0CMK0CMK0CMK0CMK0CMK0CMK0CMK0CMK0CMK0CMK0CMK0CMK0CMK0CMK0CMK0CMK0CMK0CMK0CMK0CMO0TAAD//2Anhf4QtqobAAAAAElFTkSuQmCC';return b64Image;}function getDummyBase64_2(){const b64Image='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';return b64Image;}function getDummyWebpBase64(){// const b64ImageWebp = `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` -const b64webp=`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`;return b64webp;}module.exports={getDummyBase64,getDummyBase64_2,getDummyWebpBase64}; - -/***/ }), - -/***/ "../stable-diffusion-webui/extensions/Auto-Photoshop-StableDiffusion-Plugin/utility/event.js": -/*!***************************************************************************************************!*\ - !*** ../stable-diffusion-webui/extensions/Auto-Photoshop-StableDiffusion-Plugin/utility/event.js ***! - \***************************************************************************************************/ -/***/ ((module) => { - -const updatePresetMenuEvent = new CustomEvent('updatePresetMenuEvent', { - detail: {}, - bubbles: true, - cancelable: true, - composed: false -}); -function triggerEvent(query_selector, event) { - document.querySelector(query_selector).dispatchEvent(event); -} -module.exports = { - updatePresetMenuEvent, - triggerEvent -}; - -/***/ }), - -/***/ "../stable-diffusion-webui/extensions/Auto-Photoshop-StableDiffusion-Plugin/utility/general.js": -/*!*****************************************************************************************************!*\ - !*** ../stable-diffusion-webui/extensions/Auto-Photoshop-StableDiffusion-Plugin/utility/general.js ***! - \*****************************************************************************************************/ -/***/ ((module, __unused_webpack_exports, __webpack_require__) => { - -const { - requestGet -} = __webpack_require__(/*! ./api */ "../stable-diffusion-webui/extensions/Auto-Photoshop-StableDiffusion-Plugin/utility/api.js"); -function newOutputImageName(format = 'png') { - const random_id = Math.floor(Math.random() * 100000000000 + 1); // Date.now() doesn't have enough resolution to avoid duplicate - const image_name = `output- ${Date.now()}-${random_id}.${format}`; - console.log('generated image name:', image_name); - return image_name; -} -function makeImagePath(format = 'png') { - const image_name = newOutputImageName(format); - const image_path = `${uniqueDocumentId}/${image_name}`; - return image_path; -} -function convertImageNameToPng(image_name) { - const image_png_name = image_name.split('.')[0] + '.png'; - return image_png_name; -} -function fixNativePath(native_path) { - const fixed_native_path = native_path.replaceAll('\\', '/'); - return fixed_native_path; -} -function base64ToBase64Url(base64_image) { - return 'data:image/png;base64,' + base64_image; -} -function base64UrlToBase64(base64_url) { - const base64_image = base64_url.replace('data:image/png;base64,', ''); - return base64_image; -} -const timer = ms => new Promise(res => setTimeout(res, ms)); //Todo: move this line to it's own utilit function - -function scaleToClosestKeepRatio(original_width, original_height, min_width, min_height) { - const { - finalWidthHeight - } = __webpack_require__(/*! ../selection */ "../stable-diffusion-webui/extensions/Auto-Photoshop-StableDiffusion-Plugin/selection.js"); - //better naming than finalWidthHeight() - //scale an image to the closest dimension while keeping the ratio intact - const [final_width, final_height] = finalWidthHeight(original_width, original_height, min_width, min_height); - return [final_width, final_height]; -} -function mapRange(x, in_min, in_max, out_min, out_max) { - return (x - in_min) * (out_max - out_min) / (in_max - in_min) + out_min; -} -function scaleToRatio(new_value_1, old_value_1, new_value_2, -//get ignored -old_value_2, max_value, min_value) { - const ratio = new_value_1 / old_value_1; // 1000/500 = 2 - let final_new_value_2 = old_value_2 * ratio; // 500 * 2 = 1000 - let final_new_value_1 = new_value_1; - if (final_new_value_2 > max_value) { - ; - [_, final_new_value_1] = scaleToRatio(max_value, old_value_2, new_value_1, - //get ignored - old_value_1, max_value, min_value); - final_new_value_2 = max_value; - } else if (final_new_value_2 < min_value) { - ; - [_, final_new_value_1] = scaleToRatio(min_value, old_value_2, new_value_1, - //get ignored - old_value_1, max_value, min_value); - final_new_value_2 = min_value; - } - return [final_new_value_1, final_new_value_2]; -} -function compareVersions(version_1, version_2) { - //remove the first character v - version_1 = version_1.slice(1); - const increments_1 = version_1.split('.').map(sn => parseInt(sn)); - version_2 = version_2.slice(1); - const increments_2 = version_2.split('.').map(sn => parseInt(sn)); - let b_older = false; // true if version_1 is < than version_2, false if version_1 >= older - for (let i = 0; i < increments_1.length; ++i) { - if (increments_1[i] < increments_2[i]) { - b_older = true; - break; - } - } - return b_older; -} -async function requestOnlineData() { - const { - requestGet - } = __webpack_require__(/*! ./api */ "../stable-diffusion-webui/extensions/Auto-Photoshop-StableDiffusion-Plugin/utility/api.js"); - const online_data = await requestGet(g_online_data_url); - return online_data; -} -function nearestMultiple(input, multiple) { - //use the following formula for finding the upper value instead of the lower. - //( ( x - 1 ) | ( m - 1 ) ) + 1 - const nearest_multiple = input - input % multiple; - return nearest_multiple; -} -function sudoTimer(progress_text = 'Loading ControlNet...') { - //sudo timer that will count to 100 and update the progress bar. - //use it for controlNet since block api progress call - let current_time = 0; - let max_time = 100; - var timerId = setInterval(countdown, 1000); - function countdown() { - if (current_time > max_time) { - clearTimeout(timerId); - // doSomething() - // html_manip.updateProgressBarsHtml(0) - } else { - html_manip.updateProgressBarsHtml(current_time, progress_text); - console.log(current_time + ' seconds remaining'); - current_time++; - } - } - return timerId; -} -function countNewLines(string) { - const count = (string.match(/\n/g) || []).length; - // console.log(count) - return count; -} -module.exports = { - newOutputImageName, - makeImagePath, - convertImageNameToPng, - fixNativePath, - base64ToBase64Url, - base64UrlToBase64, - timer, - scaleToClosestKeepRatio, - scaleToRatio, - mapRange, - compareVersions, - requestOnlineData, - nearestMultiple, - sudoTimer, - countNewLines -}; - -/***/ }), - -/***/ "../stable-diffusion-webui/extensions/Auto-Photoshop-StableDiffusion-Plugin/utility/html_manip.js": -/*!********************************************************************************************************!*\ - !*** ../stable-diffusion-webui/extensions/Auto-Photoshop-StableDiffusion-Plugin/utility/html_manip.js ***! - \********************************************************************************************************/ -/***/ ((module) => { - -////// Start Prompt////////// - -function getPrompt() { - const prompt = document.getElementById('taPrompt').value; - return prompt; -} -function autoFillInPrompt(prompt_value) { - document.getElementById('taPrompt').value = prompt_value; -} - -////// End Prompt////////// - -////// Start Negative Prompt////////// - -function getNegativePrompt() { - const negative_prompt = document.getElementById('taNegativePrompt').value; - return negative_prompt; -} -function autoFillInNegativePrompt(negative_prompt_value) { - document.getElementById('taNegativePrompt').value = negative_prompt_value; -} - -////// End Negative Prompt////////// - -////// Start Width////////// - -document.getElementById('slWidth').addEventListener('input', evt => { - const width = evt.target.value * 64; - document.getElementById('lWidth').textContent = parseInt(width); - // widthSliderOnChangeEventHandler(evt) - updateResDifferenceLabel(); -}); -document.getElementById('slHeight').addEventListener('input', evt => { - const height = evt.target.value * 64; - document.getElementById('lHeight').textContent = parseInt(height); - // heightSliderOnChangeEventHandler(evt) - updateResDifferenceLabel(); -}); -function widthSliderOnChangeEventHandler(evt) { - let new_width = evt.target.value * 64; - const b_link = getLinkWidthHeightState(); - let final_width = new_width; - let final_height; - if (b_link) { - const current_height = html_manip.getHeight(); - [final_width, final_height] = general.scaleToRatio(new_width, g_old_slider_width, _, current_height, parseInt(evt.target.max * 64), parseInt(evt.target.min * 64)); - evt.target.value = parseInt(final_width / 64); - html_manip.autoFillInHeight(final_height); - } - g_old_slider_width = final_width; // update the old value, so we can use it later - document.getElementById('lWidth').textContent = parseInt(final_width); -} -document.getElementById('slWidth').addEventListener('change', evt => { - widthSliderOnChangeEventHandler(evt); -}); -// document.getElementById('slWidth').addEventListener('change', (evt) => { -// let new_width = evt.target.value * 64 -// const b_link = getLinkWidthHeightState() -// let final_width = new_width -// let final_height -// if (b_link) { -// const current_height = html_manip.getHeight() -// ;[final_width, final_height] = general.scaleToRatio( -// new_width, -// g_old_slider_width, -// _, -// current_height, -// parseInt(evt.target.max * 64), -// parseInt(evt.target.min * 64) -// ) - -// evt.target.value = parseInt(final_width / 64) -// html_manip.autoFillInHeight(final_height) -// } - -// g_old_slider_width = final_width // update the old value, so we can use it later -// document.getElementById('lWidth').textContent = parseInt(final_width) -// }) - -function heightSliderOnChangeEventHandler(evt) { - let new_height = evt.target.value * 64; - let final_width; - let final_height = new_height; - const b_link = getLinkWidthHeightState(); - if (b_link) { - const current_width = html_manip.getWidth(); - [final_height, final_width] = general.scaleToRatio(new_height, g_old_slider_height, _, current_width, parseInt(evt.target.max * 64), parseInt(evt.target.min * 64)); - evt.target.value = parseInt(final_height / 64); - html_manip.autoFillInWidth(final_width); - } - g_old_slider_height = final_height; // update the old value, so we can use it later - document.getElementById('lHeight').textContent = parseInt(final_height); -} -document.getElementById('slHeight').addEventListener('change', evt => { - heightSliderOnChangeEventHandler(evt); -}); -function getWidth() { - slider_width = document.getElementById('slWidth').value; - const width = slider_width * 64; - return width; -} -function getHrWidth() { - slider_width = document.getElementById('hrWidth').value; - const width = slider_width * 64; - return width; -} -function getHrHeight() { - slider_width = document.getElementById('hrHeight').value; - const width = slider_width * 64; - return width; -} -function autoFillInWidth(width_value) { - const width_slider = document.getElementById('slHeight'); - - // g_old_slider_width = width_slider.value * 64 //store the old value - g_old_slider_width = width_value; - document.getElementById('slWidth').value = `${width_value / 64}`; - //update the label - document.getElementById('lWidth').innerHTML = `${parseInt(width_value)}`; - updateResDifferenceLabel(); -} -////// End Width////////// - -////// Start Height////////// - -function getHeight() { - slider_value = document.getElementById('slHeight').value; - const height = slider_value * 64; - return height; -} -function autoFillInHeight(height_value) { - const height_slider = document.getElementById('slHeight'); - // g_old_slider_height = height_slider.value * 64 - g_old_slider_height = height_value; //store the current value as old value. counterintuitive!. only use old value when the user directly manipulate the slider - - height_slider.value = `${height_value / 64}`; - //update the label - document.getElementById('lHeight').innerHTML = `${parseInt(height_value)}`; - updateResDifferenceLabel(); -} -function autoFillInHRHeight(height_value) { - document.getElementById('hrHeight').value = `${height_value / 64}`; - //update the label - document.getElementById('hHeight').innerHTML = `${height_value}`; -} -function autoFillInHRWidth(height_value) { - document.getElementById('hrWidth').value = `${height_value / 64}`; - //update the label - document.getElementById('hWidth').innerHTML = `${height_value}`; -} - -////// End Height////////// - -////// Start Denoising Strength////////// -document.querySelector('#slDenoisingStrength').addEventListener('input', evt => { - const label_value = evt.target.value / 100; - // console.log("label_value: ", label_value) - document.getElementById('lDenoisingStrength').innerHTML = `${label_value}`; -}); - -//get the value that is relevant to stable diffusion -function getDenoisingStrength() { - const slider_value = document.getElementById('slDenoisingStrength').value; - const denoising_strength_value = slider_value / 100.0; - return denoising_strength_value; -} - -// display the value the user need to see in all elements related to denoising strength attribute -function autoFillInDenoisingStrength(denoising_strength_value) { - //sd denoising strength value range from [0,1] slider range from [0, 100] - //update the slider - document.getElementById('slDenoisingStrength').value = `${denoising_strength_value * 100}`; - //update the label - document.getElementById('lDenoisingStrength').innerHTML = `${denoising_strength_value}`; -} - -////// End Denoising Strength////////// - -////// Start Hi Res Fix////////// - -document.getElementById('chInpaintFullRes').addEventListener('click', ev => { - const inpaint_padding_slider = document.getElementById('slInpaintPadding'); - if (ev.target.checked) { - inpaint_padding_slider.style.display = 'block'; - } else { - inpaint_padding_slider.style.display = 'none'; - } -}); -document.getElementById('chHiResFixs').addEventListener('click', ev => { - const container = document.getElementById('hi-res-sliders-container'); - if (ev.target.checked) { - container.style.display = 'flex'; - } else { - container.style.display = 'none'; - } -}); -//get the value that is relevant to stable diffusion -function getHiResFixs() { - const isChecked = document.getElementById('chHiResFixs').checked; - return isChecked; -} -function setHiResFixs(isChecked) { - document.getElementById('chHiResFixs').checked = isChecked; -} -function sliderAddEventListener(slider_id, label_id, multiplier, fractionDigits = 2) { - document.getElementById(slider_id).addEventListener('input', evt => { - const sd_value = evt.target.value * multiplier; // convert slider value to SD ready value - document.getElementById(label_id).textContent = Number(sd_value).toFixed(fractionDigits); - }); -} -function sliderAddEventListener_new(slider_id, label_id, slider_start, slider_end, sd_start, sd_end) { - document.getElementById(slider_id).addEventListener('input', evt => { - const sd_value = general.mapRange(evt.target.value, slider_start, slider_end, sd_start, sd_end); // convert slider value to SD ready value - - document.getElementById(label_id).textContent = Number(sd_value).toFixed(2); - }); -} - -//get the stable diffusion ready value from the slider with "slider_id" -//REFACTOR: delete, getSliderSdValue_Old is deprecated, instead use getSliderSdValue -function getSliderSdValue_Old(slider_id, multiplier) { - // console.warn( - // 'getSliderSdValue_Old is deprecated, instead use getSliderSdValue' - // ) - const slider_value = document.getElementById(slider_id).value; - const sd_value = slider_value * multiplier; - return sd_value; -} -//REFACTOR: delete, autoFillInSliderUi is deprecated, instead use setSliderSdValue -function autoFillInSliderUi(sd_value, slider_id, label_id, multiplier) { - // console.warn( - // 'autoFillInSliderUi is deprecated, instead use setSliderSdValue' - // ) - //update the slider - document.getElementById(slider_id).value = `${sd_value * multiplier}`; - //update the label - document.getElementById(label_id).innerHTML = `${sd_value}`; -} -function getSliderSdValue(slider_id, slider_start, slider_end, sd_start, sd_end) { - const slider_value = document.getElementById(slider_id).value; - // const sd_value = general.mapRange(slider_value, 0, 100, 0, 1) // convert slider value to SD ready value - const sd_value = general.mapRange(slider_value, slider_start, slider_end, sd_start, sd_end); // convert slider value to SD ready value - - return sd_value; -} -function setSliderSdValue(slider_id, label_id, sd_value, slider_start, slider_end, sd_start, sd_end) { - const slider_value = general.mapRange(sd_value, sd_start, sd_end, slider_start, slider_end); // convert slider value to SD ready value - document.getElementById(slider_id).value = slider_value.toString(); - document.getElementById(label_id).innerHTML = sd_value.toString(); -} -function getSliderSdValueByElement(slider_element, slider_start, slider_end, sd_start, sd_end) { - const slider_value = slider_element.value; - // const sd_value = general.mapRange(slider_value, 0, 100, 0, 1) // convert slider value to SD ready value - const sd_value = general.mapRange(slider_value, slider_start, slider_end, sd_start, sd_end); // convert slider value to SD ready value - - return sd_value; -} -function setSliderSdValueByElements(slider_element, label_element, sd_value, slider_start, slider_end, sd_start, sd_end) { - const slider_value = general.mapRange(sd_value, sd_start, sd_end, slider_start, slider_end); // convert slider value to SD ready value - slider_element.value = slider_value.toString(); - label_element.innerHTML = sd_value.toString(); -} - -//hrWidth is from [1 to 32] * 64 => [64 to 2048] -sliderAddEventListener('hrWidth', 'hWidth', 64); -sliderAddEventListener('hrHeight', 'hHeight', 64); - -//convert hrDenoisingStrength from [1, 100] * 0.01 => [0.01 to 1] -sliderAddEventListener('hrDenoisingStrength', 'hDenoisingStrength', 0.01); -function autoFillInHiResFixs(firstphase_width, firstphase_height) { - //update the firstphase width slider and label - autoFillInSliderUi(firstphase_width, 'hrWidth', 'hWidth', 1.0 / 64); - //update the firstphase height slider and label - autoFillInSliderUi(firstphase_height, 'hrHeight', 'hHeight', 1.0 / 64); -} -////// End Hi Res Fix////////// - -////// Start Inpaint Mask Weight////////// -function autoFillInInpaintMaskWeight(sd_value) { - //update the inpaint mask weight - autoFillInSliderUi(sd_value, 'slInpaintingMaskWeight', 'lInpaintingMaskWeight', 100); -} -////// End Inpaint Mask Weight////////// - -////// Start Samplers////////// -function unCheckAllSamplers() { - document.getElementsByClassName('rbSampler').forEach(e => e.removeAttribute('checked')); -} -function getSelectedRadioButtonElement(rbClass) { - try { - const rb_element = [...document.getElementsByClassName(rbClass)].filter(e => e.checked == true)[0]; - return rb_element; - } catch (e) { - console.warn(e); - } -} -function getSamplerElementByName(sampler_name) { - try { - //assume the sampler_name is valid - //return the first - //convert htmlCollection into an array, then user filter to get the radio button with the value equals to sampler_name - const sampler_element = [...document.getElementsByClassName('rbSampler')].filter(e => e.value == sampler_name)[0]; - return sampler_element; - } catch (e) { - console.warn(`Sampler '${sampler_name}' not found ${e}`); - } -} -function getCheckedSamplerName() { - //we assume that the samplers exist and loaded in html - //return the name of the first checked sampler - try { - return [...document.getElementsByClassName('rbSampler')].filter(elm => elm.checked == true)[0].value; - } catch (e) { - console.warn(e); - } -} -function getMode() { - return [...document.getElementsByClassName('rbMode')].filter(e => e.checked == true)[0].value; -} -function getBackendType() { - return [...document.getElementsByClassName('rbBackendType')].filter(e => e.checked == true)[0].value; -} -function getHordeApiKey() { - let key = document.getElementById('tiHordeApiKey').value; - const valid_key = key ? key : '0000000000'; - return valid_key; -} -function setHordeApiKey(key) { - document.getElementById('tiHordeApiKey').value = key; -} -function checkSampler(sampler_name) { - sampler_element = getSamplerElementByName(sampler_name); - sampler_element.checked = true; -} -function autoFillInSampler(sampler_name) { - // unCheckAllSamplers() - checkSampler(sampler_name); -} -////// End Samplers////////// - -////// Start Models////////// - -function getModelElementByHash(model_hash) { - try { - //assume the model_hash is valid - //return the first model menu item element with model_hash - const model_element = [...document.getElementsByClassName('mModelMenuItem')].filter(e => e.dataset.model_hash == model_hash)[0]; - return model_element; - } catch (e) { - console.warn(`Model '${model_hash}' not found ${e}`); - } -} -function getModelHashByTitle(model_title) { - //return find the model hash by it's title - try { - return [...document.getElementsByClassName('mModelMenuItem')].filter(e => e.dataset.model_title == model_title)[0].dataset.model_hash; - } catch (e) { - console.warn(e); - } -} -function getSelectedModelHash() { - //return the hash of the first selected model menu item - try { - return [...document.getElementsByClassName('mModelMenuItem')].filter(e => e.selected == true)[0].dataset.model_hash; - } catch (e) { - console.warn(e); - } -} -function selectModelUi(model_hash) { - model_element = getModelElementByHash(model_hash); - model_element.selected = true; -} -function autoFillInModel(model_hash) { - try { - // unCheckAllSamplers() - model_element = getModelElementByHash(model_hash); - selectModelUi(model_hash); - // model_element. - const model_title = model_element.dataset.model_title; - return model_title; - } catch (e) { - console.warn(e); - } -} -////// End Models////////// - -////// Start Init Image && Init Image Mask////////// - -function getInitImageElement() { - const ini_image_element = document.getElementById('init_image'); - return ini_image_element; -} -function setInitImageSrc(image_src) { - const ini_image_element = getInitImageElement(); - ini_image_element.src = image_src; -} -function setControlImageSrc(image_src, element_index = 0) { - const control_net_image_element = document.querySelector(`#controlnet_settings_${element_index} .control_net_image_`); - // const control_net_image_element = document.getElementById( - // 'control_net_image' + '_' + element_index - // ) - control_net_image_element.src = image_src; -} -function setControlMaskSrc(image_src, element_index = 0) { - const control_net_image_element = document.querySelector(`#controlnet_settings_${element_index} .control_net_mask_`); - // const control_net_image_element = document.getElementById( - // 'control_net_mask' + '_' + element_index - // ) - control_net_image_element.src = image_src; -} -function setProgressImageSrc(image_src) { - // const progress_image_element = document.getElementById('progressImage') - - const progress_image_element = document.getElementById('divProgressImageViewerContainer'); - // progress_image_element.src = image_src - - progress_image_element.style.backgroundSize = 'contain'; - progress_image_element.style.height = '500px'; - progress_image_element.style.backgroundImage = `url('${image_src}')`; -} -function getInitImageMaskElement() { - const ini_image_mask_element = document.getElementById('init_image_mask'); - return ini_image_mask_element; -} -function setInitImageMaskSrc(image_src) { - const ini_image_mask_element = getInitImageMaskElement(); - ini_image_mask_element.src = image_src; -} -////// End Init Image && Init Image Mask////////// - -////// Start Generate Buttons ////////// - -function getGenerateButtonsElements() { - generate_buttons = [...document.getElementsByClassName('btnGenerateClass')]; - return generate_buttons; -} -function setGenerateButtonsColor(addClassName, removeClassName) { - const buttons = getGenerateButtonsElements(); - buttons.forEach(button => { - button.classList.add(addClassName); - button.classList.remove(removeClassName); - }); -} - -////// End Generate Buttons ////////// - -////// Start Servers Status ////////// - -function setAutomaticStatus(newStatusClass, oldStatusClass) { - document.getElementById('automaticStatus').classList.add(newStatusClass); - document.getElementById('automaticStatus').classList.remove(oldStatusClass); -} -function setProxyServerStatus(newStatusClass, oldStatusClass) { - document.getElementById('proxyServerStatus').classList.add(newStatusClass); - document.getElementById('proxyServerStatus').classList.remove(oldStatusClass); -} -////// End Servers Status ////////// - -////// Start Extras ////////// - -sliderAddEventListener('slUpscaleSize', 'lUpscaleSize', 0.1, 1); -function getUpscaleSize() { - slider_width = document.getElementById('slUpscaleSize').value; - const size = slider_width / 10; - return size; -} -sliderAddEventListener('slUpscaler2Visibility', 'lUpscaler2Visibility', 0.1, 1); -function getUpscaler2Visibility() { - slider_width = document.getElementById('slUpscaler2Visibility').value; - const size = slider_width / 10; - return size; -} -sliderAddEventListener('slGFPGANVisibility', 'lGFPGANVisibility', 0.1, 1); -function getGFPGANVisibility() { - slider_width = document.getElementById('slGFPGANVisibility').value; - const size = slider_width / 10; - return size; -} -sliderAddEventListener('slCodeFormerVisibility', 'lCodeFormerVisibility', 0.1, 1); -function getCodeFormerVisibility() { - slider_width = document.getElementById('slCodeFormerVisibility').value; - const size = slider_width / 10; - return size; -} -sliderAddEventListener('slCodeFormerWeight', 'lCodeFormerWeight', 0.1, 1); -function getCodeFormerWeight() { - slider_width = document.getElementById('slCodeFormerWeight').value; - const size = slider_width / 10; - return size; -} - -////// End Extras ////////// - -////// Start Reset Settings Button ////////// - -const defaultSettings = { - model: null, - prompt_shortcut: null, - positive_prompt: '', - negative_prompt: '', - selection_mode: null, - batch_number: 1, - steps: 20, - width: 512, - height: 512, - firstphase_width: 512, - firstphase_height: 512, - cfg: 7, - denoising_strength: 0.7, - hi_res_denoising_strength: 0.7, - mask_blur: 8, - inpaint_at_full_res: false, - hi_res_fix: false, - inpaint_padding: 0, - seed: -1, - samplers: null, - mask_content: null -}; -const snapshot_btns = Array.from(document.getElementsByClassName('snapshotButton')); -snapshot_btns.forEach(element => element.addEventListener('click', async () => { - try { - await psapi.snapshot_layerExe(); - } catch (e) { - console.warn(e); - } -})); -const reset_btns = Array.from(document.getElementsByClassName('resetButton')); -reset_btns.forEach(element => element.addEventListener('click', async () => { - try { - autoFillDefaultSettings(defaultSettings); - } catch (e) { - console.warn(e); - } -})); -function getBatchNumber() { - // return document.getElementById('tiNumberOfImages').value - return document.getElementById('tiNumberOfBatchSize').value; -} -function autoFillInBatchNumber(batch_number) { - // document.getElementById('tiNumberOfImages').value = String(batch_number) - document.getElementById('tiNumberOfBatchSize').value = String(batch_number); -} -function getSteps() { - return document.getElementById('tiNumberOfSteps').value; -} -function autoFillInSteps(steps) { - document.getElementById('tiNumberOfSteps').value = String(steps); -} -function autoFillDefaultSettings(default_settings) { - autoFillSettings(default_settings); -} -function setCFG(cfg_value) { - document.getElementById('slCfgScale').value = cfg_value; -} -function getCFG() { - return document.getElementById('slCfgScale').value; -} -function autoFillSettings(settings) { - try { - //reset all UI settings except model selection and sampler selection - autoFillInPrompt(settings['positive_prompt']); - autoFillInNegativePrompt(settings['negative_prompt']); - autoFillInBatchNumber(settings['batch_number']); - autoFillInSteps(settings['steps']); - autoFillInWidth(settings['width']); - autoFillInHeight(settings['height']); - autoFillInHiResFixs(settings['firstphase_width'], settings['firstphase_height']); - document.getElementById('slCfgScale').value = settings['cfg']; - autoFillInDenoisingStrength(settings['denoising_strength']); - autoFillInSliderUi(settings['hi_res_denoising_strength'], 'hrDenoisingStrength', 'hDenoisingStrength', 100); - document.getElementById('slMaskBlur').value = settings['mask_blur']; - document.getElementById('chInpaintFullRes').checked = settings['inpaint_at_full_res']; - setHiResFixs(settings['hi_res_fix']); - document.getElementById('tiSeed').value = String(settings['seed']); - } catch (e) { - console.warn(e); - } -} -////// End Reset Settings Button ////////// - -function getMaskBlur() { - const isDisabled = document.getElementById('slMaskBlur').hasAttribute('disabled'); - let mask_blur = 0; - if (isDisabled) { - mask_blur = 0; - } else { - mask_blur = document.getElementById('slMaskBlur').value; - } - return mask_blur; -} -function setMaskBlur(mask_blur) { - document.getElementById('slMaskBlur').value = mask_blur; -} -function getPromptShortcut() { - //read json string - //converted into json object - const prompt_shortcut_string = document.getElementById('taPromptShortcut').value; - const prompt_shortcut = JSON.parse(prompt_shortcut_string); - return prompt_shortcut; -} -function setPromptShortcut(prompt_shortcut) { - //prompt_shortcut is json object - //convert it into pretty json string and save it in the prompt shortcut textarea - var JSONInPrettyFormat = JSON.stringify(prompt_shortcut, undefined, 7); - document.getElementById('taPromptShortcut').value = JSONInPrettyFormat; -} - -////start selection mode///// -function getSelectionMode() { - return [...document.getElementsByClassName('rbSelectionMode')].filter(e => e.checked == true)[0].value; -} -function getMaskContent() { - return [...document.getElementsByClassName('rbMaskContent')].filter(e => e.checked == true)[0].value; -} -function setMaskContent(value) { - try { - //assume the sampler_name is valid - //return the first - //convert htmlCollection into an array, then user filter to get the radio button with the value equals to sampler_name - const mask_content_element = [...document.getElementsByClassName('rbMaskContent')].filter(e => e.value == value)[0]; - mask_content_element.checked = true; - return mask_content_element; - } catch (e) { - console.warn(e); - } -} -function addHistoryButtonsHtml(img_html) { - // Create new container element - const container = document.createElement('div'); - container.className = 'viewer-image-container'; - const elem = document.getElementById('svg_sp_btn'); - // Create a copy of it - const clone = elem.cloneNode(true); - const button = clone; - button.style.display = null; - button.removeAttribute('id'); - button.setAttribute('title', 'place the image on the canvas'); - - // Create button element - // const button = document.createElement('sp-button'); - button.className = 'viewer-image-button'; - // button.innerHTML = "Button"; - - button.addEventListener('click', async () => { - //set init image event listener, use when settion is active - let image_path = img_html.dataset.path; - const image_path_escape = image_path.replace(/\o/g, '/o'); //escape string "\o" in "\output" - - // load the image from "data:image/png;base64," base64_str - const base64_image = img_html.src.replace('data:image/png;base64,', ''); - await base64ToFile(base64_image); - }); - - // Append elements to container - container.appendChild(img_html); - container.appendChild(button); - return container; -} -function getSeed() { - const seed = document.getElementById('tiSeed').value; - return seed; -} -function setSeed(new_seed) { - document.getElementById('tiSeed').value = new_seed; -} -function getMaskExpansion() { - const mask_expansion = document.getElementById('slMaskExpansion').value; - return mask_expansion; -} -function setMaskExpansion(mask_expansion) { - document.getElementById('slMaskExpansion').value = mask_expansion; -} -function updateProgressBarsHtml(new_value, progress_text = 'Progress...') { - document.querySelectorAll('.pProgressBars').forEach(bar_elm => { - // id = el.getAttribute("id") - // console.log("progressbar id:", id) - try { - bar_elm.setAttribute('value', new_value); - document.querySelectorAll('.lProgressLabel').forEach(lable_elm => { - lable_elm.innerHTML = progress_text; - // else el.innerHTML = 'No work in progress' - }); - } catch (e) { - console.warn(e); //value is not valid - } - }); - - // document.querySelector('#pProgressBar').value -} -///end selection mode//// -function getLinkWidthHeightState() { - const state_str = document.getElementById('linkWidthHeight').dataset.b_link; // sometime it's true and other time it's "true" - const b_state = state_str.toString() === 'true' ? true : false; - return b_state; -} -function setLinkWidthHeightState(state) { - document.getElementById('linkWidthHeight').dataset.b_link = state; -} -function isSquareThumbnail() { - return document.getElementById('chSquareThumbnail').checked; -} -async function populateMenu(html_menu_id, menu_item_class, items, createMenuItemHtml, b_keep_old_selection = false, label = '') { - // function createMenuItemHtml(item, item_html_element) { - // // menu_item_element.innerHTML = item.title - // // menu_item_element.dataset.model_hash = model.hash - // // menu_item_element.dataset.model_title = model.title - // } - - try { - const html_menu_element = document.getElementById(html_menu_id); - html_menu_element.innerHTML = ''; // empty the menu - if (label) { - const label_item = document.createElement('sp-menu-item'); - label_item.selected = true; - label_item.disabled = true; - label_item.innerText = label; - html_menu_element.appendChild(label_item); - } - for (let item of items) { - const menu_item_element = document.createElement('sp-menu-item'); - menu_item_element.className = menu_item_class; - createMenuItemHtml(item, menu_item_element); - html_menu_element.appendChild(menu_item_element); - } - } catch (e) { - b_result = false; - console.warn(e); - } - return b_result; -} -async function populateMenuByElement(html_menu_element, menu_item_class, items, createMenuItemHtml, b_keep_old_selection = false, label = '') { - // function createMenuItemHtml(item, item_html_element) { - // // menu_item_element.innerHTML = item.title - // // menu_item_element.dataset.model_hash = model.hash - // // menu_item_element.dataset.model_title = model.title - // } - - try { - html_menu_element.innerHTML = ''; // empty the menu - if (label) { - const label_item = document.createElement('sp-menu-item'); - label_item.selected = true; - label_item.disabled = true; - label_item.innerText = label; - html_menu_element.appendChild(label_item); - } - for (let item of items) { - const menu_item_element = document.createElement('sp-menu-item'); - menu_item_element.className = menu_item_class; - createMenuItemHtml(item, menu_item_element); - html_menu_element.appendChild(menu_item_element); - } - } catch (e) { - b_result = false; - console.warn(e); - } - return b_result; -} -function getSelectedMenuItem(menu_id) { - try { - const menu_element = document.getElementById(menu_id); - return menu_element.selectedOptions[0]; - } catch (e) { - console.warn(e); - } -} -function getSelectedMenuItemByElement(menu_element) { - try { - // const menu_element = document.getElementById(menu_id) - return menu_element.selectedOptions[0]; - } catch (e) { - console.warn(e); - } -} -function selectMenuItem(menu_id, item) { - try { - const menu_element = document.getElementById(menu_id); - const option = Array.from(menu_element.options).filter(element => element.value === item)[0]; - option.selected = true; - } catch (e) { - unselectMenuItem(menu_id); - console.warn(e); - } -} -function selectMenuItemByElement(menu_element, item) { - try { - const option = Array.from(menu_element.options).filter(element => element.value === item)[0]; - // debugger - option.selected = true; - // option.dispatchEvent(new Event('click')) - // option.click() - } catch (e) { - unselectMenuItemByElement(menu_element); - console.warn(e); - } -} -function getSelectedMenuItemTextContent(menu_id) { - try { - const selected_item = getSelectedMenuItem(menu_id); - if (selected_item.disabled === true) return ''; // ignore the label item - - const text_content = selected_item.textContent; - return text_content; - } catch (e) { - console.warn(e); - } -} -function getSelectedMenuItemTextContentByElement(menu_element) { - try { - const selected_item = getSelectedMenuItemByElement(menu_element); - if (selected_item.disabled === true) return ''; - const text_content = selected_item.textContent; - return text_content; - } catch (e) { - console.warn(e); - } -} -function unselectMenuItem(menu_id) { - try { - document.getElementById(menu_id).selectedIndex = null; - } catch (e) { - console.warn(e); - } -} -function unselectMenuItemByElement(menu_element) { - try { - menu_element.selectedIndex = null; - } catch (e) { - console.warn(e); - } -} -function getUseNsfw() { - //this method is shared between horde native and horde script - const b_nsfw = document.getElementById('chUseNSFW').checked; - return b_nsfw; -} -function getUseSilentMode_Old() { - const b_use_silent_mode = document.getElementById('chUseSilentMode').checked; - return b_use_silent_mode; -} -function getUseSilentMode() { - let b_use_silent_mode = true; //fast machine - const pc_speed = getSelectedRadioButtonElement('rbPCSpeed').value; - if (pc_speed === 'slow') { - b_use_silent_mode = false; // use noisy mode - } else if (pc_speed === 'fast') { - b_use_silent_mode = true; // use silent mode - } - // const b_use_silent_mode = document.getElementById('chUseSilentMode').checked - return b_use_silent_mode; -} -module.exports = { - getPrompt, - autoFillInPrompt, - getNegativePrompt, - autoFillInNegativePrompt, - getDenoisingStrength, - autoFillInDenoisingStrength, - getWidth, - autoFillInWidth, - getHeight, - autoFillInHeight, - getSliderSdValue, - setSliderSdValue, - autoFillInHiResFixs, - getHiResFixs, - setHiResFixs, - autoFillInSliderUi, - getCheckedSamplerName, - autoFillInSampler, - autoFillInModel, - getMode, - setInitImageSrc, - setInitImageMaskSrc, - setGenerateButtonsColor, - setAutomaticStatus, - setProxyServerStatus, - defaultSettings, - autoFillDefaultSettings, - autoFillSettings, - getMaskBlur, - setMaskBlur, - autoFillInHRHeight, - autoFillInHRWidth, - getPromptShortcut, - setPromptShortcut, - getModelHashByTitle, - getSelectionMode, - autoFillInInpaintMaskWeight, - autoFillInSteps, - getSteps, - getBatchNumber, - autoFillInBatchNumber, - getHrWidth, - getHrHeight, - setCFG, - getCFG, - getMaskContent, - setMaskContent, - addHistoryButtonsHtml, - getSeed, - setSeed, - getMaskExpansion, - setMaskExpansion, - getUpscaleSize, - getUpscaler2Visibility, - getCodeFormerVisibility, - getGFPGANVisibility, - getCodeFormerWeight, - updateProgressBarsHtml, - getBackendType, - getHordeApiKey, - setProgressImageSrc, - getLinkWidthHeightState, - setLinkWidthHeightState, - isSquareThumbnail, - setControlImageSrc, - setControlMaskSrc, - setHordeApiKey, - populateMenu, - getSelectedMenuItem, - getSelectedMenuItemTextContent, - getUseNsfw, - getUseSilentMode, - unselectMenuItem, - selectMenuItem, - getSliderSdValue_Old, - getSelectedRadioButtonElement, - getInitImageMaskElement, - sliderAddEventListener_new, - getSliderSdValueByElement, - setSliderSdValueByElements, - populateMenuByElement, - selectMenuItemByElement, - unselectMenuItemByElement, - getSelectedMenuItemByElement, - getSelectedMenuItemTextContentByElement -}; - -/***/ }), - -/***/ "../stable-diffusion-webui/extensions/Auto-Photoshop-StableDiffusion-Plugin/utility/io.js": -/*!************************************************************************************************!*\ - !*** ../stable-diffusion-webui/extensions/Auto-Photoshop-StableDiffusion-Plugin/utility/io.js ***! - \************************************************************************************************/ -/***/ ((module, __unused_webpack_exports, __webpack_require__) => { - -const psapi = __webpack_require__(/*! ../psapi */ "../stable-diffusion-webui/extensions/Auto-Photoshop-StableDiffusion-Plugin/psapi.js"); -const layer_util = __webpack_require__(/*! ../utility/layer */ "../stable-diffusion-webui/extensions/Auto-Photoshop-StableDiffusion-Plugin/utility/layer.js"); -const general = __webpack_require__(/*! ./general */ "../stable-diffusion-webui/extensions/Auto-Photoshop-StableDiffusion-Plugin/utility/general.js"); -const Jimp = __webpack_require__(/*! ../jimp/browser/lib/jimp.min */ "../stable-diffusion-webui/extensions/Auto-Photoshop-StableDiffusion-Plugin/jimp/browser/lib/jimp.min.js"); -const { - executeAsModal -} = (__webpack_require__(/*! photoshop */ "photoshop").core); -const batchPlay = (__webpack_require__(/*! photoshop */ "photoshop").action.batchPlay); -const formats = (__webpack_require__(/*! uxp */ "uxp").storage.formats); -const storage = (__webpack_require__(/*! uxp */ "uxp").storage); -const fs = storage.localFileSystem; -async function isBlackAndWhiteImage(base64EncodedImage) { - try { - // Load your base64 encoded image - const image = await Jimp.read(Buffer.from(base64EncodedImage, 'base64')); - console.log('isBlackAndWhiteImage(): image.bitmap.width, image.bitmap.height: ', image.bitmap.width, image.bitmap.height); - // Check if your image only has one channel - return image.bitmap.width === image.bitmap.height && image.bitmap.width === 1; - } catch (e) { - console.warn(e); - } -} -async function convertBlackAndWhiteImageToRGBChannels(base64EncodedImage) { - // Load your base64 encoded image - const image = await Jimp.read(Buffer.from(base64EncodedImage, 'base64')); - - // Convert your black and white image to RGB channels - image.color([{ - apply: 'red', - params: [255] - }, { - apply: 'green', - params: [255] - }, { - apply: 'blue', - params: [255] - }]); - - // Get your base64 encoded black and white image with RGB channels - const base64EncodedImageWithRGBChannels = await image.getBase64Async(Jimp.MIME_JPEG); - return base64EncodedImageWithRGBChannels; -} -async function convertBlackAndWhiteImageToRGBChannels2(base64EncodedImage) { - try { - // Load your base64 encoded image - const image = await Jimp.read(Buffer.from(base64EncodedImage, 'base64')); - - // Convert your black and white image to RGB channels - image.color([{ - apply: 'mix', - params: ['#ffffff', 100] - }]); - - // Get your base64 encoded black and white image with RGB channels - const base64EncodedImageWithRGBChannels = await image.getBase64Async(Jimp.MIME_JPEG); - return base64EncodedImageWithRGBChannels; - } catch (e) { - console.warn(e); - } -} -async function convertBlackAndWhiteImageToRGBChannels3(base64EncodedImage) { - try { - // Load your base64 encoded image - const image = await Jimp.read(Buffer.from(base64EncodedImage, 'base64')); - - // Convert your black and white image to RGB channels - // image.color([{ apply: 'mix', params: ['#ffffff', 100] }]) - - // Get your base64 encoded black and white image with RGB channels - const base64EncodedImageWithRGBChannels = await image.getBase64Async(Jimp.MIME_PNG); - return base64EncodedImageWithRGBChannels; - } catch (e) { - console.warn(e); - } -} -async function snapShotLayer() { - //snapshot layer with no mask - let command = [ - // Select All Layers current layer - { - _obj: 'selectAllLayers', - _target: [{ - _enum: 'ordinal', - _ref: 'layer', - _value: 'targetEnum' - }] - }, - // Duplicate current layer - // {"ID":[459,460,461,462,463,464,465,466,467,468,469,470,471,472,473,474,475,476,477,478,479,480,481,482,483,484,485,486,487,488,489,490,491,492,493,494,495,496,497,498,499,500,501,502,503,504,505,506,507,508,509,510,511,512,513],"_obj":"duplicate","_target":[{"_enum":"ordinal","_ref":"layer","_value":"targetEnum"}],"version":5}, - { - // ID: ids, - _obj: 'duplicate', - _target: [{ - _enum: 'ordinal', - _ref: 'layer', - _value: 'targetEnum' - }] - // version: 5 - }, - // Merge Layers - { - _obj: 'mergeLayersNew' - }, - // Make - { - _obj: 'make', - at: { - _enum: 'channel', - _ref: 'channel', - _value: 'mask' - }, - new: { - _class: 'channel' - }, - using: { - _enum: 'userMaskEnabled', - _value: 'revealSelection' - } - }, - // Set Selection - { - _obj: 'set', - _target: [{ - _property: 'selection', - _ref: 'channel' - }], - to: { - _enum: 'ordinal', - _ref: 'channel', - _value: 'targetEnum' - } - }, - //make a group - { - _obj: 'make', - _target: [{ - _ref: 'layerSection' - }], - from: { - _ref: 'layer', - _enum: 'ordinal', - _value: 'targetEnum' - }, - layerSectionStart: 512, - layerSectionEnd: 513, - name: 'Group 2', - _options: { - dialogOptions: 'dontDisplay' - } - }, { - _obj: 'mergeLayersNew', - _options: { - dialogOptions: 'dontDisplay' - } - }]; - const result = await batchPlay(command, { - synchronousExecution: true, - modalBehavior: 'execute' - }); - return result; -} -async function snapShotLayerExe() { - await executeAsModal(async () => { - //create a fill layer above the background layer, so that it's present in the snapshot - try { - const selectionInfo = await psapi.getSelectionInfoExe(); - - // const backgroundLayer = await app.activeDocument.backgroundLayer - - await psapi.createSolidLayer(255, 255, 255); - const solid_layer = await app.activeDocument.activeLayers[0]; - // await psapi.unSelectMarqueeExe()//unselect the - - // await solid_layer.moveAbove(backgroundLayer) - // await snapShotLayer() //create a layer with only the opaque pixels - // await psapi.reSelectMarqueeExe(selectionInfo) - // await solid_layer.delete() - } catch (e) { - console.warn(e); - } - }); - await executeAsModal(async () => { - //create a fill layer above the background layer, so that it's present in the snapshot - try { - const solid_layer = await app.activeDocument.activeLayers[0]; - const backgroundLayer = await app.activeDocument.backgroundLayer; - await solid_layer.moveAbove(backgroundLayer); - await psapi.unselectActiveLayersExe(); - await snapShotLayer(); //create a layer with only the opaque pixels - // await psapi.reSelectMarqueeExe(selectionInfo) - // await psapi.unSelectMarqueeExe()//unselect the - await solid_layer.delete(); - } catch (e) { - console.warn(e); - } - }); -} -class IO { - // constructor() {} - static async exportWebp(layer, export_width, export_height) { - await executeAsModal(async () => { - //we assume we have a valid layer rectangular image/layer, no transparency - const doc_entry = await getCurrentDocFolder(); //get the main document folder before we switch doc - const layer_info = await layer_util.Layer.getLayerInfo(layer); - //*) create a new document - const new_doc = await IOHelper.createDocumentExe(export_width, export_height); - const new_layer = await layer_util.Layer.duplicateToDoc(layer, new_doc); - //*) resize the layer to the same dimension as the document - - await layer_util.Layer.scaleTo(new_layer, new_doc.width, new_doc.height); // - await layer_util.Layer.moveTo(new_layer, 0, 0); //move to the top left corner - // - await IOHelper.saveAsWebpExe(doc_entry); //save current document as .webp file, save it into doc_entry folder - await new_doc.closeWithoutSaving(); - }); - } - static async exportPng() {} - static async exportDoc() {} - static async exportLayer() {} - static async base64PngToPngFile(base64_png, folder, image_name = 'temp_base64Png.png') { - const arrayBuffer = _base64ToArrayBuffer(base64_png); - - // const folder = await storage.localFileSystem.getTemporaryFolder() - - const file = await folder.createFile(image_name, { - overwrite: true - }); - await file.write(arrayBuffer, { - format: storage.formats.binary - }); - return file; - } - static async openImageFileAsDocument(file_entry) { - const new_doc = await app.open(file_entry); - return new_doc; - } - static async base64PngToBase64Webp(base64_png) { - let base64_webp; - try { - await executeAsModal(async () => { - try { - const main_doc_entry = await getCurrentDocFolder(); - //save the base64_png to .png file - const temp_folder = await fs.getTemporaryFolder(); - const png_file = await this.base64PngToPngFile(base64_png, temp_folder); - - //load the .png file as a layer in new document - const new_doc = await this.openImageFileAsDocument(png_file); - //save document as .webp - const [_, webp_file] = await IOHelper.saveAsWebpExe(main_doc_entry); //save current document as .webp file, save it into doc_entry folder - await new_doc.closeWithoutSaving(); - //load/read the .webp file as an arraybuffer - const ArrayBufferWebp = await webp_file.read({ - format: formats.binary - }); - - //convert the arraybuffer to base64Webp string - - base64_webp = _arrayBufferToBase64(ArrayBufferWebp); - } catch (e) { - console.warn(e); - } - }); - return base64_webp; - } catch (e) { - console.warn(e); - } - } - static async base64WebpFromFile(file_entry) { - //file_entry most be .webp - let webp_base64; - try { - await executeAsModal(async () => { - const arrayBuffer = await file_entry.read({ - format: formats.binary - }); - console.log('webp arrayBuffer:', arrayBuffer); - const base64_image = _arrayBufferToBase64(arrayBuffer); //convert the buffer to base64 - console.log('base64_image:', base64_image); - webp_base64 = base64_image; - }); - return [webp_base64, webp_arrayBuffer]; - } catch (e) { - console.warn(e); - } - } - static async base64ToLayer(base64_png, image_name = 'base64_to_layer.png', to_x = 0, to_y = 0, width = 512, height = 512, format = 'png') { - let layer; - if (format === 'png') { - layer = await IOBase64ToLayer.base64PngToLayer(base64_png, image_name); - psapi.setVisibleExe(layer, true); - await layer_util.Layer.scaleTo(layer, width, height); // - await layer_util.Layer.moveTo(layer, to_x, to_y); //move to the top left corner - psapi.setVisibleExe(layer, true); - } - return layer; - } - static async getSelectionFromCanvasAsBase64Silent(selectionInfo, b_resize = false, resize_width = 0, resize_height = 0) { - //it will save the document then crop it so that only the selection area are left. - //return arrayBuffer or base64Png? - try { - let file; - const folder = await fs.getTemporaryFolder(); - await executeAsModal(async () => { - const canvas_image_name = 'canvas_image.png'; - file = await folder.createFile(canvas_image_name, { - overwrite: true - }); - const currentDocument = app.activeDocument; - await currentDocument.saveAs.png(file, null, true); - //save file end - - //read the saved image.png - }, { - commandName: 'readPng' - }); - const arrayBuffer = await file.read({ - format: formats.binary - }); - - // const selectionInfo = g_generation_session.selectionInfo - // const selectionInfo = await psapi.getSelectionInfoExe() - const cropped_base64_url = await IOHelper.cropPng(arrayBuffer, selectionInfo, true, resize_width, resize_height); - const cropped_base64 = general.base64UrlToBase64(cropped_base64_url); - - // html_manip.setInitImageSrc(cropped_base64_url) - return cropped_base64; - } catch (e) { - console.warn(e); - } - } - static async getSelectionFromCanvasAsBase64NonSilent(layer, image_name, width, height) { - try { - const image_buffer = await psapi.newExportPng(layer, image_name, width, height); - const base64_image = _arrayBufferToBase64(image_buffer); //convert the buffer to base64 - //send the base64 to the server to save the file in the desired directory - // await sdapi.requestSavePng(base64_image, image_name) - // await saveFileInSubFolder(base64_image, document_name, image_name) - // debugger - const { - requestSavePng - } = __webpack_require__(/*! ../sdapi_py_re */ "../stable-diffusion-webui/extensions/Auto-Photoshop-StableDiffusion-Plugin/sdapi_py_re.js"); - await requestSavePng(base64_image, image_name); - return base64_image; - } catch (e) { - console.warn(e); - } - } - static async getSelectionFromCanvasAsBase64Interface(width, height, layer, selectionInfo, resize = true, use_silent_mode = true, image_name = 'temp.png') { - let base64_image; - if (use_silent_mode) { - base64_image = await this.getSelectionFromCanvasAsBase64Silent(selectionInfo, resize, width, height); - } else { - base64_image = await this.getSelectionFromCanvasAsBase64NonSilent(layer, image_name, width, height); - } - return base64_image; - } - static async getSelectionFromCanvasAsBase64Interface_New(width, height, selectionInfo, resize = true, image_name = 'temp.png') { - //use this version, it has less parameters - const use_silent_mode = html_manip.getUseSilentMode(); - let layer = null; - if (!use_silent_mode) { - await psapi.snapshot_layerExe(); - const snapshotLayer = await app.activeDocument.activeLayers[0]; - layer = snapshotLayer; - } - let base64_image; - if (use_silent_mode) { - base64_image = await this.getSelectionFromCanvasAsBase64Silent(selectionInfo, resize, width, height); - } else { - base64_image = await this.getSelectionFromCanvasAsBase64NonSilent(layer, image_name, width, height); - } - await layer_util.deleteLayers([layer]); //delete the snapshot layer if it exists - return base64_image; - } - static async urlToLayer(image_url, image_file_name = 'image_from_url.png') { - try { - await psapi.unselectActiveLayersExe(); - const temp_entry = await fs.getTemporaryFolder(); - await downloadItExe(image_url, temp_entry, image_file_name); - } catch (e) { - console.warn('urlToLayer()', image_url, image_file_name, e); - } - } -} -class IOHelper { - static async saveAsWebp(doc_entry) { - //doc_entry must be in dataFolder or tempFolder - //save document as webp - const document_id = app.activeDocument.id; - - // doc_entry = await getCurrentDocFolder() - const file_entry = await doc_entry.createFile('temp.webp', { - overwrite: true - }); - const token = await fs.createSessionToken(file_entry); - const result = await batchPlay([{ - _obj: 'save', - as: { - _obj: 'WebPFormat', - compression: { - _enum: 'WebPCompression', - _value: 'compressionLossless' - }, - includeXMPData: false, - includeEXIFData: false, - includePsExtras: false - }, - in: { - _path: token, - _kind: 'local' - }, - documentID: 59, - copy: true, - lowerCase: true, - saveStage: { - _enum: 'saveStageType', - _value: 'saveBegin' - }, - _options: { - dialogOptions: 'dontDisplay' - } - }], { - synchronousExecution: true, - modalBehavior: 'execute' - }); - return [result, file_entry]; - } - static async saveAsWebpExe(doc_entry) { - let result; - let file_entry; - await executeAsModal(async () => { - ; - [result, file_entry] = await this.saveAsWebp(doc_entry); - }); - return [result, file_entry]; - } - static async createDocumentExe(width, height) { - let new_doc; - try { - await executeAsModal(async () => { - new_doc = await app.documents.add({ - width: width, - height: height, - resolution: await app.activeDocument.resolution, - mode: 'RGBColorMode', - fill: 'transparent' - }); - }); - } catch (e) { - console.warn(e); - } - return new_doc; - } - static async cropPng(arrayBuffer, selectionInfo, b_resize = false, resize_width = 0, resize_height = 0) { - //crop png from array buffer - //have the option to resize the after cropping - - const crop_x = selectionInfo.left; - const crop_y = selectionInfo.top; - const crop_w = selectionInfo.width; - const crop_h = selectionInfo.height; - const base64_url_result = await Jimp.read(arrayBuffer).then(async img => { - let cropped_img = await img.crop(crop_x, crop_y, crop_w, crop_h); - let resized_img; - if (b_resize) { - resized_img = await cropped_img.resize(resize_width, resize_height); - } else { - resized_img = cropped_img; - } - const base64_url = await resized_img.getBase64Async(Jimp.MIME_PNG); - - // console.log('jimp: base64_url: ', base64_url) - // document.getElementById("image").setAttribute("src", data); - - return base64_url; - }).catch(error => { - console.error(error); - }); - return base64_url_result; - } -} -class IOBase64ToLayer { - static {} - static async base64PngToLayer(base64_png, image_name) { - //unselect all layers so that the imported layer get place at the top of the document - await psapi.unselectActiveLayersExe(); - const imported_layer = await base64ToFile(base64_png, image_name); //silent import into the document - - return imported_layer; - } -} -class IOFolder { - static {} - static async createSettingsFolder() { - //create a folder named "Settings" in the DataFolder - let settings_entry; - await executeAsModal(async () => { - settings_entry = await this.createFolderSafe('Settings'); - }); - return settings_entry; - } - static async findOrCreateFolderExe(folder_name) { - //create a folder named "Settings" in the DataFolder - let folder_entry; - await executeAsModal(async () => { - folder_entry = await this.createFolderSafe(folder_name); - }); - return folder_entry; - } - static async doesFolderExist(folder_name) { - //check if folder exist. return true if it does. false if it doesn't. - const data_folder = await fs.getDataFolder(); - let b_exist = false; - let folder; - try { - folder = await data_folder.getEntry(folder_name); - b_exist = true; - } catch (e) { - // console.warn(e) - b_exist = false; - } - return b_exist; - } - static async createFolderSafe(folder_name) { - //will always return a folder. it will create the folder if it doesn't exist. - try { - // const uuid = await getUniqueDocumentId() - const data_folder = await fs.getDataFolder(); - let folder_entry; - try { - folder_entry = await data_folder.getEntry(folder_name); - } catch (e) { - console.warn(e); - //create document folder - folder_entry = await data_folder.createFolder(folder_name); - } - return folder_entry; - } catch (e) { - console.warn(e); - } - } - static async getDocumentFolderNativePath() { - try { - const uuid = await getUniqueDocumentId(); - let doc_folder = await this.getDocFolder(uuid); - const path = general.fixNativePath(doc_folder.nativePath); - return path; - } catch (e) { - console.warn(e); - } - return ''; - } - static async getDocFolder(doc_uuid) { - //will create folder if does not exist. always return a folder entry - const doc_entry = await getDocFolder(doc_uuid); - return doc_entry; - } - static async getSettingsFolder() { - //will create folder if does not exist. always return a folder entry - const settings_entry = await this.createSettingsFolder(); - return settings_entry; - } - static async getPresetFolder() { - //will create folder if does not exist. always return a folder entry - const preset_entry = await this.findOrCreateFolderExe('Preset'); - return preset_entry; - } - static async getCustomPresetFolder(custom_preset_folder_name = 'custom_preset') { - //will create folder if does not exist. always return a folder entry - const preset_entry = await this.findOrCreateFolderExe(custom_preset_folder_name); - return preset_entry; - } - static async createFolderIfDoesNotExist(folder_name) { - try { - await executeAsModal(async () => { - try { - const folder = await fs.getDataFolder(); - const sub_folder = await folder.createFolder(folder_name); - } catch (e) { - console.warn(e); - } - }); - } catch (e) { - console.warn(e); - } - } -} -class IOLog { - static {} - static async saveLogToFile(json, file_name) { - try { - const plugin_folder = await fs.getDataFolder(); - const file = await plugin_folder.createFile(file_name, { - type: storage.types.file, - overwrite: true - }); - const JSONInPrettyFormat = JSON.stringify(json, undefined, 4); - await file.write(JSONInPrettyFormat, { - format: storage.formats.utf8, - append: true - }); - } catch (e) { - console.warn(e); - } - } -} -class IOJson { - static {} - static async saveJsonToFile(json, folder_entry, file_name) { - try { - const file = await folder_entry.createFile(file_name, { - type: storage.types.file, - overwrite: true - }); - const JSONInPrettyFormat = JSON.stringify(json, undefined, 4); - await file.write(JSONInPrettyFormat, { - format: storage.formats.utf8, - append: false - }); - } catch (e) { - console.warn(e); - } - } - static async saveJsonToFileExe(json, folder_entry, file_name) { - await executeAsModal(async () => { - await this.saveJsonToFile(json, folder_entry, file_name); - }); - } - static async loadJsonFromFile(folder_entry, file_name) { - const json_file_name = file_name; - try { - const json_entry = await folder_entry.getEntry(json_file_name); - if (json_entry) { - const json = JSON.parse(await json_entry.read({ - format: storage.formats.utf8 - })); - return json; - } - } catch (e) { - console.warn(e); - } - } - static async saveSettingsToFile(settings_json, settings_file_name) { - await executeAsModal(async () => { - // debugger - const folder_entry = await IOFolder.getSettingsFolder('Settings'); - await this.saveJsonToFile(settings_json, folder_entry, settings_file_name); - }); - } - static async loadSettingsFromFile(settings_file_name) { - const folder_entry = await IOFolder.getSettingsFolder('Settings'); - const settings_json = await this.loadJsonFromFile(folder_entry, settings_file_name); - return settings_json; - } - static async saveHordeSettingsToFile(settings_json) { - const settings_file_name = 'horde_settings.json'; - await this.saveSettingsToFile(settings_json, settings_file_name); - } - static async loadHordeSettingsFromFile() { - const settings_file_name = 'horde_settings.json'; - const settings_json = await this.loadSettingsFromFile(settings_file_name); - return settings_json; - } - static async getJsonEntries(doc_entry) { - let entries = await doc_entry.getEntries(); - const json_entries = entries.filter(e => e.isFile && e.name.toLowerCase().includes('.json') // must be a file and has the of the type .json - ); - - console.log('json_entries: ', json_entries); - // .forEach((e) => console.log(e.name)) - return json_entries; - } - static async deleteFile(doc_entry, file_name) { - try { - const file_entry = await doc_entry.getEntry(file_name); - file_entry.delete(); - } catch (e) {} - } -} -module.exports = { - IO, - snapShotLayerExe, - IOHelper, - IOJson, - IOFolder, - IOLog, - convertBlackAndWhiteImageToRGBChannels, - convertBlackAndWhiteImageToRGBChannels2, - convertBlackAndWhiteImageToRGBChannels3, - isBlackAndWhiteImage -}; - -/***/ }), - -/***/ "../stable-diffusion-webui/extensions/Auto-Photoshop-StableDiffusion-Plugin/utility/layer.js": -/*!***************************************************************************************************!*\ - !*** ../stable-diffusion-webui/extensions/Auto-Photoshop-StableDiffusion-Plugin/utility/layer.js ***! - \***************************************************************************************************/ -/***/ ((module, __unused_webpack_exports, __webpack_require__) => { - -const { - batchPlay -} = (__webpack_require__(/*! photoshop */ "photoshop").action); -const { - executeAsModal -} = (__webpack_require__(/*! photoshop */ "photoshop").core); -const { - cleanLayers, - getLayerIndex, - selectLayers, - unSelectMarqueeCommand, - unSelectMarqueeExe, - getSelectionInfoExe, - reSelectMarqueeExe -} = __webpack_require__(/*! ../psapi */ "../stable-diffusion-webui/extensions/Auto-Photoshop-StableDiffusion-Plugin/psapi.js"); -const psapi = __webpack_require__(/*! ../psapi */ "../stable-diffusion-webui/extensions/Auto-Photoshop-StableDiffusion-Plugin/psapi.js"); -async function createNewLayerExe(layerName, opacity = 100) { - await executeAsModal(async () => { - await createNewLayerCommand(layerName, opacity); - }); - const new_layer = await app.activeDocument.activeLayers[0]; - return new_layer; -} -async function createNewLayerCommand(layerName, opacity = 100) { - return await app.activeDocument.createLayer({ - name: layerName, - opacity: opacity, - mode: 'normal' - }); -} -async function deleteLayers(layers) { - try { - await cleanLayers(layers); - } catch (e) { - console.warn(e); - } -} -async function getIndexCommand() { - const command = { - _obj: 'get', - _target: [{ - _property: 'itemIndex' - }, { - _ref: 'layer', - _enum: 'ordinal', - _value: 'targetEnum' - }] - }; - const result = await batchPlay([command], { - synchronousExecution: true, - modalBehavior: 'execute' - }); - return result; -} -async function getIndexExe() { - let index; - await executeAsModal(async () => { - index = await getIndexCommand(); - }); - return index; -} -const photoshop = __webpack_require__(/*! photoshop */ "photoshop"); -const collapseFolderCommand = async (expand = false, recursive = false) => { - let result; - try { - result = await batchPlay([{ - _obj: 'set', - _target: { - _ref: [{ - _property: 'layerSectionExpanded' - }, { - _ref: 'layer', - _enum: 'ordinal', - _value: 'targetEnum' - }] - }, - to: expand, - recursive, - _options: { - dialogOptions: 'dontDisplay' - } - }], { - synchronousExecution: true - }); - } catch (e) { - console.error(e.message); - } - return result; -}; -async function collapseFolderExe(layers, expand = false, recursive = false) { - for (let layer of layers) { - try { - await executeAsModal(async () => { - const is_visible = await layer.visible; // don't change the visiblity of the layer when collapsing - await selectLayers([layer]); - await collapseFolderCommand(expand, recursive); - layer.visible = is_visible; - }); - } catch (e) { - console.warn(e); - } - } -} -class Layer { - static doesLayerExist(layer) { - let b_exist = false; - try { - if (typeof layer !== 'undefined' && layer && layer.name) { - //it will throw an error if the layer has been deleted - b_exist = true; - // return true - } - // b_exist = true - } catch (e) { - b_exist = false; - // console.warn(e) - } - - return b_exist; - } - static async getLayerInfo(layer) { - const bounds = layer.bounds; - const height = bounds.bottom - bounds.top; - const width = bounds.right - bounds.left; - const layer_info = { - height: height, - width: width, - left: bounds.left, - right: bounds.right, - top: bounds.top, - bottom: bounds.bottom - }; - console.log('layer_info:', layer_info); - return layer_info; - } - static async scaleTo(layer, new_width, new_height) { - await executeAsModal(async () => { - try { - const selection_info = await psapi.getSelectionInfoExe(); - await psapi.unSelectMarqueeExe(); - console.log('scaleLayer got called'); - // const activeLayer = getActiveLayer() - // const activeLayer = await app.activeDocument.activeLayers[0] - - const layer_info = await this.getLayerInfo(layer); - const scale_x_ratio = new_width / layer_info.width * 100; - const scale_y_ratio = new_height / layer_info.height * 100; - console.log('scale_x_y_ratio:', scale_x_ratio, scale_y_ratio); - await layer.scale(scale_x_ratio, scale_y_ratio); - await psapi.reSelectMarqueeExe(selection_info); - } catch (e) { - console.warn(e); - } - }); - } - static async moveTo(layer, to_x, to_y) { - try { - await executeAsModal(async () => { - try { - //translate doesn't work with selection active. so store the selection and then unselect. move the layer, then reselect the selection info - const selection_info = await psapi.getSelectionInfoExe(); - await psapi.unSelectMarqueeExe(); - const layer_info = await this.getLayerInfo(layer); - const top_dist = layer_info.top - to_y; - const left_dist = layer_info.left - to_x; - console.log('-left_dist, -top_dist', -left_dist, -top_dist); - await layer.translate(-left_dist, -top_dist); - await psapi.reSelectMarqueeExe(selection_info); - } catch (e) { - console.warn(e); - } - }); - } catch (e) { - console.warn(e); - } - } - static resizeTo() {} - static fitSelection() {} - static async duplicateToDoc(layer, to_doc) { - const dupLayer = await layer.duplicate(to_doc); - // await selectLayers([dupLayer]) - return dupLayer; - } - static async duplicateLayerExe(layer) { - let layer_copy; - try { - await executeAsModal(async () => { - layer_copy = await layer.duplicate(); - }); - } catch (e) { - console.warn('duplication error:', e); - } - return layer_copy; - } - static {} -} -const hasBackgroundLayerDesc = () => ({ - _obj: 'get', - _target: [{ - _property: 'hasBackgroundLayer' - }, { - _ref: 'document', - _enum: 'ordinal', - _value: 'targetEnum' - }] -}); -async function hasBackgroundLayer() { - // check if a document has a background layer - try { - const result = await batchPlay([hasBackgroundLayerDesc()], { - synchronousExecution: true, - modalBehavior: 'execute' - }); - const b_hasBackgroundLayer = result[0]?.hasBackgroundLayer; - return b_hasBackgroundLayer; - } catch (e) { - console.warn(e); - } -} -const makeBackgroundLayerDesc = () => ({ - _obj: 'make', - _target: [{ - _ref: 'backgroundLayer' - }], - using: { - _ref: 'layer', - _enum: 'ordinal', - _value: 'targetEnum' - }, - _options: { - failOnMissingProperty: false, - failOnMissingElement: false - } - // _options: { - // dialogOptions: 'dontDisplay', - // }, -}); - -const createSolidLayerDesc = (r, g, b) => ({ - _obj: 'make', - _target: [{ - _ref: 'contentLayer' - }], - using: { - _obj: 'contentLayer', - type: { - _obj: 'solidColorLayer', - color: { - _obj: 'RGBColor', - red: r, - grain: g, - blue: b - } - } - }, - _options: { - dialogOptions: 'dontDisplay' - } -}); -const toggleBackgroundLayerDesc = () => ({ - _obj: 'show', - null: [{ - _ref: 'layer', - _property: 'background' - }], - toggleOptionsPalette: true, - _options: { - dialogOptions: 'dontDisplay' - } -}); -async function toggleBackgroundLayerExe() { - try { - await executeAsModal(async () => { - const result = await batchPlay([toggleBackgroundLayerDesc()], { - synchronousExecution: true, - modalBehavior: 'execute' - }); - console.log('toggleBackgroundLayerExe result: ', result); - }); - } catch (e) { - console.warn(e); - } -} -async function createBackgroundLayer(r = 255, g = 255, b = 255) { - try { - const has_background = await hasBackgroundLayer(); - if (has_background) { - //no need to create a background layer - return null; - } - - //reselect the selection area if it exist - - await executeAsModal(async () => { - //store the selection area and then unselected - const selectionInfo = await psapi.getSelectionInfoExe(); - await psapi.unSelectMarqueeExe(); - const active_layers = app.activeDocument.activeLayers; - - // await createNewLayerCommand('background') //create layer - //make the layer into background - const result = await batchPlay([createSolidLayerDesc(r, g, b), makeBackgroundLayerDesc()], { - synchronousExecution: true, - modalBehavior: 'execute' - }); - await psapi.reSelectMarqueeExe(selectionInfo); - await psapi.selectLayersExe(active_layers); - }); - } catch (e) { - console.warn(e); - } -} -async function fixImageBackgroundLayer() { - //convert the background layer to a normal layer - //create a new layer - //convert the new layer to background -} -module.exports = { - createNewLayerExe, - deleteLayers, - getIndexExe, - collapseFolderExe, - Layer, - hasBackgroundLayer, - createBackgroundLayer, - createSolidLayerDesc, - makeBackgroundLayerDesc, - toggleBackgroundLayerExe -}; - -/***/ }), - -/***/ "../stable-diffusion-webui/extensions/Auto-Photoshop-StableDiffusion-Plugin/utility/notification.js": -/*!**********************************************************************************************************!*\ - !*** ../stable-diffusion-webui/extensions/Auto-Photoshop-StableDiffusion-Plugin/utility/notification.js ***! - \**********************************************************************************************************/ -/***/ ((module, __unused_webpack_exports, __webpack_require__) => { - -const dialog_box = __webpack_require__(/*! ../dialog_box */ "../stable-diffusion-webui/extensions/Auto-Photoshop-StableDiffusion-Plugin/dialog_box.js"); -const psapi = __webpack_require__(/*! ../psapi */ "../stable-diffusion-webui/extensions/Auto-Photoshop-StableDiffusion-Plugin/psapi.js"); -const { - createBackgroundLayer -} = __webpack_require__(/*! ./layer */ "../stable-diffusion-webui/extensions/Auto-Photoshop-StableDiffusion-Plugin/utility/layer.js"); -class Notification { - static {} - static async webuiIsOffline() { - const r1 = await dialog_box.prompt('Automatic1111 is Offline', "make sure Automatic1111 is running in the background, or select the 'native horde' option from the horde tab", ['Cancel', 'OK']); - try { - if (r1 === 'Cancel') { - /* cancelled or No */ - console.log('cancel'); - } else if (r1 === 'OK') { - console.log('ok'); - } - } catch (e) { - console.warn(e); - } - } - static async webuiAPIMissing() { - const r1 = await dialog_box.prompt("The Plugin can't communicate with Automatic1111", 'Automatic1111 is running, but you forgot to add --api flag to the webui command flags', ['Cancel', 'OK']); - try { - if (r1 === 'Cancel') { - /* cancelled or No */ - console.log('cancel'); - } else if (r1 === 'OK') { - console.log('ok'); - } - } catch (e) { - console.warn(e); - } - } - static async backgroundLayerIsMissing() { - const r1 = await dialog_box.prompt('You need a white background layer present in your document', '', ['Cancel', 'Create']); - try { - if (r1 === 'Cancel') { - /* cancelled or No */ - console.log('cancel'); - return false; - } else if (r1 === 'Create') { - //store the selection area and then unselected - const selectionInfo = await psapi.getSelectionInfoExe(); - await psapi.unSelectMarqueeExe(); - const active_layers = app.activeDocument.activeLayers; - - //create a background layer with no selection active - await createBackgroundLayer(); - console.log('create background layer'); - //reselect the selection area if it exist - - await psapi.reSelectMarqueeExe(selectionInfo); - await psapi.selectLayersExe(active_layers); - return true; - } - } catch (e) { - console.warn(e); - } - return false; - } - static async inactiveSelectionArea(is_active_session) { - let buttons = ['Cancel', 'Rectangular Marquee']; - if (is_active_session) { - buttons.push('Continue Session'); - } - const r1 = await dialog_box.prompt('Please Select a Rectangular Area', 'You Forgot to select a Rectangular Area', buttons); - if (r1 === 'Cancel') { - /* cancelled or No */ - console.log('cancel'); - return false; - } else if (r1 === 'Rectangular Marquee') { - console.log('Rectangular Marquee'); - psapi.selectMarqueeRectangularToolExe(); - return false; // should this be false?! what does true and false means in this context?! Yes: it should be false since boolean value represent wither we have an active selection area or not - } else if (r1 === 'Continue Session') { - await activateSessionSelectionArea(); - return true; - } - return false; - } -} -module.exports = { - Notification -}; - -/***/ }), - -/***/ "../stable-diffusion-webui/extensions/Auto-Photoshop-StableDiffusion-Plugin/utility/presets/controlnet_preset.js": -/*!***********************************************************************************************************************!*\ - !*** ../stable-diffusion-webui/extensions/Auto-Photoshop-StableDiffusion-Plugin/utility/presets/controlnet_preset.js ***! - \***********************************************************************************************************************/ -/***/ ((module) => { - -const MaintainPositionSettings = { - 0: { - module: 'openpose', - model: 'control_sd15_openpose [fef5e48e]', - weight: 1, - resize_mode: null, - lowvram: null, - processor_res: null, - threshold_a: null, - threshold_b: null, - guidance_start: 0, - guidance_end: 0.3, - guessmode: null - }, - 1: { - module: 'depth', - model: 'control_sd15_depth [fef5e48e]', - weight: 0.8, - resize_mode: null, - lowvram: null, - processor_res: null, - threshold_a: null, - threshold_b: null, - guidance_start: 0, - guidance_end: 0.6, - guessmode: null - } -}; -const Pose_Depth_Canny_HandFix = { - 0: { - module: 'openpose', - model: 'control_sd15_openpose [fef5e48e]', - weight: 1, - resize_mode: null, - lowvram: null, - processor_res: null, - threshold_a: null, - threshold_b: null, - guidance_start: 0, - guidance_end: 1, - guessmode: null - }, - 1: { - module: 'depth', - model: 'control_sd15_depth [fef5e48e]', - weight: 1.3, - resize_mode: null, - lowvram: null, - processor_res: null, - threshold_a: null, - threshold_b: null, - guidance_start: 0.3, - guidance_end: 1, - guessmode: null - }, - 2: { - module: 'canny', - model: 'control_sd15_canny [fef5e48e]', - weight: 1.3, - resize_mode: null, - lowvram: null, - processor_res: null, - threshold_a: null, - threshold_b: null, - guidance_start: 0.3, - guidance_end: 1, - guessmode: null - } -}; -MaintainComposition_Character = { - 0: { - module: 'openpose', - model: 'control_sd15_openpose [fef5e48e]', - weight: 1, - resize_mode: null, - lowvram: null, - processor_res: null, - threshold_a: null, - threshold_b: null, - guidance_start: 0, - guidance_end: 0.5, - guessmode: null - }, - 1: { - module: 'canny', - model: 'control_sd15_canny [fef5e48e]', - weight: 1, - resize_mode: null, - lowvram: null, - processor_res: null, - threshold_a: null, - threshold_b: null, - guidance_start: 0, - guidance_end: 0.8, - guessmode: null - }, - 2: { - weight: 1, - resize_mode: null, - lowvram: null, - processor_res: null, - threshold_a: null, - threshold_b: null, - guidance_start: 0, - guidance_end: 1, - guessmode: null - } -}; -const LogoCreation = { - 0: { - module: 'canny', - model: 'control_sd15_canny [fef5e48e]', - weight: 1.3, - resize_mode: null, - lowvram: null, - processor_res: null, - threshold_a: null, - threshold_b: null, - guidance_start: 0, - guidance_end: 0.9, - guessmode: null - }, - 1: { - module: 'scribble', - model: 'control_sd15_scribble [fef5e48e]', - weight: 1, - resize_mode: null, - lowvram: null, - processor_res: null, - threshold_a: null, - threshold_b: null, - guidance_start: 0, - guidance_end: 1, - guessmode: null - }, - 2: { - weight: 1, - resize_mode: null, - lowvram: null, - processor_res: null, - threshold_a: null, - threshold_b: null, - guidance_start: 0, - guidance_end: 1, - guessmode: null - } -}; -const Backgrounds = { - 0: { - module: 'mlsd', - model: 'control_sd15_mlsd [fef5e48e]', - weight: 1.3, - resize_mode: null, - lowvram: null, - processor_res: null, - threshold_a: null, - threshold_b: null, - guidance_start: 0, - guidance_end: 0.7, - guessmode: null - }, - 1: { - weight: 1, - resize_mode: null, - lowvram: null, - processor_res: null, - threshold_a: null, - threshold_b: null, - guidance_start: 0, - guidance_end: 1, - guessmode: null - }, - 2: { - weight: 1, - resize_mode: null, - lowvram: null, - processor_res: null, - threshold_a: null, - threshold_b: null, - guidance_start: 0, - guidance_end: 1, - guessmode: null - } -}; -const ControlNetNativePresets = { - 'Maintain Position': MaintainPositionSettings, - 'Hand Fix': Pose_Depth_Canny_HandFix, - 'Maintain Composition (Character)': MaintainComposition_Character, - 'Logo Creation': LogoCreation, - Backgrounds: Backgrounds -}; -module.exports = { - ControlNetNativePresets -}; - -/***/ }), - -/***/ "../stable-diffusion-webui/extensions/Auto-Photoshop-StableDiffusion-Plugin/utility/presets/preset.js": -/*!************************************************************************************************************!*\ - !*** ../stable-diffusion-webui/extensions/Auto-Photoshop-StableDiffusion-Plugin/utility/presets/preset.js ***! - \************************************************************************************************************/ -/***/ ((module, __unused_webpack_exports, __webpack_require__) => { - -const io = __webpack_require__(/*! ../io */ "../stable-diffusion-webui/extensions/Auto-Photoshop-StableDiffusion-Plugin/utility/io.js"); -const html_manip = __webpack_require__(/*! ../html_manip */ "../stable-diffusion-webui/extensions/Auto-Photoshop-StableDiffusion-Plugin/utility/html_manip.js"); -const Enum = __webpack_require__(/*! ../../enum */ "../stable-diffusion-webui/extensions/Auto-Photoshop-StableDiffusion-Plugin/enum.js"); -const event = __webpack_require__(/*! ../event */ "../stable-diffusion-webui/extensions/Auto-Photoshop-StableDiffusion-Plugin/utility/event.js"); - -// const control_net = require('../../utility/tab/control_net') -let settings = { - model: null, - prompt_shortcut: null, - positive_prompt: null, - negative_prompt: null, - selection_mode: null, - batch_number: null, - steps: null, - width: null, - height: null, - firstphase_width: null, - firstphase_height: null, - cfg: null, - denoising_strength: null, - hi_res_denoising_strength: null, - mask_blur: null, - inpaint_at_full_res: null, - hi_res_fix: null, - inpaint_padding: null, - seed: null, - samplers: null, - mask_content: null -}; -let LatentNoiseSettings = { - model: null, - prompt_shortcut: null, - positive_prompt: null, - negative_prompt: null, - generation_mode: null, - batch_number: null, - steps: null, - width: null, - height: null, - firstphase_width: null, - firstphase_height: null, - cfg: null, - denoising_strength: 0.92, - hi_res_denoising_strength: null, - mask_blur: null, - inpaint_at_full_res: null, - hi_res_fix: null, - inpaint_padding: null, - seed: null, - samplers: null, - mask_content: '2' -}; -let FillSettings = { - model: null, - prompt_shortcut: null, - positive_prompt: null, - negative_prompt: null, - generation_mode: null, - batch_number: null, - steps: null, - width: null, - height: null, - firstphase_width: null, - firstphase_height: null, - cfg: null, - denoising_strength: 0.7, - hi_res_denoising_strength: null, - mask_blur: null, - inpaint_at_full_res: null, - hi_res_fix: null, - inpaint_padding: null, - seed: null, - samplers: null, - mask_content: '0' -}; -let OriginalSettings = { - model: null, - prompt_shortcut: null, - positive_prompt: null, - negative_prompt: null, - generation_mode: null, - batch_number: null, - steps: null, - width: null, - height: null, - firstphase_width: null, - firstphase_height: null, - cfg: null, - denoising_strength: 0.7, - hi_res_denoising_strength: null, - mask_blur: null, - inpaint_at_full_res: null, - hi_res_fix: null, - inpaint_padding: null, - seed: null, - samplers: null, - mask_content: '1' -}; -let HealBrushSettings = { - model: null, - prompt_shortcut: null, - positive_prompt: null, - negative_prompt: null, - generation_mode: null, - batch_number: null, - steps: '25', - width: null, - height: null, - firstphase_width: null, - firstphase_height: null, - cfg: '9', - denoising_strength: 0.92, - hi_res_denoising_strength: null, - mask_blur: 1, - inpaint_at_full_res: null, - hi_res_fix: null, - inpaint_padding: null, - seed: null, - samplers: null, - mask_content: '2', - mask_expansion: 2 -}; -function nullAllSettings() {} -class Preset { - constructor() {} - loadPresetFromJson(preset_path) {} - savePresetToJson(preset_path, settings) {} -} -function getPresetSettingsHtml() { - const value_str = document.getElementById('taPresetSettings').value; - const value_json = JSON.parse(value_str); - return value_json; -} -function setPresetSettingsHtml(preset_settings) { - const JSONInPrettyFormat = JSON.stringify(preset_settings, undefined, 7); - preset_settings_element = document.getElementById('taPresetSettings'); - preset_settings_element.value = JSONInPrettyFormat; - const new_lines_count = general.countNewLines(JSONInPrettyFormat); - new_lines_count; - preset_settings_element.style.height = Math.min(new_lines_count * 12 + 100, 800).toString() + 'px'; -} -function getPresetName() { - const preset_name = document.getElementById('tiPresetName').value; - return preset_name; -} -function setPresetName(preset_name) { - document.getElementById('tiPresetName').value = preset_name; -} -function getPresetSettings(preset_type) { - let preset_settings; - if (preset_type === Enum.PresetTypeEnum['SDPreset']) { - preset_settings = g_ui_settings_object.getSettings(); - } else if (preset_type === Enum.PresetTypeEnum['ControlNetPreset']) { - const { - ControlNetUnit - } = __webpack_require__(/*! ../../utility/tab/control_net */ "../stable-diffusion-webui/extensions/Auto-Photoshop-StableDiffusion-Plugin/utility/tab/control_net.js"); // only import ControlNetUnit to avoid circular dependency - // preset_settings = control_net.ControlNetUnit.getUnits() - - preset_settings = ControlNetUnit.getUnits(); - } - return preset_settings; -} -function getPresetType() { - const presetType = document.getElementById('rgPresetType').selected; - return presetType; -} -document.getElementById('btnNewPreset').addEventListener('click', () => { - // const g_ui_settings_object = getUISettingsObject() - // debugger - const preset_type = getPresetType(); - const preset_settings = getPresetSettings(preset_type); - - // const settings = g_ui_settings_object.getSettings() - - setPresetSettingsHtml(preset_settings); - const preset_name = getPresetName(); - setPresetNameLabel(preset_name); -}); -function getPresetNameLabel() { - //use presetNameLabel as the final name for a preset - const preset_name = document.getElementById('lPresetName').textContent; - return preset_name; -} -function setPresetNameLabel(preset_name) { - document.getElementById('lPresetName').textContent = preset_name.trim(); -} -async function populatePresetMenu() { - // presets = ['preset_1', 'preset_2', 'preset_3'] - const preset_type = getPresetType(); - const presets = await getAllCustomPresetsSettings(preset_type); - const presets_names = Object.keys(presets); - html_manip.populateMenu('mSettingTabPresetMenu', 'mPresetMenuItemClass', presets_names, (item, item_html_element) => { - item_html_element.innerHTML = item; - }); -} -async function deletePreset() { - try { - const preset_name = html_manip.getSelectedMenuItemTextContent('mSettingTabPresetMenu'); - const preset_file_name = preset_name + '.json'; - const preset_type = getPresetType(); - const preset_folder_name = mapPresetTypeToPresetFolder(preset_type); - const custom_preset_entry = await io.IOFolder.getCustomPresetFolder(preset_folder_name); - await io.IOJson.deleteFile(custom_preset_entry, preset_file_name); - html_manip.unselectMenuItem('mSettingTabPresetMenu'); // unselect the custom preset menu - setPresetSettingsHtml({}); //reset preset settings text area - setPresetName(''); - setPresetNameLabel(''); - await populatePresetMenu(); // update the custom preset Menu - triggerUpdatePresetMenu(preset_type); - } catch (e) { - console.warn(e); - } -} -async function getCustomPresetEntries(preset_folder_name) { - const custom_preset_entry = await io.IOFolder.getCustomPresetFolder(preset_folder_name); - const custom_preset_entries = await io.IOJson.getJsonEntries(custom_preset_entry); - return custom_preset_entries; -} -async function loadPresetSettingsFromFile(preset_file_name, preset_type) { - // const preset_type = getPresetType() - - const preset_folder_name = mapPresetTypeToPresetFolder(preset_type); - const custom_preset_entry = await io.IOFolder.getCustomPresetFolder(preset_folder_name); - let preset_settings = {}; - try { - preset_settings = await io.IOJson.loadJsonFromFile(custom_preset_entry, preset_file_name); - } catch (e) { - console.warn(e); - } - return preset_settings; -} -async function getAllCustomPresetsSettings(preset_type) { - const preset_folder_name = mapPresetTypeToPresetFolder(preset_type); - const custom_preset_entries = await getCustomPresetEntries(preset_folder_name); - let custom_presets = {}; - for (const entry of custom_preset_entries) { - const preset_name = entry.name.split('.json')[0]; - let preset_settings = await loadPresetSettingsFromFile(entry.name, preset_type); - custom_presets[preset_name] = preset_settings; - } - return custom_presets; -} -function mapPresetTypeToPresetFolder(preset_type) { - let preset_folder; - if (preset_type === Enum.PresetTypeEnum['SDPreset']) { - preset_folder = 'custom_preset'; - } else if (preset_type === Enum.PresetTypeEnum['ControlNetPreset']) { - preset_folder = 'controlnet_preset'; - } - return preset_folder; -} -function triggerUpdatePresetMenu(preset_type) { - let menu_id; - if (preset_type === Enum.PresetTypeEnum['SDPreset']) { - menu_id = '#mPresetMenu'; - } else if (preset_type === Enum.PresetTypeEnum['ControlNetPreset']) { - menu_id = '#mControlNetPresetMenu'; - } - event.triggerEvent(menu_id, event.updatePresetMenuEvent); -} -Array.from(document.getElementsByClassName('rbPresetType')).forEach(rb => { - rb.addEventListener('click', async () => { - const preset_type = rb.value; - await populatePresetMenu(); - }); -}); -document.getElementById('btnSavePreset').addEventListener('click', async () => { - //save preset settings from textarea to json file - //reload the preset menu - const preset_type = getPresetType(); - const custom_preset_folder_name = mapPresetTypeToPresetFolder(preset_type); - const custom_preset_entry = await io.IOFolder.getCustomPresetFolder(custom_preset_folder_name); - const preset_settings = getPresetSettingsHtml(); - const preset_name = getPresetNameLabel(); - - //check if the file exist and prompt the user to override it or cancel - await io.IOJson.saveJsonToFileExe(preset_settings, custom_preset_entry, preset_name + '.json'); - await populatePresetMenu(); - triggerUpdatePresetMenu(preset_type); - html_manip.selectMenuItem('mSettingTabPresetMenu', preset_name); -}); -document.getElementById('btnDeletePreset').addEventListener('click', async () => { - await deletePreset(); -}); -document.getElementById('tiPresetName').addEventListener('input', () => { - //save preset settings from textarea to json file - //reload the preset menu - const preset_name = getPresetName(); - setPresetNameLabel(preset_name); - //check if the file exist and prompt the user to override it or cancel -}); - -document.getElementById('mSettingTabPresetMenu').addEventListener('input', () => { - //Note: is this correct?! why use Input and change events together - //save preset settings from textarea to json file - //reload the preset menu - const preset_name = getPresetName(); - setPresetNameLabel(preset_name); - //check if the file exist and prompt the user to override it or cancel -}); - -document.getElementById('mSettingTabPresetMenu').addEventListener('change', async evt => { - try { - const preset_index = evt.target.selectedIndex; - const preset_name = evt.target.options[preset_index].textContent; - const preset_type = getPresetType(); - setPresetName(preset_name); - setPresetNameLabel(preset_name); - const preset_settings = await loadPresetSettingsFromFile(preset_name + '.json', preset_type); - setPresetSettingsHtml(preset_settings); - } catch (e) {} -}); -document.getElementById('mPresetMenu').addEventListener('updatePresetMenuEvent', async event => { - // console.log("I'm listening on a custom event") - const { - populatePresetMenu - } = __webpack_require__(/*! ../ui */ "../stable-diffusion-webui/extensions/Auto-Photoshop-StableDiffusion-Plugin/utility/ui.js"); - await populatePresetMenu(); -}); -async function initializePresetTab() { - try { - await populatePresetMenu(); - const selected_rb = html_manip.getSelectedRadioButtonElement('rbPresetType'); - selected_rb.click(); // to trigger the click event which will update the setting preset menu according to the preset type - } catch (e) { - console.error(e); - } -} -initializePresetTab(); -module.exports = { - LatentNoiseSettings, - FillSettings, - OriginalSettings, - HealBrushSettings, - populatePresetMenu, - getCustomPresetEntries, - loadPresetSettingsFromFile, - getAllCustomPresetsSettings, - initializePresetTab -}; - -/***/ }), - -/***/ "../stable-diffusion-webui/extensions/Auto-Photoshop-StableDiffusion-Plugin/utility/sdapi/python_replacement.js": -/*!**********************************************************************************************************************!*\ - !*** ../stable-diffusion-webui/extensions/Auto-Photoshop-StableDiffusion-Plugin/utility/sdapi/python_replacement.js ***! - \**********************************************************************************************************************/ -/***/ ((module, __unused_webpack_exports, __webpack_require__) => { - -//how to get environment variable in javascript -const settings_tab = __webpack_require__(/*! ../tab/settings */ "../stable-diffusion-webui/extensions/Auto-Photoshop-StableDiffusion-Plugin/utility/tab/settings.js"); -const { - getPromptShortcut -} = __webpack_require__(/*! ../html_manip */ "../stable-diffusion-webui/extensions/Auto-Photoshop-StableDiffusion-Plugin/utility/html_manip.js"); -const general = __webpack_require__(/*! ../general */ "../stable-diffusion-webui/extensions/Auto-Photoshop-StableDiffusion-Plugin/utility/general.js"); -// function newOutputImageName(format = 'png') { -// const random_id = Math.floor(Math.random() * 100000000000 + 1) // Date.now() doesn't have enough resolution to avoid duplicate -// const image_name = `output- ${Date.now()}-${random_id}.${format}` -// console.log('generated image name:', image_name) -// return image_name -// } - -function convertMetadataToJson(metadata_str) { - try { - console.log('metadata_str:', metadata_str); - const last_new_line_index = metadata_str.lastIndexOf('\n'); - const prompt = metadata_str.slice(0, last_new_line_index); - const other_settings = metadata_str.slice(last_new_line_index + 1, -1); - console.log('prompt:', prompt); - console.log('other_settings:', other_settings); - const sub_settings = other_settings.split(','); - console.log('sub_settings: ', sub_settings); - const settings_json = {}; - settings_json['prompt'] = prompt; - for (const setting of sub_settings) { - let [key, value] = setting.split(':').map(s => s.trimLeft()); - // key = key.lstrip(' ') - // value = value.lstrip(' ') - settings_json[key] = value; - // import json - // settings_json = json.dumps(settings_dict) - // print("settings_dict: ",settings_dict) - // print("settings_json ",settings_json) - } - - return settings_json; - } catch (e) { - console.warn(e); - } -} -async function getAuto1111Metadata(base64_image) { - try { - console.log('getAuto1111Metadata: '); - const full_url = `${g_sd_url}/sdapi/v1/png-info`; - const payload = { - image: 'data:image/png;base64,' + base64_image - }; - let request = await fetch(full_url, { - method: 'POST', - headers: { - Accept: 'application/json', - 'Content-Type': 'application/json' - }, - body: JSON.stringify(payload) - }); - let json = await request.json(); - console.log("json['info']:", json['info']); - console.log('getAuto1111Metadata json:', json); - return json['info']; - } catch (e) { - console.warn(e); - } -} -async function convertToStandardResponse(settings, images, uuid) { - try { - //standardized the response between modes and backends - const uniqueDocumentId = uuid; // maybe use the generation_session uuid - - const image_paths = []; - const metadata = []; - const images_info = []; - for (i of images) { - let auto_metadata_json = {}; - try { - const auto_metadata_str = await getAuto1111Metadata(i); - auto_metadata_json = convertMetadataToJson(auto_metadata_str); - console.warn('auto_metadata_json.Seed:', auto_metadata_json?.Seed); - } catch (e) { - console.warn(e); - auto_metadata_json = {}; // set the metadata to empty if there an error while getting the metadata - } - - const image_name = general.newOutputImageName(); - const image_path = `${uniqueDocumentId}/${image_name}`; - images_info.push({ - base64: i, - path: image_path, - auto_metadata: auto_metadata_json - }); - // console.log("metadata_json: ", metadata_json) - } - - const dir_name = 'temp_dir_name'; - return { - payload: settings, - dir_name: dir_name, - images_info: images_info, - metadata: metadata - }; - } catch (e) { - console.warn(e); - } -} -function replacePromptsWithShortcuts(prompt, negative_prompt, prompt_shortcut_dic) { - // const prompt_shortcut_dict = prompt_shortcut.load() - // prompt_shortcut_dict.update(payload["prompt_shortcut_ui_dict"]) - new_prompt = prompt_shortcut.replaceShortcut(prompt, prompt_shortcut_dic); - // # edit negative prompt, replaceShortcut(negative_prompt) - new_negative_prompt = prompt_shortcut.replaceShortcut(negative_prompt, prompt_shortcut_dic); - return [new_prompt, new_negative_prompt]; -} -async function txt2ImgRequest(payload) { - console.log('payload:', payload); - if (payload['use_prompt_shortcut']) { - const [new_prompt, new_negative_prompt] = replacePromptsWithShortcuts(payload['prompt'], payload['negative_prompt'], payload['prompt_shortcut_ui_dict']); - payload['prompt'] = new_prompt; - payload['negative_prompt'] = new_negative_prompt; - } - const endpoint = 'sdapi/v1/txt2img'; - try { - console.log('txt2ImgRequest(): about to send a fetch request'); - const full_url = `${g_sd_url}/${endpoint}`; - console.log(full_url); - let request = await fetch(full_url, { - method: 'POST', - headers: { - Accept: 'application/json', - 'Content-Type': 'application/json' - }, - body: JSON.stringify(payload) - // "body": payload - }); - - let r = await request.json(); - console.log('txt2ImgRequest json:', r); - const uniqueDocumentId = payload['uniqueDocumentId']; - // dir_fullpath,dirName = serverHelper.getUniqueDocumentDirPathName(uniqueDocumentId) - // serverHelper.createFolder(dir_fullpath) - const image_paths = []; - const metadata = []; - const images_info = []; - for (i of r['images']) { - let auto_metadata_json = {}; - try { - const auto_metadata_str = await getAuto1111Metadata(i); - auto_metadata_json = convertMetadataToJson(auto_metadata_str); - console.warn('auto_metadata_json.Seed:', auto_metadata_json?.Seed); - } catch (e) { - console.warn(e); - auto_metadata_json = {}; // set the metadata to empty if there an error while getting the metadata - } - - // response2 = await client.post(url=f'{sd_url}/sdapi/v1/png-info', json=png_payload) - // pnginfo = PngImagePlugin.PngInfo() - // pnginfo.add_text("parameters", response2.json().get("info")) - - const image_name = general.newOutputImageName(); - const image_path = `${uniqueDocumentId}/${image_name}`; - - // image_path = f'output/{dirName}/{image_name}' - // image_paths.append(image_path) - // image.save(f'./{image_path}', pnginfo=pnginfo) - - // metadata_info = response2.json().get("info") - // metadata_json = metadata_to_json.convertMetadataToJson(metadata_info) - // metadata.append(metadata_json) - - images_info.push({ - base64: i, - path: image_path, - auto_metadata: auto_metadata_json - }); - // console.log("metadata_json: ", metadata_json) - } - - const dir_name = 'temp_dir_name'; - return { - payload: payload, - dir_name: dir_name, - images_info: images_info, - metadata: metadata - }; - } catch (e) { - console.warn(e); - return {}; - } - - // const request_path = '/sdapi/v1/txt2img' -} - -function getExtensionUrl() { - const extension_type = settings_tab.getExtensionType(); - let extension_url; - // let base_url = getSdUrl() - if (extension_type === 'auto1111_extension') { - extension_url = `${g_sd_url}/sdapi/auto-photoshop-sd`; - // extension_url = `${base_url}/sdapi/auto-photoshop-sd` - } else if (extension_type === 'proxy_server') { - extension_url = 'http://127.0.0.1:8000'; - } else { - //none - extension_url = ''; - } - return extension_url; -} -async function openUrlRequest(url) { - try { - const payload = { - url: url - }; - const extension_url = getExtensionUrl(); - const full_url = `${extension_url}/open/url/`; - let request = await fetch(full_url, { - method: 'POST', - headers: { - Accept: 'application/json', - 'Content-Type': 'application/json' - }, - body: JSON.stringify(payload) - // "body": payload - }); - - let r = await request.json(); - console.log('openUrlRequest json:', r); - return r['url']; - } catch (e) { - console.warn(e); - } -} -async function maskExpansionRequest(original_mask, mask_expansion_value) { - // const endpoint = 'sdapi/v1/img2img' - // const full_url = `${g_sd_url}/${endpoint}` - - try { - const payload = { - mask: original_mask, - mask_expansion: mask_expansion_value - }; - const extension_url = getExtensionUrl(); - const full_url = `${extension_url}/mask/expansion/`; - let request = await fetch(full_url, { - method: 'POST', - headers: { - Accept: 'application/json', - 'Content-Type': 'application/json' - }, - body: JSON.stringify(payload) - // "body": payload - }); - - let r = await request.json(); - console.log('maskExpansionRequest json:', r); - return r['mask']; - } catch (e) { - console.warn(e); - } -} -async function img2ImgRequest(sd_url, payload) { - console.log('payload:', payload); - if (payload['use_prompt_shortcut']) { - const [new_prompt, new_negative_prompt] = replacePromptsWithShortcuts(payload['prompt'], payload['negative_prompt'], payload['prompt_shortcut_ui_dict']); - payload['prompt'] = new_prompt; - payload['negative_prompt'] = new_negative_prompt; - } - // init_img_dir = "./init_images" - // init_img_name = payload['init_image_name'] - // init_img = Image.open(f"{init_img_dir}/{init_img_name}") - // init_img_str = img_2_b64(init_img) - // payload['init_images'] = [init_img_str] - - // init_img_mask_name = payload.get('init_image_mask_name',"") - - // #only if image exist then try to open it - - // if(len(init_img_mask_name) > 0): - // init_img_mask = Image.open(f"{init_img_dir}/{init_img_mask_name}") - - // if (payload['use_sharp_mask'] === false && payload['mask']) { - // //only if mask is available and sharp_mask is off - // // use blurry and expanded mask - // const iterations = payload['mask_expansion'] - // const mask = await maskExpansionRequest(payload['mask'], iterations) - // if (mask) { - // payload['mask'] = mask - // } - // } - - // print(type(init_img_str)) - // #request the images to be generated - - const endpoint = 'sdapi/v1/img2img'; - const full_url = `${sd_url}/${endpoint}`; - let request = await fetch(full_url, { - method: 'POST', - headers: { - Accept: 'application/json', - 'Content-Type': 'application/json' - }, - body: JSON.stringify(payload) - // "body": payload - }); - - let r = await request.json(); - console.log('img2ImgRequest json:', r); - const uniqueDocumentId = payload['uniqueDocumentId']; - // dir_fullpath,dirName = serverHelper.getUniqueDocumentDirPathName(uniqueDocumentId) - // serverHelper.createFolder(dir_fullpath) - const image_paths = []; - const metadata = []; - const images_info = []; - for (i of r['images']) { - // image = Image.open(io.BytesIO(base64.b64decode(i.split(",",1)[0]))) - let auto_metadata_json = {}; - try { - const auto_metadata_str = await getAuto1111Metadata(i); - auto_metadata_json = convertMetadataToJson(auto_metadata_str); - } catch (e) { - console.warn(e); - auto_metadata_json = {}; // set the metadata to empty if there an error while getting the metadata - } - // response2 = await client.post(url=f'{sd_url}/sdapi/v1/png-info', json=png_payload, timeout=None) - // pnginfo = PngImagePlugin.PngInfo() - // pnginfo.add_text("parameters", response2.json().get("info")) - // image_name = f'output- {time.time()}.png' - // image_path = f'output/{dirName}/{image_name}' - // image_paths.append(image_path) - // image.save(f'./{image_path}', pnginfo=pnginfo) - - // metadata_info = response2.json().get("info") - // metadata_json = metadata_to_json.convertMetadataToJson(metadata_info) - // metadata.append(metadata_json) - const image_name = general.newOutputImageName(); - const image_path = `${uniqueDocumentId}/${image_name}`; - images_info.push({ - base64: i, - path: image_path, - auto_metadata: auto_metadata_json - }); - // print("metadata_json: ", metadata_json) - } - - const dir_name = 'temp_dir_name'; - // return [dirName, images_info, metadata] - return { - payload: payload, - dir_name: dir_name, - images_info: images_info, - metadata: metadata - }; -} -async function getOutputImagesEntries(doc_entry) { - let entries = await doc_entry.getEntries(); - const output_images_entries = entries.filter(e => e.isFile && e.name.toLowerCase().includes('.png') // must be a file and has the of the type .png - ); - - console.log('output_images_entries: ', output_images_entries); - // .forEach((e) => console.log(e.name)) - return output_images_entries; -} -async function getMetaDataForOutputEntry(doc_entry, output_entry) { - const json_file_name = `${output_entry.name.split('.')[0]}.json`; - try { - const json_entry = await doc_entry.getEntry(json_file_name); - if (json_entry) { - // await json_entry.read() - - const json = JSON.parse(await json_entry.read({ - format: storage.formats.utf8 - })); - return json; - } - } catch (e) { - console.warn(e); - } - return {}; -} -async function loadHistory(payload) { - // {'image_paths','metadata_setting'} - const history = {}; - - // const uniqueDocumentId = payload['uniqueDocumentId'] - // const uniqueDocumentId = await getUniqueDocumentId() - - const uuid = await getUniqueDocumentId(); - const doc_entry = await getDocFolder(uuid); - const output_images_entries = await getOutputImagesEntries(doc_entry); - history['image_paths'] = []; - history['metadata_jsons'] = []; - history['base64_images'] = []; - for (const output_entry of output_images_entries) { - history['image_paths'].push(output_entry.name); - const metadata_json = await getMetaDataForOutputEntry(doc_entry, output_entry); - history['metadata_jsons'].push(metadata_json); - const arrayBuffer = await output_entry.read({ - format: formats.binary - }); - const base64_image = _arrayBufferToBase64(arrayBuffer); //convert the buffer to base64 - - // const base64 = - history['base64_images'].push(base64_image); - } - - // image_paths = glob.glob(f'./output/{uniqueDocumentId}/*.png') - // settings_paths = glob.glob(f'./output/{uniqueDocumentId}/*.json')#note: why is we are not using settings_paths? - // print("loadHistory: image_paths:", image_paths) - - // history['image_paths'] = image_paths - // history['metadata_jsons'] = [] - // history['base64_images'] = [] - // for image_path in image_paths: - // print("image_path: ", image_path) - // metadata_dict = metadata_to_json.createMetadataJsonFileIfNotExist(image_path) - // history['metadata_jsons'].append(metadata_dict) - - // img = Image.open(image_path) - // base64_image = img_2_b64(img) - // history['base64_images'].append(base64_image) - - // except: - - // print(f'{request}') - - // #reverse the order so that newer generated images path will be shown first - - // history['image_paths'].reverse() - // history['metadata_jsons'].reverse() - // history['base64_images'].reverse() - return { - image_paths: history['image_paths'], - metadata_jsons: history['metadata_jsons'], - base64_images: history['base64_images'] - }; -} -async function savePromptShortcut(json, file_name) { - console.warn("savePromptShortcut() is deprecated, use it's IO class instead "); - try { - const json_file_name = file_name; - const folder = await storage.localFileSystem.getDataFolder(); - const file = await folder.createFile(json_file_name, { - type: storage.types.file, - overwrite: true - }); - const JSONInPrettyFormat = JSON.stringify(json, undefined, 4); - await file.write(JSONInPrettyFormat, { - format: storage.formats.utf8, - append: false - }); - } catch (e) { - console.warn(e); - } -} -async function loadPromptShortcut(file_name) { - const json_file_name = file_name; - const folder = await storage.localFileSystem.getDataFolder(); - try { - const json_entry = await folder.getEntry(json_file_name); - if (json_entry) { - // await json_entry.read() - - const json = JSON.parse(await json_entry.read({ - format: storage.formats.utf8 - })); - return json; - } - } catch (e) { - console.warn(e); - } -} -async function extraSingleImageRequest(sd_url, payload) { - console.log('extraSingleImageRequest payload:', payload); - const endpoint = 'sdapi/v1/extra-single-image'; - const full_url = `${sd_url}/${endpoint}`; - let request = await fetch(full_url, { - method: 'POST', - headers: { - Accept: 'application/json', - 'Content-Type': 'application/json' - }, - body: JSON.stringify(payload) - // "body": payload - }); - - let r = await request.json(); - const images_info = []; - const image = r['image']; - let auto_metadata_json = {}; - const uniqueDocumentId = payload['uniqueDocumentId']; - const image_name = general.newOutputImageName(); - const image_path = `${uniqueDocumentId}/${image_name}`; - images_info.push({ - base64: image, - path: image_path, - auto_metadata: auto_metadata_json - }); - console.log('extraSingleImageRequest response json:', r); - const dir_name = 'temp_dir_name'; - const metadata = []; - return { - payload: payload, - dir_name: dir_name, - images_info: images_info, - metadata: metadata - }; -} -module.exports = { - txt2ImgRequest, - img2ImgRequest, - loadHistory, - maskExpansionRequest, - getExtensionUrl, - savePromptShortcut, - loadPromptShortcut, - convertMetadataToJson, - openUrlRequest, - replacePromptsWithShortcuts, - extraSingleImageRequest, - convertToStandardResponse -}; - -/***/ }), - -/***/ "../stable-diffusion-webui/extensions/Auto-Photoshop-StableDiffusion-Plugin/utility/tab/control_net.js": -/*!*************************************************************************************************************!*\ - !*** ../stable-diffusion-webui/extensions/Auto-Photoshop-StableDiffusion-Plugin/utility/tab/control_net.js ***! - \*************************************************************************************************************/ -/***/ ((module, __unused_webpack_exports, __webpack_require__) => { - -function ownKeys(object, enumerableOnly) { var keys = Object.keys(object); if (Object.getOwnPropertySymbols) { var symbols = Object.getOwnPropertySymbols(object); enumerableOnly && (symbols = symbols.filter(function (sym) { return Object.getOwnPropertyDescriptor(object, sym).enumerable; })), keys.push.apply(keys, symbols); } return keys; } -function _objectSpread(target) { for (var i = 1; i < arguments.length; i++) { var source = null != arguments[i] ? arguments[i] : {}; i % 2 ? ownKeys(Object(source), !0).forEach(function (key) { _defineProperty(target, key, source[key]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(target, Object.getOwnPropertyDescriptors(source)) : ownKeys(Object(source)).forEach(function (key) { Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key)); }); } return target; } -function _defineProperty(obj, key, value) { key = _toPropertyKey(key); if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; } -function _toPropertyKey(arg) { var key = _toPrimitive(arg, "string"); return typeof key === "symbol" ? key : String(key); } -function _toPrimitive(input, hint) { if (typeof input !== "object" || input === null) return input; var prim = input[Symbol.toPrimitive]; if (prim !== undefined) { var res = prim.call(input, hint || "default"); if (typeof res !== "object") return res; throw new TypeError("@@toPrimitive must return a primitive value."); } return (hint === "string" ? String : Number)(input); } -const api = __webpack_require__(/*! ../api */ "../stable-diffusion-webui/extensions/Auto-Photoshop-StableDiffusion-Plugin/utility/api.js"); -const html_manip = __webpack_require__(/*! ../html_manip */ "../stable-diffusion-webui/extensions/Auto-Photoshop-StableDiffusion-Plugin/utility/html_manip.js"); -const selection = __webpack_require__(/*! ../../selection */ "../stable-diffusion-webui/extensions/Auto-Photoshop-StableDiffusion-Plugin/selection.js"); -const note = __webpack_require__(/*! ../notification */ "../stable-diffusion-webui/extensions/Auto-Photoshop-StableDiffusion-Plugin/utility/notification.js"); -const controlnet_preset = __webpack_require__(/*! ../presets/controlnet_preset */ "../stable-diffusion-webui/extensions/Auto-Photoshop-StableDiffusion-Plugin/utility/presets/controlnet_preset.js"); -const preset = __webpack_require__(/*! ../presets/preset */ "../stable-diffusion-webui/extensions/Auto-Photoshop-StableDiffusion-Plugin/utility/presets/preset.js"); -const Enum = __webpack_require__(/*! ../../enum */ "../stable-diffusion-webui/extensions/Auto-Photoshop-StableDiffusion-Plugin/enum.js"); -const event = __webpack_require__(/*! ../event */ "../stable-diffusion-webui/extensions/Auto-Photoshop-StableDiffusion-Plugin/utility/event.js"); - -// const g_controlnet_max_supported_models = 3 -let g_controlnet_presets; -let g_module_detail; -class ControlNetUnit { - static {} - static resetUnit(index) { - const controlnet_unit_default = { - module: null, - model: null, - weight: 1.0, - resize_mode: null, - lowvram: null, - processor_res: null, - threshold_a: null, - threshold_b: null, - guidance_start: 0, - guidance_end: 1 - // guessmode: null, - }; - - this.setUnit(index, controlnet_unit_default); - } - static resetUnits() { - for (let i = 0; i < g_controlnet_max_models; ++i) { - this.resetUnit(i); - } - } - static getUnit(index) { - const controlnet_unit = { - module: this.getModule(index), - model: this.getModel(index), - weight: this.getWeight(index), - resize_mode: null, - lowvram: null, - processor_res: null, - threshold_a: null, - threshold_b: null, - guidance_start: this.getGuidanceStrengthStart(index), - guidance_end: this.getGuidanceStrengthEnd(index) - // guessmode: null, - }; - - return controlnet_unit; - } - static setUnit(index, unit_settings) { - const controlnet_unit_setters = { - module: this.setModule, - model: this.setModel, - weight: this.setWeight, - resize_mode: null, - lowvram: null, - processor_res: null, - threshold_a: null, - threshold_b: null, - guidance_start: this.setGuidanceStrengthStart, - guidance_end: this.setGuidanceStrengthEnd - // guessmode: null, - }; - - for (const [name, value] of Object.entries(unit_settings)) { - try { - if (controlnet_unit_setters.hasOwnProperty(name) - //&& value.toString() // check if it has a value, null return error; undefine return error; 0 pass - ) { - // if (value) { - const setter = controlnet_unit_setters[name]; - setter(index, value); - // } - } - } catch (e) { - console.warn(e); - } - } - } - static getUnits() { - const controlnet_units = {}; - for (let i = 0; i < g_controlnet_max_models; ++i) { - controlnet_units[i] = this.getUnit(i); - } - return controlnet_units; - } - static setUnits(controlnet_units) { - for (const [index, unit] of Object.entries(controlnet_units)) { - try { - this.setUnit(index, unit); - } catch (e) { - console.warn(e); - } - } - } - static doesUnitExist(index) { - //TODO: check if controlnet unit exist - if (index >= 0) {} - } - static getModule(index) { - const module = getSelectedModule(index); - return module; - } - static setModule(index, module_item) { - try { - const module_menu_element = controlnetElement(index, '.mModulesMenuControlNet_'); - html_manip.selectMenuItemByElement(module_menu_element, module_item); - // module_menu_element.dispatchEvent(new Event('click')) - // module_menu_element.click() - changeModule(module_item, index); - } catch (e) { - html_manip.unselectMenuItemByElement(module_menu_element); - console.warn(e); - } - } - static getModel(index) { - const model = getSelectedModel(index); - return model; - } - static setModel(index, model_item) { - try { - const model_menu_element = controlnetElement(index, '.mModelsMenuControlNet_'); - html_manip.selectMenuItemByElement(model_menu_element, model_item); - } catch (e) { - html_manip.unselectMenuItemByElement(model_menu_element); - console.warn(e); - } - } - static getWeight(index = 0) { - const weight = getWeight(index); - return weight; - } - static setWeight(index, weight) { - setWeight(index, weight); - } - static getGuidanceStrengthStart(index) { - const guidance_strength = getControlNetGuidanceStrengthStart(index); - return guidance_strength; - } - static setGuidanceStrengthStart(index, sd_value) { - setControlNetGuidanceStrengthStart(index, sd_value); - } - static getGuidanceStrengthEnd(index) { - const guidance_strength = getControlNetGuidanceStrengthEnd(index); - return guidance_strength; - } - static setGuidanceStrengthEnd(index, sd_value) { - setControlNetGuidanceStrengthEnd(index, sd_value); - } - static getProcessorRes(index) { - const slider = controlnetElement(index, '.slControlNetProcessorRes_'); - return slider.value; - } - static setProcessorRes(index, sd_value) { - const slider = controlnetElement(index, '.slControlNetProcessorRes_'); - slider.value = sd_value; - } - static getThreshold(index, a_or_b) { - let slider; - if (a_or_b === 'a') { - slider = controlnetElement(index, '.slControlNetThreshold_A_'); - } else if (a_or_b === 'b') { - slider = controlnetElement(index, '.slControlNetThreshold_B_'); - } - const sd_value = general.mapRange(slider.value, slider.min, slider.max, slider.dataset['sd_min'], slider.dataset['sd_max']); - return sd_value; - } - static setThreshold(index, a_or_b, sd_value) { - let slider; - let label; - if (a_or_b === 'a') { - slider = controlnetElement(index, '.slControlNetThreshold_A_'); - label = controlnetElement(index, '.lControlNetThreshold_A_'); - } else if (a_or_b === 'b') { - slider = controlnetElement(index, '.slControlNetThreshold_B_'); - label = controlnetElement(index, '.lControlNetThreshold_B_'); - } - const slider_value = general.mapRange(sd_value, slider.dataset['sd_min'], slider.dataset['sd_max'], slider.min, slider.max); - slider.value = String(slider_value); - label.innerText = String(sd_value); - } - static getControlNetUnitJson(index = 0) {} -} -async function checkIfControlNetInstalled() {} -async function requestControlNetDetectMap(controlnet_init_image, _module, processor_res, threshold_a, threshold_b) { - try { - const payload = { - controlnet_module: _module, - controlnet_input_images: [controlnet_init_image], - controlnet_processor_res: processor_res, - controlnet_threshold_a: threshold_a, - controlnet_threshold_b: threshold_b - }; - const full_url = `${g_sd_url}/controlnet/detect`; - - // debugger - - const response_data = await api.requestPost(full_url, payload); - - // update the mask preview with the new detectMap - if (response_data['images'].length === 0) { - app.showAlert(response_data['info']); - } - return response_data['images'][0]; - } catch (e) { - console.warn('requestControlNetDetectMap(): ', _module, e); - } -} -async function requestControlNetVersion() { - const json = await api.requestGet(`${g_sd_url}/controlnet/version`); - const version = json?.version; - return version; -} -async function requestControlNetMaxUnits() { - const json = await api.requestGet(`${g_sd_url}/controlnet/settings`); - const control_net_max_models_num = json?.control_net_max_models_num ?? 1; - return control_net_max_models_num; -} -async function requestControlNetModelList() { - const control_net_json = await api.requestGet(`${g_sd_url}/controlnet/model_list`); - const model_list = control_net_json?.model_list; - return model_list; -} -async function requestControlNetModuleList() { - const result = await api.requestGet(`${g_sd_url}/controlnet/module_list?alias_names=1`); - return result?.module_list; -} -async function populateModelMenu() { - try { - const models = await requestControlNetModelList(); - for (let index = 0; index < g_controlnet_max_models; index++) { - const menu_element = controlnetElement(index, '.mModelsMenuControlNet_'); - html_manip.populateMenuByElement(menu_element, 'mModelsMenuItemControlNet_', models, (item, item_html_element) => { - item_html_element.innerHTML = item; - item_html_element.dataset['index'] = index; - }, false, 'Select Model'); - } - } catch (e) { - console.warn(e); - } -} -function changeModule(_module, index) { - // const index = index - - const preprocessor_res_element = controlnetElement(index, '.slControlNetProcessorRes_'); - const threshold_a_element = controlnetElement(index, '.slControlNetThreshold_A_'); - const threshold_b_element = controlnetElement(index, '.slControlNetThreshold_B_'); - const detail = g_module_detail[_module]; - function remapArray(arr) { - let obj = { - preprocessor_res: arr[0] || null, - threshold_a: arr[1] || null, - threshold_b: arr[2] || null - }; - return obj; - } - const params = remapArray(detail['sliders']); - const model_free = detail.model_free; - - // threshold_a_element.min = prams. - // threshold_a_element.max = - // debugger - if (model_free) controlnetElement(index, '.mModelsMenuControlNet_').parentElement.style.display = 'none';else controlnetElement(index, '.mModelsMenuControlNet_').parentElement.style.display = 'block'; - if (params?.preprocessor_res) { - const preprocessor_res_label_element = controlnetElement(index, '.labelControlNetProcessorRes_'); - preprocessor_res_element.style.display = 'block'; - preprocessor_res_label_element.innerText = params.preprocessor_res.name; - } else { - preprocessor_res_element.style.display = 'none'; - } - if (params?.threshold_a) { - const threshold_a_label_element = controlnetElement(index, '.labelControlNetThreshold_A_'); - threshold_a_element.dataset['sd_min'] = params.threshold_a.min; - threshold_a_element.dataset['sd_max'] = params.threshold_a.max; - ControlNetUnit.setThreshold(index, 'a', params.threshold_a.value); - threshold_a_element.style.display = 'block'; - threshold_a_label_element.innerText = params.threshold_a.name + ':'; - } else { - ControlNetUnit.setThreshold(index, 'a', 32); - threshold_a_element.style.display = 'none'; - } - if (params?.threshold_b) { - const threshold_b_label_element = controlnetElement(index, '.labelControlNetThreshold_B_'); - threshold_b_element.dataset['sd_min'] = params.threshold_b.min; - threshold_b_element.dataset['sd_max'] = params.threshold_b.max; - ControlNetUnit.setThreshold(index, 'b', params.threshold_b.value); - threshold_b_element.style.display = 'block'; - threshold_b_label_element.innerText = params.threshold_b.name + ':'; - } else { - ControlNetUnit.setThreshold(index, 'b', 32); - threshold_b_element.style.display = 'none'; - } -} -async function populatePreprocessorMenu() { - try { - // debugger - const modules = await requestControlNetModuleList(); - for (let index = 0; index < g_controlnet_max_models; index++) { - const menu_element = controlnetElement(index, '.mModulesMenuControlNet_'); - menu_element.dataset['index'] = String(index); - html_manip.populateMenuByElement(menu_element, 'mModuleMenuItemControlNet_', modules, (item, item_html_element) => { - item_html_element.innerHTML = item; - item_html_element.dataset['index'] = index; - }, false, 'Select Module'); - menu_element.addEventListener('click', event => { - changeModule(event.target.innerText, event.target.dataset['index']); - }); - } - } catch (e) { - console.warn(e); - } -} -function controlnetElement(index, class_) { - const element = document.querySelector(`#controlnet_settings_${index} ${class_}`); - return element; -} -function getControlNetGuidanceStrengthStart(index) { - const slider_element = document.querySelector(`#controlnet_settings_${index} .slControlNetGuidanceStrengthStart_`); - const sd_value = html_manip.getSliderSdValueByElement(slider_element, 0, 100, 0, 1); - return sd_value; -} -function setControlNetGuidanceStrengthStart(index, sd_value) { - const slider_element = controlnetElement(index, '.slControlNetGuidanceStrengthStart_'); - const label_element = controlnetElement(index, '.lControlNetGuidanceStrengthStart_'); - html_manip.setSliderSdValueByElements(slider_element, label_element, sd_value, 0, 100, 0, 1); -} -function getControlNetGuidanceStrengthEnd(index) { - const slider_element = controlnetElement(index, '.slControlNetGuidanceStrengthEnd_'); - const sd_value = html_manip.getSliderSdValueByElement(slider_element, 0, 100, 0, 1); - return sd_value; -} -function setControlNetGuidanceStrengthEnd(index, sd_value) { - const slider_element = controlnetElement(index, '.slControlNetGuidanceStrengthEnd_'); - const label_element = controlnetElement(index, '.lControlNetGuidanceStrengthEnd_'); - html_manip.setSliderSdValueByElements(slider_element, label_element, sd_value, 0, 100, 0, 1); -} - -// controlnet settings getters -function getControlNetWeightGuidanceStrengthStart(index = 0) { - const slider_element = controlnetElement(index, '.slControlNetGuidanceStrengthStart_'); - const slider_value = slider_element.value; - const sd_value = general.mapRange(slider_value, 0, 100, 0, 1); // convert slider value to SD ready value - return sd_value; -} -function getControlNetWeightGuidanceStrengthEnd(index = 0) { - const slider_value = controlnetElement(index, '.slControlNetGuidanceStrengthEnd_').value; - const sd_value = general.mapRange(slider_value, 0, 100, 0, 1); // convert slider value to SD ready value - return sd_value; -} -function getWeight(index = 0) { - const slider_value = document.querySelector(`#controlnet_settings_${index} .slControlNetWeight_`).value; - const sd_value = general.mapRange(slider_value, 0, 100, 0, 2); // convert slider value to SD ready value - return sd_value; -} -function setWeight(index = 0, sd_weight) { - const slider_element = document.querySelector(`#controlnet_settings_${index} .slControlNetWeight_`); - const label_element = document.querySelector(`#controlnet_settings_${index} .lControlNetWeight_`); - html_manip.setSliderSdValueByElements(slider_element, label_element, sd_weight, 0, 100, 0, 2); -} -function getUseLowVram(index = 0) { - const b_result = document.querySelector(`#controlnet_settings_${index} .chlowVram_`).checked; - return b_result; -} -function getEnableControlNet(index = 0) { - const is_enable = document.querySelector(`#controlnet_settings_${index} .chEnableControlNet_`).checked; - return is_enable; -} -function setEnable(index) { - document.querySelector(`#controlnet_settings_${index} .chEnableControlNet_`).checked = b_live_update; -} -function getSelectedModule(index = 0) { - const menu_element = controlnetElement(index, '.mModulesMenuControlNet_'); - // debugger - const module_name = html_manip.getSelectedMenuItemTextContentByElement(menu_element); - return module_name; -} -function getSelectedModel(index = 0) { - const menu_element = controlnetElement(index, '.mModelsMenuControlNet_'); - const model_name = html_manip.getSelectedMenuItemTextContentByElement(menu_element); - return model_name; -} -function getUseGuessMode(index = 0) { - const is_guess_mode = document.querySelector(`#controlnet_settings_${index} .chGuessMode_`).checked; - return is_guess_mode; -} -function getControlNetMode(index = 0) { - const controlnet_mode = document.querySelector(`#controlnet_settings_${index} .rgControlNetMode_`).selected; - return controlnet_mode; -} -function getControlNetPixelPerfect(index = 0) { - const pixel_perfect = document.querySelector(`#controlnet_settings_${index} .chPixelPerfect_`).checked; - return pixel_perfect; -} -function isControlNetModeEnable() { - let is_tab_enabled = !document.getElementById('chDisableControlNetTab').checked; - let numOfEnabled = 0; - if (g_controlnet_max_models <= 0) { - return false; - } - if (is_tab_enabled) { - for (let index = 0; index < g_controlnet_max_models; index++) { - if (getEnableControlNet(index)) { - numOfEnabled += 1; - } - } - } - let is_mode_enabled = is_tab_enabled; // could be true - if (is_tab_enabled === false || numOfEnabled === 0) { - is_mode_enabled = false; - } - return is_mode_enabled; -} -// function getControlNetMaxModelsNumber() { -// return g_controlnet_max_supported_models -// } - -function preprocessorData(processor_res = 512, threshold_a = 64, threshold_b = 64, a_min = 64, a_max = 1024, b_min = 64, b_max = 1024, processor_res_label = 'Annotator resolution', threshold_a_label = 'threshold a', threshold_b_label = 'threshold b') { - return { - processor_res, - threshold_a, - threshold_b, - a_min, - a_max, - b_min, - b_max, - processor_res_label, - threshold_a_label, - threshold_b_label - }; -} -function mapPluginSettingsToControlNet(plugin_settings) { - const ps = plugin_settings; // for shortness - let controlnet_units = []; - - // debugger - let active_index = 0; - for (let index = 0; index < g_controlnet_max_models; index++) { - const preprocessor_name = getSelectedModule(index); - controlnet_units[active_index] = { - enabled: getEnableControlNet(index), - input_image: g_generation_session.controlNetImage[index], - mask: '', - module: getSelectedModule(index), - model: getSelectedModel(index), - weight: getWeight(index), - resize_mode: 'Scale to Fit (Inner Fit)', - lowvram: getUseLowVram(index), - processor_res: ControlNetUnit.getProcessorRes(index), - threshold_a: ControlNetUnit.getThreshold(index, 'a'), - threshold_b: ControlNetUnit.getThreshold(index, 'b'), - // guidance: , - guidance_start: getControlNetWeightGuidanceStrengthStart(index), - guidance_end: getControlNetWeightGuidanceStrengthEnd(index), - // guessmode: false, - control_mode: parseInt(getControlNetMode()), - pixel_perfect: getControlNetPixelPerfect() - }; - active_index++; - } - - // if ( - // plugin_settings['mode'] === Enum.generationModeEnum['Img2Img'] || - // plugin_settings['mode'] === Enum.generationModeEnum['Inpaint'] || - // plugin_settings['mode'] === Enum.generationModeEnum['Outpaint'] - // ) { - // const b_use_guess_mode = getUseGuessMode() - // controlnet_units[0]['guessmode'] = b_use_guess_mode - // } - - const controlnet_payload = _objectSpread(_objectSpread({}, ps), {}, { - controlnet_units, - //keep for backward compatibility for now - subseed: -1, - override_settings: {}, - override_settings_restore_afterwards: true, - alwayson_scripts: _objectSpread(_objectSpread({}, ps?.alwayson_scripts || {}), {}, { - controlnet: { - args: controlnet_units - } - }) - }); - return controlnet_payload; -} -function refreshControlNetTab() {} -async function populateControlNetPresetMenu() { - // const default_preset_name = 'Select CtrlNet Preset' - // const default_preset_settings = {} // empty preset - - const custom_presets = await preset.getAllCustomPresetsSettings(Enum.PresetTypeEnum['ControlNetPreset']); - g_controlnet_presets = _objectSpread(_objectSpread({ - 'Select CtrlNet Preset': {} - }, controlnet_preset.ControlNetNativePresets), custom_presets); - const presets_names = Object.keys(g_controlnet_presets); - html_manip.populateMenu('mControlNetPresetMenu', 'mControlNetPresetMenuItem', presets_names, (preset_name, item_html_element) => { - item_html_element.innerHTML = preset_name; - }); - html_manip.selectMenuItem('mControlNetPresetMenu', 'Select CtrlNet Preset'); -} -document.getElementById('mControlNetPresetMenu').addEventListener('change', async evt => { - try { - ControlNetUnit.resetUnits(); - const preset_index = evt.target.selectedIndex; - const preset_name = evt.target.options[preset_index].textContent; - units_settings = g_controlnet_presets[preset_name]; - ControlNetUnit.setUnits(units_settings); - } catch (e) { - console.warn(e); - } -}); -document.getElementById('bSetAllControlImage').addEventListener('click', async () => { - const selectionInfo = await selection.Selection.getSelectionInfoExe(); - if (selectionInfo) { - const base64_image = await g_generation_session.setControlNetImageHelper(); - for (index = 0; index < g_controlnet_max_models; index++) { - await g_generation_session.setControlNetImage(index, base64_image); - } - } else { - await note.Notification.inactiveSelectionArea(); - } -}); -function initControlNetUnitsEventListeners(controlnet_max_models) { - for (let index = 0; index < controlnet_max_models; index++) { - //event listeners - controlnetElement(index, '.slControlNetGuidanceStrengthStart_').addEventListener('input', evt => { - // debugger - const sd_value = general.mapRange(evt.target.value, 0, 100, 0, 1); // convert slider value to SD ready value - controlnetElement(index, '.lControlNetGuidanceStrengthStart_').textContent = Number(sd_value).toFixed(2); - }); - controlnetElement(index, '.slControlNetGuidanceStrengthEnd_').addEventListener('input', evt => { - // debugger - const sd_value = general.mapRange(evt.target.value, 0, 100, 0, 1); // convert slider value to SD ready value - controlnetElement(index, '.lControlNetGuidanceStrengthEnd_').textContent = Number(sd_value).toFixed(2); - }); - document.querySelector(`#controlnet_settings_${index} .slControlNetWeight_`).addEventListener('input', evt => { - // debugger - const sd_value = general.mapRange(evt.target.value, 0, 100, 0, 2); // convert slider value to SD ready value - document.querySelector(`#controlnet_settings_${index} .lControlNetWeight_`).textContent = Number(sd_value).toFixed(2); - }); - - // controlnetElement(index, '.slControlNetProcessorRes_').addEventListener( - // 'input', - // (evt) => { - // // debugger - // const sd_value = general.mapRange( - // evt.target.value, - // 64, - // 2048, - // 64, - // 2048 - // ) // convert slider value to SD ready value - // controlnetElement(index, '.lControlNetProcessorRes_').textContent = - // Number(sd_value).toFixed(2) - // } - // ) - controlnetElement(index, '.slControlNetThreshold_A_').addEventListener('input', event => { - const slider = event.target; - const sd_value = Number(general.mapRange(slider.value, slider.min, slider.max, slider.dataset['sd_min'], slider.dataset['sd_max']).toFixed(2)); - controlnetElement(index, '.lControlNetThreshold_A_').innerText = String(sd_value); - // ControlNetUnit.setThreshold(index, 'a', sd_value) - // controlnetElement(index, '.lControlNetThreshold_A_').value = - // sd_value - }); - - controlnetElement(index, '.slControlNetThreshold_B_').addEventListener('input', event => { - const slider = event.target; - const sd_value = Number(general.mapRange(slider.value, slider.min, slider.max, slider.dataset['sd_min'], slider.dataset['sd_max']).toFixed(2)); - controlnetElement(index, '.lControlNetThreshold_B_').innerText = String(sd_value); - // ControlNetUnit.setThreshold(index, 'a', sd_value) - // controlnetElement(index, '.lControlNetThreshold_A_').value = - // sd_value - }); - - document.querySelector(`#controlnet_settings_${index} .bSetControlImage_`).addEventListener('click', async () => { - const selectionInfo = await selection.Selection.getSelectionInfoExe(); - if (selectionInfo) { - // debugger - const base64_image = await g_generation_session.setControlNetImageHelper(); - await g_generation_session.setControlNetImage(index, base64_image); - } else { - await note.Notification.inactiveSelectionArea(); - } - }); - document.querySelector(`#controlnet_settings_${index} .bControlMask_`).addEventListener('click', async () => { - await previewAnnotator(index); - }); - } -} -document.getElementById('mControlNetPresetMenu').addEventListener('updatePresetMenuEvent', async event => { - // console.log("I'm listening on a custom event") - await populateControlNetPresetMenu(); -}); -async function previewAnnotator(index) { - try { - const controlnet_init_image = g_generation_session.controlNetImage[index]; - const _module = ControlNetUnit.getModule(index); - const processor_res = ControlNetUnit.getProcessorRes(index); - const threshold_a = ControlNetUnit.getThreshold(index, 'a'); - const threshold_b = ControlNetUnit.getThreshold(index, 'b'); - if (!controlnet_init_image) { - const error = 'ControlNet initial image is empty'; - app.showAlert(error); - throw error; - } - if (!_module || _module === 'none') { - const error = 'select a valid controlnet module (preprocessor)'; - app.showAlert(error); - throw error; - } - const detect_map = await requestControlNetDetectMap(controlnet_init_image, _module, processor_res, threshold_a, threshold_b); - const rgb_detect_map_url = await io.convertBlackAndWhiteImageToRGBChannels3(detect_map); - const rgb_detect_map = general.base64UrlToBase64(rgb_detect_map_url); - g_generation_session.controlNetMask[index] = rgb_detect_map; - html_manip.setControlMaskSrc(rgb_detect_map_url, index); - } catch (e) { - console.warn('PreviewAnnotator click(): index: ', index, e); - } -} -async function previewAnnotatorFromCanvas(index) { - try { - const _module = ControlNetUnit.getModule(index); - const width = html_manip.getWidth(); - const height = html_manip.getHeight(); - const selectionInfo = await psapi.getSelectionInfoExe(); - g_generation_session.control_net_preview_selection_info = selectionInfo; - const base64 = await io.IO.getSelectionFromCanvasAsBase64Interface_New(width, height, selectionInfo, true); - if (!_module || _module === 'none') { - const error = 'select a valid controlnet module (preprocessor)'; - app.showAlert(error); - throw error; - } - const processor_res = ControlNetUnit.getProcessorRes(index); - const threshold_a = ControlNetUnit.getThreshold(index, 'a'); - const threshold_b = ControlNetUnit.getThreshold(index, 'b'); - const detect_map = await requestControlNetDetectMap(base64, _module, processor_res, threshold_a, threshold_b); - const rgb_detect_map_url = await io.convertBlackAndWhiteImageToRGBChannels3(detect_map); - g_generation_session.controlNetMask[index] = detect_map; - html_manip.setControlMaskSrc(rgb_detect_map_url, index); - } catch (e) { - console.warn('PreviewAnnotator click(): index: ', index, e); - } -} -// document -// .getElementById('bPreviewAnnotator_0') -// .addEventListener('click', async (event) => { -// const index = parseInt(event.target.dataset['controlnet-index']) -// await previewAnnotator(index) -// }) - -function initPreviewElement(index) { - //make init mask image use the thumbnail class with buttons - // const mask_image_html = document.getElementById( - // 'control_net_preview_image_0' - // ) - - const mask_image_html = controlnetElement(index, '.control_net_mask_'); - const mask_parent_element = mask_image_html.parentElement; - this.thumbnail_container = thumbnail.Thumbnail.wrapImgInContainer(mask_image_html, 'viewer-image-container'); - mask_parent_element.appendChild(thumbnail_container); - async function toCanvas(index) { - // debugger - if (g_generation_session.control_net_preview_selection_info && g_generation_session.controlNetMask[index]) { - const selection_info = g_generation_session.control_net_preview_selection_info; - const layer = await io.IO.base64ToLayer(g_generation_session.controlNetMask[index], 'ControlNet Mask.png', selection_info.left, selection_info.top, selection_info.width, selection_info.height); - } else { - // await note.Notification.inactiveSelectionArea() - app.showAlert('Mask Image is not available'); - } - } - async function toControlNetInitImage(index) { - const preview_result_base64 = g_generation_session.controlNetMask[index]; - g_generation_session.controlNetImage[index] = preview_result_base64; - g_generation_session.control_net_selection_info = g_generation_session.control_net_preview_selection_info; - const rgb_detect_map_url = await io.convertBlackAndWhiteImageToRGBChannels3(preview_result_base64); - - // g_generation_session.controlNetMask[index] = rgb_detect_map - - html_manip.setControlImageSrc(rgb_detect_map_url, index); - } - thumbnail.Thumbnail.addSPButtonToContainer(this.thumbnail_container, 'svg_sp_btn', 'use as ControlNet init image', toControlNetInitImage, index); - thumbnail.Thumbnail.addSPButtonToContainer(this.thumbnail_container, 'svg_sp_btn_canvas', 'move to the canvas', toCanvas, index); - thumbnail.Thumbnail.addSPButtonToContainer(this.thumbnail_container, 'svg_sp_btn_preview', 'preview selection from canvas', previewAnnotatorFromCanvas, index); -} -function initControlNetUnit(index) { - document.querySelector(`#controlnet_settings_${index} .controlnet_unit_label_`).textContent = `Control Net Settings Slot ${index}`; -} -async function initializeControlNetTab(controlnet_max_models) { - try { - if (controlnet_max_models <= 0) { - document.getElementById('controlnetMissingError').style.display = 'block'; - return; - } - document.getElementById('controlnetMissingError').style.display = 'none'; - // if (controlnet_max_models > g_controlnet_max_models) - // controlnet_max_models = g_controlnet_max_models - - await populateControlNetPresetMenu(); - const parent_container = document.getElementById('controlnet_parent_container'); - parent_container.innerHTML = ''; - const controlnet_unit_template = document.getElementById('controlnet_settings_template'); - for (let index = 0; index < controlnet_max_models; index++) { - const controlnet_unit = controlnet_unit_template.cloneNode(true); - controlnet_unit.id = 'controlnet_settings_' + index; - controlnet_unit.dataset['index'] = String(index); - parent_container.appendChild(controlnet_unit); - } - const full_url = `${g_sd_url}/controlnet/module_list?alias_names=1`; - let result_json = await api.requestGet(full_url); - g_module_detail = result_json['module_detail']; - initControlNetUnitsEventListeners(controlnet_max_models); // add event listener to all units after cloning - - await populateModelMenu(); - await populatePreprocessorMenu(); - for (let index = 0; index < controlnet_max_models; index++) { - document.getElementById('controlnet_settings_' + index).style.display = 'block'; - initPreviewElement(index); - initControlNetUnit(index); - } - // const version = await requestControlNetVersion() - // document.getElementById('ControlNetVersion').innerText = version - } catch (e) { - console.warn(e); - } -} -module.exports = { - requestControlNetModelList, - populateModelMenu, - initializeControlNetTab, - getWeight, - mapPluginSettingsToControlNet, - getEnableControlNet, - getSelectedModule, - getSelectedModel, - // getControlNetMaxModelsNumber, - getControlNetGuidanceStrengthStart, - setControlNetGuidanceStrengthStart, - getControlNetGuidanceStrengthEnd, - setControlNetGuidanceStrengthEnd, - ControlNetUnit, - populateControlNetPresetMenu, - isControlNetModeEnable, - getModuleDetail() { - return g_module_detail; - }, - requestControlNetVersion, - requestControlNetMaxUnits -}; - -/***/ }), - -/***/ "../stable-diffusion-webui/extensions/Auto-Photoshop-StableDiffusion-Plugin/utility/tab/settings.js": -/*!**********************************************************************************************************!*\ - !*** ../stable-diffusion-webui/extensions/Auto-Photoshop-StableDiffusion-Plugin/utility/tab/settings.js ***! - \**********************************************************************************************************/ -/***/ ((module, __unused_webpack_exports, __webpack_require__) => { - -const io = __webpack_require__(/*! ../io */ "../stable-diffusion-webui/extensions/Auto-Photoshop-StableDiffusion-Plugin/utility/io.js"); -function getUseSharpMask() { - const isChecked = document.getElementById('chUseSharpMask').checked; - return isChecked; -} -function setUseSharpMask() { - console.warn('setUseSharpMask is not setup'); -} -function getUseLiveProgressImage() { - const b_live_update = document.getElementById('chLiveProgressImage').checked; - return b_live_update; -} -function setUseLiveProgressImage(b_live_update) { - document.getElementById('chLiveProgressImage').checked = b_live_update; -} -function getExtensionType() { - return [...document.getElementsByClassName('rbExtensionType')].filter(e => e.checked == true)[0].value; -} -document.getElementById('btnGetDocPath').addEventListener('click', async () => { - const docPath = await io.IOFolder.getDocumentFolderNativePath(); - document.getElementById('tiDocPath').value = docPath; - const uuid = await getUniqueDocumentId(); - doc_entry = await io.IOFolder.getDocFolder(uuid); - await shell.openPath(doc_entry.nativePath); -}); -document.getElementById('btnSdUrl').addEventListener('click', async () => { - //change the sdUrl in server in proxy server - // console.log('you clicked btnSdUrl') - let new_sd_url = document.getElementById('tiSdUrl').value; - changeSdUrl(new_sd_url); -}); -function getSdUrlHtml() { - let sd_url = document.getElementById('tiSdUrl').value; - return sd_url; -} -function setSdUrlHtml(sd_url) { - document.getElementById('tiSdUrl').value = sd_url; -} -async function changeSdUrl(sd_url) { - sd_url = sd_url.trim(); - console.log('sd_url.trim(): ', sd_url); - if (sd_url.length > 0) { - //check if the last character of the url has "/" or '\' and remove it - - last_index = sd_url.length - 1; - if (sd_url[last_index] === '/' || sd_url[last_index] === '\\') { - sd_url = sd_url.slice(0, -1); - } - - //submit the change - await sdapi.changeSdUrl(sd_url); - } -} -async function saveSettings() { - const settings_tab_settings = { - use_sharp_mask: getUseSharpMask(), - extension_type: getExtensionType(), - sd_url: getSdUrlHtml() - }; - const folder = await io.IOFolder.getSettingsFolder(); - await io.IOJson.saveJsonToFile(settings_tab_settings, folder, 'settings_tab.json'); -} -async function loadSettings() { - try { - const folder = await io.IOFolder.getSettingsFolder(); - let settings_tab_settings = await io.IOJson.loadJsonFromFile(folder, 'settings_tab.json'); - setSdUrlHtml(settings_tab_settings['sd_url']); - await changeSdUrl(settings_tab_settings['sd_url']); - } catch (e) { - console.warn(e); - } -} -document.getElementById('chUseSharpMask').addEventListener('change', ev => { - const isChecked = ev.target.checked; - if (isChecked) { - document.getElementById('slMaskBlur').setAttribute('disabled'); - } else { - document.getElementById('slMaskBlur').removeAttribute('disabled'); - } -}); -document.getElementById('chUseSmartObject').addEventListener('change', ev => { - const isChecked = ev.target.checked; - if (isChecked) { - g_b_use_smart_object = true; - } else { - g_b_use_smart_object = false; - } -}); -function getUseOriginalPrompt() { - const b_use_original_prompt = document.getElementById('chUseOriginalPrompt').checked; - return b_use_original_prompt; -} -document.getElementById('btnSaveSettingsTabs').addEventListener('click', async () => { - await saveSettings(); -}); -module.exports = { - getUseSharpMask, - setUseSharpMask, - getExtensionType, - getSdUrlHtml, - setSdUrlHtml, - changeSdUrl, - loadSettings, - saveSettings, - getUseLiveProgressImage, - setUseLiveProgressImage, - getUseOriginalPrompt -}; - -/***/ }), - -/***/ "../stable-diffusion-webui/extensions/Auto-Photoshop-StableDiffusion-Plugin/utility/ui.js": -/*!************************************************************************************************!*\ - !*** ../stable-diffusion-webui/extensions/Auto-Photoshop-StableDiffusion-Plugin/utility/ui.js ***! - \************************************************************************************************/ -/***/ ((module, __unused_webpack_exports, __webpack_require__) => { - -function ownKeys(object, enumerableOnly) { var keys = Object.keys(object); if (Object.getOwnPropertySymbols) { var symbols = Object.getOwnPropertySymbols(object); enumerableOnly && (symbols = symbols.filter(function (sym) { return Object.getOwnPropertyDescriptor(object, sym).enumerable; })), keys.push.apply(keys, symbols); } return keys; } -function _objectSpread(target) { for (var i = 1; i < arguments.length; i++) { var source = null != arguments[i] ? arguments[i] : {}; i % 2 ? ownKeys(Object(source), !0).forEach(function (key) { _defineProperty(target, key, source[key]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(target, Object.getOwnPropertyDescriptors(source)) : ownKeys(Object(source)).forEach(function (key) { Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key)); }); } return target; } -function _defineProperty(obj, key, value) { key = _toPropertyKey(key); if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; } -function _toPropertyKey(arg) { var key = _toPrimitive(arg, "string"); return typeof key === "symbol" ? key : String(key); } -function _toPrimitive(input, hint) { if (typeof input !== "object" || input === null) return input; var prim = input[Symbol.toPrimitive]; if (prim !== undefined) { var res = prim.call(input, hint || "default"); if (typeof res !== "object") return res; throw new TypeError("@@toPrimitive must return a primitive value."); } return (hint === "string" ? String : Number)(input); } -const html_manip = __webpack_require__(/*! ./html_manip */ "../stable-diffusion-webui/extensions/Auto-Photoshop-StableDiffusion-Plugin/utility/html_manip.js"); -const presets = __webpack_require__(/*! ./presets/preset */ "../stable-diffusion-webui/extensions/Auto-Photoshop-StableDiffusion-Plugin/utility/presets/preset.js"); -const layer_util = __webpack_require__(/*! ../utility/layer */ "../stable-diffusion-webui/extensions/Auto-Photoshop-StableDiffusion-Plugin/utility/layer.js"); -const psapi = __webpack_require__(/*! ../psapi */ "../stable-diffusion-webui/extensions/Auto-Photoshop-StableDiffusion-Plugin/psapi.js"); -const Enum = __webpack_require__(/*! ../enum */ "../stable-diffusion-webui/extensions/Auto-Photoshop-StableDiffusion-Plugin/enum.js"); -const { - executeAsModal -} = (__webpack_require__(/*! photoshop */ "photoshop").core); -class UI { - constructor() {} - onStartSessionUI() { - // will toggle the buttons needed when a generation session start - - const accept_class_btns = Array.from(document.getElementsByClassName('acceptClass')); - const discard_class_btns = Array.from(document.getElementsByClassName('discardClass')); - const discard_selected_class_btns = Array.from(document.getElementsByClassName('discardSelectedClass')); - const accept_selected_class_btns = Array.from(document.getElementsByClassName('acceptSelectedClass')); - - //show the accept and discard buttons when a new session is active - accept_class_btns.forEach(element => element.style.display = 'inline-block'); - discard_class_btns.forEach(element => element.style.display = 'inline-block'); - discard_selected_class_btns.forEach(element => element.style.display = 'inline-block'); - accept_selected_class_btns.forEach(element => element.style.display = 'inline-block'); - this.generateMoreUI(); - } - onActiveSessionUI() {} - generateModeUI(mode) { - const generate_btns = Array.from(document.getElementsByClassName('btnGenerateClass')); - generate_btns.forEach(element => { - element.textContent = `Generate ${mode}`; - }); - html_manip.setGenerateButtonsColor('generate', 'generate-more'); - } - generateMoreUI() { - const generate_btns = Array.from(document.getElementsByClassName('btnGenerateClass')); - const generation_mode = g_generation_session.mode; - const generation_name = getCurrentGenerationModeByValue(generation_mode); - generate_btns.forEach(element => { - element.textContent = `Generate More ${generation_name}`; - }); - html_manip.setGenerateButtonsColor('generate-more', 'generate'); - } - onEndSessionUI() { - const accept_class_btns = Array.from(document.getElementsByClassName('acceptClass')); - const discard_class_btns = Array.from(document.getElementsByClassName('discardClass')); - const discard_selected_class_btns = Array.from(document.getElementsByClassName('discardSelectedClass')); - const accept_selected_class_btns = Array.from( - //Node: change customClass to acceptSelectedClass - document.getElementsByClassName('acceptSelectedClass')); - accept_class_btns.forEach(element => element.style.display = 'none'); - discard_class_btns.forEach(element => element.style.display = 'none'); - discard_selected_class_btns.forEach(element => element.style.display = 'none'); - accept_selected_class_btns.forEach(element => element.style.display = 'none'); - this.generateModeUI(g_sd_mode); - } - setGenerateBtnText(textContent) { - const generate_btns = Array.from(document.getElementsByClassName('btnGenerateClass')); - generate_btns.forEach(element => { - element.textContent = textContent; - }); - } -} - -// const defaultSettings = { -// model: null, -// prompt_shortcut: null, -// positive_prompt: "", -// negative_prompt: "", -// selection_mode: null, -// batch_number: 1, -// steps: 20, -// width: 512 , -// height:512, -// firstphase_width:512, -// firstphase_height:512, -// cfg:7, -// denoising_strength:0.7, -// hi_res_denoising_strength:0.7, -// mask_blur: 8, -// inpaint_at_full_res: false, -// hi_res_fix:false, -// inpaint_padding:0, -// seed:-1, -// samplers: null, -// mask_content:null -// } - -class UIElement { - constructor() { - this.name; - this.html_elem; - this.sd_value; - } - setValue() {} - getValue() {} -} -function createUIElement(getter, setter) { - let ui_element_obj = new UIElement(); - ui_element_obj.getValue = getter; - ui_element_obj.setValue = setter; - return ui_element_obj; -} -class UISettings { - // get and set the settings of the ui. the stable diffusion settings not the human friendly settings - constructor() { - // this.width = new ui.UIElement() - // this.width.getValue = html_manip.getWidth - // this.width.setValue = html_manip.autoFillInWidth - this.width = createUIElement(html_manip.getWidth, html_manip.autoFillInWidth); - this.height = createUIElement(html_manip.getHeight, html_manip.autoFillInHeight); - this.steps = createUIElement(html_manip.getSteps, html_manip.autoFillInSteps); - this.batch_number = createUIElement(html_manip.getBatchNumber, html_manip.autoFillInBatchNumber); - this.firstphase_width = createUIElement(html_manip.getHrWidth, html_manip.autoFillInHRWidth); - this.firstphase_height = createUIElement(html_manip.getHrHeight, html_manip.autoFillInHRHeight); - this.cfg = createUIElement(html_manip.getCFG, html_manip.setCFG); - this.denoising_strength = createUIElement(html_manip.getDenoisingStrength, html_manip.autoFillInDenoisingStrength); - this.mask_content = createUIElement(html_manip.getMaskContent, html_manip.setMaskContent); - this.seed = createUIElement(html_manip.getSeed, html_manip.setSeed); - this.prompt = createUIElement(html_manip.getPrompt, html_manip.autoFillInPrompt); - this.negative_prompt = createUIElement(html_manip.getNegativePrompt, html_manip.autoFillInNegativePrompt); - this.mask_blur = createUIElement(html_manip.getMaskBlur, html_manip.setMaskBlur); - this.mask_expansion = createUIElement(html_manip.getMaskExpansion, html_manip.setMaskExpansion); - this.samplers = createUIElement(html_manip.getCheckedSamplerName, html_manip.autoFillInSampler); - this.uiElements = { - // model: null, - // prompt_shortcut: null, - prompt: this.prompt, - negative_prompt: this.negative_prompt, - // selection_mode: null, - batch_size: this.batch_number, - steps: this.steps, - width: this.width, - height: this.height, - firstphase_width: this.firstphase_width, - firstphase_height: this.firstphase_height, - cfg_scale: this.cfg, - denoising_strength: this.denoising_strength, - // hi_res_denoising_strength:0.7, - mask_blur: this.mask_blur, - mask_expansion: this.mask_expansion, - // inpaint_at_full_res: false, - // hi_res_fix:false, - // inpaint_padding:0, - seed: this.seed, - sampler_index: this.samplers, - mask_content: this.mask_content - }; - } - autoFillInSettings(settings) { - for (const [name, value] of Object.entries(settings)) { - if (this.uiElements.hasOwnProperty(name) && value) { - //get the values for debugging - const old_value = this.uiElements[name].getValue(); - console.log('(name,old_value) => newValue:', name, old_value, value); - //set the value - this.uiElements[name].setValue(value); - } - } - } - getSettings() { - let settings = {}; - for (const [name, ui_element] of Object.entries(this.uiElements)) { - if (ui_element) { - const value = ui_element.getValue(); - settings[name] = value; - } - } - return settings; - } - saveAsJson(json_file_name, settings) { - for (const [name, value] of Object.entries(settings)) { - if (this.uiElements.hasOwnProperty(name) && value) { - //get the values for debugging - const old_value = this.uiElements[name].getValue(); - console.log('(name,old_value) => newValue:', name, old_value, value); - - //set the value - } - } - } -} -// const ui_settings = new UISettings() - -function loadPreset(ui_settings, preset) { - console.log('preset:', preset); - ui_settings.autoFillInSettings(preset); -} -function loadLatentNoiseSettings(ui_settings) { - loadPreset(ui_settings, presets.LatentNoiseSettings); -} -function loadFillSettings(ui_settings) { - loadPreset(ui_settings, presets.FillSettings); -} -function loadOriginalSettings(ui_settings) { - loadPreset(ui_settings, presets.OriginalSettings); -} -async function loadHealBrushSettings(ui_settings) { - document.getElementById('rbModeInpaint').click(); - loadPreset(ui_settings, presets.HealBrushSettings); -} -function loadCustomPreset(ui_settings_obj, custom_preset_settings) { - loadPreset(ui_settings_obj, custom_preset_settings); -} -function loadCustomPresetsSettings() {} -async function mapCustomPresetsToLoaders(ui_settings_obj) { - const name_to_settings_obj = await presets.getAllCustomPresetsSettings(Enum.PresetTypeEnum['SDPreset']); - const preset_name_to_loader_obj = {}; - for (const [preset_name, preset_settings] of Object.entries(name_to_settings_obj)) { - preset_name_to_loader_obj[preset_name] = () => { - loadCustomPreset(ui_settings_obj, preset_settings); - }; - } - return preset_name_to_loader_obj; -} -const g_nativePresets = { - fill: loadFillSettings, - original: loadOriginalSettings, - 'latent noise': loadLatentNoiseSettings, - 'Heal Brush': loadHealBrushSettings -}; -async function getLoadedPresets(ui_settings_obj) { - let customPresets; - customPresets = await mapCustomPresetsToLoaders(ui_settings_obj); - console.log('customPresets: ', customPresets); - let loadedPresets = _objectSpread(_objectSpread({}, g_nativePresets), customPresets); - return loadedPresets; -} -let g_ui_settings_object = new UISettings(); -function getUISettingsObject() { - return g_ui_settings_object; -} - -//REFACTOR: move to ui.js -function addPresetMenuItem(preset_title) { - // console.log(model_title,model_name) - const menu_item_element = document.createElement('sp-menu-item'); - menu_item_element.className = 'mPresetMenuItem'; - menu_item_element.innerHTML = preset_title; - - // menu_item_element.addEventListener('select',()=>{ - // preset_func(g_ui_settings) - // }) - return menu_item_element; -} -//REFACTOR: move to ui.js -async function populatePresetMenu() { - document.getElementById('mPresetMenu').innerHTML = ''; - const divider_elem = document.createElement('sp-menu-divider'); - const preset_name = 'Select Smart Preset'; - const preset_func = () => {}; - const dummy_preset_item = addPresetMenuItem(preset_name, preset_func); - dummy_preset_item.setAttribute('selected', 'selected'); - // dummy_preset_item.setAttribute('disabled') - document.getElementById('mPresetMenu').appendChild(dummy_preset_item); - document.getElementById('mPresetMenu').appendChild(divider_elem); - const presets = await getLoadedPresets(g_ui_settings_object); - for ([key, value] of Object.entries(presets)) { - const preset_menu_item = addPresetMenuItem(key, value); - document.getElementById('mPresetMenu').appendChild(preset_menu_item); - } -} -populatePresetMenu(); -//REFACTOR: move to preset_tab.js -document.getElementById('mPresetMenu').addEventListener('change', async evt => { - const preset_index = evt.target.selectedIndex; - const preset_name = evt.target.options[preset_index].textContent; - const presets = await getLoadedPresets(g_ui_settings_object); - if (presets.hasOwnProperty(preset_name)) { - const loader = presets[preset_name]; - if (loader.constructor.name === 'AsyncFunction') { - await loader(g_ui_settings_object); - } else { - loader(g_ui_settings_object); - } - } -}); -module.exports = { - UI, - UIElement, - UISettings, - loadLatentNoiseSettings, - loadFillSettings, - loadHealBrushSettings, - getLoadedPresets, - getUISettingsObject, - populatePresetMenu -}; - -/***/ }), - -/***/ "../stable-diffusion-webui/extensions/Auto-Photoshop-StableDiffusion-Plugin/node_modules/css-loader/dist/cjs.js!../stable-diffusion-webui/extensions/Auto-Photoshop-StableDiffusion-Plugin/after_detailer/src/style/after_detailer.css": -/*!*********************************************************************************************************************************************************************************************************************************************!*\ - !*** ../stable-diffusion-webui/extensions/Auto-Photoshop-StableDiffusion-Plugin/node_modules/css-loader/dist/cjs.js!../stable-diffusion-webui/extensions/Auto-Photoshop-StableDiffusion-Plugin/after_detailer/src/style/after_detailer.css ***! - \*********************************************************************************************************************************************************************************************************************************************/ -/***/ ((module, __webpack_exports__, __webpack_require__) => { - -"use strict"; -__webpack_require__.r(__webpack_exports__); -/* harmony export */ __webpack_require__.d(__webpack_exports__, { -/* harmony export */ "default": () => (__WEBPACK_DEFAULT_EXPORT__) -/* harmony export */ }); -/* harmony import */ var _node_modules_css_loader_dist_runtime_sourceMaps_js__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../../../node_modules/css-loader/dist/runtime/sourceMaps.js */ "../stable-diffusion-webui/extensions/Auto-Photoshop-StableDiffusion-Plugin/node_modules/css-loader/dist/runtime/sourceMaps.js"); -/* harmony import */ var _node_modules_css_loader_dist_runtime_sourceMaps_js__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(_node_modules_css_loader_dist_runtime_sourceMaps_js__WEBPACK_IMPORTED_MODULE_0__); -/* harmony import */ var _node_modules_css_loader_dist_runtime_api_js__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ../../../node_modules/css-loader/dist/runtime/api.js */ "../stable-diffusion-webui/extensions/Auto-Photoshop-StableDiffusion-Plugin/node_modules/css-loader/dist/runtime/api.js"); -/* harmony import */ var _node_modules_css_loader_dist_runtime_api_js__WEBPACK_IMPORTED_MODULE_1___default = /*#__PURE__*/__webpack_require__.n(_node_modules_css_loader_dist_runtime_api_js__WEBPACK_IMPORTED_MODULE_1__); -// Imports - - -var ___CSS_LOADER_EXPORT___ = _node_modules_css_loader_dist_runtime_api_js__WEBPACK_IMPORTED_MODULE_1___default()((_node_modules_css_loader_dist_runtime_sourceMaps_js__WEBPACK_IMPORTED_MODULE_0___default())); -// Module -___CSS_LOADER_EXPORT___.push([module.id, "/* Style the button that is used to open and close the collapsible content */\r\n.collapsible {\r\n background-color: #2d2d2d;\r\n\r\n cursor: pointer;\r\n padding: 3px;\r\n\r\n border: none;\r\n text-align: left;\r\n outline: none;\r\n font-size: 15px;\r\n font-weight: 500;\r\n color: #eaeaea;\r\n\r\n display: flex;\r\n justify-content: space-between;\r\n width: 100%;\r\n}\r\n\r\n/* Add a background color to the button if it is clicked on (add the .active class with JS), and when you move the mouse over it (hover) */\r\n.collapsible-active,\r\n.collapsible:hover {\r\n background-color: #1f1f1f;\r\n}\r\n\r\n.triangle {\r\n background-color: transparent;\r\n}", "",{"version":3,"sources":["webpack://./../stable-diffusion-webui/extensions/Auto-Photoshop-StableDiffusion-Plugin/after_detailer/src/style/after_detailer.css"],"names":[],"mappings":"AAAA,4EAA4E;AAC5E;IACI,yBAAyB;;IAEzB,eAAe;IACf,YAAY;;IAEZ,YAAY;IACZ,gBAAgB;IAChB,aAAa;IACb,eAAe;IACf,gBAAgB;IAChB,cAAc;;IAEd,aAAa;IACb,8BAA8B;IAC9B,WAAW;AACf;;AAEA,0IAA0I;AAC1I;;IAEI,yBAAyB;AAC7B;;AAEA;IACI,6BAA6B;AACjC","sourcesContent":["/* Style the button that is used to open and close the collapsible content */\r\n.collapsible {\r\n background-color: #2d2d2d;\r\n\r\n cursor: pointer;\r\n padding: 3px;\r\n\r\n border: none;\r\n text-align: left;\r\n outline: none;\r\n font-size: 15px;\r\n font-weight: 500;\r\n color: #eaeaea;\r\n\r\n display: flex;\r\n justify-content: space-between;\r\n width: 100%;\r\n}\r\n\r\n/* Add a background color to the button if it is clicked on (add the .active class with JS), and when you move the mouse over it (hover) */\r\n.collapsible-active,\r\n.collapsible:hover {\r\n background-color: #1f1f1f;\r\n}\r\n\r\n.triangle {\r\n background-color: transparent;\r\n}"],"sourceRoot":""}]); -// Exports -/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (___CSS_LOADER_EXPORT___); - - -/***/ }), - -/***/ "../stable-diffusion-webui/extensions/Auto-Photoshop-StableDiffusion-Plugin/node_modules/css-loader/dist/runtime/api.js": -/*!******************************************************************************************************************************!*\ - !*** ../stable-diffusion-webui/extensions/Auto-Photoshop-StableDiffusion-Plugin/node_modules/css-loader/dist/runtime/api.js ***! - \******************************************************************************************************************************/ -/***/ ((module) => { - -"use strict"; - - -/* - MIT License http://www.opensource.org/licenses/mit-license.php - Author Tobias Koppers @sokra -*/ -module.exports = function (cssWithMappingToString) { - var list = []; - - // return the list of modules as css string - list.toString = function toString() { - return this.map(function (item) { - var content = ""; - var needLayer = typeof item[5] !== "undefined"; - if (item[4]) { - content += "@supports (".concat(item[4], ") {"); - } - if (item[2]) { - content += "@media ".concat(item[2], " {"); - } - if (needLayer) { - content += "@layer".concat(item[5].length > 0 ? " ".concat(item[5]) : "", " {"); - } - content += cssWithMappingToString(item); - if (needLayer) { - content += "}"; - } - if (item[2]) { - content += "}"; - } - if (item[4]) { - content += "}"; - } - return content; - }).join(""); - }; - - // import a list of modules into the list - list.i = function i(modules, media, dedupe, supports, layer) { - if (typeof modules === "string") { - modules = [[null, modules, undefined]]; - } - var alreadyImportedModules = {}; - if (dedupe) { - for (var k = 0; k < this.length; k++) { - var id = this[k][0]; - if (id != null) { - alreadyImportedModules[id] = true; - } - } - } - for (var _k = 0; _k < modules.length; _k++) { - var item = [].concat(modules[_k]); - if (dedupe && alreadyImportedModules[item[0]]) { - continue; - } - if (typeof layer !== "undefined") { - if (typeof item[5] === "undefined") { - item[5] = layer; - } else { - item[1] = "@layer".concat(item[5].length > 0 ? " ".concat(item[5]) : "", " {").concat(item[1], "}"); - item[5] = layer; - } - } - if (media) { - if (!item[2]) { - item[2] = media; - } else { - item[1] = "@media ".concat(item[2], " {").concat(item[1], "}"); - item[2] = media; - } - } - if (supports) { - if (!item[4]) { - item[4] = "".concat(supports); - } else { - item[1] = "@supports (".concat(item[4], ") {").concat(item[1], "}"); - item[4] = supports; - } - } - list.push(item); - } - }; - return list; -}; - -/***/ }), - -/***/ "../stable-diffusion-webui/extensions/Auto-Photoshop-StableDiffusion-Plugin/node_modules/css-loader/dist/runtime/sourceMaps.js": -/*!*************************************************************************************************************************************!*\ - !*** ../stable-diffusion-webui/extensions/Auto-Photoshop-StableDiffusion-Plugin/node_modules/css-loader/dist/runtime/sourceMaps.js ***! - \*************************************************************************************************************************************/ -/***/ ((module) => { - -"use strict"; - - -module.exports = function (item) { - var content = item[1]; - var cssMapping = item[3]; - if (!cssMapping) { - return content; - } - if (typeof btoa === "function") { - var base64 = btoa(unescape(encodeURIComponent(JSON.stringify(cssMapping)))); - var data = "sourceMappingURL=data:application/json;charset=utf-8;base64,".concat(base64); - var sourceMapping = "/*# ".concat(data, " */"); - return [content].concat([sourceMapping]).join("\n"); - } - return [content].join("\n"); -}; - -/***/ }), - -/***/ "../stable-diffusion-webui/extensions/Auto-Photoshop-StableDiffusion-Plugin/node_modules/mobx-react-lite/es/ObserverComponent.js": -/*!***************************************************************************************************************************************!*\ - !*** ../stable-diffusion-webui/extensions/Auto-Photoshop-StableDiffusion-Plugin/node_modules/mobx-react-lite/es/ObserverComponent.js ***! - \***************************************************************************************************************************************/ -/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { - -"use strict"; -__webpack_require__.r(__webpack_exports__); -/* harmony export */ __webpack_require__.d(__webpack_exports__, { -/* harmony export */ "Observer": () => (/* binding */ ObserverComponent) -/* harmony export */ }); -/* harmony import */ var _useObserver__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./useObserver */ "../stable-diffusion-webui/extensions/Auto-Photoshop-StableDiffusion-Plugin/node_modules/mobx-react-lite/es/useObserver.js"); - -function ObserverComponent(_a) { - var children = _a.children, render = _a.render; - var component = children || render; - if (typeof component !== "function") { - return null; - } - return (0,_useObserver__WEBPACK_IMPORTED_MODULE_0__.useObserver)(component); -} -if (true) { - ObserverComponent.propTypes = { - children: ObserverPropsCheck, - render: ObserverPropsCheck - }; -} -ObserverComponent.displayName = "Observer"; - -function ObserverPropsCheck(props, key, componentName, location, propFullName) { - var extraKey = key === "children" ? "render" : "children"; - var hasProp = typeof props[key] === "function"; - var hasExtraProp = typeof props[extraKey] === "function"; - if (hasProp && hasExtraProp) { - return new Error("MobX Observer: Do not use children and render in the same time in`" + componentName); - } - if (hasProp || hasExtraProp) { - return null; - } - return new Error("Invalid prop `" + - propFullName + - "` of type `" + - typeof props[key] + - "` supplied to" + - " `" + - componentName + - "`, expected `function`."); -} -//# sourceMappingURL=ObserverComponent.js.map - -/***/ }), - -/***/ "../stable-diffusion-webui/extensions/Auto-Photoshop-StableDiffusion-Plugin/node_modules/mobx-react-lite/es/index.js": -/*!***************************************************************************************************************************!*\ - !*** ../stable-diffusion-webui/extensions/Auto-Photoshop-StableDiffusion-Plugin/node_modules/mobx-react-lite/es/index.js ***! - \***************************************************************************************************************************/ -/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { - -"use strict"; -__webpack_require__.r(__webpack_exports__); -/* harmony export */ __webpack_require__.d(__webpack_exports__, { -/* harmony export */ "Observer": () => (/* reexport safe */ _ObserverComponent__WEBPACK_IMPORTED_MODULE_8__.Observer), -/* harmony export */ "clearTimers": () => (/* binding */ clearTimers), -/* harmony export */ "enableStaticRendering": () => (/* reexport safe */ _staticRendering__WEBPACK_IMPORTED_MODULE_5__.enableStaticRendering), -/* harmony export */ "isObserverBatched": () => (/* reexport safe */ _utils_observerBatching__WEBPACK_IMPORTED_MODULE_2__.isObserverBatched), -/* harmony export */ "isUsingStaticRendering": () => (/* reexport safe */ _staticRendering__WEBPACK_IMPORTED_MODULE_5__.isUsingStaticRendering), -/* harmony export */ "observer": () => (/* reexport safe */ _observer__WEBPACK_IMPORTED_MODULE_7__.observer), -/* harmony export */ "observerBatching": () => (/* reexport safe */ _utils_observerBatching__WEBPACK_IMPORTED_MODULE_2__.observerBatching), -/* harmony export */ "useAsObservableSource": () => (/* reexport safe */ _useAsObservableSource__WEBPACK_IMPORTED_MODULE_11__.useAsObservableSource), -/* harmony export */ "useLocalObservable": () => (/* reexport safe */ _useLocalObservable__WEBPACK_IMPORTED_MODULE_9__.useLocalObservable), -/* harmony export */ "useLocalStore": () => (/* reexport safe */ _useLocalStore__WEBPACK_IMPORTED_MODULE_10__.useLocalStore), -/* harmony export */ "useObserver": () => (/* binding */ useObserver), -/* harmony export */ "useStaticRendering": () => (/* binding */ useStaticRendering) -/* harmony export */ }); -/* harmony import */ var _utils_assertEnvironment__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./utils/assertEnvironment */ "../stable-diffusion-webui/extensions/Auto-Photoshop-StableDiffusion-Plugin/node_modules/mobx-react-lite/es/utils/assertEnvironment.js"); -/* harmony import */ var _utils_reactBatchedUpdates__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./utils/reactBatchedUpdates */ "../stable-diffusion-webui/extensions/Auto-Photoshop-StableDiffusion-Plugin/node_modules/mobx-react-lite/es/utils/reactBatchedUpdates.js"); -/* harmony import */ var _utils_observerBatching__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./utils/observerBatching */ "../stable-diffusion-webui/extensions/Auto-Photoshop-StableDiffusion-Plugin/node_modules/mobx-react-lite/es/utils/observerBatching.js"); -/* harmony import */ var _utils_utils__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ./utils/utils */ "../stable-diffusion-webui/extensions/Auto-Photoshop-StableDiffusion-Plugin/node_modules/mobx-react-lite/es/utils/utils.js"); -/* harmony import */ var _useObserver__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ./useObserver */ "../stable-diffusion-webui/extensions/Auto-Photoshop-StableDiffusion-Plugin/node_modules/mobx-react-lite/es/useObserver.js"); -/* harmony import */ var _staticRendering__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! ./staticRendering */ "../stable-diffusion-webui/extensions/Auto-Photoshop-StableDiffusion-Plugin/node_modules/mobx-react-lite/es/staticRendering.js"); -/* harmony import */ var _utils_observerFinalizationRegistry__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! ./utils/observerFinalizationRegistry */ "../stable-diffusion-webui/extensions/Auto-Photoshop-StableDiffusion-Plugin/node_modules/mobx-react-lite/es/utils/observerFinalizationRegistry.js"); -/* harmony import */ var _observer__WEBPACK_IMPORTED_MODULE_7__ = __webpack_require__(/*! ./observer */ "../stable-diffusion-webui/extensions/Auto-Photoshop-StableDiffusion-Plugin/node_modules/mobx-react-lite/es/observer.js"); -/* harmony import */ var _ObserverComponent__WEBPACK_IMPORTED_MODULE_8__ = __webpack_require__(/*! ./ObserverComponent */ "../stable-diffusion-webui/extensions/Auto-Photoshop-StableDiffusion-Plugin/node_modules/mobx-react-lite/es/ObserverComponent.js"); -/* harmony import */ var _useLocalObservable__WEBPACK_IMPORTED_MODULE_9__ = __webpack_require__(/*! ./useLocalObservable */ "../stable-diffusion-webui/extensions/Auto-Photoshop-StableDiffusion-Plugin/node_modules/mobx-react-lite/es/useLocalObservable.js"); -/* harmony import */ var _useLocalStore__WEBPACK_IMPORTED_MODULE_10__ = __webpack_require__(/*! ./useLocalStore */ "../stable-diffusion-webui/extensions/Auto-Photoshop-StableDiffusion-Plugin/node_modules/mobx-react-lite/es/useLocalStore.js"); -/* harmony import */ var _useAsObservableSource__WEBPACK_IMPORTED_MODULE_11__ = __webpack_require__(/*! ./useAsObservableSource */ "../stable-diffusion-webui/extensions/Auto-Photoshop-StableDiffusion-Plugin/node_modules/mobx-react-lite/es/useAsObservableSource.js"); -var _a; - - - - - - - -(0,_utils_observerBatching__WEBPACK_IMPORTED_MODULE_2__.observerBatching)(_utils_reactBatchedUpdates__WEBPACK_IMPORTED_MODULE_1__.unstable_batchedUpdates); - - - - - - -var clearTimers = (_a = _utils_observerFinalizationRegistry__WEBPACK_IMPORTED_MODULE_6__.observerFinalizationRegistry.finalizeAllImmediately) !== null && _a !== void 0 ? _a : (function () { }); -function useObserver(fn, baseComponentName) { - if (baseComponentName === void 0) { baseComponentName = "observed"; } - if (true) { - (0,_utils_utils__WEBPACK_IMPORTED_MODULE_3__.useDeprecated)("[mobx-react-lite] 'useObserver(fn)' is deprecated. Use `{fn}` instead, or wrap the entire component in `observer`."); - } - return (0,_useObserver__WEBPACK_IMPORTED_MODULE_4__.useObserver)(fn, baseComponentName); -} - -function useStaticRendering(enable) { - if (true) { - console.warn("[mobx-react-lite] 'useStaticRendering' is deprecated, use 'enableStaticRendering' instead"); - } - (0,_staticRendering__WEBPACK_IMPORTED_MODULE_5__.enableStaticRendering)(enable); -} -//# sourceMappingURL=index.js.map - -/***/ }), - -/***/ "../stable-diffusion-webui/extensions/Auto-Photoshop-StableDiffusion-Plugin/node_modules/mobx-react-lite/es/observer.js": -/*!******************************************************************************************************************************!*\ - !*** ../stable-diffusion-webui/extensions/Auto-Photoshop-StableDiffusion-Plugin/node_modules/mobx-react-lite/es/observer.js ***! - \******************************************************************************************************************************/ -/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { - -"use strict"; -__webpack_require__.r(__webpack_exports__); -/* harmony export */ __webpack_require__.d(__webpack_exports__, { -/* harmony export */ "observer": () => (/* binding */ observer) -/* harmony export */ }); -/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! react */ "../stable-diffusion-webui/extensions/Auto-Photoshop-StableDiffusion-Plugin/node_modules/react/index.js"); -/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(react__WEBPACK_IMPORTED_MODULE_0__); -/* harmony import */ var _staticRendering__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./staticRendering */ "../stable-diffusion-webui/extensions/Auto-Photoshop-StableDiffusion-Plugin/node_modules/mobx-react-lite/es/staticRendering.js"); -/* harmony import */ var _useObserver__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./useObserver */ "../stable-diffusion-webui/extensions/Auto-Photoshop-StableDiffusion-Plugin/node_modules/mobx-react-lite/es/useObserver.js"); - - - -var warnObserverOptionsDeprecated = true; -var hasSymbol = typeof Symbol === "function" && Symbol.for; -// Using react-is had some issues (and operates on elements, not on types), see #608 / #609 -var ReactForwardRefSymbol = hasSymbol - ? Symbol.for("react.forward_ref") - : typeof react__WEBPACK_IMPORTED_MODULE_0__.forwardRef === "function" && (0,react__WEBPACK_IMPORTED_MODULE_0__.forwardRef)(function (props) { return null; })["$$typeof"]; -var ReactMemoSymbol = hasSymbol - ? Symbol.for("react.memo") - : typeof react__WEBPACK_IMPORTED_MODULE_0__.memo === "function" && (0,react__WEBPACK_IMPORTED_MODULE_0__.memo)(function (props) { return null; })["$$typeof"]; -// n.b. base case is not used for actual typings or exported in the typing files -function observer(baseComponent, -// TODO remove in next major -options) { - var _a; - if ( true && warnObserverOptionsDeprecated && options) { - warnObserverOptionsDeprecated = false; - console.warn("[mobx-react-lite] `observer(fn, { forwardRef: true })` is deprecated, use `observer(React.forwardRef(fn))`"); - } - if (ReactMemoSymbol && baseComponent["$$typeof"] === ReactMemoSymbol) { - throw new Error("[mobx-react-lite] You are trying to use `observer` on a function component wrapped in either another `observer` or `React.memo`. The observer already applies 'React.memo' for you."); - } - // The working of observer is explained step by step in this talk: https://www.youtube.com/watch?v=cPF4iBedoF0&feature=youtu.be&t=1307 - if ((0,_staticRendering__WEBPACK_IMPORTED_MODULE_1__.isUsingStaticRendering)()) { - return baseComponent; - } - var useForwardRef = (_a = options === null || options === void 0 ? void 0 : options.forwardRef) !== null && _a !== void 0 ? _a : false; - var render = baseComponent; - var baseComponentName = baseComponent.displayName || baseComponent.name; - // If already wrapped with forwardRef, unwrap, - // so we can patch render and apply memo - if (ReactForwardRefSymbol && baseComponent["$$typeof"] === ReactForwardRefSymbol) { - useForwardRef = true; - render = baseComponent["render"]; - if (typeof render !== "function") { - throw new Error("[mobx-react-lite] `render` property of ForwardRef was not a function"); - } - } - var observerComponent = function (props, ref) { - return (0,_useObserver__WEBPACK_IMPORTED_MODULE_2__.useObserver)(function () { return render(props, ref); }, baseComponentName); - }; - // Don't set `displayName` for anonymous components, - // so the `displayName` can be customized by user, see #3192. - if (baseComponentName !== "") { - ; - observerComponent.displayName = baseComponentName; - } - // Support legacy context: `contextTypes` must be applied before `memo` - if (baseComponent.contextTypes) { - ; - observerComponent.contextTypes = baseComponent.contextTypes; - } - if (useForwardRef) { - // `forwardRef` must be applied prior `memo` - // `forwardRef(observer(cmp))` throws: - // "forwardRef requires a render function but received a `memo` component. Instead of forwardRef(memo(...)), use memo(forwardRef(...))" - observerComponent = (0,react__WEBPACK_IMPORTED_MODULE_0__.forwardRef)(observerComponent); - } - // memo; we are not interested in deep updates - // in props; we assume that if deep objects are changed, - // this is in observables, which would have been tracked anyway - observerComponent = (0,react__WEBPACK_IMPORTED_MODULE_0__.memo)(observerComponent); - copyStaticProperties(baseComponent, observerComponent); - if (true) { - Object.defineProperty(observerComponent, "contextTypes", { - set: function () { - var _a; - throw new Error("[mobx-react-lite] `".concat(this.displayName || ((_a = this.type) === null || _a === void 0 ? void 0 : _a.displayName) || "Component", ".contextTypes` must be set before applying `observer`.")); - } - }); - } - return observerComponent; -} -// based on https://github.com/mridgway/hoist-non-react-statics/blob/master/src/index.js -var hoistBlackList = { - $$typeof: true, - render: true, - compare: true, - type: true, - // Don't redefine `displayName`, - // it's defined as getter-setter pair on `memo` (see #3192). - displayName: true -}; -function copyStaticProperties(base, target) { - Object.keys(base).forEach(function (key) { - if (!hoistBlackList[key]) { - Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(base, key)); - } - }); -} -//# sourceMappingURL=observer.js.map - -/***/ }), - -/***/ "../stable-diffusion-webui/extensions/Auto-Photoshop-StableDiffusion-Plugin/node_modules/mobx-react-lite/es/staticRendering.js": -/*!*************************************************************************************************************************************!*\ - !*** ../stable-diffusion-webui/extensions/Auto-Photoshop-StableDiffusion-Plugin/node_modules/mobx-react-lite/es/staticRendering.js ***! - \*************************************************************************************************************************************/ -/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { - -"use strict"; -__webpack_require__.r(__webpack_exports__); -/* harmony export */ __webpack_require__.d(__webpack_exports__, { -/* harmony export */ "enableStaticRendering": () => (/* binding */ enableStaticRendering), -/* harmony export */ "isUsingStaticRendering": () => (/* binding */ isUsingStaticRendering) -/* harmony export */ }); -var globalIsUsingStaticRendering = false; -function enableStaticRendering(enable) { - globalIsUsingStaticRendering = enable; -} -function isUsingStaticRendering() { - return globalIsUsingStaticRendering; -} -//# sourceMappingURL=staticRendering.js.map - -/***/ }), - -/***/ "../stable-diffusion-webui/extensions/Auto-Photoshop-StableDiffusion-Plugin/node_modules/mobx-react-lite/es/useAsObservableSource.js": -/*!*******************************************************************************************************************************************!*\ - !*** ../stable-diffusion-webui/extensions/Auto-Photoshop-StableDiffusion-Plugin/node_modules/mobx-react-lite/es/useAsObservableSource.js ***! - \*******************************************************************************************************************************************/ -/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { - -"use strict"; -__webpack_require__.r(__webpack_exports__); -/* harmony export */ __webpack_require__.d(__webpack_exports__, { -/* harmony export */ "useAsObservableSource": () => (/* binding */ useAsObservableSource) -/* harmony export */ }); -/* harmony import */ var _utils_utils__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./utils/utils */ "../stable-diffusion-webui/extensions/Auto-Photoshop-StableDiffusion-Plugin/node_modules/mobx-react-lite/es/utils/utils.js"); -/* harmony import */ var mobx__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! mobx */ "../stable-diffusion-webui/extensions/Auto-Photoshop-StableDiffusion-Plugin/node_modules/mobx/dist/mobx.esm.js"); -/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! react */ "../stable-diffusion-webui/extensions/Auto-Photoshop-StableDiffusion-Plugin/node_modules/react/index.js"); -/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_1___default = /*#__PURE__*/__webpack_require__.n(react__WEBPACK_IMPORTED_MODULE_1__); -var __read = (undefined && undefined.__read) || function (o, n) { - var m = typeof Symbol === "function" && o[Symbol.iterator]; - if (!m) return o; - var i = m.call(o), r, ar = [], e; - try { - while ((n === void 0 || n-- > 0) && !(r = i.next()).done) ar.push(r.value); - } - catch (error) { e = { error: error }; } - finally { - try { - if (r && !r.done && (m = i["return"])) m.call(i); - } - finally { if (e) throw e.error; } - } - return ar; -}; - - - -function useAsObservableSource(current) { - if (true) - (0,_utils_utils__WEBPACK_IMPORTED_MODULE_0__.useDeprecated)("[mobx-react-lite] 'useAsObservableSource' is deprecated, please store the values directly in an observable, for example by using 'useLocalObservable', and sync future updates using 'useEffect' when needed. See the README for examples."); - var _a = __read((0,react__WEBPACK_IMPORTED_MODULE_1__.useState)(function () { return (0,mobx__WEBPACK_IMPORTED_MODULE_2__.observable)(current, {}, { deep: false }); }), 1), res = _a[0]; - (0,mobx__WEBPACK_IMPORTED_MODULE_2__.runInAction)(function () { - Object.assign(res, current); - }); - return res; -} -//# sourceMappingURL=useAsObservableSource.js.map - -/***/ }), - -/***/ "../stable-diffusion-webui/extensions/Auto-Photoshop-StableDiffusion-Plugin/node_modules/mobx-react-lite/es/useLocalObservable.js": -/*!****************************************************************************************************************************************!*\ - !*** ../stable-diffusion-webui/extensions/Auto-Photoshop-StableDiffusion-Plugin/node_modules/mobx-react-lite/es/useLocalObservable.js ***! - \****************************************************************************************************************************************/ -/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { - -"use strict"; -__webpack_require__.r(__webpack_exports__); -/* harmony export */ __webpack_require__.d(__webpack_exports__, { -/* harmony export */ "useLocalObservable": () => (/* binding */ useLocalObservable) -/* harmony export */ }); -/* harmony import */ var mobx__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! mobx */ "../stable-diffusion-webui/extensions/Auto-Photoshop-StableDiffusion-Plugin/node_modules/mobx/dist/mobx.esm.js"); -/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! react */ "../stable-diffusion-webui/extensions/Auto-Photoshop-StableDiffusion-Plugin/node_modules/react/index.js"); -/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(react__WEBPACK_IMPORTED_MODULE_0__); - - -function useLocalObservable(initializer, annotations) { - return (0,react__WEBPACK_IMPORTED_MODULE_0__.useState)(function () { return (0,mobx__WEBPACK_IMPORTED_MODULE_1__.observable)(initializer(), annotations, { autoBind: true }); })[0]; -} -//# sourceMappingURL=useLocalObservable.js.map - -/***/ }), - -/***/ "../stable-diffusion-webui/extensions/Auto-Photoshop-StableDiffusion-Plugin/node_modules/mobx-react-lite/es/useLocalStore.js": -/*!***********************************************************************************************************************************!*\ - !*** ../stable-diffusion-webui/extensions/Auto-Photoshop-StableDiffusion-Plugin/node_modules/mobx-react-lite/es/useLocalStore.js ***! - \***********************************************************************************************************************************/ -/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { - -"use strict"; -__webpack_require__.r(__webpack_exports__); -/* harmony export */ __webpack_require__.d(__webpack_exports__, { -/* harmony export */ "useLocalStore": () => (/* binding */ useLocalStore) -/* harmony export */ }); -/* harmony import */ var mobx__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! mobx */ "../stable-diffusion-webui/extensions/Auto-Photoshop-StableDiffusion-Plugin/node_modules/mobx/dist/mobx.esm.js"); -/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! react */ "../stable-diffusion-webui/extensions/Auto-Photoshop-StableDiffusion-Plugin/node_modules/react/index.js"); -/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(react__WEBPACK_IMPORTED_MODULE_0__); -/* harmony import */ var _utils_utils__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./utils/utils */ "../stable-diffusion-webui/extensions/Auto-Photoshop-StableDiffusion-Plugin/node_modules/mobx-react-lite/es/utils/utils.js"); -/* harmony import */ var _useAsObservableSource__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./useAsObservableSource */ "../stable-diffusion-webui/extensions/Auto-Photoshop-StableDiffusion-Plugin/node_modules/mobx-react-lite/es/useAsObservableSource.js"); - - - - -function useLocalStore(initializer, current) { - if (true) - (0,_utils_utils__WEBPACK_IMPORTED_MODULE_1__.useDeprecated)("[mobx-react-lite] 'useLocalStore' is deprecated, use 'useLocalObservable' instead."); - var source = current && (0,_useAsObservableSource__WEBPACK_IMPORTED_MODULE_2__.useAsObservableSource)(current); - return (0,react__WEBPACK_IMPORTED_MODULE_0__.useState)(function () { return (0,mobx__WEBPACK_IMPORTED_MODULE_3__.observable)(initializer(source), undefined, { autoBind: true }); })[0]; -} -//# sourceMappingURL=useLocalStore.js.map - -/***/ }), - -/***/ "../stable-diffusion-webui/extensions/Auto-Photoshop-StableDiffusion-Plugin/node_modules/mobx-react-lite/es/useObserver.js": -/*!*********************************************************************************************************************************!*\ - !*** ../stable-diffusion-webui/extensions/Auto-Photoshop-StableDiffusion-Plugin/node_modules/mobx-react-lite/es/useObserver.js ***! - \*********************************************************************************************************************************/ -/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { - -"use strict"; -__webpack_require__.r(__webpack_exports__); -/* harmony export */ __webpack_require__.d(__webpack_exports__, { -/* harmony export */ "useObserver": () => (/* binding */ useObserver) -/* harmony export */ }); -/* harmony import */ var mobx__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! mobx */ "../stable-diffusion-webui/extensions/Auto-Photoshop-StableDiffusion-Plugin/node_modules/mobx/dist/mobx.esm.js"); -/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! react */ "../stable-diffusion-webui/extensions/Auto-Photoshop-StableDiffusion-Plugin/node_modules/react/index.js"); -/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(react__WEBPACK_IMPORTED_MODULE_0__); -/* harmony import */ var _utils_printDebugValue__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./utils/printDebugValue */ "../stable-diffusion-webui/extensions/Auto-Photoshop-StableDiffusion-Plugin/node_modules/mobx-react-lite/es/utils/printDebugValue.js"); -/* harmony import */ var _utils_observerFinalizationRegistry__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./utils/observerFinalizationRegistry */ "../stable-diffusion-webui/extensions/Auto-Photoshop-StableDiffusion-Plugin/node_modules/mobx-react-lite/es/utils/observerFinalizationRegistry.js"); -/* harmony import */ var _staticRendering__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ./staticRendering */ "../stable-diffusion-webui/extensions/Auto-Photoshop-StableDiffusion-Plugin/node_modules/mobx-react-lite/es/staticRendering.js"); -var __read = (undefined && undefined.__read) || function (o, n) { - var m = typeof Symbol === "function" && o[Symbol.iterator]; - if (!m) return o; - var i = m.call(o), r, ar = [], e; - try { - while ((n === void 0 || n-- > 0) && !(r = i.next()).done) ar.push(r.value); - } - catch (error) { e = { error: error }; } - finally { - try { - if (r && !r.done && (m = i["return"])) m.call(i); - } - finally { if (e) throw e.error; } - } - return ar; -}; - - - - - -function observerComponentNameFor(baseComponentName) { - return "observer".concat(baseComponentName); -} -/** - * We use class to make it easier to detect in heap snapshots by name - */ -var ObjectToBeRetainedByReact = /** @class */ (function () { - function ObjectToBeRetainedByReact() { - } - return ObjectToBeRetainedByReact; -}()); -function objectToBeRetainedByReactFactory() { - return new ObjectToBeRetainedByReact(); -} -function useObserver(fn, baseComponentName) { - if (baseComponentName === void 0) { baseComponentName = "observed"; } - if ((0,_staticRendering__WEBPACK_IMPORTED_MODULE_3__.isUsingStaticRendering)()) { - return fn(); - } - var _a = __read(react__WEBPACK_IMPORTED_MODULE_0___default().useState(objectToBeRetainedByReactFactory), 1), objectRetainedByReact = _a[0]; - // Force update, see #2982 - var _b = __read(react__WEBPACK_IMPORTED_MODULE_0___default().useState(), 2), setState = _b[1]; - var forceUpdate = function () { return setState([]); }; - // StrictMode/ConcurrentMode/Suspense may mean that our component is - // rendered and abandoned multiple times, so we need to track leaked - // Reactions. - var admRef = react__WEBPACK_IMPORTED_MODULE_0___default().useRef(null); - if (!admRef.current) { - // First render - admRef.current = { - reaction: null, - mounted: false, - changedBeforeMount: false - }; - } - var adm = admRef.current; - if (!adm.reaction) { - // First render or component was not committed and reaction was disposed by registry - adm.reaction = new mobx__WEBPACK_IMPORTED_MODULE_4__.Reaction(observerComponentNameFor(baseComponentName), function () { - // Observable has changed, meaning we want to re-render - // BUT if we're a component that hasn't yet got to the useEffect() - // stage, we might be a component that _started_ to render, but - // got dropped, and we don't want to make state changes then. - // (It triggers warnings in StrictMode, for a start.) - if (adm.mounted) { - // We have reached useEffect(), so we're mounted, and can trigger an update - forceUpdate(); - } - else { - // We haven't yet reached useEffect(), so we'll need to trigger a re-render - // when (and if) useEffect() arrives. - adm.changedBeforeMount = true; - } - }); - _utils_observerFinalizationRegistry__WEBPACK_IMPORTED_MODULE_2__.observerFinalizationRegistry.register(objectRetainedByReact, adm, adm); - } - react__WEBPACK_IMPORTED_MODULE_0___default().useDebugValue(adm.reaction, _utils_printDebugValue__WEBPACK_IMPORTED_MODULE_1__.printDebugValue); - react__WEBPACK_IMPORTED_MODULE_0___default().useEffect(function () { - _utils_observerFinalizationRegistry__WEBPACK_IMPORTED_MODULE_2__.observerFinalizationRegistry.unregister(adm); - adm.mounted = true; - if (adm.reaction) { - if (adm.changedBeforeMount) { - // Got a change before mount, force an update - adm.changedBeforeMount = false; - forceUpdate(); - } - } - else { - // The reaction we set up in our render has been disposed. - // This can be due to bad timings of renderings, e.g. our - // component was paused for a _very_ long time, and our - // reaction got cleaned up - // Re-create the reaction - adm.reaction = new mobx__WEBPACK_IMPORTED_MODULE_4__.Reaction(observerComponentNameFor(baseComponentName), function () { - // We've definitely already been mounted at this point - forceUpdate(); - }); - forceUpdate(); - } - return function () { - adm.reaction.dispose(); - adm.reaction = null; - adm.mounted = false; - adm.changedBeforeMount = false; - }; - }, []); - // render the original component, but have the - // reaction track the observables, so that rendering - // can be invalidated (see above) once a dependency changes - var rendering; - var exception; - adm.reaction.track(function () { - try { - rendering = fn(); - } - catch (e) { - exception = e; - } - }); - if (exception) { - throw exception; // re-throw any exceptions caught during rendering - } - return rendering; -} -//# sourceMappingURL=useObserver.js.map - -/***/ }), - -/***/ "../stable-diffusion-webui/extensions/Auto-Photoshop-StableDiffusion-Plugin/node_modules/mobx-react-lite/es/utils/UniversalFinalizationRegistry.js": -/*!*********************************************************************************************************************************************************!*\ - !*** ../stable-diffusion-webui/extensions/Auto-Photoshop-StableDiffusion-Plugin/node_modules/mobx-react-lite/es/utils/UniversalFinalizationRegistry.js ***! - \*********************************************************************************************************************************************************/ -/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { - -"use strict"; -__webpack_require__.r(__webpack_exports__); -/* harmony export */ __webpack_require__.d(__webpack_exports__, { -/* harmony export */ "REGISTRY_FINALIZE_AFTER": () => (/* binding */ REGISTRY_FINALIZE_AFTER), -/* harmony export */ "REGISTRY_SWEEP_INTERVAL": () => (/* binding */ REGISTRY_SWEEP_INTERVAL), -/* harmony export */ "TimerBasedFinalizationRegistry": () => (/* binding */ TimerBasedFinalizationRegistry), -/* harmony export */ "UniversalFinalizationRegistry": () => (/* binding */ UniversalFinalizationRegistry) -/* harmony export */ }); -var REGISTRY_FINALIZE_AFTER = 10000; -var REGISTRY_SWEEP_INTERVAL = 10000; -var TimerBasedFinalizationRegistry = /** @class */ (function () { - function TimerBasedFinalizationRegistry(finalize) { - var _this = this; - Object.defineProperty(this, "finalize", { - enumerable: true, - configurable: true, - writable: true, - value: finalize - }); - Object.defineProperty(this, "registrations", { - enumerable: true, - configurable: true, - writable: true, - value: new Map() - }); - Object.defineProperty(this, "sweepTimeout", { - enumerable: true, - configurable: true, - writable: true, - value: void 0 - }); - // Bound so it can be used directly as setTimeout callback. - Object.defineProperty(this, "sweep", { - enumerable: true, - configurable: true, - writable: true, - value: function (maxAge) { - if (maxAge === void 0) { maxAge = REGISTRY_FINALIZE_AFTER; } - // cancel timeout so we can force sweep anytime - clearTimeout(_this.sweepTimeout); - _this.sweepTimeout = undefined; - var now = Date.now(); - _this.registrations.forEach(function (registration, token) { - if (now - registration.registeredAt >= maxAge) { - _this.finalize(registration.value); - _this.registrations.delete(token); - } - }); - if (_this.registrations.size > 0) { - _this.scheduleSweep(); - } - } - }); - // Bound so it can be exported directly as clearTimers test utility. - Object.defineProperty(this, "finalizeAllImmediately", { - enumerable: true, - configurable: true, - writable: true, - value: function () { - _this.sweep(0); - } - }); - } - // Token is actually required with this impl - Object.defineProperty(TimerBasedFinalizationRegistry.prototype, "register", { - enumerable: false, - configurable: true, - writable: true, - value: function (target, value, token) { - this.registrations.set(token, { - value: value, - registeredAt: Date.now() - }); - this.scheduleSweep(); - } - }); - Object.defineProperty(TimerBasedFinalizationRegistry.prototype, "unregister", { - enumerable: false, - configurable: true, - writable: true, - value: function (token) { - this.registrations.delete(token); - } - }); - Object.defineProperty(TimerBasedFinalizationRegistry.prototype, "scheduleSweep", { - enumerable: false, - configurable: true, - writable: true, - value: function () { - if (this.sweepTimeout === undefined) { - this.sweepTimeout = setTimeout(this.sweep, REGISTRY_SWEEP_INTERVAL); - } - } - }); - return TimerBasedFinalizationRegistry; -}()); - -var UniversalFinalizationRegistry = typeof FinalizationRegistry !== "undefined" - ? FinalizationRegistry - : TimerBasedFinalizationRegistry; -//# sourceMappingURL=UniversalFinalizationRegistry.js.map - -/***/ }), - -/***/ "../stable-diffusion-webui/extensions/Auto-Photoshop-StableDiffusion-Plugin/node_modules/mobx-react-lite/es/utils/assertEnvironment.js": -/*!*********************************************************************************************************************************************!*\ - !*** ../stable-diffusion-webui/extensions/Auto-Photoshop-StableDiffusion-Plugin/node_modules/mobx-react-lite/es/utils/assertEnvironment.js ***! - \*********************************************************************************************************************************************/ -/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { - -"use strict"; -__webpack_require__.r(__webpack_exports__); -/* harmony import */ var mobx__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! mobx */ "../stable-diffusion-webui/extensions/Auto-Photoshop-StableDiffusion-Plugin/node_modules/mobx/dist/mobx.esm.js"); -/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! react */ "../stable-diffusion-webui/extensions/Auto-Photoshop-StableDiffusion-Plugin/node_modules/react/index.js"); -/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(react__WEBPACK_IMPORTED_MODULE_0__); - - -if (!react__WEBPACK_IMPORTED_MODULE_0__.useState) { - throw new Error("mobx-react-lite requires React with Hooks support"); -} -if (!mobx__WEBPACK_IMPORTED_MODULE_1__.makeObservable) { - throw new Error("mobx-react-lite@3 requires mobx at least version 6 to be available"); -} -//# sourceMappingURL=assertEnvironment.js.map - -/***/ }), - -/***/ "../stable-diffusion-webui/extensions/Auto-Photoshop-StableDiffusion-Plugin/node_modules/mobx-react-lite/es/utils/observerBatching.js": -/*!********************************************************************************************************************************************!*\ - !*** ../stable-diffusion-webui/extensions/Auto-Photoshop-StableDiffusion-Plugin/node_modules/mobx-react-lite/es/utils/observerBatching.js ***! - \********************************************************************************************************************************************/ -/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { - -"use strict"; -__webpack_require__.r(__webpack_exports__); -/* harmony export */ __webpack_require__.d(__webpack_exports__, { -/* harmony export */ "defaultNoopBatch": () => (/* binding */ defaultNoopBatch), -/* harmony export */ "isObserverBatched": () => (/* binding */ isObserverBatched), -/* harmony export */ "observerBatching": () => (/* binding */ observerBatching) -/* harmony export */ }); -/* harmony import */ var mobx__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! mobx */ "../stable-diffusion-webui/extensions/Auto-Photoshop-StableDiffusion-Plugin/node_modules/mobx/dist/mobx.esm.js"); - -function defaultNoopBatch(callback) { - callback(); -} -function observerBatching(reactionScheduler) { - if (!reactionScheduler) { - reactionScheduler = defaultNoopBatch; - if (true) { - console.warn("[MobX] Failed to get unstable_batched updates from react-dom / react-native"); - } - } - (0,mobx__WEBPACK_IMPORTED_MODULE_0__.configure)({ reactionScheduler: reactionScheduler }); -} -var isObserverBatched = function () { - if (true) { - console.warn("[MobX] Deprecated"); - } - return true; -}; -//# sourceMappingURL=observerBatching.js.map - -/***/ }), - -/***/ "../stable-diffusion-webui/extensions/Auto-Photoshop-StableDiffusion-Plugin/node_modules/mobx-react-lite/es/utils/observerFinalizationRegistry.js": -/*!********************************************************************************************************************************************************!*\ - !*** ../stable-diffusion-webui/extensions/Auto-Photoshop-StableDiffusion-Plugin/node_modules/mobx-react-lite/es/utils/observerFinalizationRegistry.js ***! - \********************************************************************************************************************************************************/ -/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { - -"use strict"; -__webpack_require__.r(__webpack_exports__); -/* harmony export */ __webpack_require__.d(__webpack_exports__, { -/* harmony export */ "observerFinalizationRegistry": () => (/* binding */ observerFinalizationRegistry) -/* harmony export */ }); -/* harmony import */ var _UniversalFinalizationRegistry__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./UniversalFinalizationRegistry */ "../stable-diffusion-webui/extensions/Auto-Photoshop-StableDiffusion-Plugin/node_modules/mobx-react-lite/es/utils/UniversalFinalizationRegistry.js"); - -var observerFinalizationRegistry = new _UniversalFinalizationRegistry__WEBPACK_IMPORTED_MODULE_0__.UniversalFinalizationRegistry(function (adm) { - var _a; - (_a = adm.reaction) === null || _a === void 0 ? void 0 : _a.dispose(); - adm.reaction = null; -}); -//# sourceMappingURL=observerFinalizationRegistry.js.map - -/***/ }), - -/***/ "../stable-diffusion-webui/extensions/Auto-Photoshop-StableDiffusion-Plugin/node_modules/mobx-react-lite/es/utils/printDebugValue.js": -/*!*******************************************************************************************************************************************!*\ - !*** ../stable-diffusion-webui/extensions/Auto-Photoshop-StableDiffusion-Plugin/node_modules/mobx-react-lite/es/utils/printDebugValue.js ***! - \*******************************************************************************************************************************************/ -/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { - -"use strict"; -__webpack_require__.r(__webpack_exports__); -/* harmony export */ __webpack_require__.d(__webpack_exports__, { -/* harmony export */ "printDebugValue": () => (/* binding */ printDebugValue) -/* harmony export */ }); -/* harmony import */ var mobx__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! mobx */ "../stable-diffusion-webui/extensions/Auto-Photoshop-StableDiffusion-Plugin/node_modules/mobx/dist/mobx.esm.js"); - -function printDebugValue(v) { - return (0,mobx__WEBPACK_IMPORTED_MODULE_0__.getDependencyTree)(v); -} -//# sourceMappingURL=printDebugValue.js.map - -/***/ }), - -/***/ "../stable-diffusion-webui/extensions/Auto-Photoshop-StableDiffusion-Plugin/node_modules/mobx-react-lite/es/utils/reactBatchedUpdates.js": -/*!***********************************************************************************************************************************************!*\ - !*** ../stable-diffusion-webui/extensions/Auto-Photoshop-StableDiffusion-Plugin/node_modules/mobx-react-lite/es/utils/reactBatchedUpdates.js ***! - \***********************************************************************************************************************************************/ -/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { - -"use strict"; -__webpack_require__.r(__webpack_exports__); -/* harmony export */ __webpack_require__.d(__webpack_exports__, { -/* harmony export */ "unstable_batchedUpdates": () => (/* reexport safe */ react_dom__WEBPACK_IMPORTED_MODULE_0__.unstable_batchedUpdates) -/* harmony export */ }); -/* harmony import */ var react_dom__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! react-dom */ "../stable-diffusion-webui/extensions/Auto-Photoshop-StableDiffusion-Plugin/node_modules/react-dom/index.js"); - -//# sourceMappingURL=reactBatchedUpdates.js.map - -/***/ }), - -/***/ "../stable-diffusion-webui/extensions/Auto-Photoshop-StableDiffusion-Plugin/node_modules/mobx-react-lite/es/utils/utils.js": -/*!*********************************************************************************************************************************!*\ - !*** ../stable-diffusion-webui/extensions/Auto-Photoshop-StableDiffusion-Plugin/node_modules/mobx-react-lite/es/utils/utils.js ***! - \*********************************************************************************************************************************/ -/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { - -"use strict"; -__webpack_require__.r(__webpack_exports__); -/* harmony export */ __webpack_require__.d(__webpack_exports__, { -/* harmony export */ "useDeprecated": () => (/* binding */ useDeprecated) -/* harmony export */ }); -var deprecatedMessages = []; -function useDeprecated(msg) { - if (!deprecatedMessages.includes(msg)) { - deprecatedMessages.push(msg); - console.warn(msg); - } -} -//# sourceMappingURL=utils.js.map - -/***/ }), - -/***/ "../stable-diffusion-webui/extensions/Auto-Photoshop-StableDiffusion-Plugin/node_modules/mobx-react/dist/mobxreact.esm.js": -/*!********************************************************************************************************************************!*\ - !*** ../stable-diffusion-webui/extensions/Auto-Photoshop-StableDiffusion-Plugin/node_modules/mobx-react/dist/mobxreact.esm.js ***! - \********************************************************************************************************************************/ -/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { - -"use strict"; -__webpack_require__.r(__webpack_exports__); -/* harmony export */ __webpack_require__.d(__webpack_exports__, { -/* harmony export */ "MobXProviderContext": () => (/* binding */ MobXProviderContext), -/* harmony export */ "Observer": () => (/* reexport safe */ mobx_react_lite__WEBPACK_IMPORTED_MODULE_1__.Observer), -/* harmony export */ "PropTypes": () => (/* binding */ PropTypes), -/* harmony export */ "Provider": () => (/* binding */ Provider), -/* harmony export */ "disposeOnUnmount": () => (/* binding */ disposeOnUnmount), -/* harmony export */ "enableStaticRendering": () => (/* reexport safe */ mobx_react_lite__WEBPACK_IMPORTED_MODULE_1__.enableStaticRendering), -/* harmony export */ "inject": () => (/* binding */ inject), -/* harmony export */ "isUsingStaticRendering": () => (/* reexport safe */ mobx_react_lite__WEBPACK_IMPORTED_MODULE_1__.isUsingStaticRendering), -/* harmony export */ "observer": () => (/* binding */ observer), -/* harmony export */ "observerBatching": () => (/* reexport safe */ mobx_react_lite__WEBPACK_IMPORTED_MODULE_1__.observerBatching), -/* harmony export */ "useAsObservableSource": () => (/* reexport safe */ mobx_react_lite__WEBPACK_IMPORTED_MODULE_1__.useAsObservableSource), -/* harmony export */ "useLocalObservable": () => (/* reexport safe */ mobx_react_lite__WEBPACK_IMPORTED_MODULE_1__.useLocalObservable), -/* harmony export */ "useLocalStore": () => (/* reexport safe */ mobx_react_lite__WEBPACK_IMPORTED_MODULE_1__.useLocalStore), -/* harmony export */ "useObserver": () => (/* reexport safe */ mobx_react_lite__WEBPACK_IMPORTED_MODULE_1__.useObserver), -/* harmony export */ "useStaticRendering": () => (/* reexport safe */ mobx_react_lite__WEBPACK_IMPORTED_MODULE_1__.useStaticRendering) -/* harmony export */ }); -/* harmony import */ var mobx__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! mobx */ "../stable-diffusion-webui/extensions/Auto-Photoshop-StableDiffusion-Plugin/node_modules/mobx/dist/mobx.esm.js"); -/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! react */ "../stable-diffusion-webui/extensions/Auto-Photoshop-StableDiffusion-Plugin/node_modules/react/index.js"); -/* harmony import */ var react__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/__webpack_require__.n(react__WEBPACK_IMPORTED_MODULE_0__); -/* harmony import */ var mobx_react_lite__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! mobx-react-lite */ "../stable-diffusion-webui/extensions/Auto-Photoshop-StableDiffusion-Plugin/node_modules/mobx-react-lite/es/index.js"); - - - - - -var symbolId = 0; - -function createSymbol(name) { - if (typeof Symbol === "function") { - return Symbol(name); - } - - var symbol = "__$mobx-react " + name + " (" + symbolId + ")"; - symbolId++; - return symbol; -} - -var createdSymbols = {}; -function newSymbol(name) { - if (!createdSymbols[name]) { - createdSymbols[name] = createSymbol(name); - } - - return createdSymbols[name]; -} -function shallowEqual(objA, objB) { - //From: https://github.com/facebook/fbjs/blob/c69904a511b900266935168223063dd8772dfc40/packages/fbjs/src/core/shallowEqual.js - if (is(objA, objB)) { - return true; - } - - if (typeof objA !== "object" || objA === null || typeof objB !== "object" || objB === null) { - return false; - } - - var keysA = Object.keys(objA); - var keysB = Object.keys(objB); - - if (keysA.length !== keysB.length) { - return false; - } - - for (var i = 0; i < keysA.length; i++) { - if (!Object.hasOwnProperty.call(objB, keysA[i]) || !is(objA[keysA[i]], objB[keysA[i]])) { - return false; - } - } - - return true; -} - -function is(x, y) { - // From: https://github.com/facebook/fbjs/blob/c69904a511b900266935168223063dd8772dfc40/packages/fbjs/src/core/shallowEqual.js - if (x === y) { - return x !== 0 || 1 / x === 1 / y; - } else { - return x !== x && y !== y; - } -} // based on https://github.com/mridgway/hoist-non-react-statics/blob/master/src/index.js - - -var hoistBlackList = { - $$typeof: 1, - render: 1, - compare: 1, - type: 1, - childContextTypes: 1, - contextType: 1, - contextTypes: 1, - defaultProps: 1, - getDefaultProps: 1, - getDerivedStateFromError: 1, - getDerivedStateFromProps: 1, - mixins: 1, - displayName: 1, - propTypes: 1 -}; -function copyStaticProperties(base, target) { - var protoProps = Object.getOwnPropertyNames(Object.getPrototypeOf(base)); - Object.getOwnPropertyNames(base).forEach(function (key) { - if (!hoistBlackList[key] && protoProps.indexOf(key) === -1) { - Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(base, key)); - } - }); -} -/** - * Helper to set `prop` to `this` as non-enumerable (hidden prop) - * @param target - * @param prop - * @param value - */ - -function setHiddenProp(target, prop, value) { - if (!Object.hasOwnProperty.call(target, prop)) { - Object.defineProperty(target, prop, { - enumerable: false, - configurable: true, - writable: true, - value: value - }); - } else { - target[prop] = value; - } -} -/** - * Utilities for patching componentWillUnmount, to make sure @disposeOnUnmount works correctly icm with user defined hooks - * and the handler provided by mobx-react - */ - -var mobxMixins = /*#__PURE__*/newSymbol("patchMixins"); -var mobxPatchedDefinition = /*#__PURE__*/newSymbol("patchedDefinition"); - -function getMixins(target, methodName) { - var mixins = target[mobxMixins] = target[mobxMixins] || {}; - var methodMixins = mixins[methodName] = mixins[methodName] || {}; - methodMixins.locks = methodMixins.locks || 0; - methodMixins.methods = methodMixins.methods || []; - return methodMixins; -} - -function wrapper(realMethod, mixins) { - var _this = this; - - for (var _len = arguments.length, args = new Array(_len > 2 ? _len - 2 : 0), _key = 2; _key < _len; _key++) { - args[_key - 2] = arguments[_key]; - } - - // locks are used to ensure that mixins are invoked only once per invocation, even on recursive calls - mixins.locks++; - - try { - var retVal; - - if (realMethod !== undefined && realMethod !== null) { - retVal = realMethod.apply(this, args); - } - - return retVal; - } finally { - mixins.locks--; - - if (mixins.locks === 0) { - mixins.methods.forEach(function (mx) { - mx.apply(_this, args); - }); - } - } -} - -function wrapFunction(realMethod, mixins) { - var fn = function fn() { - for (var _len2 = arguments.length, args = new Array(_len2), _key2 = 0; _key2 < _len2; _key2++) { - args[_key2] = arguments[_key2]; - } - - wrapper.call.apply(wrapper, [this, realMethod, mixins].concat(args)); - }; - - return fn; -} - -function patch(target, methodName, mixinMethod) { - var mixins = getMixins(target, methodName); - - if (mixins.methods.indexOf(mixinMethod) < 0) { - mixins.methods.push(mixinMethod); - } - - var oldDefinition = Object.getOwnPropertyDescriptor(target, methodName); - - if (oldDefinition && oldDefinition[mobxPatchedDefinition]) { - // already patched definition, do not repatch - return; - } - - var originalMethod = target[methodName]; - var newDefinition = createDefinition(target, methodName, oldDefinition ? oldDefinition.enumerable : undefined, mixins, originalMethod); - Object.defineProperty(target, methodName, newDefinition); -} - -function createDefinition(target, methodName, enumerable, mixins, originalMethod) { - var _ref; - - var wrappedFunc = wrapFunction(originalMethod, mixins); - return _ref = {}, _ref[mobxPatchedDefinition] = true, _ref.get = function get() { - return wrappedFunc; - }, _ref.set = function set(value) { - if (this === target) { - wrappedFunc = wrapFunction(value, mixins); - } else { - // when it is an instance of the prototype/a child prototype patch that particular case again separately - // since we need to store separate values depending on wether it is the actual instance, the prototype, etc - // e.g. the method for super might not be the same as the method for the prototype which might be not the same - // as the method for the instance - var newDefinition = createDefinition(this, methodName, enumerable, mixins, value); - Object.defineProperty(this, methodName, newDefinition); - } - }, _ref.configurable = true, _ref.enumerable = enumerable, _ref; -} - -var mobxAdminProperty = mobx__WEBPACK_IMPORTED_MODULE_2__.$mobx || "$mobx"; // BC - -var mobxObserverProperty = /*#__PURE__*/newSymbol("isMobXReactObserver"); -var mobxIsUnmounted = /*#__PURE__*/newSymbol("isUnmounted"); -var skipRenderKey = /*#__PURE__*/newSymbol("skipRender"); -var isForcingUpdateKey = /*#__PURE__*/newSymbol("isForcingUpdate"); -function makeClassComponentObserver(componentClass) { - var target = componentClass.prototype; - - if (componentClass[mobxObserverProperty]) { - var displayName = getDisplayName(target); - console.warn("The provided component class (" + displayName + ")\n has already been declared as an observer component."); - } else { - componentClass[mobxObserverProperty] = true; - } - - if (target.componentWillReact) { - throw new Error("The componentWillReact life-cycle event is no longer supported"); - } - - if (componentClass["__proto__"] !== react__WEBPACK_IMPORTED_MODULE_0__.PureComponent) { - if (!target.shouldComponentUpdate) { - target.shouldComponentUpdate = observerSCU; - } else if (target.shouldComponentUpdate !== observerSCU) { - // n.b. unequal check, instead of existence check, as @observer might be on superclass as well - throw new Error("It is not allowed to use shouldComponentUpdate in observer based components."); - } - } // this.props and this.state are made observable, just to make sure @computed fields that - // are defined inside the component, and which rely on state or props, re-compute if state or props change - // (otherwise the computed wouldn't update and become stale on props change, since props are not observable) - // However, this solution is not without it's own problems: https://github.com/mobxjs/mobx-react/issues?utf8=%E2%9C%93&q=is%3Aissue+label%3Aobservable-props-or-not+ - - - makeObservableProp(target, "props"); - makeObservableProp(target, "state"); - - if (componentClass.contextType) { - makeObservableProp(target, "context"); - } - - var originalRender = target.render; - - if (typeof originalRender !== "function") { - var _displayName = getDisplayName(target); - - throw new Error("[mobx-react] class component (" + _displayName + ") is missing `render` method." + "\n`observer` requires `render` being a function defined on prototype." + "\n`render = () => {}` or `render = function() {}` is not supported."); - } - - target.render = function () { - this.render = (0,mobx_react_lite__WEBPACK_IMPORTED_MODULE_1__.isUsingStaticRendering)() ? originalRender : createReactiveRender.call(this, originalRender); - return this.render(); - }; - - patch(target, "componentDidMount", function () { - this[mobxIsUnmounted] = false; - - if (!this.render[mobxAdminProperty]) { - // Reaction is re-created automatically during render, but a component can re-mount and skip render #3395. - // To re-create the reaction and re-subscribe to relevant observables we have to force an update. - react__WEBPACK_IMPORTED_MODULE_0__.Component.prototype.forceUpdate.call(this); - } - }); - patch(target, "componentWillUnmount", function () { - if ((0,mobx_react_lite__WEBPACK_IMPORTED_MODULE_1__.isUsingStaticRendering)()) { - return; - } - - var reaction = this.render[mobxAdminProperty]; - - if (reaction) { - reaction.dispose(); // Forces reaction to be re-created on next render - - this.render[mobxAdminProperty] = null; - } else { - // Render may have been hot-swapped and/or overridden by a subclass. - var _displayName2 = getDisplayName(this); - - console.warn("The reactive render of an observer class component (" + _displayName2 + ")\n was overridden after MobX attached. This may result in a memory leak if the\n overridden reactive render was not properly disposed."); - } - - this[mobxIsUnmounted] = true; - }); - return componentClass; -} // Generates a friendly name for debugging - -function getDisplayName(comp) { - return comp.displayName || comp.name || comp.constructor && (comp.constructor.displayName || comp.constructor.name) || ""; -} - -function createReactiveRender(originalRender) { - var _this = this; - - /** - * If props are shallowly modified, react will render anyway, - * so atom.reportChanged() should not result in yet another re-render - */ - setHiddenProp(this, skipRenderKey, false); - /** - * forceUpdate will re-assign this.props. We don't want that to cause a loop, - * so detect these changes - */ - - setHiddenProp(this, isForcingUpdateKey, false); - var initialName = getDisplayName(this); - var boundOriginalRender = originalRender.bind(this); - var isRenderingPending = false; - - var createReaction = function createReaction() { - var reaction = new mobx__WEBPACK_IMPORTED_MODULE_2__.Reaction(initialName + ".render()", function () { - if (!isRenderingPending) { - // N.B. Getting here *before mounting* means that a component constructor has side effects (see the relevant test in misc.test.tsx) - // This unidiomatic React usage but React will correctly warn about this so we continue as usual - // See #85 / Pull #44 - isRenderingPending = true; - - if (_this[mobxIsUnmounted] !== true) { - var hasError = true; - - try { - setHiddenProp(_this, isForcingUpdateKey, true); - - if (!_this[skipRenderKey]) { - react__WEBPACK_IMPORTED_MODULE_0__.Component.prototype.forceUpdate.call(_this); - } - - hasError = false; - } finally { - setHiddenProp(_this, isForcingUpdateKey, false); - - if (hasError) { - reaction.dispose(); // Forces reaction to be re-created on next render - - _this.render[mobxAdminProperty] = null; - } - } - } - } - }); - reaction["reactComponent"] = _this; - return reaction; - }; - - function reactiveRender() { - var _reactiveRender$mobxA; - - isRenderingPending = false; // Create reaction lazily to support re-mounting #3395 - - var reaction = (_reactiveRender$mobxA = reactiveRender[mobxAdminProperty]) != null ? _reactiveRender$mobxA : reactiveRender[mobxAdminProperty] = createReaction(); - var exception = undefined; - var rendering = undefined; - reaction.track(function () { - try { - // TODO@major - // Optimization: replace with _allowStateChangesStart/End (not available in mobx@6.0.0) - rendering = (0,mobx__WEBPACK_IMPORTED_MODULE_2__._allowStateChanges)(false, boundOriginalRender); - } catch (e) { - exception = e; - } - }); - - if (exception) { - throw exception; - } - - return rendering; - } - - return reactiveRender; -} - -function observerSCU(nextProps, nextState) { - if ((0,mobx_react_lite__WEBPACK_IMPORTED_MODULE_1__.isUsingStaticRendering)()) { - console.warn("[mobx-react] It seems that a re-rendering of a React component is triggered while in static (server-side) mode. Please make sure components are rendered only once server-side."); - } // update on any state changes (as is the default) - - - if (this.state !== nextState) { - return true; - } // update if props are shallowly not equal, inspired by PureRenderMixin - // we could return just 'false' here, and avoid the `skipRender` checks etc - // however, it is nicer if lifecycle events are triggered like usually, - // so we return true here if props are shallowly modified. - - - return !shallowEqual(this.props, nextProps); -} - -function makeObservableProp(target, propName) { - var valueHolderKey = newSymbol("reactProp_" + propName + "_valueHolder"); - var atomHolderKey = newSymbol("reactProp_" + propName + "_atomHolder"); - - function getAtom() { - if (!this[atomHolderKey]) { - setHiddenProp(this, atomHolderKey, (0,mobx__WEBPACK_IMPORTED_MODULE_2__.createAtom)("reactive " + propName)); - } - - return this[atomHolderKey]; - } - - Object.defineProperty(target, propName, { - configurable: true, - enumerable: true, - get: function get() { - var prevReadState = false; // Why this check? BC? - // @ts-expect-error - - if (mobx__WEBPACK_IMPORTED_MODULE_2__._allowStateReadsStart && mobx__WEBPACK_IMPORTED_MODULE_2__._allowStateReadsEnd) { - prevReadState = (0,mobx__WEBPACK_IMPORTED_MODULE_2__._allowStateReadsStart)(true); - } - - getAtom.call(this).reportObserved(); // Why this check? BC? - // @ts-expect-error - - if (mobx__WEBPACK_IMPORTED_MODULE_2__._allowStateReadsStart && mobx__WEBPACK_IMPORTED_MODULE_2__._allowStateReadsEnd) { - (0,mobx__WEBPACK_IMPORTED_MODULE_2__._allowStateReadsEnd)(prevReadState); - } - - return this[valueHolderKey]; - }, - set: function set(v) { - if (!this[isForcingUpdateKey] && !shallowEqual(this[valueHolderKey], v)) { - setHiddenProp(this, valueHolderKey, v); - setHiddenProp(this, skipRenderKey, true); - getAtom.call(this).reportChanged(); - setHiddenProp(this, skipRenderKey, false); - } else { - setHiddenProp(this, valueHolderKey, v); - } - } - }); -} - -/** - * Observer function / decorator - */ - -function observer(component) { - if (component["isMobxInjector"] === true) { - console.warn("Mobx observer: You are trying to use `observer` on a component that already has `inject`. Please apply `observer` before applying `inject`"); - } - - if (Object.prototype.isPrototypeOf.call(react__WEBPACK_IMPORTED_MODULE_0__.Component, component) || Object.prototype.isPrototypeOf.call(react__WEBPACK_IMPORTED_MODULE_0__.PureComponent, component)) { - // Class component - return makeClassComponentObserver(component); - } else { - // Function component - return (0,mobx_react_lite__WEBPACK_IMPORTED_MODULE_1__.observer)(component); - } -} - -function _extends() { - _extends = Object.assign || function (target) { - for (var i = 1; i < arguments.length; i++) { - var source = arguments[i]; - - for (var key in source) { - if (Object.prototype.hasOwnProperty.call(source, key)) { - target[key] = source[key]; - } - } - } - - return target; - }; - - return _extends.apply(this, arguments); -} - -function _objectWithoutPropertiesLoose(source, excluded) { - if (source == null) return {}; - var target = {}; - var sourceKeys = Object.keys(source); - var key, i; - - for (i = 0; i < sourceKeys.length; i++) { - key = sourceKeys[i]; - if (excluded.indexOf(key) >= 0) continue; - target[key] = source[key]; - } - - return target; -} - -var _excluded = ["children"]; -var MobXProviderContext = /*#__PURE__*/react__WEBPACK_IMPORTED_MODULE_0___default().createContext({}); -function Provider(props) { - var children = props.children, - stores = _objectWithoutPropertiesLoose(props, _excluded); - - var parentValue = react__WEBPACK_IMPORTED_MODULE_0___default().useContext(MobXProviderContext); - var mutableProviderRef = react__WEBPACK_IMPORTED_MODULE_0___default().useRef(_extends({}, parentValue, stores)); - var value = mutableProviderRef.current; - - if (true) { - var newValue = _extends({}, value, stores); // spread in previous state for the context based stores - - - if (!shallowEqual(value, newValue)) { - throw new Error("MobX Provider: The set of provided stores has changed. See: https://github.com/mobxjs/mobx-react#the-set-of-provided-stores-has-changed-error."); - } - } - - return react__WEBPACK_IMPORTED_MODULE_0___default().createElement(MobXProviderContext.Provider, { - value: value - }, children); -} -Provider.displayName = "MobXProvider"; - -/** - * Store Injection - */ - -function createStoreInjector(grabStoresFn, component, injectNames, makeReactive) { - // Support forward refs - var Injector = react__WEBPACK_IMPORTED_MODULE_0___default().forwardRef(function (props, ref) { - var newProps = _extends({}, props); - - var context = react__WEBPACK_IMPORTED_MODULE_0___default().useContext(MobXProviderContext); - Object.assign(newProps, grabStoresFn(context || {}, newProps) || {}); - - if (ref) { - newProps.ref = ref; - } - - return react__WEBPACK_IMPORTED_MODULE_0___default().createElement(component, newProps); - }); - if (makeReactive) Injector = observer(Injector); - Injector["isMobxInjector"] = true; // assigned late to suppress observer warning - // Static fields from component should be visible on the generated Injector - - copyStaticProperties(component, Injector); - Injector["wrappedComponent"] = component; - Injector.displayName = getInjectName(component, injectNames); - return Injector; -} - -function getInjectName(component, injectNames) { - var displayName; - var componentName = component.displayName || component.name || component.constructor && component.constructor.name || "Component"; - if (injectNames) displayName = "inject-with-" + injectNames + "(" + componentName + ")";else displayName = "inject(" + componentName + ")"; - return displayName; -} - -function grabStoresByName(storeNames) { - return function (baseStores, nextProps) { - storeNames.forEach(function (storeName) { - if (storeName in nextProps // prefer props over stores - ) return; - if (!(storeName in baseStores)) throw new Error("MobX injector: Store '" + storeName + "' is not available! Make sure it is provided by some Provider"); - nextProps[storeName] = baseStores[storeName]; - }); - return nextProps; - }; -} -/** - * higher order component that injects stores to a child. - * takes either a varargs list of strings, which are stores read from the context, - * or a function that manually maps the available stores from the context to props: - * storesToProps(mobxStores, props, context) => newProps - */ - - -function inject() { - for (var _len = arguments.length, storeNames = new Array(_len), _key = 0; _key < _len; _key++) { - storeNames[_key] = arguments[_key]; - } - - if (typeof arguments[0] === "function") { - var grabStoresFn = arguments[0]; - return function (componentClass) { - return createStoreInjector(grabStoresFn, componentClass, grabStoresFn.name, true); - }; - } else { - return function (componentClass) { - return createStoreInjector(grabStoresByName(storeNames), componentClass, storeNames.join("-"), false); - }; - } -} - -var protoStoreKey = /*#__PURE__*/newSymbol("disposeOnUnmountProto"); -var instStoreKey = /*#__PURE__*/newSymbol("disposeOnUnmountInst"); - -function runDisposersOnWillUnmount() { - var _this = this; - [].concat(this[protoStoreKey] || [], this[instStoreKey] || []).forEach(function (propKeyOrFunction) { - var prop = typeof propKeyOrFunction === "string" ? _this[propKeyOrFunction] : propKeyOrFunction; - - if (prop !== undefined && prop !== null) { - if (Array.isArray(prop)) prop.map(function (f) { - return f(); - });else prop(); - } - }); -} - -function disposeOnUnmount(target, propertyKeyOrFunction) { - if (Array.isArray(propertyKeyOrFunction)) { - return propertyKeyOrFunction.map(function (fn) { - return disposeOnUnmount(target, fn); - }); - } - - var c = Object.getPrototypeOf(target).constructor; - var c2 = Object.getPrototypeOf(target.constructor); // Special case for react-hot-loader - - var c3 = Object.getPrototypeOf(Object.getPrototypeOf(target)); - - if (!(c === (react__WEBPACK_IMPORTED_MODULE_0___default().Component) || c === (react__WEBPACK_IMPORTED_MODULE_0___default().PureComponent) || c2 === (react__WEBPACK_IMPORTED_MODULE_0___default().Component) || c2 === (react__WEBPACK_IMPORTED_MODULE_0___default().PureComponent) || c3 === (react__WEBPACK_IMPORTED_MODULE_0___default().Component) || c3 === (react__WEBPACK_IMPORTED_MODULE_0___default().PureComponent))) { - throw new Error("[mobx-react] disposeOnUnmount only supports direct subclasses of React.Component or React.PureComponent."); - } - - if (typeof propertyKeyOrFunction !== "string" && typeof propertyKeyOrFunction !== "function" && !Array.isArray(propertyKeyOrFunction)) { - throw new Error("[mobx-react] disposeOnUnmount only works if the parameter is either a property key or a function."); - } // decorator's target is the prototype, so it doesn't have any instance properties like props - - - var isDecorator = typeof propertyKeyOrFunction === "string"; // add property key / function we want run (disposed) to the store - - var componentWasAlreadyModified = !!target[protoStoreKey] || !!target[instStoreKey]; - var store = isDecorator ? // decorators are added to the prototype store - target[protoStoreKey] || (target[protoStoreKey] = []) : // functions are added to the instance store - target[instStoreKey] || (target[instStoreKey] = []); - store.push(propertyKeyOrFunction); // tweak the component class componentWillUnmount if not done already - - if (!componentWasAlreadyModified) { - patch(target, "componentWillUnmount", runDisposersOnWillUnmount); - } // return the disposer as is if invoked as a non decorator - - - if (typeof propertyKeyOrFunction !== "string") { - return propertyKeyOrFunction; - } -} - -function createChainableTypeChecker(validator) { - function checkType(isRequired, props, propName, componentName, location, propFullName) { - for (var _len = arguments.length, rest = new Array(_len > 6 ? _len - 6 : 0), _key = 6; _key < _len; _key++) { - rest[_key - 6] = arguments[_key]; - } - - return (0,mobx__WEBPACK_IMPORTED_MODULE_2__.untracked)(function () { - componentName = componentName || "<>"; - propFullName = propFullName || propName; - - if (props[propName] == null) { - if (isRequired) { - var actual = props[propName] === null ? "null" : "undefined"; - return new Error("The " + location + " `" + propFullName + "` is marked as required " + "in `" + componentName + "`, but its value is `" + actual + "`."); - } - - return null; - } else { - // @ts-ignore rest arg is necessary for some React internals - fails tests otherwise - return validator.apply(void 0, [props, propName, componentName, location, propFullName].concat(rest)); - } - }); - } - - var chainedCheckType = checkType.bind(null, false); // Add isRequired to satisfy Requirable - - chainedCheckType.isRequired = checkType.bind(null, true); - return chainedCheckType; -} // Copied from React.PropTypes - - -function isSymbol(propType, propValue) { - // Native Symbol. - if (propType === "symbol") { - return true; - } // 19.4.3.5 Symbol.prototype[@@toStringTag] === 'Symbol' - - - if (propValue["@@toStringTag"] === "Symbol") { - return true; - } // Fallback for non-spec compliant Symbols which are polyfilled. - - - if (typeof Symbol === "function" && propValue instanceof Symbol) { - return true; - } - - return false; -} // Copied from React.PropTypes - - -function getPropType(propValue) { - var propType = typeof propValue; - - if (Array.isArray(propValue)) { - return "array"; - } - - if (propValue instanceof RegExp) { - // Old webkits (at least until Android 4.0) return 'function' rather than - // 'object' for typeof a RegExp. We'll normalize this here so that /bla/ - // passes PropTypes.object. - return "object"; - } - - if (isSymbol(propType, propValue)) { - return "symbol"; - } - - return propType; -} // This handles more types than `getPropType`. Only used for error messages. -// Copied from React.PropTypes - - -function getPreciseType(propValue) { - var propType = getPropType(propValue); - - if (propType === "object") { - if (propValue instanceof Date) { - return "date"; - } else if (propValue instanceof RegExp) { - return "regexp"; - } - } - - return propType; -} - -function createObservableTypeCheckerCreator(allowNativeType, mobxType) { - return createChainableTypeChecker(function (props, propName, componentName, location, propFullName) { - return (0,mobx__WEBPACK_IMPORTED_MODULE_2__.untracked)(function () { - if (allowNativeType) { - if (getPropType(props[propName]) === mobxType.toLowerCase()) return null; - } - - var mobxChecker; - - switch (mobxType) { - case "Array": - mobxChecker = mobx__WEBPACK_IMPORTED_MODULE_2__.isObservableArray; - break; - - case "Object": - mobxChecker = mobx__WEBPACK_IMPORTED_MODULE_2__.isObservableObject; - break; - - case "Map": - mobxChecker = mobx__WEBPACK_IMPORTED_MODULE_2__.isObservableMap; - break; - - default: - throw new Error("Unexpected mobxType: " + mobxType); - } - - var propValue = props[propName]; - - if (!mobxChecker(propValue)) { - var preciseType = getPreciseType(propValue); - var nativeTypeExpectationMessage = allowNativeType ? " or javascript `" + mobxType.toLowerCase() + "`" : ""; - return new Error("Invalid prop `" + propFullName + "` of type `" + preciseType + "` supplied to" + " `" + componentName + "`, expected `mobx.Observable" + mobxType + "`" + nativeTypeExpectationMessage + "."); - } - - return null; - }); - }); -} - -function createObservableArrayOfTypeChecker(allowNativeType, typeChecker) { - return createChainableTypeChecker(function (props, propName, componentName, location, propFullName) { - for (var _len2 = arguments.length, rest = new Array(_len2 > 5 ? _len2 - 5 : 0), _key2 = 5; _key2 < _len2; _key2++) { - rest[_key2 - 5] = arguments[_key2]; - } - - return (0,mobx__WEBPACK_IMPORTED_MODULE_2__.untracked)(function () { - if (typeof typeChecker !== "function") { - return new Error("Property `" + propFullName + "` of component `" + componentName + "` has " + "invalid PropType notation."); - } else { - var error = createObservableTypeCheckerCreator(allowNativeType, "Array")(props, propName, componentName, location, propFullName); - if (error instanceof Error) return error; - var propValue = props[propName]; - - for (var i = 0; i < propValue.length; i++) { - error = typeChecker.apply(void 0, [propValue, i, componentName, location, propFullName + "[" + i + "]"].concat(rest)); - if (error instanceof Error) return error; - } - - return null; - } - }); - }); -} - -var observableArray = /*#__PURE__*/createObservableTypeCheckerCreator(false, "Array"); -var observableArrayOf = /*#__PURE__*/createObservableArrayOfTypeChecker.bind(null, false); -var observableMap = /*#__PURE__*/createObservableTypeCheckerCreator(false, "Map"); -var observableObject = /*#__PURE__*/createObservableTypeCheckerCreator(false, "Object"); -var arrayOrObservableArray = /*#__PURE__*/createObservableTypeCheckerCreator(true, "Array"); -var arrayOrObservableArrayOf = /*#__PURE__*/createObservableArrayOfTypeChecker.bind(null, true); -var objectOrObservableObject = /*#__PURE__*/createObservableTypeCheckerCreator(true, "Object"); -var PropTypes = { - observableArray: observableArray, - observableArrayOf: observableArrayOf, - observableMap: observableMap, - observableObject: observableObject, - arrayOrObservableArray: arrayOrObservableArray, - arrayOrObservableArrayOf: arrayOrObservableArrayOf, - objectOrObservableObject: objectOrObservableObject -}; - -if (!react__WEBPACK_IMPORTED_MODULE_0__.Component) throw new Error("mobx-react requires React to be available"); -if (!mobx__WEBPACK_IMPORTED_MODULE_2__.observable) throw new Error("mobx-react requires mobx to be available"); - - -//# sourceMappingURL=mobxreact.esm.js.map - - -/***/ }), - -/***/ "../stable-diffusion-webui/extensions/Auto-Photoshop-StableDiffusion-Plugin/node_modules/mobx/dist/mobx.esm.js": -/*!*********************************************************************************************************************!*\ - !*** ../stable-diffusion-webui/extensions/Auto-Photoshop-StableDiffusion-Plugin/node_modules/mobx/dist/mobx.esm.js ***! - \*********************************************************************************************************************/ -/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { - -"use strict"; -__webpack_require__.r(__webpack_exports__); -/* harmony export */ __webpack_require__.d(__webpack_exports__, { -/* harmony export */ "$mobx": () => (/* binding */ $mobx), -/* harmony export */ "FlowCancellationError": () => (/* binding */ FlowCancellationError), -/* harmony export */ "ObservableMap": () => (/* binding */ ObservableMap), -/* harmony export */ "ObservableSet": () => (/* binding */ ObservableSet), -/* harmony export */ "Reaction": () => (/* binding */ Reaction), -/* harmony export */ "_allowStateChanges": () => (/* binding */ allowStateChanges), -/* harmony export */ "_allowStateChangesInsideComputed": () => (/* binding */ runInAction), -/* harmony export */ "_allowStateReadsEnd": () => (/* binding */ allowStateReadsEnd), -/* harmony export */ "_allowStateReadsStart": () => (/* binding */ allowStateReadsStart), -/* harmony export */ "_autoAction": () => (/* binding */ autoAction), -/* harmony export */ "_endAction": () => (/* binding */ _endAction), -/* harmony export */ "_getAdministration": () => (/* binding */ getAdministration), -/* harmony export */ "_getGlobalState": () => (/* binding */ getGlobalState), -/* harmony export */ "_interceptReads": () => (/* binding */ interceptReads), -/* harmony export */ "_isComputingDerivation": () => (/* binding */ isComputingDerivation), -/* harmony export */ "_resetGlobalState": () => (/* binding */ resetGlobalState), -/* harmony export */ "_startAction": () => (/* binding */ _startAction), -/* harmony export */ "action": () => (/* binding */ action), -/* harmony export */ "autorun": () => (/* binding */ autorun), -/* harmony export */ "comparer": () => (/* binding */ comparer), -/* harmony export */ "computed": () => (/* binding */ computed), -/* harmony export */ "configure": () => (/* binding */ configure), -/* harmony export */ "createAtom": () => (/* binding */ createAtom), -/* harmony export */ "defineProperty": () => (/* binding */ apiDefineProperty), -/* harmony export */ "entries": () => (/* binding */ entries), -/* harmony export */ "extendObservable": () => (/* binding */ extendObservable), -/* harmony export */ "flow": () => (/* binding */ flow), -/* harmony export */ "flowResult": () => (/* binding */ flowResult), -/* harmony export */ "get": () => (/* binding */ get), -/* harmony export */ "getAtom": () => (/* binding */ getAtom), -/* harmony export */ "getDebugName": () => (/* binding */ getDebugName), -/* harmony export */ "getDependencyTree": () => (/* binding */ getDependencyTree), -/* harmony export */ "getObserverTree": () => (/* binding */ getObserverTree), -/* harmony export */ "has": () => (/* binding */ has), -/* harmony export */ "intercept": () => (/* binding */ intercept), -/* harmony export */ "isAction": () => (/* binding */ isAction), -/* harmony export */ "isBoxedObservable": () => (/* binding */ isObservableValue), -/* harmony export */ "isComputed": () => (/* binding */ isComputed), -/* harmony export */ "isComputedProp": () => (/* binding */ isComputedProp), -/* harmony export */ "isFlow": () => (/* binding */ isFlow), -/* harmony export */ "isFlowCancellationError": () => (/* binding */ isFlowCancellationError), -/* harmony export */ "isObservable": () => (/* binding */ isObservable), -/* harmony export */ "isObservableArray": () => (/* binding */ isObservableArray), -/* harmony export */ "isObservableMap": () => (/* binding */ isObservableMap), -/* harmony export */ "isObservableObject": () => (/* binding */ isObservableObject), -/* harmony export */ "isObservableProp": () => (/* binding */ isObservableProp), -/* harmony export */ "isObservableSet": () => (/* binding */ isObservableSet), -/* harmony export */ "keys": () => (/* binding */ keys), -/* harmony export */ "makeAutoObservable": () => (/* binding */ makeAutoObservable), -/* harmony export */ "makeObservable": () => (/* binding */ makeObservable), -/* harmony export */ "observable": () => (/* binding */ observable), -/* harmony export */ "observe": () => (/* binding */ observe), -/* harmony export */ "onBecomeObserved": () => (/* binding */ onBecomeObserved), -/* harmony export */ "onBecomeUnobserved": () => (/* binding */ onBecomeUnobserved), -/* harmony export */ "onReactionError": () => (/* binding */ onReactionError), -/* harmony export */ "override": () => (/* binding */ override), -/* harmony export */ "ownKeys": () => (/* binding */ apiOwnKeys), -/* harmony export */ "reaction": () => (/* binding */ reaction), -/* harmony export */ "remove": () => (/* binding */ remove), -/* harmony export */ "runInAction": () => (/* binding */ runInAction), -/* harmony export */ "set": () => (/* binding */ set), -/* harmony export */ "spy": () => (/* binding */ spy), -/* harmony export */ "toJS": () => (/* binding */ toJS), -/* harmony export */ "trace": () => (/* binding */ trace), -/* harmony export */ "transaction": () => (/* binding */ transaction), -/* harmony export */ "untracked": () => (/* binding */ untracked), -/* harmony export */ "values": () => (/* binding */ values), -/* harmony export */ "when": () => (/* binding */ when) -/* harmony export */ }); -var niceErrors = { - 0: "Invalid value for configuration 'enforceActions', expected 'never', 'always' or 'observed'", - 1: function _(annotationType, key) { - return "Cannot apply '" + annotationType + "' to '" + key.toString() + "': Field not found."; - }, - /* - 2(prop) { - return `invalid decorator for '${prop.toString()}'` - }, - 3(prop) { - return `Cannot decorate '${prop.toString()}': action can only be used on properties with a function value.` - }, - 4(prop) { - return `Cannot decorate '${prop.toString()}': computed can only be used on getter properties.` - }, - */ - 5: "'keys()' can only be used on observable objects, arrays, sets and maps", - 6: "'values()' can only be used on observable objects, arrays, sets and maps", - 7: "'entries()' can only be used on observable objects, arrays and maps", - 8: "'set()' can only be used on observable objects, arrays and maps", - 9: "'remove()' can only be used on observable objects, arrays and maps", - 10: "'has()' can only be used on observable objects, arrays and maps", - 11: "'get()' can only be used on observable objects, arrays and maps", - 12: "Invalid annotation", - 13: "Dynamic observable objects cannot be frozen. If you're passing observables to 3rd party component/function that calls Object.freeze, pass copy instead: toJS(observable)", - 14: "Intercept handlers should return nothing or a change object", - 15: "Observable arrays cannot be frozen. If you're passing observables to 3rd party component/function that calls Object.freeze, pass copy instead: toJS(observable)", - 16: "Modification exception: the internal structure of an observable array was changed.", - 17: function _(index, length) { - return "[mobx.array] Index out of bounds, " + index + " is larger than " + length; - }, - 18: "mobx.map requires Map polyfill for the current browser. Check babel-polyfill or core-js/es6/map.js", - 19: function _(other) { - return "Cannot initialize from classes that inherit from Map: " + other.constructor.name; - }, - 20: function _(other) { - return "Cannot initialize map from " + other; - }, - 21: function _(dataStructure) { - return "Cannot convert to map from '" + dataStructure + "'"; - }, - 22: "mobx.set requires Set polyfill for the current browser. Check babel-polyfill or core-js/es6/set.js", - 23: "It is not possible to get index atoms from arrays", - 24: function _(thing) { - return "Cannot obtain administration from " + thing; - }, - 25: function _(property, name) { - return "the entry '" + property + "' does not exist in the observable map '" + name + "'"; - }, - 26: "please specify a property", - 27: function _(property, name) { - return "no observable property '" + property.toString() + "' found on the observable object '" + name + "'"; - }, - 28: function _(thing) { - return "Cannot obtain atom from " + thing; - }, - 29: "Expecting some object", - 30: "invalid action stack. did you forget to finish an action?", - 31: "missing option for computed: get", - 32: function _(name, derivation) { - return "Cycle detected in computation " + name + ": " + derivation; - }, - 33: function _(name) { - return "The setter of computed value '" + name + "' is trying to update itself. Did you intend to update an _observable_ value, instead of the computed property?"; - }, - 34: function _(name) { - return "[ComputedValue '" + name + "'] It is not possible to assign a new value to a computed value."; - }, - 35: "There are multiple, different versions of MobX active. Make sure MobX is loaded only once or use `configure({ isolateGlobalState: true })`", - 36: "isolateGlobalState should be called before MobX is running any reactions", - 37: function _(method) { - return "[mobx] `observableArray." + method + "()` mutates the array in-place, which is not allowed inside a derivation. Use `array.slice()." + method + "()` instead"; - }, - 38: "'ownKeys()' can only be used on observable objects", - 39: "'defineProperty()' can only be used on observable objects" -}; -var errors = true ? niceErrors : 0; -function die(error) { - for (var _len = arguments.length, args = new Array(_len > 1 ? _len - 1 : 0), _key = 1; _key < _len; _key++) { - args[_key - 1] = arguments[_key]; - } - if (true) { - var e = typeof error === "string" ? error : errors[error]; - if (typeof e === "function") e = e.apply(null, args); - throw new Error("[MobX] " + e); - } - throw new Error(typeof error === "number" ? "[MobX] minified error nr: " + error + (args.length ? " " + args.map(String).join(",") : "") + ". Find the full error at: https://github.com/mobxjs/mobx/blob/main/packages/mobx/src/errors.ts" : "[MobX] " + error); -} - -var mockGlobal = {}; -function getGlobal() { - if (typeof globalThis !== "undefined") { - return globalThis; - } - if (typeof window !== "undefined") { - return window; - } - if (typeof __webpack_require__.g !== "undefined") { - return __webpack_require__.g; - } - if (typeof self !== "undefined") { - return self; - } - return mockGlobal; -} - -// We shorten anything used > 5 times -var assign = Object.assign; -var getDescriptor = Object.getOwnPropertyDescriptor; -var defineProperty = Object.defineProperty; -var objectPrototype = Object.prototype; -var EMPTY_ARRAY = []; -Object.freeze(EMPTY_ARRAY); -var EMPTY_OBJECT = {}; -Object.freeze(EMPTY_OBJECT); -var hasProxy = typeof Proxy !== "undefined"; -var plainObjectString = /*#__PURE__*/Object.toString(); -function assertProxies() { - if (!hasProxy) { - die( true ? "`Proxy` objects are not available in the current environment. Please configure MobX to enable a fallback implementation.`" : 0); - } -} -function warnAboutProxyRequirement(msg) { - if ( true && globalState.verifyProxies) { - die("MobX is currently configured to be able to run in ES5 mode, but in ES5 MobX won't be able to " + msg); - } -} -function getNextId() { - return ++globalState.mobxGuid; -} -/** - * Makes sure that the provided function is invoked at most once. - */ -function once(func) { - var invoked = false; - return function () { - if (invoked) { - return; - } - invoked = true; - return func.apply(this, arguments); - }; -} -var noop = function noop() {}; -function isFunction(fn) { - return typeof fn === "function"; -} -function isStringish(value) { - var t = typeof value; - switch (t) { - case "string": - case "symbol": - case "number": - return true; - } - return false; -} -function isObject(value) { - return value !== null && typeof value === "object"; -} -function isPlainObject(value) { - if (!isObject(value)) { - return false; - } - var proto = Object.getPrototypeOf(value); - if (proto == null) { - return true; - } - var protoConstructor = Object.hasOwnProperty.call(proto, "constructor") && proto.constructor; - return typeof protoConstructor === "function" && protoConstructor.toString() === plainObjectString; -} -// https://stackoverflow.com/a/37865170 -function isGenerator(obj) { - var constructor = obj == null ? void 0 : obj.constructor; - if (!constructor) { - return false; - } - if ("GeneratorFunction" === constructor.name || "GeneratorFunction" === constructor.displayName) { - return true; - } - return false; -} -function addHiddenProp(object, propName, value) { - defineProperty(object, propName, { - enumerable: false, - writable: true, - configurable: true, - value: value - }); -} -function addHiddenFinalProp(object, propName, value) { - defineProperty(object, propName, { - enumerable: false, - writable: false, - configurable: true, - value: value - }); -} -function createInstanceofPredicate(name, theClass) { - var propName = "isMobX" + name; - theClass.prototype[propName] = true; - return function (x) { - return isObject(x) && x[propName] === true; - }; -} -function isES6Map(thing) { - return thing instanceof Map; -} -function isES6Set(thing) { - return thing instanceof Set; -} -var hasGetOwnPropertySymbols = typeof Object.getOwnPropertySymbols !== "undefined"; -/** - * Returns the following: own enumerable keys and symbols. - */ -function getPlainObjectKeys(object) { - var keys = Object.keys(object); - // Not supported in IE, so there are not going to be symbol props anyway... - if (!hasGetOwnPropertySymbols) { - return keys; - } - var symbols = Object.getOwnPropertySymbols(object); - if (!symbols.length) { - return keys; - } - return [].concat(keys, symbols.filter(function (s) { - return objectPrototype.propertyIsEnumerable.call(object, s); - })); -} -// From Immer utils -// Returns all own keys, including non-enumerable and symbolic -var ownKeys = typeof Reflect !== "undefined" && Reflect.ownKeys ? Reflect.ownKeys : hasGetOwnPropertySymbols ? function (obj) { - return Object.getOwnPropertyNames(obj).concat(Object.getOwnPropertySymbols(obj)); -} : /* istanbul ignore next */Object.getOwnPropertyNames; -function stringifyKey(key) { - if (typeof key === "string") { - return key; - } - if (typeof key === "symbol") { - return key.toString(); - } - return new String(key).toString(); -} -function toPrimitive(value) { - return value === null ? null : typeof value === "object" ? "" + value : value; -} -function hasProp(target, prop) { - return objectPrototype.hasOwnProperty.call(target, prop); -} -// From Immer utils -var getOwnPropertyDescriptors = Object.getOwnPropertyDescriptors || function getOwnPropertyDescriptors(target) { - // Polyfill needed for Hermes and IE, see https://github.com/facebook/hermes/issues/274 - var res = {}; - // Note: without polyfill for ownKeys, symbols won't be picked up - ownKeys(target).forEach(function (key) { - res[key] = getDescriptor(target, key); - }); - return res; -}; - -function _defineProperties(target, props) { - for (var i = 0; i < props.length; i++) { - var descriptor = props[i]; - descriptor.enumerable = descriptor.enumerable || false; - descriptor.configurable = true; - if ("value" in descriptor) descriptor.writable = true; - Object.defineProperty(target, _toPropertyKey(descriptor.key), descriptor); - } -} -function _createClass(Constructor, protoProps, staticProps) { - if (protoProps) _defineProperties(Constructor.prototype, protoProps); - if (staticProps) _defineProperties(Constructor, staticProps); - Object.defineProperty(Constructor, "prototype", { - writable: false - }); - return Constructor; -} -function _extends() { - _extends = Object.assign ? Object.assign.bind() : function (target) { - for (var i = 1; i < arguments.length; i++) { - var source = arguments[i]; - for (var key in source) { - if (Object.prototype.hasOwnProperty.call(source, key)) { - target[key] = source[key]; - } - } - } - return target; - }; - return _extends.apply(this, arguments); -} -function _inheritsLoose(subClass, superClass) { - subClass.prototype = Object.create(superClass.prototype); - subClass.prototype.constructor = subClass; - _setPrototypeOf(subClass, superClass); -} -function _setPrototypeOf(o, p) { - _setPrototypeOf = Object.setPrototypeOf ? Object.setPrototypeOf.bind() : function _setPrototypeOf(o, p) { - o.__proto__ = p; - return o; - }; - return _setPrototypeOf(o, p); -} -function _assertThisInitialized(self) { - if (self === void 0) { - throw new ReferenceError("this hasn't been initialised - super() hasn't been called"); - } - return self; -} -function _unsupportedIterableToArray(o, minLen) { - if (!o) return; - if (typeof o === "string") return _arrayLikeToArray(o, minLen); - var n = Object.prototype.toString.call(o).slice(8, -1); - if (n === "Object" && o.constructor) n = o.constructor.name; - if (n === "Map" || n === "Set") return Array.from(o); - if (n === "Arguments" || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)) return _arrayLikeToArray(o, minLen); -} -function _arrayLikeToArray(arr, len) { - if (len == null || len > arr.length) len = arr.length; - for (var i = 0, arr2 = new Array(len); i < len; i++) arr2[i] = arr[i]; - return arr2; -} -function _createForOfIteratorHelperLoose(o, allowArrayLike) { - var it = typeof Symbol !== "undefined" && o[Symbol.iterator] || o["@@iterator"]; - if (it) return (it = it.call(o)).next.bind(it); - if (Array.isArray(o) || (it = _unsupportedIterableToArray(o)) || allowArrayLike && o && typeof o.length === "number") { - if (it) o = it; - var i = 0; - return function () { - if (i >= o.length) return { - done: true - }; - return { - done: false, - value: o[i++] - }; - }; - } - throw new TypeError("Invalid attempt to iterate non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method."); -} -function _toPrimitive(input, hint) { - if (typeof input !== "object" || input === null) return input; - var prim = input[Symbol.toPrimitive]; - if (prim !== undefined) { - var res = prim.call(input, hint || "default"); - if (typeof res !== "object") return res; - throw new TypeError("@@toPrimitive must return a primitive value."); - } - return (hint === "string" ? String : Number)(input); -} -function _toPropertyKey(arg) { - var key = _toPrimitive(arg, "string"); - return typeof key === "symbol" ? key : String(key); -} - -var storedAnnotationsSymbol = /*#__PURE__*/Symbol("mobx-stored-annotations"); -/** - * Creates a function that acts as - * - decorator - * - annotation object - */ -function createDecoratorAnnotation(annotation) { - function decorator(target, property) { - storeAnnotation(target, property, annotation); - } - return Object.assign(decorator, annotation); -} -/** - * Stores annotation to prototype, - * so it can be inspected later by `makeObservable` called from constructor - */ -function storeAnnotation(prototype, key, annotation) { - if (!hasProp(prototype, storedAnnotationsSymbol)) { - addHiddenProp(prototype, storedAnnotationsSymbol, _extends({}, prototype[storedAnnotationsSymbol])); - } - // @override must override something - if ( true && isOverride(annotation) && !hasProp(prototype[storedAnnotationsSymbol], key)) { - var fieldName = prototype.constructor.name + ".prototype." + key.toString(); - die("'" + fieldName + "' is decorated with 'override', " + "but no such decorated member was found on prototype."); - } - // Cannot re-decorate - assertNotDecorated(prototype, annotation, key); - // Ignore override - if (!isOverride(annotation)) { - prototype[storedAnnotationsSymbol][key] = annotation; - } -} -function assertNotDecorated(prototype, annotation, key) { - if ( true && !isOverride(annotation) && hasProp(prototype[storedAnnotationsSymbol], key)) { - var fieldName = prototype.constructor.name + ".prototype." + key.toString(); - var currentAnnotationType = prototype[storedAnnotationsSymbol][key].annotationType_; - var requestedAnnotationType = annotation.annotationType_; - die("Cannot apply '@" + requestedAnnotationType + "' to '" + fieldName + "':" + ("\nThe field is already decorated with '@" + currentAnnotationType + "'.") + "\nRe-decorating fields is not allowed." + "\nUse '@override' decorator for methods overridden by subclass."); - } -} -/** - * Collects annotations from prototypes and stores them on target (instance) - */ -function collectStoredAnnotations(target) { - if (!hasProp(target, storedAnnotationsSymbol)) { - if ( true && !target[storedAnnotationsSymbol]) { - die("No annotations were passed to makeObservable, but no decorated members have been found either"); - } - // We need a copy as we will remove annotation from the list once it's applied. - addHiddenProp(target, storedAnnotationsSymbol, _extends({}, target[storedAnnotationsSymbol])); - } - return target[storedAnnotationsSymbol]; -} - -var $mobx = /*#__PURE__*/Symbol("mobx administration"); -var Atom = /*#__PURE__*/function () { - // for effective unobserving. BaseAtom has true, for extra optimization, so its onBecomeUnobserved never gets called, because it's not needed - - /** - * Create a new atom. For debugging purposes it is recommended to give it a name. - * The onBecomeObserved and onBecomeUnobserved callbacks can be used for resource management. - */ - function Atom(name_) { - if (name_ === void 0) { - name_ = true ? "Atom@" + getNextId() : 0; - } - this.name_ = void 0; - this.isPendingUnobservation_ = false; - this.isBeingObserved_ = false; - this.observers_ = new Set(); - this.diffValue_ = 0; - this.lastAccessedBy_ = 0; - this.lowestObserverState_ = IDerivationState_.NOT_TRACKING_; - this.onBOL = void 0; - this.onBUOL = void 0; - this.name_ = name_; - } - // onBecomeObservedListeners - var _proto = Atom.prototype; - _proto.onBO = function onBO() { - if (this.onBOL) { - this.onBOL.forEach(function (listener) { - return listener(); - }); - } - }; - _proto.onBUO = function onBUO() { - if (this.onBUOL) { - this.onBUOL.forEach(function (listener) { - return listener(); - }); - } - } - /** - * Invoke this method to notify mobx that your atom has been used somehow. - * Returns true if there is currently a reactive context. - */; - _proto.reportObserved = function reportObserved$1() { - return reportObserved(this); - } - /** - * Invoke this method _after_ this method has changed to signal mobx that all its observers should invalidate. - */; - _proto.reportChanged = function reportChanged() { - startBatch(); - propagateChanged(this); - // We could update state version only at the end of batch, - // but we would still have to switch some global flag here to signal a change. - globalState.stateVersion = globalState.stateVersion < Number.MAX_SAFE_INTEGER ? globalState.stateVersion + 1 : Number.MIN_SAFE_INTEGER; - endBatch(); - }; - _proto.toString = function toString() { - return this.name_; - }; - return Atom; -}(); -var isAtom = /*#__PURE__*/createInstanceofPredicate("Atom", Atom); -function createAtom(name, onBecomeObservedHandler, onBecomeUnobservedHandler) { - if (onBecomeObservedHandler === void 0) { - onBecomeObservedHandler = noop; - } - if (onBecomeUnobservedHandler === void 0) { - onBecomeUnobservedHandler = noop; - } - var atom = new Atom(name); - // default `noop` listener will not initialize the hook Set - if (onBecomeObservedHandler !== noop) { - onBecomeObserved(atom, onBecomeObservedHandler); - } - if (onBecomeUnobservedHandler !== noop) { - onBecomeUnobserved(atom, onBecomeUnobservedHandler); - } - return atom; -} - -function identityComparer(a, b) { - return a === b; -} -function structuralComparer(a, b) { - return deepEqual(a, b); -} -function shallowComparer(a, b) { - return deepEqual(a, b, 1); -} -function defaultComparer(a, b) { - if (Object.is) { - return Object.is(a, b); - } - return a === b ? a !== 0 || 1 / a === 1 / b : a !== a && b !== b; -} -var comparer = { - identity: identityComparer, - structural: structuralComparer, - "default": defaultComparer, - shallow: shallowComparer -}; - -function deepEnhancer(v, _, name) { - // it is an observable already, done - if (isObservable(v)) { - return v; - } - // something that can be converted and mutated? - if (Array.isArray(v)) { - return observable.array(v, { - name: name - }); - } - if (isPlainObject(v)) { - return observable.object(v, undefined, { - name: name - }); - } - if (isES6Map(v)) { - return observable.map(v, { - name: name - }); - } - if (isES6Set(v)) { - return observable.set(v, { - name: name - }); - } - if (typeof v === "function" && !isAction(v) && !isFlow(v)) { - if (isGenerator(v)) { - return flow(v); - } else { - return autoAction(name, v); - } - } - return v; -} -function shallowEnhancer(v, _, name) { - if (v === undefined || v === null) { - return v; - } - if (isObservableObject(v) || isObservableArray(v) || isObservableMap(v) || isObservableSet(v)) { - return v; - } - if (Array.isArray(v)) { - return observable.array(v, { - name: name, - deep: false - }); - } - if (isPlainObject(v)) { - return observable.object(v, undefined, { - name: name, - deep: false - }); - } - if (isES6Map(v)) { - return observable.map(v, { - name: name, - deep: false - }); - } - if (isES6Set(v)) { - return observable.set(v, { - name: name, - deep: false - }); - } - if (true) { - die("The shallow modifier / decorator can only used in combination with arrays, objects, maps and sets"); - } -} -function referenceEnhancer(newValue) { - // never turn into an observable - return newValue; -} -function refStructEnhancer(v, oldValue) { - if ( true && isObservable(v)) { - die("observable.struct should not be used with observable values"); - } - if (deepEqual(v, oldValue)) { - return oldValue; - } - return v; -} - -var OVERRIDE = "override"; -var override = /*#__PURE__*/createDecoratorAnnotation({ - annotationType_: OVERRIDE, - make_: make_, - extend_: extend_ -}); -function isOverride(annotation) { - return annotation.annotationType_ === OVERRIDE; -} -function make_(adm, key) { - // Must not be plain object - if ( true && adm.isPlainObject_) { - die("Cannot apply '" + this.annotationType_ + "' to '" + adm.name_ + "." + key.toString() + "':" + ("\n'" + this.annotationType_ + "' cannot be used on plain objects.")); - } - // Must override something - if ( true && !hasProp(adm.appliedAnnotations_, key)) { - die("'" + adm.name_ + "." + key.toString() + "' is annotated with '" + this.annotationType_ + "', " + "but no such annotated member was found on prototype."); - } - return 0 /* Cancel */; -} - -function extend_(adm, key, descriptor, proxyTrap) { - die("'" + this.annotationType_ + "' can only be used with 'makeObservable'"); -} - -function createActionAnnotation(name, options) { - return { - annotationType_: name, - options_: options, - make_: make_$1, - extend_: extend_$1 - }; -} -function make_$1(adm, key, descriptor, source) { - var _this$options_; - // bound - if ((_this$options_ = this.options_) != null && _this$options_.bound) { - return this.extend_(adm, key, descriptor, false) === null ? 0 /* Cancel */ : 1 /* Break */; - } - // own - if (source === adm.target_) { - return this.extend_(adm, key, descriptor, false) === null ? 0 /* Cancel */ : 2 /* Continue */; - } - // prototype - if (isAction(descriptor.value)) { - // A prototype could have been annotated already by other constructor, - // rest of the proto chain must be annotated already - return 1 /* Break */; - } - - var actionDescriptor = createActionDescriptor(adm, this, key, descriptor, false); - defineProperty(source, key, actionDescriptor); - return 2 /* Continue */; -} - -function extend_$1(adm, key, descriptor, proxyTrap) { - var actionDescriptor = createActionDescriptor(adm, this, key, descriptor); - return adm.defineProperty_(key, actionDescriptor, proxyTrap); -} -function assertActionDescriptor(adm, _ref, key, _ref2) { - var annotationType_ = _ref.annotationType_; - var value = _ref2.value; - if ( true && !isFunction(value)) { - die("Cannot apply '" + annotationType_ + "' to '" + adm.name_ + "." + key.toString() + "':" + ("\n'" + annotationType_ + "' can only be used on properties with a function value.")); - } -} -function createActionDescriptor(adm, annotation, key, descriptor, -// provides ability to disable safeDescriptors for prototypes -safeDescriptors) { - var _annotation$options_, _annotation$options_$, _annotation$options_2, _annotation$options_$2, _annotation$options_3, _annotation$options_4, _adm$proxy_2; - if (safeDescriptors === void 0) { - safeDescriptors = globalState.safeDescriptors; - } - assertActionDescriptor(adm, annotation, key, descriptor); - var value = descriptor.value; - if ((_annotation$options_ = annotation.options_) != null && _annotation$options_.bound) { - var _adm$proxy_; - value = value.bind((_adm$proxy_ = adm.proxy_) != null ? _adm$proxy_ : adm.target_); - } - return { - value: createAction((_annotation$options_$ = (_annotation$options_2 = annotation.options_) == null ? void 0 : _annotation$options_2.name) != null ? _annotation$options_$ : key.toString(), value, (_annotation$options_$2 = (_annotation$options_3 = annotation.options_) == null ? void 0 : _annotation$options_3.autoAction) != null ? _annotation$options_$2 : false, - // https://github.com/mobxjs/mobx/discussions/3140 - (_annotation$options_4 = annotation.options_) != null && _annotation$options_4.bound ? (_adm$proxy_2 = adm.proxy_) != null ? _adm$proxy_2 : adm.target_ : undefined), - // Non-configurable for classes - // prevents accidental field redefinition in subclass - configurable: safeDescriptors ? adm.isPlainObject_ : true, - // https://github.com/mobxjs/mobx/pull/2641#issuecomment-737292058 - enumerable: false, - // Non-obsevable, therefore non-writable - // Also prevents rewriting in subclass constructor - writable: safeDescriptors ? false : true - }; -} - -function createFlowAnnotation(name, options) { - return { - annotationType_: name, - options_: options, - make_: make_$2, - extend_: extend_$2 - }; -} -function make_$2(adm, key, descriptor, source) { - var _this$options_; - // own - if (source === adm.target_) { - return this.extend_(adm, key, descriptor, false) === null ? 0 /* Cancel */ : 2 /* Continue */; - } - // prototype - // bound - must annotate protos to support super.flow() - if ((_this$options_ = this.options_) != null && _this$options_.bound && (!hasProp(adm.target_, key) || !isFlow(adm.target_[key]))) { - if (this.extend_(adm, key, descriptor, false) === null) { - return 0 /* Cancel */; - } - } - - if (isFlow(descriptor.value)) { - // A prototype could have been annotated already by other constructor, - // rest of the proto chain must be annotated already - return 1 /* Break */; - } - - var flowDescriptor = createFlowDescriptor(adm, this, key, descriptor, false, false); - defineProperty(source, key, flowDescriptor); - return 2 /* Continue */; -} - -function extend_$2(adm, key, descriptor, proxyTrap) { - var _this$options_2; - var flowDescriptor = createFlowDescriptor(adm, this, key, descriptor, (_this$options_2 = this.options_) == null ? void 0 : _this$options_2.bound); - return adm.defineProperty_(key, flowDescriptor, proxyTrap); -} -function assertFlowDescriptor(adm, _ref, key, _ref2) { - var annotationType_ = _ref.annotationType_; - var value = _ref2.value; - if ( true && !isFunction(value)) { - die("Cannot apply '" + annotationType_ + "' to '" + adm.name_ + "." + key.toString() + "':" + ("\n'" + annotationType_ + "' can only be used on properties with a generator function value.")); - } -} -function createFlowDescriptor(adm, annotation, key, descriptor, bound, -// provides ability to disable safeDescriptors for prototypes -safeDescriptors) { - if (safeDescriptors === void 0) { - safeDescriptors = globalState.safeDescriptors; - } - assertFlowDescriptor(adm, annotation, key, descriptor); - var value = descriptor.value; - // In case of flow.bound, the descriptor can be from already annotated prototype - if (!isFlow(value)) { - value = flow(value); - } - if (bound) { - var _adm$proxy_; - // We do not keep original function around, so we bind the existing flow - value = value.bind((_adm$proxy_ = adm.proxy_) != null ? _adm$proxy_ : adm.target_); - // This is normally set by `flow`, but `bind` returns new function... - value.isMobXFlow = true; - } - return { - value: value, - // Non-configurable for classes - // prevents accidental field redefinition in subclass - configurable: safeDescriptors ? adm.isPlainObject_ : true, - // https://github.com/mobxjs/mobx/pull/2641#issuecomment-737292058 - enumerable: false, - // Non-obsevable, therefore non-writable - // Also prevents rewriting in subclass constructor - writable: safeDescriptors ? false : true - }; -} - -function createComputedAnnotation(name, options) { - return { - annotationType_: name, - options_: options, - make_: make_$3, - extend_: extend_$3 - }; -} -function make_$3(adm, key, descriptor) { - return this.extend_(adm, key, descriptor, false) === null ? 0 /* Cancel */ : 1 /* Break */; -} - -function extend_$3(adm, key, descriptor, proxyTrap) { - assertComputedDescriptor(adm, this, key, descriptor); - return adm.defineComputedProperty_(key, _extends({}, this.options_, { - get: descriptor.get, - set: descriptor.set - }), proxyTrap); -} -function assertComputedDescriptor(adm, _ref, key, _ref2) { - var annotationType_ = _ref.annotationType_; - var get = _ref2.get; - if ( true && !get) { - die("Cannot apply '" + annotationType_ + "' to '" + adm.name_ + "." + key.toString() + "':" + ("\n'" + annotationType_ + "' can only be used on getter(+setter) properties.")); - } -} - -function createObservableAnnotation(name, options) { - return { - annotationType_: name, - options_: options, - make_: make_$4, - extend_: extend_$4 - }; -} -function make_$4(adm, key, descriptor) { - return this.extend_(adm, key, descriptor, false) === null ? 0 /* Cancel */ : 1 /* Break */; -} - -function extend_$4(adm, key, descriptor, proxyTrap) { - var _this$options_$enhanc, _this$options_; - assertObservableDescriptor(adm, this, key, descriptor); - return adm.defineObservableProperty_(key, descriptor.value, (_this$options_$enhanc = (_this$options_ = this.options_) == null ? void 0 : _this$options_.enhancer) != null ? _this$options_$enhanc : deepEnhancer, proxyTrap); -} -function assertObservableDescriptor(adm, _ref, key, descriptor) { - var annotationType_ = _ref.annotationType_; - if ( true && !("value" in descriptor)) { - die("Cannot apply '" + annotationType_ + "' to '" + adm.name_ + "." + key.toString() + "':" + ("\n'" + annotationType_ + "' cannot be used on getter/setter properties")); - } -} - -var AUTO = "true"; -var autoAnnotation = /*#__PURE__*/createAutoAnnotation(); -function createAutoAnnotation(options) { - return { - annotationType_: AUTO, - options_: options, - make_: make_$5, - extend_: extend_$5 - }; -} -function make_$5(adm, key, descriptor, source) { - var _this$options_3, _this$options_4; - // getter -> computed - if (descriptor.get) { - return computed.make_(adm, key, descriptor, source); - } - // lone setter -> action setter - if (descriptor.set) { - // TODO make action applicable to setter and delegate to action.make_ - var set = createAction(key.toString(), descriptor.set); - // own - if (source === adm.target_) { - return adm.defineProperty_(key, { - configurable: globalState.safeDescriptors ? adm.isPlainObject_ : true, - set: set - }) === null ? 0 /* Cancel */ : 2 /* Continue */; - } - // proto - defineProperty(source, key, { - configurable: true, - set: set - }); - return 2 /* Continue */; - } - // function on proto -> autoAction/flow - if (source !== adm.target_ && typeof descriptor.value === "function") { - var _this$options_2; - if (isGenerator(descriptor.value)) { - var _this$options_; - var flowAnnotation = (_this$options_ = this.options_) != null && _this$options_.autoBind ? flow.bound : flow; - return flowAnnotation.make_(adm, key, descriptor, source); - } - var actionAnnotation = (_this$options_2 = this.options_) != null && _this$options_2.autoBind ? autoAction.bound : autoAction; - return actionAnnotation.make_(adm, key, descriptor, source); - } - // other -> observable - // Copy props from proto as well, see test: - // "decorate should work with Object.create" - var observableAnnotation = ((_this$options_3 = this.options_) == null ? void 0 : _this$options_3.deep) === false ? observable.ref : observable; - // if function respect autoBind option - if (typeof descriptor.value === "function" && (_this$options_4 = this.options_) != null && _this$options_4.autoBind) { - var _adm$proxy_; - descriptor.value = descriptor.value.bind((_adm$proxy_ = adm.proxy_) != null ? _adm$proxy_ : adm.target_); - } - return observableAnnotation.make_(adm, key, descriptor, source); -} -function extend_$5(adm, key, descriptor, proxyTrap) { - var _this$options_5, _this$options_6; - // getter -> computed - if (descriptor.get) { - return computed.extend_(adm, key, descriptor, proxyTrap); - } - // lone setter -> action setter - if (descriptor.set) { - // TODO make action applicable to setter and delegate to action.extend_ - return adm.defineProperty_(key, { - configurable: globalState.safeDescriptors ? adm.isPlainObject_ : true, - set: createAction(key.toString(), descriptor.set) - }, proxyTrap); - } - // other -> observable - // if function respect autoBind option - if (typeof descriptor.value === "function" && (_this$options_5 = this.options_) != null && _this$options_5.autoBind) { - var _adm$proxy_2; - descriptor.value = descriptor.value.bind((_adm$proxy_2 = adm.proxy_) != null ? _adm$proxy_2 : adm.target_); - } - var observableAnnotation = ((_this$options_6 = this.options_) == null ? void 0 : _this$options_6.deep) === false ? observable.ref : observable; - return observableAnnotation.extend_(adm, key, descriptor, proxyTrap); -} - -var OBSERVABLE = "observable"; -var OBSERVABLE_REF = "observable.ref"; -var OBSERVABLE_SHALLOW = "observable.shallow"; -var OBSERVABLE_STRUCT = "observable.struct"; -// Predefined bags of create observable options, to avoid allocating temporarily option objects -// in the majority of cases -var defaultCreateObservableOptions = { - deep: true, - name: undefined, - defaultDecorator: undefined, - proxy: true -}; -Object.freeze(defaultCreateObservableOptions); -function asCreateObservableOptions(thing) { - return thing || defaultCreateObservableOptions; -} -var observableAnnotation = /*#__PURE__*/createObservableAnnotation(OBSERVABLE); -var observableRefAnnotation = /*#__PURE__*/createObservableAnnotation(OBSERVABLE_REF, { - enhancer: referenceEnhancer -}); -var observableShallowAnnotation = /*#__PURE__*/createObservableAnnotation(OBSERVABLE_SHALLOW, { - enhancer: shallowEnhancer -}); -var observableStructAnnotation = /*#__PURE__*/createObservableAnnotation(OBSERVABLE_STRUCT, { - enhancer: refStructEnhancer -}); -var observableDecoratorAnnotation = /*#__PURE__*/createDecoratorAnnotation(observableAnnotation); -function getEnhancerFromOptions(options) { - return options.deep === true ? deepEnhancer : options.deep === false ? referenceEnhancer : getEnhancerFromAnnotation(options.defaultDecorator); -} -function getAnnotationFromOptions(options) { - var _options$defaultDecor; - return options ? (_options$defaultDecor = options.defaultDecorator) != null ? _options$defaultDecor : createAutoAnnotation(options) : undefined; -} -function getEnhancerFromAnnotation(annotation) { - var _annotation$options_$, _annotation$options_; - return !annotation ? deepEnhancer : (_annotation$options_$ = (_annotation$options_ = annotation.options_) == null ? void 0 : _annotation$options_.enhancer) != null ? _annotation$options_$ : deepEnhancer; -} -/** - * Turns an object, array or function into a reactive structure. - * @param v the value which should become observable. - */ -function createObservable(v, arg2, arg3) { - // @observable someProp; - if (isStringish(arg2)) { - storeAnnotation(v, arg2, observableAnnotation); - return; - } - // already observable - ignore - if (isObservable(v)) { - return v; - } - // plain object - if (isPlainObject(v)) { - return observable.object(v, arg2, arg3); - } - // Array - if (Array.isArray(v)) { - return observable.array(v, arg2); - } - // Map - if (isES6Map(v)) { - return observable.map(v, arg2); - } - // Set - if (isES6Set(v)) { - return observable.set(v, arg2); - } - // other object - ignore - if (typeof v === "object" && v !== null) { - return v; - } - // anything else - return observable.box(v, arg2); -} -assign(createObservable, observableDecoratorAnnotation); -var observableFactories = { - box: function box(value, options) { - var o = asCreateObservableOptions(options); - return new ObservableValue(value, getEnhancerFromOptions(o), o.name, true, o.equals); - }, - array: function array(initialValues, options) { - var o = asCreateObservableOptions(options); - return (globalState.useProxies === false || o.proxy === false ? createLegacyArray : createObservableArray)(initialValues, getEnhancerFromOptions(o), o.name); - }, - map: function map(initialValues, options) { - var o = asCreateObservableOptions(options); - return new ObservableMap(initialValues, getEnhancerFromOptions(o), o.name); - }, - set: function set(initialValues, options) { - var o = asCreateObservableOptions(options); - return new ObservableSet(initialValues, getEnhancerFromOptions(o), o.name); - }, - object: function object(props, decorators, options) { - return extendObservable(globalState.useProxies === false || (options == null ? void 0 : options.proxy) === false ? asObservableObject({}, options) : asDynamicObservableObject({}, options), props, decorators); - }, - ref: /*#__PURE__*/createDecoratorAnnotation(observableRefAnnotation), - shallow: /*#__PURE__*/createDecoratorAnnotation(observableShallowAnnotation), - deep: observableDecoratorAnnotation, - struct: /*#__PURE__*/createDecoratorAnnotation(observableStructAnnotation) -}; -// eslint-disable-next-line -var observable = /*#__PURE__*/assign(createObservable, observableFactories); - -var COMPUTED = "computed"; -var COMPUTED_STRUCT = "computed.struct"; -var computedAnnotation = /*#__PURE__*/createComputedAnnotation(COMPUTED); -var computedStructAnnotation = /*#__PURE__*/createComputedAnnotation(COMPUTED_STRUCT, { - equals: comparer.structural -}); -/** - * Decorator for class properties: @computed get value() { return expr; }. - * For legacy purposes also invokable as ES5 observable created: `computed(() => expr)`; - */ -var computed = function computed(arg1, arg2) { - if (isStringish(arg2)) { - // @computed - return storeAnnotation(arg1, arg2, computedAnnotation); - } - if (isPlainObject(arg1)) { - // @computed({ options }) - return createDecoratorAnnotation(createComputedAnnotation(COMPUTED, arg1)); - } - // computed(expr, options?) - if (true) { - if (!isFunction(arg1)) { - die("First argument to `computed` should be an expression."); - } - if (isFunction(arg2)) { - die("A setter as second argument is no longer supported, use `{ set: fn }` option instead"); - } - } - var opts = isPlainObject(arg2) ? arg2 : {}; - opts.get = arg1; - opts.name || (opts.name = arg1.name || ""); /* for generated name */ - return new ComputedValue(opts); -}; -Object.assign(computed, computedAnnotation); -computed.struct = /*#__PURE__*/createDecoratorAnnotation(computedStructAnnotation); - -var _getDescriptor$config, _getDescriptor; -// we don't use globalState for these in order to avoid possible issues with multiple -// mobx versions -var currentActionId = 0; -var nextActionId = 1; -var isFunctionNameConfigurable = (_getDescriptor$config = (_getDescriptor = /*#__PURE__*/getDescriptor(function () {}, "name")) == null ? void 0 : _getDescriptor.configurable) != null ? _getDescriptor$config : false; -// we can safely recycle this object -var tmpNameDescriptor = { - value: "action", - configurable: true, - writable: false, - enumerable: false -}; -function createAction(actionName, fn, autoAction, ref) { - if (autoAction === void 0) { - autoAction = false; - } - if (true) { - if (!isFunction(fn)) { - die("`action` can only be invoked on functions"); - } - if (typeof actionName !== "string" || !actionName) { - die("actions should have valid names, got: '" + actionName + "'"); - } - } - function res() { - return executeAction(actionName, autoAction, fn, ref || this, arguments); - } - res.isMobxAction = true; - if (isFunctionNameConfigurable) { - tmpNameDescriptor.value = actionName; - defineProperty(res, "name", tmpNameDescriptor); - } - return res; -} -function executeAction(actionName, canRunAsDerivation, fn, scope, args) { - var runInfo = _startAction(actionName, canRunAsDerivation, scope, args); - try { - return fn.apply(scope, args); - } catch (err) { - runInfo.error_ = err; - throw err; - } finally { - _endAction(runInfo); - } -} -function _startAction(actionName, canRunAsDerivation, -// true for autoAction -scope, args) { - var notifySpy_ = true && isSpyEnabled() && !!actionName; - var startTime_ = 0; - if ( true && notifySpy_) { - startTime_ = Date.now(); - var flattenedArgs = args ? Array.from(args) : EMPTY_ARRAY; - spyReportStart({ - type: ACTION, - name: actionName, - object: scope, - arguments: flattenedArgs - }); - } - var prevDerivation_ = globalState.trackingDerivation; - var runAsAction = !canRunAsDerivation || !prevDerivation_; - startBatch(); - var prevAllowStateChanges_ = globalState.allowStateChanges; // by default preserve previous allow - if (runAsAction) { - untrackedStart(); - prevAllowStateChanges_ = allowStateChangesStart(true); - } - var prevAllowStateReads_ = allowStateReadsStart(true); - var runInfo = { - runAsAction_: runAsAction, - prevDerivation_: prevDerivation_, - prevAllowStateChanges_: prevAllowStateChanges_, - prevAllowStateReads_: prevAllowStateReads_, - notifySpy_: notifySpy_, - startTime_: startTime_, - actionId_: nextActionId++, - parentActionId_: currentActionId - }; - currentActionId = runInfo.actionId_; - return runInfo; -} -function _endAction(runInfo) { - if (currentActionId !== runInfo.actionId_) { - die(30); - } - currentActionId = runInfo.parentActionId_; - if (runInfo.error_ !== undefined) { - globalState.suppressReactionErrors = true; - } - allowStateChangesEnd(runInfo.prevAllowStateChanges_); - allowStateReadsEnd(runInfo.prevAllowStateReads_); - endBatch(); - if (runInfo.runAsAction_) { - untrackedEnd(runInfo.prevDerivation_); - } - if ( true && runInfo.notifySpy_) { - spyReportEnd({ - time: Date.now() - runInfo.startTime_ - }); - } - globalState.suppressReactionErrors = false; -} -function allowStateChanges(allowStateChanges, func) { - var prev = allowStateChangesStart(allowStateChanges); - try { - return func(); - } finally { - allowStateChangesEnd(prev); - } -} -function allowStateChangesStart(allowStateChanges) { - var prev = globalState.allowStateChanges; - globalState.allowStateChanges = allowStateChanges; - return prev; -} -function allowStateChangesEnd(prev) { - globalState.allowStateChanges = prev; -} - -var _Symbol$toPrimitive; -var CREATE = "create"; -_Symbol$toPrimitive = Symbol.toPrimitive; -var ObservableValue = /*#__PURE__*/function (_Atom) { - _inheritsLoose(ObservableValue, _Atom); - function ObservableValue(value, enhancer, name_, notifySpy, equals) { - var _this; - if (name_ === void 0) { - name_ = true ? "ObservableValue@" + getNextId() : 0; - } - if (notifySpy === void 0) { - notifySpy = true; - } - if (equals === void 0) { - equals = comparer["default"]; - } - _this = _Atom.call(this, name_) || this; - _this.enhancer = void 0; - _this.name_ = void 0; - _this.equals = void 0; - _this.hasUnreportedChange_ = false; - _this.interceptors_ = void 0; - _this.changeListeners_ = void 0; - _this.value_ = void 0; - _this.dehancer = void 0; - _this.enhancer = enhancer; - _this.name_ = name_; - _this.equals = equals; - _this.value_ = enhancer(value, undefined, name_); - if ( true && notifySpy && isSpyEnabled()) { - // only notify spy if this is a stand-alone observable - spyReport({ - type: CREATE, - object: _assertThisInitialized(_this), - observableKind: "value", - debugObjectName: _this.name_, - newValue: "" + _this.value_ - }); - } - return _this; - } - var _proto = ObservableValue.prototype; - _proto.dehanceValue = function dehanceValue(value) { - if (this.dehancer !== undefined) { - return this.dehancer(value); - } - return value; - }; - _proto.set = function set(newValue) { - var oldValue = this.value_; - newValue = this.prepareNewValue_(newValue); - if (newValue !== globalState.UNCHANGED) { - var notifySpy = isSpyEnabled(); - if ( true && notifySpy) { - spyReportStart({ - type: UPDATE, - object: this, - observableKind: "value", - debugObjectName: this.name_, - newValue: newValue, - oldValue: oldValue - }); - } - this.setNewValue_(newValue); - if ( true && notifySpy) { - spyReportEnd(); - } - } - }; - _proto.prepareNewValue_ = function prepareNewValue_(newValue) { - checkIfStateModificationsAreAllowed(this); - if (hasInterceptors(this)) { - var change = interceptChange(this, { - object: this, - type: UPDATE, - newValue: newValue - }); - if (!change) { - return globalState.UNCHANGED; - } - newValue = change.newValue; - } - // apply modifier - newValue = this.enhancer(newValue, this.value_, this.name_); - return this.equals(this.value_, newValue) ? globalState.UNCHANGED : newValue; - }; - _proto.setNewValue_ = function setNewValue_(newValue) { - var oldValue = this.value_; - this.value_ = newValue; - this.reportChanged(); - if (hasListeners(this)) { - notifyListeners(this, { - type: UPDATE, - object: this, - newValue: newValue, - oldValue: oldValue - }); - } - }; - _proto.get = function get() { - this.reportObserved(); - return this.dehanceValue(this.value_); - }; - _proto.intercept_ = function intercept_(handler) { - return registerInterceptor(this, handler); - }; - _proto.observe_ = function observe_(listener, fireImmediately) { - if (fireImmediately) { - listener({ - observableKind: "value", - debugObjectName: this.name_, - object: this, - type: UPDATE, - newValue: this.value_, - oldValue: undefined - }); - } - return registerListener(this, listener); - }; - _proto.raw = function raw() { - // used by MST ot get undehanced value - return this.value_; - }; - _proto.toJSON = function toJSON() { - return this.get(); - }; - _proto.toString = function toString() { - return this.name_ + "[" + this.value_ + "]"; - }; - _proto.valueOf = function valueOf() { - return toPrimitive(this.get()); - }; - _proto[_Symbol$toPrimitive] = function () { - return this.valueOf(); - }; - return ObservableValue; -}(Atom); -var isObservableValue = /*#__PURE__*/createInstanceofPredicate("ObservableValue", ObservableValue); - -var _Symbol$toPrimitive$1; -/** - * A node in the state dependency root that observes other nodes, and can be observed itself. - * - * ComputedValue will remember the result of the computation for the duration of the batch, or - * while being observed. - * - * During this time it will recompute only when one of its direct dependencies changed, - * but only when it is being accessed with `ComputedValue.get()`. - * - * Implementation description: - * 1. First time it's being accessed it will compute and remember result - * give back remembered result until 2. happens - * 2. First time any deep dependency change, propagate POSSIBLY_STALE to all observers, wait for 3. - * 3. When it's being accessed, recompute if any shallow dependency changed. - * if result changed: propagate STALE to all observers, that were POSSIBLY_STALE from the last step. - * go to step 2. either way - * - * If at any point it's outside batch and it isn't observed: reset everything and go to 1. - */ -_Symbol$toPrimitive$1 = Symbol.toPrimitive; -var ComputedValue = /*#__PURE__*/function () { - // nodes we are looking at. Our value depends on these nodes - // during tracking it's an array with new observed observers - - // to check for cycles - - // N.B: unminified as it is used by MST - - /** - * Create a new computed value based on a function expression. - * - * The `name` property is for debug purposes only. - * - * The `equals` property specifies the comparer function to use to determine if a newly produced - * value differs from the previous value. Two comparers are provided in the library; `defaultComparer` - * compares based on identity comparison (===), and `structuralComparer` deeply compares the structure. - * Structural comparison can be convenient if you always produce a new aggregated object and - * don't want to notify observers if it is structurally the same. - * This is useful for working with vectors, mouse coordinates etc. - */ - function ComputedValue(options) { - this.dependenciesState_ = IDerivationState_.NOT_TRACKING_; - this.observing_ = []; - this.newObserving_ = null; - this.isBeingObserved_ = false; - this.isPendingUnobservation_ = false; - this.observers_ = new Set(); - this.diffValue_ = 0; - this.runId_ = 0; - this.lastAccessedBy_ = 0; - this.lowestObserverState_ = IDerivationState_.UP_TO_DATE_; - this.unboundDepsCount_ = 0; - this.value_ = new CaughtException(null); - this.name_ = void 0; - this.triggeredBy_ = void 0; - this.isComputing_ = false; - this.isRunningSetter_ = false; - this.derivation = void 0; - this.setter_ = void 0; - this.isTracing_ = TraceMode.NONE; - this.scope_ = void 0; - this.equals_ = void 0; - this.requiresReaction_ = void 0; - this.keepAlive_ = void 0; - this.onBOL = void 0; - this.onBUOL = void 0; - if (!options.get) { - die(31); - } - this.derivation = options.get; - this.name_ = options.name || ( true ? "ComputedValue@" + getNextId() : 0); - if (options.set) { - this.setter_ = createAction( true ? this.name_ + "-setter" : 0, options.set); - } - this.equals_ = options.equals || (options.compareStructural || options.struct ? comparer.structural : comparer["default"]); - this.scope_ = options.context; - this.requiresReaction_ = options.requiresReaction; - this.keepAlive_ = !!options.keepAlive; - } - var _proto = ComputedValue.prototype; - _proto.onBecomeStale_ = function onBecomeStale_() { - propagateMaybeChanged(this); - }; - _proto.onBO = function onBO() { - if (this.onBOL) { - this.onBOL.forEach(function (listener) { - return listener(); - }); - } - }; - _proto.onBUO = function onBUO() { - if (this.onBUOL) { - this.onBUOL.forEach(function (listener) { - return listener(); - }); - } - } - /** - * Returns the current value of this computed value. - * Will evaluate its computation first if needed. - */; - _proto.get = function get() { - if (this.isComputing_) { - die(32, this.name_, this.derivation); - } - if (globalState.inBatch === 0 && - // !globalState.trackingDerivatpion && - this.observers_.size === 0 && !this.keepAlive_) { - if (shouldCompute(this)) { - this.warnAboutUntrackedRead_(); - startBatch(); // See perf test 'computed memoization' - this.value_ = this.computeValue_(false); - endBatch(); - } - } else { - reportObserved(this); - if (shouldCompute(this)) { - var prevTrackingContext = globalState.trackingContext; - if (this.keepAlive_ && !prevTrackingContext) { - globalState.trackingContext = this; - } - if (this.trackAndCompute()) { - propagateChangeConfirmed(this); - } - globalState.trackingContext = prevTrackingContext; - } - } - var result = this.value_; - if (isCaughtException(result)) { - throw result.cause; - } - return result; - }; - _proto.set = function set(value) { - if (this.setter_) { - if (this.isRunningSetter_) { - die(33, this.name_); - } - this.isRunningSetter_ = true; - try { - this.setter_.call(this.scope_, value); - } finally { - this.isRunningSetter_ = false; - } - } else { - die(34, this.name_); - } - }; - _proto.trackAndCompute = function trackAndCompute() { - // N.B: unminified as it is used by MST - var oldValue = this.value_; - var wasSuspended = /* see #1208 */this.dependenciesState_ === IDerivationState_.NOT_TRACKING_; - var newValue = this.computeValue_(true); - var changed = wasSuspended || isCaughtException(oldValue) || isCaughtException(newValue) || !this.equals_(oldValue, newValue); - if (changed) { - this.value_ = newValue; - if ( true && isSpyEnabled()) { - spyReport({ - observableKind: "computed", - debugObjectName: this.name_, - object: this.scope_, - type: "update", - oldValue: oldValue, - newValue: newValue - }); - } - } - return changed; - }; - _proto.computeValue_ = function computeValue_(track) { - this.isComputing_ = true; - // don't allow state changes during computation - var prev = allowStateChangesStart(false); - var res; - if (track) { - res = trackDerivedFunction(this, this.derivation, this.scope_); - } else { - if (globalState.disableErrorBoundaries === true) { - res = this.derivation.call(this.scope_); - } else { - try { - res = this.derivation.call(this.scope_); - } catch (e) { - res = new CaughtException(e); - } - } - } - allowStateChangesEnd(prev); - this.isComputing_ = false; - return res; - }; - _proto.suspend_ = function suspend_() { - if (!this.keepAlive_) { - clearObserving(this); - this.value_ = undefined; // don't hold on to computed value! - if ( true && this.isTracing_ !== TraceMode.NONE) { - console.log("[mobx.trace] Computed value '" + this.name_ + "' was suspended and it will recompute on the next access."); - } - } - }; - _proto.observe_ = function observe_(listener, fireImmediately) { - var _this = this; - var firstTime = true; - var prevValue = undefined; - return autorun(function () { - // TODO: why is this in a different place than the spyReport() function? in all other observables it's called in the same place - var newValue = _this.get(); - if (!firstTime || fireImmediately) { - var prevU = untrackedStart(); - listener({ - observableKind: "computed", - debugObjectName: _this.name_, - type: UPDATE, - object: _this, - newValue: newValue, - oldValue: prevValue - }); - untrackedEnd(prevU); - } - firstTime = false; - prevValue = newValue; - }); - }; - _proto.warnAboutUntrackedRead_ = function warnAboutUntrackedRead_() { - if (false) {} - if (this.isTracing_ !== TraceMode.NONE) { - console.log("[mobx.trace] Computed value '" + this.name_ + "' is being read outside a reactive context. Doing a full recompute."); - } - if (typeof this.requiresReaction_ === "boolean" ? this.requiresReaction_ : globalState.computedRequiresReaction) { - console.warn("[mobx] Computed value '" + this.name_ + "' is being read outside a reactive context. Doing a full recompute."); - } - }; - _proto.toString = function toString() { - return this.name_ + "[" + this.derivation.toString() + "]"; - }; - _proto.valueOf = function valueOf() { - return toPrimitive(this.get()); - }; - _proto[_Symbol$toPrimitive$1] = function () { - return this.valueOf(); - }; - return ComputedValue; -}(); -var isComputedValue = /*#__PURE__*/createInstanceofPredicate("ComputedValue", ComputedValue); - -var IDerivationState_; -(function (IDerivationState_) { - // before being run or (outside batch and not being observed) - // at this point derivation is not holding any data about dependency tree - IDerivationState_[IDerivationState_["NOT_TRACKING_"] = -1] = "NOT_TRACKING_"; - // no shallow dependency changed since last computation - // won't recalculate derivation - // this is what makes mobx fast - IDerivationState_[IDerivationState_["UP_TO_DATE_"] = 0] = "UP_TO_DATE_"; - // some deep dependency changed, but don't know if shallow dependency changed - // will require to check first if UP_TO_DATE or POSSIBLY_STALE - // currently only ComputedValue will propagate POSSIBLY_STALE - // - // having this state is second big optimization: - // don't have to recompute on every dependency change, but only when it's needed - IDerivationState_[IDerivationState_["POSSIBLY_STALE_"] = 1] = "POSSIBLY_STALE_"; - // A shallow dependency has changed since last computation and the derivation - // will need to recompute when it's needed next. - IDerivationState_[IDerivationState_["STALE_"] = 2] = "STALE_"; -})(IDerivationState_ || (IDerivationState_ = {})); -var TraceMode; -(function (TraceMode) { - TraceMode[TraceMode["NONE"] = 0] = "NONE"; - TraceMode[TraceMode["LOG"] = 1] = "LOG"; - TraceMode[TraceMode["BREAK"] = 2] = "BREAK"; -})(TraceMode || (TraceMode = {})); -var CaughtException = function CaughtException(cause) { - this.cause = void 0; - this.cause = cause; - // Empty -}; - -function isCaughtException(e) { - return e instanceof CaughtException; -} -/** - * Finds out whether any dependency of the derivation has actually changed. - * If dependenciesState is 1 then it will recalculate dependencies, - * if any dependency changed it will propagate it by changing dependenciesState to 2. - * - * By iterating over the dependencies in the same order that they were reported and - * stopping on the first change, all the recalculations are only called for ComputedValues - * that will be tracked by derivation. That is because we assume that if the first x - * dependencies of the derivation doesn't change then the derivation should run the same way - * up until accessing x-th dependency. - */ -function shouldCompute(derivation) { - switch (derivation.dependenciesState_) { - case IDerivationState_.UP_TO_DATE_: - return false; - case IDerivationState_.NOT_TRACKING_: - case IDerivationState_.STALE_: - return true; - case IDerivationState_.POSSIBLY_STALE_: - { - // state propagation can occur outside of action/reactive context #2195 - var prevAllowStateReads = allowStateReadsStart(true); - var prevUntracked = untrackedStart(); // no need for those computeds to be reported, they will be picked up in trackDerivedFunction. - var obs = derivation.observing_, - l = obs.length; - for (var i = 0; i < l; i++) { - var obj = obs[i]; - if (isComputedValue(obj)) { - if (globalState.disableErrorBoundaries) { - obj.get(); - } else { - try { - obj.get(); - } catch (e) { - // we are not interested in the value *or* exception at this moment, but if there is one, notify all - untrackedEnd(prevUntracked); - allowStateReadsEnd(prevAllowStateReads); - return true; - } - } - // if ComputedValue `obj` actually changed it will be computed and propagated to its observers. - // and `derivation` is an observer of `obj` - // invariantShouldCompute(derivation) - if (derivation.dependenciesState_ === IDerivationState_.STALE_) { - untrackedEnd(prevUntracked); - allowStateReadsEnd(prevAllowStateReads); - return true; - } - } - } - changeDependenciesStateTo0(derivation); - untrackedEnd(prevUntracked); - allowStateReadsEnd(prevAllowStateReads); - return false; - } - } -} -function isComputingDerivation() { - return globalState.trackingDerivation !== null; // filter out actions inside computations -} - -function checkIfStateModificationsAreAllowed(atom) { - if (false) {} - var hasObservers = atom.observers_.size > 0; - // Should not be possible to change observed state outside strict mode, except during initialization, see #563 - if (!globalState.allowStateChanges && (hasObservers || globalState.enforceActions === "always")) { - console.warn("[MobX] " + (globalState.enforceActions ? "Since strict-mode is enabled, changing (observed) observable values without using an action is not allowed. Tried to modify: " : "Side effects like changing state are not allowed at this point. Are you trying to modify state from, for example, a computed value or the render function of a React component? You can wrap side effects in 'runInAction' (or decorate functions with 'action') if needed. Tried to modify: ") + atom.name_); - } -} -function checkIfStateReadsAreAllowed(observable) { - if ( true && !globalState.allowStateReads && globalState.observableRequiresReaction) { - console.warn("[mobx] Observable '" + observable.name_ + "' being read outside a reactive context."); - } -} -/** - * Executes the provided function `f` and tracks which observables are being accessed. - * The tracking information is stored on the `derivation` object and the derivation is registered - * as observer of any of the accessed observables. - */ -function trackDerivedFunction(derivation, f, context) { - var prevAllowStateReads = allowStateReadsStart(true); - // pre allocate array allocation + room for variation in deps - // array will be trimmed by bindDependencies - changeDependenciesStateTo0(derivation); - derivation.newObserving_ = new Array(derivation.observing_.length + 100); - derivation.unboundDepsCount_ = 0; - derivation.runId_ = ++globalState.runId; - var prevTracking = globalState.trackingDerivation; - globalState.trackingDerivation = derivation; - globalState.inBatch++; - var result; - if (globalState.disableErrorBoundaries === true) { - result = f.call(context); - } else { - try { - result = f.call(context); - } catch (e) { - result = new CaughtException(e); - } - } - globalState.inBatch--; - globalState.trackingDerivation = prevTracking; - bindDependencies(derivation); - warnAboutDerivationWithoutDependencies(derivation); - allowStateReadsEnd(prevAllowStateReads); - return result; -} -function warnAboutDerivationWithoutDependencies(derivation) { - if (false) {} - if (derivation.observing_.length !== 0) { - return; - } - if (typeof derivation.requiresObservable_ === "boolean" ? derivation.requiresObservable_ : globalState.reactionRequiresObservable) { - console.warn("[mobx] Derivation '" + derivation.name_ + "' is created/updated without reading any observable value."); - } -} -/** - * diffs newObserving with observing. - * update observing to be newObserving with unique observables - * notify observers that become observed/unobserved - */ -function bindDependencies(derivation) { - // invariant(derivation.dependenciesState !== IDerivationState.NOT_TRACKING, "INTERNAL ERROR bindDependencies expects derivation.dependenciesState !== -1"); - var prevObserving = derivation.observing_; - var observing = derivation.observing_ = derivation.newObserving_; - var lowestNewObservingDerivationState = IDerivationState_.UP_TO_DATE_; - // Go through all new observables and check diffValue: (this list can contain duplicates): - // 0: first occurrence, change to 1 and keep it - // 1: extra occurrence, drop it - var i0 = 0, - l = derivation.unboundDepsCount_; - for (var i = 0; i < l; i++) { - var dep = observing[i]; - if (dep.diffValue_ === 0) { - dep.diffValue_ = 1; - if (i0 !== i) { - observing[i0] = dep; - } - i0++; - } - // Upcast is 'safe' here, because if dep is IObservable, `dependenciesState` will be undefined, - // not hitting the condition - if (dep.dependenciesState_ > lowestNewObservingDerivationState) { - lowestNewObservingDerivationState = dep.dependenciesState_; - } - } - observing.length = i0; - derivation.newObserving_ = null; // newObserving shouldn't be needed outside tracking (statement moved down to work around FF bug, see #614) - // Go through all old observables and check diffValue: (it is unique after last bindDependencies) - // 0: it's not in new observables, unobserve it - // 1: it keeps being observed, don't want to notify it. change to 0 - l = prevObserving.length; - while (l--) { - var _dep = prevObserving[l]; - if (_dep.diffValue_ === 0) { - removeObserver(_dep, derivation); - } - _dep.diffValue_ = 0; - } - // Go through all new observables and check diffValue: (now it should be unique) - // 0: it was set to 0 in last loop. don't need to do anything. - // 1: it wasn't observed, let's observe it. set back to 0 - while (i0--) { - var _dep2 = observing[i0]; - if (_dep2.diffValue_ === 1) { - _dep2.diffValue_ = 0; - addObserver(_dep2, derivation); - } - } - // Some new observed derivations may become stale during this derivation computation - // so they have had no chance to propagate staleness (#916) - if (lowestNewObservingDerivationState !== IDerivationState_.UP_TO_DATE_) { - derivation.dependenciesState_ = lowestNewObservingDerivationState; - derivation.onBecomeStale_(); - } -} -function clearObserving(derivation) { - // invariant(globalState.inBatch > 0, "INTERNAL ERROR clearObserving should be called only inside batch"); - var obs = derivation.observing_; - derivation.observing_ = []; - var i = obs.length; - while (i--) { - removeObserver(obs[i], derivation); - } - derivation.dependenciesState_ = IDerivationState_.NOT_TRACKING_; -} -function untracked(action) { - var prev = untrackedStart(); - try { - return action(); - } finally { - untrackedEnd(prev); - } -} -function untrackedStart() { - var prev = globalState.trackingDerivation; - globalState.trackingDerivation = null; - return prev; -} -function untrackedEnd(prev) { - globalState.trackingDerivation = prev; -} -function allowStateReadsStart(allowStateReads) { - var prev = globalState.allowStateReads; - globalState.allowStateReads = allowStateReads; - return prev; -} -function allowStateReadsEnd(prev) { - globalState.allowStateReads = prev; -} -/** - * needed to keep `lowestObserverState` correct. when changing from (2 or 1) to 0 - * - */ -function changeDependenciesStateTo0(derivation) { - if (derivation.dependenciesState_ === IDerivationState_.UP_TO_DATE_) { - return; - } - derivation.dependenciesState_ = IDerivationState_.UP_TO_DATE_; - var obs = derivation.observing_; - var i = obs.length; - while (i--) { - obs[i].lowestObserverState_ = IDerivationState_.UP_TO_DATE_; - } -} - -/** - * These values will persist if global state is reset - */ -var persistentKeys = ["mobxGuid", "spyListeners", "enforceActions", "computedRequiresReaction", "reactionRequiresObservable", "observableRequiresReaction", "allowStateReads", "disableErrorBoundaries", "runId", "UNCHANGED", "useProxies"]; -var MobXGlobals = function MobXGlobals() { - this.version = 6; - this.UNCHANGED = {}; - this.trackingDerivation = null; - this.trackingContext = null; - this.runId = 0; - this.mobxGuid = 0; - this.inBatch = 0; - this.pendingUnobservations = []; - this.pendingReactions = []; - this.isRunningReactions = false; - this.allowStateChanges = false; - this.allowStateReads = true; - this.enforceActions = true; - this.spyListeners = []; - this.globalReactionErrorHandlers = []; - this.computedRequiresReaction = false; - this.reactionRequiresObservable = false; - this.observableRequiresReaction = false; - this.disableErrorBoundaries = false; - this.suppressReactionErrors = false; - this.useProxies = true; - this.verifyProxies = false; - this.safeDescriptors = true; - this.stateVersion = Number.MIN_SAFE_INTEGER; -}; -var canMergeGlobalState = true; -var isolateCalled = false; -var globalState = /*#__PURE__*/function () { - var global = /*#__PURE__*/getGlobal(); - if (global.__mobxInstanceCount > 0 && !global.__mobxGlobals) { - canMergeGlobalState = false; - } - if (global.__mobxGlobals && global.__mobxGlobals.version !== new MobXGlobals().version) { - canMergeGlobalState = false; - } - if (!canMergeGlobalState) { - // Because this is a IIFE we need to let isolateCalled a chance to change - // so we run it after the event loop completed at least 1 iteration - setTimeout(function () { - if (!isolateCalled) { - die(35); - } - }, 1); - return new MobXGlobals(); - } else if (global.__mobxGlobals) { - global.__mobxInstanceCount += 1; - if (!global.__mobxGlobals.UNCHANGED) { - global.__mobxGlobals.UNCHANGED = {}; - } // make merge backward compatible - return global.__mobxGlobals; - } else { - global.__mobxInstanceCount = 1; - return global.__mobxGlobals = /*#__PURE__*/new MobXGlobals(); - } -}(); -function isolateGlobalState() { - if (globalState.pendingReactions.length || globalState.inBatch || globalState.isRunningReactions) { - die(36); - } - isolateCalled = true; - if (canMergeGlobalState) { - var global = getGlobal(); - if (--global.__mobxInstanceCount === 0) { - global.__mobxGlobals = undefined; - } - globalState = new MobXGlobals(); - } -} -function getGlobalState() { - return globalState; -} -/** - * For testing purposes only; this will break the internal state of existing observables, - * but can be used to get back at a stable state after throwing errors - */ -function resetGlobalState() { - var defaultGlobals = new MobXGlobals(); - for (var key in defaultGlobals) { - if (persistentKeys.indexOf(key) === -1) { - globalState[key] = defaultGlobals[key]; - } - } - globalState.allowStateChanges = !globalState.enforceActions; -} - -function hasObservers(observable) { - return observable.observers_ && observable.observers_.size > 0; -} -function getObservers(observable) { - return observable.observers_; -} -// function invariantObservers(observable: IObservable) { -// const list = observable.observers -// const map = observable.observersIndexes -// const l = list.length -// for (let i = 0; i < l; i++) { -// const id = list[i].__mapid -// if (i) { -// invariant(map[id] === i, "INTERNAL ERROR maps derivation.__mapid to index in list") // for performance -// } else { -// invariant(!(id in map), "INTERNAL ERROR observer on index 0 shouldn't be held in map.") // for performance -// } -// } -// invariant( -// list.length === 0 || Object.keys(map).length === list.length - 1, -// "INTERNAL ERROR there is no junk in map" -// ) -// } -function addObserver(observable, node) { - // invariant(node.dependenciesState !== -1, "INTERNAL ERROR, can add only dependenciesState !== -1"); - // invariant(observable._observers.indexOf(node) === -1, "INTERNAL ERROR add already added node"); - // invariantObservers(observable); - observable.observers_.add(node); - if (observable.lowestObserverState_ > node.dependenciesState_) { - observable.lowestObserverState_ = node.dependenciesState_; - } - // invariantObservers(observable); - // invariant(observable._observers.indexOf(node) !== -1, "INTERNAL ERROR didn't add node"); -} - -function removeObserver(observable, node) { - // invariant(globalState.inBatch > 0, "INTERNAL ERROR, remove should be called only inside batch"); - // invariant(observable._observers.indexOf(node) !== -1, "INTERNAL ERROR remove already removed node"); - // invariantObservers(observable); - observable.observers_["delete"](node); - if (observable.observers_.size === 0) { - // deleting last observer - queueForUnobservation(observable); - } - // invariantObservers(observable); - // invariant(observable._observers.indexOf(node) === -1, "INTERNAL ERROR remove already removed node2"); -} - -function queueForUnobservation(observable) { - if (observable.isPendingUnobservation_ === false) { - // invariant(observable._observers.length === 0, "INTERNAL ERROR, should only queue for unobservation unobserved observables"); - observable.isPendingUnobservation_ = true; - globalState.pendingUnobservations.push(observable); - } -} -/** - * Batch starts a transaction, at least for purposes of memoizing ComputedValues when nothing else does. - * During a batch `onBecomeUnobserved` will be called at most once per observable. - * Avoids unnecessary recalculations. - */ -function startBatch() { - globalState.inBatch++; -} -function endBatch() { - if (--globalState.inBatch === 0) { - runReactions(); - // the batch is actually about to finish, all unobserving should happen here. - var list = globalState.pendingUnobservations; - for (var i = 0; i < list.length; i++) { - var observable = list[i]; - observable.isPendingUnobservation_ = false; - if (observable.observers_.size === 0) { - if (observable.isBeingObserved_) { - // if this observable had reactive observers, trigger the hooks - observable.isBeingObserved_ = false; - observable.onBUO(); - } - if (observable instanceof ComputedValue) { - // computed values are automatically teared down when the last observer leaves - // this process happens recursively, this computed might be the last observabe of another, etc.. - observable.suspend_(); - } - } - } - globalState.pendingUnobservations = []; - } -} -function reportObserved(observable) { - checkIfStateReadsAreAllowed(observable); - var derivation = globalState.trackingDerivation; - if (derivation !== null) { - /** - * Simple optimization, give each derivation run an unique id (runId) - * Check if last time this observable was accessed the same runId is used - * if this is the case, the relation is already known - */ - if (derivation.runId_ !== observable.lastAccessedBy_) { - observable.lastAccessedBy_ = derivation.runId_; - // Tried storing newObserving, or observing, or both as Set, but performance didn't come close... - derivation.newObserving_[derivation.unboundDepsCount_++] = observable; - if (!observable.isBeingObserved_ && globalState.trackingContext) { - observable.isBeingObserved_ = true; - observable.onBO(); - } - } - return observable.isBeingObserved_; - } else if (observable.observers_.size === 0 && globalState.inBatch > 0) { - queueForUnobservation(observable); - } - return false; -} -// function invariantLOS(observable: IObservable, msg: string) { -// // it's expensive so better not run it in produciton. but temporarily helpful for testing -// const min = getObservers(observable).reduce((a, b) => Math.min(a, b.dependenciesState), 2) -// if (min >= observable.lowestObserverState) return // <- the only assumption about `lowestObserverState` -// throw new Error( -// "lowestObserverState is wrong for " + -// msg + -// " because " + -// min + -// " < " + -// observable.lowestObserverState -// ) -// } -/** - * NOTE: current propagation mechanism will in case of self reruning autoruns behave unexpectedly - * It will propagate changes to observers from previous run - * It's hard or maybe impossible (with reasonable perf) to get it right with current approach - * Hopefully self reruning autoruns aren't a feature people should depend on - * Also most basic use cases should be ok - */ -// Called by Atom when its value changes -function propagateChanged(observable) { - // invariantLOS(observable, "changed start"); - if (observable.lowestObserverState_ === IDerivationState_.STALE_) { - return; - } - observable.lowestObserverState_ = IDerivationState_.STALE_; - // Ideally we use for..of here, but the downcompiled version is really slow... - observable.observers_.forEach(function (d) { - if (d.dependenciesState_ === IDerivationState_.UP_TO_DATE_) { - if ( true && d.isTracing_ !== TraceMode.NONE) { - logTraceInfo(d, observable); - } - d.onBecomeStale_(); - } - d.dependenciesState_ = IDerivationState_.STALE_; - }); - // invariantLOS(observable, "changed end"); -} -// Called by ComputedValue when it recalculate and its value changed -function propagateChangeConfirmed(observable) { - // invariantLOS(observable, "confirmed start"); - if (observable.lowestObserverState_ === IDerivationState_.STALE_) { - return; - } - observable.lowestObserverState_ = IDerivationState_.STALE_; - observable.observers_.forEach(function (d) { - if (d.dependenciesState_ === IDerivationState_.POSSIBLY_STALE_) { - d.dependenciesState_ = IDerivationState_.STALE_; - if ( true && d.isTracing_ !== TraceMode.NONE) { - logTraceInfo(d, observable); - } - } else if (d.dependenciesState_ === IDerivationState_.UP_TO_DATE_ // this happens during computing of `d`, just keep lowestObserverState up to date. - ) { - observable.lowestObserverState_ = IDerivationState_.UP_TO_DATE_; - } - }); - // invariantLOS(observable, "confirmed end"); -} -// Used by computed when its dependency changed, but we don't wan't to immediately recompute. -function propagateMaybeChanged(observable) { - // invariantLOS(observable, "maybe start"); - if (observable.lowestObserverState_ !== IDerivationState_.UP_TO_DATE_) { - return; - } - observable.lowestObserverState_ = IDerivationState_.POSSIBLY_STALE_; - observable.observers_.forEach(function (d) { - if (d.dependenciesState_ === IDerivationState_.UP_TO_DATE_) { - d.dependenciesState_ = IDerivationState_.POSSIBLY_STALE_; - d.onBecomeStale_(); - } - }); - // invariantLOS(observable, "maybe end"); -} - -function logTraceInfo(derivation, observable) { - console.log("[mobx.trace] '" + derivation.name_ + "' is invalidated due to a change in: '" + observable.name_ + "'"); - if (derivation.isTracing_ === TraceMode.BREAK) { - var lines = []; - printDepTree(getDependencyTree(derivation), lines, 1); - // prettier-ignore - new Function("debugger;\n/*\nTracing '" + derivation.name_ + "'\n\nYou are entering this break point because derivation '" + derivation.name_ + "' is being traced and '" + observable.name_ + "' is now forcing it to update.\nJust follow the stacktrace you should now see in the devtools to see precisely what piece of your code is causing this update\nThe stackframe you are looking for is at least ~6-8 stack-frames up.\n\n" + (derivation instanceof ComputedValue ? derivation.derivation.toString().replace(/[*]\//g, "/") : "") + "\n\nThe dependencies for this derivation are:\n\n" + lines.join("\n") + "\n*/\n ")(); - } -} -function printDepTree(tree, lines, depth) { - if (lines.length >= 1000) { - lines.push("(and many more)"); - return; - } - lines.push("" + "\t".repeat(depth - 1) + tree.name); - if (tree.dependencies) { - tree.dependencies.forEach(function (child) { - return printDepTree(child, lines, depth + 1); - }); - } -} - -var Reaction = /*#__PURE__*/function () { - // nodes we are looking at. Our value depends on these nodes - - function Reaction(name_, onInvalidate_, errorHandler_, requiresObservable_) { - if (name_ === void 0) { - name_ = true ? "Reaction@" + getNextId() : 0; - } - this.name_ = void 0; - this.onInvalidate_ = void 0; - this.errorHandler_ = void 0; - this.requiresObservable_ = void 0; - this.observing_ = []; - this.newObserving_ = []; - this.dependenciesState_ = IDerivationState_.NOT_TRACKING_; - this.diffValue_ = 0; - this.runId_ = 0; - this.unboundDepsCount_ = 0; - this.isDisposed_ = false; - this.isScheduled_ = false; - this.isTrackPending_ = false; - this.isRunning_ = false; - this.isTracing_ = TraceMode.NONE; - this.name_ = name_; - this.onInvalidate_ = onInvalidate_; - this.errorHandler_ = errorHandler_; - this.requiresObservable_ = requiresObservable_; - } - var _proto = Reaction.prototype; - _proto.onBecomeStale_ = function onBecomeStale_() { - this.schedule_(); - }; - _proto.schedule_ = function schedule_() { - if (!this.isScheduled_) { - this.isScheduled_ = true; - globalState.pendingReactions.push(this); - runReactions(); - } - }; - _proto.isScheduled = function isScheduled() { - return this.isScheduled_; - } - /** - * internal, use schedule() if you intend to kick off a reaction - */; - _proto.runReaction_ = function runReaction_() { - if (!this.isDisposed_) { - startBatch(); - this.isScheduled_ = false; - var prev = globalState.trackingContext; - globalState.trackingContext = this; - if (shouldCompute(this)) { - this.isTrackPending_ = true; - try { - this.onInvalidate_(); - if ( true && this.isTrackPending_ && isSpyEnabled()) { - // onInvalidate didn't trigger track right away.. - spyReport({ - name: this.name_, - type: "scheduled-reaction" - }); - } - } catch (e) { - this.reportExceptionInDerivation_(e); - } - } - globalState.trackingContext = prev; - endBatch(); - } - }; - _proto.track = function track(fn) { - if (this.isDisposed_) { - return; - // console.warn("Reaction already disposed") // Note: Not a warning / error in mobx 4 either - } - - startBatch(); - var notify = isSpyEnabled(); - var startTime; - if ( true && notify) { - startTime = Date.now(); - spyReportStart({ - name: this.name_, - type: "reaction" - }); - } - this.isRunning_ = true; - var prevReaction = globalState.trackingContext; // reactions could create reactions... - globalState.trackingContext = this; - var result = trackDerivedFunction(this, fn, undefined); - globalState.trackingContext = prevReaction; - this.isRunning_ = false; - this.isTrackPending_ = false; - if (this.isDisposed_) { - // disposed during last run. Clean up everything that was bound after the dispose call. - clearObserving(this); - } - if (isCaughtException(result)) { - this.reportExceptionInDerivation_(result.cause); - } - if ( true && notify) { - spyReportEnd({ - time: Date.now() - startTime - }); - } - endBatch(); - }; - _proto.reportExceptionInDerivation_ = function reportExceptionInDerivation_(error) { - var _this = this; - if (this.errorHandler_) { - this.errorHandler_(error, this); - return; - } - if (globalState.disableErrorBoundaries) { - throw error; - } - var message = true ? "[mobx] Encountered an uncaught exception that was thrown by a reaction or observer component, in: '" + this + "'" : 0; - if (!globalState.suppressReactionErrors) { - console.error(message, error); - /** If debugging brought you here, please, read the above message :-). Tnx! */ - } else if (true) { - console.warn("[mobx] (error in reaction '" + this.name_ + "' suppressed, fix error of causing action below)"); - } // prettier-ignore - if ( true && isSpyEnabled()) { - spyReport({ - type: "error", - name: this.name_, - message: message, - error: "" + error - }); - } - globalState.globalReactionErrorHandlers.forEach(function (f) { - return f(error, _this); - }); - }; - _proto.dispose = function dispose() { - if (!this.isDisposed_) { - this.isDisposed_ = true; - if (!this.isRunning_) { - // if disposed while running, clean up later. Maybe not optimal, but rare case - startBatch(); - clearObserving(this); - endBatch(); - } - } - }; - _proto.getDisposer_ = function getDisposer_() { - var r = this.dispose.bind(this); - r[$mobx] = this; - return r; - }; - _proto.toString = function toString() { - return "Reaction[" + this.name_ + "]"; - }; - _proto.trace = function trace$1(enterBreakPoint) { - if (enterBreakPoint === void 0) { - enterBreakPoint = false; - } - trace(this, enterBreakPoint); - }; - return Reaction; -}(); -function onReactionError(handler) { - globalState.globalReactionErrorHandlers.push(handler); - return function () { - var idx = globalState.globalReactionErrorHandlers.indexOf(handler); - if (idx >= 0) { - globalState.globalReactionErrorHandlers.splice(idx, 1); - } - }; -} -/** - * Magic number alert! - * Defines within how many times a reaction is allowed to re-trigger itself - * until it is assumed that this is gonna be a never ending loop... - */ -var MAX_REACTION_ITERATIONS = 100; -var reactionScheduler = function reactionScheduler(f) { - return f(); -}; -function runReactions() { - // Trampolining, if runReactions are already running, new reactions will be picked up - if (globalState.inBatch > 0 || globalState.isRunningReactions) { - return; - } - reactionScheduler(runReactionsHelper); -} -function runReactionsHelper() { - globalState.isRunningReactions = true; - var allReactions = globalState.pendingReactions; - var iterations = 0; - // While running reactions, new reactions might be triggered. - // Hence we work with two variables and check whether - // we converge to no remaining reactions after a while. - while (allReactions.length > 0) { - if (++iterations === MAX_REACTION_ITERATIONS) { - console.error( true ? "Reaction doesn't converge to a stable state after " + MAX_REACTION_ITERATIONS + " iterations." + (" Probably there is a cycle in the reactive function: " + allReactions[0]) : 0); - allReactions.splice(0); // clear reactions - } - - var remainingReactions = allReactions.splice(0); - for (var i = 0, l = remainingReactions.length; i < l; i++) { - remainingReactions[i].runReaction_(); - } - } - globalState.isRunningReactions = false; -} -var isReaction = /*#__PURE__*/createInstanceofPredicate("Reaction", Reaction); -function setReactionScheduler(fn) { - var baseScheduler = reactionScheduler; - reactionScheduler = function reactionScheduler(f) { - return fn(function () { - return baseScheduler(f); - }); - }; -} - -function isSpyEnabled() { - return true && !!globalState.spyListeners.length; -} -function spyReport(event) { - if (false) {} // dead code elimination can do the rest - if (!globalState.spyListeners.length) { - return; - } - var listeners = globalState.spyListeners; - for (var i = 0, l = listeners.length; i < l; i++) { - listeners[i](event); - } -} -function spyReportStart(event) { - if (false) {} - var change = _extends({}, event, { - spyReportStart: true - }); - spyReport(change); -} -var END_EVENT = { - type: "report-end", - spyReportEnd: true -}; -function spyReportEnd(change) { - if (false) {} - if (change) { - spyReport(_extends({}, change, { - type: "report-end", - spyReportEnd: true - })); - } else { - spyReport(END_EVENT); - } -} -function spy(listener) { - if (false) {} else { - globalState.spyListeners.push(listener); - return once(function () { - globalState.spyListeners = globalState.spyListeners.filter(function (l) { - return l !== listener; - }); - }); - } -} - -var ACTION = "action"; -var ACTION_BOUND = "action.bound"; -var AUTOACTION = "autoAction"; -var AUTOACTION_BOUND = "autoAction.bound"; -var DEFAULT_ACTION_NAME = ""; -var actionAnnotation = /*#__PURE__*/createActionAnnotation(ACTION); -var actionBoundAnnotation = /*#__PURE__*/createActionAnnotation(ACTION_BOUND, { - bound: true -}); -var autoActionAnnotation = /*#__PURE__*/createActionAnnotation(AUTOACTION, { - autoAction: true -}); -var autoActionBoundAnnotation = /*#__PURE__*/createActionAnnotation(AUTOACTION_BOUND, { - autoAction: true, - bound: true -}); -function createActionFactory(autoAction) { - var res = function action(arg1, arg2) { - // action(fn() {}) - if (isFunction(arg1)) { - return createAction(arg1.name || DEFAULT_ACTION_NAME, arg1, autoAction); - } - // action("name", fn() {}) - if (isFunction(arg2)) { - return createAction(arg1, arg2, autoAction); - } - // @action - if (isStringish(arg2)) { - return storeAnnotation(arg1, arg2, autoAction ? autoActionAnnotation : actionAnnotation); - } - // action("name") & @action("name") - if (isStringish(arg1)) { - return createDecoratorAnnotation(createActionAnnotation(autoAction ? AUTOACTION : ACTION, { - name: arg1, - autoAction: autoAction - })); - } - if (true) { - die("Invalid arguments for `action`"); - } - }; - return res; -} -var action = /*#__PURE__*/createActionFactory(false); -Object.assign(action, actionAnnotation); -var autoAction = /*#__PURE__*/createActionFactory(true); -Object.assign(autoAction, autoActionAnnotation); -action.bound = /*#__PURE__*/createDecoratorAnnotation(actionBoundAnnotation); -autoAction.bound = /*#__PURE__*/createDecoratorAnnotation(autoActionBoundAnnotation); -function runInAction(fn) { - return executeAction(fn.name || DEFAULT_ACTION_NAME, false, fn, this, undefined); -} -function isAction(thing) { - return isFunction(thing) && thing.isMobxAction === true; -} - -/** - * Creates a named reactive view and keeps it alive, so that the view is always - * updated if one of the dependencies changes, even when the view is not further used by something else. - * @param view The reactive view - * @returns disposer function, which can be used to stop the view from being updated in the future. - */ -function autorun(view, opts) { - var _opts$name, _opts; - if (opts === void 0) { - opts = EMPTY_OBJECT; - } - if (true) { - if (!isFunction(view)) { - die("Autorun expects a function as first argument"); - } - if (isAction(view)) { - die("Autorun does not accept actions since actions are untrackable"); - } - } - var name = (_opts$name = (_opts = opts) == null ? void 0 : _opts.name) != null ? _opts$name : true ? view.name || "Autorun@" + getNextId() : 0; - var runSync = !opts.scheduler && !opts.delay; - var reaction; - if (runSync) { - // normal autorun - reaction = new Reaction(name, function () { - this.track(reactionRunner); - }, opts.onError, opts.requiresObservable); - } else { - var scheduler = createSchedulerFromOptions(opts); - // debounced autorun - var isScheduled = false; - reaction = new Reaction(name, function () { - if (!isScheduled) { - isScheduled = true; - scheduler(function () { - isScheduled = false; - if (!reaction.isDisposed_) { - reaction.track(reactionRunner); - } - }); - } - }, opts.onError, opts.requiresObservable); - } - function reactionRunner() { - view(reaction); - } - reaction.schedule_(); - return reaction.getDisposer_(); -} -var run = function run(f) { - return f(); -}; -function createSchedulerFromOptions(opts) { - return opts.scheduler ? opts.scheduler : opts.delay ? function (f) { - return setTimeout(f, opts.delay); - } : run; -} -function reaction(expression, effect, opts) { - var _opts$name2; - if (opts === void 0) { - opts = EMPTY_OBJECT; - } - if (true) { - if (!isFunction(expression) || !isFunction(effect)) { - die("First and second argument to reaction should be functions"); - } - if (!isPlainObject(opts)) { - die("Third argument of reactions should be an object"); - } - } - var name = (_opts$name2 = opts.name) != null ? _opts$name2 : true ? "Reaction@" + getNextId() : 0; - var effectAction = action(name, opts.onError ? wrapErrorHandler(opts.onError, effect) : effect); - var runSync = !opts.scheduler && !opts.delay; - var scheduler = createSchedulerFromOptions(opts); - var firstTime = true; - var isScheduled = false; - var value; - var oldValue; - var equals = opts.compareStructural ? comparer.structural : opts.equals || comparer["default"]; - var r = new Reaction(name, function () { - if (firstTime || runSync) { - reactionRunner(); - } else if (!isScheduled) { - isScheduled = true; - scheduler(reactionRunner); - } - }, opts.onError, opts.requiresObservable); - function reactionRunner() { - isScheduled = false; - if (r.isDisposed_) { - return; - } - var changed = false; - r.track(function () { - var nextValue = allowStateChanges(false, function () { - return expression(r); - }); - changed = firstTime || !equals(value, nextValue); - oldValue = value; - value = nextValue; - }); - if (firstTime && opts.fireImmediately) { - effectAction(value, oldValue, r); - } else if (!firstTime && changed) { - effectAction(value, oldValue, r); - } - firstTime = false; - } - r.schedule_(); - return r.getDisposer_(); -} -function wrapErrorHandler(errorHandler, baseFn) { - return function () { - try { - return baseFn.apply(this, arguments); - } catch (e) { - errorHandler.call(this, e); - } - }; -} - -var ON_BECOME_OBSERVED = "onBO"; -var ON_BECOME_UNOBSERVED = "onBUO"; -function onBecomeObserved(thing, arg2, arg3) { - return interceptHook(ON_BECOME_OBSERVED, thing, arg2, arg3); -} -function onBecomeUnobserved(thing, arg2, arg3) { - return interceptHook(ON_BECOME_UNOBSERVED, thing, arg2, arg3); -} -function interceptHook(hook, thing, arg2, arg3) { - var atom = typeof arg3 === "function" ? getAtom(thing, arg2) : getAtom(thing); - var cb = isFunction(arg3) ? arg3 : arg2; - var listenersKey = hook + "L"; - if (atom[listenersKey]) { - atom[listenersKey].add(cb); - } else { - atom[listenersKey] = new Set([cb]); - } - return function () { - var hookListeners = atom[listenersKey]; - if (hookListeners) { - hookListeners["delete"](cb); - if (hookListeners.size === 0) { - delete atom[listenersKey]; - } - } - }; -} - -var NEVER = "never"; -var ALWAYS = "always"; -var OBSERVED = "observed"; -// const IF_AVAILABLE = "ifavailable" -function configure(options) { - if (options.isolateGlobalState === true) { - isolateGlobalState(); - } - var useProxies = options.useProxies, - enforceActions = options.enforceActions; - if (useProxies !== undefined) { - globalState.useProxies = useProxies === ALWAYS ? true : useProxies === NEVER ? false : typeof Proxy !== "undefined"; - } - if (useProxies === "ifavailable") { - globalState.verifyProxies = true; - } - if (enforceActions !== undefined) { - var ea = enforceActions === ALWAYS ? ALWAYS : enforceActions === OBSERVED; - globalState.enforceActions = ea; - globalState.allowStateChanges = ea === true || ea === ALWAYS ? false : true; - } - ["computedRequiresReaction", "reactionRequiresObservable", "observableRequiresReaction", "disableErrorBoundaries", "safeDescriptors"].forEach(function (key) { - if (key in options) { - globalState[key] = !!options[key]; - } - }); - globalState.allowStateReads = !globalState.observableRequiresReaction; - if ( true && globalState.disableErrorBoundaries === true) { - console.warn("WARNING: Debug feature only. MobX will NOT recover from errors when `disableErrorBoundaries` is enabled."); - } - if (options.reactionScheduler) { - setReactionScheduler(options.reactionScheduler); - } -} - -function extendObservable(target, properties, annotations, options) { - if (true) { - if (arguments.length > 4) { - die("'extendObservable' expected 2-4 arguments"); - } - if (typeof target !== "object") { - die("'extendObservable' expects an object as first argument"); - } - if (isObservableMap(target)) { - die("'extendObservable' should not be used on maps, use map.merge instead"); - } - if (!isPlainObject(properties)) { - die("'extendObservable' only accepts plain objects as second argument"); - } - if (isObservable(properties) || isObservable(annotations)) { - die("Extending an object with another observable (object) is not supported"); - } - } - // Pull descriptors first, so we don't have to deal with props added by administration ($mobx) - var descriptors = getOwnPropertyDescriptors(properties); - var adm = asObservableObject(target, options)[$mobx]; - startBatch(); - try { - ownKeys(descriptors).forEach(function (key) { - adm.extend_(key, descriptors[key], - // must pass "undefined" for { key: undefined } - !annotations ? true : key in annotations ? annotations[key] : true); - }); - } finally { - endBatch(); - } - return target; -} - -function getDependencyTree(thing, property) { - return nodeToDependencyTree(getAtom(thing, property)); -} -function nodeToDependencyTree(node) { - var result = { - name: node.name_ - }; - if (node.observing_ && node.observing_.length > 0) { - result.dependencies = unique(node.observing_).map(nodeToDependencyTree); - } - return result; -} -function getObserverTree(thing, property) { - return nodeToObserverTree(getAtom(thing, property)); -} -function nodeToObserverTree(node) { - var result = { - name: node.name_ - }; - if (hasObservers(node)) { - result.observers = Array.from(getObservers(node)).map(nodeToObserverTree); - } - return result; -} -function unique(list) { - return Array.from(new Set(list)); -} - -var generatorId = 0; -function FlowCancellationError() { - this.message = "FLOW_CANCELLED"; -} -FlowCancellationError.prototype = /*#__PURE__*/Object.create(Error.prototype); -function isFlowCancellationError(error) { - return error instanceof FlowCancellationError; -} -var flowAnnotation = /*#__PURE__*/createFlowAnnotation("flow"); -var flowBoundAnnotation = /*#__PURE__*/createFlowAnnotation("flow.bound", { - bound: true -}); -var flow = /*#__PURE__*/Object.assign(function flow(arg1, arg2) { - // @flow - if (isStringish(arg2)) { - return storeAnnotation(arg1, arg2, flowAnnotation); - } - // flow(fn) - if ( true && arguments.length !== 1) { - die("Flow expects single argument with generator function"); - } - var generator = arg1; - var name = generator.name || ""; - // Implementation based on https://github.com/tj/co/blob/master/index.js - var res = function res() { - var ctx = this; - var args = arguments; - var runId = ++generatorId; - var gen = action(name + " - runid: " + runId + " - init", generator).apply(ctx, args); - var rejector; - var pendingPromise = undefined; - var promise = new Promise(function (resolve, reject) { - var stepId = 0; - rejector = reject; - function onFulfilled(res) { - pendingPromise = undefined; - var ret; - try { - ret = action(name + " - runid: " + runId + " - yield " + stepId++, gen.next).call(gen, res); - } catch (e) { - return reject(e); - } - next(ret); - } - function onRejected(err) { - pendingPromise = undefined; - var ret; - try { - ret = action(name + " - runid: " + runId + " - yield " + stepId++, gen["throw"]).call(gen, err); - } catch (e) { - return reject(e); - } - next(ret); - } - function next(ret) { - if (isFunction(ret == null ? void 0 : ret.then)) { - // an async iterator - ret.then(next, reject); - return; - } - if (ret.done) { - return resolve(ret.value); - } - pendingPromise = Promise.resolve(ret.value); - return pendingPromise.then(onFulfilled, onRejected); - } - onFulfilled(undefined); // kick off the process - }); - - promise.cancel = action(name + " - runid: " + runId + " - cancel", function () { - try { - if (pendingPromise) { - cancelPromise(pendingPromise); - } - // Finally block can return (or yield) stuff.. - var _res = gen["return"](undefined); - // eat anything that promise would do, it's cancelled! - var yieldedPromise = Promise.resolve(_res.value); - yieldedPromise.then(noop, noop); - cancelPromise(yieldedPromise); // maybe it can be cancelled :) - // reject our original promise - rejector(new FlowCancellationError()); - } catch (e) { - rejector(e); // there could be a throwing finally block - } - }); - - return promise; - }; - res.isMobXFlow = true; - return res; -}, flowAnnotation); -flow.bound = /*#__PURE__*/createDecoratorAnnotation(flowBoundAnnotation); -function cancelPromise(promise) { - if (isFunction(promise.cancel)) { - promise.cancel(); - } -} -function flowResult(result) { - return result; // just tricking TypeScript :) -} - -function isFlow(fn) { - return (fn == null ? void 0 : fn.isMobXFlow) === true; -} - -function interceptReads(thing, propOrHandler, handler) { - var target; - if (isObservableMap(thing) || isObservableArray(thing) || isObservableValue(thing)) { - target = getAdministration(thing); - } else if (isObservableObject(thing)) { - if ( true && !isStringish(propOrHandler)) { - return die("InterceptReads can only be used with a specific property, not with an object in general"); - } - target = getAdministration(thing, propOrHandler); - } else if (true) { - return die("Expected observable map, object or array as first array"); - } - if ( true && target.dehancer !== undefined) { - return die("An intercept reader was already established"); - } - target.dehancer = typeof propOrHandler === "function" ? propOrHandler : handler; - return function () { - target.dehancer = undefined; - }; -} - -function intercept(thing, propOrHandler, handler) { - if (isFunction(handler)) { - return interceptProperty(thing, propOrHandler, handler); - } else { - return interceptInterceptable(thing, propOrHandler); - } -} -function interceptInterceptable(thing, handler) { - return getAdministration(thing).intercept_(handler); -} -function interceptProperty(thing, property, handler) { - return getAdministration(thing, property).intercept_(handler); -} - -function _isComputed(value, property) { - if (property === undefined) { - return isComputedValue(value); - } - if (isObservableObject(value) === false) { - return false; - } - if (!value[$mobx].values_.has(property)) { - return false; - } - var atom = getAtom(value, property); - return isComputedValue(atom); -} -function isComputed(value) { - if ( true && arguments.length > 1) { - return die("isComputed expects only 1 argument. Use isComputedProp to inspect the observability of a property"); - } - return _isComputed(value); -} -function isComputedProp(value, propName) { - if ( true && !isStringish(propName)) { - return die("isComputed expected a property name as second argument"); - } - return _isComputed(value, propName); -} - -function _isObservable(value, property) { - if (!value) { - return false; - } - if (property !== undefined) { - if ( true && (isObservableMap(value) || isObservableArray(value))) { - return die("isObservable(object, propertyName) is not supported for arrays and maps. Use map.has or array.length instead."); - } - if (isObservableObject(value)) { - return value[$mobx].values_.has(property); - } - return false; - } - // For first check, see #701 - return isObservableObject(value) || !!value[$mobx] || isAtom(value) || isReaction(value) || isComputedValue(value); -} -function isObservable(value) { - if ( true && arguments.length !== 1) { - die("isObservable expects only 1 argument. Use isObservableProp to inspect the observability of a property"); - } - return _isObservable(value); -} -function isObservableProp(value, propName) { - if ( true && !isStringish(propName)) { - return die("expected a property name as second argument"); - } - return _isObservable(value, propName); -} - -function keys(obj) { - if (isObservableObject(obj)) { - return obj[$mobx].keys_(); - } - if (isObservableMap(obj) || isObservableSet(obj)) { - return Array.from(obj.keys()); - } - if (isObservableArray(obj)) { - return obj.map(function (_, index) { - return index; - }); - } - die(5); -} -function values(obj) { - if (isObservableObject(obj)) { - return keys(obj).map(function (key) { - return obj[key]; - }); - } - if (isObservableMap(obj)) { - return keys(obj).map(function (key) { - return obj.get(key); - }); - } - if (isObservableSet(obj)) { - return Array.from(obj.values()); - } - if (isObservableArray(obj)) { - return obj.slice(); - } - die(6); -} -function entries(obj) { - if (isObservableObject(obj)) { - return keys(obj).map(function (key) { - return [key, obj[key]]; - }); - } - if (isObservableMap(obj)) { - return keys(obj).map(function (key) { - return [key, obj.get(key)]; - }); - } - if (isObservableSet(obj)) { - return Array.from(obj.entries()); - } - if (isObservableArray(obj)) { - return obj.map(function (key, index) { - return [index, key]; - }); - } - die(7); -} -function set(obj, key, value) { - if (arguments.length === 2 && !isObservableSet(obj)) { - startBatch(); - var _values = key; - try { - for (var _key in _values) { - set(obj, _key, _values[_key]); - } - } finally { - endBatch(); - } - return; - } - if (isObservableObject(obj)) { - obj[$mobx].set_(key, value); - } else if (isObservableMap(obj)) { - obj.set(key, value); - } else if (isObservableSet(obj)) { - obj.add(key); - } else if (isObservableArray(obj)) { - if (typeof key !== "number") { - key = parseInt(key, 10); - } - if (key < 0) { - die("Invalid index: '" + key + "'"); - } - startBatch(); - if (key >= obj.length) { - obj.length = key + 1; - } - obj[key] = value; - endBatch(); - } else { - die(8); - } -} -function remove(obj, key) { - if (isObservableObject(obj)) { - obj[$mobx].delete_(key); - } else if (isObservableMap(obj)) { - obj["delete"](key); - } else if (isObservableSet(obj)) { - obj["delete"](key); - } else if (isObservableArray(obj)) { - if (typeof key !== "number") { - key = parseInt(key, 10); - } - obj.splice(key, 1); - } else { - die(9); - } -} -function has(obj, key) { - if (isObservableObject(obj)) { - return obj[$mobx].has_(key); - } else if (isObservableMap(obj)) { - return obj.has(key); - } else if (isObservableSet(obj)) { - return obj.has(key); - } else if (isObservableArray(obj)) { - return key >= 0 && key < obj.length; - } - die(10); -} -function get(obj, key) { - if (!has(obj, key)) { - return undefined; - } - if (isObservableObject(obj)) { - return obj[$mobx].get_(key); - } else if (isObservableMap(obj)) { - return obj.get(key); - } else if (isObservableArray(obj)) { - return obj[key]; - } - die(11); -} -function apiDefineProperty(obj, key, descriptor) { - if (isObservableObject(obj)) { - return obj[$mobx].defineProperty_(key, descriptor); - } - die(39); -} -function apiOwnKeys(obj) { - if (isObservableObject(obj)) { - return obj[$mobx].ownKeys_(); - } - die(38); -} - -function observe(thing, propOrCb, cbOrFire, fireImmediately) { - if (isFunction(cbOrFire)) { - return observeObservableProperty(thing, propOrCb, cbOrFire, fireImmediately); - } else { - return observeObservable(thing, propOrCb, cbOrFire); - } -} -function observeObservable(thing, listener, fireImmediately) { - return getAdministration(thing).observe_(listener, fireImmediately); -} -function observeObservableProperty(thing, property, listener, fireImmediately) { - return getAdministration(thing, property).observe_(listener, fireImmediately); -} - -function cache(map, key, value) { - map.set(key, value); - return value; -} -function toJSHelper(source, __alreadySeen) { - if (source == null || typeof source !== "object" || source instanceof Date || !isObservable(source)) { - return source; - } - if (isObservableValue(source) || isComputedValue(source)) { - return toJSHelper(source.get(), __alreadySeen); - } - if (__alreadySeen.has(source)) { - return __alreadySeen.get(source); - } - if (isObservableArray(source)) { - var res = cache(__alreadySeen, source, new Array(source.length)); - source.forEach(function (value, idx) { - res[idx] = toJSHelper(value, __alreadySeen); - }); - return res; - } - if (isObservableSet(source)) { - var _res = cache(__alreadySeen, source, new Set()); - source.forEach(function (value) { - _res.add(toJSHelper(value, __alreadySeen)); - }); - return _res; - } - if (isObservableMap(source)) { - var _res2 = cache(__alreadySeen, source, new Map()); - source.forEach(function (value, key) { - _res2.set(key, toJSHelper(value, __alreadySeen)); - }); - return _res2; - } else { - // must be observable object - var _res3 = cache(__alreadySeen, source, {}); - apiOwnKeys(source).forEach(function (key) { - if (objectPrototype.propertyIsEnumerable.call(source, key)) { - _res3[key] = toJSHelper(source[key], __alreadySeen); - } - }); - return _res3; - } -} -/** - * Recursively converts an observable to it's non-observable native counterpart. - * It does NOT recurse into non-observables, these are left as they are, even if they contain observables. - * Computed and other non-enumerable properties are completely ignored. - * Complex scenarios require custom solution, eg implementing `toJSON` or using `serializr` lib. - */ -function toJS(source, options) { - if ( true && options) { - die("toJS no longer supports options"); - } - return toJSHelper(source, new Map()); -} - -function trace() { - if (false) {} - var enterBreakPoint = false; - for (var _len = arguments.length, args = new Array(_len), _key = 0; _key < _len; _key++) { - args[_key] = arguments[_key]; - } - if (typeof args[args.length - 1] === "boolean") { - enterBreakPoint = args.pop(); - } - var derivation = getAtomFromArgs(args); - if (!derivation) { - return die("'trace(break?)' can only be used inside a tracked computed value or a Reaction. Consider passing in the computed value or reaction explicitly"); - } - if (derivation.isTracing_ === TraceMode.NONE) { - console.log("[mobx.trace] '" + derivation.name_ + "' tracing enabled"); - } - derivation.isTracing_ = enterBreakPoint ? TraceMode.BREAK : TraceMode.LOG; -} -function getAtomFromArgs(args) { - switch (args.length) { - case 0: - return globalState.trackingDerivation; - case 1: - return getAtom(args[0]); - case 2: - return getAtom(args[0], args[1]); - } -} - -/** - * During a transaction no views are updated until the end of the transaction. - * The transaction will be run synchronously nonetheless. - * - * @param action a function that updates some reactive state - * @returns any value that was returned by the 'action' parameter. - */ -function transaction(action, thisArg) { - if (thisArg === void 0) { - thisArg = undefined; - } - startBatch(); - try { - return action.apply(thisArg); - } finally { - endBatch(); - } -} - -function when(predicate, arg1, arg2) { - if (arguments.length === 1 || arg1 && typeof arg1 === "object") { - return whenPromise(predicate, arg1); - } - return _when(predicate, arg1, arg2 || {}); -} -function _when(predicate, effect, opts) { - var timeoutHandle; - if (typeof opts.timeout === "number") { - var error = new Error("WHEN_TIMEOUT"); - timeoutHandle = setTimeout(function () { - if (!disposer[$mobx].isDisposed_) { - disposer(); - if (opts.onError) { - opts.onError(error); - } else { - throw error; - } - } - }, opts.timeout); - } - opts.name = true ? opts.name || "When@" + getNextId() : 0; - var effectAction = createAction( true ? opts.name + "-effect" : 0, effect); - // eslint-disable-next-line - var disposer = autorun(function (r) { - // predicate should not change state - var cond = allowStateChanges(false, predicate); - if (cond) { - r.dispose(); - if (timeoutHandle) { - clearTimeout(timeoutHandle); - } - effectAction(); - } - }, opts); - return disposer; -} -function whenPromise(predicate, opts) { - var _opts$signal; - if ( true && opts && opts.onError) { - return die("the options 'onError' and 'promise' cannot be combined"); - } - if (opts != null && (_opts$signal = opts.signal) != null && _opts$signal.aborted) { - return Object.assign(Promise.reject(new Error("WHEN_ABORTED")), { - cancel: function cancel() { - return null; - } - }); - } - var cancel; - var abort; - var res = new Promise(function (resolve, reject) { - var _opts$signal2; - var disposer = _when(predicate, resolve, _extends({}, opts, { - onError: reject - })); - cancel = function cancel() { - disposer(); - reject(new Error("WHEN_CANCELLED")); - }; - abort = function abort() { - disposer(); - reject(new Error("WHEN_ABORTED")); - }; - opts == null ? void 0 : (_opts$signal2 = opts.signal) == null ? void 0 : _opts$signal2.addEventListener == null ? void 0 : _opts$signal2.addEventListener("abort", abort); - })["finally"](function () { - var _opts$signal3; - return opts == null ? void 0 : (_opts$signal3 = opts.signal) == null ? void 0 : _opts$signal3.removeEventListener == null ? void 0 : _opts$signal3.removeEventListener("abort", abort); - }); - res.cancel = cancel; - return res; -} - -function getAdm(target) { - return target[$mobx]; -} -// Optimization: we don't need the intermediate objects and could have a completely custom administration for DynamicObjects, -// and skip either the internal values map, or the base object with its property descriptors! -var objectProxyTraps = { - has: function has(target, name) { - if ( true && globalState.trackingDerivation) { - warnAboutProxyRequirement("detect new properties using the 'in' operator. Use 'has' from 'mobx' instead."); - } - return getAdm(target).has_(name); - }, - get: function get(target, name) { - return getAdm(target).get_(name); - }, - set: function set(target, name, value) { - var _getAdm$set_; - if (!isStringish(name)) { - return false; - } - if ( true && !getAdm(target).values_.has(name)) { - warnAboutProxyRequirement("add a new observable property through direct assignment. Use 'set' from 'mobx' instead."); - } - // null (intercepted) -> true (success) - return (_getAdm$set_ = getAdm(target).set_(name, value, true)) != null ? _getAdm$set_ : true; - }, - deleteProperty: function deleteProperty(target, name) { - var _getAdm$delete_; - if (true) { - warnAboutProxyRequirement("delete properties from an observable object. Use 'remove' from 'mobx' instead."); - } - if (!isStringish(name)) { - return false; - } - // null (intercepted) -> true (success) - return (_getAdm$delete_ = getAdm(target).delete_(name, true)) != null ? _getAdm$delete_ : true; - }, - defineProperty: function defineProperty(target, name, descriptor) { - var _getAdm$definePropert; - if (true) { - warnAboutProxyRequirement("define property on an observable object. Use 'defineProperty' from 'mobx' instead."); - } - // null (intercepted) -> true (success) - return (_getAdm$definePropert = getAdm(target).defineProperty_(name, descriptor)) != null ? _getAdm$definePropert : true; - }, - ownKeys: function ownKeys(target) { - if ( true && globalState.trackingDerivation) { - warnAboutProxyRequirement("iterate keys to detect added / removed properties. Use 'keys' from 'mobx' instead."); - } - return getAdm(target).ownKeys_(); - }, - preventExtensions: function preventExtensions(target) { - die(13); - } -}; -function asDynamicObservableObject(target, options) { - var _target$$mobx, _target$$mobx$proxy_; - assertProxies(); - target = asObservableObject(target, options); - return (_target$$mobx$proxy_ = (_target$$mobx = target[$mobx]).proxy_) != null ? _target$$mobx$proxy_ : _target$$mobx.proxy_ = new Proxy(target, objectProxyTraps); -} - -function hasInterceptors(interceptable) { - return interceptable.interceptors_ !== undefined && interceptable.interceptors_.length > 0; -} -function registerInterceptor(interceptable, handler) { - var interceptors = interceptable.interceptors_ || (interceptable.interceptors_ = []); - interceptors.push(handler); - return once(function () { - var idx = interceptors.indexOf(handler); - if (idx !== -1) { - interceptors.splice(idx, 1); - } - }); -} -function interceptChange(interceptable, change) { - var prevU = untrackedStart(); - try { - // Interceptor can modify the array, copy it to avoid concurrent modification, see #1950 - var interceptors = [].concat(interceptable.interceptors_ || []); - for (var i = 0, l = interceptors.length; i < l; i++) { - change = interceptors[i](change); - if (change && !change.type) { - die(14); - } - if (!change) { - break; - } - } - return change; - } finally { - untrackedEnd(prevU); - } -} - -function hasListeners(listenable) { - return listenable.changeListeners_ !== undefined && listenable.changeListeners_.length > 0; -} -function registerListener(listenable, handler) { - var listeners = listenable.changeListeners_ || (listenable.changeListeners_ = []); - listeners.push(handler); - return once(function () { - var idx = listeners.indexOf(handler); - if (idx !== -1) { - listeners.splice(idx, 1); - } - }); -} -function notifyListeners(listenable, change) { - var prevU = untrackedStart(); - var listeners = listenable.changeListeners_; - if (!listeners) { - return; - } - listeners = listeners.slice(); - for (var i = 0, l = listeners.length; i < l; i++) { - listeners[i](change); - } - untrackedEnd(prevU); -} - -function makeObservable(target, annotations, options) { - var adm = asObservableObject(target, options)[$mobx]; - startBatch(); - try { - var _annotations; - if ( true && annotations && target[storedAnnotationsSymbol]) { - die("makeObservable second arg must be nullish when using decorators. Mixing @decorator syntax with annotations is not supported."); - } - // Default to decorators - (_annotations = annotations) != null ? _annotations : annotations = collectStoredAnnotations(target); - // Annotate - ownKeys(annotations).forEach(function (key) { - return adm.make_(key, annotations[key]); - }); - } finally { - endBatch(); - } - return target; -} -// proto[keysSymbol] = new Set() -var keysSymbol = /*#__PURE__*/Symbol("mobx-keys"); -function makeAutoObservable(target, overrides, options) { - if (true) { - if (!isPlainObject(target) && !isPlainObject(Object.getPrototypeOf(target))) { - die("'makeAutoObservable' can only be used for classes that don't have a superclass"); - } - if (isObservableObject(target)) { - die("makeAutoObservable can only be used on objects not already made observable"); - } - } - // Optimization: avoid visiting protos - // Assumes that annotation.make_/.extend_ works the same for plain objects - if (isPlainObject(target)) { - return extendObservable(target, target, overrides, options); - } - var adm = asObservableObject(target, options)[$mobx]; - // Optimization: cache keys on proto - // Assumes makeAutoObservable can be called only once per object and can't be used in subclass - if (!target[keysSymbol]) { - var proto = Object.getPrototypeOf(target); - var keys = new Set([].concat(ownKeys(target), ownKeys(proto))); - keys["delete"]("constructor"); - keys["delete"]($mobx); - addHiddenProp(proto, keysSymbol, keys); - } - startBatch(); - try { - target[keysSymbol].forEach(function (key) { - return adm.make_(key, - // must pass "undefined" for { key: undefined } - !overrides ? true : key in overrides ? overrides[key] : true); - }); - } finally { - endBatch(); - } - return target; -} - -var SPLICE = "splice"; -var UPDATE = "update"; -var MAX_SPLICE_SIZE = 10000; // See e.g. https://github.com/mobxjs/mobx/issues/859 -var arrayTraps = { - get: function get(target, name) { - var adm = target[$mobx]; - if (name === $mobx) { - return adm; - } - if (name === "length") { - return adm.getArrayLength_(); - } - if (typeof name === "string" && !isNaN(name)) { - return adm.get_(parseInt(name)); - } - if (hasProp(arrayExtensions, name)) { - return arrayExtensions[name]; - } - return target[name]; - }, - set: function set(target, name, value) { - var adm = target[$mobx]; - if (name === "length") { - adm.setArrayLength_(value); - } - if (typeof name === "symbol" || isNaN(name)) { - target[name] = value; - } else { - // numeric string - adm.set_(parseInt(name), value); - } - return true; - }, - preventExtensions: function preventExtensions() { - die(15); - } -}; -var ObservableArrayAdministration = /*#__PURE__*/function () { - // this is the prop that gets proxied, so can't replace it! - - function ObservableArrayAdministration(name, enhancer, owned_, legacyMode_) { - if (name === void 0) { - name = true ? "ObservableArray@" + getNextId() : 0; - } - this.owned_ = void 0; - this.legacyMode_ = void 0; - this.atom_ = void 0; - this.values_ = []; - this.interceptors_ = void 0; - this.changeListeners_ = void 0; - this.enhancer_ = void 0; - this.dehancer = void 0; - this.proxy_ = void 0; - this.lastKnownLength_ = 0; - this.owned_ = owned_; - this.legacyMode_ = legacyMode_; - this.atom_ = new Atom(name); - this.enhancer_ = function (newV, oldV) { - return enhancer(newV, oldV, true ? name + "[..]" : 0); - }; - } - var _proto = ObservableArrayAdministration.prototype; - _proto.dehanceValue_ = function dehanceValue_(value) { - if (this.dehancer !== undefined) { - return this.dehancer(value); - } - return value; - }; - _proto.dehanceValues_ = function dehanceValues_(values) { - if (this.dehancer !== undefined && values.length > 0) { - return values.map(this.dehancer); - } - return values; - }; - _proto.intercept_ = function intercept_(handler) { - return registerInterceptor(this, handler); - }; - _proto.observe_ = function observe_(listener, fireImmediately) { - if (fireImmediately === void 0) { - fireImmediately = false; - } - if (fireImmediately) { - listener({ - observableKind: "array", - object: this.proxy_, - debugObjectName: this.atom_.name_, - type: "splice", - index: 0, - added: this.values_.slice(), - addedCount: this.values_.length, - removed: [], - removedCount: 0 - }); - } - return registerListener(this, listener); - }; - _proto.getArrayLength_ = function getArrayLength_() { - this.atom_.reportObserved(); - return this.values_.length; - }; - _proto.setArrayLength_ = function setArrayLength_(newLength) { - if (typeof newLength !== "number" || isNaN(newLength) || newLength < 0) { - die("Out of range: " + newLength); - } - var currentLength = this.values_.length; - if (newLength === currentLength) { - return; - } else if (newLength > currentLength) { - var newItems = new Array(newLength - currentLength); - for (var i = 0; i < newLength - currentLength; i++) { - newItems[i] = undefined; - } // No Array.fill everywhere... - this.spliceWithArray_(currentLength, 0, newItems); - } else { - this.spliceWithArray_(newLength, currentLength - newLength); - } - }; - _proto.updateArrayLength_ = function updateArrayLength_(oldLength, delta) { - if (oldLength !== this.lastKnownLength_) { - die(16); - } - this.lastKnownLength_ += delta; - if (this.legacyMode_ && delta > 0) { - reserveArrayBuffer(oldLength + delta + 1); - } - }; - _proto.spliceWithArray_ = function spliceWithArray_(index, deleteCount, newItems) { - var _this = this; - checkIfStateModificationsAreAllowed(this.atom_); - var length = this.values_.length; - if (index === undefined) { - index = 0; - } else if (index > length) { - index = length; - } else if (index < 0) { - index = Math.max(0, length + index); - } - if (arguments.length === 1) { - deleteCount = length - index; - } else if (deleteCount === undefined || deleteCount === null) { - deleteCount = 0; - } else { - deleteCount = Math.max(0, Math.min(deleteCount, length - index)); - } - if (newItems === undefined) { - newItems = EMPTY_ARRAY; - } - if (hasInterceptors(this)) { - var change = interceptChange(this, { - object: this.proxy_, - type: SPLICE, - index: index, - removedCount: deleteCount, - added: newItems - }); - if (!change) { - return EMPTY_ARRAY; - } - deleteCount = change.removedCount; - newItems = change.added; - } - newItems = newItems.length === 0 ? newItems : newItems.map(function (v) { - return _this.enhancer_(v, undefined); - }); - if (this.legacyMode_ || "development" !== "production") { - var lengthDelta = newItems.length - deleteCount; - this.updateArrayLength_(length, lengthDelta); // checks if internal array wasn't modified - } - - var res = this.spliceItemsIntoValues_(index, deleteCount, newItems); - if (deleteCount !== 0 || newItems.length !== 0) { - this.notifyArraySplice_(index, newItems, res); - } - return this.dehanceValues_(res); - }; - _proto.spliceItemsIntoValues_ = function spliceItemsIntoValues_(index, deleteCount, newItems) { - if (newItems.length < MAX_SPLICE_SIZE) { - var _this$values_; - return (_this$values_ = this.values_).splice.apply(_this$values_, [index, deleteCount].concat(newItems)); - } else { - // The items removed by the splice - var res = this.values_.slice(index, index + deleteCount); - // The items that that should remain at the end of the array - var oldItems = this.values_.slice(index + deleteCount); - // New length is the previous length + addition count - deletion count - this.values_.length += newItems.length - deleteCount; - for (var i = 0; i < newItems.length; i++) { - this.values_[index + i] = newItems[i]; - } - for (var _i = 0; _i < oldItems.length; _i++) { - this.values_[index + newItems.length + _i] = oldItems[_i]; - } - return res; - } - }; - _proto.notifyArrayChildUpdate_ = function notifyArrayChildUpdate_(index, newValue, oldValue) { - var notifySpy = !this.owned_ && isSpyEnabled(); - var notify = hasListeners(this); - var change = notify || notifySpy ? { - observableKind: "array", - object: this.proxy_, - type: UPDATE, - debugObjectName: this.atom_.name_, - index: index, - newValue: newValue, - oldValue: oldValue - } : null; - // The reason why this is on right hand side here (and not above), is this way the uglifier will drop it, but it won't - // cause any runtime overhead in development mode without NODE_ENV set, unless spying is enabled - if ( true && notifySpy) { - spyReportStart(change); - } - this.atom_.reportChanged(); - if (notify) { - notifyListeners(this, change); - } - if ( true && notifySpy) { - spyReportEnd(); - } - }; - _proto.notifyArraySplice_ = function notifyArraySplice_(index, added, removed) { - var notifySpy = !this.owned_ && isSpyEnabled(); - var notify = hasListeners(this); - var change = notify || notifySpy ? { - observableKind: "array", - object: this.proxy_, - debugObjectName: this.atom_.name_, - type: SPLICE, - index: index, - removed: removed, - added: added, - removedCount: removed.length, - addedCount: added.length - } : null; - if ( true && notifySpy) { - spyReportStart(change); - } - this.atom_.reportChanged(); - // conform: https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array/observe - if (notify) { - notifyListeners(this, change); - } - if ( true && notifySpy) { - spyReportEnd(); - } - }; - _proto.get_ = function get_(index) { - if (this.legacyMode_ && index >= this.values_.length) { - console.warn( true ? "[mobx.array] Attempt to read an array index (" + index + ") that is out of bounds (" + this.values_.length + "). Please check length first. Out of bound indices will not be tracked by MobX" : 0); - return undefined; - } - this.atom_.reportObserved(); - return this.dehanceValue_(this.values_[index]); - }; - _proto.set_ = function set_(index, newValue) { - var values = this.values_; - if (this.legacyMode_ && index > values.length) { - // out of bounds - die(17, index, values.length); - } - if (index < values.length) { - // update at index in range - checkIfStateModificationsAreAllowed(this.atom_); - var oldValue = values[index]; - if (hasInterceptors(this)) { - var change = interceptChange(this, { - type: UPDATE, - object: this.proxy_, - index: index, - newValue: newValue - }); - if (!change) { - return; - } - newValue = change.newValue; - } - newValue = this.enhancer_(newValue, oldValue); - var changed = newValue !== oldValue; - if (changed) { - values[index] = newValue; - this.notifyArrayChildUpdate_(index, newValue, oldValue); - } - } else { - // For out of bound index, we don't create an actual sparse array, - // but rather fill the holes with undefined (same as setArrayLength_). - // This could be considered a bug. - var newItems = new Array(index + 1 - values.length); - for (var i = 0; i < newItems.length - 1; i++) { - newItems[i] = undefined; - } // No Array.fill everywhere... - newItems[newItems.length - 1] = newValue; - this.spliceWithArray_(values.length, 0, newItems); - } - }; - return ObservableArrayAdministration; -}(); -function createObservableArray(initialValues, enhancer, name, owned) { - if (name === void 0) { - name = true ? "ObservableArray@" + getNextId() : 0; - } - if (owned === void 0) { - owned = false; - } - assertProxies(); - var adm = new ObservableArrayAdministration(name, enhancer, owned, false); - addHiddenFinalProp(adm.values_, $mobx, adm); - var proxy = new Proxy(adm.values_, arrayTraps); - adm.proxy_ = proxy; - if (initialValues && initialValues.length) { - var prev = allowStateChangesStart(true); - adm.spliceWithArray_(0, 0, initialValues); - allowStateChangesEnd(prev); - } - return proxy; -} -// eslint-disable-next-line -var arrayExtensions = { - clear: function clear() { - return this.splice(0); - }, - replace: function replace(newItems) { - var adm = this[$mobx]; - return adm.spliceWithArray_(0, adm.values_.length, newItems); - }, - // Used by JSON.stringify - toJSON: function toJSON() { - return this.slice(); - }, - /* - * functions that do alter the internal structure of the array, (based on lib.es6.d.ts) - * since these functions alter the inner structure of the array, the have side effects. - * Because the have side effects, they should not be used in computed function, - * and for that reason the do not call dependencyState.notifyObserved - */ - splice: function splice(index, deleteCount) { - for (var _len = arguments.length, newItems = new Array(_len > 2 ? _len - 2 : 0), _key = 2; _key < _len; _key++) { - newItems[_key - 2] = arguments[_key]; - } - var adm = this[$mobx]; - switch (arguments.length) { - case 0: - return []; - case 1: - return adm.spliceWithArray_(index); - case 2: - return adm.spliceWithArray_(index, deleteCount); - } - return adm.spliceWithArray_(index, deleteCount, newItems); - }, - spliceWithArray: function spliceWithArray(index, deleteCount, newItems) { - return this[$mobx].spliceWithArray_(index, deleteCount, newItems); - }, - push: function push() { - var adm = this[$mobx]; - for (var _len2 = arguments.length, items = new Array(_len2), _key2 = 0; _key2 < _len2; _key2++) { - items[_key2] = arguments[_key2]; - } - adm.spliceWithArray_(adm.values_.length, 0, items); - return adm.values_.length; - }, - pop: function pop() { - return this.splice(Math.max(this[$mobx].values_.length - 1, 0), 1)[0]; - }, - shift: function shift() { - return this.splice(0, 1)[0]; - }, - unshift: function unshift() { - var adm = this[$mobx]; - for (var _len3 = arguments.length, items = new Array(_len3), _key3 = 0; _key3 < _len3; _key3++) { - items[_key3] = arguments[_key3]; - } - adm.spliceWithArray_(0, 0, items); - return adm.values_.length; - }, - reverse: function reverse() { - // reverse by default mutates in place before returning the result - // which makes it both a 'derivation' and a 'mutation'. - if (globalState.trackingDerivation) { - die(37, "reverse"); - } - this.replace(this.slice().reverse()); - return this; - }, - sort: function sort() { - // sort by default mutates in place before returning the result - // which goes against all good practices. Let's not change the array in place! - if (globalState.trackingDerivation) { - die(37, "sort"); - } - var copy = this.slice(); - copy.sort.apply(copy, arguments); - this.replace(copy); - return this; - }, - remove: function remove(value) { - var adm = this[$mobx]; - var idx = adm.dehanceValues_(adm.values_).indexOf(value); - if (idx > -1) { - this.splice(idx, 1); - return true; - } - return false; - } -}; -/** - * Wrap function from prototype - * Without this, everything works as well, but this works - * faster as everything works on unproxied values - */ -addArrayExtension("concat", simpleFunc); -addArrayExtension("flat", simpleFunc); -addArrayExtension("includes", simpleFunc); -addArrayExtension("indexOf", simpleFunc); -addArrayExtension("join", simpleFunc); -addArrayExtension("lastIndexOf", simpleFunc); -addArrayExtension("slice", simpleFunc); -addArrayExtension("toString", simpleFunc); -addArrayExtension("toLocaleString", simpleFunc); -// map -addArrayExtension("every", mapLikeFunc); -addArrayExtension("filter", mapLikeFunc); -addArrayExtension("find", mapLikeFunc); -addArrayExtension("findIndex", mapLikeFunc); -addArrayExtension("flatMap", mapLikeFunc); -addArrayExtension("forEach", mapLikeFunc); -addArrayExtension("map", mapLikeFunc); -addArrayExtension("some", mapLikeFunc); -// reduce -addArrayExtension("reduce", reduceLikeFunc); -addArrayExtension("reduceRight", reduceLikeFunc); -function addArrayExtension(funcName, funcFactory) { - if (typeof Array.prototype[funcName] === "function") { - arrayExtensions[funcName] = funcFactory(funcName); - } -} -// Report and delegate to dehanced array -function simpleFunc(funcName) { - return function () { - var adm = this[$mobx]; - adm.atom_.reportObserved(); - var dehancedValues = adm.dehanceValues_(adm.values_); - return dehancedValues[funcName].apply(dehancedValues, arguments); - }; -} -// Make sure callbacks recieve correct array arg #2326 -function mapLikeFunc(funcName) { - return function (callback, thisArg) { - var _this2 = this; - var adm = this[$mobx]; - adm.atom_.reportObserved(); - var dehancedValues = adm.dehanceValues_(adm.values_); - return dehancedValues[funcName](function (element, index) { - return callback.call(thisArg, element, index, _this2); - }); - }; -} -// Make sure callbacks recieve correct array arg #2326 -function reduceLikeFunc(funcName) { - return function () { - var _this3 = this; - var adm = this[$mobx]; - adm.atom_.reportObserved(); - var dehancedValues = adm.dehanceValues_(adm.values_); - // #2432 - reduce behavior depends on arguments.length - var callback = arguments[0]; - arguments[0] = function (accumulator, currentValue, index) { - return callback(accumulator, currentValue, index, _this3); - }; - return dehancedValues[funcName].apply(dehancedValues, arguments); - }; -} -var isObservableArrayAdministration = /*#__PURE__*/createInstanceofPredicate("ObservableArrayAdministration", ObservableArrayAdministration); -function isObservableArray(thing) { - return isObject(thing) && isObservableArrayAdministration(thing[$mobx]); -} - -var _Symbol$iterator, _Symbol$toStringTag; -var ObservableMapMarker = {}; -var ADD = "add"; -var DELETE = "delete"; -// just extend Map? See also https://gist.github.com/nestharus/13b4d74f2ef4a2f4357dbd3fc23c1e54 -// But: https://github.com/mobxjs/mobx/issues/1556 -_Symbol$iterator = Symbol.iterator; -_Symbol$toStringTag = Symbol.toStringTag; -var ObservableMap = /*#__PURE__*/function () { - // hasMap, not hashMap >-). - - function ObservableMap(initialData, enhancer_, name_) { - var _this = this; - if (enhancer_ === void 0) { - enhancer_ = deepEnhancer; - } - if (name_ === void 0) { - name_ = true ? "ObservableMap@" + getNextId() : 0; - } - this.enhancer_ = void 0; - this.name_ = void 0; - this[$mobx] = ObservableMapMarker; - this.data_ = void 0; - this.hasMap_ = void 0; - this.keysAtom_ = void 0; - this.interceptors_ = void 0; - this.changeListeners_ = void 0; - this.dehancer = void 0; - this.enhancer_ = enhancer_; - this.name_ = name_; - if (!isFunction(Map)) { - die(18); - } - this.keysAtom_ = createAtom( true ? this.name_ + ".keys()" : 0); - this.data_ = new Map(); - this.hasMap_ = new Map(); - allowStateChanges(true, function () { - _this.merge(initialData); - }); - } - var _proto = ObservableMap.prototype; - _proto.has_ = function has_(key) { - return this.data_.has(key); - }; - _proto.has = function has(key) { - var _this2 = this; - if (!globalState.trackingDerivation) { - return this.has_(key); - } - var entry = this.hasMap_.get(key); - if (!entry) { - var newEntry = entry = new ObservableValue(this.has_(key), referenceEnhancer, true ? this.name_ + "." + stringifyKey(key) + "?" : 0, false); - this.hasMap_.set(key, newEntry); - onBecomeUnobserved(newEntry, function () { - return _this2.hasMap_["delete"](key); - }); - } - return entry.get(); - }; - _proto.set = function set(key, value) { - var hasKey = this.has_(key); - if (hasInterceptors(this)) { - var change = interceptChange(this, { - type: hasKey ? UPDATE : ADD, - object: this, - newValue: value, - name: key - }); - if (!change) { - return this; - } - value = change.newValue; - } - if (hasKey) { - this.updateValue_(key, value); - } else { - this.addValue_(key, value); - } - return this; - }; - _proto["delete"] = function _delete(key) { - var _this3 = this; - checkIfStateModificationsAreAllowed(this.keysAtom_); - if (hasInterceptors(this)) { - var change = interceptChange(this, { - type: DELETE, - object: this, - name: key - }); - if (!change) { - return false; - } - } - if (this.has_(key)) { - var notifySpy = isSpyEnabled(); - var notify = hasListeners(this); - var _change = notify || notifySpy ? { - observableKind: "map", - debugObjectName: this.name_, - type: DELETE, - object: this, - oldValue: this.data_.get(key).value_, - name: key - } : null; - if ( true && notifySpy) { - spyReportStart(_change); - } // TODO fix type - transaction(function () { - var _this3$hasMap_$get; - _this3.keysAtom_.reportChanged(); - (_this3$hasMap_$get = _this3.hasMap_.get(key)) == null ? void 0 : _this3$hasMap_$get.setNewValue_(false); - var observable = _this3.data_.get(key); - observable.setNewValue_(undefined); - _this3.data_["delete"](key); - }); - if (notify) { - notifyListeners(this, _change); - } - if ( true && notifySpy) { - spyReportEnd(); - } - return true; - } - return false; - }; - _proto.updateValue_ = function updateValue_(key, newValue) { - var observable = this.data_.get(key); - newValue = observable.prepareNewValue_(newValue); - if (newValue !== globalState.UNCHANGED) { - var notifySpy = isSpyEnabled(); - var notify = hasListeners(this); - var change = notify || notifySpy ? { - observableKind: "map", - debugObjectName: this.name_, - type: UPDATE, - object: this, - oldValue: observable.value_, - name: key, - newValue: newValue - } : null; - if ( true && notifySpy) { - spyReportStart(change); - } // TODO fix type - observable.setNewValue_(newValue); - if (notify) { - notifyListeners(this, change); - } - if ( true && notifySpy) { - spyReportEnd(); - } - } - }; - _proto.addValue_ = function addValue_(key, newValue) { - var _this4 = this; - checkIfStateModificationsAreAllowed(this.keysAtom_); - transaction(function () { - var _this4$hasMap_$get; - var observable = new ObservableValue(newValue, _this4.enhancer_, true ? _this4.name_ + "." + stringifyKey(key) : 0, false); - _this4.data_.set(key, observable); - newValue = observable.value_; // value might have been changed - (_this4$hasMap_$get = _this4.hasMap_.get(key)) == null ? void 0 : _this4$hasMap_$get.setNewValue_(true); - _this4.keysAtom_.reportChanged(); - }); - var notifySpy = isSpyEnabled(); - var notify = hasListeners(this); - var change = notify || notifySpy ? { - observableKind: "map", - debugObjectName: this.name_, - type: ADD, - object: this, - name: key, - newValue: newValue - } : null; - if ( true && notifySpy) { - spyReportStart(change); - } // TODO fix type - if (notify) { - notifyListeners(this, change); - } - if ( true && notifySpy) { - spyReportEnd(); - } - }; - _proto.get = function get(key) { - if (this.has(key)) { - return this.dehanceValue_(this.data_.get(key).get()); - } - return this.dehanceValue_(undefined); - }; - _proto.dehanceValue_ = function dehanceValue_(value) { - if (this.dehancer !== undefined) { - return this.dehancer(value); - } - return value; - }; - _proto.keys = function keys() { - this.keysAtom_.reportObserved(); - return this.data_.keys(); - }; - _proto.values = function values() { - var self = this; - var keys = this.keys(); - return makeIterable({ - next: function next() { - var _keys$next = keys.next(), - done = _keys$next.done, - value = _keys$next.value; - return { - done: done, - value: done ? undefined : self.get(value) - }; - } - }); - }; - _proto.entries = function entries() { - var self = this; - var keys = this.keys(); - return makeIterable({ - next: function next() { - var _keys$next2 = keys.next(), - done = _keys$next2.done, - value = _keys$next2.value; - return { - done: done, - value: done ? undefined : [value, self.get(value)] - }; - } - }); - }; - _proto[_Symbol$iterator] = function () { - return this.entries(); - }; - _proto.forEach = function forEach(callback, thisArg) { - for (var _iterator = _createForOfIteratorHelperLoose(this), _step; !(_step = _iterator()).done;) { - var _step$value = _step.value, - key = _step$value[0], - value = _step$value[1]; - callback.call(thisArg, value, key, this); - } - } - /** Merge another object into this object, returns this. */; - _proto.merge = function merge(other) { - var _this5 = this; - if (isObservableMap(other)) { - other = new Map(other); - } - transaction(function () { - if (isPlainObject(other)) { - getPlainObjectKeys(other).forEach(function (key) { - return _this5.set(key, other[key]); - }); - } else if (Array.isArray(other)) { - other.forEach(function (_ref) { - var key = _ref[0], - value = _ref[1]; - return _this5.set(key, value); - }); - } else if (isES6Map(other)) { - if (other.constructor !== Map) { - die(19, other); - } - other.forEach(function (value, key) { - return _this5.set(key, value); - }); - } else if (other !== null && other !== undefined) { - die(20, other); - } - }); - return this; - }; - _proto.clear = function clear() { - var _this6 = this; - transaction(function () { - untracked(function () { - for (var _iterator2 = _createForOfIteratorHelperLoose(_this6.keys()), _step2; !(_step2 = _iterator2()).done;) { - var key = _step2.value; - _this6["delete"](key); - } - }); - }); - }; - _proto.replace = function replace(values) { - var _this7 = this; - // Implementation requirements: - // - respect ordering of replacement map - // - allow interceptors to run and potentially prevent individual operations - // - don't recreate observables that already exist in original map (so we don't destroy existing subscriptions) - // - don't _keysAtom.reportChanged if the keys of resulting map are indentical (order matters!) - // - note that result map may differ from replacement map due to the interceptors - transaction(function () { - // Convert to map so we can do quick key lookups - var replacementMap = convertToMap(values); - var orderedData = new Map(); - // Used for optimization - var keysReportChangedCalled = false; - // Delete keys that don't exist in replacement map - // if the key deletion is prevented by interceptor - // add entry at the beginning of the result map - for (var _iterator3 = _createForOfIteratorHelperLoose(_this7.data_.keys()), _step3; !(_step3 = _iterator3()).done;) { - var key = _step3.value; - // Concurrently iterating/deleting keys - // iterator should handle this correctly - if (!replacementMap.has(key)) { - var deleted = _this7["delete"](key); - // Was the key removed? - if (deleted) { - // _keysAtom.reportChanged() was already called - keysReportChangedCalled = true; - } else { - // Delete prevented by interceptor - var value = _this7.data_.get(key); - orderedData.set(key, value); - } - } - } - // Merge entries - for (var _iterator4 = _createForOfIteratorHelperLoose(replacementMap.entries()), _step4; !(_step4 = _iterator4()).done;) { - var _step4$value = _step4.value, - _key = _step4$value[0], - _value = _step4$value[1]; - // We will want to know whether a new key is added - var keyExisted = _this7.data_.has(_key); - // Add or update value - _this7.set(_key, _value); - // The addition could have been prevent by interceptor - if (_this7.data_.has(_key)) { - // The update could have been prevented by interceptor - // and also we want to preserve existing values - // so use value from _data map (instead of replacement map) - var _value2 = _this7.data_.get(_key); - orderedData.set(_key, _value2); - // Was a new key added? - if (!keyExisted) { - // _keysAtom.reportChanged() was already called - keysReportChangedCalled = true; - } - } - } - // Check for possible key order change - if (!keysReportChangedCalled) { - if (_this7.data_.size !== orderedData.size) { - // If size differs, keys are definitely modified - _this7.keysAtom_.reportChanged(); - } else { - var iter1 = _this7.data_.keys(); - var iter2 = orderedData.keys(); - var next1 = iter1.next(); - var next2 = iter2.next(); - while (!next1.done) { - if (next1.value !== next2.value) { - _this7.keysAtom_.reportChanged(); - break; - } - next1 = iter1.next(); - next2 = iter2.next(); - } - } - } - // Use correctly ordered map - _this7.data_ = orderedData; - }); - return this; - }; - _proto.toString = function toString() { - return "[object ObservableMap]"; - }; - _proto.toJSON = function toJSON() { - return Array.from(this); - }; - /** - * Observes this object. Triggers for the events 'add', 'update' and 'delete'. - * See: https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Object/observe - * for callback details - */ - _proto.observe_ = function observe_(listener, fireImmediately) { - if ( true && fireImmediately === true) { - die("`observe` doesn't support fireImmediately=true in combination with maps."); - } - return registerListener(this, listener); - }; - _proto.intercept_ = function intercept_(handler) { - return registerInterceptor(this, handler); - }; - _createClass(ObservableMap, [{ - key: "size", - get: function get() { - this.keysAtom_.reportObserved(); - return this.data_.size; - } - }, { - key: _Symbol$toStringTag, - get: function get() { - return "Map"; - } - }]); - return ObservableMap; -}(); -// eslint-disable-next-line -var isObservableMap = /*#__PURE__*/createInstanceofPredicate("ObservableMap", ObservableMap); -function convertToMap(dataStructure) { - if (isES6Map(dataStructure) || isObservableMap(dataStructure)) { - return dataStructure; - } else if (Array.isArray(dataStructure)) { - return new Map(dataStructure); - } else if (isPlainObject(dataStructure)) { - var map = new Map(); - for (var key in dataStructure) { - map.set(key, dataStructure[key]); - } - return map; - } else { - return die(21, dataStructure); - } -} - -var _Symbol$iterator$1, _Symbol$toStringTag$1; -var ObservableSetMarker = {}; -_Symbol$iterator$1 = Symbol.iterator; -_Symbol$toStringTag$1 = Symbol.toStringTag; -var ObservableSet = /*#__PURE__*/function () { - function ObservableSet(initialData, enhancer, name_) { - if (enhancer === void 0) { - enhancer = deepEnhancer; - } - if (name_ === void 0) { - name_ = true ? "ObservableSet@" + getNextId() : 0; - } - this.name_ = void 0; - this[$mobx] = ObservableSetMarker; - this.data_ = new Set(); - this.atom_ = void 0; - this.changeListeners_ = void 0; - this.interceptors_ = void 0; - this.dehancer = void 0; - this.enhancer_ = void 0; - this.name_ = name_; - if (!isFunction(Set)) { - die(22); - } - this.atom_ = createAtom(this.name_); - this.enhancer_ = function (newV, oldV) { - return enhancer(newV, oldV, name_); - }; - if (initialData) { - this.replace(initialData); - } - } - var _proto = ObservableSet.prototype; - _proto.dehanceValue_ = function dehanceValue_(value) { - if (this.dehancer !== undefined) { - return this.dehancer(value); - } - return value; - }; - _proto.clear = function clear() { - var _this = this; - transaction(function () { - untracked(function () { - for (var _iterator = _createForOfIteratorHelperLoose(_this.data_.values()), _step; !(_step = _iterator()).done;) { - var value = _step.value; - _this["delete"](value); - } - }); - }); - }; - _proto.forEach = function forEach(callbackFn, thisArg) { - for (var _iterator2 = _createForOfIteratorHelperLoose(this), _step2; !(_step2 = _iterator2()).done;) { - var value = _step2.value; - callbackFn.call(thisArg, value, value, this); - } - }; - _proto.add = function add(value) { - var _this2 = this; - checkIfStateModificationsAreAllowed(this.atom_); - if (hasInterceptors(this)) { - var change = interceptChange(this, { - type: ADD, - object: this, - newValue: value - }); - if (!change) { - return this; - } - // ideally, value = change.value would be done here, so that values can be - // changed by interceptor. Same applies for other Set and Map api's. - } - - if (!this.has(value)) { - transaction(function () { - _this2.data_.add(_this2.enhancer_(value, undefined)); - _this2.atom_.reportChanged(); - }); - var notifySpy = true && isSpyEnabled(); - var notify = hasListeners(this); - var _change = notify || notifySpy ? { - observableKind: "set", - debugObjectName: this.name_, - type: ADD, - object: this, - newValue: value - } : null; - if (notifySpy && "development" !== "production") { - spyReportStart(_change); - } - if (notify) { - notifyListeners(this, _change); - } - if (notifySpy && "development" !== "production") { - spyReportEnd(); - } - } - return this; - }; - _proto["delete"] = function _delete(value) { - var _this3 = this; - if (hasInterceptors(this)) { - var change = interceptChange(this, { - type: DELETE, - object: this, - oldValue: value - }); - if (!change) { - return false; - } - } - if (this.has(value)) { - var notifySpy = true && isSpyEnabled(); - var notify = hasListeners(this); - var _change2 = notify || notifySpy ? { - observableKind: "set", - debugObjectName: this.name_, - type: DELETE, - object: this, - oldValue: value - } : null; - if (notifySpy && "development" !== "production") { - spyReportStart(_change2); - } - transaction(function () { - _this3.atom_.reportChanged(); - _this3.data_["delete"](value); - }); - if (notify) { - notifyListeners(this, _change2); - } - if (notifySpy && "development" !== "production") { - spyReportEnd(); - } - return true; - } - return false; - }; - _proto.has = function has(value) { - this.atom_.reportObserved(); - return this.data_.has(this.dehanceValue_(value)); - }; - _proto.entries = function entries() { - var nextIndex = 0; - var keys = Array.from(this.keys()); - var values = Array.from(this.values()); - return makeIterable({ - next: function next() { - var index = nextIndex; - nextIndex += 1; - return index < values.length ? { - value: [keys[index], values[index]], - done: false - } : { - done: true - }; - } - }); - }; - _proto.keys = function keys() { - return this.values(); - }; - _proto.values = function values() { - this.atom_.reportObserved(); - var self = this; - var nextIndex = 0; - var observableValues = Array.from(this.data_.values()); - return makeIterable({ - next: function next() { - return nextIndex < observableValues.length ? { - value: self.dehanceValue_(observableValues[nextIndex++]), - done: false - } : { - done: true - }; - } - }); - }; - _proto.replace = function replace(other) { - var _this4 = this; - if (isObservableSet(other)) { - other = new Set(other); - } - transaction(function () { - if (Array.isArray(other)) { - _this4.clear(); - other.forEach(function (value) { - return _this4.add(value); - }); - } else if (isES6Set(other)) { - _this4.clear(); - other.forEach(function (value) { - return _this4.add(value); - }); - } else if (other !== null && other !== undefined) { - die("Cannot initialize set from " + other); - } - }); - return this; - }; - _proto.observe_ = function observe_(listener, fireImmediately) { - // ... 'fireImmediately' could also be true? - if ( true && fireImmediately === true) { - die("`observe` doesn't support fireImmediately=true in combination with sets."); - } - return registerListener(this, listener); - }; - _proto.intercept_ = function intercept_(handler) { - return registerInterceptor(this, handler); - }; - _proto.toJSON = function toJSON() { - return Array.from(this); - }; - _proto.toString = function toString() { - return "[object ObservableSet]"; - }; - _proto[_Symbol$iterator$1] = function () { - return this.values(); - }; - _createClass(ObservableSet, [{ - key: "size", - get: function get() { - this.atom_.reportObserved(); - return this.data_.size; - } - }, { - key: _Symbol$toStringTag$1, - get: function get() { - return "Set"; - } - }]); - return ObservableSet; -}(); -// eslint-disable-next-line -var isObservableSet = /*#__PURE__*/createInstanceofPredicate("ObservableSet", ObservableSet); - -var descriptorCache = /*#__PURE__*/Object.create(null); -var REMOVE = "remove"; -var ObservableObjectAdministration = /*#__PURE__*/function () { - function ObservableObjectAdministration(target_, values_, name_, - // Used anytime annotation is not explicitely provided - defaultAnnotation_) { - if (values_ === void 0) { - values_ = new Map(); - } - if (defaultAnnotation_ === void 0) { - defaultAnnotation_ = autoAnnotation; - } - this.target_ = void 0; - this.values_ = void 0; - this.name_ = void 0; - this.defaultAnnotation_ = void 0; - this.keysAtom_ = void 0; - this.changeListeners_ = void 0; - this.interceptors_ = void 0; - this.proxy_ = void 0; - this.isPlainObject_ = void 0; - this.appliedAnnotations_ = void 0; - this.pendingKeys_ = void 0; - this.target_ = target_; - this.values_ = values_; - this.name_ = name_; - this.defaultAnnotation_ = defaultAnnotation_; - this.keysAtom_ = new Atom( true ? this.name_ + ".keys" : 0); - // Optimization: we use this frequently - this.isPlainObject_ = isPlainObject(this.target_); - if ( true && !isAnnotation(this.defaultAnnotation_)) { - die("defaultAnnotation must be valid annotation"); - } - if (true) { - // Prepare structure for tracking which fields were already annotated - this.appliedAnnotations_ = {}; - } - } - var _proto = ObservableObjectAdministration.prototype; - _proto.getObservablePropValue_ = function getObservablePropValue_(key) { - return this.values_.get(key).get(); - }; - _proto.setObservablePropValue_ = function setObservablePropValue_(key, newValue) { - var observable = this.values_.get(key); - if (observable instanceof ComputedValue) { - observable.set(newValue); - return true; - } - // intercept - if (hasInterceptors(this)) { - var change = interceptChange(this, { - type: UPDATE, - object: this.proxy_ || this.target_, - name: key, - newValue: newValue - }); - if (!change) { - return null; - } - newValue = change.newValue; - } - newValue = observable.prepareNewValue_(newValue); - // notify spy & observers - if (newValue !== globalState.UNCHANGED) { - var notify = hasListeners(this); - var notifySpy = true && isSpyEnabled(); - var _change = notify || notifySpy ? { - type: UPDATE, - observableKind: "object", - debugObjectName: this.name_, - object: this.proxy_ || this.target_, - oldValue: observable.value_, - name: key, - newValue: newValue - } : null; - if ( true && notifySpy) { - spyReportStart(_change); - } - observable.setNewValue_(newValue); - if (notify) { - notifyListeners(this, _change); - } - if ( true && notifySpy) { - spyReportEnd(); - } - } - return true; - }; - _proto.get_ = function get_(key) { - if (globalState.trackingDerivation && !hasProp(this.target_, key)) { - // Key doesn't exist yet, subscribe for it in case it's added later - this.has_(key); - } - return this.target_[key]; - } - /** - * @param {PropertyKey} key - * @param {any} value - * @param {Annotation|boolean} annotation true - use default annotation, false - copy as is - * @param {boolean} proxyTrap whether it's called from proxy trap - * @returns {boolean|null} true on success, false on failure (proxyTrap + non-configurable), null when cancelled by interceptor - */; - _proto.set_ = function set_(key, value, proxyTrap) { - if (proxyTrap === void 0) { - proxyTrap = false; - } - // Don't use .has(key) - we care about own - if (hasProp(this.target_, key)) { - // Existing prop - if (this.values_.has(key)) { - // Observable (can be intercepted) - return this.setObservablePropValue_(key, value); - } else if (proxyTrap) { - // Non-observable - proxy - return Reflect.set(this.target_, key, value); - } else { - // Non-observable - this.target_[key] = value; - return true; - } - } else { - // New prop - return this.extend_(key, { - value: value, - enumerable: true, - writable: true, - configurable: true - }, this.defaultAnnotation_, proxyTrap); - } - } - // Trap for "in" - ; - _proto.has_ = function has_(key) { - if (!globalState.trackingDerivation) { - // Skip key subscription outside derivation - return key in this.target_; - } - this.pendingKeys_ || (this.pendingKeys_ = new Map()); - var entry = this.pendingKeys_.get(key); - if (!entry) { - entry = new ObservableValue(key in this.target_, referenceEnhancer, true ? this.name_ + "." + stringifyKey(key) + "?" : 0, false); - this.pendingKeys_.set(key, entry); - } - return entry.get(); - } - /** - * @param {PropertyKey} key - * @param {Annotation|boolean} annotation true - use default annotation, false - ignore prop - */; - _proto.make_ = function make_(key, annotation) { - if (annotation === true) { - annotation = this.defaultAnnotation_; - } - if (annotation === false) { - return; - } - assertAnnotable(this, annotation, key); - if (!(key in this.target_)) { - var _this$target_$storedA; - // Throw on missing key, except for decorators: - // Decorator annotations are collected from whole prototype chain. - // When called from super() some props may not exist yet. - // However we don't have to worry about missing prop, - // because the decorator must have been applied to something. - if ((_this$target_$storedA = this.target_[storedAnnotationsSymbol]) != null && _this$target_$storedA[key]) { - return; // will be annotated by subclass constructor - } else { - die(1, annotation.annotationType_, this.name_ + "." + key.toString()); - } - } - var source = this.target_; - while (source && source !== objectPrototype) { - var descriptor = getDescriptor(source, key); - if (descriptor) { - var outcome = annotation.make_(this, key, descriptor, source); - if (outcome === 0 /* Cancel */) { - return; - } - if (outcome === 1 /* Break */) { - break; - } - } - source = Object.getPrototypeOf(source); - } - recordAnnotationApplied(this, annotation, key); - } - /** - * @param {PropertyKey} key - * @param {PropertyDescriptor} descriptor - * @param {Annotation|boolean} annotation true - use default annotation, false - copy as is - * @param {boolean} proxyTrap whether it's called from proxy trap - * @returns {boolean|null} true on success, false on failure (proxyTrap + non-configurable), null when cancelled by interceptor - */; - _proto.extend_ = function extend_(key, descriptor, annotation, proxyTrap) { - if (proxyTrap === void 0) { - proxyTrap = false; - } - if (annotation === true) { - annotation = this.defaultAnnotation_; - } - if (annotation === false) { - return this.defineProperty_(key, descriptor, proxyTrap); - } - assertAnnotable(this, annotation, key); - var outcome = annotation.extend_(this, key, descriptor, proxyTrap); - if (outcome) { - recordAnnotationApplied(this, annotation, key); - } - return outcome; - } - /** - * @param {PropertyKey} key - * @param {PropertyDescriptor} descriptor - * @param {boolean} proxyTrap whether it's called from proxy trap - * @returns {boolean|null} true on success, false on failure (proxyTrap + non-configurable), null when cancelled by interceptor - */; - _proto.defineProperty_ = function defineProperty_(key, descriptor, proxyTrap) { - if (proxyTrap === void 0) { - proxyTrap = false; - } - try { - startBatch(); - // Delete - var deleteOutcome = this.delete_(key); - if (!deleteOutcome) { - // Failure or intercepted - return deleteOutcome; - } - // ADD interceptor - if (hasInterceptors(this)) { - var change = interceptChange(this, { - object: this.proxy_ || this.target_, - name: key, - type: ADD, - newValue: descriptor.value - }); - if (!change) { - return null; - } - var newValue = change.newValue; - if (descriptor.value !== newValue) { - descriptor = _extends({}, descriptor, { - value: newValue - }); - } - } - // Define - if (proxyTrap) { - if (!Reflect.defineProperty(this.target_, key, descriptor)) { - return false; - } - } else { - defineProperty(this.target_, key, descriptor); - } - // Notify - this.notifyPropertyAddition_(key, descriptor.value); - } finally { - endBatch(); - } - return true; - } - // If original descriptor becomes relevant, move this to annotation directly - ; - _proto.defineObservableProperty_ = function defineObservableProperty_(key, value, enhancer, proxyTrap) { - if (proxyTrap === void 0) { - proxyTrap = false; - } - try { - startBatch(); - // Delete - var deleteOutcome = this.delete_(key); - if (!deleteOutcome) { - // Failure or intercepted - return deleteOutcome; - } - // ADD interceptor - if (hasInterceptors(this)) { - var change = interceptChange(this, { - object: this.proxy_ || this.target_, - name: key, - type: ADD, - newValue: value - }); - if (!change) { - return null; - } - value = change.newValue; - } - var cachedDescriptor = getCachedObservablePropDescriptor(key); - var descriptor = { - configurable: globalState.safeDescriptors ? this.isPlainObject_ : true, - enumerable: true, - get: cachedDescriptor.get, - set: cachedDescriptor.set - }; - // Define - if (proxyTrap) { - if (!Reflect.defineProperty(this.target_, key, descriptor)) { - return false; - } - } else { - defineProperty(this.target_, key, descriptor); - } - var observable = new ObservableValue(value, enhancer, true ? this.name_ + "." + key.toString() : 0, false); - this.values_.set(key, observable); - // Notify (value possibly changed by ObservableValue) - this.notifyPropertyAddition_(key, observable.value_); - } finally { - endBatch(); - } - return true; - } - // If original descriptor becomes relevant, move this to annotation directly - ; - _proto.defineComputedProperty_ = function defineComputedProperty_(key, options, proxyTrap) { - if (proxyTrap === void 0) { - proxyTrap = false; - } - try { - startBatch(); - // Delete - var deleteOutcome = this.delete_(key); - if (!deleteOutcome) { - // Failure or intercepted - return deleteOutcome; - } - // ADD interceptor - if (hasInterceptors(this)) { - var change = interceptChange(this, { - object: this.proxy_ || this.target_, - name: key, - type: ADD, - newValue: undefined - }); - if (!change) { - return null; - } - } - options.name || (options.name = true ? this.name_ + "." + key.toString() : 0); - options.context = this.proxy_ || this.target_; - var cachedDescriptor = getCachedObservablePropDescriptor(key); - var descriptor = { - configurable: globalState.safeDescriptors ? this.isPlainObject_ : true, - enumerable: false, - get: cachedDescriptor.get, - set: cachedDescriptor.set - }; - // Define - if (proxyTrap) { - if (!Reflect.defineProperty(this.target_, key, descriptor)) { - return false; - } - } else { - defineProperty(this.target_, key, descriptor); - } - this.values_.set(key, new ComputedValue(options)); - // Notify - this.notifyPropertyAddition_(key, undefined); - } finally { - endBatch(); - } - return true; - } - /** - * @param {PropertyKey} key - * @param {PropertyDescriptor} descriptor - * @param {boolean} proxyTrap whether it's called from proxy trap - * @returns {boolean|null} true on success, false on failure (proxyTrap + non-configurable), null when cancelled by interceptor - */; - _proto.delete_ = function delete_(key, proxyTrap) { - if (proxyTrap === void 0) { - proxyTrap = false; - } - // No such prop - if (!hasProp(this.target_, key)) { - return true; - } - // Intercept - if (hasInterceptors(this)) { - var change = interceptChange(this, { - object: this.proxy_ || this.target_, - name: key, - type: REMOVE - }); - // Cancelled - if (!change) { - return null; - } - } - // Delete - try { - var _this$pendingKeys_, _this$pendingKeys_$ge; - startBatch(); - var notify = hasListeners(this); - var notifySpy = true && isSpyEnabled(); - var observable = this.values_.get(key); - // Value needed for spies/listeners - var value = undefined; - // Optimization: don't pull the value unless we will need it - if (!observable && (notify || notifySpy)) { - var _getDescriptor; - value = (_getDescriptor = getDescriptor(this.target_, key)) == null ? void 0 : _getDescriptor.value; - } - // delete prop (do first, may fail) - if (proxyTrap) { - if (!Reflect.deleteProperty(this.target_, key)) { - return false; - } - } else { - delete this.target_[key]; - } - // Allow re-annotating this field - if (true) { - delete this.appliedAnnotations_[key]; - } - // Clear observable - if (observable) { - this.values_["delete"](key); - // for computed, value is undefined - if (observable instanceof ObservableValue) { - value = observable.value_; - } - // Notify: autorun(() => obj[key]), see #1796 - propagateChanged(observable); - } - // Notify "keys/entries/values" observers - this.keysAtom_.reportChanged(); - // Notify "has" observers - // "in" as it may still exist in proto - (_this$pendingKeys_ = this.pendingKeys_) == null ? void 0 : (_this$pendingKeys_$ge = _this$pendingKeys_.get(key)) == null ? void 0 : _this$pendingKeys_$ge.set(key in this.target_); - // Notify spies/listeners - if (notify || notifySpy) { - var _change2 = { - type: REMOVE, - observableKind: "object", - object: this.proxy_ || this.target_, - debugObjectName: this.name_, - oldValue: value, - name: key - }; - if ( true && notifySpy) { - spyReportStart(_change2); - } - if (notify) { - notifyListeners(this, _change2); - } - if ( true && notifySpy) { - spyReportEnd(); - } - } - } finally { - endBatch(); - } - return true; - } - /** - * Observes this object. Triggers for the events 'add', 'update' and 'delete'. - * See: https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Object/observe - * for callback details - */; - _proto.observe_ = function observe_(callback, fireImmediately) { - if ( true && fireImmediately === true) { - die("`observe` doesn't support the fire immediately property for observable objects."); - } - return registerListener(this, callback); - }; - _proto.intercept_ = function intercept_(handler) { - return registerInterceptor(this, handler); - }; - _proto.notifyPropertyAddition_ = function notifyPropertyAddition_(key, value) { - var _this$pendingKeys_2, _this$pendingKeys_2$g; - var notify = hasListeners(this); - var notifySpy = true && isSpyEnabled(); - if (notify || notifySpy) { - var change = notify || notifySpy ? { - type: ADD, - observableKind: "object", - debugObjectName: this.name_, - object: this.proxy_ || this.target_, - name: key, - newValue: value - } : null; - if ( true && notifySpy) { - spyReportStart(change); - } - if (notify) { - notifyListeners(this, change); - } - if ( true && notifySpy) { - spyReportEnd(); - } - } - (_this$pendingKeys_2 = this.pendingKeys_) == null ? void 0 : (_this$pendingKeys_2$g = _this$pendingKeys_2.get(key)) == null ? void 0 : _this$pendingKeys_2$g.set(true); - // Notify "keys/entries/values" observers - this.keysAtom_.reportChanged(); - }; - _proto.ownKeys_ = function ownKeys_() { - this.keysAtom_.reportObserved(); - return ownKeys(this.target_); - }; - _proto.keys_ = function keys_() { - // Returns enumerable && own, but unfortunately keysAtom will report on ANY key change. - // There is no way to distinguish between Object.keys(object) and Reflect.ownKeys(object) - both are handled by ownKeys trap. - // We can either over-report in Object.keys(object) or under-report in Reflect.ownKeys(object) - // We choose to over-report in Object.keys(object), because: - // - typically it's used with simple data objects - // - when symbolic/non-enumerable keys are relevant Reflect.ownKeys works as expected - this.keysAtom_.reportObserved(); - return Object.keys(this.target_); - }; - return ObservableObjectAdministration; -}(); -function asObservableObject(target, options) { - var _options$name; - if ( true && options && isObservableObject(target)) { - die("Options can't be provided for already observable objects."); - } - if (hasProp(target, $mobx)) { - if ( true && !(getAdministration(target) instanceof ObservableObjectAdministration)) { - die("Cannot convert '" + getDebugName(target) + "' into observable object:" + "\nThe target is already observable of different type." + "\nExtending builtins is not supported."); - } - return target; - } - if ( true && !Object.isExtensible(target)) { - die("Cannot make the designated object observable; it is not extensible"); - } - var name = (_options$name = options == null ? void 0 : options.name) != null ? _options$name : true ? (isPlainObject(target) ? "ObservableObject" : target.constructor.name) + "@" + getNextId() : 0; - var adm = new ObservableObjectAdministration(target, new Map(), String(name), getAnnotationFromOptions(options)); - addHiddenProp(target, $mobx, adm); - return target; -} -var isObservableObjectAdministration = /*#__PURE__*/createInstanceofPredicate("ObservableObjectAdministration", ObservableObjectAdministration); -function getCachedObservablePropDescriptor(key) { - return descriptorCache[key] || (descriptorCache[key] = { - get: function get() { - return this[$mobx].getObservablePropValue_(key); - }, - set: function set(value) { - return this[$mobx].setObservablePropValue_(key, value); - } - }); -} -function isObservableObject(thing) { - if (isObject(thing)) { - return isObservableObjectAdministration(thing[$mobx]); - } - return false; -} -function recordAnnotationApplied(adm, annotation, key) { - var _adm$target_$storedAn; - if (true) { - adm.appliedAnnotations_[key] = annotation; - } - // Remove applied decorator annotation so we don't try to apply it again in subclass constructor - (_adm$target_$storedAn = adm.target_[storedAnnotationsSymbol]) == null ? true : delete _adm$target_$storedAn[key]; -} -function assertAnnotable(adm, annotation, key) { - // Valid annotation - if ( true && !isAnnotation(annotation)) { - die("Cannot annotate '" + adm.name_ + "." + key.toString() + "': Invalid annotation."); - } - /* - // Configurable, not sealed, not frozen - // Possibly not needed, just a little better error then the one thrown by engine. - // Cases where this would be useful the most (subclass field initializer) are not interceptable by this. - if (__DEV__) { - const configurable = getDescriptor(adm.target_, key)?.configurable - const frozen = Object.isFrozen(adm.target_) - const sealed = Object.isSealed(adm.target_) - if (!configurable || frozen || sealed) { - const fieldName = `${adm.name_}.${key.toString()}` - const requestedAnnotationType = annotation.annotationType_ - let error = `Cannot apply '${requestedAnnotationType}' to '${fieldName}':` - if (frozen) { - error += `\nObject is frozen.` - } - if (sealed) { - error += `\nObject is sealed.` - } - if (!configurable) { - error += `\nproperty is not configurable.` - // Mention only if caused by us to avoid confusion - if (hasProp(adm.appliedAnnotations!, key)) { - error += `\nTo prevent accidental re-definition of a field by a subclass, ` - error += `all annotated fields of non-plain objects (classes) are not configurable.` - } - } - die(error) - } - } - */ - // Not annotated - if ( true && !isOverride(annotation) && hasProp(adm.appliedAnnotations_, key)) { - var fieldName = adm.name_ + "." + key.toString(); - var currentAnnotationType = adm.appliedAnnotations_[key].annotationType_; - var requestedAnnotationType = annotation.annotationType_; - die("Cannot apply '" + requestedAnnotationType + "' to '" + fieldName + "':" + ("\nThe field is already annotated with '" + currentAnnotationType + "'.") + "\nRe-annotating fields is not allowed." + "\nUse 'override' annotation for methods overridden by subclass."); - } -} - -// Bug in safari 9.* (or iOS 9 safari mobile). See #364 -var ENTRY_0 = /*#__PURE__*/createArrayEntryDescriptor(0); -/** - * This array buffer contains two lists of properties, so that all arrays - * can recycle their property definitions, which significantly improves performance of creating - * properties on the fly. - */ -var OBSERVABLE_ARRAY_BUFFER_SIZE = 0; -// Typescript workaround to make sure ObservableArray extends Array -var StubArray = function StubArray() {}; -function inherit(ctor, proto) { - if (Object.setPrototypeOf) { - Object.setPrototypeOf(ctor.prototype, proto); - } else if (ctor.prototype.__proto__ !== undefined) { - ctor.prototype.__proto__ = proto; - } else { - ctor.prototype = proto; - } -} -inherit(StubArray, Array.prototype); -// Weex proto freeze protection was here, -// but it is unclear why the hack is need as MobX never changed the prototype -// anyway, so removed it in V6 -var LegacyObservableArray = /*#__PURE__*/function (_StubArray, _Symbol$toStringTag, _Symbol$iterator) { - _inheritsLoose(LegacyObservableArray, _StubArray); - function LegacyObservableArray(initialValues, enhancer, name, owned) { - var _this; - if (name === void 0) { - name = true ? "ObservableArray@" + getNextId() : 0; - } - if (owned === void 0) { - owned = false; - } - _this = _StubArray.call(this) || this; - var adm = new ObservableArrayAdministration(name, enhancer, owned, true); - adm.proxy_ = _assertThisInitialized(_this); - addHiddenFinalProp(_assertThisInitialized(_this), $mobx, adm); - if (initialValues && initialValues.length) { - var prev = allowStateChangesStart(true); - // @ts-ignore - _this.spliceWithArray(0, 0, initialValues); - allowStateChangesEnd(prev); - } - { - // Seems that Safari won't use numeric prototype setter untill any * numeric property is - // defined on the instance. After that it works fine, even if this property is deleted. - Object.defineProperty(_assertThisInitialized(_this), "0", ENTRY_0); - } - return _this; - } - var _proto = LegacyObservableArray.prototype; - _proto.concat = function concat() { - this[$mobx].atom_.reportObserved(); - for (var _len = arguments.length, arrays = new Array(_len), _key = 0; _key < _len; _key++) { - arrays[_key] = arguments[_key]; - } - return Array.prototype.concat.apply(this.slice(), - //@ts-ignore - arrays.map(function (a) { - return isObservableArray(a) ? a.slice() : a; - })); - }; - _proto[_Symbol$iterator] = function () { - var self = this; - var nextIndex = 0; - return makeIterable({ - next: function next() { - return nextIndex < self.length ? { - value: self[nextIndex++], - done: false - } : { - done: true, - value: undefined - }; - } - }); - }; - _createClass(LegacyObservableArray, [{ - key: "length", - get: function get() { - return this[$mobx].getArrayLength_(); - }, - set: function set(newLength) { - this[$mobx].setArrayLength_(newLength); - } - }, { - key: _Symbol$toStringTag, - get: function get() { - return "Array"; - } - }]); - return LegacyObservableArray; -}(StubArray, Symbol.toStringTag, Symbol.iterator); -Object.entries(arrayExtensions).forEach(function (_ref) { - var prop = _ref[0], - fn = _ref[1]; - if (prop !== "concat") { - addHiddenProp(LegacyObservableArray.prototype, prop, fn); - } -}); -function createArrayEntryDescriptor(index) { - return { - enumerable: false, - configurable: true, - get: function get() { - return this[$mobx].get_(index); - }, - set: function set(value) { - this[$mobx].set_(index, value); - } - }; -} -function createArrayBufferItem(index) { - defineProperty(LegacyObservableArray.prototype, "" + index, createArrayEntryDescriptor(index)); -} -function reserveArrayBuffer(max) { - if (max > OBSERVABLE_ARRAY_BUFFER_SIZE) { - for (var index = OBSERVABLE_ARRAY_BUFFER_SIZE; index < max + 100; index++) { - createArrayBufferItem(index); - } - OBSERVABLE_ARRAY_BUFFER_SIZE = max; - } -} -reserveArrayBuffer(1000); -function createLegacyArray(initialValues, enhancer, name) { - return new LegacyObservableArray(initialValues, enhancer, name); -} - -function getAtom(thing, property) { - if (typeof thing === "object" && thing !== null) { - if (isObservableArray(thing)) { - if (property !== undefined) { - die(23); - } - return thing[$mobx].atom_; - } - if (isObservableSet(thing)) { - return thing.atom_; - } - if (isObservableMap(thing)) { - if (property === undefined) { - return thing.keysAtom_; - } - var observable = thing.data_.get(property) || thing.hasMap_.get(property); - if (!observable) { - die(25, property, getDebugName(thing)); - } - return observable; - } - if (isObservableObject(thing)) { - if (!property) { - return die(26); - } - var _observable = thing[$mobx].values_.get(property); - if (!_observable) { - die(27, property, getDebugName(thing)); - } - return _observable; - } - if (isAtom(thing) || isComputedValue(thing) || isReaction(thing)) { - return thing; - } - } else if (isFunction(thing)) { - if (isReaction(thing[$mobx])) { - // disposer function - return thing[$mobx]; - } - } - die(28); -} -function getAdministration(thing, property) { - if (!thing) { - die(29); - } - if (property !== undefined) { - return getAdministration(getAtom(thing, property)); - } - if (isAtom(thing) || isComputedValue(thing) || isReaction(thing)) { - return thing; - } - if (isObservableMap(thing) || isObservableSet(thing)) { - return thing; - } - if (thing[$mobx]) { - return thing[$mobx]; - } - die(24, thing); -} -function getDebugName(thing, property) { - var named; - if (property !== undefined) { - named = getAtom(thing, property); - } else if (isAction(thing)) { - return thing.name; - } else if (isObservableObject(thing) || isObservableMap(thing) || isObservableSet(thing)) { - named = getAdministration(thing); - } else { - // valid for arrays as well - named = getAtom(thing); - } - return named.name_; -} - -var toString = objectPrototype.toString; -function deepEqual(a, b, depth) { - if (depth === void 0) { - depth = -1; - } - return eq(a, b, depth); -} -// Copied from https://github.com/jashkenas/underscore/blob/5c237a7c682fb68fd5378203f0bf22dce1624854/underscore.js#L1186-L1289 -// Internal recursive comparison function for `isEqual`. -function eq(a, b, depth, aStack, bStack) { - // Identical objects are equal. `0 === -0`, but they aren't identical. - // See the [Harmony `egal` proposal](http://wiki.ecmascript.org/doku.php?id=harmony:egal). - if (a === b) { - return a !== 0 || 1 / a === 1 / b; - } - // `null` or `undefined` only equal to itself (strict comparison). - if (a == null || b == null) { - return false; - } - // `NaN`s are equivalent, but non-reflexive. - if (a !== a) { - return b !== b; - } - // Exhaust primitive checks - var type = typeof a; - if (type !== "function" && type !== "object" && typeof b != "object") { - return false; - } - // Compare `[[Class]]` names. - var className = toString.call(a); - if (className !== toString.call(b)) { - return false; - } - switch (className) { - // Strings, numbers, regular expressions, dates, and booleans are compared by value. - case "[object RegExp]": - // RegExps are coerced to strings for comparison (Note: '' + /a/i === '/a/i') - case "[object String]": - // Primitives and their corresponding object wrappers are equivalent; thus, `"5"` is - // equivalent to `new String("5")`. - return "" + a === "" + b; - case "[object Number]": - // `NaN`s are equivalent, but non-reflexive. - // Object(NaN) is equivalent to NaN. - if (+a !== +a) { - return +b !== +b; - } - // An `egal` comparison is performed for other numeric values. - return +a === 0 ? 1 / +a === 1 / b : +a === +b; - case "[object Date]": - case "[object Boolean]": - // Coerce dates and booleans to numeric primitive values. Dates are compared by their - // millisecond representations. Note that invalid dates with millisecond representations - // of `NaN` are not equivalent. - return +a === +b; - case "[object Symbol]": - return typeof Symbol !== "undefined" && Symbol.valueOf.call(a) === Symbol.valueOf.call(b); - case "[object Map]": - case "[object Set]": - // Maps and Sets are unwrapped to arrays of entry-pairs, adding an incidental level. - // Hide this extra level by increasing the depth. - if (depth >= 0) { - depth++; - } - break; - } - // Unwrap any wrapped objects. - a = unwrap(a); - b = unwrap(b); - var areArrays = className === "[object Array]"; - if (!areArrays) { - if (typeof a != "object" || typeof b != "object") { - return false; - } - // Objects with different constructors are not equivalent, but `Object`s or `Array`s - // from different frames are. - var aCtor = a.constructor, - bCtor = b.constructor; - if (aCtor !== bCtor && !(isFunction(aCtor) && aCtor instanceof aCtor && isFunction(bCtor) && bCtor instanceof bCtor) && "constructor" in a && "constructor" in b) { - return false; - } - } - if (depth === 0) { - return false; - } else if (depth < 0) { - depth = -1; - } - // Assume equality for cyclic structures. The algorithm for detecting cyclic - // structures is adapted from ES 5.1 section 15.12.3, abstract operation `JO`. - // Initializing stack of traversed objects. - // It's done here since we only need them for objects and arrays comparison. - aStack = aStack || []; - bStack = bStack || []; - var length = aStack.length; - while (length--) { - // Linear search. Performance is inversely proportional to the number of - // unique nested structures. - if (aStack[length] === a) { - return bStack[length] === b; - } - } - // Add the first object to the stack of traversed objects. - aStack.push(a); - bStack.push(b); - // Recursively compare objects and arrays. - if (areArrays) { - // Compare array lengths to determine if a deep comparison is necessary. - length = a.length; - if (length !== b.length) { - return false; - } - // Deep compare the contents, ignoring non-numeric properties. - while (length--) { - if (!eq(a[length], b[length], depth - 1, aStack, bStack)) { - return false; - } - } - } else { - // Deep compare objects. - var keys = Object.keys(a); - var key; - length = keys.length; - // Ensure that both objects contain the same number of properties before comparing deep equality. - if (Object.keys(b).length !== length) { - return false; - } - while (length--) { - // Deep compare each member - key = keys[length]; - if (!(hasProp(b, key) && eq(a[key], b[key], depth - 1, aStack, bStack))) { - return false; - } - } - } - // Remove the first object from the stack of traversed objects. - aStack.pop(); - bStack.pop(); - return true; -} -function unwrap(a) { - if (isObservableArray(a)) { - return a.slice(); - } - if (isES6Map(a) || isObservableMap(a)) { - return Array.from(a.entries()); - } - if (isES6Set(a) || isObservableSet(a)) { - return Array.from(a.entries()); - } - return a; -} - -function makeIterable(iterator) { - iterator[Symbol.iterator] = getSelf; - return iterator; -} -function getSelf() { - return this; -} - -function isAnnotation(thing) { - return ( - // Can be function - thing instanceof Object && typeof thing.annotationType_ === "string" && isFunction(thing.make_) && isFunction(thing.extend_) - ); -} - -/** - * (c) Michel Weststrate 2015 - 2020 - * MIT Licensed - * - * Welcome to the mobx sources! To get a global overview of how MobX internally works, - * this is a good place to start: - * https://medium.com/@mweststrate/becoming-fully-reactive-an-in-depth-explanation-of-mobservable-55995262a254#.xvbh6qd74 - * - * Source folders: - * =============== - * - * - api/ Most of the public static methods exposed by the module can be found here. - * - core/ Implementation of the MobX algorithm; atoms, derivations, reactions, dependency trees, optimizations. Cool stuff can be found here. - * - types/ All the magic that is need to have observable objects, arrays and values is in this folder. Including the modifiers like `asFlat`. - * - utils/ Utility stuff. - * - */ -["Symbol", "Map", "Set"].forEach(function (m) { - var g = getGlobal(); - if (typeof g[m] === "undefined") { - die("MobX requires global '" + m + "' to be available or polyfilled"); - } -}); -if (typeof __MOBX_DEVTOOLS_GLOBAL_HOOK__ === "object") { - // See: https://github.com/andykog/mobx-devtools/ - __MOBX_DEVTOOLS_GLOBAL_HOOK__.injectMobx({ - spy: spy, - extras: { - getDebugName: getDebugName - }, - $mobx: $mobx - }); -} - - -//# sourceMappingURL=mobx.esm.js.map - - -/***/ }), - -/***/ "../stable-diffusion-webui/extensions/Auto-Photoshop-StableDiffusion-Plugin/node_modules/react-dom/cjs/react-dom.development.js": -/*!**************************************************************************************************************************************!*\ - !*** ../stable-diffusion-webui/extensions/Auto-Photoshop-StableDiffusion-Plugin/node_modules/react-dom/cjs/react-dom.development.js ***! - \**************************************************************************************************************************************/ -/***/ ((__unused_webpack_module, exports, __webpack_require__) => { - -"use strict"; -/** - * @license React - * react-dom.development.js - * - * Copyright (c) Facebook, Inc. and its affiliates. - * - * This source code is licensed under the MIT license found in the - * LICENSE file in the root directory of this source tree. - */ - - - -if (true) { - (function() { - - 'use strict'; - -/* global __REACT_DEVTOOLS_GLOBAL_HOOK__ */ -if ( - typeof __REACT_DEVTOOLS_GLOBAL_HOOK__ !== 'undefined' && - typeof __REACT_DEVTOOLS_GLOBAL_HOOK__.registerInternalModuleStart === - 'function' -) { - __REACT_DEVTOOLS_GLOBAL_HOOK__.registerInternalModuleStart(new Error()); -} - var React = __webpack_require__(/*! react */ "../stable-diffusion-webui/extensions/Auto-Photoshop-StableDiffusion-Plugin/node_modules/react/index.js"); -var Scheduler = __webpack_require__(/*! scheduler */ "../stable-diffusion-webui/extensions/Auto-Photoshop-StableDiffusion-Plugin/node_modules/scheduler/index.js"); - -var ReactSharedInternals = React.__SECRET_INTERNALS_DO_NOT_USE_OR_YOU_WILL_BE_FIRED; - -var suppressWarning = false; -function setSuppressWarning(newSuppressWarning) { - { - suppressWarning = newSuppressWarning; - } -} // In DEV, calls to console.warn and console.error get replaced -// by calls to these methods by a Babel plugin. -// -// In PROD (or in packages without access to React internals), -// they are left as they are instead. - -function warn(format) { - { - if (!suppressWarning) { - for (var _len = arguments.length, args = new Array(_len > 1 ? _len - 1 : 0), _key = 1; _key < _len; _key++) { - args[_key - 1] = arguments[_key]; - } - - printWarning('warn', format, args); - } - } -} -function error(format) { - { - if (!suppressWarning) { - for (var _len2 = arguments.length, args = new Array(_len2 > 1 ? _len2 - 1 : 0), _key2 = 1; _key2 < _len2; _key2++) { - args[_key2 - 1] = arguments[_key2]; - } - - printWarning('error', format, args); - } - } -} - -function printWarning(level, format, args) { - // When changing this logic, you might want to also - // update consoleWithStackDev.www.js as well. - { - var ReactDebugCurrentFrame = ReactSharedInternals.ReactDebugCurrentFrame; - var stack = ReactDebugCurrentFrame.getStackAddendum(); - - if (stack !== '') { - format += '%s'; - args = args.concat([stack]); - } // eslint-disable-next-line react-internal/safe-string-coercion - - - var argsWithFormat = args.map(function (item) { - return String(item); - }); // Careful: RN currently depends on this prefix - - argsWithFormat.unshift('Warning: ' + format); // We intentionally don't use spread (or .apply) directly because it - // breaks IE9: https://github.com/facebook/react/issues/13610 - // eslint-disable-next-line react-internal/no-production-logging - - Function.prototype.apply.call(console[level], console, argsWithFormat); - } -} - -var FunctionComponent = 0; -var ClassComponent = 1; -var IndeterminateComponent = 2; // Before we know whether it is function or class - -var HostRoot = 3; // Root of a host tree. Could be nested inside another node. - -var HostPortal = 4; // A subtree. Could be an entry point to a different renderer. - -var HostComponent = 5; -var HostText = 6; -var Fragment = 7; -var Mode = 8; -var ContextConsumer = 9; -var ContextProvider = 10; -var ForwardRef = 11; -var Profiler = 12; -var SuspenseComponent = 13; -var MemoComponent = 14; -var SimpleMemoComponent = 15; -var LazyComponent = 16; -var IncompleteClassComponent = 17; -var DehydratedFragment = 18; -var SuspenseListComponent = 19; -var ScopeComponent = 21; -var OffscreenComponent = 22; -var LegacyHiddenComponent = 23; -var CacheComponent = 24; -var TracingMarkerComponent = 25; - -// ----------------------------------------------------------------------------- - -var enableClientRenderFallbackOnTextMismatch = true; // TODO: Need to review this code one more time before landing -// the react-reconciler package. - -var enableNewReconciler = false; // Support legacy Primer support on internal FB www - -var enableLazyContextPropagation = false; // FB-only usage. The new API has different semantics. - -var enableLegacyHidden = false; // Enables unstable_avoidThisFallback feature in Fiber - -var enableSuspenseAvoidThisFallback = false; // Enables unstable_avoidThisFallback feature in Fizz -// React DOM Chopping Block -// -// Similar to main Chopping Block but only flags related to React DOM. These are -// grouped because we will likely batch all of them into a single major release. -// ----------------------------------------------------------------------------- -// Disable support for comment nodes as React DOM containers. Already disabled -// in open source, but www codebase still relies on it. Need to remove. - -var disableCommentsAsDOMContainers = true; // Disable javascript: URL strings in href for XSS protection. -// and client rendering, mostly to allow JSX attributes to apply to the custom -// element's object properties instead of only HTML attributes. -// https://github.com/facebook/react/issues/11347 - -var enableCustomElementPropertySupport = false; // Disables children for