PageSourceSearch

https://mnetplus.world/build-outputs/fe-main/_next/static/chunks/5359-fe830e0cf8fd045c.js

js mnetplus.world collected 2026-10-01 11:26:01 UTC 13,404 bytes, 1 lines download raw bytes

1!function(){try{var e="u">typeof window?window:"u">typeof global?global:"u">typeof globalThis?globalThis:"u">typeof self?self:{};e._sentryModuleMetadata=e._sentryModuleMetadata||{},e._sentryModuleMetadata[(new e.Error).stack]=function(e){for(var t=1;t<arguments.length;t++){var r=arguments[t];if(null!=r)for(var l in r)r.hasOwnProperty(l)&&(e[l]=r[l])}return e}({},e._sentryModuleMetadata[(new e.Error).stack],{"_sentryBundlerPluginAppKey:fe-main":!0});var t=(new e.Error).stack;t&&(e._sentryDebugIds=e._sentryDebugIds||{},e._sentryDebugIds[t]="cb9232c3-d296-4da9-a205-c784c86d2c6c",e._sentryDebugIdIdentifier="sentry-dbid-cb9232c3-d296-4da9-a205-c784c86d2c6c")}catch(e){}}();"use strict";(self.webpackChunk_N_E=self.webpackChunk_N_E||[]).push([[5359],{65359:(e,t,r)=>{r.d(t,{FeatureFlagDebugPanel:()=>f,sm:()=>d,e6:()=>u});var l=r(34379),a=r(7963),i=r(18603),n=r(94131),s=r(69460);let o=(0,a.createContext)(null),d=({children:e,url:t,initialPayload:r,initialRevision:d,attributes:u={},refreshIntervalMs:c=3e5,disabledFeaturePolicy:y="omit",autoRefresh:h=!0,conditionalRequest:p=!1,cacheKey:f,cache:b,fetchPayload:g,experimentTracker:v,log:x})=>{let[{runtime:m,initialResult:j}]=(0,a.useState)(()=>{let e=(0,s.createFeatureFlagRuntime)({url:t,cache:b??(0,n.dQ)({key:f}),fetchPayload:g,disabledFeaturePolicy:y,attributes:u,experimentTracker:v,conditionalRequest:p,log:x});return{runtime:e,initialResult:void 0===r?e.getLastResult():e.initFromPayload(r,d)}}),[k,w]=(0,a.useState)(j),[F,A]=(0,a.useState)("preloaded"===j.status),C=(0,a.useRef)(!1),I=(0,a.useRef)(j),E=(0,a.useCallback)(async()=>{if(C.current)return I.current;C.current=!0;try{let e=await m.sync();return I.current=e,w(e),"updated"!==e.status&&"not-modified"!==e.status||A(!0),e}finally{C.current=!1}},[m]);(0,a.useEffect)(()=>{if(void 0!==r)return void("preloaded"===j.status&&m.cachePayload(r,d));let e=m.hydrateFromCache();"preloaded"===e.status&&(I.current=e,w(e),A(!0))},[m]),(0,a.useEffect)(()=>{if(!h)return;E().catch(()=>{});let e=setInterval(()=>{E().catch(()=>{})},c),t=()=>{"visible"===document.visibilityState&&E().catch(()=>{})},r=()=>{E().catch(()=>{})};return document.addEventListener("visibilitychange",t),window.addEventListener("online",r),()=>{clearInterval(e),document.removeEventListener("visibilitychange",t),window.removeEventListener("online",r)}},[h,E,c]);let P=JSON.stringify(u);(0,a.useEffect)(()=>{m.refreshAttributes(u).catch(()=>{})},[m,P]);let S=(0,a.useMemo)(()=>({runtime:m,isReady:F,lastResult:k,refresh:E,attributes:u}),[m,F,k,E,P]);return(0,l.jsx)(o.Provider,{value:S,children:(0,l.jsx)(i.iX,{growthbook:m.growthbook,children:e})})},u=e=>{let t=Object.keys(e);return{defaults:e,keys:t,useFeatureFlag:t=>{let r=e[t],l=(0,i.Br)(t,r);return typeof l==typeof r&&("object"!=typeof r||null===r||"object"==typeof l&&null!==l)?l:r}}},c=e=>void 0===e?"-":""===e?'""':"string"==typeof e?e:String(JSON.stringify(e)),y={marginBottom:"1.5rem"},h={borderCollapse:"collapse",fontFamily:"ui-monospace, SFMono-Regular, Menlo, monospace",fontSize:"0.8125rem",width:"100%",maxWidth:"48rem"},p={border:"1px solid currentColor",padding:"0.25rem 0.5rem",textAlign:"left",wordBreak:"break-all"},f=({title:e="Feature Flags"})=>{let{runtime:t,isReady:r,lastResult:n,refresh:s,attributes:d}=(()=>{let e=(0,a.useContext)(o);if(null===e)throw Error("useFeatureFlagSync는 FeatureFlagProvider 안에서만 사용할 수 있다");return e})(),u=(0,i.mf)(),f=u?Object.keys(u.getFeatures()).sort().map(e=>{let t=u.evalFeature(e);return{key:e,value:t.value,source:t.source,ruleId:t.ruleId||void 0,variationKey:t.experimentResult?.key}}):[],b=Object.entries(d).sort(([e],[t])=>e.localeCompare(t));return(0,l.jsxs)("section",{"aria-labelledby":"feature-flag-debug-title",children:[(0,l.jsx)("h2",{id:"feature-flag-debug-title",children:e}),(0,l.jsx)("div",{style:y,children:(0,l.jsxs)("table",{style:h,children:[(0,l.jsx)("caption",{children:"동기화 상태"}),(0,l.jsxs)("tbody",{children:[(0,l.jsxs)("tr",{children:[(0,l.jsx)("th",{scope:"row",style:p,children:"조회 주소"}),(0,l.jsx)("td",{style:p,children:t.getUrl()})]}),(0,l.jsxs)("tr",{children:[(0,l.jsx)("th",{scope:"row",style:p,children:"상태"}),(0,l.jsx)("td",{style:p,children:n.status})]}),(0,l.jsxs)("tr",{children:[(0,l.jsx)("th",{scope:"row",style:p,children:"준비됨"}),(0,l.jsx)("td",{style:p,children:r?"yes":"no"})]}),(0,l.jsxs)("tr",{children:[(0,l.jsx)("th",{scope:"row",style:p,children:"피처 수"}),(0,l.jsx)("td",{style:p,children:n.featureCount})]}),(0,l.jsxs)("tr",{children:[(0,l.jsx)("th",{scope:"row",style:p,children:"제외 수"}),(0,l.jsx)("td",{style:p,children:n.skipped.length})]})]})]})}),(0,l.jsx)("div",{style:y,children:(0,l.jsxs)("table",{style:h,children:[(0,l.jsx)("caption",{children:"타겟팅 속성"}),(0,l.jsx)("tbody",{children:b.map(([e,t])=>(0,l.jsxs)("tr",{children:[(0,l.jsx)("th",{scope:"row",style:p,children:e}),(0,l.jsx)("td",{style:p,children:c(t)})]},e))})]})}),(0,l.jsx)("div",{style:y,children:(0,l.jsxs)("table",{style:h,children:[(0,l.jsx)("caption",{children:"플래그 결정"}),(0,l.jsx)("thead",{children:(0,l.jsxs)("tr",{children:[(0,l.jsx)("th",{scope:"col",style:p,children:"키"}),(0,l.jsx)("th",{scope:"col",style:p,children:"값"}),(0,l.jsx)("th",{scope:"col",style:p,children:"결정 경로"}),(0,l.jsx)("th",{scope:"col",style:p,children:"rule"})]})}),(0,l.jsx)("tbody",{children:f.map(e=>(0,l.jsxs)("tr",{children:[(0,l.jsx)("th",{scope:"row",style:p,children:e.key}),(0,l.jsx)("td",{style:p,children:c(e.value)}),(0,l.jsx)("td",{style:p,children:e.source}),(0,l.jsx)("td",{style:p,children:e.ruleId??"-"})]},e.key))})]})}),(0,l.jsx)("div",{style:y,children:(0,l.jsxs)("table",{style:h,children:[(0,l.jsx)("caption",{children:"변환에서 제외된 피처"}),(0,l.jsx)("thead",{children:(0,l.jsxs)("tr",{children:[(0,l.jsx)("th",{scope:"col",style:p,children:"키"}),(0,l.jsx)("th",{scope:"col",style:p,children:"사유"})]})}),(0,l.jsx)("tbody",{children:n.skipped.map(e=>(0,l.jsxs)("tr",{children:[(0,l.jsx)("th",{scope:"row",style:p,children:e.key}),(0,l.jsx)("td",{style:p,children:e.detail?`${e.reason} (${e.detail})`:e.reason})]},e.key))})]})}),(0,l.jsx)("button",{type:"button",onClick:()=>{s()},children:"다시 조회"})]})}},69460:(e,t,r)=>{r.d(t,{createFeatureFlagRuntime:()=>x});var l=r(18603),a=r(94131);let i=async(e,{revision:t,conditional:r=!1,etag:l,timeoutMs:a=8e3,
1signal:i,cache:n="no-cache",init:s}={})=>{let o,d,u,c=(o=new AbortController,d=setTimeout(()=>{o.abort(Error(`피처 플래그 조회 타임아웃 (${a}ms)`))},a),u=()=>o.abort(i?.reason),i?.aborted?u():i?.addEventListener("abort",u),{signal:o.signal,dispose:()=>{clearTimeout(d),i?.removeEventListener("abort",u)}}),y=new Headers(s?.headers);r&&l&&y.set("If-None-Match",l);let h=[...y.keys()].length>0;try{let r=await fetch(e,{...s,..."unset"===n?{}:{cache:n},signal:c.signal,headers:h?y:void 0});if(304===r.status)return{status:"not-modified"};if(!r.ok)throw Error(`피처 플래그 조회 실패: ${r.status} ${e}`);let l=await r.text(),a=(e=>{let t=0x811c9dc5;for(let r=0;r<e.length;r+=1)t^=e.charCodeAt(r),t=Math.imul(t,0x1000193);return`${(t>>>0).toString(16)}-${e.length}`})(l);if(void 0!==t&&t===a)return{status:"not-modified"};let i=r.headers.get("etag");return{status:"updated",payload:JSON.parse(l),revision:a,etag:i??void 0}}finally{c.dispose()}},n=e=>"object"==typeof e&&null!==e&&!Array.isArray(e),s=e=>{try{return JSON.parse(e)}catch{return e}},o=["savedGroups","savedGroupTargeting","prerequisites"],d=e=>null!=e&&(!Array.isArray(e)||e.length>0),u=["$inGroup","$notInGroup"],c=e=>Array.isArray(e)?e.some(c):!!n(e)&&Object.entries(e).some(([e,t])=>u.includes(e)||c(t)),y=e=>{if(!1===e.enabled)return{kind:"disabled"};if("force"!==e.type&&"rollout"!==e.type)return{kind:"unreproducible",reason:"unsupported-rule-type",detail:e.type};let t=(e=>{if(e)try{let t=JSON.parse(e);return n(t)?t:void 0}catch{return}})(e.condition);if(e.condition&&void 0===t)return{kind:"unreproducible",reason:"unresolvable-targeting",detail:"condition"};let r=o.find(t=>d(e[t]));if(r)return{kind:"unreproducible",reason:"unresolvable-targeting",detail:r};let l={};return void 0!==e.id&&(l.id=e.id),void 0!==t&&(l.condition=t),void 0!==e.value&&(l.force=s(e.value)),void 0!==e.coverage&&(l.coverage=e.coverage),e.hashAttribute&&(l.hashAttribute=e.hashAttribute),e.seed&&(l.seed=e.seed),{kind:"rule",rule:l}},h=e=>{let t;if(!e)return{kind:"none"};try{t=JSON.parse(e)}catch{return{kind:"none"}}if(!n(t)||!("defaultValue"in t))return{kind:"none"};let r=Array.isArray(t.rules)?t.rules:void 0;if(r?.some(e=>d(e?.parentConditions)))return{kind:"unreproducible",detail:"parentConditions"};if(r?.some(e=>c(e?.condition)))return{kind:"unreproducible",detail:"savedGroups"};let l={defaultValue:t.defaultValue};return r&&(l.rules=r),{kind:"feature",feature:l}},p=e=>{let{enabled:t,defaultValue:r,definition:l,rules:a}=e;return"boolean"!=typeof t||"string"!=typeof r||"string"!=typeof l?null:void 0===a?{enabled:t,defaultValue:r,definition:l,rules:[]}:Array.isArray(a)?{enabled:t,defaultValue:r,definition:l,rules:a}:null},f=(e,t,r)=>{let l=[];for(let a of t.rules){let t=y(a);if("unreproducible"===t.kind)return r.push({key:e,reason:t.reason,detail:t.detail}),null;"rule"===t.kind&&l.push(t.rule)}let a={defaultValue:s(t.defaultValue??"")};return l.length>0&&(a.rules=l),a},b=(e,{disabledFeaturePolicy:t="omit"}={})=>{let r={},l=[];if(!n(e))return{features:r,skipped:l};for(let[a,i]of Object.entries(e)){let e=n(i)?p(i):null;if(null===e){l.push({key:a,reason:"malformed-entry"});continue}if(!1===e.enabled){if("omit"===t){l.push({key:a,reason:"environment-disabled"});continue}r[a]={defaultValue:s(e.defaultValue??"")};continue}let o=h(e.definition);if("unreproducible"===o.kind){l.push({key:a,reason:"unresolvable-targeting",detail:o.detail});continue}let d="feature"===o.kind?o.feature:f(a,e,l);null!==d&&(r[a]=d)}return{features:r,skipped:l}},g=(e,t)=>({status:e,featureCount:0,skipped:[],error:t}),v=e=>"object"==typeof e&&null!==e&&!Array.isArray(e),x=({url:e,cache:t=(0,a.Pc)(),fetchPayload:r=i,disabledFeaturePolicy:n="omit",attributes:s={},experimentTracker:o,conditionalRequest:d=!1,log:u=()=>{}})=>{let c="function"==typeof e?e:()=>e,y,h,p=null,f=g("idle"),x=null,m=new l.NN({attributes:s,trackingCallback:o?(e,t)=>o({experimentKey:e.key,variationId:t.variationId,variationKey:t.key,hashAttribute:t.hashAttribute,hashValue:t.hashValue,inExperiment:t.inExperiment,featureId:t.featureId}
1):void 0,disableCache:!0,disableVisualExperiments:!0,disableJsInjection:!0}),j=e=>(f=e,e),k=(e,t)=>({status:e,featureCount:Object.keys(m.getFeatures()).length,skipped:f.skipped,error:t}),w=(e,t,r)=>{try{if(!v(e))throw TypeError("Invalid CDN payload");let{features:l,skipped:a}=b(e,{disabledFeaturePolicy:n});m.initSync({payload:{features:l}}),y=t,h=void 0,p={payload:e,revision:t,url:c()};let i=Object.keys(l).length;return u(`${i}개 피처를 렌더 전에 반영했다`),j({status:r,featureCount:i,skipped:a})}catch(e){return u(`페이로드 선반영 실패: ${String(e)}`),j(k("failed",e))}};return{growthbook:m,getUrl:c,getLastResult:()=>f,initFromPayload:(e,t)=>w(e,t,"preloaded"),hydrateFromCache:()=>{let e=t.read();if(!e)return j(g("idle"));if(e.url!==c())return u(`캐시 주소(${e.url??"없음"})가 현재 주소와 달라 버린다`),t.clear(),j(k("idle"));let r=w(e.payload,e.revision,"preloaded");return"preloaded"===r.status&&(h=e.etag,p=e),r},cachePayload:(e,r)=>{v(e)?t.write({payload:e,revision:r,url:c()}):u("잘못된 페이로드는 캐시에 저장하지 않는다")},sync:(e={})=>(x??(x=(async({signal:e})=>{let l,a=c();try{l=await r(a,{revision:y,conditional:d,etag:h,signal:e})}catch(t){return e?.aborted?(u(`페이로드 조회 취소: ${a}`),j(k("cancelled",t))):(u(`페이로드 조회 실패: ${a} (${String(t)})`),j(k("failed",t)))}if("not-modified"===l.status)return p?.url===a&&t.write(p),u("페이로드가 직전과 같아 재사용한다"),j(k("not-modified"));try{if(!v(l.payload))throw TypeError("Invalid CDN payload");let{features:e,skipped:r}=b(l.payload,{disabledFeaturePolicy:n});await m.setPayload({features:e}),y=l.revision,h=l.etag,p={payload:l.payload,revision:l.revision,etag:l.etag,url:a},t.write(p);let i=Object.keys(e).length;return u(`CDN에서 ${i}개 피처를 반영했다 (제외 ${r.length}개)`),j({status:"updated",featureCount:i,skipped:r})}catch(e){return u(`페이로드 반영 실패: ${a} (${String(e)})`),j(k("failed",e))}})(e).finally(()=>{x=null})),x),refreshAttributes:e=>m.setAttributes(e),clearCache:()=>{y=void 0,h=void 0,p=null,t.clear()},destroy:()=>m.destroy()}}},94131:(e,t,r)=>{r.d(t,{Pc:()=>l,dQ:()=>n});let l=()=>{let e=null;return{read:()=>e,write:t=>{e=t},clear:()=>{e=null}}},a="mp.feature-flag.payload",i=()=>{try{return window.localStorage}catch{return null}},n=({key:e=a,maxAgeMs:t=6048e5,storage:r=i,now:l=()=>Date.now()}={})=>{let n=()=>{try{r()?.removeItem(e)}catch{}};return{read:()=>{var a;let i,s=null;try{s=r()?.getItem(e)??null}catch{return null}if(!s)return null;try{i=JSON.parse(s)}catch{return n(),null}return"object"==typeof(a=i)&&null!==a&&"payload"in a&&"number"==typeof a.savedAt?l()-i.savedAt>t?(n(),null):{payload:i.payload,revision:i.revision,etag:i.etag,url:i.url}:(n(),null)},write:({payload:t,revision:a,etag:i,url:n})=>{let s={payload:t,revision:a,etag:i,url:n,savedAt:l()};try{r()?.setItem(e,JSON.stringify(s))}catch{}},clear:n}}}}]);

Line numbers count LF bytes from the start of the resource, as the search results do. Vendor segments are library code the classifier recognised; they are stored but not indexed. Bytes are shown as Latin1 characters, one per byte.