@raketa-cloud/admin 1.8.10 → 1.8.12
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.
- package/dist/application.css +109 -0
- package/package.json +4 -2
- package/src/HonoAdapter.js +41 -18
- package/src/Logger.js +7 -8
- package/src/RaketaContext.js +1 -0
- package/src/cipher.js +2 -2
- package/src/cloud/ContentTasks.js +31 -0
- package/src/cloud/RaketaClient.js +1 -1
- package/src/cloud/Redirects.js +2 -2
- package/src/cloud/ResourceChanges.js +1 -1
- package/src/cloud/ResourceRevisions.js +2 -2
- package/src/cloud/Resources.js +28 -12
- package/src/cloud/Tags.js +4 -4
- package/src/cloud/documents/common.js +16 -0
- package/src/cloud/documents/contentTasksDocuments.js +59 -0
- package/src/cloud/documents/resourcesDocuments.js +12 -0
- package/src/filters.js +3 -3
- package/src/handlers/TagsHandler.js +2 -2
- package/src/handlers/_shared/getResourceUpdateDestination.js +1 -1
- package/src/handlers/categories/index.js +3 -3
- package/src/handlers/content_tasks/ContentTasksHandler.js +32 -0
- package/src/handlers/resource_revisions/LocksHandler.js +4 -1
- package/src/handlers/resources/ClonesHandler.js +1 -3
- package/src/handlers/resources/ExportsHandler.js +1 -5
- package/src/handlers/resources/ResourcesHandler.js +1 -1
- package/src/handlers/resources/TranslationsHandler.js +28 -19
- package/src/handlers/resources/URLsHandler.js +3 -1
- package/src/helpers/AuthHelper.js +1 -1
- package/src/helpers/FormBuilder.js +14 -14
- package/src/helpers/Pagination.js +5 -5
- package/src/helpers/historyUtils.js +3 -3
- package/src/helpers/utils.js +6 -1
- package/src/index.js +1 -0
- package/src/routeMember.js +9 -4
- package/src/routeNestedCollection.js +14 -29
- package/src/routeNestedMember.js +17 -6
- package/src/routeStandard.js +5 -1
- package/src/setupAuthentication.js +1 -1
- package/src/setupCloud.js +5 -0
- package/src/tests/Adapter.test.js +2 -2
- package/src/tests/HonoAdapter.coverage.test.js +44 -22
- package/src/tests/HonoAdapter.filter.test.js +28 -18
- package/src/tests/HonoAdapter.test.js +3 -3
- package/src/tests/RaketaClient.test.js +427 -413
- package/src/tests/RaketaContext.test.js +1 -1
- package/src/tests/buildResourcePath.test.js +1 -1
- package/src/tests/cipher.test.js +16 -16
- package/src/tests/filters.test.js +24 -24
- package/src/tests/handlers/RedirectsHandler.test/destroy.test.js +1 -1
- package/src/tests/handlers/TagsHandler.test/create.test.js +2 -2
- package/src/tests/handlers/TagsHandler.test/destroy.test.js +1 -1
- package/src/tests/handlers/TagsHandler.test/update.test.js +2 -2
- package/src/tests/handlers/categories/create.test.js +2 -2
- package/src/tests/handlers/categories/destroy.test.js +1 -1
- package/src/tests/handlers/content_tasks/ContentTasksHandler.test/index.test.js +161 -0
- package/src/tests/handlers/resource_revisions/CancelSchedulesHandler.test/create.test.js +2 -2
- package/src/tests/handlers/resource_revisions/CodeHandler.test/update.test.js +1 -1
- package/src/tests/handlers/resource_revisions/GeneralHandler.test/update.test.js +1 -1
- package/src/tests/handlers/resource_revisions/LocksHandler.test/create.test.js +5 -5
- package/src/tests/handlers/resource_revisions/LocksHandler.test/create_form.test.js +6 -2
- package/src/tests/handlers/resource_revisions/MetaHandler.test/update.test.js +1 -1
- package/src/tests/handlers/resource_revisions/PublishesHandler.test/create.test.js +5 -5
- package/src/tests/handlers/resource_revisions/ResourceRevisionsHandler.test/create.test.js +2 -2
- package/src/tests/handlers/resource_revisions/ResourceRevisionsHandler.test/destroy.test.js +1 -1
- package/src/tests/handlers/resource_revisions/RevertsHandler.test/create.test.js +18 -3
- package/src/tests/handlers/resource_revisions/TagHandler.test/update.test.js +1 -1
- package/src/tests/handlers/resource_revisions/UnlocksHandler.test/create.test.js +2 -2
- package/src/tests/handlers/resource_revisions/VisualHandler.test/update.test.js +1 -1
- package/src/tests/handlers/resource_revisions/WidgetHandler.test/update.test.js +2 -2
- package/src/tests/handlers/resources/ChangeHandler.test/show.test.js +7 -2
- package/src/tests/handlers/resources/ClonesHandler.test/create.test.js +1 -3
- package/src/tests/handlers/resources/ExportsHandler.test/index.test.js +8 -8
- package/src/tests/handlers/resources/HistoryHandler.test/index.test.js +1 -1
- package/src/tests/handlers/resources/ResourcesAPIHandler.test/index.test.js +1 -5
- package/src/tests/handlers/resources/ResourcesHandler.test/create.test.js +2 -2
- package/src/tests/handlers/resources/ResourcesHandler.test/show.test.js +1 -1
- package/src/tests/handlers/resources/TranslationsHandler.test/create.test.js +24 -14
- package/src/tests/handlers/resources/TranslationsHandler.test/create_form.test.js +1 -1
- package/src/tests/handlers/resources/TranslationsHandler.test/index.test.js +3 -3
- package/src/tests/handlers/resources/URLsHandler.test/create.test.js +4 -6
- package/src/tests/helpers/AuthHelper.test.js +11 -12
- package/src/tests/helpers/CSVExportHelper.test.js +3 -3
- package/src/tests/helpers/FormBuilder.test.js +21 -21
- package/src/tests/helpers/HTMLBuilder.test.js +4 -4
- package/src/tests/helpers/Inflector.test.js +1 -1
- package/src/tests/helpers/Pagination.test.js +1 -1
- package/src/tests/helpers/utils.test.js +46 -0
- package/src/tests/routeCategoriesModule.test.js +10 -5
- package/src/tests/routeCollection.test.js +1 -1
- package/src/tests/routeMember.test.js +2 -2
- package/src/tests/routeNestedCollection.test.js +3 -3
- package/src/tests/routeNestedMember.test.js +3 -3
- package/src/tests/routeResourceModule.test.js +15 -16
- package/src/tests/routeSettings.test.js +3 -3
- package/src/tests/routeStandard.test.js +27 -9
- package/src/tests/setupAuthentication.test.js +9 -6
- package/src/tests/support/factory.js +33 -0
- package/src/tests/utils.test.js +19 -19
- package/src/views/content_tasks/index.ejs +191 -0
- package/src/views/layouts/application.ejs +2 -1
- package/src/views/resources/_shared/_toolbar.ejs +33 -2
- package/src/views/resources/_shared/_translations_strip.ejs +71 -0
- package/src/views/resources/index.ejs +5 -0
- package/src/views/resources/show.ejs +1 -29
- package/src/views/resources/translations/create_form.ejs +13 -0
package/dist/application.css
CHANGED
|
@@ -1586,10 +1586,26 @@ select {
|
|
|
1586
1586
|
position: sticky;
|
|
1587
1587
|
}
|
|
1588
1588
|
|
|
1589
|
+
.-right-0 {
|
|
1590
|
+
right: -0px;
|
|
1591
|
+
}
|
|
1592
|
+
|
|
1593
|
+
.-right-0\.5 {
|
|
1594
|
+
right: -0.125rem;
|
|
1595
|
+
}
|
|
1596
|
+
|
|
1589
1597
|
.-right-4 {
|
|
1590
1598
|
right: -1rem;
|
|
1591
1599
|
}
|
|
1592
1600
|
|
|
1601
|
+
.-top-0 {
|
|
1602
|
+
top: -0px;
|
|
1603
|
+
}
|
|
1604
|
+
|
|
1605
|
+
.-top-0\.5 {
|
|
1606
|
+
top: -0.125rem;
|
|
1607
|
+
}
|
|
1608
|
+
|
|
1593
1609
|
.bottom-20 {
|
|
1594
1610
|
bottom: 5rem;
|
|
1595
1611
|
}
|
|
@@ -1749,6 +1765,11 @@ select {
|
|
|
1749
1765
|
aspect-ratio: 1 / 1;
|
|
1750
1766
|
}
|
|
1751
1767
|
|
|
1768
|
+
.size-12 {
|
|
1769
|
+
width: 3rem;
|
|
1770
|
+
height: 3rem;
|
|
1771
|
+
}
|
|
1772
|
+
|
|
1752
1773
|
.size-14 {
|
|
1753
1774
|
width: 3.5rem;
|
|
1754
1775
|
height: 3.5rem;
|
|
@@ -1774,6 +1795,10 @@ select {
|
|
|
1774
1795
|
height: 2rem;
|
|
1775
1796
|
}
|
|
1776
1797
|
|
|
1798
|
+
.h-3 {
|
|
1799
|
+
height: 0.75rem;
|
|
1800
|
+
}
|
|
1801
|
+
|
|
1777
1802
|
.h-5 {
|
|
1778
1803
|
height: 1.25rem;
|
|
1779
1804
|
}
|
|
@@ -1811,10 +1836,18 @@ select {
|
|
|
1811
1836
|
width: 50%;
|
|
1812
1837
|
}
|
|
1813
1838
|
|
|
1839
|
+
.w-1\/3 {
|
|
1840
|
+
width: 33.333333%;
|
|
1841
|
+
}
|
|
1842
|
+
|
|
1814
1843
|
.w-16 {
|
|
1815
1844
|
width: 4rem;
|
|
1816
1845
|
}
|
|
1817
1846
|
|
|
1847
|
+
.w-3 {
|
|
1848
|
+
width: 0.75rem;
|
|
1849
|
+
}
|
|
1850
|
+
|
|
1818
1851
|
.w-48 {
|
|
1819
1852
|
width: 12rem;
|
|
1820
1853
|
}
|
|
@@ -1864,6 +1897,17 @@ select {
|
|
|
1864
1897
|
transform: translate(var(--tw-translate-x), var(--tw-translate-y)) rotate(var(--tw-rotate)) skewX(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y));
|
|
1865
1898
|
}
|
|
1866
1899
|
|
|
1900
|
+
@keyframes ping {
|
|
1901
|
+
75%, 100% {
|
|
1902
|
+
transform: scale(2);
|
|
1903
|
+
opacity: 0;
|
|
1904
|
+
}
|
|
1905
|
+
}
|
|
1906
|
+
|
|
1907
|
+
.animate-ping {
|
|
1908
|
+
animation: ping 1s cubic-bezier(0, 0, 0.2, 1) infinite;
|
|
1909
|
+
}
|
|
1910
|
+
|
|
1867
1911
|
.cursor-not-allowed {
|
|
1868
1912
|
cursor: not-allowed;
|
|
1869
1913
|
}
|
|
@@ -2003,6 +2047,16 @@ select {
|
|
|
2003
2047
|
background-color: rgb(0 0 0 / var(--tw-bg-opacity));
|
|
2004
2048
|
}
|
|
2005
2049
|
|
|
2050
|
+
.bg-blue-100 {
|
|
2051
|
+
--tw-bg-opacity: 1;
|
|
2052
|
+
background-color: rgb(219 234 254 / var(--tw-bg-opacity));
|
|
2053
|
+
}
|
|
2054
|
+
|
|
2055
|
+
.bg-emerald-100 {
|
|
2056
|
+
--tw-bg-opacity: 1;
|
|
2057
|
+
background-color: rgb(209 250 229 / var(--tw-bg-opacity));
|
|
2058
|
+
}
|
|
2059
|
+
|
|
2006
2060
|
.bg-orange-100 {
|
|
2007
2061
|
--tw-bg-opacity: 1;
|
|
2008
2062
|
background-color: rgb(255 237 213 / var(--tw-bg-opacity));
|
|
@@ -2026,6 +2080,11 @@ select {
|
|
|
2026
2080
|
background-color: rgba(var(--primary), 0.05);
|
|
2027
2081
|
}
|
|
2028
2082
|
|
|
2083
|
+
.bg-red-100 {
|
|
2084
|
+
--tw-bg-opacity: 1;
|
|
2085
|
+
background-color: rgb(254 226 226 / var(--tw-bg-opacity));
|
|
2086
|
+
}
|
|
2087
|
+
|
|
2029
2088
|
.bg-white {
|
|
2030
2089
|
--tw-bg-opacity: 1;
|
|
2031
2090
|
background-color: rgb(255 255 255 / var(--tw-bg-opacity));
|
|
@@ -2178,11 +2237,21 @@ select {
|
|
|
2178
2237
|
color: rgb(60 64 67 / var(--tw-text-opacity));
|
|
2179
2238
|
}
|
|
2180
2239
|
|
|
2240
|
+
.text-blue-700 {
|
|
2241
|
+
--tw-text-opacity: 1;
|
|
2242
|
+
color: rgb(29 78 216 / var(--tw-text-opacity));
|
|
2243
|
+
}
|
|
2244
|
+
|
|
2181
2245
|
.text-emerald-600 {
|
|
2182
2246
|
--tw-text-opacity: 1;
|
|
2183
2247
|
color: rgb(5 150 105 / var(--tw-text-opacity));
|
|
2184
2248
|
}
|
|
2185
2249
|
|
|
2250
|
+
.text-emerald-700 {
|
|
2251
|
+
--tw-text-opacity: 1;
|
|
2252
|
+
color: rgb(4 120 87 / var(--tw-text-opacity));
|
|
2253
|
+
}
|
|
2254
|
+
|
|
2186
2255
|
.text-gray-400 {
|
|
2187
2256
|
--tw-text-opacity: 1;
|
|
2188
2257
|
color: rgb(156 163 175 / var(--tw-text-opacity));
|
|
@@ -2206,6 +2275,10 @@ select {
|
|
|
2206
2275
|
color: rgba(var(--foreground), 0.5);
|
|
2207
2276
|
}
|
|
2208
2277
|
|
|
2278
|
+
.text-raketa-foreground\/70 {
|
|
2279
|
+
color: rgba(var(--foreground), 0.7);
|
|
2280
|
+
}
|
|
2281
|
+
|
|
2209
2282
|
.text-raketa-primary {
|
|
2210
2283
|
--tw-text-opacity: 1;
|
|
2211
2284
|
color: rgba(var(--primary), var(--tw-text-opacity));
|
|
@@ -2221,6 +2294,11 @@ select {
|
|
|
2221
2294
|
color: rgb(220 38 38 / var(--tw-text-opacity));
|
|
2222
2295
|
}
|
|
2223
2296
|
|
|
2297
|
+
.text-red-700 {
|
|
2298
|
+
--tw-text-opacity: 1;
|
|
2299
|
+
color: rgb(185 28 28 / var(--tw-text-opacity));
|
|
2300
|
+
}
|
|
2301
|
+
|
|
2224
2302
|
.text-rose-600 {
|
|
2225
2303
|
--tw-text-opacity: 1;
|
|
2226
2304
|
color: rgb(225 29 72 / var(--tw-text-opacity));
|
|
@@ -2247,6 +2325,10 @@ select {
|
|
|
2247
2325
|
opacity: 0.6;
|
|
2248
2326
|
}
|
|
2249
2327
|
|
|
2328
|
+
.opacity-75 {
|
|
2329
|
+
opacity: 0.75;
|
|
2330
|
+
}
|
|
2331
|
+
|
|
2250
2332
|
.shadow-inner {
|
|
2251
2333
|
--tw-shadow: inset 0 2px 4px 0 rgb(0 0 0 / 0.05);
|
|
2252
2334
|
--tw-shadow-colored: inset 0 2px 4px 0 var(--tw-shadow-color);
|
|
@@ -3152,6 +3234,14 @@ body {
|
|
|
3152
3234
|
border-color: rgb(64 64 64 / var(--tw-border-opacity));
|
|
3153
3235
|
}
|
|
3154
3236
|
|
|
3237
|
+
.dark\:bg-blue-900\/50:where(.dark, .dark *) {
|
|
3238
|
+
background-color: rgb(30 58 138 / 0.5);
|
|
3239
|
+
}
|
|
3240
|
+
|
|
3241
|
+
.dark\:bg-emerald-900\/50:where(.dark, .dark *) {
|
|
3242
|
+
background-color: rgb(6 78 59 / 0.5);
|
|
3243
|
+
}
|
|
3244
|
+
|
|
3155
3245
|
.dark\:bg-orange-900\/50:where(.dark, .dark *) {
|
|
3156
3246
|
background-color: rgb(124 45 18 / 0.5);
|
|
3157
3247
|
}
|
|
@@ -3160,11 +3250,30 @@ body {
|
|
|
3160
3250
|
background-color: rgba(var(--primary), 0.15);
|
|
3161
3251
|
}
|
|
3162
3252
|
|
|
3253
|
+
.dark\:bg-red-900\/50:where(.dark, .dark *) {
|
|
3254
|
+
background-color: rgb(127 29 29 / 0.5);
|
|
3255
|
+
}
|
|
3256
|
+
|
|
3257
|
+
.dark\:text-blue-300:where(.dark, .dark *) {
|
|
3258
|
+
--tw-text-opacity: 1;
|
|
3259
|
+
color: rgb(147 197 253 / var(--tw-text-opacity));
|
|
3260
|
+
}
|
|
3261
|
+
|
|
3262
|
+
.dark\:text-emerald-300:where(.dark, .dark *) {
|
|
3263
|
+
--tw-text-opacity: 1;
|
|
3264
|
+
color: rgb(110 231 183 / var(--tw-text-opacity));
|
|
3265
|
+
}
|
|
3266
|
+
|
|
3163
3267
|
.dark\:text-orange-300:where(.dark, .dark *) {
|
|
3164
3268
|
--tw-text-opacity: 1;
|
|
3165
3269
|
color: rgb(253 186 116 / var(--tw-text-opacity));
|
|
3166
3270
|
}
|
|
3167
3271
|
|
|
3272
|
+
.dark\:text-red-300:where(.dark, .dark *) {
|
|
3273
|
+
--tw-text-opacity: 1;
|
|
3274
|
+
color: rgb(252 165 165 / var(--tw-text-opacity));
|
|
3275
|
+
}
|
|
3276
|
+
|
|
3168
3277
|
.dark\:invert:where(.dark, .dark *) {
|
|
3169
3278
|
--tw-invert: invert(100%);
|
|
3170
3279
|
filter: var(--tw-blur) var(--tw-brightness) var(--tw-contrast) var(--tw-grayscale) var(--tw-hue-rotate) var(--tw-invert) var(--tw-saturate) var(--tw-sepia) var(--tw-drop-shadow);
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@raketa-cloud/admin",
|
|
3
|
-
"version": "1.8.
|
|
3
|
+
"version": "1.8.12",
|
|
4
4
|
"main": "src/index.js",
|
|
5
5
|
"files": [
|
|
6
6
|
"src/",
|
|
@@ -9,7 +9,9 @@
|
|
|
9
9
|
"scripts": {
|
|
10
10
|
"dev": "npx tailwindcss -i ./src/styles/application.css -o ../../apps/admin/static/application.css --watch",
|
|
11
11
|
"test": "jest --coverage --coverageReporters=html --coverageReporters=\"text-summary\"",
|
|
12
|
-
"prepare": "npx tailwindcss -i ./src/styles/application.css -o ./dist/application.css"
|
|
12
|
+
"prepare": "npx tailwindcss -i ./src/styles/application.css -o ./dist/application.css",
|
|
13
|
+
"lint": "biome lint .",
|
|
14
|
+
"lint:fix": "biome lint --write --unsafe ."
|
|
13
15
|
},
|
|
14
16
|
"devDependencies": {
|
|
15
17
|
"@babel/core": "7.29.7",
|
package/src/HonoAdapter.js
CHANGED
|
@@ -65,21 +65,36 @@ function putIn(result, key, value) {
|
|
|
65
65
|
const sanitizePath = (filePath) =>
|
|
66
66
|
path.normalize(path.join("/", ...filePath.split("/")));
|
|
67
67
|
|
|
68
|
-
// Find template path, preferring an app override over the package template
|
|
69
68
|
function getPartialPath(partialPath, views, viewsFallback) {
|
|
69
|
+
// First resolve the partial path relative to the views directory
|
|
70
|
+
// This normalizes "../_nav.ejs" relative to "page_revisions/codes"
|
|
71
|
+
// Result: "page_revisions/_nav.ejs"
|
|
72
|
+
const resolvedPartialPath = sanitizePath(`${views}/${partialPath}`);
|
|
73
|
+
|
|
70
74
|
const paths = [
|
|
71
|
-
sanitizePath(`${process.cwd()}/src/views/${
|
|
72
|
-
sanitizePath(`${currentPath}/views/${
|
|
73
|
-
|
|
74
|
-
|
|
75
|
+
sanitizePath(`${process.cwd()}/src/views/${resolvedPartialPath}`),
|
|
76
|
+
sanitizePath(`${currentPath}/views/${resolvedPartialPath}`),
|
|
77
|
+
];
|
|
78
|
+
|
|
79
|
+
// For fallback, replace the resource name with the fallback path
|
|
80
|
+
if (viewsFallback) {
|
|
81
|
+
// Extract base resource (e.g., "page_revisions" from "page_revisions/codes")
|
|
82
|
+
const resourceBase = views.split("/")[0];
|
|
83
|
+
// Replace resource base with fallback base
|
|
84
|
+
// "page_revisions/_nav.ejs" → "resource_revisions/_nav.ejs" ✓
|
|
85
|
+
const fallbackPath = resolvedPartialPath.replace(
|
|
86
|
+
resourceBase,
|
|
87
|
+
viewsFallback,
|
|
88
|
+
);
|
|
89
|
+
paths.push(sanitizePath(`${currentPath}/views/${fallbackPath}`));
|
|
90
|
+
}
|
|
75
91
|
|
|
76
|
-
// Return first existing path
|
|
77
92
|
const existingPath = paths.find((path) => existsSync(path));
|
|
78
93
|
|
|
79
94
|
if (existingPath) return existingPath;
|
|
80
95
|
|
|
81
96
|
throw new Error(
|
|
82
|
-
`Template not found: "${partialPath}"\nSearched in:\n${paths.join("\n")}
|
|
97
|
+
`Template not found: "${partialPath}"\nSearched in:\n${paths.join("\n")}`,
|
|
83
98
|
);
|
|
84
99
|
}
|
|
85
100
|
|
|
@@ -184,7 +199,7 @@ export default class HonoAdapter {
|
|
|
184
199
|
...assigns,
|
|
185
200
|
...localAssigns,
|
|
186
201
|
},
|
|
187
|
-
{ filename: partialPath }
|
|
202
|
+
{ filename: partialPath },
|
|
188
203
|
);
|
|
189
204
|
|
|
190
205
|
return rendered;
|
|
@@ -197,11 +212,18 @@ export default class HonoAdapter {
|
|
|
197
212
|
};
|
|
198
213
|
}
|
|
199
214
|
|
|
200
|
-
async renderAction(
|
|
215
|
+
async renderAction(
|
|
216
|
+
{ views, viewsFallback, action, assigns },
|
|
217
|
+
viewHelpersConfig = {},
|
|
218
|
+
) {
|
|
201
219
|
// Pick the parent here in the views so we can reuse stuff...
|
|
202
220
|
const fullTemplatePath = this.getActionPath(views, viewsFallback, action);
|
|
203
221
|
const renderAssigns = { ...this.getHelpers(viewHelpersConfig), ...assigns };
|
|
204
|
-
const renderPartialHelper = this.renderPartial(
|
|
222
|
+
const renderPartialHelper = this.renderPartial(
|
|
223
|
+
renderAssigns,
|
|
224
|
+
views,
|
|
225
|
+
viewsFallback,
|
|
226
|
+
);
|
|
205
227
|
|
|
206
228
|
try {
|
|
207
229
|
// Synchronously read the full template file
|
|
@@ -214,7 +236,7 @@ export default class HonoAdapter {
|
|
|
214
236
|
...renderAssigns,
|
|
215
237
|
render_partial: renderPartialHelper,
|
|
216
238
|
},
|
|
217
|
-
{ filename: fullTemplatePath }
|
|
239
|
+
{ filename: fullTemplatePath },
|
|
218
240
|
);
|
|
219
241
|
|
|
220
242
|
const fullPage = this.renderLayout(renderAssigns, rendered);
|
|
@@ -280,7 +302,7 @@ export default class HonoAdapter {
|
|
|
280
302
|
|
|
281
303
|
async createAction(
|
|
282
304
|
[verb, path, resource, views, action, handler],
|
|
283
|
-
resourceConfig
|
|
305
|
+
resourceConfig,
|
|
284
306
|
) {
|
|
285
307
|
const { i18n } = this.globalConfig;
|
|
286
308
|
|
|
@@ -294,7 +316,7 @@ export default class HonoAdapter {
|
|
|
294
316
|
next,
|
|
295
317
|
verb,
|
|
296
318
|
resource,
|
|
297
|
-
action
|
|
319
|
+
action,
|
|
298
320
|
);
|
|
299
321
|
|
|
300
322
|
// Set context properties
|
|
@@ -305,6 +327,7 @@ export default class HonoAdapter {
|
|
|
305
327
|
maxOpenRevisions: this.globalConfig?.maxOpenRevisions || 3,
|
|
306
328
|
locale: currentLocale,
|
|
307
329
|
remoteConfig: { ...this.globalConfig.remoteConfig },
|
|
330
|
+
globalConfig: this.globalConfig,
|
|
308
331
|
logger: Logger,
|
|
309
332
|
});
|
|
310
333
|
|
|
@@ -328,7 +351,7 @@ export default class HonoAdapter {
|
|
|
328
351
|
};
|
|
329
352
|
|
|
330
353
|
ctx.logger.info(
|
|
331
|
-
`${ctx.method} "${ctx.rawPath}" -> ${resource}/${action} | ${JSON.stringify(ctx.params)}
|
|
354
|
+
`${ctx.method} "${ctx.rawPath}" -> ${resource}/${action} | ${JSON.stringify(ctx.params)}`,
|
|
332
355
|
);
|
|
333
356
|
|
|
334
357
|
const assigns = {
|
|
@@ -373,7 +396,7 @@ export default class HonoAdapter {
|
|
|
373
396
|
|
|
374
397
|
Object.assign(
|
|
375
398
|
assigns.afterFilterAssigns,
|
|
376
|
-
afterResult.assigns || {}
|
|
399
|
+
afterResult.assigns || {},
|
|
377
400
|
);
|
|
378
401
|
}
|
|
379
402
|
}
|
|
@@ -395,7 +418,7 @@ export default class HonoAdapter {
|
|
|
395
418
|
action,
|
|
396
419
|
assigns: fullAssigns,
|
|
397
420
|
},
|
|
398
|
-
this.globalConfig?.helpers || {}
|
|
421
|
+
this.globalConfig?.helpers || {},
|
|
399
422
|
);
|
|
400
423
|
|
|
401
424
|
return routerCtx.html(rendered);
|
|
@@ -406,7 +429,7 @@ export default class HonoAdapter {
|
|
|
406
429
|
// Single method to handle all route types
|
|
407
430
|
routeCollection(mapping, resourceConfig) {
|
|
408
431
|
mapping.forEach((handlerMap) =>
|
|
409
|
-
this.createAction(handlerMap, resourceConfig)
|
|
432
|
+
this.createAction(handlerMap, resourceConfig),
|
|
410
433
|
);
|
|
411
434
|
}
|
|
412
435
|
|
|
@@ -428,7 +451,7 @@ export default class HonoAdapter {
|
|
|
428
451
|
applyHeaders(headers, router) {
|
|
429
452
|
if (!headers) return;
|
|
430
453
|
Object.entries(headers).forEach(([key, value]) =>
|
|
431
|
-
router.header(key, value)
|
|
454
|
+
router.header(key, value),
|
|
432
455
|
);
|
|
433
456
|
}
|
|
434
457
|
|
package/src/Logger.js
CHANGED
|
@@ -1,21 +1,20 @@
|
|
|
1
|
-
import { inspect } from
|
|
1
|
+
import { inspect } from "node:util";
|
|
2
2
|
|
|
3
|
-
|
|
4
|
-
|
|
3
|
+
const dump = (item) =>
|
|
4
|
+
inspect(item, { depth: null }).replace(/^\'/, "").replace(/\'$/, "");
|
|
5
5
|
|
|
6
6
|
const Logger = {
|
|
7
7
|
error: (item) => {
|
|
8
|
-
console.error(
|
|
8
|
+
console.error("[ERROR]", dump(item));
|
|
9
9
|
},
|
|
10
10
|
|
|
11
11
|
info: (item) => {
|
|
12
|
-
console.info(
|
|
12
|
+
console.info("[INFO]", dump(item));
|
|
13
13
|
},
|
|
14
14
|
|
|
15
15
|
debug: (item) => {
|
|
16
|
-
console.debug(
|
|
16
|
+
console.debug("[DEBUG]", dump(item));
|
|
17
17
|
},
|
|
18
|
-
}
|
|
18
|
+
};
|
|
19
19
|
|
|
20
20
|
export default Logger;
|
|
21
|
-
|
package/src/RaketaContext.js
CHANGED
package/src/cipher.js
CHANGED
|
@@ -17,7 +17,7 @@ function encrypt(plaintext, config) {
|
|
|
17
17
|
const cipher = createCipheriv(
|
|
18
18
|
ALGORITHM,
|
|
19
19
|
deriveKey(config.secrets.crypto_secret),
|
|
20
|
-
IV
|
|
20
|
+
IV,
|
|
21
21
|
);
|
|
22
22
|
|
|
23
23
|
let encrypted = cipher.update(plaintext, "utf8", "hex");
|
|
@@ -34,7 +34,7 @@ function decrypt(encryptedText, config) {
|
|
|
34
34
|
const decipher = createDecipheriv(
|
|
35
35
|
ALGORITHM,
|
|
36
36
|
deriveKey(config.secrets.crypto_secret),
|
|
37
|
-
iv
|
|
37
|
+
iv,
|
|
38
38
|
);
|
|
39
39
|
|
|
40
40
|
let decrypted = decipher.update(encrypted, "hex", "utf8");
|
|
@@ -0,0 +1,31 @@
|
|
|
1
|
+
import RaketaClient from "./RaketaClient.js";
|
|
2
|
+
import {
|
|
3
|
+
ContentTasksDocument,
|
|
4
|
+
ContentTaskEditorsDocument,
|
|
5
|
+
} from "./documents/contentTasksDocuments.js";
|
|
6
|
+
|
|
7
|
+
export default class ContentTasks extends RaketaClient {
|
|
8
|
+
async list(query) {
|
|
9
|
+
const vars = this.buildListInput(query);
|
|
10
|
+
|
|
11
|
+
// Format date filters if any
|
|
12
|
+
if (vars.input.filters) {
|
|
13
|
+
vars.input.filters = this.formatDateFilters(vars.input.filters);
|
|
14
|
+
}
|
|
15
|
+
|
|
16
|
+
const { contentTasks: items } = await this.query(ContentTasksDocument, {
|
|
17
|
+
input: vars.input.filters || vars.input.pagination ? vars.input : null,
|
|
18
|
+
});
|
|
19
|
+
|
|
20
|
+
return items;
|
|
21
|
+
}
|
|
22
|
+
|
|
23
|
+
async editors() {
|
|
24
|
+
const { contentTaskEditors } = await this.query(
|
|
25
|
+
ContentTaskEditorsDocument,
|
|
26
|
+
{},
|
|
27
|
+
);
|
|
28
|
+
|
|
29
|
+
return contentTaskEditors;
|
|
30
|
+
}
|
|
31
|
+
}
|
package/src/cloud/Redirects.js
CHANGED
|
@@ -12,7 +12,7 @@ export default class Redirects extends RaketaClient {
|
|
|
12
12
|
async list(query) {
|
|
13
13
|
const { redirects: items } = await this.query(
|
|
14
14
|
RedirectsDocument,
|
|
15
|
-
this.buildListInput(query)
|
|
15
|
+
this.buildListInput(query),
|
|
16
16
|
);
|
|
17
17
|
|
|
18
18
|
return items;
|
|
@@ -73,7 +73,7 @@ export default class Redirects extends RaketaClient {
|
|
|
73
73
|
id,
|
|
74
74
|
locale: "en",
|
|
75
75
|
},
|
|
76
|
-
}
|
|
76
|
+
},
|
|
77
77
|
);
|
|
78
78
|
|
|
79
79
|
return items;
|
|
@@ -39,7 +39,7 @@ export default class ResourceRevisions extends RaketaClient {
|
|
|
39
39
|
locale,
|
|
40
40
|
resourceType,
|
|
41
41
|
},
|
|
42
|
-
}
|
|
42
|
+
},
|
|
43
43
|
);
|
|
44
44
|
|
|
45
45
|
return items;
|
|
@@ -121,7 +121,7 @@ export default class ResourceRevisions extends RaketaClient {
|
|
|
121
121
|
|
|
122
122
|
async createBatch(revisionInputs) {
|
|
123
123
|
const BatchStartRevisionDocument = buildBatchStartResourceRevisionDocument(
|
|
124
|
-
revisionInputs.length
|
|
124
|
+
revisionInputs.length,
|
|
125
125
|
);
|
|
126
126
|
|
|
127
127
|
const variables = {};
|
package/src/cloud/Resources.js
CHANGED
|
@@ -133,40 +133,56 @@ export default class Resources extends RaketaClient {
|
|
|
133
133
|
return { resource, errors };
|
|
134
134
|
}
|
|
135
135
|
|
|
136
|
-
async translate(id, locale, params, resourceType) {
|
|
136
|
+
async translate(id, locale, params, resourceType, workflow) {
|
|
137
137
|
const paramsCopy = { ...params, resourceType };
|
|
138
138
|
paramsCopy.widgets = JSON.stringify(paramsCopy.widgets);
|
|
139
139
|
paramsCopy.settings = JSON.stringify(paramsCopy.settings);
|
|
140
140
|
|
|
141
|
+
const input = {
|
|
142
|
+
locale,
|
|
143
|
+
sourceResourceId: id,
|
|
144
|
+
resource: paramsCopy,
|
|
145
|
+
};
|
|
146
|
+
|
|
147
|
+
if (workflow) {
|
|
148
|
+
input.workflow = workflow;
|
|
149
|
+
}
|
|
150
|
+
|
|
141
151
|
const {
|
|
142
152
|
translateResource: { errors, resource },
|
|
143
|
-
} = await this.query(TranslateResourceDocument, {
|
|
144
|
-
input: {
|
|
145
|
-
locale,
|
|
146
|
-
sourceResourceId: id,
|
|
147
|
-
resource: paramsCopy,
|
|
148
|
-
},
|
|
149
|
-
});
|
|
153
|
+
} = await this.query(TranslateResourceDocument, { input });
|
|
150
154
|
|
|
151
155
|
return { resource, errors };
|
|
152
156
|
}
|
|
153
157
|
|
|
154
|
-
async translateBatch(
|
|
158
|
+
async translateBatch(
|
|
159
|
+
sourceResourceId,
|
|
160
|
+
locales,
|
|
161
|
+
params,
|
|
162
|
+
resourceType,
|
|
163
|
+
workflow,
|
|
164
|
+
) {
|
|
155
165
|
const paramsCopy = { ...params, resourceType };
|
|
156
166
|
paramsCopy.widgets = JSON.stringify(paramsCopy.widgets);
|
|
157
167
|
paramsCopy.settings = JSON.stringify(paramsCopy.settings);
|
|
158
168
|
|
|
159
169
|
const BatchTranslateDocument = buildBatchTranslateResourceDocument(
|
|
160
|
-
locales.length
|
|
170
|
+
locales.length,
|
|
161
171
|
);
|
|
162
172
|
|
|
163
173
|
const variables = {};
|
|
164
174
|
locales.forEach((locale, i) => {
|
|
165
|
-
|
|
175
|
+
const input = {
|
|
166
176
|
locale,
|
|
167
177
|
sourceResourceId,
|
|
168
178
|
resource: paramsCopy,
|
|
169
179
|
};
|
|
180
|
+
|
|
181
|
+
if (workflow) {
|
|
182
|
+
input.workflow = workflow;
|
|
183
|
+
}
|
|
184
|
+
|
|
185
|
+
variables[`input${i}`] = input;
|
|
170
186
|
});
|
|
171
187
|
|
|
172
188
|
const response = await this.query(BatchTranslateDocument, variables);
|
|
@@ -211,7 +227,7 @@ export default class Resources extends RaketaClient {
|
|
|
211
227
|
|
|
212
228
|
const { resourceChangePreview } = await this.query(
|
|
213
229
|
ResourceChangePreviewDocument,
|
|
214
|
-
{ input }
|
|
230
|
+
{ input },
|
|
215
231
|
);
|
|
216
232
|
|
|
217
233
|
return resourceChangePreview;
|
package/src/cloud/Tags.js
CHANGED
|
@@ -11,7 +11,7 @@ export default class Tags extends RaketaClient {
|
|
|
11
11
|
async list(query, locale) {
|
|
12
12
|
const { tags: items } = await this.query(
|
|
13
13
|
TagsDocument,
|
|
14
|
-
this.buildListInput(query, locale)
|
|
14
|
+
this.buildListInput(query, locale),
|
|
15
15
|
);
|
|
16
16
|
|
|
17
17
|
return items;
|
|
@@ -22,9 +22,9 @@ export default class Tags extends RaketaClient {
|
|
|
22
22
|
input: {
|
|
23
23
|
locale: locale,
|
|
24
24
|
orderBy: {
|
|
25
|
-
field:
|
|
26
|
-
direction:
|
|
27
|
-
}
|
|
25
|
+
field: "name",
|
|
26
|
+
direction: "ASC",
|
|
27
|
+
},
|
|
28
28
|
},
|
|
29
29
|
});
|
|
30
30
|
|
|
@@ -101,3 +101,19 @@ export function summaryChangeFragment() {
|
|
|
101
101
|
}
|
|
102
102
|
`;
|
|
103
103
|
}
|
|
104
|
+
|
|
105
|
+
export function contentTaskFragment() {
|
|
106
|
+
return gql`
|
|
107
|
+
{
|
|
108
|
+
id
|
|
109
|
+
workflow
|
|
110
|
+
operator
|
|
111
|
+
operatorMeta
|
|
112
|
+
completedAt
|
|
113
|
+
failedAt
|
|
114
|
+
rejectedAt
|
|
115
|
+
insertedAt
|
|
116
|
+
updatedAt
|
|
117
|
+
}
|
|
118
|
+
`;
|
|
119
|
+
}
|