scrivito
Version:
Scrivito is a professional, yet easy to use SaaS Enterprise Content Management Service, built for digital agencies and medium to large businesses. It is completely maintenance-free, cost-effective, and has unprecedented performance and security.
36 lines (29 loc) • 1.1 kB
text/typescript
import memoize from 'lodash-es/memoize';
import { ApiClient, ClientError } from 'scrivito_sdk/client';
import { logError } from 'scrivito_sdk/common';
import { extractDataClassSchemaResponse } from 'scrivito_sdk/data_integration';
import { currentLanguage } from 'scrivito_sdk/data_integration/current_language';
import { DataClassSchemaResponse } from 'scrivito_sdk/data_integration/data_class_schema';
import { load } from 'scrivito_sdk/loadable';
export const fetchSchema = memoize(async function (
apiClient: ApiClient
): Promise<DataClassSchemaResponse> {
const siteLanguage = await load(currentLanguage);
let response: unknown;
try {
response = await apiClient.fetch('schema', {
headers: siteLanguage ? { 'Accept-Language': siteLanguage } : {},
});
} catch (error) {
if (error instanceof ClientError) {
logError(
'Error while fetching schema (using empty schema)',
error.message,
JSON.stringify(error.details)
);
return { attributes: {} };
}
throw error;
}
return extractDataClassSchemaResponse(response);
});