@zuplo/cli 6.62.7 → 6.62.9

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (134) hide show
  1. package/README.md +36 -4
  2. package/dist/__tests__/import-openapi-utils.test.js +1 -2
  3. package/dist/__tests__/import-openapi-utils.test.js.map +1 -1
  4. package/dist/__tests__/import-openapi.test.js +1 -5
  5. package/dist/__tests__/import-openapi.test.js.map +1 -1
  6. package/dist/cli.js +2 -0
  7. package/dist/cli.js.map +1 -1
  8. package/dist/cmds/open-api/convert.d.ts +9 -0
  9. package/dist/cmds/open-api/convert.d.ts.map +1 -0
  10. package/dist/cmds/open-api/convert.js +66 -0
  11. package/dist/cmds/open-api/convert.js.map +1 -0
  12. package/dist/cmds/open-api/index.d.ts +4 -0
  13. package/dist/cmds/open-api/index.d.ts.map +1 -0
  14. package/dist/cmds/open-api/index.js +15 -0
  15. package/dist/cmds/open-api/index.js.map +1 -0
  16. package/dist/cmds/open-api/merge.d.ts +9 -0
  17. package/dist/cmds/open-api/merge.d.ts.map +1 -0
  18. package/dist/cmds/open-api/merge.js +57 -0
  19. package/dist/cmds/open-api/merge.js.map +1 -0
  20. package/dist/cmds/open-api/overlay.d.ts +9 -0
  21. package/dist/cmds/open-api/overlay.d.ts.map +1 -0
  22. package/dist/cmds/open-api/overlay.js +85 -0
  23. package/dist/cmds/open-api/overlay.js.map +1 -0
  24. package/dist/cmds/source/import-openapi.d.ts +1 -0
  25. package/dist/cmds/source/import-openapi.d.ts.map +1 -1
  26. package/dist/cmds/source/import-openapi.js +6 -9
  27. package/dist/cmds/source/import-openapi.js.map +1 -1
  28. package/dist/cmds/source/migrate.js +1 -1
  29. package/dist/cmds/source/migrate.js.map +1 -1
  30. package/dist/common/file-format.d.ts +25 -0
  31. package/dist/common/file-format.d.ts.map +1 -0
  32. package/dist/common/file-format.js +72 -0
  33. package/dist/common/file-format.js.map +1 -0
  34. package/dist/common/runner.d.ts.map +1 -0
  35. package/dist/common/runner.js.map +1 -0
  36. package/dist/common/utils/stringify-config.d.ts.map +1 -0
  37. package/dist/common/utils/stringify-config.js.map +1 -0
  38. package/dist/common/utils/stringify-config.test.d.ts.map +1 -0
  39. package/dist/common/utils/stringify-config.test.js.map +1 -0
  40. package/dist/open-api/convert/convert-engine.d.ts +26 -0
  41. package/dist/open-api/convert/convert-engine.d.ts.map +1 -0
  42. package/dist/open-api/convert/convert-engine.js +20 -0
  43. package/dist/open-api/convert/convert-engine.js.map +1 -0
  44. package/dist/open-api/convert/convert-engine.spec.d.ts +2 -0
  45. package/dist/open-api/convert/convert-engine.spec.d.ts.map +1 -0
  46. package/dist/open-api/convert/convert-engine.spec.js +268 -0
  47. package/dist/open-api/convert/convert-engine.spec.js.map +1 -0
  48. package/dist/open-api/convert/handler.d.ts +9 -0
  49. package/dist/open-api/convert/handler.d.ts.map +1 -0
  50. package/dist/open-api/convert/handler.js +54 -0
  51. package/dist/open-api/convert/handler.js.map +1 -0
  52. package/dist/open-api/convert/handler.spec.d.ts +2 -0
  53. package/dist/open-api/convert/handler.spec.d.ts.map +1 -0
  54. package/dist/open-api/convert/handler.spec.js +291 -0
  55. package/dist/open-api/convert/handler.spec.js.map +1 -0
  56. package/dist/open-api/merge/ajv.d.ts.map +1 -0
  57. package/dist/open-api/merge/ajv.js.map +1 -0
  58. package/dist/open-api/merge/handler.d.ts +9 -0
  59. package/dist/open-api/merge/handler.d.ts.map +1 -0
  60. package/dist/{source/import-openapi → open-api/merge}/handler.js +16 -42
  61. package/dist/open-api/merge/handler.js.map +1 -0
  62. package/dist/open-api/merge/handler.spec.d.ts +2 -0
  63. package/dist/open-api/merge/handler.spec.d.ts.map +1 -0
  64. package/dist/open-api/merge/handler.spec.js +335 -0
  65. package/dist/open-api/merge/handler.spec.js.map +1 -0
  66. package/dist/open-api/merge/interfaces.d.ts.map +1 -0
  67. package/dist/open-api/merge/interfaces.js.map +1 -0
  68. package/dist/open-api/merge/merge-engine.d.ts +23 -0
  69. package/dist/open-api/merge/merge-engine.d.ts.map +1 -0
  70. package/dist/open-api/merge/merge-engine.js +33 -0
  71. package/dist/open-api/merge/merge-engine.js.map +1 -0
  72. package/dist/open-api/merge/merge-engine.spec.d.ts +2 -0
  73. package/dist/open-api/merge/merge-engine.spec.d.ts.map +1 -0
  74. package/dist/open-api/merge/merge-engine.spec.js +117 -0
  75. package/dist/open-api/merge/merge-engine.spec.js.map +1 -0
  76. package/dist/open-api/merge/utils.d.ts.map +1 -0
  77. package/dist/open-api/merge/utils.js.map +1 -0
  78. package/dist/open-api/overlay/handler.d.ts +10 -0
  79. package/dist/open-api/overlay/handler.d.ts.map +1 -0
  80. package/dist/open-api/overlay/handler.js +92 -0
  81. package/dist/open-api/overlay/handler.js.map +1 -0
  82. package/dist/open-api/overlay/handler.spec.d.ts +2 -0
  83. package/dist/open-api/overlay/handler.spec.d.ts.map +1 -0
  84. package/dist/open-api/overlay/handler.spec.js +304 -0
  85. package/dist/open-api/overlay/handler.spec.js.map +1 -0
  86. package/dist/open-api/overlay/overlay-engine.d.ts +55 -0
  87. package/dist/open-api/overlay/overlay-engine.d.ts.map +1 -0
  88. package/dist/open-api/overlay/overlay-engine.js +280 -0
  89. package/dist/open-api/overlay/overlay-engine.js.map +1 -0
  90. package/dist/open-api/overlay/overlay-engine.spec.d.ts +2 -0
  91. package/dist/open-api/overlay/overlay-engine.spec.d.ts.map +1 -0
  92. package/dist/open-api/overlay/overlay-engine.spec.js +609 -0
  93. package/dist/open-api/overlay/overlay-engine.spec.js.map +1 -0
  94. package/dist/source/migrate/dev-portal/handler.d.ts.map +1 -0
  95. package/dist/{cmds/source/migrate → source/migrate/dev-portal}/handler.js +53 -4
  96. package/dist/source/migrate/dev-portal/handler.js.map +1 -0
  97. package/dist/{cmds/source/migrate → source/migrate/dev-portal}/types.d.ts +12 -1
  98. package/dist/source/migrate/dev-portal/types.d.ts.map +1 -0
  99. package/dist/source/migrate/dev-portal/types.js.map +1 -0
  100. package/dist/tsconfig.tsbuildinfo +1 -1
  101. package/package.json +5 -4
  102. package/dist/cmds/source/migrate/handler.d.ts.map +0 -1
  103. package/dist/cmds/source/migrate/handler.js.map +0 -1
  104. package/dist/cmds/source/migrate/runner.d.ts.map +0 -1
  105. package/dist/cmds/source/migrate/runner.js.map +0 -1
  106. package/dist/cmds/source/migrate/stringify-config.d.ts.map +0 -1
  107. package/dist/cmds/source/migrate/stringify-config.js.map +0 -1
  108. package/dist/cmds/source/migrate/stringify-config.test.d.ts.map +0 -1
  109. package/dist/cmds/source/migrate/stringify-config.test.js.map +0 -1
  110. package/dist/cmds/source/migrate/types.d.ts.map +0 -1
  111. package/dist/cmds/source/migrate/types.js.map +0 -1
  112. package/dist/source/import-openapi/ajv.d.ts.map +0 -1
  113. package/dist/source/import-openapi/ajv.js.map +0 -1
  114. package/dist/source/import-openapi/handler.d.ts +0 -13
  115. package/dist/source/import-openapi/handler.d.ts.map +0 -1
  116. package/dist/source/import-openapi/handler.js.map +0 -1
  117. package/dist/source/import-openapi/interfaces.d.ts.map +0 -1
  118. package/dist/source/import-openapi/interfaces.js.map +0 -1
  119. package/dist/source/import-openapi/utils.d.ts.map +0 -1
  120. package/dist/source/import-openapi/utils.js.map +0 -1
  121. /package/dist/{cmds/source/migrate → common}/runner.d.ts +0 -0
  122. /package/dist/{cmds/source/migrate → common}/runner.js +0 -0
  123. /package/dist/{cmds/source/migrate → common/utils}/stringify-config.d.ts +0 -0
  124. /package/dist/{cmds/source/migrate → common/utils}/stringify-config.js +0 -0
  125. /package/dist/{cmds/source/migrate → common/utils}/stringify-config.test.d.ts +0 -0
  126. /package/dist/{cmds/source/migrate → common/utils}/stringify-config.test.js +0 -0
  127. /package/dist/{source/import-openapi → open-api/merge}/ajv.d.ts +0 -0
  128. /package/dist/{source/import-openapi → open-api/merge}/ajv.js +0 -0
  129. /package/dist/{source/import-openapi → open-api/merge}/interfaces.d.ts +0 -0
  130. /package/dist/{source/import-openapi → open-api/merge}/interfaces.js +0 -0
  131. /package/dist/{source/import-openapi → open-api/merge}/utils.d.ts +0 -0
  132. /package/dist/{source/import-openapi → open-api/merge}/utils.js +0 -0
  133. /package/dist/{cmds/source/migrate → source/migrate/dev-portal}/handler.d.ts +0 -0
  134. /package/dist/{cmds/source/migrate → source/migrate/dev-portal}/types.js +0 -0
@@ -1 +0,0 @@
1
- {"version":3,"file":"stringify-config.js","sourceRoot":"","sources":["../../../../src/cmds/source/migrate/stringify-config.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAE,MAAM,sBAAsB,CAAC;AAIjD,MAAM,SAAS,GAAG,0BAA0B,CAAC;AAM7C,MAAM,QAAQ,GAAe,CAAC,KAAK,EAAE,OAAO,EAAE,SAAS,EAAE,EAAE;IACzD,IAAI,OAAO,KAAK,KAAK,QAAQ,IAAI,SAAS,CAAC,IAAI,CAAC,KAAK,CAAC,EAAE,CAAC;QACvD,OAAO,KAAK;aACT,KAAK,CAAC,IAAI,MAAM,CAAC,SAAS,EAAE,GAAG,CAAC,CAAC;aACjC,GAAG,CAAC,CAAC,OAAO,EAAE,CAAC,EAAE,EAAE,CAElB,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,eAAe,OAAO,EAAE,CAAC,CAAC,CAAC,OAAO,IAAI,IAAI,CAAC,SAAS,CAAC,OAAO,CAAC,CACtE;aACA,MAAM,CAAC,OAAO,CAAC;aACf,IAAI,CAAC,KAAK,CAAC,CAAC;IACjB,CAAC;IAED,OAAO,SAAS,CAAC,KAAK,CAAC,CAAC;AAC1B,CAAC,CAAC;AAEF,MAAM,CAAC,MAAM,eAAe,GAAG,CAAC,GAAY,EAAE,EAAE,CAAC,SAAS,CAAC,GAAG,EAAE,QAAQ,EAAE,CAAC,CAAC,CAAC","sourcesContent":["import { stringify } from \"javascript-stringify\";\n\ntype ReplacerFn = NonNullable<Parameters<typeof stringify>[1]>;\n\nconst ENV_REGEX = /\\$env\\(([a-zA-Z0-9_]+)\\)/;\n\n/**\n * Turn \"prefix $env(NAME) suffix\"\n * into `\"prefix \" + process.env.NAME + \" suffix\"`\n */\nconst replacer: ReplacerFn = (value, _indent, stringify) => {\n if (typeof value === \"string\" && ENV_REGEX.test(value)) {\n return value\n .split(new RegExp(ENV_REGEX, \"g\"))\n .map((varName, i) =>\n // even indices → literal text, odd → env name\n i % 2 ? `process.env.${varName}` : varName && JSON.stringify(varName)\n )\n .filter(Boolean)\n .join(\" + \");\n }\n\n return stringify(value);\n};\n\nexport const stringifyConfig = (val: unknown) => stringify(val, replacer, 2);\n"]}
@@ -1 +0,0 @@
1
- {"version":3,"file":"stringify-config.test.d.ts","sourceRoot":"","sources":["../../../../src/cmds/source/migrate/stringify-config.test.ts"],"names":[],"mappings":""}
@@ -1 +0,0 @@
1
- {"version":3,"file":"stringify-config.test.js","sourceRoot":"","sources":["../../../../src/cmds/source/migrate/stringify-config.test.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,EAAE,EAAE,MAAM,WAAW,CAAC;AACzC,OAAO,EAAE,WAAW,EAAE,MAAM,aAAa,CAAC;AAC1C,OAAO,EAAE,eAAe,EAAE,MAAM,uBAAuB,CAAC;AAExD,QAAQ,CAAC,iBAAiB,EAAE,GAAG,EAAE;IAC/B,EAAE,CAAC,gCAAgC,EAAE,GAAG,EAAE;QACxC,MAAM,MAAM,GAAG;YAEb,OAAO,EAAE,IAAI;YACb,KAAK,EAAE,EAAE;YACT,KAAK,EAAE,IAAI;YACX,KAAK,EAAE,IAAI;YACX,UAAU,EAAE,SAAS;YACrB,YAAY,EAAE,gBAAgB;YAG9B,MAAM,EAAE,eAAe;YACvB,KAAK,EAAE,oBAAoB;YAG3B,KAAK,EAAE,wBAAwB;YAC/B,OAAO,EAAE,sBAAsB;YAC/B,OAAO,EAAE,mCAAmC;YAG5C,OAAO,EAAE,sCAAsC;YAG/C,MAAM,EAAE,0BAA0B;YAGlC,WAAW,EAAE,kCAAkC;YAC/C,SAAS,EAAE,wBAAwB;YAGnC,QAAQ,EAAE;gBACR,OAAO,EAAE,mBAAmB;gBAC5B,KAAK,EAAE,4BAA4B;aACpC;YAGD,UAAU,EAAE;gBACV,iBAAiB;gBACjB,aAAa;gBACb,2BAA2B;gBAC3B,uBAAuB;aACxB;YAGD,cAAc,EAAE;gBACd,KAAK,EAAE;oBACL,QAAQ,EAAE,uBAAuB;oBACjC,MAAM,EAAE,yBAAyB;oBACjC,MAAM,EAAE,CAAC,MAAM,EAAE,mBAAmB,CAAC;iBACtC;aACF;SACF,CAAC;QAEF,MAAM,QAAQ,GAAG;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;EAoCnB,CAAC;QAEC,WAAW,CAAC,eAAe,CAAC,MAAM,CAAC,EAAE,QAAQ,CAAC,CAAC;IACjD,CAAC,CAAC,CAAC;AACL,CAAC,CAAC,CAAC","sourcesContent":["import { describe, it } from \"node:test\";\nimport { strictEqual } from \"node:assert\";\nimport { stringifyConfig } from \"./stringify-config.js\";\n\ndescribe(\"stringifyConfig\", () => {\n it(\"should handle env var patterns\", () => {\n const config = {\n // Simple values without env vars\n enabled: true,\n count: 42,\n ratio: 3.14,\n empty: null,\n notDefined: undefined,\n normalString: \"regular string\",\n\n // Env vars - complete replacement\n apiKey: \"$env(API_KEY)\",\n dbUrl: \"$env(DATABASE_URL)\",\n\n // Env vars with prefixes, suffixes, and both\n title: \"$env(APP_TITLE) Portal\",\n baseUrl: \"https://$env(DOMAIN)\",\n fullUrl: \"https://$env(HOST):$env(PORT)/api\",\n\n // Multiple env vars in one string\n message: \"$env(APP_NAME) version $env(VERSION)\",\n\n // Env vars with underscores and numbers\n secret: \"$env(JWT_SECRET_KEY_123)\",\n\n // Special characters in non-env parts\n description: 'App \"with quotes\" $env(APP_NAME)',\n multiline: \"Line1\\nLine2 $env(VAR)\",\n\n // Nested objects\n metadata: {\n favicon: \"$env(FAVICON_URL)\",\n title: \"Welcome to $env(SITE_NAME)\",\n },\n\n // Arrays with mixed content\n navigation: [\n \"$env(HOME_PATH)\",\n \"static/path\",\n \"prefix $env(DYNAMIC_PATH)\",\n \"$env(API_PATH) suffix\",\n ],\n\n // Deep nesting\n authentication: {\n oauth: {\n clientId: \"$env(OAUTH_CLIENT_ID)\",\n issuer: \"$env(OAUTH_ISSUER)/auth\",\n scopes: [\"read\", \"$env(OAUTH_SCOPE)\"],\n },\n },\n };\n\n const expected = `{\n enabled: true,\n count: 42,\n ratio: 3.14,\n empty: null,\n notDefined: undefined,\n normalString: 'regular string',\n apiKey: process.env.API_KEY,\n dbUrl: process.env.DATABASE_URL,\n title: process.env.APP_TITLE + \" Portal\",\n baseUrl: \"https://\" + process.env.DOMAIN,\n fullUrl: \"https://\" + process.env.HOST + \":\" + process.env.PORT + \"/api\",\n message: process.env.APP_NAME + \" version \" + process.env.VERSION,\n secret: process.env.JWT_SECRET_KEY_123,\n description: \"App \\\\\"with quotes\\\\\" \" + process.env.APP_NAME,\n multiline: \"Line1\\\\nLine2 \" + process.env.VAR,\n metadata: {\n favicon: process.env.FAVICON_URL,\n title: \"Welcome to \" + process.env.SITE_NAME\n },\n navigation: [\n process.env.HOME_PATH,\n 'static/path',\n \"prefix \" + process.env.DYNAMIC_PATH,\n process.env.API_PATH + \" suffix\"\n ],\n authentication: {\n oauth: {\n clientId: process.env.OAUTH_CLIENT_ID,\n issuer: process.env.OAUTH_ISSUER + \"/auth\",\n scopes: [\n 'read',\n process.env.OAUTH_SCOPE\n ]\n }\n }\n}`;\n\n strictEqual(stringifyConfig(config), expected);\n });\n});\n"]}
@@ -1 +0,0 @@
1
- {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../../../src/cmds/source/migrate/types.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,eAAe,EAAE,aAAa,EAAE,MAAM,cAAc,CAAC;AACnE,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,aAAa,CAAC;AAE1C,MAAM,WAAW,SAAS;IACxB,GAAG,EAAE,MAAM,CAAC;IACZ,KAAK,EAAE,OAAO,CAAC;CAChB;AAED,MAAM,WAAW,YAAY;IAC3B,QAAQ,CAAC,EAAE;QACT,OAAO,CAAC,EAAE,MAAM,CAAC;QACjB,KAAK,CAAC,EAAE,MAAM,CAAC;KAChB,CAAC;IACF,IAAI,CAAC,EAAE;QACL,KAAK,CAAC,EAAE,MAAM,CAAC;KAChB,CAAC;IACF,UAAU,CAAC,EAAE,oBAAoB,EAAE,CAAC;IACpC,IAAI,CAAC,EAAE;QACL,IAAI,EAAE,MAAM,GAAG,KAAK,CAAC;QACrB,KAAK,EAAE,MAAM,CAAC;QACd,IAAI,EAAE,MAAM,CAAC;QACb,OAAO,CAAC,EAAE;YACR,gBAAgB,CAAC,EAAE,MAAM,CAAC;YAC1B,iBAAiB,CAAC,EAAE,OAAO,CAAC;YAC5B,cAAc,CAAC,EAAE,OAAO,CAAC;YACzB,iBAAiB,CAAC,EAAE,cAAc,GAAG,QAAQ,GAAG,MAAM,CAAC;YACvD,aAAa,CAAC,EAAE,OAAO,CAAC;SACzB,CAAC;KACH,EAAE,CAAC;IACJ,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,cAAc,CAAC,EAAE;QACf,IAAI,EAAE,MAAM,CAAC;QACb,QAAQ,CAAC,EAAE,MAAM,CAAC;QAClB,MAAM,CAAC,EAAE,MAAM,CAAC;QAChB,QAAQ,CAAC,EAAE,MAAM,CAAC;QAClB,MAAM,CAAC,EAAE,MAAM,EAAE,CAAC;QAClB,UAAU,CAAC,EAAE,MAAM,CAAC;QACpB,UAAU,CAAC,EAAE,MAAM,CAAC;QACpB,MAAM,CAAC,EAAE,MAAM,CAAC;QAChB,WAAW,CAAC,EAAE,MAAM,CAAC;KACtB,CAAC;IACF,OAAO,CAAC,EAAE;QACR,OAAO,EAAE,OAAO,CAAC;KAClB,CAAC;CACH;AAED,MAAM,MAAM,oBAAoB,GAC5B,MAAM,GACN;IACE,IAAI,EAAE,KAAK,GAAG,UAAU,GAAG,MAAM,CAAC;IAClC,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,EAAE,CAAC,EAAE,MAAM,CAAC;IACZ,IAAI,CAAC,EAAE,MAAM,GAAG;QAAE,IAAI,EAAE,KAAK,CAAC;QAAC,IAAI,EAAE,MAAM,CAAA;KAAE,CAAC;IAC9C,KAAK,CAAC,EAAE,oBAAoB,EAAE,CAAC;IAC/B,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,KAAK,CAAC,EAAE;QACN,KAAK,EAAE,MAAM,CAAC;QACd,KAAK,EACD,OAAO,GACP,MAAM,GACN,QAAQ,GACR,KAAK,GACL,QAAQ,GACR,QAAQ,GACR,MAAM,CAAC;KACZ,CAAC;CACH,CAAC;AAEN,MAAM,WAAW,eAAe;IAC9B,eAAe,EAAE,MAAM,CAAC;IACxB,KAAK,EAAE,OAAO,CAAC;CAChB;AAED,MAAM,MAAM,aAAa,GAAG;IAC1B,WAAW,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;IACtC,eAAe,CAAC,EAAE,eAAe,CAAC;IAClC,OAAO,CAAC,EAAE,aAAa,CAAC;IACxB,YAAY,CAAC,EAAE,YAAY,CAAC;CAC7B,CAAC;AAEF,MAAM,MAAM,eAAe,GAAG,MAAM,CAAC,eAAe,EAAE,aAAa,CAAC,CAAC"}
@@ -1 +0,0 @@
1
- {"version":3,"file":"types.js","sourceRoot":"","sources":["../../../../src/cmds/source/migrate/types.ts"],"names":[],"mappings":"","sourcesContent":["import type { DevPortalConfig, SidebarConfig } from \"@zuplo/types\";\nimport type { Plugin } from \"./runner.js\";\n\nexport interface Arguments {\n dir: string;\n force: boolean;\n}\n\nexport interface ZudokuConfig {\n metadata?: {\n favicon?: string;\n title?: string;\n };\n site?: {\n title?: string;\n };\n navigation?: ZudokuNavigationItem[];\n apis?: {\n type: \"file\" | \"url\";\n input: string;\n path: string;\n options?: {\n examplesLanguage?: string;\n disablePlayground?: boolean;\n disableSidecar?: boolean;\n showVersionSelect?: \"if-available\" | \"always\" | \"hide\";\n expandAllTags?: boolean;\n };\n }[];\n basePath?: string;\n authentication?: {\n type: string;\n clientId?: string;\n domain?: string;\n audience?: string;\n scopes?: string[];\n tenantName?: string;\n policyName?: string;\n issuer?: string;\n clerkPubKey?: string;\n };\n apiKeys?: {\n enabled: boolean;\n };\n}\n\nexport type ZudokuNavigationItem =\n | string\n | {\n type: \"doc\" | \"category\" | \"link\";\n label?: string;\n file?: string;\n path?: string;\n to?: string;\n link?: string | { type: \"doc\"; file: string };\n items?: ZudokuNavigationItem[];\n icon?: string;\n badge?: {\n label: string;\n color:\n | \"green\"\n | \"blue\"\n | \"yellow\"\n | \"red\"\n | \"purple\"\n | \"indigo\"\n | \"gray\";\n };\n };\n\nexport interface MigrationConfig {\n absoluteBaseDir: string;\n force: boolean;\n}\n\nexport type MigrationData = {\n packageJson?: Record<string, unknown>;\n devPortalConfig?: DevPortalConfig;\n sidebar?: SidebarConfig;\n zudokuConfig?: ZudokuConfig;\n};\n\nexport type MigrationPlugin = Plugin<MigrationConfig, MigrationData>;\n"]}
@@ -1 +0,0 @@
1
- {"version":3,"file":"ajv.d.ts","sourceRoot":"","sources":["../../../src/source/import-openapi/ajv.ts"],"names":[],"mappings":"AAMA,MAAM,WAAW,WAAW,CAC1B,CAAC,SAAS,MAAM,GAAG,MAAM,EACzB,CAAC,GAAG,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,EACvB,CAAC,GAAG,OAAO;IAEX,OAAO,EAAE,CAAC,CAAC;IACX,YAAY,EAAE,MAAM,CAAC;IACrB,UAAU,EAAE,MAAM,CAAC;IACnB,MAAM,EAAE,CAAC,CAAC;IACV,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,MAAM,CAAC,EAAE,CAAC,CAAC;IACX,YAAY,CAAC,EAAE,eAAe,CAAC;IAC/B,IAAI,CAAC,EAAE,OAAO,CAAC;CAChB;AAGD,UAAU,aAAa;IACrB,EAAE,CAAC,EAAE,MAAM,CAAC;IACZ,GAAG,CAAC,EAAE,MAAM,CAAC;IACb,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,CAAC,CAAC,EAAE,MAAM,GAAG,GAAG,CAAC;CAClB;AACD,MAAM,WAAW,YAAa,SAAQ,aAAa;IACjD,EAAE,CAAC,EAAE,MAAM,CAAC;IACZ,GAAG,CAAC,EAAE,MAAM,CAAC;IACb,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,MAAM,CAAC,EAAE,KAAK,CAAC;IACf,CAAC,CAAC,EAAE,MAAM,GAAG,GAAG,CAAC;CAClB;AACD,MAAM,WAAW,WAAY,SAAQ,aAAa;IAChD,MAAM,EAAE,IAAI,CAAC;CACd;AACD,MAAM,MAAM,eAAe,GAAG,YAAY,GAAG,WAAW,CAAC"}
@@ -1 +0,0 @@
1
- {"version":3,"file":"ajv.js","sourceRoot":"","sources":["../../../src/source/import-openapi/ajv.ts"],"names":[],"mappings":"","sourcesContent":["/**\n * This file contains types copied from AJV to avoid a direct dependency on it.\n *\n */\n\n/** biome-ignore-all lint/suspicious/noExplicitAny: Third party api */\nexport interface ErrorObject<\n K extends string = string,\n P = Record<string, any>,\n S = unknown,\n> {\n keyword: K;\n instancePath: string;\n schemaPath: string;\n params: P;\n propertyName?: string;\n message?: string;\n schema?: S;\n parentSchema?: AnySchemaObject;\n data?: unknown;\n}\n\n// biome-ignore lint/style/useNamingConvention: Copy from AJV\ninterface _SchemaObject {\n id?: string;\n $id?: string;\n $schema?: string;\n [x: string]: any;\n}\nexport interface SchemaObject extends _SchemaObject {\n id?: string;\n $id?: string;\n $schema?: string;\n $async?: false;\n [x: string]: any;\n}\nexport interface AsyncSchema extends _SchemaObject {\n $async: true;\n}\nexport type AnySchemaObject = SchemaObject | AsyncSchema;\n"]}
@@ -1,13 +0,0 @@
1
- import { CommonArgs } from "../../common/args.js";
2
- export interface Arguments extends CommonArgs {
3
- dir: string;
4
- prompt: boolean;
5
- source: string;
6
- destination: string;
7
- "source-url": string;
8
- "merge-mode"?: "path-method" | "operation-id";
9
- }
10
- export declare const BASE_TEMPLATE =
11
- '\n{\n "openapi": "3.1.0",\n "info": {\n "version": "1.0.0",\n "title": "My Zuplo API"\n },\n "paths": {}\n}\n\n';
12
- export declare function importOpenApi(argv: Arguments): Promise<void>;
13
- //# sourceMappingURL=handler.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"handler.d.ts","sourceRoot":"","sources":["../../../src/source/import-openapi/handler.ts"],"names":[],"mappings":"AAQA,OAAO,EAAE,UAAU,EAAE,MAAM,sBAAsB,CAAC;AAUlD,MAAM,WAAW,SAAU,SAAQ,UAAU;IAC3C,GAAG,EAAE,MAAM,CAAC;IACZ,MAAM,EAAE,OAAO,CAAC;IAChB,MAAM,EAAE,MAAM,CAAC;IACf,WAAW,EAAE,MAAM,CAAC;IACpB,YAAY,EAAE,MAAM,CAAC;IACrB,YAAY,CAAC,EAAE,aAAa,GAAG,cAAc,CAAC;CAC/C;AAED,eAAO,MAAM,aAAa,8IAUzB,CAAC;AAGF,wBAAsB,aAAa,CAAC,IAAI,EAAE,SAAS,iBA+KlD"}
@@ -1 +0,0 @@
1
- {"version":3,"file":"handler.js","sourceRoot":"","sources":["../../../src/source/import-openapi/handler.ts"],"names":[],"mappings":"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","sourcesContent":["import { existsSync, writeFileSync } from \"node:fs\";\nimport { mkdir, readFile, writeFile } from \"node:fs/promises\";\nimport { tmpdir } from \"node:os\";\nimport path, { basename, dirname, extname, join, relative } from \"node:path\";\nimport { confirm } from \"@inquirer/prompts\";\nimport { mergeOpenApiDocuments } from \"@zuplo/openapi-tools\";\nimport jsYaml from \"js-yaml\";\nimport { format } from \"prettier\";\nimport { CommonArgs } from \"../../common/args.js\";\nimport { logger } from \"../../common/logger.js\";\nimport {\n printCriticalFailureToConsoleAndExit,\n printDiagnosticsToConsole,\n printResultToConsoleAndExitGracefully,\n} from \"../../common/output.js\";\nimport { ZuploOpenApiDocument } from \"./interfaces.js\";\nimport { addOperationIdsAsNecessary, parseOpenApiFile } from \"./utils.js\";\n\nexport interface Arguments extends CommonArgs {\n dir: string;\n prompt: boolean;\n source: string;\n destination: string;\n \"source-url\": string;\n \"merge-mode\"?: \"path-method\" | \"operation-id\";\n}\n\nexport const BASE_TEMPLATE = `\n{\n \"openapi\": \"3.1.0\",\n \"info\": {\n \"version\": \"1.0.0\",\n \"title\": \"My Zuplo API\"\n },\n \"paths\": {}\n}\n\n`;\n\n// import is a reserved keyword so importSpec was used instead\nexport async function importOpenApi(argv: Arguments) {\n let normalizedFilePath: string;\n // First see if this is a url\n let handleAsUrl = true;\n try {\n new URL(argv.source);\n } catch {\n handleAsUrl = false;\n }\n\n if (handleAsUrl) {\n const parsedUrl = new URL(argv.source);\n const tempDir = tmpdir();\n const guessedFileName =\n basename(parsedUrl.pathname).replace(/\\.[^/.]+$/, \"\") ||\n `imported-${Buffer.from(argv.source).toString(\"base64\")}`;\n normalizedFilePath = join(tempDir, guessedFileName);\n await mkdir(dirname(normalizedFilePath), { recursive: true });\n\n try {\n const response = await fetch(parsedUrl);\n if (!response.ok) {\n await printCriticalFailureToConsoleAndExit(\n `Failed to download the remote OpenAPI file. Server responded with ${response.status} ${response.statusText}`\n );\n }\n\n const text = await response.text();\n\n try {\n // 1a. See if this is json else try to parse as yaml\n JSON.parse(text);\n normalizedFilePath = `${normalizedFilePath}.json`;\n await writeFile(normalizedFilePath, text, { flag: \"w+\" });\n } catch {\n try {\n // 1b. See if this is yaml\n jsYaml.load(text);\n normalizedFilePath = `${normalizedFilePath}.yaml`;\n await writeFile(normalizedFilePath, text, { flag: \"w+\" });\n } catch {\n await printCriticalFailureToConsoleAndExit(\n `Failed to parse the remote OpenAPI file as either JSON or YAML.`\n );\n }\n }\n } catch (err) {\n logger.error(err);\n await printCriticalFailureToConsoleAndExit(\n `Failed to download the remote OpenAPI file.`\n );\n }\n } else {\n // 1c. This is a normal file so we use the file extension\n const filePath = argv.source;\n normalizedFilePath = join(relative(process.cwd(), filePath));\n\n if (!existsSync(normalizedFilePath)) {\n await printCriticalFailureToConsoleAndExit(\n `The file ${normalizedFilePath} to import does not exist.`\n );\n }\n }\n\n const rawOpenApiSpec = await readFile(normalizedFilePath);\n const extName = extname(normalizedFilePath);\n const fileContent = rawOpenApiSpec.toString();\n const parsedOpenApiSpec = await parseOpenApiFile(extName, fileContent);\n\n const destination = argv.destination;\n\n if (!destination.endsWith(\".oas.json\")) {\n await printCriticalFailureToConsoleAndExit(\n `Destination file name must end with '.oas.json'`\n );\n }\n\n const destinationFilePath = join(relative(process.cwd(), destination));\n\n let originalDocument: ZuploOpenApiDocument;\n if (!existsSync(destinationFilePath)) {\n // This is an initial import\n originalDocument = (await parseOpenApiFile(\n \".json\",\n BASE_TEMPLATE\n )) as ZuploOpenApiDocument;\n } else {\n const existingOpenApiSpec = await readFile(destinationFilePath);\n const existingFileContent = existingOpenApiSpec.toString();\n originalDocument = (await parseOpenApiFile(\n extName,\n existingFileContent\n )) as ZuploOpenApiDocument;\n }\n\n // Default to path-method merging\n const mergeMode = argv[\"merge-mode\"] || \"path-method\";\n\n const { created, merged, retained, mergedDocument } = mergeOpenApiDocuments(\n originalDocument,\n parsedOpenApiSpec,\n mergeMode\n );\n\n // Present the changes\n printDiagnosticsToConsole(\"This import will...\");\n printDiagnosticsToConsole(\"\");\n\n if (created.size > 0) {\n printDiagnosticsToConsole(\n `Create ${created.size} new ${\n created.size > 1 ? \"operations\" : \"operation\"\n }`\n );\n printDiagnosticsToConsole(\"\");\n created.forEach((operation) => {\n printDiagnosticsToConsole(operation);\n });\n printDiagnosticsToConsole(\"\");\n }\n\n if (merged.size > 0) {\n printDiagnosticsToConsole(\n `Merge ${merged.size} ${merged.size > 1 ? \"operations\" : \"operation\"}`\n );\n printDiagnosticsToConsole(\"\");\n merged.forEach((operation) => {\n printDiagnosticsToConsole(operation);\n });\n printDiagnosticsToConsole(\"\");\n }\n\n if (retained.size > 0) {\n printDiagnosticsToConsole(\n `Retain ${retained.size} ${\n retained.size > 1 ? \"operations\" : \"operation\"\n }`\n );\n printDiagnosticsToConsole(\"\");\n retained.forEach((operation) => {\n printDiagnosticsToConsole(operation);\n });\n printDiagnosticsToConsole(\"\");\n }\n\n if (argv.prompt) {\n printDiagnosticsToConsole(\"\");\n const answer = await confirm({ message: \"Proceed?\", default: true });\n if (!answer) {\n await printResultToConsoleAndExitGracefully(\"Import cancelled.\");\n }\n }\n\n addOperationIdsAsNecessary(mergedDocument);\n\n const formattedOpenApi = await format(JSON.stringify(mergedDocument), {\n parser: \"json-stringify\",\n });\n\n // Create folder structure if needed\n if (!existsSync(destinationFilePath)) {\n // Get the directory path of the file\n const dir = path.dirname(destinationFilePath);\n\n // Ensure that the directory exists (creates parent directories if necessary)\n await mkdir(dir, { recursive: true });\n }\n\n writeFileSync(destinationFilePath, formattedOpenApi, {\n flag: \"w\",\n });\n\n await printResultToConsoleAndExitGracefully(\n `Import successful. File written to ${destinationFilePath}`\n );\n}\n"]}
@@ -1 +0,0 @@
1
- {"version":3,"file":"interfaces.d.ts","sourceRoot":"","sources":["../../../src/source/import-openapi/interfaces.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,kBAAkB,EAAE,MAAM,gBAAgB,CAAC;AACpD,OAAO,EAAE,WAAW,EAAE,MAAM,eAAe,CAAC;AAC5C,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,UAAU,CAAC;AAE5C,MAAM,MAAM,gBAAgB,GAAG;IAC7B,OAAO,EAAE,OAAO,CAAC;IACjB,MAAM,EAAE,WAAW,EAAE,CAAC;IACtB,QAAQ,EAAE,WAAW,EAAE,CAAC;CACzB,CAAC;AAEF,KAAK,MAAM,CAAC,CAAC,EAAE,CAAC,IAAI,IAAI,CAAC,CAAC,EAAE,MAAM,CAAC,CAAC,GAAG,CAAC,CAAC;AACzC,MAAM,MAAM,gBAAgB,GAAG,WAAW,CAAC,WAAW,GAAG,MAAM,CAAC;AAGhE,eAAO,MAAM,4BAA4B,YAAY,CAAC;AACtD,eAAO,MAAM,qCAAqC,eAAe,CAAC;AAClE,eAAO,MAAM,uBAAuB,gBACa,CAAC;AAClD,eAAO,MAAM,wBAAwB,iBACa,CAAC;AAEnD,MAAM,MAAM,oBAAoB,GAAG,MAAM,CACvC,WAAW,CAAC,QAAQ,CAAC,8BAA8B,CAAC,EACpD;IACE,KAAK,EAAE,uBAAuB,GAAG,SAAS,CAAC;CAC5C,CACF,CAAC;AACF,MAAM,MAAM,uBAAuB,GAAG,MAAM,CAC1C,MAAM,EACN,0BAA0B,GAAG,SAAS,CACvC,CAAC;AACF,MAAM,MAAM,0BAA0B,GAAG,MAAM,CAC7C,WAAW,CAAC,cAAc,CAAC,8BAA8B,CAAC,GACxD,6BAA6B,EAC/B;IACE,GAAG,CAAC,EAAE,2BAA2B,CAAC;IAClC,GAAG,CAAC,EAAE,2BAA2B,CAAC;IAClC,IAAI,CAAC,EAAE,2BAA2B,CAAC;IACnC,MAAM,CAAC,EAAE,2BAA2B,CAAC;IACrC,OAAO,CAAC,EAAE,2BAA2B,CAAC;IACtC,IAAI,CAAC,EAAE,2BAA2B,CAAC;IACnC,KAAK,CAAC,EAAE,2BAA2B,CAAC;IACpC,KAAK,CAAC,EAAE,2BAA2B,CAAC;CACrC,CACF,CAAC;AACF,MAAM,MAAM,6BAA6B,GAAG;IAC1C,CAAC,uBAAuB,CAAC,CAAC,EAAE,8BAA8B,CAAC;CAC5D,CAAC;AACF,MAAM,MAAM,8BAA8B,GAAG;IAC3C,QAAQ,EAAE,QAAQ,CAAC;CACpB,CAAC;AACF,MAAM,MAAM,QAAQ,GAAG,UAAU,GAAG,aAAa,CAAC;AAClD,MAAM,MAAM,2BAA2B,GAAG,MAAM,CAC9C,WAAW,CAAC,eAAe,CAAC,8BAA8B,CAAC,EAC3D;IAAE,WAAW,EAAE,MAAM,CAAA;CAAE,CACxB,CAAC;AACF,MAAM,MAAM,+BAA+B,GAAG,IAAI,CAChD,kBAAkB,EAChB,aAAa,GACb,MAAM,GACN,SAAS,GACT,OAAO,GACP,KAAK,GACL,SAAS,GACT,aAAa,GACb,YAAY,GACZ,WAAW,GACX,MAAM,GACN,SAAS,GACT,KAAK,CACR,CAAC;AACF,MAAM,MAAM,8BAA8B,GAAG;IAC3C,CAAC,wBAAwB,CAAC,CAAC,EAAE,+BAA+B,CAAC;IAC7D,CAAC,qCAAqC,CAAC,CAAC,EAAE,OAAO,CAAC;CACnD,CAAC"}
@@ -1 +0,0 @@
1
- {"version":3,"file":"interfaces.js","sourceRoot":"","sources":["../../../src/source/import-openapi/interfaces.ts"],"names":[],"mappings":"AAcA,MAAM,CAAC,MAAM,4BAA4B,GAAG,SAAS,CAAC;AACtD,MAAM,CAAC,MAAM,qCAAqC,GAAG,YAAY,CAAC;AAClE,MAAM,CAAC,MAAM,uBAAuB,GAClC,GAAG,4BAA4B,OAAgB,CAAC;AAClD,MAAM,CAAC,MAAM,wBAAwB,GACnC,GAAG,4BAA4B,QAAiB,CAAC","sourcesContent":["import { RouteConfiguration } from \"@zuplo/runtime\";\nimport { OpenAPIV3_1 } from \"openapi-types\";\nimport type { ErrorObject } from \"./ajv.js\";\n\nexport type ValidationResult = {\n isValid: boolean;\n errors: ErrorObject[];\n warnings: ErrorObject[];\n};\n\ntype Modify<T, R> = Omit<T, keyof R> & R;\nexport type ZuploHttpMethods = OpenAPIV3_1.HttpMethods | string;\n\n// TODO: This should all be moved to the backend eventually\nexport const ZUPLO_OPEN_API_VENDOR_PREFIX = \"x-zuplo\";\nexport const OPEN_API_INTERNAL_PROPERTY_VENDOR_TAG = \"x-internal\";\nexport const ZUPLO_OPEN_API_PATH_KEY =\n `${ZUPLO_OPEN_API_VENDOR_PREFIX}-path` as const;\nexport const ZUPLO_OPEN_API_ROUTE_KEY =\n `${ZUPLO_OPEN_API_VENDOR_PREFIX}-route` as const;\n\nexport type ZuploOpenApiDocument = Modify<\n OpenAPIV3_1.Document<ZuploOpenApiOperationExtension>,\n {\n paths: ZuploOpenApiPathsObject | undefined;\n }\n>;\nexport type ZuploOpenApiPathsObject = Record<\n string,\n ZuploOpenApiPathItemObject | undefined\n>;\nexport type ZuploOpenApiPathItemObject = Modify<\n OpenAPIV3_1.PathItemObject<ZuploOpenApiOperationExtension> &\n ZuploOpenApiPathItemExtension,\n {\n get?: ZuploOpenApiOperationObject;\n put?: ZuploOpenApiOperationObject;\n post?: ZuploOpenApiOperationObject;\n delete?: ZuploOpenApiOperationObject;\n options?: ZuploOpenApiOperationObject;\n head?: ZuploOpenApiOperationObject;\n patch?: ZuploOpenApiOperationObject;\n trace?: ZuploOpenApiOperationObject;\n }\n>;\nexport type ZuploOpenApiPathItemExtension = {\n [ZUPLO_OPEN_API_PATH_KEY]?: ZuploOpenApiPathItemProperties;\n};\nexport type ZuploOpenApiPathItemProperties = {\n pathMode: PathMode;\n};\nexport type PathMode = \"open-api\" | \"url-pattern\";\nexport type ZuploOpenApiOperationObject = Modify<\n OpenAPIV3_1.OperationObject<ZuploOpenApiOperationExtension>,\n { operationId: string }\n>;\nexport type ZuploOpenApiOperationProperties = Omit<\n RouteConfiguration,\n | \"operationId\"\n | \"path\"\n | \"methods\"\n | \"label\"\n | \"key\"\n | \"summary\"\n | \"description\"\n | \"parameters\"\n | \"responses\"\n | \"tags\"\n | \"version\"\n | \"raw\"\n>;\nexport type ZuploOpenApiOperationExtension = {\n [ZUPLO_OPEN_API_ROUTE_KEY]?: ZuploOpenApiOperationProperties;\n [OPEN_API_INTERNAL_PROPERTY_VENDOR_TAG]?: boolean;\n};\n"]}
@@ -1 +0,0 @@
1
- {"version":3,"file":"utils.d.ts","sourceRoot":"","sources":["../../../src/source/import-openapi/utils.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,WAAW,EAAE,MAAM,eAAe,CAAC;AAE5C,OAAO,EAAE,oBAAoB,EAAE,MAAM,iBAAiB,CAAC;AAEvD,eAAO,MAAM,8BAA8B,MAAM,CAAC;AAClD,eAAO,MAAM,mBAAmB,UAA6B,CAAC;AAE9D,eAAO,MAAM,gBAAgB,GAAU,SAAS,MAAM,EAAE,UAAU,MAAM,6DAYvE,CAAC;AAMF,eAAO,MAAM,0BAA0B,GACrC,SAAS,WAAW,CAAC,QAAQ,GAAG,oBAAoB,SA4BrD,CAAC"}
@@ -1 +0,0 @@
1
- {"version":3,"file":"utils.js","sourceRoot":"","sources":["../../../src/source/import-openapi/utils.ts"],"names":[],"mappings":"AAAA,OAAO,IAAI,MAAM,SAAS,CAAC;AAE3B,OAAO,EAAE,EAAE,EAAE,MAAM,MAAM,CAAC;AAG1B,MAAM,CAAC,MAAM,8BAA8B,GAAG,GAAG,CAAC;AAClD,MAAM,CAAC,MAAM,mBAAmB,GAAG,CAAC,OAAO,EAAE,MAAM,EAAE,OAAO,CAAC,CAAC;AAE9D,MAAM,CAAC,MAAM,gBAAgB,GAAG,KAAK,EAAE,OAAe,EAAE,QAAgB,EAAE,EAAE;IAC1E,IAAI,CAAC,mBAAmB,CAAC,QAAQ,CAAC,OAAO,CAAC,EAAE,CAAC;QAC3C,MAAM,IAAI,KAAK,CACb,gDAAgD,mBAAmB,CAAC,IAAI,CACtE,IAAI,CACL,EAAE,CACJ,CAAC;IACJ,CAAC;IACD,IAAI,OAAO,CAAC,QAAQ,CAAC,MAAM,CAAC,EAAE,CAAC;QAC7B,OAAO,IAAI,CAAC,KAAK,CAAC,QAAQ,CAAgD,CAAC;IAC7E,CAAC;IACD,OAAO,IAAI,CAAC,IAAI,CAAC,QAAQ,CAAgD,CAAC;AAC5E,CAAC,CAAC;AAMF,MAAM,CAAC,MAAM,0BAA0B,GAAG,CACxC,OAAoD,EACpD,EAAE;IACF,MAAM,KAAK,GAAG,OAAO,CAAC,KAAK,CAAC;IAC5B,IAAI,CAAC,KAAK,EAAE,CAAC;QACX,OAAO;IACT,CAAC;IACD,KAAK,MAAM,IAAI,IAAI,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,EAAE,CAAC;QACtC,MAAM,QAAQ,GAAG,KAAK,CAAC,IAAI,CAAC,CAAC;QAC7B,IAAI,CAAC,QAAQ,EAAE,CAAC;YACd,SAAS;QACX,CAAC;QACD,MAAM,OAAO,GAAG;YACd,KAAK;YACL,KAAK;YACL,MAAM;YACN,QAAQ;YACR,SAAS;YACT,MAAM;YACN,OAAO;YACP,OAAO;SACqB,CAAC;QAC/B,KAAK,MAAM,MAAM,IAAI,OAAO,EAAE,CAAC;YAC7B,MAAM,SAAS,GAAG,QAAQ,CAAC,MAAM,CAAC,CAAC;YACnC,IAAI,SAAS,IAAI,CAAC,SAAS,CAAC,WAAW,EAAE,CAAC;gBACxC,SAAS,CAAC,WAAW,GAAG,EAAE,EAAE,CAAC;YAC/B,CAAC;QACH,CAAC;IACH,CAAC;AACH,CAAC,CAAC","sourcesContent":["import yaml from \"js-yaml\";\nimport { OpenAPIV3_1 } from \"openapi-types\";\nimport { v4 } from \"uuid\";\nimport { ZuploOpenApiDocument } from \"./interfaces.js\";\n\nexport const OPERATION_PATH_MERGE_DELIMITER = \">\";\nexport const OPEN_API_FILE_TYPES = [\".json\", \".yml\", \".yaml\"];\n\nexport const parseOpenApiFile = async (extName: string, fileText: string) => {\n if (!OPEN_API_FILE_TYPES.includes(extName)) {\n throw new Error(\n `Invalid file type. Supported file types are: ${OPEN_API_FILE_TYPES.join(\n \", \"\n )}`\n );\n }\n if (extName.includes(\"json\")) {\n return JSON.parse(fileText) as OpenAPIV3_1.Document | ZuploOpenApiDocument;\n }\n return yaml.load(fileText) as OpenAPIV3_1.Document | ZuploOpenApiDocument;\n};\n\n/**\n * Add operation ID to any operations that don't have one, this makes\n * onboarding smoother for new users\n */\nexport const addOperationIdsAsNecessary = (\n openApi: OpenAPIV3_1.Document | ZuploOpenApiDocument\n) => {\n const paths = openApi.paths;\n if (!paths) {\n return;\n }\n for (const path of Object.keys(paths)) {\n const pathItem = paths[path];\n if (!pathItem) {\n continue;\n }\n const methods = [\n \"get\",\n \"put\",\n \"post\",\n \"delete\",\n \"options\",\n \"head\",\n \"patch\",\n \"trace\",\n ] as OpenAPIV3_1.HttpMethods[];\n for (const method of methods) {\n const operation = pathItem[method];\n if (operation && !operation.operationId) {\n operation.operationId = v4();\n }\n }\n }\n};\n"]}
File without changes