.
This commit is contained in:
Generated
Vendored
+18
@@ -0,0 +1,18 @@
|
||||
import type { RouteMatcherProvider } from '../route-matcher-provider';
|
||||
import type { RouteMatcher } from '../../route-matchers/route-matcher';
|
||||
interface LoaderComparable<D> {
|
||||
load(): Promise<D>;
|
||||
compare(left: D, right: D): boolean;
|
||||
}
|
||||
/**
|
||||
* This will memoize the matchers if the loaded data is comparable.
|
||||
*/
|
||||
export declare abstract class CachedRouteMatcherProvider<M extends RouteMatcher = RouteMatcher, D = any> implements RouteMatcherProvider<M> {
|
||||
private readonly loader;
|
||||
private data?;
|
||||
private cached;
|
||||
constructor(loader: LoaderComparable<D>);
|
||||
protected abstract transform(data: D): Promise<ReadonlyArray<M>>;
|
||||
matchers(): Promise<readonly M[]>;
|
||||
}
|
||||
export {};
|
||||
Generated
Vendored
+30
@@ -0,0 +1,30 @@
|
||||
"use strict";
|
||||
Object.defineProperty(exports, "__esModule", {
|
||||
value: true
|
||||
});
|
||||
Object.defineProperty(exports, "CachedRouteMatcherProvider", {
|
||||
enumerable: true,
|
||||
get: function() {
|
||||
return CachedRouteMatcherProvider;
|
||||
}
|
||||
});
|
||||
class CachedRouteMatcherProvider {
|
||||
constructor(loader){
|
||||
this.loader = loader;
|
||||
this.cached = [];
|
||||
}
|
||||
async matchers() {
|
||||
const data = await this.loader.load();
|
||||
if (!data) return [];
|
||||
// Return the cached matchers if the data has not changed.
|
||||
if (this.data && this.loader.compare(this.data, data)) return this.cached;
|
||||
this.data = data;
|
||||
// Transform the manifest into matchers.
|
||||
const matchers = await this.transform(data);
|
||||
// Cache the matchers.
|
||||
this.cached = matchers;
|
||||
return matchers;
|
||||
}
|
||||
}
|
||||
|
||||
//# sourceMappingURL=cached-route-matcher-provider.js.map
|
||||
Generated
Vendored
+1
@@ -0,0 +1 @@
|
||||
{"version":3,"sources":["../../../../src/server/route-matcher-providers/helpers/cached-route-matcher-provider.ts"],"sourcesContent":["import type { RouteMatcherProvider } from '../route-matcher-provider'\nimport type { RouteMatcher } from '../../route-matchers/route-matcher'\n\ninterface LoaderComparable<D> {\n load(): Promise<D>\n compare(left: D, right: D): boolean\n}\n\n/**\n * This will memoize the matchers if the loaded data is comparable.\n */\nexport abstract class CachedRouteMatcherProvider<\n M extends RouteMatcher = RouteMatcher,\n D = any,\n> implements RouteMatcherProvider<M>\n{\n private data?: D\n private cached: ReadonlyArray<M> = []\n\n constructor(private readonly loader: LoaderComparable<D>) {}\n\n protected abstract transform(data: D): Promise<ReadonlyArray<M>>\n\n public async matchers(): Promise<readonly M[]> {\n const data = await this.loader.load()\n if (!data) return []\n\n // Return the cached matchers if the data has not changed.\n if (this.data && this.loader.compare(this.data, data)) return this.cached\n this.data = data\n\n // Transform the manifest into matchers.\n const matchers = await this.transform(data)\n\n // Cache the matchers.\n this.cached = matchers\n\n return matchers\n }\n}\n"],"names":["CachedRouteMatcherProvider","constructor","loader","cached","matchers","data","load","compare","transform"],"mappings":";;;;+BAWsBA;;;eAAAA;;;AAAf,MAAeA;IAQpBC,YAAY,AAAiBC,MAA2B,CAAE;aAA7BA,SAAAA;aAFrBC,SAA2B,EAAE;IAEsB;IAI3D,MAAaC,WAAkC;QAC7C,MAAMC,OAAO,MAAM,IAAI,CAACH,MAAM,CAACI,IAAI;QACnC,IAAI,CAACD,MAAM,OAAO,EAAE;QAEpB,0DAA0D;QAC1D,IAAI,IAAI,CAACA,IAAI,IAAI,IAAI,CAACH,MAAM,CAACK,OAAO,CAAC,IAAI,CAACF,IAAI,EAAEA,OAAO,OAAO,IAAI,CAACF,MAAM;QACzE,IAAI,CAACE,IAAI,GAAGA;QAEZ,wCAAwC;QACxC,MAAMD,WAAW,MAAM,IAAI,CAACI,SAAS,CAACH;QAEtC,sBAAsB;QACtB,IAAI,CAACF,MAAM,GAAGC;QAEd,OAAOA;IACT;AACF","ignoreList":[0]}
|
||||
Generated
Vendored
+4
@@ -0,0 +1,4 @@
|
||||
export type Manifest = Record<string, string>;
|
||||
export interface ManifestLoader {
|
||||
load(name: string): Manifest | null;
|
||||
}
|
||||
Generated
Vendored
+6
@@ -0,0 +1,6 @@
|
||||
"use strict";
|
||||
Object.defineProperty(exports, "__esModule", {
|
||||
value: true
|
||||
});
|
||||
|
||||
//# sourceMappingURL=manifest-loader.js.map
|
||||
Generated
Vendored
+1
@@ -0,0 +1 @@
|
||||
{"version":3,"sources":[],"names":[],"mappings":"","ignoreList":[]}
|
||||
Generated
Vendored
+7
@@ -0,0 +1,7 @@
|
||||
import type { Manifest, ManifestLoader } from './manifest-loader';
|
||||
export declare class NodeManifestLoader implements ManifestLoader {
|
||||
private readonly distDir;
|
||||
constructor(distDir: string);
|
||||
static require(id: string): any;
|
||||
load(name: string): Manifest | null;
|
||||
}
|
||||
Generated
Vendored
+34
@@ -0,0 +1,34 @@
|
||||
"use strict";
|
||||
Object.defineProperty(exports, "__esModule", {
|
||||
value: true
|
||||
});
|
||||
Object.defineProperty(exports, "NodeManifestLoader", {
|
||||
enumerable: true,
|
||||
get: function() {
|
||||
return NodeManifestLoader;
|
||||
}
|
||||
});
|
||||
const _constants = require("../../../../shared/lib/constants");
|
||||
const _path = /*#__PURE__*/ _interop_require_default(require("../../../../shared/lib/isomorphic/path"));
|
||||
function _interop_require_default(obj) {
|
||||
return obj && obj.__esModule ? obj : {
|
||||
default: obj
|
||||
};
|
||||
}
|
||||
class NodeManifestLoader {
|
||||
constructor(distDir){
|
||||
this.distDir = distDir;
|
||||
}
|
||||
static require(id) {
|
||||
try {
|
||||
return require(id);
|
||||
} catch {
|
||||
return null;
|
||||
}
|
||||
}
|
||||
load(name) {
|
||||
return NodeManifestLoader.require(_path.default.join(this.distDir, _constants.SERVER_DIRECTORY, name));
|
||||
}
|
||||
}
|
||||
|
||||
//# sourceMappingURL=node-manifest-loader.js.map
|
||||
Generated
Vendored
+1
@@ -0,0 +1 @@
|
||||
{"version":3,"sources":["../../../../../src/server/route-matcher-providers/helpers/manifest-loaders/node-manifest-loader.ts"],"sourcesContent":["import { SERVER_DIRECTORY } from '../../../../shared/lib/constants'\nimport path from '../../../../shared/lib/isomorphic/path'\nimport type { Manifest, ManifestLoader } from './manifest-loader'\n\nexport class NodeManifestLoader implements ManifestLoader {\n constructor(private readonly distDir: string) {}\n\n static require(id: string) {\n try {\n return require(id)\n } catch {\n return null\n }\n }\n\n public load(name: string): Manifest | null {\n return NodeManifestLoader.require(\n path.join(this.distDir, SERVER_DIRECTORY, name)\n )\n }\n}\n"],"names":["NodeManifestLoader","constructor","distDir","require","id","load","name","path","join","SERVER_DIRECTORY"],"mappings":";;;;+BAIaA;;;eAAAA;;;2BAJoB;6DAChB;;;;;;AAGV,MAAMA;IACXC,YAAY,AAAiBC,OAAe,CAAE;aAAjBA,UAAAA;IAAkB;IAE/C,OAAOC,QAAQC,EAAU,EAAE;QACzB,IAAI;YACF,OAAOD,QAAQC;QACjB,EAAE,OAAM;YACN,OAAO;QACT;IACF;IAEOC,KAAKC,IAAY,EAAmB;QACzC,OAAON,mBAAmBG,OAAO,CAC/BI,aAAI,CAACC,IAAI,CAAC,IAAI,CAACN,OAAO,EAAEO,2BAAgB,EAAEH;IAE9C;AACF","ignoreList":[0]}
|
||||
Generated
Vendored
+6
@@ -0,0 +1,6 @@
|
||||
import type { Manifest, ManifestLoader } from './manifest-loader';
|
||||
export declare class ServerManifestLoader implements ManifestLoader {
|
||||
private readonly getter;
|
||||
constructor(getter: (name: string) => Manifest | null);
|
||||
load(name: string): Manifest | null;
|
||||
}
|
||||
Generated
Vendored
+20
@@ -0,0 +1,20 @@
|
||||
"use strict";
|
||||
Object.defineProperty(exports, "__esModule", {
|
||||
value: true
|
||||
});
|
||||
Object.defineProperty(exports, "ServerManifestLoader", {
|
||||
enumerable: true,
|
||||
get: function() {
|
||||
return ServerManifestLoader;
|
||||
}
|
||||
});
|
||||
class ServerManifestLoader {
|
||||
constructor(getter){
|
||||
this.getter = getter;
|
||||
}
|
||||
load(name) {
|
||||
return this.getter(name);
|
||||
}
|
||||
}
|
||||
|
||||
//# sourceMappingURL=server-manifest-loader.js.map
|
||||
Generated
Vendored
+1
@@ -0,0 +1 @@
|
||||
{"version":3,"sources":["../../../../../src/server/route-matcher-providers/helpers/manifest-loaders/server-manifest-loader.ts"],"sourcesContent":["import type { Manifest, ManifestLoader } from './manifest-loader'\n\nexport class ServerManifestLoader implements ManifestLoader {\n constructor(private readonly getter: (name: string) => Manifest | null) {}\n\n public load(name: string): Manifest | null {\n return this.getter(name)\n }\n}\n"],"names":["ServerManifestLoader","constructor","getter","load","name"],"mappings":";;;;+BAEaA;;;eAAAA;;;AAAN,MAAMA;IACXC,YAAY,AAAiBC,MAAyC,CAAE;aAA3CA,SAAAA;IAA4C;IAElEC,KAAKC,IAAY,EAAmB;QACzC,OAAO,IAAI,CAACF,MAAM,CAACE;IACrB;AACF","ignoreList":[0]}
|
||||
Reference in New Issue
Block a user