@akanjs/common 0.9.41 → 0.9.43

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/Logger.d.ts CHANGED
@@ -4,6 +4,7 @@ export declare class Logger {
4
4
  #private;
5
5
  static level: LogLevel;
6
6
  static setLevel(level: LogLevel): void;
7
+ static isVerbose(): boolean;
7
8
  name?: string;
8
9
  constructor(name?: string);
9
10
  trace(msg: string, context?: string): void;
package/applyMixins.d.ts CHANGED
@@ -1,3 +1,3 @@
1
1
  type Type<T = any> = new (...args: any[]) => T;
2
- export declare const applyMixins: (derivedCtor: Type, constructors: (Type | undefined)[], avoidKeys?: Set<string>) => void;
2
+ export declare const applyMixins: (derivedCtor: Type, constructors: (Type | undefined)[], avoidKeys?: Set<string>) => Type<any>;
3
3
  export {};
package/cjs/Logger.js CHANGED
@@ -66,6 +66,9 @@ class Logger {
66
66
  this.level = level;
67
67
  this.#levelIdx = logLevels.findIndex((l) => l === level);
68
68
  }
69
+ static isVerbose() {
70
+ return this.#levelIdx <= 1;
71
+ }
69
72
  name;
70
73
  constructor(name) {
71
74
  this.name = name;
@@ -39,4 +39,5 @@ const applyMixins = (derivedCtor, constructors, avoidKeys) => {
39
39
  Object.defineProperty(derivedCtor.prototype, name, { ...descriptor, configurable: true });
40
40
  });
41
41
  });
42
+ return derivedCtor;
42
43
  };
@@ -0,0 +1,90 @@
1
+ var __defProp = Object.defineProperty;
2
+ var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
3
+ var __getOwnPropNames = Object.getOwnPropertyNames;
4
+ var __hasOwnProp = Object.prototype.hasOwnProperty;
5
+ var __export = (target, all) => {
6
+ for (var name in all)
7
+ __defProp(target, name, { get: all[name], enumerable: true });
8
+ };
9
+ var __copyProps = (to, from, except, desc) => {
10
+ if (from && typeof from === "object" || typeof from === "function") {
11
+ for (let key of __getOwnPropNames(from))
12
+ if (!__hasOwnProp.call(to, key) && key !== except)
13
+ __defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable });
14
+ }
15
+ return to;
16
+ };
17
+ var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod);
18
+ var getDependencyGraph_exports = {};
19
+ __export(getDependencyGraph_exports, {
20
+ getDependencyGraph: () => getDependencyGraph
21
+ });
22
+ module.exports = __toCommonJS(getDependencyGraph_exports);
23
+ const sortByDependencyLevels = (items) => {
24
+ const graph = /* @__PURE__ */ new Map();
25
+ const inDegree = /* @__PURE__ */ new Map();
26
+ const allKeys = /* @__PURE__ */ new Set();
27
+ for (const item of items) {
28
+ allKeys.add(item.key);
29
+ if (!graph.has(item.key))
30
+ graph.set(item.key, /* @__PURE__ */ new Set());
31
+ if (!inDegree.has(item.key))
32
+ inDegree.set(item.key, 0);
33
+ for (const dep of item.deps) {
34
+ const deps = graph.get(dep) ?? /* @__PURE__ */ new Set();
35
+ deps.add(item.key);
36
+ graph.set(dep, deps);
37
+ inDegree.set(item.key, (inDegree.get(item.key) ?? 0) + 1);
38
+ }
39
+ }
40
+ const queue = [];
41
+ const levels = [];
42
+ const visited = /* @__PURE__ */ new Set();
43
+ for (const [key, degree] of inDegree.entries()) {
44
+ if (degree === 0)
45
+ queue.push(key);
46
+ }
47
+ while (queue.length > 0) {
48
+ const currentLevel = [];
49
+ const queueSize = queue.length;
50
+ for (let i = 0; i < queueSize; i++) {
51
+ const node = queue.shift();
52
+ if (!node)
53
+ continue;
54
+ if (allKeys.has(node))
55
+ currentLevel.push(node);
56
+ visited.add(node);
57
+ const dependents = graph.get(node) ?? /* @__PURE__ */ new Set();
58
+ for (const dependent of dependents) {
59
+ const newDegree = (inDegree.get(dependent) ?? 0) - 1;
60
+ inDegree.set(dependent, newDegree);
61
+ if (newDegree === 0)
62
+ queue.push(dependent);
63
+ }
64
+ }
65
+ if (currentLevel.length > 0)
66
+ levels.push(currentLevel);
67
+ }
68
+ const missingDeps = [];
69
+ for (const item of items) {
70
+ for (const dep of item.deps) {
71
+ if (!allKeys.has(dep))
72
+ missingDeps.push(`${item.key} -> ${dep} (undefined)`);
73
+ }
74
+ }
75
+ if (missingDeps.length > 0)
76
+ throw new Error(`Missing dependencies: ${missingDeps.join(", ")}`);
77
+ if (visited.size < allKeys.size) {
78
+ const unvisited = Array.from(allKeys).filter((key) => !visited.has(key));
79
+ throw new Error(`Circular dependency detected involving: ${unvisited.join(", ")}`);
80
+ }
81
+ return levels;
82
+ };
83
+ const getDependencyGraph = (items) => {
84
+ const levels = sortByDependencyLevels(items);
85
+ const levelMap = /* @__PURE__ */ new Map();
86
+ levels.forEach((level, index) => {
87
+ level.forEach((key) => levelMap.set(key, index));
88
+ });
89
+ return { levels, levelMap };
90
+ };
package/cjs/index.js CHANGED
@@ -23,6 +23,7 @@ __export(common_exports, {
23
23
  deepObjectify: () => import_deepObjectify.deepObjectify,
24
24
  formatNumber: () => import_formatNumber.formatNumber,
25
25
  formatPhone: () => import_formatPhone.formatPhone,
26
+ getDependencyGraph: () => import_getDependencyGraph.getDependencyGraph,
26
27
  isDayjs: () => import_isDayjs.isDayjs,
27
28
  isEmail: () => import_isEmail.isEmail,
28
29
  isPhoneNumber: () => import_isPhoneNumber.isPhoneNumber,
@@ -61,3 +62,4 @@ var import_isEmail = require("./isEmail");
61
62
  var import_isPhoneNumber = require("./isPhoneNumber");
62
63
  var import_formatNumber = require("./formatNumber");
63
64
  var import_formatPhone = require("./formatPhone");
65
+ var import_getDependencyGraph = require("./getDependencyGraph");
package/esm/Logger.js CHANGED
@@ -34,6 +34,9 @@ class Logger {
34
34
  this.level = level;
35
35
  this.#levelIdx = logLevels.findIndex((l) => l === level);
36
36
  }
37
+ static isVerbose() {
38
+ return this.#levelIdx <= 1;
39
+ }
37
40
  name;
38
41
  constructor(name) {
39
42
  this.name = name;
@@ -17,6 +17,7 @@ const applyMixins = (derivedCtor, constructors, avoidKeys) => {
17
17
  Object.defineProperty(derivedCtor.prototype, name, { ...descriptor, configurable: true });
18
18
  });
19
19
  });
20
+ return derivedCtor;
20
21
  };
21
22
  export {
22
23
  applyMixins
@@ -0,0 +1,71 @@
1
+ const sortByDependencyLevels = (items) => {
2
+ const graph = /* @__PURE__ */ new Map();
3
+ const inDegree = /* @__PURE__ */ new Map();
4
+ const allKeys = /* @__PURE__ */ new Set();
5
+ for (const item of items) {
6
+ allKeys.add(item.key);
7
+ if (!graph.has(item.key))
8
+ graph.set(item.key, /* @__PURE__ */ new Set());
9
+ if (!inDegree.has(item.key))
10
+ inDegree.set(item.key, 0);
11
+ for (const dep of item.deps) {
12
+ const deps = graph.get(dep) ?? /* @__PURE__ */ new Set();
13
+ deps.add(item.key);
14
+ graph.set(dep, deps);
15
+ inDegree.set(item.key, (inDegree.get(item.key) ?? 0) + 1);
16
+ }
17
+ }
18
+ const queue = [];
19
+ const levels = [];
20
+ const visited = /* @__PURE__ */ new Set();
21
+ for (const [key, degree] of inDegree.entries()) {
22
+ if (degree === 0)
23
+ queue.push(key);
24
+ }
25
+ while (queue.length > 0) {
26
+ const currentLevel = [];
27
+ const queueSize = queue.length;
28
+ for (let i = 0; i < queueSize; i++) {
29
+ const node = queue.shift();
30
+ if (!node)
31
+ continue;
32
+ if (allKeys.has(node))
33
+ currentLevel.push(node);
34
+ visited.add(node);
35
+ const dependents = graph.get(node) ?? /* @__PURE__ */ new Set();
36
+ for (const dependent of dependents) {
37
+ const newDegree = (inDegree.get(dependent) ?? 0) - 1;
38
+ inDegree.set(dependent, newDegree);
39
+ if (newDegree === 0)
40
+ queue.push(dependent);
41
+ }
42
+ }
43
+ if (currentLevel.length > 0)
44
+ levels.push(currentLevel);
45
+ }
46
+ const missingDeps = [];
47
+ for (const item of items) {
48
+ for (const dep of item.deps) {
49
+ if (!allKeys.has(dep))
50
+ missingDeps.push(`${item.key} -> ${dep} (undefined)`);
51
+ }
52
+ }
53
+ if (missingDeps.length > 0)
54
+ throw new Error(`Missing dependencies: ${missingDeps.join(", ")}`);
55
+ if (visited.size < allKeys.size) {
56
+ const unvisited = Array.from(allKeys).filter((key) => !visited.has(key));
57
+ throw new Error(`Circular dependency detected involving: ${unvisited.join(", ")}`);
58
+ }
59
+ return levels;
60
+ };
61
+ const getDependencyGraph = (items) => {
62
+ const levels = sortByDependencyLevels(items);
63
+ const levelMap = /* @__PURE__ */ new Map();
64
+ levels.forEach((level, index) => {
65
+ level.forEach((key) => levelMap.set(key, index));
66
+ });
67
+ return { levels, levelMap };
68
+ };
69
+ export {
70
+ getDependencyGraph
71
+ };
package/esm/index.js CHANGED
@@ -19,6 +19,7 @@ import { isEmail } from "./isEmail";
19
19
  import { isPhoneNumber } from "./isPhoneNumber";
20
20
  import { formatNumber } from "./formatNumber";
21
21
  import { formatPhone } from "./formatPhone";
22
+ import { getDependencyGraph } from "./getDependencyGraph";
22
23
  export {
23
24
  Logger,
24
25
  applyMixins,
@@ -26,6 +27,7 @@ export {
26
27
  deepObjectify,
27
28
  formatNumber,
28
29
  formatPhone,
30
+ getDependencyGraph,
29
31
  isDayjs,
30
32
  isEmail,
31
33
  isPhoneNumber,
@@ -0,0 +1,16 @@
1
+ interface DependencyItem {
2
+ key: string;
3
+ deps: string[];
4
+ }
5
+ interface DependencyGraph {
6
+ levels: string[][];
7
+ levelMap: Map<string, number>;
8
+ }
9
+ /**
10
+ * Alternative: Returns a more detailed dependency graph with level information
11
+ */
12
+ export declare const getDependencyGraph: (items: DependencyItem[]) => DependencyGraph;
13
+ export {};
14
+ /**
15
+ * Helper function to validate dependencies
16
+ */
package/index.d.ts CHANGED
@@ -20,3 +20,4 @@ export { isEmail } from "./isEmail";
20
20
  export { isPhoneNumber } from "./isPhoneNumber";
21
21
  export { formatNumber } from "./formatNumber";
22
22
  export { formatPhone } from "./formatPhone";
23
+ export { getDependencyGraph } from "./getDependencyGraph";
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@akanjs/common",
3
- "version": "0.9.41",
3
+ "version": "0.9.43",
4
4
  "sourceType": "module",
5
5
  "publishConfig": {
6
6
  "access": "public"