@sdk-it/spec 0.46.4 → 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 (47) hide show
  1. package/dist/index.d.ts +1 -0
  2. package/dist/index.d.ts.map +1 -1
  3. package/dist/index.js +1 -0
  4. package/dist/index.js.map +2 -2
  5. package/dist/lib/options.d.ts +4 -0
  6. package/dist/lib/options.d.ts.map +1 -1
  7. package/dist/lib/options.js +7 -0
  8. package/dist/lib/options.js.map +2 -2
  9. package/dist/lib/overview-docs/doc-text-utils.d.ts +0 -20
  10. package/dist/lib/overview-docs/doc-text-utils.d.ts.map +1 -1
  11. package/dist/lib/overview-docs/doc-text-utils.js +0 -37
  12. package/dist/lib/overview-docs/doc-text-utils.js.map +2 -2
  13. package/dist/lib/overview-docs/overview-docs.d.ts +8 -1
  14. package/dist/lib/overview-docs/overview-docs.d.ts.map +1 -1
  15. package/dist/lib/overview-docs/overview-docs.js +37 -12
  16. package/dist/lib/overview-docs/overview-docs.js.map +2 -2
  17. package/dist/lib/overview-docs/overview-page.d.ts +5 -0
  18. package/dist/lib/overview-docs/overview-page.d.ts.map +1 -0
  19. package/dist/lib/overview-docs/overview-page.js +60 -0
  20. package/dist/lib/overview-docs/overview-page.js.map +7 -0
  21. package/dist/lib/overview-docs/overview-sdks.d.ts +3 -0
  22. package/dist/lib/overview-docs/overview-sdks.d.ts.map +1 -0
  23. package/dist/lib/overview-docs/overview-sdks.js +42 -0
  24. package/dist/lib/overview-docs/overview-sdks.js.map +7 -0
  25. package/dist/lib/overview-docs/types.d.ts +23 -0
  26. package/dist/lib/overview-docs/types.d.ts.map +1 -0
  27. package/dist/lib/overview-docs/types.js +29 -0
  28. package/dist/lib/overview-docs/types.js.map +7 -0
  29. package/dist/lib/processing-plugins/extract-overview-docs.d.ts.map +1 -1
  30. package/dist/lib/processing-plugins/extract-overview-docs.js +96 -3
  31. package/dist/lib/processing-plugins/extract-overview-docs.js.map +2 -2
  32. package/dist/lib/processing-plugins/normalize-schemas.d.ts.map +1 -1
  33. package/dist/lib/processing-plugins/normalize-schemas.js +10 -1
  34. package/dist/lib/processing-plugins/normalize-schemas.js.map +2 -2
  35. package/dist/lib/sidebar.js +1 -1
  36. package/dist/lib/sidebar.js.map +2 -2
  37. package/dist/lib/types.d.ts +2 -0
  38. package/dist/lib/types.d.ts.map +1 -1
  39. package/package.json +2 -2
  40. package/dist/lib/overview-docs/doc-templates.d.ts +0 -51
  41. package/dist/lib/overview-docs/doc-templates.d.ts.map +0 -1
  42. package/dist/lib/overview-docs/doc-templates.js +0 -123
  43. package/dist/lib/overview-docs/doc-templates.js.map +0 -7
  44. package/dist/lib/overview-docs/overview-intro.d.ts +0 -4
  45. package/dist/lib/overview-docs/overview-intro.d.ts.map +0 -1
  46. package/dist/lib/overview-docs/overview-intro.js +0 -82
  47. package/dist/lib/overview-docs/overview-intro.js.map +0 -7
package/dist/index.d.ts CHANGED
@@ -15,6 +15,7 @@ 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
20
  export * from './lib/sidebar.js';
20
21
  export * from './lib/tag.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,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,6 +15,7 @@ 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
20
  export * from "./lib/sidebar.js";
20
21
  export * from "./lib/tag.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/sidebar.js';\nexport * from './lib/tag.js';\nexport * from './lib/types.js';\nexport * from './lib/walk-schemas.js';\n"],
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;",
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
+ "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
  }
@@ -26,6 +26,10 @@ export declare function coeraceConfig(config: GenerateSdkConfig): {
26
26
  enabled: boolean;
27
27
  };
28
28
  responses: ResponsesConfig;
29
+ docs: {
30
+ entries: unknown;
31
+ sdks: unknown;
32
+ };
29
33
  spec: IR;
30
34
  operationId: (operation: OperationObject, path: string, method: string) => string;
31
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,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;;;;;;;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"}
@@ -36,6 +36,7 @@ function coeraceConfig(config) {
36
36
  },
37
37
  paths: config.spec.paths ?? {},
38
38
  "x-docs": [],
39
+ "x-sdks": [],
39
40
  "x-tagGroups": config.spec["x-tagGroups"] ?? [
40
41
  {
41
42
  name: "API",
@@ -48,6 +49,12 @@ function coeraceConfig(config) {
48
49
  return {
49
50
  pagination: coercePaginationConfig(config.pagination),
50
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
+ },
51
58
  spec,
52
59
  operationId: config.operationId ?? defaults.operationId,
53
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 { 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-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": "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,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
+ }
@@ -0,0 +1,23 @@
1
+ export type AuthoredDoc = {
2
+ id?: string;
3
+ title: string;
4
+ description?: string;
5
+ content?: string;
6
+ };
7
+ /** An authored doc whose id has been normalized to a url-safe slug. */
8
+ export type ResolvedDoc = AuthoredDoc & {
9
+ id: string;
10
+ };
11
+ export type SdkLanguage = 'typescript' | 'python' | 'dart';
12
+ export type SdkDoc = {
13
+ language: SdkLanguage;
14
+ package: string;
15
+ url?: string;
16
+ };
17
+ export declare const SDK_LANGUAGES: readonly SdkLanguage[];
18
+ /** Doc ids the apiref reserves for its own routes. */
19
+ export declare const RESERVED_DOC_IDS: ReadonlySet<string>;
20
+ export declare function isAuthoredDoc(value: unknown): value is AuthoredDoc;
21
+ export declare function isSdkDoc(value: unknown): value is SdkDoc;
22
+ export declare function slugify(value: string): string;
23
+ //# sourceMappingURL=types.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../../src/lib/overview-docs/types.ts"],"names":[],"mappings":"AAAA,MAAM,MAAM,WAAW,GAAG;IACxB,EAAE,CAAC,EAAE,MAAM,CAAC;IACZ,KAAK,EAAE,MAAM,CAAC;IACd,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,OAAO,CAAC,EAAE,MAAM,CAAC;CAClB,CAAC;AAEF,uEAAuE;AACvE,MAAM,MAAM,WAAW,GAAG,WAAW,GAAG;IAAE,EAAE,EAAE,MAAM,CAAA;CAAE,CAAC;AAEvD,MAAM,MAAM,WAAW,GAAG,YAAY,GAAG,QAAQ,GAAG,MAAM,CAAC;AAE3D,MAAM,MAAM,MAAM,GAAG;IACnB,QAAQ,EAAE,WAAW,CAAC;IACtB,OAAO,EAAE,MAAM,CAAC;IAChB,GAAG,CAAC,EAAE,MAAM,CAAC;CACd,CAAC;AAEF,eAAO,MAAM,aAAa,EAAE,SAAS,WAAW,EAI/C,CAAC;AAEF,sDAAsD;AACtD,eAAO,MAAM,gBAAgB,EAAE,WAAW,CAAC,MAAM,CAAsB,CAAC;AAUxE,wBAAgB,aAAa,CAAC,KAAK,EAAE,OAAO,GAAG,KAAK,IAAI,WAAW,CASlE;AAED,wBAAgB,QAAQ,CAAC,KAAK,EAAE,OAAO,GAAG,KAAK,IAAI,MAAM,CASxD;AAED,wBAAgB,OAAO,CAAC,KAAK,EAAE,MAAM,GAAG,MAAM,CAK7C"}
@@ -0,0 +1,29 @@
1
+ const SDK_LANGUAGES = [
2
+ "typescript",
3
+ "python",
4
+ "dart"
5
+ ];
6
+ const RESERVED_DOC_IDS = /* @__PURE__ */ new Set(["embed"]);
7
+ function isRecord(value) {
8
+ return typeof value === "object" && value !== null && !Array.isArray(value);
9
+ }
10
+ function isOptionalString(value) {
11
+ return value === void 0 || typeof value === "string";
12
+ }
13
+ function isAuthoredDoc(value) {
14
+ return isRecord(value) && typeof value.title === "string" && value.title.trim() !== "" && isOptionalString(value.id) && isOptionalString(value.description) && isOptionalString(value.content);
15
+ }
16
+ function isSdkDoc(value) {
17
+ return isRecord(value) && typeof value.language === "string" && SDK_LANGUAGES.includes(value.language) && typeof value.package === "string" && value.package.trim() !== "" && isOptionalString(value.url);
18
+ }
19
+ function slugify(value) {
20
+ return value.toLowerCase().replace(/[^a-z0-9]+/g, "-").replace(/^-+|-+$/g, "");
21
+ }
22
+ export {
23
+ RESERVED_DOC_IDS,
24
+ SDK_LANGUAGES,
25
+ isAuthoredDoc,
26
+ isSdkDoc,
27
+ slugify
28
+ };
29
+ //# sourceMappingURL=types.js.map
@@ -0,0 +1,7 @@
1
+ {
2
+ "version": 3,
3
+ "sources": ["../../../src/lib/overview-docs/types.ts"],
4
+ "sourcesContent": ["export type AuthoredDoc = {\n id?: string;\n title: string;\n description?: string;\n content?: string;\n};\n\n/** An authored doc whose id has been normalized to a url-safe slug. */\nexport type ResolvedDoc = AuthoredDoc & { id: string };\n\nexport type SdkLanguage = 'typescript' | 'python' | 'dart';\n\nexport type SdkDoc = {\n language: SdkLanguage;\n package: string;\n url?: string;\n};\n\nexport const SDK_LANGUAGES: readonly SdkLanguage[] = [\n 'typescript',\n 'python',\n 'dart',\n];\n\n/** Doc ids the apiref reserves for its own routes. */\nexport const RESERVED_DOC_IDS: ReadonlySet<string> = new Set(['embed']);\n\nfunction isRecord(value: unknown): value is Record<string, unknown> {\n return typeof value === 'object' && value !== null && !Array.isArray(value);\n}\n\nfunction isOptionalString(value: unknown): value is string | undefined {\n return value === undefined || typeof value === 'string';\n}\n\nexport function isAuthoredDoc(value: unknown): value is AuthoredDoc {\n return (\n isRecord(value) &&\n typeof value.title === 'string' &&\n value.title.trim() !== '' &&\n isOptionalString(value.id) &&\n isOptionalString(value.description) &&\n isOptionalString(value.content)\n );\n}\n\nexport function isSdkDoc(value: unknown): value is SdkDoc {\n return (\n isRecord(value) &&\n typeof value.language === 'string' &&\n (SDK_LANGUAGES as readonly string[]).includes(value.language) &&\n typeof value.package === 'string' &&\n value.package.trim() !== '' &&\n isOptionalString(value.url)\n );\n}\n\nexport function slugify(value: string): string {\n return value\n .toLowerCase()\n .replace(/[^a-z0-9]+/g, '-')\n .replace(/^-+|-+$/g, '');\n}\n"],
5
+ "mappings": "AAkBO,MAAM,gBAAwC;AAAA,EACnD;AAAA,EACA;AAAA,EACA;AACF;AAGO,MAAM,mBAAwC,oBAAI,IAAI,CAAC,OAAO,CAAC;AAEtE,SAAS,SAAS,OAAkD;AAClE,SAAO,OAAO,UAAU,YAAY,UAAU,QAAQ,CAAC,MAAM,QAAQ,KAAK;AAC5E;AAEA,SAAS,iBAAiB,OAA6C;AACrE,SAAO,UAAU,UAAa,OAAO,UAAU;AACjD;AAEO,SAAS,cAAc,OAAsC;AAClE,SACE,SAAS,KAAK,KACd,OAAO,MAAM,UAAU,YACvB,MAAM,MAAM,KAAK,MAAM,MACvB,iBAAiB,MAAM,EAAE,KACzB,iBAAiB,MAAM,WAAW,KAClC,iBAAiB,MAAM,OAAO;AAElC;AAEO,SAAS,SAAS,OAAiC;AACxD,SACE,SAAS,KAAK,KACd,OAAO,MAAM,aAAa,YACzB,cAAoC,SAAS,MAAM,QAAQ,KAC5D,OAAO,MAAM,YAAY,YACzB,MAAM,QAAQ,KAAK,MAAM,MACzB,iBAAiB,MAAM,GAAG;AAE9B;AAEO,SAAS,QAAQ,OAAuB;AAC7C,SAAO,MACJ,YAAY,EACZ,QAAQ,eAAe,GAAG,EAC1B,QAAQ,YAAY,EAAE;AAC3B;",
6
+ "names": []
7
+ }
@@ -1 +1 @@
1
- {"version":3,"file":"extract-overview-docs.d.ts","sourceRoot":"","sources":["../../../src/lib/processing-plugins/extract-overview-docs.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,kBAAkB,CAAC;AAEzD,wBAAgB,yBAAyB,IAAI,gBAAgB,CAO5D"}
1
+ {"version":3,"file":"extract-overview-docs.d.ts","sourceRoot":"","sources":["../../../src/lib/processing-plugins/extract-overview-docs.ts"],"names":[],"mappings":"AAYA,OAAO,KAAK,EAAqB,gBAAgB,EAAE,MAAM,kBAAkB,CAAC;AAE5E,wBAAgB,yBAAyB,IAAI,gBAAgB,CAa5D"}
@@ -1,12 +1,105 @@
1
- import { extractOverviewDocs } from "../overview-docs/overview-docs.js";
1
+ import {
2
+ GENERATED_DOC_IDS,
3
+ extractOverviewDocs
4
+ } from "../overview-docs/overview-docs.js";
5
+ import {
6
+ RESERVED_DOC_IDS,
7
+ isAuthoredDoc,
8
+ isSdkDoc,
9
+ slugify
10
+ } from "../overview-docs/types.js";
2
11
  function extractOverviewDocsPlugin() {
3
12
  return {
4
13
  name: "extract-overview-docs",
5
- process({ spec }) {
6
- spec["x-docs"] = extractOverviewDocs(spec);
14
+ process(context) {
15
+ const sdks = collectSdks(context);
16
+ const entries = collectDocs(context);
17
+ context.spec["x-sdks"] = sdks;
18
+ context.spec["x-docs"] = extractOverviewDocs(context.spec, {
19
+ entries,
20
+ sdks
21
+ });
7
22
  }
8
23
  };
9
24
  }
25
+ function collectSdks({ options, report }) {
26
+ const raw = options.docs.sdks;
27
+ if (raw === void 0) return [];
28
+ if (!Array.isArray(raw)) {
29
+ report({
30
+ severity: "warning",
31
+ code: "invalid-x-sdks",
32
+ message: "x-sdks must be an array of { language, package, url? }.",
33
+ path: "/x-sdks"
34
+ });
35
+ return [];
36
+ }
37
+ return raw.filter((entry, index) => {
38
+ if (isSdkDoc(entry)) return true;
39
+ report({
40
+ severity: "warning",
41
+ code: "invalid-x-sdks",
42
+ message: "x-sdks entries need a language of typescript, python, or dart and a package name.",
43
+ path: `/x-sdks/${index}`
44
+ });
45
+ return false;
46
+ });
47
+ }
48
+ function collectDocs({ options, report }) {
49
+ const raw = options.docs.entries;
50
+ if (raw === void 0) return [];
51
+ if (!Array.isArray(raw)) {
52
+ report({
53
+ severity: "warning",
54
+ code: "invalid-x-docs",
55
+ message: "x-docs must be an array of { id?, title, description?, content? }.",
56
+ path: "/x-docs"
57
+ });
58
+ return [];
59
+ }
60
+ const docs = [];
61
+ const seen = /* @__PURE__ */ new Set();
62
+ raw.forEach((entry, index) => {
63
+ const path = `/x-docs/${index}`;
64
+ const invalid = (message) => report({ severity: "warning", code: "invalid-x-docs", message, path });
65
+ if (!isAuthoredDoc(entry)) {
66
+ invalid(
67
+ "x-docs entries need a title; id, description, and content must be strings."
68
+ );
69
+ return;
70
+ }
71
+ const id = slugify(entry.id ?? entry.title);
72
+ if (!id) {
73
+ invalid(`Cannot derive a url-safe id from "${entry.id ?? entry.title}".`);
74
+ return;
75
+ }
76
+ if (RESERVED_DOC_IDS.has(id)) {
77
+ report({
78
+ severity: "warning",
79
+ code: "reserved-x-docs-id",
80
+ message: `"${id}" is reserved by the API reference and cannot be used as a doc id.`,
81
+ path
82
+ });
83
+ return;
84
+ }
85
+ if (seen.has(id)) {
86
+ report({
87
+ severity: "warning",
88
+ code: "duplicate-x-docs-id",
89
+ message: `Doc id "${id}" is used more than once; later entries are ignored.`,
90
+ path
91
+ });
92
+ return;
93
+ }
94
+ if (!GENERATED_DOC_IDS.has(id) && !entry.content && !entry.description) {
95
+ invalid(`Custom doc "${id}" needs content or a description to render.`);
96
+ return;
97
+ }
98
+ seen.add(id);
99
+ docs.push({ ...entry, id });
100
+ });
101
+ return docs;
102
+ }
10
103
  export {
11
104
  extractOverviewDocsPlugin
12
105
  };
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "version": 3,
3
3
  "sources": ["../../../src/lib/processing-plugins/extract-overview-docs.ts"],
4
- "sourcesContent": ["import { extractOverviewDocs } from '../overview-docs/overview-docs.js';\nimport type { ProcessingPlugin } from '../processing.js';\n\nexport function extractOverviewDocsPlugin(): ProcessingPlugin {\n return {\n name: 'extract-overview-docs',\n process({ spec }) {\n spec['x-docs'] = extractOverviewDocs(spec);\n },\n };\n}\n"],
5
- "mappings": "AAAA,SAAS,2BAA2B;AAG7B,SAAS,4BAA8C;AAC5D,SAAO;AAAA,IACL,MAAM;AAAA,IACN,QAAQ,EAAE,KAAK,GAAG;AAChB,WAAK,QAAQ,IAAI,oBAAoB,IAAI;AAAA,IAC3C;AAAA,EACF;AACF;",
4
+ "sourcesContent": ["import {\n GENERATED_DOC_IDS,\n extractOverviewDocs,\n} from '../overview-docs/overview-docs.js';\nimport {\n RESERVED_DOC_IDS,\n type ResolvedDoc,\n type SdkDoc,\n isAuthoredDoc,\n isSdkDoc,\n slugify,\n} from '../overview-docs/types.js';\nimport type { ProcessingContext, ProcessingPlugin } from '../processing.js';\n\nexport function extractOverviewDocsPlugin(): ProcessingPlugin {\n return {\n name: 'extract-overview-docs',\n process(context) {\n const sdks = collectSdks(context);\n const entries = collectDocs(context);\n context.spec['x-sdks'] = sdks;\n context.spec['x-docs'] = extractOverviewDocs(context.spec, {\n entries,\n sdks,\n });\n },\n };\n}\n\nfunction collectSdks({ options, report }: ProcessingContext): SdkDoc[] {\n const raw = options.docs.sdks;\n if (raw === undefined) return [];\n if (!Array.isArray(raw)) {\n report({\n severity: 'warning',\n code: 'invalid-x-sdks',\n message: 'x-sdks must be an array of { language, package, url? }.',\n path: '/x-sdks',\n });\n return [];\n }\n return raw.filter((entry: unknown, index): entry is SdkDoc => {\n if (isSdkDoc(entry)) return true;\n report({\n severity: 'warning',\n code: 'invalid-x-sdks',\n message:\n 'x-sdks entries need a language of typescript, python, or dart and a package name.',\n path: `/x-sdks/${index}`,\n });\n return false;\n });\n}\n\nfunction collectDocs({ options, report }: ProcessingContext): ResolvedDoc[] {\n const raw = options.docs.entries;\n if (raw === undefined) return [];\n if (!Array.isArray(raw)) {\n report({\n severity: 'warning',\n code: 'invalid-x-docs',\n message:\n 'x-docs must be an array of { id?, title, description?, content? }.',\n path: '/x-docs',\n });\n return [];\n }\n\n const docs: ResolvedDoc[] = [];\n const seen = new Set<string>();\n raw.forEach((entry: unknown, index) => {\n const path = `/x-docs/${index}`;\n const invalid = (message: string) =>\n report({ severity: 'warning', code: 'invalid-x-docs', message, path });\n\n if (!isAuthoredDoc(entry)) {\n invalid(\n 'x-docs entries need a title; id, description, and content must be strings.',\n );\n return;\n }\n const id = slugify(entry.id ?? entry.title);\n if (!id) {\n invalid(`Cannot derive a url-safe id from \"${entry.id ?? entry.title}\".`);\n return;\n }\n if (RESERVED_DOC_IDS.has(id)) {\n report({\n severity: 'warning',\n code: 'reserved-x-docs-id',\n message: `\"${id}\" is reserved by the API reference and cannot be used as a doc id.`,\n path,\n });\n return;\n }\n if (seen.has(id)) {\n report({\n severity: 'warning',\n code: 'duplicate-x-docs-id',\n message: `Doc id \"${id}\" is used more than once; later entries are ignored.`,\n path,\n });\n return;\n }\n if (!GENERATED_DOC_IDS.has(id) && !entry.content && !entry.description) {\n invalid(`Custom doc \"${id}\" needs content or a description to render.`);\n return;\n }\n seen.add(id);\n docs.push({ ...entry, id });\n });\n return docs;\n}\n"],
5
+ "mappings": "AAAA;AAAA,EACE;AAAA,EACA;AAAA,OACK;AACP;AAAA,EACE;AAAA,EAGA;AAAA,EACA;AAAA,EACA;AAAA,OACK;AAGA,SAAS,4BAA8C;AAC5D,SAAO;AAAA,IACL,MAAM;AAAA,IACN,QAAQ,SAAS;AACf,YAAM,OAAO,YAAY,OAAO;AAChC,YAAM,UAAU,YAAY,OAAO;AACnC,cAAQ,KAAK,QAAQ,IAAI;AACzB,cAAQ,KAAK,QAAQ,IAAI,oBAAoB,QAAQ,MAAM;AAAA,QACzD;AAAA,QACA;AAAA,MACF,CAAC;AAAA,IACH;AAAA,EACF;AACF;AAEA,SAAS,YAAY,EAAE,SAAS,OAAO,GAAgC;AACrE,QAAM,MAAM,QAAQ,KAAK;AACzB,MAAI,QAAQ,OAAW,QAAO,CAAC;AAC/B,MAAI,CAAC,MAAM,QAAQ,GAAG,GAAG;AACvB,WAAO;AAAA,MACL,UAAU;AAAA,MACV,MAAM;AAAA,MACN,SAAS;AAAA,MACT,MAAM;AAAA,IACR,CAAC;AACD,WAAO,CAAC;AAAA,EACV;AACA,SAAO,IAAI,OAAO,CAAC,OAAgB,UAA2B;AAC5D,QAAI,SAAS,KAAK,EAAG,QAAO;AAC5B,WAAO;AAAA,MACL,UAAU;AAAA,MACV,MAAM;AAAA,MACN,SACE;AAAA,MACF,MAAM,WAAW,KAAK;AAAA,IACxB,CAAC;AACD,WAAO;AAAA,EACT,CAAC;AACH;AAEA,SAAS,YAAY,EAAE,SAAS,OAAO,GAAqC;AAC1E,QAAM,MAAM,QAAQ,KAAK;AACzB,MAAI,QAAQ,OAAW,QAAO,CAAC;AAC/B,MAAI,CAAC,MAAM,QAAQ,GAAG,GAAG;AACvB,WAAO;AAAA,MACL,UAAU;AAAA,MACV,MAAM;AAAA,MACN,SACE;AAAA,MACF,MAAM;AAAA,IACR,CAAC;AACD,WAAO,CAAC;AAAA,EACV;AAEA,QAAM,OAAsB,CAAC;AAC7B,QAAM,OAAO,oBAAI,IAAY;AAC7B,MAAI,QAAQ,CAAC,OAAgB,UAAU;AACrC,UAAM,OAAO,WAAW,KAAK;AAC7B,UAAM,UAAU,CAAC,YACf,OAAO,EAAE,UAAU,WAAW,MAAM,kBAAkB,SAAS,KAAK,CAAC;AAEvE,QAAI,CAAC,cAAc,KAAK,GAAG;AACzB;AAAA,QACE;AAAA,MACF;AACA;AAAA,IACF;AACA,UAAM,KAAK,QAAQ,MAAM,MAAM,MAAM,KAAK;AAC1C,QAAI,CAAC,IAAI;AACP,cAAQ,qCAAqC,MAAM,MAAM,MAAM,KAAK,IAAI;AACxE;AAAA,IACF;AACA,QAAI,iBAAiB,IAAI,EAAE,GAAG;AAC5B,aAAO;AAAA,QACL,UAAU;AAAA,QACV,MAAM;AAAA,QACN,SAAS,IAAI,EAAE;AAAA,QACf;AAAA,MACF,CAAC;AACD;AAAA,IACF;AACA,QAAI,KAAK,IAAI,EAAE,GAAG;AAChB,aAAO;AAAA,QACL,UAAU;AAAA,QACV,MAAM;AAAA,QACN,SAAS,WAAW,EAAE;AAAA,QACtB;AAAA,MACF,CAAC;AACD;AAAA,IACF;AACA,QAAI,CAAC,kBAAkB,IAAI,EAAE,KAAK,CAAC,MAAM,WAAW,CAAC,MAAM,aAAa;AACtE,cAAQ,eAAe,EAAE,6CAA6C;AACtE;AAAA,IACF;AACA,SAAK,IAAI,EAAE;AACX,SAAK,KAAK,EAAE,GAAG,OAAO,GAAG,CAAC;AAAA,EAC5B,CAAC;AACD,SAAO;AACT;",
6
6
  "names": []
7
7
  }
@@ -1 +1 @@
1
- {"version":3,"file":"normalize-schemas.d.ts","sourceRoot":"","sources":["../../../src/lib/processing-plugins/normalize-schemas.ts"],"names":[],"mappings":"AASA,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,kBAAkB,CAAC;AAmLzD,wBAAgB,gBAAgB,IAAI,gBAAgB,CAOnD"}
1
+ {"version":3,"file":"normalize-schemas.d.ts","sourceRoot":"","sources":["../../../src/lib/processing-plugins/normalize-schemas.ts"],"names":[],"mappings":"AAUA,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,kBAAkB,CAAC;AA2LzD,wBAAgB,gBAAgB,IAAI,gBAAgB,CAOnD"}
@@ -4,6 +4,7 @@ import { isEmpty, isRef, notRef, resolveRef, snakecase } from "@sdk-it/core";
4
4
  import { findVarients } from "../find-polymorphic-varients.js";
5
5
  import { formatName } from "../format-name.js";
6
6
  import { isPrimitiveSchema } from "../is-primitive-schema.js";
7
+ import { coerceTypes } from "../is.js";
7
8
  function normalizeSchemaObjects(spec, schemas, visited = /* @__PURE__ */ new Set()) {
8
9
  for (const schema of schemas) {
9
10
  if (isRef(schema)) continue;
@@ -145,8 +146,16 @@ function normalizeSchemaObjects(spec, schemas, visited = /* @__PURE__ */ new Set
145
146
  (item) => resolveRef(spec, item).type !== "null"
146
147
  );
147
148
  if (otherTypes.length === 1) {
148
- Object.assign(schema, otherTypes[0]);
149
+ const [only] = otherTypes;
150
+ const droppedNull = otherTypes.length !== schema[kind].length;
151
+ Object.assign(schema, only);
149
152
  delete schema[kind];
153
+ if (droppedNull && notRef(only)) {
154
+ const types = coerceTypes(only, false);
155
+ if (types.length) {
156
+ schema.type = uniq([...types, "null"]);
157
+ }
158
+ }
150
159
  continue;
151
160
  }
152
161
  schema["x-varients"] = findVarients(spec, schema[kind]);
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "version": 3,
3
3
  "sources": ["../../../src/lib/processing-plugins/normalize-schemas.ts"],
4
- "sourcesContent": ["import { merge, uniq } from 'lodash-es';\nimport assert from 'node:assert';\nimport type { ReferenceObject, SchemaObject } from 'openapi3-ts/oas31';\n\nimport { isEmpty, isRef, notRef, resolveRef, snakecase } from '@sdk-it/core';\n\nimport { findVarients } from '../find-polymorphic-varients.js';\nimport { formatName } from '../format-name.js';\nimport { isPrimitiveSchema } from '../is-primitive-schema.js';\nimport type { ProcessingPlugin } from '../processing.js';\nimport type { IR } from '../types.js';\n\nfunction normalizeSchemaObjects(\n spec: IR,\n schemas: (SchemaObject | ReferenceObject)[],\n visited = new Set<string>(),\n) {\n for (const schema of schemas) {\n if (isRef(schema)) continue;\n\n if (!isEmpty(schema.properties)) {\n schema.type = 'object';\n delete schema.oneOf;\n delete schema.anyOf;\n normalizeSchemaObjects(spec, Object.values(schema.properties), visited);\n for (const [key, value] of Object.entries(schema.properties)) {\n if (notRef(value) && isPrimitiveSchema(value)) {\n value.default ??= schema.default?.[key];\n delete schema.default?.[key];\n }\n }\n delete schema.default;\n }\n\n if (!isEmpty(schema['x-properties'])) {\n normalizeSchemaObjects(\n spec,\n Object.values(schema['x-properties']),\n visited,\n );\n }\n\n if (!isEmpty(schema.items)) {\n delete schema.oneOf;\n delete schema.anyOf;\n schema.type = 'array';\n normalizeSchemaObjects(spec, [schema.items], visited);\n const items = resolveRef<SchemaObject>(spec, schema.items);\n if (Array.isArray(items.default)) {\n schema.default ??= structuredClone(items.default);\n }\n delete items.default;\n }\n\n if (!isEmpty(schema.anyOf) && !isEmpty(schema.oneOf)) {\n delete schema.anyOf;\n }\n\n if (isEmpty(schema.enum)) {\n delete schema.enum;\n }\n\n if (!isEmpty(schema.enum)) {\n if (schema.enum.length === 1) {\n schema.const = schema.enum[0];\n delete schema.enum;\n } else {\n const valuesSet = new Set<string>();\n const valuesList = [];\n for (const value of schema.enum) {\n const formattedValue = formatName(snakecase(formatName(value)));\n if (!valuesSet.has(formattedValue)) {\n valuesSet.add(formattedValue);\n valuesList.push(value);\n }\n }\n schema.enum = valuesList;\n }\n delete schema.allOf;\n }\n\n if (schema.const !== undefined) {\n schema.default = schema.const;\n }\n\n if (!isEmpty(schema.allOf)) {\n const schemas = schema.allOf;\n const resolved = schemas.map((item) =>\n resolveRef<SchemaObject>(spec, item),\n );\n const hasObjects = resolved.some((item) => item.type === 'object');\n const hasOtherTypes = resolved.some(\n (item) => item.type && item.type !== 'object',\n );\n if (hasObjects && hasOtherTypes) {\n assert(false, `allOf must be an object`);\n }\n merge(\n schema,\n ...resolved.map((resolvedSchema, index) => {\n const sourceSchema = schemas[index];\n if (isRef(sourceSchema)) {\n if (visited.has(sourceSchema.$ref)) {\n throw new Error(\n `Circular allOf reference detected: ${[\n ...visited,\n sourceSchema.$ref,\n ].join(' -> ')}`,\n );\n }\n normalizeSchemaObjects(\n spec,\n [resolvedSchema],\n new Set(visited).add(sourceSchema.$ref),\n );\n } else {\n normalizeSchemaObjects(spec, [resolvedSchema], visited);\n }\n return resolvedSchema;\n }),\n );\n delete schema.allOf;\n } else {\n delete schema.allOf;\n }\n\n if (\n schema.type === 'object' &&\n isEmpty(schema.properties) &&\n typeof schema.additionalProperties === 'object' &&\n !isEmpty(schema.additionalProperties) &&\n notRef(schema.additionalProperties) &&\n !isEmpty(schema.additionalProperties.properties)\n ) {\n normalizeSchemaObjects(\n spec,\n Object.values(schema.additionalProperties.properties),\n visited,\n );\n }\n\n for (const kind of ['oneOf', 'anyOf'] as const) {\n if (!isEmpty(schema[kind])) {\n delete schema.type;\n normalizeSchemaObjects(spec, schema[kind], visited);\n if (isEmpty(schema[kind])) {\n continue;\n }\n\n let enumSchemaIndex = -1;\n const enumValues: string[] = [];\n for (let index = 0; index < schema[kind].length; index++) {\n const item = schema[kind][index];\n if (notRef(item) && item.type === 'string') {\n if (item.enum && item.enum.length > 1) {\n enumValues.push(...item.enum);\n if (enumSchemaIndex === -1) {\n enumSchemaIndex = index;\n }\n }\n }\n }\n if (enumSchemaIndex !== -1) {\n const enumSchema = schema[kind][enumSchemaIndex];\n if (notRef(enumSchema)) {\n enumSchema.enum = uniq(enumValues);\n }\n schema[kind] = schema[kind].filter(\n (item, index) => index === enumSchemaIndex || isRef(item),\n );\n }\n const otherTypes = schema[kind].filter(\n (item) => resolveRef<SchemaObject>(spec, item).type !== 'null',\n );\n if (otherTypes.length === 1) {\n Object.assign(schema, otherTypes[0]);\n delete schema[kind];\n continue;\n }\n\n schema['x-varients'] = findVarients(spec, schema[kind]);\n } else {\n delete schema[kind];\n }\n }\n }\n}\n\nexport function normalizeSchemas(): ProcessingPlugin {\n return {\n name: 'normalize-schemas',\n process({ spec }) {\n normalizeSchemaObjects(spec, Object.values(spec.components.schemas));\n },\n };\n}\n"],
5
- "mappings": "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",
4
+ "sourcesContent": ["import { merge, uniq } from 'lodash-es';\nimport assert from 'node:assert';\nimport type { ReferenceObject, SchemaObject } from 'openapi3-ts/oas31';\n\nimport { isEmpty, isRef, notRef, resolveRef, snakecase } from '@sdk-it/core';\n\nimport { findVarients } from '../find-polymorphic-varients.js';\nimport { formatName } from '../format-name.js';\nimport { isPrimitiveSchema } from '../is-primitive-schema.js';\nimport { coerceTypes } from '../is.js';\nimport type { ProcessingPlugin } from '../processing.js';\nimport type { IR } from '../types.js';\n\nfunction normalizeSchemaObjects(\n spec: IR,\n schemas: (SchemaObject | ReferenceObject)[],\n visited = new Set<string>(),\n) {\n for (const schema of schemas) {\n if (isRef(schema)) continue;\n\n if (!isEmpty(schema.properties)) {\n schema.type = 'object';\n delete schema.oneOf;\n delete schema.anyOf;\n normalizeSchemaObjects(spec, Object.values(schema.properties), visited);\n for (const [key, value] of Object.entries(schema.properties)) {\n if (notRef(value) && isPrimitiveSchema(value)) {\n value.default ??= schema.default?.[key];\n delete schema.default?.[key];\n }\n }\n delete schema.default;\n }\n\n if (!isEmpty(schema['x-properties'])) {\n normalizeSchemaObjects(\n spec,\n Object.values(schema['x-properties']),\n visited,\n );\n }\n\n if (!isEmpty(schema.items)) {\n delete schema.oneOf;\n delete schema.anyOf;\n schema.type = 'array';\n normalizeSchemaObjects(spec, [schema.items], visited);\n const items = resolveRef<SchemaObject>(spec, schema.items);\n if (Array.isArray(items.default)) {\n schema.default ??= structuredClone(items.default);\n }\n delete items.default;\n }\n\n if (!isEmpty(schema.anyOf) && !isEmpty(schema.oneOf)) {\n delete schema.anyOf;\n }\n\n if (isEmpty(schema.enum)) {\n delete schema.enum;\n }\n\n if (!isEmpty(schema.enum)) {\n if (schema.enum.length === 1) {\n schema.const = schema.enum[0];\n delete schema.enum;\n } else {\n const valuesSet = new Set<string>();\n const valuesList = [];\n for (const value of schema.enum) {\n const formattedValue = formatName(snakecase(formatName(value)));\n if (!valuesSet.has(formattedValue)) {\n valuesSet.add(formattedValue);\n valuesList.push(value);\n }\n }\n schema.enum = valuesList;\n }\n delete schema.allOf;\n }\n\n if (schema.const !== undefined) {\n schema.default = schema.const;\n }\n\n if (!isEmpty(schema.allOf)) {\n const schemas = schema.allOf;\n const resolved = schemas.map((item) =>\n resolveRef<SchemaObject>(spec, item),\n );\n const hasObjects = resolved.some((item) => item.type === 'object');\n const hasOtherTypes = resolved.some(\n (item) => item.type && item.type !== 'object',\n );\n if (hasObjects && hasOtherTypes) {\n assert(false, `allOf must be an object`);\n }\n merge(\n schema,\n ...resolved.map((resolvedSchema, index) => {\n const sourceSchema = schemas[index];\n if (isRef(sourceSchema)) {\n if (visited.has(sourceSchema.$ref)) {\n throw new Error(\n `Circular allOf reference detected: ${[\n ...visited,\n sourceSchema.$ref,\n ].join(' -> ')}`,\n );\n }\n normalizeSchemaObjects(\n spec,\n [resolvedSchema],\n new Set(visited).add(sourceSchema.$ref),\n );\n } else {\n normalizeSchemaObjects(spec, [resolvedSchema], visited);\n }\n return resolvedSchema;\n }),\n );\n delete schema.allOf;\n } else {\n delete schema.allOf;\n }\n\n if (\n schema.type === 'object' &&\n isEmpty(schema.properties) &&\n typeof schema.additionalProperties === 'object' &&\n !isEmpty(schema.additionalProperties) &&\n notRef(schema.additionalProperties) &&\n !isEmpty(schema.additionalProperties.properties)\n ) {\n normalizeSchemaObjects(\n spec,\n Object.values(schema.additionalProperties.properties),\n visited,\n );\n }\n\n for (const kind of ['oneOf', 'anyOf'] as const) {\n if (!isEmpty(schema[kind])) {\n delete schema.type;\n normalizeSchemaObjects(spec, schema[kind], visited);\n if (isEmpty(schema[kind])) {\n continue;\n }\n\n let enumSchemaIndex = -1;\n const enumValues: string[] = [];\n for (let index = 0; index < schema[kind].length; index++) {\n const item = schema[kind][index];\n if (notRef(item) && item.type === 'string') {\n if (item.enum && item.enum.length > 1) {\n enumValues.push(...item.enum);\n if (enumSchemaIndex === -1) {\n enumSchemaIndex = index;\n }\n }\n }\n }\n if (enumSchemaIndex !== -1) {\n const enumSchema = schema[kind][enumSchemaIndex];\n if (notRef(enumSchema)) {\n enumSchema.enum = uniq(enumValues);\n }\n schema[kind] = schema[kind].filter(\n (item, index) => index === enumSchemaIndex || isRef(item),\n );\n }\n const otherTypes = schema[kind].filter(\n (item) => resolveRef<SchemaObject>(spec, item).type !== 'null',\n );\n if (otherTypes.length === 1) {\n const [only] = otherTypes;\n const droppedNull = otherTypes.length !== schema[kind].length;\n Object.assign(schema, only);\n delete schema[kind];\n if (droppedNull && notRef(only)) {\n const types = coerceTypes(only, false);\n if (types.length) {\n schema.type = uniq([...types, 'null']);\n }\n }\n continue;\n }\n\n schema['x-varients'] = findVarients(spec, schema[kind]);\n } else {\n delete schema[kind];\n }\n }\n }\n}\n\nexport function normalizeSchemas(): ProcessingPlugin {\n return {\n name: 'normalize-schemas',\n process({ spec }) {\n normalizeSchemaObjects(spec, Object.values(spec.components.schemas));\n },\n };\n}\n"],
5
+ "mappings": "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",
6
6
  "names": ["schemas"]
7
7
  }
@@ -2,7 +2,7 @@ import { camelcase } from "stringcase";
2
2
  import { notNullOrUndefined } from "@sdk-it/core/file-system.js";
3
3
  import { forEachOperation } from "./for-each-operation.js";
4
4
  function toSidebar(spec) {
5
- const sidebar = spec["x-docs"];
5
+ const sidebar = [...spec["x-docs"]];
6
6
  for (const tagGroup of spec["x-tagGroups"]) {
7
7
  sidebar.push({
8
8
  id: camelcase(tagGroup.name),
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "version": 3,
3
3
  "sources": ["../../src/lib/sidebar.ts"],
4
- "sourcesContent": ["import { camelcase } from 'stringcase';\n\nimport { notNullOrUndefined } from '@sdk-it/core/file-system.js';\n\nimport { forEachOperation } from './for-each-operation.js';\nimport type { IR } from './types.js';\n\nexport type ChildNavItem = {\n id: string;\n title: string;\n url: string;\n};\n\nexport type NavItem = {\n id: string;\n title: string;\n description?: string;\n url?: string;\n items?: ChildNavItem[];\n content?: string; // Markdown content\n};\n\nexport type CategoryItem = {\n id: string;\n category: string;\n description?: string;\n items: NavItem[];\n};\n\nexport type SidebarData = CategoryItem[];\n\nexport interface TagGroups {\n name: string;\n tags: string[];\n}\n\nexport function toSidebar(spec: IR) {\n const sidebar: SidebarData = spec['x-docs'];\n for (const tagGroup of spec['x-tagGroups']) {\n sidebar.push({\n id: camelcase(tagGroup.name),\n category: tagGroup.name,\n items: tagGroup.tags.map((tag) => {\n const tagSpec = spec.tags?.find((t) => t.name === tag);\n return {\n id: crypto.randomUUID(),\n description: tagSpec?.description,\n title: tagSpec\n ? tagSpec['x-displayName'] || tagSpec.name || tag\n : tag,\n items: forEachOperation(spec, (entry, operation) => {\n if (operation.tags.includes(tag)) {\n const title = operation.summary || operation.operationId;\n return {\n id: operation.operationId,\n title,\n url: `${camelcase(tag)}/${camelcase(operation.operationId)}`,\n };\n }\n return null;\n }).filter(notNullOrUndefined),\n };\n }),\n });\n }\n return sidebar;\n}\n"],
5
- "mappings": "AAAA,SAAS,iBAAiB;AAE1B,SAAS,0BAA0B;AAEnC,SAAS,wBAAwB;AAgC1B,SAAS,UAAU,MAAU;AAClC,QAAM,UAAuB,KAAK,QAAQ;AAC1C,aAAW,YAAY,KAAK,aAAa,GAAG;AAC1C,YAAQ,KAAK;AAAA,MACX,IAAI,UAAU,SAAS,IAAI;AAAA,MAC3B,UAAU,SAAS;AAAA,MACnB,OAAO,SAAS,KAAK,IAAI,CAAC,QAAQ;AAChC,cAAM,UAAU,KAAK,MAAM,KAAK,CAAC,MAAM,EAAE,SAAS,GAAG;AACrD,eAAO;AAAA,UACL,IAAI,OAAO,WAAW;AAAA,UACtB,aAAa,SAAS;AAAA,UACtB,OAAO,UACH,QAAQ,eAAe,KAAK,QAAQ,QAAQ,MAC5C;AAAA,UACJ,OAAO,iBAAiB,MAAM,CAAC,OAAO,cAAc;AAClD,gBAAI,UAAU,KAAK,SAAS,GAAG,GAAG;AAChC,oBAAM,QAAQ,UAAU,WAAW,UAAU;AAC7C,qBAAO;AAAA,gBACL,IAAI,UAAU;AAAA,gBACd;AAAA,gBACA,KAAK,GAAG,UAAU,GAAG,CAAC,IAAI,UAAU,UAAU,WAAW,CAAC;AAAA,cAC5D;AAAA,YACF;AACA,mBAAO;AAAA,UACT,CAAC,EAAE,OAAO,kBAAkB;AAAA,QAC9B;AAAA,MACF,CAAC;AAAA,IACH,CAAC;AAAA,EACH;AACA,SAAO;AACT;",
4
+ "sourcesContent": ["import { camelcase } from 'stringcase';\n\nimport { notNullOrUndefined } from '@sdk-it/core/file-system.js';\n\nimport { forEachOperation } from './for-each-operation.js';\nimport type { IR } from './types.js';\n\nexport type ChildNavItem = {\n id: string;\n title: string;\n url: string;\n};\n\nexport type NavItem = {\n id: string;\n title: string;\n description?: string;\n url?: string;\n items?: ChildNavItem[];\n content?: string; // Markdown content\n};\n\nexport type CategoryItem = {\n id: string;\n category: string;\n description?: string;\n items: NavItem[];\n};\n\nexport type SidebarData = CategoryItem[];\n\nexport interface TagGroups {\n name: string;\n tags: string[];\n}\n\nexport function toSidebar(spec: IR) {\n const sidebar: SidebarData = [...spec['x-docs']];\n for (const tagGroup of spec['x-tagGroups']) {\n sidebar.push({\n id: camelcase(tagGroup.name),\n category: tagGroup.name,\n items: tagGroup.tags.map((tag) => {\n const tagSpec = spec.tags?.find((t) => t.name === tag);\n return {\n id: crypto.randomUUID(),\n description: tagSpec?.description,\n title: tagSpec\n ? tagSpec['x-displayName'] || tagSpec.name || tag\n : tag,\n items: forEachOperation(spec, (entry, operation) => {\n if (operation.tags.includes(tag)) {\n const title = operation.summary || operation.operationId;\n return {\n id: operation.operationId,\n title,\n url: `${camelcase(tag)}/${camelcase(operation.operationId)}`,\n };\n }\n return null;\n }).filter(notNullOrUndefined),\n };\n }),\n });\n }\n return sidebar;\n}\n"],
5
+ "mappings": "AAAA,SAAS,iBAAiB;AAE1B,SAAS,0BAA0B;AAEnC,SAAS,wBAAwB;AAgC1B,SAAS,UAAU,MAAU;AAClC,QAAM,UAAuB,CAAC,GAAG,KAAK,QAAQ,CAAC;AAC/C,aAAW,YAAY,KAAK,aAAa,GAAG;AAC1C,YAAQ,KAAK;AAAA,MACX,IAAI,UAAU,SAAS,IAAI;AAAA,MAC3B,UAAU,SAAS;AAAA,MACnB,OAAO,SAAS,KAAK,IAAI,CAAC,QAAQ;AAChC,cAAM,UAAU,KAAK,MAAM,KAAK,CAAC,MAAM,EAAE,SAAS,GAAG;AACrD,eAAO;AAAA,UACL,IAAI,OAAO,WAAW;AAAA,UACtB,aAAa,SAAS;AAAA,UACtB,OAAO,UACH,QAAQ,eAAe,KAAK,QAAQ,QAAQ,MAC5C;AAAA,UACJ,OAAO,iBAAiB,MAAM,CAAC,OAAO,cAAc;AAClD,gBAAI,UAAU,KAAK,SAAS,GAAG,GAAG;AAChC,oBAAM,QAAQ,UAAU,WAAW,UAAU;AAC7C,qBAAO;AAAA,gBACL,IAAI,UAAU;AAAA,gBACd;AAAA,gBACA,KAAK,GAAG,UAAU,GAAG,CAAC,IAAI,UAAU,UAAU,WAAW,CAAC;AAAA,cAC5D;AAAA,YACF;AACA,mBAAO;AAAA,UACT,CAAC,EAAE,OAAO,kBAAkB;AAAA,QAC9B;AAAA,MACF,CAAC;AAAA,IACH,CAAC;AAAA,EACH;AACA,SAAO;AACT;",
6
6
  "names": []
7
7
  }
@@ -1,5 +1,6 @@
1
1
  import type { MediaTypeObject, OperationObject, ParameterObject, PathsObject, ReferenceObject, RequestBodyObject, ResponseObject, SchemaObject, ServerObject, TagObject } from 'openapi3-ts/oas31';
2
2
  import type { OpenAPIComponentsObject, OpenAPIDocument, OpenAPISecuritySchemeObject } from '@sdk-it/core';
3
+ import type { SdkDoc } from './overview-docs/types.js';
3
4
  import type { PaginationGuess } from './pagination/guess-pagination.js';
4
5
  import type { SidebarData, TagGroups } from './sidebar.js';
5
6
  export type IR = Omit<OpenAPIDocument, 'components' | 'paths' | 'servers' | 'tags'> & {
@@ -9,6 +10,7 @@ export type IR = Omit<OpenAPIDocument, 'components' | 'paths' | 'servers' | 'tag
9
10
  configuration: string;
10
11
  };
11
12
  'x-docs': SidebarData;
13
+ 'x-sdks': SdkDoc[];
12
14
  'x-tagGroups': TagGroups[];
13
15
  components: Omit<OpenAPIComponentsObject, 'schemas' | 'securitySchemes'> & {
14
16
  schemas: Record<string, SchemaObject | ReferenceObject>;
@@ -1 +1 @@
1
- {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../src/lib/types.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EACV,eAAe,EACf,eAAe,EACf,eAAe,EACf,WAAW,EACX,eAAe,EACf,iBAAiB,EACjB,cAAc,EACd,YAAY,EACZ,YAAY,EACZ,SAAS,EACV,MAAM,mBAAmB,CAAC;AAE3B,OAAO,KAAK,EACV,uBAAuB,EACvB,eAAe,EACf,2BAA2B,EAC5B,MAAM,cAAc,CAAC;AAEtB,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,kCAAkC,CAAC;AACxE,OAAO,KAAK,EAAE,WAAW,EAAE,SAAS,EAAE,MAAM,cAAc,CAAC;AAE3D,MAAM,MAAM,EAAE,GAAG,IAAI,CACnB,eAAe,EACf,YAAY,GAAG,OAAO,GAAG,SAAS,GAAG,MAAM,CAC5C,GAAG;IACF,OAAO,EAAE,YAAY,EAAE,CAAC;IACxB,kBAAkB,CAAC,EAAE;QACnB,OAAO,EAAE,MAAM,EAAE,CAAC;QAClB,aAAa,EAAE,MAAM,CAAC;KACvB,CAAC;IACF,QAAQ,EAAE,WAAW,CAAC;IACtB,aAAa,EAAE,SAAS,EAAE,CAAC;IAC3B,UAAU,EAAE,IAAI,CAAC,uBAAuB,EAAE,SAAS,GAAG,iBAAiB,CAAC,GAAG;QACzE,OAAO,EAAE,MAAM,CAAC,MAAM,EAAE,YAAY,GAAG,eAAe,CAAC,CAAC;QACxD,eAAe,EAAE,MAAM,CAAC,MAAM,EAAE,2BAA2B,CAAC,CAAC;KAC9D,CAAC;IACF,KAAK,EAAE,WAAW,CAAC;IACnB,IAAI,EAAE,SAAS,EAAE,CAAC;CACnB,CAAC;AAEF,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,GAAG,MAAM,CAC7E,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;IACd,UAAU,EAAE,MAAM,CAAC;CACpB,CAAC"}
1
+ {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../src/lib/types.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EACV,eAAe,EACf,eAAe,EACf,eAAe,EACf,WAAW,EACX,eAAe,EACf,iBAAiB,EACjB,cAAc,EACd,YAAY,EACZ,YAAY,EACZ,SAAS,EACV,MAAM,mBAAmB,CAAC;AAE3B,OAAO,KAAK,EACV,uBAAuB,EACvB,eAAe,EACf,2BAA2B,EAC5B,MAAM,cAAc,CAAC;AAEtB,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,0BAA0B,CAAC;AACvD,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,kCAAkC,CAAC;AACxE,OAAO,KAAK,EAAE,WAAW,EAAE,SAAS,EAAE,MAAM,cAAc,CAAC;AAE3D,MAAM,MAAM,EAAE,GAAG,IAAI,CACnB,eAAe,EACf,YAAY,GAAG,OAAO,GAAG,SAAS,GAAG,MAAM,CAC5C,GAAG;IACF,OAAO,EAAE,YAAY,EAAE,CAAC;IACxB,kBAAkB,CAAC,EAAE;QACnB,OAAO,EAAE,MAAM,EAAE,CAAC;QAClB,aAAa,EAAE,MAAM,CAAC;KACvB,CAAC;IACF,QAAQ,EAAE,WAAW,CAAC;IACtB,QAAQ,EAAE,MAAM,EAAE,CAAC;IACnB,aAAa,EAAE,SAAS,EAAE,CAAC;IAC3B,UAAU,EAAE,IAAI,CAAC,uBAAuB,EAAE,SAAS,GAAG,iBAAiB,CAAC,GAAG;QACzE,OAAO,EAAE,MAAM,CAAC,MAAM,EAAE,YAAY,GAAG,eAAe,CAAC,CAAC;QACxD,eAAe,EAAE,MAAM,CAAC,MAAM,EAAE,2BAA2B,CAAC,CAAC;KAC9D,CAAC;IACF,KAAK,EAAE,WAAW,CAAC;IACnB,IAAI,EAAE,SAAS,EAAE,CAAC;CACnB,CAAC;AAEF,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,GAAG,MAAM,CAC7E,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;IACd,UAAU,EAAE,MAAM,CAAC;CACpB,CAAC"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@sdk-it/spec",
3
- "version": "0.46.4",
3
+ "version": "0.46.5",
4
4
  "type": "module",
5
5
  "main": "./dist/index.js",
6
6
  "module": "./dist/index.js",
@@ -27,7 +27,7 @@
27
27
  "!**/*.test.*"
28
28
  ],
29
29
  "dependencies": {
30
- "@sdk-it/core": "0.46.4",
30
+ "@sdk-it/core": "0.46.5",
31
31
  "openapi3-ts": "4.5.0",
32
32
  "pluralize": "^8.0.0",
33
33
  "stringcase": "^4.3.1",
@@ -1,51 +0,0 @@
1
- export declare const docTemplates: {
2
- readonly servers: {
3
- readonly sectionTitle: "API Server";
4
- readonly description: "The following {count} {isAre} available for this API:";
5
- };
6
- readonly authMethods: {
7
- readonly sectionTitle: "Available Authentication Method";
8
- readonly introText: "This API provides secure access through {countText} authentication {method}. Below you'll find details about {articleCount} available authentication {scheme} and how to use {pronoun}.";
9
- readonly noAuthText: "This API does not require authentication.";
10
- };
11
- readonly apiClients: {
12
- readonly sectionTitle: "Official API Client";
13
- readonly description: "{apiTitle} provides official client SDK{sdkPlural} for {languageText}. We recommend using {clientText} to interact with all stable endpoints. You can find {pronoun} here:";
14
- };
15
- readonly needHelp: {
16
- readonly sectionTitle: "Need Help?";
17
- };
18
- };
19
- interface CountTextOptions {
20
- count: number;
21
- word: string;
22
- includeCount?: boolean;
23
- }
24
- export declare function getCountText(options: CountTextOptions): string;
25
- export declare function getPronoun(count: number, type?: 'subject' | 'object'): string;
26
- export declare function getArticle(count: number, word: string): string;
27
- export declare function getIsAre(count: number): string;
28
- export declare function getThisThese(count: number): string;
29
- export declare function processTemplate(template: string, replacements: Record<string, string | number>): string;
30
- export declare function getServerText(count: number): {
31
- title: string;
32
- description: string;
33
- };
34
- export declare function getAuthMethodText(count: number): {
35
- title: string;
36
- intro: string;
37
- };
38
- export declare function getApiClientText(count: number, apiTitle: string): {
39
- title: string;
40
- description: string;
41
- };
42
- export declare function getAuthText(count: number): {
43
- title: string;
44
- intro: string;
45
- };
46
- export declare function getErrorsApiClientText(count: number, apiTitle: string, sdkList: string[]): {
47
- title: string;
48
- description: string;
49
- };
50
- export {};
51
- //# sourceMappingURL=doc-templates.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"doc-templates.d.ts","sourceRoot":"","sources":["../../../src/lib/overview-docs/doc-templates.ts"],"names":[],"mappings":"AAEA,eAAO,MAAM,YAAY;;;;;;;;;;;;;;;;;CAmBf,CAAC;AAEX,UAAU,gBAAgB;IACxB,KAAK,EAAE,MAAM,CAAC;IACd,IAAI,EAAE,MAAM,CAAC;IACb,YAAY,CAAC,EAAE,OAAO,CAAC;CACxB;AAED,wBAAgB,YAAY,CAAC,OAAO,EAAE,gBAAgB,GAAG,MAAM,CAK9D;AAED,wBAAgB,UAAU,CACxB,KAAK,EAAE,MAAM,EACb,IAAI,GAAE,SAAS,GAAG,QAAmB,GACpC,MAAM,CAKR;AAED,wBAAgB,UAAU,CAAC,KAAK,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,GAAG,MAAM,CAM9D;AAED,wBAAgB,QAAQ,CAAC,KAAK,EAAE,MAAM,GAAG,MAAM,CAE9C;AAED,wBAAgB,YAAY,CAAC,KAAK,EAAE,MAAM,GAAG,MAAM,CAElD;AAED,wBAAgB,eAAe,CAC7B,QAAQ,EAAE,MAAM,EAChB,YAAY,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,GAAG,MAAM,CAAC,GAC5C,MAAM,CAKR;AAED,wBAAgB,aAAa,CAAC,KAAK,EAAE,MAAM,GAAG;IAC5C,KAAK,EAAE,MAAM,CAAC;IACd,WAAW,EAAE,MAAM,CAAC;CACrB,CAQA;AAED,wBAAgB,iBAAiB,CAAC,KAAK,EAAE,MAAM,GAAG;IAChD,KAAK,EAAE,MAAM,CAAC;IACd,KAAK,EAAE,MAAM,CAAC;CACf,CAeA;AAED,wBAAgB,gBAAgB,CAC9B,KAAK,EAAE,MAAM,EACb,QAAQ,EAAE,MAAM,GACf;IACD,KAAK,EAAE,MAAM,CAAC;IACd,WAAW,EAAE,MAAM,CAAC;CACrB,CAkBA;AAED,wBAAgB,WAAW,CAAC,KAAK,EAAE,MAAM,GAAG;IAC1C,KAAK,EAAE,MAAM,CAAC;IACd,KAAK,EAAE,MAAM,CAAC;CACf,CAeA;AAED,wBAAgB,sBAAsB,CACpC,KAAK,EAAE,MAAM,EACb,QAAQ,EAAE,MAAM,EAChB,OAAO,EAAE,MAAM,EAAE,GAChB;IACD,KAAK,EAAE,MAAM,CAAC;IACd,WAAW,EAAE,MAAM,CAAC;CACrB,CAWA"}
@@ -1,123 +0,0 @@
1
- import pluralize from "pluralize";
2
- const docTemplates = {
3
- servers: {
4
- sectionTitle: "API Server",
5
- description: "The following {count} {isAre} available for this API:"
6
- },
7
- authMethods: {
8
- sectionTitle: "Available Authentication Method",
9
- introText: "This API provides secure access through {countText} authentication {method}. Below you'll find details about {articleCount} available authentication {scheme} and how to use {pronoun}.",
10
- noAuthText: "This API does not require authentication."
11
- },
12
- apiClients: {
13
- sectionTitle: "Official API Client",
14
- description: "{apiTitle} provides official client SDK{sdkPlural} for {languageText}. We recommend using {clientText} to interact with all stable endpoints. You can find {pronoun} here:"
15
- },
16
- needHelp: {
17
- sectionTitle: "Need Help?"
18
- }
19
- };
20
- function getCountText(options) {
21
- const { count, word, includeCount = false } = options;
22
- const pluralizedWord = count === 1 ? pluralize.singular(word) : pluralize.plural(word);
23
- return includeCount ? `${count} ${pluralizedWord}` : pluralizedWord;
24
- }
25
- function getPronoun(count, type = "object") {
26
- if (type === "subject") {
27
- return count === 1 ? "it" : "they";
28
- }
29
- return count === 1 ? "it" : "them";
30
- }
31
- function getArticle(count, word) {
32
- if (count === 1) {
33
- const firstLetter = word.charAt(0).toLowerCase();
34
- return ["a", "e", "i", "o", "u"].includes(firstLetter) ? "an" : "a";
35
- }
36
- return "";
37
- }
38
- function getIsAre(count) {
39
- return count === 1 ? "is" : "are";
40
- }
41
- function getThisThese(count) {
42
- return count === 1 ? "this" : "these";
43
- }
44
- function processTemplate(template, replacements) {
45
- return template.replace(/\{([^}]+)\}/g, (match, key) => {
46
- const value = replacements[key];
47
- return value !== void 0 ? String(value) : match;
48
- });
49
- }
50
- function getServerText(count) {
51
- return {
52
- title: `## ${getCountText({ count, word: "server", includeCount: false })}`,
53
- description: processTemplate(docTemplates.servers.description, {
54
- count: getCountText({ count, word: "server", includeCount: true }),
55
- isAre: getIsAre(count)
56
- })
57
- };
58
- }
59
- function getAuthMethodText(count) {
60
- const countText = count === 1 ? getArticle(count, "authentication method") : "various";
61
- const articleCount = count === 1 ? "the" : "each";
62
- return {
63
- title: `## ${getCountText({ count, word: docTemplates.authMethods.sectionTitle })}`,
64
- intro: processTemplate(docTemplates.authMethods.introText, {
65
- countText,
66
- method: getCountText({ count, word: "method" }),
67
- articleCount,
68
- scheme: getCountText({ count, word: "scheme" }),
69
- pronoun: getPronoun(count)
70
- })
71
- };
72
- }
73
- function getApiClientText(count, apiTitle) {
74
- const languageText = count === 1 ? "a programming language" : "multiple programming languages";
75
- const clientText = count === 1 ? getThisThese(count) + " client" : getThisThese(count) + " clients";
76
- return {
77
- title: `## ${getCountText({ count, word: docTemplates.apiClients.sectionTitle })}`,
78
- description: processTemplate(docTemplates.apiClients.description, {
79
- apiTitle,
80
- sdkPlural: count === 1 ? "" : "s",
81
- languageText,
82
- clientText,
83
- pronoun: getPronoun(count)
84
- })
85
- };
86
- }
87
- function getAuthText(count) {
88
- const countText = count === 1 ? getArticle(count, "authentication method") : "various";
89
- const articleCount = count === 1 ? "the" : "each";
90
- return {
91
- title: `## ${getCountText({ count, word: docTemplates.authMethods.sectionTitle })}`,
92
- intro: processTemplate(docTemplates.authMethods.introText, {
93
- countText,
94
- method: getCountText({ count, word: "method" }),
95
- articleCount,
96
- scheme: getCountText({ count, word: "scheme" }),
97
- pronoun: getPronoun(count)
98
- })
99
- };
100
- }
101
- function getErrorsApiClientText(count, apiTitle, sdkList) {
102
- const languageText = count === 1 ? sdkList[0] : sdkList.join(", ");
103
- const clientText = count === 1 ? getThisThese(count) + " client" : getThisThese(count) + " clients";
104
- return {
105
- title: `## ${getCountText({ count, word: docTemplates.apiClients.sectionTitle })}`,
106
- description: `${apiTitle} maintains official API ${getCountText({ count, word: "client" })}${count > 0 ? ` for ${languageText}` : ""}. We recommend using ${clientText} to interact with all stable endpoints. You can find ${getPronoun(count)} here:`
107
- };
108
- }
109
- export {
110
- docTemplates,
111
- getApiClientText,
112
- getArticle,
113
- getAuthMethodText,
114
- getAuthText,
115
- getCountText,
116
- getErrorsApiClientText,
117
- getIsAre,
118
- getPronoun,
119
- getServerText,
120
- getThisThese,
121
- processTemplate
122
- };
123
- //# sourceMappingURL=doc-templates.js.map
@@ -1,7 +0,0 @@
1
- {
2
- "version": 3,
3
- "sources": ["../../../src/lib/overview-docs/doc-templates.ts"],
4
- "sourcesContent": ["import pluralize from 'pluralize';\n\nexport const docTemplates = {\n servers: {\n sectionTitle: 'API Server',\n description: 'The following {count} {isAre} available for this API:',\n },\n authMethods: {\n sectionTitle: 'Available Authentication Method',\n introText:\n \"This API provides secure access through {countText} authentication {method}. Below you'll find details about {articleCount} available authentication {scheme} and how to use {pronoun}.\",\n noAuthText: 'This API does not require authentication.',\n },\n apiClients: {\n sectionTitle: 'Official API Client',\n description:\n '{apiTitle} provides official client SDK{sdkPlural} for {languageText}. We recommend using {clientText} to interact with all stable endpoints. You can find {pronoun} here:',\n },\n needHelp: {\n sectionTitle: 'Need Help?',\n },\n} as const;\n\ninterface CountTextOptions {\n count: number;\n word: string;\n includeCount?: boolean;\n}\n\nexport function getCountText(options: CountTextOptions): string {\n const { count, word, includeCount = false } = options;\n const pluralizedWord =\n count === 1 ? pluralize.singular(word) : pluralize.plural(word);\n return includeCount ? `${count} ${pluralizedWord}` : pluralizedWord;\n}\n\nexport function getPronoun(\n count: number,\n type: 'subject' | 'object' = 'object',\n): string {\n if (type === 'subject') {\n return count === 1 ? 'it' : 'they';\n }\n return count === 1 ? 'it' : 'them';\n}\n\nexport function getArticle(count: number, word: string): string {\n if (count === 1) {\n const firstLetter = word.charAt(0).toLowerCase();\n return ['a', 'e', 'i', 'o', 'u'].includes(firstLetter) ? 'an' : 'a';\n }\n return '';\n}\n\nexport function getIsAre(count: number): string {\n return count === 1 ? 'is' : 'are';\n}\n\nexport function getThisThese(count: number): string {\n return count === 1 ? 'this' : 'these';\n}\n\nexport function processTemplate(\n template: string,\n replacements: Record<string, string | number>,\n): string {\n return template.replace(/\\{([^}]+)\\}/g, (match, key) => {\n const value = replacements[key];\n return value !== undefined ? String(value) : match;\n });\n}\n\nexport function getServerText(count: number): {\n title: string;\n description: string;\n} {\n return {\n title: `## ${getCountText({ count, word: 'server', includeCount: false })}`,\n description: processTemplate(docTemplates.servers.description, {\n count: getCountText({ count, word: 'server', includeCount: true }),\n isAre: getIsAre(count),\n }),\n };\n}\n\nexport function getAuthMethodText(count: number): {\n title: string;\n intro: string;\n} {\n const countText =\n count === 1 ? getArticle(count, 'authentication method') : 'various';\n const articleCount = count === 1 ? 'the' : 'each';\n\n return {\n title: `## ${getCountText({ count, word: docTemplates.authMethods.sectionTitle })}`,\n intro: processTemplate(docTemplates.authMethods.introText, {\n countText,\n method: getCountText({ count, word: 'method' }),\n articleCount,\n scheme: getCountText({ count, word: 'scheme' }),\n pronoun: getPronoun(count),\n }),\n };\n}\n\nexport function getApiClientText(\n count: number,\n apiTitle: string,\n): {\n title: string;\n description: string;\n} {\n const languageText =\n count === 1 ? 'a programming language' : 'multiple programming languages';\n const clientText =\n count === 1\n ? getThisThese(count) + ' client'\n : getThisThese(count) + ' clients';\n\n return {\n title: `## ${getCountText({ count, word: docTemplates.apiClients.sectionTitle })}`,\n description: processTemplate(docTemplates.apiClients.description, {\n apiTitle,\n sdkPlural: count === 1 ? '' : 's',\n languageText,\n clientText,\n pronoun: getPronoun(count),\n }),\n };\n}\n\nexport function getAuthText(count: number): {\n title: string;\n intro: string;\n} {\n const countText =\n count === 1 ? getArticle(count, 'authentication method') : 'various';\n const articleCount = count === 1 ? 'the' : 'each';\n\n return {\n title: `## ${getCountText({ count, word: docTemplates.authMethods.sectionTitle })}`,\n intro: processTemplate(docTemplates.authMethods.introText, {\n countText,\n method: getCountText({ count, word: 'method' }),\n articleCount,\n scheme: getCountText({ count, word: 'scheme' }),\n pronoun: getPronoun(count),\n }),\n };\n}\n\nexport function getErrorsApiClientText(\n count: number,\n apiTitle: string,\n sdkList: string[],\n): {\n title: string;\n description: string;\n} {\n const languageText = count === 1 ? sdkList[0] : sdkList.join(', ');\n const clientText =\n count === 1\n ? getThisThese(count) + ' client'\n : getThisThese(count) + ' clients';\n\n return {\n title: `## ${getCountText({ count, word: docTemplates.apiClients.sectionTitle })}`,\n description: `${apiTitle} maintains official API ${getCountText({ count, word: 'client' })}${count > 0 ? ` for ${languageText}` : ''}. We recommend using ${clientText} to interact with all stable endpoints. You can find ${getPronoun(count)} here:`,\n };\n}\n"],
5
- "mappings": "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",
6
- "names": []
7
- }
@@ -1,4 +0,0 @@
1
- import type { NavItem } from '../sidebar.js';
2
- import type { IR } from '../types.js';
3
- export declare function generateIntroOverview(spec: IR, availablesdks: string[]): NavItem;
4
- //# sourceMappingURL=overview-intro.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"overview-intro.d.ts","sourceRoot":"","sources":["../../../src/lib/overview-docs/overview-intro.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,eAAe,CAAC;AAC7C,OAAO,KAAK,EAAE,EAAE,EAAE,MAAM,aAAa,CAAC;AAOtC,wBAAgB,qBAAqB,CACnC,IAAI,EAAE,EAAE,EACR,aAAa,EAAE,MAAM,EAAE,GACtB,OAAO,CA2FT"}
@@ -1,82 +0,0 @@
1
- import {
2
- getClientIntroText,
3
- getTextByCount,
4
- presetDocs
5
- } from "./doc-text-utils.js";
6
- function generateIntroOverview(spec, availablesdks) {
7
- const info = spec.info;
8
- const markdown = [];
9
- if (spec.info.title) {
10
- markdown.push(`# ${spec.info.title || "API Reference"}
11
- `);
12
- }
13
- if (spec.info.description) {
14
- markdown.push(`${spec.info.description}
15
- `);
16
- }
17
- if (spec.info.version) {
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}
27
- `);
28
- }
29
- if (spec.servers && spec.servers.length > 0) {
30
- const serverCount = spec.servers.length;
31
- markdown.push(
32
- `## ${getTextByCount(serverCount, presetDocs.server.section)}`
33
- );
34
- markdown.push(getTextByCount(serverCount, presetDocs.server.description));
35
- markdown.push("");
36
- for (const server of spec.servers) {
37
- let serverLine = `- **${server.url}**`;
38
- if (server.description) {
39
- serverLine += ` - ${server.description}`;
40
- }
41
- markdown.push(serverLine);
42
- }
43
- markdown.push("");
44
- }
45
- const sdkCount = availablesdks.length;
46
- markdown.push(`## ${getTextByCount(sdkCount, presetDocs.client.section)}`);
47
- markdown.push(getClientIntroText(info.title || "This API", sdkCount));
48
- for (const link of availablesdks) {
49
- const sdkName = link.replace("/", "").replace("-sdk", "").toUpperCase();
50
- markdown.push(`- [${sdkName} SDK](${link})`);
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
- }
71
- return {
72
- id: "generated-introduction",
73
- title: "Introduction",
74
- url: "/introduction",
75
- description: "API overview and getting started guide",
76
- content: markdown.join("\n\n")
77
- };
78
- }
79
- export {
80
- generateIntroOverview
81
- };
82
- //# sourceMappingURL=overview-intro.js.map
@@ -1,7 +0,0 @@
1
- {
2
- "version": 3,
3
- "sources": ["../../../src/lib/overview-docs/overview-intro.ts"],
4
- "sourcesContent": ["import type { NavItem } from '../sidebar.js';\nimport type { IR } from '../types.js';\nimport {\n getClientIntroText,\n getTextByCount,\n presetDocs,\n} from './doc-text-utils.js';\n\nexport function generateIntroOverview(\n spec: IR,\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
- "names": []
7
- }