@griddo/cx 11.7.6-rc.2 → 11.7.6

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.
Files changed (280) hide show
  1. package/README.md +226 -27
  2. package/build/adapters/gatsby/index.d.ts +4 -0
  3. package/build/adapters/gatsby/utils.d.ts +22 -0
  4. package/build/artifacts/index.d.ts +6 -0
  5. package/build/commands/end-render.d.ts +2 -0
  6. package/build/commands/move-assets.d.ts +1 -0
  7. package/build/commands/prepare-domains-render.d.ts +1 -0
  8. package/build/commands/reset-render.d.ts +2 -0
  9. package/build/commands/start-render.d.ts +2 -0
  10. package/build/commands/upload-search-content.d.ts +2 -0
  11. package/build/constants/endpoints.d.ts +19 -0
  12. package/build/constants/envs.d.ts +37 -0
  13. package/build/constants/index.d.ts +57 -0
  14. package/build/end-render.js +74 -0
  15. package/build/end-render.js.map +7 -0
  16. package/build/errors/errors-data.d.ts +22 -0
  17. package/build/errors/index.d.ts +15 -0
  18. package/build/index.d.ts +29 -0
  19. package/build/index.js +73 -0
  20. package/build/index.js.map +7 -0
  21. package/build/prepare-domains-render.js +73 -0
  22. package/build/prepare-domains-render.js.map +7 -0
  23. package/build/react/Favicon/index.d.ts +5 -0
  24. package/build/react/Favicon/utils.d.ts +9 -0
  25. package/build/react/GriddoIntegrations/index.d.ts +20 -0
  26. package/build/react/GriddoIntegrations/utils.d.ts +26 -0
  27. package/{react/index.tsx → build/react/index.d.ts} +0 -1
  28. package/build/react/index.js +3 -0
  29. package/build/registers/api.d.ts +9 -0
  30. package/build/registers/gatsby.d.ts +9 -0
  31. package/build/registers/index.d.ts +3 -0
  32. package/build/reset-render.js +74 -0
  33. package/build/reset-render.js.map +7 -0
  34. package/build/services/auth.d.ts +10 -0
  35. package/build/services/domains.d.ts +6 -0
  36. package/build/services/navigation.d.ts +50 -0
  37. package/build/services/reference-fields.d.ts +20 -0
  38. package/build/services/register.d.ts +36 -0
  39. package/build/services/robots.d.ts +19 -0
  40. package/build/services/settings.d.ts +4 -0
  41. package/build/services/sites.d.ts +29 -0
  42. package/build/services/store.d.ts +6 -0
  43. package/build/start-render.js +100 -0
  44. package/build/start-render.js.map +7 -0
  45. package/build/types/api.d.ts +142 -0
  46. package/build/types/global.d.ts +84 -0
  47. package/build/types/navigation.d.ts +28 -0
  48. package/build/types/pages.d.ts +144 -0
  49. package/build/types/sites.d.ts +57 -0
  50. package/build/types/templates.d.ts +8 -0
  51. package/build/upload-search-content.js +74 -0
  52. package/build/upload-search-content.js.map +7 -0
  53. package/build/utils/alerts.d.ts +3 -0
  54. package/build/utils/api.d.ts +23 -0
  55. package/build/utils/cache.d.ts +35 -0
  56. package/build/utils/core-utils.d.ts +107 -0
  57. package/build/utils/create-build-data.d.ts +8 -0
  58. package/build/utils/domains.d.ts +13 -0
  59. package/build/utils/folders.d.ts +53 -0
  60. package/build/utils/health-checks.d.ts +7 -0
  61. package/build/utils/images.d.ts +16 -0
  62. package/build/utils/instance.d.ts +21 -0
  63. package/build/utils/loggin.d.ts +51 -0
  64. package/build/utils/pages.d.ts +34 -0
  65. package/build/utils/render.d.ts +13 -0
  66. package/build/utils/searches.d.ts +15 -0
  67. package/build/utils/sites.d.ts +31 -0
  68. package/build/utils/store.d.ts +81 -0
  69. package/cx.config.d.ts +5 -0
  70. package/cx.config.js +36 -0
  71. package/exporter/adapters/gatsby/index.ts +147 -66
  72. package/exporter/adapters/gatsby/utils.ts +161 -0
  73. package/exporter/artifacts/README.md +34 -0
  74. package/exporter/artifacts/index.ts +33 -0
  75. package/exporter/build.sh +38 -4
  76. package/exporter/commands/end-render.ts +69 -73
  77. package/exporter/commands/move-assets.ts +11 -0
  78. package/exporter/commands/prepare-domains-render.ts +31 -144
  79. package/exporter/commands/reset-render.ts +1 -10
  80. package/exporter/commands/start-render.ts +44 -23
  81. package/exporter/commands/upload-search-content.ts +20 -194
  82. package/exporter/constants/envs.ts +55 -57
  83. package/exporter/constants/index.ts +129 -0
  84. package/exporter/{constants/errors.ts → errors/errors-data.ts} +14 -31
  85. package/exporter/{utils/errors.ts → errors/index.ts} +9 -10
  86. package/exporter/index.ts +82 -0
  87. package/{react → exporter/react}/Favicon/index.tsx +7 -1
  88. package/{react → exporter/react}/GriddoIntegrations/index.tsx +14 -6
  89. package/{react → exporter/react}/GriddoIntegrations/utils.ts +9 -4
  90. package/exporter/react/index.tsx +11 -0
  91. package/exporter/registers/api.ts +14 -0
  92. package/exporter/registers/gatsby.ts +14 -0
  93. package/exporter/registers/index.ts +4 -0
  94. package/exporter/services/auth.ts +6 -7
  95. package/exporter/services/domains.ts +16 -0
  96. package/exporter/services/navigation.ts +10 -4
  97. package/exporter/services/reference-fields.ts +23 -8
  98. package/exporter/services/register.ts +113 -0
  99. package/exporter/services/robots.ts +16 -9
  100. package/exporter/services/settings.ts +17 -0
  101. package/exporter/services/sites.ts +24 -35
  102. package/exporter/services/store.ts +78 -120
  103. package/exporter/types/api.ts +27 -24
  104. package/exporter/types/global.ts +10 -7
  105. package/exporter/types/navigation.ts +1 -1
  106. package/exporter/types/pages.ts +3 -2
  107. package/exporter/types/sites.ts +2 -1
  108. package/exporter/utils/alerts.ts +29 -0
  109. package/exporter/utils/api.ts +82 -46
  110. package/exporter/utils/cache.ts +62 -37
  111. package/exporter/utils/core-utils.ts +248 -129
  112. package/exporter/utils/create-build-data.ts +17 -0
  113. package/exporter/utils/domains.ts +7 -10
  114. package/exporter/utils/folders.ts +95 -187
  115. package/exporter/utils/health-checks.ts +64 -0
  116. package/exporter/utils/images.ts +6 -1
  117. package/exporter/utils/instance.ts +12 -9
  118. package/exporter/utils/loggin.ts +91 -32
  119. package/exporter/utils/pages.ts +88 -23
  120. package/exporter/utils/render.ts +48 -149
  121. package/exporter/utils/searches.ts +156 -0
  122. package/exporter/utils/sites.ts +90 -81
  123. package/exporter/utils/store.ts +180 -87
  124. package/gatsby-browser.tsx +58 -41
  125. package/gatsby-config.ts +12 -6
  126. package/gatsby-node.ts +77 -15
  127. package/gatsby-ssr.tsx +1 -2
  128. package/package.json +78 -36
  129. package/src/README.md +7 -0
  130. package/src/components/Head.tsx +46 -13
  131. package/src/components/template.tsx +30 -8
  132. package/src/gatsby-node-utils.ts +2 -91
  133. package/src/html.tsx +11 -2
  134. package/src/types.ts +5 -5
  135. package/start-render.js +7 -0
  136. package/tsconfig.json +3 -5
  137. package/build/adapters/gatsby/actions/clean.js +0 -10
  138. package/build/adapters/gatsby/actions/clean.js.map +0 -1
  139. package/build/adapters/gatsby/actions/close.js +0 -12
  140. package/build/adapters/gatsby/actions/close.js.map +0 -1
  141. package/build/adapters/gatsby/actions/data.js +0 -18
  142. package/build/adapters/gatsby/actions/data.js.map +0 -1
  143. package/build/adapters/gatsby/actions/healthCheck.js +0 -10
  144. package/build/adapters/gatsby/actions/healthCheck.js.map +0 -1
  145. package/build/adapters/gatsby/actions/init.js +0 -9
  146. package/build/adapters/gatsby/actions/init.js.map +0 -1
  147. package/build/adapters/gatsby/actions/meta.js +0 -14
  148. package/build/adapters/gatsby/actions/meta.js.map +0 -1
  149. package/build/adapters/gatsby/actions/prepare.js +0 -9
  150. package/build/adapters/gatsby/actions/prepare.js.map +0 -1
  151. package/build/adapters/gatsby/actions/relocation.js +0 -15
  152. package/build/adapters/gatsby/actions/relocation.js.map +0 -1
  153. package/build/adapters/gatsby/actions/restore.js +0 -26
  154. package/build/adapters/gatsby/actions/restore.js.map +0 -1
  155. package/build/adapters/gatsby/actions/ssg.js +0 -9
  156. package/build/adapters/gatsby/actions/ssg.js.map +0 -1
  157. package/build/adapters/gatsby/actions/sync.js +0 -51
  158. package/build/adapters/gatsby/actions/sync.js.map +0 -1
  159. package/build/adapters/gatsby/index.js +0 -78
  160. package/build/adapters/gatsby/index.js.map +0 -1
  161. package/build/adapters/gatsby/shared/context.js +0 -31
  162. package/build/adapters/gatsby/shared/context.js.map +0 -1
  163. package/build/adapters/gatsby/shared/diff-assets.js +0 -101
  164. package/build/adapters/gatsby/shared/diff-assets.js.map +0 -1
  165. package/build/adapters/gatsby/shared/extract-assets.js +0 -58
  166. package/build/adapters/gatsby/shared/extract-assets.js.map +0 -1
  167. package/build/adapters/gatsby/shared/gatsby-build.js +0 -49
  168. package/build/adapters/gatsby/shared/gatsby-build.js.map +0 -1
  169. package/build/adapters/gatsby/shared/sync-render.js +0 -212
  170. package/build/adapters/gatsby/shared/sync-render.js.map +0 -1
  171. package/build/adapters/gatsby/shared/types.js +0 -3
  172. package/build/adapters/gatsby/shared/types.js.map +0 -1
  173. package/build/commands/end-render.js +0 -88
  174. package/build/commands/end-render.js.map +0 -1
  175. package/build/commands/prepare-assets-directory.js +0 -32
  176. package/build/commands/prepare-assets-directory.js.map +0 -1
  177. package/build/commands/prepare-domains-render.js +0 -133
  178. package/build/commands/prepare-domains-render.js.map +0 -1
  179. package/build/commands/reset-render.js +0 -22
  180. package/build/commands/reset-render.js.map +0 -1
  181. package/build/commands/start-render.js +0 -45
  182. package/build/commands/start-render.js.map +0 -1
  183. package/build/commands/upload-search-content.js +0 -180
  184. package/build/commands/upload-search-content.js.map +0 -1
  185. package/build/constants/endpoints.js +0 -42
  186. package/build/constants/endpoints.js.map +0 -1
  187. package/build/constants/envs.js +0 -68
  188. package/build/constants/envs.js.map +0 -1
  189. package/build/constants/errors.js +0 -87
  190. package/build/constants/errors.js.map +0 -1
  191. package/build/services/auth.js +0 -40
  192. package/build/services/auth.js.map +0 -1
  193. package/build/services/db-class.js +0 -49
  194. package/build/services/db-class.js.map +0 -1
  195. package/build/services/db.js +0 -34
  196. package/build/services/db.js.map +0 -1
  197. package/build/services/navigation.js +0 -96
  198. package/build/services/navigation.js.map +0 -1
  199. package/build/services/reference-fields.js +0 -131
  200. package/build/services/reference-fields.js.map +0 -1
  201. package/build/services/robots.js +0 -60
  202. package/build/services/robots.js.map +0 -1
  203. package/build/services/sites.js +0 -109
  204. package/build/services/sites.js.map +0 -1
  205. package/build/services/store.js +0 -282
  206. package/build/services/store.js.map +0 -1
  207. package/build/types/api.js +0 -3
  208. package/build/types/api.js.map +0 -1
  209. package/build/types/global.js +0 -3
  210. package/build/types/global.js.map +0 -1
  211. package/build/types/navigation.js +0 -3
  212. package/build/types/navigation.js.map +0 -1
  213. package/build/types/pages.js +0 -3
  214. package/build/types/pages.js.map +0 -1
  215. package/build/types/render.js +0 -10
  216. package/build/types/render.js.map +0 -1
  217. package/build/types/sites.js +0 -3
  218. package/build/types/sites.js.map +0 -1
  219. package/build/types/templates.js +0 -3
  220. package/build/types/templates.js.map +0 -1
  221. package/build/utils/api.js +0 -161
  222. package/build/utils/api.js.map +0 -1
  223. package/build/utils/artifacts.js +0 -34
  224. package/build/utils/artifacts.js.map +0 -1
  225. package/build/utils/brush.js +0 -30
  226. package/build/utils/brush.js.map +0 -1
  227. package/build/utils/cache.js +0 -106
  228. package/build/utils/cache.js.map +0 -1
  229. package/build/utils/check-health.js +0 -68
  230. package/build/utils/check-health.js.map +0 -1
  231. package/build/utils/core-utils.js +0 -283
  232. package/build/utils/core-utils.js.map +0 -1
  233. package/build/utils/domains.js +0 -37
  234. package/build/utils/domains.js.map +0 -1
  235. package/build/utils/errors.js +0 -30
  236. package/build/utils/errors.js.map +0 -1
  237. package/build/utils/folders.js +0 -362
  238. package/build/utils/folders.js.map +0 -1
  239. package/build/utils/images.js +0 -45
  240. package/build/utils/images.js.map +0 -1
  241. package/build/utils/instance.js +0 -66
  242. package/build/utils/instance.js.map +0 -1
  243. package/build/utils/loggin.js +0 -108
  244. package/build/utils/loggin.js.map +0 -1
  245. package/build/utils/pages.js +0 -359
  246. package/build/utils/pages.js.map +0 -1
  247. package/build/utils/render.js +0 -144
  248. package/build/utils/render.js.map +0 -1
  249. package/build/utils/sites.js +0 -240
  250. package/build/utils/sites.js.map +0 -1
  251. package/build/utils/store.js +0 -193
  252. package/build/utils/store.js.map +0 -1
  253. package/exporter/adapters/gatsby/actions/clean.ts +0 -14
  254. package/exporter/adapters/gatsby/actions/close.ts +0 -17
  255. package/exporter/adapters/gatsby/actions/data.ts +0 -25
  256. package/exporter/adapters/gatsby/actions/healthCheck.ts +0 -10
  257. package/exporter/adapters/gatsby/actions/init.ts +0 -12
  258. package/exporter/adapters/gatsby/actions/meta.ts +0 -18
  259. package/exporter/adapters/gatsby/actions/prepare.ts +0 -9
  260. package/exporter/adapters/gatsby/actions/relocation.ts +0 -15
  261. package/exporter/adapters/gatsby/actions/restore.ts +0 -36
  262. package/exporter/adapters/gatsby/actions/ssg.ts +0 -12
  263. package/exporter/adapters/gatsby/actions/sync.ts +0 -71
  264. package/exporter/adapters/gatsby/shared/context.ts +0 -50
  265. package/exporter/adapters/gatsby/shared/diff-assets.ts +0 -113
  266. package/exporter/adapters/gatsby/shared/extract-assets.ts +0 -61
  267. package/exporter/adapters/gatsby/shared/gatsby-build.ts +0 -54
  268. package/exporter/adapters/gatsby/shared/sync-render.ts +0 -277
  269. package/exporter/adapters/gatsby/shared/types.ts +0 -35
  270. package/exporter/build-esbuild.noop +0 -42
  271. package/exporter/commands/prepare-assets-directory.ts +0 -33
  272. package/exporter/services/db-class.ts +0 -54
  273. package/exporter/services/db.ts +0 -32
  274. package/exporter/types/render.ts +0 -59
  275. package/exporter/utils/artifacts.ts +0 -34
  276. package/exporter/utils/brush.ts +0 -34
  277. package/exporter/utils/check-health.ts +0 -79
  278. package/plugins/gatsby-plugin-svgr-loader/gatsby-node.js +0 -55
  279. package/plugins/gatsby-plugin-svgr-loader/package.json +0 -8
  280. /package/{react → exporter/react}/Favicon/utils.ts +0 -0
@@ -1,9 +1,8 @@
1
1
  import type { AuthHeaders } from "../types/api";
2
2
 
3
- import { LOGIN } from "../constants/endpoints";
4
- import { GRIDDO_BOT_PASSWORD, GRIDDO_BOT_USER } from "../constants/envs";
5
- import { LoginError } from "../constants/errors";
6
- import { throwError } from "../utils/errors";
3
+ import { endpoints, envs } from "../constants";
4
+ import { throwError } from "../errors";
5
+ import { LoginError } from "../errors/errors-data";
7
6
 
8
7
  /**
9
8
  * Service for authentication in the Griddo Private API
@@ -13,12 +12,12 @@ class AuthService {
13
12
 
14
13
  async login() {
15
14
  try {
16
- const response = await fetch(LOGIN, {
15
+ const response = await fetch(endpoints.LOGIN, {
17
16
  method: "POST",
18
17
  headers: { "Content-Type": "application/json", Connection: "close" },
19
18
  body: JSON.stringify({
20
- username: GRIDDO_BOT_USER,
21
- password: GRIDDO_BOT_PASSWORD,
19
+ username: envs.GRIDDO_BOT_USER,
20
+ password: envs.GRIDDO_BOT_PASSWORD,
22
21
  }),
23
22
  });
24
23
 
@@ -0,0 +1,16 @@
1
+ import type { Domains } from "../types/global";
2
+
3
+ import { endpoints } from "../constants";
4
+ import { get } from "../utils/api";
5
+
6
+ /**
7
+ * Get an array of available domain.
8
+ */
9
+ async function getAllDomains() {
10
+ return get<Domains>({
11
+ endpoint: endpoints.DOMAINS,
12
+ useApiCacheDir: false,
13
+ });
14
+ }
15
+
16
+ export { getAllDomains };
@@ -68,7 +68,9 @@ class NavigationService {
68
68
  const rightLanguageItem = list.find(
69
69
  (item) =>
70
70
  item.language === language &&
71
- item.navigationLanguages?.find((version) => version.navigationId === id),
71
+ item.navigationLanguages?.find(
72
+ (version) => version.navigationId === id,
73
+ ),
72
74
  );
73
75
 
74
76
  const result = rightLanguageItem || list.find((item) => item.id === id);
@@ -85,9 +87,13 @@ class NavigationService {
85
87
  }
86
88
 
87
89
  getPageNavigations(page: APIPageObject) {
88
- const { header: pageHeader, footer: pageFooter, language, template, templateConfig } = page;
89
- const { templateType } = template;
90
- const { defaultHeader, defaultFooter, templates } = templateConfig;
90
+ const {
91
+ header: pageHeader,
92
+ footer: pageFooter,
93
+ language,
94
+ template: { templateType },
95
+ templateConfig: { defaultHeader, defaultFooter, templates },
96
+ } = page;
91
97
 
92
98
  // The navigations would be:
93
99
  // - The one with the page or ...
@@ -1,9 +1,9 @@
1
- import type { Core, Fields } from "@griddo/core";
2
1
  import type { FetchDataProps } from "../types/global";
3
2
  import type { APIPageObject } from "../types/pages";
3
+ import type { Core, Fields } from "@griddo/core";
4
4
 
5
- import { boxLog } from "../utils/loggin";
6
5
  import { getReferenceFieldSiteData } from "./sites";
6
+ import { boxLog } from "../utils/loggin";
7
7
 
8
8
  /**
9
9
  * Get the body data from a ReferenceField.
@@ -54,7 +54,9 @@ function getBody(data: Fields.Reference<unknown>, page: Core.Page) {
54
54
  };
55
55
  }
56
56
 
57
- console.log(`Error: ReferenceField mode: ${mode} is not recognized on page ${page?.id}.`);
57
+ console.log(
58
+ `Error: ReferenceField mode: ${mode} is not recognized on page ${page?.id}.`,
59
+ );
58
60
 
59
61
  return data;
60
62
  }
@@ -69,8 +71,11 @@ function getBody(data: Fields.Reference<unknown>, page: Core.Page) {
69
71
  * @returns The ContentType data.
70
72
  */
71
73
  async function fetchContentTypeData(props: FetchDataProps) {
72
- const { page, component, cacheKey } = props;
73
- const { data } = component;
74
+ const {
75
+ page,
76
+ component: { data },
77
+ cacheKey,
78
+ } = props;
74
79
 
75
80
  // Distrubutor with `hasDistributorData: true` / `getStaticData: true` but without `data` prop
76
81
  if (!data) {
@@ -104,7 +109,13 @@ async function fetchContentTypeData(props: FetchDataProps) {
104
109
 
105
110
  const body = getBody(data, page);
106
111
 
107
- const response = await getReferenceFieldSiteData(page, body, cacheKey, site, lang);
112
+ const response = await getReferenceFieldSiteData(
113
+ page,
114
+ body,
115
+ cacheKey,
116
+ site,
117
+ lang,
118
+ );
108
119
 
109
120
  return response;
110
121
  }
@@ -154,7 +165,10 @@ async function getReferenceFieldData({
154
165
  continue;
155
166
  }
156
167
 
157
- const _key = key as "hasDistributorData" | "queriedItems" | "getStaticData";
168
+ const _key = key as
169
+ | "hasDistributorData"
170
+ | "queriedItems"
171
+ | "getStaticData";
158
172
  const component = templateChunk[_key] as unknown as {
159
173
  data: Fields.Reference<unknown>;
160
174
  queriedItems: Fields.QueriedData<unknown>;
@@ -167,7 +181,8 @@ async function getReferenceFieldData({
167
181
  continue;
168
182
  }
169
183
 
170
- const componentHasRequestForData = component.hasDistributorData || component.getStaticData;
184
+ const componentHasRequestForData =
185
+ component.hasDistributorData || component.getStaticData;
171
186
 
172
187
  if (componentHasRequestForData) {
173
188
  component.queriedItems = await fetchContentTypeData({
@@ -0,0 +1,113 @@
1
+ import fsx from "fs-extra";
2
+
3
+ type Entry = Record<string, unknown>;
4
+
5
+ type EntryData = {
6
+ title: string;
7
+ description: string;
8
+ entries: Array<Entry>;
9
+ };
10
+
11
+ type Entries = Record<string, EntryData>;
12
+
13
+ interface RegisterBase<T extends Entries> {
14
+ insert(name: keyof T, entry: Entry): void;
15
+ get(name: keyof T): EntryData;
16
+ getAll(): T;
17
+ }
18
+
19
+ class MemoryRegister<T extends Entries> implements RegisterBase<T> {
20
+ entries: T;
21
+
22
+ constructor(entries: T) {
23
+ this.entries = entries;
24
+ }
25
+
26
+ insert(name: keyof T, entry: Entry) {
27
+ this.entries[name].entries.push(entry);
28
+ }
29
+
30
+ get(name: keyof T) {
31
+ return this.entries[name];
32
+ }
33
+
34
+ getAll() {
35
+ return this.entries;
36
+ }
37
+ }
38
+
39
+ class FileRegister<T extends Entries> implements RegisterBase<T> {
40
+ private readonly filePath: string;
41
+ entries: T;
42
+
43
+ constructor(filePath: string, entries: T) {
44
+ this.entries = entries;
45
+ this.filePath = filePath;
46
+ try {
47
+ fsx.writeJSONSync(this.filePath, this.entries);
48
+ } catch (e) {
49
+ console.error(`Error writing ${this.filePath}`, e);
50
+ }
51
+ }
52
+
53
+ private getCurrentEntries(): T {
54
+ return fsx.readJSONSync(this.filePath, "utf8") as T;
55
+ }
56
+
57
+ insert(name: keyof T, entry: Entry) {
58
+ try {
59
+ const currentEntries = this.getCurrentEntries();
60
+ currentEntries[name].entries.push(entry);
61
+ fsx.writeJSONSync(this.filePath, currentEntries);
62
+ } catch (e) {
63
+ console.error(e);
64
+ }
65
+ }
66
+
67
+ get(name: keyof T) {
68
+ try {
69
+ return fsx.readJSONSync(this.filePath, "utf8")[name] as EntryData;
70
+ } catch (e) {
71
+ console.error(e);
72
+ throw new Error(`Error reading ${this.filePath}`);
73
+ }
74
+ }
75
+
76
+ getAll() {
77
+ try {
78
+ return fsx.readJSONSync(this.filePath, "utf8") as T;
79
+ } catch (e) {
80
+ console.error(e);
81
+ throw new Error(`Error reading ${this.filePath}`);
82
+ }
83
+ }
84
+ }
85
+
86
+ class Register<T extends Entries> {
87
+ private strategy: RegisterBase<T>;
88
+
89
+ constructor(strategy: RegisterBase<T>) {
90
+ this.strategy = strategy;
91
+ }
92
+
93
+ insert<K extends keyof T>(name: K, entry: Entry) {
94
+ this.strategy.insert(name, entry);
95
+ }
96
+
97
+ get<K extends keyof T>(name: K) {
98
+ return this.strategy.get(name);
99
+ }
100
+
101
+ getAll() {
102
+ return this.strategy.getAll();
103
+ }
104
+ }
105
+
106
+ export {
107
+ FileRegister,
108
+ MemoryRegister,
109
+ Register,
110
+ type Entries,
111
+ type Entry,
112
+ type EntryData,
113
+ };
@@ -1,14 +1,18 @@
1
1
  import type { Robots } from "../types/global";
2
2
 
3
- import fsp from "node:fs/promises";
3
+ import fs from "node:fs";
4
4
  import path from "node:path";
5
5
 
6
- import { ROBOTS } from "../constants/endpoints";
6
+ import { endpoints } from "../constants";
7
7
  import { get } from "../utils/api";
8
- import { pathExists } from "../utils/folders";
8
+ import { getConfig } from "../utils/core-utils";
9
9
  import { verboseLog } from "../utils/loggin";
10
- import { getRenderPathsFromDB } from "../utils/render";
11
10
 
11
+ const config = getConfig();
12
+
13
+ /**
14
+ * TODO: JSDoc
15
+ */
12
16
  class RobotsService {
13
17
  robots: Robots;
14
18
  settings: Record<string, unknown>;
@@ -18,9 +22,12 @@ class RobotsService {
18
22
  this.settings = {};
19
23
  }
20
24
 
25
+ /**
26
+ * TODO: JSDoc
27
+ */
21
28
  private async getRobots() {
22
29
  try {
23
- const apiRobots = await get<Robots>({ endpoint: ROBOTS });
30
+ const apiRobots = await get<Robots>({ endpoint: endpoints.ROBOTS });
24
31
  this.robots =
25
32
  apiRobots
26
33
  ?.filter((r) => !!r.path)
@@ -37,8 +44,8 @@ class RobotsService {
37
44
  * Write robots.txt files for the domain.
38
45
  */
39
46
  async writeFiles(domain: string) {
40
- const { __root } = await getRenderPathsFromDB({ domain });
41
- const distDirectory = path.join(__root, "dist");
47
+ const { __cx } = config.paths(domain);
48
+ const distDirectory = path.join(__cx, "dist");
42
49
 
43
50
  await this.getRobots();
44
51
 
@@ -49,9 +56,9 @@ class RobotsService {
49
56
  return;
50
57
  }
51
58
 
52
- if (await pathExists(distDirectory)) {
59
+ if (fs.existsSync(distDirectory)) {
53
60
  const fileLocation = path.join(distDirectory, "robots.txt");
54
- await fsp.writeFile(fileLocation, robot?.content);
61
+ fs.writeFileSync(fileLocation, robot?.content);
55
62
  verboseLog(`wrote robots.txt to ${fileLocation}`);
56
63
  } else {
57
64
  console.log(`${distDirectory} not found`);
@@ -0,0 +1,17 @@
1
+ import type { Settings } from "../types/global";
2
+
3
+ import { endpoints } from "../constants";
4
+ import { get, post } from "../utils/api";
5
+
6
+ async function getAllSettings() {
7
+ return get<Settings>({ endpoint: endpoints.SETTINGS });
8
+ }
9
+
10
+ async function resetRender() {
11
+ await post({
12
+ endpoint: endpoints.RESET_RENDER,
13
+ useApiCacheDir: false,
14
+ });
15
+ }
16
+
17
+ export { getAllSettings, resetRender };
@@ -1,4 +1,3 @@
1
- import type { Core } from "@griddo/core";
2
1
  import type {
3
2
  AllSitesReponse,
4
3
  EndPageInfoResponse,
@@ -12,26 +11,17 @@ import type {
12
11
  StartPageRenderResponse,
13
12
  } from "../types/api";
14
13
  import type { Site } from "../types/sites";
14
+ import type { Core } from "@griddo/core";
15
15
 
16
- import {
17
- BUILD_END,
18
- BUILD_START,
19
- GET_ALL,
20
- GET_PAGE,
21
- GET_REFERENCE_FIELD_DATA,
22
- GET_SITEMAP,
23
- INFO,
24
- LANGUAGES,
25
- SOCIALS,
26
- } from "../constants/endpoints";
16
+ import { endpoints } from "../constants";
27
17
  import { get, post } from "../utils/api";
28
18
 
29
19
  /**
30
20
  * Get a list of site objects.
31
21
  */
32
22
  async function getAllSites(domain: string) {
33
- return get<AllSitesReponse>({
34
- endpoint: `${GET_ALL}?domainSlug=${domain}`,
23
+ return await get<AllSitesReponse>({
24
+ endpoint: `${endpoints.GET_ALL}?domainSlug=${domain}`,
35
25
  });
36
26
  }
37
27
 
@@ -39,7 +29,7 @@ async function getAllSites(domain: string) {
39
29
  * Get a list of site objects from a domain.
40
30
  */
41
31
  async function getAllSitesFromDomain(domain: string) {
42
- const allSites = await get<AllSitesReponse>({ endpoint: GET_ALL });
32
+ const allSites = await get<AllSitesReponse>({ endpoint: endpoints.GET_ALL });
43
33
 
44
34
  if (allSites.length) {
45
35
  for (const site of allSites) {
@@ -50,7 +40,8 @@ async function getAllSitesFromDomain(domain: string) {
50
40
  site.domains = items
51
41
  .filter(
52
42
  (item) =>
53
- item.domain && (item.domain.slug === domain || item.domain.slug === `/${domain}`),
43
+ item.domain &&
44
+ (item.domain.slug === domain || item.domain.slug === `/${domain}`),
54
45
  )
55
46
  .map((item) => ({ [item.id]: `${item.domain.slug}${item.path}` }));
56
47
  }
@@ -63,8 +54,8 @@ async function getAllSitesFromDomain(domain: string) {
63
54
  * Fetch a page object from API.
64
55
  */
65
56
  async function getPage(id: number, cacheKey: string) {
66
- return get<PageResponse>({
67
- endpoint: `${GET_PAGE}/${id}`,
57
+ return await get<PageResponse>({
58
+ endpoint: `${endpoints.GET_PAGE}/${id}`,
68
59
  cacheKey,
69
60
  });
70
61
  }
@@ -73,27 +64,27 @@ async function getPage(id: number, cacheKey: string) {
73
64
  * Get site info
74
65
  */
75
66
  async function getSiteInfo(id: number, cacheKey = "") {
76
- const [prefix, suffix] = INFO;
67
+ const [prefix, suffix] = endpoints.INFO;
77
68
 
78
- return get<Site>({
69
+ return await get<Site>({
79
70
  endpoint: `${prefix}${id}${suffix}`,
80
71
  cacheKey,
81
72
  });
82
73
  }
83
74
 
84
75
  async function getSiteLanguages(id: number, cacheKey = "") {
85
- const [prefix, suffix] = LANGUAGES;
76
+ const [prefix, suffix] = endpoints.LANGUAGES;
86
77
 
87
- return get<LanguagesResponse>({
78
+ return await get<LanguagesResponse>({
88
79
  endpoint: `${prefix}${id}${suffix}`,
89
80
  cacheKey,
90
81
  });
91
82
  }
92
83
 
93
84
  async function startSiteRender(id: number) {
94
- const [prefix, suffix] = BUILD_START;
85
+ const [prefix, suffix] = endpoints.BUILD_START;
95
86
 
96
- return get<StartPageRenderResponse>({
87
+ return await get<StartPageRenderResponse>({
97
88
  endpoint: `${prefix}${id}${suffix}`,
98
89
  });
99
90
  }
@@ -102,9 +93,9 @@ async function startSiteRender(id: number) {
102
93
  * Send the end signal to API for a render site.
103
94
  */
104
95
  async function endSiteRender(id: number, body: EndSiteRenderBody) {
105
- const [prefix, suffix] = BUILD_END;
96
+ const [prefix, suffix] = endpoints.BUILD_END;
106
97
 
107
- return post<EndPageInfoResponse>({
98
+ return await post<EndPageInfoResponse>({
108
99
  endpoint: `${prefix}${id}${suffix}`,
109
100
  body,
110
101
  useApiCacheDir: false,
@@ -118,11 +109,11 @@ async function getReferenceFieldSiteData(
118
109
  dataSiteId?: number,
119
110
  dataLangID?: number,
120
111
  ) {
121
- const [prefix, suffix] = GET_REFERENCE_FIELD_DATA;
112
+ const [prefix, suffix] = endpoints.GET_REFERENCE_FIELD_DATA;
122
113
  const site = dataSiteId || page.site;
123
114
  const lang = dataLangID || page.language;
124
115
 
125
- return post<ReferenceFieldResponse>({
116
+ return await post<ReferenceFieldResponse>({
126
117
  endpoint: `${prefix}${site}${suffix}`,
127
118
  body,
128
119
  headers: { lang },
@@ -130,20 +121,18 @@ async function getReferenceFieldSiteData(
130
121
  });
131
122
  }
132
123
 
133
- async function getSitemap(options: { siteId: number; headers?: Record<string, string> }) {
134
- const { siteId, headers } = options;
135
- const [prefix, suffix] = GET_SITEMAP;
124
+ async function getSitemap(id: number) {
125
+ const [prefix, suffix] = endpoints.GET_SITEMAP;
136
126
 
137
127
  return get<SitemapAPIResponse>({
138
- endpoint: `${prefix}${siteId}${suffix}`,
139
- headers,
128
+ endpoint: `${prefix}${id}${suffix}`,
140
129
  });
141
130
  }
142
131
 
143
132
  async function getSiteSocials(id: number, cacheKey = "") {
144
- const [prefix, suffix] = SOCIALS;
133
+ const [prefix, suffix] = endpoints.SOCIALS;
145
134
 
146
- return get<SocialsResponse>({
135
+ return await get<SocialsResponse>({
147
136
  endpoint: `${prefix}${id}${suffix}`,
148
137
  cacheKey,
149
138
  });