{"version":3,"sources":["webpack://_N_E/./node_modules/core-js/internals/date-to-iso-string.js","webpack://_N_E/./node_modules/core-js/internals/string-pad.js","webpack://_N_E/./node_modules/core-js/modules/es.date.to-iso-string.js","webpack://_N_E/./node_modules/is-mobile/index.js","webpack://_N_E/./lib/error-handle.ts","webpack://_N_E/./lib/get-cars-from-series.ts","webpack://_N_E/./lib/get-city-name.ts","webpack://_N_E/./lib/keyword-replace.ts","webpack://_N_E/./lib/router-redirect.ts","webpack://_N_E/./new/article-detail/index.tsx","webpack://_N_E/./pages/new_article_detail/index.tsx","webpack://_N_E/?44e2"],"names":["fails","padStart","abs","Math","DatePrototype","Date","prototype","getTime","nativeDateToISOString","toISOString","module","exports","call","NaN","isFinite","this","RangeError","date","year","getUTCFullYear","milliseconds","getUTCMilliseconds","sign","getUTCMonth","getUTCDate","getUTCHours","getUTCMinutes","getUTCSeconds","toLength","repeat","requireObjectCoercible","ceil","createMethod","IS_END","$this","maxLength","fillString","fillLen","stringFiller","S","String","stringLength","length","fillStr","undefined","intMaxLength","slice","start","end","$","target","proto","forced","isMobile","default","mobileRE","tabletRE","opts","ua","navigator","userAgent","headers","result","tablet","test","featureDetect","maxTouchPoints","indexOf","err","config","req","level","metrics","emitCounter","logger","errorType","name","stack","seriesId","seriesCarIds","fetch","getUrl","json","data","car_ids","handleError","asPath","defaultCity","parsedCityName","cookie","window","document","decodeURIComponent","match","e","message","replace","input","re","replacer","remaining","rewritten","exec","index","replaceContent","str","contentStr","prefixTagStr","tagStr","prefix","replacedStr","redirectTo","ctx","status","url","res","writeHead","Location","Router","location","href","getRedirectInfo","gid","webRid","articleType","isVisible","isLive","getLiveUrl","path","isKoubei","includes","isPgcArticle","redirectPath","isSamePath","ArticleDetailPage","is404","isVideo","article","subArticleType","relatedRecommendData","relatedSeriesData","recommendSeriesData","commentData","staticLabels","fontStyleString","pageTitle","title","desc","content","description","DEFAULT_ARTICLE_DESCRIPTION","rel","media","media_user","id","type","dangerouslySetInnerHTML","__html","JSON","stringify","headline","image","cover_image_info","image_list","map","img","image_url","join","datePublished","publish_time","author","screen_name","getGoogleStructureData","className","entryFeed","handlePath","search","split","queries","forEach","c","splitArr","key","value","charMap","0","1","2","3","4","5","6","7","8","9","getInitialProps","query","statusCode","cityName","getCityName","userData","getUserInfo","getArticleDetail","group_id","user_id","city_name","articleData","is_motor_article","is_visible","redirectInfo","web_rid","sub_article_type","is_live","zt","allPromises","Promise","resolve","getRelatedRecommend","getStaticLabels","isSpider","push","getRelatedSeries","getRecommendSeries","loadCommentData","count","currentPage","getInnerLinkList","getOuterLinkList","allSettled","d","fullSeries","relation_series_map","fullSeriesNames","Object","keys","sort","a","b","matchStart","now","regex","RegExp","char","seriesList","nameMap","i","replaced","setSeriesIds","Set","getCarIds","carIdsList","seriesIdCarIdsMap","reduce","curSeries","seriesName","carIds","ZT","LS","emitTimer","keywordDic","keyword_uri","keywordList","filter","word","trim","limit","duplicateDic","pureContent","keyword","uri","_pageType","article_type","list","innerList","outerList","__NEXT_P"],"mappings":"mGACA,IAAIA,EAAQ,EAAQ,OAChBC,EAAW,eAEXC,EAAMC,KAAKD,IACXE,EAAgBC,KAAKC,UACrBC,EAAUH,EAAcG,QACxBC,EAAwBJ,EAAcK,YAK1CC,EAAOC,QAAWX,GAAM,WACtB,MAA0D,4BAAnDQ,EAAsBI,KAAK,IAAIP,MAAK,sBACtCL,GAAM,WACXQ,EAAsBI,KAAK,IAAIP,KAAKQ,SAChC,WACJ,IAAKC,SAASP,EAAQK,KAAKG,OAAQ,MAAMC,WAAW,sBACpD,IAAIC,EAAOF,KACPG,EAAOD,EAAKE,iBACZC,EAAeH,EAAKI,qBACpBC,EAAOJ,EAAO,EAAI,IAAMA,EAAO,KAAO,IAAM,GAChD,OAAOI,EAAOrB,EAASC,EAAIgB,GAAOI,EAAO,EAAI,EAAG,GAC9C,IAAMrB,EAASgB,EAAKM,cAAgB,EAAG,EAAG,GAC1C,IAAMtB,EAASgB,EAAKO,aAAc,EAAG,GACrC,IAAMvB,EAASgB,EAAKQ,cAAe,EAAG,GACtC,IAAMxB,EAASgB,EAAKS,gBAAiB,EAAG,GACxC,IAAMzB,EAASgB,EAAKU,gBAAiB,EAAG,GACxC,IAAM1B,EAASmB,EAAc,EAAG,GAChC,KACAZ,G,sBC7BJ,IAAIoB,EAAW,EAAQ,OACnBC,EAAS,EAAQ,OACjBC,EAAyB,EAAQ,OAEjCC,EAAO5B,KAAK4B,KAGZC,EAAe,SAAUC,GAC3B,OAAO,SAAUC,EAAOC,EAAWC,GACjC,IAIIC,EAASC,EAJTC,EAAIC,OAAOV,EAAuBI,IAClCO,EAAeF,EAAEG,OACjBC,OAAyBC,IAAfR,EAA2B,IAAMI,OAAOJ,GAClDS,EAAejB,EAASO,GAE5B,OAAIU,GAAgBJ,GAA2B,IAAXE,EAAsBJ,GAC1DF,EAAUQ,EAAeJ,GACzBH,EAAeT,EAAOjB,KAAK+B,EAASZ,EAAKM,EAAUM,EAAQD,UAC1CA,OAASL,IAASC,EAAeA,EAAaQ,MAAM,EAAGT,IACjEJ,EAASM,EAAID,EAAeA,EAAeC,KAItD7B,EAAOC,QAAU,CAGfoC,MAAOf,GAAa,GAGpBgB,IAAKhB,GAAa,K,sBC7BpB,IAAIiB,EAAI,EAAQ,OACZxC,EAAc,EAAQ,OAK1BwC,EAAE,CAAEC,OAAQ,OAAQC,OAAO,EAAMC,OAAQ/C,KAAKC,UAAUG,cAAgBA,GAAe,CACrFA,YAAaA,K,+BCLfC,EAAOC,QAAU0C,EACjB3C,EAAOC,QAAQ0C,SAAWA,EAC1B3C,EAAOC,QAAQ2C,QAAUD,EAEzB,IAAIE,EAAW,kUAEXC,EAAW,6VAEf,SAASH,EAAUI,GACZA,IAAMA,EAAO,IAClB,IAAIC,EAAKD,EAAKC,GAKd,GAJKA,GAA2B,qBAAdC,YAA2BD,EAAKC,UAAUC,WACxDF,GAAMA,EAAGG,SAA+C,kBAA7BH,EAAGG,QAAQ,gBACxCH,EAAKA,EAAGG,QAAQ,eAEA,kBAAPH,EAAiB,OAAO,EAEnC,IAAII,EAASL,EAAKM,OAASP,EAASQ,KAAKN,GAAMH,EAASS,KAAKN,GAc7D,OAXGI,GACDL,EAAKM,QACLN,EAAKQ,eACLN,WACAA,UAAUO,eAAiB,IACE,IAA7BR,EAAGS,QAAQ,eACe,IAA1BT,EAAGS,QAAQ,YAEXL,GAAS,GAGJA,I,kJCVT,EArBoB,SAClBM,EACAC,GAIG,QAC8BA,GAAU,GAAnCC,EADL,EACKA,IADL,IACUC,aADV,MACkB,QADlB,GAEI,OAAHD,QAAG,IAAHA,GAAA,UAAAA,EAAKE,eAAL,eAAcC,cAAeH,EAAII,QACnCJ,EAAIE,QAAQC,YAAY,cAAe,OAAG7B,EAAW,CACnD+B,WAAc,OAAHP,QAAG,IAAHA,OAAA,EAAAA,EAAKQ,OAAQ,YAE1BN,EAAII,OAAOH,GAAX,oDAAwDH,QAAxD,IAAwDA,OAAxD,EAAwDA,EAAKS,UAE7DL,YAAgB,cAAe,CAC7BG,WAAc,OAAHP,QAAG,IAAHA,OAAA,EAAAA,EAAKQ,OAAQ,YAE1BF,IAAOH,GAAP,oDAAoDH,QAApD,IAAoDA,OAApD,EAAoDA,EAAKS,U,WCO7D,EAvBe,mCAAG,WAAOC,EAAkBR,GAAzB,kFACZS,EAAe,GADH,mBAIKC,QACjBC,OAAO,gDAAD,OAC4CH,GAChD,uBAEF,CAAER,QATU,OAIRY,EAJQ,OAWd,IACEH,EAAY,UAAGG,EAAKC,YAAR,aAAG,EAAWC,QAC1B,MAAOhB,GACPiB,EAAYjB,EAAK,CAAEE,QAdP,iFAoBTS,GApBS,yDAAH,yD,8ECoBf,IAlBoB,SAACO,EAAgBhB,GAAkC,IAAvBiB,EAAuB,uDAAT,eAC5D,IAAI,UACIC,EAAiBC,SAClB,OAAHnB,QAAG,IAAHA,OAAA,EAAAA,EAAKT,QAAQ4B,UAAb,UAAuBC,cAAvB,iBAAuB,EAAQC,gBAA/B,aAAuB,EAAkBF,SADpB,UAIvB,OAAOG,mBACLJ,IAAc,OACZF,QADY,IACZA,GADY,UACZA,EAAQO,MAAM,gCADF,aACZ,EAAyC,KACzCN,GAEJ,MAAOO,GAEPpB,SAAY,wBAAZ,OAAqCoB,QAArC,IAAqCA,OAArC,EAAqCA,EAAGC,SAE1C,OAAOR,I,oHCpBF,SAASS,EAAQC,EAAeC,EAAYC,GAIjD,IAHA,IAAIN,EACAO,EAAYH,EACZI,EAAY,GACRR,EAAQK,EAAGI,KAAKF,IACtBC,GAAaD,EAAUtD,MAAM,EAAG+C,EAAMU,OACtCF,GAAaF,EAASN,GACtBO,EAAYA,EAAUtD,MAAM+C,EAAMU,MAAQV,EAAM,GAAGnD,QAGrD,OADA2D,GAAaD,EAIR,SAASI,EAAeC,EAAaN,GAC1C,IAAIO,EAAa,GACXC,EAAe,SAACC,GACpB,GAAIF,EAAY,CACd,IAAMG,EAASH,EAEf,OADAA,EAAa,GACb,UAAUP,EAASU,IAAnB,OAA6BD,GAE/B,OAAOA,GAGHE,EAAcd,EAClBS,EACA,qEACA,SAACZ,GACC,OAAIA,EAAM,GAEDc,EAAad,EAAM,IACjBA,EAAM,GAERG,EACLH,EAAM,GACN,+CACA,SAACA,GACC,OAAOc,EAAa,GAAD,OACdd,EAAM,IADQ,OACHW,EAAeX,EAAM,GAAIM,IADtB,OACkCN,EAAM,SAM/Da,GAAcb,EAAM,GACb,OAIb,gBAAUiB,GAAV,OAAwBX,EAASO,M,qLCtBtBK,EAAa,SAAC,GAA4C,IAA1CC,EAA0C,EAA1CA,IAAKC,EAAqC,EAArCA,OAAQC,EAA6B,EAA7BA,IAChCC,EAAQH,EAARG,IACJA,GACFA,EAAIC,UAAUH,GAAU,IAAK,CAAEI,SAAUH,IACzCC,EAAInE,OACgB,MAAXkE,EAAI,IAAyB,MAAXA,EAAI,GAC/BI,eAAYJ,GAEZxB,OAAO6B,SAASC,KAAON,GAKdO,EAAkB,SAAC,GAOU,QANxCT,EAMwC,EANxCA,IACAU,EAKwC,EALxCA,IACAC,EAIwC,EAJxCA,OACAC,EAGwC,EAHxCA,YAGwC,IAFxCC,iBAEwC,aADxCC,OAGA,QAFwC,SAGtC,MAAO,CACLb,OAAQ,IACRC,KAAKa,OAAWL,EAAKC,IAKzB,IAAKE,IAAcD,EACjB,MAAO,CACLX,OAAQ,KAKZ,IAjBwC,GAmBvB,UAAAD,EAAI1B,cAAJ,eAAYO,MAD3B,sEAC4C,GAArCmC,GAnB+B,eAoBlCC,EAAW,CAAC,GAAI,GAAI,IAAIC,SAASN,GACjCO,EAAe,CAAC,EAAG,EAAG,GAAGD,SAASN,GAElCQ,EAAeH,EACjB,UACAE,EACA,WAJ+B,IAAhBP,EAMf,SACA,eACES,EAAaD,IAAiB,IAAL,OAASJ,GAMxC,OALY3E,IAAS,CACnBK,GAAE,UAAEsD,EAAI1C,WAAN,aAAE,EAAST,QAAQ,gBAKd,CACLoD,OAAQ,IACRC,IAAK,0BAAF,OAA4BkB,EAA5B,YAA4CV,IAK/CW,EACK,CACLpB,OAAQ,KAKL,CACLA,OAAQ,IACRC,IAAK,GAAF,OAAKkB,EAAL,YAAqBV,M,ojBC/C5B,SAASY,EAAT,GAYW,UAXTC,EAWS,EAXTA,MACAb,EAUS,EAVTA,IACAc,EASS,EATTA,QACAC,EAQS,EARTA,QACAC,EAOS,EAPTA,eACAC,EAMS,EANTA,qBACAC,EAKS,EALTA,kBACAC,EAIS,EAJTA,oBACAC,EAGS,EAHTA,YACAC,EAES,EAFTA,aACAC,EACS,EADTA,gBAEA,GAAIT,EACF,OAAO,KAET,IAAMU,EAAS,iBAAGR,QAAH,IAAGA,OAAH,EAAGA,EAASS,aAAZ,QAAqB,GAC9BC,GAAO,iBAACV,QAAD,IAACA,OAAD,EAACA,EAASW,eAAV,QAAqB,IAC/BpD,QAAQ,gBAAiB,IACzBA,QAAQ,WAAY,IACpBlD,MAAM,EAAG,IACNuG,EAAc,iCAAH,OACfF,EAAKzG,OAAS,GACVyG,EADJ,UAEOA,EAFP,qMA0BF,OACE,iCACE,UAAC,UAAD,YACE,qCACMF,EAAY,GAAH,OAAMA,EAAN,uBAAwB,uBAD5B,UAGX,iBAAqBrE,KAAK,WAAWwE,QAASH,GAApC,aACV,iBAEErE,KAAK,cACLwE,QAASC,GAA4BC,MAFjC,gBAIN,iBACEC,IAAI,YACJC,MAAM,oCACNhC,KAAI,0CAAqCE,QAEzC,OAACe,QAAD,IAACA,GAAD,UAACA,EAASgB,kBAAV,aAAC,EAAqBC,MACtB,mBAEEC,KAAK,sBAELC,wBAAyB,CACvBC,OAAQC,KAAKC,UA5CM,WAAM,gBAEnC,MAAO,CACL,WAAY,qBACZ,QAAS,cACTC,SAJS,OAAGvB,QAAH,IAAGA,GAAH,UAAGA,EAASS,aAAZ,aAAG,EAAgBlD,QAAQ,YAAa,IAKjDiE,MAAO,QACLxB,QADK,IACLA,GADK,UACLA,EAASyB,wBADJ,iBACL,EAA2BC,kBADtB,aACL,EACIC,KAAI,SAACC,GAAD,OAAcA,EAAIC,aACvBC,KAAK,MAEVC,cAAa,UAAE,IAAInK,KAA6B,KAAjB,OAAPoI,QAAO,IAAPA,OAAA,EAAAA,EAASgC,eAAuB,UAA3C,aAAE,EAA6ChK,cAC5DiK,OAAQ,CACN,CACE,QAAS,SACT9F,KAAI,OAAE6D,QAAF,IAAEA,GAAF,UAAEA,EAASgB,kBAAX,aAAE,EAAqBkB,YAC3BzD,IAAK,kCAAF,cAAoCuB,QAApC,IAAoCA,GAApC,UAAoCA,EAASgB,kBAA7C,aAAoC,EAAqBC,OA4BjCkB,MAJrB,qBASV,gBAAKC,UAAU,mBAAf,UACE,SAAC,IAAD,CACEpC,QAASA,EACTD,QAASA,EACTsC,WAAW,EACX9B,gBAAiBA,EACjBN,eAAgBA,EAChBC,qBAAsBA,EACtBC,kBAAmBA,EACnBC,oBAAqBA,EACrBC,YAAaA,EACbC,aAAcA,SAOxB,SAASgC,EAAWzF,GAClB,IAAM0F,EAA2B,qBAAX1F,GAA0BA,GAAUA,EAAO2F,MAAM,KAAK,GACtEC,EAAU,GAWhB,OAVIF,GACFA,EAAOC,MAAM,KAAKE,SAAQ,SAAUC,GAClC,GAAU,KAANA,EAAJ,CAGA,IAAMC,EAAWD,EAAEH,MAAM,KAJoB,UAKxBI,EALwB,GAKtCC,EALsC,KAKjCC,EALiC,KAM7CL,EAAQI,GAAOC,MAGZL,EAKT,IAAMM,EAAkC,CACtC,IAAK,aACL,IAAK,aACLC,EAAG,WACHC,EAAG,WACHC,EAAG,WACHC,EAAG,WACHC,EAAG,WACHC,EAAG,WACHC,EAAG,WACHC,EAAG,WACHC,EAAG,WACHC,EAAG,YAIL5D,EAAkB6D,gBAAlB,mCAAoC,WAAOnF,GAAP,mNAC1BoF,EAA4BpF,EAA5BoF,MAAO9G,EAAqB0B,EAArB1B,OAAQhB,EAAa0C,EAAb1C,IAAK6C,EAAQH,EAARG,OAGnB,OAALiF,QAAK,IAALA,GAAA,UAAAA,EAAO1E,WAAP,eAAYhF,QAAS,IAJS,uBAKhCyE,EAAIkF,WAAa,IALe,kBAMzB,CAAE9D,OAAO,IANgB,cAQ5B+D,GAAWC,OAAYjH,EAAQhB,GARH,SAW1BkI,GAAWC,OAAYnI,GAXG,UAYZoI,QAClB,CACEC,SAAQ,OAAEP,QAAF,IAAEA,OAAF,EAAEA,EAAO1E,IACjBkF,QAAO,OAAEJ,QAAF,IAAEA,OAAF,EAAEA,EAAUI,QACnBC,UAAWP,GAEbhI,GAlB8B,OAYhCwI,EAZgC,oEAuB5BjF,GACO,QAAX,EAAAiF,SAAA,mBAAarE,eAAb,eAAsBsE,oBAAtB,UAA0CD,SAA1C,iBAA0C,EAAarE,eAAvD,aAA0C,EAAsBuE,YAStC,OARtBC,GAAexF,OAAgB,CACnCT,MACAU,IAAG,OAAE0E,QAAF,IAAEA,OAAF,EAAEA,EAAO1E,IACZC,OAAM,UAAEmF,SAAF,iBAAE,EAAarE,eAAf,aAAE,EAAsByE,QAC9BtF,YAAW,UAAEkF,SAAF,iBAAE,EAAarE,eAAf,aAAE,EAAsB0E,iBACnCtF,YACAC,OAAM,UAAEgF,SAAF,iBAAE,EAAarE,eAAf,aAAE,EAAsB2E,WAEfnG,OAjCiB,wBAkChCE,EAAIkF,WAAa,IAlCe,kBAmCzB,CAAE9D,OAAO,IAnCgB,WAqCN,MAAxB0E,EAAahG,OArCiB,0BAsCjB8D,EAAWzF,GAAlB+H,EAtCwB,EAsCxBA,IACRtG,OAAW,CACTC,MACAC,OAAQgG,EAAahG,OACrBC,IAAK,GAAF,OAAK+F,EAAa/F,KAAlB,OAAwBmG,EAAK,OAAH,OAAUA,GAAO,MA1ChB,kCA+C5BC,EAAqB,CACzBC,QAAQC,QAAQV,IAChBW,QAAoBnJ,EAAD,OAAM8H,QAAN,IAAMA,OAAN,EAAMA,EAAO1E,IAAK,EAAG,GAAI,GAAI,IAChDgG,OAAgB,CAAE9I,KAAM,4BAAUN,KAGpC,OAAIA,QAAJ,IAAIA,OAAJ,EAAIA,EAAKqJ,YACPL,EAAYM,MAAKC,QAAiBvJ,EAAD,OAAM8H,QAAN,IAAMA,OAAN,EAAMA,EAAO1E,IAAK,iBACnD4F,EAAYM,MAAKE,QAAmBxJ,EAAD,OAAM8H,QAAN,IAAMA,OAAN,EAAMA,EAAO1E,IAAK,iBACrD4F,EAAYM,MACVG,OAAgB,CACdrG,IAAG,OAAE0E,QAAF,IAAEA,OAAF,EAAEA,EAAO1E,IACZsG,MAAO,GACPC,YAAa,EACb3J,SAGJgJ,EAAYM,MAAKM,OAAiB5I,EAAQhB,IAC1CgJ,EAAYM,MAAKO,OAAiB7I,EAAQhB,KAjEV,UAoEdiJ,QAAQa,WAAWd,GApEL,WAoE5BnI,EApE4B,OAoEmBiF,KAAI,SAACiE,GAAD,MAC1C,cAAbA,EAAEpH,OAAyBoH,EAAE9C,MAAQ,QAGjC9C,GAAU,UAAAtD,EAAK,UAAL,eAASsD,UAAW,GAI9B6F,IAAoB,OAAP7F,QAAO,IAAPA,OAAA,EAAAA,EAAS8F,sBAAuB,GAC7CC,GAAkBC,OAAOC,KAAKJ,IAAYK,MAC9C,SAACC,EAAGC,GAAJ,OAAUA,EAAEnM,OAASkM,EAAElM,UAGnBoM,GAAazO,KAAK0O,OAEpBtG,EAAQW,UAAWoF,GAAgB9L,OAnFL,oBAoF1BsM,GAAQ,IAAIC,OAAJ,aACNT,GACHpE,KACC,SAACiE,GAAD,iBAAWA,EAAErI,QAAQ,YAAY,SAACkJ,GAAD,mBAAgB1D,EAAQ0D,GAAxB,QAAjC,QAED3E,KAAK,KALI,KAMZ,KAEI4E,GAIA,GAEAC,GAAmC,IACzCpJ,OAAQyC,EAAQW,QAAS4F,IAAO,SAACnJ,GAE/B,IADA,IAAIwJ,EAAI,EACDA,EAAIxJ,EAAMnD,SACXmD,EAAMwJ,GADaA,KAKzB,IAAMzK,EAAO4J,GAAgBa,EAAI,GAOjC,OANAF,GAAWvB,KAAK,CACdlE,GAAI4E,GAAW1J,GACfA,KAAMiB,EAAMwJ,GACZC,SAAUF,GAAQxK,KAEpBwK,GAAQxK,IAAQ,EACTiB,EAAMwJ,MAGTE,IApH0B,OAoHP,IAAIC,IAAIL,GAAW/E,KAAI,SAACiE,GAAD,OAAOA,EAAE3E,SAErDyF,GAAWzM,OAtHiB,kCAwHtB6K,QAAQa,WACZmB,GAAanF,KAAI,SAACiE,GAAD,OAAOoB,OAAUjN,OAAO6L,GAAI/J,OAzHnB,QAuHxBoL,GAvHwB,OA2H5BtF,KAAI,SAACiE,GAAD,MAAqB,cAAbA,EAAEpH,OAAyBoH,EAAE9C,MAAQ,QAE7CoE,GAAoBJ,GAAaK,QAAO,SAACxF,EAAKiE,EAAG9H,GAErD,OADA6D,EAAIiE,GAAKqB,GAAWnJ,GACb6D,IACN,IAEC7D,GAAQ,EACZkC,EAAQW,SAAUpD,OAAQyC,EAAQW,QAAS4F,IAAO,WAAM,MAChDK,EAAI9I,GACVA,KACA,IAAMsJ,EAAYV,GAAWE,GACvBS,EAAaD,EAAUjL,KAC7B,GAAIiL,EAAUP,SACZ,OAAOQ,EAET,IAAMhL,EAAW+K,EAAUnG,GACrBqG,EAAM,UAAGJ,GAAkB7K,UAArB,aAAG,EAA6BmG,MAAM,KAAKV,KAAK,KAC5D,OAAKwF,EAGL,gCAAgCjL,EAAhC,mBAAmDgL,EAAnD,4BAAiFA,EAAjF,sCAAyHhL,EAAzH,6BAAsJgL,EAAtJ,uFAA0NC,EAA1N,mBAA2OD,EAA3O,0FAAkThL,EAAlT,eAAiUkL,KAAjU,wBAA2VC,KAA3V,mBAAgXH,EAAhX,wEAFE,gCAAgChL,EAAhC,mBAAmDgL,EAAnD,4BAAiFA,EAAjF,sCAAyHhL,EAAzH,6BAAsJgL,EAAtJ,qDA9I0B,SAmJhC,OAAIxL,QAAJ,IAAIA,GAAJ,WAAIA,EAAKE,eAAT,cAAI,GAAc0L,YAChB5L,EAAIE,QAAQ0L,UACV,8BACA7P,KAAK0O,MAAQD,IAtJe,eA0J5BqB,GAAa1H,EAAQ2H,aAAe,GACtCC,GAAc5B,OAAOC,KAAKyB,KAAe,GAEzC1H,EAAQW,SAAWiH,GAAY3N,SACjC2N,GAAcA,GAAY1B,MAAK,SAACC,EAAGC,GAAJ,OAAUA,EAAEnM,OAASkM,EAAElM,UAChDsM,GAAQ,IAAIC,OAAJ,qBACToB,UADS,mBACT,GACCC,QAAO,SAACC,GACR,MAAO,mBAAmBvM,KAAKuM,aAHvB,mBACT,GAICnG,KAAI,SAACmG,GAAD,iBAAcA,EAAKC,OAAnB,eALI,cACT,GAKCjG,KAAK,MACT,OAGEyD,GAAQ,EACNtL,IAAS,WAAA+F,EAAQW,QAAQvD,MAAM,2BAAtB,iBAA2CnD,SAAU,EAChE+N,GAAQ,EACR/N,GAAS,KAAOA,IAAU,MAAK+N,GAAQ,GACvC/N,GAAS,KAAOA,IAAU,MAAM+N,GAAQ,IACxC/N,GAAS,MAAM+N,GAAQ,IACrBC,GAA2C,GAEjDjI,EAAQW,SAAU5C,OAAeiC,EAAQW,SAAS,SAACuH,GACjD,cAAOA,QAAP,IAAOA,OAAP,EAAOA,EAAa3K,QAAQgJ,IAAO,SAAC4B,GAClC,GAAI5C,IAASyC,IAASC,GAAaE,GACjC,OAAOA,EAET5C,KACA0C,GAAaE,IAAW,EACxB,IAAMC,EAAMV,GAAWS,GACvB,yBAAmBC,EAAnB,oCAAiDD,EAAjD,YAA4DA,EAA5D,eAKFnI,EAAQW,UAAYoF,GAAgB9L,QAAU2N,GAAY3N,UAC5D,OAAI4B,QAAJ,IAAIA,GAAJ,WAAIA,EAAKE,eAAT,cAAI,GAAc0L,YAChB5L,EAAIE,QAAQ0L,UACV,8BACA7P,KAAK0O,MAAQD,IAlMe,kBAsM3B,CACLgC,UAAW,MACXpJ,IAAK0E,EAAM1E,IACXe,QAASZ,EAAS,UAAG1C,EAAK,UAAR,aAAG,EAASsD,QAAU,GACxCD,UAASX,GAC8B,KAAnC,UAAA1C,EAAK,UAAL,mBAASsD,eAAT,eAAkBsI,cAItBrI,eAAc,UAAEvD,EAAK,UAAP,iBAAE,EAASsD,eAAX,aAAE,EAAkB0E,iBAClCxE,qBAAoB,OAAExD,QAAF,IAAEA,OAAF,EAAEA,EAAO,GAC7B4D,aAAY,OAAE5D,QAAF,IAAEA,OAAF,EAAEA,EAAO,GACrByD,kBAAiB,OAAEzD,QAAF,IAAEA,GAAF,UAAEA,EAAO,UAAT,aAAE,EAAWA,KAC9B0D,oBAAmB,QAAG,EAAH,OAAG1D,QAAH,IAAGA,OAAH,EAAGA,EAAO,UAAV,aAAE,EAAoB6L,KACzClI,YAAW,OAAE3D,QAAF,IAAEA,OAAF,EAAEA,EAAO,GACpB8L,UAAS,OAAE9L,QAAF,IAAEA,OAAF,EAAEA,EAAO,GAClB+L,UAAS,OAAE/L,QAAF,IAAEA,OAAF,EAAEA,EAAO,GAClB6D,gBAAe,UAAE7D,EAAK,UAAP,iBAAE,EAASsD,eAAX,aAAE,EAAkBO,kBAvNH,0DAApC,sDA2NA,IC9YA,ED8YA,G,uBE/YKtD,OAAOyL,SAAWzL,OAAOyL,UAAY,IAAIvD,KAAK,CAC7C,sBACA,WACE,OAAO,EAAQ,Y","file":"static/chunks/pages/new_article_detail-ebaf805b90aa2828aea3.js","sourcesContent":["'use strict';\nvar fails = require('../internals/fails');\nvar padStart = require('../internals/string-pad').start;\n\nvar abs = Math.abs;\nvar DatePrototype = Date.prototype;\nvar getTime = DatePrototype.getTime;\nvar nativeDateToISOString = DatePrototype.toISOString;\n\n// `Date.prototype.toISOString` method implementation\n// https://tc39.github.io/ecma262/#sec-date.prototype.toisostring\n// PhantomJS / old WebKit fails here:\nmodule.exports = (fails(function () {\n return nativeDateToISOString.call(new Date(-5e13 - 1)) != '0385-07-25T07:06:39.999Z';\n}) || !fails(function () {\n nativeDateToISOString.call(new Date(NaN));\n})) ? function toISOString() {\n if (!isFinite(getTime.call(this))) throw RangeError('Invalid time value');\n var date = this;\n var year = date.getUTCFullYear();\n var milliseconds = date.getUTCMilliseconds();\n var sign = year < 0 ? '-' : year > 9999 ? '+' : '';\n return sign + padStart(abs(year), sign ? 6 : 4, 0) +\n '-' + padStart(date.getUTCMonth() + 1, 2, 0) +\n '-' + padStart(date.getUTCDate(), 2, 0) +\n 'T' + padStart(date.getUTCHours(), 2, 0) +\n ':' + padStart(date.getUTCMinutes(), 2, 0) +\n ':' + padStart(date.getUTCSeconds(), 2, 0) +\n '.' + padStart(milliseconds, 3, 0) +\n 'Z';\n} : nativeDateToISOString;\n","// https://github.com/tc39/proposal-string-pad-start-end\nvar toLength = require('../internals/to-length');\nvar repeat = require('../internals/string-repeat');\nvar requireObjectCoercible = require('../internals/require-object-coercible');\n\nvar ceil = Math.ceil;\n\n// `String.prototype.{ padStart, padEnd }` methods implementation\nvar createMethod = function (IS_END) {\n return function ($this, maxLength, fillString) {\n var S = String(requireObjectCoercible($this));\n var stringLength = S.length;\n var fillStr = fillString === undefined ? ' ' : String(fillString);\n var intMaxLength = toLength(maxLength);\n var fillLen, stringFiller;\n if (intMaxLength <= stringLength || fillStr == '') return S;\n fillLen = intMaxLength - stringLength;\n stringFiller = repeat.call(fillStr, ceil(fillLen / fillStr.length));\n if (stringFiller.length > fillLen) stringFiller = stringFiller.slice(0, fillLen);\n return IS_END ? S + stringFiller : stringFiller + S;\n };\n};\n\nmodule.exports = {\n // `String.prototype.padStart` method\n // https://tc39.github.io/ecma262/#sec-string.prototype.padstart\n start: createMethod(false),\n // `String.prototype.padEnd` method\n // https://tc39.github.io/ecma262/#sec-string.prototype.padend\n end: createMethod(true)\n};\n","var $ = require('../internals/export');\nvar toISOString = require('../internals/date-to-iso-string');\n\n// `Date.prototype.toISOString` method\n// https://tc39.github.io/ecma262/#sec-date.prototype.toisostring\n// PhantomJS / old WebKit has a broken implementations\n$({ target: 'Date', proto: true, forced: Date.prototype.toISOString !== toISOString }, {\n toISOString: toISOString\n});\n","'use strict'\n\nmodule.exports = isMobile\nmodule.exports.isMobile = isMobile\nmodule.exports.default = isMobile\n\nvar mobileRE = /(android|bb\\d+|meego).+mobile|avantgo|bada\\/|blackberry|blazer|compal|elaine|fennec|hiptop|iemobile|ip(hone|od)|iris|kindle|lge |maemo|midp|mmp|mobile.+firefox|netfront|opera m(ob|in)i|palm( os)?|phone|p(ixi|re)\\/|plucker|pocket|psp|series[46]0|symbian|treo|up\\.(browser|link)|vodafone|wap|windows (ce|phone)|xda|xiino/i\n\nvar tabletRE = /(android|bb\\d+|meego).+mobile|avantgo|bada\\/|blackberry|blazer|compal|elaine|fennec|hiptop|iemobile|ip(hone|od)|iris|kindle|lge |maemo|midp|mmp|mobile.+firefox|netfront|opera m(ob|in)i|palm( os)?|phone|p(ixi|re)\\/|plucker|pocket|psp|series[46]0|symbian|treo|up\\.(browser|link)|vodafone|wap|windows (ce|phone)|xda|xiino|android|ipad|playbook|silk/i\n\nfunction isMobile (opts) {\n if (!opts) opts = {}\n var ua = opts.ua\n if (!ua && typeof navigator !== 'undefined') ua = navigator.userAgent\n if (ua && ua.headers && typeof ua.headers['user-agent'] === 'string') {\n ua = ua.headers['user-agent']\n }\n if (typeof ua !== 'string') return false\n\n var result = opts.tablet ? tabletRE.test(ua) : mobileRE.test(ua)\n\n if (\n !result &&\n opts.tablet &&\n opts.featureDetect &&\n navigator &&\n navigator.maxTouchPoints > 1 &&\n ua.indexOf('Macintosh') !== -1 &&\n ua.indexOf('Safari') !== -1\n ) {\n result = true\n }\n\n return result\n}\n","import { logger, metrics } from './slardar-utils'\n\nconst handleError = (\n err: Error,\n config?: {\n req?: any\n level?: 'warn' | 'info' | 'log' | 'error'\n }\n) => {\n const { req, level = 'error' } = config || {}\n if (req?.metrics?.emitCounter && req.logger) {\n req.metrics.emitCounter('catch.error', 1, undefined, {\n errorType: err?.name || 'unknown',\n })\n req.logger[level](`[catch error] catched error. err = ${err?.stack}`)\n } else {\n metrics.counter('catch.error', {\n errorType: err?.name || 'unknown',\n })\n logger[level](`[catch error] catched error. err = ${err?.stack}`)\n }\n}\n\nexport default handleError\n","import fetch from 'lib/decorated-fetch'\nimport handleError from './error-handle'\nimport getUrl from './url'\nconst getCarIds = async (seriesId: string, req?: any) => {\n let seriesCarIds = ''\n\n try {\n const json = await fetch(\n getUrl(\n `/motor/m_api/pc_get_series_car_ids?series_id=${seriesId}`,\n 'motor.m_station.api'\n ),\n { req }\n )\n try {\n seriesCarIds = json.data?.car_ids\n } catch (err) {\n handleError(err, { req })\n }\n } catch (err) {\n // no-op\n }\n\n return seriesCarIds\n}\n\nexport default getCarIds\n","import { logger } from 'lib/slardar-utils'\nimport cookie from 'cookie'\nimport { handleAsPath } from 'lib/utils'\n\n// 快速 获取 用户信息\nconst getCityName = (asPath: string, req?: any, defaultCity = '北京') => {\n try {\n const parsedCityName = cookie.parse(\n req?.headers.cookie || window?.document?.cookie\n )['city_name']\n\n return decodeURIComponent(\n parsedCityName ||\n asPath?.match(/[&?]cityName=([^&#]+)/)?.[1] ||\n defaultCity\n )\n } catch (e) {\n // noop\n logger.warn('[get cityName]:failed', e?.message)\n }\n return defaultCity\n}\n\nexport default getCityName\n","export function replace(input: string, re: RegExp, replacer: any) {\n let match\n let remaining = input\n let rewritten = ''\n while ((match = re.exec(remaining))) {\n rewritten += remaining.slice(0, match.index)\n rewritten += replacer(match)\n remaining = remaining.slice(match.index + match[0].length)\n }\n rewritten += remaining\n return rewritten\n}\n\nexport function replaceContent(str: string, replacer: (arg: string) => any) {\n let contentStr = ''\n const prefixTagStr = (tagStr: string) => {\n if (contentStr) {\n const prefix = contentStr\n contentStr = ''\n return `${replacer(prefix)}${tagStr}`\n }\n return tagStr\n }\n // 正则优先级:a标签 -> 任意标签 -> 任意内容(任意内容一次只匹配一个)\n const replacedStr = replace(\n str,\n /(]+)?>.*?<\\/a>)|(<([a-z]\\w*)(?:\\s[^>]+)?>.*<\\/\\3>)|(.)/i,\n (match: any[]) => {\n if (match[1]) {\n // a标签直接返回\n return prefixTagStr(match[1])\n } else if (match[2]) {\n // 普通标签进行二次匹配\n return replace(\n match[2],\n /(<([a-z]\\w*)(?:\\s[^>]+)?>)(.*)(<\\/\\2>)(.*)/i,\n (match: any[]) => {\n return prefixTagStr(\n `${match[1]}${replaceContent(match[3], replacer)}${match[4]}`\n )\n }\n )\n } else {\n // 内容进行追加获取完整字符串\n contentStr += match[4]\n return ''\n }\n }\n )\n return `${replacedStr}${replacer(contentStr)}`\n}\n","import { NextPageContext } from 'next'\nimport Router from 'next/router'\nimport isMobile from 'is-mobile'\nimport getLiveUrl from './get-live-url'\n\nexport interface IRedirectToParams {\n ctx: NextPageContext\n status: number\n url: string\n}\n\nexport interface IRedirectInfoParams {\n ctx: NextPageContext\n gid: string\n webRid?: string\n articleType: number\n isVisible?: boolean\n isLive?: boolean\n}\n\nexport type TRedirectInfo =\n | { status: 404 }\n | { status: 200 }\n | { status: 301; url: string }\n | { status: 302; url: string }\n\n/** 重定向到指定地址 */\nexport const redirectTo = ({ ctx, status, url }: IRedirectToParams) => {\n const { res } = ctx\n if (res) {\n res.writeHead(status || 302, { Location: url })\n res.end()\n } else if (url[0] === '/' && url[1] !== '/') {\n Router.push(url)\n } else if (typeof window !== 'undefined') {\n window.location.href = url\n }\n}\n\n/** 获取 pgc 和 ugc 之间的重定向信息 */\nexport const getRedirectInfo = ({\n ctx,\n gid,\n webRid,\n articleType,\n isVisible = true,\n isLive = false,\n}: IRedirectInfoParams): TRedirectInfo => {\n // (1) 直播\n if (isLive) {\n return {\n status: 301,\n url: getLiveUrl(gid, webRid),\n }\n }\n\n // (2) 文章不可见或者被删除\n if (!isVisible || !articleType) {\n return {\n status: 404,\n }\n }\n\n // (3) 路径数据\n const regExp =\n /\\/(koubei|article|video|ugc\\/article)\\/(\\d+)(?:-(\\d+))?(?:\\?.+)?/\n const [, path] = ctx.asPath?.match(regExp) || []\n const isKoubei = [12, 13, 14].includes(articleType)\n const isPgcArticle = [1, 3, 4].includes(articleType)\n const isPgcVideo = articleType === 2\n const redirectPath = isKoubei\n ? '/koubei' // ugc 新老口碑\n : isPgcArticle\n ? '/article' // pgc 文章\n : isPgcVideo\n ? '/video' // pgc 视频\n : '/ugc/article' // ugc 文章视频\n const isSamePath = redirectPath === `/${path}`\n const isM = isMobile({\n ua: ctx.req?.headers['user-agent'],\n })\n\n // (4) 当前项目为 PC 站,所以移动端需重定向到 M 站\n if (isM) {\n return {\n status: 302,\n url: `https://m.dongchedi.com${redirectPath}/${gid}`,\n }\n }\n\n // (5) 重定向路径和原本的一致,则无需重定向\n if (isSamePath) {\n return {\n status: 200,\n }\n }\n\n // (6) 需要重定向\n return {\n status: 301,\n url: `${redirectPath}/${gid}`,\n }\n}\n","/* 文章详情页 */\nimport React from 'react'\nimport Head from 'next/head'\nimport {\n IArticle,\n getArticleDetail,\n getRelatedRecommend,\n getRelatedSeries,\n getRecommendSeries,\n IRelatedSeriesItem,\n IRecommendSeriesItem,\n IRelatedRecommendData,\n} from './services/index'\nimport Article from './article'\nimport { DEFAULT_ARTICLE_DESCRIPTION } from 'Constants/index'\nimport getUserInfo from 'lib/user-info'\nimport { loadCommentData, ICommentData } from 'Components/comment-3.0/service'\nimport getStaticLabels, { IStaticLabel } from 'Services/feed/static-labels'\nimport getCarIds from 'lib/get-cars-from-series'\nimport { replace } from 'New/article-detail/components/content'\nimport * as ZT from 'Constants/zt'\nimport * as LS from 'Constants/link-source'\nimport { replaceContent } from 'lib/keyword-replace'\nimport getCityName from 'lib/get-city-name'\nimport { getRedirectInfo, redirectTo } from 'lib/router-redirect'\nimport { getInnerLinkList } from 'Components/new/inner-link'\nimport { getOuterLinkList } from 'Components/new/outer-link'\ninterface IProps {\n is404?: boolean\n gid: string\n /**\n * 文章信息\n */\n article: IArticle\n\n /**\n * 是否是视频\n */\n isVideo: boolean\n\n subArticleType: number\n\n relatedRecommendData: IRelatedRecommendData\n\n relatedSeriesData: IRelatedSeriesItem[]\n\n recommendSeriesData: IRecommendSeriesItem[]\n\n commentData: ICommentData\n staticLabels: IStaticLabel[]\n fontStyleString?: string\n}\n\nfunction ArticleDetailPage({\n is404,\n gid,\n isVideo,\n article,\n subArticleType,\n relatedRecommendData,\n relatedSeriesData,\n recommendSeriesData,\n commentData,\n staticLabels,\n fontStyleString,\n}: IProps) {\n if (is404) {\n return null\n }\n const pageTitle = article?.title ?? ''\n const desc = (article?.content ?? '')\n .replace(/\\{!--.*?--\\}/g, '')\n .replace(/<[^>]+>/g, '')\n .slice(0, 65)\n const description = `懂车帝提供${\n desc.length > 30\n ? desc\n : `${desc}。懂车帝提供信息最快最全的中国汽车网站,看车选车买车就上懂车帝。`\n }`\n\n const getGoogleStructureData = () => {\n const title = article?.title?.replace(/(\"|'|\\\\)/g, '')\n return {\n '@context': 'https://schema.org',\n '@type': 'NewsArticle',\n headline: title,\n image: [\n article?.cover_image_info?.image_list\n ?.map((img: any) => img.image_url)\n .join(','),\n ],\n datePublished: new Date(article?.publish_time * 1000 || 0)?.toISOString(),\n author: [\n {\n '@type': 'Person',\n name: article?.media_user?.screen_name,\n url: `https://www.dongchedi.com/user/${article?.media_user?.id}`,\n },\n ],\n }\n }\n return (\n <>\n \n \n {`${pageTitle ? `${pageTitle}_懂车帝` : '懂车帝'}`}\n \n \n \n \n {!!article?.media_user?.id && (\n \n )}\n \n
\n \n
\n \n )\n}\n\nfunction handlePath(asPath: string) {\n const search = typeof asPath !== 'undefined' && asPath && asPath.split('?')[1]\n const queries = {} as any\n if (search) {\n search.split('&').forEach(function (c: string) {\n if (c === '') {\n return\n }\n const splitArr = c.split('=')\n const [key, value] = splitArr\n queries[key] = value\n })\n }\n return queries\n}\n\n// 为了匹配更多车系\n// 同时匹配中英文括号 中文和数字\nconst charMap: Record = {\n '(': '\\\\(|(',\n ')': '\\\\)|)',\n 0: '0|零',\n 1: '1|一',\n 2: '2|二',\n 3: '3|三',\n 4: '4|四',\n 5: '5|五',\n 6: '6|六',\n 7: '7|七',\n 8: '8|八',\n 9: '9|九',\n}\n\n/* eslint-disable complexity */\nArticleDetailPage.getInitialProps = async (ctx: any) => {\n const { query, asPath, req, res } = ctx\n\n // 如果gid过长,认为它不是一个正常的gid,这里30字符是一个预期异常的长度。\n if (query?.gid?.length > 30) {\n res.statusCode = 404\n return { is404: true }\n }\n const cityName = getCityName(asPath, req)\n let articleData\n try {\n const userData = getUserInfo(req)\n articleData = await getArticleDetail(\n {\n group_id: query?.gid,\n user_id: userData?.user_id,\n city_name: cityName,\n },\n req\n )\n } catch {\n // no-op\n }\n const isVisible =\n articleData?.article?.is_motor_article && articleData?.article?.is_visible\n const redirectInfo = getRedirectInfo({\n ctx,\n gid: query?.gid,\n webRid: articleData?.article?.web_rid,\n articleType: articleData?.article?.sub_article_type,\n isVisible,\n isLive: articleData?.article?.is_live,\n })\n if (redirectInfo.status === 404) {\n res.statusCode = 404\n return { is404: true }\n }\n if (redirectInfo.status !== 200) {\n const { zt } = handlePath(asPath)\n redirectTo({\n ctx,\n status: redirectInfo.status,\n url: `${redirectInfo.url}${zt ? `?zt=${zt}` : ''}`,\n })\n return\n }\n\n const allPromises: any[] = [\n Promise.resolve(articleData),\n getRelatedRecommend(req, query?.gid, 0, '', 20, 0),\n getStaticLabels({ name: '热点资讯' }, req),\n ]\n\n if (req?.isSpider) {\n allPromises.push(getRelatedSeries(req, query?.gid, '北京'))\n allPromises.push(getRecommendSeries(req, query?.gid, '北京'))\n allPromises.push(\n loadCommentData({\n gid: query?.gid,\n count: 10,\n currentPage: 0,\n req,\n })\n )\n allPromises.push(getInnerLinkList(asPath, req))\n allPromises.push(getOuterLinkList(asPath, req))\n }\n\n const data = (await Promise.allSettled(allPromises)).map((d) =>\n d.status === 'fulfilled' ? d.value : null\n )\n\n const article = data[0]?.article || {}\n\n // 排序:对于奥迪A4L和奥迪A4这种情况\n // 优先匹配到奥迪A4L时,忽略对奥迪A4的匹配\n const fullSeries = article?.relation_series_map || {}\n const fullSeriesNames = Object.keys(fullSeries).sort(\n (a, b) => b.length - a.length\n )\n\n const matchStart = Date.now()\n\n if (article.content && fullSeriesNames.length) {\n const regex = new RegExp(\n `(?:${fullSeriesNames\n .map(\n (d) => `(${d.replace(/[()0-9]/g, (char) => `(?:${charMap[char]})`)})`\n )\n .join('|')})`,\n 'i'\n )\n const seriesList: {\n id: number\n name: string\n replaced: boolean\n }[] = []\n\n const nameMap: Record = {}\n replace(article.content, regex, (match) => {\n let i = 1\n for (; i < match.length; i++) {\n if (match[i]) {\n break\n }\n }\n const name = fullSeriesNames[i - 1]\n seriesList.push({\n id: fullSeries[name],\n name: match[i],\n replaced: nameMap[name], // 标记去重\n })\n nameMap[name] = true\n return match[i]\n })\n\n const setSeriesIds = [...new Set(seriesList.map((d) => d.id))]\n\n if (seriesList.length) {\n const carIdsList = (\n await Promise.allSettled(\n setSeriesIds.map((d) => getCarIds(String(d), req))\n )\n ).map((d) => (d.status === 'fulfilled' ? d.value : null))\n\n const seriesIdCarIdsMap = setSeriesIds.reduce((map, d, index) => {\n map[d] = carIdsList[index]\n return map\n }, {} as Record)\n\n let index = 0\n article.content = replace(article.content, regex, () => {\n const i = index\n index++\n const curSeries = seriesList[i]\n const seriesName = curSeries.name\n if (curSeries.replaced) {\n return seriesName\n }\n const seriesId = curSeries.id\n const carIds = seriesIdCarIdsMap[seriesId]?.split(',').join('-')\n if (!carIds) {\n return `${seriesName}(图片)`\n }\n return `${seriesName}(图片|配置|询价)`\n })\n }\n if (req?.metrics?.emitTimer)\n req.metrics.emitTimer(\n 'article-detail.match-series',\n Date.now() - matchStart\n )\n }\n\n const keywordDic = article.keyword_uri || {}\n let keywordList = Object.keys(keywordDic) || []\n\n if (article.content && keywordList.length) {\n keywordList = keywordList.sort((a, b) => b.length - a.length)\n const regex = new RegExp(\n `${keywordList\n ?.filter((word) => {\n return /[\\u4e00-\\u9fa5]/g.test(word)\n })\n ?.map((word) => `(${word.trim()})`)\n ?.join('|')}`,\n 'gim'\n )\n\n let count = 0\n const length = article.content.match(/[\\u4e00-\\u9fa5]/g)?.length || 0\n let limit = 1\n if (length > 100 && length <= 500) limit = 5\n if (length > 500 && length <= 1000) limit = 10\n if (length > 1000) limit = 20\n const duplicateDic: { [key: string]: boolean } = {}\n\n article.content = replaceContent(article.content, (pureContent: string) => {\n return pureContent?.replace(regex, (keyword: string) => {\n if (count >= limit || duplicateDic[keyword]) {\n return keyword\n }\n count++\n duplicateDic[keyword] = true\n const uri = keywordDic[keyword]\n return `${keyword}`\n })\n })\n }\n\n if (article.content && (fullSeriesNames.length || keywordList.length)) {\n if (req?.metrics?.emitTimer)\n req.metrics.emitTimer(\n 'article-detail.match-series',\n Date.now() - matchStart\n )\n }\n\n return {\n _pageType: 'new',\n gid: query.gid,\n article: isVisible ? data[0]?.article : {},\n isVideo: isVisible\n ? data[0]?.article?.article_type === 2\n ? true\n : false\n : false, //article_type 1-文章 2-视频\n subArticleType: data[0]?.article?.sub_article_type,\n relatedRecommendData: data?.[1],\n staticLabels: data?.[2],\n relatedSeriesData: data?.[3]?.data,\n recommendSeriesData: (data?.[4] as any)?.list,\n commentData: data?.[5],\n innerList: data?.[6],\n outerList: data?.[7],\n fontStyleString: data[0]?.article?.fontStyleString,\n }\n}\n\nexport default ArticleDetailPage\n","import ArticleDetail from 'New/article-detail'\n\nexport default ArticleDetail\n","\n (window.__NEXT_P = window.__NEXT_P || []).push([\n \"/new_article_detail\",\n function () {\n return require(\"private-next-pages/new_article_detail/index.tsx\");\n }\n ]);\n "],"sourceRoot":""}