every-plugin 0.4.4 → 0.4.5

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 +267 -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 +265 -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-Ba1JsQFb.mjs +149 -0
  38. package/dist/package-C09aaCqd.cjs +154 -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-CdAK1Q5M.cjs +523 -0
  50. package/dist/runtime-I62RA1Vo.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,267 @@
1
+ const require_chunk = require('../../chunk-zltIcp7o.cjs');
2
+ const require_normalize = require('../../normalize-D4Qh0wVk.cjs');
3
+ const require_package$1 = require('../../package-C09aaCqd.cjs');
4
+ let __rspack_core = require("@rspack/core");
5
+ let node_path = require("node:path");
6
+ node_path = require_chunk.__toESM(node_path);
7
+ let node_fs = require("node:fs");
8
+ node_fs = require_chunk.__toESM(node_fs);
9
+
10
+ //#region src/build/rspack/utils.ts
11
+ function getPluginInfo(context) {
12
+ const pkgPath = node_path.default.join(context, "package.json");
13
+ const pkg = JSON.parse(node_fs.default.readFileSync(pkgPath, "utf-8"));
14
+ return {
15
+ name: pkg.name,
16
+ version: pkg.version,
17
+ normalizedName: require_normalize.getNormalizedRemoteName(pkg.name),
18
+ dependencies: pkg.dependencies || {},
19
+ peerDependencies: pkg.peerDependencies || {}
20
+ };
21
+ }
22
+ function loadDevConfig(devConfigPath) {
23
+ try {
24
+ const fullPath = node_path.default.resolve(devConfigPath);
25
+ delete require.cache[fullPath];
26
+ return require(fullPath).default;
27
+ } catch (error) {
28
+ console.warn(`Could not load dev config from ${devConfigPath}:`, error.message);
29
+ return null;
30
+ }
31
+ }
32
+
33
+ //#endregion
34
+ //#region src/build/rspack/module-federation.ts
35
+ function buildSharedDependencies(pluginInfo) {
36
+ const everyPluginPkg = require_package$1.require_package();
37
+ return {
38
+ "every-plugin": {
39
+ version: everyPluginPkg.version,
40
+ singleton: true,
41
+ requiredVersion: `${everyPluginPkg.version}`,
42
+ strictVersion: false,
43
+ eager: false
44
+ },
45
+ effect: {
46
+ version: everyPluginPkg.dependencies.effect,
47
+ singleton: true,
48
+ requiredVersion: `${everyPluginPkg.dependencies.effect}`,
49
+ strictVersion: false,
50
+ eager: false
51
+ },
52
+ zod: {
53
+ version: everyPluginPkg.dependencies.zod,
54
+ singleton: true,
55
+ requiredVersion: `${everyPluginPkg.dependencies.zod}`,
56
+ strictVersion: false,
57
+ eager: false
58
+ },
59
+ "@orpc/contract": {
60
+ version: everyPluginPkg.dependencies["@orpc/contract"],
61
+ singleton: true,
62
+ requiredVersion: `${everyPluginPkg.dependencies["@orpc/contract"]}`,
63
+ strictVersion: false,
64
+ eager: false
65
+ },
66
+ "@orpc/server": {
67
+ version: everyPluginPkg.dependencies["@orpc/server"],
68
+ singleton: true,
69
+ requiredVersion: `${everyPluginPkg.dependencies["@orpc/server"]}`,
70
+ strictVersion: false,
71
+ eager: false
72
+ }
73
+ };
74
+ }
75
+
76
+ //#endregion
77
+ //#region src/build/rspack/dev-server-middleware.ts
78
+ function setupPluginMiddleware(devServer, pluginInfo, devConfig, port) {
79
+ let handlers = {
80
+ rpc: null,
81
+ api: null
82
+ };
83
+ (async () => {
84
+ try {
85
+ const { createPluginRuntime } = await Promise.resolve().then(() => require("../../index.cjs"));
86
+ const { RPCHandler } = await import("@orpc/server/fetch");
87
+ const { onError } = await import("@orpc/server");
88
+ const { OpenAPIHandler } = await Promise.resolve().then(() => require("../../fetch-Cc95-7kM.cjs"));
89
+ const { OpenAPIReferencePlugin } = await Promise.resolve().then(() => require("../../plugins-C-7lh5gK.cjs"));
90
+ const { ZodToJsonSchemaConverter } = await Promise.resolve().then(() => require("../../zod4-BXTBR1od.cjs"));
91
+ const pluginId = devConfig?.pluginId || pluginInfo.normalizedName;
92
+ const loaded = await createPluginRuntime({ registry: { [pluginId]: { remoteUrl: `http://localhost:${port}/remoteEntry.js` } } }).usePlugin(pluginId, devConfig?.config);
93
+ handlers.rpc = new RPCHandler(loaded.router, { interceptors: [onError((error) => {
94
+ console.error("🔴 RPC Error:", error);
95
+ })] });
96
+ handlers.api = new OpenAPIHandler(loaded.router, {
97
+ plugins: [new OpenAPIReferencePlugin({ schemaConverters: [new ZodToJsonSchemaConverter()] })],
98
+ interceptors: [onError((error) => {
99
+ console.error("🔴 OpenAPI Error:", error);
100
+ })]
101
+ });
102
+ console.log(`╭─────────────────────────────────────────────`);
103
+ console.log(`│ ✅ Plugin dev server ready: `);
104
+ console.log(`├─────────────────────────────────────────────`);
105
+ console.log(`│ 📡 RPC: http://localhost:${port}/api/rpc`);
106
+ console.log(`│ 📖 Docs: http://localhost:${port}/api`);
107
+ console.log(`│ 💚 Health: http://localhost:${port}/`);
108
+ console.log(`╰─────────────────────────────────────────────`);
109
+ devServer.app.locals.handlers = handlers;
110
+ } catch (error) {
111
+ console.error("❌ Failed to load plugin:", error);
112
+ }
113
+ })();
114
+ devServer.app.get("/", (req, res) => {
115
+ res.json({
116
+ ok: true,
117
+ plugin: pluginInfo.normalizedName,
118
+ version: pluginInfo.version,
119
+ status: devServer.app.locals.handlers?.rpc ? "ready" : "loading",
120
+ endpoints: {
121
+ health: "/",
122
+ docs: "/api",
123
+ rpc: "/api/rpc"
124
+ }
125
+ });
126
+ });
127
+ const handleApiRequest = async (req, res) => {
128
+ const apiHandler = devServer.app.locals.handlers?.api;
129
+ if (!apiHandler) return res.status(503).json({ error: "Plugin still loading..." });
130
+ try {
131
+ const url = `http://${req.headers.host}${req.url}`;
132
+ const webRequest = new Request(url, {
133
+ method: req.method,
134
+ headers: req.headers,
135
+ body: req.method !== "GET" && req.method !== "HEAD" ? req : void 0
136
+ });
137
+ const result = await apiHandler.handle(webRequest, {
138
+ prefix: "/api",
139
+ context: {}
140
+ });
141
+ if (result.response) {
142
+ res.status(result.response.status);
143
+ result.response.headers.forEach((value, key) => {
144
+ res.setHeader(key, value);
145
+ });
146
+ const text = await result.response.text();
147
+ res.send(text);
148
+ } else res.status(404).send("Not Found");
149
+ } catch (error) {
150
+ console.error("OpenAPI error:", error);
151
+ res.status(500).json({ error: error.message });
152
+ }
153
+ };
154
+ devServer.app.all("/api", handleApiRequest);
155
+ devServer.app.all("/api/*", handleApiRequest);
156
+ devServer.app.all("/api/rpc/*", async (req, res) => {
157
+ const rpcHandler = devServer.app.locals.handlers?.rpc;
158
+ if (!rpcHandler) return res.status(503).json({ error: "Plugin still loading..." });
159
+ try {
160
+ const url = `http://${req.headers.host}${req.url}`;
161
+ const webRequest = new Request(url, {
162
+ method: req.method,
163
+ headers: req.headers,
164
+ body: req.method !== "GET" && req.method !== "HEAD" ? req : void 0
165
+ });
166
+ const result = await rpcHandler.handle(webRequest, {
167
+ prefix: "/api/rpc",
168
+ context: {}
169
+ });
170
+ if (result.response) {
171
+ res.status(result.response.status);
172
+ result.response.headers.forEach((value, key) => {
173
+ res.setHeader(key, value);
174
+ });
175
+ const text = await result.response.text();
176
+ res.send(text);
177
+ } else res.status(404).send("Not Found");
178
+ } catch (error) {
179
+ console.error("RPC error:", error);
180
+ res.status(500).json({ error: error.message });
181
+ }
182
+ });
183
+ }
184
+
185
+ //#endregion
186
+ //#region src/build/rspack/plugin.ts
187
+ var EveryPluginDevServer = class {
188
+ name = "EveryPluginDevServer";
189
+ constructor(options = {}) {
190
+ this.options = options;
191
+ }
192
+ apply(compiler) {
193
+ const pluginInfo = getPluginInfo(compiler.options.context || process.cwd());
194
+ const devConfig = loadDevConfig(this.options.devConfigPath || "./plugin.dev.ts");
195
+ const port = this.options.port || devConfig?.port || 3999;
196
+ this.configureDefaults(compiler, pluginInfo);
197
+ if (!compiler.options.devServer) compiler.options.devServer = {};
198
+ this.configureDevServer(compiler, pluginInfo, devConfig, port);
199
+ new __rspack_core.rspack.container.ModuleFederationPlugin({
200
+ name: pluginInfo.normalizedName,
201
+ filename: "remoteEntry.js",
202
+ runtimePlugins: [require.resolve("@module-federation/node/runtimePlugin")],
203
+ library: { type: "commonjs-module" },
204
+ exposes: { "./plugin": "./src/index.ts" },
205
+ shared: buildSharedDependencies(pluginInfo)
206
+ }).apply(compiler);
207
+ }
208
+ configureDefaults(compiler, pluginInfo) {
209
+ const context = compiler.options.context || process.cwd();
210
+ if (!compiler.options.output) compiler.options.output = {};
211
+ compiler.options.output.uniqueName = pluginInfo.normalizedName;
212
+ compiler.options.output.publicPath = "auto";
213
+ compiler.options.output.path = node_path.default.resolve(context, "dist");
214
+ compiler.options.output.clean = true;
215
+ compiler.options.output.library = { type: "commonjs-module" };
216
+ if (!compiler.options.entry) compiler.options.entry = { main: { import: ["./src/index"] } };
217
+ if (!compiler.options.target) compiler.options.target = "async-node";
218
+ if (!compiler.options.mode) compiler.options.mode = process.env.NODE_ENV === "development" ? "development" : "production";
219
+ if (!compiler.options.devtool) compiler.options.devtool = "source-map";
220
+ if (!compiler.options.infrastructureLogging) compiler.options.infrastructureLogging = { level: "warn" };
221
+ this.ensureTypeScriptLoader(compiler);
222
+ if (!compiler.options.resolve) compiler.options.resolve = {};
223
+ compiler.options.resolve.extensions = [
224
+ "...",
225
+ ".tsx",
226
+ ".ts"
227
+ ];
228
+ }
229
+ ensureTypeScriptLoader(compiler) {
230
+ if (!compiler.options.module) compiler.options.module = { rules: [] };
231
+ if (!compiler.options.module.rules) compiler.options.module.rules = [];
232
+ 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({
233
+ test: /\.tsx?$/,
234
+ use: "builtin:swc-loader",
235
+ exclude: /node_modules/
236
+ });
237
+ }
238
+ configureDevServer(compiler, pluginInfo, devConfig, port) {
239
+ if (!compiler.options.devServer) return;
240
+ const context = compiler.options.context || process.cwd();
241
+ const originalSetup = compiler.options.devServer.setupMiddlewares;
242
+ compiler.options.devServer.port = port;
243
+ compiler.options.devServer.static = node_path.default.join(context, "dist");
244
+ compiler.options.devServer.hot = true;
245
+ compiler.options.devServer.devMiddleware = { writeToDisk: true };
246
+ compiler.options.devServer.headers = {
247
+ "Access-Control-Allow-Origin": "*",
248
+ "Access-Control-Allow-Methods": "GET, POST, PUT, DELETE, PATCH, OPTIONS",
249
+ "Access-Control-Allow-Headers": "X-Requested-With, content-type, Authorization"
250
+ };
251
+ compiler.options.devServer.client = {
252
+ logging: "warn",
253
+ overlay: {
254
+ warnings: false,
255
+ errors: true
256
+ }
257
+ };
258
+ compiler.options.devServer.setupMiddlewares = (middlewares, devServer) => {
259
+ setupPluginMiddleware(devServer, pluginInfo, devConfig, port);
260
+ return originalSetup ? originalSetup(middlewares, devServer) : middlewares;
261
+ };
262
+ }
263
+ };
264
+
265
+ //#endregion
266
+ exports.EveryPluginDevServer = EveryPluginDevServer;
267
+ //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguY2pzIiwibmFtZXMiOlsicGF0aCIsImZzIiwiZ2V0Tm9ybWFsaXplZFJlbW90ZU5hbWUiLCJoYW5kbGVyczogeyBycGM6IGFueSwgYXBpOiBhbnkgfSIsIm9wdGlvbnM6IEV2ZXJ5UGx1Z2luT3B0aW9ucyIsInJzcGFjayIsInBhdGgiXSwic291cmNlcyI6WyIuLi8uLi8uLi9zcmMvYnVpbGQvcnNwYWNrL3V0aWxzLnRzIiwiLi4vLi4vLi4vc3JjL2J1aWxkL3JzcGFjay9tb2R1bGUtZmVkZXJhdGlvbi50cyIsIi4uLy4uLy4uL3NyYy9idWlsZC9yc3BhY2svZGV2LXNlcnZlci1taWRkbGV3YXJlLnRzIiwiLi4vLi4vLi4vc3JjL2J1aWxkL3JzcGFjay9wbHVnaW4udHMiXSwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHBhdGggZnJvbSAnbm9kZTpwYXRoJztcbmltcG9ydCBmcyBmcm9tICdub2RlOmZzJztcbmltcG9ydCB7IGdldE5vcm1hbGl6ZWRSZW1vdGVOYW1lIH0gZnJvbSAnZXZlcnktcGx1Z2luL25vcm1hbGl6ZSc7XG5cbmV4cG9ydCBpbnRlcmZhY2UgUGx1Z2luSW5mbyB7XG4gIG5hbWU6IHN0cmluZztcbiAgdmVyc2lvbjogc3RyaW5nO1xuICBub3JtYWxpemVkTmFtZTogc3RyaW5nO1xuICBkZXBlbmRlbmNpZXM6IFJlY29yZDxzdHJpbmcsIHN0cmluZz47XG4gIHBlZXJEZXBlbmRlbmNpZXM6IFJlY29yZDxzdHJpbmcsIHN0cmluZz47XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBnZXRQbHVnaW5JbmZvKGNvbnRleHQ6IHN0cmluZyk6IFBsdWdpbkluZm8ge1xuICBjb25zdCBwa2dQYXRoID0gcGF0aC5qb2luKGNvbnRleHQsICdwYWNrYWdlLmpzb24nKTtcbiAgY29uc3QgcGtnID0gSlNPTi5wYXJzZShmcy5yZWFkRmlsZVN5bmMocGtnUGF0aCwgJ3V0Zi04JykpO1xuXG4gIHJldHVybiB7XG4gICAgbmFtZTogcGtnLm5hbWUsXG4gICAgdmVyc2lvbjogcGtnLnZlcnNpb24sXG4gICAgbm9ybWFsaXplZE5hbWU6IGdldE5vcm1hbGl6ZWRSZW1vdGVOYW1lKHBrZy5uYW1lKSxcbiAgICBkZXBlbmRlbmNpZXM6IHBrZy5kZXBlbmRlbmNpZXMgfHwge30sXG4gICAgcGVlckRlcGVuZGVuY2llczogcGtnLnBlZXJEZXBlbmRlbmNpZXMgfHwge30sXG4gIH07XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBsb2FkRGV2Q29uZmlnKGRldkNvbmZpZ1BhdGg6IHN0cmluZykge1xuICB0cnkge1xuICAgIGNvbnN0IGZ1bGxQYXRoID0gcGF0aC5yZXNvbHZlKGRldkNvbmZpZ1BhdGgpO1xuICAgIC8vIENsZWFyIHJlcXVpcmUgY2FjaGUgdG8gYWxsb3cgaG90IHJlbG9hZGluZ1xuICAgIGRlbGV0ZSByZXF1aXJlLmNhY2hlW2Z1bGxQYXRoXTtcbiAgICByZXR1cm4gcmVxdWlyZShmdWxsUGF0aCkuZGVmYXVsdDtcbiAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICBjb25zb2xlLndhcm4oYENvdWxkIG5vdCBsb2FkIGRldiBjb25maWcgZnJvbSAke2RldkNvbmZpZ1BhdGh9OmAsIChlcnJvciBhcyBFcnJvcikubWVzc2FnZSk7XG4gICAgcmV0dXJuIG51bGw7XG4gIH1cbn1cbiIsImltcG9ydCB0eXBlIHsgUGx1Z2luSW5mbyB9IGZyb20gJy4vdXRpbHMnO1xuXG5leHBvcnQgZnVuY3Rpb24gYnVpbGRTaGFyZWREZXBlbmRlbmNpZXMocGx1Z2luSW5mbzogUGx1Z2luSW5mbykge1xuICAvLyBHZXQgZXZlcnktcGx1Z2luIHBhY2thZ2UgaW5mbyBmb3IgdmVyc2lvbiBjb25zdHJhaW50c1xuICBjb25zdCBldmVyeVBsdWdpblBrZyA9IHJlcXVpcmUoJ2V2ZXJ5LXBsdWdpbi9wYWNrYWdlLmpzb24nKTtcblxuICByZXR1cm4ge1xuICAgICdldmVyeS1wbHVnaW4nOiB7XG4gICAgICB2ZXJzaW9uOiBldmVyeVBsdWdpblBrZy52ZXJzaW9uLFxuICAgICAgc2luZ2xldG9uOiB0cnVlLFxuICAgICAgcmVxdWlyZWRWZXJzaW9uOiBgJHtldmVyeVBsdWdpblBrZy52ZXJzaW9ufWAsXG4gICAgICBzdHJpY3RWZXJzaW9uOiBmYWxzZSxcbiAgICAgIGVhZ2VyOiBmYWxzZSxcbiAgICB9LFxuICAgIGVmZmVjdDoge1xuICAgICAgdmVyc2lvbjogZXZlcnlQbHVnaW5Qa2cuZGVwZW5kZW5jaWVzLmVmZmVjdCxcbiAgICAgIHNpbmdsZXRvbjogdHJ1ZSxcbiAgICAgIHJlcXVpcmVkVmVyc2lvbjogYCR7ZXZlcnlQbHVnaW5Qa2cuZGVwZW5kZW5jaWVzLmVmZmVjdH1gLFxuICAgICAgc3RyaWN0VmVyc2lvbjogZmFsc2UsXG4gICAgICBlYWdlcjogZmFsc2UsXG4gICAgfSxcbiAgICB6b2Q6IHtcbiAgICAgIHZlcnNpb246IGV2ZXJ5UGx1Z2luUGtnLmRlcGVuZGVuY2llcy56b2QsXG4gICAgICBzaW5nbGV0b246IHRydWUsXG4gICAgICByZXF1aXJlZFZlcnNpb246IGAke2V2ZXJ5UGx1Z2luUGtnLmRlcGVuZGVuY2llcy56b2R9YCxcbiAgICAgIHN0cmljdFZlcnNpb246IGZhbHNlLFxuICAgICAgZWFnZXI6IGZhbHNlLFxuICAgIH0sXG4gICAgJ0BvcnBjL2NvbnRyYWN0Jzoge1xuICAgICAgdmVyc2lvbjogZXZlcnlQbHVnaW5Qa2cuZGVwZW5kZW5jaWVzWydAb3JwYy9jb250cmFjdCddLFxuICAgICAgc2luZ2xldG9uOiB0cnVlLFxuICAgICAgcmVxdWlyZWRWZXJzaW9uOiBgJHtldmVyeVBsdWdpblBrZy5kZXBlbmRlbmNpZXNbJ0BvcnBjL2NvbnRyYWN0J119YCxcbiAgICAgIHN0cmljdFZlcnNpb246IGZhbHNlLFxuICAgICAgZWFnZXI6IGZhbHNlLFxuICAgIH0sXG4gICAgJ0BvcnBjL3NlcnZlcic6IHtcbiAgICAgIHZlcnNpb246IGV2ZXJ5UGx1Z2luUGtnLmRlcGVuZGVuY2llc1snQG9ycGMvc2VydmVyJ10sXG4gICAgICBzaW5nbGV0b246IHRydWUsXG4gICAgICByZXF1aXJlZFZlcnNpb246IGAke2V2ZXJ5UGx1Z2luUGtnLmRlcGVuZGVuY2llc1snQG9ycGMvc2VydmVyJ119YCxcbiAgICAgIHN0cmljdFZlcnNpb246IGZhbHNlLFxuICAgICAgZWFnZXI6IGZhbHNlLFxuICAgIH0sXG4gIH07XG59XG4iLCJpbXBvcnQgdHlwZSB7IFBsdWdpbkluZm8gfSBmcm9tICcuL3V0aWxzJztcblxuZXhwb3J0IGZ1bmN0aW9uIHNldHVwUGx1Z2luTWlkZGxld2FyZShkZXZTZXJ2ZXI6IGFueSwgcGx1Z2luSW5mbzogUGx1Z2luSW5mbywgZGV2Q29uZmlnOiBhbnksIHBvcnQ6IG51bWJlcikge1xuICBsZXQgaGFuZGxlcnM6IHsgcnBjOiBhbnksIGFwaTogYW55IH0gPSB7IHJwYzogbnVsbCwgYXBpOiBudWxsIH07XG5cbiAgKGFzeW5jICgpID0+IHtcbiAgICB0cnkge1xuICAgICAgY29uc3QgeyBjcmVhdGVQbHVnaW5SdW50aW1lIH0gPSBhd2FpdCBpbXBvcnQoJ2V2ZXJ5LXBsdWdpbicpO1xuICAgICAgY29uc3QgeyBSUENIYW5kbGVyIH0gPSBhd2FpdCBpbXBvcnQoJ0BvcnBjL3NlcnZlci9mZXRjaCcpO1xuICAgICAgY29uc3QgeyBvbkVycm9yIH0gPSBhd2FpdCBpbXBvcnQoJ0BvcnBjL3NlcnZlcicpO1xuICAgICAgY29uc3QgeyBPcGVuQVBJSGFuZGxlciB9ID0gYXdhaXQgaW1wb3J0KCdAb3JwYy9vcGVuYXBpL2ZldGNoJyk7XG4gICAgICBjb25zdCB7IE9wZW5BUElSZWZlcmVuY2VQbHVnaW4gfSA9IGF3YWl0IGltcG9ydCgnQG9ycGMvb3BlbmFwaS9wbHVnaW5zJyk7XG4gICAgICBjb25zdCB7IFpvZFRvSnNvblNjaGVtYUNvbnZlcnRlciB9ID0gYXdhaXQgaW1wb3J0KCdAb3JwYy96b2Qvem9kNCcpO1xuXG4gICAgICBjb25zdCBwbHVnaW5JZCA9IGRldkNvbmZpZz8ucGx1Z2luSWQgfHwgcGx1Z2luSW5mby5ub3JtYWxpemVkTmFtZTtcblxuICAgICAgY29uc3QgcnVudGltZSA9IGNyZWF0ZVBsdWdpblJ1bnRpbWUoe1xuICAgICAgICByZWdpc3RyeToge1xuICAgICAgICAgIFtwbHVnaW5JZF06IHtcbiAgICAgICAgICAgIHJlbW90ZVVybDogYGh0dHA6Ly9sb2NhbGhvc3Q6JHtwb3J0fS9yZW1vdGVFbnRyeS5qc2BcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH0pO1xuXG4gICAgICBjb25zdCBsb2FkZWQgPSBhd2FpdCBydW50aW1lLnVzZVBsdWdpbihwbHVnaW5JZCwgZGV2Q29uZmlnPy5jb25maWcpO1xuXG4gICAgICAvLyBAdHMtZXhwZWN0LWVycm9yIG5vIHR5cGVcbiAgICAgIGhhbmRsZXJzLnJwYyA9IG5ldyBSUENIYW5kbGVyKGxvYWRlZC5yb3V0ZXIsIHtcbiAgICAgICAgaW50ZXJjZXB0b3JzOiBbXG4gICAgICAgICAgb25FcnJvcigoZXJyb3I6IGFueSkgPT4ge1xuICAgICAgICAgICAgY29uc29sZS5lcnJvcign8J+UtCBSUEMgRXJyb3I6JywgZXJyb3IpO1xuICAgICAgICAgIH0pLFxuICAgICAgICBdXG4gICAgICB9KTtcblxuICAgICAgLy8gQ3JlYXRlIE9wZW5BUEkgaGFuZGxlciBmb3IgZG9jdW1lbnRhdGlvblxuICAgICAgLy8gQHRzLWV4cGVjdC1lcnJvciBubyB0eXBlXG4gICAgICBoYW5kbGVycy5hcGkgPSBuZXcgT3BlbkFQSUhhbmRsZXIobG9hZGVkLnJvdXRlciwge1xuICAgICAgICBwbHVnaW5zOiBbXG4gICAgICAgICAgbmV3IE9wZW5BUElSZWZlcmVuY2VQbHVnaW4oe1xuICAgICAgICAgICAgc2NoZW1hQ29udmVydGVyczogW25ldyBab2RUb0pzb25TY2hlbWFDb252ZXJ0ZXIoKV0sXG4gICAgICAgICAgfSksXG4gICAgICAgIF0sXG4gICAgICAgIGludGVyY2VwdG9yczogW1xuICAgICAgICAgIG9uRXJyb3IoKGVycm9yOiBhbnkpID0+IHtcbiAgICAgICAgICAgIGNvbnNvbGUuZXJyb3IoJ/CflLQgT3BlbkFQSSBFcnJvcjonLCBlcnJvcik7XG4gICAgICAgICAgfSksXG4gICAgICAgIF1cbiAgICAgIH0pO1xuXG4gICAgICBjb25zb2xlLmxvZyhg4pWt4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSA4pSAYCk7XG4gICAgICBjb25zb2xlLmxvZyhg4pSCICDinIUgUGx1Z2luIGRldiBzZXJ2ZXIgcmVhZHk6IGApO1xuICAgICAgY29uc29sZS5sb2coYOKUnOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgOKUgGApO1xuICAgICAgY29uc29sZS5sb2coYOKUgiAg8J+ToSBSUEM6ICAgIGh0dHA6Ly9sb2NhbGhvc3Q6JHtwb3J0fS9hcGkvcnBjYCk7XG4gICAgICBjb25zb2xlLmxvZyhg4pSCICDwn5OWIERvY3M6ICAgaHR0cDovL2xvY2FsaG9zdDoke3BvcnR9L2FwaWApO1xuICAgICAgY29uc29sZS5sb2coYOKUgiAg8J+SmiBIZWFsdGg6IGh0dHA6Ly9sb2NhbGhvc3Q6JHtwb3J0fS9gKTtcbiAgICAgIGNvbnNvbGUubG9nKGDilbDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIDilIBgKTtcblxuICAgICAgLy8gU3RvcmUgaGFuZGxlcnMgZm9yIHJvdXRpbmdcbiAgICAgIGRldlNlcnZlci5hcHAubG9jYWxzLmhhbmRsZXJzID0gaGFuZGxlcnM7XG4gICAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICAgIGNvbnNvbGUuZXJyb3IoJ+KdjCBGYWlsZWQgdG8gbG9hZCBwbHVnaW46JywgZXJyb3IpO1xuICAgIH1cbiAgfSkoKTtcblxuICAvLyBSb290IGhlYWx0aCBjaGVja1xuICBkZXZTZXJ2ZXIuYXBwLmdldCgnLycsIChyZXE6IGFueSwgcmVzOiBhbnkpID0+IHtcbiAgICByZXMuanNvbih7XG4gICAgICBvazogdHJ1ZSxcbiAgICAgIHBsdWdpbjogcGx1Z2luSW5mby5ub3JtYWxpemVkTmFtZSxcbiAgICAgIHZlcnNpb246IHBsdWdpbkluZm8udmVyc2lvbixcbiAgICAgIHN0YXR1czogZGV2U2VydmVyLmFwcC5sb2NhbHMuaGFuZGxlcnM/LnJwYyA/ICdyZWFkeScgOiAnbG9hZGluZycsXG4gICAgICBlbmRwb2ludHM6IHtcbiAgICAgICAgaGVhbHRoOiAnLycsXG4gICAgICAgIGRvY3M6ICcvYXBpJyxcbiAgICAgICAgcnBjOiAnL2FwaS9ycGMnXG4gICAgICB9XG4gICAgfSk7XG4gIH0pO1xuXG4gIC8vIE9wZW5BUEkgZG9jdW1lbnRhdGlvbiBhbmQgUkVTVCBlbmRwb2ludHMgYXQgL2FwaSBhbmQgL2FwaS8qXG4gIGNvbnN0IGhhbmRsZUFwaVJlcXVlc3QgPSBhc3luYyAocmVxOiBhbnksIHJlczogYW55KSA9PiB7XG4gICAgY29uc3QgYXBpSGFuZGxlciA9IGRldlNlcnZlci5hcHAubG9jYWxzLmhhbmRsZXJzPy5hcGk7XG4gICAgaWYgKCFhcGlIYW5kbGVyKSB7XG4gICAgICByZXR1cm4gcmVzLnN0YXR1cyg1MDMpLmpzb24oeyBlcnJvcjogJ1BsdWdpbiBzdGlsbCBsb2FkaW5nLi4uJyB9KTtcbiAgICB9XG5cbiAgICB0cnkge1xuICAgICAgY29uc3QgdXJsID0gYGh0dHA6Ly8ke3JlcS5oZWFkZXJzLmhvc3R9JHtyZXEudXJsfWA7XG4gICAgICBjb25zdCB3ZWJSZXF1ZXN0ID0gbmV3IFJlcXVlc3QodXJsLCB7XG4gICAgICAgIG1ldGhvZDogcmVxLm1ldGhvZCxcbiAgICAgICAgaGVhZGVyczogcmVxLmhlYWRlcnMsXG4gICAgICAgIGJvZHk6IHJlcS5tZXRob2QgIT09ICdHRVQnICYmIHJlcS5tZXRob2QgIT09ICdIRUFEJyA/IHJlcSA6IHVuZGVmaW5lZFxuICAgICAgfSk7XG5cbiAgICAgIGNvbnN0IHJlc3VsdCA9IGF3YWl0IGFwaUhhbmRsZXIuaGFuZGxlKHdlYlJlcXVlc3QsIHtcbiAgICAgICAgcHJlZml4OiAnL2FwaScsXG4gICAgICAgIGNvbnRleHQ6IHt9XG4gICAgICB9KTtcblxuICAgICAgaWYgKHJlc3VsdC5yZXNwb25zZSkge1xuICAgICAgICByZXMuc3RhdHVzKHJlc3VsdC5yZXNwb25zZS5zdGF0dXMpO1xuICAgICAgICByZXN1bHQucmVzcG9uc2UuaGVhZGVycy5mb3JFYWNoKCh2YWx1ZTogc3RyaW5nLCBrZXk6IHN0cmluZykgPT4ge1xuICAgICAgICAgIHJlcy5zZXRIZWFkZXIoa2V5LCB2YWx1ZSk7XG4gICAgICAgIH0pO1xuICAgICAgICBjb25zdCB0ZXh0ID0gYXdhaXQgcmVzdWx0LnJlc3BvbnNlLnRleHQoKTtcbiAgICAgICAgcmVzLnNlbmQodGV4dCk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICByZXMuc3RhdHVzKDQwNCkuc2VuZCgnTm90IEZvdW5kJyk7XG4gICAgICB9XG4gICAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICAgIGNvbnNvbGUuZXJyb3IoJ09wZW5BUEkgZXJyb3I6JywgZXJyb3IpO1xuICAgICAgcmVzLnN0YXR1cyg1MDApLmpzb24oeyBlcnJvcjogKGVycm9yIGFzIEVycm9yKS5tZXNzYWdlIH0pO1xuICAgIH1cbiAgfTtcblxuICBkZXZTZXJ2ZXIuYXBwLmFsbCgnL2FwaScsIGhhbmRsZUFwaVJlcXVlc3QpO1xuICBkZXZTZXJ2ZXIuYXBwLmFsbCgnL2FwaS8qJywgaGFuZGxlQXBpUmVxdWVzdCk7XG5cbiAgLy8gUlBDIGNhbGxzIGF0IC9hcGkvcnBjLypcbiAgZGV2U2VydmVyLmFwcC5hbGwoJy9hcGkvcnBjLyonLCBhc3luYyAocmVxOiBhbnksIHJlczogYW55KSA9PiB7XG4gICAgY29uc3QgcnBjSGFuZGxlciA9IGRldlNlcnZlci5hcHAubG9jYWxzLmhhbmRsZXJzPy5ycGM7XG4gICAgaWYgKCFycGNIYW5kbGVyKSB7XG4gICAgICByZXR1cm4gcmVzLnN0YXR1cyg1MDMpLmpzb24oeyBlcnJvcjogJ1BsdWdpbiBzdGlsbCBsb2FkaW5nLi4uJyB9KTtcbiAgICB9XG5cbiAgICB0cnkge1xuICAgICAgY29uc3QgdXJsID0gYGh0dHA6Ly8ke3JlcS5oZWFkZXJzLmhvc3R9JHtyZXEudXJsfWA7XG4gICAgICBjb25zdCB3ZWJSZXF1ZXN0ID0gbmV3IFJlcXVlc3QodXJsLCB7XG4gICAgICAgIG1ldGhvZDogcmVxLm1ldGhvZCxcbiAgICAgICAgaGVhZGVyczogcmVxLmhlYWRlcnMsXG4gICAgICAgIGJvZHk6IHJlcS5tZXRob2QgIT09ICdHRVQnICYmIHJlcS5tZXRob2QgIT09ICdIRUFEJyA/IHJlcSA6IHVuZGVmaW5lZFxuICAgICAgfSk7XG5cbiAgICAgIGNvbnN0IHJlc3VsdCA9IGF3YWl0IHJwY0hhbmRsZXIuaGFuZGxlKHdlYlJlcXVlc3QsIHtcbiAgICAgICAgcHJlZml4OiAnL2FwaS9ycGMnLFxuICAgICAgICBjb250ZXh0OiB7fVxuICAgICAgfSk7XG5cbiAgICAgIGlmIChyZXN1bHQucmVzcG9uc2UpIHtcbiAgICAgICAgcmVzLnN0YXR1cyhyZXN1bHQucmVzcG9uc2Uuc3RhdHVzKTtcbiAgICAgICAgcmVzdWx0LnJlc3BvbnNlLmhlYWRlcnMuZm9yRWFjaCgodmFsdWU6IHN0cmluZywga2V5OiBzdHJpbmcpID0+IHtcbiAgICAgICAgICByZXMuc2V0SGVhZGVyKGtleSwgdmFsdWUpO1xuICAgICAgICB9KTtcbiAgICAgICAgY29uc3QgdGV4dCA9IGF3YWl0IHJlc3VsdC5yZXNwb25zZS50ZXh0KCk7XG4gICAgICAgIHJlcy5zZW5kKHRleHQpO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgcmVzLnN0YXR1cyg0MDQpLnNlbmQoJ05vdCBGb3VuZCcpO1xuICAgICAgfVxuICAgIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgICBjb25zb2xlLmVycm9yKCdSUEMgZXJyb3I6JywgZXJyb3IpO1xuICAgICAgcmVzLnN0YXR1cyg1MDApLmpzb24oeyBlcnJvcjogKGVycm9yIGFzIEVycm9yKS5tZXNzYWdlIH0pO1xuICAgIH1cbiAgfSk7XG59XG4iLCJpbXBvcnQgdHlwZSB7IENvbXBpbGVyLCBSc3BhY2tQbHVnaW5JbnN0YW5jZSB9IGZyb20gJ0Byc3BhY2svY29yZSc7XG5pbXBvcnQgeyByc3BhY2sgfSBmcm9tICdAcnNwYWNrL2NvcmUnO1xuaW1wb3J0IHBhdGggZnJvbSAnbm9kZTpwYXRoJztcbmltcG9ydCB7IGdldFBsdWdpbkluZm8gfSBmcm9tICcuL3V0aWxzJztcbmltcG9ydCB7IGxvYWREZXZDb25maWcgfSBmcm9tICcuL3V0aWxzJztcbmltcG9ydCB7IGJ1aWxkU2hhcmVkRGVwZW5kZW5jaWVzIH0gZnJvbSAnLi9tb2R1bGUtZmVkZXJhdGlvbic7XG5pbXBvcnQgeyBzZXR1cFBsdWdpbk1pZGRsZXdhcmUgfSBmcm9tICcuL2Rldi1zZXJ2ZXItbWlkZGxld2FyZSc7XG5cblxuZXhwb3J0IGludGVyZmFjZSBFdmVyeVBsdWdpbk9wdGlvbnMge1xuICBkZXZDb25maWdQYXRoPzogc3RyaW5nOyAgLy8gZGVmYXVsdHMgdG8gJy4vcGx1Z2luLmRldi50cydcbiAgcG9ydD86IG51bWJlcjsgICAgICAgICAgIC8vIG92ZXJyaWRlIHBsdWdpbi5kZXYudHMgcG9ydFxuICBwbHVnaW5JZD86IHN0cmluZzsgICAgICAgLy8gb3ZlcnJpZGUgYXV0by1kZXRlY3RlZFxufVxuXG5leHBvcnQgY2xhc3MgRXZlcnlQbHVnaW5EZXZTZXJ2ZXIgaW1wbGVtZW50cyBSc3BhY2tQbHVnaW5JbnN0YW5jZSB7XG4gIG5hbWUgPSAnRXZlcnlQbHVnaW5EZXZTZXJ2ZXInO1xuXG4gIGNvbnN0cnVjdG9yKHByaXZhdGUgb3B0aW9uczogRXZlcnlQbHVnaW5PcHRpb25zID0ge30pIHt9XG5cbiAgYXBwbHkoY29tcGlsZXI6IENvbXBpbGVyKSB7XG4gICAgLy8gTG9hZCBjb25maWd1cmF0aW9uXG4gICAgY29uc3QgcGx1Z2luSW5mbyA9IGdldFBsdWdpbkluZm8oY29tcGlsZXIub3B0aW9ucy5jb250ZXh0IHx8IHByb2Nlc3MuY3dkKCkpO1xuICAgIGNvbnN0IGRldkNvbmZpZyA9IGxvYWREZXZDb25maWcodGhpcy5vcHRpb25zLmRldkNvbmZpZ1BhdGggfHwgJy4vcGx1Z2luLmRldi50cycpO1xuICAgIGNvbnN0IHBvcnQgPSB0aGlzLm9wdGlvbnMucG9ydCB8fCBkZXZDb25maWc/LnBvcnQgfHwgMzk5OTtcblxuICAgIC8vIENvbmZpZ3VyZSBkZWZhdWx0cyBpbW1lZGlhdGVseSAobm8gaG9va3MgbmVlZGVkKVxuICAgIHRoaXMuY29uZmlndXJlRGVmYXVsdHMoY29tcGlsZXIsIHBsdWdpbkluZm8pO1xuXG4gICAgLy8gSW5pdGlhbGl6ZSBkZXZTZXJ2ZXIgaWYgaXQgZG9lc24ndCBleGlzdFxuICAgIGlmICghY29tcGlsZXIub3B0aW9ucy5kZXZTZXJ2ZXIpIHtcbiAgICAgIGNvbXBpbGVyLm9wdGlvbnMuZGV2U2VydmVyID0ge307XG4gICAgfVxuXG4gICAgLy8gQ29uZmlndXJlIGRldiBzZXJ2ZXJcbiAgICB0aGlzLmNvbmZpZ3VyZURldlNlcnZlcihjb21waWxlciwgcGx1Z2luSW5mbywgZGV2Q29uZmlnLCBwb3J0KTtcblxuICAgIC8vIEFwcGx5IE1vZHVsZSBGZWRlcmF0aW9uIHBsdWdpblxuICAgIG5ldyByc3BhY2suY29udGFpbmVyLk1vZHVsZUZlZGVyYXRpb25QbHVnaW4oe1xuICAgICAgbmFtZTogcGx1Z2luSW5mby5ub3JtYWxpemVkTmFtZSxcbiAgICAgIGZpbGVuYW1lOiAncmVtb3RlRW50cnkuanMnLFxuICAgICAgcnVudGltZVBsdWdpbnM6IFtcbiAgICAgICAgcmVxdWlyZS5yZXNvbHZlKCdAbW9kdWxlLWZlZGVyYXRpb24vbm9kZS9ydW50aW1lUGx1Z2luJyksXG4gICAgICBdLFxuICAgICAgbGlicmFyeTogeyB0eXBlOiAnY29tbW9uanMtbW9kdWxlJyB9LFxuICAgICAgZXhwb3Nlczoge1xuICAgICAgICAnLi9wbHVnaW4nOiAnLi9zcmMvaW5kZXgudHMnLFxuICAgICAgfSxcbiAgICAgIHNoYXJlZDogYnVpbGRTaGFyZWREZXBlbmRlbmNpZXMocGx1Z2luSW5mbyksXG4gICAgfSkuYXBwbHkoY29tcGlsZXIpO1xuICB9XG5cbiAgcHJpdmF0ZSBjb25maWd1cmVEZWZhdWx0cyhjb21waWxlcjogQ29tcGlsZXIsIHBsdWdpbkluZm86IGFueSkge1xuICAgIGNvbnN0IGNvbnRleHQgPSBjb21waWxlci5vcHRpb25zLmNvbnRleHQgfHwgcHJvY2Vzcy5jd2QoKTtcblxuICAgIC8vIENvbmZpZ3VyZSBvdXRwdXQgZGVmYXVsdHNcbiAgICBpZiAoIWNvbXBpbGVyLm9wdGlvbnMub3V0cHV0KSB7XG4gICAgICBjb21waWxlci5vcHRpb25zLm91dHB1dCA9IHt9O1xuICAgIH1cbiAgICBjb21waWxlci5vcHRpb25zLm91dHB1dC51bmlxdWVOYW1lID0gcGx1Z2luSW5mby5ub3JtYWxpemVkTmFtZTtcbiAgICBjb21waWxlci5vcHRpb25zLm91dHB1dC5wdWJsaWNQYXRoID0gJ2F1dG8nO1xuICAgIGNvbXBpbGVyLm9wdGlvbnMub3V0cHV0LnBhdGggPSBwYXRoLnJlc29sdmUoY29udGV4dCwgJ2Rpc3QnKTtcbiAgICBjb21waWxlci5vcHRpb25zLm91dHB1dC5jbGVhbiA9IHRydWU7XG4gICAgY29tcGlsZXIub3B0aW9ucy5vdXRwdXQubGlicmFyeSA9IHsgdHlwZTogJ2NvbW1vbmpzLW1vZHVsZScgfTtcblxuICAgIC8vIENvbmZpZ3VyZSBlbnRyeSBpZiBub3Qgc2V0XG4gICAgaWYgKCFjb21waWxlci5vcHRpb25zLmVudHJ5KSB7XG4gICAgICBjb21waWxlci5vcHRpb25zLmVudHJ5ID0ge1xuICAgICAgICBtYWluOiB7XG4gICAgICAgICAgaW1wb3J0OiBbJy4vc3JjL2luZGV4J11cbiAgICAgICAgfVxuICAgICAgfTtcbiAgICB9XG5cbiAgICAvLyBDb25maWd1cmUgdGFyZ2V0IGFuZCBtb2RlIGRlZmF1bHRzXG4gICAgaWYgKCFjb21waWxlci5vcHRpb25zLnRhcmdldCkge1xuICAgICAgY29tcGlsZXIub3B0aW9ucy50YXJnZXQgPSAnYXN5bmMtbm9kZSc7XG4gICAgfVxuXG4gICAgaWYgKCFjb21waWxlci5vcHRpb25zLm1vZGUpIHtcbiAgICAgIGNvbXBpbGVyLm9wdGlvbnMubW9kZSA9IHByb2Nlc3MuZW52Lk5PREVfRU5WID09PSAnZGV2ZWxvcG1lbnQnID8gJ2RldmVsb3BtZW50JyA6ICdwcm9kdWN0aW9uJztcbiAgICB9XG5cbiAgICAvLyBDb25maWd1cmUgZGV2dG9vbFxuICAgIGlmICghY29tcGlsZXIub3B0aW9ucy5kZXZ0b29sKSB7XG4gICAgICBjb21waWxlci5vcHRpb25zLmRldnRvb2wgPSAnc291cmNlLW1hcCc7XG4gICAgfVxuXG4gICAgLy8gU3VwcHJlc3MgdmVyYm9zZSBpbmZyYXN0cnVjdHVyZSBsb2dnaW5nXG4gICAgaWYgKCFjb21waWxlci5vcHRpb25zLmluZnJhc3RydWN0dXJlTG9nZ2luZykge1xuICAgICAgY29tcGlsZXIub3B0aW9ucy5pbmZyYXN0cnVjdHVyZUxvZ2dpbmcgPSB7XG4gICAgICAgIGxldmVsOiAnd2FybicsICAvLyBPbmx5IHNob3cgd2FybmluZ3MgYW5kIGVycm9yc1xuICAgICAgfTtcbiAgICB9XG5cbiAgICAvLyBDb25maWd1cmUgbW9kdWxlIHJ1bGVzIC0gZW5zdXJlIFR5cGVTY3JpcHQgbG9hZGVyIGlzIHByZXNlbnRcbiAgICB0aGlzLmVuc3VyZVR5cGVTY3JpcHRMb2FkZXIoY29tcGlsZXIpO1xuXG4gICAgLy8gQ29uZmlndXJlIHJlc29sdmUgZXh0ZW5zaW9uc1xuICAgIGlmICghY29tcGlsZXIub3B0aW9ucy5yZXNvbHZlKSB7XG4gICAgICBjb21waWxlci5vcHRpb25zLnJlc29sdmUgPSB7fTtcbiAgICB9XG4gICAgY29tcGlsZXIub3B0aW9ucy5yZXNvbHZlLmV4dGVuc2lvbnMgPSBbJy4uLicsICcudHN4JywgJy50cyddO1xuICB9XG5cbiAgcHJpdmF0ZSBlbnN1cmVUeXBlU2NyaXB0TG9hZGVyKGNvbXBpbGVyOiBDb21waWxlcikge1xuICAgIGlmICghY29tcGlsZXIub3B0aW9ucy5tb2R1bGUpIHtcbiAgICAgIGNvbXBpbGVyLm9wdGlvbnMubW9kdWxlID0geyBydWxlczogW10gfSBhcyBhbnk7XG4gICAgfVxuXG4gICAgaWYgKCFjb21waWxlci5vcHRpb25zLm1vZHVsZS5ydWxlcykge1xuICAgICAgY29tcGlsZXIub3B0aW9ucy5tb2R1bGUucnVsZXMgPSBbXTtcbiAgICB9XG5cbiAgICAvLyBDaGVjayBpZiBUeXBlU2NyaXB0IGxvYWRlciBpcyBhbHJlYWR5IGNvbmZpZ3VyZWRcbiAgICBjb25zdCBoYXNUc0xvYWRlciA9IGNvbXBpbGVyLm9wdGlvbnMubW9kdWxlLnJ1bGVzLnNvbWUoKHJ1bGU6IGFueSkgPT5cbiAgICAgIHR5cGVvZiBydWxlID09PSAnb2JqZWN0JyAmJlxuICAgICAgcnVsZSAhPT0gbnVsbCAmJlxuICAgICAgJ3Rlc3QnIGluIHJ1bGUgJiZcbiAgICAgIHJ1bGUudGVzdCBpbnN0YW5jZW9mIFJlZ0V4cCAmJlxuICAgICAgcnVsZS50ZXN0LnRlc3QoJy50cycpXG4gICAgKTtcblxuICAgIC8vIEFkZCBUeXBlU2NyaXB0IGxvYWRlciBpZiBub3QgcHJlc2VudFxuICAgIGlmICghaGFzVHNMb2FkZXIpIHtcbiAgICAgIGNvbXBpbGVyLm9wdGlvbnMubW9kdWxlLnJ1bGVzLnB1c2goe1xuICAgICAgICB0ZXN0OiAvXFwudHN4PyQvLFxuICAgICAgICB1c2U6ICdidWlsdGluOnN3Yy1sb2FkZXInLFxuICAgICAgICBleGNsdWRlOiAvbm9kZV9tb2R1bGVzLyxcbiAgICAgIH0pO1xuICAgIH1cbiAgfVxuXG4gIHByaXZhdGUgY29uZmlndXJlRGV2U2VydmVyKGNvbXBpbGVyOiBDb21waWxlciwgcGx1Z2luSW5mbzogYW55LCBkZXZDb25maWc6IGFueSwgcG9ydDogbnVtYmVyKSB7XG4gICAgaWYgKCFjb21waWxlci5vcHRpb25zLmRldlNlcnZlcikge1xuICAgICAgcmV0dXJuOyAvLyBTaG91bGQgbmV2ZXIgaGFwcGVuIGR1ZSB0byBjaGVjayBpbiBhcHBseSgpXG4gICAgfVxuXG4gICAgY29uc3QgY29udGV4dCA9IGNvbXBpbGVyLm9wdGlvbnMuY29udGV4dCB8fCBwcm9jZXNzLmN3ZCgpO1xuICAgIGNvbnN0IG9yaWdpbmFsU2V0dXAgPSBjb21waWxlci5vcHRpb25zLmRldlNlcnZlci5zZXR1cE1pZGRsZXdhcmVzO1xuXG4gICAgY29tcGlsZXIub3B0aW9ucy5kZXZTZXJ2ZXIucG9ydCA9IHBvcnQ7XG4gICAgY29tcGlsZXIub3B0aW9ucy5kZXZTZXJ2ZXIuc3RhdGljID0gcGF0aC5qb2luKGNvbnRleHQsICdkaXN0Jyk7XG4gICAgY29tcGlsZXIub3B0aW9ucy5kZXZTZXJ2ZXIuaG90ID0gdHJ1ZTtcbiAgICBjb21waWxlci5vcHRpb25zLmRldlNlcnZlci5kZXZNaWRkbGV3YXJlID0geyB3cml0ZVRvRGlzazogdHJ1ZSB9O1xuICAgIGNvbXBpbGVyLm9wdGlvbnMuZGV2U2VydmVyLmhlYWRlcnMgPSB7XG4gICAgICAnQWNjZXNzLUNvbnRyb2wtQWxsb3ctT3JpZ2luJzogJyonLFxuICAgICAgJ0FjY2Vzcy1Db250cm9sLUFsbG93LU1ldGhvZHMnOiAnR0VULCBQT1NULCBQVVQsIERFTEVURSwgUEFUQ0gsIE9QVElPTlMnLFxuICAgICAgJ0FjY2Vzcy1Db250cm9sLUFsbG93LUhlYWRlcnMnOiAnWC1SZXF1ZXN0ZWQtV2l0aCwgY29udGVudC10eXBlLCBBdXRob3JpemF0aW9uJyxcbiAgICB9O1xuXG4gICAgLy8gU3VwcHJlc3MgdmVyYm9zZSBsb2dnaW5nXG4gICAgY29tcGlsZXIub3B0aW9ucy5kZXZTZXJ2ZXIuY2xpZW50ID0ge1xuICAgICAgbG9nZ2luZzogJ3dhcm4nLCAgLy8gT25seSBzaG93IHdhcm5pbmdzIGFuZCBlcnJvcnNcbiAgICAgIG92ZXJsYXk6IHtcbiAgICAgICAgd2FybmluZ3M6IGZhbHNlLCAgLy8gRG9uJ3Qgc2hvdyB3YXJuaW5nIG92ZXJsYXlcbiAgICAgICAgZXJyb3JzOiB0cnVlLCAgICAgLy8gU3RpbGwgc2hvdyBlcnJvcnNcbiAgICAgIH0sXG4gICAgfTtcblxuICAgIGNvbXBpbGVyLm9wdGlvbnMuZGV2U2VydmVyLnNldHVwTWlkZGxld2FyZXMgPSAobWlkZGxld2FyZXMsIGRldlNlcnZlcikgPT4ge1xuICAgICAgc2V0dXBQbHVnaW5NaWRkbGV3YXJlKGRldlNlcnZlciwgcGx1Z2luSW5mbywgZGV2Q29uZmlnLCBwb3J0KTtcbiAgICAgIHJldHVybiBvcmlnaW5hbFNldHVwID8gb3JpZ2luYWxTZXR1cChtaWRkbGV3YXJlcywgZGV2U2VydmVyKSA6IG1pZGRsZXdhcmVzO1xuICAgIH07XG4gIH1cbn1cbiJdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7OztBQVlBLFNBQWdCLGNBQWMsU0FBNkI7Q0FDekQsTUFBTSxVQUFVQSxrQkFBSyxLQUFLLFNBQVMsZUFBZTtDQUNsRCxNQUFNLE1BQU0sS0FBSyxNQUFNQyxnQkFBRyxhQUFhLFNBQVMsUUFBUSxDQUFDO0FBRXpELFFBQU87RUFDTCxNQUFNLElBQUk7RUFDVixTQUFTLElBQUk7RUFDYixnQkFBZ0JDLDBDQUF3QixJQUFJLEtBQUs7RUFDakQsY0FBYyxJQUFJLGdCQUFnQixFQUFFO0VBQ3BDLGtCQUFrQixJQUFJLG9CQUFvQixFQUFFO0VBQzdDOztBQUdILFNBQWdCLGNBQWMsZUFBdUI7QUFDbkQsS0FBSTtFQUNGLE1BQU0sV0FBV0Ysa0JBQUssUUFBUSxjQUFjO0FBRTVDLFNBQU8sUUFBUSxNQUFNO0FBQ3JCLFNBQU8sUUFBUSxTQUFTLENBQUM7VUFDbEIsT0FBTztBQUNkLFVBQVEsS0FBSyxr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
@@ -0,0 +1,20 @@
1
+ import { Compiler, RspackPluginInstance } from "@rspack/core";
2
+
3
+ //#region src/build/rspack/plugin.d.ts
4
+ interface EveryPluginOptions {
5
+ devConfigPath?: string;
6
+ port?: number;
7
+ pluginId?: string;
8
+ }
9
+ declare class EveryPluginDevServer implements RspackPluginInstance {
10
+ private options;
11
+ name: string;
12
+ constructor(options?: EveryPluginOptions);
13
+ apply(compiler: Compiler): void;
14
+ private configureDefaults;
15
+ private ensureTypeScriptLoader;
16
+ private configureDevServer;
17
+ }
18
+ //#endregion
19
+ export { EveryPluginDevServer, type EveryPluginOptions };
20
+ //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguZC5jdHMiLCJuYW1lcyI6W10sInNvdXJjZXMiOlsiLi4vLi4vLi4vc3JjL2J1aWxkL3JzcGFjay9wbHVnaW4udHMiXSwic291cmNlc0NvbnRlbnQiOltdLCJtYXBwaW5ncyI6Ijs7O1VBU2lCLGtCQUFBOztFQUFBLElBQUEsQ0FBQSxFQUFBLE1BQUE7RUFNSixRQUFBLENBQUEsRUFBQSxNQUFBOztBQUtLLGNBTEwsb0JBQUEsWUFBZ0Msb0JBSzNCLENBQUE7RUFMMkIsUUFBQSxPQUFBO0VBQW9CLElBQUEsRUFBQSxNQUFBO3dCQUdsQztrQkFFYiJ9
@@ -0,0 +1,20 @@
1
+ import { Compiler, RspackPluginInstance } from "@rspack/core";
2
+
3
+ //#region src/build/rspack/plugin.d.ts
4
+ interface EveryPluginOptions {
5
+ devConfigPath?: string;
6
+ port?: number;
7
+ pluginId?: string;
8
+ }
9
+ declare class EveryPluginDevServer implements RspackPluginInstance {
10
+ private options;
11
+ name: string;
12
+ constructor(options?: EveryPluginOptions);
13
+ apply(compiler: Compiler): void;
14
+ private configureDefaults;
15
+ private ensureTypeScriptLoader;
16
+ private configureDevServer;
17
+ }
18
+ //#endregion
19
+ export { EveryPluginDevServer, type EveryPluginOptions };
20
+ //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguZC5tdHMiLCJuYW1lcyI6W10sInNvdXJjZXMiOlsiLi4vLi4vLi4vc3JjL2J1aWxkL3JzcGFjay9wbHVnaW4udHMiXSwic291cmNlc0NvbnRlbnQiOltdLCJtYXBwaW5ncyI6Ijs7O1VBU2lCLGtCQUFBOztFQUFBLElBQUEsQ0FBQSxFQUFBLE1BQUE7RUFNSixRQUFBLENBQUEsRUFBQSxNQUFBOztBQUtLLGNBTEwsb0JBQUEsWUFBZ0Msb0JBSzNCLENBQUE7RUFMMkIsUUFBQSxPQUFBO0VBQW9CLElBQUEsRUFBQSxNQUFBO3dCQUdsQztrQkFFYiJ9