@sanity/tsdoc
Version:
Generate API reference docs from TypeScript projects and store in a Sanity-friendly JSON format. Render a static frontend, or as React components.
1 lines • 20.7 kB
Source Map (JSON)
{"version":3,"file":"store.mjs","sources":["../../src/store/constants.ts","../../src/store/queries.ts","../../src/store/TSDocStore.ts","../../src/store/TSDocMemoryStore.ts"],"sourcesContent":["/** @internal */\nexport const API_MEMBER_TYPES = [\n 'api.class',\n 'api.enum',\n 'api.function',\n 'api.interface',\n 'api.namespace',\n 'api.typeAlias',\n 'api.variable',\n]\n","/** @internal */\nexport const API_EXPORTS_QUERY = /* groq */ `\n*[\n _type == 'api.export'\n && package->scope == $packageScope\n && package->name == $packageName\n && release->version == $releaseVersion\n]{\n name,\n path,\n package->{name,scope},\n release->{version},\n 'isLatest': release->_id == package->latestRelease._ref,\n 'members': *[_type in $memberTypes && references(^._id) && !(\"@hidden\" in coalesce(comment.customBlocks[].tag, [])) && !coalesce(isOverloading, false)] | order(name asc) {\n '_key': _id,\n _type,\n comment{deprecated},\n export->{name,path},\n members[]{\n _key,\n _type,\n export->{name,path},\n name,\n package->{name,scope},\n release->{version},\n releaseTag,\n isReactComponentType,\n slug,\n },\n name,\n slug,\n package->{name,scope},\n release->{version},\n releaseTag,\n isReactComponentType,\n isReactHook,\n isOverloading,\n }\n} | order(name)\n`\n\n/** @internal */\nconst API_TOKEN_MEMBER_PROJECTION = /* groq */ `\n...,\nexport->{name, path},\npackage->{name, scope},\nrelease->{version}\n`\n\n/** @internal */\nconst API_CLASS_PROJECTION = /* groq */ `\n_id,\n_type,\n_updatedAt,\ncomment,\nexport->{name,path},\nmembers[]{\n _type == 'api.constructor' => {\n _key,\n _type,\n comment,\n parameters[]{\n _key,\n _type,\n name,\n releaseTag,\n type[]{\n ...,\n member->{${API_TOKEN_MEMBER_PROJECTION}}\n }\n },\n releaseTag\n },\n _type == 'api.method' => {\n _key,\n _type,\n comment,\n name,\n isOptional,\n isStatic,\n parameters[]{\n _key,\n _type,\n name,\n releaseTag,\n type[]{\n ...,\n member->{${API_TOKEN_MEMBER_PROJECTION}}\n }\n },\n releaseTag,\n returnType[]{\n ...,\n member->{${API_TOKEN_MEMBER_PROJECTION}}\n },\n typeParameters\n },\n _type == 'api.property' => {\n _key,\n _type,\n comment,\n name,\n isEventProperty,\n isOptional,\n isStatic,\n releaseTag,\n type[]{\n ...,\n member->{${API_TOKEN_MEMBER_PROJECTION}}\n }\n }\n},\nname,\npackage->{scope,name},\nrelease->{version},\nreleaseTag,\ntypeParameters\n`\n\n// TODO\nconst API_ENUM_PROJECTION = /* groq */ `\n...,\nexport->{name,path},\npackage->{scope,name},\nrelease->{version}\n`\n\n/** @internal */\nconst API_INTERFACE_PROJECTION = /* groq */ `\n_id,\n_type,\n_updatedAt,\ncomment,\nexport->{name,path},\nextends,\nmembers[]{\n _type == 'api.callSignature' => {\n _key,\n _type,\n comment,\n parameters[]{\n _key,\n _type,\n name,\n releaseTag,\n type[]{\n ...,\n member->{${API_TOKEN_MEMBER_PROJECTION}}\n }\n },\n releaseTag,\n returnType[]{\n ...,\n member->{${API_TOKEN_MEMBER_PROJECTION}}\n },\n typeParameters\n },\n\n _type == 'api.methodSignature' => {\n _key,\n _type,\n comment,\n isOptional,\n name,\n parameters[]{\n _key,\n _type,\n name,\n releaseTag,\n type[]{\n ...,\n member->{${API_TOKEN_MEMBER_PROJECTION}}\n }\n },\n releaseTag,\n returnType[]{\n ...,\n member->{${API_TOKEN_MEMBER_PROJECTION}}\n },\n typeParameters\n },\n\n _type == 'api.indexSignature' => {\n _key,\n _type,\n comment,\n releaseTag,\n parameters[]{\n _key,\n _type,\n name,\n releaseTag,\n type[]{\n ...,\n member->{${API_TOKEN_MEMBER_PROJECTION}}\n }\n },\n returnType[]{\n ...,\n member->{${API_TOKEN_MEMBER_PROJECTION}}\n }\n },\n\n _type == 'api.propertySignature' => {\n _key,\n _type,\n comment,\n isOptional,\n name,\n releaseTag,\n comment,\n type[]{\n ...,\n member->{${API_TOKEN_MEMBER_PROJECTION}}\n }\n }\n},\nname,\npackage->{scope,name},\n'referrers': *[references(^._id)] {\n _type,\n name,\n export->{path},\n package->{scope,name},\n release->{version}\n},\nrelease->{version},\nreleaseTag,\nslug,\ntypeParameters\n`\n\n/** @internal */\nconst API_FUNCTION_PROJECTION = /* groq */ `\n_id,\n_type,\n_updatedAt,\ncomment,\nexport->{name,path},\nisReactComponentType,\nname,\npackage->{scope,name},\nparameters[]{\n _key,\n _type,\n name,\n releaseTag,\n comment,\n type[]{\n ...,\n member->{${API_TOKEN_MEMBER_PROJECTION}}\n }\n},\npropsType->{\n _type == 'api.interface' => {\n ${API_INTERFACE_PROJECTION}\n }\n},\n'referrers': *[references(^._id)] {\n _type,\n name,\n export->{path},\n package->{scope,name},\n release->{version}\n},\nrelease->{version},\nreleaseTag,\nreturnType[]{\n ...,\n member->{${API_TOKEN_MEMBER_PROJECTION}}\n},\ntypeParameters\n`\n\n/** @internal */\nconst API_NAMESPACE_PROJECTION = /* groq */ `\n_id,\n_type,\n_updatedAt,\ncomment,\nexport->{name,path},\nmembers[]{\n ...\n},\nname,\npackage->{scope,name},\nrelease->{version},\nreleaseTag\n`\n\n/** @internal */\nconst API_TYPE_ALIAS_PROJECTION = /* groq */ `\n_id,\n_type,\n_updatedAt,\ncomment,\nexport->{name,path},\nname,\npackage->{scope,name},\nrelease->{version},\nreleaseTag,\ntype[]{\n ...,\n member->{${API_TOKEN_MEMBER_PROJECTION}}\n},\ntypeParameters\n`\n\n/** @internal */\nconst API_VARIABLE_PROJECTION = /* groq */ `\n_id,\n_type,\ncomment,\nexport->{name,path},\nisReactComponentType,\nname,\nparameters[]{\n _key,\n _type,\n name,\n releaseTag,\n comment,\n type[]{\n ...,\n member->{${API_TOKEN_MEMBER_PROJECTION}}\n }\n},\npackage->{scope,name},\npropsType->,\nrelease->{version},\nreleaseTag,\n'referrers': *[references(^._id)] {\n _type,\n name,\n export->{path},\n package->{scope,name},\n release->{version}\n},\ntype[]{\n ...,\n member->{${API_TOKEN_MEMBER_PROJECTION}}\n}\n`\n\n/** @internal */\nexport const API_MEMBER_PROJECTION = /* groq */ `\n_type == 'api.class' => {\n ${API_CLASS_PROJECTION}\n},\n\n_type == 'api.enum' => {\n ${API_ENUM_PROJECTION}\n},\n\n_type == 'api.function' => {\n ${API_FUNCTION_PROJECTION}\n},\n\n_type == 'api.interface' => {\n ${API_INTERFACE_PROJECTION}\n},\n\n_type == 'api.namespace' => {\n ${API_NAMESPACE_PROJECTION}\n},\n\n_type == 'api.typeAlias' => {\n ${API_TYPE_ALIAS_PROJECTION}\n},\n\n_type == 'api.variable' => {\n ${API_VARIABLE_PROJECTION}\n}\n`\n\n/** @internal */\nexport const API_MEMBER_QUERY = /* groq */ `\n*[\n _type in $memberTypes\n && export->path == $exportPath\n && package->scope == $packageScope\n && package->name == $packageName\n && release->version == $releaseVersion\n && slug.current == $memberSlug\n && !(\"@hidden\" in coalesce(comment.customBlocks[].tag, []))\n]{\n ${API_MEMBER_PROJECTION},\n \"members\": members[!(\"@hidden\" in coalesce(comment.customBlocks[].tag, []))],\n 'versions': *[\n _type == 'api.release'\n && package->scope == $packageScope\n && package->name == $packageName\n ]{version}.version\n}\n`\n\n/** @internal */\n\nconst NON_HIDDEN_MEMBER_TYPES_ARRAY = /* groq */ `*[\n _type in $memberTypes\n && name == ^.name\n && package->scope == $packageScope\n && package->name == $packageName\n && !(\"@hidden\" in coalesce(comment.customBlocks[].tag, []))\n]`\n\n/** @internal */\nexport const API_SYMBOL_SEARCH_QUERY = /* groq */ `\n*[\n _type == 'api.symbol'\n && name match $query\n && package->scope == $packageScope\n && package->name == $packageName\n && count(${NON_HIDDEN_MEMBER_TYPES_ARRAY}) > 0\n]{\n _id,\n _type,\n name,\n package->{name,scope}\n}[0...10]{\n ...,\n 'members': ${NON_HIDDEN_MEMBER_TYPES_ARRAY}{\n slug,\n 'exportPath': export->path,\n 'releaseVersion': release->version\n }\n} | order(lower(name) asc)\n`\n\n/** @internal */\nexport const API_PACKAGES_QUERY = /* groq */ `\n*[_type == 'api.package']{\n _id,\n name,\n scope,\n latestRelease->{version},\n releases[]->{version}\n}\n`\n\n/** @internal */\nexport const API_PACKAGE_QUERY = /* groq */ `\n*[\n _type == 'api.package'\n && scope == $packageScope\n && name == $packageName\n][0]\n`\n\n/** @internal */\nexport const API_SYMBOL_QUERY = /* groq */ `\n*[\n _type == 'api.symbol'\n && package->scope == $packageScope\n && package->name == $packageName\n]{\n _type,\n name,\n package->{name,scope},\n 'members': *[\n _type in $memberTypes\n ]{${API_MEMBER_PROJECTION}}\n}[0]\n`\n","/* eslint-disable no-console */\nimport {APIPackage} from '@sanity/tsdoc'\n\nimport {API_MEMBER_TYPES} from './constants'\nimport {\n API_EXPORTS_QUERY,\n API_MEMBER_QUERY,\n API_PACKAGE_QUERY,\n API_PACKAGES_QUERY,\n API_SYMBOL_QUERY,\n API_SYMBOL_SEARCH_QUERY,\n} from './queries'\nimport {\n TSDocAPIMember,\n TSDocAPISymbol,\n TSDocAppParams,\n TSDocExportData,\n TSDocStore,\n TSDocStoreCache,\n TSDocSymbolSearchResult,\n} from './types'\n\n/** @beta */\nexport interface TSDocStoreOptions {\n debug?: boolean\n query: (q: string, params: Record<string, unknown>) => Promise<any>\n initialState?: TSDocStoreCache\n}\n\n/**\n * A function for creating a TSDocStore instance.\n *\n * @beta\n *\n * @example\n * ```tsx\n * const tsdocStore = createTSDocStore({\n * debug: true,\n * query: async (q, params) => tsDocClient.fetch(q, params),\n * initialState: {\n * exports: {},\n * member: {},\n * package: {},\n * packages: [],\n * symbol: {},\n * },\n * });\n * ```\n *\n * @example\n * ```tsx\n * const tsdocStore = createTSDocStore({\n * debug: true,\n * query: async (q, params) => tsDocClient.fetch(q, params),\n * });\n * ```\n */\nexport function createTSDocStore(options: TSDocStoreOptions): TSDocStore {\n const {debug, query, initialState} = options\n\n const cache: TSDocStoreCache = initialState || {\n exports: {},\n member: {},\n package: {},\n packages: [],\n symbol: {},\n }\n\n return {\n exports: {\n get: async (params: {\n packageScope: string | null\n packageName: string\n releaseVersion: string\n }): Promise<TSDocExportData[] | undefined> => {\n if (debug) console.log('exports.get', params)\n\n const key = JSON.stringify(params)\n\n if (cache.exports[key]) {\n if (debug) console.log('exports.get read from cache')\n\n return cache.exports[key]\n }\n\n const result = await query(API_EXPORTS_QUERY, {\n ...params,\n memberTypes: API_MEMBER_TYPES,\n })\n\n cache.exports[key] = result\n\n return result\n },\n },\n\n member: {\n get: async (params: TSDocAppParams): Promise<TSDocAPIMember[] | null | undefined> => {\n if (debug) console.log('member.get', params)\n\n const key = JSON.stringify(params)\n\n if (cache.member[key]) {\n if (debug) console.log('member.get read from cache')\n\n return cache.member[key]\n }\n\n const result = await query(API_MEMBER_QUERY, {\n ...params,\n memberTypes: API_MEMBER_TYPES,\n })\n\n cache.member[key] = result\n\n return result\n },\n },\n\n package: {\n get: async (params: TSDocAppParams): Promise<APIPackage | null | undefined> => {\n if (debug) console.log('package.get', params)\n\n const key = JSON.stringify(params)\n\n if (cache.package[key]) {\n if (debug) console.log('package.get read from cache')\n\n return cache.package[key]\n }\n\n const result = await query(API_PACKAGE_QUERY, {\n ...params,\n memberTypes: API_MEMBER_TYPES,\n })\n\n cache.package[key] = result\n\n return result\n },\n },\n\n packages: {\n get: async (): Promise<APIPackage[] | null | undefined> => {\n if (debug) console.log('packages.get')\n\n if (cache.packages.length) {\n if (debug) console.log('packages.get read from cache')\n\n return cache.packages\n }\n\n const result = await query(API_PACKAGES_QUERY, {})\n\n cache.packages = result\n\n return result\n },\n },\n\n symbol: {\n get: async (params: {\n name: string\n packageName: string\n packageScope: string | null\n }): Promise<TSDocAPISymbol | null | undefined> => {\n if (debug) console.log('symbol.get', params)\n\n const key = JSON.stringify(params)\n\n if (cache.symbol[key]) {\n if (debug) console.log('symbol.get read from cache')\n\n return cache.symbol[key]\n }\n\n const result = await query(API_SYMBOL_QUERY, {\n ...params,\n memberTypes: API_MEMBER_TYPES,\n })\n\n cache.symbol[key] = result\n\n return result\n },\n search: (params: {\n query: string\n packageName: string\n packageScope: string | null\n }): Promise<TSDocSymbolSearchResult[]> => {\n if (debug) console.log('symbol.search', params)\n\n return query(API_SYMBOL_SEARCH_QUERY, {\n ...params,\n memberTypes: API_MEMBER_TYPES,\n query: `*${params.query}*`,\n })\n },\n },\n }\n}\n","/* eslint-disable no-console */\n\nimport {APIDocument} from '@sanity/tsdoc'\nimport {evaluate, parse} from 'groq-js'\n\nimport {createTSDocStore} from './TSDocStore'\nimport {TSDocStore} from './types'\n\nconst delay = (ms: number) => new Promise((resolve) => setTimeout(resolve, ms))\n\nconst DEBUG = false\n\n/** @beta */\nexport function createTSDocMemoryStore({docs}: {docs: APIDocument[]}): TSDocStore {\n const query = async (q: string, params: Record<string, unknown>) => {\n await delay(0)\n\n const tree = parse(q)\n\n const queryId = String(Math.random())\n\n if (DEBUG) console.time(`query:${queryId}`)\n\n const value = await evaluate(tree, {\n dataset: docs,\n params,\n })\n\n if (DEBUG) console.timeEnd(`query:${queryId}`)\n\n return await value.get()\n }\n\n return createTSDocStore({debug: DEBUG, query})\n}\n"],"names":["API_MEMBER_TYPES","API_EXPORTS_QUERY","API_TOKEN_MEMBER_PROJECTION","API_CLASS_PROJECTION","API_ENUM_PROJECTION","API_INTERFACE_PROJECTION","API_FUNCTION_PROJECTION","API_NAMESPACE_PROJECTION","API_TYPE_ALIAS_PROJECTION","API_VARIABLE_PROJECTION","API_MEMBER_PROJECTION","API_MEMBER_QUERY","NON_HIDDEN_MEMBER_TYPES_ARRAY","API_SYMBOL_SEARCH_QUERY","API_PACKAGES_QUERY","API_PACKAGE_QUERY","API_SYMBOL_QUERY","createTSDocStore","options","debug","query","initialState","cache","exports","member","package","packages","symbol","get","params","console","log","key","JSON","stringify","result","memberTypes","length","search","delay","ms","Promise","resolve","setTimeout","DEBUG","createTSDocMemoryStore","docs","q","tree","parse","evaluate","dataset"],"mappings":"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"}