@sdk-it/spec 0.46.3 → 0.46.5

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (77) 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-unique-schema-name.d.ts +2 -2
  6. package/dist/lib/find-unique-schema-name.d.ts.map +1 -1
  7. package/dist/lib/find-unique-schema-name.js.map +2 -2
  8. package/dist/lib/loaders/load-spec.d.ts.map +1 -1
  9. package/dist/lib/loaders/load-spec.js +13 -3
  10. package/dist/lib/loaders/load-spec.js.map +2 -2
  11. package/dist/lib/options.d.ts +7 -2
  12. package/dist/lib/options.d.ts.map +1 -1
  13. package/dist/lib/options.js +11 -1
  14. package/dist/lib/options.js.map +2 -2
  15. package/dist/lib/overview-docs/doc-text-utils.d.ts +0 -20
  16. package/dist/lib/overview-docs/doc-text-utils.d.ts.map +1 -1
  17. package/dist/lib/overview-docs/doc-text-utils.js +0 -37
  18. package/dist/lib/overview-docs/doc-text-utils.js.map +2 -2
  19. package/dist/lib/overview-docs/overview-docs.d.ts +8 -1
  20. package/dist/lib/overview-docs/overview-docs.d.ts.map +1 -1
  21. package/dist/lib/overview-docs/overview-docs.js +37 -12
  22. package/dist/lib/overview-docs/overview-docs.js.map +2 -2
  23. package/dist/lib/overview-docs/overview-page.d.ts +5 -0
  24. package/dist/lib/overview-docs/overview-page.d.ts.map +1 -0
  25. package/dist/lib/overview-docs/overview-page.js +60 -0
  26. package/dist/lib/overview-docs/overview-page.js.map +7 -0
  27. package/dist/lib/overview-docs/overview-sdks.d.ts +3 -0
  28. package/dist/lib/overview-docs/overview-sdks.d.ts.map +1 -0
  29. package/dist/lib/overview-docs/overview-sdks.js +42 -0
  30. package/dist/lib/overview-docs/overview-sdks.js.map +7 -0
  31. package/dist/lib/overview-docs/types.d.ts +23 -0
  32. package/dist/lib/overview-docs/types.d.ts.map +1 -0
  33. package/dist/lib/overview-docs/types.js +29 -0
  34. package/dist/lib/overview-docs/types.js.map +7 -0
  35. package/dist/lib/processing-plugins/create-default-processing-plugins.d.ts.map +1 -1
  36. package/dist/lib/processing-plugins/create-default-processing-plugins.js +4 -0
  37. package/dist/lib/processing-plugins/create-default-processing-plugins.js.map +2 -2
  38. package/dist/lib/processing-plugins/extract-overview-docs.d.ts.map +1 -1
  39. package/dist/lib/processing-plugins/extract-overview-docs.js +96 -3
  40. package/dist/lib/processing-plugins/extract-overview-docs.js.map +2 -2
  41. package/dist/lib/processing-plugins/index.d.ts +2 -0
  42. package/dist/lib/processing-plugins/index.d.ts.map +1 -1
  43. package/dist/lib/processing-plugins/index.js +2 -0
  44. package/dist/lib/processing-plugins/index.js.map +2 -2
  45. package/dist/lib/processing-plugins/normalize-request-bodies.d.ts +2 -2
  46. package/dist/lib/processing-plugins/normalize-request-bodies.d.ts.map +1 -1
  47. package/dist/lib/processing-plugins/normalize-request-bodies.js +6 -21
  48. package/dist/lib/processing-plugins/normalize-request-bodies.js.map +2 -2
  49. package/dist/lib/processing-plugins/normalize-schemas.d.ts.map +1 -1
  50. package/dist/lib/processing-plugins/normalize-schemas.js +10 -1
  51. package/dist/lib/processing-plugins/normalize-schemas.js.map +2 -2
  52. package/dist/lib/processing-plugins/normalize-security.d.ts +3 -0
  53. package/dist/lib/processing-plugins/normalize-security.d.ts.map +1 -0
  54. package/dist/lib/processing-plugins/normalize-security.js +142 -0
  55. package/dist/lib/processing-plugins/normalize-security.js.map +7 -0
  56. package/dist/lib/processing-plugins/resolve-security-scheme-uris.d.ts +9 -0
  57. package/dist/lib/processing-plugins/resolve-security-scheme-uris.d.ts.map +1 -0
  58. package/dist/lib/processing-plugins/resolve-security-scheme-uris.js +139 -0
  59. package/dist/lib/processing-plugins/resolve-security-scheme-uris.js.map +7 -0
  60. package/dist/lib/processing.js.map +1 -1
  61. package/dist/lib/sidebar.js +1 -1
  62. package/dist/lib/sidebar.js.map +2 -2
  63. package/dist/lib/types.d.ts +8 -5
  64. package/dist/lib/types.d.ts.map +1 -1
  65. package/package.json +2 -2
  66. package/dist/lib/overview-docs/doc-templates.d.ts +0 -51
  67. package/dist/lib/overview-docs/doc-templates.d.ts.map +0 -1
  68. package/dist/lib/overview-docs/doc-templates.js +0 -123
  69. package/dist/lib/overview-docs/doc-templates.js.map +0 -7
  70. package/dist/lib/overview-docs/overview-intro.d.ts +0 -4
  71. package/dist/lib/overview-docs/overview-intro.d.ts.map +0 -1
  72. package/dist/lib/overview-docs/overview-intro.js +0 -82
  73. package/dist/lib/overview-docs/overview-intro.js.map +0 -7
  74. package/dist/lib/security.d.ts +0 -12
  75. package/dist/lib/security.d.ts.map +0 -1
  76. package/dist/lib/security.js +0 -78
  77. package/dist/lib/security.js.map +0 -7
package/dist/index.d.ts CHANGED
@@ -15,8 +15,8 @@ export * from './lib/options.js';
15
15
  export * from './lib/processing-plugins/index.js';
16
16
  export * from './lib/processing.js';
17
17
  export * from './lib/overview-docs/overview-errors.js';
18
+ export * from './lib/overview-docs/types.js';
18
19
  export * from './lib/reserved-keywords.js';
19
- export * from './lib/security.js';
20
20
  export * from './lib/sidebar.js';
21
21
  export * from './lib/tag.js';
22
22
  export * from './lib/types.js';
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,cAAc,2BAA2B,CAAC;AAC1C,cAAc,oCAAoC,CAAC;AACnD,cAAc,kCAAkC,CAAC;AACjD,cAAc,6BAA6B,CAAC;AAC5C,cAAc,sBAAsB,CAAC;AACrC,cAAc,wBAAwB,CAAC;AACvC,cAAc,aAAa,CAAC;AAC5B,cAAc,8BAA8B,CAAC;AAC7C,cAAc,aAAa,CAAC;AAC5B,cAAc,4BAA4B,CAAC;AAC3C,cAAc,+BAA+B,CAAC;AAC9C,cAAc,gCAAgC,CAAC;AAC/C,cAAc,mBAAmB,CAAC;AAClC,cAAc,kBAAkB,CAAC;AACjC,cAAc,mCAAmC,CAAC;AAClD,cAAc,qBAAqB,CAAC;AACpC,cAAc,wCAAwC,CAAC;AACvD,cAAc,4BAA4B,CAAC;AAC3C,cAAc,mBAAmB,CAAC;AAClC,cAAc,kBAAkB,CAAC;AACjC,cAAc,cAAc,CAAC;AAC7B,cAAc,gBAAgB,CAAC;AAC/B,cAAc,uBAAuB,CAAC"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,cAAc,2BAA2B,CAAC;AAC1C,cAAc,oCAAoC,CAAC;AACnD,cAAc,kCAAkC,CAAC;AACjD,cAAc,6BAA6B,CAAC;AAC5C,cAAc,sBAAsB,CAAC;AACrC,cAAc,wBAAwB,CAAC;AACvC,cAAc,aAAa,CAAC;AAC5B,cAAc,8BAA8B,CAAC;AAC7C,cAAc,aAAa,CAAC;AAC5B,cAAc,4BAA4B,CAAC;AAC3C,cAAc,+BAA+B,CAAC;AAC9C,cAAc,gCAAgC,CAAC;AAC/C,cAAc,mBAAmB,CAAC;AAClC,cAAc,kBAAkB,CAAC;AACjC,cAAc,mCAAmC,CAAC;AAClD,cAAc,qBAAqB,CAAC;AACpC,cAAc,wCAAwC,CAAC;AACvD,cAAc,8BAA8B,CAAC;AAC7C,cAAc,4BAA4B,CAAC;AAC3C,cAAc,kBAAkB,CAAC;AACjC,cAAc,cAAc,CAAC;AAC7B,cAAc,gBAAgB,CAAC;AAC/B,cAAc,uBAAuB,CAAC"}
package/dist/index.js CHANGED
@@ -15,8 +15,8 @@ export * from "./lib/options.js";
15
15
  export * from "./lib/processing-plugins/index.js";
16
16
  export * from "./lib/processing.js";
17
17
  export * from "./lib/overview-docs/overview-errors.js";
18
+ export * from "./lib/overview-docs/types.js";
18
19
  export * from "./lib/reserved-keywords.js";
19
- export * from "./lib/security.js";
20
20
  export * from "./lib/sidebar.js";
21
21
  export * from "./lib/tag.js";
22
22
  export * from "./lib/types.js";
package/dist/index.js.map CHANGED
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "version": 3,
3
3
  "sources": ["../src/index.ts"],
4
- "sourcesContent": ["export * from './lib/create-operation.js';\nexport * from './lib/find-polymorphic-varients.js';\nexport * from './lib/find-unique-schema-name.js';\nexport * from './lib/for-each-operation.js';\nexport * from './lib/format-name.js';\nexport * from './lib/get-ref-usage.js';\nexport * from './lib/ir.js';\nexport * from './lib/is-primitive-schema.js';\nexport * from './lib/is.js';\nexport * from './lib/loaders/load-spec.js';\nexport * from './lib/loaders/local-loader.js';\nexport * from './lib/loaders/remote-loader.js';\nexport * from './lib/metadata.js';\nexport * from './lib/options.js';\nexport * from './lib/processing-plugins/index.js';\nexport * from './lib/processing.js';\nexport * from './lib/overview-docs/overview-errors.js';\nexport * from './lib/reserved-keywords.js';\nexport * from './lib/security.js';\nexport * from './lib/sidebar.js';\nexport * from './lib/tag.js';\nexport * from './lib/types.js';\nexport * from './lib/walk-schemas.js';\n"],
4
+ "sourcesContent": ["export * from './lib/create-operation.js';\nexport * from './lib/find-polymorphic-varients.js';\nexport * from './lib/find-unique-schema-name.js';\nexport * from './lib/for-each-operation.js';\nexport * from './lib/format-name.js';\nexport * from './lib/get-ref-usage.js';\nexport * from './lib/ir.js';\nexport * from './lib/is-primitive-schema.js';\nexport * from './lib/is.js';\nexport * from './lib/loaders/load-spec.js';\nexport * from './lib/loaders/local-loader.js';\nexport * from './lib/loaders/remote-loader.js';\nexport * from './lib/metadata.js';\nexport * from './lib/options.js';\nexport * from './lib/processing-plugins/index.js';\nexport * from './lib/processing.js';\nexport * from './lib/overview-docs/overview-errors.js';\nexport * from './lib/overview-docs/types.js';\nexport * from './lib/reserved-keywords.js';\nexport * from './lib/sidebar.js';\nexport * from './lib/tag.js';\nexport * from './lib/types.js';\nexport * from './lib/walk-schemas.js';\n"],
5
5
  "mappings": "AAAA,cAAc;AACd,cAAc;AACd,cAAc;AACd,cAAc;AACd,cAAc;AACd,cAAc;AACd,cAAc;AACd,cAAc;AACd,cAAc;AACd,cAAc;AACd,cAAc;AACd,cAAc;AACd,cAAc;AACd,cAAc;AACd,cAAc;AACd,cAAc;AACd,cAAc;AACd,cAAc;AACd,cAAc;AACd,cAAc;AACd,cAAc;AACd,cAAc;AACd,cAAc;",
6
6
  "names": []
7
7
  }
@@ -1,3 +1,3 @@
1
- import type { OpenAPIObject } from 'openapi3-ts/oas31';
2
- export declare function findUniqueSchemaName(spec: OpenAPIObject, initialName: string, potentialSuffixList: string[], fallback?: string): string;
1
+ import { type OpenAPIDocument } from '@sdk-it/core';
2
+ export declare function findUniqueSchemaName(spec: OpenAPIDocument, initialName: string, potentialSuffixList: string[], fallback?: string): string;
3
3
  //# sourceMappingURL=find-unique-schema-name.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"find-unique-schema-name.d.ts","sourceRoot":"","sources":["../../src/lib/find-unique-schema-name.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,mBAAmB,CAAC;AAMvD,wBAAgB,oBAAoB,CAClC,IAAI,EAAE,aAAa,EACnB,WAAW,EAAE,MAAM,EACnB,mBAAmB,EAAE,MAAM,EAAE,EAC7B,QAAQ,CAAC,EAAE,MAAM,UAUlB"}
1
+ {"version":3,"file":"find-unique-schema-name.d.ts","sourceRoot":"","sources":["../../src/lib/find-unique-schema-name.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,eAAe,EAA8B,MAAM,cAAc,CAAC;AAIhF,wBAAgB,oBAAoB,CAClC,IAAI,EAAE,eAAe,EACrB,WAAW,EAAE,MAAM,EACnB,mBAAmB,EAAE,MAAM,EAAE,EAC7B,QAAQ,CAAC,EAAE,MAAM,UAUlB"}
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "version": 3,
3
3
  "sources": ["../../src/lib/find-unique-schema-name.ts"],
4
- "sourcesContent": ["import type { OpenAPIObject } from 'openapi3-ts/oas31';\n\nimport { joinSkipDigits, pascalcase } from '@sdk-it/core';\n\nconst reservedNames = new Set(['Function', 'Error']);\n\nexport function findUniqueSchemaName(\n spec: OpenAPIObject,\n initialName: string,\n potentialSuffixList: string[],\n fallback?: string,\n) {\n spec.components ??= {};\n spec.components.schemas ??= {};\n let name = pascalcase(initialName);\n while (spec.components.schemas[name] || reservedNames.has(name)) {\n const suffix = potentialSuffixList.shift();\n name = pascalcase(joinSkipDigits([name, suffix || ''], ' '));\n }\n return initialName === name ? (fallback ?? name) : name;\n}\n"],
5
- "mappings": "AAEA,SAAS,gBAAgB,kBAAkB;AAE3C,MAAM,gBAAgB,oBAAI,IAAI,CAAC,YAAY,OAAO,CAAC;AAE5C,SAAS,qBACd,MACA,aACA,qBACA,UACA;AACA,OAAK,eAAe,CAAC;AACrB,OAAK,WAAW,YAAY,CAAC;AAC7B,MAAI,OAAO,WAAW,WAAW;AACjC,SAAO,KAAK,WAAW,QAAQ,IAAI,KAAK,cAAc,IAAI,IAAI,GAAG;AAC/D,UAAM,SAAS,oBAAoB,MAAM;AACzC,WAAO,WAAW,eAAe,CAAC,MAAM,UAAU,EAAE,GAAG,GAAG,CAAC;AAAA,EAC7D;AACA,SAAO,gBAAgB,OAAQ,YAAY,OAAQ;AACrD;",
4
+ "sourcesContent": ["import { type OpenAPIDocument, joinSkipDigits, pascalcase } from '@sdk-it/core';\n\nconst reservedNames = new Set(['Function', 'Error']);\n\nexport function findUniqueSchemaName(\n spec: OpenAPIDocument,\n initialName: string,\n potentialSuffixList: string[],\n fallback?: string,\n) {\n spec.components ??= {};\n spec.components.schemas ??= {};\n let name = pascalcase(initialName);\n while (spec.components.schemas[name] || reservedNames.has(name)) {\n const suffix = potentialSuffixList.shift();\n name = pascalcase(joinSkipDigits([name, suffix || ''], ' '));\n }\n return initialName === name ? (fallback ?? name) : name;\n}\n"],
5
+ "mappings": "AAAA,SAA+B,gBAAgB,kBAAkB;AAEjE,MAAM,gBAAgB,oBAAI,IAAI,CAAC,YAAY,OAAO,CAAC;AAE5C,SAAS,qBACd,MACA,aACA,qBACA,UACA;AACA,OAAK,eAAe,CAAC;AACrB,OAAK,WAAW,YAAY,CAAC;AAC7B,MAAI,OAAO,WAAW,WAAW;AACjC,SAAO,KAAK,WAAW,QAAQ,IAAI,KAAK,cAAc,IAAI,IAAI,GAAG;AAC/D,UAAM,SAAS,oBAAoB,MAAM;AACzC,WAAO,WAAW,eAAe,CAAC,MAAM,UAAU,EAAE,GAAG,GAAG,CAAC;AAAA,EAC7D;AACA,SAAO,gBAAgB,OAAQ,YAAY,OAAQ;AACrD;",
6
6
  "names": []
7
7
  }
@@ -1 +1 @@
1
- {"version":3,"file":"load-spec.d.ts","sourceRoot":"","sources":["../../../src/lib/loaders/load-spec.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,mBAAmB,CAAC;AAqBvD,wBAAsB,QAAQ,CAAC,QAAQ,EAAE,MAAM,GAAG,OAAO,CAAC,aAAa,CAAC,CAMvE;AAED,wBAAgB,QAAQ,CAAC,CAAC,EAAE,QAAQ,EAAE,MAAM,GAAG,OAAO,CAAC,CAAC,CAAC,CAMxD"}
1
+ {"version":3,"file":"load-spec.d.ts","sourceRoot":"","sources":["../../../src/lib/loaders/load-spec.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,mBAAmB,CAAC;AAuBvD,wBAAsB,QAAQ,CAAC,QAAQ,EAAE,MAAM,GAAG,OAAO,CAAC,aAAa,CAAC,CASvE;AAED,wBAAgB,QAAQ,CAAC,CAAC,EAAE,QAAQ,EAAE,MAAM,GAAG,OAAO,CAAC,CAAC,CAAC,CAKxD"}
@@ -1,3 +1,5 @@
1
+ import { resolve } from "node:path";
2
+ import { pathToFileURL } from "node:url";
1
3
  import { loadLocal } from "./local-loader.js";
2
4
  import { convertPostmanToOpenAPI } from "./postman/postman-converter.js";
3
5
  import { loadRemote } from "./remote-loader.js";
@@ -9,15 +11,23 @@ async function loadSpec(location) {
9
11
  if (isPostman(content)) {
10
12
  content = convertPostmanToOpenAPI(content);
11
13
  }
12
- return content;
14
+ const spec = content;
15
+ spec.$self ??= documentUri(location);
16
+ return spec;
13
17
  }
14
18
  function loadFile(location) {
15
- const [protocol] = location.split(":");
16
- if (protocol === "http" || protocol === "https") {
19
+ if (isRemote(location)) {
17
20
  return loadRemote(location);
18
21
  }
19
22
  return loadLocal(location);
20
23
  }
24
+ function documentUri(location) {
25
+ return isRemote(location) || location.startsWith("file:") ? location : pathToFileURL(resolve(location)).href;
26
+ }
27
+ function isRemote(location) {
28
+ const [protocol] = location.split(":");
29
+ return protocol === "http" || protocol === "https";
30
+ }
21
31
  export {
22
32
  loadFile,
23
33
  loadSpec
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "version": 3,
3
3
  "sources": ["../../../src/lib/loaders/load-spec.ts"],
4
- "sourcesContent": ["import type { OpenAPIObject } from 'openapi3-ts/oas31';\n\nimport { loadLocal } from './local-loader.js';\nimport { convertPostmanToOpenAPI } from './postman/postman-converter.js';\nimport type { PostmanCollection } from './postman/spec-types.js';\nimport { loadRemote } from './remote-loader.js';\n\nfunction isPostman(content: unknown): content is PostmanCollection {\n return (\n typeof content === 'object' &&\n content !== null &&\n 'info' in content &&\n typeof content.info === 'object' &&\n content.info !== null &&\n 'item' in content &&\n Array.isArray(content.item) &&\n 'schema' in content.info &&\n typeof content.info.schema === 'string' &&\n content.info.schema.includes('//schema.getpostman.com/')\n );\n}\nexport async function loadSpec(location: string): Promise<OpenAPIObject> {\n let content = await loadFile(location);\n if (isPostman(content)) {\n content = convertPostmanToOpenAPI(content);\n }\n return content as OpenAPIObject;\n}\n\nexport function loadFile<T>(location: string): Promise<T> {\n const [protocol] = location.split(':');\n if (protocol === 'http' || protocol === 'https') {\n return loadRemote(location);\n }\n return loadLocal(location);\n}\n"],
5
- "mappings": "AAEA,SAAS,iBAAiB;AAC1B,SAAS,+BAA+B;AAExC,SAAS,kBAAkB;AAE3B,SAAS,UAAU,SAAgD;AACjE,SACE,OAAO,YAAY,YACnB,YAAY,QACZ,UAAU,WACV,OAAO,QAAQ,SAAS,YACxB,QAAQ,SAAS,QACjB,UAAU,WACV,MAAM,QAAQ,QAAQ,IAAI,KAC1B,YAAY,QAAQ,QACpB,OAAO,QAAQ,KAAK,WAAW,YAC/B,QAAQ,KAAK,OAAO,SAAS,0BAA0B;AAE3D;AACA,eAAsB,SAAS,UAA0C;AACvE,MAAI,UAAU,MAAM,SAAS,QAAQ;AACrC,MAAI,UAAU,OAAO,GAAG;AACtB,cAAU,wBAAwB,OAAO;AAAA,EAC3C;AACA,SAAO;AACT;AAEO,SAAS,SAAY,UAA8B;AACxD,QAAM,CAAC,QAAQ,IAAI,SAAS,MAAM,GAAG;AACrC,MAAI,aAAa,UAAU,aAAa,SAAS;AAC/C,WAAO,WAAW,QAAQ;AAAA,EAC5B;AACA,SAAO,UAAU,QAAQ;AAC3B;",
4
+ "sourcesContent": ["import { resolve } from 'node:path';\nimport { pathToFileURL } from 'node:url';\nimport type { OpenAPIObject } from 'openapi3-ts/oas31';\n\nimport type { OpenAPIDocument } from '@sdk-it/core';\n\nimport { loadLocal } from './local-loader.js';\nimport { convertPostmanToOpenAPI } from './postman/postman-converter.js';\nimport type { PostmanCollection } from './postman/spec-types.js';\nimport { loadRemote } from './remote-loader.js';\n\nfunction isPostman(content: unknown): content is PostmanCollection {\n return (\n typeof content === 'object' &&\n content !== null &&\n 'info' in content &&\n typeof content.info === 'object' &&\n content.info !== null &&\n 'item' in content &&\n Array.isArray(content.item) &&\n 'schema' in content.info &&\n typeof content.info.schema === 'string' &&\n content.info.schema.includes('//schema.getpostman.com/')\n );\n}\nexport async function loadSpec(location: string): Promise<OpenAPIObject> {\n let content = await loadFile(location);\n if (isPostman(content)) {\n content = convertPostmanToOpenAPI(content);\n }\n const spec = content as OpenAPIDocument;\n // Relative references inside the document resolve against where it came from.\n spec.$self ??= documentUri(location);\n return spec as OpenAPIObject;\n}\n\nexport function loadFile<T>(location: string): Promise<T> {\n if (isRemote(location)) {\n return loadRemote(location);\n }\n return loadLocal(location);\n}\n\nfunction documentUri(location: string) {\n return isRemote(location) || location.startsWith('file:')\n ? location\n : pathToFileURL(resolve(location)).href;\n}\n\nfunction isRemote(location: string) {\n const [protocol] = location.split(':');\n return protocol === 'http' || protocol === 'https';\n}\n"],
5
+ "mappings": "AAAA,SAAS,eAAe;AACxB,SAAS,qBAAqB;AAK9B,SAAS,iBAAiB;AAC1B,SAAS,+BAA+B;AAExC,SAAS,kBAAkB;AAE3B,SAAS,UAAU,SAAgD;AACjE,SACE,OAAO,YAAY,YACnB,YAAY,QACZ,UAAU,WACV,OAAO,QAAQ,SAAS,YACxB,QAAQ,SAAS,QACjB,UAAU,WACV,MAAM,QAAQ,QAAQ,IAAI,KAC1B,YAAY,QAAQ,QACpB,OAAO,QAAQ,KAAK,WAAW,YAC/B,QAAQ,KAAK,OAAO,SAAS,0BAA0B;AAE3D;AACA,eAAsB,SAAS,UAA0C;AACvE,MAAI,UAAU,MAAM,SAAS,QAAQ;AACrC,MAAI,UAAU,OAAO,GAAG;AACtB,cAAU,wBAAwB,OAAO;AAAA,EAC3C;AACA,QAAM,OAAO;AAEb,OAAK,UAAU,YAAY,QAAQ;AACnC,SAAO;AACT;AAEO,SAAS,SAAY,UAA8B;AACxD,MAAI,SAAS,QAAQ,GAAG;AACtB,WAAO,WAAW,QAAQ;AAAA,EAC5B;AACA,SAAO,UAAU,QAAQ;AAC3B;AAEA,SAAS,YAAY,UAAkB;AACrC,SAAO,SAAS,QAAQ,KAAK,SAAS,WAAW,OAAO,IACpD,WACA,cAAc,QAAQ,QAAQ,CAAC,EAAE;AACvC;AAEA,SAAS,SAAS,UAAkB;AAClC,QAAM,CAAC,QAAQ,IAAI,SAAS,MAAM,GAAG;AACrC,SAAO,aAAa,UAAU,aAAa;AAC7C;",
6
6
  "names": []
7
7
  }
@@ -1,8 +1,9 @@
1
- import type { OpenAPIObject, OperationObject } from 'openapi3-ts/oas31';
1
+ import type { OperationObject } from 'openapi3-ts/oas31';
2
+ import { type OpenAPIDocument } from '@sdk-it/core';
2
3
  import type { ProcessingDiagnostic, ProcessingPlugin } from './processing.js';
3
4
  import type { IR } from './types.js';
4
5
  export interface GenerateSdkConfig {
5
- spec: OpenAPIObject;
6
+ spec: OpenAPIDocument;
6
7
  responses?: ResponsesConfig;
7
8
  pagination?: PaginationConfig | false;
8
9
  operationId?: (operation: OperationObject, path: string, method: string) => string;
@@ -25,6 +26,10 @@ export declare function coeraceConfig(config: GenerateSdkConfig): {
25
26
  enabled: boolean;
26
27
  };
27
28
  responses: ResponsesConfig;
29
+ docs: {
30
+ entries: unknown;
31
+ sdks: unknown;
32
+ };
28
33
  spec: IR;
29
34
  operationId: (operation: OperationObject, path: string, method: string) => string;
30
35
  tag: (operation: OperationObject, path: string) => string;
@@ -1 +1 @@
1
- {"version":3,"file":"options.d.ts","sourceRoot":"","sources":["../../src/lib/options.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EACV,aAAa,EACb,eAAe,EAEhB,MAAM,mBAAmB,CAAC;AAI3B,OAAO,KAAK,EAAE,oBAAoB,EAAE,gBAAgB,EAAE,MAAM,iBAAiB,CAAC;AAE9E,OAAO,KAAK,EAAE,EAAE,EAAE,MAAM,YAAY,CAAC;AAErC,MAAM,WAAW,iBAAiB;IAChC,IAAI,EAAE,aAAa,CAAC;IACpB,SAAS,CAAC,EAAE,eAAe,CAAC;IAC5B,UAAU,CAAC,EAAE,gBAAgB,GAAG,KAAK,CAAC;IACtC,WAAW,CAAC,EAAE,CACZ,SAAS,EAAE,eAAe,EAC1B,IAAI,EAAE,MAAM,EACZ,MAAM,EAAE,MAAM,KACX,MAAM,CAAC;IACZ,GAAG,CAAC,EAAE,CAAC,SAAS,EAAE,eAAe,EAAE,IAAI,EAAE,MAAM,KAAK,MAAM,CAAC;IAC3D,OAAO,CAAC,EAAE,SAAS,gBAAgB,EAAE,CAAC;IACtC,MAAM,CAAC,EAAE,WAAW,CAAC;IACrB,YAAY,CAAC,EAAE,CAAC,UAAU,EAAE,oBAAoB,KAAK,IAAI,CAAC;CAC3D;AACD,MAAM,WAAW,eAAe;IAC9B,qBAAqB,CAAC,EAAE,OAAO,CAAC;CACjC;AAED,MAAM,MAAM,gBAAgB,GAAG;IAC7B,KAAK,CAAC,EAAE,OAAO,CAAC;CACjB,CAAC;AACF,wBAAgB,gBAAgB,CAAC,WAAW,EAAE,MAAM,UAEnD;AAED,eAAO,MAAM,QAAQ,EAAE,OAAO,CAAC,iBAAiB,CAAC,GAC/C,QAAQ,CAAC,IAAI,CAAC,iBAAiB,EAAE,aAAa,GAAG,KAAK,CAAC,CAkBxD,CAAC;AAEF,wBAAgB,aAAa,CAAC,MAAM,EAAE,iBAAiB;;;;;;;6BAzCxC,eAAe,QACpB,MAAM,UACJ,MAAM,KACX,MAAM;qBACO,eAAe,QAAQ,MAAM,KAAK,MAAM;EAuE3D;AAED,wBAAgB,sBAAsB,CACpC,OAAO,EAAE,gBAAgB,GAAG,SAAS,GAAG,KAAK;;;EAmB9C"}
1
+ {"version":3,"file":"options.d.ts","sourceRoot":"","sources":["../../src/lib/options.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,mBAAmB,CAAC;AAEzD,OAAO,EACL,KAAK,eAAe,EAIrB,MAAM,cAAc,CAAC;AAEtB,OAAO,KAAK,EAAE,oBAAoB,EAAE,gBAAgB,EAAE,MAAM,iBAAiB,CAAC;AAE9E,OAAO,KAAK,EAAE,EAAE,EAAE,MAAM,YAAY,CAAC;AAErC,MAAM,WAAW,iBAAiB;IAChC,IAAI,EAAE,eAAe,CAAC;IACtB,SAAS,CAAC,EAAE,eAAe,CAAC;IAC5B,UAAU,CAAC,EAAE,gBAAgB,GAAG,KAAK,CAAC;IACtC,WAAW,CAAC,EAAE,CACZ,SAAS,EAAE,eAAe,EAC1B,IAAI,EAAE,MAAM,EACZ,MAAM,EAAE,MAAM,KACX,MAAM,CAAC;IACZ,GAAG,CAAC,EAAE,CAAC,SAAS,EAAE,eAAe,EAAE,IAAI,EAAE,MAAM,KAAK,MAAM,CAAC;IAC3D,OAAO,CAAC,EAAE,SAAS,gBAAgB,EAAE,CAAC;IACtC,MAAM,CAAC,EAAE,WAAW,CAAC;IACrB,YAAY,CAAC,EAAE,CAAC,UAAU,EAAE,oBAAoB,KAAK,IAAI,CAAC;CAC3D;AACD,MAAM,WAAW,eAAe;IAC9B,qBAAqB,CAAC,EAAE,OAAO,CAAC;CACjC;AAED,MAAM,MAAM,gBAAgB,GAAG;IAC7B,KAAK,CAAC,EAAE,OAAO,CAAC;CACjB,CAAC;AACF,wBAAgB,gBAAgB,CAAC,WAAW,EAAE,MAAM,UAEnD;AAED,eAAO,MAAM,QAAQ,EAAE,OAAO,CAAC,iBAAiB,CAAC,GAC/C,QAAQ,CAAC,IAAI,CAAC,iBAAiB,EAAE,aAAa,GAAG,KAAK,CAAC,CAkBxD,CAAC;AAEF,wBAAgB,aAAa,CAAC,MAAM,EAAE,iBAAiB;;;;;;;iBAkCf,OAAO;cACV,OAAO;;;6BA5E7B,eAAe,QACpB,MAAM,UACJ,MAAM,KACX,MAAM;qBACO,eAAe,QAAQ,MAAM,KAAK,MAAM;EA8E3D;AAED,wBAAgB,sBAAsB,CACpC,OAAO,EAAE,gBAAgB,GAAG,SAAS,GAAG,KAAK;;;EAmB9C"}
@@ -1,4 +1,7 @@
1
- import { camelcase, resolveRef } from "@sdk-it/core";
1
+ import {
2
+ camelcase,
3
+ resolveRef
4
+ } from "@sdk-it/core";
2
5
  import { determineGenericTag, sanitizeTag } from "./tag.js";
3
6
  function cleanOperationId(operationId) {
4
7
  return camelcase(operationId.split("#").pop());
@@ -33,6 +36,7 @@ function coeraceConfig(config) {
33
36
  },
34
37
  paths: config.spec.paths ?? {},
35
38
  "x-docs": [],
39
+ "x-sdks": [],
36
40
  "x-tagGroups": config.spec["x-tagGroups"] ?? [
37
41
  {
38
42
  name: "API",
@@ -45,6 +49,12 @@ function coeraceConfig(config) {
45
49
  return {
46
50
  pagination: coercePaginationConfig(config.pagination),
47
51
  responses: config.responses ?? {},
52
+ // Authored `x-docs` / `x-sdks` change shape during processing, so they are
53
+ // handed to the overview plugin as raw input instead of living on the IR.
54
+ docs: {
55
+ entries: config.spec["x-docs"],
56
+ sdks: config.spec["x-sdks"]
57
+ },
48
58
  spec,
49
59
  operationId: config.operationId ?? defaults.operationId,
50
60
  tag: config.tag ?? defaults.tag
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "version": 3,
3
3
  "sources": ["../../src/lib/options.ts"],
4
- "sourcesContent": ["import type {\n OpenAPIObject,\n OperationObject,\n SecuritySchemeObject,\n} from 'openapi3-ts/oas31';\n\nimport { camelcase, resolveRef } from '@sdk-it/core';\n\nimport type { ProcessingDiagnostic, ProcessingPlugin } from './processing.js';\nimport { determineGenericTag, sanitizeTag } from './tag.js';\nimport type { IR } from './types.js';\n\nexport interface GenerateSdkConfig {\n spec: OpenAPIObject;\n responses?: ResponsesConfig;\n pagination?: PaginationConfig | false;\n operationId?: (\n operation: OperationObject,\n path: string,\n method: string,\n ) => string;\n tag?: (operation: OperationObject, path: string) => string;\n plugins?: readonly ProcessingPlugin[];\n signal?: AbortSignal;\n onDiagnostic?: (diagnostic: ProcessingDiagnostic) => void;\n}\nexport interface ResponsesConfig {\n flattenErrorResponses?: boolean;\n}\n\nexport type PaginationConfig = {\n guess?: boolean;\n};\nexport function cleanOperationId(operationId: string) {\n return camelcase(operationId.split('#').pop()!);\n}\n\nexport const defaults: Partial<GenerateSdkConfig> &\n Required<Pick<GenerateSdkConfig, 'operationId' | 'tag'>> = {\n operationId: (operation, path, method) => {\n if (operation.operationId) {\n return cleanOperationId(operation.operationId);\n }\n\n return camelcase(\n [method, ...path.replace(/[\\\\/\\\\{\\\\}]/g, ' ').split(' ')]\n .filter(Boolean)\n .join(' ')\n .trim(),\n );\n },\n tag: (operation, path) => {\n return operation.tags?.[0]\n ? sanitizeTag(operation.tags?.[0])\n : determineGenericTag(path, operation);\n },\n};\n\nexport function coeraceConfig(config: GenerateSdkConfig) {\n const spec: IR = {\n ...config.spec,\n components: {\n ...config.spec.components,\n schemas: config.spec.components?.schemas ?? {},\n securitySchemes: Object.fromEntries(\n Object.entries(config.spec.components?.securitySchemes ?? {}).map(\n ([name, schema]) => [\n name,\n resolveRef<SecuritySchemeObject>(config.spec, schema),\n ],\n ),\n ),\n },\n paths: config.spec.paths ?? {},\n 'x-docs': [],\n 'x-tagGroups': config.spec['x-tagGroups'] ?? [\n {\n name: 'API',\n tags: config.spec.tags?.map((tag) => tag.name) ?? [],\n },\n ],\n servers: config.spec.servers ?? [],\n tags: config.spec.tags ?? [],\n };\n\n return {\n pagination: coercePaginationConfig(config.pagination),\n responses: config.responses ?? {},\n spec,\n operationId: config.operationId ?? defaults.operationId,\n tag: config.tag ?? defaults.tag,\n };\n}\n\nexport function coercePaginationConfig(\n options: PaginationConfig | undefined | false,\n) {\n if (options === undefined) {\n return {\n guess: true,\n enabled: true,\n };\n }\n if (options === false) {\n return {\n enabled: false,\n guess: false,\n };\n }\n // If options is true, we assume pagination is enabled with guessing\n return {\n guess: options.guess ?? true,\n enabled: true,\n };\n}\n"],
5
- "mappings": "AAMA,SAAS,WAAW,kBAAkB;AAGtC,SAAS,qBAAqB,mBAAmB;AAwB1C,SAAS,iBAAiB,aAAqB;AACpD,SAAO,UAAU,YAAY,MAAM,GAAG,EAAE,IAAI,CAAE;AAChD;AAEO,MAAM,WACgD;AAAA,EAC3D,aAAa,CAAC,WAAW,MAAM,WAAW;AACxC,QAAI,UAAU,aAAa;AACzB,aAAO,iBAAiB,UAAU,WAAW;AAAA,IAC/C;AAEA,WAAO;AAAA,MACL,CAAC,QAAQ,GAAG,KAAK,QAAQ,gBAAgB,GAAG,EAAE,MAAM,GAAG,CAAC,EACrD,OAAO,OAAO,EACd,KAAK,GAAG,EACR,KAAK;AAAA,IACV;AAAA,EACF;AAAA,EACA,KAAK,CAAC,WAAW,SAAS;AACxB,WAAO,UAAU,OAAO,CAAC,IACrB,YAAY,UAAU,OAAO,CAAC,CAAC,IAC/B,oBAAoB,MAAM,SAAS;AAAA,EACzC;AACF;AAEO,SAAS,cAAc,QAA2B;AACvD,QAAM,OAAW;AAAA,IACf,GAAG,OAAO;AAAA,IACV,YAAY;AAAA,MACV,GAAG,OAAO,KAAK;AAAA,MACf,SAAS,OAAO,KAAK,YAAY,WAAW,CAAC;AAAA,MAC7C,iBAAiB,OAAO;AAAA,QACtB,OAAO,QAAQ,OAAO,KAAK,YAAY,mBAAmB,CAAC,CAAC,EAAE;AAAA,UAC5D,CAAC,CAAC,MAAM,MAAM,MAAM;AAAA,YAClB;AAAA,YACA,WAAiC,OAAO,MAAM,MAAM;AAAA,UACtD;AAAA,QACF;AAAA,MACF;AAAA,IACF;AAAA,IACA,OAAO,OAAO,KAAK,SAAS,CAAC;AAAA,IAC7B,UAAU,CAAC;AAAA,IACX,eAAe,OAAO,KAAK,aAAa,KAAK;AAAA,MAC3C;AAAA,QACE,MAAM;AAAA,QACN,MAAM,OAAO,KAAK,MAAM,IAAI,CAAC,QAAQ,IAAI,IAAI,KAAK,CAAC;AAAA,MACrD;AAAA,IACF;AAAA,IACA,SAAS,OAAO,KAAK,WAAW,CAAC;AAAA,IACjC,MAAM,OAAO,KAAK,QAAQ,CAAC;AAAA,EAC7B;AAEA,SAAO;AAAA,IACL,YAAY,uBAAuB,OAAO,UAAU;AAAA,IACpD,WAAW,OAAO,aAAa,CAAC;AAAA,IAChC;AAAA,IACA,aAAa,OAAO,eAAe,SAAS;AAAA,IAC5C,KAAK,OAAO,OAAO,SAAS;AAAA,EAC9B;AACF;AAEO,SAAS,uBACd,SACA;AACA,MAAI,YAAY,QAAW;AACzB,WAAO;AAAA,MACL,OAAO;AAAA,MACP,SAAS;AAAA,IACX;AAAA,EACF;AACA,MAAI,YAAY,OAAO;AACrB,WAAO;AAAA,MACL,SAAS;AAAA,MACT,OAAO;AAAA,IACT;AAAA,EACF;AAEA,SAAO;AAAA,IACL,OAAO,QAAQ,SAAS;AAAA,IACxB,SAAS;AAAA,EACX;AACF;",
4
+ "sourcesContent": ["import type { OperationObject } from 'openapi3-ts/oas31';\n\nimport {\n type OpenAPIDocument,\n type OpenAPISecuritySchemeObject,\n camelcase,\n resolveRef,\n} from '@sdk-it/core';\n\nimport type { ProcessingDiagnostic, ProcessingPlugin } from './processing.js';\nimport { determineGenericTag, sanitizeTag } from './tag.js';\nimport type { IR } from './types.js';\n\nexport interface GenerateSdkConfig {\n spec: OpenAPIDocument;\n responses?: ResponsesConfig;\n pagination?: PaginationConfig | false;\n operationId?: (\n operation: OperationObject,\n path: string,\n method: string,\n ) => string;\n tag?: (operation: OperationObject, path: string) => string;\n plugins?: readonly ProcessingPlugin[];\n signal?: AbortSignal;\n onDiagnostic?: (diagnostic: ProcessingDiagnostic) => void;\n}\nexport interface ResponsesConfig {\n flattenErrorResponses?: boolean;\n}\n\nexport type PaginationConfig = {\n guess?: boolean;\n};\nexport function cleanOperationId(operationId: string) {\n return camelcase(operationId.split('#').pop()!);\n}\n\nexport const defaults: Partial<GenerateSdkConfig> &\n Required<Pick<GenerateSdkConfig, 'operationId' | 'tag'>> = {\n operationId: (operation, path, method) => {\n if (operation.operationId) {\n return cleanOperationId(operation.operationId);\n }\n\n return camelcase(\n [method, ...path.replace(/[\\\\/\\\\{\\\\}]/g, ' ').split(' ')]\n .filter(Boolean)\n .join(' ')\n .trim(),\n );\n },\n tag: (operation, path) => {\n return operation.tags?.[0]\n ? sanitizeTag(operation.tags?.[0])\n : determineGenericTag(path, operation);\n },\n};\n\nexport function coeraceConfig(config: GenerateSdkConfig) {\n const spec: IR = {\n ...config.spec,\n components: {\n ...config.spec.components,\n schemas: config.spec.components?.schemas ?? {},\n securitySchemes: Object.fromEntries(\n Object.entries(config.spec.components?.securitySchemes ?? {}).map(\n ([name, schema]) => [\n name,\n resolveRef<OpenAPISecuritySchemeObject>(config.spec, schema),\n ],\n ),\n ),\n },\n paths: config.spec.paths ?? {},\n 'x-docs': [],\n 'x-sdks': [],\n 'x-tagGroups': config.spec['x-tagGroups'] ?? [\n {\n name: 'API',\n tags: config.spec.tags?.map((tag) => tag.name) ?? [],\n },\n ],\n servers: config.spec.servers ?? [],\n tags: config.spec.tags ?? [],\n };\n\n return {\n pagination: coercePaginationConfig(config.pagination),\n responses: config.responses ?? {},\n // Authored `x-docs` / `x-sdks` change shape during processing, so they are\n // handed to the overview plugin as raw input instead of living on the IR.\n docs: {\n entries: config.spec['x-docs'] as unknown,\n sdks: config.spec['x-sdks'] as unknown,\n },\n spec,\n operationId: config.operationId ?? defaults.operationId,\n tag: config.tag ?? defaults.tag,\n };\n}\n\nexport function coercePaginationConfig(\n options: PaginationConfig | undefined | false,\n) {\n if (options === undefined) {\n return {\n guess: true,\n enabled: true,\n };\n }\n if (options === false) {\n return {\n enabled: false,\n guess: false,\n };\n }\n // If options is true, we assume pagination is enabled with guessing\n return {\n guess: options.guess ?? true,\n enabled: true,\n };\n}\n"],
5
+ "mappings": "AAEA;AAAA,EAGE;AAAA,EACA;AAAA,OACK;AAGP,SAAS,qBAAqB,mBAAmB;AAwB1C,SAAS,iBAAiB,aAAqB;AACpD,SAAO,UAAU,YAAY,MAAM,GAAG,EAAE,IAAI,CAAE;AAChD;AAEO,MAAM,WACgD;AAAA,EAC3D,aAAa,CAAC,WAAW,MAAM,WAAW;AACxC,QAAI,UAAU,aAAa;AACzB,aAAO,iBAAiB,UAAU,WAAW;AAAA,IAC/C;AAEA,WAAO;AAAA,MACL,CAAC,QAAQ,GAAG,KAAK,QAAQ,gBAAgB,GAAG,EAAE,MAAM,GAAG,CAAC,EACrD,OAAO,OAAO,EACd,KAAK,GAAG,EACR,KAAK;AAAA,IACV;AAAA,EACF;AAAA,EACA,KAAK,CAAC,WAAW,SAAS;AACxB,WAAO,UAAU,OAAO,CAAC,IACrB,YAAY,UAAU,OAAO,CAAC,CAAC,IAC/B,oBAAoB,MAAM,SAAS;AAAA,EACzC;AACF;AAEO,SAAS,cAAc,QAA2B;AACvD,QAAM,OAAW;AAAA,IACf,GAAG,OAAO;AAAA,IACV,YAAY;AAAA,MACV,GAAG,OAAO,KAAK;AAAA,MACf,SAAS,OAAO,KAAK,YAAY,WAAW,CAAC;AAAA,MAC7C,iBAAiB,OAAO;AAAA,QACtB,OAAO,QAAQ,OAAO,KAAK,YAAY,mBAAmB,CAAC,CAAC,EAAE;AAAA,UAC5D,CAAC,CAAC,MAAM,MAAM,MAAM;AAAA,YAClB;AAAA,YACA,WAAwC,OAAO,MAAM,MAAM;AAAA,UAC7D;AAAA,QACF;AAAA,MACF;AAAA,IACF;AAAA,IACA,OAAO,OAAO,KAAK,SAAS,CAAC;AAAA,IAC7B,UAAU,CAAC;AAAA,IACX,UAAU,CAAC;AAAA,IACX,eAAe,OAAO,KAAK,aAAa,KAAK;AAAA,MAC3C;AAAA,QACE,MAAM;AAAA,QACN,MAAM,OAAO,KAAK,MAAM,IAAI,CAAC,QAAQ,IAAI,IAAI,KAAK,CAAC;AAAA,MACrD;AAAA,IACF;AAAA,IACA,SAAS,OAAO,KAAK,WAAW,CAAC;AAAA,IACjC,MAAM,OAAO,KAAK,QAAQ,CAAC;AAAA,EAC7B;AAEA,SAAO;AAAA,IACL,YAAY,uBAAuB,OAAO,UAAU;AAAA,IACpD,WAAW,OAAO,aAAa,CAAC;AAAA;AAAA;AAAA,IAGhC,MAAM;AAAA,MACJ,SAAS,OAAO,KAAK,QAAQ;AAAA,MAC7B,MAAM,OAAO,KAAK,QAAQ;AAAA,IAC5B;AAAA,IACA;AAAA,IACA,aAAa,OAAO,eAAe,SAAS;AAAA,IAC5C,KAAK,OAAO,OAAO,SAAS;AAAA,EAC9B;AACF;AAEO,SAAS,uBACd,SACA;AACA,MAAI,YAAY,QAAW;AACzB,WAAO;AAAA,MACL,OAAO;AAAA,MACP,SAAS;AAAA,IACX;AAAA,EACF;AACA,MAAI,YAAY,OAAO;AACrB,WAAO;AAAA,MACL,SAAS;AAAA,MACT,OAAO;AAAA,IACT;AAAA,EACF;AAEA,SAAO;AAAA,IACL,OAAO,QAAQ,SAAS;AAAA,IACxB,SAAS;AAAA,EACX;AACF;",
6
6
  "names": []
7
7
  }
@@ -34,25 +34,6 @@ export declare const presetDocs: {
34
34
  readonly singular: "Official API Client";
35
35
  readonly plural: "Official API Clients";
36
36
  };
37
- readonly sdk: {
38
- readonly singular: "SDK";
39
- readonly plural: "SDKs";
40
- };
41
- readonly language: {
42
- readonly singular: "a programming language";
43
- readonly plural: "multiple programming languages";
44
- };
45
- readonly recommendation: {
46
- readonly singular: "this client";
47
- readonly plural: "these clients";
48
- };
49
- readonly location: {
50
- readonly singular: "it";
51
- readonly plural: "them";
52
- };
53
- readonly intro: {
54
- readonly template: (apiTitle: string, count: number, sdks: string, languages: string, recommendation: string, location: string) => string;
55
- };
56
37
  };
57
38
  };
58
39
  /**
@@ -82,5 +63,4 @@ export declare function getCommonText(count: number): {
82
63
  hasHave: string;
83
64
  };
84
65
  export declare function getAuthIntroText(count: number): string;
85
- export declare function getClientIntroText(apiTitle: string, count: number): string;
86
66
  //# sourceMappingURL=doc-text-utils.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"doc-text-utils.d.ts","sourceRoot":"","sources":["../../../src/lib/overview-docs/doc-text-utils.ts"],"names":[],"mappings":"AAEA;;GAEG;AACH,eAAO,MAAM,UAAU;;;;;;;;;;;;;;;uCAgBR,MAAM,WACJ,MAAM,WACN,MAAM,WACN,MAAM;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;0CAsCL,MAAM,SACT,MAAM,QACP,MAAM,aACD,MAAM,kBACD,MAAM,YACZ,MAAM;;;CAKd,CAAC;AAEX;;GAEG;AACH,eAAO,MAAM,QAAQ;8BACF,MAAM;iCACH,MAAM;8BACT,MAAM;CACf,CAAC;AAEX;;GAEG;AACH,wBAAgB,cAAc,CAAC,CAAC,SAAS,MAAM,CAAC,UAAU,GAAG,QAAQ,EAAE,MAAM,CAAC,EAC5E,KAAK,EAAE,MAAM,EACb,WAAW,EAAE,CAAC,GACb,MAAM,CAER;AAED;;GAEG;AACH,wBAAgB,aAAa,CAAC,IAAI,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,GAAG,MAAM,CAEjE;AAED;;GAEG;AACH,wBAAgB,aAAa,CAAC,KAAK,EAAE,MAAM;;;;;;EAQ1C;AAED,wBAAgB,gBAAgB,CAAC,KAAK,EAAE,MAAM,GAAG,MAAM,CAMtD;AAED,wBAAgB,kBAAkB,CAAC,QAAQ,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,GAAG,MAAM,CAiB1E"}
1
+ {"version":3,"file":"doc-text-utils.d.ts","sourceRoot":"","sources":["../../../src/lib/overview-docs/doc-text-utils.ts"],"names":[],"mappings":"AAEA;;GAEG;AACH,eAAO,MAAM,UAAU;;;;;;;;;;;;;;;uCAgBR,MAAM,WACJ,MAAM,WACN,MAAM,WACN,MAAM;;;;;;;;;;;;;;;;;;;CAqBb,CAAC;AAEX;;GAEG;AACH,eAAO,MAAM,QAAQ;8BACF,MAAM;iCACH,MAAM;8BACT,MAAM;CACf,CAAC;AAEX;;GAEG;AACH,wBAAgB,cAAc,CAAC,CAAC,SAAS,MAAM,CAAC,UAAU,GAAG,QAAQ,EAAE,MAAM,CAAC,EAC5E,KAAK,EAAE,MAAM,EACb,WAAW,EAAE,CAAC,GACb,MAAM,CAER;AAED;;GAEG;AACH,wBAAgB,aAAa,CAAC,IAAI,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,GAAG,MAAM,CAEjE;AAED;;GAEG;AACH,wBAAgB,aAAa,CAAC,KAAK,EAAE,MAAM;;;;;;EAQ1C;AAED,wBAAgB,gBAAgB,CAAC,KAAK,EAAE,MAAM,GAAG,MAAM,CAMtD"}
@@ -31,25 +31,6 @@ const presetDocs = {
31
31
  section: {
32
32
  singular: "Official API Client",
33
33
  plural: "Official API Clients"
34
- },
35
- sdk: {
36
- singular: "SDK",
37
- plural: "SDKs"
38
- },
39
- language: {
40
- singular: "a programming language",
41
- plural: "multiple programming languages"
42
- },
43
- recommendation: {
44
- singular: "this client",
45
- plural: "these clients"
46
- },
47
- location: {
48
- singular: "it",
49
- plural: "them"
50
- },
51
- intro: {
52
- template: (apiTitle, count, sdks, languages, recommendation, location) => `${apiTitle} provides official client ${sdks} for ${languages}. We recommend using ${recommendation} to interact with all stable endpoints. You can find ${location} here:`
53
34
  }
54
35
  }
55
36
  };
@@ -79,26 +60,8 @@ function getAuthIntroText(count) {
79
60
  const pronoun = pronouns.pronoun(count);
80
61
  return presetDocs.auth.intro.template(count, methods, schemes, pronoun);
81
62
  }
82
- function getClientIntroText(apiTitle, count) {
83
- const sdks = getTextByCount(count, presetDocs.client.sdk);
84
- const languages = getTextByCount(count, presetDocs.client.language);
85
- const recommendation = getTextByCount(
86
- count,
87
- presetDocs.client.recommendation
88
- );
89
- const location = getTextByCount(count, presetDocs.client.location);
90
- return presetDocs.client.intro.template(
91
- apiTitle,
92
- count,
93
- sdks,
94
- languages,
95
- recommendation,
96
- location
97
- );
98
- }
99
63
  export {
100
64
  getAuthIntroText,
101
- getClientIntroText,
102
65
  getCommonText,
103
66
  getTextByCount,
104
67
  pluralizeWord,
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "version": 3,
3
3
  "sources": ["../../../src/lib/overview-docs/doc-text-utils.ts"],
4
- "sourcesContent": ["import pluralize from 'pluralize';\n\n/**\n * Preset documentation text templates for consistent singular/plural handling\n */\nexport const presetDocs = {\n auth: {\n section: {\n singular: 'Available Authentication Method',\n plural: 'Available Authentication Methods',\n },\n description: {\n singular: 'an authentication method',\n plural: 'various authentication methods',\n },\n scheme: {\n singular: 'the available authentication scheme',\n plural: 'each available authentication scheme',\n },\n intro: {\n template: (\n count: number,\n methods: string,\n schemes: string,\n pronoun: string,\n ) =>\n `This API provides secure access through ${methods}. Below you'll find details about ${schemes} and how to use ${pronoun}.`,\n },\n },\n server: {\n section: {\n singular: 'API Server',\n plural: 'API Servers',\n },\n description: {\n singular: 'The following server is available for this API:',\n plural: 'The following servers are available for this API:',\n },\n },\n client: {\n section: {\n singular: 'Official API Client',\n plural: 'Official API Clients',\n },\n sdk: {\n singular: 'SDK',\n plural: 'SDKs',\n },\n language: {\n singular: 'a programming language',\n plural: 'multiple programming languages',\n },\n recommendation: {\n singular: 'this client',\n plural: 'these clients',\n },\n location: {\n singular: 'it',\n plural: 'them',\n },\n intro: {\n template: (\n apiTitle: string,\n count: number,\n sdks: string,\n languages: string,\n recommendation: string,\n location: string,\n ) =>\n `${apiTitle} provides official client ${sdks} for ${languages}. We recommend using ${recommendation} to interact with all stable endpoints. You can find ${location} here:`,\n },\n },\n} as const;\n\n/**\n * Common pronouns and determiners based on count\n */\nexport const pronouns = {\n pronoun: (count: number) => (count === 1 ? 'it' : 'them'),\n determiner: (count: number) => (count === 1 ? 'this' : 'these'),\n article: (count: number) => (count === 1 ? 'a' : ''),\n} as const;\n\n/**\n * Get the appropriate text based on count (singular/plural)\n */\nexport function getTextByCount<T extends Record<'singular' | 'plural', string>>(\n count: number,\n textOptions: T,\n): string {\n return count === 1 ? textOptions.singular : textOptions.plural;\n}\n\n/**\n * Automatically pluralize a word based on count using the pluralize library\n */\nexport function pluralizeWord(word: string, count: number): string {\n return pluralize(word, count);\n}\n\n/**\n * Helper function to get common text variations based on count\n */\nexport function getCommonText(count: number) {\n return {\n pronoun: pronouns.pronoun(count),\n determiner: pronouns.determiner(count),\n article: pronouns.article(count),\n isAre: count === 1 ? 'is' : 'are',\n hasHave: count === 1 ? 'has' : 'have',\n };\n}\n\nexport function getAuthIntroText(count: number): string {\n const methods = getTextByCount(count, presetDocs.auth.description);\n const schemes = getTextByCount(count, presetDocs.auth.scheme);\n const pronoun = pronouns.pronoun(count);\n\n return presetDocs.auth.intro.template(count, methods, schemes, pronoun);\n}\n\nexport function getClientIntroText(apiTitle: string, count: number): string {\n const sdks = getTextByCount(count, presetDocs.client.sdk);\n const languages = getTextByCount(count, presetDocs.client.language);\n const recommendation = getTextByCount(\n count,\n presetDocs.client.recommendation,\n );\n const location = getTextByCount(count, presetDocs.client.location);\n\n return presetDocs.client.intro.template(\n apiTitle,\n count,\n sdks,\n languages,\n recommendation,\n location,\n );\n}\n"],
5
- "mappings": "AAAA,OAAO,eAAe;AAKf,MAAM,aAAa;AAAA,EACxB,MAAM;AAAA,IACJ,SAAS;AAAA,MACP,UAAU;AAAA,MACV,QAAQ;AAAA,IACV;AAAA,IACA,aAAa;AAAA,MACX,UAAU;AAAA,MACV,QAAQ;AAAA,IACV;AAAA,IACA,QAAQ;AAAA,MACN,UAAU;AAAA,MACV,QAAQ;AAAA,IACV;AAAA,IACA,OAAO;AAAA,MACL,UAAU,CACR,OACA,SACA,SACA,YAEA,2CAA2C,OAAO,qCAAqC,OAAO,mBAAmB,OAAO;AAAA,IAC5H;AAAA,EACF;AAAA,EACA,QAAQ;AAAA,IACN,SAAS;AAAA,MACP,UAAU;AAAA,MACV,QAAQ;AAAA,IACV;AAAA,IACA,aAAa;AAAA,MACX,UAAU;AAAA,MACV,QAAQ;AAAA,IACV;AAAA,EACF;AAAA,EACA,QAAQ;AAAA,IACN,SAAS;AAAA,MACP,UAAU;AAAA,MACV,QAAQ;AAAA,IACV;AAAA,IACA,KAAK;AAAA,MACH,UAAU;AAAA,MACV,QAAQ;AAAA,IACV;AAAA,IACA,UAAU;AAAA,MACR,UAAU;AAAA,MACV,QAAQ;AAAA,IACV;AAAA,IACA,gBAAgB;AAAA,MACd,UAAU;AAAA,MACV,QAAQ;AAAA,IACV;AAAA,IACA,UAAU;AAAA,MACR,UAAU;AAAA,MACV,QAAQ;AAAA,IACV;AAAA,IACA,OAAO;AAAA,MACL,UAAU,CACR,UACA,OACA,MACA,WACA,gBACA,aAEA,GAAG,QAAQ,6BAA6B,IAAI,QAAQ,SAAS,wBAAwB,cAAc,wDAAwD,QAAQ;AAAA,IACvK;AAAA,EACF;AACF;AAKO,MAAM,WAAW;AAAA,EACtB,SAAS,CAAC,UAAmB,UAAU,IAAI,OAAO;AAAA,EAClD,YAAY,CAAC,UAAmB,UAAU,IAAI,SAAS;AAAA,EACvD,SAAS,CAAC,UAAmB,UAAU,IAAI,MAAM;AACnD;AAKO,SAAS,eACd,OACA,aACQ;AACR,SAAO,UAAU,IAAI,YAAY,WAAW,YAAY;AAC1D;AAKO,SAAS,cAAc,MAAc,OAAuB;AACjE,SAAO,UAAU,MAAM,KAAK;AAC9B;AAKO,SAAS,cAAc,OAAe;AAC3C,SAAO;AAAA,IACL,SAAS,SAAS,QAAQ,KAAK;AAAA,IAC/B,YAAY,SAAS,WAAW,KAAK;AAAA,IACrC,SAAS,SAAS,QAAQ,KAAK;AAAA,IAC/B,OAAO,UAAU,IAAI,OAAO;AAAA,IAC5B,SAAS,UAAU,IAAI,QAAQ;AAAA,EACjC;AACF;AAEO,SAAS,iBAAiB,OAAuB;AACtD,QAAM,UAAU,eAAe,OAAO,WAAW,KAAK,WAAW;AACjE,QAAM,UAAU,eAAe,OAAO,WAAW,KAAK,MAAM;AAC5D,QAAM,UAAU,SAAS,QAAQ,KAAK;AAEtC,SAAO,WAAW,KAAK,MAAM,SAAS,OAAO,SAAS,SAAS,OAAO;AACxE;AAEO,SAAS,mBAAmB,UAAkB,OAAuB;AAC1E,QAAM,OAAO,eAAe,OAAO,WAAW,OAAO,GAAG;AACxD,QAAM,YAAY,eAAe,OAAO,WAAW,OAAO,QAAQ;AAClE,QAAM,iBAAiB;AAAA,IACrB;AAAA,IACA,WAAW,OAAO;AAAA,EACpB;AACA,QAAM,WAAW,eAAe,OAAO,WAAW,OAAO,QAAQ;AAEjE,SAAO,WAAW,OAAO,MAAM;AAAA,IAC7B;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,EACF;AACF;",
4
+ "sourcesContent": ["import pluralize from 'pluralize';\n\n/**\n * Preset documentation text templates for consistent singular/plural handling\n */\nexport const presetDocs = {\n auth: {\n section: {\n singular: 'Available Authentication Method',\n plural: 'Available Authentication Methods',\n },\n description: {\n singular: 'an authentication method',\n plural: 'various authentication methods',\n },\n scheme: {\n singular: 'the available authentication scheme',\n plural: 'each available authentication scheme',\n },\n intro: {\n template: (\n count: number,\n methods: string,\n schemes: string,\n pronoun: string,\n ) =>\n `This API provides secure access through ${methods}. Below you'll find details about ${schemes} and how to use ${pronoun}.`,\n },\n },\n server: {\n section: {\n singular: 'API Server',\n plural: 'API Servers',\n },\n description: {\n singular: 'The following server is available for this API:',\n plural: 'The following servers are available for this API:',\n },\n },\n client: {\n section: {\n singular: 'Official API Client',\n plural: 'Official API Clients',\n },\n },\n} as const;\n\n/**\n * Common pronouns and determiners based on count\n */\nexport const pronouns = {\n pronoun: (count: number) => (count === 1 ? 'it' : 'them'),\n determiner: (count: number) => (count === 1 ? 'this' : 'these'),\n article: (count: number) => (count === 1 ? 'a' : ''),\n} as const;\n\n/**\n * Get the appropriate text based on count (singular/plural)\n */\nexport function getTextByCount<T extends Record<'singular' | 'plural', string>>(\n count: number,\n textOptions: T,\n): string {\n return count === 1 ? textOptions.singular : textOptions.plural;\n}\n\n/**\n * Automatically pluralize a word based on count using the pluralize library\n */\nexport function pluralizeWord(word: string, count: number): string {\n return pluralize(word, count);\n}\n\n/**\n * Helper function to get common text variations based on count\n */\nexport function getCommonText(count: number) {\n return {\n pronoun: pronouns.pronoun(count),\n determiner: pronouns.determiner(count),\n article: pronouns.article(count),\n isAre: count === 1 ? 'is' : 'are',\n hasHave: count === 1 ? 'has' : 'have',\n };\n}\n\nexport function getAuthIntroText(count: number): string {\n const methods = getTextByCount(count, presetDocs.auth.description);\n const schemes = getTextByCount(count, presetDocs.auth.scheme);\n const pronoun = pronouns.pronoun(count);\n\n return presetDocs.auth.intro.template(count, methods, schemes, pronoun);\n}\n"],
5
+ "mappings": "AAAA,OAAO,eAAe;AAKf,MAAM,aAAa;AAAA,EACxB,MAAM;AAAA,IACJ,SAAS;AAAA,MACP,UAAU;AAAA,MACV,QAAQ;AAAA,IACV;AAAA,IACA,aAAa;AAAA,MACX,UAAU;AAAA,MACV,QAAQ;AAAA,IACV;AAAA,IACA,QAAQ;AAAA,MACN,UAAU;AAAA,MACV,QAAQ;AAAA,IACV;AAAA,IACA,OAAO;AAAA,MACL,UAAU,CACR,OACA,SACA,SACA,YAEA,2CAA2C,OAAO,qCAAqC,OAAO,mBAAmB,OAAO;AAAA,IAC5H;AAAA,EACF;AAAA,EACA,QAAQ;AAAA,IACN,SAAS;AAAA,MACP,UAAU;AAAA,MACV,QAAQ;AAAA,IACV;AAAA,IACA,aAAa;AAAA,MACX,UAAU;AAAA,MACV,QAAQ;AAAA,IACV;AAAA,EACF;AAAA,EACA,QAAQ;AAAA,IACN,SAAS;AAAA,MACP,UAAU;AAAA,MACV,QAAQ;AAAA,IACV;AAAA,EACF;AACF;AAKO,MAAM,WAAW;AAAA,EACtB,SAAS,CAAC,UAAmB,UAAU,IAAI,OAAO;AAAA,EAClD,YAAY,CAAC,UAAmB,UAAU,IAAI,SAAS;AAAA,EACvD,SAAS,CAAC,UAAmB,UAAU,IAAI,MAAM;AACnD;AAKO,SAAS,eACd,OACA,aACQ;AACR,SAAO,UAAU,IAAI,YAAY,WAAW,YAAY;AAC1D;AAKO,SAAS,cAAc,MAAc,OAAuB;AACjE,SAAO,UAAU,MAAM,KAAK;AAC9B;AAKO,SAAS,cAAc,OAAe;AAC3C,SAAO;AAAA,IACL,SAAS,SAAS,QAAQ,KAAK;AAAA,IAC/B,YAAY,SAAS,WAAW,KAAK;AAAA,IACrC,SAAS,SAAS,QAAQ,KAAK;AAAA,IAC/B,OAAO,UAAU,IAAI,OAAO;AAAA,IAC5B,SAAS,UAAU,IAAI,QAAQ;AAAA,EACjC;AACF;AAEO,SAAS,iBAAiB,OAAuB;AACtD,QAAM,UAAU,eAAe,OAAO,WAAW,KAAK,WAAW;AACjE,QAAM,UAAU,eAAe,OAAO,WAAW,KAAK,MAAM;AAC5D,QAAM,UAAU,SAAS,QAAQ,KAAK;AAEtC,SAAO,WAAW,KAAK,MAAM,SAAS,OAAO,SAAS,SAAS,OAAO;AACxE;",
6
6
  "names": []
7
7
  }
@@ -1,4 +1,11 @@
1
1
  import type { SidebarData } from '../sidebar.js';
2
2
  import type { IR } from '../types.js';
3
- export declare function extractOverviewDocs(spec: IR, availableSdks?: string[]): SidebarData;
3
+ import type { ResolvedDoc, SdkDoc } from './types.js';
4
+ export interface OverviewDocsInput {
5
+ entries: ResolvedDoc[];
6
+ sdks: SdkDoc[];
7
+ }
8
+ /** Ids of the pages SDK-IT generates; an authored entry with one of these ids seeds that page. */
9
+ export declare const GENERATED_DOC_IDS: ReadonlySet<string>;
10
+ export declare function extractOverviewDocs(spec: IR, input: OverviewDocsInput): SidebarData;
4
11
  //# sourceMappingURL=overview-docs.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"overview-docs.d.ts","sourceRoot":"","sources":["../../../src/lib/overview-docs/overview-docs.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,eAAe,CAAC;AACjD,OAAO,KAAK,EAAE,EAAE,EAAE,MAAM,aAAa,CAAC;AAKtC,wBAAgB,mBAAmB,CACjC,IAAI,EAAE,EAAE,EACR,aAAa,GAAE,MAAM,EAAmB,GACvC,WAAW,CAYb"}
1
+ {"version":3,"file":"overview-docs.d.ts","sourceRoot":"","sources":["../../../src/lib/overview-docs/overview-docs.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAW,WAAW,EAAE,MAAM,eAAe,CAAC;AAC1D,OAAO,KAAK,EAAE,EAAE,EAAE,MAAM,aAAa,CAAC;AAItC,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,EAAE,MAAM,YAAY,CAAC;AAEtD,MAAM,WAAW,iBAAiB;IAChC,OAAO,EAAE,WAAW,EAAE,CAAC;IACvB,IAAI,EAAE,MAAM,EAAE,CAAC;CAChB;AAED,kGAAkG;AAClG,eAAO,MAAM,iBAAiB,EAAE,WAAW,CAAC,MAAM,CAIhD,CAAC;AAEH,wBAAgB,mBAAmB,CACjC,IAAI,EAAE,EAAE,EACR,KAAK,EAAE,iBAAiB,GACvB,WAAW,CAyBb"}
@@ -1,20 +1,45 @@
1
1
  import { generateAuthOverview } from "./overview-auth.js";
2
2
  import { generateErrorsOverview } from "./overview-errors.js";
3
- import { generateIntroOverview } from "./overview-intro.js";
4
- function extractOverviewDocs(spec, availableSdks = ["typescript"]) {
5
- return [
6
- {
7
- id: "overview",
8
- category: "Overview",
9
- items: [
10
- generateIntroOverview(spec, availableSdks),
11
- generateAuthOverview(spec),
12
- generateErrorsOverview(spec)
13
- ]
14
- }
3
+ import { generateOverviewPage } from "./overview-page.js";
4
+ const GENERATED_DOC_IDS = /* @__PURE__ */ new Set([
5
+ "overview",
6
+ "authorization",
7
+ "errors"
8
+ ]);
9
+ function extractOverviewDocs(spec, input) {
10
+ const generated = [
11
+ generateOverviewPage(spec, input.sdks),
12
+ generateAuthOverview(spec),
13
+ generateErrorsOverview(spec)
15
14
  ];
15
+ const seeds = new Map(input.entries.map((entry) => [entry.id, entry]));
16
+ const items = generated.map((page) => {
17
+ const seed = seeds.get(page.id);
18
+ seeds.delete(page.id);
19
+ return seed ? seedPage(page, seed) : page;
20
+ });
21
+ for (const entry of seeds.values()) {
22
+ items.push({
23
+ id: entry.id,
24
+ title: entry.title,
25
+ description: entry.description,
26
+ url: `/${entry.id}`,
27
+ content: entry.content ?? entry.description
28
+ });
29
+ }
30
+ return [{ id: "overview", category: "Overview", items }];
31
+ }
32
+ function seedPage(page, seed) {
33
+ const body = page.content?.replace(/^#\s[^\n]*\n+/, "") ?? "";
34
+ return {
35
+ ...page,
36
+ title: seed.title,
37
+ description: seed.description ?? page.description,
38
+ content: [`# ${seed.title}`, seed.description, seed.content, body].filter(Boolean).join("\n\n")
39
+ };
16
40
  }
17
41
  export {
42
+ GENERATED_DOC_IDS,
18
43
  extractOverviewDocs
19
44
  };
20
45
  //# sourceMappingURL=overview-docs.js.map
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "version": 3,
3
3
  "sources": ["../../../src/lib/overview-docs/overview-docs.ts"],
4
- "sourcesContent": ["import type { SidebarData } from '../sidebar.js';\nimport type { IR } from '../types.js';\nimport { generateAuthOverview } from './overview-auth.js';\nimport { generateErrorsOverview } from './overview-errors.js';\nimport { generateIntroOverview } from './overview-intro.js';\n\nexport function extractOverviewDocs(\n spec: IR,\n availableSdks: string[] = ['typescript'],\n): SidebarData {\n return [\n {\n id: 'overview',\n category: 'Overview',\n items: [\n generateIntroOverview(spec, availableSdks),\n generateAuthOverview(spec),\n generateErrorsOverview(spec),\n ],\n },\n ];\n}\n"],
5
- "mappings": "AAEA,SAAS,4BAA4B;AACrC,SAAS,8BAA8B;AACvC,SAAS,6BAA6B;AAE/B,SAAS,oBACd,MACA,gBAA0B,CAAC,YAAY,GAC1B;AACb,SAAO;AAAA,IACL;AAAA,MACE,IAAI;AAAA,MACJ,UAAU;AAAA,MACV,OAAO;AAAA,QACL,sBAAsB,MAAM,aAAa;AAAA,QACzC,qBAAqB,IAAI;AAAA,QACzB,uBAAuB,IAAI;AAAA,MAC7B;AAAA,IACF;AAAA,EACF;AACF;",
4
+ "sourcesContent": ["import type { NavItem, SidebarData } from '../sidebar.js';\nimport type { IR } from '../types.js';\nimport { generateAuthOverview } from './overview-auth.js';\nimport { generateErrorsOverview } from './overview-errors.js';\nimport { generateOverviewPage } from './overview-page.js';\nimport type { ResolvedDoc, SdkDoc } from './types.js';\n\nexport interface OverviewDocsInput {\n entries: ResolvedDoc[];\n sdks: SdkDoc[];\n}\n\n/** Ids of the pages SDK-IT generates; an authored entry with one of these ids seeds that page. */\nexport const GENERATED_DOC_IDS: ReadonlySet<string> = new Set([\n 'overview',\n 'authorization',\n 'errors',\n]);\n\nexport function extractOverviewDocs(\n spec: IR,\n input: OverviewDocsInput,\n): SidebarData {\n const generated = [\n generateOverviewPage(spec, input.sdks),\n generateAuthOverview(spec),\n generateErrorsOverview(spec),\n ];\n const seeds = new Map(input.entries.map((entry) => [entry.id, entry]));\n\n const items = generated.map((page) => {\n const seed = seeds.get(page.id);\n seeds.delete(page.id);\n return seed ? seedPage(page, seed) : page;\n });\n\n for (const entry of seeds.values()) {\n items.push({\n id: entry.id,\n title: entry.title,\n description: entry.description,\n url: `/${entry.id}`,\n content: entry.content ?? entry.description,\n });\n }\n\n return [{ id: 'overview', category: 'Overview', items }];\n}\n\nfunction seedPage(page: NavItem, seed: ResolvedDoc): NavItem {\n const body = page.content?.replace(/^#\\s[^\\n]*\\n+/, '') ?? '';\n return {\n ...page,\n title: seed.title,\n description: seed.description ?? page.description,\n content: [`# ${seed.title}`, seed.description, seed.content, body]\n .filter(Boolean)\n .join('\\n\\n'),\n };\n}\n"],
5
+ "mappings": "AAEA,SAAS,4BAA4B;AACrC,SAAS,8BAA8B;AACvC,SAAS,4BAA4B;AAS9B,MAAM,oBAAyC,oBAAI,IAAI;AAAA,EAC5D;AAAA,EACA;AAAA,EACA;AACF,CAAC;AAEM,SAAS,oBACd,MACA,OACa;AACb,QAAM,YAAY;AAAA,IAChB,qBAAqB,MAAM,MAAM,IAAI;AAAA,IACrC,qBAAqB,IAAI;AAAA,IACzB,uBAAuB,IAAI;AAAA,EAC7B;AACA,QAAM,QAAQ,IAAI,IAAI,MAAM,QAAQ,IAAI,CAAC,UAAU,CAAC,MAAM,IAAI,KAAK,CAAC,CAAC;AAErE,QAAM,QAAQ,UAAU,IAAI,CAAC,SAAS;AACpC,UAAM,OAAO,MAAM,IAAI,KAAK,EAAE;AAC9B,UAAM,OAAO,KAAK,EAAE;AACpB,WAAO,OAAO,SAAS,MAAM,IAAI,IAAI;AAAA,EACvC,CAAC;AAED,aAAW,SAAS,MAAM,OAAO,GAAG;AAClC,UAAM,KAAK;AAAA,MACT,IAAI,MAAM;AAAA,MACV,OAAO,MAAM;AAAA,MACb,aAAa,MAAM;AAAA,MACnB,KAAK,IAAI,MAAM,EAAE;AAAA,MACjB,SAAS,MAAM,WAAW,MAAM;AAAA,IAClC,CAAC;AAAA,EACH;AAEA,SAAO,CAAC,EAAE,IAAI,YAAY,UAAU,YAAY,MAAM,CAAC;AACzD;AAEA,SAAS,SAAS,MAAe,MAA4B;AAC3D,QAAM,OAAO,KAAK,SAAS,QAAQ,iBAAiB,EAAE,KAAK;AAC3D,SAAO;AAAA,IACL,GAAG;AAAA,IACH,OAAO,KAAK;AAAA,IACZ,aAAa,KAAK,eAAe,KAAK;AAAA,IACtC,SAAS,CAAC,KAAK,KAAK,KAAK,IAAI,KAAK,aAAa,KAAK,SAAS,IAAI,EAC9D,OAAO,OAAO,EACd,KAAK,MAAM;AAAA,EAChB;AACF;",
6
6
  "names": []
7
7
  }
@@ -0,0 +1,5 @@
1
+ import type { NavItem } from '../sidebar.js';
2
+ import type { IR } from '../types.js';
3
+ import type { SdkDoc } from './types.js';
4
+ export declare function generateOverviewPage(spec: IR, sdks: SdkDoc[]): NavItem;
5
+ //# sourceMappingURL=overview-page.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"overview-page.d.ts","sourceRoot":"","sources":["../../../src/lib/overview-docs/overview-page.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,eAAe,CAAC;AAC7C,OAAO,KAAK,EAAE,EAAE,EAAE,MAAM,aAAa,CAAC;AAGtC,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,YAAY,CAAC;AAEzC,wBAAgB,oBAAoB,CAAC,IAAI,EAAE,EAAE,EAAE,IAAI,EAAE,MAAM,EAAE,GAAG,OAAO,CA0EtE"}
@@ -0,0 +1,60 @@
1
+ import { getTextByCount, presetDocs } from "./doc-text-utils.js";
2
+ import { generateSdkSection } from "./overview-sdks.js";
3
+ function generateOverviewPage(spec, sdks) {
4
+ const info = spec.info;
5
+ const apiTitle = info.title || "API Reference";
6
+ const markdown = [`# ${apiTitle}`];
7
+ if (info.description) {
8
+ markdown.push(info.description);
9
+ }
10
+ if (info.version) {
11
+ markdown.push(`**Version:** ${info.version}`);
12
+ }
13
+ if (info.license) {
14
+ const license = info.license.url ? `${info.license.name} ([${info.license.url}](${info.license.url}))` : info.license.name;
15
+ markdown.push(`**License:** ${license}`);
16
+ }
17
+ if (spec.servers.length > 0) {
18
+ const serverCount = spec.servers.length;
19
+ markdown.push(
20
+ `## ${getTextByCount(serverCount, presetDocs.server.section)}`
21
+ );
22
+ markdown.push(getTextByCount(serverCount, presetDocs.server.description));
23
+ markdown.push(
24
+ spec.servers.map(
25
+ (server) => server.description ? `- **${server.url}** - ${server.description}` : `- **${server.url}**`
26
+ ).join("\n")
27
+ );
28
+ }
29
+ markdown.push(...generateSdkSection(apiTitle, sdks));
30
+ const supportDocs = spec.externalDocs?.url && spec.externalDocs.description?.toLowerCase().includes("support") ? spec.externalDocs : void 0;
31
+ if (info.contact?.email || info.contact?.url || supportDocs) {
32
+ markdown.push(`## Need Help?`);
33
+ if (info.contact?.email) {
34
+ markdown.push(
35
+ `For support, reach out to us at [${info.contact.email}](mailto:${info.contact.email}).`
36
+ );
37
+ }
38
+ if (info.contact?.url) {
39
+ markdown.push(
40
+ `Visit our support page: [${info.contact.url}](${info.contact.url})`
41
+ );
42
+ }
43
+ if (supportDocs) {
44
+ markdown.push(
45
+ `For additional support, visit our [${supportDocs.description}](${supportDocs.url}).`
46
+ );
47
+ }
48
+ }
49
+ return {
50
+ id: "overview",
51
+ url: "/",
52
+ title: "Overview",
53
+ description: "API overview and getting started guide",
54
+ content: markdown.join("\n\n")
55
+ };
56
+ }
57
+ export {
58
+ generateOverviewPage
59
+ };
60
+ //# sourceMappingURL=overview-page.js.map
@@ -0,0 +1,7 @@
1
+ {
2
+ "version": 3,
3
+ "sources": ["../../../src/lib/overview-docs/overview-page.ts"],
4
+ "sourcesContent": ["import type { NavItem } from '../sidebar.js';\nimport type { IR } from '../types.js';\nimport { getTextByCount, presetDocs } from './doc-text-utils.js';\nimport { generateSdkSection } from './overview-sdks.js';\nimport type { SdkDoc } from './types.js';\n\nexport function generateOverviewPage(spec: IR, sdks: SdkDoc[]): NavItem {\n const info = spec.info;\n const apiTitle = info.title || 'API Reference';\n const markdown: string[] = [`# ${apiTitle}`];\n\n if (info.description) {\n markdown.push(info.description);\n }\n\n if (info.version) {\n markdown.push(`**Version:** ${info.version}`);\n }\n\n if (info.license) {\n const license = info.license.url\n ? `${info.license.name} ([${info.license.url}](${info.license.url}))`\n : info.license.name;\n markdown.push(`**License:** ${license}`);\n }\n\n if (spec.servers.length > 0) {\n const serverCount = spec.servers.length;\n markdown.push(\n `## ${getTextByCount(serverCount, presetDocs.server.section)}`,\n );\n markdown.push(getTextByCount(serverCount, presetDocs.server.description));\n markdown.push(\n spec.servers\n .map((server) =>\n server.description\n ? `- **${server.url}** - ${server.description}`\n : `- **${server.url}**`,\n )\n .join('\\n'),\n );\n }\n\n markdown.push(...generateSdkSection(apiTitle, sdks));\n\n const supportDocs =\n spec.externalDocs?.url &&\n spec.externalDocs.description?.toLowerCase().includes('support')\n ? spec.externalDocs\n : undefined;\n\n if (info.contact?.email || info.contact?.url || supportDocs) {\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 (supportDocs) {\n markdown.push(\n `For additional support, visit our [${supportDocs.description}](${supportDocs.url}).`,\n );\n }\n }\n\n return {\n id: 'overview',\n url: '/',\n title: 'Overview',\n description: 'API overview and getting started guide',\n content: markdown.join('\\n\\n'),\n };\n}\n"],
5
+ "mappings": "AAEA,SAAS,gBAAgB,kBAAkB;AAC3C,SAAS,0BAA0B;AAG5B,SAAS,qBAAqB,MAAU,MAAyB;AACtE,QAAM,OAAO,KAAK;AAClB,QAAM,WAAW,KAAK,SAAS;AAC/B,QAAM,WAAqB,CAAC,KAAK,QAAQ,EAAE;AAE3C,MAAI,KAAK,aAAa;AACpB,aAAS,KAAK,KAAK,WAAW;AAAA,EAChC;AAEA,MAAI,KAAK,SAAS;AAChB,aAAS,KAAK,gBAAgB,KAAK,OAAO,EAAE;AAAA,EAC9C;AAEA,MAAI,KAAK,SAAS;AAChB,UAAM,UAAU,KAAK,QAAQ,MACzB,GAAG,KAAK,QAAQ,IAAI,MAAM,KAAK,QAAQ,GAAG,KAAK,KAAK,QAAQ,GAAG,OAC/D,KAAK,QAAQ;AACjB,aAAS,KAAK,gBAAgB,OAAO,EAAE;AAAA,EACzC;AAEA,MAAI,KAAK,QAAQ,SAAS,GAAG;AAC3B,UAAM,cAAc,KAAK,QAAQ;AACjC,aAAS;AAAA,MACP,MAAM,eAAe,aAAa,WAAW,OAAO,OAAO,CAAC;AAAA,IAC9D;AACA,aAAS,KAAK,eAAe,aAAa,WAAW,OAAO,WAAW,CAAC;AACxE,aAAS;AAAA,MACP,KAAK,QACF;AAAA,QAAI,CAAC,WACJ,OAAO,cACH,OAAO,OAAO,GAAG,QAAQ,OAAO,WAAW,KAC3C,OAAO,OAAO,GAAG;AAAA,MACvB,EACC,KAAK,IAAI;AAAA,IACd;AAAA,EACF;AAEA,WAAS,KAAK,GAAG,mBAAmB,UAAU,IAAI,CAAC;AAEnD,QAAM,cACJ,KAAK,cAAc,OACnB,KAAK,aAAa,aAAa,YAAY,EAAE,SAAS,SAAS,IAC3D,KAAK,eACL;AAEN,MAAI,KAAK,SAAS,SAAS,KAAK,SAAS,OAAO,aAAa;AAC3D,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,QAAI,aAAa;AACf,eAAS;AAAA,QACP,sCAAsC,YAAY,WAAW,KAAK,YAAY,GAAG;AAAA,MACnF;AAAA,IACF;AAAA,EACF;AAEA,SAAO;AAAA,IACL,IAAI;AAAA,IACJ,KAAK;AAAA,IACL,OAAO;AAAA,IACP,aAAa;AAAA,IACb,SAAS,SAAS,KAAK,MAAM;AAAA,EAC/B;AACF;",
6
+ "names": []
7
+ }
@@ -0,0 +1,3 @@
1
+ import type { SdkDoc } from './types.js';
2
+ export declare function generateSdkSection(apiTitle: string, sdks: SdkDoc[]): string[];
3
+ //# sourceMappingURL=overview-sdks.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"overview-sdks.d.ts","sourceRoot":"","sources":["../../../src/lib/overview-docs/overview-sdks.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,MAAM,EAAe,MAAM,YAAY,CAAC;AA4BtD,wBAAgB,kBAAkB,CAAC,QAAQ,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,EAAE,GAAG,MAAM,EAAE,CAqB7E"}
@@ -0,0 +1,42 @@
1
+ import { getTextByCount, presetDocs } from "./doc-text-utils.js";
2
+ const sdkLanguages = {
3
+ typescript: {
4
+ title: "TypeScript",
5
+ install: (packageName) => `npm install ${packageName}`,
6
+ registry: (packageName) => `https://www.npmjs.com/package/${packageName}`
7
+ },
8
+ python: {
9
+ title: "Python",
10
+ install: (packageName) => `pip install ${packageName}`,
11
+ registry: (packageName) => `https://pypi.org/project/${packageName}`
12
+ },
13
+ dart: {
14
+ title: "Dart",
15
+ install: (packageName) => `dart pub add ${packageName}`,
16
+ registry: (packageName) => `https://pub.dev/packages/${packageName}`
17
+ }
18
+ };
19
+ const listFormat = new Intl.ListFormat("en", { type: "conjunction" });
20
+ function generateSdkSection(apiTitle, sdks) {
21
+ if (sdks.length === 0) return [];
22
+ const languages = listFormat.format(
23
+ sdks.map((sdk) => sdkLanguages[sdk.language].title)
24
+ );
25
+ const markdown = [
26
+ `## ${getTextByCount(sdks.length, presetDocs.client.section)}`,
27
+ `${apiTitle} provides ${sdks.length === 1 ? "an official client SDK" : "official client SDKs"} for ${languages}. Install ${sdks.length === 1 ? "it" : "one"} to get started:`
28
+ ];
29
+ for (const sdk of sdks) {
30
+ const language = sdkLanguages[sdk.language];
31
+ markdown.push(`### ${language.title}`);
32
+ markdown.push(["```bash", language.install(sdk.package), "```"].join("\n"));
33
+ markdown.push(
34
+ `[${sdk.package}](${sdk.url ?? language.registry(sdk.package)})`
35
+ );
36
+ }
37
+ return markdown;
38
+ }
39
+ export {
40
+ generateSdkSection
41
+ };
42
+ //# sourceMappingURL=overview-sdks.js.map
@@ -0,0 +1,7 @@
1
+ {
2
+ "version": 3,
3
+ "sources": ["../../../src/lib/overview-docs/overview-sdks.ts"],
4
+ "sourcesContent": ["import { getTextByCount, presetDocs } from './doc-text-utils.js';\nimport type { SdkDoc, SdkLanguage } from './types.js';\n\ninterface SdkLanguageDocs {\n title: string;\n install(packageName: string): string;\n registry(packageName: string): string;\n}\n\nconst sdkLanguages: Record<SdkLanguage, SdkLanguageDocs> = {\n typescript: {\n title: 'TypeScript',\n install: (packageName) => `npm install ${packageName}`,\n registry: (packageName) => `https://www.npmjs.com/package/${packageName}`,\n },\n python: {\n title: 'Python',\n install: (packageName) => `pip install ${packageName}`,\n registry: (packageName) => `https://pypi.org/project/${packageName}`,\n },\n dart: {\n title: 'Dart',\n install: (packageName) => `dart pub add ${packageName}`,\n registry: (packageName) => `https://pub.dev/packages/${packageName}`,\n },\n};\n\nconst listFormat = new Intl.ListFormat('en', { type: 'conjunction' });\n\nexport function generateSdkSection(apiTitle: string, sdks: SdkDoc[]): string[] {\n if (sdks.length === 0) return [];\n\n const languages = listFormat.format(\n sdks.map((sdk) => sdkLanguages[sdk.language].title),\n );\n const markdown: string[] = [\n `## ${getTextByCount(sdks.length, presetDocs.client.section)}`,\n `${apiTitle} provides ${sdks.length === 1 ? 'an official client SDK' : 'official client SDKs'} for ${languages}. Install ${sdks.length === 1 ? 'it' : 'one'} to get started:`,\n ];\n\n for (const sdk of sdks) {\n const language = sdkLanguages[sdk.language];\n markdown.push(`### ${language.title}`);\n markdown.push(['```bash', language.install(sdk.package), '```'].join('\\n'));\n markdown.push(\n `[${sdk.package}](${sdk.url ?? language.registry(sdk.package)})`,\n );\n }\n\n return markdown;\n}\n"],
5
+ "mappings": "AAAA,SAAS,gBAAgB,kBAAkB;AAS3C,MAAM,eAAqD;AAAA,EACzD,YAAY;AAAA,IACV,OAAO;AAAA,IACP,SAAS,CAAC,gBAAgB,eAAe,WAAW;AAAA,IACpD,UAAU,CAAC,gBAAgB,iCAAiC,WAAW;AAAA,EACzE;AAAA,EACA,QAAQ;AAAA,IACN,OAAO;AAAA,IACP,SAAS,CAAC,gBAAgB,eAAe,WAAW;AAAA,IACpD,UAAU,CAAC,gBAAgB,4BAA4B,WAAW;AAAA,EACpE;AAAA,EACA,MAAM;AAAA,IACJ,OAAO;AAAA,IACP,SAAS,CAAC,gBAAgB,gBAAgB,WAAW;AAAA,IACrD,UAAU,CAAC,gBAAgB,4BAA4B,WAAW;AAAA,EACpE;AACF;AAEA,MAAM,aAAa,IAAI,KAAK,WAAW,MAAM,EAAE,MAAM,cAAc,CAAC;AAE7D,SAAS,mBAAmB,UAAkB,MAA0B;AAC7E,MAAI,KAAK,WAAW,EAAG,QAAO,CAAC;AAE/B,QAAM,YAAY,WAAW;AAAA,IAC3B,KAAK,IAAI,CAAC,QAAQ,aAAa,IAAI,QAAQ,EAAE,KAAK;AAAA,EACpD;AACA,QAAM,WAAqB;AAAA,IACzB,MAAM,eAAe,KAAK,QAAQ,WAAW,OAAO,OAAO,CAAC;AAAA,IAC5D,GAAG,QAAQ,aAAa,KAAK,WAAW,IAAI,2BAA2B,sBAAsB,QAAQ,SAAS,aAAa,KAAK,WAAW,IAAI,OAAO,KAAK;AAAA,EAC7J;AAEA,aAAW,OAAO,MAAM;AACtB,UAAM,WAAW,aAAa,IAAI,QAAQ;AAC1C,aAAS,KAAK,OAAO,SAAS,KAAK,EAAE;AACrC,aAAS,KAAK,CAAC,WAAW,SAAS,QAAQ,IAAI,OAAO,GAAG,KAAK,EAAE,KAAK,IAAI,CAAC;AAC1E,aAAS;AAAA,MACP,IAAI,IAAI,OAAO,KAAK,IAAI,OAAO,SAAS,SAAS,IAAI,OAAO,CAAC;AAAA,IAC/D;AAAA,EACF;AAEA,SAAO;AACT;",
6
+ "names": []
7
+ }