{"version":3,"sources":["webpack://@lemon8/web-seo/./shared/models/article/article-unavailable.ts","webpack://@lemon8/web-seo/./shared/utils/format/time-fowmatter.ts","webpack://@lemon8/web-seo/./shared/models/article/json-ld-util.ts","webpack://@lemon8/web-seo/./shared/models/article/article-util.ts","webpack://@lemon8/web-seo/./shared/models/article/article.ts","webpack://@lemon8/web-seo/./shared/models/comments/comment.ts","webpack://@lemon8/web-seo/./shared/models/comments/json-ld-util.ts","webpack://@lemon8/web-seo/./shared/models/comments/rich-content.ts","webpack://@lemon8/web-seo/./shared/models/discover/discover-data.ts","webpack://@lemon8/web-seo/./shared/models/discover/discover-util.ts","webpack://@lemon8/web-seo/./shared/models/legacy/article.ts","webpack://@lemon8/web-seo/./shared/models/legacy/category.ts","webpack://@lemon8/web-seo/./shared/models/media.ts","webpack://@lemon8/web-seo/./shared/models/page-level-traffic.ts","webpack://@lemon8/web-seo/./shared/models/search-word.ts","webpack://@lemon8/web-seo/./shared/models/search/sug.ts","webpack://@lemon8/web-seo/./shared/models/topic/topic-unavailable.ts","webpack://@lemon8/web-seo/./shared/models/topic/topic-util.ts","webpack://@lemon8/web-seo/./shared/models/user/json-ld-util.ts","webpack://@lemon8/web-seo/./shared/models/user/user.ts","webpack://@lemon8/web-seo/./shared/models/user/user-unavailable.ts","webpack://@lemon8/web-seo/./shared/models/user/types.ts","webpack://@lemon8/web-seo/./shared/utils/escape-xml.ts","webpack://@lemon8/web-seo/../libs/lemon8-web-app-shared/dist/esm/atom/ab-test.js","webpack://@lemon8/web-seo/../libs/lemon8-web-app-shared/dist/esm/atom/app-id-config.js","webpack://@lemon8/web-seo/../libs/lemon8-web-app-shared/dist/esm/atom/crawler.js","webpack://@lemon8/web-seo/../libs/lemon8-web-app-shared/dist/esm/atom/csp-scripts.js","webpack://@lemon8/web-seo/../libs/lemon8-web-app-shared/dist/esm/atom/i18n-text.js","webpack://@lemon8/web-seo/../libs/lemon8-web-app-shared/dist/esm/atom/index.js","webpack://@lemon8/web-seo/../libs/lemon8-web-app-shared/dist/esm/atom/locale.js","webpack://@lemon8/web-seo/../libs/lemon8-web-app-shared/dist/esm/atom/remix.js","webpack://@lemon8/web-seo/../libs/lemon8-web-app-shared/dist/esm/atom/render-config.js","webpack://@lemon8/web-seo/../libs/lemon8-web-app-shared/dist/esm/atom/root-traffic.js","webpack://@lemon8/web-seo/../libs/lemon8-web-app-shared/dist/esm/atom/server-context.js","webpack://@lemon8/web-seo/../libs/lemon8-web-app-shared/dist/esm/atom/user-agent.js","webpack://@lemon8/web-seo/../libs/lemon8-web-app-shared/dist/esm/atom/web-user.js"],"names":["EArticleUnavailableReason","dateToLocalISO","timeStamp","timeZone","off","absoff","Math","abs","concat","Date","toISOString","substr","toFixed","padStart","toString","ArticleJsonLDUtil","getTitle","props","article","t","articleTitle","title","removeEscapedSpecialXmlCharacter","replace","articleClass","EArticleClass","author","nickName","getDescription","articleShortContent","shortContent","getKeywords","result","relatedQueryInfos","push","map","info","word","getSocialMediaJsonLD","region","articleTranslated","ArticleDetailUtil","jsonLDTitle","jsonLDDescription","jsonLDKeywords","canonicalUrl","readCount","diggCount","favoriteCount","commentCount","publishTime","modifyTime","gptSummary","imageList","galleryImageList","galleryLabels","ocrText","imageListWithExtraInfo","image","index","_objectSpread","imgOcrText","galleryKeywords","filter","label","imageIndex","name","url","contentUrl","representativeOfPage","keywords","caption","String","embeddedTextCaption","largeImage","articleBaseJsonLD","headline","description","datePublished","sharedContent","mainEntityOfPage","interactionStatistic","interactionType","userInteractionCount","dateModified","abstract","getVideoObjectJsonLD","_a","video","isTranslatedVersion","output","thumbnailUrl","uploadDate","encryptedUrl","width","height","duration","VideoUtils","ocr","length","join","isArticleAvailable","hasTranslatedVersion","translatedRegions","isTranslatedArticleToShow","_region","getOriginalArticleCanonicalUri","linkName","groupId","articleRegion","getCurrentArticleCanonicalUri","JsonLD","ECommentPermission","CommentUtil","isReply","comment","replyToCommentId","isPrimaryComment","isReplyToReply","replyToReplyId","JsonLd","getCommentsJsonLd","comments","item","text","alternateName","avatar","identifier","propertyID","value","CommentRichContentUtil","ECommentRichContentCategory","EDiscoverUnavailableReason","DiscoverUtil","Libra","shouldUseSortModel","parameters","Boolean","_get","shouldFormatAsArticleDetail","isDiscoverDataAvailable","input","ArticleClass","ECategoryNameIDMap","CategoryIDNameMap","CategoryNameIDMap","Object","keys","reduce","pre","cur","durationTo8601","hour","trunc","minute","second","ret","PageLevelTrafficUtil","getPageIdFromTraffic","traffic","pageType","EPageType","categoryId","hashtagId","poiId","keyword","userId","EWordType","SugType","ETopicUnavailableReason","TopicUtil","isTopicAvailable","topic","UserJsonLDUtil","getPersonJsonLD","user","userRegion","person","dugCount","favoredCount","Number","followerCount","followingCount","postCount","EUserGender","EPrivacyStatus","UserDetailUtil","isUserAvailable","EUserUnavailableReason","PrivacyStatus","escapeSpecialXmlCharacter","content","unescapeSpecialXmlCharacter","exports","jotai_1","require","atom","versions","wapId","appId","CrawlerType","GoogleCrawlerSubType","__createBinding","create","o","m","k","k2","desc","getOwnPropertyDescriptor","__esModule","writable","configurable","enumerable","get","defineProperty","__exportStar","p","prototype","hasOwnProperty","call","URLSearchParams","enableStreamingSSR","disableInlineScripts","enableSSRStyleInline","userAgent","isMobile","isBot","isiOS","isSafari","isInApp","isMacOS","webId"],"mappings":"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","file":"689-74bb99563493fffb7118.js","sourcesContent":["export enum EArticleUnavailableReason {\n NOT_FOUND = 'not_found',\n PRIVATE_ACCOUNT = 'private_account',\n SERVER_ERROR = 'server_error',\n}\n\nexport interface IArticleUnavailableDetail {\n groupId: string;\n unavailableReason: EArticleUnavailableReason;\n}\n","export const dateToLocalISO = function (timeStamp: number, timeZone: number) {\n // off为当地时区相对UTC的偏移量,日本为9,中国为8\n const off = -timeZone * 60;\n const absoff = Math.abs(off);\n return `${\n new Date(timeStamp * 1000 - off * 60 * 1000).toISOString().substr(0, 23) +\n (off > 0 ? '-' : '+') +\n (absoff / 60).toFixed(0).padStart(2, '0')\n }:${(absoff % 60).toString().padStart(2, '0')}`;\n};\n","import {\n ArticleDetailUtil,\n EArticleClass,\n IArticleDetail,\n IGalleryArticleDetail,\n IImage,\n IRichArticleDetail,\n IVideoArticleDetail,\n VideoUtils,\n} from 'shared/models';\nimport { ImageObject, SocialMediaPosting, VideoObject } from 'schema-dts';\nimport { Region } from '@lemon8/web-app-shared/i18n';\nimport type { TFunction } from 'i18next';\nimport { removeEscapedSpecialXmlCharacter } from 'shared/utils/escape-xml';\nimport { dateToLocalISO } from 'shared/utils/format/time-fowmatter';\n\nexport const ArticleJsonLDUtil = {\n getTitle: (props: { article: IArticleDetail; region: Region; t: TFunction }): string => {\n const { article, t } = props;\n\n const articleTitle = article.title;\n if (articleTitle) {\n return removeEscapedSpecialXmlCharacter(articleTitle.replace(/\\s+/g, ' '));\n }\n\n // 3. fallback title according to article class\n if (article.articleClass === EArticleClass.GALLERY) {\n return `${t('user_published_gallery').replace('%s', article.author.nickName)} | Lemon8`;\n } else if (article.articleClass === EArticleClass.VIDEO) {\n return `${t('own_video').replace('%s', article.author.nickName)} | Lemon8`;\n } else {\n return `${t('user_published_article').replace('%s', article.author.nickName)} | Lemon8`;\n }\n },\n getDescription: (props: { article: IArticleDetail; region: Region; t: TFunction }): string => {\n const { article } = props;\n\n const articleShortContent = article.shortContent;\n if (articleShortContent) {\n return removeEscapedSpecialXmlCharacter(articleShortContent.replace(/\\s+/g, ' '));\n }\n return ArticleJsonLDUtil.getTitle(props);\n },\n getKeywords: (props: { article: IArticleDetail; region: Region; t: TFunction }): string[] => {\n const { article } = props;\n\n const result: string[] = [];\n const { relatedQueryInfos } = article;\n\n const articleTitle = article.title;\n if (articleTitle) {\n result.push(articleTitle);\n }\n\n result.push(article.author.nickName);\n result.push(...relatedQueryInfos.map((info) => info.word));\n result.push('Lemon8');\n return result;\n },\n getSocialMediaJsonLD: (props: {\n article: IArticleDetail;\n region: Region;\n t: TFunction;\n abInfo: Record;\n }): SocialMediaPosting => {\n // region: page on the URL query\n const { article, region, t } = props;\n const articleTranslated = ArticleDetailUtil.isTranslatedArticleToShow(article, region);\n\n const jsonLDTitle = ArticleJsonLDUtil.getTitle(props);\n const jsonLDDescription = ArticleJsonLDUtil.getDescription(props);\n const jsonLDKeywords = ArticleJsonLDUtil.getKeywords(props);\n const canonicalUrl = articleTranslated\n ? `https://www.lemon8-app.com${ArticleDetailUtil.getCurrentArticleCanonicalUri(article, region)}`\n : `https://www.lemon8-app.com${ArticleDetailUtil.getOriginalArticleCanonicalUri(article)}`;\n\n const articleTitle = article.title;\n\n const { readCount, diggCount, favoriteCount, commentCount, publishTime, modifyTime, gptSummary } = article;\n\n const imageList: ImageObject[] = [];\n\n if (article.articleClass === EArticleClass.GALLERY) {\n const { imageList: galleryImageList, galleryLabels, ocrText = [] } = article as IGalleryArticleDetail;\n\n const imageListWithExtraInfo = galleryImageList.map((image, index) => {\n return {\n ...image,\n imgOcrText: ocrText[index] || '',\n };\n });\n\n imageList.push(\n ...imageListWithExtraInfo.map((image: IImage & { imgOcrText: string }, index: number): ImageObject => {\n const galleryKeywords = galleryLabels\n .filter((label) => label.imageIndex === index)\n .map((label) => label.name);\n\n return {\n '@type': 'ImageObject',\n url: image.url,\n contentUrl: image.url,\n representativeOfPage: 'True',\n keywords: [...galleryKeywords, articleTitle, article.author.nickName, 'Lemon8'],\n caption: t('own_picture_with_count')\n .replace('%s', articleTitle)\n .replace('%d', String(index + 1)),\n embeddedTextCaption: !articleTranslated ? image.imgOcrText || '' : '',\n };\n }),\n );\n } else {\n const { largeImage } = article as IVideoArticleDetail | IRichArticleDetail;\n imageList.push({\n '@type': 'ImageObject',\n url: largeImage.url,\n contentUrl: largeImage.url,\n representativeOfPage: 'True',\n keywords: [articleTitle, article.author.nickName, 'Lemon8'],\n caption: t('own_picture_with_count').replace('%s', articleTitle).replace('%d', '1'),\n } as ImageObject);\n }\n\n const articleBaseJsonLD: SocialMediaPosting = {\n '@type': 'SocialMediaPosting',\n headline: jsonLDTitle,\n description: jsonLDDescription,\n keywords: jsonLDKeywords,\n url: canonicalUrl,\n commentCount,\n\n datePublished: dateToLocalISO(publishTime, /** currently fix timezone to JP. @lidiang */ 9),\n\n image: imageList,\n sharedContent: imageList,\n\n mainEntityOfPage: {\n '@id': canonicalUrl,\n '@type': 'WebPage',\n },\n interactionStatistic: [\n {\n '@type': 'InteractionCounter',\n interactionType: {\n '@type': 'ViewAction',\n },\n userInteractionCount: readCount,\n },\n {\n '@type': 'InteractionCounter',\n interactionType: {\n '@type': 'LikeAction',\n },\n userInteractionCount: diggCount,\n },\n {\n '@type': 'InteractionCounter',\n interactionType: {\n '@type': 'BookmarkAction',\n },\n userInteractionCount: favoriteCount,\n },\n ],\n };\n\n if (modifyTime) {\n articleBaseJsonLD.dateModified = dateToLocalISO(modifyTime, /** currently fix timezone to JP. @lidiang */ 9);\n }\n\n if (gptSummary) {\n articleBaseJsonLD.abstract = gptSummary;\n }\n\n return articleBaseJsonLD;\n },\n getVideoObjectJsonLD: (props: {\n article: IVideoArticleDetail;\n region: Region;\n t: TFunction;\n abInfo: Record;\n }): VideoObject => {\n const { article } = props;\n const {\n video,\n readCount,\n diggCount,\n favoriteCount,\n largeImage,\n publishTime,\n gptSummary,\n isTranslatedVersion = false,\n } = article;\n\n const title = ArticleJsonLDUtil.getTitle(props);\n const description = ArticleJsonLDUtil.getTitle(props);\n\n const output: VideoObject = {\n '@type': 'VideoObject',\n name: title,\n description,\n thumbnailUrl: largeImage.url,\n uploadDate: dateToLocalISO(publishTime, /** currently fix timezone to JP. @lidiang */ 9),\n contentUrl: video.encryptedUrl || video.url,\n width: `${article.video.width}`,\n height: `${article.video.height}`,\n interactionStatistic: [\n {\n '@type': 'InteractionCounter',\n interactionType: {\n '@type': 'WatchAction',\n },\n userInteractionCount: readCount,\n },\n {\n '@type': 'InteractionCounter',\n interactionType: {\n '@type': 'LikeAction',\n },\n userInteractionCount: diggCount,\n },\n {\n '@type': 'InteractionCounter',\n interactionType: {\n '@type': 'BookmarkAction',\n },\n userInteractionCount: favoriteCount,\n },\n ],\n };\n\n if (article.video.duration) {\n output.duration = VideoUtils.durationTo8601(article.video.duration);\n }\n\n if (gptSummary) {\n output.abstract = gptSummary;\n }\n\n if (video.ocr?.length && !isTranslatedVersion) {\n output.embeddedTextCaption = video.ocr.join(', ');\n }\n\n return output;\n },\n};\n","import { IArticleDetail } from 'shared/models/article/article';\nimport { Region } from '@lemon8/web-app-shared/i18n';\nimport { IArticleUnavailableDetail } from './article-unavailable';\nimport { ArticleJsonLDUtil } from 'shared/models/article/json-ld-util';\n\nexport const ArticleDetailUtil = {\n isArticleAvailable: (article: IArticleUnavailableDetail | IArticleDetail): article is IArticleDetail => {\n return !('unavailableReason' in article);\n },\n /**\n * article has translated version\n */\n hasTranslatedVersion: (article: IArticleDetail): boolean => {\n const { translatedRegions = [] } = article;\n return translatedRegions.length !== 0;\n },\n /**\n * article is translated, and translated version is needed to show\n */\n isTranslatedArticleToShow: (article: IArticleDetail, _region: Region): boolean => {\n const { isTranslatedVersion = false } = article;\n return isTranslatedVersion;\n },\n\n /**\n * get canonical Article URL in created region\n */\n getOriginalArticleCanonicalUri: (article: IArticleDetail): string => {\n return `/${article.author.linkName}/${article.groupId}?region=${article.articleRegion}`;\n },\n\n /**\n * get canonical Article URL in current page region\n */\n getCurrentArticleCanonicalUri: (article: IArticleDetail, region: string): string => {\n return `/${article.author.linkName}/${article.groupId}?region=${region}`;\n },\n\n JsonLD: ArticleJsonLDUtil,\n};\n","import { IImage, IVideo } from '../media';\nimport { IUserAuthInfo } from 'shared/models/user-auth-info';\n\nexport enum ECommentPermission {\n All = 0, // 显示评论区\n Follower = 1, // 粉丝可评论\n Self = 2, // 自己可评论\n Disable = 3, // 不可评论,不显示评论区\n Friend = 4, // 好友可评论\n}\n\nexport interface GalleryLabelType {\n direction: string;\n id: string;\n imageIndex: number;\n name: string;\n type: string;\n xPct: number;\n yPct: number;\n}\n\nexport enum EArticleClass {\n GALLERY = 'Gallery',\n VIDEO = 'Video',\n ARTICLE = 'Article',\n}\n\nexport interface IIllegalInfo {\n warningLabel: string;\n warningLabelType: number;\n}\n\nexport interface IArticleDetail {\n groupId: string;\n templateId?: string;\n imprId?: string;\n\n // author\n author: {\n userId: string;\n avatar: string;\n authInfo: IUserAuthInfo;\n nickName: string;\n linkName: string;\n };\n\n // content\n articleClass: EArticleClass;\n\n // TODO cast to i18n:Region\n articleRegion: string;\n title: string;\n content: string;\n shortContent: string;\n\n translatedRegions?: string[];\n isTranslatedVersion?: boolean;\n\n gptSummary?: string;\n\n // content publish time\n publishTime: number;\n modifyTime?: number;\n\n // interaction\n readCount: number;\n diggCount: number;\n favoriteCount: number;\n commentCount: number;\n\n // legacy hashtag\n forumList?: {\n id: string;\n name: string;\n }[];\n\n // poi\n locationInfo?: {\n poiId: string;\n poiName: string;\n };\n\n // search after read\n relatedQuery?: string;\n relatedQueryInfos: { word: string }[];\n\n // privacy & safety\n isOnlyFollow: boolean;\n commentPermission: ECommentPermission;\n illegalInfo?: IIllegalInfo;\n}\n\nexport interface IVideoArticleDetail extends IArticleDetail {\n articleClass: EArticleClass.VIDEO;\n largeImage: IImage;\n video: IVideo & { encryptedUrl?: string; ocr?: string[] };\n}\n\nexport interface IGalleryArticleDetail extends IArticleDetail {\n articleClass: EArticleClass.GALLERY;\n imageList: IImage[];\n galleryLabels: GalleryLabelType[];\n ocrText?: string[]; // ocr识别文字\n imageAutoGenDesp?: string[]; // 图片描述自动生成\n}\n\nexport interface IRichArticleDetail extends IArticleDetail {\n articleClass: EArticleClass.ARTICLE;\n largeImage: IImage;\n}\n\nexport type TArticleDetail = IVideoArticleDetail | IGalleryArticleDetail | IRichArticleDetail;\n","import { TCommentRichContent } from './rich-content';\nimport { IUserAuthInfo } from 'shared/models/user-auth-info';\nimport { IImage } from '../media';\nimport { CommentJsonLDUtil } from 'shared/models/comments/json-ld-util';\n\nexport interface IBaseComment {\n commentId: string;\n // timestamp in second\n createTime: number;\n\n author: {\n userId: string;\n avatar: string;\n linkName: string;\n nickName: string;\n authInfo: IUserAuthInfo;\n };\n\n // content\n text: string;\n richContent?: TCommentRichContent[];\n imageList?: IImage[];\n\n // interaction\n diggCount: number;\n}\n\n/**\n * 1st-level comment\n */\nexport interface IPrimaryComment extends IBaseComment {\n replyCount: number;\n}\n\n/**\n * 2nd-level comment\n */\nexport interface IReply extends IBaseComment {\n replyToCommentId: string;\n}\n\n/**\n * 3rd-level comment\n */\nexport interface IReplyToReply extends IReply {\n replyToReplyId: string;\n}\n\nexport type TComment = IPrimaryComment | IReply | IReplyToReply;\n\nexport const CommentUtil = {\n isReply(comment: TComment): comment is IReply {\n return (comment as IReply).replyToCommentId !== void 0;\n },\n isPrimaryComment(comment: TComment): comment is IPrimaryComment {\n return !CommentUtil.isReply(comment);\n },\n isReplyToReply: (comment: TComment): comment is IReplyToReply => {\n return CommentUtil.isReply(comment) && (comment as IReplyToReply).replyToReplyId !== void 0;\n },\n JsonLd: CommentJsonLDUtil,\n};\n\nexport const CommentRichContentUtil = {};\n","import { Region } from '@lemon8/web-app-shared/i18n';\nimport { Comment } from 'schema-dts';\nimport { TComment } from 'shared/models';\n\nexport const CommentJsonLDUtil = {\n getCommentsJsonLd: (props: { comments: TComment[]; region: Region }): Comment[] => {\n const { comments, region } = props;\n\n return comments.map((item: TComment) => {\n return {\n '@type': 'Comment',\n text: item.text.replace(/\\s/g, ' ') || '',\n author: {\n '@type': 'Person',\n name: item.author.nickName,\n alternateName: item.author.linkName,\n image: item.author.avatar,\n identifier: {\n '@type': 'PropertyValue',\n propertyID: 'Username',\n value: item.author.linkName,\n },\n mainEntityOfPage: {\n '@type': 'ProfilePage',\n '@id': `https://www.lemon8-app.com/${item.author.linkName}?region=${region}`,\n },\n },\n };\n });\n },\n};\n","/**\n * 评论富文本类型\n */\nexport enum ECommentRichContentCategory {\n MENTION_USER = 1000,\n}\n\ninterface ICommentRichContent {\n type: ECommentRichContentCategory;\n start: number;\n length: number;\n}\n\nexport interface IMentionUserRichContent extends ICommentRichContent {\n type: ECommentRichContentCategory.MENTION_USER;\n mentionUserId: string;\n}\n\nexport type TCommentRichContent = IMentionUserRichContent;\n","import { Article, Topic, User } from '../legacy';\nimport { IGuessWordCards, IUserDetail, TArticleDetail, TComment } from 'shared/models';\n\ninterface WithLoadmoreOptions {\n items: T[];\n hasMore: boolean;\n minCursor: number;\n maxCursor: number;\n}\n\nexport interface IDiscoverData {\n query: string;\n isBanned: false;\n dataFrom: string;\n article: WithLoadmoreOptions
;\n article_v2: WithLoadmoreOptions<{\n article: TArticleDetail;\n author: IUserDetail;\n comments: TComment[];\n }>;\n user: WithLoadmoreOptions;\n hashtag: WithLoadmoreOptions;\n guessWordCards: IGuessWordCards;\n}\n\nexport enum EDiscoverUnavailableReason {\n BANNED = 'banned',\n SERVER_ERROR = 'server_error',\n}\n\nexport interface IDiscoverUnavailableData {\n query: string;\n unavailableReason: EDiscoverUnavailableReason;\n}\n\nexport type TDiscoverData = IDiscoverData | IDiscoverUnavailableData;\n","import _get from 'lodash/get';\nimport { IDiscoverData, IDiscoverUnavailableData } from 'shared/models/discover';\n\nexport const DiscoverUtil = {\n Libra: {\n shouldUseSortModel: (parameters: unknown) => Boolean(_get(parameters, 'seo_web.seo_sort_model_webid', 0)),\n shouldFormatAsArticleDetail: (parameters: unknown) => Boolean(_get(parameters, 'seo_web.kep_immersive', 0)),\n },\n isDiscoverDataAvailable: (input: IDiscoverData | IDiscoverUnavailableData): input is IDiscoverData => {\n return !('unavailableReason' in input);\n },\n};\n","import { Image } from './image';\n\nexport enum ArticleClass {\n GALLERY = 'Gallery',\n VIDEO = 'Video',\n ARTICLE = 'Article',\n}\n\nexport interface Article {\n groupId: string;\n\n imprId?: string;\n\n articleClass: ArticleClass;\n\n canonicalUri: string;\n\n author: ArticleAuthor;\n\n title: string;\n\n shortContent: string;\n\n imageList: Image[];\n\n largeImage: Image;\n\n articleLikes: number;\n}\n\nexport interface ArticleAuthor {\n userId: string;\n\n nickName: string;\n\n description: string;\n\n avatar: string;\n\n publishCount: number;\n\n authInfo: any;\n}\n","export enum ECategoryNameIDMap {\n follow = '72',\n foryou = '0',\n health = '2',\n food = '12', // 日本 & 泰国 & 印尼\n food_guide = '616', // 日本分拆美食探店频道\n food_recipe = '615', // 日本分拆美食食谱频道\n lifestyle = '19',\n beauty = '569',\n fashion = '570',\n travel = '20',\n profile = '486', // user profile\n poi = '650', // position\n hashtag_channel_recent = '585', // hashtag post by timing\n hashtag_channel_hot = '590', // hashtag post by trending\n relation = '61', // relation article\n pet = '37',\n fitness = '674',\n home = '14',\n productivity = '685',\n reading = '686',\n photography = '669',\n skincare = '668',\n self_growth = '673',\n makeup = '701',\n hair = '702',\n nail = '703',\n}\n\nexport const CategoryIDNameMap: any = {\n 72: 'follow',\n 0: 'foryou',\n 2: 'health',\n 12: 'food', // 日本 & 泰国 & 印尼\n 616: 'food_guide', // 日本分拆美食探店频道\n 615: 'food_recipe', // 日本分拆美食食谱频道\n 19: 'lifestyle',\n 569: 'beauty',\n 570: 'fashion',\n 20: 'travel',\n 486: 'profile', // user profile\n 650: 'poi', // position\n 585: 'hashtag_channel_recent', // hashtag post by timing\n 590: 'hashtag_channel_hot', // hashtag post by trending\n 61: 'relation', // relation article\n 37: 'pet',\n 674: 'fitness',\n /** us 新增 */\n 14: 'home',\n 685: 'productivity',\n 686: 'reading',\n /** th 新增 */\n 669: 'photography',\n 668: 'skincare',\n 673: 'self_growth',\n 701: 'makeup',\n 702: 'hair',\n 703: 'nail',\n};\n\nexport const CategoryNameIDMap = Object.keys(CategoryIDNameMap).reduce(\n (pre: any, cur: any) => ({\n ...pre,\n [CategoryIDNameMap[cur]]: cur,\n }),\n {},\n);\n","export interface IMedia {\n url: string;\n\n height: number;\n\n width: number;\n}\n\nexport type IImage = IMedia;\n\nexport interface IVideo extends IMedia {\n duration: number;\n}\n\nexport const VideoUtils = {\n durationTo8601: (duration: number) => {\n const hour = Math.trunc(duration / 3600);\n const minute = Math.trunc((duration - hour * 3600) / 60);\n const second = Math.trunc(duration - (hour * 3600 + minute * 60));\n let ret = 'PT';\n if (hour) {\n ret += `${hour}H`;\n }\n if (minute) {\n ret += `${minute}M`;\n }\n if ((!hour && !minute) || second) {\n ret += `${second}S`;\n }\n return ret;\n },\n};\n","import { EPageType } from 'shared/models/page-type';\n\nexport interface IPageTraffic {\n canonicalUrl: string;\n pageType: EPageType;\n seoPageId: string;\n currentPid?: string;\n}\n\nexport interface IFeedPageTraffic extends IPageTraffic {\n pageType: EPageType.feed;\n categoryId: string;\n}\n\nexport interface IHashtagPageTraffic extends IPageTraffic {\n pageType: EPageType.hashtag;\n hashtagId: string;\n}\n\nexport interface IArticlePageTraffic extends IPageTraffic {\n pageType: EPageType.article;\n groupId: string;\n mediaId: string;\n contentByTranslate: 0 | 1;\n}\n\nexport interface IVideoPageTraffic extends IPageTraffic {\n pageType: EPageType.video;\n groupId: string;\n mediaId: string;\n contentByTranslate: 0 | 1;\n}\n\nexport interface IPOIPageTraffic extends IPageTraffic {\n pageType: EPageType.poi;\n poiId: string;\n}\n\nexport interface IDiscoverPageTraffic extends IPageTraffic {\n pageType: EPageType.discover;\n keyword: string;\n standardKeyword: string;\n hasBreadCrumb: boolean;\n}\n\nexport interface IUserPageTraffic extends IPageTraffic {\n pageType: EPageType.user;\n userLinkName: string;\n userId: string;\n}\n\nexport interface IUserFollowPageTraffic extends IPageTraffic {\n pageType: EPageType.user_follow;\n userLinkName: string;\n userId: string;\n}\n\nexport interface IUserTopicPageTraffic extends IPageTraffic {\n pageType: EPageType.user_topic;\n userLinkName: string;\n userId: string;\n}\n\nexport interface ISearchSugPageTraffic extends IPageTraffic {\n pageType: EPageType.search_sug;\n}\n\nexport type PageLevelTraffic =\n | IFeedPageTraffic\n | IHashtagPageTraffic\n | IPOIPageTraffic\n | IArticlePageTraffic\n | IVideoPageTraffic\n | IDiscoverPageTraffic\n | IUserPageTraffic\n | IUserFollowPageTraffic\n | IUserTopicPageTraffic\n | ISearchSugPageTraffic;\n\nexport const PageLevelTrafficUtil = {\n getPageIdFromTraffic: (traffic: PageLevelTraffic): string | null => {\n if (traffic.pageType === EPageType.feed) {\n return traffic.categoryId;\n }\n\n if (traffic.pageType === EPageType.hashtag) {\n return traffic.hashtagId;\n }\n\n if (traffic.pageType === EPageType.poi) {\n return traffic.poiId;\n }\n\n if (traffic.pageType === EPageType.article || traffic.pageType === EPageType.video) {\n return traffic.groupId;\n }\n\n if (traffic.pageType === EPageType.discover) {\n return traffic.keyword;\n }\n\n if (\n traffic.pageType === EPageType.user ||\n traffic.pageType === EPageType.user_follow ||\n traffic.pageType === EPageType.user_topic\n ) {\n return traffic.userId;\n }\n\n return null;\n },\n};\n","export enum EWordType {\n SarWord = 1,\n RSWord = 2,\n GuessWord = 3,\n BreadcrumbsWord = 4,\n}\n\nexport interface SearchWord {\n word: string;\n wordType: EWordType;\n}\n\nexport interface IGuessWordCard {\n words: SearchWord[];\n pos: number;\n}\n\nexport type IGuessWordCards = IGuessWordCard[];\n","export enum SugType {\n normal = 1,\n user = 2,\n hashtag = 3,\n}\n\nexport interface SearchSugItem {\n id: string;\n /** 推荐名称 */\n text: string;\n /** 推荐词类型,目前展示上只区分用户 */\n type: SugType;\n /** 推荐词来源类型,目前展示上只区分是否历史词(服务端返回可能不止这两种类型) */\n rectType: 'normal' | 'history';\n /** 高亮区域,格式[start, end] */\n highlightPos: [number, number];\n /** 用户头像, type为user时候会有该参数 */\n avatar?: string;\n /** 用户user id, type为user时候会有该参数 */\n userId?: string;\n /** 排序(从0开始) */\n rank?: number;\n /** 是否为认证用户 */\n isUserVerify?: boolean;\n}\n","export enum ETopicUnavailableReason {\n NOT_FOUND = 'not_found',\n SERVER_ERROR = 'server_error',\n}\n\nexport interface ITopicUnavailableDetail {\n hashtagId: string;\n unavailableReason: ETopicUnavailableReason;\n}\n","import { HashtagInfo } from 'shared/models';\nimport { ITopicUnavailableDetail } from 'shared/models';\n\nexport const TopicUtil = {\n isTopicAvailable: (topic: HashtagInfo | ITopicUnavailableDetail): topic is HashtagInfo => {\n return !('unavailableReason' in topic);\n },\n};\n","import { Region } from '@lemon8/web-app-shared/i18n';\nimport { InteractionCounter, Person } from 'schema-dts';\nimport { IUserDetail } from 'shared/models';\n\nexport const UserJsonLDUtil = {\n getPersonJsonLD: (props: { user: IUserDetail; userRegion: Region }): Person => {\n const { user, userRegion } = props;\n\n const person: Person = {\n '@type': 'Person',\n url: `https://www.lemon8-app.com/${user.linkName}?region=${userRegion}`,\n name: user.nickName,\n alternateName: user.linkName,\n identifier: {\n '@type': 'PropertyValue',\n propertyID: 'Username',\n value: user.linkName,\n },\n };\n\n const interactionStatistic: InteractionCounter[] = [];\n\n if (user.dugCount || user.favoredCount) {\n interactionStatistic.push({\n '@type': 'InteractionCounter',\n interactionType: {\n '@type': 'LikeAction',\n },\n userInteractionCount: Number(user.dugCount) + Number(user.favoredCount),\n });\n }\n\n if (user.followerCount || user.followingCount) {\n interactionStatistic.push({\n '@type': 'InteractionCounter',\n interactionType: {\n '@type': 'FollowAction',\n },\n userInteractionCount: Number(user.followerCount) + Number(user.followingCount),\n });\n }\n\n if (user.postCount) {\n interactionStatistic.push({\n '@type': 'InteractionCounter',\n interactionType: {\n '@type': 'WriteAction',\n },\n userInteractionCount: Number(user.postCount),\n });\n }\n\n person.interactionStatistic = interactionStatistic;\n\n return person;\n },\n};\n","import { IUserAuthInfo } from 'shared/models/user-auth-info';\nimport { IUserUnavailableDetail } from 'shared/models';\nimport { UserJsonLDUtil } from 'shared/models/user/json-ld-util';\n\nexport interface IUserDetail {\n userId: string;\n avatar: string;\n authInfo: IUserAuthInfo;\n nickName: string;\n linkName: string;\n\n gender: EUserGender;\n ageGroup?: number;\n location?: string;\n\n description: string;\n\n postCount: number;\n diggCount: number;\n dugCount: number;\n favoriteCount: number;\n favoredCount: number;\n followingCount: number;\n followerCount: number;\n\n thirdLinks: {\n platform: string;\n name: string;\n url: string;\n }[];\n\n privacyStatus: EPrivacyStatus;\n\n // banned account\n isBannedAccount: boolean;\n}\n\nexport enum EUserGender {\n Unknown = 0,\n MALE = 1,\n FEMALE = 2,\n}\n\nexport enum EPrivacyStatus {\n Normal = -1,\n UserPageNoPermission = 0,\n UserPageHasPermission = 1,\n PrivateUser = 2,\n UnderAge = 3,\n}\n\nexport const UserDetailUtil = {\n isUserAvailable: (user: IUserDetail | IUserUnavailableDetail): user is IUserDetail => {\n return !('unavailableReason' in user);\n },\n JsonLD: UserJsonLDUtil,\n};\n","export enum EUserUnavailableReason {\n NOT_FOUND = 'not_found',\n SERVER_ERROR = 'server_error',\n}\n\nexport interface IUserUnavailableDetail {\n userId: string;\n unavailableReason: EUserUnavailableReason;\n}\n","import { Image } from '../legacy/image';\nimport { Article } from '../legacy';\n\nexport enum PrivacyStatus {\n /** 未取值时 */\n Init = -2,\n /** 正常没有设置privacy的用户 */\n Normal = -1,\n UserPageNoPermission = 0,\n UserPageHasPermission = 1,\n PrivateUser = 2,\n UnderAge = 3,\n}\n\nexport interface UserRelated {\n following_count: number;\n has_more: boolean;\n impr_id: string;\n offset: number;\n session_impr_id: string;\n users: RelatedUser[];\n}\n\nexport interface RelatedUser {\n description: string;\n followers_count: number;\n following_count: number;\n avatar: Image;\n id: string;\n name: string;\n unique_name: string;\n recommend_reason: string;\n user_auth_info: string;\n user_liked_count: number;\n post_count: number;\n\n article_metas: {\n article_class: string;\n cover_images: Image[];\n group_id: string;\n img_url: Image;\n item_id: string;\n short_content: string;\n title: string;\n }[];\n}\n\nexport interface UserPosts {\n items: Article[];\n hasMore: boolean;\n maxBeHotTime?: number;\n offset: number;\n}\n\nexport interface UserInfo {\n // 用户id\n user_id: string;\n user_id_str: string;\n media_id: string;\n media_id_str: string;\n // 用户名,用于展示\n name: string;\n // 用户描述\n description: string;\n // 认证信息\n user_auth_info: string;\n // 1:可展示,0:不可展示\n user_status: number;\n // 头像\n icon_url: string;\n // 1:已关注该用户,0:未关注\n is_following: number;\n // 1:已被该用户关注,0:未被关注\n is_followed: number;\n // 发文数\n posts_count: number;\n // 关注数\n following_count: number;\n // 粉丝数\n followers_count: number;\n // 背景图url\n background_url: string;\n // 分享数\n share_count: number;\n // 分享url\n share_url: string;\n // 用户标签\n user_tags: {\n name: string;\n text: string;\n }[];\n // 拉黑主页用户或被主页用户拉黑,此时不能查看该主页\n is_blocked: boolean;\n // 被主页用户拉黑\n is_blocked_by_profile: boolean;\n // 拉黑主页用户\n is_blocking_profile: boolean;\n privacy_status: PrivacyStatus;\n // 个人网址\n personal_url: string;\n // 用户被点赞总数\n user_liked_count: number;\n // 草稿数量,N项目主态个人页展示\n draft_count: number;\n // 点赞总数\n digg_count: number;\n // 收藏总数\n favorite_count: number;\n tabs: UserTabType[];\n [key: string]: any;\n}\n\nexport interface UserTabType {\n id: string;\n show_name: string;\n is_default: boolean;\n visibility: boolean;\n}\n","/**\n * xml 中特殊字符过滤\n * 参考 https://developers.google.com/search/docs/advanced/sitemaps/build-sitemap#sitemap-encoding-guidelines\n */\nexport const escapeSpecialXmlCharacter = (content: string): string =>\n content\n .replace(/&/g, '&')\n .replace(/'/g, ''')\n .replace(/\"/g, '"')\n .replace(/>/g, '>')\n .replace(/\n content\n .replace(/&/g, '&')\n .replace(/'/g, \"'\")\n .replace(/'/g, \"'\")\n .replace(/"/g, '\"')\n .replace(/>/g, '>')\n .replace(/</g, '<');\n\nexport const removeEscapedSpecialXmlCharacter = (content: string): string =>\n content.replace(/&(lt|gt|nbsp|amp|quot);/gi, '');\n","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.$ABTest = void 0;\nconst jotai_1 = require(\"jotai\");\nexports.$ABTest = (0, jotai_1.atom)({\n versions: '',\n parameters: {},\n});\nexports.$ABTest.debugLabel = '$ABTest';\n","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.$AppIdConfig = void 0;\nconst jotai_1 = require(\"jotai\");\nexports.$AppIdConfig = (0, jotai_1.atom)({\n wapId: 0,\n appId: 0,\n});\nexports.$AppIdConfig.debugLabel = '$AppIdConfig';\n","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.$Crawler = exports.GoogleCrawlerSubType = exports.CrawlerType = void 0;\nconst jotai_1 = require(\"jotai\");\nvar CrawlerType;\n(function (CrawlerType) {\n CrawlerType[\"Google\"] = \"google\";\n})(CrawlerType = exports.CrawlerType || (exports.CrawlerType = {}));\nvar GoogleCrawlerSubType;\n(function (GoogleCrawlerSubType) {\n GoogleCrawlerSubType[\"GoogleAPIs\"] = \"google_apis\";\n GoogleCrawlerSubType[\"AdsBot\"] = \"ads_bot\";\n GoogleCrawlerSubType[\"AdSense\"] = \"mediapartners\";\n GoogleCrawlerSubType[\"Image\"] = \"image\";\n GoogleCrawlerSubType[\"News\"] = \"news\";\n GoogleCrawlerSubType[\"Video\"] = \"video\";\n GoogleCrawlerSubType[\"GoogleBot\"] = \"googlebot\";\n GoogleCrawlerSubType[\"GoogleBot$Mobile\"] = \"googlebot(mobile)\";\n GoogleCrawlerSubType[\"FeedFetcher\"] = \"feed_fetcher\";\n GoogleCrawlerSubType[\"ReadAloud\"] = \"read_aloud\";\n GoogleCrawlerSubType[\"Favicon\"] = \"favicon\";\n GoogleCrawlerSubType[\"Storebot\"] = \"store_bot\";\n GoogleCrawlerSubType[\"SiteVerification\"] = \"site_verification\";\n})(GoogleCrawlerSubType = exports.GoogleCrawlerSubType || (exports.GoogleCrawlerSubType = {}));\nexports.$Crawler = (0, jotai_1.atom)({});\nexports.$Crawler.debugLabel = '$Crawler';\n","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.$CSPScripts = void 0;\nconst jotai_1 = require(\"jotai\");\nexports.$CSPScripts = (0, jotai_1.atom)({\n 'tea-precollect': '',\n 'slardar-precollect': '',\n 'remix-route-modules': '',\n 'remix-server-handoff': '',\n});\nexports.$CSPScripts.debugLabel = '$CSPScripts';\n","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.$I18nText = void 0;\nconst jotai_1 = require(\"jotai\");\nexports.$I18nText = (0, jotai_1.atom)({});\nexports.$I18nText.debugLabel = '$I18nText';\n","\"use strict\";\nvar __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {\n if (k2 === undefined) k2 = k;\n var desc = Object.getOwnPropertyDescriptor(m, k);\n if (!desc || (\"get\" in desc ? !m.__esModule : desc.writable || desc.configurable)) {\n desc = { enumerable: true, get: function() { return m[k]; } };\n }\n Object.defineProperty(o, k2, desc);\n}) : (function(o, m, k, k2) {\n if (k2 === undefined) k2 = k;\n o[k2] = m[k];\n}));\nvar __exportStar = (this && this.__exportStar) || function(m, exports) {\n for (var p in m) if (p !== \"default\" && !Object.prototype.hasOwnProperty.call(exports, p)) __createBinding(exports, m, p);\n};\nObject.defineProperty(exports, \"__esModule\", { value: true });\n__exportStar(require(\"./ab-test\"), exports);\n__exportStar(require(\"./crawler\"), exports);\n__exportStar(require(\"./i18n-text\"), exports);\n__exportStar(require(\"./locale\"), exports);\n__exportStar(require(\"./render-config\"), exports);\n__exportStar(require(\"./root-traffic\"), exports);\n__exportStar(require(\"./user-agent\"), exports);\n__exportStar(require(\"./web-user\"), exports);\n__exportStar(require(\"./csp-scripts\"), exports);\n__exportStar(require(\"./remix\"), exports);\n__exportStar(require(\"./app-id-config\"), exports);\n__exportStar(require(\"./server-context\"), exports);\n","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.$Locale = void 0;\nconst jotai_1 = require(\"jotai\");\nexports.$Locale = (0, jotai_1.atom)({});\nexports.$Locale.debugLabel = '$Locale';\n","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.$Location = exports.$SearchParams = void 0;\nconst jotai_1 = require(\"jotai\");\nexports.$SearchParams = (0, jotai_1.atom)(new URLSearchParams());\nexports.$Location = (0, jotai_1.atom)({});\n","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.$RenderConfig = void 0;\nconst jotai_1 = require(\"jotai\");\nexports.$RenderConfig = (0, jotai_1.atom)({\n enableStreamingSSR: false,\n disableInlineScripts: false,\n enableSSRStyleInline: false,\n});\nexports.$RenderConfig.debugLabel = '$RenderConfig';\n","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.$RootTraffic = void 0;\nconst jotai_1 = require(\"jotai\");\nexports.$RootTraffic = (0, jotai_1.atom)({});\nexports.$RootTraffic.debugLabel = '$RootTraffic';\n","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.$ServerContext = void 0;\nconst jotai_1 = require(\"jotai\");\nexports.$ServerContext = (0, jotai_1.atom)({});\n","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.$UserAgent = void 0;\nconst jotai_1 = require(\"jotai\");\nexports.$UserAgent = (0, jotai_1.atom)({\n userAgent: '',\n isMobile: false,\n isBot: false,\n isiOS: false,\n isSafari: false,\n isInApp: false,\n isMacOS: false,\n});\nexports.$UserAgent.debugLabel = '$UserAgent';\n","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.$WebUser = void 0;\nconst jotai_1 = require(\"jotai\");\nexports.$WebUser = (0, jotai_1.atom)({\n webId: '',\n});\nexports.$WebUser.debugLabel = '$WebUser';\n"],"sourceRoot":""}