strapi-cache 1.6.1 → 1.6.2-rc.1

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 (130) hide show
  1. package/dist/_chunks/de-BABI25Ju.js +1 -0
  2. package/dist/_chunks/de-BABI25Ju.js.map +1 -0
  3. package/dist/_chunks/de-Dihl3Ias.mjs +1 -0
  4. package/dist/_chunks/de-Dihl3Ias.mjs.map +1 -0
  5. package/dist/_chunks/en-CLhkAQFN.mjs +1 -0
  6. package/dist/_chunks/en-CLhkAQFN.mjs.map +1 -0
  7. package/dist/_chunks/en-DYulQU0k.js +1 -0
  8. package/dist/_chunks/en-DYulQU0k.js.map +1 -0
  9. package/dist/_chunks/index-0I5epaEy.mjs +339 -0
  10. package/dist/_chunks/index-0I5epaEy.mjs.map +1 -0
  11. package/dist/_chunks/index-4_D-e55T.mjs +51 -0
  12. package/dist/_chunks/index-4_D-e55T.mjs.map +1 -0
  13. package/dist/_chunks/index-AEAJzn1w.js +329 -0
  14. package/dist/_chunks/index-AEAJzn1w.js.map +1 -0
  15. package/dist/_chunks/index-B2N_r7ow.mjs +51 -0
  16. package/dist/_chunks/index-B2N_r7ow.mjs.map +1 -0
  17. package/dist/_chunks/index-B4lfccXW.js +51 -0
  18. package/dist/_chunks/index-B4lfccXW.js.map +1 -0
  19. package/dist/_chunks/index-B9z92A-z.js +338 -0
  20. package/dist/_chunks/index-B9z92A-z.js.map +1 -0
  21. package/dist/_chunks/index-BAocboRs.mjs +51 -0
  22. package/dist/_chunks/index-BAocboRs.mjs.map +1 -0
  23. package/dist/_chunks/index-BDTo3jFO.js +338 -0
  24. package/dist/_chunks/index-BDTo3jFO.js.map +1 -0
  25. package/dist/_chunks/index-BDgn0QTy.mjs +333 -0
  26. package/dist/_chunks/index-BDgn0QTy.mjs.map +1 -0
  27. package/dist/_chunks/index-BK-ldmu4.mjs +330 -0
  28. package/dist/_chunks/index-BK-ldmu4.mjs.map +1 -0
  29. package/dist/_chunks/index-BPBBFdba.js +1 -0
  30. package/dist/_chunks/index-BPBBFdba.js.map +1 -0
  31. package/dist/_chunks/index-BRqFfzVo.js +51 -0
  32. package/dist/_chunks/index-BRqFfzVo.js.map +1 -0
  33. package/dist/_chunks/index-Babxgmom.js +329 -0
  34. package/dist/_chunks/index-Babxgmom.js.map +1 -0
  35. package/dist/_chunks/index-Bbs05bkg.js +338 -0
  36. package/dist/_chunks/index-Bbs05bkg.js.map +1 -0
  37. package/dist/_chunks/index-BhexB2Ap.mjs +339 -0
  38. package/dist/_chunks/index-BhexB2Ap.mjs.map +1 -0
  39. package/dist/_chunks/index-BleWVvBy.js +51 -0
  40. package/dist/_chunks/index-BleWVvBy.js.map +1 -0
  41. package/dist/_chunks/index-BpocF_uO.mjs +51 -0
  42. package/dist/_chunks/index-BpocF_uO.mjs.map +1 -0
  43. package/dist/_chunks/index-BsW67w0G.js +338 -0
  44. package/dist/_chunks/index-BsW67w0G.js.map +1 -0
  45. package/dist/_chunks/index-C7hTisBG.js +51 -0
  46. package/dist/_chunks/index-C7hTisBG.js.map +1 -0
  47. package/dist/_chunks/index-CAtoueJW.js +51 -0
  48. package/dist/_chunks/index-CAtoueJW.js.map +1 -0
  49. package/dist/_chunks/index-CEeS79tY.js +1 -0
  50. package/dist/_chunks/index-CEeS79tY.js.map +1 -0
  51. package/dist/_chunks/index-CH_6jFHP.mjs +339 -0
  52. package/dist/_chunks/index-CH_6jFHP.mjs.map +1 -0
  53. package/dist/_chunks/index-CIkUFmSg.mjs +1 -0
  54. package/dist/_chunks/index-CIkUFmSg.mjs.map +1 -0
  55. package/dist/_chunks/index-CKXptyYg.mjs +51 -0
  56. package/dist/_chunks/index-CKXptyYg.mjs.map +1 -0
  57. package/dist/_chunks/index-CMD6gyze.mjs +51 -0
  58. package/dist/_chunks/index-CMD6gyze.mjs.map +1 -0
  59. package/dist/_chunks/index-CNdnmVNv.mjs +1 -0
  60. package/dist/_chunks/index-CNdnmVNv.mjs.map +1 -0
  61. package/dist/_chunks/index-CRIKbcQf.mjs +51 -0
  62. package/dist/_chunks/index-CRIKbcQf.mjs.map +1 -0
  63. package/dist/_chunks/index-C_lxmzx9.mjs +339 -0
  64. package/dist/_chunks/index-C_lxmzx9.mjs.map +1 -0
  65. package/dist/_chunks/index-Cb8-_hTN.js +332 -0
  66. package/dist/_chunks/index-Cb8-_hTN.js.map +1 -0
  67. package/dist/_chunks/index-CfW8wHJo.js +51 -0
  68. package/dist/_chunks/index-CfW8wHJo.js.map +1 -0
  69. package/dist/_chunks/index-CiKulRWM.mjs +51 -0
  70. package/dist/_chunks/index-CiKulRWM.mjs.map +1 -0
  71. package/dist/_chunks/index-CmkUlwFo.mjs +51 -0
  72. package/dist/_chunks/index-CmkUlwFo.mjs.map +1 -0
  73. package/dist/_chunks/index-Cp2mUH0P.mjs +51 -0
  74. package/dist/_chunks/index-Cp2mUH0P.mjs.map +1 -0
  75. package/dist/_chunks/index-CqFapeJX.js +338 -0
  76. package/dist/_chunks/index-CqFapeJX.js.map +1 -0
  77. package/dist/_chunks/index-CtY2yrFD.mjs +340 -0
  78. package/dist/_chunks/index-CtY2yrFD.mjs.map +1 -0
  79. package/dist/_chunks/index-Cw8htF0V.js +51 -0
  80. package/dist/_chunks/index-Cw8htF0V.js.map +1 -0
  81. package/dist/_chunks/index-D0RpKca8.js +51 -0
  82. package/dist/_chunks/index-D0RpKca8.js.map +1 -0
  83. package/dist/_chunks/index-D4MlIADe.mjs +339 -0
  84. package/dist/_chunks/index-D4MlIADe.mjs.map +1 -0
  85. package/dist/_chunks/index-D8vo3HTK.mjs +333 -0
  86. package/dist/_chunks/index-D8vo3HTK.mjs.map +1 -0
  87. package/dist/_chunks/index-DILoEiPw.js +339 -0
  88. package/dist/_chunks/index-DILoEiPw.js.map +1 -0
  89. package/dist/_chunks/index-DLSvStnN.js +332 -0
  90. package/dist/_chunks/index-DLSvStnN.js.map +1 -0
  91. package/dist/_chunks/index-DRfYMo02.mjs +51 -0
  92. package/dist/_chunks/index-DRfYMo02.mjs.map +1 -0
  93. package/dist/_chunks/index-D_s9wFvx.js +51 -0
  94. package/dist/_chunks/index-D_s9wFvx.js.map +1 -0
  95. package/dist/_chunks/index-DfNrHbHH.mjs +51 -0
  96. package/dist/_chunks/index-DfNrHbHH.mjs.map +1 -0
  97. package/dist/_chunks/index-Di3zybjV.mjs +339 -0
  98. package/dist/_chunks/index-Di3zybjV.mjs.map +1 -0
  99. package/dist/_chunks/index-DqecouGO.js +51 -0
  100. package/dist/_chunks/index-DqecouGO.js.map +1 -0
  101. package/dist/_chunks/index-DrWpyMvJ.mjs +51 -0
  102. package/dist/_chunks/index-DrWpyMvJ.mjs.map +1 -0
  103. package/dist/_chunks/index-DuPh9DG8.mjs +333 -0
  104. package/dist/_chunks/index-DuPh9DG8.mjs.map +1 -0
  105. package/dist/_chunks/index-DvS-9p_U.js +51 -0
  106. package/dist/_chunks/index-DvS-9p_U.js.map +1 -0
  107. package/dist/_chunks/index-KhVph3TL.js +332 -0
  108. package/dist/_chunks/index-KhVph3TL.js.map +1 -0
  109. package/dist/_chunks/index-XBDBRoF4.js +338 -0
  110. package/dist/_chunks/index-XBDBRoF4.js.map +1 -0
  111. package/dist/_chunks/index-dhIfLdu3.mjs +339 -0
  112. package/dist/_chunks/index-dhIfLdu3.mjs.map +1 -0
  113. package/dist/_chunks/index-gWZp3d_B.mjs +330 -0
  114. package/dist/_chunks/index-gWZp3d_B.mjs.map +1 -0
  115. package/dist/_chunks/index-jBwEyYSm.js +338 -0
  116. package/dist/_chunks/index-jBwEyYSm.js.map +1 -0
  117. package/dist/_chunks/index-nPKhLzd1.js +51 -0
  118. package/dist/_chunks/index-nPKhLzd1.js.map +1 -0
  119. package/dist/_chunks/index-ycP1Faro.js +51 -0
  120. package/dist/_chunks/index-ycP1Faro.js.map +1 -0
  121. package/dist/admin/index.js +2 -1
  122. package/dist/admin/index.js.map +1 -0
  123. package/dist/admin/index.mjs +2 -1
  124. package/dist/admin/index.mjs.map +1 -0
  125. package/dist/admin/src/components/PurgeModal/index.d.ts +2 -1
  126. package/dist/server/index.js +1 -0
  127. package/dist/server/index.js.map +1 -0
  128. package/dist/server/index.mjs +1 -0
  129. package/dist/server/index.mjs.map +1 -0
  130. package/package.json +1 -1
@@ -0,0 +1,329 @@
1
+ "use strict";
2
+ const react = require("react");
3
+ const jsxRuntime = require("react/jsx-runtime");
4
+ const admin = require("@strapi/strapi/admin");
5
+ const reactIntl = require("react-intl");
6
+ const icons = require("@strapi/icons");
7
+ const designSystem = require("@strapi/design-system");
8
+ const __variableDynamicImportRuntimeHelper = (glob, path, segs) => {
9
+ const v = glob[path];
10
+ if (v) {
11
+ return typeof v === "function" ? v() : Promise.resolve(v);
12
+ }
13
+ return new Promise((_, reject) => {
14
+ (typeof queueMicrotask === "function" ? queueMicrotask : setTimeout)(
15
+ reject.bind(
16
+ null,
17
+ new Error(
18
+ "Unknown variable dynamic import: " + path + (path.split("/").length !== segs ? ". Note that variables only represent file names one level deep." : "")
19
+ )
20
+ )
21
+ );
22
+ });
23
+ };
24
+ const PLUGIN_ID = "strapi-cache";
25
+ const Initializer = ({ setPlugin }) => {
26
+ const ref = react.useRef(setPlugin);
27
+ react.useEffect(() => {
28
+ ref.current(PLUGIN_ID);
29
+ }, []);
30
+ return null;
31
+ };
32
+ const useCacheConfig = (enabled = true) => {
33
+ const [config, setConfig] = react.useState();
34
+ const [isLoading, setIsLoading] = react.useState(false);
35
+ const [error, setError] = react.useState(null);
36
+ const { get } = admin.useFetchClient();
37
+ react.useEffect(() => {
38
+ if (!enabled) {
39
+ return;
40
+ }
41
+ const fetchConfig = async () => {
42
+ setIsLoading(true);
43
+ setError(null);
44
+ try {
45
+ const { data } = await get("/strapi-cache/config");
46
+ setConfig(data);
47
+ } catch (error2) {
48
+ setError(error2);
49
+ } finally {
50
+ setIsLoading(false);
51
+ }
52
+ };
53
+ fetchConfig();
54
+ }, [enabled, get]);
55
+ return {
56
+ config,
57
+ isLoading,
58
+ error,
59
+ refetch: () => {
60
+ const fetchConfig = async () => {
61
+ setIsLoading(true);
62
+ setError(null);
63
+ try {
64
+ const { data } = await get("/strapi-cache/config");
65
+ setConfig(data);
66
+ } catch (error2) {
67
+ setError(error2);
68
+ } finally {
69
+ setIsLoading(false);
70
+ }
71
+ };
72
+ fetchConfig();
73
+ }
74
+ };
75
+ };
76
+ const pluginPermissions = {
77
+ purge: [{ action: "plugin::strapi-cache.purge-cache", subject: null }]
78
+ };
79
+ const useCachePermissions = () => {
80
+ const { allowedActions } = admin.useRBAC(pluginPermissions);
81
+ return {
82
+ canPurgeCache: allowedActions.canPurgeCache,
83
+ allowedActions
84
+ };
85
+ };
86
+ const useCacheOperations = () => {
87
+ const { post } = admin.useFetchClient();
88
+ const isCacheableRoute = (keyToUse, contentTypeName, config) => {
89
+ if (!keyToUse || !config) {
90
+ return false;
91
+ }
92
+ const { cacheableRoutes } = config;
93
+ return cacheableRoutes.length === 0 || cacheableRoutes.some((route) => {
94
+ return route.includes(keyToUse) || contentTypeName && route.includes(contentTypeName);
95
+ });
96
+ };
97
+ const clearCache = async (keyToUse) => {
98
+ if (!keyToUse) {
99
+ return {
100
+ success: false,
101
+ message: "No content type found"
102
+ };
103
+ }
104
+ try {
105
+ await post(`/strapi-cache/purge-cache/${keyToUse}`, void 0, {
106
+ headers: {
107
+ "Content-Type": "application/json"
108
+ }
109
+ });
110
+ return {
111
+ success: true,
112
+ message: `Cache purged successfully for key: "${keyToUse}"`
113
+ };
114
+ } catch (error) {
115
+ return {
116
+ success: false,
117
+ message: `Error purging cache for key: "${keyToUse}"`,
118
+ error
119
+ };
120
+ }
121
+ };
122
+ return {
123
+ isCacheableRoute,
124
+ clearCache
125
+ };
126
+ };
127
+ const useCacheNotifications = (config) => {
128
+ const formatMessage = reactIntl.useIntl().formatMessage;
129
+ const { toggleNotification } = admin.useNotification();
130
+ const showConfigFetchError = (error) => {
131
+ const isPermissionError = error?.response?.status === 403 || error?.response?.status === 401;
132
+ if (!isPermissionError && !config?.disableAdminPopups) {
133
+ toggleNotification({
134
+ type: "warning",
135
+ message: formatMessage({
136
+ id: "strapi-cache.cache.routes.fetch-error",
137
+ defaultMessage: "Unable to fetch cache config. Cache purge may not work correctly."
138
+ })
139
+ });
140
+ }
141
+ };
142
+ const showPurgeSuccess = (key) => {
143
+ if (!config?.disableAdminPopups) {
144
+ toggleNotification({
145
+ type: "success",
146
+ message: formatMessage(
147
+ {
148
+ id: "strapi-cache.cache.purge.success",
149
+ defaultMessage: "Cache purged successfully"
150
+ },
151
+ {
152
+ key: `"${key}"`
153
+ }
154
+ )
155
+ });
156
+ }
157
+ };
158
+ const showPurgeError = (key) => {
159
+ if (!config?.disableAdminPopups) {
160
+ toggleNotification({
161
+ type: "danger",
162
+ message: formatMessage(
163
+ {
164
+ id: "strapi-cache.cache.purge.error",
165
+ defaultMessage: "Error purging cache"
166
+ },
167
+ {
168
+ key: `"${key}"`
169
+ }
170
+ )
171
+ });
172
+ }
173
+ };
174
+ const showNoContentTypeWarning = () => {
175
+ if (!config?.disableAdminPopups) {
176
+ toggleNotification({
177
+ type: "warning",
178
+ message: formatMessage({
179
+ id: "strapi-cache.cache.purge.no-content-type",
180
+ defaultMessage: "No content type found"
181
+ })
182
+ });
183
+ }
184
+ };
185
+ return {
186
+ showConfigFetchError,
187
+ showPurgeSuccess,
188
+ showPurgeError,
189
+ showNoContentTypeWarning
190
+ };
191
+ };
192
+ function PurgeModal({ buttonText, keyToUse, buttonWidth, contentTypeName }) {
193
+ const { canPurgeCache } = useCachePermissions();
194
+ const { config, error: configError } = useCacheConfig(canPurgeCache);
195
+ const { clearCache } = useCacheOperations();
196
+ const { showConfigFetchError, showPurgeSuccess, showPurgeError, showNoContentTypeWarning } = useCacheNotifications(config);
197
+ const formatMessage = reactIntl.useIntl().formatMessage;
198
+ react.useEffect(() => {
199
+ if (configError) {
200
+ showConfigFetchError(configError);
201
+ }
202
+ }, [configError, showConfigFetchError]);
203
+ const handleClearCache = async () => {
204
+ if (!keyToUse) {
205
+ showNoContentTypeWarning();
206
+ return;
207
+ }
208
+ const result = await clearCache(keyToUse);
209
+ if (result.success) {
210
+ showPurgeSuccess(keyToUse);
211
+ } else {
212
+ showPurgeError(keyToUse);
213
+ }
214
+ };
215
+ return /* @__PURE__ */ jsxRuntime.jsxs(designSystem.Modal.Root, { children: [
216
+ /* @__PURE__ */ jsxRuntime.jsx(designSystem.Modal.Trigger, { children: /* @__PURE__ */ jsxRuntime.jsx(designSystem.Button, { width: buttonWidth, startIcon: /* @__PURE__ */ jsxRuntime.jsx(icons.Archive, {}), disabled: true, variant: "danger", children: buttonText }) }),
217
+ /* @__PURE__ */ jsxRuntime.jsxs(designSystem.Modal.Content, { children: [
218
+ /* @__PURE__ */ jsxRuntime.jsx(designSystem.Modal.Header, { children: /* @__PURE__ */ jsxRuntime.jsx(designSystem.Modal.Title, { children: buttonText }) }),
219
+ /* @__PURE__ */ jsxRuntime.jsx(designSystem.Modal.Body, { children: /* @__PURE__ */ jsxRuntime.jsx(designSystem.Typography, { variant: "omega", children: formatMessage(
220
+ {
221
+ id: "strapi-cache.cache.purge.confirmation",
222
+ defaultMessage: "Are you sure you want to purge the cache?"
223
+ },
224
+ { key: `"${keyToUse}"` }
225
+ ) }) }),
226
+ /* @__PURE__ */ jsxRuntime.jsxs(designSystem.Modal.Footer, { children: [
227
+ /* @__PURE__ */ jsxRuntime.jsx(designSystem.Modal.Close, { children: /* @__PURE__ */ jsxRuntime.jsx(designSystem.Button, { variant: "tertiary", children: formatMessage({
228
+ id: "strapi-cache.cache.cancel",
229
+ defaultMessage: "No, cancel"
230
+ }) }) }),
231
+ /* @__PURE__ */ jsxRuntime.jsx(designSystem.Modal.Close, { children: /* @__PURE__ */ jsxRuntime.jsx(designSystem.Button, { onClick: handleClearCache, children: formatMessage({
232
+ id: "strapi-cache.cache.confirm",
233
+ defaultMessage: "Yes, confirm"
234
+ }) }) })
235
+ ] })
236
+ ] })
237
+ ] });
238
+ }
239
+ function PurgeCacheButton() {
240
+ const { contentType } = admin.unstable_useContentManagerContext();
241
+ const { formatMessage } = reactIntl.useIntl();
242
+ const keyToUse = contentType?.info.pluralName;
243
+ return /* @__PURE__ */ jsxRuntime.jsx(
244
+ PurgeModal,
245
+ {
246
+ buttonText: formatMessage({
247
+ id: "strapi-cache.cache.purge",
248
+ defaultMessage: "Purge Cache"
249
+ }),
250
+ keyToUse
251
+ }
252
+ );
253
+ }
254
+ function PurgeEntityButton() {
255
+ const { formatMessage } = reactIntl.useIntl();
256
+ const { id, isSingleType, contentType } = admin.unstable_useContentManagerContext();
257
+ const apiPath = isSingleType ? contentType?.info.singularName : id;
258
+ if (!apiPath) {
259
+ return null;
260
+ }
261
+ const keyToUse = encodeURIComponent(apiPath);
262
+ const contentTypeName = isSingleType ? contentType?.info.singularName : contentType?.info.pluralName;
263
+ return /* @__PURE__ */ jsxRuntime.jsx(
264
+ PurgeModal,
265
+ {
266
+ buttonWidth: "100%",
267
+ buttonText: formatMessage({
268
+ id: "strapi-cache.cache.purge.entity",
269
+ defaultMessage: "Purge Entity Cache"
270
+ }),
271
+ keyToUse,
272
+ contentTypeName
273
+ }
274
+ );
275
+ }
276
+ const index = {
277
+ register(app) {
278
+ app.registerPlugin({
279
+ id: PLUGIN_ID,
280
+ initializer: Initializer,
281
+ isReady: false,
282
+ name: PLUGIN_ID
283
+ });
284
+ app.getPlugin("content-manager").injectComponent("listView", "actions", {
285
+ name: PurgeCacheButton,
286
+ Component: PurgeCacheButton
287
+ });
288
+ app.getPlugin("content-manager").injectComponent("editView", "right-links", {
289
+ name: PurgeEntityButton,
290
+ Component: PurgeEntityButton
291
+ });
292
+ app.createSettingSection(
293
+ {
294
+ id: PLUGIN_ID,
295
+ intlLabel: {
296
+ id: "strapi-cache.settings.link",
297
+ defaultMessage: "Strapi Cache"
298
+ }
299
+ },
300
+ [
301
+ {
302
+ intlLabel: {
303
+ id: "strapi-cache.settings.link",
304
+ defaultMessage: "Strapi Cache"
305
+ },
306
+ id: "settings",
307
+ to: `${PLUGIN_ID}/settings`,
308
+ Component: () => Promise.resolve().then(() => require("./index-D_s9wFvx.js")),
309
+ permissions: []
310
+ }
311
+ ]
312
+ );
313
+ },
314
+ async registerTrads({ locales }) {
315
+ return Promise.all(
316
+ locales.map(async (locale) => {
317
+ try {
318
+ const { default: data } = await __variableDynamicImportRuntimeHelper(/* @__PURE__ */ Object.assign({ "./translations/de.json": () => Promise.resolve().then(() => require("./de-BABI25Ju.js")), "./translations/en.json": () => Promise.resolve().then(() => require("./en-DYulQU0k.js")) }), `./translations/${locale}.json`, 3);
319
+ return { data, locale };
320
+ } catch {
321
+ return { data: {}, locale };
322
+ }
323
+ })
324
+ );
325
+ }
326
+ };
327
+ exports.PurgeModal = PurgeModal;
328
+ exports.index = index;
329
+ //# sourceMappingURL=index-AEAJzn1w.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index-AEAJzn1w.js","sources":["../../admin/src/pluginId.ts","../../admin/src/components/Initializer.tsx","../../admin/src/hooks/useCacheConfig.ts","../../admin/src/permission.ts","../../admin/src/hooks/useCachePermissions.ts","../../admin/src/hooks/useCacheOperations.ts","../../admin/src/hooks/useCacheNotifications.ts","../../admin/src/components/PurgeModal/index.tsx","../../admin/src/components/PurgeCacheButton/index.tsx","../../admin/src/components/PurgeEntityButton/index.tsx","../../admin/src/index.ts"],"sourcesContent":["export const PLUGIN_ID = 'strapi-cache';\n","import { useEffect, useRef } from 'react';\n\nimport { PLUGIN_ID } from '../pluginId';\n\ntype InitializerProps = {\n setPlugin: (id: string) => void;\n};\n\nconst Initializer = ({ setPlugin }: InitializerProps) => {\n const ref = useRef(setPlugin);\n\n useEffect(() => {\n ref.current(PLUGIN_ID);\n }, []);\n\n return null;\n};\n\nexport { Initializer };\n","import { useState, useEffect } from 'react';\nimport { useFetchClient } from '@strapi/strapi/admin';\n\nexport type CacheConfig = {\n cacheableRoutes: string[];\n disableAdminPopups: boolean;\n};\n\nexport const useCacheConfig = (enabled: boolean = true) => {\n const [config, setConfig] = useState<CacheConfig>();\n const [isLoading, setIsLoading] = useState(false);\n const [error, setError] = useState<Error | null>(null);\n const { get } = useFetchClient();\n\n useEffect(() => {\n if (!enabled) {\n return;\n }\n\n const fetchConfig = async () => {\n setIsLoading(true);\n setError(null);\n\n try {\n const { data } = await get('/strapi-cache/config');\n setConfig(data);\n } catch (error: any) {\n setError(error);\n } finally {\n setIsLoading(false);\n }\n };\n\n fetchConfig();\n }, [enabled, get]);\n\n return {\n config,\n isLoading,\n error,\n refetch: () => {\n const fetchConfig = async () => {\n setIsLoading(true);\n setError(null);\n\n try {\n const { data } = await get('/strapi-cache/config');\n setConfig(data);\n } catch (error: any) {\n setError(error);\n } finally {\n setIsLoading(false);\n }\n };\n fetchConfig();\n },\n };\n};\n","export const pluginPermissions = {\n purge: [{ action: 'plugin::strapi-cache.purge-cache', subject: null }],\n};\n","import { useRBAC } from '@strapi/strapi/admin';\nimport { pluginPermissions } from '../permission';\n\nexport const useCachePermissions = () => {\n const { allowedActions } = useRBAC(pluginPermissions);\n\n return {\n canPurgeCache: allowedActions.canPurgeCache,\n allowedActions,\n };\n};\n","import { useFetchClient } from '@strapi/strapi/admin';\nimport { CacheConfig } from './useCacheConfig';\n\nexport type CacheOperationResult = {\n success: boolean;\n message?: string;\n error?: Error;\n};\n\nexport const useCacheOperations = () => {\n const { post } = useFetchClient();\n\n const isCacheableRoute = (\n keyToUse?: string,\n contentTypeName?: string,\n config?: CacheConfig\n ): boolean => {\n if (!keyToUse || !config) {\n return false;\n }\n\n const { cacheableRoutes } = config;\n return (\n cacheableRoutes.length === 0 ||\n cacheableRoutes.some((route) => {\n return route.includes(keyToUse) || (contentTypeName && route.includes(contentTypeName));\n })\n );\n };\n\n const clearCache = async (keyToUse?: string): Promise<CacheOperationResult> => {\n if (!keyToUse) {\n return {\n success: false,\n message: 'No content type found',\n };\n }\n\n try {\n await post(`/strapi-cache/purge-cache/${keyToUse}`, undefined, {\n headers: {\n 'Content-Type': 'application/json',\n },\n });\n\n return {\n success: true,\n message: `Cache purged successfully for key: \"${keyToUse}\"`,\n };\n } catch (error: any) {\n return {\n success: false,\n message: `Error purging cache for key: \"${keyToUse}\"`,\n error,\n };\n }\n };\n\n return {\n isCacheableRoute,\n clearCache,\n };\n};\n","import { useIntl } from 'react-intl';\nimport { useNotification } from '@strapi/strapi/admin';\nimport { CacheConfig } from './useCacheConfig';\n\nexport const useCacheNotifications = (config?: CacheConfig) => {\n const formatMessage = useIntl().formatMessage;\n const { toggleNotification } = useNotification();\n\n const showConfigFetchError = (error: Error) => {\n // only show error notification if its not a permissions error and popups are not disabled\n const isPermissionError =\n (error as any)?.response?.status === 403 || (error as any)?.response?.status === 401;\n\n if (!isPermissionError && !config?.disableAdminPopups) {\n toggleNotification({\n type: 'warning',\n message: formatMessage({\n id: 'strapi-cache.cache.routes.fetch-error',\n defaultMessage: 'Unable to fetch cache config. Cache purge may not work correctly.',\n }),\n });\n }\n };\n\n const showPurgeSuccess = (key: string) => {\n if (!config?.disableAdminPopups) {\n toggleNotification({\n type: 'success',\n message: formatMessage(\n {\n id: 'strapi-cache.cache.purge.success',\n defaultMessage: 'Cache purged successfully',\n },\n {\n key: `\"${key}\"`,\n }\n ),\n });\n }\n };\n\n const showPurgeError = (key: string) => {\n if (!config?.disableAdminPopups) {\n toggleNotification({\n type: 'danger',\n message: formatMessage(\n {\n id: 'strapi-cache.cache.purge.error',\n defaultMessage: 'Error purging cache',\n },\n {\n key: `\"${key}\"`,\n }\n ),\n });\n }\n };\n\n const showNoContentTypeWarning = () => {\n if (!config?.disableAdminPopups) {\n toggleNotification({\n type: 'warning',\n message: formatMessage({\n id: 'strapi-cache.cache.purge.no-content-type',\n defaultMessage: 'No content type found',\n }),\n });\n }\n };\n\n return {\n showConfigFetchError,\n showPurgeSuccess,\n showPurgeError,\n showNoContentTypeWarning,\n };\n};\n","import { useIntl } from 'react-intl';\nimport { Archive } from '@strapi/icons';\nimport { Button, Modal } from '@strapi/design-system';\nimport { Typography } from '@strapi/design-system';\nimport { useEffect } from 'react';\nimport {\n useCacheConfig,\n useCachePermissions,\n useCacheOperations,\n useCacheNotifications,\n} from '../../hooks';\n\nexport type PurgeProps = {\n buttonText: string;\n buttonWidth?: string;\n keyToUse?: string;\n contentTypeName?: string;\n};\n\nfunction PurgeModal({ buttonText, keyToUse, buttonWidth, contentTypeName }: PurgeProps) {\n const { canPurgeCache } = useCachePermissions();\n const { config, error: configError } = useCacheConfig(canPurgeCache);\n const { isCacheableRoute, clearCache } = useCacheOperations();\n const { showConfigFetchError, showPurgeSuccess, showPurgeError, showNoContentTypeWarning } =\n useCacheNotifications(config);\n const formatMessage = useIntl().formatMessage;\n\n useEffect(() => {\n if (configError) {\n showConfigFetchError(configError);\n }\n }, [configError, showConfigFetchError]);\n\n const handleClearCache = async () => {\n if (!keyToUse) {\n showNoContentTypeWarning();\n return;\n }\n\n const result = await clearCache(keyToUse);\n\n if (result.success) {\n showPurgeSuccess(keyToUse);\n } else {\n showPurgeError(keyToUse);\n }\n };\n\n // if (!canPurgeCache || !isCacheableRoute(keyToUse, contentTypeName, config)) {\n // return null;\n // }\n\n return (\n <Modal.Root>\n <Modal.Trigger>\n <Button width={buttonWidth} startIcon={<Archive />} disabled={true} variant=\"danger\">\n {buttonText}\n </Button>\n </Modal.Trigger>\n <Modal.Content>\n <Modal.Header>\n <Modal.Title>{buttonText}</Modal.Title>\n </Modal.Header>\n <Modal.Body>\n <Typography variant=\"omega\">\n {formatMessage(\n {\n id: 'strapi-cache.cache.purge.confirmation',\n defaultMessage: 'Are you sure you want to purge the cache?',\n },\n { key: `\"${keyToUse}\"` }\n )}\n </Typography>\n </Modal.Body>\n <Modal.Footer>\n <Modal.Close>\n <Button variant=\"tertiary\">\n {formatMessage({\n id: 'strapi-cache.cache.cancel',\n defaultMessage: 'No, cancel',\n })}\n </Button>\n </Modal.Close>\n <Modal.Close>\n <Button onClick={handleClearCache}>\n {formatMessage({\n id: 'strapi-cache.cache.confirm',\n defaultMessage: 'Yes, confirm',\n })}\n </Button>\n </Modal.Close>\n </Modal.Footer>\n </Modal.Content>\n </Modal.Root>\n );\n}\n\nexport default PurgeModal;\n","import { unstable_useContentManagerContext as useContentManagerContext } from '@strapi/strapi/admin';\nimport PurgeModal from '../PurgeModal';\nimport { useIntl } from 'react-intl';\n\nfunction PurgeCacheButton() {\n const { contentType } = useContentManagerContext();\n const { formatMessage } = useIntl();\n const keyToUse = contentType?.info.pluralName;\n\n return (\n <PurgeModal\n buttonText={formatMessage({\n id: 'strapi-cache.cache.purge',\n defaultMessage: 'Purge Cache',\n })}\n keyToUse={keyToUse}\n ></PurgeModal>\n );\n}\n\nexport default PurgeCacheButton;\n","import { unstable_useContentManagerContext as useContentManagerContext } from '@strapi/strapi/admin';\nimport PurgeModal from '../PurgeModal';\nimport { useIntl } from 'react-intl';\n\nfunction PurgeEntityButton() {\n const { formatMessage } = useIntl();\n const { id, isSingleType, contentType } = useContentManagerContext();\n const apiPath = isSingleType ? contentType?.info.singularName : id;\n\n if (!apiPath) {\n return null;\n }\n\n const keyToUse = encodeURIComponent(apiPath);\n const contentTypeName = isSingleType\n ? contentType?.info.singularName\n : contentType?.info.pluralName;\n\n return (\n <PurgeModal\n buttonWidth=\"100%\"\n buttonText={formatMessage({\n id: 'strapi-cache.cache.purge.entity',\n defaultMessage: 'Purge Entity Cache',\n })}\n keyToUse={keyToUse}\n contentTypeName={contentTypeName}\n ></PurgeModal>\n );\n}\n\nexport default PurgeEntityButton;\n","import { PLUGIN_ID } from './pluginId';\nimport { Initializer } from './components/Initializer';\nimport PurgeCacheButton from './components/PurgeCacheButton';\nimport PurgeEntityButton from './components/PurgeEntityButton';\n\nexport default {\n register(app: any) {\n app.registerPlugin({\n id: PLUGIN_ID,\n initializer: Initializer,\n isReady: false,\n name: PLUGIN_ID,\n });\n\n app.getPlugin('content-manager').injectComponent('listView', 'actions', {\n name: PurgeCacheButton,\n Component: PurgeCacheButton,\n });\n\n app.getPlugin('content-manager').injectComponent('editView', 'right-links', {\n name: PurgeEntityButton,\n Component: PurgeEntityButton,\n });\n\n app.createSettingSection(\n {\n id: PLUGIN_ID,\n intlLabel: {\n id: 'strapi-cache.settings.link',\n defaultMessage: 'Strapi Cache',\n },\n },\n [\n {\n intlLabel: {\n id: 'strapi-cache.settings.link',\n defaultMessage: 'Strapi Cache',\n },\n id: 'settings',\n to: `${PLUGIN_ID}/settings`,\n Component: () => import('./components/SettingsPage'),\n permissions: [],\n },\n ]\n );\n },\n\n async registerTrads({ locales }: { locales: string[] }) {\n return Promise.all(\n locales.map(async (locale) => {\n try {\n const { default: data } = await import(`./translations/${locale}.json`);\n\n return { data, locale };\n } catch {\n return { data: {}, locale };\n }\n })\n );\n },\n};\n"],"names":["useRef","useEffect","useState","useFetchClient","error","useRBAC","useIntl","useNotification","jsxs","Modal","jsx","Button","Archive","Typography","useContentManagerContext"],"mappings":"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"}
@@ -0,0 +1,51 @@
1
+ import { jsxs, jsx } from "react/jsx-runtime";
2
+ import { Typography, TextInput } from "@strapi/design-system";
3
+ import { useIntl } from "react-intl";
4
+ import { P as PurgeModal } from "./index-CH_6jFHP.mjs";
5
+ import { useState } from "react";
6
+ const SettingsPage = () => {
7
+ const { formatMessage } = useIntl();
8
+ const [keyToUse, setKeyToUse] = useState("");
9
+ return /* @__PURE__ */ jsxs("div", { style: { padding: "20px" }, children: [
10
+ /* @__PURE__ */ jsx(Typography, { variant: "alpha", as: "h1", children: formatMessage({
11
+ id: "strapi-cache.name",
12
+ defaultMessage: "Strapi Cache Settings"
13
+ }) }),
14
+ /* @__PURE__ */ jsx("div", { style: { marginTop: "16px", marginBottom: "24px" }, children: /* @__PURE__ */ jsx(Typography, { variant: "omega", children: formatMessage({
15
+ id: "strapi-cache.settings.description",
16
+ defaultMessage: 'Enter a cache key below and click "Purge Cache" to clear specific cached content.'
17
+ }) }) }),
18
+ /* @__PURE__ */ jsxs(
19
+ "div",
20
+ {
21
+ style: {
22
+ display: "flex",
23
+ justifyContent: "center",
24
+ alignItems: "center",
25
+ gap: "12px",
26
+ maxWidth: "400px"
27
+ },
28
+ children: [
29
+ /* @__PURE__ */ jsx("div", { style: { flex: 1 }, children: /* @__PURE__ */ jsx(
30
+ TextInput,
31
+ {
32
+ placeholder: formatMessage({
33
+ id: "strapi-cache.settings.key-placeholder",
34
+ defaultMessage: "Enter cache key to purge"
35
+ }),
36
+ size: "M",
37
+ type: "text",
38
+ value: keyToUse,
39
+ onChange: (e) => setKeyToUse(e.target.value)
40
+ }
41
+ ) }),
42
+ /* @__PURE__ */ jsx(PurgeModal, { buttonText: "Purge Cache", keyToUse, isSettingsPage: true })
43
+ ]
44
+ }
45
+ )
46
+ ] });
47
+ };
48
+ export {
49
+ SettingsPage as default
50
+ };
51
+ //# sourceMappingURL=index-B2N_r7ow.mjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index-B2N_r7ow.mjs","sources":["../../admin/src/components/SettingsPage/index.tsx"],"sourcesContent":["import { TextInput, Typography } from '@strapi/design-system';\nimport { useIntl } from 'react-intl';\nimport PurgeModal from '../PurgeModal';\nimport { useState } from 'react';\n\nconst SettingsPage = () => {\n const { formatMessage } = useIntl();\n const [keyToUse, setKeyToUse] = useState<string>('');\n\n return (\n <div style={{ padding: '20px' }}>\n <Typography variant=\"alpha\" as=\"h1\">\n {formatMessage({\n id: 'strapi-cache.name',\n defaultMessage: 'Strapi Cache Settings',\n })}\n </Typography>\n\n <div style={{ marginTop: '16px', marginBottom: '24px' }}>\n <Typography variant=\"omega\">\n {formatMessage({\n id: 'strapi-cache.settings.description',\n defaultMessage:\n 'Enter a cache key below and click \"Purge Cache\" to clear specific cached content.',\n })}\n </Typography>\n </div>\n\n <div\n style={{\n display: 'flex',\n justifyContent: 'center',\n alignItems: 'center',\n gap: '12px',\n maxWidth: '400px',\n }}\n >\n <div style={{ flex: 1 }}>\n <TextInput\n placeholder={formatMessage({\n id: 'strapi-cache.settings.key-placeholder',\n defaultMessage: 'Enter cache key to purge',\n })}\n size=\"M\"\n type=\"text\"\n value={keyToUse}\n onChange={(e: React.ChangeEvent<HTMLInputElement>) => setKeyToUse(e.target.value)}\n />\n </div>\n <PurgeModal buttonText=\"Purge Cache\" keyToUse={keyToUse} isSettingsPage />\n </div>\n </div>\n );\n};\n\nexport default SettingsPage;\n"],"names":[],"mappings":";;;;;AAKA,MAAM,eAAe,MAAM;AACnB,QAAA,EAAE,cAAc,IAAI,QAAQ;AAClC,QAAM,CAAC,UAAU,WAAW,IAAI,SAAiB,EAAE;AAEnD,8BACG,OAAI,EAAA,OAAO,EAAE,SAAS,OACrB,GAAA,UAAA;AAAA,IAAA,oBAAC,YAAW,EAAA,SAAQ,SAAQ,IAAG,MAC5B,UAAc,cAAA;AAAA,MACb,IAAI;AAAA,MACJ,gBAAgB;AAAA,IACjB,CAAA,GACH;AAAA,IAEC,oBAAA,OAAA,EAAI,OAAO,EAAE,WAAW,QAAQ,cAAc,OAC7C,GAAA,UAAA,oBAAC,YAAW,EAAA,SAAQ,SACjB,UAAc,cAAA;AAAA,MACb,IAAI;AAAA,MACJ,gBACE;AAAA,IAAA,CACH,GACH,EACF,CAAA;AAAA,IAEA;AAAA,MAAC;AAAA,MAAA;AAAA,QACC,OAAO;AAAA,UACL,SAAS;AAAA,UACT,gBAAgB;AAAA,UAChB,YAAY;AAAA,UACZ,KAAK;AAAA,UACL,UAAU;AAAA,QACZ;AAAA,QAEA,UAAA;AAAA,UAAA,oBAAC,OAAI,EAAA,OAAO,EAAE,MAAM,KAClB,UAAA;AAAA,YAAC;AAAA,YAAA;AAAA,cACC,aAAa,cAAc;AAAA,gBACzB,IAAI;AAAA,gBACJ,gBAAgB;AAAA,cAAA,CACjB;AAAA,cACD,MAAK;AAAA,cACL,MAAK;AAAA,cACL,OAAO;AAAA,cACP,UAAU,CAAC,MAA2C,YAAY,EAAE,OAAO,KAAK;AAAA,YAAA;AAAA,UAAA,GAEpF;AAAA,8BACC,YAAW,EAAA,YAAW,eAAc,UAAoB,gBAAc,KAAC,CAAA;AAAA,QAAA;AAAA,MAAA;AAAA,IAAA;AAAA,EAC1E,GACF;AAEJ;"}
@@ -0,0 +1,51 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, Symbol.toStringTag, { value: "Module" });
3
+ const jsxRuntime = require("react/jsx-runtime");
4
+ const designSystem = require("@strapi/design-system");
5
+ const reactIntl = require("react-intl");
6
+ const index = require("./index-Bbs05bkg.js");
7
+ const react = require("react");
8
+ const SettingsPage = () => {
9
+ const { formatMessage } = reactIntl.useIntl();
10
+ const [keyToUse, setKeyToUse] = react.useState("");
11
+ return /* @__PURE__ */ jsxRuntime.jsxs("div", { style: { padding: "20px" }, children: [
12
+ /* @__PURE__ */ jsxRuntime.jsx(designSystem.Typography, { variant: "alpha", as: "h1", children: formatMessage({
13
+ id: "strapi-cache.name",
14
+ defaultMessage: "Strapi Cache Settings"
15
+ }) }),
16
+ /* @__PURE__ */ jsxRuntime.jsx("div", { style: { marginTop: "16px", marginBottom: "24px" }, children: /* @__PURE__ */ jsxRuntime.jsx(designSystem.Typography, { variant: "omega", children: formatMessage({
17
+ id: "strapi-cache.settings.description",
18
+ defaultMessage: 'Enter a cache key below and click "Purge Cache" to clear specific cached content.'
19
+ }) }) }),
20
+ /* @__PURE__ */ jsxRuntime.jsxs(
21
+ "div",
22
+ {
23
+ style: {
24
+ display: "flex",
25
+ justifyContent: "center",
26
+ alignItems: "center",
27
+ gap: "12px",
28
+ maxWidth: "400px"
29
+ },
30
+ children: [
31
+ /* @__PURE__ */ jsxRuntime.jsx("div", { style: { flex: 1 }, children: /* @__PURE__ */ jsxRuntime.jsx(
32
+ designSystem.TextInput,
33
+ {
34
+ placeholder: formatMessage({
35
+ id: "strapi-cache.settings.key-placeholder",
36
+ defaultMessage: "Enter cache key to purge"
37
+ }),
38
+ size: "M",
39
+ type: "text",
40
+ value: keyToUse,
41
+ onChange: (e) => setKeyToUse(e.target.value)
42
+ }
43
+ ) }),
44
+ /* @__PURE__ */ jsxRuntime.jsx(index.PurgeModal, { buttonText: "Purge Cache", keyToUse, isSettingsPage: true })
45
+ ]
46
+ }
47
+ )
48
+ ] });
49
+ };
50
+ exports.default = SettingsPage;
51
+ //# sourceMappingURL=index-B4lfccXW.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index-B4lfccXW.js","sources":["../../admin/src/components/SettingsPage/index.tsx"],"sourcesContent":["import { TextInput, Typography } from '@strapi/design-system';\nimport { useIntl } from 'react-intl';\nimport PurgeModal from '../PurgeModal';\nimport { useState } from 'react';\n\nconst SettingsPage = () => {\n const { formatMessage } = useIntl();\n const [keyToUse, setKeyToUse] = useState<string>('');\n\n return (\n <div style={{ padding: '20px' }}>\n <Typography variant=\"alpha\" as=\"h1\">\n {formatMessage({\n id: 'strapi-cache.name',\n defaultMessage: 'Strapi Cache Settings',\n })}\n </Typography>\n\n <div style={{ marginTop: '16px', marginBottom: '24px' }}>\n <Typography variant=\"omega\">\n {formatMessage({\n id: 'strapi-cache.settings.description',\n defaultMessage:\n 'Enter a cache key below and click \"Purge Cache\" to clear specific cached content.',\n })}\n </Typography>\n </div>\n\n <div\n style={{\n display: 'flex',\n justifyContent: 'center',\n alignItems: 'center',\n gap: '12px',\n maxWidth: '400px',\n }}\n >\n <div style={{ flex: 1 }}>\n <TextInput\n placeholder={formatMessage({\n id: 'strapi-cache.settings.key-placeholder',\n defaultMessage: 'Enter cache key to purge',\n })}\n size=\"M\"\n type=\"text\"\n value={keyToUse}\n onChange={(e: React.ChangeEvent<HTMLInputElement>) => setKeyToUse(e.target.value)}\n />\n </div>\n <PurgeModal buttonText=\"Purge Cache\" keyToUse={keyToUse} isSettingsPage />\n </div>\n </div>\n );\n};\n\nexport default SettingsPage;\n"],"names":["useIntl","useState","jsx","Typography","jsxs","TextInput","PurgeModal"],"mappings":";;;;;;;AAKA,MAAM,eAAe,MAAM;AACnB,QAAA,EAAE,cAAc,IAAIA,kBAAQ;AAClC,QAAM,CAAC,UAAU,WAAW,IAAIC,MAAAA,SAAiB,EAAE;AAEnD,yCACG,OAAI,EAAA,OAAO,EAAE,SAAS,OACrB,GAAA,UAAA;AAAA,IAAAC,+BAACC,aAAAA,YAAW,EAAA,SAAQ,SAAQ,IAAG,MAC5B,UAAc,cAAA;AAAA,MACb,IAAI;AAAA,MACJ,gBAAgB;AAAA,IACjB,CAAA,GACH;AAAA,IAECD,2BAAA,IAAA,OAAA,EAAI,OAAO,EAAE,WAAW,QAAQ,cAAc,OAC7C,GAAA,UAAAA,2BAAA,IAACC,yBAAW,EAAA,SAAQ,SACjB,UAAc,cAAA;AAAA,MACb,IAAI;AAAA,MACJ,gBACE;AAAA,IAAA,CACH,GACH,EACF,CAAA;AAAA,IAEAC,2BAAA;AAAA,MAAC;AAAA,MAAA;AAAA,QACC,OAAO;AAAA,UACL,SAAS;AAAA,UACT,gBAAgB;AAAA,UAChB,YAAY;AAAA,UACZ,KAAK;AAAA,UACL,UAAU;AAAA,QACZ;AAAA,QAEA,UAAA;AAAA,UAAAF,2BAAA,IAAC,OAAI,EAAA,OAAO,EAAE,MAAM,KAClB,UAAAA,2BAAA;AAAA,YAACG,aAAA;AAAA,YAAA;AAAA,cACC,aAAa,cAAc;AAAA,gBACzB,IAAI;AAAA,gBACJ,gBAAgB;AAAA,cAAA,CACjB;AAAA,cACD,MAAK;AAAA,cACL,MAAK;AAAA,cACL,OAAO;AAAA,cACP,UAAU,CAAC,MAA2C,YAAY,EAAE,OAAO,KAAK;AAAA,YAAA;AAAA,UAAA,GAEpF;AAAA,yCACCC,MAAW,YAAA,EAAA,YAAW,eAAc,UAAoB,gBAAc,KAAC,CAAA;AAAA,QAAA;AAAA,MAAA;AAAA,IAAA;AAAA,EAC1E,GACF;AAEJ;;"}