@nine-lab/nine-util 0.1.0 โ†’ 0.3.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/dist/nine-util.js CHANGED
@@ -6,29 +6,48 @@ var __privateGet = (obj, member, getter) => (__accessCheck(obj, member, "read fr
6
6
  var __privateAdd = (obj, member, value) => member.has(obj) ? __typeError("Cannot add the same private member more than once") : member instanceof WeakSet ? member.add(obj) : member.set(obj, value);
7
7
  var __privateSet = (obj, member, value, setter) => (__accessCheck(obj, member, "write to private field"), setter ? setter.call(obj, value) : member.set(obj, value), value);
8
8
  var __privateMethod = (obj, member, method) => (__accessCheck(obj, member, "access private method"), method);
9
- var _name, _color, _timer, _queue, _delay, _TaskDebouncer_instances, flush_fn;
9
+ var _name, _color, _enabled, _timer, _queue, _delay, _TaskDebouncer_instances, flush_fn;
10
10
  class Trace {
11
- constructor(name = "util", color = "#4CAF50") {
11
+ // ๐Ÿ‘ˆ ์ด ์ƒํƒœ๊ฐ’์ด ๊ธฐ์ค€์ด ๋ฉ๋‹ˆ๋‹ค.
12
+ constructor(name = "nine-util", color = "#4CAF50") {
12
13
  __privateAdd(this, _name);
13
14
  __privateAdd(this, _color);
14
- this.init(name, color);
15
+ __privateAdd(this, _enabled, true);
16
+ __privateSet(this, _name, name);
17
+ __privateSet(this, _color, color);
15
18
  }
16
19
  init(name, color = "#4CAF50") {
17
20
  __privateSet(this, _name, name);
18
21
  __privateSet(this, _color, color);
22
+ }
23
+ // ๐Ÿ”ด ํ•ต์‹ฌ: ํ•จ์ˆ˜๋ฅผ ๊ฐˆ์•„๋ผ์šฐ์ง€ ์•Š๊ณ , ํ˜ธ์ถœ๋  ๋•Œ๋งˆ๋‹ค ์ƒํƒœ๋ฅผ ์ฒดํฌํ•ฉ๋‹ˆ๋‹ค.
24
+ log(...args) {
25
+ if (!__privateGet(this, _enabled)) return;
19
26
  const style = `color: ${__privateGet(this, _color)}; font-weight: bold;`;
20
- this.log = console.log.bind(console, `%c[${__privateGet(this, _name)}]`, style);
21
- this.error = console.error.bind(console, `%c[${__privateGet(this, _name)}-ERR]`, "color: #ff4444; font-weight: bold;");
22
- this.warn = console.warn.bind(console, `%c[${__privateGet(this, _name)}-WARN]`, "color: #ffeb3b; font-weight: bold;");
27
+ console.log(`%c[${__privateGet(this, _name)}]`, style, ...args);
28
+ }
29
+ warn(...args) {
30
+ if (!__privateGet(this, _enabled)) return;
31
+ console.warn(`%c[${__privateGet(this, _name)}-WARN]`, "color: #ffeb3b; font-weight: bold;", ...args);
32
+ }
33
+ error(...args) {
34
+ if (!__privateGet(this, _enabled)) return;
35
+ console.error(`%c[${__privateGet(this, _name)}-ERR]`, "color: #ff4444; font-weight: bold;", ...args);
36
+ }
37
+ enable() {
38
+ __privateSet(this, _enabled, true);
23
39
  }
24
40
  disable() {
25
- this.log = this.error = this.warn = () => {
26
- };
41
+ __privateSet(this, _enabled, false);
27
42
  }
28
43
  }
29
44
  _name = new WeakMap();
30
45
  _color = new WeakMap();
31
- new Trace();
46
+ _enabled = new WeakMap();
47
+ const trace = new Trace();
48
+ if (typeof window !== "undefined") {
49
+ window.trace = trace;
50
+ }
32
51
  class TaskDebouncer {
33
52
  constructor(delay = 50) {
34
53
  __privateAdd(this, _TaskDebouncer_instances);
@@ -66,7 +85,6 @@ flush_fn = function() {
66
85
  });
67
86
  __privateSet(this, _timer, null);
68
87
  };
69
- const trace = new Trace("util", "#4CAF50");
70
88
  export {
71
89
  TaskDebouncer,
72
90
  Trace,
@@ -1 +1 @@
1
- {"version":3,"file":"nine-util.js","sources":["../src/Trace.js","../src/TaskDebouncer.js","../src/index.js"],"sourcesContent":["export class Trace {\r\n\t#name;\r\n\t#color;\r\n\r\n\tconstructor(name = \"util\", color = \"#4CAF50\") {\r\n\t\tthis.init(name, color);\r\n\t}\r\n\r\n\tinit(name, color = \"#4CAF50\") {\r\n\t\tthis.#name = name;\r\n\t\tthis.#color = color;\r\n\t\tconst style = `color: ${this.#color}; font-weight: bold;`;\r\n\r\n\t\tthis.log = console.log.bind(console, `%c[${this.#name}]`, style);\r\n\t\tthis.error = console.error.bind(console, `%c[${this.#name}-ERR]`, \"color: #ff4444; font-weight: bold;\");\r\n\t\tthis.warn = console.warn.bind(console, `%c[${this.#name}-WARN]`, \"color: #ffeb3b; font-weight: bold;\");\r\n\t}\r\n\r\n\tdisable() {\r\n\t\tthis.log = this.error = this.warn = () => {};\r\n\t}\r\n}\r\n\r\n// ๊ธฐ๋ณธ ์ธ์Šคํ„ด์Šค ๋‚ด๋ณด๋‚ด๊ธฐ\r\nexport const trace = new Trace();","export class TaskDebouncer {\r\n\t#timer = null;\r\n\t#queue = [];\r\n\t#delay;\r\n\r\n\tconstructor(delay = 50) {\r\n\t\tthis.#delay = delay;\r\n\t}\r\n\r\n\t/**\r\n\t * @param {Function} func - ์‹คํ–‰ํ•  ํ•จ์ˆ˜\r\n\t * @param {...any} args - ํ•จ์ˆ˜์— ์ „๋‹ฌํ•  ์ž„์˜์˜ ํŒŒ๋ผ๋ฏธํ„ฐ๋“ค\r\n\t */\r\n\texec(func, ...args) {\r\n\t\t// 1. ์–ด๋–ค ํ•จ์ˆ˜์™€ ์–ด๋–ค ์ธ์ž๋“ค์ด ๋“ค์–ด์™”๋Š”์ง€ ํ์— ์ €์žฅ\r\n\t\tthis.#queue.push({ func, args });\r\n\r\n\t\t// 2. ๋””๋ฐ”์šด์Šค ํƒ€์ด๋จธ ์„ค์ •\r\n\t\tif (this.#timer) clearTimeout(this.#timer);\r\n\r\n\t\tthis.#timer = setTimeout(() => {\r\n\t\t\tthis.#flush();\r\n\t\t}, this.#delay);\r\n\t}\r\n\r\n\t#flush() {\r\n\t\tif (this.#queue.length === 0) return;\r\n\r\n\t\t// 3. ํ˜„์žฌ๊นŒ์ง€ ์Œ“์ธ ํ๋ฅผ ์™ ๋นผ์˜ด\r\n\t\tconst tasks = this.#queue.splice(0, this.#queue.length);\r\n\t\tconst seen = new Set();\r\n\r\n\t\ttasks.forEach(task => {\r\n\t\t\t// 4. ํ•ต์‹ฌ: ํ•จ์ˆ˜ ์ด๋ฆ„๊ณผ ์ธ์ž๋“ค์„ ๋ฌธ์ž์—ด๋กœ ํ•ฉ์ณ์„œ ์œ ๋‹ˆํฌ ํ‚ค ์ƒ์„ฑ\r\n\t\t\t// JSON.stringify๋ฅผ ํ†ตํ•ด [1, {a:1}] ๊ฐ™์€ ํŒŒ๋ผ๋ฏธํ„ฐ๋„ ๋ฌธ์ž์—ด๋กœ ๋น„๊ต ๊ฐ€๋Šฅ\r\n\t\t\tconst identifier = `${task.func.name}_${JSON.stringify(task.args)}`;\r\n\r\n\t\t\tif (!seen.has(identifier)) {\r\n\t\t\t\t// 5. ์ค‘๋ณต์ด ์•„๋‹ ๋•Œ๋งŒ ์›๋ž˜ ์ธ์ž๋“ค(...args) ๊ทธ๋Œ€๋กœ ์‹คํ–‰\r\n\t\t\t\ttask.func(...task.args);\r\n\t\t\t\tseen.add(identifier);\r\n\t\t\t}\r\n\t\t});\r\n\r\n\t\tthis.#timer = null;\r\n\t}\r\n}","import { Trace } from './Trace.js';\r\nimport { TaskDebouncer } from './TaskDebouncer.js';\r\n\r\n// 1. ๊ธฐ๋ณธ ์ธ์Šคํ„ด์Šค๋ฅผ ๋‚ด๋ณด๋‚ด๋˜, ์ด๋ฆ„์€ 'util' ๊ฐ™์€ ๋ฒ”์šฉ์ ์ธ ๊ฐ’์œผ๋กœ ์„ค์ •\r\nconst trace = new Trace(\"util\", \"#4CAF50\");\r\n\r\n// 2. ์‚ฌ์šฉ์ž๊ฐ€ ์›ํ•œ๋‹ค๋ฉด ์ด๋ฆ„ํ‘œ๋ฅผ ๋ฐ”๊ฟ€ ์ˆ˜ ์žˆ๋Š” ๊ธฐ๋Šฅ ์ œ๊ณต (์„ ํƒ ์‚ฌํ•ญ)\r\n// trace.init(\"my-app\") ์ฒ˜๋Ÿผ ํ˜ธ์ถœ ๊ฐ€๋Šฅํ•˜๊ฒŒ Trace ํด๋ž˜์Šค์— ๋ฉ”์„œ๋“œ๊ฐ€ ์žˆ๋‹ค๋ฉด ๋ฒ ์ŠคํŠธ!\r\n\r\nexport {\r\n\tTrace,\r\n\tTaskDebouncer,\r\n\ttrace // ๋ฏธ๋ฆฌ ๋งŒ๋“  ์ธ์Šคํ„ด์Šค\r\n};"],"names":[],"mappings":";;;;;;;;AAAO;AAAA,MAAM,MAAM;AAAA,EAIlB,YAAY,OAAO,QAAQ,QAAQ,WAAW;AAH9C;AACA;AAGC,SAAK,KAAK,MAAM,KAAK;AAAA,EACtB;AAAA,EAEA,KAAK,MAAM,QAAQ,WAAW;AAC7B,uBAAK,OAAQ;AACb,uBAAK,QAAS;AACd,UAAM,QAAQ,UAAU,mBAAK,OAAM;AAEnC,SAAK,MAAM,QAAQ,IAAI,KAAK,SAAS,MAAM,mBAAK,MAAK,KAAK,KAAK;AAC/D,SAAK,QAAQ,QAAQ,MAAM,KAAK,SAAS,MAAM,mBAAK,MAAK,SAAS,oCAAoC;AACtG,SAAK,OAAO,QAAQ,KAAK,KAAK,SAAS,MAAM,mBAAK,MAAK,UAAU,oCAAoC;AAAA,EACtG;AAAA,EAEA,UAAU;AACT,SAAK,MAAM,KAAK,QAAQ,KAAK,OAAO,MAAM;AAAA,IAAC;AAAA,EAC5C;AACD;AApBC;AACA;AAsBoB,IAAI,MAAK;ACxBvB,MAAM,cAAc;AAAA,EAK1B,YAAY,QAAQ,IAAI;AALlB;AACN,+BAAS;AACT,+BAAS,CAAA;AACT;AAGC,uBAAK,QAAS;AAAA,EACf;AAAA;AAAA;AAAA;AAAA;AAAA,EAMA,KAAK,SAAS,MAAM;AAEnB,uBAAK,QAAO,KAAK,EAAE,MAAM,KAAI,CAAE;AAG/B,QAAI,mBAAK,QAAQ,cAAa,mBAAK,OAAM;AAEzC,uBAAK,QAAS,WAAW,MAAM;AAC9B,4BAAK,oCAAL;AAAA,IACD,GAAG,mBAAK,OAAM;AAAA,EACf;AAuBD;AA7CC;AACA;AACA;AAHM;AAyBN,WAAM,WAAG;AACR,MAAI,mBAAK,QAAO,WAAW,EAAG;AAG9B,QAAM,QAAQ,mBAAK,QAAO,OAAO,GAAG,mBAAK,QAAO,MAAM;AACtD,QAAM,OAAO,oBAAI;AAEjB,QAAM,QAAQ,UAAQ;AAGrB,UAAM,aAAa,GAAG,KAAK,KAAK,IAAI,IAAI,KAAK,UAAU,KAAK,IAAI,CAAC;AAEjE,QAAI,CAAC,KAAK,IAAI,UAAU,GAAG;AAE1B,WAAK,KAAK,GAAG,KAAK,IAAI;AACtB,WAAK,IAAI,UAAU;AAAA,IACpB;AAAA,EACD,CAAC;AAED,qBAAK,QAAS;AACf;ACzCI,MAAC,QAAQ,IAAI,MAAM,QAAQ,SAAS;"}
1
+ {"version":3,"file":"nine-util.js","sources":["../src/Trace.js","../src/TaskDebouncer.js"],"sourcesContent":["export class Trace {\r\n\t#name;\r\n\t#color;\r\n\t#enabled = true; // ๐Ÿ‘ˆ ์ด ์ƒํƒœ๊ฐ’์ด ๊ธฐ์ค€์ด ๋ฉ๋‹ˆ๋‹ค.\r\n\r\n\tconstructor(name = \"nine-util\", color = \"#4CAF50\") {\r\n\t\tthis.#name = name;\r\n\t\tthis.#color = color;\r\n\t}\r\n\r\n\tinit(name, color = \"#4CAF50\") {\r\n\t\tthis.#name = name;\r\n\t\tthis.#color = color;\r\n\t}\r\n\r\n\t// ๐Ÿ”ด ํ•ต์‹ฌ: ํ•จ์ˆ˜๋ฅผ ๊ฐˆ์•„๋ผ์šฐ์ง€ ์•Š๊ณ , ํ˜ธ์ถœ๋  ๋•Œ๋งˆ๋‹ค ์ƒํƒœ๋ฅผ ์ฒดํฌํ•ฉ๋‹ˆ๋‹ค.\r\n\tlog(...args) {\r\n\t\tif (!this.#enabled) return;\r\n\t\tconst style = `color: ${this.#color}; font-weight: bold;`;\r\n\t\tconsole.log(`%c[${this.#name}]`, style, ...args);\r\n\t}\r\n\r\n\twarn(...args) {\r\n\t\tif (!this.#enabled) return;\r\n\t\tconsole.warn(`%c[${this.#name}-WARN]`, \"color: #ffeb3b; font-weight: bold;\", ...args);\r\n\t}\r\n\r\n\terror(...args) {\r\n\t\tif (!this.#enabled) return;\r\n\t\tconsole.error(`%c[${this.#name}-ERR]`, \"color: #ff4444; font-weight: bold;\", ...args);\r\n\t}\r\n\r\n\tenable() { this.#enabled = true; }\r\n\tdisable() { this.#enabled = false; }\r\n}\r\n\r\nexport const trace = new Trace();\r\n\r\n// ๋ธŒ๋ผ์šฐ์ € ์ฝ˜์†”์—์„œ ์ฆ‰์‹œ ์ œ์–ดํ•  ์ˆ˜ ์žˆ๋„๋ก window์— ์—ฐ๊ฒฐ\r\nif (typeof window !== 'undefined') {\r\n\twindow.trace = trace;\r\n}","export class TaskDebouncer {\r\n\t#timer = null;\r\n\t#queue = [];\r\n\t#delay;\r\n\r\n\tconstructor(delay = 50) {\r\n\t\tthis.#delay = delay;\r\n\t}\r\n\r\n\t/**\r\n\t * @param {Function} func - ์‹คํ–‰ํ•  ํ•จ์ˆ˜\r\n\t * @param {...any} args - ํ•จ์ˆ˜์— ์ „๋‹ฌํ•  ์ž„์˜์˜ ํŒŒ๋ผ๋ฏธํ„ฐ๋“ค\r\n\t */\r\n\texec(func, ...args) {\r\n\t\t// 1. ์–ด๋–ค ํ•จ์ˆ˜์™€ ์–ด๋–ค ์ธ์ž๋“ค์ด ๋“ค์–ด์™”๋Š”์ง€ ํ์— ์ €์žฅ\r\n\t\tthis.#queue.push({ func, args });\r\n\r\n\t\t// 2. ๋””๋ฐ”์šด์Šค ํƒ€์ด๋จธ ์„ค์ •\r\n\t\tif (this.#timer) clearTimeout(this.#timer);\r\n\r\n\t\tthis.#timer = setTimeout(() => {\r\n\t\t\tthis.#flush();\r\n\t\t}, this.#delay);\r\n\t}\r\n\r\n\t#flush() {\r\n\t\tif (this.#queue.length === 0) return;\r\n\r\n\t\t// 3. ํ˜„์žฌ๊นŒ์ง€ ์Œ“์ธ ํ๋ฅผ ์™ ๋นผ์˜ด\r\n\t\tconst tasks = this.#queue.splice(0, this.#queue.length);\r\n\t\tconst seen = new Set();\r\n\r\n\t\ttasks.forEach(task => {\r\n\t\t\t// 4. ํ•ต์‹ฌ: ํ•จ์ˆ˜ ์ด๋ฆ„๊ณผ ์ธ์ž๋“ค์„ ๋ฌธ์ž์—ด๋กœ ํ•ฉ์ณ์„œ ์œ ๋‹ˆํฌ ํ‚ค ์ƒ์„ฑ\r\n\t\t\t// JSON.stringify๋ฅผ ํ†ตํ•ด [1, {a:1}] ๊ฐ™์€ ํŒŒ๋ผ๋ฏธํ„ฐ๋„ ๋ฌธ์ž์—ด๋กœ ๋น„๊ต ๊ฐ€๋Šฅ\r\n\t\t\tconst identifier = `${task.func.name}_${JSON.stringify(task.args)}`;\r\n\r\n\t\t\tif (!seen.has(identifier)) {\r\n\t\t\t\t// 5. ์ค‘๋ณต์ด ์•„๋‹ ๋•Œ๋งŒ ์›๋ž˜ ์ธ์ž๋“ค(...args) ๊ทธ๋Œ€๋กœ ์‹คํ–‰\r\n\t\t\t\ttask.func(...task.args);\r\n\t\t\t\tseen.add(identifier);\r\n\t\t\t}\r\n\t\t});\r\n\r\n\t\tthis.#timer = null;\r\n\t}\r\n}"],"names":[],"mappings":";;;;;;;;AAAO;AAAA,MAAM,MAAM;AAAA;AAAA,EAKlB,YAAY,OAAO,aAAa,QAAQ,WAAW;AAJnD;AACA;AACA,iCAAW;AAGV,uBAAK,OAAQ;AACb,uBAAK,QAAS;AAAA,EACf;AAAA,EAEA,KAAK,MAAM,QAAQ,WAAW;AAC7B,uBAAK,OAAQ;AACb,uBAAK,QAAS;AAAA,EACf;AAAA;AAAA,EAGA,OAAO,MAAM;AACZ,QAAI,CAAC,mBAAK,UAAU;AACpB,UAAM,QAAQ,UAAU,mBAAK,OAAM;AACnC,YAAQ,IAAI,MAAM,mBAAK,MAAK,KAAK,OAAO,GAAG,IAAI;AAAA,EAChD;AAAA,EAEA,QAAQ,MAAM;AACb,QAAI,CAAC,mBAAK,UAAU;AACpB,YAAQ,KAAK,MAAM,mBAAK,MAAK,UAAU,sCAAsC,GAAG,IAAI;AAAA,EACrF;AAAA,EAEA,SAAS,MAAM;AACd,QAAI,CAAC,mBAAK,UAAU;AACpB,YAAQ,MAAM,MAAM,mBAAK,MAAK,SAAS,sCAAsC,GAAG,IAAI;AAAA,EACrF;AAAA,EAEA,SAAS;AAAE,uBAAK,UAAW;AAAA,EAAM;AAAA,EACjC,UAAU;AAAE,uBAAK,UAAW;AAAA,EAAO;AACpC;AAjCC;AACA;AACA;AAiCW,MAAC,QAAQ,IAAI,MAAK;AAG9B,IAAI,OAAO,WAAW,aAAa;AAClC,SAAO,QAAQ;AAChB;ACzCO,MAAM,cAAc;AAAA,EAK1B,YAAY,QAAQ,IAAI;AALlB;AACN,+BAAS;AACT,+BAAS,CAAA;AACT;AAGC,uBAAK,QAAS;AAAA,EACf;AAAA;AAAA;AAAA;AAAA;AAAA,EAMA,KAAK,SAAS,MAAM;AAEnB,uBAAK,QAAO,KAAK,EAAE,MAAM,KAAI,CAAE;AAG/B,QAAI,mBAAK,QAAQ,cAAa,mBAAK,OAAM;AAEzC,uBAAK,QAAS,WAAW,MAAM;AAC9B,4BAAK,oCAAL;AAAA,IACD,GAAG,mBAAK,OAAM;AAAA,EACf;AAuBD;AA7CC;AACA;AACA;AAHM;AAyBN,WAAM,WAAG;AACR,MAAI,mBAAK,QAAO,WAAW,EAAG;AAG9B,QAAM,QAAQ,mBAAK,QAAO,OAAO,GAAG,mBAAK,QAAO,MAAM;AACtD,QAAM,OAAO,oBAAI;AAEjB,QAAM,QAAQ,UAAQ;AAGrB,UAAM,aAAa,GAAG,KAAK,KAAK,IAAI,IAAI,KAAK,UAAU,KAAK,IAAI,CAAC;AAEjE,QAAI,CAAC,KAAK,IAAI,UAAU,GAAG;AAE1B,WAAK,KAAK,GAAG,KAAK,IAAI;AACtB,WAAK,IAAI,UAAU;AAAA,IACpB;AAAA,EACD,CAAC;AAED,qBAAK,QAAS;AACf;"}
@@ -1,2 +1,2 @@
1
- !function(e,t){"object"==typeof exports&&"undefined"!=typeof module?t(exports):"function"==typeof define&&define.amd?define(["exports"],t):t((e="undefined"!=typeof globalThis?globalThis:e||self).NineUtil={})}(this,function(e){"use strict";var t,i,s,o,n,a,r,h=e=>{throw TypeError(e)},c=(e,t,i)=>t.has(e)||h("Cannot "+i),l=(e,t,i)=>(c(e,t,"read from private field"),i?i.call(e):t.get(e)),f=(e,t,i)=>t.has(e)?h("Cannot add the same private member more than once"):t instanceof WeakSet?t.add(e):t.set(e,i),d=(e,t,i,s)=>(c(e,t,"write to private field"),s?s.call(e,i):t.set(e,i),i);class u{constructor(e="util",s="#4CAF50"){f(this,t),f(this,i),this.init(e,s)}init(e,s="#4CAF50"){d(this,t,e),d(this,i,s);const o=`color: ${l(this,i)}; font-weight: bold;`;this.log=console.log.bind(console,`%c[${l(this,t)}]`,o),this.error=console.error.bind(console,`%c[${l(this,t)}-ERR]`,"color: #ff4444; font-weight: bold;"),this.warn=console.warn.bind(console,`%c[${l(this,t)}-WARN]`,"color: #ffeb3b; font-weight: bold;")}disable(){this.log=this.error=this.warn=()=>{}}}t=new WeakMap,i=new WeakMap,new u;s=new WeakMap,o=new WeakMap,n=new WeakMap,a=new WeakSet,r=function(){if(0===l(this,o).length)return;const e=l(this,o).splice(0,l(this,o).length),t=new Set;e.forEach(e=>{const i=`${e.func.name}_${JSON.stringify(e.args)}`;t.has(i)||(e.func(...e.args),t.add(i))}),d(this,s,null)};const p=new u("util","#4CAF50");e.TaskDebouncer=class{constructor(e=50){f(this,a),f(this,s,null),f(this,o,[]),f(this,n),d(this,n,e)}exec(e,...t){l(this,o).push({func:e,args:t}),l(this,s)&&clearTimeout(l(this,s)),d(this,s,setTimeout(()=>{var e,t,i;(e=this,t=a,i=r,c(e,t,"access private method"),i).call(this)},l(this,n)))}},e.Trace=u,e.trace=p,Object.defineProperty(e,Symbol.toStringTag,{value:"Module"})});
1
+ !function(e,t){"object"==typeof exports&&"undefined"!=typeof module?t(exports):"function"==typeof define&&define.amd?define(["exports"],t):t((e="undefined"!=typeof globalThis?globalThis:e||self).NineUtil={})}(this,function(e){"use strict";var t,i,s,n,o,a,r,h,c=e=>{throw TypeError(e)},l=(e,t,i)=>t.has(e)||c("Cannot "+i),f=(e,t,i)=>(l(e,t,"read from private field"),i?i.call(e):t.get(e)),d=(e,t,i)=>t.has(e)?c("Cannot add the same private member more than once"):t instanceof WeakSet?t.add(e):t.set(e,i),u=(e,t,i,s)=>(l(e,t,"write to private field"),s?s.call(e,i):t.set(e,i),i);class p{constructor(e="nine-util",n="#4CAF50"){d(this,t),d(this,i),d(this,s,!0),u(this,t,e),u(this,i,n)}init(e,s="#4CAF50"){u(this,t,e),u(this,i,s)}log(...e){if(!f(this,s))return;const n=`color: ${f(this,i)}; font-weight: bold;`;console.log(`%c[${f(this,t)}]`,n,...e)}warn(...e){f(this,s)&&console.warn(`%c[${f(this,t)}-WARN]`,"color: #ffeb3b; font-weight: bold;",...e)}error(...e){f(this,s)&&console.error(`%c[${f(this,t)}-ERR]`,"color: #ff4444; font-weight: bold;",...e)}enable(){u(this,s,!0)}disable(){u(this,s,!1)}}t=new WeakMap,i=new WeakMap,s=new WeakMap;const w=new p;"undefined"!=typeof window&&(window.trace=w);n=new WeakMap,o=new WeakMap,a=new WeakMap,r=new WeakSet,h=function(){if(0===f(this,o).length)return;const e=f(this,o).splice(0,f(this,o).length),t=new Set;e.forEach(e=>{const i=`${e.func.name}_${JSON.stringify(e.args)}`;t.has(i)||(e.func(...e.args),t.add(i))}),u(this,n,null)},e.TaskDebouncer=class{constructor(e=50){d(this,r),d(this,n,null),d(this,o,[]),d(this,a),u(this,a,e)}exec(e,...t){f(this,o).push({func:e,args:t}),f(this,n)&&clearTimeout(f(this,n)),u(this,n,setTimeout(()=>{var e,t,i;(e=this,t=r,i=h,l(e,t,"access private method"),i).call(this)},f(this,a)))}},e.Trace=p,e.trace=w,Object.defineProperty(e,Symbol.toStringTag,{value:"Module"})});
2
2
  //# sourceMappingURL=nine-util.umd.cjs.map
@@ -1 +1 @@
1
- {"version":3,"file":"nine-util.umd.cjs","sources":["../src/Trace.js","../src/TaskDebouncer.js","../src/index.js"],"sourcesContent":["export class Trace {\r\n\t#name;\r\n\t#color;\r\n\r\n\tconstructor(name = \"util\", color = \"#4CAF50\") {\r\n\t\tthis.init(name, color);\r\n\t}\r\n\r\n\tinit(name, color = \"#4CAF50\") {\r\n\t\tthis.#name = name;\r\n\t\tthis.#color = color;\r\n\t\tconst style = `color: ${this.#color}; font-weight: bold;`;\r\n\r\n\t\tthis.log = console.log.bind(console, `%c[${this.#name}]`, style);\r\n\t\tthis.error = console.error.bind(console, `%c[${this.#name}-ERR]`, \"color: #ff4444; font-weight: bold;\");\r\n\t\tthis.warn = console.warn.bind(console, `%c[${this.#name}-WARN]`, \"color: #ffeb3b; font-weight: bold;\");\r\n\t}\r\n\r\n\tdisable() {\r\n\t\tthis.log = this.error = this.warn = () => {};\r\n\t}\r\n}\r\n\r\n// ๊ธฐ๋ณธ ์ธ์Šคํ„ด์Šค ๋‚ด๋ณด๋‚ด๊ธฐ\r\nexport const trace = new Trace();","export class TaskDebouncer {\r\n\t#timer = null;\r\n\t#queue = [];\r\n\t#delay;\r\n\r\n\tconstructor(delay = 50) {\r\n\t\tthis.#delay = delay;\r\n\t}\r\n\r\n\t/**\r\n\t * @param {Function} func - ์‹คํ–‰ํ•  ํ•จ์ˆ˜\r\n\t * @param {...any} args - ํ•จ์ˆ˜์— ์ „๋‹ฌํ•  ์ž„์˜์˜ ํŒŒ๋ผ๋ฏธํ„ฐ๋“ค\r\n\t */\r\n\texec(func, ...args) {\r\n\t\t// 1. ์–ด๋–ค ํ•จ์ˆ˜์™€ ์–ด๋–ค ์ธ์ž๋“ค์ด ๋“ค์–ด์™”๋Š”์ง€ ํ์— ์ €์žฅ\r\n\t\tthis.#queue.push({ func, args });\r\n\r\n\t\t// 2. ๋””๋ฐ”์šด์Šค ํƒ€์ด๋จธ ์„ค์ •\r\n\t\tif (this.#timer) clearTimeout(this.#timer);\r\n\r\n\t\tthis.#timer = setTimeout(() => {\r\n\t\t\tthis.#flush();\r\n\t\t}, this.#delay);\r\n\t}\r\n\r\n\t#flush() {\r\n\t\tif (this.#queue.length === 0) return;\r\n\r\n\t\t// 3. ํ˜„์žฌ๊นŒ์ง€ ์Œ“์ธ ํ๋ฅผ ์™ ๋นผ์˜ด\r\n\t\tconst tasks = this.#queue.splice(0, this.#queue.length);\r\n\t\tconst seen = new Set();\r\n\r\n\t\ttasks.forEach(task => {\r\n\t\t\t// 4. ํ•ต์‹ฌ: ํ•จ์ˆ˜ ์ด๋ฆ„๊ณผ ์ธ์ž๋“ค์„ ๋ฌธ์ž์—ด๋กœ ํ•ฉ์ณ์„œ ์œ ๋‹ˆํฌ ํ‚ค ์ƒ์„ฑ\r\n\t\t\t// JSON.stringify๋ฅผ ํ†ตํ•ด [1, {a:1}] ๊ฐ™์€ ํŒŒ๋ผ๋ฏธํ„ฐ๋„ ๋ฌธ์ž์—ด๋กœ ๋น„๊ต ๊ฐ€๋Šฅ\r\n\t\t\tconst identifier = `${task.func.name}_${JSON.stringify(task.args)}`;\r\n\r\n\t\t\tif (!seen.has(identifier)) {\r\n\t\t\t\t// 5. ์ค‘๋ณต์ด ์•„๋‹ ๋•Œ๋งŒ ์›๋ž˜ ์ธ์ž๋“ค(...args) ๊ทธ๋Œ€๋กœ ์‹คํ–‰\r\n\t\t\t\ttask.func(...task.args);\r\n\t\t\t\tseen.add(identifier);\r\n\t\t\t}\r\n\t\t});\r\n\r\n\t\tthis.#timer = null;\r\n\t}\r\n}","import { Trace } from './Trace.js';\r\nimport { TaskDebouncer } from './TaskDebouncer.js';\r\n\r\n// 1. ๊ธฐ๋ณธ ์ธ์Šคํ„ด์Šค๋ฅผ ๋‚ด๋ณด๋‚ด๋˜, ์ด๋ฆ„์€ 'util' ๊ฐ™์€ ๋ฒ”์šฉ์ ์ธ ๊ฐ’์œผ๋กœ ์„ค์ •\r\nconst trace = new Trace(\"util\", \"#4CAF50\");\r\n\r\n// 2. ์‚ฌ์šฉ์ž๊ฐ€ ์›ํ•œ๋‹ค๋ฉด ์ด๋ฆ„ํ‘œ๋ฅผ ๋ฐ”๊ฟ€ ์ˆ˜ ์žˆ๋Š” ๊ธฐ๋Šฅ ์ œ๊ณต (์„ ํƒ ์‚ฌํ•ญ)\r\n// trace.init(\"my-app\") ์ฒ˜๋Ÿผ ํ˜ธ์ถœ ๊ฐ€๋Šฅํ•˜๊ฒŒ Trace ํด๋ž˜์Šค์— ๋ฉ”์„œ๋“œ๊ฐ€ ์žˆ๋‹ค๋ฉด ๋ฒ ์ŠคํŠธ!\r\n\r\nexport {\r\n\tTrace,\r\n\tTaskDebouncer,\r\n\ttrace // ๋ฏธ๋ฆฌ ๋งŒ๋“  ์ธ์Šคํ„ด์Šค\r\n};"],"names":["Trace","constructor","name","color","__privateAdd","this","_name","_color","init","__privateSet","style","__privateGet","log","console","bind","error","warn","disable","WeakMap","_timer","_queue","_delay","_TaskDebouncer_instances","WeakSet","flush_fn","length","tasks","splice","seen","Set","forEach","task","identifier","func","JSON","stringify","args","has","add","trace","delay","exec","push","clearTimeout","setTimeout","call"],"mappings":"gkBAAO,MAAMA,EAIZ,WAAAC,CAAYC,EAAO,OAAQC,EAAQ,WAHnCC,EAAAC,KAAAC,GACAF,EAAAC,KAAAE,GAGCF,KAAKG,KAAKN,EAAMC,EACjB,CAEA,IAAAK,CAAKN,EAAMC,EAAQ,WAClBM,EAAAJ,KAAKC,EAAQJ,GACbO,EAAAJ,KAAKE,EAASJ,GACd,MAAMO,EAAQ,UAAUC,EAAAN,KAAKE,yBAE7BF,KAAKO,IAAMC,QAAQD,IAAIE,KAAKD,QAAS,MAAMF,EAAAN,KAAKC,MAAUI,GAC1DL,KAAKU,MAAQF,QAAQE,MAAMD,KAAKD,QAAS,MAAMF,EAAAN,KAAKC,UAAc,sCAClED,KAAKW,KAAOH,QAAQG,KAAKF,KAAKD,QAAS,MAAMF,EAAAN,KAAKC,WAAe,qCAClE,CAEA,OAAAW,GACCZ,KAAKO,IAAMP,KAAKU,MAAQV,KAAKW,KAAO,MACrC,EAnBAV,EAAA,IAAAY,QACAX,EAAA,IAAAW,QAsBoB,IAAIlB,ECvBxBmB,EAAA,IAAAD,QACAE,EAAA,IAAAF,QACAG,EAAA,IAAAH,QAHMI,EAAA,IAAAC,QAyBNC,EAAM,WACL,GAA2B,IAAvBb,EAAAN,KAAKe,GAAOK,OAAc,OAG9B,MAAMC,EAAQf,EAAAN,KAAKe,GAAOO,OAAO,EAAGhB,EAAAN,KAAKe,GAAOK,QAC1CG,MAAWC,IAEjBH,EAAMI,QAAQC,IAGb,MAAMC,EAAa,GAAGD,EAAKE,KAAK/B,QAAQgC,KAAKC,UAAUJ,EAAKK,QAEvDR,EAAKS,IAAIL,KAEbD,EAAKE,QAAQF,EAAKK,MAClBR,EAAKU,IAAIN,MAIXvB,EAAAJ,KAAKc,EAAS,KACf,ECzCI,MAACoB,EAAQ,IAAIvC,EAAM,OAAQ,2BDJzB,MAKN,WAAAC,CAAYuC,EAAQ,IALdpC,EAAAC,KAAAiB,GACNlB,EAAAC,KAAAc,EAAS,MACTf,EAAAC,KAAAe,EAAS,IACThB,EAAAC,KAAAgB,GAGCZ,EAAAJ,KAAKgB,EAASmB,EACf,CAMA,IAAAC,CAAKR,KAASG,GAEbzB,EAAAN,KAAKe,GAAOsB,KAAK,CAAET,OAAMG,SAGrBzB,EAAAN,KAAKc,IAAQwB,aAAahC,EAAAN,KAAKc,IAEnCV,EAAAJ,KAAKc,EAASyB,WAAW,kBACxBvC,OAAKiB,IAAAE,oCAALqB,KAAAxC,OACEM,OAAKU,IACT"}
1
+ {"version":3,"file":"nine-util.umd.cjs","sources":["../src/Trace.js","../src/TaskDebouncer.js"],"sourcesContent":["export class Trace {\r\n\t#name;\r\n\t#color;\r\n\t#enabled = true; // ๐Ÿ‘ˆ ์ด ์ƒํƒœ๊ฐ’์ด ๊ธฐ์ค€์ด ๋ฉ๋‹ˆ๋‹ค.\r\n\r\n\tconstructor(name = \"nine-util\", color = \"#4CAF50\") {\r\n\t\tthis.#name = name;\r\n\t\tthis.#color = color;\r\n\t}\r\n\r\n\tinit(name, color = \"#4CAF50\") {\r\n\t\tthis.#name = name;\r\n\t\tthis.#color = color;\r\n\t}\r\n\r\n\t// ๐Ÿ”ด ํ•ต์‹ฌ: ํ•จ์ˆ˜๋ฅผ ๊ฐˆ์•„๋ผ์šฐ์ง€ ์•Š๊ณ , ํ˜ธ์ถœ๋  ๋•Œ๋งˆ๋‹ค ์ƒํƒœ๋ฅผ ์ฒดํฌํ•ฉ๋‹ˆ๋‹ค.\r\n\tlog(...args) {\r\n\t\tif (!this.#enabled) return;\r\n\t\tconst style = `color: ${this.#color}; font-weight: bold;`;\r\n\t\tconsole.log(`%c[${this.#name}]`, style, ...args);\r\n\t}\r\n\r\n\twarn(...args) {\r\n\t\tif (!this.#enabled) return;\r\n\t\tconsole.warn(`%c[${this.#name}-WARN]`, \"color: #ffeb3b; font-weight: bold;\", ...args);\r\n\t}\r\n\r\n\terror(...args) {\r\n\t\tif (!this.#enabled) return;\r\n\t\tconsole.error(`%c[${this.#name}-ERR]`, \"color: #ff4444; font-weight: bold;\", ...args);\r\n\t}\r\n\r\n\tenable() { this.#enabled = true; }\r\n\tdisable() { this.#enabled = false; }\r\n}\r\n\r\nexport const trace = new Trace();\r\n\r\n// ๋ธŒ๋ผ์šฐ์ € ์ฝ˜์†”์—์„œ ์ฆ‰์‹œ ์ œ์–ดํ•  ์ˆ˜ ์žˆ๋„๋ก window์— ์—ฐ๊ฒฐ\r\nif (typeof window !== 'undefined') {\r\n\twindow.trace = trace;\r\n}","export class TaskDebouncer {\r\n\t#timer = null;\r\n\t#queue = [];\r\n\t#delay;\r\n\r\n\tconstructor(delay = 50) {\r\n\t\tthis.#delay = delay;\r\n\t}\r\n\r\n\t/**\r\n\t * @param {Function} func - ์‹คํ–‰ํ•  ํ•จ์ˆ˜\r\n\t * @param {...any} args - ํ•จ์ˆ˜์— ์ „๋‹ฌํ•  ์ž„์˜์˜ ํŒŒ๋ผ๋ฏธํ„ฐ๋“ค\r\n\t */\r\n\texec(func, ...args) {\r\n\t\t// 1. ์–ด๋–ค ํ•จ์ˆ˜์™€ ์–ด๋–ค ์ธ์ž๋“ค์ด ๋“ค์–ด์™”๋Š”์ง€ ํ์— ์ €์žฅ\r\n\t\tthis.#queue.push({ func, args });\r\n\r\n\t\t// 2. ๋””๋ฐ”์šด์Šค ํƒ€์ด๋จธ ์„ค์ •\r\n\t\tif (this.#timer) clearTimeout(this.#timer);\r\n\r\n\t\tthis.#timer = setTimeout(() => {\r\n\t\t\tthis.#flush();\r\n\t\t}, this.#delay);\r\n\t}\r\n\r\n\t#flush() {\r\n\t\tif (this.#queue.length === 0) return;\r\n\r\n\t\t// 3. ํ˜„์žฌ๊นŒ์ง€ ์Œ“์ธ ํ๋ฅผ ์™ ๋นผ์˜ด\r\n\t\tconst tasks = this.#queue.splice(0, this.#queue.length);\r\n\t\tconst seen = new Set();\r\n\r\n\t\ttasks.forEach(task => {\r\n\t\t\t// 4. ํ•ต์‹ฌ: ํ•จ์ˆ˜ ์ด๋ฆ„๊ณผ ์ธ์ž๋“ค์„ ๋ฌธ์ž์—ด๋กœ ํ•ฉ์ณ์„œ ์œ ๋‹ˆํฌ ํ‚ค ์ƒ์„ฑ\r\n\t\t\t// JSON.stringify๋ฅผ ํ†ตํ•ด [1, {a:1}] ๊ฐ™์€ ํŒŒ๋ผ๋ฏธํ„ฐ๋„ ๋ฌธ์ž์—ด๋กœ ๋น„๊ต ๊ฐ€๋Šฅ\r\n\t\t\tconst identifier = `${task.func.name}_${JSON.stringify(task.args)}`;\r\n\r\n\t\t\tif (!seen.has(identifier)) {\r\n\t\t\t\t// 5. ์ค‘๋ณต์ด ์•„๋‹ ๋•Œ๋งŒ ์›๋ž˜ ์ธ์ž๋“ค(...args) ๊ทธ๋Œ€๋กœ ์‹คํ–‰\r\n\t\t\t\ttask.func(...task.args);\r\n\t\t\t\tseen.add(identifier);\r\n\t\t\t}\r\n\t\t});\r\n\r\n\t\tthis.#timer = null;\r\n\t}\r\n}"],"names":["Trace","constructor","name","color","__privateAdd","this","_name","_color","_enabled","__privateSet","init","log","args","__privateGet","style","console","warn","error","enable","disable","WeakMap","trace","window","_timer","_queue","_delay","_TaskDebouncer_instances","WeakSet","flush_fn","length","tasks","splice","seen","Set","forEach","task","identifier","func","JSON","stringify","has","add","delay","exec","push","clearTimeout","setTimeout","call"],"mappings":"kkBAAO,MAAMA,EAKZ,WAAAC,CAAYC,EAAO,YAAaC,EAAQ,WAJxCC,EAAAC,KAAAC,GACAF,EAAAC,KAAAE,GACAH,EAAAC,KAAAG,GAAW,GAGVC,EAAAJ,KAAKC,EAAQJ,GACbO,EAAAJ,KAAKE,EAASJ,EACf,CAEA,IAAAO,CAAKR,EAAMC,EAAQ,WAClBM,EAAAJ,KAAKC,EAAQJ,GACbO,EAAAJ,KAAKE,EAASJ,EACf,CAGA,GAAAQ,IAAOC,GACN,IAAKC,OAAKL,GAAU,OACpB,MAAMM,EAAQ,UAAUD,EAAAR,KAAKE,yBAC7BQ,QAAQJ,IAAI,MAAME,EAAAR,KAAKC,MAAUQ,KAAUF,EAC5C,CAEA,IAAAI,IAAQJ,GACFC,OAAKL,IACVO,QAAQC,KAAK,MAAMH,EAAAR,KAAKC,WAAe,wCAAyCM,EACjF,CAEA,KAAAK,IAASL,GACHC,OAAKL,IACVO,QAAQE,MAAM,MAAMJ,EAAAR,KAAKC,UAAc,wCAAyCM,EACjF,CAEA,MAAAM,GAAWT,EAAAJ,KAAKG,GAAW,EAAM,CACjC,OAAAW,GAAYV,EAAAJ,KAAKG,GAAW,EAAO,EAhCnCF,EAAA,IAAAc,QACAb,EAAA,IAAAa,QACAZ,EAAA,IAAAY,QAiCW,MAACC,EAAQ,IAAIrB,EAGH,oBAAXsB,SACVA,OAAOD,MAAQA,GCvCfE,EAAA,IAAAH,QACAI,EAAA,IAAAJ,QACAK,EAAA,IAAAL,QAHMM,EAAA,IAAAC,QAyBNC,EAAM,WACL,GAA2B,IAAvBf,EAAAR,KAAKmB,GAAOK,OAAc,OAG9B,MAAMC,EAAQjB,EAAAR,KAAKmB,GAAOO,OAAO,EAAGlB,EAAAR,KAAKmB,GAAOK,QAC1CG,MAAWC,IAEjBH,EAAMI,QAAQC,IAGb,MAAMC,EAAa,GAAGD,EAAKE,KAAKnC,QAAQoC,KAAKC,UAAUJ,EAAKvB,QAEvDoB,EAAKQ,IAAIJ,KAEbD,EAAKE,QAAQF,EAAKvB,MAClBoB,EAAKS,IAAIL,MAIX3B,EAAAJ,KAAKkB,EAAS,KACf,kBA7CM,MAKN,WAAAtB,CAAYyC,EAAQ,IALdtC,EAAAC,KAAAqB,GACNtB,EAAAC,KAAAkB,EAAS,MACTnB,EAAAC,KAAAmB,EAAS,IACTpB,EAAAC,KAAAoB,GAGChB,EAAAJ,KAAKoB,EAASiB,EACf,CAMA,IAAAC,CAAKN,KAASzB,GAEbC,EAAAR,KAAKmB,GAAOoB,KAAK,CAAEP,OAAMzB,SAGrBC,EAAAR,KAAKkB,IAAQsB,aAAahC,EAAAR,KAAKkB,IAEnCd,EAAAJ,KAAKkB,EAASuB,WAAW,kBACxBzC,OAAKqB,IAAAE,oCAALmB,KAAA1C,OACEQ,OAAKY,IACT"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@nine-lab/nine-util",
3
- "version": "0.1.0",
3
+ "version": "0.3.0",
4
4
  "description": "Custom Element based Util Component for Real-time Collaboration",
5
5
  "type": "module",
6
6
  "main": "./dist/nine-util.umd.cjs",