@alchemy_cms/json_api 1.1.1 → 1.3.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -1,59 +1,42 @@
1
1
  'use strict';
2
2
 
3
- Object.defineProperty(exports, '__esModule', { value: true });
4
-
5
3
  var structuredClone = require('@ungap/structured-clone');
6
4
 
7
- function _interopDefaultLegacy (e) { return e && typeof e === 'object' && 'default' in e ? e : { 'default': e }; }
8
-
9
- var structuredClone__default = /*#__PURE__*/_interopDefaultLegacy(structuredClone);
10
-
11
5
  function deserialize(originalResponse) {
12
- var response = structuredClone__default["default"](originalResponse);
13
-
14
- var included = response.included || [];
15
-
6
+ const response = structuredClone(originalResponse);
7
+ const included = response.included || [];
16
8
  if (Array.isArray(response.data)) {
17
- return response.data.map(function (data) {
9
+ return response.data.map(data => {
18
10
  return parseJsonApiSimpleResourceData(data, included, false);
19
11
  });
20
12
  } else {
21
13
  return parseJsonApiSimpleResourceData(response.data, included, false);
22
14
  }
23
15
  }
24
-
25
16
  function parseJsonApiSimpleResourceData(data, included, useCache, options) {
26
17
  if (!included.cached) {
27
18
  included.cached = {};
28
19
  }
29
-
30
20
  if (!(data.type in included.cached)) {
31
21
  included.cached[data.type] = {};
32
22
  }
33
-
34
23
  if (useCache && data.id in included.cached[data.type]) {
35
24
  return included.cached[data.type][data.id];
36
25
  }
37
-
38
- var attributes = data.attributes || {};
39
- var resource = attributes;
26
+ const attributes = data.attributes || {};
27
+ const resource = attributes;
40
28
  resource.id = data.id;
41
29
  included.cached[data.type][data.id] = resource;
42
-
43
30
  if (data.relationships) {
44
- for (var _i = 0, _Object$keys = Object.keys(data.relationships); _i < _Object$keys.length; _i++) {
45
- var relationName = _Object$keys[_i];
46
- var relationRef = data.relationships[relationName];
47
-
31
+ for (const relationName of Object.keys(data.relationships)) {
32
+ const relationRef = data.relationships[relationName];
48
33
  if (Array.isArray(relationRef.data)) {
49
- (function () {
50
- var items = [];
51
- relationRef.data.forEach(function (relationData) {
52
- var item = findJsonApiIncluded(included, relationData.type, relationData.id);
53
- items.push(item);
54
- });
55
- resource[relationName] = items;
56
- })();
34
+ const items = [];
35
+ relationRef.data.forEach(relationData => {
36
+ const item = findJsonApiIncluded(included, relationData.type, relationData.id);
37
+ items.push(item);
38
+ });
39
+ resource[relationName] = items;
57
40
  } else if (relationRef && relationRef.data) {
58
41
  resource[relationName] = findJsonApiIncluded(included, relationRef.data.type, relationRef.data.id);
59
42
  } else {
@@ -61,63 +44,56 @@ function parseJsonApiSimpleResourceData(data, included, useCache, options) {
61
44
  }
62
45
  }
63
46
  }
64
-
65
47
  return resource;
66
48
  }
67
-
68
49
  function findJsonApiIncluded(included, type, id, options) {
69
- var found = null;
70
- included.forEach(function (item) {
50
+ let found = null;
51
+ included.forEach(item => {
71
52
  if (item.type === type && item.id === id) {
72
53
  found = parseJsonApiSimpleResourceData(item, included, true);
73
54
  }
74
55
  });
75
-
76
56
  if (!found) {
77
57
  found = {
78
- id: id
58
+ id
79
59
  };
80
60
  }
81
-
82
61
  return found;
83
62
  }
84
63
 
64
+ // Recursively filters all deprecated elements and essences from collection
85
65
  function filterDeprecatedElements(elements) {
86
- var els = [];
87
- elements.forEach(function (element) {
88
- var _element$nested_eleme, _element$nestedElemen, _element$essences;
89
-
90
- if (((_element$nested_eleme = element.nested_elements) === null || _element$nested_eleme === void 0 ? void 0 : _element$nested_eleme.length) > 0) {
66
+ const els = [];
67
+ elements.forEach(element => {
68
+ if (element.nested_elements?.length > 0) {
91
69
  element.nested_elements = filterDeprecatedElements(element.nested_elements);
92
70
  }
93
-
94
- if (((_element$nestedElemen = element.nestedElements) === null || _element$nestedElemen === void 0 ? void 0 : _element$nestedElemen.length) > 0) {
71
+ if (element.nestedElements?.length > 0) {
95
72
  element.nestedElements = filterDeprecatedElements(element.nestedElements);
96
73
  }
97
-
98
- if (((_element$essences = element.essences) === null || _element$essences === void 0 ? void 0 : _element$essences.length) > 0) {
99
- element.essences = element.essences.filter(function (essence) {
74
+ if (element.essences?.length > 0) {
75
+ element.essences = element.essences.filter(essence => {
100
76
  return !essence.deprecated;
101
77
  });
102
78
  }
103
-
104
79
  if (!element.deprecated) {
105
80
  els.push(element);
106
81
  }
107
82
  });
108
83
  return els;
109
- } // Returns deserialized page without deprecated content
110
-
84
+ }
111
85
 
86
+ // Returns deserialized page without deprecated content
112
87
  function deserializePage(pageData) {
113
- var page = deserialize(pageData);
88
+ const page = deserialize(pageData);
114
89
  page.elements = filterDeprecatedElements(page.elements);
115
90
  return page;
116
- } // Returns deserialized pages without deprecated content
91
+ }
117
92
 
93
+ // Returns deserialized pages without deprecated content
118
94
  function deserializePages(pagesData) {
119
- var pages = deserialize(pagesData);
120
- pages.forEach(function (page) {
95
+ const pages = deserialize(pagesData);
96
+ pages.forEach(page => {
121
97
  page.elements = filterDeprecatedElements(page.elements);
122
98
  });
123
99
  return pages;
@@ -0,0 +1,100 @@
1
+ import structuredClone from '@ungap/structured-clone';
2
+
3
+ function deserialize(originalResponse) {
4
+ const response = structuredClone(originalResponse);
5
+ const included = response.included || [];
6
+ if (Array.isArray(response.data)) {
7
+ return response.data.map(data => {
8
+ return parseJsonApiSimpleResourceData(data, included, false);
9
+ });
10
+ } else {
11
+ return parseJsonApiSimpleResourceData(response.data, included, false);
12
+ }
13
+ }
14
+ function parseJsonApiSimpleResourceData(data, included, useCache, options) {
15
+ if (!included.cached) {
16
+ included.cached = {};
17
+ }
18
+ if (!(data.type in included.cached)) {
19
+ included.cached[data.type] = {};
20
+ }
21
+ if (useCache && data.id in included.cached[data.type]) {
22
+ return included.cached[data.type][data.id];
23
+ }
24
+ const attributes = data.attributes || {};
25
+ const resource = attributes;
26
+ resource.id = data.id;
27
+ included.cached[data.type][data.id] = resource;
28
+ if (data.relationships) {
29
+ for (const relationName of Object.keys(data.relationships)) {
30
+ const relationRef = data.relationships[relationName];
31
+ if (Array.isArray(relationRef.data)) {
32
+ const items = [];
33
+ relationRef.data.forEach(relationData => {
34
+ const item = findJsonApiIncluded(included, relationData.type, relationData.id);
35
+ items.push(item);
36
+ });
37
+ resource[relationName] = items;
38
+ } else if (relationRef && relationRef.data) {
39
+ resource[relationName] = findJsonApiIncluded(included, relationRef.data.type, relationRef.data.id);
40
+ } else {
41
+ resource[relationName] = null;
42
+ }
43
+ }
44
+ }
45
+ return resource;
46
+ }
47
+ function findJsonApiIncluded(included, type, id, options) {
48
+ let found = null;
49
+ included.forEach(item => {
50
+ if (item.type === type && item.id === id) {
51
+ found = parseJsonApiSimpleResourceData(item, included, true);
52
+ }
53
+ });
54
+ if (!found) {
55
+ found = {
56
+ id
57
+ };
58
+ }
59
+ return found;
60
+ }
61
+
62
+ // Recursively filters all deprecated elements and essences from collection
63
+ function filterDeprecatedElements(elements) {
64
+ const els = [];
65
+ elements.forEach(element => {
66
+ if (element.nested_elements?.length > 0) {
67
+ element.nested_elements = filterDeprecatedElements(element.nested_elements);
68
+ }
69
+ if (element.nestedElements?.length > 0) {
70
+ element.nestedElements = filterDeprecatedElements(element.nestedElements);
71
+ }
72
+ if (element.essences?.length > 0) {
73
+ element.essences = element.essences.filter(essence => {
74
+ return !essence.deprecated;
75
+ });
76
+ }
77
+ if (!element.deprecated) {
78
+ els.push(element);
79
+ }
80
+ });
81
+ return els;
82
+ }
83
+
84
+ // Returns deserialized page without deprecated content
85
+ function deserializePage(pageData) {
86
+ const page = deserialize(pageData);
87
+ page.elements = filterDeprecatedElements(page.elements);
88
+ return page;
89
+ }
90
+
91
+ // Returns deserialized pages without deprecated content
92
+ function deserializePages(pagesData) {
93
+ const pages = deserialize(pagesData);
94
+ pages.forEach(page => {
95
+ page.elements = filterDeprecatedElements(page.elements);
96
+ });
97
+ return pages;
98
+ }
99
+
100
+ export { deserialize, deserializePage, deserializePages };
@@ -1,59 +1,42 @@
1
1
  'use strict';
2
2
 
3
- Object.defineProperty(exports, '__esModule', { value: true });
4
-
5
3
  var structuredClone = require('@ungap/structured-clone');
6
4
 
7
- function _interopDefaultLegacy (e) { return e && typeof e === 'object' && 'default' in e ? e : { 'default': e }; }
8
-
9
- var structuredClone__default = /*#__PURE__*/_interopDefaultLegacy(structuredClone);
10
-
11
5
  function deserialize(originalResponse) {
12
- var response = structuredClone__default["default"](originalResponse);
13
-
14
- var included = response.included || [];
15
-
6
+ const response = structuredClone(originalResponse);
7
+ const included = response.included || [];
16
8
  if (Array.isArray(response.data)) {
17
- return response.data.map(function (data) {
9
+ return response.data.map(data => {
18
10
  return parseJsonApiSimpleResourceData(data, included, false);
19
11
  });
20
12
  } else {
21
13
  return parseJsonApiSimpleResourceData(response.data, included, false);
22
14
  }
23
15
  }
24
-
25
16
  function parseJsonApiSimpleResourceData(data, included, useCache, options) {
26
17
  if (!included.cached) {
27
18
  included.cached = {};
28
19
  }
29
-
30
20
  if (!(data.type in included.cached)) {
31
21
  included.cached[data.type] = {};
32
22
  }
33
-
34
23
  if (useCache && data.id in included.cached[data.type]) {
35
24
  return included.cached[data.type][data.id];
36
25
  }
37
-
38
- var attributes = data.attributes || {};
39
- var resource = attributes;
26
+ const attributes = data.attributes || {};
27
+ const resource = attributes;
40
28
  resource.id = data.id;
41
29
  included.cached[data.type][data.id] = resource;
42
-
43
30
  if (data.relationships) {
44
- for (var _i = 0, _Object$keys = Object.keys(data.relationships); _i < _Object$keys.length; _i++) {
45
- var relationName = _Object$keys[_i];
46
- var relationRef = data.relationships[relationName];
47
-
31
+ for (const relationName of Object.keys(data.relationships)) {
32
+ const relationRef = data.relationships[relationName];
48
33
  if (Array.isArray(relationRef.data)) {
49
- (function () {
50
- var items = [];
51
- relationRef.data.forEach(function (relationData) {
52
- var item = findJsonApiIncluded(included, relationData.type, relationData.id);
53
- items.push(item);
54
- });
55
- resource[relationName] = items;
56
- })();
34
+ const items = [];
35
+ relationRef.data.forEach(relationData => {
36
+ const item = findJsonApiIncluded(included, relationData.type, relationData.id);
37
+ items.push(item);
38
+ });
39
+ resource[relationName] = items;
57
40
  } else if (relationRef && relationRef.data) {
58
41
  resource[relationName] = findJsonApiIncluded(included, relationRef.data.type, relationRef.data.id);
59
42
  } else {
@@ -61,24 +44,20 @@ function parseJsonApiSimpleResourceData(data, included, useCache, options) {
61
44
  }
62
45
  }
63
46
  }
64
-
65
47
  return resource;
66
48
  }
67
-
68
49
  function findJsonApiIncluded(included, type, id, options) {
69
- var found = null;
70
- included.forEach(function (item) {
50
+ let found = null;
51
+ included.forEach(item => {
71
52
  if (item.type === type && item.id === id) {
72
53
  found = parseJsonApiSimpleResourceData(item, included, true);
73
54
  }
74
55
  });
75
-
76
56
  if (!found) {
77
57
  found = {
78
- id: id
58
+ id
79
59
  };
80
60
  }
81
-
82
61
  return found;
83
62
  }
84
63
 
@@ -0,0 +1,62 @@
1
+ import structuredClone from '@ungap/structured-clone';
2
+
3
+ function deserialize(originalResponse) {
4
+ const response = structuredClone(originalResponse);
5
+ const included = response.included || [];
6
+ if (Array.isArray(response.data)) {
7
+ return response.data.map(data => {
8
+ return parseJsonApiSimpleResourceData(data, included, false);
9
+ });
10
+ } else {
11
+ return parseJsonApiSimpleResourceData(response.data, included, false);
12
+ }
13
+ }
14
+ function parseJsonApiSimpleResourceData(data, included, useCache, options) {
15
+ if (!included.cached) {
16
+ included.cached = {};
17
+ }
18
+ if (!(data.type in included.cached)) {
19
+ included.cached[data.type] = {};
20
+ }
21
+ if (useCache && data.id in included.cached[data.type]) {
22
+ return included.cached[data.type][data.id];
23
+ }
24
+ const attributes = data.attributes || {};
25
+ const resource = attributes;
26
+ resource.id = data.id;
27
+ included.cached[data.type][data.id] = resource;
28
+ if (data.relationships) {
29
+ for (const relationName of Object.keys(data.relationships)) {
30
+ const relationRef = data.relationships[relationName];
31
+ if (Array.isArray(relationRef.data)) {
32
+ const items = [];
33
+ relationRef.data.forEach(relationData => {
34
+ const item = findJsonApiIncluded(included, relationData.type, relationData.id);
35
+ items.push(item);
36
+ });
37
+ resource[relationName] = items;
38
+ } else if (relationRef && relationRef.data) {
39
+ resource[relationName] = findJsonApiIncluded(included, relationRef.data.type, relationRef.data.id);
40
+ } else {
41
+ resource[relationName] = null;
42
+ }
43
+ }
44
+ }
45
+ return resource;
46
+ }
47
+ function findJsonApiIncluded(included, type, id, options) {
48
+ let found = null;
49
+ included.forEach(item => {
50
+ if (item.type === type && item.id === id) {
51
+ found = parseJsonApiSimpleResourceData(item, included, true);
52
+ }
53
+ });
54
+ if (!found) {
55
+ found = {
56
+ id
57
+ };
58
+ }
59
+ return found;
60
+ }
61
+
62
+ export { deserialize };
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@alchemy_cms/json_api",
3
- "version": "1.1.1",
3
+ "version": "1.3.0",
4
4
  "description": "JSON API deserializer for AlchemyCMS",
5
5
  "license": "BSD-3-Clause",
6
6
  "repository": {
@@ -18,6 +18,7 @@
18
18
  "Thomas von Deyen"
19
19
  ],
20
20
  "main": "dist/alchemy-json_api.js",
21
+ "module": "dist/alchemy-json_api.mjs",
21
22
  "files": [
22
23
  "dist"
23
24
  ],
@@ -27,14 +28,15 @@
27
28
  "devDependencies": {
28
29
  "@babel/core": "^7.19.0",
29
30
  "@babel/preset-env": "^7.19.0",
30
- "@rollup/plugin-babel": "^5.3.1",
31
+ "@rollup/plugin-babel": "^6.0.4",
31
32
  "babel-jest": "^29.0.2",
32
33
  "jest": "^29.0.2",
33
- "prettier": "^2.7.1",
34
- "rollup": "^2.79.0"
34
+ "prettier": "^3.3.3",
35
+ "rollup": "^4.24.4"
35
36
  },
36
37
  "scripts": {
37
38
  "build": "rollup --config",
39
+ "lint": "prettier --check 'src/**/*.js'",
38
40
  "test": "jest"
39
41
  },
40
42
  "browserslist": "> 0.25%, not dead"
package/CHANGELOG.md DELETED
@@ -1,294 +0,0 @@
1
- # Changelog
2
-
3
- ## [v1.1.1](https://github.com/AlchemyCMS/alchemy-json_api/tree/v1.1.1) (2022-09-16)
4
-
5
- [Full Changelog](https://github.com/AlchemyCMS/alchemy-json_api/compare/v1.1.0...v1.1.1)
6
-
7
- **Merged pull requests:**
8
-
9
- - JS: Fix browser build [\#66](https://github.com/AlchemyCMS/alchemy-json_api/pull/66) ([tvdeyen](https://github.com/tvdeyen))
10
-
11
- ## [v1.1.0](https://github.com/AlchemyCMS/alchemy-json_api/tree/v1.1.0) (2022-09-16)
12
-
13
- [Full Changelog](https://github.com/AlchemyCMS/alchemy-json_api/compare/v1.0.0...v1.1.0)
14
-
15
- **Merged pull requests:**
16
-
17
- - JS: Add support for deserializing camelCased attributes [\#65](https://github.com/AlchemyCMS/alchemy-json_api/pull/65) ([tvdeyen](https://github.com/tvdeyen))
18
-
19
- ## [v1.0.0](https://github.com/AlchemyCMS/alchemy-json_api/tree/v1.0.0) (2022-09-09)
20
-
21
- [Full Changelog](https://github.com/AlchemyCMS/alchemy-json_api/compare/v0.26.0...v1.0.0)
22
-
23
- **Merged pull requests:**
24
-
25
- - Allow key transforms [\#64](https://github.com/AlchemyCMS/alchemy-json_api/pull/64) ([tvdeyen](https://github.com/tvdeyen))
26
- - Add deserializer JS files [\#63](https://github.com/AlchemyCMS/alchemy-json_api/pull/63) ([tvdeyen](https://github.com/tvdeyen))
27
- - Add nodes API controller [\#61](https://github.com/AlchemyCMS/alchemy-json_api/pull/61) ([tvdeyen](https://github.com/tvdeyen))
28
- - Add a session store to dummy app [\#60](https://github.com/AlchemyCMS/alchemy-json_api/pull/60) ([tvdeyen](https://github.com/tvdeyen))
29
-
30
- ## [v0.26.0](https://github.com/AlchemyCMS/alchemy-json_api/tree/v0.26.0) (2022-05-10)
31
-
32
- [Full Changelog](https://github.com/AlchemyCMS/alchemy-json_api/compare/v0.25.0...v0.26.0)
33
-
34
- **Merged pull requests:**
35
-
36
- - Return image mime type with srcset responses [\#59](https://github.com/AlchemyCMS/alchemy-json_api/pull/59) ([tvdeyen](https://github.com/tvdeyen))
37
-
38
- ## [v0.25.0](https://github.com/AlchemyCMS/alchemy-json_api/tree/v0.25.0) (2021-11-15)
39
-
40
- [Full Changelog](https://github.com/AlchemyCMS/alchemy-json_api/compare/v0.24.0...v0.25.0)
41
-
42
- **Merged pull requests:**
43
-
44
- - Add support for disabled cache per page [\#58](https://github.com/AlchemyCMS/alchemy-json_api/pull/58) ([tvdeyen](https://github.com/tvdeyen))
45
-
46
- ## [v0.24.0](https://github.com/AlchemyCMS/alchemy-json_api/tree/v0.24.0) (2021-11-05)
47
-
48
- [Full Changelog](https://github.com/AlchemyCMS/alchemy-json_api/compare/v0.23.0...v0.24.0)
49
-
50
- **Merged pull requests:**
51
-
52
- - Add srcset support [\#57](https://github.com/AlchemyCMS/alchemy-json_api/pull/57) ([tvdeyen](https://github.com/tvdeyen))
53
-
54
- ## [v0.23.0](https://github.com/AlchemyCMS/alchemy-json_api/tree/v0.23.0) (2021-10-28)
55
-
56
- [Full Changelog](https://github.com/AlchemyCMS/alchemy-json_api/compare/v0.22.0...v0.23.0)
57
-
58
- **Merged pull requests:**
59
-
60
- - Do not throw error if filter returns empty result [\#56](https://github.com/AlchemyCMS/alchemy-json_api/pull/56) ([tvdeyen](https://github.com/tvdeyen))
61
-
62
- ## [v0.22.0](https://github.com/AlchemyCMS/alchemy-json_api/tree/v0.22.0) (2021-10-25)
63
-
64
- [Full Changelog](https://github.com/AlchemyCMS/alchemy-json_api/compare/v0.21.0...v0.22.0)
65
-
66
- **Merged pull requests:**
67
-
68
- - Add url\_path attribute to page serializer [\#55](https://github.com/AlchemyCMS/alchemy-json_api/pull/55) ([tvdeyen](https://github.com/tvdeyen))
69
-
70
- ## [v0.21.0](https://github.com/AlchemyCMS/alchemy-json_api/tree/v0.21.0) (2021-09-17)
71
-
72
- [Full Changelog](https://github.com/AlchemyCMS/alchemy-json_api/compare/v0.20.0...v0.21.0)
73
-
74
- **Merged pull requests:**
75
-
76
- - Add caching [\#54](https://github.com/AlchemyCMS/alchemy-json_api/pull/54) ([tvdeyen](https://github.com/tvdeyen))
77
- - Allow urlname as page filter [\#53](https://github.com/AlchemyCMS/alchemy-json_api/pull/53) ([tvdeyen](https://github.com/tvdeyen))
78
-
79
- ## [v0.20.0](https://github.com/AlchemyCMS/alchemy-json_api/tree/v0.20.0) (2021-07-07)
80
-
81
- [Full Changelog](https://github.com/AlchemyCMS/alchemy-json_api/compare/v0.15.0...v0.20.0)
82
-
83
- **Merged pull requests:**
84
-
85
- - More essence serializers [\#52](https://github.com/AlchemyCMS/alchemy-json_api/pull/52) ([tvdeyen](https://github.com/tvdeyen))
86
- - Add support for Alchemy Ingredients [\#51](https://github.com/AlchemyCMS/alchemy-json_api/pull/51) ([tvdeyen](https://github.com/tvdeyen))
87
-
88
- ## [v0.15.0](https://github.com/AlchemyCMS/alchemy-json_api/tree/v0.15.0) (2021-05-19)
89
-
90
- [Full Changelog](https://github.com/AlchemyCMS/alchemy-json_api/compare/v0.14.0...v0.15.0)
91
-
92
- **Merged pull requests:**
93
-
94
- - Return real image dimensions [\#50](https://github.com/AlchemyCMS/alchemy-json_api/pull/50) ([tvdeyen](https://github.com/tvdeyen))
95
-
96
- ## [v0.14.0](https://github.com/AlchemyCMS/alchemy-json_api/tree/v0.14.0) (2021-04-27)
97
-
98
- [Full Changelog](https://github.com/AlchemyCMS/alchemy-json_api/compare/v0.13.0...v0.14.0)
99
-
100
- **Merged pull requests:**
101
-
102
- - Add ancestors relationship to page serializer [\#49](https://github.com/AlchemyCMS/alchemy-json_api/pull/49) ([tvdeyen](https://github.com/tvdeyen))
103
- - Join to page version in PagesController [\#48](https://github.com/AlchemyCMS/alchemy-json_api/pull/48) ([mamhoff](https://github.com/mamhoff))
104
- - Serialize the new sanitized\_body column from Alchemy [\#47](https://github.com/AlchemyCMS/alchemy-json_api/pull/47) ([mamhoff](https://github.com/mamhoff))
105
- - Admin controller fixes [\#46](https://github.com/AlchemyCMS/alchemy-json_api/pull/46) ([tvdeyen](https://github.com/tvdeyen))
106
-
107
- ## [v0.13.0](https://github.com/AlchemyCMS/alchemy-json_api/tree/v0.13.0) (2021-03-05)
108
-
109
- [Full Changelog](https://github.com/AlchemyCMS/alchemy-json_api/compare/v0.12.2...v0.13.0)
110
-
111
- **Merged pull requests:**
112
-
113
- - Fix loading of alchemy factories [\#45](https://github.com/AlchemyCMS/alchemy-json_api/pull/45) ([tvdeyen](https://github.com/tvdeyen))
114
- - Add support for page versions [\#44](https://github.com/AlchemyCMS/alchemy-json_api/pull/44) ([tvdeyen](https://github.com/tvdeyen))
115
- - Preload legacy page URLs [\#43](https://github.com/AlchemyCMS/alchemy-json_api/pull/43) ([pelargir](https://github.com/pelargir))
116
- - Add legacy URLs to page serializer [\#42](https://github.com/AlchemyCMS/alchemy-json_api/pull/42) ([pelargir](https://github.com/pelargir))
117
- - Fix pagination related specs [\#41](https://github.com/AlchemyCMS/alchemy-json_api/pull/41) ([tvdeyen](https://github.com/tvdeyen))
118
- - Remove tests for trashed elements [\#40](https://github.com/AlchemyCMS/alchemy-json_api/pull/40) ([tvdeyen](https://github.com/tvdeyen))
119
- - Fix factory loading [\#39](https://github.com/AlchemyCMS/alchemy-json_api/pull/39) ([tvdeyen](https://github.com/tvdeyen))
120
-
121
- ## [v0.12.2](https://github.com/AlchemyCMS/alchemy-json_api/tree/v0.12.2) (2021-01-27)
122
-
123
- [Full Changelog](https://github.com/AlchemyCMS/alchemy-json_api/compare/v0.12.1...v0.12.2)
124
-
125
- **Merged pull requests:**
126
-
127
- - Add missing Alchemy::Logger include to Element [\#37](https://github.com/AlchemyCMS/alchemy-json_api/pull/37) ([pelargir](https://github.com/pelargir))
128
-
129
- ## [v0.12.1](https://github.com/AlchemyCMS/alchemy-json_api/tree/v0.12.1) (2021-01-26)
130
-
131
- [Full Changelog](https://github.com/AlchemyCMS/alchemy-json_api/compare/v0.12.0...v0.12.1)
132
-
133
- **Merged pull requests:**
134
-
135
- - Fix essence serializer RSpec behavior [\#36](https://github.com/AlchemyCMS/alchemy-json_api/pull/36) ([tvdeyen](https://github.com/tvdeyen))
136
-
137
- ## [v0.12.0](https://github.com/AlchemyCMS/alchemy-json_api/tree/v0.12.0) (2021-01-25)
138
-
139
- [Full Changelog](https://github.com/AlchemyCMS/alchemy-json_api/compare/v0.11.0...v0.12.0)
140
-
141
- **Merged pull requests:**
142
-
143
- - Eager load nodes children [\#34](https://github.com/AlchemyCMS/alchemy-json_api/pull/34) ([tvdeyen](https://github.com/tvdeyen))
144
- - Fixes element filtering for nested elements [\#33](https://github.com/AlchemyCMS/alchemy-json_api/pull/33) ([tvdeyen](https://github.com/tvdeyen))
145
-
146
- ## [v0.11.0](https://github.com/AlchemyCMS/alchemy-json_api/tree/v0.11.0) (2021-01-21)
147
-
148
- [Full Changelog](https://github.com/AlchemyCMS/alchemy-json_api/compare/v0.10.1...v0.11.0)
149
-
150
- **Merged pull requests:**
151
-
152
- - Remove admin features from serializers [\#32](https://github.com/AlchemyCMS/alchemy-json_api/pull/32) ([tvdeyen](https://github.com/tvdeyen))
153
- - Optimize elements loading [\#31](https://github.com/AlchemyCMS/alchemy-json_api/pull/31) ([tvdeyen](https://github.com/tvdeyen))
154
- - Add deprecated attribute to elements and contents [\#30](https://github.com/AlchemyCMS/alchemy-json_api/pull/30) ([tvdeyen](https://github.com/tvdeyen))
155
- - Revert removal of deprecated elements [\#29](https://github.com/AlchemyCMS/alchemy-json_api/pull/29) ([tvdeyen](https://github.com/tvdeyen))
156
-
157
- ## [v0.10.1](https://github.com/AlchemyCMS/alchemy-json_api/tree/v0.10.1) (2021-01-19)
158
-
159
- [Full Changelog](https://github.com/AlchemyCMS/alchemy-json_api/compare/v0.10.0...v0.10.1)
160
-
161
- **Merged pull requests:**
162
-
163
- - Remove deprecated elements from all element relations [\#28](https://github.com/AlchemyCMS/alchemy-json_api/pull/28) ([tvdeyen](https://github.com/tvdeyen))
164
-
165
- ## [v0.10.0](https://github.com/AlchemyCMS/alchemy-json_api/tree/v0.10.0) (2021-01-18)
166
-
167
- [Full Changelog](https://github.com/AlchemyCMS/alchemy-json_api/compare/v0.9.1...v0.10.0)
168
-
169
- **Merged pull requests:**
170
-
171
- - Test with all supported Alchemy versions [\#27](https://github.com/AlchemyCMS/alchemy-json_api/pull/27) ([tvdeyen](https://github.com/tvdeyen))
172
- - Do not include deprecated elements and essences [\#26](https://github.com/AlchemyCMS/alchemy-json_api/pull/26) ([tvdeyen](https://github.com/tvdeyen))
173
- - Allow Alchemy 6 [\#25](https://github.com/AlchemyCMS/alchemy-json_api/pull/25) ([tvdeyen](https://github.com/tvdeyen))
174
-
175
- ## [v0.9.1](https://github.com/AlchemyCMS/alchemy-json_api/tree/v0.9.1) (2020-12-09)
176
-
177
- [Full Changelog](https://github.com/AlchemyCMS/alchemy-json_api/compare/v0.9.0...v0.9.1)
178
-
179
- **Merged pull requests:**
180
-
181
- - Return all layoutpages regardless of publication status [\#24](https://github.com/AlchemyCMS/alchemy-json_api/pull/24) ([tvdeyen](https://github.com/tvdeyen))
182
-
183
- ## [v0.9.0](https://github.com/AlchemyCMS/alchemy-json_api/tree/v0.9.0) (2020-11-30)
184
-
185
- [Full Changelog](https://github.com/AlchemyCMS/alchemy-json_api/compare/v0.8.1...v0.9.0)
186
-
187
- **Closed issues:**
188
-
189
- - Use jsonapi-serializer instead of fast\_jsonapi [\#22](https://github.com/AlchemyCMS/alchemy-json_api/issues/22)
190
-
191
- **Merged pull requests:**
192
-
193
- - Switch from fast\_jsonapi to jsonapi-serializer [\#23](https://github.com/AlchemyCMS/alchemy-json_api/pull/23) ([tvdeyen](https://github.com/tvdeyen))
194
-
195
- ## [v0.8.1](https://github.com/AlchemyCMS/alchemy-json_api/tree/v0.8.1) (2020-11-17)
196
-
197
- [Full Changelog](https://github.com/AlchemyCMS/alchemy-json_api/compare/v0.8.0...v0.8.1)
198
-
199
- **Merged pull requests:**
200
-
201
- - Fix page base scope for anonymous users [\#20](https://github.com/AlchemyCMS/alchemy-json_api/pull/20) ([tvdeyen](https://github.com/tvdeyen))
202
-
203
- ## [v0.8.0](https://github.com/AlchemyCMS/alchemy-json_api/tree/v0.8.0) (2020-11-16)
204
-
205
- [Full Changelog](https://github.com/AlchemyCMS/alchemy-json_api/compare/v0.7.2...v0.8.0)
206
-
207
- **Merged pull requests:**
208
-
209
- - Add authorization [\#19](https://github.com/AlchemyCMS/alchemy-json_api/pull/19) ([tvdeyen](https://github.com/tvdeyen))
210
-
211
- ## [v0.7.2](https://github.com/AlchemyCMS/alchemy-json_api/tree/v0.7.2) (2020-11-16)
212
-
213
- [Full Changelog](https://github.com/AlchemyCMS/alchemy-json_api/compare/v0.7.1...v0.7.2)
214
-
215
- **Merged pull requests:**
216
-
217
- - Fully qualify the names of Serializer classes [\#18](https://github.com/AlchemyCMS/alchemy-json_api/pull/18) ([mamhoff](https://github.com/mamhoff))
218
-
219
- ## [v0.7.1](https://github.com/AlchemyCMS/alchemy-json_api/tree/v0.7.1) (2020-11-16)
220
-
221
- [Full Changelog](https://github.com/AlchemyCMS/alchemy-json_api/compare/v0.7.0...v0.7.1)
222
-
223
- **Merged pull requests:**
224
-
225
- - Specify Record Type and Serializer Class for all relations [\#17](https://github.com/AlchemyCMS/alchemy-json_api/pull/17) ([mamhoff](https://github.com/mamhoff))
226
-
227
- ## [v0.7.0](https://github.com/AlchemyCMS/alchemy-json_api/tree/v0.7.0) (2020-11-16)
228
-
229
- [Full Changelog](https://github.com/AlchemyCMS/alchemy-json_api/compare/v0.6.0...v0.7.0)
230
-
231
- **Merged pull requests:**
232
-
233
- - Log errors into standard out [\#16](https://github.com/AlchemyCMS/alchemy-json_api/pull/16) ([mamhoff](https://github.com/mamhoff))
234
-
235
- ## [v0.6.0](https://github.com/AlchemyCMS/alchemy-json_api/tree/v0.6.0) (2020-11-12)
236
-
237
- [Full Changelog](https://github.com/AlchemyCMS/alchemy-json_api/compare/v0.5.0...v0.6.0)
238
-
239
- **Merged pull requests:**
240
-
241
- - Revert "Only include errors mixin in production mode" [\#15](https://github.com/AlchemyCMS/alchemy-json_api/pull/15) ([tvdeyen](https://github.com/tvdeyen))
242
-
243
- ## [v0.5.0](https://github.com/AlchemyCMS/alchemy-json_api/tree/v0.5.0) (2020-11-06)
244
-
245
- [Full Changelog](https://github.com/AlchemyCMS/alchemy-json_api/compare/v0.4.0...v0.5.0)
246
-
247
- **Merged pull requests:**
248
-
249
- - Add fixed\_elements relationship to element serializer [\#14](https://github.com/AlchemyCMS/alchemy-json_api/pull/14) ([tvdeyen](https://github.com/tvdeyen))
250
- - Rename element\_type into name [\#13](https://github.com/AlchemyCMS/alchemy-json_api/pull/13) ([tvdeyen](https://github.com/tvdeyen))
251
- - Only include errors mixin in production mode [\#12](https://github.com/AlchemyCMS/alchemy-json_api/pull/12) ([tvdeyen](https://github.com/tvdeyen))
252
-
253
- ## [v0.4.0](https://github.com/AlchemyCMS/alchemy-json_api/tree/v0.4.0) (2020-10-28)
254
-
255
- [Full Changelog](https://github.com/AlchemyCMS/alchemy-json_api/compare/v0.3.0...v0.4.0)
256
-
257
- **Merged pull requests:**
258
-
259
- - Use full module paths in serializers [\#11](https://github.com/AlchemyCMS/alchemy-json_api/pull/11) ([tvdeyen](https://github.com/tvdeyen))
260
-
261
- ## [v0.3.0](https://github.com/AlchemyCMS/alchemy-json_api/tree/v0.3.0) (2020-10-28)
262
-
263
- [Full Changelog](https://github.com/AlchemyCMS/alchemy-json_api/compare/v0.2.0...v0.3.0)
264
-
265
- **Merged pull requests:**
266
-
267
- - Add EssencePageSerializer [\#10](https://github.com/AlchemyCMS/alchemy-json_api/pull/10) ([tvdeyen](https://github.com/tvdeyen))
268
- - Remove link\_helper [\#9](https://github.com/AlchemyCMS/alchemy-json_api/pull/9) ([tvdeyen](https://github.com/tvdeyen))
269
- - Expose essence serializer behavior [\#8](https://github.com/AlchemyCMS/alchemy-json_api/pull/8) ([tvdeyen](https://github.com/tvdeyen))
270
- - Add support for nested urlnames [\#7](https://github.com/AlchemyCMS/alchemy-json_api/pull/7) ([tvdeyen](https://github.com/tvdeyen))
271
-
272
- ## [v0.2.0](https://github.com/AlchemyCMS/alchemy-json_api/tree/v0.2.0) (2020-09-15)
273
-
274
- [Full Changelog](https://github.com/AlchemyCMS/alchemy-json_api/compare/v0.1.0...v0.2.0)
275
-
276
- **Merged pull requests:**
277
-
278
- - Fix specs, bump version [\#6](https://github.com/AlchemyCMS/alchemy-json_api/pull/6) ([mamhoff](https://github.com/mamhoff))
279
- - Add pagination to pages endpoint [\#5](https://github.com/AlchemyCMS/alchemy-json_api/pull/5) ([tvdeyen](https://github.com/tvdeyen))
280
-
281
- ## [v0.1.0](https://github.com/AlchemyCMS/alchemy-json_api/tree/v0.1.0) (2020-05-15)
282
-
283
- [Full Changelog](https://github.com/AlchemyCMS/alchemy-json_api/compare/f51e01b16ad44b372edbaf983b041b6b6ed383b6...v0.1.0)
284
-
285
- **Merged pull requests:**
286
-
287
- - Do not render trashed elements [\#4](https://github.com/AlchemyCMS/alchemy-json_api/pull/4) ([mamhoff](https://github.com/mamhoff))
288
- - Add Rufo and Rubocop [\#3](https://github.com/AlchemyCMS/alchemy-json_api/pull/3) ([mamhoff](https://github.com/mamhoff))
289
- - Add Layout Pages Controller [\#2](https://github.com/AlchemyCMS/alchemy-json_api/pull/2) ([mamhoff](https://github.com/mamhoff))
290
- - Add Language Serializer [\#1](https://github.com/AlchemyCMS/alchemy-json_api/pull/1) ([mamhoff](https://github.com/mamhoff))
291
-
292
-
293
-
294
- \* *This Changelog was automatically generated by [github_changelog_generator](https://github.com/github-changelog-generator/github-changelog-generator)*