@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.
576 lines (566 loc) • 11.4 kB
JavaScript
;
Object.defineProperty(exports, "__esModule", { value: !0 });
var groqJs = require("groq-js");
const API_MEMBER_TYPES = ["api.class", "api.enum", "api.function", "api.interface", "api.namespace", "api.typeAlias", "api.variable"], API_EXPORTS_QUERY = (
/* groq */
`
*[
_type == 'api.export'
&& package->scope == $packageScope
&& package->name == $packageName
&& release->version == $releaseVersion
]{
name,
path,
package->{name,scope},
release->{version},
'isLatest': release->_id == package->latestRelease._ref,
'members': *[_type in $memberTypes && references(^._id) && !("@hidden" in coalesce(comment.customBlocks[].tag, [])) && !coalesce(isOverloading, false)] | order(name asc) {
'_key': _id,
_type,
comment{deprecated},
export->{name,path},
members[]{
_key,
_type,
export->{name,path},
name,
package->{name,scope},
release->{version},
releaseTag,
isReactComponentType,
slug,
},
name,
slug,
package->{name,scope},
release->{version},
releaseTag,
isReactComponentType,
isReactHook,
isOverloading,
}
} | order(name)
`
), API_TOKEN_MEMBER_PROJECTION = (
/* groq */
`
...,
export->{name, path},
package->{name, scope},
release->{version}
`
), API_CLASS_PROJECTION = (
/* groq */
`
_id,
_type,
_updatedAt,
comment,
export->{name,path},
members[]{
_type == 'api.constructor' => {
_key,
_type,
comment,
parameters[]{
_key,
_type,
name,
releaseTag,
type[]{
...,
member->{${API_TOKEN_MEMBER_PROJECTION}}
}
},
releaseTag
},
_type == 'api.method' => {
_key,
_type,
comment,
name,
isOptional,
isStatic,
parameters[]{
_key,
_type,
name,
releaseTag,
type[]{
...,
member->{${API_TOKEN_MEMBER_PROJECTION}}
}
},
releaseTag,
returnType[]{
...,
member->{${API_TOKEN_MEMBER_PROJECTION}}
},
typeParameters
},
_type == 'api.property' => {
_key,
_type,
comment,
name,
isEventProperty,
isOptional,
isStatic,
releaseTag,
type[]{
...,
member->{${API_TOKEN_MEMBER_PROJECTION}}
}
}
},
name,
package->{scope,name},
release->{version},
releaseTag,
typeParameters
`
), API_ENUM_PROJECTION = (
/* groq */
`
...,
export->{name,path},
package->{scope,name},
release->{version}
`
), API_INTERFACE_PROJECTION = (
/* groq */
`
_id,
_type,
_updatedAt,
comment,
export->{name,path},
extends,
members[]{
_type == 'api.callSignature' => {
_key,
_type,
comment,
parameters[]{
_key,
_type,
name,
releaseTag,
type[]{
...,
member->{${API_TOKEN_MEMBER_PROJECTION}}
}
},
releaseTag,
returnType[]{
...,
member->{${API_TOKEN_MEMBER_PROJECTION}}
},
typeParameters
},
_type == 'api.methodSignature' => {
_key,
_type,
comment,
isOptional,
name,
parameters[]{
_key,
_type,
name,
releaseTag,
type[]{
...,
member->{${API_TOKEN_MEMBER_PROJECTION}}
}
},
releaseTag,
returnType[]{
...,
member->{${API_TOKEN_MEMBER_PROJECTION}}
},
typeParameters
},
_type == 'api.indexSignature' => {
_key,
_type,
comment,
releaseTag,
parameters[]{
_key,
_type,
name,
releaseTag,
type[]{
...,
member->{${API_TOKEN_MEMBER_PROJECTION}}
}
},
returnType[]{
...,
member->{${API_TOKEN_MEMBER_PROJECTION}}
}
},
_type == 'api.propertySignature' => {
_key,
_type,
comment,
isOptional,
name,
releaseTag,
comment,
type[]{
...,
member->{${API_TOKEN_MEMBER_PROJECTION}}
}
}
},
name,
package->{scope,name},
'referrers': *[references(^._id)] {
_type,
name,
export->{path},
package->{scope,name},
release->{version}
},
release->{version},
releaseTag,
slug,
typeParameters
`
), API_FUNCTION_PROJECTION = (
/* groq */
`
_id,
_type,
_updatedAt,
comment,
export->{name,path},
isReactComponentType,
name,
package->{scope,name},
parameters[]{
_key,
_type,
name,
releaseTag,
comment,
type[]{
...,
member->{${API_TOKEN_MEMBER_PROJECTION}}
}
},
propsType->{
_type == 'api.interface' => {
${API_INTERFACE_PROJECTION}
}
},
'referrers': *[references(^._id)] {
_type,
name,
export->{path},
package->{scope,name},
release->{version}
},
release->{version},
releaseTag,
returnType[]{
...,
member->{${API_TOKEN_MEMBER_PROJECTION}}
},
typeParameters
`
), API_NAMESPACE_PROJECTION = (
/* groq */
`
_id,
_type,
_updatedAt,
comment,
export->{name,path},
members[]{
...
},
name,
package->{scope,name},
release->{version},
releaseTag
`
), API_TYPE_ALIAS_PROJECTION = (
/* groq */
`
_id,
_type,
_updatedAt,
comment,
export->{name,path},
name,
package->{scope,name},
release->{version},
releaseTag,
type[]{
...,
member->{${API_TOKEN_MEMBER_PROJECTION}}
},
typeParameters
`
), API_VARIABLE_PROJECTION = (
/* groq */
`
_id,
_type,
comment,
export->{name,path},
isReactComponentType,
name,
parameters[]{
_key,
_type,
name,
releaseTag,
comment,
type[]{
...,
member->{${API_TOKEN_MEMBER_PROJECTION}}
}
},
package->{scope,name},
propsType->,
release->{version},
releaseTag,
'referrers': *[references(^._id)] {
_type,
name,
export->{path},
package->{scope,name},
release->{version}
},
type[]{
...,
member->{${API_TOKEN_MEMBER_PROJECTION}}
}
`
), API_MEMBER_PROJECTION = (
/* groq */
`
_type == 'api.class' => {
${API_CLASS_PROJECTION}
},
_type == 'api.enum' => {
${API_ENUM_PROJECTION}
},
_type == 'api.function' => {
${API_FUNCTION_PROJECTION}
},
_type == 'api.interface' => {
${API_INTERFACE_PROJECTION}
},
_type == 'api.namespace' => {
${API_NAMESPACE_PROJECTION}
},
_type == 'api.typeAlias' => {
${API_TYPE_ALIAS_PROJECTION}
},
_type == 'api.variable' => {
${API_VARIABLE_PROJECTION}
}
`
), API_MEMBER_QUERY = (
/* groq */
`
*[
_type in $memberTypes
&& export->path == $exportPath
&& package->scope == $packageScope
&& package->name == $packageName
&& release->version == $releaseVersion
&& slug.current == $memberSlug
&& !("@hidden" in coalesce(comment.customBlocks[].tag, []))
]{
${API_MEMBER_PROJECTION},
"members": members[!("@hidden" in coalesce(comment.customBlocks[].tag, []))],
'versions': *[
_type == 'api.release'
&& package->scope == $packageScope
&& package->name == $packageName
]{version}.version
}
`
), NON_HIDDEN_MEMBER_TYPES_ARRAY = (
/* groq */
`*[
_type in $memberTypes
&& name == ^.name
&& package->scope == $packageScope
&& package->name == $packageName
&& !("@hidden" in coalesce(comment.customBlocks[].tag, []))
]`
), API_SYMBOL_SEARCH_QUERY = (
/* groq */
`
*[
_type == 'api.symbol'
&& name match $query
&& package->scope == $packageScope
&& package->name == $packageName
&& count(${NON_HIDDEN_MEMBER_TYPES_ARRAY}) > 0
]{
_id,
_type,
name,
package->{name,scope}
}[0...10]{
...,
'members': ${NON_HIDDEN_MEMBER_TYPES_ARRAY}{
slug,
'exportPath': export->path,
'releaseVersion': release->version
}
} | order(lower(name) asc)
`
), API_PACKAGES_QUERY = (
/* groq */
`
*[_type == 'api.package']{
_id,
name,
scope,
latestRelease->{version},
releases[]->{version}
}
`
), API_PACKAGE_QUERY = (
/* groq */
`
*[
_type == 'api.package'
&& scope == $packageScope
&& name == $packageName
][0]
`
), API_SYMBOL_QUERY = (
/* groq */
`
*[
_type == 'api.symbol'
&& package->scope == $packageScope
&& package->name == $packageName
]{
_type,
name,
package->{name,scope},
'members': *[
_type in $memberTypes
]{${API_MEMBER_PROJECTION}}
}[0]
`
);
function createTSDocStore(options) {
const {
debug,
query,
initialState
} = options, cache = initialState || {
exports: {},
member: {},
package: {},
packages: [],
symbol: {}
};
return {
exports: {
get: async (params) => {
debug && console.log("exports.get", params);
const key = JSON.stringify(params);
if (cache.exports[key])
return debug && console.log("exports.get read from cache"), cache.exports[key];
const result = await query(API_EXPORTS_QUERY, {
...params,
memberTypes: API_MEMBER_TYPES
});
return cache.exports[key] = result, result;
}
},
member: {
get: async (params) => {
debug && console.log("member.get", params);
const key = JSON.stringify(params);
if (cache.member[key])
return debug && console.log("member.get read from cache"), cache.member[key];
const result = await query(API_MEMBER_QUERY, {
...params,
memberTypes: API_MEMBER_TYPES
});
return cache.member[key] = result, result;
}
},
package: {
get: async (params) => {
debug && console.log("package.get", params);
const key = JSON.stringify(params);
if (cache.package[key])
return debug && console.log("package.get read from cache"), cache.package[key];
const result = await query(API_PACKAGE_QUERY, {
...params,
memberTypes: API_MEMBER_TYPES
});
return cache.package[key] = result, result;
}
},
packages: {
get: async () => {
if (debug && console.log("packages.get"), cache.packages.length)
return debug && console.log("packages.get read from cache"), cache.packages;
const result = await query(API_PACKAGES_QUERY, {});
return cache.packages = result, result;
}
},
symbol: {
get: async (params) => {
debug && console.log("symbol.get", params);
const key = JSON.stringify(params);
if (cache.symbol[key])
return debug && console.log("symbol.get read from cache"), cache.symbol[key];
const result = await query(API_SYMBOL_QUERY, {
...params,
memberTypes: API_MEMBER_TYPES
});
return cache.symbol[key] = result, result;
},
search: (params) => (debug && console.log("symbol.search", params), query(API_SYMBOL_SEARCH_QUERY, {
...params,
memberTypes: API_MEMBER_TYPES,
query: `*${params.query}*`
}))
}
};
}
const delay = (ms) => new Promise((resolve) => setTimeout(resolve, ms)), DEBUG = !1;
function createTSDocMemoryStore({
docs
}) {
return createTSDocStore({
debug: DEBUG,
query: async (q, params) => {
await delay(0);
const tree = groqJs.parse(q);
return await (await groqJs.evaluate(tree, {
dataset: docs,
params
})).get();
}
});
}
exports.API_EXPORTS_QUERY = API_EXPORTS_QUERY;
exports.API_MEMBER_PROJECTION = API_MEMBER_PROJECTION;
exports.API_MEMBER_QUERY = API_MEMBER_QUERY;
exports.API_MEMBER_TYPES = API_MEMBER_TYPES;
exports.API_PACKAGES_QUERY = API_PACKAGES_QUERY;
exports.API_PACKAGE_QUERY = API_PACKAGE_QUERY;
exports.API_SYMBOL_QUERY = API_SYMBOL_QUERY;
exports.API_SYMBOL_SEARCH_QUERY = API_SYMBOL_SEARCH_QUERY;
exports.createTSDocMemoryStore = createTSDocMemoryStore;
exports.createTSDocStore = createTSDocStore;
//# sourceMappingURL=store.js.map