every-plugin 0.4.4 → 0.4.6

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (123) hide show
  1. package/dist/build/rspack/index.cjs +300 -0
  2. package/dist/build/rspack/index.d.cts +20 -0
  3. package/dist/build/rspack/index.d.mts +20 -0
  4. package/dist/build/rspack/index.mjs +298 -0
  5. package/dist/chunk-QQAxy9l9.mjs +31 -0
  6. package/dist/chunk-zltIcp7o.cjs +46 -0
  7. package/dist/effect.cjs +9 -0
  8. package/dist/effect.d.cts +1 -0
  9. package/dist/effect.d.mts +1 -0
  10. package/dist/effect.mjs +3 -0
  11. package/dist/errors-CVnoPl9v.cjs +68 -0
  12. package/dist/errors-Car4tFVP.d.mts +75 -0
  13. package/dist/errors-D7keKf7a.mjs +63 -0
  14. package/dist/errors-DKPPPYYT.d.cts +75 -0
  15. package/dist/errors.cjs +4 -0
  16. package/dist/errors.d.cts +3 -0
  17. package/dist/errors.d.mts +3 -0
  18. package/dist/errors.mjs +4 -0
  19. package/dist/fetch-Cc95-7kM.cjs +336 -0
  20. package/dist/fetch-KLktuWuM.mjs +335 -0
  21. package/dist/index-bwAhA9ca.d.mts +383 -0
  22. package/dist/index-matrPV4m.d.cts +382 -0
  23. package/dist/index.cjs +57 -0
  24. package/dist/index.d.cts +5 -0
  25. package/dist/index.d.mts +5 -0
  26. package/dist/index.mjs +52 -0
  27. package/dist/{runtime/services/normalize.d.ts → normalize-BLTyqFww.d.mts} +5 -2
  28. package/dist/{runtime/services/normalize.js → normalize-BW7kk8Lk.d.cts} +5 -1
  29. package/dist/normalize-D4Qh0wVk.cjs +28 -0
  30. package/dist/normalize-D7nae0Hn.mjs +22 -0
  31. package/dist/openapi.DrTcell5-C6kyDyUK.mjs +669 -0
  32. package/dist/openapi.DrTcell5-DDf4D5V3.cjs +687 -0
  33. package/dist/orpc.cjs +46 -0
  34. package/dist/orpc.d.cts +7 -0
  35. package/dist/orpc.d.mts +7 -0
  36. package/dist/orpc.mjs +11 -0
  37. package/dist/package-CmegWGdE.cjs +154 -0
  38. package/dist/package-Dn-xZ55N.mjs +149 -0
  39. package/dist/plugins-C-7lh5gK.cjs +128 -0
  40. package/dist/plugins-Ps5Xxpk2.mjs +128 -0
  41. package/dist/runtime/index.cjs +6 -0
  42. package/dist/runtime/index.d.cts +5 -0
  43. package/dist/runtime/index.d.mts +5 -0
  44. package/dist/runtime/index.mjs +5 -0
  45. package/dist/runtime/services/normalize.cjs +3 -0
  46. package/dist/runtime/services/normalize.d.cts +2 -0
  47. package/dist/runtime/services/normalize.d.mts +2 -0
  48. package/dist/runtime/services/normalize.mjs +3 -0
  49. package/dist/runtime-CgRUExK3.cjs +523 -0
  50. package/dist/runtime-Da2NjzYy.mjs +458 -0
  51. package/dist/standard-DaxKTFui.mjs +595 -0
  52. package/dist/standard-eUgUkWaf.cjs +702 -0
  53. package/dist/testing/index.cjs +78 -0
  54. package/dist/testing/index.d.cts +60 -0
  55. package/dist/testing/index.d.mts +60 -0
  56. package/dist/testing/index.mjs +75 -0
  57. package/dist/zod-A7Pti5IV.d.cts +4 -0
  58. package/dist/zod-BVo51kgJ.mjs +10 -0
  59. package/dist/zod-D4CFw8d9.d.mts +4 -0
  60. package/dist/zod-DYghWCz1.cjs +14 -0
  61. package/dist/zod.cjs +10 -0
  62. package/dist/zod.d.cts +2 -0
  63. package/dist/zod.d.mts +2 -0
  64. package/dist/zod.mjs +5 -0
  65. package/dist/zod4-BXTBR1od.cjs +318 -0
  66. package/dist/zod4-VpXuwRO7.mjs +317 -0
  67. package/package.json +64 -23
  68. package/dist/effect.d.ts +0 -2
  69. package/dist/effect.d.ts.map +0 -1
  70. package/dist/effect.js +0 -1
  71. package/dist/errors.d.ts +0 -70
  72. package/dist/errors.d.ts.map +0 -1
  73. package/dist/errors.js +0 -61
  74. package/dist/index.d.ts +0 -6
  75. package/dist/index.d.ts.map +0 -1
  76. package/dist/index.js +0 -5
  77. package/dist/orpc.d.ts +0 -10
  78. package/dist/orpc.d.ts.map +0 -1
  79. package/dist/orpc.js +0 -6
  80. package/dist/plugin.d.ts +0 -57
  81. package/dist/plugin.d.ts.map +0 -1
  82. package/dist/plugin.js +0 -43
  83. package/dist/runtime/errors.d.ts +0 -36
  84. package/dist/runtime/errors.d.ts.map +0 -1
  85. package/dist/runtime/errors.js +0 -47
  86. package/dist/runtime/index.d.ts +0 -20
  87. package/dist/runtime/index.d.ts.map +0 -1
  88. package/dist/runtime/index.js +0 -131
  89. package/dist/runtime/services/module-federation.service.d.ts +0 -13
  90. package/dist/runtime/services/module-federation.service.d.ts.map +0 -1
  91. package/dist/runtime/services/module-federation.service.js +0 -155
  92. package/dist/runtime/services/normalize.d.ts.map +0 -1
  93. package/dist/runtime/services/plugin-lifecycle.service.d.ts +0 -14
  94. package/dist/runtime/services/plugin-lifecycle.service.d.ts.map +0 -1
  95. package/dist/runtime/services/plugin-lifecycle.service.js +0 -34
  96. package/dist/runtime/services/plugin-loader.service.d.ts +0 -45
  97. package/dist/runtime/services/plugin-loader.service.d.ts.map +0 -1
  98. package/dist/runtime/services/plugin-loader.service.js +0 -93
  99. package/dist/runtime/services/plugin.service.d.ts +0 -36
  100. package/dist/runtime/services/plugin.service.d.ts.map +0 -1
  101. package/dist/runtime/services/plugin.service.js +0 -31
  102. package/dist/runtime/services/secrets.service.d.ts +0 -15
  103. package/dist/runtime/services/secrets.service.d.ts.map +0 -1
  104. package/dist/runtime/services/secrets.service.js +0 -35
  105. package/dist/runtime/services.d.ts +0 -6
  106. package/dist/runtime/services.d.ts.map +0 -1
  107. package/dist/runtime/services.js +0 -5
  108. package/dist/runtime/validation.d.ts +0 -5
  109. package/dist/runtime/validation.d.ts.map +0 -1
  110. package/dist/runtime/validation.js +0 -13
  111. package/dist/testing/index.d.ts +0 -59
  112. package/dist/testing/index.d.ts.map +0 -1
  113. package/dist/testing/index.js +0 -45
  114. package/dist/testing/mocks/module-federation.service.d.ts +0 -6
  115. package/dist/testing/mocks/module-federation.service.d.ts.map +0 -1
  116. package/dist/testing/mocks/module-federation.service.js +0 -29
  117. package/dist/tsconfig.tsbuildinfo +0 -1
  118. package/dist/types.d.ts +0 -187
  119. package/dist/types.d.ts.map +0 -1
  120. package/dist/types.js +0 -1
  121. package/dist/zod.d.ts +0 -2
  122. package/dist/zod.d.ts.map +0 -1
  123. package/dist/zod.js +0 -1
@@ -0,0 +1,298 @@
1
+ import { r as __require } from "../../chunk-QQAxy9l9.mjs";
2
+ import { t as getNormalizedRemoteName } from "../../normalize-D7nae0Hn.mjs";
3
+ import { t as require_package } from "../../package-Dn-xZ55N.mjs";
4
+ import { rspack } from "@rspack/core";
5
+ import path from "node:path";
6
+ import fs from "node:fs";
7
+
8
+ //#region src/build/rspack/utils.ts
9
+ function getPluginInfo(context) {
10
+ const pkgPath = path.join(context, "package.json");
11
+ const pkg = JSON.parse(fs.readFileSync(pkgPath, "utf-8"));
12
+ return {
13
+ name: pkg.name,
14
+ version: pkg.version,
15
+ normalizedName: getNormalizedRemoteName(pkg.name),
16
+ dependencies: pkg.dependencies || {},
17
+ peerDependencies: pkg.peerDependencies || {}
18
+ };
19
+ }
20
+ const loadedModules = /* @__PURE__ */ new Set();
21
+ function loadDevConfig(devConfigPath) {
22
+ try {
23
+ const fullPath = path.resolve(devConfigPath);
24
+ if (loadedModules.has(fullPath)) {
25
+ delete __require.cache[fullPath];
26
+ const dirPath = path.dirname(fullPath);
27
+ for (const key of Object.keys(__require.cache)) if (key.startsWith(dirPath) && key !== fullPath) delete __require.cache[key];
28
+ }
29
+ const module = __require(fullPath).default;
30
+ loadedModules.add(fullPath);
31
+ return module;
32
+ } catch (error) {
33
+ console.warn(`Could not load dev config from ${devConfigPath}:`, error.message);
34
+ return null;
35
+ }
36
+ }
37
+
38
+ //#endregion
39
+ //#region src/build/rspack/module-federation.ts
40
+ function buildSharedDependencies(pluginInfo) {
41
+ const everyPluginPkg = require_package();
42
+ return {
43
+ "every-plugin": {
44
+ version: everyPluginPkg.version,
45
+ singleton: true,
46
+ requiredVersion: `${everyPluginPkg.version}`,
47
+ strictVersion: false,
48
+ eager: false
49
+ },
50
+ effect: {
51
+ version: everyPluginPkg.dependencies.effect,
52
+ singleton: true,
53
+ requiredVersion: `${everyPluginPkg.dependencies.effect}`,
54
+ strictVersion: false,
55
+ eager: false
56
+ },
57
+ zod: {
58
+ version: everyPluginPkg.dependencies.zod,
59
+ singleton: true,
60
+ requiredVersion: `${everyPluginPkg.dependencies.zod}`,
61
+ strictVersion: false,
62
+ eager: false
63
+ },
64
+ "@orpc/contract": {
65
+ version: everyPluginPkg.dependencies["@orpc/contract"],
66
+ singleton: true,
67
+ requiredVersion: `${everyPluginPkg.dependencies["@orpc/contract"]}`,
68
+ strictVersion: false,
69
+ eager: false
70
+ },
71
+ "@orpc/server": {
72
+ version: everyPluginPkg.dependencies["@orpc/server"],
73
+ singleton: true,
74
+ requiredVersion: `${everyPluginPkg.dependencies["@orpc/server"]}`,
75
+ strictVersion: false,
76
+ eager: false
77
+ }
78
+ };
79
+ }
80
+
81
+ //#endregion
82
+ //#region src/build/rspack/dev-server-middleware.ts
83
+ function setupPluginMiddleware(devServer, pluginInfo, devConfig, port) {
84
+ let handlers = {
85
+ rpc: null,
86
+ api: null
87
+ };
88
+ let cleanup = null;
89
+ const performCleanup = async () => {
90
+ if (cleanup) {
91
+ await cleanup();
92
+ cleanup = null;
93
+ }
94
+ };
95
+ (async () => {
96
+ await performCleanup();
97
+ try {
98
+ const { createPluginRuntime } = await import("../../index.mjs");
99
+ const { RPCHandler } = await import("@orpc/server/fetch");
100
+ const { onError } = await import("@orpc/server");
101
+ const { OpenAPIHandler } = await import("../../fetch-KLktuWuM.mjs");
102
+ const { OpenAPIReferencePlugin } = await import("../../plugins-Ps5Xxpk2.mjs");
103
+ const { ZodToJsonSchemaConverter } = await import("../../zod4-VpXuwRO7.mjs");
104
+ const pluginId = devConfig?.pluginId || pluginInfo.normalizedName;
105
+ const runtime = createPluginRuntime({ registry: { [pluginId]: { remoteUrl: `http://localhost:${port}/remoteEntry.js` } } });
106
+ const loaded = await runtime.usePlugin(pluginId, devConfig?.config);
107
+ cleanup = async () => {
108
+ if (loaded && typeof loaded.dispose === "function") await loaded.dispose();
109
+ if (runtime && typeof runtime.cleanup === "function") await runtime.cleanup();
110
+ handlers.rpc = null;
111
+ handlers.api = null;
112
+ if (devServer.app.locals.handlers) devServer.app.locals.handlers = null;
113
+ };
114
+ handlers.rpc = new RPCHandler(loaded.router, { interceptors: [onError((error) => {
115
+ console.error("🔴 RPC Error:", error);
116
+ })] });
117
+ handlers.api = new OpenAPIHandler(loaded.router, {
118
+ plugins: [new OpenAPIReferencePlugin({ schemaConverters: [new ZodToJsonSchemaConverter()] })],
119
+ interceptors: [onError((error) => {
120
+ console.error("🔴 OpenAPI Error:", error);
121
+ })]
122
+ });
123
+ console.log(`╭─────────────────────────────────────────────`);
124
+ console.log(`│ ✅ Plugin dev server ready: `);
125
+ console.log(`├─────────────────────────────────────────────`);
126
+ console.log(`│ 📡 RPC: http://localhost:${port}/api/rpc`);
127
+ console.log(`│ 📖 Docs: http://localhost:${port}/api`);
128
+ console.log(`│ 💚 Health: http://localhost:${port}/`);
129
+ console.log(`╰─────────────────────────────────────────────`);
130
+ devServer.app.locals.handlers = handlers;
131
+ if (devServer.server) devServer.server.once("close", async () => {
132
+ await performCleanup();
133
+ });
134
+ } catch (error) {
135
+ console.error("❌ Failed to load plugin:", error);
136
+ await performCleanup();
137
+ }
138
+ })();
139
+ process.once("SIGINT", async () => {
140
+ await performCleanup();
141
+ });
142
+ process.once("SIGTERM", async () => {
143
+ await performCleanup();
144
+ });
145
+ devServer.app.get("/", (req, res) => {
146
+ res.json({
147
+ ok: true,
148
+ plugin: pluginInfo.normalizedName,
149
+ version: pluginInfo.version,
150
+ status: devServer.app.locals.handlers?.rpc ? "ready" : "loading",
151
+ endpoints: {
152
+ health: "/",
153
+ docs: "/api",
154
+ rpc: "/api/rpc"
155
+ }
156
+ });
157
+ });
158
+ const handleApiRequest = async (req, res) => {
159
+ const apiHandler = devServer.app.locals.handlers?.api;
160
+ if (!apiHandler) return res.status(503).json({ error: "Plugin still loading..." });
161
+ try {
162
+ const url = `http://${req.headers.host}${req.url}`;
163
+ const webRequest = new Request(url, {
164
+ method: req.method,
165
+ headers: req.headers,
166
+ body: req.method !== "GET" && req.method !== "HEAD" ? req : void 0
167
+ });
168
+ const result = await apiHandler.handle(webRequest, {
169
+ prefix: "/api",
170
+ context: {}
171
+ });
172
+ if (result.response) {
173
+ res.status(result.response.status);
174
+ result.response.headers.forEach((value, key) => {
175
+ res.setHeader(key, value);
176
+ });
177
+ const text = await result.response.text();
178
+ res.send(text);
179
+ } else res.status(404).send("Not Found");
180
+ } catch (error) {
181
+ console.error("OpenAPI error:", error);
182
+ res.status(500).json({ error: error.message });
183
+ }
184
+ };
185
+ devServer.app.all("/api", handleApiRequest);
186
+ devServer.app.all("/api/*", handleApiRequest);
187
+ devServer.app.all("/api/rpc/*", async (req, res) => {
188
+ const rpcHandler = devServer.app.locals.handlers?.rpc;
189
+ if (!rpcHandler) return res.status(503).json({ error: "Plugin still loading..." });
190
+ try {
191
+ const url = `http://${req.headers.host}${req.url}`;
192
+ const webRequest = new Request(url, {
193
+ method: req.method,
194
+ headers: req.headers,
195
+ body: req.method !== "GET" && req.method !== "HEAD" ? req : void 0
196
+ });
197
+ const result = await rpcHandler.handle(webRequest, {
198
+ prefix: "/api/rpc",
199
+ context: {}
200
+ });
201
+ if (result.response) {
202
+ res.status(result.response.status);
203
+ result.response.headers.forEach((value, key) => {
204
+ res.setHeader(key, value);
205
+ });
206
+ const text = await result.response.text();
207
+ res.send(text);
208
+ } else res.status(404).send("Not Found");
209
+ } catch (error) {
210
+ console.error("RPC error:", error);
211
+ res.status(500).json({ error: error.message });
212
+ }
213
+ });
214
+ }
215
+
216
+ //#endregion
217
+ //#region src/build/rspack/plugin.ts
218
+ var EveryPluginDevServer = class {
219
+ name = "EveryPluginDevServer";
220
+ constructor(options = {}) {
221
+ this.options = options;
222
+ }
223
+ apply(compiler) {
224
+ const pluginInfo = getPluginInfo(compiler.options.context || process.cwd());
225
+ const devConfig = loadDevConfig(this.options.devConfigPath || "./plugin.dev.ts");
226
+ const port = this.options.port || devConfig?.port || 3999;
227
+ this.configureDefaults(compiler, pluginInfo);
228
+ if (!compiler.options.devServer) compiler.options.devServer = {};
229
+ this.configureDevServer(compiler, pluginInfo, devConfig, port);
230
+ new rspack.container.ModuleFederationPlugin({
231
+ name: pluginInfo.normalizedName,
232
+ filename: "remoteEntry.js",
233
+ runtimePlugins: [__require.resolve("@module-federation/node/runtimePlugin")],
234
+ library: { type: "commonjs-module" },
235
+ exposes: { "./plugin": "./src/index.ts" },
236
+ shared: buildSharedDependencies(pluginInfo)
237
+ }).apply(compiler);
238
+ }
239
+ configureDefaults(compiler, pluginInfo) {
240
+ const context = compiler.options.context || process.cwd();
241
+ if (!compiler.options.output) compiler.options.output = {};
242
+ compiler.options.output.uniqueName = pluginInfo.normalizedName;
243
+ compiler.options.output.publicPath = "auto";
244
+ compiler.options.output.path = path.resolve(context, "dist");
245
+ compiler.options.output.clean = true;
246
+ compiler.options.output.library = { type: "commonjs-module" };
247
+ if (!compiler.options.entry) compiler.options.entry = { main: { import: ["./src/index"] } };
248
+ if (!compiler.options.target) compiler.options.target = "async-node";
249
+ if (!compiler.options.mode) compiler.options.mode = process.env.NODE_ENV === "development" ? "development" : "production";
250
+ if (!compiler.options.devtool) compiler.options.devtool = "source-map";
251
+ if (!compiler.options.infrastructureLogging) compiler.options.infrastructureLogging = { level: "warn" };
252
+ this.ensureTypeScriptLoader(compiler);
253
+ if (!compiler.options.resolve) compiler.options.resolve = {};
254
+ compiler.options.resolve.extensions = [
255
+ "...",
256
+ ".tsx",
257
+ ".ts"
258
+ ];
259
+ }
260
+ ensureTypeScriptLoader(compiler) {
261
+ if (!compiler.options.module) compiler.options.module = { rules: [] };
262
+ if (!compiler.options.module.rules) compiler.options.module.rules = [];
263
+ if (!compiler.options.module.rules.some((rule) => typeof rule === "object" && rule !== null && "test" in rule && rule.test instanceof RegExp && rule.test.test(".ts"))) compiler.options.module.rules.push({
264
+ test: /\.tsx?$/,
265
+ use: "builtin:swc-loader",
266
+ exclude: /node_modules/
267
+ });
268
+ }
269
+ configureDevServer(compiler, pluginInfo, devConfig, port) {
270
+ if (!compiler.options.devServer) return;
271
+ const context = compiler.options.context || process.cwd();
272
+ const originalSetup = compiler.options.devServer.setupMiddlewares;
273
+ compiler.options.devServer.port = port;
274
+ compiler.options.devServer.static = path.join(context, "dist");
275
+ compiler.options.devServer.hot = true;
276
+ compiler.options.devServer.devMiddleware = { writeToDisk: true };
277
+ compiler.options.devServer.headers = {
278
+ "Access-Control-Allow-Origin": "*",
279
+ "Access-Control-Allow-Methods": "GET, POST, PUT, DELETE, PATCH, OPTIONS",
280
+ "Access-Control-Allow-Headers": "X-Requested-With, content-type, Authorization"
281
+ };
282
+ compiler.options.devServer.client = {
283
+ logging: "warn",
284
+ overlay: {
285
+ warnings: false,
286
+ errors: true
287
+ }
288
+ };
289
+ compiler.options.devServer.setupMiddlewares = (middlewares, devServer) => {
290
+ setupPluginMiddleware(devServer, pluginInfo, devConfig, port);
291
+ return originalSetup ? originalSetup(middlewares, devServer) : middlewares;
292
+ };
293
+ }
294
+ };
295
+
296
+ //#endregion
297
+ export { EveryPluginDevServer };
298
+ //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXgubWpzIiwibmFtZXMiOlsiaGFuZGxlcnM6IHsgcnBjOiBhbnksIGFwaTogYW55IH0iLCJjbGVhbnVwOiAoKCkgPT4gUHJvbWlzZTx2b2lkPikgfCBudWxsIiwib3B0aW9uczogRXZlcnlQbHVnaW5PcHRpb25zIl0sInNvdXJjZXMiOlsiLi4vLi4vLi4vc3JjL2J1aWxkL3JzcGFjay91dGlscy50cyIsIi4uLy4uLy4uL3NyYy9idWlsZC9yc3BhY2svbW9kdWxlLWZlZGVyYXRpb24udHMiLCIuLi8uLi8uLi9zcmMvYnVpbGQvcnNwYWNrL2Rldi1zZXJ2ZXItbWlkZGxld2FyZS50cyIsIi4uLy4uLy4uL3NyYy9idWlsZC9yc3BhY2svcGx1Z2luLnRzIl0sInNvdXJjZXNDb250ZW50IjpbImltcG9ydCBwYXRoIGZyb20gJ25vZGU6cGF0aCc7XG5pbXBvcnQgZnMgZnJvbSAnbm9kZTpmcyc7XG5pbXBvcnQgeyBnZXROb3JtYWxpemVkUmVtb3RlTmFtZSB9IGZyb20gJ2V2ZXJ5LXBsdWdpbi9ub3JtYWxpemUnO1xuXG5leHBvcnQgaW50ZXJmYWNlIFBsdWdpbkluZm8ge1xuICBuYW1lOiBzdHJpbmc7XG4gIHZlcnNpb246IHN0cmluZztcbiAgbm9ybWFsaXplZE5hbWU6IHN0cmluZztcbiAgZGVwZW5kZW5jaWVzOiBSZWNvcmQ8c3RyaW5nLCBzdHJpbmc+O1xuICBwZWVyRGVwZW5kZW5jaWVzOiBSZWNvcmQ8c3RyaW5nLCBzdHJpbmc+O1xufVxuXG5leHBvcnQgZnVuY3Rpb24gZ2V0UGx1Z2luSW5mbyhjb250ZXh0OiBzdHJpbmcpOiBQbHVnaW5JbmZvIHtcbiAgY29uc3QgcGtnUGF0aCA9IHBhdGguam9pbihjb250ZXh0LCAncGFja2FnZS5qc29uJyk7XG4gIGNvbnN0IHBrZyA9IEpTT04ucGFyc2UoZnMucmVhZEZpbGVTeW5jKHBrZ1BhdGgsICd1dGYtOCcpKTtcblxuICByZXR1cm4ge1xuICAgIG5hbWU6IHBrZy5uYW1lLFxuICAgIHZlcnNpb246IHBrZy52ZXJzaW9uLFxuICAgIG5vcm1hbGl6ZWROYW1lOiBnZXROb3JtYWxpemVkUmVtb3RlTmFtZShwa2cubmFtZSksXG4gICAgZGVwZW5kZW5jaWVzOiBwa2cuZGVwZW5kZW5jaWVzIHx8IHt9LFxuICAgIHBlZXJEZXBlbmRlbmNpZXM6IHBrZy5wZWVyRGVwZW5kZW5jaWVzIHx8IHt9LFxuICB9O1xufVxuXG5jb25zdCBsb2FkZWRNb2R1bGVzID0gbmV3IFNldDxzdHJpbmc+KCk7XG5cbmV4cG9ydCBmdW5jdGlvbiBsb2FkRGV2Q29uZmlnKGRldkNvbmZpZ1BhdGg6IHN0cmluZykge1xuICB0cnkge1xuICAgIGNvbnN0IGZ1bGxQYXRoID0gcGF0aC5yZXNvbHZlKGRldkNvbmZpZ1BhdGgpO1xuICAgIFxuICAgIGlmIChsb2FkZWRNb2R1bGVzLmhhcyhmdWxsUGF0aCkpIHtcbiAgICAgIGRlbGV0ZSByZXF1aXJlLmNhY2hlW2Z1bGxQYXRoXTtcbiAgICAgIGNvbnN0IGRpclBhdGggPSBwYXRoLmRpcm5hbWUoZnVsbFBhdGgpO1xuICAgICAgZm9yIChjb25zdCBrZXkgb2YgT2JqZWN0LmtleXMocmVxdWlyZS5jYWNoZSkpIHtcbiAgICAgICAgaWYgKGtleS5zdGFydHNXaXRoKGRpclBhdGgpICYmIGtleSAhPT0gZnVsbFBhdGgpIHtcbiAgICAgICAgICBkZWxldGUgcmVxdWlyZS5jYWNoZVtrZXldO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuICAgIFxuICAgIGNvbnN0IG1vZHVsZSA9IHJlcXVpcmUoZnVsbFBhdGgpLmRlZmF1bHQ7XG4gICAgbG9hZGVkTW9kdWxlcy5hZGQoZnVsbFBhdGgpO1xuICAgIHJldHVybiBtb2R1bGU7XG4gIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgY29uc29sZS53YXJuKGBDb3VsZCBub3QgbG9hZCBkZXYgY29uZmlnIGZyb20gJHtkZXZDb25maWdQYXRofTpgLCAoZXJyb3IgYXMgRXJyb3IpLm1lc3NhZ2UpO1xuICAgIHJldHVybiBudWxsO1xuICB9XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBjbGVhbnVwRGV2Q29uZmlnKCkge1xuICBmb3IgKGNvbnN0IG1vZHVsZVBhdGggb2YgbG9hZGVkTW9kdWxlcykge1xuICAgIGRlbGV0ZSByZXF1aXJlLmNhY2hlW21vZHVsZVBhdGhdO1xuICB9XG4gIGxvYWRlZE1vZHVsZXMuY2xlYXIoKTtcbn1cbiIsImltcG9ydCB0eXBlIHsgUGx1Z2luSW5mbyB9IGZyb20gJy4vdXRpbHMnO1xuXG5leHBvcnQgZnVuY3Rpb24gYnVpbGRTaGFyZWREZXBlbmRlbmNpZXMocGx1Z2luSW5mbzogUGx1Z2luSW5mbykge1xuICAvLyBHZXQgZXZlcnktcGx1Z2luIHBhY2thZ2UgaW5mbyBmb3IgdmVyc2lvbiBjb25zdHJhaW50c1xuICBjb25zdCBldmVyeVBsdWdpblBrZyA9IHJlcXVpcmUoJ2V2ZXJ5LXBsdWdpbi9wYWNrYWdlLmpzb24nKTtcblxuICByZXR1cm4ge1xuICAgICdldmVyeS1wbHVnaW4nOiB7XG4gICAgICB2ZXJzaW9uOiBldmVyeVBsdWdpblBrZy52ZXJzaW9uLFxuICAgICAgc2luZ2xldG9uOiB0cnVlLFxuICAgICAgcmVxdWlyZWRWZXJzaW9uOiBgJHtldmVyeVBsdWdpblBrZy52ZXJzaW9ufWAsXG4gICAgICBzdHJpY3RWZXJzaW9uOiBmYWxzZSxcbiAgICAgIGVhZ2VyOiBmYWxzZSxcbiAgICB9LFxuICAgIGVmZmVjdDoge1xuICAgICAgdmVyc2lvbjogZXZlcnlQbHVnaW5Qa2cuZGVwZW5kZW5jaWVzLmVmZmVjdCxcbiAgICAgIHNpbmdsZXRvbjogdHJ1ZSxcbiAgICAgIHJlcXVpcmVkVmVyc2lvbjogYCR7ZXZlcnlQbHVnaW5Qa2cuZGVwZW5kZW5jaWVzLmVmZmVjdH1gLFxuICAgICAgc3RyaWN0VmVyc2lvbjogZmFsc2UsXG4gICAgICBlYWdlcjogZmFsc2UsXG4gICAgfSxcbiAgICB6b2Q6IHtcbiAgICAgIHZlcnNpb246IGV2ZXJ5UGx1Z2luUGtnLmRlcGVuZGVuY2llcy56b2QsXG4gICAgICBzaW5nbGV0b246IHRydWUsXG4gICAgICByZXF1aXJlZFZlcnNpb246IGAke2V2ZXJ5UGx1Z2luUGtnLmRlcGVuZGVuY2llcy56b2R9YCxcbiAgICAgIHN0cmljdFZlcnNpb246IGZhbHNlLFxuICAgICAgZWFnZXI6IGZhbHNlLFxuICAgIH0sXG4gICAgJ0BvcnBjL2NvbnRyYWN0Jzoge1xuICAgICAgdmVyc2lvbjogZXZlcnlQbHVnaW5Qa2cuZGVwZW5kZW5jaWVzWydAb3JwYy9jb250cmFjdCddLFxuICAgICAgc2luZ2xldG9uOiB0cnVlLFxuICAgICAgcmVxdWlyZWRWZXJzaW9uOiBgJHtldmVyeVBsdWdpblBrZy5kZXBlbmRlbmNpZXNbJ0BvcnBjL2NvbnRyYWN0J119YCxcbiAgICAgIHN0cmljdFZlcnNpb246IGZhbHNlLFxuICAgICAgZWFnZXI6IGZhbHNlLFxuICAgIH0sXG4gICAgJ0BvcnBjL3NlcnZlcic6IHtcbiAgICAgIHZlcnNpb246IGV2ZXJ5UGx1Z2luUGtnLmRlcGVuZGVuY2llc1snQG9ycGMvc2VydmVyJ10sXG4gICAgICBzaW5nbGV0b246IHRydWUsXG4gICAgICByZXF1aXJlZFZlcnNpb246IGAke2V2ZXJ5UGx1Z2luUGtnLmRlcGVuZGVuY2llc1snQG9ycGMvc2VydmVyJ119YCxcbiAgICAgIHN0cmljdFZlcnNpb246IGZhbHNlLFxuICAgICAgZWFnZXI6IGZhbHNlLFxuICAgIH0sXG4gIH07XG59XG4iLCJpbXBvcnQgdHlwZSB7IFBsdWdpbkluZm8gfSBmcm9tICcuL3V0aWxzJztcblxuZXhwb3J0IGZ1bmN0aW9uIHNldHVwUGx1Z2luTWlkZGxld2FyZShkZXZTZXJ2ZXI6IGFueSwgcGx1Z2luSW5mbzogUGx1Z2luSW5mbywgZGV2Q29uZmlnOiBhbnksIHBvcnQ6IG51bWJlcikge1xuICBsZXQgaGFuZGxlcnM6IHsgcnBjOiBhbnksIGFwaTogYW55IH0gPSB7IHJwYzogbnVsbCwgYXBpOiBudWxsIH07XG4gIGxldCBjbGVhbnVwOiAoKCkgPT4gUHJvbWlzZTx2b2lkPikgfCBudWxsID0gbnVsbDtcblxuICBjb25zdCBwZXJmb3JtQ2xlYW51cCA9IGFzeW5jICgpID0+IHtcbiAgICBpZiAoY2xlYW51cCkge1xuICAgICAgYXdhaXQgY2xlYW51cCgpO1xuICAgICAgY2xlYW51cCA9IG51bGw7XG4gICAgfVxuICB9O1xuXG4gIChhc3luYyAoKSA9PiB7XG4gICAgYXdhaXQgcGVyZm9ybUNsZWFudXAoKTtcblxuICAgIHRyeSB7XG4gICAgICBjb25zdCB7IGNyZWF0ZVBsdWdpblJ1bnRpbWUgfSA9IGF3YWl0IGltcG9ydCgnZXZlcnktcGx1Z2luJyk7XG4gICAgICBjb25zdCB7IFJQQ0hhbmRsZXIgfSA9IGF3YWl0IGltcG9ydCgnQG9ycGMvc2VydmVyL2ZldGNoJyk7XG4gICAgICBjb25zdCB7IG9uRXJyb3IgfSA9IGF3YWl0IGltcG9ydCgnQG9ycGMvc2VydmVyJyk7XG4gICAgICBjb25zdCB7IE9wZW5BUElIYW5kbGVyIH0gPSBhd2FpdCBpbXBvcnQoJ0BvcnBjL29wZW5hcGkvZmV0Y2gnKTtcbiAgICAgIGNvbnN0IHsgT3BlbkFQSVJlZmVyZW5jZVBsdWdpbiB9ID0gYXdhaXQgaW1wb3J0KCdAb3JwYy9vcGVuYXBpL3BsdWdpbnMnKTtcbiAgICAgIGNvbnN0IHsgWm9kVG9Kc29uU2NoZW1hQ29udmVydGVyIH0gPSBhd2FpdCBpbXBvcnQoJ0BvcnBjL3pvZC96b2Q0Jyk7XG5cbiAgICAgIGNvbnN0IHBsdWdpbklkID0gZGV2Q29uZmlnPy5wbHVnaW5JZCB8fCBwbHVnaW5JbmZvLm5vcm1hbGl6ZWROYW1lO1xuXG4gICAgICBjb25zdCBydW50aW1lID0gY3JlYXRlUGx1Z2luUnVudGltZSh7XG4gICAgICAgIHJlZ2lzdHJ5OiB7XG4gICAgICAgICAgW3BsdWdpbklkXToge1xuICAgICAgICAgICAgcmVtb3RlVXJsOiBgaHR0cDovL2xvY2FsaG9zdDoke3BvcnR9L3JlbW90ZUVudHJ5LmpzYFxuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfSk7XG5cbiAgICAgIGNvbnN0IGxvYWRlZCA9IGF3YWl0IHJ1bnRpbWUudXNlUGx1Z2luKHBsdWdpbklkLCBkZXZDb25maWc/LmNvbmZpZyk7XG5cbiAgICAgIGNsZWFudXAgPSBhc3luYyAoKSA9PiB7XG4gICAgICAgIGlmIChsb2FkZWQgJiYgdHlwZW9mIChsb2FkZWQgYXMgYW55KS5kaXNwb3NlID09PSAnZnVuY3Rpb24nKSB7XG4gICAgICAgICAgYXdhaXQgKGxvYWRlZCBhcyBhbnkpLmRpc3Bvc2UoKTtcbiAgICAgICAgfVxuICAgICAgICBpZiAocnVudGltZSAmJiB0eXBlb2YgKHJ1bnRpbWUgYXMgYW55KS5jbGVhbnVwID09PSAnZnVuY3Rpb24nKSB7XG4gICAgICAgICAgYXdhaXQgKHJ1bnRpbWUgYXMgYW55KS5jbGVhbnVwKCk7XG4gICAgICAgIH1cbiAgICAgICAgaGFuZGxlcnMucnBjID0gbnVsbDtcbiAgICAgICAgaGFuZGxlcnMuYXBpID0gbnVsbDtcbiAgICAgICAgaWYgKGRldlNlcnZlci5hcHAubG9jYWxzLmhhbmRsZXJzKSB7XG4gICAgICAgICAgZGV2U2VydmVyLmFwcC5sb2NhbHMuaGFuZGxlcnMgPSBudWxsO1xuICAgICAgICB9XG4gICAgICB9O1xuXG4gICAgICAvLyBAdHMtZXhwZWN0LWVycm9yIG5vIHR5cGVcbiAgICAgIGhhbmRsZXJzLnJwYyA9IG5ldyBSUENIYW5kbGVyKGxvYWRlZC5yb3V0ZXIsIHtcbiAgICAgICAgaW50ZXJjZXB0b3JzOiBbXG4gICAgICAgICAgb25FcnJvcigoZXJyb3I6IGFueSkgPT4ge1xuICAgICAgICAgICAgY29uc29sZS5lcnJvcign8J+UtCBSUEMgRXJyb3I6JywgZXJyb3IpO1xuICAgICAgICAgIH0pLFxuICAgICAgICBdXG4gICAgICB9KTtcblxuICAgICAgLy8gQ3JlYXRlIE9wZW5BUEkgaGFuZGxlciBmb3IgZG9jdW1lbnRhdGlvblxuICAgICAgLy8gQHRzLWV4cGVjdC1lcnJvciBubyB0eXBlXG4gICAgICBoYW5kbGVycy5hcGkgPSBuZXcgT3BlbkFQSUhhbmRsZXIobG9hZGVkLnJvdXRlciwge1xuICAgICAgICBwbHVnaW5zOiBbXG4gICAgICAgICAgbmV3IE9wZW5BUElSZWZlcmVuY2VQbHVnaW4oe1xuICAgICAgICAgICAgc2NoZW1hQ29udmVydGVyczogW25ldyBab2RUb0pzb25TY2hlbWFDb252ZXJ0ZXIoKV0sXG4gICAgICAgICAgfSksXG4gICAgICAgIF0sXG4gICAgICAgIGludGVyY2VwdG9yczogW1xuICAgICAgICAgIG9uRXJyb3IoKGVycm9yOiBhbnkpID0+IHtcbiAgICAgICAgICAgIGNvbnNvbGUuZXJyb3IoJ/CflLQgT3BlbkFQSSBFcnJvcjonLCBlcnJvcik7XG4gICAgICAgICAgfSksXG4gICAgICAgIF1cbiAgICAgIH0pO1xuXG4gICAgICBjb25zb2xlLmxvZyhg4pWt4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSAYCk7XG4gICAgICBjb25zb2xlLmxvZyhg4pSCICDinIUgUGx1Z2luIGRldiBzZXJ2ZXIgcmVhZHk6IGApO1xuICAgICAgY29uc29sZS5sb2coYOKUnOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgGApO1xuICAgICAgY29uc29sZS5sb2coYOKUgiAg8J+ToSBSUEM6ICAgIGh0dHA6Ly9sb2NhbGhvc3Q6JHtwb3J0fS9hcGkvcnBjYCk7XG4gICAgICBjb25zb2xlLmxvZyhg4pSCICDwn5OWIERvY3M6ICAgaHR0cDovL2xvY2FsaG9zdDoke3BvcnR9L2FwaWApO1xuICAgICAgY29uc29sZS5sb2coYOKUgiAg8J+SmiBIZWFsdGg6IGh0dHA6Ly9sb2NhbGhvc3Q6JHtwb3J0fS9gKTtcbiAgICAgIGNvbnNvbGUubG9nKGDilbDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIBgKTtcblxuICAgICAgZGV2U2VydmVyLmFwcC5sb2NhbHMuaGFuZGxlcnMgPSBoYW5kbGVycztcblxuICAgICAgaWYgKGRldlNlcnZlci5zZXJ2ZXIpIHtcbiAgICAgICAgZGV2U2VydmVyLnNlcnZlci5vbmNlKCdjbG9zZScsIGFzeW5jICgpID0+IHtcbiAgICAgICAgICBhd2FpdCBwZXJmb3JtQ2xlYW51cCgpO1xuICAgICAgICB9KTtcbiAgICAgIH1cbiAgICB9IGNhdGNoIChlcnJvcikge1xuICAgICAgY29uc29sZS5lcnJvcign4p2MIEZhaWxlZCB0byBsb2FkIHBsdWdpbjonLCBlcnJvcik7XG4gICAgICBhd2FpdCBwZXJmb3JtQ2xlYW51cCgpO1xuICAgIH1cbiAgfSkoKTtcblxuICBwcm9jZXNzLm9uY2UoJ1NJR0lOVCcsIGFzeW5jICgpID0+IHtcbiAgICBhd2FpdCBwZXJmb3JtQ2xlYW51cCgpO1xuICB9KTtcbiAgcHJvY2Vzcy5vbmNlKCdTSUdURVJNJywgYXN5bmMgKCkgPT4ge1xuICAgIGF3YWl0IHBlcmZvcm1DbGVhbnVwKCk7XG4gIH0pO1xuXG4gIC8vIFJvb3QgaGVhbHRoIGNoZWNrXG4gIGRldlNlcnZlci5hcHAuZ2V0KCcvJywgKHJlcTogYW55LCByZXM6IGFueSkgPT4ge1xuICAgIHJlcy5qc29uKHtcbiAgICAgIG9rOiB0cnVlLFxuICAgICAgcGx1Z2luOiBwbHVnaW5JbmZvLm5vcm1hbGl6ZWROYW1lLFxuICAgICAgdmVyc2lvbjogcGx1Z2luSW5mby52ZXJzaW9uLFxuICAgICAgc3RhdHVzOiBkZXZTZXJ2ZXIuYXBwLmxvY2Fscy5oYW5kbGVycz8ucnBjID8gJ3JlYWR5JyA6ICdsb2FkaW5nJyxcbiAgICAgIGVuZHBvaW50czoge1xuICAgICAgICBoZWFsdGg6ICcvJyxcbiAgICAgICAgZG9jczogJy9hcGknLFxuICAgICAgICBycGM6ICcvYXBpL3JwYydcbiAgICAgIH1cbiAgICB9KTtcbiAgfSk7XG5cbiAgLy8gT3BlbkFQSSBkb2N1bWVudGF0aW9uIGFuZCBSRVNUIGVuZHBvaW50cyBhdCAvYXBpIGFuZCAvYXBpLypcbiAgY29uc3QgaGFuZGxlQXBpUmVxdWVzdCA9IGFzeW5jIChyZXE6IGFueSwgcmVzOiBhbnkpID0+IHtcbiAgICBjb25zdCBhcGlIYW5kbGVyID0gZGV2U2VydmVyLmFwcC5sb2NhbHMuaGFuZGxlcnM/LmFwaTtcbiAgICBpZiAoIWFwaUhhbmRsZXIpIHtcbiAgICAgIHJldHVybiByZXMuc3RhdHVzKDUwMykuanNvbih7IGVycm9yOiAnUGx1Z2luIHN0aWxsIGxvYWRpbmcuLi4nIH0pO1xuICAgIH1cblxuICAgIHRyeSB7XG4gICAgICBjb25zdCB1cmwgPSBgaHR0cDovLyR7cmVxLmhlYWRlcnMuaG9zdH0ke3JlcS51cmx9YDtcbiAgICAgIGNvbnN0IHdlYlJlcXVlc3QgPSBuZXcgUmVxdWVzdCh1cmwsIHtcbiAgICAgICAgbWV0aG9kOiByZXEubWV0aG9kLFxuICAgICAgICBoZWFkZXJzOiByZXEuaGVhZGVycyxcbiAgICAgICAgYm9keTogcmVxLm1ldGhvZCAhPT0gJ0dFVCcgJiYgcmVxLm1ldGhvZCAhPT0gJ0hFQUQnID8gcmVxIDogdW5kZWZpbmVkXG4gICAgICB9KTtcblxuICAgICAgY29uc3QgcmVzdWx0ID0gYXdhaXQgYXBpSGFuZGxlci5oYW5kbGUod2ViUmVxdWVzdCwge1xuICAgICAgICBwcmVmaXg6ICcvYXBpJyxcbiAgICAgICAgY29udGV4dDoge31cbiAgICAgIH0pO1xuXG4gICAgICBpZiAocmVzdWx0LnJlc3BvbnNlKSB7XG4gICAgICAgIHJlcy5zdGF0dXMocmVzdWx0LnJlc3BvbnNlLnN0YXR1cyk7XG4gICAgICAgIHJlc3VsdC5yZXNwb25zZS5oZWFkZXJzLmZvckVhY2goKHZhbHVlOiBzdHJpbmcsIGtleTogc3RyaW5nKSA9PiB7XG4gICAgICAgICAgcmVzLnNldEhlYWRlcihrZXksIHZhbHVlKTtcbiAgICAgICAgfSk7XG4gICAgICAgIGNvbnN0IHRleHQgPSBhd2FpdCByZXN1bHQucmVzcG9uc2UudGV4dCgpO1xuICAgICAgICByZXMuc2VuZCh0ZXh0KTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHJlcy5zdGF0dXMoNDA0KS5zZW5kKCdOb3QgRm91bmQnKTtcbiAgICAgIH1cbiAgICB9IGNhdGNoIChlcnJvcikge1xuICAgICAgY29uc29sZS5lcnJvcignT3BlbkFQSSBlcnJvcjonLCBlcnJvcik7XG4gICAgICByZXMuc3RhdHVzKDUwMCkuanNvbih7IGVycm9yOiAoZXJyb3IgYXMgRXJyb3IpLm1lc3NhZ2UgfSk7XG4gICAgfVxuICB9O1xuXG4gIGRldlNlcnZlci5hcHAuYWxsKCcvYXBpJywgaGFuZGxlQXBpUmVxdWVzdCk7XG4gIGRldlNlcnZlci5hcHAuYWxsKCcvYXBpLyonLCBoYW5kbGVBcGlSZXF1ZXN0KTtcblxuICAvLyBSUEMgY2FsbHMgYXQgL2FwaS9ycGMvKlxuICBkZXZTZXJ2ZXIuYXBwLmFsbCgnL2FwaS9ycGMvKicsIGFzeW5jIChyZXE6IGFueSwgcmVzOiBhbnkpID0+IHtcbiAgICBjb25zdCBycGNIYW5kbGVyID0gZGV2U2VydmVyLmFwcC5sb2NhbHMuaGFuZGxlcnM/LnJwYztcbiAgICBpZiAoIXJwY0hhbmRsZXIpIHtcbiAgICAgIHJldHVybiByZXMuc3RhdHVzKDUwMykuanNvbih7IGVycm9yOiAnUGx1Z2luIHN0aWxsIGxvYWRpbmcuLi4nIH0pO1xuICAgIH1cblxuICAgIHRyeSB7XG4gICAgICBjb25zdCB1cmwgPSBgaHR0cDovLyR7cmVxLmhlYWRlcnMuaG9zdH0ke3JlcS51cmx9YDtcbiAgICAgIGNvbnN0IHdlYlJlcXVlc3QgPSBuZXcgUmVxdWVzdCh1cmwsIHtcbiAgICAgICAgbWV0aG9kOiByZXEubWV0aG9kLFxuICAgICAgICBoZWFkZXJzOiByZXEuaGVhZGVycyxcbiAgICAgICAgYm9keTogcmVxLm1ldGhvZCAhPT0gJ0dFVCcgJiYgcmVxLm1ldGhvZCAhPT0gJ0hFQUQnID8gcmVxIDogdW5kZWZpbmVkXG4gICAgICB9KTtcblxuICAgICAgY29uc3QgcmVzdWx0ID0gYXdhaXQgcnBjSGFuZGxlci5oYW5kbGUod2ViUmVxdWVzdCwge1xuICAgICAgICBwcmVmaXg6ICcvYXBpL3JwYycsXG4gICAgICAgIGNvbnRleHQ6IHt9XG4gICAgICB9KTtcblxuICAgICAgaWYgKHJlc3VsdC5yZXNwb25zZSkge1xuICAgICAgICByZXMuc3RhdHVzKHJlc3VsdC5yZXNwb25zZS5zdGF0dXMpO1xuICAgICAgICByZXN1bHQucmVzcG9uc2UuaGVhZGVycy5mb3JFYWNoKCh2YWx1ZTogc3RyaW5nLCBrZXk6IHN0cmluZykgPT4ge1xuICAgICAgICAgIHJlcy5zZXRIZWFkZXIoa2V5LCB2YWx1ZSk7XG4gICAgICAgIH0pO1xuICAgICAgICBjb25zdCB0ZXh0ID0gYXdhaXQgcmVzdWx0LnJlc3BvbnNlLnRleHQoKTtcbiAgICAgICAgcmVzLnNlbmQodGV4dCk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICByZXMuc3RhdHVzKDQwNCkuc2VuZCgnTm90IEZvdW5kJyk7XG4gICAgICB9XG4gICAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICAgIGNvbnNvbGUuZXJyb3IoJ1JQQyBlcnJvcjonLCBlcnJvcik7XG4gICAgICByZXMuc3RhdHVzKDUwMCkuanNvbih7IGVycm9yOiAoZXJyb3IgYXMgRXJyb3IpLm1lc3NhZ2UgfSk7XG4gICAgfVxuICB9KTtcbn1cbiIsImltcG9ydCB0eXBlIHsgQ29tcGlsZXIsIFJzcGFja1BsdWdpbkluc3RhbmNlIH0gZnJvbSAnQHJzcGFjay9jb3JlJztcbmltcG9ydCB7IHJzcGFjayB9IGZyb20gJ0Byc3BhY2svY29yZSc7XG5pbXBvcnQgcGF0aCBmcm9tICdub2RlOnBhdGgnO1xuaW1wb3J0IHsgZ2V0UGx1Z2luSW5mbyB9IGZyb20gJy4vdXRpbHMnO1xuaW1wb3J0IHsgbG9hZERldkNvbmZpZyB9IGZyb20gJy4vdXRpbHMnO1xuaW1wb3J0IHsgYnVpbGRTaGFyZWREZXBlbmRlbmNpZXMgfSBmcm9tICcuL21vZHVsZS1mZWRlcmF0aW9uJztcbmltcG9ydCB7IHNldHVwUGx1Z2luTWlkZGxld2FyZSB9IGZyb20gJy4vZGV2LXNlcnZlci1taWRkbGV3YXJlJztcblxuXG5leHBvcnQgaW50ZXJmYWNlIEV2ZXJ5UGx1Z2luT3B0aW9ucyB7XG4gIGRldkNvbmZpZ1BhdGg/OiBzdHJpbmc7ICAvLyBkZWZhdWx0cyB0byAnLi9wbHVnaW4uZGV2LnRzJ1xuICBwb3J0PzogbnVtYmVyOyAgICAgICAgICAgLy8gb3ZlcnJpZGUgcGx1Z2luLmRldi50cyBwb3J0XG4gIHBsdWdpbklkPzogc3RyaW5nOyAgICAgICAvLyBvdmVycmlkZSBhdXRvLWRldGVjdGVkXG59XG5cbmV4cG9ydCBjbGFzcyBFdmVyeVBsdWdpbkRldlNlcnZlciBpbXBsZW1lbnRzIFJzcGFja1BsdWdpbkluc3RhbmNlIHtcbiAgbmFtZSA9ICdFdmVyeVBsdWdpbkRldlNlcnZlcic7XG5cbiAgY29uc3RydWN0b3IocHJpdmF0ZSBvcHRpb25zOiBFdmVyeVBsdWdpbk9wdGlvbnMgPSB7fSkge31cblxuICBhcHBseShjb21waWxlcjogQ29tcGlsZXIpIHtcbiAgICAvLyBMb2FkIGNvbmZpZ3VyYXRpb25cbiAgICBjb25zdCBwbHVnaW5JbmZvID0gZ2V0UGx1Z2luSW5mbyhjb21waWxlci5vcHRpb25zLmNvbnRleHQgfHwgcHJvY2Vzcy5jd2QoKSk7XG4gICAgY29uc3QgZGV2Q29uZmlnID0gbG9hZERldkNvbmZpZyh0aGlzLm9wdGlvbnMuZGV2Q29uZmlnUGF0aCB8fCAnLi9wbHVnaW4uZGV2LnRzJyk7XG4gICAgY29uc3QgcG9ydCA9IHRoaXMub3B0aW9ucy5wb3J0IHx8IGRldkNvbmZpZz8ucG9ydCB8fCAzOTk5O1xuXG4gICAgLy8gQ29uZmlndXJlIGRlZmF1bHRzIGltbWVkaWF0ZWx5IChubyBob29rcyBuZWVkZWQpXG4gICAgdGhpcy5jb25maWd1cmVEZWZhdWx0cyhjb21waWxlciwgcGx1Z2luSW5mbyk7XG5cbiAgICAvLyBJbml0aWFsaXplIGRldlNlcnZlciBpZiBpdCBkb2Vzbid0IGV4aXN0XG4gICAgaWYgKCFjb21waWxlci5vcHRpb25zLmRldlNlcnZlcikge1xuICAgICAgY29tcGlsZXIub3B0aW9ucy5kZXZTZXJ2ZXIgPSB7fTtcbiAgICB9XG5cbiAgICAvLyBDb25maWd1cmUgZGV2IHNlcnZlclxuICAgIHRoaXMuY29uZmlndXJlRGV2U2VydmVyKGNvbXBpbGVyLCBwbHVnaW5JbmZvLCBkZXZDb25maWcsIHBvcnQpO1xuXG4gICAgLy8gQXBwbHkgTW9kdWxlIEZlZGVyYXRpb24gcGx1Z2luXG4gICAgbmV3IHJzcGFjay5jb250YWluZXIuTW9kdWxlRmVkZXJhdGlvblBsdWdpbih7XG4gICAgICBuYW1lOiBwbHVnaW5JbmZvLm5vcm1hbGl6ZWROYW1lLFxuICAgICAgZmlsZW5hbWU6ICdyZW1vdGVFbnRyeS5qcycsXG4gICAgICBydW50aW1lUGx1Z2luczogW1xuICAgICAgICByZXF1aXJlLnJlc29sdmUoJ0Btb2R1bGUtZmVkZXJhdGlvbi9ub2RlL3J1bnRpbWVQbHVnaW4nKSxcbiAgICAgIF0sXG4gICAgICBsaWJyYXJ5OiB7IHR5cGU6ICdjb21tb25qcy1tb2R1bGUnIH0sXG4gICAgICBleHBvc2VzOiB7XG4gICAgICAgICcuL3BsdWdpbic6ICcuL3NyYy9pbmRleC50cycsXG4gICAgICB9LFxuICAgICAgc2hhcmVkOiBidWlsZFNoYXJlZERlcGVuZGVuY2llcyhwbHVnaW5JbmZvKSxcbiAgICB9KS5hcHBseShjb21waWxlcik7XG4gIH1cblxuICBwcml2YXRlIGNvbmZpZ3VyZURlZmF1bHRzKGNvbXBpbGVyOiBDb21waWxlciwgcGx1Z2luSW5mbzogYW55KSB7XG4gICAgY29uc3QgY29udGV4dCA9IGNvbXBpbGVyLm9wdGlvbnMuY29udGV4dCB8fCBwcm9jZXNzLmN3ZCgpO1xuXG4gICAgLy8gQ29uZmlndXJlIG91dHB1dCBkZWZhdWx0c1xuICAgIGlmICghY29tcGlsZXIub3B0aW9ucy5vdXRwdXQpIHtcbiAgICAgIGNvbXBpbGVyLm9wdGlvbnMub3V0cHV0ID0ge307XG4gICAgfVxuICAgIGNvbXBpbGVyLm9wdGlvbnMub3V0cHV0LnVuaXF1ZU5hbWUgPSBwbHVnaW5JbmZvLm5vcm1hbGl6ZWROYW1lO1xuICAgIGNvbXBpbGVyLm9wdGlvbnMub3V0cHV0LnB1YmxpY1BhdGggPSAnYXV0byc7XG4gICAgY29tcGlsZXIub3B0aW9ucy5vdXRwdXQucGF0aCA9IHBhdGgucmVzb2x2ZShjb250ZXh0LCAnZGlzdCcpO1xuICAgIGNvbXBpbGVyLm9wdGlvbnMub3V0cHV0LmNsZWFuID0gdHJ1ZTtcbiAgICBjb21waWxlci5vcHRpb25zLm91dHB1dC5saWJyYXJ5ID0geyB0eXBlOiAnY29tbW9uanMtbW9kdWxlJyB9O1xuXG4gICAgLy8gQ29uZmlndXJlIGVudHJ5IGlmIG5vdCBzZXRcbiAgICBpZiAoIWNvbXBpbGVyLm9wdGlvbnMuZW50cnkpIHtcbiAgICAgIGNvbXBpbGVyLm9wdGlvbnMuZW50cnkgPSB7XG4gICAgICAgIG1haW46IHtcbiAgICAgICAgICBpbXBvcnQ6IFsnLi9zcmMvaW5kZXgnXVxuICAgICAgICB9XG4gICAgICB9O1xuICAgIH1cblxuICAgIC8vIENvbmZpZ3VyZSB0YXJnZXQgYW5kIG1vZGUgZGVmYXVsdHNcbiAgICBpZiAoIWNvbXBpbGVyLm9wdGlvbnMudGFyZ2V0KSB7XG4gICAgICBjb21waWxlci5vcHRpb25zLnRhcmdldCA9ICdhc3luYy1ub2RlJztcbiAgICB9XG5cbiAgICBpZiAoIWNvbXBpbGVyLm9wdGlvbnMubW9kZSkge1xuICAgICAgY29tcGlsZXIub3B0aW9ucy5tb2RlID0gcHJvY2Vzcy5lbnYuTk9ERV9FTlYgPT09ICdkZXZlbG9wbWVudCcgPyAnZGV2ZWxvcG1lbnQnIDogJ3Byb2R1Y3Rpb24nO1xuICAgIH1cblxuICAgIC8vIENvbmZpZ3VyZSBkZXZ0b29sXG4gICAgaWYgKCFjb21waWxlci5vcHRpb25zLmRldnRvb2wpIHtcbiAgICAgIGNvbXBpbGVyLm9wdGlvbnMuZGV2dG9vbCA9ICdzb3VyY2UtbWFwJztcbiAgICB9XG5cbiAgICAvLyBTdXBwcmVzcyB2ZXJib3NlIGluZnJhc3RydWN0dXJlIGxvZ2dpbmdcbiAgICBpZiAoIWNvbXBpbGVyLm9wdGlvbnMuaW5mcmFzdHJ1Y3R1cmVMb2dnaW5nKSB7XG4gICAgICBjb21waWxlci5vcHRpb25zLmluZnJhc3RydWN0dXJlTG9nZ2luZyA9IHtcbiAgICAgICAgbGV2ZWw6ICd3YXJuJywgIC8vIE9ubHkgc2hvdyB3YXJuaW5ncyBhbmQgZXJyb3JzXG4gICAgICB9O1xuICAgIH1cblxuICAgIC8vIENvbmZpZ3VyZSBtb2R1bGUgcnVsZXMgLSBlbnN1cmUgVHlwZVNjcmlwdCBsb2FkZXIgaXMgcHJlc2VudFxuICAgIHRoaXMuZW5zdXJlVHlwZVNjcmlwdExvYWRlcihjb21waWxlcik7XG5cbiAgICAvLyBDb25maWd1cmUgcmVzb2x2ZSBleHRlbnNpb25zXG4gICAgaWYgKCFjb21waWxlci5vcHRpb25zLnJlc29sdmUpIHtcbiAgICAgIGNvbXBpbGVyLm9wdGlvbnMucmVzb2x2ZSA9IHt9O1xuICAgIH1cbiAgICBjb21waWxlci5vcHRpb25zLnJlc29sdmUuZXh0ZW5zaW9ucyA9IFsnLi4uJywgJy50c3gnLCAnLnRzJ107XG4gIH1cblxuICBwcml2YXRlIGVuc3VyZVR5cGVTY3JpcHRMb2FkZXIoY29tcGlsZXI6IENvbXBpbGVyKSB7XG4gICAgaWYgKCFjb21waWxlci5vcHRpb25zLm1vZHVsZSkge1xuICAgICAgY29tcGlsZXIub3B0aW9ucy5tb2R1bGUgPSB7IHJ1bGVzOiBbXSB9IGFzIGFueTtcbiAgICB9XG5cbiAgICBpZiAoIWNvbXBpbGVyLm9wdGlvbnMubW9kdWxlLnJ1bGVzKSB7XG4gICAgICBjb21waWxlci5vcHRpb25zLm1vZHVsZS5ydWxlcyA9IFtdO1xuICAgIH1cblxuICAgIC8vIENoZWNrIGlmIFR5cGVTY3JpcHQgbG9hZGVyIGlzIGFscmVhZHkgY29uZmlndXJlZFxuICAgIGNvbnN0IGhhc1RzTG9hZGVyID0gY29tcGlsZXIub3B0aW9ucy5tb2R1bGUucnVsZXMuc29tZSgocnVsZTogYW55KSA9PlxuICAgICAgdHlwZW9mIHJ1bGUgPT09ICdvYmplY3QnICYmXG4gICAgICBydWxlICE9PSBudWxsICYmXG4gICAgICAndGVzdCcgaW4gcnVsZSAmJlxuICAgICAgcnVsZS50ZXN0IGluc3RhbmNlb2YgUmVnRXhwICYmXG4gICAgICBydWxlLnRlc3QudGVzdCgnLnRzJylcbiAgICApO1xuXG4gICAgLy8gQWRkIFR5cGVTY3JpcHQgbG9hZGVyIGlmIG5vdCBwcmVzZW50XG4gICAgaWYgKCFoYXNUc0xvYWRlcikge1xuICAgICAgY29tcGlsZXIub3B0aW9ucy5tb2R1bGUucnVsZXMucHVzaCh7XG4gICAgICAgIHRlc3Q6IC9cXC50c3g/JC8sXG4gICAgICAgIHVzZTogJ2J1aWx0aW46c3djLWxvYWRlcicsXG4gICAgICAgIGV4Y2x1ZGU6IC9ub2RlX21vZHVsZXMvLFxuICAgICAgfSk7XG4gICAgfVxuICB9XG5cbiAgcHJpdmF0ZSBjb25maWd1cmVEZXZTZXJ2ZXIoY29tcGlsZXI6IENvbXBpbGVyLCBwbHVnaW5JbmZvOiBhbnksIGRldkNvbmZpZzogYW55LCBwb3J0OiBudW1iZXIpIHtcbiAgICBpZiAoIWNvbXBpbGVyLm9wdGlvbnMuZGV2U2VydmVyKSB7XG4gICAgICByZXR1cm47IC8vIFNob3VsZCBuZXZlciBoYXBwZW4gZHVlIHRvIGNoZWNrIGluIGFwcGx5KClcbiAgICB9XG5cbiAgICBjb25zdCBjb250ZXh0ID0gY29tcGlsZXIub3B0aW9ucy5jb250ZXh0IHx8IHByb2Nlc3MuY3dkKCk7XG4gICAgY29uc3Qgb3JpZ2luYWxTZXR1cCA9IGNvbXBpbGVyLm9wdGlvbnMuZGV2U2VydmVyLnNldHVwTWlkZGxld2FyZXM7XG5cbiAgICBjb21waWxlci5vcHRpb25zLmRldlNlcnZlci5wb3J0ID0gcG9ydDtcbiAgICBjb21waWxlci5vcHRpb25zLmRldlNlcnZlci5zdGF0aWMgPSBwYXRoLmpvaW4oY29udGV4dCwgJ2Rpc3QnKTtcbiAgICBjb21waWxlci5vcHRpb25zLmRldlNlcnZlci5ob3QgPSB0cnVlO1xuICAgIGNvbXBpbGVyLm9wdGlvbnMuZGV2U2VydmVyLmRldk1pZGRsZXdhcmUgPSB7IHdyaXRlVG9EaXNrOiB0cnVlIH07XG4gICAgY29tcGlsZXIub3B0aW9ucy5kZXZTZXJ2ZXIuaGVhZGVycyA9IHtcbiAgICAgICdBY2Nlc3MtQ29udHJvbC1BbGxvdy1PcmlnaW4nOiAnKicsXG4gICAgICAnQWNjZXNzLUNvbnRyb2wtQWxsb3ctTWV0aG9kcyc6ICdHRVQsIFBPU1QsIFBVVCwgREVMRVRFLCBQQVRDSCwgT1BUSU9OUycsXG4gICAgICAnQWNjZXNzLUNvbnRyb2wtQWxsb3ctSGVhZGVycyc6ICdYLVJlcXVlc3RlZC1XaXRoLCBjb250ZW50LXR5cGUsIEF1dGhvcml6YXRpb24nLFxuICAgIH07XG5cbiAgICAvLyBTdXBwcmVzcyB2ZXJib3NlIGxvZ2dpbmdcbiAgICBjb21waWxlci5vcHRpb25zLmRldlNlcnZlci5jbGllbnQgPSB7XG4gICAgICBsb2dnaW5nOiAnd2FybicsICAvLyBPbmx5IHNob3cgd2FybmluZ3MgYW5kIGVycm9yc1xuICAgICAgb3ZlcmxheToge1xuICAgICAgICB3YXJuaW5nczogZmFsc2UsICAvLyBEb24ndCBzaG93IHdhcm5pbmcgb3ZlcmxheVxuICAgICAgICBlcnJvcnM6IHRydWUsICAgICAvLyBTdGlsbCBzaG93IGVycm9yc1xuICAgICAgfSxcbiAgICB9O1xuXG4gICAgY29tcGlsZXIub3B0aW9ucy5kZXZTZXJ2ZXIuc2V0dXBNaWRkbGV3YXJlcyA9IChtaWRkbGV3YXJlcywgZGV2U2VydmVyKSA9PiB7XG4gICAgICBzZXR1cFBsdWdpbk1pZGRsZXdhcmUoZGV2U2VydmVyLCBwbHVnaW5JbmZvLCBkZXZDb25maWcsIHBvcnQpO1xuICAgICAgcmV0dXJuIG9yaWdpbmFsU2V0dXAgPyBvcmlnaW5hbFNldHVwKG1pZGRsZXdhcmVzLCBkZXZTZXJ2ZXIpIDogbWlkZGxld2FyZXM7XG4gICAgfTtcbiAgfVxufVxuIl0sIm1hcHBpbmdzIjoiOzs7Ozs7OztBQVlBLFNBQWdCLGNBQWMsU0FBNkI7Q0FDekQsTUFBTSxVQUFVLEtBQUssS0FBSyxTQUFTLGVBQWU7Q0FDbEQsTUFBTSxNQUFNLEtBQUssTUFBTSxHQUFHLGFBQWEsU0FBUyxRQUFRLENBQUM7QUFFekQsUUFBTztFQUNMLE1BQU0sSUFBSTtFQUNWLFNBQVMsSUFBSTtFQUNiLGdCQUFnQix3QkFBd0IsSUFBSSxLQUFLO0VBQ2pELGNBQWMsSUFBSSxnQkFBZ0IsRUFBRTtFQUNwQyxrQkFBa0IsSUFBSSxvQkFBb0IsRUFBRTtFQUM3Qzs7QUFHSCxNQUFNLGdDQUFnQixJQUFJLEtBQWE7QUFFdkMsU0FBZ0IsY0FBYyxlQUF1QjtBQUNuRCxLQUFJO0VBQ0YsTUFBTSxXQUFXLEtBQUssUUFBUSxjQUFjO0FBRTVDLE1BQUksY0FBYyxJQUFJLFNBQVMsRUFBRTtBQUMvQixvQkFBZSxNQUFNO0dBQ3JCLE1BQU0sVUFBVSxLQUFLLFFBQVEsU0FBUztBQUN0QyxRQUFLLE1BQU0sT0FBTyxPQUFPLGVBQWEsTUFBTSxDQUMxQyxLQUFJLElBQUksV0FBVyxRQUFRLElBQUksUUFBUSxTQUNyQyxrQkFBZSxNQUFNOztFQUszQixNQUFNLG1CQUFpQixTQUFTLENBQUM7QUFDakMsZ0JBQWMsSUFBSSxTQUFTO0FBQzNCLFNBQU87VUFDQSxPQUFPO0FBQ2QsVUFBUSxLQUFLLGtDQUFrQyxjQUFjLElBQUssTUFBZ0IsUUFBUTtBQUMxRixTQUFPOzs7Ozs7QUM1Q1gsU0FBZ0Isd0JBQXdCLFlBQXdCO0NBRTlELE1BQU07QUFFTixRQUFPO0VBQ0wsZ0JBQWdCO0dBQ2QsU0FBUyxlQUFlO0dBQ3hCLFdBQVc7R0FDWCxpQkFBaUIsR0FBRyxlQUFlO0dBQ25D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
@@ -0,0 +1,31 @@
1
+ import { createRequire } from "node:module";
2
+
3
+ //#region rolldown:runtime
4
+ var __create = Object.create;
5
+ var __defProp = Object.defineProperty;
6
+ var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
7
+ var __getOwnPropNames = Object.getOwnPropertyNames;
8
+ var __getProtoOf = Object.getPrototypeOf;
9
+ var __hasOwnProp = Object.prototype.hasOwnProperty;
10
+ var __commonJS = (cb, mod) => function() {
11
+ return mod || (0, cb[__getOwnPropNames(cb)[0]])((mod = { exports: {} }).exports, mod), mod.exports;
12
+ };
13
+ var __copyProps = (to, from, except, desc) => {
14
+ if (from && typeof from === "object" || typeof from === "function") for (var keys = __getOwnPropNames(from), i = 0, n = keys.length, key; i < n; i++) {
15
+ key = keys[i];
16
+ if (!__hasOwnProp.call(to, key) && key !== except) __defProp(to, key, {
17
+ get: ((k) => from[k]).bind(null, key),
18
+ enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable
19
+ });
20
+ }
21
+ return to;
22
+ };
23
+ var __reExport = (target, mod, secondTarget) => (__copyProps(target, mod, "default"), secondTarget && __copyProps(secondTarget, mod, "default"));
24
+ var __toESM = (mod, isNodeMode, target) => (target = mod != null ? __create(__getProtoOf(mod)) : {}, __copyProps(isNodeMode || !mod || !mod.__esModule ? __defProp(target, "default", {
25
+ value: mod,
26
+ enumerable: true
27
+ }) : target, mod));
28
+ var __require = /* @__PURE__ */ createRequire(import.meta.url);
29
+
30
+ //#endregion
31
+ export { __toESM as i, __reExport as n, __require as r, __commonJS as t };
@@ -0,0 +1,46 @@
1
+ //#region rolldown:runtime
2
+ var __create = Object.create;
3
+ var __defProp = Object.defineProperty;
4
+ var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
5
+ var __getOwnPropNames = Object.getOwnPropertyNames;
6
+ var __getProtoOf = Object.getPrototypeOf;
7
+ var __hasOwnProp = Object.prototype.hasOwnProperty;
8
+ var __commonJS = (cb, mod) => function() {
9
+ return mod || (0, cb[__getOwnPropNames(cb)[0]])((mod = { exports: {} }).exports, mod), mod.exports;
10
+ };
11
+ var __copyProps = (to, from, except, desc) => {
12
+ if (from && typeof from === "object" || typeof from === "function") for (var keys = __getOwnPropNames(from), i = 0, n = keys.length, key; i < n; i++) {
13
+ key = keys[i];
14
+ if (!__hasOwnProp.call(to, key) && key !== except) __defProp(to, key, {
15
+ get: ((k) => from[k]).bind(null, key),
16
+ enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable
17
+ });
18
+ }
19
+ return to;
20
+ };
21
+ var __reExport = (target, mod, secondTarget) => (__copyProps(target, mod, "default"), secondTarget && __copyProps(secondTarget, mod, "default"));
22
+ var __toESM = (mod, isNodeMode, target) => (target = mod != null ? __create(__getProtoOf(mod)) : {}, __copyProps(isNodeMode || !mod || !mod.__esModule ? __defProp(target, "default", {
23
+ value: mod,
24
+ enumerable: true
25
+ }) : target, mod));
26
+
27
+ //#endregion
28
+
29
+ Object.defineProperty(exports, '__commonJS', {
30
+ enumerable: true,
31
+ get: function () {
32
+ return __commonJS;
33
+ }
34
+ });
35
+ Object.defineProperty(exports, '__reExport', {
36
+ enumerable: true,
37
+ get: function () {
38
+ return __reExport;
39
+ }
40
+ });
41
+ Object.defineProperty(exports, '__toESM', {
42
+ enumerable: true,
43
+ get: function () {
44
+ return __toESM;
45
+ }
46
+ });
@@ -0,0 +1,9 @@
1
+
2
+
3
+ var effect = require("effect");
4
+ Object.keys(effect).forEach(function (k) {
5
+ if (k !== 'default' && !Object.prototype.hasOwnProperty.call(exports, k)) Object.defineProperty(exports, k, {
6
+ enumerable: true,
7
+ get: function () { return effect[k]; }
8
+ });
9
+ });
@@ -0,0 +1 @@
1
+ export * from "effect";
@@ -0,0 +1 @@
1
+ export * from "effect";
@@ -0,0 +1,3 @@
1
+ export * from "effect"
2
+
3
+ export { };
@@ -0,0 +1,68 @@
1
+ const require_zod = require('./zod-DYghWCz1.cjs');
2
+
3
+ //#region src/errors.ts
4
+ /**
5
+ * Common error schemas for plugin contracts.
6
+ * Import these to ensure consistent error handling across plugins.
7
+ *
8
+ * @example
9
+ * ```typescript
10
+ * import { CommonPluginErrors } from "every-plugin/errors";
11
+ *
12
+ * export const contract = oc.router({
13
+ * getData: oc.route(...)
14
+ * .errors(CommonPluginErrors)
15
+ * });
16
+ * ```
17
+ */
18
+ const CommonPluginErrors = {
19
+ UNAUTHORIZED: { data: require_zod.zod_exports.z.object({
20
+ apiKeyProvided: require_zod.zod_exports.z.boolean(),
21
+ provider: require_zod.zod_exports.z.string().optional(),
22
+ authType: require_zod.zod_exports.z.enum([
23
+ "apiKey",
24
+ "oauth",
25
+ "token"
26
+ ]).optional()
27
+ }) },
28
+ RATE_LIMITED: { data: require_zod.zod_exports.z.object({
29
+ retryAfter: require_zod.zod_exports.z.number().int().min(1),
30
+ remainingRequests: require_zod.zod_exports.z.number().int().min(0).optional(),
31
+ resetTime: require_zod.zod_exports.z.string().datetime().optional(),
32
+ limitType: require_zod.zod_exports.z.enum([
33
+ "requests",
34
+ "tokens",
35
+ "bandwidth"
36
+ ]).optional()
37
+ }) },
38
+ SERVICE_UNAVAILABLE: { data: require_zod.zod_exports.z.object({
39
+ retryAfter: require_zod.zod_exports.z.number().int().optional(),
40
+ maintenanceWindow: require_zod.zod_exports.z.boolean().default(false),
41
+ estimatedUptime: require_zod.zod_exports.z.string().datetime().optional()
42
+ }) },
43
+ BAD_REQUEST: { data: require_zod.zod_exports.z.object({
44
+ invalidFields: require_zod.zod_exports.z.array(require_zod.zod_exports.z.string()).optional(),
45
+ validationErrors: require_zod.zod_exports.z.array(require_zod.zod_exports.z.object({
46
+ field: require_zod.zod_exports.z.string(),
47
+ message: require_zod.zod_exports.z.string(),
48
+ code: require_zod.zod_exports.z.string().optional()
49
+ })).optional()
50
+ }) },
51
+ NOT_FOUND: { data: require_zod.zod_exports.z.object({
52
+ resource: require_zod.zod_exports.z.string().optional(),
53
+ resourceId: require_zod.zod_exports.z.string().optional()
54
+ }) },
55
+ FORBIDDEN: { data: require_zod.zod_exports.z.object({
56
+ requiredPermissions: require_zod.zod_exports.z.array(require_zod.zod_exports.z.string()).optional(),
57
+ action: require_zod.zod_exports.z.string().optional()
58
+ }) }
59
+ };
60
+
61
+ //#endregion
62
+ Object.defineProperty(exports, 'CommonPluginErrors', {
63
+ enumerable: true,
64
+ get: function () {
65
+ return CommonPluginErrors;
66
+ }
67
+ });
68
+ //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZXJyb3JzLUNWbm9QbDl2LmNqcyIsIm5hbWVzIjpbXSwic291cmNlcyI6WyIuLi9zcmMvZXJyb3JzLnRzIl0sInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IHogfSBmcm9tIFwiLi96b2RcIjtcblxuLyoqXG4gKiBDb21tb24gZXJyb3Igc2NoZW1hcyBmb3IgcGx1Z2luIGNvbnRyYWN0cy5cbiAqIEltcG9ydCB0aGVzZSB0byBlbnN1cmUgY29uc2lzdGVudCBlcnJvciBoYW5kbGluZyBhY3Jvc3MgcGx1Z2lucy5cbiAqXG4gKiBAZXhhbXBsZVxuICogYGBgdHlwZXNjcmlwdFxuICogaW1wb3J0IHsgQ29tbW9uUGx1Z2luRXJyb3JzIH0gZnJvbSBcImV2ZXJ5LXBsdWdpbi9lcnJvcnNcIjtcbiAqXG4gKiBleHBvcnQgY29uc3QgY29udHJhY3QgPSBvYy5yb3V0ZXIoe1xuICogICBnZXREYXRhOiBvYy5yb3V0ZSguLi4pXG4gKiAgICAgLmVycm9ycyhDb21tb25QbHVnaW5FcnJvcnMpXG4gKiB9KTtcbiAqIGBgYFxuICovXG5leHBvcnQgY29uc3QgQ29tbW9uUGx1Z2luRXJyb3JzID0ge1xuXHRVTkFVVEhPUklaRUQ6IHtcblx0XHRkYXRhOiB6Lm9iamVjdCh7XG5cdFx0XHRhcGlLZXlQcm92aWRlZDogei5ib29sZWFuKCksXG5cdFx0XHRwcm92aWRlcjogei5zdHJpbmcoKS5vcHRpb25hbCgpLFxuXHRcdFx0YXV0aFR5cGU6IHouZW51bShbJ2FwaUtleScsICdvYXV0aCcsICd0b2tlbiddKS5vcHRpb25hbCgpLFxuXHRcdH0pXG5cdH0sXG5cdFJBVEVfTElNSVRFRDoge1xuXHRcdGRhdGE6IHoub2JqZWN0KHtcblx0XHRcdHJldHJ5QWZ0ZXI6IHoubnVtYmVyKCkuaW50KCkubWluKDEpLFxuXHRcdFx0cmVtYWluaW5nUmVxdWVzdHM6IHoubnVtYmVyKCkuaW50KCkubWluKDApLm9wdGlvbmFsKCksXG5cdFx0XHRyZXNldFRpbWU6IHouc3RyaW5nKCkuZGF0ZXRpbWUoKS5vcHRpb25hbCgpLFxuXHRcdFx0bGltaXRUeXBlOiB6LmVudW0oWydyZXF1ZXN0cycsICd0b2tlbnMnLCAnYmFuZHdpZHRoJ10pLm9wdGlvbmFsKCksXG5cdFx0fSlcblx0fSxcblx0U0VSVklDRV9VTkFWQUlMQUJMRToge1xuXHRcdGRhdGE6IHoub2JqZWN0KHtcblx0XHRcdHJldHJ5QWZ0ZXI6IHoubnVtYmVyKCkuaW50KCkub3B0aW9uYWwoKSxcblx0XHRcdG1haW50ZW5hbmNlV2luZG93OiB6LmJvb2xlYW4oKS5kZWZhdWx0KGZhbHNlKSxcblx0XHRcdGVzdGltYXRlZFVwdGltZTogei5zdHJpbmcoKS5kYXRldGltZSgpLm9wdGlvbmFsKCksXG5cdFx0fSlcblx0fSxcblx0QkFEX1JFUVVFU1Q6IHtcblx0XHRkYXRhOiB6Lm9iamVjdCh7XG5cdFx0XHRpbnZhbGlkRmllbGRzOiB6LmFycmF5KHouc3RyaW5nKCkpLm9wdGlvbmFsKCksXG5cdFx0XHR2YWxpZGF0aW9uRXJyb3JzOiB6LmFycmF5KHoub2JqZWN0KHtcblx0XHRcdFx0ZmllbGQ6IHouc3RyaW5nKCksXG5cdFx0XHRcdG1lc3NhZ2U6IHouc3RyaW5nKCksXG5cdFx0XHRcdGNvZGU6IHouc3RyaW5nKCkub3B0aW9uYWwoKSxcblx0XHRcdH0pKS5vcHRpb25hbCgpLFxuXHRcdH0pXG5cdH0sXG5cdE5PVF9GT1VORDoge1xuXHRcdGRhdGE6IHoub2JqZWN0KHtcblx0XHRcdHJlc291cmNlOiB6LnN0cmluZygpLm9wdGlvbmFsKCksXG5cdFx0XHRyZXNvdXJjZUlkOiB6LnN0cmluZygpLm9wdGlvbmFsKCksXG5cdFx0fSlcblx0fSxcblx0Rk9SQklEREVOOiB7XG5cdFx0ZGF0YTogei5vYmplY3Qoe1xuXHRcdFx0cmVxdWlyZWRQZXJtaXNzaW9uczogei5hcnJheSh6LnN0cmluZygpKS5vcHRpb25hbCgpLFxuXHRcdFx0YWN0aW9uOiB6LnN0cmluZygpLm9wdGlvbmFsKCksXG5cdFx0fSlcblx0fVxufSBhcyBjb25zdDtcbiJdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7Ozs7Ozs7QUFnQkEsTUFBYSxxQkFBcUI7Q0FDakMsY0FBYyxFQUNiLDhCQUFNLEVBQUUsT0FBTztFQUNkLHdDQUFnQixFQUFFLFNBQVM7RUFDM0Isa0NBQVUsRUFBRSxRQUFRLENBQUMsVUFBVTtFQUMvQixrQ0FBVSxFQUFFLEtBQUs7R0FBQztHQUFVO0dBQVM7R0FBUSxDQUFDLENBQUMsVUFBVTtFQUN6RCxDQUFDLEVBQ0Y7Q0FDRCxjQUFjLEVBQ2IsOEJBQU0sRUFBRSxPQUFPO0VBQ2Qsb0NBQVksRUFBRSxRQUFRLENBQUMsS0FBSyxDQUFDLElBQUksRUFBRTtFQUNuQywyQ0FBbUIsRUFBRSxRQUFRLENBQUMsS0FBSyxDQUFDLElBQUksRUFBRSxDQUFDLFVBQVU7RUFDckQsbUNBQVcsRUFBRSxRQUFRLENBQUMsVUFBVSxDQUFDLFVBQVU7RUFDM0MsbUNBQVcsRUFBRSxLQUFLO0dBQUM7R0FBWTtHQUFVO0dBQVksQ0FBQyxDQUFDLFVBQVU7RUFDakUsQ0FBQyxFQUNGO0NBQ0QscUJBQXFCLEVBQ3BCLDhCQUFNLEVBQUUsT0FBTztFQUNkLG9DQUFZLEVBQUUsUUFBUSxDQUFDLEtBQUssQ0FBQyxVQUFVO0VBQ3ZDLDJDQUFtQixFQUFFLFNBQVMsQ0FBQyxRQUFRLE1BQU07RUFDN0MseUNBQWlCLEVBQUUsUUFBUSxDQUFDLFVBQVUsQ0FBQyxVQUFVO0VBQ2pELENBQUMsRUFDRjtDQUNELGFBQWEsRUFDWiw4QkFBTSxFQUFFLE9BQU87RUFDZCx1Q0FBZSxFQUFFLDhCQUFNLEVBQUUsUUFBUSxDQUFDLENBQUMsVUFBVTtFQUM3QywwQ0FBa0IsRUFBRSw4QkFBTSxFQUFFLE9BQU87R0FDbEMsK0JBQU8sRUFBRSxRQUFRO0dBQ2pCLGlDQUFTLEVBQUUsUUFBUTtHQUNuQiw4QkFBTSxFQUFFLFFBQVEsQ0FBQyxVQUFVO0dBQzNCLENBQUMsQ0FBQyxDQUFDLFVBQVU7RUFDZCxDQUFDLEVBQ0Y7Q0FDRCxXQUFXLEVBQ1YsOEJBQU0sRUFBRSxPQUFPO0VBQ2Qsa0NBQVUsRUFBRSxRQUFRLENBQUMsVUFBVTtFQUMvQixvQ0FBWSxFQUFFLFFBQVEsQ0FBQyxVQUFVO0VBQ2pDLENBQUMsRUFDRjtDQUNELFdBQVcsRUFDViw4QkFBTSxFQUFFLE9BQU87RUFDZCw2Q0FBcUIsRUFBRSw4QkFBTSxFQUFFLFFBQVEsQ0FBQyxDQUFDLFVBQVU7RUFDbkQsZ0NBQVEsRUFBRSxRQUFRLENBQUMsVUFBVTtFQUM3QixDQUFDLEVBQ0Y7Q0FDRCJ9
@@ -0,0 +1,75 @@
1
+ import { t as zod_d_exports } from "./zod-D4CFw8d9.mjs";
2
+
3
+ //#region src/errors.d.ts
4
+
5
+ /**
6
+ * Common error schemas for plugin contracts.
7
+ * Import these to ensure consistent error handling across plugins.
8
+ *
9
+ * @example
10
+ * ```typescript
11
+ * import { CommonPluginErrors } from "every-plugin/errors";
12
+ *
13
+ * export const contract = oc.router({
14
+ * getData: oc.route(...)
15
+ * .errors(CommonPluginErrors)
16
+ * });
17
+ * ```
18
+ */
19
+ declare const CommonPluginErrors: {
20
+ readonly UNAUTHORIZED: {
21
+ readonly data: zod_d_exports.z.ZodObject<{
22
+ apiKeyProvided: zod_d_exports.z.ZodBoolean;
23
+ provider: zod_d_exports.z.ZodOptional<zod_d_exports.z.ZodString>;
24
+ authType: zod_d_exports.z.ZodOptional<zod_d_exports.z.ZodEnum<{
25
+ apiKey: "apiKey";
26
+ oauth: "oauth";
27
+ token: "token";
28
+ }>>;
29
+ }, zod_d_exports.z.core.$strip>;
30
+ };
31
+ readonly RATE_LIMITED: {
32
+ readonly data: zod_d_exports.z.ZodObject<{
33
+ retryAfter: zod_d_exports.z.ZodNumber;
34
+ remainingRequests: zod_d_exports.z.ZodOptional<zod_d_exports.z.ZodNumber>;
35
+ resetTime: zod_d_exports.z.ZodOptional<zod_d_exports.z.ZodString>;
36
+ limitType: zod_d_exports.z.ZodOptional<zod_d_exports.z.ZodEnum<{
37
+ requests: "requests";
38
+ tokens: "tokens";
39
+ bandwidth: "bandwidth";
40
+ }>>;
41
+ }, zod_d_exports.z.core.$strip>;
42
+ };
43
+ readonly SERVICE_UNAVAILABLE: {
44
+ readonly data: zod_d_exports.z.ZodObject<{
45
+ retryAfter: zod_d_exports.z.ZodOptional<zod_d_exports.z.ZodNumber>;
46
+ maintenanceWindow: zod_d_exports.z.ZodDefault<zod_d_exports.z.ZodBoolean>;
47
+ estimatedUptime: zod_d_exports.z.ZodOptional<zod_d_exports.z.ZodString>;
48
+ }, zod_d_exports.z.core.$strip>;
49
+ };
50
+ readonly BAD_REQUEST: {
51
+ readonly data: zod_d_exports.z.ZodObject<{
52
+ invalidFields: zod_d_exports.z.ZodOptional<zod_d_exports.z.ZodArray<zod_d_exports.z.ZodString>>;
53
+ validationErrors: zod_d_exports.z.ZodOptional<zod_d_exports.z.ZodArray<zod_d_exports.z.ZodObject<{
54
+ field: zod_d_exports.z.ZodString;
55
+ message: zod_d_exports.z.ZodString;
56
+ code: zod_d_exports.z.ZodOptional<zod_d_exports.z.ZodString>;
57
+ }, zod_d_exports.z.core.$strip>>>;
58
+ }, zod_d_exports.z.core.$strip>;
59
+ };
60
+ readonly NOT_FOUND: {
61
+ readonly data: zod_d_exports.z.ZodObject<{
62
+ resource: zod_d_exports.z.ZodOptional<zod_d_exports.z.ZodString>;
63
+ resourceId: zod_d_exports.z.ZodOptional<zod_d_exports.z.ZodString>;
64
+ }, zod_d_exports.z.core.$strip>;
65
+ };
66
+ readonly FORBIDDEN: {
67
+ readonly data: zod_d_exports.z.ZodObject<{
68
+ requiredPermissions: zod_d_exports.z.ZodOptional<zod_d_exports.z.ZodArray<zod_d_exports.z.ZodString>>;
69
+ action: zod_d_exports.z.ZodOptional<zod_d_exports.z.ZodString>;
70
+ }, zod_d_exports.z.core.$strip>;
71
+ };
72
+ };
73
+ //#endregion
74
+ export { CommonPluginErrors as t };
75
+ //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZXJyb3JzLUNhcjR0RlZQLmQubXRzIiwibmFtZXMiOltdLCJzb3VyY2VzIjpbIi4uL3NyYy9lcnJvcnMudHMiXSwic291cmNlc0NvbnRlbnQiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7O0FBZ0JBOzs7Ozs7Ozs7Ozs7Y0FBYSJ9