@cdktn/provider-schema 0.23.0-pre.39 → 0.23.0-pre.40

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=provider-schema.unit.test.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"provider-schema.unit.test.d.ts","sourceRoot":"","sources":["../../src/__tests__/provider-schema.unit.test.ts"],"names":[],"mappings":""}
@@ -0,0 +1,58 @@
1
+ "use strict";
2
+ // Copyright (c) HashiCorp, Inc
3
+ // SPDX-License-Identifier: MPL-2.0
4
+ Object.defineProperty(exports, "__esModule", { value: true });
5
+ jest.mock("@cdktn/commons", () => ({
6
+ exec: jest.fn(),
7
+ }));
8
+ const commons_1 = require("@cdktn/commons");
9
+ const provider_schema_1 = require("../provider-schema");
10
+ const execMock = commons_1.exec;
11
+ function transientError(message = "502 Bad Gateway from github.com") {
12
+ const err = new Error("non-zero exit code 1");
13
+ err.stderr = message;
14
+ return err;
15
+ }
16
+ function fatalError(message = "Error: Invalid provider version") {
17
+ const err = new Error("non-zero exit code 1");
18
+ err.stderr = message;
19
+ return err;
20
+ }
21
+ describe("terraformInitWithRetry", () => {
22
+ let consoleErrorSpy;
23
+ beforeEach(() => {
24
+ execMock.mockReset();
25
+ consoleErrorSpy = jest
26
+ .spyOn(console, "error")
27
+ .mockImplementation(() => undefined);
28
+ });
29
+ afterEach(() => {
30
+ consoleErrorSpy.mockRestore();
31
+ });
32
+ it("returns immediately on first-attempt success", async () => {
33
+ execMock.mockResolvedValueOnce("ok");
34
+ const result = await (0, provider_schema_1.terraformInitWithRetry)({ cwd: "/tmp/x" }, 3, 0);
35
+ expect(result).toBe("ok");
36
+ expect(execMock).toHaveBeenCalledTimes(1);
37
+ });
38
+ it("retries on transient stderr and eventually succeeds", async () => {
39
+ execMock
40
+ .mockRejectedValueOnce(transientError())
41
+ .mockRejectedValueOnce(transientError("ECONNRESET"))
42
+ .mockResolvedValueOnce("ok");
43
+ const result = await (0, provider_schema_1.terraformInitWithRetry)({ cwd: "/tmp/x" }, 3, 0);
44
+ expect(result).toBe("ok");
45
+ expect(execMock).toHaveBeenCalledTimes(3);
46
+ });
47
+ it("does not retry on non-transient errors", async () => {
48
+ execMock.mockRejectedValueOnce(fatalError());
49
+ await expect((0, provider_schema_1.terraformInitWithRetry)({ cwd: "/tmp/x" }, 3, 0)).rejects.toMatchObject({ stderr: expect.stringContaining("Invalid") });
50
+ expect(execMock).toHaveBeenCalledTimes(1);
51
+ });
52
+ it("throws after exhausting retries on persistent transient errors", async () => {
53
+ execMock.mockRejectedValue(transientError("503 Service Unavailable"));
54
+ await expect((0, provider_schema_1.terraformInitWithRetry)({ cwd: "/tmp/x" }, 3, 0)).rejects.toMatchObject({ stderr: expect.stringContaining("503") });
55
+ expect(execMock).toHaveBeenCalledTimes(3);
56
+ });
57
+ });
58
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicHJvdmlkZXItc2NoZW1hLnVuaXQudGVzdC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9fX3Rlc3RzX18vcHJvdmlkZXItc2NoZW1hLnVuaXQudGVzdC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiO0FBQUEsK0JBQStCO0FBQy9CLG1DQUFtQzs7QUFFbkMsSUFBSSxDQUFDLElBQUksQ0FBQyxnQkFBZ0IsRUFBRSxHQUFHLEVBQUUsQ0FBQyxDQUFDO0lBQ2pDLElBQUksRUFBRSxJQUFJLENBQUMsRUFBRSxFQUFFO0NBQ2hCLENBQUMsQ0FBQyxDQUFDO0FBRUosNENBQXNDO0FBQ3RDLHdEQUE0RDtBQUU1RCxNQUFNLFFBQVEsR0FBRyxjQUE0QixDQUFDO0FBRTlDLFNBQVMsY0FBYyxDQUFDLE9BQU8sR0FBRyxpQ0FBaUM7SUFDakUsTUFBTSxHQUFHLEdBQVEsSUFBSSxLQUFLLENBQUMsc0JBQXNCLENBQUMsQ0FBQztJQUNuRCxHQUFHLENBQUMsTUFBTSxHQUFHLE9BQU8sQ0FBQztJQUNyQixPQUFPLEdBQUcsQ0FBQztBQUNiLENBQUM7QUFFRCxTQUFTLFVBQVUsQ0FBQyxPQUFPLEdBQUcsaUNBQWlDO0lBQzdELE1BQU0sR0FBRyxHQUFRLElBQUksS0FBSyxDQUFDLHNCQUFzQixDQUFDLENBQUM7SUFDbkQsR0FBRyxDQUFDLE1BQU0sR0FBRyxPQUFPLENBQUM7SUFDckIsT0FBTyxHQUFHLENBQUM7QUFDYixDQUFDO0FBRUQsUUFBUSxDQUFDLHdCQUF3QixFQUFFLEdBQUcsRUFBRTtJQUN0QyxJQUFJLGVBQWlDLENBQUM7SUFFdEMsVUFBVSxDQUFDLEdBQUcsRUFBRTtRQUNkLFFBQVEsQ0FBQyxTQUFTLEVBQUUsQ0FBQztRQUNyQixlQUFlLEdBQUcsSUFBSTthQUNuQixLQUFLLENBQUMsT0FBTyxFQUFFLE9BQU8sQ0FBQzthQUN2QixrQkFBa0IsQ0FBQyxHQUFHLEVBQUUsQ0FBQyxTQUFTLENBQUMsQ0FBQztJQUN6QyxDQUFDLENBQUMsQ0FBQztJQUVILFNBQVMsQ0FBQyxHQUFHLEVBQUU7UUFDYixlQUFlLENBQUMsV0FBVyxFQUFFLENBQUM7SUFDaEMsQ0FBQyxDQUFDLENBQUM7SUFFSCxFQUFFLENBQUMsOENBQThDLEVBQUUsS0FBSyxJQUFJLEVBQUU7UUFDNUQsUUFBUSxDQUFDLHFCQUFxQixDQUFDLElBQUksQ0FBQyxDQUFDO1FBRXJDLE1BQU0sTUFBTSxHQUFHLE1BQU0sSUFBQSx3Q0FBc0IsRUFBQyxFQUFFLEdBQUcsRUFBRSxRQUFRLEVBQUUsRUFBRSxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUM7UUFFckUsTUFBTSxDQUFDLE1BQU0sQ0FBQyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQztRQUMxQixNQUFNLENBQUMsUUFBUSxDQUFDLENBQUMscUJBQXFCLENBQUMsQ0FBQyxDQUFDLENBQUM7SUFDNUMsQ0FBQyxDQUFDLENBQUM7SUFFSCxFQUFFLENBQUMscURBQXFELEVBQUUsS0FBSyxJQUFJLEVBQUU7UUFDbkUsUUFBUTthQUNMLHFCQUFxQixDQUFDLGNBQWMsRUFBRSxDQUFDO2FBQ3ZDLHFCQUFxQixDQUFDLGNBQWMsQ0FBQyxZQUFZLENBQUMsQ0FBQzthQUNuRCxxQkFBcUIsQ0FBQyxJQUFJLENBQUMsQ0FBQztRQUUvQixNQUFNLE1BQU0sR0FBRyxNQUFNLElBQUEsd0NBQXNCLEVBQUMsRUFBRSxHQUFHLEVBQUUsUUFBUSxFQUFFLEVBQUUsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDO1FBRXJFLE1BQU0sQ0FBQyxNQUFNLENBQUMsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUM7UUFDMUIsTUFBTSxDQUFDLFFBQVEsQ0FBQyxDQUFDLHFCQUFxQixDQUFDLENBQUMsQ0FBQyxDQUFDO0lBQzVDLENBQUMsQ0FBQyxDQUFDO0lBRUgsRUFBRSxDQUFDLHdDQUF3QyxFQUFFLEtBQUssSUFBSSxFQUFFO1FBQ3RELFFBQVEsQ0FBQyxxQkFBcUIsQ0FBQyxVQUFVLEVBQUUsQ0FBQyxDQUFDO1FBRTdDLE1BQU0sTUFBTSxDQUNWLElBQUEsd0NBQXNCLEVBQUMsRUFBRSxHQUFHLEVBQUUsUUFBUSxFQUFFLEVBQUUsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUNoRCxDQUFDLE9BQU8sQ0FBQyxhQUFhLENBQUMsRUFBRSxNQUFNLEVBQUUsTUFBTSxDQUFDLGdCQUFnQixDQUFDLFNBQVMsQ0FBQyxFQUFFLENBQUMsQ0FBQztRQUV4RSxNQUFNLENBQUMsUUFBUSxDQUFDLENBQUMscUJBQXFCLENBQUMsQ0FBQyxDQUFDLENBQUM7SUFDNUMsQ0FBQyxDQUFDLENBQUM7SUFFSCxFQUFFLENBQUMsZ0VBQWdFLEVBQUUsS0FBSyxJQUFJLEVBQUU7UUFDOUUsUUFBUSxDQUFDLGlCQUFpQixDQUFDLGNBQWMsQ0FBQyx5QkFBeUIsQ0FBQyxDQUFDLENBQUM7UUFFdEUsTUFBTSxNQUFNLENBQ1YsSUFBQSx3Q0FBc0IsRUFBQyxFQUFFLEdBQUcsRUFBRSxRQUFRLEVBQUUsRUFBRSxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQ2hELENBQUMsT0FBTyxDQUFDLGFBQWEsQ0FBQyxFQUFFLE1BQU0sRUFBRSxNQUFNLENBQUMsZ0JBQWdCLENBQUMsS0FBSyxDQUFDLEVBQUUsQ0FBQyxDQUFDO1FBRXBFLE1BQU0sQ0FBQyxRQUFRLENBQUMsQ0FBQyxxQkFBcUIsQ0FBQyxDQUFDLENBQUMsQ0FBQztJQUM1QyxDQUFDLENBQUMsQ0FBQztBQUNMLENBQUMsQ0FBQyxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiLy8gQ29weXJpZ2h0IChjKSBIYXNoaUNvcnAsIEluY1xuLy8gU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IE1QTC0yLjBcblxuamVzdC5tb2NrKFwiQGNka3RuL2NvbW1vbnNcIiwgKCkgPT4gKHtcbiAgZXhlYzogamVzdC5mbigpLFxufSkpO1xuXG5pbXBvcnQgeyBleGVjIH0gZnJvbSBcIkBjZGt0bi9jb21tb25zXCI7XG5pbXBvcnQgeyB0ZXJyYWZvcm1Jbml0V2l0aFJldHJ5IH0gZnJvbSBcIi4uL3Byb3ZpZGVyLXNjaGVtYVwiO1xuXG5jb25zdCBleGVjTW9jayA9IGV4ZWMgYXMgdW5rbm93biBhcyBqZXN0Lk1vY2s7XG5cbmZ1bmN0aW9uIHRyYW5zaWVudEVycm9yKG1lc3NhZ2UgPSBcIjUwMiBCYWQgR2F0ZXdheSBmcm9tIGdpdGh1Yi5jb21cIikge1xuICBjb25zdCBlcnI6IGFueSA9IG5ldyBFcnJvcihcIm5vbi16ZXJvIGV4aXQgY29kZSAxXCIpO1xuICBlcnIuc3RkZXJyID0gbWVzc2FnZTtcbiAgcmV0dXJuIGVycjtcbn1cblxuZnVuY3Rpb24gZmF0YWxFcnJvcihtZXNzYWdlID0gXCJFcnJvcjogSW52YWxpZCBwcm92aWRlciB2ZXJzaW9uXCIpIHtcbiAgY29uc3QgZXJyOiBhbnkgPSBuZXcgRXJyb3IoXCJub24temVybyBleGl0IGNvZGUgMVwiKTtcbiAgZXJyLnN0ZGVyciA9IG1lc3NhZ2U7XG4gIHJldHVybiBlcnI7XG59XG5cbmRlc2NyaWJlKFwidGVycmFmb3JtSW5pdFdpdGhSZXRyeVwiLCAoKSA9PiB7XG4gIGxldCBjb25zb2xlRXJyb3JTcHk6IGplc3QuU3B5SW5zdGFuY2U7XG5cbiAgYmVmb3JlRWFjaCgoKSA9PiB7XG4gICAgZXhlY01vY2subW9ja1Jlc2V0KCk7XG4gICAgY29uc29sZUVycm9yU3B5ID0gamVzdFxuICAgICAgLnNweU9uKGNvbnNvbGUsIFwiZXJyb3JcIilcbiAgICAgIC5tb2NrSW1wbGVtZW50YXRpb24oKCkgPT4gdW5kZWZpbmVkKTtcbiAgfSk7XG5cbiAgYWZ0ZXJFYWNoKCgpID0+IHtcbiAgICBjb25zb2xlRXJyb3JTcHkubW9ja1Jlc3RvcmUoKTtcbiAgfSk7XG5cbiAgaXQoXCJyZXR1cm5zIGltbWVkaWF0ZWx5IG9uIGZpcnN0LWF0dGVtcHQgc3VjY2Vzc1wiLCBhc3luYyAoKSA9PiB7XG4gICAgZXhlY01vY2subW9ja1Jlc29sdmVkVmFsdWVPbmNlKFwib2tcIik7XG5cbiAgICBjb25zdCByZXN1bHQgPSBhd2FpdCB0ZXJyYWZvcm1Jbml0V2l0aFJldHJ5KHsgY3dkOiBcIi90bXAveFwiIH0sIDMsIDApO1xuXG4gICAgZXhwZWN0KHJlc3VsdCkudG9CZShcIm9rXCIpO1xuICAgIGV4cGVjdChleGVjTW9jaykudG9IYXZlQmVlbkNhbGxlZFRpbWVzKDEpO1xuICB9KTtcblxuICBpdChcInJldHJpZXMgb24gdHJhbnNpZW50IHN0ZGVyciBhbmQgZXZlbnR1YWxseSBzdWNjZWVkc1wiLCBhc3luYyAoKSA9PiB7XG4gICAgZXhlY01vY2tcbiAgICAgIC5tb2NrUmVqZWN0ZWRWYWx1ZU9uY2UodHJhbnNpZW50RXJyb3IoKSlcbiAgICAgIC5tb2NrUmVqZWN0ZWRWYWx1ZU9uY2UodHJhbnNpZW50RXJyb3IoXCJFQ09OTlJFU0VUXCIpKVxuICAgICAgLm1vY2tSZXNvbHZlZFZhbHVlT25jZShcIm9rXCIpO1xuXG4gICAgY29uc3QgcmVzdWx0ID0gYXdhaXQgdGVycmFmb3JtSW5pdFdpdGhSZXRyeSh7IGN3ZDogXCIvdG1wL3hcIiB9LCAzLCAwKTtcblxuICAgIGV4cGVjdChyZXN1bHQpLnRvQmUoXCJva1wiKTtcbiAgICBleHBlY3QoZXhlY01vY2spLnRvSGF2ZUJlZW5DYWxsZWRUaW1lcygzKTtcbiAgfSk7XG5cbiAgaXQoXCJkb2VzIG5vdCByZXRyeSBvbiBub24tdHJhbnNpZW50IGVycm9yc1wiLCBhc3luYyAoKSA9PiB7XG4gICAgZXhlY01vY2subW9ja1JlamVjdGVkVmFsdWVPbmNlKGZhdGFsRXJyb3IoKSk7XG5cbiAgICBhd2FpdCBleHBlY3QoXG4gICAgICB0ZXJyYWZvcm1Jbml0V2l0aFJldHJ5KHsgY3dkOiBcIi90bXAveFwiIH0sIDMsIDApLFxuICAgICkucmVqZWN0cy50b01hdGNoT2JqZWN0KHsgc3RkZXJyOiBleHBlY3Quc3RyaW5nQ29udGFpbmluZyhcIkludmFsaWRcIikgfSk7XG5cbiAgICBleHBlY3QoZXhlY01vY2spLnRvSGF2ZUJlZW5DYWxsZWRUaW1lcygxKTtcbiAgfSk7XG5cbiAgaXQoXCJ0aHJvd3MgYWZ0ZXIgZXhoYXVzdGluZyByZXRyaWVzIG9uIHBlcnNpc3RlbnQgdHJhbnNpZW50IGVycm9yc1wiLCBhc3luYyAoKSA9PiB7XG4gICAgZXhlY01vY2subW9ja1JlamVjdGVkVmFsdWUodHJhbnNpZW50RXJyb3IoXCI1MDMgU2VydmljZSBVbmF2YWlsYWJsZVwiKSk7XG5cbiAgICBhd2FpdCBleHBlY3QoXG4gICAgICB0ZXJyYWZvcm1Jbml0V2l0aFJldHJ5KHsgY3dkOiBcIi90bXAveFwiIH0sIDMsIDApLFxuICAgICkucmVqZWN0cy50b01hdGNoT2JqZWN0KHsgc3RkZXJyOiBleHBlY3Quc3RyaW5nQ29udGFpbmluZyhcIjUwM1wiKSB9KTtcblxuICAgIGV4cGVjdChleGVjTW9jaykudG9IYXZlQmVlbkNhbGxlZFRpbWVzKDMpO1xuICB9KTtcbn0pO1xuIl19
@@ -1 +1 @@
1
- {"version":3,"file":"provider-schema.d.ts","sourceRoot":"","sources":["../src/provider-schema.ts"],"names":[],"mappings":"AAMA,OAAO,EAIL,2BAA2B,EAC3B,6BAA6B,EAG7B,YAAY,EACZ,cAAc,EAMf,MAAM,gBAAgB,CAAC;AAIxB;;;GAGG;AACH,MAAM,MAAM,IAAI,GAAG,MAAM,GAAG;IAAE,MAAM,EAAE,4BAA4B,CAAA;CAAE,CAAC;AACrE,MAAM,MAAM,gBAAgB,GAAG,MAAM,GAAG;IAAE,MAAM,EAAE,kBAAkB,CAAA;CAAE,CAAC;AACvE,MAAM,MAAM,iBAAiB,GAAG,MAAM,GAAG;IAAE,MAAM,EAAE,mBAAmB,CAAA;CAAE,CAAC;AACzE,MAAM,MAAM,YAAY,GAAG,MAAM,GAAG;IAAE,MAAM,EAAE,cAAc,CAAA;CAAE,CAAC;AAE/D,eAAO,MAAM,SAAS,MAAO,IAAI;cAMnB,gBAAgB;eACf,iBAAiB;UACtB,YAAY;CAErB,CAAC;AAkIF,MAAM,WAAW,eAAe;IAC9B,QAAQ,CAAC,EAAE;QAAE,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,CAAA;KAAE,CAAC;IACnD,SAAS,EAAE;QACT,kBAAkB,CAAC,EAAE;YACnB,CAAC,IAAI,EAAE,MAAM,GAAG;gBAAE,MAAM,CAAC,EAAE,MAAM,CAAC;gBAAC,OAAO,CAAC,EAAE,MAAM,CAAA;aAAE,CAAC;SACvD,CAAC;KACH,CAAC;IACF,MAAM,CAAC,EAAE;QAAE,CAAC,IAAI,EAAE,MAAM,GAAG;YAAE,MAAM,EAAE,MAAM,CAAC;YAAC,OAAO,CAAC,EAAE,MAAM,CAAA;SAAE,CAAA;KAAE,CAAC;CACnE;AAED,wBAAsB,kBAAkB,CACtC,MAAM,EAAE,6BAA6B,2BAuCtC;AAID,wBAAgB,sBAAsB,CAAC,MAAM,EAAE,cAAc,GAAG,cAAc,CAsC7E;AAED,wBAAsB,gBAAgB,CAAC,MAAM,EAAE,2BAA2B,yCAqCzE"}
1
+ {"version":3,"file":"provider-schema.d.ts","sourceRoot":"","sources":["../src/provider-schema.ts"],"names":[],"mappings":"AAMA,OAAO,EAIL,2BAA2B,EAC3B,6BAA6B,EAG7B,YAAY,EACZ,cAAc,EAMf,MAAM,gBAAgB,CAAC;AAiExB;;;GAGG;AACH,MAAM,MAAM,IAAI,GAAG,MAAM,GAAG;IAAE,MAAM,EAAE,4BAA4B,CAAA;CAAE,CAAC;AACrE,MAAM,MAAM,gBAAgB,GAAG,MAAM,GAAG;IAAE,MAAM,EAAE,kBAAkB,CAAA;CAAE,CAAC;AACvE,MAAM,MAAM,iBAAiB,GAAG,MAAM,GAAG;IAAE,MAAM,EAAE,mBAAmB,CAAA;CAAE,CAAC;AACzE,MAAM,MAAM,YAAY,GAAG,MAAM,GAAG;IAAE,MAAM,EAAE,cAAc,CAAA;CAAE,CAAC;AAE/D,eAAO,MAAM,SAAS,MAAO,IAAI;cAMnB,gBAAgB;eACf,iBAAiB;UACtB,YAAY;CAErB,CAAC;AAkIF,MAAM,WAAW,eAAe;IAC9B,QAAQ,CAAC,EAAE;QAAE,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,CAAA;KAAE,CAAC;IACnD,SAAS,EAAE;QACT,kBAAkB,CAAC,EAAE;YACnB,CAAC,IAAI,EAAE,MAAM,GAAG;gBAAE,MAAM,CAAC,EAAE,MAAM,CAAC;gBAAC,OAAO,CAAC,EAAE,MAAM,CAAA;aAAE,CAAC;SACvD,CAAC;KACH,CAAC;IACF,MAAM,CAAC,EAAE;QAAE,CAAC,IAAI,EAAE,MAAM,GAAG;YAAE,MAAM,EAAE,MAAM,CAAC;YAAC,OAAO,CAAC,EAAE,MAAM,CAAA;SAAE,CAAA;KAAE,CAAC;CACnE;AAED,wBAAsB,kBAAkB,CACtC,MAAM,EAAE,6BAA6B,2BAuCtC;AAID,wBAAgB,sBAAsB,CAAC,MAAM,EAAE,cAAc,GAAG,cAAc,CAsC7E;AAED,wBAAsB,gBAAgB,CAAC,MAAM,EAAE,2BAA2B,yCAqCzE"}
@@ -23,7 +23,7 @@ var __importStar = (this && this.__importStar) || function (mod) {
23
23
  return result;
24
24
  };
25
25
  Object.defineProperty(exports, "__esModule", { value: true });
26
- exports.readModuleSchema = exports.sanitizeProviderSchema = exports.readProviderSchema = exports.parseFQPN = void 0;
26
+ exports.readModuleSchema = exports.sanitizeProviderSchema = exports.readProviderSchema = exports.parseFQPN = exports.terraformInitWithRetry = void 0;
27
27
  // Copyright (c) HashiCorp, Inc
28
28
  // SPDX-License-Identifier: MPL-2.0
29
29
  const fs = __importStar(require("fs-extra"));
@@ -31,6 +31,59 @@ const path = __importStar(require("path"));
31
31
  const hcl2json_1 = require("@cdktn/hcl2json");
32
32
  const commons_1 = require("@cdktn/commons");
33
33
  const terraformBinaryName = process.env.TERRAFORM_BINARY_NAME || "terraform";
34
+ // Provider binaries are downloaded from GitHub release CDNs during
35
+ // `terraform init`, which intermittently returns 5xx. Retry on those
36
+ // signatures only — real config/schema errors should still fail fast.
37
+ const TRANSIENT_INIT_ERROR_PATTERNS = [
38
+ /\b50[234]\b/,
39
+ /Bad Gateway/i,
40
+ /Service Unavailable/i,
41
+ /Gateway Timeout/i,
42
+ /ECONNRESET/i,
43
+ /ETIMEDOUT/i,
44
+ /EAI_AGAIN/i,
45
+ /unexpected EOF/i,
46
+ ];
47
+ /**
48
+ * Runs `terraform init` and retries on transient HTTP/network failures.
49
+ *
50
+ * Provider binaries are pulled from GitHub's release CDN, which
51
+ * intermittently returns 5xx. The retry only fires when stderr matches a
52
+ * known transient pattern — real errors (bad version, schema parse, etc.)
53
+ * still fail on the first attempt.
54
+ *
55
+ * @param options - spawn options forwarded to `exec` (`cwd` is required so
56
+ * `terraform init` runs inside the temp dir holding `main.tf.json`)
57
+ * @param maxAttempts - total attempts including the initial call; the number
58
+ * of retries is `maxAttempts - 1`. Defaults to 3 (1 initial + 2 retries)
59
+ * @param baseDelayMs - delay before the first retry. Tests pass `0` to skip
60
+ * waits. Defaults to 1000ms
61
+ * @param backoffMultiplier - factor applied to the delay on each subsequent
62
+ * retry (so retries wait `baseDelayMs * multiplier^(attempt-1)`). Defaults
63
+ * to 2 (1s → 2s → 4s …)
64
+ * @returns stdout from the successful `terraform init` invocation
65
+ * @internal exposed for testing
66
+ */
67
+ async function terraformInitWithRetry(options, maxAttempts = 3, baseDelayMs = 1000, backoffMultiplier = 2) {
68
+ var _a;
69
+ for (let attempt = 1; attempt <= maxAttempts; attempt++) {
70
+ try {
71
+ return await (0, commons_1.exec)(terraformBinaryName, ["init"], options);
72
+ }
73
+ catch (error) {
74
+ const stderr = (_a = error === null || error === void 0 ? void 0 : error.stderr) !== null && _a !== void 0 ? _a : "";
75
+ const transient = TRANSIENT_INIT_ERROR_PATTERNS.some((p) => p.test(stderr));
76
+ if (!transient || attempt === maxAttempts) {
77
+ throw error;
78
+ }
79
+ const delayMs = baseDelayMs * backoffMultiplier ** (attempt - 1);
80
+ console.error(`terraform init failed with a transient error, retrying in ${delayMs}ms (attempt ${attempt}/${maxAttempts - 1})`);
81
+ await new Promise((resolve) => setTimeout(resolve, delayMs));
82
+ }
83
+ }
84
+ throw new Error("unreachable");
85
+ }
86
+ exports.terraformInitWithRetry = terraformInitWithRetry;
34
87
  const parseFQPN = (f) => {
35
88
  const [hostname, namespace, name] = f.split("/");
36
89
  if (!name) {
@@ -145,7 +198,7 @@ async function readProviderSchema(target) {
145
198
  const outdir = process.cwd();
146
199
  const filePath = path.join(outdir, "main.tf.json");
147
200
  await fs.writeFile(filePath, JSON.stringify(config));
148
- await (0, commons_1.exec)(terraformBinaryName, ["init"], { cwd: outdir });
201
+ await terraformInitWithRetry({ cwd: outdir });
149
202
  providerSchema = JSON.parse(await (0, commons_1.exec)(terraformBinaryName, ["providers", "schema", "-json"], {
150
203
  cwd: outdir,
151
204
  }));
@@ -222,4 +275,4 @@ async function readModuleSchema(target) {
222
275
  return moduleSchema;
223
276
  }
224
277
  exports.readModuleSchema = readModuleSchema;
225
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicHJvdmlkZXItc2NoZW1hLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vc3JjL3Byb3ZpZGVyLXNjaGVtYS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztBQUFBLCtCQUErQjtBQUMvQixtQ0FBbUM7QUFDbkMsNkNBQStCO0FBQy9CLDJDQUE2QjtBQUU3Qiw4Q0FBK0M7QUFDL0MsNENBZXdCO0FBRXhCLE1BQU0sbUJBQW1CLEdBQUcsT0FBTyxDQUFDLEdBQUcsQ0FBQyxxQkFBcUIsSUFBSSxXQUFXLENBQUM7QUFXdEUsTUFBTSxTQUFTLEdBQUcsQ0FBQyxDQUFPLEVBQUUsRUFBRTtJQUNuQyxNQUFNLENBQUMsUUFBUSxFQUFFLFNBQVMsRUFBRSxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUMsS0FBSyxDQUFDLEdBQUcsQ0FBQyxDQUFDO0lBQ2pELElBQUksQ0FBQyxJQUFJLEVBQUUsQ0FBQztRQUNWLE1BQU0sSUFBSSxLQUFLLENBQUMsZ0JBQWdCLENBQUMsRUFBRSxDQUFDLENBQUM7SUFDdkMsQ0FBQztJQUNELE9BQU8sRUFBRSxRQUFRLEVBQUUsU0FBUyxFQUFFLElBQUksRUFJakMsQ0FBQztBQUNKLENBQUMsQ0FBQztBQVZXLFFBQUEsU0FBUyxhQVVwQjtBQUVGLE1BQU0sYUFBYSxHQUFHLENBQUksSUFBYSxFQUFLLEVBQUUsQ0FDNUMsS0FBSyxDQUFDLE9BQU8sQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUM7QUFFdkMsTUFBTSxrQkFBa0IsR0FBRyxDQUFDLFNBQWMsRUFBRSxFQUFFO0lBQzVDLE1BQU0sTUFBTSxHQUFZLEVBQUUsQ0FBQztJQUUzQixJQUFJLENBQUMsU0FBUztRQUFFLE9BQU8sTUFBTSxDQUFDO0lBRTlCLEtBQUssTUFBTSxJQUFJLElBQUksTUFBTSxDQUFDLElBQUksQ0FBQyxTQUFTLENB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R0FBRyxFQUFFLEVBQUUsV0FBVyxDQUFDLENBQUM7UUFDckQsQ0FBQztRQUVELE1BQU0sQ0FBQyxNQUFNLENBQUMsTUFBTSxDQUFDLFNBQVMsQ0FBQyxHQUFHLEVBQUUsTUFBTSxFQUFFLE1BQU0sRUFBRSxDQUFDO1FBQ3JELElBQUksTUFBTSxDQUFDLE9BQU8sRUFBRSxDQUFDO1lBQ25CLE1BQU0sQ0FBQyxNQUFNLENBQUMsTUFBTSxDQUFDLFNBQVMsQ0FBQyxDQUFDLFNBQVMsQ0FBQyxHQUFHLE1BQU0sQ0FBQyxPQUFPLENBQUM7UUFDOUQsQ0FBQztRQUVELE1BQU0sTUFBTSxHQUFHLE9BQU8sQ0FBQyxHQUFHLEVBQUUsQ0FBQztRQUM3QixNQUFNLFFBQVEsR0FBRyxJQUFJLENBQUMsSUFBSSxDQUFDLE1BQU0sRUFBRSxjQUFjLENBQUMsQ0FBQztRQUNuRCxNQUFNLEVBQUUsQ0FBQyxTQUFTLENBQUMsUUFBUSxFQUFFLElBQUksQ0FBQyxTQUFTLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQztRQUVyRCxNQUFNLElBQUEsY0FBSSxFQUFDLG1CQUFtQixFQUFFLENBQUMsS0FBSyxDQUFDLEVBQUUsRUFBRSxHQUFHLEVBQUUsTUFBTSxFQUFFLENBQUMsQ0FBQztRQUMxRCxJQUFJLE1BQU0sQ0FBQyxNQUFNLEVBQUUsQ0FBQztZQUNsQixZQUFZLEdBQUcsTUFBTSxtQkFBbUIsQ0FDdEMsTUFBTSxFQUNOLE1BQU0sQ0FBQyxJQUFJLENBQUMsTUFBTSxDQUFDLE1BQU0sQ0FBQyxDQUMzQixDQUFDO1FBQ0osQ0FBQztJQUNILENBQUMsQ0FBQyxDQUFDO0lBRUgsT0FBTyxZQUFZLENBQUM7QUFDdEIsQ0FBQztBQXJDRCw0Q0FxQ0MiLCJzb3VyY2VzQ29udGVudCI6WyIvLyBDb3B5cmlnaHQgKGMpIEhhc2hpQ29ycCwgSW5jXG4vLyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogTVBMLTIuMFxuaW1wb3J0ICogYXMgZnMgZnJvbSBcImZzLWV4dHJhXCI7XG5pbXBvcnQgKiBhcyBwYXRoIGZyb20gXCJwYXRoXCI7XG5cbmltcG9ydCB7IGNvbnZlcnRGaWxlcyB9IGZyb20gXCJAY2RrdG4vaGNsMmpzb25cIjtcbmltcG9ydCB7XG4gIEF0dHJpYnV0ZSxcbiAgQXR0cmlidXRlVHlwZSxcbiAgQmxvY2ssXG4gIENvbnN0cnVjdHNNYWtlck1vZHVsZVRhcmdldCxcbiAgQ29uc3RydWN0c01ha2VyUHJvdmlkZXJUYXJnZXQsXG4gIElucHV0LFxuICBNb2R1bGVJbmRleCxcbiAgTW9kdWxlU2NoZW1hLFxuICBQcm92aWRlclNjaGVtYSxcbiAgVGVycmFmb3JtTW9kdWxlQ29uc3RyYWludCxcbiAgVmVyc2lvblNjaGVtYSxcbiAgZXhlYyxcbiAgaXNOZXN0ZWRUeXBlQXR0cmlidXRlLFxuICB3aXRoVGVtcERpcixcbn0gZnJvbSBcIkBjZGt0bi9jb21tb25zXCI7XG5cbmNvbnN0IHRlcnJhZm9ybUJpbmFyeU5hbWUgPSBwcm9jZXNzLmVudi5URVJSQUZPUk1fQklOQVJZX05BTUUgfHwgXCJ0ZXJyYWZvcm1cIjtcblxuLyoqXG4gKiBGdWxseSBRdWFsaWZpZWQgcHJvdmlkZXIgbmFtZSBpbiB0aGUgZm9ybWF0OlxuICogbGlrZSBlLmcuIHJlZ2lzdHJ5LnRlcnJhZm9ybS5pby9oYXNoaWNvcnAvYXdzXG4gKi9cbmV4cG9ydCB0eXBlIEZRUE4gPSBzdHJpbmcgJiB7IF9fdHlwZTogXCJGdWxseVF1YWxpZmllZFByb3ZpZGVyTmFtZVwiIH07XG5leHBvcnQgdHlwZSBQcm92aWRlckhvc3RuYW1lID0gc3RyaW5nICYgeyBfX3R5cGU6IFwiUHJvdmlkZXJIb3N0bmFtZVwiIH07XG5leHBvcnQgdHlwZSBQcm92aWRlck5hbWVzcGFjZSA9IHN0cmluZyAmIHsgX190eXBlOiBcIlByb3ZpZGVyTmFtZXNwYWNlXCIgfTtcbmV4cG9ydCB0eXBlIFByb3ZpZGVyTmFtZSA9IHN0cmluZyAmIHsgX190eXBlOiBcIlByb3ZpZGVyTmFtZVwiIH07XG5cbmV4cG9ydCBjb25zdCBwYXJzZUZRUE4gPSAoZjogRlFQTikgPT4ge1xuICBjb25zdCBbaG9zdG5hbWUsIG5hbWVzcGFjZSwgbmFtZV0gPSBmLnNwbGl0KFwiL1wiKTtcbiAgaWYgKCFuYW1lKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKGBjYW4ndCBoYW5kbGUgJHtmfWApO1xuICB9XG4gIHJldHVybiB7IGhvc3RuYW1lLCBuYW1lc3BhY2UsIG5hbWUgfSBhcyB7XG4gICAgaG9zdG5hbWU6IFByb3ZpZGVySG9zdG5hbWU7XG4gICAgbmFtZXNwYWNlOiBQcm92aWRlck5hbWVzcGFjZTtcbiAgICBuYW1lOiBQcm92aWRlck5hbWU7XG4gIH07XG59O1xuXG5jb25zdCB1bndyYXBJZkFycmF5ID0gPFQ+KGl0ZW06IFQgfCBUW10pOiBUID0+XG4gIEFycmF5LmlzQXJyYXkoaXRlbSkgPyBpdGVtWzBdIDogaXRlbTtcblxuY29uc3QgdHJhbnNmb3JtVmFyaWFibGVzID0gKHZhcmlhYmxlczogYW55KSA9PiB7XG4gIGNvbnN0IHJlc3VsdDogSW5wdXRbXSA9IFtdO1xuXG4gIGlmICghdmFyaWFibGVzKSByZXR1cm4gcmVzdWx0O1xuXG4gIGZvciAoY29uc3QgbmFtZSBvZiBPYmplY3Qua2V5cyh2YXJpYWJsZXMpKSB7XG4gICAgY29uc3QgdmFyaWFibGUgPSB1bndyYXBJZkFycmF5KHZhcmlhYmxlc1tuYW1lXSk7XG4gICAgbGV0IHZhcmlhYmxlVHlwZTogc3RyaW5nO1xuXG4gICAgaWYgKFxuICAgICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLXByb3RvdHlwZS1idWlsdGluc1xuICAgICAgdmFyaWFibGUuaGFzT3duUHJvcGVydHkoXCJ0eXBlXCIpID09IGZhbHNlICYmXG4gICAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbm8tcHJvdG90eXBlLWJ1aWx0aW5zXG4gICAgICB2YXJpYWJsZS5oYXNPd25Qcm9wZXJ0eShcImRlZmF1bHRcIikgPT0gdHJ1ZVxuICAgICkge1xuICAgICAgc3dpdGNoICh0eXBlb2YgdmFyaWFibGVbXCJkZWZhdWx0XCJdKSB7XG4gICAgICAgIGNhc2UgXCJib29sZWFuXCI6XG4gICAgICAgICAgdmFyaWFibGVUeXBlID0gXCJib29sXCI7XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIGNhc2UgXCJudW1iZXJcIjpcbiAgICAgICAgICB2YXJpYWJsZVR5cGUgPSBcIm51bWJlclwiO1xuICAgICAgICAgIGJyZWFrO1xuICAgICAgICBkZWZhdWx0OlxuICAgICAgICAgIHZhcmlhYmxlVHlwZSA9IFwiYW55XCI7XG4gICAgICB9XG4gICAgfSBlbHNlIHtcbiAgICAgIGNvbnN0IHJhd1ZhcmlhYmxlVHlwZSA9IHZhcmlhYmxlW1widHlwZVwiXTtcbiAgICAgIGlmIChcbiAgICAgICAgdHlwZW9mIHJhd1ZhcmlhYmxlVHlwZSA9PT0gXCJzdHJpbmdcIiAmJlxuICAgICAgICByYXdWYXJpYWJsZVR5cGUuc3RhcnRzV2l0aChcIiR7XCIpICYmXG4gICAgICAgIHJhd1ZhcmlhYmxlVHlwZS5lbmRzV2l0aChcIn1cIikgJiZcbiAgICAgICAgIXJhd1ZhcmlhYmxlVHlwZS5pbmNsdWRlcyhcIlxcblwiKVxuICAgICAgKSB7XG4gICAgICAgIHZhcmlhYmxlVHlwZSA9IHJhd1ZhcmlhYmxlVHlwZS5zbGljZSgyLCAtMSk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICB2YXJpYWJsZVR5cGUgPSBcImFueVwiO1xuICAgICAgfVxuICAgIH1cblxuICAgIGNvbnN0IGl0ZW06IElucHV0ID0ge1xuICAgICAgbmFtZSxcbiAgICAgIHR5cGU6IHZhcmlhYmxlVHlwZSxcbiAgICAgIGRlc2NyaXB0aW9uOiB2YXJpYWJsZVtcImRlc2NyaXB0aW9uXCJdLFxuICAgICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLXByb3RvdHlwZS1idWlsdGluc1xuICAgICAgcmVxdWlyZWQ6IHZhcmlhYmxlLmhhc093blByb3BlcnR5KFwiZGVmYXVsdFwiKSA9PSBmYWxzZSxcbiAgICB9O1xuXG4gICAgaWYgKCFpdGVtLnJlcXVpcmVkKSB7XG4gICAgICBpdGVtW1wiZGVmYXVsdFwiXSA9IHZhcmlhYmxlW1wiZGVmYXVsdFwiXTtcbiAgICB9XG5cbiAgICByZXN1bHQucHVzaChpdGVtKTtcbiAgfVxuXG4gIHJldHVybiByZXN1bHQ7XG59O1xuXG5jb25zdCB0cmFuc2Zvcm1PdXRwdXRzID0gKG91dHB1dHM6IGFueSkgPT4ge1xuICBjb25zdCByZXN1bHQgPSBbXTtcblxuICBpZiAob3V0cHV0cykge1xuICAgIGZvciAoY29uc3QgbmFtZSBvZiBPYmplY3Qua2V5cyhvdXRwdXRzKSkge1xuICAgICAgY29uc3Qgb3V0cHV0ID0gdW53cmFwSWZBcnJheShvdXRwdXRzW25hbWVdKTtcblxuICAgICAgY29uc3QgaXRlbTogYW55ID0ge1xuICAgICAgICBuYW1lLFxuICAgICAgICBkZXNjcmlwdGlvbjogb3V0cHV0W1wiZGVzY3JpcHRpb25cIl0sXG4gICAgICB9O1xuXG4gICAgICByZXN1bHQucHVzaChpdGVtKTtcbiAgICB9XG4gIH1cblxuICByZXR1cm4gcmVzdWx0O1xufTtcblxuY29uc3QgaGFydmVzdE1vZHVsZVNjaGVtYSA9IGFzeW5jIChcbiAgd29ya2luZ0RpcmVjdG9yeTogc3RyaW5nLFxuICBtb2R1bGVzOiBzdHJpbmdbXSxcbik6IFByb21pc2U8UmVjb3JkPHN0cmluZywgYW55Pj4gPT4ge1xuICBjb25zdCBmaWxlTmFtZSA9IHBhdGguam9pbihcbiAgICB3b3JraW5nRGlyZWN0b3J5LFxuICAgIFwiLnRlcnJhZm9ybVwiLFxuICAgIFwibW9kdWxlc1wiLFxuICAgIFwibW9kdWxlcy5qc29uXCIsXG4gICk7XG4gIGNvbnN0IHJlc3VsdDogUmVjb3JkPHN0cmluZywgYW55PiA9IHt9O1xuXG4gIGlmICghZnMuZXhpc3RzU3luYyhmaWxlTmFtZSkpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoXG4gICAgICBgTW9kdWxlcyB3ZXJlIG5vdCBnZW5lcmF0ZWQgcHJvcGVybHkgLSBjb3VsZG4ndCBmaW5kICR7ZmlsZU5hbWV9YCxcbiAgICApO1xuICB9XG5cbiAgY29uc3QgbW9kdWxlSW5kZXggPSBKU09OLnBhcnNlKFxuICAgIGZzLnJlYWRGaWxlU3luYyhmaWxlTmFtZSwgXCJ1dGYtOFwiKSxcbiAgKSBhcyBNb2R1bGVJbmRleDtcblxuICBmb3IgKGNvbnN0IG1vZCBvZiBtb2R1bGVzKSB7XG4gICAgY29uc3QgbSA9IG1vZHVsZUluZGV4Lk1vZHVsZXMuZmluZCgob3RoZXIpID0+IG1vZCA9PT0gb3RoZXIuS2V5KTtcblxuICAgIGlmICghbSkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKGBDb3VsZG4ndCBmaW5kICR7bX1gKTtcbiAgICB9XG5cbiAgICBjb25zdCBwYXJzZWQgPSBhd2FpdCBjb252ZXJ0RmlsZXMocGF0aC5qb2luKHdvcmtpbmdEaXJlY3RvcnksIG0uRGlyKSk7XG5cbiAgICBpZiAoIXBhcnNlZCkge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKFxuICAgICAgICBgTW9kdWxlcyB3ZXJlIG5vdCBnZW5lcmF0ZWQgcHJvcGVybHkgLSBjb3VsZG4ndCBwYXJzZSAke20uRGlyfWAsXG4gICAgICApO1xuICAgIH1cblxuICAgIGNvbnN0IHNjaGVtYTogTW9kdWxlU2NoZW1hID0ge1xuICAgICAgaW5wdXRzOiB0cmFuc2Zvcm1WYXJpYWJsZXMocGFyc2VkLnZhcmlhYmxlKSxcbiAgICAgIG91dHB1dHM6IHRyYW5zZm9ybU91dHB1dHMocGFyc2VkLm91dHB1dCksXG4gICAgICBuYW1lOiBtb2QsXG4gICAgfTtcblxuICAgIHJlc3VsdFttb2RdID0gc2NoZW1hO1xuICB9XG5cbiAgcmV0dXJuIHJlc3VsdDtcbn07XG5cbmV4cG9ydCBpbnRlcmZhY2UgVGVycmFmb3JtQ29uZmlnIHtcbiAgcHJvdmlkZXI/OiB7IFtuYW1lOiBzdHJpbmddOiBSZWNvcmQ8c3RyaW5nLCBhbnk+IH07XG4gIHRlcnJhZm9ybToge1xuICAgIHJlcXVpcmVkX3Byb3ZpZGVycz86IHtcbiAgICAgIFtuYW1lOiBzdHJpbmddOiB7IHNvdXJjZT86IHN0cmluZzsgdmVyc2lvbj86IHN0cmluZyB9O1xuICAgIH07XG4gIH07XG4gIG1vZHVsZT86IHsgW25hbWU6IHN0cmluZ106IHsgc291cmNlOiBzdHJpbmc7IHZlcnNpb24/OiBzdHJpbmcgfSB9O1xufVxuXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gcmVhZFByb3ZpZGVyU2NoZW1hKFxuICB0YXJnZXQ6IENvbnN0cnVjdHNNYWtlclByb3ZpZGVyVGFyZ2V0LFxuKSB7XG4gIGNvbnN0IGNvbmZpZzogVGVycmFmb3JtQ29uZmlnID0ge1xuICAgIHByb3ZpZGVyOiB7fSxcbiAgICB0ZXJyYWZvcm06IHtcbiAgICAgIHJlcXVpcmVkX3Byb3ZpZGVyczoge30sXG4gICAgfSxcbiAgfTtcblxuICBjb25maWcucHJvdmlkZXIhW3RhcmdldC5uYW1lXSA9IHt9O1xuICBjb25maWcudGVycmFmb3JtLnJlcXVpcmVkX3Byb3ZpZGVycyFbdGFyZ2V0Lm5hbWVdID0ge1xuICAgIHZlcnNpb246IHRhcmdldC52ZXJzaW9uLFxuICAgIHNvdXJjZTogdGFyZ2V0LnNvdXJjZSxcbiAgfTtcblxuICBsZXQgcHJvdmlkZXJTY2hlbWE6IFByb3ZpZGVyU2NoZW1hID0geyBmb3JtYXRfdmVyc2lvbjogXCIwLjFcIiB9O1xuXG4gIGF3YWl0IHdpdGhUZW1wRGlyKFwiZmV0Y2hQcm92aWRlclNjaGVtYVwiLCBhc3luYyAoKSA9PiB7XG4gICAgY29uc3Qgb3V0ZGlyID0gcHJvY2Vzcy5jd2QoKTtcbiAgICBjb25zdCBmaWxlUGF0aCA9IHBhdGguam9pbihvdXRkaXIsIFwibWFpbi50Zi5qc29uXCIpO1xuICAgIGF3YWl0IGZzLndyaXRlRmlsZShmaWxlUGF0aCwgSlNPTi5zdHJpbmdpZnkoY29uZmlnKSk7XG5cbiAgICBhd2FpdCBleGVjKHRlcnJhZm9ybUJpbmFyeU5hbWUsIFtcImluaXRcIl0sIHsgY3dkOiBvdXRkaXIgfSk7XG4gICAgcHJvdmlkZXJTY2hlbWEgPSBKU09OLnBhcnNlKFxuICAgICAgYXdhaXQgZXhlYyh0ZXJyYWZvcm1CaW5hcnlOYW1lLCBbXCJwcm92aWRlcnNcIiwgXCJzY2hlbWFcIiwgXCItanNvblwiXSwge1xuICAgICAgICBjd2Q6IG91dGRpcixcbiAgICAgIH0pLFxuICAgICkgYXMgUHJvdmlkZXJTY2hlbWE7XG5cbiAgICBjb25zdCB2ZXJzaW9uU2NoZW1hID0gSlNPTi5wYXJzZShcbiAgICAgIGF3YWl0IGV4ZWModGVycmFmb3JtQmluYXJ5TmFtZSwgW1widmVyc2lvblwiLCBcIi1qc29uXCJdLCB7XG4gICAgICAgIGN3ZDogb3V0ZGlyLFxuICAgICAgfSksXG4gICAgKSBhcyBWZXJzaW9uU2NoZW1hO1xuXG4gICAgcHJvdmlkZXJTY2hlbWEucHJvdmlkZXJfdmVyc2lvbnMgPSB2ZXJzaW9uU2NoZW1hLnByb3ZpZGVyX3NlbGVjdGlvbnM7XG4gIH0pO1xuXG4gIHJldHVybiBzYW5pdGl6ZVByb3ZpZGVyU2NoZW1hKHByb3ZpZGVyU2NoZW1hKTtcbn1cblxuLy8gVGhlIHByb3ZpZGVycyBoYXZlIHNvbWUgcG90ZW50aWFsIGJ1Z3MgdGhhdCB3ZSB3YW50IHRvIHByby1hY3RpdmVseVxuLy8gZml4IGhlcmUgc28gdGhhdCB0aGUgcmVzdCBvZiB0aGUgY29kZSBjYW4gYXNzdW1lIGEgY29uc2lzdGVudCBzY2hlbWEuXG5leHBvcnQgZnVuY3Rpb24gc2FuaXRpemVQcm92aWRlclNjaGVtYShzY2hlbWE6IFByb3ZpZGVyU2NoZW1hKTogUHJvdmlkZXJTY2hlbWEge1xuICAvLyBNYWlubHkgc29tZSBhdHRyaWJ1dGVzIGFyZSBcImRvdWJsZWRcIiwgZS5nLiBbXCJsaXN0XCIsIFwic3RyaW5nXCIsIFwibGlzdFwiLCBcInN0cmluZ1wiXVxuICAvLyBpbnN0ZWFkIG9mIFtcImxpc3RcIiwgXCJzdHJpbmdcIl1cbiAgZnVuY3Rpb24gYXR0cmlidXRlRG91YmxpbmdGaXgoYXR0cmlidXRlOiBBdHRyaWJ1dGUpOiBBdHRyaWJ1dGUge1xuICAgIGlmIChpc05lc3RlZFR5cGVBdHRyaWJ1dGUoYXR0cmlidXRlKSB8fCAhQXJyYXkuaXNBcnJheShhdHRyaWJ1dGUudHlwZSkpIHtcbiAgICAgIHJldHVybiBhdHRyaWJ1dGU7XG4gICAgfVxuXG4gICAgY29uc3QgdHlwZSA9XG4gICAgICBhdHRyaWJ1dGUudHlwZS5sZW5ndGggPT09IDJcbiAgICAgICAgPyBhdHRyaWJ1dGUudHlwZVxuICAgICAgICA6IChhdHRyaWJ1dGUudHlwZSBhcyBzdHJpbmdbXSkuc2xpY2UoMCwgMik7IC8vIFRoZSB0eXBlcyB0ZWxsIHVzIHRoaXMgY2FuJ3QgaGFwcGVuLCByZWFsaXR5IGJlZ3MgdG8gZGlmZmVyXG5cbiAgICBhdHRyaWJ1dGUudHlwZSA9IHR5cGUgYXMgQXR0cmlidXRlVHlwZTtcbiAgICByZXR1cm4gYXR0cmlidXRlO1xuICB9XG5cbiAgLy8gTXV0YXRlcyBibG9jayB3aXRoIHRoZSBmaXhcbiAgZnVuY3Rpb24gc2FuaXRpemVCbG9jayhibG9jazogQmxvY2spIHtcbiAgICBPYmplY3QudmFsdWVzKGJsb2NrLmF0dHJpYnV0ZXMgfHwge30pLmZvckVhY2goYXR0cmlidXRlRG91YmxpbmdGaXgpO1xuICAgIE9iamVjdC52YWx1ZXMoYmxvY2suYmxvY2tfdHlwZXMgfHwge30pLmZvckVhY2goKGJsb2NrVHlwZSkgPT4ge1xuICAgICAgc2FuaXRpemVCbG9jayhibG9ja1R5cGUuYmxvY2spO1xuICAgIH0pO1xuICB9XG5cbiAgT2JqZWN0LnZhbHVlcyhzY2hlbWEucHJvdmlkZXJfc2NoZW1hcyB8fCB7fSkuZm9yRWFjaCgocHJvdmlkZXIpID0+IHtcbiAgICBjb25zdCBlbnRpdGllcyA9IFtcbiAgICAgIHByb3ZpZGVyLnByb3ZpZGVyLFxuICAgICAgLi4uT2JqZWN0LnZhbHVlcyhwcm92aWRlci5yZXNvdXJjZV9zY2hlbWFzIHx8IHt9KSxcbiAgICAgIC4uLk9iamVjdC52YWx1ZXMocHJvdmlkZXIuZGF0YV9zb3VyY2Vfc2NoZW1hcyB8fCB7fSksXG4gICAgXTtcblxuICAgIGVudGl0aWVzLmZvckVhY2goKGVudGl0eSkgPT4ge1xuICAgICAgc2FuaXRpemVCbG9jayhlbnRpdHkuYmxvY2spO1xuICAgIH0pO1xuICB9KTtcblxuICByZXR1cm4gc2NoZW1hO1xufVxuXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gcmVhZE1vZHVsZVNjaGVtYSh0YXJnZXQ6IENvbnN0cnVjdHNNYWtlck1vZHVsZVRhcmdldCkge1xuICBsZXQgbW9kdWxlU2NoZW1hOiBSZWNvcmQ8c3RyaW5nLCBNb2R1bGVTY2hlbWE+ID0ge307XG5cbiAgYXdhaXQgd2l0aFRlbXBEaXIoXCJmZXRjaFNjaGVtYVwiLCBhc3luYyAoKSA9PiB7XG4gICAgY29uc3QgY29uZmlnOiBUZXJyYWZvcm1Db25maWcgPSB7XG4gICAgICB0ZXJyYWZvcm06IHt9LFxuICAgIH07XG5cbiAgICBpZiAoIWNvbmZpZy5tb2R1bGUpIGNvbmZpZy5tb2R1bGUgPSB7fTtcbiAgICBsZXQgc291cmNlOiBzdHJpbmcgPSB0YXJnZXQuc291cmNlO1xuXG4gICAgY29uc3QgbG9jYWxTb3VyY2UgPSAodGFyZ2V0LmNvbnN0cmFpbnQgYXMgVGVycmFmb3JtTW9kdWxlQ29uc3RyYWludClcbiAgICAgIC5sb2NhbFNvdXJjZUFic29sdXRlUGF0aDtcbiAgICBpZiAobG9jYWxTb3VyY2UpIHtcbiAgICAgIC8vIGNyZWF0ZSByZWxhdGl2ZSBwYXRoIHRvIG1vZHVsZSBpbiB0aGUgdXNlciBwcm9qZWN0XG4gICAgICBzb3VyY2UgPSBwYXRoLnJlbGF0aXZlKHByb2Nlc3MuY3dkKCksIGxvY2FsU291cmNlKTtcbiAgICB9XG5cbiAgICBjb25maWcubW9kdWxlW3RhcmdldC5tb2R1bGVLZXldID0geyBzb3VyY2U6IHNvdXJjZSB9O1xuICAgIGlmICh0YXJnZXQudmVyc2lvbikge1xuICAgICAgY29uZmlnLm1vZHVsZVt0YXJnZXQubW9kdWxlS2V5XVtcInZlcnNpb25cIl0gPSB0YXJnZXQudmVyc2lvbjtcbiAgICB9XG5cbiAgICBjb25zdCBvdXRkaXIgPSBwcm9jZXNzLmN3ZCgpO1xuICAgIGNvbnN0IGZpbGVQYXRoID0gcGF0aC5qb2luKG91dGRpciwgXCJtYWluLnRmLmpzb25cIik7XG4gICAgYXdhaXQgZnMud3JpdGVGaWxlKGZpbGVQYXRoLCBKU09OLnN0cmluZ2lmeShjb25maWcpKTtcblxuICAgIGF3YWl0IGV4ZWModGVycmFmb3JtQmluYXJ5TmFtZSwgW1wiZ2V0XCJdLCB7IGN3ZDogb3V0ZGlyIH0pO1xuICAgIGlmIChjb25maWcubW9kdWxlKSB7XG4gICAgICBtb2R1bGVTY2hlbWEgPSBhd2FpdCBoYXJ2ZXN0TW9kdWxlU2NoZW1hKFxuICAgICAgICBvdXRkaXIsXG4gICAgICAgIE9iamVjdC5rZXlzKGNvbmZpZy5tb2R1bGUpLFxuICAgICAgKTtcbiAgICB9XG4gIH0pO1xuXG4gIHJldHVybiBtb2R1bGVTY2hlbWE7XG59XG4iXX0=
278
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicHJvdmlkZXItc2NoZW1hLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vc3JjL3Byb3ZpZGVyLXNjaGVtYS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztBQUFBLCtCQUErQjtBQUMvQixtQ0FBbUM7QUFDbkMsNkNBQStCO0FBQy9CLDJDQUE2QjtBQUU3Qiw4Q0FBK0M7QUFDL0MsNENBZXdCO0FBRXhCLE1BQU0sbUJBQW1CLEdBQUcsT0FBTyxDQUFDLEdBQUcsQ0FBQyxxQkFBcUIsSUFBSSxXQUFXLENBQUM7QUFFN0UsbUVBQW1FO0FBQ25FLHFFQUFxRTtBQUNyRSxzRUFBc0U7QUFDdEUsTUFBTSw2QkFBNkIsR0FBRztJQUNwQyxhQUFhO0lBQ2IsY0FBYztJQUNkLHNCQUFzQjtJQUN0QixrQkFBa0I7SUFDbEIsYUFBYTtJQUNiLFlBQVk7SUFDWixZQUFZO0lBQ1osaUJBQWlCO0NBQ2xCLENBQUM7QUFFRjs7Ozs7Ozs7Ozs7Ozs7Ozs7OztHQW1CRztBQUNJLEtBQUssVUFBVSxzQkFBc0IsQ0FDMUMsT0FBd0IsRUFDeEIsV0FBVyxHQUFHLENBQUMsRUFDZixXQUFXLEdBQUcsSUFBSSxFQUNsQixpQkFBaUIsR0FBRyxDQUFDOztJQUVyQixLQUFLLElBQUksT0FBTyxHQUFHLENBQUMsRUFBRSxPQUFPLElBQUksV0FBVyxFQUFFLE9BQU8sRUFBRSxFQUFFLENBQUM7UUFDeEQsSUFBSSxDQUFDO1lBQ0gsT0FBTyxNQUFNLElBQUEsY0FBSSxFQUFDLG1CQUFtQixFQUFFLENBQUMsTUFBTSxDQUFDLEVBQUUsT0FBTyxDQUFDLENBQUM7UUFDNUQsQ0FBQztRQUFDLE9BQU8sS0FBVSxFQUFFLENBQUM7WUFDcEIsTUFBTSxNQUFNLEdBQVcsTUFBQSxLQUFLLGFBQUwsS0FBSyx1QkFBTCxLQUFLLENBQUUsTUFBTSxtQ0FBSSxFQUFFLENBQUM7WUFDM0MsTUFBTSxTQUFTLEdBQUcsNkJBQTZCLENBQUMsSUFBSSxD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Q0MiLCJzb3VyY2VzQ29udGVudCI6WyIvLyBDb3B5cmlnaHQgKGMpIEhhc2hpQ29ycCwgSW5jXG4vLyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogTVBMLTIuMFxuaW1wb3J0ICogYXMgZnMgZnJvbSBcImZzLWV4dHJhXCI7XG5pbXBvcnQgKiBhcyBwYXRoIGZyb20gXCJwYXRoXCI7XG5cbmltcG9ydCB7IGNvbnZlcnRGaWxlcyB9IGZyb20gXCJAY2RrdG4vaGNsMmpzb25cIjtcbmltcG9ydCB7XG4gIEF0dHJpYnV0ZSxcbiAgQXR0cmlidXRlVHlwZSxcbiAgQmxvY2ssXG4gIENvbnN0cnVjdHNNYWtlck1vZHVsZVRhcmdldCxcbiAgQ29uc3RydWN0c01ha2VyUHJvdmlkZXJUYXJnZXQsXG4gIElucHV0LFxuICBNb2R1bGVJbmRleCxcbiAgTW9kdWxlU2NoZW1hLFxuICBQcm92aWRlclNjaGVtYSxcbiAgVGVycmFmb3JtTW9kdWxlQ29uc3RyYWludCxcbiAgVmVyc2lvblNjaGVtYSxcbiAgZXhlYyxcbiAgaXNOZXN0ZWRUeXBlQXR0cmlidXRlLFxuICB3aXRoVGVtcERpcixcbn0gZnJvbSBcIkBjZGt0bi9jb21tb25zXCI7XG5cbmNvbnN0IHRlcnJhZm9ybUJpbmFyeU5hbWUgPSBwcm9jZXNzLmVudi5URVJSQUZPUk1fQklOQVJZX05BTUUgfHwgXCJ0ZXJyYWZvcm1cIjtcblxuLy8gUHJvdmlkZXIgYmluYXJpZXMgYXJlIGRvd25sb2FkZWQgZnJvbSBHaXRIdWIgcmVsZWFzZSBDRE5zIGR1cmluZ1xuLy8gYHRlcnJhZm9ybSBpbml0YCwgd2hpY2ggaW50ZXJtaXR0ZW50bHkgcmV0dXJucyA1eHguIFJldHJ5IG9uIHRob3NlXG4vLyBzaWduYXR1cmVzIG9ubHkg4oCUIHJlYWwgY29uZmlnL3NjaGVtYSBlcnJvcnMgc2hvdWxkIHN0aWxsIGZhaWwgZmFzdC5cbmNvbnN0IFRSQU5TSUVOVF9JTklUX0VSUk9SX1BBVFRFUk5TID0gW1xuICAvXFxiNTBbMjM0XVxcYi8sXG4gIC9CYWQgR2F0ZXdheS9pLFxuICAvU2VydmljZSBVbmF2YWlsYWJsZS9pLFxuICAvR2F0ZXdheSBUaW1lb3V0L2ksXG4gIC9FQ09OTlJFU0VUL2ksXG4gIC9FVElNRURPVVQvaSxcbiAgL0VBSV9BR0FJTi9pLFxuICAvdW5leHBlY3RlZCBFT0YvaSxcbl07XG5cbi8qKlxuICogUnVucyBgdGVycmFmb3JtIGluaXRgIGFuZCByZXRyaWVzIG9uIHRyYW5zaWVudCBIVFRQL25ldHdvcmsgZmFpbHVyZXMuXG4gKlxuICogUHJvdmlkZXIgYmluYXJpZXMgYXJlIHB1bGxlZCBmcm9tIEdpdEh1YidzIHJlbGVhc2UgQ0ROLCB3aGljaFxuICogaW50ZXJtaXR0ZW50bHkgcmV0dXJucyA1eHguIFRoZSByZXRyeSBvbmx5IGZpcmVzIHdoZW4gc3RkZXJyIG1hdGNoZXMgYVxuICoga25vd24gdHJhbnNpZW50IHBhdHRlcm4g4oCUIHJlYWwgZXJyb3JzIChiYWQgdmVyc2lvbiwgc2NoZW1hIHBhcnNlLCBldGMuKVxuICogc3RpbGwgZmFpbCBvbiB0aGUgZmlyc3QgYXR0ZW1wdC5cbiAqXG4gKiBAcGFyYW0gb3B0aW9ucyAtIHNwYXduIG9wdGlvbnMgZm9yd2FyZGVkIHRvIGBleGVjYCAoYGN3ZGAgaXMgcmVxdWlyZWQgc29cbiAqICAgYHRlcnJhZm9ybSBpbml0YCBydW5zIGluc2lkZSB0aGUgdGVtcCBkaXIgaG9sZGluZyBgbWFpbi50Zi5qc29uYClcbiAqIEBwYXJhbSBtYXhBdHRlbXB0cyAtIHRvdGFsIGF0dGVtcHRzIGluY2x1ZGluZyB0aGUgaW5pdGlhbCBjYWxsOyB0aGUgbnVtYmVyXG4gKiAgIG9mIHJldHJpZXMgaXMgYG1heEF0dGVtcHRzIC0gMWAuIERlZmF1bHRzIHRvIDMgKDEgaW5pdGlhbCArIDIgcmV0cmllcylcbiAqIEBwYXJhbSBiYXNlRGVsYXlNcyAtIGRlbGF5IGJlZm9yZSB0aGUgZmlyc3QgcmV0cnkuIFRlc3RzIHBhc3MgYDBgIHRvIHNraXBcbiAqICAgd2FpdHMuIERlZmF1bHRzIHRvIDEwMDBtc1xuICogQHBhcmFtIGJhY2tvZmZNdWx0aXBsaWVyIC0gZmFjdG9yIGFwcGxpZWQgdG8gdGhlIGRlbGF5IG9uIGVhY2ggc3Vic2VxdWVudFxuICogICByZXRyeSAoc28gcmV0cmllcyB3YWl0IGBiYXNlRGVsYXlNcyAqIG11bHRpcGxpZXJeKGF0dGVtcHQtMSlgKS4gRGVmYXVsdHNcbiAqICAgdG8gMiAoMXMg4oaSIDJzIOKGkiA0cyDigKYpXG4gKiBAcmV0dXJucyBzdGRvdXQgZnJvbSB0aGUgc3VjY2Vzc2Z1bCBgdGVycmFmb3JtIGluaXRgIGludm9jYXRpb25cbiAqIEBpbnRlcm5hbCBleHBvc2VkIGZvciB0ZXN0aW5nXG4gKi9cbmV4cG9ydCBhc3luYyBmdW5jdGlvbiB0ZXJyYWZvcm1Jbml0V2l0aFJldHJ5KFxuICBvcHRpb25zOiB7IGN3ZDogc3RyaW5nIH0sXG4gIG1heEF0dGVtcHRzID0gMyxcbiAgYmFzZURlbGF5TXMgPSAxMDAwLFxuICBiYWNrb2ZmTXVsdGlwbGllciA9IDIsXG4pOiBQcm9taXNlPHN0cmluZz4ge1xuICBmb3IgKGxldCBhdHRlbXB0ID0gMTsgYXR0ZW1wdCA8PSBtYXhBdHRlbXB0czsgYXR0ZW1wdCsrKSB7XG4gICAgdHJ5IHtcbiAgICAgIHJldHVybiBhd2FpdCBleGVjKHRlcnJhZm9ybUJpbmFyeU5hbWUsIFtcImluaXRcIl0sIG9wdGlvbnMpO1xuICAgIH0gY2F0Y2ggKGVycm9yOiBhbnkpIHtcbiAgICAgIGNvbnN0IHN0ZGVycjogc3RyaW5nID0gZXJyb3I/LnN0ZGVyciA/PyBcIlwiO1xuICAgICAgY29uc3QgdHJhbnNpZW50ID0gVFJBTlNJRU5UX0lOSVRfRVJST1JfUEFUVEVSTlMuc29tZSgocCkgPT5cbiAgICAgICAgcC50ZXN0KHN0ZGVyciksXG4gICAgICApO1xuICAgICAgaWYgKCF0cmFuc2llbnQgfHwgYXR0ZW1wdCA9PT0gbWF4QXR0ZW1wdHMpIHtcbiAgICAgICAgdGhyb3cgZXJyb3I7XG4gICAgICB9XG4gICAgICBjb25zdCBkZWxheU1zID0gYmFzZURlbGF5TXMgKiBiYWNrb2ZmTXVsdGlwbGllciAqKiAoYXR0ZW1wdCAtIDEpO1xuICAgICAgY29uc29sZS5lcnJvcihcbiAgICAgICAgYHRlcnJhZm9ybSBpbml0IGZhaWxlZCB3aXRoIGEgdHJhbnNpZW50IGVycm9yLCByZXRyeWluZyBpbiAke2RlbGF5TXN9bXMgKGF0dGVtcHQgJHthdHRlbXB0fS8ke21heEF0dGVtcHRzIC0gMX0pYCxcbiAgICAgICk7XG4gICAgICBhd2FpdCBuZXcgUHJvbWlzZSgocmVzb2x2ZSkgPT4gc2V0VGltZW91dChyZXNvbHZlLCBkZWxheU1zKSk7XG4gICAgfVxuICB9XG4gIHRocm93IG5ldyBFcnJvcihcInVucmVhY2hhYmxlXCIpO1xufVxuXG4vKipcbiAqIEZ1bGx5IFF1YWxpZmllZCBwcm92aWRlciBuYW1lIGluIHRoZSBmb3JtYXQ6XG4gKiBsaWtlIGUuZy4gcmVnaXN0cnkudGVycmFmb3JtLmlvL2hhc2hpY29ycC9hd3NcbiAqL1xuZXhwb3J0IHR5cGUgRlFQTiA9IHN0cmluZyAmIHsgX190eXBlOiBcIkZ1bGx5UXVhbGlmaWVkUHJvdmlkZXJOYW1lXCIgfTtcbmV4cG9ydCB0eXBlIFByb3ZpZGVySG9zdG5hbWUgPSBzdHJpbmcgJiB7IF9fdHlwZTogXCJQcm92aWRlckhvc3RuYW1lXCIgfTtcbmV4cG9ydCB0eXBlIFByb3ZpZGVyTmFtZXNwYWNlID0gc3RyaW5nICYgeyBfX3R5cGU6IFwiUHJvdmlkZXJOYW1lc3BhY2VcIiB9O1xuZXhwb3J0IHR5cGUgUHJvdmlkZXJOYW1lID0gc3RyaW5nICYgeyBfX3R5cGU6IFwiUHJvdmlkZXJOYW1lXCIgfTtcblxuZXhwb3J0IGNvbnN0IHBhcnNlRlFQTiA9IChmOiBGUVBOKSA9PiB7XG4gIGNvbnN0IFtob3N0bmFtZSwgbmFtZXNwYWNlLCBuYW1lXSA9IGYuc3BsaXQoXCIvXCIpO1xuICBpZiAoIW5hbWUpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoYGNhbid0IGhhbmRsZSAke2Z9YCk7XG4gIH1cbiAgcmV0dXJuIHsgaG9zdG5hbWUsIG5hbWVzcGFjZSwgbmFtZSB9IGFzIHtcbiAgICBob3N0bmFtZTogUHJvdmlkZXJIb3N0bmFtZTtcbiAgICBuYW1lc3BhY2U6IFByb3ZpZGVyTmFtZXNwYWNlO1xuICAgIG5hbWU6IFByb3ZpZGVyTmFtZTtcbiAgfTtcbn07XG5cbmNvbnN0IHVud3JhcElmQXJyYXkgPSA8VD4oaXRlbTogVCB8IFRbXSk6IFQgPT5cbiAgQXJyYXkuaXNBcnJheShpdGVtKSA/IGl0ZW1bMF0gOiBpdGVtO1xuXG5jb25zdCB0cmFuc2Zvcm1WYXJpYWJsZXMgPSAodmFyaWFibGVzOiBhbnkpID0+IHtcbiAgY29uc3QgcmVzdWx0OiBJbnB1dFtdID0gW107XG5cbiAgaWYgKCF2YXJpYWJsZXMpIHJldHVybiByZXN1bHQ7XG5cbiAgZm9yIChjb25zdCBuYW1lIG9mIE9iamVjdC5rZXlzKHZhcmlhYmxlcykpIHtcbiAgICBjb25zdCB2YXJpYWJsZSA9IHVud3JhcElmQXJyYXkodmFyaWFibGVzW25hbWVdKTtcbiAgICBsZXQgdmFyaWFibGVUeXBlOiBzdHJpbmc7XG5cbiAgICBpZiAoXG4gICAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbm8tcHJvdG90eXBlLWJ1aWx0aW5zXG4gICAgICB2YXJpYWJsZS5oYXNPd25Qcm9wZXJ0eShcInR5cGVcIikgPT0gZmFsc2UgJiZcbiAgICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBuby1wcm90b3R5cGUtYnVpbHRpbnNcbiAgICAgIHZhcmlhYmxlLmhhc093blByb3BlcnR5KFwiZGVmYXVsdFwiKSA9PSB0cnVlXG4gICAgKSB7XG4gICAgICBzd2l0Y2ggKHR5cGVvZiB2YXJpYWJsZVtcImRlZmF1bHRcIl0pIHtcbiAgICAgICAgY2FzZSBcImJvb2xlYW5cIjpcbiAgICAgICAgICB2YXJpYWJsZVR5cGUgPSBcImJvb2xcIjtcbiAgICAgICAgICBicmVhaztcbiAgICAgICAgY2FzZSBcIm51bWJlclwiOlxuICAgICAgICAgIHZhcmlhYmxlVHlwZSA9IFwibnVtYmVyXCI7XG4gICAgICAgICAgYnJlYWs7XG4gICAgICAgIGRlZmF1bHQ6XG4gICAgICAgICAgdmFyaWFibGVUeXBlID0gXCJhbnlcIjtcbiAgICAgIH1cbiAgICB9IGVsc2Uge1xuICAgICAgY29uc3QgcmF3VmFyaWFibGVUeXBlID0gdmFyaWFibGVbXCJ0eXBlXCJdO1xuICAgICAgaWYgKFxuICAgICAgICB0eXBlb2YgcmF3VmFyaWFibGVUeXBlID09PSBcInN0cmluZ1wiICYmXG4gICAgICAgIHJhd1ZhcmlhYmxlVHlwZS5zdGFydHNXaXRoKFwiJHtcIikgJiZcbiAgICAgICAgcmF3VmFyaWFibGVUeXBlLmVuZHNXaXRoKFwifVwiKSAmJlxuICAgICAgICAhcmF3VmFyaWFibGVUeXBlLmluY2x1ZGVzKFwiXFxuXCIpXG4gICAgICApIHtcbiAgICAgICAgdmFyaWFibGVUeXBlID0gcmF3VmFyaWFibGVUeXBlLnNsaWNlKDIsIC0xKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHZhcmlhYmxlVHlwZSA9IFwiYW55XCI7XG4gICAgICB9XG4gICAgfVxuXG4gICAgY29uc3QgaXRlbTogSW5wdXQgPSB7XG4gICAgICBuYW1lLFxuICAgICAgdHlwZTogdmFyaWFibGVUeXBlLFxuICAgICAgZGVzY3JpcHRpb246IHZhcmlhYmxlW1wiZGVzY3JpcHRpb25cIl0sXG4gICAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbm8tcHJvdG90eXBlLWJ1aWx0aW5zXG4gICAgICByZXF1aXJlZDogdmFyaWFibGUuaGFzT3duUHJvcGVydHkoXCJkZWZhdWx0XCIpID09IGZhbHNlLFxuICAgIH07XG5cbiAgICBpZiAoIWl0ZW0ucmVxdWlyZWQpIHtcbiAgICAgIGl0ZW1bXCJkZWZhdWx0XCJdID0gdmFyaWFibGVbXCJkZWZhdWx0XCJdO1xuICAgIH1cblxuICAgIHJlc3VsdC5wdXNoKGl0ZW0pO1xuICB9XG5cbiAgcmV0dXJuIHJlc3VsdDtcbn07XG5cbmNvbnN0IHRyYW5zZm9ybU91dHB1dHMgPSAob3V0cHV0czogYW55KSA9PiB7XG4gIGNvbnN0IHJlc3VsdCA9IFtdO1xuXG4gIGlmIChvdXRwdXRzKSB7XG4gICAgZm9yIChjb25zdCBuYW1lIG9mIE9iamVjdC5rZXlzKG91dHB1dHMpKSB7XG4gICAgICBjb25zdCBvdXRwdXQgPSB1bndyYXBJZkFycmF5KG91dHB1dHNbbmFtZV0pO1xuXG4gICAgICBjb25zdCBpdGVtOiBhbnkgPSB7XG4gICAgICAgIG5hbWUsXG4gICAgICAgIGRlc2NyaXB0aW9uOiBvdXRwdXRbXCJkZXNjcmlwdGlvblwiXSxcbiAgICAgIH07XG5cbiAgICAgIHJlc3VsdC5wdXNoKGl0ZW0pO1xuICAgIH1cbiAgfVxuXG4gIHJldHVybiByZXN1bHQ7XG59O1xuXG5jb25zdCBoYXJ2ZXN0TW9kdWxlU2NoZW1hID0gYXN5bmMgKFxuICB3b3JraW5nRGlyZWN0b3J5OiBzdHJpbmcsXG4gIG1vZHVsZXM6IHN0cmluZ1tdLFxuKTogUHJvbWlzZTxSZWNvcmQ8c3RyaW5nLCBhbnk+PiA9PiB7XG4gIGNvbnN0IGZpbGVOYW1lID0gcGF0aC5qb2luKFxuICAgIHdvcmtpbmdEaXJlY3RvcnksXG4gICAgXCIudGVycmFmb3JtXCIsXG4gICAgXCJtb2R1bGVzXCIsXG4gICAgXCJtb2R1bGVzLmpzb25cIixcbiAgKTtcbiAgY29uc3QgcmVzdWx0OiBSZWNvcmQ8c3RyaW5nLCBhbnk+ID0ge307XG5cbiAgaWYgKCFmcy5leGlzdHNTeW5jKGZpbGVOYW1lKSkge1xuICAgIHRocm93IG5ldyBFcnJvcihcbiAgICAgIGBNb2R1bGVzIHdlcmUgbm90IGdlbmVyYXRlZCBwcm9wZXJseSAtIGNvdWxkbid0IGZpbmQgJHtmaWxlTmFtZX1gLFxuICAgICk7XG4gIH1cblxuICBjb25zdCBtb2R1bGVJbmRleCA9IEpTT04ucGFyc2UoXG4gICAgZnMucmVhZEZpbGVTeW5jKGZpbGVOYW1lLCBcInV0Zi04XCIpLFxuICApIGFzIE1vZHVsZUluZGV4O1xuXG4gIGZvciAoY29uc3QgbW9kIG9mIG1vZHVsZXMpIHtcbiAgICBjb25zdCBtID0gbW9kdWxlSW5kZXguTW9kdWxlcy5maW5kKChvdGhlcikgPT4gbW9kID09PSBvdGhlci5LZXkpO1xuXG4gICAgaWYgKCFtKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoYENvdWxkbid0IGZpbmQgJHttfWApO1xuICAgIH1cblxuICAgIGNvbnN0IHBhcnNlZCA9IGF3YWl0IGNvbnZlcnRGaWxlcyhwYXRoLmpvaW4od29ya2luZ0RpcmVjdG9yeSwgbS5EaXIpKTtcblxuICAgIGlmICghcGFyc2VkKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoXG4gICAgICAgIGBNb2R1bGVzIHdlcmUgbm90IGdlbmVyYXRlZCBwcm9wZXJseSAtIGNvdWxkbid0IHBhcnNlICR7bS5EaXJ9YCxcbiAgICAgICk7XG4gICAgfVxuXG4gICAgY29uc3Qgc2NoZW1hOiBNb2R1bGVTY2hlbWEgPSB7XG4gICAgICBpbnB1dHM6IHRyYW5zZm9ybVZhcmlhYmxlcyhwYXJzZWQudmFyaWFibGUpLFxuICAgICAgb3V0cHV0czogdHJhbnNmb3JtT3V0cHV0cyhwYXJzZWQub3V0cHV0KSxcbiAgICAgIG5hbWU6IG1vZCxcbiAgICB9O1xuXG4gICAgcmVzdWx0W21vZF0gPSBzY2hlbWE7XG4gIH1cblxuICByZXR1cm4gcmVzdWx0O1xufTtcblxuZXhwb3J0IGludGVyZmFjZSBUZXJyYWZvcm1Db25maWcge1xuICBwcm92aWRlcj86IHsgW25hbWU6IHN0cmluZ106IFJlY29yZDxzdHJpbmcsIGFueT4gfTtcbiAgdGVycmFmb3JtOiB7XG4gICAgcmVxdWlyZWRfcHJvdmlkZXJzPzoge1xuICAgICAgW25hbWU6IHN0cmluZ106IHsgc291cmNlPzogc3RyaW5nOyB2ZXJzaW9uPzogc3RyaW5nIH07XG4gICAgfTtcbiAgfTtcbiAgbW9kdWxlPzogeyBbbmFtZTogc3RyaW5nXTogeyBzb3VyY2U6IHN0cmluZzsgdmVyc2lvbj86IHN0cmluZyB9IH07XG59XG5cbmV4cG9ydCBhc3luYyBmdW5jdGlvbiByZWFkUHJvdmlkZXJTY2hlbWEoXG4gIHRhcmdldDogQ29uc3RydWN0c01ha2VyUHJvdmlkZXJUYXJnZXQsXG4pIHtcbiAgY29uc3QgY29uZmlnOiBUZXJyYWZvcm1Db25maWcgPSB7XG4gICAgcHJvdmlkZXI6IHt9LFxuICAgIHRlcnJhZm9ybToge1xuICAgICAgcmVxdWlyZWRfcHJvdmlkZXJzOiB7fSxcbiAgICB9LFxuICB9O1xuXG4gIGNvbmZpZy5wcm92aWRlciFbdGFyZ2V0Lm5hbWVdID0ge307XG4gIGNvbmZpZy50ZXJyYWZvcm0ucmVxdWlyZWRfcHJvdmlkZXJzIVt0YXJnZXQubmFtZV0gPSB7XG4gICAgdmVyc2lvbjogdGFyZ2V0LnZlcnNpb24sXG4gICAgc291cmNlOiB0YXJnZXQuc291cmNlLFxuICB9O1xuXG4gIGxldCBwcm92aWRlclNjaGVtYTogUHJvdmlkZXJTY2hlbWEgPSB7IGZvcm1hdF92ZXJzaW9uOiBcIjAuMVwiIH07XG5cbiAgYXdhaXQgd2l0aFRlbXBEaXIoXCJmZXRjaFByb3ZpZGVyU2NoZW1hXCIsIGFzeW5jICgpID0+IHtcbiAgICBjb25zdCBvdXRkaXIgPSBwcm9jZXNzLmN3ZCgpO1xuICAgIGNvbnN0IGZpbGVQYXRoID0gcGF0aC5qb2luKG91dGRpciwgXCJtYWluLnRmLmpzb25cIik7XG4gICAgYXdhaXQgZnMud3JpdGVGaWxlKGZpbGVQYXRoLCBKU09OLnN0cmluZ2lmeShjb25maWcpKTtcblxuICAgIGF3YWl0IHRlcnJhZm9ybUluaXRXaXRoUmV0cnkoeyBjd2Q6IG91dGRpciB9KTtcbiAgICBwcm92aWRlclNjaGVtYSA9IEpTT04ucGFyc2UoXG4gICAgICBhd2FpdCBleGVjKHRlcnJhZm9ybUJpbmFyeU5hbWUsIFtcInByb3ZpZGVyc1wiLCBcInNjaGVtYVwiLCBcIi1qc29uXCJdLCB7XG4gICAgICAgIGN3ZDogb3V0ZGlyLFxuICAgICAgfSksXG4gICAgKSBhcyBQcm92aWRlclNjaGVtYTtcblxuICAgIGNvbnN0IHZlcnNpb25TY2hlbWEgPSBKU09OLnBhcnNlKFxuICAgICAgYXdhaXQgZXhlYyh0ZXJyYWZvcm1CaW5hcnlOYW1lLCBbXCJ2ZXJzaW9uXCIsIFwiLWpzb25cIl0sIHtcbiAgICAgICAgY3dkOiBvdXRkaXIsXG4gICAgICB9KSxcbiAgICApIGFzIFZlcnNpb25TY2hlbWE7XG5cbiAgICBwcm92aWRlclNjaGVtYS5wcm92aWRlcl92ZXJzaW9ucyA9IHZlcnNpb25TY2hlbWEucHJvdmlkZXJfc2VsZWN0aW9ucztcbiAgfSk7XG5cbiAgcmV0dXJuIHNhbml0aXplUHJvdmlkZXJTY2hlbWEocHJvdmlkZXJTY2hlbWEpO1xufVxuXG4vLyBUaGUgcHJvdmlkZXJzIGhhdmUgc29tZSBwb3RlbnRpYWwgYnVncyB0aGF0IHdlIHdhbnQgdG8gcHJvLWFjdGl2ZWx5XG4vLyBmaXggaGVyZSBzbyB0aGF0IHRoZSByZXN0IG9mIHRoZSBjb2RlIGNhbiBhc3N1bWUgYSBjb25zaXN0ZW50IHNjaGVtYS5cbmV4cG9ydCBmdW5jdGlvbiBzYW5pdGl6ZVByb3ZpZGVyU2NoZW1hKHNjaGVtYTogUHJvdmlkZXJTY2hlbWEpOiBQcm92aWRlclNjaGVtYSB7XG4gIC8vIE1haW5seSBzb21lIGF0dHJpYnV0ZXMgYXJlIFwiZG91YmxlZFwiLCBlLmcuIFtcImxpc3RcIiwgXCJzdHJpbmdcIiwgXCJsaXN0XCIsIFwic3RyaW5nXCJdXG4gIC8vIGluc3RlYWQgb2YgW1wibGlzdFwiLCBcInN0cmluZ1wiXVxuICBmdW5jdGlvbiBhdHRyaWJ1dGVEb3VibGluZ0ZpeChhdHRyaWJ1dGU6IEF0dHJpYnV0ZSk6IEF0dHJpYnV0ZSB7XG4gICAgaWYgKGlzTmVzdGVkVHlwZUF0dHJpYnV0ZShhdHRyaWJ1dGUpIHx8ICFBcnJheS5pc0FycmF5KGF0dHJpYnV0ZS50eXBlKSkge1xuICAgICAgcmV0dXJuIGF0dHJpYnV0ZTtcbiAgICB9XG5cbiAgICBjb25zdCB0eXBlID1cbiAgICAgIGF0dHJpYnV0ZS50eXBlLmxlbmd0aCA9PT0gMlxuICAgICAgICA/IGF0dHJpYnV0ZS50eXBlXG4gICAgICAgIDogKGF0dHJpYnV0ZS50eXBlIGFzIHN0cmluZ1tdKS5zbGljZSgwLCAyKTsgLy8gVGhlIHR5cGVzIHRlbGwgdXMgdGhpcyBjYW4ndCBoYXBwZW4sIHJlYWxpdHkgYmVncyB0byBkaWZmZXJcblxuICAgIGF0dHJpYnV0ZS50eXBlID0gdHlwZSBhcyBBdHRyaWJ1dGVUeXBlO1xuICAgIHJldHVybiBhdHRyaWJ1dGU7XG4gIH1cblxuICAvLyBNdXRhdGVzIGJsb2NrIHdpdGggdGhlIGZpeFxuICBmdW5jdGlvbiBzYW5pdGl6ZUJsb2NrKGJsb2NrOiBCbG9jaykge1xuICAgIE9iamVjdC52YWx1ZXMoYmxvY2suYXR0cmlidXRlcyB8fCB7fSkuZm9yRWFjaChhdHRyaWJ1dGVEb3VibGluZ0ZpeCk7XG4gICAgT2JqZWN0LnZhbHVlcyhibG9jay5ibG9ja190eXBlcyB8fCB7fSkuZm9yRWFjaCgoYmxvY2tUeXBlKSA9PiB7XG4gICAgICBzYW5pdGl6ZUJsb2NrKGJsb2NrVHlwZS5ibG9jayk7XG4gICAgfSk7XG4gIH1cblxuICBPYmplY3QudmFsdWVzKHNjaGVtYS5wcm92aWRlcl9zY2hlbWFzIHx8IHt9KS5mb3JFYWNoKChwcm92aWRlcikgPT4ge1xuICAgIGNvbnN0IGVudGl0aWVzID0gW1xuICAgICAgcHJvdmlkZXIucHJvdmlkZXIsXG4gICAgICAuLi5PYmplY3QudmFsdWVzKHByb3ZpZGVyLnJlc291cmNlX3NjaGVtYXMgfHwge30pLFxuICAgICAgLi4uT2JqZWN0LnZhbHVlcyhwcm92aWRlci5kYXRhX3NvdXJjZV9zY2hlbWFzIHx8IHt9KSxcbiAgICBdO1xuXG4gICAgZW50aXRpZXMuZm9yRWFjaCgoZW50aXR5KSA9PiB7XG4gICAgICBzYW5pdGl6ZUJsb2NrKGVudGl0eS5ibG9jayk7XG4gICAgfSk7XG4gIH0pO1xuXG4gIHJldHVybiBzY2hlbWE7XG59XG5cbmV4cG9ydCBhc3luYyBmdW5jdGlvbiByZWFkTW9kdWxlU2NoZW1hKHRhcmdldDogQ29uc3RydWN0c01ha2VyTW9kdWxlVGFyZ2V0KSB7XG4gIGxldCBtb2R1bGVTY2hlbWE6IFJlY29yZDxzdHJpbmcsIE1vZHVsZVNjaGVtYT4gPSB7fTtcblxuICBhd2FpdCB3aXRoVGVtcERpcihcImZldGNoU2NoZW1hXCIsIGFzeW5jICgpID0+IHtcbiAgICBjb25zdCBjb25maWc6IFRlcnJhZm9ybUNvbmZpZyA9IHtcbiAgICAgIHRlcnJhZm9ybToge30sXG4gICAgfTtcblxuICAgIGlmICghY29uZmlnLm1vZHVsZSkgY29uZmlnLm1vZHVsZSA9IHt9O1xuICAgIGxldCBzb3VyY2U6IHN0cmluZyA9IHRhcmdldC5zb3VyY2U7XG5cbiAgICBjb25zdCBsb2NhbFNvdXJjZSA9ICh0YXJnZXQuY29uc3RyYWludCBhcyBUZXJyYWZvcm1Nb2R1bGVDb25zdHJhaW50KVxuICAgICAgLmxvY2FsU291cmNlQWJzb2x1dGVQYXRoO1xuICAgIGlmIChsb2NhbFNvdXJjZSkge1xuICAgICAgLy8gY3JlYXRlIHJlbGF0aXZlIHBhdGggdG8gbW9kdWxlIGluIHRoZSB1c2VyIHByb2plY3RcbiAgICAgIHNvdXJjZSA9IHBhdGgucmVsYXRpdmUocHJvY2Vzcy5jd2QoKSwgbG9jYWxTb3VyY2UpO1xuICAgIH1cblxuICAgIGNvbmZpZy5tb2R1bGVbdGFyZ2V0Lm1vZHVsZUtleV0gPSB7IHNvdXJjZTogc291cmNlIH07XG4gICAgaWYgKHRhcmdldC52ZXJzaW9uKSB7XG4gICAgICBjb25maWcubW9kdWxlW3RhcmdldC5tb2R1bGVLZXldW1widmVyc2lvblwiXSA9IHRhcmdldC52ZXJzaW9uO1xuICAgIH1cblxuICAgIGNvbnN0IG91dGRpciA9IHByb2Nlc3MuY3dkKCk7XG4gICAgY29uc3QgZmlsZVBhdGggPSBwYXRoLmpvaW4ob3V0ZGlyLCBcIm1haW4udGYuanNvblwiKTtcbiAgICBhd2FpdCBmcy53cml0ZUZpbGUoZmlsZVBhdGgsIEpTT04uc3RyaW5naWZ5KGNvbmZpZykpO1xuXG4gICAgYXdhaXQgZXhlYyh0ZXJyYWZvcm1CaW5hcnlOYW1lLCBbXCJnZXRcIl0sIHsgY3dkOiBvdXRkaXIgfSk7XG4gICAgaWYgKGNvbmZpZy5tb2R1bGUpIHtcbiAgICAgIG1vZHVsZVNjaGVtYSA9IGF3YWl0IGhhcnZlc3RNb2R1bGVTY2hlbWEoXG4gICAgICAgIG91dGRpcixcbiAgICAgICAgT2JqZWN0LmtleXMoY29uZmlnLm1vZHVsZSksXG4gICAgICApO1xuICAgIH1cbiAgfSk7XG5cbiAgcmV0dXJuIG1vZHVsZVNjaGVtYTtcbn1cbiJdfQ==
package/eslint.config.mjs CHANGED
@@ -3,77 +3,4 @@
3
3
  * SPDX-License-Identifier: MPL-2.0
4
4
  */
5
5
 
6
- import { fixupConfigRules } from "@eslint/compat";
7
- import eslint from "@eslint/js";
8
- import tseslint from "typescript-eslint";
9
- import tsParser from "@typescript-eslint/parser";
10
- import react from "eslint-plugin-react";
11
- import prettierConfig from "eslint-plugin-prettier/recommended";
12
- import path from "node:path";
13
- import { fileURLToPath } from "node:url";
14
- import js from "@eslint/js";
15
- import { FlatCompat } from "@eslint/eslintrc";
16
-
17
- const __filename = fileURLToPath(import.meta.url);
18
- const __dirname = path.dirname(__filename);
19
- const compat = new FlatCompat({
20
- baseDirectory: __dirname,
21
- recommendedConfig: js.configs.recommended,
22
- allConfig: js.configs.all,
23
- });
24
-
25
- export default [
26
- {
27
- ignores: [
28
- "**/node_modules",
29
- "**/dist",
30
- "**/coverage",
31
- "**/*.d.ts",
32
- "**/*.js",
33
- "**/*.mjs",
34
- ],
35
- },
36
- ...tseslint.config(eslint.configs.recommended, tseslint.configs.recommended),
37
- {
38
- settings: {
39
- react: {
40
- version: "detect",
41
- },
42
- },
43
- },
44
- react.configs.flat.recommended,
45
- ...fixupConfigRules(compat.extends("plugin:react-hooks/recommended")).map(
46
- (config) => ({
47
- ...config,
48
- files: ["**/*.ts", "**/*.tsx"],
49
- }),
50
- ),
51
- {
52
- files: ["**/*.ts", "**/*.tsx"],
53
-
54
- languageOptions: {
55
- parser: tsParser,
56
- parserOptions: {
57
- tsconfigRootDir: import.meta.dirname,
58
- },
59
- },
60
-
61
- rules: {
62
- "@typescript-eslint/no-explicit-any": 0,
63
- "@typescript-eslint/explicit-function-return-type": 0,
64
- "@typescript-eslint/no-use-before-define": 0,
65
- "@typescript-eslint/explicit-module-boundary-types": 0,
66
- "@typescript-eslint/no-var-requires": 0,
67
- "react/no-unescaped-entities": 0,
68
- "no-sequences": "error",
69
-
70
- "no-irregular-whitespace": [
71
- "error",
72
- {
73
- skipTemplates: true,
74
- },
75
- ],
76
- },
77
- },
78
- prettierConfig,
79
- ];
6
+ export { default } from "../../../eslint.config.mjs";
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@cdktn/provider-schema",
3
- "version": "0.23.0-pre.39",
3
+ "version": "0.23.0-pre.40",
4
4
  "publishConfig": {
5
5
  "access": "public"
6
6
  },
@@ -40,30 +40,22 @@
40
40
  ],
41
41
  "license": "MPL-2.0",
42
42
  "dependencies": {
43
- "@cdktn/commons": "0.23.0-pre.39",
44
- "@cdktn/hcl2json": "0.23.0-pre.39",
43
+ "@cdktn/commons": "0.23.0-pre.40",
44
+ "@cdktn/hcl2json": "0.23.0-pre.40",
45
45
  "deepmerge": "4.3.1",
46
46
  "fs-extra": "11.3.4"
47
47
  },
48
48
  "devDependencies": {
49
- "@eslint/compat": "^1.4.1",
50
- "@eslint/eslintrc": "^3.3.5",
51
- "@eslint/js": "^9.39.4",
52
49
  "@types/follow-redirects": "1.14.4",
53
50
  "@types/fs-extra": "11.0.4",
54
51
  "@types/json-stable-stringify": "1.2.0",
55
52
  "@types/uuid": "9.0.8",
56
- "@typescript-eslint/parser": "^8.58.0",
57
- "eslint": "^9.39.4",
58
- "eslint-plugin-prettier": "^5.5.5",
59
- "eslint-plugin-react": "7.37.5",
60
53
  "jest": "^30.3.0",
61
54
  "json-stable-stringify": "1.3.0",
62
55
  "lint-staged": "^15.5.2",
63
56
  "ts-jest": "29.4.9",
64
57
  "tsc-files": "1.1.4",
65
- "typescript": "5.4.5",
66
- "typescript-eslint": "^8.58.0"
58
+ "typescript": "5.4.5"
67
59
  },
68
60
  "lint-staged": {
69
61
  "src/**/*.{ts,tsx}": "tsc-files ambient.d.ts --noEmit"