@solar-angular/core 1.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 ADDED
@@ -0,0 +1,7 @@
1
+ # core
2
+
3
+ This library was generated with [Nx](https://nx.dev).
4
+
5
+ ## Running unit tests
6
+
7
+ Run `nx test core` to execute the unit tests.
package/config.d.ts ADDED
@@ -0,0 +1,7 @@
1
+ import { InjectionToken } from '@angular/core';
2
+ export interface SolarConfig {
3
+ clientId: string;
4
+ earthUrl: string;
5
+ mercuryUrl: string;
6
+ }
7
+ export declare const SOLAR_CONFIG: InjectionToken<SolarConfig>;
@@ -0,0 +1,3 @@
1
+ import { InjectionToken } from '@angular/core';
2
+ export const SOLAR_CONFIG = new InjectionToken('');
3
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY29uZmlnLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vcGFja2FnZXMvY29yZS9zcmMvY29uZmlnLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxjQUFjLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFRL0MsTUFBTSxDQUFDLE1BQU0sWUFBWSxHQUFHLElBQUksY0FBYyxDQUFjLEVBQUUsQ0FBQyxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgSW5qZWN0aW9uVG9rZW4gfSBmcm9tICdAYW5ndWxhci9jb3JlJztcblxuZXhwb3J0IGludGVyZmFjZSBTb2xhckNvbmZpZyB7XG4gIGNsaWVudElkOiBzdHJpbmc7XG4gIGVhcnRoVXJsOiBzdHJpbmc7XG4gIG1lcmN1cnlVcmw6IHN0cmluZztcbn1cblxuZXhwb3J0IGNvbnN0IFNPTEFSX0NPTkZJRyA9IG5ldyBJbmplY3Rpb25Ub2tlbjxTb2xhckNvbmZpZz4oJycpO1xuIl19
@@ -0,0 +1,5 @@
1
+ export * from './config';
2
+ export * from './pipes';
3
+ export * from './provider';
4
+ export * from './utils';
5
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi9wYWNrYWdlcy9jb3JlL3NyYy9pbmRleC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxjQUFjLFVBQVUsQ0FBQztBQUN6QixjQUFjLFNBQVMsQ0FBQztBQUN4QixjQUFjLFlBQVksQ0FBQztBQUMzQixjQUFjLFNBQVMsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImV4cG9ydCAqIGZyb20gJy4vY29uZmlnJztcbmV4cG9ydCAqIGZyb20gJy4vcGlwZXMnO1xuZXhwb3J0ICogZnJvbSAnLi9wcm92aWRlcic7XG5leHBvcnQgKiBmcm9tICcuL3V0aWxzJztcbiJdfQ==
@@ -0,0 +1,31 @@
1
+ import { Pipe } from '@angular/core';
2
+ import * as i0 from "@angular/core";
3
+ export class CnumberPipe {
4
+ transform(v) {
5
+ if (!/^(0|[1-9]\d*)(\.\d+)?$/.test(v)) {
6
+ return null;
7
+ }
8
+ let unit = '千百拾亿千百拾万千百拾元角分';
9
+ let str = '';
10
+ v += '00';
11
+ const p = v.indexOf('.');
12
+ if (p >= 0) {
13
+ v = v.substring(0, p) + v.substr(p + 1, 2);
14
+ }
15
+ unit = unit.substr(unit.length - v.length);
16
+ for (let i = 0; i < v.length; i++) {
17
+ str += '零壹贰叁肆伍陆柒捌玖'.charAt(+v.charAt(i)) + unit.charAt(i);
18
+ }
19
+ return str.replace(/零(千|百|拾|角)/g, '零').replace(/(零)+/g, '零').replace(/零(万|亿|元)/g, '$1').replace(/(亿)万|壹(拾)/g, '$1$2').replace(/^元零?|零分/g, '').replace(/元$/g, '元整');
20
+ }
21
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: CnumberPipe, deps: [], target: i0.ɵɵFactoryTarget.Pipe }); }
22
+ static { this.ɵpipe = i0.ɵɵngDeclarePipe({ minVersion: "14.0.0", version: "18.2.13", ngImport: i0, type: CnumberPipe, isStandalone: true, name: "cnumber" }); }
23
+ }
24
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: CnumberPipe, decorators: [{
25
+ type: Pipe,
26
+ args: [{
27
+ name: 'cnumber',
28
+ standalone: true
29
+ }]
30
+ }] });
31
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY251bWJlci5waXBlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vcGFja2FnZXMvY29yZS9zcmMvcGlwZXMvY251bWJlci5waXBlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxJQUFJLEVBQWlCLE1BQU0sZUFBZSxDQUFDOztBQU1wRCxNQUFNLE9BQU8sV0FBVztJQUV0QixTQUFTLENBQUMsQ0FBUztRQUNqQixJQUFJLENBQUMsd0JBQXdCLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUM7WUFDdEMsT0FBTyxJQUFJLENBQUM7UUFDZCxDQUFDO1FBQ0QsSUFBSSxJQUFJLEdBQUcsZ0JBQWdCLENBQUM7UUFDNUIsSUFBSSxHQUFHLEdBQUcsRUFBRSxDQUFDO1FBQ2IsQ0FBQyxJQUFJLElBQUksQ0FBQztRQUNWLE1BQU0sQ0FBQyxHQUFHLENBQUMsQ0FBQyxPQUFPLENBQUMsR0FBRyxDQUFDLENBQUM7UUFDekIsSUFBSSxDQUFDLElBQUksQ0FBQyxFQUFFLENBQUM7WUFDWCxDQUFDLEdBQUcsQ0FBQyxDQUFDLFNBQVMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDO1FBQzdDLENBQUM7UUFDRCxJQUFJLEdBQUcsSUFBSSxDQUFDLE1BQU0sQ0FBQyxJQUFJLENBQUMsTUFBTSxHQUFHLENBQUMsQ0FBQyxNQUFNLENBQUMsQ0FBQztRQUMzQyxLQUFLLElBQUksQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLEdBQUcsQ0FBQyxDQUFDLE1BQU0sRUFBRSxDQUFDLEVBQUUsRUFBRSxDQUFDO1lBQ2xDLEdBQUcsSUFBSSxZQUFZLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLElBQUksQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLENBQUM7UUFDNUQsQ0FBQztRQUNELE9BQU8sR0FBRyxDQUFDLE9BQU8sQ0FBQyxhQUFhLEVBQUUsR0FBRyxDQUFDLENBQUMsT0FBTyxDQUFDLE9BQU8sRUFBRSxHQUFHLENBQUMsQ0FBQyxPQUFPLENBQUMsV0FBVyxFQUFFLElBQUksQ0FBQyxDQUFDLE9BQU8sQ0FBQyxZQUFZLEVBQUUsTUFBTSxDQUFDLENBQUMsT0FBTyxDQUFDLFVBQVUsRUFBRSxFQUFFLENBQUMsQ0FBQyxPQUFPLENBQUMsS0FBSyxFQUFFLElBQUksQ0FBQyxDQUFDO0lBQ3JLLENBQUM7K0dBbEJVLFdBQVc7NkdBQVgsV0FBVzs7NEZBQVgsV0FBVztrQkFKdkIsSUFBSTttQkFBQztvQkFDSixJQUFJLEVBQUUsU0FBUztvQkFDZixVQUFVLEVBQUUsSUFBSTtpQkFDakIiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBQaXBlLCBQaXBlVHJhbnNmb3JtIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5cbkBQaXBlKHtcbiAgbmFtZTogJ2NudW1iZXInLFxuICBzdGFuZGFsb25lOiB0cnVlXG59KVxuZXhwb3J0IGNsYXNzIENudW1iZXJQaXBlIGltcGxlbWVudHMgUGlwZVRyYW5zZm9ybSB7XG5cbiAgdHJhbnNmb3JtKHY6IHN0cmluZyk6IGFueSB7XG4gICAgaWYgKCEvXigwfFsxLTldXFxkKikoXFwuXFxkKyk/JC8udGVzdCh2KSkge1xuICAgICAgcmV0dXJuIG51bGw7XG4gICAgfVxuICAgIGxldCB1bml0ID0gJ+WNg+eZvuaLvuS6v+WNg+eZvuaLvuS4h+WNg+eZvuaLvuWFg+inkuWIhic7XG4gICAgbGV0IHN0ciA9ICcnO1xuICAgIHYgKz0gJzAwJztcbiAgICBjb25zdCBwID0gdi5pbmRleE9mKCcuJyk7XG4gICAgaWYgKHAgPj0gMCkge1xuICAgICAgdiA9IHYuc3Vic3RyaW5nKDAsIHApICsgdi5zdWJzdHIocCArIDEsIDIpO1xuICAgIH1cbiAgICB1bml0ID0gdW5pdC5zdWJzdHIodW5pdC5sZW5ndGggLSB2Lmxlbmd0aCk7XG4gICAgZm9yIChsZXQgaSA9IDA7IGkgPCB2Lmxlbmd0aDsgaSsrKSB7XG4gICAgICBzdHIgKz0gJ+mbtuWjuei0sOWPgeiChuS8jemZhuafkuaNjOeOlicuY2hhckF0KCt2LmNoYXJBdChpKSkgKyB1bml0LmNoYXJBdChpKTtcbiAgICB9XG4gICAgcmV0dXJuIHN0ci5yZXBsYWNlKC/pm7Yo5Y2DfOeZvnzmi7586KeSKS9nLCAn6Zu2JykucmVwbGFjZSgvKOmbtikrL2csICfpm7YnKS5yZXBsYWNlKC/pm7Yo5LiHfOS6v3zlhYMpL2csICckMScpLnJlcGxhY2UoLyjkur8p5LiHfOWjuSjmi74pL2csICckMSQyJykucmVwbGFjZSgvXuWFg+mbtj986Zu25YiGL2csICcnKS5yZXBsYWNlKC/lhYMkL2csICflhYPmlbQnKTtcbiAgfVxuXG59XG4iXX0=
@@ -0,0 +1,17 @@
1
+ import { Pipe } from '@angular/core';
2
+ import * as i0 from "@angular/core";
3
+ export class FindByIdPipe {
4
+ transform(id, array) {
5
+ return array.find(item => item.id === id) ?? null;
6
+ }
7
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: FindByIdPipe, deps: [], target: i0.ɵɵFactoryTarget.Pipe }); }
8
+ static { this.ɵpipe = i0.ɵɵngDeclarePipe({ minVersion: "14.0.0", version: "18.2.13", ngImport: i0, type: FindByIdPipe, isStandalone: true, name: "findById" }); }
9
+ }
10
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: FindByIdPipe, decorators: [{
11
+ type: Pipe,
12
+ args: [{
13
+ name: 'findById',
14
+ standalone: true
15
+ }]
16
+ }] });
17
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZmluZC1ieS1pZC5waXBlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vcGFja2FnZXMvY29yZS9zcmMvcGlwZXMvZmluZC1ieS1pZC5waXBlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxJQUFJLEVBQWlCLE1BQU0sZUFBZSxDQUFDOztBQU1wRCxNQUFNLE9BQU8sWUFBWTtJQUV2QixTQUFTLENBQUMsRUFBVyxFQUFFLEtBQVU7UUFDL0IsT0FBTyxLQUFLLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxFQUFFLENBQUMsSUFBSSxDQUFDLEVBQUUsS0FBSyxFQUFFLENBQUMsSUFBSSxJQUFJLENBQUM7SUFDcEQsQ0FBQzsrR0FKVSxZQUFZOzZHQUFaLFlBQVk7OzRGQUFaLFlBQVk7a0JBSnhCLElBQUk7bUJBQUM7b0JBQ0osSUFBSSxFQUFFLFVBQVU7b0JBQ2hCLFVBQVUsRUFBRSxJQUFJO2lCQUNqQiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IFBpcGUsIFBpcGVUcmFuc2Zvcm0gfSBmcm9tICdAYW5ndWxhci9jb3JlJztcblxuQFBpcGUoe1xuICBuYW1lOiAnZmluZEJ5SWQnLFxuICBzdGFuZGFsb25lOiB0cnVlXG59KVxuZXhwb3J0IGNsYXNzIEZpbmRCeUlkUGlwZTxUIGV4dGVuZHMgeyBpZDogYW55IH0+IGltcGxlbWVudHMgUGlwZVRyYW5zZm9ybSB7XG5cbiAgdHJhbnNmb3JtKGlkOiBUWydpZCddLCBhcnJheTogVFtdKTogdW5rbm93biB7XG4gICAgcmV0dXJuIGFycmF5LmZpbmQoaXRlbSA9PiBpdGVtLmlkID09PSBpZCkgPz8gbnVsbDtcbiAgfVxuXG59XG4iXX0=
@@ -0,0 +1,3 @@
1
+ export * from './cnumber.pipe';
2
+ export * from './find-by-id.pipe';
3
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi9wYWNrYWdlcy9jb3JlL3NyYy9waXBlcy9pbmRleC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxjQUFjLGdCQUFnQixDQUFDO0FBQy9CLGNBQWMsbUJBQW1CLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJleHBvcnQgKiBmcm9tICcuL2NudW1iZXIucGlwZSc7XG5leHBvcnQgKiBmcm9tICcuL2ZpbmQtYnktaWQucGlwZSc7XG4iXX0=
@@ -0,0 +1,10 @@
1
+ import { SOLAR_CONFIG } from './config';
2
+ export function provideSolar(config) {
3
+ return [
4
+ {
5
+ provide: SOLAR_CONFIG,
6
+ useValue: config
7
+ }
8
+ ];
9
+ }
10
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicHJvdmlkZXIuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi9wYWNrYWdlcy9jb3JlL3NyYy9wcm92aWRlci50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsWUFBWSxFQUFlLE1BQU0sVUFBVSxDQUFDO0FBRXJELE1BQU0sVUFBVSxZQUFZLENBQUMsTUFBbUI7SUFDOUMsT0FBTztRQUNMO1lBQ0UsT0FBTyxFQUFFLFlBQVk7WUFDckIsUUFBUSxFQUFFLE1BQU07U0FDakI7S0FDRixDQUFDO0FBQ0osQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IFNPTEFSX0NPTkZJRywgU29sYXJDb25maWcgfSBmcm9tICcuL2NvbmZpZyc7XG5cbmV4cG9ydCBmdW5jdGlvbiBwcm92aWRlU29sYXIoY29uZmlnOiBTb2xhckNvbmZpZykge1xuICByZXR1cm4gW1xuICAgIHtcbiAgICAgIHByb3ZpZGU6IFNPTEFSX0NPTkZJRyxcbiAgICAgIHVzZVZhbHVlOiBjb25maWdcbiAgICB9XG4gIF07XG59XG4iXX0=
@@ -0,0 +1,5 @@
1
+ /**
2
+ * Generated bundle index. Do not edit.
3
+ */
4
+ export * from './index';
5
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic29sYXItYW5ndWxhci1jb3JlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vcGFja2FnZXMvY29yZS9zcmMvc29sYXItYW5ndWxhci1jb3JlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBOztHQUVHO0FBRUgsY0FBYyxTQUFTLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyIvKipcbiAqIEdlbmVyYXRlZCBidW5kbGUgaW5kZXguIERvIG5vdCBlZGl0LlxuICovXG5cbmV4cG9ydCAqIGZyb20gJy4vaW5kZXgnO1xuIl19
@@ -0,0 +1,2 @@
1
+ export * from './tree.utils';
2
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi9wYWNrYWdlcy9jb3JlL3NyYy91dGlscy9pbmRleC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxjQUFjLGNBQWMsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImV4cG9ydCAqIGZyb20gJy4vdHJlZS51dGlscyc7XG4iXX0=
@@ -0,0 +1,73 @@
1
+ export function list2tree(list, pid) {
2
+ const map = new Map();
3
+ const tree = [];
4
+ list = list.map(o => Object.assign({}, o));
5
+ // 建立索引
6
+ for (const node of list) {
7
+ map.set(node.id, node);
8
+ }
9
+ for (const node of list) {
10
+ const parent = map.get(node[pid]);
11
+ if (parent) {
12
+ node.parent = parent;
13
+ parent.children ??= [];
14
+ parent.children.push(node);
15
+ }
16
+ else {
17
+ tree.push(node);
18
+ }
19
+ }
20
+ for (const node of list) {
21
+ node.isLeaf = !node.children?.length;
22
+ }
23
+ return tree;
24
+ }
25
+ export function tree2list(tree) {
26
+ const list = [], stack = tree.slice(0);
27
+ while (stack.length) {
28
+ const node = stack.pop();
29
+ const children = node.children;
30
+ if (children?.length) {
31
+ stack.push(...children);
32
+ }
33
+ list.push(node);
34
+ }
35
+ return list;
36
+ }
37
+ /**
38
+ * 将一个二维数组转为一棵树,二维数组里的每一个子数组对应着树的每一层级
39
+ * @example
40
+ * ```ts
41
+ * levels2tree([channels, categories], 'channel')
42
+ * ```
43
+ * @param levels
44
+ * @param pid
45
+ */
46
+ export function levels2tree(levels, pid) {
47
+ const maps = levels.map(() => new Map());
48
+ levels = levels.map(list => list.map(o => Object.assign({}, o)));
49
+ // 建立索引
50
+ for (let index = 0; index < levels.length; index++) {
51
+ for (const node of levels[index]) {
52
+ maps[index].set(node.id, node);
53
+ }
54
+ }
55
+ // 倒序遍历,向前寻找 parent
56
+ for (let index = levels.length - 1; index > 0; index--) {
57
+ for (const node of levels[index]) {
58
+ const parent = maps[index - 1].get(node[pid]);
59
+ if (parent) {
60
+ node.parent = parent;
61
+ parent.children ??= [];
62
+ parent.children.push(node);
63
+ }
64
+ }
65
+ }
66
+ // 最后一层,一定是叶子节点
67
+ // TODO:如果枝条之间的层级数不一致,这里就不能这样写,应该遍历每一级的 list,通过判断有无 children 来设置 isLeaf
68
+ for (const node of levels.at(-1)) {
69
+ node.isLeaf = !node.children?.length;
70
+ }
71
+ return levels[0];
72
+ }
73
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidHJlZS51dGlscy5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL3BhY2thZ2VzL2NvcmUvc3JjL3V0aWxzL3RyZWUudXRpbHMudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBUUEsTUFBTSxVQUFVLFNBQVMsQ0FBQyxJQUFnQixFQUFFLEdBQVc7SUFDckQsTUFBTSxHQUFHLEdBQUcsSUFBSSxHQUFHLEVBQTRCLENBQUM7SUFDaEQsTUFBTSxJQUFJLEdBQWUsRUFBRSxDQUFDO0lBRTVCLElBQUksR0FBRyxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsTUFBTSxDQUFDLE1BQU0sQ0FBQyxFQUFFLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQztJQUUzQyxPQUFPO0lBQ1AsS0FBSyxNQUFNLElBQUksSUFBSSxJQUFJLEVBQUUsQ0FBQztRQUN4QixHQUFHLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxFQUFFLEVBQUUsSUFBSSxDQUFDLENBQUM7SUFDekIsQ0FBQztJQUVELEtBQUssTUFBTSxJQUFJLElBQUksSUFBSSxFQUFFLENBQUM7UUFDeEIsTUFBTSxNQUFNLEdBQUcsR0FBRyxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQztRQUNsQyxJQUFJLE1BQU0sRUFBRSxDQUFDO1lBQ1gsSUFBSSxDQUFDLE1BQU0sR0FBRyxNQUFNLENBQUM7WUFDckIsTUFBTSxDQUFDLFFBQVEsS0FBSyxFQUFFLENBQUM7WUFDdkIsTUFBTSxDQUFDLFFBQVEsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUM7UUFDN0IsQ0FBQzthQUFNLENBQUM7WUFDTixJQUFJLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDO1FBQ2xCLENBQUM7SUFDSCxDQUFDO0lBRUQsS0FBSyxNQUFNLElBQUksSUFBSSxJQUFJLEVBQUUsQ0FBQztRQUN4QixJQUFJLENBQUMsTUFBTSxHQUFHLENBQUMsSUFBSSxDQUFDLFFBQVEsRUFBRSxNQUFNLENBQUM7SUFDdkMsQ0FBQztJQUVELE9BQU8sSUFBSSxDQUFDO0FBQ2QsQ0FBQztBQUVELE1BQU0sVUFBVSxTQUFTLENBQXFCLElBQVM7SUFDckQsTUFBTSxJQUFJLEdBQUcsRUFBRSxFQUFFLEtBQUssR0FBRyxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDO0lBRXZDLE9BQU8sS0FBSyxDQUFDLE1BQU0sRUFBRSxDQUFDO1FBQ3BCLE1BQU0sSUFBSSxHQUFHLEtBQUssQ0FBQyxHQUFHLEVBQUcsQ0FBQztRQUMxQixNQUFNLFFBQVEsR0FBRyxJQUFJLENBQUMsUUFBUSxDQUFDO1FBRS9CLElBQUksUUFBUSxFQUFFLE1BQU0sRUFBRSxDQUFDO1lBQ3JCLEtBQUssQ0FBQyxJQUFJLENBQUMsR0FBRyxRQUFlLENBQUMsQ0FBQztRQUNqQyxDQUFDO1FBRUQsSUFBSSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQztJQUNsQixDQUFDO0lBRUQsT0FBTyxJQUFJLENBQUM7QUFDZCxDQUFDO0FBRUQ7Ozs7Ozs7O0dBUUc7QUFDSCxNQUFNLFVBQVUsV0FBVyxDQUFDLE1BQW9CLEVBQUUsR0FBVztJQUMzRCxNQUFNLElBQUksR0FBb0MsTUFBTSxDQUFDLEdBQUcsQ0FBQyxHQUFHLEVBQUUsQ0FBQyxJQUFJLEdBQUcsRUFBRSxDQUFDLENBQUM7SUFFMUUsTUFBTSxHQUFHLE1BQU0sQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLEVBQUUsQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsTUFBTSxDQUFDLE1BQU0sQ0FBQyxFQUFFLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO0lBRWpFLE9BQU87SUFDUCxLQUFLLElBQUksS0FBSyxHQUFHLENBQUMsRUFBRSxLQUFLLEdBQUcsTUFBTSxDQUFDLE1BQU0sRUFBRSxLQUFLLEVBQUUsRUFBRSxDQUFDO1FBQ25ELEtBQUssTUFBTSxJQUFJLElBQUksTUFBTSxDQUFDLEtBQUssQ0FBQyxFQUFFLENBQUM7WUFDakMsSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsRUFBRSxFQUFFLElBQUksQ0FBQyxDQUFDO1FBQ2pDLENBQUM7SUFDSCxDQUFDO0lBRUQsbUJBQW1CO0lBQ25CLEtBQUssSUFBSSxLQUFLLEdBQUcsTUFBTSxDQUFDLE1BQU0sR0FBRyxDQUFDLEVBQUUsS0FBSyxHQUFHLENBQUMsRUFBRSxLQUFLLEVBQUUsRUFBRSxDQUFDO1FBQ3ZELEtBQUssTUFBTSxJQUFJLElBQUksTUFBTSxDQUFDLEtBQUssQ0FBQyxFQUFFLENBQUM7WUFDakMsTUFBTSxNQUFNLEdBQUcsSUFBSSxDQUFDLEtBQUssR0FBRyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUM7WUFDOUMsSUFBSSxNQUFNLEVBQUUsQ0FBQztnQkFDWCxJQUFJLENBQUMsTUFBTSxHQUFHLE1BQU0sQ0FBQztnQkFDckIsTUFBTSxDQUFDLFFBQVEsS0FBSyxFQUFFLENBQUM7Z0JBQ3ZCLE1BQU0sQ0FBQyxRQUFRLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDO1lBQzdCLENBQUM7UUFDSCxDQUFDO0lBQ0gsQ0FBQztJQUVELGVBQWU7SUFDZix1RUFBdUU7SUFDdkUsS0FBSyxNQUFNLElBQUksSUFBSSxNQUFNLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFFLEVBQUUsQ0FBQztRQUNsQyxJQUFJLENBQUMsTUFBTSxHQUFHLENBQUMsSUFBSSxDQUFDLFFBQVEsRUFBRSxNQUFNLENBQUM7SUFDdkMsQ0FBQztJQUVELE9BQU8sTUFBTSxDQUFDLENBQUMsQ0FBQyxDQUFDO0FBQ25CLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJleHBvcnQgaW50ZXJmYWNlIFRyZWVOb2RlIHtcbiAgaWQ6IG51bWJlciB8IHN0cmluZztcbiAgcGFyZW50PzogVHJlZU5vZGU7XG4gIGNoaWxkcmVuPzogVHJlZU5vZGVbXTtcbiAgaXNMZWFmPzogYm9vbGVhbjtcbiAgW2tleTogc3RyaW5nXTogYW55O1xufVxuXG5leHBvcnQgZnVuY3Rpb24gbGlzdDJ0cmVlKGxpc3Q6IFRyZWVOb2RlW10sIHBpZDogc3RyaW5nKSB7XG4gIGNvbnN0IG1hcCA9IG5ldyBNYXA8VHJlZU5vZGVbJ2lkJ10sIFRyZWVOb2RlPigpO1xuICBjb25zdCB0cmVlOiBUcmVlTm9kZVtdID0gW107XG5cbiAgbGlzdCA9IGxpc3QubWFwKG8gPT4gT2JqZWN0LmFzc2lnbih7fSwgbykpO1xuXG4gIC8vIOW7uueri+e0ouW8lVxuICBmb3IgKGNvbnN0IG5vZGUgb2YgbGlzdCkge1xuICAgIG1hcC5zZXQobm9kZS5pZCwgbm9kZSk7XG4gIH1cblxuICBmb3IgKGNvbnN0IG5vZGUgb2YgbGlzdCkge1xuICAgIGNvbnN0IHBhcmVudCA9IG1hcC5nZXQobm9kZVtwaWRdKTtcbiAgICBpZiAocGFyZW50KSB7XG4gICAgICBub2RlLnBhcmVudCA9IHBhcmVudDtcbiAgICAgIHBhcmVudC5jaGlsZHJlbiA/Pz0gW107XG4gICAgICBwYXJlbnQuY2hpbGRyZW4ucHVzaChub2RlKTtcbiAgICB9IGVsc2Uge1xuICAgICAgdHJlZS5wdXNoKG5vZGUpO1xuICAgIH1cbiAgfVxuXG4gIGZvciAoY29uc3Qgbm9kZSBvZiBsaXN0KSB7XG4gICAgbm9kZS5pc0xlYWYgPSAhbm9kZS5jaGlsZHJlbj8ubGVuZ3RoO1xuICB9XG5cbiAgcmV0dXJuIHRyZWU7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiB0cmVlMmxpc3Q8VCBleHRlbmRzIFRyZWVOb2RlPih0cmVlOiBUW10pOiBUW10ge1xuICBjb25zdCBsaXN0ID0gW10sIHN0YWNrID0gdHJlZS5zbGljZSgwKTtcblxuICB3aGlsZSAoc3RhY2subGVuZ3RoKSB7XG4gICAgY29uc3Qgbm9kZSA9IHN0YWNrLnBvcCgpITtcbiAgICBjb25zdCBjaGlsZHJlbiA9IG5vZGUuY2hpbGRyZW47XG5cbiAgICBpZiAoY2hpbGRyZW4/Lmxlbmd0aCkge1xuICAgICAgc3RhY2sucHVzaCguLi5jaGlsZHJlbiBhcyBUW10pO1xuICAgIH1cblxuICAgIGxpc3QucHVzaChub2RlKTtcbiAgfVxuXG4gIHJldHVybiBsaXN0O1xufVxuXG4vKipcbiAqIOWwhuS4gOS4quS6jOe7tOaVsOe7hOi9rOS4uuS4gOajteagke+8jOS6jOe7tOaVsOe7hOmHjOeahOavj+S4gOS4quWtkOaVsOe7hOWvueW6lOedgOagkeeahOavj+S4gOWxgue6p1xuICogQGV4YW1wbGVcbiAqIGBgYHRzXG4gKiBsZXZlbHMydHJlZShbY2hhbm5lbHMsIGNhdGVnb3JpZXNdLCAnY2hhbm5lbCcpXG4gKiBgYGBcbiAqIEBwYXJhbSBsZXZlbHNcbiAqIEBwYXJhbSBwaWRcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGxldmVsczJ0cmVlKGxldmVsczogVHJlZU5vZGVbXVtdLCBwaWQ6IHN0cmluZykge1xuICBjb25zdCBtYXBzOiBNYXA8VHJlZU5vZGVbJ2lkJ10sIFRyZWVOb2RlPltdID0gbGV2ZWxzLm1hcCgoKSA9PiBuZXcgTWFwKCkpO1xuXG4gIGxldmVscyA9IGxldmVscy5tYXAobGlzdCA9PiBsaXN0Lm1hcChvID0+IE9iamVjdC5hc3NpZ24oe30sIG8pKSk7XG5cbiAgLy8g5bu656uL57Si5byVXG4gIGZvciAobGV0IGluZGV4ID0gMDsgaW5kZXggPCBsZXZlbHMubGVuZ3RoOyBpbmRleCsrKSB7XG4gICAgZm9yIChjb25zdCBub2RlIG9mIGxldmVsc1tpbmRleF0pIHtcbiAgICAgIG1hcHNbaW5kZXhdLnNldChub2RlLmlkLCBub2RlKTtcbiAgICB9XG4gIH1cblxuICAvLyDlgJLluo/pgY3ljobvvIzlkJHliY3lr7vmib4gcGFyZW50XG4gIGZvciAobGV0IGluZGV4ID0gbGV2ZWxzLmxlbmd0aCAtIDE7IGluZGV4ID4gMDsgaW5kZXgtLSkge1xuICAgIGZvciAoY29uc3Qgbm9kZSBvZiBsZXZlbHNbaW5kZXhdKSB7XG4gICAgICBjb25zdCBwYXJlbnQgPSBtYXBzW2luZGV4IC0gMV0uZ2V0KG5vZGVbcGlkXSk7XG4gICAgICBpZiAocGFyZW50KSB7XG4gICAgICAgIG5vZGUucGFyZW50ID0gcGFyZW50O1xuICAgICAgICBwYXJlbnQuY2hpbGRyZW4gPz89IFtdO1xuICAgICAgICBwYXJlbnQuY2hpbGRyZW4ucHVzaChub2RlKTtcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICAvLyDmnIDlkI7kuIDlsYLvvIzkuIDlrprmmK/lj7blrZDoioLngrlcbiAgLy8gVE9ET++8muWmguaenOaeneadoeS5i+mXtOeahOWxgue6p+aVsOS4jeS4gOiHtO+8jOi/memHjOWwseS4jeiDvei/meagt+WGme+8jOW6lOivpemBjeWOhuavj+S4gOe6p+eahCBsaXN077yM6YCa6L+H5Yik5pat5pyJ5pegIGNoaWxkcmVuIOadpeiuvue9riBpc0xlYWZcbiAgZm9yIChjb25zdCBub2RlIG9mIGxldmVscy5hdCgtMSkhKSB7XG4gICAgbm9kZS5pc0xlYWYgPSAhbm9kZS5jaGlsZHJlbj8ubGVuZ3RoO1xuICB9XG5cbiAgcmV0dXJuIGxldmVsc1swXTtcbn1cbiJdfQ==
@@ -0,0 +1,137 @@
1
+ import * as i0 from '@angular/core';
2
+ import { InjectionToken, Pipe } from '@angular/core';
3
+
4
+ const SOLAR_CONFIG = new InjectionToken('');
5
+
6
+ class CnumberPipe {
7
+ transform(v) {
8
+ if (!/^(0|[1-9]\d*)(\.\d+)?$/.test(v)) {
9
+ return null;
10
+ }
11
+ let unit = '千百拾亿千百拾万千百拾元角分';
12
+ let str = '';
13
+ v += '00';
14
+ const p = v.indexOf('.');
15
+ if (p >= 0) {
16
+ v = v.substring(0, p) + v.substr(p + 1, 2);
17
+ }
18
+ unit = unit.substr(unit.length - v.length);
19
+ for (let i = 0; i < v.length; i++) {
20
+ str += '零壹贰叁肆伍陆柒捌玖'.charAt(+v.charAt(i)) + unit.charAt(i);
21
+ }
22
+ return str.replace(/零(千|百|拾|角)/g, '零').replace(/(零)+/g, '零').replace(/零(万|亿|元)/g, '$1').replace(/(亿)万|壹(拾)/g, '$1$2').replace(/^元零?|零分/g, '').replace(/元$/g, '元整');
23
+ }
24
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: CnumberPipe, deps: [], target: i0.ɵɵFactoryTarget.Pipe }); }
25
+ static { this.ɵpipe = i0.ɵɵngDeclarePipe({ minVersion: "14.0.0", version: "18.2.13", ngImport: i0, type: CnumberPipe, isStandalone: true, name: "cnumber" }); }
26
+ }
27
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: CnumberPipe, decorators: [{
28
+ type: Pipe,
29
+ args: [{
30
+ name: 'cnumber',
31
+ standalone: true
32
+ }]
33
+ }] });
34
+
35
+ class FindByIdPipe {
36
+ transform(id, array) {
37
+ return array.find(item => item.id === id) ?? null;
38
+ }
39
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: FindByIdPipe, deps: [], target: i0.ɵɵFactoryTarget.Pipe }); }
40
+ static { this.ɵpipe = i0.ɵɵngDeclarePipe({ minVersion: "14.0.0", version: "18.2.13", ngImport: i0, type: FindByIdPipe, isStandalone: true, name: "findById" }); }
41
+ }
42
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: FindByIdPipe, decorators: [{
43
+ type: Pipe,
44
+ args: [{
45
+ name: 'findById',
46
+ standalone: true
47
+ }]
48
+ }] });
49
+
50
+ function provideSolar(config) {
51
+ return [
52
+ {
53
+ provide: SOLAR_CONFIG,
54
+ useValue: config
55
+ }
56
+ ];
57
+ }
58
+
59
+ function list2tree(list, pid) {
60
+ const map = new Map();
61
+ const tree = [];
62
+ list = list.map(o => Object.assign({}, o));
63
+ // 建立索引
64
+ for (const node of list) {
65
+ map.set(node.id, node);
66
+ }
67
+ for (const node of list) {
68
+ const parent = map.get(node[pid]);
69
+ if (parent) {
70
+ node.parent = parent;
71
+ parent.children ??= [];
72
+ parent.children.push(node);
73
+ }
74
+ else {
75
+ tree.push(node);
76
+ }
77
+ }
78
+ for (const node of list) {
79
+ node.isLeaf = !node.children?.length;
80
+ }
81
+ return tree;
82
+ }
83
+ function tree2list(tree) {
84
+ const list = [], stack = tree.slice(0);
85
+ while (stack.length) {
86
+ const node = stack.pop();
87
+ const children = node.children;
88
+ if (children?.length) {
89
+ stack.push(...children);
90
+ }
91
+ list.push(node);
92
+ }
93
+ return list;
94
+ }
95
+ /**
96
+ * 将一个二维数组转为一棵树,二维数组里的每一个子数组对应着树的每一层级
97
+ * @example
98
+ * ```ts
99
+ * levels2tree([channels, categories], 'channel')
100
+ * ```
101
+ * @param levels
102
+ * @param pid
103
+ */
104
+ function levels2tree(levels, pid) {
105
+ const maps = levels.map(() => new Map());
106
+ levels = levels.map(list => list.map(o => Object.assign({}, o)));
107
+ // 建立索引
108
+ for (let index = 0; index < levels.length; index++) {
109
+ for (const node of levels[index]) {
110
+ maps[index].set(node.id, node);
111
+ }
112
+ }
113
+ // 倒序遍历,向前寻找 parent
114
+ for (let index = levels.length - 1; index > 0; index--) {
115
+ for (const node of levels[index]) {
116
+ const parent = maps[index - 1].get(node[pid]);
117
+ if (parent) {
118
+ node.parent = parent;
119
+ parent.children ??= [];
120
+ parent.children.push(node);
121
+ }
122
+ }
123
+ }
124
+ // 最后一层,一定是叶子节点
125
+ // TODO:如果枝条之间的层级数不一致,这里就不能这样写,应该遍历每一级的 list,通过判断有无 children 来设置 isLeaf
126
+ for (const node of levels.at(-1)) {
127
+ node.isLeaf = !node.children?.length;
128
+ }
129
+ return levels[0];
130
+ }
131
+
132
+ /**
133
+ * Generated bundle index. Do not edit.
134
+ */
135
+
136
+ export { CnumberPipe, FindByIdPipe, SOLAR_CONFIG, levels2tree, list2tree, provideSolar, tree2list };
137
+ //# sourceMappingURL=solar-angular-core.mjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"solar-angular-core.mjs","sources":["../../../packages/core/src/config.ts","../../../packages/core/src/pipes/cnumber.pipe.ts","../../../packages/core/src/pipes/find-by-id.pipe.ts","../../../packages/core/src/provider.ts","../../../packages/core/src/utils/tree.utils.ts","../../../packages/core/src/solar-angular-core.ts"],"sourcesContent":["import { InjectionToken } from '@angular/core';\n\nexport interface SolarConfig {\n clientId: string;\n earthUrl: string;\n mercuryUrl: string;\n}\n\nexport const SOLAR_CONFIG = new InjectionToken<SolarConfig>('');\n","import { Pipe, PipeTransform } from '@angular/core';\n\n@Pipe({\n name: 'cnumber',\n standalone: true\n})\nexport class CnumberPipe implements PipeTransform {\n\n transform(v: string): any {\n if (!/^(0|[1-9]\\d*)(\\.\\d+)?$/.test(v)) {\n return null;\n }\n let unit = '千百拾亿千百拾万千百拾元角分';\n let str = '';\n v += '00';\n const p = v.indexOf('.');\n if (p >= 0) {\n v = v.substring(0, p) + v.substr(p + 1, 2);\n }\n unit = unit.substr(unit.length - v.length);\n for (let i = 0; i < v.length; i++) {\n str += '零壹贰叁肆伍陆柒捌玖'.charAt(+v.charAt(i)) + unit.charAt(i);\n }\n return str.replace(/零(千|百|拾|角)/g, '零').replace(/(零)+/g, '零').replace(/零(万|亿|元)/g, '$1').replace(/(亿)万|壹(拾)/g, '$1$2').replace(/^元零?|零分/g, '').replace(/元$/g, '元整');\n }\n\n}\n","import { Pipe, PipeTransform } from '@angular/core';\n\n@Pipe({\n name: 'findById',\n standalone: true\n})\nexport class FindByIdPipe<T extends { id: any }> implements PipeTransform {\n\n transform(id: T['id'], array: T[]): unknown {\n return array.find(item => item.id === id) ?? null;\n }\n\n}\n","import { SOLAR_CONFIG, SolarConfig } from './config';\n\nexport function provideSolar(config: SolarConfig) {\n return [\n {\n provide: SOLAR_CONFIG,\n useValue: config\n }\n ];\n}\n","export interface TreeNode {\n id: number | string;\n parent?: TreeNode;\n children?: TreeNode[];\n isLeaf?: boolean;\n [key: string]: any;\n}\n\nexport function list2tree(list: TreeNode[], pid: string) {\n const map = new Map<TreeNode['id'], TreeNode>();\n const tree: TreeNode[] = [];\n\n list = list.map(o => Object.assign({}, o));\n\n // 建立索引\n for (const node of list) {\n map.set(node.id, node);\n }\n\n for (const node of list) {\n const parent = map.get(node[pid]);\n if (parent) {\n node.parent = parent;\n parent.children ??= [];\n parent.children.push(node);\n } else {\n tree.push(node);\n }\n }\n\n for (const node of list) {\n node.isLeaf = !node.children?.length;\n }\n\n return tree;\n}\n\nexport function tree2list<T extends TreeNode>(tree: T[]): T[] {\n const list = [], stack = tree.slice(0);\n\n while (stack.length) {\n const node = stack.pop()!;\n const children = node.children;\n\n if (children?.length) {\n stack.push(...children as T[]);\n }\n\n list.push(node);\n }\n\n return list;\n}\n\n/**\n * 将一个二维数组转为一棵树,二维数组里的每一个子数组对应着树的每一层级\n * @example\n * ```ts\n * levels2tree([channels, categories], 'channel')\n * ```\n * @param levels\n * @param pid\n */\nexport function levels2tree(levels: TreeNode[][], pid: string) {\n const maps: Map<TreeNode['id'], TreeNode>[] = levels.map(() => new Map());\n\n levels = levels.map(list => list.map(o => Object.assign({}, o)));\n\n // 建立索引\n for (let index = 0; index < levels.length; index++) {\n for (const node of levels[index]) {\n maps[index].set(node.id, node);\n }\n }\n\n // 倒序遍历,向前寻找 parent\n for (let index = levels.length - 1; index > 0; index--) {\n for (const node of levels[index]) {\n const parent = maps[index - 1].get(node[pid]);\n if (parent) {\n node.parent = parent;\n parent.children ??= [];\n parent.children.push(node);\n }\n }\n }\n\n // 最后一层,一定是叶子节点\n // TODO:如果枝条之间的层级数不一致,这里就不能这样写,应该遍历每一级的 list,通过判断有无 children 来设置 isLeaf\n for (const node of levels.at(-1)!) {\n node.isLeaf = !node.children?.length;\n }\n\n return levels[0];\n}\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './index';\n"],"names":[],"mappings":"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"}
package/index.d.ts ADDED
@@ -0,0 +1,4 @@
1
+ export * from './config';
2
+ export * from './pipes';
3
+ export * from './provider';
4
+ export * from './utils';
package/package.json ADDED
@@ -0,0 +1,28 @@
1
+ {
2
+ "name": "@solar-angular/core",
3
+ "version": "1.0.0",
4
+ "sideEffects": false,
5
+ "publishConfig": {
6
+ "access": "public"
7
+ },
8
+ "peerDependencies": {
9
+ "@angular/common": "^18.0.0",
10
+ "@angular/core": "^18.0.0"
11
+ },
12
+ "module": "fesm2022/solar-angular-core.mjs",
13
+ "typings": "index.d.ts",
14
+ "exports": {
15
+ "./package.json": {
16
+ "default": "./package.json"
17
+ },
18
+ ".": {
19
+ "types": "./index.d.ts",
20
+ "esm2022": "./esm2022/solar-angular-core.mjs",
21
+ "esm": "./esm2022/solar-angular-core.mjs",
22
+ "default": "./fesm2022/solar-angular-core.mjs"
23
+ }
24
+ },
25
+ "dependencies": {
26
+ "tslib": "^2.3.0"
27
+ }
28
+ }
@@ -0,0 +1,7 @@
1
+ import { PipeTransform } from '@angular/core';
2
+ import * as i0 from "@angular/core";
3
+ export declare class CnumberPipe implements PipeTransform {
4
+ transform(v: string): any;
5
+ static ɵfac: i0.ɵɵFactoryDeclaration<CnumberPipe, never>;
6
+ static ɵpipe: i0.ɵɵPipeDeclaration<CnumberPipe, "cnumber", true>;
7
+ }
@@ -0,0 +1,9 @@
1
+ import { PipeTransform } from '@angular/core';
2
+ import * as i0 from "@angular/core";
3
+ export declare class FindByIdPipe<T extends {
4
+ id: any;
5
+ }> implements PipeTransform {
6
+ transform(id: T['id'], array: T[]): unknown;
7
+ static ɵfac: i0.ɵɵFactoryDeclaration<FindByIdPipe<any>, never>;
8
+ static ɵpipe: i0.ɵɵPipeDeclaration<FindByIdPipe<any>, "findById", true>;
9
+ }
@@ -0,0 +1,2 @@
1
+ export * from './cnumber.pipe';
2
+ export * from './find-by-id.pipe';
package/provider.d.ts ADDED
@@ -0,0 +1,5 @@
1
+ import { SolarConfig } from './config';
2
+ export declare function provideSolar(config: SolarConfig): {
3
+ provide: import("@angular/core").InjectionToken<SolarConfig>;
4
+ useValue: SolarConfig;
5
+ }[];
@@ -0,0 +1 @@
1
+ export * from './tree.utils';
@@ -0,0 +1,19 @@
1
+ export interface TreeNode {
2
+ id: number | string;
3
+ parent?: TreeNode;
4
+ children?: TreeNode[];
5
+ isLeaf?: boolean;
6
+ [key: string]: any;
7
+ }
8
+ export declare function list2tree(list: TreeNode[], pid: string): TreeNode[];
9
+ export declare function tree2list<T extends TreeNode>(tree: T[]): T[];
10
+ /**
11
+ * 将一个二维数组转为一棵树,二维数组里的每一个子数组对应着树的每一层级
12
+ * @example
13
+ * ```ts
14
+ * levels2tree([channels, categories], 'channel')
15
+ * ```
16
+ * @param levels
17
+ * @param pid
18
+ */
19
+ export declare function levels2tree(levels: TreeNode[][], pid: string): TreeNode[];