@voxgig/sdkgen 0.44.0 → 0.45.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 (113) hide show
  1. package/bin/voxgig-sdkgen +1 -1
  2. package/dist/cmp/ReadmeEntity.js +9 -153
  3. package/dist/cmp/ReadmeEntity.js.map +1 -1
  4. package/dist/cmp/ReadmeIntro.js +9 -14
  5. package/dist/cmp/ReadmeIntro.js.map +1 -1
  6. package/dist/cmp/ReadmeModel.js +6 -4
  7. package/dist/cmp/ReadmeModel.js.map +1 -1
  8. package/dist/cmp/ReadmeOptions.js +9 -61
  9. package/dist/cmp/ReadmeOptions.js.map +1 -1
  10. package/dist/cmp/ReadmeRef.js +10 -1328
  11. package/dist/cmp/ReadmeRef.js.map +1 -1
  12. package/dist/sdkgen.d.ts +2 -2
  13. package/dist/sdkgen.js +2 -1
  14. package/dist/sdkgen.js.map +1 -1
  15. package/dist/utility.d.ts +2 -1
  16. package/dist/utility.js +9 -0
  17. package/dist/utility.js.map +1 -1
  18. package/package.json +1 -1
  19. package/project/.sdk/src/cmp/go/Config_go.ts +9 -4
  20. package/project/.sdk/src/cmp/go/ReadmeEntity_go.ts +138 -0
  21. package/project/.sdk/src/cmp/go/ReadmeHowto_go.ts +6 -3
  22. package/project/.sdk/src/cmp/go/ReadmeIntro_go.ts +18 -0
  23. package/project/.sdk/src/cmp/go/ReadmeModel_go.ts +6 -3
  24. package/project/.sdk/src/cmp/go/ReadmeOptions_go.ts +58 -0
  25. package/project/.sdk/src/cmp/go/ReadmeQuick_go.ts +11 -7
  26. package/project/.sdk/src/cmp/go/ReadmeRef_go.ts +354 -0
  27. package/project/.sdk/src/cmp/go/ReadmeTopQuick_go.ts +6 -4
  28. package/project/.sdk/src/cmp/go/TestDirect_go.ts +18 -8
  29. package/project/.sdk/src/cmp/go/TestEntity_go.ts +105 -54
  30. package/project/.sdk/src/cmp/js/Config_js.ts +18 -0
  31. package/project/.sdk/src/cmp/js/ReadmeEntity_js.ts +138 -0
  32. package/project/.sdk/src/cmp/js/ReadmeHowto_js.ts +11 -6
  33. package/project/.sdk/src/cmp/js/ReadmeIntro_js.ts +18 -0
  34. package/project/.sdk/src/cmp/js/ReadmeModel_js.ts +6 -3
  35. package/project/.sdk/src/cmp/js/ReadmeOptions_js.ts +58 -0
  36. package/project/.sdk/src/cmp/js/ReadmeQuick_js.ts +6 -4
  37. package/project/.sdk/src/cmp/js/ReadmeRef_js.ts +384 -0
  38. package/project/.sdk/src/cmp/js/ReadmeTopQuick_js.ts +6 -4
  39. package/project/.sdk/src/cmp/js/TestDirect_js.ts +23 -12
  40. package/project/.sdk/src/cmp/js/TestEntity_js.ts +107 -74
  41. package/project/.sdk/src/cmp/js/fragment/Config.fragment.js +1 -5
  42. package/project/.sdk/src/cmp/lua/Config_lua.ts +9 -4
  43. package/project/.sdk/src/cmp/lua/ReadmeEntity_lua.ts +138 -0
  44. package/project/.sdk/src/cmp/lua/ReadmeHowto_lua.ts +6 -3
  45. package/project/.sdk/src/cmp/lua/ReadmeIntro_lua.ts +18 -0
  46. package/project/.sdk/src/cmp/lua/ReadmeModel_lua.ts +6 -3
  47. package/project/.sdk/src/cmp/lua/ReadmeOptions_lua.ts +58 -0
  48. package/project/.sdk/src/cmp/lua/ReadmeQuick_lua.ts +6 -4
  49. package/project/.sdk/src/cmp/lua/ReadmeRef_lua.ts +360 -0
  50. package/project/.sdk/src/cmp/lua/ReadmeTopQuick_lua.ts +6 -4
  51. package/project/.sdk/src/cmp/lua/TestDirect_lua.ts +18 -8
  52. package/project/.sdk/src/cmp/lua/TestEntity_lua.ts +95 -51
  53. package/project/.sdk/src/cmp/php/Config_php.ts +10 -8
  54. package/project/.sdk/src/cmp/php/ReadmeEntity_php.ts +138 -0
  55. package/project/.sdk/src/cmp/php/ReadmeHowto_php.ts +6 -3
  56. package/project/.sdk/src/cmp/php/ReadmeIntro_php.ts +18 -0
  57. package/project/.sdk/src/cmp/php/ReadmeModel_php.ts +6 -3
  58. package/project/.sdk/src/cmp/php/ReadmeOptions_php.ts +58 -0
  59. package/project/.sdk/src/cmp/php/ReadmeQuick_php.ts +6 -4
  60. package/project/.sdk/src/cmp/php/ReadmeRef_php.ts +358 -0
  61. package/project/.sdk/src/cmp/php/ReadmeTopQuick_php.ts +6 -4
  62. package/project/.sdk/src/cmp/php/TestDirect_php.ts +18 -8
  63. package/project/.sdk/src/cmp/php/TestEntity_php.ts +101 -54
  64. package/project/.sdk/src/cmp/py/Config_py.ts +9 -4
  65. package/project/.sdk/src/cmp/py/ReadmeEntity_py.ts +138 -0
  66. package/project/.sdk/src/cmp/py/ReadmeHowto_py.ts +6 -3
  67. package/project/.sdk/src/cmp/py/ReadmeIntro_py.ts +18 -0
  68. package/project/.sdk/src/cmp/py/ReadmeModel_py.ts +6 -3
  69. package/project/.sdk/src/cmp/py/ReadmeOptions_py.ts +58 -0
  70. package/project/.sdk/src/cmp/py/ReadmeQuick_py.ts +9 -6
  71. package/project/.sdk/src/cmp/py/ReadmeRef_py.ts +356 -0
  72. package/project/.sdk/src/cmp/py/ReadmeTopQuick_py.ts +9 -6
  73. package/project/.sdk/src/cmp/py/TestDirect_py.ts +18 -8
  74. package/project/.sdk/src/cmp/py/TestEntity_py.ts +100 -50
  75. package/project/.sdk/src/cmp/rb/Config_rb.ts +9 -4
  76. package/project/.sdk/src/cmp/rb/ReadmeEntity_rb.ts +138 -0
  77. package/project/.sdk/src/cmp/rb/ReadmeHowto_rb.ts +6 -3
  78. package/project/.sdk/src/cmp/rb/ReadmeIntro_rb.ts +18 -0
  79. package/project/.sdk/src/cmp/rb/ReadmeModel_rb.ts +6 -3
  80. package/project/.sdk/src/cmp/rb/ReadmeOptions_rb.ts +58 -0
  81. package/project/.sdk/src/cmp/rb/ReadmeQuick_rb.ts +6 -4
  82. package/project/.sdk/src/cmp/rb/ReadmeRef_rb.ts +361 -0
  83. package/project/.sdk/src/cmp/rb/ReadmeTopQuick_rb.ts +6 -4
  84. package/project/.sdk/src/cmp/rb/TestDirect_rb.ts +18 -8
  85. package/project/.sdk/src/cmp/rb/TestEntity_rb.ts +95 -51
  86. package/project/.sdk/src/cmp/ts/Config_ts.ts +18 -0
  87. package/project/.sdk/src/cmp/ts/ReadmeEntity_ts.ts +138 -0
  88. package/project/.sdk/src/cmp/ts/ReadmeHowto_ts.ts +11 -6
  89. package/project/.sdk/src/cmp/ts/ReadmeIntro_ts.ts +18 -0
  90. package/project/.sdk/src/cmp/ts/ReadmeModel_ts.ts +9 -5
  91. package/project/.sdk/src/cmp/ts/ReadmeOptions_ts.ts +58 -0
  92. package/project/.sdk/src/cmp/ts/ReadmeQuick_ts.ts +6 -4
  93. package/project/.sdk/src/cmp/ts/ReadmeRef_ts.ts +384 -0
  94. package/project/.sdk/src/cmp/ts/ReadmeTopQuick_ts.ts +6 -4
  95. package/project/.sdk/src/cmp/ts/TestDirect_ts.ts +68 -20
  96. package/project/.sdk/src/cmp/ts/TestEntity_ts.ts +109 -74
  97. package/project/.sdk/src/cmp/ts/fragment/Config.fragment.ts +1 -5
  98. package/project/.sdk/tm/go/utility/prepare_auth.go +15 -1
  99. package/project/.sdk/tm/js/src/utility/PrepareAuthUtility.js +7 -1
  100. package/project/.sdk/tm/lua/utility/prepare_auth.lua +9 -1
  101. package/project/.sdk/tm/php/utility/PrepareAuth.php +11 -1
  102. package/project/.sdk/tm/py/utility/prepare_auth.py +10 -1
  103. package/project/.sdk/tm/rb/utility/prepare_auth.rb +8 -1
  104. package/project/.sdk/tm/ts/src/utility/MakeUrlUtility.ts +7 -8
  105. package/project/.sdk/tm/ts/src/utility/PrepareAuthUtility.ts +7 -1
  106. package/src/cmp/ReadmeEntity.ts +11 -178
  107. package/src/cmp/ReadmeIntro.ts +11 -25
  108. package/src/cmp/ReadmeModel.ts +7 -5
  109. package/src/cmp/ReadmeOptions.ts +12 -74
  110. package/src/cmp/ReadmeRef.ts +11 -1372
  111. package/src/sdkgen.ts +2 -1
  112. package/src/utility.ts +12 -0
  113. /package/project/.sdk/tm/go/utility/{make_target.go → make_point.go} +0 -0
@@ -0,0 +1,361 @@
1
+
2
+ import { cmp, each, Content, File, isAuthActive } from '@voxgig/sdkgen'
3
+
4
+ import {
5
+ KIT,
6
+ getModelPath,
7
+ } from '@voxgig/apidef'
8
+
9
+
10
+ const OP_SIGNATURES: Record<string, { sig: string, returns: string, desc: string }> = {
11
+ load: {
12
+ sig: 'load(reqmatch, ctrl = nil) -> result, err',
13
+ returns: 'result, err',
14
+ desc: 'Load a single entity matching the given criteria.',
15
+ },
16
+ list: {
17
+ sig: 'list(reqmatch, ctrl = nil) -> result, err',
18
+ returns: 'result, err',
19
+ desc: 'List entities matching the given criteria. Returns an array.',
20
+ },
21
+ create: {
22
+ sig: 'create(reqdata, ctrl = nil) -> result, err',
23
+ returns: 'result, err',
24
+ desc: 'Create a new entity with the given data.',
25
+ },
26
+ update: {
27
+ sig: 'update(reqdata, ctrl = nil) -> result, err',
28
+ returns: 'result, err',
29
+ desc: 'Update an existing entity. The data must include the entity `id`.',
30
+ },
31
+ remove: {
32
+ sig: 'remove(reqmatch, ctrl = nil) -> result, err',
33
+ returns: 'result, err',
34
+ desc: 'Remove the entity matching the given criteria.',
35
+ },
36
+ }
37
+
38
+
39
+ const ReadmeRef = cmp(function ReadmeRef(props: any) {
40
+ const { target } = props
41
+ const { model } = props.ctx$
42
+
43
+ const entity = getModelPath(model, `main.${KIT}.entity`)
44
+ const feature = getModelPath(model, `main.${KIT}.feature`)
45
+
46
+ const publishedEntities = each(entity).filter((e: any) => e.active !== false)
47
+
48
+
49
+ File({ name: 'REFERENCE.md' }, () => {
50
+
51
+ Content(`# ${model.Name} ${target.title} SDK Reference
52
+
53
+ Complete API reference for the ${model.Name} ${target.title} SDK.
54
+
55
+
56
+ ## ${model.Name}SDK
57
+
58
+ ### Constructor
59
+
60
+ `)
61
+
62
+ Content(`\`\`\`ruby
63
+ require_relative '${model.name}_sdk'
64
+
65
+ client = ${model.const.Name}SDK.new(options)
66
+ \`\`\`
67
+
68
+ Create a new SDK client instance.
69
+
70
+ **Parameters:**
71
+
72
+ | Name | Type | Description |
73
+ | --- | --- | --- |
74
+ | \`options\` | \`Hash\` | SDK configuration options. |
75
+ | \`options["apikey"]\` | \`String\` | API key for authentication. |
76
+ | \`options["base"]\` | \`String\` | Base URL for API requests. |
77
+ | \`options["prefix"]\` | \`String\` | URL prefix appended after base. |
78
+ | \`options["suffix"]\` | \`String\` | URL suffix appended after path. |
79
+ | \`options["headers"]\` | \`Hash\` | Custom headers for all requests. |
80
+ | \`options["feature"]\` | \`Hash\` | Feature configuration. |
81
+ | \`options["system"]\` | \`Hash\` | System overrides (e.g. custom fetch). |
82
+
83
+ `)
84
+
85
+
86
+ Content(`
87
+ ### Static Methods
88
+
89
+ `)
90
+
91
+ Content(`#### \`${model.const.Name}SDK.test(testopts = nil, sdkopts = nil)\`
92
+
93
+ Create a test client with mock features active. Both arguments may be \`nil\`.
94
+
95
+ \`\`\`ruby
96
+ client = ${model.const.Name}SDK.test
97
+ \`\`\`
98
+
99
+ `)
100
+
101
+
102
+ Content(`
103
+ ### Instance Methods
104
+
105
+ `)
106
+
107
+
108
+ // Entity factory methods
109
+ publishedEntities.map((ent: any) => {
110
+ Content(`#### \`${ent.Name}(data = nil)\`
111
+
112
+ Create a new \`${ent.Name}\` entity instance. Pass \`nil\` for no initial data.
113
+
114
+ `)
115
+ })
116
+
117
+
118
+ Content(`#### \`options_map -> Hash\`
119
+
120
+ Return a deep copy of the current SDK options.
121
+
122
+ #### \`get_utility -> Utility\`
123
+
124
+ Return a copy of the SDK utility object.
125
+
126
+ #### \`direct(fetchargs = {}) -> Hash, err\`
127
+
128
+ Make a direct HTTP request to any API endpoint.
129
+
130
+ **Parameters:**
131
+
132
+ | Name | Type | Description |
133
+ | --- | --- | --- |
134
+ | \`fetchargs["path"]\` | \`String\` | URL path with optional \`{param}\` placeholders. |
135
+ | \`fetchargs["method"]\` | \`String\` | HTTP method (default: \`"GET"\`). |
136
+ | \`fetchargs["params"]\` | \`Hash\` | Path parameter values for \`{param}\` substitution. |
137
+ | \`fetchargs["query"]\` | \`Hash\` | Query string parameters. |
138
+ | \`fetchargs["headers"]\` | \`Hash\` | Request headers (merged with defaults). |
139
+ | \`fetchargs["body"]\` | \`any\` | Request body (hashes are JSON-serialized). |
140
+ | \`fetchargs["ctrl"]\` | \`Hash\` | Control options (e.g. \`{ "explain" => true }\`). |
141
+
142
+ **Returns:** \`Hash, err\`
143
+
144
+ #### \`prepare(fetchargs = {}) -> Hash, err\`
145
+
146
+ Prepare a fetch definition without sending the request. Accepts the
147
+ same parameters as \`direct()\`.
148
+
149
+ **Returns:** \`Hash, err\`
150
+
151
+ `)
152
+
153
+
154
+ // Entity reference sections
155
+ publishedEntities.map((ent: any) => {
156
+ const opnames = Object.keys(ent.op || {})
157
+ const fields = ent.fields || []
158
+
159
+ Content(`
160
+ ---
161
+
162
+ ## ${ent.Name}Entity
163
+
164
+ `)
165
+
166
+ if (ent.short) {
167
+ Content(`${ent.short}
168
+
169
+ `)
170
+ }
171
+
172
+ Content(`\`\`\`ruby
173
+ ${ent.name} = client.${ent.Name}
174
+ \`\`\`
175
+
176
+ `)
177
+
178
+
179
+ // Field schema
180
+ if (fields.length > 0) {
181
+ Content(`### Fields
182
+
183
+ | Field | Type | Required | Description |
184
+ | --- | --- | --- | --- |
185
+ `)
186
+ each(fields, (field: any) => {
187
+ const req = field.req ? 'Yes' : 'No'
188
+ const desc = field.short || ''
189
+ Content(`| \`${field.name}\` | \`${field.type || 'any'}\` | ${req} | ${desc} |
190
+ `)
191
+ })
192
+
193
+ Content(`
194
+ `)
195
+
196
+ // Field operations breakdown
197
+ const hasFieldOps = fields.some((f: any) => f.op && Object.keys(f.op).length > 0)
198
+ if (hasFieldOps) {
199
+ Content(`### Field Usage by Operation
200
+
201
+ | Field | load | list | create | update | remove |
202
+ | --- | --- | --- | --- | --- | --- |
203
+ `)
204
+ each(fields, (field: any) => {
205
+ const fops = field.op || {}
206
+ const cols = ['load', 'list', 'create', 'update', 'remove'].map((op: string) => {
207
+ if (!opnames.includes(op)) return '-'
208
+ const fop = fops[op]
209
+ if (null == fop) return '-'
210
+ if (fop.active === false) return '-'
211
+ return 'Yes'
212
+ })
213
+ Content(`| \`${field.name}\` | ${cols.join(' | ')} |
214
+ `)
215
+ })
216
+
217
+ Content(`
218
+ `)
219
+ }
220
+ }
221
+
222
+
223
+ // Operation details
224
+ if (opnames.length > 0) {
225
+ Content(`### Operations
226
+
227
+ `)
228
+
229
+ opnames.map((opname: string) => {
230
+ const info = OP_SIGNATURES[opname]
231
+ if (!info) return
232
+
233
+ Content(`#### \`${info.sig}\`
234
+
235
+ ${info.desc}
236
+
237
+ `)
238
+
239
+ // Show example
240
+ if ('load' === opname || 'remove' === opname) {
241
+ Content(`\`\`\`ruby
242
+ result, err = client.${ent.Name}.${opname}({ "id" => "${ent.name}_id" })
243
+ \`\`\`
244
+
245
+ `)
246
+ }
247
+ else if ('list' === opname) {
248
+ Content(`\`\`\`ruby
249
+ results, err = client.${ent.Name}.list(nil)
250
+ \`\`\`
251
+
252
+ `)
253
+ }
254
+ else if ('create' === opname) {
255
+ Content(`\`\`\`ruby
256
+ result, err = client.${ent.Name}.create({
257
+ `)
258
+ each(fields, (field: any) => {
259
+ if ('id' !== field.name && field.req) {
260
+ Content(` "${field.name}" => # ${field.type || 'value'},
261
+ `)
262
+ }
263
+ })
264
+ Content(`})
265
+ \`\`\`
266
+
267
+ `)
268
+ }
269
+ else if ('update' === opname) {
270
+ Content(`\`\`\`ruby
271
+ result, err = client.${ent.Name}.update({
272
+ "id" => "${ent.name}_id",
273
+ # Fields to update
274
+ })
275
+ \`\`\`
276
+
277
+ `)
278
+ }
279
+ })
280
+ }
281
+
282
+
283
+ // Common methods
284
+ Content(`### Common Methods
285
+
286
+ #### \`data_get -> Hash\`
287
+
288
+ Get the entity data. Returns a copy of the current data.
289
+
290
+ #### \`data_set(data)\`
291
+
292
+ Set the entity data.
293
+
294
+ #### \`match_get -> Hash\`
295
+
296
+ Get the entity match criteria.
297
+
298
+ #### \`match_set(match)\`
299
+
300
+ Set the entity match criteria.
301
+
302
+ #### \`make -> Entity\`
303
+
304
+ Create a new \`${ent.Name}Entity\` instance with the same client and
305
+ options.
306
+
307
+ #### \`get_name -> String\`
308
+
309
+ Return the entity name.
310
+
311
+ `)
312
+ })
313
+
314
+
315
+ // Features section
316
+ const activeFeatures = each(feature).filter((f: any) => f.active)
317
+ if (activeFeatures.length > 0) {
318
+ Content(`
319
+ ---
320
+
321
+ ## Features
322
+
323
+ | Feature | Version | Description |
324
+ | --- | --- | --- |
325
+ `)
326
+
327
+ activeFeatures.map((f: any) => {
328
+ Content(`| \`${f.name}\` | ${f.version || '0.0.1'} | ${f.title || ''} |
329
+ `)
330
+ })
331
+
332
+ Content(`
333
+
334
+ Features are activated via the \`feature\` option:
335
+
336
+ `)
337
+
338
+ Content(`\`\`\`ruby
339
+ client = ${model.const.Name}SDK.new({
340
+ "feature" => {
341
+ `)
342
+ activeFeatures.map((f: any) => {
343
+ Content(` "${f.name}" => { "active" => true },
344
+ `)
345
+ })
346
+ Content(` },
347
+ })
348
+ \`\`\`
349
+
350
+ `)
351
+ }
352
+
353
+ })
354
+ })
355
+
356
+
357
+
358
+
359
+ export {
360
+ ReadmeRef
361
+ }
@@ -1,5 +1,5 @@
1
1
 
2
- import { cmp, Content } from '@voxgig/sdkgen'
2
+ import { cmp, Content, isAuthActive } from '@voxgig/sdkgen'
3
3
 
4
4
  import {
5
5
  KIT,
@@ -15,12 +15,14 @@ const ReadmeTopQuick = cmp(function ReadmeTopQuick(props: any) {
15
15
 
16
16
  const exampleEntity = Object.values(entity).find((e: any) => e.active !== false) as any
17
17
 
18
+ const apikeyArg = isAuthActive(model)
19
+ ? `\n "apikey" => ENV["${model.NAME}_APIKEY"],\n`
20
+ : ''
21
+
18
22
  Content(`\`\`\`ruby
19
23
  require_relative "${model.const.Name}_sdk"
20
24
 
21
- client = ${model.const.Name}SDK.new({
22
- "apikey" => ENV["${model.NAME}_APIKEY"],
23
- })
25
+ client = ${model.const.Name}SDK.new({${apikeyArg}})
24
26
 
25
27
  `)
26
28
 
@@ -1,5 +1,8 @@
1
1
 
2
2
  import {
3
+ Model,
4
+ ModelEntity,
5
+ nom,
3
6
  depluralize,
4
7
  } from '@voxgig/apidef'
5
8
 
@@ -8,6 +11,7 @@ import {
8
11
  File,
9
12
  cmp,
10
13
  snakify,
14
+ isAuthActive,
11
15
  } from '@voxgig/sdkgen'
12
16
 
13
17
 
@@ -51,12 +55,20 @@ function normalizePathParams(
51
55
 
52
56
  const TestDirect = cmp(function TestDirect(props: any) {
53
57
  const ctx$ = props.ctx$
54
- const model = ctx$.model
58
+ const model: Model = ctx$.model
55
59
 
56
60
  const target = props.target
57
- const entity = props.entity
61
+ const entity: ModelEntity = props.entity
58
62
 
59
- const PROJECTNAME = model.Name.toUpperCase().replace(/[^A-Z_]/g, '_')
63
+ const PROJECTNAME = nom(model, 'Name').toUpperCase().replace(/[^A-Z_]/g, '_')
64
+
65
+ const authActive = isAuthActive(model)
66
+ const apikeyEnvEntry = authActive
67
+ ? `\n "${PROJECTNAME}_APIKEY" => "NONE",`
68
+ : ''
69
+ const apikeyLiveField = authActive
70
+ ? `\n "apikey" => env["${PROJECTNAME}_APIKEY"],`
71
+ : ''
60
72
 
61
73
  const opnames = Object.keys(entity.op)
62
74
  const hasLoad = opnames.includes('load')
@@ -77,7 +89,7 @@ const TestDirect = cmp(function TestDirect(props: any) {
77
89
  const listPath = listPoint ? normalizePathParams(listPoint.parts || [], listPoint?.args?.params || [], listPoint?.rename?.param) : ''
78
90
  const listParams = listPoint?.args?.params || []
79
91
 
80
- const entidEnvVar = `${PROJECTNAME}_TEST_${entity.Name.toUpperCase().replace(/[^A-Z_]/g, '_')}_ENTID`
92
+ const entidEnvVar = `${PROJECTNAME}_TEST_${nom(entity, 'NAME').replace(/[^A-Z_]/g, '_')}_ENTID`
81
93
 
82
94
  File({ name: entity.name + '_direct_test.' + target.ext }, () => {
83
95
 
@@ -204,15 +216,13 @@ def ${entity.name}_direct_setup(mockres)
204
216
 
205
217
  env = Runner.env_override({
206
218
  "${entidEnvVar}" => {},
207
- "${PROJECTNAME}_TEST_LIVE" => "FALSE",
208
- "${PROJECTNAME}_APIKEY" => "NONE",
219
+ "${PROJECTNAME}_TEST_LIVE" => "FALSE",${apikeyEnvEntry}
209
220
  })
210
221
 
211
222
  live = env["${PROJECTNAME}_TEST_LIVE"] == "TRUE"
212
223
 
213
224
  if live
214
- merged_opts = {
215
- "apikey" => env["${PROJECTNAME}_APIKEY"],
225
+ merged_opts = {${apikeyLiveField}
216
226
  }
217
227
  client = ${model.const.Name}SDK.new(merged_opts)
218
228
  return {