@reidelsaltres/pureper 0.1.49
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/LICENSE +21 -0
- package/README.md +6 -0
- package/out/foundation/Fetcher.d.ts +6 -0
- package/out/foundation/Fetcher.d.ts.map +1 -0
- package/out/foundation/Fetcher.js +18 -0
- package/out/foundation/Fetcher.js.map +1 -0
- package/out/foundation/Theme.d.ts +9 -0
- package/out/foundation/Theme.d.ts.map +1 -0
- package/out/foundation/Theme.js +28 -0
- package/out/foundation/Theme.js.map +1 -0
- package/out/foundation/Triplet.d.ts +44 -0
- package/out/foundation/Triplet.d.ts.map +1 -0
- package/out/foundation/Triplet.js +174 -0
- package/out/foundation/Triplet.js.map +1 -0
- package/out/foundation/api/ElementHolder.d.ts +4 -0
- package/out/foundation/api/ElementHolder.d.ts.map +1 -0
- package/out/foundation/api/ElementHolder.js +2 -0
- package/out/foundation/api/ElementHolder.js.map +1 -0
- package/out/foundation/api/EmptyConstructor.d.ts +7 -0
- package/out/foundation/api/EmptyConstructor.d.ts.map +1 -0
- package/out/foundation/api/EmptyConstructor.js +2 -0
- package/out/foundation/api/EmptyConstructor.js.map +1 -0
- package/out/foundation/api/Lazy.d.ts +7 -0
- package/out/foundation/api/Lazy.d.ts.map +1 -0
- package/out/foundation/api/Lazy.js +12 -0
- package/out/foundation/api/Lazy.js.map +1 -0
- package/out/foundation/component_api/Component.d.ts +58 -0
- package/out/foundation/component_api/Component.d.ts.map +1 -0
- package/out/foundation/component_api/Component.js +61 -0
- package/out/foundation/component_api/Component.js.map +1 -0
- package/out/foundation/component_api/Page.d.ts +8 -0
- package/out/foundation/component_api/Page.d.ts.map +1 -0
- package/out/foundation/component_api/Page.js +8 -0
- package/out/foundation/component_api/Page.js.map +1 -0
- package/out/foundation/component_api/UniHtml.d.ts +43 -0
- package/out/foundation/component_api/UniHtml.d.ts.map +1 -0
- package/out/foundation/component_api/UniHtml.js +67 -0
- package/out/foundation/component_api/UniHtml.js.map +1 -0
- package/out/foundation/component_api/mixin/Proto.d.ts +33 -0
- package/out/foundation/component_api/mixin/Proto.d.ts.map +1 -0
- package/out/foundation/component_api/mixin/Proto.js +43 -0
- package/out/foundation/component_api/mixin/Proto.js.map +1 -0
- package/out/foundation/worker/Router.d.ts +31 -0
- package/out/foundation/worker/Router.d.ts.map +1 -0
- package/out/foundation/worker/Router.js +95 -0
- package/out/foundation/worker/Router.js.map +1 -0
- package/out/foundation/worker/ServiceWorker.d.ts +25 -0
- package/out/foundation/worker/ServiceWorker.d.ts.map +1 -0
- package/out/foundation/worker/ServiceWorker.js +141 -0
- package/out/foundation/worker/ServiceWorker.js.map +1 -0
- package/out/foundation/worker/api/Clients.d.ts +4 -0
- package/out/foundation/worker/api/Clients.d.ts.map +1 -0
- package/out/foundation/worker/api/Clients.js +2 -0
- package/out/foundation/worker/api/Clients.js.map +1 -0
- package/out/foundation/worker/api/ExtendableEvent.d.ts +4 -0
- package/out/foundation/worker/api/ExtendableEvent.d.ts.map +1 -0
- package/out/foundation/worker/api/ExtendableEvent.js +2 -0
- package/out/foundation/worker/api/ExtendableEvent.js.map +1 -0
- package/out/foundation/worker/api/ExtendableMessageEvent.d.ts +6 -0
- package/out/foundation/worker/api/ExtendableMessageEvent.d.ts.map +1 -0
- package/out/foundation/worker/api/ExtendableMessageEvent.js +2 -0
- package/out/foundation/worker/api/ExtendableMessageEvent.js.map +1 -0
- package/out/foundation/worker/api/FetchEvent.d.ts +6 -0
- package/out/foundation/worker/api/FetchEvent.d.ts.map +1 -0
- package/out/foundation/worker/api/FetchEvent.js +2 -0
- package/out/foundation/worker/api/FetchEvent.js.map +1 -0
- package/out/foundation/worker/api/ServiceWorkerGlobalScope.d.ts +14 -0
- package/out/foundation/worker/api/ServiceWorkerGlobalScope.d.ts.map +1 -0
- package/out/foundation/worker/api/ServiceWorkerGlobalScope.js +2 -0
- package/out/foundation/worker/api/ServiceWorkerGlobalScope.js.map +1 -0
- package/out/index.d.ts +13 -0
- package/out/index.d.ts.map +1 -0
- package/out/index.js +11 -0
- package/out/index.js.map +1 -0
- package/package.json +39 -0
- package/src/foundation/Fetcher.ts +20 -0
- package/src/foundation/Theme.ts +37 -0
- package/src/foundation/Triplet.ts +208 -0
- package/src/foundation/api/ElementHolder.ts +3 -0
- package/src/foundation/api/EmptyConstructor.ts +6 -0
- package/src/foundation/api/Lazy.ts +12 -0
- package/src/foundation/component_api/Component.ts +92 -0
- package/src/foundation/component_api/Page.ts +9 -0
- package/src/foundation/component_api/UniHtml.ts +82 -0
- package/src/foundation/component_api/mixin/Proto.ts +67 -0
- package/src/foundation/worker/Router.ts +124 -0
- package/src/foundation/worker/ServiceWorker.ts +160 -0
- package/src/foundation/worker/api/Clients.ts +3 -0
- package/src/foundation/worker/api/ExtendableEvent.ts +3 -0
- package/src/foundation/worker/api/ExtendableMessageEvent.ts +6 -0
- package/src/foundation/worker/api/FetchEvent.ts +6 -0
- package/src/foundation/worker/api/ServiceWorkerGlobalScope.ts +14 -0
- package/src/index.ts +22 -0
|
@@ -0,0 +1,67 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Universal SPA component base for pages and elements.
|
|
3
|
+
* Use static factory methods for instantiation.
|
|
4
|
+
*/
|
|
5
|
+
export default class UniHtml {
|
|
6
|
+
/**
|
|
7
|
+
* Unified component lifecycle entrypoint.
|
|
8
|
+
* Loads HTML, then calls preLoadJS, render, and postLoadJS hooks in order.
|
|
9
|
+
* @param element Target container (usually shadowRoot.host)
|
|
10
|
+
*/
|
|
11
|
+
async load(element) {
|
|
12
|
+
const preHtml = await this._init();
|
|
13
|
+
const html = await this._postInit(preHtml);
|
|
14
|
+
const localRoot = document.createElement('div');
|
|
15
|
+
localRoot.innerHTML = html;
|
|
16
|
+
const holder = { element: localRoot };
|
|
17
|
+
// ВАЖНО: preLoad() вызывается ДО монтирования в DOM/Shadow DOM.
|
|
18
|
+
// Для компонентов (UniHtmlComponent) на этом этапе ещё нельзя полагаться на this.shadowRoot —
|
|
19
|
+
// используйте переданный localRoot для подготовки DOM, данных и навешивания обработчиков.
|
|
20
|
+
// Это предпочтительный этап инициализации для компонентов.
|
|
21
|
+
await this.preLoad(holder);
|
|
22
|
+
// render() отвечает за помещение содержимого из localRoot в конечную цель (renderTarget).
|
|
23
|
+
// В UniHtmlComponent.render() после вызова базового render() происходит добавление wrapper в shadowRoot.
|
|
24
|
+
await this.render(holder, element);
|
|
25
|
+
// postLoad() вызывается ПОСЛЕ render(). Для компонентов к этому моменту содержимое уже добавлено
|
|
26
|
+
// внутрь shadowRoot, и можно безопасно работать с this.shadowRoot, измерениями layout и т.п.
|
|
27
|
+
await this.postLoad(holder);
|
|
28
|
+
}
|
|
29
|
+
async _postInit(html) {
|
|
30
|
+
throw new Error("Method not implemented.");
|
|
31
|
+
}
|
|
32
|
+
async _init() {
|
|
33
|
+
throw new Error("Method not implemented.");
|
|
34
|
+
}
|
|
35
|
+
/**
|
|
36
|
+
* Hook before rendering (e.g., data preparation).
|
|
37
|
+
* Для компонентов вызывается до появления содержимого в Shadow DOM, this.shadowRoot может быть недоступен.
|
|
38
|
+
* РЕКОМЕНДАЦИЯ: предпочитайте выполнять основную подготовку, поиск элементов, навешивание обработчиков
|
|
39
|
+
* на узлы из localRoot именно здесь; затем render() вставит их в целевой контейнер/теневой DOM.
|
|
40
|
+
*/
|
|
41
|
+
async preLoad(holder) { }
|
|
42
|
+
/**
|
|
43
|
+
* Hook after rendering (e.g., event binding).
|
|
44
|
+
* Для компонентов вызывается после того, как содержимое вставлено в shadowRoot (см. UniHtmlComponent.render()).
|
|
45
|
+
* Используйте этот этап только когда необходим доступ к реально смонтированному DOM (layout/measurements,
|
|
46
|
+
* интеграции, требующие присутствия в документе). В остальных случаях предпочитайте preLoad().
|
|
47
|
+
*/
|
|
48
|
+
async postLoad(holder) { }
|
|
49
|
+
/**
|
|
50
|
+
* Main rendering step. By default, simply inserts HTML into the container.
|
|
51
|
+
* Override in subclasses for custom rendering logic.
|
|
52
|
+
* @param element Target container
|
|
53
|
+
* @param html HTML content
|
|
54
|
+
*/
|
|
55
|
+
async render(holder, renderTarget) {
|
|
56
|
+
while (renderTarget.firstChild) {
|
|
57
|
+
renderTarget.removeChild(renderTarget.firstChild);
|
|
58
|
+
}
|
|
59
|
+
const children = Array.from(holder.element.childNodes);
|
|
60
|
+
for (const child of children) {
|
|
61
|
+
renderTarget.appendChild(child);
|
|
62
|
+
}
|
|
63
|
+
holder.element = this;
|
|
64
|
+
return Promise.resolve();
|
|
65
|
+
}
|
|
66
|
+
}
|
|
67
|
+
//# sourceMappingURL=UniHtml.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"UniHtml.js","sourceRoot":"","sources":["../../../src/foundation/component_api/UniHtml.ts"],"names":[],"mappings":"AAUA;;;GAGG;AACH,MAAM,CAAC,OAAO,OAAO,OAAO;IACxB;;;;OAIG;IACI,KAAK,CAAC,IAAI,CAAC,OAAiC;QAC/C,MAAM,OAAO,GAAW,MAAM,IAAI,CAAC,KAAK,EAAE,CAAC;QAC3C,MAAM,IAAI,GAAW,MAAM,IAAI,CAAC,SAAS,CAAC,OAAO,CAAC,CAAC;QAEnD,MAAM,SAAS,GAAG,QAAQ,CAAC,aAAa,CAAC,KAAK,CAAC,CAAC;QAChD,SAAS,CAAC,SAAS,GAAG,IAAI,CAAC;QAE3B,MAAM,MAAM,GAAoB,EAAE,OAAO,EAAE,SAAS,EAAE,CAAC;QAEvD,gEAAgE;QAChE,8FAA8F;QAC9F,0FAA0F;QAC1F,2DAA2D;QAC3D,MAAM,IAAI,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC;QAC3B,0FAA0F;QAC1F,yGAAyG;QACzG,MAAM,IAAI,CAAC,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;QACnC,iGAAiG;QACjG,6FAA6F;QAC7F,MAAM,IAAI,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAC;IAChC,CAAC;IAEO,KAAK,CAAC,SAAS,CAAC,IAAY;QAChC,MAAM,IAAI,KAAK,CAAC,yBAAyB,CAAC,CAAC;IAC/C,CAAC;IACO,KAAK,CAAC,KAAK;QACf,MAAM,IAAI,KAAK,CAAC,yBAAyB,CAAC,CAAC;IAC/C,CAAC;IACD;;;;;OAKG;IACO,KAAK,CAAC,OAAO,CAAC,MAAuB,IAAI,CAAC;IACpD;;;;;OAKG;IACO,KAAK,CAAC,QAAQ,CAAC,MAAsB,IAAI,CAAC;IACpD;;;;;OAKG;IACO,KAAK,CAAC,MAAM,CAAC,MAAsB,EAAE,YAAsC;QACjF,OAAO,YAAY,CAAC,UAAU,EAAE,CAAC;YAC7B,YAAY,CAAC,WAAW,CAAC,YAAY,CAAC,UAAU,CAAC,CAAC;QACtD,CAAC;QAED,MAAM,QAAQ,GAAG,KAAK,CAAC,IAAI,CAAC,MAAM,CAAC,OAAO,CAAC,UAAU,CAAC,CAAC;QACvD,KAAK,MAAM,KAAK,IAAI,QAAQ,EAAE,CAAC;YAC3B,YAAY,CAAC,WAAW,CAAC,KAAK,CAAC,CAAC;QACpC,CAAC;QAEA,MAAc,CAAC,OAAO,GAAG,IAAI,CAAC;QAC/B,OAAO,OAAO,CAAC,OAAO,EAAE,CAAC;IAC7B,CAAC;CACJ"}
|
|
@@ -0,0 +1,33 @@
|
|
|
1
|
+
import Lazy from "../../../foundation/api/Lazy.js";
|
|
2
|
+
declare class ClassBuilder<T extends Constructor> {
|
|
3
|
+
private base;
|
|
4
|
+
constructor(base: T);
|
|
5
|
+
extend<U extends Constructor>(extend: U): ClassBuilder<T>;
|
|
6
|
+
extendAbstract<U extends AbstractConstructor>(extend: U): ClassBuilder<T>;
|
|
7
|
+
build(): {
|
|
8
|
+
new (...args: any[]): {};
|
|
9
|
+
} & T;
|
|
10
|
+
}
|
|
11
|
+
export type Mixined = {
|
|
12
|
+
super: Super;
|
|
13
|
+
getMixin<T extends Constructor>(ctor: T): ClassHolder<T> | undefined;
|
|
14
|
+
};
|
|
15
|
+
interface Super {
|
|
16
|
+
[key: string]: ClassHolder;
|
|
17
|
+
}
|
|
18
|
+
interface ClassHolder<T extends Constructor = any> {
|
|
19
|
+
class: T;
|
|
20
|
+
instance: Lazy<InstanceType<T>>;
|
|
21
|
+
}
|
|
22
|
+
export type AnyConstructor<T = {}> = Constructor<T> | LazyConstructor<T>;
|
|
23
|
+
export type Constructor<T = {}> = (new (...args: any[]) => T);
|
|
24
|
+
export type LazyConstructor<T = {}> = (new () => T);
|
|
25
|
+
export type ConcreteConstructor<T = any> = {
|
|
26
|
+
new (...args: any[]): T;
|
|
27
|
+
} & AbstractConstructor<T>;
|
|
28
|
+
export type AbstractConstructor<T = any> = Function & {
|
|
29
|
+
prototype: T;
|
|
30
|
+
};
|
|
31
|
+
export declare function Class<T extends Constructor>(Base: T): ClassBuilder<T>;
|
|
32
|
+
export {};
|
|
33
|
+
//# sourceMappingURL=Proto.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"Proto.d.ts","sourceRoot":"","sources":["../../../../src/foundation/component_api/mixin/Proto.ts"],"names":[],"mappings":"AAAA,OAAO,IAAI,MAAO,iCAAiC,CAAC;AACpD,cAAM,YAAY,CAAC,CAAC,SAAS,WAAW;IACxB,OAAO,CAAC,IAAI;gBAAJ,IAAI,EAAE,CAAC;IAEpB,MAAM,CAAC,CAAC,SAAS,WAAW,EAAE,MAAM,EAAE,CAAC,GAAG,YAAY,CAAC,CAAC,CAAC;IAgCzD,cAAc,CAAC,CAAC,SAAS,mBAAmB,EAAE,MAAM,EAAE,CAAC,GAAG,YAAY,CAAC,CAAC,CAAC;IAKzE,KAAK;sBAkBiC,GAAG,EAAE;;CAdrD;AACD,MAAM,MAAM,OAAO,GAAG;IAClB,KAAK,EAAE,KAAK,CAAC;IACb,QAAQ,CAAC,CAAC,SAAS,WAAW,EAAE,IAAI,EAAG,CAAC,GAAG,WAAW,CAAC,CAAC,CAAC,GAAG,SAAS,CAAC;CACzE,CAAC;AACF,UAAU,KAAK;IACX,CAAC,GAAG,EAAE,MAAM,GAAG,WAAW,CAAC;CAC9B;AACD,UAAU,WAAW,CAAC,CAAC,SAAS,WAAW,GAAG,GAAG;IAC7C,KAAK,EAAE,CAAC,CAAC;IACT,QAAQ,EAAE,IAAI,CAAC,YAAY,CAAC,CAAC,CAAC,CAAC,CAAC;CACnC;AACD,MAAM,MAAM,cAAc,CAAC,CAAC,GAAG,EAAE,IAAI,WAAW,CAAC,CAAC,CAAC,GAAG,eAAe,CAAC,CAAC,CAAC,CAAC;AAEzE,MAAM,MAAM,WAAW,CAAC,CAAC,GAAG,EAAE,IAAI,CAAC,KAAK,GAAG,IAAI,EAAE,GAAG,EAAE,KAAK,CAAC,CAAC,CAAC;AAC9D,MAAM,MAAM,eAAe,CAAC,CAAC,GAAG,EAAE,IAAI,CAAC,UAAU,CAAC,CAAC,CAAC;AACpD,MAAM,MAAM,mBAAmB,CAAC,CAAC,GAAG,GAAG,IAAI;IAAE,KAAI,GAAG,IAAI,EAAE,GAAG,EAAE,GAAG,CAAC,CAAA;CAAE,GAAG,mBAAmB,CAAC,CAAC,CAAC,CAAC;AAC/F,MAAM,MAAM,mBAAmB,CAAC,CAAC,GAAG,GAAG,IAAI,QAAQ,GAAG;IAAE,SAAS,EAAE,CAAC,CAAA;CAAE,CAAA;AAEtE,wBAAgB,KAAK,CAAC,CAAC,SAAS,WAAW,EAAE,IAAI,EAAE,CAAC,mBAEnD"}
|
|
@@ -0,0 +1,43 @@
|
|
|
1
|
+
import Lazy from "../../../foundation/api/Lazy.js";
|
|
2
|
+
class ClassBuilder {
|
|
3
|
+
constructor(base) {
|
|
4
|
+
this.base = base;
|
|
5
|
+
}
|
|
6
|
+
extend(extend) {
|
|
7
|
+
const proto = this.base.prototype;
|
|
8
|
+
Object.getOwnPropertyNames(extend.prototype).forEach(name => {
|
|
9
|
+
if (name !== 'constructor') {
|
|
10
|
+
Object.defineProperty(proto, name, Object.getOwnPropertyDescriptor(extend.prototype, name));
|
|
11
|
+
}
|
|
12
|
+
});
|
|
13
|
+
this.base = class extends this.base {
|
|
14
|
+
constructor(...args) {
|
|
15
|
+
super(...args);
|
|
16
|
+
var map = {};
|
|
17
|
+
var classHolder = { class: extend, instance: new Lazy(() => new extend(...args)) };
|
|
18
|
+
if (!this.hasOwnProperty('super'))
|
|
19
|
+
this.super = map;
|
|
20
|
+
this.super[extend.name] = classHolder;
|
|
21
|
+
if (!this.hasOwnProperty('getMixin')) {
|
|
22
|
+
this.getMixin = function (ctor) {
|
|
23
|
+
return this.super?.[ctor.name];
|
|
24
|
+
};
|
|
25
|
+
}
|
|
26
|
+
Object.assign(this, classHolder.instance.get());
|
|
27
|
+
}
|
|
28
|
+
};
|
|
29
|
+
return this;
|
|
30
|
+
}
|
|
31
|
+
extendAbstract(extend) {
|
|
32
|
+
let concrete = extend;
|
|
33
|
+
return this.extend(concrete);
|
|
34
|
+
}
|
|
35
|
+
build() {
|
|
36
|
+
return class extends this.base {
|
|
37
|
+
};
|
|
38
|
+
}
|
|
39
|
+
}
|
|
40
|
+
export function Class(Base) {
|
|
41
|
+
return new ClassBuilder(Base);
|
|
42
|
+
}
|
|
43
|
+
//# sourceMappingURL=Proto.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"Proto.js","sourceRoot":"","sources":["../../../../src/foundation/component_api/mixin/Proto.ts"],"names":[],"mappings":"AAAA,OAAO,IAAI,MAAO,iCAAiC,CAAC;AACpD,MAAM,YAAY;IACd,YAAoB,IAAO;QAAP,SAAI,GAAJ,IAAI,CAAG;IAAI,CAAC;IAEzB,MAAM,CAAwB,MAAS;QAC1C,MAAM,KAAK,GAAG,IAAI,CAAC,IAAI,CAAC,SAAS,CAAC;QAElC,MAAM,CAAC,mBAAmB,CAAC,MAAM,CAAC,SAAS,CAAC,CAAC,OAAO,CAAC,IAAI,CAAC,EAAE;YACxD,IAAI,IAAI,KAAK,aAAa,EAAE,CAAC;gBACzB,MAAM,CAAC,cAAc,CAAC,KAAK,EAAE,IAAI,EAAE,MAAM,CAAC,wBAAwB,CAAC,MAAM,CAAC,SAAS,EAAE,IAAI,CAAuB,CAAC,CAAC;YACtH,CAAC;QACL,CAAC,CAAC,CAAC;QAGH,IAAI,CAAC,IAAI,GAAG,KAAM,SAAQ,IAAI,CAAC,IAAI;YAC/B,YAAY,GAAG,IAAW;gBACtB,KAAK,CAAC,GAAG,IAAI,CAAC,CAAC;gBAEf,IAAI,GAAG,GAAW,EAAE,CAAC;gBACrB,IAAI,WAAW,GACX,EAAE,KAAK,EAAE,MAAM,EAAE,QAAQ,EAAE,IAAI,IAAI,CAAM,GAAG,EAAE,CAAC,IAAI,MAAM,CAAC,GAAG,IAAI,CAAC,CAAC,EAAE,CAAC;gBAE1E,IAAI,CAAC,IAAI,CAAC,cAAc,CAAC,OAAO,CAAC;oBAC5B,IAAY,CAAC,KAAK,GAAG,GAAG,CAAC;gBAC7B,IAAY,CAAC,KAAK,CAAC,MAAM,CAAC,IAAI,CAAC,GAAG,WAAW,CAAC;gBAC/C,IAAI,CAAC,IAAI,CAAC,cAAc,CAAC,UAAU,CAAC,EAAE,CAAC;oBAClC,IAAY,CAAC,QAAQ,GAAG,UAAiC,IAAQ;wBAC9D,OAAQ,IAAY,CAAC,KAAK,EAAE,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;oBAC5C,CAAC,CAAA;gBACL,CAAC;gBAED,MAAM,CAAC,MAAM,CAAC,IAAI,EAAE,WAAW,CAAC,QAAQ,CAAC,GAAG,EAAE,CAAC,CAAC;YACpD,CAAC;SACJ,CAAC;QACF,OAAO,IAAI,CAAC;IAChB,CAAC;IACM,cAAc,CAAgC,MAAS;QAC1D,IAAI,QAAQ,GAAG,MAAwC,CAAC;QACxD,OAAO,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAC;IACjC,CAAC;IAEM,KAAK;QACR,OAAO,KAAM,SAAQ,IAAI,CAAC,IAAI;SAC7B,CAAC;IACN,CAAC;CACJ;AAmBD,MAAM,UAAU,KAAK,CAAwB,IAAO;IAChD,OAAO,IAAI,YAAY,CAAC,IAAI,CAAC,CAAC;AAClC,CAAC"}
|
|
@@ -0,0 +1,31 @@
|
|
|
1
|
+
declare global {
|
|
2
|
+
interface Window {
|
|
3
|
+
RouterConfig?: {
|
|
4
|
+
ASSET_PATH: string;
|
|
5
|
+
};
|
|
6
|
+
}
|
|
7
|
+
}
|
|
8
|
+
import UniHtml from "../component_api/UniHtml.js";
|
|
9
|
+
export interface Route<T extends UniHtml = UniHtml> {
|
|
10
|
+
route: string;
|
|
11
|
+
path: string;
|
|
12
|
+
pageFactory: (search?: URLSearchParams) => T;
|
|
13
|
+
}
|
|
14
|
+
export declare enum AccessType {
|
|
15
|
+
OFFLINE = 0,
|
|
16
|
+
ONLINE = 1,
|
|
17
|
+
BOTH = 2
|
|
18
|
+
}
|
|
19
|
+
export declare const ROUTES: Route[];
|
|
20
|
+
export declare const TO_CACHE: string[];
|
|
21
|
+
export declare abstract class Router {
|
|
22
|
+
static savePersistedRoute(url: URL): void;
|
|
23
|
+
static getPersistedRoute(): URL | null;
|
|
24
|
+
static clearPersistedRoute(): void;
|
|
25
|
+
static legacyRouteTo(route: string): void;
|
|
26
|
+
static tryRouteTo(url: URL): void;
|
|
27
|
+
static tryFindRoute(url: URL): Route;
|
|
28
|
+
static registerRoute<T extends UniHtml>(path: string, route: string, pageFactory: (search?: URLSearchParams) => T, inheritedRoute?: Route): Promise<Route>;
|
|
29
|
+
private static createPage;
|
|
30
|
+
}
|
|
31
|
+
//# sourceMappingURL=Router.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"Router.d.ts","sourceRoot":"","sources":["../../../src/foundation/worker/Router.ts"],"names":[],"mappings":"AACA,OAAO,CAAC,MAAM,CAAC;IACb,UAAU,MAAM;QACd,YAAY,CAAC,EAAE;YAAE,UAAU,EAAE,MAAM,CAAA;SAAE,CAAC;KACvC;CACF;AAGD,OAAO,OAAO,MAAM,6BAA6B,CAAC;AAKlD,MAAM,WAAW,KAAK,CAAC,CAAC,SAAS,OAAO,GAAG,OAAO;IAChD,KAAK,EAAE,MAAM,CAAC;IACd,IAAI,EAAE,MAAM,CAAC;IAEb,WAAW,EAAE,CAAC,MAAM,CAAC,EAAE,eAAe,KAAK,CAAC,CAAC;CAC9C;AACD,oBAAY,UAAU;IACpB,OAAO,IAAA;IACP,MAAM,IAAA;IACN,IAAI,IAAA;CACL;AAED,eAAO,MAAM,MAAM,EAAE,KAAK,EAAO,CAAC;AAClC,eAAO,MAAM,QAAQ,EAAE,MAAM,EAAO,CAAC;AAErC,8BAAsB,MAAM;WACZ,kBAAkB,CAAC,GAAG,EAAE,GAAG;WAO3B,iBAAiB,IAAI,GAAG,GAAG,IAAI;WAS/B,mBAAmB;WASnB,aAAa,CAAC,KAAK,EAAE,MAAM;WAM3B,UAAU,CAAC,GAAG,EAAE,GAAG;WAcnB,YAAY,CAAC,GAAG,EAAE,GAAG,GAAG,KAAK;WAQvB,aAAa,CAAC,CAAC,SAAS,OAAO,EAAE,IAAI,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,EAAE,WAAW,EAAE,CAAC,MAAM,CAAC,EAAE,eAAe,KAAK,CAAC,EAC5H,cAAc,CAAC,EAAE,KAAK,GAAG,OAAO,CAAC,KAAK,CAAC;IAczC,OAAO,CAAC,MAAM,CAAC,UAAU;CAG1B"}
|
|
@@ -0,0 +1,95 @@
|
|
|
1
|
+
const globals = self;
|
|
2
|
+
export var AccessType;
|
|
3
|
+
(function (AccessType) {
|
|
4
|
+
AccessType[AccessType["OFFLINE"] = 0] = "OFFLINE";
|
|
5
|
+
AccessType[AccessType["ONLINE"] = 1] = "ONLINE";
|
|
6
|
+
AccessType[AccessType["BOTH"] = 2] = "BOTH";
|
|
7
|
+
})(AccessType || (AccessType = {}));
|
|
8
|
+
export const ROUTES = [];
|
|
9
|
+
export const TO_CACHE = [];
|
|
10
|
+
export class Router {
|
|
11
|
+
static savePersistedRoute(url) {
|
|
12
|
+
try {
|
|
13
|
+
sessionStorage.setItem("spa:persisted-route", url.toJSON());
|
|
14
|
+
}
|
|
15
|
+
catch (error) {
|
|
16
|
+
console.warn("[Router Init]: Unable to access sessionStorage.", error);
|
|
17
|
+
}
|
|
18
|
+
}
|
|
19
|
+
static getPersistedRoute() {
|
|
20
|
+
try {
|
|
21
|
+
const item = sessionStorage.getItem("spa:persisted-route");
|
|
22
|
+
return item ? URL.parse(item) : null;
|
|
23
|
+
}
|
|
24
|
+
catch (error) {
|
|
25
|
+
console.warn("[Router Init]: Unable to access sessionStorage.", error);
|
|
26
|
+
return null;
|
|
27
|
+
}
|
|
28
|
+
}
|
|
29
|
+
static clearPersistedRoute() {
|
|
30
|
+
try {
|
|
31
|
+
sessionStorage.removeItem("spa:persisted-route");
|
|
32
|
+
}
|
|
33
|
+
catch (error) {
|
|
34
|
+
console.warn("[Router Init]: Unable to clear persisted route.", error);
|
|
35
|
+
}
|
|
36
|
+
}
|
|
37
|
+
static legacyRouteTo(route) {
|
|
38
|
+
let url = new URL(route, window.location.origin);
|
|
39
|
+
if (window.location.pathname !== route) {
|
|
40
|
+
window.location.replace(url.href);
|
|
41
|
+
}
|
|
42
|
+
}
|
|
43
|
+
static tryRouteTo(url) {
|
|
44
|
+
try {
|
|
45
|
+
const found = this.tryFindRoute(url);
|
|
46
|
+
const page = this.createPage(found, url.searchParams);
|
|
47
|
+
page.load(document.getElementById('page'));
|
|
48
|
+
if (typeof window !== "undefined" && window.location) {
|
|
49
|
+
window.history.pushState(page, '', url.href);
|
|
50
|
+
}
|
|
51
|
+
}
|
|
52
|
+
catch (error) {
|
|
53
|
+
console.error("[Router]: Unable to route to ", url.href, error);
|
|
54
|
+
}
|
|
55
|
+
}
|
|
56
|
+
static tryFindRoute(url) {
|
|
57
|
+
const found = ROUTES.find(r => r.route === url.pathname);
|
|
58
|
+
if (!found) {
|
|
59
|
+
throw new Error(`[Router]: Route not found: ${url.pathname}`);
|
|
60
|
+
}
|
|
61
|
+
return found;
|
|
62
|
+
}
|
|
63
|
+
static async registerRoute(path, route, pageFactory, inheritedRoute) {
|
|
64
|
+
let prepRoute = route;
|
|
65
|
+
let fullRoute = inheritedRoute ? inheritedRoute.route + prepRoute : prepRoute;
|
|
66
|
+
let routeObj = { route: fullRoute, path, pageFactory };
|
|
67
|
+
ROUTES.push(routeObj);
|
|
68
|
+
console.log(`[Router]: Registered route: ${fullRoute} -> ${path}`);
|
|
69
|
+
return Promise.resolve(routeObj);
|
|
70
|
+
}
|
|
71
|
+
static createPage(route, search) {
|
|
72
|
+
return route.pageFactory(search);
|
|
73
|
+
}
|
|
74
|
+
}
|
|
75
|
+
document.addEventListener('click', e => {
|
|
76
|
+
const target = e.target;
|
|
77
|
+
if (target) {
|
|
78
|
+
const link = target.closest('a[data-link]') ?? target.closest('re-button[data-link]');
|
|
79
|
+
if (link) {
|
|
80
|
+
e.preventDefault();
|
|
81
|
+
const url = new URL(link.getAttribute('href'), window.location.origin);
|
|
82
|
+
Router.tryRouteTo(url);
|
|
83
|
+
}
|
|
84
|
+
}
|
|
85
|
+
});
|
|
86
|
+
window.addEventListener('DOMContentLoaded', () => {
|
|
87
|
+
const checkRoutes = () => {
|
|
88
|
+
const routes = ROUTES;
|
|
89
|
+
if (routes) {
|
|
90
|
+
console.log('[Init] [Router]: available routes =', routes.map(r => r.route).join(', '));
|
|
91
|
+
}
|
|
92
|
+
};
|
|
93
|
+
checkRoutes();
|
|
94
|
+
});
|
|
95
|
+
//# sourceMappingURL=Router.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"Router.js","sourceRoot":"","sources":["../../../src/foundation/worker/Router.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,25 @@
|
|
|
1
|
+
export default class ServiceWorker {
|
|
2
|
+
/**
|
|
3
|
+
* Sends a message to the service worker to cache a specific URL.
|
|
4
|
+
* @param url The URL of the resource to cache.
|
|
5
|
+
*/
|
|
6
|
+
static addToCache(url: string): Promise<void>;
|
|
7
|
+
/**
|
|
8
|
+
* Asks the service worker to skip waiting and activate the new version.
|
|
9
|
+
*/
|
|
10
|
+
static skipWaiting(): void;
|
|
11
|
+
/**
|
|
12
|
+
* Gets the version of the currently active service worker.
|
|
13
|
+
* @returns A promise that resolves with the version string.
|
|
14
|
+
*/
|
|
15
|
+
static getVersion(): Promise<string>;
|
|
16
|
+
/**
|
|
17
|
+
* Checks if the given URL is present in the Service Worker's cache.
|
|
18
|
+
*/
|
|
19
|
+
static isCached(url: string): Promise<boolean>;
|
|
20
|
+
/**
|
|
21
|
+
* Checks if the browser is online.
|
|
22
|
+
*/
|
|
23
|
+
static isOnline(): Promise<boolean>;
|
|
24
|
+
}
|
|
25
|
+
//# sourceMappingURL=ServiceWorker.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"ServiceWorker.d.ts","sourceRoot":"","sources":["../../../src/foundation/worker/ServiceWorker.ts"],"names":[],"mappings":"AAqEA,MAAM,CAAC,OAAO,OAAO,aAAa;IAC9B;;;OAGG;WACU,UAAU,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IAqBnD;;OAEG;IACH,MAAM,CAAC,WAAW,IAAI,IAAI;IAM1B;;;OAGG;IACH,MAAM,CAAC,UAAU,IAAI,OAAO,CAAC,MAAM,CAAC;IAkBpC;;OAEG;IACH,MAAM,CAAC,QAAQ,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC,OAAO,CAAC;IAmB9C;;OAEG;WACU,QAAQ,IAAI,OAAO,CAAC,OAAO,CAAC;CAQ5C"}
|
|
@@ -0,0 +1,141 @@
|
|
|
1
|
+
const swSelf = self;
|
|
2
|
+
// Автоматически генерируем CACHE_NAME из base.json
|
|
3
|
+
//import base from '../../../data/base.json';
|
|
4
|
+
const CACHE_NAME = `pureper-v1`;
|
|
5
|
+
const BASE_PATH = '/Pureper'; // GitHub Pages base path
|
|
6
|
+
const IS_GITHUB_PAGES = swSelf.location.hostname.includes('github.io');
|
|
7
|
+
const STATIC_ASSETS = [
|
|
8
|
+
'/index.html'
|
|
9
|
+
];
|
|
10
|
+
if ('serviceWorker' in navigator) {
|
|
11
|
+
window.addEventListener('load', () => {
|
|
12
|
+
navigator.serviceWorker.register('../out/src/foundation/worker/ServiceWorker.js', { type: 'module' })
|
|
13
|
+
.then((registration) => {
|
|
14
|
+
console.log('ServiceWorker registration successful:', registration.scope);
|
|
15
|
+
})
|
|
16
|
+
.catch((error) => {
|
|
17
|
+
console.error('ServiceWorker registration failed:', error);
|
|
18
|
+
});
|
|
19
|
+
});
|
|
20
|
+
window.addEventListener('fetch', (event) => {
|
|
21
|
+
event.respondWith(caches.match(event.request).then((cachedResponse) => {
|
|
22
|
+
console.log(`[ServiceWorker]: Fetching ${event.request.url}`);
|
|
23
|
+
return cachedResponse || fetch(event.request);
|
|
24
|
+
}));
|
|
25
|
+
});
|
|
26
|
+
}
|
|
27
|
+
/**
|
|
28
|
+
* Install event - cache static assets
|
|
29
|
+
*/
|
|
30
|
+
window.addEventListener('install', (event) => {
|
|
31
|
+
console.log('ServiceWorker: Installing...');
|
|
32
|
+
const assetsToCache = [
|
|
33
|
+
...STATIC_ASSETS
|
|
34
|
+
];
|
|
35
|
+
// Remove duplicates
|
|
36
|
+
const uniqueAssets = Array.from(new Set(assetsToCache));
|
|
37
|
+
event.waitUntil(caches.open(CACHE_NAME)
|
|
38
|
+
.then((cache) => {
|
|
39
|
+
console.log('ServiceWorker: Caching static assets and SPA routes');
|
|
40
|
+
return cache.addAll(uniqueAssets);
|
|
41
|
+
})
|
|
42
|
+
.then(() => {
|
|
43
|
+
console.log('ServiceWorker: Installation complete');
|
|
44
|
+
return swSelf.skipWaiting();
|
|
45
|
+
}));
|
|
46
|
+
});
|
|
47
|
+
export default class ServiceWorker {
|
|
48
|
+
/**
|
|
49
|
+
* Sends a message to the service worker to cache a specific URL.
|
|
50
|
+
* @param url The URL of the resource to cache.
|
|
51
|
+
*/
|
|
52
|
+
static async addToCache(url) {
|
|
53
|
+
if ('serviceWorker' in navigator && navigator.serviceWorker.controller) {
|
|
54
|
+
navigator.serviceWorker.controller.postMessage({
|
|
55
|
+
type: 'CACHE_URL',
|
|
56
|
+
url: url
|
|
57
|
+
});
|
|
58
|
+
}
|
|
59
|
+
else {
|
|
60
|
+
// Fallback: try to cache directly using the Cache API
|
|
61
|
+
try {
|
|
62
|
+
const cache = await caches.open('pureper-v1');
|
|
63
|
+
const response = await fetch(url);
|
|
64
|
+
if (response.ok) {
|
|
65
|
+
await cache.put(url, response);
|
|
66
|
+
console.log('[ServiceWorker]: Resource cached directly:', url);
|
|
67
|
+
}
|
|
68
|
+
}
|
|
69
|
+
catch (e) {
|
|
70
|
+
console.warn('[ServiceWorker]: Failed to cache resource:', url, e);
|
|
71
|
+
}
|
|
72
|
+
}
|
|
73
|
+
}
|
|
74
|
+
/**
|
|
75
|
+
* Asks the service worker to skip waiting and activate the new version.
|
|
76
|
+
*/
|
|
77
|
+
static skipWaiting() {
|
|
78
|
+
if ('serviceWorker' in navigator && navigator.serviceWorker.controller) {
|
|
79
|
+
navigator.serviceWorker.controller.postMessage({ type: 'SKIP_WAITING' });
|
|
80
|
+
}
|
|
81
|
+
}
|
|
82
|
+
/**
|
|
83
|
+
* Gets the version of the currently active service worker.
|
|
84
|
+
* @returns A promise that resolves with the version string.
|
|
85
|
+
*/
|
|
86
|
+
static getVersion() {
|
|
87
|
+
return new Promise((resolve, reject) => {
|
|
88
|
+
if ('serviceWorker' in navigator && navigator.serviceWorker.controller) {
|
|
89
|
+
const messageChannel = new MessageChannel();
|
|
90
|
+
messageChannel.port1.onmessage = (event) => {
|
|
91
|
+
if (event.data.error) {
|
|
92
|
+
reject(event.data.error);
|
|
93
|
+
}
|
|
94
|
+
else {
|
|
95
|
+
resolve(event.data.version);
|
|
96
|
+
}
|
|
97
|
+
};
|
|
98
|
+
navigator.serviceWorker.controller.postMessage({ type: 'GET_VERSION' }, [messageChannel.port2]);
|
|
99
|
+
}
|
|
100
|
+
else {
|
|
101
|
+
reject('Service worker not available.');
|
|
102
|
+
}
|
|
103
|
+
});
|
|
104
|
+
}
|
|
105
|
+
/**
|
|
106
|
+
* Checks if the given URL is present in the Service Worker's cache.
|
|
107
|
+
*/
|
|
108
|
+
static isCached(url) {
|
|
109
|
+
return new Promise((resolve) => {
|
|
110
|
+
if ('serviceWorker' in navigator && navigator.serviceWorker.controller) {
|
|
111
|
+
const mc = new MessageChannel();
|
|
112
|
+
mc.port1.onmessage = (ev) => {
|
|
113
|
+
if (ev.data && typeof ev.data.cached === 'boolean') {
|
|
114
|
+
resolve(ev.data.cached);
|
|
115
|
+
}
|
|
116
|
+
else {
|
|
117
|
+
resolve(false);
|
|
118
|
+
}
|
|
119
|
+
};
|
|
120
|
+
navigator.serviceWorker.controller.postMessage({ type: 'HAS_URL', url }, [mc.port2]);
|
|
121
|
+
}
|
|
122
|
+
else {
|
|
123
|
+
// Fallback: try CacheStorage directly (same-origin only)
|
|
124
|
+
caches.match(url).then(match => resolve(!!match)).catch(() => resolve(false));
|
|
125
|
+
}
|
|
126
|
+
});
|
|
127
|
+
}
|
|
128
|
+
/**
|
|
129
|
+
* Checks if the browser is online.
|
|
130
|
+
*/
|
|
131
|
+
static async isOnline() {
|
|
132
|
+
try {
|
|
133
|
+
const response = await fetch('./index.html', { cache: 'no-store' });
|
|
134
|
+
return response && response.ok;
|
|
135
|
+
}
|
|
136
|
+
catch {
|
|
137
|
+
return false;
|
|
138
|
+
}
|
|
139
|
+
}
|
|
140
|
+
}
|
|
141
|
+
//# sourceMappingURL=ServiceWorker.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"ServiceWorker.js","sourceRoot":"","sources":["../../../src/foundation/worker/ServiceWorker.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"Clients.d.ts","sourceRoot":"","sources":["../../../../src/foundation/worker/api/Clients.ts"],"names":[],"mappings":"AAAA,MAAM,WAAW,OAAO;IACpB,KAAK,IAAI,OAAO,CAAC,IAAI,CAAC,CAAC;CAC1B"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"Clients.js","sourceRoot":"","sources":["../../../../src/foundation/worker/api/Clients.ts"],"names":[],"mappings":""}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"ExtendableEvent.d.ts","sourceRoot":"","sources":["../../../../src/foundation/worker/api/ExtendableEvent.ts"],"names":[],"mappings":"AAAA,MAAM,WAAW,eAAgB,SAAQ,KAAK;IAC1C,SAAS,CAAC,OAAO,EAAE,OAAO,CAAC,GAAG,CAAC,GAAG,IAAI,CAAC;CAC1C"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"ExtendableEvent.js","sourceRoot":"","sources":["../../../../src/foundation/worker/api/ExtendableEvent.ts"],"names":[],"mappings":""}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"ExtendableMessageEvent.d.ts","sourceRoot":"","sources":["../../../../src/foundation/worker/api/ExtendableMessageEvent.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,eAAe,EAAE,MAAM,mBAAmB,CAAC;AAEpD,MAAM,WAAW,sBAAuB,SAAQ,eAAe;IAC3D,IAAI,EAAE,GAAG,CAAC;IACV,KAAK,EAAE,WAAW,EAAE,CAAC;CACxB"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"ExtendableMessageEvent.js","sourceRoot":"","sources":["../../../../src/foundation/worker/api/ExtendableMessageEvent.ts"],"names":[],"mappings":""}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"FetchEvent.d.ts","sourceRoot":"","sources":["../../../../src/foundation/worker/api/FetchEvent.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,eAAe,EAAE,MAAM,mBAAmB,CAAC;AAEpD,MAAM,WAAW,UAAW,SAAQ,eAAe;IAC/C,OAAO,EAAE,OAAO,CAAC;IACjB,WAAW,CAAC,QAAQ,EAAE,OAAO,CAAC,QAAQ,CAAC,GAAG,QAAQ,GAAG,IAAI,CAAC;CAC7D"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"FetchEvent.js","sourceRoot":"","sources":["../../../../src/foundation/worker/api/FetchEvent.ts"],"names":[],"mappings":""}
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
import { Clients } from './Clients';
|
|
2
|
+
import { ExtendableEvent } from './ExtendableEvent';
|
|
3
|
+
import { FetchEvent } from './FetchEvent';
|
|
4
|
+
import { ExtendableMessageEvent } from './ExtendableMessageEvent';
|
|
5
|
+
export interface ServiceWorkerGlobalScope {
|
|
6
|
+
skipWaiting(): Promise<void>;
|
|
7
|
+
clients: Clients;
|
|
8
|
+
location: Location;
|
|
9
|
+
addEventListener(type: 'install', listener: (event: ExtendableEvent) => void): void;
|
|
10
|
+
addEventListener(type: 'activate', listener: (event: ExtendableEvent) => void): void;
|
|
11
|
+
addEventListener(type: 'fetch', listener: (event: FetchEvent) => void): void;
|
|
12
|
+
addEventListener(type: 'message', listener: (event: ExtendableMessageEvent) => void): void;
|
|
13
|
+
}
|
|
14
|
+
//# sourceMappingURL=ServiceWorkerGlobalScope.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"ServiceWorkerGlobalScope.d.ts","sourceRoot":"","sources":["../../../../src/foundation/worker/api/ServiceWorkerGlobalScope.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AACpC,OAAO,EAAE,eAAe,EAAE,MAAM,mBAAmB,CAAC;AACpD,OAAO,EAAE,UAAU,EAAE,MAAM,cAAc,CAAC;AAC1C,OAAO,EAAE,sBAAsB,EAAE,MAAM,0BAA0B,CAAC;AAElE,MAAM,WAAW,wBAAwB;IACrC,WAAW,IAAI,OAAO,CAAC,IAAI,CAAC,CAAC;IAC7B,OAAO,EAAE,OAAO,CAAC;IACjB,QAAQ,EAAE,QAAQ,CAAC;IACnB,gBAAgB,CAAC,IAAI,EAAE,SAAS,EAAE,QAAQ,EAAE,CAAC,KAAK,EAAE,eAAe,KAAK,IAAI,GAAG,IAAI,CAAC;IACpF,gBAAgB,CAAC,IAAI,EAAE,UAAU,EAAE,QAAQ,EAAE,CAAC,KAAK,EAAE,eAAe,KAAK,IAAI,GAAG,IAAI,CAAC;IACrF,gBAAgB,CAAC,IAAI,EAAE,OAAO,EAAE,QAAQ,EAAE,CAAC,KAAK,EAAE,UAAU,KAAK,IAAI,GAAG,IAAI,CAAC;IAC7E,gBAAgB,CAAC,IAAI,EAAE,SAAS,EAAE,QAAQ,EAAE,CAAC,KAAK,EAAE,sBAAsB,KAAK,IAAI,GAAG,IAAI,CAAC;CAC9F"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"ServiceWorkerGlobalScope.js","sourceRoot":"","sources":["../../../../src/foundation/worker/api/ServiceWorkerGlobalScope.ts"],"names":[],"mappings":""}
|
package/out/index.d.ts
ADDED
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
export { default as ElementHolder } from './foundation/api/ElementHolder';
|
|
2
|
+
export { default as EmptyConstructor } from './foundation/api/EmptyConstructor';
|
|
3
|
+
export { default as Lazy } from './foundation/api/Lazy';
|
|
4
|
+
export * from './foundation/component_api/mixin/Proto';
|
|
5
|
+
export { default as UniHtml } from './foundation/component_api/UniHtml';
|
|
6
|
+
export { default as Page } from './foundation/component_api/Page';
|
|
7
|
+
export { default as Component } from './foundation/component_api/Component';
|
|
8
|
+
export { default as Triplet } from './foundation/Triplet';
|
|
9
|
+
export { default as Fetcher } from './foundation/Fetcher';
|
|
10
|
+
export { Router } from './foundation/worker/Router';
|
|
11
|
+
export { default as ServiceWorker } from './foundation/worker/ServiceWorker';
|
|
12
|
+
export * from './foundation/Theme';
|
|
13
|
+
//# sourceMappingURL=index.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,OAAO,IAAI,aAAa,EAAE,MAAM,gCAAgC,CAAC;AAC1E,OAAO,EAAE,OAAO,IAAI,gBAAgB,EAAE,MAAM,mCAAmC,CAAC;AAChF,OAAO,EAAE,OAAO,IAAI,IAAI,EAAE,MAAM,uBAAuB,CAAC;AAExD,cAAc,wCAAwC,CAAC;AAEvD,OAAO,EAAE,OAAO,IAAI,OAAO,EAAE,MAAM,oCAAoC,CAAC;AACxE,OAAO,EAAE,OAAO,IAAI,IAAI,EAAE,MAAM,iCAAiC,CAAC;AAClE,OAAO,EAAE,OAAO,IAAI,SAAS,EAAE,MAAM,sCAAsC,CAAC;AAE5E,OAAO,EAAE,OAAO,IAAI,OAAO,EAAE,MAAM,sBAAsB,CAAC;AAE1D,OAAO,EAAE,OAAO,IAAI,OAAO,EAAE,MAAM,sBAAsB,CAAC;AAG1D,OAAO,EAAE,MAAM,EAAE,MAAM,4BAA4B,CAAC;AACpD,OAAO,EAAE,OAAO,IAAI,aAAa,EAAE,MAAM,mCAAmC,CAAC;AAI7E,cAAc,oBAAoB,CAAC"}
|
package/out/index.js
ADDED
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
export { default as Lazy } from './foundation/api/Lazy';
|
|
2
|
+
export * from './foundation/component_api/mixin/Proto';
|
|
3
|
+
export { default as UniHtml } from './foundation/component_api/UniHtml';
|
|
4
|
+
export { default as Page } from './foundation/component_api/Page';
|
|
5
|
+
export { default as Component } from './foundation/component_api/Component';
|
|
6
|
+
export { default as Triplet } from './foundation/Triplet';
|
|
7
|
+
export { default as Fetcher } from './foundation/Fetcher';
|
|
8
|
+
export { Router } from './foundation/worker/Router';
|
|
9
|
+
export { default as ServiceWorker } from './foundation/worker/ServiceWorker';
|
|
10
|
+
export * from './foundation/Theme';
|
|
11
|
+
//# sourceMappingURL=index.js.map
|
package/out/index.js.map
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAGA,OAAO,EAAE,OAAO,IAAI,IAAI,EAAE,MAAM,uBAAuB,CAAC;AAExD,cAAc,wCAAwC,CAAC;AAEvD,OAAO,EAAE,OAAO,IAAI,OAAO,EAAE,MAAM,oCAAoC,CAAC;AACxE,OAAO,EAAE,OAAO,IAAI,IAAI,EAAE,MAAM,iCAAiC,CAAC;AAClE,OAAO,EAAE,OAAO,IAAI,SAAS,EAAE,MAAM,sCAAsC,CAAC;AAE5E,OAAO,EAAE,OAAO,IAAI,OAAO,EAAE,MAAM,sBAAsB,CAAC;AAE1D,OAAO,EAAE,OAAO,IAAI,OAAO,EAAE,MAAM,sBAAsB,CAAC;AAG1D,OAAO,EAAE,MAAM,EAAE,MAAM,4BAA4B,CAAC;AACpD,OAAO,EAAE,OAAO,IAAI,aAAa,EAAE,MAAM,mCAAmC,CAAC;AAI7E,cAAc,oBAAoB,CAAC"}
|