apollo-conn-gen 0.0.2

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 (146) hide show
  1. package/dist/cli/json.d.ts +1 -0
  2. package/dist/cli/json.js +70 -0
  3. package/dist/cli/json.js.map +1 -0
  4. package/dist/cli/oas-helpers/index.d.ts +4 -0
  5. package/dist/cli/oas-helpers/index.js +54 -0
  6. package/dist/cli/oas-helpers/index.js.map +1 -0
  7. package/dist/cli/oas.d.ts +1 -0
  8. package/dist/cli/oas.js +49 -0
  9. package/dist/cli/oas.js.map +1 -0
  10. package/dist/index.d.ts +2 -0
  11. package/dist/index.js +4 -0
  12. package/dist/index.js.map +1 -0
  13. package/dist/json/index.d.ts +4 -0
  14. package/dist/json/index.js +5 -0
  15. package/dist/json/index.js.map +1 -0
  16. package/dist/json/io/index.d.ts +1 -0
  17. package/dist/json/io/index.js +2 -0
  18. package/dist/json/io/index.js.map +1 -0
  19. package/dist/json/io/writer.d.ts +15 -0
  20. package/dist/json/io/writer.js +45 -0
  21. package/dist/json/io/writer.js.map +1 -0
  22. package/dist/json/walker/index.d.ts +2 -0
  23. package/dist/json/walker/index.js +3 -0
  24. package/dist/json/walker/index.js.map +1 -0
  25. package/dist/json/walker/jsonContext.d.ts +12 -0
  26. package/dist/json/walker/jsonContext.js +42 -0
  27. package/dist/json/walker/jsonContext.js.map +1 -0
  28. package/dist/json/walker/jsonGen.d.ts +19 -0
  29. package/dist/json/walker/jsonGen.js +209 -0
  30. package/dist/json/walker/jsonGen.js.map +1 -0
  31. package/dist/json/walker/log/trace.d.ts +3 -0
  32. package/dist/json/walker/log/trace.js +11 -0
  33. package/dist/json/walker/log/trace.js.map +1 -0
  34. package/dist/json/walker/naming.d.ts +8 -0
  35. package/dist/json/walker/naming.js +66 -0
  36. package/dist/json/walker/naming.js.map +1 -0
  37. package/dist/json/walker/types/index.d.ts +4 -0
  38. package/dist/json/walker/types/index.js +5 -0
  39. package/dist/json/walker/types/index.js.map +1 -0
  40. package/dist/json/walker/types/jsonArray.d.ts +13 -0
  41. package/dist/json/walker/types/jsonArray.js +70 -0
  42. package/dist/json/walker/types/jsonArray.js.map +1 -0
  43. package/dist/json/walker/types/jsonObj.d.ts +17 -0
  44. package/dist/json/walker/types/jsonObj.js +76 -0
  45. package/dist/json/walker/types/jsonObj.js.map +1 -0
  46. package/dist/json/walker/types/jsonScalar.d.ts +12 -0
  47. package/dist/json/walker/types/jsonScalar.js +39 -0
  48. package/dist/json/walker/types/jsonScalar.js.map +1 -0
  49. package/dist/json/walker/types/jsonType.d.ts +16 -0
  50. package/dist/json/walker/types/jsonType.js +30 -0
  51. package/dist/json/walker/types/jsonType.js.map +1 -0
  52. package/dist/oas/index.d.ts +14 -0
  53. package/dist/oas/index.js +15 -0
  54. package/dist/oas/index.js.map +1 -0
  55. package/dist/oas/io/writer.d.ts +25 -0
  56. package/dist/oas/io/writer.js +313 -0
  57. package/dist/oas/io/writer.js.map +1 -0
  58. package/dist/oas/log/trace.d.ts +3 -0
  59. package/dist/oas/log/trace.js +7 -0
  60. package/dist/oas/log/trace.js.map +1 -0
  61. package/dist/oas/nodes/arr.d.ts +15 -0
  62. package/dist/oas/nodes/arr.js +47 -0
  63. package/dist/oas/nodes/arr.js.map +1 -0
  64. package/dist/oas/nodes/circularRef.d.ts +13 -0
  65. package/dist/oas/nodes/circularRef.js +39 -0
  66. package/dist/oas/nodes/circularRef.js.map +1 -0
  67. package/dist/oas/nodes/comp.d.ts +18 -0
  68. package/dist/oas/nodes/comp.js +156 -0
  69. package/dist/oas/nodes/comp.js.map +1 -0
  70. package/dist/oas/nodes/en.d.ts +14 -0
  71. package/dist/oas/nodes/en.js +57 -0
  72. package/dist/oas/nodes/en.js.map +1 -0
  73. package/dist/oas/nodes/factory.d.ts +17 -0
  74. package/dist/oas/nodes/factory.js +174 -0
  75. package/dist/oas/nodes/factory.js.map +1 -0
  76. package/dist/oas/nodes/get.d.ts +24 -0
  77. package/dist/oas/nodes/get.js +167 -0
  78. package/dist/oas/nodes/get.js.map +1 -0
  79. package/dist/oas/nodes/obj.d.ts +15 -0
  80. package/dist/oas/nodes/obj.js +177 -0
  81. package/dist/oas/nodes/obj.js.map +1 -0
  82. package/dist/oas/nodes/param/param.d.ts +17 -0
  83. package/dist/oas/nodes/param/param.js +64 -0
  84. package/dist/oas/nodes/param/param.js.map +1 -0
  85. package/dist/oas/nodes/props/prop.d.ts +12 -0
  86. package/dist/oas/nodes/props/prop.js +33 -0
  87. package/dist/oas/nodes/props/prop.js.map +1 -0
  88. package/dist/oas/nodes/props/propArray.d.ts +15 -0
  89. package/dist/oas/nodes/props/propArray.js +75 -0
  90. package/dist/oas/nodes/props/propArray.js.map +1 -0
  91. package/dist/oas/nodes/props/propObj.d.ts +16 -0
  92. package/dist/oas/nodes/props/propObj.js +70 -0
  93. package/dist/oas/nodes/props/propObj.js.map +1 -0
  94. package/dist/oas/nodes/props/propRef.d.ts +19 -0
  95. package/dist/oas/nodes/props/propRef.js +108 -0
  96. package/dist/oas/nodes/props/propRef.js.map +1 -0
  97. package/dist/oas/nodes/props/propScalar.d.ts +16 -0
  98. package/dist/oas/nodes/props/propScalar.js +47 -0
  99. package/dist/oas/nodes/props/propScalar.js.map +1 -0
  100. package/dist/oas/nodes/props/referenceObject.d.ts +3 -0
  101. package/dist/oas/nodes/props/referenceObject.js +2 -0
  102. package/dist/oas/nodes/props/referenceObject.js.map +1 -0
  103. package/dist/oas/nodes/ref.d.ts +17 -0
  104. package/dist/oas/nodes/ref.js +70 -0
  105. package/dist/oas/nodes/ref.js.map +1 -0
  106. package/dist/oas/nodes/response.d.ts +14 -0
  107. package/dist/oas/nodes/response.js +48 -0
  108. package/dist/oas/nodes/response.js.map +1 -0
  109. package/dist/oas/nodes/scalar.d.ts +12 -0
  110. package/dist/oas/nodes/scalar.js +26 -0
  111. package/dist/oas/nodes/scalar.js.map +1 -0
  112. package/dist/oas/nodes/type.d.ts +43 -0
  113. package/dist/oas/nodes/type.js +107 -0
  114. package/dist/oas/nodes/type.js.map +1 -0
  115. package/dist/oas/nodes/union.d.ts +16 -0
  116. package/dist/oas/nodes/union.js +133 -0
  117. package/dist/oas/nodes/union.js.map +1 -0
  118. package/dist/oas/oasContext.d.ts +23 -0
  119. package/dist/oas/oasContext.js +73 -0
  120. package/dist/oas/oasContext.js.map +1 -0
  121. package/dist/oas/oasGen.d.ts +28 -0
  122. package/dist/oas/oasGen.js +166 -0
  123. package/dist/oas/oasGen.js.map +1 -0
  124. package/dist/oas/prompts/base/theme.d.ts +1 -0
  125. package/dist/oas/prompts/base/theme.js +50 -0
  126. package/dist/oas/prompts/base/theme.js.map +1 -0
  127. package/dist/oas/prompts/base/utils.d.ts +3 -0
  128. package/dist/oas/prompts/base/utils.js +8 -0
  129. package/dist/oas/prompts/base/utils.js.map +1 -0
  130. package/dist/oas/prompts/prompt.d.ts +19 -0
  131. package/dist/oas/prompts/prompt.js +176 -0
  132. package/dist/oas/prompts/prompt.js.map +1 -0
  133. package/dist/oas/prompts/theme.d.ts +126 -0
  134. package/dist/oas/prompts/theme.js +2 -0
  135. package/dist/oas/prompts/theme.js.map +1 -0
  136. package/dist/oas/utils/gql.d.ts +5 -0
  137. package/dist/oas/utils/gql.js +35 -0
  138. package/dist/oas/utils/gql.js.map +1 -0
  139. package/dist/oas/utils/naming.d.ts +16 -0
  140. package/dist/oas/utils/naming.js +143 -0
  141. package/dist/oas/utils/naming.js.map +1 -0
  142. package/dist/oas/utils/typeUtils.d.ts +6 -0
  143. package/dist/oas/utils/typeUtils.js +25 -0
  144. package/dist/oas/utils/typeUtils.js.map +1 -0
  145. package/package.json +77 -0
  146. package/readme.md +383 -0
@@ -0,0 +1,5 @@
1
+ import { SchemaObject } from 'oas/types';
2
+ export declare class GqlUtils {
3
+ static getGQLScalarType(schema: SchemaObject): string;
4
+ static gqlScalar(type: string): string | false;
5
+ }
@@ -0,0 +1,35 @@
1
+ export class GqlUtils {
2
+ static getGQLScalarType(schema) {
3
+ switch (schema.type) {
4
+ case 'string':
5
+ // case 'date':
6
+ // case 'date-time':
7
+ return 'String';
8
+ case 'integer':
9
+ return 'Int';
10
+ case 'number':
11
+ return 'Float';
12
+ case 'boolean':
13
+ return 'Boolean';
14
+ default:
15
+ throw new Error(`[getGQLScalarType] Cannot generate type = ${JSON.stringify(schema)}`);
16
+ }
17
+ }
18
+ static gqlScalar(type) {
19
+ switch (type) {
20
+ case 'string':
21
+ case 'date':
22
+ case 'date-time':
23
+ return 'String';
24
+ case 'integer':
25
+ return 'Int';
26
+ case 'number':
27
+ return 'Float';
28
+ case 'boolean':
29
+ return 'Boolean';
30
+ default:
31
+ return false;
32
+ }
33
+ }
34
+ }
35
+ //# sourceMappingURL=gql.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"gql.js","sourceRoot":"","sources":["../../../src/oas/utils/gql.ts"],"names":[],"mappings":"AAEA,MAAM,OAAO,QAAQ;IACZ,MAAM,CAAC,gBAAgB,CAAC,MAAoB;QACjD,QAAQ,MAAM,CAAC,IAAI,EAAE,CAAC;YACpB,KAAK,QAAQ;gBACX,eAAe;gBACf,oBAAoB;gBACpB,OAAO,QAAQ,CAAC;YAClB,KAAK,SAAS;gBACZ,OAAO,KAAK,CAAC;YACf,KAAK,QAAQ;gBACX,OAAO,OAAO,CAAC;YACjB,KAAK,SAAS;gBACZ,OAAO,SAAS,CAAC;YACnB;gBACE,MAAM,IAAI,KAAK,CAAC,6CAA6C,IAAI,CAAC,SAAS,CAAC,MAAM,CAAC,EAAE,CAAC,CAAC;QAC3F,CAAC;IACH,CAAC;IAEM,MAAM,CAAC,SAAS,CAAC,IAAY;QAClC,QAAQ,IAAI,EAAE,CAAC;YACb,KAAK,QAAQ,CAAC;YACd,KAAK,MAAM,CAAC;YACZ,KAAK,WAAW;gBACd,OAAO,QAAQ,CAAC;YAClB,KAAK,SAAS;gBACZ,OAAO,KAAK,CAAC;YACf,KAAK,QAAQ;gBACX,OAAO,OAAO,CAAC;YACjB,KAAK,SAAS;gBACZ,OAAO,SAAS,CAAC;YACnB;gBACE,OAAO,KAAK,CAAC;QACjB,CAAC;IACH,CAAC;CACF","sourcesContent":["import { SchemaObject } from 'oas/types';\n\nexport class GqlUtils {\n public static getGQLScalarType(schema: SchemaObject): string {\n switch (schema.type) {\n case 'string':\n // case 'date':\n // case 'date-time':\n return 'String';\n case 'integer':\n return 'Int';\n case 'number':\n return 'Float';\n case 'boolean':\n return 'Boolean';\n default:\n throw new Error(`[getGQLScalarType] Cannot generate type = ${JSON.stringify(schema)}`);\n }\n }\n\n public static gqlScalar(type: string): string | false {\n switch (type) {\n case 'string':\n case 'date':\n case 'date-time':\n return 'String';\n case 'integer':\n return 'Int';\n case 'number':\n return 'Float';\n case 'boolean':\n return 'Boolean';\n default:\n return false;\n }\n }\n}\n"]}
@@ -0,0 +1,16 @@
1
+ import { Operation } from 'oas/operation';
2
+ export declare class Naming {
3
+ static genParamName(param: string): string;
4
+ static genTypeName(name: string): string;
5
+ static sanitiseField(name: string): string;
6
+ static sanitiseFieldForSelect(name: string): string;
7
+ static genOperationName(path: string, operation: Operation): string;
8
+ static genArrayItems(name: string): string;
9
+ static getRefName(ref: string): string;
10
+ static formatPath(path: string, parameters: string[]): string;
11
+ static capitaliseParts(input: string, splitPattern: RegExp | string): string;
12
+ private static readonly PARAM_CONVERTER;
13
+ private static readonly TYPE_CONVERTER;
14
+ private static readonly REF_CONVERTER;
15
+ formatPath(path: string, parameters: string[]): string;
16
+ }
@@ -0,0 +1,143 @@
1
+ import _ from 'lodash';
2
+ class AbstractConverter {
3
+ next;
4
+ constructor(next) {
5
+ this.next = next;
6
+ }
7
+ convert(input) {
8
+ const result = this.process(input);
9
+ return this.next ? this.next.convert(result) : result;
10
+ }
11
+ }
12
+ class ReplaceBracketsConverter extends AbstractConverter {
13
+ constructor(next) {
14
+ super(next);
15
+ }
16
+ process(input) {
17
+ return input.replace(/\[|\]/g, '-');
18
+ }
19
+ }
20
+ class CapitalisePartsConverter extends AbstractConverter {
21
+ constructor(next) {
22
+ super(next);
23
+ }
24
+ process(input) {
25
+ return Naming.capitaliseParts(input, /[-_.]/);
26
+ }
27
+ }
28
+ class FinalFirstLowerCaseConverter extends AbstractConverter {
29
+ process(input) {
30
+ return _.lowerFirst(input);
31
+ }
32
+ }
33
+ class RemoveRefConverter extends AbstractConverter {
34
+ constructor(converter) {
35
+ super(converter);
36
+ }
37
+ process(input) {
38
+ let result = input || '';
39
+ if (result.includes('#/components/schemas/')) {
40
+ result = result.replace(/#\/components\/schemas\//g, '');
41
+ }
42
+ if (result.includes('#/components/responses/')) {
43
+ result = result.replace(/#\/components\/responses\//g, '');
44
+ }
45
+ if (result.includes('#/components/parameters/')) {
46
+ result = result.replace(/#\/components\/parameters\//g, '');
47
+ }
48
+ return result;
49
+ }
50
+ }
51
+ class FinalFirstUpperCaseConverter extends AbstractConverter {
52
+ constructor() {
53
+ super();
54
+ }
55
+ process(input) {
56
+ return _.upperFirst(input);
57
+ }
58
+ }
59
+ class FinalConverter extends AbstractConverter {
60
+ process(input) {
61
+ return input; // do nothing
62
+ }
63
+ }
64
+ export class Naming {
65
+ static genParamName(param) {
66
+ return Naming.PARAM_CONVERTER.convert(param);
67
+ }
68
+ static genTypeName(name) {
69
+ return Naming.TYPE_CONVERTER.convert(name);
70
+ }
71
+ static sanitiseField(name) {
72
+ const fieldName = name.startsWith('@') ? name.substring(1) : name;
73
+ return Naming.genParamName(fieldName);
74
+ }
75
+ static sanitiseFieldForSelect(name) {
76
+ const fieldName = name.startsWith('@') ? name.substring(1) : name;
77
+ const sanitised = Naming.genParamName(fieldName);
78
+ if (sanitised === name) {
79
+ return sanitised;
80
+ }
81
+ else {
82
+ const needsQuotes = /[:_\-.]/.test(fieldName) || name.startsWith('@');
83
+ let builder = sanitised + ': ';
84
+ if (needsQuotes) {
85
+ builder += '"';
86
+ }
87
+ builder += name.startsWith('@') ? name : fieldName;
88
+ if (needsQuotes) {
89
+ builder += '"';
90
+ }
91
+ return builder;
92
+ }
93
+ }
94
+ static genOperationName(path, operation) {
95
+ const parameters = operation.hasParameters()
96
+ ? operation
97
+ .getParameters()
98
+ .filter((p) => p.required && p.in.toLowerCase() !== 'header')
99
+ .map((p) => {
100
+ const paramName = Naming.genParamName(p.name);
101
+ return `By${_.upperFirst(paramName)}`;
102
+ })
103
+ : [];
104
+ const result = Naming.formatPath(path, parameters);
105
+ return _.lowerFirst(result);
106
+ }
107
+ static genArrayItems(name) {
108
+ return _.upperFirst(Naming.genParamName(name)) + 'Item';
109
+ }
110
+ static getRefName(ref) {
111
+ return ref ? Naming.REF_CONVERTER.convert(ref) : '';
112
+ }
113
+ // internal stuff
114
+ static formatPath(path, parameters) {
115
+ if (!path) {
116
+ return path;
117
+ }
118
+ // Step 1: Remove parameters enclosed in {}.
119
+ const paramsJoined = parameters.join('');
120
+ let cleanedPath = path.replace(/\{[^}]*\}/g, paramsJoined);
121
+ cleanedPath = Naming.capitaliseParts(cleanedPath, /[:\-.+]+/); // using regex similar to "[:\-\.]+"
122
+ // Step 2: Split the path by "/" and capitalize each part.
123
+ return Naming.capitaliseParts(cleanedPath, '/');
124
+ }
125
+ static capitaliseParts(input, splitPattern) {
126
+ // If splitPattern is a string, convert it to a RegExp.
127
+ const regex = typeof splitPattern === 'string' ? new RegExp(splitPattern, 'g') : splitPattern;
128
+ // Split the input, capitalize each non-empty part, and join them back together.
129
+ return input
130
+ .split(regex)
131
+ .map((part) => (part ? _.upperFirst(part) : ''))
132
+ .join('');
133
+ }
134
+ static PARAM_CONVERTER = new ReplaceBracketsConverter(new CapitalisePartsConverter(new FinalFirstLowerCaseConverter()));
135
+ static TYPE_CONVERTER = new RemoveRefConverter(new CapitalisePartsConverter(new FinalFirstUpperCaseConverter()));
136
+ static REF_CONVERTER = new RemoveRefConverter(new FinalConverter());
137
+ formatPath(path, parameters) {
138
+ // Replace with your actual formatting logic.
139
+ // This example simply concatenates the parameters to the path.
140
+ return path + parameters.join('');
141
+ }
142
+ }
143
+ //# sourceMappingURL=naming.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"naming.js","sourceRoot":"","sources":["../../../src/oas/utils/naming.ts"],"names":[],"mappings":"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","sourcesContent":["import _ from 'lodash';\nimport { Operation } from 'oas/operation';\n\ninterface Converter {\n convert(input: string): string;\n}\n\nabstract class AbstractConverter implements Converter {\n private next?: Converter;\n\n constructor(next?: Converter) {\n this.next = next;\n }\n\n public convert(input: string): string {\n const result = this.process(input);\n return this.next ? this.next.convert(result) : result;\n }\n\n protected abstract process(input: string): string;\n}\n\nclass ReplaceBracketsConverter extends AbstractConverter {\n constructor(next: Converter) {\n super(next);\n }\n\n public process(input: string): string {\n return input.replace(/\\[|\\]/g, '-');\n }\n}\n\nclass CapitalisePartsConverter extends AbstractConverter {\n constructor(next: Converter) {\n super(next);\n }\n\n public process(input: string): string {\n return Naming.capitaliseParts(input, /[-_.]/);\n }\n\n // private capitaliseParts(cleanedPath: string, splitRegex: RegExp): string {\n // const parts = cleanedPath.split(splitRegex);\n // let formattedPath = '';\n // for (const part of parts) {\n // if (part) {\n // formattedPath += part.charAt(0).toUpperCase() + part.substring(1);\n // }\n // }\n // return formattedPath;\n // }\n}\n\nclass FinalFirstLowerCaseConverter extends AbstractConverter {\n public process(input: string): string {\n return _.lowerFirst(input);\n }\n}\n\nclass RemoveRefConverter extends AbstractConverter {\n constructor(converter: Converter) {\n super(converter);\n }\n\n public process(input: string): string {\n let result = input || '';\n if (result.includes('#/components/schemas/')) {\n result = result.replace(/#\\/components\\/schemas\\//g, '');\n }\n if (result.includes('#/components/responses/')) {\n result = result.replace(/#\\/components\\/responses\\//g, '');\n }\n if (result.includes('#/components/parameters/')) {\n result = result.replace(/#\\/components\\/parameters\\//g, '');\n }\n return result;\n }\n}\n\nclass FinalFirstUpperCaseConverter extends AbstractConverter {\n constructor() {\n super();\n }\n public process(input: string): string {\n return _.upperFirst(input);\n }\n}\n\nclass FinalConverter extends AbstractConverter {\n protected process(input: string): string {\n return input; // do nothing\n }\n}\n\nexport class Naming {\n public static genParamName(param: string): string {\n return Naming.PARAM_CONVERTER.convert(param);\n }\n\n public static genTypeName(name: string): string {\n return Naming.TYPE_CONVERTER.convert(name);\n }\n\n public static sanitiseField(name: string): string {\n const fieldName = name.startsWith('@') ? name.substring(1) : name;\n return Naming.genParamName(fieldName);\n }\n\n public static sanitiseFieldForSelect(name: string): string {\n const fieldName = name.startsWith('@') ? name.substring(1) : name;\n const sanitised = Naming.genParamName(fieldName);\n if (sanitised === name) {\n return sanitised;\n } else {\n const needsQuotes = /[:_\\-.]/.test(fieldName) || name.startsWith('@');\n let builder = sanitised + ': ';\n if (needsQuotes) {\n builder += '\"';\n }\n builder += name.startsWith('@') ? name : fieldName;\n if (needsQuotes) {\n builder += '\"';\n }\n return builder;\n }\n }\n\n public static genOperationName(path: string, operation: Operation): string {\n const parameters = operation.hasParameters()\n ? operation\n .getParameters()\n .filter((p) => p.required && p.in.toLowerCase() !== 'header')\n .map((p) => {\n const paramName = Naming.genParamName(p.name);\n return `By${_.upperFirst(paramName)}`;\n })\n : [];\n\n const result = Naming.formatPath(path, parameters);\n return _.lowerFirst(result);\n }\n\n public static genArrayItems(name: string): string {\n return _.upperFirst(Naming.genParamName(name)) + 'Item';\n }\n\n public static getRefName(ref: string): string {\n return ref ? Naming.REF_CONVERTER.convert(ref) : '';\n }\n\n // internal stuff\n public static formatPath(path: string, parameters: string[]): string {\n if (!path) {\n return path;\n }\n\n // Step 1: Remove parameters enclosed in {}.\n const paramsJoined = parameters.join('');\n let cleanedPath = path.replace(/\\{[^}]*\\}/g, paramsJoined);\n cleanedPath = Naming.capitaliseParts(cleanedPath, /[:\\-.+]+/); // using regex similar to \"[:\\-\\.]+\"\n\n // Step 2: Split the path by \"/\" and capitalize each part.\n return Naming.capitaliseParts(cleanedPath, '/');\n }\n\n public static capitaliseParts(input: string, splitPattern: RegExp | string): string {\n // If splitPattern is a string, convert it to a RegExp.\n const regex = typeof splitPattern === 'string' ? new RegExp(splitPattern, 'g') : splitPattern;\n\n // Split the input, capitalize each non-empty part, and join them back together.\n return input\n .split(regex)\n .map((part) => (part ? _.upperFirst(part) : ''))\n .join('');\n }\n private static readonly PARAM_CONVERTER: Converter = new ReplaceBracketsConverter(\n new CapitalisePartsConverter(new FinalFirstLowerCaseConverter()),\n );\n\n private static readonly TYPE_CONVERTER: Converter = new RemoveRefConverter(\n new CapitalisePartsConverter(new FinalFirstUpperCaseConverter()),\n );\n\n private static readonly REF_CONVERTER: Converter = new RemoveRefConverter(new FinalConverter());\n\n public formatPath(path: string, parameters: string[]): string {\n // Replace with your actual formatting logic.\n // This example simply concatenates the parameters to the path.\n return path + parameters.join('');\n }\n}\n"]}
@@ -0,0 +1,6 @@
1
+ import { IType } from '../nodes/type.js';
2
+ export declare class T {
3
+ static isLeaf(type: IType): boolean;
4
+ static isPropScalar(type: IType): boolean;
5
+ static traverse(node: IType, callback: (node: IType) => void): void;
6
+ }
@@ -0,0 +1,25 @@
1
+ import { CircularRef } from '../nodes/circularRef.js';
2
+ import { En } from '../nodes/en.js';
3
+ import { PropArray } from '../nodes/props/propArray.js';
4
+ import { PropScalar } from '../nodes/props/propScalar.js';
5
+ export class T {
6
+ static isLeaf(type) {
7
+ return (type instanceof PropScalar ||
8
+ type instanceof En ||
9
+ type instanceof CircularRef ||
10
+ (type instanceof PropArray && type.items instanceof PropScalar));
11
+ }
12
+ static isPropScalar(type) {
13
+ return type instanceof PropScalar;
14
+ }
15
+ static traverse(node, callback) {
16
+ const traverseNode = (n) => {
17
+ callback(n);
18
+ for (const c of n.children) {
19
+ traverseNode(c);
20
+ }
21
+ };
22
+ traverseNode(node);
23
+ }
24
+ }
25
+ //# sourceMappingURL=typeUtils.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"typeUtils.js","sourceRoot":"","sources":["../../../src/oas/utils/typeUtils.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,WAAW,EAAE,MAAM,yBAAyB,CAAC;AACtD,OAAO,EAAE,EAAE,EAAE,MAAM,gBAAgB,CAAC;AACpC,OAAO,EAAE,SAAS,EAAE,MAAM,6BAA6B,CAAC;AACxD,OAAO,EAAE,UAAU,EAAE,MAAM,8BAA8B,CAAC;AAG1D,MAAM,OAAO,CAAC;IACL,MAAM,CAAC,MAAM,CAAC,IAAW;QAC9B,OAAO,CACL,IAAI,YAAY,UAAU;YAC1B,IAAI,YAAY,EAAE;YAClB,IAAI,YAAY,WAAW;YAC3B,CAAC,IAAI,YAAY,SAAS,IAAI,IAAI,CAAC,KAAK,YAAY,UAAU,CAAC,CAChE,CAAC;IACJ,CAAC;IAEM,MAAM,CAAC,YAAY,CAAC,IAAW;QACpC,OAAO,IAAI,YAAY,UAAU,CAAC;IACpC,CAAC;IAEM,MAAM,CAAC,QAAQ,CAAC,IAAW,EAAE,QAA+B;QACjE,MAAM,YAAY,GAAG,CAAC,CAAQ,EAAQ,EAAE;YACtC,QAAQ,CAAC,CAAC,CAAC,CAAC;YAEZ,KAAK,MAAM,CAAC,IAAI,CAAC,CAAC,QAAQ,EAAE,CAAC;gBAC3B,YAAY,CAAC,CAAC,CAAC,CAAC;YAClB,CAAC;QACH,CAAC,CAAC;QAEF,YAAY,CAAC,IAAI,CAAC,CAAC;IACrB,CAAC;CACF","sourcesContent":["import { CircularRef } from '../nodes/circularRef.js';\nimport { En } from '../nodes/en.js';\nimport { PropArray } from '../nodes/props/propArray.js';\nimport { PropScalar } from '../nodes/props/propScalar.js';\nimport { IType } from '../nodes/type.js';\n\nexport class T {\n public static isLeaf(type: IType): boolean {\n return (\n type instanceof PropScalar ||\n type instanceof En ||\n type instanceof CircularRef ||\n (type instanceof PropArray && type.items instanceof PropScalar)\n );\n }\n\n public static isPropScalar(type: IType): boolean {\n return type instanceof PropScalar;\n }\n\n public static traverse(node: IType, callback: (node: IType) => void): void {\n const traverseNode = (n: IType): void => {\n callback(n);\n\n for (const c of n.children) {\n traverseNode(c);\n }\n };\n\n traverseNode(node);\n }\n}\n"]}
package/package.json ADDED
@@ -0,0 +1,77 @@
1
+ {
2
+ "name": "apollo-conn-gen",
3
+ "version": "0.0.2",
4
+ "description": "Library to generate Apollo connector schemas from OpenAPI specs or JSON payloads. Also includes a CLI to generate connectors from the command line.",
5
+ "author": "Fernando @ Apollo",
6
+ "license": "MIT",
7
+ "repository": {
8
+ "type": "git",
9
+ "url": "git+https://github.com/fernando-apollo/oas-to-connector.git"
10
+ },
11
+ "type": "module",
12
+ "exports": {
13
+ "./package.json": "./package.json",
14
+ ".": {
15
+ "types": "./dist/index.d.ts",
16
+ "module-sync": "./dist/index.js",
17
+ "require": null,
18
+ "default": "./dist/index.js"
19
+ },
20
+ "./json": {
21
+ "types": "./dist/json/index.d.ts",
22
+ "module-sync": "./dist/json/index.js",
23
+ "require": null,
24
+ "default": "./dist/json/index.js"
25
+ },
26
+ "./oas": {
27
+ "types": "./dist/oas/index.d.ts",
28
+ "module-sync": "./dist/oas/index.js",
29
+ "require": null,
30
+ "default": "./dist/oas/index.js"
31
+ }
32
+ },
33
+ "files": [
34
+ "dist/*"
35
+ ],
36
+ "scripts": {
37
+ "dev": "tsc --watch",
38
+ "prebuild": "rm -r dist",
39
+ "build": "tsc",
40
+ "test": "node --import tsx/esm --test 'tests/oas.test.ts'",
41
+ "format": "prettier --write \"src/**/*.ts\"",
42
+ "lint": "eslint",
43
+ "prepare": "npm run build",
44
+ "prepublishOnly": "npm run build && npm test && publint",
45
+ "preversion": "npm run lint && npm test",
46
+ "version": "npm run format && git add -A src",
47
+ "postversion": "git push && git push --tags",
48
+ "yalc:update": "yalc push --scripts --update --replace"
49
+ },
50
+ "dependencies": {
51
+ "@inquirer/checkbox": "^4.1.1",
52
+ "@inquirer/core": "^10.1.7",
53
+ "@inquirer/prompts": "^7.3.1",
54
+ "commander": "^13.1.0",
55
+ "lodash": "^4.17.21",
56
+ "oas": "^25.3.0",
57
+ "oas-normalize": "^12.1.0",
58
+ "yoctocolors-cjs": "^2.1.2"
59
+ },
60
+ "devDependencies": {
61
+ "@eslint/js": "^9.21.0",
62
+ "@types/inquirer": "^9.0.7",
63
+ "@types/lodash": "^4.17.15",
64
+ "esbuild": "^0.25.0",
65
+ "eslint": "^9.21.0",
66
+ "npm-dts": "^1.3.13",
67
+ "openapi-types": "^12.1.3",
68
+ "prettier": "^3.5.3",
69
+ "publint": "^0.3.9",
70
+ "ts-jest": "^29.2.5",
71
+ "ts-node": "^10.9.2",
72
+ "tslint-config-prettier": "^1.18.0",
73
+ "tsx": "^4.19.3",
74
+ "typescript": "^5.8.2",
75
+ "typescript-eslint": "^8.26.0"
76
+ }
77
+ }