jopi-node-space 0.0.8 → 0.0.14

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 (51) hide show
  1. package/dist/__global.d.ts +51 -1
  2. package/dist/_app.js +10 -8
  3. package/dist/_app.js.map +1 -1
  4. package/dist/_term.js +12 -5
  5. package/dist/_term.js.map +1 -1
  6. package/dist/_timer.js +56 -1
  7. package/dist/_timer.js.map +1 -1
  8. package/dist/_webSocket.d.ts +1 -0
  9. package/dist/_webSocket.js +24 -0
  10. package/dist/_webSocket.js.map +1 -0
  11. package/dist/_webSocket_s.d.ts +1 -0
  12. package/dist/_webSocket_s.js +25 -0
  13. package/dist/_webSocket_s.js.map +1 -0
  14. package/dist/jopi-node-space-browser.js +2 -0
  15. package/dist/jopi-node-space-browser.js.map +1 -1
  16. package/dist/jopi-node-space-server.js +5 -0
  17. package/dist/jopi-node-space-server.js.map +1 -1
  18. package/package.json +20 -10
  19. package/src/__global.ts +69 -1
  20. package/src/_app.ts +13 -8
  21. package/src/_term.ts +16 -5
  22. package/src/_timer.ts +76 -7
  23. package/src/_webSocket.ts +28 -0
  24. package/src/_webSocket_s.ts +26 -0
  25. package/src/jopi-node-space-browser.ts +2 -0
  26. package/src/jopi-node-space-server.ts +8 -1
  27. package/__UPDATES.md +0 -1
  28. package/dist/browser.d.ts +0 -1
  29. package/dist/browser.js +0 -35
  30. package/dist/browser.js.map +0 -1
  31. package/dist/browserLoader.d.ts +0 -1
  32. package/dist/browserLoader.js +0 -4
  33. package/dist/browserLoader.js.map +0 -1
  34. package/dist/serverLoader.d.ts +0 -1
  35. package/dist/serverLoader.js +0 -2
  36. package/dist/serverLoader.js.map +0 -1
  37. package/dist/serverSide.d.ts +0 -1
  38. package/dist/serverSide.js +0 -27
  39. package/dist/serverSide.js.map +0 -1
  40. package/dist/void.d.ts +0 -1
  41. package/dist/void.js +0 -7
  42. package/dist/void.js.map +0 -1
  43. package/tests-browser/index.html +0 -12
  44. package/tests-browser/package.json +0 -22
  45. package/tests-browser/src/main.tsx +0 -13
  46. package/tests-browser/src/tests.ts +0 -4
  47. package/tests-browser/tsconfig.app.json +0 -29
  48. package/tests-browser/tsconfig.json +0 -7
  49. package/tests-browser/tsconfig.node.json +0 -27
  50. package/tests-browser/vite.config.ts +0 -31
  51. package/tsconfig.json +0 -33
@@ -15,6 +15,7 @@ export interface NodeSpaceType {
15
15
  app: AppImpl;
16
16
  extensionPoints: ExtensionPointImpl;
17
17
  term: TerminalImpl;
18
+ webSocket: WebSocketImpl;
18
19
  fs: FileSystemImpl;
19
20
  crypto: CryptoImpl;
20
21
  compress: CompressImpl;
@@ -22,6 +23,30 @@ export interface NodeSpaceType {
22
23
  applyDefaults<T>(source: T | undefined, defaults: T): T;
23
24
  getErrorMessage(e: unknown): string;
24
25
  }
26
+ export interface WebSocketImpl {
27
+ /**
28
+ * Open a connection to a server.
29
+ * The url must be of the type "ws://host-name:optionalPort/optionalPath".
30
+ * Ex: "ws://127.0.0.1:3000/my-end-point".
31
+ */
32
+ openConnection(wsUrl: string, protocol?: string | string[]): Promise<WebSocket>;
33
+ /**
34
+ * Is called when the socket is closed.
35
+ */
36
+ sendMessage(socket: WebSocket, msg: string | Buffer | Uint8Array | ArrayBuffer): void;
37
+ /**
38
+ * Send a text message through this webSocket.
39
+ */
40
+ onMessage(socket: WebSocket, listener: ((msg: string | Buffer) => void)): void;
41
+ /**
42
+ * Add a listener which is called when the socket receives a message.
43
+ */
44
+ onClosed(socket: WebSocket, listener: () => void): void;
45
+ /**
46
+ * Add a listener which is called when an error occurs.
47
+ */
48
+ onError(socket: WebSocket, listener: () => void): void;
49
+ }
25
50
  export interface CompressImpl {
26
51
  gunzipSync(data: Uint8Array | string): Uint8Array;
27
52
  gzipSync(data: Uint8Array | string): Uint8Array;
@@ -67,6 +92,7 @@ export interface TimerImpl {
67
92
  tick: (delayMs: number) => Promise<void>;
68
93
  newInterval: (durationInMs: number, callback: TimerCallback) => void;
69
94
  deferred: (callback: () => void) => void;
95
+ chrono(mustSaveMeasures: boolean): Chrono;
70
96
  }
71
97
  export interface FileState {
72
98
  size: number;
@@ -142,7 +168,7 @@ export interface TerminalImpl {
142
168
  /**
143
169
  * Build a console.log function that uses the colors provided in params.
144
170
  */
145
- buildLogger: (...colors: string[]) => ((...params: any[]) => void);
171
+ buildLogger: (...colors: string[]) => TermLogger;
146
172
  /**
147
173
  * Build a console.log function that uses the colors provided in params.
148
174
  */
@@ -155,6 +181,12 @@ export interface TerminalImpl {
155
181
  * Write a temporary message, which are replaced each time by the next temp message.
156
182
  */
157
183
  consoleLogTemp: (isTemp: boolean, ...args: unknown[]) => void;
184
+ logRed: TermLogger;
185
+ logBgRed: TermLogger;
186
+ logGreen: TermLogger;
187
+ logBgGreen: TermLogger;
188
+ logBlue: TermLogger;
189
+ logBgBlue: TermLogger;
158
190
  T_RESET: string;
159
191
  T_BOLD: string;
160
192
  T_UNDERLINE: string;
@@ -182,3 +214,21 @@ export interface CryptoImpl {
182
214
  fastHash(text: string): string;
183
215
  md5(text: string): string;
184
216
  }
217
+ export type TermLogger = (...args: any[]) => void;
218
+ export interface Chrono {
219
+ lastMeasure?: ChronoMeasure;
220
+ allMeasures: ChronoMeasure[];
221
+ start(label: string, printTitle?: string): void;
222
+ start_withLimit(limit_ms: number, label: string, printTitle?: string): void;
223
+ end(): void;
224
+ onMeasureDone(handler: null | ((measure: ChronoMeasure) => void)): void;
225
+ }
226
+ export interface ChronoMeasure {
227
+ label?: string;
228
+ title?: string;
229
+ logIfMoreThan_ms?: number;
230
+ startTime_ms: number;
231
+ endTime_ms: number;
232
+ elapsedTime_ms: number;
233
+ elapsedTime_sec: string;
234
+ }
package/dist/_app.js CHANGED
@@ -7,7 +7,7 @@ export function init_nodeSpaceApp() {
7
7
  const onAppStart = [];
8
8
  let isServerSideReady = !(isNodeJs() || isBunJs());
9
9
  let isHotReload = globalThis.jopiHotReload !== undefined;
10
- let isAppStarted = false;
10
+ let gIsAppStarted = false;
11
11
  if (isHotReload) {
12
12
  execListeners(globalThis.jopiHotReload.onHotReload).then();
13
13
  }
@@ -39,33 +39,36 @@ export function init_nodeSpaceApp() {
39
39
  await execListeners(onServerSideReady);
40
40
  },
41
41
  onAppStart: (listener) => {
42
- if (isAppStarted)
42
+ if (gIsAppStarted)
43
43
  listener();
44
44
  else
45
45
  onAppStart.push(listener);
46
46
  },
47
47
  onAppExiting: (listener) => {
48
- if (!isAppStarted)
48
+ if (gIsExited)
49
49
  listener();
50
50
  else
51
51
  onAppExiting.push(listener);
52
52
  },
53
53
  onAppExited: (listener) => {
54
- if (!isAppStarted)
54
+ if (gIsExited)
55
55
  listener();
56
56
  else
57
57
  onAppExited.push(listener);
58
58
  },
59
59
  declareAppStarted: async () => {
60
- isAppStarted = true;
60
+ gIsAppStarted = true;
61
61
  await execListeners(onAppStart);
62
62
  },
63
63
  declareAppExiting: async () => {
64
+ if (gIsExited)
65
+ return;
66
+ gIsExited = true;
64
67
  if (isUsingWorker()) {
65
68
  // Wait 1 sec, which allows the worker to correctly initialize.
66
69
  await NodeSpace.timer.tick(1000);
67
70
  }
68
- isAppStarted = false;
71
+ gIsAppStarted = false;
69
72
  await execListeners(onAppExiting);
70
73
  if (isUsingWorker()) {
71
74
  // Allows to worker to correctly stop their activity.
@@ -75,8 +78,6 @@ export function init_nodeSpaceApp() {
75
78
  // Allows to worker to correctly stop their activity.
76
79
  await NodeSpace.timer.tick(50);
77
80
  }
78
- if (onAppExited.length)
79
- debugger;
80
81
  await execListeners(onAppExited);
81
82
  },
82
83
  executeApp: async (app) => {
@@ -105,4 +106,5 @@ export function init_nodeSpaceApp() {
105
106
  }
106
107
  };
107
108
  }
109
+ let gIsExited = false;
108
110
  //# sourceMappingURL=_app.js.map
package/dist/_app.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"_app.js","sourceRoot":"","sources":["../src/_app.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"_app.js","sourceRoot":"","sources":["../src/_app.ts"],"names":[],"mappings":"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"}
package/dist/_term.js CHANGED
@@ -42,6 +42,10 @@ function buildWriter(...colors) {
42
42
  let before = colors.join("");
43
43
  return (...values) => before + values.join(" ") + T_RESET;
44
44
  }
45
+ const buildLogger = (...colors) => {
46
+ const writer = buildWriter(...colors);
47
+ return (...values) => console.log(writer(...values));
48
+ };
45
49
  export function init_term() {
46
50
  NodeSpace.term = {
47
51
  cssText,
@@ -62,13 +66,16 @@ export function init_term() {
62
66
  console.log();
63
67
  },
64
68
  buildWriter: buildWriter,
65
- buildLogger(...colors) {
66
- const writer = buildWriter(...colors);
67
- return (...values) => console.log(writer(...values));
68
- },
69
+ buildLogger,
69
70
  indentText(spacer, text) {
70
71
  return spacer + text.replaceAll("\r", "").replaceAll("\n", spacer + "\n");
71
- }
72
+ },
73
+ logRed: buildLogger(C_RED),
74
+ logBgRed: buildLogger(B_RED),
75
+ logBlue: buildLogger(C_BLUE),
76
+ logBgBlue: buildLogger(B_BLUE),
77
+ logGreen: buildLogger(C_GREEN),
78
+ logBgGreen: buildLogger(B_GREEN)
72
79
  };
73
80
  }
74
81
  //# sourceMappingURL=_term.js.map
package/dist/_term.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"_term.js","sourceRoot":"","sources":["../src/_term.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"_term.js","sourceRoot":"","sources":["../src/_term.ts"],"names":[],"mappings":"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"}
package/dist/_timer.js CHANGED
@@ -46,7 +46,62 @@ export function init_nodeSpaceTimer() {
46
46
  ONE_DAY,
47
47
  tick,
48
48
  newInterval,
49
- deferred
49
+ deferred,
50
+ chrono: (mustSaveMeasures) => new ChronoImpl(mustSaveMeasures)
50
51
  };
51
52
  }
53
+ function logAutoTrigger(m) {
54
+ if (m.logIfMoreThan_ms && (m.elapsedTime_ms > m.logIfMoreThan_ms)) {
55
+ if (m.title)
56
+ NodeSpace.term.logRed("Chrono - " + m.title + ":", m.elapsedTime_sec);
57
+ else
58
+ console.log("Chrono - " + m.label + ":", m.elapsedTime_sec);
59
+ }
60
+ }
61
+ class ChronoImpl {
62
+ constructor(mustSaveMeasures) {
63
+ this.mustSaveMeasures = mustSaveMeasures;
64
+ this.allMeasures = [];
65
+ this.currentStart = 0;
66
+ this.isStarted = false;
67
+ this._onMeasureDone = null;
68
+ }
69
+ start_withLimit(limit, label, title) {
70
+ this.start(label, title);
71
+ this.currentLimit = limit;
72
+ }
73
+ start(label, title) {
74
+ if (this.isStarted)
75
+ this.end();
76
+ this.isStarted = true;
77
+ this.currentLabel = label;
78
+ this.currentTitle = title;
79
+ this.currentStart = Date.now();
80
+ this.currentLimit = undefined;
81
+ }
82
+ end() {
83
+ if (!this.isStarted)
84
+ return;
85
+ this.isStarted = false;
86
+ const thisTime = Date.now();
87
+ let measure = {
88
+ title: this.currentTitle,
89
+ label: this.currentLabel,
90
+ logIfMoreThan_ms: this.currentLimit,
91
+ startTime_ms: this.currentStart,
92
+ endTime_ms: thisTime,
93
+ elapsedTime_ms: thisTime - this.currentStart,
94
+ elapsedTime_sec: ((thisTime - this.currentStart) / 1000).toFixed(3) + " sec"
95
+ };
96
+ this.lastMeasure = measure;
97
+ if (this.mustSaveMeasures)
98
+ this.allMeasures.push(measure);
99
+ logAutoTrigger(measure);
100
+ if (this._onMeasureDone)
101
+ this._onMeasureDone(measure);
102
+ }
103
+ onMeasureDone(handler) {
104
+ this._onMeasureDone = handler;
105
+ }
106
+ }
52
107
  //# sourceMappingURL=_timer.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"_timer.js","sourceRoot":"","sources":["../src/_timer.ts"],"names":[],"mappings":"AAEA,MAAM,CAAC,MAAM,UAAU,GAAG,IAAI,CAAC;AAC/B,MAAM,CAAC,MAAM,UAAU,GAAG,UAAU,GAAG,EAAE,CAAC;AAC1C,MAAM,CAAC,MAAM,QAAQ,GAAG,UAAU,GAAG,EAAE,CAAC;AACxC,MAAM,CAAC,MAAM,OAAO,GAAG,QAAQ,GAAG,EAAE,CAAC;AAErC,MAAM,cAAc,GAA+C,EAAE,CAAC;AAEtE,MAAM,UAAU,WAAW,CAAC,YAAoB,EAAE,QAAuB;IACrE,IAAI,KAAK,GAAG,cAAc,CAAC,YAAY,CAAC,CAAC;IAEzC,IAAI,KAAK,EAAE,CAAC;QACR,KAAK,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;QACrB,OAAO;IACX,CAAC;IAED,cAAc,CAAC,YAAY,CAAC,GAAG,KAAK,GAAG,CAAC,QAAQ,CAAC,CAAC;IAElD,MAAM,MAAM,GAAG,KAAK,CAAC;IAErB,MAAM,OAAO,GAAG,WAAW,CAAC,KAAK,IAAI,EAAE;QACnC,KAAK,IAAI,CAAC,GAAC,CAAC,EAAE,CAAC,GAAC,MAAM,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE,CAAC;YACjC,IAAI,CAAC,GAAG,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC;YACpB,IAAI,CAAC,YAAY,OAAO;gBAAE,CAAC,GAAG,MAAM,CAAC,CAAC;YAEtC,yDAAyD;YACzD,IAAI,CAAC,KAAG,KAAK,EAAE,CAAC;gBACZ,MAAM,CAAC,MAAM,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC;gBACpB,CAAC,EAAE,CAAC;YACR,CAAC;QACL,CAAC;QAED,IAAI,CAAC,MAAM,CAAC,MAAM,EAAE,CAAC;YACjB,aAAa,CAAC,OAAO,CAAC,CAAC;YACvB,OAAM,CAAC,cAAc,CAAC,YAAY,CAAC,CAAC,CAAC;QACzC,CAAC;IAEL,CAAC,EAAE,YAAY,CAAC,CAAC;IAEjB,SAAS,CAAC,GAAG,CAAC,WAAW,CAAC,GAAG,EAAE;QAC3B,aAAa,CAAC,OAAO,CAAC,CAAC;QACvB,KAAK,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC;IACpB,CAAC,CAAC,CAAC;AACP,CAAC;AAED,MAAM,UAAU,QAAQ,CAAC,QAAkB;IACvC,UAAU,CAAC,QAAQ,EAAE,CAAC,CAAC,CAAC;AAC5B,CAAC;AAED,MAAM,UAAU,IAAI,CAAC,QAAgB;IACjC,OAAO,IAAI,OAAO,CAAC,OAAO,CAAC,EAAE,CAAC,UAAU,CAAC,OAAO,EAAE,QAAQ,CAAC,CAAC,CAAC;AACjE,CAAC;AAED,MAAM,UAAU,mBAAmB;IAC/B,SAAS,CAAC,KAAK,GAAG;QACd,UAAU;QACV,UAAU;QACV,QAAQ;QACR,OAAO;QAEP,IAAI;QACJ,WAAW;QACX,QAAQ;KACX,CAAC;AACN,CAAC"}
1
+ {"version":3,"file":"_timer.js","sourceRoot":"","sources":["../src/_timer.ts"],"names":[],"mappings":"AAEA,MAAM,CAAC,MAAM,UAAU,GAAG,IAAI,CAAC;AAC/B,MAAM,CAAC,MAAM,UAAU,GAAG,UAAU,GAAG,EAAE,CAAC;AAC1C,MAAM,CAAC,MAAM,QAAQ,GAAG,UAAU,GAAG,EAAE,CAAC;AACxC,MAAM,CAAC,MAAM,OAAO,GAAG,QAAQ,GAAG,EAAE,CAAC;AAErC,MAAM,cAAc,GAAiD,EAAE,CAAC;AAExE,MAAM,UAAU,WAAW,CAAC,YAAoB,EAAE,QAAuB;IACrE,IAAI,KAAK,GAAG,cAAc,CAAC,YAAY,CAAC,CAAC;IAEzC,IAAI,KAAK,EAAE,CAAC;QACR,KAAK,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;QACrB,OAAO;IACX,CAAC;IAED,cAAc,CAAC,YAAY,CAAC,GAAG,KAAK,GAAG,CAAC,QAAQ,CAAC,CAAC;IAElD,MAAM,MAAM,GAAG,KAAK,CAAC;IAErB,MAAM,OAAO,GAAG,WAAW,CAAC,KAAK,IAAI,EAAE;QACnC,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,MAAM,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE,CAAC;YACrC,IAAI,CAAC,GAAG,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC;YACpB,IAAI,CAAC,YAAY,OAAO;gBAAE,CAAC,GAAG,MAAM,CAAC,CAAC;YAEtC,yDAAyD;YACzD,IAAI,CAAC,KAAK,KAAK,EAAE,CAAC;gBACd,MAAM,CAAC,MAAM,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC;gBACpB,CAAC,EAAE,CAAC;YACR,CAAC;QACL,CAAC;QAED,IAAI,CAAC,MAAM,CAAC,MAAM,EAAE,CAAC;YACjB,aAAa,CAAC,OAAO,CAAC,CAAC;YACvB,OAAO,CAAC,cAAc,CAAC,YAAY,CAAC,CAAC,CAAC;QAC1C,CAAC;IAEL,CAAC,EAAE,YAAY,CAAC,CAAC;IAEjB,SAAS,CAAC,GAAG,CAAC,WAAW,CAAC,GAAG,EAAE;QAC3B,aAAa,CAAC,OAAO,CAAC,CAAC;QACvB,KAAK,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC;IACpB,CAAC,CAAC,CAAC;AACP,CAAC;AAED,MAAM,UAAU,QAAQ,CAAC,QAAoB;IACzC,UAAU,CAAC,QAAQ,EAAE,CAAC,CAAC,CAAC;AAC5B,CAAC;AAED,MAAM,UAAU,IAAI,CAAC,QAAgB;IACjC,OAAO,IAAI,OAAO,CAAC,OAAO,CAAC,EAAE,CAAC,UAAU,CAAC,OAAO,EAAE,QAAQ,CAAC,CAAC,CAAC;AACjE,CAAC;AAED,MAAM,UAAU,mBAAmB;IAC/B,SAAS,CAAC,KAAK,GAAG;QACd,UAAU;QACV,UAAU;QACV,QAAQ;QACR,OAAO;QAEP,IAAI;QACJ,WAAW;QACX,QAAQ;QAER,MAAM,EAAE,CAAC,gBAAyB,EAAE,EAAE,CAAC,IAAI,UAAU,CAAC,gBAAgB,CAAC;KAC1E,CAAC;AACN,CAAC;AAED,SAAS,cAAc,CAAC,CAAgB;IACpC,IAAI,CAAC,CAAC,gBAAgB,IAAI,CAAC,CAAC,CAAC,cAAc,GAAG,CAAC,CAAC,gBAAgB,CAAC,EAAE,CAAC;QAChE,IAAI,CAAC,CAAC,KAAK;YAAE,SAAS,CAAC,IAAI,CAAC,MAAM,CAAC,WAAW,GAAG,CAAC,CAAC,KAAK,GAAG,GAAG,EAAE,CAAC,CAAC,eAAe,CAAC,CAAC;;YAC9E,OAAO,CAAC,GAAG,CAAC,WAAW,GAAG,CAAC,CAAC,KAAK,GAAG,GAAG,EAAE,CAAC,CAAC,eAAe,CAAC,CAAC;IACrE,CAAC;AACL,CAAC;AAED,MAAM,UAAU;IAYZ,YAAmB,gBAAyB;QAAzB,qBAAgB,GAAhB,gBAAgB,CAAS;QAV5C,gBAAW,GAAoB,EAAE,CAAC;QAE1B,iBAAY,GAAW,CAAC,CAAC;QAKzB,cAAS,GAAG,KAAK,CAAC;QAClB,mBAAc,GAA8C,IAAI,CAAC;IAGzE,CAAC;IAED,eAAe,CAAC,KAAa,EAAE,KAAa,EAAE,KAAc;QACxD,IAAI,CAAC,KAAK,CAAC,KAAK,EAAE,KAAK,CAAC,CAAC;QACzB,IAAI,CAAC,YAAY,GAAG,KAAK,CAAC;IAC9B,CAAC;IAED,KAAK,CAAC,KAAa,EAAE,KAAc;QAC/B,IAAI,IAAI,CAAC,SAAS;YAAE,IAAI,CAAC,GAAG,EAAE,CAAC;QAC/B,IAAI,CAAC,SAAS,GAAG,IAAI,CAAC;QAEtB,IAAI,CAAC,YAAY,GAAG,KAAK,CAAC;QAC1B,IAAI,CAAC,YAAY,GAAG,KAAK,CAAC;QAC1B,IAAI,CAAC,YAAY,GAAG,IAAI,CAAC,GAAG,EAAE,CAAC;QAC/B,IAAI,CAAC,YAAY,GAAG,SAAS,CAAC;IAClC,CAAC;IAED,GAAG;QACC,IAAI,CAAC,IAAI,CAAC,SAAS;YAAE,OAAO;QAC5B,IAAI,CAAC,SAAS,GAAG,KAAK,CAAC;QAEvB,MAAM,QAAQ,GAAG,IAAI,CAAC,GAAG,EAAE,CAAC;QAE5B,IAAI,OAAO,GAAkB;YACzB,KAAK,EAAE,IAAI,CAAC,YAAY;YACxB,KAAK,EAAE,IAAI,CAAC,YAAY;YAExB,gBAAgB,EAAE,IAAI,CAAC,YAAY;YAEnC,YAAY,EAAE,IAAI,CAAC,YAAY;YAC/B,UAAU,EAAE,QAAQ;YACpB,cAAc,EAAE,QAAQ,GAAG,IAAI,CAAC,YAAY;YAC5C,eAAe,EAAE,CAAC,CAAC,QAAQ,GAAG,IAAI,CAAC,YAAY,CAAC,GAAG,IAAI,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,GAAG,MAAM;SAC/E,CAAA;QAED,IAAI,CAAC,WAAW,GAAG,OAAO,CAAC;QAC3B,IAAI,IAAI,CAAC,gBAAgB;YAAE,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;QAE1D,cAAc,CAAC,OAAO,CAAC,CAAC;QACxB,IAAI,IAAI,CAAC,cAAc;YAAE,IAAI,CAAC,cAAc,CAAC,OAAO,CAAC,CAAC;IAC1D,CAAC;IAED,aAAa,CAAC,OAAkD;QAC5D,IAAI,CAAC,cAAc,GAAG,OAAO,CAAC;IAClC,CAAC;CACJ"}
@@ -0,0 +1 @@
1
+ export declare function init_webSocket(): void;
@@ -0,0 +1,24 @@
1
+ export function init_webSocket() {
2
+ NodeSpace.webSocket = {
3
+ openConnection(wsUrl, protocol) {
4
+ return new Promise((resolve, reject) => {
5
+ const ws = new WebSocket(wsUrl, protocol);
6
+ ws.onopen = () => { resolve(ws); };
7
+ ws.onerror = () => { reject(); };
8
+ });
9
+ },
10
+ onError(socket, listener) {
11
+ socket.onerror = listener;
12
+ },
13
+ onClosed(socket, listener) {
14
+ socket.addEventListener('close', () => { listener(); });
15
+ },
16
+ sendMessage(socket, msg) {
17
+ socket.send(msg);
18
+ },
19
+ onMessage(socket, listener) {
20
+ socket.addEventListener('message', (event) => { listener(event.data); });
21
+ }
22
+ };
23
+ }
24
+ //# sourceMappingURL=_webSocket.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"_webSocket.js","sourceRoot":"","sources":["../src/_webSocket.ts"],"names":[],"mappings":"AAAA,MAAM,UAAU,cAAc;IAC1B,SAAS,CAAC,SAAS,GAAG;QAClB,cAAc,CAAC,KAAa,EAAE,QAAQ;YAClC,OAAO,IAAI,OAAO,CAAY,CAAC,OAAO,EAAE,MAAM,EAAE,EAAE;gBAC9C,MAAM,EAAE,GAAG,IAAI,SAAS,CAAC,KAAK,EAAE,QAAQ,CAAC,CAAC;gBAE1C,EAAE,CAAC,MAAM,GAAG,GAAG,EAAE,GAAG,OAAO,CAAC,EAAE,CAAC,CAAA,CAAC,CAAC,CAAC;gBAClC,EAAE,CAAC,OAAO,GAAG,GAAG,EAAE,GAAG,MAAM,EAAE,CAAC,CAAC,CAAC,CAAC;YACrC,CAAC,CAAC,CAAC;QACP,CAAC;QAED,OAAO,CAAC,MAAM,EAAE,QAAQ;YACpB,MAAM,CAAC,OAAO,GAAG,QAAQ,CAAC;QAC9B,CAAC;QAED,QAAQ,CAAC,MAAM,EAAE,QAAQ;YACrB,MAAM,CAAC,gBAAgB,CAAC,OAAO,EAAE,GAAG,EAAE,GAAG,QAAQ,EAAE,CAAA,CAAC,CAAC,CAAC,CAAC;QAC3D,CAAC;QAED,WAAW,CAAC,MAAM,EAAE,GAAG;YACnB,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;QACrB,CAAC;QAED,SAAS,CAAC,MAAM,EAAE,QAAQ;YACtB,MAAM,CAAC,gBAAgB,CAAC,SAAS,EAAE,CAAC,KAAK,EAAE,EAAE,GAAG,QAAQ,CAAC,KAAK,CAAC,IAAI,CAAC,CAAA,CAAC,CAAC,CAAC,CAAC;QAC5E,CAAC;KACJ,CAAC;AACN,CAAC"}
@@ -0,0 +1 @@
1
+ export declare function patch_webSocket(): void;
@@ -0,0 +1,25 @@
1
+ import { isBunJs, isNodeJs } from "./common.js";
2
+ import { WebSocket as WsWebSocket } from "ws";
3
+ export function patch_webSocket() {
4
+ if (isNodeJs()) {
5
+ NodeSpace.webSocket.openConnection = (wsUrl, protocol) => {
6
+ return new Promise((resolve, reject) => {
7
+ const ws = new WsWebSocket(wsUrl, protocol);
8
+ const ws2 = ws;
9
+ ws.onopen = () => { resolve(ws2); };
10
+ ws.onerror = () => { reject(); };
11
+ });
12
+ };
13
+ }
14
+ else if (isBunJs()) {
15
+ NodeSpace.webSocket.onClosed = (socket, listener) => {
16
+ const data = (socket.data);
17
+ data.onClosed = listener;
18
+ };
19
+ NodeSpace.webSocket.onMessage = (socket, listener) => {
20
+ const data = (socket.data);
21
+ data.onMessage = listener;
22
+ };
23
+ }
24
+ }
25
+ //# sourceMappingURL=_webSocket_s.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"_webSocket_s.js","sourceRoot":"","sources":["../src/_webSocket_s.ts"],"names":[],"mappings":"AAAA,OAAO,EAAC,OAAO,EAAE,QAAQ,EAAC,MAAM,aAAa,CAAC;AAC9C,OAAO,EAAC,SAAS,IAAI,WAAW,EAAC,MAAM,IAAI,CAAC;AAE5C,MAAM,UAAU,eAAe;IAC3B,IAAI,QAAQ,EAAE,EAAE,CAAC;QACb,SAAS,CAAC,SAAS,CAAC,cAAc,GAAG,CAAC,KAAa,EAAE,QAAQ,EAAE,EAAE;YAC7D,OAAO,IAAI,OAAO,CAAY,CAAC,OAAO,EAAE,MAAM,EAAE,EAAE;gBAC9C,MAAM,EAAE,GAAG,IAAI,WAAW,CAAC,KAAK,EAAE,QAAQ,CAAC,CAAC;gBAC5C,MAAM,GAAG,GAAG,EAA0B,CAAC;gBAEvC,EAAE,CAAC,MAAM,GAAG,GAAG,EAAE,GAAG,OAAO,CAAC,GAAG,CAAC,CAAA,CAAC,CAAC,CAAC;gBACnC,EAAE,CAAC,OAAO,GAAG,GAAG,EAAE,GAAG,MAAM,EAAE,CAAC,CAAC,CAAC,CAAC;YACrC,CAAC,CAAC,CAAC;QACP,CAAC,CAAA;IACL,CAAC;SAAM,IAAI,OAAO,EAAE,EAAE,CAAC;QACnB,SAAS,CAAC,SAAS,CAAC,QAAQ,GAAG,CAAC,MAAM,EAAE,QAAQ,EAAE,EAAE;YAChD,MAAM,IAAI,GAAG,CAAE,MAAc,CAAC,IAAI,CAAQ,CAAC;YAC3C,IAAI,CAAC,QAAQ,GAAG,QAAQ,CAAC;QAC7B,CAAC,CAAC;QAEF,SAAS,CAAC,SAAS,CAAC,SAAS,GAAG,CAAC,MAAM,EAAE,QAAQ,EAAE,EAAE;YACjD,MAAM,IAAI,GAAG,CAAE,MAAc,CAAC,IAAI,CAAQ,CAAC;YAC3C,IAAI,CAAC,SAAS,GAAG,QAAQ,CAAC;QAC9B,CAAC,CAAC;IACN,CAAC;AACL,CAAC"}
@@ -5,6 +5,7 @@ import { init_nodeSpaceTimer } from "./_timer.js";
5
5
  import { init_nodeSpaceThread } from "./_thread.js";
6
6
  import { init_nodeSpaceExtensionPoints } from "./_extensionPoints.js";
7
7
  import { init_term } from "./_term.js";
8
+ import { init_webSocket } from "./_webSocket.js";
8
9
  function applyDefaults(source, defaults) {
9
10
  if (!source)
10
11
  source = {};
@@ -25,6 +26,7 @@ function initBrowser() {
25
26
  init_nodeSpaceThread();
26
27
  init_nodeSpaceExtensionPoints();
27
28
  init_term();
29
+ init_webSocket();
28
30
  // Allow the ref to exist.
29
31
  //
30
32
  NodeSpace.fs = {};
@@ -1 +1 @@
1
- {"version":3,"file":"jopi-node-space-browser.js","sourceRoot":"","sources":["../src/jopi-node-space-browser.ts"],"names":[],"mappings":"AAAA,OAAO,EAAC,kBAAkB,EAAC,MAAM,YAAY,CAAC;AAC9C,OAAO,EAAC,iBAAiB,EAAC,MAAM,WAAW,CAAC;AAC5C,OAAO,EAAC,qBAAqB,EAAC,MAAM,eAAe,CAAC;AACpD,OAAO,EAAC,mBAAmB,EAAC,MAAM,aAAa,CAAC;AAChD,OAAO,EAAC,oBAAoB,EAAC,MAAM,cAAc,CAAC;AAClD,OAAO,EAAC,6BAA6B,EAAC,MAAM,uBAAuB,CAAC;AACpE,OAAO,EAAC,SAAS,EAAC,MAAM,YAAY,CAAC;AAGrC,SAAS,aAAa,CAAI,MAAmB,EAAE,QAAW;IACtD,IAAI,CAAC,MAAM;QAAE,MAAM,GAAG,EAAO,CAAC;IAC9B,OAAO,EAAC,GAAG,QAAQ,EAAE,GAAG,MAAM,EAAC,CAAC;AACpC,CAAC;AAED,SAAS,eAAe,CAAC,CAAU;IAC/B,IAAI,CAAC,YAAY,KAAK;QAAE,OAAO,CAAC,CAAC,OAAO,CAAC;IACzC,OAAO,EAAE,GAAG,CAAC,CAAC;AAClB,CAAC;AAED,SAAS,WAAW;IAChB,SAAS,CAAC,aAAa,GAAG,aAAa,CAAC;IACxC,SAAS,CAAC,eAAe,GAAG,eAAe,CAAC;IAE5C,kBAAkB,EAAE,CAAC;IACrB,iBAAiB,EAAE,CAAC;IACpB,qBAAqB,EAAE,CAAC;IACxB,mBAAmB,EAAE,CAAC;IACtB,oBAAoB,EAAE,CAAC;IACvB,6BAA6B,EAAE,CAAC;IAChC,SAAS,EAAE,CAAC;IAEZ,0BAA0B;IAC1B,EAAE;IACF,SAAS,CAAC,EAAE,GAAG,EAAoB,CAAC;IACpC,SAAS,CAAC,MAAM,GAAG,EAAgB,CAAC;IACpC,SAAS,CAAC,QAAQ,GAAG,EAAkB,CAAC;IACxC,SAAS,CAAC,EAAE,GAAG,EAAY,CAAC;IAC5B,SAAS,CAAC,MAAM,GAAG,EAAgB,CAAC;AACxC,CAAC;AAED,WAAW,EAAE,CAAC"}
1
+ {"version":3,"file":"jopi-node-space-browser.js","sourceRoot":"","sources":["../src/jopi-node-space-browser.ts"],"names":[],"mappings":"AAAA,OAAO,EAAC,kBAAkB,EAAC,MAAM,YAAY,CAAC;AAC9C,OAAO,EAAC,iBAAiB,EAAC,MAAM,WAAW,CAAC;AAC5C,OAAO,EAAC,qBAAqB,EAAC,MAAM,eAAe,CAAC;AACpD,OAAO,EAAC,mBAAmB,EAAC,MAAM,aAAa,CAAC;AAChD,OAAO,EAAC,oBAAoB,EAAC,MAAM,cAAc,CAAC;AAClD,OAAO,EAAC,6BAA6B,EAAC,MAAM,uBAAuB,CAAC;AACpE,OAAO,EAAC,SAAS,EAAC,MAAM,YAAY,CAAC;AAErC,OAAO,EAAC,cAAc,EAAC,MAAM,iBAAiB,CAAC;AAE/C,SAAS,aAAa,CAAI,MAAmB,EAAE,QAAW;IACtD,IAAI,CAAC,MAAM;QAAE,MAAM,GAAG,EAAO,CAAC;IAC9B,OAAO,EAAC,GAAG,QAAQ,EAAE,GAAG,MAAM,EAAC,CAAC;AACpC,CAAC;AAED,SAAS,eAAe,CAAC,CAAU;IAC/B,IAAI,CAAC,YAAY,KAAK;QAAE,OAAO,CAAC,CAAC,OAAO,CAAC;IACzC,OAAO,EAAE,GAAG,CAAC,CAAC;AAClB,CAAC;AAED,SAAS,WAAW;IAChB,SAAS,CAAC,aAAa,GAAG,aAAa,CAAC;IACxC,SAAS,CAAC,eAAe,GAAG,eAAe,CAAC;IAE5C,kBAAkB,EAAE,CAAC;IACrB,iBAAiB,EAAE,CAAC;IACpB,qBAAqB,EAAE,CAAC;IACxB,mBAAmB,EAAE,CAAC;IACtB,oBAAoB,EAAE,CAAC;IACvB,6BAA6B,EAAE,CAAC;IAChC,SAAS,EAAE,CAAC;IACZ,cAAc,EAAE,CAAC;IAEjB,0BAA0B;IAC1B,EAAE;IACF,SAAS,CAAC,EAAE,GAAG,EAAoB,CAAC;IACpC,SAAS,CAAC,MAAM,GAAG,EAAgB,CAAC;IACpC,SAAS,CAAC,QAAQ,GAAG,EAAkB,CAAC;IACxC,SAAS,CAAC,EAAE,GAAG,EAAY,CAAC;IAC5B,SAAS,CAAC,MAAM,GAAG,EAAgB,CAAC;AACxC,CAAC;AAED,WAAW,EAAE,CAAC"}
@@ -6,6 +6,7 @@ import { patch_compress } from "./_compress_s.js";
6
6
  import { isBunJs, isNodeJs } from "./common.js";
7
7
  import { patch_os } from "./_os_s.js";
8
8
  import { patch_stream } from "./_stream_s.js";
9
+ import { patch_webSocket } from "./_webSocket_s.js";
9
10
  let serverType = "nodejs";
10
11
  if (isBunJs())
11
12
  serverType = "bunjs";
@@ -24,6 +25,10 @@ patch_stream();
24
25
  patch_crypto();
25
26
  patch_compress();
26
27
  patch_os();
28
+ patch_webSocket();
27
29
  NodeSpace.app.declareServerSideReady();
30
+ // When the program exits gracefully
28
31
  process.on('exit', () => NodeSpace.app.declareAppExiting());
32
+ // When the user wants to terminate the program (CTRL+C)
33
+ process.on('SIGINT', () => NodeSpace.app.declareAppExiting());
29
34
  //# sourceMappingURL=jopi-node-space-server.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"jopi-node-space-server.js","sourceRoot":"","sources":["../src/jopi-node-space-server.ts"],"names":[],"mappings":"AAAA,OAAO,EAAC,aAAa,EAAC,MAAM,iBAAiB,CAAC;AAC9C,OAAO,EAAC,YAAY,EAAC,MAAM,gBAAgB,CAAC;AAC5C,OAAO,EAAC,QAAQ,EAAC,MAAM,YAAY,CAAC;AACpC,OAAO,EAAC,YAAY,EAAC,MAAM,gBAAgB,CAAC;AAC5C,OAAO,EAAC,cAAc,EAAC,MAAM,kBAAkB,CAAC;AAGhD,OAAO,EAAC,OAAO,EAAE,QAAQ,EAAC,MAAM,aAAa,CAAC;AAC9C,OAAO,EAAC,QAAQ,EAAC,MAAM,YAAY,CAAC;AACpC,OAAO,EAAC,YAAY,EAAC,MAAM,gBAAgB,CAAC;AAE5C,IAAI,UAAU,GAAe,QAAQ,CAAC;AACtC,IAAI,OAAO,EAAE;IAAE,UAAU,GAAG,OAAO,CAAC;AACpC,MAAM,SAAS,GAAG,UAAU,CAAC,SAAS,CAAC;AAEvC,SAAS,CAAC,IAAI,GAAG;IACb,QAAQ,EAAE,QAAQ,EAAE;IACpB,OAAO,EAAE,OAAO,EAAE;IAClB,SAAS,EAAE,KAAK;IAChB,YAAY,EAAE,IAAI;IAClB,UAAU,EAAE,UAAU;CACzB,CAAA;AAED,aAAa,EAAE,CAAC;AAChB,YAAY,EAAE,CAAC;AACf,QAAQ,EAAE,CAAC;AACX,YAAY,EAAE,CAAC;AACf,YAAY,EAAE,CAAC;AACf,cAAc,EAAE,CAAC;AACjB,QAAQ,EAAE,CAAC;AAEX,SAAS,CAAC,GAAG,CAAC,sBAAsB,EAAE,CAAC;AACvC,OAAO,CAAC,EAAE,CAAC,MAAM,EAAE,GAAG,EAAE,CAAC,SAAS,CAAC,GAAG,CAAC,iBAAiB,EAAE,CAAC,CAAC"}
1
+ {"version":3,"file":"jopi-node-space-server.js","sourceRoot":"","sources":["../src/jopi-node-space-server.ts"],"names":[],"mappings":"AAAA,OAAO,EAAC,aAAa,EAAC,MAAM,iBAAiB,CAAC;AAC9C,OAAO,EAAC,YAAY,EAAC,MAAM,gBAAgB,CAAC;AAC5C,OAAO,EAAC,QAAQ,EAAC,MAAM,YAAY,CAAC;AACpC,OAAO,EAAC,YAAY,EAAC,MAAM,gBAAgB,CAAC;AAC5C,OAAO,EAAC,cAAc,EAAC,MAAM,kBAAkB,CAAC;AAGhD,OAAO,EAAC,OAAO,EAAE,QAAQ,EAAC,MAAM,aAAa,CAAC;AAC9C,OAAO,EAAC,QAAQ,EAAC,MAAM,YAAY,CAAC;AACpC,OAAO,EAAC,YAAY,EAAC,MAAM,gBAAgB,CAAC;AAC5C,OAAO,EAAC,eAAe,EAAC,MAAM,mBAAmB,CAAC;AAElD,IAAI,UAAU,GAAe,QAAQ,CAAC;AACtC,IAAI,OAAO,EAAE;IAAE,UAAU,GAAG,OAAO,CAAC;AACpC,MAAM,SAAS,GAAG,UAAU,CAAC,SAAS,CAAC;AAEvC,SAAS,CAAC,IAAI,GAAG;IACb,QAAQ,EAAE,QAAQ,EAAE;IACpB,OAAO,EAAE,OAAO,EAAE;IAClB,SAAS,EAAE,KAAK;IAChB,YAAY,EAAE,IAAI;IAClB,UAAU,EAAE,UAAU;CACzB,CAAA;AAED,aAAa,EAAE,CAAC;AAChB,YAAY,EAAE,CAAC;AACf,QAAQ,EAAE,CAAC;AACX,YAAY,EAAE,CAAC;AACf,YAAY,EAAE,CAAC;AACf,cAAc,EAAE,CAAC;AACjB,QAAQ,EAAE,CAAC;AACX,eAAe,EAAE,CAAC;AAElB,SAAS,CAAC,GAAG,CAAC,sBAAsB,EAAE,CAAC;AAEvC,oCAAoC;AACpC,OAAO,CAAC,EAAE,CAAC,MAAM,EAAE,GAAG,EAAE,CAAC,SAAS,CAAC,GAAG,CAAC,iBAAiB,EAAE,CAAC,CAAC;AAE5D,wDAAwD;AACxD,OAAO,CAAC,EAAE,CAAC,QAAQ,EAAE,GAAG,EAAE,CAAC,SAAS,CAAC,GAAG,CAAC,iBAAiB,EAAE,CAAC,CAAC"}
package/package.json CHANGED
@@ -1,5 +1,5 @@
1
1
  {
2
- "version": "0.0.8",
2
+ "version": "0.0.14",
3
3
  "private": false,
4
4
  "name": "jopi-node-space",
5
5
  "license": "MIT",
@@ -7,25 +7,35 @@
7
7
  "keywords": [],
8
8
  "author": "Johan PIQUET",
9
9
  "description": "An helper for hybrid apps",
10
-
11
- "engines": {"bun": "^1.2.18", "node": ">=22.18.0"},
12
-
10
+ "engines": {
11
+ "bun": "^1.2.18",
12
+ "node": ">=22.18.0"
13
+ },
13
14
  "type": "module",
14
15
  "main": "dist/index.js",
15
16
  "types": "dist/index.d.ts",
16
-
17
+ "files": [
18
+ "dist",
19
+ "README.md",
20
+ "LICENSE",
21
+ "src"
22
+ ],
17
23
  "scripts": {
24
+ "build": "npx tsc",
18
25
  "tsc": "tsc",
19
- "npm-publish": "npm publish"
26
+ "bun-publish": "npx tsc && bun publish",
27
+ "untrack": "git rm -r --cached -- ./dist/**;"
20
28
  },
21
-
22
29
  "devDependencies": {
23
30
  "@types/bun": "latest",
24
31
  "@types/node": "latest",
25
32
  "@types/mime-types": "latest"
26
33
  },
27
-
28
34
  "dependencies": {
29
- "mime-types": "^3.0.1"
30
- }
35
+ "@types/ws": "^8.18.1",
36
+ "mime-types": "^3.0.1",
37
+ "ws": "^8.18.3"
38
+ },
39
+ "nodeSwitch": true,
40
+ "nodeSwitch-default": "node"
31
41
  }
package/src/__global.ts CHANGED
@@ -22,6 +22,7 @@ export interface NodeSpaceType {
22
22
  app: AppImpl;
23
23
  extensionPoints: ExtensionPointImpl;
24
24
  term: TerminalImpl;
25
+ webSocket: WebSocketImpl;
25
26
 
26
27
  // >>> Server side only
27
28
 
@@ -38,6 +39,35 @@ export interface NodeSpaceType {
38
39
 
39
40
  // ********************************************
40
41
 
42
+ export interface WebSocketImpl {
43
+ /**
44
+ * Open a connection to a server.
45
+ * The url must be of the type "ws://host-name:optionalPort/optionalPath".
46
+ * Ex: "ws://127.0.0.1:3000/my-end-point".
47
+ */
48
+ openConnection(wsUrl: string, protocol?: string|string[]): Promise<WebSocket>;
49
+
50
+ /**
51
+ * Is called when the socket is closed.
52
+ */
53
+ sendMessage(socket: WebSocket, msg: string|Buffer|Uint8Array|ArrayBuffer): void;
54
+
55
+ /**
56
+ * Send a text message through this webSocket.
57
+ */
58
+ onMessage(socket: WebSocket, listener: ((msg: string|Buffer) => void)): void;
59
+
60
+ /**
61
+ * Add a listener which is called when the socket receives a message.
62
+ */
63
+ onClosed(socket: WebSocket, listener: () => void): void;
64
+
65
+ /**
66
+ * Add a listener which is called when an error occurs.
67
+ */
68
+ onError(socket: WebSocket, listener: () => void): void;
69
+ }
70
+
41
71
  export interface CompressImpl {
42
72
  gunzipSync(data: Uint8Array|string): Uint8Array;
43
73
  gzipSync(data: Uint8Array|string): Uint8Array;
@@ -87,6 +117,8 @@ export interface TimerImpl {
87
117
  tick: (delayMs: number) => Promise<void>;
88
118
  newInterval: (durationInMs: number, callback: TimerCallback) => void;
89
119
  deferred: (callback: ()=>void) => void;
120
+
121
+ chrono(mustSaveMeasures: boolean): Chrono;
90
122
  }
91
123
 
92
124
  export interface FileState {
@@ -182,7 +214,7 @@ export interface TerminalImpl {
182
214
  /**
183
215
  * Build a console.log function that uses the colors provided in params.
184
216
  */
185
- buildLogger: (...colors: string[]) => ((...params: any[])=>void);
217
+ buildLogger: (...colors: string[]) => TermLogger;
186
218
 
187
219
  /**
188
220
  * Build a console.log function that uses the colors provided in params.
@@ -199,6 +231,15 @@ export interface TerminalImpl {
199
231
  */
200
232
  consoleLogTemp: (isTemp: boolean, ...args: unknown[]) => void,
201
233
 
234
+ logRed: TermLogger,
235
+ logBgRed: TermLogger,
236
+
237
+ logGreen: TermLogger,
238
+ logBgGreen: TermLogger,
239
+
240
+ logBlue: TermLogger,
241
+ logBgBlue: TermLogger,
242
+
202
243
  T_RESET: string;
203
244
  T_BOLD: string;
204
245
  T_UNDERLINE: string;
@@ -228,4 +269,31 @@ export interface TerminalImpl {
228
269
  export interface CryptoImpl {
229
270
  fastHash(text: string): string;
230
271
  md5(text: string): string;
272
+ }
273
+
274
+ // ********************************
275
+
276
+ export type TermLogger = (...args: any[]) => void;
277
+
278
+ export interface Chrono {
279
+ lastMeasure?: ChronoMeasure;
280
+ allMeasures: ChronoMeasure[];
281
+
282
+ start(label: string, printTitle?: string): void;
283
+ start_withLimit(limit_ms: number, label: string, printTitle?: string): void;
284
+
285
+ end(): void;
286
+
287
+ onMeasureDone(handler: null | ((measure: ChronoMeasure) => void)): void;
288
+ }
289
+
290
+ export interface ChronoMeasure {
291
+ label?: string;
292
+ title?: string;
293
+ logIfMoreThan_ms?: number;
294
+
295
+ startTime_ms: number;
296
+ endTime_ms: number;
297
+ elapsedTime_ms: number;
298
+ elapsedTime_sec: string;
231
299
  }
package/src/_app.ts CHANGED
@@ -10,7 +10,7 @@ export function init_nodeSpaceApp() {
10
10
  let isServerSideReady = !(isNodeJs() || isBunJs());
11
11
 
12
12
  let isHotReload = globalThis.jopiHotReload !== undefined;
13
- let isAppStarted = false;
13
+ let gIsAppStarted = false;
14
14
 
15
15
  if (isHotReload) {
16
16
  execListeners(globalThis.jopiHotReload.onHotReload).then();
@@ -46,32 +46,36 @@ export function init_nodeSpaceApp() {
46
46
  },
47
47
 
48
48
  onAppStart: (listener: Listener) => {
49
- if (isAppStarted) listener();
49
+ if (gIsAppStarted) listener();
50
50
  else onAppStart.push(listener);
51
51
  },
52
52
 
53
53
  onAppExiting: (listener: Listener) => {
54
- if (!isAppStarted) listener();
54
+ if (gIsExited) listener();
55
55
  else onAppExiting.push(listener);
56
56
  },
57
57
 
58
58
  onAppExited: (listener: Listener) => {
59
- if (!isAppStarted) listener();
59
+ if (gIsExited) listener();
60
60
  else onAppExited.push(listener);
61
61
  },
62
62
 
63
63
  declareAppStarted: async () => {
64
- isAppStarted = true;
64
+ gIsAppStarted = true;
65
65
  await execListeners(onAppStart);
66
66
  },
67
67
 
68
68
  declareAppExiting: async () => {
69
+ if (gIsExited) return;
70
+ gIsExited = true;
71
+
69
72
  if (isUsingWorker()) {
70
73
  // Wait 1 sec, which allows the worker to correctly initialize.
71
74
  await NodeSpace.timer.tick(1000);
72
75
  }
73
76
 
74
- isAppStarted = false;
77
+ gIsAppStarted = false;
78
+
75
79
  await execListeners(onAppExiting);
76
80
 
77
81
  if (isUsingWorker()) {
@@ -84,7 +88,6 @@ export function init_nodeSpaceApp() {
84
88
  await NodeSpace.timer.tick(50);
85
89
  }
86
90
 
87
- if (onAppExited.length) debugger;
88
91
  await execListeners(onAppExited);
89
92
  },
90
93
 
@@ -115,4 +118,6 @@ export function init_nodeSpaceApp() {
115
118
  delete(memory[key]);
116
119
  }
117
120
  };
118
- }
121
+ }
122
+
123
+ let gIsExited = false;
package/src/_term.ts CHANGED
@@ -54,6 +54,11 @@ function buildWriter(...colors: any[]) {
54
54
  return (...values: any[]) => before + values.join(" ") + T_RESET;
55
55
  }
56
56
 
57
+ const buildLogger: (...colors: string[]) => ((...params: any[])=>void) = (...colors) => {
58
+ const writer = buildWriter(...colors);
59
+ return (...values) => console.log(writer(...values));
60
+ };
61
+
57
62
  export function init_term() {
58
63
  NodeSpace.term = {
59
64
  cssText,
@@ -79,13 +84,19 @@ export function init_term() {
79
84
  },
80
85
  buildWriter: buildWriter,
81
86
 
82
- buildLogger(...colors) {
83
- const writer = buildWriter(...colors);
84
- return (...values) => console.log(writer(...values));
85
- },
87
+ buildLogger,
86
88
 
87
89
  indentText(spacer, text) {
88
90
  return spacer + text.replaceAll("\r", "").replaceAll("\n", spacer + "\n");
89
- }
91
+ },
92
+
93
+ logRed: buildLogger(C_RED),
94
+ logBgRed: buildLogger(B_RED),
95
+
96
+ logBlue: buildLogger(C_BLUE),
97
+ logBgBlue: buildLogger(B_BLUE),
98
+
99
+ logGreen: buildLogger(C_GREEN),
100
+ logBgGreen: buildLogger(B_GREEN)
90
101
  }
91
102
  }
package/src/_timer.ts CHANGED
@@ -1,11 +1,11 @@
1
- import type {TimerCallback} from "./__global.ts";
1
+ import type {Chrono, ChronoMeasure, TimerCallback} from "./__global.ts";
2
2
 
3
3
  export const ONE_SECOND = 1000;
4
4
  export const ONE_MINUTE = ONE_SECOND * 60;
5
5
  export const ONE_HOUR = ONE_MINUTE * 60;
6
6
  export const ONE_DAY = ONE_HOUR * 24;
7
7
 
8
- const timerListeners: {[timerDuration: number]: TimerCallback[]} = {};
8
+ const timerListeners: { [timerDuration: number]: TimerCallback[] } = {};
9
9
 
10
10
  export function newInterval(durationInMs: number, callback: TimerCallback) {
11
11
  let entry = timerListeners[durationInMs];
@@ -20,12 +20,12 @@ export function newInterval(durationInMs: number, callback: TimerCallback) {
20
20
  const toCall = entry;
21
21
 
22
22
  const timerId = setInterval(async () => {
23
- for (let i=0; i<toCall.length; i++) {
23
+ for (let i = 0; i < toCall.length; i++) {
24
24
  let r = toCall[i]();
25
25
  if (r instanceof Promise) r = await r;
26
26
 
27
27
  // Returning false means the timer is not needed anymore.
28
- if (r===false) {
28
+ if (r === false) {
29
29
  toCall.splice(i, 1);
30
30
  i--;
31
31
  }
@@ -33,7 +33,7 @@ export function newInterval(durationInMs: number, callback: TimerCallback) {
33
33
 
34
34
  if (!toCall.length) {
35
35
  clearInterval(timerId);
36
- delete(timerListeners[durationInMs]);
36
+ delete (timerListeners[durationInMs]);
37
37
  }
38
38
 
39
39
  }, durationInMs);
@@ -44,7 +44,7 @@ export function newInterval(durationInMs: number, callback: TimerCallback) {
44
44
  });
45
45
  }
46
46
 
47
- export function deferred(callback: ()=>void) {
47
+ export function deferred(callback: () => void) {
48
48
  setTimeout(callback, 0);
49
49
  }
50
50
 
@@ -61,6 +61,75 @@ export function init_nodeSpaceTimer() {
61
61
 
62
62
  tick,
63
63
  newInterval,
64
- deferred
64
+ deferred,
65
+
66
+ chrono: (mustSaveMeasures: boolean) => new ChronoImpl(mustSaveMeasures)
65
67
  };
68
+ }
69
+
70
+ function logAutoTrigger(m: ChronoMeasure) {
71
+ if (m.logIfMoreThan_ms && (m.elapsedTime_ms > m.logIfMoreThan_ms)) {
72
+ if (m.title) NodeSpace.term.logRed("Chrono - " + m.title + ":", m.elapsedTime_sec);
73
+ else console.log("Chrono - " + m.label + ":", m.elapsedTime_sec);
74
+ }
75
+ }
76
+
77
+ class ChronoImpl implements Chrono {
78
+ lastMeasure?: ChronoMeasure;
79
+ allMeasures: ChronoMeasure[] = [];
80
+
81
+ private currentStart: number = 0;
82
+ private currentLabel: string|undefined;
83
+ private currentTitle: string|undefined;
84
+ private currentLimit: number|undefined;
85
+
86
+ private isStarted = false;
87
+ private _onMeasureDone: null | ((measure: ChronoMeasure) => void) = null;
88
+
89
+ constructor(public mustSaveMeasures: boolean) {
90
+ }
91
+
92
+ start_withLimit(limit: number, label: string, title?: string) {
93
+ this.start(label, title);
94
+ this.currentLimit = limit;
95
+ }
96
+
97
+ start(label: string, title?: string) {
98
+ if (this.isStarted) this.end();
99
+ this.isStarted = true;
100
+
101
+ this.currentLabel = label;
102
+ this.currentTitle = title;
103
+ this.currentStart = Date.now();
104
+ this.currentLimit = undefined;
105
+ }
106
+
107
+ end() {
108
+ if (!this.isStarted) return;
109
+ this.isStarted = false;
110
+
111
+ const thisTime = Date.now();
112
+
113
+ let measure: ChronoMeasure = {
114
+ title: this.currentTitle,
115
+ label: this.currentLabel,
116
+
117
+ logIfMoreThan_ms: this.currentLimit,
118
+
119
+ startTime_ms: this.currentStart,
120
+ endTime_ms: thisTime,
121
+ elapsedTime_ms: thisTime - this.currentStart,
122
+ elapsedTime_sec: ((thisTime - this.currentStart) / 1000).toFixed(3) + " sec"
123
+ }
124
+
125
+ this.lastMeasure = measure;
126
+ if (this.mustSaveMeasures) this.allMeasures.push(measure);
127
+
128
+ logAutoTrigger(measure);
129
+ if (this._onMeasureDone) this._onMeasureDone(measure);
130
+ }
131
+
132
+ onMeasureDone(handler: null | ((measure: ChronoMeasure) => void)) {
133
+ this._onMeasureDone = handler;
134
+ }
66
135
  }
@@ -0,0 +1,28 @@
1
+ export function init_webSocket() {
2
+ NodeSpace.webSocket = {
3
+ openConnection(wsUrl: string, protocol): Promise<WebSocket> {
4
+ return new Promise<WebSocket>((resolve, reject) => {
5
+ const ws = new WebSocket(wsUrl, protocol);
6
+
7
+ ws.onopen = () => { resolve(ws) };
8
+ ws.onerror = () => { reject(); };
9
+ });
10
+ },
11
+
12
+ onError(socket, listener): void {
13
+ socket.onerror = listener;
14
+ },
15
+
16
+ onClosed(socket, listener): void {
17
+ socket.addEventListener('close', () => { listener() });
18
+ },
19
+
20
+ sendMessage(socket, msg): void {
21
+ socket.send(msg);
22
+ },
23
+
24
+ onMessage(socket, listener) {
25
+ socket.addEventListener('message', (event) => { listener(event.data) });
26
+ }
27
+ };
28
+ }
@@ -0,0 +1,26 @@
1
+ import {isBunJs, isNodeJs} from "./common.ts";
2
+ import {WebSocket as WsWebSocket} from "ws";
3
+
4
+ export function patch_webSocket() {
5
+ if (isNodeJs()) {
6
+ NodeSpace.webSocket.openConnection = (wsUrl: string, protocol) => {
7
+ return new Promise<WebSocket>((resolve, reject) => {
8
+ const ws = new WsWebSocket(wsUrl, protocol);
9
+ const ws2 = ws as unknown as WebSocket;
10
+
11
+ ws.onopen = () => { resolve(ws2) };
12
+ ws.onerror = () => { reject(); };
13
+ });
14
+ }
15
+ } else if (isBunJs()) {
16
+ NodeSpace.webSocket.onClosed = (socket, listener) => {
17
+ const data = ((socket as any).data) as any;
18
+ data.onClosed = listener;
19
+ };
20
+
21
+ NodeSpace.webSocket.onMessage = (socket, listener) => {
22
+ const data = ((socket as any).data) as any;
23
+ data.onMessage = listener;
24
+ };
25
+ }
26
+ }
@@ -6,6 +6,7 @@ import {init_nodeSpaceThread} from "./_thread.ts";
6
6
  import {init_nodeSpaceExtensionPoints} from "./_extensionPoints.ts";
7
7
  import {init_term} from "./_term.ts";
8
8
  import type {CompressImpl, CryptoImpl, FileSystemImpl, OsImpl, StreamImpl} from "./__global.ts";
9
+ import {init_webSocket} from "./_webSocket.ts";
9
10
 
10
11
  function applyDefaults<T>(source: T|undefined, defaults: T): T {
11
12
  if (!source) source = {} as T;
@@ -28,6 +29,7 @@ function initBrowser() {
28
29
  init_nodeSpaceThread();
29
30
  init_nodeSpaceExtensionPoints();
30
31
  init_term();
32
+ init_webSocket();
31
33
 
32
34
  // Allow the ref to exist.
33
35
  //
@@ -8,6 +8,7 @@ import type {ServerType} from "./__global.ts";
8
8
  import {isBunJs, isNodeJs} from "./common.ts";
9
9
  import {patch_os} from "./_os_s.ts";
10
10
  import {patch_stream} from "./_stream_s.ts";
11
+ import {patch_webSocket} from "./_webSocket_s.ts";
11
12
 
12
13
  let serverType: ServerType = "nodejs";
13
14
  if (isBunJs()) serverType = "bunjs";
@@ -28,6 +29,12 @@ patch_stream();
28
29
  patch_crypto();
29
30
  patch_compress();
30
31
  patch_os();
32
+ patch_webSocket();
31
33
 
32
34
  NodeSpace.app.declareServerSideReady();
33
- process.on('exit', () => NodeSpace.app.declareAppExiting());
35
+
36
+ // When the program exits gracefully
37
+ process.on('exit', () => NodeSpace.app.declareAppExiting());
38
+
39
+ // When the user wants to terminate the program (CTRL+C)
40
+ process.on('SIGINT', () => NodeSpace.app.declareAppExiting());
package/__UPDATES.md DELETED
@@ -1 +0,0 @@
1
- **2025-08-18** ---> npm version 0.0.8
package/dist/browser.d.ts DELETED
@@ -1 +0,0 @@
1
- export declare function initBrowser(): void;
package/dist/browser.js DELETED
@@ -1,35 +0,0 @@
1
- import { init_nodeSpaceWhat } from "./_what.js";
2
- import { init_nodeSpaceApp } from "./_app.js";
3
- import { init_nodeSpaceProcess } from "./_process.js";
4
- import { init_nodeSpaceTimer } from "./_timer.js";
5
- import { init_nodeSpaceThread } from "./_thread.js";
6
- import { init_nodeSpaceExtensionPoints } from "./_extensionPoints.js";
7
- import { init_term } from "./_term.js";
8
- function applyDefaults(source, defaults) {
9
- if (!source)
10
- source = {};
11
- return { ...defaults, ...source };
12
- }
13
- function getErrorMessage(e) {
14
- if (e instanceof Error)
15
- return e.message;
16
- return "" + e;
17
- }
18
- export function initBrowser() {
19
- NodeSpace.applyDefaults = applyDefaults;
20
- NodeSpace.getErrorMessage = getErrorMessage;
21
- init_nodeSpaceWhat();
22
- init_nodeSpaceApp();
23
- init_nodeSpaceProcess();
24
- init_nodeSpaceTimer();
25
- init_nodeSpaceThread();
26
- init_nodeSpaceExtensionPoints();
27
- init_term();
28
- // Allow the ref to exist.
29
- //
30
- NodeSpace.fs = {};
31
- NodeSpace.crypto = {};
32
- NodeSpace.compress = {};
33
- NodeSpace.os = {};
34
- }
35
- //# sourceMappingURL=browser.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"browser.js","sourceRoot":"","sources":["../src/browser.ts"],"names":[],"mappings":"AAAA,OAAO,EAAC,kBAAkB,EAAC,MAAM,YAAY,CAAC;AAC9C,OAAO,EAAC,iBAAiB,EAAC,MAAM,WAAW,CAAC;AAC5C,OAAO,EAAC,qBAAqB,EAAC,MAAM,eAAe,CAAC;AACpD,OAAO,EAAC,mBAAmB,EAAC,MAAM,aAAa,CAAC;AAChD,OAAO,EAAC,oBAAoB,EAAC,MAAM,cAAc,CAAC;AAClD,OAAO,EAAC,6BAA6B,EAAC,MAAM,uBAAuB,CAAC;AACpE,OAAO,EAAC,SAAS,EAAC,MAAM,YAAY,CAAC;AAGrC,SAAS,aAAa,CAAI,MAAmB,EAAE,QAAW;IACtD,IAAI,CAAC,MAAM;QAAE,MAAM,GAAG,EAAO,CAAC;IAC9B,OAAO,EAAC,GAAG,QAAQ,EAAE,GAAG,MAAM,EAAC,CAAC;AACpC,CAAC;AAED,SAAS,eAAe,CAAC,CAAU;IAC/B,IAAI,CAAC,YAAY,KAAK;QAAE,OAAO,CAAC,CAAC,OAAO,CAAC;IACzC,OAAO,EAAE,GAAG,CAAC,CAAC;AAClB,CAAC;AAED,MAAM,UAAU,WAAW;IACvB,SAAS,CAAC,aAAa,GAAG,aAAa,CAAC;IACxC,SAAS,CAAC,eAAe,GAAG,eAAe,CAAC;IAE5C,kBAAkB,EAAE,CAAC;IACrB,iBAAiB,EAAE,CAAC;IACpB,qBAAqB,EAAE,CAAC;IACxB,mBAAmB,EAAE,CAAC;IACtB,oBAAoB,EAAE,CAAC;IACvB,6BAA6B,EAAE,CAAC;IAChC,SAAS,EAAE,CAAC;IAEZ,0BAA0B;IAC1B,EAAE;IACF,SAAS,CAAC,EAAE,GAAG,EAAoB,CAAC;IACpC,SAAS,CAAC,MAAM,GAAG,EAAgB,CAAC;IACpC,SAAS,CAAC,QAAQ,GAAG,EAAkB,CAAC;IACxC,SAAS,CAAC,EAAE,GAAG,EAAY,CAAC;AAChC,CAAC"}
@@ -1 +0,0 @@
1
- export {};
@@ -1,4 +0,0 @@
1
- import { initBrowser } from "./browser.js";
2
- // Will init with the common stuffs.
3
- initBrowser();
4
- //# sourceMappingURL=browserLoader.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"browserLoader.js","sourceRoot":"","sources":["../src/browserLoader.ts"],"names":[],"mappings":"AAAA,OAAO,EAAC,WAAW,EAAC,MAAM,cAAc,CAAC;AAEzC,oCAAoC;AACpC,WAAW,EAAE,CAAC"}
@@ -1 +0,0 @@
1
- import "./serverSide.ts";
@@ -1,2 +0,0 @@
1
- import "./serverSide.js";
2
- //# sourceMappingURL=serverLoader.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"serverLoader.js","sourceRoot":"","sources":["../src/serverLoader.ts"],"names":[],"mappings":"AAAA,OAAO,iBAAiB,CAAC"}
@@ -1 +0,0 @@
1
- export {};
@@ -1,27 +0,0 @@
1
- import { patch_process } from "./_process_s.js";
2
- import { patch_thread } from "./_thread_s.js";
3
- import { patch_fs } from "./_fs_s.js";
4
- import { patch_crypto } from "./_crypto_s.js";
5
- import { patch_compress } from "./_compress_s.js";
6
- import { isBunJs, isNodeJs } from "./common.js";
7
- import { patch_os } from "./_os_s.js";
8
- let serverType = "nodejs";
9
- if (isBunJs())
10
- serverType = "bunjs";
11
- const nodeSpace = globalThis.NodeSpace;
12
- nodeSpace.what = {
13
- isNodeJS: isNodeJs(),
14
- isBunJs: isBunJs(),
15
- isBrowser: false,
16
- isServerSide: true,
17
- serverType: serverType,
18
- };
19
- patch_process();
20
- patch_thread();
21
- patch_fs();
22
- patch_crypto();
23
- patch_compress();
24
- patch_os();
25
- NodeSpace.app.declareServerSideReady();
26
- process.on('exit', () => NodeSpace.app.declareAppExiting());
27
- //# sourceMappingURL=serverSide.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"serverSide.js","sourceRoot":"","sources":["../src/serverSide.ts"],"names":[],"mappings":"AAAA,OAAO,EAAC,aAAa,EAAC,MAAM,iBAAiB,CAAC;AAC9C,OAAO,EAAC,YAAY,EAAC,MAAM,gBAAgB,CAAC;AAC5C,OAAO,EAAC,QAAQ,EAAC,MAAM,YAAY,CAAC;AACpC,OAAO,EAAC,YAAY,EAAC,MAAM,gBAAgB,CAAC;AAC5C,OAAO,EAAC,cAAc,EAAC,MAAM,kBAAkB,CAAC;AAGhD,OAAO,EAAC,OAAO,EAAE,QAAQ,EAAC,MAAM,aAAa,CAAC;AAC9C,OAAO,EAAC,QAAQ,EAAC,MAAM,YAAY,CAAC;AAEpC,IAAI,UAAU,GAAe,QAAQ,CAAC;AACtC,IAAI,OAAO,EAAE;IAAE,UAAU,GAAG,OAAO,CAAC;AACpC,MAAM,SAAS,GAAG,UAAU,CAAC,SAAS,CAAC;AAEvC,SAAS,CAAC,IAAI,GAAG;IACb,QAAQ,EAAE,QAAQ,EAAE;IACpB,OAAO,EAAE,OAAO,EAAE;IAClB,SAAS,EAAE,KAAK;IAChB,YAAY,EAAE,IAAI;IAClB,UAAU,EAAE,UAAU;CACzB,CAAA;AAED,aAAa,EAAE,CAAC;AAChB,YAAY,EAAE,CAAC;AACf,QAAQ,EAAE,CAAC;AACX,YAAY,EAAE,CAAC;AACf,cAAc,EAAE,CAAC;AACjB,QAAQ,EAAE,CAAC;AAEX,SAAS,CAAC,GAAG,CAAC,sBAAsB,EAAE,CAAC;AACvC,OAAO,CAAC,EAAE,CAAC,MAAM,EAAE,GAAG,EAAE,CAAC,SAAS,CAAC,GAAG,CAAC,iBAAiB,EAAE,CAAC,CAAC"}
package/dist/void.d.ts DELETED
@@ -1 +0,0 @@
1
- export declare function initServerSide(): void;
package/dist/void.js DELETED
@@ -1,7 +0,0 @@
1
- // Keep it, is used by Vite.js plugin why replace
2
- // import {initServerSide} from 'jopi-node-space-server';
3
- // by import {initServerSide} from './void.ts';
4
- export function initServerSide() {
5
- // Do nothing.
6
- }
7
- //# sourceMappingURL=void.js.map
package/dist/void.js.map DELETED
@@ -1 +0,0 @@
1
- {"version":3,"file":"void.js","sourceRoot":"","sources":["../src/void.ts"],"names":[],"mappings":"AAAA,iDAAiD;AACjD,8DAA8D;AAC9D,iDAAiD;AAEjD,MAAM,UAAU,cAAc;IAC1B,cAAc;AAClB,CAAC"}
@@ -1,12 +0,0 @@
1
- <!doctype html>
2
- <html lang="en">
3
- <head>
4
- <meta charset="UTF-8" />
5
- <meta name="viewport" content="width=device-width, initial-scale=1.0" />
6
- <title>Test Jopi Logs</title>
7
- </head>
8
- <body>
9
- <div id="root"></div>
10
- <script type="module" src="/src/main.tsx"></script>
11
- </body>
12
- </html>
@@ -1,22 +0,0 @@
1
- {
2
- "name": "jopi-node-space-tests-browser",
3
- "private": true,
4
-
5
- "scripts": {
6
- "dev": "vite",
7
- "build": "tsc -b && vite build",
8
- "lint": "eslint jopi-logs-react",
9
- "preview": "vite preview"
10
- },
11
- "dependencies": {
12
- "react": "^19.1.0",
13
- "react-dom": "^19.1.0"
14
- },
15
- "devDependencies": {
16
- "@types/react": "^19.1.8",
17
- "@types/react-dom": "^19.1.6",
18
- "@vitejs/plugin-react-swc": "^3.10.2",
19
- "typescript": "~5.8.3",
20
- "vite": "^7.0.4"
21
- }
22
- }
@@ -1,13 +0,0 @@
1
- import { StrictMode } from 'react'
2
- import { createRoot } from 'react-dom/client'
3
- import "./tests.ts";
4
-
5
- function init() {
6
- createRoot(document.getElementById('root')!).render(<StrictMode><MyComponent/></StrictMode>);
7
- }
8
-
9
- function MyComponent() {
10
- return <div>See console</div>
11
- }
12
-
13
- init();
@@ -1,4 +0,0 @@
1
- import "jopi-node-space";
2
-
3
- console.log("NodeSpace.what:", NodeSpace.what);
4
- console.log("NodeSpace.process.env:", NodeSpace.process.env);
@@ -1,29 +0,0 @@
1
- {
2
- "compilerOptions": {
3
- "tsBuildInfoFile": "./node_modules/.tmp/tsconfig.app.tsbuildinfo",
4
- "target": "ES2022",
5
- "useDefineForClassFields": true,
6
- "lib": ["ES2022", "DOM", "DOM.Iterable"],
7
- "module": "ESNext",
8
- "skipLibCheck": true,
9
-
10
- /* Bundler mode */
11
- "moduleResolution": "bundler",
12
- "allowImportingTsExtensions": true,
13
- "verbatimModuleSyntax": true,
14
- "moduleDetection": "force",
15
- "noEmit": true,
16
- "jsx": "react-jsx",
17
-
18
- /* Linting */
19
- "strict": true,
20
- "noUnusedLocals": true,
21
- "noUnusedParameters": true,
22
- "erasableSyntaxOnly": true,
23
- "noFallthroughCasesInSwitch": true,
24
- "noUncheckedSideEffectImports": true
25
- },
26
- "include": [
27
- "src"
28
- ]
29
- }
@@ -1,7 +0,0 @@
1
- {
2
- "files": [],
3
- "references": [
4
- { "path": "./tsconfig.app.json"},
5
- { "path": "./tsconfig.node.json"}
6
- ]
7
- }
@@ -1,27 +0,0 @@
1
- {
2
- "compilerOptions": {
3
- "tsBuildInfoFile": "./node_modules/.tmp/tsconfig.node.tsbuildinfo",
4
- "target": "ES2023",
5
- "lib": ["ES2023"],
6
- "module": "ESNext",
7
- "skipLibCheck": true,
8
-
9
- /* Bundler mode */
10
- "moduleResolution": "bundler",
11
- "allowImportingTsExtensions": true,
12
- "verbatimModuleSyntax": true,
13
- "moduleDetection": "force",
14
- "noEmit": true,
15
-
16
- /* Linting */
17
- "strict": true,
18
- "noUnusedLocals": true,
19
- "noUnusedParameters": true,
20
- "erasableSyntaxOnly": true,
21
- "noFallthroughCasesInSwitch": true,
22
- "noUncheckedSideEffectImports": true
23
- },
24
- "include": [
25
- "vite.config.ts"
26
- ]
27
- }
@@ -1,31 +0,0 @@
1
- import { defineConfig, type Plugin } from 'vite'
2
- import react from '@vitejs/plugin-react-swc'
3
-
4
- const jopiReplaceServerPlugin = (): Plugin => {
5
- return {
6
- name: 'jopi-replace-server',
7
- transform(code, id) {
8
- if (/\.(ts|js|tsx|jsx)$/.test(id)) {
9
- const newCode = code.replace(
10
- "jopi-node-space-server",
11
- "jopi-node-space-browser"
12
- );
13
-
14
- if (newCode !== code) {
15
- return {code: newCode, map: null};
16
- }
17
- }
18
-
19
- // Return null allow keeping the code unchanged.
20
-
21
- return null;
22
- }
23
- };
24
- };
25
-
26
- export default defineConfig({
27
- plugins: [react(), jopiReplaceServerPlugin()],
28
- build: { rollupOptions: { external: ['node:module', 'jopi-node-space-server'] } },
29
- ssr: { noExternal: ['node:module', 'jopi-node-space-server'] },
30
- });
31
-
package/tsconfig.json DELETED
@@ -1,33 +0,0 @@
1
- {
2
- "compilerOptions": {
3
- "sourceMap": true,
4
- "declaration": true,
5
-
6
- "outDir": "./dist",
7
- "rootDir": "./src",
8
-
9
- // Permet d'avoir des fonctions comme fetch.
10
- "lib": ["ES2022", "DOM", "DOM.Iterable"],
11
-
12
- "target": "ES2020",
13
- "module": "ESNext",
14
- "moduleResolution": "Bundler",
15
- "rewriteRelativeImportExtensions": true,
16
- "esModuleInterop": true,
17
- "forceConsistentCasingInFileNames": true,
18
- "strict": true,
19
- "skipLibCheck": true,
20
- "noEmitOnError": false,
21
- "verbatimModuleSyntax": true,
22
- "allowJs": false
23
- },
24
-
25
- "include": [
26
- "./src/*.ts"
27
- ],
28
-
29
- "exclude": [
30
- "node_modules",
31
- "**/*.spec.ts"
32
- ]
33
- }