@soratani-code/samtools 1.3.1 → 1.3.3

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.
@@ -0,0 +1,12 @@
1
+ type GraphId = string | number;
2
+ export default class Graph {
3
+ constructor();
4
+ private vertices;
5
+ addVertex(id: GraphId): void;
6
+ addEdge(target: GraphId, source: GraphId, bothway?: boolean): void;
7
+ path(target: GraphId, source: GraphId): {
8
+ distance: number;
9
+ path: any[];
10
+ };
11
+ }
12
+ export {};
@@ -0,0 +1,83 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ class Graph {
4
+ constructor() {
5
+ this.vertices = new Map();
6
+ }
7
+ addVertex(id) {
8
+ this.vertices.set(id, []);
9
+ }
10
+ addEdge(target, source, bothway = false) {
11
+ const targetMap = this.vertices.get(target);
12
+ if (!targetMap.includes(source))
13
+ targetMap.push(source);
14
+ if (bothway) {
15
+ const sourceMap = this.vertices.get(source);
16
+ if (!sourceMap.includes(target))
17
+ sourceMap.push(target);
18
+ }
19
+ }
20
+ path(target, source) {
21
+ const distances = {};
22
+ const previous = {};
23
+ const queue = [];
24
+ const visited = {};
25
+ this.vertices.forEach((_val, key) => {
26
+ distances[key] = Infinity;
27
+ previous[key] = null;
28
+ queue.push(key);
29
+ });
30
+ distances[target] = 0;
31
+ while (queue.length > 0) {
32
+ queue.sort((a, b) => distances[a] - distances[b]);
33
+ const closest = queue.shift();
34
+ if (visited[closest])
35
+ continue;
36
+ visited[closest] = true;
37
+ const neighbors = this.vertices.get(closest);
38
+ for (const neighbor in neighbors) {
39
+ if (neighbors.includes(neighbor)) {
40
+ const distanceToClosest = distances[closest];
41
+ if (distanceToClosest + 1 < distances[neighbor]) {
42
+ distances[neighbor] = distanceToClosest + 1;
43
+ previous[neighbor] = closest;
44
+ }
45
+ }
46
+ }
47
+ }
48
+ const path = [];
49
+ let shortestPathEnd = source;
50
+ while (previous[shortestPathEnd]) {
51
+ path.push(shortestPathEnd);
52
+ shortestPathEnd = previous[shortestPathEnd];
53
+ }
54
+ path.push(target);
55
+ path.reverse();
56
+ return {
57
+ distance: distances[source],
58
+ path: path,
59
+ };
60
+ }
61
+ }
62
+ exports.default = Graph;
63
+ const graph = new Graph();
64
+ graph.addVertex(1);
65
+ graph.addVertex(2);
66
+ graph.addVertex(3);
67
+ graph.addVertex(4);
68
+ graph.addVertex(5);
69
+ graph.addVertex(6);
70
+ graph.addVertex(7);
71
+ graph.addVertex(8);
72
+ graph.addVertex(9);
73
+ graph.addEdge(1, 2);
74
+ graph.addEdge(1, 3);
75
+ graph.addEdge(1, 4);
76
+ graph.addEdge(2, 4);
77
+ graph.addEdge(2, 3);
78
+ graph.addEdge(3, 7);
79
+ graph.addEdge(4, 7);
80
+ graph.addEdge(7, 9);
81
+ graph.addEdge(2, 9);
82
+ const a = graph.path(2, 9);
83
+ console.log(a);
package/lib/index.d.ts CHANGED
@@ -1,11 +1,12 @@
1
1
  export * from "./interface";
2
2
  export * from "./type";
3
3
  export * from "./delay";
4
- export * from "./database";
5
4
  export * from "./time";
6
- export * as platform from "./platform";
5
+ export * as tree from './tree';
7
6
  export * as set from "./set";
8
7
  export * as log from "./log";
9
8
  export * as color from "./color";
10
9
  export * as query from "./query";
11
10
  export * as transform from "./transform";
11
+ export * from './permission';
12
+ export { default as Graph } from "./graph";
package/lib/index.js CHANGED
@@ -25,16 +25,21 @@ var __importStar = (this && this.__importStar) || function (mod) {
25
25
  __setModuleDefault(result, mod);
26
26
  return result;
27
27
  };
28
+ var __importDefault = (this && this.__importDefault) || function (mod) {
29
+ return (mod && mod.__esModule) ? mod : { "default": mod };
30
+ };
28
31
  Object.defineProperty(exports, "__esModule", { value: true });
29
- exports.transform = exports.query = exports.color = exports.log = exports.set = exports.platform = void 0;
32
+ exports.Graph = exports.transform = exports.query = exports.color = exports.log = exports.set = exports.tree = void 0;
30
33
  __exportStar(require("./interface"), exports);
31
34
  __exportStar(require("./type"), exports);
32
35
  __exportStar(require("./delay"), exports);
33
- __exportStar(require("./database"), exports);
34
36
  __exportStar(require("./time"), exports);
35
- exports.platform = __importStar(require("./platform"));
37
+ exports.tree = __importStar(require("./tree"));
36
38
  exports.set = __importStar(require("./set"));
37
39
  exports.log = __importStar(require("./log"));
38
40
  exports.color = __importStar(require("./color"));
39
41
  exports.query = __importStar(require("./query"));
40
42
  exports.transform = __importStar(require("./transform"));
43
+ __exportStar(require("./permission"), exports);
44
+ var graph_1 = require("./graph");
45
+ Object.defineProperty(exports, "Graph", { enumerable: true, get: function () { return __importDefault(graph_1).default; } });
@@ -0,0 +1,11 @@
1
+ export type UserPermission = Record<string, string[]>;
2
+ type Auth = {
3
+ resource: string | RegExp;
4
+ actions?: string[];
5
+ };
6
+ export interface AuthParams {
7
+ requiredPermissions?: Array<Auth>;
8
+ oneOfPerm?: boolean;
9
+ }
10
+ export declare function permission(params: AuthParams, userPermission: UserPermission): boolean;
11
+ export {};
@@ -0,0 +1,43 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.permission = void 0;
4
+ const judge = (actions, perm) => {
5
+ if (!perm || !perm.length) {
6
+ return false;
7
+ }
8
+ if (perm.join('') === '*') {
9
+ return true;
10
+ }
11
+ return actions.every((action) => perm.includes(action));
12
+ };
13
+ const auth = (params, userPermission) => {
14
+ const { resource, actions = [] } = params;
15
+ if (resource instanceof RegExp) {
16
+ const permKeys = Object.keys(userPermission);
17
+ const matchPermissions = permKeys.filter((item) => item.match(resource));
18
+ if (!matchPermissions.length) {
19
+ return false;
20
+ }
21
+ return matchPermissions.every((key) => {
22
+ const perm = userPermission[key];
23
+ return judge(actions, perm);
24
+ });
25
+ }
26
+ const perm = userPermission[resource];
27
+ return judge(actions, perm);
28
+ };
29
+ function permission(params, userPermission) {
30
+ const { requiredPermissions, oneOfPerm } = params;
31
+ if (Array.isArray(requiredPermissions) && requiredPermissions.length) {
32
+ let count = 0;
33
+ for (const rp of requiredPermissions) {
34
+ if (auth(rp, userPermission)) {
35
+ count++;
36
+ }
37
+ }
38
+ return oneOfPerm ? count > 0 : count === requiredPermissions.length;
39
+ }
40
+ return true;
41
+ }
42
+ exports.permission = permission;
43
+ ;
package/lib/tree.d.ts ADDED
@@ -0,0 +1,2 @@
1
+ export declare function findNodeFormKey<D = any>(key: string, nodes: D[], id: string): D;
2
+ export declare function updateNodeFormKey<D = any>(key: string, nodes: D[], id: string, value: any): D[];
package/lib/tree.js ADDED
@@ -0,0 +1,39 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.updateNodeFormKey = exports.findNodeFormKey = void 0;
4
+ const lodash_1 = require("lodash");
5
+ function findNodeFormKey(key, nodes, id) {
6
+ if (!id)
7
+ return undefined;
8
+ const tree = (0, lodash_1.cloneDeep)(nodes);
9
+ const queue = [...tree];
10
+ while (queue.length > 0) {
11
+ const node = queue.shift();
12
+ const children = (0, lodash_1.get)(node, 'children', []);
13
+ if (node[key] === id) {
14
+ return node;
15
+ }
16
+ if (children.length > 0) {
17
+ queue.push(...children);
18
+ }
19
+ }
20
+ return undefined;
21
+ }
22
+ exports.findNodeFormKey = findNodeFormKey;
23
+ function updateNodeFormKey(key, nodes, id, value) {
24
+ const tree = (0, lodash_1.cloneDeep)(nodes);
25
+ const queue = [...tree];
26
+ while (queue.length > 0) {
27
+ const node = queue.shift();
28
+ const children = (0, lodash_1.get)(node, 'children', []);
29
+ if (node[key] === id) {
30
+ Object.assign(node, value);
31
+ return tree;
32
+ }
33
+ if (children.length > 0) {
34
+ queue.push(...children);
35
+ }
36
+ }
37
+ return null;
38
+ }
39
+ exports.updateNodeFormKey = updateNodeFormKey;
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@soratani-code/samtools",
3
- "version": "1.3.1",
3
+ "version": "1.3.3",
4
4
  "description": "",
5
5
  "typings": "lib/index.d.ts",
6
6
  "main": "lib/index.js",
@@ -17,7 +17,7 @@
17
17
  "build:dist": "rollup --config rollup.config.js && rm -rf dist/lib",
18
18
  "build:lib": "rm -rf lib && tsc -p ./tsconfig.json",
19
19
  "changeset": "changeset",
20
- "version": "changeset version && pnpm install"
20
+ "version": "changeset version"
21
21
  },
22
22
  "repository": {
23
23
  "type": "git",
@@ -29,6 +29,9 @@
29
29
  "url": "https://github.com/soratani/samtools/issues"
30
30
  },
31
31
  "homepage": "https://github.com/soratani/samtools#readme",
32
+ "peerDependencies": {
33
+ "lodash": "^4.17.21"
34
+ },
32
35
  "devDependencies": {
33
36
  "@changesets/cli": "^2.26.1",
34
37
  "@rollup/plugin-commonjs": "^25.0.7",
@@ -37,11 +40,13 @@
37
40
  "@rollup/plugin-typescript": "^11.1.6",
38
41
  "@types/enzyme": "^3.10.13",
39
42
  "@types/jest": "^29.5.2",
43
+ "@types/lodash": "^4.17.13",
40
44
  "@types/node": "^20.2.5",
41
45
  "@types/platform": "^1.3.3",
42
46
  "enzyme": "^3.11.0",
43
47
  "jest": "^29.5.0",
44
48
  "jest-enzyme": "^7.1.2",
49
+ "lodash": "^4.17.21",
45
50
  "rollup": "^4.14.2",
46
51
  "ts-jest": "^29.1.0",
47
52
  "ts-node": "^10.9.1",
package/lib/database.d.ts DELETED
@@ -1,9 +0,0 @@
1
- type PickKeys<T = any> = T[];
2
- type GetIndexedField<T, K> = K extends keyof T ? T[K] : K extends `${number}` ? 'length' extends keyof T ? number extends T['length'] ? number extends keyof T ? T[number] : undefined : undefined : undefined : undefined;
3
- type FieldWithPossiblyUndefined<T, Key> = GetFieldType<Exclude<T, undefined>, Key> | Extract<T, undefined>;
4
- type IndexedFieldWithPossiblyUndefined<T, Key> = GetIndexedField<Exclude<T, undefined>, Key> | Extract<T, undefined>;
5
- type GetFieldType<T, P> = P extends `${infer Left}.${infer Right}` ? Left extends keyof Exclude<T, undefined> ? FieldWithPossiblyUndefined<Exclude<T, undefined>[Left], Right> | Extract<T, undefined> : Left extends `${infer FieldKey}[${infer IndexKey}]` ? FieldKey extends keyof T ? FieldWithPossiblyUndefined<IndexedFieldWithPossiblyUndefined<T[FieldKey], IndexKey>, Right> : undefined : undefined : P extends keyof T ? T[P] : P extends `${infer FieldKey}[${infer IndexKey}]` ? FieldKey extends keyof T ? IndexedFieldWithPossiblyUndefined<T[FieldKey], IndexKey> : undefined : IndexedFieldWithPossiblyUndefined<T, P>;
6
- export declare function get<TObject, TPath extends string, TDefault = GetFieldType<TObject, TPath>>(data: TObject, id: TPath, defaultData?: TDefault): Exclude<GetFieldType<TObject, TPath>, null | undefined> | TDefault;
7
- export declare function pick<D extends object, T extends keyof D>(data: D, keys?: PickKeys<T>): Pick<D, T>;
8
- export declare function omit<D extends object, T extends keyof D>(data: D, keys?: PickKeys<T>): Omit<D, T>;
9
- export {};
package/lib/database.js DELETED
@@ -1,40 +0,0 @@
1
- "use strict";
2
- Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.omit = exports.pick = exports.get = void 0;
4
- const type_1 = require("./type");
5
- function get(data, id, defaultData) {
6
- if (!id || !data)
7
- return defaultData;
8
- let keys = id.replace(/[{}\[\]()]/g, '.').split('.').filter(Boolean);
9
- let node = data;
10
- while (keys.length && !(0, type_1.isNull)(node) && !(0, type_1.isUndefined)(node)) {
11
- const key = keys.shift();
12
- node = node[key];
13
- }
14
- return (node || defaultData);
15
- }
16
- exports.get = get;
17
- function pick(data, keys = []) {
18
- if (!data || !keys || !keys.length || !(0, type_1.isObject)(data))
19
- return data;
20
- return Object.entries(data).reduce((a, b) => {
21
- const [key, value] = b;
22
- if (keys.includes(key)) {
23
- a[key] = value;
24
- }
25
- return a;
26
- }, {});
27
- }
28
- exports.pick = pick;
29
- function omit(data, keys = []) {
30
- if (!data || !keys || !keys.length || !(0, type_1.isObject)(data))
31
- return data;
32
- return Object.entries(data).reduce((a, b) => {
33
- const [key, value] = b;
34
- if (!keys.includes(key)) {
35
- a[key] = value;
36
- }
37
- return a;
38
- }, {});
39
- }
40
- exports.omit = omit;
package/lib/platform.d.ts DELETED
@@ -1,4 +0,0 @@
1
- type System = 'windows' | 'mac' | 'linux' | 'android' | 'ios' | 'blackberry' | 'symbian' | 'webos' | 'unknown' | 'windows-phone';
2
- export declare function system(useragent?: string): System;
3
- export declare function version(useragent?: string): string;
4
- export {};
package/lib/platform.js DELETED
@@ -1,73 +0,0 @@
1
- "use strict";
2
- Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.version = exports.system = void 0;
4
- const database_1 = require("./database");
5
- const system_map = {
6
- 'Windows': 'windows',
7
- 'Macintosh': 'mac',
8
- 'Linux': 'linux',
9
- 'Android': 'android',
10
- 'iPhone': 'ios',
11
- 'iPad': 'ios',
12
- 'BlackBerry': 'blackberry',
13
- 'BB10': 'blackberry',
14
- 'SymbianOS': 'symbian',
15
- 'Windows Phone': 'windows-phone',
16
- 'webOS': 'webos',
17
- };
18
- function macVersion(useragent = navigator.userAgent) {
19
- const rule = /Mac OS X ([\d._]+)/;
20
- const match = (0, database_1.get)(rule.exec(useragent), '1');
21
- if (match) {
22
- const version = match.replace(/_/g, '.').replace(/\./g, ',').split(',').join('.');
23
- return version || 'unknown';
24
- }
25
- return 'unknown';
26
- }
27
- function windowsVersion(useragent = navigator.userAgent) {
28
- const rule = /Windows NT(\d+\.\d+)/i;
29
- const match = (0, database_1.get)(rule.exec(useragent), '1');
30
- return match || 'unknown';
31
- }
32
- function windowsPhoneVersion(useragent = navigator.userAgent) {
33
- const rule = /Windows Phone(\d+\.\d+)/i;
34
- const match = (0, database_1.get)(rule.exec(useragent), '1');
35
- return match || 'unknown';
36
- }
37
- function androidVersion(useragent = navigator.userAgent) {
38
- const rule = /Android (\d+(\.\d+)+(\.\d+)?)/i;
39
- const match = (0, database_1.get)(rule.exec(useragent), '1');
40
- return match || 'unknown';
41
- }
42
- function iosVersion(useragent = navigator.userAgent) {
43
- const rule = /CPU( iPhone)? OS (\d+)_(\d+)(?:_\d+)? like Mac OS X/i;
44
- const match_major = (0, database_1.get)(rule.exec(useragent), '2');
45
- const match_minor = (0, database_1.get)(rule.exec(useragent), '3');
46
- if (match_major && match_minor) {
47
- return `${parseInt(match_major)}.${parseInt(match_minor)}`;
48
- }
49
- return 'unknown';
50
- }
51
- function system(useragent = navigator.userAgent) {
52
- const rule = /(Windows|Macintosh|Android|iPhone|iPad|iPod|BlackBerry|BB10|SymbianOS|Windows Phone|webOS)/i;
53
- const match = (0, database_1.get)(rule.exec(useragent), '1');
54
- if (match && system_map[match])
55
- return system_map[match];
56
- return 'unknown';
57
- }
58
- exports.system = system;
59
- function version(useragent = navigator.userAgent) {
60
- const sys = system(useragent);
61
- if (sys === 'windows')
62
- return windowsVersion(useragent);
63
- if (sys === 'windows-phone')
64
- return windowsPhoneVersion(useragent);
65
- if (sys === 'mac')
66
- return macVersion(useragent);
67
- if (sys === 'android')
68
- return androidVersion(useragent);
69
- if (sys === 'ios')
70
- return iosVersion(useragent);
71
- return 'unknown';
72
- }
73
- exports.version = version;