@nonstrict/recordkit 0.2.0 → 0.2.1

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.
@@ -7,4 +7,3 @@ export declare class IpcRecordKit {
7
7
  initialize(recordKitRpcPath: string, logMessages?: boolean): Promise<void>;
8
8
  private write;
9
9
  }
10
- //# sourceMappingURL=IpcRecordKit.d.ts.map
@@ -2,8 +2,10 @@ import { spawn } from 'node:child_process';
2
2
  import * as readline from 'readline';
3
3
  import { NSRPC } from "./NonstrictRPC.js";
4
4
  export class IpcRecordKit {
5
+ logMessages = false;
6
+ childProcess;
7
+ nsrpc;
5
8
  constructor() {
6
- this.logMessages = false;
7
9
  this.nsrpc = new NSRPC((message) => this.write(message));
8
10
  }
9
11
  async initialize(recordKitRpcPath, logMessages = false) {
@@ -37,4 +37,3 @@ export declare class NSRPC {
37
37
  }): string;
38
38
  }
39
39
  export {};
40
- //# sourceMappingURL=NonstrictRPC.d.ts.map
@@ -1,9 +1,10 @@
1
1
  import { randomUUID } from "crypto";
2
2
  import { finalizationRegistry } from "./finalizationRegistry.js";
3
3
  export class NSRPC {
4
+ send;
5
+ responseHandlers = new Map();
6
+ closureTargets = new Map();
4
7
  constructor(send) {
5
- this.responseHandlers = new Map();
6
- this.closureTargets = new Map();
7
8
  this.send = send;
8
9
  }
9
10
  receive(data) {
@@ -15,7 +15,7 @@ interface Camera {
15
15
  availability: DeviceAvailability;
16
16
  }
17
17
  type Microphone = Camera;
18
- type DeviceAvailability = 'available' | 'lidClosed' | 'notConnected' | 'unknownSuspended';
18
+ type DeviceAvailability = 'available' | 'lidClosed' | 'unknownSuspended';
19
19
  interface Bounds {
20
20
  x: number;
21
21
  y: number;
@@ -32,4 +32,3 @@ declare class RecordKit {
32
32
  }
33
33
  export declare let recordkit: RecordKit;
34
34
  export {};
35
- //# sourceMappingURL=RecordKit.d.ts.map
package/dist/RecordKit.js CHANGED
@@ -1,9 +1,7 @@
1
1
  import { IpcRecordKit } from "./IpcRecordKit.js";
2
2
  import { RecordingSession } from "./RecordingSession.js";
3
3
  class RecordKit {
4
- constructor() {
5
- this.ipcRecordKit = new IpcRecordKit();
6
- }
4
+ ipcRecordKit = new IpcRecordKit();
7
5
  async initialize(rpcBinaryPath, logRpcMessages = false) {
8
6
  console.log('Initializing with path:', rpcBinaryPath);
9
7
  return this.ipcRecordKit.initialize(rpcBinaryPath, logRpcMessages);
@@ -12,10 +10,10 @@ class RecordKit {
12
10
  return await this.ipcRecordKit.nsrpc.perform({ type: 'RecordingSession', action: 'getWindows' });
13
11
  }
14
12
  async getCameras() {
15
- return await this.ipcRecordKit.nsrpc.perform({ type: 'RecordingSession', action: 'getVideoDevices' });
13
+ return await this.ipcRecordKit.nsrpc.perform({ type: 'RecordingSession', action: 'getCameras' });
16
14
  }
17
15
  async getMicrophones() {
18
- return await this.ipcRecordKit.nsrpc.perform({ type: 'RecordingSession', action: 'getAudioDevices' });
16
+ return await this.ipcRecordKit.nsrpc.perform({ type: 'RecordingSession', action: 'getMicrophones' });
19
17
  }
20
18
  async createSession(schema) {
21
19
  return RecordingSession.newInstance(this.ipcRecordKit.nsrpc, schema);
@@ -68,4 +68,3 @@ export declare class RecordingSession extends EventEmitter {
68
68
  start(): Promise<void>;
69
69
  stop(): Promise<RecordingResult>;
70
70
  }
71
- //# sourceMappingURL=RecordingSession.d.ts.map
@@ -1,6 +1,8 @@
1
1
  import { randomUUID } from "crypto";
2
2
  import { EventEmitter } from "stream";
3
3
  export class RecordingSession extends EventEmitter {
4
+ rpc;
5
+ target;
4
6
  static async newInstance(rpc, schema) {
5
7
  const target = 'RecordingSession_' + randomUUID();
6
8
  const object = new RecordingSession(rpc, target);
@@ -1,4 +1,3 @@
1
1
  type Destructor = () => void;
2
2
  export declare const finalizationRegistry: FinalizationRegistry<Destructor>;
3
3
  export {};
4
- //# sourceMappingURL=finalizationRegistry.d.ts.map
package/dist/index.cjs ADDED
@@ -0,0 +1,281 @@
1
+ 'use strict';
2
+
3
+ var node_child_process = require('node:child_process');
4
+ var readline = require('readline');
5
+ var crypto = require('crypto');
6
+ var stream = require('stream');
7
+
8
+ function _interopNamespaceDefault(e) {
9
+ var n = Object.create(null);
10
+ if (e) {
11
+ Object.keys(e).forEach(function (k) {
12
+ if (k !== 'default') {
13
+ var d = Object.getOwnPropertyDescriptor(e, k);
14
+ Object.defineProperty(n, k, d.get ? d : {
15
+ enumerable: true,
16
+ get: function () { return e[k]; }
17
+ });
18
+ }
19
+ });
20
+ }
21
+ n.default = e;
22
+ return Object.freeze(n);
23
+ }
24
+
25
+ var readline__namespace = /*#__PURE__*/_interopNamespaceDefault(readline);
26
+
27
+ const finalizationRegistry = new FinalizationRegistry(async (destructor) => { await destructor(); });
28
+
29
+ class NSRPC {
30
+ send;
31
+ responseHandlers = new Map();
32
+ closureTargets = new Map();
33
+ constructor(send) {
34
+ this.send = send;
35
+ }
36
+ receive(data) {
37
+ // TODO: For now we just assume the message is a valid NSRPC message, but we should:
38
+ // - Handle invalid JSON comming in
39
+ // - Check if the nsrpc property is set to a number in the range of 1..<2
40
+ // - Validate the message against the defined interfaces above
41
+ const message = JSON.parse(data);
42
+ if ("status" in message) {
43
+ // This is a response, dispatch it so it can be handled
44
+ const responseHandler = this.responseHandlers.get(message.id);
45
+ this.responseHandlers.delete(message.id);
46
+ if (responseHandler === undefined) {
47
+ // TODO: Got a response for a request we don't know about, log this
48
+ return;
49
+ }
50
+ if ("error" in message) {
51
+ responseHandler.reject(message.error);
52
+ }
53
+ else {
54
+ responseHandler.resolve(message.result);
55
+ }
56
+ }
57
+ else {
58
+ // This is a request
59
+ const responseBody = this.handleRequest(message);
60
+ if (responseBody !== undefined) {
61
+ this.sendResponse(message.id, responseBody);
62
+ }
63
+ }
64
+ }
65
+ /* Sending helpers */
66
+ sendMessage(message) {
67
+ this.send(JSON.stringify(message));
68
+ }
69
+ sendResponse(id, response) {
70
+ if (id === undefined) {
71
+ return;
72
+ }
73
+ this.sendMessage({ ...response, nsrpc: 1, id });
74
+ }
75
+ async sendRequest(request) {
76
+ const id = "req_" + crypto.randomUUID();
77
+ const response = new Promise((resolve, reject) => {
78
+ this.responseHandlers.set(id, { resolve, reject });
79
+ });
80
+ this.sendMessage({ ...request, nsrpc: 1, id });
81
+ return response;
82
+ }
83
+ /* Request handling */
84
+ handleRequest(request) {
85
+ switch (request.procedure) {
86
+ case "init":
87
+ return {
88
+ status: 501,
89
+ error: {
90
+ debugDescription: "Init procedure not implemented.",
91
+ userMessage: "Failed to communicate with external process. (Procedure not implemented)",
92
+ },
93
+ };
94
+ case "perform":
95
+ if ("action" in request) {
96
+ return {
97
+ status: 501,
98
+ error: {
99
+ debugDescription: "Perform procedure for (static) methods not implemented.",
100
+ userMessage: "Failed to communicate with external process. (Procedure not implemented)",
101
+ },
102
+ };
103
+ }
104
+ else {
105
+ return this.handleClosureRequest(request);
106
+ }
107
+ case "release":
108
+ return {
109
+ status: 501,
110
+ error: {
111
+ debugDescription: "Release procedure not implemented.",
112
+ userMessage: "Failed to communicate with external process. (Procedure not implemented)",
113
+ },
114
+ };
115
+ }
116
+ }
117
+ handleClosureRequest(request) {
118
+ const handler = this.closureTargets.get(request.target);
119
+ if (handler === undefined) {
120
+ return {
121
+ status: 404,
122
+ error: {
123
+ debugDescription: `Perform target '${request.target}' not found.`,
124
+ userMessage: "Failed to communicate with external process. (Target not found)",
125
+ },
126
+ };
127
+ }
128
+ try {
129
+ const rawresult = handler(request.params ?? {});
130
+ const result = rawresult === undefined ? undefined : rawresult;
131
+ return {
132
+ status: 200,
133
+ result,
134
+ };
135
+ }
136
+ catch (error) {
137
+ return {
138
+ status: 202,
139
+ // TODO: Would be good to have an error type that we can throw that fills these fields more specifically. (But for now it doesn't matter since this is just communicated back the the CLI and not to the user.)
140
+ error: {
141
+ debugDescription: `${error}`,
142
+ userMessage: "Handler failed to perform request.",
143
+ underlyingError: error,
144
+ },
145
+ };
146
+ }
147
+ }
148
+ /* Perform remote procedures */
149
+ async initialize(args) {
150
+ const target = args.target;
151
+ finalizationRegistry.register(args.lifecycle, async () => {
152
+ await this.release(target);
153
+ });
154
+ await this.sendRequest({
155
+ target: args.target,
156
+ type: args.type,
157
+ params: args.params,
158
+ procedure: "init",
159
+ });
160
+ }
161
+ async perform(body) {
162
+ return await this.sendRequest({
163
+ ...body,
164
+ procedure: "perform",
165
+ });
166
+ }
167
+ async release(target) {
168
+ await this.sendRequest({
169
+ procedure: "release",
170
+ target,
171
+ });
172
+ }
173
+ /* Register locally available targets/actions */
174
+ registerClosure(options) {
175
+ const target = `target_${options.prefix}_${crypto.randomUUID()}`;
176
+ this.closureTargets.set(target, options.handler);
177
+ finalizationRegistry.register(options.lifecycle, () => {
178
+ this.closureTargets.delete(target);
179
+ });
180
+ return target;
181
+ }
182
+ }
183
+
184
+ class IpcRecordKit {
185
+ logMessages = false;
186
+ childProcess;
187
+ nsrpc;
188
+ constructor() {
189
+ this.nsrpc = new NSRPC((message) => this.write(message));
190
+ }
191
+ async initialize(recordKitRpcPath, logMessages = false) {
192
+ if (this.childProcess !== undefined) {
193
+ throw new Error('RecordKit RPC: Already initialized.');
194
+ }
195
+ this.logMessages = logMessages;
196
+ this.childProcess = await new Promise((resolve, reject) => {
197
+ const childProcess = node_child_process.spawn(recordKitRpcPath);
198
+ childProcess.on('spawn', () => { resolve(childProcess); });
199
+ childProcess.on('error', (error) => { reject(error); });
200
+ });
201
+ const { stdout } = this.childProcess;
202
+ if (!stdout) {
203
+ throw new Error('RecordKit RPC: No stdout stream on child process.');
204
+ }
205
+ readline__namespace.createInterface({ input: stdout }).on('line', (line) => {
206
+ if (logMessages) {
207
+ console.log("< ", line.trimEnd());
208
+ }
209
+ this.nsrpc.receive(line);
210
+ });
211
+ }
212
+ write(message) {
213
+ const stdin = this.childProcess?.stdin;
214
+ if (!stdin) {
215
+ throw new Error('RecordKit RPC: Missing stdin stream.');
216
+ }
217
+ if (this.logMessages) {
218
+ console.log("> ", message);
219
+ }
220
+ stdin.write(message + "\n");
221
+ }
222
+ }
223
+
224
+ class RecordingSession extends stream.EventEmitter {
225
+ rpc;
226
+ target;
227
+ static async newInstance(rpc, schema) {
228
+ const target = 'RecordingSession_' + crypto.randomUUID();
229
+ const object = new RecordingSession(rpc, target);
230
+ const weakRefObject = new WeakRef(object);
231
+ const onAbortInstance = rpc.registerClosure({
232
+ handler: (params) => { weakRefObject.deref()?.emit('abort', params.reason); },
233
+ prefix: 'RecordingSession.onAbort',
234
+ lifecycle: object
235
+ });
236
+ await rpc.initialize({
237
+ target,
238
+ type: 'RecordingSession',
239
+ params: { schema, onAbortInstance },
240
+ lifecycle: object
241
+ });
242
+ return object;
243
+ }
244
+ constructor(rpc, target) {
245
+ super();
246
+ this.rpc = rpc;
247
+ this.target = target;
248
+ }
249
+ async prepare() {
250
+ await this.rpc.perform({ target: this.target, action: 'prepare' });
251
+ }
252
+ async start() {
253
+ await this.rpc.perform({ target: this.target, action: 'start' });
254
+ }
255
+ async stop() {
256
+ return await this.rpc.perform({ target: this.target, action: 'stop' });
257
+ }
258
+ }
259
+
260
+ class RecordKit {
261
+ ipcRecordKit = new IpcRecordKit();
262
+ async initialize(rpcBinaryPath, logRpcMessages = false) {
263
+ console.log('Initializing with path:', rpcBinaryPath);
264
+ return this.ipcRecordKit.initialize(rpcBinaryPath, logRpcMessages);
265
+ }
266
+ async getWindows() {
267
+ return await this.ipcRecordKit.nsrpc.perform({ type: 'RecordingSession', action: 'getWindows' });
268
+ }
269
+ async getCameras() {
270
+ return await this.ipcRecordKit.nsrpc.perform({ type: 'RecordingSession', action: 'getCameras' });
271
+ }
272
+ async getMicrophones() {
273
+ return await this.ipcRecordKit.nsrpc.perform({ type: 'RecordingSession', action: 'getMicrophones' });
274
+ }
275
+ async createSession(schema) {
276
+ return RecordingSession.newInstance(this.ipcRecordKit.nsrpc, schema);
277
+ }
278
+ }
279
+ let recordkit = new RecordKit();
280
+
281
+ exports.recordkit = recordkit;
package/dist/index.d.ts CHANGED
@@ -1,2 +1 @@
1
1
  export { recordkit } from './RecordKit.js';
2
- //# sourceMappingURL=index.d.ts.map
package/package.json CHANGED
@@ -1,10 +1,14 @@
1
1
  {
2
2
  "name": "@nonstrict/recordkit",
3
- "version": "0.2.0",
3
+ "version": "0.2.1",
4
4
  "description": "RecordKit gives you hassle-free recording in Electron apps on macOS.",
5
5
  "type": "module",
6
6
  "main": "dist/index.js",
7
7
  "types": "dist/index.d.ts",
8
+ "exports": {
9
+ "import": "./dist/index.js",
10
+ "require": "./dist/index.cjs"
11
+ },
8
12
  "files": [
9
13
  "dist"
10
14
  ],
@@ -13,9 +17,8 @@
13
17
  },
14
18
  "scripts": {
15
19
  "test": "jest",
16
- "build": "tsc",
17
- "clean": "rm -rf dist",
18
- "prepublish": "npm run clean && npm run build"
20
+ "build": "rm -rf dist && tsc && rollup -c",
21
+ "prepublish": "npm run build"
19
22
  },
20
23
  "keywords": [
21
24
  "recording",
@@ -38,6 +41,7 @@
38
41
  "@types/jest": "^29.5.12",
39
42
  "@types/node": "18.19.1",
40
43
  "jest": "^29.7.0",
44
+ "rollup": "^4.12.0",
41
45
  "ts-jest": "^29.1.2",
42
46
  "typescript": "^5.3.3"
43
47
  },
@@ -1 +0,0 @@
1
- {"version":3,"file":"IpcRecordKit.d.ts","sourceRoot":"","sources":["../src/IpcRecordKit.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,KAAK,EAAE,MAAM,mBAAmB,CAAC;AAE1C,qBAAa,YAAY;IACrB,OAAO,CAAC,WAAW,CAAkB;IACrC,OAAO,CAAC,YAAY,CAAC,CAAe;IACpC,QAAQ,CAAC,KAAK,EAAE,KAAK,CAAC;;IAMhB,UAAU,CAAC,gBAAgB,EAAE,MAAM,EAAE,WAAW,GAAE,OAAe,GAAG,OAAO,CAAC,IAAI,CAAC;IAsBvF,OAAO,CAAC,KAAK;CAUhB"}
@@ -1 +0,0 @@
1
- {"version":3,"file":"NonstrictRPC.d.ts","sourceRoot":"","sources":["../src/NonstrictRPC.ts"],"names":[],"mappings":"AAyCA,MAAM,WAAW,0BAA0B;IACzC,KAAK,EAAE,MAAM,CAAC;IACd,EAAE,CAAC,EAAE,MAAM,CAAC;IACZ,SAAS,EAAE,SAAS,CAAC;IACrB,MAAM,EAAE,MAAM,CAAC;IACf,MAAM,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;CAClC;AA6DD,KAAK,aAAa,GAAG,CACnB,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,KAC5B,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,IAAI,CAAC;AAEpC,qBAAa,KAAK;IAChB,OAAO,CAAC,QAAQ,CAAC,IAAI,CAAyB;IAE9C,OAAO,CAAC,gBAAgB,CAAyC;IACjE,OAAO,CAAC,cAAc,CAAyC;gBAEnD,IAAI,EAAE,CAAC,IAAI,EAAE,MAAM,KAAK,IAAI;IAIxC,OAAO,CAAC,IAAI,EAAE,MAAM;IA+BpB,OAAO,CAAC,WAAW;IAInB,OAAO,CAAC,YAAY;YAON,WAAW;IAezB,OAAO,CAAC,aAAa;IAqCrB,OAAO,CAAC,oBAAoB;IAqCtB,UAAU,CAAC,IAAI,EAAE;QACrB,MAAM,EAAE,MAAM,CAAC;QACf,IAAI,EAAE,MAAM,CAAC;QACb,MAAM,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;QACjC,SAAS,EAAE,MAAM,CAAC;KACnB;IAcK,OAAO,CAAC,IAAI,EAAE;QAClB,IAAI,CAAC,EAAE,MAAM,CAAC;QACd,MAAM,CAAC,EAAE,MAAM,CAAC;QAChB,MAAM,CAAC,EAAE,MAAM,CAAC;QAChB,MAAM,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;KAClC,GAAG,OAAO,CAAC,OAAO,CAAC;YAON,OAAO;IASrB,eAAe,CAAC,OAAO,EAAE;QACvB,OAAO,EAAE,aAAa,CAAC;QACvB,SAAS,EAAE,MAAM,CAAC;QAClB,MAAM,EAAE,MAAM,CAAC;KAChB,GAAG,MAAM;CAUX"}
@@ -1 +0,0 @@
1
- {"version":3,"file":"RecordKit.d.ts","sourceRoot":"","sources":["../src/RecordKit.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,gBAAgB,EAAE,eAAe,EAAe,MAAM,uBAAuB,CAAC;AAEvF,UAAU,MAAM;IACZ,EAAE,EAAE,MAAM,CAAC;IACX,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,KAAK,EAAE,MAAM,CAAA;IACb,KAAK,EAAE,MAAM,CAAA;IACb,oBAAoB,CAAC,EAAE,MAAM,CAAA;IAC7B,eAAe,CAAC,EAAE,MAAM,CAAA;CAC3B;AAED,UAAU,MAAM;IACZ,EAAE,EAAE,MAAM,CAAC;IACX,aAAa,EAAE,MAAM,CAAC;IACtB,OAAO,EAAE,MAAM,CAAC;IAChB,YAAY,EAAE,MAAM,CAAC;IACrB,YAAY,EAAE,kBAAkB,CAAA;CACnC;AAED,KAAK,UAAU,GAAG,MAAM,CAAA;AAExB,KAAK,kBAAkB,GAAG,WAAW,GAAG,WAAW,GAAG,cAAc,GAAG,kBAAkB,CAAA;AAEzF,UAAU,MAAM;IACZ,CAAC,EAAE,MAAM,CAAC;IACV,CAAC,EAAE,MAAM,CAAC;IACV,KAAK,EAAE,MAAM,CAAC;IACd,MAAM,EAAE,MAAM,CAAC;CAClB;AAED,cAAM,SAAS;IACX,OAAO,CAAC,YAAY,CAAqB;IAEnC,UAAU,CAAC,aAAa,EAAE,MAAM,EAAE,cAAc,GAAE,OAAe,GAAG,OAAO,CAAC,IAAI,CAAC;IAKjF,UAAU,IAAI,OAAO,CAAC,MAAM,EAAE,CAAC;IAI/B,UAAU,IAAI,OAAO,CAAC,MAAM,EAAE,CAAC;IAI/B,cAAc,IAAI,OAAO,CAAC,UAAU,EAAE,CAAC;IAIvC,aAAa,CAAC,MAAM,EAAE,eAAe,GAAG,OAAO,CAAC,gBAAgB,CAAC;CAG1E;AAED,eAAO,IAAI,SAAS,WAAkB,CAAC"}
@@ -1 +0,0 @@
1
- {"version":3,"file":"RecordingSession.d.ts","sourceRoot":"","sources":["../src/RecordingSession.ts"],"names":[],"mappings":";;AAEA,OAAO,EAAE,KAAK,EAAE,MAAM,mBAAmB,CAAC;AAC1C,OAAO,EAAE,YAAY,EAAE,MAAM,QAAQ,CAAC;AAEtC,MAAM,WAAW,eAAe;IAC5B,eAAe,CAAC,EAAE,MAAM,CAAA;IACxB,SAAS,EAAE,QAAQ,EAAE,CAAA;CACxB;AAED,MAAM,MAAM,QAAQ,GAChB,uBAAuB,GACvB,aAAa,CAAA;AAEjB,MAAM,WAAW,aAAa;IAC1B,IAAI,EAAE,OAAO,CAAA;IACb,QAAQ,CAAC,EAAE,MAAM,CAAA;IACjB,YAAY,EAAE,MAAM,CAAA;IACpB,QAAQ,EAAE,MAAM,CAAA;CACnB;AAED,MAAM,WAAW,uBAAuB;IACpC,IAAI,EAAE,iBAAiB,CAAA;IACvB,QAAQ,CAAC,EAAE,MAAM,CAAA;IACjB,QAAQ,EAAE,MAAM,CAAA;IAEhB,eAAe,CAAC,EAAE,MAAM,CAAA;IACxB,UAAU,CAAC,EAAE,MAAM,CAAA;CACtB;AAED,MAAM,MAAM,WAAW,GACnB;IAAE,MAAM,EAAE,aAAa,CAAC;IAAC,MAAM,EAAE,eAAe,CAAC;CAAE,GACnD;IAAE,MAAM,EAAE,aAAa,CAAC;IAAC,MAAM,EAAE,eAAe,CAAC;IAAC,KAAK,EAAE,OAAO,CAAC;CAAE,GACnE;IAAE,MAAM,EAAE,QAAQ,CAAC;IAAC,KAAK,EAAE,OAAO,CAAC;CAAE,CAAA;AAEzC,MAAM,WAAW,eAAe;IAC5B,GAAG,EAAE,MAAM,CAAA;IACX,IAAI,EAAE,YAAY,CAAA;CACrB;AAED,MAAM,WAAW,OAAO;IACpB,UAAU,EAAE,MAAM,CAAA;IAClB,gBAAgB,EAAE,MAAM,CAAA;IACxB,WAAW,CAAC,EAAE,MAAM,CAAA;CACvB;AAED,MAAM,WAAW,YAAY;IACzB,KAAK,EAAE;QAAE,IAAI,EAAE,OAAO,CAAC;QAAC,QAAQ,EAAE,MAAM,CAAC;QAAC,MAAM,EAAE,MAAM,CAAA;KAAE,EAAE,CAAA;IAC5D,UAAU,EAAE,WAAW,EAAE,CAAA;CAC5B;AAED,MAAM,WAAW,MAAM;IACnB,KAAK,EAAE,MAAM,CAAA;IACb,SAAS,EAAE,MAAM,CAAA;IACjB,KAAK,EAAE,MAAM,CAAA;IACb,KAAK,EAAE,MAAM,CAAA;IACb,OAAO,EAAE,MAAM,CAAA;CAClB;AAED,MAAM,WAAW,WAAW;IACxB,KAAK,EAAE,MAAM,CAAA;IACb,QAAQ,EAAE,MAAM,CAAA;CACnB;AAED,qBAAa,gBAAiB,SAAQ,YAAY;IAC9C,OAAO,CAAC,QAAQ,CAAC,GAAG,CAAQ;IAC5B,OAAO,CAAC,QAAQ,CAAC,MAAM,CAAS;WAEnB,WAAW,CAAC,GAAG,EAAE,KAAK,EAAE,MAAM,EAAE,eAAe,GAAG,OAAO,CAAC,gBAAgB,CAAC;gBAqB5E,GAAG,EAAE,KAAK,EAAE,MAAM,EAAE,MAAM;IAMhC,OAAO,IAAI,OAAO,CAAC,IAAI,CAAC;IAIxB,KAAK,IAAI,OAAO,CAAC,IAAI,CAAC;IAItB,IAAI,IAAI,OAAO,CAAC,eAAe,CAAC;CAGzC"}
@@ -1 +0,0 @@
1
- {"version":3,"file":"finalizationRegistry.d.ts","sourceRoot":"","sources":["../src/finalizationRegistry.ts"],"names":[],"mappings":"AAAA,KAAK,UAAU,GAAG,MAAM,IAAI,CAAA;AAC5B,eAAO,MAAM,oBAAoB,kCAAqF,CAAA"}
@@ -1 +0,0 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAE,MAAM,gBAAgB,CAAC"}