@ac-kit/app-system 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 (95) hide show
  1. package/LICENSE +28 -0
  2. package/README.md +45 -0
  3. package/dist/async/file-lock.d.ts +38 -0
  4. package/dist/async/file-lock.d.ts.map +1 -0
  5. package/dist/async/file-lock.js +67 -0
  6. package/dist/async/file-lock.js.map +1 -0
  7. package/dist/async/udp-bind-lock.d.ts +75 -0
  8. package/dist/async/udp-bind-lock.d.ts.map +1 -0
  9. package/dist/async/udp-bind-lock.js +85 -0
  10. package/dist/async/udp-bind-lock.js.map +1 -0
  11. package/dist/fs/artifact-cache.d.ts +124 -0
  12. package/dist/fs/artifact-cache.d.ts.map +1 -0
  13. package/dist/fs/artifact-cache.js +183 -0
  14. package/dist/fs/artifact-cache.js.map +1 -0
  15. package/dist/fs/rotate-log-files.d.ts +20 -0
  16. package/dist/fs/rotate-log-files.d.ts.map +1 -0
  17. package/dist/fs/rotate-log-files.js +45 -0
  18. package/dist/fs/rotate-log-files.js.map +1 -0
  19. package/dist/fs/rotating-file-sink.d.ts +42 -0
  20. package/dist/fs/rotating-file-sink.d.ts.map +1 -0
  21. package/dist/fs/rotating-file-sink.js +213 -0
  22. package/dist/fs/rotating-file-sink.js.map +1 -0
  23. package/dist/index.d.ts +23 -0
  24. package/dist/index.d.ts.map +1 -0
  25. package/dist/index.js +23 -0
  26. package/dist/index.js.map +1 -0
  27. package/dist/os/get-processes-snapshot.d.ts +56 -0
  28. package/dist/os/get-processes-snapshot.d.ts.map +1 -0
  29. package/dist/os/get-processes-snapshot.js +197 -0
  30. package/dist/os/get-processes-snapshot.js.map +1 -0
  31. package/dist/os/host-metrics.d.ts +43 -0
  32. package/dist/os/host-metrics.d.ts.map +1 -0
  33. package/dist/os/host-metrics.js +78 -0
  34. package/dist/os/host-metrics.js.map +1 -0
  35. package/dist/os/process-kill-by-pid-file.d.ts +35 -0
  36. package/dist/os/process-kill-by-pid-file.d.ts.map +1 -0
  37. package/dist/os/process-kill-by-pid-file.js +48 -0
  38. package/dist/os/process-kill-by-pid-file.js.map +1 -0
  39. package/dist/os/process-wait-pid.d.ts +18 -0
  40. package/dist/os/process-wait-pid.d.ts.map +1 -0
  41. package/dist/os/process-wait-pid.js +26 -0
  42. package/dist/os/process-wait-pid.js.map +1 -0
  43. package/dist/os/ps.d.ts +98 -0
  44. package/dist/os/ps.d.ts.map +1 -0
  45. package/dist/os/ps.js +165 -0
  46. package/dist/os/ps.js.map +1 -0
  47. package/dist/os/sysfs.d.ts +19 -0
  48. package/dist/os/sysfs.d.ts.map +1 -0
  49. package/dist/os/sysfs.js +66 -0
  50. package/dist/os/sysfs.js.map +1 -0
  51. package/dist/process/child-process-message-sink.d.ts +21 -0
  52. package/dist/process/child-process-message-sink.d.ts.map +1 -0
  53. package/dist/process/child-process-message-sink.js +16 -0
  54. package/dist/process/child-process-message-sink.js.map +1 -0
  55. package/dist/process/error-listeners.d.ts +56 -0
  56. package/dist/process/error-listeners.d.ts.map +1 -0
  57. package/dist/process/error-listeners.js +113 -0
  58. package/dist/process/error-listeners.js.map +1 -0
  59. package/dist/process/exit-manager.d.ts +58 -0
  60. package/dist/process/exit-manager.d.ts.map +1 -0
  61. package/dist/process/exit-manager.js +88 -0
  62. package/dist/process/exit-manager.js.map +1 -0
  63. package/dist/process/has-binary.d.ts +25 -0
  64. package/dist/process/has-binary.d.ts.map +1 -0
  65. package/dist/process/has-binary.js +35 -0
  66. package/dist/process/has-binary.js.map +1 -0
  67. package/dist/process/pid-file.d.ts +17 -0
  68. package/dist/process/pid-file.d.ts.map +1 -0
  69. package/dist/process/pid-file.js +25 -0
  70. package/dist/process/pid-file.js.map +1 -0
  71. package/dist/process/process-pid-file.d.ts +37 -0
  72. package/dist/process/process-pid-file.d.ts.map +1 -0
  73. package/dist/process/process-pid-file.js +57 -0
  74. package/dist/process/process-pid-file.js.map +1 -0
  75. package/dist/process/report-process.d.ts +36 -0
  76. package/dist/process/report-process.d.ts.map +1 -0
  77. package/dist/process/report-process.js +121 -0
  78. package/dist/process/report-process.js.map +1 -0
  79. package/dist/shell/shorten-posix-path.d.ts +10 -0
  80. package/dist/shell/shorten-posix-path.d.ts.map +1 -0
  81. package/dist/shell/shorten-posix-path.js +19 -0
  82. package/dist/shell/shorten-posix-path.js.map +1 -0
  83. package/dist/terminal/node-terminal.d.ts +11 -0
  84. package/dist/terminal/node-terminal.d.ts.map +1 -0
  85. package/dist/terminal/node-terminal.js +162 -0
  86. package/dist/terminal/node-terminal.js.map +1 -0
  87. package/dist/text/charset-decode-stream.d.ts +13 -0
  88. package/dist/text/charset-decode-stream.d.ts.map +1 -0
  89. package/dist/text/charset-decode-stream.js +51 -0
  90. package/dist/text/charset-decode-stream.js.map +1 -0
  91. package/dist/text/charset-encode-stream.d.ts +12 -0
  92. package/dist/text/charset-encode-stream.d.ts.map +1 -0
  93. package/dist/text/charset-encode-stream.js +47 -0
  94. package/dist/text/charset-encode-stream.js.map +1 -0
  95. package/package.json +75 -0
@@ -0,0 +1,51 @@
1
+ import { optionalImport } from "@ac-kit/node";
2
+ const iconvLite = await optionalImport(() => import("iconv-lite"));
3
+ /**
4
+ * Decodes byte chunks into strings using the given charset.
5
+ *
6
+ * Uses the platform {@link TextDecoder} where the charset is supported and
7
+ * iconv-lite for everything else. Split multi-byte sequences are carried across
8
+ * chunk boundaries.
9
+ */
10
+ export class CharsetDecodeStream extends TransformStream {
11
+ #charset;
12
+ constructor(charset = "utf-8") {
13
+ let decoder;
14
+ try {
15
+ const textDecoder = new TextDecoder(charset);
16
+ decoder = {
17
+ write: (chunk) => textDecoder.decode(chunk, { stream: true }),
18
+ end: () => textDecoder.decode(),
19
+ };
20
+ }
21
+ catch {
22
+ if (!iconvLite?.encodingExists(charset)) {
23
+ throw new Error(`unsupported charset: ${charset}`);
24
+ }
25
+ const iconvDecoder = iconvLite.getDecoder(charset);
26
+ decoder = {
27
+ write: (chunk) => iconvDecoder.write(Buffer.from(chunk)),
28
+ end: () => iconvDecoder.end() ?? "",
29
+ };
30
+ }
31
+ super({
32
+ transform(chunk, controller) {
33
+ const text = decoder.write(chunk);
34
+ if (text) {
35
+ controller.enqueue(text);
36
+ }
37
+ },
38
+ flush(controller) {
39
+ const text = decoder.end();
40
+ if (text) {
41
+ controller.enqueue(text);
42
+ }
43
+ },
44
+ });
45
+ this.#charset = charset;
46
+ }
47
+ get charset() {
48
+ return this.#charset;
49
+ }
50
+ }
51
+ //# sourceMappingURL=charset-decode-stream.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"charset-decode-stream.js","sourceRoot":"","sources":["../../src/text/charset-decode-stream.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,cAAc,EAAE,MAAM,cAAc,CAAC;AAE9C,MAAM,SAAS,GAAG,MAAM,cAAc,CAAC,GAAG,EAAE,CAAC,MAAM,CAAC,YAAY,CAAC,CAAC,CAAC;AAEnE;;;;;;GAMG;AACH,MAAM,OAAO,mBAAoB,SAAQ,eAAmC;IAClE,QAAQ,CAAS;IAE1B,YAAY,OAAO,GAAG,OAAO;QAC5B,IAAI,OAA4D,CAAC;QAEjE,IAAI,CAAC;YACJ,MAAM,WAAW,GAAG,IAAI,WAAW,CAAC,OAAO,CAAC,CAAC;YAC7C,OAAO,GAAG;gBACT,KAAK,EAAE,CAAC,KAAK,EAAE,EAAE,CAAC,WAAW,CAAC,MAAM,CAAC,KAAK,EAAE,EAAE,MAAM,EAAE,IAAI,EAAE,CAAC;gBAC7D,GAAG,EAAE,GAAG,EAAE,CAAC,WAAW,CAAC,MAAM,EAAE;aAC/B,CAAC;QACH,CAAC;QAAC,MAAM,CAAC;YACR,IAAI,CAAC,SAAS,EAAE,cAAc,CAAC,OAAO,CAAC,EAAE,CAAC;gBACzC,MAAM,IAAI,KAAK,CAAC,wBAAwB,OAAO,EAAE,CAAC,CAAC;YACpD,CAAC;YACD,MAAM,YAAY,GAAG,SAAS,CAAC,UAAU,CAAC,OAAO,CAAC,CAAC;YACnD,OAAO,GAAG;gBACT,KAAK,EAAE,CAAC,KAAK,EAAE,EAAE,CAAC,YAAY,CAAC,KAAK,CAAC,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;gBACxD,GAAG,EAAE,GAAG,EAAE,CAAC,YAAY,CAAC,GAAG,EAAE,IAAI,EAAE;aACnC,CAAC;QACH,CAAC;QAED,KAAK,CAAC;YACL,SAAS,CAAC,KAAK,EAAE,UAAU;gBAC1B,MAAM,IAAI,GAAG,OAAO,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC;gBAClC,IAAI,IAAI,EAAE,CAAC;oBACV,UAAU,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC;gBAC1B,CAAC;YACF,CAAC;YACD,KAAK,CAAC,UAAU;gBACf,MAAM,IAAI,GAAG,OAAO,CAAC,GAAG,EAAE,CAAC;gBAC3B,IAAI,IAAI,EAAE,CAAC;oBACV,UAAU,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC;gBAC1B,CAAC;YACF,CAAC;SACD,CAAC,CAAC;QAEH,IAAI,CAAC,QAAQ,GAAG,OAAO,CAAC;IACzB,CAAC;IAED,IAAI,OAAO;QACV,OAAO,IAAI,CAAC,QAAQ,CAAC;IACtB,CAAC;CACD"}
@@ -0,0 +1,12 @@
1
+ /**
2
+ * Encodes string chunks into bytes using the given charset.
3
+ *
4
+ * Uses the platform {@link TextEncoder} for UTF-8 and iconv-lite for everything
5
+ * else.
6
+ */
7
+ export declare class CharsetEncodeStream extends TransformStream<string, Uint8Array> {
8
+ #private;
9
+ constructor(charset?: string);
10
+ get charset(): string;
11
+ }
12
+ //# sourceMappingURL=charset-encode-stream.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"charset-encode-stream.d.ts","sourceRoot":"","sources":["../../src/text/charset-encode-stream.ts"],"names":[],"mappings":"AAIA;;;;;GAKG;AACH,qBAAa,mBAAoB,SAAQ,eAAe,CAAC,MAAM,EAAE,UAAU,CAAC;;IAG3E,YAAY,OAAO,SAAU,EAgC5B;IAED,IAAI,OAAO,IAAI,MAAM,CAEpB;CACD"}
@@ -0,0 +1,47 @@
1
+ import { optionalImport } from "@ac-kit/node";
2
+ const iconvLite = await optionalImport(() => import("iconv-lite"));
3
+ /**
4
+ * Encodes string chunks into bytes using the given charset.
5
+ *
6
+ * Uses the platform {@link TextEncoder} for UTF-8 and iconv-lite for everything
7
+ * else.
8
+ */
9
+ export class CharsetEncodeStream extends TransformStream {
10
+ #charset;
11
+ constructor(charset = "utf-8") {
12
+ let encoder;
13
+ if (charset === "utf-8" || charset === "utf8") {
14
+ const textEncoder = new TextEncoder();
15
+ encoder = { write: (text) => textEncoder.encode(text), end: () => null };
16
+ }
17
+ else if (iconvLite?.encodingExists(charset)) {
18
+ const iconvEncoder = iconvLite.getEncoder(charset);
19
+ encoder = {
20
+ write: (text) => new Uint8Array(iconvEncoder.write(text)),
21
+ end: () => {
22
+ const tail = iconvEncoder.end();
23
+ return tail?.length ? new Uint8Array(tail) : null;
24
+ },
25
+ };
26
+ }
27
+ else {
28
+ throw new Error(`unsupported charset: ${charset}`);
29
+ }
30
+ super({
31
+ transform(chunk, controller) {
32
+ controller.enqueue(encoder.write(chunk));
33
+ },
34
+ flush(controller) {
35
+ const tail = encoder.end();
36
+ if (tail) {
37
+ controller.enqueue(tail);
38
+ }
39
+ },
40
+ });
41
+ this.#charset = charset;
42
+ }
43
+ get charset() {
44
+ return this.#charset;
45
+ }
46
+ }
47
+ //# sourceMappingURL=charset-encode-stream.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"charset-encode-stream.js","sourceRoot":"","sources":["../../src/text/charset-encode-stream.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,cAAc,EAAE,MAAM,cAAc,CAAC;AAE9C,MAAM,SAAS,GAAG,MAAM,cAAc,CAAC,GAAG,EAAE,CAAC,MAAM,CAAC,YAAY,CAAC,CAAC,CAAC;AAEnE;;;;;GAKG;AACH,MAAM,OAAO,mBAAoB,SAAQ,eAAmC;IAClE,QAAQ,CAAS;IAE1B,YAAY,OAAO,GAAG,OAAO;QAC5B,IAAI,OAAsE,CAAC;QAE3E,IAAI,OAAO,KAAK,OAAO,IAAI,OAAO,KAAK,MAAM,EAAE,CAAC;YAC/C,MAAM,WAAW,GAAG,IAAI,WAAW,EAAE,CAAC;YACtC,OAAO,GAAG,EAAE,KAAK,EAAE,CAAC,IAAI,EAAE,EAAE,CAAC,WAAW,CAAC,MAAM,CAAC,IAAI,CAAC,EAAE,GAAG,EAAE,GAAG,EAAE,CAAC,IAAI,EAAE,CAAC;QAC1E,CAAC;aAAM,IAAI,SAAS,EAAE,cAAc,CAAC,OAAO,CAAC,EAAE,CAAC;YAC/C,MAAM,YAAY,GAAG,SAAS,CAAC,UAAU,CAAC,OAAO,CAAC,CAAC;YACnD,OAAO,GAAG;gBACT,KAAK,EAAE,CAAC,IAAI,EAAE,EAAE,CAAC,IAAI,UAAU,CAAC,YAAY,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;gBACzD,GAAG,EAAE,GAAG,EAAE;oBACT,MAAM,IAAI,GAAG,YAAY,CAAC,GAAG,EAAE,CAAC;oBAChC,OAAO,IAAI,EAAE,MAAM,CAAC,CAAC,CAAC,IAAI,UAAU,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC;gBACnD,CAAC;aACD,CAAC;QACH,CAAC;aAAM,CAAC;YACP,MAAM,IAAI,KAAK,CAAC,wBAAwB,OAAO,EAAE,CAAC,CAAC;QACpD,CAAC;QAED,KAAK,CAAC;YACL,SAAS,CAAC,KAAK,EAAE,UAAU;gBAC1B,UAAU,CAAC,OAAO,CAAC,OAAO,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC,CAAC;YAC1C,CAAC;YACD,KAAK,CAAC,UAAU;gBACf,MAAM,IAAI,GAAG,OAAO,CAAC,GAAG,EAAE,CAAC;gBAC3B,IAAI,IAAI,EAAE,CAAC;oBACV,UAAU,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC;gBAC1B,CAAC;YACF,CAAC;SACD,CAAC,CAAC;QAEH,IAAI,CAAC,QAAQ,GAAG,OAAO,CAAC;IACzB,CAAC;IAED,IAAI,OAAO;QACV,OAAO,IAAI,CAAC,QAAQ,CAAC;IACtB,CAAC;CACD"}
package/package.json ADDED
@@ -0,0 +1,75 @@
1
+ {
2
+ "name": "@ac-kit/app-system",
3
+ "version": "0.1.0",
4
+ "description": "Process lifecycle helpers: PID files, process inspection, log rotation and command execution.",
5
+ "keywords": [
6
+ "log-rotation",
7
+ "nodejs",
8
+ "pidfile",
9
+ "process",
10
+ "system"
11
+ ],
12
+ "homepage": "https://anthochamp.github.io/node-essentials/api/app-system/",
13
+ "bugs": {
14
+ "url": "https://github.com/anthochamp/node-essentials/issues"
15
+ },
16
+ "license": "BSD-3-Clause",
17
+ "author": "Anthony Champagne <dev@anthonychampagne.fr>",
18
+ "repository": {
19
+ "type": "git",
20
+ "url": "git+https://github.com/anthochamp/node-essentials.git",
21
+ "directory": "packages/app-system"
22
+ },
23
+ "files": [
24
+ "dist"
25
+ ],
26
+ "type": "module",
27
+ "sideEffects": false,
28
+ "main": "./dist/index.js",
29
+ "publishConfig": {
30
+ "main": "./dist/index.js",
31
+ "access": "public"
32
+ },
33
+ "scripts": {
34
+ "compile": "tsc -p ./tsconfig.build.json -outDir dist",
35
+ "compile:check": "tsc -noEmit -p ./tsconfig.json",
36
+ "clean": "rimraf dist",
37
+ "build": "yarn clean && yarn compile",
38
+ "test": "yarn run -T vitest run",
39
+ "prepack": "yarn build"
40
+ },
41
+ "dependencies": {
42
+ "@ac-kit/app-report": "^0.1.0",
43
+ "@ac-kit/app-terminal": "^0.1.0",
44
+ "@ac-kit/async": "^0.1.0",
45
+ "@ac-kit/core": "0.1.0",
46
+ "@ac-kit/crypto-hash": "^0.1.0",
47
+ "@ac-kit/data": "^0.1.0",
48
+ "@ac-kit/format-ansi": "^0.1.0",
49
+ "@ac-kit/node": "0.1.0",
50
+ "@types/node": "^26.5.1",
51
+ "type-fest": "^5.8.0"
52
+ },
53
+ "devDependencies": {
54
+ "@ac-kit/tsconfig": "0.1.0",
55
+ "@ac-kit/typedoc-config": "0.1.0",
56
+ "@ac-kit/vitest-config": "0.1.0",
57
+ "@typescript/native": "typescript@7.0.2",
58
+ "iconv-lite": "0.7.3",
59
+ "rimraf": "6.1.3",
60
+ "tsx": "4.23.12",
61
+ "typedoc": "0.28.20",
62
+ "typescript": "@typescript/typescript6@6.0.2"
63
+ },
64
+ "peerDependencies": {
65
+ "iconv-lite": "*"
66
+ },
67
+ "peerDependenciesMeta": {
68
+ "iconv-lite": {
69
+ "optional": true
70
+ }
71
+ },
72
+ "engines": {
73
+ "node": ">=24"
74
+ }
75
+ }