WARNING: THIS SITE IS A MIRROR OF GITHUB.COM / IT CANNOT LOGIN OR REGISTER ACCOUNTS / THE CONTENTS ARE PROVIDED AS-IS / THIS SITE ASSUMES NO RESPONSIBILITY FOR ANY DISPLAYED CONTENT OR LINKS / IF YOU FOUND SOMETHING MAY NOT GOOD FOR EVERYONE, CONTACT ADMIN AT ilovescratch@foxmail.com
Skip to content

Commit 00df18f

Browse files
authored
Merge pull request #87 from AlchemyCMS/build-es-module
Build .mjs (ES Modules) as well
2 parents 974a682 + bff068f commit 00df18f

File tree

8 files changed

+226
-84
lines changed

8 files changed

+226
-84
lines changed

.github/workflows/lint.yml

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -9,6 +9,8 @@ concurrency:
99
jobs:
1010
Standard:
1111
runs-on: ubuntu-latest
12+
env:
13+
ALCHEMY_BRANCH: 7.3-stable
1214
steps:
1315
- name: Checkout code
1416
uses: actions/checkout@v4

app/controllers/alchemy/json_api/base_controller.rb

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -26,7 +26,7 @@ def log_error(exception)
2626
logger = Rails.logger
2727
return unless logger
2828

29-
message = +"\n#{exception.class} (#{exception.message}):\n"
29+
message = "\n#{exception.class} (#{exception.message}):\n"
3030
message << exception.annotated_source_code.to_s if exception.respond_to?(:annotated_source_code)
3131
message << " " << exception.backtrace.join("\n ")
3232
logger.fatal("#{message}\n\n")

dist/alchemy-json_api.js

Lines changed: 30 additions & 48 deletions
Original file line numberDiff line numberDiff line change
@@ -9,115 +9,97 @@ function _interopDefaultLegacy (e) { return e && typeof e === 'object' && 'defau
99
var structuredClone__default = /*#__PURE__*/_interopDefaultLegacy(structuredClone);
1010

1111
function deserialize(originalResponse) {
12-
var response = structuredClone__default["default"](originalResponse);
13-
14-
var included = response.included || [];
15-
12+
const response = structuredClone__default["default"](originalResponse);
13+
const included = response.included || [];
1614
if (Array.isArray(response.data)) {
17-
return response.data.map(function (data) {
15+
return response.data.map(data => {
1816
return parseJsonApiSimpleResourceData(data, included, false);
1917
});
2018
} else {
2119
return parseJsonApiSimpleResourceData(response.data, included, false);
2220
}
2321
}
24-
2522
function parseJsonApiSimpleResourceData(data, included, useCache, options) {
2623
if (!included.cached) {
2724
included.cached = {};
2825
}
29-
3026
if (!(data.type in included.cached)) {
3127
included.cached[data.type] = {};
3228
}
33-
3429
if (useCache && data.id in included.cached[data.type]) {
3530
return included.cached[data.type][data.id];
3631
}
37-
38-
var attributes = data.attributes || {};
39-
var resource = attributes;
32+
const attributes = data.attributes || {};
33+
const resource = attributes;
4034
resource.id = data.id;
4135
included.cached[data.type][data.id] = resource;
42-
4336
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-
37+
for (const relationName of Object.keys(data.relationships)) {
38+
const relationRef = data.relationships[relationName];
4839
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-
})();
40+
const items = [];
41+
relationRef.data.forEach(relationData => {
42+
const item = findJsonApiIncluded(included, relationData.type, relationData.id);
43+
items.push(item);
44+
});
45+
resource[relationName] = items;
5746
} else if (relationRef && relationRef.data) {
5847
resource[relationName] = findJsonApiIncluded(included, relationRef.data.type, relationRef.data.id);
5948
} else {
6049
resource[relationName] = null;
6150
}
6251
}
6352
}
64-
6553
return resource;
6654
}
67-
6855
function findJsonApiIncluded(included, type, id, options) {
69-
var found = null;
70-
included.forEach(function (item) {
56+
let found = null;
57+
included.forEach(item => {
7158
if (item.type === type && item.id === id) {
7259
found = parseJsonApiSimpleResourceData(item, included, true);
7360
}
7461
});
75-
7662
if (!found) {
7763
found = {
78-
id: id
64+
id
7965
};
8066
}
81-
8267
return found;
8368
}
8469

70+
// Recursively filters all deprecated elements and essences from collection
8571
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) {
72+
const els = [];
73+
elements.forEach(element => {
74+
if (element.nested_elements?.length > 0) {
9175
element.nested_elements = filterDeprecatedElements(element.nested_elements);
9276
}
93-
94-
if (((_element$nestedElemen = element.nestedElements) === null || _element$nestedElemen === void 0 ? void 0 : _element$nestedElemen.length) > 0) {
77+
if (element.nestedElements?.length > 0) {
9578
element.nestedElements = filterDeprecatedElements(element.nestedElements);
9679
}
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) {
80+
if (element.essences?.length > 0) {
81+
element.essences = element.essences.filter(essence => {
10082
return !essence.deprecated;
10183
});
10284
}
103-
10485
if (!element.deprecated) {
10586
els.push(element);
10687
}
10788
});
10889
return els;
109-
} // Returns deserialized page without deprecated content
110-
90+
}
11191

92+
// Returns deserialized page without deprecated content
11293
function deserializePage(pageData) {
113-
var page = deserialize(pageData);
94+
const page = deserialize(pageData);
11495
page.elements = filterDeprecatedElements(page.elements);
11596
return page;
116-
} // Returns deserialized pages without deprecated content
97+
}
11798

99+
// Returns deserialized pages without deprecated content
118100
function deserializePages(pagesData) {
119-
var pages = deserialize(pagesData);
120-
pages.forEach(function (page) {
101+
const pages = deserialize(pagesData);
102+
pages.forEach(page => {
121103
page.elements = filterDeprecatedElements(page.elements);
122104
});
123105
return pages;

dist/alchemy-json_api.mjs

Lines changed: 100 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -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 };

dist/deserialize.js

Lines changed: 16 additions & 31 deletions
Original file line numberDiff line numberDiff line change
@@ -9,76 +9,61 @@ function _interopDefaultLegacy (e) { return e && typeof e === 'object' && 'defau
99
var structuredClone__default = /*#__PURE__*/_interopDefaultLegacy(structuredClone);
1010

1111
function deserialize(originalResponse) {
12-
var response = structuredClone__default["default"](originalResponse);
13-
14-
var included = response.included || [];
15-
12+
const response = structuredClone__default["default"](originalResponse);
13+
const included = response.included || [];
1614
if (Array.isArray(response.data)) {
17-
return response.data.map(function (data) {
15+
return response.data.map(data => {
1816
return parseJsonApiSimpleResourceData(data, included, false);
1917
});
2018
} else {
2119
return parseJsonApiSimpleResourceData(response.data, included, false);
2220
}
2321
}
24-
2522
function parseJsonApiSimpleResourceData(data, included, useCache, options) {
2623
if (!included.cached) {
2724
included.cached = {};
2825
}
29-
3026
if (!(data.type in included.cached)) {
3127
included.cached[data.type] = {};
3228
}
33-
3429
if (useCache && data.id in included.cached[data.type]) {
3530
return included.cached[data.type][data.id];
3631
}
37-
38-
var attributes = data.attributes || {};
39-
var resource = attributes;
32+
const attributes = data.attributes || {};
33+
const resource = attributes;
4034
resource.id = data.id;
4135
included.cached[data.type][data.id] = resource;
42-
4336
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-
37+
for (const relationName of Object.keys(data.relationships)) {
38+
const relationRef = data.relationships[relationName];
4839
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-
})();
40+
const items = [];
41+
relationRef.data.forEach(relationData => {
42+
const item = findJsonApiIncluded(included, relationData.type, relationData.id);
43+
items.push(item);
44+
});
45+
resource[relationName] = items;
5746
} else if (relationRef && relationRef.data) {
5847
resource[relationName] = findJsonApiIncluded(included, relationRef.data.type, relationRef.data.id);
5948
} else {
6049
resource[relationName] = null;
6150
}
6251
}
6352
}
64-
6553
return resource;
6654
}
67-
6855
function findJsonApiIncluded(included, type, id, options) {
69-
var found = null;
70-
included.forEach(function (item) {
56+
let found = null;
57+
included.forEach(item => {
7158
if (item.type === type && item.id === id) {
7259
found = parseJsonApiSimpleResourceData(item, included, true);
7360
}
7461
});
75-
7662
if (!found) {
7763
found = {
78-
id: id
64+
id
7965
};
8066
}
81-
8267
return found;
8368
}
8469

0 commit comments

Comments
 (0)