-
-
Notifications
You must be signed in to change notification settings - Fork 111
Expand file tree
/
Copy pathember-data-prerender.js
More file actions
67 lines (58 loc) · 1.84 KB
/
ember-data-prerender.js
File metadata and controls
67 lines (58 loc) · 1.84 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
import { dasherize } from '@ember/string';
export function initialize(applicationInstance) {
window.__emberApiDocs = window.__emberApiDocs ?? applicationInstance;
let store = applicationInstance.lookup('service:store');
let shoebox = applicationInstance.lookup('service:shoebox');
const isPrerendering =
applicationInstance.lookup('service:prerender').isPrerendering;
if (!isPrerendering) {
if (!shoebox) {
return;
}
let dump = shoebox.retrieve('ember-data-store');
if (!dump) {
return;
}
store.pushPayload(dump.records);
return;
}
shoebox?.put('ember-data-store', {
get records() {
const modelNames = Object.keys(store._modelFactoryCache);
return modelNames
.map((name) => {
return store.peekAll(name).toArray();
})
.reduce((a, b) => a.concat(b), [])
.filter((record) => record.get('isLoaded') && !record.get('isNew'))
.map((record) => {
const serializedRecord = record.serialize({ includeId: true });
record.eachRelationship((name, meta) => {
const link = record[meta.kind](name).link();
if (link) {
const dashName = dasherize(name);
serializedRecord.data.relationships =
serializedRecord.data.relationships || {};
serializedRecord.data.relationships[dashName] =
serializedRecord.data.relationships[dashName] || {};
serializedRecord.data.relationships[dashName].links = {
related: link,
};
}
});
return serializedRecord;
})
.reduce(
(a, b) => {
a.data.push(b.data);
return a;
},
{ data: [] },
);
},
});
}
export default {
name: 'ember-data-prerender',
initialize,
};