@sdk-it/spec 0.25.0 → 0.27.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (78) hide show
  1. package/dist/index.d.ts +4 -0
  2. package/dist/index.d.ts.map +1 -1
  3. package/dist/index.js +4 -0
  4. package/dist/index.js.map +2 -2
  5. package/dist/lib/create-operation.d.ts +28 -0
  6. package/dist/lib/create-operation.d.ts.map +1 -0
  7. package/dist/lib/create-operation.js +62 -0
  8. package/dist/lib/create-operation.js.map +7 -0
  9. package/dist/lib/for-each-operation.d.ts.map +1 -1
  10. package/dist/lib/for-each-operation.js +0 -3
  11. package/dist/lib/for-each-operation.js.map +2 -2
  12. package/dist/lib/guess/guess-resource.d.ts +7 -0
  13. package/dist/lib/guess/guess-resource.d.ts.map +1 -0
  14. package/dist/lib/guess/guess-resource.js +76 -0
  15. package/dist/lib/guess/guess-resource.js.map +7 -0
  16. package/dist/lib/metadata.test.js +359 -0
  17. package/dist/lib/metadata.test.js.map +7 -0
  18. package/dist/lib/operation.d.ts +1 -32
  19. package/dist/lib/operation.d.ts.map +1 -1
  20. package/dist/lib/operation.js +33 -313
  21. package/dist/lib/operation.js.map +2 -2
  22. package/dist/lib/options.d.ts +43 -2
  23. package/dist/lib/options.d.ts.map +1 -1
  24. package/dist/lib/options.js +31 -8
  25. package/dist/lib/options.js.map +2 -2
  26. package/dist/lib/overview-docs/overview-auth.d.ts +4 -0
  27. package/dist/lib/overview-docs/overview-auth.d.ts.map +1 -0
  28. package/dist/lib/overview-docs/overview-auth.js +173 -0
  29. package/dist/lib/overview-docs/overview-auth.js.map +7 -0
  30. package/dist/lib/overview-docs/overview-docs.d.ts +4 -0
  31. package/dist/lib/overview-docs/overview-docs.d.ts.map +1 -0
  32. package/dist/lib/overview-docs/overview-docs.js +20 -0
  33. package/dist/lib/overview-docs/overview-docs.js.map +7 -0
  34. package/dist/lib/overview-docs/overview-errors.d.ts +4 -0
  35. package/dist/lib/overview-docs/overview-errors.d.ts.map +1 -0
  36. package/dist/lib/overview-docs/overview-errors.js +137 -0
  37. package/dist/lib/overview-docs/overview-errors.js.map +7 -0
  38. package/dist/lib/overview-docs/overview-intro.d.ts +4 -0
  39. package/dist/lib/overview-docs/overview-intro.d.ts.map +1 -0
  40. package/dist/lib/overview-docs/overview-intro.js +77 -0
  41. package/dist/lib/overview-docs/overview-intro.js.map +7 -0
  42. package/dist/lib/overview-docs/overview-pagination.d.ts +4 -0
  43. package/dist/lib/overview-docs/overview-pagination.d.ts.map +1 -0
  44. package/dist/lib/overview-docs/overview-pagination.js +80 -0
  45. package/dist/lib/overview-docs/overview-pagination.js.map +7 -0
  46. package/dist/lib/overview-docs/overview-quick-reference.d.ts +4 -0
  47. package/dist/lib/overview-docs/overview-quick-reference.d.ts.map +1 -0
  48. package/dist/lib/overview-docs/overview-sdk-examples.d.ts +4 -0
  49. package/dist/lib/overview-docs/overview-sdk-examples.d.ts.map +1 -0
  50. package/dist/lib/overview-docs/overview-usage.d.ts +4 -0
  51. package/dist/lib/overview-docs/overview-usage.d.ts.map +1 -0
  52. package/dist/lib/pagination/guess-pagination.d.ts +50 -0
  53. package/dist/lib/pagination/guess-pagination.d.ts.map +1 -0
  54. package/dist/lib/pagination/guess-pagination.js +222 -0
  55. package/dist/lib/pagination/guess-pagination.js.map +7 -0
  56. package/dist/lib/pagination/pagination.d.ts +2 -49
  57. package/dist/lib/pagination/pagination.d.ts.map +1 -1
  58. package/dist/lib/pagination/pagination.js +43 -209
  59. package/dist/lib/pagination/pagination.js.map +2 -2
  60. package/dist/lib/pagination/pagination.test.js +2 -1
  61. package/dist/lib/pagination/pagination.test.js.map +2 -2
  62. package/dist/lib/sidebar.d.ts +4 -23
  63. package/dist/lib/sidebar.d.ts.map +1 -1
  64. package/dist/lib/sidebar.js +22 -65
  65. package/dist/lib/sidebar.js.map +3 -3
  66. package/dist/lib/tune-request-body.d.ts +5 -0
  67. package/dist/lib/tune-request-body.d.ts.map +1 -0
  68. package/dist/lib/tune-request-body.js +91 -0
  69. package/dist/lib/tune-request-body.js.map +7 -0
  70. package/dist/lib/tune-response.d.ts +5 -0
  71. package/dist/lib/tune-response.d.ts.map +1 -0
  72. package/dist/lib/tune-response.js +102 -0
  73. package/dist/lib/tune-response.js.map +7 -0
  74. package/dist/lib/types.d.ts +9 -4
  75. package/dist/lib/types.d.ts.map +1 -1
  76. package/package.json +2 -2
  77. package/dist/lib/overview-docs.js +0 -276
  78. package/dist/lib/overview-docs.js.map +0 -7
package/dist/index.d.ts CHANGED
@@ -1,3 +1,4 @@
1
+ export * from './lib/create-operation.js';
1
2
  export * from './lib/find-polymorphic-varients.js';
2
3
  export * from './lib/find-unique-schema-name.js';
3
4
  export * from './lib/for-each-operation.js';
@@ -11,10 +12,13 @@ export * from './lib/loaders/remote-loader.js';
11
12
  export * from './lib/metadata.js';
12
13
  export * from './lib/operation.js';
13
14
  export * from './lib/options.js';
15
+ export * from './lib/overview-docs/overview-errors.js';
14
16
  export * from './lib/reserved-keywords.js';
15
17
  export * from './lib/security.js';
16
18
  export * from './lib/sidebar.js';
17
19
  export * from './lib/tag.js';
20
+ export * from './lib/tune-request-body.js';
21
+ export * from './lib/tune-response.js';
18
22
  export * from './lib/tune.js';
19
23
  export * from './lib/types.js';
20
24
  //# sourceMappingURL=index.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,cAAc,oCAAoC,CAAC;AACnD,cAAc,kCAAkC,CAAC;AACjD,cAAc,6BAA6B,CAAC;AAC5C,cAAc,sBAAsB,CAAC;AACrC,cAAc,wBAAwB,CAAC;AACvC,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,oBAAoB,CAAC;AACnC,cAAc,kBAAkB,CAAC;AACjC,cAAc,4BAA4B,CAAC;AAC3C,cAAc,mBAAmB,CAAC;AAClC,cAAc,kBAAkB,CAAC;AACjC,cAAc,cAAc,CAAC;AAC7B,cAAc,eAAe,CAAC;AAC9B,cAAc,gBAAgB,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,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,oBAAoB,CAAC;AACnC,cAAc,kBAAkB,CAAC;AACjC,cAAc,wCAAwC,CAAC;AACvD,cAAc,4BAA4B,CAAC;AAC3C,cAAc,mBAAmB,CAAC;AAClC,cAAc,kBAAkB,CAAC;AACjC,cAAc,cAAc,CAAC;AAC7B,cAAc,4BAA4B,CAAC;AAC3C,cAAc,wBAAwB,CAAC;AACvC,cAAc,eAAe,CAAC;AAC9B,cAAc,gBAAgB,CAAC"}
package/dist/index.js CHANGED
@@ -1,3 +1,4 @@
1
+ export * from "./lib/create-operation.js";
1
2
  export * from "./lib/find-polymorphic-varients.js";
2
3
  export * from "./lib/find-unique-schema-name.js";
3
4
  export * from "./lib/for-each-operation.js";
@@ -11,10 +12,13 @@ export * from "./lib/loaders/remote-loader.js";
11
12
  export * from "./lib/metadata.js";
12
13
  export * from "./lib/operation.js";
13
14
  export * from "./lib/options.js";
15
+ export * from "./lib/overview-docs/overview-errors.js";
14
16
  export * from "./lib/reserved-keywords.js";
15
17
  export * from "./lib/security.js";
16
18
  export * from "./lib/sidebar.js";
17
19
  export * from "./lib/tag.js";
20
+ export * from "./lib/tune-request-body.js";
21
+ export * from "./lib/tune-response.js";
18
22
  export * from "./lib/tune.js";
19
23
  export * from "./lib/types.js";
20
24
  //# sourceMappingURL=index.js.map
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/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/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/operation.js';\nexport * from './lib/options.js';\nexport * from './lib/reserved-keywords.js';\nexport * from './lib/security.js';\nexport * from './lib/sidebar.js';\nexport * from './lib/tag.js';\nexport * from './lib/tune.js';\nexport * from './lib/types.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;",
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/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/operation.js';\nexport * from './lib/options.js';\nexport * from './lib/overview-docs/overview-errors.js';\nexport * from './lib/reserved-keywords.js';\nexport * from './lib/security.js';\nexport * from './lib/sidebar.js';\nexport * from './lib/tag.js';\nexport * from './lib/tune-request-body.js';\nexport * from './lib/tune-response.js';\nexport * from './lib/tune.js';\nexport * from './lib/types.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
  }
@@ -0,0 +1,28 @@
1
+ import type { ReferenceObject, SchemaObject } from 'openapi3-ts/oas31';
2
+ import type { TunedOperationObject } from './types.js';
3
+ export declare function createOperation(options: {
4
+ name: string;
5
+ group: string;
6
+ security?: string[];
7
+ parameters?: {
8
+ query?: Record<string, {
9
+ schema: SchemaObject;
10
+ required?: boolean;
11
+ }>;
12
+ path?: Record<string, {
13
+ schema: SchemaObject;
14
+ required?: boolean;
15
+ }>;
16
+ header?: Record<string, {
17
+ schema: SchemaObject;
18
+ required?: boolean;
19
+ }>;
20
+ cookie?: Record<string, {
21
+ schema: SchemaObject;
22
+ required?: boolean;
23
+ }>;
24
+ };
25
+ response: Record<string, SchemaObject | Record<string, SchemaObject>>;
26
+ request?: Record<string, ReferenceObject>;
27
+ }): TunedOperationObject;
28
+ //# sourceMappingURL=create-operation.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"create-operation.d.ts","sourceRoot":"","sources":["../../src/lib/create-operation.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAEV,eAAe,EAEf,YAAY,EACb,MAAM,mBAAmB,CAAC;AAI3B,OAAO,KAAK,EAAwB,oBAAoB,EAAE,MAAM,YAAY,CAAC;AAE7E,wBAAgB,eAAe,CAAC,OAAO,EAAE;IACvC,IAAI,EAAE,MAAM,CAAC;IACb,KAAK,EAAE,MAAM,CAAC;IACd,QAAQ,CAAC,EAAE,MAAM,EAAE,CAAC;IACpB,UAAU,CAAC,EAAE;QACX,KAAK,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE;YAAE,MAAM,EAAE,YAAY,CAAC;YAAC,QAAQ,CAAC,EAAE,OAAO,CAAA;SAAE,CAAC,CAAC;QACrE,IAAI,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE;YAAE,MAAM,EAAE,YAAY,CAAC;YAAC,QAAQ,CAAC,EAAE,OAAO,CAAA;SAAE,CAAC,CAAC;QACpE,MAAM,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE;YAAE,MAAM,EAAE,YAAY,CAAC;YAAC,QAAQ,CAAC,EAAE,OAAO,CAAA;SAAE,CAAC,CAAC;QACtE,MAAM,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE;YAAE,MAAM,EAAE,YAAY,CAAC;YAAC,QAAQ,CAAC,EAAE,OAAO,CAAA;SAAE,CAAC,CAAC;KACvE,CAAC;IACF,QAAQ,EAAE,MAAM,CAAC,MAAM,EAAE,YAAY,GAAG,MAAM,CAAC,MAAM,EAAE,YAAY,CAAC,CAAC,CAAC;IACtE,OAAO,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,eAAe,CAAC,CAAC;CAC3C,GAAG,oBAAoB,CA8DvB"}
@@ -0,0 +1,62 @@
1
+ import { isEmpty } from "@sdk-it/core/utils.js";
2
+ function createOperation(options) {
3
+ const parameters = [];
4
+ if (!isEmpty(options.parameters)) {
5
+ const locations = ["query", "path", "header", "cookie"];
6
+ for (const location of locations) {
7
+ const locationParams = options.parameters[location];
8
+ if (locationParams) {
9
+ for (const [name, param] of Object.entries(locationParams)) {
10
+ parameters.push({
11
+ name,
12
+ in: location,
13
+ required: param.required ?? false,
14
+ schema: param.schema
15
+ });
16
+ }
17
+ }
18
+ }
19
+ }
20
+ const responses = {};
21
+ for (const [key, schema] of Object.entries(options.response)) {
22
+ const [statusCode, contentType] = key.split(/-(.*)/);
23
+ if (!contentType) {
24
+ throw new Error(
25
+ `Response key "${key}" must be in the format "statusCode-contentType"`
26
+ );
27
+ }
28
+ responses[statusCode] ??= {
29
+ description: `Response for ${statusCode}`,
30
+ content: {}
31
+ };
32
+ if (contentType === "headers") {
33
+ responses[statusCode].headers = schema;
34
+ } else {
35
+ responses[statusCode].content[contentType] = {
36
+ schema
37
+ };
38
+ }
39
+ }
40
+ let requestBody = void 0;
41
+ if (options.request) {
42
+ requestBody = { description: "Request body", content: {} };
43
+ for (const [contentType, schema] of Object.entries(options.request)) {
44
+ requestBody.content[contentType] = { schema };
45
+ }
46
+ }
47
+ return {
48
+ security: (options.security ?? []).map((name) => ({
49
+ [name]: []
50
+ })),
51
+ "x-fn-name": options.name,
52
+ operationId: options.name,
53
+ tags: [options.group],
54
+ parameters,
55
+ responses,
56
+ requestBody
57
+ };
58
+ }
59
+ export {
60
+ createOperation
61
+ };
62
+ //# sourceMappingURL=create-operation.js.map
@@ -0,0 +1,7 @@
1
+ {
2
+ "version": 3,
3
+ "sources": ["../../src/lib/create-operation.ts"],
4
+ "sourcesContent": ["import type {\n ParameterObject,\n ReferenceObject,\n ResponsesObject,\n SchemaObject,\n} from 'openapi3-ts/oas31';\n\nimport { isEmpty } from '@sdk-it/core/utils.js';\n\nimport type { OurRequestBodyObject, TunedOperationObject } from './types.js';\n\nexport function createOperation(options: {\n name: string;\n group: string;\n security?: string[];\n parameters?: {\n query?: Record<string, { schema: SchemaObject; required?: boolean }>;\n path?: Record<string, { schema: SchemaObject; required?: boolean }>;\n header?: Record<string, { schema: SchemaObject; required?: boolean }>;\n cookie?: Record<string, { schema: SchemaObject; required?: boolean }>;\n };\n response: Record<string, SchemaObject | Record<string, SchemaObject>>; // Key is statusCode-contentType\n request?: Record<string, ReferenceObject>;\n}): TunedOperationObject {\n const parameters: ParameterObject[] = [];\n if (!isEmpty(options.parameters)) {\n const locations = ['query', 'path', 'header', 'cookie'] as const;\n for (const location of locations) {\n const locationParams = options.parameters[location];\n if (locationParams) {\n for (const [name, param] of Object.entries(locationParams)) {\n parameters.push({\n name,\n in: location,\n required: param.required ?? false,\n schema: param.schema,\n });\n }\n }\n }\n }\n const responses: ResponsesObject = {};\n\n for (const [key, schema] of Object.entries(options.response)) {\n const [statusCode, contentType] = key.split(/-(.*)/); // Split on the first dash\n if (!contentType) {\n throw new Error(\n `Response key \"${key}\" must be in the format \"statusCode-contentType\"`,\n );\n }\n responses[statusCode] ??= {\n description: `Response for ${statusCode}`,\n content: {},\n };\n\n if (contentType === 'headers') {\n responses[statusCode].headers = schema;\n } else {\n responses[statusCode].content[contentType] = {\n schema: schema,\n };\n }\n }\n\n let requestBody: OurRequestBodyObject | undefined = undefined;\n\n if (options.request) {\n requestBody = { description: 'Request body', content: {} };\n\n for (const [contentType, schema] of Object.entries(options.request)) {\n requestBody.content[contentType] = { schema: schema };\n }\n }\n\n return {\n security: (options.security ?? []).map((name) => ({\n [name]: [],\n })),\n 'x-fn-name': options.name,\n operationId: options.name,\n tags: [options.group],\n parameters,\n responses,\n requestBody: requestBody as any,\n };\n}\n"],
5
+ "mappings": "AAOA,SAAS,eAAe;AAIjB,SAAS,gBAAgB,SAYP;AACvB,QAAM,aAAgC,CAAC;AACvC,MAAI,CAAC,QAAQ,QAAQ,UAAU,GAAG;AAChC,UAAM,YAAY,CAAC,SAAS,QAAQ,UAAU,QAAQ;AACtD,eAAW,YAAY,WAAW;AAChC,YAAM,iBAAiB,QAAQ,WAAW,QAAQ;AAClD,UAAI,gBAAgB;AAClB,mBAAW,CAAC,MAAM,KAAK,KAAK,OAAO,QAAQ,cAAc,GAAG;AAC1D,qBAAW,KAAK;AAAA,YACd;AAAA,YACA,IAAI;AAAA,YACJ,UAAU,MAAM,YAAY;AAAA,YAC5B,QAAQ,MAAM;AAAA,UAChB,CAAC;AAAA,QACH;AAAA,MACF;AAAA,IACF;AAAA,EACF;AACA,QAAM,YAA6B,CAAC;AAEpC,aAAW,CAAC,KAAK,MAAM,KAAK,OAAO,QAAQ,QAAQ,QAAQ,GAAG;AAC5D,UAAM,CAAC,YAAY,WAAW,IAAI,IAAI,MAAM,OAAO;AACnD,QAAI,CAAC,aAAa;AAChB,YAAM,IAAI;AAAA,QACR,iBAAiB,GAAG;AAAA,MACtB;AAAA,IACF;AACA,cAAU,UAAU,MAAM;AAAA,MACxB,aAAa,gBAAgB,UAAU;AAAA,MACvC,SAAS,CAAC;AAAA,IACZ;AAEA,QAAI,gBAAgB,WAAW;AAC7B,gBAAU,UAAU,EAAE,UAAU;AAAA,IAClC,OAAO;AACL,gBAAU,UAAU,EAAE,QAAQ,WAAW,IAAI;AAAA,QAC3C;AAAA,MACF;AAAA,IACF;AAAA,EACF;AAEA,MAAI,cAAgD;AAEpD,MAAI,QAAQ,SAAS;AACnB,kBAAc,EAAE,aAAa,gBAAgB,SAAS,CAAC,EAAE;AAEzD,eAAW,CAAC,aAAa,MAAM,KAAK,OAAO,QAAQ,QAAQ,OAAO,GAAG;AACnE,kBAAY,QAAQ,WAAW,IAAI,EAAE,OAAe;AAAA,IACtD;AAAA,EACF;AAEA,SAAO;AAAA,IACL,WAAW,QAAQ,YAAY,CAAC,GAAG,IAAI,CAAC,UAAU;AAAA,MAChD,CAAC,IAAI,GAAG,CAAC;AAAA,IACX,EAAE;AAAA,IACF,aAAa,QAAQ;AAAA,IACrB,aAAa,QAAQ;AAAA,IACrB,MAAM,CAAC,QAAQ,KAAK;AAAA,IACpB;AAAA,IACA;AAAA,IACA;AAAA,EACF;AACF;",
6
+ "names": []
7
+ }
@@ -1 +1 @@
1
- {"version":3,"file":"for-each-operation.d.ts","sourceRoot":"","sources":["../../src/lib/for-each-operation.ts"],"names":[],"mappings":"AAIA,OAAO,KAAK,EAAE,cAAc,EAAE,gBAAgB,EAAE,oBAAoB,EAAE,MAAM,YAAY,CAAC;AAEzF,wBAAgB,gBAAgB,CAAC,CAAC,EAChC,IAAI,EAAE,gBAAgB,EACtB,QAAQ,EAAE,CAAC,KAAK,EAAE,cAAc,EAAE,SAAS,EAAE,oBAAoB,KAAK,CAAC,OA6BxE"}
1
+ {"version":3,"file":"for-each-operation.d.ts","sourceRoot":"","sources":["../../src/lib/for-each-operation.ts"],"names":[],"mappings":"AAIA,OAAO,KAAK,EAAE,cAAc,EAAE,gBAAgB,EAAE,oBAAoB,EAAE,MAAM,YAAY,CAAC;AAEzF,wBAAgB,gBAAgB,CAAC,CAAC,EAChC,IAAI,EAAE,gBAAgB,EACtB,QAAQ,EAAE,CAAC,KAAK,EAAE,cAAc,EAAE,SAAS,EAAE,oBAAoB,KAAK,CAAC,OA0BxE"}
@@ -6,15 +6,12 @@ function forEachOperation(spec, callback) {
6
6
  if (!methods.includes(method)) {
7
7
  continue;
8
8
  }
9
- const metadata = operation["x-oaiMeta"] ?? {};
10
9
  const operationTag = operation.tags?.[0];
11
10
  result.push(
12
11
  callback(
13
12
  {
14
- name: metadata.name,
15
13
  method,
16
14
  path,
17
- groupName: operationTag,
18
15
  tag: operationTag
19
16
  },
20
17
  operation
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "version": 3,
3
3
  "sources": ["../../src/lib/for-each-operation.ts"],
4
- "sourcesContent": ["import type { OperationObject } from 'openapi3-ts/oas31';\n\nimport { type Method, methods } from '@sdk-it/core/paths.js';\n\nimport type { OperationEntry, OurOpenAPIObject, TunedOperationObject } from './types.js';\n\nexport function forEachOperation<T>(\n spec: OurOpenAPIObject,\n callback: (entry: OperationEntry, operation: TunedOperationObject) => T,\n) {\n const result: T[] = [];\n for (const [path, pathItem] of Object.entries(spec.paths)) {\n for (const [method, operation] of Object.entries(pathItem) as [\n Method,\n OperationObject,\n ][]) {\n if (!methods.includes(method)) {\n continue;\n }\n const metadata = operation['x-oaiMeta'] ?? {};\n const operationTag = operation.tags?.[0] as string;\n\n result.push(\n callback(\n {\n name: metadata.name,\n method,\n path: path,\n groupName: operationTag,\n tag: operationTag,\n },\n operation as TunedOperationObject,\n ),\n );\n }\n }\n return result;\n}\n"],
5
- "mappings": "AAEA,SAAsB,eAAe;AAI9B,SAAS,iBACd,MACA,UACA;AACA,QAAM,SAAc,CAAC;AACrB,aAAW,CAAC,MAAM,QAAQ,KAAK,OAAO,QAAQ,KAAK,KAAK,GAAG;AACzD,eAAW,CAAC,QAAQ,SAAS,KAAK,OAAO,QAAQ,QAAQ,GAGpD;AACH,UAAI,CAAC,QAAQ,SAAS,MAAM,GAAG;AAC7B;AAAA,MACF;AACA,YAAM,WAAW,UAAU,WAAW,KAAK,CAAC;AAC5C,YAAM,eAAe,UAAU,OAAO,CAAC;AAEvC,aAAO;AAAA,QACL;AAAA,UACE;AAAA,YACE,MAAM,SAAS;AAAA,YACf;AAAA,YACA;AAAA,YACA,WAAW;AAAA,YACX,KAAK;AAAA,UACP;AAAA,UACA;AAAA,QACF;AAAA,MACF;AAAA,IACF;AAAA,EACF;AACA,SAAO;AACT;",
4
+ "sourcesContent": ["import type { OperationObject } from 'openapi3-ts/oas31';\n\nimport { type Method, methods } from '@sdk-it/core/paths.js';\n\nimport type { OperationEntry, OurOpenAPIObject, TunedOperationObject } from './types.js';\n\nexport function forEachOperation<T>(\n spec: OurOpenAPIObject,\n callback: (entry: OperationEntry, operation: TunedOperationObject) => T,\n) {\n const result: T[] = [];\n for (const [path, pathItem] of Object.entries(spec.paths)) {\n for (const [method, operation] of Object.entries(pathItem) as [\n Method,\n OperationObject,\n ][]) {\n if (!methods.includes(method)) {\n continue;\n }\n const operationTag = operation.tags?.[0] as string;\n\n result.push(\n callback(\n {\n method,\n path: path,\n tag: operationTag,\n },\n operation as TunedOperationObject,\n ),\n );\n }\n }\n return result;\n}\n"],
5
+ "mappings": "AAEA,SAAsB,eAAe;AAI9B,SAAS,iBACd,MACA,UACA;AACA,QAAM,SAAc,CAAC;AACrB,aAAW,CAAC,MAAM,QAAQ,KAAK,OAAO,QAAQ,KAAK,KAAK,GAAG;AACzD,eAAW,CAAC,QAAQ,SAAS,KAAK,OAAO,QAAQ,QAAQ,GAGpD;AACH,UAAI,CAAC,QAAQ,SAAS,MAAM,GAAG;AAC7B;AAAA,MACF;AACA,YAAM,eAAe,UAAU,OAAO,CAAC;AAEvC,aAAO;AAAA,QACL;AAAA,UACE;AAAA,YACE;AAAA,YACA;AAAA,YACA,KAAK;AAAA,UACP;AAAA,UACA;AAAA,QACF;AAAA,MACF;AAAA,IACF;AAAA,EACF;AACA,SAAO;AACT;",
6
6
  "names": []
7
7
  }
@@ -0,0 +1,7 @@
1
+ import type { OperationObject } from 'openapi3-ts/oas31';
2
+ import { type Method } from '@sdk-it/core/paths.js';
3
+ export declare function toResource(operation: OperationObject, path: string, method: Method): {
4
+ name: string;
5
+ group: string;
6
+ };
7
+ //# sourceMappingURL=guess-resource.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"guess-resource.d.ts","sourceRoot":"","sources":["../../../src/lib/guess/guess-resource.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,mBAAmB,CAAC;AAGzD,OAAO,EAAE,KAAK,MAAM,EAAE,MAAM,uBAAuB,CAAC;AAiHpD,wBAAgB,UAAU,CACxB,SAAS,EAAE,eAAe,EAC1B,IAAI,EAAE,MAAM,EACZ,MAAM,EAAE,MAAM;UApCL,MAAM;WAAS,MAAM;EAiD/B"}
@@ -0,0 +1,76 @@
1
+ import { camelcase } from "stringcase";
2
+ import {} from "@sdk-it/core/paths.js";
3
+ import { cleanOperationId } from "../options.js";
4
+ const HTTP_METHOD_ACTIONS = {
5
+ get: { single: "get", collection: "list" },
6
+ post: { single: "create", collection: "create" },
7
+ put: { single: "replace", collection: "replaceAll" },
8
+ patch: { single: "update", collection: "updateMany" },
9
+ delete: { single: "delete", collection: "deleteMany" },
10
+ head: { single: "exists", collection: "checkList" },
11
+ options: { single: "options", collection: "optionsList" },
12
+ trace: { single: "trace", collection: "traceList" },
13
+ connect: { single: "connect", collection: "connectList" }
14
+ };
15
+ function extractResourceInfo(path) {
16
+ const pathSegments = path.split("/").filter(Boolean);
17
+ if (pathSegments.length === 0) {
18
+ return {
19
+ resourceName: "root",
20
+ isSingleResource: false,
21
+ resourceHierarchy: ["root"]
22
+ };
23
+ }
24
+ const lastSegment = pathSegments[pathSegments.length - 1];
25
+ const isSingleResource = lastSegment?.startsWith("{") && lastSegment?.endsWith("}");
26
+ let resourceName;
27
+ let resourceHierarchy;
28
+ if (isSingleResource) {
29
+ const parentSegment = pathSegments[pathSegments.length - 2];
30
+ resourceName = parentSegment || "item";
31
+ resourceHierarchy = pathSegments.filter((segment) => !segment.startsWith("{")).map((segment) => segment.replace(/[{}]/g, ""));
32
+ } else {
33
+ resourceName = lastSegment;
34
+ resourceHierarchy = pathSegments.filter((segment) => !segment.startsWith("{")).map((segment) => segment.replace(/[{}]/g, ""));
35
+ }
36
+ const cleanResourceName = resourceName.replace(/[{}]/g, "").replace(/[-_]/g, " ").replace(/[^a-zA-Z0-9\s]/g, "");
37
+ const hierarchicalName = resourceHierarchy.length > 1 ? resourceHierarchy.join(" ") : cleanResourceName;
38
+ return {
39
+ resourceName: cleanResourceName || "resource",
40
+ isSingleResource,
41
+ resourceHierarchy: [hierarchicalName]
42
+ };
43
+ }
44
+ function guessOperationName(method, {
45
+ isSingleResource,
46
+ resourceHierarchy
47
+ }) {
48
+ const methodAction = HTTP_METHOD_ACTIONS[method.toLowerCase()];
49
+ if (!methodAction) {
50
+ const fallbackAction = isSingleResource ? method.toLowerCase() : `${method.toLowerCase()}All`;
51
+ return {
52
+ name: camelcase(fallbackAction),
53
+ group: camelcase(resourceHierarchy[0])
54
+ };
55
+ }
56
+ const actionName = isSingleResource ? methodAction.single : methodAction.collection;
57
+ const operationName = resourceHierarchy.length > 1 && !isSingleResource ? `${actionName} ${resourceHierarchy.slice(-1)[0]}` : actionName;
58
+ return {
59
+ name: camelcase(operationName),
60
+ group: camelcase(resourceHierarchy[0])
61
+ };
62
+ }
63
+ function toResource(operation, path, method) {
64
+ const resourceInfo = extractResourceInfo(path);
65
+ if (operation.operationId) {
66
+ return {
67
+ name: cleanOperationId(operation.operationId),
68
+ group: camelcase(resourceInfo.resourceName)
69
+ };
70
+ }
71
+ return guessOperationName(method, resourceInfo);
72
+ }
73
+ export {
74
+ toResource
75
+ };
76
+ //# sourceMappingURL=guess-resource.js.map
@@ -0,0 +1,7 @@
1
+ {
2
+ "version": 3,
3
+ "sources": ["../../../src/lib/guess/guess-resource.ts"],
4
+ "sourcesContent": ["import type { OperationObject } from 'openapi3-ts/oas31';\nimport { camelcase } from 'stringcase';\n\nimport { type Method } from '@sdk-it/core/paths.js';\n\nimport { cleanOperationId } from '../options.js';\n\nconst HTTP_METHOD_ACTIONS = {\n get: { single: 'get', collection: 'list' },\n post: { single: 'create', collection: 'create' },\n put: { single: 'replace', collection: 'replaceAll' },\n patch: { single: 'update', collection: 'updateMany' },\n delete: { single: 'delete', collection: 'deleteMany' },\n head: { single: 'exists', collection: 'checkList' },\n options: { single: 'options', collection: 'optionsList' },\n trace: { single: 'trace', collection: 'traceList' },\n connect: { single: 'connect', collection: 'connectList' },\n} as const;\n\nfunction extractResourceInfo(path: string): {\n resourceName: string;\n isSingleResource: boolean;\n resourceHierarchy: string[];\n} {\n const pathSegments = path.split('/').filter(Boolean);\n\n if (pathSegments.length === 0) {\n return {\n resourceName: 'root',\n isSingleResource: false,\n resourceHierarchy: ['root'],\n };\n }\n\n const lastSegment = pathSegments[pathSegments.length - 1];\n const isSingleResource =\n lastSegment?.startsWith('{') && lastSegment?.endsWith('}');\n\n // For single resources, use the parent resource name\n // For collections, use the last segment\n let resourceName: string;\n let resourceHierarchy: string[];\n\n if (isSingleResource) {\n // Single resource: /users/{id} -> \"users\"\n const parentSegment = pathSegments[pathSegments.length - 2];\n resourceName = parentSegment || 'item';\n resourceHierarchy = pathSegments\n .filter((segment) => !segment.startsWith('{'))\n .map((segment) => segment.replace(/[{}]/g, ''));\n } else {\n // Collection: /users or /users/active -> \"users\" or \"usersActive\"\n resourceName = lastSegment;\n resourceHierarchy = pathSegments\n .filter((segment) => !segment.startsWith('{'))\n .map((segment) => segment.replace(/[{}]/g, ''));\n }\n\n // Clean and normalize resource name\n const cleanResourceName = resourceName\n .replace(/[{}]/g, '')\n .replace(/[-_]/g, ' ')\n .replace(/[^a-zA-Z0-9\\s]/g, '');\n\n // Generate a hierarchy-based group name for better conflict avoidance\n const hierarchicalName =\n resourceHierarchy.length > 1\n ? resourceHierarchy.join(' ')\n : cleanResourceName;\n\n return {\n resourceName: cleanResourceName || 'resource',\n isSingleResource,\n resourceHierarchy: [hierarchicalName],\n };\n}\n\nfunction guessOperationName(\n method: Method,\n {\n isSingleResource,\n resourceHierarchy,\n }: ReturnType<typeof extractResourceInfo>,\n): { name: string; group: string } {\n const methodAction =\n HTTP_METHOD_ACTIONS[\n method.toLowerCase() as keyof typeof HTTP_METHOD_ACTIONS\n ];\n\n if (!methodAction) {\n // Fallback for unknown HTTP methods\n const fallbackAction = isSingleResource\n ? method.toLowerCase()\n : `${method.toLowerCase()}All`;\n return {\n name: camelcase(fallbackAction),\n group: camelcase(resourceHierarchy[0]),\n };\n }\n\n const actionName = isSingleResource\n ? methodAction.single\n : methodAction.collection;\n\n // Create more descriptive names for complex paths\n const operationName =\n resourceHierarchy.length > 1 && !isSingleResource\n ? `${actionName} ${resourceHierarchy.slice(-1)[0]}` // e.g., \"list activeUsers\"\n : actionName;\n\n return {\n name: camelcase(operationName),\n group: camelcase(resourceHierarchy[0]),\n };\n}\n\nexport function toResource(\n operation: OperationObject,\n path: string,\n method: Method,\n) {\n // Priority 1: Non-guessed operationId\n const resourceInfo = extractResourceInfo(path);\n if (operation.operationId) {\n return {\n name: cleanOperationId(operation.operationId),\n group: camelcase(resourceInfo.resourceName),\n };\n }\n\n // Priority 2: CRUD operation name\n return guessOperationName(method, resourceInfo);\n}\n"],
5
+ "mappings": "AACA,SAAS,iBAAiB;AAE1B,eAA4B;AAE5B,SAAS,wBAAwB;AAEjC,MAAM,sBAAsB;AAAA,EAC1B,KAAK,EAAE,QAAQ,OAAO,YAAY,OAAO;AAAA,EACzC,MAAM,EAAE,QAAQ,UAAU,YAAY,SAAS;AAAA,EAC/C,KAAK,EAAE,QAAQ,WAAW,YAAY,aAAa;AAAA,EACnD,OAAO,EAAE,QAAQ,UAAU,YAAY,aAAa;AAAA,EACpD,QAAQ,EAAE,QAAQ,UAAU,YAAY,aAAa;AAAA,EACrD,MAAM,EAAE,QAAQ,UAAU,YAAY,YAAY;AAAA,EAClD,SAAS,EAAE,QAAQ,WAAW,YAAY,cAAc;AAAA,EACxD,OAAO,EAAE,QAAQ,SAAS,YAAY,YAAY;AAAA,EAClD,SAAS,EAAE,QAAQ,WAAW,YAAY,cAAc;AAC1D;AAEA,SAAS,oBAAoB,MAI3B;AACA,QAAM,eAAe,KAAK,MAAM,GAAG,EAAE,OAAO,OAAO;AAEnD,MAAI,aAAa,WAAW,GAAG;AAC7B,WAAO;AAAA,MACL,cAAc;AAAA,MACd,kBAAkB;AAAA,MAClB,mBAAmB,CAAC,MAAM;AAAA,IAC5B;AAAA,EACF;AAEA,QAAM,cAAc,aAAa,aAAa,SAAS,CAAC;AACxD,QAAM,mBACJ,aAAa,WAAW,GAAG,KAAK,aAAa,SAAS,GAAG;AAI3D,MAAI;AACJ,MAAI;AAEJ,MAAI,kBAAkB;AAEpB,UAAM,gBAAgB,aAAa,aAAa,SAAS,CAAC;AAC1D,mBAAe,iBAAiB;AAChC,wBAAoB,aACjB,OAAO,CAAC,YAAY,CAAC,QAAQ,WAAW,GAAG,CAAC,EAC5C,IAAI,CAAC,YAAY,QAAQ,QAAQ,SAAS,EAAE,CAAC;AAAA,EAClD,OAAO;AAEL,mBAAe;AACf,wBAAoB,aACjB,OAAO,CAAC,YAAY,CAAC,QAAQ,WAAW,GAAG,CAAC,EAC5C,IAAI,CAAC,YAAY,QAAQ,QAAQ,SAAS,EAAE,CAAC;AAAA,EAClD;AAGA,QAAM,oBAAoB,aACvB,QAAQ,SAAS,EAAE,EACnB,QAAQ,SAAS,GAAG,EACpB,QAAQ,mBAAmB,EAAE;AAGhC,QAAM,mBACJ,kBAAkB,SAAS,IACvB,kBAAkB,KAAK,GAAG,IAC1B;AAEN,SAAO;AAAA,IACL,cAAc,qBAAqB;AAAA,IACnC;AAAA,IACA,mBAAmB,CAAC,gBAAgB;AAAA,EACtC;AACF;AAEA,SAAS,mBACP,QACA;AAAA,EACE;AAAA,EACA;AACF,GACiC;AACjC,QAAM,eACJ,oBACE,OAAO,YAAY,CACrB;AAEF,MAAI,CAAC,cAAc;AAEjB,UAAM,iBAAiB,mBACnB,OAAO,YAAY,IACnB,GAAG,OAAO,YAAY,CAAC;AAC3B,WAAO;AAAA,MACL,MAAM,UAAU,cAAc;AAAA,MAC9B,OAAO,UAAU,kBAAkB,CAAC,CAAC;AAAA,IACvC;AAAA,EACF;AAEA,QAAM,aAAa,mBACf,aAAa,SACb,aAAa;AAGjB,QAAM,gBACJ,kBAAkB,SAAS,KAAK,CAAC,mBAC7B,GAAG,UAAU,IAAI,kBAAkB,MAAM,EAAE,EAAE,CAAC,CAAC,KAC/C;AAEN,SAAO;AAAA,IACL,MAAM,UAAU,aAAa;AAAA,IAC7B,OAAO,UAAU,kBAAkB,CAAC,CAAC;AAAA,EACvC;AACF;AAEO,SAAS,WACd,WACA,MACA,QACA;AAEA,QAAM,eAAe,oBAAoB,IAAI;AAC7C,MAAI,UAAU,aAAa;AACzB,WAAO;AAAA,MACL,MAAM,iBAAiB,UAAU,WAAW;AAAA,MAC5C,OAAO,UAAU,aAAa,YAAY;AAAA,IAC5C;AAAA,EACF;AAGA,SAAO,mBAAmB,QAAQ,YAAY;AAChD;",
6
+ "names": []
7
+ }