feat: Reinitialize frontend with SvelteKit and TypeScript

- Delete old Vite+Svelte frontend
- Initialize new SvelteKit project with TypeScript
- Configure Tailwind CSS v4 + DaisyUI
- Implement JWT authentication with auto-refresh
- Create login page with form validation (Zod)
- Add protected route guards
- Update Docker configuration for single-stage build
- Add E2E tests with Playwright (6/11 passing)
- Fix Svelte 5 reactivity with $state() runes

Known issues:
- 5 E2E tests failing (timing/async issues)
- Token refresh implementation needs debugging
- Validation error display timing
This commit is contained in:
2026-02-17 16:19:59 -05:00
parent 54df6018f5
commit de2d83092e
28274 changed files with 3816354 additions and 90 deletions

View File

@@ -0,0 +1,35 @@
"use strict";
Object.defineProperty(exports, "__esModule", { value: true });
/**
* MimeType.
*/
class MimeType {
description;
enabledPlugin;
suffixes;
type;
/**
* Constructor.
*
* @param description
* @param enabledPlugin
* @param suffixes
* @param type
*/
constructor(description, enabledPlugin, suffixes, type) {
this.description = description;
this.enabledPlugin = enabledPlugin;
this.suffixes = suffixes;
this.type = type;
}
/**
* Returns the object as a string.
*
* @returns String.
*/
toString() {
return '[object MimeType]';
}
}
exports.default = MimeType;
//# sourceMappingURL=MimeType.cjs.map

View File

@@ -0,0 +1 @@
{"version":3,"file":"MimeType.cjs","sourceRoot":"","sources":["../../src/navigator/MimeType.ts"],"names":[],"mappings":";;AAEA;;GAEG;AACH,MAAqB,QAAQ;IACZ,WAAW,CAAS;IACpB,aAAa,CAAS;IACtB,QAAQ,CAAS;IACjB,IAAI,CAAS;IAE7B;;;;;;;OAOG;IACH,YAAY,WAAmB,EAAE,aAAqB,EAAE,QAAgB,EAAE,IAAY;QACrF,IAAI,CAAC,WAAW,GAAG,WAAW,CAAC;QAC/B,IAAI,CAAC,aAAa,GAAG,aAAa,CAAC;QACnC,IAAI,CAAC,QAAQ,GAAG,QAAQ,CAAC;QACzB,IAAI,CAAC,IAAI,GAAG,IAAI,CAAC;IAClB,CAAC;IAED;;;;OAIG;IACI,QAAQ;QACd,OAAO,mBAAmB,CAAC;IAC5B,CAAC;CACD;AA7BD,2BA6BC"}

View File

@@ -0,0 +1,26 @@
import Plugin from './Plugin.cjs';
/**
* MimeType.
*/
export default class MimeType {
readonly description: string;
readonly enabledPlugin: Plugin;
readonly suffixes: string;
readonly type: string;
/**
* Constructor.
*
* @param description
* @param enabledPlugin
* @param suffixes
* @param type
*/
constructor(description: string, enabledPlugin: Plugin, suffixes: string, type: string);
/**
* Returns the object as a string.
*
* @returns String.
*/
toString(): string;
}
//# sourceMappingURL=MimeType.d.ts.map

View File

@@ -0,0 +1 @@
{"version":3,"file":"MimeType.d.ts","sourceRoot":"","sources":["../../src/navigator/MimeType.ts"],"names":[],"mappings":"AAAA,OAAO,MAAM,MAAM,aAAa,CAAC;AAEjC;;GAEG;AACH,MAAM,CAAC,OAAO,OAAO,QAAQ;IAC5B,SAAgB,WAAW,EAAE,MAAM,CAAC;IACpC,SAAgB,aAAa,EAAE,MAAM,CAAC;IACtC,SAAgB,QAAQ,EAAE,MAAM,CAAC;IACjC,SAAgB,IAAI,EAAE,MAAM,CAAC;IAE7B;;;;;;;OAOG;gBACS,WAAW,EAAE,MAAM,EAAE,aAAa,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM;IAOtF;;;;OAIG;IACI,QAAQ,IAAI,MAAM;CAGzB"}

View File

@@ -0,0 +1,45 @@
"use strict";
Object.defineProperty(exports, "__esModule", { value: true });
/**
* MimeTypeArray.
*
* Reference:
* https://developer.mozilla.org/en-US/docs/Web/API/MimeTypeArray.
*/
class MimeTypeArray {
length;
/**
* Constructor.
*
* @param mimeTypes
*/
constructor(mimeTypes) {
for (let i = 0, max = mimeTypes.length; i < max; i++) {
this[i] = mimeTypes[i];
this[mimeTypes[i].type] = mimeTypes[i];
}
this.length = mimeTypes.length;
}
/**
* @param index
*/
item(index) {
return this[index] || null;
}
/**
* @param name
*/
namedItem(name) {
return this[name] || null;
}
/**
* Returns the object as a string.
*
* @returns String.
*/
toString() {
return '[object MimeTypeArray]';
}
}
exports.default = MimeTypeArray;
//# sourceMappingURL=MimeTypeArray.cjs.map

View File

@@ -0,0 +1 @@
{"version":3,"file":"MimeTypeArray.cjs","sourceRoot":"","sources":["../../src/navigator/MimeTypeArray.ts"],"names":[],"mappings":";;AAEA;;;;;GAKG;AACH,MAAqB,aAAa;IAEjB,MAAM,CAAS;IAE/B;;;;OAIG;IACH,YAAY,SAAqB;QAChC,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,GAAG,GAAG,SAAS,CAAC,MAAM,EAAE,CAAC,GAAG,GAAG,EAAE,CAAC,EAAE,EAAE,CAAC;YACtD,IAAI,CAAC,CAAC,CAAC,GAAG,SAAS,CAAC,CAAC,CAAC,CAAC;YACvB,IAAI,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,GAAG,SAAS,CAAC,CAAC,CAAC,CAAC;QACxC,CAAC;QACD,IAAI,CAAC,MAAM,GAAG,SAAS,CAAC,MAAM,CAAC;IAChC,CAAC;IAED;;OAEG;IACI,IAAI,CAAC,KAAa;QACxB,OAAO,IAAI,CAAC,KAAK,CAAC,IAAI,IAAI,CAAC;IAC5B,CAAC;IAED;;OAEG;IACI,SAAS,CAAC,IAAY;QAC5B,OAAO,IAAI,CAAC,IAAI,CAAC,IAAI,IAAI,CAAC;IAC3B,CAAC;IAED;;;;OAIG;IACI,QAAQ;QACd,OAAO,wBAAwB,CAAC;IACjC,CAAC;CACD;AAvCD,gCAuCC"}

View File

@@ -0,0 +1,32 @@
import MimeType from './MimeType.cjs';
/**
* MimeTypeArray.
*
* Reference:
* https://developer.mozilla.org/en-US/docs/Web/API/MimeTypeArray.
*/
export default class MimeTypeArray {
[n: number]: MimeType;
readonly length: number;
/**
* Constructor.
*
* @param mimeTypes
*/
constructor(mimeTypes: MimeType[]);
/**
* @param index
*/
item(index: number): MimeType;
/**
* @param name
*/
namedItem(name: string): MimeType;
/**
* Returns the object as a string.
*
* @returns String.
*/
toString(): string;
}
//# sourceMappingURL=MimeTypeArray.d.ts.map

View File

@@ -0,0 +1 @@
{"version":3,"file":"MimeTypeArray.d.ts","sourceRoot":"","sources":["../../src/navigator/MimeTypeArray.ts"],"names":[],"mappings":"AAAA,OAAO,QAAQ,MAAM,eAAe,CAAC;AAErC;;;;;GAKG;AACH,MAAM,CAAC,OAAO,OAAO,aAAa;IACjC,CAAC,CAAC,EAAE,MAAM,GAAG,QAAQ,CAAC;IACtB,SAAgB,MAAM,EAAE,MAAM,CAAC;IAE/B;;;;OAIG;gBACS,SAAS,EAAE,QAAQ,EAAE;IAQjC;;OAEG;IACI,IAAI,CAAC,KAAK,EAAE,MAAM,GAAG,QAAQ;IAIpC;;OAEG;IACI,SAAS,CAAC,IAAI,EAAE,MAAM,GAAG,QAAQ;IAIxC;;;;OAIG;IACI,QAAQ,IAAI,MAAM;CAGzB"}

View File

@@ -0,0 +1,219 @@
"use strict";
var __importDefault = (this && this.__importDefault) || function (mod) {
return (mod && mod.__esModule) ? mod : { "default": mod };
};
Object.defineProperty(exports, "__esModule", { value: true });
const MimeTypeArray_js_1 = __importDefault(require("./MimeTypeArray.cjs"));
const PluginArray_js_1 = __importDefault(require("./PluginArray.cjs"));
const Permissions_js_1 = __importDefault(require("../permissions/Permissions.cjs"));
const Clipboard_js_1 = __importDefault(require("../clipboard/Clipboard.cjs"));
const WindowBrowserContext_js_1 = __importDefault(require("../window/WindowBrowserContext.cjs"));
/**
* Browser Navigator API.
*
* Mocked information is taken from FireFox.
*
* Reference:
* https://html.spec.whatwg.org/multipage/system-state.html#dom-navigator.
*/
class Navigator {
#window;
#clipboard;
#permissions;
/**
* Constructor.
*
* @param window Owner window.
*/
constructor(window) {
if (!window) {
throw new TypeError('Invalid constructor');
}
this.#window = window;
this.#clipboard = new Clipboard_js_1.default(window);
this.#permissions = new Permissions_js_1.default(window);
}
/**
* False if setting a cookie will be ignored and true otherwise.
*/
get cookieEnabled() {
return true;
}
/**
* TODO: Not implemented.
*/
get credentials() {
return null;
}
/**
* TODO: Not implemented.
*/
get geolocation() {
return null;
}
/**
* String representing the preferred language of the user, usually the language of the browser UI.
*/
get language() {
return 'en-US';
}
/**
* Array of string representing the user's preferred languages.
*/
get languages() {
return ['en-US', 'en'];
}
/**
* TODO: Not implemented.
*/
get locks() {
return null;
}
/**
* Maximum number of simultaneous touch contact points are supported by the current device.
*/
get maxTouchPoints() {
return new WindowBrowserContext_js_1.default(this.#window).getSettings()?.navigator.maxTouchPoints || 0;
}
/**
* Number of logical processors available to run threads on the user's computer.
*/
get hardwareConcurrency() {
return 8;
}
/**
* Browser app code name.
*/
get appCodeName() {
return 'Mozilla';
}
/**
* Browser app name.
*/
get appName() {
return 'Netscape';
}
/**
* Browser app version.
*/
get appVersion() {
const userAgent = this.userAgent;
const index = userAgent.indexOf('/');
return index > -1 ? userAgent.substring(index + 1) : '';
}
/**
* Browser platform.
*/
get platform() {
const userAgent = this.userAgent;
const indexStart = userAgent.indexOf('(');
const indexEnd = userAgent.indexOf(')');
return indexStart > -1 && indexEnd > -1 ? userAgent.substring(indexStart + 1, indexEnd) : '';
}
/**
* Browser product.
*/
get product() {
return 'Gecko';
}
/**
* Browser product sub.
*/
get productSub() {
return '20100101';
}
/**
* Browser vendor.
*/
get vendor() {
return '';
}
/**
* Browser vendor sub.
*/
get vendorSub() {
return '';
}
/**
* Browser user agent.
*
* "appCodeName/appVersion number (Platform; Security; OS-or-CPU; Localization; rv: revision-version-number) product/productSub Application-Name Application-Name-version".
*/
get userAgent() {
return new WindowBrowserContext_js_1.default(this.#window).getSettings()?.navigator.userAgent || '';
}
/**
* Boolean value indicating whether the browser is working online.
*/
get onLine() {
return true;
}
/**
* Returns a Permissions object that can be used to query and update permission status of APIs covered by the Permissions API.
*
* @see https://developer.mozilla.org/en-US/docs/Web/API/Navigator/permissions
* @returns Permissions.
*/
get permissions() {
return this.#permissions;
}
/**
* Returns a Clipboard object providing access to the contents of the system clipboard.
*
* @see https://developer.mozilla.org/en-US/docs/Web/API/Navigator/clipboard
* @returns Clipboard.
*/
get clipboard() {
return this.#clipboard;
}
/**
* Boolean Indicates whether the user agent is controlled by automation.
*/
get webdriver() {
return true;
}
/**
* The user's Do Not Track setting, which indicates whether the user is requesting web sites and advertisers to not track them.
*
* The value of the property reflects that of the DNT HTTP header, i.e. Values of "1", "0", or "unspecified".
*/
get doNotTrack() {
return 'unspecified';
}
/**
* Browser mime-types.
*/
get mimeTypes() {
return new MimeTypeArray_js_1.default([]);
}
/**
* Browser plugins.
*/
get plugins() {
return new PluginArray_js_1.default([]);
}
/**
* Sends an HTTP POST request containing a small amount of data to a web server.
*
* @param url URL.
* @param data Data.
* @returns "true" if the user agent successfully queued the data for transfer. Otherwise, it returns "false".
*/
sendBeacon(url, data) {
this.#window.fetch(url, {
method: 'POST',
body: data
});
return true;
}
/**
* Returns the object as a string.
*
* @returns String.
*/
toString() {
return '[object Navigator]';
}
}
exports.default = Navigator;
//# sourceMappingURL=Navigator.cjs.map

View File

@@ -0,0 +1 @@
{"version":3,"file":"Navigator.cjs","sourceRoot":"","sources":["../../src/navigator/Navigator.ts"],"names":[],"mappings":"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"}

View File

@@ -0,0 +1,145 @@
import MimeTypeArray from './MimeTypeArray.cjs';
import PluginArray from './PluginArray.cjs';
import BrowserWindow from '../window/BrowserWindow.cjs';
import Permissions from '../permissions/Permissions.cjs';
import Clipboard from '../clipboard/Clipboard.cjs';
import Blob from '../file/Blob.cjs';
import FormData from '../form-data/FormData.cjs';
/**
* Browser Navigator API.
*
* Mocked information is taken from FireFox.
*
* Reference:
* https://html.spec.whatwg.org/multipage/system-state.html#dom-navigator.
*/
export default class Navigator {
#private;
/**
* Constructor.
*
* @param window Owner window.
*/
constructor(window: BrowserWindow);
/**
* False if setting a cookie will be ignored and true otherwise.
*/
get cookieEnabled(): boolean;
/**
* TODO: Not implemented.
*/
get credentials(): string;
/**
* TODO: Not implemented.
*/
get geolocation(): string;
/**
* String representing the preferred language of the user, usually the language of the browser UI.
*/
get language(): string;
/**
* Array of string representing the user's preferred languages.
*/
get languages(): string[];
/**
* TODO: Not implemented.
*/
get locks(): string;
/**
* Maximum number of simultaneous touch contact points are supported by the current device.
*/
get maxTouchPoints(): number;
/**
* Number of logical processors available to run threads on the user's computer.
*/
get hardwareConcurrency(): number;
/**
* Browser app code name.
*/
get appCodeName(): string;
/**
* Browser app name.
*/
get appName(): string;
/**
* Browser app version.
*/
get appVersion(): string;
/**
* Browser platform.
*/
get platform(): string;
/**
* Browser product.
*/
get product(): string;
/**
* Browser product sub.
*/
get productSub(): string;
/**
* Browser vendor.
*/
get vendor(): string;
/**
* Browser vendor sub.
*/
get vendorSub(): string;
/**
* Browser user agent.
*
* "appCodeName/appVersion number (Platform; Security; OS-or-CPU; Localization; rv: revision-version-number) product/productSub Application-Name Application-Name-version".
*/
get userAgent(): string;
/**
* Boolean value indicating whether the browser is working online.
*/
get onLine(): boolean;
/**
* Returns a Permissions object that can be used to query and update permission status of APIs covered by the Permissions API.
*
* @see https://developer.mozilla.org/en-US/docs/Web/API/Navigator/permissions
* @returns Permissions.
*/
get permissions(): Permissions;
/**
* Returns a Clipboard object providing access to the contents of the system clipboard.
*
* @see https://developer.mozilla.org/en-US/docs/Web/API/Navigator/clipboard
* @returns Clipboard.
*/
get clipboard(): Clipboard;
/**
* Boolean Indicates whether the user agent is controlled by automation.
*/
get webdriver(): boolean;
/**
* The user's Do Not Track setting, which indicates whether the user is requesting web sites and advertisers to not track them.
*
* The value of the property reflects that of the DNT HTTP header, i.e. Values of "1", "0", or "unspecified".
*/
get doNotTrack(): string;
/**
* Browser mime-types.
*/
get mimeTypes(): MimeTypeArray;
/**
* Browser plugins.
*/
get plugins(): PluginArray;
/**
* Sends an HTTP POST request containing a small amount of data to a web server.
*
* @param url URL.
* @param data Data.
* @returns "true" if the user agent successfully queued the data for transfer. Otherwise, it returns "false".
*/
sendBeacon(url: string, data: string | Blob | ArrayBuffer | ArrayBufferView | FormData): boolean;
/**
* Returns the object as a string.
*
* @returns String.
*/
toString(): string;
}
//# sourceMappingURL=Navigator.d.ts.map

View File

@@ -0,0 +1 @@
{"version":3,"file":"Navigator.d.ts","sourceRoot":"","sources":["../../src/navigator/Navigator.ts"],"names":[],"mappings":"AAAA,OAAO,aAAa,MAAM,oBAAoB,CAAC;AAC/C,OAAO,WAAW,MAAM,kBAAkB,CAAC;AAC3C,OAAO,aAAa,MAAM,4BAA4B,CAAC;AACvD,OAAO,WAAW,MAAM,+BAA+B,CAAC;AACxD,OAAO,SAAS,MAAM,2BAA2B,CAAC;AAElD,OAAO,IAAI,MAAM,iBAAiB,CAAC;AACnC,OAAO,QAAQ,MAAM,0BAA0B,CAAC;AAEhD;;;;;;;GAOG;AACH,MAAM,CAAC,OAAO,OAAO,SAAS;;IAK7B;;;;OAIG;gBACS,MAAM,EAAE,aAAa;IAUjC;;OAEG;IACH,IAAW,aAAa,IAAI,OAAO,CAElC;IAED;;OAEG;IACH,IAAW,WAAW,IAAI,MAAM,CAE/B;IAED;;OAEG;IACH,IAAW,WAAW,IAAI,MAAM,CAE/B;IAED;;OAEG;IACH,IAAW,QAAQ,IAAI,MAAM,CAE5B;IAED;;OAEG;IACH,IAAW,SAAS,IAAI,MAAM,EAAE,CAE/B;IAED;;OAEG;IACH,IAAW,KAAK,IAAI,MAAM,CAEzB;IAED;;OAEG;IACH,IAAW,cAAc,IAAI,MAAM,CAElC;IAED;;OAEG;IACH,IAAW,mBAAmB,IAAI,MAAM,CAEvC;IAED;;OAEG;IACH,IAAW,WAAW,IAAI,MAAM,CAE/B;IAED;;OAEG;IACH,IAAW,OAAO,IAAI,MAAM,CAE3B;IAED;;OAEG;IACH,IAAW,UAAU,IAAI,MAAM,CAI9B;IAED;;OAEG;IACH,IAAW,QAAQ,IAAI,MAAM,CAK5B;IAED;;OAEG;IACH,IAAW,OAAO,IAAI,MAAM,CAE3B;IAED;;OAEG;IACH,IAAW,UAAU,IAAI,MAAM,CAE9B;IAED;;OAEG;IACH,IAAW,MAAM,IAAI,MAAM,CAE1B;IAED;;OAEG;IACH,IAAW,SAAS,IAAI,MAAM,CAE7B;IAED;;;;OAIG;IACH,IAAW,SAAS,IAAI,MAAM,CAE7B;IAED;;OAEG;IACH,IAAW,MAAM,IAAI,OAAO,CAE3B;IAED;;;;;OAKG;IACH,IAAW,WAAW,IAAI,WAAW,CAEpC;IAED;;;;;OAKG;IACH,IAAW,SAAS,IAAI,SAAS,CAEhC;IAED;;OAEG;IACH,IAAW,SAAS,IAAI,OAAO,CAE9B;IAED;;;;OAIG;IACH,IAAW,UAAU,IAAI,MAAM,CAE9B;IAED;;OAEG;IACH,IAAW,SAAS,IAAI,aAAa,CAEpC;IAED;;OAEG;IACH,IAAW,OAAO,IAAI,WAAW,CAEhC;IAED;;;;;;OAMG;IACI,UAAU,CAChB,GAAG,EAAE,MAAM,EACX,IAAI,EAAE,MAAM,GAAG,IAAI,GAAG,WAAW,GAAG,eAAe,GAAG,QAAQ,GAC5D,OAAO;IAQV;;;;OAIG;IACI,QAAQ,IAAI,MAAM;CAGzB"}

View File

@@ -0,0 +1,57 @@
"use strict";
Object.defineProperty(exports, "__esModule", { value: true });
/**
* Plugin.
*/
class Plugin {
length = 0;
description;
filename;
name;
/**
* Constructor.
*
* @param mimeTypes Mime types.
* @param description Description.
* @param filename Filename.
* @param name Name.
*/
constructor(mimeTypes, description, filename, name) {
this.description = description;
this.filename = filename;
this.name = name;
for (let i = 0, max = mimeTypes.length; i < max; i++) {
this[i] = mimeTypes[i];
this[mimeTypes[i].type] = mimeTypes[i];
}
this.length = mimeTypes.length;
}
/**
* Item.
*
* @param index Number.
* @returns IMimeType.
*/
item(index) {
return this[index] || null;
}
/**
* NamedItem.
*
* @param name String.
* @returns IMimeType.
*/
namedItem(name) {
return this[name] || null;
}
/**
* Returns the object as a string.
*
* @returns String.
*/
toString() {
return '[object Plugin]';
}
}
exports.default = Plugin;
//# sourceMappingURL=Plugin.cjs.map

View File

@@ -0,0 +1 @@
{"version":3,"file":"Plugin.cjs","sourceRoot":"","sources":["../../src/navigator/Plugin.ts"],"names":[],"mappings":";;AAEA;;GAEG;AACH,MAAqB,MAAM;IAEV,MAAM,GAAW,CAAC,CAAC;IACnB,WAAW,CAAS;IACpB,QAAQ,CAAS;IACjB,IAAI,CAAS;IAE7B;;;;;;;OAOG;IACH,YAAY,SAAqB,EAAE,WAAmB,EAAE,QAAgB,EAAE,IAAY;QACrF,IAAI,CAAC,WAAW,GAAG,WAAW,CAAC;QAC/B,IAAI,CAAC,QAAQ,GAAG,QAAQ,CAAC;QACzB,IAAI,CAAC,IAAI,GAAG,IAAI,CAAC;QAEjB,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,GAAG,GAAG,SAAS,CAAC,MAAM,EAAE,CAAC,GAAG,GAAG,EAAE,CAAC,EAAE,EAAE,CAAC;YACtD,IAAI,CAAC,CAAC,CAAC,GAAG,SAAS,CAAC,CAAC,CAAC,CAAC;YACvB,IAAI,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,GAAG,SAAS,CAAC,CAAC,CAAC,CAAC;QACxC,CAAC;QACD,IAAI,CAAC,MAAM,GAAG,SAAS,CAAC,MAAM,CAAC;IAChC,CAAC;IAED;;;;;OAKG;IACI,IAAI,CAAC,KAAa;QACxB,OAAO,IAAI,CAAC,KAAK,CAAC,IAAI,IAAI,CAAC;IAC5B,CAAC;IAED;;;;;OAKG;IACI,SAAS,CAAC,IAAY;QAC5B,OAAO,IAAI,CAAC,IAAI,CAAC,IAAI,IAAI,CAAC;IAC3B,CAAC;IAED;;;;OAIG;IACI,QAAQ;QACd,OAAO,iBAAiB,CAAC;IAC1B,CAAC;CACD;AAvDD,yBAuDC"}

View File

@@ -0,0 +1,41 @@
import MimeType from './MimeType.cjs';
/**
* Plugin.
*/
export default class Plugin {
[n: number]: MimeType;
readonly length: number;
readonly description: string;
readonly filename: string;
readonly name: string;
/**
* Constructor.
*
* @param mimeTypes Mime types.
* @param description Description.
* @param filename Filename.
* @param name Name.
*/
constructor(mimeTypes: MimeType[], description: string, filename: string, name: string);
/**
* Item.
*
* @param index Number.
* @returns IMimeType.
*/
item(index: number): MimeType;
/**
* NamedItem.
*
* @param name String.
* @returns IMimeType.
*/
namedItem(name: string): MimeType;
/**
* Returns the object as a string.
*
* @returns String.
*/
toString(): string;
}
//# sourceMappingURL=Plugin.d.ts.map

View File

@@ -0,0 +1 @@
{"version":3,"file":"Plugin.d.ts","sourceRoot":"","sources":["../../src/navigator/Plugin.ts"],"names":[],"mappings":"AAAA,OAAO,QAAQ,MAAM,eAAe,CAAC;AAErC;;GAEG;AACH,MAAM,CAAC,OAAO,OAAO,MAAM;IAC1B,CAAC,CAAC,EAAE,MAAM,GAAG,QAAQ,CAAC;IACtB,SAAgB,MAAM,EAAE,MAAM,CAAK;IACnC,SAAgB,WAAW,EAAE,MAAM,CAAC;IACpC,SAAgB,QAAQ,EAAE,MAAM,CAAC;IACjC,SAAgB,IAAI,EAAE,MAAM,CAAC;IAE7B;;;;;;;OAOG;gBACS,SAAS,EAAE,QAAQ,EAAE,EAAE,WAAW,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM;IAYtF;;;;;OAKG;IACI,IAAI,CAAC,KAAK,EAAE,MAAM,GAAG,QAAQ;IAIpC;;;;;OAKG;IACI,SAAS,CAAC,IAAI,EAAE,MAAM,GAAG,QAAQ;IAIxC;;;;OAIG;IACI,QAAQ,IAAI,MAAM;CAGzB"}

View File

@@ -0,0 +1,54 @@
"use strict";
Object.defineProperty(exports, "__esModule", { value: true });
/**
* PluginArray.
*/
class PluginArray {
length;
/**
* Constructor.
*
* @param plugins Plugins.
*/
constructor(plugins) {
for (let i = 0, max = plugins.length; i < max; i++) {
this[i] = plugins[i];
this[plugins[i].name] = plugins[i];
}
this.length = plugins.length;
}
/**
* Returns an item.
*
* @param index Index.
* @returns Plugin.
*/
item(index) {
return this[index] || null;
}
/**
* Returns an item.
*
* @param name Name.
* @returns Plugin.
*/
namedItem(name) {
return this[name] || null;
}
/**
* Refreshes the list.
*/
refresh() {
// Do nothing
}
/**
* Returns the object as a string.
*
* @returns String.
*/
toString() {
return '[object PluginArray]';
}
}
exports.default = PluginArray;
//# sourceMappingURL=PluginArray.cjs.map

View File

@@ -0,0 +1 @@
{"version":3,"file":"PluginArray.cjs","sourceRoot":"","sources":["../../src/navigator/PluginArray.ts"],"names":[],"mappings":";;AAEA;;GAEG;AACH,MAAqB,WAAW;IAEf,MAAM,CAAS;IAE/B;;;;OAIG;IACH,YAAY,OAAiB;QAC5B,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,GAAG,GAAG,OAAO,CAAC,MAAM,EAAE,CAAC,GAAG,GAAG,EAAE,CAAC,EAAE,EAAE,CAAC;YACpD,IAAI,CAAC,CAAC,CAAC,GAAG,OAAO,CAAC,CAAC,CAAC,CAAC;YACrB,IAAI,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,GAAG,OAAO,CAAC,CAAC,CAAC,CAAC;QACpC,CAAC;QACD,IAAI,CAAC,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC;IAC9B,CAAC;IAED;;;;;OAKG;IACI,IAAI,CAAC,KAAa;QACxB,OAAO,IAAI,CAAC,KAAK,CAAC,IAAI,IAAI,CAAC;IAC5B,CAAC;IAED;;;;;OAKG;IACI,SAAS,CAAC,IAAY;QAC5B,OAAO,IAAI,CAAC,IAAI,CAAC,IAAI,IAAI,CAAC;IAC3B,CAAC;IAED;;OAEG;IACI,OAAO;QACb,aAAa;IACd,CAAC;IAED;;;;OAIG;IACI,QAAQ;QACd,OAAO,sBAAsB,CAAC;IAC/B,CAAC;CACD;AApDD,8BAoDC"}

View File

@@ -0,0 +1,39 @@
import Plugin from './Plugin.cjs';
/**
* PluginArray.
*/
export default class PluginArray {
[n: number]: Plugin;
readonly length: number;
/**
* Constructor.
*
* @param plugins Plugins.
*/
constructor(plugins: Plugin[]);
/**
* Returns an item.
*
* @param index Index.
* @returns Plugin.
*/
item(index: number): Plugin;
/**
* Returns an item.
*
* @param name Name.
* @returns Plugin.
*/
namedItem(name: string): Plugin;
/**
* Refreshes the list.
*/
refresh(): void;
/**
* Returns the object as a string.
*
* @returns String.
*/
toString(): string;
}
//# sourceMappingURL=PluginArray.d.ts.map

View File

@@ -0,0 +1 @@
{"version":3,"file":"PluginArray.d.ts","sourceRoot":"","sources":["../../src/navigator/PluginArray.ts"],"names":[],"mappings":"AAAA,OAAO,MAAM,MAAM,aAAa,CAAC;AAEjC;;GAEG;AACH,MAAM,CAAC,OAAO,OAAO,WAAW;IAC/B,CAAC,CAAC,EAAE,MAAM,GAAG,MAAM,CAAC;IACpB,SAAgB,MAAM,EAAE,MAAM,CAAC;IAE/B;;;;OAIG;gBACS,OAAO,EAAE,MAAM,EAAE;IAQ7B;;;;;OAKG;IACI,IAAI,CAAC,KAAK,EAAE,MAAM,GAAG,MAAM;IAIlC;;;;;OAKG;IACI,SAAS,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM;IAItC;;OAEG;IACI,OAAO,IAAI,IAAI;IAItB;;;;OAIG;IACI,QAAQ,IAAI,MAAM;CAGzB"}