velocious 1.0.570 → 1.0.571
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/README.md +44 -0
- package/build/configuration-types.js +17 -0
- package/build/configuration.js +70 -0
- package/build/http-server/client/index.js +77 -4
- package/build/http-server/client/response-compression.js +224 -0
- package/build/http-server/client/response.js +57 -0
- package/build/http-server/websocket-events-host.js +91 -48
- package/build/src/configuration-types.d.ts +55 -0
- package/build/src/configuration-types.d.ts.map +1 -1
- package/build/src/configuration-types.js +16 -1
- package/build/src/configuration.d.ts +6 -0
- package/build/src/configuration.d.ts.map +1 -1
- package/build/src/configuration.js +61 -1
- package/build/src/http-server/client/index.d.ts +17 -1
- package/build/src/http-server/client/index.d.ts.map +1 -1
- package/build/src/http-server/client/index.js +74 -5
- package/build/src/http-server/client/response-compression.d.ts +71 -0
- package/build/src/http-server/client/response-compression.d.ts.map +1 -0
- package/build/src/http-server/client/response-compression.js +197 -0
- package/build/src/http-server/client/response.d.ts +27 -0
- package/build/src/http-server/client/response.d.ts.map +1 -1
- package/build/src/http-server/client/response.js +49 -1
- package/build/src/http-server/websocket-events-host.d.ts +28 -11
- package/build/src/http-server/websocket-events-host.d.ts.map +1 -1
- package/build/src/http-server/websocket-events-host.js +84 -46
- package/build/tsconfig.tsbuildinfo +1 -1
- package/package.json +4 -3
- package/scripts/docker-run.sh +20 -0
- package/scripts/verify-docker-dev-environment.js +579 -0
- package/src/configuration-types.js +17 -0
- package/src/configuration.js +70 -0
- package/src/http-server/client/index.js +77 -4
- package/src/http-server/client/response-compression.js +224 -0
- package/src/http-server/client/response.js +57 -0
- package/src/http-server/websocket-events-host.js +91 -48
|
@@ -10,18 +10,31 @@ export class VelociousHttpServerWebsocketEventsHost {
|
|
|
10
10
|
* Broadcast handlers grouped by the configuration that owns them.
|
|
11
11
|
* @type {Map<import("../configuration.js").default, Set<import("./worker-handler/index.js").default>>} */
|
|
12
12
|
this.broadcastHandlersByConfiguration = new Map();
|
|
13
|
-
|
|
13
|
+
/**
|
|
14
|
+
* Ordered publish tails keyed by channel. Each channel persists and
|
|
15
|
+
* dispatches behind its own tail so a slow channel cannot head-of-line
|
|
16
|
+
* block unrelated channels. A rejected tail stays in the map so the
|
|
17
|
+
* channel remains poisoned and observable.
|
|
18
|
+
* @type {Map<string, Promise<void>>} */
|
|
19
|
+
this.publishQueuesByChannel = new Map();
|
|
14
20
|
}
|
|
15
21
|
/**
|
|
16
|
-
* Returns a promise that
|
|
17
|
-
*
|
|
18
|
-
*
|
|
19
|
-
*
|
|
20
|
-
*
|
|
22
|
+
* Returns a promise that settles when every channel tail pending at call
|
|
23
|
+
* time has settled (including event-log persistence). Useful when a
|
|
24
|
+
* request handler needs to guarantee its broadcast is persisted before
|
|
25
|
+
* responding — without this, the HTTP response can return before the
|
|
26
|
+
* async event-log write finishes. This is a snapshot barrier: work
|
|
27
|
+
* enqueued after the snapshot is not awaited, and the first rejection in
|
|
28
|
+
* snapshot order is rethrown after every snapshotted tail has settled.
|
|
21
29
|
* @returns {Promise<void>}
|
|
22
30
|
*/
|
|
23
31
|
async awaitPendingBroadcasts() {
|
|
24
|
-
|
|
32
|
+
const snapshot = [...this.publishQueuesByChannel.values()];
|
|
33
|
+
const results = await Promise.allSettled(snapshot);
|
|
34
|
+
for (const result of results) {
|
|
35
|
+
if (result.status === "rejected")
|
|
36
|
+
throw result.reason;
|
|
37
|
+
}
|
|
25
38
|
}
|
|
26
39
|
/**
|
|
27
40
|
* Runs register.
|
|
@@ -56,17 +69,21 @@ export class VelociousHttpServerWebsocketEventsHost {
|
|
|
56
69
|
: /** @type {{channel: string, payload: ?}} */ (channelOrArgs);
|
|
57
70
|
const channel = publishArgs.channel;
|
|
58
71
|
const payload = publishArgs.payload;
|
|
59
|
-
this._queuePublish(
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
handler.
|
|
63
|
-
|
|
64
|
-
|
|
65
|
-
|
|
66
|
-
|
|
67
|
-
|
|
68
|
-
|
|
69
|
-
|
|
72
|
+
this._queuePublish({
|
|
73
|
+
callback: async () => {
|
|
74
|
+
const persistedEvent = await this._persistEventIfNeeded({ channel, payload });
|
|
75
|
+
for (const handler of this.handlers) {
|
|
76
|
+
handler.dispatchWebsocketEvent({
|
|
77
|
+
channel,
|
|
78
|
+
createdAt: persistedEvent?.createdAt,
|
|
79
|
+
eventId: persistedEvent?.id,
|
|
80
|
+
payload
|
|
81
|
+
});
|
|
82
|
+
}
|
|
83
|
+
},
|
|
84
|
+
channel,
|
|
85
|
+
errorMessage: "Failed to publish websocket event"
|
|
86
|
+
});
|
|
70
87
|
}
|
|
71
88
|
/**
|
|
72
89
|
* Fan a V2 channel broadcast out to every registered worker handler.
|
|
@@ -80,39 +97,50 @@ export class VelociousHttpServerWebsocketEventsHost {
|
|
|
80
97
|
* @returns {void}
|
|
81
98
|
*/
|
|
82
99
|
broadcastV2({ body, broadcastParams, channel, configuration }) {
|
|
83
|
-
// Chain onto
|
|
84
|
-
// the next broadcast — without this, a
|
|
85
|
-
// immediately after a broadcast could miss the
|
|
86
|
-
// event when replaying from lastEventId on a slow DB.
|
|
87
|
-
|
|
88
|
-
|
|
89
|
-
|
|
90
|
-
|
|
91
|
-
const
|
|
92
|
-
|
|
93
|
-
|
|
94
|
-
|
|
95
|
-
|
|
96
|
-
|
|
97
|
-
|
|
98
|
-
|
|
99
|
-
|
|
100
|
-
|
|
101
|
-
|
|
102
|
-
|
|
103
|
-
|
|
100
|
+
// Chain onto the channel's own publish tail so persistence completes
|
|
101
|
+
// before the next broadcast on that same channel — without this, a
|
|
102
|
+
// subscriber that connects immediately after a broadcast could miss the
|
|
103
|
+
// just-persisted event when replaying from lastEventId on a slow DB.
|
|
104
|
+
// Other channels chain onto their own tails and are not delayed.
|
|
105
|
+
this._queuePublish({
|
|
106
|
+
callback: async () => {
|
|
107
|
+
const persistedEvent = await this._persistV2EventIfNeeded({ body, channel, configuration });
|
|
108
|
+
const dispatchedTargets = new Set();
|
|
109
|
+
for (const handler of this.broadcastHandlersByConfiguration.get(configuration) || []) {
|
|
110
|
+
const dispatchKey = handler.websocketV2BroadcastDispatchKey();
|
|
111
|
+
if (dispatchedTargets.has(dispatchKey))
|
|
112
|
+
continue;
|
|
113
|
+
dispatchedTargets.add(dispatchKey);
|
|
114
|
+
handler.dispatchWebsocketV2Broadcast({
|
|
115
|
+
body,
|
|
116
|
+
broadcastParams,
|
|
117
|
+
channel,
|
|
118
|
+
eventId: persistedEvent?.id,
|
|
119
|
+
createdAt: persistedEvent?.createdAt
|
|
120
|
+
});
|
|
121
|
+
}
|
|
122
|
+
},
|
|
123
|
+
channel,
|
|
124
|
+
errorMessage: "Failed to persist/broadcast V2 event",
|
|
125
|
+
originatingConfiguration: configuration
|
|
126
|
+
});
|
|
104
127
|
}
|
|
105
128
|
/**
|
|
106
|
-
*
|
|
107
|
-
*
|
|
108
|
-
*
|
|
109
|
-
* @param {
|
|
129
|
+
* Queues publish work behind the channel's own ordered tail so only work
|
|
130
|
+
* for the same channel serializes — a slow or failed channel never
|
|
131
|
+
* head-of-line blocks unrelated channels.
|
|
132
|
+
* @param {object} args - Options object.
|
|
133
|
+
* @param {() => Promise<void>} args.callback - Publish work to run in channel order.
|
|
134
|
+
* @param {string} args.channel - Channel whose ordered tail the work chains onto.
|
|
135
|
+
* @param {string} args.errorMessage - Message logged when publish work fails.
|
|
136
|
+
* @param {import("../configuration.js").default} [args.originatingConfiguration] - Configuration whose context owns the work.
|
|
110
137
|
* @returns {void}
|
|
111
138
|
*/
|
|
112
|
-
_queuePublish(callback, errorMessage, originatingConfiguration) {
|
|
139
|
+
_queuePublish({ callback, channel, errorMessage, originatingConfiguration }) {
|
|
113
140
|
const handler = this.handlers.values().next().value;
|
|
114
141
|
const configuration = originatingConfiguration || handler?.configuration;
|
|
115
|
-
|
|
142
|
+
const previousTail = this.publishQueuesByChannel.get(channel) || Promise.resolve();
|
|
143
|
+
const tail = previousTail
|
|
116
144
|
.then(async () => {
|
|
117
145
|
if (configuration) {
|
|
118
146
|
return await configuration.withoutCurrentConnectionContexts(callback);
|
|
@@ -123,6 +151,16 @@ export class VelociousHttpServerWebsocketEventsHost {
|
|
|
123
151
|
console.error(errorMessage, error);
|
|
124
152
|
throw error;
|
|
125
153
|
});
|
|
154
|
+
this.publishQueuesByChannel.set(channel, tail);
|
|
155
|
+
// Remove the tail once it settles successfully, but only when it is
|
|
156
|
+
// still the newest tail — an older settled tail must never delete a
|
|
157
|
+
// newer one. A rejected tail stays in the map so the channel remains
|
|
158
|
+
// poisoned and observable through awaitPendingBroadcasts.
|
|
159
|
+
tail.then(() => {
|
|
160
|
+
if (this.publishQueuesByChannel.get(channel) === tail) {
|
|
161
|
+
this.publishQueuesByChannel.delete(channel);
|
|
162
|
+
}
|
|
163
|
+
}, () => undefined);
|
|
126
164
|
}
|
|
127
165
|
/**
|
|
128
166
|
* Runs persist v2 event if needed.
|
|
@@ -171,4 +209,4 @@ export class VelociousHttpServerWebsocketEventsHost {
|
|
|
171
209
|
}
|
|
172
210
|
const websocketEventsHost = new VelociousHttpServerWebsocketEventsHost();
|
|
173
211
|
export default websocketEventsHost;
|
|
174
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoid2Vic29ja2V0LWV2ZW50cy1ob3N0LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vc3JjL2h0dHAtc2VydmVyL3dlYnNvY2tldC1ldmVudHMtaG9zdC5qcyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxZQUFZO0FBRVosT0FBTyxFQUFDLHNDQUFzQyxFQUFDLE1BQU0sZ0NBQWdDLENBQUE7QUFFckYsTUFBTSxPQUFPLHNDQUFzQztJQUNqRDtRQUNFOztzRUFFOEQ7UUFDOUQsSUFBSSxDQUFDLFFBQVEsR0FBRyxJQUFJLEdBQUcsRUFBRSxDQUFBO1FBQ3pCOztrSEFFMEc7UUFDMUcsSUFBSSxDQUFDLGdDQUFnQyxHQUFHLElBQUksR0FBRyxFQUFFLENBQUE7UUFDakQsSUFBSSxDQUFDLFlBQVksR0FBRyxPQUFPLENBQUMsT0FBTyxFQUFFLENBQUE7SUFDdkMsQ0FBQztJQUVEOzs7Ozs7O09BT0c7SUFDSCxLQUFLLENBQUMsc0JBQXNCO1FBQzFCLE1BQU0sSUFBSSxDQUFDLFlBQVksQ0FBQTtJQUN6QixDQUFDO0lBRUQ7Ozs7T0FJRztJQUNILFFBQVEsQ0FBQyxPQUFPO1FBQ2QsSUFBSSxDQUFDLFFBQVEsQ0FBQyxHQUFHLENBQUMsT0FBTyxDQUFDLENBQUE7UUFDMUIsSUFBSSxxQkFBcUIsR0FBRyxJQUFJLENBQUMsZ0NBQWdDLENBQUMsR0FBRyxDQUFDLE9BQU8sQ0FBQyxhQUFhLENBQUMsQ0FBQTtRQUU1RixJQUFJLENBQUMscUJBQXFCLEVBQUUsQ0FBQztZQUMzQixxQkFBcUIsR0FBRyxJQUFJLEdBQUcsRUFBRSxDQUFBO1lBQ2pDLElBQUksQ0FBQyxnQ0FBZ0MsQ0FBQyxHQUFHLENBQUMsT0FBTyxDQUFDLGFBQWEsRUFBRSxxQkFBcUIsQ0FBQyxDQUFBO1FBQ3pGLENBQUM7UUFFRCxxQkFBcUIsQ0FBQyxHQUFHLENBQUMsT0FBTyxDQUFDLENBQUE7UUFFbEMsT0FBTyxHQUFHLEVBQUU7WUFDVixJQUFJLENBQUMsUUFBUSxDQUFDLE1BQU0sQ0FBQyxPQUFPLENBQUMsQ0FBQTtZQUM3QixxQkFBcUIsQ0FBQyxNQUFNLENBQUMsT0FBTyxDQUFDLENBQUE7WUFFckMsSUFBSSxxQkFBcUIsQ0FBQyxJQUFJLEtBQUssQ0FBQyxFQUFFLENBQUM7Z0JBQ3JDLElBQUksQ0FBQyxnQ0FBZ0MsQ0FBQyxNQUFNLENBQUMsT0FBTyxDQUFDLGFBQWEsQ0FBQyxDQUFBO1lBQ3JFLENBQUM7UUFDSCxDQUFDLENBQUE7SUFDSCxDQUFDO0lBRUQ7Ozs7O09BS0c7SUFDSCxPQUFPLENBQUMsYUFBYSxFQUFFLFVBQVU7UUFDL0IsTUFBTSxXQUFXLEdBQUcsT0FBTyxhQUFhLEtBQUssUUFBUTtZQUNuRCxDQUFDLENBQUMsRUFBQyxPQUFPLEVBQUUsYUFBYSxFQUFFLE9BQU8sRUFBRSxVQUFVLEVBQUM7WUFDL0MsQ0FBQyxDQUFDLDRDQUE0QyxDQUFDLENBQUMsYUFBYSxDQUFDLENBQUE7UUFDaEUsTUFBTSxPQUFPLEdBQUcsV0FBVyxDQUFDLE9BQU8sQ0FBQTtRQUNuQyxNQUFNLE9BQU8sR0FBRyxXQUFXLENBQUMsT0FBTyxDQUFBO1FBRW5DLElBQUksQ0FBQyxhQUFhLENBQUMsS0FBSyxJQUFJLEVBQUU7WUFDNUIsTUFBTSxjQUFjLEdBQUcsTUFBTSxJQUFJLENBQUMscUJBQXFCLENBQUMsRUFBQyxPQUFPLEVBQUUsT0FBTyxFQUFDLENBQUMsQ0FBQTtZQUUzRSxLQUFLLE1BQU0sT0FBTyxJQUFJLElBQUksQ0FBQyxRQUFRLEVBQUUsQ0FBQztnQkFDcEMsT0FBTyxDQUFDLHNCQUFzQixDQUFDO29CQUM3QixPQUFPO29CQUNQLFNBQVMsRUFBRSxjQUFjLEVBQUUsU0FBUztvQkFDcEMsT0FBTyxFQUFFLGNBQWMsRUFBRSxFQUFFO29CQUMzQixPQUFPO2lCQUNSLENBQUMsQ0FBQTtZQUNKLENBQUM7UUFDSCxDQUFDLEVBQUUsbUNBQW1DLENBQUMsQ0FBQTtJQUN6QyxDQUFDO0lBRUQ7Ozs7Ozs7Ozs7T0FVRztJQUNILFdBQVcsQ0FBQyxFQUFDLElBQUksRUFBRSxlQUFlLEVBQUUsT0FBTyxFQUFFLGFBQWEsRUFBQztRQUN6RCwwREFBMEQ7UUFDMUQsZ0VBQWdFO1FBQ2hFLDhEQUE4RDtRQUM5RCxzREFBc0Q7UUFDdEQsSUFBSSxDQUFDLGFBQWEsQ0FBQyxLQUFLLElBQUksRUFBRTtZQUM1QixNQUFNLGNBQWMsR0FBRyxNQUFNLElBQUksQ0FBQyx1QkFBdUIsQ0FBQyxFQUFDLElBQUksRUFBRSxPQUFPLEVBQUUsYUFBYSxFQUFDLENBQUMsQ0FBQTtZQUN6RixNQUFNLGlCQUFpQixHQUFHLElBQUksR0FBRyxFQUFFLENBQUE7WUFFbkMsS0FBSyxNQUFNLE9BQU8sSUFBSSxJQUFJLENBQUMsZ0NBQWdDLENBQUMsR0FBRyxDQUFDLGFBQWEsQ0FBQyxJQUFJLEVBQUUsRUFBRSxDQUFDO2dCQUNyRixNQUFNLFdBQVcsR0FBRyxPQUFPLENBQUMsK0JBQStCLEVBQUUsQ0FBQTtnQkFFN0QsSUFBSSxpQkFBaUIsQ0FBQyxHQUFHLENBQUMsV0FBVyxDQUFDO29CQUFFLFNBQVE7Z0JBRWhELGlCQUFpQixDQUFDLEdBQUcsQ0FBQyxXQUFXLENBQUMsQ0FBQTtnQkFDbEMsT0FBTyxDQUFDLDRCQUE0QixDQUFDO29CQUNuQyxJQUFJO29CQUNKLGVBQWU7b0JBQ2YsT0FBTztvQkFDUCxPQUFPLEVBQUUsY0FBYyxFQUFFLEVBQUU7b0JBQzNCLFNBQVMsRUFBRSxjQUFjLEVBQUUsU0FBUztpQkFDckMsQ0FBQyxDQUFBO1lBQ0osQ0FBQztRQUNILENBQUMsRUFBRSxzQ0FBc0MsRUFBRSxhQUFhLENBQUMsQ0FBQTtJQUMzRCxDQUFDO0lBRUQ7Ozs7OztPQU1HO0lBQ0gsYUFBYSxDQUFDLFFBQVEsRUFBRSxZQUFZLEVBQUUsd0JBQXdCO1FBQzVELE1BQU0sT0FBTyxHQUFHLElBQUksQ0FBQyxRQUFRLENBQUMsTUFBTSxFQUFFLENBQUMsSUFBSSxFQUFFLENBQUMsS0FBSyxDQUFBO1FBQ25ELE1BQU0sYUFBYSxHQUFHLHdCQUF3QixJQUFJLE9BQU8sRUFBRSxhQUFhLENBQUE7UUFFeEUsSUFBSSxDQUFDLFlBQVksR0FBRyxJQUFJLENBQUMsWUFBWTthQUNsQyxJQUFJLENBQUMsS0FBSyxJQUFJLEVBQUU7WUFDZixJQUFJLGFBQWEsRUFBRSxDQUFDO2dCQUNsQixPQUFPLE1BQU0sYUFBYSxDQUFDLGdDQUFnQyxDQUFDLFFBQVEsQ0FBQyxDQUFBO1lBQ3ZFLENBQUM7WUFFRCxPQUFPLE1BQU0sUUFBUSxFQUFFLENBQUE7UUFDekIsQ0FBQyxDQUFDO2FBQ0QsS0FBSyxDQUFDLENBQUMsS0FBSyxFQUFFLEVBQUU7WUFDZixPQUFPLENBQUMsS0FBSyxDQUFDLFlBQVksRUFBRSxLQUFLLENBQUMsQ0FBQTtZQUNsQyxNQUFNLEtBQUssQ0FBQTtRQUNiLENBQUMsQ0FBQyxDQUFBO0lBQ04sQ0FBQztJQUVEOzs7Ozs7O09BT0c7SUFDSCxLQUFLLENBQUMsdUJBQXVCLENBQUMsRUFBQyxJQUFJLEVBQUUsT0FBTyxFQUFFLGFBQWEsRUFBQztRQUMxRCxPQUFPLE1BQU0sSUFBSSxDQUFDLDRCQUE0QixDQUFDLEVBQUMsT0FBTyxFQUFFLE9BQU8sRUFBRSxJQUFJLEVBQUUsYUFBYSxFQUFDLENBQUMsQ0FBQTtJQUN6RixDQUFDO0lBRUQ7Ozs7OztPQU1HO0lBQ0gsS0FBSyxDQUFDLHFCQUFxQixDQUFDLEVBQUMsT0FBTyxFQUFFLE9BQU8sRUFBQztRQUM1QyxPQUFPLE1BQU0sSUFBSSxDQUFDLDRCQUE0QixDQUFDLEVBQUMsT0FBTyxFQUFFLE9BQU8sRUFBQyxDQUFDLENBQUE7SUFDcEUsQ0FBQztJQUVEOzs7Ozs7O09BT0c7SUFDSCxLQUFLLENBQUMsNEJBQTRCLENBQUMsRUFBQyxPQUFPLEVBQUUsT0FBTyxFQUFFLGFBQWEsRUFBQztRQUNsRSxNQUFNLE9BQU8sR0FBRyxJQUFJLENBQUMsUUFBUSxDQUFDLE1BQU0sRUFBRSxDQUFDLElBQUksRUFBRSxDQUFDLEtBQUssQ0FBQTtRQUNuRCxNQUFNLGtCQUFrQixHQUFHLGFBQWEsSUFBSSxPQUFPLEVBQUUsYUFBYSxDQUFBO1FBRWxFLElBQUksQ0FBQyxrQkFBa0I7WUFBRSxPQUFPLElBQUksQ0FBQTtRQUVwQyxNQUFNLHNCQUFzQixHQUFHLHNDQUFzQyxDQUFDLGtCQUFrQixDQUFDLENBQUE7UUFDekYsTUFBTSxhQUFhLEdBQUcsTUFBTSxzQkFBc0IsQ0FBQyxvQkFBb0IsQ0FBQyxPQUFPLENBQUMsQ0FBQTtRQUVoRixJQUFJLENBQUMsYUFBYTtZQUFFLE9BQU8sSUFBSSxDQUFBO1FBRS9CLE1BQU0sY0FBYyxHQUFHLE1BQU0sc0JBQXNCLENBQUMsV0FBVyxDQUFDLEVBQUMsT0FBTyxFQUFFLE9BQU8sRUFBQyxDQUFDLENBQUE7UUFFbkYsT0FBTztZQUNMLFNBQVMsRUFBRSxjQUFjLENBQUMsU0FBUztZQUNuQyxFQUFFLEVBQUUsY0FBYyxDQUFDLEVBQUU7U0FDdEIsQ0FBQTtJQUNILENBQUM7Q0FDRjtBQUVELE1BQU0sbUJBQW1CLEdBQUcsSUFBSSxzQ0FBc0MsRUFBRSxDQUFBO0FBRXhFLGVBQWUsbUJBQW1CLENBQUEiLCJzb3VyY2VzQ29udGVudCI6WyIvLyBAdHMtY2hlY2tcblxuaW1wb3J0IHt3ZWJzb2NrZXRFdmVudExvZ1N0b3JlRm9yQ29uZmlndXJhdGlvbn0gZnJvbSBcIi4vd2Vic29ja2V0LWV2ZW50LWxvZy1zdG9yZS5qc1wiXG5cbmV4cG9ydCBjbGFzcyBWZWxvY2lvdXNIdHRwU2VydmVyV2Vic29ja2V0RXZlbnRzSG9zdCB7XG4gIGNvbnN0cnVjdG9yKCkge1xuICAgIC8qKlxuICAgICAqIE5hcnJvd3MgdGhlIHJ1bnRpbWUgdmFsdWUgdG8gdGhlIGRvY3VtZW50ZWQgdHlwZS5cbiAgICAgKiBAdHlwZSB7U2V0PGltcG9ydChcIi4vd29ya2VyLWhhbmRsZXIvaW5kZXguanNcIikuZGVmYXVsdD59ICovXG4gICAgdGhpcy5oYW5kbGVycyA9IG5ldyBTZXQoKVxuICAgIC8qKlxuICAgICAqIEJyb2FkY2FzdCBoYW5kbGVycyBncm91cGVkIGJ5IHRoZSBjb25maWd1cmF0aW9uIHRoYXQgb3ducyB0aGVtLlxuICAgICAqIEB0eXBlIHtNYXA8aW1wb3J0KFwiLi4vY29uZmlndXJhdGlvbi5qc1wiKS5kZWZhdWx0LCBTZXQ8aW1wb3J0KFwiLi93b3JrZXItaGFuZGxlci9pbmRleC5qc1wiKS5kZWZhdWx0Pj59ICovXG4gICAgdGhpcy5icm9hZGNhc3RIYW5kbGVyc0J5Q29uZmlndXJhdGlvbiA9IG5ldyBNYXAoKVxuICAgIHRoaXMucHVibGlzaFF1ZXVlID0gUHJvbWlzZS5yZXNvbHZlKClcbiAgfVxuXG4gIC8qKlxuICAgKiBSZXR1cm5zIGEgcHJvbWlzZSB0aGF0IHJlc29sdmVzIHdoZW4gYWxsIHBlbmRpbmcgcHVibGlzaC9icm9hZGNhc3RcbiAgICogb3BlcmF0aW9ucyBoYXZlIGNvbXBsZXRlZCAoaW5jbHVkaW5nIGV2ZW50LWxvZyBwZXJzaXN0ZW5jZSkuIFVzZWZ1bFxuICAgKiB3aGVuIGEgcmVxdWVzdCBoYW5kbGVyIG5lZWRzIHRvIGd1YXJhbnRlZSBpdHMgYnJvYWRjYXN0IGlzIHBlcnNpc3RlZFxuICAgKiBiZWZvcmUgcmVzcG9uZGluZyDigJQgd2l0aG91dCB0aGlzLCB0aGUgSFRUUCByZXNwb25zZSBjYW4gcmV0dXJuIGJlZm9yZVxuICAgKiB0aGUgYXN5bmMgZXZlbnQtbG9nIHdyaXRlIGZpbmlzaGVzLlxuICAgKiBAcmV0dXJucyB7UHJvbWlzZTx2b2lkPn1cbiAgICovXG4gIGFzeW5jIGF3YWl0UGVuZGluZ0Jyb2FkY2FzdHMoKSB7XG4gICAgYXdhaXQgdGhpcy5wdWJsaXNoUXVldWVcbiAgfVxuXG4gIC8qKlxuICAgKiBSdW5zIHJlZ2lzdGVyLlxuICAgKiBAcGFyYW0ge2ltcG9ydChcIi4vd29ya2VyLWhhbmRsZXIvaW5kZXguanNcIikuZGVmYXVsdH0gaGFuZGxlciAtIEhhbmRsZXIgaW5zdGFuY2UuXG4gICAqIEByZXR1cm5zIHsoKSA9PiB2b2lkfSAtIFRoZSByZWdpc3Rlci5cbiAgICovXG4gIHJlZ2lzdGVyKGhhbmRsZXIpIHtcbiAgICB0aGlzLmhhbmRsZXJzLmFkZChoYW5kbGVyKVxuICAgIGxldCBjb25maWd1cmF0aW9uSGFuZGxlcnMgPSB0aGlzLmJyb2FkY2FzdEhhbmRsZXJzQnlDb25maWd1cmF0aW9uLmdldChoYW5kbGVyLmNvbmZpZ3VyYXRpb24pXG5cbiAgICBpZiAoIWNvbmZpZ3VyYXRpb25IYW5kbGVycykge1xuICAgICAgY29uZmlndXJhdGlvbkhhbmRsZXJzID0gbmV3IFNldCgpXG4gICAgICB0aGlzLmJyb2FkY2FzdEhhbmRsZXJzQnlDb25maWd1cmF0aW9uLnNldChoYW5kbGVyLmNvbmZpZ3VyYXRpb24sIGNvbmZpZ3VyYXRpb25IYW5kbGVycylcbiAgICB9XG5cbiAgICBjb25maWd1cmF0aW9uSGFuZGxlcnMuYWRkKGhhbmRsZXIpXG5cbiAgICByZXR1cm4gKCkgPT4ge1xuICAgICAgdGhpcy5oYW5kbGVycy5kZWxldGUoaGFuZGxlcilcbiAgICAgIGNvbmZpZ3VyYXRpb25IYW5kbGVycy5kZWxldGUoaGFuZGxlcilcblxuICAgICAgaWYgKGNvbmZpZ3VyYXRpb25IYW5kbGVycy5zaXplID09PSAwKSB7XG4gICAgICAgIHRoaXMuYnJvYWRjYXN0SGFuZGxlcnNCeUNvbmZpZ3VyYXRpb24uZGVsZXRlKGhhbmRsZXIuY29uZmlndXJhdGlvbilcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogUnVucyBwdWJsaXNoLlxuICAgKiBAcGFyYW0ge29iamVjdCB8IHN0cmluZ30gY2hhbm5lbE9yQXJncyAtIENoYW5uZWwgbmFtZSBvciBvcHRpb25zIG9iamVjdC5cbiAgICogQHBhcmFtIHs/fSBbcGF5bG9hZEFyZ10gLSBQYXlsb2FkIGRhdGEgd2hlbiBjaGFubmVsIGlzIHBhc3NlZCBzZXBhcmF0ZWx5LlxuICAgKiBAcmV0dXJucyB7dm9pZH0gLSBObyByZXR1cm4gdmFsdWUuXG4gICAqL1xuICBwdWJsaXNoKGNoYW5uZWxPckFyZ3MsIHBheWxvYWRBcmcpIHtcbiAgICBjb25zdCBwdWJsaXNoQXJncyA9IHR5cGVvZiBjaGFubmVsT3JBcmdzID09PSBcInN0cmluZ1wiXG4gICAgICA/IHtjaGFubmVsOiBjaGFubmVsT3JBcmdzLCBwYXlsb2FkOiBwYXlsb2FkQXJnfVxuICAgICAgOiAvKiogQHR5cGUge3tjaGFubmVsOiBzdHJpbmcsIHBheWxvYWQ6ID99fSAqLyAoY2hhbm5lbE9yQXJncylcbiAgICBjb25zdCBjaGFubmVsID0gcHVibGlzaEFyZ3MuY2hhbm5lbFxuICAgIGNvbnN0IHBheWxvYWQgPSBwdWJsaXNoQXJncy5wYXlsb2FkXG5cbiAgICB0aGlzLl9xdWV1ZVB1Ymxpc2goYXN5bmMgKCkgPT4ge1xuICAgICAgY29uc3QgcGVyc2lzdGVkRXZlbnQgPSBhd2FpdCB0aGlzLl9wZXJzaXN0RXZlbnRJZk5lZWRlZCh7Y2hhbm5lbCwgcGF5bG9hZH0pXG5cbiAgICAgIGZvciAoY29uc3QgaGFuZGxlciBvZiB0aGlzLmhhbmRsZXJzKSB7XG4gICAgICAgIGhhbmRsZXIuZGlzcGF0Y2hXZWJzb2NrZXRFdmVudCh7XG4gICAgICAgICAgY2hhbm5lbCxcbiAgICAgICAgICBjcmVhdGVkQXQ6IHBlcnNpc3RlZEV2ZW50Py5jcmVhdGVkQXQsXG4gICAgICAgICAgZXZlbnRJZDogcGVyc2lzdGVkRXZlbnQ/LmlkLFxuICAgICAgICAgIHBheWxvYWRcbiAgICAgICAgfSlcbiAgICAgIH1cbiAgICB9LCBcIkZhaWxlZCB0byBwdWJsaXNoIHdlYnNvY2tldCBldmVudFwiKVxuICB9XG5cbiAgLyoqXG4gICAqIEZhbiBhIFYyIGNoYW5uZWwgYnJvYWRjYXN0IG91dCB0byBldmVyeSByZWdpc3RlcmVkIHdvcmtlciBoYW5kbGVyLlxuICAgKiBQZXJzaXN0cyB0aGUgZXZlbnQgdG8gdGhlIGV2ZW50LWxvZyBzdG9yZSAoaWYgdGhlIGNoYW5uZWwgaXMgbWFya2VkXG4gICAqIGludGVyZXN0ZWQpIHNvIGNsaWVudHMgY2FuIHJlc3VtZSBmcm9tIGEgYGxhc3RFdmVudElkYCBjaGVja3BvaW50LlxuICAgKiBAcGFyYW0ge29iamVjdH0gYXJncyAtIE9wdGlvbnMgb2JqZWN0LlxuICAgKiBAcGFyYW0ge3N0cmluZ30gYXJncy5jaGFubmVsIC0gQ2hhbm5lbCBuYW1lLlxuICAgKiBAcGFyYW0ge1JlY29yZDxzdHJpbmcsID8+fSBhcmdzLmJyb2FkY2FzdFBhcmFtcyAtIFJvdXRpbmcgZmlsdGVyIHBhcmFtcy5cbiAgICogQHBhcmFtIHs/fSBhcmdzLmJvZHkgLSBNZXNzYWdlIGJvZHkuXG4gICAqIEBwYXJhbSB7aW1wb3J0KFwiLi4vY29uZmlndXJhdGlvbi5qc1wiKS5kZWZhdWx0fSBhcmdzLmNvbmZpZ3VyYXRpb24gLSBPcmlnaW5hdGluZyBjb25maWd1cmF0aW9uLlxuICAgKiBAcmV0dXJucyB7dm9pZH1cbiAgICovXG4gIGJyb2FkY2FzdFYyKHtib2R5LCBicm9hZGNhc3RQYXJhbXMsIGNoYW5uZWwsIGNvbmZpZ3VyYXRpb259KSB7XG4gICAgLy8gQ2hhaW4gb250byBwdWJsaXNoUXVldWUgc28gcGVyc2lzdGVuY2UgY29tcGxldGVzIGJlZm9yZVxuICAgIC8vIHRoZSBuZXh0IGJyb2FkY2FzdCDigJQgd2l0aG91dCB0aGlzLCBhIHN1YnNjcmliZXIgdGhhdCBjb25uZWN0c1xuICAgIC8vIGltbWVkaWF0ZWx5IGFmdGVyIGEgYnJvYWRjYXN0IGNvdWxkIG1pc3MgdGhlIGp1c3QtcGVyc2lzdGVkXG4gICAgLy8gZXZlbnQgd2hlbiByZXBsYXlpbmcgZnJvbSBsYXN0RXZlbnRJZCBvbiBhIHNsb3cgREIuXG4gICAgdGhpcy5fcXVldWVQdWJsaXNoKGFzeW5jICgpID0+IHtcbiAgICAgIGNvbnN0IHBlcnNpc3RlZEV2ZW50ID0gYXdhaXQgdGhpcy5fcGVyc2lzdFYyRXZlbnRJZk5lZWRlZCh7Ym9keSwgY2hhbm5lbCwgY29uZmlndXJhdGlvbn0pXG4gICAgICBjb25zdCBkaXNwYXRjaGVkVGFyZ2V0cyA9IG5ldyBTZXQoKVxuXG4gICAgICBmb3IgKGNvbnN0IGhhbmRsZXIgb2YgdGhpcy5icm9hZGNhc3RIYW5kbGVyc0J5Q29uZmlndXJhdGlvbi5nZXQoY29uZmlndXJhdGlvbikgfHwgW10pIHtcbiAgICAgICAgY29uc3QgZGlzcGF0Y2hLZXkgPSBoYW5kbGVyLndlYnNvY2tldFYyQnJvYWRjYXN0RGlzcGF0Y2hLZXkoKVxuXG4gICAgICAgIGlmIChkaXNwYXRjaGVkVGFyZ2V0cy5oYXMoZGlzcGF0Y2hLZXkpKSBjb250aW51ZVxuXG4gICAgICAgIGRpc3BhdGNoZWRUYXJnZXRzLmFkZChkaXNwYXRjaEtleSlcbiAgICAgICAgaGFuZGxlci5kaXNwYXRjaFdlYnNvY2tldFYyQnJvYWRjYXN0KHtcbiAgICAgICAgICBib2R5LFxuICAgICAgICAgIGJyb2FkY2FzdFBhcmFtcyxcbiAgICAgICAgICBjaGFubmVsLFxuICAgICAgICAgIGV2ZW50SWQ6IHBlcnNpc3RlZEV2ZW50Py5pZCxcbiAgICAgICAgICBjcmVhdGVkQXQ6IHBlcnNpc3RlZEV2ZW50Py5jcmVhdGVkQXRcbiAgICAgICAgfSlcbiAgICAgIH1cbiAgICB9LCBcIkZhaWxlZCB0byBwZXJzaXN0L2Jyb2FkY2FzdCBWMiBldmVudFwiLCBjb25maWd1cmF0aW9uKVxuICB9XG5cbiAgLyoqXG4gICAqIFJ1bnMgcXVldWUgcHVibGlzaC5cbiAgICogQHBhcmFtIHsoKSA9PiBQcm9taXNlPHZvaWQ+fSBjYWxsYmFjayAtIFB1Ymxpc2ggd29yayB0byBydW4gaW4gb3JkZXIuXG4gICAqIEBwYXJhbSB7c3RyaW5nfSBlcnJvck1lc3NhZ2UgLSBNZXNzYWdlIGxvZ2dlZCB3aGVuIHB1Ymxpc2ggd29yayBmYWlscy5cbiAgICogQHBhcmFtIHtpbXBvcnQoXCIuLi9jb25maWd1cmF0aW9uLmpzXCIpLmRlZmF1bHR9IFtvcmlnaW5hdGluZ0NvbmZpZ3VyYXRpb25dIC0gQ29uZmlndXJhdGlvbiB3aG9zZSBjb250ZXh0IG93bnMgdGhlIHdvcmsuXG4gICAqIEByZXR1cm5zIHt2b2lkfVxuICAgKi9cbiAgX3F1ZXVlUHVibGlzaChjYWxsYmFjaywgZXJyb3JNZXNzYWdlLCBvcmlnaW5hdGluZ0NvbmZpZ3VyYXRpb24pIHtcbiAgICBjb25zdCBoYW5kbGVyID0gdGhpcy5oYW5kbGVycy52YWx1ZXMoKS5uZXh0KCkudmFsdWVcbiAgICBjb25zdCBjb25maWd1cmF0aW9uID0gb3JpZ2luYXRpbmdDb25maWd1cmF0aW9uIHx8IGhhbmRsZXI/LmNvbmZpZ3VyYXRpb25cblxuICAgIHRoaXMucHVibGlzaFF1ZXVlID0gdGhpcy5wdWJsaXNoUXVldWVcbiAgICAgIC50aGVuKGFzeW5jICgpID0+IHtcbiAgICAgICAgaWYgKGNvbmZpZ3VyYXRpb24pIHtcbiAgICAgICAgICByZXR1cm4gYXdhaXQgY29uZmlndXJhdGlvbi53aXRob3V0Q3VycmVudENvbm5lY3Rpb25Db250ZXh0cyhjYWxsYmFjaylcbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiBhd2FpdCBjYWxsYmFjaygpXG4gICAgICB9KVxuICAgICAgLmNhdGNoKChlcnJvcikgPT4ge1xuICAgICAgICBjb25zb2xlLmVycm9yKGVycm9yTWVzc2FnZSwgZXJyb3IpXG4gICAgICAgIHRocm93IGVycm9yXG4gICAgICB9KVxuICB9XG5cbiAgLyoqXG4gICAqIFJ1bnMgcGVyc2lzdCB2MiBldmVudCBpZiBuZWVkZWQuXG4gICAqIEBwYXJhbSB7b2JqZWN0fSBhcmdzIC0gT3B0aW9ucy5cbiAgICogQHBhcmFtIHs/fSBhcmdzLmJvZHkgLSBFdmVudCBib2R5LlxuICAgKiBAcGFyYW0ge3N0cmluZ30gYXJncy5jaGFubmVsIC0gQ2hhbm5lbCBuYW1lLlxuICAgKiBAcGFyYW0ge2ltcG9ydChcIi4uL2NvbmZpZ3VyYXRpb24uanNcIikuZGVmYXVsdH0gYXJncy5jb25maWd1cmF0aW9uIC0gT3JpZ2luYXRpbmcgY29uZmlndXJhdGlvbi5cbiAgICogQHJldHVybnMge1Byb21pc2U8e2NyZWF0ZWRBdDogc3RyaW5nLCBpZDogc3RyaW5nfSB8IG51bGw+fSAtIFBlcnNpc3RlZCBldmVudCBtZXRhZGF0YSB3aGVuIHN0b3JhZ2UgaXMgZW5hYmxlZC5cbiAgICovXG4gIGFzeW5jIF9wZXJzaXN0VjJFdmVudElmTmVlZGVkKHtib2R5LCBjaGFubmVsLCBjb25maWd1cmF0aW9ufSkge1xuICAgIHJldHVybiBhd2FpdCB0aGlzLl9wZXJzaXN0Q2hhbm5lbEV2ZW50SWZOZWVkZWQoe2NoYW5uZWwsIHBheWxvYWQ6IGJvZHksIGNvbmZpZ3VyYXRpb259KVxuICB9XG5cbiAgLyoqXG4gICAqIFJ1bnMgcGVyc2lzdCBldmVudCBpZiBuZWVkZWQuXG4gICAqIEBwYXJhbSB7b2JqZWN0fSBhcmdzIC0gT3B0aW9ucyBvYmplY3QuXG4gICAqIEBwYXJhbSB7c3RyaW5nfSBhcmdzLmNoYW5uZWwgLSBDaGFubmVsIG5hbWUuXG4gICAqIEBwYXJhbSB7P30gYXJncy5wYXlsb2FkIC0gUGF5bG9hZCBkYXRhLlxuICAgKiBAcmV0dXJucyB7UHJvbWlzZTx7Y3JlYXRlZEF0OiBzdHJpbmcsIGlkOiBzdHJpbmd9IHwgbnVsbD59IC0gUGVyc2lzdGVkIGV2ZW50IG1ldGFkYXRhLlxuICAgKi9cbiAgYXN5bmMgX3BlcnNpc3RFdmVudElmTmVlZGVkKHtjaGFubmVsLCBwYXlsb2FkfSkge1xuICAgIHJldHVybiBhd2FpdCB0aGlzLl9wZXJzaXN0Q2hhbm5lbEV2ZW50SWZOZWVkZWQoe2NoYW5uZWwsIHBheWxvYWR9KVxuICB9XG5cbiAgLyoqXG4gICAqIFJ1bnMgcGVyc2lzdCBjaGFubmVsIGV2ZW50IGlmIG5lZWRlZC5cbiAgICogQHBhcmFtIHtvYmplY3R9IGFyZ3MgLSBPcHRpb25zIG9iamVjdC5cbiAgICogQHBhcmFtIHtzdHJpbmd9IGFyZ3MuY2hhbm5lbCAtIENoYW5uZWwgbmFtZS5cbiAgICogQHBhcmFtIHs/fSBhcmdzLnBheWxvYWQgLSBQYXlsb2FkIGRhdGEuXG4gICAqIEBwYXJhbSB7aW1wb3J0KFwiLi4vY29uZmlndXJhdGlvbi5qc1wiKS5kZWZhdWx0fSBbYXJncy5jb25maWd1cmF0aW9uXSAtIENvbmZpZ3VyYXRpb24gb3duaW5nIHRoZSBldmVudCBzdG9yZS5cbiAgICogQHJldHVybnMge1Byb21pc2U8e2NyZWF0ZWRBdDogc3RyaW5nLCBpZDogc3RyaW5nfSB8IG51bGw+fSAtIFBlcnNpc3RlZCBldmVudCBtZXRhZGF0YS5cbiAgICovXG4gIGFzeW5jIF9wZXJzaXN0Q2hhbm5lbEV2ZW50SWZOZWVkZWQoe2NoYW5uZWwsIHBheWxvYWQsIGNvbmZpZ3VyYXRpb259KSB7XG4gICAgY29uc3QgaGFuZGxlciA9IHRoaXMuaGFuZGxlcnMudmFsdWVzKCkubmV4dCgpLnZhbHVlXG4gICAgY29uc3QgZXZlbnRDb25maWd1cmF0aW9uID0gY29uZmlndXJhdGlvbiB8fCBoYW5kbGVyPy5jb25maWd1cmF0aW9uXG5cbiAgICBpZiAoIWV2ZW50Q29uZmlndXJhdGlvbikgcmV0dXJuIG51bGxcblxuICAgIGNvbnN0IHdlYnNvY2tldEV2ZW50TG9nU3RvcmUgPSB3ZWJzb2NrZXRFdmVudExvZ1N0b3JlRm9yQ29uZmlndXJhdGlvbihldmVudENvbmZpZ3VyYXRpb24pXG4gICAgY29uc3Qgc2hvdWxkUGVyc2lzdCA9IGF3YWl0IHdlYnNvY2tldEV2ZW50TG9nU3RvcmUuc2hvdWxkUGVyc2lzdENoYW5uZWwoY2hhbm5lbClcblxuICAgIGlmICghc2hvdWxkUGVyc2lzdCkgcmV0dXJuIG51bGxcblxuICAgIGNvbnN0IHBlcnNpc3RlZEV2ZW50ID0gYXdhaXQgd2Vic29ja2V0RXZlbnRMb2dTdG9yZS5hcHBlbmRFdmVudCh7Y2hhbm5lbCwgcGF5bG9hZH0pXG5cbiAgICByZXR1cm4ge1xuICAgICAgY3JlYXRlZEF0OiBwZXJzaXN0ZWRFdmVudC5jcmVhdGVkQXQsXG4gICAgICBpZDogcGVyc2lzdGVkRXZlbnQuaWRcbiAgICB9XG4gIH1cbn1cblxuY29uc3Qgd2Vic29ja2V0RXZlbnRzSG9zdCA9IG5ldyBWZWxvY2lvdXNIdHRwU2VydmVyV2Vic29ja2V0RXZlbnRzSG9zdCgpXG5cbmV4cG9ydCBkZWZhdWx0IHdlYnNvY2tldEV2ZW50c0hvc3RcbiJdfQ==
|
|
212
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoid2Vic29ja2V0LWV2ZW50cy1ob3N0LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vc3JjL2h0dHAtc2VydmVyL3dlYnNvY2tldC1ldmVudHMtaG9zdC5qcyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxZQUFZO0FBRVosT0FBTyxFQUFDLHNDQUFzQyxFQUFDLE1BQU0sZ0NBQWdDLENBQUE7QUFFckYsTUFBTSxPQUFPLHNDQUFzQztJQUNqRDtRQUNFOztzRUFFOEQ7UUFDOUQsSUFBSSxDQUFDLFFBQVEsR0FBRyxJQUFJLEdBQUcsRUFBRSxDQUFBO1FBQ3pCOztrSEFFMEc7UUFDMUcsSUFBSSxDQUFDLGdDQUFnQyxHQUFHLElBQUksR0FBRyxFQUFFLENBQUE7UUFDakQ7Ozs7O2dEQUt3QztRQUN4QyxJQUFJLENBQUMsc0JBQXNCLEdBQUcsSUFBSSxHQUFHLEVBQUUsQ0FBQTtJQUN6QyxDQUFDO0lBRUQ7Ozs7Ozs7OztPQVNHO0lBQ0gsS0FBSyxDQUFDLHNCQUFzQjtRQUMxQixNQUFNLFFBQVEsR0FBRyxDQUFDLEdBQUcsSUFBSSxDQUFDLHNCQUFzQixDQUFDLE1BQU0sRUFBRSxDQUFDLENBQUE7UUFDMUQsTUFBTSxPQUFPLEdBQUcsTUFBTSxPQUFPLENBQUMsVUFBVSxDQUFDLFFBQVEsQ0FBQyxDQUFBO1FBRWxELEtBQUssTUFBTSxNQUFNLElBQUksT0FBTyxFQUFFLENBQUM7WUFDN0IsSUFBSSxNQUFNLENBQUMsTUFBTSxLQUFLLFVBQVU7Z0JBQUUsTUFBTSxNQUFNLENBQUMsTUFBTSxDQUFBO1FBQ3ZELENBQUM7SUFDSCxDQUFDO0lBRUQ7Ozs7T0FJRztJQUNILFFBQVEsQ0FBQyxPQUFPO1FBQ2QsSUFBSSxDQUFDLFFBQVEsQ0FBQyxHQUFHLENBQUMsT0FBTyxDQUFDLENBQUE7UUFDMUIsSUFBSSxxQkFBcUIsR0FBRyxJQUFJLENBQUMsZ0NBQWdDLENBQUMsR0FBRyxDQUFDLE9BQU8sQ0FBQyxhQUFhLENBQUMsQ0FBQTtRQUU1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LENBQUMsb0JBQW9CLENBQUMsT0FBTyxDQUFDLENBQUE7UUFFaEYsSUFBSSxDQUFDLGFBQWE7WUFBRSxPQUFPLElBQUksQ0FBQTtRQUUvQixNQUFNLGNBQWMsR0FBRyxNQUFNLHNCQUFzQixDQUFDLFdBQVcsQ0FBQyxFQUFDLE9BQU8sRUFBRSxPQUFPLEVBQUMsQ0FBQyxDQUFBO1FBRW5GLE9BQU87WUFDTCxTQUFTLEVBQUUsY0FBYyxDQUFDLFNBQVM7WUFDbkMsRUFBRSxFQUFFLGNBQWMsQ0FBQyxFQUFFO1NBQ3RCLENBQUE7SUFDSCxDQUFDO0NBQ0Y7QUFFRCxNQUFNLG1CQUFtQixHQUFHLElBQUksc0NBQXNDLEVBQUUsQ0FBQTtBQUV4RSxlQUFlLG1CQUFtQixDQUFBIiwic291cmNlc0NvbnRlbnQiOlsiLy8gQHRzLWNoZWNrXG5cbmltcG9ydCB7d2Vic29ja2V0RXZlbnRMb2dTdG9yZUZvckNvbmZpZ3VyYXRpb259IGZyb20gXCIuL3dlYnNvY2tldC1ldmVudC1sb2ctc3RvcmUuanNcIlxuXG5leHBvcnQgY2xhc3MgVmVsb2Npb3VzSHR0cFNlcnZlcldlYnNvY2tldEV2ZW50c0hvc3Qge1xuICBjb25zdHJ1Y3RvcigpIHtcbiAgICAvKipcbiAgICAgKiBOYXJyb3dzIHRoZSBydW50aW1lIHZhbHVlIHRvIHRoZSBkb2N1bWVudGVkIHR5cGUuXG4gICAgICogQHR5cGUge1NldDxpbXBvcnQoXCIuL3dvcmtlci1oYW5kbGVyL2luZGV4LmpzXCIpLmRlZmF1bHQ+fSAqL1xuICAgIHRoaXMuaGFuZGxlcnMgPSBuZXcgU2V0KClcbiAgICAvKipcbiAgICAgKiBCcm9hZGNhc3QgaGFuZGxlcnMgZ3JvdXBlZCBieSB0aGUgY29uZmlndXJhdGlvbiB0aGF0IG93bnMgdGhlbS5cbiAgICAgKiBAdHlwZSB7TWFwPGltcG9ydChcIi4uL2NvbmZpZ3VyYXRpb24uanNcIikuZGVmYXVsdCwgU2V0PGltcG9ydChcIi4vd29ya2VyLWhhbmRsZXIvaW5kZXguanNcIikuZGVmYXVsdD4+fSAqL1xuICAgIHRoaXMuYnJvYWRjYXN0SGFuZGxlcnNCeUNvbmZpZ3VyYXRpb24gPSBuZXcgTWFwKClcbiAgICAvKipcbiAgICAgKiBPcmRlcmVkIHB1Ymxpc2ggdGFpbHMga2V5ZWQgYnkgY2hhbm5lbC4gRWFjaCBjaGFubmVsIHBlcnNpc3RzIGFuZFxuICAgICAqIGRpc3BhdGNoZXMgYmVoaW5kIGl0cyBvd24gdGFpbCBzbyBhIHNsb3cgY2hhbm5lbCBjYW5ub3QgaGVhZC1vZi1saW5lXG4gICAgICogYmxvY2sgdW5yZWxhdGVkIGNoYW5uZWxzLiBBIHJlamVjdGVkIHRhaWwgc3RheXMgaW4gdGhlIG1hcCBzbyB0aGVcbiAgICAgKiBjaGFubmVsIHJlbWFpbnMgcG9pc29uZWQgYW5kIG9ic2VydmFibGUuXG4gICAgICogQHR5cGUge01hcDxzdHJpbmcsIFByb21pc2U8dm9pZD4+fSAqL1xuICAgIHRoaXMucHVibGlzaFF1ZXVlc0J5Q2hhbm5lbCA9IG5ldyBNYXAoKVxuICB9XG5cbiAgLyoqXG4gICAqIFJldHVybnMgYSBwcm9taXNlIHRoYXQgc2V0dGxlcyB3aGVuIGV2ZXJ5IGNoYW5uZWwgdGFpbCBwZW5kaW5nIGF0IGNhbGxcbiAgICogdGltZSBoYXMgc2V0dGxlZCAoaW5jbHVkaW5nIGV2ZW50LWxvZyBwZXJzaXN0ZW5jZSkuIFVzZWZ1bCB3aGVuIGFcbiAgICogcmVxdWVzdCBoYW5kbGVyIG5lZWRzIHRvIGd1YXJhbnRlZSBpdHMgYnJvYWRjYXN0IGlzIHBlcnNpc3RlZCBiZWZvcmVcbiAgICogcmVzcG9uZGluZyDigJQgd2l0aG91dCB0aGlzLCB0aGUgSFRUUCByZXNwb25zZSBjYW4gcmV0dXJuIGJlZm9yZSB0aGVcbiAgICogYXN5bmMgZXZlbnQtbG9nIHdyaXRlIGZpbmlzaGVzLiBUaGlzIGlzIGEgc25hcHNob3QgYmFycmllcjogd29ya1xuICAgKiBlbnF1ZXVlZCBhZnRlciB0aGUgc25hcHNob3QgaXMgbm90IGF3YWl0ZWQsIGFuZCB0aGUgZmlyc3QgcmVqZWN0aW9uIGluXG4gICAqIHNuYXBzaG90IG9yZGVyIGlzIHJldGhyb3duIGFmdGVyIGV2ZXJ5IHNuYXBzaG90dGVkIHRhaWwgaGFzIHNldHRsZWQuXG4gICAqIEByZXR1cm5zIHtQcm9taXNlPHZvaWQ+fVxuICAgKi9cbiAgYXN5bmMgYXdhaXRQZW5kaW5nQnJvYWRjYXN0cygpIHtcbiAgICBjb25zdCBzbmFwc2hvdCA9IFsuLi50aGlzLnB1Ymxpc2hRdWV1ZXNCeUNoYW5uZWwudmFsdWVzKCldXG4gICAgY29uc3QgcmVzdWx0cyA9IGF3YWl0IFByb21pc2UuYWxsU2V0dGxlZChzbmFwc2hvdClcblxuICAgIGZvciAoY29uc3QgcmVzdWx0IG9mIHJlc3VsdHMpIHtcbiAgICAgIGlmIChyZXN1bHQuc3RhdHVzID09PSBcInJlamVjdGVkXCIpIHRocm93IHJlc3VsdC5yZWFzb25cbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogUnVucyByZWdpc3Rlci5cbiAgICogQHBhcmFtIHtpbXBvcnQoXCIuL3dvcmtlci1oYW5kbGVyL2luZGV4LmpzXCIpLmRlZmF1bHR9IGhhbmRsZXIgLSBIYW5kbGVyIGluc3RhbmNlLlxuICAgKiBAcmV0dXJucyB7KCkgPT4gdm9pZH0gLSBUaGUgcmVnaXN0ZXIuXG4gICAqL1xuICByZWdpc3RlcihoYW5kbGVyKSB7XG4gICAgdGhpcy5oYW5kbGVycy5hZGQoaGFuZGxlcilcbiAgICBsZXQgY29uZmlndXJhdGlvbkhhbmRsZXJzID0gdGhpcy5icm9hZGNhc3RIYW5kbGVyc0J5Q29uZmlndXJhdGlvbi5nZXQoaGFuZGxlci5jb25maWd1cmF0aW9uKVxuXG4gICAgaWYgKCFjb25maWd1cmF0aW9uSGFuZGxlcnMpIHtcbiAgICAgIGNvbmZpZ3VyYXRpb25IYW5kbGVycyA9IG5ldyBTZXQoKVxuICAgICAgdGhpcy5icm9hZGNhc3RIYW5kbGVyc0J5Q29uZmlndXJhdGlvbi5zZXQoaGFuZGxlci5jb25maWd1cmF0aW9uLCBjb25maWd1cmF0aW9uSGFuZGxlcnMpXG4gICAgfVxuXG4gICAgY29uZmlndXJhdGlvbkhhbmRsZXJzLmFkZChoYW5kbGVyKVxuXG4gICAgcmV0dXJuICgpID0+IHtcbiAgICAgIHRoaXMuaGFuZGxlcnMuZGVsZXRlKGhhbmRsZXIpXG4gICAgICBjb25maWd1cmF0aW9uSGFuZGxlcnMuZGVsZXRlKGhhbmRsZXIpXG5cbiAgICAgIGlmIChjb25maWd1cmF0aW9uSGFuZGxlcnMuc2l6ZSA9PT0gMCkge1xuICAgICAgICB0aGlzLmJyb2FkY2FzdEhhbmRsZXJzQnlDb25maWd1cmF0aW9uLmRlbGV0ZShoYW5kbGVyLmNvbmZpZ3VyYXRpb24pXG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIFJ1bnMgcHVibGlzaC5cbiAgICogQHBhcmFtIHtvYmplY3QgfCBzdHJpbmd9IGNoYW5uZWxPckFyZ3MgLSBDaGFubmVsIG5hbWUgb3Igb3B0aW9ucyBvYmplY3QuXG4gICAqIEBwYXJhbSB7P30gW3BheWxvYWRBcmddIC0gUGF5bG9hZCBkYXRhIHdoZW4gY2hhbm5lbCBpcyBwYXNzZWQgc2VwYXJhdGVseS5cbiAgICogQHJldHVybnMge3ZvaWR9IC0gTm8gcmV0dXJuIHZhbHVlLlxuICAgKi9cbiAgcHVibGlzaChjaGFubmVsT3JBcmdzLCBwYXlsb2FkQXJnKSB7XG4gICAgY29uc3QgcHVibGlzaEFyZ3MgPSB0eXBlb2YgY2hhbm5lbE9yQXJncyA9PT0gXCJzdHJpbmdcIlxuICAgICAgPyB7Y2hhbm5lbDogY2hhbm5lbE9yQXJncywgcGF5bG9hZDogcGF5bG9hZEFyZ31cbiAgICAgIDogLyoqIEB0eXBlIHt7Y2hhbm5lbDogc3RyaW5nLCBwYXlsb2FkOiA/fX0gKi8gKGNoYW5uZWxPckFyZ3MpXG4gICAgY29uc3QgY2hhbm5lbCA9IHB1Ymxpc2hBcmdzLmNoYW5uZWxcbiAgICBjb25zdCBwYXlsb2FkID0gcHVibGlzaEFyZ3MucGF5bG9hZFxuXG4gICAgdGhpcy5fcXVldWVQdWJsaXNoKHtcbiAgICAgIGNhbGxiYWNrOiBhc3luYyAoKSA9PiB7XG4gICAgICAgIGNvbnN0IHBlcnNpc3RlZEV2ZW50ID0gYXdhaXQgdGhpcy5fcGVyc2lzdEV2ZW50SWZOZWVkZWQoe2NoYW5uZWwsIHBheWxvYWR9KVxuXG4gICAgICAgIGZvciAoY29uc3QgaGFuZGxlciBvZiB0aGlzLmhhbmRsZXJzKSB7XG4gICAgICAgICAgaGFuZGxlci5kaXNwYXRjaFdlYnNvY2tldEV2ZW50KHtcbiAgICAgICAgICAgIGNoYW5uZWwsXG4gICAgICAgICAgICBjcmVhdGVkQXQ6IHBlcnNpc3RlZEV2ZW50Py5jcmVhdGVkQXQsXG4gICAgICAgICAgICBldmVudElkOiBwZXJzaXN0ZWRFdmVudD8uaWQsXG4gICAgICAgICAgICBwYXlsb2FkXG4gICAgICAgICAgfSlcbiAgICAgICAgfVxuICAgICAgfSxcbiAgICAgIGNoYW5uZWwsXG4gICAgICBlcnJvck1lc3NhZ2U6IFwiRmFpbGVkIHRvIHB1Ymxpc2ggd2Vic29ja2V0IGV2ZW50XCJcbiAgICB9KVxuICB9XG5cbiAgLyoqXG4gICAqIEZhbiBhIFYyIGNoYW5uZWwgYnJvYWRjYXN0IG91dCB0byBldmVyeSByZWdpc3RlcmVkIHdvcmtlciBoYW5kbGVyLlxuICAgKiBQZXJzaXN0cyB0aGUgZXZlbnQgdG8gdGhlIGV2ZW50LWxvZyBzdG9yZSAoaWYgdGhlIGNoYW5uZWwgaXMgbWFya2VkXG4gICAqIGludGVyZXN0ZWQpIHNvIGNsaWVudHMgY2FuIHJlc3VtZSBmcm9tIGEgYGxhc3RFdmVudElkYCBjaGVja3BvaW50LlxuICAgKiBAcGFyYW0ge29iamVjdH0gYXJncyAtIE9wdGlvbnMgb2JqZWN0LlxuICAgKiBAcGFyYW0ge3N0cmluZ30gYXJncy5jaGFubmVsIC0gQ2hhbm5lbCBuYW1lLlxuICAgKiBAcGFyYW0ge1JlY29yZDxzdHJpbmcsID8+fSBhcmdzLmJyb2FkY2FzdFBhcmFtcyAtIFJvdXRpbmcgZmlsdGVyIHBhcmFtcy5cbiAgICogQHBhcmFtIHs/fSBhcmdzLmJvZHkgLSBNZXNzYWdlIGJvZHkuXG4gICAqIEBwYXJhbSB7aW1wb3J0KFwiLi4vY29uZmlndXJhdGlvbi5qc1wiKS5kZWZhdWx0fSBhcmdzLmNvbmZpZ3VyYXRpb24gLSBPcmlnaW5hdGluZyBjb25maWd1cmF0aW9uLlxuICAgKiBAcmV0dXJucyB7dm9pZH1cbiAgICovXG4gIGJyb2FkY2FzdFYyKHtib2R5LCBicm9hZGNhc3RQYXJhbXMsIGNoYW5uZWwsIGNvbmZpZ3VyYXRpb259KSB7XG4gICAgLy8gQ2hhaW4gb250byB0aGUgY2hhbm5lbCdzIG93biBwdWJsaXNoIHRhaWwgc28gcGVyc2lzdGVuY2UgY29tcGxldGVzXG4gICAgLy8gYmVmb3JlIHRoZSBuZXh0IGJyb2FkY2FzdCBvbiB0aGF0IHNhbWUgY2hhbm5lbCDigJQgd2l0aG91dCB0aGlzLCBhXG4gICAgLy8gc3Vic2NyaWJlciB0aGF0IGNvbm5lY3RzIGltbWVkaWF0ZWx5IGFmdGVyIGEgYnJvYWRjYXN0IGNvdWxkIG1pc3MgdGhlXG4gICAgLy8ganVzdC1wZXJzaXN0ZWQgZXZlbnQgd2hlbiByZXBsYXlpbmcgZnJvbSBsYXN0RXZlbnRJZCBvbiBhIHNsb3cgREIuXG4gICAgLy8gT3RoZXIgY2hhbm5lbHMgY2hhaW4gb250byB0aGVpciBvd24gdGFpbHMgYW5kIGFyZSBub3QgZGVsYXllZC5cbiAgICB0aGlzLl9xdWV1ZVB1Ymxpc2goe1xuICAgICAgY2FsbGJhY2s6IGFzeW5jICgpID0+IHtcbiAgICAgICAgY29uc3QgcGVyc2lzdGVkRXZlbnQgPSBhd2FpdCB0aGlzLl9wZXJzaXN0VjJFdmVudElmTmVlZGVkKHtib2R5LCBjaGFubmVsLCBjb25maWd1cmF0aW9ufSlcbiAgICAgICAgY29uc3QgZGlzcGF0Y2hlZFRhcmdldHMgPSBuZXcgU2V0KClcblxuICAgICAgICBmb3IgKGNvbnN0IGhhbmRsZXIgb2YgdGhpcy5icm9hZGNhc3RIYW5kbGVyc0J5Q29uZmlndXJhdGlvbi5nZXQoY29uZmlndXJhdGlvbikgfHwgW10pIHtcbiAgICAgICAgICBjb25zdCBkaXNwYXRjaEtleSA9IGhhbmRsZXIud2Vic29ja2V0VjJCcm9hZGNhc3REaXNwYXRjaEtleSgpXG5cbiAgICAgICAgICBpZiAoZGlzcGF0Y2hlZFRhcmdldHMuaGFzKGRpc3BhdGNoS2V5KSkgY29udGludWVcblxuICAgICAgICAgIGRpc3BhdGNoZWRUYXJnZXRzLmFkZChkaXNwYXRjaEtleSlcbiAgICAgICAgICBoYW5kbGVyLmRpc3BhdGNoV2Vic29ja2V0VjJCcm9hZGNhc3Qoe1xuICAgICAgICAgICAgYm9keSxcbiAgICAgICAgICAgIGJyb2FkY2FzdFBhcmFtcyxcbiAgICAgICAgICAgIGNoYW5uZWwsXG4gICAgICAgICAgICBldmVudElkOiBwZXJzaXN0ZWRFdmVudD8uaWQsXG4gICAgICAgICAgICBjcmVhdGVkQXQ6IHBlcnNpc3RlZEV2ZW50Py5jcmVhdGVkQXRcbiAgICAgICAgICB9KVxuICAgICAgICB9XG4gICAgICB9LFxuICAgICAgY2hhbm5lbCxcbiAgICAgIGVycm9yTWVzc2FnZTogXCJGYWlsZWQgdG8gcGVyc2lzdC9icm9hZGNhc3QgVjIgZXZlbnRcIixcbiAgICAgIG9yaWdpbmF0aW5nQ29uZmlndXJhdGlvbjogY29uZmlndXJhdGlvblxuICAgIH0pXG4gIH1cblxuICAvKipcbiAgICogUXVldWVzIHB1Ymxpc2ggd29yayBiZWhpbmQgdGhlIGNoYW5uZWwncyBvd24gb3JkZXJlZCB0YWlsIHNvIG9ubHkgd29ya1xuICAgKiBmb3IgdGhlIHNhbWUgY2hhbm5lbCBzZXJpYWxpemVzIOKAlCBhIHNsb3cgb3IgZmFpbGVkIGNoYW5uZWwgbmV2ZXJcbiAgICogaGVhZC1vZi1saW5lIGJsb2NrcyB1bnJlbGF0ZWQgY2hhbm5lbHMuXG4gICAqIEBwYXJhbSB7b2JqZWN0fSBhcmdzIC0gT3B0aW9ucyBvYmplY3QuXG4gICAqIEBwYXJhbSB7KCkgPT4gUHJvbWlzZTx2b2lkPn0gYXJncy5jYWxsYmFjayAtIFB1Ymxpc2ggd29yayB0byBydW4gaW4gY2hhbm5lbCBvcmRlci5cbiAgICogQHBhcmFtIHtzdHJpbmd9IGFyZ3MuY2hhbm5lbCAtIENoYW5uZWwgd2hvc2Ugb3JkZXJlZCB0YWlsIHRoZSB3b3JrIGNoYWlucyBvbnRvLlxuICAgKiBAcGFyYW0ge3N0cmluZ30gYXJncy5lcnJvck1lc3NhZ2UgLSBNZXNzYWdlIGxvZ2dlZCB3aGVuIHB1Ymxpc2ggd29yayBmYWlscy5cbiAgICogQHBhcmFtIHtpbXBvcnQoXCIuLi9jb25maWd1cmF0aW9uLmpzXCIpLmRlZmF1bHR9IFthcmdzLm9yaWdpbmF0aW5nQ29uZmlndXJhdGlvbl0gLSBDb25maWd1cmF0aW9uIHdob3NlIGNvbnRleHQgb3ducyB0aGUgd29yay5cbiAgICogQHJldHVybnMge3ZvaWR9XG4gICAqL1xuICBfcXVldWVQdWJsaXNoKHtjYWxsYmFjaywgY2hhbm5lbCwgZXJyb3JNZXNzYWdlLCBvcmlnaW5hdGluZ0NvbmZpZ3VyYXRpb259KSB7XG4gICAgY29uc3QgaGFuZGxlciA9IHRoaXMuaGFuZGxlcnMudmFsdWVzKCkubmV4dCgpLnZhbHVlXG4gICAgY29uc3QgY29uZmlndXJhdGlvbiA9IG9yaWdpbmF0aW5nQ29uZmlndXJhdGlvbiB8fCBoYW5kbGVyPy5jb25maWd1cmF0aW9uXG4gICAgY29uc3QgcHJldmlvdXNUYWlsID0gdGhpcy5wdWJsaXNoUXVldWVzQnlDaGFubmVsLmdldChjaGFubmVsKSB8fCBQcm9taXNlLnJlc29sdmUoKVxuXG4gICAgY29uc3QgdGFpbCA9IHByZXZpb3VzVGFpbFxuICAgICAgLnRoZW4oYXN5bmMgKCkgPT4ge1xuICAgICAgICBpZiAoY29uZmlndXJhdGlvbikge1xuICAgICAgICAgIHJldHVybiBhd2FpdCBjb25maWd1cmF0aW9uLndpdGhvdXRDdXJyZW50Q29ubmVjdGlvbkNvbnRleHRzKGNhbGxiYWNrKVxuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIGF3YWl0IGNhbGxiYWNrKClcbiAgICAgIH0pXG4gICAgICAuY2F0Y2goKGVycm9yKSA9PiB7XG4gICAgICAgIGNvbnNvbGUuZXJyb3IoZXJyb3JNZXNzYWdlLCBlcnJvcilcbiAgICAgICAgdGhyb3cgZXJyb3JcbiAgICAgIH0pXG5cbiAgICB0aGlzLnB1Ymxpc2hRdWV1ZXNCeUNoYW5uZWwuc2V0KGNoYW5uZWwsIHRhaWwpXG5cbiAgICAvLyBSZW1vdmUgdGhlIHRhaWwgb25jZSBpdCBzZXR0bGVzIHN1Y2Nlc3NmdWxseSwgYnV0IG9ubHkgd2hlbiBpdCBpc1xuICAgIC8vIHN0aWxsIHRoZSBuZXdlc3QgdGFpbCDigJQgYW4gb2xkZXIgc2V0dGxlZCB0YWlsIG11c3QgbmV2ZXIgZGVsZXRlIGFcbiAgICAvLyBuZXdlciBvbmUuIEEgcmVqZWN0ZWQgdGFpbCBzdGF5cyBpbiB0aGUgbWFwIHNvIHRoZSBjaGFubmVsIHJlbWFpbnNcbiAgICAvLyBwb2lzb25lZCBhbmQgb2JzZXJ2YWJsZSB0aHJvdWdoIGF3YWl0UGVuZGluZ0Jyb2FkY2FzdHMuXG4gICAgdGFpbC50aGVuKFxuICAgICAgKCkgPT4ge1xuICAgICAgICBpZiAodGhpcy5wdWJsaXNoUXVldWVzQnlDaGFubmVsLmdldChjaGFubmVsKSA9PT0gdGFpbCkge1xuICAgICAgICAgIHRoaXMucHVibGlzaFF1ZXVlc0J5Q2hhbm5lbC5kZWxldGUoY2hhbm5lbClcbiAgICAgICAgfVxuICAgICAgfSxcbiAgICAgICgpID0+IHVuZGVmaW5lZFxuICAgIClcbiAgfVxuXG4gIC8qKlxuICAgKiBSdW5zIHBlcnNpc3QgdjIgZXZlbnQgaWYgbmVlZGVkLlxuICAgKiBAcGFyYW0ge29iamVjdH0gYXJncyAtIE9wdGlvbnMuXG4gICAqIEBwYXJhbSB7P30gYXJncy5ib2R5IC0gRXZlbnQgYm9keS5cbiAgICogQHBhcmFtIHtzdHJpbmd9IGFyZ3MuY2hhbm5lbCAtIENoYW5uZWwgbmFtZS5cbiAgICogQHBhcmFtIHtpbXBvcnQoXCIuLi9jb25maWd1cmF0aW9uLmpzXCIpLmRlZmF1bHR9IGFyZ3MuY29uZmlndXJhdGlvbiAtIE9yaWdpbmF0aW5nIGNvbmZpZ3VyYXRpb24uXG4gICAqIEByZXR1cm5zIHtQcm9taXNlPHtjcmVhdGVkQXQ6IHN0cmluZywgaWQ6IHN0cmluZ30gfCBudWxsPn0gLSBQZXJzaXN0ZWQgZXZlbnQgbWV0YWRhdGEgd2hlbiBzdG9yYWdlIGlzIGVuYWJsZWQuXG4gICAqL1xuICBhc3luYyBfcGVyc2lzdFYyRXZlbnRJZk5lZWRlZCh7Ym9keSwgY2hhbm5lbCwgY29uZmlndXJhdGlvbn0pIHtcbiAgICByZXR1cm4gYXdhaXQgdGhpcy5fcGVyc2lzdENoYW5uZWxFdmVudElmTmVlZGVkKHtjaGFubmVsLCBwYXlsb2FkOiBib2R5LCBjb25maWd1cmF0aW9ufSlcbiAgfVxuXG4gIC8qKlxuICAgKiBSdW5zIHBlcnNpc3QgZXZlbnQgaWYgbmVlZGVkLlxuICAgKiBAcGFyYW0ge29iamVjdH0gYXJncyAtIE9wdGlvbnMgb2JqZWN0LlxuICAgKiBAcGFyYW0ge3N0cmluZ30gYXJncy5jaGFubmVsIC0gQ2hhbm5lbCBuYW1lLlxuICAgKiBAcGFyYW0gez99IGFyZ3MucGF5bG9hZCAtIFBheWxvYWQgZGF0YS5cbiAgICogQHJldHVybnMge1Byb21pc2U8e2NyZWF0ZWRBdDogc3RyaW5nLCBpZDogc3RyaW5nfSB8IG51bGw+fSAtIFBlcnNpc3RlZCBldmVudCBtZXRhZGF0YS5cbiAgICovXG4gIGFzeW5jIF9wZXJzaXN0RXZlbnRJZk5lZWRlZCh7Y2hhbm5lbCwgcGF5bG9hZH0pIHtcbiAgICByZXR1cm4gYXdhaXQgdGhpcy5fcGVyc2lzdENoYW5uZWxFdmVudElmTmVlZGVkKHtjaGFubmVsLCBwYXlsb2FkfSlcbiAgfVxuXG4gIC8qKlxuICAgKiBSdW5zIHBlcnNpc3QgY2hhbm5lbCBldmVudCBpZiBuZWVkZWQuXG4gICAqIEBwYXJhbSB7b2JqZWN0fSBhcmdzIC0gT3B0aW9ucyBvYmplY3QuXG4gICAqIEBwYXJhbSB7c3RyaW5nfSBhcmdzLmNoYW5uZWwgLSBDaGFubmVsIG5hbWUuXG4gICAqIEBwYXJhbSB7P30gYXJncy5wYXlsb2FkIC0gUGF5bG9hZCBkYXRhLlxuICAgKiBAcGFyYW0ge2ltcG9ydChcIi4uL2NvbmZpZ3VyYXRpb24uanNcIikuZGVmYXVsdH0gW2FyZ3MuY29uZmlndXJhdGlvbl0gLSBDb25maWd1cmF0aW9uIG93bmluZyB0aGUgZXZlbnQgc3RvcmUuXG4gICAqIEByZXR1cm5zIHtQcm9taXNlPHtjcmVhdGVkQXQ6IHN0cmluZywgaWQ6IHN0cmluZ30gfCBudWxsPn0gLSBQZXJzaXN0ZWQgZXZlbnQgbWV0YWRhdGEuXG4gICAqL1xuICBhc3luYyBfcGVyc2lzdENoYW5uZWxFdmVudElmTmVlZGVkKHtjaGFubmVsLCBwYXlsb2FkLCBjb25maWd1cmF0aW9ufSkge1xuICAgIGNvbnN0IGhhbmRsZXIgPSB0aGlzLmhhbmRsZXJzLnZhbHVlcygpLm5leHQoKS52YWx1ZVxuICAgIGNvbnN0IGV2ZW50Q29uZmlndXJhdGlvbiA9IGNvbmZpZ3VyYXRpb24gfHwgaGFuZGxlcj8uY29uZmlndXJhdGlvblxuXG4gICAgaWYgKCFldmVudENvbmZpZ3VyYXRpb24pIHJldHVybiBudWxsXG5cbiAgICBjb25zdCB3ZWJzb2NrZXRFdmVudExvZ1N0b3JlID0gd2Vic29ja2V0RXZlbnRMb2dTdG9yZUZvckNvbmZpZ3VyYXRpb24oZXZlbnRDb25maWd1cmF0aW9uKVxuICAgIGNvbnN0IHNob3VsZFBlcnNpc3QgPSBhd2FpdCB3ZWJzb2NrZXRFdmVudExvZ1N0b3JlLnNob3VsZFBlcnNpc3RDaGFubmVsKGNoYW5uZWwpXG5cbiAgICBpZiAoIXNob3VsZFBlcnNpc3QpIHJldHVybiBudWxsXG5cbiAgICBjb25zdCBwZXJzaXN0ZWRFdmVudCA9IGF3YWl0IHdlYnNvY2tldEV2ZW50TG9nU3RvcmUuYXBwZW5kRXZlbnQoe2NoYW5uZWwsIHBheWxvYWR9KVxuXG4gICAgcmV0dXJuIHtcbiAgICAgIGNyZWF0ZWRBdDogcGVyc2lzdGVkRXZlbnQuY3JlYXRlZEF0LFxuICAgICAgaWQ6IHBlcnNpc3RlZEV2ZW50LmlkXG4gICAgfVxuICB9XG59XG5cbmNvbnN0IHdlYnNvY2tldEV2ZW50c0hvc3QgPSBuZXcgVmVsb2Npb3VzSHR0cFNlcnZlcldlYnNvY2tldEV2ZW50c0hvc3QoKVxuXG5leHBvcnQgZGVmYXVsdCB3ZWJzb2NrZXRFdmVudHNIb3N0XG4iXX0=
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"root":["../index.js","../bin/velocious.js","../src/application.js","../src/configuration-resolver.js","../src/configuration-types.js","../src/configuration.js","../src/controller.js","../src/current-configuration.js","../src/current.js","../src/error-logger.js","../src/frontend-model-controller.js","../src/initializer.js","../src/logger.js","../src/mailer.js","../src/record-payload-values.js","../src/time-zone.js","../src/velocious-error.js","../src/authorization/ability.js","../src/authorization/base-resource.js","../src/background-jobs/client.js","../src/background-jobs/cron-expression.js","../src/background-jobs/forked-runner-child.js","../src/background-jobs/job-record.js","../src/background-jobs/job-registry.js","../src/background-jobs/job-runner.js","../src/background-jobs/job.js","../src/background-jobs/json-socket.js","../src/background-jobs/main.js","../src/background-jobs/normalize-error.js","../src/background-jobs/pooled-runner-child.js","../src/background-jobs/runner-graceful-shutdown.js","../src/background-jobs/runner-process-title.js","../src/background-jobs/scheduler.js","../src/background-jobs/socket-request.js","../src/background-jobs/status-reporter.js","../src/background-jobs/store.js","../src/background-jobs/types.js","../src/background-jobs/worker.js","../src/background-jobs/web/authorization.js","../src/background-jobs/web/controller.js","../src/background-jobs/web/counts-channel.js","../src/background-jobs/web/index.js","../src/background-jobs/web/path-matcher.js","../src/background-jobs/web/registry.js","../src/beacon/client.js","../src/beacon/in-process-broker.js","../src/beacon/in-process-client.js","../src/beacon/server.js","../src/beacon/types.js","../src/cli/base-command.js","../src/cli/browser-cli.js","../src/cli/index.js","../src/cli/tenant-database-command-helper.js","../src/cli/use-browser-cli.js","../src/cli/commands/background-jobs-main.js","../src/cli/commands/background-jobs-runner.js","../src/cli/commands/background-jobs-worker.js","../src/cli/commands/beacon.js","../src/cli/commands/console.js","../src/cli/commands/init.js","../src/cli/commands/routes.js","../src/cli/commands/run-script.js","../src/cli/commands/runner.js","../src/cli/commands/server.js","../src/cli/commands/test.js","../src/cli/commands/db/base-command.js","../src/cli/commands/db/create.js","../src/cli/commands/db/drop.js","../src/cli/commands/db/migrate.js","../src/cli/commands/db/reset.js","../src/cli/commands/db/rollback.js","../src/cli/commands/db/seed.js","../src/cli/commands/db/schema/dump.js","../src/cli/commands/db/schema/load.js","../src/cli/commands/db/tenants/check.js","../src/cli/commands/db/tenants/create.js","../src/cli/commands/db/tenants/drop.js","../src/cli/commands/db/tenants/migrate.js","../src/cli/commands/destroy/migration.js","../src/cli/commands/generate/base-models.js","../src/cli/commands/generate/frontend-models.js","../src/cli/commands/generate/migration.js","../src/cli/commands/generate/model.js","../src/cli/commands/lint/relationships.js","../src/database/advisory-lock-runner.js","../src/database/annotations-async-hooks.js","../src/database/annotations.js","../src/database/column-types.js","../src/database/datetime-storage.js","../src/database/handler.js","../src/database/initializer-from-require-context.js","../src/database/live-query.js","../src/database/migrations-ledger.js","../src/database/migrator.js","../src/database/operation-connection.js","../src/database/operation-lease.js","../src/database/operation.js","../src/database/query-aborted-error.js","../src/database/record-changes.js","../src/database/structure-sql-loader.js","../src/database/use-database.js","../src/database/use-live-query.js","../src/database/drivers/base-column.js","../src/database/drivers/base-columns-index.js","../src/database/drivers/base-foreign-key.js","../src/database/drivers/base-table.js","../src/database/drivers/base.js","../src/database/drivers/index-metadata.js","../src/database/drivers/mssql/column.js","../src/database/drivers/mssql/columns-index.js","../src/database/drivers/mssql/connect-connection.js","../src/database/drivers/mssql/foreign-key.js","../src/database/drivers/mssql/index.js","../src/database/drivers/mssql/options.js","../src/database/drivers/mssql/query-parser.js","../src/database/drivers/mssql/structure-sql.js","../src/database/drivers/mssql/table.js","../src/database/drivers/mssql/sql/alter-table.js","../src/database/drivers/mssql/sql/create-database.js","../src/database/drivers/mssql/sql/create-index.js","../src/database/drivers/mssql/sql/create-table.js","../src/database/drivers/mssql/sql/delete.js","../src/database/drivers/mssql/sql/drop-database.js","../src/database/drivers/mssql/sql/drop-table.js","../src/database/drivers/mssql/sql/insert.js","../src/database/drivers/mssql/sql/remove-index.js","../src/database/drivers/mssql/sql/update.js","../src/database/drivers/mssql/sql/upsert.js","../src/database/drivers/mysql/column.js","../src/database/drivers/mysql/columns-index.js","../src/database/drivers/mysql/foreign-key.js","../src/database/drivers/mysql/index.js","../src/database/drivers/mysql/options.js","../src/database/drivers/mysql/query-parser.js","../src/database/drivers/mysql/query-stream.js","../src/database/drivers/mysql/query.js","../src/database/drivers/mysql/structure-sql.js","../src/database/drivers/mysql/table.js","../src/database/drivers/mysql/sql/alter-table.js","../src/database/drivers/mysql/sql/create-database.js","../src/database/drivers/mysql/sql/create-index.js","../src/database/drivers/mysql/sql/create-table.js","../src/database/drivers/mysql/sql/delete.js","../src/database/drivers/mysql/sql/drop-database.js","../src/database/drivers/mysql/sql/drop-table.js","../src/database/drivers/mysql/sql/insert.js","../src/database/drivers/mysql/sql/remove-index.js","../src/database/drivers/mysql/sql/update.js","../src/database/drivers/mysql/sql/upsert.js","../src/database/drivers/pgsql/column.js","../src/database/drivers/pgsql/columns-index.js","../src/database/drivers/pgsql/foreign-key.js","../src/database/drivers/pgsql/index.js","../src/database/drivers/pgsql/options.js","../src/database/drivers/pgsql/query-parser.js","../src/database/drivers/pgsql/structure-sql.js","../src/database/drivers/pgsql/table.js","../src/database/drivers/pgsql/sql/alter-table.js","../src/database/drivers/pgsql/sql/create-database.js","../src/database/drivers/pgsql/sql/create-index.js","../src/database/drivers/pgsql/sql/create-table.js","../src/database/drivers/pgsql/sql/delete.js","../src/database/drivers/pgsql/sql/drop-database.js","../src/database/drivers/pgsql/sql/drop-table.js","../src/database/drivers/pgsql/sql/insert.js","../src/database/drivers/pgsql/sql/remove-index.js","../src/database/drivers/pgsql/sql/update.js","../src/database/drivers/pgsql/sql/upsert.js","../src/database/drivers/sqlite/base.js","../src/database/drivers/sqlite/column.js","../src/database/drivers/sqlite/columns-index.js","../src/database/drivers/sqlite/connection-sql-js.js","../src/database/drivers/sqlite/foreign-key.js","../src/database/drivers/sqlite/index.js","../src/database/drivers/sqlite/index.native.js","../src/database/drivers/sqlite/index.web.js","../src/database/drivers/sqlite/options.js","../src/database/drivers/sqlite/query-parser.js","../src/database/drivers/sqlite/query.js","../src/database/drivers/sqlite/query.native.js","../src/database/drivers/sqlite/query.web.js","../src/database/drivers/sqlite/structure-sql.js","../src/database/drivers/sqlite/table-rebuilder.js","../src/database/drivers/sqlite/table.js","../src/database/drivers/sqlite/web-persistence.js","../src/database/drivers/sqlite/sql/alter-table.js","../src/database/drivers/sqlite/sql/create-index.js","../src/database/drivers/sqlite/sql/create-table.js","../src/database/drivers/sqlite/sql/delete.js","../src/database/drivers/sqlite/sql/drop-table.js","../src/database/drivers/sqlite/sql/insert.js","../src/database/drivers/sqlite/sql/remove-index.js","../src/database/drivers/sqlite/sql/update.js","../src/database/drivers/sqlite/sql/upsert.js","../src/database/drivers/structure-sql/utils.js","../src/database/migration/index.js","../src/database/migrator/files-finder.js","../src/database/migrator/types.js","../src/database/pool/async-tracked-multi-connection.js","../src/database/pool/base-methods-forward.js","../src/database/pool/base.js","../src/database/pool/single-multi-use.js","../src/database/query/alter-table-base.js","../src/database/query/base.js","../src/database/query/create-database-base.js","../src/database/query/create-index-base.js","../src/database/query/create-table-base.js","../src/database/query/delete-base.js","../src/database/query/drop-database-base.js","../src/database/query/drop-table-base.js","../src/database/query/from-base.js","../src/database/query/from-plain.js","../src/database/query/from-table.js","../src/database/query/index.js","../src/database/query/insert-base.js","../src/database/query/join-base.js","../src/database/query/join-object.js","../src/database/query/join-plain.js","../src/database/query/join-tracker.js","../src/database/query/model-class-query.js","../src/database/query/order-base.js","../src/database/query/order-column.js","../src/database/query/order-plain.js","../src/database/query/preloader.js","../src/database/query/query-data.js","../src/database/query/remove-index-base.js","../src/database/query/select-base.js","../src/database/query/select-plain.js","../src/database/query/select-table-and-column.js","../src/database/query/update-base.js","../src/database/query/upsert-base.js","../src/database/query/where-base.js","../src/database/query/where-combinator.js","../src/database/query/where-hash.js","../src/database/query/where-model-class-hash.js","../src/database/query/where-not.js","../src/database/query/where-plain.js","../src/database/query/with-count.js","../src/database/query/preloader/belongs-to.js","../src/database/query/preloader/ensure-model-class-initialized.js","../src/database/query/preloader/has-many.js","../src/database/query/preloader/has-one.js","../src/database/query/preloader/query-for-model.js","../src/database/query/preloader/selection.js","../src/database/query-parser/base-query-parser.js","../src/database/query-parser/from-parser.js","../src/database/query-parser/group-parser.js","../src/database/query-parser/joins-parser.js","../src/database/query-parser/limit-parser.js","../src/database/query-parser/options.js","../src/database/query-parser/order-parser.js","../src/database/query-parser/select-parser.js","../src/database/query-parser/where-parser.js","../src/database/record/acts-as-list.js","../src/database/record/auditing.js","../src/database/record/counter-cache-magnitude.js","../src/database/record/index.js","../src/database/record/record-not-found-error.js","../src/database/record/state-machine.js","../src/database/record/user-module.js","../src/database/record/validation-messages.js","../src/database/record/attachments/attachment-record.js","../src/database/record/attachments/download.js","../src/database/record/attachments/handle.js","../src/database/record/attachments/normalize-input.js","../src/database/record/attachments/store.js","../src/database/record/attachments/storage-drivers/filesystem.js","../src/database/record/attachments/storage-drivers/native.js","../src/database/record/attachments/storage-drivers/s3.js","../src/database/record/instance-relationships/base.js","../src/database/record/instance-relationships/belongs-to.js","../src/database/record/instance-relationships/has-many.js","../src/database/record/instance-relationships/has-one.js","../src/database/record/relationships/base.js","../src/database/record/relationships/belongs-to.js","../src/database/record/relationships/has-many.js","../src/database/record/relationships/has-one.js","../src/database/record/validators/base.js","../src/database/record/validators/format.js","../src/database/record/validators/length.js","../src/database/record/validators/presence.js","../src/database/record/validators/uniqueness.js","../src/database/table-data/index.js","../src/database/table-data/table-column.js","../src/database/table-data/table-foreign-key.js","../src/database/table-data/table-index.js","../src/database/table-data/table-reference.js","../src/database/tenants/data-copier.js","../src/database/tenants/schema-cloner.js","../src/database/tenants/tenant-table-plan.js","../src/environment-handlers/base.js","../src/environment-handlers/browser.js","../src/environment-handlers/node.js","../src/environment-handlers/node/attachment-path-source.js","../src/environment-handlers/node/cli/commands/background-jobs-main.js","../src/environment-handlers/node/cli/commands/background-jobs-runner.js","../src/environment-handlers/node/cli/commands/background-jobs-worker.js","../src/environment-handlers/node/cli/commands/beacon.js","../src/environment-handlers/node/cli/commands/cli-command-context.js","../src/environment-handlers/node/cli/commands/console.js","../src/environment-handlers/node/cli/commands/init.js","../src/environment-handlers/node/cli/commands/routes.js","../src/environment-handlers/node/cli/commands/run-script.js","../src/environment-handlers/node/cli/commands/runner.js","../src/environment-handlers/node/cli/commands/server.js","../src/environment-handlers/node/cli/commands/test.js","../src/environment-handlers/node/cli/commands/db/seed.js","../src/environment-handlers/node/cli/commands/db/schema/dump.js","../src/environment-handlers/node/cli/commands/db/schema/load.js","../src/environment-handlers/node/cli/commands/destroy/migration.js","../src/environment-handlers/node/cli/commands/generate/base-models.js","../src/environment-handlers/node/cli/commands/generate/frontend-models.js","../src/environment-handlers/node/cli/commands/generate/generated-file-banner.js","../src/environment-handlers/node/cli/commands/generate/migration.js","../src/environment-handlers/node/cli/commands/generate/model.js","../src/environment-handlers/node/cli/commands/lint/relationships.js","../src/error-reporting/request-details.js","../src/frontend-model-resource/base-resource.js","../src/frontend-model-resource/velocious-attachment-resource.js","../src/frontend-models/base.js","../src/frontend-models/built-in-resources.js","../src/frontend-models/clear-pending-debounced-callback.js","../src/frontend-models/event-hook-models.js","../src/frontend-models/model-registry.js","../src/frontend-models/outgoing-event-buffer.js","../src/frontend-models/preloader.js","../src/frontend-models/query.js","../src/frontend-models/resource-config-validation.js","../src/frontend-models/resource-definition.js","../src/frontend-models/transport-deadline.js","../src/frontend-models/transport-serialization.js","../src/frontend-models/use-created-event.js","../src/frontend-models/use-destroyed-event.js","../src/frontend-models/use-model-class-event.js","../src/frontend-models/use-updated-event.js","../src/frontend-models/websocket-channel.js","../src/frontend-models/websocket-publishers.js","../src/http-client/header.js","../src/http-client/index.js","../src/http-client/request.js","../src/http-client/response.js","../src/http-client/websocket-client.js","../src/http-server/client-delivery-queue.js","../src/http-server/cookie.js","../src/http-server/development-reloader.js","../src/http-server/index.js","../src/http-server/remote-address.js","../src/http-server/server-client.js","../src/http-server/server-lock.js","../src/http-server/websocket-channel-subscribers.js","../src/http-server/websocket-channel.js","../src/http-server/websocket-connection.js","../src/http-server/websocket-event-log-store.js","../src/http-server/websocket-events-host.js","../src/http-server/websocket-events.js","../src/http-server/client/index.js","../src/http-server/client/params-to-object.js","../src/http-server/client/request-parser.js","../src/http-server/client/request-runner.js","../src/http-server/client/request-timing.js","../src/http-server/client/request.js","../src/http-server/client/response.js","../src/http-server/client/websocket-request.js","../src/http-server/client/websocket-session.js","../src/http-server/client/request-buffer/form-data-part.js","../src/http-server/client/request-buffer/header.js","../src/http-server/client/request-buffer/index.js","../src/http-server/client/uploaded-file/memory-uploaded-file.js","../src/http-server/client/uploaded-file/temporary-uploaded-file.js","../src/http-server/client/uploaded-file/uploaded-file.js","../src/http-server/worker-handler/channel-subscriber-dispatch.js","../src/http-server/worker-handler/in-process.js","../src/http-server/worker-handler/index.js","../src/http-server/worker-handler/worker-script.js","../src/http-server/worker-handler/worker-thread.js","../src/jobs/mail-delivery.js","../src/jobs/prune-terminal-background-jobs.js","../src/logger/base-logger.js","../src/logger/console-logger.js","../src/logger/file-logger.js","../src/logger/outputs/array-output.js","../src/logger/outputs/console-output.js","../src/logger/outputs/file-output.js","../src/logger/outputs/stdout-output.js","../src/mailer/base.js","../src/mailer/delivery.js","../src/mailer/index.js","../src/mailer/backends/smtp.js","../src/packages/velocious-package.js","../src/plugins/sqljs-wasm-route-controller.js","../src/plugins/sqljs-wasm-route.js","../src/routes/app-routes.js","../src/routes/base-route.js","../src/routes/basic-route.js","../src/routes/get-route.js","../src/routes/index.js","../src/routes/namespace-route.js","../src/routes/plugin-routes.js","../src/routes/post-route.js","../src/routes/resolver.js","../src/routes/resource-route.js","../src/routes/root-route.js","../src/routes/built-in/api-manifest/controller.js","../src/routes/built-in/debug/controller.js","../src/routes/built-in/errors/controller.js","../src/routes/hooks/frontend-model-command-route-hook.js","../src/sync/conflict-strategy.js","../src/sync/device-identity.js","../src/sync/local-mutation-log.js","../src/sync/offline-grant.js","../src/sync/peer-mutation-bundle.js","../src/sync/query-scope.js","../src/sync/server-change-feed.js","../src/sync/server-sequence-allocator.js","../src/sync/stable-json.js","../src/sync/sync-api-client-types.js","../src/sync/sync-api-client.js","../src/sync/sync-api-controller.js","../src/sync/sync-change-fanout.js","../src/sync/sync-channel-name.js","../src/sync/sync-client-registry.js","../src/sync/sync-client-types.js","../src/sync/sync-client.js","../src/sync/sync-envelope-replay-service.js","../src/sync/sync-model-change-feed-service.js","../src/sync/sync-publish-suppression.js","../src/sync/sync-publisher-types.js","../src/sync/sync-publisher.js","../src/sync/sync-realtime-bridge.js","../src/sync/sync-replay-upsert-applier.js","../src/sync/sync-resource-base.js","../src/sync/sync-scope-attributes.js","../src/sync/sync-scope-store.js","../src/sync/sync-websocket-channel.js","../src/tenants/default-tenant-database-provisioning.js","../src/tenants/tenant-aggregator.js","../src/tenants/tenant-iterator.js","../src/tenants/tenant.js","../src/testing/base-expect.js","../src/testing/browser-frontend-model-event-hook-scenarios.js","../src/testing/browser-test-app.js","../src/testing/expect-to-change.js","../src/testing/expect-utils.js","../src/testing/expect.js","../src/testing/request-client.js","../src/testing/test-files-finder.js","../src/testing/test-filter-parser.js","../src/testing/test-runner.js","../src/testing/test-suite-splitter.js","../src/testing/test.js","../src/testing/wait-for-event.js","../src/testing/factory/association-declaration.js","../src/testing/factory/declarations.js","../src/testing/factory/definition-builder.js","../src/testing/factory/errors.js","../src/testing/factory/evaluation-context.js","../src/testing/factory/events.js","../src/testing/factory/factory-definition.js","../src/testing/factory/factory-registry.js","../src/testing/factory/factory-runner.js","../src/testing/factory/index.js","../src/testing/factory/linter.js","../src/testing/factory/model-contract.js","../src/testing/factory/sequence.js","../src/testing/factory/trait-definition.js","../src/testing/factory/node/load-definitions.js","../src/testing/factory/strategies/attributes-for.js","../src/testing/factory/strategies/base.js","../src/testing/factory/strategies/build.js","../src/testing/factory/strategies/create.js","../src/types/external-modules.d.ts","../src/utils/backtrace-cleaner-node.js","../src/utils/backtrace-cleaner.js","../src/utils/deburr-column-name.js","../src/utils/event-emitter.js","../src/utils/file-exists.js","../src/utils/format-value.js","../src/utils/is-date.js","../src/utils/model-scope.js","../src/utils/nest-callbacks.js","../src/utils/plain-object.js","../src/utils/ransack.js","../src/utils/rest-args-error.js","../src/utils/shutdown-lifecycle.js","../src/utils/singularize-model-name.js","../src/utils/split-sql-statements.js","../src/utils/to-import-specifier.js","../src/utils/with-tracked-stack-async-hooks.js","../src/utils/with-tracked-stack.js"],"version":"6.0.3"}
|
|
1
|
+
{"root":["../index.js","../bin/velocious.js","../src/application.js","../src/configuration-resolver.js","../src/configuration-types.js","../src/configuration.js","../src/controller.js","../src/current-configuration.js","../src/current.js","../src/error-logger.js","../src/frontend-model-controller.js","../src/initializer.js","../src/logger.js","../src/mailer.js","../src/record-payload-values.js","../src/time-zone.js","../src/velocious-error.js","../src/authorization/ability.js","../src/authorization/base-resource.js","../src/background-jobs/client.js","../src/background-jobs/cron-expression.js","../src/background-jobs/forked-runner-child.js","../src/background-jobs/job-record.js","../src/background-jobs/job-registry.js","../src/background-jobs/job-runner.js","../src/background-jobs/job.js","../src/background-jobs/json-socket.js","../src/background-jobs/main.js","../src/background-jobs/normalize-error.js","../src/background-jobs/pooled-runner-child.js","../src/background-jobs/runner-graceful-shutdown.js","../src/background-jobs/runner-process-title.js","../src/background-jobs/scheduler.js","../src/background-jobs/socket-request.js","../src/background-jobs/status-reporter.js","../src/background-jobs/store.js","../src/background-jobs/types.js","../src/background-jobs/worker.js","../src/background-jobs/web/authorization.js","../src/background-jobs/web/controller.js","../src/background-jobs/web/counts-channel.js","../src/background-jobs/web/index.js","../src/background-jobs/web/path-matcher.js","../src/background-jobs/web/registry.js","../src/beacon/client.js","../src/beacon/in-process-broker.js","../src/beacon/in-process-client.js","../src/beacon/server.js","../src/beacon/types.js","../src/cli/base-command.js","../src/cli/browser-cli.js","../src/cli/index.js","../src/cli/tenant-database-command-helper.js","../src/cli/use-browser-cli.js","../src/cli/commands/background-jobs-main.js","../src/cli/commands/background-jobs-runner.js","../src/cli/commands/background-jobs-worker.js","../src/cli/commands/beacon.js","../src/cli/commands/console.js","../src/cli/commands/init.js","../src/cli/commands/routes.js","../src/cli/commands/run-script.js","../src/cli/commands/runner.js","../src/cli/commands/server.js","../src/cli/commands/test.js","../src/cli/commands/db/base-command.js","../src/cli/commands/db/create.js","../src/cli/commands/db/drop.js","../src/cli/commands/db/migrate.js","../src/cli/commands/db/reset.js","../src/cli/commands/db/rollback.js","../src/cli/commands/db/seed.js","../src/cli/commands/db/schema/dump.js","../src/cli/commands/db/schema/load.js","../src/cli/commands/db/tenants/check.js","../src/cli/commands/db/tenants/create.js","../src/cli/commands/db/tenants/drop.js","../src/cli/commands/db/tenants/migrate.js","../src/cli/commands/destroy/migration.js","../src/cli/commands/generate/base-models.js","../src/cli/commands/generate/frontend-models.js","../src/cli/commands/generate/migration.js","../src/cli/commands/generate/model.js","../src/cli/commands/lint/relationships.js","../src/database/advisory-lock-runner.js","../src/database/annotations-async-hooks.js","../src/database/annotations.js","../src/database/column-types.js","../src/database/datetime-storage.js","../src/database/handler.js","../src/database/initializer-from-require-context.js","../src/database/live-query.js","../src/database/migrations-ledger.js","../src/database/migrator.js","../src/database/operation-connection.js","../src/database/operation-lease.js","../src/database/operation.js","../src/database/query-aborted-error.js","../src/database/record-changes.js","../src/database/structure-sql-loader.js","../src/database/use-database.js","../src/database/use-live-query.js","../src/database/drivers/base-column.js","../src/database/drivers/base-columns-index.js","../src/database/drivers/base-foreign-key.js","../src/database/drivers/base-table.js","../src/database/drivers/base.js","../src/database/drivers/index-metadata.js","../src/database/drivers/mssql/column.js","../src/database/drivers/mssql/columns-index.js","../src/database/drivers/mssql/connect-connection.js","../src/database/drivers/mssql/foreign-key.js","../src/database/drivers/mssql/index.js","../src/database/drivers/mssql/options.js","../src/database/drivers/mssql/query-parser.js","../src/database/drivers/mssql/structure-sql.js","../src/database/drivers/mssql/table.js","../src/database/drivers/mssql/sql/alter-table.js","../src/database/drivers/mssql/sql/create-database.js","../src/database/drivers/mssql/sql/create-index.js","../src/database/drivers/mssql/sql/create-table.js","../src/database/drivers/mssql/sql/delete.js","../src/database/drivers/mssql/sql/drop-database.js","../src/database/drivers/mssql/sql/drop-table.js","../src/database/drivers/mssql/sql/insert.js","../src/database/drivers/mssql/sql/remove-index.js","../src/database/drivers/mssql/sql/update.js","../src/database/drivers/mssql/sql/upsert.js","../src/database/drivers/mysql/column.js","../src/database/drivers/mysql/columns-index.js","../src/database/drivers/mysql/foreign-key.js","../src/database/drivers/mysql/index.js","../src/database/drivers/mysql/options.js","../src/database/drivers/mysql/query-parser.js","../src/database/drivers/mysql/query-stream.js","../src/database/drivers/mysql/query.js","../src/database/drivers/mysql/structure-sql.js","../src/database/drivers/mysql/table.js","../src/database/drivers/mysql/sql/alter-table.js","../src/database/drivers/mysql/sql/create-database.js","../src/database/drivers/mysql/sql/create-index.js","../src/database/drivers/mysql/sql/create-table.js","../src/database/drivers/mysql/sql/delete.js","../src/database/drivers/mysql/sql/drop-database.js","../src/database/drivers/mysql/sql/drop-table.js","../src/database/drivers/mysql/sql/insert.js","../src/database/drivers/mysql/sql/remove-index.js","../src/database/drivers/mysql/sql/update.js","../src/database/drivers/mysql/sql/upsert.js","../src/database/drivers/pgsql/column.js","../src/database/drivers/pgsql/columns-index.js","../src/database/drivers/pgsql/foreign-key.js","../src/database/drivers/pgsql/index.js","../src/database/drivers/pgsql/options.js","../src/database/drivers/pgsql/query-parser.js","../src/database/drivers/pgsql/structure-sql.js","../src/database/drivers/pgsql/table.js","../src/database/drivers/pgsql/sql/alter-table.js","../src/database/drivers/pgsql/sql/create-database.js","../src/database/drivers/pgsql/sql/create-index.js","../src/database/drivers/pgsql/sql/create-table.js","../src/database/drivers/pgsql/sql/delete.js","../src/database/drivers/pgsql/sql/drop-database.js","../src/database/drivers/pgsql/sql/drop-table.js","../src/database/drivers/pgsql/sql/insert.js","../src/database/drivers/pgsql/sql/remove-index.js","../src/database/drivers/pgsql/sql/update.js","../src/database/drivers/pgsql/sql/upsert.js","../src/database/drivers/sqlite/base.js","../src/database/drivers/sqlite/column.js","../src/database/drivers/sqlite/columns-index.js","../src/database/drivers/sqlite/connection-sql-js.js","../src/database/drivers/sqlite/foreign-key.js","../src/database/drivers/sqlite/index.js","../src/database/drivers/sqlite/index.native.js","../src/database/drivers/sqlite/index.web.js","../src/database/drivers/sqlite/options.js","../src/database/drivers/sqlite/query-parser.js","../src/database/drivers/sqlite/query.js","../src/database/drivers/sqlite/query.native.js","../src/database/drivers/sqlite/query.web.js","../src/database/drivers/sqlite/structure-sql.js","../src/database/drivers/sqlite/table-rebuilder.js","../src/database/drivers/sqlite/table.js","../src/database/drivers/sqlite/web-persistence.js","../src/database/drivers/sqlite/sql/alter-table.js","../src/database/drivers/sqlite/sql/create-index.js","../src/database/drivers/sqlite/sql/create-table.js","../src/database/drivers/sqlite/sql/delete.js","../src/database/drivers/sqlite/sql/drop-table.js","../src/database/drivers/sqlite/sql/insert.js","../src/database/drivers/sqlite/sql/remove-index.js","../src/database/drivers/sqlite/sql/update.js","../src/database/drivers/sqlite/sql/upsert.js","../src/database/drivers/structure-sql/utils.js","../src/database/migration/index.js","../src/database/migrator/files-finder.js","../src/database/migrator/types.js","../src/database/pool/async-tracked-multi-connection.js","../src/database/pool/base-methods-forward.js","../src/database/pool/base.js","../src/database/pool/single-multi-use.js","../src/database/query/alter-table-base.js","../src/database/query/base.js","../src/database/query/create-database-base.js","../src/database/query/create-index-base.js","../src/database/query/create-table-base.js","../src/database/query/delete-base.js","../src/database/query/drop-database-base.js","../src/database/query/drop-table-base.js","../src/database/query/from-base.js","../src/database/query/from-plain.js","../src/database/query/from-table.js","../src/database/query/index.js","../src/database/query/insert-base.js","../src/database/query/join-base.js","../src/database/query/join-object.js","../src/database/query/join-plain.js","../src/database/query/join-tracker.js","../src/database/query/model-class-query.js","../src/database/query/order-base.js","../src/database/query/order-column.js","../src/database/query/order-plain.js","../src/database/query/preloader.js","../src/database/query/query-data.js","../src/database/query/remove-index-base.js","../src/database/query/select-base.js","../src/database/query/select-plain.js","../src/database/query/select-table-and-column.js","../src/database/query/update-base.js","../src/database/query/upsert-base.js","../src/database/query/where-base.js","../src/database/query/where-combinator.js","../src/database/query/where-hash.js","../src/database/query/where-model-class-hash.js","../src/database/query/where-not.js","../src/database/query/where-plain.js","../src/database/query/with-count.js","../src/database/query/preloader/belongs-to.js","../src/database/query/preloader/ensure-model-class-initialized.js","../src/database/query/preloader/has-many.js","../src/database/query/preloader/has-one.js","../src/database/query/preloader/query-for-model.js","../src/database/query/preloader/selection.js","../src/database/query-parser/base-query-parser.js","../src/database/query-parser/from-parser.js","../src/database/query-parser/group-parser.js","../src/database/query-parser/joins-parser.js","../src/database/query-parser/limit-parser.js","../src/database/query-parser/options.js","../src/database/query-parser/order-parser.js","../src/database/query-parser/select-parser.js","../src/database/query-parser/where-parser.js","../src/database/record/acts-as-list.js","../src/database/record/auditing.js","../src/database/record/counter-cache-magnitude.js","../src/database/record/index.js","../src/database/record/record-not-found-error.js","../src/database/record/state-machine.js","../src/database/record/user-module.js","../src/database/record/validation-messages.js","../src/database/record/attachments/attachment-record.js","../src/database/record/attachments/download.js","../src/database/record/attachments/handle.js","../src/database/record/attachments/normalize-input.js","../src/database/record/attachments/store.js","../src/database/record/attachments/storage-drivers/filesystem.js","../src/database/record/attachments/storage-drivers/native.js","../src/database/record/attachments/storage-drivers/s3.js","../src/database/record/instance-relationships/base.js","../src/database/record/instance-relationships/belongs-to.js","../src/database/record/instance-relationships/has-many.js","../src/database/record/instance-relationships/has-one.js","../src/database/record/relationships/base.js","../src/database/record/relationships/belongs-to.js","../src/database/record/relationships/has-many.js","../src/database/record/relationships/has-one.js","../src/database/record/validators/base.js","../src/database/record/validators/format.js","../src/database/record/validators/length.js","../src/database/record/validators/presence.js","../src/database/record/validators/uniqueness.js","../src/database/table-data/index.js","../src/database/table-data/table-column.js","../src/database/table-data/table-foreign-key.js","../src/database/table-data/table-index.js","../src/database/table-data/table-reference.js","../src/database/tenants/data-copier.js","../src/database/tenants/schema-cloner.js","../src/database/tenants/tenant-table-plan.js","../src/environment-handlers/base.js","../src/environment-handlers/browser.js","../src/environment-handlers/node.js","../src/environment-handlers/node/attachment-path-source.js","../src/environment-handlers/node/cli/commands/background-jobs-main.js","../src/environment-handlers/node/cli/commands/background-jobs-runner.js","../src/environment-handlers/node/cli/commands/background-jobs-worker.js","../src/environment-handlers/node/cli/commands/beacon.js","../src/environment-handlers/node/cli/commands/cli-command-context.js","../src/environment-handlers/node/cli/commands/console.js","../src/environment-handlers/node/cli/commands/init.js","../src/environment-handlers/node/cli/commands/routes.js","../src/environment-handlers/node/cli/commands/run-script.js","../src/environment-handlers/node/cli/commands/runner.js","../src/environment-handlers/node/cli/commands/server.js","../src/environment-handlers/node/cli/commands/test.js","../src/environment-handlers/node/cli/commands/db/seed.js","../src/environment-handlers/node/cli/commands/db/schema/dump.js","../src/environment-handlers/node/cli/commands/db/schema/load.js","../src/environment-handlers/node/cli/commands/destroy/migration.js","../src/environment-handlers/node/cli/commands/generate/base-models.js","../src/environment-handlers/node/cli/commands/generate/frontend-models.js","../src/environment-handlers/node/cli/commands/generate/generated-file-banner.js","../src/environment-handlers/node/cli/commands/generate/migration.js","../src/environment-handlers/node/cli/commands/generate/model.js","../src/environment-handlers/node/cli/commands/lint/relationships.js","../src/error-reporting/request-details.js","../src/frontend-model-resource/base-resource.js","../src/frontend-model-resource/velocious-attachment-resource.js","../src/frontend-models/base.js","../src/frontend-models/built-in-resources.js","../src/frontend-models/clear-pending-debounced-callback.js","../src/frontend-models/event-hook-models.js","../src/frontend-models/model-registry.js","../src/frontend-models/outgoing-event-buffer.js","../src/frontend-models/preloader.js","../src/frontend-models/query.js","../src/frontend-models/resource-config-validation.js","../src/frontend-models/resource-definition.js","../src/frontend-models/transport-deadline.js","../src/frontend-models/transport-serialization.js","../src/frontend-models/use-created-event.js","../src/frontend-models/use-destroyed-event.js","../src/frontend-models/use-model-class-event.js","../src/frontend-models/use-updated-event.js","../src/frontend-models/websocket-channel.js","../src/frontend-models/websocket-publishers.js","../src/http-client/header.js","../src/http-client/index.js","../src/http-client/request.js","../src/http-client/response.js","../src/http-client/websocket-client.js","../src/http-server/client-delivery-queue.js","../src/http-server/cookie.js","../src/http-server/development-reloader.js","../src/http-server/index.js","../src/http-server/remote-address.js","../src/http-server/server-client.js","../src/http-server/server-lock.js","../src/http-server/websocket-channel-subscribers.js","../src/http-server/websocket-channel.js","../src/http-server/websocket-connection.js","../src/http-server/websocket-event-log-store.js","../src/http-server/websocket-events-host.js","../src/http-server/websocket-events.js","../src/http-server/client/index.js","../src/http-server/client/params-to-object.js","../src/http-server/client/request-parser.js","../src/http-server/client/request-runner.js","../src/http-server/client/request-timing.js","../src/http-server/client/request.js","../src/http-server/client/response-compression.js","../src/http-server/client/response.js","../src/http-server/client/websocket-request.js","../src/http-server/client/websocket-session.js","../src/http-server/client/request-buffer/form-data-part.js","../src/http-server/client/request-buffer/header.js","../src/http-server/client/request-buffer/index.js","../src/http-server/client/uploaded-file/memory-uploaded-file.js","../src/http-server/client/uploaded-file/temporary-uploaded-file.js","../src/http-server/client/uploaded-file/uploaded-file.js","../src/http-server/worker-handler/channel-subscriber-dispatch.js","../src/http-server/worker-handler/in-process.js","../src/http-server/worker-handler/index.js","../src/http-server/worker-handler/worker-script.js","../src/http-server/worker-handler/worker-thread.js","../src/jobs/mail-delivery.js","../src/jobs/prune-terminal-background-jobs.js","../src/logger/base-logger.js","../src/logger/console-logger.js","../src/logger/file-logger.js","../src/logger/outputs/array-output.js","../src/logger/outputs/console-output.js","../src/logger/outputs/file-output.js","../src/logger/outputs/stdout-output.js","../src/mailer/base.js","../src/mailer/delivery.js","../src/mailer/index.js","../src/mailer/backends/smtp.js","../src/packages/velocious-package.js","../src/plugins/sqljs-wasm-route-controller.js","../src/plugins/sqljs-wasm-route.js","../src/routes/app-routes.js","../src/routes/base-route.js","../src/routes/basic-route.js","../src/routes/get-route.js","../src/routes/index.js","../src/routes/namespace-route.js","../src/routes/plugin-routes.js","../src/routes/post-route.js","../src/routes/resolver.js","../src/routes/resource-route.js","../src/routes/root-route.js","../src/routes/built-in/api-manifest/controller.js","../src/routes/built-in/debug/controller.js","../src/routes/built-in/errors/controller.js","../src/routes/hooks/frontend-model-command-route-hook.js","../src/sync/conflict-strategy.js","../src/sync/device-identity.js","../src/sync/local-mutation-log.js","../src/sync/offline-grant.js","../src/sync/peer-mutation-bundle.js","../src/sync/query-scope.js","../src/sync/server-change-feed.js","../src/sync/server-sequence-allocator.js","../src/sync/stable-json.js","../src/sync/sync-api-client-types.js","../src/sync/sync-api-client.js","../src/sync/sync-api-controller.js","../src/sync/sync-change-fanout.js","../src/sync/sync-channel-name.js","../src/sync/sync-client-registry.js","../src/sync/sync-client-types.js","../src/sync/sync-client.js","../src/sync/sync-envelope-replay-service.js","../src/sync/sync-model-change-feed-service.js","../src/sync/sync-publish-suppression.js","../src/sync/sync-publisher-types.js","../src/sync/sync-publisher.js","../src/sync/sync-realtime-bridge.js","../src/sync/sync-replay-upsert-applier.js","../src/sync/sync-resource-base.js","../src/sync/sync-scope-attributes.js","../src/sync/sync-scope-store.js","../src/sync/sync-websocket-channel.js","../src/tenants/default-tenant-database-provisioning.js","../src/tenants/tenant-aggregator.js","../src/tenants/tenant-iterator.js","../src/tenants/tenant.js","../src/testing/base-expect.js","../src/testing/browser-frontend-model-event-hook-scenarios.js","../src/testing/browser-test-app.js","../src/testing/expect-to-change.js","../src/testing/expect-utils.js","../src/testing/expect.js","../src/testing/request-client.js","../src/testing/test-files-finder.js","../src/testing/test-filter-parser.js","../src/testing/test-runner.js","../src/testing/test-suite-splitter.js","../src/testing/test.js","../src/testing/wait-for-event.js","../src/testing/factory/association-declaration.js","../src/testing/factory/declarations.js","../src/testing/factory/definition-builder.js","../src/testing/factory/errors.js","../src/testing/factory/evaluation-context.js","../src/testing/factory/events.js","../src/testing/factory/factory-definition.js","../src/testing/factory/factory-registry.js","../src/testing/factory/factory-runner.js","../src/testing/factory/index.js","../src/testing/factory/linter.js","../src/testing/factory/model-contract.js","../src/testing/factory/sequence.js","../src/testing/factory/trait-definition.js","../src/testing/factory/node/load-definitions.js","../src/testing/factory/strategies/attributes-for.js","../src/testing/factory/strategies/base.js","../src/testing/factory/strategies/build.js","../src/testing/factory/strategies/create.js","../src/types/external-modules.d.ts","../src/utils/backtrace-cleaner-node.js","../src/utils/backtrace-cleaner.js","../src/utils/deburr-column-name.js","../src/utils/event-emitter.js","../src/utils/file-exists.js","../src/utils/format-value.js","../src/utils/is-date.js","../src/utils/model-scope.js","../src/utils/nest-callbacks.js","../src/utils/plain-object.js","../src/utils/ransack.js","../src/utils/rest-args-error.js","../src/utils/shutdown-lifecycle.js","../src/utils/singularize-model-name.js","../src/utils/split-sql-statements.js","../src/utils/to-import-specifier.js","../src/utils/with-tracked-stack-async-hooks.js","../src/utils/with-tracked-stack.js"],"version":"6.0.3"}
|
package/package.json
CHANGED
|
@@ -3,7 +3,7 @@
|
|
|
3
3
|
"velocious": "build/bin/velocious.js"
|
|
4
4
|
},
|
|
5
5
|
"name": "velocious",
|
|
6
|
-
"version": "1.0.
|
|
6
|
+
"version": "1.0.571",
|
|
7
7
|
"main": "build/index.js",
|
|
8
8
|
"types": "build/index.d.ts",
|
|
9
9
|
"files": [
|
|
@@ -39,6 +39,7 @@
|
|
|
39
39
|
"test:expo": "npm run build && npm ci --prefix examples/expo && npm run export --prefix examples/expo && npm run test:dist --prefix examples/expo",
|
|
40
40
|
"typecheck": "tsc --noEmit",
|
|
41
41
|
"velocious": "asd",
|
|
42
|
+
"verify:docker-dev-environment": "node scripts/verify-docker-dev-environment.js",
|
|
42
43
|
"watch": "tsc -w",
|
|
43
44
|
"watch:ejs": "chokidar \"src/**/*.ejs\" -c \"npm run copy:ejs\""
|
|
44
45
|
},
|
|
@@ -75,7 +76,7 @@
|
|
|
75
76
|
"pure-uuid": "^2.0.0",
|
|
76
77
|
"require-context": "^1.1.0",
|
|
77
78
|
"set-state-compare": "^1.0.61",
|
|
78
|
-
"snapreq": "^0.0.
|
|
79
|
+
"snapreq": "^0.0.12",
|
|
79
80
|
"sql-escape-string": "^1.1.0",
|
|
80
81
|
"sql.js": "^1.12.0",
|
|
81
82
|
"strftime": "^0.10.2",
|
|
@@ -109,7 +110,7 @@
|
|
|
109
110
|
"eslint-plugin-jsdoc": "^63.0.0",
|
|
110
111
|
"eslint-plugin-jsdoc-inline-type-casts": "https://github.com/kaspernj/eslint-plugin-jsdoc-inline-type-casts/archive/refs/heads/master.tar.gz",
|
|
111
112
|
"eslint-plugin-jsdoc-tag-lines": "^1.0.1",
|
|
112
|
-
"fallow": "3.
|
|
113
|
+
"fallow": "3.10.0",
|
|
113
114
|
"globals": "^17.0.0",
|
|
114
115
|
"mssql": "^12.0.0",
|
|
115
116
|
"mysql": "^2.18.1",
|
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
#!/usr/bin/env bash
|
|
2
|
+
# Execute project commands inside the Compose dev container.
|
|
3
|
+
# The repository must be checked out at $DEV_HOME_PATH/velocious on the
|
|
4
|
+
# host (default DEV_HOME_PATH: /home/dev) so the dev service's /home/dev bind
|
|
5
|
+
# mount covers it.
|
|
6
|
+
set -euo pipefail
|
|
7
|
+
|
|
8
|
+
if (($# == 0)); then
|
|
9
|
+
printf 'Usage: %s <command> [arguments...]\n' "$0" >&2
|
|
10
|
+
exit 2
|
|
11
|
+
fi
|
|
12
|
+
|
|
13
|
+
repo_dir=$(CDPATH= cd -- "$(dirname -- "$0")/.." && pwd)
|
|
14
|
+
# Callers select an instance via the standard Compose project-name contract:
|
|
15
|
+
# compose.yml declares the default top-level `name: velocious`, and
|
|
16
|
+
# COMPOSE_PROJECT_NAME (or `-p`) overrides it for isolated instances.
|
|
17
|
+
compose=(docker compose -f "$repo_dir/compose.yml" --project-directory "$repo_dir")
|
|
18
|
+
|
|
19
|
+
cd "$repo_dir"
|
|
20
|
+
exec "${compose[@]}" run --build --rm -T dev "$@"
|