@raketa-cloud/admin 1.8.7 → 1.8.9

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 (120) hide show
  1. package/dist/application.css +0 -4
  2. package/package.json +1 -1
  3. package/src/HonoAdapter.js +34 -33
  4. package/src/index.js +0 -3
  5. package/src/routeCategoriesModule.js +1 -1
  6. package/src/routeCollection.js +15 -8
  7. package/src/routeNestedCollection.js +1 -1
  8. package/src/routeNestedMember.js +1 -1
  9. package/src/routeResource.js +19 -21
  10. package/src/routeStandard.js +6 -6
  11. package/src/tests/HonoAdapter.coverage.test.js +15 -25
  12. package/src/tests/routeCategoriesModule.test.js +2 -2
  13. package/src/tests/routeResource.test.js +12 -37
  14. package/src/tests/routeStandard.test.js +13 -13
  15. package/src/views/_shared/_date_fields_input.ejs +13 -0
  16. package/src/views/{page_revisions → resource_revisions}/general/_form.ejs +1 -0
  17. package/src/views/{pages → resources}/_form.ejs +1 -0
  18. package/src/views/{pages → resources}/history/index.ejs +1 -1
  19. package/src/views/{articles → resources}/index.ejs +6 -0
  20. package/src/views/{pages → resources}/show.ejs +7 -7
  21. package/src/views/{articles → resources}/translations/create_form.ejs +2 -2
  22. package/src/routeArticlesModule.js +0 -15
  23. package/src/routeEventsModule.js +0 -15
  24. package/src/routePagesModule.js +0 -15
  25. package/src/tests/routeArticlesModule.test.js +0 -43
  26. package/src/tests/routeEventsModule.test.js +0 -43
  27. package/src/tests/routePagesModule.test.js +0 -43
  28. package/src/views/article_revisions/_nav.ejs +0 -53
  29. package/src/views/article_revisions/general/_form.ejs +0 -18
  30. package/src/views/article_revisions/tags/edit_form.ejs +0 -16
  31. package/src/views/articles/_form.ejs +0 -45
  32. package/src/views/articles/_shared/history_table.ejs +0 -74
  33. package/src/views/articles/deletes/create_form.ejs +0 -68
  34. package/src/views/articles/history/index.ejs +0 -80
  35. package/src/views/articles/show.ejs +0 -222
  36. package/src/views/articles/urls/create_form.ejs +0 -36
  37. package/src/views/event_revisions/codes/_form.ejs +0 -14
  38. package/src/views/event_revisions/codes/edit_form.ejs +0 -16
  39. package/src/views/event_revisions/general/_form.ejs +0 -20
  40. package/src/views/event_revisions/general/edit_form.ejs +0 -16
  41. package/src/views/event_revisions/locks/_form.ejs +0 -11
  42. package/src/views/event_revisions/locks/create_form.ejs +0 -27
  43. package/src/views/event_revisions/meta/_form.ejs +0 -16
  44. package/src/views/event_revisions/meta/edit_form.ejs +0 -16
  45. package/src/views/event_revisions/publishes/_form.ejs +0 -77
  46. package/src/views/event_revisions/publishes/create_form.ejs +0 -9
  47. package/src/views/event_revisions/tags/_form.ejs +0 -13
  48. package/src/views/event_revisions/tags/edit_form.ejs +0 -16
  49. package/src/views/event_revisions/visuals/_form.ejs +0 -13
  50. package/src/views/event_revisions/visuals/edit_form.ejs +0 -16
  51. package/src/views/events/_form.ejs +0 -47
  52. package/src/views/events/_shared/_addons.ejs +0 -0
  53. package/src/views/events/_shared/_export_button.ejs +0 -9
  54. package/src/views/events/_shared/_history_toolbar.ejs +0 -24
  55. package/src/views/events/_shared/_revision_operator.ejs +0 -8
  56. package/src/views/events/_shared/_revision_toolbar.ejs +0 -68
  57. package/src/views/events/_shared/_title.ejs +0 -14
  58. package/src/views/events/_shared/_toolbar.ejs +0 -45
  59. package/src/views/events/_shared/history_table.ejs +0 -74
  60. package/src/views/events/create_form.ejs +0 -9
  61. package/src/views/events/deletes/create_form.ejs +0 -68
  62. package/src/views/events/history/index.ejs +0 -80
  63. package/src/views/events/index.ejs +0 -190
  64. package/src/views/events/show.ejs +0 -222
  65. package/src/views/events/translations/_translation_toolbar.ejs +0 -18
  66. package/src/views/events/translations/create_form.ejs +0 -75
  67. package/src/views/events/translations/index.ejs +0 -39
  68. package/src/views/events/urls/create_form.ejs +0 -36
  69. package/src/views/page_revisions/_nav.ejs +0 -53
  70. package/src/views/page_revisions/codes/_form.ejs +0 -14
  71. package/src/views/page_revisions/codes/edit_form.ejs +0 -16
  72. package/src/views/page_revisions/general/edit_form.ejs +0 -16
  73. package/src/views/page_revisions/locks/_form.ejs +0 -11
  74. package/src/views/page_revisions/locks/create_form.ejs +0 -27
  75. package/src/views/page_revisions/meta/_form.ejs +0 -16
  76. package/src/views/page_revisions/meta/edit_form.ejs +0 -16
  77. package/src/views/page_revisions/publishes/_form.ejs +0 -76
  78. package/src/views/page_revisions/publishes/create_form.ejs +0 -9
  79. package/src/views/page_revisions/tags/_form.ejs +0 -13
  80. package/src/views/page_revisions/visuals/_form.ejs +0 -13
  81. package/src/views/page_revisions/visuals/edit_form.ejs +0 -16
  82. package/src/views/pages/_shared/_addons.ejs +0 -0
  83. package/src/views/pages/_shared/_export_button.ejs +0 -9
  84. package/src/views/pages/_shared/_history_toolbar.ejs +0 -24
  85. package/src/views/pages/_shared/_revision_operator.ejs +0 -8
  86. package/src/views/pages/_shared/_revision_toolbar.ejs +0 -68
  87. package/src/views/pages/_shared/_title.ejs +0 -14
  88. package/src/views/pages/_shared/_toolbar.ejs +0 -45
  89. package/src/views/pages/create_form.ejs +0 -9
  90. package/src/views/pages/index.ejs +0 -185
  91. package/src/views/pages/translations/_translation_toolbar.ejs +0 -18
  92. package/src/views/pages/translations/create_form.ejs +0 -75
  93. package/src/views/pages/translations/index.ejs +0 -39
  94. /package/src/views/{event_revisions → resource_revisions}/_nav.ejs +0 -0
  95. /package/src/views/{article_revisions → resource_revisions}/codes/_form.ejs +0 -0
  96. /package/src/views/{article_revisions → resource_revisions}/codes/edit_form.ejs +0 -0
  97. /package/src/views/{article_revisions → resource_revisions}/general/edit_form.ejs +0 -0
  98. /package/src/views/{article_revisions → resource_revisions}/locks/_form.ejs +0 -0
  99. /package/src/views/{article_revisions → resource_revisions}/locks/create_form.ejs +0 -0
  100. /package/src/views/{article_revisions → resource_revisions}/meta/_form.ejs +0 -0
  101. /package/src/views/{article_revisions → resource_revisions}/meta/edit_form.ejs +0 -0
  102. /package/src/views/{article_revisions → resource_revisions}/publishes/_form.ejs +0 -0
  103. /package/src/views/{article_revisions → resource_revisions}/publishes/create_form.ejs +0 -0
  104. /package/src/views/{article_revisions → resource_revisions}/tags/_form.ejs +0 -0
  105. /package/src/views/{page_revisions → resource_revisions}/tags/edit_form.ejs +0 -0
  106. /package/src/views/{article_revisions → resource_revisions}/visuals/_form.ejs +0 -0
  107. /package/src/views/{article_revisions → resource_revisions}/visuals/edit_form.ejs +0 -0
  108. /package/src/views/{articles → resources}/_shared/_addons.ejs +0 -0
  109. /package/src/views/{articles → resources}/_shared/_export_button.ejs +0 -0
  110. /package/src/views/{articles → resources}/_shared/_history_toolbar.ejs +0 -0
  111. /package/src/views/{articles → resources}/_shared/_revision_operator.ejs +0 -0
  112. /package/src/views/{articles → resources}/_shared/_revision_toolbar.ejs +0 -0
  113. /package/src/views/{articles → resources}/_shared/_title.ejs +0 -0
  114. /package/src/views/{articles → resources}/_shared/_toolbar.ejs +0 -0
  115. /package/src/views/{pages → resources}/_shared/history_table.ejs +0 -0
  116. /package/src/views/{articles → resources}/create_form.ejs +0 -0
  117. /package/src/views/{pages → resources}/deletes/create_form.ejs +0 -0
  118. /package/src/views/{articles → resources}/translations/_translation_toolbar.ejs +0 -0
  119. /package/src/views/{articles → resources}/translations/index.ejs +0 -0
  120. /package/src/views/{pages → resources}/urls/create_form.ejs +0 -0
@@ -1665,10 +1665,6 @@ select {
1665
1665
  margin-bottom: 2rem;
1666
1666
  }
1667
1667
 
1668
- .-mt-4 {
1669
- margin-top: -1rem;
1670
- }
1671
-
1672
1668
  .mb-0 {
1673
1669
  margin-bottom: 0px;
1674
1670
  }
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@raketa-cloud/admin",
3
- "version": "1.8.7",
3
+ "version": "1.8.9",
4
4
  "main": "src/index.js",
5
5
  "files": [
6
6
  "src/",
@@ -65,13 +65,19 @@ function putIn(result, key, value) {
65
65
  const sanitizePath = (filePath) =>
66
66
  path.normalize(path.join("/", ...filePath.split("/")));
67
67
 
68
- // Find template path with fallbacks
69
- function getPartialPath(partialPath, views, viewsFallback) {
68
+ function packageFallbackPaths(views, suffix) {
69
+ const rest = views.split("/").slice(1);
70
+ return ["resources", "resource_revisions"].map((base) =>
71
+ sanitizePath(`${currentPath}/views/${[base, ...rest].join("/")}/${suffix}`),
72
+ );
73
+ }
74
+
75
+ // Find template path, preferring an app override over the package template
76
+ function getPartialPath(partialPath, views) {
70
77
  const paths = [
71
78
  sanitizePath(`${process.cwd()}/src/views/${views}/${partialPath}`),
72
79
  sanitizePath(`${currentPath}/views/${views}/${partialPath}`),
73
- viewsFallback &&
74
- sanitizePath(`${currentPath}/views/${viewsFallback}/${partialPath}`),
80
+ ...packageFallbackPaths(views, partialPath),
75
81
  ].filter(Boolean);
76
82
 
77
83
  // Return first existing path
@@ -80,7 +86,7 @@ function getPartialPath(partialPath, views, viewsFallback) {
80
86
  if (existingPath) return existingPath;
81
87
 
82
88
  throw new Error(
83
- `Template not found: "${partialPath}"\nSearched in:\n${paths.join("\n")}`
89
+ `Template not found: "${partialPath}"\nSearched in:\n${paths.join("\n")}`,
84
90
  );
85
91
  }
86
92
 
@@ -137,14 +143,17 @@ export default class HonoAdapter {
137
143
  this.globalAfterFilters.push({ pattern, filter });
138
144
  }
139
145
 
140
- getActionPath(views, viewsFallback, action) {
141
- const packagePath = viewsFallback
142
- ? `${currentPath}/views/${viewsFallback}/${action}.ejs`
143
- : `${currentPath}/views/${views}/${action}.ejs`;
144
-
146
+ getActionPath(views, action) {
145
147
  const appPath = `${process.cwd()}/src/views/${views}/${action}.ejs`;
148
+ if (existsSync(appPath)) return appPath;
146
149
 
147
- return existsSync(appPath) ? appPath : packagePath;
150
+ const packagePath = `${currentPath}/views/${views}/${action}.ejs`;
151
+ if (existsSync(packagePath)) return packagePath;
152
+
153
+ const fallback = packageFallbackPaths(views, `${action}.ejs`).find(
154
+ existsSync,
155
+ );
156
+ return fallback ?? packagePath;
148
157
  }
149
158
 
150
159
  getHelpers(viewHelpersConfig) {
@@ -172,9 +181,9 @@ export default class HonoAdapter {
172
181
  });
173
182
  }
174
183
 
175
- renderPartial(assigns, views, viewsFallback) {
184
+ renderPartial(assigns, views) {
176
185
  return function render(relativePath, localAssigns) {
177
- const partialPath = getPartialPath(relativePath, views, viewsFallback);
186
+ const partialPath = getPartialPath(relativePath, views);
178
187
 
179
188
  try {
180
189
  // Synchronously read the partial file as ejs does not support async/await
@@ -185,7 +194,7 @@ export default class HonoAdapter {
185
194
  ...assigns,
186
195
  ...localAssigns,
187
196
  },
188
- { filename: partialPath }
197
+ { filename: partialPath },
189
198
  );
190
199
 
191
200
  return rendered;
@@ -198,18 +207,11 @@ export default class HonoAdapter {
198
207
  };
199
208
  }
200
209
 
201
- async renderAction(
202
- { views, viewsFallback, action, assigns },
203
- viewHelpersConfig = {}
204
- ) {
210
+ async renderAction({ views, action, assigns }, viewHelpersConfig = {}) {
205
211
  // Pick the parent here in the views so we can reuse stuff...
206
- const fullTemplatePath = this.getActionPath(views, viewsFallback, action);
212
+ const fullTemplatePath = this.getActionPath(views, action);
207
213
  const renderAssigns = { ...this.getHelpers(viewHelpersConfig), ...assigns };
208
- const renderPartialHelper = this.renderPartial(
209
- renderAssigns,
210
- views,
211
- viewsFallback
212
- );
214
+ const renderPartialHelper = this.renderPartial(renderAssigns, views);
213
215
 
214
216
  try {
215
217
  // Synchronously read the full template file
@@ -222,7 +224,7 @@ export default class HonoAdapter {
222
224
  ...renderAssigns,
223
225
  render_partial: renderPartialHelper,
224
226
  },
225
- { filename: fullTemplatePath }
227
+ { filename: fullTemplatePath },
226
228
  );
227
229
 
228
230
  const fullPage = this.renderLayout(renderAssigns, rendered);
@@ -288,7 +290,7 @@ export default class HonoAdapter {
288
290
 
289
291
  async createAction(
290
292
  [verb, path, resource, views, action, handler],
291
- resourceConfig
293
+ resourceConfig,
292
294
  ) {
293
295
  const { i18n } = this.globalConfig;
294
296
 
@@ -302,7 +304,7 @@ export default class HonoAdapter {
302
304
  next,
303
305
  verb,
304
306
  resource,
305
- action
307
+ action,
306
308
  );
307
309
 
308
310
  // Set context properties
@@ -336,7 +338,7 @@ export default class HonoAdapter {
336
338
  };
337
339
 
338
340
  ctx.logger.info(
339
- `${ctx.method} "${ctx.rawPath}" -> ${resource}/${action} | ${JSON.stringify(ctx.params)}`
341
+ `${ctx.method} "${ctx.rawPath}" -> ${resource}/${action} | ${JSON.stringify(ctx.params)}`,
340
342
  );
341
343
 
342
344
  const assigns = {
@@ -381,7 +383,7 @@ export default class HonoAdapter {
381
383
 
382
384
  Object.assign(
383
385
  assigns.afterFilterAssigns,
384
- afterResult.assigns || {}
386
+ afterResult.assigns || {},
385
387
  );
386
388
  }
387
389
  }
@@ -399,11 +401,10 @@ export default class HonoAdapter {
399
401
  const rendered = this.renderAction(
400
402
  {
401
403
  views,
402
- viewsFallback: resourceConfig.viewsFallback,
403
404
  action,
404
405
  assigns: fullAssigns,
405
406
  },
406
- this.globalConfig?.helpers || {}
407
+ this.globalConfig?.helpers || {},
407
408
  );
408
409
 
409
410
  return routerCtx.html(rendered);
@@ -414,7 +415,7 @@ export default class HonoAdapter {
414
415
  // Single method to handle all route types
415
416
  routeCollection(mapping, resourceConfig) {
416
417
  mapping.forEach((handlerMap) =>
417
- this.createAction(handlerMap, resourceConfig)
418
+ this.createAction(handlerMap, resourceConfig),
418
419
  );
419
420
  }
420
421
 
@@ -436,7 +437,7 @@ export default class HonoAdapter {
436
437
  applyHeaders(headers, router) {
437
438
  if (!headers) return;
438
439
  Object.entries(headers).forEach(([key, value]) =>
439
- router.header(key, value)
440
+ router.header(key, value),
440
441
  );
441
442
  }
442
443
 
package/src/index.js CHANGED
@@ -5,9 +5,6 @@ export { default as routeMember } from "./routeMember";
5
5
  export { default as routeNestedMember } from "./routeNestedMember";
6
6
  export { default as setGlobalContext } from "./setGlobalContext";
7
7
  export { default as routeResource } from "./routeResource";
8
- export { default as routePagesModule } from "./routePagesModule";
9
- export { default as routeArticlesModule } from "./routeArticlesModule";
10
- export { default as routeEventsModule } from "./routeEventsModule";
11
8
  export { default as routeSettings } from "./routeSettings";
12
9
  export { default as setupCloud } from "./setupCloud";
13
10
  export { default as routeStandard } from "./routeStandard";
@@ -9,7 +9,7 @@ function routeCategoriesModule(adapter, categoryType, categoryTypePlural) {
9
9
 
10
10
  routeCollection(adapter, categoryTypePlural, CategoriesHandler, {
11
11
  ...resourceConfig,
12
- viewsFallback: "categories",
12
+ views: "categories",
13
13
  });
14
14
  }
15
15
 
@@ -1,18 +1,25 @@
1
1
  const routeCollection = (adapter, resource, handler, resourceConfig = {}) => {
2
+ const views = resourceConfig.views ?? resource;
3
+
2
4
  // Create route definitions
3
5
  const routes = [
4
- ["GET", `/${resource}`, "index", handler.index],
5
- ["GET", `/${resource}/new`, "create_form", handler.create_form],
6
- ["GET", `/${resource}/:id`, "show", handler.show],
7
- ["GET", `/${resource}/:id/edit`, "edit_form", handler.edit_form],
8
- ["POST", `/${resource}`, "create_form", handler.create],
9
- ["POST", `/${resource}/:id`, "edit_form", handler.update],
10
- ["DELETE", `/${resource}/:id`, "destroy", handler.destroy]
6
+ ["GET", `/${resource}`, "index", handler.index],
7
+ ["GET", `/${resource}/new`, "create_form", handler.create_form],
8
+ ["GET", `/${resource}/:id`, "show", handler.show],
9
+ ["GET", `/${resource}/:id/edit`, "edit_form", handler.edit_form],
10
+ ["POST", `/${resource}`, "create_form", handler.create],
11
+ ["POST", `/${resource}/:id`, "edit_form", handler.update],
12
+ ["DELETE", `/${resource}/:id`, "destroy", handler.destroy],
11
13
  ];
12
14
 
13
15
  // Map routes to full configuration
14
16
  const mapping = routes.map(([verb, path, action, fn]) => [
15
- verb, path, resource, resource, action, fn
17
+ verb,
18
+ path,
19
+ resource,
20
+ views,
21
+ action,
22
+ fn,
16
23
  ]);
17
24
 
18
25
  adapter.routeCollection(mapping, resourceConfig);
@@ -1,5 +1,5 @@
1
1
  const routeNestedCollection = (adapter, parent, resource, handler, resourceConfig = {}) => {
2
- const views = `${parent}/${resource}`;
2
+ const views = resourceConfig.views ?? `${parent}/${resource}`;
3
3
 
4
4
  // Define routes exactly as they were in the original implementation
5
5
  // to maintain compatibility with the tests
@@ -1,5 +1,5 @@
1
1
  const routeNestedMember = (adapter, parent, resource, handler, resourceConfig = {}) => {
2
- const views = `${parent}/${resource}`;
2
+ const views = resourceConfig.views ?? `${parent}/${resource}`;
3
3
  const basePath = `/${parent}/:parent_id/${resource}`;
4
4
 
5
5
  // Create route definitions
@@ -27,13 +27,11 @@ function routeResource(
27
27
  adapter,
28
28
  resourceType,
29
29
  resourceTypePlural,
30
- { dateFields = [], viewsType, viewsTypePlural } = {},
30
+ { dateFields = [] } = {},
31
31
  ) {
32
32
  const baseResource = resourceTypePlural;
33
33
  const revisionsBaseResource = `${resourceType}_revisions`;
34
34
  const changesBaseResource = `${resourceType}_changes`;
35
- const viewsRevisions = `${viewsType}_revisions`;
36
- const viewsChanges = `${viewsType}_changes`;
37
35
 
38
36
  const resourceConfig = {
39
37
  resourceType,
@@ -46,7 +44,7 @@ function routeResource(
46
44
  "GET",
47
45
  `/${baseResource}/exports`,
48
46
  "exports",
49
- `${viewsTypePlural}/exports`,
47
+ "resources/exports",
50
48
  "index",
51
49
  ExportsHandler.index,
52
50
  ],
@@ -55,7 +53,7 @@ function routeResource(
55
53
 
56
54
  routeCollection(adapter, baseResource, ResourcesHandler, {
57
55
  ...resourceConfig,
58
- viewsFallback: viewsTypePlural,
56
+ views: "resources",
59
57
  });
60
58
 
61
59
  routeNestedCollection(
@@ -63,12 +61,12 @@ function routeResource(
63
61
  baseResource,
64
62
  "translations",
65
63
  TranslationsHandler,
66
- { ...resourceConfig, viewsFallback: `${viewsTypePlural}/translations` },
64
+ { ...resourceConfig, views: "resources/translations" },
67
65
  );
68
66
 
69
67
  routeNestedCollection(adapter, baseResource, "history", HistoryHandler, {
70
68
  ...resourceConfig,
71
- viewsFallback: `${viewsTypePlural}/history`,
69
+ views: "resources/history",
72
70
  });
73
71
 
74
72
  routeNestedCollection(
@@ -78,38 +76,38 @@ function routeResource(
78
76
  ResourceRevisionsHandler,
79
77
  {
80
78
  ...resourceConfig,
81
- viewsFallback: `${viewsTypePlural}/${viewsRevisions}`,
79
+ views: "resource_revisions",
82
80
  },
83
81
  );
84
82
 
85
83
  routeNestedMember(adapter, revisionsBaseResource, "general", GeneralHandler, {
86
84
  ...resourceConfig,
87
- viewsFallback: `${viewsRevisions}/general`,
85
+ views: "resource_revisions/general",
88
86
  });
89
87
 
90
88
  routeNestedMember(adapter, revisionsBaseResource, "visuals", VisualHandler, {
91
89
  ...resourceConfig,
92
- viewsFallback: `${viewsRevisions}/visuals`,
90
+ views: "resource_revisions/visuals",
93
91
  });
94
92
 
95
93
  routeNestedMember(adapter, revisionsBaseResource, "codes", CodeHandler, {
96
94
  ...resourceConfig,
97
- viewsFallback: `${viewsRevisions}/codes`,
95
+ views: "resource_revisions/codes",
98
96
  });
99
97
 
100
98
  routeNestedMember(adapter, revisionsBaseResource, "meta", MetaHandler, {
101
99
  ...resourceConfig,
102
- viewsFallback: `${viewsRevisions}/meta`,
100
+ views: "resource_revisions/meta",
103
101
  });
104
102
 
105
103
  routeNestedMember(adapter, revisionsBaseResource, "tags", TagHandler, {
106
104
  ...resourceConfig,
107
- viewsFallback: `${viewsRevisions}/tags`,
105
+ views: "resource_revisions/tags",
108
106
  });
109
107
 
110
108
  routeNestedCollection(adapter, revisionsBaseResource, "locks", LocksHandler, {
111
109
  ...resourceConfig,
112
- viewsFallback: `${viewsRevisions}/locks`,
110
+ views: "resource_revisions/locks",
113
111
  });
114
112
 
115
113
  routeNestedCollection(
@@ -119,23 +117,23 @@ function routeResource(
119
117
  UnlocksHandler,
120
118
  {
121
119
  ...resourceConfig,
122
- viewsFallback: `${viewsRevisions}/unlocks`,
120
+ views: "resource_revisions/unlocks",
123
121
  },
124
122
  );
125
123
 
126
124
  routeNestedCollection(adapter, baseResource, "clones", ClonesHandler, {
127
125
  ...resourceConfig,
128
- viewsFallback: `${viewsTypePlural}/clones`,
126
+ views: "resources/clones",
129
127
  });
130
128
 
131
129
  routeNestedCollection(adapter, baseResource, "urls", URLsHandler, {
132
130
  ...resourceConfig,
133
- viewsFallback: `${viewsTypePlural}/urls`,
131
+ views: "resources/urls",
134
132
  });
135
133
 
136
134
  routeNestedCollection(adapter, baseResource, "deletes", DeletesHandler, {
137
135
  ...resourceConfig,
138
- viewsFallback: `${viewsTypePlural}/deletes`,
136
+ views: "resources/deletes",
139
137
  });
140
138
 
141
139
  routeNestedCollection(
@@ -145,7 +143,7 @@ function routeResource(
145
143
  RevertsHandler,
146
144
  {
147
145
  ...resourceConfig,
148
- viewsFallback: `${viewsChanges}/reverts`,
146
+ views: "resource_changes/reverts",
149
147
  },
150
148
  );
151
149
 
@@ -156,7 +154,7 @@ function routeResource(
156
154
  PublishesHandler,
157
155
  {
158
156
  ...resourceConfig,
159
- viewsFallback: `${viewsRevisions}/publishes`,
157
+ views: "resource_revisions/publishes",
160
158
  },
161
159
  );
162
160
 
@@ -167,7 +165,7 @@ function routeResource(
167
165
  CancelSchedulesHandler,
168
166
  {
169
167
  ...resourceConfig,
170
- viewsFallback: `${viewsRevisions}/cancel_schedules`,
168
+ views: "resource_revisions/cancel_schedules",
171
169
  },
172
170
  );
173
171
 
@@ -2,10 +2,8 @@ import DashboardsHandler from "./handlers/DashboardsHandler";
2
2
  import RedirectsHandler from "./handlers/RedirectsHandler";
3
3
  import TagsAPIHandler from "./handlers/TagsAPIHandler";
4
4
  import TagsHandler from "./handlers/TagsHandler";
5
- import routeArticlesModule from "./routeArticlesModule";
6
5
  import routeCollection from "./routeCollection";
7
- import routeEventsModule from "./routeEventsModule";
8
- import routePagesModule from "./routePagesModule";
6
+ import routeResource from "./routeResource";
9
7
  import routeSettings from "./routeSettings";
10
8
 
11
9
  function routeStandard(adapter) {
@@ -29,9 +27,11 @@ function routeStandard(adapter) {
29
27
  routeCollection(adapter, "tags", TagsHandler);
30
28
  routeCollection(adapter, "api/tags", TagsAPIHandler);
31
29
  routeSettings(adapter);
32
- routePagesModule(adapter);
33
- routeArticlesModule(adapter);
34
- routeEventsModule(adapter);
30
+ routeResource(adapter, "page", "pages", { dateFields: [] });
31
+ routeResource(adapter, "article", "articles", { dateFields: ["publish_at"] });
32
+ routeResource(adapter, "event", "events", {
33
+ dateFields: ["publish_at", "starts_at", "ends_at"],
34
+ });
35
35
  }
36
36
 
37
37
  export default routeStandard;
@@ -86,25 +86,17 @@ describe("HonoAdapter.getActionPath", () => {
86
86
  test("returns app path when it exists", () => {
87
87
  existsSync.mockReturnValue(true);
88
88
 
89
- const result = adapter.getActionPath("pages", "pages", "index");
89
+ const result = adapter.getActionPath("resources", "index");
90
90
 
91
- expect(result).toBe(`${process.cwd()}/src/views/pages/index.ejs`);
91
+ expect(result).toBe(`${process.cwd()}/src/views/resources/index.ejs`);
92
92
  });
93
93
 
94
- test("returns package path with viewsFallback when app missing", () => {
94
+ test("returns package path when app missing", () => {
95
95
  existsSync.mockReturnValue(false);
96
96
 
97
- const result = adapter.getActionPath("pages", "fallback", "index");
97
+ const result = adapter.getActionPath("resources", "index");
98
98
 
99
- expect(result).toContain("/views/fallback/index.ejs");
100
- });
101
-
102
- test("returns package path with views when no fallback", () => {
103
- existsSync.mockReturnValue(false);
104
-
105
- const result = adapter.getActionPath("pages", null, "index");
106
-
107
- expect(result).toContain("/views/pages/index.ejs");
99
+ expect(result).toContain("/views/resources/index.ejs");
108
100
  });
109
101
  });
110
102
 
@@ -140,7 +132,7 @@ describe("HonoAdapter.renderPartial", () => {
140
132
  readFileSync.mockReturnValue("<%= foo %>");
141
133
  ejs.render.mockReturnValue("rendered");
142
134
 
143
- const render = adapter.renderPartial({ foo: "bar" }, "pages", null);
135
+ const render = adapter.renderPartial({ foo: "bar" }, "resources");
144
136
  const result = render("_partial.ejs", { extra: 1 });
145
137
 
146
138
  expect(result).toBe("rendered");
@@ -159,7 +151,7 @@ describe("HonoAdapter.renderPartial", () => {
159
151
  throw err;
160
152
  });
161
153
 
162
- const render = adapter.renderPartial({}, "pages", null);
154
+ const render = adapter.renderPartial({}, "resources");
163
155
  const result = render("_partial.ejs", {});
164
156
 
165
157
  expect(result).toContain("Error rendering");
@@ -170,7 +162,7 @@ describe("HonoAdapter.renderPartial", () => {
170
162
  test("throws when partial cannot be located", () => {
171
163
  existsSync.mockReturnValue(false);
172
164
 
173
- const render = adapter.renderPartial({}, "pages", "fallback");
165
+ const render = adapter.renderPartial({}, "resources");
174
166
 
175
167
  expect(() => render("_missing.ejs", {})).toThrow(/Template not found/);
176
168
  });
@@ -195,8 +187,7 @@ describe("HonoAdapter.renderAction", () => {
195
187
  ejs.renderFile.mockResolvedValue("<html>...</html>");
196
188
 
197
189
  const result = await adapter.renderAction({
198
- views: "pages",
199
- viewsFallback: null,
190
+ views: "resources",
200
191
  action: "index",
201
192
  assigns: { title: "Hi" },
202
193
  });
@@ -215,8 +206,7 @@ describe("HonoAdapter.renderAction", () => {
215
206
  });
216
207
 
217
208
  const result = await adapter.renderAction({
218
- views: "pages",
219
- viewsFallback: null,
209
+ views: "resources",
220
210
  action: "index",
221
211
  assigns: {},
222
212
  });
@@ -395,8 +385,8 @@ describe("HonoAdapter.createAction", () => {
395
385
  const handler = jest.fn().mockResolvedValue({ assigns: { title: "Hi" } });
396
386
 
397
387
  await adapter.createAction(
398
- ["GET", "/pages", "pages", "pages", "index", handler],
399
- { viewsFallback: "pages" }
388
+ ["GET", "/pages", "pages", "resources", "index", handler],
389
+ {}
400
390
  );
401
391
 
402
392
  const registered = getRegisteredHandler(adapter, "/en/pages");
@@ -631,10 +621,10 @@ describe("HonoAdapter.routeCollection (instance)", () => {
631
621
  ["POST", "/a", "a", "a", "create", handler],
632
622
  ];
633
623
 
634
- adapter.routeCollection(mapping, { viewsFallback: "a" });
624
+ adapter.routeCollection(mapping, { views: "a" });
635
625
 
636
626
  expect(createSpy).toHaveBeenCalledTimes(2);
637
- expect(createSpy).toHaveBeenCalledWith(mapping[0], { viewsFallback: "a" });
638
- expect(createSpy).toHaveBeenCalledWith(mapping[1], { viewsFallback: "a" });
627
+ expect(createSpy).toHaveBeenCalledWith(mapping[0], { views: "a" });
628
+ expect(createSpy).toHaveBeenCalledWith(mapping[1], { views: "a" });
639
629
  });
640
630
  });
@@ -9,7 +9,7 @@ describe("routeCategoriesModule", () => {
9
9
  routeCollection.mockClear();
10
10
  });
11
11
 
12
- test("registers categories collection with categoryType + plural + viewsFallback", () => {
12
+ test("registers categories collection with categoryType + plural + views", () => {
13
13
  const adapter = {};
14
14
 
15
15
  routeCategoriesModule(adapter, "tag", "tags");
@@ -17,7 +17,7 @@ describe("routeCategoriesModule", () => {
17
17
  expect(routeCollection).toHaveBeenCalledWith(adapter, "tags", CategoriesHandler, {
18
18
  categoryType: "tag",
19
19
  categoryTypePlural: "tags",
20
- viewsFallback: "categories",
20
+ views: "categories",
21
21
  });
22
22
  });
23
23
  });