@voxgig/apidef 2.4.0 → 3.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 (96) hide show
  1. package/dist/apidef.d.ts +5 -1
  2. package/dist/apidef.js +197 -112
  3. package/dist/apidef.js.map +1 -1
  4. package/dist/builder/entity/entity.d.ts +3 -0
  5. package/dist/builder/entity/{apiEntity.js → entity.js} +12 -9
  6. package/dist/builder/entity/entity.js.map +1 -0
  7. package/dist/builder/entity/info.d.ts +3 -0
  8. package/dist/builder/entity/info.js +22 -0
  9. package/dist/builder/entity/info.js.map +1 -0
  10. package/dist/builder/entity.js +7 -21
  11. package/dist/builder/entity.js.map +1 -1
  12. package/dist/builder/flow/flowHeuristic01.js +21 -11
  13. package/dist/builder/flow/flowHeuristic01.js.map +1 -1
  14. package/dist/builder/flow.d.ts +2 -1
  15. package/dist/builder/flow.js +29 -4
  16. package/dist/builder/flow.js.map +1 -1
  17. package/dist/def.d.ts +62 -0
  18. package/dist/def.js +4 -0
  19. package/dist/def.js.map +1 -0
  20. package/dist/desc.d.ts +89 -0
  21. package/dist/desc.js +4 -0
  22. package/dist/desc.js.map +1 -0
  23. package/dist/guide/guide.d.ts +2 -1
  24. package/dist/guide/guide.js +161 -30
  25. package/dist/guide/guide.js.map +1 -1
  26. package/dist/guide/heuristic01.d.ts +2 -1
  27. package/dist/guide/heuristic01.js +1120 -234
  28. package/dist/guide/heuristic01.js.map +1 -1
  29. package/dist/model.d.ts +55 -0
  30. package/dist/model.js +4 -0
  31. package/dist/model.js.map +1 -0
  32. package/dist/parse.d.ts +1 -2
  33. package/dist/parse.js +8 -47
  34. package/dist/parse.js.map +1 -1
  35. package/dist/transform/args.d.ts +3 -0
  36. package/dist/transform/args.js +58 -0
  37. package/dist/transform/args.js.map +1 -0
  38. package/dist/transform/clean.js +27 -3
  39. package/dist/transform/clean.js.map +1 -1
  40. package/dist/transform/entity.d.ts +11 -3
  41. package/dist/transform/entity.js +57 -41
  42. package/dist/transform/entity.js.map +1 -1
  43. package/dist/transform/field.d.ts +3 -3
  44. package/dist/transform/field.js +90 -65
  45. package/dist/transform/field.js.map +1 -1
  46. package/dist/transform/operation.d.ts +1 -1
  47. package/dist/transform/operation.js +94 -296
  48. package/dist/transform/operation.js.map +1 -1
  49. package/dist/transform/select.d.ts +3 -0
  50. package/dist/transform/select.js +44 -0
  51. package/dist/transform/select.js.map +1 -0
  52. package/dist/transform/top.d.ts +9 -0
  53. package/dist/transform/top.js +11 -2
  54. package/dist/transform/top.js.map +1 -1
  55. package/dist/transform.js +4 -0
  56. package/dist/transform.js.map +1 -1
  57. package/dist/tsconfig.tsbuildinfo +1 -1
  58. package/dist/types.d.ts +112 -19
  59. package/dist/types.js +4 -2
  60. package/dist/types.js.map +1 -1
  61. package/dist/utility.d.ts +30 -2
  62. package/dist/utility.js +381 -6
  63. package/dist/utility.js.map +1 -1
  64. package/model/apidef.jsonic +75 -1
  65. package/model/guide.jsonic +14 -44
  66. package/package.json +19 -14
  67. package/src/apidef.ts +264 -121
  68. package/src/builder/entity/{apiEntity.ts → entity.ts} +18 -11
  69. package/src/builder/entity/info.ts +53 -0
  70. package/src/builder/entity.ts +9 -35
  71. package/src/builder/flow/flowHeuristic01.ts +46 -12
  72. package/src/builder/flow.ts +39 -5
  73. package/src/def.ts +91 -0
  74. package/src/desc.ts +143 -0
  75. package/src/guide/guide.ts +207 -134
  76. package/src/guide/heuristic01.ts +1651 -272
  77. package/src/model.ts +98 -0
  78. package/src/parse.ts +5 -61
  79. package/src/schematron.ts.off +317 -0
  80. package/src/transform/args.ts +102 -0
  81. package/src/transform/clean.ts +43 -8
  82. package/src/transform/entity.ts +100 -51
  83. package/src/transform/field.ts +150 -71
  84. package/src/transform/operation.ts +118 -414
  85. package/src/transform/select.ts +90 -0
  86. package/src/transform/top.ts +76 -3
  87. package/src/transform.ts +4 -0
  88. package/src/types.ts +185 -5
  89. package/src/utility.ts +481 -9
  90. package/dist/builder/entity/apiEntity.d.ts +0 -3
  91. package/dist/builder/entity/apiEntity.js.map +0 -1
  92. package/dist/builder/entity/def.d.ts +0 -3
  93. package/dist/builder/entity/def.js +0 -19
  94. package/dist/builder/entity/def.js.map +0 -1
  95. package/src/builder/entity/def.ts +0 -44
  96. package/src/guide.ts.off +0 -136
@@ -1,18 +1,87 @@
1
1
 
2
2
  import { each, getx } from 'jostraca'
3
3
 
4
+ import { joinurl } from '@voxgig/struct'
5
+
6
+ import { KIT } from '../types'
7
+
4
8
  import type { TransformResult } from '../transform'
5
9
 
6
- import { fixName } from '../transform'
10
+ import type {
11
+ KitModel,
12
+ TypeName,
13
+ MethodName,
14
+ } from '../types'
15
+
16
+ import type {
17
+ PathDef,
18
+ MethodDef,
19
+ ServerDef,
20
+ ServerVariableDef,
21
+ ParameterDef,
22
+ SchemaDef,
23
+ } from '../def'
24
+
25
+ import type {
26
+ GuidePathRename,
27
+ GuideOp,
28
+ GuidePath,
29
+ PathDesc,
30
+ OpDesc,
31
+ } from '../desc'
32
+
33
+ import type {
34
+ OpName,
35
+ ModelEntityRelations,
36
+ ModelOpMap,
37
+ ModelFieldOp,
38
+ ModelField,
39
+ ModelArg,
40
+ ModelAlt,
41
+ ModelOp,
42
+ ModelEntity,
43
+ } from '../model'
44
+
45
+
46
+ // Guide* => from guide model
47
+ // *Desc => internal working descriptiuon
48
+ // *Def => API spec definition
49
+ // Model* => Generated SDK Model
50
+
51
+
52
+ type GuideEntity = {
53
+ name: string,
54
+ path: Record<string, GuidePath>
55
+
56
+ paths$: PathDesc[]
57
+ opm$: Record<OpName, OpDesc>
58
+ }
59
+
60
+
61
+
62
+
63
+
64
+
65
+
66
+
67
+
7
68
 
8
69
 
9
70
  const topTransform = async function(
10
71
  ctx: any,
11
72
  ): Promise<TransformResult> {
12
73
  const { apimodel, def } = ctx
74
+ const kit: KitModel = apimodel.main[KIT]
75
+
76
+ kit.info = def.info
77
+ kit.info.servers = def.servers ?? []
13
78
 
14
- apimodel.main.def.info = def.info
15
- apimodel.main.def.servers = def.servers
79
+ // Swagger 2.0
80
+ if (def.host) {
81
+ kit.info.servers.push({
82
+ url: (def.schemes?.[0] ?? 'https') + '://' + joinurl([def.host, def.basePath])
83
+ })
84
+ }
16
85
 
17
86
  return { ok: true, msg: 'top' }
18
87
  }
@@ -21,3 +90,7 @@ const topTransform = async function(
21
90
  export {
22
91
  topTransform
23
92
  }
93
+
94
+ export type {
95
+ GuideEntity,
96
+ }
package/src/transform.ts CHANGED
@@ -10,6 +10,8 @@ import { Gubu, Child, Exact } from 'gubu'
10
10
  import { topTransform } from './transform/top'
11
11
  import { entityTransform } from './transform/entity'
12
12
  import { operationTransform } from './transform/operation'
13
+ import { argsTransform } from './transform/args'
14
+ import { selectTransform } from './transform/select'
13
15
  import { fieldTransform } from './transform/field'
14
16
  // import { manualTransform } from './transform/manual'
15
17
 
@@ -54,6 +56,8 @@ const TRANSFORM: Record<string, Transform> = {
54
56
  top: topTransform,
55
57
  entity: entityTransform,
56
58
  operation: operationTransform,
59
+ args: argsTransform,
60
+ select: selectTransform,
57
61
  field: fieldTransform,
58
62
  // manual: manualTransform,
59
63
  }
package/src/types.ts CHANGED
@@ -6,10 +6,24 @@ import { Pino, prettyPino } from '@voxgig/util'
6
6
  import { Gubu, Open, Any } from 'gubu'
7
7
 
8
8
 
9
+ const KIT = 'kit'
10
+
11
+
9
12
  type FsUtil = typeof Fs
10
13
  type Log = ReturnType<typeof prettyPino>
11
14
 
12
15
 
16
+ type TypeName =
17
+ 'String' |
18
+ 'Number' |
19
+ 'Integer' |
20
+ 'Boolean' |
21
+ 'Null' |
22
+ 'Array' |
23
+ 'Object' |
24
+ 'Any'
25
+
26
+
13
27
  type ApiDefOptions = {
14
28
  def?: string
15
29
  fs?: any
@@ -19,6 +33,9 @@ type ApiDefOptions = {
19
33
  meta?: Record<string, any>
20
34
  outprefix?: string
21
35
  strategy?: string
36
+ why?: {
37
+ show?: boolean
38
+ }
22
39
  }
23
40
 
24
41
  const ControlShape = Gubu({
@@ -40,7 +57,7 @@ const ModelShape = Gubu({
40
57
  name: String,
41
58
  def: String,
42
59
  main: {
43
- sdk: {},
60
+ [KIT]: {},
44
61
  def: {},
45
62
  api: {
46
63
  guide: {},
@@ -79,22 +96,36 @@ type Build = ReturnType<typeof BuildShape>
79
96
 
80
97
 
81
98
  type ApiModel = {
99
+ /*
82
100
  main: {
83
- api: {
101
+ api: Record<string, any>
102
+ sdk: {
103
+ info: Record<string, any>
84
104
  entity: Record<string, any>
105
+ flow: Record<string, any>
85
106
  }
86
107
  def: Record<string, any>
87
- }
108
+ }
109
+ */
110
+ }
111
+
112
+
113
+ type KitModel = {
114
+ info: Record<string, any>
115
+ entity: Record<string, any>
116
+ flow: Record<string, any>
88
117
  }
89
118
 
90
119
 
120
+
121
+
91
122
  type ApiDefResult = {
92
123
  ok: boolean
93
124
  start: number
94
125
  end: number
95
126
  steps: string[]
96
- ctrl: Control
97
-
127
+ err?: any
128
+ ctrl?: Control
98
129
  guide?: any
99
130
  apimodel?: any
100
131
  ctx?: any
@@ -102,7 +133,118 @@ type ApiDefResult = {
102
133
  }
103
134
 
104
135
 
136
+ type Metrics = {
137
+ count: {
138
+ path: number
139
+ method: number
140
+ origcmprefs: Record<string, number>,
141
+ cmp: number
142
+ tag: number
143
+ entity: number
144
+ }
145
+ found: {
146
+ cmp: Record<string, any>,
147
+ tag: Record<string, any>,
148
+ }
149
+ }
150
+
151
+
152
+
153
+ type ApiDefContext = {
154
+ fs: any,
155
+ log: any,
156
+ spec: any,
157
+ opts: any,
158
+ util: any,
159
+ defpath: string,
160
+ model: any,
161
+ apimodel: any,
162
+ guide: any,
163
+ def: any,
164
+ note: any,
165
+ warn: any,
166
+ metrics: Metrics,
167
+ work: Record<string, any>
168
+ }
169
+
170
+
171
+ type Warner = {
172
+ history: ({ point: string, when: number } & Record<string, any>)[],
173
+ point: string,
174
+ } & ((details: Record<string, any>) => void)
175
+
176
+
177
+ import type {
178
+ CmpDesc,
179
+ BasicMethodDesc,
180
+ } from './desc'
181
+
182
+ type MethodName = 'GET' | 'POST' | 'PUT' | 'DELETE' | 'PATCH' | 'HEAD' | 'OPTIONS' | ''
183
+
184
+
185
+
186
+ type Guide = {
187
+ metrics: GuideMetrics
188
+ entity: Record<string, GuideEntity>
189
+ control: GuideControl
190
+ }
191
+
192
+ type GuideControl = {}
193
+
194
+ type GuideMetrics = {
195
+ count: {
196
+ path: number
197
+ method: number
198
+ entity: number
199
+ tag: number
200
+ cmp: number
201
+ origcmprefs: Record<string, number>
202
+ },
203
+ found: {
204
+ tag: Record<string, string>
205
+ cmp: Record<string, string>
206
+ }
207
+ }
208
+
209
+
210
+ type GuideEntity = {
211
+ name: string
212
+ orig: string
213
+ path: Record<string, GuidePath>
214
+ }
215
+
216
+ type GuidePath = {
217
+ why_path: string[]
218
+ action: Record<string, GuidePathAction>
219
+ rename: {
220
+ param: Record<string, GuideRenameParam>
221
+ }
222
+ op: Record<string, GuidePathOp>
223
+ }
224
+
225
+ type GuidePathAction = {
226
+ kind: string
227
+ why_action: string[]
228
+ }
229
+
230
+ type GuideRenameParam = {
231
+ target: string
232
+ why_rename: string[]
233
+ }
234
+
235
+ type GuidePathOp = {
236
+ method: string
237
+ why_op: string[]
238
+ transform: {
239
+ req: any
240
+ res: any
241
+ }
242
+ }
243
+
244
+
105
245
  export {
246
+ KIT,
247
+
106
248
  OpenControlShape,
107
249
  OpenModelShape,
108
250
  OpenBuildShape,
@@ -110,6 +252,18 @@ export {
110
252
 
111
253
 
112
254
  export type {
255
+ Guide,
256
+ GuideMetrics,
257
+ GuideEntity,
258
+ GuidePath,
259
+ GuidePathAction,
260
+ GuideRenameParam,
261
+ GuidePathOp,
262
+
263
+ KitModel,
264
+
265
+ MethodName,
266
+ TypeName,
113
267
  Log,
114
268
  FsUtil,
115
269
  ApiDefOptions,
@@ -118,5 +272,31 @@ export type {
118
272
  Model,
119
273
  Build,
120
274
  ApiModel,
275
+ ApiDefContext,
276
+ Warner,
277
+ Metrics,
121
278
  }
122
279
 
280
+ export type {
281
+ CmpDesc,
282
+ BasicMethodDesc,
283
+ MethodDesc,
284
+ MethodEntityDesc,
285
+ EntityDesc,
286
+ EntityPathDesc,
287
+ PathDesc,
288
+ OpDesc,
289
+ } from './desc'
290
+
291
+ export type {
292
+ OpName,
293
+ ModelEntityRelations,
294
+ ModelOpMap,
295
+ ModelFieldOp,
296
+ ModelField,
297
+ ModelArg,
298
+ ModelAlt,
299
+ ModelOp,
300
+ ModelEntity,
301
+ } from './model'
302
+