tywrap 0.2.0 → 0.3.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (163) hide show
  1. package/README.md +65 -31
  2. package/dist/cli.js +49 -2
  3. package/dist/cli.js.map +1 -1
  4. package/dist/config/index.d.ts +11 -7
  5. package/dist/config/index.d.ts.map +1 -1
  6. package/dist/config/index.js +43 -7
  7. package/dist/config/index.js.map +1 -1
  8. package/dist/core/analyzer.d.ts +1 -0
  9. package/dist/core/analyzer.d.ts.map +1 -1
  10. package/dist/core/analyzer.js +47 -12
  11. package/dist/core/analyzer.js.map +1 -1
  12. package/dist/core/annotation-parser.d.ts +8 -0
  13. package/dist/core/annotation-parser.d.ts.map +1 -0
  14. package/dist/core/annotation-parser.js +409 -0
  15. package/dist/core/annotation-parser.js.map +1 -0
  16. package/dist/core/discovery.d.ts +1 -0
  17. package/dist/core/discovery.d.ts.map +1 -1
  18. package/dist/core/discovery.js +9 -9
  19. package/dist/core/discovery.js.map +1 -1
  20. package/dist/core/generator.d.ts +9 -1
  21. package/dist/core/generator.d.ts.map +1 -1
  22. package/dist/core/generator.js +738 -104
  23. package/dist/core/generator.js.map +1 -1
  24. package/dist/core/mapper.d.ts +9 -7
  25. package/dist/core/mapper.d.ts.map +1 -1
  26. package/dist/core/mapper.js +129 -44
  27. package/dist/core/mapper.js.map +1 -1
  28. package/dist/index.d.ts +23 -7
  29. package/dist/index.d.ts.map +1 -1
  30. package/dist/index.js +23 -3
  31. package/dist/index.js.map +1 -1
  32. package/dist/runtime/base.d.ts +17 -7
  33. package/dist/runtime/base.d.ts.map +1 -1
  34. package/dist/runtime/base.js +18 -1
  35. package/dist/runtime/base.js.map +1 -1
  36. package/dist/runtime/bounded-context.d.ts +252 -0
  37. package/dist/runtime/bounded-context.d.ts.map +1 -0
  38. package/dist/runtime/bounded-context.js +454 -0
  39. package/dist/runtime/bounded-context.js.map +1 -0
  40. package/dist/runtime/bridge-core.d.ts +1 -0
  41. package/dist/runtime/bridge-core.d.ts.map +1 -1
  42. package/dist/runtime/bridge-core.js +52 -17
  43. package/dist/runtime/bridge-core.js.map +1 -1
  44. package/dist/runtime/bridge-protocol.d.ts +184 -0
  45. package/dist/runtime/bridge-protocol.d.ts.map +1 -0
  46. package/dist/runtime/bridge-protocol.js +344 -0
  47. package/dist/runtime/bridge-protocol.js.map +1 -0
  48. package/dist/runtime/disposable.d.ts +40 -0
  49. package/dist/runtime/disposable.d.ts.map +1 -0
  50. package/dist/runtime/disposable.js +49 -0
  51. package/dist/runtime/disposable.js.map +1 -0
  52. package/dist/runtime/errors.d.ts +10 -0
  53. package/dist/runtime/errors.d.ts.map +1 -1
  54. package/dist/runtime/errors.js +9 -0
  55. package/dist/runtime/errors.js.map +1 -1
  56. package/dist/runtime/http-io.d.ts +91 -0
  57. package/dist/runtime/http-io.d.ts.map +1 -0
  58. package/dist/runtime/http-io.js +195 -0
  59. package/dist/runtime/http-io.js.map +1 -0
  60. package/dist/runtime/http.d.ts +48 -13
  61. package/dist/runtime/http.d.ts.map +1 -1
  62. package/dist/runtime/http.js +60 -73
  63. package/dist/runtime/http.js.map +1 -1
  64. package/dist/runtime/node.d.ts +97 -130
  65. package/dist/runtime/node.d.ts.map +1 -1
  66. package/dist/runtime/node.js +392 -521
  67. package/dist/runtime/node.js.map +1 -1
  68. package/dist/runtime/optimized-node.d.ts +1 -1
  69. package/dist/runtime/optimized-node.d.ts.map +1 -1
  70. package/dist/runtime/optimized-node.js +1 -1
  71. package/dist/runtime/optimized-node.js.map +1 -1
  72. package/dist/runtime/pooled-transport.d.ts +135 -0
  73. package/dist/runtime/pooled-transport.d.ts.map +1 -0
  74. package/dist/runtime/pooled-transport.js +177 -0
  75. package/dist/runtime/pooled-transport.js.map +1 -0
  76. package/dist/runtime/process-io.d.ts +209 -0
  77. package/dist/runtime/process-io.d.ts.map +1 -0
  78. package/dist/runtime/process-io.js +729 -0
  79. package/dist/runtime/process-io.js.map +1 -0
  80. package/dist/runtime/pyodide-io.d.ts +154 -0
  81. package/dist/runtime/pyodide-io.d.ts.map +1 -0
  82. package/dist/runtime/pyodide-io.js +459 -0
  83. package/dist/runtime/pyodide-io.js.map +1 -0
  84. package/dist/runtime/pyodide.d.ts +51 -19
  85. package/dist/runtime/pyodide.d.ts.map +1 -1
  86. package/dist/runtime/pyodide.js +57 -186
  87. package/dist/runtime/pyodide.js.map +1 -1
  88. package/dist/runtime/safe-codec.d.ts +103 -0
  89. package/dist/runtime/safe-codec.d.ts.map +1 -0
  90. package/dist/runtime/safe-codec.js +519 -0
  91. package/dist/runtime/safe-codec.js.map +1 -0
  92. package/dist/runtime/transport.d.ts +191 -0
  93. package/dist/runtime/transport.d.ts.map +1 -0
  94. package/dist/runtime/transport.js +86 -0
  95. package/dist/runtime/transport.js.map +1 -0
  96. package/dist/runtime/validators.d.ts +120 -0
  97. package/dist/runtime/validators.d.ts.map +1 -0
  98. package/dist/runtime/validators.js +229 -0
  99. package/dist/runtime/validators.js.map +1 -0
  100. package/dist/runtime/worker-pool.d.ts +208 -0
  101. package/dist/runtime/worker-pool.d.ts.map +1 -0
  102. package/dist/runtime/worker-pool.js +419 -0
  103. package/dist/runtime/worker-pool.js.map +1 -0
  104. package/dist/types/index.d.ts +51 -1
  105. package/dist/types/index.d.ts.map +1 -1
  106. package/dist/tywrap.d.ts.map +1 -1
  107. package/dist/tywrap.js +227 -328
  108. package/dist/tywrap.js.map +1 -1
  109. package/dist/utils/cache.d.ts.map +1 -1
  110. package/dist/utils/cache.js +53 -5
  111. package/dist/utils/cache.js.map +1 -1
  112. package/dist/utils/codec.d.ts.map +1 -1
  113. package/dist/utils/codec.js +114 -1
  114. package/dist/utils/codec.js.map +1 -1
  115. package/dist/utils/ir-cache.d.ts +28 -0
  116. package/dist/utils/ir-cache.d.ts.map +1 -0
  117. package/dist/utils/ir-cache.js +29 -0
  118. package/dist/utils/ir-cache.js.map +1 -0
  119. package/dist/utils/parallel-processor.d.ts +1 -1
  120. package/dist/utils/parallel-processor.d.ts.map +1 -1
  121. package/dist/utils/parallel-processor.js +111 -40
  122. package/dist/utils/parallel-processor.js.map +1 -1
  123. package/dist/utils/runtime.d.ts +5 -1
  124. package/dist/utils/runtime.d.ts.map +1 -1
  125. package/dist/utils/runtime.js +112 -18
  126. package/dist/utils/runtime.js.map +1 -1
  127. package/package.json +40 -18
  128. package/runtime/python_bridge.py +108 -15
  129. package/runtime/safe_codec.py +344 -0
  130. package/src/cli.ts +61 -2
  131. package/src/config/index.ts +63 -17
  132. package/src/core/analyzer.ts +52 -15
  133. package/src/core/annotation-parser.ts +500 -0
  134. package/src/core/discovery.ts +26 -12
  135. package/src/core/generator.ts +956 -116
  136. package/src/core/mapper.ts +158 -51
  137. package/src/index.ts +78 -6
  138. package/src/runtime/base.ts +18 -26
  139. package/src/runtime/bounded-context.ts +608 -0
  140. package/src/runtime/bridge-core.ts +58 -18
  141. package/src/runtime/bridge-protocol.ts +483 -0
  142. package/src/runtime/disposable.ts +65 -0
  143. package/src/runtime/errors.ts +14 -0
  144. package/src/runtime/http-io.ts +245 -0
  145. package/src/runtime/http.ts +76 -115
  146. package/src/runtime/node.ts +563 -676
  147. package/src/runtime/optimized-node.ts +4 -1
  148. package/src/runtime/pooled-transport.ts +263 -0
  149. package/src/runtime/process-io.ts +930 -0
  150. package/src/runtime/pyodide-io.ts +551 -0
  151. package/src/runtime/pyodide.ts +75 -215
  152. package/src/runtime/safe-codec.ts +651 -0
  153. package/src/runtime/transport.ts +278 -0
  154. package/src/runtime/validators.ts +252 -0
  155. package/src/runtime/worker-pool.ts +559 -0
  156. package/src/types/global.d.ts +11 -1
  157. package/src/types/index.ts +63 -0
  158. package/src/tywrap.ts +279 -358
  159. package/src/utils/cache.ts +59 -5
  160. package/src/utils/codec.ts +122 -1
  161. package/src/utils/ir-cache.ts +51 -0
  162. package/src/utils/parallel-processor.ts +119 -43
  163. package/src/utils/runtime.ts +129 -18
@@ -0,0 +1 @@
1
+ {"version":3,"file":"process-io.js","sourceRoot":"","sources":["../../src/runtime/process-io.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,154 @@
1
+ /**
2
+ * PyodideIO Transport - In-memory Pyodide communication for browser environments.
3
+ *
4
+ * This transport implements the Transport interface for direct in-memory
5
+ * communication with Pyodide (Python compiled to WebAssembly). It is designed
6
+ * for browser environments where Python code runs within the same process.
7
+ *
8
+ * Key features:
9
+ * - Zero network overhead (in-memory calls)
10
+ * - Automatic Pyodide loading from CDN or module
11
+ * - Python package loading support
12
+ * - Proper proxy cleanup to prevent memory leaks
13
+ *
14
+ * @see https://github.com/bbopen/tywrap/issues/149
15
+ */
16
+ import { BoundedContext } from './bounded-context.js';
17
+ import { type Transport } from './transport.js';
18
+ /**
19
+ * Options for configuring the PyodideIO transport.
20
+ */
21
+ export interface PyodideIOOptions {
22
+ /** URL for Pyodide CDN. Default: official CDN */
23
+ indexURL?: string;
24
+ /** Python packages to load during initialization */
25
+ packages?: string[];
26
+ }
27
+ /**
28
+ * Transport implementation for in-memory Pyodide communication.
29
+ *
30
+ * This transport extends BoundedContext for lifecycle management and
31
+ * implements the Transport interface for message-based communication.
32
+ *
33
+ * @example
34
+ * ```typescript
35
+ * const transport = new PyodideIO({ packages: ['numpy'] });
36
+ * await transport.init();
37
+ *
38
+ * const response = await transport.send(
39
+ * JSON.stringify({
40
+ * id: 1,
41
+ * protocol: 'tywrap/1',
42
+ * method: 'call',
43
+ * params: { module: 'math', functionName: 'sqrt', args: [16], kwargs: {} }
44
+ * }),
45
+ * 5000
46
+ * );
47
+ *
48
+ * await transport.dispose();
49
+ * ```
50
+ */
51
+ export declare class PyodideIO extends BoundedContext implements Transport {
52
+ private readonly indexURL;
53
+ private readonly packages;
54
+ private requestId;
55
+ private py?;
56
+ /**
57
+ * Create a new PyodideIO transport.
58
+ *
59
+ * @param options - Configuration options
60
+ */
61
+ constructor(options?: PyodideIOOptions);
62
+ /**
63
+ * Initialize the Pyodide runtime.
64
+ *
65
+ * This method:
66
+ * 1. Resolves the loadPyodide function (global or dynamic import)
67
+ * 2. Loads Pyodide with the configured indexURL
68
+ * 3. Loads any requested Python packages
69
+ * 4. Bootstraps the dispatch helper function
70
+ *
71
+ * @throws BridgeProtocolError if Pyodide is not available
72
+ */
73
+ protected doInit(): Promise<void>;
74
+ /**
75
+ * Clean up Pyodide resources.
76
+ *
77
+ * Note: Pyodide does not have an explicit dispose mechanism.
78
+ * We clear our reference and rely on garbage collection.
79
+ */
80
+ protected doDispose(): Promise<void>;
81
+ /**
82
+ * Send a protocol message to Pyodide and wait for the response.
83
+ *
84
+ * This method:
85
+ * 1. Validates the transport is ready
86
+ * 2. Calls the Python dispatch function with the JSON message
87
+ * 3. Returns the JSON response string
88
+ *
89
+ * The timeout and abort signal are respected, though in-memory calls
90
+ * are typically fast enough that timeouts rarely trigger.
91
+ *
92
+ * @param message - JSON-encoded ProtocolMessage
93
+ * @param timeoutMs - Timeout in milliseconds (0 = no timeout)
94
+ * @param signal - Optional AbortSignal for cancellation
95
+ * @returns JSON-encoded ProtocolResponse
96
+ *
97
+ * @throws BridgeDisposedError if transport is disposed
98
+ * @throws BridgeProtocolError if message is invalid or Pyodide not ready
99
+ * @throws BridgeTimeoutError if operation times out or is aborted
100
+ * @throws BridgeExecutionError for Python execution errors
101
+ */
102
+ send(message: string, timeoutMs: number, signal?: AbortSignal): Promise<string>;
103
+ /**
104
+ * Call a Python function.
105
+ *
106
+ * Convenience method that constructs a 'call' message and sends it.
107
+ */
108
+ call<T = unknown>(module: string, functionName: string, args: unknown[], kwargs?: Record<string, unknown>): Promise<T>;
109
+ /**
110
+ * Instantiate a Python class.
111
+ *
112
+ * Convenience method that constructs an 'instantiate' message and sends it.
113
+ */
114
+ instantiate<T = unknown>(module: string, className: string, args: unknown[], kwargs?: Record<string, unknown>): Promise<T>;
115
+ /**
116
+ * Call a method on a Python instance.
117
+ *
118
+ * Convenience method that constructs a 'call_method' message and sends it.
119
+ */
120
+ callMethod<T = unknown>(handle: string, methodName: string, args: unknown[], kwargs?: Record<string, unknown>): Promise<T>;
121
+ /**
122
+ * Dispose a Python instance.
123
+ *
124
+ * Convenience method that constructs a 'dispose_instance' message and sends it.
125
+ */
126
+ disposeInstance(handle: string): Promise<void>;
127
+ /**
128
+ * Resolve the loadPyodide function.
129
+ *
130
+ * First checks for a global loadPyodide (browser script tag include),
131
+ * then falls back to dynamic import of the 'pyodide' module.
132
+ */
133
+ private resolveLoadPyodide;
134
+ /**
135
+ * Bootstrap the Python dispatch function.
136
+ */
137
+ private bootstrapDispatcher;
138
+ /**
139
+ * Parse a JSON response and extract the result or throw an error.
140
+ */
141
+ private parseResponse;
142
+ /**
143
+ * Generate a unique message ID.
144
+ */
145
+ private generateId;
146
+ /**
147
+ * Safely destroy a Pyodide proxy object.
148
+ *
149
+ * Pyodide proxy objects must be explicitly destroyed to prevent memory leaks.
150
+ * This method checks if the value has a destroy method and calls it.
151
+ */
152
+ private destroyPyProxy;
153
+ }
154
+ //# sourceMappingURL=pyodide-io.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"pyodide-io.d.ts","sourceRoot":"","sources":["../../src/runtime/pyodide-io.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;GAcG;AAEH,OAAO,EAAE,cAAc,EAAE,MAAM,sBAAsB,CAAC;AAEtD,OAAO,EAEL,KAAK,SAAS,EAGf,MAAM,gBAAgB,CAAC;AAMxB;;GAEG;AACH,MAAM,WAAW,gBAAgB;IAC/B,iDAAiD;IACjD,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,oDAAoD;IACpD,QAAQ,CAAC,EAAE,MAAM,EAAE,CAAC;CACrB;AA2JD;;;;;;;;;;;;;;;;;;;;;;;GAuBG;AACH,qBAAa,SAAU,SAAQ,cAAe,YAAW,SAAS;IAChE,OAAO,CAAC,QAAQ,CAAC,QAAQ,CAAS;IAClC,OAAO,CAAC,QAAQ,CAAC,QAAQ,CAAoB;IAC7C,OAAO,CAAC,SAAS,CAAK;IACtB,OAAO,CAAC,EAAE,CAAC,CAAkB;IAE7B;;;;OAIG;gBACS,OAAO,GAAE,gBAAqB;IAU1C;;;;;;;;;;OAUG;cACa,MAAM,IAAI,OAAO,CAAC,IAAI,CAAC;IAkBvC;;;;;OAKG;cACa,SAAS,IAAI,OAAO,CAAC,IAAI,CAAC;IAQ1C;;;;;;;;;;;;;;;;;;;;OAoBG;IACG,IAAI,CAAC,OAAO,EAAE,MAAM,EAAE,SAAS,EAAE,MAAM,EAAE,MAAM,CAAC,EAAE,WAAW,GAAG,OAAO,CAAC,MAAM,CAAC;IAqErF;;;;OAIG;IACG,IAAI,CAAC,CAAC,GAAG,OAAO,EACpB,MAAM,EAAE,MAAM,EACd,YAAY,EAAE,MAAM,EACpB,IAAI,EAAE,OAAO,EAAE,EACf,MAAM,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAC/B,OAAO,CAAC,CAAC,CAAC;IAiBb;;;;OAIG;IACG,WAAW,CAAC,CAAC,GAAG,OAAO,EAC3B,MAAM,EAAE,MAAM,EACd,SAAS,EAAE,MAAM,EACjB,IAAI,EAAE,OAAO,EAAE,EACf,MAAM,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAC/B,OAAO,CAAC,CAAC,CAAC;IAiBb;;;;OAIG;IACG,UAAU,CAAC,CAAC,GAAG,OAAO,EAC1B,MAAM,EAAE,MAAM,EACd,UAAU,EAAE,MAAM,EAClB,IAAI,EAAE,OAAO,EAAE,EACf,MAAM,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAC/B,OAAO,CAAC,CAAC,CAAC;IAiBb;;;;OAIG;IACG,eAAe,CAAC,MAAM,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IAkBpD;;;;;OAKG;YACW,kBAAkB;IAqBhC;;OAEG;YACW,mBAAmB;IAOjC;;OAEG;IACH,OAAO,CAAC,aAAa;IAcrB;;OAEG;IACH,OAAO,CAAC,UAAU;IAIlB;;;;;OAKG;IACH,OAAO,CAAC,cAAc;CASvB"}
@@ -0,0 +1,459 @@
1
+ /**
2
+ * PyodideIO Transport - In-memory Pyodide communication for browser environments.
3
+ *
4
+ * This transport implements the Transport interface for direct in-memory
5
+ * communication with Pyodide (Python compiled to WebAssembly). It is designed
6
+ * for browser environments where Python code runs within the same process.
7
+ *
8
+ * Key features:
9
+ * - Zero network overhead (in-memory calls)
10
+ * - Automatic Pyodide loading from CDN or module
11
+ * - Python package loading support
12
+ * - Proper proxy cleanup to prevent memory leaks
13
+ *
14
+ * @see https://github.com/bbopen/tywrap/issues/149
15
+ */
16
+ import { BoundedContext } from './bounded-context.js';
17
+ import { BridgeExecutionError, BridgeProtocolError } from './errors.js';
18
+ import { PROTOCOL_ID, } from './transport.js';
19
+ // =============================================================================
20
+ // CONSTANTS
21
+ // =============================================================================
22
+ /** Default Pyodide CDN URL */
23
+ const DEFAULT_INDEX_URL = 'https://cdn.jsdelivr.net/pyodide/v0.28.0/full/';
24
+ /**
25
+ * Bootstrap Python code that sets up the dispatch function.
26
+ *
27
+ * This code is injected into Pyodide during initialization and provides
28
+ * a single entry point for all protocol messages. The dispatch function
29
+ * parses JSON messages, routes to appropriate handlers, and returns
30
+ * JSON responses.
31
+ */
32
+ const BOOTSTRAP_PYTHON = `
33
+ import json
34
+ import importlib
35
+
36
+ __tywrap_instances = {}
37
+ __tywrap_protocol = 'tywrap/1'
38
+
39
+ def __tywrap_require_str(params, key):
40
+ value = params.get(key)
41
+ if not isinstance(value, str) or not value:
42
+ raise ValueError(f'Missing {key}')
43
+ return value
44
+
45
+ def __tywrap_coerce_list(value, key):
46
+ if value is None:
47
+ return []
48
+ if not isinstance(value, list):
49
+ raise ValueError(f'Invalid {key}')
50
+ return value
51
+
52
+ def __tywrap_coerce_dict(value, key):
53
+ if value is None:
54
+ return {}
55
+ if not isinstance(value, dict):
56
+ raise ValueError(f'Invalid {key}')
57
+ return value
58
+
59
+ def __tywrap_dispatch(message_json):
60
+ """
61
+ Dispatch a protocol message and return a JSON response.
62
+
63
+ Args:
64
+ message_json: JSON-encoded ProtocolMessage string
65
+
66
+ Returns:
67
+ JSON-encoded ProtocolResponse string
68
+ """
69
+ msg = None
70
+ msg_id = -1
71
+ try:
72
+ msg = json.loads(message_json)
73
+ if not isinstance(msg, dict):
74
+ raise ValueError('Invalid request payload')
75
+
76
+ msg_id = msg.get('id')
77
+ if not isinstance(msg_id, int):
78
+ raise ValueError(f'Invalid request id: {msg_id}')
79
+
80
+ protocol = msg.get('protocol')
81
+ if protocol != __tywrap_protocol:
82
+ raise ValueError(f'Invalid protocol: {protocol}')
83
+
84
+ method = msg.get('method')
85
+ if not isinstance(method, str):
86
+ raise ValueError('Missing method')
87
+
88
+ params = __tywrap_coerce_dict(msg.get('params'), 'params')
89
+
90
+ if method == 'call':
91
+ module_name = __tywrap_require_str(params, 'module')
92
+ function_name = __tywrap_require_str(params, 'functionName')
93
+ args = __tywrap_coerce_list(params.get('args'), 'args')
94
+ kwargs = __tywrap_coerce_dict(params.get('kwargs'), 'kwargs')
95
+ mod = importlib.import_module(module_name)
96
+ fn = getattr(mod, function_name)
97
+ result = fn(*args, **kwargs)
98
+
99
+ elif method == 'instantiate':
100
+ module_name = __tywrap_require_str(params, 'module')
101
+ class_name = __tywrap_require_str(params, 'className')
102
+ args = __tywrap_coerce_list(params.get('args'), 'args')
103
+ kwargs = __tywrap_coerce_dict(params.get('kwargs'), 'kwargs')
104
+ mod = importlib.import_module(module_name)
105
+ cls = getattr(mod, class_name)
106
+ obj = cls(*args, **kwargs)
107
+ handle = str(id(obj))
108
+ __tywrap_instances[handle] = obj
109
+ result = handle
110
+
111
+ elif method == 'call_method':
112
+ handle = __tywrap_require_str(params, 'handle')
113
+ method_name = __tywrap_require_str(params, 'methodName')
114
+ args = __tywrap_coerce_list(params.get('args'), 'args')
115
+ kwargs = __tywrap_coerce_dict(params.get('kwargs'), 'kwargs')
116
+ if handle not in __tywrap_instances:
117
+ raise ValueError(f'Unknown instance handle: {handle}')
118
+ obj = __tywrap_instances[handle]
119
+ bound_method = getattr(obj, method_name)
120
+ result = bound_method(*args, **kwargs)
121
+
122
+ elif method == 'dispose_instance':
123
+ handle = __tywrap_require_str(params, 'handle')
124
+ result = __tywrap_instances.pop(handle, None) is not None
125
+
126
+ else:
127
+ raise ValueError(f'Unknown method: {method}')
128
+
129
+ return json.dumps({
130
+ 'id': msg_id,
131
+ 'protocol': __tywrap_protocol,
132
+ 'result': result
133
+ })
134
+
135
+ except Exception as e:
136
+ import traceback
137
+ return json.dumps({
138
+ 'id': msg_id,
139
+ 'protocol': __tywrap_protocol,
140
+ 'error': {
141
+ 'type': type(e).__name__,
142
+ 'message': str(e),
143
+ 'traceback': traceback.format_exc()
144
+ }
145
+ })
146
+ `;
147
+ // =============================================================================
148
+ // PYODIDE IO TRANSPORT
149
+ // =============================================================================
150
+ /**
151
+ * Transport implementation for in-memory Pyodide communication.
152
+ *
153
+ * This transport extends BoundedContext for lifecycle management and
154
+ * implements the Transport interface for message-based communication.
155
+ *
156
+ * @example
157
+ * ```typescript
158
+ * const transport = new PyodideIO({ packages: ['numpy'] });
159
+ * await transport.init();
160
+ *
161
+ * const response = await transport.send(
162
+ * JSON.stringify({
163
+ * id: 1,
164
+ * protocol: 'tywrap/1',
165
+ * method: 'call',
166
+ * params: { module: 'math', functionName: 'sqrt', args: [16], kwargs: {} }
167
+ * }),
168
+ * 5000
169
+ * );
170
+ *
171
+ * await transport.dispose();
172
+ * ```
173
+ */
174
+ export class PyodideIO extends BoundedContext {
175
+ indexURL;
176
+ packages;
177
+ requestId = 0;
178
+ py;
179
+ /**
180
+ * Create a new PyodideIO transport.
181
+ *
182
+ * @param options - Configuration options
183
+ */
184
+ constructor(options = {}) {
185
+ super();
186
+ this.indexURL = options.indexURL ?? DEFAULT_INDEX_URL;
187
+ this.packages = Object.freeze([...(options.packages ?? [])]);
188
+ }
189
+ // ===========================================================================
190
+ // LIFECYCLE (BoundedContext implementation)
191
+ // ===========================================================================
192
+ /**
193
+ * Initialize the Pyodide runtime.
194
+ *
195
+ * This method:
196
+ * 1. Resolves the loadPyodide function (global or dynamic import)
197
+ * 2. Loads Pyodide with the configured indexURL
198
+ * 3. Loads any requested Python packages
199
+ * 4. Bootstraps the dispatch helper function
200
+ *
201
+ * @throws BridgeProtocolError if Pyodide is not available
202
+ */
203
+ async doInit() {
204
+ const loadPyodideFn = await this.resolveLoadPyodide();
205
+ if (!loadPyodideFn) {
206
+ throw new BridgeProtocolError('Pyodide is not available in this environment. ' +
207
+ 'Include the Pyodide script tag or install the pyodide package.');
208
+ }
209
+ this.py = await loadPyodideFn({ indexURL: this.indexURL });
210
+ if (this.packages.length > 0) {
211
+ await this.py.loadPackage([...this.packages]);
212
+ }
213
+ await this.bootstrapDispatcher();
214
+ }
215
+ /**
216
+ * Clean up Pyodide resources.
217
+ *
218
+ * Note: Pyodide does not have an explicit dispose mechanism.
219
+ * We clear our reference and rely on garbage collection.
220
+ */
221
+ async doDispose() {
222
+ this.py = undefined;
223
+ }
224
+ // ===========================================================================
225
+ // TRANSPORT INTERFACE
226
+ // ===========================================================================
227
+ /**
228
+ * Send a protocol message to Pyodide and wait for the response.
229
+ *
230
+ * This method:
231
+ * 1. Validates the transport is ready
232
+ * 2. Calls the Python dispatch function with the JSON message
233
+ * 3. Returns the JSON response string
234
+ *
235
+ * The timeout and abort signal are respected, though in-memory calls
236
+ * are typically fast enough that timeouts rarely trigger.
237
+ *
238
+ * @param message - JSON-encoded ProtocolMessage
239
+ * @param timeoutMs - Timeout in milliseconds (0 = no timeout)
240
+ * @param signal - Optional AbortSignal for cancellation
241
+ * @returns JSON-encoded ProtocolResponse
242
+ *
243
+ * @throws BridgeDisposedError if transport is disposed
244
+ * @throws BridgeProtocolError if message is invalid or Pyodide not ready
245
+ * @throws BridgeTimeoutError if operation times out or is aborted
246
+ * @throws BridgeExecutionError for Python execution errors
247
+ */
248
+ async send(message, timeoutMs, signal) {
249
+ return this.execute(async () => {
250
+ if (!this.py) {
251
+ throw new BridgeProtocolError('Pyodide not initialized');
252
+ }
253
+ // Validate message is parseable JSON
254
+ let parsed;
255
+ try {
256
+ parsed = JSON.parse(message);
257
+ }
258
+ catch (e) {
259
+ throw new BridgeProtocolError(`Invalid JSON message: ${e.message}`);
260
+ }
261
+ // Validate required fields
262
+ if (typeof parsed.id !== 'number' || !Number.isInteger(parsed.id)) {
263
+ throw new BridgeProtocolError('Message missing required fields: id, method');
264
+ }
265
+ if (parsed.protocol !== PROTOCOL_ID || typeof parsed.method !== 'string') {
266
+ throw new BridgeProtocolError('Message missing required fields: id, method');
267
+ }
268
+ if (!parsed.params || typeof parsed.params !== 'object' || Array.isArray(parsed.params)) {
269
+ throw new BridgeProtocolError('Message missing required fields: id, method');
270
+ }
271
+ // Get the dispatch function
272
+ const dispatchFn = this.py.globals.get('__tywrap_dispatch');
273
+ if (!dispatchFn) {
274
+ throw new BridgeProtocolError('Pyodide dispatch function not initialized');
275
+ }
276
+ try {
277
+ // Call the dispatch function
278
+ const invoke = dispatchFn;
279
+ const responseJson = invoke(message);
280
+ // Validate response is valid JSON
281
+ try {
282
+ const response = JSON.parse(responseJson);
283
+ if (typeof response.id !== 'number' || !Number.isInteger(response.id)) {
284
+ throw new BridgeProtocolError('Invalid response from Python: missing numeric id');
285
+ }
286
+ if (response.protocol !== undefined && response.protocol !== PROTOCOL_ID) {
287
+ throw new BridgeProtocolError(`Invalid protocol version: expected "${PROTOCOL_ID}", got "${response.protocol}"`);
288
+ }
289
+ if (response.error) {
290
+ // Return the response as-is; let the caller handle the error
291
+ return responseJson;
292
+ }
293
+ return responseJson;
294
+ }
295
+ catch {
296
+ throw new BridgeProtocolError(`Invalid JSON response from Python: ${responseJson}`);
297
+ }
298
+ }
299
+ finally {
300
+ // Clean up the proxy
301
+ this.destroyPyProxy(dispatchFn);
302
+ }
303
+ }, { timeoutMs, signal });
304
+ }
305
+ // ===========================================================================
306
+ // RUNTIME EXECUTION (BoundedContext abstract methods)
307
+ // ===========================================================================
308
+ /**
309
+ * Call a Python function.
310
+ *
311
+ * Convenience method that constructs a 'call' message and sends it.
312
+ */
313
+ async call(module, functionName, args, kwargs) {
314
+ const message = {
315
+ id: this.generateId(),
316
+ protocol: PROTOCOL_ID,
317
+ method: 'call',
318
+ params: {
319
+ module,
320
+ functionName,
321
+ args: args ?? [],
322
+ kwargs,
323
+ },
324
+ };
325
+ const responseJson = await this.send(JSON.stringify(message), 30000);
326
+ return this.parseResponse(responseJson);
327
+ }
328
+ /**
329
+ * Instantiate a Python class.
330
+ *
331
+ * Convenience method that constructs an 'instantiate' message and sends it.
332
+ */
333
+ async instantiate(module, className, args, kwargs) {
334
+ const message = {
335
+ id: this.generateId(),
336
+ protocol: PROTOCOL_ID,
337
+ method: 'instantiate',
338
+ params: {
339
+ module,
340
+ className,
341
+ args: args ?? [],
342
+ kwargs,
343
+ },
344
+ };
345
+ const responseJson = await this.send(JSON.stringify(message), 30000);
346
+ return this.parseResponse(responseJson);
347
+ }
348
+ /**
349
+ * Call a method on a Python instance.
350
+ *
351
+ * Convenience method that constructs a 'call_method' message and sends it.
352
+ */
353
+ async callMethod(handle, methodName, args, kwargs) {
354
+ const message = {
355
+ id: this.generateId(),
356
+ protocol: PROTOCOL_ID,
357
+ method: 'call_method',
358
+ params: {
359
+ handle,
360
+ methodName,
361
+ args: args ?? [],
362
+ kwargs,
363
+ },
364
+ };
365
+ const responseJson = await this.send(JSON.stringify(message), 30000);
366
+ return this.parseResponse(responseJson);
367
+ }
368
+ /**
369
+ * Dispose a Python instance.
370
+ *
371
+ * Convenience method that constructs a 'dispose_instance' message and sends it.
372
+ */
373
+ async disposeInstance(handle) {
374
+ const message = {
375
+ id: this.generateId(),
376
+ protocol: PROTOCOL_ID,
377
+ method: 'dispose_instance',
378
+ params: {
379
+ handle,
380
+ },
381
+ };
382
+ const responseJson = await this.send(JSON.stringify(message), 30000);
383
+ this.parseResponse(responseJson);
384
+ }
385
+ // ===========================================================================
386
+ // PRIVATE HELPERS
387
+ // ===========================================================================
388
+ /**
389
+ * Resolve the loadPyodide function.
390
+ *
391
+ * First checks for a global loadPyodide (browser script tag include),
392
+ * then falls back to dynamic import of the 'pyodide' module.
393
+ */
394
+ async resolveLoadPyodide() {
395
+ // Check for global loadPyodide (browser script tag)
396
+ const g = globalThis;
397
+ if (typeof g.loadPyodide === 'function') {
398
+ return g.loadPyodide;
399
+ }
400
+ // Try dynamic import
401
+ try {
402
+ const mod = (await import('pyodide'));
403
+ if (typeof mod.loadPyodide === 'function') {
404
+ return mod.loadPyodide;
405
+ }
406
+ }
407
+ catch {
408
+ // Pyodide module not available
409
+ // This is expected in most environments
410
+ }
411
+ return undefined;
412
+ }
413
+ /**
414
+ * Bootstrap the Python dispatch function.
415
+ */
416
+ async bootstrapDispatcher() {
417
+ if (!this.py) {
418
+ return;
419
+ }
420
+ await this.py.runPythonAsync(BOOTSTRAP_PYTHON);
421
+ }
422
+ /**
423
+ * Parse a JSON response and extract the result or throw an error.
424
+ */
425
+ parseResponse(responseJson) {
426
+ const response = JSON.parse(responseJson);
427
+ if (response.error) {
428
+ const err = new BridgeExecutionError(`${response.error.type}: ${response.error.message}`, {
429
+ code: response.error.type,
430
+ });
431
+ err.traceback = response.error.traceback;
432
+ throw err;
433
+ }
434
+ return response.result;
435
+ }
436
+ /**
437
+ * Generate a unique message ID.
438
+ */
439
+ generateId() {
440
+ return ++this.requestId;
441
+ }
442
+ /**
443
+ * Safely destroy a Pyodide proxy object.
444
+ *
445
+ * Pyodide proxy objects must be explicitly destroyed to prevent memory leaks.
446
+ * This method checks if the value has a destroy method and calls it.
447
+ */
448
+ destroyPyProxy(value) {
449
+ if (value && typeof value.destroy === 'function') {
450
+ try {
451
+ value.destroy();
452
+ }
453
+ catch {
454
+ // Ignore cleanup failures
455
+ }
456
+ }
457
+ }
458
+ }
459
+ //# sourceMappingURL=pyodide-io.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"pyodide-io.js","sourceRoot":"","sources":["../../src/runtime/pyodide-io.ts"],"names":[],"mappings":"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"}