@sdk-it/spec 0.28.0 → 0.29.0

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 (52) hide show
  1. package/dist/index.d.ts +1 -1
  2. package/dist/index.d.ts.map +1 -1
  3. package/dist/index.js +1 -1
  4. package/dist/index.js.map +1 -1
  5. package/dist/lib/find-polymorphic-varients.test.js +1 -1
  6. package/dist/lib/find-polymorphic-varients.test.js.map +1 -1
  7. package/dist/lib/{operation.d.ts → ir.d.ts} +1 -1
  8. package/dist/lib/ir.d.ts.map +1 -0
  9. package/dist/lib/{operation.js → ir.js} +1 -1
  10. package/dist/lib/{operation.js.map → ir.js.map} +1 -1
  11. package/dist/lib/ir.test.d.ts +2 -0
  12. package/dist/lib/ir.test.d.ts.map +1 -0
  13. package/dist/lib/{operation.test.js → ir.test.js} +1 -1
  14. package/dist/lib/{operation.test.js.map → ir.test.js.map} +1 -1
  15. package/dist/lib/options.d.ts +1 -1
  16. package/dist/lib/options.d.ts.map +1 -1
  17. package/dist/lib/options.js +2 -1
  18. package/dist/lib/options.js.map +2 -2
  19. package/dist/lib/overview-docs/doc-templates.d.ts +51 -0
  20. package/dist/lib/overview-docs/doc-templates.d.ts.map +1 -0
  21. package/dist/lib/overview-docs/doc-templates.js +123 -0
  22. package/dist/lib/overview-docs/doc-templates.js.map +7 -0
  23. package/dist/lib/overview-docs/doc-text-utils.d.ts +86 -0
  24. package/dist/lib/overview-docs/doc-text-utils.d.ts.map +1 -0
  25. package/dist/lib/overview-docs/doc-text-utils.js +108 -0
  26. package/dist/lib/overview-docs/doc-text-utils.js.map +7 -0
  27. package/dist/lib/overview-docs/overview-auth.d.ts.map +1 -1
  28. package/dist/lib/overview-docs/overview-auth.js +34 -52
  29. package/dist/lib/overview-docs/overview-auth.js.map +2 -2
  30. package/dist/lib/overview-docs/overview-errors.d.ts.map +1 -1
  31. package/dist/lib/overview-docs/overview-errors.js +11 -28
  32. package/dist/lib/overview-docs/overview-errors.js.map +2 -2
  33. package/dist/lib/overview-docs/overview-intro.d.ts +1 -1
  34. package/dist/lib/overview-docs/overview-intro.d.ts.map +1 -1
  35. package/dist/lib/overview-docs/overview-intro.js +41 -36
  36. package/dist/lib/overview-docs/overview-intro.js.map +2 -2
  37. package/dist/lib/tune.test.js +1 -1
  38. package/dist/lib/tune.test.js.map +1 -1
  39. package/dist/lib/types.d.ts +2 -1
  40. package/dist/lib/types.d.ts.map +1 -1
  41. package/package.json +2 -2
  42. package/dist/lib/operation.d.ts.map +0 -1
  43. package/dist/lib/operation.test.d.ts +0 -2
  44. package/dist/lib/operation.test.d.ts.map +0 -1
  45. package/dist/lib/overview-docs/overview-quick-reference.d.ts +0 -4
  46. package/dist/lib/overview-docs/overview-quick-reference.d.ts.map +0 -1
  47. package/dist/lib/overview-docs/overview-sdk-examples.d.ts +0 -4
  48. package/dist/lib/overview-docs/overview-sdk-examples.d.ts.map +0 -1
  49. package/dist/lib/overview-docs/overview-usage.d.ts +0 -4
  50. package/dist/lib/overview-docs/overview-usage.d.ts.map +0 -1
  51. package/dist/lib/overview-docs.d.ts +0 -4
  52. package/dist/lib/overview-docs.d.ts.map +0 -1
@@ -1,13 +1,11 @@
1
- import { forEachOperation } from "../for-each-operation.js";
2
- function generateIntroOverview(spec, availablesdks = ["typescript"]) {
1
+ import {
2
+ getClientIntroText,
3
+ getTextByCount,
4
+ presetDocs
5
+ } from "./doc-text-utils.js";
6
+ function generateIntroOverview(spec, availablesdks) {
3
7
  const info = spec.info;
4
8
  const markdown = [];
5
- const tags = /* @__PURE__ */ new Set();
6
- const methods = /* @__PURE__ */ new Set();
7
- forEachOperation(spec, (entry) => {
8
- tags.add(entry.tag);
9
- methods.add(entry.method.toUpperCase());
10
- });
11
9
  if (spec.info.title) {
12
10
  markdown.push(`# ${spec.info.title || "API Reference"}
13
11
  `);
@@ -18,11 +16,22 @@ function generateIntroOverview(spec, availablesdks = ["typescript"]) {
18
16
  }
19
17
  if (spec.info.version) {
20
18
  markdown.push(`**Version:** ${spec.info.version}
19
+ `);
20
+ }
21
+ if (info.license) {
22
+ let licenseString = `**License:** ${info.license.name}`;
23
+ if (info.license.url) {
24
+ licenseString += ` ([${info.license.url}](${info.license.url}))`;
25
+ }
26
+ markdown.push(`${licenseString}
21
27
  `);
22
28
  }
23
29
  if (spec.servers && spec.servers.length > 0) {
24
- markdown.push(`## API Servers`);
25
- markdown.push(`The following servers are available for this API:`);
30
+ const serverCount = spec.servers.length;
31
+ markdown.push(
32
+ `## ${getTextByCount(serverCount, presetDocs.server.section)}`
33
+ );
34
+ markdown.push(getTextByCount(serverCount, presetDocs.server.description));
26
35
  markdown.push("");
27
36
  for (const server of spec.servers) {
28
37
  let serverLine = `- **${server.url}**`;
@@ -33,36 +42,32 @@ function generateIntroOverview(spec, availablesdks = ["typescript"]) {
33
42
  }
34
43
  markdown.push("");
35
44
  }
36
- if (info.contact) {
37
- markdown.push(`## Contact`);
38
- if (info.contact.name) {
39
- markdown.push(`**Name:** ${info.contact.name}`);
40
- }
41
- if (info.contact.email) {
42
- markdown.push(`**Email:** ${info.contact.email}`);
43
- }
44
- if (info.contact.url) {
45
- markdown.push(`**URL:** ${info.contact.url}`);
46
- }
47
- }
48
- if (info.license) {
49
- markdown.push(`## License`);
50
- if (info.license.name) {
51
- let licenseString = `**License:** ${info.license.name}`;
52
- if (info.license.url) {
53
- licenseString += ` ([${info.license.url}](${info.license.url}))`;
54
- }
55
- markdown.push(licenseString);
56
- }
57
- }
58
- markdown.push(`## Official API Clients`);
59
- markdown.push(
60
- `${info.title || "This API"} provides official client SDKs for multiple programming languages. We recommend using these clients to interact with all stable endpoints. You can find them here:`
61
- );
45
+ const sdkCount = availablesdks.length;
46
+ markdown.push(`## ${getTextByCount(sdkCount, presetDocs.client.section)}`);
47
+ markdown.push(getClientIntroText(info.title || "This API", sdkCount));
62
48
  for (const link of availablesdks) {
63
49
  const sdkName = link.replace("/", "").replace("-sdk", "").toUpperCase();
64
50
  markdown.push(`- [${sdkName} SDK](${link})`);
65
51
  }
52
+ const hasSupportInfo = info.contact?.email || info.contact?.url || spec.externalDocs?.url && spec.externalDocs?.description?.toLowerCase().includes("support");
53
+ if (hasSupportInfo) {
54
+ markdown.push(`## Need Help?`);
55
+ if (info.contact?.email) {
56
+ markdown.push(
57
+ `For support, reach out to us at [${info.contact.email}](mailto:${info.contact.email}).`
58
+ );
59
+ }
60
+ if (info.contact?.url) {
61
+ markdown.push(
62
+ `Visit our support page: [${info.contact.url}](${info.contact.url})`
63
+ );
64
+ }
65
+ if (spec.externalDocs?.url && spec.externalDocs?.description?.toLowerCase().includes("support")) {
66
+ markdown.push(
67
+ `For additional support, visit our [${spec.externalDocs.description}](${spec.externalDocs.url}).`
68
+ );
69
+ }
70
+ }
66
71
  return {
67
72
  id: "generated-introduction",
68
73
  title: "Introduction",
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "version": 3,
3
3
  "sources": ["../../../src/lib/overview-docs/overview-intro.ts"],
4
- "sourcesContent": ["import { forEachOperation } from '../for-each-operation.js';\nimport type { NavItem } from '../sidebar.js';\nimport type { OurOpenAPIObject } from '../types.js';\n\nexport function generateIntroOverview(\n spec: OurOpenAPIObject,\n availablesdks = ['typescript'],\n): NavItem {\n const info = spec.info;\n const markdown: string[] = [];\n\n const tags = new Set<string>();\n const methods = new Set<string>();\n\n forEachOperation(spec, (entry) => {\n tags.add(entry.tag);\n methods.add(entry.method.toUpperCase());\n });\n\n if (spec.info.title) {\n markdown.push(`# ${spec.info.title || 'API Reference'}\\n`);\n }\n\n if (spec.info.description) {\n markdown.push(`${spec.info.description}\\n`);\n }\n\n if (spec.info.version) {\n markdown.push(`**Version:** ${spec.info.version}\\n`);\n }\n\n if (spec.servers && spec.servers.length > 0) {\n markdown.push(`## API Servers`);\n markdown.push(`The following servers are available for this API:`);\n markdown.push('');\n\n for (const server of spec.servers) {\n let serverLine = `- **${server.url}**`;\n if (server.description) {\n serverLine += ` - ${server.description}`;\n }\n markdown.push(serverLine);\n }\n markdown.push('');\n }\n\n if (info.contact) {\n markdown.push(`## Contact`);\n if (info.contact.name) {\n markdown.push(`**Name:** ${info.contact.name}`);\n }\n if (info.contact.email) {\n markdown.push(`**Email:** ${info.contact.email}`);\n }\n if (info.contact.url) {\n markdown.push(`**URL:** ${info.contact.url}`);\n }\n }\n\n if (info.license) {\n markdown.push(`## License`);\n if (info.license.name) {\n let licenseString = `**License:** ${info.license.name}`;\n if (info.license.url) {\n licenseString += ` ([${info.license.url}](${info.license.url}))`;\n }\n markdown.push(licenseString);\n }\n }\n\n markdown.push(`## Official API Clients`);\n markdown.push(\n `${info.title || 'This API'} provides official client SDKs for multiple programming languages. We recommend using these clients to interact with all stable endpoints. You can find them here:`,\n );\n\n for (const link of availablesdks) {\n const sdkName = link.replace('/', '').replace('-sdk', '').toUpperCase();\n markdown.push(`- [${sdkName} SDK](${link})`);\n }\n\n return {\n id: 'generated-introduction',\n title: 'Introduction',\n url: '/introduction',\n description: 'API overview and getting started guide',\n content: markdown.join('\\n\\n'),\n };\n}\n"],
5
- "mappings": "AAAA,SAAS,wBAAwB;AAI1B,SAAS,sBACd,MACA,gBAAgB,CAAC,YAAY,GACpB;AACT,QAAM,OAAO,KAAK;AAClB,QAAM,WAAqB,CAAC;AAE5B,QAAM,OAAO,oBAAI,IAAY;AAC7B,QAAM,UAAU,oBAAI,IAAY;AAEhC,mBAAiB,MAAM,CAAC,UAAU;AAChC,SAAK,IAAI,MAAM,GAAG;AAClB,YAAQ,IAAI,MAAM,OAAO,YAAY,CAAC;AAAA,EACxC,CAAC;AAED,MAAI,KAAK,KAAK,OAAO;AACnB,aAAS,KAAK,KAAK,KAAK,KAAK,SAAS,eAAe;AAAA,CAAI;AAAA,EAC3D;AAEA,MAAI,KAAK,KAAK,aAAa;AACzB,aAAS,KAAK,GAAG,KAAK,KAAK,WAAW;AAAA,CAAI;AAAA,EAC5C;AAEA,MAAI,KAAK,KAAK,SAAS;AACrB,aAAS,KAAK,gBAAgB,KAAK,KAAK,OAAO;AAAA,CAAI;AAAA,EACrD;AAEA,MAAI,KAAK,WAAW,KAAK,QAAQ,SAAS,GAAG;AAC3C,aAAS,KAAK,gBAAgB;AAC9B,aAAS,KAAK,mDAAmD;AACjE,aAAS,KAAK,EAAE;AAEhB,eAAW,UAAU,KAAK,SAAS;AACjC,UAAI,aAAa,OAAO,OAAO,GAAG;AAClC,UAAI,OAAO,aAAa;AACtB,sBAAc,MAAM,OAAO,WAAW;AAAA,MACxC;AACA,eAAS,KAAK,UAAU;AAAA,IAC1B;AACA,aAAS,KAAK,EAAE;AAAA,EAClB;AAEA,MAAI,KAAK,SAAS;AAChB,aAAS,KAAK,YAAY;AAC1B,QAAI,KAAK,QAAQ,MAAM;AACrB,eAAS,KAAK,aAAa,KAAK,QAAQ,IAAI,EAAE;AAAA,IAChD;AACA,QAAI,KAAK,QAAQ,OAAO;AACtB,eAAS,KAAK,cAAc,KAAK,QAAQ,KAAK,EAAE;AAAA,IAClD;AACA,QAAI,KAAK,QAAQ,KAAK;AACpB,eAAS,KAAK,YAAY,KAAK,QAAQ,GAAG,EAAE;AAAA,IAC9C;AAAA,EACF;AAEA,MAAI,KAAK,SAAS;AAChB,aAAS,KAAK,YAAY;AAC1B,QAAI,KAAK,QAAQ,MAAM;AACrB,UAAI,gBAAgB,gBAAgB,KAAK,QAAQ,IAAI;AACrD,UAAI,KAAK,QAAQ,KAAK;AACpB,yBAAiB,MAAM,KAAK,QAAQ,GAAG,KAAK,KAAK,QAAQ,GAAG;AAAA,MAC9D;AACA,eAAS,KAAK,aAAa;AAAA,IAC7B;AAAA,EACF;AAEA,WAAS,KAAK,yBAAyB;AACvC,WAAS;AAAA,IACP,GAAG,KAAK,SAAS,UAAU;AAAA,EAC7B;AAEA,aAAW,QAAQ,eAAe;AAChC,UAAM,UAAU,KAAK,QAAQ,KAAK,EAAE,EAAE,QAAQ,QAAQ,EAAE,EAAE,YAAY;AACtE,aAAS,KAAK,MAAM,OAAO,SAAS,IAAI,GAAG;AAAA,EAC7C;AAEA,SAAO;AAAA,IACL,IAAI;AAAA,IACJ,OAAO;AAAA,IACP,KAAK;AAAA,IACL,aAAa;AAAA,IACb,SAAS,SAAS,KAAK,MAAM;AAAA,EAC/B;AACF;",
4
+ "sourcesContent": ["import type { NavItem } from '../sidebar.js';\nimport type { OurOpenAPIObject } from '../types.js';\nimport {\n getClientIntroText,\n getTextByCount,\n presetDocs,\n} from './doc-text-utils.js';\n\nexport function generateIntroOverview(\n spec: OurOpenAPIObject,\n availablesdks: string[],\n): NavItem {\n const info = spec.info;\n const markdown: string[] = [];\n\n if (spec.info.title) {\n markdown.push(`# ${spec.info.title || 'API Reference'}\\n`);\n }\n\n if (spec.info.description) {\n markdown.push(`${spec.info.description}\\n`);\n }\n\n if (spec.info.version) {\n markdown.push(`**Version:** ${spec.info.version}\\n`);\n }\n\n if (info.license) {\n let licenseString = `**License:** ${info.license.name}`;\n if (info.license.url) {\n licenseString += ` ([${info.license.url}](${info.license.url}))`;\n }\n markdown.push(`${licenseString}\\n`);\n }\n\n if (spec.servers && spec.servers.length > 0) {\n const serverCount = spec.servers.length;\n\n markdown.push(\n `## ${getTextByCount(serverCount, presetDocs.server.section)}`,\n );\n markdown.push(getTextByCount(serverCount, presetDocs.server.description));\n markdown.push('');\n\n for (const server of spec.servers) {\n let serverLine = `- **${server.url}**`;\n if (server.description) {\n serverLine += ` - ${server.description}`;\n }\n markdown.push(serverLine);\n }\n markdown.push('');\n }\n\n const sdkCount = availablesdks.length;\n markdown.push(`## ${getTextByCount(sdkCount, presetDocs.client.section)}`);\n markdown.push(getClientIntroText(info.title || 'This API', sdkCount));\n\n for (const link of availablesdks) {\n const sdkName = link.replace('/', '').replace('-sdk', '').toUpperCase();\n markdown.push(`- [${sdkName} SDK](${link})`);\n }\n\n // Add \"Need Help?\" section if support information is available\n const hasSupportInfo =\n info.contact?.email ||\n info.contact?.url ||\n (spec.externalDocs?.url &&\n spec.externalDocs?.description?.toLowerCase().includes('support'));\n\n if (hasSupportInfo) {\n markdown.push(`## Need Help?`);\n\n if (info.contact?.email) {\n markdown.push(\n `For support, reach out to us at [${info.contact.email}](mailto:${info.contact.email}).`,\n );\n }\n\n if (info.contact?.url) {\n markdown.push(\n `Visit our support page: [${info.contact.url}](${info.contact.url})`,\n );\n }\n\n if (\n spec.externalDocs?.url &&\n spec.externalDocs?.description?.toLowerCase().includes('support')\n ) {\n markdown.push(\n `For additional support, visit our [${spec.externalDocs.description}](${spec.externalDocs.url}).`,\n );\n }\n }\n\n return {\n id: 'generated-introduction',\n title: 'Introduction',\n url: '/introduction',\n description: 'API overview and getting started guide',\n content: markdown.join('\\n\\n'),\n };\n}\n"],
5
+ "mappings": "AAEA;AAAA,EACE;AAAA,EACA;AAAA,EACA;AAAA,OACK;AAEA,SAAS,sBACd,MACA,eACS;AACT,QAAM,OAAO,KAAK;AAClB,QAAM,WAAqB,CAAC;AAE5B,MAAI,KAAK,KAAK,OAAO;AACnB,aAAS,KAAK,KAAK,KAAK,KAAK,SAAS,eAAe;AAAA,CAAI;AAAA,EAC3D;AAEA,MAAI,KAAK,KAAK,aAAa;AACzB,aAAS,KAAK,GAAG,KAAK,KAAK,WAAW;AAAA,CAAI;AAAA,EAC5C;AAEA,MAAI,KAAK,KAAK,SAAS;AACrB,aAAS,KAAK,gBAAgB,KAAK,KAAK,OAAO;AAAA,CAAI;AAAA,EACrD;AAEA,MAAI,KAAK,SAAS;AAChB,QAAI,gBAAgB,gBAAgB,KAAK,QAAQ,IAAI;AACrD,QAAI,KAAK,QAAQ,KAAK;AACpB,uBAAiB,MAAM,KAAK,QAAQ,GAAG,KAAK,KAAK,QAAQ,GAAG;AAAA,IAC9D;AACA,aAAS,KAAK,GAAG,aAAa;AAAA,CAAI;AAAA,EACpC;AAEA,MAAI,KAAK,WAAW,KAAK,QAAQ,SAAS,GAAG;AAC3C,UAAM,cAAc,KAAK,QAAQ;AAEjC,aAAS;AAAA,MACP,MAAM,eAAe,aAAa,WAAW,OAAO,OAAO,CAAC;AAAA,IAC9D;AACA,aAAS,KAAK,eAAe,aAAa,WAAW,OAAO,WAAW,CAAC;AACxE,aAAS,KAAK,EAAE;AAEhB,eAAW,UAAU,KAAK,SAAS;AACjC,UAAI,aAAa,OAAO,OAAO,GAAG;AAClC,UAAI,OAAO,aAAa;AACtB,sBAAc,MAAM,OAAO,WAAW;AAAA,MACxC;AACA,eAAS,KAAK,UAAU;AAAA,IAC1B;AACA,aAAS,KAAK,EAAE;AAAA,EAClB;AAEA,QAAM,WAAW,cAAc;AAC/B,WAAS,KAAK,MAAM,eAAe,UAAU,WAAW,OAAO,OAAO,CAAC,EAAE;AACzE,WAAS,KAAK,mBAAmB,KAAK,SAAS,YAAY,QAAQ,CAAC;AAEpE,aAAW,QAAQ,eAAe;AAChC,UAAM,UAAU,KAAK,QAAQ,KAAK,EAAE,EAAE,QAAQ,QAAQ,EAAE,EAAE,YAAY;AACtE,aAAS,KAAK,MAAM,OAAO,SAAS,IAAI,GAAG;AAAA,EAC7C;AAGA,QAAM,iBACJ,KAAK,SAAS,SACd,KAAK,SAAS,OACb,KAAK,cAAc,OAClB,KAAK,cAAc,aAAa,YAAY,EAAE,SAAS,SAAS;AAEpE,MAAI,gBAAgB;AAClB,aAAS,KAAK,eAAe;AAE7B,QAAI,KAAK,SAAS,OAAO;AACvB,eAAS;AAAA,QACP,oCAAoC,KAAK,QAAQ,KAAK,YAAY,KAAK,QAAQ,KAAK;AAAA,MACtF;AAAA,IACF;AAEA,QAAI,KAAK,SAAS,KAAK;AACrB,eAAS;AAAA,QACP,4BAA4B,KAAK,QAAQ,GAAG,KAAK,KAAK,QAAQ,GAAG;AAAA,MACnE;AAAA,IACF;AAEA,QACE,KAAK,cAAc,OACnB,KAAK,cAAc,aAAa,YAAY,EAAE,SAAS,SAAS,GAChE;AACA,eAAS;AAAA,QACP,sCAAsC,KAAK,aAAa,WAAW,KAAK,KAAK,aAAa,GAAG;AAAA,MAC/F;AAAA,IACF;AAAA,EACF;AAEA,SAAO;AAAA,IACL,IAAI;AAAA,IACJ,OAAO;AAAA,IACP,KAAK;AAAA,IACL,aAAa;AAAA,IACb,SAAS,SAAS,KAAK,MAAM;AAAA,EAC/B;AACF;",
6
6
  "names": []
7
7
  }
@@ -1,6 +1,6 @@
1
1
  import { merge } from "lodash-es";
2
2
  import { describe, it } from "node:test";
3
- import { augmentSpec } from "./operation.ts";
3
+ import { augmentSpec } from "./ir.ts";
4
4
  function createSpec(openapi) {
5
5
  return augmentSpec(
6
6
  {
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "version": 3,
3
3
  "sources": ["../../src/lib/tune.test.ts"],
4
- "sourcesContent": ["import { merge } from 'lodash-es';\nimport { describe, it } from 'node:test';\nimport type { OpenAPIObject, SchemaObject } from 'openapi3-ts/oas31';\n\nimport { augmentSpec } from './operation.ts';\nimport type { OurOpenAPIObject } from './types.ts';\n\nfunction createSpec(openapi?: Partial<OpenAPIObject>): OurOpenAPIObject {\n return augmentSpec(\n {\n spec: merge(\n {\n openapi: '3.1.0',\n info: {\n title: 'Test API',\n version: '1.0.0',\n },\n components: {\n schemas: {},\n securitySchemes: {},\n },\n paths: {},\n },\n openapi,\n ),\n },\n true,\n );\n}\n\ndescribe('merge allof', () => {\n // it('should merge allOf schemas', () => {\n // const spec = createSpec({\n // components: {\n // schemas: {\n // Base: {\n // type: 'object',\n // properties: {\n // id: { type: 'string' },\n // },\n // },\n // Extended: {\n // allOf: [\n // { $ref: '#/components/schemas/Base' },\n // {\n // type: 'object',\n // properties: {\n // name: { type: 'string' },\n // },\n // },\n // ],\n // },\n // },\n // },\n // });\n\n // const extendedSchema = spec.components.schemas.Extended as SchemaObject;\n // console.log(extendedSchema);\n // assert.deepStrictEqual(extendedSchema.type, 'object');\n // assert.deepStrictEqual(extendedSchema.properties, {\n // id: { type: 'string' },\n // name: { type: 'string' },\n // });\n // });\n // it('should handle empty allOf', () => {\n // const spec = createSpec({\n // components: {\n // schemas: {\n // EmptyAllOf: {\n // allOf: [],\n // },\n // },\n // },\n // });\n\n // const emptySchema = spec.components.schemas.EmptyAllOf as SchemaObject;\n // assert.deepStrictEqual(emptySchema.allOf, undefined);\n // assert.deepStrictEqual(emptySchema.type, undefined);\n // });\n // it('should handle allOf with only references', () => {\n // const spec = createSpec({\n // components: {\n // schemas: {\n // Base: {\n // type: 'object',\n // properties: {\n // id: { type: 'string' },\n // },\n // },\n // Extended: {\n // allOf: [\n // {\n // $ref: '#/components/schemas/Base',\n // },\n // ],\n // },\n // },\n // },\n // });\n\n // const extendedSchema = spec.components.schemas.Extended as SchemaObject;\n // assert.deepStrictEqual(extendedSchema.type, 'object');\n // assert.deepStrictEqual(extendedSchema.properties, {\n // id: {\n // type: 'string',\n // },\n // });\n // });\n\n it('should handle circular allOf references without stack overflow', () => {\n const spec = createSpec({\n components: {\n schemas: {\n A: {\n allOf: [\n { $ref: '#/components/schemas/B' },\n {\n type: 'object',\n properties: {\n nameA: { type: 'string' },\n },\n },\n ],\n },\n B: {\n allOf: [\n { $ref: '#/components/schemas/A' },\n {\n type: 'object',\n properties: {\n nameB: { type: 'string' },\n },\n },\n ],\n },\n },\n },\n });\n\n // This would cause a stack overflow with the current implementation\n const schemaA = spec.components.schemas.A as SchemaObject;\n console.dir(spec.components.schemas, { depth: null });\n // The test should not throw RangeError: Maximum call stack size exceeded\n });\n\n // it('should handle circular allOf references without stack overflow', () => {\n // const spec = createSpec({\n // components: {\n // schemas: {\n // A: {\n // allOf: [\n // { $ref: '#/components/schemas/B' },\n // {\n // type: 'object',\n // properties: {\n // nameA: { type: 'string' },\n // },\n // },\n // ],\n // },\n // B: {\n // allOf: [\n // { $ref: '#/components/schemas/A' },\n // {\n // type: 'object',\n // properties: {\n // nameB: { type: 'string' },\n // },\n // },\n // ],\n // },\n // },\n // },\n // });\n\n // // This would cause a stack overflow with the current implementation\n // const schemaA = spec.components.schemas.A as SchemaObject;\n // console.dir(spec.components.schemas, { depth: null });\n // // The test should not throw RangeError: Maximum call stack size exceeded\n // });\n\n // it('should handle self-referencing allOf', () => {\n // const spec = createSpec({\n // components: {\n // schemas: {\n // SelfRef: {\n // allOf: [\n // { $ref: '#/components/schemas/SelfRef' },\n // {\n // type: 'object',\n // properties: {\n // name: { type: 'string' },\n // },\n // },\n // ],\n // },\n // },\n // },\n // });\n\n // // This would also cause infinite recursion\n // const schema = spec.components.schemas.SelfRef as SchemaObject;\n // });\n});\n"],
4
+ "sourcesContent": ["import { merge } from 'lodash-es';\nimport { describe, it } from 'node:test';\nimport type { OpenAPIObject, SchemaObject } from 'openapi3-ts/oas31';\n\nimport { augmentSpec } from './ir.ts';\nimport type { OurOpenAPIObject } from './types.ts';\n\nfunction createSpec(openapi?: Partial<OpenAPIObject>): OurOpenAPIObject {\n return augmentSpec(\n {\n spec: merge(\n {\n openapi: '3.1.0',\n info: {\n title: 'Test API',\n version: '1.0.0',\n },\n components: {\n schemas: {},\n securitySchemes: {},\n },\n paths: {},\n },\n openapi,\n ),\n },\n true,\n );\n}\n\ndescribe('merge allof', () => {\n // it('should merge allOf schemas', () => {\n // const spec = createSpec({\n // components: {\n // schemas: {\n // Base: {\n // type: 'object',\n // properties: {\n // id: { type: 'string' },\n // },\n // },\n // Extended: {\n // allOf: [\n // { $ref: '#/components/schemas/Base' },\n // {\n // type: 'object',\n // properties: {\n // name: { type: 'string' },\n // },\n // },\n // ],\n // },\n // },\n // },\n // });\n\n // const extendedSchema = spec.components.schemas.Extended as SchemaObject;\n // console.log(extendedSchema);\n // assert.deepStrictEqual(extendedSchema.type, 'object');\n // assert.deepStrictEqual(extendedSchema.properties, {\n // id: { type: 'string' },\n // name: { type: 'string' },\n // });\n // });\n // it('should handle empty allOf', () => {\n // const spec = createSpec({\n // components: {\n // schemas: {\n // EmptyAllOf: {\n // allOf: [],\n // },\n // },\n // },\n // });\n\n // const emptySchema = spec.components.schemas.EmptyAllOf as SchemaObject;\n // assert.deepStrictEqual(emptySchema.allOf, undefined);\n // assert.deepStrictEqual(emptySchema.type, undefined);\n // });\n // it('should handle allOf with only references', () => {\n // const spec = createSpec({\n // components: {\n // schemas: {\n // Base: {\n // type: 'object',\n // properties: {\n // id: { type: 'string' },\n // },\n // },\n // Extended: {\n // allOf: [\n // {\n // $ref: '#/components/schemas/Base',\n // },\n // ],\n // },\n // },\n // },\n // });\n\n // const extendedSchema = spec.components.schemas.Extended as SchemaObject;\n // assert.deepStrictEqual(extendedSchema.type, 'object');\n // assert.deepStrictEqual(extendedSchema.properties, {\n // id: {\n // type: 'string',\n // },\n // });\n // });\n\n it('should handle circular allOf references without stack overflow', () => {\n const spec = createSpec({\n components: {\n schemas: {\n A: {\n allOf: [\n { $ref: '#/components/schemas/B' },\n {\n type: 'object',\n properties: {\n nameA: { type: 'string' },\n },\n },\n ],\n },\n B: {\n allOf: [\n { $ref: '#/components/schemas/A' },\n {\n type: 'object',\n properties: {\n nameB: { type: 'string' },\n },\n },\n ],\n },\n },\n },\n });\n\n // This would cause a stack overflow with the current implementation\n const schemaA = spec.components.schemas.A as SchemaObject;\n console.dir(spec.components.schemas, { depth: null });\n // The test should not throw RangeError: Maximum call stack size exceeded\n });\n\n // it('should handle circular allOf references without stack overflow', () => {\n // const spec = createSpec({\n // components: {\n // schemas: {\n // A: {\n // allOf: [\n // { $ref: '#/components/schemas/B' },\n // {\n // type: 'object',\n // properties: {\n // nameA: { type: 'string' },\n // },\n // },\n // ],\n // },\n // B: {\n // allOf: [\n // { $ref: '#/components/schemas/A' },\n // {\n // type: 'object',\n // properties: {\n // nameB: { type: 'string' },\n // },\n // },\n // ],\n // },\n // },\n // },\n // });\n\n // // This would cause a stack overflow with the current implementation\n // const schemaA = spec.components.schemas.A as SchemaObject;\n // console.dir(spec.components.schemas, { depth: null });\n // // The test should not throw RangeError: Maximum call stack size exceeded\n // });\n\n // it('should handle self-referencing allOf', () => {\n // const spec = createSpec({\n // components: {\n // schemas: {\n // SelfRef: {\n // allOf: [\n // { $ref: '#/components/schemas/SelfRef' },\n // {\n // type: 'object',\n // properties: {\n // name: { type: 'string' },\n // },\n // },\n // ],\n // },\n // },\n // },\n // });\n\n // // This would also cause infinite recursion\n // const schema = spec.components.schemas.SelfRef as SchemaObject;\n // });\n});\n"],
5
5
  "mappings": "AAAA,SAAS,aAAa;AACtB,SAAS,UAAU,UAAU;AAG7B,SAAS,mBAAmB;AAG5B,SAAS,WAAW,SAAoD;AACtE,SAAO;AAAA,IACL;AAAA,MACE,MAAM;AAAA,QACJ;AAAA,UACE,SAAS;AAAA,UACT,MAAM;AAAA,YACJ,OAAO;AAAA,YACP,SAAS;AAAA,UACX;AAAA,UACA,YAAY;AAAA,YACV,SAAS,CAAC;AAAA,YACV,iBAAiB,CAAC;AAAA,UACpB;AAAA,UACA,OAAO,CAAC;AAAA,QACV;AAAA,QACA;AAAA,MACF;AAAA,IACF;AAAA,IACA;AAAA,EACF;AACF;AAEA,SAAS,eAAe,MAAM;AA+E5B,KAAG,kEAAkE,MAAM;AACzE,UAAM,OAAO,WAAW;AAAA,MACtB,YAAY;AAAA,QACV,SAAS;AAAA,UACP,GAAG;AAAA,YACD,OAAO;AAAA,cACL,EAAE,MAAM,yBAAyB;AAAA,cACjC;AAAA,gBACE,MAAM;AAAA,gBACN,YAAY;AAAA,kBACV,OAAO,EAAE,MAAM,SAAS;AAAA,gBAC1B;AAAA,cACF;AAAA,YACF;AAAA,UACF;AAAA,UACA,GAAG;AAAA,YACD,OAAO;AAAA,cACL,EAAE,MAAM,yBAAyB;AAAA,cACjC;AAAA,gBACE,MAAM;AAAA,gBACN,YAAY;AAAA,kBACV,OAAO,EAAE,MAAM,SAAS;AAAA,gBAC1B;AAAA,cACF;AAAA,YACF;AAAA,UACF;AAAA,QACF;AAAA,MACF;AAAA,IACF,CAAC;AAGD,UAAM,UAAU,KAAK,WAAW,QAAQ;AACxC,YAAQ,IAAI,KAAK,WAAW,SAAS,EAAE,OAAO,KAAK,CAAC;AAAA,EAEtD,CAAC;AA4DH,CAAC;",
6
6
  "names": []
7
7
  }
@@ -1,7 +1,8 @@
1
- import type { ComponentsObject, MediaTypeObject, OpenAPIObject, OperationObject, ParameterObject, PathsObject, ReferenceObject, RequestBodyObject, ResponseObject, SchemaObject, SecuritySchemeObject } from 'openapi3-ts/oas31';
1
+ import type { ComponentsObject, MediaTypeObject, OpenAPIObject, OperationObject, ParameterObject, PathsObject, ReferenceObject, RequestBodyObject, ResponseObject, SchemaObject, SecuritySchemeObject, ServerObject } from 'openapi3-ts/oas31';
2
2
  import type { PaginationGuess } from './pagination/guess-pagination.js';
3
3
  import type { SidebarData, TagGroups } from './sidebar.js';
4
4
  export interface OurOpenAPIObject extends OpenAPIObject {
5
+ servers: ServerObject[];
5
6
  'x-sdk-augmented'?: boolean;
6
7
  'x-docs': SidebarData;
7
8
  'x-tagGroups': TagGroups[];
@@ -1 +1 @@
1
- {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../src/lib/types.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EACV,gBAAgB,EAChB,eAAe,EACf,aAAa,EACb,eAAe,EACf,eAAe,EACf,WAAW,EACX,eAAe,EACf,iBAAiB,EACjB,cAAc,EACd,YAAY,EACZ,oBAAoB,EACrB,MAAM,mBAAmB,CAAC;AAE3B,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,kCAAkC,CAAC;AACxE,OAAO,KAAK,EAAE,WAAW,EAAE,SAAS,EAAE,MAAM,cAAc,CAAC;AAE3D,MAAM,WAAW,gBAAiB,SAAQ,aAAa;IACrD,iBAAiB,CAAC,EAAE,OAAO,CAAC;IAC5B,QAAQ,EAAE,WAAW,CAAC;IACtB,aAAa,EAAE,SAAS,EAAE,CAAC;IAC3B,UAAU,EAAE,IAAI,CAAC,gBAAgB,EAAE,SAAS,CAAC,GAAG;QAC9C,OAAO,EAAE,MAAM,CAAC,MAAM,EAAE,YAAY,GAAG,eAAe,CAAC,CAAC;QACxD,eAAe,EAAE,MAAM,CAAC,MAAM,EAAE,oBAAoB,CAAC,CAAC;KACvD,CAAC;IACF,KAAK,EAAE,WAAW,CAAC;CACpB;AAED,MAAM,WAAW,oBAAqB,SAAQ,iBAAiB;IAC7D,OAAO,EAAE,MAAM,CACb,MAAM,EACN,IAAI,CAAC,eAAe,EAAE,QAAQ,CAAC,GAAG;QAAE,MAAM,EAAE,eAAe,CAAA;KAAE,CAC9D,CAAC;CACH;AAED,MAAM,MAAM,oBAAoB,GAAG,IAAI,CACrC,eAAe,EACf,aAAa,GAAG,MAAM,GAAG,YAAY,GAAG,WAAW,GAAG,aAAa,CACpE,GAAG;IACF,IAAI,EAAE,MAAM,EAAE,CAAC;IACf,WAAW,EAAE,MAAM,CAAC;IACpB,UAAU,EAAE,eAAe,EAAE,CAAC;IAC9B,CAAC,WAAW,CAAC,EAAE,MAAM,CAAC;IACtB,CAAC,YAAY,CAAC,CAAC,EAAE,MAAM,CAAC;IACxB,SAAS,EAAE,MAAM,CACf,MAAM,EACN,IAAI,CAAC,cAAc,EAAE,SAAS,CAAC,GAAG;QAChC,OAAO,EAAE,MAAM,CAAC,MAAM,EAAE,eAAe,CAAC,CAAC;KAC1C,CACF,CAAC;IACF,WAAW,EAAE,oBAAoB,CAAC;CACnC,CAAC;AAEF,MAAM,WAAW,cAAc;IAC7B,MAAM,EAAE,MAAM,CAAC;IACf,IAAI,EAAE,MAAM,CAAC;IACb,GAAG,EAAE,MAAM,CAAC;CACb;AACD,MAAM,MAAM,SAAS,GAAG;IACtB,KAAK,EAAE,cAAc,CAAC;IACtB,SAAS,EAAE,oBAAoB,CAAC;CACjC,CAAC;AAEF,MAAM,MAAM,mBAAmB,GAAG,eAAe,GAAG;IAClD,KAAK,EAAE,MAAM,CAAC;CACf,CAAC"}
1
+ {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../src/lib/types.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EACV,gBAAgB,EAChB,eAAe,EACf,aAAa,EACb,eAAe,EACf,eAAe,EACf,WAAW,EACX,eAAe,EACf,iBAAiB,EACjB,cAAc,EACd,YAAY,EACZ,oBAAoB,EACpB,YAAY,EACb,MAAM,mBAAmB,CAAC;AAE3B,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,kCAAkC,CAAC;AACxE,OAAO,KAAK,EAAE,WAAW,EAAE,SAAS,EAAE,MAAM,cAAc,CAAC;AAE3D,MAAM,WAAW,gBAAiB,SAAQ,aAAa;IACrD,OAAO,EAAE,YAAY,EAAE,CAAC;IACxB,iBAAiB,CAAC,EAAE,OAAO,CAAC;IAC5B,QAAQ,EAAE,WAAW,CAAC;IACtB,aAAa,EAAE,SAAS,EAAE,CAAC;IAC3B,UAAU,EAAE,IAAI,CAAC,gBAAgB,EAAE,SAAS,CAAC,GAAG;QAC9C,OAAO,EAAE,MAAM,CAAC,MAAM,EAAE,YAAY,GAAG,eAAe,CAAC,CAAC;QACxD,eAAe,EAAE,MAAM,CAAC,MAAM,EAAE,oBAAoB,CAAC,CAAC;KACvD,CAAC;IACF,KAAK,EAAE,WAAW,CAAC;CACpB;AAED,MAAM,WAAW,oBAAqB,SAAQ,iBAAiB;IAC7D,OAAO,EAAE,MAAM,CACb,MAAM,EACN,IAAI,CAAC,eAAe,EAAE,QAAQ,CAAC,GAAG;QAAE,MAAM,EAAE,eAAe,CAAA;KAAE,CAC9D,CAAC;CACH;AAED,MAAM,MAAM,oBAAoB,GAAG,IAAI,CACrC,eAAe,EACf,aAAa,GAAG,MAAM,GAAG,YAAY,GAAG,WAAW,GAAG,aAAa,CACpE,GAAG;IACF,IAAI,EAAE,MAAM,EAAE,CAAC;IACf,WAAW,EAAE,MAAM,CAAC;IACpB,UAAU,EAAE,eAAe,EAAE,CAAC;IAC9B,CAAC,WAAW,CAAC,EAAE,MAAM,CAAC;IACtB,CAAC,YAAY,CAAC,CAAC,EAAE,MAAM,CAAC;IACxB,SAAS,EAAE,MAAM,CACf,MAAM,EACN,IAAI,CAAC,cAAc,EAAE,SAAS,CAAC,GAAG;QAChC,OAAO,EAAE,MAAM,CAAC,MAAM,EAAE,eAAe,CAAC,CAAC;KAC1C,CACF,CAAC;IACF,WAAW,EAAE,oBAAoB,CAAC;CACnC,CAAC;AAEF,MAAM,WAAW,cAAc;IAC7B,MAAM,EAAE,MAAM,CAAC;IACf,IAAI,EAAE,MAAM,CAAC;IACb,GAAG,EAAE,MAAM,CAAC;CACb;AACD,MAAM,MAAM,SAAS,GAAG;IACtB,KAAK,EAAE,cAAc,CAAC;IACtB,SAAS,EAAE,oBAAoB,CAAC;CACjC,CAAC;AAEF,MAAM,MAAM,mBAAmB,GAAG,eAAe,GAAG;IAClD,KAAK,EAAE,MAAM,CAAC;CACf,CAAC"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@sdk-it/spec",
3
- "version": "0.28.0",
3
+ "version": "0.29.0",
4
4
  "type": "module",
5
5
  "main": "./dist/index.js",
6
6
  "module": "./dist/index.js",
@@ -26,7 +26,7 @@
26
26
  "!**/*.tsbuildinfo"
27
27
  ],
28
28
  "dependencies": {
29
- "@sdk-it/core": "0.28.0",
29
+ "@sdk-it/core": "0.29.0",
30
30
  "openapi3-ts": "4.4.0",
31
31
  "pluralize": "^8.0.0",
32
32
  "stringcase": "^4.3.1",
@@ -1 +0,0 @@
1
- {"version":3,"file":"operation.d.ts","sourceRoot":"","sources":["../../src/lib/operation.ts"],"names":[],"mappings":"AAYA,OAAO,EAAE,KAAK,iBAAiB,EAAiB,MAAM,cAAc,CAAC;AAMrE,OAAO,KAAK,EAAE,gBAAgB,EAAwB,MAAM,YAAY,CAAC;AAiCzE,wBAAgB,WAAW,CACzB,MAAM,EAAE,iBAAiB,EACzB,OAAO,UAAQ,GACd,gBAAgB,CAsGlB"}
@@ -1,2 +0,0 @@
1
- export {};
2
- //# sourceMappingURL=operation.test.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"operation.test.d.ts","sourceRoot":"","sources":["../../src/lib/operation.test.ts"],"names":[],"mappings":""}
@@ -1,4 +0,0 @@
1
- import type { NavItem } from '../sidebar.js';
2
- import type { OurOpenAPIObject } from '../types.js';
3
- export declare function generateQuickReferenceOverview(spec: OurOpenAPIObject): NavItem;
4
- //# sourceMappingURL=overview-quick-reference.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"overview-quick-reference.d.ts","sourceRoot":"","sources":["../../../src/lib/overview-docs/overview-quick-reference.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,eAAe,CAAC;AAC7C,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,aAAa,CAAC;AAEpD,wBAAgB,8BAA8B,CAC5C,IAAI,EAAE,gBAAgB,GACrB,OAAO,CA6KT"}
@@ -1,4 +0,0 @@
1
- import type { NavItem } from '../sidebar.js';
2
- import type { OurOpenAPIObject } from '../types.js';
3
- export declare function generateSdkExamplesOverview(spec: OurOpenAPIObject, availableSdks?: string[]): NavItem;
4
- //# sourceMappingURL=overview-sdk-examples.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"overview-sdk-examples.d.ts","sourceRoot":"","sources":["../../../src/lib/overview-docs/overview-sdk-examples.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,eAAe,CAAC;AAC7C,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,aAAa,CAAC;AAEpD,wBAAgB,2BAA2B,CACzC,IAAI,EAAE,gBAAgB,EACtB,aAAa,GAAE,MAAM,EAAmB,GACvC,OAAO,CAwMT"}
@@ -1,4 +0,0 @@
1
- import type { NavItem } from '../sidebar.js';
2
- import type { OurOpenAPIObject } from '../types.js';
3
- export declare function generateUsageOverview(spec: OurOpenAPIObject): NavItem;
4
- //# sourceMappingURL=overview-usage.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"overview-usage.d.ts","sourceRoot":"","sources":["../../../src/lib/overview-docs/overview-usage.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,eAAe,CAAC;AAC7C,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,aAAa,CAAC;AAEpD,wBAAgB,qBAAqB,CAAC,IAAI,EAAE,gBAAgB,GAAG,OAAO,CA2FrE"}
@@ -1,4 +0,0 @@
1
- import type { SidebarData } from './sidebar.js';
2
- import type { OurOpenAPIObject } from './types.js';
3
- export declare function extractOverviewDocs(spec: OurOpenAPIObject): SidebarData;
4
- //# sourceMappingURL=overview-docs.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"overview-docs.d.ts","sourceRoot":"","sources":["../../src/lib/overview-docs.ts"],"names":[],"mappings":"AAMA,OAAO,KAAK,EAAW,WAAW,EAAE,MAAM,cAAc,CAAC;AACzD,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,YAAY,CAAC;AAmMnD,wBAAgB,mBAAmB,CAAC,IAAI,EAAE,gBAAgB,GAAG,WAAW,CA0DvE"}