()
| 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) { |
no test coverage detected