@limrun/api 0.22.2 → 0.23.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.
- package/CHANGELOG.md +8 -0
- package/exec-client.d.mts +5 -1
- package/exec-client.d.mts.map +1 -1
- package/exec-client.d.ts +5 -1
- package/exec-client.d.ts.map +1 -1
- package/exec-client.js +14 -7
- package/exec-client.js.map +1 -1
- package/exec-client.mjs +14 -7
- package/exec-client.mjs.map +1 -1
- package/folder-sync-ignore.d.mts +7 -0
- package/folder-sync-ignore.d.mts.map +1 -0
- package/folder-sync-ignore.d.ts +7 -0
- package/folder-sync-ignore.d.ts.map +1 -0
- package/folder-sync-ignore.js +56 -0
- package/folder-sync-ignore.js.map +1 -0
- package/folder-sync-ignore.mjs +52 -0
- package/folder-sync-ignore.mjs.map +1 -0
- package/folder-sync-watcher.d.mts +2 -0
- package/folder-sync-watcher.d.mts.map +1 -1
- package/folder-sync-watcher.d.ts +2 -0
- package/folder-sync-watcher.d.ts.map +1 -1
- package/folder-sync-watcher.js +10 -62
- package/folder-sync-watcher.js.map +1 -1
- package/folder-sync-watcher.mjs +10 -62
- package/folder-sync-watcher.mjs.map +1 -1
- package/folder-sync.d.mts +16 -16
- package/folder-sync.d.mts.map +1 -1
- package/folder-sync.d.ts +16 -16
- package/folder-sync.d.ts.map +1 -1
- package/folder-sync.js +22 -65
- package/folder-sync.js.map +1 -1
- package/folder-sync.mjs +21 -64
- package/folder-sync.mjs.map +1 -1
- package/ios-client.d.mts +24 -0
- package/ios-client.d.mts.map +1 -1
- package/ios-client.d.ts +24 -0
- package/ios-client.d.ts.map +1 -1
- package/ios-client.js +108 -8
- package/ios-client.js.map +1 -1
- package/ios-client.mjs +109 -9
- package/ios-client.mjs.map +1 -1
- package/package.json +11 -1
- package/sandbox-client.d.mts +20 -15
- package/sandbox-client.d.mts.map +1 -1
- package/sandbox-client.d.ts +20 -15
- package/sandbox-client.d.ts.map +1 -1
- package/sandbox-client.js +49 -40
- package/sandbox-client.js.map +1 -1
- package/sandbox-client.mjs +48 -40
- package/sandbox-client.mjs.map +1 -1
- package/src/exec-client.ts +14 -7
- package/src/folder-sync-ignore.ts +65 -0
- package/src/folder-sync-watcher.ts +11 -66
- package/src/folder-sync.ts +39 -89
- package/src/ios-client.ts +138 -9
- package/src/sandbox-client.ts +72 -62
- package/src/version.ts +1 -1
- package/version.d.mts +1 -1
- package/version.d.ts +1 -1
- package/version.js +1 -1
- package/version.mjs +1 -1
package/CHANGELOG.md
CHANGED
|
@@ -1,5 +1,13 @@
|
|
|
1
1
|
# Changelog
|
|
2
2
|
|
|
3
|
+
## 0.23.1 (2026-04-06)
|
|
4
|
+
|
|
5
|
+
Full Changelog: [v0.23.0...v0.23.1](https://github.com/limrun-inc/typescript-sdk/compare/v0.23.0...v0.23.1)
|
|
6
|
+
|
|
7
|
+
## 0.23.0 (2026-04-05)
|
|
8
|
+
|
|
9
|
+
Full Changelog: [v0.22.2...v0.23.0](https://github.com/limrun-inc/typescript-sdk/compare/v0.22.2...v0.23.0)
|
|
10
|
+
|
|
3
11
|
## 0.22.2 (2026-03-31)
|
|
4
12
|
|
|
5
13
|
Full Changelog: [v0.22.1...v0.22.2](https://github.com/limrun-inc/typescript-sdk/compare/v0.22.1...v0.22.2)
|
package/exec-client.d.mts
CHANGED
|
@@ -47,6 +47,7 @@ export declare class ReadableStream {
|
|
|
47
47
|
* @example
|
|
48
48
|
* // Stream-based (like Node.js spawn)
|
|
49
49
|
* const proc = exec({ command: 'xcodebuild' }, options);
|
|
50
|
+
* proc.command.on('data', (chunk) => console.log('[command]', chunk));
|
|
50
51
|
* proc.stdout.on('data', (chunk) => process.stdout.write(chunk));
|
|
51
52
|
* proc.stderr.on('data', (chunk) => process.stderr.write(chunk));
|
|
52
53
|
* proc.on('exit', (code) => console.log(`Exited with code ${code}`));
|
|
@@ -55,6 +56,8 @@ export declare class ReadableStream {
|
|
|
55
56
|
* const { exitCode, status } = await proc;
|
|
56
57
|
*/
|
|
57
58
|
export declare class ExecChildProcess implements PromiseLike<ExecResult> {
|
|
59
|
+
/** Command stream - emits the executed command and then closes */
|
|
60
|
+
readonly command: ReadableStream;
|
|
58
61
|
/** Stdout stream - emits 'data' and 'close' events */
|
|
59
62
|
readonly stdout: ReadableStream;
|
|
60
63
|
/** Stderr stream - emits 'data' and 'close' events */
|
|
@@ -81,7 +84,7 @@ export declare class ExecChildProcess implements PromiseLike<ExecResult> {
|
|
|
81
84
|
kill(): Promise<void>;
|
|
82
85
|
private run;
|
|
83
86
|
/**
|
|
84
|
-
* Opens an SSE connection and routes events to stdout/stderr streams.
|
|
87
|
+
* Opens an SSE connection and routes streamed events to the exposed command/stdout/stderr streams.
|
|
85
88
|
* Resolves with the exit code when an 'exitCode' event arrives.
|
|
86
89
|
* Rejects when the abort signal fires (kill or cleanup).
|
|
87
90
|
*/
|
|
@@ -95,6 +98,7 @@ export declare class ExecChildProcess implements PromiseLike<ExecResult> {
|
|
|
95
98
|
* const proc = exec({ command: 'xcodebuild' }, { apiUrl: '...', token: '...' });
|
|
96
99
|
*
|
|
97
100
|
* // Stream output
|
|
101
|
+
* proc.command.on('data', (chunk) => console.log('[command]', chunk));
|
|
98
102
|
* proc.stdout.on('data', (chunk) => console.log('[stdout]', chunk));
|
|
99
103
|
* proc.stderr.on('data', (chunk) => console.error('[stderr]', chunk));
|
|
100
104
|
*
|
package/exec-client.d.mts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"exec-client.d.mts","sourceRoot":"","sources":["src/exec-client.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAQH,MAAM,MAAM,WAAW,GAAG;IACxB,OAAO,EAAE,YAAY,CAAC;IACtB,UAAU,CAAC,EAAE;QACX,SAAS,CAAC,EAAE,MAAM,CAAC;QACnB,OAAO,CAAC,EAAE,MAAM,CAAC;QACjB,MAAM,CAAC,EAAE,MAAM,CAAC;KACjB,CAAC;CACH,CAAC;AAEF,MAAM,MAAM,WAAW,GAAG;IACxB,MAAM,EAAE,MAAM,CAAC;IACf,KAAK,EAAE,MAAM,CAAC;IACd,GAAG,CAAC,EAAE,CAAC,KAAK,EAAE,OAAO,GAAG,MAAM,GAAG,MAAM,GAAG,OAAO,EAAE,GAAG,EAAE,MAAM,KAAK,IAAI,CAAC;CACzE,CAAC;AAEF,MAAM,MAAM,UAAU,GAAG;IACvB,QAAQ,EAAE,MAAM,CAAC;IACjB,MAAM,EAAE,MAAM,CAAC;IACf,MAAM,EAAE,WAAW,GAAG,QAAQ,GAAG,WAAW,CAAC;CAC9C,CAAC;AAEF,KAAK,YAAY,GAAG,CAAC,KAAK,EAAE,MAAM,KAAK,IAAI,CAAC;AAC5C,KAAK,aAAa,GAAG,MAAM,IAAI,CAAC;AAChC,KAAK,YAAY,GAAG,CAAC,IAAI,EAAE,MAAM,KAAK,IAAI,CAAC;AAE3C;;;GAGG;AACH,qBAAa,cAAc;IACzB,OAAO,CAAC,aAAa,CAAsB;IAC3C,OAAO,CAAC,cAAc,CAAuB;IAC7C,OAAO,CAAC,MAAM,CAAS;IAEvB,EAAE,CAAC,KAAK,EAAE,MAAM,EAAE,QAAQ,EAAE,YAAY,GAAG,IAAI;IAC/C,EAAE,CAAC,KAAK,EAAE,OAAO,EAAE,QAAQ,EAAE,aAAa,GAAG,IAAI;IAUjD,gBAAgB;IAChB,IAAI,CAAC,KAAK,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,GAAG,IAAI;IACxC,IAAI,CAAC,KAAK,EAAE,OAAO,GAAG,IAAI;CAS3B;AAED
|
|
1
|
+
{"version":3,"file":"exec-client.d.mts","sourceRoot":"","sources":["src/exec-client.ts"],"names":[],"mappings":"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"}
|
package/exec-client.d.ts
CHANGED
|
@@ -47,6 +47,7 @@ export declare class ReadableStream {
|
|
|
47
47
|
* @example
|
|
48
48
|
* // Stream-based (like Node.js spawn)
|
|
49
49
|
* const proc = exec({ command: 'xcodebuild' }, options);
|
|
50
|
+
* proc.command.on('data', (chunk) => console.log('[command]', chunk));
|
|
50
51
|
* proc.stdout.on('data', (chunk) => process.stdout.write(chunk));
|
|
51
52
|
* proc.stderr.on('data', (chunk) => process.stderr.write(chunk));
|
|
52
53
|
* proc.on('exit', (code) => console.log(`Exited with code ${code}`));
|
|
@@ -55,6 +56,8 @@ export declare class ReadableStream {
|
|
|
55
56
|
* const { exitCode, status } = await proc;
|
|
56
57
|
*/
|
|
57
58
|
export declare class ExecChildProcess implements PromiseLike<ExecResult> {
|
|
59
|
+
/** Command stream - emits the executed command and then closes */
|
|
60
|
+
readonly command: ReadableStream;
|
|
58
61
|
/** Stdout stream - emits 'data' and 'close' events */
|
|
59
62
|
readonly stdout: ReadableStream;
|
|
60
63
|
/** Stderr stream - emits 'data' and 'close' events */
|
|
@@ -81,7 +84,7 @@ export declare class ExecChildProcess implements PromiseLike<ExecResult> {
|
|
|
81
84
|
kill(): Promise<void>;
|
|
82
85
|
private run;
|
|
83
86
|
/**
|
|
84
|
-
* Opens an SSE connection and routes events to stdout/stderr streams.
|
|
87
|
+
* Opens an SSE connection and routes streamed events to the exposed command/stdout/stderr streams.
|
|
85
88
|
* Resolves with the exit code when an 'exitCode' event arrives.
|
|
86
89
|
* Rejects when the abort signal fires (kill or cleanup).
|
|
87
90
|
*/
|
|
@@ -95,6 +98,7 @@ export declare class ExecChildProcess implements PromiseLike<ExecResult> {
|
|
|
95
98
|
* const proc = exec({ command: 'xcodebuild' }, { apiUrl: '...', token: '...' });
|
|
96
99
|
*
|
|
97
100
|
* // Stream output
|
|
101
|
+
* proc.command.on('data', (chunk) => console.log('[command]', chunk));
|
|
98
102
|
* proc.stdout.on('data', (chunk) => console.log('[stdout]', chunk));
|
|
99
103
|
* proc.stderr.on('data', (chunk) => console.error('[stderr]', chunk));
|
|
100
104
|
*
|
package/exec-client.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"exec-client.d.ts","sourceRoot":"","sources":["src/exec-client.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAQH,MAAM,MAAM,WAAW,GAAG;IACxB,OAAO,EAAE,YAAY,CAAC;IACtB,UAAU,CAAC,EAAE;QACX,SAAS,CAAC,EAAE,MAAM,CAAC;QACnB,OAAO,CAAC,EAAE,MAAM,CAAC;QACjB,MAAM,CAAC,EAAE,MAAM,CAAC;KACjB,CAAC;CACH,CAAC;AAEF,MAAM,MAAM,WAAW,GAAG;IACxB,MAAM,EAAE,MAAM,CAAC;IACf,KAAK,EAAE,MAAM,CAAC;IACd,GAAG,CAAC,EAAE,CAAC,KAAK,EAAE,OAAO,GAAG,MAAM,GAAG,MAAM,GAAG,OAAO,EAAE,GAAG,EAAE,MAAM,KAAK,IAAI,CAAC;CACzE,CAAC;AAEF,MAAM,MAAM,UAAU,GAAG;IACvB,QAAQ,EAAE,MAAM,CAAC;IACjB,MAAM,EAAE,MAAM,CAAC;IACf,MAAM,EAAE,WAAW,GAAG,QAAQ,GAAG,WAAW,CAAC;CAC9C,CAAC;AAEF,KAAK,YAAY,GAAG,CAAC,KAAK,EAAE,MAAM,KAAK,IAAI,CAAC;AAC5C,KAAK,aAAa,GAAG,MAAM,IAAI,CAAC;AAChC,KAAK,YAAY,GAAG,CAAC,IAAI,EAAE,MAAM,KAAK,IAAI,CAAC;AAE3C;;;GAGG;AACH,qBAAa,cAAc;IACzB,OAAO,CAAC,aAAa,CAAsB;IAC3C,OAAO,CAAC,cAAc,CAAuB;IAC7C,OAAO,CAAC,MAAM,CAAS;IAEvB,EAAE,CAAC,KAAK,EAAE,MAAM,EAAE,QAAQ,EAAE,YAAY,GAAG,IAAI;IAC/C,EAAE,CAAC,KAAK,EAAE,OAAO,EAAE,QAAQ,EAAE,aAAa,GAAG,IAAI;IAUjD,gBAAgB;IAChB,IAAI,CAAC,KAAK,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,GAAG,IAAI;IACxC,IAAI,CAAC,KAAK,EAAE,OAAO,GAAG,IAAI;CAS3B;AAED
|
|
1
|
+
{"version":3,"file":"exec-client.d.ts","sourceRoot":"","sources":["src/exec-client.ts"],"names":[],"mappings":"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"}
|
package/exec-client.js
CHANGED
|
@@ -49,6 +49,7 @@ exports.ReadableStream = ReadableStream;
|
|
|
49
49
|
* @example
|
|
50
50
|
* // Stream-based (like Node.js spawn)
|
|
51
51
|
* const proc = exec({ command: 'xcodebuild' }, options);
|
|
52
|
+
* proc.command.on('data', (chunk) => console.log('[command]', chunk));
|
|
52
53
|
* proc.stdout.on('data', (chunk) => process.stdout.write(chunk));
|
|
53
54
|
* proc.stderr.on('data', (chunk) => process.stderr.write(chunk));
|
|
54
55
|
* proc.on('exit', (code) => console.log(`Exited with code ${code}`));
|
|
@@ -58,6 +59,8 @@ exports.ReadableStream = ReadableStream;
|
|
|
58
59
|
*/
|
|
59
60
|
class ExecChildProcess {
|
|
60
61
|
constructor(request, options) {
|
|
62
|
+
/** Command stream - emits the executed command and then closes */
|
|
63
|
+
this.command = new ReadableStream();
|
|
61
64
|
/** Stdout stream - emits 'data' and 'close' events */
|
|
62
65
|
this.stdout = new ReadableStream();
|
|
63
66
|
/** Stderr stream - emits 'data' and 'close' events */
|
|
@@ -118,7 +121,6 @@ class ExecChildProcess {
|
|
|
118
121
|
const { log } = this;
|
|
119
122
|
const { apiUrl, token } = this.options;
|
|
120
123
|
// 1. Trigger the build via POST /exec
|
|
121
|
-
log('debug', `POST ${apiUrl}/exec`);
|
|
122
124
|
let execRes;
|
|
123
125
|
try {
|
|
124
126
|
execRes = await fetch(`${apiUrl}/exec`, {
|
|
@@ -133,6 +135,7 @@ class ExecChildProcess {
|
|
|
133
135
|
}
|
|
134
136
|
catch (err) {
|
|
135
137
|
if (this.killed) {
|
|
138
|
+
this.command.emit('close');
|
|
136
139
|
this.stdout.emit('close');
|
|
137
140
|
this.stderr.emit('close');
|
|
138
141
|
for (const listener of this.exitListeners) {
|
|
@@ -148,10 +151,9 @@ class ExecChildProcess {
|
|
|
148
151
|
}
|
|
149
152
|
const execData = (await execRes.json());
|
|
150
153
|
this.execId = execData.execId;
|
|
151
|
-
log('
|
|
154
|
+
log('debug', `Build started: ${this.execId}`);
|
|
152
155
|
// 2. Stream logs via SSE and wait for exit code
|
|
153
156
|
const eventsUrl = `${apiUrl}/exec/${this.execId}/events`;
|
|
154
|
-
log('debug', `GET ${eventsUrl} (SSE)`);
|
|
155
157
|
const timeoutMs = 3600 * 1000; // 1 hour max
|
|
156
158
|
let exitCode;
|
|
157
159
|
let timeoutId;
|
|
@@ -165,7 +167,7 @@ class ExecChildProcess {
|
|
|
165
167
|
}
|
|
166
168
|
catch {
|
|
167
169
|
if (this.killed) {
|
|
168
|
-
log('
|
|
170
|
+
log('debug', 'Build killed');
|
|
169
171
|
exitCode = -1;
|
|
170
172
|
}
|
|
171
173
|
else {
|
|
@@ -181,6 +183,7 @@ class ExecChildProcess {
|
|
|
181
183
|
}
|
|
182
184
|
}
|
|
183
185
|
// Emit close events on streams
|
|
186
|
+
this.command.emit('close');
|
|
184
187
|
this.stdout.emit('close');
|
|
185
188
|
this.stderr.emit('close');
|
|
186
189
|
// Emit exit event
|
|
@@ -196,11 +199,11 @@ class ExecChildProcess {
|
|
|
196
199
|
execId: this.execId,
|
|
197
200
|
status,
|
|
198
201
|
};
|
|
199
|
-
this.log('
|
|
202
|
+
this.log('debug', `Build finished: ${result.status} (exit ${result.exitCode})`);
|
|
200
203
|
return result;
|
|
201
204
|
}
|
|
202
205
|
/**
|
|
203
|
-
* Opens an SSE connection and routes events to stdout/stderr streams.
|
|
206
|
+
* Opens an SSE connection and routes streamed events to the exposed command/stdout/stderr streams.
|
|
204
207
|
* Resolves with the exit code when an 'exitCode' event arrives.
|
|
205
208
|
* Rejects when the abort signal fires (kill or cleanup).
|
|
206
209
|
*/
|
|
@@ -217,7 +220,10 @@ class ExecChildProcess {
|
|
|
217
220
|
onMessage: (message) => {
|
|
218
221
|
const data = typeof message.data === 'string' ? message.data : String(message.data ?? '');
|
|
219
222
|
const eventType = message.event;
|
|
220
|
-
if (eventType === '
|
|
223
|
+
if (eventType === 'command') {
|
|
224
|
+
this.command.emit('data', data);
|
|
225
|
+
}
|
|
226
|
+
else if (eventType === 'stdout') {
|
|
221
227
|
this.stdout.emit('data', data);
|
|
222
228
|
}
|
|
223
229
|
else if (eventType === 'stderr') {
|
|
@@ -262,6 +268,7 @@ exports.ExecChildProcess = ExecChildProcess;
|
|
|
262
268
|
* const proc = exec({ command: 'xcodebuild' }, { apiUrl: '...', token: '...' });
|
|
263
269
|
*
|
|
264
270
|
* // Stream output
|
|
271
|
+
* proc.command.on('data', (chunk) => console.log('[command]', chunk));
|
|
265
272
|
* proc.stdout.on('data', (chunk) => console.log('[stdout]', chunk));
|
|
266
273
|
* proc.stderr.on('data', (chunk) => console.error('[stderr]', chunk));
|
|
267
274
|
*
|
package/exec-client.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"exec-client.js","sourceRoot":"","sources":["src/exec-client.ts"],"names":[],"mappings":";AAAA;;;;;GAKG;;;
|
|
1
|
+
{"version":3,"file":"exec-client.js","sourceRoot":"","sources":["src/exec-client.ts"],"names":[],"mappings":"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"}
|
package/exec-client.mjs
CHANGED
|
@@ -44,6 +44,7 @@ export class ReadableStream {
|
|
|
44
44
|
* @example
|
|
45
45
|
* // Stream-based (like Node.js spawn)
|
|
46
46
|
* const proc = exec({ command: 'xcodebuild' }, options);
|
|
47
|
+
* proc.command.on('data', (chunk) => console.log('[command]', chunk));
|
|
47
48
|
* proc.stdout.on('data', (chunk) => process.stdout.write(chunk));
|
|
48
49
|
* proc.stderr.on('data', (chunk) => process.stderr.write(chunk));
|
|
49
50
|
* proc.on('exit', (code) => console.log(`Exited with code ${code}`));
|
|
@@ -53,6 +54,8 @@ export class ReadableStream {
|
|
|
53
54
|
*/
|
|
54
55
|
export class ExecChildProcess {
|
|
55
56
|
constructor(request, options) {
|
|
57
|
+
/** Command stream - emits the executed command and then closes */
|
|
58
|
+
this.command = new ReadableStream();
|
|
56
59
|
/** Stdout stream - emits 'data' and 'close' events */
|
|
57
60
|
this.stdout = new ReadableStream();
|
|
58
61
|
/** Stderr stream - emits 'data' and 'close' events */
|
|
@@ -113,7 +116,6 @@ export class ExecChildProcess {
|
|
|
113
116
|
const { log } = this;
|
|
114
117
|
const { apiUrl, token } = this.options;
|
|
115
118
|
// 1. Trigger the build via POST /exec
|
|
116
|
-
log('debug', `POST ${apiUrl}/exec`);
|
|
117
119
|
let execRes;
|
|
118
120
|
try {
|
|
119
121
|
execRes = await fetch(`${apiUrl}/exec`, {
|
|
@@ -128,6 +130,7 @@ export class ExecChildProcess {
|
|
|
128
130
|
}
|
|
129
131
|
catch (err) {
|
|
130
132
|
if (this.killed) {
|
|
133
|
+
this.command.emit('close');
|
|
131
134
|
this.stdout.emit('close');
|
|
132
135
|
this.stderr.emit('close');
|
|
133
136
|
for (const listener of this.exitListeners) {
|
|
@@ -143,10 +146,9 @@ export class ExecChildProcess {
|
|
|
143
146
|
}
|
|
144
147
|
const execData = (await execRes.json());
|
|
145
148
|
this.execId = execData.execId;
|
|
146
|
-
log('
|
|
149
|
+
log('debug', `Build started: ${this.execId}`);
|
|
147
150
|
// 2. Stream logs via SSE and wait for exit code
|
|
148
151
|
const eventsUrl = `${apiUrl}/exec/${this.execId}/events`;
|
|
149
|
-
log('debug', `GET ${eventsUrl} (SSE)`);
|
|
150
152
|
const timeoutMs = 3600 * 1000; // 1 hour max
|
|
151
153
|
let exitCode;
|
|
152
154
|
let timeoutId;
|
|
@@ -160,7 +162,7 @@ export class ExecChildProcess {
|
|
|
160
162
|
}
|
|
161
163
|
catch {
|
|
162
164
|
if (this.killed) {
|
|
163
|
-
log('
|
|
165
|
+
log('debug', 'Build killed');
|
|
164
166
|
exitCode = -1;
|
|
165
167
|
}
|
|
166
168
|
else {
|
|
@@ -176,6 +178,7 @@ export class ExecChildProcess {
|
|
|
176
178
|
}
|
|
177
179
|
}
|
|
178
180
|
// Emit close events on streams
|
|
181
|
+
this.command.emit('close');
|
|
179
182
|
this.stdout.emit('close');
|
|
180
183
|
this.stderr.emit('close');
|
|
181
184
|
// Emit exit event
|
|
@@ -191,11 +194,11 @@ export class ExecChildProcess {
|
|
|
191
194
|
execId: this.execId,
|
|
192
195
|
status,
|
|
193
196
|
};
|
|
194
|
-
this.log('
|
|
197
|
+
this.log('debug', `Build finished: ${result.status} (exit ${result.exitCode})`);
|
|
195
198
|
return result;
|
|
196
199
|
}
|
|
197
200
|
/**
|
|
198
|
-
* Opens an SSE connection and routes events to stdout/stderr streams.
|
|
201
|
+
* Opens an SSE connection and routes streamed events to the exposed command/stdout/stderr streams.
|
|
199
202
|
* Resolves with the exit code when an 'exitCode' event arrives.
|
|
200
203
|
* Rejects when the abort signal fires (kill or cleanup).
|
|
201
204
|
*/
|
|
@@ -212,7 +215,10 @@ export class ExecChildProcess {
|
|
|
212
215
|
onMessage: (message) => {
|
|
213
216
|
const data = typeof message.data === 'string' ? message.data : String(message.data ?? '');
|
|
214
217
|
const eventType = message.event;
|
|
215
|
-
if (eventType === '
|
|
218
|
+
if (eventType === 'command') {
|
|
219
|
+
this.command.emit('data', data);
|
|
220
|
+
}
|
|
221
|
+
else if (eventType === 'stdout') {
|
|
216
222
|
this.stdout.emit('data', data);
|
|
217
223
|
}
|
|
218
224
|
else if (eventType === 'stderr') {
|
|
@@ -256,6 +262,7 @@ export class ExecChildProcess {
|
|
|
256
262
|
* const proc = exec({ command: 'xcodebuild' }, { apiUrl: '...', token: '...' });
|
|
257
263
|
*
|
|
258
264
|
* // Stream output
|
|
265
|
+
* proc.command.on('data', (chunk) => console.log('[command]', chunk));
|
|
259
266
|
* proc.stdout.on('data', (chunk) => console.log('[stdout]', chunk));
|
|
260
267
|
* proc.stderr.on('data', (chunk) => console.error('[stderr]', chunk));
|
|
261
268
|
*
|
package/exec-client.mjs.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"exec-client.mjs","sourceRoot":"","sources":["src/exec-client.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;OAEI,EAAE,iBAAiB,EAAmD,MAAM,oBAAoB;AA+BvG;;;GAGG;AACH,MAAM,OAAO,cAAc;IAA3B;QACU,kBAAa,GAAmB,EAAE,CAAC;QACnC,mBAAc,GAAoB,EAAE,CAAC;QACrC,WAAM,GAAG,KAAK,CAAC;IAwBzB,CAAC;IApBC,EAAE,CAAC,KAAuB,EAAE,QAAsC;QAChE,IAAI,KAAK,KAAK,MAAM,EAAE,CAAC;YACrB,IAAI,CAAC,aAAa,CAAC,IAAI,CAAC,QAAwB,CAAC,CAAC;QACpD,CAAC;aAAM,IAAI,KAAK,KAAK,OAAO,EAAE,CAAC;YAC7B,IAAI,CAAC,cAAc,CAAC,IAAI,CAAC,QAAyB,CAAC,CAAC;QACtD,CAAC;QACD,OAAO,IAAI,CAAC;IACd,CAAC;IAKD,IAAI,CAAC,KAAuB,EAAE,GAAY;QACxC,IAAI,KAAK,KAAK,MAAM,IAAI,OAAO,GAAG,KAAK,QAAQ,EAAE,CAAC;YAChD,KAAK,MAAM,CAAC,IAAI,IAAI,CAAC,aAAa;gBAAE,CAAC,CAAC,GAAG,CAAC,CAAC;QAC7C,CAAC;aAAM,IAAI,KAAK,KAAK,OAAO,IAAI,CAAC,IAAI,CAAC,MAAM,EAAE,CAAC;YAC7C,IAAI,CAAC,MAAM,GAAG,IAAI,CAAC;YACnB,KAAK,MAAM,CAAC,IAAI,IAAI,CAAC,cAAc;gBAAE,CAAC,EAAE,CAAC;QAC3C,CAAC;IACH,CAAC;CACF;AAED
|
|
1
|
+
{"version":3,"file":"exec-client.mjs","sourceRoot":"","sources":["src/exec-client.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
export type IgnoreFn = (relativePath: string) => boolean;
|
|
2
|
+
export type IgnoreFnOptions = {
|
|
3
|
+
additional?: IgnoreFn;
|
|
4
|
+
basisCacheDir: string;
|
|
5
|
+
};
|
|
6
|
+
export declare function createIgnoreFn(rootDir: string, options: IgnoreFnOptions): Promise<IgnoreFn>;
|
|
7
|
+
//# sourceMappingURL=folder-sync-ignore.d.mts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"folder-sync-ignore.d.mts","sourceRoot":"","sources":["src/folder-sync-ignore.ts"],"names":[],"mappings":"AAIA,MAAM,MAAM,QAAQ,GAAG,CAAC,YAAY,EAAE,MAAM,KAAK,OAAO,CAAC;AAEzD,MAAM,MAAM,eAAe,GAAG;IAC5B,UAAU,CAAC,EAAE,QAAQ,CAAC;IACtB,aAAa,EAAE,MAAM,CAAC;CACvB,CAAC;AAUF,wBAAsB,cAAc,CAAC,OAAO,EAAE,MAAM,EAAE,OAAO,EAAE,eAAe,GAAG,OAAO,CAAC,QAAQ,CAAC,CA6CjG"}
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
export type IgnoreFn = (relativePath: string) => boolean;
|
|
2
|
+
export type IgnoreFnOptions = {
|
|
3
|
+
additional?: IgnoreFn;
|
|
4
|
+
basisCacheDir: string;
|
|
5
|
+
};
|
|
6
|
+
export declare function createIgnoreFn(rootDir: string, options: IgnoreFnOptions): Promise<IgnoreFn>;
|
|
7
|
+
//# sourceMappingURL=folder-sync-ignore.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"folder-sync-ignore.d.ts","sourceRoot":"","sources":["src/folder-sync-ignore.ts"],"names":[],"mappings":"AAIA,MAAM,MAAM,QAAQ,GAAG,CAAC,YAAY,EAAE,MAAM,KAAK,OAAO,CAAC;AAEzD,MAAM,MAAM,eAAe,GAAG;IAC5B,UAAU,CAAC,EAAE,QAAQ,CAAC;IACtB,aAAa,EAAE,MAAM,CAAC;CACvB,CAAC;AAUF,wBAAsB,cAAc,CAAC,OAAO,EAAE,MAAM,EAAE,OAAO,EAAE,eAAe,GAAG,OAAO,CAAC,QAAQ,CAAC,CA6CjG"}
|
|
@@ -0,0 +1,56 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.createIgnoreFn = createIgnoreFn;
|
|
4
|
+
const tslib_1 = require("./internal/tslib.js");
|
|
5
|
+
const fs_1 = tslib_1.__importDefault(require("fs"));
|
|
6
|
+
const path_1 = tslib_1.__importDefault(require("path"));
|
|
7
|
+
const ignore_1 = tslib_1.__importDefault(require("ignore"));
|
|
8
|
+
function normalizeRelativePath(relativePath) {
|
|
9
|
+
return relativePath
|
|
10
|
+
.split(path_1.default.sep)
|
|
11
|
+
.join('/')
|
|
12
|
+
.replace(/^\.\/+/, '')
|
|
13
|
+
.replace(/\/+/g, '/');
|
|
14
|
+
}
|
|
15
|
+
async function createIgnoreFn(rootDir, options) {
|
|
16
|
+
const rootResolved = path_1.default.resolve(rootDir);
|
|
17
|
+
const ig = (0, ignore_1.default)();
|
|
18
|
+
const gitignorePath = path_1.default.join(rootResolved, '.gitignore');
|
|
19
|
+
try {
|
|
20
|
+
const content = await fs_1.default.promises.readFile(gitignorePath, 'utf-8');
|
|
21
|
+
ig.add(content);
|
|
22
|
+
}
|
|
23
|
+
catch {
|
|
24
|
+
// No .gitignore file, return empty ignore instance
|
|
25
|
+
}
|
|
26
|
+
const basisCacheRelative = normalizeRelativePath(path_1.default.relative(rootResolved, options.basisCacheDir)).replace(/\/+$/, '');
|
|
27
|
+
const shouldIgnoreBasisCache = basisCacheRelative &&
|
|
28
|
+
basisCacheRelative !== '.' &&
|
|
29
|
+
basisCacheRelative !== '..' &&
|
|
30
|
+
!basisCacheRelative.startsWith('../');
|
|
31
|
+
return (relativePath) => {
|
|
32
|
+
const normalized = normalizeRelativePath(relativePath);
|
|
33
|
+
if (!normalized)
|
|
34
|
+
return false;
|
|
35
|
+
const withoutTrailingSlash = normalized.replace(/\/+$/, '');
|
|
36
|
+
if (withoutTrailingSlash === '.git' ||
|
|
37
|
+
withoutTrailingSlash.startsWith('.git/') ||
|
|
38
|
+
withoutTrailingSlash.endsWith('/.git') ||
|
|
39
|
+
withoutTrailingSlash.includes('/.git/') ||
|
|
40
|
+
withoutTrailingSlash === '.DS_Store' ||
|
|
41
|
+
withoutTrailingSlash.endsWith('/.DS_Store')) {
|
|
42
|
+
return true;
|
|
43
|
+
}
|
|
44
|
+
if (shouldIgnoreBasisCache &&
|
|
45
|
+
(withoutTrailingSlash === basisCacheRelative ||
|
|
46
|
+
withoutTrailingSlash.startsWith(`${basisCacheRelative}/`))) {
|
|
47
|
+
return true;
|
|
48
|
+
}
|
|
49
|
+
if (ig.ignores(normalized))
|
|
50
|
+
return true;
|
|
51
|
+
if (options.additional?.(normalized))
|
|
52
|
+
return true;
|
|
53
|
+
return false;
|
|
54
|
+
};
|
|
55
|
+
}
|
|
56
|
+
//# sourceMappingURL=folder-sync-ignore.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"folder-sync-ignore.js","sourceRoot":"","sources":["src/folder-sync-ignore.ts"],"names":[],"mappings":";;AAmBA,wCA6CC;;AAhED,oDAAoB;AACpB,wDAAwB;AACxB,4DAA+B;AAS/B,SAAS,qBAAqB,CAAC,YAAoB;IACjD,OAAO,YAAY;SAChB,KAAK,CAAC,cAAI,CAAC,GAAG,CAAC;SACf,IAAI,CAAC,GAAG,CAAC;SACT,OAAO,CAAC,QAAQ,EAAE,EAAE,CAAC;SACrB,OAAO,CAAC,MAAM,EAAE,GAAG,CAAC,CAAC;AAC1B,CAAC;AAEM,KAAK,UAAU,cAAc,CAAC,OAAe,EAAE,OAAwB;IAC5E,MAAM,YAAY,GAAG,cAAI,CAAC,OAAO,CAAC,OAAO,CAAC,CAAC;IAC3C,MAAM,EAAE,GAAG,IAAA,gBAAS,GAAE,CAAC;IACvB,MAAM,aAAa,GAAG,cAAI,CAAC,IAAI,CAAC,YAAY,EAAE,YAAY,CAAC,CAAC;IAC5D,IAAI,CAAC;QACH,MAAM,OAAO,GAAG,MAAM,YAAE,CAAC,QAAQ,CAAC,QAAQ,CAAC,aAAa,EAAE,OAAO,CAAC,CAAC;QACnE,EAAE,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC;IAClB,CAAC;IAAC,MAAM,CAAC;QACP,mDAAmD;IACrD,CAAC;IACD,MAAM,kBAAkB,GAAG,qBAAqB,CAC9C,cAAI,CAAC,QAAQ,CAAC,YAAY,EAAE,OAAO,CAAC,aAAa,CAAC,CACnD,CAAC,OAAO,CAAC,MAAM,EAAE,EAAE,CAAC,CAAC;IACtB,MAAM,sBAAsB,GAC1B,kBAAkB;QAClB,kBAAkB,KAAK,GAAG;QAC1B,kBAAkB,KAAK,IAAI;QAC3B,CAAC,kBAAkB,CAAC,UAAU,CAAC,KAAK,CAAC,CAAC;IAExC,OAAO,CAAC,YAAoB,EAAE,EAAE;QAC9B,MAAM,UAAU,GAAG,qBAAqB,CAAC,YAAY,CAAC,CAAC;QACvD,IAAI,CAAC,UAAU;YAAE,OAAO,KAAK,CAAC;QAC9B,MAAM,oBAAoB,GAAG,UAAU,CAAC,OAAO,CAAC,MAAM,EAAE,EAAE,CAAC,CAAC;QAE5D,IACE,oBAAoB,KAAK,MAAM;YAC/B,oBAAoB,CAAC,UAAU,CAAC,OAAO,CAAC;YACxC,oBAAoB,CAAC,QAAQ,CAAC,OAAO,CAAC;YACtC,oBAAoB,CAAC,QAAQ,CAAC,QAAQ,CAAC;YACvC,oBAAoB,KAAK,WAAW;YACpC,oBAAoB,CAAC,QAAQ,CAAC,YAAY,CAAC,EAC3C,CAAC;YACD,OAAO,IAAI,CAAC;QACd,CAAC;QACD,IACE,sBAAsB;YACtB,CAAC,oBAAoB,KAAK,kBAAkB;gBAC1C,oBAAoB,CAAC,UAAU,CAAC,GAAG,kBAAkB,GAAG,CAAC,CAAC,EAC5D,CAAC;YACD,OAAO,IAAI,CAAC;QACd,CAAC;QACD,IAAI,EAAE,CAAC,OAAO,CAAC,UAAU,CAAC;YAAE,OAAO,IAAI,CAAC;QACxC,IAAI,OAAO,CAAC,UAAU,EAAE,CAAC,UAAU,CAAC;YAAE,OAAO,IAAI,CAAC;QAClD,OAAO,KAAK,CAAC;IACf,CAAC,CAAC;AACJ,CAAC"}
|
|
@@ -0,0 +1,52 @@
|
|
|
1
|
+
import fs from 'fs';
|
|
2
|
+
import path from 'path';
|
|
3
|
+
import ignorePkg from 'ignore';
|
|
4
|
+
function normalizeRelativePath(relativePath) {
|
|
5
|
+
return relativePath
|
|
6
|
+
.split(path.sep)
|
|
7
|
+
.join('/')
|
|
8
|
+
.replace(/^\.\/+/, '')
|
|
9
|
+
.replace(/\/+/g, '/');
|
|
10
|
+
}
|
|
11
|
+
export async function createIgnoreFn(rootDir, options) {
|
|
12
|
+
const rootResolved = path.resolve(rootDir);
|
|
13
|
+
const ig = ignorePkg();
|
|
14
|
+
const gitignorePath = path.join(rootResolved, '.gitignore');
|
|
15
|
+
try {
|
|
16
|
+
const content = await fs.promises.readFile(gitignorePath, 'utf-8');
|
|
17
|
+
ig.add(content);
|
|
18
|
+
}
|
|
19
|
+
catch {
|
|
20
|
+
// No .gitignore file, return empty ignore instance
|
|
21
|
+
}
|
|
22
|
+
const basisCacheRelative = normalizeRelativePath(path.relative(rootResolved, options.basisCacheDir)).replace(/\/+$/, '');
|
|
23
|
+
const shouldIgnoreBasisCache = basisCacheRelative &&
|
|
24
|
+
basisCacheRelative !== '.' &&
|
|
25
|
+
basisCacheRelative !== '..' &&
|
|
26
|
+
!basisCacheRelative.startsWith('../');
|
|
27
|
+
return (relativePath) => {
|
|
28
|
+
const normalized = normalizeRelativePath(relativePath);
|
|
29
|
+
if (!normalized)
|
|
30
|
+
return false;
|
|
31
|
+
const withoutTrailingSlash = normalized.replace(/\/+$/, '');
|
|
32
|
+
if (withoutTrailingSlash === '.git' ||
|
|
33
|
+
withoutTrailingSlash.startsWith('.git/') ||
|
|
34
|
+
withoutTrailingSlash.endsWith('/.git') ||
|
|
35
|
+
withoutTrailingSlash.includes('/.git/') ||
|
|
36
|
+
withoutTrailingSlash === '.DS_Store' ||
|
|
37
|
+
withoutTrailingSlash.endsWith('/.DS_Store')) {
|
|
38
|
+
return true;
|
|
39
|
+
}
|
|
40
|
+
if (shouldIgnoreBasisCache &&
|
|
41
|
+
(withoutTrailingSlash === basisCacheRelative ||
|
|
42
|
+
withoutTrailingSlash.startsWith(`${basisCacheRelative}/`))) {
|
|
43
|
+
return true;
|
|
44
|
+
}
|
|
45
|
+
if (ig.ignores(normalized))
|
|
46
|
+
return true;
|
|
47
|
+
if (options.additional?.(normalized))
|
|
48
|
+
return true;
|
|
49
|
+
return false;
|
|
50
|
+
};
|
|
51
|
+
}
|
|
52
|
+
//# sourceMappingURL=folder-sync-ignore.mjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"folder-sync-ignore.mjs","sourceRoot":"","sources":["src/folder-sync-ignore.ts"],"names":[],"mappings":"OAAO,EAAE,MAAM,IAAI;OACZ,IAAI,MAAM,MAAM;OAChB,SAAS,MAAM,QAAQ;AAS9B,SAAS,qBAAqB,CAAC,YAAoB;IACjD,OAAO,YAAY;SAChB,KAAK,CAAC,IAAI,CAAC,GAAG,CAAC;SACf,IAAI,CAAC,GAAG,CAAC;SACT,OAAO,CAAC,QAAQ,EAAE,EAAE,CAAC;SACrB,OAAO,CAAC,MAAM,EAAE,GAAG,CAAC,CAAC;AAC1B,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,cAAc,CAAC,OAAe,EAAE,OAAwB;IAC5E,MAAM,YAAY,GAAG,IAAI,CAAC,OAAO,CAAC,OAAO,CAAC,CAAC;IAC3C,MAAM,EAAE,GAAG,SAAS,EAAE,CAAC;IACvB,MAAM,aAAa,GAAG,IAAI,CAAC,IAAI,CAAC,YAAY,EAAE,YAAY,CAAC,CAAC;IAC5D,IAAI,CAAC;QACH,MAAM,OAAO,GAAG,MAAM,EAAE,CAAC,QAAQ,CAAC,QAAQ,CAAC,aAAa,EAAE,OAAO,CAAC,CAAC;QACnE,EAAE,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC;IAClB,CAAC;IAAC,MAAM,CAAC;QACP,mDAAmD;IACrD,CAAC;IACD,MAAM,kBAAkB,GAAG,qBAAqB,CAC9C,IAAI,CAAC,QAAQ,CAAC,YAAY,EAAE,OAAO,CAAC,aAAa,CAAC,CACnD,CAAC,OAAO,CAAC,MAAM,EAAE,EAAE,CAAC,CAAC;IACtB,MAAM,sBAAsB,GAC1B,kBAAkB;QAClB,kBAAkB,KAAK,GAAG;QAC1B,kBAAkB,KAAK,IAAI;QAC3B,CAAC,kBAAkB,CAAC,UAAU,CAAC,KAAK,CAAC,CAAC;IAExC,OAAO,CAAC,YAAoB,EAAE,EAAE;QAC9B,MAAM,UAAU,GAAG,qBAAqB,CAAC,YAAY,CAAC,CAAC;QACvD,IAAI,CAAC,UAAU;YAAE,OAAO,KAAK,CAAC;QAC9B,MAAM,oBAAoB,GAAG,UAAU,CAAC,OAAO,CAAC,MAAM,EAAE,EAAE,CAAC,CAAC;QAE5D,IACE,oBAAoB,KAAK,MAAM;YAC/B,oBAAoB,CAAC,UAAU,CAAC,OAAO,CAAC;YACxC,oBAAoB,CAAC,QAAQ,CAAC,OAAO,CAAC;YACtC,oBAAoB,CAAC,QAAQ,CAAC,QAAQ,CAAC;YACvC,oBAAoB,KAAK,WAAW;YACpC,oBAAoB,CAAC,QAAQ,CAAC,YAAY,CAAC,EAC3C,CAAC;YACD,OAAO,IAAI,CAAC;QACd,CAAC;QACD,IACE,sBAAsB;YACtB,CAAC,oBAAoB,KAAK,kBAAkB;gBAC1C,oBAAoB,CAAC,UAAU,CAAC,GAAG,kBAAkB,GAAG,CAAC,CAAC,EAC5D,CAAC;YACD,OAAO,IAAI,CAAC;QACd,CAAC;QACD,IAAI,EAAE,CAAC,OAAO,CAAC,UAAU,CAAC;YAAE,OAAO,IAAI,CAAC;QACxC,IAAI,OAAO,CAAC,UAAU,EAAE,CAAC,UAAU,CAAC;YAAE,OAAO,IAAI,CAAC;QAClD,OAAO,KAAK,CAAC;IACf,CAAC,CAAC;AACJ,CAAC"}
|
|
@@ -1,6 +1,8 @@
|
|
|
1
|
+
import { IgnoreFn } from "./folder-sync-ignore.mjs";
|
|
1
2
|
export type FolderSyncWatcherOptions = {
|
|
2
3
|
rootPath: string;
|
|
3
4
|
log?: (level: 'debug' | 'info' | 'warn' | 'error', msg: string) => void;
|
|
5
|
+
ignoreFn: IgnoreFn;
|
|
4
6
|
onChange: (reason: string) => void;
|
|
5
7
|
};
|
|
6
8
|
type WatcherHandle = {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"folder-sync-watcher.d.mts","sourceRoot":"","sources":["src/folder-sync-watcher.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"folder-sync-watcher.d.mts","sourceRoot":"","sources":["src/folder-sync-watcher.ts"],"names":[],"mappings":"OAEO,EAAE,QAAQ,EAAE;AAEnB,MAAM,MAAM,wBAAwB,GAAG;IACrC,QAAQ,EAAE,MAAM,CAAC;IACjB,GAAG,CAAC,EAAE,CAAC,KAAK,EAAE,OAAO,GAAG,MAAM,GAAG,MAAM,GAAG,OAAO,EAAE,GAAG,EAAE,MAAM,KAAK,IAAI,CAAC;IACxE,QAAQ,EAAE,QAAQ,CAAC;IACnB,QAAQ,EAAE,CAAC,MAAM,EAAE,MAAM,KAAK,IAAI,CAAC;CACpC,CAAC;AAEF,KAAK,aAAa,GAAG;IAAE,KAAK,EAAE,MAAM,IAAI,CAAA;CAAE,CAAC;AAI3C;;;;;GAKG;AACH,wBAAsB,eAAe,CAAC,IAAI,EAAE,wBAAwB,GAAG,OAAO,CAAC,aAAa,CAAC,CAsB5F"}
|
package/folder-sync-watcher.d.ts
CHANGED
|
@@ -1,6 +1,8 @@
|
|
|
1
|
+
import { IgnoreFn } from "./folder-sync-ignore.js";
|
|
1
2
|
export type FolderSyncWatcherOptions = {
|
|
2
3
|
rootPath: string;
|
|
3
4
|
log?: (level: 'debug' | 'info' | 'warn' | 'error', msg: string) => void;
|
|
5
|
+
ignoreFn: IgnoreFn;
|
|
4
6
|
onChange: (reason: string) => void;
|
|
5
7
|
};
|
|
6
8
|
type WatcherHandle = {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"folder-sync-watcher.d.ts","sourceRoot":"","sources":["src/folder-sync-watcher.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"folder-sync-watcher.d.ts","sourceRoot":"","sources":["src/folder-sync-watcher.ts"],"names":[],"mappings":"OAEO,EAAE,QAAQ,EAAE;AAEnB,MAAM,MAAM,wBAAwB,GAAG;IACrC,QAAQ,EAAE,MAAM,CAAC;IACjB,GAAG,CAAC,EAAE,CAAC,KAAK,EAAE,OAAO,GAAG,MAAM,GAAG,MAAM,GAAG,OAAO,EAAE,GAAG,EAAE,MAAM,KAAK,IAAI,CAAC;IACxE,QAAQ,EAAE,QAAQ,CAAC;IACnB,QAAQ,EAAE,CAAC,MAAM,EAAE,MAAM,KAAK,IAAI,CAAC;CACpC,CAAC;AAEF,KAAK,aAAa,GAAG;IAAE,KAAK,EAAE,MAAM,IAAI,CAAA;CAAE,CAAC;AAI3C;;;;;GAKG;AACH,wBAAsB,eAAe,CAAC,IAAI,EAAE,wBAAwB,GAAG,OAAO,CAAC,aAAa,CAAC,CAsB5F"}
|