MCPcopy Create free account
hub / github.com/zenstackhq/zenstack / buildSerializers

Method buildSerializers

packages/server/src/api/rest/index.ts:1894–1982  ·  view source on GitHub ↗
()

Source from the content-addressed store, hash-verified

1892 }
1893
1894 private buildSerializers() {
1895 const linkers: Record<string, Linker<any>> = {};
1896
1897 for (const model of Object.keys(this.schema.models)) {
1898 const ids = this.getIdFields(model);
1899 const modelLower = lowerCaseFirst(model);
1900 const mappedModel = this.mapModelName(modelLower);
1901
1902 if (ids.length < 1) {
1903 continue;
1904 }
1905
1906 const linker = new tsjapi.Linker((items) =>
1907 Array.isArray(items)
1908 ? this.makeLinkUrl(`/${mappedModel}`)
1909 : this.makeLinkUrl(`/${mappedModel}/${this.getId(model, items)}`),
1910 );
1911 linkers[modelLower] = linker;
1912
1913 let projection: Record<string, 0> | null = {};
1914 const modelDef = this.requireModel(model);
1915 for (const [field, fieldDef] of Object.entries(modelDef.fields)) {
1916 if (fieldDef.relation) {
1917 projection[field] = 0;
1918 }
1919 }
1920 if (Object.keys(projection).length === 0) {
1921 projection = null;
1922 }
1923
1924 const serializer = new tsjapi.Serializer(model, {
1925 version: '1.1',
1926 idKey: this.makeIdKey(ids),
1927 linkers: {
1928 resource: linker,
1929 document: linker,
1930 },
1931 projection,
1932 });
1933 this.serializers.set(modelLower, serializer);
1934 }
1935
1936 // set relators
1937 for (const model of Object.keys(this.schema.models)) {
1938 const modelLower = lowerCaseFirst(model);
1939 const serializer = this.serializers.get(modelLower);
1940 if (!serializer) {
1941 continue;
1942 }
1943
1944 const relators: Record<string, Relator<any>> = {};
1945 const modelDef = this.requireModel(model);
1946 for (const [field, fieldDef] of Object.entries(modelDef.fields)) {
1947 if (!fieldDef.relation) {
1948 continue;
1949 }
1950 const fieldSerializer = this.serializers.get(lowerCaseFirst(fieldDef.type));
1951 if (!fieldSerializer) {

Callers 1

constructorMethod · 0.95

Calls 7

getIdFieldsMethod · 0.95
mapModelNameMethod · 0.95
makeLinkUrlMethod · 0.95
getIdMethod · 0.95
requireModelMethod · 0.95
makeIdKeyMethod · 0.95
lowerCaseFirstFunction · 0.90

Tested by

no test coverage detected