easyjs-time 0.1.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.
Files changed (3) hide show
  1. package/README.md +26 -0
  2. package/package.json +17 -0
  3. package/src/index.js +95 -0
package/README.md ADDED
@@ -0,0 +1,26 @@
1
+ # easyjs-time
2
+
3
+ Time plugin for EasyJS.
4
+
5
+ ## Install
6
+
7
+ ```bash
8
+ npm i easyjs-time
9
+ ```
10
+
11
+ ## Use
12
+
13
+ ```js
14
+ const easy = require("easyjs-empty");
15
+ const time = require("easyjs-time");
16
+
17
+ easy.use(time); // loads basic
18
+ console.log(easy.time()); // seconds since epoch
19
+ ```
20
+
21
+ To load the advanced set:
22
+
23
+ ```js
24
+ easy.use(time.advanced);
25
+ ```
26
+ Refer to the `easyjs-empty` Readme for more info.
package/package.json ADDED
@@ -0,0 +1,17 @@
1
+ {
2
+ "name": "easyjs-time",
3
+ "version": "0.1.0",
4
+ "description": "EasyJS time plugin (Python-style time helpers).",
5
+ "license": "ISC",
6
+ "type": "commonjs",
7
+ "main": "src/index.js",
8
+ "keywords": [
9
+ "easyjs",
10
+ "plugin",
11
+ "time",
12
+ "date",
13
+ "timer",
14
+ "sleep",
15
+ "javascript"
16
+ ]
17
+ }
package/src/index.js ADDED
@@ -0,0 +1,95 @@
1
+ // easyjs-time
2
+ const createSets = () => {
3
+ // --- basic time functions (Python-style) ---
4
+ const basic = {
5
+ now: () => new Date(),
6
+ time: () => Date.now() / 1000,
7
+ sleep: (seconds) => new Promise(resolve => setTimeout(resolve, Number(seconds) * 1000)),
8
+ ctime: (seconds) => {
9
+ const ms = seconds == null ? Date.now() : Number(seconds) * 1000;
10
+ return new Date(ms).toString();
11
+ },
12
+ localtime: (seconds) => {
13
+ const ms = seconds == null ? Date.now() : Number(seconds) * 1000;
14
+ return new Date(ms);
15
+ },
16
+ gmtime: (seconds) => {
17
+ const ms = seconds == null ? Date.now() : Number(seconds) * 1000;
18
+ return new Date(ms);
19
+ }
20
+ };
21
+
22
+ // --- advanced time functions ---
23
+ const advanced = {
24
+ timeMs: () => Date.now(),
25
+ timeNs: () => (typeof process !== "undefined" && process.hrtime && process.hrtime.bigint)
26
+ ? process.hrtime.bigint()
27
+ : Math.floor(Date.now() * 1e6),
28
+ monotonic: () => (typeof performance !== "undefined" && performance.now)
29
+ ? performance.now()
30
+ : Date.now(),
31
+ perfCounter: () => (typeof performance !== "undefined" && performance.now)
32
+ ? performance.now()
33
+ : Date.now(),
34
+ perfCounterNs: () => (typeof process !== "undefined" && process.hrtime && process.hrtime.bigint)
35
+ ? process.hrtime.bigint()
36
+ : Math.floor(Date.now() * 1e6),
37
+ sleepMs: (ms) => new Promise(resolve => setTimeout(resolve, Number(ms))),
38
+ timer: () => {
39
+ const start = (typeof performance !== "undefined" && performance.now) ? performance.now() : Date.now();
40
+ return () => {
41
+ const now = (typeof performance !== "undefined" && performance.now) ? performance.now() : Date.now();
42
+ return now - start;
43
+ };
44
+ },
45
+ elapsed: (startMs) => Date.now() - Number(startMs),
46
+ format: (date, pattern = "YYYY-MM-DD HH:mm:ss") => {
47
+ const d = date instanceof Date ? date : new Date(date);
48
+ const pad = (n, w = 2) => String(n).padStart(w, "0");
49
+ return pattern
50
+ .replace(/YYYY/g, String(d.getFullYear()))
51
+ .replace(/MM/g, pad(d.getMonth() + 1))
52
+ .replace(/DD/g, pad(d.getDate()))
53
+ .replace(/HH/g, pad(d.getHours()))
54
+ .replace(/mm/g, pad(d.getMinutes()))
55
+ .replace(/ss/g, pad(d.getSeconds()));
56
+ },
57
+ strftime: (fmt, date = new Date()) => {
58
+ const d = date instanceof Date ? date : new Date(date);
59
+ const pad = (n, w = 2) => String(n).padStart(w, "0");
60
+ return String(fmt)
61
+ .replace(/%Y/g, String(d.getFullYear()))
62
+ .replace(/%m/g, pad(d.getMonth() + 1))
63
+ .replace(/%d/g, pad(d.getDate()))
64
+ .replace(/%H/g, pad(d.getHours()))
65
+ .replace(/%M/g, pad(d.getMinutes()))
66
+ .replace(/%S/g, pad(d.getSeconds()));
67
+ },
68
+ timezoneOffsetMinutes: (date = new Date()) => -date.getTimezoneOffset()
69
+ };
70
+
71
+ // --- helper to add functions with override warnings ---
72
+ const addFuncs = (target, funcs) => {
73
+ for (const [name, fn] of Object.entries(funcs)) {
74
+ if (target[name]) {
75
+ console.log(`-- WARNING - overwriting ${name} - WARNING --`);
76
+ }
77
+ target[name] = fn;
78
+ }
79
+ };
80
+
81
+ return { basic, advanced, addFuncs };
82
+ };
83
+
84
+ const time = (easy) => {
85
+ const { basic, addFuncs } = createSets();
86
+ addFuncs(easy, basic);
87
+ };
88
+
89
+ // advanced plugin (function) for easy.use(time.advanced)
90
+ time.advanced = (easy) => {
91
+ const { basic, advanced, addFuncs } = createSets();
92
+ addFuncs(easy, { ...basic, ...advanced });
93
+ };
94
+
95
+ module.exports = time;