Пакет ember-data-overview
<img alt="EmberData" class="project-logo" src="data:image/svg+xml;base64,PHN2ZyB3aWR0aD0iMTAyOCIgaGVpZ2h0PSIzMjQiIHZpZXdCb3g9IjAgMCAxMDI4IDMyNCIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIj4KICA8ZyB0cmFuc2Zvcm09InRyYW5zbGF0ZSg3Ni4wNDEgNDIpIiBmaWxsPSJub25lIiBmaWxsLXJ1bGU9ImV2ZW5vZGQiPgogICAgPGcgZmlsbD0iI0UwNEUzOSI+CiAgICAgIDxwYXRoIGQ9Ik01MDcuNTUyIDEzNy4yMjlzLTEyLjU2IDkuNzQ0LTIzLjYxNiA4LjY1NmMtMTEuMDU2LTEuMDg4LTcuNTg0LTI1Ljc5Mi03LjU4NC0yNS43OTJzMi4zODQtMjIuNjU2LTQuMTI4LTI0LjU2Yy02LjQ5Ni0xLjg4OC0xNC41MTIgNS45MDQtMTQuNTEyIDUuOTA0cy05Ljk2OCAxMS4wNTYtMTQuNzM2IDI1LjE1MmwtMS4zMTIuNDMyczEuNTItMjQuNzItLjIwOC0zMC4zNTJjLTEuMjk2LTIuODE2LTEzLjIxNi0yLjU5Mi0xNS4xNjggMi4zODQtMS45NTIgNC45OTItMTEuNDg4IDM5LjY2NC0xMi4xNDQgNTQuMTkyIDAgMC0xOC42NCAxNS44MjQtMzQuODggMTguNDE2LTE2LjI1NiAyLjYwOC0yMC4xNi03LjU4NC0yMC4xNi03.N-M80jI <img alt="EmberData" class="project-logo" src="data:image/svg+xml;base64,PHN2ZyB3aWR0aD0iMTAyOCIgaGVpZ2h0PSIzMjQiIHZpZXdCb3g9IjAgMCAxMDI4IDMyNCIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIj4KICA8ZyB0cmFuc2Zvcm09InRyYW5zbGF0ZSg3Ni4wNDEgNDIpIiBmaWxsPSJub25lIiBmaWxsLXJ1bGU9ImV2ZW5vZGQiPgogICAgPGcgZmlsbD0iI0UwNEUzOSI+CiAgICAgIDxwYXRoIGQ9Ik01MDcuNTUyIDEzNy4yMjlzLTEyLjU2IDkuNzQ0LTIzLjYxNiA4LjY1NmMtMTEuMDU2LTEuMDg4LTcuNTg0LTI1Ljc5Mi03LjU4NC0yNS43OTJzMi4zODQtMjIuNjU2LTQuMTI4LTI0LjU2Yy02LjQ5Ni0xLjg4OC0xNC41MTIgNS45MDQtMTQuNTEyIDUuOTA0cy05Ljk2OCAxMS4wNTYtMTQuNzM2IDI1LjE1MmwtMS4zMTIuNDMyczEuNTItMjQuNzItLjIwOC0zMC4zNTJjLTEuMjk2LTIuODE2LTEzLjIxNi0yLjU5Mi0xNS4xNjggMi4zODQtMS45NTIgNC45OTItMTEuNDg4IDM5LjY2NC0xMi4xNDQgNTQuMTkyIDAgMC0xOC42NCAxNS44MjQtMzQuODggMTguNDE2LTE2LjI1NiAyLjYwOC0yMC4xNi03LjU4NC0yMC4xNi03LjU4NHM0NC4yMDgtMTIuMzUyIDQyLjY4OC00Ny42OGMtMS41MDQtMzUuMzI4LTM1LjY0OC0yMi4yNTYtMzkuNTA0LTE5LjM2LTMuNzQ0IDIuODE2LTIzLjY5NiAxNC44NDgtMjkuNTIgNDguMTc2LS4xOTIgMS4xMi0uNTQ0IDYuMDgtLjU0NCA2LjA4cy0xNy4xMiAxMS40NzItMjYuNjU2IDE0LjUxMmMwIDAgMjYuNjU2LTQ0Ljg2NC01Ljg0LTY1LjIzMi05LjE0LTUuNTAyLTE3LjEwNi0uNDQtMjEuODQ1IDQuMjA4LTIuOTEgMi44NTQgMzkuMzk3LTQzLjQyNCAyOS42MzctODQuODMyQzMwMi44OC4yMzcgMjkzLjAyNC0xLjg3NSAyODMuOTg0IDEuMzI1Yy0xMy43MjggNS40MDgtMTguOTI4IDEzLjQyNC0xOC45MjggMTMuNDI0cy0xNy43NzYgMjUuNzkyLTIxLjkwNCA2NC4xNmMtNC4xMTIgMzguMzUyLTEwLjE3NiA4NC43MzYtMTAuMTc2IDg0LjczNnMtOC40NjQgOC4yNC0xNi4yNTYgOC42NzJjLTcuODA4LjQxNi00LjMzNi0yMy4yLTQuMzM2LTIzLjJzNi4wNjQtMzUuOTY4IDUuNjQ4LTQyLjA0OGMtLjQ0OC02LjA2NC0uODgtOS4zMTItOC4wMzItMTEuNDcyLTcuMTUyLTIuMTc2LTE0Ljk2IDYuOTI4LTE0Ljk2IDYuOTI4cy0yMC41NzYgMzEuMi0yMi4zMDQgMzUuOTY4bC0xLjEwNCAxLjk2OC0xLjA3Mi0xLjMxMnMxNC41MTItNDIuNDguNjU2LTQzLjEyYy0xMy44NzItLjY1Ni0yMi45NzYgMTUuMTY4LTIyLjk3NiAxNS4xNjhzLTE1LjgyNCAyNi40NDgtMTYuNDggMjkuNDcybC0xLjA3Mi0xLjI5NnM2LjQ5Ni0zMC43NjggNS4yLTM4LjM2OGMtMS4zMTItNy41ODQtOC40NDgtNi4wNjQtOC40NDgtNi4wNjRzLTkuMTA0LTEuMDg4LTExLjQ4OCA0Ljc2OGMtMi4zODQgNS44NTYtMTEuMDU2IDQ0LjY0LTEyLjE0NCA1Ni45OTIgMCAwLTIyLjc1MiAxNi4yNTYtMzcuNzEyIDE2LjQ2NC0xNC45NDQuMjI0LTEzLjQyNC05LjQ3Mi0xMy40MjQtOS40NzJzNTQuODMyLTE4Ljc2OCAzOS44NzItNTUuODI0Yy02LjcyLTkuNTM2LTE0LjUxMi0xMi41MjgtMjUuNTY4LTEyLjMyLTExLjA1Ni4yMjQtMjQuNzY4IDYuOTYtMzMuNjQ4IDI2Ljg5Ni00LjI1NiA5LjUwNC01Ljc5MiAxOC41NDQtNi42NzIgMjUuMzYgMCAwLTkuNTg0IDEuOTY4LTE0Ljc4NC0yLjM2OC01LjIxNi00LjMzNi03Ljg4OCAwLTcuODg4IDBzLTguOTI4IDExLjM5Mi0uMDQ4IDE0Ljg0OGM4Ljg5NiAzLjQ3MiAyMi43NTIgNS4wODggMjIuNzUyIDUuMDg4IDEuMjggNi4wNjQgNC45NzYgMTYuMzg0IDE1LjgwOCAyNC41OTIgMTYuMjU2IDEyLjM1MiA0Ny40NC0xLjEzNiA0Ny40NC0xLjEzNmwxMi43ODQtNy4xNjhzLjQzMiAxMS43MjggOS43NiAxMy40NGM5LjMxMiAxLjcxMiAxMy4yMTYtLjAzMiAyOS40NzItMzkuNDcyIDkuNTM2LTIwLjE2IDEwLjE5Mi0xOS4wNzIgMTAuMTkyLTE5LjA3MiAxLjA3Mi0uMjI0LTYuMjg4IDM4LjM1Mi0zLjQ3MiA0OC43NTIgMi44MTYgMTAuNDE2IDE1LjE2OCA5LjMyOCAxNS4xNjggOS4zMjhzNi43MiAxLjI5NiAxMi4xNDQtMTcuNzc2YzUuNDA4LTE5LjA3MiAxNS44MjQtNDAuMDk2IDE1LjgyNC00MC4wOTYgMS4yOCAwLTMuMjY0IDM5LjQ0IDMuNjY0IDUyLjAxNiA2Ljk0NCAxMi41NzYgMjQuOTI4IDQuMjI0IDI0LjkyOCAyLjczMiAyLjM1NiAzLjM2NC0zLjY2OCA2LjcxNy0zLjYxNCA5LjE3Ni01Ljg5NSAxMy4zMjctOC41NzQgMjUuMzYgMTMuMDA4IDQwLjkwNy0yNS4zNiAxNy43NTgtMjYuNjU2IDEwLjQ0NC0zNS45NjggMC0zNS45NjggMCAwLTEuODQ2LTIyLjc1Mi0yMi43NTIgMCAwLTE0LjQ0NS0zNS45NjggMC0zNy44Mi00LjcyMS0yOC4xNjgtMTIuNzU5LTQzLjAzOC0xMi43NTktMTIuNzA4LTE2LjE0MSAxNS4zNzYtNDAuMDk2IDE5LjA3Mi0yMC41OTJ6bS0zNS41NTIgMTQ4LjAxNnMtMi44MTYtOS41MzYgNS4yLTM2LjE5MmM4LjAzMi0yNi42NTYgMjYuODgtMTYuMjU2IDI2Ljg4LTE2LjI1NnMxMy4wMDggOS45NjggMi44MTYgMzYuNjI0Yy0xMC4xNzYgMjYuNjU2LTM0Ljg5NiAxNS44MjQtMzQuODk2IDE1LjgyNHptMTA5LjY2NC01Mi4yMjRjOC44OC0xNi4yNTYgMTUuODI0LTcuMzc2IDE1LjgyNC03LjM3NnM3LjU4NCA4LjI0LTEuMDg4IDIwLjU5MmMtOC42NzIgMTIuMzUyLTIxLjIzMiAxMS40ODgtMjEuMjMyIDExLjQ4OHMtMi4zODQtOC40NjQgNi40OTYtMjQuNzA0eiIvPgogICAgICA8cGF0aCBkPSJNNDUxLjkxOCAxODguMDI3di0zLjExMmgxLjk3NGMuMjczIDAgLjU0Ny4wMjguODM1LjA1Ny4yODguMDQzLjU2Mi4xMTUuNzkzLjIxNi4yNDUuMTAxLjQzMi4yNDUuNTc2LjQzMy4xNTkuMTg3LjIzLjQ0Ni4yMy43NjMgMCAuNzItLjIxNiAxLjE4Mi0uNjQ4IDEuMzY5LS40MzIuMTg3LS45OTQuMjc0LTEuNjcxLjI3NGgtMi4wOXptLTIuMzQ5LTQuOTQydjExLjg0M2gyLjM0OXYtNS4wNTdoMS40N2wyLjg4MSA1LjA1N2gyLjQ2NGwtMy4xNy01LjE3MmMuNDMyLS4wNDQuODM2LS4xMyAxLjIyNS0uMjYuMzc0LS4xMy43MDYtLjMxNy45OC0uNTYyLjI4OC0uMjQ1LjUwNC0uNTYyLjY2Mi0uOTUuMTczLS4zOS4yNDUtLjg1LjI0NS0xLjM5OCAwLTEuMjgyLS40MDMtMi4xOS0xLjE5Ni0yLjcwOS0uODA3LS41MzMtMS45Ni0uNzkyLTMuNDQzLS43OTJoLTQuNDY3em0tMy43NiA1LjkzNmMwLTEuMjEuMjAxLTIuMzIuNjItMy4zMjhhOC4wOSA4LjA5IDAgMCAxIDEuNy0yLjYwOCA3LjcxIDcuNzEgMCAwIDEgMi41Mi0xLjczIDcuODY0IDcuODY0IDAgMCAxIDMuMTI3LS42MTljMS4wOTUgMCAyLjEzMy4yMDIgMy4wOTguNjIuOTguNDE4IDEuODE2Ljk5NCAyLjUzNiAxLjcyOS43Mi43MzUgMS4yODIgMS41OTkgMS43MTQgMi42MDguNDE4IDEuMDA4LjYzNCAyLjExOC42MzQgMy4zMjhzLS4yMTYgMi4zMi0uNjM0IDMuMzQyYy0uNDMyIDEuMDA5LS45OTQgMS45MDItMS43MTQgMi42MzdhNy41OTQgNy41OTQgMCAwIDEtMi41MzYgMS43NDQgNy43MjUgNy43MjUgMCAwIDEtMy4wOTguNjE5IDcuODY0IDcuODY0IDAgMCAxLTMuMTI2LS42MiA3LjUzNSA3LjUzNSAwIDAgMS0yLjUyMi0xLjc0M2MtLjcyLS43MzUtMS4yODItMS42MjgtMS43LTIuNjM3LS40MTgtMS4wMjItLjYyLTIuMTMyLS42Mi0zLjM0MnptLTIuODk2IDBjMCAxLjYyOC4zMDIgMy4wODMuODkzIDQuMzguNjA1IDEuMzExIDEuMzk4IDIuNDIgMi4zOTIgMy4zNDNhMTAuNTcgMTAuNTcgMCAwIDAgMy40NzIgMi4xMTdjMS4zMTEuNDkgMi42OC43MzUgNC4xMDYuNzM1IDEuNDQxIDAgMi44MS0uMjQ1IDQuMTIxLS43MzVhMTAuNTcgMTAuNTcgMCAwIDAgMy40NzItMi4xMTdjLjk5NS0uOTIzIDEuNzg3LTIuMDMyIDIuMzkyLTMuMzQzLjU5LTEuMjk3Ljg3OS0yLjc1Mi44NzktNC4zOCAwLTEuNi0uMjg4LTMuMDU1LS44NzktNC4zNTEtLjYwNS0xLjMxMi0xLjM5Ny0yLjQyLTIuMzkyLTMuMzI5YTEwLjU3IDEwLjU3IDAgMCAwLTMuNDcyLTIuMTE4IDExLjM1NiAxMS4zNTYgMCAwIDAtNC4xMi0uNzQ5Yy0xLjQyNyAwLTIuNzk2LjI0NS00LjEwNy43NWExMC41NyAxMC41NyAwIDAgMC0zLjQ3MiAyLjExN2MtLjk5NC45MDgtMS43ODcgMi4wMTctMi4zOTIgMy4zMjktLjU5IDEuMjk2LS44OTMgMi43NTItLjg5MyA0LjM1eiIvPgogICAgICA8cGF0aCBkPSJNNDUxLjkxOCAxODguMDI3di0zLjExMmgxLjk3NGMuMjczIDAgLjU0Ny4wMjguODM1LjA1Ny4yODguMDQzLjU2Mi4xMTUuNzkzLjIxNi4yNDUuMTAxLjQzMi4yNDUuNTc2LjQzMy4xNTkuMTg3LjIzLjQ0Ni4yMy43NjMgMCAuNzItLjIxNiAxLjE4Mi0uNjQ4IDEuMzY5LS40MzIuMTg3LS45OTQuMjc0LTEuNjcxLjI3NGgtMi4wOXptLTIuMzQ5LTQuOTQydjExLjg0M2gyLjM0OXYtNS4wNTdoMS40N2wyLjg4MSA1LjA1N2gyLjQ2NGwtMy4xNy01LjE3MmMuNDMyLS4wNDQuODM2LS4xMyAxLjIyNS0uMjYuMzc0LS4xMy43MDYtLjMxNy45OC0uNTYyLjI4OC0uMjQ1LjUwNC0uNTYyLjY2Mi0uOTUuMTczLS4zOS4yNDUtLjg1LjI0NS0xLjM5OCAwLTEuMjgyLS40MDMtMi4xOS0xLjE5Ni0yLjcwOS0uODA3LS41MzMtMS45Ni0uNzkyLTMuNDQzLS43OTJoLTQuNDY3em0tMy43NiA1LjkzNmMwLTEuMjEuMjAxLTIuMzIuNjItMy4zMjhhOC4wOSA4LjA5IDAgMCAxIDEuNy0yLjYwOCA3LjcxIDcuNzEgMCAwIDEgMi41Mi0xLjczIDcuODY0IDcuODY0IDAgMCAxIDMuMTI3LS42MTljMS4wOTUgMCAyLjEzMy4yMDIgMy4wOTguNjIuOTguNDE4IDEuODE2Ljk5NCAyLjUzNiAxLjcyOS43Mi43MzUgMS4yODIgMS41OTkgMS43MTQgMi42MDguNDE4IDEuMDA4LjYzNCAyLjExOC42MzQgMy4zMjhzLS4yMTYgMi4zMi0uNjM0IDMuMzQyYy0uNDMyIDEuMDA5LS45OTQgMS45MDItMS43MTQgMi42MzdhNy41OTQgNy41OTQgMCAwIDEtMi41MzYgMS43NDQgNy43MjUgNy43MjUgMCAwIDEtMy4wOTguNjE5IDcuODY0IDcuODY0IDAgMCAxLTMuMTI2LS42MiA3LjUzNSA3LjUzNSAwIDAgMS0yLjUyMi0xLjc0M2MtLjcyLS43MzUtMS4yODItMS42MjgtMS43LTIuNjM3LS40MTgtMS4wMjItLjYyLTIuMTMyLS42Mi0zLjM0MnptLTIuODk2IDBjMCAxLjYyOC4zMDIgMy4wODMuODkzIDQuMzguNjA1IDEuMzExIDEuMzk4IDIuNDIgMi4zOTIgMy4zNDNhMTAuNTcgMTAuNTcgMCAwIDAgMy40NzIgMi4xMTdjMS4zMTEuNDkgMi42OC43MzUgNC4xMDYuNzM1IDEuNDQxIDAgMi44MS0uMjQ1IDQuMTIxLS43MzVhMTAuNTcgMTAuNTcgMCAwIDAgMy40NzItMi4xMTdjLjk5NS0uOTIzIDEuNzg3LTIuMDMyIDIuMzkyLTMuMzQzLjU5LTEuMjk3Ljg3OS0yLjc1Mi44NzktNC4zOCAwLTEuNi0uMjg4LTMuMDU1LS44NzktNC4zNTEtLjYwNS0xLjMxMi0xLjM5Ny0yLjQyLTIuMzkyLTMuMzI5YTEwLjU3IDEwLjU3IDAgMCAwLTMuNDcyLTIuMTE4IDExLjM1NiAxMS4zNTYgMCAwIDAtNC4xMi0uNzQ5Yy0xLjQyNyAwLTIuNzk2LjI0NS00LjEwNy43NWExMC41NyAxMC41NyAwIDAgMC0zLjQ3MiAyLjExN2MtLjk5NC45MDgtMS43ODcgMi4wMTctMi4zOTIgMy4zMjktLjU5IDEuMjk2LS44OTMgMi43NTItLjg5MyA0LjM1eiIvPgogICAgICA8cGF0aCBkPSJNNzY1Ljg2NyAxNzIuNzA0Yy0yLjQzIDIuMjI0LTUuNDQ5IDQuNTk4LTkuMDUzIDcuMTNhOTYuMzg4IDk2LjM4OCAwIDAgMS0xMS42NjcgNi45NyA4OC44NiA4OC44NiAwIDAgMS0xMi43OTMgNS4zMDdjLTQuMzQgMS40MTYtOC40NyAyLjEyMy0xMi4zNzIgMi4xMjMtMy41MTQgMC02LjQ1Ny0uNDktOC44Ni0xLjQ2NC0yLjM4Ny0uOTc3LTQuMzI0LTIuMzQtNS44MS00LjA5NC0xLjQ3Mi0xLjc1MS0yLjUzOC0zLjg5NS0zLjE2OS02LjQxOC0uNjQ1LTIuNTMtLjk3Ni01LjMwOC0uOTc2LTguMzQxIDAtNC4yNDUuNDgtOS4xOTggMS40MjctMTQuODYgMS45MzctMTEuNzA4IDMuMTgzLTE4LjI4MiAzLjczOS0xOS43My45MTYtMi44NzggMTIuNzYzLTY1LjQzIDE1LjUxLTc1LjMwNSAyLjU2OC04LjA1IDQuMTQ1LTEzLjI4NSA0Ljc0NS0xNS43MTUuMzMtMS43MDIgMS4yNDctMy4yMzUgMi43NzgtNC42MDJhMTguNDU3IDE4LjQ1NyAwIDAgMSA0LjcxNS0zLjAxMiAyNS42MyAyNS42MyAwIDAgMSA1LjQ2Ni0xLjczOWMxLjg3Ny0uMzc1IDMuNTg4LS41NjEgNS4xMi0uNTYxIDIuNzc4IDAgNC42NTUuNTIgNS42NiAxLjU2OS45OTIgMS4wNDQgMS40ODcgMi40NDEgMS40ODcgNC4xOTIgMCAxLjQ4NC0uMzQ1IDMuNTc4LTEuMDUgNi4yODQtLjY5MSAyLjcwOS0xLjQ3MiA1Ljc5My0yLjM1OCA5LjI1NC0uODg4IDMuNDY2LTIuMTkyIDcuOTE4LTMuOTM2IDEzLjM2LTEuNzQgNS40NC0xMi45MjYgNjYuMjYtMTMuNTU3IDcwLjA5N2ExMzYuNjM3IDEzNi42MzcgMCAwIDEtMi40MDMgMTEuNDQ2Yy0uOTc2IDMuNzg5LTEuNDU2IDcuMjMzLTEuNDU2IDEwLjMzIDAgMy4wMzIuMzMgNS40MzggMS4wMDYgNy4yMjUuNjc0IDEuNzg0IDIuMDU3IDIuNjc3IDQuMTQ0IDIuNjc3IDIuNDMzIDAgNS4xMi0uODQgOC4wOTQtMi41MjcgMi45NTgtMS42ODIgNS45Ni0zLjcyNCA4Ljk5NC02LjExN2EyMDIuMDIyIDIwMi4wMjIgMCAwIDAgOC44ODktNy40MjggMjc2LjQ4NiAyNzYuNDg2IDAgMCAxIDcuNjg2LTYuNTd2MjAuNTE5eiIgZmlsbD0iIzYxMjExNiIvPgogICAgPHBhdGggZD0iTTgwOS4xNjcgMTQ2LjI5NWMtLjI3MiAyLjE3MS0uODYgNC44ODEtMS43NzIgOC4xMzZhNTYuMjM4IDU2LjIzOCAwIDAgMS0zLjU5MSA5LjQ1N2MtMS40ODIgMy4wNTMtMy4yMzggNS42Ni01LjI2IDcuODI3LTIuMDI3IDIuMTctNC4yODQgMy4yNTgtNi43ODEgMy4yNTgtMS41NDggMC0yLjgzNC0uNDA0LTMuODQzLTEuMTk5LTEuMDEzLS43OTktMS44MjEtMS44MzctMi40MjYtMy4xMjYtLjYxLTEuMjg1LTEuMDMtMi43NDQtMS4yNjktNC4zN2EzNS42NTIgMzUuNjUyIDAgMCAxLS4zNTQtNS4wNTVjMC0yLjk0MS4zODctNi4wOCAxLjE2Mi05LjQxNi43NzUtMy4zMzcgMi4xMDUtNy4yMDUgMy45OS0xMS42MTYgMS44ODQtNC40MDQgMy44MDMtOC4xMDcgNS43Ni0xMS4xMTQgMS45NTMtMy4wMDMgNC4wOS01LjY3MiA2LjQxLTguMDA4IDIuMzI3LTIuMzM1IDQuODAzLTQuMTg5IDcuNDI2LTUuNTYgMi42MjgtMS4zNjggNS4zMTgtMi4wNTIgOC4wODEtMi4wNTJsLTcuNTMzIDMyLjgzOHptNjQuOTAzIDE0LjA0MmMuMTIzLTMuNTEtMS4yOTUtNy4wMTQtNC43ODMtOC41MzQtNC4yNzYtMS44NjYtNy43MDcuNDMyLTEwLjI0NSAzLjYxNmE1OS40NzYgNTkuNDc2IDAgMCAxLTUuMjMxIDUuNzVjLTQuMTAyIDMuOTU1LTEwLjQzNCAxMC4wNjQtMTYuNTE0IDEwLjA2NC0xLjg4NiAwLTMuMTE0LS44Ny0zLjY4Ni0yLjYwOC0uNTc0LTEuNzM4LS44NjItNC4xNTItLjg2Mi03LjIzNyAwLTMuNjA5LjU2MS04LjA1MyAxLjY2OC0xMy4zMjJsMi45NzQtMTQuMDc5Yy44NjUtNC4xMiAxLjY0LTguMTQgMi4zMTEtMTIuMDYxLjY3Mi0zLjkyMSAxLjAxNC03LjQ5MyAxLjAxNC0xMC43MTQgMC0yLjEwOS0uMTg1LTMuNzc3LS41Ni01LS4zNzEtMS4yMjgtLjg5LTIuMTc2LTEuNTY2LTIuODYtLjY3OS0uNjgtMS40NTQtMS4xMjQtMi4zMzUtMS4zM2ExMi43MjcgMTIuNzI3IDAgMCAwLTIuODQ3LS4zMDVjLS43NDUgMC0xLjUwOC4wMi0yLjI4NS4wNTQtLjc4LjAzMy0xLjU0MS4wNS0yLjI4Ny4wNS0uODc3IDAtMS43NDctLjA1LTIuNTktLjE1M2E5LjA4MiA5LjA4MiAwIDAgMS0yLjQ4OC0uNjYzYy0uODE2LS4zMzgtMS40OTItLjg4Mi0yLjAzMi0xLjYzMmEzNzIgMzcyIDAgMCAwLTEuNjgtMi4yOThjLS41NzItLjc4My0xLjMwMi0xLjQ3OS0yLjE4NC0yLjA5My0uODc2LS42MTMtMi4xLS45MTgtMy42NTctLjkxOC00LjY3NiAwLTkuMjY1Ljk4OC0xMy43NjYgMi45Ny00LjUwNiAxLjk4MS04Ljc5IDQuNjQ2LTEyLjg1NyA4LTQuMDY2IDMuMzU2LTcuODA2IDcuMjgyLTExLjIyOCAxMS43NzYtMy40MiA0LjQ5OC02LjYyNSA5LjgzMi05LjYwMiAxNi4wMDctMi45NzggNi4xNzUtNS4xODIgMTEuOTEzLTYuNjAzIDE3LjIxLTEuNDI2IDUuMzAyLTIuMTM1IDEwLjQ2Ny0yLjEzNSAxNS41IDAgNC40ODYuNzA5IDguNTEgMi4xMjIgMTIuMDc0IDEuNDEzIDMuNTY3IDMuMjk2IDYuNTkgNS42NTYgOS4wNyAyLjM1NiAyLjQ4IDUuMDY2IDQuMzgzIDguMTMxIDUuNzA2IDMuMDY1IDEuMzI2IDYuMjEyIDEuOTkgOS40NDYgMS45OSAzLjA1MSAwIDYuMTA4LS41IDkuMTYxLTEuNWE1MC43NTMgNTAuNzUzIDAgMCAwIDguODExLTMuODQ3YzIuODEyLTEuNTcgNS40MTItMy4zMTYgNy43ODktNS4yNTMgMi4zNzItMS45MzEgNC4zNzgtMy44MyA2LjAwNi01LjY5NiAyLjE3IDUuNCA0Ljc0OSA5LjUyIDcuNzQgMTIuMzQ5IDIuOTgyIDIuODM0IDYuNzEzIDQuMjQ3IDExLjE4OCA0LjI0NyAzLjcwMyAwIDcuNDA2LS45MTkgMTEuMTEzLTIuNzU2YTU0Ljg0NCA1NC44NDQgMCAwIDAgMTAuNDAxLTYuNzM5YzMuMjMzLTIuNjU3IDYuMTQ2LTUuNDUgOC43NC04LjM3OCAzLjM4Ny0zLjgyNyA3LjE4LTcuNzM2IDguOTkzLTEyLjYxM2ExMi4zNyAxMi4zNyAwIDAgMCAuNzU5LTMuODQ0ek03NTEuNjE4IDg1LjU4M2MuNTI3LS4yNSAxLjQyOC0uMzM4IDIuNjg5LS4yNjcgMS4yNjEuMDc1IDIuNzE4LjA5NiA0LjM3LjA2OSAxLjY1MS0uMDMgMy40MzYtLjA2MyA1LjM1OC0uMTA3IDEuOTA5LS4wNCAzLjc3LS4wNzIgNS41NzMtLjA5NyAxLjgwMS0uMDIxIDMuNDgzLS4wMzYgNS4wNDUtLjA1IDEuNTYxLS4wMDkgMi44NTEtLjAwNCAzLjg3NC4wMSAxLjIuMDE0IDIuMTAyLjcyMyAyLjcxNyAyLjEyNS42MDEgMS40MDMuOTYxIDMuMTk2IDEuMDgyIDUuMzc3LjExOCAyLjUyNC0uMzc2IDQuNjEzLTEuNTAyIDYuMjU5LTEuMTExIDEuNjUtMi4zODcgMi41MDctMy44MjkgMi41OGwtMzQuNTM1IDEuNzMyLTI5Ljk1Ni0xLjc1Yy0xLjgzMi0uMjEtMy4yNDMtLjQyMS00LjI1LS42MzZhMTIxLjg2NSAxMjEuODY1IDAgMCAwLTMuMi0uNjI5IDc4LjEwNyA3OC4xMDcgMCAwIDAtNC4yOTItLjYzNGMtMS43NDItLjIxNC00LjI1LS40NjctNy41MjMtLjc1My0xLjQ1Ni0uMTU0LTIuNTk3LS41My0zLjQwOC0xLjEzMS0uODExLS42LTEuNDI3LTEuMzIzLTEuODMyLTIuMTcxYTguMjcxIDguMjcxIDAgMCAxLS43NjYtMi42NzggMzYuNDQ4IDM2LjQ
Легковесная реактивная библиотека данных для JavaScript-приложений
Управляйте управлением данными вашего приложения с помощью масштабируемых шаблонов для повышения производительности разработчика.
- ⚡️ Преданность лучшей производительности
- 🌲 Стремление к максимальной сжатости
- 🚀 Поддержка SSR
- 🔜 Поддержка Typescript
- 🐹 Создано с любовью компанией Ember
- ⚛️ Поддерживает любые API:
GraphQLJSON:APIRESTtRPC...специфические или смешанные
📖 На этой странице
Обзор
EmberData — это легковесная реактивная библиотека данных для JavaScript-приложений, предоставляющая композируемые примитивы для упорядочивания потоков запросов/изменений/просмотра, управления сетью и кешем и сокращения данных для представления.
🪜 Архитектура
Ядром EmberData является Store, которое координирует взаимодействие между вашим приложением, Cache, и источниками данных (такими как ваш API или локальный уровень персистенции). При необходимости Магазин можно настроить для гидратации данных ответа в богатые классы представления.
EmberData ориентировано как на ресурсы, так и на документы при кэшировании, запросе и представлении данных. Конфигурация и использование вашего приложения определяют, что важно и когда.
Store является **координатором**. При использовании Store вы настраиваете, какой использовать кэш, как данные кэша должны быть представлены в пользовательском интерфейсе и где искать запрошенные данные, если они недоступны в кэше.
Эта координация обрабатывается независимо от характера выпущенных запросов и формата обрабатываемых данных. Такой подход обеспечивает приложениям широкую гибкость в настройке EmberData в соответствии с их потребностями. Это делает EmberData мощным решением для приложений любого размера и сложности.
EmberData предназначен для масштабирования, с религиозным фокусом на производительности и размере ресурсов, чтобы сохранить небольшой, но быстрый размер, при этом способный обрабатывать большие сложные API в крупных приложениях на основе данных без дополнительного кода и без дополнительной сложности приложения. Его цель — предотвратить написание приложением кода для управления данными, которое трудно поддерживать и понимать.
Мощь EmberData не исходит из конкретных функций, форматов данных или соответствия определенным спецификациям API, таким как JSON:API trpc или GraphQL, а из прочных соглашений относительно запроса и изменения данных, разработанных за десятилетия опыта повышения производительности разработчиков.
Базовая установка
Установите с помощью вашего менеджера пакетов JavaScript. Например, с помощью pnpm
pnpm add ember-data
ember-data устанавливается по умолчанию для новых приложений, сгенерированных с помощью ember-cli. Вы можете проверить установленную версию, посмотрев в поле devDependencies файла вашего проекта package.json.
Если вы сгенерировали новое приложение Ember с помощью ember-cli, но не хотите использовать ember-data, удалите ember-data из файла вашего проекта package.json и выполните команду установки вашего менеджера пакетов, чтобы обновить файл блокировки.
Расширенная установка
EmberData организован в примитивы, которые соединяются через публичные API.
- @ember-data/store является ядром и обрабатывает координацию
-
@ember-data/record-data — это кэш ресурсов для данных в формате JSON:API. Он интегрируется с магазином через хук
createRecordDataFor -
@ember-data/model — это уровень представления, он интегрируется с магазином через хуки
instantiateRecordиteardownRecord. - @ember-data/adapter предоставляет различные интеграции API сети для API, построенных на основе конкретных соглашений REST или JSON:API.
-
@ember-data/serializer работает с
@ember-data/adapterдля нормализации и сериализации данных из и в формат API в форматJSON:API, понятный@ember-data/record-data. -
@ember-data/debug предоставляет поддержку отладки для
ember-inspector. - ember-data — это «мета»-пакет, который объединяет все эти пакеты для удобства.
Пакеты взаимодействуют друг с другом через хорошо определенные границы публичных API. Ядром библиотеки является магазин, предоставляемый @ember-data/store, а каждый из других библиотек подключается к магазину при установке. Поскольку эти пакеты взаимодействуют через полностью публичные API, другие библиотеки или приложения могут предоставить свои собственные реализации. Например, ember-m3 — это часто используемая реализация представления и кэша, подходящая для сложных объектов и графиков ресурсов.
Настройка
Удаление устаревших элементов
EmberData позволяет пользователям включить и удалить код, предназначенный для поддержки устаревших функций.
Если ваше приложение устранило все устаревшие элементы в определенной версии, вы можете указать эту версию как версию «совместимости», чтобы удалить из приложения код, поддерживающий устаревшие функции.
let app = new EmberApp(defaults, {
emberData: {
compatWith: '4.8',
},
}); Полифил для randomUUID
EmberData по умолчанию использует UUID V4, чтобы генерировать идентификаторы для новых данных, созданных на клиенте. Генерация идентификаторов настраивается, но мы также для удобства используем полифил для необходимой функции, если ваша поддержка браузера или среда развертывания этого требуют. Для активации этого полифила:
let app = new EmberApp(defaults, {
'@embroider/macros': {
setConfig: {
'@ember-data/store': {
polyfillUUID: true
},
},
},
}); Удаление поддержки инспектора в продакшене
Если вы не хотите включать поддержку инспектора в свое приложение в продакшене, вы можете указать, что вся поддержка должна быть удалена из сборки.
let app = new EmberApp(defaults, {
emberData: {
includeDataAdapterInProduction: false
}
}); Отладка
Многие части внутренних компонентов содержат полезные инструменты логирования, которые можно активировать во время сборки. Эти инструменты всегда удаляются из продакшен-сборок или из сборок, которые не активировали их явно. Для активации установите соответствующий флаг в true.
let app = new EmberApp(defaults, {
emberData: {
debug: {
LOG_PAYLOADS: false, // data store received to update cache with
LOG_OPERATIONS: false, // updates to cache remote state
LOG_MUTATIONS: false, // updates to cache local state
LOG_NOTIFICATIONS: false,
LOG_REQUEST_STATUS: false,
LOG_IDENTIFIERS: false,
LOG_GRAPH: false,
LOG_INSTANCE_CACHE: false,
}
}
});
© 2022 Yehuda Katz, Tom Dale and Ember.js contributors
Licensed under the MIT License.
https://api.emberjs.com/ember-data/4.9/