2026-01-27 16:02:45 +03:30
import process from 'node:process' ; globalThis . _importMeta_ = globalThis . _importMeta_ || { url : "file:///_entry.js" , env : process . env }; import http , { Server as Server$1 } from 'node:http' ;
import https , { Server } from 'node:https' ;
2025-07-23 16:57:31 +03:30
import { EventEmitter } from 'node:events' ;
import { Buffer as Buffer$1 } from 'node:buffer' ;
import { promises , existsSync } from 'node:fs' ;
import { resolve as resolve$2 , dirname as dirname$1 , join } from 'node:path' ;
import { createHash } from 'node:crypto' ;
2026-01-27 16:02:45 +03:30
import { toValue } from 'file:///mnt/new-volume-7/vue_projects/montify/montify/node_modules/vue/index.mjs' ;
import { fileURLToPath } from 'node:url' ;
import { createConsola } from 'file:///mnt/new-volume-7/vue_projects/montify/montify/node_modules/consola/dist/index.mjs' ;
import { ipxFSStorage , ipxHttpStorage , createIPX , createIPXH3Handler } from 'file:///mnt/new-volume-7/vue_projects/montify/montify/node_modules/ipx/dist/index.mjs' ;
2025-07-23 16:57:31 +03:30
const suspectProtoRx = /"(?:_|\\u0{2}5[Ff]){2}(?:p|\\u0{2}70)(?:r|\\u0{2}72)(?:o|\\u0{2}6[Ff])(?:t|\\u0{2}74)(?:o|\\u0{2}6[Ff])(?:_|\\u0{2}5[Ff]){2}"\s*:/ ;
const suspectConstructorRx = /"(?:c|\\u0063)(?:o|\\u006[Ff])(?:n|\\u006[Ee])(?:s|\\u0073)(?:t|\\u0074)(?:r|\\u0072)(?:u|\\u0075)(?:c|\\u0063)(?:t|\\u0074)(?:o|\\u006[Ff])(?:r|\\u0072)"\s*:/ ;
const JsonSigRx = /^\s*["[{]|^\s*-?\d{1,16}(\.\d{1,17})?([Ee][+-]?\d+)?\s*$/ ;
function jsonParseTransform ( key , value ) {
if ( key === "__proto__" || key === "constructor" && value && typeof value === "object" && "prototype" in value ) {
warnKeyDropped ( key );
return ;
}
return value ;
}
function warnKeyDropped ( key ) {
console . warn ( `[destr] Dropping " ${ key } " key to prevent prototype pollution.` );
}
function destr ( value , options = {}) {
if ( typeof value !== "string" ) {
return value ;
}
if ( value [ 0 ] === '"' && value [ value . length - 1 ] === '"' && value . indexOf ( "\\" ) === - 1 ) {
return value . slice ( 1 , - 1 );
}
const _value = value . trim ();
if ( _value . length <= 9 ) {
switch ( _value . toLowerCase ()) {
case "true" : {
return true ;
}
case "false" : {
return false ;
}
case "undefined" : {
return void 0 ;
}
case "null" : {
return null ;
}
case "nan" : {
return Number . NaN ;
}
case "infinity" : {
return Number . POSITIVE_INFINITY ;
}
case "-infinity" : {
return Number . NEGATIVE_INFINITY ;
}
}
}
if ( ! JsonSigRx . test ( value )) {
if ( options . strict ) {
throw new SyntaxError ( "[destr] Invalid JSON" );
}
return value ;
}
try {
if ( suspectProtoRx . test ( value ) || suspectConstructorRx . test ( value )) {
if ( options . strict ) {
throw new Error ( "[destr] Possible prototype pollution" );
}
return JSON . parse ( value , jsonParseTransform );
}
return JSON . parse ( value );
} catch ( error ) {
if ( options . strict ) {
throw error ;
}
return value ;
}
}
const HASH_RE = /#/g ;
const AMPERSAND_RE = /&/g ;
const SLASH_RE = /\//g ;
const EQUAL_RE = /=/g ;
const IM_RE = /\?/g ;
const PLUS_RE = /\+/g ;
const ENC_CARET_RE = /%5e/gi ;
const ENC_BACKTICK_RE = /%60/gi ;
const ENC_PIPE_RE = /%7c/gi ;
const ENC_SPACE_RE = /%20/gi ;
const ENC_SLASH_RE = /%2f/gi ;
const ENC_ENC_SLASH_RE = /%252f/gi ;
function encode ( text ) {
return encodeURI ( "" + text ). replace ( ENC_PIPE_RE , "|" );
}
function encodeQueryValue ( input ) {
return encode ( typeof input === "string" ? input : JSON . stringify ( input )). replace ( PLUS_RE , "%2B" ). replace ( ENC_SPACE_RE , "+" ). replace ( HASH_RE , "%23" ). replace ( AMPERSAND_RE , "%26" ). replace ( ENC_BACKTICK_RE , "`" ). replace ( ENC_CARET_RE , "^" ). replace ( SLASH_RE , "%2F" );
}
function encodeQueryKey ( text ) {
return encodeQueryValue ( text ). replace ( EQUAL_RE , "%3D" );
}
function encodePath ( text ) {
return encode ( text ). replace ( HASH_RE , "%23" ). replace ( IM_RE , "%3F" ). replace ( ENC_ENC_SLASH_RE , "%2F" ). replace ( AMPERSAND_RE , "%26" ). replace ( PLUS_RE , "%2B" );
}
function decode ( text = "" ) {
try {
return decodeURIComponent ( "" + text );
} catch {
return "" + text ;
}
}
function decodePath ( text ) {
return decode ( text . replace ( ENC_SLASH_RE , "%252F" ));
}
function decodeQueryKey ( text ) {
return decode ( text . replace ( PLUS_RE , " " ));
}
function decodeQueryValue ( text ) {
return decode ( text . replace ( PLUS_RE , " " ));
}
function parseQuery ( parametersString = "" ) {
const object = /* @__PURE__ */ Object . create ( null );
if ( parametersString [ 0 ] === "?" ) {
parametersString = parametersString . slice ( 1 );
}
for ( const parameter of parametersString . split ( "&" )) {
const s = parameter . match ( /([^=]+)=?(.*)/ ) || [];
if ( s . length < 2 ) {
continue ;
}
const key = decodeQueryKey ( s [ 1 ]);
if ( key === "__proto__" || key === "constructor" ) {
continue ;
}
const value = decodeQueryValue ( s [ 2 ] || "" );
if ( object [ key ] === void 0 ) {
object [ key ] = value ;
} else if ( Array . isArray ( object [ key ])) {
object [ key ]. push ( value );
} else {
object [ key ] = [ object [ key ], value ];
}
}
return object ;
}
function encodeQueryItem ( key , value ) {
if ( typeof value === "number" || typeof value === "boolean" ) {
value = String ( value );
}
if ( ! value ) {
return encodeQueryKey ( key );
}
if ( Array . isArray ( value )) {
return value . map (
( _value ) => ` ${ encodeQueryKey ( key ) } = ${ encodeQueryValue ( _value ) } `
). join ( "&" );
}
return ` ${ encodeQueryKey ( key ) } = ${ encodeQueryValue ( value ) } ` ;
}
function stringifyQuery ( query ) {
return Object . keys ( query ). filter (( k ) => query [ k ] !== void 0 ). map (( k ) => encodeQueryItem ( k , query [ k ])). filter ( Boolean ). join ( "&" );
}
const PROTOCOL_STRICT_REGEX = /^[\s\w\0+.-]{2,}:([/\\]{1,2})/ ;
const PROTOCOL_REGEX = /^[\s\w\0+.-]{2,}:([/\\]{2})?/ ;
const PROTOCOL_RELATIVE_REGEX = /^([/\\]\s*){2,}[^/\\]/ ;
const PROTOCOL_SCRIPT_RE = /^[\s\0]*(blob|data|javascript|vbscript):$/i ;
const TRAILING_SLASH_RE = /\/$|\/\?|\/#/ ;
const JOIN_LEADING_SLASH_RE = /^\.?\// ;
function hasProtocol ( inputString , opts = {}) {
if ( typeof opts === "boolean" ) {
opts = { acceptRelative : opts };
}
if ( opts . strict ) {
return PROTOCOL_STRICT_REGEX . test ( inputString );
}
return PROTOCOL_REGEX . test ( inputString ) || ( opts . acceptRelative ? PROTOCOL_RELATIVE_REGEX . test ( inputString ) : false );
}
function isScriptProtocol ( protocol ) {
return !! protocol && PROTOCOL_SCRIPT_RE . test ( protocol );
}
function hasTrailingSlash ( input = "" , respectQueryAndFragment ) {
if ( ! respectQueryAndFragment ) {
return input . endsWith ( "/" );
}
return TRAILING_SLASH_RE . test ( input );
}
function withoutTrailingSlash ( input = "" , respectQueryAndFragment ) {
if ( ! respectQueryAndFragment ) {
return ( hasTrailingSlash ( input ) ? input . slice ( 0 , - 1 ) : input ) || "/" ;
}
if ( ! hasTrailingSlash ( input , true )) {
return input || "/" ;
}
let path = input ;
let fragment = "" ;
const fragmentIndex = input . indexOf ( "#" );
if ( fragmentIndex !== - 1 ) {
path = input . slice ( 0 , fragmentIndex );
fragment = input . slice ( fragmentIndex );
}
const [ s0 , ... s ] = path . split ( "?" );
const cleanPath = s0 . endsWith ( "/" ) ? s0 . slice ( 0 , - 1 ) : s0 ;
return ( cleanPath || "/" ) + ( s . length > 0 ? `? ${ s . join ( "?" ) } ` : "" ) + fragment ;
}
function withTrailingSlash ( input = "" , respectQueryAndFragment ) {
if ( ! respectQueryAndFragment ) {
return input . endsWith ( "/" ) ? input : input + "/" ;
}
if ( hasTrailingSlash ( input , true )) {
return input || "/" ;
}
let path = input ;
let fragment = "" ;
const fragmentIndex = input . indexOf ( "#" );
if ( fragmentIndex !== - 1 ) {
path = input . slice ( 0 , fragmentIndex );
fragment = input . slice ( fragmentIndex );
if ( ! path ) {
return fragment ;
}
}
const [ s0 , ... s ] = path . split ( "?" );
return s0 + "/" + ( s . length > 0 ? `? ${ s . join ( "?" ) } ` : "" ) + fragment ;
}
function hasLeadingSlash ( input = "" ) {
return input . startsWith ( "/" );
}
function withLeadingSlash ( input = "" ) {
return hasLeadingSlash ( input ) ? input : "/" + input ;
}
function withBase ( input , base ) {
if ( isEmptyURL ( base ) || hasProtocol ( input )) {
return input ;
}
const _base = withoutTrailingSlash ( base );
if ( input . startsWith ( _base )) {
return input ;
}
return joinURL ( _base , input );
}
function withoutBase ( input , base ) {
if ( isEmptyURL ( base )) {
return input ;
}
const _base = withoutTrailingSlash ( base );
if ( ! input . startsWith ( _base )) {
return input ;
}
const trimmed = input . slice ( _base . length );
return trimmed [ 0 ] === "/" ? trimmed : "/" + trimmed ;
}
function withQuery ( input , query ) {
const parsed = parseURL ( input );
const mergedQuery = { ... parseQuery ( parsed . search ), ... query };
parsed . search = stringifyQuery ( mergedQuery );
return stringifyParsedURL ( parsed );
}
function getQuery$1 ( input ) {
return parseQuery ( parseURL ( input ). search );
}
function isEmptyURL ( url ) {
return ! url || url === "/" ;
}
function isNonEmptyURL ( url ) {
return url && url !== "/" ;
}
function joinURL ( base , ... input ) {
let url = base || "" ;
for ( const segment of input . filter (( url2 ) => isNonEmptyURL ( url2 ))) {
if ( url ) {
const _segment = segment . replace ( JOIN_LEADING_SLASH_RE , "" );
url = withTrailingSlash ( url ) + _segment ;
} else {
url = segment ;
}
}
return url ;
}
function joinRelativeURL (... _input ) {
const JOIN_SEGMENT_SPLIT_RE = /\/(?!\/)/ ;
const input = _input . filter ( Boolean );
const segments = [];
let segmentsDepth = 0 ;
for ( const i of input ) {
if ( ! i || i === "/" ) {
continue ;
}
for ( const [ sindex , s ] of i . split ( JOIN_SEGMENT_SPLIT_RE ). entries ()) {
if ( ! s || s === "." ) {
continue ;
}
if ( s === ".." ) {
if ( segments . length === 1 && hasProtocol ( segments [ 0 ])) {
continue ;
}
segments . pop ();
segmentsDepth -- ;
continue ;
}
if ( sindex === 1 && segments [ segments . length - 1 ] ? . endsWith ( ":/" )) {
segments [ segments . length - 1 ] += "/" + s ;
continue ;
}
segments . push ( s );
segmentsDepth ++ ;
}
}
let url = segments . join ( "/" );
if ( segmentsDepth >= 0 ) {
if ( input [ 0 ] ? . startsWith ( "/" ) && ! url . startsWith ( "/" )) {
url = "/" + url ;
} else if ( input [ 0 ] ? . startsWith ( "./" ) && ! url . startsWith ( "./" )) {
url = "./" + url ;
}
} else {
url = "../" . repeat ( - 1 * segmentsDepth ) + url ;
}
if ( input [ input . length - 1 ] ? . endsWith ( "/" ) && ! url . endsWith ( "/" )) {
url += "/" ;
}
return url ;
}
function withHttps ( input ) {
return withProtocol ( input , "https://" );
}
function withProtocol ( input , protocol ) {
let match = input . match ( PROTOCOL_REGEX );
if ( ! match ) {
match = input . match ( /^\/{2,}/ );
}
if ( ! match ) {
return protocol + input ;
}
return protocol + input . slice ( match [ 0 ]. length );
}
const protocolRelative = Symbol . for ( "ufo:protocolRelative" );
function parseURL ( input = "" , defaultProto ) {
const _specialProtoMatch = input . match (
/^[\s\0]*(blob:|data:|javascript:|vbscript:)(.*)/i
);
if ( _specialProtoMatch ) {
const [, _proto , _pathname = "" ] = _specialProtoMatch ;
return {
protocol : _proto . toLowerCase (),
pathname : _pathname ,
href : _proto + _pathname ,
auth : "" ,
host : "" ,
search : "" ,
hash : ""
};
}
if ( ! hasProtocol ( input , { acceptRelative : true })) {
return defaultProto ? parseURL ( defaultProto + input ) : parsePath ( input );
}
const [, protocol = "" , auth , hostAndPath = "" ] = input . replace ( /\\/g , "/" ). match ( /^[\s\0]*([\w+.-]{2,}:)?\/\/([^/@]+@)?(.*)/ ) || [];
let [, host = "" , path = "" ] = hostAndPath . match ( /([^#/?]*)(.*)?/ ) || [];
if ( protocol === "file:" ) {
path = path . replace ( /\/(?=[A-Za-z]:)/ , "" );
}
const { pathname , search , hash } = parsePath ( path );
return {
protocol : protocol . toLowerCase (),
auth : auth ? auth . slice ( 0 , Math . max ( 0 , auth . length - 1 )) : "" ,
host ,
pathname ,
search ,
hash ,
[ protocolRelative ] : ! protocol
};
}
function parsePath ( input = "" ) {
const [ pathname = "" , search = "" , hash = "" ] = ( input . match ( /([^#?]*)(\?[^#]*)?(#.*)?/ ) || []). splice ( 1 );
return {
pathname ,
search ,
hash
};
}
function stringifyParsedURL ( parsed ) {
const pathname = parsed . pathname || "" ;
const search = parsed . search ? ( parsed . search . startsWith ( "?" ) ? "" : "?" ) + parsed . search : "" ;
const hash = parsed . hash || "" ;
const auth = parsed . auth ? parsed . auth + "@" : "" ;
const host = parsed . host || "" ;
const proto = parsed . protocol || parsed [ protocolRelative ] ? ( parsed . protocol || "" ) + "//" : "" ;
return proto + auth + host + pathname + search + hash ;
}
const NODE_TYPES = {
NORMAL : 0 ,
WILDCARD : 1 ,
PLACEHOLDER : 2
};
function createRouter$1 ( options = {}) {
const ctx = {
options ,
rootNode : createRadixNode (),
staticRoutesMap : {}
};
const normalizeTrailingSlash = ( p ) => options . strictTrailingSlash ? p : p . replace ( /\/$/ , "" ) || "/" ;
if ( options . routes ) {
for ( const path in options . routes ) {
insert ( ctx , normalizeTrailingSlash ( path ), options . routes [ path ]);
}
}
return {
ctx ,
lookup : ( path ) => lookup ( ctx , normalizeTrailingSlash ( path )),
insert : ( path , data ) => insert ( ctx , normalizeTrailingSlash ( path ), data ),
remove : ( path ) => remove ( ctx , normalizeTrailingSlash ( path ))
};
}
function lookup ( ctx , path ) {
const staticPathNode = ctx . staticRoutesMap [ path ];
if ( staticPathNode ) {
return staticPathNode . data ;
}
const sections = path . split ( "/" );
const params = {};
let paramsFound = false ;
let wildcardNode = null ;
let node = ctx . rootNode ;
let wildCardParam = null ;
for ( let i = 0 ; i < sections . length ; i ++ ) {
const section = sections [ i ];
if ( node . wildcardChildNode !== null ) {
wildcardNode = node . wildcardChildNode ;
wildCardParam = sections . slice ( i ). join ( "/" );
}
const nextNode = node . children . get ( section );
if ( nextNode === void 0 ) {
if ( node && node . placeholderChildren . length > 1 ) {
const remaining = sections . length - i ;
node = node . placeholderChildren . find (( c ) => c . maxDepth === remaining ) || null ;
} else {
node = node . placeholderChildren [ 0 ] || null ;
}
if ( ! node ) {
break ;
}
if ( node . paramName ) {
params [ node . paramName ] = section ;
}
paramsFound = true ;
} else {
node = nextNode ;
}
}
if (( node === null || node . data === null ) && wildcardNode !== null ) {
node = wildcardNode ;
params [ node . paramName || "_" ] = wildCardParam ;
paramsFound = true ;
}
if ( ! node ) {
return null ;
}
if ( paramsFound ) {
return {
... node . data ,
params : paramsFound ? params : void 0
};
}
return node . data ;
}
function insert ( ctx , path , data ) {
let isStaticRoute = true ;
const sections = path . split ( "/" );
let node = ctx . rootNode ;
let _unnamedPlaceholderCtr = 0 ;
const matchedNodes = [ node ];
for ( const section of sections ) {
let childNode ;
if ( childNode = node . children . get ( section )) {
node = childNode ;
} else {
const type = getNodeType ( section );
childNode = createRadixNode ({ type , parent : node });
node . children . set ( section , childNode );
if ( type === NODE_TYPES . PLACEHOLDER ) {
childNode . paramName = section === "*" ? `_ ${ _unnamedPlaceholderCtr ++ } ` : section . slice ( 1 );
node . placeholderChildren . push ( childNode );
isStaticRoute = false ;
} else if ( type === NODE_TYPES . WILDCARD ) {
node . wildcardChildNode = childNode ;
childNode . paramName = section . slice (
3
/* "**:" */
) || "_" ;
isStaticRoute = false ;
}
matchedNodes . push ( childNode );
node = childNode ;
}
}
for ( const [ depth , node2 ] of matchedNodes . entries ()) {
node2 . maxDepth = Math . max ( matchedNodes . length - depth , node2 . maxDepth || 0 );
}
node . data = data ;
if ( isStaticRoute === true ) {
ctx . staticRoutesMap [ path ] = node ;
}
return node ;
}
function remove ( ctx , path ) {
let success = false ;
const sections = path . split ( "/" );
let node = ctx . rootNode ;
for ( const section of sections ) {
node = node . children . get ( section );
if ( ! node ) {
return success ;
}
}
if ( node . data ) {
const lastSection = sections . at ( - 1 ) || "" ;
node . data = null ;
if ( Object . keys ( node . children ). length === 0 && node . parent ) {
node . parent . children . delete ( lastSection );
node . parent . wildcardChildNode = null ;
node . parent . placeholderChildren = [];
}
success = true ;
}
return success ;
}
function createRadixNode ( options = {}) {
return {
type : options . type || NODE_TYPES . NORMAL ,
maxDepth : 0 ,
parent : options . parent || null ,
children : /* @__PURE__ */ new Map (),
data : options . data || null ,
paramName : options . paramName || null ,
wildcardChildNode : null ,
placeholderChildren : []
};
}
function getNodeType ( str ) {
if ( str . startsWith ( "**" )) {
return NODE_TYPES . WILDCARD ;
}
if ( str [ 0 ] === ":" || str === "*" ) {
return NODE_TYPES . PLACEHOLDER ;
}
return NODE_TYPES . NORMAL ;
}
function toRouteMatcher ( router ) {
const table = _routerNodeToTable ( "" , router . ctx . rootNode );
return _createMatcher ( table , router . ctx . options . strictTrailingSlash );
}
function _createMatcher ( table , strictTrailingSlash ) {
return {
ctx : { table },
matchAll : ( path ) => _matchRoutes ( path , table , strictTrailingSlash )
};
}
function _createRouteTable () {
return {
static : /* @__PURE__ */ new Map (),
wildcard : /* @__PURE__ */ new Map (),
dynamic : /* @__PURE__ */ new Map ()
};
}
function _matchRoutes ( path , table , strictTrailingSlash ) {
if ( strictTrailingSlash !== true && path . endsWith ( "/" )) {
path = path . slice ( 0 , - 1 ) || "/" ;
}
const matches = [];
for ( const [ key , value ] of _sortRoutesMap ( table . wildcard )) {
if ( path === key || path . startsWith ( key + "/" )) {
matches . push ( value );
}
}
for ( const [ key , value ] of _sortRoutesMap ( table . dynamic )) {
if ( path . startsWith ( key + "/" )) {
const subPath = "/" + path . slice ( key . length ). split ( "/" ). splice ( 2 ). join ( "/" );
matches . push (... _matchRoutes ( subPath , value ));
}
}
const staticMatch = table . static . get ( path );
if ( staticMatch ) {
matches . push ( staticMatch );
}
return matches . filter ( Boolean );
}
function _sortRoutesMap ( m ) {
return [... m . entries ()]. sort (( a , b ) => a [ 0 ]. length - b [ 0 ]. length );
}
function _routerNodeToTable ( initialPath , initialNode ) {
const table = _createRouteTable ();
function _addNode ( path , node ) {
if ( path ) {
if ( node . type === NODE_TYPES . NORMAL && ! ( path . includes ( "*" ) || path . includes ( ":" ))) {
if ( node . data ) {
table . static . set ( path , node . data );
}
} else if ( node . type === NODE_TYPES . WILDCARD ) {
table . wildcard . set ( path . replace ( "/**" , "" ), node . data );
} else if ( node . type === NODE_TYPES . PLACEHOLDER ) {
const subTable = _routerNodeToTable ( "" , node );
if ( node . data ) {
subTable . static . set ( "/" , node . data );
}
table . dynamic . set ( path . replace ( /\/\*|\/:\w+/ , "" ), subTable );
return ;
}
}
for ( const [ childPath , child ] of node . children . entries ()) {
_addNode ( ` ${ path } / ${ childPath } ` . replace ( "//" , "/" ), child );
}
}
_addNode ( initialPath , initialNode );
return table ;
}
function isPlainObject ( value ) {
if ( value === null || typeof value !== "object" ) {
return false ;
}
const prototype = Object . getPrototypeOf ( value );
if ( prototype !== null && prototype !== Object . prototype && Object . getPrototypeOf ( prototype ) !== null ) {
return false ;
}
if ( Symbol . iterator in value ) {
return false ;
}
if ( Symbol . toStringTag in value ) {
return Object . prototype . toString . call ( value ) === "[object Module]" ;
}
return true ;
}
function _defu ( baseObject , defaults , namespace = "." , merger ) {
if ( ! isPlainObject ( defaults )) {
return _defu ( baseObject , {}, namespace , merger );
}
const object = Object . assign ({}, defaults );
for ( const key in baseObject ) {
if ( key === "__proto__" || key === "constructor" ) {
continue ;
}
const value = baseObject [ key ];
if ( value === null || value === void 0 ) {
continue ;
}
if ( merger && merger ( object , key , value , namespace )) {
continue ;
}
if ( Array . isArray ( value ) && Array . isArray ( object [ key ])) {
object [ key ] = [... value , ... object [ key ]];
} else if ( isPlainObject ( value ) && isPlainObject ( object [ key ])) {
object [ key ] = _defu (
value ,
object [ key ],
( namespace ? ` ${ namespace } .` : "" ) + key . toString (),
merger
);
} else {
object [ key ] = value ;
}
}
return object ;
}
function createDefu ( merger ) {
return (... arguments_ ) => (
// eslint-disable-next-line unicorn/no-array-reduce
arguments_ . reduce (( p , c ) => _defu ( p , c , "" , merger ), {})
);
}
const defu = createDefu ();
const defuFn = createDefu (( object , key , currentValue ) => {
if ( object [ key ] !== void 0 && typeof currentValue === "function" ) {
object [ key ] = currentValue ( object [ key ]);
return true ;
}
});
2026-01-27 16:02:45 +03:30
function o$1 ( n ){ throw new Error ( ` ${ n } is not implemented yet!` )} let i$2 = class i extends EventEmitter { __unenv__ = {}; readableEncoding = null ; readableEnded = true ; readableFlowing = false ; readableHighWaterMark = 0 ; readableLength = 0 ; readableObjectMode = false ; readableAborted = false ; readableDidRead = false ; closed = false ; errored = null ; readable = false ; destroyed = false ; static from ( e , t ){ return new i ( t )} constructor ( e ){ super ();} _read ( e ){} read ( e ){} setEncoding ( e ){ return this } pause (){ return this } resume (){ return this } isPaused (){ return true } unpipe ( e ){ return this } unshift ( e , t ){} wrap ( e ){ return this } push ( e , t ){ return false } _destroy ( e , t ){ this . removeAllListeners ();} destroy ( e ){ return this . destroyed = true , this . _destroy ( e ), this } pipe ( e , t ){ return {}} compose ( e , t ){ throw new Error ( "Method not implemented." )}[ Symbol . asyncDispose ](){ return this . destroy (), Promise . resolve ()} async * [ Symbol . asyncIterator ](){ throw o$1 ( "Readable.asyncIterator" )} iterator ( e ){ throw o$1 ( "Readable.iterator" )} map ( e , t ){ throw o$1 ( "Readable.map" )} filter ( e , t ){ throw o$1 ( "Readable.filter" )} forEach ( e , t ){ throw o$1 ( "Readable.forEach" )} reduce ( e , t , r ){ throw o$1 ( "Readable.reduce" )} find ( e , t ){ throw o$1 ( "Readable.find" )} findIndex ( e , t ){ throw o$1 ( "Readable.findIndex" )} some ( e , t ){ throw o$1 ( "Readable.some" )} toArray ( e ){ throw o$1 ( "Readable.toArray" )} every ( e , t ){ throw o$1 ( "Readable.every" )} flatMap ( e , t ){ throw o$1 ( "Readable.flatMap" )} drop ( e , t ){ throw o$1 ( "Readable.drop" )} take ( e , t ){ throw o$1 ( "Readable.take" )} asIndexedPairs ( e ){ throw o$1 ( "Readable.asIndexedPairs" )}}; let l$2 = class l extends EventEmitter { __unenv__ = {}; writable = true ; writableEnded = false ; writableFinished = false ; writableHighWaterMark = 0 ; writableLength = 0 ; writableObjectMode = false ; writableCorked = 0 ; closed = false ; errored = null ; writableNeedDrain = false ; writableAborted = false ; destroyed = false ; _data ; _encoding = "utf8" ; constructor ( e ){ super ();} pipe ( e , t ){ return {}} _write ( e , t , r ){ if ( this . writableEnded ){ r && r (); return } if ( this . _data === void 0 ) this . _data = e ; else { const s = typeof this . _data == "string" ? Buffer$1 . from ( this . _data , this . _encoding || t || "utf8" ) : this . _data , a = typeof e == "string" ? Buffer$1 . from ( e , t || this . _encoding || "utf8" ) : e ; this . _data = Buffer$1 . concat ([ s , a ]);} this . _encoding = t , r && r ();} _writev ( e , t ){} _destroy ( e , t ){} _final ( e ){} write ( e , t , r ){ const s = typeof t == "string" ? this . _encoding : "utf8" , a = typeof t == "function" ? t : typeof r == "function" ? r : void 0 ; return this . _write ( e , s , a ), true } setDefaultEncoding ( e ){ return this } end ( e , t , r ){ const s = typeof e == "function" ? e : typeof t == "function" ? t : typeof r == "function" ? r : void 0 ; if ( this . writableEnded ) return s && s (), this ; const a = e === s ? void 0 : e ; if ( a ){ const u = t === s ? void 0 : t ; this . write ( a , u , s );} return this . writableEnded = true , this . writableFinished = true , this . emit ( "close" ), this . emit ( "finish" ), this } cork (){} uncork (){} destroy ( e ){ return this . destroyed = true , delete this . _data , this . removeAllListeners (), this } compose ( e , t ){ throw new Error ( "Method not implemented." )}[ Symbol . asyncDispose ](){ return Promise . resolve ()}}; const c$1 = class c { allowHalfOpen = true ; _destroy ; constructor ( e = new i$2 , t = new l$2 ){ Object . assign ( this , e ), Object . assign ( this , t ), this . _destroy = m ( e . _destroy , t . _destroy );}}; function _$1 (){ return Object . assign ( c$1 . prototype , i$2 . prototype ), Object . assign ( c$1 . prototype , l$2 . prototype ), c$1 } function m (... n ){ return function (... e ){ for ( const t of n ) t (... e );}} const g = _$1 (); let A$1 = class A extends g { __unenv__ = {}; bufferSize = 0 ; bytesRead = 0 ; bytesWritten = 0 ; connecting = false ; destroyed = false ; pending = false ; localAddress = "" ; localPort = 0 ; remoteAddress = "" ; remoteFamily = "" ; remotePort = 0 ; autoSelectFamilyAttemptedAddresses = []; readyState = "readOnly" ; constructor ( e ){ super ();} write ( e , t , r ){ return false } connect ( e , t , r ){ return this } end ( e , t , r ){ return this } setEncoding ( e ){ return this } pause (){ return this } resume (){ return this } setTimeout ( e , t ){ return this } setNoDelay ( e ){ return this } setKeepAlive ( e , t ){ return this } address (){ return {}} unref (){ return this } ref (){ return this } destroySoon (){ this . destroy ();} resetAndDestroy (){ const e = new Error ( "ERR_SOCKET_CLOSED" ); return e . code = "ERR_SOCKET_CLOSED" , this . destroy ( e ), this }}; class y extends i$2 { aborted = false ; httpVersion = "1.1" ; httpVersionMajor = 1 ; httpVersionMinor = 1 ; complete = true ; connection ; socket ; headers = {
2025-07-23 16:57:31 +03:30
function useBase ( base , handler ) {
base = withoutTrailingSlash ( base );
if ( ! base || base === "/" ) {
return handler ;
}
return eventHandler ( async ( event ) => {
event . node . req . originalUrl = event . node . req . originalUrl || event . node . req . url || "/" ;
const _path = event . _path || event . node . req . url || "/" ;
event . _path = withoutBase ( event . path || "/" , base );
event . node . req . url = event . _path ;
try {
return await handler ( event );
} finally {
event . _path = event . node . req . url = _path ;
}
});
}
function hasProp ( obj , prop ) {
try {
return prop in obj ;
} catch {
return false ;
}
}
class H3Error extends Error {
static __h3_error__ = true ;
statusCode = 500 ;
fatal = false ;
unhandled = false ;
statusMessage ;
data ;
cause ;
constructor ( message , opts = {}) {
super ( message , opts );
if ( opts . cause && ! this . cause ) {
this . cause = opts . cause ;
}
}
toJSON () {
const obj = {
message : this . message ,
statusCode : sanitizeStatusCode ( this . statusCode , 500 )
};
if ( this . statusMessage ) {
obj . statusMessage = sanitizeStatusMessage ( this . statusMessage );
}
if ( this . data !== void 0 ) {
obj . data = this . data ;
}
return obj ;
}
}
function createError$1 ( input ) {
if ( typeof input === "string" ) {
return new H3Error ( input );
}
if ( isError ( input )) {
return input ;
}
const err = new H3Error ( input . message ?? input . statusMessage ?? "" , {
cause : input . cause || input
});
if ( hasProp ( input , "stack" )) {
try {
Object . defineProperty ( err , "stack" , {
get () {
return input . stack ;
}
});
} catch {
try {
err . stack = input . stack ;
} catch {
}
}
}
if ( input . data ) {
err . data = input . data ;
}
if ( input . statusCode ) {
err . statusCode = sanitizeStatusCode ( input . statusCode , err . statusCode );
} else if ( input . status ) {
err . statusCode = sanitizeStatusCode ( input . status , err . statusCode );
}
if ( input . statusMessage ) {
err . statusMessage = input . statusMessage ;
} else if ( input . statusText ) {
err . statusMessage = input . statusText ;
}
if ( err . statusMessage ) {
const originalMessage = err . statusMessage ;
const sanitizedMessage = sanitizeStatusMessage ( err . statusMessage );
if ( sanitizedMessage !== originalMessage ) {
console . warn (
"[h3] Please prefer using `message` for longer error messages instead of `statusMessage`. In the future, `statusMessage` will be sanitized by default."
);
}
}
if ( input . fatal !== void 0 ) {
err . fatal = input . fatal ;
}
if ( input . unhandled !== void 0 ) {
err . unhandled = input . unhandled ;
}
return err ;
}
function sendError ( event , error , debug ) {
if ( event . handled ) {
return ;
}
const h3Error = isError ( error ) ? error : createError$1 ( error );
const responseBody = {
statusCode : h3Error . statusCode ,
statusMessage : h3Error . statusMessage ,
stack : [],
data : h3Error . data
};
if ( debug ) {
responseBody . stack = ( h3Error . stack || "" ). split ( "\n" ). map (( l ) => l . trim ());
}
if ( event . handled ) {
return ;
}
const _code = Number . parseInt ( h3Error . statusCode );
setResponseStatus ( event , _code , h3Error . statusMessage );
event . node . res . setHeader ( "content-type" , MIMES . json );
event . node . res . end ( JSON . stringify ( responseBody , void 0 , 2 ));
}
function isError ( input ) {
return input ? . constructor ? . __h3_error__ === true ;
}
function getQuery ( event ) {
return getQuery$1 ( event . path || "" );
}
function isMethod ( event , expected , allowHead ) {
if ( typeof expected === "string" ) {
if ( event . method === expected ) {
return true ;
}
} else if ( expected . includes ( event . method )) {
return true ;
}
return false ;
}
function assertMethod ( event , expected , allowHead ) {
if ( ! isMethod ( event , expected )) {
throw createError$1 ({
statusCode : 405 ,
statusMessage : "HTTP method is not allowed."
});
}
}
function getRequestHeaders ( event ) {
const _headers = {};
for ( const key in event . node . req . headers ) {
const val = event . node . req . headers [ key ];
_headers [ key ] = Array . isArray ( val ) ? val . filter ( Boolean ). join ( ", " ) : val ;
}
return _headers ;
}
function getRequestHeader ( event , name ) {
const headers = getRequestHeaders ( event );
const value = headers [ name . toLowerCase ()];
return value ;
}
const getHeader = getRequestHeader ;
function getRequestHost ( event , opts = {}) {
if ( opts . xForwardedHost ) {
2025-08-19 21:38:30 +03:30
const _header = event . node . req . headers [ "x-forwarded-host" ];
const xForwardedHost = ( _header || "" ). split ( "," ). shift () ? . trim ();
2025-07-23 16:57:31 +03:30
if ( xForwardedHost ) {
return xForwardedHost ;
}
}
return event . node . req . headers . host || "localhost" ;
}
function getRequestProtocol ( event , opts = {}) {
if ( opts . xForwardedProto !== false && event . node . req . headers [ "x-forwarded-proto" ] === "https" ) {
return "https" ;
}
return event . node . req . connection ? . encrypted ? "https" : "http" ;
}
function getRequestURL ( event , opts = {}) {
const host = getRequestHost ( event , opts );
const protocol = getRequestProtocol ( event , opts );
const path = ( event . node . req . originalUrl || event . path ). replace (
/^[/\\]+/g ,
"/"
);
return new URL ( path , ` ${ protocol } :// ${ host } ` );
}
const RawBodySymbol = Symbol . for ( "h3RawBody" );
const PayloadMethods$1 = [ "PATCH" , "POST" , "PUT" , "DELETE" ];
function readRawBody ( event , encoding = "utf8" ) {
assertMethod ( event , PayloadMethods$1 );
const _rawBody = event . _requestBody || event . web ? . request ? . body || event . node . req [ RawBodySymbol ] || event . node . req . rawBody || event . node . req . body ;
if ( _rawBody ) {
const promise2 = Promise . resolve ( _rawBody ). then (( _resolved ) => {
if ( Buffer . isBuffer ( _resolved )) {
return _resolved ;
}
if ( typeof _resolved . pipeTo === "function" ) {
return new Promise (( resolve , reject ) => {
const chunks = [];
_resolved . pipeTo (
new WritableStream ({
write ( chunk ) {
chunks . push ( chunk );
},
close () {
resolve ( Buffer . concat ( chunks ));
},
abort ( reason ) {
reject ( reason );
}
})
). catch ( reject );
});
} else if ( typeof _resolved . pipe === "function" ) {
return new Promise (( resolve , reject ) => {
const chunks = [];
_resolved . on ( "data" , ( chunk ) => {
chunks . push ( chunk );
}). on ( "end" , () => {
resolve ( Buffer . concat ( chunks ));
}). on ( "error" , reject );
});
}
if ( _resolved . constructor === Object ) {
return Buffer . from ( JSON . stringify ( _resolved ));
}
if ( _resolved instanceof URLSearchParams ) {
return Buffer . from ( _resolved . toString ());
}
if ( _resolved instanceof FormData ) {
return new Response ( _resolved ). bytes (). then (( uint8arr ) => Buffer . from ( uint8arr ));
}
return Buffer . from ( _resolved );
});
return encoding ? promise2 . then (( buff ) => buff . toString ( encoding )) : promise2 ;
}
if ( ! Number . parseInt ( event . node . req . headers [ "content-length" ] || "" ) && ! String ( event . node . req . headers [ "transfer-encoding" ] ?? "" ). split ( "," ). map (( e ) => e . trim ()). filter ( Boolean ). includes ( "chunked" )) {
return Promise . resolve ( void 0 );
}
const promise = event . node . req [ RawBodySymbol ] = new Promise (
( resolve , reject ) => {
const bodyData = [];
event . node . req . on ( "error" , ( err ) => {
reject ( err );
}). on ( "data" , ( chunk ) => {
bodyData . push ( chunk );
}). on ( "end" , () => {
resolve ( Buffer . concat ( bodyData ));
});
}
);
const result = encoding ? promise . then (( buff ) => buff . toString ( encoding )) : promise ;
return result ;
}
function getRequestWebStream ( event ) {
if ( ! PayloadMethods$1 . includes ( event . method )) {
return ;
}
const bodyStream = event . web ? . request ? . body || event . _requestBody ;
if ( bodyStream ) {
return bodyStream ;
}
const _hasRawBody = RawBodySymbol in event . node . req || "rawBody" in event . node . req || "body" in event . node . req || "__unenv__" in event . node . req ;
if ( _hasRawBody ) {
return new ReadableStream ({
async start ( controller ) {
const _rawBody = await readRawBody ( event , false );
if ( _rawBody ) {
controller . enqueue ( _rawBody );
}
controller . close ();
}
});
}
return new ReadableStream ({
start : ( controller ) => {
event . node . req . on ( "data" , ( chunk ) => {
controller . enqueue ( chunk );
});
event . node . req . on ( "end" , () => {
controller . close ();
});
event . node . req . on ( "error" , ( err ) => {
controller . error ( err );
});
}
});
}
function handleCacheHeaders ( event , opts ) {
const cacheControls = [ "public" , ... opts . cacheControls || []];
let cacheMatched = false ;
if ( opts . maxAge !== void 0 ) {
cacheControls . push ( `max-age= ${ + opts . maxAge } ` , `s-maxage= ${ + opts . maxAge } ` );
}
if ( opts . modifiedTime ) {
const modifiedTime = new Date ( opts . modifiedTime );
const ifModifiedSince = event . node . req . headers [ "if-modified-since" ];
event . node . res . setHeader ( "last-modified" , modifiedTime . toUTCString ());
if ( ifModifiedSince && new Date ( ifModifiedSince ) >= modifiedTime ) {
cacheMatched = true ;
}
}
if ( opts . etag ) {
event . node . res . setHeader ( "etag" , opts . etag );
const ifNonMatch = event . node . req . headers [ "if-none-match" ];
if ( ifNonMatch === opts . etag ) {
cacheMatched = true ;
}
}
event . node . res . setHeader ( "cache-control" , cacheControls . join ( ", " ));
if ( cacheMatched ) {
event . node . res . statusCode = 304 ;
if ( ! event . handled ) {
event . node . res . end ();
}
return true ;
}
return false ;
}
const MIMES = {
html : "text/html" ,
json : "application/json"
};
const DISALLOWED_STATUS_CHARS = /[^\u0009\u0020-\u007E]/g ;
function sanitizeStatusMessage ( statusMessage = "" ) {
return statusMessage . replace ( DISALLOWED_STATUS_CHARS , "" );
}
function sanitizeStatusCode ( statusCode , defaultStatusCode = 200 ) {
if ( ! statusCode ) {
return defaultStatusCode ;
}
if ( typeof statusCode === "string" ) {
statusCode = Number . parseInt ( statusCode , 10 );
}
if ( statusCode < 100 || statusCode > 999 ) {
return defaultStatusCode ;
}
return statusCode ;
}
function splitCookiesString ( cookiesString ) {
if ( Array . isArray ( cookiesString )) {
return cookiesString . flatMap (( c ) => splitCookiesString ( c ));
}
if ( typeof cookiesString !== "string" ) {
return [];
}
const cookiesStrings = [];
let pos = 0 ;
let start ;
let ch ;
let lastComma ;
let nextStart ;
let cookiesSeparatorFound ;
const skipWhitespace = () => {
while ( pos < cookiesString . length && /\s/ . test ( cookiesString . charAt ( pos ))) {
pos += 1 ;
}
return pos < cookiesString . length ;
};
const notSpecialChar = () => {
ch = cookiesString . charAt ( pos );
return ch !== "=" && ch !== ";" && ch !== "," ;
};
while ( pos < cookiesString . length ) {
start = pos ;
cookiesSeparatorFound = false ;
while ( skipWhitespace ()) {
ch = cookiesString . charAt ( pos );
if ( ch === "," ) {
lastComma = pos ;
pos += 1 ;
skipWhitespace ();
nextStart = pos ;
while ( pos < cookiesString . length && notSpecialChar ()) {
pos += 1 ;
}
if ( pos < cookiesString . length && cookiesString . charAt ( pos ) === "=" ) {
cookiesSeparatorFound = true ;
pos = nextStart ;
cookiesStrings . push ( cookiesString . slice ( start , lastComma ));
start = pos ;
} else {
pos = lastComma + 1 ;
}
} else {
pos += 1 ;
}
}
if ( ! cookiesSeparatorFound || pos >= cookiesString . length ) {
cookiesStrings . push ( cookiesString . slice ( start ));
}
}
return cookiesStrings ;
}
const defer = typeof setImmediate === "undefined" ? ( fn ) => fn () : setImmediate ;
function send ( event , data , type ) {
if ( type ) {
defaultContentType ( event , type );
}
return new Promise (( resolve ) => {
defer (() => {
if ( ! event . handled ) {
event . node . res . end ( data );
}
resolve ();
});
});
}
function sendNoContent ( event , code ) {
if ( event . handled ) {
return ;
}
if ( ! code && event . node . res . statusCode !== 200 ) {
code = event . node . res . statusCode ;
}
const _code = sanitizeStatusCode ( code , 204 );
if ( _code === 204 ) {
event . node . res . removeHeader ( "content-length" );
}
event . node . res . writeHead ( _code );
event . node . res . end ();
}
function setResponseStatus ( event , code , text ) {
if ( code ) {
event . node . res . statusCode = sanitizeStatusCode (
code ,
event . node . res . statusCode
);
}
if ( text ) {
event . node . res . statusMessage = sanitizeStatusMessage ( text );
}
}
function getResponseStatus ( event ) {
return event . node . res . statusCode ;
}
function getResponseStatusText ( event ) {
return event . node . res . statusMessage ;
}
function defaultContentType ( event , type ) {
if ( type && event . node . res . statusCode !== 304 && ! event . node . res . getHeader ( "content-type" )) {
event . node . res . setHeader ( "content-type" , type );
}
}
function sendRedirect ( event , location , code = 302 ) {
event . node . res . statusCode = sanitizeStatusCode (
code ,
event . node . res . statusCode
);
event . node . res . setHeader ( "location" , location );
const encodedLoc = location . replace ( /"/g , "%22" );
const html = `<!DOCTYPE html><html><head><meta http-equiv="refresh" content="0; url= ${ encodedLoc } "></head></html>` ;
return send ( event , html , MIMES . html );
}
function getResponseHeader ( event , name ) {
return event . node . res . getHeader ( name );
}
function setResponseHeaders ( event , headers ) {
for ( const [ name , value ] of Object . entries ( headers )) {
event . node . res . setHeader (
name ,
value
);
}
}
const setHeaders = setResponseHeaders ;
function setResponseHeader ( event , name , value ) {
event . node . res . setHeader ( name , value );
}
const setHeader = setResponseHeader ;
function appendResponseHeader ( event , name , value ) {
let current = event . node . res . getHeader ( name );
if ( ! current ) {
event . node . res . setHeader ( name , value );
return ;
}
if ( ! Array . isArray ( current )) {
current = [ current . toString ()];
}
event . node . res . setHeader ( name , [... current , value ]);
}
function removeResponseHeader ( event , name ) {
return event . node . res . removeHeader ( name );
}
function isStream ( data ) {
if ( ! data || typeof data !== "object" ) {
return false ;
}
if ( typeof data . pipe === "function" ) {
if ( typeof data . _read === "function" ) {
return true ;
}
if ( typeof data . abort === "function" ) {
return true ;
}
}
if ( typeof data . pipeTo === "function" ) {
return true ;
}
return false ;
}
function isWebResponse ( data ) {
return typeof Response !== "undefined" && data instanceof Response ;
}
function sendStream ( event , stream ) {
if ( ! stream || typeof stream !== "object" ) {
throw new Error ( "[h3] Invalid stream provided." );
}
event . node . res . _data = stream ;
if ( ! event . node . res . socket ) {
event . _handled = true ;
return Promise . resolve ();
}
if ( hasProp ( stream , "pipeTo" ) && typeof stream . pipeTo === "function" ) {
return stream . pipeTo (
new WritableStream ({
write ( chunk ) {
event . node . res . write ( chunk );
}
})
). then (() => {
event . node . res . end ();
});
}
if ( hasProp ( stream , "pipe" ) && typeof stream . pipe === "function" ) {
return new Promise (( resolve , reject ) => {
stream . pipe ( event . node . res );
if ( stream . on ) {
stream . on ( "end" , () => {
event . node . res . end ();
resolve ();
});
stream . on ( "error" , ( error ) => {
reject ( error );
});
}
event . node . res . on ( "close" , () => {
if ( stream . abort ) {
stream . abort ();
}
});
});
}
throw new Error ( "[h3] Invalid or incompatible stream provided." );
}
function sendWebResponse ( event , response ) {
for ( const [ key , value ] of response . headers ) {
if ( key === "set-cookie" ) {
event . node . res . appendHeader ( key , splitCookiesString ( value ));
} else {
event . node . res . setHeader ( key , value );
}
}
if ( response . status ) {
event . node . res . statusCode = sanitizeStatusCode (
response . status ,
event . node . res . statusCode
);
}
if ( response . statusText ) {
event . node . res . statusMessage = sanitizeStatusMessage ( response . statusText );
}
if ( response . redirected ) {
event . node . res . setHeader ( "location" , response . url );
}
if ( ! response . body ) {
event . node . res . end ();
return ;
}
return sendStream ( event , response . body );
}
const PayloadMethods = /* @__PURE__ */ new Set ([ "PATCH" , "POST" , "PUT" , "DELETE" ]);
const ignoredHeaders = /* @__PURE__ */ new Set ([
"transfer-encoding" ,
"accept-encoding" ,
"connection" ,
"keep-alive" ,
"upgrade" ,
"expect" ,
"host" ,
"accept"
]);
async function proxyRequest ( event , target , opts = {}) {
let body ;
let duplex ;
if ( PayloadMethods . has ( event . method )) {
if ( opts . streamRequest ) {
body = getRequestWebStream ( event );
duplex = "half" ;
} else {
body = await readRawBody ( event , false ). catch (() => void 0 );
}
}
const method = opts . fetchOptions ? . method || event . method ;
const fetchHeaders = mergeHeaders$1 (
getProxyRequestHeaders ( event , { host : target . startsWith ( "/" ) }),
opts . fetchOptions ? . headers ,
opts . headers
);
return sendProxy ( event , target , {
... opts ,
fetchOptions : {
method ,
body ,
duplex ,
... opts . fetchOptions ,
headers : fetchHeaders
}
});
}
async function sendProxy ( event , target , opts = {}) {
let response ;
try {
response = await _getFetch ( opts . fetch )( target , {
headers : opts . headers ,
ignoreResponseError : true ,
// make $ofetch.raw transparent
... opts . fetchOptions
});
} catch ( error ) {
throw createError$1 ({
status : 502 ,
statusMessage : "Bad Gateway" ,
cause : error
});
}
event . node . res . statusCode = sanitizeStatusCode (
response . status ,
event . node . res . statusCode
);
event . node . res . statusMessage = sanitizeStatusMessage ( response . statusText );
const cookies = [];
for ( const [ key , value ] of response . headers . entries ()) {
if ( key === "content-encoding" ) {
continue ;
}
if ( key === "content-length" ) {
continue ;
}
if ( key === "set-cookie" ) {
cookies . push (... splitCookiesString ( value ));
continue ;
}
event . node . res . setHeader ( key , value );
}
if ( cookies . length > 0 ) {
event . node . res . setHeader (
"set-cookie" ,
cookies . map (( cookie ) => {
if ( opts . cookieDomainRewrite ) {
cookie = rewriteCookieProperty (
cookie ,
opts . cookieDomainRewrite ,
"domain"
);
}
if ( opts . cookiePathRewrite ) {
cookie = rewriteCookieProperty (
cookie ,
opts . cookiePathRewrite ,
"path"
);
}
return cookie ;
})
);
}
if ( opts . onResponse ) {
await opts . onResponse ( event , response );
}
if ( response . _data !== void 0 ) {
return response . _data ;
}
if ( event . handled ) {
return ;
}
if ( opts . sendStream === false ) {
const data = new Uint8Array ( await response . arrayBuffer ());
return event . node . res . end ( data );
}
if ( response . body ) {
for await ( const chunk of response . body ) {
event . node . res . write ( chunk );
}
}
return event . node . res . end ();
}
function getProxyRequestHeaders ( event , opts ) {
const headers = /* @__PURE__ */ Object . create ( null );
const reqHeaders = getRequestHeaders ( event );
for ( const name in reqHeaders ) {
if ( ! ignoredHeaders . has ( name ) || name === "host" && opts ? . host ) {
headers [ name ] = reqHeaders [ name ];
}
}
return headers ;
}
function fetchWithEvent ( event , req , init , options ) {
return _getFetch ( options ? . fetch )( req , {
... init ,
context : init ? . context || event . context ,
headers : {
... getProxyRequestHeaders ( event , {
host : typeof req === "string" && req . startsWith ( "/" )
}),
... init ? . headers
}
});
}
function _getFetch ( _fetch ) {
if ( _fetch ) {
return _fetch ;
}
if ( globalThis . fetch ) {
return globalThis . fetch ;
}
throw new Error (
"fetch is not available. Try importing `node-fetch-native/polyfill` for Node.js."
);
}
function rewriteCookieProperty ( header , map , property ) {
const _map = typeof map === "string" ? { "*" : map } : map ;
return header . replace (
new RegExp ( `(;\\s* ${ property } =)([^;]+)` , "gi" ),
( match , prefix , previousValue ) => {
let newValue ;
if ( previousValue in _map ) {
newValue = _map [ previousValue ];
} else if ( "*" in _map ) {
newValue = _map [ "*" ];
} else {
return match ;
}
return newValue ? prefix + newValue : "" ;
}
);
}
function mergeHeaders$1 ( defaults , ... inputs ) {
const _inputs = inputs . filter ( Boolean );
if ( _inputs . length === 0 ) {
return defaults ;
}
const merged = new Headers ( defaults );
for ( const input of _inputs ) {
const entries = Array . isArray ( input ) ? input : typeof input . entries === "function" ? input . entries () : Object . entries ( input );
for ( const [ key , value ] of entries ) {
if ( value !== void 0 ) {
merged . set ( key , value );
}
}
}
return merged ;
}
class H3Event {
"__is_event__" = true ;
// Context
node ;
// Node
web ;
// Web
context = {};
// Shared
// Request
_method ;
_path ;
_headers ;
_requestBody ;
// Response
_handled = false ;
// Hooks
_onBeforeResponseCalled ;
_onAfterResponseCalled ;
constructor ( req , res ) {
this . node = { req , res };
}
// --- Request ---
get method () {
if ( ! this . _method ) {
this . _method = ( this . node . req . method || "GET" ). toUpperCase ();
}
return this . _method ;
}
get path () {
return this . _path || this . node . req . url || "/" ;
}
get headers () {
if ( ! this . _headers ) {
this . _headers = _normalizeNodeHeaders ( this . node . req . headers );
}
return this . _headers ;
}
// --- Respoonse ---
get handled () {
return this . _handled || this . node . res . writableEnded || this . node . res . headersSent ;
}
respondWith ( response ) {
return Promise . resolve ( response ). then (
( _response ) => sendWebResponse ( this , _response )
);
}
// --- Utils ---
toString () {
return `[ ${ this . method } ] ${ this . path } ` ;
}
toJSON () {
return this . toString ();
}
// --- Deprecated ---
/** @deprecated Please use `event.node.req` instead. */
get req () {
return this . node . req ;
}
/** @deprecated Please use `event.node.res` instead. */
get res () {
return this . node . res ;
}
}
function isEvent ( input ) {
return hasProp ( input , "__is_event__" );
}
function createEvent ( req , res ) {
return new H3Event ( req , res );
}
function _normalizeNodeHeaders ( nodeHeaders ) {
const headers = new Headers ();
for ( const [ name , value ] of Object . entries ( nodeHeaders )) {
if ( Array . isArray ( value )) {
for ( const item of value ) {
headers . append ( name , item );
}
} else if ( value ) {
headers . set ( name , value );
}
}
return headers ;
}
function defineEventHandler ( handler ) {
if ( typeof handler === "function" ) {
handler . __is_handler__ = true ;
return handler ;
}
const _hooks = {
onRequest : _normalizeArray ( handler . onRequest ),
onBeforeResponse : _normalizeArray ( handler . onBeforeResponse )
};
const _handler = ( event ) => {
return _callHandler ( event , handler . handler , _hooks );
};
_handler . __is_handler__ = true ;
_handler . __resolve__ = handler . handler . __resolve__ ;
_handler . __websocket__ = handler . websocket ;
return _handler ;
}
function _normalizeArray ( input ) {
return input ? Array . isArray ( input ) ? input : [ input ] : void 0 ;
}
async function _callHandler ( event , handler , hooks ) {
if ( hooks . onRequest ) {
for ( const hook of hooks . onRequest ) {
await hook ( event );
if ( event . handled ) {
return ;
}
}
}
const body = await handler ( event );
const response = { body };
if ( hooks . onBeforeResponse ) {
for ( const hook of hooks . onBeforeResponse ) {
await hook ( event , response );
}
}
return response . body ;
}
const eventHandler = defineEventHandler ;
function isEventHandler ( input ) {
return hasProp ( input , "__is_handler__" );
}
function toEventHandler ( input , _ , _route ) {
if ( ! isEventHandler ( input )) {
console . warn (
"[h3] Implicit event handler conversion is deprecated. Use `eventHandler()` or `fromNodeMiddleware()` to define event handlers." ,
_route && _route !== "/" ? `
Route: ${ _route } ` : "" ,
`
Handler: ${ input } `
);
}
return input ;
}
function defineLazyEventHandler ( factory ) {
let _promise ;
let _resolved ;
const resolveHandler = () => {
if ( _resolved ) {
return Promise . resolve ( _resolved );
}
if ( ! _promise ) {
_promise = Promise . resolve ( factory ()). then (( r ) => {
const handler2 = r . default || r ;
if ( typeof handler2 !== "function" ) {
throw new TypeError (
"Invalid lazy handler result. It should be a function:" ,
handler2
);
}
_resolved = { handler : toEventHandler ( r . default || r ) };
return _resolved ;
});
}
return _promise ;
};
const handler = eventHandler (( event ) => {
if ( _resolved ) {
return _resolved . handler ( event );
}
return resolveHandler (). then (( r ) => r . handler ( event ));
});
handler . __resolve__ = resolveHandler ;
return handler ;
}
const lazyEventHandler = defineLazyEventHandler ;
function createApp ( options = {}) {
const stack = [];
const handler = createAppEventHandler ( stack , options );
const resolve = createResolver ( stack );
handler . __resolve__ = resolve ;
const getWebsocket = cachedFn (() => websocketOptions ( resolve , options ));
const app = {
// @ts-expect-error
use : ( arg1 , arg2 , arg3 ) => use ( app , arg1 , arg2 , arg3 ),
resolve ,
handler ,
stack ,
options ,
get websocket () {
return getWebsocket ();
}
};
return app ;
}
function use ( app , arg1 , arg2 , arg3 ) {
if ( Array . isArray ( arg1 )) {
for ( const i of arg1 ) {
use ( app , i , arg2 , arg3 );
}
} else if ( Array . isArray ( arg2 )) {
for ( const i of arg2 ) {
use ( app , arg1 , i , arg3 );
}
} else if ( typeof arg1 === "string" ) {
app . stack . push (
normalizeLayer ({ ... arg3 , route : arg1 , handler : arg2 })
);
} else if ( typeof arg1 === "function" ) {
app . stack . push ( normalizeLayer ({ ... arg2 , handler : arg1 }));
} else {
app . stack . push ( normalizeLayer ({ ... arg1 }));
}
return app ;
}
function createAppEventHandler ( stack , options ) {
const spacing = options . debug ? 2 : void 0 ;
return eventHandler ( async ( event ) => {
event . node . req . originalUrl = event . node . req . originalUrl || event . node . req . url || "/" ;
const _reqPath = event . _path || event . node . req . url || "/" ;
let _layerPath ;
if ( options . onRequest ) {
await options . onRequest ( event );
}
for ( const layer of stack ) {
if ( layer . route . length > 1 ) {
if ( ! _reqPath . startsWith ( layer . route )) {
continue ;
}
_layerPath = _reqPath . slice ( layer . route . length ) || "/" ;
} else {
_layerPath = _reqPath ;
}
if ( layer . match && ! layer . match ( _layerPath , event )) {
continue ;
}
event . _path = _layerPath ;
event . node . req . url = _layerPath ;
const val = await layer . handler ( event );
const _body = val === void 0 ? void 0 : await val ;
if ( _body !== void 0 ) {
const _response = { body : _body };
if ( options . onBeforeResponse ) {
event . _onBeforeResponseCalled = true ;
await options . onBeforeResponse ( event , _response );
}
await handleHandlerResponse ( event , _response . body , spacing );
if ( options . onAfterResponse ) {
event . _onAfterResponseCalled = true ;
await options . onAfterResponse ( event , _response );
}
return ;
}
if ( event . handled ) {
if ( options . onAfterResponse ) {
event . _onAfterResponseCalled = true ;
await options . onAfterResponse ( event , void 0 );
}
return ;
}
}
if ( ! event . handled ) {
throw createError$1 ({
statusCode : 404 ,
statusMessage : `Cannot find any path matching ${ event . path || "/" } .`
});
}
if ( options . onAfterResponse ) {
event . _onAfterResponseCalled = true ;
await options . onAfterResponse ( event , void 0 );
}
});
}
function createResolver ( stack ) {
return async ( path ) => {
let _layerPath ;
for ( const layer of stack ) {
if ( layer . route === "/" && ! layer . handler . __resolve__ ) {
continue ;
}
if ( ! path . startsWith ( layer . route )) {
continue ;
}
_layerPath = path . slice ( layer . route . length ) || "/" ;
if ( layer . match && ! layer . match ( _layerPath , void 0 )) {
continue ;
}
let res = { route : layer . route , handler : layer . handler };
if ( res . handler . __resolve__ ) {
const _res = await res . handler . __resolve__ ( _layerPath );
if ( ! _res ) {
continue ;
}
res = {
... res ,
... _res ,
route : joinURL ( res . route || "/" , _res . route || "/" )
};
}
return res ;
}
};
}
function normalizeLayer ( input ) {
let handler = input . handler ;
if ( handler . handler ) {
handler = handler . handler ;
}
if ( input . lazy ) {
handler = lazyEventHandler ( handler );
} else if ( ! isEventHandler ( handler )) {
handler = toEventHandler ( handler , void 0 , input . route );
}
return {
route : withoutTrailingSlash ( input . route ),
match : input . match ,
handler
};
}
function handleHandlerResponse ( event , val , jsonSpace ) {
if ( val === null ) {
return sendNoContent ( event );
}
if ( val ) {
if ( isWebResponse ( val )) {
return sendWebResponse ( event , val );
}
if ( isStream ( val )) {
return sendStream ( event , val );
}
if ( val . buffer ) {
return send ( event , val );
}
if ( val . arrayBuffer && typeof val . arrayBuffer === "function" ) {
return val . arrayBuffer (). then (( arrayBuffer ) => {
return send ( event , Buffer . from ( arrayBuffer ), val . type );
});
}
if ( val instanceof Error ) {
throw createError$1 ( val );
}
if ( typeof val . end === "function" ) {
return true ;
}
}
const valType = typeof val ;
if ( valType === "string" ) {
return send ( event , val , MIMES . html );
}
if ( valType === "object" || valType === "boolean" || valType === "number" ) {
return send ( event , JSON . stringify ( val , void 0 , jsonSpace ), MIMES . json );
}
if ( valType === "bigint" ) {
return send ( event , val . toString (), MIMES . json );
}
throw createError$1 ({
statusCode : 500 ,
statusMessage : `[h3] Cannot send ${ valType } as response.`
});
}
function cachedFn ( fn ) {
let cache ;
return () => {
if ( ! cache ) {
cache = fn ();
}
return cache ;
};
}
function websocketOptions ( evResolver , appOptions ) {
return {
... appOptions . websocket ,
async resolve ( info ) {
const url = info . request ? . url || info . url || "/" ;
const { pathname } = typeof url === "string" ? parseURL ( url ) : url ;
const resolved = await evResolver ( pathname );
return resolved ? . handler ? . __websocket__ || {};
}
};
}
const RouterMethods = [
"connect" ,
"delete" ,
"get" ,
"head" ,
"options" ,
"post" ,
"put" ,
"trace" ,
"patch"
];
function createRouter ( opts = {}) {
const _router = createRouter$1 ({});
const routes = {};
let _matcher ;
const router = {};
const addRoute = ( path , handler , method ) => {
let route = routes [ path ];
if ( ! route ) {
routes [ path ] = route = { path , handlers : {} };
_router . insert ( path , route );
}
if ( Array . isArray ( method )) {
for ( const m of method ) {
addRoute ( path , handler , m );
}
} else {
route . handlers [ method ] = toEventHandler ( handler , void 0 , path );
}
return router ;
};
router . use = router . add = ( path , handler , method ) => addRoute ( path , handler , method || "all" );
for ( const method of RouterMethods ) {
router [ method ] = ( path , handle ) => router . add ( path , handle , method );
}
const matchHandler = ( path = "/" , method = "get" ) => {
const qIndex = path . indexOf ( "?" );
if ( qIndex !== - 1 ) {
path = path . slice ( 0 , Math . max ( 0 , qIndex ));
}
const matched = _router . lookup ( path );
if ( ! matched || ! matched . handlers ) {
return {
error : createError$1 ({
statusCode : 404 ,
name : "Not Found" ,
statusMessage : `Cannot find any route matching ${ path || "/" } .`
})
};
}
let handler = matched . handlers [ method ] || matched . handlers . all ;
if ( ! handler ) {
if ( ! _matcher ) {
_matcher = toRouteMatcher ( _router );
}
const _matches = _matcher . matchAll ( path ). reverse ();
for ( const _match of _matches ) {
if ( _match . handlers [ method ]) {
handler = _match . handlers [ method ];
matched . handlers [ method ] = matched . handlers [ method ] || handler ;
break ;
}
if ( _match . handlers . all ) {
handler = _match . handlers . all ;
matched . handlers . all = matched . handlers . all || handler ;
break ;
}
}
}
if ( ! handler ) {
return {
error : createError$1 ({
statusCode : 405 ,
name : "Method Not Allowed" ,
statusMessage : `Method ${ method } is not allowed on this route.`
})
};
}
return { matched , handler };
};
const isPreemptive = opts . preemptive || opts . preemtive ;
router . handler = eventHandler (( event ) => {
const match = matchHandler (
event . path ,
event . method . toLowerCase ()
);
if ( "error" in match ) {
if ( isPreemptive ) {
throw match . error ;
} else {
return ;
}
}
event . context . matchedRoute = match . matched ;
const params = match . matched . params || {};
event . context . params = params ;
return Promise . resolve ( match . handler ( event )). then (( res ) => {
if ( res === void 0 && isPreemptive ) {
return null ;
}
return res ;
});
});
router . handler . __resolve__ = async ( path ) => {
path = withLeadingSlash ( path );
const match = matchHandler ( path );
if ( "error" in match ) {
return ;
}
let res = {
route : match . matched . path ,
handler : match . handler
};
if ( match . handler . __resolve__ ) {
const _res = await match . handler . __resolve__ ( path );
if ( ! _res ) {
return ;
}
res = { ... res , ... _res };
}
return res ;
};
return router ;
}
function toNodeListener ( app ) {
const toNodeHandle = async function ( req , res ) {
const event = createEvent ( req , res );
try {
await app . handler ( event );
} catch ( _error ) {
const error = createError$1 ( _error );
if ( ! isError ( _error )) {
error . unhandled = true ;
}
setResponseStatus ( event , error . statusCode , error . statusMessage );
if ( app . options . onError ) {
await app . options . onError ( error , event );
}
if ( event . handled ) {
return ;
}
if ( error . unhandled || error . fatal ) {
console . error ( "[h3]" , error . fatal ? "[fatal]" : "[unhandled]" , error );
}
if ( app . options . onBeforeResponse && ! event . _onBeforeResponseCalled ) {
await app . options . onBeforeResponse ( event , { body : error });
}
await sendError ( event , error , !! app . options . debug );
if ( app . options . onAfterResponse && ! event . _onAfterResponseCalled ) {
await app . options . onAfterResponse ( event , { body : error });
}
}
};
return toNodeHandle ;
}
function flatHooks ( configHooks , hooks = {}, parentName ) {
for ( const key in configHooks ) {
const subHook = configHooks [ key ];
const name = parentName ? ` ${ parentName } : ${ key } ` : key ;
if ( typeof subHook === "object" && subHook !== null ) {
flatHooks ( subHook , hooks , name );
} else if ( typeof subHook === "function" ) {
hooks [ name ] = subHook ;
}
}
return hooks ;
}
const defaultTask = { run : ( function_ ) => function_ () };
const _createTask = () => defaultTask ;
const createTask = typeof console . createTask !== "undefined" ? console . createTask : _createTask ;
function serialTaskCaller ( hooks , args ) {
const name = args . shift ();
const task = createTask ( name );
return hooks . reduce (
( promise , hookFunction ) => promise . then (() => task . run (() => hookFunction (... args ))),
Promise . resolve ()
);
}
function parallelTaskCaller ( hooks , args ) {
const name = args . shift ();
const task = createTask ( name );
return Promise . all ( hooks . map (( hook ) => task . run (() => hook (... args ))));
}
function callEachWith ( callbacks , arg0 ) {
for ( const callback of [... callbacks ]) {
callback ( arg0 );
}
}
class Hookable {
constructor () {
this . _hooks = {};
this . _before = void 0 ;
this . _after = void 0 ;
this . _deprecatedMessages = void 0 ;
this . _deprecatedHooks = {};
this . hook = this . hook . bind ( this );
this . callHook = this . callHook . bind ( this );
this . callHookWith = this . callHookWith . bind ( this );
}
hook ( name , function_ , options = {}) {
if ( ! name || typeof function_ !== "function" ) {
return () => {
};
}
const originalName = name ;
let dep ;
while ( this . _deprecatedHooks [ name ]) {
dep = this . _deprecatedHooks [ name ];
name = dep . to ;
}
if ( dep && ! options . allowDeprecated ) {
let message = dep . message ;
if ( ! message ) {
message = ` ${ originalName } hook has been deprecated` + ( dep . to ? `, please use ${ dep . to } ` : "" );
}
if ( ! this . _deprecatedMessages ) {
this . _deprecatedMessages = /* @__PURE__ */ new Set ();
}
if ( ! this . _deprecatedMessages . has ( message )) {
console . warn ( message );
this . _deprecatedMessages . add ( message );
}
}
if ( ! function_ . name ) {
try {
Object . defineProperty ( function_ , "name" , {
get : () => "_" + name . replace ( /\W+/g , "_" ) + "_hook_cb" ,
configurable : true
});
} catch {
}
}
this . _hooks [ name ] = this . _hooks [ name ] || [];
this . _hooks [ name ]. push ( function_ );
return () => {
if ( function_ ) {
this . removeHook ( name , function_ );
function_ = void 0 ;
}
};
}
hookOnce ( name , function_ ) {
let _unreg ;
let _function = (... arguments_ ) => {
if ( typeof _unreg === "function" ) {
_unreg ();
}
_unreg = void 0 ;
_function = void 0 ;
return function_ (... arguments_ );
};
_unreg = this . hook ( name , _function );
return _unreg ;
}
removeHook ( name , function_ ) {
if ( this . _hooks [ name ]) {
const index = this . _hooks [ name ]. indexOf ( function_ );
if ( index !== - 1 ) {
this . _hooks [ name ]. splice ( index , 1 );
}
if ( this . _hooks [ name ]. length === 0 ) {
delete this . _hooks [ name ];
}
}
}
deprecateHook ( name , deprecated ) {
this . _deprecatedHooks [ name ] = typeof deprecated === "string" ? { to : deprecated } : deprecated ;
const _hooks = this . _hooks [ name ] || [];
delete this . _hooks [ name ];
for ( const hook of _hooks ) {
this . hook ( name , hook );
}
}
deprecateHooks ( deprecatedHooks ) {
Object . assign ( this . _deprecatedHooks , deprecatedHooks );
for ( const name in deprecatedHooks ) {
this . deprecateHook ( name , deprecatedHooks [ name ]);
}
}
addHooks ( configHooks ) {
const hooks = flatHooks ( configHooks );
const removeFns = Object . keys ( hooks ). map (
( key ) => this . hook ( key , hooks [ key ])
);
return () => {
for ( const unreg of removeFns . splice ( 0 , removeFns . length )) {
unreg ();
}
};
}
removeHooks ( configHooks ) {
const hooks = flatHooks ( configHooks );
for ( const key in hooks ) {
this . removeHook ( key , hooks [ key ]);
}
}
removeAllHooks () {
for ( const key in this . _hooks ) {
delete this . _hooks [ key ];
}
}
callHook ( name , ... arguments_ ) {
arguments_ . unshift ( name );
return this . callHookWith ( serialTaskCaller , name , ... arguments_ );
}
callHookParallel ( name , ... arguments_ ) {
arguments_ . unshift ( name );
return this . callHookWith ( parallelTaskCaller , name , ... arguments_ );
}
callHookWith ( caller , name , ... arguments_ ) {
const event = this . _before || this . _after ? { name , args : arguments_ , context : {} } : void 0 ;
if ( this . _before ) {
callEachWith ( this . _before , event );
}
const result = caller (
name in this . _hooks ? [... this . _hooks [ name ]] : [],
arguments_
);
if ( result instanceof Promise ) {
return result . finally (() => {
if ( this . _after && event ) {
callEachWith ( this . _after , event );
}
});
}
if ( this . _after && event ) {
callEachWith ( this . _after , event );
}
return result ;
}
beforeEach ( function_ ) {
this . _before = this . _before || [];
this . _before . push ( function_ );
return () => {
if ( this . _before !== void 0 ) {
const index = this . _before . indexOf ( function_ );
if ( index !== - 1 ) {
this . _before . splice ( index , 1 );
}
}
};
}
afterEach ( function_ ) {
this . _after = this . _after || [];
this . _after . push ( function_ );
return () => {
if ( this . _after !== void 0 ) {
const index = this . _after . indexOf ( function_ );
if ( index !== - 1 ) {
this . _after . splice ( index , 1 );
}
}
};
}
}
function createHooks () {
return new Hookable ();
}
2026-01-27 16:02:45 +03:30
const s$1 = globalThis . Headers , i$1 = globalThis . AbortController , l$1 = globalThis . fetch || (()=>{ throw new Error ( "[node-fetch-native] Failed to fetch: `globalThis.fetch` is not available!" )});
2025-07-23 16:57:31 +03:30
class FetchError extends Error {
constructor ( message , opts ) {
super ( message , opts );
this . name = "FetchError" ;
if ( opts ? . cause && ! this . cause ) {
this . cause = opts . cause ;
}
}
}
function createFetchError ( ctx ) {
const errorMessage = ctx . error ? . message || ctx . error ? . toString () || "" ;
const method = ctx . request ? . method || ctx . options ? . method || "GET" ;
const url = ctx . request ? . url || String ( ctx . request ) || "/" ;
const requestStr = `[ ${ method } ] ${ JSON . stringify ( url ) } ` ;
const statusStr = ctx . response ? ` ${ ctx . response . status } ${ ctx . response . statusText } ` : "<no response>" ;
const message = ` ${ requestStr } : ${ statusStr }${ errorMessage ? ` ${ errorMessage } ` : "" } ` ;
const fetchError = new FetchError (
message ,
ctx . error ? { cause : ctx . error } : void 0
);
for ( const key of [ "request" , "options" , "response" ]) {
Object . defineProperty ( fetchError , key , {
get () {
return ctx [ key ];
}
});
}
for ( const [ key , refKey ] of [
[ "data" , "_data" ],
[ "status" , "status" ],
[ "statusCode" , "status" ],
[ "statusText" , "statusText" ],
[ "statusMessage" , "statusText" ]
]) {
Object . defineProperty ( fetchError , key , {
get () {
return ctx . response && ctx . response [ refKey ];
}
});
}
return fetchError ;
}
const payloadMethods = new Set (
Object . freeze ([ "PATCH" , "POST" , "PUT" , "DELETE" ])
);
function isPayloadMethod ( method = "GET" ) {
return payloadMethods . has ( method . toUpperCase ());
}
function isJSONSerializable ( value ) {
if ( value === void 0 ) {
return false ;
}
const t = typeof value ;
if ( t === "string" || t === "number" || t === "boolean" || t === null ) {
return true ;
}
if ( t !== "object" ) {
return false ;
}
if ( Array . isArray ( value )) {
return true ;
}
if ( value . buffer ) {
return false ;
}
2026-01-27 16:02:45 +03:30
if ( value instanceof FormData || value instanceof URLSearchParams ) {
return false ;
}
2025-07-23 16:57:31 +03:30
return value . constructor && value . constructor . name === "Object" || typeof value . toJSON === "function" ;
}
const textTypes = /* @__PURE__ */ new Set ([
"image/svg" ,
"application/xml" ,
"application/xhtml" ,
"application/html"
]);
const JSON_RE = /^application\/(?:[\w!#$%&*.^`~-]*\+)?json(;.+)?$/i ;
function detectResponseType ( _contentType = "" ) {
if ( ! _contentType ) {
return "json" ;
}
const contentType = _contentType . split ( ";" ). shift () || "" ;
if ( JSON_RE . test ( contentType )) {
return "json" ;
}
2026-01-27 16:02:45 +03:30
if ( contentType === "text/event-stream" ) {
return "stream" ;
}
2025-07-23 16:57:31 +03:30
if ( textTypes . has ( contentType ) || contentType . startsWith ( "text/" )) {
return "text" ;
}
return "blob" ;
}
function resolveFetchOptions ( request , input , defaults , Headers ) {
const headers = mergeHeaders (
input ? . headers ?? request ? . headers ,
defaults ? . headers ,
Headers
);
let query ;
if ( defaults ? . query || defaults ? . params || input ? . params || input ? . query ) {
query = {
... defaults ? . params ,
... defaults ? . query ,
... input ? . params ,
... input ? . query
};
}
return {
... defaults ,
... input ,
query ,
params : query ,
headers
};
}
function mergeHeaders ( input , defaults , Headers ) {
if ( ! defaults ) {
return new Headers ( input );
}
const headers = new Headers ( defaults );
if ( input ) {
for ( const [ key , value ] of Symbol . iterator in input || Array . isArray ( input ) ? input : new Headers ( input )) {
headers . set ( key , value );
}
}
return headers ;
}
async function callHooks ( context , hooks ) {
if ( hooks ) {
if ( Array . isArray ( hooks )) {
for ( const hook of hooks ) {
await hook ( context );
}
} else {
await hooks ( context );
}
}
}
const retryStatusCodes = /* @__PURE__ */ new Set ([
408 ,
// Request Timeout
409 ,
// Conflict
425 ,
// Too Early (Experimental)
429 ,
// Too Many Requests
500 ,
// Internal Server Error
502 ,
// Bad Gateway
503 ,
// Service Unavailable
504
// Gateway Timeout
]);
const nullBodyResponses = /* @__PURE__ */ new Set ([ 101 , 204 , 205 , 304 ]);
function createFetch ( globalOptions = {}) {
const {
fetch = globalThis . fetch ,
Headers = globalThis . Headers ,
AbortController = globalThis . AbortController
} = globalOptions ;
async function onError ( context ) {
const isAbort = context . error && context . error . name === "AbortError" && ! context . options . timeout || false ;
if ( context . options . retry !== false && ! isAbort ) {
let retries ;
if ( typeof context . options . retry === "number" ) {
retries = context . options . retry ;
} else {
retries = isPayloadMethod ( context . options . method ) ? 0 : 1 ;
}
const responseCode = context . response && context . response . status || 500 ;
if ( retries > 0 && ( Array . isArray ( context . options . retryStatusCodes ) ? context . options . retryStatusCodes . includes ( responseCode ) : retryStatusCodes . has ( responseCode ))) {
const retryDelay = typeof context . options . retryDelay === "function" ? context . options . retryDelay ( context ) : context . options . retryDelay || 0 ;
if ( retryDelay > 0 ) {
await new Promise (( resolve ) => setTimeout ( resolve , retryDelay ));
}
return $fetchRaw ( context . request , {
... context . options ,
retry : retries - 1
});
}
}
const error = createFetchError ( context );
if ( Error . captureStackTrace ) {
Error . captureStackTrace ( error , $fetchRaw );
}
throw error ;
}
const $fetchRaw = async function $fetchRaw2 ( _request , _options = {}) {
const context = {
request : _request ,
options : resolveFetchOptions (
_request ,
_options ,
globalOptions . defaults ,
Headers
),
response : void 0 ,
error : void 0
};
if ( context . options . method ) {
context . options . method = context . options . method . toUpperCase ();
}
if ( context . options . onRequest ) {
await callHooks ( context , context . options . onRequest );
2026-01-27 16:02:45 +03:30
if ( ! ( context . options . headers instanceof Headers )) {
context . options . headers = new Headers (
context . options . headers || {}
/* compat */
);
}
2025-07-23 16:57:31 +03:30
}
if ( typeof context . request === "string" ) {
if ( context . options . baseURL ) {
context . request = withBase ( context . request , context . options . baseURL );
}
if ( context . options . query ) {
context . request = withQuery ( context . request , context . options . query );
delete context . options . query ;
}
if ( "query" in context . options ) {
delete context . options . query ;
}
if ( "params" in context . options ) {
delete context . options . params ;
}
}
if ( context . options . body && isPayloadMethod ( context . options . method )) {
if ( isJSONSerializable ( context . options . body )) {
2026-01-27 16:02:45 +03:30
const contentType = context . options . headers . get ( "content-type" );
if ( typeof context . options . body !== "string" ) {
context . options . body = contentType === "application/x-www-form-urlencoded" ? new URLSearchParams (
context . options . body
). toString () : JSON . stringify ( context . options . body );
}
if ( ! contentType ) {
2025-07-23 16:57:31 +03:30
context . options . headers . set ( "content-type" , "application/json" );
}
if ( ! context . options . headers . has ( "accept" )) {
context . options . headers . set ( "accept" , "application/json" );
}
} else if (
// ReadableStream Body
"pipeTo" in context . options . body && typeof context . options . body . pipeTo === "function" || // Node.js Stream Body
typeof context . options . body . pipe === "function"
) {
if ( ! ( "duplex" in context . options )) {
context . options . duplex = "half" ;
}
}
}
let abortTimeout ;
if ( ! context . options . signal && context . options . timeout ) {
const controller = new AbortController ();
abortTimeout = setTimeout (() => {
const error = new Error (
"[TimeoutError]: The operation was aborted due to timeout"
);
error . name = "TimeoutError" ;
error . code = 23 ;
controller . abort ( error );
}, context . options . timeout );
context . options . signal = controller . signal ;
}
try {
context . response = await fetch (
context . request ,
context . options
);
} catch ( error ) {
context . error = error ;
if ( context . options . onRequestError ) {
await callHooks (
context ,
context . options . onRequestError
);
}
return await onError ( context );
} finally {
if ( abortTimeout ) {
clearTimeout ( abortTimeout );
}
}
const hasBody = ( context . response . body || // https://github.com/unjs/ofetch/issues/324
// https://github.com/unjs/ofetch/issues/294
// https://github.com/JakeChampion/fetch/issues/1454
context . response . _bodyInit ) && ! nullBodyResponses . has ( context . response . status ) && context . options . method !== "HEAD" ;
if ( hasBody ) {
const responseType = ( context . options . parseResponse ? "json" : context . options . responseType ) || detectResponseType ( context . response . headers . get ( "content-type" ) || "" );
switch ( responseType ) {
case "json" : {
const data = await context . response . text ();
const parseFunction = context . options . parseResponse || destr ;
context . response . _data = parseFunction ( data );
break ;
}
case "stream" : {
context . response . _data = context . response . body || context . response . _bodyInit ;
break ;
}
default : {
context . response . _data = await context . response [ responseType ]();
}
}
}
if ( context . options . onResponse ) {
await callHooks (
context ,
context . options . onResponse
);
}
if ( ! context . options . ignoreResponseError && context . response . status >= 400 && context . response . status < 600 ) {
if ( context . options . onResponseError ) {
await callHooks (
context ,
context . options . onResponseError
);
}
return await onError ( context );
}
return context . response ;
};
const $fetch = async function $fetch2 ( request , options ) {
const r = await $fetchRaw ( request , options );
return r . _data ;
};
$fetch . raw = $fetchRaw ;
$fetch . native = (... args ) => fetch (... args );
$fetch . create = ( defaultOptions = {}, customGlobalOptions = {}) => createFetch ({
... globalOptions ,
... customGlobalOptions ,
defaults : {
... globalOptions . defaults ,
... customGlobalOptions . defaults ,
... defaultOptions
}
});
return $fetch ;
}
function createNodeFetch () {
const useKeepAlive = JSON . parse ( process . env . FETCH_KEEP_ALIVE || "false" );
if ( ! useKeepAlive ) {
2026-01-27 16:02:45 +03:30
return l$1 ;
2025-07-23 16:57:31 +03:30
}
const agentOptions = { keepAlive : true };
const httpAgent = new http . Agent ( agentOptions );
const httpsAgent = new https . Agent ( agentOptions );
const nodeFetchOptions = {
agent ( parsedURL ) {
return parsedURL . protocol === "http:" ? httpAgent : httpsAgent ;
}
};
return function nodeFetchWithKeepAlive ( input , init ) {
2026-01-27 16:02:45 +03:30
return l$1 ( input , { ... nodeFetchOptions , ... init });
2025-07-23 16:57:31 +03:30
};
}
const fetch = globalThis . fetch ? (... args ) => globalThis . fetch (... args ) : createNodeFetch ();
const Headers$1 = globalThis . Headers || s$1 ;
2026-01-27 16:02:45 +03:30
const AbortController$1 = globalThis . AbortController || i$1 ;
createFetch ({ fetch , Headers : Headers$1 , AbortController : AbortController$1 });
2025-07-23 16:57:31 +03:30
function wrapToPromise ( value ) {
if ( ! value || typeof value . then !== "function" ) {
return Promise . resolve ( value );
}
return value ;
}
function asyncCall ( function_ , ... arguments_ ) {
try {
return wrapToPromise ( function_ (... arguments_ ));
} catch ( error ) {
return Promise . reject ( error );
}
}
function isPrimitive$1 ( value ) {
const type = typeof value ;
return value === null || type !== "object" && type !== "function" ;
}
function isPureObject ( value ) {
const proto = Object . getPrototypeOf ( value );
return ! proto || proto . isPrototypeOf ( Object );
}
function stringify ( value ) {
if ( isPrimitive$1 ( value )) {
return String ( value );
}
if ( isPureObject ( value ) || Array . isArray ( value )) {
return JSON . stringify ( value );
}
if ( typeof value . toJSON === "function" ) {
return stringify ( value . toJSON ());
}
throw new Error ( "[unstorage] Cannot stringify value!" );
}
const BASE64_PREFIX = "base64:" ;
function serializeRaw ( value ) {
if ( typeof value === "string" ) {
return value ;
}
return BASE64_PREFIX + base64Encode ( value );
}
function deserializeRaw ( value ) {
if ( typeof value !== "string" ) {
return value ;
}
if ( ! value . startsWith ( BASE64_PREFIX )) {
return value ;
}
return base64Decode ( value . slice ( BASE64_PREFIX . length ));
}
function base64Decode ( input ) {
if ( globalThis . Buffer ) {
return Buffer . from ( input , "base64" );
}
return Uint8Array . from (
globalThis . atob ( input ),
( c ) => c . codePointAt ( 0 )
);
}
function base64Encode ( input ) {
if ( globalThis . Buffer ) {
return Buffer . from ( input ). toString ( "base64" );
}
return globalThis . btoa ( String . fromCodePoint (... input ));
}
const storageKeyProperties = [
"has" ,
"hasItem" ,
"get" ,
"getItem" ,
"getItemRaw" ,
"set" ,
"setItem" ,
"setItemRaw" ,
"del" ,
"remove" ,
"removeItem" ,
"getMeta" ,
"setMeta" ,
"removeMeta" ,
"getKeys" ,
"clear" ,
"mount" ,
"unmount"
];
function prefixStorage ( storage , base ) {
base = normalizeBaseKey ( base );
if ( ! base ) {
return storage ;
}
const nsStorage = { ... storage };
for ( const property of storageKeyProperties ) {
nsStorage [ property ] = ( key = "" , ... args ) => (
// @ts-ignore
storage [ property ]( base + key , ... args )
);
}
nsStorage . getKeys = ( key = "" , ... arguments_ ) => storage . getKeys ( base + key , ... arguments_ ). then (( keys ) => keys . map (( key2 ) => key2 . slice ( base . length )));
2026-01-27 16:02:45 +03:30
nsStorage . keys = nsStorage . getKeys ;
2025-07-23 16:57:31 +03:30
nsStorage . getItems = async ( items , commonOptions ) => {
const prefixedItems = items . map (
( item ) => typeof item === "string" ? base + item : { ... item , key : base + item . key }
);
const results = await storage . getItems ( prefixedItems , commonOptions );
return results . map (( entry ) => ({
key : entry . key . slice ( base . length ),
value : entry . value
}));
};
nsStorage . setItems = async ( items , commonOptions ) => {
const prefixedItems = items . map (( item ) => ({
key : base + item . key ,
value : item . value ,
options : item . options
}));
return storage . setItems ( prefixedItems , commonOptions );
};
return nsStorage ;
}
function normalizeKey$1 ( key ) {
if ( ! key ) {
return "" ;
}
return key . split ( "?" )[ 0 ] ? . replace ( /[/\\]/g , ":" ). replace ( /:+/g , ":" ). replace ( /^:|:$/g , "" ) || "" ;
}
function joinKeys (... keys ) {
return normalizeKey$1 ( keys . join ( ":" ));
}
function normalizeBaseKey ( base ) {
base = normalizeKey$1 ( base );
return base ? base + ":" : "" ;
}
function filterKeyByDepth ( key , depth ) {
if ( depth === void 0 ) {
return true ;
}
let substrCount = 0 ;
let index = key . indexOf ( ":" );
while ( index > - 1 ) {
substrCount ++ ;
index = key . indexOf ( ":" , index + 1 );
}
return substrCount <= depth ;
}
function filterKeyByBase ( key , base ) {
if ( base ) {
return key . startsWith ( base ) && key [ key . length - 1 ] !== "$" ;
}
return key [ key . length - 1 ] !== "$" ;
}
function defineDriver$1 ( factory ) {
return factory ;
}
const DRIVER_NAME$1 = "memory" ;
const memory = defineDriver$1 (() => {
const data = /* @__PURE__ */ new Map ();
return {
name : DRIVER_NAME$1 ,
getInstance : () => data ,
hasItem ( key ) {
return data . has ( key );
},
getItem ( key ) {
return data . get ( key ) ?? null ;
},
getItemRaw ( key ) {
return data . get ( key ) ?? null ;
},
setItem ( key , value ) {
data . set ( key , value );
},
setItemRaw ( key , value ) {
data . set ( key , value );
},
removeItem ( key ) {
data . delete ( key );
},
getKeys () {
return [... data . keys ()];
},
clear () {
data . clear ();
},
dispose () {
data . clear ();
}
};
});
function createStorage ( options = {}) {
const context = {
mounts : { "" : options . driver || memory () },
mountpoints : [ "" ],
watching : false ,
watchListeners : [],
unwatch : {}
};
const getMount = ( key ) => {
for ( const base of context . mountpoints ) {
if ( key . startsWith ( base )) {
return {
base ,
relativeKey : key . slice ( base . length ),
driver : context . mounts [ base ]
};
}
}
return {
base : "" ,
relativeKey : key ,
driver : context . mounts [ "" ]
};
};
const getMounts = ( base , includeParent ) => {
return context . mountpoints . filter (
( mountpoint ) => mountpoint . startsWith ( base ) || includeParent && base . startsWith ( mountpoint )
). map (( mountpoint ) => ({
relativeBase : base . length > mountpoint . length ? base . slice ( mountpoint . length ) : void 0 ,
mountpoint ,
driver : context . mounts [ mountpoint ]
}));
};
const onChange = ( event , key ) => {
if ( ! context . watching ) {
return ;
}
key = normalizeKey$1 ( key );
for ( const listener of context . watchListeners ) {
listener ( event , key );
}
};
const startWatch = async () => {
if ( context . watching ) {
return ;
}
context . watching = true ;
for ( const mountpoint in context . mounts ) {
context . unwatch [ mountpoint ] = await watch (
context . mounts [ mountpoint ],
onChange ,
mountpoint
);
}
};
const stopWatch = async () => {
if ( ! context . watching ) {
return ;
}
for ( const mountpoint in context . unwatch ) {
await context . unwatch [ mountpoint ]();
}
context . unwatch = {};
context . watching = false ;
};
const runBatch = ( items , commonOptions , cb ) => {
const batches = /* @__PURE__ */ new Map ();
const getBatch = ( mount ) => {
let batch = batches . get ( mount . base );
if ( ! batch ) {
batch = {
driver : mount . driver ,
base : mount . base ,
items : []
};
batches . set ( mount . base , batch );
}
return batch ;
};
for ( const item of items ) {
const isStringItem = typeof item === "string" ;
const key = normalizeKey$1 ( isStringItem ? item : item . key );
const value = isStringItem ? void 0 : item . value ;
const options2 = isStringItem || ! item . options ? commonOptions : { ... commonOptions , ... item . options };
const mount = getMount ( key );
getBatch ( mount ). items . push ({
key ,
value ,
relativeKey : mount . relativeKey ,
options : options2
});
}
return Promise . all ([... batches . values ()]. map (( batch ) => cb ( batch ))). then (
( r ) => r . flat ()
);
};
const storage = {
// Item
hasItem ( key , opts = {}) {
key = normalizeKey$1 ( key );
const { relativeKey , driver } = getMount ( key );
return asyncCall ( driver . hasItem , relativeKey , opts );
},
getItem ( key , opts = {}) {
key = normalizeKey$1 ( key );
const { relativeKey , driver } = getMount ( key );
return asyncCall ( driver . getItem , relativeKey , opts ). then (
( value ) => destr ( value )
);
},
getItems ( items , commonOptions = {}) {
return runBatch ( items , commonOptions , ( batch ) => {
if ( batch . driver . getItems ) {
return asyncCall (
batch . driver . getItems ,
batch . items . map (( item ) => ({
key : item . relativeKey ,
options : item . options
})),
commonOptions
). then (
( r ) => r . map (( item ) => ({
key : joinKeys ( batch . base , item . key ),
value : destr ( item . value )
}))
);
}
return Promise . all (
batch . items . map (( item ) => {
return asyncCall (
batch . driver . getItem ,
item . relativeKey ,
item . options
). then (( value ) => ({
key : item . key ,
value : destr ( value )
}));
})
);
});
},
getItemRaw ( key , opts = {}) {
key = normalizeKey$1 ( key );
const { relativeKey , driver } = getMount ( key );
if ( driver . getItemRaw ) {
return asyncCall ( driver . getItemRaw , relativeKey , opts );
}
return asyncCall ( driver . getItem , relativeKey , opts ). then (
( value ) => deserializeRaw ( value )
);
},
async setItem ( key , value , opts = {}) {
if ( value === void 0 ) {
return storage . removeItem ( key );
}
key = normalizeKey$1 ( key );
const { relativeKey , driver } = getMount ( key );
if ( ! driver . setItem ) {
return ;
}
await asyncCall ( driver . setItem , relativeKey , stringify ( value ), opts );
if ( ! driver . watch ) {
onChange ( "update" , key );
}
},
async setItems ( items , commonOptions ) {
await runBatch ( items , commonOptions , async ( batch ) => {
if ( batch . driver . setItems ) {
return asyncCall (
batch . driver . setItems ,
batch . items . map (( item ) => ({
key : item . relativeKey ,
value : stringify ( item . value ),
options : item . options
})),
commonOptions
);
}
if ( ! batch . driver . setItem ) {
return ;
}
await Promise . all (
batch . items . map (( item ) => {
return asyncCall (
batch . driver . setItem ,
item . relativeKey ,
stringify ( item . value ),
item . options
);
})
);
});
},
async setItemRaw ( key , value , opts = {}) {
if ( value === void 0 ) {
return storage . removeItem ( key , opts );
}
key = normalizeKey$1 ( key );
const { relativeKey , driver } = getMount ( key );
if ( driver . setItemRaw ) {
await asyncCall ( driver . setItemRaw , relativeKey , value , opts );
} else if ( driver . setItem ) {
await asyncCall ( driver . setItem , relativeKey , serializeRaw ( value ), opts );
} else {
return ;
}
if ( ! driver . watch ) {
onChange ( "update" , key );
}
},
async removeItem ( key , opts = {}) {
if ( typeof opts === "boolean" ) {
opts = { removeMeta : opts };
}
key = normalizeKey$1 ( key );
const { relativeKey , driver } = getMount ( key );
if ( ! driver . removeItem ) {
return ;
}
await asyncCall ( driver . removeItem , relativeKey , opts );
if ( opts . removeMeta || opts . removeMata ) {
await asyncCall ( driver . removeItem , relativeKey + "$" , opts );
}
if ( ! driver . watch ) {
onChange ( "remove" , key );
}
},
// Meta
async getMeta ( key , opts = {}) {
if ( typeof opts === "boolean" ) {
opts = { nativeOnly : opts };
}
key = normalizeKey$1 ( key );
const { relativeKey , driver } = getMount ( key );
const meta = /* @__PURE__ */ Object . create ( null );
if ( driver . getMeta ) {
Object . assign ( meta , await asyncCall ( driver . getMeta , relativeKey , opts ));
}
if ( ! opts . nativeOnly ) {
const value = await asyncCall (
driver . getItem ,
relativeKey + "$" ,
opts
). then (( value_ ) => destr ( value_ ));
if ( value && typeof value === "object" ) {
if ( typeof value . atime === "string" ) {
value . atime = new Date ( value . atime );
}
if ( typeof value . mtime === "string" ) {
value . mtime = new Date ( value . mtime );
}
Object . assign ( meta , value );
}
}
return meta ;
},
setMeta ( key , value , opts = {}) {
return this . setItem ( key + "$" , value , opts );
},
removeMeta ( key , opts = {}) {
return this . removeItem ( key + "$" , opts );
},
// Keys
async getKeys ( base , opts = {}) {
base = normalizeBaseKey ( base );
const mounts = getMounts ( base , true );
let maskedMounts = [];
const allKeys = [];
let allMountsSupportMaxDepth = true ;
for ( const mount of mounts ) {
if ( ! mount . driver . flags ? . maxDepth ) {
allMountsSupportMaxDepth = false ;
}
const rawKeys = await asyncCall (
mount . driver . getKeys ,
mount . relativeBase ,
opts
);
for ( const key of rawKeys ) {
const fullKey = mount . mountpoint + normalizeKey$1 ( key );
if ( ! maskedMounts . some (( p ) => fullKey . startsWith ( p ))) {
allKeys . push ( fullKey );
}
}
maskedMounts = [
mount . mountpoint ,
... maskedMounts . filter (( p ) => ! p . startsWith ( mount . mountpoint ))
];
}
const shouldFilterByDepth = opts . maxDepth !== void 0 && ! allMountsSupportMaxDepth ;
return allKeys . filter (
( key ) => ( ! shouldFilterByDepth || filterKeyByDepth ( key , opts . maxDepth )) && filterKeyByBase ( key , base )
);
},
// Utils
async clear ( base , opts = {}) {
base = normalizeBaseKey ( base );
await Promise . all (
getMounts ( base , false ). map ( async ( m ) => {
if ( m . driver . clear ) {
return asyncCall ( m . driver . clear , m . relativeBase , opts );
}
if ( m . driver . removeItem ) {
const keys = await m . driver . getKeys ( m . relativeBase || "" , opts );
return Promise . all (
keys . map (( key ) => m . driver . removeItem ( key , opts ))
);
}
})
);
},
async dispose () {
await Promise . all (
Object . values ( context . mounts ). map (( driver ) => dispose ( driver ))
);
},
async watch ( callback ) {
await startWatch ();
context . watchListeners . push ( callback );
return async () => {
context . watchListeners = context . watchListeners . filter (
( listener ) => listener !== callback
);
if ( context . watchListeners . length === 0 ) {
await stopWatch ();
}
};
},
async unwatch () {
context . watchListeners = [];
await stopWatch ();
},
// Mount
mount ( base , driver ) {
base = normalizeBaseKey ( base );
if ( base && context . mounts [ base ]) {
throw new Error ( `already mounted at ${ base } ` );
}
if ( base ) {
context . mountpoints . push ( base );
context . mountpoints . sort (( a , b ) => b . length - a . length );
}
context . mounts [ base ] = driver ;
if ( context . watching ) {
Promise . resolve ( watch ( driver , onChange , base )). then (( unwatcher ) => {
context . unwatch [ base ] = unwatcher ;
}). catch ( console . error );
}
return storage ;
},
async unmount ( base , _dispose = true ) {
base = normalizeBaseKey ( base );
if ( ! base || ! context . mounts [ base ]) {
return ;
}
if ( context . watching && base in context . unwatch ) {
context . unwatch [ base ] ? .();
delete context . unwatch [ base ];
}
if ( _dispose ) {
await dispose ( context . mounts [ base ]);
}
context . mountpoints = context . mountpoints . filter (( key ) => key !== base );
delete context . mounts [ base ];
},
getMount ( key = "" ) {
key = normalizeKey$1 ( key ) + ":" ;
const m = getMount ( key );
return {
driver : m . driver ,
base : m . base
};
},
getMounts ( base = "" , opts = {}) {
base = normalizeKey$1 ( base );
const mounts = getMounts ( base , opts . parents );
return mounts . map (( m ) => ({
driver : m . driver ,
base : m . mountpoint
}));
},
// Aliases
keys : ( base , opts = {}) => storage . getKeys ( base , opts ),
get : ( key , opts = {}) => storage . getItem ( key , opts ),
set : ( key , value , opts = {}) => storage . setItem ( key , value , opts ),
has : ( key , opts = {}) => storage . hasItem ( key , opts ),
del : ( key , opts = {}) => storage . removeItem ( key , opts ),
remove : ( key , opts = {}) => storage . removeItem ( key , opts )
};
return storage ;
}
function watch ( driver , onChange , base ) {
return driver . watch ? driver . watch (( event , key ) => onChange ( event , base + key )) : () => {
};
}
async function dispose ( driver ) {
if ( typeof driver . dispose === "function" ) {
await asyncCall ( driver . dispose );
}
}
const _assets = {
};
const normalizeKey = function normalizeKey ( key ) {
if ( ! key ) {
return "" ;
}
return key . split ( "?" )[ 0 ] ? . replace ( /[/\\]/g , ":" ). replace ( /:+/g , ":" ). replace ( /^:|:$/g , "" ) || "" ;
};
const assets$1 = {
getKeys () {
return Promise . resolve ( Object . keys ( _assets ))
},
hasItem ( id ) {
id = normalizeKey ( id );
return Promise . resolve ( id in _assets )
},
getItem ( id ) {
id = normalizeKey ( id );
return Promise . resolve ( _assets [ id ] ? _assets [ id ]. import () : null )
},
getMeta ( id ) {
id = normalizeKey ( id );
return Promise . resolve ( _assets [ id ] ? _assets [ id ]. meta : {})
}
};
function defineDriver ( factory ) {
return factory ;
}
function createError ( driver , message , opts ) {
const err = new Error ( `[unstorage] [ ${ driver } ] ${ message } ` , opts );
if ( Error . captureStackTrace ) {
Error . captureStackTrace ( err , createError );
}
return err ;
}
function createRequiredError ( driver , name ) {
if ( Array . isArray ( name )) {
return createError (
driver ,
`Missing some of the required options ${ name . map (( n ) => "`" + n + "`" ). join ( ", " ) } `
);
}
return createError ( driver , `Missing required option \` ${ name } \`.` );
}
function ignoreNotfound ( err ) {
return err . code === "ENOENT" || err . code === "EISDIR" ? null : err ;
}
function ignoreExists ( err ) {
return err . code === "EEXIST" ? null : err ;
}
async function writeFile ( path , data , encoding ) {
await ensuredir ( dirname$1 ( path ));
return promises . writeFile ( path , data , encoding );
}
function readFile ( path , encoding ) {
return promises . readFile ( path , encoding ). catch ( ignoreNotfound );
}
function unlink ( path ) {
return promises . unlink ( path ). catch ( ignoreNotfound );
}
function readdir ( dir ) {
return promises . readdir ( dir , { withFileTypes : true }). catch ( ignoreNotfound ). then (( r ) => r || []);
}
async function ensuredir ( dir ) {
if ( existsSync ( dir )) {
return ;
}
await ensuredir ( dirname$1 ( dir )). catch ( ignoreExists );
await promises . mkdir ( dir ). catch ( ignoreExists );
}
async function readdirRecursive ( dir , ignore , maxDepth ) {
if ( ignore && ignore ( dir )) {
return [];
}
const entries = await readdir ( dir );
const files = [];
await Promise . all (
entries . map ( async ( entry ) => {
const entryPath = resolve$2 ( dir , entry . name );
if ( entry . isDirectory ()) {
if ( maxDepth === void 0 || maxDepth > 0 ) {
const dirFiles = await readdirRecursive (
entryPath ,
ignore ,
maxDepth === void 0 ? void 0 : maxDepth - 1
);
files . push (... dirFiles . map (( f ) => entry . name + "/" + f ));
}
} else {
if ( ! ( ignore && ignore ( entry . name ))) {
files . push ( entry . name );
}
}
})
);
return files ;
}
async function rmRecursive ( dir ) {
const entries = await readdir ( dir );
await Promise . all (
entries . map (( entry ) => {
const entryPath = resolve$2 ( dir , entry . name );
if ( entry . isDirectory ()) {
return rmRecursive ( entryPath ). then (() => promises . rmdir ( entryPath ));
} else {
return promises . unlink ( entryPath );
}
})
);
}
const PATH_TRAVERSE_RE = /\.\.:|\.\.$/ ;
const DRIVER_NAME = "fs-lite" ;
const unstorage_47drivers_47fs_45lite = defineDriver (( opts = {}) => {
if ( ! opts . base ) {
throw createRequiredError ( DRIVER_NAME , "base" );
}
opts . base = resolve$2 ( opts . base );
const r = ( key ) => {
if ( PATH_TRAVERSE_RE . test ( key )) {
throw createError (
DRIVER_NAME ,
`Invalid key: ${ JSON . stringify ( key ) } . It should not contain .. segments`
);
}
const resolved = join ( opts . base , key . replace ( /:/g , "/" ));
return resolved ;
};
return {
name : DRIVER_NAME ,
options : opts ,
flags : {
maxDepth : true
},
hasItem ( key ) {
return existsSync ( r ( key ));
},
getItem ( key ) {
return readFile ( r ( key ), "utf8" );
},
getItemRaw ( key ) {
return readFile ( r ( key ));
},
async getMeta ( key ) {
const { atime , mtime , size , birthtime , ctime } = await promises . stat ( r ( key )). catch (() => ({}));
return { atime , mtime , size , birthtime , ctime };
},
setItem ( key , value ) {
if ( opts . readOnly ) {
return ;
}
return writeFile ( r ( key ), value , "utf8" );
},
setItemRaw ( key , value ) {
if ( opts . readOnly ) {
return ;
}
return writeFile ( r ( key ), value );
},
removeItem ( key ) {
if ( opts . readOnly ) {
return ;
}
return unlink ( r ( key ));
},
getKeys ( _base , topts ) {
return readdirRecursive ( r ( "." ), opts . ignore , topts ? . maxDepth );
},
async clear () {
if ( opts . readOnly || opts . noClear ) {
return ;
}
await rmRecursive ( r ( "." ));
}
};
});
const storage = createStorage ({});
storage . mount ( '/assets' , assets$1 );
storage . mount ( 'data' , unstorage_47drivers_47fs_45lite ({ "driver" : "fsLite" , "base" : "./.data/kv" }));
function useStorage ( base = "" ) {
return base ? prefixStorage ( storage , base ) : storage ;
}
2026-01-27 16:02:45 +03:30
const e = globalThis . process ? . getBuiltinModule ? .( "crypto" ) ? . hash , r$1 = "sha256" , s = "base64url" ; function digest ( t ){ if ( e ) return e ( r$1 , t , s ); const o = createHash ( r$1 ). update ( t ); return globalThis . process ? . versions ? . webcontainer ? o . digest (). toString ( s ) : o . digest ( s )}
2025-07-23 16:57:31 +03:30
const Hasher = /* @__PURE__ */ (() => {
class Hasher2 {
buff = "" ;
# context = /* @__PURE__ */ new Map ();
write ( str ) {
this . buff += str ;
}
dispatch ( value ) {
const type = value === null ? "null" : typeof value ;
return this [ type ]( value );
}
object ( object ) {
if ( object && typeof object . toJSON === "function" ) {
return this . object ( object . toJSON ());
}
const objString = Object . prototype . toString . call ( object );
let objType = "" ;
const objectLength = objString . length ;
objType = objectLength < 10 ? "unknown:[" + objString + "]" : objString . slice ( 8 , objectLength - 1 );
objType = objType . toLowerCase ();
let objectNumber = null ;
if (( objectNumber = this . # context . get ( object )) === void 0 ) {
this . # context . set ( object , this . # context . size );
} else {
return this . dispatch ( "[CIRCULAR:" + objectNumber + "]" );
}
if ( typeof Buffer !== "undefined" && Buffer . isBuffer && Buffer . isBuffer ( object )) {
this . write ( "buffer:" );
return this . write ( object . toString ( "utf8" ));
}
if ( objType !== "object" && objType !== "function" && objType !== "asyncfunction" ) {
if ( this [ objType ]) {
this [ objType ]( object );
} else {
this . unknown ( object , objType );
}
} else {
const keys = Object . keys ( object ). sort ();
const extraKeys = [];
this . write ( "object:" + ( keys . length + extraKeys . length ) + ":" );
const dispatchForKey = ( key ) => {
this . dispatch ( key );
this . write ( ":" );
this . dispatch ( object [ key ]);
this . write ( "," );
};
for ( const key of keys ) {
dispatchForKey ( key );
}
for ( const key of extraKeys ) {
dispatchForKey ( key );
}
}
}
array ( arr , unordered ) {
unordered = unordered === void 0 ? false : unordered ;
this . write ( "array:" + arr . length + ":" );
if ( ! unordered || arr . length <= 1 ) {
for ( const entry of arr ) {
this . dispatch ( entry );
}
return ;
}
const contextAdditions = /* @__PURE__ */ new Map ();
const entries = arr . map (( entry ) => {
const hasher = new Hasher2 ();
hasher . dispatch ( entry );
for ( const [ key , value ] of hasher . # context ) {
contextAdditions . set ( key , value );
}
return hasher . toString ();
});
this . # context = contextAdditions ;
entries . sort ();
return this . array ( entries , false );
}
date ( date ) {
return this . write ( "date:" + date . toJSON ());
}
symbol ( sym ) {
return this . write ( "symbol:" + sym . toString ());
}
unknown ( value , type ) {
this . write ( type );
if ( ! value ) {
return ;
}
this . write ( ":" );
if ( value && typeof value . entries === "function" ) {
return this . array (
[... value . entries ()],
true
/* ordered */
);
}
}
error ( err ) {
return this . write ( "error:" + err . toString ());
}
boolean ( bool ) {
return this . write ( "bool:" + bool );
}
string ( string ) {
this . write ( "string:" + string . length + ":" );
this . write ( string );
}
function ( fn ) {
this . write ( "fn:" );
if ( isNativeFunction ( fn )) {
this . dispatch ( "[native]" );
} else {
this . dispatch ( fn . toString ());
}
}
number ( number ) {
return this . write ( "number:" + number );
}
null () {
return this . write ( "Null" );
}
undefined () {
return this . write ( "Undefined" );
}
regexp ( regex ) {
return this . write ( "regex:" + regex . toString ());
}
arraybuffer ( arr ) {
this . write ( "arraybuffer:" );
return this . dispatch ( new Uint8Array ( arr ));
}
url ( url ) {
return this . write ( "url:" + url . toString ());
}
map ( map ) {
this . write ( "map:" );
const arr = [... map ];
return this . array ( arr , false );
}
set ( set ) {
this . write ( "set:" );
const arr = [... set ];
return this . array ( arr , false );
}
bigint ( number ) {
return this . write ( "bigint:" + number . toString ());
}
}
for ( const type of [
"uint8array" ,
"uint8clampedarray" ,
"unt8array" ,
"uint16array" ,
"unt16array" ,
"uint32array" ,
"unt32array" ,
"float32array" ,
"float64array"
]) {
Hasher2 . prototype [ type ] = function ( arr ) {
this . write ( type + ":" );
return this . array ([... arr ], false );
};
}
function isNativeFunction ( f ) {
if ( typeof f !== "function" ) {
return false ;
}
return Function . prototype . toString . call ( f ). slice (
- 15
/* "[native code] }".length */
) === "[native code] }" ;
}
return Hasher2 ;
})();
function serialize ( object ) {
const hasher = new Hasher ();
hasher . dispatch ( object );
return hasher . buff ;
}
function hash ( value ) {
return digest ( typeof value === "string" ? value : serialize ( value )). replace ( /[-_]/g , "" ). slice ( 0 , 10 );
}
function defaultCacheOptions () {
return {
name : "_" ,
base : "/cache" ,
swr : true ,
maxAge : 1
};
}
function defineCachedFunction ( fn , opts = {}) {
opts = { ... defaultCacheOptions (), ... opts };
const pending = {};
const group = opts . group || "nitro/functions" ;
const name = opts . name || fn . name || "_" ;
const integrity = opts . integrity || hash ([ fn , opts ]);
const validate = opts . validate || (( entry ) => entry . value !== void 0 );
async function get ( key , resolver , shouldInvalidateCache , event ) {
const cacheKey = [ opts . base , group , name , key + ".json" ]. filter ( Boolean ). join ( ":" ). replace ( /:\/$/ , ":index" );
let entry = await useStorage (). getItem ( cacheKey ). catch (( error ) => {
console . error ( `[cache] Cache read error.` , error );
useNitroApp (). captureError ( error , { event , tags : [ "cache" ] });
}) || {};
if ( typeof entry !== "object" ) {
entry = {};
const error = new Error ( "Malformed data read from cache." );
console . error ( "[cache]" , error );
useNitroApp (). captureError ( error , { event , tags : [ "cache" ] });
}
const ttl = ( opts . maxAge ?? 0 ) * 1e3 ;
if ( ttl ) {
entry . expires = Date . now () + ttl ;
}
const expired = shouldInvalidateCache || entry . integrity !== integrity || ttl && Date . now () - ( entry . mtime || 0 ) > ttl || validate ( entry ) === false ;
const _resolve = async () => {
const isPending = pending [ key ];
if ( ! isPending ) {
if ( entry . value !== void 0 && ( opts . staleMaxAge || 0 ) >= 0 && opts . swr === false ) {
entry . value = void 0 ;
entry . integrity = void 0 ;
entry . mtime = void 0 ;
entry . expires = void 0 ;
}
pending [ key ] = Promise . resolve ( resolver ());
}
try {
entry . value = await pending [ key ];
} catch ( error ) {
if ( ! isPending ) {
delete pending [ key ];
}
throw error ;
}
if ( ! isPending ) {
entry . mtime = Date . now ();
entry . integrity = integrity ;
delete pending [ key ];
if ( validate ( entry ) !== false ) {
let setOpts ;
if ( opts . maxAge && ! opts . swr ) {
setOpts = { ttl : opts . maxAge };
}
const promise = useStorage (). setItem ( cacheKey , entry , setOpts ). catch (( error ) => {
console . error ( `[cache] Cache write error.` , error );
useNitroApp (). captureError ( error , { event , tags : [ "cache" ] });
});
if ( event ? . waitUntil ) {
event . waitUntil ( promise );
}
}
}
};
const _resolvePromise = expired ? _resolve () : Promise . resolve ();
if ( entry . value === void 0 ) {
await _resolvePromise ;
} else if ( expired && event && event . waitUntil ) {
event . waitUntil ( _resolvePromise );
}
if ( opts . swr && validate ( entry ) !== false ) {
_resolvePromise . catch (( error ) => {
console . error ( `[cache] SWR handler error.` , error );
useNitroApp (). captureError ( error , { event , tags : [ "cache" ] });
});
return entry ;
}
return _resolvePromise . then (() => entry );
}
return async (... args ) => {
const shouldBypassCache = await opts . shouldBypassCache ? .(... args );
if ( shouldBypassCache ) {
return fn (... args );
}
const key = await ( opts . getKey || getKey )(... args );
const shouldInvalidateCache = await opts . shouldInvalidateCache ? .(... args );
const entry = await get (
key ,
() => fn (... args ),
shouldInvalidateCache ,
args [ 0 ] && isEvent ( args [ 0 ]) ? args [ 0 ] : void 0
);
let value = entry . value ;
if ( opts . transform ) {
value = await opts . transform ( entry , ... args ) || value ;
}
return value ;
};
}
function cachedFunction ( fn , opts = {}) {
return defineCachedFunction ( fn , opts );
}
function getKey (... args ) {
return args . length > 0 ? hash ( args ) : "" ;
}
function escapeKey ( key ) {
return String ( key ). replace ( /\W/g , "" );
}
function defineCachedEventHandler ( handler , opts = defaultCacheOptions ()) {
const variableHeaderNames = ( opts . varies || []). filter ( Boolean ). map (( h ) => h . toLowerCase ()). sort ();
const _opts = {
... opts ,
getKey : async ( event ) => {
const customKey = await opts . getKey ? .( event );
if ( customKey ) {
return escapeKey ( customKey );
}
const _path = event . node . req . originalUrl || event . node . req . url || event . path ;
let _pathname ;
try {
_pathname = escapeKey ( decodeURI ( parseURL ( _path ). pathname )). slice ( 0 , 16 ) || "index" ;
} catch {
_pathname = "-" ;
}
const _hashedPath = ` ${ _pathname } . ${ hash ( _path ) } ` ;
const _headers = variableHeaderNames . map (( header ) => [ header , event . node . req . headers [ header ]]). map (([ name , value ]) => ` ${ escapeKey ( name ) } . ${ hash ( value ) } ` );
return [ _hashedPath , ... _headers ]. join ( ":" );
},
validate : ( entry ) => {
if ( ! entry . value ) {
return false ;
}
if ( entry . value . code >= 400 ) {
return false ;
}
if ( entry . value . body === void 0 ) {
return false ;
}
if ( entry . value . headers . etag === "undefined" || entry . value . headers [ "last-modified" ] === "undefined" ) {
return false ;
}
return true ;
},
group : opts . group || "nitro/handlers" ,
integrity : opts . integrity || hash ([ handler , opts ])
};
const _cachedHandler = cachedFunction (
async ( incomingEvent ) => {
const variableHeaders = {};
for ( const header of variableHeaderNames ) {
const value = incomingEvent . node . req . headers [ header ];
if ( value !== void 0 ) {
variableHeaders [ header ] = value ;
}
}
const reqProxy = cloneWithProxy ( incomingEvent . node . req , {
headers : variableHeaders
});
const resHeaders = {};
let _resSendBody ;
const resProxy = cloneWithProxy ( incomingEvent . node . res , {
statusCode : 200 ,
writableEnded : false ,
writableFinished : false ,
headersSent : false ,
closed : false ,
getHeader ( name ) {
return resHeaders [ name ];
},
setHeader ( name , value ) {
resHeaders [ name ] = value ;
return this ;
},
getHeaderNames () {
return Object . keys ( resHeaders );
},
hasHeader ( name ) {
return name in resHeaders ;
},
removeHeader ( name ) {
delete resHeaders [ name ];
},
getHeaders () {
return resHeaders ;
},
end ( chunk , arg2 , arg3 ) {
if ( typeof chunk === "string" ) {
_resSendBody = chunk ;
}
if ( typeof arg2 === "function" ) {
arg2 ();
}
if ( typeof arg3 === "function" ) {
arg3 ();
}
return this ;
},
write ( chunk , arg2 , arg3 ) {
if ( typeof chunk === "string" ) {
_resSendBody = chunk ;
}
if ( typeof arg2 === "function" ) {
arg2 ( void 0 );
}
if ( typeof arg3 === "function" ) {
arg3 ();
}
return true ;
},
writeHead ( statusCode , headers2 ) {
this . statusCode = statusCode ;
if ( headers2 ) {
if ( Array . isArray ( headers2 ) || typeof headers2 === "string" ) {
throw new TypeError ( "Raw headers is not supported." );
}
for ( const header in headers2 ) {
const value = headers2 [ header ];
if ( value !== void 0 ) {
this . setHeader (
header ,
value
);
}
}
}
return this ;
}
});
const event = createEvent ( reqProxy , resProxy );
event . fetch = ( url , fetchOptions ) => fetchWithEvent ( event , url , fetchOptions , {
fetch : useNitroApp (). localFetch
});
event . $fetch = ( url , fetchOptions ) => fetchWithEvent ( event , url , fetchOptions , {
fetch : globalThis . $fetch
});
event . waitUntil = incomingEvent . waitUntil ;
event . context = incomingEvent . context ;
event . context . cache = {
options : _opts
};
const body = await handler ( event ) || _resSendBody ;
const headers = event . node . res . getHeaders ();
headers . etag = String (
headers . Etag || headers . etag || `W/" ${ hash ( body ) } "`
);
headers [ "last-modified" ] = String (
headers [ "Last-Modified" ] || headers [ "last-modified" ] || ( /* @__PURE__ */ new Date ()). toUTCString ()
);
const cacheControl = [];
if ( opts . swr ) {
if ( opts . maxAge ) {
cacheControl . push ( `s-maxage= ${ opts . maxAge } ` );
}
if ( opts . staleMaxAge ) {
cacheControl . push ( `stale-while-revalidate= ${ opts . staleMaxAge } ` );
} else {
cacheControl . push ( "stale-while-revalidate" );
}
} else if ( opts . maxAge ) {
cacheControl . push ( `max-age= ${ opts . maxAge } ` );
}
if ( cacheControl . length > 0 ) {
headers [ "cache-control" ] = cacheControl . join ( ", " );
}
const cacheEntry = {
code : event . node . res . statusCode ,
headers ,
body
};
return cacheEntry ;
},
_opts
);
return defineEventHandler ( async ( event ) => {
if ( opts . headersOnly ) {
if ( handleCacheHeaders ( event , { maxAge : opts . maxAge })) {
return ;
}
return handler ( event );
}
const response = await _cachedHandler (
event
);
if ( event . node . res . headersSent || event . node . res . writableEnded ) {
return response . body ;
}
if ( handleCacheHeaders ( event , {
modifiedTime : new Date ( response . headers [ "last-modified" ]),
etag : response . headers . etag ,
maxAge : opts . maxAge
})) {
return ;
}
event . node . res . statusCode = response . code ;
for ( const name in response . headers ) {
const value = response . headers [ name ];
if ( name === "set-cookie" ) {
event . node . res . appendHeader (
name ,
splitCookiesString ( value )
);
} else {
if ( value !== void 0 ) {
event . node . res . setHeader ( name , value );
}
}
}
return response . body ;
});
}
function cloneWithProxy ( obj , overrides ) {
return new Proxy ( obj , {
get ( target , property , receiver ) {
if ( property in overrides ) {
return overrides [ property ];
}
return Reflect . get ( target , property , receiver );
},
set ( target , property , value , receiver ) {
if ( property in overrides ) {
overrides [ property ] = value ;
return true ;
}
return Reflect . set ( target , property , value , receiver );
}
});
}
const cachedEventHandler = defineCachedEventHandler ;
function klona ( x ) {
if ( typeof x !== 'object' ) return x ;
var k , tmp , str = Object . prototype . toString . call ( x );
if ( str === '[object Object]' ) {
if ( x . constructor !== Object && typeof x . constructor === 'function' ) {
tmp = new x . constructor ();
for ( k in x ) {
if ( x . hasOwnProperty ( k ) && tmp [ k ] !== x [ k ]) {
tmp [ k ] = klona ( x [ k ]);
}
}
} else {
tmp = {}; // null
for ( k in x ) {
if ( k === '__proto__' ) {
Object . defineProperty ( tmp , k , {
value : klona ( x [ k ]),
configurable : true ,
enumerable : true ,
writable : true ,
});
} else {
tmp [ k ] = klona ( x [ k ]);
}
}
}
return tmp ;
}
if ( str === '[object Array]' ) {
k = x . length ;
for ( tmp = Array ( k ); k -- ;) {
tmp [ k ] = klona ( x [ k ]);
}
return tmp ;
}
if ( str === '[object Set]' ) {
tmp = new Set ;
x . forEach ( function ( val ) {
tmp . add ( klona ( val ));
});
return tmp ;
}
if ( str === '[object Map]' ) {
tmp = new Map ;
x . forEach ( function ( val , key ) {
tmp . set ( klona ( key ), klona ( val ));
});
return tmp ;
}
if ( str === '[object Date]' ) {
return new Date ( + x );
}
if ( str === '[object RegExp]' ) {
tmp = new RegExp ( x . source , x . flags );
tmp . lastIndex = x . lastIndex ;
return tmp ;
}
if ( str === '[object DataView]' ) {
return new x . constructor ( klona ( x . buffer ) );
}
if ( str === '[object ArrayBuffer]' ) {
return x . slice ( 0 );
}
// ArrayBuffer.isView(x)
// ~> `new` bcuz `Buffer.slice` => ref
if ( str . slice ( - 6 ) === 'Array]' ) {
return new x . constructor ( x );
}
return x ;
}
const inlineAppConfig = {
"nuxt" : {}
};
const appConfig = defuFn ( inlineAppConfig );
const NUMBER_CHAR_RE = /\d/ ;
const STR_SPLITTERS = [ "-" , "_" , "/" , "." ];
function isUppercase ( char = "" ) {
if ( NUMBER_CHAR_RE . test ( char )) {
return void 0 ;
}
return char !== char . toLowerCase ();
}
function splitByCase ( str , separators ) {
const splitters = STR_SPLITTERS ;
const parts = [];
if ( ! str || typeof str !== "string" ) {
return parts ;
}
let buff = "" ;
let previousUpper ;
let previousSplitter ;
for ( const char of str ) {
const isSplitter = splitters . includes ( char );
if ( isSplitter === true ) {
parts . push ( buff );
buff = "" ;
previousUpper = void 0 ;
continue ;
}
const isUpper = isUppercase ( char );
if ( previousSplitter === false ) {
if ( previousUpper === false && isUpper === true ) {
parts . push ( buff );
buff = char ;
previousUpper = isUpper ;
continue ;
}
if ( previousUpper === true && isUpper === false && buff . length > 1 ) {
const lastChar = buff . at ( - 1 );
parts . push ( buff . slice ( 0 , Math . max ( 0 , buff . length - 1 )));
buff = lastChar + char ;
previousUpper = isUpper ;
continue ;
}
}
buff += char ;
previousUpper = isUpper ;
previousSplitter = isSplitter ;
}
parts . push ( buff );
return parts ;
}
function kebabCase ( str , joiner ) {
return str ? ( Array . isArray ( str ) ? str : splitByCase ( str )). map (( p ) => p . toLowerCase ()). join ( joiner ) : "" ;
}
function snakeCase ( str ) {
return kebabCase ( str || "" , "_" );
}
function getEnv ( key , opts ) {
const envKey = snakeCase ( key ). toUpperCase ();
return destr (
process . env [ opts . prefix + envKey ] ?? process . env [ opts . altPrefix + envKey ]
);
}
function _isObject ( input ) {
return typeof input === "object" && ! Array . isArray ( input );
}
function applyEnv ( obj , opts , parentKey = "" ) {
for ( const key in obj ) {
const subKey = parentKey ? ` ${ parentKey } _ ${ key } ` : key ;
const envValue = getEnv ( subKey , opts );
if ( _isObject ( obj [ key ])) {
if ( _isObject ( envValue )) {
obj [ key ] = { ... obj [ key ], ... envValue };
applyEnv ( obj [ key ], opts , subKey );
} else if ( envValue === void 0 ) {
applyEnv ( obj [ key ], opts , subKey );
} else {
obj [ key ] = envValue ?? obj [ key ];
}
} else {
obj [ key ] = envValue ?? obj [ key ];
}
if ( opts . envExpansion && typeof obj [ key ] === "string" ) {
obj [ key ] = _expandFromEnv ( obj [ key ]);
}
}
return obj ;
}
const envExpandRx = /\{\{([^{}]*)\}\}/g ;
function _expandFromEnv ( value ) {
return value . replace ( envExpandRx , ( match , key ) => {
return process . env [ key ] || match ;
});
}
const _inlineRuntimeConfig = {
"app" : {
"baseURL" : "/" ,
2026-01-27 16:02:45 +03:30
"buildId" : "8dd4ed53-6eb9-47a8-b893-4c386d0a34bf" ,
2025-07-23 16:57:31 +03:30
"buildAssetsDir" : "/_nuxt/" ,
"cdnURL" : ""
},
"nitro" : {
"envPrefix" : "NUXT_" ,
"routeRules" : {
"/__nuxt_error" : {
"cache" : false
},
"/add/**" : {
"ssr" : false ,
"robots" : false
},
"/auth/**" : {
"ssr" : false ,
"robots" : false
},
"/fav/**" : {
"ssr" : false ,
"robots" : false
},
"/message/**" : {
"ssr" : false ,
"robots" : false
},
"/cart/**" : {
"ssr" : false ,
"robots" : false
},
"/edit/**" : {
"ssr" : false ,
"robots" : false
},
"/user/edit/**" : {
"ssr" : false ,
"robots" : false
},
"/user/order/**" : {
"ssr" : false ,
"robots" : false
},
"/user/statistics_list/**" : {
"ssr" : false ,
"robots" : false
},
"/user/add/**" : {
"ssr" : false ,
"robots" : false
},
"/user/address" : {
"ssr" : false ,
"robots" : false
},
"/user/attributes" : {
"ssr" : false ,
"robots" : false
},
"/user/brands" : {
"ssr" : false ,
"robots" : false
},
"/user/categories" : {
"ssr" : false ,
"robots" : false
},
"/user/managers" : {
"ssr" : false ,
"robots" : false
},
"/user/profile" : {
"ssr" : false ,
"robots" : false
},
"/user/setting" : {
"ssr" : false ,
"robots" : false
},
"/user/store_request" : {
"ssr" : false ,
"robots" : false
},
"/__sitemap__/style.xsl" : {
"headers" : {
"Content-Type" : "application/xslt+xml"
}
},
"/sitemap.xml" : {},
"/_nuxt/builds/meta/**" : {
"headers" : {
"cache-control" : "public, max-age=31536000, immutable"
}
},
"/_nuxt/builds/**" : {
"headers" : {
"cache-control" : "public, max-age=1, immutable"
}
},
"/_nuxt/**" : {
"headers" : {
"cache-control" : "public, max-age=31536000, immutable"
}
}
}
},
2025-08-25 15:52:41 +03:30
"public" : {
2025-08-27 20:20:03 +03:30
"APP_TYPE" : "single" ,
2026-01-27 16:02:45 +03:30
"SUPABASE_URL" : "https://supa.goldaliii.com" ,
"SUPABASE_KEY" : "eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJpc3MiOiJzdXBhYmFzZSIsInJvbGUiOiJhbm9uIiwiaWF0IjoxNzEwMDAwMDAwLCJleHAiOjE5OTAwMDAwMDB9.nd3whSBZSlKBDSb7pjhb0wuyJNdjxqlXD0j9mKzC9A8" ,
"ENAMAD_URL" : "https://trustseal.enamad.ir/?id=668721&Code=3nvR6Kg8KCOEHE0qhQXmU4CkqFYMSKNG" ,
"ENAMAD_IMG_SRC" : "https://trustseal.enamad.ir/logo.aspx?id=668721&Code=3nvR6Kg8KCOEHE0qhQXmU4CkqFYMSKNG" ,
"ENAMAD_CODE" : "3nvR6Kg8KCOEHE0qhQXmU4CkqFYMSKNG" ,
"STORAGE_UPLOAD" : "https://node.goldaliii.com/upload/goldali" ,
"STORAGE_URL" : "https://file.montifyshop.ir" ,
"STORAGE_LOGO" : "https://file.montifyshop.ir/goldali/logo_dir" ,
"TEXT_HEADER" : "مرکز طلای مینیمال با پایین ترین اجرت <br> \"چون مستقیم از کارگاه خرید میکنی\"" ,
"PRICE_HEADER" : "true" ,
"APP_NAME_FA" : "گلدعلی" ,
"APP_NAME_EN" : "Goldali" ,
"NODE_BASE_URL" : "https://node.goldaliii.com" ,
"DOMAIN_URL" : "" ,
2025-08-27 20:20:03 +03:30
"APP_HAS_SILVER" : "false" ,
2026-01-27 16:02:45 +03:30
"APP_HAS_GOLD" : "true" ,
2025-08-27 20:20:03 +03:30
"APP_MILADY_DATE" : "false"
2025-08-25 15:52:41 +03:30
},
2025-07-23 16:57:31 +03:30
"sitemap" : {
"isI18nMapped" : false ,
"sitemapName" : "sitemap.xml" ,
"isMultiSitemap" : false ,
2026-01-27 16:02:45 +03:30
"excludeAppSources" : true ,
2025-07-23 16:57:31 +03:30
"cacheMaxAgeSeconds" : 600 ,
2026-01-27 16:02:45 +03:30
"autoLastmod" : true ,
2025-07-23 16:57:31 +03:30
"defaultSitemapsChunkSize" : 1000 ,
"minify" : false ,
"sortEntries" : true ,
"debug" : false ,
"discoverImages" : true ,
"discoverVideos" : true ,
"sitemapsPathPrefix" : "/__sitemap__/" ,
"isNuxtContentDocumentDriven" : false ,
"xsl" : "/__sitemap__/style.xsl" ,
"xslTips" : true ,
"xslColumns" : [
{
"label" : "URL" ,
"width" : "50%"
},
{
"label" : "Images" ,
"width" : "25%" ,
"select" : "count(image:image)"
},
{
"label" : "Last Updated" ,
"width" : "25%" ,
"select" : "concat(substring(sitemap:lastmod,0,11),concat(' ', substring(sitemap:lastmod,12,5)),concat(' ', substring(sitemap:lastmod,20,6)))"
}
],
"credits" : true ,
2026-01-27 16:02:45 +03:30
"version" : "7.5.0" ,
2025-07-23 16:57:31 +03:30
"sitemaps" : {
"sitemap.xml" : {
"sitemapName" : "sitemap.xml" ,
"route" : "sitemap.xml" ,
2026-01-27 16:02:45 +03:30
"defaults" : {
"changefreq" : "daily" ,
"priority" : 0.8 ,
"lastmod" : "2026-01-27T12:03:33Z"
},
2025-07-23 16:57:31 +03:30
"include" : [],
"exclude" : [
2026-01-27 16:02:45 +03:30
"/highlight/**" ,
"/cart/**" ,
"/fav/**" ,
"/message/**" ,
"/auth/**" ,
"/add/**" ,
"/edit/**" ,
"/user/statistics_list/**" ,
2025-07-23 16:57:31 +03:30
"/_**" ,
"/_nuxt/**"
],
"includeAppSources" : true
}
}
},
"nuxt-site-config" : {
"stack" : [
{
"_context" : "system" ,
"_priority" : - 15 ,
2026-01-27 16:02:45 +03:30
"name" : "montify" ,
2025-07-23 16:57:31 +03:30
"env" : "production"
},
{
"_context" : "package.json" ,
"_priority" : - 10 ,
"name" : "nuxt-app"
}
],
2026-01-27 16:02:45 +03:30
"version" : "3.2.14" ,
2025-07-23 16:57:31 +03:30
"debug" : false ,
"multiTenancy" : []
},
"ipx" : {
"baseURL" : "/_ipx" ,
"alias" : {},
"fs" : {
"dir" : "../public"
},
"http" : {
"domains" : []
}
}
};
const envOptions = {
prefix : "NITRO_" ,
altPrefix : _inlineRuntimeConfig . nitro . envPrefix ?? process . env . NITRO_ENV_PREFIX ?? "_" ,
envExpansion : _inlineRuntimeConfig . nitro . envExpansion ?? process . env . NITRO_ENV_EXPANSION ?? false
};
const _sharedRuntimeConfig = _deepFreeze (
applyEnv ( klona ( _inlineRuntimeConfig ), envOptions )
);
function useRuntimeConfig ( event ) {
if ( ! event ) {
return _sharedRuntimeConfig ;
}
if ( event . context . nitro . runtimeConfig ) {
return event . context . nitro . runtimeConfig ;
}
const runtimeConfig = klona ( _inlineRuntimeConfig );
applyEnv ( runtimeConfig , envOptions );
event . context . nitro . runtimeConfig = runtimeConfig ;
return runtimeConfig ;
}
_deepFreeze ( klona ( appConfig ));
function _deepFreeze ( object ) {
const propNames = Object . getOwnPropertyNames ( object );
for ( const name of propNames ) {
const value = object [ name ];
if ( value && typeof value === "object" ) {
_deepFreeze ( value );
}
}
return Object . freeze ( object );
}
new Proxy ( /* @__PURE__ */ Object . create ( null ), {
get : ( _ , prop ) => {
console . warn (
"Please use `useRuntimeConfig()` instead of accessing config directly."
);
const runtimeConfig = useRuntimeConfig ();
if ( prop in runtimeConfig ) {
return runtimeConfig [ prop ];
}
return void 0 ;
}
});
function createContext ( opts = {}) {
let currentInstance ;
let isSingleton = false ;
const checkConflict = ( instance ) => {
if ( currentInstance && currentInstance !== instance ) {
throw new Error ( "Context conflict" );
}
};
let als ;
if ( opts . asyncContext ) {
const _AsyncLocalStorage = opts . AsyncLocalStorage || globalThis . AsyncLocalStorage ;
if ( _AsyncLocalStorage ) {
als = new _AsyncLocalStorage ();
} else {
console . warn ( "[unctx] `AsyncLocalStorage` is not provided." );
}
}
const _getCurrentInstance = () => {
if ( als ) {
const instance = als . getStore ();
if ( instance !== void 0 ) {
return instance ;
}
}
return currentInstance ;
};
return {
use : () => {
const _instance = _getCurrentInstance ();
if ( _instance === void 0 ) {
throw new Error ( "Context is not available" );
}
return _instance ;
},
tryUse : () => {
return _getCurrentInstance ();
},
set : ( instance , replace ) => {
if ( ! replace ) {
checkConflict ( instance );
}
currentInstance = instance ;
isSingleton = true ;
},
unset : () => {
currentInstance = void 0 ;
isSingleton = false ;
},
call : ( instance , callback ) => {
checkConflict ( instance );
currentInstance = instance ;
try {
return als ? als . run ( instance , callback ) : callback ();
} finally {
if ( ! isSingleton ) {
currentInstance = void 0 ;
}
}
},
async callAsync ( instance , callback ) {
currentInstance = instance ;
const onRestore = () => {
currentInstance = instance ;
};
const onLeave = () => currentInstance === instance ? onRestore : void 0 ;
asyncHandlers . add ( onLeave );
try {
const r = als ? als . run ( instance , callback ) : callback ();
if ( ! isSingleton ) {
currentInstance = void 0 ;
}
return await r ;
} finally {
asyncHandlers . delete ( onLeave );
}
}
};
}
function createNamespace ( defaultOpts = {}) {
const contexts = {};
return {
get ( key , opts = {}) {
if ( ! contexts [ key ]) {
contexts [ key ] = createContext ({ ... defaultOpts , ... opts });
}
return contexts [ key ];
}
};
}
const _globalThis = typeof globalThis !== "undefined" ? globalThis : typeof self !== "undefined" ? self : typeof global !== "undefined" ? global : {};
const globalKey = "__unctx__" ;
const defaultNamespace = _globalThis [ globalKey ] || ( _globalThis [ globalKey ] = createNamespace ());
const getContext = ( key , opts = {}) => defaultNamespace . get ( key , opts );
const asyncHandlersKey = "__unctx_async_handlers__" ;
const asyncHandlers = _globalThis [ asyncHandlersKey ] || ( _globalThis [ asyncHandlersKey ] = /* @__PURE__ */ new Set ());
function executeAsync ( function_ ) {
const restores = [];
for ( const leaveHandler of asyncHandlers ) {
const restore2 = leaveHandler ();
if ( restore2 ) {
restores . push ( restore2 );
}
}
const restore = () => {
for ( const restore2 of restores ) {
restore2 ();
}
};
let awaitable = function_ ();
if ( awaitable && typeof awaitable === "object" && "catch" in awaitable ) {
awaitable = awaitable . catch (( error ) => {
restore ();
throw error ;
});
}
return [ awaitable , restore ];
}
2026-01-27 16:02:45 +03:30
getContext ( "nitro-app" , {
asyncContext : false ,
AsyncLocalStorage : void 0
});
2025-07-23 16:57:31 +03:30
const config = useRuntimeConfig ();
const _routeRulesMatcher = toRouteMatcher (
createRouter$1 ({ routes : config . nitro . routeRules })
);
function createRouteRulesHandler ( ctx ) {
return eventHandler (( event ) => {
const routeRules = getRouteRules ( event );
if ( routeRules . headers ) {
setHeaders ( event , routeRules . headers );
}
if ( routeRules . redirect ) {
let target = routeRules . redirect . to ;
if ( target . endsWith ( "/**" )) {
let targetPath = event . path ;
const strpBase = routeRules . redirect . _redirectStripBase ;
if ( strpBase ) {
targetPath = withoutBase ( targetPath , strpBase );
}
target = joinURL ( target . slice ( 0 , - 3 ), targetPath );
} else if ( event . path . includes ( "?" )) {
const query = getQuery$1 ( event . path );
target = withQuery ( target , query );
}
return sendRedirect ( event , target , routeRules . redirect . statusCode );
}
if ( routeRules . proxy ) {
let target = routeRules . proxy . to ;
if ( target . endsWith ( "/**" )) {
let targetPath = event . path ;
const strpBase = routeRules . proxy . _proxyStripBase ;
if ( strpBase ) {
targetPath = withoutBase ( targetPath , strpBase );
}
target = joinURL ( target . slice ( 0 , - 3 ), targetPath );
} else if ( event . path . includes ( "?" )) {
const query = getQuery$1 ( event . path );
target = withQuery ( target , query );
}
return proxyRequest ( event , target , {
fetch : ctx . localFetch ,
... routeRules . proxy
});
}
});
}
function getRouteRules ( event ) {
event . context . _nitro = event . context . _nitro || {};
if ( ! event . context . _nitro . routeRules ) {
event . context . _nitro . routeRules = getRouteRulesForPath (
withoutBase ( event . path . split ( "?" )[ 0 ], useRuntimeConfig (). app . baseURL )
);
}
return event . context . _nitro . routeRules ;
}
function getRouteRulesForPath ( path ) {
return defu ({}, ... _routeRulesMatcher . matchAll ( path ). reverse ());
}
function _captureError ( error , type ) {
console . error ( `[ ${ type } ]` , error );
useNitroApp (). captureError ( error , { tags : [ type ] });
}
function trapUnhandledNodeErrors () {
process . on (
"unhandledRejection" ,
( error ) => _captureError ( error , "unhandledRejection" )
);
process . on (
"uncaughtException" ,
( error ) => _captureError ( error , "uncaughtException" )
);
}
function joinHeaders ( value ) {
return Array . isArray ( value ) ? value . join ( ", " ) : String ( value );
}
function normalizeFetchResponse ( response ) {
if ( ! response . headers . has ( "set-cookie" )) {
return response ;
}
return new Response ( response . body , {
status : response . status ,
statusText : response . statusText ,
headers : normalizeCookieHeaders ( response . headers )
});
}
function normalizeCookieHeader ( header = "" ) {
return splitCookiesString ( joinHeaders ( header ));
}
function normalizeCookieHeaders ( headers ) {
const outgoingHeaders = new Headers ();
for ( const [ name , header ] of headers ) {
if ( name === "set-cookie" ) {
for ( const cookie of normalizeCookieHeader ( header )) {
outgoingHeaders . append ( "set-cookie" , cookie );
}
} else {
outgoingHeaders . set ( name , joinHeaders ( header ));
}
}
return outgoingHeaders ;
}
function isJsonRequest ( event ) {
if ( hasReqHeader ( event , "accept" , "text/html" )) {
return false ;
}
return hasReqHeader ( event , "accept" , "application/json" ) || hasReqHeader ( event , "user-agent" , "curl/" ) || hasReqHeader ( event , "user-agent" , "httpie/" ) || hasReqHeader ( event , "sec-fetch-mode" , "cors" ) || event . path . startsWith ( "/api/" ) || event . path . endsWith ( ".json" );
}
function hasReqHeader ( event , name , includes ) {
const value = getRequestHeader ( event , name );
return value && typeof value === "string" && value . toLowerCase (). includes ( includes );
}
const errorHandler$0 = ( async function errorhandler ( error , event , { defaultHandler }) {
if ( event . handled || isJsonRequest ( event )) {
return ;
}
const defaultRes = await defaultHandler ( error , event , { json : true });
const statusCode = error . statusCode || 500 ;
if ( statusCode === 404 && defaultRes . status === 302 ) {
setResponseHeaders ( event , defaultRes . headers );
setResponseStatus ( event , defaultRes . status , defaultRes . statusText );
return send ( event , JSON . stringify ( defaultRes . body , null , 2 ));
}
const errorObject = defaultRes . body ;
const url = new URL ( errorObject . url );
errorObject . url = withoutBase ( url . pathname , useRuntimeConfig ( event ). app . baseURL ) + url . search + url . hash ;
errorObject . message ||= "Server Error" ;
errorObject . data ||= error . data ;
errorObject . statusMessage ||= error . statusMessage ;
delete defaultRes . headers [ "content-type" ];
delete defaultRes . headers [ "content-security-policy" ];
setResponseHeaders ( event , defaultRes . headers );
const reqHeaders = getRequestHeaders ( event );
const isRenderingError = event . path . startsWith ( "/__nuxt_error" ) || !! reqHeaders [ "x-nuxt-error" ];
const res = isRenderingError ? null : await useNitroApp (). localFetch (
withQuery ( joinURL ( useRuntimeConfig ( event ). app . baseURL , "/__nuxt_error" ), errorObject ),
{
headers : { ... reqHeaders , "x-nuxt-error" : "true" },
redirect : "manual"
}
). catch (() => null );
if ( event . handled ) {
return ;
}
if ( ! res ) {
2026-01-27 16:02:45 +03:30
const { template } = await import ( '../_/error-500.mjs' );
2025-07-23 16:57:31 +03:30
setResponseHeader ( event , "Content-Type" , "text/html;charset=UTF-8" );
return send ( event , template ( errorObject ));
}
const html = await res . text ();
for ( const [ header , value ] of res . headers . entries ()) {
2025-08-19 21:38:30 +03:30
if ( header === "set-cookie" ) {
appendResponseHeader ( event , header , value );
continue ;
}
2025-07-23 16:57:31 +03:30
setResponseHeader ( event , header , value );
}
setResponseStatus ( event , res . status && res . status !== 200 ? res . status : defaultRes . status , res . statusText || defaultRes . statusText );
return send ( event , html );
});
function defineNitroErrorHandler ( handler ) {
return handler ;
}
const errorHandler$1 = defineNitroErrorHandler (
function defaultNitroErrorHandler ( error , event ) {
const res = defaultHandler ( error , event );
setResponseHeaders ( event , res . headers );
setResponseStatus ( event , res . status , res . statusText );
return send ( event , JSON . stringify ( res . body , null , 2 ));
}
);
function defaultHandler ( error , event , opts ) {
const isSensitive = error . unhandled || error . fatal ;
const statusCode = error . statusCode || 500 ;
const statusMessage = error . statusMessage || "Server Error" ;
const url = getRequestURL ( event , { xForwardedHost : true , xForwardedProto : true });
if ( statusCode === 404 ) {
const baseURL = "/" ;
if ( /^\/[^/]/ . test ( baseURL ) && ! url . pathname . startsWith ( baseURL )) {
const redirectTo = ` ${ baseURL }${ url . pathname . slice ( 1 ) }${ url . search } ` ;
return {
status : 302 ,
statusText : "Found" ,
headers : { location : redirectTo },
body : `Redirecting...`
};
}
}
if ( isSensitive && ! opts ? . silent ) {
const tags = [ error . unhandled && "[unhandled]" , error . fatal && "[fatal]" ]. filter ( Boolean ). join ( " " );
console . error ( `[request error] ${ tags } [ ${ event . method } ] ${ url }
` , error );
}
const headers = {
"content-type" : "application/json" ,
// Prevent browser from guessing the MIME types of resources.
"x-content-type-options" : "nosniff" ,
// Prevent error page from being embedded in an iframe
"x-frame-options" : "DENY" ,
// Prevent browsers from sending the Referer header
"referrer-policy" : "no-referrer" ,
// Disable the execution of any js
"content-security-policy" : "script-src 'none'; frame-ancestors 'none';"
};
setResponseStatus ( event , statusCode , statusMessage );
if ( statusCode === 404 || ! getResponseHeader ( event , "cache-control" )) {
headers [ "cache-control" ] = "no-cache" ;
}
const body = {
error : true ,
url : url . href ,
statusCode ,
statusMessage ,
message : isSensitive ? "Server Error" : error . message ,
data : isSensitive ? void 0 : error . data
};
return {
status : statusCode ,
statusText : statusMessage ,
headers ,
body
};
}
const errorHandlers = [ errorHandler$0 , errorHandler$1 ];
async function errorHandler ( error , event ) {
for ( const handler of errorHandlers ) {
try {
await handler ( error , event , { defaultHandler });
if ( event . handled ) {
return ; // Response handled
}
} catch ( error ) {
// Handler itself thrown, log and continue
console . error ( error );
}
}
// H3 will handle fallback
}
const chars = "abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ_$" ;
const unsafeChars = /[<>\b\f\n\r\t\0\u2028\u2029]/g ;
const reserved = /^(?:do|if|in|for|int|let|new|try|var|byte|case|char|else|enum|goto|long|this|void|with|await|break|catch|class|const|final|float|short|super|throw|while|yield|delete|double|export|import|native|return|switch|throws|typeof|boolean|default|extends|finally|package|private|abstract|continue|debugger|function|volatile|interface|protected|transient|implements|instanceof|synchronized)$/ ;
const escaped = {
"<" : "\\u003C" ,
">" : "\\u003E" ,
"/" : "\\u002F" ,
"\\" : "\\\\" ,
"\b" : "\\b" ,
"\f" : "\\f" ,
"\n" : "\\n" ,
"\r" : "\\r" ,
" " : "\\t" ,
"\0" : "\\0" ,
"\u2028" : "\\u2028" ,
"\u2029" : "\\u2029"
};
const objectProtoOwnPropertyNames = Object . getOwnPropertyNames ( Object . prototype ). sort (). join ( "\0" );
function devalue ( value ) {
const counts = /* @__PURE__ */ new Map ();
let logNum = 0 ;
function log ( message ) {
if ( logNum < 100 ) {
console . warn ( message );
logNum += 1 ;
}
}
function walk ( thing ) {
if ( typeof thing === "function" ) {
log ( `Cannot stringify a function ${ thing . name } ` );
return ;
}
if ( counts . has ( thing )) {
counts . set ( thing , counts . get ( thing ) + 1 );
return ;
}
counts . set ( thing , 1 );
if ( ! isPrimitive ( thing )) {
const type = getType ( thing );
switch ( type ) {
case "Number" :
case "String" :
case "Boolean" :
case "Date" :
case "RegExp" :
return ;
case "Array" :
thing . forEach ( walk );
break ;
case "Set" :
case "Map" :
Array . from ( thing ). forEach ( walk );
break ;
default :
const proto = Object . getPrototypeOf ( thing );
if ( proto !== Object . prototype && proto !== null && Object . getOwnPropertyNames ( proto ). sort (). join ( "\0" ) !== objectProtoOwnPropertyNames ) {
if ( typeof thing . toJSON !== "function" ) {
log ( `Cannot stringify arbitrary non-POJOs ${ thing . constructor . name } ` );
}
} else if ( Object . getOwnPropertySymbols ( thing ). length > 0 ) {
log ( `Cannot stringify POJOs with symbolic keys ${ Object . getOwnPropertySymbols ( thing ). map (( symbol ) => symbol . toString ()) } ` );
} else {
Object . keys ( thing ). forEach (( key ) => walk ( thing [ key ]));
}
}
}
}
walk ( value );
const names = /* @__PURE__ */ new Map ();
Array . from ( counts ). filter (( entry ) => entry [ 1 ] > 1 ). sort (( a , b ) => b [ 1 ] - a [ 1 ]). forEach (( entry , i ) => {
names . set ( entry [ 0 ], getName ( i ));
});
function stringify ( thing ) {
if ( names . has ( thing )) {
return names . get ( thing );
}
if ( isPrimitive ( thing )) {
return stringifyPrimitive ( thing );
}
const type = getType ( thing );
switch ( type ) {
case "Number" :
case "String" :
case "Boolean" :
return `Object( ${ stringify ( thing . valueOf ()) } )` ;
case "RegExp" :
return thing . toString ();
case "Date" :
return `new Date( ${ thing . getTime () } )` ;
case "Array" :
const members = thing . map (( v , i ) => i in thing ? stringify ( v ) : "" );
const tail = thing . length === 0 || thing . length - 1 in thing ? "" : "," ;
return `[ ${ members . join ( "," ) }${ tail } ]` ;
case "Set" :
case "Map" :
return `new ${ type } ([ ${ Array . from ( thing ). map ( stringify ). join ( "," ) } ])` ;
default :
if ( thing . toJSON ) {
let json = thing . toJSON ();
if ( getType ( json ) === "String" ) {
try {
json = JSON . parse ( json );
} catch ( e ) {
}
}
return stringify ( json );
}
if ( Object . getPrototypeOf ( thing ) === null ) {
if ( Object . keys ( thing ). length === 0 ) {
return "Object.create(null)" ;
}
return `Object.create(null,{ ${ Object . keys ( thing ). map (( key ) => ` ${ safeKey ( key ) } :{writable:true,enumerable:true,value: ${ stringify ( thing [ key ]) } }` ). join ( "," ) } })` ;
}
return `{ ${ Object . keys ( thing ). map (( key ) => ` ${ safeKey ( key ) } : ${ stringify ( thing [ key ]) } ` ). join ( "," ) } }` ;
}
}
const str = stringify ( value );
if ( names . size ) {
const params = [];
const statements = [];
const values = [];
names . forEach (( name , thing ) => {
params . push ( name );
if ( isPrimitive ( thing )) {
values . push ( stringifyPrimitive ( thing ));
return ;
}
const type = getType ( thing );
switch ( type ) {
case "Number" :
case "String" :
case "Boolean" :
values . push ( `Object( ${ stringify ( thing . valueOf ()) } )` );
break ;
case "RegExp" :
values . push ( thing . toString ());
break ;
case "Date" :
values . push ( `new Date( ${ thing . getTime () } )` );
break ;
case "Array" :
values . push ( `Array( ${ thing . length } )` );
thing . forEach (( v , i ) => {
statements . push ( ` ${ name } [ ${ i } ]= ${ stringify ( v ) } ` );
});
break ;
case "Set" :
values . push ( "new Set" );
statements . push ( ` ${ name } . ${ Array . from ( thing ). map (( v ) => `add( ${ stringify ( v ) } )` ). join ( "." ) } ` );
break ;
case "Map" :
values . push ( "new Map" );
statements . push ( ` ${ name } . ${ Array . from ( thing ). map (([ k , v ]) => `set( ${ stringify ( k ) } , ${ stringify ( v ) } )` ). join ( "." ) } ` );
break ;
default :
values . push ( Object . getPrototypeOf ( thing ) === null ? "Object.create(null)" : "{}" );
Object . keys ( thing ). forEach (( key ) => {
statements . push ( ` ${ name }${ safeProp ( key ) } = ${ stringify ( thing [ key ]) } ` );
});
}
});
statements . push ( `return ${ str } ` );
return `(function( ${ params . join ( "," ) } ){ ${ statements . join ( ";" ) } }( ${ values . join ( "," ) } ))` ;
} else {
return str ;
}
}
function getName ( num ) {
let name = "" ;
do {
name = chars [ num % chars . length ] + name ;
num = ~~ ( num / chars . length ) - 1 ;
} while ( num >= 0 );
return reserved . test ( name ) ? ` ${ name } 0` : name ;
}
function isPrimitive ( thing ) {
return Object ( thing ) !== thing ;
}
function stringifyPrimitive ( thing ) {
if ( typeof thing === "string" ) {
return stringifyString ( thing );
}
if ( thing === void 0 ) {
return "void 0" ;
}
if ( thing === 0 && 1 / thing < 0 ) {
return "-0" ;
}
const str = String ( thing );
if ( typeof thing === "number" ) {
return str . replace ( /^(-)?0\./ , "$1." );
}
return str ;
}
function getType ( thing ) {
return Object . prototype . toString . call ( thing ). slice ( 8 , - 1 );
}
function escapeUnsafeChar ( c ) {
return escaped [ c ] || c ;
}
function escapeUnsafeChars ( str ) {
return str . replace ( unsafeChars , escapeUnsafeChar );
}
function safeKey ( key ) {
return /^[_$a-zA-Z][_$a-zA-Z0-9]*$/ . test ( key ) ? key : escapeUnsafeChars ( JSON . stringify ( key ));
}
function safeProp ( key ) {
return /^[_$a-zA-Z][_$a-zA-Z0-9]*$/ . test ( key ) ? `. ${ key } ` : `[ ${ escapeUnsafeChars ( JSON . stringify ( key )) } ]` ;
}
function stringifyString ( str ) {
let result = '"' ;
for ( let i = 0 ; i < str . length ; i += 1 ) {
const char = str . charAt ( i );
const code = char . charCodeAt ( 0 );
if ( char === '"' ) {
result += '\\"' ;
} else if ( char in escaped ) {
result += escaped [ char ];
} else if ( code >= 55296 && code <= 57343 ) {
const next = str . charCodeAt ( i + 1 );
if ( code <= 56319 && ( next >= 56320 && next <= 57343 )) {
result += char + str [ ++ i ];
} else {
result += `\\u ${ code . toString ( 16 ). toUpperCase () } ` ;
}
} else {
result += char ;
}
}
result += '"' ;
return result ;
}
function normalizeSiteConfig ( config ) {
if ( typeof config . indexable !== "undefined" )
config . indexable = String ( config . indexable ) !== "false" ;
if ( typeof config . trailingSlash !== "undefined" && ! config . trailingSlash )
config . trailingSlash = String ( config . trailingSlash ) !== "false" ;
if ( config . url && ! hasProtocol ( String ( config . url ), { acceptRelative : true , strict : false }))
config . url = withHttps ( String ( config . url ));
const keys = Object . keys ( config ). sort (( a , b ) => a . localeCompare ( b ));
const newConfig = {};
for ( const k of keys )
newConfig [ k ] = config [ k ];
return newConfig ;
}
function createSiteConfigStack ( options ) {
const debug = options ? . debug || false ;
const stack = [];
function push ( input ) {
if ( ! input || typeof input !== "object" || Object . keys ( input ). length === 0 ) {
return () => {
};
}
if ( ! input . _context && debug ) {
2026-01-27 16:02:45 +03:30
let lastFunctionName = new Error ( "tmp" ). stack ? . split ( "\n" )[ 2 ] ? . split ( " " )[ 5 ];
2025-07-23 16:57:31 +03:30
if ( lastFunctionName ? . includes ( "/" ))
lastFunctionName = "anonymous" ;
input . _context = lastFunctionName ;
}
const entry = {};
for ( const k in input ) {
const val = input [ k ];
if ( typeof val !== "undefined" && val !== "" )
entry [ k ] = val ;
}
let idx ;
if ( Object . keys ( entry ). filter (( k ) => ! k . startsWith ( "_" )). length > 0 )
idx = stack . push ( entry );
return () => {
if ( typeof idx !== "undefined" ) {
stack . splice ( idx - 1 , 1 );
}
};
}
function get ( options2 ) {
const siteConfig = {};
if ( options2 ? . debug )
siteConfig . _context = {};
siteConfig . _priority = {};
for ( const o in stack . sort (( a , b ) => ( a . _priority || 0 ) - ( b . _priority || 0 ))) {
for ( const k in stack [ o ]) {
const key = k ;
const val = options2 ? . resolveRefs ? toValue ( stack [ o ][ k ]) : stack [ o ][ k ];
if ( ! k . startsWith ( "_" ) && typeof val !== "undefined" && val !== "" ) {
siteConfig [ k ] = val ;
if ( typeof stack [ o ]. _priority !== "undefined" && stack [ o ]. _priority !== - 1 ) {
siteConfig . _priority [ key ] = stack [ o ]. _priority ;
}
if ( options2 ? . debug )
siteConfig . _context [ key ] = stack [ o ]. _context ? .[ key ] || stack [ o ]. _context || "anonymous" ;
}
}
}
return options2 ? . skipNormalize ? siteConfig : normalizeSiteConfig ( siteConfig );
}
return {
stack ,
push ,
get
};
}
function envSiteConfig ( env ) {
return Object . fromEntries ( Object . entries ( env ). filter (([ k ]) => k . startsWith ( "NUXT_SITE_" ) || k . startsWith ( "NUXT_PUBLIC_SITE_" )). map (([ k , v ]) => [
2026-01-27 16:02:45 +03:30
k . replace ( /^NUXT_(PUBLIC_)?SITE_/ , "" ). split ( "_" ). map (( s , i ) => i === 0 ? s . toLowerCase () : s [ 0 ] ? . toUpperCase () + s . slice ( 1 ). toLowerCase ()). join ( "" ),
2025-07-23 16:57:31 +03:30
v
]));
}
2026-01-27 16:02:45 +03:30
function getSiteConfig ( e , _options ) {
2025-07-23 16:57:31 +03:30
e . context . siteConfig = e . context . siteConfig || createSiteConfigStack ();
const options = defu ( _options , useRuntimeConfig ( e )[ "nuxt-site-config" ], { debug : false });
return e . context . siteConfig . get ( options );
}
2026-01-27 16:02:45 +03:30
const _mQjbE97genUSk1iu_vB40Q75EXhZuZD4PlBMpijuyY = defineNitroPlugin ( async ( nitroApp ) => {
2025-07-23 16:57:31 +03:30
nitroApp . hooks . hook ( "render:html" , async ( ctx , { event }) => {
const routeOptions = getRouteRules ( event );
const isIsland = process . env . NUXT_COMPONENT_ISLANDS && event . path . startsWith ( "/__nuxt_island" );
event . path ;
const noSSR = event . context . nuxt ? . noSSR || routeOptions . ssr === false && ! isIsland || ( false );
if ( noSSR ) {
const siteConfig = Object . fromEntries (
2026-01-27 16:02:45 +03:30
Object . entries ( getSiteConfig ( event )). map (([ k , v ]) => [ k , toValue ( v )])
2025-07-23 16:57:31 +03:30
);
ctx . body . push ( `<script>window.__NUXT_SITE_CONFIG__= ${ devalue ( siteConfig ) } <\/script>` );
}
});
});
const plugins = [
2026-01-27 16:02:45 +03:30
_mQjbE97genUSk1iu_vB40Q75EXhZuZD4PlBMpijuyY
2025-07-23 16:57:31 +03:30
];
const assets = {
"/favicon.ico" : {
"type" : "image/vnd.microsoft.icon" ,
2026-01-27 16:02:45 +03:30
"etag" : "\"3c2e-2db3Y2fP74iJPxPFB+2cW3MrKtY\"" ,
"mtime" : "2026-01-27T12:04:02.150Z" ,
"size" : 15406 ,
2025-07-23 16:57:31 +03:30
"path" : "../public/favicon.ico"
},
"/manifest.webmanifest" : {
"type" : "application/manifest+json" ,
2026-01-27 16:02:45 +03:30
"etag" : "\"1c3-RKCw362kKmMfaYYERoCj6w5SNbE\"" ,
"mtime" : "2026-01-27T12:04:02.046Z" ,
"size" : 451 ,
2025-07-23 16:57:31 +03:30
"path" : "../public/manifest.webmanifest"
},
"/pwa-icon-192.png" : {
"type" : "image/png" ,
2026-01-27 16:02:45 +03:30
"etag" : "\"9823-QXQz9RFQo1QkQOxIDTcI838Gg0g\"" ,
"mtime" : "2026-01-27T12:04:02.150Z" ,
"size" : 38947 ,
2025-07-23 16:57:31 +03:30
"path" : "../public/pwa-icon-192.png"
},
"/pwa-icon-512.png" : {
"type" : "image/png" ,
2026-01-27 16:02:45 +03:30
"etag" : "\"2b1b7-sCLE6008s3Nhf8T4jRjN5CcdZPo\"" ,
"mtime" : "2026-01-27T12:04:02.150Z" ,
"size" : 176567 ,
2025-07-23 16:57:31 +03:30
"path" : "../public/pwa-icon-512.png"
},
"/robots.txt" : {
"type" : "text/plain; charset=utf-8" ,
2025-07-26 21:54:04 +03:30
"etag" : "\"1a-a1cIDLljyn/zLf+iveG+HSGws5Y\"" ,
2026-01-27 16:02:45 +03:30
"mtime" : "2026-01-27T12:04:02.150Z" ,
2025-07-26 21:54:04 +03:30
"size" : 26 ,
2025-07-23 16:57:31 +03:30
"path" : "../public/robots.txt"
},
2025-08-25 15:52:41 +03:30
"/sw_notif_pwa.js" : {
2025-07-23 16:57:31 +03:30
"type" : "text/javascript; charset=utf-8" ,
2026-01-27 16:02:45 +03:30
"etag" : "\"8ebe-LwmfUYKiosJY2m4lEu94lz8Ywwc\"" ,
"mtime" : "2026-01-27T12:04:02.761Z" ,
"size" : 36542 ,
2025-08-25 15:52:41 +03:30
"path" : "../public/sw_notif_pwa.js"
2025-08-17 20:26:15 +03:30
},
2025-07-23 16:57:31 +03:30
"/bottomNavigationIcons/add.svg" : {
"type" : "image/svg+xml" ,
"etag" : "\"192-gb78fBM43KAdG6jBoB0jRJXK48I\"" ,
2026-01-27 16:02:45 +03:30
"mtime" : "2026-01-27T12:04:02.146Z" ,
2025-07-23 16:57:31 +03:30
"size" : 402 ,
"path" : "../public/bottomNavigationIcons/add.svg"
},
"/bottomNavigationIcons/add_light.svg" : {
"type" : "image/svg+xml" ,
"etag" : "\"19e-vrt2fIyFLNE/yO3ryW/5y0KA6uI\"" ,
2026-01-27 16:02:45 +03:30
"mtime" : "2026-01-27T12:04:02.147Z" ,
2025-07-23 16:57:31 +03:30
"size" : 414 ,
"path" : "../public/bottomNavigationIcons/add_light.svg"
},
"/bottomNavigationIcons/cart.svg" : {
"type" : "image/svg+xml" ,
"etag" : "\"3a5-4J6HiKX6OrLgYpSfvKmEXMolmbg\"" ,
2026-01-27 16:02:45 +03:30
"mtime" : "2026-01-27T12:04:02.147Z" ,
2025-07-23 16:57:31 +03:30
"size" : 933 ,
"path" : "../public/bottomNavigationIcons/cart.svg"
},
"/bottomNavigationIcons/cart_light.svg" : {
"type" : "image/svg+xml" ,
"etag" : "\"3a5-aJ5KFXJpTJEq/ci+738AR9cOHfM\"" ,
2026-01-27 16:02:45 +03:30
"mtime" : "2026-01-27T12:04:02.147Z" ,
2025-07-23 16:57:31 +03:30
"size" : 933 ,
"path" : "../public/bottomNavigationIcons/cart_light.svg"
},
"/bottomNavigationIcons/cart_selected.svg" : {
"type" : "image/svg+xml" ,
"etag" : "\"293-m9QFlw7t4C56joIU8fO/FrEzQVo\"" ,
2026-01-27 16:02:45 +03:30
"mtime" : "2026-01-27T12:04:02.147Z" ,
2025-07-23 16:57:31 +03:30
"size" : 659 ,
"path" : "../public/bottomNavigationIcons/cart_selected.svg"
},
"/bottomNavigationIcons/cart_selected_light.svg" : {
"type" : "image/svg+xml" ,
"etag" : "\"293-ZGV/YRV29jKsU2xpVmsPiWl8i5Y\"" ,
2026-01-27 16:02:45 +03:30
"mtime" : "2026-01-27T12:04:02.147Z" ,
2025-07-23 16:57:31 +03:30
"size" : 659 ,
"path" : "../public/bottomNavigationIcons/cart_selected_light.svg"
},
"/bottomNavigationIcons/home.svg" : {
"type" : "image/svg+xml" ,
"etag" : "\"146-TdNW7jz0NSfMGiVO97xdCfZLSQU\"" ,
2026-01-27 16:02:45 +03:30
"mtime" : "2026-01-27T12:04:02.147Z" ,
2025-07-23 16:57:31 +03:30
"size" : 326 ,
"path" : "../public/bottomNavigationIcons/home.svg"
},
"/bottomNavigationIcons/home_light.svg" : {
"type" : "image/svg+xml" ,
"etag" : "\"14a-ALQQs7/joBubM24/uEyigWOa6kk\"" ,
2026-01-27 16:02:45 +03:30
"mtime" : "2026-01-27T12:04:02.147Z" ,
2025-07-23 16:57:31 +03:30
"size" : 330 ,
"path" : "../public/bottomNavigationIcons/home_light.svg"
},
"/bottomNavigationIcons/home_selected.svg" : {
"type" : "image/svg+xml" ,
2025-07-26 21:54:04 +03:30
"etag" : "\"291-+v3sj+2bAmtahJMROZb16U3piNY\"" ,
2026-01-27 16:02:45 +03:30
"mtime" : "2026-01-27T12:04:02.147Z" ,
2025-07-26 21:54:04 +03:30
"size" : 657 ,
2025-07-23 16:57:31 +03:30
"path" : "../public/bottomNavigationIcons/home_selected.svg"
},
"/bottomNavigationIcons/home_selected_light.svg" : {
"type" : "image/svg+xml" ,
2025-07-26 21:54:04 +03:30
"etag" : "\"28f-KNNNp1QPCv0AXpihuw3x52KqTOo\"" ,
2026-01-27 16:02:45 +03:30
"mtime" : "2026-01-27T12:04:02.147Z" ,
2025-07-26 21:54:04 +03:30
"size" : 655 ,
2025-07-23 16:57:31 +03:30
"path" : "../public/bottomNavigationIcons/home_selected_light.svg"
},
"/bottomNavigationIcons/like.svg" : {
"type" : "image/svg+xml" ,
"etag" : "\"26c-dUth02r3HjnuWf8Uudps07eznjU\"" ,
2026-01-27 16:02:45 +03:30
"mtime" : "2026-01-27T12:04:02.147Z" ,
2025-07-23 16:57:31 +03:30
"size" : 620 ,
"path" : "../public/bottomNavigationIcons/like.svg"
},
"/bottomNavigationIcons/like_light.svg" : {
"type" : "image/svg+xml" ,
"etag" : "\"26c-dIRTmxHiLecKyVSFMT4N2nJH1ec\"" ,
2026-01-27 16:02:45 +03:30
"mtime" : "2026-01-27T12:04:02.147Z" ,
2025-07-23 16:57:31 +03:30
"size" : 620 ,
"path" : "../public/bottomNavigationIcons/like_light.svg"
},
"/bottomNavigationIcons/like_selected.svg" : {
"type" : "image/svg+xml" ,
2025-07-26 21:54:04 +03:30
"etag" : "\"25d-jIBQ9ABXShEzKPHv960l65xwSsM\"" ,
2026-01-27 16:02:45 +03:30
"mtime" : "2026-01-27T12:04:02.148Z" ,
2025-07-26 21:54:04 +03:30
"size" : 605 ,
2025-07-23 16:57:31 +03:30
"path" : "../public/bottomNavigationIcons/like_selected.svg"
},
"/bottomNavigationIcons/like_selected_light.svg" : {
"type" : "image/svg+xml" ,
2025-07-26 21:54:04 +03:30
"etag" : "\"25b-f81AKDL5p28ZJMPmKsgEH9Etc4o\"" ,
2026-01-27 16:02:45 +03:30
"mtime" : "2026-01-27T12:04:02.148Z" ,
2025-07-26 21:54:04 +03:30
"size" : 603 ,
2025-07-23 16:57:31 +03:30
"path" : "../public/bottomNavigationIcons/like_selected_light.svg"
},
"/bottomNavigationIcons/search.svg" : {
"type" : "image/svg+xml" ,
"etag" : "\"1cb-FvaNKx5vQ8RKkPmSAIw9t4x6vyQ\"" ,
2026-01-27 16:02:45 +03:30
"mtime" : "2026-01-27T12:04:02.148Z" ,
2025-07-23 16:57:31 +03:30
"size" : 459 ,
"path" : "../public/bottomNavigationIcons/search.svg"
},
"/bottomNavigationIcons/search_light.svg" : {
"type" : "image/svg+xml" ,
"etag" : "\"1d3-v8qVPlDprfC3mEwcAli8c8y1nqk\"" ,
2026-01-27 16:02:45 +03:30
"mtime" : "2026-01-27T12:04:02.148Z" ,
2025-07-23 16:57:31 +03:30
"size" : 467 ,
"path" : "../public/bottomNavigationIcons/search_light.svg"
},
"/bottomNavigationIcons/search_selected.svg" : {
"type" : "image/svg+xml" ,
2025-07-26 21:54:04 +03:30
"etag" : "\"2aa-UDh7o7KxPw0+62QGVPGL+2nz+oY\"" ,
2026-01-27 16:02:45 +03:30
"mtime" : "2026-01-27T12:04:02.148Z" ,
2025-07-26 21:54:04 +03:30
"size" : 682 ,
2025-07-23 16:57:31 +03:30
"path" : "../public/bottomNavigationIcons/search_selected.svg"
},
"/bottomNavigationIcons/search_selected_light.svg" : {
"type" : "image/svg+xml" ,
2025-07-26 21:54:04 +03:30
"etag" : "\"2a8-8GmSl9uiWgt38WqDeFdBTyzDBTw\"" ,
2026-01-27 16:02:45 +03:30
"mtime" : "2026-01-27T12:04:02.148Z" ,
2025-07-26 21:54:04 +03:30
"size" : 680 ,
2025-07-23 16:57:31 +03:30
"path" : "../public/bottomNavigationIcons/search_selected_light.svg"
},
"/bottomNavigationIcons/user.svg" : {
"type" : "image/svg+xml" ,
"etag" : "\"26d-YwZsQLiUbnAnxS4WxgAsbWeGj1A\"" ,
2026-01-27 16:02:45 +03:30
"mtime" : "2026-01-27T12:04:02.148Z" ,
2025-07-23 16:57:31 +03:30
"size" : 621 ,
"path" : "../public/bottomNavigationIcons/user.svg"
},
"/bottomNavigationIcons/user_light.svg" : {
"type" : "image/svg+xml" ,
"etag" : "\"264-Z4BHhZgnx1deFk+IwPcNpcghJdo\"" ,
2026-01-27 16:02:45 +03:30
"mtime" : "2026-01-27T12:04:02.148Z" ,
2025-07-23 16:57:31 +03:30
"size" : 612 ,
"path" : "../public/bottomNavigationIcons/user_light.svg"
},
"/bottomNavigationIcons/user_selected.svg" : {
"type" : "image/svg+xml" ,
"etag" : "\"398-9proSkjDV2y72rTH3jIZddZJEzk\"" ,
2026-01-27 16:02:45 +03:30
"mtime" : "2026-01-27T12:04:02.148Z" ,
2025-07-23 16:57:31 +03:30
"size" : 920 ,
"path" : "../public/bottomNavigationIcons/user_selected.svg"
},
"/bottomNavigationIcons/user_selected_light.svg" : {
"type" : "image/svg+xml" ,
"etag" : "\"3b2-FR/5tDtw/0aEGeqoBxFTM5h4GAA\"" ,
2026-01-27 16:02:45 +03:30
"mtime" : "2026-01-27T12:04:02.148Z" ,
2025-07-23 16:57:31 +03:30
"size" : 946 ,
"path" : "../public/bottomNavigationIcons/user_selected_light.svg"
},
2025-08-25 15:52:41 +03:30
"/instagram/logo.png" : {
"type" : "image/png" ,
"etag" : "\"d86-rDgK6WCKlNptdiXC472VUc6Nr6k\"" ,
2026-01-27 16:02:45 +03:30
"mtime" : "2026-01-27T12:04:02.147Z" ,
2025-08-25 15:52:41 +03:30
"size" : 3462 ,
"path" : "../public/instagram/logo.png"
},
"/instagram/logo.svg" : {
"type" : "image/svg+xml" ,
"etag" : "\"2cf9-PuLu5PDLXC26wxx+yNWNzmsdQ9Y\"" ,
2026-01-27 16:02:45 +03:30
"mtime" : "2026-01-27T12:04:02.149Z" ,
2025-08-25 15:52:41 +03:30
"size" : 11513 ,
"path" : "../public/instagram/logo.svg"
},
"/instagram/logo_white.png" : {
"type" : "image/png" ,
"etag" : "\"d83-tCVLKii+kgQKBK+NGuNHXmGNafE\"" ,
2026-01-27 16:02:45 +03:30
"mtime" : "2026-01-27T12:04:02.149Z" ,
2025-08-25 15:52:41 +03:30
"size" : 3459 ,
"path" : "../public/instagram/logo_white.png"
},
"/instagram/logo_white.svg" : {
"type" : "image/svg+xml" ,
"etag" : "\"2cf7-OKxCTlYoku2oie6twuYK5BEzcrg\"" ,
2026-01-27 16:02:45 +03:30
"mtime" : "2026-01-27T12:04:02.149Z" ,
2025-08-25 15:52:41 +03:30
"size" : 11511 ,
"path" : "../public/instagram/logo_white.svg"
},
2025-08-25 21:57:52 +03:30
"/preview/empty_user.png" : {
"type" : "image/png" ,
2026-01-27 16:02:45 +03:30
"etag" : "\"4d9c-hpW+u7lVdESYj2N+T9ep3yfsTFI\"" ,
"mtime" : "2026-01-27T12:04:02.147Z" ,
"size" : 19868 ,
2025-08-25 21:57:52 +03:30
"path" : "../public/preview/empty_user.png"
},
2026-01-27 16:02:45 +03:30
"/preview/empty_user1.png" : {
"type" : "image/png" ,
"etag" : "\"586-bRFpropXm9e5YUmjmDHWgmkq7BE\"" ,
"mtime" : "2026-01-27T12:04:02.148Z" ,
"size" : 1414 ,
"path" : "../public/preview/empty_user1.png"
},
2025-08-25 21:57:52 +03:30
"/preview/logo_preview.png" : {
"type" : "image/png" ,
"etag" : "\"d273-+/mQg6af8+4RSupBxM9LyZh/WPU\"" ,
2026-01-27 16:02:45 +03:30
"mtime" : "2026-01-27T12:04:02.148Z" ,
2025-08-25 21:57:52 +03:30
"size" : 53875 ,
"path" : "../public/preview/logo_preview.png"
},
"/preview/post_loading.gif" : {
"type" : "image/gif" ,
2026-01-27 16:02:45 +03:30
"etag" : "\"3689-FvATV1lF6ffDybki9di2V3gm2VI\"" ,
"mtime" : "2026-01-27T12:04:02.148Z" ,
"size" : 13961 ,
2025-08-25 21:57:52 +03:30
"path" : "../public/preview/post_loading.gif"
},
"/preview/story_loading.gif" : {
"type" : "image/gif" ,
"etag" : "\"1227-fzHMJ6bvwEf28PBBUI2L0HPEm6A\"" ,
2026-01-27 16:02:45 +03:30
"mtime" : "2026-01-27T12:04:02.148Z" ,
2025-08-25 21:57:52 +03:30
"size" : 4647 ,
"path" : "../public/preview/story_loading.gif"
},
2025-07-23 16:57:31 +03:30
"/_nuxt/0sQGsR-B.js" : {
"type" : "text/javascript; charset=utf-8" ,
"etag" : "\"882-GbwgYFGo9nb9GHYH0eTV8cAGAhk\"" ,
2026-01-27 16:02:45 +03:30
"mtime" : "2026-01-27T12:04:02.100Z" ,
2025-07-23 16:57:31 +03:30
"size" : 2178 ,
"path" : "../public/_nuxt/0sQGsR-B.js"
},
2026-01-27 16:02:45 +03:30
"/_nuxt/14hzxqeZ.js" : {
2025-08-24 13:00:31 +03:30
"type" : "text/javascript; charset=utf-8" ,
2026-01-27 16:02:45 +03:30
"etag" : "\"48ca-1DL5wdGILzvw2rvNiVV3xG+isVY\"" ,
"mtime" : "2026-01-27T12:04:02.100Z" ,
"size" : 18634 ,
"path" : "../public/_nuxt/14hzxqeZ.js"
2025-08-24 13:00:31 +03:30
},
2026-01-27 16:02:45 +03:30
"/_nuxt/1jTl4r5u.js" : {
2025-08-24 13:00:31 +03:30
"type" : "text/javascript; charset=utf-8" ,
2026-01-27 16:02:45 +03:30
"etag" : "\"1d5-ruNoqMTKN3P3uGb7t2Rwn9fHMaY\"" ,
"mtime" : "2026-01-27T12:04:02.100Z" ,
"size" : 469 ,
"path" : "../public/_nuxt/1jTl4r5u.js"
2025-08-27 20:20:03 +03:30
},
2026-01-27 16:02:45 +03:30
"/_nuxt/3-vhA8tQ.js" : {
2025-08-27 20:20:03 +03:30
"type" : "text/javascript; charset=utf-8" ,
2026-01-27 16:02:45 +03:30
"etag" : "\"564-A51vCAjEWsjUzIW6NgY52p6Mutg\"" ,
"mtime" : "2026-01-27T12:04:02.100Z" ,
"size" : 1380 ,
"path" : "../public/_nuxt/3-vhA8tQ.js"
2025-08-27 20:20:03 +03:30
},
2026-01-27 16:02:45 +03:30
"/_nuxt/3RkI9pc5.js" : {
2025-08-27 20:20:03 +03:30
"type" : "text/javascript; charset=utf-8" ,
2026-01-27 16:02:45 +03:30
"etag" : "\"264-Kah5Tf2U83PpjfdliNlBRDD/yTM\"" ,
"mtime" : "2026-01-27T12:04:02.101Z" ,
"size" : 612 ,
"path" : "../public/_nuxt/3RkI9pc5.js"
2025-08-27 20:20:03 +03:30
},
2026-01-27 16:02:45 +03:30
"/_nuxt/3kWPFkR0.js" : {
2025-08-27 20:20:03 +03:30
"type" : "text/javascript; charset=utf-8" ,
2026-01-27 16:02:45 +03:30
"etag" : "\"20ac-aC7BF8kumbmDQzNC9krHtHrxewc\"" ,
"mtime" : "2026-01-27T12:04:02.101Z" ,
"size" : 8364 ,
"path" : "../public/_nuxt/3kWPFkR0.js"
2025-08-27 20:20:03 +03:30
},
2026-01-27 16:02:45 +03:30
"/_nuxt/3oBFl2-F.js" : {
2025-08-27 20:20:03 +03:30
"type" : "text/javascript; charset=utf-8" ,
2026-01-27 16:02:45 +03:30
"etag" : "\"37e5-tDiaD/0/Vv1dxSxHl7kPCnz4cdE\"" ,
"mtime" : "2026-01-27T12:04:02.101Z" ,
"size" : 14309 ,
"path" : "../public/_nuxt/3oBFl2-F.js"
2025-08-27 20:20:03 +03:30
},
2026-01-27 16:02:45 +03:30
"/_nuxt/3qqTvnSo.js" : {
2025-08-27 20:20:03 +03:30
"type" : "text/javascript; charset=utf-8" ,
2026-01-27 16:02:45 +03:30
"etag" : "\"29d-f8PvUXUv2Xm2U2qooC0w1Pyroes\"" ,
"mtime" : "2026-01-27T12:04:02.101Z" ,
"size" : 669 ,
"path" : "../public/_nuxt/3qqTvnSo.js"
2025-07-23 16:57:31 +03:30
},
2026-01-27 16:02:45 +03:30
"/_nuxt/5ZDQaK5A.js" : {
2025-08-17 20:26:15 +03:30
"type" : "text/javascript; charset=utf-8" ,
2026-01-27 16:02:45 +03:30
"etag" : "\"13d6a-0Nhw7EO3prgpuidky5epaCezkVc\"" ,
"mtime" : "2026-01-27T12:04:02.101Z" ,
"size" : 81258 ,
"path" : "../public/_nuxt/5ZDQaK5A.js"
2025-08-19 21:38:30 +03:30
},
2026-01-27 16:02:45 +03:30
"/_nuxt/6Vtnybcx.js" : {
2025-08-24 13:00:31 +03:30
"type" : "text/javascript; charset=utf-8" ,
2026-01-27 16:02:45 +03:30
"etag" : "\"2039-PDNgtJBtvhO/pUJ/t2fDxE1QQj4\"" ,
"mtime" : "2026-01-27T12:04:02.101Z" ,
"size" : 8249 ,
"path" : "../public/_nuxt/6Vtnybcx.js"
2025-08-25 21:57:52 +03:30
},
2026-01-27 16:02:45 +03:30
"/_nuxt/8y_yBhg-.js" : {
2025-08-25 21:57:52 +03:30
"type" : "text/javascript; charset=utf-8" ,
2026-01-27 16:02:45 +03:30
"etag" : "\"29b-Sg8vUlXd3ujKRh8PPnl5cHccLUM\"" ,
"mtime" : "2026-01-27T12:04:02.101Z" ,
"size" : 667 ,
"path" : "../public/_nuxt/8y_yBhg-.js"
2025-08-27 20:20:03 +03:30
},
2026-01-27 16:02:45 +03:30
"/_nuxt/AmADiAwp.js" : {
2025-08-27 20:20:03 +03:30
"type" : "text/javascript; charset=utf-8" ,
2026-01-27 16:02:45 +03:30
"etag" : "\"12a-MoQ4khtiE4YK8WmbaFLP0g3PCNg\"" ,
"mtime" : "2026-01-27T12:04:02.102Z" ,
"size" : 298 ,
"path" : "../public/_nuxt/AmADiAwp.js"
2025-08-27 20:20:03 +03:30
},
2026-01-27 16:02:45 +03:30
"/_nuxt/B1N_kU_k.js" : {
2025-08-27 20:20:03 +03:30
"type" : "text/javascript; charset=utf-8" ,
2026-01-27 16:02:45 +03:30
"etag" : "\"40-sRWG1qAgldqPZ/tAFmFMQD8weg4\"" ,
"mtime" : "2026-01-27T12:04:02.101Z" ,
"size" : 64 ,
"path" : "../public/_nuxt/B1N_kU_k.js"
2025-07-23 16:57:31 +03:30
},
2026-01-27 16:02:45 +03:30
"/_nuxt/B1VM9WVF.js" : {
2025-08-09 21:39:49 +03:30
"type" : "text/javascript; charset=utf-8" ,
2026-01-27 16:02:45 +03:30
"etag" : "\"66-HQrMLTLaD9yC+hVrX9/yh+//K80\"" ,
"mtime" : "2026-01-27T12:04:02.102Z" ,
"size" : 102 ,
"path" : "../public/_nuxt/B1VM9WVF.js"
2025-08-17 20:26:15 +03:30
},
2026-01-27 16:02:45 +03:30
"/_nuxt/B1k10HMT.js" : {
2025-08-17 20:26:15 +03:30
"type" : "text/javascript; charset=utf-8" ,
2026-01-27 16:02:45 +03:30
"etag" : "\"114-TPNHP6PLQ77XQ3Qjq2BL9diNAzQ\"" ,
"mtime" : "2026-01-27T12:04:02.102Z" ,
"size" : 276 ,
"path" : "../public/_nuxt/B1k10HMT.js"
2025-08-25 15:52:41 +03:30
},
2026-01-27 16:02:45 +03:30
"/_nuxt/B5sAEblQ.js" : {
2025-08-25 15:52:41 +03:30
"type" : "text/javascript; charset=utf-8" ,
2026-01-27 16:02:45 +03:30
"etag" : "\"56a-GsWYGr5s9Elt+p8akxyayQZqO7I\"" ,
"mtime" : "2026-01-27T12:04:02.102Z" ,
"size" : 1386 ,
"path" : "../public/_nuxt/B5sAEblQ.js"
2025-08-25 15:52:41 +03:30
},
2026-01-27 16:02:45 +03:30
"/_nuxt/B7AYPz8C.js" : {
2025-08-25 15:52:41 +03:30
"type" : "text/javascript; charset=utf-8" ,
2026-01-27 16:02:45 +03:30
"etag" : "\"3be8-4EUttme11yCZV4/MAwWvjchkTuc\"" ,
"mtime" : "2026-01-27T12:04:02.102Z" ,
"size" : 15336 ,
"path" : "../public/_nuxt/B7AYPz8C.js"
2025-08-25 15:52:41 +03:30
},
2026-01-27 16:02:45 +03:30
"/_nuxt/B7QhzxXq.js" : {
2025-08-25 15:52:41 +03:30
"type" : "text/javascript; charset=utf-8" ,
2026-01-27 16:02:45 +03:30
"etag" : "\"c2-WqNUvB3F2oe0KTVAR3xUmP5Mp48\"" ,
"mtime" : "2026-01-27T12:04:02.102Z" ,
"size" : 194 ,
"path" : "../public/_nuxt/B7QhzxXq.js"
2025-08-25 15:52:41 +03:30
},
2026-01-27 16:02:45 +03:30
"/_nuxt/B7cVZ88b.js" : {
2025-08-25 15:52:41 +03:30
"type" : "text/javascript; charset=utf-8" ,
2026-01-27 16:02:45 +03:30
"etag" : "\"b8-5W0wm8Stsml7sH9evYmsQ0eSXaY\"" ,
"mtime" : "2026-01-27T12:04:02.102Z" ,
"size" : 184 ,
"path" : "../public/_nuxt/B7cVZ88b.js"
2025-08-17 20:26:15 +03:30
},
2026-01-27 16:02:45 +03:30
"/_nuxt/B91UhLl-.js" : {
2025-08-17 20:26:15 +03:30
"type" : "text/javascript; charset=utf-8" ,
2026-01-27 16:02:45 +03:30
"etag" : "\"84d8-UanBy2o67iJZVPzHPtsok18+HBo\"" ,
"mtime" : "2026-01-27T12:04:02.102Z" ,
"size" : 34008 ,
"path" : "../public/_nuxt/B91UhLl-.js"
2025-08-09 21:39:49 +03:30
},
2026-01-27 16:02:45 +03:30
"/_nuxt/BBQQNr_r.js" : {
2025-07-23 16:57:31 +03:30
"type" : "text/javascript; charset=utf-8" ,
2026-01-27 16:02:45 +03:30
"etag" : "\"13f9-V1CHOj5GyAYzpAjJBIIsY516+KU\"" ,
"mtime" : "2026-01-27T12:04:02.102Z" ,
"size" : 5113 ,
"path" : "../public/_nuxt/BBQQNr_r.js"
},
"/_nuxt/BBSG9FnH.js" : {
"type" : "text/javascript; charset=utf-8" ,
"etag" : "\"814-WCTXwHZKI0oVwpRBhy4dDFKBbTY\"" ,
"mtime" : "2026-01-27T12:04:02.102Z" ,
2025-08-27 20:20:03 +03:30
"size" : 2068 ,
2026-01-27 16:02:45 +03:30
"path" : "../public/_nuxt/BBSG9FnH.js"
2025-07-23 16:57:31 +03:30
},
2026-01-27 16:02:45 +03:30
"/_nuxt/BBT589bc.js" : {
2025-07-23 16:57:31 +03:30
"type" : "text/javascript; charset=utf-8" ,
2026-01-27 16:02:45 +03:30
"etag" : "\"3c1-s7cxMfKG/Yy6HxCBIo2g8nYN5Ek\"" ,
"mtime" : "2026-01-27T12:04:02.102Z" ,
"size" : 961 ,
"path" : "../public/_nuxt/BBT589bc.js"
2025-08-09 21:39:49 +03:30
},
2026-01-27 16:02:45 +03:30
"/_nuxt/BDOptM52.js" : {
2025-08-09 21:39:49 +03:30
"type" : "text/javascript; charset=utf-8" ,
2026-01-27 16:02:45 +03:30
"etag" : "\"2a7aa-R7x7gpha5PgGR585T0Bxv0HZtXw\"" ,
"mtime" : "2026-01-27T12:04:02.104Z" ,
"size" : 173994 ,
"path" : "../public/_nuxt/BDOptM52.js"
2025-08-27 20:20:03 +03:30
},
2026-01-27 16:02:45 +03:30
"/_nuxt/BGrduSck.js" : {
2025-08-27 20:20:03 +03:30
"type" : "text/javascript; charset=utf-8" ,
2026-01-27 16:02:45 +03:30
"etag" : "\"a1d3-GkOakNPqE2GnQpK7T9ysAxcvkIs\"" ,
"mtime" : "2026-01-27T12:04:02.103Z" ,
"size" : 41427 ,
"path" : "../public/_nuxt/BGrduSck.js"
2025-08-27 20:20:03 +03:30
},
2026-01-27 16:02:45 +03:30
"/_nuxt/BHBthidp.js" : {
2025-08-27 20:20:03 +03:30
"type" : "text/javascript; charset=utf-8" ,
2026-01-27 16:02:45 +03:30
"etag" : "\"d1e-mbpP5FQebTgjxd8i6pWF3he+u44\"" ,
"mtime" : "2026-01-27T12:04:02.103Z" ,
"size" : 3358 ,
"path" : "../public/_nuxt/BHBthidp.js"
2025-08-27 20:20:03 +03:30
},
2026-01-27 16:02:45 +03:30
"/_nuxt/BHLsoC0X.js" : {
2025-08-27 20:20:03 +03:30
"type" : "text/javascript; charset=utf-8" ,
2026-01-27 16:02:45 +03:30
"etag" : "\"655-l3gmTMYkm0BTK/bgIU9f+4tx6jc\"" ,
"mtime" : "2026-01-27T12:04:02.103Z" ,
"size" : 1621 ,
"path" : "../public/_nuxt/BHLsoC0X.js"
2025-07-23 16:57:31 +03:30
},
2026-01-27 16:02:45 +03:30
"/_nuxt/BHw89vdB.js" : {
"type" : "text/javascript; charset=utf-8" ,
"etag" : "\"7f3-lRX+5diwdP/UXUD7NX2h4P2JAM8\"" ,
"mtime" : "2026-01-27T12:04:02.103Z" ,
"size" : 2035 ,
"path" : "../public/_nuxt/BHw89vdB.js"
},
"/_nuxt/BI5evUJ6.js" : {
"type" : "text/javascript; charset=utf-8" ,
"etag" : "\"497-T5GGzDPtt5wlTtqnWcKj2p6qFD0\"" ,
"mtime" : "2026-01-27T12:04:02.103Z" ,
"size" : 1175 ,
"path" : "../public/_nuxt/BI5evUJ6.js"
},
"/_nuxt/BJ6YnkHC.js" : {
"type" : "text/javascript; charset=utf-8" ,
"etag" : "\"94bb-rFqvu5ahU1PkYHm4NegIHApW1lQ\"" ,
"mtime" : "2026-01-27T12:04:02.104Z" ,
"size" : 38075 ,
"path" : "../public/_nuxt/BJ6YnkHC.js"
},
"/_nuxt/BJt1EIeo.js" : {
"type" : "text/javascript; charset=utf-8" ,
"etag" : "\"b726-YkF4akCvX62JRXws5GVlO2goidY\"" ,
"mtime" : "2026-01-27T12:04:02.104Z" ,
"size" : 46886 ,
"path" : "../public/_nuxt/BJt1EIeo.js"
},
"/_nuxt/BLCVMa8A.js" : {
"type" : "text/javascript; charset=utf-8" ,
"etag" : "\"69d-9rq7yJ0b7rrqw9fUgrVwucLNlkU\"" ,
"mtime" : "2026-01-27T12:04:02.104Z" ,
"size" : 1693 ,
"path" : "../public/_nuxt/BLCVMa8A.js"
},
"/_nuxt/BLK5qYlX.js" : {
"type" : "text/javascript; charset=utf-8" ,
"etag" : "\"6cb-BXou0mxM+Kshf5Viy7Zu8BBGjrI\"" ,
"mtime" : "2026-01-27T12:04:02.104Z" ,
"size" : 1739 ,
"path" : "../public/_nuxt/BLK5qYlX.js"
},
"/_nuxt/BN8guUTz.js" : {
"type" : "text/javascript; charset=utf-8" ,
"etag" : "\"a3c-0yirGfqQIwySexEeDSmBm8DPeGY\"" ,
"mtime" : "2026-01-27T12:04:02.104Z" ,
"size" : 2620 ,
"path" : "../public/_nuxt/BN8guUTz.js"
},
"/_nuxt/BNRQPgV4.js" : {
"type" : "text/javascript; charset=utf-8" ,
"etag" : "\"d6d-uLb4tM+HUq4O1vJWn8e8PUNoj8w\"" ,
"mtime" : "2026-01-27T12:04:02.104Z" ,
"size" : 3437 ,
"path" : "../public/_nuxt/BNRQPgV4.js"
},
"/_nuxt/BNS36bUN.js" : {
"type" : "text/javascript; charset=utf-8" ,
"etag" : "\"686-aglFxtdB1ICkjrtsjwMvZGX/n1U\"" ,
"mtime" : "2026-01-27T12:04:02.104Z" ,
"size" : 1670 ,
"path" : "../public/_nuxt/BNS36bUN.js"
},
"/_nuxt/BOwWxdr3.js" : {
"type" : "text/javascript; charset=utf-8" ,
"etag" : "\"198c-oV80LA/EbZl7jfDdU99XA72y33k\"" ,
"mtime" : "2026-01-27T12:04:02.104Z" ,
"size" : 6540 ,
"path" : "../public/_nuxt/BOwWxdr3.js"
},
"/_nuxt/BT8sO8ga.js" : {
"type" : "text/javascript; charset=utf-8" ,
"etag" : "\"a9-GA+sZ8/5BjbwFdgKJaikhTlS+pg\"" ,
"mtime" : "2026-01-27T12:04:02.104Z" ,
"size" : 169 ,
"path" : "../public/_nuxt/BT8sO8ga.js"
},
"/_nuxt/BY3KS3PC.js" : {
"type" : "text/javascript; charset=utf-8" ,
"etag" : "\"1c8f-gEb9geQieJKmSWiPpPBkd9Ltwk8\"" ,
"mtime" : "2026-01-27T12:04:02.105Z" ,
"size" : 7311 ,
"path" : "../public/_nuxt/BY3KS3PC.js"
},
"/_nuxt/BYFjdAgw.js" : {
"type" : "text/javascript; charset=utf-8" ,
"etag" : "\"35e7-so1wOxShXMCYQFFb2CdUkmClEqw\"" ,
"mtime" : "2026-01-27T12:04:02.105Z" ,
"size" : 13799 ,
"path" : "../public/_nuxt/BYFjdAgw.js"
},
"/_nuxt/BYkHht5C.js" : {
"type" : "text/javascript; charset=utf-8" ,
"etag" : "\"1389f-iCRVzRX3KBlXMqIxgJzGZkVjlRg\"" ,
"mtime" : "2026-01-27T12:04:02.105Z" ,
"size" : 80031 ,
"path" : "../public/_nuxt/BYkHht5C.js"
},
"/_nuxt/B_fmCE4u.js" : {
"type" : "text/javascript; charset=utf-8" ,
"etag" : "\"5be-rgr1kzp7/suph6R5pOuhHAgpwK4\"" ,
"mtime" : "2026-01-27T12:04:02.105Z" ,
"size" : 1470 ,
"path" : "../public/_nuxt/B_fmCE4u.js"
},
"/_nuxt/BaFlPdDo.js" : {
"type" : "text/javascript; charset=utf-8" ,
"etag" : "\"2ae7-0yFu1SFsJTx8K64Van4h+RSjhD4\"" ,
"mtime" : "2026-01-27T12:04:02.105Z" ,
"size" : 10983 ,
"path" : "../public/_nuxt/BaFlPdDo.js"
},
"/_nuxt/BasicButton.B2eELnPq.css" : {
2025-07-23 16:57:31 +03:30
"type" : "text/css; charset=utf-8" ,
2026-01-27 16:02:45 +03:30
"etag" : "\"b0-uSSlhbh8M8DEsjcUBIQJBMicRi8\"" ,
"mtime" : "2026-01-27T12:04:02.105Z" ,
"size" : 176 ,
"path" : "../public/_nuxt/BasicButton.B2eELnPq.css"
2025-07-23 16:57:31 +03:30
},
"/_nuxt/BasicIconOld.DktbhR_V.css" : {
"type" : "text/css; charset=utf-8" ,
"etag" : "\"3d-QxRGm8Uny5tH7YgTQNcIq8Yo9xs\"" ,
2026-01-27 16:02:45 +03:30
"mtime" : "2026-01-27T12:04:02.105Z" ,
2025-07-23 16:57:31 +03:30
"size" : 61 ,
"path" : "../public/_nuxt/BasicIconOld.DktbhR_V.css"
},
"/_nuxt/BasicInput.BS7pxlLz.css" : {
"type" : "text/css; charset=utf-8" ,
"etag" : "\"12e-Ipt3m8bNH8USMdeY8fh9AdBGhqc\"" ,
2026-01-27 16:02:45 +03:30
"mtime" : "2026-01-27T12:04:02.105Z" ,
2025-07-23 16:57:31 +03:30
"size" : 302 ,
"path" : "../public/_nuxt/BasicInput.BS7pxlLz.css"
},
2025-08-19 21:38:30 +03:30
"/_nuxt/BasicTextArea.tn0RQdqM.css" : {
2025-07-23 16:57:31 +03:30
"type" : "text/css; charset=utf-8" ,
"etag" : "\"0-2jmj7l5rSw0yVb/vlWAYkK/YBwk\"" ,
2026-01-27 16:02:45 +03:30
"mtime" : "2026-01-27T12:03:54.592Z" ,
2025-07-23 16:57:31 +03:30
"size" : 0 ,
2025-08-19 21:38:30 +03:30
"path" : "../public/_nuxt/BasicTextArea.tn0RQdqM.css"
2025-07-23 16:57:31 +03:30
},
2026-01-27 16:02:45 +03:30
"/_nuxt/BbXMVhKj.js" : {
2025-08-13 20:31:16 +03:30
"type" : "text/javascript; charset=utf-8" ,
2026-01-27 16:02:45 +03:30
"etag" : "\"584-dQNShl+a24efBbhFnlIB2U2GEk8\"" ,
"mtime" : "2026-01-27T12:04:02.105Z" ,
"size" : 1412 ,
"path" : "../public/_nuxt/BbXMVhKj.js"
2025-08-17 20:26:15 +03:30
},
2026-01-27 16:02:45 +03:30
"/_nuxt/Bbd_Ti14.js" : {
2025-08-17 20:26:15 +03:30
"type" : "text/javascript; charset=utf-8" ,
2026-01-27 16:02:45 +03:30
"etag" : "\"250-C7qCVjkmKx3n8B3iJp8/wAbaGPM\"" ,
"mtime" : "2026-01-27T12:04:02.106Z" ,
"size" : 592 ,
"path" : "../public/_nuxt/Bbd_Ti14.js"
2025-08-18 18:29:28 +03:30
},
2026-01-27 16:02:45 +03:30
"/_nuxt/Be-gRMon.js" : {
2025-08-18 18:29:28 +03:30
"type" : "text/javascript; charset=utf-8" ,
2026-01-27 16:02:45 +03:30
"etag" : "\"dab-EfHA8KV1oF6xltgNRTHfu1lHXEI\"" ,
"mtime" : "2026-01-27T12:04:02.106Z" ,
"size" : 3499 ,
"path" : "../public/_nuxt/Be-gRMon.js"
2025-07-23 16:57:31 +03:30
},
"/_nuxt/BgR2E6gQ.js" : {
"type" : "text/javascript; charset=utf-8" ,
"etag" : "\"253-PLNyY/DKYNXdR8RWoouDXiJBLW8\"" ,
2026-01-27 16:02:45 +03:30
"mtime" : "2026-01-27T12:04:02.106Z" ,
2025-07-23 16:57:31 +03:30
"size" : 595 ,
"path" : "../public/_nuxt/BgR2E6gQ.js"
},
2026-01-27 16:02:45 +03:30
"/_nuxt/Bh8FlG27.js" : {
2025-07-23 16:57:31 +03:30
"type" : "text/javascript; charset=utf-8" ,
2026-01-27 16:02:45 +03:30
"etag" : "\"538-gLSgWucL9YSuy1/p1k1WezXS04s\"" ,
"mtime" : "2026-01-27T12:04:02.106Z" ,
"size" : 1336 ,
"path" : "../public/_nuxt/Bh8FlG27.js"
2025-08-24 13:00:31 +03:30
},
2026-01-27 16:02:45 +03:30
"/_nuxt/BhrAsToM.js" : {
2025-08-24 13:00:31 +03:30
"type" : "text/javascript; charset=utf-8" ,
2026-01-27 16:02:45 +03:30
"etag" : "\"4c7-pUDRM+2X572JF6Yt6PQitVeChJ0\"" ,
"mtime" : "2026-01-27T12:04:02.106Z" ,
"size" : 1223 ,
"path" : "../public/_nuxt/BhrAsToM.js"
2025-08-24 13:00:31 +03:30
},
2026-01-27 16:02:45 +03:30
"/_nuxt/BiDL-COj.js" : {
2025-08-24 13:00:31 +03:30
"type" : "text/javascript; charset=utf-8" ,
2026-01-27 16:02:45 +03:30
"etag" : "\"d69e-dqlaaHZh3TRQPrfd0fD9msa/r4s\"" ,
"mtime" : "2026-01-27T12:04:02.106Z" ,
"size" : 54942 ,
"path" : "../public/_nuxt/BiDL-COj.js"
2025-08-24 13:00:31 +03:30
},
2026-01-27 16:02:45 +03:30
"/_nuxt/BiJJrwHu.js" : {
2025-08-24 13:00:31 +03:30
"type" : "text/javascript; charset=utf-8" ,
2026-01-27 16:02:45 +03:30
"etag" : "\"70c-FIMFq/OiwjmICIgrEuhBp7XKooU\"" ,
"mtime" : "2026-01-27T12:04:02.106Z" ,
"size" : 1804 ,
"path" : "../public/_nuxt/BiJJrwHu.js"
2025-08-24 13:00:31 +03:30
},
2026-01-27 16:02:45 +03:30
"/_nuxt/BlkfA1qz.js" : {
2025-08-24 13:00:31 +03:30
"type" : "text/javascript; charset=utf-8" ,
2026-01-27 16:02:45 +03:30
"etag" : "\"192-/iWB6E+1IwP4xrgHQwM19HvCFIk\"" ,
"mtime" : "2026-01-27T12:04:02.106Z" ,
"size" : 402 ,
"path" : "../public/_nuxt/BlkfA1qz.js"
2025-08-25 15:52:41 +03:30
},
2026-01-27 16:02:45 +03:30
"/_nuxt/Bmie_yea.js" : {
2025-08-25 15:52:41 +03:30
"type" : "text/javascript; charset=utf-8" ,
2026-01-27 16:02:45 +03:30
"etag" : "\"45f-jAuNidkTBnPMvD/F7cJM0kxE5nI\"" ,
"mtime" : "2026-01-27T12:04:02.106Z" ,
"size" : 1119 ,
"path" : "../public/_nuxt/Bmie_yea.js"
2025-08-25 15:52:41 +03:30
},
2026-01-27 16:02:45 +03:30
"/_nuxt/BmvgCcse.js" : {
2025-08-25 15:52:41 +03:30
"type" : "text/javascript; charset=utf-8" ,
2026-01-27 16:02:45 +03:30
"etag" : "\"2791-odr8FMRsD3TWgRT8CtR6LeuiZGE\"" ,
"mtime" : "2026-01-27T12:04:02.107Z" ,
"size" : 10129 ,
"path" : "../public/_nuxt/BmvgCcse.js"
2025-08-25 21:57:52 +03:30
},
2026-01-27 16:02:45 +03:30
"/_nuxt/BoBuM2tF.js" : {
2025-08-25 21:57:52 +03:30
"type" : "text/javascript; charset=utf-8" ,
2026-01-27 16:02:45 +03:30
"etag" : "\"251-xwIxgVMk3n5xnqQzi2hRZYlDA1U\"" ,
"mtime" : "2026-01-27T12:04:02.106Z" ,
"size" : 593 ,
"path" : "../public/_nuxt/BoBuM2tF.js"
2025-08-25 15:52:41 +03:30
},
2026-01-27 16:02:45 +03:30
"/_nuxt/Brt5zfvQ.js" : {
2025-08-25 15:52:41 +03:30
"type" : "text/javascript; charset=utf-8" ,
2026-01-27 16:02:45 +03:30
"etag" : "\"846-DWsurkrFCFi+L6FJNoQCsoIcyJo\"" ,
"mtime" : "2026-01-27T12:04:02.107Z" ,
"size" : 2118 ,
"path" : "../public/_nuxt/Brt5zfvQ.js"
2025-08-25 21:57:52 +03:30
},
2026-01-27 16:02:45 +03:30
"/_nuxt/BsLs4p15.js" : {
2025-08-25 21:57:52 +03:30
"type" : "text/javascript; charset=utf-8" ,
2026-01-27 16:02:45 +03:30
"etag" : "\"32a7-B2jLaJaraoU5c6sMf1QWf3Wdapo\"" ,
"mtime" : "2026-01-27T12:04:02.107Z" ,
"size" : 12967 ,
"path" : "../public/_nuxt/BsLs4p15.js"
2025-08-25 21:57:52 +03:30
},
2026-01-27 16:02:45 +03:30
"/_nuxt/BsUIZQ-f.js" : {
2025-08-25 21:57:52 +03:30
"type" : "text/javascript; charset=utf-8" ,
2026-01-27 16:02:45 +03:30
"etag" : "\"28f-DsNQEA5TrtmOGBpZTm/nohQb7ns\"" ,
"mtime" : "2026-01-27T12:04:02.107Z" ,
"size" : 655 ,
"path" : "../public/_nuxt/BsUIZQ-f.js"
2025-08-25 21:57:52 +03:30
},
2026-01-27 16:02:45 +03:30
"/_nuxt/BtyzBuwr.js" : {
2025-08-25 21:57:52 +03:30
"type" : "text/javascript; charset=utf-8" ,
2026-01-27 16:02:45 +03:30
"etag" : "\"3c95-F2Cmfk5IlnRBioy4Y+hnTTODjYw\"" ,
"mtime" : "2026-01-27T12:04:02.107Z" ,
"size" : 15509 ,
"path" : "../public/_nuxt/BtyzBuwr.js"
2025-08-25 21:57:52 +03:30
},
2026-01-27 16:02:45 +03:30
"/_nuxt/BvP_ux_g.js" : {
2025-08-25 21:57:52 +03:30
"type" : "text/javascript; charset=utf-8" ,
2026-01-27 16:02:45 +03:30
"etag" : "\"c6301-3qipuwWHVrUpApGRsH6Jx24t+YQ\"" ,
"mtime" : "2026-01-27T12:04:02.110Z" ,
"size" : 811777 ,
"path" : "../public/_nuxt/BvP_ux_g.js"
2025-08-25 21:57:52 +03:30
},
2026-01-27 16:02:45 +03:30
"/_nuxt/Bw_ZgZhj.js" : {
2025-08-25 21:57:52 +03:30
"type" : "text/javascript; charset=utf-8" ,
2026-01-27 16:02:45 +03:30
"etag" : "\"643-CT72PSSewpekXVrlDSh8yo3Xp60\"" ,
"mtime" : "2026-01-27T12:04:02.107Z" ,
"size" : 1603 ,
"path" : "../public/_nuxt/Bw_ZgZhj.js"
2025-08-25 21:57:52 +03:30
},
2026-01-27 16:02:45 +03:30
"/_nuxt/BxF7pQIy.js" : {
2025-08-25 21:57:52 +03:30
"type" : "text/javascript; charset=utf-8" ,
2026-01-27 16:02:45 +03:30
"etag" : "\"47a-hrqOhMOGUVs0cg7yg1bKjnBprTw\"" ,
"mtime" : "2026-01-27T12:04:02.107Z" ,
"size" : 1146 ,
"path" : "../public/_nuxt/BxF7pQIy.js"
2025-08-25 21:57:52 +03:30
},
2026-01-27 16:02:45 +03:30
"/_nuxt/BzAZyL4T.js" : {
2025-08-25 21:57:52 +03:30
"type" : "text/javascript; charset=utf-8" ,
2026-01-27 16:02:45 +03:30
"etag" : "\"164-tZsxcSHwaibQvgJImqZBqTFWdqU\"" ,
"mtime" : "2026-01-27T12:04:02.108Z" ,
"size" : 356 ,
"path" : "../public/_nuxt/BzAZyL4T.js"
2025-08-27 20:20:03 +03:30
},
2026-01-27 16:02:45 +03:30
"/_nuxt/C-5fyTkQ.js" : {
2025-08-27 20:20:03 +03:30
"type" : "text/javascript; charset=utf-8" ,
2026-01-27 16:02:45 +03:30
"etag" : "\"2da-6szEoRiv1YpiecxwT++D6I6kCdQ\"" ,
"mtime" : "2026-01-27T12:04:02.108Z" ,
"size" : 730 ,
"path" : "../public/_nuxt/C-5fyTkQ.js"
2025-08-27 20:20:03 +03:30
},
2026-01-27 16:02:45 +03:30
"/_nuxt/C-xdWTVd.js" : {
2025-08-27 20:20:03 +03:30
"type" : "text/javascript; charset=utf-8" ,
2026-01-27 16:02:45 +03:30
"etag" : "\"764-Gn15pWM3KcrxVBmJuDO3L8mX7Rc\"" ,
"mtime" : "2026-01-27T12:04:02.108Z" ,
"size" : 1892 ,
"path" : "../public/_nuxt/C-xdWTVd.js"
2025-08-27 20:20:03 +03:30
},
2026-01-27 16:02:45 +03:30
"/_nuxt/C17E0ujv.js" : {
2025-08-27 20:20:03 +03:30
"type" : "text/javascript; charset=utf-8" ,
2026-01-27 16:02:45 +03:30
"etag" : "\"182-XeTK+CCOcT4S1tqEoPECdK2atPI\"" ,
"mtime" : "2026-01-27T12:04:02.108Z" ,
2025-08-27 20:20:03 +03:30
"size" : 386 ,
2026-01-27 16:02:45 +03:30
"path" : "../public/_nuxt/C17E0ujv.js"
2025-08-25 15:52:41 +03:30
},
2026-01-27 16:02:45 +03:30
"/_nuxt/C2q09MKV.js" : {
2025-08-25 15:52:41 +03:30
"type" : "text/javascript; charset=utf-8" ,
2026-01-27 16:02:45 +03:30
"etag" : "\"49f-CWTQBXaBOu4SNacweLbMegkB/tY\"" ,
"mtime" : "2026-01-27T12:04:02.108Z" ,
"size" : 1183 ,
"path" : "../public/_nuxt/C2q09MKV.js"
},
"/_nuxt/C3qXPSdl.js" : {
"type" : "text/javascript; charset=utf-8" ,
"etag" : "\"c23-xwAiqPUFqeWJuHrWV50/RzJ2hhA\"" ,
"mtime" : "2026-01-27T12:04:02.109Z" ,
"size" : 3107 ,
"path" : "../public/_nuxt/C3qXPSdl.js"
},
"/_nuxt/C3x4TpXj.js" : {
"type" : "text/javascript; charset=utf-8" ,
"etag" : "\"3c81-VsA9lIdvhK2z4ij+W6fo21MhoS8\"" ,
"mtime" : "2026-01-27T12:04:02.109Z" ,
"size" : 15489 ,
"path" : "../public/_nuxt/C3x4TpXj.js"
},
"/_nuxt/C5eOakM-.js" : {
"type" : "text/javascript; charset=utf-8" ,
"etag" : "\"1a5-yMk6nfJaMahJvi7/seyeYl5CgZM\"" ,
"mtime" : "2026-01-27T12:04:02.109Z" ,
"size" : 421 ,
"path" : "../public/_nuxt/C5eOakM-.js"
},
"/_nuxt/C6svSwIi.js" : {
"type" : "text/javascript; charset=utf-8" ,
"etag" : "\"fc9-XK6BExEGndn+CE8W5NZunMFNHss\"" ,
"mtime" : "2026-01-27T12:04:02.109Z" ,
"size" : 4041 ,
"path" : "../public/_nuxt/C6svSwIi.js"
},
"/_nuxt/C7zEPsIa.js" : {
"type" : "text/javascript; charset=utf-8" ,
"etag" : "\"15d0-z/GlCiMt3UmAkUHJBTqIowDcIo0\"" ,
"mtime" : "2026-01-27T12:04:02.109Z" ,
"size" : 5584 ,
"path" : "../public/_nuxt/C7zEPsIa.js"
},
"/_nuxt/C8NhlFLb.js" : {
"type" : "text/javascript; charset=utf-8" ,
"etag" : "\"2606-DDbcgbtE3vtK4Rbz12KxWvFlZro\"" ,
"mtime" : "2026-01-27T12:04:02.110Z" ,
"size" : 9734 ,
"path" : "../public/_nuxt/C8NhlFLb.js"
},
"/_nuxt/C9QN_Mfk.js" : {
"type" : "text/javascript; charset=utf-8" ,
"etag" : "\"1923-IskBmdhIA1d0TY6lrLEzWKjFbeQ\"" ,
"mtime" : "2026-01-27T12:04:02.109Z" ,
"size" : 6435 ,
"path" : "../public/_nuxt/C9QN_Mfk.js"
},
"/_nuxt/CBJoCjDV.js" : {
"type" : "text/javascript; charset=utf-8" ,
"etag" : "\"1b76-6p9Lc+TD3CL5m2MrmfO0a5zExto\"" ,
"mtime" : "2026-01-27T12:04:02.110Z" ,
"size" : 7030 ,
"path" : "../public/_nuxt/CBJoCjDV.js"
},
"/_nuxt/CD4jTnQf.js" : {
"type" : "text/javascript; charset=utf-8" ,
"etag" : "\"5dc-+HzAfvGpnMYcMR3SOCbq/EyuiBc\"" ,
"mtime" : "2026-01-27T12:04:02.110Z" ,
"size" : 1500 ,
"path" : "../public/_nuxt/CD4jTnQf.js"
},
"/_nuxt/CDCPZiX_.js" : {
"type" : "text/javascript; charset=utf-8" ,
"etag" : "\"781-+8R5axGHIDxxKP8fot2B7r2D/Uw\"" ,
"mtime" : "2026-01-27T12:04:02.110Z" ,
"size" : 1921 ,
"path" : "../public/_nuxt/CDCPZiX_.js"
},
"/_nuxt/CDtJoR7M.js" : {
"type" : "text/javascript; charset=utf-8" ,
"etag" : "\"1124-9T9lLDd3WOgKc+2xQ/LiPjgWGdI\"" ,
"mtime" : "2026-01-27T12:04:02.110Z" ,
"size" : 4388 ,
"path" : "../public/_nuxt/CDtJoR7M.js"
},
"/_nuxt/CER9i5mY.js" : {
"type" : "text/javascript; charset=utf-8" ,
"etag" : "\"3a33-bA6xPlyGfrMxntTwmQQXQz88CQA\"" ,
"mtime" : "2026-01-27T12:04:02.111Z" ,
"size" : 14899 ,
"path" : "../public/_nuxt/CER9i5mY.js"
},
"/_nuxt/CHtzyEc6.js" : {
"type" : "text/javascript; charset=utf-8" ,
"etag" : "\"4c8-Oy/27ugroItqUSG6fExonWHIXrk\"" ,
"mtime" : "2026-01-27T12:04:02.111Z" ,
"size" : 1224 ,
"path" : "../public/_nuxt/CHtzyEc6.js"
},
"/_nuxt/CJXObQzs.js" : {
"type" : "text/javascript; charset=utf-8" ,
"etag" : "\"9be-CpRcCVdlQBEvw4TR5XtWgEJTmOE\"" ,
"mtime" : "2026-01-27T12:04:02.111Z" ,
"size" : 2494 ,
"path" : "../public/_nuxt/CJXObQzs.js"
},
"/_nuxt/CK63FxZH.js" : {
"type" : "text/javascript; charset=utf-8" ,
"etag" : "\"682a-k+yG/pHFdnYc9Zr51mhDoIxoTzA\"" ,
"mtime" : "2026-01-27T12:04:02.111Z" ,
"size" : 26666 ,
"path" : "../public/_nuxt/CK63FxZH.js"
},
"/_nuxt/CKHWFXyc.js" : {
"type" : "text/javascript; charset=utf-8" ,
"etag" : "\"1fb-QFGuWGqPgTm9wMwJT+PXc72GCZo\"" ,
"mtime" : "2026-01-27T12:04:02.111Z" ,
"size" : 507 ,
"path" : "../public/_nuxt/CKHWFXyc.js"
},
"/_nuxt/CLMw6_SR.js" : {
"type" : "text/javascript; charset=utf-8" ,
"etag" : "\"4fe-9KXvDewu2+05a05PRWQ7tVZqP0A\"" ,
"mtime" : "2026-01-27T12:04:02.111Z" ,
"size" : 1278 ,
"path" : "../public/_nuxt/CLMw6_SR.js"
},
"/_nuxt/CQSSU-NN.js" : {
"type" : "text/javascript; charset=utf-8" ,
"etag" : "\"719-C2sgRulAA3G8RcM83hyRrV2pio0\"" ,
"mtime" : "2026-01-27T12:04:02.111Z" ,
"size" : 1817 ,
"path" : "../public/_nuxt/CQSSU-NN.js"
},
"/_nuxt/CQzmf4YL.js" : {
"type" : "text/javascript; charset=utf-8" ,
"etag" : "\"6969-HARtWE/YR8VqsdwAJpDbJwuWs4c\"" ,
"mtime" : "2026-01-27T12:04:02.111Z" ,
"size" : 26985 ,
"path" : "../public/_nuxt/CQzmf4YL.js"
},
"/_nuxt/CRIXWJhb.js" : {
"type" : "text/javascript; charset=utf-8" ,
"etag" : "\"8dcf-Fm9Upl6AXLal+nm1q6VIzoQl+Ac\"" ,
"mtime" : "2026-01-27T12:04:02.111Z" ,
"size" : 36303 ,
"path" : "../public/_nuxt/CRIXWJhb.js"
},
"/_nuxt/CRv-GgbU.js" : {
"type" : "text/javascript; charset=utf-8" ,
"etag" : "\"142-fkrN9SVkttlV7wnU62gD2EPpU4s\"" ,
"mtime" : "2026-01-27T12:04:02.112Z" ,
"size" : 322 ,
"path" : "../public/_nuxt/CRv-GgbU.js"
},
"/_nuxt/CZUeDkO0.js" : {
"type" : "text/javascript; charset=utf-8" ,
"etag" : "\"4e2-1yE6vxX+TswEd1QYlLya1VkxJR8\"" ,
"mtime" : "2026-01-27T12:04:02.111Z" ,
"size" : 1250 ,
"path" : "../public/_nuxt/CZUeDkO0.js"
},
"/_nuxt/CZfMhVbr.js" : {
"type" : "text/javascript; charset=utf-8" ,
"etag" : "\"162-A3vFzHPf5UpMiRHwfJJqK3H9KZ4\"" ,
"mtime" : "2026-01-27T12:04:02.112Z" ,
"size" : 354 ,
"path" : "../public/_nuxt/CZfMhVbr.js"
},
"/_nuxt/Ca3ZqvUo.js" : {
"type" : "text/javascript; charset=utf-8" ,
"etag" : "\"2348-1cJEb3/vTnBs6ohzIwntgbQg36g\"" ,
"mtime" : "2026-01-27T12:04:02.112Z" ,
"size" : 9032 ,
"path" : "../public/_nuxt/Ca3ZqvUo.js"
},
"/_nuxt/CaZV_EHL.js" : {
"type" : "text/javascript; charset=utf-8" ,
"etag" : "\"3b73-VQLqzC7qEXYFeEXJ5ZIW9EwYABA\"" ,
"mtime" : "2026-01-27T12:04:02.112Z" ,
"size" : 15219 ,
"path" : "../public/_nuxt/CaZV_EHL.js"
},
"/_nuxt/CbHNw5X6.js" : {
"type" : "text/javascript; charset=utf-8" ,
"etag" : "\"f8a-ycmvgoWrbeCfYgoulNasyOlrm+w\"" ,
"mtime" : "2026-01-27T12:04:02.112Z" ,
"size" : 3978 ,
"path" : "../public/_nuxt/CbHNw5X6.js"
},
"/_nuxt/Cbt2tPBc.js" : {
"type" : "text/javascript; charset=utf-8" ,
"etag" : "\"a0ef1-3/y0NkOysvFqC+UQhFvv0AGcjrc\"" ,
"mtime" : "2026-01-27T12:04:02.115Z" ,
"size" : 659185 ,
"path" : "../public/_nuxt/Cbt2tPBc.js"
},
"/_nuxt/Ceqi68nG.js" : {
"type" : "text/javascript; charset=utf-8" ,
"etag" : "\"1d9-L0KZzCVq6nvIS4kRHyTP/4hRpxM\"" ,
"mtime" : "2026-01-27T12:04:02.113Z" ,
"size" : 473 ,
"path" : "../public/_nuxt/Ceqi68nG.js"
},
"/_nuxt/CfQT9Pjy.js" : {
"type" : "text/javascript; charset=utf-8" ,
"etag" : "\"8a9-0pzvda6WGF/b4Ub66dwYHY6Pcl8\"" ,
"mtime" : "2026-01-27T12:04:02.112Z" ,
"size" : 2217 ,
"path" : "../public/_nuxt/CfQT9Pjy.js"
},
"/_nuxt/CgpbEzJY.js" : {
"type" : "text/javascript; charset=utf-8" ,
"etag" : "\"7a9-44EY4lgI7cESvJVO80cdhsqaQh8\"" ,
"mtime" : "2026-01-27T12:04:02.112Z" ,
"size" : 1961 ,
"path" : "../public/_nuxt/CgpbEzJY.js"
2025-08-19 21:38:30 +03:30
},
2025-08-23 19:43:48 +03:30
"/_nuxt/ChangeLanguage.SqR8ZyGJ.css" : {
"type" : "text/css; charset=utf-8" ,
"etag" : "\"db-/soqtO9yrVhF4eX7wR2xWjjiWKw\"" ,
2026-01-27 16:02:45 +03:30
"mtime" : "2026-01-27T12:04:02.113Z" ,
2025-08-23 19:43:48 +03:30
"size" : 219 ,
"path" : "../public/_nuxt/ChangeLanguage.SqR8ZyGJ.css"
},
2025-08-24 22:15:30 +03:30
"/_nuxt/Cj99RmFE.js" : {
2025-08-23 19:43:48 +03:30
"type" : "text/javascript; charset=utf-8" ,
2025-08-24 22:15:30 +03:30
"etag" : "\"66-DFgMGaybi/ROxJ7GnJsRDtFyUFk\"" ,
2026-01-27 16:02:45 +03:30
"mtime" : "2026-01-27T12:04:02.113Z" ,
2025-08-24 22:15:30 +03:30
"size" : 102 ,
"path" : "../public/_nuxt/Cj99RmFE.js"
2025-07-23 16:57:31 +03:30
},
2026-01-27 16:02:45 +03:30
"/_nuxt/CkS6gUmV.js" : {
2025-07-23 16:57:31 +03:30
"type" : "text/javascript; charset=utf-8" ,
2026-01-27 16:02:45 +03:30
"etag" : "\"6ed-Sx7j7kOQMBjB/Ocx0txUuJ7gUTo\"" ,
"mtime" : "2026-01-27T12:04:02.114Z" ,
"size" : 1773 ,
"path" : "../public/_nuxt/CkS6gUmV.js"
2025-08-21 21:29:10 +03:30
},
2026-01-27 16:02:45 +03:30
"/_nuxt/CkcGP4w5.js" : {
2025-08-21 21:29:10 +03:30
"type" : "text/javascript; charset=utf-8" ,
2026-01-27 16:02:45 +03:30
"etag" : "\"1758-8+8muei/fvNSHVLYJtiXstLhZvo\"" ,
"mtime" : "2026-01-27T12:04:02.113Z" ,
"size" : 5976 ,
"path" : "../public/_nuxt/CkcGP4w5.js"
2025-08-24 22:15:30 +03:30
},
2026-01-27 16:02:45 +03:30
"/_nuxt/ClgUV-y-.js" : {
2025-08-24 22:15:30 +03:30
"type" : "text/javascript; charset=utf-8" ,
2026-01-27 16:02:45 +03:30
"etag" : "\"50-wlNF4X+sCG8QsQtiG5PTVpa0MeI\"" ,
"mtime" : "2026-01-27T12:04:02.113Z" ,
"size" : 80 ,
"path" : "../public/_nuxt/ClgUV-y-.js"
2025-08-24 22:15:30 +03:30
},
2026-01-27 16:02:45 +03:30
"/_nuxt/CmMfcJ2x.js" : {
2025-08-24 22:15:30 +03:30
"type" : "text/javascript; charset=utf-8" ,
2026-01-27 16:02:45 +03:30
"etag" : "\"694-06E9WCL0es28RygDMUcejSWpn0U\"" ,
"mtime" : "2026-01-27T12:04:02.113Z" ,
"size" : 1684 ,
"path" : "../public/_nuxt/CmMfcJ2x.js"
2025-08-24 22:15:30 +03:30
},
2026-01-27 16:02:45 +03:30
"/_nuxt/Cq3oTAtN.js" : {
2025-08-24 22:15:30 +03:30
"type" : "text/javascript; charset=utf-8" ,
2026-01-27 16:02:45 +03:30
"etag" : "\"2c93-S1K6jO2e2uPglaZlGwXesQbIC6Y\"" ,
"mtime" : "2026-01-27T12:04:02.114Z" ,
"size" : 11411 ,
"path" : "../public/_nuxt/Cq3oTAtN.js"
2025-08-24 22:15:30 +03:30
},
2026-01-27 16:02:45 +03:30
"/_nuxt/CqrgowAD.js" : {
2025-08-24 22:15:30 +03:30
"type" : "text/javascript; charset=utf-8" ,
2026-01-27 16:02:45 +03:30
"etag" : "\"a371-kyfFtLRQkTFJA1HRcP70lD4EX9g\"" ,
"mtime" : "2026-01-27T12:04:02.114Z" ,
"size" : 41841 ,
"path" : "../public/_nuxt/CqrgowAD.js"
2025-08-24 22:15:30 +03:30
},
2026-01-27 16:02:45 +03:30
"/_nuxt/Cs0PMq_Y.js" : {
2025-08-24 22:15:30 +03:30
"type" : "text/javascript; charset=utf-8" ,
2026-01-27 16:02:45 +03:30
"etag" : "\"1ee5-VoGAhGAcIm51XnRy3xHTqtBBKQ0\"" ,
"mtime" : "2026-01-27T12:04:02.114Z" ,
"size" : 7909 ,
"path" : "../public/_nuxt/Cs0PMq_Y.js"
2025-08-25 15:52:41 +03:30
},
2026-01-27 16:02:45 +03:30
"/_nuxt/Cs5cnJ7-.js" : {
2025-08-25 15:52:41 +03:30
"type" : "text/javascript; charset=utf-8" ,
2026-01-27 16:02:45 +03:30
"etag" : "\"59d-H3UCUxcrgwtKS3I2xJYI2Perlh0\"" ,
"mtime" : "2026-01-27T12:04:02.114Z" ,
"size" : 1437 ,
"path" : "../public/_nuxt/Cs5cnJ7-.js"
2025-08-25 15:52:41 +03:30
},
2026-01-27 16:02:45 +03:30
"/_nuxt/CsYkSgoy.js" : {
2025-08-25 15:52:41 +03:30
"type" : "text/javascript; charset=utf-8" ,
2026-01-27 16:02:45 +03:30
"etag" : "\"741-paJpKmx/7NBppV6vqS/2egHImuo\"" ,
"mtime" : "2026-01-27T12:04:02.115Z" ,
"size" : 1857 ,
"path" : "../public/_nuxt/CsYkSgoy.js"
2025-07-23 16:57:31 +03:30
},
"/_nuxt/CscEAC8U.js" : {
"type" : "text/javascript; charset=utf-8" ,
"etag" : "\"323-TaBVHHrjh0oI0mCOlGjxICtgdjQ\"" ,
2026-01-27 16:02:45 +03:30
"mtime" : "2026-01-27T12:04:02.115Z" ,
2025-07-23 16:57:31 +03:30
"size" : 803 ,
"path" : "../public/_nuxt/CscEAC8U.js"
},
2026-01-27 16:02:45 +03:30
"/_nuxt/Cst_R1Uh.js" : {
2025-07-23 16:57:31 +03:30
"type" : "text/javascript; charset=utf-8" ,
2026-01-27 16:02:45 +03:30
"etag" : "\"845-Xqmd77lGVPDr4sIiGZLpDpicL04\"" ,
"mtime" : "2026-01-27T12:04:02.115Z" ,
"size" : 2117 ,
"path" : "../public/_nuxt/Cst_R1Uh.js"
2025-07-23 16:57:31 +03:30
},
2026-01-27 16:02:45 +03:30
"/_nuxt/CtGujaVK.js" : {
2025-07-23 16:57:31 +03:30
"type" : "text/javascript; charset=utf-8" ,
2026-01-27 16:02:45 +03:30
"etag" : "\"62b1-rOSs4JsG3LWmI13FSqm+t9wDsvM\"" ,
"mtime" : "2026-01-27T12:04:02.115Z" ,
"size" : 25265 ,
"path" : "../public/_nuxt/CtGujaVK.js"
2025-08-18 18:29:28 +03:30
},
2026-01-27 16:02:45 +03:30
"/_nuxt/Ctsa2335.js" : {
2025-08-18 18:29:28 +03:30
"type" : "text/javascript; charset=utf-8" ,
2026-01-27 16:02:45 +03:30
"etag" : "\"7a2-ZKIgwNEFu13mY/HmkCiBUkkgxhw\"" ,
"mtime" : "2026-01-27T12:04:02.115Z" ,
"size" : 1954 ,
"path" : "../public/_nuxt/Ctsa2335.js"
2025-08-23 19:43:48 +03:30
},
2026-01-27 16:02:45 +03:30
"/_nuxt/CvgOwh8h.js" : {
2025-08-23 19:43:48 +03:30
"type" : "text/javascript; charset=utf-8" ,
2026-01-27 16:02:45 +03:30
"etag" : "\"403-mRc+fzrdZ44w5I62+epNGj373ik\"" ,
"mtime" : "2026-01-27T12:04:02.115Z" ,
"size" : 1027 ,
"path" : "../public/_nuxt/CvgOwh8h.js"
2025-08-18 18:29:28 +03:30
},
2025-08-19 21:38:30 +03:30
"/_nuxt/CwtvwXb3.js" : {
2025-08-18 18:29:28 +03:30
"type" : "text/javascript; charset=utf-8" ,
2025-08-19 21:38:30 +03:30
"etag" : "\"1680-MhxKhl0cqBehbxCvHTE7egTM5mo\"" ,
2026-01-27 16:02:45 +03:30
"mtime" : "2026-01-27T12:04:02.115Z" ,
2025-08-19 21:38:30 +03:30
"size" : 5760 ,
"path" : "../public/_nuxt/CwtvwXb3.js"
2025-08-18 18:29:28 +03:30
},
2026-01-27 16:02:45 +03:30
"/_nuxt/CxM9_8io.js" : {
2025-08-18 18:29:28 +03:30
"type" : "text/javascript; charset=utf-8" ,
2026-01-27 16:02:45 +03:30
"etag" : "\"53e-EA7i23t9PjJbQ7w4rjPwzmiNqqs\"" ,
"mtime" : "2026-01-27T12:04:02.115Z" ,
"size" : 1342 ,
"path" : "../public/_nuxt/CxM9_8io.js"
2025-08-18 18:29:28 +03:30
},
2026-01-27 16:02:45 +03:30
"/_nuxt/Cy8_VRum.js" : {
2025-08-18 18:29:28 +03:30
"type" : "text/javascript; charset=utf-8" ,
2026-01-27 16:02:45 +03:30
"etag" : "\"2ed-goQ2bHs4ksT74H6nmaxWqZvo6BU\"" ,
"mtime" : "2026-01-27T12:04:02.116Z" ,
"size" : 749 ,
"path" : "../public/_nuxt/Cy8_VRum.js"
2025-08-18 18:29:28 +03:30
},
2026-01-27 16:02:45 +03:30
"/_nuxt/D-_y6OpO.js" : {
2025-08-18 18:29:28 +03:30
"type" : "text/javascript; charset=utf-8" ,
2026-01-27 16:02:45 +03:30
"etag" : "\"895-lsWF2M7Qss0A4z3MJbp97vAauQ8\"" ,
"mtime" : "2026-01-27T12:04:02.115Z" ,
"size" : 2197 ,
"path" : "../public/_nuxt/D-_y6OpO.js"
2025-08-18 18:29:28 +03:30
},
2026-01-27 16:02:45 +03:30
"/_nuxt/D-bUn136.js" : {
2025-08-18 18:29:28 +03:30
"type" : "text/javascript; charset=utf-8" ,
2026-01-27 16:02:45 +03:30
"etag" : "\"826-HELXContTX53kotsbXRauFQdpOA\"" ,
"mtime" : "2026-01-27T12:04:02.115Z" ,
"size" : 2086 ,
"path" : "../public/_nuxt/D-bUn136.js"
2025-08-18 18:29:28 +03:30
},
2026-01-27 16:02:45 +03:30
"/_nuxt/D00xL7aY.js" : {
2025-08-18 18:29:28 +03:30
"type" : "text/javascript; charset=utf-8" ,
2026-01-27 16:02:45 +03:30
"etag" : "\"9b3f-Vot42aMD224tZqKtowvoqCEO8W8\"" ,
"mtime" : "2026-01-27T12:04:02.116Z" ,
"size" : 39743 ,
"path" : "../public/_nuxt/D00xL7aY.js"
2025-08-18 18:29:28 +03:30
},
2026-01-27 16:02:45 +03:30
"/_nuxt/D0fu8WUi.js" : {
2025-08-18 18:29:28 +03:30
"type" : "text/javascript; charset=utf-8" ,
2026-01-27 16:02:45 +03:30
"etag" : "\"2377-UAU8hryyEnYLs5sqvnIeapx9rgU\"" ,
"mtime" : "2026-01-27T12:04:02.116Z" ,
"size" : 9079 ,
"path" : "../public/_nuxt/D0fu8WUi.js"
2025-08-18 18:29:28 +03:30
},
2026-01-27 16:02:45 +03:30
"/_nuxt/D0vSK_3x.js" : {
2025-08-18 18:29:28 +03:30
"type" : "text/javascript; charset=utf-8" ,
2026-01-27 16:02:45 +03:30
"etag" : "\"9c-bjqVt+H0Di5w9JAZ3iNezEKjCyI\"" ,
"mtime" : "2026-01-27T12:04:02.116Z" ,
"size" : 156 ,
"path" : "../public/_nuxt/D0vSK_3x.js"
2025-08-18 18:29:28 +03:30
},
2026-01-27 16:02:45 +03:30
"/_nuxt/D1Fow3lV.js" : {
2025-08-18 18:29:28 +03:30
"type" : "text/javascript; charset=utf-8" ,
2026-01-27 16:02:45 +03:30
"etag" : "\"2ab4-q6QiTcTcdBb20Ork6/rU7DYeJV4\"" ,
"mtime" : "2026-01-27T12:04:02.116Z" ,
"size" : 10932 ,
"path" : "../public/_nuxt/D1Fow3lV.js"
2025-08-18 18:29:28 +03:30
},
2026-01-27 16:02:45 +03:30
"/_nuxt/D1doa_M-.js" : {
2025-08-18 18:29:28 +03:30
"type" : "text/javascript; charset=utf-8" ,
2026-01-27 16:02:45 +03:30
"etag" : "\"8acc-vUu8Dc2LWrtHP+9TPz+ZU9IMlKw\"" ,
"mtime" : "2026-01-27T12:04:02.116Z" ,
"size" : 35532 ,
"path" : "../public/_nuxt/D1doa_M-.js"
2025-08-25 15:52:41 +03:30
},
2026-01-27 16:02:45 +03:30
"/_nuxt/D2VqvOiI.js" : {
2025-08-25 15:52:41 +03:30
"type" : "text/javascript; charset=utf-8" ,
2026-01-27 16:02:45 +03:30
"etag" : "\"1f8-DlFH4PUjMa7cy5jVxaf/N+p6bkU\"" ,
"mtime" : "2026-01-27T12:04:02.116Z" ,
"size" : 504 ,
"path" : "../public/_nuxt/D2VqvOiI.js"
2025-08-27 20:20:03 +03:30
},
2026-01-27 16:02:45 +03:30
"/_nuxt/D2avLtB7.js" : {
2025-08-27 20:20:03 +03:30
"type" : "text/javascript; charset=utf-8" ,
2026-01-27 16:02:45 +03:30
"etag" : "\"16d-1p9USRgY2pCjJTjgpMc9JnaPcZU\"" ,
"mtime" : "2026-01-27T12:04:02.116Z" ,
2025-08-27 20:20:03 +03:30
"size" : 365 ,
2026-01-27 16:02:45 +03:30
"path" : "../public/_nuxt/D2avLtB7.js"
2025-08-27 20:20:03 +03:30
},
2026-01-27 16:02:45 +03:30
"/_nuxt/D2iO6YhJ.js" : {
2025-08-27 20:20:03 +03:30
"type" : "text/javascript; charset=utf-8" ,
2026-01-27 16:02:45 +03:30
"etag" : "\"af2-5/DkVpT4yoSTa5t30bS7VswDph0\"" ,
"mtime" : "2026-01-27T12:04:02.117Z" ,
"size" : 2802 ,
"path" : "../public/_nuxt/D2iO6YhJ.js"
},
"/_nuxt/D58EDzqx.js" : {
"type" : "text/javascript; charset=utf-8" ,
"etag" : "\"ef9-HwjUk58MSt+6fZf/pA11LqdpL5U\"" ,
"mtime" : "2026-01-27T12:04:02.117Z" ,
"size" : 3833 ,
"path" : "../public/_nuxt/D58EDzqx.js"
2025-08-24 22:15:30 +03:30
},
"/_nuxt/D6qJbdzf.js" : {
"type" : "text/javascript; charset=utf-8" ,
"etag" : "\"1e33-tyd13UYn5QbogttolxBC4esTnL8\"" ,
2026-01-27 16:02:45 +03:30
"mtime" : "2026-01-27T12:04:02.117Z" ,
2025-08-24 22:15:30 +03:30
"size" : 7731 ,
"path" : "../public/_nuxt/D6qJbdzf.js"
},
2026-01-27 16:02:45 +03:30
"/_nuxt/D9o4TIOW.js" : {
2025-08-24 22:15:30 +03:30
"type" : "text/javascript; charset=utf-8" ,
2026-01-27 16:02:45 +03:30
"etag" : "\"22ae-WIAqZbVBdhSB2lP0xsVCs2+mVMg\"" ,
"mtime" : "2026-01-27T12:04:02.118Z" ,
"size" : 8878 ,
"path" : "../public/_nuxt/D9o4TIOW.js"
2025-08-24 22:15:30 +03:30
},
2026-01-27 16:02:45 +03:30
"/_nuxt/DAvFecQo.js" : {
2025-08-24 22:15:30 +03:30
"type" : "text/javascript; charset=utf-8" ,
2026-01-27 16:02:45 +03:30
"etag" : "\"3d8-wyHHeTKRaxVHz9tQzIDVilwPhzQ\"" ,
"mtime" : "2026-01-27T12:04:02.117Z" ,
"size" : 984 ,
"path" : "../public/_nuxt/DAvFecQo.js"
2025-08-24 22:15:30 +03:30
},
2026-01-27 16:02:45 +03:30
"/_nuxt/DFzrht7B.js" : {
2025-08-24 22:15:30 +03:30
"type" : "text/javascript; charset=utf-8" ,
2026-01-27 16:02:45 +03:30
"etag" : "\"2fe-OPeNrDaSRTEwz4AqozK7+5AQSE0\"" ,
"mtime" : "2026-01-27T12:04:02.118Z" ,
"size" : 766 ,
"path" : "../public/_nuxt/DFzrht7B.js"
2025-08-24 22:15:30 +03:30
},
2026-01-27 16:02:45 +03:30
"/_nuxt/DGFRw2HL.js" : {
2025-08-24 22:15:30 +03:30
"type" : "text/javascript; charset=utf-8" ,
2026-01-27 16:02:45 +03:30
"etag" : "\"69-jFTOonInw8BPrlFxCfetmFnGDRs\"" ,
"mtime" : "2026-01-27T12:04:02.118Z" ,
"size" : 105 ,
"path" : "../public/_nuxt/DGFRw2HL.js"
2025-08-24 22:15:30 +03:30
},
2026-01-27 16:02:45 +03:30
"/_nuxt/DGswNBmG.js" : {
2025-08-24 22:15:30 +03:30
"type" : "text/javascript; charset=utf-8" ,
2026-01-27 16:02:45 +03:30
"etag" : "\"42e3-bKX9dK/+3MdynoY5aXlMUBdjOYk\"" ,
"mtime" : "2026-01-27T12:04:02.118Z" ,
"size" : 17123 ,
"path" : "../public/_nuxt/DGswNBmG.js"
2025-08-24 22:15:30 +03:30
},
2026-01-27 16:02:45 +03:30
"/_nuxt/DIW3nMve.js" : {
2025-08-24 22:15:30 +03:30
"type" : "text/javascript; charset=utf-8" ,
2026-01-27 16:02:45 +03:30
"etag" : "\"269-tD+PXiKcAdAw7sXtrXD/MBAmik0\"" ,
"mtime" : "2026-01-27T12:04:02.118Z" ,
"size" : 617 ,
"path" : "../public/_nuxt/DIW3nMve.js"
2025-08-24 22:15:30 +03:30
},
2026-01-27 16:02:45 +03:30
"/_nuxt/DNDpcsqo.js" : {
2025-08-24 22:15:30 +03:30
"type" : "text/javascript; charset=utf-8" ,
2026-01-27 16:02:45 +03:30
"etag" : "\"36dc-PMEDS0dVYLYCaoNSEoy7ATzMPGM\"" ,
"mtime" : "2026-01-27T12:04:02.118Z" ,
"size" : 14044 ,
"path" : "../public/_nuxt/DNDpcsqo.js"
2025-08-21 21:29:10 +03:30
},
2026-01-27 16:02:45 +03:30
"/_nuxt/DOYgr7rE.js" : {
2025-07-23 16:57:31 +03:30
"type" : "text/javascript; charset=utf-8" ,
2026-01-27 16:02:45 +03:30
"etag" : "\"25f-GevoJnqhfKqBbyBYun//UQ+eU34\"" ,
"mtime" : "2026-01-27T12:04:02.118Z" ,
"size" : 607 ,
"path" : "../public/_nuxt/DOYgr7rE.js"
2025-07-23 16:57:31 +03:30
},
2026-01-27 16:02:45 +03:30
"/_nuxt/DPBLY6es.js" : {
2025-07-23 16:57:31 +03:30
"type" : "text/javascript; charset=utf-8" ,
2026-01-27 16:02:45 +03:30
"etag" : "\"2db-DO+CbmjbuOxSeGYXfVnxo9axPJQ\"" ,
"mtime" : "2026-01-27T12:04:02.118Z" ,
"size" : 731 ,
"path" : "../public/_nuxt/DPBLY6es.js"
2025-08-25 15:52:41 +03:30
},
2026-01-27 16:02:45 +03:30
"/_nuxt/DPLkQIR9.js" : {
2025-08-25 15:52:41 +03:30
"type" : "text/javascript; charset=utf-8" ,
2026-01-27 16:02:45 +03:30
"etag" : "\"43b-CsIH7L/U3s3/qjwr+Uw14a+PuK4\"" ,
"mtime" : "2026-01-27T12:04:02.119Z" ,
"size" : 1083 ,
"path" : "../public/_nuxt/DPLkQIR9.js"
2025-08-25 15:52:41 +03:30
},
2026-01-27 16:02:45 +03:30
"/_nuxt/DQ1VUkHT.js" : {
2025-08-25 15:52:41 +03:30
"type" : "text/javascript; charset=utf-8" ,
2026-01-27 16:02:45 +03:30
"etag" : "\"a6-9h/C4lGOjWgiDNC+gEn7/HvRPm4\"" ,
"mtime" : "2026-01-27T12:04:02.119Z" ,
"size" : 166 ,
"path" : "../public/_nuxt/DQ1VUkHT.js"
},
"/_nuxt/DRaf_pDu.js" : {
"type" : "text/javascript; charset=utf-8" ,
"etag" : "\"22d-oXzVM6U4HLgKSDn+VHjZIJ5LjN0\"" ,
"mtime" : "2026-01-27T12:04:02.119Z" ,
"size" : 557 ,
"path" : "../public/_nuxt/DRaf_pDu.js"
},
"/_nuxt/DRgfp1up.js" : {
"type" : "text/javascript; charset=utf-8" ,
"etag" : "\"f2-TeSSTNuWFiiNeoAt2B9bMhb+/C4\"" ,
"mtime" : "2026-01-27T12:04:02.119Z" ,
"size" : 242 ,
"path" : "../public/_nuxt/DRgfp1up.js"
},
"/_nuxt/DTgN_l7o.js" : {
"type" : "text/javascript; charset=utf-8" ,
"etag" : "\"182-XeTK+CCOcT4S1tqEoPECdK2atPI\"" ,
"mtime" : "2026-01-27T12:04:02.119Z" ,
"size" : 386 ,
"path" : "../public/_nuxt/DTgN_l7o.js"
},
"/_nuxt/DTq-4KzG.js" : {
"type" : "text/javascript; charset=utf-8" ,
"etag" : "\"3cf-Thgixqkqu625PB973UbVPrH6r0w\"" ,
"mtime" : "2026-01-27T12:04:02.120Z" ,
"size" : 975 ,
"path" : "../public/_nuxt/DTq-4KzG.js"
},
"/_nuxt/DUmF_Rgz.js" : {
"type" : "text/javascript; charset=utf-8" ,
"etag" : "\"2be-NF9L9tkz1vfEcXLlNf/cBnsymrw\"" ,
"mtime" : "2026-01-27T12:04:02.119Z" ,
"size" : 702 ,
"path" : "../public/_nuxt/DUmF_Rgz.js"
},
"/_nuxt/DVxbPVlR.js" : {
"type" : "text/javascript; charset=utf-8" ,
"etag" : "\"730-lE4gBjElzAQsiiN/OZQIAIKi+WU\"" ,
"mtime" : "2026-01-27T12:04:02.119Z" ,
"size" : 1840 ,
"path" : "../public/_nuxt/DVxbPVlR.js"
},
"/_nuxt/DZ5eTpmJ.js" : {
"type" : "text/javascript; charset=utf-8" ,
"etag" : "\"5f4-fGOam9JGY0f8S46BHvZRsx1CQYo\"" ,
"mtime" : "2026-01-27T12:04:02.120Z" ,
"size" : 1524 ,
"path" : "../public/_nuxt/DZ5eTpmJ.js"
},
"/_nuxt/DZxZseAX.js" : {
"type" : "text/javascript; charset=utf-8" ,
"etag" : "\"536-1yrEdcZUQoZTOzVvSrnh5A4nicc\"" ,
"mtime" : "2026-01-27T12:04:02.120Z" ,
"size" : 1334 ,
"path" : "../public/_nuxt/DZxZseAX.js"
},
"/_nuxt/DcT29QuF.js" : {
"type" : "text/javascript; charset=utf-8" ,
"etag" : "\"1726-rQgHX8Whgnp7cYc5VDsuU2cA+2g\"" ,
"mtime" : "2026-01-27T12:04:02.120Z" ,
"size" : 5926 ,
"path" : "../public/_nuxt/DcT29QuF.js"
},
"/_nuxt/DcxkNLFr.js" : {
"type" : "text/javascript; charset=utf-8" ,
"etag" : "\"1f9-OI/+1oK9PXukHq5OIrKThjbblw4\"" ,
"mtime" : "2026-01-27T12:04:02.120Z" ,
"size" : 505 ,
"path" : "../public/_nuxt/DcxkNLFr.js"
},
"/_nuxt/Ddip-HNk.js" : {
"type" : "text/javascript; charset=utf-8" ,
"etag" : "\"10bb-40frks3BBtYdf1V6OhvNfnT+52k\"" ,
"mtime" : "2026-01-27T12:04:02.120Z" ,
"size" : 4283 ,
"path" : "../public/_nuxt/Ddip-HNk.js"
},
"/_nuxt/De7hBUwl.js" : {
"type" : "text/javascript; charset=utf-8" ,
"etag" : "\"86c9-pau4GrALveiKTLkn9M6wR7w1Exc\"" ,
"mtime" : "2026-01-27T12:04:02.120Z" ,
"size" : 34505 ,
"path" : "../public/_nuxt/De7hBUwl.js"
},
"/_nuxt/DeTvNnRD.js" : {
"type" : "text/javascript; charset=utf-8" ,
"etag" : "\"855-0jLMKut5s3pkU5chU+l3ulzWjFw\"" ,
"mtime" : "2026-01-27T12:04:02.120Z" ,
"size" : 2133 ,
"path" : "../public/_nuxt/DeTvNnRD.js"
},
"/_nuxt/DeUOGOlO.js" : {
"type" : "text/javascript; charset=utf-8" ,
"etag" : "\"2eb-ERE990SIUUHXS409lTIGeQmcr3Y\"" ,
"mtime" : "2026-01-27T12:04:02.120Z" ,
"size" : 747 ,
"path" : "../public/_nuxt/DeUOGOlO.js"
},
"/_nuxt/DfSIj5ee.js" : {
"type" : "text/javascript; charset=utf-8" ,
"etag" : "\"8a96-AEnwqBhKqKR22lrWLj+PHkkz28c\"" ,
"mtime" : "2026-01-27T12:04:02.121Z" ,
"size" : 35478 ,
"path" : "../public/_nuxt/DfSIj5ee.js"
},
"/_nuxt/DgUGVCtO.js" : {
"type" : "text/javascript; charset=utf-8" ,
"etag" : "\"577-i0Rw/fWdy7uUocl1rAsRLBjgpVE\"" ,
"mtime" : "2026-01-27T12:04:02.121Z" ,
"size" : 1399 ,
"path" : "../public/_nuxt/DgUGVCtO.js"
2025-08-13 20:31:16 +03:30
},
2025-08-24 22:15:30 +03:30
"/_nuxt/DjvBa-1E.js" : {
2025-08-13 20:31:16 +03:30
"type" : "text/javascript; charset=utf-8" ,
2025-08-24 22:15:30 +03:30
"etag" : "\"3e-pUclDn9an7oRNGoPIMWjc1WHxMY\"" ,
2026-01-27 16:02:45 +03:30
"mtime" : "2026-01-27T12:04:02.121Z" ,
2025-08-24 22:15:30 +03:30
"size" : 62 ,
"path" : "../public/_nuxt/DjvBa-1E.js"
2025-08-21 21:29:10 +03:30
},
2026-01-27 16:02:45 +03:30
"/_nuxt/DkLizs-G.js" : {
2025-08-21 21:29:10 +03:30
"type" : "text/javascript; charset=utf-8" ,
2026-01-27 16:02:45 +03:30
"etag" : "\"63-WxTBNobFjN5wjikNDb/O/t4CS5A\"" ,
"mtime" : "2026-01-27T12:04:02.121Z" ,
"size" : 99 ,
"path" : "../public/_nuxt/DkLizs-G.js"
2025-08-17 20:26:15 +03:30
},
2025-07-23 16:57:31 +03:30
"/_nuxt/DlAUqK2U.js" : {
"type" : "text/javascript; charset=utf-8" ,
"etag" : "\"5b-eFCz/UrraTh721pgAl0VxBNR1es\"" ,
2026-01-27 16:02:45 +03:30
"mtime" : "2026-01-27T12:04:02.121Z" ,
2025-07-23 16:57:31 +03:30
"size" : 91 ,
"path" : "../public/_nuxt/DlAUqK2U.js"
},
2026-01-27 16:02:45 +03:30
"/_nuxt/DlznrpTI.js" : {
2025-07-23 16:57:31 +03:30
"type" : "text/javascript; charset=utf-8" ,
2026-01-27 16:02:45 +03:30
"etag" : "\"321d-nBs2QizNahxC16x3Su5o1le/mDg\"" ,
"mtime" : "2026-01-27T12:04:02.121Z" ,
"size" : 12829 ,
"path" : "../public/_nuxt/DlznrpTI.js"
2025-08-27 20:20:03 +03:30
},
2026-01-27 16:02:45 +03:30
"/_nuxt/Dm-BacZx.js" : {
2025-08-27 20:20:03 +03:30
"type" : "text/javascript; charset=utf-8" ,
2026-01-27 16:02:45 +03:30
"etag" : "\"cf7-L4zTh7PM4t5ja7sxeeNB3tMcVI0\"" ,
"mtime" : "2026-01-27T12:04:02.121Z" ,
"size" : 3319 ,
"path" : "../public/_nuxt/Dm-BacZx.js"
2025-08-27 20:20:03 +03:30
},
2026-01-27 16:02:45 +03:30
"/_nuxt/Dn4CZ-Yo.js" : {
2025-08-27 20:20:03 +03:30
"type" : "text/javascript; charset=utf-8" ,
2026-01-27 16:02:45 +03:30
"etag" : "\"6b-VKJv6Z1g/c+BslqB8Prr02+jtq8\"" ,
"mtime" : "2026-01-27T12:04:02.121Z" ,
2025-08-27 20:20:03 +03:30
"size" : 107 ,
2026-01-27 16:02:45 +03:30
"path" : "../public/_nuxt/Dn4CZ-Yo.js"
2025-08-27 20:20:03 +03:30
},
2026-01-27 16:02:45 +03:30
"/_nuxt/DnXbm1Hu.js" : {
2025-08-27 20:20:03 +03:30
"type" : "text/javascript; charset=utf-8" ,
2026-01-27 16:02:45 +03:30
"etag" : "\"1a05-Nk8f6X97B3fMcbnEIYnLcBQcrG0\"" ,
"mtime" : "2026-01-27T12:04:02.122Z" ,
"size" : 6661 ,
"path" : "../public/_nuxt/DnXbm1Hu.js"
2025-08-27 20:20:03 +03:30
},
2026-01-27 16:02:45 +03:30
"/_nuxt/Dq7m1_nY.js" : {
2025-08-27 20:20:03 +03:30
"type" : "text/javascript; charset=utf-8" ,
2026-01-27 16:02:45 +03:30
"etag" : "\"c27d-nRn15PyD5dB5Ke672y1wyt2C8YQ\"" ,
"mtime" : "2026-01-27T12:04:02.122Z" ,
"size" : 49789 ,
"path" : "../public/_nuxt/Dq7m1_nY.js"
2025-08-27 20:20:03 +03:30
},
2026-01-27 16:02:45 +03:30
"/_nuxt/DrvgMTOA.js" : {
2025-08-27 20:20:03 +03:30
"type" : "text/javascript; charset=utf-8" ,
2026-01-27 16:02:45 +03:30
"etag" : "\"10b00-okEXcmK+rqYFBR33ulZt9er73Wk\"" ,
"mtime" : "2026-01-27T12:04:02.122Z" ,
"size" : 68352 ,
"path" : "../public/_nuxt/DrvgMTOA.js"
2025-08-27 20:20:03 +03:30
},
2026-01-27 16:02:45 +03:30
"/_nuxt/DsbmUPiH.js" : {
2025-08-27 20:20:03 +03:30
"type" : "text/javascript; charset=utf-8" ,
2026-01-27 16:02:45 +03:30
"etag" : "\"25ed-HR+vwKwVVgTHQmlVWzEuj9XOd3U\"" ,
"mtime" : "2026-01-27T12:04:02.122Z" ,
"size" : 9709 ,
"path" : "../public/_nuxt/DsbmUPiH.js"
2025-08-27 20:20:03 +03:30
},
2026-01-27 16:02:45 +03:30
"/_nuxt/Du9NqUFl.js" : {
2025-08-27 20:20:03 +03:30
"type" : "text/javascript; charset=utf-8" ,
2026-01-27 16:02:45 +03:30
"etag" : "\"88a7-4nSuaVxZkFCd2p8jjtgd3L76MUM\"" ,
"mtime" : "2026-01-27T12:04:02.122Z" ,
"size" : 34983 ,
"path" : "../public/_nuxt/Du9NqUFl.js"
2025-08-27 20:20:03 +03:30
},
2026-01-27 16:02:45 +03:30
"/_nuxt/DuHsFjQf.js" : {
2025-08-27 20:20:03 +03:30
"type" : "text/javascript; charset=utf-8" ,
2026-01-27 16:02:45 +03:30
"etag" : "\"18d0-moBLabZwRO+FGBVdvD2GuWwB/nY\"" ,
"mtime" : "2026-01-27T12:04:02.122Z" ,
"size" : 6352 ,
"path" : "../public/_nuxt/DuHsFjQf.js"
2025-08-27 20:20:03 +03:30
},
2026-01-27 16:02:45 +03:30
"/_nuxt/DuNs4Pw1.js" : {
2025-08-27 20:20:03 +03:30
"type" : "text/javascript; charset=utf-8" ,
2026-01-27 16:02:45 +03:30
"etag" : "\"761-tUAnh1Q8wRKd9P5R+EBCROctaPk\"" ,
"mtime" : "2026-01-27T12:04:02.122Z" ,
"size" : 1889 ,
"path" : "../public/_nuxt/DuNs4Pw1.js"
2025-07-23 16:57:31 +03:30
},
2026-01-27 16:02:45 +03:30
"/_nuxt/DwalR_vN.js" : {
2025-08-27 20:20:03 +03:30
"type" : "text/javascript; charset=utf-8" ,
2026-01-27 16:02:45 +03:30
"etag" : "\"99-xH6zKUQB4Gt4BH4EKpbaoCrQZJs\"" ,
"mtime" : "2026-01-27T12:04:02.122Z" ,
2025-08-27 20:20:03 +03:30
"size" : 153 ,
2026-01-27 16:02:45 +03:30
"path" : "../public/_nuxt/DwalR_vN.js"
2025-08-25 15:52:41 +03:30
},
2026-01-27 16:02:45 +03:30
"/_nuxt/Dy4U5EbT.js" : {
"type" : "text/javascript; charset=utf-8" ,
"etag" : "\"111-3u+jR4pFhXSkrxEE4NXoV7P8Cws\"" ,
"mtime" : "2026-01-27T12:04:02.122Z" ,
"size" : 273 ,
"path" : "../public/_nuxt/Dy4U5EbT.js"
},
"/_nuxt/DyxeBzWG.js" : {
"type" : "text/javascript; charset=utf-8" ,
"etag" : "\"d9-tlj1I45LMpR/EqnsjTVttuS6OXY\"" ,
"mtime" : "2026-01-27T12:04:02.123Z" ,
"size" : 217 ,
"path" : "../public/_nuxt/DyxeBzWG.js"
},
"/_nuxt/DzeZd0Vf.js" : {
"type" : "text/javascript; charset=utf-8" ,
"etag" : "\"45f-5cNhUKQeVwD3xDd83zfOuAQEsSc\"" ,
"mtime" : "2026-01-27T12:04:02.123Z" ,
"size" : 1119 ,
"path" : "../public/_nuxt/DzeZd0Vf.js"
},
"/_nuxt/FVfVRvfu.js" : {
"type" : "text/javascript; charset=utf-8" ,
"etag" : "\"22d8-j637NUxdtM/WeaaKP6Mcazj8b7Y\"" ,
"mtime" : "2026-01-27T12:04:02.123Z" ,
"size" : 8920 ,
"path" : "../public/_nuxt/FVfVRvfu.js"
},
"/_nuxt/FullScreenStories.vHiwkct6.css" : {
2025-07-24 21:13:13 +03:30
"type" : "text/css; charset=utf-8" ,
2026-01-27 16:02:45 +03:30
"etag" : "\"1dc-huoNPn00loXCF5z66U8JFgeFYRA\"" ,
"mtime" : "2026-01-27T12:04:02.123Z" ,
"size" : 476 ,
"path" : "../public/_nuxt/FullScreenStories.vHiwkct6.css"
2025-08-19 21:38:30 +03:30
},
2026-01-27 16:02:45 +03:30
"/_nuxt/HV4Ptg59.js" : {
"type" : "text/javascript; charset=utf-8" ,
"etag" : "\"5db-57yFLggYbQzj9Q8xxbcZuVk/liI\"" ,
"mtime" : "2026-01-27T12:04:02.123Z" ,
"size" : 1499 ,
"path" : "../public/_nuxt/HV4Ptg59.js"
},
"/_nuxt/Highlights.LsmMR9Cv.css" : {
2025-08-19 21:38:30 +03:30
"type" : "text/css; charset=utf-8" ,
2026-01-27 16:02:45 +03:30
"etag" : "\"835-mpWHtvP0KFqCCNUoDfXV/angdU4\"" ,
"mtime" : "2026-01-27T12:04:02.123Z" ,
"size" : 2101 ,
"path" : "../public/_nuxt/Highlights.LsmMR9Cv.css"
2025-07-23 16:57:31 +03:30
},
2025-08-24 22:15:30 +03:30
"/_nuxt/IRANSansWeb_FaNum.BLA2CtIC.woff2" : {
2025-07-23 16:57:31 +03:30
"type" : "font/woff2" ,
"etag" : "\"6d28-AufINCNdNZVNkWiYA6/Wp9W2wE4\"" ,
2026-01-27 16:02:45 +03:30
"mtime" : "2026-01-27T12:04:02.123Z" ,
2025-07-23 16:57:31 +03:30
"size" : 27944 ,
2025-08-24 22:15:30 +03:30
"path" : "../public/_nuxt/IRANSansWeb_FaNum.BLA2CtIC.woff2"
2025-07-23 16:57:31 +03:30
},
2025-08-24 22:15:30 +03:30
"/_nuxt/IRANSansWeb_FaNum_Black.BFAfOkt4.woff2" : {
2025-07-23 16:57:31 +03:30
"type" : "font/woff2" ,
"etag" : "\"64b0-HsX/CIG11T5k32Pl6NhLJvroFIQ\"" ,
2026-01-27 16:02:45 +03:30
"mtime" : "2026-01-27T12:04:02.123Z" ,
2025-07-23 16:57:31 +03:30
"size" : 25776 ,
2025-08-24 22:15:30 +03:30
"path" : "../public/_nuxt/IRANSansWeb_FaNum_Black.BFAfOkt4.woff2"
2025-07-23 16:57:31 +03:30
},
2025-08-24 22:15:30 +03:30
"/_nuxt/IRANSansWeb_FaNum_Bold.C8urhp07.woff2" : {
2025-07-23 16:57:31 +03:30
"type" : "font/woff2" ,
"etag" : "\"6ab4-G8S3CXdFmh+Mk2th3Gy2+bcAPQQ\"" ,
2026-01-27 16:02:45 +03:30
"mtime" : "2026-01-27T12:04:02.123Z" ,
2025-07-23 16:57:31 +03:30
"size" : 27316 ,
2025-08-24 22:15:30 +03:30
"path" : "../public/_nuxt/IRANSansWeb_FaNum_Bold.C8urhp07.woff2"
2025-07-23 16:57:31 +03:30
},
2025-08-24 22:15:30 +03:30
"/_nuxt/IRANSansWeb_FaNum_Light.B637MNLG.woff2" : {
2025-07-23 16:57:31 +03:30
"type" : "font/woff2" ,
"etag" : "\"6ef0-0ZuVZfSKf1HbzDmvdDZdESRzFOs\"" ,
2026-01-27 16:02:45 +03:30
"mtime" : "2026-01-27T12:04:02.124Z" ,
2025-07-23 16:57:31 +03:30
"size" : 28400 ,
2025-08-24 22:15:30 +03:30
"path" : "../public/_nuxt/IRANSansWeb_FaNum_Light.B637MNLG.woff2"
2025-07-23 16:57:31 +03:30
},
2025-08-24 22:15:30 +03:30
"/_nuxt/IRANSansWeb_FaNum_Medium.C2CKjrKB.woff2" : {
2025-07-23 16:57:31 +03:30
"type" : "font/woff2" ,
"etag" : "\"64b8-6V1kQDm0NUXner/ubiM2u7MPIyY\"" ,
2026-01-27 16:02:45 +03:30
"mtime" : "2026-01-27T12:04:02.124Z" ,
2025-07-23 16:57:31 +03:30
"size" : 25784 ,
2025-08-24 22:15:30 +03:30
"path" : "../public/_nuxt/IRANSansWeb_FaNum_Medium.C2CKjrKB.woff2"
2025-07-23 16:57:31 +03:30
},
2025-08-24 22:15:30 +03:30
"/_nuxt/IRANSansWeb_FaNum_UltraLight.hW-WDKY9.woff2" : {
2025-07-23 16:57:31 +03:30
"type" : "font/woff2" ,
"etag" : "\"6e30-P6kpI7ovgRddffWzkv2xSmEYEnw\"" ,
2026-01-27 16:02:45 +03:30
"mtime" : "2026-01-27T12:04:02.124Z" ,
2025-07-23 16:57:31 +03:30
"size" : 28208 ,
2025-08-24 22:15:30 +03:30
"path" : "../public/_nuxt/IRANSansWeb_FaNum_UltraLight.hW-WDKY9.woff2"
2025-07-23 16:57:31 +03:30
},
2026-01-27 16:02:45 +03:30
"/_nuxt/IndexImageUploader.DpcjnqB-.css" : {
"type" : "text/css; charset=utf-8" ,
"etag" : "\"403-ew658FHfNjEVkBiQn54guD1lUY8\"" ,
"mtime" : "2026-01-27T12:04:02.124Z" ,
"size" : 1027 ,
"path" : "../public/_nuxt/IndexImageUploader.DpcjnqB-.css"
2025-08-17 20:26:15 +03:30
},
2026-01-27 16:02:45 +03:30
"/_nuxt/InstaInput.CKJcpevC.css" : {
"type" : "text/css; charset=utf-8" ,
"etag" : "\"2c9-ejPNKqQSUBeHslcjZGmzzhN5AL8\"" ,
"mtime" : "2026-01-27T12:04:02.124Z" ,
"size" : 713 ,
"path" : "../public/_nuxt/InstaInput.CKJcpevC.css"
2025-08-25 15:52:41 +03:30
},
2026-01-27 16:02:45 +03:30
"/_nuxt/InstagramSans-Regular.lx8vagd-.woff2" : {
"type" : "font/woff2" ,
"etag" : "\"6624-dfDOBaMvn8M5btrBG7KeVQ/PsSM\"" ,
"mtime" : "2026-01-27T12:04:02.124Z" ,
"size" : 26148 ,
"path" : "../public/_nuxt/InstagramSans-Regular.lx8vagd-.woff2"
2025-08-25 15:52:41 +03:30
},
2026-01-27 16:02:45 +03:30
"/_nuxt/KBq5z4mn.js" : {
2025-08-25 15:52:41 +03:30
"type" : "text/javascript; charset=utf-8" ,
2026-01-27 16:02:45 +03:30
"etag" : "\"6d5-yj9qkcqbICWLZDVKCnS8kzDUN3I\"" ,
"mtime" : "2026-01-27T12:04:02.124Z" ,
"size" : 1749 ,
"path" : "../public/_nuxt/KBq5z4mn.js"
2025-07-23 16:57:31 +03:30
},
2026-01-27 16:02:45 +03:30
"/_nuxt/MSwc40Et.js" : {
"type" : "text/javascript; charset=utf-8" ,
"etag" : "\"240-pSKiH9yJM4UHZEIzl1n+VmDUpEs\"" ,
"mtime" : "2026-01-27T12:04:02.124Z" ,
"size" : 576 ,
"path" : "../public/_nuxt/MSwc40Et.js"
},
"/_nuxt/ONZBPW5n.js" : {
"type" : "text/javascript; charset=utf-8" ,
"etag" : "\"26a-+jBqUNvv2czyP9huH6h/LmmZtv4\"" ,
"mtime" : "2026-01-27T12:04:02.124Z" ,
"size" : 618 ,
"path" : "../public/_nuxt/ONZBPW5n.js"
},
"/_nuxt/OrbYBZJs.js" : {
"type" : "text/javascript; charset=utf-8" ,
"etag" : "\"1810-Go/gmWAo1/tTK4ficymvAuDzOa8\"" ,
"mtime" : "2026-01-27T12:04:02.124Z" ,
"size" : 6160 ,
"path" : "../public/_nuxt/OrbYBZJs.js"
},
"/_nuxt/OrderDetail.DmLQfC-y.css" : {
"type" : "text/css; charset=utf-8" ,
"etag" : "\"da-U8MIeVPd1Z/ya8vzw0BPBLBi5lE\"" ,
"mtime" : "2026-01-27T12:04:02.125Z" ,
"size" : 218 ,
"path" : "../public/_nuxt/OrderDetail.DmLQfC-y.css"
},
"/_nuxt/OwD4490s.js" : {
"type" : "text/javascript; charset=utf-8" ,
"etag" : "\"ec7-1sUQ9XSBau39ZtvwDrl6rGPvHhg\"" ,
"mtime" : "2026-01-27T12:04:02.125Z" ,
"size" : 3783 ,
"path" : "../public/_nuxt/OwD4490s.js"
},
"/_nuxt/PPhiVNr-.js" : {
"type" : "text/javascript; charset=utf-8" ,
"etag" : "\"5af-DkI69Ll/hBYk6hfL49N/mw9ssXw\"" ,
"mtime" : "2026-01-27T12:04:02.125Z" ,
"size" : 1455 ,
"path" : "../public/_nuxt/PPhiVNr-.js"
},
"/_nuxt/P__iwmVr.js" : {
"type" : "text/javascript; charset=utf-8" ,
"etag" : "\"10cc-H/EKhn+LCpbjjCIeKU7OLqVaVGs\"" ,
"mtime" : "2026-01-27T12:04:02.125Z" ,
"size" : 4300 ,
"path" : "../public/_nuxt/P__iwmVr.js"
},
"/_nuxt/Pl2zQqcN.js" : {
"type" : "text/javascript; charset=utf-8" ,
"etag" : "\"753-g7uti/XcVEt4thngzemZ88iF7n4\"" ,
"mtime" : "2026-01-27T12:04:02.125Z" ,
"size" : 1875 ,
"path" : "../public/_nuxt/Pl2zQqcN.js"
},
"/_nuxt/PostCardSkeleton.DUP1THnB.css" : {
"type" : "text/css; charset=utf-8" ,
"etag" : "\"118-xbaVvqFJTyCt4PBCKTzbBvfWXY4\"" ,
"mtime" : "2026-01-27T12:04:02.125Z" ,
"size" : 280 ,
"path" : "../public/_nuxt/PostCardSkeleton.DUP1THnB.css"
},
"/_nuxt/ProductSearchList.CBryqxih.css" : {
"type" : "text/css; charset=utf-8" ,
"etag" : "\"1d5-r4s0eYcz6HRAyZjcgHsXDVNy0io\"" ,
"mtime" : "2026-01-27T12:04:02.125Z" ,
"size" : 469 ,
"path" : "../public/_nuxt/ProductSearchList.CBryqxih.css"
},
"/_nuxt/ProfilePictureEditor.Bt0HlTI-.css" : {
"type" : "text/css; charset=utf-8" ,
"etag" : "\"1ea-C8v0tA2nLtBEo1irhyrG7YVc8TY\"" ,
"mtime" : "2026-01-27T12:04:02.125Z" ,
"size" : 490 ,
"path" : "../public/_nuxt/ProfilePictureEditor.Bt0HlTI-.css"
},
"/_nuxt/Q97Vio13.js" : {
"type" : "text/javascript; charset=utf-8" ,
"etag" : "\"536-pj2fKcR/J+WBQTI1evU3BbPUlOc\"" ,
"mtime" : "2026-01-27T12:04:02.125Z" ,
"size" : 1334 ,
"path" : "../public/_nuxt/Q97Vio13.js"
},
"/_nuxt/QyMw0Sp1.js" : {
"type" : "text/javascript; charset=utf-8" ,
"etag" : "\"1c29-9DFXhjHf99WgDNbVV1ujvbdgd8o\"" ,
"mtime" : "2026-01-27T12:04:02.125Z" ,
"size" : 7209 ,
"path" : "../public/_nuxt/QyMw0Sp1.js"
},
"/_nuxt/RatLGbB5.js" : {
"type" : "text/javascript; charset=utf-8" ,
"etag" : "\"224-fuMhBlONzGSBjzS7547K1FGN6Oo\"" ,
"mtime" : "2026-01-27T12:04:02.125Z" ,
"size" : 548 ,
"path" : "../public/_nuxt/RatLGbB5.js"
},
"/_nuxt/Rshl30Eo.js" : {
"type" : "text/javascript; charset=utf-8" ,
"etag" : "\"18e-tALhf+mfTcLYtl/8RZUS9BQiN7s\"" ,
"mtime" : "2026-01-27T12:04:02.125Z" ,
"size" : 398 ,
"path" : "../public/_nuxt/Rshl30Eo.js"
},
"/_nuxt/ScpmmaE4.js" : {
"type" : "text/javascript; charset=utf-8" ,
"etag" : "\"d68-ZtrW9K+bCv7To9cT9UASOsbdGpw\"" ,
"mtime" : "2026-01-27T12:04:02.126Z" ,
"size" : 3432 ,
"path" : "../public/_nuxt/ScpmmaE4.js"
},
"/_nuxt/SolGyfyY.js" : {
"type" : "text/javascript; charset=utf-8" ,
"etag" : "\"a5f-HNKuGPqQr17MHjFekxfJrLmszF0\"" ,
"mtime" : "2026-01-27T12:04:02.126Z" ,
"size" : 2655 ,
"path" : "../public/_nuxt/SolGyfyY.js"
},
"/_nuxt/StepNumber.DZuSkTLD.css" : {
"type" : "text/css; charset=utf-8" ,
"etag" : "\"37-nJ8da78bmS2Xvwa5IB9uwrgEQAw\"" ,
"mtime" : "2026-01-27T12:04:02.126Z" ,
"size" : 55 ,
"path" : "../public/_nuxt/StepNumber.DZuSkTLD.css"
},
"/_nuxt/UserProfilePic.CvlRpmYy.css" : {
"type" : "text/css; charset=utf-8" ,
"etag" : "\"23d-IHH/HFl/tT50/7UpMiOp0y3Tc0k\"" ,
"mtime" : "2026-01-27T12:04:02.126Z" ,
"size" : 573 ,
"path" : "../public/_nuxt/UserProfilePic.CvlRpmYy.css"
},
"/_nuxt/Uu20VyED.js" : {
"type" : "text/javascript; charset=utf-8" ,
"etag" : "\"51a8a-ymrv2i4MyL41x3a6kYLUj8Hmmiw\"" ,
"mtime" : "2026-01-27T12:04:02.127Z" ,
"size" : 334474 ,
"path" : "../public/_nuxt/Uu20VyED.js"
},
"/_nuxt/WIqHd_7j.js" : {
"type" : "text/javascript; charset=utf-8" ,
"etag" : "\"67e-jzlGRL969EwgP7/lRDOTfC4l4ks\"" ,
"mtime" : "2026-01-27T12:04:02.126Z" ,
"size" : 1662 ,
"path" : "../public/_nuxt/WIqHd_7j.js"
},
"/_nuxt/XRR38INJ.js" : {
"type" : "text/javascript; charset=utf-8" ,
"etag" : "\"2904-3RKWL379oI91LT0WP5Me1Da/Ofs\"" ,
"mtime" : "2026-01-27T12:04:02.126Z" ,
"size" : 10500 ,
"path" : "../public/_nuxt/XRR38INJ.js"
},
"/_nuxt/XsaR7Qnn.js" : {
"type" : "text/javascript; charset=utf-8" ,
"etag" : "\"127c-xpp2FfPRAlVxtzkVCBNLwa3PHWw\"" ,
"mtime" : "2026-01-27T12:04:02.126Z" ,
"size" : 4732 ,
"path" : "../public/_nuxt/XsaR7Qnn.js"
},
"/_nuxt/XvbPR14r.js" : {
"type" : "text/javascript; charset=utf-8" ,
"etag" : "\"54bf-V7OyY+5fByNztUiG4RjPgiDeJCE\"" ,
"mtime" : "2026-01-27T12:04:02.127Z" ,
"size" : 21695 ,
"path" : "../public/_nuxt/XvbPR14r.js"
},
"/_nuxt/Y4Uc45PN.js" : {
"type" : "text/javascript; charset=utf-8" ,
"etag" : "\"2e8-4iAHcraS/4hNy2tlR7BZYS7mEzU\"" ,
"mtime" : "2026-01-27T12:04:02.127Z" ,
"size" : 744 ,
"path" : "../public/_nuxt/Y4Uc45PN.js"
},
"/_nuxt/YUm_jrvp.js" : {
"type" : "text/javascript; charset=utf-8" ,
"etag" : "\"415-dX2ciN4QNgxsZYkPSueaMCVwKoY\"" ,
"mtime" : "2026-01-27T12:04:02.127Z" ,
"size" : 1045 ,
"path" : "../public/_nuxt/YUm_jrvp.js"
},
"/_nuxt/ZzUti8KV.js" : {
"type" : "text/javascript; charset=utf-8" ,
"etag" : "\"51b-ky3+XqPBA5z0uWOuhoLUi4UQAjc\"" ,
"mtime" : "2026-01-27T12:04:02.127Z" ,
"size" : 1307 ,
"path" : "../public/_nuxt/ZzUti8KV.js"
},
"/_nuxt/_OSaw0MT.js" : {
"type" : "text/javascript; charset=utf-8" ,
"etag" : "\"f361d-0yUTjt/Y6YWNC5u5c4YehK+ksLo\"" ,
"mtime" : "2026-01-27T12:04:02.131Z" ,
"size" : 996893 ,
"path" : "../public/_nuxt/_OSaw0MT.js"
},
"/_nuxt/_iPNLlmk.js" : {
"type" : "text/javascript; charset=utf-8" ,
"etag" : "\"399-b/UxUWbeu61zU2BwiiMV6R3wWCg\"" ,
"mtime" : "2026-01-27T12:04:02.127Z" ,
"size" : 921 ,
"path" : "../public/_nuxt/_iPNLlmk.js"
},
"/_nuxt/_id_.BhPp45mc.css" : {
"type" : "text/css; charset=utf-8" ,
"etag" : "\"575-+Dk8naAyunbf7iS8G7t6VvO9LR0\"" ,
"mtime" : "2026-01-27T12:04:02.128Z" ,
"size" : 1397 ,
"path" : "../public/_nuxt/_id_.BhPp45mc.css"
},
"/_nuxt/_id_.D0g0-kXs.css" : {
"type" : "text/css; charset=utf-8" ,
"etag" : "\"21f4-PcxLmd0mU3TFVL6YN3SiVyhBqgg\"" ,
"mtime" : "2026-01-27T12:04:02.128Z" ,
"size" : 8692 ,
"path" : "../public/_nuxt/_id_.D0g0-kXs.css"
},
"/_nuxt/_id_.DZwRw4ht.css" : {
"type" : "text/css; charset=utf-8" ,
"etag" : "\"49-GsWJ0jWsD/Xzq43Ni998bhtnuMc\"" ,
"mtime" : "2026-01-27T12:04:02.128Z" ,
"size" : 73 ,
"path" : "../public/_nuxt/_id_.DZwRw4ht.css"
},
"/_nuxt/add_address.CLIjEQ3m.svg" : {
"type" : "image/svg+xml" ,
"etag" : "\"2065-TVdj+08mJDsEeCQ49Y5y2mTQsRI\"" ,
"mtime" : "2026-01-27T12:04:02.128Z" ,
"size" : 8293 ,
"path" : "../public/_nuxt/add_address.CLIjEQ3m.svg"
},
"/_nuxt/b4XmZQIy.js" : {
"type" : "text/javascript; charset=utf-8" ,
"etag" : "\"11e-viK19prGKHVy8iuW7/EWqRTuYvA\"" ,
"mtime" : "2026-01-27T12:04:02.128Z" ,
"size" : 286 ,
"path" : "../public/_nuxt/b4XmZQIy.js"
},
"/_nuxt/bS5OEfKx.js" : {
"type" : "text/javascript; charset=utf-8" ,
"etag" : "\"177a-SiFnwxRGH9v/VkvAVLtvICaK5dE\"" ,
"mtime" : "2026-01-27T12:04:02.129Z" ,
"size" : 6010 ,
"path" : "../public/_nuxt/bS5OEfKx.js"
},
"/_nuxt/bz4Gi-i8.js" : {
"type" : "text/javascript; charset=utf-8" ,
"etag" : "\"10b-ZnaMRGMT2oqyt4ZBVF3WKrAPAGs\"" ,
"mtime" : "2026-01-27T12:04:02.129Z" ,
"size" : 267 ,
"path" : "../public/_nuxt/bz4Gi-i8.js"
},
"/_nuxt/default.BbVhhp66.css" : {
"type" : "text/css; charset=utf-8" ,
"etag" : "\"8a-TAGyXjvyGDgO4gzA79ozJXUeZXI\"" ,
"mtime" : "2026-01-27T12:04:02.128Z" ,
"size" : 138 ,
"path" : "../public/_nuxt/default.BbVhhp66.css"
},
"/_nuxt/delivery-box-light.Cz31HXNr.svg" : {
"type" : "image/svg+xml" ,
"etag" : "\"676e-3Tw1qfPK/WIVExF3llg/zigQuxk\"" ,
"mtime" : "2026-01-27T12:04:02.129Z" ,
"size" : 26478 ,
"path" : "../public/_nuxt/delivery-box-light.Cz31HXNr.svg"
},
"/_nuxt/delivery-box.DZAXZSja.svg" : {
"type" : "image/svg+xml" ,
"etag" : "\"51fe-9IJQ/qOXlPUqwsjKQoJjxa0zfSg\"" ,
"mtime" : "2026-01-27T12:04:02.129Z" ,
"size" : 20990 ,
"path" : "../public/_nuxt/delivery-box.DZAXZSja.svg"
},
"/_nuxt/detail_message.3FMAeztm.css" : {
"type" : "text/css; charset=utf-8" ,
"etag" : "\"96d-keUAZf+0YtPzsABDw+xhSXOVZYg\"" ,
"mtime" : "2026-01-27T12:04:02.129Z" ,
"size" : 2413 ,
"path" : "../public/_nuxt/detail_message.3FMAeztm.css"
},
"/_nuxt/empty_cart.BKAjJ1Mc.svg" : {
"type" : "image/svg+xml" ,
"etag" : "\"3e0b-CktqEVC9ZroTtLTMTnVXgYkoRTk\"" ,
"mtime" : "2026-01-27T12:04:02.130Z" ,
"size" : 15883 ,
"path" : "../public/_nuxt/empty_cart.BKAjJ1Mc.svg"
},
"/_nuxt/empty_order.g7yXtwjI.svg" : {
"type" : "image/svg+xml" ,
"etag" : "\"2574-0+6dEvB63OskqwRjndg7bt/S4gY\"" ,
"mtime" : "2026-01-27T12:04:02.130Z" ,
"size" : 9588 ,
"path" : "../public/_nuxt/empty_order.g7yXtwjI.svg"
},
"/_nuxt/empty_user.DjvjY29X.png" : {
2025-08-17 20:26:15 +03:30
"type" : "image/png" ,
2026-01-27 16:02:45 +03:30
"etag" : "\"4d9c-hpW+u7lVdESYj2N+T9ep3yfsTFI\"" ,
"mtime" : "2026-01-27T12:04:02.131Z" ,
"size" : 19868 ,
"path" : "../public/_nuxt/empty_user.DjvjY29X.png"
},
"/_nuxt/entry.BWMwGJC-.css" : {
"type" : "text/css; charset=utf-8" ,
"etag" : "\"d837-nAlfh8HyDiN4stylkasTdzVD5X4\"" ,
"mtime" : "2026-01-27T12:04:02.130Z" ,
"size" : 55351 ,
"path" : "../public/_nuxt/entry.BWMwGJC-.css"
},
"/_nuxt/erGvakZB.js" : {
"type" : "text/javascript; charset=utf-8" ,
"etag" : "\"192e-WqpSBp9eWjX9UgJonYI2nGM5Thw\"" ,
"mtime" : "2026-01-27T12:04:02.130Z" ,
"size" : 6446 ,
"path" : "../public/_nuxt/erGvakZB.js"
},
"/_nuxt/error-404.2GhCpCfF.css" : {
"type" : "text/css; charset=utf-8" ,
"etag" : "\"97e-rj7LYDldeiZzQ/rAgQHuKm4R4CM\"" ,
"mtime" : "2026-01-27T12:04:02.131Z" ,
"size" : 2430 ,
"path" : "../public/_nuxt/error-404.2GhCpCfF.css"
},
"/_nuxt/error-500.DqdIhFrl.css" : {
"type" : "text/css; charset=utf-8" ,
"etag" : "\"773-5c6J9Uy3GU9ENVOfwDGwZL5dQKk\"" ,
"mtime" : "2026-01-27T12:04:02.131Z" ,
"size" : 1907 ,
"path" : "../public/_nuxt/error-500.DqdIhFrl.css"
},
"/_nuxt/f-pkBeXf.js" : {
"type" : "text/javascript; charset=utf-8" ,
"etag" : "\"291-C43fiogohGn+EBCerQfAimKIPUU\"" ,
"mtime" : "2026-01-27T12:04:02.131Z" ,
"size" : 657 ,
"path" : "../public/_nuxt/f-pkBeXf.js"
},
"/_nuxt/gdkE0H3i.js" : {
"type" : "text/javascript; charset=utf-8" ,
"etag" : "\"24f-Ty2T3H4h/s5/cn03sgIU7xkXJVU\"" ,
"mtime" : "2026-01-27T12:04:02.131Z" ,
"size" : 591 ,
"path" : "../public/_nuxt/gdkE0H3i.js"
},
"/_nuxt/gray.CKu3bSoY.jpg" : {
"type" : "image/jpeg" ,
"etag" : "\"fcb0-EQD5R6cQi3Ex/MO/IOwpFRl5dHo\"" ,
"mtime" : "2026-01-27T12:04:02.131Z" ,
"size" : 64688 ,
"path" : "../public/_nuxt/gray.CKu3bSoY.jpg"
},
"/_nuxt/he0AQ5zD.js" : {
"type" : "text/javascript; charset=utf-8" ,
"etag" : "\"fd2-NuxfSyw9SiDZRyHvGUd28kgu/aM\"" ,
"mtime" : "2026-01-27T12:04:02.131Z" ,
"size" : 4050 ,
"path" : "../public/_nuxt/he0AQ5zD.js"
},
"/_nuxt/iVqVBBR5.js" : {
"type" : "text/javascript; charset=utf-8" ,
"etag" : "\"b08-/SpyHKug6oQMBtF4kDvITIpyAQo\"" ,
"mtime" : "2026-01-27T12:04:02.131Z" ,
"size" : 2824 ,
"path" : "../public/_nuxt/iVqVBBR5.js"
},
"/_nuxt/iccRLuv1.js" : {
"type" : "text/javascript; charset=utf-8" ,
"etag" : "\"20df-djS0/04+30yzU/DMvpnwpJ+fNvc\"" ,
"mtime" : "2026-01-27T12:04:02.132Z" ,
"size" : 8415 ,
"path" : "../public/_nuxt/iccRLuv1.js"
},
"/_nuxt/index.3vTMV84N.css" : {
"type" : "text/css; charset=utf-8" ,
"etag" : "\"a4-XKdrjG2mCp2qzrnNclkIKCYjwNw\"" ,
"mtime" : "2026-01-27T12:04:02.132Z" ,
"size" : 164 ,
"path" : "../public/_nuxt/index.3vTMV84N.css"
},
"/_nuxt/index.BYVlaXPg.css" : {
"type" : "text/css; charset=utf-8" ,
"etag" : "\"d73-AYJudlo71gOuedeBJt97ovXIvks\"" ,
"mtime" : "2026-01-27T12:04:02.132Z" ,
"size" : 3443 ,
"path" : "../public/_nuxt/index.BYVlaXPg.css"
},
"/_nuxt/index.Bf6H-IES.css" : {
"type" : "text/css; charset=utf-8" ,
"etag" : "\"cb-hc+zRbUuPyqV4iMHMn3Isk7m6ew\"" ,
"mtime" : "2026-01-27T12:04:02.131Z" ,
"size" : 203 ,
"path" : "../public/_nuxt/index.Bf6H-IES.css"
},
"/_nuxt/index.BftfFzRd.css" : {
"type" : "text/css; charset=utf-8" ,
"etag" : "\"d0ea-QCOHhhIlw0r4yg5vP/zb0a1sygU\"" ,
"mtime" : "2026-01-27T12:04:02.132Z" ,
"size" : 53482 ,
"path" : "../public/_nuxt/index.BftfFzRd.css"
},
"/_nuxt/index.Bhk60kEQ.css" : {
"type" : "text/css; charset=utf-8" ,
"etag" : "\"23a-MjnTKrmZk0M5HpVkKaM6uj/c0h4\"" ,
"mtime" : "2026-01-27T12:04:02.132Z" ,
"size" : 570 ,
"path" : "../public/_nuxt/index.Bhk60kEQ.css"
},
"/_nuxt/index.Bmikpipo.css" : {
"type" : "text/css; charset=utf-8" ,
"etag" : "\"2a5-ya0JFtZ380bJzamVNGGZz1kgtmo\"" ,
"mtime" : "2026-01-27T12:04:02.132Z" ,
"size" : 677 ,
"path" : "../public/_nuxt/index.Bmikpipo.css"
},
"/_nuxt/index.C4gGGvAh.css" : {
"type" : "text/css; charset=utf-8" ,
"etag" : "\"1e46-py/5Lz157qiP3Ji4YEGBactrUXQ\"" ,
"mtime" : "2026-01-27T12:04:02.132Z" ,
"size" : 7750 ,
"path" : "../public/_nuxt/index.C4gGGvAh.css"
},
"/_nuxt/index.C7yq570K.css" : {
"type" : "text/css; charset=utf-8" ,
"etag" : "\"1af-UScl+PImfMWLKfofBWLMnG1UWSQ\"" ,
"mtime" : "2026-01-27T12:04:02.132Z" ,
"size" : 431 ,
"path" : "../public/_nuxt/index.C7yq570K.css"
},
"/_nuxt/index.CIr5VxXz.css" : {
"type" : "text/css; charset=utf-8" ,
"etag" : "\"446-nwtTUuTIE1hqF9olT1/qqglO8h8\"" ,
"mtime" : "2026-01-27T12:04:02.132Z" ,
"size" : 1094 ,
"path" : "../public/_nuxt/index.CIr5VxXz.css"
},
"/_nuxt/index.CKnq7F2I.css" : {
"type" : "text/css; charset=utf-8" ,
"etag" : "\"41a-JIbWSZRhCQfDcvuVYJHyOcVvR1A\"" ,
"mtime" : "2026-01-27T12:04:02.132Z" ,
"size" : 1050 ,
"path" : "../public/_nuxt/index.CKnq7F2I.css"
},
"/_nuxt/index.CNHi-7Ke.css" : {
"type" : "text/css; charset=utf-8" ,
"etag" : "\"1c6-SJGEax1Jeeb5utTFp8zlYgTipcU\"" ,
"mtime" : "2026-01-27T12:04:02.133Z" ,
"size" : 454 ,
"path" : "../public/_nuxt/index.CNHi-7Ke.css"
},
"/_nuxt/index.CW9Q0sCE.css" : {
"type" : "text/css; charset=utf-8" ,
"etag" : "\"215-yVQe2cDI8jVVvpEA7fMqXje0xUY\"" ,
"mtime" : "2026-01-27T12:04:02.133Z" ,
"size" : 533 ,
"path" : "../public/_nuxt/index.CW9Q0sCE.css"
},
"/_nuxt/index.CYd4lFjv.css" : {
"type" : "text/css; charset=utf-8" ,
"etag" : "\"727-aVx3TRYUMb6hcs7R0Cj+emOwE3M\"" ,
"mtime" : "2026-01-27T12:04:02.133Z" ,
"size" : 1831 ,
"path" : "../public/_nuxt/index.CYd4lFjv.css"
},
"/_nuxt/index.Cc-rnC0q.css" : {
"type" : "text/css; charset=utf-8" ,
"etag" : "\"92-wFGA9+fsnp31w792jq+jXgfRKaA\"" ,
"mtime" : "2026-01-27T12:04:02.133Z" ,
"size" : 146 ,
"path" : "../public/_nuxt/index.Cc-rnC0q.css"
},
"/_nuxt/index.CckDcqDG.css" : {
"type" : "text/css; charset=utf-8" ,
"etag" : "\"708-W5BBZgbOl1yHR+wz/s3bqNczB4Q\"" ,
"mtime" : "2026-01-27T12:04:02.133Z" ,
"size" : 1800 ,
"path" : "../public/_nuxt/index.CckDcqDG.css"
},
"/_nuxt/index.CitrVgdW.css" : {
"type" : "text/css; charset=utf-8" ,
"etag" : "\"404-xjqkmZV3hwaPNlWv0CTUSUTHWVw\"" ,
"mtime" : "2026-01-27T12:04:02.133Z" ,
"size" : 1028 ,
"path" : "../public/_nuxt/index.CitrVgdW.css"
},
"/_nuxt/index.CokH8qEU.css" : {
"type" : "text/css; charset=utf-8" ,
"etag" : "\"de-ej7ZhRNjm8PEFOyjGPe7kkgVFnA\"" ,
"mtime" : "2026-01-27T12:04:02.133Z" ,
"size" : 222 ,
"path" : "../public/_nuxt/index.CokH8qEU.css"
},
"/_nuxt/index.D0zs6jhd.css" : {
"type" : "text/css; charset=utf-8" ,
"etag" : "\"28e-fvaM3o3d2QZrM1u+cnAkqdgTZTI\"" ,
"mtime" : "2026-01-27T12:04:02.133Z" ,
"size" : 654 ,
"path" : "../public/_nuxt/index.D0zs6jhd.css"
},
"/_nuxt/index.DAwdkd-s.css" : {
"type" : "text/css; charset=utf-8" ,
"etag" : "\"123-m5LdvZB6bq8PDe2MI4plItqYznY\"" ,
"mtime" : "2026-01-27T12:04:02.133Z" ,
"size" : 291 ,
"path" : "../public/_nuxt/index.DAwdkd-s.css"
},
"/_nuxt/index.DQQ6m8Ab.css" : {
"type" : "text/css; charset=utf-8" ,
"etag" : "\"ce-3PTPua5egVEFh1F2iLGaTfShWqU\"" ,
"mtime" : "2026-01-27T12:04:02.133Z" ,
"size" : 206 ,
"path" : "../public/_nuxt/index.DQQ6m8Ab.css"
},
"/_nuxt/index.DUwLxYAC.css" : {
"type" : "text/css; charset=utf-8" ,
"etag" : "\"54-ji1TUlO1AHWrE9aqMgYj5gkZIEo\"" ,
"mtime" : "2026-01-27T12:04:02.133Z" ,
"size" : 84 ,
"path" : "../public/_nuxt/index.DUwLxYAC.css"
},
"/_nuxt/index.Jbtftdv_.css" : {
"type" : "text/css; charset=utf-8" ,
"etag" : "\"5e-s24QML0UUPYKdyiO8luahvSfzd4\"" ,
"mtime" : "2026-01-27T12:04:02.133Z" ,
"size" : 94 ,
"path" : "../public/_nuxt/index.Jbtftdv_.css"
},
"/_nuxt/index.UdfyQ5iD.css" : {
"type" : "text/css; charset=utf-8" ,
"etag" : "\"1ee-J2xVkXSiOpr+pIwMEdq7Ba254RQ\"" ,
"mtime" : "2026-01-27T12:04:02.134Z" ,
"size" : 494 ,
"path" : "../public/_nuxt/index.UdfyQ5iD.css"
},
"/_nuxt/index.aL-dNlg2.css" : {
"type" : "text/css; charset=utf-8" ,
"etag" : "\"21e-jrShrpy6niE6ssN1287QO5t3Fyk\"" ,
"mtime" : "2026-01-27T12:04:02.134Z" ,
"size" : 542 ,
"path" : "../public/_nuxt/index.aL-dNlg2.css"
},
"/_nuxt/index.cPbiCMXj.css" : {
"type" : "text/css; charset=utf-8" ,
"etag" : "\"33c-y2fiQDHt8eB1GN9EkVzJw5PMNrM\"" ,
"mtime" : "2026-01-27T12:04:02.134Z" ,
"size" : 828 ,
"path" : "../public/_nuxt/index.cPbiCMXj.css"
},
"/_nuxt/index.hcAz5dBv.css" : {
"type" : "text/css; charset=utf-8" ,
"etag" : "\"527-HxIeDsYvUPEAOtcd4wHQpy157bM\"" ,
"mtime" : "2026-01-27T12:04:02.134Z" ,
"size" : 1319 ,
"path" : "../public/_nuxt/index.hcAz5dBv.css"
},
"/_nuxt/index.pM9wTB4a.css" : {
"type" : "text/css; charset=utf-8" ,
"etag" : "\"298-Ik0pVmZrfEYslk8Uhk36qiUg97E\"" ,
"mtime" : "2026-01-27T12:04:02.134Z" ,
"size" : 664 ,
"path" : "../public/_nuxt/index.pM9wTB4a.css"
},
"/_nuxt/kjn9TGm9.js" : {
"type" : "text/javascript; charset=utf-8" ,
"etag" : "\"dc0-EQjmMhMT9m3dl9bEY8MOZvcdN60\"" ,
"mtime" : "2026-01-27T12:04:02.134Z" ,
"size" : 3520 ,
"path" : "../public/_nuxt/kjn9TGm9.js"
},
"/_nuxt/lDFIwPIu.js" : {
"type" : "text/javascript; charset=utf-8" ,
"etag" : "\"1728-aQ08m661hxkWa/MJ9uoC0rx++Tk\"" ,
"mtime" : "2026-01-27T12:04:02.134Z" ,
"size" : 5928 ,
"path" : "../public/_nuxt/lDFIwPIu.js"
2025-08-17 20:26:15 +03:30
},
2025-07-26 21:54:04 +03:30
"/_nuxt/logo_company.SCj7r8dk.svg" : {
2025-07-23 16:57:31 +03:30
"type" : "image/svg+xml" ,
2025-07-26 21:54:04 +03:30
"etag" : "\"15e4d-B9BOSKoOo+oh1z7xQROtge4/uCU\"" ,
2026-01-27 16:02:45 +03:30
"mtime" : "2026-01-27T12:04:02.134Z" ,
2025-07-26 21:54:04 +03:30
"size" : 89677 ,
"path" : "../public/_nuxt/logo_company.SCj7r8dk.svg"
2025-07-23 16:57:31 +03:30
},
"/_nuxt/logo_preview.B3D6jfxw.png" : {
"type" : "image/png" ,
"etag" : "\"d273-+/mQg6af8+4RSupBxM9LyZh/WPU\"" ,
2026-01-27 16:02:45 +03:30
"mtime" : "2026-01-27T12:04:02.134Z" ,
2025-07-23 16:57:31 +03:30
"size" : 53875 ,
"path" : "../public/_nuxt/logo_preview.B3D6jfxw.png"
},
2026-01-27 16:02:45 +03:30
"/_nuxt/m9aI9AXX.js" : {
2025-08-20 20:13:40 +03:30
"type" : "text/javascript; charset=utf-8" ,
2026-01-27 16:02:45 +03:30
"etag" : "\"2287-0fIiM7amwm4om+ruKguWIN9A97c\"" ,
"mtime" : "2026-01-27T12:04:02.135Z" ,
"size" : 8839 ,
"path" : "../public/_nuxt/m9aI9AXX.js"
2025-08-20 20:13:40 +03:30
},
2026-01-27 16:02:45 +03:30
"/_nuxt/mPGATRDV.js" : {
2025-08-20 20:13:40 +03:30
"type" : "text/javascript; charset=utf-8" ,
2026-01-27 16:02:45 +03:30
"etag" : "\"15b94-JfP6tsbmzA4eFfiFxwf4oX2yJIQ\"" ,
"mtime" : "2026-01-27T12:04:02.135Z" ,
"size" : 88980 ,
"path" : "../public/_nuxt/mPGATRDV.js"
2025-08-27 20:20:03 +03:30
},
2026-01-27 16:02:45 +03:30
"/_nuxt/moreOptionProduct.Cv4yblbJ.css" : {
2025-08-23 19:43:48 +03:30
"type" : "text/css; charset=utf-8" ,
2026-01-27 16:02:45 +03:30
"etag" : "\"291-YegEv2SVtbgrIMraKeZ1tkFdoUg\"" ,
"mtime" : "2026-01-27T12:04:02.135Z" ,
"size" : 657 ,
"path" : "../public/_nuxt/moreOptionProduct.Cv4yblbJ.css"
2025-08-27 20:20:03 +03:30
},
2025-07-23 16:57:31 +03:30
"/_nuxt/not_found.CbOIXISv.svg" : {
"type" : "image/svg+xml" ,
"etag" : "\"2ea4-KBnbqFZ1Yh8eIX22tmgUkbUdnCc\"" ,
2026-01-27 16:02:45 +03:30
"mtime" : "2026-01-27T12:04:02.135Z" ,
2025-07-23 16:57:31 +03:30
"size" : 11940 ,
"path" : "../public/_nuxt/not_found.CbOIXISv.svg"
},
2026-01-27 16:02:45 +03:30
"/_nuxt/numbro.DPJQrSl7.css" : {
2025-07-23 16:57:31 +03:30
"type" : "text/css; charset=utf-8" ,
2026-01-27 16:02:45 +03:30
"etag" : "\"12c-kXRFKaTkkv9jvIVxKdlNiKRNIK0\"" ,
"mtime" : "2026-01-27T12:04:02.135Z" ,
"size" : 300 ,
"path" : "../public/_nuxt/numbro.DPJQrSl7.css"
2025-08-19 21:38:30 +03:30
},
2026-01-27 16:02:45 +03:30
"/_nuxt/pFOmwm6m.js" : {
2025-08-27 20:20:03 +03:30
"type" : "text/javascript; charset=utf-8" ,
2026-01-27 16:02:45 +03:30
"etag" : "\"901-7j48CQN6k304AMLpkIbRXtCvRpc\"" ,
"mtime" : "2026-01-27T12:04:02.135Z" ,
"size" : 2305 ,
"path" : "../public/_nuxt/pFOmwm6m.js"
2025-08-27 20:20:03 +03:30
},
2025-08-19 21:38:30 +03:30
"/_nuxt/pagination.DioOUj-L.css" : {
"type" : "text/css; charset=utf-8" ,
"etag" : "\"1416-vgwseOLWAUNXTya00+gCh95xqjs\"" ,
2026-01-27 16:02:45 +03:30
"mtime" : "2026-01-27T12:04:02.135Z" ,
2025-08-19 21:38:30 +03:30
"size" : 5142 ,
"path" : "../public/_nuxt/pagination.DioOUj-L.css"
},
2026-01-27 16:02:45 +03:30
"/_nuxt/post_loading.BgRjgbp7.gif" : {
2025-07-23 16:57:31 +03:30
"type" : "image/gif" ,
2026-01-27 16:02:45 +03:30
"etag" : "\"3689-FvATV1lF6ffDybki9di2V3gm2VI\"" ,
"mtime" : "2026-01-27T12:04:02.135Z" ,
"size" : 13961 ,
"path" : "../public/_nuxt/post_loading.BgRjgbp7.gif"
2025-07-23 16:57:31 +03:30
},
2026-01-27 16:02:45 +03:30
"/_nuxt/qBOvXuao.js" : {
2025-07-23 16:57:31 +03:30
"type" : "text/javascript; charset=utf-8" ,
2026-01-27 16:02:45 +03:30
"etag" : "\"321-FRBmNVlX9R8VdtUblAFGWCGZxOA\"" ,
"mtime" : "2026-01-27T12:04:02.135Z" ,
"size" : 801 ,
"path" : "../public/_nuxt/qBOvXuao.js"
2025-08-18 18:29:28 +03:30
},
2026-01-27 16:02:45 +03:30
"/_nuxt/rN9loPv5.js" : {
2025-08-18 18:29:28 +03:30
"type" : "text/javascript; charset=utf-8" ,
2026-01-27 16:02:45 +03:30
"etag" : "\"29d-f8PvUXUv2Xm2U2qooC0w1Pyroes\"" ,
"mtime" : "2026-01-27T12:04:02.136Z" ,
"size" : 669 ,
"path" : "../public/_nuxt/rN9loPv5.js"
2025-08-18 18:29:28 +03:30
},
2026-01-27 16:02:45 +03:30
"/_nuxt/s--bdPoU.js" : {
2025-08-18 18:29:28 +03:30
"type" : "text/javascript; charset=utf-8" ,
2026-01-27 16:02:45 +03:30
"etag" : "\"499-kVb3a61ZZXobozkb246WE7+Vb0A\"" ,
"mtime" : "2026-01-27T12:04:02.136Z" ,
"size" : 1177 ,
"path" : "../public/_nuxt/s--bdPoU.js"
2025-08-25 21:57:52 +03:30
},
2026-01-27 16:02:45 +03:30
"/_nuxt/sFfhux-l.js" : {
2025-08-25 21:57:52 +03:30
"type" : "text/javascript; charset=utf-8" ,
2026-01-27 16:02:45 +03:30
"etag" : "\"f3-JL5CBu+T8JWA8bS3qTSCgn9Mvgw\"" ,
"mtime" : "2026-01-27T12:04:02.136Z" ,
"size" : 243 ,
"path" : "../public/_nuxt/sFfhux-l.js"
2025-07-23 16:57:31 +03:30
},
"/_nuxt/story_loading.Cuvmkir-.gif" : {
"type" : "image/gif" ,
"etag" : "\"1227-fzHMJ6bvwEf28PBBUI2L0HPEm6A\"" ,
2026-01-27 16:02:45 +03:30
"mtime" : "2026-01-27T12:04:02.136Z" ,
2025-07-23 16:57:31 +03:30
"size" : 4647 ,
"path" : "../public/_nuxt/story_loading.Cuvmkir-.gif"
},
2026-01-27 16:02:45 +03:30
"/_nuxt/style.Dw47-jjr.css" : {
"type" : "text/css; charset=utf-8" ,
"etag" : "\"10b7-5ze7F4JM7TtCZ9PTzrCB64ahZ8I\"" ,
"mtime" : "2026-01-27T12:04:02.136Z" ,
"size" : 4279 ,
"path" : "../public/_nuxt/style.Dw47-jjr.css"
},
"/_nuxt/suvZk42U.js" : {
"type" : "text/javascript; charset=utf-8" ,
"etag" : "\"512-Lf+87a40A5fQhdSNN3iEyQymS7c\"" ,
"mtime" : "2026-01-27T12:04:02.136Z" ,
"size" : 1298 ,
"path" : "../public/_nuxt/suvZk42U.js"
},
2025-08-19 21:38:30 +03:30
"/_nuxt/swiper.BiEk7v8n.css" : {
2025-07-23 16:57:31 +03:30
"type" : "text/css; charset=utf-8" ,
2025-08-19 21:38:30 +03:30
"etag" : "\"18f5-UrRqgs0lfK+yXFuK4S818a9l/W0\"" ,
2026-01-27 16:02:45 +03:30
"mtime" : "2026-01-27T12:04:02.136Z" ,
2025-08-19 21:38:30 +03:30
"size" : 6389 ,
"path" : "../public/_nuxt/swiper.BiEk7v8n.css"
2025-07-23 16:57:31 +03:30
},
2026-01-27 16:02:45 +03:30
"/_nuxt/unXo4E2b.js" : {
2025-07-23 16:57:31 +03:30
"type" : "text/javascript; charset=utf-8" ,
2026-01-27 16:02:45 +03:30
"etag" : "\"8e6-f0KKUxazwarL7jkMyllnx60S80o\"" ,
"mtime" : "2026-01-27T12:04:02.136Z" ,
"size" : 2278 ,
"path" : "../public/_nuxt/unXo4E2b.js"
2025-08-25 15:52:41 +03:30
},
2026-01-27 16:02:45 +03:30
"/_nuxt/wZ2ImbJD.js" : {
2025-08-25 15:52:41 +03:30
"type" : "text/javascript; charset=utf-8" ,
2026-01-27 16:02:45 +03:30
"etag" : "\"3eec5-+MRdmZ9cLcdxhJQTAfaXs3KP2Oc\"" ,
"mtime" : "2026-01-27T12:04:02.137Z" ,
"size" : 257733 ,
"path" : "../public/_nuxt/wZ2ImbJD.js"
2025-08-18 18:29:28 +03:30
},
2026-01-27 16:02:45 +03:30
"/_nuxt/yaI2rWWM.js" : {
2025-07-23 16:57:31 +03:30
"type" : "text/javascript; charset=utf-8" ,
2026-01-27 16:02:45 +03:30
"etag" : "\"a6-9h/C4lGOjWgiDNC+gEn7/HvRPm4\"" ,
"mtime" : "2026-01-27T12:04:02.136Z" ,
"size" : 166 ,
"path" : "../public/_nuxt/yaI2rWWM.js"
2025-07-24 21:13:13 +03:30
},
2026-01-27 16:02:45 +03:30
"/_nuxt/z3stQFmK.js" : {
2025-07-24 21:13:13 +03:30
"type" : "text/javascript; charset=utf-8" ,
2026-01-27 16:02:45 +03:30
"etag" : "\"808-cz1rpZ7ZP7mWbzyZd29t0MtTrfo\"" ,
"mtime" : "2026-01-27T12:04:02.137Z" ,
"size" : 2056 ,
"path" : "../public/_nuxt/z3stQFmK.js"
2025-08-25 21:57:52 +03:30
},
2026-01-27 16:02:45 +03:30
"/_nuxt/zLi_Sboz.js" : {
2025-08-25 21:57:52 +03:30
"type" : "text/javascript; charset=utf-8" ,
2026-01-27 16:02:45 +03:30
"etag" : "\"4df-y+nU+9wxAlpNhhQnLPePsH6RSQY\"" ,
"mtime" : "2026-01-27T12:04:02.137Z" ,
"size" : 1247 ,
"path" : "../public/_nuxt/zLi_Sboz.js"
2025-08-25 21:57:52 +03:30
},
2026-01-27 16:02:45 +03:30
"/_nuxt/zQHOducB.js" : {
2025-08-25 21:57:52 +03:30
"type" : "text/javascript; charset=utf-8" ,
2026-01-27 16:02:45 +03:30
"etag" : "\"1381-+XzYpp8hLov67CKJ1xa0trHNsqo\"" ,
"mtime" : "2026-01-27T12:04:02.137Z" ,
"size" : 4993 ,
"path" : "../public/_nuxt/zQHOducB.js"
2025-07-23 16:57:31 +03:30
},
"/_nuxt/builds/latest.json" : {
"type" : "application/json" ,
2026-01-27 16:02:45 +03:30
"etag" : "\"47-HeA8Cd9OlvgCEU1/GDgNgZAf5Jc\"" ,
"mtime" : "2026-01-27T12:04:02.044Z" ,
2025-07-23 16:57:31 +03:30
"size" : 71 ,
"path" : "../public/_nuxt/builds/latest.json"
},
2026-01-27 16:02:45 +03:30
"/_nuxt/builds/meta/8dd4ed53-6eb9-47a8-b893-4c386d0a34bf.json" : {
2025-07-23 16:57:31 +03:30
"type" : "application/json" ,
2026-01-27 16:02:45 +03:30
"etag" : "\"8b-zCTdoJTGF/RUzjHOztk84fPdAg4\"" ,
"mtime" : "2026-01-27T12:04:02.040Z" ,
2025-07-23 16:57:31 +03:30
"size" : 139 ,
2026-01-27 16:02:45 +03:30
"path" : "../public/_nuxt/builds/meta/8dd4ed53-6eb9-47a8-b893-4c386d0a34bf.json"
2025-07-23 16:57:31 +03:30
}
};
const _DRIVE_LETTER_START_RE = /^[A-Za-z]:\// ;
function normalizeWindowsPath ( input = "" ) {
if ( ! input ) {
return input ;
}
return input . replace ( /\\/g , "/" ). replace ( _DRIVE_LETTER_START_RE , ( r ) => r . toUpperCase ());
}
const _IS_ABSOLUTE_RE = /^[/\\](?![/\\])|^[/\\]{2}(?!\.)|^[A-Za-z]:[/\\]/ ;
const _DRIVE_LETTER_RE = /^[A-Za-z]:$/ ;
function cwd () {
if ( typeof process !== "undefined" && typeof process . cwd === "function" ) {
return process . cwd (). replace ( /\\/g , "/" );
}
return "/" ;
}
const resolve$1 = function (... arguments_ ) {
arguments_ = arguments_ . map (( argument ) => normalizeWindowsPath ( argument ));
let resolvedPath = "" ;
let resolvedAbsolute = false ;
for ( let index = arguments_ . length - 1 ; index >= - 1 && ! resolvedAbsolute ; index -- ) {
const path = index >= 0 ? arguments_ [ index ] : cwd ();
if ( ! path || path . length === 0 ) {
continue ;
}
resolvedPath = ` ${ path } / ${ resolvedPath } ` ;
resolvedAbsolute = isAbsolute ( path );
}
resolvedPath = normalizeString ( resolvedPath , ! resolvedAbsolute );
if ( resolvedAbsolute && ! isAbsolute ( resolvedPath )) {
return `/ ${ resolvedPath } ` ;
}
return resolvedPath . length > 0 ? resolvedPath : "." ;
};
function normalizeString ( path , allowAboveRoot ) {
let res = "" ;
let lastSegmentLength = 0 ;
let lastSlash = - 1 ;
let dots = 0 ;
let char = null ;
for ( let index = 0 ; index <= path . length ; ++ index ) {
if ( index < path . length ) {
char = path [ index ];
} else if ( char === "/" ) {
break ;
} else {
char = "/" ;
}
if ( char === "/" ) {
if ( lastSlash === index - 1 || dots === 1 ) ; else if ( dots === 2 ) {
if ( res . length < 2 || lastSegmentLength !== 2 || res [ res . length - 1 ] !== "." || res [ res . length - 2 ] !== "." ) {
if ( res . length > 2 ) {
const lastSlashIndex = res . lastIndexOf ( "/" );
if ( lastSlashIndex === - 1 ) {
res = "" ;
lastSegmentLength = 0 ;
} else {
res = res . slice ( 0 , lastSlashIndex );
lastSegmentLength = res . length - 1 - res . lastIndexOf ( "/" );
}
lastSlash = index ;
dots = 0 ;
continue ;
} else if ( res . length > 0 ) {
res = "" ;
lastSegmentLength = 0 ;
lastSlash = index ;
dots = 0 ;
continue ;
}
}
if ( allowAboveRoot ) {
res += res . length > 0 ? "/.." : ".." ;
lastSegmentLength = 2 ;
}
} else {
if ( res . length > 0 ) {
res += `/ ${ path . slice ( lastSlash + 1 , index ) } ` ;
} else {
res = path . slice ( lastSlash + 1 , index );
}
lastSegmentLength = index - lastSlash - 1 ;
}
lastSlash = index ;
dots = 0 ;
} else if ( char === "." && dots !== - 1 ) {
++ dots ;
} else {
dots = - 1 ;
}
}
return res ;
}
const isAbsolute = function ( p ) {
return _IS_ABSOLUTE_RE . test ( p );
};
const dirname = function ( p ) {
const segments = normalizeWindowsPath ( p ). replace ( /\/$/ , "" ). split ( "/" ). slice ( 0 , - 1 );
if ( segments . length === 1 && _DRIVE_LETTER_RE . test ( segments [ 0 ])) {
segments [ 0 ] += "/" ;
}
return segments . join ( "/" ) || ( isAbsolute ( p ) ? "/" : "." );
};
function readAsset ( id ) {
const serverDir = dirname ( fileURLToPath ( globalThis . _importMeta_ . url ));
return promises . readFile ( resolve$1 ( serverDir , assets [ id ]. path ))
}
const publicAssetBases = { "/_nuxt/builds/meta/" : { "maxAge" : 31536000 }, "/_nuxt/builds/" : { "maxAge" : 1 }, "/_nuxt/" : { "maxAge" : 31536000 }};
function isPublicAssetURL ( id = '' ) {
if ( assets [ id ]) {
return true
}
for ( const base in publicAssetBases ) {
if ( id . startsWith ( base )) { return true }
}
return false
}
function getAsset ( id ) {
return assets [ id ]
}
const METHODS = /* @__PURE__ */ new Set ([ "HEAD" , "GET" ]);
const EncodingMap = { gzip : ".gz" , br : ".br" };
2026-01-27 16:02:45 +03:30
const _ZmxIja = eventHandler (( event ) => {
2025-07-23 16:57:31 +03:30
if ( event . method && ! METHODS . has ( event . method )) {
return ;
}
let id = decodePath (
withLeadingSlash ( withoutTrailingSlash ( parseURL ( event . path ). pathname ))
);
let asset ;
const encodingHeader = String (
getRequestHeader ( event , "accept-encoding" ) || ""
);
const encodings = [
... encodingHeader . split ( "," ). map (( e ) => EncodingMap [ e . trim ()]). filter ( Boolean ). sort (),
""
];
if ( encodings . length > 1 ) {
appendResponseHeader ( event , "Vary" , "Accept-Encoding" );
}
for ( const encoding of encodings ) {
for ( const _id of [ id + encoding , joinURL ( id , "index.html" + encoding )]) {
const _asset = getAsset ( _id );
if ( _asset ) {
asset = _asset ;
id = _id ;
break ;
}
}
}
if ( ! asset ) {
if ( isPublicAssetURL ( id )) {
removeResponseHeader ( event , "Cache-Control" );
throw createError$1 ({ statusCode : 404 });
}
return ;
}
const ifNotMatch = getRequestHeader ( event , "if-none-match" ) === asset . etag ;
if ( ifNotMatch ) {
setResponseStatus ( event , 304 , "Not Modified" );
return "" ;
}
const ifModifiedSinceH = getRequestHeader ( event , "if-modified-since" );
const mtimeDate = new Date ( asset . mtime );
if ( ifModifiedSinceH && asset . mtime && new Date ( ifModifiedSinceH ) >= mtimeDate ) {
setResponseStatus ( event , 304 , "Not Modified" );
return "" ;
}
if ( asset . type && ! getResponseHeader ( event , "Content-Type" )) {
setResponseHeader ( event , "Content-Type" , asset . type );
}
if ( asset . etag && ! getResponseHeader ( event , "ETag" )) {
setResponseHeader ( event , "ETag" , asset . etag );
}
if ( asset . mtime && ! getResponseHeader ( event , "Last-Modified" )) {
setResponseHeader ( event , "Last-Modified" , mtimeDate . toUTCString ());
}
if ( asset . encoding && ! getResponseHeader ( event , "Content-Encoding" )) {
setResponseHeader ( event , "Content-Encoding" , asset . encoding );
}
if ( asset . size > 0 && ! getResponseHeader ( event , "Content-Length" )) {
setResponseHeader ( event , "Content-Length" , asset . size );
}
return readAsset ( id );
});
2026-01-27 16:02:45 +03:30
const _2iH1rY = defineEventHandler (( event ) => {
2025-08-09 21:39:49 +03:30
const ua = getHeader ( event , "user-agent" ) || "" ;
const bots = [ "googlebot" , "bingbot" , "yandex" , "duckduckbot" , "baiduspider" , "facebot" , "slurp" ];
const isBot = bots . some (( bot ) => ua . toLowerCase (). includes ( bot ));
event . context . isBot = isBot ;
});
2026-01-27 16:02:45 +03:30
const _SxA8c9 = defineEventHandler (() => {});
const r = Object . create ( null ), i = e => globalThis . process ? . env || globalThis . _importMeta_ . env || globalThis . Deno ? . env . toObject () || globalThis . __env__ || ( e ? r : globalThis ), o = new Proxy ( r ,{ get ( e , s ){ return i ()[ s ] ?? r [ s ]}, has ( e , s ){ const E = i (); return s in E || s in r }, set ( e , s , E ){ const B = i ( true ); return B [ s ] = E , true }, deleteProperty ( e , s ){ if ( ! s ) return false ; const E = i ( true ); return delete E [ s ], true }, ownKeys (){ const e = i ( true ); return Object . keys ( e )}}), t = typeof process < "u" && process . env && "production" || "" , f = [[ "APPVEYOR" ],[ "AWS_AMPLIFY" , "AWS_APP_ID" ,{ ci : true }],[ "AZURE_PIPELINES" , "SYSTEM_TEAMFOUNDATIONCOLLECTIONURI" ],[ "AZURE_STATIC" , "INPUT_AZURE_STATIC_WEB_APPS_API_TOKEN" ],[ "APPCIRCLE" , "AC_APPCIRCLE" ],[ "BAMBOO" , "bamboo_planKey" ],[ "BITBUCKET" , "BITBUCKET_COMMIT" ],[ "BITRISE" , "BITRISE_IO" ],[ "BUDDY" , "BUDDY_WORKSPACE_ID" ],[ "BUILDKITE" ],[ "CIRCLE" , "CIRCLECI" ],[ "CIRRUS" , "CIRRUS_CI" ],[ "CLOUDFLARE_PAGES" , "CF_PAGES" ,{ ci : true }],[ "CLOUDFLARE_WORKERS" , "WORKERS_CI" ,{ ci : true }],[ "CODEBUILD" , "CODEBUILD_BUILD_ARN" ],[ "CODEFRESH" , "CF_BUILD_ID" ],[ "DRONE" ],[ "DRONE" , "DRONE_BUILD_EVENT" ],[ "DSARI" ],[ "GITHUB_ACTIONS" ],[ "GITLAB" , "GITLAB_CI" ],[ "GITLAB" , "CI_MERGE_REQUEST_ID" ],[ "GOCD" , "GO_PIPELINE_LABEL" ],[ "LAYERCI" ],[ "HUDSON" , "HUDSON_URL" ],[ "JENKINS" , "JENKINS_URL" ],[ "MAGNUM" ],[ "NETLIFY" ],[ "NETLIFY" , "NETLIFY_LOCAL" ,{ ci : false }],[ "NEVERCODE" ],[ "RENDER" ],[ "SAIL" , "SAILCI" ],[ "SEMAPHORE" ],[ "SCREWDRIVER" ],[ "SHIPPABLE" ],[ "SOLANO" , "TDDIUM" ],[ "STRIDER" ],[ "TEAMCITY" , "TEAMCITY_VERSION" ],[ "TRAVIS" ],[ "VERCEL" , "NOW_BUILDER" ],[ "VERCEL" , "VERCEL" ,{ ci : false }],[ "VERCEL" , "VERCEL_ENV" ,{ ci : false }],[ "APPCENTER" , "APPCENTER_BUILD_ID" ],[ "CODESANDBOX" , "CODESANDBOX_SSE" ,{ ci : false }],[ "CODESANDBOX" , "CODESANDBOX_HOST" ,{ ci : false }],[ "STACKBLITZ" ],[ "STORMKIT" ],[ "CLEAVR" ],[ "ZEABUR" ],[ "CODESPHERE" , "CODESPHERE_APP_ID" ,{ ci : true }],[ "RAILWAY" , "RAILWAY_PROJECT_ID" ],[ "RAILWAY" , "RAILWAY_SERVICE_ID" ],[ "DENO-DEPLOY" , "DENO_DEPLOYMENT_ID" ],[ "FIREBASE_APP_HOSTING" , "FIREBASE_APP_HOSTING" ,{ ci : true }]]; function b (){ if ( globalThis . process ? . env ) for ( const e of f ){ const s = e [ 1 ] || e [ 0 ]; if ( globalThis . process ? . env [ s ]) return { name : e [ 0 ]. toLowerCase (),... e [ 2 ]}} return globalThis . process ? . env ? . SHELL === "/bin/jsh" && globalThis . process ? . versions ? . webcontainer ? { name : "stackblitz" , ci : false } : { name : "" , ci : false }} const l = b (); l . name ; function n ( e ){ return e ? e !== "false" : false } const I = globalThis . process ? . platform || "" , T = n ( o . CI ) || l . ci !== false , R = n ( globalThis . process ? . stdout && globalThis . process ? . stdout . isTTY ); n ( o . DEBUG ); const a = t === "test" || n ( o . TEST ), h = t === "dev" || t === "development" ; n ( o . MINIMAL ) || T || a ||! R ; const A = /^win/i . test ( I ); ! n ( o . NO_COLOR ) && ( n ( o . FORCE_COLOR ) || ( R || A ) && o . TERM !== "dumb" || T ); const C = ( globalThis . process ? . versions ? . node || "" ). replace ( /^v/ , "" ) || null ; Number ( C ? . split ( "." )[ 0 ]) || null ; const W = globalThis . process || Object . create ( null ), _ = { versions : {}}; new Proxy ( W ,{ get ( e , s ){ if ( s === "env" ) return o ; if ( s in e ) return e [ s ]; if ( s in _ ) return _ [ s ]}}); const O = globalThis . process ? . release ? . name === "node" , c =!! globalThis . Bun ||!! globalThis . process ? . versions ? . bun , D =!! globalThis . Deno , L =!! globalThis . fastly , S =!! globalThis . Netlify , u =!! globalThis . EdgeRuntime , N = globalThis . navigator ? . userAgent === "Cloudflare-Workers" , F = [[ S , "netlify" ],[ u , "edge-light" ],[ N , "workerd" ],[ L , "fastly" ],[ D , "deno" ],[ c , "bun" ],[ O , "node" ]]; function G (){ const e = F . find ( s => s [ 0 ]); if ( e ) return { name : e [ 1 ]}} const P = G (); P ? . name || "" ;
function getNitroOrigin$1 ( ctx = {}) {
const isDev = ctx . isDev ?? h ;
const isPrerender = ctx . isPrerender ?? !! o . prerender ;
let host = "" ;
let port = "" ;
let protocol = o . NITRO_SSL_CERT && o . NITRO_SSL_KEY ? "https" : "http" ;
if ( isDev || isPrerender ) {
const devEnv = o . __NUXT_DEV__ || o . NUXT_VITE_NODE_OPTIONS ;
if ( devEnv ) {
const parsed = JSON . parse ( devEnv );
const origin = parsed . proxy ? . url || parsed . baseURL ? . replace ( "/__nuxt_vite_node__" , "" );
host = origin . replace ( /^https?:\/\// , "" );
protocol = origin . startsWith ( "https" ) ? "https" : "http" ;
}
2025-07-23 16:57:31 +03:30
}
2026-01-27 16:02:45 +03:30
if ( ! host && ctx . requestHost ) {
host = ctx . requestHost ;
protocol = ctx . requestProtocol || protocol ;
2025-07-23 16:57:31 +03:30
}
2026-01-27 16:02:45 +03:30
if ( ! host ) {
host = o . NITRO_HOST || o . HOST || "" ;
if ( isDev )
port = o . NITRO_PORT || o . PORT || "3000" ;
}
if ( host . includes ( ":" )) {
const i = host . lastIndexOf ( ":" );
port = host . slice ( i + 1 );
host = host . slice ( 0 , i );
}
host = o . NUXT_SITE_HOST_OVERRIDE || host ;
port = o . NUXT_SITE_PORT_OVERRIDE || port ;
if ( host . startsWith ( "http://" ) || host . startsWith ( "https://" )) {
protocol = host . startsWith ( "https://" ) ? "https" : "http" ;
host = host . replace ( /^https?:\/\// , "" );
} else if ( ! host . includes ( "localhost" ) && ! host . startsWith ( "127." )) {
protocol = "https" ;
}
return ` ${ protocol } :// ${ host }${ port ? `: ${ port } ` : "" } /` ;
2025-07-23 16:57:31 +03:30
}
2026-01-27 16:02:45 +03:30
function getNitroOrigin ( e ) {
return getNitroOrigin$1 ({
isDev : false ,
isPrerender : false ,
requestHost : e ? getRequestHost ( e , { xForwardedHost : true }) : void 0 ,
requestProtocol : e ? getRequestProtocol ( e , { xForwardedProto : true }) : void 0
});
}
const _0pBAf1 = eventHandler ( async ( e ) => {
2025-07-23 16:57:31 +03:30
if ( e . context . _initedSiteConfig )
return ;
const runtimeConfig = useRuntimeConfig ( e );
const config = runtimeConfig [ "nuxt-site-config" ];
const nitroApp = useNitroApp ();
const siteConfig = e . context . siteConfig || createSiteConfigStack ({
debug : config . debug
});
2026-01-27 16:02:45 +03:30
const nitroOrigin = getNitroOrigin ( e );
2025-07-23 16:57:31 +03:30
e . context . siteConfigNitroOrigin = nitroOrigin ;
{
siteConfig . push ({
_context : "nitro:init" ,
_priority : - 4 ,
url : nitroOrigin
});
}
siteConfig . push ({
_context : "runtimeEnv" ,
_priority : 0 ,
... runtimeConfig . site || {},
... runtimeConfig . public . site || {},
... envSiteConfig ( globalThis . _importMeta_ . env )
// just in-case, shouldn't be needed
});
const buildStack = config . stack || [];
buildStack . forEach (( c ) => siteConfig . push ( c ));
if ( e . context . _nitro . routeRules . site ) {
siteConfig . push ({
_context : "route-rules" ,
... e . context . _nitro . routeRules . site
});
}
if ( config . multiTenancy ) {
const host = parseURL ( nitroOrigin ). host ;
const tenant = config . multiTenancy ? . find (( t ) => t . hosts . includes ( host ));
if ( tenant ) {
siteConfig . push ({
_context : `multi-tenancy: ${ host } ` ,
_priority : 0 ,
... tenant . config
});
}
}
const ctx = { siteConfig , event : e };
await nitroApp . hooks . callHook ( "site-config:init" , ctx );
e . context . siteConfig = ctx . siteConfig ;
e . context . _initedSiteConfig = true ;
});
2026-01-27 16:02:45 +03:30
const logger = createConsola ({
2025-07-23 16:57:31 +03:30
defaults : {
tag : "@nuxt/sitemap"
}
});
const merger = createDefu (( obj , key , value ) => {
if ( Array . isArray ( obj [ key ]) && Array . isArray ( value ))
obj [ key ] = Array . from ( /* @__PURE__ */ new Set ([... obj [ key ], ... value ]));
return obj [ key ];
});
function mergeOnKey ( arr , key ) {
const seen = /* @__PURE__ */ new Map ();
let resultLength = 0 ;
const result = Array . from ({ length : arr . length });
for ( const item of arr ) {
const k = item [ key ];
if ( seen . has ( k )) {
const existingIndex = seen . get ( k );
result [ existingIndex ] = merger ( item , result [ existingIndex ]);
} else {
seen . set ( k , resultLength );
result [ resultLength ++ ] = item ;
}
}
2026-01-27 16:02:45 +03:30
result . length = resultLength ;
return result ;
2025-07-23 16:57:31 +03:30
}
function splitForLocales ( path , locales ) {
const prefix = withLeadingSlash ( path ). split ( "/" )[ 1 ];
2026-01-27 16:02:45 +03:30
if ( prefix && locales . includes ( prefix ))
2025-07-23 16:57:31 +03:30
return [ prefix , path . replace ( `/ ${ prefix } ` , "" )];
return [ null , path ];
}
const StringifiedRegExpPattern = /\/(.*?)\/([gimsuy]*)$/ ;
function normalizeRuntimeFilters ( input ) {
return ( input || []). map (( rule ) => {
if ( rule instanceof RegExp || typeof rule === "string" )
return rule ;
const match = rule . regex . match ( StringifiedRegExpPattern );
if ( match )
return new RegExp ( match [ 1 ], match [ 2 ]);
return false ;
}). filter ( Boolean );
}
function createPathFilter ( options = {}) {
const urlFilter = createFilter ( options );
return ( loc ) => {
let path = loc ;
try {
path = parseURL ( loc ). pathname ;
} catch {
return false ;
}
return urlFilter ( path );
};
}
function createFilter ( options = {}) {
const include = options . include || [];
const exclude = options . exclude || [];
if ( include . length === 0 && exclude . length === 0 )
return () => true ;
2026-01-27 16:02:45 +03:30
const excludeRegex = exclude . filter (( r ) => r instanceof RegExp );
const includeRegex = include . filter (( r ) => r instanceof RegExp );
const excludeStrings = exclude . filter (( r ) => typeof r === "string" );
const includeStrings = include . filter (( r ) => typeof r === "string" );
const excludeMatcher = excludeStrings . length > 0 ? toRouteMatcher ( createRouter$1 ({
routes : Object . fromEntries ( excludeStrings . map (( r ) => [ r , true ])),
strictTrailingSlash : false
})) : null ;
const includeMatcher = includeStrings . length > 0 ? toRouteMatcher ( createRouter$1 ({
routes : Object . fromEntries ( includeStrings . map (( r ) => [ r , true ])),
strictTrailingSlash : false
})) : null ;
const excludeExact = new Set ( excludeStrings );
const includeExact = new Set ( includeStrings );
2025-07-23 16:57:31 +03:30
return function ( path ) {
2026-01-27 16:02:45 +03:30
if ( excludeRegex . some (( r ) => r . test ( path )))
return false ;
if ( excludeExact . has ( path ))
return false ;
if ( excludeMatcher && excludeMatcher . matchAll ( path ). length > 0 )
return false ;
if ( includeRegex . some (( r ) => r . test ( path )))
return true ;
if ( includeExact . has ( path ))
return true ;
if ( includeMatcher && includeMatcher . matchAll ( path ). length > 0 )
return true ;
2025-07-23 16:57:31 +03:30
return include . length === 0 ;
};
}
2026-01-27 16:02:45 +03:30
function xmlEscape ( str ) {
return String ( str ). replace ( /&/g , "&" ). replace ( /</g , "<" ). replace ( />/g , ">" ). replace ( /"/g , """ ). replace ( /'/g , "'" );
}
2025-07-23 16:57:31 +03:30
function useSitemapRuntimeConfig ( e ) {
const clone = JSON . parse ( JSON . stringify ( useRuntimeConfig ( e ). sitemap ));
for ( const k in clone . sitemaps ) {
const sitemap = clone . sitemaps [ k ];
sitemap . include = normalizeRuntimeFilters ( sitemap . include );
sitemap . exclude = normalizeRuntimeFilters ( sitemap . exclude );
clone . sitemaps [ k ] = sitemap ;
}
return Object . freeze ( clone );
}
2026-01-27 16:02:45 +03:30
function useSiteConfig ( e , _options ) {
return getSiteConfig ( e , _options );
}
2025-07-23 16:57:31 +03:30
function resolveSitePath ( pathOrUrl , options ) {
let path = pathOrUrl ;
if ( hasProtocol ( pathOrUrl , { strict : false , acceptRelative : true })) {
const parsed = parseURL ( pathOrUrl );
path = parsed . pathname ;
}
const base = withLeadingSlash ( options . base || "/" );
if ( base !== "/" && path . startsWith ( base )) {
path = path . slice ( base . length );
}
let origin = withoutTrailingSlash ( options . absolute ? options . siteUrl : "" );
if ( base !== "/" && origin . endsWith ( base )) {
origin = origin . slice ( 0 , origin . indexOf ( base ));
}
const baseWithOrigin = options . withBase ? withBase ( base , origin || "/" ) : origin ;
const resolvedUrl = withBase ( path , baseWithOrigin );
return path === "/" && ! options . withBase ? withTrailingSlash ( resolvedUrl ) : fixSlashes ( options . trailingSlash , resolvedUrl );
}
const fileExtensions = [
// Images
"jpg" ,
"jpeg" ,
"png" ,
"gif" ,
"bmp" ,
"webp" ,
"svg" ,
"ico" ,
// Documents
"pdf" ,
"doc" ,
"docx" ,
"xls" ,
"xlsx" ,
"ppt" ,
"pptx" ,
"txt" ,
"md" ,
"markdown" ,
// Archives
"zip" ,
"rar" ,
"7z" ,
"tar" ,
"gz" ,
// Audio
"mp3" ,
"wav" ,
"flac" ,
"ogg" ,
"opus" ,
"m4a" ,
"aac" ,
"midi" ,
"mid" ,
// Video
"mp4" ,
"avi" ,
"mkv" ,
"mov" ,
"wmv" ,
"flv" ,
"webm" ,
// Web
"html" ,
"css" ,
"js" ,
"json" ,
"xml" ,
"tsx" ,
"jsx" ,
"ts" ,
"vue" ,
"svelte" ,
"xsl" ,
"rss" ,
"atom" ,
// Programming
"php" ,
"py" ,
"rb" ,
"java" ,
"c" ,
"cpp" ,
"h" ,
"go" ,
// Data formats
"csv" ,
"tsv" ,
"sql" ,
"yaml" ,
"yml" ,
// Fonts
"woff" ,
"woff2" ,
"ttf" ,
"otf" ,
"eot" ,
// Executables/Binaries
"exe" ,
"msi" ,
"apk" ,
"ipa" ,
"dmg" ,
"iso" ,
"bin" ,
// Scripts/Config
"bat" ,
"cmd" ,
"sh" ,
"env" ,
"htaccess" ,
"conf" ,
"toml" ,
"ini" ,
// Package formats
"deb" ,
"rpm" ,
"jar" ,
"war" ,
// E-books
"epub" ,
"mobi" ,
// Common temporary/backup files
"log" ,
"tmp" ,
"bak" ,
"old" ,
"sav"
];
function isPathFile ( path ) {
const lastSegment = path . split ( "/" ). pop ();
const ext = ( lastSegment || path ). match ( /\.[0-9a-z]+$/i ) ? .[ 0 ];
return ext && fileExtensions . includes ( ext . replace ( "." , "" ));
}
function fixSlashes ( trailingSlash , pathOrUrl ) {
const $url = parseURL ( pathOrUrl );
if ( isPathFile ( $url . pathname ))
return pathOrUrl ;
const fixedPath = trailingSlash ? withTrailingSlash ( $url . pathname ) : withoutTrailingSlash ( $url . pathname );
return ` ${ $url . protocol ? ` ${ $url . protocol } //` : "" }${ $url . host || "" }${ fixedPath }${ $url . search || "" }${ $url . hash || "" } ` ;
}
function createSitePathResolver ( e , options = {}) {
2026-01-27 16:02:45 +03:30
const siteConfig = getSiteConfig ( e );
const nitroOrigin = getNitroOrigin ( e );
2025-07-23 16:57:31 +03:30
const nuxtBase = useRuntimeConfig ( e ). app . baseURL || "/" ;
return ( path ) => {
return resolveSitePath ( path , {
... options ,
siteUrl : options . canonical !== false || false ? siteConfig . url : nitroOrigin ,
trailingSlash : siteConfig . trailingSlash ,
base : nuxtBase
});
};
}
2026-01-27 16:02:45 +03:30
const _wZAoUF = defineEventHandler ( async ( e ) => {
2025-07-23 16:57:31 +03:30
const fixPath = createSitePathResolver ( e , { absolute : false , withBase : true });
const { sitemapName : fallbackSitemapName , cacheMaxAgeSeconds , version , xslColumns , xslTips } = useSitemapRuntimeConfig ();
setHeader ( e , "Content-Type" , "application/xslt+xml" );
if ( cacheMaxAgeSeconds )
setHeader ( e , "Cache-Control" , `public, max-age= ${ cacheMaxAgeSeconds } , must-revalidate` );
else
setHeader ( e , "Cache-Control" , `no-cache, no-store` );
const { name : siteName , url : siteUrl } = useSiteConfig ( e );
const referrer = getHeader ( e , "Referer" ) || "/" ;
const referrerPath = parseURL ( referrer ). pathname ;
const isNotIndexButHasIndex = referrerPath !== "/sitemap.xml" && referrerPath !== "/sitemap_index.xml" && referrerPath . endsWith ( ".xml" );
const sitemapName = parseURL ( referrer ). pathname . split ( "/" ). pop () ? . split ( "-sitemap" )[ 0 ] || fallbackSitemapName ;
const title = ` ${ siteName }${ sitemapName !== "sitemap.xml" ? ` - ${ sitemapName === "sitemap_index.xml" ? "index" : sitemapName } ` : "" } ` . replace ( /&/g , "&" );
const canonicalQuery = getQuery$1 ( referrer ). canonical ;
const isShowingCanonical = typeof canonicalQuery !== "undefined" && canonicalQuery !== "false" ;
const conditionalTips = [
'You are looking at a <a href="https://developer.mozilla.org/en-US/docs/Web/XSLT/Transforming_XML_with_XSLT/An_Overview" style="color: #398465" target="_blank">XML stylesheet</a>. Read the <a href="https://nuxtseo.com/sitemap/guides/customising-ui" style="color: #398465" target="_blank">docs</a> to learn how to customize it. View the page source to see the raw XML.' ,
2026-01-27 16:02:45 +03:30
`URLs missing? Check Nuxt Devtools Sitemap tab (or the <a href=" ${ xmlEscape ( withQuery ( "/__sitemap__/debug.json" , { sitemap : sitemapName } ))}" style="color: #398465" target="_blank">debug endpoint</a>).`
2025-07-23 16:57:31 +03:30
];
2026-01-27 16:02:45 +03:30
const fetchErrors = [];
const xslQuery = getQuery ( e );
if ( xslQuery . error_messages ) {
const errorMessages = xslQuery . error_messages ;
const errorUrls = xslQuery . error_urls ;
if ( errorMessages ) {
const messages = Array . isArray ( errorMessages ) ? errorMessages : [ errorMessages ];
const urls = Array . isArray ( errorUrls ) ? errorUrls : errorUrls ? [ errorUrls ] : [];
messages . forEach (( msg , i ) => {
const errorParts = [ xmlEscape ( msg )];
if ( urls [ i ]) {
errorParts . push ( xmlEscape ( urls [ i ]));
}
fetchErrors . push ( `<strong style="color: #dc2626;">Error ${ i + 1 } :</strong> ${ errorParts . join ( " - " ) } ` );
});
}
}
2025-07-23 16:57:31 +03:30
if ( ! isShowingCanonical ) {
const canonicalPreviewUrl = withQuery ( referrer , { canonical : "" });
2026-01-27 16:02:45 +03:30
conditionalTips . push ( `Your canonical site URL is <strong> ${ xmlEscape ( siteUrl ) } </strong>.` );
conditionalTips . push ( `You can preview your canonical sitemap by visiting <a href=" ${ xmlEscape ( canonicalPreviewUrl ) } " style="color: #398465; white-space: nowrap;"> ${ xmlEscape ( fixPath ( canonicalPreviewUrl )) } ?canonical</a>` );
2025-07-23 16:57:31 +03:30
} else {
2026-01-27 16:02:45 +03:30
conditionalTips . push ( `You are viewing the canonical sitemap. You can switch to using the request origin: <a href=" ${ xmlEscape ( fixPath ( referrer )) } " style="color: #398465; white-space: nowrap "> ${ xmlEscape ( fixPath ( referrer )) } </a>` );
2025-07-23 16:57:31 +03:30
}
2026-01-27 16:02:45 +03:30
const hasRuntimeErrors = fetchErrors . length > 0 ;
const showSidebar = hasRuntimeErrors ;
const runtimeErrors = hasRuntimeErrors ? fetchErrors . map (( t ) => `<li><p> ${ t } </p></li>` ). join ( "\n" ) : "" ;
2025-07-23 16:57:31 +03:30
let columns = [... xslColumns ];
if ( ! columns . length ) {
columns = [
{ label : "URL" , width : "50%" },
{ label : "Images" , width : "25%" , select : "count(image:image)" },
{ label : "Last Updated" , width : "25%" , select : "concat(substring(sitemap:lastmod,0,11),concat(' ', substring(sitemap:lastmod,12,5)),concat(' ', substring(sitemap:lastmod,20,6)))" }
];
}
return `<?xml version="1.0" encoding="UTF-8"?>
<xsl:stylesheet version="2.0"
xmlns:html="http://www.w3.org/TR/REC-html40"
xmlns:image="http://www.google.com/schemas/sitemap-image/1.1"
xmlns:sitemap="http://www.sitemaps.org/schemas/sitemap/0.9"
xmlns:xhtml="http://www.w3.org/1999/xhtml"
xmlns:news="http://www.google.com/schemas/sitemap-news/0.9"
xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:output method="html" version="1.0" encoding="UTF-8" indent="yes"/>
<xsl:template match="/">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<title>XML Sitemap</title>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8"/>
<style type="text/css">
body {
font-family: Inter, Helvetica, Arial, sans-serif;
font-size: 14px;
color: #333;
}
table {
border: none;
border-collapse: collapse;
}
.bg-yellow-200 {
background-color: #fef9c3;
}
.p-5 {
padding: 1.25rem;
}
.rounded {
border-radius: 4px;
}
.shadow {
box-shadow: 0 1px 2px 0 rgba(0, 0, 0, 0.05);
}
#sitemap tr:nth-child(odd) td {
background-color: #f8f8f8 !important;
}
#sitemap tbody tr:hover td {
background-color: #fff;
}
#sitemap tbody tr:hover td, #sitemap tbody tr:hover td a {
color: #000;
}
.expl a {
2026-01-27 16:02:45 +03:30
color: #398465;
2025-07-23 16:57:31 +03:30
font-weight: 600;
}
.expl a:visited {
2026-01-27 16:02:45 +03:30
color: #398465;
2025-07-23 16:57:31 +03:30
}
a {
color: #000;
text-decoration: none;
}
a:visited {
color: #777;
}
a:hover {
text-decoration: underline;
}
td {
font-size: 12px;
}
.text-2xl {
font-size: 2rem;
font-weight: 600;
line-height: 1.25;
}
th {
text-align: left;
padding-right: 30px;
font-size: 12px;
}
thead th {
border-bottom: 1px solid #000;
}
.fixed { position: fixed; }
.right-2 { right: 2rem; }
.top-2 { top: 2rem; }
.w-30 { width: 30rem; }
p { margin: 0; }
li { padding-bottom: 0.5rem; line-height: 1.5; }
h1 { margin: 0; }
.mb-5 { margin-bottom: 1.25rem; }
.mb-3 { margin-bottom: 0.75rem; }
</style>
</head>
<body>
<div style="grid-template-columns: 1fr 1fr; display: grid; margin: 3rem;">
<div>
<div id="content">
<h1 class="text-2xl mb-3">XML Sitemap</h1>
2026-01-27 16:02:45 +03:30
<h2> ${ xmlEscape ( title ) } </h2>
${ isNotIndexButHasIndex ? `<p style="font-size: 12px; margin-bottom: 1rem;"><a href=" ${ xmlEscape ( fixPath ( "/sitemap_index.xml" )) } "> ${ xmlEscape ( fixPath ( "/sitemap_index.xml" )) } </a></p>` : "" }
2025-07-23 16:57:31 +03:30
<xsl:if test="count(sitemap:sitemapindex/sitemap:sitemap) > 0">
<p class="expl" style="margin-bottom: 1rem;">
This XML Sitemap Index file contains
<xsl:value-of select="count(sitemap:sitemapindex/sitemap:sitemap)"/> sitemaps.
</p>
<table id="sitemap" cellpadding="3">
<thead>
<tr>
<th width="75%">Sitemap</th>
<th width="25%">Last Modified</th>
</tr>
</thead>
<tbody>
<xsl:for-each select="sitemap:sitemapindex/sitemap:sitemap">
<xsl:variable name="sitemapURL">
<xsl:value-of select="sitemap:loc"/>
</xsl:variable>
<tr>
<td>
<a href="{$sitemapURL}">
<xsl:value-of select="sitemap:loc"/>
</a>
</td>
<td>
<xsl:value-of
select="concat(substring(sitemap:lastmod,0,11),concat(' ', substring(sitemap:lastmod,12,5)),concat(' ', substring(sitemap:lastmod,20,6)))"/>
</td>
</tr>
</xsl:for-each>
</tbody>
</table>
</xsl:if>
<xsl:if test="count(sitemap:sitemapindex/sitemap:sitemap) < 1">
<p class="expl" style="margin-bottom: 1rem;">
This XML Sitemap contains
<xsl:value-of select="count(sitemap:urlset/sitemap:url)"/> URLs.
</p>
<table id="sitemap" cellpadding="3">
<thead>
<tr>
${ columns . map (( c ) => `<th width=" ${ c . width } "> ${ c . label } </th>` ). join ( "\n" ) }
</tr>
</thead>
<tbody>
<xsl:variable name="lower" select="'abcdefghijklmnopqrstuvwxyz'"/>
<xsl:variable name="upper" select="'ABCDEFGHIJKLMNOPQRSTUVWXYZ'"/>
<xsl:for-each select="sitemap:urlset/sitemap:url">
<tr>
<td>
<xsl:variable name="itemURL">
<xsl:value-of select="sitemap:loc"/>
</xsl:variable>
<a href="{$itemURL}">
<xsl:value-of select="sitemap:loc"/>
</a>
</td>
${ columns . filter (( c ) => c . label !== "URL" ). map (( c ) => `<td>
<xsl:value-of select=" ${ c . select } "/>
</td>` ). join ( "\n" ) }
</tr>
</xsl:for-each>
</tbody>
</table>
</xsl:if>
</div>
</div>
2026-01-27 16:02:45 +03:30
${ showSidebar ? `<div class="w-30 top-2 shadow rounded p-5 right-2" style="margin: 0 auto;">
${ "" }
${ hasRuntimeErrors ? `<div ${ "" } ><p><strong style="color: #dc2626;">Runtime Errors</strong></p><ul style="margin: 1rem 0; padding: 0;"> ${ runtimeErrors } </ul></div>` : "" }
${ "" }
</div>` : "" }
2025-07-23 16:57:31 +03:30
</div>
</body>
</html>
</xsl:template>
</xsl:stylesheet>
` ;
});
function withoutQuery ( path ) {
return path . split ( "?" )[ 0 ];
}
function createNitroRouteRuleMatcher () {
const { nitro , app } = useRuntimeConfig ();
const _routeRulesMatcher = toRouteMatcher (
createRouter$1 ({
routes : Object . fromEntries (
Object . entries ( nitro ? . routeRules || {}). map (([ path , rules ]) => [ path === "/" ? path : withoutTrailingSlash ( path ), rules ])
)
})
);
return ( pathOrUrl ) => {
const path = pathOrUrl [ 0 ] === "/" ? pathOrUrl : parseURL ( pathOrUrl , app . baseURL ). pathname ;
const pathWithoutQuery = withoutQuery ( path );
return defu ({}, ... _routeRulesMatcher . matchAll (
// radix3 does not support trailing slashes
withoutBase ( pathWithoutQuery === "/" ? pathWithoutQuery : withoutTrailingSlash ( pathWithoutQuery ), app . baseURL )
). reverse ());
};
}
function resolve ( s , resolvers ) {
2026-01-27 16:02:45 +03:30
if ( typeof s === "undefined" )
return void 0 ;
const str = typeof s === "string" ? s : s . toString ();
if ( ! resolvers )
return str ;
if ( hasProtocol ( str , { acceptRelative : true , strict : false }))
return resolvers . fixSlashes ( str );
return resolvers . canonicalUrlResolver ( str );
2025-07-23 16:57:31 +03:30
}
function removeTrailingSlash ( s ) {
return s . replace ( /\/(\?|#|$)/ , "$1" );
}
function preNormalizeEntry ( _e , resolvers ) {
2026-01-27 16:02:45 +03:30
const input = typeof _e === "string" ? { loc : _e } : { ... _e };
if ( input . url && ! input . loc ) {
input . loc = input . url ;
2025-07-23 16:57:31 +03:30
}
2026-01-27 16:02:45 +03:30
delete input . url ;
if ( typeof input . loc !== "string" ) {
input . loc = "" ;
2025-07-23 16:57:31 +03:30
}
2026-01-27 16:02:45 +03:30
const skipEncoding = input . _encoded === true ;
const e = input ;
2025-07-23 16:57:31 +03:30
e . loc = removeTrailingSlash ( e . loc );
e . _abs = hasProtocol ( e . loc , { acceptRelative : false , strict : false });
try {
e . _path = e . _abs ? parseURL ( e . loc ) : parsePath ( e . loc );
2026-01-27 16:02:45 +03:30
} catch {
e . _path = null ;
2025-07-23 16:57:31 +03:30
}
if ( e . _path ) {
2026-01-27 16:02:45 +03:30
const search = e . _path . search ;
const qs = search && search . length > 1 ? stringifyQuery ( parseQuery ( search )) : "" ;
const pathname = skipEncoding ? e . _path . pathname : encodePath ( e . _path . pathname );
e . _relativeLoc = ` ${ pathname }${ qs . length ? `? ${ qs } ` : "" } ` ;
2025-07-23 16:57:31 +03:30
if ( e . _path . host ) {
e . loc = stringifyParsedURL ( e . _path );
} else {
e . loc = e . _relativeLoc ;
}
2026-01-27 16:02:45 +03:30
} else if ( ! skipEncoding && ! isEncoded ( e . loc )) {
2025-07-23 16:57:31 +03:30
e . loc = encodeURI ( e . loc );
}
if ( e . loc === "" )
e . loc = `/` ;
e . loc = resolve ( e . loc , resolvers );
e . _key = ` ${ e . _sitemap || "" }${ withoutTrailingSlash ( e . loc ) } ` ;
return e ;
}
function isEncoded ( url ) {
try {
return url !== decodeURIComponent ( url );
} catch {
return false ;
}
}
function normaliseEntry ( _e , defaults , resolvers ) {
const e = defu ( _e , defaults );
if ( e . lastmod ) {
const date = normaliseDate ( e . lastmod );
if ( date )
e . lastmod = date ;
else
delete e . lastmod ;
}
if ( ! e . lastmod )
delete e . lastmod ;
e . loc = resolve ( e . loc , resolvers );
if ( e . alternatives ) {
2026-01-27 16:02:45 +03:30
const alternatives = e . alternatives . map (( a ) => ({ ... a }));
for ( const alt of alternatives ) {
2025-07-23 16:57:31 +03:30
if ( typeof alt . href === "string" ) {
alt . href = resolve ( alt . href , resolvers );
} else if ( typeof alt . href === "object" && alt . href ) {
alt . href = resolve ( alt . href . href , resolvers );
}
}
e . alternatives = mergeOnKey ( alternatives , "hreflang" );
}
if ( e . images ) {
2026-01-27 16:02:45 +03:30
const images = e . images . map (( i ) => ({ ... i }));
for ( const img of images ) {
img . loc = resolve ( img . loc , resolvers );
2025-07-23 16:57:31 +03:30
}
e . images = mergeOnKey ( images , "loc" );
}
if ( e . videos ) {
2026-01-27 16:02:45 +03:30
const videos = e . videos . map (( v ) => ({ ... v }));
for ( const video of videos ) {
if ( video . content_loc ) {
video . content_loc = resolve ( video . content_loc , resolvers );
2025-07-23 16:57:31 +03:30
}
}
2026-01-27 16:02:45 +03:30
e . videos = mergeOnKey ( videos , "content_loc" );
2025-07-23 16:57:31 +03:30
}
return e ;
}
const IS_VALID_W3C_DATE = [
/(\d{4}-[01]\d-[0-3]\dT[0-2]\d:[0-5]\d:[0-5]\d\.\d+([+-][0-2]\d:[0-5]\d|Z))|(\d{4}-[01]\d-[0-3]\dT[0-2]\d:[0-5]\d:[0-5]\d([+-][0-2]\d:[0-5]\d|Z))|(\d{4}-[01]\d-[0-3]\dT[0-2]\d:[0-5]\d([+-][0-2]\d:[0-5]\d|Z))/ ,
/^\d{4}-[01]\d-[0-3]\d$/ ,
/^\d{4}-[01]\d$/ ,
/^\d{4}$/
];
function isValidW3CDate ( d ) {
return IS_VALID_W3C_DATE . some (( r ) => r . test ( d ));
}
function normaliseDate ( d ) {
if ( typeof d === "string" ) {
2026-01-27 16:02:45 +03:30
const tIdx = d . indexOf ( "T" );
if ( tIdx !== - 1 ) {
const t = d . slice ( tIdx + 1 );
2025-07-23 16:57:31 +03:30
if ( ! t . includes ( "+" ) && ! t . includes ( "-" ) && ! t . includes ( "Z" )) {
d += "Z" ;
}
}
if ( ! isValidW3CDate ( d ))
return false ;
d = new Date ( d );
d . setMilliseconds ( 0 );
if ( Number . isNaN ( d . getTime ()))
return false ;
}
const z = ( n ) => `0 ${ n } ` . slice ( - 2 );
const date = ` ${ d . getUTCFullYear () } - ${ z ( d . getUTCMonth () + 1 ) } - ${ z ( d . getUTCDate ()) } ` ;
if ( d . getUTCHours () > 0 || d . getUTCMinutes () > 0 || d . getUTCSeconds () > 0 ) {
return ` ${ date } T ${ z ( d . getUTCHours ()) } : ${ z ( d . getUTCMinutes ()) } : ${ z ( d . getUTCSeconds ()) } Z` ;
}
return date ;
}
2026-01-27 16:02:45 +03:30
function isValidString ( value ) {
return typeof value === "string" && value . trim (). length > 0 ;
}
function parseNumber ( value ) {
if ( typeof value === "number" ) return value ;
if ( typeof value === "string" && value . trim ()) {
const num = Number . parseFloat ( value . trim ());
return Number . isNaN ( num ) ? void 0 : num ;
}
return void 0 ;
}
function parseInteger ( value ) {
if ( typeof value === "number" ) return Math . floor ( value );
if ( typeof value === "string" && value . trim ()) {
const num = Number . parseInt ( value . trim (), 10 );
return Number . isNaN ( num ) ? void 0 : num ;
}
return void 0 ;
}
function extractUrlFromParsedElement ( urlElement , warnings ) {
if ( ! isValidString ( urlElement . loc )) {
warnings . push ({
type : "validation" ,
message : "URL entry missing required loc element" ,
context : { url : String ( urlElement . loc || "undefined" ) }
});
return null ;
}
const urlObj = { loc : urlElement . loc };
if ( isValidString ( urlElement . lastmod )) {
urlObj . lastmod = urlElement . lastmod ;
}
if ( isValidString ( urlElement . changefreq )) {
const validFreqs = [ "always" , "hourly" , "daily" , "weekly" , "monthly" , "yearly" , "never" ];
if ( validFreqs . includes ( urlElement . changefreq )) {
urlObj . changefreq = urlElement . changefreq ;
} else {
warnings . push ({
type : "validation" ,
message : "Invalid changefreq value" ,
context : { url : urlElement . loc , field : "changefreq" , value : urlElement . changefreq }
});
}
}
const priority = parseNumber ( urlElement . priority );
if ( priority !== void 0 && ! Number . isNaN ( priority )) {
if ( priority < 0 || priority > 1 ) {
warnings . push ({
type : "validation" ,
message : "Priority value should be between 0.0 and 1.0, clamping to valid range" ,
context : { url : urlElement . loc , field : "priority" , value : priority }
});
}
urlObj . priority = Math . max ( 0 , Math . min ( 1 , priority ));
} else if ( urlElement . priority !== void 0 ) {
warnings . push ({
type : "validation" ,
message : "Invalid priority value" ,
context : { url : urlElement . loc , field : "priority" , value : urlElement . priority }
});
}
if ( urlElement . image ) {
const images = Array . isArray ( urlElement . image ) ? urlElement . image : [ urlElement . image ];
const validImages = images . map (( img ) => {
if ( isValidString ( img . loc )) {
return { loc : img . loc };
} else {
warnings . push ({
type : "validation" ,
message : "Image missing required loc element" ,
context : { url : urlElement . loc , field : "image.loc" }
});
return null ;
2025-07-23 16:57:31 +03:30
}
2026-01-27 16:02:45 +03:30
}). filter (( img ) => img !== null );
if ( validImages . length > 0 ) {
urlObj . images = validImages ;
}
}
if ( urlElement . video ) {
const videos = Array . isArray ( urlElement . video ) ? urlElement . video : [ urlElement . video ];
const validVideos = videos . map (( video ) => {
const missingFields = [];
if ( ! isValidString ( video . title )) missingFields . push ( "title" );
if ( ! isValidString ( video . thumbnail_loc )) missingFields . push ( "thumbnail_loc" );
if ( ! isValidString ( video . description )) missingFields . push ( "description" );
if ( ! isValidString ( video . content_loc )) missingFields . push ( "content_loc" );
if ( missingFields . length > 0 ) {
warnings . push ({
type : "validation" ,
message : `Video missing required fields: ${ missingFields . join ( ", " ) } ` ,
context : { url : urlElement . loc , field : "video" }
});
return null ;
}
const videoObj = {
title : video . title ,
thumbnail_loc : video . thumbnail_loc ,
description : video . description ,
content_loc : video . content_loc
};
if ( isValidString ( video . player_loc )) {
videoObj . player_loc = video . player_loc ;
}
const duration = parseInteger ( video . duration );
if ( duration !== void 0 ) {
videoObj . duration = duration ;
} else if ( video . duration !== void 0 ) {
warnings . push ({
type : "validation" ,
message : "Invalid video duration value" ,
context : { url : urlElement . loc , field : "video.duration" , value : video . duration }
});
}
if ( isValidString ( video . expiration_date )) {
videoObj . expiration_date = video . expiration_date ;
}
const rating = parseNumber ( video . rating );
if ( rating !== void 0 ) {
if ( rating < 0 || rating > 5 ) {
warnings . push ({
type : "validation" ,
message : "Video rating should be between 0.0 and 5.0" ,
context : { url : urlElement . loc , field : "video.rating" , value : rating }
});
}
videoObj . rating = rating ;
} else if ( video . rating !== void 0 ) {
warnings . push ({
type : "validation" ,
message : "Invalid video rating value" ,
context : { url : urlElement . loc , field : "video.rating" , value : video . rating }
});
}
const viewCount = parseInteger ( video . view_count );
if ( viewCount !== void 0 ) {
videoObj . view_count = viewCount ;
} else if ( video . view_count !== void 0 ) {
warnings . push ({
type : "validation" ,
message : "Invalid video view_count value" ,
context : { url : urlElement . loc , field : "video.view_count" , value : video . view_count }
});
}
if ( isValidString ( video . publication_date )) {
videoObj . publication_date = video . publication_date ;
}
if ( isValidString ( video . family_friendly )) {
const validValues = [ "yes" , "no" ];
if ( validValues . includes ( video . family_friendly )) {
videoObj . family_friendly = video . family_friendly ;
} else {
warnings . push ({
type : "validation" ,
message : 'Invalid video family_friendly value, should be "yes" or "no"' ,
context : { url : urlElement . loc , field : "video.family_friendly" , value : video . family_friendly }
});
}
}
if ( isValidString ( video . requires_subscription )) {
const validValues = [ "yes" , "no" ];
if ( validValues . includes ( video . requires_subscription )) {
videoObj . requires_subscription = video . requires_subscription ;
} else {
warnings . push ({
type : "validation" ,
message : 'Invalid video requires_subscription value, should be "yes" or "no"' ,
context : { url : urlElement . loc , field : "video.requires_subscription" , value : video . requires_subscription }
});
}
}
if ( isValidString ( video . live )) {
const validValues = [ "yes" , "no" ];
if ( validValues . includes ( video . live )) {
videoObj . live = video . live ;
} else {
warnings . push ({
type : "validation" ,
message : 'Invalid video live value, should be "yes" or "no"' ,
context : { url : urlElement . loc , field : "video.live" , value : video . live }
});
}
}
if ( video . restriction && typeof video . restriction === "object" ) {
const restriction = video . restriction ;
if ( isValidString ( restriction . relationship ) && isValidString ( restriction [ "#text" ])) {
const validRelationships = [ "allow" , "deny" ];
if ( validRelationships . includes ( restriction . relationship )) {
videoObj . restriction = {
relationship : restriction . relationship ,
restriction : restriction [ "#text" ]
};
} else {
warnings . push ({
type : "validation" ,
message : 'Invalid video restriction relationship, should be "allow" or "deny"' ,
context : { url : urlElement . loc , field : "video.restriction.relationship" , value : restriction . relationship }
});
}
}
}
if ( video . platform && typeof video . platform === "object" ) {
const platform = video . platform ;
if ( isValidString ( platform . relationship ) && isValidString ( platform [ "#text" ])) {
const validRelationships = [ "allow" , "deny" ];
if ( validRelationships . includes ( platform . relationship )) {
videoObj . platform = {
relationship : platform . relationship ,
platform : platform [ "#text" ]
};
} else {
warnings . push ({
type : "validation" ,
message : 'Invalid video platform relationship, should be "allow" or "deny"' ,
context : { url : urlElement . loc , field : "video.platform.relationship" , value : platform . relationship }
});
}
}
}
if ( video . price ) {
const prices = Array . isArray ( video . price ) ? video . price : [ video . price ];
const validPrices = prices . map (( price ) => {
const priceValue = price [ "#text" ];
if ( priceValue == null || typeof priceValue !== "string" && typeof priceValue !== "number" ) {
warnings . push ({
type : "validation" ,
message : "Video price missing value" ,
context : { url : urlElement . loc , field : "video.price" }
});
return null ;
}
const validTypes = [ "rent" , "purchase" , "package" , "subscription" ];
if ( price . type && ! validTypes . includes ( price . type )) {
warnings . push ({
type : "validation" ,
message : `Invalid video price type " ${ price . type } ", should be one of: ${ validTypes . join ( ", " ) } ` ,
context : { url : urlElement . loc , field : "video.price.type" , value : price . type }
});
}
return {
price : String ( priceValue ),
currency : price . currency ,
type : price . type
};
}). filter (( p ) => p !== null );
if ( validPrices . length > 0 ) {
videoObj . price = validPrices ;
}
}
if ( video . uploader && typeof video . uploader === "object" ) {
const uploader = video . uploader ;
if ( isValidString ( uploader . info ) && isValidString ( uploader [ "#text" ])) {
videoObj . uploader = {
uploader : uploader [ "#text" ],
info : uploader . info
};
} else {
warnings . push ({
type : "validation" ,
message : "Video uploader missing required info or name" ,
context : { url : urlElement . loc , field : "video.uploader" }
});
}
}
if ( video . tag ) {
const tags = Array . isArray ( video . tag ) ? video . tag : [ video . tag ];
const validTags = tags . filter ( isValidString );
if ( validTags . length > 0 ) {
videoObj . tag = validTags ;
}
}
return videoObj ;
}). filter (( video ) => video !== null );
if ( validVideos . length > 0 ) {
urlObj . videos = validVideos ;
}
}
if ( urlElement . link ) {
const links = Array . isArray ( urlElement . link ) ? urlElement . link : [ urlElement . link ];
const alternatives = links . map (( link ) => {
if ( link . rel === "alternate" && isValidString ( link . hreflang ) && isValidString ( link . href )) {
return {
hreflang : link . hreflang ,
href : link . href
};
} else {
warnings . push ({
type : "validation" ,
message : 'Alternative link missing required rel="alternate", hreflang, or href' ,
context : { url : urlElement . loc , field : "link" }
});
return null ;
}
}). filter (( alt ) => alt !== null );
if ( alternatives . length > 0 ) {
urlObj . alternatives = alternatives ;
}
}
if ( urlElement . news && typeof urlElement . news === "object" ) {
const news = urlElement . news ;
if ( isValidString ( news . title ) && isValidString ( news . publication_date ) && news . publication && isValidString ( news . publication . name ) && isValidString ( news . publication . language )) {
urlObj . news = {
title : news . title ,
publication_date : news . publication_date ,
publication : {
name : news . publication . name ,
language : news . publication . language
}
};
} else {
warnings . push ({
type : "validation" ,
message : "News entry missing required fields (title, publication_date, publication.name, publication.language)" ,
context : { url : urlElement . loc , field : "news" }
});
}
}
return Object . fromEntries (
Object . entries ( urlObj ). filter (
([ _ , value ]) => value != null && ( ! Array . isArray ( value ) || value . length > 0 )
)
);
}
async function parseSitemapXml ( xml ) {
const warnings = [];
if ( ! xml ) {
throw new Error ( "Empty XML input provided" );
}
const { XMLParser } = await import ( 'file:///mnt/new-volume-7/vue_projects/montify/montify/node_modules/fast-xml-parser/src/fxp.js' );
const parser = new XMLParser ({
isArray : ( tagName ) => [ "url" , "image" , "video" , "link" , "tag" , "price" ]. includes ( tagName ),
removeNSPrefix : true ,
parseAttributeValue : false ,
ignoreAttributes : false ,
attributeNamePrefix : "" ,
trimValues : true
});
try {
const parsed = parser . parse ( xml );
if ( ! parsed ? . urlset ) {
throw new Error ( "XML does not contain a valid urlset element" );
}
if ( ! parsed . urlset . url ) {
throw new Error ( "Sitemap contains no URL entries" );
}
const urls = Array . isArray ( parsed . urlset . url ) ? parsed . urlset . url : [ parsed . urlset . url ];
const validUrls = urls . map (( url ) => extractUrlFromParsedElement ( url , warnings )). filter (( url ) => url !== null );
if ( validUrls . length === 0 && urls . length > 0 ) {
warnings . push ({
type : "validation" ,
message : "No valid URLs found in sitemap after validation"
});
}
return { urls : validUrls , warnings };
} catch ( error ) {
if ( error instanceof Error && ( error . message === "Empty XML input provided" || error . message === "XML does not contain a valid urlset element" || error . message === "Sitemap contains no URL entries" )) {
throw error ;
}
throw new Error ( `Failed to parse XML: ${ error instanceof Error ? error . message : String ( error ) } ` );
}
2025-07-23 16:57:31 +03:30
}
2026-01-27 16:02:45 +03:30
async function tryFetchWithFallback ( url , options , event ) {
const isExternalUrl = ! url . startsWith ( "/" );
if ( isExternalUrl ) {
const strategies = [
// Strategy 1: Use globalThis.$fetch (original approach)
() => globalThis . $fetch ( url , options ),
// Strategy 2: If event is available, try using event context even for external URLs
event ? () => event . $fetch ( url , options ) : null ,
// Strategy 3: Use native fetch as last resort
() => $fetch ( url , options )
]. filter ( Boolean );
let lastError = null ;
for ( const strategy of strategies ) {
try {
return await strategy ();
} catch ( error ) {
lastError = error ;
continue ;
}
}
throw lastError ;
}
const fetchContainer = url . startsWith ( "/" ) && event ? event : globalThis ;
return await fetchContainer . $fetch ( url , options );
}
2025-07-23 16:57:31 +03:30
async function fetchDataSource ( input , event ) {
const context = typeof input . context === "string" ? { name : input . context } : input . context || { name : "fetch" };
const url = typeof input . fetch === "string" ? input . fetch : input . fetch [ 0 ];
const options = typeof input . fetch === "string" ? {} : input . fetch [ 1 ];
const start = Date . now ();
2026-01-27 16:02:45 +03:30
const isExternalUrl = ! url . startsWith ( "/" );
const timeout = isExternalUrl ? 1e4 : options . timeout || 5e3 ;
2025-07-23 16:57:31 +03:30
const timeoutController = new AbortController ();
const abortRequestTimeout = setTimeout (() => timeoutController . abort (), timeout );
try {
2026-01-27 16:02:45 +03:30
let isMaybeErrorResponse = false ;
const isXmlRequest = parseURL ( url ). pathname . endsWith ( ".xml" );
const mergedHeaders = defu (
options ? . headers ,
{
Accept : isXmlRequest ? "text/xml" : "application/json"
},
event ? { host : getRequestHost ( event , { xForwardedHost : true }) } : {}
);
const fetchOptions = {
2025-07-23 16:57:31 +03:30
... options ,
responseType : isXmlRequest ? "text" : "json" ,
signal : timeoutController . signal ,
2026-01-27 16:02:45 +03:30
headers : mergedHeaders ,
// Use ofetch's built-in retry for external sources
... isExternalUrl && {
retry : 2 ,
retryDelay : 200
},
2025-07-23 16:57:31 +03:30
// @ts-expect-error untyped
onResponse ({ response }) {
if ( typeof response . _data === "string" && response . _data . startsWith ( "<!DOCTYPE html>" ))
isMaybeErrorResponse = true ;
}
2026-01-27 16:02:45 +03:30
};
const res = await tryFetchWithFallback ( url , fetchOptions , event );
2025-07-23 16:57:31 +03:30
const timeTakenMs = Date . now () - start ;
if ( isMaybeErrorResponse ) {
return {
... input ,
context ,
urls : [],
timeTakenMs ,
error : "Received HTML response instead of JSON"
};
}
let urls = [];
if ( typeof res === "object" ) {
urls = res . urls || res ;
} else if ( typeof res === "string" && parseURL ( url ). pathname . endsWith ( ".xml" )) {
2026-01-27 16:02:45 +03:30
const result = await parseSitemapXml ( res );
urls = result . urls ;
2025-07-23 16:57:31 +03:30
}
return {
... input ,
context ,
timeTakenMs ,
urls
};
} catch ( _err ) {
const error = _err ;
2026-01-27 16:02:45 +03:30
if ( isExternalUrl ) {
const errorInfo = {
url ,
timeout ,
error : error . message ,
statusCode : error . response ? . status ,
statusText : error . response ? . statusText ,
method : options ? . method || "GET"
};
logger . error ( "Failed to fetch external source." , errorInfo );
} else {
logger . error ( "Failed to fetch source." , { url , error : error . message });
}
2025-07-23 16:57:31 +03:30
return {
... input ,
context ,
urls : [],
2026-01-27 16:02:45 +03:30
error : error . message ,
_isFailure : true
// Mark as failure to prevent caching
2025-07-23 16:57:31 +03:30
};
} finally {
if ( abortRequestTimeout ) {
clearTimeout ( abortRequestTimeout );
}
}
}
2026-01-27 16:02:45 +03:30
async function globalSitemapSources () {
const m = await import ( '../virtual/global-sources.mjs' );
return [... m . sources ];
2025-07-23 16:57:31 +03:30
}
2026-01-27 16:02:45 +03:30
async function childSitemapSources ( definition ) {
if ( ! definition ? . _hasSourceChunk )
return [];
const m = await import ( '../virtual/child-sources.mjs' );
return [... m . sources [ definition . sitemapName ] || []];
2025-07-23 16:57:31 +03:30
}
async function resolveSitemapSources ( sources , event ) {
return ( await Promise . all (
sources . map (( source ) => {
if ( typeof source === "object" && "urls" in source ) {
return {
timeTakenMs : 0 ,
... source ,
urls : source . urls
};
}
if ( source . fetch )
return fetchDataSource ( source , event );
return {
... source ,
error : "Invalid source"
};
})
)). flat ();
}
function sortInPlace ( urls ) {
urls . sort (( a , b ) => {
const aLoc = typeof a === "string" ? a : a . loc ;
const bLoc = typeof b === "string" ? b : b . loc ;
const aSegments = aLoc . split ( "/" ). length ;
const bSegments = bLoc . split ( "/" ). length ;
if ( aSegments !== bSegments ) {
return aSegments - bSegments ;
}
return aLoc . localeCompare ( bLoc , void 0 , { numeric : true });
});
return urls ;
}
2026-01-27 16:02:45 +03:30
function parseChunkInfo ( sitemapName , sitemaps , defaultChunkSize ) {
defaultChunkSize = defaultChunkSize || 1e3 ;
2025-07-23 16:57:31 +03:30
if ( typeof sitemaps . chunks !== "undefined" && ! Number . isNaN ( Number ( sitemapName ))) {
return {
isChunked : true ,
baseSitemapName : "sitemap" ,
chunkIndex : Number ( sitemapName ),
chunkSize : defaultChunkSize
};
}
if ( sitemapName . includes ( "-" )) {
const parts = sitemapName . split ( "-" );
const lastPart = parts . pop ();
if ( ! Number . isNaN ( Number ( lastPart ))) {
const baseSitemapName = parts . join ( "-" );
const baseSitemap = sitemaps [ baseSitemapName ];
if ( baseSitemap && ( baseSitemap . chunks || baseSitemap . _isChunking )) {
const chunkSize = typeof baseSitemap . chunks === "number" ? baseSitemap . chunks : baseSitemap . chunkSize || defaultChunkSize ;
return {
isChunked : true ,
baseSitemapName ,
chunkIndex : Number ( lastPart ),
chunkSize
};
}
}
}
return {
isChunked : false ,
baseSitemapName : sitemapName ,
chunkIndex : void 0 ,
chunkSize : defaultChunkSize
};
}
function sliceUrlsForChunk ( urls , sitemapName , sitemaps , defaultChunkSize = 1e3 ) {
const chunkInfo = parseChunkInfo ( sitemapName , sitemaps , defaultChunkSize );
if ( chunkInfo . isChunked && chunkInfo . chunkIndex !== void 0 ) {
const startIndex = chunkInfo . chunkIndex * chunkInfo . chunkSize ;
const endIndex = ( chunkInfo . chunkIndex + 1 ) * chunkInfo . chunkSize ;
return urls . slice ( startIndex , endIndex );
}
return urls ;
}
function escapeValueForXml ( value ) {
if ( value === true || value === false )
return value ? "yes" : "no" ;
2026-01-27 16:02:45 +03:30
return xmlEscape ( String ( value ));
2025-07-23 16:57:31 +03:30
}
2026-01-27 16:02:45 +03:30
const yesNo = ( v ) => v === "yes" || v === true ? "yes" : "no" ;
2025-07-23 16:57:31 +03:30
const URLSET_OPENING_TAG = '<urlset xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:video="http://www.google.com/schemas/sitemap-video/1.1" xmlns:xhtml="http://www.w3.org/1999/xhtml" xmlns:image="http://www.google.com/schemas/sitemap-image/1.1" xmlns:news="http://www.google.com/schemas/sitemap-news/0.9" xsi:schemaLocation="http://www.sitemaps.org/schemas/sitemap/0.9 http://www.sitemaps.org/schemas/sitemap/0.9/sitemap.xsd http://www.google.com/schemas/sitemap-image/1.1 http://www.google.com/schemas/sitemap-image/1.1/sitemap-image.xsd" xmlns="http://www.sitemaps.org/schemas/sitemap/0.9">' ;
2026-01-27 16:02:45 +03:30
function buildUrlXml ( url , NL , I1 , I2 , I3 , I4 ) {
let xml = ` ${ I1 } <url> ${ NL } ` ;
if ( url . loc ) xml += ` ${ I2 } <loc> ${ xmlEscape ( url . loc ) } </loc> ${ NL } ` ;
if ( url . lastmod ) xml += ` ${ I2 } <lastmod> ${ url . lastmod } </lastmod> ${ NL } ` ;
if ( url . changefreq ) xml += ` ${ I2 } <changefreq> ${ url . changefreq } </changefreq> ${ NL } ` ;
2025-07-23 16:57:31 +03:30
if ( url . priority !== void 0 ) {
2026-01-27 16:02:45 +03:30
const p = typeof url . priority === "number" ? url . priority : Number . parseFloat ( url . priority );
xml += ` ${ I2 } <priority> ${ p . toFixed ( 1 ) } </priority> ${ NL } ` ;
2025-07-23 16:57:31 +03:30
}
2026-01-27 16:02:45 +03:30
if ( url . alternatives ) {
for ( const alt of url . alternatives ) {
let attrs = "" ;
for ( const [ k , v ] of Object . entries ( alt )) attrs += ` ${ k } =" ${ xmlEscape ( String ( v )) } "` ;
xml += ` ${ I2 } <xhtml:link rel="alternate" ${ attrs } /> ${ NL } ` ;
2025-07-23 16:57:31 +03:30
}
}
2026-01-27 16:02:45 +03:30
if ( url . images ) {
for ( const img of url . images ) {
xml += ` ${ I2 } <image:image> ${ NL }${ I3 } <image:loc> ${ xmlEscape ( img . loc ) } </image:loc> ${ NL } ` ;
if ( img . title ) xml += ` ${ I3 } <image:title> ${ xmlEscape ( img . title ) } </image:title> ${ NL } ` ;
if ( img . caption ) xml += ` ${ I3 } <image:caption> ${ xmlEscape ( img . caption ) } </image:caption> ${ NL } ` ;
if ( img . geo_location ) xml += ` ${ I3 } <image:geo_location> ${ xmlEscape ( img . geo_location ) } </image:geo_location> ${ NL } ` ;
if ( img . license ) xml += ` ${ I3 } <image:license> ${ xmlEscape ( img . license ) } </image:license> ${ NL } ` ;
xml += ` ${ I2 } </image:image> ${ NL } ` ;
}
}
if ( url . videos ) {
for ( const video of url . videos ) {
xml += ` ${ I2 } <video:video> ${ NL }${ I3 } <video:title> ${ xmlEscape ( video . title ) } </video:title> ${ NL } ` ;
if ( video . thumbnail_loc ) xml += ` ${ I3 } <video:thumbnail_loc> ${ xmlEscape ( video . thumbnail_loc ) } </video:thumbnail_loc> ${ NL } ` ;
xml += ` ${ I3 } <video:description> ${ xmlEscape ( video . description ) } </video:description> ${ NL } ` ;
if ( video . content_loc ) xml += ` ${ I3 } <video:content_loc> ${ xmlEscape ( video . content_loc ) } </video:content_loc> ${ NL } ` ;
if ( video . player_loc ) xml += ` ${ I3 } <video:player_loc> ${ xmlEscape ( video . player_loc ) } </video:player_loc> ${ NL } ` ;
if ( video . duration !== void 0 ) xml += ` ${ I3 } <video:duration> ${ video . duration } </video:duration> ${ NL } ` ;
if ( video . expiration_date ) xml += ` ${ I3 } <video:expiration_date> ${ video . expiration_date } </video:expiration_date> ${ NL } ` ;
if ( video . rating !== void 0 ) xml += ` ${ I3 } <video:rating> ${ video . rating } </video:rating> ${ NL } ` ;
if ( video . view_count !== void 0 ) xml += ` ${ I3 } <video:view_count> ${ video . view_count } </video:view_count> ${ NL } ` ;
if ( video . publication_date ) xml += ` ${ I3 } <video:publication_date> ${ video . publication_date } </video:publication_date> ${ NL } ` ;
if ( video . family_friendly !== void 0 ) xml += ` ${ I3 } <video:family_friendly> ${ yesNo ( video . family_friendly ) } </video:family_friendly> ${ NL } ` ;
if ( video . restriction ) xml += ` ${ I3 } <video:restriction relationship=" ${ video . restriction . relationship || "allow" } "> ${ xmlEscape ( video . restriction . restriction ) } </video:restriction> ${ NL } ` ;
if ( video . platform ) xml += ` ${ I3 } <video:platform relationship=" ${ video . platform . relationship || "allow" } "> ${ xmlEscape ( video . platform . platform ) } </video:platform> ${ NL } ` ;
if ( video . requires_subscription !== void 0 ) xml += ` ${ I3 } <video:requires_subscription> ${ yesNo ( video . requires_subscription ) } </video:requires_subscription> ${ NL } ` ;
if ( video . price ) {
for ( const price of video . price ) {
const c = price . currency ? ` currency=" ${ price . currency } "` : "" ;
const t = price . type ? ` type=" ${ price . type } "` : "" ;
xml += ` ${ I3 } <video:price ${ c }${ t } > ${ xmlEscape ( String ( price . price ?? "" )) } </video:price> ${ NL } ` ;
}
}
if ( video . uploader ) {
const info = video . uploader . info ? ` info=" ${ xmlEscape ( video . uploader . info ) } "` : "" ;
xml += ` ${ I3 } <video:uploader ${ info } > ${ xmlEscape ( video . uploader . uploader ) } </video:uploader> ${ NL } ` ;
}
if ( video . live !== void 0 ) xml += ` ${ I3 } <video:live> ${ yesNo ( video . live ) } </video:live> ${ NL } ` ;
if ( video . tag ) {
const tags = Array . isArray ( video . tag ) ? video . tag : [ video . tag ];
for ( const t of tags ) xml += ` ${ I3 } <video:tag> ${ xmlEscape ( t ) } </video:tag> ${ NL } ` ;
}
if ( video . category ) xml += ` ${ I3 } <video:category> ${ xmlEscape ( video . category ) } </video:category> ${ NL } ` ;
if ( video . gallery_loc ) xml += ` ${ I3 } <video:gallery_loc> ${ xmlEscape ( video . gallery_loc ) } </video:gallery_loc> ${ NL } ` ;
xml += ` ${ I2 } </video:video> ${ NL } ` ;
}
}
if ( url . news ) {
xml += ` ${ I2 } <news:news> ${ NL }${ I3 } <news:publication> ${ NL } ` ;
xml += ` ${ I4 } <news:name> ${ xmlEscape ( url . news . publication . name ) } </news:name> ${ NL } ` ;
xml += ` ${ I4 } <news:language> ${ xmlEscape ( url . news . publication . language ) } </news:language> ${ NL } ` ;
xml += ` ${ I3 } </news:publication> ${ NL } ` ;
if ( url . news . title ) xml += ` ${ I3 } <news:title> ${ xmlEscape ( url . news . title ) } </news:title> ${ NL } ` ;
if ( url . news . publication_date ) xml += ` ${ I3 } <news:publication_date> ${ url . news . publication_date } </news:publication_date> ${ NL } ` ;
xml += ` ${ I2 } </news:news> ${ NL } ` ;
}
xml += ` ${ I1 } </url>` ;
return xml ;
2025-07-23 16:57:31 +03:30
}
2026-01-27 16:02:45 +03:30
function urlsToXml ( urls , resolvers , { version , xsl , credits , minify }, errorInfo ) {
let xslHref = xsl ? resolvers . relativeBaseUrlResolver ( xsl ) : false ;
if ( xslHref && errorInfo ? . messages . length ) {
xslHref = withQuery ( xslHref , {
errors : "true" ,
error_messages : errorInfo . messages ,
error_urls : errorInfo . urls
});
2025-07-23 16:57:31 +03:30
}
2026-01-27 16:02:45 +03:30
const NL = minify ? "" : "\n" ;
const I1 = minify ? "" : " " ;
const I2 = minify ? "" : " " ;
const I3 = minify ? "" : " " ;
const I4 = minify ? "" : " " ;
let xml = xslHref ? `<?xml version="1.0" encoding="UTF-8"?><?xml-stylesheet type="text/xsl" href=" ${ escapeValueForXml ( xslHref ) } "?> ${ NL } ` : `<?xml version="1.0" encoding="UTF-8"?> ${ NL } ` ;
xml += URLSET_OPENING_TAG + NL ;
2025-07-23 16:57:31 +03:30
for ( const url of urls ) {
2026-01-27 16:02:45 +03:30
xml += buildUrlXml ( url , NL , I1 , I2 , I3 , I4 ) + NL ;
2025-07-23 16:57:31 +03:30
}
2026-01-27 16:02:45 +03:30
xml += "</urlset>" ;
2025-07-23 16:57:31 +03:30
if ( credits ) {
2026-01-27 16:02:45 +03:30
xml += ` ${ NL } <!-- XML Sitemap generated by @nuxtjs/sitemap v ${ version } at ${ ( /* @__PURE__ */ new Date ()). toISOString () } -->` ;
2025-07-23 16:57:31 +03:30
}
2026-01-27 16:02:45 +03:30
return xml ;
2025-07-23 16:57:31 +03:30
}
2026-01-27 16:02:45 +03:30
function getPageKey ( pathWithoutPrefix ) {
const stripped = pathWithoutPrefix [ 0 ] === "/" ? pathWithoutPrefix . slice ( 1 ) : pathWithoutPrefix ;
return stripped . endsWith ( "/index" ) ? stripped . slice ( 0 , - 6 ) || "index" : stripped || "index" ;
}
2025-07-23 16:57:31 +03:30
function resolveSitemapEntries ( sitemap , urls , runtimeConfig , resolvers ) {
const {
autoI18n ,
isI18nMapped
} = runtimeConfig ;
const filterPath = createPathFilter ({
include : sitemap . include ,
exclude : sitemap . exclude
});
const _urls = urls . map (( _e ) => {
const e = preNormalizeEntry ( _e , resolvers );
if ( ! e . loc || ! filterPath ( e . loc ))
return false ;
return e ;
}). filter ( Boolean );
let validI18nUrlsForTransform = [];
const withoutPrefixPaths = {};
if ( autoI18n && autoI18n . strategy !== "no_prefix" ) {
const localeCodes = autoI18n . locales . map (( l ) => l . code );
2026-01-27 16:02:45 +03:30
const localeByCode = new Map ( autoI18n . locales . map (( l ) => [ l . code , l ]));
const isPrefixStrategy = autoI18n . strategy === "prefix" ;
const isPrefixExceptOrAndDefault = autoI18n . strategy === "prefix_and_default" || autoI18n . strategy === "prefix_except_default" ;
const xDefaultAndLocales = [{ code : "x-default" , _hreflang : "x-default" }, ... autoI18n . locales ];
const defaultLocale = autoI18n . defaultLocale ;
const hasPages = !! autoI18n . pages ;
const hasDifferentDomains = !! autoI18n . differentDomains ;
2025-07-23 16:57:31 +03:30
validI18nUrlsForTransform = _urls . map (( _e , i ) => {
if ( _e . _abs )
return false ;
const split = splitForLocales ( _e . _relativeLoc , localeCodes );
let localeCode = split [ 0 ];
const pathWithoutPrefix = split [ 1 ];
if ( ! localeCode )
2026-01-27 16:02:45 +03:30
localeCode = defaultLocale ;
2025-07-23 16:57:31 +03:30
const e = _e ;
e . _pathWithoutPrefix = pathWithoutPrefix ;
2026-01-27 16:02:45 +03:30
const locale = localeByCode . get ( localeCode );
2025-07-23 16:57:31 +03:30
if ( ! locale )
return false ;
e . _locale = locale ;
e . _index = i ;
2026-01-27 16:02:45 +03:30
e . _key = ` ${ e . _sitemap || "" }${ e . _path ? . pathname || "/" }${ e . _path ? . search || "" } ` ;
2025-07-23 16:57:31 +03:30
withoutPrefixPaths [ pathWithoutPrefix ] = withoutPrefixPaths [ pathWithoutPrefix ] || [];
if ( ! withoutPrefixPaths [ pathWithoutPrefix ]. some (( e2 ) => e2 . _locale . code === locale . code ))
withoutPrefixPaths [ pathWithoutPrefix ]. push ( e );
return e ;
}). filter ( Boolean );
for ( const e of validI18nUrlsForTransform ) {
if ( ! e . _i18nTransform && ! e . alternatives ? . length ) {
2026-01-27 16:02:45 +03:30
const alternatives = ( withoutPrefixPaths [ e . _pathWithoutPrefix ] || []). map (( u ) => {
2025-07-23 16:57:31 +03:30
const entries = [];
2026-01-27 16:02:45 +03:30
if ( u . _locale . code === defaultLocale ) {
2025-07-23 16:57:31 +03:30
entries . push ({
href : u . loc ,
hreflang : "x-default"
});
}
entries . push ({
href : u . loc ,
2026-01-27 16:02:45 +03:30
hreflang : u . _locale . _hreflang || defaultLocale
2025-07-23 16:57:31 +03:30
});
return entries ;
}). flat (). filter ( Boolean );
if ( alternatives . length )
e . alternatives = alternatives ;
} else if ( e . _i18nTransform ) {
delete e . _i18nTransform ;
2026-01-27 16:02:45 +03:30
if ( hasDifferentDomains ) {
const defLocale = localeByCode . get ( defaultLocale );
2025-07-23 16:57:31 +03:30
e . alternatives = [
{
2026-01-27 16:02:45 +03:30
... defLocale ,
2025-07-23 16:57:31 +03:30
code : "x-default"
},
... autoI18n . locales . filter (( l ) => !! l . domain )
]. map (( locale ) => {
return {
hreflang : locale . _hreflang ,
href : joinURL ( withHttps ( locale . domain ), e . _pathWithoutPrefix )
};
});
} else {
2026-01-27 16:02:45 +03:30
const pageKey = hasPages ? getPageKey ( e . _pathWithoutPrefix ) : "" ;
const pageMappings = hasPages ? autoI18n . pages [ pageKey ] : void 0 ;
const pathSearch = e . _path ? . search || "" ;
const pathWithoutPrefix = e . _pathWithoutPrefix ;
2025-07-23 16:57:31 +03:30
for ( const l of autoI18n . locales ) {
2026-01-27 16:02:45 +03:30
let loc = pathWithoutPrefix ;
if ( hasPages && pageMappings && pageMappings [ l . code ] !== void 0 ) {
const customPath = pageMappings [ l . code ];
if ( customPath === false )
continue ;
if ( typeof customPath === "string" )
loc = customPath [ 0 ] === "/" ? customPath : `/ ${ customPath } ` ;
} else if ( ! hasDifferentDomains && ! ( isPrefixExceptOrAndDefault && l . code === defaultLocale )) {
loc = joinURL ( `/ ${ l . code } ` , pathWithoutPrefix );
}
const _sitemap = isI18nMapped ? l . _sitemap : void 0 ;
const alternatives = [];
for ( const locale of xDefaultAndLocales ) {
const code = locale . code === "x-default" ? defaultLocale : locale . code ;
const isDefault = locale . code === "x-default" || locale . code === defaultLocale ;
let href = pathWithoutPrefix ;
if ( hasPages && pageMappings && pageMappings [ code ] !== void 0 ) {
const customPath = pageMappings [ code ];
2025-07-23 16:57:31 +03:30
if ( customPath === false )
continue ;
if ( typeof customPath === "string" )
2026-01-27 16:02:45 +03:30
href = customPath [ 0 ] === "/" ? customPath : `/ ${ customPath } ` ;
} else if ( isPrefixStrategy ) {
href = joinURL ( "/" , code , pathWithoutPrefix );
} else if ( isPrefixExceptOrAndDefault && ! isDefault ) {
href = joinURL ( "/" , code , pathWithoutPrefix );
2025-07-23 16:57:31 +03:30
}
2026-01-27 16:02:45 +03:30
if ( ! filterPath ( href ))
continue ;
alternatives . push ({
hreflang : locale . _hreflang ,
href
});
2025-07-23 16:57:31 +03:30
}
2026-01-27 16:02:45 +03:30
const { _index : _ , ... rest } = e ;
2025-07-23 16:57:31 +03:30
const newEntry = preNormalizeEntry ({
_sitemap ,
2026-01-27 16:02:45 +03:30
... rest ,
_key : ` ${ _sitemap || "" }${ loc || "/" }${ pathSearch } ` ,
2025-07-23 16:57:31 +03:30
_locale : l ,
loc ,
2026-01-27 16:02:45 +03:30
alternatives
2025-07-23 16:57:31 +03:30
}, resolvers );
if ( e . _locale . code === newEntry . _locale . code ) {
_urls [ e . _index ] = newEntry ;
e . _index = void 0 ;
} else {
_urls . push ( newEntry );
}
}
}
}
if ( isI18nMapped ) {
e . _sitemap = e . _sitemap || e . _locale . _sitemap ;
2026-01-27 16:02:45 +03:30
e . _key = ` ${ e . _sitemap || "" }${ e . loc || "/" }${ e . _path ? . search || "" } ` ;
2025-07-23 16:57:31 +03:30
}
if ( e . _index )
_urls [ e . _index ] = e ;
}
}
return _urls ;
}
async function buildSitemapUrls ( sitemap , resolvers , runtimeConfig , nitro ) {
const {
sitemaps ,
// enhancing
autoI18n ,
isI18nMapped ,
isMultiSitemap ,
// sorting
sortEntries ,
// chunking
defaultSitemapsChunkSize
} = runtimeConfig ;
2026-01-27 16:02:45 +03:30
const chunkSize = defaultSitemapsChunkSize || void 0 ;
const chunkInfo = parseChunkInfo ( sitemap . sitemapName , sitemaps , chunkSize );
function maybeSort ( urls2 ) {
return sortEntries ? sortInPlace ( urls2 ) : urls2 ;
2025-07-23 16:57:31 +03:30
}
2026-01-27 16:02:45 +03:30
function maybeSlice ( urls2 ) {
return sliceUrlsForChunk ( urls2 , sitemap . sitemapName , sitemaps , chunkSize );
2025-07-23 16:57:31 +03:30
}
if ( autoI18n ? . differentDomains ) {
2026-01-27 16:02:45 +03:30
const domain = autoI18n . locales . find (( e ) => e . language === sitemap . sitemapName || e . code === sitemap . sitemapName ) ? . domain ;
2025-07-23 16:57:31 +03:30
if ( domain ) {
const _tester = resolvers . canonicalUrlResolver ;
resolvers . canonicalUrlResolver = ( path ) => resolveSitePath ( path , {
absolute : true ,
withBase : false ,
siteUrl : withHttps ( domain ),
trailingSlash : _tester ( "/test/" ). endsWith ( "/" ),
base : "/"
});
}
}
let effectiveSitemap = sitemap ;
const baseSitemapName = chunkInfo . baseSitemapName ;
if ( chunkInfo . isChunked && baseSitemapName !== sitemap . sitemapName && sitemaps [ baseSitemapName ]) {
effectiveSitemap = sitemaps [ baseSitemapName ];
}
2026-01-27 16:02:45 +03:30
let sourcesInput = effectiveSitemap . includeAppSources ? [... await globalSitemapSources (), ... await childSitemapSources ( effectiveSitemap )] : await childSitemapSources ( effectiveSitemap );
2025-07-23 16:57:31 +03:30
if ( nitro && resolvers . event ) {
const ctx = {
event : resolvers . event ,
sitemapName : baseSitemapName ,
sources : sourcesInput
};
await nitro . hooks . callHook ( "sitemap:sources" , ctx );
sourcesInput = ctx . sources ;
}
const sources = await resolveSitemapSources ( sourcesInput , resolvers . event );
2026-01-27 16:02:45 +03:30
const failedSources = sources . filter (( source ) => source . error && source . _isFailure ). map (( source ) => ({
url : typeof source . fetch === "string" ? source . fetch : source . fetch ? .[ 0 ] || "unknown" ,
error : source . error || "Unknown error"
}));
2025-07-23 16:57:31 +03:30
const resolvedCtx = {
urls : sources . flatMap (( s ) => s . urls ),
sitemapName : sitemap . sitemapName ,
event : resolvers . event
};
await nitro ? . hooks . callHook ( "sitemap:input" , resolvedCtx );
const enhancedUrls = resolveSitemapEntries ( sitemap , resolvedCtx . urls , { autoI18n , isI18nMapped }, resolvers );
const filteredUrls = enhancedUrls . filter (( e ) => {
2026-01-27 16:02:45 +03:30
if ( e . _sitemap === false )
return false ;
if ( isMultiSitemap && e . _sitemap && sitemap . sitemapName ) {
if ( sitemap . _isChunking )
return sitemap . sitemapName . startsWith ( e . _sitemap + "-" );
2025-07-23 16:57:31 +03:30
return e . _sitemap === sitemap . sitemapName ;
2026-01-27 16:02:45 +03:30
}
2025-07-23 16:57:31 +03:30
return true ;
});
const sortedUrls = maybeSort ( filteredUrls );
2026-01-27 16:02:45 +03:30
const urls = maybeSlice ( sortedUrls );
return { urls , failedSources };
2025-07-23 16:57:31 +03:30
}
2026-01-27 16:02:45 +03:30
function useNitroUrlResolvers ( e ) {
const canonicalQuery = getQuery ( e ). canonical ;
const isShowingCanonical = typeof canonicalQuery !== "undefined" && canonicalQuery !== "false" ;
const siteConfig = useSiteConfig ( e );
return {
event : e ,
fixSlashes : ( path ) => fixSlashes ( siteConfig . trailingSlash , path ),
// we need these as they depend on the nitro event
canonicalUrlResolver : createSitePathResolver ( e , {
canonical : isShowingCanonical || true ,
absolute : true ,
withBase : true
}),
relativeBaseUrlResolver : createSitePathResolver ( e , { absolute : false , withBase : true })
};
}
async function buildSitemapXml ( event , definition , resolvers , runtimeConfig ) {
const { sitemapName } = definition ;
const nitro = useNitroApp ();
const { urls : sitemapUrls , failedSources } = await buildSitemapUrls ( definition , resolvers , runtimeConfig , nitro );
const routeRuleMatcher = createNitroRouteRuleMatcher ();
const { autoI18n } = runtimeConfig ;
let validCount = 0 ;
for ( let i = 0 ; i < sitemapUrls . length ; i ++ ) {
const u = sitemapUrls [ i ];
const path = u . _path ? . pathname || u . loc ;
let routeRules = routeRuleMatcher ( path );
if ( autoI18n ? . locales && autoI18n ? . strategy !== "no_prefix" ) {
const match = splitForLocales ( path , autoI18n . locales . map (( l ) => l . code ));
const pathWithoutPrefix = match [ 1 ];
if ( pathWithoutPrefix && pathWithoutPrefix !== path )
routeRules = defu ( routeRules , routeRuleMatcher ( pathWithoutPrefix ));
}
if ( routeRules . sitemap === false )
continue ;
if ( typeof routeRules . robots !== "undefined" && ! routeRules . robots )
continue ;
const hasRobotsDisabled = Object . entries ( routeRules . headers || {}). some (([ name , value ]) => name . toLowerCase () === "x-robots-tag" && value . toLowerCase (). includes ( "noindex" ));
if ( routeRules . redirect || hasRobotsDisabled )
continue ;
sitemapUrls [ validCount ++ ] = routeRules . sitemap ? defu ( u , routeRules . sitemap ) : u ;
}
sitemapUrls . length = validCount ;
const locSize = sitemapUrls . length ;
const resolvedCtx = {
urls : sitemapUrls ,
sitemapName ,
event
};
await nitro . hooks . callHook ( "sitemap:resolved" , resolvedCtx );
if ( resolvedCtx . urls . length !== locSize ) {
resolvedCtx . urls = resolvedCtx . urls . map (( e ) => preNormalizeEntry ( e , resolvers ));
}
const maybeSort = ( urls2 ) => runtimeConfig . sortEntries ? sortInPlace ( urls2 ) : urls2 ;
const defaults = definition . defaults || {};
const normalizedPreDedupe = resolvedCtx . urls . map (( e ) => normaliseEntry ( e , defaults , resolvers ));
const urls = maybeSort ( mergeOnKey ( normalizedPreDedupe , "_key" ). map (( e ) => normaliseEntry ( e , defaults , resolvers )));
if ( definition . _isChunking && definition . sitemapName . includes ( "-" )) {
const parts = definition . sitemapName . split ( "-" );
const lastPart = parts . pop ();
if ( ! Number . isNaN ( Number ( lastPart ))) {
const chunkIndex = Number ( lastPart );
const baseSitemapName = parts . join ( "-" );
if ( urls . length === 0 && chunkIndex > 0 ) {
throw createError$1 ({
statusCode : 404 ,
message : `Sitemap chunk ${ chunkIndex } for " ${ baseSitemapName } " does not exist.`
});
}
}
}
const errorInfo = failedSources . length > 0 ? {
messages : failedSources . map (( f ) => f . error ),
urls : failedSources . map (( f ) => f . url )
} : void 0 ;
const sitemap = urlsToXml ( urls , resolvers , runtimeConfig , errorInfo );
const ctx = { sitemap , sitemapName , event };
await nitro . hooks . callHook ( "sitemap:output" , ctx );
return ctx . sitemap ;
}
const buildSitemapXmlCached = defineCachedFunction (
buildSitemapXml ,
{
name : "sitemap:xml" ,
group : "sitemap" ,
maxAge : 60 * 10 ,
// Default 10 minutes
base : "sitemap" ,
// Use the sitemap storage
getKey : ( event , definition ) => {
const host = getHeader ( event , "host" ) || getHeader ( event , "x-forwarded-host" ) || "" ;
const proto = getHeader ( event , "x-forwarded-proto" ) || "https" ;
const sitemapName = definition . sitemapName || "default" ;
return ` ${ sitemapName } - ${ proto } - ${ host } ` ;
},
swr : true
// Enable stale-while-revalidate
}
);
async function createSitemap ( event , definition , runtimeConfig ) {
const resolvers = useNitroUrlResolvers ( event );
const shouldCache = typeof runtimeConfig . cacheMaxAgeSeconds === "number" && runtimeConfig . cacheMaxAgeSeconds > 0 ;
const xml = shouldCache ? await buildSitemapXmlCached ( event , definition , resolvers , runtimeConfig ) : await buildSitemapXml ( event , definition , resolvers , runtimeConfig );
setHeader ( event , "Content-Type" , "text/xml; charset=UTF-8" );
if ( runtimeConfig . cacheMaxAgeSeconds ) {
setHeader ( event , "Cache-Control" , `public, max-age= ${ runtimeConfig . cacheMaxAgeSeconds } , s-maxage= ${ runtimeConfig . cacheMaxAgeSeconds } , stale-while-revalidate=3600` );
const now = /* @__PURE__ */ new Date ();
setHeader ( event , "X-Sitemap-Generated" , now . toISOString ());
setHeader ( event , "X-Sitemap-Cache-Duration" , ` ${ runtimeConfig . cacheMaxAgeSeconds } s` );
const expiryTime = new Date ( now . getTime () + runtimeConfig . cacheMaxAgeSeconds * 1e3 );
setHeader ( event , "X-Sitemap-Cache-Expires" , expiryTime . toISOString ());
const remainingSeconds = Math . floor (( expiryTime . getTime () - now . getTime ()) / 1e3 );
setHeader ( event , "X-Sitemap-Cache-Remaining" , ` ${ remainingSeconds } s` );
} else {
setHeader ( event , "Cache-Control" , `no-cache, no-store` );
}
event . context . _isSitemap = true ;
return xml ;
}
async function sitemapXmlEventHandler ( e ) {
const runtimeConfig = useSitemapRuntimeConfig ();
const { sitemaps } = runtimeConfig ;
if ( "index" in sitemaps )
return sendRedirect ( e , withBase ( "/sitemap_index.xml" , useRuntimeConfig (). app . baseURL ), 301 );
return createSitemap ( e , Object . values ( sitemaps )[ 0 ], runtimeConfig );
}
const _HI5Ohx = defineEventHandler ( sitemapXmlEventHandler );
2025-07-23 16:57:31 +03:30
function defineNitroPlugin ( def ) {
return def ;
}
function defineRenderHandler ( render ) {
const runtimeConfig = useRuntimeConfig ();
return eventHandler ( async ( event ) => {
const nitroApp = useNitroApp ();
const ctx = { event , render , response : void 0 };
await nitroApp . hooks . callHook ( "render:before" , ctx );
if ( ! ctx . response ) {
if ( event . path === ` ${ runtimeConfig . app . baseURL } favicon.ico` ) {
setResponseHeader ( event , "Content-Type" , "image/x-icon" );
return send (
event ,
"data:image/gif;base64,R0lGODlhAQABAIAAAAAAAP///yH5BAEAAAAALAAAAAABAAEAAAIBRAA7"
);
}
ctx . response = await ctx . render ( event );
if ( ! ctx . response ) {
const _currentStatus = getResponseStatus ( event );
setResponseStatus ( event , _currentStatus === 200 ? 500 : _currentStatus );
return send (
event ,
"No response returned from render handler: " + event . path
);
}
}
await nitroApp . hooks . callHook ( "render:response" , ctx . response , ctx );
if ( ctx . response . headers ) {
setResponseHeaders ( event , ctx . response . headers );
}
if ( ctx . response . statusCode || ctx . response . statusMessage ) {
setResponseStatus (
event ,
ctx . response . statusCode ,
ctx . response . statusMessage
);
}
return ctx . response . body ;
});
}
function baseURL () {
return useRuntimeConfig (). app . baseURL ;
}
function buildAssetsDir () {
return useRuntimeConfig (). app . buildAssetsDir ;
}
function buildAssetsURL (... path ) {
return joinRelativeURL ( publicAssetsURL (), buildAssetsDir (), ... path );
}
function publicAssetsURL (... path ) {
const app = useRuntimeConfig (). app ;
const publicBase = app . cdnURL || app . baseURL ;
return path . length ? joinRelativeURL ( publicBase , ... path ) : publicBase ;
}
2026-01-27 16:02:45 +03:30
const defineSitemapEventHandler = defineEventHandler ;
2025-07-23 16:57:31 +03:30
2026-01-27 16:02:45 +03:30
const _YlbjoI = lazyEventHandler (() => {
2025-07-23 16:57:31 +03:30
const opts = useRuntimeConfig (). ipx || {};
const fsDir = opts ? . fs ? . dir ? ( Array . isArray ( opts . fs . dir ) ? opts . fs . dir : [ opts . fs . dir ]). map (( dir ) => isAbsolute ( dir ) ? dir : fileURLToPath ( new URL ( dir , globalThis . _importMeta_ . url ))) : void 0 ;
const fsStorage = opts . fs ? . dir ? ipxFSStorage ({ ... opts . fs , dir : fsDir }) : void 0 ;
const httpStorage = opts . http ? . domains ? ipxHttpStorage ({ ... opts . http }) : void 0 ;
if ( ! fsStorage && ! httpStorage ) {
throw new Error ( "IPX storage is not configured!" );
}
const ipxOptions = {
... opts ,
storage : fsStorage || httpStorage ,
httpStorage
};
const ipx = createIPX ( ipxOptions );
const ipxHandler = createIPXH3Handler ( ipx );
return useBase ( opts . baseURL , ipxHandler );
});
2026-01-27 16:02:45 +03:30
const _lazy_UQSY1N = () => import ( '../routes/api/__sitemap__/urls.mjs' );
const _lazy_BmQo8_ = () => import ( '../routes/api/stories.mjs' );
const _lazy_UrvOu6 = () => import ( '../routes/manifest.webmanifest.get.mjs' );
const _lazy_6w68fW = () => import ( '../routes/renderer.mjs' ). then ( function ( n ) { return n . r ; });
2025-07-23 16:57:31 +03:30
const handlers = [
2026-01-27 16:02:45 +03:30
{ route : '' , handler : _ZmxIja , lazy : false , middleware : true , method : undefined },
{ route : '' , handler : _2iH1rY , lazy : false , middleware : true , method : undefined },
{ route : '/api/__sitemap__/urls' , handler : _lazy_UQSY1N , lazy : true , middleware : false , method : undefined },
{ route : '/api/stories' , handler : _lazy_BmQo8_ , lazy : true , middleware : false , method : undefined },
{ route : '/manifest.webmanifest' , handler : _lazy_UrvOu6 , lazy : true , middleware : false , method : "get" },
{ route : '/__nuxt_error' , handler : _lazy_6w68fW , lazy : true , middleware : false , method : undefined },
2025-07-23 16:57:31 +03:30
{ route : '/__nuxt_island/**' , handler : _SxA8c9 , lazy : false , middleware : false , method : undefined },
2026-01-27 16:02:45 +03:30
{ route : '' , handler : _0pBAf1 , lazy : false , middleware : true , method : undefined },
{ route : '/__sitemap__/style.xsl' , handler : _wZAoUF , lazy : false , middleware : false , method : undefined },
{ route : '/sitemap.xml' , handler : _HI5Ohx , lazy : false , middleware : false , method : undefined },
{ route : '/_ipx/**' , handler : _YlbjoI , lazy : false , middleware : false , method : undefined },
{ route : '/**' , handler : _lazy_6w68fW , lazy : true , middleware : false , method : undefined }
2025-07-23 16:57:31 +03:30
];
function createNitroApp () {
const config = useRuntimeConfig ();
const hooks = createHooks ();
const captureError = ( error , context = {}) => {
const promise = hooks . callHookParallel ( "error" , error , context ). catch (( error_ ) => {
console . error ( "Error while capturing another error" , error_ );
});
if ( context . event && isEvent ( context . event )) {
const errors = context . event . context . nitro ? . errors ;
if ( errors ) {
errors . push ({ error , context });
}
if ( context . event . waitUntil ) {
context . event . waitUntil ( promise );
}
}
};
const h3App = createApp ({
debug : destr ( false ),
onError : ( error , event ) => {
captureError ( error , { event , tags : [ "request" ] });
return errorHandler ( error , event );
},
onRequest : async ( event ) => {
event . context . nitro = event . context . nitro || { errors : [] };
const fetchContext = event . node . req ? . __unenv__ ;
if ( fetchContext ? . _platform ) {
event . context = {
_platform : fetchContext ? . _platform ,
// #3335
... fetchContext . _platform ,
... event . context
};
}
if ( ! event . context . waitUntil && fetchContext ? . waitUntil ) {
event . context . waitUntil = fetchContext . waitUntil ;
}
event . fetch = ( req , init ) => fetchWithEvent ( event , req , init , { fetch : localFetch });
event . $fetch = ( req , init ) => fetchWithEvent ( event , req , init , {
fetch : $fetch
});
event . waitUntil = ( promise ) => {
if ( ! event . context . nitro . _waitUntilPromises ) {
event . context . nitro . _waitUntilPromises = [];
}
event . context . nitro . _waitUntilPromises . push ( promise );
if ( event . context . waitUntil ) {
event . context . waitUntil ( promise );
}
};
event . captureError = ( error , context ) => {
captureError ( error , { event , ... context });
};
2026-01-27 16:02:45 +03:30
await nitroApp$1 . hooks . callHook ( "request" , event ). catch (( error ) => {
2025-07-23 16:57:31 +03:30
captureError ( error , { event , tags : [ "request" ] });
});
},
onBeforeResponse : async ( event , response ) => {
2026-01-27 16:02:45 +03:30
await nitroApp$1 . hooks . callHook ( "beforeResponse" , event , response ). catch (( error ) => {
2025-07-23 16:57:31 +03:30
captureError ( error , { event , tags : [ "request" , "response" ] });
});
},
onAfterResponse : async ( event , response ) => {
2026-01-27 16:02:45 +03:30
await nitroApp$1 . hooks . callHook ( "afterResponse" , event , response ). catch (( error ) => {
2025-07-23 16:57:31 +03:30
captureError ( error , { event , tags : [ "request" , "response" ] });
});
}
});
const router = createRouter ({
preemptive : true
});
const nodeHandler = toNodeListener ( h3App );
2026-01-27 16:02:45 +03:30
const localCall = ( aRequest ) => b$1 (
nodeHandler ,
aRequest
);
2025-07-23 16:57:31 +03:30
const localFetch = ( input , init ) => {
if ( ! input . toString (). startsWith ( "/" )) {
return globalThis . fetch ( input , init );
}
2026-01-27 16:02:45 +03:30
return C$1 (
2025-07-23 16:57:31 +03:30
nodeHandler ,
input ,
init
). then (( response ) => normalizeFetchResponse ( response ));
};
const $fetch = createFetch ({
fetch : localFetch ,
Headers : Headers$1 ,
defaults : { baseURL : config . app . baseURL }
});
globalThis . $fetch = $fetch ;
h3App . use ( createRouteRulesHandler ({ localFetch }));
for ( const h of handlers ) {
let handler = h . lazy ? lazyEventHandler ( h . handler ) : h . handler ;
if ( h . middleware || ! h . route ) {
const middlewareBase = ( config . app . baseURL + ( h . route || "/" )). replace (
/\/+/g ,
"/"
);
h3App . use ( middlewareBase , handler );
} else {
const routeRules = getRouteRulesForPath (
h . route . replace ( /:\w+|\*\*/g , "_" )
);
if ( routeRules . cache ) {
handler = cachedEventHandler ( handler , {
group : "nitro/routes" ,
... routeRules . cache
});
}
router . use ( h . route , handler , h . method );
}
}
h3App . use ( config . app . baseURL , router . handler );
const app = {
hooks ,
h3App ,
router ,
localCall ,
localFetch ,
captureError
};
return app ;
}
function runNitroPlugins ( nitroApp2 ) {
for ( const plugin of plugins ) {
try {
plugin ( nitroApp2 );
} catch ( error ) {
nitroApp2 . captureError ( error , { tags : [ "plugin" ] });
throw error ;
}
}
}
2026-01-27 16:02:45 +03:30
const nitroApp$1 = createNitroApp ();
2025-07-23 16:57:31 +03:30
function useNitroApp () {
2026-01-27 16:02:45 +03:30
return nitroApp$1 ;
2025-07-23 16:57:31 +03:30
}
2026-01-27 16:02:45 +03:30
runNitroPlugins ( nitroApp$1 );
2025-07-23 16:57:31 +03:30
const debug = (... args ) => {
};
function GracefulShutdown ( server , opts ) {
opts = opts || {};
const options = Object . assign (
{
signals : "SIGINT SIGTERM" ,
timeout : 3e4 ,
development : false ,
forceExit : true ,
onShutdown : ( signal ) => Promise . resolve ( signal ),
preShutdown : ( signal ) => Promise . resolve ( signal )
},
opts
);
let isShuttingDown = false ;
const connections = {};
let connectionCounter = 0 ;
const secureConnections = {};
let secureConnectionCounter = 0 ;
let failed = false ;
let finalRun = false ;
function onceFactory () {
let called = false ;
return ( emitter , events , callback ) => {
function call () {
if ( ! called ) {
called = true ;
return Reflect . apply ( callback , this , arguments );
}
}
for ( const e of events ) {
emitter . on ( e , call );
}
};
}
const signals = options . signals . split ( " " ). map (( s ) => s . trim ()). filter (( s ) => s . length > 0 );
const once = onceFactory ();
once ( process , signals , ( signal ) => {
debug ( "received shut down signal" , signal );
shutdown ( signal ). then (() => {
if ( options . forceExit ) {
process . exit ( failed ? 1 : 0 );
}
}). catch (( error ) => {
debug ( "server shut down error occurred" , error );
process . exit ( 1 );
});
});
function isFunction ( functionToCheck ) {
const getType = Object . prototype . toString . call ( functionToCheck );
return /^\[object\s([A-Za-z]+)?Function]$/ . test ( getType );
}
function destroy ( socket , force = false ) {
if ( socket . _isIdle && isShuttingDown || force ) {
socket . destroy ();
if ( socket . server instanceof http . Server ) {
delete connections [ socket . _connectionId ];
} else {
delete secureConnections [ socket . _connectionId ];
}
}
}
function destroyAllConnections ( force = false ) {
debug ( "Destroy Connections : " + ( force ? "forced close" : "close" ));
let counter = 0 ;
let secureCounter = 0 ;
for ( const key of Object . keys ( connections )) {
const socket = connections [ key ];
const serverResponse = socket . _httpMessage ;
if ( serverResponse && ! force ) {
if ( ! serverResponse . headersSent ) {
serverResponse . setHeader ( "connection" , "close" );
}
} else {
counter ++ ;
destroy ( socket );
}
}
debug ( "Connections destroyed : " + counter );
debug ( "Connection Counter : " + connectionCounter );
for ( const key of Object . keys ( secureConnections )) {
const socket = secureConnections [ key ];
const serverResponse = socket . _httpMessage ;
if ( serverResponse && ! force ) {
if ( ! serverResponse . headersSent ) {
serverResponse . setHeader ( "connection" , "close" );
}
} else {
secureCounter ++ ;
destroy ( socket );
}
}
debug ( "Secure Connections destroyed : " + secureCounter );
debug ( "Secure Connection Counter : " + secureConnectionCounter );
}
server . on ( "request" , ( req , res ) => {
req . socket . _isIdle = false ;
if ( isShuttingDown && ! res . headersSent ) {
res . setHeader ( "connection" , "close" );
}
res . on ( "finish" , () => {
req . socket . _isIdle = true ;
destroy ( req . socket );
});
});
server . on ( "connection" , ( socket ) => {
if ( isShuttingDown ) {
socket . destroy ();
} else {
const id = connectionCounter ++ ;
socket . _isIdle = true ;
socket . _connectionId = id ;
connections [ id ] = socket ;
socket . once ( "close" , () => {
delete connections [ socket . _connectionId ];
});
}
});
server . on ( "secureConnection" , ( socket ) => {
if ( isShuttingDown ) {
socket . destroy ();
} else {
const id = secureConnectionCounter ++ ;
socket . _isIdle = true ;
socket . _connectionId = id ;
secureConnections [ id ] = socket ;
socket . once ( "close" , () => {
delete secureConnections [ socket . _connectionId ];
});
}
});
process . on ( "close" , () => {
debug ( "closed" );
});
function shutdown ( sig ) {
function cleanupHttp () {
destroyAllConnections ();
debug ( "Close http server" );
return new Promise (( resolve , reject ) => {
server . close (( err ) => {
if ( err ) {
return reject ( err );
}
return resolve ( true );
});
});
}
debug ( "shutdown signal - " + sig );
if ( options . development ) {
debug ( "DEV-Mode - immediate forceful shutdown" );
return process . exit ( 0 );
}
function finalHandler () {
if ( ! finalRun ) {
finalRun = true ;
if ( options . finally && isFunction ( options . finally )) {
debug ( "executing finally()" );
options . finally ();
}
}
return Promise . resolve ();
}
function waitForReadyToShutDown ( totalNumInterval ) {
debug ( `waitForReadyToShutDown... ${ totalNumInterval } ` );
if ( totalNumInterval === 0 ) {
debug (
`Could not close connections in time ( ${ options . timeout } ms), will forcefully shut down`
);
return Promise . resolve ( true );
}
const allConnectionsClosed = Object . keys ( connections ). length === 0 && Object . keys ( secureConnections ). length === 0 ;
if ( allConnectionsClosed ) {
debug ( "All connections closed. Continue to shutting down" );
return Promise . resolve ( false );
}
debug ( "Schedule the next waitForReadyToShutdown" );
return new Promise (( resolve ) => {
setTimeout (() => {
resolve ( waitForReadyToShutDown ( totalNumInterval - 1 ));
}, 250 );
});
}
if ( isShuttingDown ) {
return Promise . resolve ();
}
debug ( "shutting down" );
return options . preShutdown ( sig ). then (() => {
isShuttingDown = true ;
cleanupHttp ();
}). then (() => {
const pollIterations = options . timeout ? Math . round ( options . timeout / 250 ) : 0 ;
return waitForReadyToShutDown ( pollIterations );
}). then (( force ) => {
debug ( "Do onShutdown now" );
if ( force ) {
destroyAllConnections ( force );
}
return options . onShutdown ( sig );
}). then ( finalHandler ). catch (( error ) => {
const errString = typeof error === "string" ? error : JSON . stringify ( error );
debug ( errString );
failed = true ;
throw errString ;
});
}
function shutdownManual () {
return shutdown ( "manual" );
}
return shutdownManual ;
}
function getGracefulShutdownConfig () {
return {
disabled : !! process . env . NITRO_SHUTDOWN_DISABLED ,
signals : ( process . env . NITRO_SHUTDOWN_SIGNALS || "SIGTERM SIGINT" ). split ( " " ). map (( s ) => s . trim ()),
timeout : Number . parseInt ( process . env . NITRO_SHUTDOWN_TIMEOUT || "" , 10 ) || 3e4 ,
forceExit : ! process . env . NITRO_SHUTDOWN_NO_FORCE_EXIT
};
}
function setupGracefulShutdown ( listener , nitroApp ) {
const shutdownConfig = getGracefulShutdownConfig ();
if ( shutdownConfig . disabled ) {
return ;
}
GracefulShutdown ( listener , {
signals : shutdownConfig . signals . join ( " " ),
timeout : shutdownConfig . timeout ,
forceExit : shutdownConfig . forceExit ,
onShutdown : async () => {
await new Promise (( resolve ) => {
const timeout = setTimeout (() => {
console . warn ( "Graceful shutdown timeout, force exiting..." );
resolve ();
}, shutdownConfig . timeout );
nitroApp . hooks . callHook ( "close" ). catch (( error ) => {
console . error ( error );
}). finally (() => {
clearTimeout ( timeout );
resolve ();
});
});
}
});
}
2026-01-27 16:02:45 +03:30
const cert = process . env . NITRO_SSL_CERT ;
const key = process . env . NITRO_SSL_KEY ;
const nitroApp = useNitroApp ();
const server = cert && key ? new Server ({ key , cert }, toNodeListener ( nitroApp . h3App )) : new Server$1 ( toNodeListener ( nitroApp . h3App ));
const port = destr ( process . env . NITRO_PORT || process . env . PORT ) || 3e3 ;
const host = process . env . NITRO_HOST || process . env . HOST ;
const path = process . env . NITRO_UNIX_SOCKET ;
const listener = server . listen ( path ? { path } : { port , host }, ( err ) => {
if ( err ) {
console . error ( err );
process . exit ( 1 );
}
const protocol = cert && key ? "https" : "http" ;
const addressInfo = listener . address ();
if ( typeof addressInfo === "string" ) {
console . log ( `Listening on unix socket ${ addressInfo } ` );
return ;
}
const baseURL = ( useRuntimeConfig (). app . baseURL || "" ). replace ( /\/$/ , "" );
const url = ` ${ protocol } :// ${ addressInfo . family === "IPv6" ? `[ ${ addressInfo . address } ]` : addressInfo . address } : ${ addressInfo . port }${ baseURL } ` ;
console . log ( `Listening on ${ url } ` );
});
trapUnhandledNodeErrors ();
setupGracefulShutdown ( listener , nitroApp );
const nodeServer = {};
export { getContext as A , baseURL as B , createHooks as C , executeAsync as D , toRouteMatcher as E , createRouter$1 as F , nodeServer as G , defu as a , withoutTrailingSlash as b , defineSitemapEventHandler as c , defineEventHandler as d , buildAssetsURL as e , getResponseStatus as f , getResponseStatusText as g , hasProtocol as h , defineRenderHandler as i , joinURL as j , publicAssetsURL as k , getQuery as l , createError$1 as m , destr as n , getRouteRules as o , parseQuery as p , useNitroApp as q , withBase as r , withQuery as s , i$1 as t , useRuntimeConfig as u , s$1 as v , withTrailingSlash as w , l$1 as x , isScriptProtocol as y , sanitizeStatusCode as z };