@lidofinance/next-cache-files-middleware 0.35.0 → 0.37.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
@@ -1,4 +1,4 @@
1
- var $2Aiq4$nextserver = require("next/server");
1
+ var $2Aiq4$nextserverjs = require("next/server.js");
2
2
 
3
3
  function $parcel$exportWildcard(dest, source) {
4
4
  Object.keys(source).forEach(function(key) {
@@ -109,7 +109,7 @@ const $db38a4f6de2a3704$export$2cbb5ba6d79dc635 = (data)=>{
109
109
 
110
110
 
111
111
  const $9295f689042d9f46$export$772f11b002f0df57 = (allowedList)=>(req)=>{
112
- const response = (0, $2Aiq4$nextserver.NextResponse).next();
112
+ const response = (0, $2Aiq4$nextserverjs.NextResponse).next();
113
113
  const { pathname: pathname } = req.nextUrl;
114
114
  // Use allowed list
115
115
  const headers = (0, $db38a4f6de2a3704$export$2cbb5ba6d79dc635)({
@@ -1 +1 @@
1
- {"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AGAA,MAAM,4CAAsB;AAErB,MAAM;IAIX,YAAY,KAAc,CAAE;QAC1B,IAAI,CAAC,cAAc,SAAS;QAC5B,IAAI,CAAC,WAAW,IAAI;IACtB;IAEA,IAAI,GAAW,EAAE,KAAa,EAAE;QAC9B,cAAc;QACd,IAAI,IAAI,CAAC,SAAS,IAAI,MAAM,IAAI,CAAC,SAAS,OAAO;aAE5C,IAAI,IAAI,CAAC,SAAS,QAAQ,IAAI,CAAC,aAAa,IAAI,CAAC,SAAS,OAAO,IAAI,CAAC;QAE3E,IAAI,CAAC,SAAS,IAAI,KAAK;IACzB;IAEA,IAAI,GAAW,EAAE;QACf,MAAM,OAAO,IAAI,CAAC,SAAS,IAAI;QAC/B,IAAI,MAAM;YACR,cAAc;YACd,IAAI,CAAC,SAAS,OAAO;YACrB,IAAI,CAAC,SAAS,IAAI,KAAK;QACzB;QAEA,OAAO;IACT;IAEA,OAAO,GAAW,EAAE;QAClB,IAAI,IAAI,CAAC,SAAS,IAAI,MACpB,IAAI,CAAC,SAAS,OAAO;IAEzB;IAEA,WAAW;QACT,OAAO,IAAI,CAAC,SAAS,OAAO,OAAO;IACrC;AACF;;;;;;;;ACtCO,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,yCAAW;AAE7B,MAAM,2CAAqB,CAAC;IAC1B,OAAO,UAAU,QAAQ,OAAO,UAAU;AAC5C;AAEO,MAAM,4CAA8B,CAAC;IAI1C,MAAM,eAAE,WAAW,OAAE,GAAG,EAAE,GAAG;IAC7B,MAAM,cAAc,KAAK,MAAM,IAAI,CAAC,EAAE;IAEtC,IAAI,CAAC,aAAa;IAElB,MAAM,aAAa,4BAAM,IAAI;IAC7B,IAAI,YAAY,OAAO;IAEvB,MAAM,OAAO;WAAI,CAAA,GAAA,yCAA6B;WAAO,eAAe,EAAE;KAAE;IAExE,MAAM,aAAa,KAAK,KAAK,CAAC,QAAE,IAAI,EAAE;QACpC,IAAI,yCAAmB,OAAO,OAAO,SAAS;QAC9C,OAAO,KAAK,KAAK;IACnB,IAAI;IACJ,IAAI,YAAY,4BAAM,IAAI,aAAa;IAEvC,OAAO;AACT;;;ADzBO,MAAM,4CACX,CAAC,cACD,CAAC;QACC,MAAM,WAAW,CAAA,GAAA,8BAAW,EAAE;QAC9B,MAAM,YAAE,QAAQ,EAAE,GAAG,IAAI;QAEzB,mBAAmB;QACnB,MAAM,UAAU,CAAA,GAAA,yCAA0B,EAAE;yBAAE;YAAa,KAAK;QAAS;QACzE,IAAI,CAAC,SAAS,OAAO;QAErB,SAAS,QAAQ,OAAO,iBAAiB;QAEzC,OAAO;IACT;AAEK,MAAM,2CACX,CAAC,cACD,CAAC,OACD,CAAC;YACC,MAAM,WAAW,0CAA8B,aAAa;YAE5D,OAAO,KAAK,KAAK;QACnB;;;;;;;","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":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AGAA,MAAM,4CAAsB;AAErB,MAAM;IAIX,YAAY,KAAc,CAAE;QAC1B,IAAI,CAAC,cAAc,SAAS;QAC5B,IAAI,CAAC,WAAW,IAAI;IACtB;IAEA,IAAI,GAAW,EAAE,KAAa,EAAE;QAC9B,cAAc;QACd,IAAI,IAAI,CAAC,SAAS,IAAI,MAAM,IAAI,CAAC,SAAS,OAAO;aAE5C,IAAI,IAAI,CAAC,SAAS,QAAQ,IAAI,CAAC,aAAa,IAAI,CAAC,SAAS,OAAO,IAAI,CAAC;QAE3E,IAAI,CAAC,SAAS,IAAI,KAAK;IACzB;IAEA,IAAI,GAAW,EAAE;QACf,MAAM,OAAO,IAAI,CAAC,SAAS,IAAI;QAC/B,IAAI,MAAM;YACR,cAAc;YACd,IAAI,CAAC,SAAS,OAAO;YACrB,IAAI,CAAC,SAAS,IAAI,KAAK;QACzB;QAEA,OAAO;IACT;IAEA,OAAO,GAAW,EAAE;QAClB,IAAI,IAAI,CAAC,SAAS,IAAI,MACpB,IAAI,CAAC,SAAS,OAAO;IAEzB;IAEA,WAAW;QACT,OAAO,IAAI,CAAC,SAAS,OAAO,OAAO;IACrC;AACF;;;;;;;;ACtCO,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,yCAAW;AAE7B,MAAM,2CAAqB,CAAC;IAC1B,OAAO,UAAU,QAAQ,OAAO,UAAU;AAC5C;AAEO,MAAM,4CAA8B,CAAC;IAI1C,MAAM,eAAE,WAAW,OAAE,GAAG,EAAE,GAAG;IAC7B,MAAM,cAAc,KAAK,MAAM,IAAI,CAAC,EAAE;IAEtC,IAAI,CAAC,aAAa;IAElB,MAAM,aAAa,4BAAM,IAAI;IAC7B,IAAI,YAAY,OAAO;IAEvB,MAAM,OAAO;WAAI,CAAA,GAAA,yCAA6B;WAAO,eAAe,EAAE;KAAE;IAExE,MAAM,aAAa,KAAK,KAAK,CAAC,QAAE,IAAI,EAAE;QACpC,IAAI,yCAAmB,OAAO,OAAO,SAAS;QAC9C,OAAO,KAAK,KAAK;IACnB,IAAI;IACJ,IAAI,YAAY,4BAAM,IAAI,aAAa;IAEvC,OAAO;AACT;;;ADzBO,MAAM,4CACX,CAAC,cACD,CAAC;QACC,MAAM,WAAW,CAAA,GAAA,gCAAW,EAAE;QAC9B,MAAM,YAAE,QAAQ,EAAE,GAAG,IAAI;QAEzB,mBAAmB;QACnB,MAAM,UAAU,CAAA,GAAA,yCAA0B,EAAE;yBAAE;YAAa,KAAK;QAAS;QACzE,IAAI,CAAC,SAAS,OAAO;QAErB,SAAS,QAAQ,OAAO,iBAAiB;QAEzC,OAAO;IACT;AAEK,MAAM,2CACX,CAAC,cACD,CAAC,OACD,CAAC;YACC,MAAM,WAAW,0CAA8B,aAAa;YAE5D,OAAO,KAAK,KAAK;QACnB;;;;;;;","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.js'\nimport type { NextRequest } from 'next/server.js'\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.d.ts CHANGED
@@ -1,4 +1,4 @@
1
- import { NextResponse, NextRequest } from "next/server";
1
+ import { NextResponse, NextRequest } from "next/server.js";
2
2
  export class CacheStorage {
3
3
  constructor(limit?: number);
4
4
  set(key: string, value: string): void;
package/dist/index.mjs CHANGED
@@ -1,4 +1,4 @@
1
- import {NextResponse as $eTMD6$NextResponse} from "next/server";
1
+ import {NextResponse as $eTMD6$NextResponse} from "next/server.js";
2
2
 
3
3
  function $parcel$export(e, n, v, s) {
4
4
  Object.defineProperty(e, n, {get: v, set: s, enumerable: true, configurable: true});
@@ -1 +1 @@
1
- {"mappings":";;;;;;;;;;;;;;;;AGAA,MAAM,4CAAsB;AAErB,MAAM;IAIX,YAAY,KAAc,CAAE;QAC1B,IAAI,CAAC,cAAc,SAAS;QAC5B,IAAI,CAAC,WAAW,IAAI;IACtB;IAEA,IAAI,GAAW,EAAE,KAAa,EAAE;QAC9B,cAAc;QACd,IAAI,IAAI,CAAC,SAAS,IAAI,MAAM,IAAI,CAAC,SAAS,OAAO;aAE5C,IAAI,IAAI,CAAC,SAAS,QAAQ,IAAI,CAAC,aAAa,IAAI,CAAC,SAAS,OAAO,IAAI,CAAC;QAE3E,IAAI,CAAC,SAAS,IAAI,KAAK;IACzB;IAEA,IAAI,GAAW,EAAE;QACf,MAAM,OAAO,IAAI,CAAC,SAAS,IAAI;QAC/B,IAAI,MAAM;YACR,cAAc;YACd,IAAI,CAAC,SAAS,OAAO;YACrB,IAAI,CAAC,SAAS,IAAI,KAAK;QACzB;QAEA,OAAO;IACT;IAEA,OAAO,GAAW,EAAE;QAClB,IAAI,IAAI,CAAC,SAAS,IAAI,MACpB,IAAI,CAAC,SAAS,OAAO;IAEzB;IAEA,WAAW;QACT,OAAO,IAAI,CAAC,SAAS,OAAO,OAAO;IACrC;AACF;;;;;;;;ACtCO,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,yCAAW;AAE7B,MAAM,2CAAqB,CAAC;IAC1B,OAAO,UAAU,QAAQ,OAAO,UAAU;AAC5C;AAEO,MAAM,4CAA8B,CAAC;IAI1C,MAAM,eAAE,WAAW,OAAE,GAAG,EAAE,GAAG;IAC7B,MAAM,cAAc,KAAK,MAAM,IAAI,CAAC,EAAE;IAEtC,IAAI,CAAC,aAAa;IAElB,MAAM,aAAa,4BAAM,IAAI;IAC7B,IAAI,YAAY,OAAO;IAEvB,MAAM,OAAO;WAAI,CAAA,GAAA,yCAA6B;WAAO,eAAe,EAAE;KAAE;IAExE,MAAM,aAAa,KAAK,KAAK,CAAC,QAAE,IAAI,EAAE;QACpC,IAAI,yCAAmB,OAAO,OAAO,SAAS;QAC9C,OAAO,KAAK,KAAK;IACnB,IAAI;IACJ,IAAI,YAAY,4BAAM,IAAI,aAAa;IAEvC,OAAO;AACT;;;ADzBO,MAAM,4CACX,CAAC,cACD,CAAC;QACC,MAAM,WAAW,CAAA,GAAA,mBAAW,EAAE;QAC9B,MAAM,YAAE,QAAQ,EAAE,GAAG,IAAI;QAEzB,mBAAmB;QACnB,MAAM,UAAU,CAAA,GAAA,yCAA0B,EAAE;yBAAE;YAAa,KAAK;QAAS;QACzE,IAAI,CAAC,SAAS,OAAO;QAErB,SAAS,QAAQ,OAAO,iBAAiB;QAEzC,OAAO;IACT;AAEK,MAAM,2CACX,CAAC,cACD,CAAC,OACD,CAAC;YACC,MAAM,WAAW,0CAA8B,aAAa;YAE5D,OAAO,KAAK,KAAK;QACnB;;;;;;;","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":";;;;;;;;;;;;;;;;AGAA,MAAM,4CAAsB;AAErB,MAAM;IAIX,YAAY,KAAc,CAAE;QAC1B,IAAI,CAAC,cAAc,SAAS;QAC5B,IAAI,CAAC,WAAW,IAAI;IACtB;IAEA,IAAI,GAAW,EAAE,KAAa,EAAE;QAC9B,cAAc;QACd,IAAI,IAAI,CAAC,SAAS,IAAI,MAAM,IAAI,CAAC,SAAS,OAAO;aAE5C,IAAI,IAAI,CAAC,SAAS,QAAQ,IAAI,CAAC,aAAa,IAAI,CAAC,SAAS,OAAO,IAAI,CAAC;QAE3E,IAAI,CAAC,SAAS,IAAI,KAAK;IACzB;IAEA,IAAI,GAAW,EAAE;QACf,MAAM,OAAO,IAAI,CAAC,SAAS,IAAI;QAC/B,IAAI,MAAM;YACR,cAAc;YACd,IAAI,CAAC,SAAS,OAAO;YACrB,IAAI,CAAC,SAAS,IAAI,KAAK;QACzB;QAEA,OAAO;IACT;IAEA,OAAO,GAAW,EAAE;QAClB,IAAI,IAAI,CAAC,SAAS,IAAI,MACpB,IAAI,CAAC,SAAS,OAAO;IAEzB;IAEA,WAAW;QACT,OAAO,IAAI,CAAC,SAAS,OAAO,OAAO;IACrC;AACF;;;;;;;;ACtCO,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,yCAAW;AAE7B,MAAM,2CAAqB,CAAC;IAC1B,OAAO,UAAU,QAAQ,OAAO,UAAU;AAC5C;AAEO,MAAM,4CAA8B,CAAC;IAI1C,MAAM,eAAE,WAAW,OAAE,GAAG,EAAE,GAAG;IAC7B,MAAM,cAAc,KAAK,MAAM,IAAI,CAAC,EAAE;IAEtC,IAAI,CAAC,aAAa;IAElB,MAAM,aAAa,4BAAM,IAAI;IAC7B,IAAI,YAAY,OAAO;IAEvB,MAAM,OAAO;WAAI,CAAA,GAAA,yCAA6B;WAAO,eAAe,EAAE;KAAE;IAExE,MAAM,aAAa,KAAK,KAAK,CAAC,QAAE,IAAI,EAAE;QACpC,IAAI,yCAAmB,OAAO,OAAO,SAAS;QAC9C,OAAO,KAAK,KAAK;IACnB,IAAI;IACJ,IAAI,YAAY,4BAAM,IAAI,aAAa;IAEvC,OAAO;AACT;;;ADzBO,MAAM,4CACX,CAAC,cACD,CAAC;QACC,MAAM,WAAW,CAAA,GAAA,mBAAW,EAAE;QAC9B,MAAM,YAAE,QAAQ,EAAE,GAAG,IAAI;QAEzB,mBAAmB;QACnB,MAAM,UAAU,CAAA,GAAA,yCAA0B,EAAE;yBAAE;YAAa,KAAK;QAAS;QACzE,IAAI,CAAC,SAAS,OAAO;QAErB,SAAS,QAAQ,OAAO,iBAAiB;QAEzC,OAAO;IACT;AAEK,MAAM,2CACX,CAAC,cACD,CAAC,OACD,CAAC;YACC,MAAM,WAAW,0CAA8B,aAAa;YAE5D,OAAO,KAAK,KAAK;QACnB;;;;;;;","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.js'\nimport type { NextRequest } from 'next/server.js'\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.35.0",
6
+ "version": "0.37.0",
7
7
  "files": [
8
8
  "dist"
9
9
  ],
@@ -15,6 +15,12 @@
15
15
  "main": "dist/index.cjs",
16
16
  "module": "dist/index.mjs",
17
17
  "types": "dist/index.d.ts",
18
+ "exports": {
19
+ ".": {
20
+ "import": "./dist/index.mjs",
21
+ "require": "./dist/index.cjs"
22
+ }
23
+ },
18
24
  "scripts": {
19
25
  "build": "parcel build",
20
26
  "lint": "eslint . && prettier --check src",
@@ -26,7 +32,7 @@
26
32
  "next": "^12.2.0"
27
33
  },
28
34
  "devDependencies": {
29
- "@lidofinance/config-prettier": "~0.35.0",
35
+ "@lidofinance/config-prettier": "~0.37.0",
30
36
  "@types/jest": "^29.2.4",
31
37
  "@types/node": "^18.11.17",
32
38
  "jest": "^29.3.1",