jopi-node-space 0.0.1 → 0.0.2

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 (57) hide show
  1. package/dist/__global.d.ts +111 -0
  2. package/dist/__global.js +3 -0
  3. package/dist/__global.js.map +1 -0
  4. package/dist/_app.d.ts +1 -0
  5. package/dist/_app.js +105 -0
  6. package/dist/_app.js.map +1 -0
  7. package/dist/_extensionPoints.d.ts +1 -0
  8. package/dist/_extensionPoints.js +51 -0
  9. package/dist/_extensionPoints.js.map +1 -0
  10. package/dist/_fs_s.d.ts +1 -0
  11. package/dist/_fs_s.js +7 -0
  12. package/dist/_fs_s.js.map +1 -0
  13. package/dist/_process.d.ts +1 -0
  14. package/dist/_process.js +15 -0
  15. package/dist/_process.js.map +1 -0
  16. package/dist/_process_s.d.ts +1 -0
  17. package/dist/_process_s.js +8 -0
  18. package/dist/_process_s.js.map +1 -0
  19. package/dist/_term.d.ts +1 -0
  20. package/dist/_term.js +70 -0
  21. package/dist/_term.js.map +1 -0
  22. package/dist/_thread.d.ts +1 -0
  23. package/dist/_thread.js +19 -0
  24. package/dist/_thread.js.map +1 -0
  25. package/dist/_thread_s.d.ts +1 -0
  26. package/dist/_thread_s.js +26 -0
  27. package/dist/_thread_s.js.map +1 -0
  28. package/dist/_timer.d.ts +1 -0
  29. package/dist/_timer.js +7 -0
  30. package/dist/_timer.js.map +1 -0
  31. package/dist/_what.d.ts +1 -0
  32. package/dist/_what.js +10 -0
  33. package/dist/_what.js.map +1 -0
  34. package/dist/browser.js +8 -6
  35. package/dist/browser.js.map +1 -1
  36. package/dist/common.d.ts +1 -80
  37. package/dist/common.js +0 -1
  38. package/dist/common.js.map +1 -1
  39. package/dist/index.js.map +1 -1
  40. package/dist/serverSide.js +6 -31
  41. package/dist/serverSide.js.map +1 -1
  42. package/package.json +3 -2
  43. package/src/__global.ts +135 -0
  44. package/src/{nodeSpaceApp.ts → _app.ts} +7 -6
  45. package/src/{nodeSpaceExtensionPoints.ts → _extensionPoints.ts} +1 -1
  46. package/src/_fs_s.ts +7 -0
  47. package/src/_process_s.ts +7 -0
  48. package/src/_term.ts +86 -0
  49. package/src/_thread_s.ts +31 -0
  50. package/src/browser.ts +8 -6
  51. package/src/common.ts +1 -91
  52. package/src/index.ts +2 -1
  53. package/src/serverSide.ts +6 -39
  54. /package/src/{nodeSpaceProcess.ts → _process.ts} +0 -0
  55. /package/src/{nodeSpaceThread.ts → _thread.ts} +0 -0
  56. /package/src/{nodeSpaceTimer.ts → _timer.ts} +0 -0
  57. /package/src/{nodeSpaceWhat.ts → _what.ts} +0 -0
@@ -0,0 +1,111 @@
1
+ declare global {
2
+ var NodeSpace: NodeSpaceType;
3
+ var jopiHotReload: HotReloadType;
4
+ }
5
+ export type ServerType = "nodejs" | "bunjs" | "browser";
6
+ export type Listener = () => void | Promise<void>;
7
+ export type EpCaller = (...values: unknown[]) => Promise<void>;
8
+ export type EpListener = (...values: unknown[]) => void | Promise<void>;
9
+ export interface NodeSpaceType {
10
+ what: WhatInfos;
11
+ thread: ThreadImpl;
12
+ process: ProcessImpl;
13
+ timer: TimerImpl;
14
+ app: AppImpl;
15
+ extensionPoints: ExtensionPointImpl;
16
+ term: TerminalImpl;
17
+ fs?: FileSystemImpl;
18
+ }
19
+ export interface HotReloadType {
20
+ onHotReload: Listener[];
21
+ memory: {
22
+ [key: string]: any;
23
+ };
24
+ }
25
+ interface WhatInfos {
26
+ isNodeJS: boolean;
27
+ isBunJs: boolean;
28
+ isBrowser: boolean;
29
+ isServerSide: boolean;
30
+ serverType: ServerType;
31
+ }
32
+ interface ThreadImpl {
33
+ isMainThread: boolean;
34
+ currentWorker: Worker | null;
35
+ newWorker: (fileName: string | URL, data?: any) => Worker;
36
+ getCurrentWorkerData: () => any;
37
+ unrefThisWorker(worker: Worker): void;
38
+ closeCurrentThread(): void;
39
+ }
40
+ interface ProcessImpl {
41
+ argv: string[];
42
+ env: {
43
+ [key: string]: string;
44
+ };
45
+ isProduction: boolean;
46
+ }
47
+ interface TimerImpl {
48
+ tick: (delayMs: number) => Promise<void>;
49
+ }
50
+ interface FileSystemImpl {
51
+ mkDir: (dirPath: string) => Promise<string | undefined>;
52
+ }
53
+ interface AppImpl {
54
+ onServerSideReady(listener: Listener): void;
55
+ waitServerSideReady: () => Promise<void>;
56
+ declareServerSideReady(): void;
57
+ onAppStart(listener: Listener): void;
58
+ onAppExiting(listener: Listener): void;
59
+ onAppExited(listener: Listener): void;
60
+ executeApp(app: Listener): void;
61
+ declareAppStarted(): void;
62
+ declareAppExiting(): void;
63
+ onHotReload(listener: Listener): void;
64
+ keepOnHotReload<T>(key: string, provider: () => T): T;
65
+ }
66
+ interface ExtensionPointImpl {
67
+ /**
68
+ * Register an extension point.
69
+ * Allow knowing who is using it as an host.
70
+ */
71
+ newHost(epName: string, importMetaUrl: string): EpCaller;
72
+ /**
73
+ * Get a caller, allowing to call the extension point.
74
+ */
75
+ getCaller(epName: string, importMetaUrl: string): EpCaller;
76
+ /**
77
+ * Add a function which is called when the extension point is called.
78
+ */
79
+ on(epName: string, importMetaUrl: string, fct: EpListener): void;
80
+ }
81
+ interface TerminalImpl {
82
+ T_RESET: string;
83
+ T_BOLD: string;
84
+ T_UNDERLINE: string;
85
+ T_CLEAR_LINE: string;
86
+ T_CLEAR_LINE_END: string;
87
+ T_CLEAR_SCREEN: string;
88
+ T_LINE_START: string;
89
+ C_RED: string;
90
+ C_GREEN: string;
91
+ C_BLUE: string;
92
+ C_LIGHT_BLUE: string;
93
+ C_GREY: string;
94
+ C_ORANGE: string;
95
+ B_BLACK: string;
96
+ B_RED: string;
97
+ B_GREEN: string;
98
+ B_YELLOW: string;
99
+ B_BLUE: string;
100
+ B_MAGENTA: string;
101
+ B_CYAN: string;
102
+ B_WHITE: string;
103
+ colorize(...params: string[]): string;
104
+ cssText(text: string, css: string): void;
105
+ moveUp(n: number): string;
106
+ moveDown(n: number): string;
107
+ moveLeft(n: number): string;
108
+ moveRight(n: number): string;
109
+ goAt(x: number, y: number): string;
110
+ }
111
+ export {};
@@ -0,0 +1,3 @@
1
+ globalThis.NodeSpace = {};
2
+ export {};
3
+ //# sourceMappingURL=__global.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"__global.js","sourceRoot":"","sources":["../src/__global.ts"],"names":[],"mappings":"AAKA,UAAU,CAAC,SAAS,GAAG,EAAmB,CAAC"}
package/dist/_app.d.ts ADDED
@@ -0,0 +1 @@
1
+ export declare function init_nodeSpaceApp(): void;
package/dist/_app.js ADDED
@@ -0,0 +1,105 @@
1
+ import { execListeners, isBunJs, isNodeJs } from "./common.js";
2
+ import { isUsingWorker } from "./internal.js";
3
+ export function init_nodeSpaceApp() {
4
+ const onServerSideReady = [];
5
+ const onAppExiting = [];
6
+ const onAppExited = [];
7
+ const onAppStart = [];
8
+ let isServerSideReady = !(isNodeJs() || isBunJs());
9
+ let isHotReload = globalThis.jopiHotReload !== undefined;
10
+ let isAppStarted = false;
11
+ if (isHotReload) {
12
+ execListeners(globalThis.jopiHotReload.onHotReload).then();
13
+ }
14
+ else {
15
+ globalThis.jopiHotReload = {
16
+ onHotReload: [],
17
+ memory: {}
18
+ };
19
+ }
20
+ const onHotReload = globalThis.jopiHotReload.onHotReload;
21
+ const memory = globalThis.jopiHotReload.memory;
22
+ NodeSpace.app = {
23
+ onServerSideReady: (listener) => {
24
+ if (isServerSideReady)
25
+ listener();
26
+ else
27
+ onServerSideReady.push(listener);
28
+ },
29
+ waitServerSideReady: () => {
30
+ if (isServerSideReady) {
31
+ return Promise.resolve();
32
+ }
33
+ return new Promise(r => {
34
+ NodeSpace.app.onServerSideReady(r);
35
+ });
36
+ },
37
+ declareServerSideReady: async () => {
38
+ isServerSideReady = true;
39
+ await execListeners(onServerSideReady);
40
+ },
41
+ onAppStart: (listener) => {
42
+ if (isAppStarted)
43
+ listener();
44
+ else
45
+ onAppStart.push(listener);
46
+ },
47
+ onAppExiting: (listener) => {
48
+ if (!isAppStarted)
49
+ listener();
50
+ else
51
+ onAppExiting.push(listener);
52
+ },
53
+ onAppExited: (listener) => {
54
+ if (!isAppStarted)
55
+ listener();
56
+ else
57
+ onAppExited.push(listener);
58
+ },
59
+ declareAppStarted: async () => {
60
+ isAppStarted = true;
61
+ await execListeners(onAppStart);
62
+ },
63
+ declareAppExiting: async () => {
64
+ if (isUsingWorker()) {
65
+ // Wait 1 sec, which allows the worker to correctly initialize.
66
+ await NodeSpace.timer.tick(1000);
67
+ }
68
+ isAppStarted = false;
69
+ await execListeners(onAppExiting);
70
+ if (isUsingWorker()) {
71
+ // Allows to worker to correctly stop their activity.
72
+ await NodeSpace.timer.tick(100);
73
+ }
74
+ if (!NodeSpace.thread.isMainThread) {
75
+ // Allows to worker to correctly stop their activity.
76
+ await NodeSpace.timer.tick(50);
77
+ }
78
+ if (onAppExited.length)
79
+ debugger;
80
+ await execListeners(onAppExited);
81
+ },
82
+ executeApp: async (app) => {
83
+ await NodeSpace.app.waitServerSideReady();
84
+ NodeSpace.app.declareAppStarted();
85
+ try {
86
+ const res = app();
87
+ if (res instanceof Promise)
88
+ await res;
89
+ }
90
+ finally {
91
+ NodeSpace.app.declareAppExiting();
92
+ }
93
+ },
94
+ onHotReload(listener) {
95
+ onHotReload.push(listener);
96
+ },
97
+ keepOnHotReload: (key, provider) => {
98
+ let current = memory[key];
99
+ if (current !== undefined)
100
+ return current;
101
+ return memory[key] = provider();
102
+ }
103
+ };
104
+ }
105
+ //# sourceMappingURL=_app.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"_app.js","sourceRoot":"","sources":["../src/_app.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1 @@
1
+ export declare function init_nodeSpaceExtensionPoints(): void;
@@ -0,0 +1,51 @@
1
+ import {} from "./__global.js";
2
+ const gExtensionPoints = {};
3
+ function createExtensionPoint(epName, hostInfo, callerInfo, listenerInfo) {
4
+ async function caller(...args) {
5
+ for (const listener of ep.listeners) {
6
+ const res = listener(...args);
7
+ if (res instanceof Promise)
8
+ await res;
9
+ }
10
+ }
11
+ const listeners = [];
12
+ const ep = {
13
+ listeners, caller,
14
+ allHostPath: [],
15
+ allCallerPath: [],
16
+ allListenerPath: []
17
+ };
18
+ gExtensionPoints[epName] = ep;
19
+ if (hostInfo) {
20
+ ep.allHostPath.push(hostInfo);
21
+ }
22
+ if (callerInfo) {
23
+ ep.allCallerPath.push(callerInfo);
24
+ }
25
+ if (listenerInfo) {
26
+ ep.allListenerPath.push(listenerInfo);
27
+ }
28
+ }
29
+ export function init_nodeSpaceExtensionPoints() {
30
+ NodeSpace.extensionPoints = {
31
+ newHost(epName, importMetaUrl) {
32
+ const ep = gExtensionPoints[epName];
33
+ if (!ep)
34
+ createExtensionPoint(epName, importMetaUrl, null, null);
35
+ return ep.caller;
36
+ },
37
+ getCaller(epName, importMetaUrl) {
38
+ const ep = gExtensionPoints[epName];
39
+ if (!ep)
40
+ createExtensionPoint(epName, null, importMetaUrl, null);
41
+ return ep.caller;
42
+ },
43
+ on(epName, importMetaUrl, listener) {
44
+ const ep = gExtensionPoints[epName];
45
+ if (!ep)
46
+ createExtensionPoint(epName, null, null, importMetaUrl);
47
+ ep.listeners.push(listener);
48
+ }
49
+ };
50
+ }
51
+ //# sourceMappingURL=_extensionPoints.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"_extensionPoints.js","sourceRoot":"","sources":["../src/_extensionPoints.ts"],"names":[],"mappings":"AAAA,OAAO,EAAgC,MAAM,eAAe,CAAC;AAW7D,MAAM,gBAAgB,GAAuC,EAC5D,CAAA;AAED,SAAS,oBAAoB,CAAC,MAAc,EAAE,QAAqB,EAAE,UAAuB,EAAE,YAAyB;IACnH,KAAK,UAAU,MAAM,CAAC,GAAG,IAAe;QACpC,KAAK,MAAM,QAAQ,IAAI,EAAE,CAAC,SAAS,EAAE,CAAC;YAClC,MAAM,GAAG,GAAG,QAAQ,CAAC,GAAG,IAAI,CAAC,CAAC;YAC9B,IAAI,GAAG,YAAY,OAAO;gBAAE,MAAM,GAAG,CAAC;QAC1C,CAAC;IACL,CAAC;IAED,MAAM,SAAS,GAAiB,EAAE,CAAC;IAEnC,MAAM,EAAE,GAAmB;QACvB,SAAS,EAAE,MAAM;QACjB,WAAW,EAAE,EAAE;QACf,aAAa,EAAE,EAAE;QACjB,eAAe,EAAE,EAAE;KACtB,CAAC;IAEF,gBAAgB,CAAC,MAAM,CAAC,GAAG,EAAE,CAAC;IAE9B,IAAI,QAAQ,EAAE,CAAC;QACX,EAAE,CAAC,WAAW,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;IAClC,CAAC;IAED,IAAI,UAAU,EAAE,CAAC;QACb,EAAE,CAAC,aAAa,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC;IACtC,CAAC;IAED,IAAI,YAAY,EAAE,CAAC;QACf,EAAE,CAAC,eAAe,CAAC,IAAI,CAAC,YAAY,CAAC,CAAC;IAC1C,CAAC;AACL,CAAC;AAED,MAAM,UAAU,6BAA6B;IACzC,SAAS,CAAC,eAAe,GAAG;QACxB,OAAO,CAAC,MAAc,EAAE,aAAqB;YACzC,MAAM,EAAE,GAAG,gBAAgB,CAAC,MAAM,CAAC,CAAC;YACpC,IAAI,CAAC,EAAE;gBAAE,oBAAoB,CAAC,MAAM,EAAE,aAAa,EAAE,IAAI,EAAE,IAAI,CAAC,CAAC;YACjE,OAAO,EAAE,CAAC,MAAM,CAAC;QACrB,CAAC;QAED,SAAS,CAAC,MAAc,EAAE,aAAqB;YAC3C,MAAM,EAAE,GAAG,gBAAgB,CAAC,MAAM,CAAC,CAAC;YACpC,IAAI,CAAC,EAAE;gBAAE,oBAAoB,CAAC,MAAM,EAAE,IAAI,EAAE,aAAa,EAAE,IAAI,CAAC,CAAC;YACjE,OAAO,EAAE,CAAC,MAAM,CAAC;QACrB,CAAC;QAED,EAAE,CAAC,MAAc,EAAE,aAAqB,EAAE,QAAoB;YAC1D,MAAM,EAAE,GAAG,gBAAgB,CAAC,MAAM,CAAC,CAAC;YACpC,IAAI,CAAC,EAAE;gBAAE,oBAAoB,CAAC,MAAM,EAAE,IAAI,EAAE,IAAI,EAAE,aAAa,CAAC,CAAC;YACjE,EAAE,CAAC,SAAS,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;QAChC,CAAC;KACJ,CAAC;AACN,CAAC"}
@@ -0,0 +1 @@
1
+ export declare function patch_fs(): void;
package/dist/_fs_s.js ADDED
@@ -0,0 +1,7 @@
1
+ import fs from "node:fs/promises";
2
+ export function patch_fs() {
3
+ NodeSpace.fs = {
4
+ mkDir: (dirPath) => fs.mkdir(dirPath, { recursive: true })
5
+ };
6
+ }
7
+ //# sourceMappingURL=_fs_s.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"_fs_s.js","sourceRoot":"","sources":["../src/_fs_s.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,kBAAkB,CAAC;AAElC,MAAM,UAAU,QAAQ;IACpB,SAAS,CAAC,EAAE,GAAG;QACX,KAAK,EAAE,CAAC,OAAe,EAAE,EAAE,CAAC,EAAE,CAAC,KAAK,CAAC,OAAO,EAAE,EAAC,SAAS,EAAE,IAAI,EAAC,CAAC;KACnE,CAAA;AACL,CAAC"}
@@ -0,0 +1 @@
1
+ export declare function init_nodeSpaceProcess(): void;
@@ -0,0 +1,15 @@
1
+ export function init_nodeSpaceProcess() {
2
+ NodeSpace.process = {
3
+ isProduction: false,
4
+ argv: [],
5
+ env: {},
6
+ };
7
+ // For bundlers.
8
+ try {
9
+ NodeSpace.process.env = import.meta.env;
10
+ NodeSpace.process.isProduction = (import.meta.env.PROD === "true");
11
+ }
12
+ catch {
13
+ }
14
+ }
15
+ //# sourceMappingURL=_process.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"_process.js","sourceRoot":"","sources":["../src/_process.ts"],"names":[],"mappings":"AAAA,MAAM,UAAU,qBAAqB;IACjC,SAAS,CAAC,OAAO,GAAG;QAChB,YAAY,EAAE,KAAK;QACnB,IAAI,EAAE,EAAE;QACR,GAAG,EAAE,EAAE;KACV,CAAC;IAEF,gBAAgB;IAChB,IAAI,CAAC;QACD,SAAS,CAAC,OAAO,CAAC,GAAG,GAAG,MAAM,CAAC,IAAI,CAAC,GAAkC,CAAC;QACvE,SAAS,CAAC,OAAO,CAAC,YAAY,GAAG,CAAC,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,IAAI,KAAK,MAAM,CAAC,CAAC;IACvE,CAAC;IAAC,MAAM,CAAC;IACT,CAAC;AACL,CAAC"}
@@ -0,0 +1 @@
1
+ export declare function patch_process(): void;
@@ -0,0 +1,8 @@
1
+ export function patch_process() {
2
+ NodeSpace.process = {
3
+ argv: process.argv,
4
+ env: process.env,
5
+ isProduction: process.env.NODE_ENV === 'production'
6
+ };
7
+ }
8
+ //# sourceMappingURL=_process_s.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"_process_s.js","sourceRoot":"","sources":["../src/_process_s.ts"],"names":[],"mappings":"AAAA,MAAM,UAAU,aAAa;IACzB,SAAS,CAAC,OAAO,GAAG;QAChB,IAAI,EAAE,OAAO,CAAC,IAAI;QAClB,GAAG,EAAE,OAAO,CAAC,GAAgC;QAC7C,YAAY,EAAE,OAAO,CAAC,GAAG,CAAC,QAAQ,KAAK,YAAY;KACtD,CAAC;AACN,CAAC"}
@@ -0,0 +1 @@
1
+ export declare function init_term(): void;
package/dist/_term.js ADDED
@@ -0,0 +1,70 @@
1
+ const T_RESET = "\x1b[0m";
2
+ const T_BOLD = "\x1b[1m";
3
+ const T_UNDERLINE = "\x1b[4m";
4
+ const T_CLEAR_LINE = "\x1b[2K";
5
+ const T_CLEAR_LINE_END = "\x1b[K";
6
+ const T_CLEAR_SCREEN = "\x1b[2J";
7
+ const T_LINE_START = "\r";
8
+ const C_RED = "\x1b[31m";
9
+ const C_BLUE = "\x1b[34m";
10
+ const C_LIGHT_BLUE = "\x1b[96m";
11
+ const C_GREEN = "\x1b[32m";
12
+ const C_GREY = "\x1b[90m";
13
+ const C_ORANGE = "\x1b[38;5;208m";
14
+ const B_BLACK = "\x1b[40m";
15
+ const B_RED = "\x1b[41m";
16
+ const B_GREEN = "\x1b[42m";
17
+ const B_YELLOW = "\x1b[43m";
18
+ const B_BLUE = "\x1b[44m";
19
+ const B_MAGENTA = "\x1b[45m";
20
+ const B_CYAN = "\x1b[46m";
21
+ const B_WHITE = "\x1b[47m";
22
+ function cssText(text, css) {
23
+ console.log("%c" + text, css);
24
+ }
25
+ function moveUp(n) {
26
+ return "\x1b[" + n + "A";
27
+ }
28
+ function moveDown(n) {
29
+ return "\x1b[" + n + "B";
30
+ }
31
+ function moveLeft(n) {
32
+ return "\x1b[" + n + "D";
33
+ }
34
+ function moveRight(n) {
35
+ return "\x1b[" + n + "C";
36
+ }
37
+ function goAt(x, y) {
38
+ return "\x1b[" + y + ";" + x + "H";
39
+ }
40
+ export function init_term() {
41
+ NodeSpace.term = {
42
+ C_RED,
43
+ C_GREEN,
44
+ C_BLUE,
45
+ C_LIGHT_BLUE,
46
+ C_GREY,
47
+ C_ORANGE,
48
+ B_BLACK,
49
+ B_BLUE,
50
+ B_CYAN,
51
+ B_GREEN,
52
+ B_MAGENTA,
53
+ B_RED,
54
+ B_WHITE,
55
+ B_YELLOW,
56
+ T_RESET,
57
+ T_BOLD,
58
+ T_CLEAR_SCREEN,
59
+ T_UNDERLINE,
60
+ T_CLEAR_LINE,
61
+ T_CLEAR_LINE_END,
62
+ T_LINE_START,
63
+ colorize(...params) {
64
+ return params.join("") + T_RESET;
65
+ },
66
+ cssText,
67
+ moveUp, moveDown, moveLeft, moveRight, goAt
68
+ };
69
+ }
70
+ //# sourceMappingURL=_term.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"_term.js","sourceRoot":"","sources":["../src/_term.ts"],"names":[],"mappings":"AAAA,MAAM,OAAO,GAAG,SAAS,CAAC;AAE1B,MAAM,MAAM,GAAG,SAAS,CAAC;AACzB,MAAM,WAAW,GAAG,SAAS,CAAC;AAE9B,MAAM,YAAY,GAAG,SAAS,CAAC;AAC/B,MAAM,gBAAgB,GAAG,QAAQ,CAAC;AAClC,MAAM,cAAc,GAAG,SAAS,CAAC;AACjC,MAAM,YAAY,GAAG,IAAI,CAAC;AAE1B,MAAM,KAAK,GAAG,UAAU,CAAC;AACzB,MAAM,MAAM,GAAG,UAAU,CAAC;AAC1B,MAAM,YAAY,GAAG,UAAU,CAAC;AAChC,MAAM,OAAO,GAAG,UAAU,CAAC;AAC3B,MAAM,MAAM,GAAG,UAAU,CAAC;AAC1B,MAAM,QAAQ,GAAG,gBAAgB,CAAC;AAElC,MAAM,OAAO,GAAG,UAAU,CAAC;AAC3B,MAAM,KAAK,GAAG,UAAU,CAAC;AACzB,MAAM,OAAO,GAAG,UAAU,CAAC;AAC3B,MAAM,QAAQ,GAAG,UAAU,CAAC;AAC5B,MAAM,MAAM,GAAG,UAAU,CAAC;AAC1B,MAAM,SAAS,GAAG,UAAU,CAAC;AAC7B,MAAM,MAAM,GAAG,UAAU,CAAC;AAC1B,MAAM,OAAO,GAAG,UAAU,CAAC;AAE3B,SAAS,OAAO,CAAC,IAAY,EAAE,GAAW;IACtC,OAAO,CAAC,GAAG,CAAC,IAAI,GAAG,IAAI,EAAE,GAAG,CAAC,CAAA;AACjC,CAAC;AAED,SAAS,MAAM,CAAC,CAAS;IACrB,OAAO,OAAO,GAAG,CAAC,GAAG,GAAG,CAAC;AAC7B,CAAC;AAED,SAAS,QAAQ,CAAC,CAAS;IACvB,OAAO,OAAO,GAAG,CAAC,GAAG,GAAG,CAAC;AAC7B,CAAC;AAED,SAAS,QAAQ,CAAC,CAAS;IACvB,OAAO,OAAO,GAAG,CAAC,GAAG,GAAG,CAAC;AAC7B,CAAC;AAED,SAAS,SAAS,CAAC,CAAS;IACxB,OAAO,OAAO,GAAG,CAAC,GAAG,GAAG,CAAC;AAC7B,CAAC;AAED,SAAS,IAAI,CAAC,CAAS,EAAE,CAAS;IAC9B,OAAO,OAAO,GAAG,CAAC,GAAG,GAAG,GAAG,CAAC,GAAG,GAAG,CAAC;AACvC,CAAC;AAED,MAAM,UAAU,SAAS;IACrB,SAAS,CAAC,IAAI,GAAG;QACb,KAAK;QACL,OAAO;QACP,MAAM;QACN,YAAY;QACZ,MAAM;QACN,QAAQ;QAER,OAAO;QACP,MAAM;QACN,MAAM;QACN,OAAO;QACP,SAAS;QACT,KAAK;QACL,OAAO;QACP,QAAQ;QAER,OAAO;QACP,MAAM;QACN,cAAc;QACd,WAAW;QACX,YAAY;QACZ,gBAAgB;QAChB,YAAY;QAEZ,QAAQ,CAAC,GAAG,MAAgB;YACxB,OAAO,MAAM,CAAC,IAAI,CAAC,EAAE,CAAC,GAAG,OAAO,CAAC;QACrC,CAAC;QAED,OAAO;QAEP,MAAM,EAAE,QAAQ,EAAE,QAAQ,EAAE,SAAS,EAAE,IAAI;KAE9C,CAAA;AACL,CAAC"}
@@ -0,0 +1 @@
1
+ export declare function init_nodeSpaceThread(): void;
@@ -0,0 +1,19 @@
1
+ import { declareUsingWorker } from "./internal.js";
2
+ export function init_nodeSpaceThread() {
3
+ NodeSpace.thread = {
4
+ isMainThread: true,
5
+ currentWorker: null,
6
+ getCurrentWorkerData: () => { },
7
+ unrefThisWorker: () => { },
8
+ newWorker: (fileName) => {
9
+ declareUsingWorker();
10
+ return new Worker(fileName, { type: 'module' });
11
+ },
12
+ closeCurrentThread() {
13
+ if (self.close) {
14
+ self.close();
15
+ }
16
+ }
17
+ };
18
+ }
19
+ //# sourceMappingURL=_thread.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"_thread.js","sourceRoot":"","sources":["../src/_thread.ts"],"names":[],"mappings":"AAAA,OAAO,EAAC,kBAAkB,EAAC,MAAM,eAAe,CAAC;AAEjD,MAAM,UAAU,oBAAoB;IAChC,SAAS,CAAC,MAAM,GAAG;QACf,YAAY,EAAE,IAAI;QAClB,aAAa,EAAE,IAAI;QACnB,oBAAoB,EAAE,GAAG,EAAE,GAAE,CAAC;QAC9B,eAAe,EAAE,GAAG,EAAE,GAAE,CAAC;QAEzB,SAAS,EAAE,CAAC,QAAQ,EAAE,EAAE;YACpB,kBAAkB,EAAE,CAAC;YACrB,OAAO,IAAI,MAAM,CAAC,QAAQ,EAAE,EAAC,IAAI,EAAE,QAAQ,EAAC,CAAC,CAAA;QACjD,CAAC;QAED,kBAAkB;YACd,IAAI,IAAI,CAAC,KAAK,EAAE,CAAC;gBACb,IAAI,CAAC,KAAK,EAAE,CAAC;YACjB,CAAC;QACL,CAAC;KACJ,CAAC;AACN,CAAC"}
@@ -0,0 +1 @@
1
+ export declare function patch_server(): void;
@@ -0,0 +1,26 @@
1
+ import { isMainThread, parentPort, workerData } from "node:worker_threads";
2
+ import { declareUsingWorker } from "./internal";
3
+ import { Worker as NodeWorker } from "worker_threads";
4
+ export function patch_server() {
5
+ NodeSpace.thread = {
6
+ isMainThread: isMainThread,
7
+ currentWorker: parentPort,
8
+ getCurrentWorkerData: () => workerData,
9
+ newWorker: (fileName, data) => {
10
+ declareUsingWorker();
11
+ const res = data ?
12
+ new NodeWorker(fileName, { workerData: data }) :
13
+ new NodeWorker(fileName);
14
+ return res;
15
+ },
16
+ unrefThisWorker: (worker) => {
17
+ worker.unref();
18
+ },
19
+ closeCurrentThread() {
20
+ if (parentPort) {
21
+ parentPort.close();
22
+ }
23
+ }
24
+ };
25
+ }
26
+ //# sourceMappingURL=_thread_s.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"_thread_s.js","sourceRoot":"","sources":["../src/_thread_s.ts"],"names":[],"mappings":"AAAA,OAAO,EAAC,YAAY,EAAE,UAAU,EAAE,UAAU,EAAC,MAAM,qBAAqB,CAAC;AACzE,OAAO,EAAC,kBAAkB,EAAC,MAAM,YAAY,CAAC;AAC9C,OAAO,EAAC,MAAM,IAAI,UAAU,EAAC,MAAM,gBAAgB,CAAC;AAEpD,MAAM,UAAU,YAAY;IACxB,SAAS,CAAC,MAAM,GAAG;QACf,YAAY,EAAE,YAAY;QAC1B,aAAa,EAAE,UAA+B;QAC9C,oBAAoB,EAAE,GAAG,EAAE,CAAC,UAAU;QAEtC,SAAS,EAAE,CAAC,QAAQ,EAAE,IAAU,EAAE,EAAE;YAChC,kBAAkB,EAAE,CAAC;YAErB,MAAM,GAAG,GAAG,IAAI,CAAC,CAAC;gBACd,IAAI,UAAU,CAAC,QAAQ,EAAE,EAAC,UAAU,EAAE,IAAI,EAAC,CAAC,CAAC,CAAC;gBAC9C,IAAI,UAAU,CAAC,QAAQ,CAAC,CAAC;YAE7B,OAAO,GAAwB,CAAA;QACnC,CAAC;QAED,eAAe,EAAE,CAAC,MAAc,EAAE,EAAE;YAC/B,MAAgC,CAAC,KAAK,EAAE,CAAC;QAC9C,CAAC;QAED,kBAAkB;YACd,IAAI,UAAU,EAAE,CAAC;gBACb,UAAU,CAAC,KAAK,EAAE,CAAC;YACvB,CAAC;QACL,CAAC;KACJ,CAAA;AACL,CAAC"}
@@ -0,0 +1 @@
1
+ export declare function init_nodeSpaceTimer(): void;
package/dist/_timer.js ADDED
@@ -0,0 +1,7 @@
1
+ import { tick } from "./common.js";
2
+ export function init_nodeSpaceTimer() {
3
+ NodeSpace.timer = {
4
+ tick: tick
5
+ };
6
+ }
7
+ //# sourceMappingURL=_timer.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"_timer.js","sourceRoot":"","sources":["../src/_timer.ts"],"names":[],"mappings":"AAAA,OAAO,EAAC,IAAI,EAAC,MAAM,aAAa,CAAC;AAEjC,MAAM,UAAU,mBAAmB;IAC/B,SAAS,CAAC,KAAK,GAAG;QACd,IAAI,EAAE,IAAI;KACb,CAAC;AACN,CAAC"}
@@ -0,0 +1 @@
1
+ export declare function init_nodeSpaceWhat(): void;
package/dist/_what.js ADDED
@@ -0,0 +1,10 @@
1
+ export function init_nodeSpaceWhat() {
2
+ NodeSpace.what = {
3
+ isNodeJS: false,
4
+ isBunJs: false,
5
+ isServerSide: false,
6
+ isBrowser: true,
7
+ serverType: "browser",
8
+ };
9
+ }
10
+ //# sourceMappingURL=_what.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"_what.js","sourceRoot":"","sources":["../src/_what.ts"],"names":[],"mappings":"AAAA,MAAM,UAAU,kBAAkB;IAC9B,SAAS,CAAC,IAAI,GAAG;QACb,QAAQ,EAAE,KAAK;QACf,OAAO,EAAE,KAAK;QACd,YAAY,EAAE,KAAK;QACnB,SAAS,EAAE,IAAI;QACf,UAAU,EAAE,SAAS;KACxB,CAAC;AACN,CAAC"}
package/dist/browser.js CHANGED
@@ -1,9 +1,10 @@
1
- import { init_nodeSpaceWhat } from "./nodeSpaceWhat.js";
2
- import { init_nodeSpaceApp } from "./nodeSpaceApp.js";
3
- import { init_nodeSpaceProcess } from "./nodeSpaceProcess.js";
4
- import { init_nodeSpaceTimer } from "./nodeSpaceTimer.js";
5
- import { init_nodeSpaceThread } from "./nodeSpaceThread.js";
6
- import { init_nodeSpaceExtensionPoints } from "./nodeSpaceExtensionPoints";
1
+ import { init_nodeSpaceWhat } from "./_what";
2
+ import { init_nodeSpaceApp } from "./_app";
3
+ import { init_nodeSpaceProcess } from "./_process";
4
+ import { init_nodeSpaceTimer } from "./_timer";
5
+ import { init_nodeSpaceThread } from "./_thread";
6
+ import { init_nodeSpaceExtensionPoints } from "./_extensionPoints";
7
+ import { init_term } from "./_term";
7
8
  export function initBrowser() {
8
9
  init_nodeSpaceWhat();
9
10
  init_nodeSpaceApp();
@@ -11,5 +12,6 @@ export function initBrowser() {
11
12
  init_nodeSpaceTimer();
12
13
  init_nodeSpaceThread();
13
14
  init_nodeSpaceExtensionPoints();
15
+ init_term();
14
16
  }
15
17
  //# sourceMappingURL=browser.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"browser.js","sourceRoot":"","sources":["../src/browser.ts"],"names":[],"mappings":"AAAA,OAAO,EAAC,kBAAkB,EAAC,MAAM,oBAAoB,CAAC;AACtD,OAAO,EAAC,iBAAiB,EAAC,MAAM,mBAAmB,CAAC;AACpD,OAAO,EAAC,qBAAqB,EAAC,MAAM,uBAAuB,CAAC;AAC5D,OAAO,EAAC,mBAAmB,EAAC,MAAM,qBAAqB,CAAC;AACxD,OAAO,EAAC,oBAAoB,EAAC,MAAM,sBAAsB,CAAC;AAC1D,OAAO,EAAC,6BAA6B,EAAC,MAAM,4BAA4B,CAAC;AAEzE,MAAM,UAAU,WAAW;IACvB,kBAAkB,EAAE,CAAC;IACrB,iBAAiB,EAAE,CAAC;IACpB,qBAAqB,EAAE,CAAC;IACxB,mBAAmB,EAAE,CAAC;IACtB,oBAAoB,EAAE,CAAC;IACvB,6BAA6B,EAAE,CAAC;AACpC,CAAC"}
1
+ {"version":3,"file":"browser.js","sourceRoot":"","sources":["../src/browser.ts"],"names":[],"mappings":"AAAA,OAAO,EAAC,kBAAkB,EAAC,MAAM,SAAS,CAAC;AAC3C,OAAO,EAAC,iBAAiB,EAAC,MAAM,QAAQ,CAAC;AACzC,OAAO,EAAC,qBAAqB,EAAC,MAAM,YAAY,CAAC;AACjD,OAAO,EAAC,mBAAmB,EAAC,MAAM,UAAU,CAAC;AAC7C,OAAO,EAAC,oBAAoB,EAAC,MAAM,WAAW,CAAC;AAC/C,OAAO,EAAC,6BAA6B,EAAC,MAAM,oBAAoB,CAAC;AACjE,OAAO,EAAC,SAAS,EAAC,MAAM,SAAS,CAAC;AAElC,MAAM,UAAU,WAAW;IACvB,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;AAChB,CAAC"}
package/dist/common.d.ts CHANGED
@@ -1,85 +1,6 @@
1
- declare global {
2
- var NodeSpace: NodeSpaceType;
3
- var jopiHotReloader: HotReloadType;
4
- }
1
+ import type { Listener } from "./__global";
5
2
  export declare function execListeners(listeners: Listener[]): Promise<void>;
6
3
  export declare function isServerSide(): boolean;
7
4
  export declare function isBunJs(): boolean;
8
5
  export declare function isNodeJs(): boolean;
9
6
  export declare function tick(delayMs: number): Promise<void>;
10
- export type ServerType = "nodejs" | "bunjs" | "browser";
11
- export type Listener = () => void | Promise<void>;
12
- export interface NodeSpaceType {
13
- what: WhatInfos;
14
- thread: ThreadImpl;
15
- process: ProcessImpl;
16
- timer: TimerImpl;
17
- app: AppImpl;
18
- fs?: FileSystemImpl;
19
- extensionPoints?: ExtensionPointImpl;
20
- }
21
- export interface HotReloadType {
22
- onHotReload: Listener[];
23
- memory: {
24
- [key: string]: any;
25
- };
26
- }
27
- interface WhatInfos {
28
- isNodeJS: boolean;
29
- isBunJs: boolean;
30
- isBrowser: boolean;
31
- isServerSide: boolean;
32
- serverType: ServerType;
33
- }
34
- interface ThreadImpl {
35
- isMainThread: boolean;
36
- currentWorker: Worker | null;
37
- newWorker: (fileName: string | URL, data?: any) => Worker;
38
- getCurrentWorkerData: () => any;
39
- unrefThisWorker(worker: Worker): void;
40
- closeCurrentThread(): void;
41
- }
42
- interface ProcessImpl {
43
- argv: string[];
44
- env: {
45
- [key: string]: string;
46
- };
47
- isProduction: boolean;
48
- }
49
- interface TimerImpl {
50
- tick: (delayMs: number) => Promise<void>;
51
- }
52
- interface FileSystemImpl {
53
- mkDir: (dirPath: string) => Promise<string | undefined>;
54
- }
55
- interface AppImpl {
56
- onServerSideReady(listener: Listener): void;
57
- waitServerSideReady: () => Promise<void>;
58
- declareServerSideReady(): void;
59
- onAppStart(listener: Listener): void;
60
- onAppExiting(listener: Listener): void;
61
- onAppExited(listener: Listener): void;
62
- executeApp(app: Listener): void;
63
- declareAppStarted(): void;
64
- declareAppExiting(): void;
65
- onHotReload(listener: Listener): void;
66
- keepOnHotReload<T>(key: string, provider: () => T): T;
67
- }
68
- export type EpCaller = (...values: unknown[]) => Promise<void>;
69
- export type EpListener = (...values: unknown[]) => void | Promise<void>;
70
- interface ExtensionPointImpl {
71
- /**
72
- * Register an extension point.
73
- * Allow knowing who is using it as an host.
74
- */
75
- newHost(epName: string, importMetaUrl: string): EpCaller;
76
- /**
77
- * Get a caller, allowing to call the extension point.
78
- */
79
- getCaller(epName: string, importMetaUrl: string): EpCaller;
80
- /**
81
- * Add a function which is called when the extension point is called.
82
- */
83
- on(epName: string, importMetaUrl: string, fct: EpListener): void;
84
- }
85
- export {};
package/dist/common.js CHANGED
@@ -1,4 +1,3 @@
1
- globalThis.NodeSpace = {};
2
1
  let _isBunJs = false;
3
2
  let _isNodeJs = false;
4
3
  export async function execListeners(listeners) {
@@ -1 +1 @@
1
- {"version":3,"file":"common.js","sourceRoot":"","sources":["../src/common.ts"],"names":[],"mappings":"AAKA,UAAU,CAAC,SAAS,GAAG,EAAmB,CAAC;AAE3C,IAAI,QAAQ,GAAG,KAAK,CAAC;AACrB,IAAI,SAAS,GAAG,KAAK,CAAC;AAEtB,MAAM,CAAC,KAAK,UAAU,aAAa,CAAC,SAAqB;IACrD,MAAM,IAAI,GAAG,CAAC,GAAG,SAAS,CAAC,CAAC;IAC5B,SAAS,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC;IAEpB,KAAK,MAAM,QAAQ,IAAI,IAAI,EAAE,CAAC;QAC1B,IAAI,CAAC;YACD,MAAM,GAAG,GAAG,QAAQ,EAAE,CAAC;YACvB,IAAI,GAAG,YAAY,OAAO;gBAAE,MAAM,GAAG,CAAC;QAC1C,CAAC;QACD,OAAO,CAAC,EAAE,CAAC;YACP,OAAO,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC;QACrB,CAAC;IACL,CAAC;AACL,CAAC;AAED,MAAM,UAAU,YAAY;IACxB,OAAO,OAAO,EAAE,IAAI,QAAQ,EAAE,CAAC;AACnC,CAAC;AAED,MAAM,UAAU,OAAO;IACnB,IAAI,QAAQ;QAAE,OAAO,QAAQ,CAAC;IAC9B,OAAO,QAAQ,GAAG,OAAM,CAAC,GAAG,CAAC,KAAG,WAAW,CAAC;AAChD,CAAC;AAED,MAAM,UAAU,QAAQ;IACpB,IAAI,SAAS;QAAE,OAAO,SAAS,CAAC;IAChC,OAAO,SAAS,GAAG,OAAM,CAAC,IAAI,CAAC,KAAG,WAAW,CAAC;AAClD,CAAC;AAED,MAAM,UAAU,IAAI,CAAC,OAAe;IAChC,OAAO,IAAI,OAAO,CAAC,CAAC,OAAO,EAAE,EAAE,CAAC,UAAU,CAAC,OAAO,EAAE,OAAO,CAAC,CAAC,CAAC;AAClE,CAAC"}
1
+ {"version":3,"file":"common.js","sourceRoot":"","sources":["../src/common.ts"],"names":[],"mappings":"AAEA,IAAI,QAAQ,GAAG,KAAK,CAAC;AACrB,IAAI,SAAS,GAAG,KAAK,CAAC;AAEtB,MAAM,CAAC,KAAK,UAAU,aAAa,CAAC,SAAqB;IACrD,MAAM,IAAI,GAAG,CAAC,GAAG,SAAS,CAAC,CAAC;IAC5B,SAAS,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC;IAEpB,KAAK,MAAM,QAAQ,IAAI,IAAI,EAAE,CAAC;QAC1B,IAAI,CAAC;YACD,MAAM,GAAG,GAAG,QAAQ,EAAE,CAAC;YACvB,IAAI,GAAG,YAAY,OAAO;gBAAE,MAAM,GAAG,CAAC;QAC1C,CAAC;QACD,OAAO,CAAC,EAAE,CAAC;YACP,OAAO,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC;QACrB,CAAC;IACL,CAAC;AACL,CAAC;AAED,MAAM,UAAU,YAAY;IACxB,OAAO,OAAO,EAAE,IAAI,QAAQ,EAAE,CAAC;AACnC,CAAC;AAED,MAAM,UAAU,OAAO;IACnB,IAAI,QAAQ;QAAE,OAAO,QAAQ,CAAC;IAC9B,OAAO,QAAQ,GAAG,OAAM,CAAC,GAAG,CAAC,KAAG,WAAW,CAAC;AAChD,CAAC;AAED,MAAM,UAAU,QAAQ;IACpB,IAAI,SAAS;QAAE,OAAO,SAAS,CAAC;IAChC,OAAO,SAAS,GAAG,OAAM,CAAC,IAAI,CAAC,KAAG,WAAW,CAAC;AAClD,CAAC;AAED,MAAM,UAAU,IAAI,CAAC,OAAe;IAChC,OAAO,IAAI,OAAO,CAAC,CAAC,OAAO,EAAE,EAAE,CAAC,UAAU,CAAC,OAAO,EAAE,OAAO,CAAC,CAAC,CAAC;AAClE,CAAC"}
package/dist/index.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":";;;;;;;;AAAA,OAAO,EAAC,OAAO,EAAE,QAAQ,EAAE,YAAY,EAAkB,MAAM,aAAa,CAAC;AAE7E,cAAc,aAAa,CAAC;AAE5B,OAAO,EAAC,WAAW,EAAC,MAAM,cAAc,CAAC;AAEzC,oCAAoC;AACpC,WAAW,EAAE,CAAC;AAEd,IAAI,YAAY,EAAE,EAAE,CAAC;IACjB,IAAI,UAAU,GAAe,QAAQ,CAAC;IACtC,IAAI,OAAO,EAAE;QAAE,UAAU,GAAG,OAAO,CAAC;IAEpC,kCAAkC;IAClC,8CAA8C;IAC9C,EAAE;IACF,MAAM,SAAS,GAAG,UAAU,CAAC,SAAS,CAAC;IAEvC,SAAS,CAAC,IAAI,GAAG;QACb,QAAQ,EAAE,QAAQ,EAAE;QACpB,OAAO,EAAE,OAAO,EAAE;QAClB,SAAS,EAAE,KAAK;QAChB,YAAY,EAAE,IAAI;QAClB,UAAU,EAAE,UAAU;KACzB,CAAA;IAED,IAAI,GAAG,GAAG,MAAM,CAAC,IAAI,CAAC,QAAQ,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,GAAG,EAAE,CAAC;IAChD,MAAM,QAAQ,GAAG,eAAe,GAAG,GAAG,CAAC;IAEvC,8DAA8D;IAC9D,kEAAkE;IAClE,8DAA8D;IAC9D,EAAE;IACF,MAAM,MAAM,kCAAC,kBAAkB,CAAC,QAAQ,EAAC,CAAC;AAC9C,CAAC"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":";;;;;;;;AAAA,OAAO,EAAC,OAAO,EAAE,QAAQ,EAAE,YAAY,EAAC,MAAM,aAAa,CAAC;AAE5D,cAAc,aAAa,CAAC;AAE5B,OAAO,EAAC,WAAW,EAAC,MAAM,cAAc,CAAC;AAGzC,oCAAoC;AACpC,WAAW,EAAE,CAAC;AAEd,IAAI,YAAY,EAAE,EAAE,CAAC;IACjB,IAAI,UAAU,GAAe,QAAQ,CAAC;IACtC,IAAI,OAAO,EAAE;QAAE,UAAU,GAAG,OAAO,CAAC;IAEpC,kCAAkC;IAClC,8CAA8C;IAC9C,EAAE;IACF,MAAM,SAAS,GAAG,UAAU,CAAC,SAAS,CAAC;IAEvC,SAAS,CAAC,IAAI,GAAG;QACb,QAAQ,EAAE,QAAQ,EAAE;QACpB,OAAO,EAAE,OAAO,EAAE;QAClB,SAAS,EAAE,KAAK;QAChB,YAAY,EAAE,IAAI;QAClB,UAAU,EAAE,UAAU;KACzB,CAAA;IAED,IAAI,GAAG,GAAG,MAAM,CAAC,IAAI,CAAC,QAAQ,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,GAAG,EAAE,CAAC;IAChD,MAAM,QAAQ,GAAG,eAAe,GAAG,GAAG,CAAC;IAEvC,8DAA8D;IAC9D,kEAAkE;IAClE,8DAA8D;IAC9D,EAAE;IACF,MAAM,MAAM,kCAAC,kBAAkB,CAAC,QAAQ,EAAC,CAAC;AAC9C,CAAC"}
@@ -1,34 +1,9 @@
1
- import { isMainThread, parentPort, Worker as NodeWorker, workerData } from "node:worker_threads";
2
- import { declareUsingWorker } from "./internal.js";
3
- import fs from "node:fs/promises";
4
- NodeSpace.process = {
5
- argv: process.argv,
6
- env: process.env,
7
- isProduction: process.env.NODE_ENV === 'production'
8
- };
9
- NodeSpace.thread = {
10
- isMainThread: isMainThread,
11
- currentWorker: parentPort,
12
- getCurrentWorkerData: () => workerData,
13
- newWorker: (fileName, data) => {
14
- declareUsingWorker();
15
- const res = data ?
16
- new NodeWorker(fileName, { workerData: data }) :
17
- new NodeWorker(fileName);
18
- return res;
19
- },
20
- unrefThisWorker: (worker) => {
21
- worker.unref();
22
- },
23
- closeCurrentThread() {
24
- if (parentPort) {
25
- parentPort.close();
26
- }
27
- }
28
- };
29
- NodeSpace.fs = {
30
- mkDir: (dirPath) => fs.mkdir(dirPath, { recursive: true })
31
- };
1
+ import { patch_process } from "./_process_s";
2
+ import { patch_server } from "./_thread_s";
3
+ import { patch_fs } from "./_fs_s";
4
+ patch_process();
5
+ patch_server();
6
+ patch_fs();
32
7
  NodeSpace.app.declareServerSideReady();
33
8
  process.on('exit', () => NodeSpace.app.declareAppExiting());
34
9
  //# sourceMappingURL=serverSide.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"serverSide.js","sourceRoot":"","sources":["../src/serverSide.ts"],"names":[],"mappings":"AAAA,OAAO,EAAC,YAAY,EAAE,UAAU,EAAE,MAAM,IAAI,UAAU,EAAE,UAAU,EAAC,MAAM,qBAAqB,CAAC;AAC/F,OAAO,EAAC,kBAAkB,EAAC,MAAM,eAAe,CAAC;AACjD,OAAO,EAAE,MAAM,kBAAkB,CAAC;AAElC,SAAS,CAAC,OAAO,GAAG;IAChB,IAAI,EAAE,OAAO,CAAC,IAAI;IAClB,GAAG,EAAE,OAAO,CAAC,GAAgC;IAC7C,YAAY,EAAE,OAAO,CAAC,GAAG,CAAC,QAAQ,KAAK,YAAY;CACtD,CAAC;AAEF,SAAS,CAAC,MAAM,GAAG;IACf,YAAY,EAAE,YAAY;IAC1B,aAAa,EAAE,UAA+B;IAC9C,oBAAoB,EAAE,GAAG,EAAE,CAAC,UAAU;IAEtC,SAAS,EAAE,CAAC,QAAQ,EAAE,IAAU,EAAE,EAAE;QAChC,kBAAkB,EAAE,CAAC;QAErB,MAAM,GAAG,GAAG,IAAI,CAAC,CAAC;YACd,IAAI,UAAU,CAAC,QAAQ,EAAE,EAAC,UAAU,EAAE,IAAI,EAAC,CAAC,CAAC,CAAC;YAC9C,IAAI,UAAU,CAAC,QAAQ,CAAC,CAAC;QAE7B,OAAO,GAAwB,CAAA;IACnC,CAAC;IAED,eAAe,EAAE,CAAC,MAAc,EAAE,EAAE;QAC/B,MAAgC,CAAC,KAAK,EAAE,CAAC;IAC9C,CAAC;IAED,kBAAkB;QACd,IAAI,UAAU,EAAE,CAAC;YACb,UAAU,CAAC,KAAK,EAAE,CAAC;QACvB,CAAC;IACL,CAAC;CACJ,CAAA;AAED,SAAS,CAAC,EAAE,GAAG;IACX,KAAK,EAAE,CAAC,OAAe,EAAE,EAAE,CAAC,EAAE,CAAC,KAAK,CAAC,OAAO,EAAE,EAAC,SAAS,EAAE,IAAI,EAAC,CAAC;CACnE,CAAA;AAED,SAAS,CAAC,GAAG,CAAC,sBAAsB,EAAE,CAAC;AAEvC,OAAO,CAAC,EAAE,CAAC,MAAM,EAAE,GAAG,EAAE,CAAC,SAAS,CAAC,GAAG,CAAC,iBAAiB,EAAE,CAAC,CAAC"}
1
+ {"version":3,"file":"serverSide.js","sourceRoot":"","sources":["../src/serverSide.ts"],"names":[],"mappings":"AAAA,OAAO,EAAC,aAAa,EAAC,MAAM,cAAc,CAAC;AAC3C,OAAO,EAAC,YAAY,EAAC,MAAM,aAAa,CAAC;AACzC,OAAO,EAAC,QAAQ,EAAC,MAAM,SAAS,CAAC;AAEjC,aAAa,EAAE,CAAC;AAChB,YAAY,EAAE,CAAC;AACf,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/package.json CHANGED
@@ -1,5 +1,5 @@
1
1
  {
2
- "version": "0.0.1",
2
+ "version": "0.0.2",
3
3
  "private": false,
4
4
  "name": "jopi-node-space",
5
5
  "license": "MIT",
@@ -22,6 +22,7 @@
22
22
  "bun-install": "bun install",
23
23
  "tsc": "tsc",
24
24
 
25
- "npm-publish": "npm publish"
25
+ "npm-publish": "npm publish",
26
+ "bun link": "bun link"
26
27
  }
27
28
  }
@@ -0,0 +1,135 @@
1
+ declare global {
2
+ var NodeSpace: NodeSpaceType;
3
+ var jopiHotReload: HotReloadType;
4
+ }
5
+
6
+ globalThis.NodeSpace = {} as NodeSpaceType;
7
+
8
+ export type ServerType = "nodejs"|"bunjs"|"browser";
9
+ export type Listener = ()=>void|Promise<void>;
10
+
11
+ export type EpCaller = (...values: unknown[]) => Promise<void>;
12
+ export type EpListener = (...values: unknown[]) => void|Promise<void>;
13
+
14
+ // ********************************************
15
+
16
+ export interface NodeSpaceType {
17
+ what: WhatInfos;
18
+ thread: ThreadImpl;
19
+ process: ProcessImpl;
20
+ timer: TimerImpl;
21
+ app: AppImpl;
22
+ extensionPoints: ExtensionPointImpl;
23
+ term: TerminalImpl;
24
+
25
+ // >>> Server side only
26
+
27
+ fs?: FileSystemImpl;
28
+ }
29
+
30
+ // ********************************************
31
+
32
+ export interface HotReloadType {
33
+ onHotReload: Listener[];
34
+ memory: { [key: string]: any };
35
+ }
36
+
37
+ interface WhatInfos {
38
+ isNodeJS: boolean;
39
+ isBunJs: boolean;
40
+ isBrowser: boolean;
41
+ isServerSide: boolean;
42
+ serverType: ServerType;
43
+ }
44
+
45
+ interface ThreadImpl {
46
+ isMainThread: boolean;
47
+ currentWorker: Worker | null;
48
+ newWorker: (fileName: string | URL, data?: any) => Worker;
49
+ getCurrentWorkerData: ()=>any;
50
+ unrefThisWorker(worker: Worker): void;
51
+ closeCurrentThread(): void;
52
+ }
53
+
54
+ interface ProcessImpl {
55
+ argv: string[];
56
+ env: { [key: string]: string };
57
+ isProduction: boolean;
58
+ }
59
+
60
+ interface TimerImpl {
61
+ tick: (delayMs: number) => Promise<void>;
62
+ }
63
+
64
+ interface FileSystemImpl {
65
+ mkDir: (dirPath: string) => Promise<string | undefined>;
66
+ }
67
+
68
+ interface AppImpl {
69
+ onServerSideReady(listener: Listener): void;
70
+ waitServerSideReady: () => Promise<void>;
71
+ declareServerSideReady(): void;
72
+
73
+ onAppStart(listener: Listener): void;
74
+ onAppExiting(listener: Listener): void;
75
+ onAppExited(listener: Listener): void;
76
+ executeApp(app: Listener): void;
77
+ declareAppStarted(): void;
78
+ declareAppExiting(): void;
79
+
80
+ onHotReload(listener: Listener): void;
81
+ keepOnHotReload<T>(key: string, provider: ()=>T): T;
82
+ }
83
+
84
+ interface ExtensionPointImpl {
85
+ /**
86
+ * Register an extension point.
87
+ * Allow knowing who is using it as an host.
88
+ */
89
+ newHost(epName: string, importMetaUrl: string): EpCaller;
90
+
91
+ /**
92
+ * Get a caller, allowing to call the extension point.
93
+ */
94
+ getCaller(epName: string, importMetaUrl: string): EpCaller;
95
+
96
+ /**
97
+ * Add a function which is called when the extension point is called.
98
+ */
99
+ on(epName: string, importMetaUrl: string, fct: EpListener): void;
100
+ }
101
+
102
+ interface TerminalImpl {
103
+ T_RESET: string;
104
+ T_BOLD: string;
105
+ T_UNDERLINE: string;
106
+ T_CLEAR_LINE: string;
107
+ T_CLEAR_LINE_END: string;
108
+ T_CLEAR_SCREEN: string;
109
+ T_LINE_START: string;
110
+
111
+ C_RED: string;
112
+ C_GREEN: string;
113
+ C_BLUE: string;
114
+ C_LIGHT_BLUE: string;
115
+ C_GREY: string;
116
+ C_ORANGE: string;
117
+
118
+ B_BLACK: string;
119
+ B_RED: string;
120
+ B_GREEN: string;
121
+ B_YELLOW: string;
122
+ B_BLUE: string;
123
+ B_MAGENTA: string;
124
+ B_CYAN: string;
125
+ B_WHITE: string;
126
+
127
+ colorize(...params: string[]): string;
128
+ cssText(text: string, css: string): void;
129
+
130
+ moveUp(n: number): string;
131
+ moveDown(n: number): string;
132
+ moveLeft(n: number): string;
133
+ moveRight(n: number): string;
134
+ goAt(x: number, y: number): string;
135
+ }
@@ -1,5 +1,6 @@
1
- import {execListeners, isBunJs, isNodeJs, type Listener} from "./common.ts";
1
+ import {execListeners, isBunJs, isNodeJs} from "./common.ts";
2
2
  import {isUsingWorker} from "./internal.ts";
3
+ import type {Listener} from "./__global";
3
4
 
4
5
  export function init_nodeSpaceApp() {
5
6
  const onServerSideReady: Listener[] = [];
@@ -8,20 +9,20 @@ export function init_nodeSpaceApp() {
8
9
  const onAppStart: Listener[] = [];
9
10
  let isServerSideReady = !(isNodeJs() || isBunJs());
10
11
 
11
- let isHotReload = globalThis.jopiHotReloader !== undefined;
12
+ let isHotReload = globalThis.jopiHotReload !== undefined;
12
13
  let isAppStarted = false;
13
14
 
14
15
  if (isHotReload) {
15
- execListeners(globalThis.jopiHotReloader.onHotReload).then();
16
+ execListeners(globalThis.jopiHotReload.onHotReload).then();
16
17
  } else {
17
- globalThis.jopiHotReloader = {
18
+ globalThis.jopiHotReload = {
18
19
  onHotReload: [],
19
20
  memory: {}
20
21
  }
21
22
  }
22
23
 
23
- const onHotReload = globalThis.jopiHotReloader.onHotReload;
24
- const memory = globalThis.jopiHotReloader.memory;
24
+ const onHotReload = globalThis.jopiHotReload.onHotReload;
25
+ const memory = globalThis.jopiHotReload.memory;
25
26
 
26
27
  NodeSpace.app = {
27
28
  onServerSideReady: (listener) => {
@@ -1,4 +1,4 @@
1
- import {type EpCaller, type EpListener} from "./common.ts";
1
+ import {type EpCaller, type EpListener} from "./__global.ts";
2
2
 
3
3
  interface ExtensionPoint {
4
4
  listeners: EpListener[];
package/src/_fs_s.ts ADDED
@@ -0,0 +1,7 @@
1
+ import fs from "node:fs/promises";
2
+
3
+ export function patch_fs() {
4
+ NodeSpace.fs = {
5
+ mkDir: (dirPath: string) => fs.mkdir(dirPath, {recursive: true})
6
+ }
7
+ }
@@ -0,0 +1,7 @@
1
+ export function patch_process() {
2
+ NodeSpace.process = {
3
+ argv: process.argv,
4
+ env: process.env as { [key: string]: string },
5
+ isProduction: process.env.NODE_ENV === 'production'
6
+ };
7
+ }
package/src/_term.ts ADDED
@@ -0,0 +1,86 @@
1
+ const T_RESET = "\x1b[0m";
2
+
3
+ const T_BOLD = "\x1b[1m";
4
+ const T_UNDERLINE = "\x1b[4m";
5
+
6
+ const T_CLEAR_LINE = "\x1b[2K";
7
+ const T_CLEAR_LINE_END = "\x1b[K";
8
+ const T_CLEAR_SCREEN = "\x1b[2J";
9
+ const T_LINE_START = "\r";
10
+
11
+ const C_RED = "\x1b[31m";
12
+ const C_BLUE = "\x1b[34m";
13
+ const C_LIGHT_BLUE = "\x1b[96m";
14
+ const C_GREEN = "\x1b[32m";
15
+ const C_GREY = "\x1b[90m";
16
+ const C_ORANGE = "\x1b[38;5;208m";
17
+
18
+ const B_BLACK = "\x1b[40m";
19
+ const B_RED = "\x1b[41m";
20
+ const B_GREEN = "\x1b[42m";
21
+ const B_YELLOW = "\x1b[43m";
22
+ const B_BLUE = "\x1b[44m";
23
+ const B_MAGENTA = "\x1b[45m";
24
+ const B_CYAN = "\x1b[46m";
25
+ const B_WHITE = "\x1b[47m";
26
+
27
+ function cssText(text: string, css: string) {
28
+ console.log("%c" + text, css)
29
+ }
30
+
31
+ function moveUp(n: number) {
32
+ return "\x1b[" + n + "A";
33
+ }
34
+
35
+ function moveDown(n: number) {
36
+ return "\x1b[" + n + "B";
37
+ }
38
+
39
+ function moveLeft(n: number) {
40
+ return "\x1b[" + n + "D";
41
+ }
42
+
43
+ function moveRight(n: number) {
44
+ return "\x1b[" + n + "C";
45
+ }
46
+
47
+ function goAt(x: number, y: number) {
48
+ return "\x1b[" + y + ";" + x + "H";
49
+ }
50
+
51
+ export function init_term() {
52
+ NodeSpace.term = {
53
+ C_RED,
54
+ C_GREEN,
55
+ C_BLUE,
56
+ C_LIGHT_BLUE,
57
+ C_GREY,
58
+ C_ORANGE,
59
+
60
+ B_BLACK,
61
+ B_BLUE,
62
+ B_CYAN,
63
+ B_GREEN,
64
+ B_MAGENTA,
65
+ B_RED,
66
+ B_WHITE,
67
+ B_YELLOW,
68
+
69
+ T_RESET,
70
+ T_BOLD,
71
+ T_CLEAR_SCREEN,
72
+ T_UNDERLINE,
73
+ T_CLEAR_LINE,
74
+ T_CLEAR_LINE_END,
75
+ T_LINE_START,
76
+
77
+ colorize(...params: string[]): string {
78
+ return params.join("") + T_RESET;
79
+ },
80
+
81
+ cssText,
82
+
83
+ moveUp, moveDown, moveLeft, moveRight, goAt
84
+
85
+ }
86
+ }
@@ -0,0 +1,31 @@
1
+ import {isMainThread, parentPort, workerData} from "node:worker_threads";
2
+ import {declareUsingWorker} from "./internal";
3
+ import {Worker as NodeWorker} from "worker_threads";
4
+
5
+ export function patch_server() {
6
+ NodeSpace.thread = {
7
+ isMainThread: isMainThread,
8
+ currentWorker: parentPort as unknown as Worker,
9
+ getCurrentWorkerData: () => workerData,
10
+
11
+ newWorker: (fileName, data?: any) => {
12
+ declareUsingWorker();
13
+
14
+ const res = data ?
15
+ new NodeWorker(fileName, {workerData: data}) :
16
+ new NodeWorker(fileName);
17
+
18
+ return res as unknown as Worker
19
+ },
20
+
21
+ unrefThisWorker: (worker: Worker) => {
22
+ (worker as unknown as NodeWorker).unref();
23
+ },
24
+
25
+ closeCurrentThread() {
26
+ if (parentPort) {
27
+ parentPort.close();
28
+ }
29
+ }
30
+ }
31
+ }
package/src/browser.ts CHANGED
@@ -1,9 +1,10 @@
1
- import {init_nodeSpaceWhat} from "./nodeSpaceWhat.ts";
2
- import {init_nodeSpaceApp} from "./nodeSpaceApp.ts";
3
- import {init_nodeSpaceProcess} from "./nodeSpaceProcess.ts";
4
- import {init_nodeSpaceTimer} from "./nodeSpaceTimer.ts";
5
- import {init_nodeSpaceThread} from "./nodeSpaceThread.ts";
6
- import {init_nodeSpaceExtensionPoints} from "./nodeSpaceExtensionPoints";
1
+ import {init_nodeSpaceWhat} from "./_what";
2
+ import {init_nodeSpaceApp} from "./_app";
3
+ import {init_nodeSpaceProcess} from "./_process";
4
+ import {init_nodeSpaceTimer} from "./_timer";
5
+ import {init_nodeSpaceThread} from "./_thread";
6
+ import {init_nodeSpaceExtensionPoints} from "./_extensionPoints";
7
+ import {init_term} from "./_term";
7
8
 
8
9
  export function initBrowser() {
9
10
  init_nodeSpaceWhat();
@@ -12,4 +13,5 @@ export function initBrowser() {
12
13
  init_nodeSpaceTimer();
13
14
  init_nodeSpaceThread();
14
15
  init_nodeSpaceExtensionPoints();
16
+ init_term();
15
17
  }
package/src/common.ts CHANGED
@@ -1,9 +1,4 @@
1
- declare global {
2
- var NodeSpace: NodeSpaceType;
3
- var jopiHotReloader: HotReloadType;
4
- }
5
-
6
- globalThis.NodeSpace = {} as NodeSpaceType;
1
+ import type {Listener} from "./__global";
7
2
 
8
3
  let _isBunJs = false;
9
4
  let _isNodeJs = false;
@@ -41,88 +36,3 @@ export function tick(delayMs: number): Promise<void> {
41
36
  return new Promise((resolve) => setTimeout(resolve, delayMs));
42
37
  }
43
38
 
44
- export type ServerType = "nodejs"|"bunjs"|"browser";
45
- export type Listener = ()=>void|Promise<void>;
46
-
47
- export interface NodeSpaceType {
48
- what: WhatInfos;
49
- thread: ThreadImpl;
50
- process: ProcessImpl;
51
- timer: TimerImpl;
52
- app: AppImpl;
53
- fs?: FileSystemImpl;
54
- extensionPoints?: ExtensionPointImpl;
55
- }
56
-
57
- export interface HotReloadType {
58
- onHotReload: Listener[];
59
- memory: { [key: string]: any };
60
- }
61
-
62
- interface WhatInfos {
63
- isNodeJS: boolean;
64
- isBunJs: boolean;
65
- isBrowser: boolean;
66
- isServerSide: boolean;
67
- serverType: ServerType;
68
- }
69
-
70
- interface ThreadImpl {
71
- isMainThread: boolean;
72
- currentWorker: Worker | null;
73
- newWorker: (fileName: string | URL, data?: any) => Worker;
74
- getCurrentWorkerData: ()=>any;
75
- unrefThisWorker(worker: Worker): void;
76
- closeCurrentThread(): void;
77
- }
78
-
79
- interface ProcessImpl {
80
- argv: string[];
81
- env: { [key: string]: string };
82
- isProduction: boolean;
83
- }
84
-
85
- interface TimerImpl {
86
- tick: (delayMs: number) => Promise<void>;
87
- }
88
-
89
- interface FileSystemImpl {
90
- mkDir: (dirPath: string) => Promise<string | undefined>;
91
- }
92
-
93
- interface AppImpl {
94
- onServerSideReady(listener: Listener): void;
95
- waitServerSideReady: () => Promise<void>;
96
- declareServerSideReady(): void;
97
-
98
- onAppStart(listener: Listener): void;
99
- onAppExiting(listener: Listener): void;
100
- onAppExited(listener: Listener): void;
101
- executeApp(app: Listener): void;
102
- declareAppStarted(): void;
103
- declareAppExiting(): void;
104
-
105
- onHotReload(listener: Listener): void;
106
- keepOnHotReload<T>(key: string, provider: ()=>T): T;
107
- }
108
-
109
- export type EpCaller = (...values: unknown[]) => Promise<void>;
110
- export type EpListener = (...values: unknown[]) => void|Promise<void>;
111
-
112
- interface ExtensionPointImpl {
113
- /**
114
- * Register an extension point.
115
- * Allow knowing who is using it as an host.
116
- */
117
- newHost(epName: string, importMetaUrl: string): EpCaller;
118
-
119
- /**
120
- * Get a caller, allowing to call the extension point.
121
- */
122
- getCaller(epName: string, importMetaUrl: string): EpCaller;
123
-
124
- /**
125
- * Add a function which is called when the extension point is called.
126
- */
127
- on(epName: string, importMetaUrl: string, fct: EpListener): void;
128
- }
package/src/index.ts CHANGED
@@ -1,8 +1,9 @@
1
- import {isBunJs, isNodeJs, isServerSide, type ServerType} from "./common.ts";
1
+ import {isBunJs, isNodeJs, isServerSide} from "./common.ts";
2
2
 
3
3
  export * from "./common.ts";
4
4
 
5
5
  import {initBrowser} from "./browser.ts";
6
+ import type {ServerType} from "./__global";
6
7
 
7
8
  // Will init with the common stuffs.
8
9
  initBrowser();
package/src/serverSide.ts CHANGED
@@ -1,43 +1,10 @@
1
- import {isMainThread, parentPort, Worker as NodeWorker, workerData} from "node:worker_threads";
2
- import {declareUsingWorker} from "./internal.ts";
3
- import fs from "node:fs/promises";
1
+ import {patch_process} from "./_process_s";
2
+ import {patch_server} from "./_thread_s";
3
+ import {patch_fs} from "./_fs_s";
4
4
 
5
- NodeSpace.process = {
6
- argv: process.argv,
7
- env: process.env as { [key: string]: string },
8
- isProduction: process.env.NODE_ENV === 'production'
9
- };
10
-
11
- NodeSpace.thread = {
12
- isMainThread: isMainThread,
13
- currentWorker: parentPort as unknown as Worker,
14
- getCurrentWorkerData: () => workerData,
15
-
16
- newWorker: (fileName, data?: any) => {
17
- declareUsingWorker();
18
-
19
- const res = data ?
20
- new NodeWorker(fileName, {workerData: data}) :
21
- new NodeWorker(fileName);
22
-
23
- return res as unknown as Worker
24
- },
25
-
26
- unrefThisWorker: (worker: Worker) => {
27
- (worker as unknown as NodeWorker).unref();
28
- },
29
-
30
- closeCurrentThread() {
31
- if (parentPort) {
32
- parentPort.close();
33
- }
34
- }
35
- }
36
-
37
- NodeSpace.fs = {
38
- mkDir: (dirPath: string) => fs.mkdir(dirPath, {recursive: true})
39
- }
5
+ patch_process();
6
+ patch_server();
7
+ patch_fs();
40
8
 
41
9
  NodeSpace.app.declareServerSideReady();
42
-
43
10
  process.on('exit', () => NodeSpace.app.declareAppExiting());
File without changes
File without changes
File without changes
File without changes