sanity
Version:
Sanity is a real-time content infrastructure with a scalable, hosted backend featuring a Graph Oriented Query Language (GROQ), asset pipelines and fast edge caches
87 lines (79 loc) • 2.62 kB
text/typescript
import {
type ImplicitLocaleResourceBundle,
type LocaleDefinition,
type LocaleResourceBundle,
type StaticLocaleResourceBundle,
} from './types'
/**
* Defines a resource bundle for a given locale and namespace.
*
* @param bundle - The bundle of resources to define
* @returns The bundle that was passed, as-is (this is an "identity function")
* @public
*/
export function defineLocaleResourceBundle(bundle: LocaleResourceBundle): LocaleResourceBundle {
return bundle
}
/**
* Defines a locale and makes it available for use in the studio.
*
* @param locale - The locale to define
* @returns The locale that was passed, as-is (this is an "identity function")
* @public
*/
export function defineLocale(locale: LocaleDefinition): LocaleDefinition {
return locale
}
/**
* Checks whether or not the given resource bundle has static resources, eg is not lazy loaded.
*
* @param bundle - Bundle to check
* @returns `true` if the bundle has static resources, `false` otherwise
* @internal
* @hidden
*/
export function isStaticResourceBundle(
bundle: LocaleResourceBundle | StaticLocaleResourceBundle | ImplicitLocaleResourceBundle,
): bundle is StaticLocaleResourceBundle {
return !('then' in bundle.resources && typeof bundle.resources.then === 'function')
}
/**
* Internal helper for definining resources for a given namespace.
*
* Used for automation (finding the officially defined namespaces and keys), and potentially in
* the future for type safety/helpers.
*
* @param resources - Resources to define
* @returns The resources that was passed, as-is (this is an "identity function")
* @deprecated Sanity-internal helper, don't use in external code
* @internal
* @hidden
*/
export function defineLocalesResources<R extends Record<string, string>>(
namespace: string,
resources: R,
): R {
return resources
}
/**
* Removes any values that are undefined from the given object.
*
* This is used to remove any placeholders from the generated files, while being able to leave them
* in place to ease spotting the missing translations.
*
* @param resources - The resources to remove undefined values from
* @returns The resources without any undefined values
* @public
* @hidden
*/
export function removeUndefinedLocaleResources<T extends {[key: string]: string | undefined}>(
resources: T,
): {[K in keyof T]: Exclude<T[K], undefined>} {
const result: Partial<T> = {}
for (const key in resources) {
if (typeof resources[key] !== 'undefined') {
result[key] = resources[key]
}
}
return result as {[K in keyof T]: Exclude<T[K], undefined>}
}