@ts-runtypes/devtools 0.12.1 → 0.12.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.
@@ -0,0 +1,13 @@
1
+ import { type PluginOptions } from '../unplugin.ts';
2
+ export interface NextOptions extends PluginOptions {
3
+ socketPath?: string;
4
+ }
5
+ export interface BrokerHandle {
6
+ owner: boolean;
7
+ socketPath: string;
8
+ close: () => Promise<void>;
9
+ }
10
+ export declare function socketPathFor(root: string, pid?: number): string;
11
+ export declare function ownsBroker(): boolean;
12
+ export declare function startBroker(root: string, options?: NextOptions): Promise<BrokerHandle>;
13
+ //# sourceMappingURL=broker.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"broker.d.ts","sourceRoot":"","sources":["../../src/next/broker.ts"],"names":[],"mappings":"AAqCA,OAAO,EAAW,KAAK,aAAa,EAAC,MAAM,gBAAgB,CAAC;AAuB5D,MAAM,WAAW,WAAY,SAAQ,aAAa;IAGhD,UAAU,CAAC,EAAE,MAAM,CAAC;CACrB;AAED,MAAM,WAAW,YAAY;IAE3B,KAAK,EAAE,OAAO,CAAC;IACf,UAAU,EAAE,MAAM,CAAC;IAEnB,KAAK,EAAE,MAAM,OAAO,CAAC,IAAI,CAAC,CAAC;CAC5B;AAqBD,wBAAgB,aAAa,CAAC,IAAI,EAAE,MAAM,EAAE,GAAG,GAAE,MAAoB,GAAG,MAAM,CAI7E;AAOD,wBAAgB,UAAU,IAAI,OAAO,CAEpC;AAMD,wBAAsB,WAAW,CAAC,IAAI,EAAE,MAAM,EAAE,OAAO,GAAE,WAAgB,GAAG,OAAO,CAAC,YAAY,CAAC,CAoShG"}
@@ -0,0 +1,264 @@
1
+ import fs from 'node:fs';
2
+ import net from 'node:net';
3
+ import os from 'node:os';
4
+ import path from 'node:path';
5
+ import { createHash } from 'node:crypto';
6
+ import { unplugin } from "../unplugin.js";
7
+ import { createLineReader } from "./wire.js";
8
+ const STAMP_THROTTLE_MS = 100;
9
+ const WATCH_DEBOUNCE_MS = 30;
10
+ const debugEnabled = process.env.RT_NEXT_DEBUG === '1';
11
+ function debug(message) {
12
+ if (debugEnabled)
13
+ console.error(`[@ts-runtypes/devtools:next] ${message}`);
14
+ }
15
+ export function socketPathFor(root, pid = process.pid) {
16
+ const digest = createHash('sha256').update(path.resolve(root)).digest('hex').slice(0, 12);
17
+ if (process.platform === 'win32')
18
+ return `\\\\.\\pipe\\ts-runtypes-next-${digest}-${pid}`;
19
+ return path.join(os.tmpdir(), `ts-runtypes-next-${digest}-${pid}.sock`);
20
+ }
21
+ export function ownsBroker() {
22
+ return !/detached-flush|telemetry/.test(process.argv[1] ?? '');
23
+ }
24
+ export async function startBroker(root, options = {}) {
25
+ const rootAbs = path.resolve(root);
26
+ const socketPath = options.socketPath ?? socketPathFor(rootAbs);
27
+ const genDir = options.genDir ?? '__runtypes';
28
+ const genDirAbs = path.resolve(rootAbs, genDir);
29
+ const stampPath = path.join(genDirAbs, 'types', '.rt-stamp');
30
+ const server = net.createServer();
31
+ const listening = await new Promise((resolve, reject) => {
32
+ server.once('error', (error) => {
33
+ if (error.code === 'EADDRINUSE')
34
+ return resolve(false);
35
+ if (error.code === 'ECONNREFUSED' || error.code === 'ENOENT')
36
+ return resolve(false);
37
+ reject(error);
38
+ });
39
+ server.listen(socketPath, () => resolve(true));
40
+ });
41
+ if (!listening) {
42
+ if (await isLive(socketPath))
43
+ return { owner: false, socketPath, close: async () => { } };
44
+ await unlinkQuietly(socketPath);
45
+ return startBroker(rootAbs, options);
46
+ }
47
+ const { socketPath: _socketPath, ...pluginOptions } = options;
48
+ const rawPlugin = unplugin.raw({
49
+ ...pluginOptions,
50
+ cwd: rootAbs,
51
+ genDir,
52
+ detachResolver: true,
53
+ }, { framework: 'webpack' });
54
+ const built = (Array.isArray(rawPlugin) ? rawPlugin[0] : rawPlugin);
55
+ let collecting = null;
56
+ let collectingDeps = null;
57
+ const context = {
58
+ warn: (message) => {
59
+ const text = String(message);
60
+ if (collecting)
61
+ collecting.push(text);
62
+ else
63
+ console.warn(`[@ts-runtypes/devtools] ${text}`);
64
+ },
65
+ error: (message) => {
66
+ throw new Error(String(message));
67
+ },
68
+ addWatchFile: (file) => {
69
+ if (collectingDeps && typeof file === 'string')
70
+ collectingDeps.push(file);
71
+ },
72
+ };
73
+ let startupError;
74
+ const ready = (async () => {
75
+ await built.buildStart?.call(context);
76
+ })()
77
+ .then(() => {
78
+ debug(`buildStart done, ${countGenerated()} generated modules`);
79
+ refreshStamp(true);
80
+ startWatching();
81
+ })
82
+ .catch((error) => {
83
+ startupError = error;
84
+ });
85
+ function countGenerated() {
86
+ try {
87
+ return fs.readdirSync(path.join(genDirAbs, 'types')).filter((name) => name.endsWith('.js')).length;
88
+ }
89
+ catch {
90
+ return -1;
91
+ }
92
+ }
93
+ let lastStamp = '';
94
+ let lastStampAt = 0;
95
+ function refreshStamp(force = false) {
96
+ const now = Date.now();
97
+ if (!force && now - lastStampAt < STAMP_THROTTLE_MS)
98
+ return;
99
+ lastStampAt = now;
100
+ let listing;
101
+ try {
102
+ listing = fs.readdirSync(path.join(genDirAbs, 'types')).sort();
103
+ }
104
+ catch {
105
+ return;
106
+ }
107
+ const digest = createHash('sha256').update(listing.join('\n')).digest('hex').slice(0, 16);
108
+ if (digest === lastStamp)
109
+ return;
110
+ debug(`stamp ${lastStamp || '(none)'} -> ${digest} (${listing.length} entries)`);
111
+ lastStamp = digest;
112
+ try {
113
+ fs.writeFileSync(stampPath, `${digest}\n`);
114
+ }
115
+ catch {
116
+ }
117
+ }
118
+ let watcher = null;
119
+ const dirtyFiles = new Set();
120
+ let flushTimer = null;
121
+ let hotUpdate = Promise.resolve();
122
+ function scheduleFlush() {
123
+ if (flushTimer)
124
+ clearTimeout(flushTimer);
125
+ flushTimer = setTimeout(flushDirty, WATCH_DEBOUNCE_MS);
126
+ flushTimer.unref?.();
127
+ }
128
+ function flushDirty() {
129
+ if (dirtyFiles.size === 0)
130
+ return;
131
+ const batch = [...dirtyFiles];
132
+ dirtyFiles.clear();
133
+ const work = async () => {
134
+ await ready;
135
+ const read = await Promise.all(batch.map(async (file) => ({ file, content: await fs.promises.readFile(file, 'utf8').catch(() => undefined) })));
136
+ const updates = read.filter((update) => update.content !== undefined);
137
+ if (updates.length === 0)
138
+ return;
139
+ debug(`absorbing ${updates.length} edited file(s): ${updates.map((u) => path.relative(rootAbs, u.file)).join(', ')}`);
140
+ await built.rtHotUpdate?.(context, updates);
141
+ debug(`generated modules now: ${countGenerated()}`);
142
+ refreshStamp(true);
143
+ };
144
+ hotUpdate = hotUpdate.then(work).catch(() => {
145
+ });
146
+ }
147
+ function startWatching() {
148
+ if (watcher)
149
+ return;
150
+ try {
151
+ watcher = fs.watch(rootAbs, { recursive: true }, (_event, name) => {
152
+ if (!name)
153
+ return;
154
+ const file = path.join(rootAbs, name.toString());
155
+ if (file.startsWith(genDirAbs))
156
+ return;
157
+ if (file.includes(`${path.sep}node_modules${path.sep}`) || file.includes(`${path.sep}.next${path.sep}`))
158
+ return;
159
+ if (!/\.[mc]?[jt]sx?$/.test(file))
160
+ return;
161
+ debug(`watch: ${path.relative(rootAbs, file)}`);
162
+ dirtyFiles.add(file);
163
+ scheduleFlush();
164
+ });
165
+ watcher.unref?.();
166
+ }
167
+ catch {
168
+ }
169
+ }
170
+ let chain = Promise.resolve();
171
+ server.on('connection', (socket) => {
172
+ socket.on('error', () => { });
173
+ socket.on('data', createLineReader((line) => {
174
+ let request;
175
+ try {
176
+ request = JSON.parse(line);
177
+ }
178
+ catch {
179
+ return;
180
+ }
181
+ chain = chain.then(() => handle(request, socket));
182
+ }));
183
+ });
184
+ async function handle(request, socket) {
185
+ const warnings = [];
186
+ let reply;
187
+ try {
188
+ await ready;
189
+ if (startupError)
190
+ throw startupError;
191
+ await hotUpdate;
192
+ collecting = warnings;
193
+ const deps = [];
194
+ collectingDeps = deps;
195
+ const result = (await built.transform?.call(context, request.code, request.file));
196
+ collecting = null;
197
+ collectingDeps = null;
198
+ refreshStamp();
199
+ reply = {
200
+ id: request.id,
201
+ ok: true,
202
+ ...(result && typeof result.code === 'string' ? { code: result.code, map: result.map } : {}),
203
+ ...(warnings.length ? { warnings } : {}),
204
+ ...(deps.length ? { typeDeps: [...new Set(deps)].sort() } : {}),
205
+ stamp: stampPath,
206
+ };
207
+ }
208
+ catch (error) {
209
+ collecting = null;
210
+ collectingDeps = null;
211
+ reply = {
212
+ id: request.id,
213
+ ok: false,
214
+ error: String(error?.stack ?? error),
215
+ ...(warnings.length ? { warnings } : {}),
216
+ };
217
+ }
218
+ if (!socket.destroyed)
219
+ socket.write(`${JSON.stringify(reply)}\n`);
220
+ }
221
+ server.unref();
222
+ const cleanup = () => {
223
+ try {
224
+ if (process.platform !== 'win32')
225
+ fs.unlinkSync(socketPath);
226
+ }
227
+ catch {
228
+ }
229
+ };
230
+ process.once('exit', cleanup);
231
+ return {
232
+ owner: true,
233
+ socketPath,
234
+ close: async () => {
235
+ watcher?.close();
236
+ if (flushTimer)
237
+ clearTimeout(flushTimer);
238
+ await new Promise((resolve) => server.close(() => resolve()));
239
+ await unlinkQuietly(socketPath);
240
+ built.buildEnd?.call(context);
241
+ },
242
+ };
243
+ }
244
+ function isLive(socketPath) {
245
+ return new Promise((resolve) => {
246
+ const probe = net.connect(socketPath);
247
+ const settle = (live) => {
248
+ probe.destroy();
249
+ resolve(live);
250
+ };
251
+ probe.once('connect', () => settle(true));
252
+ probe.once('error', () => settle(false));
253
+ });
254
+ }
255
+ async function unlinkQuietly(target) {
256
+ if (process.platform === 'win32')
257
+ return;
258
+ try {
259
+ await fs.promises.unlink(target);
260
+ }
261
+ catch {
262
+ }
263
+ }
264
+ //# sourceMappingURL=broker.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"broker.js","sourceRoot":"","sources":["../../src/next/broker.ts"],"names":[],"mappings":"AAgCA,OAAO,EAAE,MAAM,SAAS,CAAC;AACzB,OAAO,GAAG,MAAM,UAAU,CAAC;AAC3B,OAAO,EAAE,MAAM,SAAS,CAAC;AACzB,OAAO,IAAI,MAAM,WAAW,CAAC;AAC7B,OAAO,EAAC,UAAU,EAAC,MAAM,aAAa,CAAC;AACvC,OAAO,EAAC,QAAQ,EAAqB,MAAM,gBAAgB,CAAC;AAC5D,OAAO,EAAC,gBAAgB,EAAuC,MAAM,WAAW,CAAC;AAKjF,MAAM,iBAAiB,GAAG,GAAG,CAAC;AAI9B,MAAM,iBAAiB,GAAG,EAAE,CAAC;AAK7B,MAAM,YAAY,GAAG,OAAO,CAAC,GAAG,CAAC,aAAa,KAAK,GAAG,CAAC;AACvD,SAAS,KAAK,CAAC,OAAe;IAC5B,IAAI,YAAY;QAAE,OAAO,CAAC,KAAK,CAAC,gCAAgC,OAAO,EAAE,CAAC,CAAC;AAC7E,CAAC;AAsCD,MAAM,UAAU,aAAa,CAAC,IAAY,EAAE,MAAc,OAAO,CAAC,GAAG;IACnE,MAAM,MAAM,GAAG,UAAU,CAAC,QAAQ,CAAC,CAAC,MAAM,CAAC,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,KAAK,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC;IAC1F,IAAI,OAAO,CAAC,QAAQ,KAAK,OAAO;QAAE,OAAO,iCAAiC,MAAM,IAAI,GAAG,EAAE,CAAC;IAC1F,OAAO,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC,MAAM,EAAE,EAAE,oBAAoB,MAAM,IAAI,GAAG,OAAO,CAAC,CAAC;AAC1E,CAAC;AAOD,MAAM,UAAU,UAAU;IACxB,OAAO,CAAC,0BAA0B,CAAC,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC,CAAC;AACjE,CAAC;AAMD,MAAM,CAAC,KAAK,UAAU,WAAW,CAAC,IAAY,EAAE,UAAuB,EAAE;IACvE,MAAM,OAAO,GAAG,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC;IACnC,MAAM,UAAU,GAAG,OAAO,CAAC,UAAU,IAAI,aAAa,CAAC,OAAO,CAAC,CAAC;IAOhE,MAAM,MAAM,GAAG,OAAO,CAAC,MAAM,IAAI,YAAY,CAAC;IAC9C,MAAM,SAAS,GAAG,IAAI,CAAC,OAAO,CAAC,OAAO,EAAE,MAAM,CAAC,CAAC;IAChD,MAAM,SAAS,GAAG,IAAI,CAAC,IAAI,CAAC,SAAS,EAAE,OAAO,EAAE,WAAW,CAAC,CAAC;IAE7D,MAAM,MAAM,GAAG,GAAG,CAAC,YAAY,EAAE,CAAC;IAClC,MAAM,SAAS,GAAG,MAAM,IAAI,OAAO,CAAU,CAAC,OAAO,EAAE,MAAM,EAAE,EAAE;QAC/D,MAAM,CAAC,IAAI,CAAC,OAAO,EAAE,CAAC,KAA4B,EAAE,EAAE;YACpD,IAAI,KAAK,CAAC,IAAI,KAAK,YAAY;gBAAE,OAAO,OAAO,CAAC,KAAK,CAAC,CAAC;YACvD,IAAI,KAAK,CAAC,IAAI,KAAK,cAAc,IAAI,KAAK,CAAC,IAAI,KAAK,QAAQ;gBAAE,OAAO,OAAO,CAAC,KAAK,CAAC,CAAC;YACpF,MAAM,CAAC,KAAK,CAAC,CAAC;QAChB,CAAC,CAAC,CAAC;QACH,MAAM,CAAC,MAAM,CAAC,UAAU,EAAE,GAAG,EAAE,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC;IACjD,CAAC,CAAC,CAAC;IAIH,IAAI,CAAC,SAAS,EAAE,CAAC;QACf,IAAI,MAAM,MAAM,CAAC,UAAU,CAAC;YAAE,OAAO,EAAC,KAAK,EAAE,KAAK,EAAE,UAAU,EAAE,KAAK,EAAE,KAAK,IAAI,EAAE,GAAE,CAAC,EAAC,CAAC;QACvF,MAAM,aAAa,CAAC,UAAU,CAAC,CAAC;QAChC,OAAO,WAAW,CAAC,OAAO,EAAE,OAAO,CAAC,CAAC;IACvC,CAAC;IAED,MAAM,EAAC,UAAU,EAAE,WAAW,EAAE,GAAG,aAAa,EAAC,GAAG,OAAO,CAAC;IAC5D,MAAM,SAAS,GAAG,QAAQ,CAAC,GAAG,CAC5B;QACE,GAAG,aAAa;QAChB,GAAG,EAAE,OAAO;QACZ,MAAM;QAIN,cAAc,EAAE,IAAI;KACrB,EACD,EAAC,SAAS,EAAE,SAAS,EAAC,CACvB,CAAC;IAGF,MAAM,KAAK,GAAG,CAAC,KAAK,CAAC,OAAO,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,SAAS,CAKjE,CAAC;IAKF,IAAI,UAAU,GAAoB,IAAI,CAAC;IAKvC,IAAI,cAAc,GAAoB,IAAI,CAAC;IAC3C,MAAM,OAAO,GAAG;QACd,IAAI,EAAE,CAAC,OAAgB,EAAE,EAAE;YACzB,MAAM,IAAI,GAAG,MAAM,CAAC,OAAO,CAAC,CAAC;YAC7B,IAAI,UAAU;gBAAE,UAAU,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;;gBACjC,OAAO,CAAC,IAAI,CAAC,2BAA2B,IAAI,EAAE,CAAC,CAAC;QACvD,CAAC;QACD,KAAK,EAAE,CAAC,OAAgB,EAAE,EAAE;YAC1B,MAAM,IAAI,KAAK,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC,CAAC;QACnC,CAAC;QACD,YAAY,EAAE,CAAC,IAAa,EAAE,EAAE;YAC9B,IAAI,cAAc,IAAI,OAAO,IAAI,KAAK,QAAQ;gBAAE,cAAc,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;QAC5E,CAAC;KACF,CAAC;IAEF,IAAI,YAAqB,CAAC;IAC1B,MAAM,KAAK,GAAG,CAAC,KAAK,IAAI,EAAE;QACxB,MAAM,KAAK,CAAC,UAAU,EAAE,IAAI,CAAC,OAAO,CAAC,CAAC;IACxC,CAAC,CAAC,EAAE;SACD,IAAI,CAAC,GAAG,EAAE;QACT,KAAK,CAAC,oBAAoB,cAAc,EAAE,oBAAoB,CAAC,CAAC;QAChE,YAAY,CAAC,IAAI,CAAC,CAAC;QACnB,aAAa,EAAE,CAAC;IAClB,CAAC,CAAC;SACD,KAAK,CAAC,CAAC,KAAK,EAAE,EAAE;QACf,YAAY,GAAG,KAAK,CAAC;IACvB,CAAC,CAAC,CAAC;IAcL,SAAS,cAAc;QACrB,IAAI,CAAC;YACH,OAAO,EAAE,CAAC,WAAW,CAAC,IAAI,CAAC,IAAI,CAAC,SAAS,EAAE,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,IAAI,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC,CAAC,MAAM,CAAC;QACrG,CAAC;QAAC,MAAM,CAAC;YACP,OAAO,CAAC,CAAC,CAAC;QACZ,CAAC;IACH,CAAC;IAED,IAAI,SAAS,GAAG,EAAE,CAAC;IACnB,IAAI,WAAW,GAAG,CAAC,CAAC;IACpB,SAAS,YAAY,CAAC,KAAK,GAAG,KAAK;QACjC,MAAM,GAAG,GAAG,IAAI,CAAC,GAAG,EAAE,CAAC;QACvB,IAAI,CAAC,KAAK,IAAI,GAAG,GAAG,WAAW,GAAG,iBAAiB;YAAE,OAAO;QAC5D,WAAW,GAAG,GAAG,CAAC;QAClB,IAAI,OAAiB,CAAC;QACtB,IAAI,CAAC;YACH,OAAO,GAAG,EAAE,CAAC,WAAW,CAAC,IAAI,CAAC,IAAI,CAAC,SAAS,EAAE,OAAO,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC;QACjE,CAAC;QAAC,MAAM,CAAC;YACP,OAAO;QACT,CAAC;QACD,MAAM,MAAM,GAAG,UAAU,CAAC,QAAQ,CAAC,CAAC,MAAM,CAAC,OAAO,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,KAAK,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC;QAC1F,IAAI,MAAM,KAAK,SAAS;YAAE,OAAO;QACjC,KAAK,CAAC,SAAS,SAAS,IAAI,QAAQ,OAAO,MAAM,KAAK,OAAO,CAAC,MAAM,WAAW,CAAC,CAAC;QACjF,SAAS,GAAG,MAAM,CAAC;QACnB,IAAI,CAAC;YACH,EAAE,CAAC,aAAa,CAAC,SAAS,EAAE,GAAG,MAAM,IAAI,CAAC,CAAC;QAC7C,CAAC;QAAC,MAAM,CAAC;QAET,CAAC;IACH,CAAC;IAcD,IAAI,OAAO,GAAwB,IAAI,CAAC;IACxC,MAAM,UAAU,GAAG,IAAI,GAAG,EAAU,CAAC;IACrC,IAAI,UAAU,GAA0B,IAAI,CAAC;IAG7C,IAAI,SAAS,GAAkB,OAAO,CAAC,OAAO,EAAE,CAAC;IAEjD,SAAS,aAAa;QACpB,IAAI,UAAU;YAAE,YAAY,CAAC,UAAU,CAAC,CAAC;QACzC,UAAU,GAAG,UAAU,CAAC,UAAU,EAAE,iBAAiB,CAAC,CAAC;QACvD,UAAU,CAAC,KAAK,EAAE,EAAE,CAAC;IACvB,CAAC;IAED,SAAS,UAAU;QACjB,IAAI,UAAU,CAAC,IAAI,KAAK,CAAC;YAAE,OAAO;QAClC,MAAM,KAAK,GAAG,CAAC,GAAG,UAAU,CAAC,CAAC;QAC9B,UAAU,CAAC,KAAK,EAAE,CAAC;QACnB,MAAM,IAAI,GAAG,KAAK,IAAI,EAAE;YACtB,MAAM,KAAK,CAAC;YACZ,MAAM,IAAI,GAAG,MAAM,OAAO,CAAC,GAAG,CAC5B,KAAK,CAAC,GAAG,CAAC,KAAK,EAAE,IAAI,EAAE,EAAE,CAAC,CAAC,EAAC,IAAI,EAAE,OAAO,EAAE,MAAM,EAAE,CAAC,QAAQ,CAAC,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC,CAAC,KAAK,CAAC,GAAG,EAAE,CAAC,SAAS,CAAC,EAAC,CAAC,CAAC,CAC9G,CAAC;YACF,MAAM,OAAO,GAAG,IAAI,CAAC,MAAM,CAAC,CAAC,MAAM,EAAE,EAAE,CAAC,MAAM,CAAC,OAAO,KAAK,SAAS,CAAC,CAAC;YACtE,IAAI,OAAO,CAAC,MAAM,KAAK,CAAC;gBAAE,OAAO;YACjC,KAAK,CAAC,aAAa,OAAO,CAAC,MAAM,oBAAoB,OAAO,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,IAAI,CAAC,QAAQ,CAAC,OAAO,EAAE,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;YACtH,MAAM,KAAK,CAAC,WAAW,EAAE,CAAC,OAAO,EAAE,OAAO,CAAC,CAAC;YAC5C,KAAK,CAAC,0BAA0B,cAAc,EAAE,EAAE,CAAC,CAAC;YACpD,YAAY,CAAC,IAAI,CAAC,CAAC;QACrB,CAAC,CAAC;QACF,SAAS,GAAG,SAAS,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,KAAK,CAAC,GAAG,EAAE;QAE5C,CAAC,CAAC,CAAC;IACL,CAAC;IAED,SAAS,aAAa;QACpB,IAAI,OAAO;YAAE,OAAO;QACpB,IAAI,CAAC;YACH,OAAO,GAAG,EAAE,CAAC,KAAK,CAAC,OAAO,EAAE,EAAC,SAAS,EAAE,IAAI,EAAC,EAAE,CAAC,MAAM,EAAE,IAAI,EAAE,EAAE;gBAC9D,IAAI,CAAC,IAAI;oBAAE,OAAO;gBAClB,MAAM,IAAI,GAAG,IAAI,CAAC,IAAI,CAAC,OAAO,EAAE,IAAI,CAAC,QAAQ,EAAE,CAAC,CAAC;gBAEjD,IAAI,IAAI,CAAC,UAAU,CAAC,SAAS,CAAC;oBAAE,OAAO;gBACvC,IAAI,IAAI,CAAC,QAAQ,CAAC,GAAG,IAAI,CAAC,GAAG,eAAe,IAAI,CAAC,GAAG,EAAE,CAAC,IAAI,IAAI,CAAC,QAAQ,CAAC,GAAG,IAAI,CAAC,GAAG,QAAQ,IAAI,CAAC,GAAG,EAAE,CAAC;oBAAE,OAAO;gBAChH,IAAI,CAAC,iBAAiB,CAAC,IAAI,CAAC,IAAI,CAAC;oBAAE,OAAO;gBAC1C,KAAK,CAAC,UAAU,IAAI,CAAC,QAAQ,CAAC,OAAO,EAAE,IAAI,CAAC,EAAE,CAAC,CAAC;gBAChD,UAAU,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC;gBACrB,aAAa,EAAE,CAAC;YAClB,CAAC,CAAC,CAAC;YACH,OAAO,CAAC,KAAK,EAAE,EAAE,CAAC;QACpB,CAAC;QAAC,MAAM,CAAC;QAGT,CAAC;IACH,CAAC;IAKD,IAAI,KAAK,GAAkB,OAAO,CAAC,OAAO,EAAE,CAAC;IAE7C,MAAM,CAAC,EAAE,CAAC,YAAY,EAAE,CAAC,MAAM,EAAE,EAAE;QACjC,MAAM,CAAC,EAAE,CAAC,OAAO,EAAE,GAAG,EAAE,GAAE,CAAC,CAAC,CAAC;QAC7B,MAAM,CAAC,EAAE,CACP,MAAM,EACN,gBAAgB,CAAC,CAAC,IAAI,EAAE,EAAE;YACxB,IAAI,OAAsB,CAAC;YAC3B,IAAI,CAAC;gBACH,OAAO,GAAG,IAAI,CAAC,KAAK,CAAC,IAAI,CAAkB,CAAC;YAC9C,CAAC;YAAC,MAAM,CAAC;gBACP,OAAO;YACT,CAAC;YACD,KAAK,GAAG,KAAK,CAAC,IAAI,CAAC,GAAG,EAAE,CAAC,MAAM,CAAC,OAAO,EAAE,MAAM,CAAC,CAAC,CAAC;QACpD,CAAC,CAAC,CACH,CAAC;IACJ,CAAC,CAAC,CAAC;IAEH,KAAK,UAAU,MAAM,CAAC,OAAsB,EAAE,MAAkB;QAC9D,MAAM,QAAQ,GAAa,EAAE,CAAC;QAC9B,IAAI,KAAkB,CAAC;QACvB,IAAI,CAAC;YACH,MAAM,KAAK,CAAC;YACZ,IAAI,YAAY;gBAAE,MAAM,YAAY,CAAC;YAGrC,MAAM,SAAS,CAAC;YAChB,UAAU,GAAG,QAAQ,CAAC;YACtB,MAAM,IAAI,GAAa,EAAE,CAAC;YAC1B,cAAc,GAAG,IAAI,CAAC;YACtB,MAAM,MAAM,GAAG,CAAC,MAAM,KAAK,CAAC,SAAS,EAAE,IAAI,CAAC,OAAO,EAAE,OAAO,CAAC,IAAI,EAAE,OAAO,CAAC,IAAI,CAAC,CAGnE,CAAC;YACd,UAAU,GAAG,IAAI,CAAC;YAClB,cAAc,GAAG,IAAI,CAAC;YACtB,YAAY,EAAE,CAAC;YACf,KAAK,GAAG;gBACN,EAAE,EAAE,OAAO,CAAC,EAAE;gBACd,EAAE,EAAE,IAAI;gBACR,GAAG,CAAC,MAAM,IAAI,OAAO,MAAM,CAAC,IAAI,KAAK,QAAQ,CAAC,CAAC,CAAC,EAAC,IAAI,EAAE,MAAM,CAAC,IAAI,EAAE,GAAG,EAAE,MAAM,CAAC,GAAG,EAAC,CAAC,CAAC,CAAC,EAAE,CAAC;gBAC1F,GAAG,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAC,CAAC,EAAC,QAAQ,EAAC,CAAC,CAAC,CAAC,EAAE,CAAC;gBACtC,GAAG,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC,EAAC,QAAQ,EAAE,CAAC,GAAG,IAAI,GAAG,CAAC,IAAI,CAAC,CAAC,CAAC,IAAI,EAAE,EAAC,CAAC,CAAC,CAAC,EAAE,CAAC;gBAM7D,KAAK,EAAE,SAAS;aACjB,CAAC;QACJ,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACf,UAAU,GAAG,IAAI,CAAC;YAClB,cAAc,GAAG,IAAI,CAAC;YACtB,KAAK,GAAG;gBACN,EAAE,EAAE,OAAO,CAAC,EAAE;gBACd,EAAE,EAAE,KAAK;gBACT,KAAK,EAAE,MAAM,CAAE,KAAe,EAAE,KAAK,IAAI,KAAK,CAAC;gBAC/C,GAAG,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAC,CAAC,EAAC,QAAQ,EAAC,CAAC,CAAC,CAAC,EAAE,CAAC;aACvC,CAAC;QACJ,CAAC;QACD,IAAI,CAAC,MAAM,CAAC,SAAS;YAAE,MAAM,CAAC,KAAK,CAAC,GAAG,IAAI,CAAC,SAAS,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;IACpE,CAAC;IAMD,MAAM,CAAC,KAAK,EAAE,CAAC;IAGf,MAAM,OAAO,GAAG,GAAG,EAAE;QACnB,IAAI,CAAC;YACH,IAAI,OAAO,CAAC,QAAQ,KAAK,OAAO;gBAAE,EAAE,CAAC,UAAU,CAAC,UAAU,CAAC,CAAC;QAC9D,CAAC;QAAC,MAAM,CAAC;QAET,CAAC;IACH,CAAC,CAAC;IACF,OAAO,CAAC,IAAI,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;IAE9B,OAAO;QACL,KAAK,EAAE,IAAI;QACX,UAAU;QACV,KAAK,EAAE,KAAK,IAAI,EAAE;YAChB,OAAO,EAAE,KAAK,EAAE,CAAC;YACjB,IAAI,UAAU;gBAAE,YAAY,CAAC,UAAU,CAAC,CAAC;YACzC,MAAM,IAAI,OAAO,CAAO,CAAC,OAAO,EAAE,EAAE,CAAC,MAAM,CAAC,KAAK,CAAC,GAAG,EAAE,CAAC,OAAO,EAAE,CAAC,CAAC,CAAC;YACpE,MAAM,aAAa,CAAC,UAAU,CAAC,CAAC;YAChC,KAAK,CAAC,QAAQ,EAAE,IAAI,CAAC,OAAO,CAAC,CAAC;QAChC,CAAC;KACF,CAAC;AACJ,CAAC;AAID,SAAS,MAAM,CAAC,UAAkB;IAChC,OAAO,IAAI,OAAO,CAAC,CAAC,OAAO,EAAE,EAAE;QAC7B,MAAM,KAAK,GAAG,GAAG,CAAC,OAAO,CAAC,UAAU,CAAC,CAAC;QACtC,MAAM,MAAM,GAAG,CAAC,IAAa,EAAE,EAAE;YAC/B,KAAK,CAAC,OAAO,EAAE,CAAC;YAChB,OAAO,CAAC,IAAI,CAAC,CAAC;QAChB,CAAC,CAAC;QACF,KAAK,CAAC,IAAI,CAAC,SAAS,EAAE,GAAG,EAAE,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC,CAAC;QAC1C,KAAK,CAAC,IAAI,CAAC,OAAO,EAAE,GAAG,EAAE,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,CAAC;IAC3C,CAAC,CAAC,CAAC;AACL,CAAC;AAED,KAAK,UAAU,aAAa,CAAC,MAAc;IACzC,IAAI,OAAO,CAAC,QAAQ,KAAK,OAAO;QAAE,OAAO;IACzC,IAAI,CAAC;QACH,MAAM,EAAE,CAAC,QAAQ,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC;IACnC,CAAC;IAAC,MAAM,CAAC;IAET,CAAC;AACH,CAAC"}
@@ -0,0 +1,29 @@
1
+ import { startBroker, socketPathFor, ownsBroker, type BrokerHandle, type NextOptions } from './broker.ts';
2
+ export { startBroker, socketPathFor, ownsBroker };
3
+ export type { BrokerHandle, NextOptions };
4
+ export declare const RUNTYPES_LOADER = "@ts-runtypes/devtools/next/loader";
5
+ interface TurbopackRule {
6
+ loaders: Array<string | {
7
+ loader: string;
8
+ options?: Record<string, unknown>;
9
+ }>;
10
+ condition?: unknown;
11
+ as?: string;
12
+ }
13
+ interface NextConfigLike {
14
+ turbopack?: {
15
+ rules?: Record<string, unknown>;
16
+ [key: string]: unknown;
17
+ };
18
+ webpack?: (config: WebpackConfigLike, context: unknown) => WebpackConfigLike;
19
+ [key: string]: unknown;
20
+ }
21
+ interface WebpackConfigLike {
22
+ plugins?: unknown[];
23
+ [key: string]: unknown;
24
+ }
25
+ export declare function runTypesTurbopackRules(socketPath: string): Record<string, TurbopackRule>;
26
+ export declare function isTurbopack(): boolean;
27
+ export declare function withRunTypes(nextConfig?: NextConfigLike, options?: NextOptions): Promise<NextConfigLike>;
28
+ export default withRunTypes;
29
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/next/index.ts"],"names":[],"mappings":"AAkBA,OAAO,EAAC,WAAW,EAAE,aAAa,EAAE,UAAU,EAAE,KAAK,YAAY,EAAE,KAAK,WAAW,EAAC,MAAM,aAAa,CAAC;AAExG,OAAO,EAAC,WAAW,EAAE,aAAa,EAAE,UAAU,EAAC,CAAC;AAChD,YAAY,EAAC,YAAY,EAAE,WAAW,EAAC,CAAC;AAGxC,eAAO,MAAM,eAAe,sCAAsC,CAAC;AASnE,UAAU,aAAa;IACrB,OAAO,EAAE,KAAK,CAAC,MAAM,GAAG;QAAC,MAAM,EAAE,MAAM,CAAC;QAAC,OAAO,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAA;KAAC,CAAC,CAAC;IAC7E,SAAS,CAAC,EAAE,OAAO,CAAC;IACpB,EAAE,CAAC,EAAE,MAAM,CAAC;CACb;AACD,UAAU,cAAc;IACtB,SAAS,CAAC,EAAE;QAAC,KAAK,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;QAAC,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAA;KAAC,CAAC;IACtE,OAAO,CAAC,EAAE,CAAC,MAAM,EAAE,iBAAiB,EAAE,OAAO,EAAE,OAAO,KAAK,iBAAiB,CAAC;IAC7E,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC;CACxB;AACD,UAAU,iBAAiB;IACzB,OAAO,CAAC,EAAE,OAAO,EAAE,CAAC;IACpB,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC;CACxB;AAGD,wBAAgB,sBAAsB,CAAC,UAAU,EAAE,MAAM,GAAG,MAAM,CAAC,MAAM,EAAE,aAAa,CAAC,CAQxF;AAKD,wBAAgB,WAAW,IAAI,OAAO,CAIrC;AAcD,wBAAsB,YAAY,CAAC,UAAU,GAAE,cAAmB,EAAE,OAAO,GAAE,WAAgB,GAAG,OAAO,CAAC,cAAc,CAAC,CAqBtH;AAuBD,eAAe,YAAY,CAAC"}
@@ -0,0 +1,53 @@
1
+ import { unplugin } from "../unplugin.js";
2
+ import { startBroker, socketPathFor, ownsBroker } from "./broker.js";
3
+ export { startBroker, socketPathFor, ownsBroker };
4
+ export const RUNTYPES_LOADER = '@ts-runtypes/devtools/next/loader';
5
+ const RULE_GLOBS = ['*.ts', '*.tsx', '*.mts', '*.cts'];
6
+ export function runTypesTurbopackRules(socketPath) {
7
+ const rule = {
8
+ loaders: [{ loader: RUNTYPES_LOADER, options: { socketPath } }],
9
+ condition: { not: 'foreign' },
10
+ };
11
+ return Object.fromEntries(RULE_GLOBS.map((glob) => [glob, rule]));
12
+ }
13
+ export function isTurbopack() {
14
+ if (process.env.TURBOPACK === '0')
15
+ return false;
16
+ if (process.env.TURBOPACK)
17
+ return true;
18
+ return !process.argv.includes('--webpack');
19
+ }
20
+ export async function withRunTypes(nextConfig = {}, options = {}) {
21
+ const root = options.cwd ?? process.cwd();
22
+ if (!isTurbopack())
23
+ return withWebpackPlugin(nextConfig, options);
24
+ const socketPath = ownsBroker() ? (await startBroker(root, options)).socketPath : (options.socketPath ?? socketPathFor(root));
25
+ return {
26
+ ...nextConfig,
27
+ turbopack: {
28
+ ...nextConfig.turbopack,
29
+ rules: {
30
+ ...nextConfig.turbopack?.rules,
31
+ ...runTypesTurbopackRules(socketPath),
32
+ },
33
+ },
34
+ };
35
+ }
36
+ function withWebpackPlugin(nextConfig, options) {
37
+ const previous = nextConfig.webpack;
38
+ return {
39
+ ...nextConfig,
40
+ webpack: (config, context) => {
41
+ const next = previous ? previous(config, context) : config;
42
+ next.plugins = next.plugins ?? [];
43
+ next.plugins.push(webpackPlugin(options));
44
+ return next;
45
+ },
46
+ };
47
+ }
48
+ function webpackPlugin(options) {
49
+ const { socketPath: _socketPath, ...pluginOptions } = options;
50
+ return unplugin.webpack(pluginOptions);
51
+ }
52
+ export default withRunTypes;
53
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/next/index.ts"],"names":[],"mappings":"AAiBA,OAAO,EAAC,QAAQ,EAAC,MAAM,gBAAgB,CAAC;AACxC,OAAO,EAAC,WAAW,EAAE,aAAa,EAAE,UAAU,EAAsC,MAAM,aAAa,CAAC;AAExG,OAAO,EAAC,WAAW,EAAE,aAAa,EAAE,UAAU,EAAC,CAAC;AAIhD,MAAM,CAAC,MAAM,eAAe,GAAG,mCAAmC,CAAC;AAKnE,MAAM,UAAU,GAAG,CAAC,MAAM,EAAE,OAAO,EAAE,OAAO,EAAE,OAAO,CAAC,CAAC;AAoBvD,MAAM,UAAU,sBAAsB,CAAC,UAAkB;IACvD,MAAM,IAAI,GAAkB;QAG1B,OAAO,EAAE,CAAC,EAAC,MAAM,EAAE,eAAe,EAAE,OAAO,EAAE,EAAC,UAAU,EAAC,EAAC,CAAC;QAC3D,SAAS,EAAE,EAAC,GAAG,EAAE,SAAS,EAAC;KAC5B,CAAC;IACF,OAAO,MAAM,CAAC,WAAW,CAAC,UAAU,CAAC,GAAG,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,CAAC,IAAI,EAAE,IAAI,CAAC,CAAC,CAAC,CAAC;AACpE,CAAC;AAKD,MAAM,UAAU,WAAW;IACzB,IAAI,OAAO,CAAC,GAAG,CAAC,SAAS,KAAK,GAAG;QAAE,OAAO,KAAK,CAAC;IAChD,IAAI,OAAO,CAAC,GAAG,CAAC,SAAS;QAAE,OAAO,IAAI,CAAC;IACvC,OAAO,CAAC,OAAO,CAAC,IAAI,CAAC,QAAQ,CAAC,WAAW,CAAC,CAAC;AAC7C,CAAC;AAcD,MAAM,CAAC,KAAK,UAAU,YAAY,CAAC,aAA6B,EAAE,EAAE,UAAuB,EAAE;IAC3F,MAAM,IAAI,GAAG,OAAO,CAAC,GAAG,IAAI,OAAO,CAAC,GAAG,EAAE,CAAC;IAI1C,IAAI,CAAC,WAAW,EAAE;QAAE,OAAO,iBAAiB,CAAC,UAAU,EAAE,OAAO,CAAC,CAAC;IAIlE,MAAM,UAAU,GAAG,UAAU,EAAE,CAAC,CAAC,CAAC,CAAC,MAAM,WAAW,CAAC,IAAI,EAAE,OAAO,CAAC,CAAC,CAAC,UAAU,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,UAAU,IAAI,aAAa,CAAC,IAAI,CAAC,CAAC,CAAC;IAE9H,OAAO;QACL,GAAG,UAAU;QACb,SAAS,EAAE;YACT,GAAG,UAAU,CAAC,SAAS;YACvB,KAAK,EAAE;gBACL,GAAG,UAAU,CAAC,SAAS,EAAE,KAAK;gBAC9B,GAAG,sBAAsB,CAAC,UAAU,CAAC;aACtC;SACF;KACF,CAAC;AACJ,CAAC;AAID,SAAS,iBAAiB,CAAC,UAA0B,EAAE,OAAoB;IACzE,MAAM,QAAQ,GAAG,UAAU,CAAC,OAAO,CAAC;IACpC,OAAO;QACL,GAAG,UAAU;QACb,OAAO,EAAE,CAAC,MAAyB,EAAE,OAAgB,EAAE,EAAE;YACvD,MAAM,IAAI,GAAG,QAAQ,CAAC,CAAC,CAAC,QAAQ,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC;YAC3D,IAAI,CAAC,OAAO,GAAG,IAAI,CAAC,OAAO,IAAI,EAAE,CAAC;YAClC,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,aAAa,CAAC,OAAO,CAAC,CAAC,CAAC;YAC1C,OAAO,IAAI,CAAC;QACd,CAAC;KACF,CAAC;AACJ,CAAC;AAGD,SAAS,aAAa,CAAC,OAAoB;IACzC,MAAM,EAAC,UAAU,EAAE,WAAW,EAAE,GAAG,aAAa,EAAC,GAAG,OAAO,CAAC;IAC5D,OAAO,QAAQ,CAAC,OAAO,CAAC,aAAa,CAAC,CAAC;AACzC,CAAC;AAED,eAAe,YAAY,CAAC"}
@@ -0,0 +1,13 @@
1
+ interface LoaderOptions {
2
+ socketPath: string;
3
+ }
4
+ interface LoaderContext {
5
+ async: () => (error: Error | null, code?: string, map?: unknown) => void;
6
+ getOptions: () => LoaderOptions;
7
+ resourcePath: string;
8
+ addDependency?: (file: string) => void;
9
+ emitWarning?: (warning: Error) => void;
10
+ }
11
+ export default function runTypesNextLoader(this: LoaderContext, source: string): void;
12
+ export {};
13
+ //# sourceMappingURL=loader.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"loader.d.ts","sourceRoot":"","sources":["../../src/next/loader.ts"],"names":[],"mappings":"AAeA,UAAU,aAAa;IACrB,UAAU,EAAE,MAAM,CAAC;CACpB;AAKD,UAAU,aAAa;IACrB,KAAK,EAAE,MAAM,CAAC,KAAK,EAAE,KAAK,GAAG,IAAI,EAAE,IAAI,CAAC,EAAE,MAAM,EAAE,GAAG,CAAC,EAAE,OAAO,KAAK,IAAI,CAAC;IACzE,UAAU,EAAE,MAAM,aAAa,CAAC;IAChC,YAAY,EAAE,MAAM,CAAC;IACrB,aAAa,CAAC,EAAE,CAAC,IAAI,EAAE,MAAM,KAAK,IAAI,CAAC;IACvC,WAAW,CAAC,EAAE,CAAC,OAAO,EAAE,KAAK,KAAK,IAAI,CAAC;CACxC;AAsCD,MAAM,CAAC,OAAO,UAAU,kBAAkB,CAAC,IAAI,EAAE,aAAa,EAAE,MAAM,EAAE,MAAM,GAAG,IAAI,CAmCpF"}
@@ -0,0 +1,64 @@
1
+ import net from 'node:net';
2
+ import { createLineReader } from "./wire.js";
3
+ let connection = null;
4
+ let sequence = 0;
5
+ const pending = new Map();
6
+ function connect(socketPath) {
7
+ if (connection)
8
+ return connection;
9
+ connection = new Promise((resolve, reject) => {
10
+ const socket = net.connect(socketPath, () => resolve(socket));
11
+ socket.once('error', (error) => {
12
+ connection = null;
13
+ for (const settle of pending.values())
14
+ settle({ id: -1, ok: false, error: String(error) });
15
+ pending.clear();
16
+ reject(error);
17
+ });
18
+ socket.on('data', createLineReader((line) => {
19
+ let reply;
20
+ try {
21
+ reply = JSON.parse(line);
22
+ }
23
+ catch {
24
+ return;
25
+ }
26
+ const settle = pending.get(reply.id);
27
+ if (!settle)
28
+ return;
29
+ pending.delete(reply.id);
30
+ settle(reply);
31
+ }));
32
+ });
33
+ return connection;
34
+ }
35
+ export default function runTypesNextLoader(source) {
36
+ const callback = this.async();
37
+ const { socketPath } = this.getOptions();
38
+ const file = this.resourcePath;
39
+ const emitWarning = this.emitWarning?.bind(this);
40
+ const addDependency = this.addDependency?.bind(this);
41
+ void (async () => {
42
+ const socket = await connect(socketPath);
43
+ const id = ++sequence;
44
+ const request = { id, file, code: source };
45
+ const reply = await new Promise((resolve) => {
46
+ pending.set(id, resolve);
47
+ socket.write(`${JSON.stringify(request)}\n`);
48
+ });
49
+ for (const warning of reply.warnings ?? [])
50
+ emitWarning?.(new Error(warning));
51
+ if (!reply.ok)
52
+ throw new Error(reply.error ?? 'ts-runtypes broker failed');
53
+ for (const dep of reply.typeDeps ?? [])
54
+ addDependency?.(dep);
55
+ if (reply.stamp && addDependency)
56
+ addDependency(reply.stamp);
57
+ if (typeof reply.code !== 'string')
58
+ return callback(null, source);
59
+ callback(null, reply.code, reply.map);
60
+ })().catch((error) => {
61
+ callback(error instanceof Error ? error : new Error(String(error)));
62
+ });
63
+ }
64
+ //# sourceMappingURL=loader.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"loader.js","sourceRoot":"","sources":["../../src/next/loader.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,17 @@
1
+ export interface BrokerRequest {
2
+ id: number;
3
+ file: string;
4
+ code: string;
5
+ }
6
+ export interface BrokerReply {
7
+ id: number;
8
+ ok: boolean;
9
+ code?: string;
10
+ map?: unknown;
11
+ warnings?: string[];
12
+ stamp?: string;
13
+ typeDeps?: string[];
14
+ error?: string;
15
+ }
16
+ export declare function createLineReader(onLine: (line: string) => void): (chunk: Buffer | string) => void;
17
+ //# sourceMappingURL=wire.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"wire.d.ts","sourceRoot":"","sources":["../../src/next/wire.ts"],"names":[],"mappings":"AAWA,MAAM,WAAW,aAAa;IAC5B,EAAE,EAAE,MAAM,CAAC;IACX,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,EAAE,MAAM,CAAC;CACd;AAED,MAAM,WAAW,WAAW;IAC1B,EAAE,EAAE,MAAM,CAAC;IACX,EAAE,EAAE,OAAO,CAAC;IAGZ,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,GAAG,CAAC,EAAE,OAAO,CAAC;IAId,QAAQ,CAAC,EAAE,MAAM,EAAE,CAAC;IAKpB,KAAK,CAAC,EAAE,MAAM,CAAC;IAOf,QAAQ,CAAC,EAAE,MAAM,EAAE,CAAC;IACpB,KAAK,CAAC,EAAE,MAAM,CAAC;CAChB;AAGD,wBAAgB,gBAAgB,CAAC,MAAM,EAAE,CAAC,IAAI,EAAE,MAAM,KAAK,IAAI,GAAG,CAAC,KAAK,EAAE,MAAM,GAAG,MAAM,KAAK,IAAI,CAYjG"}
@@ -0,0 +1,15 @@
1
+ export function createLineReader(onLine) {
2
+ let buffer = '';
3
+ return (chunk) => {
4
+ buffer += typeof chunk === 'string' ? chunk : chunk.toString('utf8');
5
+ let newline = buffer.indexOf('\n');
6
+ while (newline !== -1) {
7
+ const line = buffer.slice(0, newline);
8
+ buffer = buffer.slice(newline + 1);
9
+ if (line)
10
+ onLine(line);
11
+ newline = buffer.indexOf('\n');
12
+ }
13
+ };
14
+ }
15
+ //# sourceMappingURL=wire.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"wire.js","sourceRoot":"","sources":["../../src/next/wire.ts"],"names":[],"mappings":"AA4CA,MAAM,UAAU,gBAAgB,CAAC,MAA8B;IAC7D,IAAI,MAAM,GAAG,EAAE,CAAC;IAChB,OAAO,CAAC,KAAK,EAAE,EAAE;QACf,MAAM,IAAI,OAAO,KAAK,KAAK,QAAQ,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAC;QACrE,IAAI,OAAO,GAAG,MAAM,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC;QACnC,OAAO,OAAO,KAAK,CAAC,CAAC,EAAE,CAAC;YACtB,MAAM,IAAI,GAAG,MAAM,CAAC,KAAK,CAAC,CAAC,EAAE,OAAO,CAAC,CAAC;YACtC,MAAM,GAAG,MAAM,CAAC,KAAK,CAAC,OAAO,GAAG,CAAC,CAAC,CAAC;YACnC,IAAI,IAAI;gBAAE,MAAM,CAAC,IAAI,CAAC,CAAC;YACvB,OAAO,GAAG,MAAM,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC;QACjC,CAAC;IACH,CAAC,CAAC;AACJ,CAAC"}