@decohere/create 0.0.1-dev.36 → 0.0.1-dev.38

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,175 @@
1
+ /** Minimal OpenAPI 3 document shape used for Postman conversion. */ "use strict";
2
+ Object.defineProperty(exports, "__esModule", {
3
+ value: true
4
+ });
5
+ Object.defineProperty(exports, "buildHelloOpenApiDocument", {
6
+ enumerable: true,
7
+ get: function() {
8
+ return buildHelloOpenApiDocument;
9
+ }
10
+ });
11
+ function buildHelloOpenApiDocument(projectName) {
12
+ return {
13
+ openapi: "3.0.3",
14
+ info: {
15
+ title: `${projectName} WebAPI`,
16
+ version: "1.0.0",
17
+ description: "Generated from OpenAPI for Postman. Auth/env overlays are applied separately."
18
+ },
19
+ servers: [
20
+ {
21
+ url: "{{baseUrl}}"
22
+ }
23
+ ],
24
+ paths: {
25
+ "/hello": {
26
+ get: {
27
+ operationId: "HelloController.getAll",
28
+ summary: "List (anonymous)",
29
+ tags: [
30
+ "Hello"
31
+ ],
32
+ parameters: [
33
+ {
34
+ name: "filter",
35
+ in: "query",
36
+ required: false,
37
+ schema: {
38
+ type: "string"
39
+ }
40
+ }
41
+ ],
42
+ responses: {
43
+ "200": {
44
+ description: "Successful response"
45
+ }
46
+ }
47
+ },
48
+ post: {
49
+ operationId: "HelloController.create",
50
+ summary: "Create",
51
+ tags: [
52
+ "Hello"
53
+ ],
54
+ requestBody: {
55
+ required: true,
56
+ content: {
57
+ "application/json": {
58
+ schema: {
59
+ type: "object",
60
+ properties: {
61
+ message: {
62
+ type: "string"
63
+ }
64
+ },
65
+ required: [
66
+ "message"
67
+ ],
68
+ example: {
69
+ message: "hello"
70
+ }
71
+ }
72
+ }
73
+ }
74
+ },
75
+ responses: {
76
+ "200": {
77
+ description: "Successful response"
78
+ }
79
+ }
80
+ }
81
+ },
82
+ "/hello/{id}": {
83
+ get: {
84
+ operationId: "HelloController.getOne",
85
+ summary: "Get by id",
86
+ tags: [
87
+ "Hello"
88
+ ],
89
+ parameters: [
90
+ {
91
+ name: "id",
92
+ in: "path",
93
+ required: true,
94
+ schema: {
95
+ type: "string"
96
+ }
97
+ }
98
+ ],
99
+ responses: {
100
+ "200": {
101
+ description: "Successful response"
102
+ }
103
+ }
104
+ },
105
+ put: {
106
+ operationId: "HelloController.update",
107
+ summary: "Update",
108
+ tags: [
109
+ "Hello"
110
+ ],
111
+ parameters: [
112
+ {
113
+ name: "id",
114
+ in: "path",
115
+ required: true,
116
+ schema: {
117
+ type: "string"
118
+ }
119
+ }
120
+ ],
121
+ requestBody: {
122
+ required: true,
123
+ content: {
124
+ "application/json": {
125
+ schema: {
126
+ type: "object",
127
+ properties: {
128
+ message: {
129
+ type: "string"
130
+ }
131
+ },
132
+ required: [
133
+ "message"
134
+ ],
135
+ example: {
136
+ message: "updated"
137
+ }
138
+ }
139
+ }
140
+ }
141
+ },
142
+ responses: {
143
+ "200": {
144
+ description: "Successful response"
145
+ }
146
+ }
147
+ },
148
+ delete: {
149
+ operationId: "HelloController.remove",
150
+ summary: "Delete",
151
+ tags: [
152
+ "Hello"
153
+ ],
154
+ parameters: [
155
+ {
156
+ name: "id",
157
+ in: "path",
158
+ required: true,
159
+ schema: {
160
+ type: "string"
161
+ }
162
+ }
163
+ ],
164
+ responses: {
165
+ "200": {
166
+ description: "Successful response"
167
+ }
168
+ }
169
+ }
170
+ }
171
+ }
172
+ };
173
+ }
174
+
175
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi9ob21lL3J1bm5lci93b3JrL2RlY29oZXJlL2RlY29oZXJlL3Byb2plY3RzL2NyZWF0ZS9zcmMvd2ViYXBpL3Bvc3RtYW4vaGVsbG8tb3BlbmFwaS50cyJdLCJzb3VyY2VzQ29udGVudCI6WyIvKiogTWluaW1hbCBPcGVuQVBJIDMgZG9jdW1lbnQgc2hhcGUgdXNlZCBmb3IgUG9zdG1hbiBjb252ZXJzaW9uLiAqL1xuZXhwb3J0IHR5cGUgU2NhZmZvbGRPcGVuQXBpRG9jdW1lbnQgPSB7XG5cdG9wZW5hcGk6IFwiMy4wLjNcIjtcblx0aW5mbzogeyB0aXRsZTogc3RyaW5nOyB2ZXJzaW9uOiBzdHJpbmc7IGRlc2NyaXB0aW9uPzogc3RyaW5nIH07XG5cdHNlcnZlcnM/OiBBcnJheTx7IHVybDogc3RyaW5nOyBkZXNjcmlwdGlvbj86IHN0cmluZyB9Pjtcblx0cGF0aHM6IFJlY29yZDxzdHJpbmcsIFJlY29yZDxzdHJpbmcsIHVua25vd24+Pjtcbn07XG5cbi8qKlxuICogQ2Fub25pY2FsIEhlbGxvIFdlYkFQSSBPcGVuQVBJIGRvY3VtZW50IHVzZWQgdG8gZ2VuZXJhdGUgUG9zdG1hbiByZXF1ZXN0cy5cbiAqIEtlZXAgcGF0aHMgYWxpZ25lZCB3aXRoIHNjYWZmb2xkZWQgSGVsbG9Db250cm9sbGVyIChgL2hlbGxvYCwgYC9oZWxsby97aWR9YCkuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBidWlsZEhlbGxvT3BlbkFwaURvY3VtZW50KHByb2plY3ROYW1lOiBzdHJpbmcpOiBTY2FmZm9sZE9wZW5BcGlEb2N1bWVudCB7XG5cdHJldHVybiB7XG5cdFx0b3BlbmFwaTogXCIzLjAuM1wiLFxuXHRcdGluZm86IHtcblx0XHRcdHRpdGxlOiBgJHtwcm9qZWN0TmFtZX0gV2ViQVBJYCxcblx0XHRcdHZlcnNpb246IFwiMS4wLjBcIixcblx0XHRcdGRlc2NyaXB0aW9uOlxuXHRcdFx0XHRcIkdlbmVyYXRlZCBmcm9tIE9wZW5BUEkgZm9yIFBvc3RtYW4uIEF1dGgvZW52IG92ZXJsYXlzIGFyZSBhcHBsaWVkIHNlcGFyYXRlbHkuXCIsXG5cdFx0fSxcblx0XHRzZXJ2ZXJzOiBbeyB1cmw6IFwie3tiYXNlVXJsfX1cIiB9XSxcblx0XHRwYXRoczoge1xuXHRcdFx0XCIvaGVsbG9cIjoge1xuXHRcdFx0XHRnZXQ6IHtcblx0XHRcdFx0XHRvcGVyYXRpb25JZDogXCJIZWxsb0NvbnRyb2xsZXIuZ2V0QWxsXCIsXG5cdFx0XHRcdFx0c3VtbWFyeTogXCJMaXN0IChhbm9ueW1vdXMpXCIsXG5cdFx0XHRcdFx0dGFnczogW1wiSGVsbG9cIl0sXG5cdFx0XHRcdFx0cGFyYW1ldGVyczogW1xuXHRcdFx0XHRcdFx0eyBuYW1lOiBcImZpbHRlclwiLCBpbjogXCJxdWVyeVwiLCByZXF1aXJlZDogZmFsc2UsIHNjaGVtYTogeyB0eXBlOiBcInN0cmluZ1wiIH0gfSxcblx0XHRcdFx0XHRdLFxuXHRcdFx0XHRcdHJlc3BvbnNlczogeyBcIjIwMFwiOiB7IGRlc2NyaXB0aW9uOiBcIlN1Y2Nlc3NmdWwgcmVzcG9uc2VcIiB9IH0sXG5cdFx0XHRcdH0sXG5cdFx0XHRcdHBvc3Q6IHtcblx0XHRcdFx0XHRvcGVyYXRpb25JZDogXCJIZWxsb0NvbnRyb2xsZXIuY3JlYXRlXCIsXG5cdFx0XHRcdFx0c3VtbWFyeTogXCJDcmVhdGVcIixcblx0XHRcdFx0XHR0YWdzOiBbXCJIZWxsb1wiXSxcblx0XHRcdFx0XHRyZXF1ZXN0Qm9keToge1xuXHRcdFx0XHRcdFx0cmVxdWlyZWQ6IHRydWUsXG5cdFx0XHRcdFx0XHRjb250ZW50OiB7XG5cdFx0XHRcdFx0XHRcdFwiYXBwbGljYXRpb24vanNvblwiOiB7XG5cdFx0XHRcdFx0XHRcdFx0c2NoZW1hOiB7XG5cdFx0XHRcdFx0XHRcdFx0XHR0eXBlOiBcIm9iamVjdFwiLFxuXHRcdFx0XHRcdFx0XHRcdFx0cHJvcGVydGllczogeyBtZXNzYWdlOiB7IHR5cGU6IFwic3RyaW5nXCIgfSB9LFxuXHRcdFx0XHRcdFx0XHRcdFx0cmVxdWlyZWQ6IFtcIm1lc3NhZ2VcIl0sXG5cdFx0XHRcdFx0XHRcdFx0XHRleGFtcGxlOiB7IG1lc3NhZ2U6IFwiaGVsbG9cIiB9LFxuXHRcdFx0XHRcdFx0XHRcdH0sXG5cdFx0XHRcdFx0XHRcdH0sXG5cdFx0XHRcdFx0XHR9LFxuXHRcdFx0XHRcdH0sXG5cdFx0XHRcdFx0cmVzcG9uc2VzOiB7IFwiMjAwXCI6IHsgZGVzY3JpcHRpb246IFwiU3VjY2Vzc2Z1bCByZXNwb25zZVwiIH0gfSxcblx0XHRcdFx0fSxcblx0XHRcdH0sXG5cdFx0XHRcIi9oZWxsby97aWR9XCI6IHtcblx0XHRcdFx0Z2V0OiB7XG5cdFx0XHRcdFx0b3BlcmF0aW9uSWQ6IFwiSGVsbG9Db250cm9sbGVyLmdldE9uZVwiLFxuXHRcdFx0XHRcdHN1bW1hcnk6IFwiR2V0IGJ5IGlkXCIsXG5cdFx0XHRcdFx0dGFnczogW1wiSGVsbG9cIl0sXG5cdFx0XHRcdFx0cGFyYW1ldGVyczogW3sgbmFtZTogXCJpZFwiLCBpbjogXCJwYXRoXCIsIHJlcXVpcmVkOiB0cnVlLCBzY2hlbWE6IHsgdHlwZTogXCJzdHJpbmdcIiB9IH1dLFxuXHRcdFx0XHRcdHJlc3BvbnNlczogeyBcIjIwMFwiOiB7IGRlc2NyaXB0aW9uOiBcIlN1Y2Nlc3NmdWwgcmVzcG9uc2VcIiB9IH0sXG5cdFx0XHRcdH0sXG5cdFx0XHRcdHB1dDoge1xuXHRcdFx0XHRcdG9wZXJhdGlvbklkOiBcIkhlbGxvQ29udHJvbGxlci51cGRhdGVcIixcblx0XHRcdFx0XHRzdW1tYXJ5OiBcIlVwZGF0ZVwiLFxuXHRcdFx0XHRcdHRhZ3M6IFtcIkhlbGxvXCJdLFxuXHRcdFx0XHRcdHBhcmFtZXRlcnM6IFt7IG5hbWU6IFwiaWRcIiwgaW46IFwicGF0aFwiLCByZXF1aXJlZDogdHJ1ZSwgc2NoZW1hOiB7IHR5cGU6IFwic3RyaW5nXCIgfSB9XSxcblx0XHRcdFx0XHRyZXF1ZXN0Qm9keToge1xuXHRcdFx0XHRcdFx0cmVxdWlyZWQ6IHRydWUsXG5cdFx0XHRcdFx0XHRjb250ZW50OiB7XG5cdFx0XHRcdFx0XHRcdFwiYXBwbGljYXRpb24vanNvblwiOiB7XG5cdFx0XHRcdFx0XHRcdFx0c2NoZW1hOiB7XG5cdFx0XHRcdFx0XHRcdFx0XHR0eXBlOiBcIm9iamVjdFwiLFxuXHRcdFx0XHRcdFx0XHRcdFx0cHJvcGVydGllczogeyBtZXNzYWdlOiB7IHR5cGU6IFwic3RyaW5nXCIgfSB9LFxuXHRcdFx0XHRcdFx0XHRcdFx0cmVxdWlyZWQ6IFtcIm1lc3NhZ2VcIl0sXG5cdFx0XHRcdFx0XHRcdFx0XHRleGFtcGxlOiB7IG1lc3NhZ2U6IFwidXBkYXRlZFwiIH0sXG5cdFx0XHRcdFx0XHRcdFx0fSxcblx0XHRcdFx0XHRcdFx0fSxcblx0XHRcdFx0XHRcdH0sXG5cdFx0XHRcdFx0fSxcblx0XHRcdFx0XHRyZXNwb25zZXM6IHsgXCIyMDBcIjogeyBkZXNjcmlwdGlvbjogXCJTdWNjZXNzZnVsIHJlc3BvbnNlXCIgfSB9LFxuXHRcdFx0XHR9LFxuXHRcdFx0XHRkZWxldGU6IHtcblx0XHRcdFx0XHRvcGVyYXRpb25JZDogXCJIZWxsb0NvbnRyb2xsZXIucmVtb3ZlXCIsXG5cdFx0XHRcdFx0c3VtbWFyeTogXCJEZWxldGVcIixcblx0XHRcdFx0XHR0YWdzOiBbXCJIZWxsb1wiXSxcblx0XHRcdFx0XHRwYXJhbWV0ZXJzOiBbeyBuYW1lOiBcImlkXCIsIGluOiBcInBhdGhcIiwgcmVxdWlyZWQ6IHRydWUsIHNjaGVtYTogeyB0eXBlOiBcInN0cmluZ1wiIH0gfV0sXG5cdFx0XHRcdFx0cmVzcG9uc2VzOiB7IFwiMjAwXCI6IHsgZGVzY3JpcHRpb246IFwiU3VjY2Vzc2Z1bCByZXNwb25zZVwiIH0gfSxcblx0XHRcdFx0fSxcblx0XHRcdH0sXG5cdFx0fSxcblx0fTtcbn1cbiJdLCJuYW1lcyI6WyJidWlsZEhlbGxvT3BlbkFwaURvY3VtZW50IiwicHJvamVjdE5hbWUiLCJvcGVuYXBpIiwiaW5mbyIsInRpdGxlIiwidmVyc2lvbiIsImRlc2NyaXB0aW9uIiwic2VydmVycyIsInVybCIsInBhdGhzIiwiZ2V0Iiwib3BlcmF0aW9uSWQiLCJzdW1tYXJ5IiwidGFncyIsInBhcmFtZXRlcnMiLCJuYW1lIiwiaW4iLCJyZXF1aXJlZCIsInNjaGVtYSIsInR5cGUiLCJyZXNwb25zZXMiLCJwb3N0IiwicmVxdWVzdEJvZHkiLCJjb250ZW50IiwicHJvcGVydGllcyIsIm1lc3NhZ2UiLCJleGFtcGxlIiwicHV0IiwiZGVsZXRlIl0sIm1hcHBpbmdzIjoiQUFBQSxrRUFBa0U7Ozs7K0JBWWxEQTs7O2VBQUFBOzs7QUFBVCxTQUFTQSwwQkFBMEJDLFdBQW1CO0lBQzVELE9BQU87UUFDTkMsU0FBUztRQUNUQyxNQUFNO1lBQ0xDLE9BQU8sR0FBR0gsWUFBWSxPQUFPLENBQUM7WUFDOUJJLFNBQVM7WUFDVEMsYUFDQztRQUNGO1FBQ0FDLFNBQVM7WUFBQztnQkFBRUMsS0FBSztZQUFjO1NBQUU7UUFDakNDLE9BQU87WUFDTixVQUFVO2dCQUNUQyxLQUFLO29CQUNKQyxhQUFhO29CQUNiQyxTQUFTO29CQUNUQyxNQUFNO3dCQUFDO3FCQUFRO29CQUNmQyxZQUFZO3dCQUNYOzRCQUFFQyxNQUFNOzRCQUFVQyxJQUFJOzRCQUFTQyxVQUFVOzRCQUFPQyxRQUFRO2dDQUFFQyxNQUFNOzRCQUFTO3dCQUFFO3FCQUMzRTtvQkFDREMsV0FBVzt3QkFBRSxPQUFPOzRCQUFFZCxhQUFhO3dCQUFzQjtvQkFBRTtnQkFDNUQ7Z0JBQ0FlLE1BQU07b0JBQ0xWLGFBQWE7b0JBQ2JDLFNBQVM7b0JBQ1RDLE1BQU07d0JBQUM7cUJBQVE7b0JBQ2ZTLGFBQWE7d0JBQ1pMLFVBQVU7d0JBQ1ZNLFNBQVM7NEJBQ1Isb0JBQW9CO2dDQUNuQkwsUUFBUTtvQ0FDUEMsTUFBTTtvQ0FDTkssWUFBWTt3Q0FBRUMsU0FBUzs0Q0FBRU4sTUFBTTt3Q0FBUztvQ0FBRTtvQ0FDMUNGLFVBQVU7d0NBQUM7cUNBQVU7b0NBQ3JCUyxTQUFTO3dDQUFFRCxTQUFTO29DQUFRO2dDQUM3Qjs0QkFDRDt3QkFDRDtvQkFDRDtvQkFDQUwsV0FBVzt3QkFBRSxPQUFPOzRCQUFFZCxhQUFhO3dCQUFzQjtvQkFBRTtnQkFDNUQ7WUFDRDtZQUNBLGVBQWU7Z0JBQ2RJLEtBQUs7b0JBQ0pDLGFBQWE7b0JBQ2JDLFNBQVM7b0JBQ1RDLE1BQU07d0JBQUM7cUJBQVE7b0JBQ2ZDLFlBQVk7d0JBQUM7NEJBQUVDLE1BQU07NEJBQU1DLElBQUk7NEJBQVFDLFVBQVU7NEJBQU1DLFFBQVE7Z0NBQUVDLE1BQU07NEJBQVM7d0JBQUU7cUJBQUU7b0JBQ3BGQyxXQUFXO3dCQUFFLE9BQU87NEJBQUVkLGFBQWE7d0JBQXNCO29CQUFFO2dCQUM1RDtnQkFDQXFCLEtBQUs7b0JBQ0poQixhQUFhO29CQUNiQyxTQUFTO29CQUNUQyxNQUFNO3dCQUFDO3FCQUFRO29CQUNmQyxZQUFZO3dCQUFDOzRCQUFFQyxNQUFNOzRCQUFNQyxJQUFJOzRCQUFRQyxVQUFVOzRCQUFNQyxRQUFRO2dDQUFFQyxNQUFNOzRCQUFTO3dCQUFFO3FCQUFFO29CQUNwRkcsYUFBYTt3QkFDWkwsVUFBVTt3QkFDVk0sU0FBUzs0QkFDUixvQkFBb0I7Z0NBQ25CTCxRQUFRO29DQUNQQyxNQUFNO29DQUNOSyxZQUFZO3dDQUFFQyxTQUFTOzRDQUFFTixNQUFNO3dDQUFTO29DQUFFO29DQUMxQ0YsVUFBVTt3Q0FBQztxQ0FBVTtvQ0FDckJTLFNBQVM7d0NBQUVELFNBQVM7b0NBQVU7Z0NBQy9COzRCQUNEO3dCQUNEO29CQUNEO29CQUNBTCxXQUFXO3dCQUFFLE9BQU87NEJBQUVkLGFBQWE7d0JBQXNCO29CQUFFO2dCQUM1RDtnQkFDQXNCLFFBQVE7b0JBQ1BqQixhQUFhO29CQUNiQyxTQUFTO29CQUNUQyxNQUFNO3dCQUFDO3FCQUFRO29CQUNmQyxZQUFZO3dCQUFDOzRCQUFFQyxNQUFNOzRCQUFNQyxJQUFJOzRCQUFRQyxVQUFVOzRCQUFNQyxRQUFRO2dDQUFFQyxNQUFNOzRCQUFTO3dCQUFFO3FCQUFFO29CQUNwRkMsV0FBVzt3QkFBRSxPQUFPOzRCQUFFZCxhQUFhO3dCQUFzQjtvQkFBRTtnQkFDNUQ7WUFDRDtRQUNEO0lBQ0Q7QUFDRCJ9
@@ -0,0 +1,184 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", {
3
+ value: true
4
+ });
5
+ function _export(target, all) {
6
+ for(var name in all)Object.defineProperty(target, name, {
7
+ enumerable: true,
8
+ get: Object.getOwnPropertyDescriptor(all, name).get
9
+ });
10
+ }
11
+ _export(exports, {
12
+ get buildEnvironmentYaml () {
13
+ return buildEnvironmentYaml;
14
+ },
15
+ get buildLocalViewFilesFromCollection () {
16
+ return buildLocalViewFilesFromCollection;
17
+ }
18
+ });
19
+ const _nodecrypto = require("node:crypto");
20
+ const _openapitopostman = require("./openapi-to-postman.js");
21
+ function yamlQuote(value) {
22
+ if (/[:#{}[\],&*?|<>=!%@`]/.test(value) || value.includes("\n") || value === "") {
23
+ return JSON.stringify(value);
24
+ }
25
+ return value;
26
+ }
27
+ function buildEnvironmentYaml(name, auth, options) {
28
+ const values = [
29
+ {
30
+ key: "baseUrl",
31
+ value: "http://localhost:3000"
32
+ }
33
+ ];
34
+ if (auth?.auth0Domain) {
35
+ values.push({
36
+ key: "auth0Domain",
37
+ value: auth.auth0Domain
38
+ }, {
39
+ key: "auth0Audience",
40
+ value: auth.auth0Audience ?? ""
41
+ }, {
42
+ key: "auth0ClientId",
43
+ value: auth.auth0ClientId ?? ""
44
+ }, {
45
+ key: "authUrl",
46
+ value: `https://${auth.auth0Domain}/authorize?audience=${auth.auth0Audience ?? ""}`
47
+ }, {
48
+ key: "accessTokenUrl",
49
+ value: `https://${auth.auth0Domain}/oauth/token`
50
+ }, {
51
+ key: "callbackUrl",
52
+ value: options.callbacks[0]
53
+ }, {
54
+ key: "scope",
55
+ value: options.scopes
56
+ });
57
+ }
58
+ const lines = [
59
+ `name: ${yamlQuote(name)}`,
60
+ "values:"
61
+ ];
62
+ for (const v of values){
63
+ lines.push(` - key: ${v.key}`);
64
+ lines.push(` value: ${yamlQuote(v.value)}`);
65
+ lines.push(" enabled: true");
66
+ }
67
+ return `${lines.join("\n")}\n`;
68
+ }
69
+ function buildLocalViewFilesFromCollection(collection, projectName, auth, options) {
70
+ const collectionDir = `postman/collections/${projectName} WebAPI`;
71
+ const files = [];
72
+ const authBlock = auth?.auth0Domain ? [
73
+ "auth:",
74
+ ` - id: ${(0, _nodecrypto.randomUUID)()}`,
75
+ " type: oauth2",
76
+ " name: OAuth 2.0",
77
+ " credentials:",
78
+ " addTokenTo: header",
79
+ " grant_type: authorization_code_with_pkce",
80
+ ` authUrl: https://${auth.auth0Domain}/authorize?audience=${auth.auth0Audience ?? ""}`,
81
+ ` accessTokenUrl: https://${auth.auth0Domain}/oauth/token`,
82
+ ` clientId: ${yamlQuote(auth.auth0ClientId ?? "")}`,
83
+ ` scope: ${yamlQuote(options.scopes)}`,
84
+ ` redirect_uri: ${options.callbacks[0]}`,
85
+ " useBrowser: true",
86
+ " challengeAlgorithm: S256",
87
+ " client_authentication: body",
88
+ ' clientSecret: ""',
89
+ ` tokenName: ${yamlQuote(`${projectName} Access Token`)}`,
90
+ ""
91
+ ].join("\n") : "";
92
+ files.push({
93
+ filePath: `${collectionDir}/.resources/definition.yaml`,
94
+ content: [
95
+ "$kind: collection",
96
+ `name: ${yamlQuote(`${projectName} WebAPI`)}`,
97
+ "schemaVersion: '3.0'",
98
+ "description: >-",
99
+ " Open this project root in Postman Local View (Files → Open folder).",
100
+ " Select the Local environment, then Authorization → Get New Access Token (PKCE).",
101
+ " Route requests are generated from OpenAPI; Auth0 overlay is hand-authored.",
102
+ authBlock
103
+ ].filter((l)=>l !== undefined).join("\n").replace(/\n+$/, "\n")
104
+ });
105
+ let folderOrder = 1000;
106
+ for (const folder of collection.item ?? []){
107
+ if (folder.item == null) {
108
+ continue;
109
+ }
110
+ const folderName = folder.name ?? "Requests";
111
+ files.push({
112
+ filePath: `${collectionDir}/${folderName}/.resources/definition.yaml`,
113
+ content: [
114
+ "$kind: folder",
115
+ `name: ${yamlQuote(folderName)}`,
116
+ `order: ${folderOrder}`,
117
+ ""
118
+ ].join("\n")
119
+ });
120
+ folderOrder += 1000;
121
+ let requestOrder = 1000;
122
+ for (const child of folder.item){
123
+ const yaml = requestToLocalViewYaml(child, requestOrder);
124
+ if (yaml == null) {
125
+ continue;
126
+ }
127
+ const fileName = `${sanitizeFileName(child.name ?? "Request")}.request.yaml`;
128
+ files.push({
129
+ filePath: `${collectionDir}/${folderName}/${fileName}`,
130
+ content: yaml
131
+ });
132
+ requestOrder += 1000;
133
+ }
134
+ }
135
+ return files;
136
+ }
137
+ function requestToLocalViewYaml(item, order) {
138
+ const request = item.request;
139
+ if (request == null) {
140
+ return null;
141
+ }
142
+ const method = (request.method ?? "GET").toUpperCase();
143
+ const url = requestUrlForLocalView(request);
144
+ const lines = [
145
+ "$kind: http-request",
146
+ `name: ${yamlQuote(item.name ?? method)}`,
147
+ `method: ${method}`,
148
+ `url: ${yamlQuote(url)}`
149
+ ];
150
+ if (request.auth?.type === "noauth") {
151
+ lines.push("auth:", " type: noauth");
152
+ }
153
+ const contentType = request.header?.find((h)=>h.key.toLowerCase() === "content-type")?.value;
154
+ const rawBody = request.body?.raw?.trim();
155
+ if (rawBody) {
156
+ lines.push("headers:");
157
+ lines.push(` Content-Type: ${contentType ?? "application/json"}`);
158
+ lines.push("body:");
159
+ lines.push(" type: json");
160
+ lines.push(" content: |-");
161
+ for (const bodyLine of rawBody.split("\n")){
162
+ lines.push(` ${bodyLine}`);
163
+ }
164
+ }
165
+ lines.push(`order: ${order}`, "");
166
+ return lines.join("\n");
167
+ }
168
+ function requestUrlForLocalView(request) {
169
+ const url = request.url;
170
+ if (typeof url === "string") {
171
+ return (0, _openapitopostman.openApiPathParamsToColon)(url);
172
+ }
173
+ if (url?.raw) {
174
+ return (0, _openapitopostman.openApiPathParamsToColon)(url.raw);
175
+ }
176
+ const host = url?.host?.[0] ?? "{{baseUrl}}";
177
+ const path = (url?.path ?? []).map((segment)=>(0, _openapitopostman.openApiPathParamsToColon)(String(segment))).join("/");
178
+ return path ? `${host}/${path}` : host;
179
+ }
180
+ function sanitizeFileName(name) {
181
+ return name.replace(/[^\w\s()-]+/g, "").trim() || "Request";
182
+ }
183
+
184
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi9ob21lL3J1bm5lci93b3JrL2RlY29oZXJlL2RlY29oZXJlL3Byb2plY3RzL2NyZWF0ZS9zcmMvd2ViYXBpL3Bvc3RtYW4vbG9jYWwtdmlldy50cyJdLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyByYW5kb21VVUlEIH0gZnJvbSBcIm5vZGU6Y3J5cHRvXCI7XG5pbXBvcnQge1xuXHR0eXBlIEF1dGgwRW52LFxuXHRvcGVuQXBpUGF0aFBhcmFtc1RvQ29sb24sXG5cdHR5cGUgUG9zdG1hbkNvbGxlY3Rpb24sXG5cdHR5cGUgUG9zdG1hbkl0ZW0sXG5cdHR5cGUgUG9zdG1hblJlcXVlc3QsXG59IGZyb20gXCIuL29wZW5hcGktdG8tcG9zdG1hbi5qc1wiO1xuXG5mdW5jdGlvbiB5YW1sUXVvdGUodmFsdWU6IHN0cmluZyk6IHN0cmluZyB7XG5cdGlmICgvWzoje31bXFxdLCYqP3w8Pj0hJUBgXS8udGVzdCh2YWx1ZSkgfHwgdmFsdWUuaW5jbHVkZXMoXCJcXG5cIikgfHwgdmFsdWUgPT09IFwiXCIpIHtcblx0XHRyZXR1cm4gSlNPTi5zdHJpbmdpZnkodmFsdWUpO1xuXHR9XG5cdHJldHVybiB2YWx1ZTtcbn1cblxuLyoqIExvY2FsIFZpZXcgLyBOYXRpdmUgR2l0IGVudmlyb25tZW50IChZQU1MKS4gKi9cbmV4cG9ydCBmdW5jdGlvbiBidWlsZEVudmlyb25tZW50WWFtbChcblx0bmFtZTogc3RyaW5nLFxuXHRhdXRoOiBBdXRoMEVudiB8IHVuZGVmaW5lZCxcblx0b3B0aW9uczogeyBjYWxsYmFja3M6IHJlYWRvbmx5IHN0cmluZ1tdOyBzY29wZXM6IHN0cmluZyB9LFxuKTogc3RyaW5nIHtcblx0Y29uc3QgdmFsdWVzOiBBcnJheTx7IGtleTogc3RyaW5nOyB2YWx1ZTogc3RyaW5nIH0+ID0gW1xuXHRcdHsga2V5OiBcImJhc2VVcmxcIiwgdmFsdWU6IFwiaHR0cDovL2xvY2FsaG9zdDozMDAwXCIgfSxcblx0XTtcblx0aWYgKGF1dGg/LmF1dGgwRG9tYWluKSB7XG5cdFx0dmFsdWVzLnB1c2goXG5cdFx0XHR7IGtleTogXCJhdXRoMERvbWFpblwiLCB2YWx1ZTogYXV0aC5hdXRoMERvbWFpbiB9LFxuXHRcdFx0eyBrZXk6IFwiYXV0aDBBdWRpZW5jZVwiLCB2YWx1ZTogYXV0aC5hdXRoMEF1ZGllbmNlID8/IFwiXCIgfSxcblx0XHRcdHsga2V5OiBcImF1dGgwQ2xpZW50SWRcIiwgdmFsdWU6IGF1dGguYXV0aDBDbGllbnRJZCA/PyBcIlwiIH0sXG5cdFx0XHR7XG5cdFx0XHRcdGtleTogXCJhdXRoVXJsXCIsXG5cdFx0XHRcdHZhbHVlOiBgaHR0cHM6Ly8ke2F1dGguYXV0aDBEb21haW59L2F1dGhvcml6ZT9hdWRpZW5jZT0ke2F1dGguYXV0aDBBdWRpZW5jZSA/PyBcIlwifWAsXG5cdFx0XHR9LFxuXHRcdFx0e1xuXHRcdFx0XHRrZXk6IFwiYWNjZXNzVG9rZW5VcmxcIixcblx0XHRcdFx0dmFsdWU6IGBodHRwczovLyR7YXV0aC5hdXRoMERvbWFpbn0vb2F1dGgvdG9rZW5gLFxuXHRcdFx0fSxcblx0XHRcdHsga2V5OiBcImNhbGxiYWNrVXJsXCIsIHZhbHVlOiBvcHRpb25zLmNhbGxiYWNrc1swXSB9LFxuXHRcdFx0eyBrZXk6IFwic2NvcGVcIiwgdmFsdWU6IG9wdGlvbnMuc2NvcGVzIH0sXG5cdFx0KTtcblx0fVxuXG5cdGNvbnN0IGxpbmVzID0gW2BuYW1lOiAke3lhbWxRdW90ZShuYW1lKX1gLCBcInZhbHVlczpcIl07XG5cdGZvciAoY29uc3QgdiBvZiB2YWx1ZXMpIHtcblx0XHRsaW5lcy5wdXNoKGAgIC0ga2V5OiAke3Yua2V5fWApO1xuXHRcdGxpbmVzLnB1c2goYCAgICB2YWx1ZTogJHt5YW1sUXVvdGUodi52YWx1ZSl9YCk7XG5cdFx0bGluZXMucHVzaChcIiAgICBlbmFibGVkOiB0cnVlXCIpO1xuXHR9XG5cdHJldHVybiBgJHtsaW5lcy5qb2luKFwiXFxuXCIpfVxcbmA7XG59XG5cbi8qKlxuICogQnVpbGQgUG9zdG1hbiBMb2NhbCBWaWV3IG11bHRpLWZpbGUgWUFNTCBmcm9tIGEgdjIuMSBjb2xsZWN0aW9uIChyb3V0ZXMpXG4gKiBwbHVzIGhhbmQtYXV0aG9yZWQgQXV0aDAgb3ZlcmxheS5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGJ1aWxkTG9jYWxWaWV3RmlsZXNGcm9tQ29sbGVjdGlvbihcblx0Y29sbGVjdGlvbjogUG9zdG1hbkNvbGxlY3Rpb24sXG5cdHByb2plY3ROYW1lOiBzdHJpbmcsXG5cdGF1dGg6IEF1dGgwRW52IHwgdW5kZWZpbmVkLFxuXHRvcHRpb25zOiB7IGNhbGxiYWNrczogcmVhZG9ubHkgc3RyaW5nW107IHNjb3Blczogc3RyaW5nIH0sXG4pOiBBcnJheTx7IGZpbGVQYXRoOiBzdHJpbmc7IGNvbnRlbnQ6IHN0cmluZyB9PiB7XG5cdGNvbnN0IGNvbGxlY3Rpb25EaXIgPSBgcG9zdG1hbi9jb2xsZWN0aW9ucy8ke3Byb2plY3ROYW1lfSBXZWJBUElgO1xuXHRjb25zdCBmaWxlczogQXJyYXk8eyBmaWxlUGF0aDogc3RyaW5nOyBjb250ZW50OiBzdHJpbmcgfT4gPSBbXTtcblxuXHRjb25zdCBhdXRoQmxvY2sgPSBhdXRoPy5hdXRoMERvbWFpblxuXHRcdD8gW1xuXHRcdFx0XHRcImF1dGg6XCIsXG5cdFx0XHRcdGAgIC0gaWQ6ICR7cmFuZG9tVVVJRCgpfWAsXG5cdFx0XHRcdFwiICAgIHR5cGU6IG9hdXRoMlwiLFxuXHRcdFx0XHRcIiAgICBuYW1lOiBPQXV0aCAyLjBcIixcblx0XHRcdFx0XCIgICAgY3JlZGVudGlhbHM6XCIsXG5cdFx0XHRcdFwiICAgICAgYWRkVG9rZW5UbzogaGVhZGVyXCIsXG5cdFx0XHRcdFwiICAgICAgZ3JhbnRfdHlwZTogYXV0aG9yaXphdGlvbl9jb2RlX3dpdGhfcGtjZVwiLFxuXHRcdFx0XHRgICAgICAgYXV0aFVybDogaHR0cHM6Ly8ke2F1dGguYXV0aDBEb21haW59L2F1dGhvcml6ZT9hdWRpZW5jZT0ke2F1dGguYXV0aDBBdWRpZW5jZSA/PyBcIlwifWAsXG5cdFx0XHRcdGAgICAgICBhY2Nlc3NUb2tlblVybDogaHR0cHM6Ly8ke2F1dGguYXV0aDBEb21haW59L29hdXRoL3Rva2VuYCxcblx0XHRcdFx0YCAgICAgIGNsaWVudElkOiAke3lhbWxRdW90ZShhdXRoLmF1dGgwQ2xpZW50SWQgPz8gXCJcIil9YCxcblx0XHRcdFx0YCAgICAgIHNjb3BlOiAke3lhbWxRdW90ZShvcHRpb25zLnNjb3Blcyl9YCxcblx0XHRcdFx0YCAgICAgIHJlZGlyZWN0X3VyaTogJHtvcHRpb25zLmNhbGxiYWNrc1swXX1gLFxuXHRcdFx0XHRcIiAgICAgIHVzZUJyb3dzZXI6IHRydWVcIixcblx0XHRcdFx0XCIgICAgICBjaGFsbGVuZ2VBbGdvcml0aG06IFMyNTZcIixcblx0XHRcdFx0XCIgICAgICBjbGllbnRfYXV0aGVudGljYXRpb246IGJvZHlcIixcblx0XHRcdFx0JyAgICAgIGNsaWVudFNlY3JldDogXCJcIicsXG5cdFx0XHRcdGAgICAgICB0b2tlbk5hbWU6ICR7eWFtbFF1b3RlKGAke3Byb2plY3ROYW1lfSBBY2Nlc3MgVG9rZW5gKX1gLFxuXHRcdFx0XHRcIlwiLFxuXHRcdFx0XS5qb2luKFwiXFxuXCIpXG5cdFx0OiBcIlwiO1xuXG5cdGZpbGVzLnB1c2goe1xuXHRcdGZpbGVQYXRoOiBgJHtjb2xsZWN0aW9uRGlyfS8ucmVzb3VyY2VzL2RlZmluaXRpb24ueWFtbGAsXG5cdFx0Y29udGVudDogW1xuXHRcdFx0XCIka2luZDogY29sbGVjdGlvblwiLFxuXHRcdFx0YG5hbWU6ICR7eWFtbFF1b3RlKGAke3Byb2plY3ROYW1lfSBXZWJBUElgKX1gLFxuXHRcdFx0XCJzY2hlbWFWZXJzaW9uOiAnMy4wJ1wiLFxuXHRcdFx0XCJkZXNjcmlwdGlvbjogPi1cIixcblx0XHRcdFwiICBPcGVuIHRoaXMgcHJvamVjdCByb290IGluIFBvc3RtYW4gTG9jYWwgVmlldyAoRmlsZXMg4oaSIE9wZW4gZm9sZGVyKS5cIixcblx0XHRcdFwiICBTZWxlY3QgdGhlIExvY2FsIGVudmlyb25tZW50LCB0aGVuIEF1dGhvcml6YXRpb24g4oaSIEdldCBOZXcgQWNjZXNzIFRva2VuIChQS0NFKS5cIixcblx0XHRcdFwiICBSb3V0ZSByZXF1ZXN0cyBhcmUgZ2VuZXJhdGVkIGZyb20gT3BlbkFQSTsgQXV0aDAgb3ZlcmxheSBpcyBoYW5kLWF1dGhvcmVkLlwiLFxuXHRcdFx0YXV0aEJsb2NrLFxuXHRcdF1cblx0XHRcdC5maWx0ZXIoKGwpID0+IGwgIT09IHVuZGVmaW5lZClcblx0XHRcdC5qb2luKFwiXFxuXCIpXG5cdFx0XHQucmVwbGFjZSgvXFxuKyQvLCBcIlxcblwiKSxcblx0fSk7XG5cblx0bGV0IGZvbGRlck9yZGVyID0gMTAwMDtcblx0Zm9yIChjb25zdCBmb2xkZXIgb2YgY29sbGVjdGlvbi5pdGVtID8/IFtdKSB7XG5cdFx0aWYgKGZvbGRlci5pdGVtID09IG51bGwpIHtcblx0XHRcdGNvbnRpbnVlO1xuXHRcdH1cblx0XHRjb25zdCBmb2xkZXJOYW1lID0gZm9sZGVyLm5hbWUgPz8gXCJSZXF1ZXN0c1wiO1xuXHRcdGZpbGVzLnB1c2goe1xuXHRcdFx0ZmlsZVBhdGg6IGAke2NvbGxlY3Rpb25EaXJ9LyR7Zm9sZGVyTmFtZX0vLnJlc291cmNlcy9kZWZpbml0aW9uLnlhbWxgLFxuXHRcdFx0Y29udGVudDogW1xuXHRcdFx0XHRcIiRraW5kOiBmb2xkZXJcIixcblx0XHRcdFx0YG5hbWU6ICR7eWFtbFF1b3RlKGZvbGRlck5hbWUpfWAsXG5cdFx0XHRcdGBvcmRlcjogJHtmb2xkZXJPcmRlcn1gLFxuXHRcdFx0XHRcIlwiLFxuXHRcdFx0XS5qb2luKFwiXFxuXCIpLFxuXHRcdH0pO1xuXHRcdGZvbGRlck9yZGVyICs9IDEwMDA7XG5cblx0XHRsZXQgcmVxdWVzdE9yZGVyID0gMTAwMDtcblx0XHRmb3IgKGNvbnN0IGNoaWxkIG9mIGZvbGRlci5pdGVtKSB7XG5cdFx0XHRjb25zdCB5YW1sID0gcmVxdWVzdFRvTG9jYWxWaWV3WWFtbChjaGlsZCwgcmVxdWVzdE9yZGVyKTtcblx0XHRcdGlmICh5YW1sID09IG51bGwpIHtcblx0XHRcdFx0Y29udGludWU7XG5cdFx0XHR9XG5cdFx0XHRjb25zdCBmaWxlTmFtZSA9IGAke3Nhbml0aXplRmlsZU5hbWUoY2hpbGQubmFtZSA/PyBcIlJlcXVlc3RcIil9LnJlcXVlc3QueWFtbGA7XG5cdFx0XHRmaWxlcy5wdXNoKHtcblx0XHRcdFx0ZmlsZVBhdGg6IGAke2NvbGxlY3Rpb25EaXJ9LyR7Zm9sZGVyTmFtZX0vJHtmaWxlTmFtZX1gLFxuXHRcdFx0XHRjb250ZW50OiB5YW1sLFxuXHRcdFx0fSk7XG5cdFx0XHRyZXF1ZXN0T3JkZXIgKz0gMTAwMDtcblx0XHR9XG5cdH1cblxuXHRyZXR1cm4gZmlsZXM7XG59XG5cbmZ1bmN0aW9uIHJlcXVlc3RUb0xvY2FsVmlld1lhbWwoaXRlbTogUG9zdG1hbkl0ZW0sIG9yZGVyOiBudW1iZXIpOiBzdHJpbmcgfCBudWxsIHtcblx0Y29uc3QgcmVxdWVzdCA9IGl0ZW0ucmVxdWVzdDtcblx0aWYgKHJlcXVlc3QgPT0gbnVsbCkge1xuXHRcdHJldHVybiBudWxsO1xuXHR9XG5cdGNvbnN0IG1ldGhvZCA9IChyZXF1ZXN0Lm1ldGhvZCA/PyBcIkdFVFwiKS50b1VwcGVyQ2FzZSgpO1xuXHRjb25zdCB1cmwgPSByZXF1ZXN0VXJsRm9yTG9jYWxWaWV3KHJlcXVlc3QpO1xuXHRjb25zdCBsaW5lcyA9IFtcblx0XHRcIiRraW5kOiBodHRwLXJlcXVlc3RcIixcblx0XHRgbmFtZTogJHt5YW1sUXVvdGUoaXRlbS5uYW1lID8/IG1ldGhvZCl9YCxcblx0XHRgbWV0aG9kOiAke21ldGhvZH1gLFxuXHRcdGB1cmw6ICR7eWFtbFF1b3RlKHVybCl9YCxcblx0XTtcblxuXHRpZiAocmVxdWVzdC5hdXRoPy50eXBlID09PSBcIm5vYXV0aFwiKSB7XG5cdFx0bGluZXMucHVzaChcImF1dGg6XCIsIFwiICB0eXBlOiBub2F1dGhcIik7XG5cdH1cblxuXHRjb25zdCBjb250ZW50VHlwZSA9IHJlcXVlc3QuaGVhZGVyPy5maW5kKFxuXHRcdChoKSA9PiBoLmtleS50b0xvd2VyQ2FzZSgpID09PSBcImNvbnRlbnQtdHlwZVwiLFxuXHQpPy52YWx1ZTtcblx0Y29uc3QgcmF3Qm9keSA9IHJlcXVlc3QuYm9keT8ucmF3Py50cmltKCk7XG5cdGlmIChyYXdCb2R5KSB7XG5cdFx0bGluZXMucHVzaChcImhlYWRlcnM6XCIpO1xuXHRcdGxpbmVzLnB1c2goYCAgQ29udGVudC1UeXBlOiAke2NvbnRlbnRUeXBlID8/IFwiYXBwbGljYXRpb24vanNvblwifWApO1xuXHRcdGxpbmVzLnB1c2goXCJib2R5OlwiKTtcblx0XHRsaW5lcy5wdXNoKFwiICB0eXBlOiBqc29uXCIpO1xuXHRcdGxpbmVzLnB1c2goXCIgIGNvbnRlbnQ6IHwtXCIpO1xuXHRcdGZvciAoY29uc3QgYm9keUxpbmUgb2YgcmF3Qm9keS5zcGxpdChcIlxcblwiKSkge1xuXHRcdFx0bGluZXMucHVzaChgICAgICR7Ym9keUxpbmV9YCk7XG5cdFx0fVxuXHR9XG5cblx0bGluZXMucHVzaChgb3JkZXI6ICR7b3JkZXJ9YCwgXCJcIik7XG5cdHJldHVybiBsaW5lcy5qb2luKFwiXFxuXCIpO1xufVxuXG5mdW5jdGlvbiByZXF1ZXN0VXJsRm9yTG9jYWxWaWV3KHJlcXVlc3Q6IFBvc3RtYW5SZXF1ZXN0KTogc3RyaW5nIHtcblx0Y29uc3QgdXJsID0gcmVxdWVzdC51cmw7XG5cdGlmICh0eXBlb2YgdXJsID09PSBcInN0cmluZ1wiKSB7XG5cdFx0cmV0dXJuIG9wZW5BcGlQYXRoUGFyYW1zVG9Db2xvbih1cmwpO1xuXHR9XG5cdGlmICh1cmw/LnJhdykge1xuXHRcdHJldHVybiBvcGVuQXBpUGF0aFBhcmFtc1RvQ29sb24odXJsLnJhdyk7XG5cdH1cblx0Y29uc3QgaG9zdCA9IHVybD8uaG9zdD8uWzBdID8/IFwie3tiYXNlVXJsfX1cIjtcblx0Y29uc3QgcGF0aCA9ICh1cmw/LnBhdGggPz8gW10pXG5cdFx0Lm1hcCgoc2VnbWVudCkgPT4gb3BlbkFwaVBhdGhQYXJhbXNUb0NvbG9uKFN0cmluZyhzZWdtZW50KSkpXG5cdFx0LmpvaW4oXCIvXCIpO1xuXHRyZXR1cm4gcGF0aCA/IGAke2hvc3R9LyR7cGF0aH1gIDogaG9zdDtcbn1cblxuZnVuY3Rpb24gc2FuaXRpemVGaWxlTmFtZShuYW1lOiBzdHJpbmcpOiBzdHJpbmcge1xuXHRyZXR1cm4gbmFtZS5yZXBsYWNlKC9bXlxcd1xccygpLV0rL2csIFwiXCIpLnRyaW0oKSB8fCBcIlJlcXVlc3RcIjtcbn1cbiJdLCJuYW1lcyI6WyJidWlsZEVudmlyb25tZW50WWFtbCIsImJ1aWxkTG9jYWxWaWV3RmlsZXNGcm9tQ29sbGVjdGlvbiIsInlhbWxRdW90ZSIsInZhbHVlIiwidGVzdCIsImluY2x1ZGVzIiwiSlNPTiIsInN0cmluZ2lmeSIsIm5hbWUiLCJhdXRoIiwib3B0aW9ucyIsInZhbHVlcyIsImtleSIsImF1dGgwRG9tYWluIiwicHVzaCIsImF1dGgwQXVkaWVuY2UiLCJhdXRoMENsaWVudElkIiwiY2FsbGJhY2tzIiwic2NvcGVzIiwibGluZXMiLCJ2Iiwiam9pbiIsImNvbGxlY3Rpb24iLCJwcm9qZWN0TmFtZSIsImNvbGxlY3Rpb25EaXIiLCJmaWxlcyIsImF1dGhCbG9jayIsInJhbmRvbVVVSUQiLCJmaWxlUGF0aCIsImNvbnRlbnQiLCJmaWx0ZXIiLCJsIiwidW5kZWZpbmVkIiwicmVwbGFjZSIsImZvbGRlck9yZGVyIiwiZm9sZGVyIiwiaXRlbSIsImZvbGRlck5hbWUiLCJyZXF1ZXN0T3JkZXIiLCJjaGlsZCIsInlhbWwiLCJyZXF1ZXN0VG9Mb2NhbFZpZXdZYW1sIiwiZmlsZU5hbWUiLCJzYW5pdGl6ZUZpbGVOYW1lIiwib3JkZXIiLCJyZXF1ZXN0IiwibWV0aG9kIiwidG9VcHBlckNhc2UiLCJ1cmwiLCJyZXF1ZXN0VXJsRm9yTG9jYWxWaWV3IiwidHlwZSIsImNvbnRlbnRUeXBlIiwiaGVhZGVyIiwiZmluZCIsImgiLCJ0b0xvd2VyQ2FzZSIsInJhd0JvZHkiLCJib2R5IiwicmF3IiwidHJpbSIsImJvZHlMaW5lIiwic3BsaXQiLCJvcGVuQXBpUGF0aFBhcmFtc1RvQ29sb24iLCJob3N0IiwicGF0aCIsIm1hcCIsInNlZ21lbnQiLCJTdHJpbmciXSwibWFwcGluZ3MiOiI7Ozs7Ozs7Ozs7O1FBaUJnQkE7ZUFBQUE7O1FBdUNBQztlQUFBQTs7OzRCQXhEVztrQ0FPcEI7QUFFUCxTQUFTQyxVQUFVQyxLQUFhO0lBQy9CLElBQUksd0JBQXdCQyxJQUFJLENBQUNELFVBQVVBLE1BQU1FLFFBQVEsQ0FBQyxTQUFTRixVQUFVLElBQUk7UUFDaEYsT0FBT0csS0FBS0MsU0FBUyxDQUFDSjtJQUN2QjtJQUNBLE9BQU9BO0FBQ1I7QUFHTyxTQUFTSCxxQkFDZlEsSUFBWSxFQUNaQyxJQUEwQixFQUMxQkMsT0FBeUQ7SUFFekQsTUFBTUMsU0FBZ0Q7UUFDckQ7WUFBRUMsS0FBSztZQUFXVCxPQUFPO1FBQXdCO0tBQ2pEO0lBQ0QsSUFBSU0sTUFBTUksYUFBYTtRQUN0QkYsT0FBT0csSUFBSSxDQUNWO1lBQUVGLEtBQUs7WUFBZVQsT0FBT00sS0FBS0ksV0FBVztRQUFDLEdBQzlDO1lBQUVELEtBQUs7WUFBaUJULE9BQU9NLEtBQUtNLGFBQWEsSUFBSTtRQUFHLEdBQ3hEO1lBQUVILEtBQUs7WUFBaUJULE9BQU9NLEtBQUtPLGFBQWEsSUFBSTtRQUFHLEdBQ3hEO1lBQ0NKLEtBQUs7WUFDTFQsT0FBTyxDQUFDLFFBQVEsRUFBRU0sS0FBS0ksV0FBVyxDQUFDLG9CQUFvQixFQUFFSixLQUFLTSxhQUFhLElBQUksSUFBSTtRQUNwRixHQUNBO1lBQ0NILEtBQUs7WUFDTFQsT0FBTyxDQUFDLFFBQVEsRUFBRU0sS0FBS0ksV0FBVyxDQUFDLFlBQVksQ0FBQztRQUNqRCxHQUNBO1lBQUVELEtBQUs7WUFBZVQsT0FBT08sUUFBUU8sU0FBUyxDQUFDLEVBQUU7UUFBQyxHQUNsRDtZQUFFTCxLQUFLO1lBQVNULE9BQU9PLFFBQVFRLE1BQU07UUFBQztJQUV4QztJQUVBLE1BQU1DLFFBQVE7UUFBQyxDQUFDLE1BQU0sRUFBRWpCLFVB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
@@ -0,0 +1,202 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", {
3
+ value: true
4
+ });
5
+ function _export(target, all) {
6
+ for(var name in all)Object.defineProperty(target, name, {
7
+ enumerable: true,
8
+ get: Object.getOwnPropertyDescriptor(all, name).get
9
+ });
10
+ }
11
+ _export(exports, {
12
+ get applyPostmanAuthOverlay () {
13
+ return applyPostmanAuthOverlay;
14
+ },
15
+ get openApiPathParamsToColon () {
16
+ return openApiPathParamsToColon;
17
+ },
18
+ get openApiToPostmanCollection () {
19
+ return openApiToPostmanCollection;
20
+ }
21
+ });
22
+ const _openapitopostmanv2 = /*#__PURE__*/ _interop_require_default(require("openapi-to-postmanv2"));
23
+ function _interop_require_default(obj) {
24
+ return obj && obj.__esModule ? obj : {
25
+ default: obj
26
+ };
27
+ }
28
+ function convertAsync(data, options) {
29
+ return new Promise((resolve, reject)=>{
30
+ _openapitopostmanv2.default.convert({
31
+ type: "json",
32
+ data
33
+ }, options, (err, result)=>{
34
+ if (err) {
35
+ reject(err);
36
+ return;
37
+ }
38
+ resolve(result);
39
+ });
40
+ });
41
+ }
42
+ async function openApiToPostmanCollection(document) {
43
+ const result = await convertAsync(document, {
44
+ folderStrategy: "Tags",
45
+ requestNameSource: "Fallback",
46
+ includeAuthInfoInExample: false
47
+ });
48
+ if (!result.result || result.output?.[0]?.data == null) {
49
+ throw new Error(result.reason ?? "openapi-to-postmanv2 conversion failed");
50
+ }
51
+ return result.output[0].data;
52
+ }
53
+ function applyPostmanAuthOverlay(collection, projectName, auth, options) {
54
+ const next = {
55
+ ...collection,
56
+ info: {
57
+ ...collection.info,
58
+ name: `${projectName} WebAPI`,
59
+ description: options.description,
60
+ schema: collection.info.schema ?? "https://schema.getpostman.com/json/collection/v2.1.0/collection.json"
61
+ }
62
+ };
63
+ if (auth?.auth0Domain) {
64
+ next.auth = {
65
+ type: "oauth2",
66
+ oauth2: [
67
+ {
68
+ key: "grant_type",
69
+ value: "authorization_code_with_pkce",
70
+ type: "string"
71
+ },
72
+ {
73
+ key: "authUrl",
74
+ value: "https://{{auth0Domain}}/authorize?audience={{auth0Audience}}",
75
+ type: "string"
76
+ },
77
+ {
78
+ key: "accessTokenUrl",
79
+ value: "https://{{auth0Domain}}/oauth/token",
80
+ type: "string"
81
+ },
82
+ {
83
+ key: "clientId",
84
+ value: "{{auth0ClientId}}",
85
+ type: "string"
86
+ },
87
+ {
88
+ key: "scope",
89
+ value: options.scopes,
90
+ type: "string"
91
+ },
92
+ {
93
+ key: "redirect_uri",
94
+ value: options.callbacks[0],
95
+ type: "string"
96
+ },
97
+ {
98
+ key: "useBrowser",
99
+ value: "true",
100
+ type: "boolean"
101
+ },
102
+ {
103
+ key: "addTokenTo",
104
+ value: "header",
105
+ type: "string"
106
+ },
107
+ {
108
+ key: "challengeAlgorithm",
109
+ value: "S256",
110
+ type: "string"
111
+ },
112
+ {
113
+ key: "client_authentication",
114
+ value: "body",
115
+ type: "string"
116
+ },
117
+ {
118
+ key: "clientSecret",
119
+ value: "",
120
+ type: "string"
121
+ },
122
+ {
123
+ key: "tokenName",
124
+ value: `${projectName} Access Token`,
125
+ type: "string"
126
+ }
127
+ ]
128
+ };
129
+ }
130
+ next.item = rewriteCollectionItems(collection.item ?? [], {
131
+ markListAnonymous: true
132
+ });
133
+ return next;
134
+ }
135
+ function rewriteCollectionItems(items, opts) {
136
+ return items.map((item)=>{
137
+ if (item.item != null) {
138
+ return {
139
+ ...item,
140
+ item: rewriteCollectionItems(item.item, opts)
141
+ };
142
+ }
143
+ const request = item.request;
144
+ if (request == null) {
145
+ return item;
146
+ }
147
+ const method = (request.method ?? "GET").toUpperCase();
148
+ const rawUrl = requestUrlRaw(request);
149
+ const nextRequest = {
150
+ ...request,
151
+ url: toPostmanUrl(rawUrl)
152
+ };
153
+ // List Hello stays anonymous (matches scaffold AllowAnonymous on GET /hello).
154
+ if (opts.markListAnonymous && method === "GET" && normalizePath(rawUrl) === "/hello" && !rawUrl.includes("/:")) {
155
+ nextRequest.auth = {
156
+ type: "noauth"
157
+ };
158
+ }
159
+ return {
160
+ ...item,
161
+ request: nextRequest
162
+ };
163
+ });
164
+ }
165
+ function requestUrlRaw(request) {
166
+ const url = request.url;
167
+ if (typeof url === "string") {
168
+ return url;
169
+ }
170
+ if (url?.raw) {
171
+ return url.raw;
172
+ }
173
+ const host = url?.host?.[0] ?? "{{baseUrl}}";
174
+ const path = (url?.path ?? []).join("/");
175
+ return path ? `${host}/${path}` : host;
176
+ }
177
+ function openApiPathParamsToColon(url) {
178
+ return url.replace(/(?<!\{)\{([A-Za-z_][\w]*)\}(?!\})/g, ":$1");
179
+ }
180
+ function normalizePath(rawUrl) {
181
+ const withoutBase = rawUrl.replace(/\{\{baseUrl\}\}/g, "").split("?")[0] ?? "";
182
+ const withSlash = withoutBase.startsWith("/") ? withoutBase : `/${withoutBase}`;
183
+ return openApiPathParamsToColon(withSlash);
184
+ }
185
+ /** Prefer Postman template URL shape used by existing Local View / API uploads. */ function toPostmanUrl(rawUrl) {
186
+ let pathPart = rawUrl.replace(/\{\{baseUrl\}\}/g, "");
187
+ if (!pathPart.startsWith("/")) {
188
+ pathPart = `/${pathPart}`;
189
+ }
190
+ // openapi-to-postman uses {id}; Local View / prior collections use :id
191
+ pathPart = openApiPathParamsToColon(pathPart);
192
+ const segments = pathPart.split("/").filter(Boolean);
193
+ return {
194
+ raw: `{{baseUrl}}${pathPart}`,
195
+ host: [
196
+ "{{baseUrl}}"
197
+ ],
198
+ path: segments
199
+ };
200
+ }
201
+
202
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi9ob21lL3J1bm5lci93b3JrL2RlY29oZXJlL2RlY29oZXJlL3Byb2plY3RzL2NyZWF0ZS9zcmMvd2ViYXBpL3Bvc3RtYW4vb3BlbmFwaS10by1wb3N0bWFuLnRzIl0sInNvdXJjZXNDb250ZW50IjpbImltcG9ydCBjb252ZXJ0ZXIgZnJvbSBcIm9wZW5hcGktdG8tcG9zdG1hbnYyXCI7XG5pbXBvcnQgdHlwZSB7IFNjYWZmb2xkT3BlbkFwaURvY3VtZW50IH0gZnJvbSBcIi4vaGVsbG8tb3BlbmFwaS5qc1wiO1xuXG5leHBvcnQgdHlwZSBQb3N0bWFuQ29sbGVjdGlvbiA9IHtcblx0aW5mbzoge1xuXHRcdF9wb3N0bWFuX2lkPzogc3RyaW5nO1xuXHRcdG5hbWU6IHN0cmluZztcblx0XHRzY2hlbWE6IHN0cmluZztcblx0XHRkZXNjcmlwdGlvbj86IHN0cmluZztcblx0fTtcblx0YXV0aD86IHVua25vd247XG5cdGl0ZW0/OiBQb3N0bWFuSXRlbVtdO1xuXHR2YXJpYWJsZT86IEFycmF5PHsga2V5OiBzdHJpbmc7IHZhbHVlOiBzdHJpbmcgfT47XG5cdFtrZXk6IHN0cmluZ106IHVua25vd247XG59O1xuXG5leHBvcnQgdHlwZSBQb3N0bWFuSXRlbSA9IHtcblx0bmFtZT86IHN0cmluZztcblx0aXRlbT86IFBvc3RtYW5JdGVtW107XG5cdHJlcXVlc3Q/OiBQb3N0bWFuUmVxdWVzdDtcblx0W2tleTogc3RyaW5nXTogdW5rbm93bjtcbn07XG5cbmV4cG9ydCB0eXBlIFBvc3RtYW5SZXF1ZXN0ID0ge1xuXHRtZXRob2Q/OiBzdHJpbmc7XG5cdGhlYWRlcj86IEFycmF5PHsga2V5OiBzdHJpbmc7IHZhbHVlOiBzdHJpbmcgfT47XG5cdGJvZHk/OiB7IG1vZGU/OiBzdHJpbmc7IHJhdz86IHN0cmluZyB9O1xuXHR1cmw/OiBzdHJpbmcgfCB7IHJhdz86IHN0cmluZzsgaG9zdD86IHN0cmluZ1tdOyBwYXRoPzogc3RyaW5nW107IHZhcmlhYmxlPzogdW5rbm93bltdIH07XG5cdGF1dGg/OiB7IHR5cGU6IHN0cmluZzsgW2tleTogc3RyaW5nXTogdW5rbm93biB9O1xuXHRba2V5OiBzdHJpbmddOiB1bmtub3duO1xufTtcblxuZXhwb3J0IHR5cGUgQXV0aDBFbnYgPSB7XG5cdGF1dGgwRG9tYWluPzogc3RyaW5nO1xuXHRhdXRoMEF1ZGllbmNlPzogc3RyaW5nO1xuXHRhdXRoMENsaWVudElkPzogc3RyaW5nO1xufTtcblxudHlwZSBDb252ZXJ0UmVzdWx0ID0ge1xuXHRyZXN1bHQ6IGJvb2xlYW47XG5cdHJlYXNvbj86IHN0cmluZztcblx0b3V0cHV0PzogQXJyYXk8eyB0eXBlOiBzdHJpbmc7IGRhdGE6IFBvc3RtYW5Db2xsZWN0aW9uIH0+O1xufTtcblxuZnVuY3Rpb24gY29udmVydEFzeW5jKFxuXHRkYXRhOiBTY2FmZm9sZE9wZW5BcGlEb2N1bWVudCxcblx0b3B0aW9uczogUmVjb3JkPHN0cmluZywgdW5rbm93bj4sXG4pOiBQcm9taXNlPENvbnZlcnRSZXN1bHQ+IHtcblx0cmV0dXJuIG5ldyBQcm9taXNlKChyZXNvbHZlLCByZWplY3QpID0+IHtcblx0XHRjb252ZXJ0ZXIuY29udmVydChcblx0XHRcdHsgdHlwZTogXCJqc29uXCIsIGRhdGEgfSxcblx0XHRcdG9wdGlvbnMsXG5cdFx0XHQoZXJyOiBFcnJvciB8IG51bGwsIHJlc3VsdDogQ29udmVydFJlc3VsdCkgPT4ge1xuXHRcdFx0XHRpZiAoZXJyKSB7XG5cdFx0XHRcdFx0cmVqZWN0KGVycik7XG5cdFx0XHRcdFx0cmV0dXJuO1xuXHRcdFx0XHR9XG5cdFx0XHRcdHJlc29sdmUocmVzdWx0KTtcblx0XHRcdH0sXG5cdFx0KTtcblx0fSk7XG59XG5cbi8qKiBDb252ZXJ0IGFuIE9wZW5BUEkgZG9jdW1lbnQgdG8gYSBQb3N0bWFuIENvbGxlY3Rpb24gdjIuMSB2aWEgb3BlbmFwaS10by1wb3N0bWFudjIuICovXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gb3BlbkFwaVRvUG9zdG1hbkNvbGxlY3Rpb24oXG5cdGRvY3VtZW50OiBTY2FmZm9sZE9wZW5BcGlEb2N1bWVudCxcbik6IFByb21pc2U8UG9zdG1hbkNvbGxlY3Rpb24+IHtcblx0Y29uc3QgcmVzdWx0ID0gYXdhaXQgY29udmVydEFzeW5jKGRvY3VtZW50LCB7XG5cdFx0Zm9sZGVyU3RyYXRlZ3k6IFwiVGFnc1wiLFxuXHRcdHJlcXVlc3ROYW1lU291cmNlOiBcIkZhbGxiYWNrXCIsXG5cdFx0aW5jbHVkZUF1dGhJbmZvSW5FeGFtcGxlOiBmYWxzZSxcblx0fSk7XG5cdGlmICghcmVzdWx0LnJlc3VsdCB8fCByZXN1bHQub3V0cHV0Py5bMF0/LmRhdGEgPT0gbnVsbCkge1xuXHRcdHRocm93IG5ldyBFcnJvcihyZXN1bHQucmVhc29uID8/IFwib3BlbmFwaS10by1wb3N0bWFudjIgY29udmVyc2lvbiBmYWlsZWRcIik7XG5cdH1cblx0cmV0dXJuIHJlc3VsdC5vdXRwdXRbMF0uZGF0YTtcbn1cblxuLyoqXG4gKiBPdmVybGF5IEF1dGgwIE9BdXRoMiAoUEtDRSkgY29sbGVjdGlvbiBhdXRoIGFuZCBmaXggTG9jYWwgVmlldy1mcmllbmRseSBVUkxzLlxuICogUm91dGUgaXRlbXMgY29tZSBmcm9tIE9wZW5BUEk7IGF1dGgvZW52IHJlbWFpbiBoYW5kLWF1dGhvcmVkLlxuICovXG5leHBvcnQgZnVuY3Rpb24gYXBwbHlQb3N0bWFuQXV0aE92ZXJsYXkoXG5cdGNvbGxlY3Rpb246IFBvc3RtYW5Db2xsZWN0aW9uLFxuXHRwcm9qZWN0TmFtZTogc3RyaW5nLFxuXHRhdXRoOiBBdXRoMEVudiB8IHVuZGVmaW5lZCxcblx0b3B0aW9uczoge1xuXHRcdGNhbGxiYWNrczogcmVhZG9ubHkgc3RyaW5nW107XG5cdFx0c2NvcGVzOiBzdHJpbmc7XG5cdFx0ZGVzY3JpcHRpb246IHN0cmluZztcblx0fSxcbik6IFBvc3RtYW5Db2xsZWN0aW9uIHtcblx0Y29uc3QgbmV4dDogUG9zdG1hbkNvbGxlY3Rpb24gPSB7XG5cdFx0Li4uY29sbGVjdGlvbixcblx0XHRpbmZvOiB7XG5cdFx0XHQuLi5jb2xsZWN0aW9uLmluZm8sXG5cdFx0XHRuYW1lOiBgJHtwcm9qZWN0TmFtZX0gV2ViQVBJYCxcblx0XHRcdGRlc2NyaXB0aW9uOiBvcHRpb25zLmRlc2NyaXB0aW9uLFxuXHRcdFx0c2NoZW1hOlxuXHRcdFx0XHRjb2xsZWN0aW9uLmluZm8uc2NoZW1hID8/XG5cdFx0XHRcdFwiaHR0cHM6Ly9zY2hlbWEuZ2V0cG9zdG1hbi5jb20vanNvbi9jb2xsZWN0aW9uL3YyLjEuMC9jb2xsZWN0aW9uLmpzb25cIixcblx0XHR9LFxuXHR9O1xuXG5cdGlmIChhdXRoPy5hdXRoMERvbWFpbikge1xuXHRcdG5leHQuYXV0aCA9IHtcblx0XHRcdHR5cGU6IFwib2F1dGgyXCIsXG5cdFx0XHRvYXV0aDI6IFtcblx0XHRcdFx0eyBrZXk6IFwiZ3JhbnRfdHlwZVwiLCB2YWx1ZTogXCJhdXRob3JpemF0aW9uX2NvZGVfd2l0aF9wa2NlXCIsIHR5cGU6IFwic3RyaW5nXCIgfSxcblx0XHRcdFx0e1xuXHRcdFx0XHRcdGtleTogXCJhdXRoVXJsXCIsXG5cdFx0XHRcdFx0dmFsdWU6IFwiaHR0cHM6Ly97e2F1dGgwRG9tYWlufX0vYXV0aG9yaXplP2F1ZGllbmNlPXt7YXV0aDBBdWRpZW5jZX19XCIsXG5cdFx0XHRcdFx0dHlwZTogXCJzdHJpbmdcIixcblx0XHRcdFx0fSxcblx0XHRcdFx0e1xuXHRcdFx0XHRcdGtleTogXCJhY2Nlc3NUb2tlblVybFwiLFxuXHRcdFx0XHRcdHZhbHVlOiBcImh0dHBzOi8ve3thdXRoMERvbWFpbn19L29hdXRoL3Rva2VuXCIsXG5cdFx0XHRcdFx0dHlwZTogXCJzdHJpbmdcIixcblx0XHRcdFx0fSxcblx0XHRcdFx0eyBrZXk6IFwiY2xpZW50SWRcIiwgdmFsdWU6IFwie3thdXRoMENsaWVudElkfX1cIiwgdHlwZTogXCJzdHJpbmdcIiB9LFxuXHRcdFx0XHR7IGtleTogXCJzY29wZVwiLCB2YWx1ZTogb3B0aW9ucy5zY29wZXMsIHR5cGU6IFwic3RyaW5nXCIgfSxcblx0XHRcdFx0eyBrZXk6IFwicmVkaXJlY3RfdXJpXCIsIHZhbHVlOiBvcHRpb25zLmNhbGxiYWNrc1swXSwgdHlwZTogXCJzdHJpbmdcIiB9LFxuXHRcdFx0XHR7IGtleTogXCJ1c2VCcm93c2VyXCIsIHZhbHVlOiBcInRydWVcIiwgdHlwZTogXCJib29sZWFuXCIgfSxcblx0XHRcdFx0eyBrZXk6IFwiYWRkVG9rZW5Ub1wiLCB2YWx1ZTogXCJoZWFkZXJcIiwgdHlwZTogXCJzdHJpbmdcIiB9LFxuXHRcdFx0XHR7IGtleTogXCJjaGFsbGVuZ2VBbGdvcml0aG1cIiwgdmFsdWU6IFwiUzI1NlwiLCB0eXBlOiBcInN0cmluZ1wiIH0sXG5cdFx0XHRcdHsga2V5OiBcImNsaWVudF9hdXRoZW50aWNhdGlvblwiLCB2YWx1ZTogXCJib2R5XCIsIHR5cGU6IFwic3RyaW5nXCIgfSxcblx0XHRcdFx0eyBrZXk6IFwiY2xpZW50U2VjcmV0XCIsIHZhbHVlOiBcIlwiLCB0eXBlOiBcInN0cmluZ1wiIH0sXG5cdFx0XHRcdHsga2V5OiBcInRva2VuTmFtZVwiLCB2YWx1ZTogYCR7cHJvamVjdE5hbWV9IEFjY2VzcyBUb2tlbmAsIHR5cGU6IFwic3RyaW5nXCIgfSxcblx0XHRcdF0sXG5cdFx0fTtcblx0fVxuXG5cdG5leHQuaXRlbSA9IHJld3JpdGVDb2xsZWN0aW9uSXRlbXMoY29sbGVjdGlvbi5pdGVtID8/IFtdLCB7XG5cdFx0bWFya0xpc3RBbm9ueW1vdXM6IHRydWUsXG5cdH0pO1xuXHRyZXR1cm4gbmV4dDtcbn1cblxuZnVuY3Rpb24gcmV3cml0ZUNvbGxlY3Rpb25JdGVtcyhcblx0aXRlbXM6IFBvc3RtYW5JdGVtW10sXG5cdG9wdHM6IHsgbWFya0xpc3RBbm9ueW1vdXM6IGJvb2xlYW4gfSxcbik6IFBvc3RtYW5JdGVtW10ge1xuXHRyZXR1cm4gaXRlbXMubWFwKChpdGVtKSA9PiB7XG5cdFx0aWYgKGl0ZW0uaXRlbSAhPSBudWxsKSB7XG5cdFx0XHRyZXR1cm4geyAuLi5pdGVtLCBpdGVtOiByZXdyaXRlQ29sbGVjdGlvbkl0ZW1zKGl0ZW0uaXRlbSwgb3B0cykgfTtcblx0XHR9XG5cdFx0Y29uc3QgcmVxdWVzdCA9IGl0ZW0ucmVxdWVzdDtcblx0XHRpZiAocmVxdWVzdCA9PSBudWxsKSB7XG5cdFx0XHRyZXR1cm4gaXRlbTtcblx0XHR9XG5cdFx0Y29uc3QgbWV0aG9kID0gKHJlcXVlc3QubWV0aG9kID8/IFwiR0VUXCIpLnRvVXBwZXJDYXNlKCk7XG5cdFx0Y29uc3QgcmF3VXJsID0gcmVxdWVzdFVybFJhdyhyZXF1ZXN0KTtcblx0XHRjb25zdCBuZXh0UmVxdWVzdDogUG9zdG1hblJlcXVlc3QgPSB7XG5cdFx0XHQuLi5yZXF1ZXN0LFxuXHRcdFx0dXJsOiB0b1Bvc3RtYW5VcmwocmF3VXJsKSxcblx0XHR9O1xuXHRcdC8vIExpc3QgSGVsbG8gc3RheXMgYW5vbnltb3VzIChtYXRjaGVzIHNjYWZmb2xkIEFsbG93QW5vbnltb3VzIG9uIEdFVCAvaGVsbG8pLlxuXHRcdGlmIChcblx0XHRcdG9wdHMubWFya0xpc3RBbm9ueW1vdXMgJiZcblx0XHRcdG1ldGhvZCA9PT0gXCJHRVRcIiAmJlxuXHRcdFx0bm9ybWFsaXplUGF0aChyYXdVcmwpID09PSBcIi9oZWxsb1wiICYmXG5cdFx0XHQhcmF3VXJsLmluY2x1ZGVzKFwiLzpcIilcblx0XHQpIHtcblx0XHRcdG5leHRSZXF1ZXN0LmF1dGggPSB7IHR5cGU6IFwibm9hdXRoXCIgfTtcblx0XHR9XG5cdFx0cmV0dXJuIHsgLi4uaXRlbSwgcmVxdWVzdDogbmV4dFJlcXVlc3QgfTtcblx0fSk7XG59XG5cbmZ1bmN0aW9uIHJlcXVlc3RVcmxSYXcocmVxdWVzdDogUG9zdG1hblJlcXVlc3QpOiBzdHJpbmcge1xuXHRjb25zdCB1cmwgPSByZXF1ZXN0LnVybDtcblx0aWYgKHR5cGVvZiB1cmwgPT09IFwic3RyaW5nXCIpIHtcblx0XHRyZXR1cm4gdXJsO1xuXHR9XG5cdGlmICh1cmw/LnJhdykge1xuXHRcdHJldHVybiB1cmwucmF3O1xuXHR9XG5cdGNvbnN0IGhvc3QgPSB1cmw/Lmhvc3Q/LlswXSA/PyBcInt7YmFzZVVybH19XCI7XG5cdGNvbnN0IHBhdGggPSAodXJsPy5wYXRoID8/IFtdKS5qb2luKFwiL1wiKTtcblx0cmV0dXJuIHBhdGggPyBgJHtob3N0fS8ke3BhdGh9YCA6IGhvc3Q7XG59XG5cbi8qKiBPcGVuQVBJIGB7aWR9YCDihpIgUG9zdG1hbiBgOmlkYCwgd2l0aG91dCB0b3VjaGluZyBge3t2YXJpYWJsZXN9fWAuICovXG5leHBvcnQgZnVuY3Rpb24gb3BlbkFwaVBhdGhQYXJhbXNUb0NvbG9uKHVybDogc3RyaW5nKTogc3RyaW5nIHtcblx0cmV0dXJuIHVybC5yZXBsYWNlKC8oPzwhXFx7KVxceyhbQS1aYS16X11bXFx3XSopXFx9KD8hXFx9KS9nLCBcIjokMVwiKTtcbn1cblxuZnVuY3Rpb24gbm9ybWFsaXplUGF0aChyYXdVcmw6IHN0cmluZyk6IHN0cmluZyB7XG5cdGNvbnN0IHdpdGhvdXRCYXNlID0gcmF3VXJsLnJlcGxhY2UoL1xce1xce2Jhc2VVcmxcXH1cXH0vZywgXCJcIikuc3BsaXQoXCI/XCIpWzBdID8/IFwiXCI7XG5cdGNvbnN0IHdpdGhTbGFzaCA9IHdpdGhvdXRCYXNlLnN0YXJ0c1dpdGgoXCIvXCIpID8gd2l0aG91dEJhc2UgOiBgLyR7d2l0aG91dEJhc2V9YDtcblx0cmV0dXJuIG9wZW5BcGlQYXRoUGFyYW1zVG9Db2xvbih3aXRoU2xhc2gpO1xufVxuXG4vKiogUHJlZmVyIFBvc3RtYW4gdGVtcGxhdGUgVVJMIHNoYXBlIHVzZWQgYnkgZXhpc3RpbmcgTG9jYWwgVmlldyAvIEFQSSB1cGxvYWRzLiAqL1xuZnVuY3Rpb24gdG9Qb3N0bWFuVXJsKHJhd1VybDogc3RyaW5nKTogUG9zdG1hblJlcXVlc3RbXCJ1cmxcIl0ge1xuXHRsZXQgcGF0aFBhcnQgPSByYXdVcmwucmVwbGFjZSgvXFx7XFx7YmFzZVVybFxcfVxcfS9nLCBcIlwiKTtcblx0aWYgKCFwYXRoUGFydC5zdGFydHNXaXRoKFwiL1wiKSkge1xuXHRcdHBhdGhQYXJ0ID0gYC8ke3BhdGhQYXJ0fWA7XG5cdH1cblx0Ly8gb3BlbmFwaS10by1wb3N0bWFuIHVzZXMge2lkfTsgTG9jYWwgVmlldyAvIHByaW9yIGNvbGxlY3Rpb25zIHVzZSA6aWRcblx0cGF0aFBhcnQgPSBvcGVuQXBpUGF0aFBhcmFtc1RvQ29sb24ocGF0aFBhcnQpO1xuXHRjb25zdCBzZWdtZW50cyA9IHBhdGhQYXJ0LnNwbGl0KFwiL1wiKS5maWx0ZXIoQm9vbGVhbik7XG5cdHJldHVybiB7XG5cdFx0cmF3OiBge3tiYXNlVXJsfX0ke3BhdGhQYXJ0fWAsXG5cdFx0aG9zdDogW1wie3tiYXNlVXJsfX1cIl0sXG5cdFx0cGF0aDogc2VnbWVudHMsXG5cdH07XG59XG4iXSwibmFtZXMiOlsiYXBwbHlQb3N0bWFuQXV0aE92ZXJsYXkiLCJvcGVuQXBpUGF0aFBhcmFtc1RvQ29sb24iLCJvcGVuQXBpVG9Qb3N0bWFuQ29sbGVjdGlvbiIsImNvbnZlcnRBc3luYyIsImRhdGEiLCJvcHRpb25zIiwiUHJvbWlzZSIsInJlc29sdmUiLCJyZWplY3QiLCJjb252ZXJ0ZXIiLCJjb252ZXJ0IiwidHlwZSIsImVyciIsInJlc3VsdCIsImRvY3VtZW50IiwiZm9sZGVyU3RyYXRlZ3kiLCJyZXF1ZXN0TmFtZVNvdXJjZSIsImluY2x1ZGVBdXRoSW5mb0luRXhhbXBsZSIsIm91dHB1dCIsIkVycm9yIiwicmVhc29uIiwiY29sbGVjdGlvbiIsInByb2plY3ROYW1lIiwiYXV0aCIsIm5leHQiLCJpbmZvIiwibmFtZSIsImRlc2NyaXB0aW9uIiwic2NoZW1hIiwiYXV0aDBEb21haW4iLCJvYXV0aDIiLCJrZXkiLCJ2YWx1ZSIsInNjb3BlcyIsImNhbGxiYWNrcyIsIml0ZW0iLCJyZXdyaXRlQ29sbGVjdGlvbkl0ZW1zIiwibWFya0xpc3RBbm9ueW1vdXMiLCJpdGVtcyIsIm9wdHMiLCJtYXAiLCJyZXF1ZXN0IiwibWV0aG9kIiwidG9VcHBlckNhc2UiLCJyYXdVcmwiLCJyZXF1ZXN0VXJsUmF3IiwibmV4dFJlcXVlc3QiLCJ1cmwiLCJ0b1Bvc3RtYW5VcmwiLCJub3JtYWxpemVQYXRoIiwiaW5jbHVkZXMiLCJyYXciLCJob3N0IiwicGF0aCIsImpvaW4iLCJyZXBsYWNlIiwid2l0aG91dEJhc2UiLCJzcGxpdCIsIndpdGhTbGFzaCIsInN0YXJ0c1dpdGgiLCJwYXRoUGFydCIsInNlZ21lbnRzIiwiZmlsdGVyIiwiQm9vbGVhbiJdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7UUFrRmdCQTtlQUFBQTs7UUFxR0FDO2VBQUFBOztRQXZITUM7ZUFBQUE7OzsyRUFoRUE7Ozs7OztBQTRDdEIsU0FBU0MsYUFDUkMsSUFBNkIsRUFDN0JDLE9BQWdDO0lBRWhDLE9BQU8sSUFBSUMsUUFBUSxDQUFDQyxTQUFTQztRQUM1QkMsMkJBQVMsQ0FBQ0MsT0FBTyxDQUNoQjtZQUFFQyxNQUFNO1lBQVFQO1FBQUssR0FDckJDLFNBQ0EsQ0FBQ08sS0FBbUJDO1lBQ25CLElBQUlELEtBQUs7Z0JBQ1JKLE9BQU9JO2dCQUNQO1lBQ0Q7WUFDQUwsUUFBUU07UUFDVDtJQUVGO0FBQ0Q7QUFHTyxlQUFlWCwyQkFDckJZLFFBQWlDO0lBRWpDLE1BQU1ELFNBQVMsTUFBTVYsYUFBYVcsVUFBVTtRQUMzQ0MsZ0JBQWdCO1FBQ2hCQyxtQkFBbUI7UUFDbkJDLDBCQUEwQjtJQUMzQjtJQUNBLElBQUksQ0FBQ0osT0FBT0EsTUFBTSxJQUFJQSxPQUFPSyxNQUFNLEVBQUUsQ0FBQyxFQUFFLEVBQUVkLFFBQVEsTUFBTTtRQUN2RCxNQUFNLElBQUllLE1BQU1OLE9BQU9PLE1BQU0sSUFBSTtJQUNsQztJQUNBLE9BQU9QLE9BQU9LLE1BQU0sQ0FBQyxFQUFFLENBQUNkLElBQUk7QUFDN0I7QUFNTyxTQUFTSix3QkFDZnFCLFVBQTZCLEVBQzdCQyxXQUFtQixFQUNuQkMsSUFBMEIsRUFDMUJsQixPQUlDO0lBRUQsTUFBTW1CLE9BQTBCO1FBQy9CLEdBQUdILFVBQVU7UUFDYkksTUFBTTtZQUNMLEdBQUdKLFdBQVdJLElBQUk7WUFDbEJD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