From 9d38926b33815274eb39e8db4c612bd3978cc521 Mon Sep 17 00:00:00 2001 From: Lasse Diercks Date: Thu, 19 Jun 2025 11:47:03 +0200 Subject: [PATCH] feat: remove deprecation filtering We remove the filtering of deprecated elements. If an deprecated element should be displayed or not is highly dependent on the implementation and should be decided in the backend or implementation of the data THIS IS A BREAKING CHANGE: deserializePage and deserializePages have been removed If you relied on this module removing deprecated elements from your api response you need to re-implement that custom. --- src/__tests__/alchemyApiDeserializer.spec.ts | 516 ------------------- src/alchemyApiDeserializer.ts | 43 -- src/main.ts | 1 - 3 files changed, 560 deletions(-) delete mode 100644 src/__tests__/alchemyApiDeserializer.spec.ts delete mode 100644 src/alchemyApiDeserializer.ts diff --git a/src/__tests__/alchemyApiDeserializer.spec.ts b/src/__tests__/alchemyApiDeserializer.spec.ts deleted file mode 100644 index f922a62..0000000 --- a/src/__tests__/alchemyApiDeserializer.spec.ts +++ /dev/null @@ -1,516 +0,0 @@ -import { deserializePage, deserializePages } from "../alchemyApiDeserializer" -import { describe, expect, it } from "vitest" - -describe("deserializePage", () => { - it("does not return any deprecated elements for single page", () => { - const pageData = { - data: { - type: "page", - id: "1", - attributes: { - name: "Homepage" - }, - relationships: { - elements: { - data: [ - { - type: "element", - id: "1" - }, - { - type: "element", - id: "2" - } - ] - } - } - }, - included: [ - { - type: "element", - id: "1", - attributes: { - name: "article", - deprecated: false - }, - relationships: { - essences: { - data: [ - { - id: "1", - type: "essence_text" - }, - { - id: "1", - type: "essence_picture" - } - ] - }, - nested_elements: { - data: [ - { - id: "3", - type: "element" - }, - { - id: "4", - type: "element" - } - ] - } - } - }, - { - type: "element", - id: "2", - attributes: { - name: "old", - deprecated: true - }, - relationships: {} - }, - { - type: "element", - id: "3", - attributes: { - name: "image", - deprecated: true - }, - relationships: {} - }, - { - type: "element", - id: "4", - attributes: { - name: "text", - deprecated: false - }, - relationships: {} - }, - { - type: "essence_text", - id: "1", - attributes: { - name: "text", - deprecated: true - } - }, - { - type: "essence_picture", - id: "1", - attributes: { - name: "image", - deprecated: false - } - } - ] - } - const page = deserializePage(pageData) - expect(page.elements).toEqual([ - { - id: "1", - name: "article", - deprecated: false, - essences: [ - { - id: "1", - name: "image", - deprecated: false - } - ], - nested_elements: [ - { - id: "4", - name: "text", - deprecated: false - } - ] - } - ]) - }) - - it("does not return any deprecated elements for single page with camelCased attributes", () => { - const pageData = { - data: { - type: "page", - id: "1", - attributes: { - name: "Homepage" - }, - relationships: { - elements: { - data: [ - { - type: "element", - id: "1" - }, - { - type: "element", - id: "2" - } - ] - } - } - }, - included: [ - { - type: "element", - id: "1", - attributes: { - name: "article", - deprecated: false - }, - relationships: { - essences: { - data: [ - { - id: "1", - type: "essence_text" - }, - { - id: "1", - type: "essence_picture" - } - ] - }, - nestedElements: { - data: [ - { - id: "3", - type: "element" - }, - { - id: "4", - type: "element" - } - ] - } - } - }, - { - type: "element", - id: "2", - attributes: { - name: "old", - deprecated: true - }, - relationships: {} - }, - { - type: "element", - id: "3", - attributes: { - name: "image", - deprecated: true - }, - relationships: {} - }, - { - type: "element", - id: "4", - attributes: { - name: "text", - deprecated: false - }, - relationships: {} - }, - { - type: "essence_text", - id: "1", - attributes: { - name: "text", - deprecated: true - } - }, - { - type: "essence_picture", - id: "1", - attributes: { - name: "image", - deprecated: false - } - } - ] - } - const page = deserializePage(pageData) - expect(page.elements).toEqual([ - { - id: "1", - name: "article", - deprecated: false, - essences: [ - { - id: "1", - name: "image", - deprecated: false - } - ], - nestedElements: [ - { - id: "4", - name: "text", - deprecated: false - } - ] - } - ]) - }) - - it("does not return any deprecated elements for pages", () => { - const pageData = { - data: [ - { - type: "page", - id: "1", - attributes: { - name: "Homepage" - }, - relationships: { - elements: { - data: [ - { - type: "element", - id: "1" - }, - { - type: "element", - id: "2" - } - ] - } - } - } - ], - included: [ - { - type: "element", - id: "1", - attributes: { - name: "article", - deprecated: false - }, - relationships: { - essences: { - data: [ - { - id: "1", - type: "essence_text" - }, - { - id: "1", - type: "essence_picture" - } - ] - }, - nested_elements: { - data: [ - { - id: "3", - type: "element" - }, - { - id: "4", - type: "element" - } - ] - } - } - }, - { - type: "element", - id: "2", - attributes: { - name: "old", - deprecated: true - }, - relationships: {} - }, - { - type: "element", - id: "3", - attributes: { - name: "image", - deprecated: true - }, - relationships: {} - }, - { - type: "element", - id: "4", - attributes: { - name: "text", - deprecated: false - }, - relationships: {} - }, - { - type: "essence_text", - id: "1", - attributes: { - name: "text", - deprecated: true - } - }, - { - type: "essence_picture", - id: "1", - attributes: { - name: "image", - deprecated: false - } - } - ] - } - const pages = deserializePages(pageData) - expect(pages[0].elements).toEqual([ - { - id: "1", - name: "article", - deprecated: false, - essences: [ - { - id: "1", - name: "image", - deprecated: false - } - ], - nested_elements: [ - { - id: "4", - name: "text", - deprecated: false - } - ] - } - ]) - }) - - it("does not return any deprecated elements for pages with camelCased attributes", () => { - const pageData = { - data: [ - { - type: "page", - id: "1", - attributes: { - name: "Homepage" - }, - relationships: { - elements: { - data: [ - { - type: "element", - id: "1" - }, - { - type: "element", - id: "2" - } - ] - } - } - } - ], - included: [ - { - type: "element", - id: "1", - attributes: { - name: "article", - deprecated: false - }, - relationships: { - essences: { - data: [ - { - id: "1", - type: "essence_text" - }, - { - id: "1", - type: "essence_picture" - } - ] - }, - nestedElements: { - data: [ - { - id: "3", - type: "element" - }, - { - id: "4", - type: "element" - } - ] - } - } - }, - { - type: "element", - id: "2", - attributes: { - name: "old", - deprecated: true - }, - relationships: {} - }, - { - type: "element", - id: "3", - attributes: { - name: "image", - deprecated: true - }, - relationships: {} - }, - { - type: "element", - id: "4", - attributes: { - name: "text", - deprecated: false - }, - relationships: {} - }, - { - type: "essence_text", - id: "1", - attributes: { - name: "text", - deprecated: true - } - }, - { - type: "essence_picture", - id: "1", - attributes: { - name: "image", - deprecated: false - } - } - ] - } - const pages = deserializePages(pageData) - expect(pages[0].elements).toEqual([ - { - id: "1", - name: "article", - deprecated: false, - essences: [ - { - id: "1", - name: "image", - deprecated: false - } - ], - nestedElements: [ - { - id: "4", - name: "text", - deprecated: false - } - ] - } - ]) - }) -}) diff --git a/src/alchemyApiDeserializer.ts b/src/alchemyApiDeserializer.ts deleted file mode 100644 index c70d505..0000000 --- a/src/alchemyApiDeserializer.ts +++ /dev/null @@ -1,43 +0,0 @@ -import { deserialize } from "./deserialize" - -// Recursively filters all deprecated elements and essences from collection -function filterDeprecatedElements(elements: any) { - const els: any = [] - - elements.forEach((element: any) => { - if (element.nested_elements?.length > 0) { - element.nested_elements = filterDeprecatedElements( - element.nested_elements - ) - } - if (element.nestedElements?.length > 0) { - element.nestedElements = filterDeprecatedElements(element.nestedElements) - } - if (element.essences?.length > 0) { - element.essences = element.essences.filter((essence: any) => { - return !essence.deprecated - }) - } - if (!element.deprecated) { - els.push(element) - } - }) - - return els -} - -// Returns deserialized page without deprecated content -export function deserializePage(pageData: any) { - const page = deserialize(pageData) - page.elements = filterDeprecatedElements(page.elements) - return page -} - -// Returns deserialized pages without deprecated content -export function deserializePages(pagesData: any) { - const pages = deserialize(pagesData) - pages.forEach((page: any) => { - page.elements = filterDeprecatedElements(page.elements) - }) - return pages -} diff --git a/src/main.ts b/src/main.ts index 4833862..05b9ac4 100644 --- a/src/main.ts +++ b/src/main.ts @@ -1,2 +1 @@ -export * from "./alchemyApiDeserializer" export * from "./deserialize"