{"version":3,"sources":["webpack://@lemon8/web-sharing/./client/components/loading/index.tsx","webpack://@lemon8/web-sharing/./client/utils/sharing-loader.ts","webpack://@lemon8/web-sharing/./client/utils/sharing-remix-page.tsx","webpack://@lemon8/web-sharing/./shared/atoms/article/article-comment-replies.ts","webpack://@lemon8/web-sharing/./shared/atoms/common/sharer-ab-test.ts","webpack://@lemon8/web-sharing/./shared/atoms/common/sharer-detail.ts","webpack://@lemon8/web-sharing/./shared/atoms/common/root-traffic.ts","webpack://@lemon8/web-sharing/./shared/atoms/common/page-level-traffic.ts","webpack://@lemon8/web-sharing/./shared/atoms/common/feature-flag.ts","webpack://@lemon8/web-sharing/./shared/atoms/article/article-detail.ts","webpack://@lemon8/web-sharing/./shared/atoms/article/article-related-posts.ts","webpack://@lemon8/web-sharing/./shared/atoms/article/article-comments.ts","webpack://@lemon8/web-sharing/./shared/utils/pending-queue.ts","webpack://@lemon8/web-sharing/./shared/atoms/user/user-detail.ts","webpack://@lemon8/web-sharing/./shared/atoms/user/user-posts.ts","webpack://@lemon8/web-sharing/./shared/atoms/user/user-related-user.ts","webpack://@lemon8/web-sharing/./shared/atoms/hashtag/index.ts","webpack://@lemon8/web-sharing/./shared/atoms/index.ts","webpack://@lemon8/web-sharing/./shared/atoms/poi/poi-info.ts","webpack://@lemon8/web-sharing/./shared/atoms/poi/poi-posts.ts","webpack://@lemon8/web-sharing/./shared/utils/node-pending-queue.ts","webpack://@lemon8/web-sharing/./shared/utils/safe-atom-family.ts","webpack://@lemon8/web-sharing/../libs/ark-css-links/dist/es/index.js"],"names":["LoadingBall","props","fitParent","style","loadingDiv","useRef","useEffect","current","lottie","container","renderer","loop","autoplay","animationData","LOADING_BALL","jsx","className","cls","children","ref","LoadingGradient","shadow","backgroundImage","concat","LOADING_GRADIENT_SHADOW","LOADING_GRADIENT_NO_SHADOW","Loading","variant","jsxs","Fragment","buildSharingLoader","name","args","context","loaders","setRemixParams","params","SharingRemixPage","AbsRemixPage","constructor","arguments","HeadSkeleton","BodySkeleton","useRouteLoading","canonicalUrl","useAtomValue","$SharingPageLevelTraffic","a","URL","location","pathname","$CommentRepliesStore","atom","debugLabel","$CommentReplies","safeAtomFamily","commentId","get","items","hasMore","offset","set","input","old","_objectSpread","encodeURIComponent","$CommentRepliesLoadmore","$SharerABTest","versions","parameters","$SharerDetail","$RootTraffic","$OriginRootTraffic","$FeatureFlags","$ArticleDetailStore","$ArticleDetail","groupId","data","Unreachable","ERelatedChannel","$ArticleRelatedPostsStore","$ArticleRelatedPosts","Promise","catch","relatedChannel","sessionImprId","maxBehotTime","searchId","maxCursor","$ArticleRelatedPostsLoadmore","store","$ArticleCommentsStore","$ArticleComments","$ArticleCommentsLoadmore","comment","PendingQueue","_tasks","_doInterval","length","console","log","forEach","task","window","setInterval","push","pendingQueue","$UserDetailStore","$UserDetail","userUniqueName","resolve","userDetail","$UserPostStore","$UserPost","userLinkName","$UserPostLoadmore","$UserRelatedUserStore","$UserRelatedUser","$UserRelatedUserLoadmore","$HashtagInfoStore","$HashtagPopularPostStore","$HashtagRecentPostStore","$HashtagInfo","hashtagId","$HashtagPopularPost","$HashtagPopularPostLoadmore","$HashtagRecentPost","$HashtagRecentPostLoadmore","Atoms","$Locale","$ABTest","$RenderConfig","$WebUser","$UserAgent","$I18nText","$CSPScripts","AtomFamilies","$POIInfo","$POIPosts","$POIInfoStore","poiId","$POIPostStore","$POIPostsLoadmore","NodePendingQueue","nodePendingQueue","initializeAtom","areEqual","family","initializeAtomWrapper","param","remove","atomFamily","manifestCache","getManifest","__remixManifest","cssLinks","routeId","routes","cssImports","map","href","rel"],"mappings":"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","file":"331-a419d9fe47cf97e89e45.js","sourcesContent":["import { CSSProperties, useEffect, useRef } from 'react';\nimport LOADING_GRADIENT_SHADOW from './assets/gradient_shadow.png';\nimport LOADING_GRADIENT_NO_SHADOW from './assets/gradient_no_shadow.png';\nimport LOADING_BALL from './assets/loading_ball.json';\nimport cls from 'classnames';\nimport lottie from 'lottie-web/build/player/lottie_light_canvas';\n\nimport './style.scss';\n\nexport interface LoadingProps {\n variant: 'ball' | 'gradient';\n\n /**\n * @default false\n */\n shadow?: boolean;\n\n /**\n * @default false\n */\n fitParent?: boolean;\n\n style?: CSSProperties;\n}\n\nexport const LoadingBall = (props: { fitParent: boolean; style: CSSProperties }): JSX.Element => {\n const { fitParent, style = {} } = props;\n const loadingDiv = useRef(null);\n\n useEffect(() => {\n if (loadingDiv.current) {\n lottie.loadAnimation({\n container: loadingDiv.current,\n renderer: 'canvas',\n loop: true,\n autoplay: true,\n animationData: LOADING_BALL,\n });\n }\n }, []);\n\n return (\n \n
\n
\n );\n};\n\nexport const LoadingGradient = (props: { shadow: boolean; fitParent: boolean; style: CSSProperties }): JSX.Element => {\n const { shadow, fitParent, style = {} } = props;\n return (\n \n \n \n );\n};\n\nexport const Loading = (props: LoadingProps): JSX.Element => {\n const { variant, shadow = false, fitParent = false, style = {} } = props;\n\n return (\n <>\n {variant === 'ball' && }\n {variant === 'gradient' && }\n \n );\n};\n","import { LoaderFunction } from '@remix-run/node';\n\nexport const buildSharingLoader = (name: string): LoaderFunction => {\n return (args: any) => {\n const {\n context: { loaders, setRemixParams },\n params,\n } = args;\n\n setRemixParams(params);\n return loaders[name]();\n };\n};\n","import { AbsRemixPage } from '@lemon8/web-app-shared/ssr';\nimport { useAtomValue } from 'jotai';\nimport { $SharingPageLevelTraffic } from 'shared/atoms';\nimport { useLocation } from '@remix-run/react';\nimport { Loading } from '~/components/loading';\n\nexport abstract class SharingRemixPage extends AbsRemixPage {\n HeadSkeleton = () => {\n return (\n <>\n Lemon8 Loading...\n \n );\n };\n BodySkeleton = () => {\n return (\n <>\n \n \n );\n };\n\n useRouteLoading = () => {\n const { canonicalUrl } = useAtomValue($SharingPageLevelTraffic);\n\n if (__BUILD_TARGET__ === 'server') {\n return false;\n }\n\n const a = new URL(canonicalUrl);\n return location.pathname !== a.pathname;\n };\n}\n","import { atom } from 'jotai';\nimport { safeAtomFamily } from 'shared/utils/safe-atom-family';\nimport { TComment } from 'shared/models/comment';\n\nexport interface ICommentReplies {\n items: TComment[];\n offset: number;\n hasMore: boolean;\n}\n\ntype TCommentRepliesStore = {\n [key: string]: ICommentReplies;\n};\n\nconst $CommentRepliesStore = atom({} as TCommentRepliesStore);\n$CommentRepliesStore.debugLabel = '$CommentRepliesStore';\n\nexport const $CommentReplies = safeAtomFamily((commentId: string) => {\n const a = atom(\n (get) => {\n return (\n get($CommentRepliesStore)[commentId] || {\n items: [],\n hasMore: true,\n offset: 0,\n }\n );\n },\n (get, set, input: ICommentReplies) => {\n const old = get($CommentRepliesStore);\n set($CommentRepliesStore, {\n ...old,\n [commentId]: input,\n });\n },\n );\n\n a.debugLabel = `$CommentReplies+${encodeURIComponent(commentId)}`;\n\n return a;\n});\n\nexport const $CommentRepliesLoadmore = safeAtomFamily((commentId: string) => {\n const a = atom(null, async (get, set, input: ICommentReplies) => {\n const old = get($CommentReplies(commentId));\n\n set($CommentReplies(commentId), {\n ...input,\n items: [...old.items, ...input.items],\n });\n });\n\n a.debugLabel = `$CommentRepliesLoadmore+${encodeURIComponent(commentId)}`;\n\n return a;\n});\n","import { atom } from 'jotai';\nimport { IABTest } from '@lemon8/web-app-shared/atom';\n\nexport const $SharerABTest = atom({\n versions: '',\n parameters: {},\n});\n\n$SharerABTest.debugLabel = '$SharerABTest';\n","import { atom } from 'jotai';\nimport { TUserDetail } from 'shared/models';\n\nexport const $SharerDetail = atom({} as TUserDetail);\n$SharerDetail.debugLabel = '$SharerDetail';\n","import { IRootTraffic, $RootTraffic as $OriginRootTraffic } from '@lemon8/web-app-shared/atom';\nimport { EPageType } from 'shared/constant/page-type';\nimport { PrimitiveAtom } from 'jotai';\n\nexport interface ISharingRootTraffic extends IRootTraffic {\n enterPageName: EPageType;\n enterPageId: string;\n\n // timestamp - 10bits\n // shareTime: string;\n // sharerUid: string;\n // sharerDid: string;\n\n sharerToken: string;\n\n sharePlatform: string;\n\n isSharingTest: boolean;\n}\n\nexport const $RootTraffic = $OriginRootTraffic as unknown as PrimitiveAtom;\n","import { atom } from 'jotai';\nimport { EPageType } from 'shared/constant/page-type';\n\ninterface ISharingPageTraffic {\n canonicalUrl: string;\n pageType: EPageType;\n}\n\nexport interface IHashtagPageTraffic extends ISharingPageTraffic {\n pageType: EPageType.HASHTAG;\n hashtagId: string;\n}\n\nexport interface IGalleryPageTraffic extends ISharingPageTraffic {\n pageType: EPageType.Gallery;\n groupId: string;\n mediaId: string;\n}\n\nexport interface IVideoPageTraffic extends ISharingPageTraffic {\n pageType: EPageType.VIDEO;\n groupId: string;\n mediaId: string;\n}\n\nexport interface IPOIPageTraffic extends ISharingPageTraffic {\n pageType: EPageType.POI;\n poiId: string;\n}\n\nexport interface IUserPageTraffic extends ISharingPageTraffic {\n pageType: EPageType.USER;\n userLinkName: string;\n userId: string;\n}\n\nexport type TPageLevelTraffic =\n | IHashtagPageTraffic\n | IPOIPageTraffic\n | IGalleryPageTraffic\n | IVideoPageTraffic\n | IUserPageTraffic;\n\nexport const $SharingPageLevelTraffic = atom({} as TPageLevelTraffic);\n$SharingPageLevelTraffic.debugLabel = '$SharingPageLevelTraffic';\n","import { atom } from 'jotai';\n\nexport const $FeatureFlags = atom>({});\n\n$FeatureFlags.debugLabel = '$FeatureFlags';\n","import { atom } from 'jotai';\nimport { safeAtomFamily } from 'shared/utils/safe-atom-family';\nimport { IArticleUnavailableDetail, TArticleDetail } from 'shared/models/article';\nimport { Unreachable } from '@lemon8/web-app-shared/util';\n\ntype TArticleDetailStore = {\n [key: string]: TArticleDetail | IArticleUnavailableDetail | undefined;\n};\n\nconst $ArticleDetailStore = atom({} as TArticleDetailStore);\n$ArticleDetailStore.debugLabel = '$ArticleDetailStore';\n\nexport const $ArticleDetail = safeAtomFamily((groupId: string) => {\n const a = atom(\n (get) => {\n const data = get($ArticleDetailStore)[groupId];\n if (!data) {\n return Unreachable();\n }\n return data;\n },\n (get, set, input: TArticleDetail | IArticleUnavailableDetail) => {\n const old = get($ArticleDetailStore);\n set($ArticleDetailStore, {\n ...old,\n [groupId]: input,\n });\n },\n );\n\n a.debugLabel = `$ArticleDetail+${encodeURIComponent(groupId)}`;\n\n return a;\n});\n","import { TArticleDetail } from 'shared/models/article';\nimport { PromiseOrValue } from 'shared/utils/promise-or-value';\nimport { atom } from 'jotai';\nimport { safeAtomFamily } from 'shared/utils/safe-atom-family';\nimport { Unreachable } from '@lemon8/web-app-shared/util';\n\nexport enum ERelatedChannel {\n FeedForyou = '0',\n Related = '61',\n VerticalSearch = 'vertical_search',\n}\n\nexport interface IArticleRelatedPosts {\n items: TArticleDetail[];\n relatedChannel: ERelatedChannel;\n hasMore: boolean;\n sessionImprId: string;\n maxBehotTime: string;\n searchId: string;\n maxCursor: string;\n}\n\ntype TArticleRelatedPostsStore = { [key: string]: PromiseOrValue | undefined };\n\nconst $ArticleRelatedPostsStore = atom({} as TArticleRelatedPostsStore);\n$ArticleRelatedPostsStore.debugLabel = '$ArticleRelatedPostsStore';\n\nexport const $ArticleRelatedPosts = safeAtomFamily((groupId: string) => {\n const a = atom, [PromiseOrValue], void>(\n (get) => {\n const data = get($ArticleRelatedPostsStore)[groupId];\n if (!data) {\n return Unreachable();\n }\n\n if (data instanceof Promise) {\n return data.catch(() => ({\n items: [],\n relatedChannel: ERelatedChannel.Related,\n hasMore: false,\n sessionImprId: '',\n maxBehotTime: '',\n searchId: '',\n maxCursor: '',\n }));\n }\n\n return data;\n },\n (get, set, input: PromiseOrValue) => {\n const old = get($ArticleRelatedPostsStore);\n set($ArticleRelatedPostsStore, { ...old, [groupId]: input });\n },\n );\n\n a.debugLabel = `$ArticleRelatedPosts+${encodeURIComponent(groupId)}`;\n return a;\n});\n\nexport const $ArticleRelatedPostsLoadmore = safeAtomFamily((groupId: string) => {\n const a = atom(null, async (get, set, input: IArticleRelatedPosts) => {\n const store = get($ArticleRelatedPostsStore);\n const old = await store[groupId];\n\n if (old) {\n set($ArticleRelatedPostsStore, {\n ...store,\n [groupId]: {\n ...input,\n items: [...old.items, ...input.items],\n },\n });\n }\n });\n\n a.debugLabel = `$ArticleRelatedPostsLoadmore+${encodeURIComponent(groupId)}`;\n return a;\n});\n","import { atom } from 'jotai';\nimport { safeAtomFamily } from 'shared/utils/safe-atom-family';\nimport { Unreachable } from '@lemon8/web-app-shared/util';\nimport { IPrimaryComment } from 'shared/models/comment';\nimport { PromiseOrValue } from 'shared/utils/promise-or-value';\n\nexport interface IArticleComments {\n items: IPrimaryComment[];\n offset: number;\n hasMore: boolean;\n}\n\ntype TArticleCommentsStore = {\n [key: string]: PromiseOrValue | undefined;\n};\n\nconst $ArticleCommentsStore = atom({} as TArticleCommentsStore);\n$ArticleCommentsStore.debugLabel = '$ArticleCommentsStore';\n\nexport const $ArticleComments = safeAtomFamily((groupId: string) => {\n const a = atom, [PromiseOrValue], void>(\n (get) => {\n const data = get($ArticleCommentsStore)[groupId];\n if (!data) {\n return Unreachable();\n }\n\n if (data instanceof Promise) {\n return data.catch(() => ({\n items: [],\n offset: 0,\n hasMore: false,\n }));\n }\n\n return data;\n },\n (get, set, input: PromiseOrValue) => {\n const old = get($ArticleCommentsStore);\n set($ArticleCommentsStore, {\n ...old,\n [groupId]: input,\n });\n },\n );\n\n a.debugLabel = `$ArticleComments+${encodeURIComponent(groupId)}`;\n\n return a;\n});\n\nexport const $ArticleCommentsLoadmore = safeAtomFamily((groupId: string) => {\n const a = atom(null, async (get, set, input: IArticleComments) => {\n const old = get($ArticleCommentsStore);\n const comment = await old[groupId];\n\n if (comment) {\n set($ArticleCommentsStore, {\n ...old,\n [groupId]: {\n ...input,\n items: [...comment.items, ...input.items],\n },\n });\n }\n });\n\n a.debugLabel = `$ArticleCommentsLoadmore+${encodeURIComponent(groupId)}`;\n\n return a;\n});\n","export class PendingQueue {\n private _tasks: (() => void)[] = [];\n\n constructor() {\n if (typeof window !== 'undefined') {\n window.setInterval(this._doInterval, 16);\n }\n }\n\n public push(task: (...args: unknown[]) => void) {\n if (typeof window !== 'undefined') {\n this._tasks.push(task);\n }\n }\n\n private _doInterval = (): void => {\n if (this._tasks.length) {\n console.log('pending tasks found, total count: %d', this._tasks.length);\n this._tasks.forEach((task) => task());\n this._tasks = [];\n }\n };\n}\n\nexport const pendingQueue = new PendingQueue();\n","import { atom } from 'jotai';\nimport { IUserDetail, IUserUnavailableDetail } from 'shared/models/user';\nimport { PromiseOrValue } from 'shared/utils/promise-or-value';\nimport { pendingQueue } from 'shared/utils/pending-queue';\nimport { safeAtomFamily } from 'shared/utils/safe-atom-family';\n\ntype TUserDetailStore = { [key: string]: PromiseOrValue | undefined };\n\nexport const $UserDetailStore = atom({});\n\n/**\n * get user detail data\n *\n * use user-unique-name as key\n */\nexport const $UserDetail = safeAtomFamily((userUniqueName: string) => {\n const a = atom<\n PromiseOrValue,\n [PromiseOrValue],\n void\n >(\n (get) => {\n const data = get($UserDetailStore)[userUniqueName];\n if (!data) {\n // eslint-disable-next-line @typescript-eslint/no-throw-literal\n throw new Promise((resolve) => pendingQueue.push(resolve));\n }\n return data;\n },\n (get, set, userDetail) => {\n const old = get($UserDetailStore);\n set($UserDetailStore, { ...old, [userUniqueName]: userDetail });\n },\n );\n\n a.debugLabel = `$UserDetail+${encodeURIComponent(userUniqueName)}`;\n\n return a;\n});\n","import { Unreachable } from '@lemon8/web-app-shared/util';\nimport { atom } from 'jotai';\nimport { PromiseOrValue } from 'shared/utils/promise-or-value';\nimport { safeAtomFamily } from 'shared/utils/safe-atom-family';\nimport { TArticleDetail } from 'shared/models/article';\n\nexport interface IUserPosts {\n items: TArticleDetail[];\n hasMore: boolean;\n maxBeHotTime: string;\n}\n\ntype TUserPostStore = { [key: string]: PromiseOrValue | undefined };\n\nexport const $UserPostStore = atom({} as TUserPostStore);\n\nexport const $UserPost = safeAtomFamily((userLinkName: string) => {\n const a = atom, [PromiseOrValue], void>(\n (get) => {\n const data = get($UserPostStore)[userLinkName];\n if (!data) {\n return Unreachable('no data in $UserPost');\n }\n return data;\n },\n (get, set, input: PromiseOrValue) => {\n const old = get($UserPostStore);\n set($UserPostStore, { ...old, [userLinkName]: input });\n },\n );\n\n a.debugLabel = `$UserPost+${encodeURIComponent(userLinkName)}`;\n\n return a;\n});\n\nexport const $UserPostLoadmore = safeAtomFamily((userLinkName: string) => {\n const a = atom(null, async (get, set, input) => {\n const store = get($UserPostStore);\n const old = await store[userLinkName];\n\n if (old) {\n set($UserPostStore, {\n ...store,\n [userLinkName]: {\n ...input,\n items: [...old.items, ...input.items],\n },\n });\n }\n });\n\n a.debugLabel = `$UserPostLoadmore+${encodeURIComponent(userLinkName)}`;\n return a;\n});\n","import { Unreachable } from '@lemon8/web-app-shared/util';\nimport { atom } from 'jotai';\nimport { PromiseOrValue } from 'shared/utils/promise-or-value';\nimport { safeAtomFamily } from 'shared/utils/safe-atom-family';\nimport { IRelatedUserDetail } from 'shared/models';\n\nexport interface IUserRelatedUser {\n items: IRelatedUserDetail[];\n sessionImprId: string;\n hasMore: boolean;\n}\n\ntype TUserRelatedUserStore = { [key: string]: PromiseOrValue | undefined };\n\nexport const $UserRelatedUserStore = atom({} as TUserRelatedUserStore);\n\nexport const $UserRelatedUser = safeAtomFamily((userLinkName: string) => {\n const a = atom, [PromiseOrValue], void>(\n (get) => {\n const data = get($UserRelatedUserStore)[userLinkName];\n if (!data) {\n return Unreachable('no data in $UserRelatedUser');\n }\n return data;\n },\n (get, set, input: PromiseOrValue) => {\n const old = get($UserRelatedUserStore);\n set($UserRelatedUserStore, { ...old, [userLinkName]: input });\n },\n );\n\n a.debugLabel = `$UserRelatedUser+${encodeURIComponent(userLinkName)}`;\n\n return a;\n});\n\nexport const $UserRelatedUserLoadmore = safeAtomFamily((userLinkName: string) => {\n const a = atom(null, async (get, set, input: IUserRelatedUser) => {\n const store = get($UserRelatedUserStore);\n const old = await store[userLinkName];\n\n if (old) {\n set($UserRelatedUserStore, {\n ...store,\n [userLinkName]: {\n ...input,\n items: [...old.items, ...input.items],\n },\n });\n }\n });\n\n a.debugLabel = `$UserRelatedUserLoadmore+${encodeURIComponent(userLinkName)}`;\n\n return a;\n});\n","import { atom, PrimitiveAtom } from 'jotai';\nimport { pendingQueue } from 'shared/utils/pending-queue';\nimport { safeAtomFamily } from 'shared/utils/safe-atom-family';\nimport { IHashtagInfo, IHashtagUnavailableInfo } from 'shared/models/hashtag';\nimport { TArticleDetail } from 'shared/models/article';\nimport { Unreachable } from '@lemon8/web-app-shared/util';\n\nexport interface IHashtagPosts {\n items: TArticleDetail[];\n hasMore: boolean;\n sessionImprId: string;\n}\n\ntype HashtagInfoStore = { [key: string]: IHashtagInfo | IHashtagUnavailableInfo | undefined };\ntype HashtagPostsStore = { [key: string]: IHashtagPosts | undefined };\n\nexport const $HashtagInfoStore: PrimitiveAtom = atom({});\nexport const $HashtagPopularPostStore: PrimitiveAtom = atom({});\nexport const $HashtagRecentPostStore: PrimitiveAtom = atom({});\n\nexport const $HashtagInfo = safeAtomFamily((hashtagId: string) => {\n const a = atom(\n (get) => {\n const data = get($HashtagInfoStore)[hashtagId];\n if (!data) {\n // eslint-disable-next-line @typescript-eslint/no-throw-literal\n throw new Promise((resolve) => pendingQueue.push(resolve));\n }\n return data;\n },\n (get, set, input: IHashtagInfo | IHashtagUnavailableInfo) => {\n const old = get($HashtagInfoStore);\n set($HashtagInfoStore, { ...old, [hashtagId]: input });\n },\n );\n a.debugLabel = `$HashtagInfo+${encodeURIComponent(hashtagId)}`;\n return a;\n});\n\nexport const $HashtagPopularPost = safeAtomFamily((hashtagId: string) => {\n const a = atom(\n (get) => {\n const data = get($HashtagPopularPostStore)[hashtagId];\n if (!data) {\n return Unreachable('no data in $HashtagPopularPost');\n }\n return data;\n },\n (get, set, input: IHashtagPosts) => {\n const old = get($HashtagPopularPostStore);\n set($HashtagPopularPostStore, { ...old, [hashtagId]: input });\n },\n );\n a.debugLabel = `$HashtagPopularPost+${encodeURIComponent(hashtagId)}`;\n return a;\n});\n\nexport const $HashtagPopularPostLoadmore = safeAtomFamily((hashtagId: string) => {\n const a = atom(null, async (get, set, input: IHashtagPosts) => {\n const store = get($HashtagPopularPostStore);\n const old = await store[hashtagId];\n\n if (old) {\n set($HashtagPopularPostStore, {\n ...store,\n [hashtagId]: {\n ...input,\n items: [...old.items, ...input.items],\n },\n });\n }\n });\n\n a.debugLabel = `$HashtagPopularPostLoadmore+${encodeURIComponent(hashtagId)}`;\n\n return a;\n});\n\nexport const $HashtagRecentPost = safeAtomFamily((hashtagId: string) => {\n const a = atom(\n (get) => {\n const data = get($HashtagRecentPostStore)[hashtagId];\n if (!data) {\n // eslint-disable-next-line @typescript-eslint/no-throw-literal\n throw new Promise((resolve) => pendingQueue.push(resolve));\n }\n return data;\n },\n (get, set, input: IHashtagPosts) => {\n const old = get($HashtagRecentPostStore);\n set($HashtagRecentPostStore, { ...old, [hashtagId]: input });\n },\n );\n\n a.debugLabel = `$HashtagRecentPost+${encodeURIComponent(hashtagId)}`;\n return a;\n});\n\nexport const $HashtagRecentPostLoadmore = safeAtomFamily((hashtagId: string) => {\n const a = atom(null, async (get, set, input: IHashtagPosts) => {\n const store = get($HashtagRecentPostStore);\n const old = await store[hashtagId];\n\n if (old) {\n set($HashtagRecentPostStore, {\n ...store,\n [hashtagId]: {\n ...input,\n items: [...old.items, ...input.items],\n },\n });\n }\n });\n\n a.debugLabel = `$HashtagRecentPostLoadmore+${encodeURIComponent(hashtagId)}`;\n\n return a;\n});\n","import {\n $Locale,\n $ABTest,\n $RenderConfig,\n $WebUser,\n $UserAgent,\n $I18nText,\n $CSPScripts,\n} from '@lemon8/web-app-shared/atom';\nimport { $ArticleComments, $ArticleDetail, $ArticleRelatedPosts } from 'shared/atoms/article';\nimport {\n $SharerABTest,\n $SharingPageLevelTraffic,\n $RootTraffic,\n $SharerDetail,\n $FeatureFlags,\n} from 'shared/atoms/common';\nimport { $UserDetail, $UserPost, $UserRelatedUser } from 'shared/atoms/user';\nimport { $POIInfo, $POIPosts } from 'shared/atoms/poi';\nimport { $HashtagInfo, $HashtagRecentPost, $HashtagPopularPost } from './hashtag';\n\nexport * from './common';\nexport * from './article';\nexport * from './user';\nexport * from './poi';\nexport * from './hashtag';\n\nexport const Atoms = {\n $Locale,\n $ABTest,\n $RenderConfig,\n $WebUser,\n $UserAgent,\n $I18nText,\n $RootTraffic,\n $CSPScripts,\n $SharerABTest,\n $FeatureFlags,\n $SharerDetail,\n $SharingPageLevelTraffic,\n};\n\nexport const AtomFamilies = {\n $ArticleDetail,\n $ArticleComments,\n $ArticleRelatedPosts,\n\n $UserDetail,\n $UserPost,\n $UserRelatedUser,\n\n $POIInfo,\n $POIPosts,\n\n $HashtagInfo,\n $HashtagRecentPost,\n $HashtagPopularPost,\n};\n","import { Unreachable } from '@lemon8/web-app-shared/util';\nimport { atom } from 'jotai';\nimport { safeAtomFamily } from 'shared/utils/safe-atom-family';\nimport { TPOIInfo } from 'shared/models/poi';\n\ntype TPOIInfoStore = { [key: string]: TPOIInfo | undefined };\n\nexport const $POIInfoStore = atom({} as TPOIInfoStore);\n\nexport const $POIInfo = safeAtomFamily((poiId: string) => {\n const a = atom(\n (get) => {\n const data = get($POIInfoStore)[poiId];\n if (!data) {\n return Unreachable('no data in $POIInfo');\n }\n return data;\n },\n (get, set, input: TPOIInfo) => {\n const old = get($POIInfoStore);\n set($POIInfoStore, { ...old, [poiId]: input });\n },\n );\n\n a.debugLabel = `$POIInfo+${encodeURIComponent(poiId)}`;\n\n return a;\n});\n","import { Unreachable } from '@lemon8/web-app-shared/util';\nimport { atom } from 'jotai';\nimport { PromiseOrValue } from 'shared/utils/promise-or-value';\nimport { safeAtomFamily } from 'shared/utils/safe-atom-family';\nimport { TArticleDetail } from 'shared/models/article';\n\nexport interface IPOIPosts {\n items: TArticleDetail[];\n hasMore: boolean;\n sessionImprId: string;\n}\n\ntype TPOIPostsStore = { [key: string]: PromiseOrValue | undefined };\n\nexport const $POIPostStore = atom({} as TPOIPostsStore);\n\nexport const $POIPosts = safeAtomFamily((poiId: string) => {\n const a = atom, [PromiseOrValue], void>(\n (get) => {\n const data = get($POIPostStore)[poiId];\n if (!data) {\n return Unreachable('no data in $POIPosts');\n }\n return data;\n },\n (get, set, input: PromiseOrValue) => {\n const old = get($POIPostStore);\n set($POIPostStore, { ...old, [poiId]: input });\n },\n );\n\n a.debugLabel = `$POIPosts+${encodeURIComponent(poiId)}`;\n\n return a;\n});\n\nexport const $POIPostsLoadmore = safeAtomFamily((poiId: string) => {\n const a = atom(null, async (get, set, input) => {\n const store = get($POIPostStore);\n const old = await store[poiId];\n\n if (old) {\n set($POIPostStore, {\n ...store,\n [poiId]: {\n ...input,\n items: [...old.items, ...input.items],\n },\n });\n }\n });\n\n a.debugLabel = `$POIPostsLoadmore+${encodeURIComponent(poiId)}`;\n return a;\n});\n","export class NodePendingQueue {\n private _tasks: (() => void)[] = [];\n\n constructor() {\n if (typeof window === 'undefined') {\n setInterval(this._doInterval, 500);\n }\n }\n\n public push(task: (...args: unknown[]) => void) {\n if (typeof window === 'undefined') {\n this._tasks.push(task);\n }\n }\n\n private _doInterval = (): void => {\n if (this._tasks.length) {\n console.log('pending tasks found, total count: %d', this._tasks.length);\n this._tasks.forEach((task) => task());\n this._tasks = [];\n }\n };\n}\n\nexport const nodePendingQueue = new NodePendingQueue();\n","import { atomFamily } from 'jotai/utils';\nimport { Atom } from 'jotai/vanilla';\nimport { AtomFamily } from 'jotai/vanilla/utils/atomFamily';\nimport { nodePendingQueue } from 'shared/utils/node-pending-queue';\n\nexport const safeAtomFamily = >(\n initializeAtom: (param: Param) => AtomType,\n areEqual?: (a: Param, b: Param) => boolean,\n): AtomFamily => {\n let family: AtomFamily | null = null;\n\n const initializeAtomWrapper = (param: Param): AtomType => {\n const atom = initializeAtom(param);\n if (typeof window === 'undefined') {\n nodePendingQueue.push(() => {\n family?.remove(param);\n });\n }\n\n return atom;\n };\n\n family = atomFamily(initializeAtomWrapper, areEqual);\n\n return family;\n};\n","var manifestCache;\nfunction getManifest() {\n if (manifestCache)\n return manifestCache;\n return (manifestCache = process.env.BUILD_TARGET === 'client' ? window.__remixManifest : require('ttark').assets);\n}\n// do not pass routeId directly, webpack CSSLinksPlugin will pass the routeId\nexport function cssLinks(routeId) {\n return (manifestCache || getManifest()).routes[routeId].cssImports.map(function (href) { return ({ rel: 'stylesheet', href: href }); });\n}\n//# sourceMappingURL=index.js.map"],"sourceRoot":""}