@lidofinance/next-cache-files-middleware 0.22.0 → 0.24.0

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/index.cjs CHANGED
@@ -32,6 +32,10 @@ var $35b96dc7f51731b2$exports = {};
32
32
  $parcel$export($35b96dc7f51731b2$exports, "CacheStorage", function () { return $35b96dc7f51731b2$export$2b715f8922748263; });
33
33
  const $35b96dc7f51731b2$var$DEFAULT_CACHE_LIMIT = 1000;
34
34
  class $35b96dc7f51731b2$export$2b715f8922748263 {
35
+ constructor(limit){
36
+ this._cacheLimit = limit || $35b96dc7f51731b2$var$DEFAULT_CACHE_LIMIT;
37
+ this._storage = new Map();
38
+ }
35
39
  set(key, value) {
36
40
  // refresh key
37
41
  if (this._storage.has(key)) this._storage.delete(key);
@@ -53,10 +57,6 @@ class $35b96dc7f51731b2$export$2b715f8922748263 {
53
57
  getFirst() {
54
58
  return this._storage.keys().next().value;
55
59
  }
56
- constructor(limit){
57
- this._cacheLimit = limit || $35b96dc7f51731b2$var$DEFAULT_CACHE_LIMIT;
58
- this._storage = new Map();
59
- }
60
60
  }
61
61
 
62
62
 
@@ -90,9 +90,8 @@ const $db38a4f6de2a3704$var$checkValueIsString = (value)=>{
90
90
  return value !== null && typeof value === "string";
91
91
  };
92
92
  const $db38a4f6de2a3704$export$2cbb5ba6d79dc635 = (data)=>{
93
- var _list_find;
94
93
  const { allowedList: allowedList , url: url } = data;
95
- const requestPath = url === null || url === void 0 ? void 0 : url.split("?")[0];
94
+ const requestPath = url?.split("?")[0];
96
95
  if (!requestPath) return;
97
96
  const cacheValue = $db38a4f6de2a3704$var$cache.get(requestPath);
98
97
  if (cacheValue) return cacheValue;
@@ -100,10 +99,10 @@ const $db38a4f6de2a3704$export$2cbb5ba6d79dc635 = (data)=>{
100
99
  ...(0, $5d01ba631015e899$export$a0fb92f5bd6f13d2),
101
100
  ...allowedList || []
102
101
  ];
103
- const urlHeaders = (_list_find = list.find(({ path: path })=>{
102
+ const urlHeaders = list.find(({ path: path })=>{
104
103
  if ($db38a4f6de2a3704$var$checkValueIsString(path)) return path === requestPath;
105
104
  return path.test(requestPath);
106
- })) === null || _list_find === void 0 ? void 0 : _list_find.headers;
105
+ })?.headers;
107
106
  if (urlHeaders) $db38a4f6de2a3704$var$cache.set(requestPath, urlHeaders);
108
107
  return urlHeaders;
109
108
  };
@@ -1 +1 @@
1
- {"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;ACAA;;;;;;;AEAA,MAAM,4CAAsB;AAErB,MAAM;IASX,IAAI,GAAW,EAAE,KAAa,EAAE;QAC9B,cAAc;QACd,IAAI,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,MAAM,IAAI,CAAC,QAAQ,CAAC,MAAM,CAAC;aAE5C,IAAI,IAAI,CAAC,QAAQ,CAAC,IAAI,IAAI,IAAI,CAAC,WAAW,EAAE,IAAI,CAAC,QAAQ,CAAC,MAAM,CAAC,IAAI,CAAC,QAAQ;QAEnF,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,KAAK;IACzB;IAEA,IAAI,GAAW,EAAE;QACf,MAAM,OAAO,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC;QAC/B,IAAI,MAAM;YACR,cAAc;YACd,IAAI,CAAC,QAAQ,CAAC,MAAM,CAAC;YACrB,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,KAAK;QACzB,CAAC;QAED,OAAO;IACT;IAEA,OAAO,GAAW,EAAE;QAClB,IAAI,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,MACpB,IAAI,CAAC,QAAQ,CAAC,MAAM,CAAC;IAEzB;IAEA,WAAW;QACT,OAAO,IAAI,CAAC,QAAQ,CAAC,IAAI,GAAG,IAAI,GAAG,KAAK;IAC1C;IAjCA,YAAY,KAAc,CAAE;QAC1B,IAAI,CAAC,WAAW,GAAG,SAAS;QAC5B,IAAI,CAAC,QAAQ,GAAG,IAAI;IACtB;AA+BF;;ADxCA;;;;;;AEEO,MAAM,4CAA6B;AAEnC,MAAM,4CAAqD;IAChE;QAAE,MAAM;QAAiC,SAAS;IAA2B;IAC7E;QAAE,MAAM;QAAkB,SAAS;IAA2B;CAC/D;AAKM,MAAM,4CAA0B;IACrC,6BAA6B;IAC7B,SAAS;QAAC;QAAkB;KAAiB;AAC/C;;;AFXA,MAAM,8BAAQ,IAAI,CAAA,GAAA,yCAAY,AAAD;AAE7B,MAAM,2CAAqB,CAAC,QAAoC;IAC9D,OAAO,UAAU,IAAI,IAAI,OAAO,UAAU;AAC5C;AAEO,MAAM,4CAA8B,CAAC,OAGlB;QAWL;IAVnB,MAAM,eAAE,YAAW,OAAE,IAAG,EAAE,GAAG;IAC7B,MAAM,cAAc,gBAAA,iBAAA,KAAA,IAAA,IAAK,KAAK,CAAC,IAAI,CAAC,EAAE;IAEtC,IAAI,CAAC,aAAa;IAElB,MAAM,aAAa,4BAAM,GAAG,CAAC;IAC7B,IAAI,YAAY,OAAO;IAEvB,MAAM,OAAO;WAAI,CAAA,GAAA,yCAA6B;WAAO,eAAe,EAAE;KAAE;IAExE,MAAM,aAAa,CAAA,aAAA,KAAK,IAAI,CAAC,CAAC,QAAE,KAAI,EAAE,GAAK;QACzC,IAAI,yCAAmB,OAAO,OAAO,SAAS;QAC9C,OAAO,KAAK,IAAI,CAAC;IACnB,gBAHmB,wBAAA,KAAA,IAAA,WAGf,OAAO;IACX,IAAI,YAAY,4BAAM,GAAG,CAAC,aAAa;IAEvC,OAAO;AACT;;;ADzBO,MAAM,4CACX,CAAC,cACD,CAAC,MAAmC;QAClC,MAAM,WAAW,CAAA,GAAA,8BAAW,EAAE,IAAI;QAClC,MAAM,YAAE,SAAQ,EAAE,GAAG,IAAI,OAAO;QAEhC,mBAAmB;QACnB,MAAM,UAAU,CAAA,GAAA,yCAA0B,EAAE;yBAAE;YAAa,KAAK;QAAS;QACzE,IAAI,CAAC,SAAS,OAAO;QAErB,SAAS,OAAO,CAAC,MAAM,CAAC,iBAAiB;QAEzC,OAAO;IACT;AAEK,MAAM,2CACX,CAAC,cACD,CAAC,OACD,CAAC,MAAmC;YAClC,MAAM,WAAW,0CAA8B,aAAa;YAE5D,OAAO,KAAK,KAAK;QACnB;;AD5BF;;;;;","sources":["packages/next/cache-files-middleware/src/index.ts","packages/next/cache-files-middleware/src/middleware.ts","packages/next/cache-files-middleware/src/utils.ts","packages/next/cache-files-middleware/src/cache.ts","packages/next/cache-files-middleware/src/constants.ts","packages/next/cache-files-middleware/src/types.ts"],"sourcesContent":["export * from './middleware'\nexport * from './utils'\nexport * from './constants'\nexport * from './types'\nexport * from './cache'\n","import { NextResponse } from 'next/server'\nimport type { NextRequest } from 'next/server'\nimport { findCacheControlFileHeaders } from './utils'\nimport { CacheAllowedItem } from './types'\n\n// use only for cache files\nexport const cacheControlMiddlewareFactory =\n (allowedList?: CacheAllowedItem[]) =>\n (req: NextRequest): NextResponse => {\n const response = NextResponse.next()\n const { pathname } = req.nextUrl\n\n // Use allowed list\n const headers = findCacheControlFileHeaders({ allowedList, url: pathname })\n if (!headers) return response\n\n response.headers.append('Cache-Control', headers)\n\n return response\n }\n\nexport const cacheControlMiddlewareWrapper =\n (allowedList?: CacheAllowedItem[]) =>\n (next: (req: NextRequest, res: NextResponse) => NextResponse) =>\n (req: NextRequest): NextResponse => {\n const response = cacheControlMiddlewareFactory(allowedList)(req)\n\n return next(req, response)\n }\n","import { CacheStorage } from './cache'\nimport { CACHE_ALLOWED_LIST_FILES_PATHS } from './constants'\nimport { CacheAllowedItem } from './types'\n\nconst cache = new CacheStorage()\n\nconst checkValueIsString = (value: unknown): value is string => {\n return value !== null && typeof value === 'string'\n}\n\nexport const findCacheControlFileHeaders = (data: {\n allowedList?: CacheAllowedItem[]\n url?: string\n}): string | undefined => {\n const { allowedList, url } = data\n const requestPath = url?.split('?')[0]\n\n if (!requestPath) return\n\n const cacheValue = cache.get(requestPath)\n if (cacheValue) return cacheValue\n\n const list = [...CACHE_ALLOWED_LIST_FILES_PATHS, ...(allowedList || [])]\n\n const urlHeaders = list.find(({ path }) => {\n if (checkValueIsString(path)) return path === requestPath\n return path.test(requestPath)\n })?.headers\n if (urlHeaders) cache.set(requestPath, urlHeaders)\n\n return urlHeaders\n}\n","const DEFAULT_CACHE_LIMIT = 1000\n\nexport class CacheStorage {\n private _storage: Map<string, string>\n private _cacheLimit: number\n\n constructor(limit?: number) {\n this._cacheLimit = limit || DEFAULT_CACHE_LIMIT\n this._storage = new Map<string, string>()\n }\n\n set(key: string, value: string) {\n // refresh key\n if (this._storage.has(key)) this._storage.delete(key)\n // delete oldest\n else if (this._storage.size == this._cacheLimit) this._storage.delete(this.getFirst())\n\n this._storage.set(key, value)\n }\n\n get(key: string) {\n const item = this._storage.get(key)\n if (item) {\n // refresh key\n this._storage.delete(key)\n this._storage.set(key, item)\n }\n\n return item\n }\n\n delete(key: string) {\n if (this._storage.has(key)) {\n this._storage.delete(key)\n }\n }\n\n getFirst() {\n return this._storage.keys().next().value as string\n }\n}\n","import { CacheAllowedItem } from './types'\n\nexport const CACHE_FILE_DEFAULT_HEADERS = 'public, max-age=180, stale-if-error=1200, stale-while-revalidate=60'\n\nexport const CACHE_ALLOWED_LIST_FILES_PATHS: CacheAllowedItem[] = [\n { path: /^\\/favicon-?[^@]*.(svg|ico)?$/, headers: CACHE_FILE_DEFAULT_HEADERS },\n { path: '/manifest.json', headers: CACHE_FILE_DEFAULT_HEADERS },\n]\n\n// It is example.\n// Note: The matcher values need to be constants so they can be statically analyzed at build-time.\n// Dynamic values such as variables will be ignored.\nexport const exampleMiddlewareConfig = {\n // paths where use middleware\n matcher: ['/manifest.json', '/favicon:size*'],\n}\n","export type CacheAllowedItem = {\n path: RegExp | string\n headers: string\n}\n"],"names":[],"version":3,"file":"index.cjs.map"}
1
+ {"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;ACAA;;;;;;;AEAA,MAAM,4CAAsB;AAErB,MAAM;IAIX,YAAY,KAAc,CAAE;QAC1B,IAAI,CAAC,WAAW,GAAG,SAAS;QAC5B,IAAI,CAAC,QAAQ,GAAG,IAAI;IACtB;IAEA,IAAI,GAAW,EAAE,KAAa,EAAE;QAC9B,cAAc;QACd,IAAI,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,MAAM,IAAI,CAAC,QAAQ,CAAC,MAAM,CAAC;aAE5C,IAAI,IAAI,CAAC,QAAQ,CAAC,IAAI,IAAI,IAAI,CAAC,WAAW,EAAE,IAAI,CAAC,QAAQ,CAAC,MAAM,CAAC,IAAI,CAAC,QAAQ;QAEnF,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,KAAK;IACzB;IAEA,IAAI,GAAW,EAAE;QACf,MAAM,OAAO,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC;QAC/B,IAAI,MAAM;YACR,cAAc;YACd,IAAI,CAAC,QAAQ,CAAC,MAAM,CAAC;YACrB,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,KAAK;QACzB,CAAC;QAED,OAAO;IACT;IAEA,OAAO,GAAW,EAAE;QAClB,IAAI,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,MACpB,IAAI,CAAC,QAAQ,CAAC,MAAM,CAAC;IAEzB;IAEA,WAAW;QACT,OAAO,IAAI,CAAC,QAAQ,CAAC,IAAI,GAAG,IAAI,GAAG,KAAK;IAC1C;AACF;;ADxCA;;;;;;AEEO,MAAM,4CAA6B;AAEnC,MAAM,4CAAqD;IAChE;QAAE,MAAM;QAAiC,SAAS;IAA2B;IAC7E;QAAE,MAAM;QAAkB,SAAS;IAA2B;CAC/D;AAKM,MAAM,4CAA0B;IACrC,6BAA6B;IAC7B,SAAS;QAAC;QAAkB;KAAiB;AAC/C;;;AFXA,MAAM,8BAAQ,IAAI,CAAA,GAAA,yCAAY,AAAD;AAE7B,MAAM,2CAAqB,CAAC,QAAoC;IAC9D,OAAO,UAAU,IAAI,IAAI,OAAO,UAAU;AAC5C;AAEO,MAAM,4CAA8B,CAAC,OAGlB;IACxB,MAAM,eAAE,YAAW,OAAE,IAAG,EAAE,GAAG;IAC7B,MAAM,cAAc,KAAK,MAAM,IAAI,CAAC,EAAE;IAEtC,IAAI,CAAC,aAAa;IAElB,MAAM,aAAa,4BAAM,GAAG,CAAC;IAC7B,IAAI,YAAY,OAAO;IAEvB,MAAM,OAAO;WAAI,CAAA,GAAA,yCAA6B;WAAO,eAAe,EAAE;KAAE;IAExE,MAAM,aAAa,KAAK,IAAI,CAAC,CAAC,QAAE,KAAI,EAAE,GAAK;QACzC,IAAI,yCAAmB,OAAO,OAAO,SAAS;QAC9C,OAAO,KAAK,IAAI,CAAC;IACnB,IAAI;IACJ,IAAI,YAAY,4BAAM,GAAG,CAAC,aAAa;IAEvC,OAAO;AACT;;;ADzBO,MAAM,4CACX,CAAC,cACD,CAAC,MAAmC;QAClC,MAAM,WAAW,CAAA,GAAA,8BAAW,EAAE,IAAI;QAClC,MAAM,YAAE,SAAQ,EAAE,GAAG,IAAI,OAAO;QAEhC,mBAAmB;QACnB,MAAM,UAAU,CAAA,GAAA,yCAA0B,EAAE;yBAAE;YAAa,KAAK;QAAS;QACzE,IAAI,CAAC,SAAS,OAAO;QAErB,SAAS,OAAO,CAAC,MAAM,CAAC,iBAAiB;QAEzC,OAAO;IACT;AAEK,MAAM,2CACX,CAAC,cACD,CAAC,OACD,CAAC,MAAmC;YAClC,MAAM,WAAW,0CAA8B,aAAa;YAE5D,OAAO,KAAK,KAAK;QACnB;;AD5BF;;;;;","sources":["packages/next/cache-files-middleware/src/index.ts","packages/next/cache-files-middleware/src/middleware.ts","packages/next/cache-files-middleware/src/utils.ts","packages/next/cache-files-middleware/src/cache.ts","packages/next/cache-files-middleware/src/constants.ts","packages/next/cache-files-middleware/src/types.ts"],"sourcesContent":["export * from './middleware'\nexport * from './utils'\nexport * from './constants'\nexport * from './types'\nexport * from './cache'\n","import { NextResponse } from 'next/server'\nimport type { NextRequest } from 'next/server'\nimport { findCacheControlFileHeaders } from './utils'\nimport { CacheAllowedItem } from './types'\n\n// use only for cache files\nexport const cacheControlMiddlewareFactory =\n (allowedList?: CacheAllowedItem[]) =>\n (req: NextRequest): NextResponse => {\n const response = NextResponse.next()\n const { pathname } = req.nextUrl\n\n // Use allowed list\n const headers = findCacheControlFileHeaders({ allowedList, url: pathname })\n if (!headers) return response\n\n response.headers.append('Cache-Control', headers)\n\n return response\n }\n\nexport const cacheControlMiddlewareWrapper =\n (allowedList?: CacheAllowedItem[]) =>\n (next: (req: NextRequest, res: NextResponse) => NextResponse) =>\n (req: NextRequest): NextResponse => {\n const response = cacheControlMiddlewareFactory(allowedList)(req)\n\n return next(req, response)\n }\n","import { CacheStorage } from './cache'\nimport { CACHE_ALLOWED_LIST_FILES_PATHS } from './constants'\nimport { CacheAllowedItem } from './types'\n\nconst cache = new CacheStorage()\n\nconst checkValueIsString = (value: unknown): value is string => {\n return value !== null && typeof value === 'string'\n}\n\nexport const findCacheControlFileHeaders = (data: {\n allowedList?: CacheAllowedItem[]\n url?: string\n}): string | undefined => {\n const { allowedList, url } = data\n const requestPath = url?.split('?')[0]\n\n if (!requestPath) return\n\n const cacheValue = cache.get(requestPath)\n if (cacheValue) return cacheValue\n\n const list = [...CACHE_ALLOWED_LIST_FILES_PATHS, ...(allowedList || [])]\n\n const urlHeaders = list.find(({ path }) => {\n if (checkValueIsString(path)) return path === requestPath\n return path.test(requestPath)\n })?.headers\n if (urlHeaders) cache.set(requestPath, urlHeaders)\n\n return urlHeaders\n}\n","const DEFAULT_CACHE_LIMIT = 1000\n\nexport class CacheStorage {\n private _storage: Map<string, string>\n private _cacheLimit: number\n\n constructor(limit?: number) {\n this._cacheLimit = limit || DEFAULT_CACHE_LIMIT\n this._storage = new Map<string, string>()\n }\n\n set(key: string, value: string) {\n // refresh key\n if (this._storage.has(key)) this._storage.delete(key)\n // delete oldest\n else if (this._storage.size == this._cacheLimit) this._storage.delete(this.getFirst())\n\n this._storage.set(key, value)\n }\n\n get(key: string) {\n const item = this._storage.get(key)\n if (item) {\n // refresh key\n this._storage.delete(key)\n this._storage.set(key, item)\n }\n\n return item\n }\n\n delete(key: string) {\n if (this._storage.has(key)) {\n this._storage.delete(key)\n }\n }\n\n getFirst() {\n return this._storage.keys().next().value as string\n }\n}\n","import { CacheAllowedItem } from './types'\n\nexport const CACHE_FILE_DEFAULT_HEADERS = 'public, max-age=180, stale-if-error=1200, stale-while-revalidate=60'\n\nexport const CACHE_ALLOWED_LIST_FILES_PATHS: CacheAllowedItem[] = [\n { path: /^\\/favicon-?[^@]*.(svg|ico)?$/, headers: CACHE_FILE_DEFAULT_HEADERS },\n { path: '/manifest.json', headers: CACHE_FILE_DEFAULT_HEADERS },\n]\n\n// It is example.\n// Note: The matcher values need to be constants so they can be statically analyzed at build-time.\n// Dynamic values such as variables will be ignored.\nexport const exampleMiddlewareConfig = {\n // paths where use middleware\n matcher: ['/manifest.json', '/favicon:size*'],\n}\n","export type CacheAllowedItem = {\n path: RegExp | string\n headers: string\n}\n"],"names":[],"version":3,"file":"index.cjs.map"}
package/dist/index.mjs CHANGED
@@ -16,6 +16,10 @@ var $60acf04ea0909747$exports = {};
16
16
  $parcel$export($60acf04ea0909747$exports, "CacheStorage", function () { return $60acf04ea0909747$export$2b715f8922748263; });
17
17
  const $60acf04ea0909747$var$DEFAULT_CACHE_LIMIT = 1000;
18
18
  class $60acf04ea0909747$export$2b715f8922748263 {
19
+ constructor(limit){
20
+ this._cacheLimit = limit || $60acf04ea0909747$var$DEFAULT_CACHE_LIMIT;
21
+ this._storage = new Map();
22
+ }
19
23
  set(key, value) {
20
24
  // refresh key
21
25
  if (this._storage.has(key)) this._storage.delete(key);
@@ -37,10 +41,6 @@ class $60acf04ea0909747$export$2b715f8922748263 {
37
41
  getFirst() {
38
42
  return this._storage.keys().next().value;
39
43
  }
40
- constructor(limit){
41
- this._cacheLimit = limit || $60acf04ea0909747$var$DEFAULT_CACHE_LIMIT;
42
- this._storage = new Map();
43
- }
44
44
  }
45
45
 
46
46
 
@@ -74,9 +74,8 @@ const $43f369dac868c8fa$var$checkValueIsString = (value)=>{
74
74
  return value !== null && typeof value === "string";
75
75
  };
76
76
  const $43f369dac868c8fa$export$2cbb5ba6d79dc635 = (data)=>{
77
- var _list_find;
78
77
  const { allowedList: allowedList , url: url } = data;
79
- const requestPath = url === null || url === void 0 ? void 0 : url.split("?")[0];
78
+ const requestPath = url?.split("?")[0];
80
79
  if (!requestPath) return;
81
80
  const cacheValue = $43f369dac868c8fa$var$cache.get(requestPath);
82
81
  if (cacheValue) return cacheValue;
@@ -84,10 +83,10 @@ const $43f369dac868c8fa$export$2cbb5ba6d79dc635 = (data)=>{
84
83
  ...(0, $7d49ed295294e3c0$export$a0fb92f5bd6f13d2),
85
84
  ...allowedList || []
86
85
  ];
87
- const urlHeaders = (_list_find = list.find(({ path: path })=>{
86
+ const urlHeaders = list.find(({ path: path })=>{
88
87
  if ($43f369dac868c8fa$var$checkValueIsString(path)) return path === requestPath;
89
88
  return path.test(requestPath);
90
- })) === null || _list_find === void 0 ? void 0 : _list_find.headers;
89
+ })?.headers;
91
90
  if (urlHeaders) $43f369dac868c8fa$var$cache.set(requestPath, urlHeaders);
92
91
  return urlHeaders;
93
92
  };
@@ -1 +1 @@
1
- {"mappings":";;;;;;;;;ACAA;;;;;;;AEAA,MAAM,4CAAsB;AAErB,MAAM;IASX,IAAI,GAAW,EAAE,KAAa,EAAE;QAC9B,cAAc;QACd,IAAI,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,MAAM,IAAI,CAAC,QAAQ,CAAC,MAAM,CAAC;aAE5C,IAAI,IAAI,CAAC,QAAQ,CAAC,IAAI,IAAI,IAAI,CAAC,WAAW,EAAE,IAAI,CAAC,QAAQ,CAAC,MAAM,CAAC,IAAI,CAAC,QAAQ;QAEnF,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,KAAK;IACzB;IAEA,IAAI,GAAW,EAAE;QACf,MAAM,OAAO,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC;QAC/B,IAAI,MAAM;YACR,cAAc;YACd,IAAI,CAAC,QAAQ,CAAC,MAAM,CAAC;YACrB,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,KAAK;QACzB,CAAC;QAED,OAAO;IACT;IAEA,OAAO,GAAW,EAAE;QAClB,IAAI,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,MACpB,IAAI,CAAC,QAAQ,CAAC,MAAM,CAAC;IAEzB;IAEA,WAAW;QACT,OAAO,IAAI,CAAC,QAAQ,CAAC,IAAI,GAAG,IAAI,GAAG,KAAK;IAC1C;IAjCA,YAAY,KAAc,CAAE;QAC1B,IAAI,CAAC,WAAW,GAAG,SAAS;QAC5B,IAAI,CAAC,QAAQ,GAAG,IAAI;IACtB;AA+BF;;ADxCA;;;;;;AEEO,MAAM,4CAA6B;AAEnC,MAAM,4CAAqD;IAChE;QAAE,MAAM;QAAiC,SAAS;IAA2B;IAC7E;QAAE,MAAM;QAAkB,SAAS;IAA2B;CAC/D;AAKM,MAAM,4CAA0B;IACrC,6BAA6B;IAC7B,SAAS;QAAC;QAAkB;KAAiB;AAC/C;;;AFXA,MAAM,8BAAQ,IAAI,CAAA,GAAA,yCAAY,AAAD;AAE7B,MAAM,2CAAqB,CAAC,QAAoC;IAC9D,OAAO,UAAU,IAAI,IAAI,OAAO,UAAU;AAC5C;AAEO,MAAM,4CAA8B,CAAC,OAGlB;QAWL;IAVnB,MAAM,eAAE,YAAW,OAAE,IAAG,EAAE,GAAG;IAC7B,MAAM,cAAc,gBAAA,iBAAA,KAAA,IAAA,IAAK,KAAK,CAAC,IAAI,CAAC,EAAE;IAEtC,IAAI,CAAC,aAAa;IAElB,MAAM,aAAa,4BAAM,GAAG,CAAC;IAC7B,IAAI,YAAY,OAAO;IAEvB,MAAM,OAAO;WAAI,CAAA,GAAA,yCAA6B;WAAO,eAAe,EAAE;KAAE;IAExE,MAAM,aAAa,CAAA,aAAA,KAAK,IAAI,CAAC,CAAC,QAAE,KAAI,EAAE,GAAK;QACzC,IAAI,yCAAmB,OAAO,OAAO,SAAS;QAC9C,OAAO,KAAK,IAAI,CAAC;IACnB,gBAHmB,wBAAA,KAAA,IAAA,WAGf,OAAO;IACX,IAAI,YAAY,4BAAM,GAAG,CAAC,aAAa;IAEvC,OAAO;AACT;;;ADzBO,MAAM,4CACX,CAAC,cACD,CAAC,MAAmC;QAClC,MAAM,WAAW,CAAA,GAAA,mBAAW,EAAE,IAAI;QAClC,MAAM,YAAE,SAAQ,EAAE,GAAG,IAAI,OAAO;QAEhC,mBAAmB;QACnB,MAAM,UAAU,CAAA,GAAA,yCAA0B,EAAE;yBAAE;YAAa,KAAK;QAAS;QACzE,IAAI,CAAC,SAAS,OAAO;QAErB,SAAS,OAAO,CAAC,MAAM,CAAC,iBAAiB;QAEzC,OAAO;IACT;AAEK,MAAM,2CACX,CAAC,cACD,CAAC,OACD,CAAC,MAAmC;YAClC,MAAM,WAAW,0CAA8B,aAAa;YAE5D,OAAO,KAAK,KAAK;QACnB;;AD5BF;;;;;","sources":["packages/next/cache-files-middleware/src/index.ts","packages/next/cache-files-middleware/src/middleware.ts","packages/next/cache-files-middleware/src/utils.ts","packages/next/cache-files-middleware/src/cache.ts","packages/next/cache-files-middleware/src/constants.ts","packages/next/cache-files-middleware/src/types.ts"],"sourcesContent":["export * from './middleware'\nexport * from './utils'\nexport * from './constants'\nexport * from './types'\nexport * from './cache'\n","import { NextResponse } from 'next/server'\nimport type { NextRequest } from 'next/server'\nimport { findCacheControlFileHeaders } from './utils'\nimport { CacheAllowedItem } from './types'\n\n// use only for cache files\nexport const cacheControlMiddlewareFactory =\n (allowedList?: CacheAllowedItem[]) =>\n (req: NextRequest): NextResponse => {\n const response = NextResponse.next()\n const { pathname } = req.nextUrl\n\n // Use allowed list\n const headers = findCacheControlFileHeaders({ allowedList, url: pathname })\n if (!headers) return response\n\n response.headers.append('Cache-Control', headers)\n\n return response\n }\n\nexport const cacheControlMiddlewareWrapper =\n (allowedList?: CacheAllowedItem[]) =>\n (next: (req: NextRequest, res: NextResponse) => NextResponse) =>\n (req: NextRequest): NextResponse => {\n const response = cacheControlMiddlewareFactory(allowedList)(req)\n\n return next(req, response)\n }\n","import { CacheStorage } from './cache'\nimport { CACHE_ALLOWED_LIST_FILES_PATHS } from './constants'\nimport { CacheAllowedItem } from './types'\n\nconst cache = new CacheStorage()\n\nconst checkValueIsString = (value: unknown): value is string => {\n return value !== null && typeof value === 'string'\n}\n\nexport const findCacheControlFileHeaders = (data: {\n allowedList?: CacheAllowedItem[]\n url?: string\n}): string | undefined => {\n const { allowedList, url } = data\n const requestPath = url?.split('?')[0]\n\n if (!requestPath) return\n\n const cacheValue = cache.get(requestPath)\n if (cacheValue) return cacheValue\n\n const list = [...CACHE_ALLOWED_LIST_FILES_PATHS, ...(allowedList || [])]\n\n const urlHeaders = list.find(({ path }) => {\n if (checkValueIsString(path)) return path === requestPath\n return path.test(requestPath)\n })?.headers\n if (urlHeaders) cache.set(requestPath, urlHeaders)\n\n return urlHeaders\n}\n","const DEFAULT_CACHE_LIMIT = 1000\n\nexport class CacheStorage {\n private _storage: Map<string, string>\n private _cacheLimit: number\n\n constructor(limit?: number) {\n this._cacheLimit = limit || DEFAULT_CACHE_LIMIT\n this._storage = new Map<string, string>()\n }\n\n set(key: string, value: string) {\n // refresh key\n if (this._storage.has(key)) this._storage.delete(key)\n // delete oldest\n else if (this._storage.size == this._cacheLimit) this._storage.delete(this.getFirst())\n\n this._storage.set(key, value)\n }\n\n get(key: string) {\n const item = this._storage.get(key)\n if (item) {\n // refresh key\n this._storage.delete(key)\n this._storage.set(key, item)\n }\n\n return item\n }\n\n delete(key: string) {\n if (this._storage.has(key)) {\n this._storage.delete(key)\n }\n }\n\n getFirst() {\n return this._storage.keys().next().value as string\n }\n}\n","import { CacheAllowedItem } from './types'\n\nexport const CACHE_FILE_DEFAULT_HEADERS = 'public, max-age=180, stale-if-error=1200, stale-while-revalidate=60'\n\nexport const CACHE_ALLOWED_LIST_FILES_PATHS: CacheAllowedItem[] = [\n { path: /^\\/favicon-?[^@]*.(svg|ico)?$/, headers: CACHE_FILE_DEFAULT_HEADERS },\n { path: '/manifest.json', headers: CACHE_FILE_DEFAULT_HEADERS },\n]\n\n// It is example.\n// Note: The matcher values need to be constants so they can be statically analyzed at build-time.\n// Dynamic values such as variables will be ignored.\nexport const exampleMiddlewareConfig = {\n // paths where use middleware\n matcher: ['/manifest.json', '/favicon:size*'],\n}\n","export type CacheAllowedItem = {\n path: RegExp | string\n headers: string\n}\n"],"names":[],"version":3,"file":"index.mjs.map"}
1
+ {"mappings":";;;;;;;;;ACAA;;;;;;;AEAA,MAAM,4CAAsB;AAErB,MAAM;IAIX,YAAY,KAAc,CAAE;QAC1B,IAAI,CAAC,WAAW,GAAG,SAAS;QAC5B,IAAI,CAAC,QAAQ,GAAG,IAAI;IACtB;IAEA,IAAI,GAAW,EAAE,KAAa,EAAE;QAC9B,cAAc;QACd,IAAI,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,MAAM,IAAI,CAAC,QAAQ,CAAC,MAAM,CAAC;aAE5C,IAAI,IAAI,CAAC,QAAQ,CAAC,IAAI,IAAI,IAAI,CAAC,WAAW,EAAE,IAAI,CAAC,QAAQ,CAAC,MAAM,CAAC,IAAI,CAAC,QAAQ;QAEnF,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,KAAK;IACzB;IAEA,IAAI,GAAW,EAAE;QACf,MAAM,OAAO,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC;QAC/B,IAAI,MAAM;YACR,cAAc;YACd,IAAI,CAAC,QAAQ,CAAC,MAAM,CAAC;YACrB,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,KAAK;QACzB,CAAC;QAED,OAAO;IACT;IAEA,OAAO,GAAW,EAAE;QAClB,IAAI,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,MACpB,IAAI,CAAC,QAAQ,CAAC,MAAM,CAAC;IAEzB;IAEA,WAAW;QACT,OAAO,IAAI,CAAC,QAAQ,CAAC,IAAI,GAAG,IAAI,GAAG,KAAK;IAC1C;AACF;;ADxCA;;;;;;AEEO,MAAM,4CAA6B;AAEnC,MAAM,4CAAqD;IAChE;QAAE,MAAM;QAAiC,SAAS;IAA2B;IAC7E;QAAE,MAAM;QAAkB,SAAS;IAA2B;CAC/D;AAKM,MAAM,4CAA0B;IACrC,6BAA6B;IAC7B,SAAS;QAAC;QAAkB;KAAiB;AAC/C;;;AFXA,MAAM,8BAAQ,IAAI,CAAA,GAAA,yCAAY,AAAD;AAE7B,MAAM,2CAAqB,CAAC,QAAoC;IAC9D,OAAO,UAAU,IAAI,IAAI,OAAO,UAAU;AAC5C;AAEO,MAAM,4CAA8B,CAAC,OAGlB;IACxB,MAAM,eAAE,YAAW,OAAE,IAAG,EAAE,GAAG;IAC7B,MAAM,cAAc,KAAK,MAAM,IAAI,CAAC,EAAE;IAEtC,IAAI,CAAC,aAAa;IAElB,MAAM,aAAa,4BAAM,GAAG,CAAC;IAC7B,IAAI,YAAY,OAAO;IAEvB,MAAM,OAAO;WAAI,CAAA,GAAA,yCAA6B;WAAO,eAAe,EAAE;KAAE;IAExE,MAAM,aAAa,KAAK,IAAI,CAAC,CAAC,QAAE,KAAI,EAAE,GAAK;QACzC,IAAI,yCAAmB,OAAO,OAAO,SAAS;QAC9C,OAAO,KAAK,IAAI,CAAC;IACnB,IAAI;IACJ,IAAI,YAAY,4BAAM,GAAG,CAAC,aAAa;IAEvC,OAAO;AACT;;;ADzBO,MAAM,4CACX,CAAC,cACD,CAAC,MAAmC;QAClC,MAAM,WAAW,CAAA,GAAA,mBAAW,EAAE,IAAI;QAClC,MAAM,YAAE,SAAQ,EAAE,GAAG,IAAI,OAAO;QAEhC,mBAAmB;QACnB,MAAM,UAAU,CAAA,GAAA,yCAA0B,EAAE;yBAAE;YAAa,KAAK;QAAS;QACzE,IAAI,CAAC,SAAS,OAAO;QAErB,SAAS,OAAO,CAAC,MAAM,CAAC,iBAAiB;QAEzC,OAAO;IACT;AAEK,MAAM,2CACX,CAAC,cACD,CAAC,OACD,CAAC,MAAmC;YAClC,MAAM,WAAW,0CAA8B,aAAa;YAE5D,OAAO,KAAK,KAAK;QACnB;;AD5BF;;;;;","sources":["packages/next/cache-files-middleware/src/index.ts","packages/next/cache-files-middleware/src/middleware.ts","packages/next/cache-files-middleware/src/utils.ts","packages/next/cache-files-middleware/src/cache.ts","packages/next/cache-files-middleware/src/constants.ts","packages/next/cache-files-middleware/src/types.ts"],"sourcesContent":["export * from './middleware'\nexport * from './utils'\nexport * from './constants'\nexport * from './types'\nexport * from './cache'\n","import { NextResponse } from 'next/server'\nimport type { NextRequest } from 'next/server'\nimport { findCacheControlFileHeaders } from './utils'\nimport { CacheAllowedItem } from './types'\n\n// use only for cache files\nexport const cacheControlMiddlewareFactory =\n (allowedList?: CacheAllowedItem[]) =>\n (req: NextRequest): NextResponse => {\n const response = NextResponse.next()\n const { pathname } = req.nextUrl\n\n // Use allowed list\n const headers = findCacheControlFileHeaders({ allowedList, url: pathname })\n if (!headers) return response\n\n response.headers.append('Cache-Control', headers)\n\n return response\n }\n\nexport const cacheControlMiddlewareWrapper =\n (allowedList?: CacheAllowedItem[]) =>\n (next: (req: NextRequest, res: NextResponse) => NextResponse) =>\n (req: NextRequest): NextResponse => {\n const response = cacheControlMiddlewareFactory(allowedList)(req)\n\n return next(req, response)\n }\n","import { CacheStorage } from './cache'\nimport { CACHE_ALLOWED_LIST_FILES_PATHS } from './constants'\nimport { CacheAllowedItem } from './types'\n\nconst cache = new CacheStorage()\n\nconst checkValueIsString = (value: unknown): value is string => {\n return value !== null && typeof value === 'string'\n}\n\nexport const findCacheControlFileHeaders = (data: {\n allowedList?: CacheAllowedItem[]\n url?: string\n}): string | undefined => {\n const { allowedList, url } = data\n const requestPath = url?.split('?')[0]\n\n if (!requestPath) return\n\n const cacheValue = cache.get(requestPath)\n if (cacheValue) return cacheValue\n\n const list = [...CACHE_ALLOWED_LIST_FILES_PATHS, ...(allowedList || [])]\n\n const urlHeaders = list.find(({ path }) => {\n if (checkValueIsString(path)) return path === requestPath\n return path.test(requestPath)\n })?.headers\n if (urlHeaders) cache.set(requestPath, urlHeaders)\n\n return urlHeaders\n}\n","const DEFAULT_CACHE_LIMIT = 1000\n\nexport class CacheStorage {\n private _storage: Map<string, string>\n private _cacheLimit: number\n\n constructor(limit?: number) {\n this._cacheLimit = limit || DEFAULT_CACHE_LIMIT\n this._storage = new Map<string, string>()\n }\n\n set(key: string, value: string) {\n // refresh key\n if (this._storage.has(key)) this._storage.delete(key)\n // delete oldest\n else if (this._storage.size == this._cacheLimit) this._storage.delete(this.getFirst())\n\n this._storage.set(key, value)\n }\n\n get(key: string) {\n const item = this._storage.get(key)\n if (item) {\n // refresh key\n this._storage.delete(key)\n this._storage.set(key, item)\n }\n\n return item\n }\n\n delete(key: string) {\n if (this._storage.has(key)) {\n this._storage.delete(key)\n }\n }\n\n getFirst() {\n return this._storage.keys().next().value as string\n }\n}\n","import { CacheAllowedItem } from './types'\n\nexport const CACHE_FILE_DEFAULT_HEADERS = 'public, max-age=180, stale-if-error=1200, stale-while-revalidate=60'\n\nexport const CACHE_ALLOWED_LIST_FILES_PATHS: CacheAllowedItem[] = [\n { path: /^\\/favicon-?[^@]*.(svg|ico)?$/, headers: CACHE_FILE_DEFAULT_HEADERS },\n { path: '/manifest.json', headers: CACHE_FILE_DEFAULT_HEADERS },\n]\n\n// It is example.\n// Note: The matcher values need to be constants so they can be statically analyzed at build-time.\n// Dynamic values such as variables will be ignored.\nexport const exampleMiddlewareConfig = {\n // paths where use middleware\n matcher: ['/manifest.json', '/favicon:size*'],\n}\n","export type CacheAllowedItem = {\n path: RegExp | string\n headers: string\n}\n"],"names":[],"version":3,"file":"index.mjs.map"}
package/package.json CHANGED
@@ -3,7 +3,7 @@
3
3
  "description": "Next middleware for cache files",
4
4
  "repository": "git@github.com:lidofinance/warehouse.git",
5
5
  "license": "MIT",
6
- "version": "0.22.0",
6
+ "version": "0.24.0",
7
7
  "files": [
8
8
  "dist"
9
9
  ],
@@ -26,7 +26,7 @@
26
26
  "next": "^12.2.0"
27
27
  },
28
28
  "devDependencies": {
29
- "@lidofinance/config-prettier": "~0.22.0",
29
+ "@lidofinance/config-prettier": "~0.24.0",
30
30
  "@types/jest": "^29.2.4",
31
31
  "@types/node": "^18.11.17",
32
32
  "jest": "^29.3.1",