@voxgig/apidef 2.4.1 → 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.
- package/dist/apidef.d.ts +5 -1
- package/dist/apidef.js +197 -112
- package/dist/apidef.js.map +1 -1
- package/dist/builder/entity/entity.d.ts +3 -0
- package/dist/builder/entity/{apiEntity.js → entity.js} +12 -9
- package/dist/builder/entity/entity.js.map +1 -0
- package/dist/builder/entity/info.d.ts +3 -0
- package/dist/builder/entity/info.js +22 -0
- package/dist/builder/entity/info.js.map +1 -0
- package/dist/builder/entity.js +7 -21
- package/dist/builder/entity.js.map +1 -1
- package/dist/builder/flow/flowHeuristic01.js +21 -11
- package/dist/builder/flow/flowHeuristic01.js.map +1 -1
- package/dist/builder/flow.d.ts +2 -1
- package/dist/builder/flow.js +29 -4
- package/dist/builder/flow.js.map +1 -1
- package/dist/def.d.ts +62 -0
- package/dist/def.js +4 -0
- package/dist/def.js.map +1 -0
- package/dist/desc.d.ts +89 -0
- package/dist/desc.js +4 -0
- package/dist/desc.js.map +1 -0
- package/dist/guide/guide.d.ts +2 -1
- package/dist/guide/guide.js +161 -30
- package/dist/guide/guide.js.map +1 -1
- package/dist/guide/heuristic01.d.ts +2 -1
- package/dist/guide/heuristic01.js +1120 -234
- package/dist/guide/heuristic01.js.map +1 -1
- package/dist/model.d.ts +55 -0
- package/dist/model.js +4 -0
- package/dist/model.js.map +1 -0
- package/dist/parse.d.ts +1 -2
- package/dist/parse.js +8 -47
- package/dist/parse.js.map +1 -1
- package/dist/transform/args.d.ts +3 -0
- package/dist/transform/args.js +58 -0
- package/dist/transform/args.js.map +1 -0
- package/dist/transform/clean.js +27 -3
- package/dist/transform/clean.js.map +1 -1
- package/dist/transform/entity.d.ts +11 -3
- package/dist/transform/entity.js +57 -41
- package/dist/transform/entity.js.map +1 -1
- package/dist/transform/field.d.ts +3 -3
- package/dist/transform/field.js +90 -65
- package/dist/transform/field.js.map +1 -1
- package/dist/transform/operation.d.ts +1 -1
- package/dist/transform/operation.js +94 -296
- package/dist/transform/operation.js.map +1 -1
- package/dist/transform/select.d.ts +3 -0
- package/dist/transform/select.js +44 -0
- package/dist/transform/select.js.map +1 -0
- package/dist/transform/top.d.ts +9 -0
- package/dist/transform/top.js +11 -2
- package/dist/transform/top.js.map +1 -1
- package/dist/transform.js +4 -0
- package/dist/transform.js.map +1 -1
- package/dist/tsconfig.tsbuildinfo +1 -1
- package/dist/types.d.ts +112 -19
- package/dist/types.js +4 -2
- package/dist/types.js.map +1 -1
- package/dist/utility.d.ts +30 -2
- package/dist/utility.js +381 -6
- package/dist/utility.js.map +1 -1
- package/model/apidef.jsonic +75 -1
- package/model/guide.jsonic +14 -44
- package/package.json +17 -14
- package/src/apidef.ts +264 -121
- package/src/builder/entity/{apiEntity.ts → entity.ts} +18 -11
- package/src/builder/entity/info.ts +53 -0
- package/src/builder/entity.ts +9 -35
- package/src/builder/flow/flowHeuristic01.ts +46 -12
- package/src/builder/flow.ts +39 -5
- package/src/def.ts +91 -0
- package/src/desc.ts +143 -0
- package/src/guide/guide.ts +207 -134
- package/src/guide/heuristic01.ts +1651 -272
- package/src/model.ts +98 -0
- package/src/parse.ts +5 -61
- package/src/schematron.ts.off +317 -0
- package/src/transform/args.ts +102 -0
- package/src/transform/clean.ts +43 -8
- package/src/transform/entity.ts +100 -51
- package/src/transform/field.ts +150 -71
- package/src/transform/operation.ts +118 -414
- package/src/transform/select.ts +90 -0
- package/src/transform/top.ts +76 -3
- package/src/transform.ts +4 -0
- package/src/types.ts +185 -5
- package/src/utility.ts +481 -9
- package/dist/builder/entity/apiEntity.d.ts +0 -3
- package/dist/builder/entity/apiEntity.js.map +0 -1
- package/dist/builder/entity/def.d.ts +0 -3
- package/dist/builder/entity/def.js +0 -19
- package/dist/builder/entity/def.js.map +0 -1
- package/src/builder/entity/def.ts +0 -44
- package/src/guide.ts.off +0 -136
package/src/transform/top.ts
CHANGED
|
@@ -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 {
|
|
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
|
-
|
|
15
|
-
|
|
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
|
-
|
|
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
|
-
|
|
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
|
+
|