@ng-util/lazy 19.0.0 → 20.0.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +2 -1
- package/fesm2022/ng-util-lazy.mjs +15 -17
- package/fesm2022/ng-util-lazy.mjs.map +1 -1
- package/index.d.ts +52 -5
- package/package.json +1 -1
- package/lazy.service.d.ts +0 -48
- package/public-api.d.ts +0 -1
package/README.md
CHANGED
|
@@ -25,9 +25,10 @@ import { NuLazyService } from '@ng-util/lazy';
|
|
|
25
25
|
template: ` <button *ngIf="loaded" type="button" class="btn btn-primary">Primary</button>`,
|
|
26
26
|
})
|
|
27
27
|
export class DemoComponent {
|
|
28
|
+
private srv = inject(NuLazyService);
|
|
28
29
|
loaded = false;
|
|
29
30
|
|
|
30
|
-
constructor(
|
|
31
|
+
constructor() {
|
|
31
32
|
this.load();
|
|
32
33
|
}
|
|
33
34
|
|
|
@@ -5,12 +5,10 @@ import { BehaviorSubject, pipe } from 'rxjs';
|
|
|
5
5
|
import { share, filter } from 'rxjs/operators';
|
|
6
6
|
|
|
7
7
|
class NuLazyService {
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
this._notify = new BehaviorSubject([]);
|
|
13
|
-
}
|
|
8
|
+
doc = inject(DOCUMENT);
|
|
9
|
+
list = {};
|
|
10
|
+
cached = {};
|
|
11
|
+
_notify = new BehaviorSubject([]);
|
|
14
12
|
fixPaths(paths) {
|
|
15
13
|
paths = paths || [];
|
|
16
14
|
if (!Array.isArray(paths)) {
|
|
@@ -33,7 +31,7 @@ class NuLazyService {
|
|
|
33
31
|
const libs = this.fixPaths(paths);
|
|
34
32
|
const pipes = [share(), filter((ls) => ls.length !== 0)];
|
|
35
33
|
if (libs.length > 0) {
|
|
36
|
-
pipes.push(filter((ls) => ls.length === libs.length && ls.every(
|
|
34
|
+
pipes.push(filter((ls) => ls.length === libs.length && ls.every(v => v.status === 'ok' && libs.find(lw => lw.path === v.path))));
|
|
37
35
|
}
|
|
38
36
|
return this._notify.asObservable().pipe(pipe.apply(this, pipes));
|
|
39
37
|
}
|
|
@@ -49,14 +47,14 @@ class NuLazyService {
|
|
|
49
47
|
*/
|
|
50
48
|
async load(paths) {
|
|
51
49
|
paths = this.fixPaths(paths);
|
|
52
|
-
return Promise.all(paths.map(
|
|
50
|
+
return Promise.all(paths.map(p => p.type === 'script' ? this.loadScript(p.path, { callback: p.callback }) : this.loadStyle(p.path))).then(res => {
|
|
53
51
|
this._notify.next(res);
|
|
54
52
|
return Promise.resolve(res);
|
|
55
53
|
});
|
|
56
54
|
}
|
|
57
55
|
loadScript(path, options) {
|
|
58
56
|
const { innerContent } = { ...options };
|
|
59
|
-
return new Promise(
|
|
57
|
+
return new Promise(resolve => {
|
|
60
58
|
if (this.list[path] === true) {
|
|
61
59
|
resolve({ ...this.cached[path], status: 'loading' });
|
|
62
60
|
return;
|
|
@@ -92,7 +90,7 @@ class NuLazyService {
|
|
|
92
90
|
node.onreadystatechange = null;
|
|
93
91
|
onSuccess({
|
|
94
92
|
path,
|
|
95
|
-
status: 'ok'
|
|
93
|
+
status: 'ok'
|
|
96
94
|
});
|
|
97
95
|
}
|
|
98
96
|
};
|
|
@@ -100,20 +98,20 @@ class NuLazyService {
|
|
|
100
98
|
else {
|
|
101
99
|
node.onload = () => onSuccess({
|
|
102
100
|
path,
|
|
103
|
-
status: 'ok'
|
|
101
|
+
status: 'ok'
|
|
104
102
|
});
|
|
105
103
|
}
|
|
106
104
|
node.onerror = (error) => onSuccess({
|
|
107
105
|
path,
|
|
108
106
|
status: 'error',
|
|
109
|
-
error
|
|
107
|
+
error
|
|
110
108
|
});
|
|
111
109
|
this.doc.getElementsByTagName('head')[0].appendChild(node);
|
|
112
110
|
});
|
|
113
111
|
}
|
|
114
112
|
loadStyle(path, options) {
|
|
115
113
|
const { rel, innerContent } = { rel: 'stylesheet', ...options };
|
|
116
|
-
return new Promise(
|
|
114
|
+
return new Promise(resolve => {
|
|
117
115
|
if (this.list[path] === true) {
|
|
118
116
|
resolve(this.cached[path]);
|
|
119
117
|
return;
|
|
@@ -130,16 +128,16 @@ class NuLazyService {
|
|
|
130
128
|
const item = {
|
|
131
129
|
path,
|
|
132
130
|
status: 'ok',
|
|
133
|
-
type: 'style'
|
|
131
|
+
type: 'style'
|
|
134
132
|
};
|
|
135
133
|
this.cached[path] = item;
|
|
136
134
|
resolve(item);
|
|
137
135
|
});
|
|
138
136
|
}
|
|
139
|
-
/** @nocollapse */ static
|
|
140
|
-
/** @nocollapse */ static
|
|
137
|
+
/** @nocollapse */ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.0.2", ngImport: i0, type: NuLazyService, deps: [], target: i0.ɵɵFactoryTarget.Injectable });
|
|
138
|
+
/** @nocollapse */ static ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "20.0.2", ngImport: i0, type: NuLazyService, providedIn: 'root' });
|
|
141
139
|
}
|
|
142
|
-
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "
|
|
140
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.0.2", ngImport: i0, type: NuLazyService, decorators: [{
|
|
143
141
|
type: Injectable,
|
|
144
142
|
args: [{ providedIn: 'root' }]
|
|
145
143
|
}] });
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ng-util-lazy.mjs","sources":["../../../../packages/lazy/lazy.service.ts","../../../../packages/lazy/ng-util-lazy.ts"],"sourcesContent":["import { DOCUMENT } from '@angular/common';\nimport { inject, Injectable } from '@angular/core';\nimport { BehaviorSubject, Observable, pipe } from 'rxjs';\nimport { filter, share } from 'rxjs/operators';\n\nexport type NuLazyResourcesType = 'script' | 'style';\n\nexport interface NuLazyResources {\n path: string;\n type: NuLazyResourcesType;\n /**\n * 回调名称\n */\n callback?: string;\n}\n\nexport interface NuLazyResult {\n path: string;\n status: 'ok' | 'error' | 'loading';\n type?: NuLazyResourcesType;\n error?: {};\n}\n\n@Injectable({ providedIn: 'root' })\nexport class NuLazyService {\n private readonly doc = inject(DOCUMENT);\n private list: { [key: string]: boolean } = {};\n private cached: { [key: string]: NuLazyResult } = {};\n private _notify: BehaviorSubject<NuLazyResult[]> = new BehaviorSubject<NuLazyResult[]>([]);\n\n private fixPaths(paths?: string | Array<string | NuLazyResources>): NuLazyResources[] {\n paths = paths || [];\n if (!Array.isArray(paths)) {\n paths = [paths];\n }\n return paths.map((p: string | NuLazyResources) => {\n const res = (typeof p === 'string' ? { path: p } : p) as NuLazyResources;\n if (!res.type) {\n res.type = res.path.endsWith('.js') || res.callback ? 'script' : 'style';\n }\n return res;\n });\n }\n\n /**\n * Monitor for the finished of `paths`\n *\n * - It's recommended to pass the value in accordance with the `load()` method\n */\n monitor(paths?: string | Array<string | NuLazyResources>): Observable<NuLazyResult[]> {\n const libs = this.fixPaths(paths);\n\n const pipes = [share(), filter((ls: NuLazyResult[]) => ls.length !== 0)];\n\n if (libs.length > 0) {\n pipes.push(\n filter(\n (ls: NuLazyResult[]) => ls.length === libs.length && ls.every((v) => v.status === 'ok' && libs.find((lw) => lw.path === v.path)),\n ),\n );\n }\n\n return this._notify.asObservable().pipe(pipe.apply(this, pipes as any) as any);\n }\n\n clear(): void {\n this.list = {};\n this.cached = {};\n }\n\n /**\n * Load the specified resources, includes `.js`, `.css`\n *\n * - The returned Promise does not mean that it was successfully loaded\n * - You can monitor load is success via `monitor()`\n */\n async load(paths: string | Array<string | NuLazyResources>): Promise<NuLazyResult[]> {\n paths = this.fixPaths(paths);\n\n return Promise.all(\n (paths as NuLazyResources[]).map((p) =>\n p.type === 'script' ? this.loadScript(p.path, { callback: p.callback }) : this.loadStyle(p.path),\n ),\n ).then((res) => {\n this._notify.next(res);\n return Promise.resolve(res);\n });\n }\n\n loadScript(path: string, options?: { innerContent?: string; callback?: string }): Promise<NuLazyResult> {\n const { innerContent } = { ...options };\n return new Promise((resolve) => {\n if (this.list[path] === true) {\n resolve({ ...this.cached[path], status: 'loading' });\n return;\n }\n\n this.list[path] = true;\n const onSuccess = (item: NuLazyResult) => {\n if (item.status === 'ok' && options?.callback) {\n (window as any)[options?.callback] = () => {\n onSuccessTruth(item);\n };\n } else {\n onSuccessTruth(item);\n }\n };\n const onSuccessTruth = (item: NuLazyResult) => {\n item.type = 'script';\n this.cached[path] = item;\n resolve(item);\n this._notify.next([item]);\n };\n\n const node = this.doc.createElement('script') as any;\n node.type = 'text/javascript';\n node.src = path;\n node.charset = 'utf-8';\n if (innerContent) {\n node.innerHTML = innerContent;\n }\n if (node.readyState) {\n // IE\n node.onreadystatechange = () => {\n if (node.readyState === 'loaded' || node.readyState === 'complete') {\n node.onreadystatechange = null;\n onSuccess({\n path,\n status: 'ok',\n });\n }\n };\n } else {\n node.onload = () =>\n onSuccess({\n path,\n status: 'ok',\n });\n }\n node.onerror = (error: {}) =>\n onSuccess({\n path,\n status: 'error',\n error,\n });\n this.doc.getElementsByTagName('head')[0].appendChild(node);\n });\n }\n\n loadStyle(path: string, options?: { rel?: string; innerContent?: string }): Promise<NuLazyResult> {\n const { rel, innerContent } = { rel: 'stylesheet', ...options };\n return new Promise((resolve) => {\n if (this.list[path] === true) {\n resolve(this.cached[path]);\n return;\n }\n\n this.list[path] = true;\n\n const node = this.doc.createElement('link') as HTMLLinkElement;\n node.rel = rel;\n node.type = 'text/css';\n node.href = path;\n if (innerContent) {\n node.innerHTML = innerContent;\n }\n this.doc.getElementsByTagName('head')[0].appendChild(node);\n const item: NuLazyResult = {\n path,\n status: 'ok',\n type: 'style',\n };\n this.cached[path] = item;\n resolve(item);\n });\n }\n}\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public-api';\n"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"ng-util-lazy.mjs","sources":["../../../../packages/lazy/lazy.service.ts","../../../../packages/lazy/ng-util-lazy.ts"],"sourcesContent":["import { DOCUMENT } from '@angular/common';\nimport { inject, Injectable } from '@angular/core';\nimport { BehaviorSubject, Observable, pipe } from 'rxjs';\nimport { filter, share } from 'rxjs/operators';\n\nexport type NuLazyResourcesType = 'script' | 'style';\n\nexport interface NuLazyResources {\n path: string;\n type: NuLazyResourcesType;\n /**\n * 回调名称\n */\n callback?: string;\n}\n\nexport interface NuLazyResult {\n path: string;\n status: 'ok' | 'error' | 'loading';\n type?: NuLazyResourcesType;\n error?: Event | string;\n}\n\n@Injectable({ providedIn: 'root' })\nexport class NuLazyService {\n private readonly doc = inject(DOCUMENT);\n private list: Record<string, boolean> = {};\n private cached: Record<string, NuLazyResult> = {};\n private _notify: BehaviorSubject<NuLazyResult[]> = new BehaviorSubject<NuLazyResult[]>([]);\n\n private fixPaths(paths?: string | (string | NuLazyResources)[]): NuLazyResources[] {\n paths = paths || [];\n if (!Array.isArray(paths)) {\n paths = [paths];\n }\n return paths.map((p: string | NuLazyResources) => {\n const res = (typeof p === 'string' ? { path: p } : p) as NuLazyResources;\n if (!res.type) {\n res.type = res.path.endsWith('.js') || res.callback ? 'script' : 'style';\n }\n return res;\n });\n }\n\n /**\n * Monitor for the finished of `paths`\n *\n * - It's recommended to pass the value in accordance with the `load()` method\n */\n monitor(paths?: string | (string | NuLazyResources)[]): Observable<NuLazyResult[]> {\n const libs = this.fixPaths(paths);\n\n const pipes = [share(), filter((ls: NuLazyResult[]) => ls.length !== 0)];\n\n if (libs.length > 0) {\n pipes.push(\n filter(\n (ls: NuLazyResult[]) =>\n ls.length === libs.length && ls.every(v => v.status === 'ok' && libs.find(lw => lw.path === v.path))\n )\n );\n }\n\n return this._notify.asObservable().pipe(pipe.apply(this, pipes as any) as any);\n }\n\n clear(): void {\n this.list = {};\n this.cached = {};\n }\n\n /**\n * Load the specified resources, includes `.js`, `.css`\n *\n * - The returned Promise does not mean that it was successfully loaded\n * - You can monitor load is success via `monitor()`\n */\n async load(paths: string | (string | NuLazyResources)[]): Promise<NuLazyResult[]> {\n paths = this.fixPaths(paths);\n\n return Promise.all(\n (paths as NuLazyResources[]).map(p =>\n p.type === 'script' ? this.loadScript(p.path, { callback: p.callback }) : this.loadStyle(p.path)\n )\n ).then(res => {\n this._notify.next(res);\n return Promise.resolve(res);\n });\n }\n\n loadScript(path: string, options?: { innerContent?: string; callback?: string }): Promise<NuLazyResult> {\n const { innerContent } = { ...options };\n return new Promise(resolve => {\n if (this.list[path] === true) {\n resolve({ ...this.cached[path], status: 'loading' });\n return;\n }\n\n this.list[path] = true;\n const onSuccess = (item: NuLazyResult): void => {\n if (item.status === 'ok' && options?.callback) {\n (window as any)[options?.callback] = () => {\n onSuccessTruth(item);\n };\n } else {\n onSuccessTruth(item);\n }\n };\n const onSuccessTruth = (item: NuLazyResult): void => {\n item.type = 'script';\n this.cached[path] = item;\n resolve(item);\n this._notify.next([item]);\n };\n\n const node = this.doc.createElement('script') as any;\n node.type = 'text/javascript';\n node.src = path;\n node.charset = 'utf-8';\n if (innerContent) {\n node.innerHTML = innerContent;\n }\n if (node.readyState) {\n // IE\n node.onreadystatechange = () => {\n if (node.readyState === 'loaded' || node.readyState === 'complete') {\n node.onreadystatechange = null;\n onSuccess({\n path,\n status: 'ok'\n });\n }\n };\n } else {\n node.onload = () =>\n onSuccess({\n path,\n status: 'ok'\n });\n }\n node.onerror = (error: Event | string) =>\n onSuccess({\n path,\n status: 'error',\n error\n });\n this.doc.getElementsByTagName('head')[0].appendChild(node);\n });\n }\n\n loadStyle(path: string, options?: { rel?: string; innerContent?: string }): Promise<NuLazyResult> {\n const { rel, innerContent } = { rel: 'stylesheet', ...options };\n return new Promise(resolve => {\n if (this.list[path] === true) {\n resolve(this.cached[path]);\n return;\n }\n\n this.list[path] = true;\n\n const node = this.doc.createElement('link') as HTMLLinkElement;\n node.rel = rel;\n node.type = 'text/css';\n node.href = path;\n if (innerContent) {\n node.innerHTML = innerContent;\n }\n this.doc.getElementsByTagName('head')[0].appendChild(node);\n const item: NuLazyResult = {\n path,\n status: 'ok',\n type: 'style'\n };\n this.cached[path] = item;\n resolve(item);\n });\n }\n}\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public-api';\n"],"names":[],"mappings":"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"}
|
package/index.d.ts
CHANGED
|
@@ -1,5 +1,52 @@
|
|
|
1
|
-
|
|
2
|
-
*
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
|
|
1
|
+
import { Observable } from 'rxjs';
|
|
2
|
+
import * as i0 from '@angular/core';
|
|
3
|
+
|
|
4
|
+
type NuLazyResourcesType = 'script' | 'style';
|
|
5
|
+
interface NuLazyResources {
|
|
6
|
+
path: string;
|
|
7
|
+
type: NuLazyResourcesType;
|
|
8
|
+
/**
|
|
9
|
+
* 回调名称
|
|
10
|
+
*/
|
|
11
|
+
callback?: string;
|
|
12
|
+
}
|
|
13
|
+
interface NuLazyResult {
|
|
14
|
+
path: string;
|
|
15
|
+
status: 'ok' | 'error' | 'loading';
|
|
16
|
+
type?: NuLazyResourcesType;
|
|
17
|
+
error?: Event | string;
|
|
18
|
+
}
|
|
19
|
+
declare class NuLazyService {
|
|
20
|
+
private readonly doc;
|
|
21
|
+
private list;
|
|
22
|
+
private cached;
|
|
23
|
+
private _notify;
|
|
24
|
+
private fixPaths;
|
|
25
|
+
/**
|
|
26
|
+
* Monitor for the finished of `paths`
|
|
27
|
+
*
|
|
28
|
+
* - It's recommended to pass the value in accordance with the `load()` method
|
|
29
|
+
*/
|
|
30
|
+
monitor(paths?: string | (string | NuLazyResources)[]): Observable<NuLazyResult[]>;
|
|
31
|
+
clear(): void;
|
|
32
|
+
/**
|
|
33
|
+
* Load the specified resources, includes `.js`, `.css`
|
|
34
|
+
*
|
|
35
|
+
* - The returned Promise does not mean that it was successfully loaded
|
|
36
|
+
* - You can monitor load is success via `monitor()`
|
|
37
|
+
*/
|
|
38
|
+
load(paths: string | (string | NuLazyResources)[]): Promise<NuLazyResult[]>;
|
|
39
|
+
loadScript(path: string, options?: {
|
|
40
|
+
innerContent?: string;
|
|
41
|
+
callback?: string;
|
|
42
|
+
}): Promise<NuLazyResult>;
|
|
43
|
+
loadStyle(path: string, options?: {
|
|
44
|
+
rel?: string;
|
|
45
|
+
innerContent?: string;
|
|
46
|
+
}): Promise<NuLazyResult>;
|
|
47
|
+
static ɵfac: i0.ɵɵFactoryDeclaration<NuLazyService, never>;
|
|
48
|
+
static ɵprov: i0.ɵɵInjectableDeclaration<NuLazyService>;
|
|
49
|
+
}
|
|
50
|
+
|
|
51
|
+
export { NuLazyService };
|
|
52
|
+
export type { NuLazyResources, NuLazyResourcesType, NuLazyResult };
|
package/package.json
CHANGED
package/lazy.service.d.ts
DELETED
|
@@ -1,48 +0,0 @@
|
|
|
1
|
-
import { Observable } from 'rxjs';
|
|
2
|
-
import * as i0 from "@angular/core";
|
|
3
|
-
export type NuLazyResourcesType = 'script' | 'style';
|
|
4
|
-
export interface NuLazyResources {
|
|
5
|
-
path: string;
|
|
6
|
-
type: NuLazyResourcesType;
|
|
7
|
-
/**
|
|
8
|
-
* 回调名称
|
|
9
|
-
*/
|
|
10
|
-
callback?: string;
|
|
11
|
-
}
|
|
12
|
-
export interface NuLazyResult {
|
|
13
|
-
path: string;
|
|
14
|
-
status: 'ok' | 'error' | 'loading';
|
|
15
|
-
type?: NuLazyResourcesType;
|
|
16
|
-
error?: {};
|
|
17
|
-
}
|
|
18
|
-
export declare class NuLazyService {
|
|
19
|
-
private readonly doc;
|
|
20
|
-
private list;
|
|
21
|
-
private cached;
|
|
22
|
-
private _notify;
|
|
23
|
-
private fixPaths;
|
|
24
|
-
/**
|
|
25
|
-
* Monitor for the finished of `paths`
|
|
26
|
-
*
|
|
27
|
-
* - It's recommended to pass the value in accordance with the `load()` method
|
|
28
|
-
*/
|
|
29
|
-
monitor(paths?: string | Array<string | NuLazyResources>): Observable<NuLazyResult[]>;
|
|
30
|
-
clear(): void;
|
|
31
|
-
/**
|
|
32
|
-
* Load the specified resources, includes `.js`, `.css`
|
|
33
|
-
*
|
|
34
|
-
* - The returned Promise does not mean that it was successfully loaded
|
|
35
|
-
* - You can monitor load is success via `monitor()`
|
|
36
|
-
*/
|
|
37
|
-
load(paths: string | Array<string | NuLazyResources>): Promise<NuLazyResult[]>;
|
|
38
|
-
loadScript(path: string, options?: {
|
|
39
|
-
innerContent?: string;
|
|
40
|
-
callback?: string;
|
|
41
|
-
}): Promise<NuLazyResult>;
|
|
42
|
-
loadStyle(path: string, options?: {
|
|
43
|
-
rel?: string;
|
|
44
|
-
innerContent?: string;
|
|
45
|
-
}): Promise<NuLazyResult>;
|
|
46
|
-
static ɵfac: i0.ɵɵFactoryDeclaration<NuLazyService, never>;
|
|
47
|
-
static ɵprov: i0.ɵɵInjectableDeclaration<NuLazyService>;
|
|
48
|
-
}
|
package/public-api.d.ts
DELETED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
export * from './lazy.service';
|