174 lines
3.3 KiB
JavaScript
174 lines
3.3 KiB
JavaScript
import { dasherize } from '@ember/string';
|
|
import { languages } from 'monaco-editor/esm/vs/editor/editor.api.js';
|
|
|
|
const urlSettingsPrefix = 'https://docs.meilisearch.com/reference/api/settings';
|
|
|
|
export const indexSettings = [
|
|
{
|
|
name: 'displayedAttributes',
|
|
schema: {
|
|
type: 'array',
|
|
items: {
|
|
type: 'string',
|
|
},
|
|
uniqueItems: true,
|
|
},
|
|
},
|
|
{
|
|
name: 'distinctAttribute',
|
|
schema: {
|
|
type: ['string', 'null'],
|
|
},
|
|
},
|
|
{
|
|
name: 'faceting',
|
|
schema: {
|
|
type: 'object',
|
|
properties: {
|
|
maxValuesPerFacet: {
|
|
type: 'integer',
|
|
},
|
|
},
|
|
required: ['maxValuesPerFacet'],
|
|
additionalProperties: false,
|
|
},
|
|
},
|
|
{
|
|
name: 'filterableAttributes',
|
|
schema: {
|
|
type: 'array',
|
|
items: {
|
|
type: 'string',
|
|
},
|
|
uniqueItems: true,
|
|
},
|
|
},
|
|
{
|
|
name: 'pagination',
|
|
schema: {
|
|
type: 'object',
|
|
properties: {
|
|
maxTotalHits: {
|
|
type: 'integer',
|
|
},
|
|
},
|
|
required: ['maxTotalHits'],
|
|
additionalProperties: false,
|
|
},
|
|
},
|
|
{
|
|
name: 'rankingRules',
|
|
schema: {
|
|
type: 'array',
|
|
items: {
|
|
type: 'string',
|
|
},
|
|
uniqueItems: true,
|
|
},
|
|
},
|
|
{
|
|
name: 'searchableAttributes',
|
|
schema: {
|
|
type: 'array',
|
|
items: {
|
|
type: 'string',
|
|
},
|
|
uniqueItems: true,
|
|
},
|
|
},
|
|
{
|
|
name: 'sortableAttributes',
|
|
schema: {
|
|
type: 'array',
|
|
items: {
|
|
type: 'string',
|
|
},
|
|
uniqueItems: true,
|
|
},
|
|
},
|
|
{
|
|
name: 'stopWords',
|
|
schema: {
|
|
type: 'array',
|
|
items: {
|
|
type: 'string',
|
|
},
|
|
uniqueItems: true,
|
|
},
|
|
},
|
|
{
|
|
name: 'synonyms',
|
|
schema: {
|
|
type: 'object',
|
|
additionalProperties: {
|
|
type: 'array',
|
|
items: {
|
|
type: 'string',
|
|
},
|
|
uniqueItems: true,
|
|
},
|
|
},
|
|
},
|
|
{
|
|
name: 'typoTolerance',
|
|
schema: {
|
|
type: 'object',
|
|
properties: {
|
|
enabled: {
|
|
type: 'boolean',
|
|
},
|
|
minWordSizeForTypos: {
|
|
type: 'object',
|
|
properties: {
|
|
oneTypo: { type: 'integer' },
|
|
twoTypos: { type: 'integer' },
|
|
},
|
|
additionalProperties: false,
|
|
},
|
|
disableOnWords: {
|
|
type: 'array',
|
|
items: {
|
|
type: 'string',
|
|
},
|
|
uniqueItems: true,
|
|
},
|
|
disableOnAttributes: {
|
|
type: 'array',
|
|
items: {
|
|
type: 'string',
|
|
},
|
|
uniqueItems: true,
|
|
},
|
|
},
|
|
additionalProperties: false,
|
|
},
|
|
},
|
|
].map((item) => {
|
|
item.uri = item.schema.$id = `${urlSettingsPrefix}/${dasherize(item.name)}`;
|
|
item.fileMatch = [item.uri];
|
|
|
|
return item;
|
|
});
|
|
|
|
export const allIndexSettings = {
|
|
uri: urlSettingsPrefix,
|
|
fileMatch: [urlSettingsPrefix],
|
|
schema: {
|
|
$id: urlSettingsPrefix,
|
|
type: 'object',
|
|
properties: indexSettings.reduce((properties, item) => {
|
|
properties[item.name] = {
|
|
$ref: item.schema.$id,
|
|
};
|
|
|
|
return properties;
|
|
}, {}),
|
|
additionalProperties: false,
|
|
},
|
|
};
|
|
|
|
// TODO: do it async, not in main stream
|
|
languages.json.jsonDefaults.setDiagnosticsOptions({
|
|
validate: true,
|
|
schemas: [...indexSettings, allIndexSettings],
|
|
});
|