@voxgig/sdkgen 4.6.0 → 4.7.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.
- package/bin/voxgig-sdkgen +1 -1
- package/dist/cmp/Feature.js +5 -0
- package/dist/cmp/Feature.js.map +1 -1
- package/dist/cmp/TestControl.d.ts +4 -0
- package/dist/cmp/TestControl.js +51 -0
- package/dist/cmp/TestControl.js.map +1 -0
- package/dist/helpers/featureSource.d.ts +3 -1
- package/dist/helpers/featureSource.js +105 -0
- package/dist/helpers/featureSource.js.map +1 -1
- package/dist/sdkgen.d.ts +3 -2
- package/dist/sdkgen.js +9 -4
- package/dist/sdkgen.js.map +1 -1
- package/dist/tsconfig.tsbuildinfo +1 -1
- package/dist/utility.d.ts +2 -1
- package/dist/utility.js +52 -0
- package/dist/utility.js.map +1 -1
- package/model/sdkgen.aon +58 -0
- package/package.json +1 -1
- package/project/.sdk/model/feature/secrets.aon +82 -0
- package/project/.sdk/src/cmp/cpp/Main_cpp.ts +2 -1
- package/project/.sdk/src/cmp/cpp/Test_cpp.ts +5 -1
- package/project/.sdk/src/cmp/csharp/Main_csharp.ts +2 -1
- package/project/.sdk/src/cmp/csharp/TestDirect_csharp.ts +30 -6
- package/project/.sdk/src/cmp/csharp/TestEntity_csharp.ts +29 -5
- package/project/.sdk/src/cmp/csharp/Test_csharp.ts +5 -1
- package/project/.sdk/src/cmp/dart/Main_dart.ts +2 -1
- package/project/.sdk/src/cmp/dart/TestDirect_dart.ts +23 -6
- package/project/.sdk/src/cmp/dart/TestEntity_dart.ts +28 -7
- package/project/.sdk/src/cmp/dart/Test_dart.ts +5 -1
- package/project/.sdk/src/cmp/go/Main_go.ts +2 -1
- package/project/.sdk/src/cmp/go/Test_go.ts +5 -1
- package/project/.sdk/src/cmp/java/Main_java.ts +2 -1
- package/project/.sdk/src/cmp/java/Test_java.ts +5 -1
- package/project/.sdk/src/cmp/js/Main_js.ts +2 -1
- package/project/.sdk/src/cmp/js/TestDirect_js.ts +30 -5
- package/project/.sdk/src/cmp/js/TestEntity_js.ts +35 -5
- package/project/.sdk/src/cmp/js/Test_js.ts +5 -1
- package/project/.sdk/src/cmp/js/fragment/Direct.test.fragment.js +7 -1
- package/project/.sdk/src/cmp/js/fragment/Entity.test.fragment.js +7 -1
- package/project/.sdk/src/cmp/kotlin/Main_kotlin.ts +2 -1
- package/project/.sdk/src/cmp/kotlin/Test_kotlin.ts +5 -1
- package/project/.sdk/src/cmp/lua/Main_lua.ts +2 -1
- package/project/.sdk/src/cmp/lua/TestDirect_lua.ts +28 -4
- package/project/.sdk/src/cmp/lua/TestEntity_lua.ts +24 -4
- package/project/.sdk/src/cmp/lua/Test_lua.ts +5 -1
- package/project/.sdk/src/cmp/ocaml/Gitignore_ocaml.ts +1 -0
- package/project/.sdk/src/cmp/perl/Main_perl.ts +2 -1
- package/project/.sdk/src/cmp/perl/TestDirect_perl.ts +25 -4
- package/project/.sdk/src/cmp/perl/TestEntity_perl.ts +24 -4
- package/project/.sdk/src/cmp/perl/Test_perl.ts +5 -1
- package/project/.sdk/src/cmp/perl/utility_perl.ts +10 -0
- package/project/.sdk/src/cmp/php/Main_php.ts +2 -1
- package/project/.sdk/src/cmp/php/TestDirect_php.ts +24 -5
- package/project/.sdk/src/cmp/php/TestEntity_php.ts +28 -4
- package/project/.sdk/src/cmp/php/Test_php.ts +5 -1
- package/project/.sdk/src/cmp/py/Main_py.ts +2 -1
- package/project/.sdk/src/cmp/py/Test_py.ts +5 -1
- package/project/.sdk/src/cmp/rb/Main_rb.ts +2 -1
- package/project/.sdk/src/cmp/rb/TestDirect_rb.ts +24 -5
- package/project/.sdk/src/cmp/rb/TestEntity_rb.ts +24 -4
- package/project/.sdk/src/cmp/rb/Test_rb.ts +5 -1
- package/project/.sdk/src/cmp/rb/utility_rb.ts +3 -1
- package/project/.sdk/src/cmp/rust/Main_rust.ts +2 -1
- package/project/.sdk/src/cmp/rust/TestDirect_rust.ts +31 -4
- package/project/.sdk/src/cmp/rust/TestEntity_rust.ts +37 -4
- package/project/.sdk/src/cmp/rust/Test_rust.ts +5 -1
- package/project/.sdk/src/cmp/scala/Main_scala.ts +2 -1
- package/project/.sdk/src/cmp/scala/Test_scala.ts +5 -1
- package/project/.sdk/src/cmp/ts/Config_ts.ts +50 -8
- package/project/.sdk/src/cmp/ts/Main_ts.ts +10 -2
- package/project/.sdk/src/cmp/ts/TestDirect_ts.ts +10 -3
- package/project/.sdk/src/cmp/ts/TestEntity_ts.ts +11 -3
- package/project/.sdk/src/cmp/ts/Test_ts.ts +5 -1
- package/project/.sdk/tm/csharp/test/Runner.cs +45 -0
- package/project/.sdk/tm/dart/test/utility.dart +39 -0
- package/project/.sdk/tm/js/test/sdk-test-control.json +19 -0
- package/project/.sdk/tm/js/test/utility.js +91 -1
- package/project/.sdk/tm/lua/test/runner.lua +40 -0
- package/project/.sdk/tm/ocaml/test/harness.ml +14 -4
- package/project/.sdk/tm/perl/t/runner.pm +30 -0
- package/project/.sdk/tm/php/test/Runner.php +36 -0
- package/project/.sdk/tm/rb/test/runner.rb +25 -0
- package/project/.sdk/tm/rust/tests/common/mod.rs +32 -0
- package/project/.sdk/tm/rust/utility/make_options.rs +1 -1
- package/project/.sdk/tm/ts/src/feature/secrets/sekreto/Sekreto.ts +8 -2
- package/project/.sdk/tm/ts/src/feature/secrets/sekreto/Sigv4.ts +29 -5
- package/project/.sdk/tm/ts/src/feature/secrets/sekreto/index.ts +30 -21
- package/project/.sdk/tm/ts/src/feature/secrets/sekreto/provider/Registry.ts +90 -0
- package/project/.sdk/tm/ts/src/feature/secrets/sekreto/provider/addr.ts +48 -0
- package/project/.sdk/tm/ts/src/feature/secrets/sekreto/provider/aws.ts +219 -0
- package/project/.sdk/tm/ts/src/feature/secrets/sekreto/provider/azuresecrets.ts +144 -0
- package/project/.sdk/tm/ts/src/feature/secrets/sekreto/provider/boru.ts +113 -0
- package/project/.sdk/tm/ts/src/feature/secrets/sekreto/provider/doppler.ts +77 -0
- package/project/.sdk/tm/ts/src/feature/secrets/sekreto/provider/dotenv.ts +51 -0
- package/project/.sdk/tm/ts/src/feature/secrets/sekreto/provider/env.ts +31 -0
- package/project/.sdk/tm/ts/src/feature/secrets/sekreto/provider/file.ts +54 -0
- package/project/.sdk/tm/ts/src/feature/secrets/sekreto/provider/gcpsecrets.ts +118 -0
- package/project/.sdk/tm/ts/src/feature/secrets/sekreto/provider/hashicorp.ts +159 -0
- package/project/.sdk/tm/ts/src/feature/secrets/sekreto/provider/http.ts +66 -0
- package/project/.sdk/tm/ts/src/feature/secrets/sekreto/provider/infisical.ts +107 -0
- package/project/.sdk/tm/ts/src/feature/secrets/sekreto/provider/memory.ts +33 -0
- package/project/.sdk/tm/ts/src/feature/secrets/sekreto/provider/onepassword.ts +120 -0
- package/project/.sdk/tm/ts/src/feature/secrets/sekreto/provider/support.ts +176 -0
- package/project/.sdk/tm/ts/test/vendor/omni/Runner.ts +15 -13
- package/project/.sdk/tm/ts/test/vendor/omni/Util.ts +25 -19
- package/project/.sdk/tm/ts/test/vendor/omni/compat.ts +1 -1
- package/project/.sdk/tm/ts/test/vendor/omni/index.ts +1 -1
- package/project/.sdk/tm/zig/core/utility.zig +1 -1
- package/project/sdkgen-package.json +1 -1
- package/src/cmp/Feature.ts +5 -0
- package/src/cmp/TestControl.ts +64 -0
- package/src/helpers/featureSource.ts +130 -0
- package/src/sdkgen.ts +7 -0
- package/src/utility.ts +61 -0
- package/project/.sdk/tm/ts/src/feature/secrets/sekreto/Providers.ts +0 -1221
package/dist/utility.js
CHANGED
|
@@ -8,6 +8,7 @@ exports.resolvePath = resolvePath;
|
|
|
8
8
|
exports.requirePath = requirePath;
|
|
9
9
|
exports.isAuthActive = isAuthActive;
|
|
10
10
|
exports.resolveAuthPrefix = resolveAuthPrefix;
|
|
11
|
+
exports.resolveAuthExchange = resolveAuthExchange;
|
|
11
12
|
exports.isHttpBasicAuth = isHttpBasicAuth;
|
|
12
13
|
exports.isConfigData = isConfigData;
|
|
13
14
|
exports.configRepr = configRepr;
|
|
@@ -78,6 +79,29 @@ function isHttpBasicAuth(model) {
|
|
|
78
79
|
return null != security && 'http' === security.type &&
|
|
79
80
|
'basic' === String(security.prefix || '').toLowerCase();
|
|
80
81
|
}
|
|
82
|
+
// The API's ACCESS-TOKEN EXCHANGE, as apidef recorded it from the spec
|
|
83
|
+
// (main.kit.info.security.exchange): where the token endpoint lives, and the
|
|
84
|
+
// field names it sends and answers with. Null when the spec describes none,
|
|
85
|
+
// which is the common case.
|
|
86
|
+
//
|
|
87
|
+
// These are FACTS ABOUT THE API, so they belong in the generated config
|
|
88
|
+
// rather than in a project's hand-written model: an SDK whose spec says the
|
|
89
|
+
// exchange is at `auth/token` should not need to be told so again. A feature
|
|
90
|
+
// opts in to receiving them with `spec: { authexchange: '<options-key>' }`;
|
|
91
|
+
// configDefinition does the overlay.
|
|
92
|
+
//
|
|
93
|
+
// Deliberately NOT included: `active`. Whether a client performs the
|
|
94
|
+
// exchange is the project's decision (some resolve a static credential
|
|
95
|
+
// through the same feature on an API that also has a token endpoint), so
|
|
96
|
+
// apidef records only what the exchange IS, never that it should run.
|
|
97
|
+
function resolveAuthExchange(model) {
|
|
98
|
+
const security = (0, apidef_1.getModelPath)(model, `main.${apidef_1.KIT}.info.security`, { only_active: false, required: false });
|
|
99
|
+
const exchange = security?.exchange;
|
|
100
|
+
if (null == exchange || 'object' !== typeof exchange) {
|
|
101
|
+
return null;
|
|
102
|
+
}
|
|
103
|
+
return exchange;
|
|
104
|
+
}
|
|
81
105
|
function requirePath(ctx$, path, flags) {
|
|
82
106
|
const fullpath = resolvePath(ctx$, path);
|
|
83
107
|
const ignore = null == flags?.ignore ? false : flags.ignore;
|
|
@@ -263,6 +287,13 @@ function clean(o, dropDefaults) {
|
|
|
263
287
|
function rawStringLiteral(s) {
|
|
264
288
|
return "'" + s.replace(/\\/g, '\\\\').replace(/'/g, "\\'") + "'";
|
|
265
289
|
}
|
|
290
|
+
// The closed vocabulary of spec-derived facts a feature may ask for by
|
|
291
|
+
// declaring `spec: { <fact>: <options-key> }`. Closed, and resolved through
|
|
292
|
+
// one function each, so a feature cannot reach arbitrarily into the model
|
|
293
|
+
// and a fact's shape is defined in exactly one place.
|
|
294
|
+
const SPEC_FACTS = {
|
|
295
|
+
authexchange: resolveAuthExchange,
|
|
296
|
+
};
|
|
266
297
|
// THE CANONICAL CONFIG OBJECT, and the JSON the threshold is measured on.
|
|
267
298
|
//
|
|
268
299
|
// Every target builds its config from this one function, so the literal a
|
|
@@ -319,6 +350,27 @@ function configDefinition(model, targetname) {
|
|
|
319
350
|
if (null != f.transport && '' !== f.transport) {
|
|
320
351
|
fdef.transport = String(f.transport);
|
|
321
352
|
}
|
|
353
|
+
// SPEC-DERIVED OPTIONS. A feature declares `spec: { <fact>: <options
|
|
354
|
+
// key> }` to receive facts apidef recorded from the OpenAPI spec — the
|
|
355
|
+
// same declare-never-infer rule `needs` and `transport` follow, and for
|
|
356
|
+
// the same reason: the alternative is this function knowing feature
|
|
357
|
+
// names, which is exactly the coupling the generic feature loop exists
|
|
358
|
+
// to avoid.
|
|
359
|
+
//
|
|
360
|
+
// The fact overlays the feature's DECLARED DEFAULTS, and rightly: a
|
|
361
|
+
// default like `path: 'auth/token'` is a generic guess, while the spec
|
|
362
|
+
// states where this API's endpoint actually is. A project that needs
|
|
363
|
+
// something else still overrides at runtime through `options.feature`,
|
|
364
|
+
// which beats the embedded config either way.
|
|
365
|
+
for (const factname of Object.keys(f.spec || {}).sort()) {
|
|
366
|
+
const optkey = f.spec[factname];
|
|
367
|
+
const fact = SPEC_FACTS[factname]?.(model);
|
|
368
|
+
if (null == fact || null == optkey || '' === optkey) {
|
|
369
|
+
continue;
|
|
370
|
+
}
|
|
371
|
+
fdef.options = { ...(fdef.options || {}) };
|
|
372
|
+
fdef.options[optkey] = { ...(fdef.options[optkey] || {}), ...fact };
|
|
373
|
+
}
|
|
322
374
|
featureDefs[f.name] = fdef;
|
|
323
375
|
});
|
|
324
376
|
const options = { base: baseUrl };
|
package/dist/utility.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"utility.js","sourceRoot":"","sources":["../src/utility.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"utility.js","sourceRoot":"","sources":["../src/utility.ts"],"names":[],"mappings":"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"}
|
package/model/sdkgen.aon
CHANGED
|
@@ -469,6 +469,64 @@ main: kit: feature: &: {
|
|
|
469
469
|
# feature that both wraps AND dispatches hooks (station does).
|
|
470
470
|
transport: *'none' | 'base' | 'wrap'
|
|
471
471
|
|
|
472
|
+
# SPEC-DERIVED OPTIONS. Facts apidef records from the OpenAPI spec, mapped
|
|
473
|
+
# onto the key in this feature's `config.options` that should carry them:
|
|
474
|
+
#
|
|
475
|
+
# spec: { authexchange: 'exchange' }
|
|
476
|
+
#
|
|
477
|
+
# configDefinition performs the overlay at generation time, so the fact
|
|
478
|
+
# reaches the SDK's embedded config without a project restating what its
|
|
479
|
+
# own spec already says. The fact name comes from a CLOSED vocabulary
|
|
480
|
+
# (`SPEC_FACTS` in ts/src/utility.ts); an unknown name is ignored rather
|
|
481
|
+
# than failing, so a project on an older sdkgen is unaffected.
|
|
482
|
+
#
|
|
483
|
+
# A map keyed by fact name, for the same reason `needs` is a map: aontu
|
|
484
|
+
# unifies maps by key, so a package can add one entry without restating
|
|
485
|
+
# the others.
|
|
486
|
+
spec: &: string
|
|
487
|
+
|
|
488
|
+
# PLUGINS — a feature's optional, separately-trimmed parts.
|
|
489
|
+
#
|
|
490
|
+
# A feature whose implementation is a thin layer over a library with
|
|
491
|
+
# OPTIONAL pieces (secrets over sekreto, whose thirteen provider kinds
|
|
492
|
+
# each carry their own platform cost) declares them here. Each plugin
|
|
493
|
+
# owns a template subfolder under the feature's own tree, and the
|
|
494
|
+
# feature trim removes an inactive one exactly as it removes an
|
|
495
|
+
# inactive feature — the same walk, one level deeper.
|
|
496
|
+
#
|
|
497
|
+
# This is what makes a generated SDK lean: a project whose chain is
|
|
498
|
+
# `[dotenv, env]` should not carry AWS request signing and seven HTTP
|
|
499
|
+
# vault clients, and before this it carried all of them because they
|
|
500
|
+
# were reachable from one import.
|
|
501
|
+
#
|
|
502
|
+
# `needs` is the same closed applicability vocabulary a feature uses,
|
|
503
|
+
# so a plugin requiring something of its target is gated the same way.
|
|
504
|
+
plugin: &: {
|
|
505
|
+
name: key()
|
|
506
|
+
active: *false | boolean
|
|
507
|
+
title: *'' | string
|
|
508
|
+
|
|
509
|
+
# What this plugin needs of the RUNTIME - 'fs', 'fetch', 'crypto'.
|
|
510
|
+
# Declared so a target that cannot provide it is refused at
|
|
511
|
+
# generation rather than at the consumer's first lookup.
|
|
512
|
+
needs: &: boolean
|
|
513
|
+
|
|
514
|
+
# The template paths this plugin OWNS, relative to the target
|
|
515
|
+
# template root, dropped when it is inactive.
|
|
516
|
+
#
|
|
517
|
+
# Declared rather than derived from a `plugin/<name>/` directory
|
|
518
|
+
# convention, because the files a plugin owns are frequently NOT
|
|
519
|
+
# free to move. sekreto's provider modules are VENDORED: the
|
|
520
|
+
# vendoring guard holds each file against its upstream path, and
|
|
521
|
+
# their relative imports (`./support`, `../Sigv4`) only resolve at
|
|
522
|
+
# upstream's own directory depth. Relocating them under a
|
|
523
|
+
# convention would break both at once.
|
|
524
|
+
#
|
|
525
|
+
# Empty means the convention — `src/feature/<feature>/plugin/<name>/`
|
|
526
|
+
# — which is right for a plugin whose files sdkgen owns outright.
|
|
527
|
+
path: *[] | [&: string]
|
|
528
|
+
}
|
|
529
|
+
|
|
472
530
|
hook: &: {
|
|
473
531
|
active: *false | boolean
|
|
474
532
|
await: *false | boolean
|
package/package.json
CHANGED
|
@@ -23,6 +23,88 @@ main: kit: feature: secrets: {
|
|
|
23
23
|
# carry an import for a class it has no source for.
|
|
24
24
|
needs: { sekreto: true }
|
|
25
25
|
|
|
26
|
+
# SPEC-DERIVED OPTIONS. apidef recognises an API's access-token exchange
|
|
27
|
+
# in the spec and records it as model facts (info.security.exchange): the
|
|
28
|
+
# endpoint's path and method, and the field names it sends and answers
|
|
29
|
+
# with. This maps those facts onto `options.exchange` below, so a project
|
|
30
|
+
# whose spec describes an exchange does not hand-copy its own API's token
|
|
31
|
+
# endpoint into its model.
|
|
32
|
+
#
|
|
33
|
+
# What arrives is WHAT THE EXCHANGE IS, never that it should run:
|
|
34
|
+
# `exchange.active` stays the project's call, because resolving a static
|
|
35
|
+
# credential through this feature on an API that also has a token endpoint
|
|
36
|
+
# is a legitimate configuration. Turning it on remains a deliberate act.
|
|
37
|
+
spec: { authexchange: 'exchange' }
|
|
38
|
+
|
|
39
|
+
# PLUGINS — the provider kinds, each carrying its own platform cost.
|
|
40
|
+
#
|
|
41
|
+
# This is what keeps a generated SDK lean. sekreto's core resolves a
|
|
42
|
+
# chain and ships `env` and `memory`, which import nothing; every other
|
|
43
|
+
# kind lives in its own module and REGISTERS ITSELF at import, so a kind
|
|
44
|
+
# nobody imports is not in the build. These entries decide which of
|
|
45
|
+
# those modules are generated at all.
|
|
46
|
+
#
|
|
47
|
+
# An SDK whose chain is `[dotenv, env]` — the common case, and
|
|
48
|
+
# elementdemo's — needs `dotenv` alone. Before this it carried AWS
|
|
49
|
+
# request signing and seven HTTP vault clients as well, because one
|
|
50
|
+
# import reached every kind.
|
|
51
|
+
#
|
|
52
|
+
# `path` is DECLARED rather than conventional: these files are vendored
|
|
53
|
+
# from sekreto, and both the vendoring guard and their own relative
|
|
54
|
+
# imports pin them at upstream's directory depth.
|
|
55
|
+
#
|
|
56
|
+
# All inactive by default, like the feature itself. A project turns on
|
|
57
|
+
# what its chain actually names.
|
|
58
|
+
plugin: {
|
|
59
|
+
dotenv: {
|
|
60
|
+
title: 'Read secrets from a .env file or a directory of files'
|
|
61
|
+
needs: { fs: true }
|
|
62
|
+
path: [
|
|
63
|
+
'src/feature/secrets/sekreto/provider/dotenv.ts'
|
|
64
|
+
'src/feature/secrets/sekreto/provider/file.ts'
|
|
65
|
+
]
|
|
66
|
+
}
|
|
67
|
+
|
|
68
|
+
vault: {
|
|
69
|
+
title: 'HashiCorp Vault and boru'
|
|
70
|
+
needs: { fs: true, fetch: true }
|
|
71
|
+
path: [
|
|
72
|
+
'src/feature/secrets/sekreto/provider/hashicorp.ts'
|
|
73
|
+
'src/feature/secrets/sekreto/provider/boru.ts'
|
|
74
|
+
]
|
|
75
|
+
}
|
|
76
|
+
|
|
77
|
+
cloud: {
|
|
78
|
+
title: 'GCP Secret Manager and Azure Key Vault'
|
|
79
|
+
needs: { fetch: true }
|
|
80
|
+
path: [
|
|
81
|
+
'src/feature/secrets/sekreto/provider/gcpsecrets.ts'
|
|
82
|
+
'src/feature/secrets/sekreto/provider/azuresecrets.ts'
|
|
83
|
+
]
|
|
84
|
+
}
|
|
85
|
+
|
|
86
|
+
saas: {
|
|
87
|
+
title: '1Password, Doppler and Infisical'
|
|
88
|
+
needs: { fetch: true }
|
|
89
|
+
path: [
|
|
90
|
+
'src/feature/secrets/sekreto/provider/onepassword.ts'
|
|
91
|
+
'src/feature/secrets/sekreto/provider/doppler.ts'
|
|
92
|
+
'src/feature/secrets/sekreto/provider/infisical.ts'
|
|
93
|
+
]
|
|
94
|
+
}
|
|
95
|
+
|
|
96
|
+
# The only plugin that costs node:crypto: AWS request signing.
|
|
97
|
+
# `Sigv4.ts` goes with it, and goes only with it.
|
|
98
|
+
aws: {
|
|
99
|
+
title: 'AWS Secrets Manager and Parameter Store (SigV4 signing)'
|
|
100
|
+
needs: { fetch: true, crypto: true }
|
|
101
|
+
path: [
|
|
102
|
+
'src/feature/secrets/sekreto/provider/aws.ts'
|
|
103
|
+
'src/feature/secrets/sekreto/Sigv4.ts'
|
|
104
|
+
]
|
|
105
|
+
}
|
|
106
|
+
}
|
|
107
|
+
|
|
26
108
|
# Transport role (station design §8.4).
|
|
27
109
|
#
|
|
28
110
|
# 'wrap', because the access-token exchange below has to SEE the response:
|
|
@@ -4,6 +4,7 @@ import * as Path from 'node:path'
|
|
|
4
4
|
import {
|
|
5
5
|
cmp, each,
|
|
6
6
|
File, Content, Copy, Folder, Fragment,
|
|
7
|
+
TEST_CONTROL_EXCLUDE
|
|
7
8
|
} from '@voxgig/sdkgen'
|
|
8
9
|
|
|
9
10
|
|
|
@@ -41,7 +42,7 @@ const Main = cmp(async function Main(props: any) {
|
|
|
41
42
|
// only stages the per-feature custom-source dirs (target add), so exclude it.
|
|
42
43
|
Copy({
|
|
43
44
|
from: 'tm/' + target.name,
|
|
44
|
-
exclude: [/src
|
|
45
|
+
exclude: [/src\//, TEST_CONTROL_EXCLUDE],
|
|
45
46
|
replace: {
|
|
46
47
|
...props.ctx$.stdrep,
|
|
47
48
|
}
|
|
@@ -3,7 +3,8 @@ import type {
|
|
|
3
3
|
ModelEntity
|
|
4
4
|
} from '@voxgig/apidef'
|
|
5
5
|
|
|
6
|
-
import { cmp, each, Folder, entityCollection
|
|
6
|
+
import { cmp, each, Folder, entityCollection,
|
|
7
|
+
TestControl } from '@voxgig/sdkgen'
|
|
7
8
|
|
|
8
9
|
|
|
9
10
|
import { TestEntity } from './TestEntity_cpp'
|
|
@@ -19,6 +20,9 @@ const Test = cmp(function Test(props: any) {
|
|
|
19
20
|
// netsim / struct corpus) ships as tm/cpp/test templates (copied verbatim).
|
|
20
21
|
// Here we generate the per-entity model-driven tests into test/.
|
|
21
22
|
Folder({ name: 'test' }, () => {
|
|
23
|
+
|
|
24
|
+
// Write-once: a project's edited control file survives regeneration.
|
|
25
|
+
TestControl({ target, dir: 'test' })
|
|
22
26
|
const entity = each(entityCollection(model))
|
|
23
27
|
.filter((e: any) => false !== e.active)
|
|
24
28
|
each(entity, (entity: ModelEntity) => {
|
|
@@ -4,6 +4,7 @@ import * as Path from 'node:path'
|
|
|
4
4
|
import {
|
|
5
5
|
cmp, each,
|
|
6
6
|
File, Content, Copy, Folder, Fragment,
|
|
7
|
+
TEST_CONTROL_EXCLUDE
|
|
7
8
|
} from '@voxgig/sdkgen'
|
|
8
9
|
|
|
9
10
|
|
|
@@ -42,7 +43,7 @@ const Main = cmp(async function Main(props: any) {
|
|
|
42
43
|
// per-feature extension folders (not shipped into the SDK output).
|
|
43
44
|
Copy({
|
|
44
45
|
from: 'tm/' + target.name,
|
|
45
|
-
exclude: [/src
|
|
46
|
+
exclude: [/src\//, TEST_CONTROL_EXCLUDE],
|
|
46
47
|
replace: {
|
|
47
48
|
...props.ctx$.stdrep,
|
|
48
49
|
}
|
|
@@ -11,7 +11,9 @@ import {
|
|
|
11
11
|
File,
|
|
12
12
|
cmp,
|
|
13
13
|
snakify,
|
|
14
|
-
isAuthActive, envName, envToken
|
|
14
|
+
isAuthActive, envName, envToken,
|
|
15
|
+
serverVarEnv,
|
|
16
|
+
serverVariables
|
|
15
17
|
} from '@voxgig/sdkgen'
|
|
16
18
|
|
|
17
19
|
import { formatCsValue } from './utility_csharp'
|
|
@@ -67,12 +69,26 @@ const TestDirect = cmp(function TestDirect(props: any) {
|
|
|
67
69
|
|
|
68
70
|
const authActive = isAuthActive(model)
|
|
69
71
|
const apikeyEnvEntry = authActive
|
|
70
|
-
? `\n ["${PROJECTNAME}_APIKEY"] = "
|
|
72
|
+
? `\n ["${PROJECTNAME}_APIKEY"] = "",`
|
|
71
73
|
: ''
|
|
72
74
|
const apikeyLiveField = authActive
|
|
73
75
|
? `\n ["apikey"] = env["${PROJECTNAME}_APIKEY"],`
|
|
74
76
|
: ''
|
|
75
77
|
|
|
78
|
+
// A templated server URL (OpenAPI server variables) makes a LIVE client
|
|
79
|
+
// impossible to construct without values: makeOptions raises rather than
|
|
80
|
+
// request a URL with a literal `{account_id}` in it. So the live suite
|
|
81
|
+
// takes them from the environment the same way it takes the apikey.
|
|
82
|
+
const svars = serverVariables(model)
|
|
83
|
+
const serverEnvEntry = svars
|
|
84
|
+
.map((v: any) => `\n ["${serverVarEnv(PROJECTNAME, v.name)}"] = ${JSON.stringify(v.dflt)},`).join('')
|
|
85
|
+
const serverLiveField = 0 === svars.length ? '' : `
|
|
86
|
+
["server"] = new Dictionary<string, object?>
|
|
87
|
+
{${svars
|
|
88
|
+
.map((v: any) => `
|
|
89
|
+
["${v.name}"] = env["${serverVarEnv(PROJECTNAME, v.name)}"],`).join('')}
|
|
90
|
+
},`
|
|
91
|
+
|
|
76
92
|
const opnames = Object.keys(entity.op || {})
|
|
77
93
|
const hasLoad = opnames.includes('load')
|
|
78
94
|
const hasList = opnames.includes('list')
|
|
@@ -475,16 +491,24 @@ ${loadSkipBlock} var client = setup.Client;
|
|
|
475
491
|
var env = TestRunner.EnvOverride(new Dictionary<string, object?>
|
|
476
492
|
{
|
|
477
493
|
["${entidEnvVar}"] = new Dictionary<string, object?>(),
|
|
478
|
-
["${PROJECTNAME}_TEST_LIVE"] = "FALSE",${apikeyEnvEntry}
|
|
494
|
+
["${PROJECTNAME}_TEST_LIVE"] = "FALSE",${apikeyEnvEntry}${serverEnvEntry}
|
|
479
495
|
});
|
|
480
496
|
|
|
481
497
|
var live = Equals(env["${PROJECTNAME}_TEST_LIVE"], "TRUE");
|
|
482
498
|
|
|
483
499
|
if (live)
|
|
484
500
|
{
|
|
485
|
-
|
|
486
|
-
|
|
487
|
-
|
|
501
|
+
// sdk-test-control.json's test.client.options goes UNDER the
|
|
502
|
+
// generated fields: it adds to the live client, it does not
|
|
503
|
+
// redirect it, so the generated entries overwrite it here.
|
|
504
|
+
var liveOpts = TestRunner.LiveClientOptions();
|
|
505
|
+
foreach (var _kv in new Dictionary<string, object?>
|
|
506
|
+
{${apikeyLiveField}${serverLiveField}
|
|
507
|
+
})
|
|
508
|
+
{
|
|
509
|
+
liveOpts[_kv.Key] = _kv.Value;
|
|
510
|
+
}
|
|
511
|
+
var liveClient = new ${Name}SDK(liveOpts);
|
|
488
512
|
|
|
489
513
|
var idmap = new Dictionary<string, object?>();
|
|
490
514
|
var entidRaw = env["${entidEnvVar}"];
|
|
@@ -17,7 +17,9 @@ import {
|
|
|
17
17
|
each,
|
|
18
18
|
buildIdNames,
|
|
19
19
|
getMatchEntries,
|
|
20
|
-
isAuthActive, envName, envToken
|
|
20
|
+
isAuthActive, envName, envToken,
|
|
21
|
+
serverVarEnv,
|
|
22
|
+
serverVariables
|
|
21
23
|
} from '@voxgig/sdkgen'
|
|
22
24
|
|
|
23
25
|
|
|
@@ -59,12 +61,26 @@ const TestEntity = cmp(function TestEntity(props: any) {
|
|
|
59
61
|
|
|
60
62
|
const authActive = isAuthActive(model)
|
|
61
63
|
const apikeyEnvEntry = authActive
|
|
62
|
-
? `\n ["${PROJUPPER}_APIKEY"] = "
|
|
64
|
+
? `\n ["${PROJUPPER}_APIKEY"] = "",`
|
|
63
65
|
: ''
|
|
64
66
|
const apikeyLiveField = authActive
|
|
65
67
|
? `\n ["apikey"] = env["${PROJUPPER}_APIKEY"],`
|
|
66
68
|
: ''
|
|
67
69
|
|
|
70
|
+
// A templated server URL (OpenAPI server variables) makes a LIVE client
|
|
71
|
+
// impossible to construct without values: makeOptions raises rather than
|
|
72
|
+
// request a URL with a literal `{account_id}` in it. So the live suite
|
|
73
|
+
// takes them from the environment the same way it takes the apikey.
|
|
74
|
+
const svars = serverVariables(model)
|
|
75
|
+
const serverEnvEntry = svars
|
|
76
|
+
.map((v: any) => `\n ["${serverVarEnv(PROJUPPER, v.name)}"] = ${JSON.stringify(v.dflt)},`).join('')
|
|
77
|
+
const serverLiveField = 0 === svars.length ? '' : `
|
|
78
|
+
["server"] = new Dictionary<string, object?>
|
|
79
|
+
{${svars
|
|
80
|
+
.map((v: any) => `
|
|
81
|
+
["${v.name}"] = env["${serverVarEnv(PROJUPPER, v.name)}"],`).join('')}
|
|
82
|
+
},`
|
|
83
|
+
|
|
68
84
|
const idnames = buildIdNames(entity, basicflow)
|
|
69
85
|
const idnamesStr = idnames.map(n => `"${n}"`).join(', ')
|
|
70
86
|
|
|
@@ -266,7 +282,7 @@ ${allSteps.length > 0 ? ' var client = setup.Client;\n\n' : ''}`)
|
|
|
266
282
|
{
|
|
267
283
|
["${PROJUPPER}_TEST_${ENTUPPER}_ENTID"] = idmap,
|
|
268
284
|
["${PROJUPPER}_TEST_LIVE"] = "FALSE",
|
|
269
|
-
["${PROJUPPER}_TEST_EXPLAIN"] = "FALSE",${apikeyEnvEntry}
|
|
285
|
+
["${PROJUPPER}_TEST_EXPLAIN"] = "FALSE",${apikeyEnvEntry}${serverEnvEntry}
|
|
270
286
|
});
|
|
271
287
|
|
|
272
288
|
var idmapResolved = Helpers.ToMapAny(env["${PROJUPPER}_TEST_${ENTUPPER}_ENTID"])
|
|
@@ -288,12 +304,20 @@ ${allSteps.length > 0 ? ' var client = setup.Client;\n\n' : ''}`)
|
|
|
288
304
|
Content(`
|
|
289
305
|
if (Equals(env["${PROJUPPER}_TEST_LIVE"], "TRUE"))
|
|
290
306
|
{
|
|
307
|
+
// 'extra ?? new ...', not a bare 'extra': Merge returns null when
|
|
308
|
+
// the last entry is null, and BasicSetup is normally called with no
|
|
309
|
+
// argument at all - so a bare 'extra' silently discarded the apikey
|
|
310
|
+
// and server values above and handed the SDK null.
|
|
311
|
+
var extraOpts = extra ?? new Dictionary<string, object?>();
|
|
291
312
|
var mergedOpts = StructUtils.Merge(new List<object?>
|
|
292
313
|
{
|
|
314
|
+
// FIRST, so the generated fields below win: sdk-test-control.json's
|
|
315
|
+
// test.client.options adds to the live client, it does not redirect it.
|
|
316
|
+
TestRunner.LiveClientOptions(),
|
|
293
317
|
new Dictionary<string, object?>
|
|
294
|
-
{${apikeyLiveField}
|
|
318
|
+
{${apikeyLiveField}${serverLiveField}
|
|
295
319
|
},
|
|
296
|
-
|
|
320
|
+
extraOpts,
|
|
297
321
|
});
|
|
298
322
|
client = new ${Name}SDK(Helpers.ToMapAny(mergedOpts));
|
|
299
323
|
}
|
|
@@ -3,7 +3,8 @@ import type {
|
|
|
3
3
|
ModelEntity
|
|
4
4
|
} from '@voxgig/apidef'
|
|
5
5
|
|
|
6
|
-
import { cmp, each, Folder, entityCollection
|
|
6
|
+
import { cmp, each, Folder, entityCollection,
|
|
7
|
+
TestControl } from '@voxgig/sdkgen'
|
|
7
8
|
|
|
8
9
|
|
|
9
10
|
import { TestEntity } from './TestEntity_csharp'
|
|
@@ -21,6 +22,9 @@ const Test = cmp(function Test(props: any) {
|
|
|
21
22
|
// tests are generated here.
|
|
22
23
|
Folder({ name: 'test' }, () => {
|
|
23
24
|
|
|
25
|
+
// Write-once: a project's edited control file survives regeneration.
|
|
26
|
+
TestControl({ target, dir: 'test' })
|
|
27
|
+
|
|
24
28
|
const entity = each(entityCollection(model))
|
|
25
29
|
.filter((e: any) => false !== e.active)
|
|
26
30
|
|
|
@@ -5,6 +5,7 @@ import {
|
|
|
5
5
|
cmp, each,
|
|
6
6
|
List, File, Copy, Folder, Fragment, Line,
|
|
7
7
|
entityClassName, entityCollection,
|
|
8
|
+
TEST_CONTROL_EXCLUDE
|
|
8
9
|
} from '@voxgig/sdkgen'
|
|
9
10
|
|
|
10
11
|
|
|
@@ -45,7 +46,7 @@ const Main = cmp(async function Main(props: any) {
|
|
|
45
46
|
// lib/feature/), so they are excluded from the generated package.
|
|
46
47
|
Copy({
|
|
47
48
|
from: 'tm/' + target.name,
|
|
48
|
-
exclude: [/src
|
|
49
|
+
exclude: [/src\//, TEST_CONTROL_EXCLUDE],
|
|
49
50
|
replace: {
|
|
50
51
|
...props.ctx$.stdrep,
|
|
51
52
|
}
|
|
@@ -16,14 +16,15 @@ import {
|
|
|
16
16
|
Slot,
|
|
17
17
|
cmp,
|
|
18
18
|
snakify,
|
|
19
|
-
isAuthActive, envName, envToken
|
|
19
|
+
isAuthActive, envName, envToken,
|
|
20
|
+
serverVarEnv,
|
|
21
|
+
serverVariables
|
|
20
22
|
} from '@voxgig/sdkgen'
|
|
21
23
|
|
|
22
24
|
|
|
23
25
|
import {
|
|
24
26
|
projectPath,
|
|
25
|
-
dartValue,
|
|
26
|
-
} from './utility_dart'
|
|
27
|
+
dartValue, dartStringLiteral} from './utility_dart'
|
|
27
28
|
|
|
28
29
|
|
|
29
30
|
const TestDirect = cmp(function TestDirect(props: any) {
|
|
@@ -40,13 +41,26 @@ const TestDirect = cmp(function TestDirect(props: any) {
|
|
|
40
41
|
|
|
41
42
|
const authActive = isAuthActive(model)
|
|
42
43
|
const apikeyEnvEntry = authActive
|
|
43
|
-
? `\n '${PROJECTNAME}_APIKEY': '
|
|
44
|
+
? `\n '${PROJECTNAME}_APIKEY': '',`
|
|
44
45
|
: ''
|
|
45
46
|
const apikeyLiveField = authActive
|
|
46
47
|
? `
|
|
47
48
|
'apikey': env['${PROJECTNAME}_APIKEY'],`
|
|
48
49
|
: ''
|
|
49
50
|
|
|
51
|
+
// A templated server URL (OpenAPI server variables) makes a LIVE client
|
|
52
|
+
// impossible to construct without values: makeOptions raises rather than
|
|
53
|
+
// request a URL with a literal `{account_id}` in it. So the live suite
|
|
54
|
+
// takes them from the environment the same way it takes the apikey.
|
|
55
|
+
const svars = serverVariables(model)
|
|
56
|
+
const serverEnvEntry = svars
|
|
57
|
+
.map((v: any) => `\n '${serverVarEnv(PROJECTNAME, v.name)}': ${dartStringLiteral(v.dflt)},`).join('')
|
|
58
|
+
const serverLiveField = 0 === svars.length ? '' : `
|
|
59
|
+
'server': <String, dynamic>{${svars
|
|
60
|
+
.map((v: any) => `
|
|
61
|
+
'${v.name}': env['${serverVarEnv(PROJECTNAME, v.name)}'],`).join('')}
|
|
62
|
+
},`
|
|
63
|
+
|
|
50
64
|
const opnames = Object.keys(entity.op || {})
|
|
51
65
|
const hasLoad = opnames.includes('load')
|
|
52
66
|
const hasList = opnames.includes('list')
|
|
@@ -78,13 +92,16 @@ Map<String, dynamic> directSetup([dynamic mockres]) {
|
|
|
78
92
|
|
|
79
93
|
final env = envOverride({
|
|
80
94
|
'${entidEnvVar}': <String, dynamic>{},
|
|
81
|
-
'${PROJECTNAME}_TEST_LIVE': 'FALSE',${apikeyEnvEntry}
|
|
95
|
+
'${PROJECTNAME}_TEST_LIVE': 'FALSE',${apikeyEnvEntry}${serverEnvEntry}
|
|
82
96
|
});
|
|
83
97
|
|
|
84
98
|
final live = 'TRUE' == env['${PROJECTNAME}_TEST_LIVE'];
|
|
85
99
|
|
|
86
100
|
if (live) {
|
|
87
|
-
|
|
101
|
+
// Spread FIRST, so the generated fields below win: sdk-test-control.json's
|
|
102
|
+
// test.client.options adds to the live client, it does not redirect it.
|
|
103
|
+
final client = ${nom(model.const, 'Name')}SDK(<String, dynamic>{
|
|
104
|
+
...liveClientOptions(),${apikeyLiveField}${serverLiveField}
|
|
88
105
|
});
|
|
89
106
|
|
|
90
107
|
dynamic idmap = env['${entidEnvVar}'];
|
|
@@ -23,13 +23,14 @@ import {
|
|
|
23
23
|
Slot,
|
|
24
24
|
cmp,
|
|
25
25
|
each,
|
|
26
|
-
isAuthActive, envName, envToken
|
|
26
|
+
isAuthActive, envName, envToken,
|
|
27
|
+
serverVarEnv,
|
|
28
|
+
serverVariables
|
|
27
29
|
} from '@voxgig/sdkgen'
|
|
28
30
|
|
|
29
31
|
|
|
30
32
|
import {
|
|
31
|
-
projectPath
|
|
32
|
-
} from './utility_dart'
|
|
33
|
+
projectPath, dartStringLiteral} from './utility_dart'
|
|
33
34
|
|
|
34
35
|
|
|
35
36
|
// GenCtx is the per-language generation context passed to every OpGen.
|
|
@@ -54,13 +55,26 @@ const TestEntity = cmp(function TestEntity(props: any) {
|
|
|
54
55
|
const ENTENVNAME = envToken(entity.name)
|
|
55
56
|
const authActive = isAuthActive(model)
|
|
56
57
|
const apikeyEnvEntry = authActive
|
|
57
|
-
? `\n '${PROJENVNAME}_APIKEY': '
|
|
58
|
+
? `\n '${PROJENVNAME}_APIKEY': '',`
|
|
58
59
|
: ''
|
|
59
60
|
const apikeyLiveField = authActive
|
|
60
61
|
? `
|
|
61
62
|
'apikey': env['${PROJENVNAME}_APIKEY'],`
|
|
62
63
|
: ''
|
|
63
64
|
|
|
65
|
+
// A templated server URL (OpenAPI server variables) makes a LIVE client
|
|
66
|
+
// impossible to construct without values: makeOptions raises rather than
|
|
67
|
+
// request a URL with a literal `{account_id}` in it. So the live suite
|
|
68
|
+
// takes them from the environment the same way it takes the apikey.
|
|
69
|
+
const svars = serverVariables(model)
|
|
70
|
+
const serverEnvEntry = svars
|
|
71
|
+
.map((v: any) => `\n '${serverVarEnv(PROJENVNAME, v.name)}': ${dartStringLiteral(v.dflt)},`).join('')
|
|
72
|
+
const serverLiveField = 0 === svars.length ? '' : `
|
|
73
|
+
'server': <String, dynamic>{${svars
|
|
74
|
+
.map((v: any) => `
|
|
75
|
+
'${v.name}': env['${serverVarEnv(PROJENVNAME, v.name)}'],`).join('')}
|
|
76
|
+
},`
|
|
77
|
+
|
|
64
78
|
const ff = projectPath('src/cmp/dart/fragment/')
|
|
65
79
|
|
|
66
80
|
Folder({ name: entity.name }, () => {
|
|
@@ -191,7 +205,7 @@ Map<String, dynamic> basicSetup([dynamic extra]) {
|
|
|
191
205
|
final env = envOverride({
|
|
192
206
|
'${PROJENVNAME}_TEST_${ENTENVNAME}_ENTID': idmap,
|
|
193
207
|
'${PROJENVNAME}_TEST_LIVE': 'FALSE',
|
|
194
|
-
'${PROJENVNAME}_TEST_EXPLAIN': 'FALSE',${apikeyEnvEntry}
|
|
208
|
+
'${PROJENVNAME}_TEST_EXPLAIN': 'FALSE',${apikeyEnvEntry}${serverEnvEntry}
|
|
195
209
|
});
|
|
196
210
|
|
|
197
211
|
idmap = env['${PROJENVNAME}_TEST_${ENTENVNAME}_ENTID'];
|
|
@@ -200,9 +214,16 @@ Map<String, dynamic> basicSetup([dynamic extra]) {
|
|
|
200
214
|
|
|
201
215
|
if (live) {
|
|
202
216
|
client = ${model.Name}SDK(merge([
|
|
203
|
-
|
|
217
|
+
// FIRST, so the generated fields below win: sdk-test-control.json's
|
|
218
|
+
// test.client.options adds to the live client, it does not redirect it.
|
|
219
|
+
liveClientOptions(),
|
|
220
|
+
<String, dynamic>{${apikeyLiveField}${serverLiveField}
|
|
204
221
|
},
|
|
205
|
-
extra
|
|
222
|
+
// 'extra ?? {}', not a bare 'extra': merge returns null when the last
|
|
223
|
+
// entry is null, and basicSetup is normally called with no argument at
|
|
224
|
+
// all - so a bare 'extra' silently discarded the apikey and server
|
|
225
|
+
// values above and handed the SDK null.
|
|
226
|
+
extra ?? <String, dynamic>{}
|
|
206
227
|
]));
|
|
207
228
|
}
|
|
208
229
|
|