@reidelsaltres/pureper 0.2.32 → 0.2.33

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.
@@ -5,6 +5,23 @@ export type ModuleStruct = {
5
5
  icon?: string;
6
6
  core?: boolean;
7
7
  enabled?: boolean;
8
+ resources?: string[];
9
+ };
10
+ export type ModuleDownloadProgress = {
11
+ /** Total number of resources */
12
+ totalFiles: number;
13
+ /** Number of resources downloaded so far */
14
+ downloadedFiles: number;
15
+ /** Current file being downloaded */
16
+ currentFile: string;
17
+ /** Total bytes across all resources (estimated) */
18
+ totalBytes: number;
19
+ /** Bytes downloaded so far */
20
+ downloadedBytes: number;
21
+ /** Download speed in bytes/sec */
22
+ speed: number;
23
+ /** Whether download is in progress */
24
+ active: boolean;
8
25
  };
9
26
  export default class Module {
10
27
  readonly name: string;
@@ -13,6 +30,9 @@ export default class Module {
13
30
  readonly core: boolean;
14
31
  readonly enabled: Observable<boolean>;
15
32
  readonly downloaded: Observable<boolean>;
33
+ readonly resources: string[];
34
+ readonly totalSize: Observable<number>;
35
+ readonly downloadProgress: Observable<ModuleDownloadProgress>;
16
36
  private _registrations;
17
37
  constructor(struct: ModuleStruct);
18
38
  addRegistration(fn: () => Promise<void>): void;
@@ -30,8 +50,13 @@ export default class Module {
30
50
  isActive(): boolean;
31
51
  /** True if enabled but not downloaded — works only in the current session. */
32
52
  get ephemeral(): boolean;
33
- download(): void;
34
- undownload(): void;
53
+ /**
54
+ * Download all module resources with progress tracking.
55
+ * Uses fetch to download each resource and tracks progress.
56
+ */
57
+ download(): Promise<void>;
58
+ formatBytes(bytes: number): string;
59
+ undownload(): Promise<void>;
35
60
  }
36
61
  export declare class ModuleManager {
37
62
  private static _modules;
@@ -1 +1 @@
1
- {"version":3,"file":"Module.d.ts","sourceRoot":"","sources":["../../src/foundation/Module.ts"],"names":[],"mappings":"AAAA,OAAO,UAAU,MAAM,mBAAmB,CAAC;AAG3C,MAAM,MAAM,YAAY,GAAG;IACvB,IAAI,EAAE,MAAM,CAAC;IACb,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,IAAI,CAAC,EAAE,OAAO,CAAC;IACf,OAAO,CAAC,EAAE,OAAO,CAAC;CACrB,CAAC;AAEF,MAAM,CAAC,OAAO,OAAO,MAAM;IACvB,SAAgB,IAAI,EAAE,MAAM,CAAC;IAC7B,SAAgB,WAAW,CAAC,EAAE,MAAM,CAAC;IACrC,SAAgB,IAAI,CAAC,EAAE,MAAM,CAAC;IAC9B,SAAgB,IAAI,EAAE,OAAO,CAAC;IAC9B,SAAgB,OAAO,EAAE,UAAU,CAAC,OAAO,CAAC,CAAC;IAC7C,SAAgB,UAAU,EAAE,UAAU,CAAC,OAAO,CAAC,CAAC;IAEhD,OAAO,CAAC,cAAc,CAA+B;gBAElC,MAAM,EAAE,YAAY;IAShC,eAAe,CAAC,EAAE,EAAE,MAAM,OAAO,CAAC,IAAI,CAAC,GAAG,IAAI;IAI9C,gBAAgB,IAAI,aAAa,CAAC,MAAM,OAAO,CAAC,IAAI,CAAC,CAAC;IAI7D;;;;;;OAMG;IACI,oBAAoB,CAAC,QAAQ,EAAE,CAAC,MAAM,OAAO,CAAC,IAAI,CAAC,CAAC,EAAE,GAAG,IAAI;IAM7D,MAAM,IAAI,IAAI;IAMd,OAAO,IAAI,IAAI;IASf,QAAQ,IAAI,OAAO;IAI1B,8EAA8E;IAC9E,IAAW,SAAS,IAAI,OAAO,CAE9B;IAEM,QAAQ,IAAI,IAAI;IAKhB,UAAU,IAAI,IAAI;CAO5B;AAED,qBAAa,aAAa;IACtB,OAAO,CAAC,MAAM,CAAC,QAAQ,CAAkC;IACzD,OAAO,CAAC,MAAM,CAAC,QAAQ,CAAC,WAAW,CAAoB;IACvD,OAAO,CAAC,MAAM,CAAC,QAAQ,CAAC,WAAW,CAA4B;IAE/D,MAAM,CAAC,QAAQ,CAAC,MAAM,EAAE,YAAY,GAAG,MAAM;IAU7C,MAAM,CAAC,GAAG,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,GAAG,SAAS;IAI5C,MAAM,CAAC,MAAM,IAAI,MAAM,EAAE;IAIzB,MAAM,CAAC,QAAQ,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO;IAKtC;;;;;;OAMG;IACH,MAAM,CAAC,UAAU,IAAI,OAAO,CAAC,IAAI,CAAC,EAAE;IA4BpC,MAAM,CAAC,YAAY,IAAI,IAAI;IAuB3B,MAAM,CAAC,YAAY,IAAI,IAAI;CA4C9B"}
1
+ {"version":3,"file":"Module.d.ts","sourceRoot":"","sources":["../../src/foundation/Module.ts"],"names":[],"mappings":"AAAA,OAAO,UAAU,MAAM,mBAAmB,CAAC;AAG3C,MAAM,MAAM,YAAY,GAAG;IACvB,IAAI,EAAE,MAAM,CAAC;IACb,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,IAAI,CAAC,EAAE,OAAO,CAAC;IACf,OAAO,CAAC,EAAE,OAAO,CAAC;IAClB,SAAS,CAAC,EAAE,MAAM,EAAE,CAAC;CACxB,CAAC;AAEF,MAAM,MAAM,sBAAsB,GAAG;IACjC,gCAAgC;IAChC,UAAU,EAAE,MAAM,CAAC;IACnB,4CAA4C;IAC5C,eAAe,EAAE,MAAM,CAAC;IACxB,oCAAoC;IACpC,WAAW,EAAE,MAAM,CAAC;IACpB,mDAAmD;IACnD,UAAU,EAAE,MAAM,CAAC;IACnB,8BAA8B;IAC9B,eAAe,EAAE,MAAM,CAAC;IACxB,kCAAkC;IAClC,KAAK,EAAE,MAAM,CAAC;IACd,sCAAsC;IACtC,MAAM,EAAE,OAAO,CAAC;CACnB,CAAC;AAEF,MAAM,CAAC,OAAO,OAAO,MAAM;IACvB,SAAgB,IAAI,EAAE,MAAM,CAAC;IAC7B,SAAgB,WAAW,CAAC,EAAE,MAAM,CAAC;IACrC,SAAgB,IAAI,CAAC,EAAE,MAAM,CAAC;IAC9B,SAAgB,IAAI,EAAE,OAAO,CAAC;IAC9B,SAAgB,OAAO,EAAE,UAAU,CAAC,OAAO,CAAC,CAAC;IAC7C,SAAgB,UAAU,EAAE,UAAU,CAAC,OAAO,CAAC,CAAC;IAChD,SAAgB,SAAS,EAAE,MAAM,EAAE,CAAC;IACpC,SAAgB,SAAS,EAAE,UAAU,CAAC,MAAM,CAAC,CAAC;IAC9C,SAAgB,gBAAgB,EAAE,UAAU,CAAC,sBAAsB,CAAC,CAAC;IAErE,OAAO,CAAC,cAAc,CAA+B;gBAElC,MAAM,EAAE,YAAY;IAehC,eAAe,CAAC,EAAE,EAAE,MAAM,OAAO,CAAC,IAAI,CAAC,GAAG,IAAI;IAI9C,gBAAgB,IAAI,aAAa,CAAC,MAAM,OAAO,CAAC,IAAI,CAAC,CAAC;IAI7D;;;;;;OAMG;IACI,oBAAoB,CAAC,QAAQ,EAAE,CAAC,MAAM,OAAO,CAAC,IAAI,CAAC,CAAC,EAAE,GAAG,IAAI;IAM7D,MAAM,IAAI,IAAI;IAMd,OAAO,IAAI,IAAI;IASf,QAAQ,IAAI,OAAO;IAI1B,8EAA8E;IAC9E,IAAW,SAAS,IAAI,OAAO,CAE9B;IAED;;;OAGG;IACU,QAAQ,IAAI,OAAO,CAAC,IAAI,CAAC;IA0H/B,WAAW,CAAC,KAAK,EAAE,MAAM,GAAG,MAAM;IAQ5B,UAAU,IAAI,OAAO,CAAC,IAAI,CAAC;CA4B3C;AAED,qBAAa,aAAa;IACtB,OAAO,CAAC,MAAM,CAAC,QAAQ,CAAkC;IACzD,OAAO,CAAC,MAAM,CAAC,QAAQ,CAAC,WAAW,CAAoB;IACvD,OAAO,CAAC,MAAM,CAAC,QAAQ,CAAC,WAAW,CAA4B;IAE/D,MAAM,CAAC,QAAQ,CAAC,MAAM,EAAE,YAAY,GAAG,MAAM;IAU7C,MAAM,CAAC,GAAG,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,GAAG,SAAS;IAI5C,MAAM,CAAC,MAAM,IAAI,MAAM,EAAE;IAIzB,MAAM,CAAC,QAAQ,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO;IAKtC;;;;;;OAMG;IACH,MAAM,CAAC,UAAU,IAAI,OAAO,CAAC,IAAI,CAAC,EAAE;IA4BpC,MAAM,CAAC,YAAY,IAAI,IAAI;IAuB3B,MAAM,CAAC,YAAY,IAAI,IAAI;CA4C9B"}
@@ -7,6 +7,9 @@ export default class Module {
7
7
  core;
8
8
  enabled;
9
9
  downloaded;
10
+ resources;
11
+ totalSize;
12
+ downloadProgress;
10
13
  _registrations = [];
11
14
  constructor(struct) {
12
15
  this.name = struct.name;
@@ -15,6 +18,12 @@ export default class Module {
15
18
  this.core = struct.core ?? false;
16
19
  this.enabled = new Observable(this.core ? true : (struct.enabled ?? false));
17
20
  this.downloaded = new Observable(this.core ? true : false);
21
+ this.resources = struct.resources ?? [];
22
+ this.totalSize = new Observable(0);
23
+ this.downloadProgress = new Observable({
24
+ totalFiles: 0, downloadedFiles: 0, currentFile: '',
25
+ totalBytes: 0, downloadedBytes: 0, speed: 0, active: false
26
+ });
18
27
  }
19
28
  addRegistration(fn) {
20
29
  this._registrations.push(fn);
@@ -56,15 +65,156 @@ export default class Module {
56
65
  get ephemeral() {
57
66
  return this.isActive() && !this.downloaded.getObject();
58
67
  }
59
- download() {
68
+ /**
69
+ * Download all module resources with progress tracking.
70
+ * Uses fetch to download each resource and tracks progress.
71
+ */
72
+ async download() {
73
+ if (this.downloaded.getObject())
74
+ return;
75
+ if (this.resources.length === 0) {
76
+ // No resources to download — just mark as downloaded
77
+ this.downloaded.setObject(true);
78
+ console.log(`[Module]: "${this.name}" downloaded (no resources)`);
79
+ return;
80
+ }
81
+ const resolveUrl = (url) => {
82
+ const trimmed = url.trim();
83
+ if (/^[a-zA-Z][a-zA-Z0-9+.-]*:/.test(trimmed))
84
+ return trimmed;
85
+ if (trimmed.startsWith("//"))
86
+ return `${window.location.protocol}${trimmed}`;
87
+ return new URL(trimmed, document.baseURI).href;
88
+ };
89
+ const totalFiles = this.resources.length;
90
+ let downloadedFiles = 0;
91
+ let downloadedBytes = 0;
92
+ let totalBytes = 0;
93
+ let lastTime = performance.now();
94
+ let lastBytes = 0;
95
+ let speed = 0;
96
+ // First, try to estimate total size with HEAD requests
97
+ const headPromises = this.resources.map(async (url) => {
98
+ try {
99
+ const resolved = resolveUrl(url);
100
+ const resp = await fetch(resolved, { method: 'HEAD' });
101
+ const cl = resp.headers.get('content-length');
102
+ return cl ? parseInt(cl, 10) : 0;
103
+ }
104
+ catch {
105
+ return 0;
106
+ }
107
+ });
108
+ const sizes = await Promise.all(headPromises);
109
+ totalBytes = sizes.reduce((a, b) => a + b, 0);
110
+ this.totalSize.setObject(totalBytes);
111
+ this.downloadProgress.setObject({
112
+ totalFiles, downloadedFiles: 0, currentFile: '',
113
+ totalBytes, downloadedBytes: 0, speed: 0, active: true
114
+ });
115
+ console.log(`[Module]: Starting download of "${this.name}" (${totalFiles} files, ~${this.formatBytes(totalBytes)})`);
116
+ for (let i = 0; i < this.resources.length; i++) {
117
+ const url = this.resources[i];
118
+ const resolved = resolveUrl(url);
119
+ const fileName = url.split('/').pop() || url;
120
+ this.downloadProgress.setObject({
121
+ totalFiles, downloadedFiles, currentFile: fileName,
122
+ totalBytes, downloadedBytes, speed, active: true
123
+ });
124
+ try {
125
+ const response = await fetch(resolved);
126
+ if (!response.ok) {
127
+ console.warn(`[Module]: Failed to download ${url}: ${response.status}`);
128
+ downloadedFiles++;
129
+ continue;
130
+ }
131
+ // Read with progress tracking
132
+ const reader = response.body?.getReader();
133
+ const chunks = [];
134
+ if (reader) {
135
+ while (true) {
136
+ const { done, value } = await reader.read();
137
+ if (done)
138
+ break;
139
+ chunks.push(value);
140
+ downloadedBytes += value.byteLength;
141
+ // Calculate speed
142
+ const now = performance.now();
143
+ const elapsed = (now - lastTime) / 1000;
144
+ if (elapsed >= 0.5) {
145
+ speed = (downloadedBytes - lastBytes) / elapsed;
146
+ lastTime = now;
147
+ lastBytes = downloadedBytes;
148
+ }
149
+ this.downloadProgress.setObject({
150
+ totalFiles, downloadedFiles, currentFile: fileName,
151
+ totalBytes, downloadedBytes, speed, active: true
152
+ });
153
+ }
154
+ }
155
+ // Cache the resource
156
+ if ('caches' in window) {
157
+ try {
158
+ const cache = await caches.open('purper-modules');
159
+ const blob = new Blob(chunks);
160
+ const cacheResponse = new Response(blob, {
161
+ headers: response.headers
162
+ });
163
+ await cache.put(resolved, cacheResponse);
164
+ }
165
+ catch (e) {
166
+ console.warn(`[Module]: Failed to cache ${url}`, e);
167
+ }
168
+ }
169
+ downloadedFiles++;
170
+ }
171
+ catch (e) {
172
+ console.warn(`[Module]: Error downloading ${url}`, e);
173
+ downloadedFiles++;
174
+ }
175
+ }
176
+ this.downloadProgress.setObject({
177
+ totalFiles, downloadedFiles, currentFile: '',
178
+ totalBytes, downloadedBytes, speed: 0, active: false
179
+ });
60
180
  this.downloaded.setObject(true);
61
- console.log(`[Module]: "${this.name}" downloaded`);
181
+ console.log(`[Module]: "${this.name}" downloaded (${downloadedFiles}/${totalFiles} files, ${this.formatBytes(downloadedBytes)})`);
62
182
  }
63
- undownload() {
183
+ formatBytes(bytes) {
184
+ if (bytes === 0)
185
+ return '0 B';
186
+ const k = 1024;
187
+ const sizes = ['B', 'KB', 'MB', 'GB'];
188
+ const i = Math.floor(Math.log(bytes) / Math.log(k));
189
+ return parseFloat((bytes / Math.pow(k, i)).toFixed(1)) + ' ' + sizes[i];
190
+ }
191
+ async undownload() {
64
192
  if (this.core) {
65
193
  throw new Error(`[Module]: Cannot remove core module "${this.name}" from downloads`);
66
194
  }
195
+ // Remove cached resources
196
+ if ('caches' in window && this.resources.length > 0) {
197
+ try {
198
+ const cache = await caches.open('purper-modules');
199
+ const resolveUrl = (url) => {
200
+ const trimmed = url.trim();
201
+ if (/^[a-zA-Z][a-zA-Z0-9+.-]*:/.test(trimmed))
202
+ return trimmed;
203
+ if (trimmed.startsWith("//"))
204
+ return `${window.location.protocol}${trimmed}`;
205
+ return new URL(trimmed, document.baseURI).href;
206
+ };
207
+ for (const url of this.resources) {
208
+ await cache.delete(resolveUrl(url));
209
+ }
210
+ console.log(`[Module]: Cleared cache for "${this.name}"`);
211
+ }
212
+ catch (e) {
213
+ console.warn(`[Module]: Failed to clear cache for "${this.name}"`, e);
214
+ }
215
+ }
67
216
  this.downloaded.setObject(false);
217
+ this.totalSize.setObject(0);
68
218
  console.log(`[Module]: "${this.name}" removed from downloads`);
69
219
  }
70
220
  }
@@ -1 +1 @@
1
- {"version":3,"file":"Module.js","sourceRoot":"","sources":["../../src/foundation/Module.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"Module.js","sourceRoot":"","sources":["../../src/foundation/Module.ts"],"names":[],"mappings":"AAAA,OAAO,UAAU,MAAM,mBAAmB,CAAC;AAC3C,OAAO,EAAE,QAAQ,EAAE,MAAM,cAAc,CAAC;AA4BxC,MAAM,CAAC,OAAO,OAAO,MAAM;IACP,IAAI,CAAS;IACb,WAAW,CAAU;IACrB,IAAI,CAAU;IACd,IAAI,CAAU;IACd,OAAO,CAAsB;IAC7B,UAAU,CAAsB;IAChC,SAAS,CAAW;IACpB,SAAS,CAAqB;IAC9B,gBAAgB,CAAqC;IAE7D,cAAc,GAA4B,EAAE,CAAC;IAErD,YAAmB,MAAoB;QACnC,IAAI,CAAC,IAAI,GAAG,MAAM,CAAC,IAAI,CAAC;QACxB,IAAI,CAAC,WAAW,GAAG,MAAM,CAAC,WAAW,CAAC;QACtC,IAAI,CAAC,IAAI,GAAG,MAAM,CAAC,IAAI,CAAC;QACxB,IAAI,CAAC,IAAI,GAAG,MAAM,CAAC,IAAI,IAAI,KAAK,CAAC;QACjC,IAAI,CAAC,OAAO,GAAG,IAAI,UAAU,CAAU,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,OAAO,IAAI,KAAK,CAAC,CAAC,CAAC;QACrF,IAAI,CAAC,UAAU,GAAG,IAAI,UAAU,CAAU,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC;QACpE,IAAI,CAAC,SAAS,GAAG,MAAM,CAAC,SAAS,IAAI,EAAE,CAAC;QACxC,IAAI,CAAC,SAAS,GAAG,IAAI,UAAU,CAAS,CAAC,CAAC,CAAC;QAC3C,IAAI,CAAC,gBAAgB,GAAG,IAAI,UAAU,CAAyB;YAC3D,UAAU,EAAE,CAAC,EAAE,eAAe,EAAE,CAAC,EAAE,WAAW,EAAE,EAAE;YAClD,UAAU,EAAE,CAAC,EAAE,eAAe,EAAE,CAAC,EAAE,KAAK,EAAE,CAAC,EAAE,MAAM,EAAE,KAAK;SAC7D,CAAC,CAAC;IACP,CAAC;IAEM,eAAe,CAAC,EAAuB;QAC1C,IAAI,CAAC,cAAc,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;IACjC,CAAC;IAEM,gBAAgB;QACnB,OAAO,IAAI,CAAC,cAAc,CAAC;IAC/B,CAAC;IAED;;;;;;OAMG;IACI,oBAAoB,CAAC,QAAiC;QACzD,MAAM,QAAQ,GAAG,QAAQ,CAAC,MAAM,CAAC,CAAC,EAAE,QAAQ,CAAC,MAAM,CAAC,CAAC;QACrD,IAAI,CAAC,cAAc,CAAC,IAAI,CAAC,GAAG,QAAQ,CAAC,CAAC;QACtC,OAAO,CAAC,GAAG,CAAC,cAAc,IAAI,CAAC,IAAI,cAAc,QAAQ,CAAC,MAAM,kBAAkB,CAAC,CAAC;IACxF,CAAC;IAEM,MAAM;QACT,IAAI,IAAI,CAAC,OAAO,CAAC,SAAS,EAAE,KAAK,IAAI;YAAE,OAAO;QAC9C,IAAI,CAAC,OAAO,CAAC,SAAS,CAAC,IAAI,CAAC,CAAC;QAC7B,OAAO,CAAC,GAAG,CAAC,cAAc,IAAI,CAAC,IAAI,WAAW,CAAC,CAAC;IACpD,CAAC;IAEM,OAAO;QACV,IAAI,IAAI,CAAC,IAAI,EAAE,CAAC;YACZ,MAAM,IAAI,KAAK,CAAC,yCAAyC,IAAI,CAAC,IAAI,GAAG,CAAC,CAAC;QAC3E,CAAC;QACD,IAAI,IAAI,CAAC,OAAO,CAAC,SAAS,EAAE,KAAK,KAAK;YAAE,OAAO;QAC/C,IAAI,CAAC,OAAO,CAAC,SAAS,CAAC,KAAK,CAAC,CAAC;QAC9B,OAAO,CAAC,GAAG,CAAC,cAAc,IAAI,CAAC,IAAI,YAAY,CAAC,CAAC;IACrD,CAAC;IAEM,QAAQ;QACX,OAAO,IAAI,CAAC,OAAO,CAAC,SAAS,EAAE,KAAK,IAAI,CAAC;IAC7C,CAAC;IAED,8EAA8E;IAC9E,IAAW,SAAS;QAChB,OAAO,IAAI,CAAC,QAAQ,EAAE,IAAI,CAAC,IAAI,CAAC,UAAU,CAAC,SAAS,EAAE,CAAC;IAC3D,CAAC;IAED;;;OAGG;IACI,KAAK,CAAC,QAAQ;QACjB,IAAI,IAAI,CAAC,UAAU,CAAC,SAAS,EAAE;YAAE,OAAO;QACxC,IAAI,IAAI,CAAC,SAAS,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;YAC9B,qDAAqD;YACrD,IAAI,CAAC,UAAU,CAAC,SAAS,CAAC,IAAI,CAAC,CAAC;YAChC,OAAO,CAAC,GAAG,CAAC,cAAc,IAAI,CAAC,IAAI,6BAA6B,CAAC,CAAC;YAClE,OAAO;QACX,CAAC;QAED,MAAM,UAAU,GAAG,CAAC,GAAW,EAAU,EAAE;YACvC,MAAM,OAAO,GAAG,GAAG,CAAC,IAAI,EAAE,CAAC;YAC3B,IAAI,2BAA2B,CAAC,IAAI,CAAC,OAAO,CAAC;gBAAE,OAAO,OAAO,CAAC;YAC9D,IAAI,OAAO,CAAC,UAAU,CAAC,IAAI,CAAC;gBAAE,OAAO,GAAG,MAAM,CAAC,QAAQ,CAAC,QAAQ,GAAG,OAAO,EAAE,CAAC;YAC7E,OAAO,IAAI,GAAG,CAAC,OAAO,EAAE,QAAQ,CAAC,OAAO,CAAC,CAAC,IAAI,CAAC;QACnD,CAAC,CAAC;QAEF,MAAM,UAAU,GAAG,IAAI,CAAC,SAAS,CAAC,MAAM,CAAC;QACzC,IAAI,eAAe,GAAG,CAAC,CAAC;QACxB,IAAI,eAAe,GAAG,CAAC,CAAC;QACxB,IAAI,UAAU,GAAG,CAAC,CAAC;QACnB,IAAI,QAAQ,GAAG,WAAW,CAAC,GAAG,EAAE,CAAC;QACjC,IAAI,SAAS,GAAG,CAAC,CAAC;QAClB,IAAI,KAAK,GAAG,CAAC,CAAC;QAEd,uDAAuD;QACvD,MAAM,YAAY,GAAG,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,KAAK,EAAE,GAAG,EAAE,EAAE;YAClD,IAAI,CAAC;gBACD,MAAM,QAAQ,GAAG,UAAU,CAAC,GAAG,CAAC,CAAC;gBACjC,MAAM,IAAI,GAAG,MAAM,KAAK,CAAC,QAAQ,EAAE,EAAE,MAAM,EAAE,MAAM,EAAE,CAAC,CAAC;gBACvD,MAAM,EAAE,GAAG,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,gBAAgB,CAAC,CAAC;gBAC9C,OAAO,EAAE,CAAC,CAAC,CAAC,QAAQ,CAAC,EAAE,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;YACrC,CAAC;YAAC,MAAM,CAAC;gBACL,OAAO,CAAC,CAAC;YACb,CAAC;QACL,CAAC,CAAC,CAAC;QAEH,MAAM,KAAK,GAAG,MAAM,OAAO,CAAC,GAAG,CAAC,YAAY,CAAC,CAAC;QAC9C,UAAU,GAAG,KAAK,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC,CAAC;QAC9C,IAAI,CAAC,SAAS,CAAC,SAAS,CAAC,UAAU,CAAC,CAAC;QAErC,IAAI,CAAC,gBAAgB,CAAC,SAAS,CAAC;YAC5B,UAAU,EAAE,eAAe,EAAE,CAAC,EAAE,WAAW,EAAE,EAAE;YAC/C,UAAU,EAAE,eAAe,EAAE,CAAC,EAAE,KAAK,EAAE,CAAC,EAAE,MAAM,EAAE,IAAI;SACzD,CAAC,CAAC;QAEH,OAAO,CAAC,GAAG,CAAC,mCAAmC,IAAI,CAAC,IAAI,MAAM,UAAU,YAAY,IAAI,CAAC,WAAW,CAAC,UAAU,CAAC,GAAG,CAAC,CAAC;QAErH,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,IAAI,CAAC,SAAS,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE,CAAC;YAC7C,MAAM,GAAG,GAAG,IAAI,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC;YAC9B,MAAM,QAAQ,GAAG,UAAU,CAAC,GAAG,CAAC,CAAC;YACjC,MAAM,QAAQ,GAAG,GAAG,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,GAAG,EAAE,IAAI,GAAG,CAAC;YAE7C,IAAI,CAAC,gBAAgB,CAAC,SAAS,CAAC;gBAC5B,UAAU,EAAE,eAAe,EAAE,WAAW,EAAE,QAAQ;gBAClD,UAAU,EAAE,eAAe,EAAE,KAAK,EAAE,MAAM,EAAE,IAAI;aACnD,CAAC,CAAC;YAEH,IAAI,CAAC;gBACD,MAAM,QAAQ,GAAG,MAAM,KAAK,CAAC,QAAQ,CAAC,CAAC;gBACvC,IAAI,CAAC,QAAQ,CAAC,EAAE,EAAE,CAAC;oBACf,OAAO,CAAC,IAAI,CAAC,gCAAgC,GAAG,KAAK,QAAQ,CAAC,MAAM,EAAE,CAAC,CAAC;oBACxE,eAAe,EAAE,CAAC;oBAClB,SAAS;gBACb,CAAC;gBAED,8BAA8B;gBAC9B,MAAM,MAAM,GAAG,QAAQ,CAAC,IAAI,EAAE,SAAS,EAAE,CAAC;gBAC1C,MAAM,MAAM,GAAe,EAAE,CAAC;gBAE9B,IAAI,MAAM,EAAE,CAAC;oBACT,OAAO,IAAI,EAAE,CAAC;wBACV,MAAM,EAAE,IAAI,EAAE,KAAK,EAAE,GAAG,MAAM,MAAM,CAAC,IAAI,EAAE,CAAC;wBAC5C,IAAI,IAAI;4BAAE,MAAM;wBAChB,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;wBACnB,eAAe,IAAI,KAAK,CAAC,UAAU,CAAC;wBAEpC,kBAAkB;wBAClB,MAAM,GAAG,GAAG,WAAW,CAAC,GAAG,EAAE,CAAC;wBAC9B,MAAM,OAAO,GAAG,CAAC,GAAG,GAAG,QAAQ,CAAC,GAAG,IAAI,CAAC;wBACxC,IAAI,OAAO,IAAI,GAAG,EAAE,CAAC;4BACjB,KAAK,GAAG,CAAC,eAAe,GAAG,SAAS,CAAC,GAAG,OAAO,CAAC;4BAChD,QAAQ,GAAG,GAAG,CAAC;4BACf,SAAS,GAAG,eAAe,CAAC;wBAChC,CAAC;wBAED,IAAI,CAAC,gBAAgB,CAAC,SAAS,CAAC;4BAC5B,UAAU,EAAE,eAAe,EAAE,WAAW,EAAE,QAAQ;4BAClD,UAAU,EAAE,eAAe,EAAE,KAAK,EAAE,MAAM,EAAE,IAAI;yBACnD,CAAC,CAAC;oBACP,CAAC;gBACL,CAAC;gBAED,qBAAqB;gBACrB,IAAI,QAAQ,IAAI,MAAM,EAAE,CAAC;oBACrB,IAAI,CAAC;wBACD,MAAM,KAAK,GAAG,MAAM,MAAM,CAAC,IAAI,CAAC,gBAAgB,CAAC,CAAC;wBAClD,MAAM,IAAI,GAAG,IAAI,IAAI,CAAC,MAAM,CAAC,CAAC;wBAC9B,MAAM,aAAa,GAAG,IAAI,QAAQ,CAAC,IAAI,EAAE;4BACrC,OAAO,EAAE,QAAQ,CAAC,OAAO;yBAC5B,CAAC,CAAC;wBACH,MAAM,KAAK,CAAC,GAAG,CAAC,QAAQ,EAAE,aAAa,CAAC,CAAC;oBAC7C,CAAC;oBAAC,OAAO,CAAC,EAAE,CAAC;wBACT,OAAO,CAAC,IAAI,CAAC,6BAA6B,GAAG,EAAE,EAAE,CAAC,CAAC,CAAC;oBACxD,CAAC;gBACL,CAAC;gBAED,eAAe,EAAE,CAAC;YACtB,CAAC;YAAC,OAAO,CAAC,EAAE,CAAC;gBACT,OAAO,CAAC,IAAI,CAAC,+BAA+B,GAAG,EAAE,EAAE,CAAC,CAAC,CAAC;gBACtD,eAAe,EAAE,CAAC;YACtB,CAAC;QACL,CAAC;QAED,IAAI,CAAC,gBAAgB,CAAC,SAAS,CAAC;YAC5B,UAAU,EAAE,eAAe,EAAE,WAAW,EAAE,EAAE;YAC5C,UAAU,EAAE,eAAe,EAAE,KAAK,EAAE,CAAC,EAAE,MAAM,EAAE,KAAK;SACvD,CAAC,CAAC;QAEH,IAAI,CAAC,UAAU,CAAC,SAAS,CAAC,IAAI,CAAC,CAAC;QAChC,OAAO,CAAC,GAAG,CAAC,cAAc,IAAI,CAAC,IAAI,iBAAiB,eAAe,IAAI,UAAU,WAAW,IAAI,CAAC,WAAW,CAAC,eAAe,CAAC,GAAG,CAAC,CAAC;IACtI,CAAC;IAEM,WAAW,CAAC,KAAa;QAC5B,IAAI,KAAK,KAAK,CAAC;YAAE,OAAO,KAAK,CAAC;QAC9B,MAAM,CAAC,GAAG,IAAI,CAAC;QACf,MAAM,KAAK,GAAG,CAAC,GAAG,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,CAAC,CAAC;QACtC,MAAM,CAAC,GAAG,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,GAAG,CAAC,KAAK,CAAC,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC;QACpD,OAAO,UAAU,CAAC,CAAC,KAAK,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,GAAG,GAAG,GAAG,KAAK,CAAC,CAAC,CAAC,CAAC;IAC5E,CAAC;IAEM,KAAK,CAAC,UAAU;QACnB,IAAI,IAAI,CAAC,IAAI,EAAE,CAAC;YACZ,MAAM,IAAI,KAAK,CAAC,wCAAwC,IAAI,CAAC,IAAI,kBAAkB,CAAC,CAAC;QACzF,CAAC;QAED,0BAA0B;QAC1B,IAAI,QAAQ,IAAI,MAAM,IAAI,IAAI,CAAC,SAAS,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;YAClD,IAAI,CAAC;gBACD,MAAM,KAAK,GAAG,MAAM,MAAM,CAAC,IAAI,CAAC,gBAAgB,CAAC,CAAC;gBAClD,MAAM,UAAU,GAAG,CAAC,GAAW,EAAU,EAAE;oBACvC,MAAM,OAAO,GAAG,GAAG,CAAC,IAAI,EAAE,CAAC;oBAC3B,IAAI,2BAA2B,CAAC,IAAI,CAAC,OAAO,CAAC;wBAAE,OAAO,OAAO,CAAC;oBAC9D,IAAI,OAAO,CAAC,UAAU,CAAC,IAAI,CAAC;wBAAE,OAAO,GAAG,MAAM,CAAC,QAAQ,CAAC,QAAQ,GAAG,OAAO,EAAE,CAAC;oBAC7E,OAAO,IAAI,GAAG,CAAC,OAAO,EAAE,QAAQ,CAAC,OAAO,CAAC,CAAC,IAAI,CAAC;gBACnD,CAAC,CAAC;gBACF,KAAK,MAAM,GAAG,IAAI,IAAI,CAAC,SAAS,EAAE,CAAC;oBAC/B,MAAM,KAAK,CAAC,MAAM,CAAC,UAAU,CAAC,GAAG,CAAC,CAAC,CAAC;gBACxC,CAAC;gBACD,OAAO,CAAC,GAAG,CAAC,gCAAgC,IAAI,CAAC,IAAI,GAAG,CAAC,CAAC;YAC9D,CAAC;YAAC,OAAO,CAAC,EAAE,CAAC;gBACT,OAAO,CAAC,IAAI,CAAC,wCAAwC,IAAI,CAAC,IAAI,GAAG,EAAE,CAAC,CAAC,CAAC;YAC1E,CAAC;QACL,CAAC;QAED,IAAI,CAAC,UAAU,CAAC,SAAS,CAAC,KAAK,CAAC,CAAC;QACjC,IAAI,CAAC,SAAS,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC;QAC5B,OAAO,CAAC,GAAG,CAAC,cAAc,IAAI,CAAC,IAAI,0BAA0B,CAAC,CAAC;IACnE,CAAC;CACJ;AAED,MAAM,OAAO,aAAa;IACd,MAAM,CAAC,QAAQ,GAAwB,IAAI,GAAG,EAAE,CAAC;IACjD,MAAM,CAAU,WAAW,GAAG,gBAAgB,CAAC;IAC/C,MAAM,CAAU,WAAW,GAAG,wBAAwB,CAAC;IAE/D,MAAM,CAAC,QAAQ,CAAC,MAAoB;QAChC,IAAI,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,MAAM,CAAC,IAAI,CAAC,EAAE,CAAC;YACjC,MAAM,IAAI,KAAK,CAAC,qBAAqB,MAAM,CAAC,IAAI,yBAAyB,CAAC,CAAC;QAC/E,CAAC;QACD,MAAM,GAAG,GAAG,IAAI,MAAM,CAAC,MAAM,CAAC,CAAC;QAC/B,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,MAAM,CAAC,IAAI,EAAE,GAAG,CAAC,CAAC;QACpC,OAAO,CAAC,GAAG,CAAC,gCAAgC,MAAM,CAAC,IAAI,GAAG,CAAC,CAAC;QAC5D,OAAO,GAAG,CAAC;IACf,CAAC;IAED,MAAM,CAAC,GAAG,CAAC,IAAY;QACnB,OAAO,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC;IACnC,CAAC;IAED,MAAM,CAAC,MAAM;QACT,OAAO,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,QAAQ,CAAC,MAAM,EAAE,CAAC,CAAC;IAC9C,CAAC;IAED,MAAM,CAAC,QAAQ,CAAC,IAAY;QACxB,MAAM,GAAG,GAAG,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC;QACpC,OAAO,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,QAAQ,EAAE,CAAC,CAAC,CAAC,KAAK,CAAC;IACxC,CAAC;IAED;;;;;;OAMG;IACH,MAAM,CAAC,UAAU;QACb,IAAI,CAAC,YAAY,EAAE,CAAC;QAEpB,MAAM,QAAQ,GAAoB,EAAE,CAAC;QAErC,KAAK,MAAM,GAAG,IAAI,IAAI,CAAC,QAAQ,CAAC,MAAM,EAAE,EAAE,CAAC;YACvC,IAAI,GAAG,CAAC,QAAQ,EAAE,EAAE,CAAC;gBACjB,OAAO,CAAC,GAAG,CAAC,kCAAkC,GAAG,CAAC,IAAI,MAAM,GAAG,CAAC,gBAAgB,EAAE,CAAC,MAAM,mBAAmB,CAAC,CAAC;gBAC9G,KAAK,MAAM,GAAG,IAAI,GAAG,CAAC,gBAAgB,EAAE,EAAE,CAAC;oBACvC,QAAQ,CAAC,IAAI,CAAC,GAAG,EAAE,CAAC,CAAC;gBACzB,CAAC;YACL,CAAC;iBAAM,CAAC;gBACJ,OAAO,CAAC,GAAG,CAAC,uCAAuC,GAAG,CAAC,IAAI,GAAG,CAAC,CAAC;YACpE,CAAC;QACL,CAAC;QAED,6DAA6D;QAC7D,uCAAuC;QACvC,IAAI,QAAQ,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;YACtB,OAAO,CAAC,GAAG,CAAC,qBAAqB,QAAQ,CAAC,MAAM,oCAAoC,CAAC,CAAC;YACtF,KAAK,MAAM,GAAG,IAAI,QAAQ,EAAE,CAAC;gBACzB,QAAQ,CAAC,IAAI,CAAC,GAAG,EAAE,CAAC,CAAC;YACzB,CAAC;QACL,CAAC;QAED,OAAO,QAAQ,CAAC;IACpB,CAAC;IAED,MAAM,CAAC,YAAY;QACf,MAAM,UAAU,GAA8D,EAAE,CAAC;QACjF,MAAM,YAAY,GAAyC,EAAE,CAAC;QAE9D,KAAK,MAAM,GAAG,IAAI,IAAI,CAAC,QAAQ,CAAC,MAAM,EAAE,EAAE,CAAC;YACvC,IAAI,GAAG,CAAC,IAAI;gBAAE,SAAS;YAEvB,IAAI,GAAG,CAAC,UAAU,CAAC,SAAS,EAAE,EAAE,CAAC;gBAC7B,UAAU,CAAC,GAAG,CAAC,IAAI,CAAC,GAAG,EAAE,OAAO,EAAE,GAAG,CAAC,QAAQ,EAAE,EAAE,UAAU,EAAE,IAAI,EAAE,CAAC;YACzE,CAAC;iBAAM,IAAI,GAAG,CAAC,QAAQ,EAAE,EAAE,CAAC;gBACxB,YAAY,CAAC,GAAG,CAAC,IAAI,CAAC,GAAG,EAAE,OAAO,EAAE,IAAI,EAAE,CAAC;YAC/C,CAAC;QACL,CAAC;QAED,IAAI,CAAC;YACD,YAAY,CAAC,OAAO,CAAC,IAAI,CAAC,WAAW,EAAE,IAAI,CAAC,SAAS,CAAC,UAAU,CAAC,CAAC,CAAC;YACnE,cAAc,CAAC,OAAO,CAAC,IAAI,CAAC,WAAW,EAAE,IAAI,CAAC,SAAS,CAAC,YAAY,CAAC,CAAC,CAAC;YACvE,OAAO,CAAC,GAAG,CAAC,kCAAkC,CAAC,CAAC;QACpD,CAAC;QAAC,OAAO,CAAC,EAAE,CAAC;YACT,OAAO,CAAC,IAAI,CAAC,0CAA0C,EAAE,CAAC,CAAC,CAAC;QAChE,CAAC;IACL,CAAC;IAED,MAAM,CAAC,YAAY;QACf,iDAAiD;QACjD,IAAI,CAAC;YACD,MAAM,GAAG,GAAG,YAAY,CAAC,OAAO,CAAC,IAAI,CAAC,WAAW,CAAC,CAAC;YACnD,IAAI,GAAG,EAAE,CAAC;gBACN,MAAM,KAAK,GAAwE,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC;gBACnG,KAAK,MAAM,CAAC,IAAI,EAAE,IAAI,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,KAAK,CAAC,EAAE,CAAC;oBAC/C,MAAM,GAAG,GAAG,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC;oBACpC,IAAI,GAAG,IAAI,CAAC,GAAG,CAAC,IAAI,EAAE,CAAC;wBACnB,IAAI,OAAO,IAAI,KAAK,SAAS,EAAE,CAAC;4BAC5B,wDAAwD;4BACxD,GAAG,CAAC,OAAO,CAAC,SAAS,CAAC,IAAI,CAAC,CAAC;4BAC5B,OAAO,CAAC,GAAG,CAAC,kCAAkC,IAAI,eAAe,IAAI,EAAE,CAAC,CAAC;4BACzE,SAAS;wBACb,CAAC;wBACD,IAAI,IAAI,CAAC,UAAU,EAAE,CAAC;4BAClB,GAAG,CAAC,UAAU,CAAC,SAAS,CAAC,IAAI,CAAC,CAAC;wBACnC,CAAC;wBACD,GAAG,CAAC,OAAO,CAAC,SAAS,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;wBACpC,OAAO,CAAC,GAAG,CAAC,uBAAuB,IAAI,kBAAkB,IAAI,CAAC,UAAU,aAAa,IAAI,CAAC,OAAO,EAAE,CAAC,CAAC;oBACzG,CAAC;gBACL,CAAC;YACL,CAAC;QACL,CAAC;QAAC,OAAO,CAAC,EAAE,CAAC;YACT,OAAO,CAAC,IAAI,CAAC,gDAAgD,EAAE,CAAC,CAAC,CAAC;QACtE,CAAC;QAED,kDAAkD;QAClD,IAAI,CAAC;YACD,MAAM,GAAG,GAAG,cAAc,CAAC,OAAO,CAAC,IAAI,CAAC,WAAW,CAAC,CAAC;YACrD,IAAI,GAAG,EAAE,CAAC;gBACN,MAAM,KAAK,GAAyC,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC;gBACpE,KAAK,MAAM,CAAC,IAAI,EAAE,IAAI,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,KAAK,CAAC,EAAE,CAAC;oBAC/C,MAAM,GAAG,GAAG,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC;oBACpC,IAAI,GAAG,IAAI,CAAC,GAAG,CAAC,IAAI,IAAI,CAAC,GAAG,CAAC,UAAU,CAAC,SAAS,EAAE,EAAE,CAAC;wBAClD,GAAG,CAAC,OAAO,CAAC,SAAS,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;wBACpC,OAAO,CAAC,GAAG,CAAC,iCAAiC,IAAI,eAAe,IAAI,CAAC,OAAO,EAAE,CAAC,CAAC;oBACpF,CAAC;gBACL,CAAC;YACL,CAAC;QACL,CAAC;QAAC,OAAO,CAAC,EAAE,CAAC;YACT,OAAO,CAAC,IAAI,CAAC,kDAAkD,EAAE,CAAC,CAAC,CAAC;QACxE,CAAC;IACL,CAAC"}
package/out/index.d.ts CHANGED
@@ -10,7 +10,7 @@ export { default as Attribute } from './foundation/component_api/Attribute.js';
10
10
  export { default as Triplet, TripletStruct, AccessType, REGISTRY } from './foundation/Triplet.js';
11
11
  export { ReComponent, RePage, ReImplementation } from './foundation/TripletDecorator.js';
12
12
  export { Implementation, ImplementationStruct, Placeholder } from './foundation/Injection.js';
13
- export { default as Module, ModuleStruct, ModuleManager } from './foundation/Module.js';
13
+ export { default as Module, ModuleStruct, ModuleManager, ModuleDownloadProgress } from './foundation/Module.js';
14
14
  export { default as Fetcher } from './foundation/Fetcher.js';
15
15
  export * from './foundation/engine/TemplateEngine.js';
16
16
  export { Router } from './foundation/worker/Router.js';
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,OAAO,IAAI,cAAc,EAAE,MAAM,mCAAmC,CAAC;AAC9E,OAAO,EAAE,OAAO,IAAI,gBAAgB,EAAE,MAAM,sCAAsC,CAAC;AACnF,OAAO,EAAE,OAAO,IAAI,IAAI,EAAE,MAAM,0BAA0B,CAAC;AAE3D,cAAc,2CAA2C,CAAC;AAC1D,OAAO,EACN,OAAO,IAAI,UAAU,EACrB,SAAS,EAAE,iBAAiB,EAAE,oBAAoB,EAAE,QAAQ,EAAE,gBAAgB,EAAE,WAAW,EAC3F,YAAY,EACZ,MAAM,8BAA8B,CAAA;AAErC,OAAO,EAAE,OAAO,IAAI,OAAO,EAAE,MAAM,uCAAuC,CAAC;AAC3E,OAAO,EAAE,OAAO,IAAI,IAAI,EAAE,MAAM,oCAAoC,CAAC;AACrE,OAAO,EAAE,OAAO,IAAI,SAAS,EAAE,MAAM,yCAAyC,CAAC;AAC/E,OAAO,EAAE,OAAO,IAAI,SAAS,EAAE,MAAM,yCAAyC,CAAC;AAE/E,OAAO,EAAE,OAAO,IAAI,OAAO,EAAE,aAAa,EAAE,UAAU,EAAE,QAAQ,EAAE,MAAM,yBAAyB,CAAC;AAClG,OAAO,EAAE,WAAW,EAAE,MAAM,EAAE,gBAAgB,EAAE,MAAM,kCAAkC,CAAC;AAEzF,OAAO,EAAE,cAAc,EAAE,oBAAoB,EAAE,WAAW,EAAE,MAAM,2BAA2B,CAAC;AAC9F,OAAO,EAAE,OAAO,IAAI,MAAM,EAAE,YAAY,EAAE,aAAa,EAAE,MAAM,wBAAwB,CAAC;AACxF,OAAO,EAAE,OAAO,IAAI,OAAO,EAAE,MAAM,yBAAyB,CAAC;AAE7D,cAAc,uCAAuC,CAAC;AAEtD,OAAO,EAAE,MAAM,EAAE,MAAM,+BAA+B,CAAC;AACvD,OAAO,EAAE,OAAO,IAAI,aAAa,EAAE,mBAAmB,EAAE,iBAAiB,EAAE,cAAc,EAAE,aAAa,EAAE,YAAY,EAAE,MAAM,sCAAsC,CAAC;AAErK,cAAc,yBAAyB,CAAC;AACxC,cAAc,uBAAuB,CAAC"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,OAAO,IAAI,cAAc,EAAE,MAAM,mCAAmC,CAAC;AAC9E,OAAO,EAAE,OAAO,IAAI,gBAAgB,EAAE,MAAM,sCAAsC,CAAC;AACnF,OAAO,EAAE,OAAO,IAAI,IAAI,EAAE,MAAM,0BAA0B,CAAC;AAE3D,cAAc,2CAA2C,CAAC;AAC1D,OAAO,EACN,OAAO,IAAI,UAAU,EACrB,SAAS,EAAE,iBAAiB,EAAE,oBAAoB,EAAE,QAAQ,EAAE,gBAAgB,EAAE,WAAW,EAC3F,YAAY,EACZ,MAAM,8BAA8B,CAAA;AAErC,OAAO,EAAE,OAAO,IAAI,OAAO,EAAE,MAAM,uCAAuC,CAAC;AAC3E,OAAO,EAAE,OAAO,IAAI,IAAI,EAAE,MAAM,oCAAoC,CAAC;AACrE,OAAO,EAAE,OAAO,IAAI,SAAS,EAAE,MAAM,yCAAyC,CAAC;AAC/E,OAAO,EAAE,OAAO,IAAI,SAAS,EAAE,MAAM,yCAAyC,CAAC;AAE/E,OAAO,EAAE,OAAO,IAAI,OAAO,EAAE,aAAa,EAAE,UAAU,EAAE,QAAQ,EAAE,MAAM,yBAAyB,CAAC;AAClG,OAAO,EAAE,WAAW,EAAE,MAAM,EAAE,gBAAgB,EAAE,MAAM,kCAAkC,CAAC;AAEzF,OAAO,EAAE,cAAc,EAAE,oBAAoB,EAAE,WAAW,EAAE,MAAM,2BAA2B,CAAC;AAC9F,OAAO,EAAE,OAAO,IAAI,MAAM,EAAE,YAAY,EAAE,aAAa,EAAE,sBAAsB,EAAE,MAAM,wBAAwB,CAAC;AAChH,OAAO,EAAE,OAAO,IAAI,OAAO,EAAE,MAAM,yBAAyB,CAAC;AAE7D,cAAc,uCAAuC,CAAC;AAEtD,OAAO,EAAE,MAAM,EAAE,MAAM,+BAA+B,CAAC;AACvD,OAAO,EAAE,OAAO,IAAI,aAAa,EAAE,mBAAmB,EAAE,iBAAiB,EAAE,cAAc,EAAE,aAAa,EAAE,YAAY,EAAE,MAAM,sCAAsC,CAAC;AAErK,cAAc,yBAAyB,CAAC;AACxC,cAAc,uBAAuB,CAAC"}
package/out/index.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAGA,OAAO,EAAE,OAAO,IAAI,IAAI,EAAE,MAAM,0BAA0B,CAAC;AAE3D,cAAc,2CAA2C,CAAC;AAC1D,OAAO,EACN,OAAO,IAAI,UAAU,EAC+B,QAAQ,EAAE,gBAAgB,EAAE,WAAW,EAC3F,YAAY,EACZ,MAAM,8BAA8B,CAAA;AAErC,OAAO,EAAE,OAAO,IAAI,OAAO,EAAE,MAAM,uCAAuC,CAAC;AAC3E,OAAO,EAAE,OAAO,IAAI,IAAI,EAAE,MAAM,oCAAoC,CAAC;AACrE,OAAO,EAAE,OAAO,IAAI,SAAS,EAAE,MAAM,yCAAyC,CAAC;AAC/E,OAAO,EAAE,OAAO,IAAI,SAAS,EAAE,MAAM,yCAAyC,CAAC;AAE/E,OAAO,EAAE,OAAO,IAAI,OAAO,EAAiB,UAAU,EAAE,QAAQ,EAAE,MAAM,yBAAyB,CAAC;AAClG,OAAO,EAAE,WAAW,EAAE,MAAM,EAAE,gBAAgB,EAAE,MAAM,kCAAkC,CAAC;AAEzF,OAAO,EAAE,cAAc,EAAwB,WAAW,EAAE,MAAM,2BAA2B,CAAC;AAC9F,OAAO,EAAE,OAAO,IAAI,MAAM,EAAgB,aAAa,EAAE,MAAM,wBAAwB,CAAC;AACxF,OAAO,EAAE,OAAO,IAAI,OAAO,EAAE,MAAM,yBAAyB,CAAC;AAE7D,cAAc,uCAAuC,CAAC;AAEtD,OAAO,EAAE,MAAM,EAAE,MAAM,+BAA+B,CAAC;AACvD,OAAO,EAAE,OAAO,IAAI,aAAa,EAAuF,MAAM,sCAAsC,CAAC;AAErK,cAAc,yBAAyB,CAAC;AACxC,cAAc,uBAAuB,CAAC;AAGtC,qEAAqE;AACrE;;WAEQ;AAER,yEAAyE"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAGA,OAAO,EAAE,OAAO,IAAI,IAAI,EAAE,MAAM,0BAA0B,CAAC;AAE3D,cAAc,2CAA2C,CAAC;AAC1D,OAAO,EACN,OAAO,IAAI,UAAU,EAC+B,QAAQ,EAAE,gBAAgB,EAAE,WAAW,EAC3F,YAAY,EACZ,MAAM,8BAA8B,CAAA;AAErC,OAAO,EAAE,OAAO,IAAI,OAAO,EAAE,MAAM,uCAAuC,CAAC;AAC3E,OAAO,EAAE,OAAO,IAAI,IAAI,EAAE,MAAM,oCAAoC,CAAC;AACrE,OAAO,EAAE,OAAO,IAAI,SAAS,EAAE,MAAM,yCAAyC,CAAC;AAC/E,OAAO,EAAE,OAAO,IAAI,SAAS,EAAE,MAAM,yCAAyC,CAAC;AAE/E,OAAO,EAAE,OAAO,IAAI,OAAO,EAAiB,UAAU,EAAE,QAAQ,EAAE,MAAM,yBAAyB,CAAC;AAClG,OAAO,EAAE,WAAW,EAAE,MAAM,EAAE,gBAAgB,EAAE,MAAM,kCAAkC,CAAC;AAEzF,OAAO,EAAE,cAAc,EAAwB,WAAW,EAAE,MAAM,2BAA2B,CAAC;AAC9F,OAAO,EAAE,OAAO,IAAI,MAAM,EAAgB,aAAa,EAA0B,MAAM,wBAAwB,CAAC;AAChH,OAAO,EAAE,OAAO,IAAI,OAAO,EAAE,MAAM,yBAAyB,CAAC;AAE7D,cAAc,uCAAuC,CAAC;AAEtD,OAAO,EAAE,MAAM,EAAE,MAAM,+BAA+B,CAAC;AACvD,OAAO,EAAE,OAAO,IAAI,aAAa,EAAuF,MAAM,sCAAsC,CAAC;AAErK,cAAc,yBAAyB,CAAC;AACxC,cAAc,uBAAuB,CAAC;AAGtC,qEAAqE;AACrE;;WAEQ;AAER,yEAAyE"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@reidelsaltres/pureper",
3
- "version": "0.2.32",
3
+ "version": "0.2.33",
4
4
  "description": "Minimal library extracted from the Pureper SPA foundation — utilities and base classes for components/pages.",
5
5
  "type": "module",
6
6
  "main": "out/src/index.js",
@@ -7,6 +7,24 @@ export type ModuleStruct = {
7
7
  icon?: string;
8
8
  core?: boolean;
9
9
  enabled?: boolean;
10
+ resources?: string[];
11
+ };
12
+
13
+ export type ModuleDownloadProgress = {
14
+ /** Total number of resources */
15
+ totalFiles: number;
16
+ /** Number of resources downloaded so far */
17
+ downloadedFiles: number;
18
+ /** Current file being downloaded */
19
+ currentFile: string;
20
+ /** Total bytes across all resources (estimated) */
21
+ totalBytes: number;
22
+ /** Bytes downloaded so far */
23
+ downloadedBytes: number;
24
+ /** Download speed in bytes/sec */
25
+ speed: number;
26
+ /** Whether download is in progress */
27
+ active: boolean;
10
28
  };
11
29
 
12
30
  export default class Module {
@@ -16,6 +34,9 @@ export default class Module {
16
34
  public readonly core: boolean;
17
35
  public readonly enabled: Observable<boolean>;
18
36
  public readonly downloaded: Observable<boolean>;
37
+ public readonly resources: string[];
38
+ public readonly totalSize: Observable<number>;
39
+ public readonly downloadProgress: Observable<ModuleDownloadProgress>;
19
40
 
20
41
  private _registrations: (() => Promise<void>)[] = [];
21
42
 
@@ -26,6 +47,12 @@ export default class Module {
26
47
  this.core = struct.core ?? false;
27
48
  this.enabled = new Observable<boolean>(this.core ? true : (struct.enabled ?? false));
28
49
  this.downloaded = new Observable<boolean>(this.core ? true : false);
50
+ this.resources = struct.resources ?? [];
51
+ this.totalSize = new Observable<number>(0);
52
+ this.downloadProgress = new Observable<ModuleDownloadProgress>({
53
+ totalFiles: 0, downloadedFiles: 0, currentFile: '',
54
+ totalBytes: 0, downloadedBytes: 0, speed: 0, active: false
55
+ });
29
56
  }
30
57
 
31
58
  public addRegistration(fn: () => Promise<void>): void {
@@ -73,16 +100,166 @@ export default class Module {
73
100
  return this.isActive() && !this.downloaded.getObject();
74
101
  }
75
102
 
76
- public download(): void {
103
+ /**
104
+ * Download all module resources with progress tracking.
105
+ * Uses fetch to download each resource and tracks progress.
106
+ */
107
+ public async download(): Promise<void> {
108
+ if (this.downloaded.getObject()) return;
109
+ if (this.resources.length === 0) {
110
+ // No resources to download — just mark as downloaded
111
+ this.downloaded.setObject(true);
112
+ console.log(`[Module]: "${this.name}" downloaded (no resources)`);
113
+ return;
114
+ }
115
+
116
+ const resolveUrl = (url: string): string => {
117
+ const trimmed = url.trim();
118
+ if (/^[a-zA-Z][a-zA-Z0-9+.-]*:/.test(trimmed)) return trimmed;
119
+ if (trimmed.startsWith("//")) return `${window.location.protocol}${trimmed}`;
120
+ return new URL(trimmed, document.baseURI).href;
121
+ };
122
+
123
+ const totalFiles = this.resources.length;
124
+ let downloadedFiles = 0;
125
+ let downloadedBytes = 0;
126
+ let totalBytes = 0;
127
+ let lastTime = performance.now();
128
+ let lastBytes = 0;
129
+ let speed = 0;
130
+
131
+ // First, try to estimate total size with HEAD requests
132
+ const headPromises = this.resources.map(async (url) => {
133
+ try {
134
+ const resolved = resolveUrl(url);
135
+ const resp = await fetch(resolved, { method: 'HEAD' });
136
+ const cl = resp.headers.get('content-length');
137
+ return cl ? parseInt(cl, 10) : 0;
138
+ } catch {
139
+ return 0;
140
+ }
141
+ });
142
+
143
+ const sizes = await Promise.all(headPromises);
144
+ totalBytes = sizes.reduce((a, b) => a + b, 0);
145
+ this.totalSize.setObject(totalBytes);
146
+
147
+ this.downloadProgress.setObject({
148
+ totalFiles, downloadedFiles: 0, currentFile: '',
149
+ totalBytes, downloadedBytes: 0, speed: 0, active: true
150
+ });
151
+
152
+ console.log(`[Module]: Starting download of "${this.name}" (${totalFiles} files, ~${this.formatBytes(totalBytes)})`);
153
+
154
+ for (let i = 0; i < this.resources.length; i++) {
155
+ const url = this.resources[i];
156
+ const resolved = resolveUrl(url);
157
+ const fileName = url.split('/').pop() || url;
158
+
159
+ this.downloadProgress.setObject({
160
+ totalFiles, downloadedFiles, currentFile: fileName,
161
+ totalBytes, downloadedBytes, speed, active: true
162
+ });
163
+
164
+ try {
165
+ const response = await fetch(resolved);
166
+ if (!response.ok) {
167
+ console.warn(`[Module]: Failed to download ${url}: ${response.status}`);
168
+ downloadedFiles++;
169
+ continue;
170
+ }
171
+
172
+ // Read with progress tracking
173
+ const reader = response.body?.getReader();
174
+ const chunks: BlobPart[] = [];
175
+
176
+ if (reader) {
177
+ while (true) {
178
+ const { done, value } = await reader.read();
179
+ if (done) break;
180
+ chunks.push(value);
181
+ downloadedBytes += value.byteLength;
182
+
183
+ // Calculate speed
184
+ const now = performance.now();
185
+ const elapsed = (now - lastTime) / 1000;
186
+ if (elapsed >= 0.5) {
187
+ speed = (downloadedBytes - lastBytes) / elapsed;
188
+ lastTime = now;
189
+ lastBytes = downloadedBytes;
190
+ }
191
+
192
+ this.downloadProgress.setObject({
193
+ totalFiles, downloadedFiles, currentFile: fileName,
194
+ totalBytes, downloadedBytes, speed, active: true
195
+ });
196
+ }
197
+ }
198
+
199
+ // Cache the resource
200
+ if ('caches' in window) {
201
+ try {
202
+ const cache = await caches.open('purper-modules');
203
+ const blob = new Blob(chunks);
204
+ const cacheResponse = new Response(blob, {
205
+ headers: response.headers
206
+ });
207
+ await cache.put(resolved, cacheResponse);
208
+ } catch (e) {
209
+ console.warn(`[Module]: Failed to cache ${url}`, e);
210
+ }
211
+ }
212
+
213
+ downloadedFiles++;
214
+ } catch (e) {
215
+ console.warn(`[Module]: Error downloading ${url}`, e);
216
+ downloadedFiles++;
217
+ }
218
+ }
219
+
220
+ this.downloadProgress.setObject({
221
+ totalFiles, downloadedFiles, currentFile: '',
222
+ totalBytes, downloadedBytes, speed: 0, active: false
223
+ });
224
+
77
225
  this.downloaded.setObject(true);
78
- console.log(`[Module]: "${this.name}" downloaded`);
226
+ console.log(`[Module]: "${this.name}" downloaded (${downloadedFiles}/${totalFiles} files, ${this.formatBytes(downloadedBytes)})`);
79
227
  }
80
228
 
81
- public undownload(): void {
229
+ public formatBytes(bytes: number): string {
230
+ if (bytes === 0) return '0 B';
231
+ const k = 1024;
232
+ const sizes = ['B', 'KB', 'MB', 'GB'];
233
+ const i = Math.floor(Math.log(bytes) / Math.log(k));
234
+ return parseFloat((bytes / Math.pow(k, i)).toFixed(1)) + ' ' + sizes[i];
235
+ }
236
+
237
+ public async undownload(): Promise<void> {
82
238
  if (this.core) {
83
239
  throw new Error(`[Module]: Cannot remove core module "${this.name}" from downloads`);
84
240
  }
241
+
242
+ // Remove cached resources
243
+ if ('caches' in window && this.resources.length > 0) {
244
+ try {
245
+ const cache = await caches.open('purper-modules');
246
+ const resolveUrl = (url: string): string => {
247
+ const trimmed = url.trim();
248
+ if (/^[a-zA-Z][a-zA-Z0-9+.-]*:/.test(trimmed)) return trimmed;
249
+ if (trimmed.startsWith("//")) return `${window.location.protocol}${trimmed}`;
250
+ return new URL(trimmed, document.baseURI).href;
251
+ };
252
+ for (const url of this.resources) {
253
+ await cache.delete(resolveUrl(url));
254
+ }
255
+ console.log(`[Module]: Cleared cache for "${this.name}"`);
256
+ } catch (e) {
257
+ console.warn(`[Module]: Failed to clear cache for "${this.name}"`, e);
258
+ }
259
+ }
260
+
85
261
  this.downloaded.setObject(false);
262
+ this.totalSize.setObject(0);
86
263
  console.log(`[Module]: "${this.name}" removed from downloads`);
87
264
  }
88
265
  }
package/src/index.ts CHANGED
@@ -19,7 +19,7 @@ export { default as Triplet, TripletStruct, AccessType, REGISTRY } from './found
19
19
  export { ReComponent, RePage, ReImplementation } from './foundation/TripletDecorator.js';
20
20
 
21
21
  export { Implementation, ImplementationStruct, Placeholder } from './foundation/Injection.js';
22
- export { default as Module, ModuleStruct, ModuleManager } from './foundation/Module.js';
22
+ export { default as Module, ModuleStruct, ModuleManager, ModuleDownloadProgress } from './foundation/Module.js';
23
23
  export { default as Fetcher } from './foundation/Fetcher.js';
24
24
 
25
25
  export * from './foundation/engine/TemplateEngine.js';