@voxgig/sdkgen 4.2.0 → 4.2.1

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 (120) hide show
  1. package/bin/voxgig-sdkgen +1 -1
  2. package/dist/helpers/canonType.d.ts +2 -1
  3. package/dist/helpers/canonType.js +36 -0
  4. package/dist/helpers/canonType.js.map +1 -1
  5. package/dist/sdkgen.d.ts +2 -2
  6. package/dist/sdkgen.js +3 -2
  7. package/dist/sdkgen.js.map +1 -1
  8. package/dist/tsconfig.tsbuildinfo +1 -1
  9. package/package.json +1 -1
  10. package/project/.sdk/src/cmp/c/ReadmeEntity_c.ts +2 -2
  11. package/project/.sdk/src/cmp/c/ReadmeHowto_c.ts +2 -2
  12. package/project/.sdk/src/cmp/c/ReadmeQuick_c.ts +2 -2
  13. package/project/.sdk/src/cmp/c/ReadmeRef_c.ts +2 -2
  14. package/project/.sdk/src/cmp/c/ReadmeTopQuick_c.ts +2 -2
  15. package/project/.sdk/src/cmp/c/ReadmeTopTest_c.ts +2 -2
  16. package/project/.sdk/src/cmp/clojure/ReadmeEntity_clojure.ts +2 -2
  17. package/project/.sdk/src/cmp/clojure/ReadmeHowto_clojure.ts +2 -2
  18. package/project/.sdk/src/cmp/clojure/ReadmeQuick_clojure.ts +2 -2
  19. package/project/.sdk/src/cmp/clojure/ReadmeRef_clojure.ts +2 -2
  20. package/project/.sdk/src/cmp/clojure/ReadmeTopQuick_clojure.ts +2 -2
  21. package/project/.sdk/src/cmp/clojure/ReadmeTopTest_clojure.ts +2 -2
  22. package/project/.sdk/src/cmp/cpp/ReadmeEntity_cpp.ts +2 -2
  23. package/project/.sdk/src/cmp/cpp/ReadmeHowto_cpp.ts +2 -2
  24. package/project/.sdk/src/cmp/cpp/ReadmeQuick_cpp.ts +2 -2
  25. package/project/.sdk/src/cmp/cpp/ReadmeRef_cpp.ts +2 -2
  26. package/project/.sdk/src/cmp/cpp/ReadmeTopQuick_cpp.ts +2 -2
  27. package/project/.sdk/src/cmp/cpp/ReadmeTopTest_cpp.ts +2 -2
  28. package/project/.sdk/src/cmp/csharp/ReadmeEntity_csharp.ts +2 -2
  29. package/project/.sdk/src/cmp/csharp/ReadmeHowto_csharp.ts +2 -2
  30. package/project/.sdk/src/cmp/csharp/ReadmeQuick_csharp.ts +2 -2
  31. package/project/.sdk/src/cmp/csharp/ReadmeRef_csharp.ts +2 -2
  32. package/project/.sdk/src/cmp/csharp/ReadmeTopQuick_csharp.ts +2 -2
  33. package/project/.sdk/src/cmp/csharp/ReadmeTopTest_csharp.ts +2 -2
  34. package/project/.sdk/src/cmp/dart/ReadmeEntity_dart.ts +2 -2
  35. package/project/.sdk/src/cmp/dart/ReadmeHowto_dart.ts +2 -2
  36. package/project/.sdk/src/cmp/dart/ReadmeQuick_dart.ts +2 -2
  37. package/project/.sdk/src/cmp/dart/ReadmeRef_dart.ts +2 -2
  38. package/project/.sdk/src/cmp/dart/ReadmeTopQuick_dart.ts +2 -2
  39. package/project/.sdk/src/cmp/dart/ReadmeTopTest_dart.ts +2 -2
  40. package/project/.sdk/src/cmp/elixir/utility_elixir.ts +2 -1
  41. package/project/.sdk/src/cmp/go/ReadmeHowto_go.ts +2 -2
  42. package/project/.sdk/src/cmp/go/ReadmeTopTest_go.ts +2 -2
  43. package/project/.sdk/src/cmp/go/utility_go.ts +10 -1
  44. package/project/.sdk/src/cmp/java/ReadmeEntity_java.ts +2 -2
  45. package/project/.sdk/src/cmp/java/ReadmeHowto_java.ts +2 -2
  46. package/project/.sdk/src/cmp/java/ReadmeQuick_java.ts +2 -2
  47. package/project/.sdk/src/cmp/java/ReadmeRef_java.ts +2 -2
  48. package/project/.sdk/src/cmp/java/ReadmeTopQuick_java.ts +2 -2
  49. package/project/.sdk/src/cmp/java/ReadmeTopTest_java.ts +2 -2
  50. package/project/.sdk/src/cmp/js/utility_js.ts +10 -1
  51. package/project/.sdk/src/cmp/kotlin/ReadmeEntity_kotlin.ts +2 -2
  52. package/project/.sdk/src/cmp/kotlin/ReadmeHowto_kotlin.ts +2 -2
  53. package/project/.sdk/src/cmp/kotlin/ReadmeQuick_kotlin.ts +2 -2
  54. package/project/.sdk/src/cmp/kotlin/ReadmeRef_kotlin.ts +2 -2
  55. package/project/.sdk/src/cmp/kotlin/ReadmeTopQuick_kotlin.ts +2 -2
  56. package/project/.sdk/src/cmp/kotlin/ReadmeTopTest_kotlin.ts +2 -2
  57. package/project/.sdk/src/cmp/lua/ReadmeEntity_lua.ts +2 -2
  58. package/project/.sdk/src/cmp/lua/ReadmeHowto_lua.ts +2 -2
  59. package/project/.sdk/src/cmp/lua/ReadmeQuick_lua.ts +2 -2
  60. package/project/.sdk/src/cmp/lua/ReadmeRef_lua.ts +2 -2
  61. package/project/.sdk/src/cmp/lua/ReadmeTopQuick_lua.ts +2 -2
  62. package/project/.sdk/src/cmp/lua/ReadmeTopTest_lua.ts +2 -2
  63. package/project/.sdk/src/cmp/ocaml/ReadmeEntity_ocaml.ts +2 -2
  64. package/project/.sdk/src/cmp/ocaml/ReadmeHowto_ocaml.ts +2 -2
  65. package/project/.sdk/src/cmp/ocaml/ReadmeQuick_ocaml.ts +2 -2
  66. package/project/.sdk/src/cmp/ocaml/ReadmeRef_ocaml.ts +2 -2
  67. package/project/.sdk/src/cmp/ocaml/ReadmeTopQuick_ocaml.ts +2 -2
  68. package/project/.sdk/src/cmp/ocaml/ReadmeTopTest_ocaml.ts +2 -2
  69. package/project/.sdk/src/cmp/perl/ReadmeEntity_perl.ts +2 -2
  70. package/project/.sdk/src/cmp/perl/ReadmeHowto_perl.ts +2 -2
  71. package/project/.sdk/src/cmp/perl/ReadmeQuick_perl.ts +2 -2
  72. package/project/.sdk/src/cmp/perl/ReadmeRef_perl.ts +2 -2
  73. package/project/.sdk/src/cmp/perl/ReadmeTopQuick_perl.ts +2 -2
  74. package/project/.sdk/src/cmp/perl/ReadmeTopTest_perl.ts +2 -2
  75. package/project/.sdk/src/cmp/php/ReadmeEntity_php.ts +2 -2
  76. package/project/.sdk/src/cmp/php/ReadmeHowto_php.ts +2 -2
  77. package/project/.sdk/src/cmp/php/ReadmeQuick_php.ts +2 -2
  78. package/project/.sdk/src/cmp/php/ReadmeRef_php.ts +2 -2
  79. package/project/.sdk/src/cmp/php/ReadmeTopQuick_php.ts +2 -2
  80. package/project/.sdk/src/cmp/php/ReadmeTopTest_php.ts +2 -2
  81. package/project/.sdk/src/cmp/py/ReadmeEntity_py.ts +2 -2
  82. package/project/.sdk/src/cmp/py/ReadmeHowto_py.ts +2 -2
  83. package/project/.sdk/src/cmp/py/ReadmeQuick_py.ts +2 -2
  84. package/project/.sdk/src/cmp/py/ReadmeRef_py.ts +2 -2
  85. package/project/.sdk/src/cmp/py/ReadmeTopQuick_py.ts +2 -2
  86. package/project/.sdk/src/cmp/py/ReadmeTopTest_py.ts +2 -2
  87. package/project/.sdk/src/cmp/rb/ReadmeEntity_rb.ts +2 -2
  88. package/project/.sdk/src/cmp/rb/ReadmeHowto_rb.ts +2 -2
  89. package/project/.sdk/src/cmp/rb/ReadmeQuick_rb.ts +2 -2
  90. package/project/.sdk/src/cmp/rb/ReadmeRef_rb.ts +2 -2
  91. package/project/.sdk/src/cmp/rb/ReadmeTopQuick_rb.ts +2 -2
  92. package/project/.sdk/src/cmp/rb/ReadmeTopTest_rb.ts +2 -2
  93. package/project/.sdk/src/cmp/rust/ReadmeEntity_rust.ts +2 -2
  94. package/project/.sdk/src/cmp/rust/ReadmeHowto_rust.ts +2 -2
  95. package/project/.sdk/src/cmp/rust/ReadmeQuick_rust.ts +2 -2
  96. package/project/.sdk/src/cmp/rust/ReadmeRef_rust.ts +2 -2
  97. package/project/.sdk/src/cmp/rust/ReadmeTopQuick_rust.ts +2 -2
  98. package/project/.sdk/src/cmp/rust/ReadmeTopTest_rust.ts +2 -2
  99. package/project/.sdk/src/cmp/scala/ReadmeEntity_scala.ts +2 -2
  100. package/project/.sdk/src/cmp/scala/ReadmeHowto_scala.ts +2 -2
  101. package/project/.sdk/src/cmp/scala/ReadmeQuick_scala.ts +2 -2
  102. package/project/.sdk/src/cmp/scala/ReadmeRef_scala.ts +2 -2
  103. package/project/.sdk/src/cmp/scala/ReadmeTopQuick_scala.ts +2 -2
  104. package/project/.sdk/src/cmp/scala/ReadmeTopTest_scala.ts +2 -2
  105. package/project/.sdk/src/cmp/swift/ReadmeEntity_swift.ts +2 -2
  106. package/project/.sdk/src/cmp/swift/ReadmeHowto_swift.ts +2 -2
  107. package/project/.sdk/src/cmp/swift/ReadmeQuick_swift.ts +2 -2
  108. package/project/.sdk/src/cmp/swift/ReadmeRef_swift.ts +2 -2
  109. package/project/.sdk/src/cmp/swift/ReadmeTopQuick_swift.ts +2 -2
  110. package/project/.sdk/src/cmp/swift/ReadmeTopTest_swift.ts +2 -2
  111. package/project/.sdk/src/cmp/ts/utility_ts.ts +10 -1
  112. package/project/.sdk/src/cmp/zig/ReadmeEntity_zig.ts +2 -2
  113. package/project/.sdk/src/cmp/zig/ReadmeHowto_zig.ts +2 -2
  114. package/project/.sdk/src/cmp/zig/ReadmeQuick_zig.ts +2 -2
  115. package/project/.sdk/src/cmp/zig/ReadmeRef_zig.ts +2 -2
  116. package/project/.sdk/src/cmp/zig/ReadmeTopQuick_zig.ts +2 -2
  117. package/project/.sdk/src/cmp/zig/ReadmeTopTest_zig.ts +2 -2
  118. package/project/sdkgen-package.json +1 -1
  119. package/src/helpers/canonType.ts +38 -0
  120. package/src/sdkgen.ts +2 -1
@@ -1,5 +1,5 @@
1
1
 
2
- import { cmp, each, Content, isAuthActive, envName, canonKey, opRequestShape, entityIdField, entityDataIdField, entityOps, safeVarName, exampleVarName } from '@voxgig/sdkgen'
2
+ import { cmp, each, Content, isAuthActive, envName, canonKey, canonScalarKey, opRequestShape, entityIdField, entityDataIdField, entityOps, safeVarName, exampleVarName } from '@voxgig/sdkgen'
3
3
 
4
4
  import {
5
5
  KIT,
@@ -61,7 +61,7 @@ client = ${ctor}
61
61
  // placeholder (the doc test EXECUTES these blocks, so a comment
62
62
  // placeholder would not parse).
63
63
  const rbLit = (type: any, placeholder: string = 'example'): string => {
64
- const k = canonKey(type)
64
+ const k = canonScalarKey(type)
65
65
  if ('INTEGER' === k || 'NUMBER' === k) return '1'
66
66
  if ('BOOLEAN' === k) return 'true'
67
67
  if ('ARRAY' === k) return '[]'
@@ -1,5 +1,5 @@
1
1
 
2
- import { cmp, each, Content, canonToType, canonKey, File, isAuthActive, entityIdField, opRequestShape, safeVarName, exampleVarName } from '@voxgig/sdkgen'
2
+ import { cmp, each, Content, canonToType, canonKey, canonScalarKey, File, isAuthActive, entityIdField, opRequestShape, safeVarName, exampleVarName } from '@voxgig/sdkgen'
3
3
 
4
4
  import {
5
5
  KIT,
@@ -11,7 +11,7 @@ import {
11
11
  // is EXECUTED by the doc test, so it must carry a real value per field.
12
12
  // Strings render the quoted placeholder.
13
13
  function rbLit(type: any, placeholder: string = 'example'): string {
14
- const k = canonKey(type)
14
+ const k = canonScalarKey(type)
15
15
  if ('INTEGER' === k || 'NUMBER' === k) return '1'
16
16
  if ('BOOLEAN' === k) return 'true'
17
17
  if ('ARRAY' === k) return '[]'
@@ -1,5 +1,5 @@
1
1
 
2
- import { cmp, Content, isAuthActive, envName, canonKey, entityIdField, opRequestShape, safeVarName, exampleVarName } from '@voxgig/sdkgen'
2
+ import { cmp, Content, isAuthActive, envName, canonKey, canonScalarKey, entityIdField, opRequestShape, safeVarName, exampleVarName } from '@voxgig/sdkgen'
3
3
 
4
4
  import {
5
5
  KIT,
@@ -13,7 +13,7 @@ import {
13
13
  // placeholder (the doc test EXECUTES this block, so a comment placeholder
14
14
  // would break it).
15
15
  function rbLit(type: any, placeholder: string = 'example'): string {
16
- const k = canonKey(type)
16
+ const k = canonScalarKey(type)
17
17
  if ('INTEGER' === k || 'NUMBER' === k) return '1'
18
18
  if ('BOOLEAN' === k) return 'true'
19
19
  if ('ARRAY' === k) return '[]'
@@ -1,5 +1,5 @@
1
1
 
2
- import { cmp, Content, canonKey, entityIdField, pickExampleEntity, opRequestShape, safeVarName, exampleVarName } from '@voxgig/sdkgen'
2
+ import { cmp, Content, canonKey, canonScalarKey, entityIdField, pickExampleEntity, opRequestShape, safeVarName, exampleVarName } from '@voxgig/sdkgen'
3
3
 
4
4
  import {
5
5
  KIT,
@@ -10,7 +10,7 @@ import {
10
10
 
11
11
  // A type-correct Ruby literal for a field's canonical type.
12
12
  function rbLit(type: any): string {
13
- const k = canonKey(type)
13
+ const k = canonScalarKey(type)
14
14
  if ('INTEGER' === k || 'NUMBER' === k) return '1'
15
15
  if ('BOOLEAN' === k) return 'true'
16
16
  if ('ARRAY' === k) return '[]'
@@ -1,5 +1,5 @@
1
1
 
2
- import { cmp, each, Content, canonToType, canonKey, entityIdField, opRequestShape } from '@voxgig/sdkgen'
2
+ import { cmp, each, Content, canonToType, canonKey, canonScalarKey, entityIdField, opRequestShape } from '@voxgig/sdkgen'
3
3
 
4
4
  import {
5
5
  KIT,
@@ -13,7 +13,7 @@ import { rustVarName } from './utility_rust'
13
13
 
14
14
  // A type-correct rust expression constructing a voxgig struct Value.
15
15
  function rustLit(type: any, placeholder: string = 'example'): string {
16
- const k = canonKey(type)
16
+ const k = canonScalarKey(type)
17
17
  if ('INTEGER' === k || 'NUMBER' === k) return 'Value::Num(1.0)'
18
18
  if ('BOOLEAN' === k) return 'Value::Bool(true)'
19
19
  if ('ARRAY' === k) return 'Value::empty_list()'
@@ -1,5 +1,5 @@
1
1
 
2
- import { cmp, Content, isAuthActive, envName, canonKey, entityIdField, pickExampleEntity, opRequestShape } from '@voxgig/sdkgen'
2
+ import { cmp, Content, isAuthActive, envName, canonKey, canonScalarKey, entityIdField, pickExampleEntity, opRequestShape } from '@voxgig/sdkgen'
3
3
 
4
4
  import {
5
5
  KIT,
@@ -12,7 +12,7 @@ import { crateIdent, rustVarName } from './utility_rust'
12
12
 
13
13
  // A type-correct rust expression constructing a voxgig struct Value.
14
14
  function rustLit(type: any): string {
15
- const k = canonKey(type)
15
+ const k = canonScalarKey(type)
16
16
  if ('INTEGER' === k || 'NUMBER' === k) return 'Value::Num(1.0)'
17
17
  if ('BOOLEAN' === k) return 'Value::Bool(true)'
18
18
  if ('ARRAY' === k) return 'Value::empty_list()'
@@ -1,5 +1,5 @@
1
1
 
2
- import { cmp, Content, isAuthActive, envName, canonKey, opRequestShape, entityIdField, entityDataIdField, entityOps } from '@voxgig/sdkgen'
2
+ import { cmp, Content, isAuthActive, envName, canonKey, canonScalarKey, opRequestShape, entityIdField, entityDataIdField, entityOps } from '@voxgig/sdkgen'
3
3
 
4
4
  import {
5
5
  KIT,
@@ -36,7 +36,7 @@ const ReadmeQuick = cmp(function ReadmeQuick(props: any) {
36
36
 
37
37
  // A type-correct rust expression constructing a voxgig struct Value.
38
38
  const rustLit = (type: any, placeholder: string = 'example'): string => {
39
- const k = canonKey(type)
39
+ const k = canonScalarKey(type)
40
40
  if ('INTEGER' === k || 'NUMBER' === k) return 'Value::Num(1.0)'
41
41
  if ('BOOLEAN' === k) return 'Value::Bool(true)'
42
42
  if ('ARRAY' === k) return 'Value::empty_list()'
@@ -1,5 +1,5 @@
1
1
 
2
- import { cmp, each, Content, canonToType, canonKey, File, isAuthActive, entityIdField, opRequestShape } from '@voxgig/sdkgen'
2
+ import { cmp, each, Content, canonToType, canonKey, canonScalarKey, File, isAuthActive, entityIdField, opRequestShape } from '@voxgig/sdkgen'
3
3
 
4
4
  import {
5
5
  KIT,
@@ -13,7 +13,7 @@ import { crateIdent, rustVarName } from './utility_rust'
13
13
 
14
14
  // A type-correct rust expression constructing a voxgig struct Value.
15
15
  function rustLit(type: any, placeholder: string = 'example'): string {
16
- const k = canonKey(type)
16
+ const k = canonScalarKey(type)
17
17
  if ('INTEGER' === k || 'NUMBER' === k) return 'Value::Num(1.0)'
18
18
  if ('BOOLEAN' === k) return 'Value::Bool(true)'
19
19
  if ('ARRAY' === k) return 'Value::empty_list()'
@@ -1,5 +1,5 @@
1
1
 
2
- import { cmp, Content, isAuthActive, envName, canonKey, entityIdField, opRequestShape } from '@voxgig/sdkgen'
2
+ import { cmp, Content, isAuthActive, envName, canonKey, canonScalarKey, entityIdField, opRequestShape } from '@voxgig/sdkgen'
3
3
 
4
4
  import {
5
5
  KIT,
@@ -14,7 +14,7 @@ import { crateIdent, rustVarName } from './utility_rust'
14
14
  // param. Strings render the quoted placeholder; numeric/boolean/array/object
15
15
  // render a typed literal.
16
16
  function rustLit(type: any, placeholder: string = 'example'): string {
17
- const k = canonKey(type)
17
+ const k = canonScalarKey(type)
18
18
  if ('INTEGER' === k || 'NUMBER' === k) return 'Value::Num(1.0)'
19
19
  if ('BOOLEAN' === k) return 'Value::Bool(true)'
20
20
  if ('ARRAY' === k) return 'Value::empty_list()'
@@ -1,5 +1,5 @@
1
1
 
2
- import { cmp, Content, canonKey, entityIdField, pickExampleEntity, opRequestShape } from '@voxgig/sdkgen'
2
+ import { cmp, Content, canonKey, canonScalarKey, entityIdField, pickExampleEntity, opRequestShape } from '@voxgig/sdkgen'
3
3
 
4
4
  import {
5
5
  KIT,
@@ -13,7 +13,7 @@ import { crateIdent, rustVarName } from './utility_rust'
13
13
  // A type-correct rust expression constructing a voxgig struct Value for a
14
14
  // field's canonical type.
15
15
  function rustLit(type: any): string {
16
- const k = canonKey(type)
16
+ const k = canonScalarKey(type)
17
17
  if ('INTEGER' === k || 'NUMBER' === k) return 'Value::Num(1.0)'
18
18
  if ('BOOLEAN' === k) return 'Value::Bool(true)'
19
19
  if ('ARRAY' === k) return 'Value::empty_list()'
@@ -1,5 +1,5 @@
1
1
 
2
- import { cmp, each, Content, canonToType, canonKey, entityIdField, opRequestShape } from '@voxgig/sdkgen'
2
+ import { cmp, each, Content, canonToType, canonKey, canonScalarKey, entityIdField, opRequestShape } from '@voxgig/sdkgen'
3
3
 
4
4
  import {
5
5
  KIT,
@@ -13,7 +13,7 @@ import { scalaVarName } from './utility_scala'
13
13
 
14
14
  // A type-correct Scala literal for a field's canonical type.
15
15
  function scalaLit(type: any, placeholder: string = 'example'): string {
16
- const k = canonKey(type)
16
+ const k = canonScalarKey(type)
17
17
  if ('INTEGER' === k) return '1L'
18
18
  if ('NUMBER' === k) return '1.0'
19
19
  if ('BOOLEAN' === k) return 'true'
@@ -1,5 +1,5 @@
1
1
 
2
- import { cmp, Content, isAuthActive, envName, canonKey, entityIdField, pickExampleEntity, opRequestShape } from '@voxgig/sdkgen'
2
+ import { cmp, Content, isAuthActive, envName, canonKey, canonScalarKey, entityIdField, pickExampleEntity, opRequestShape } from '@voxgig/sdkgen'
3
3
 
4
4
  import {
5
5
  KIT,
@@ -11,7 +11,7 @@ import { scalaVarName } from './utility_scala'
11
11
 
12
12
  // A type-correct Scala literal for a field's canonical type.
13
13
  function scalaLit(type: any): string {
14
- const k = canonKey(type)
14
+ const k = canonScalarKey(type)
15
15
  if ('INTEGER' === k) return '1L'
16
16
  if ('NUMBER' === k) return '1.0'
17
17
  if ('BOOLEAN' === k) return 'true'
@@ -1,5 +1,5 @@
1
1
 
2
- import { cmp, Content, isAuthActive, envName, canonKey, opRequestShape, entityIdField, entityOps } from '@voxgig/sdkgen'
2
+ import { cmp, Content, isAuthActive, envName, canonKey, canonScalarKey, opRequestShape, entityIdField, entityOps } from '@voxgig/sdkgen'
3
3
 
4
4
  import {
5
5
  KIT,
@@ -35,7 +35,7 @@ const ReadmeQuick = cmp(function ReadmeQuick(props: any) {
35
35
  // A type-correct Scala literal for a param — the loose object model means
36
36
  // all values live in a java.util.Map[String, Object].
37
37
  const scalaLit = (type: any, placeholder: string = 'example'): string => {
38
- const k = canonKey(type)
38
+ const k = canonScalarKey(type)
39
39
  if ('INTEGER' === k) return '1L'
40
40
  if ('NUMBER' === k) return '1.0'
41
41
  if ('BOOLEAN' === k) return 'true'
@@ -1,5 +1,5 @@
1
1
 
2
- import { cmp, each, Content, canonToType, canonKey, File, isAuthActive, entityIdField, opRequestShape } from '@voxgig/sdkgen'
2
+ import { cmp, each, Content, canonToType, canonKey, canonScalarKey, File, isAuthActive, entityIdField, opRequestShape } from '@voxgig/sdkgen'
3
3
 
4
4
  import {
5
5
  KIT,
@@ -13,7 +13,7 @@ import { scalaVarName } from './utility_scala'
13
13
 
14
14
  // A type-correct Scala literal for a field's canonical type.
15
15
  function scalaLit(type: any, placeholder: string = 'example'): string {
16
- const k = canonKey(type)
16
+ const k = canonScalarKey(type)
17
17
  if ('INTEGER' === k) return '1L'
18
18
  if ('NUMBER' === k) return '1.0'
19
19
  if ('BOOLEAN' === k) return 'true'
@@ -1,5 +1,5 @@
1
1
 
2
- import { cmp, Content, isAuthActive, envName, canonKey, entityIdField, opRequestShape } from '@voxgig/sdkgen'
2
+ import { cmp, Content, isAuthActive, envName, canonKey, canonScalarKey, entityIdField, opRequestShape } from '@voxgig/sdkgen'
3
3
 
4
4
  import {
5
5
  KIT,
@@ -14,7 +14,7 @@ import { scalaVarName, scalaPackage } from './utility_scala'
14
14
  // render a typed literal; strings render the quoted placeholder. The SDK's
15
15
  // loose object model means all values live in java.util.Map[String, Object].
16
16
  function scalaLit(type: any, placeholder: string = 'example'): string {
17
- const k = canonKey(type)
17
+ const k = canonScalarKey(type)
18
18
  if ('INTEGER' === k) return '1L'
19
19
  if ('NUMBER' === k) return '1.0'
20
20
  if ('BOOLEAN' === k) return 'true'
@@ -1,5 +1,5 @@
1
1
 
2
- import { cmp, Content, canonKey, entityIdField, pickExampleEntity, opRequestShape } from '@voxgig/sdkgen'
2
+ import { cmp, Content, canonKey, canonScalarKey, entityIdField, pickExampleEntity, opRequestShape } from '@voxgig/sdkgen'
3
3
 
4
4
  import {
5
5
  KIT,
@@ -11,7 +11,7 @@ import { scalaVarName } from './utility_scala'
11
11
 
12
12
  // A type-correct Scala literal for a field's canonical type.
13
13
  function scalaLit(type: any): string {
14
- const k = canonKey(type)
14
+ const k = canonScalarKey(type)
15
15
  if ('INTEGER' === k) return '1L'
16
16
  if ('NUMBER' === k) return '1.0'
17
17
  if ('BOOLEAN' === k) return 'true'
@@ -1,5 +1,5 @@
1
1
 
2
- import { cmp, each, Content, canonToType, canonKey, entityIdField, opRequestShape } from '@voxgig/sdkgen'
2
+ import { cmp, each, Content, canonToType, canonKey, canonScalarKey, entityIdField, opRequestShape } from '@voxgig/sdkgen'
3
3
 
4
4
  import {
5
5
  KIT,
@@ -13,7 +13,7 @@ import { swiftVarName } from './utility_swift'
13
13
 
14
14
  // A type-correct Swift `Value` literal for a field's canonical type.
15
15
  function swiftLit(type: any, placeholder: string = 'example'): string {
16
- const k = canonKey(type)
16
+ const k = canonScalarKey(type)
17
17
  if ('INTEGER' === k) return '.int(1)'
18
18
  if ('NUMBER' === k) return '.double(1.0)'
19
19
  if ('BOOLEAN' === k) return '.bool(true)'
@@ -1,5 +1,5 @@
1
1
 
2
- import { cmp, Content, isAuthActive, envName, canonKey, entityIdField, pickExampleEntity, opRequestShape } from '@voxgig/sdkgen'
2
+ import { cmp, Content, isAuthActive, envName, canonKey, canonScalarKey, entityIdField, pickExampleEntity, opRequestShape } from '@voxgig/sdkgen'
3
3
 
4
4
  import {
5
5
  KIT,
@@ -11,7 +11,7 @@ import { swiftVarName } from './utility_swift'
11
11
 
12
12
  // A type-correct Swift `Value` literal for a field's canonical type.
13
13
  function swiftLit(type: any): string {
14
- const k = canonKey(type)
14
+ const k = canonScalarKey(type)
15
15
  if ('INTEGER' === k) return '.int(1)'
16
16
  if ('NUMBER' === k) return '.double(1.0)'
17
17
  if ('BOOLEAN' === k) return '.bool(true)'
@@ -1,5 +1,5 @@
1
1
 
2
- import { cmp, Content, isAuthActive, envName, canonKey, opRequestShape, entityIdField, entityOps } from '@voxgig/sdkgen'
2
+ import { cmp, Content, isAuthActive, envName, canonKey, canonScalarKey, opRequestShape, entityIdField, entityOps } from '@voxgig/sdkgen'
3
3
 
4
4
  import {
5
5
  KIT,
@@ -36,7 +36,7 @@ const ReadmeQuick = cmp(function ReadmeQuick(props: any) {
36
36
  // A type-correct Swift `Value` literal for a param — the loose object model
37
37
  // means all values live in a `VMap` of `Value`.
38
38
  const swiftLit = (type: any, placeholder: string = 'example'): string => {
39
- const k = canonKey(type)
39
+ const k = canonScalarKey(type)
40
40
  if ('INTEGER' === k) return '.int(1)'
41
41
  if ('NUMBER' === k) return '.double(1.0)'
42
42
  if ('BOOLEAN' === k) return '.bool(true)'
@@ -1,5 +1,5 @@
1
1
 
2
- import { cmp, each, Content, canonToType, canonKey, File, isAuthActive, entityIdField, opRequestShape } from '@voxgig/sdkgen'
2
+ import { cmp, each, Content, canonToType, canonKey, canonScalarKey, File, isAuthActive, entityIdField, opRequestShape } from '@voxgig/sdkgen'
3
3
 
4
4
  import {
5
5
  KIT,
@@ -13,7 +13,7 @@ import { swiftVarName } from './utility_swift'
13
13
 
14
14
  // A type-correct Swift `Value` literal for a field's canonical type.
15
15
  function swiftLit(type: any, placeholder: string = 'example'): string {
16
- const k = canonKey(type)
16
+ const k = canonScalarKey(type)
17
17
  if ('INTEGER' === k) return '.int(1)'
18
18
  if ('NUMBER' === k) return '.double(1.0)'
19
19
  if ('BOOLEAN' === k) return '.bool(true)'
@@ -1,5 +1,5 @@
1
1
 
2
- import { cmp, Content, isAuthActive, envName, canonKey, entityIdField, opRequestShape } from '@voxgig/sdkgen'
2
+ import { cmp, Content, isAuthActive, envName, canonKey, canonScalarKey, entityIdField, opRequestShape } from '@voxgig/sdkgen'
3
3
 
4
4
  import {
5
5
  KIT,
@@ -14,7 +14,7 @@ import { swiftVarName } from './utility_swift'
14
14
  // object params render a typed literal; strings render the quoted placeholder.
15
15
  // The SDK's loose object model means every value is a `Value` inside a `VMap`.
16
16
  function swiftLit(type: any, placeholder: string = 'example'): string {
17
- const k = canonKey(type)
17
+ const k = canonScalarKey(type)
18
18
  if ('INTEGER' === k) return '.int(1)'
19
19
  if ('NUMBER' === k) return '.double(1.0)'
20
20
  if ('BOOLEAN' === k) return '.bool(true)'
@@ -1,5 +1,5 @@
1
1
 
2
- import { cmp, Content, canonKey, entityIdField, pickExampleEntity, opRequestShape } from '@voxgig/sdkgen'
2
+ import { cmp, Content, canonKey, canonScalarKey, entityIdField, pickExampleEntity, opRequestShape } from '@voxgig/sdkgen'
3
3
 
4
4
  import {
5
5
  KIT,
@@ -11,7 +11,7 @@ import { swiftVarName } from './utility_swift'
11
11
 
12
12
  // A type-correct Swift `Value` literal for a field's canonical type.
13
13
  function swiftLit(type: any): string {
14
- const k = canonKey(type)
14
+ const k = canonScalarKey(type)
15
15
  if ('INTEGER' === k) return '.int(1)'
16
16
  if ('NUMBER' === k) return '.double(1.0)'
17
17
  if ('BOOLEAN' === k) return '.bool(true)'
@@ -4,6 +4,7 @@ import * as Path from 'node:path'
4
4
 
5
5
  import {
6
6
  canonKey,
7
+ canonScalarKey,
7
8
  each,
8
9
  } from '@voxgig/sdkgen'
9
10
 
@@ -49,7 +50,12 @@ function paramCanonType(entity: any, op: any, paramName: string): unknown {
49
50
  // string is not assignable to `any[]` / `Record<string, any>`), everything
50
51
  // else (STRING, unknown, missing) as the quoted `placeholder`.
51
52
  function exampleValue(entity: any, op: any, paramName: string, placeholder: string): string {
52
- const key = canonKey(paramCanonType(entity, op, paramName))
53
+ // canonScalarKey, not canonKey: a nullable field's sentinel is the union
54
+ // ['`$ONE`', ['`$NUMBER`','`$NULL`']], which canonKey stringifies into
55
+ // nothing recognizable — so a `number | null` id fell through to the
56
+ // quoted placeholder and the example failed to compile against the type
57
+ // generated from that very sentinel.
58
+ const key = canonScalarKey(paramCanonType(entity, op, paramName))
53
59
  if ('INTEGER' === key || 'NUMBER' === key) {
54
60
  return '1'
55
61
  }
@@ -62,6 +68,9 @@ function exampleValue(entity: any, op: any, paramName: string, placeholder: stri
62
68
  if ('OBJECT' === key) {
63
69
  return '{}'
64
70
  }
71
+ if ('NULL' === key) {
72
+ return 'null'
73
+ }
65
74
  return `'${placeholder}'`
66
75
  }
67
76
 
@@ -1,5 +1,5 @@
1
1
 
2
- import { cmp, each, Content, canonKey, entityIdField, opRequestShape } from '@voxgig/sdkgen'
2
+ import { cmp, each, Content, canonKey, canonScalarKey, entityIdField, opRequestShape } from '@voxgig/sdkgen'
3
3
 
4
4
  import {
5
5
  KIT,
@@ -26,7 +26,7 @@ function zigType(type: any): string {
26
26
 
27
27
  // A type-correct zig expression constructing a voxgig struct Value.
28
28
  function zigLit(type: any, placeholder: string = 'example'): string {
29
- const k = canonKey(type)
29
+ const k = canonScalarKey(type)
30
30
  if ('INTEGER' === k || 'NUMBER' === k) return 'h.vnum(1)'
31
31
  if ('BOOLEAN' === k) return 'h.vbool(true)'
32
32
  if ('ARRAY' === k) return 'h.olist()'
@@ -1,5 +1,5 @@
1
1
 
2
- import { cmp, Content, isAuthActive, envName, canonKey, entityIdField, pickExampleEntity, opRequestShape } from '@voxgig/sdkgen'
2
+ import { cmp, Content, isAuthActive, envName, canonKey, canonScalarKey, entityIdField, pickExampleEntity, opRequestShape } from '@voxgig/sdkgen'
3
3
 
4
4
  import {
5
5
  KIT,
@@ -12,7 +12,7 @@ import { zigVarName } from './utility_zig'
12
12
 
13
13
  // A type-correct zig expression constructing a voxgig struct Value.
14
14
  function zigLit(type: any): string {
15
- const k = canonKey(type)
15
+ const k = canonScalarKey(type)
16
16
  if ('INTEGER' === k || 'NUMBER' === k) return 'h.vnum(1)'
17
17
  if ('BOOLEAN' === k) return 'h.vbool(true)'
18
18
  if ('ARRAY' === k) return 'h.olist()'
@@ -1,5 +1,5 @@
1
1
 
2
- import { cmp, Content, isAuthActive, envName, canonKey, opRequestShape, entityIdField, entityOps } from '@voxgig/sdkgen'
2
+ import { cmp, Content, isAuthActive, envName, canonKey, canonScalarKey, opRequestShape, entityIdField, entityOps } from '@voxgig/sdkgen'
3
3
 
4
4
  import {
5
5
  KIT,
@@ -35,7 +35,7 @@ const ReadmeQuick = cmp(function ReadmeQuick(props: any) {
35
35
 
36
36
  // A type-correct zig expression constructing a voxgig struct Value.
37
37
  const zigLit = (type: any, placeholder: string = 'example'): string => {
38
- const k = canonKey(type)
38
+ const k = canonScalarKey(type)
39
39
  if ('INTEGER' === k || 'NUMBER' === k) return 'h.vnum(1)'
40
40
  if ('BOOLEAN' === k) return 'h.vbool(true)'
41
41
  if ('ARRAY' === k) return 'h.olist()'
@@ -1,5 +1,5 @@
1
1
 
2
- import { cmp, each, Content, canonKey, File, isAuthActive, entityIdField, opRequestShape } from '@voxgig/sdkgen'
2
+ import { cmp, each, Content, canonKey, canonScalarKey, File, isAuthActive, entityIdField, opRequestShape } from '@voxgig/sdkgen'
3
3
 
4
4
  import {
5
5
  KIT,
@@ -24,7 +24,7 @@ function zigType(type: any): string {
24
24
 
25
25
  // A type-correct zig expression constructing a voxgig struct Value.
26
26
  function zigLit(type: any, placeholder: string = 'example'): string {
27
- const k = canonKey(type)
27
+ const k = canonScalarKey(type)
28
28
  if ('INTEGER' === k || 'NUMBER' === k) return 'h.vnum(1)'
29
29
  if ('BOOLEAN' === k) return 'h.vbool(true)'
30
30
  if ('ARRAY' === k) return 'h.olist()'
@@ -1,5 +1,5 @@
1
1
 
2
- import { cmp, Content, isAuthActive, envName, canonKey, entityIdField, opRequestShape } from '@voxgig/sdkgen'
2
+ import { cmp, Content, isAuthActive, envName, canonKey, canonScalarKey, entityIdField, opRequestShape } from '@voxgig/sdkgen'
3
3
 
4
4
  import {
5
5
  KIT,
@@ -14,7 +14,7 @@ import { zigVarName } from './utility_zig'
14
14
  // param. Strings render the quoted placeholder; numeric/boolean/array/object
15
15
  // render a typed literal.
16
16
  function zigLit(type: any, placeholder: string = 'example'): string {
17
- const k = canonKey(type)
17
+ const k = canonScalarKey(type)
18
18
  if ('INTEGER' === k || 'NUMBER' === k) return 'h.vnum(1)'
19
19
  if ('BOOLEAN' === k) return 'h.vbool(true)'
20
20
  if ('ARRAY' === k) return 'h.olist()'
@@ -1,5 +1,5 @@
1
1
 
2
- import { cmp, Content, canonKey, entityIdField, pickExampleEntity, opRequestShape } from '@voxgig/sdkgen'
2
+ import { cmp, Content, canonKey, canonScalarKey, entityIdField, pickExampleEntity, opRequestShape } from '@voxgig/sdkgen'
3
3
 
4
4
  import {
5
5
  KIT,
@@ -12,7 +12,7 @@ import { zigVarName } from './utility_zig'
12
12
 
13
13
  // A type-correct zig expression constructing a voxgig struct Value.
14
14
  function zigLit(type: any): string {
15
- const k = canonKey(type)
15
+ const k = canonScalarKey(type)
16
16
  if ('INTEGER' === k || 'NUMBER' === k) return 'h.vnum(1)'
17
17
  if ('BOOLEAN' === k) return 'h.vbool(true)'
18
18
  if ('ARRAY' === k) return 'h.olist()'
@@ -3,7 +3,7 @@
3
3
  "package": 1
4
4
  },
5
5
  "name": "@voxgig/sdkgen",
6
- "version": "4.2.0",
6
+ "version": "4.2.1",
7
7
  "provides": {
8
8
  "target": [
9
9
  "c",
@@ -182,6 +182,43 @@ function canonKey(sentinel: unknown): string {
182
182
  }
183
183
 
184
184
 
185
+ // The bare key of the sentinel a VALUE of this type must satisfy, resolving
186
+ // the union sentinel `['`$ONE`', [member, ...]]` to its first non-NULL member
187
+ // (recursively — a member may itself be a union).
188
+ //
189
+ // canonKey alone cannot do this: given an array it stringifies it, so a
190
+ // nullable `['`$ONE`', ['`$NUMBER`','`$NULL`']]` field yields neither NUMBER
191
+ // nor anything else recognizable and every caller falls through to its
192
+ // "unknown, use a string" branch. canonToType meanwhile renders that same
193
+ // sentinel as `number | null`, so the doc example said `'..._id'` while the
194
+ // generated type said `number` — a TS2322 in the SDK's own README, which is
195
+ // exactly the disagreement the example helpers exist to prevent.
196
+ //
197
+ // A union of nothing but NULL resolves to NULL; an unrecognized array shape,
198
+ // or an empty member list, resolves to '' (unknown) like any missing
199
+ // sentinel.
200
+ function canonScalarKey(sentinel: unknown): string {
201
+ if (Array.isArray(sentinel)) {
202
+ if ('ONE' !== canonKey(sentinel[0]) || !Array.isArray(sentinel[1])) {
203
+ return ''
204
+ }
205
+ let sawNull = false
206
+ for (const member of sentinel[1]) {
207
+ const key = canonScalarKey(member)
208
+ if ('NULL' === key) {
209
+ sawNull = true
210
+ continue
211
+ }
212
+ if ('' !== key) {
213
+ return key
214
+ }
215
+ }
216
+ return sawNull ? 'NULL' : ''
217
+ }
218
+ return canonKey(sentinel)
219
+ }
220
+
221
+
185
222
  // Map a field/param type sentinel to a target-language primitive type.
186
223
  // Unknown or missing sentinel -> that language's "any" (never throws).
187
224
  //
@@ -220,6 +257,7 @@ export {
220
257
  canonToType,
221
258
  canonToDtype,
222
259
  canonKey,
260
+ canonScalarKey,
223
261
  CANON_TYPE,
224
262
  CANON_ANY,
225
263
  CANON_UNION_JOIN,
package/src/sdkgen.ts CHANGED
@@ -57,7 +57,7 @@ import { buildIdNames } from './helpers/buildIdNames'
57
57
  import { getMatchEntries } from './helpers/getMatchEntries'
58
58
  import { collectDeps } from './helpers/collectDeps'
59
59
  import type { DepEntry } from './helpers/collectDeps'
60
- import { canonToType, canonToDtype, canonKey } from './helpers/canonType'
60
+ import { canonToType, canonToDtype, canonKey, canonScalarKey } from './helpers/canonType'
61
61
  import { OP_SUFFIX, opTypeName, opParams, ownPoint, opActions, entityActions, entityPath, opRequestShape, entityIdField, entityDataIdField, entityOps, entityPrimaryOp, pickExampleEntity, entityClassName, entityTypeCollisions, warnEntityTypeCollisions, deriveEntityNames, entityCollection } from './helpers/opShape'
62
62
  import { isReservedName, safeVarName, exampleVarName, phpEntityAccessor, entityCacheField, isRbCoreConstant, isRbSdkConstant, rbSafeTypeName, isSwiftSdkType, swiftSafeTypeName, isPhpReservedType, phpSafeTypeName, isTsReservedType, tsSafeTypeName, jsProp, jsOptProp, jsKey } from './helpers/naming'
63
63
  import { serverVariables, hasServerVariables } from './helpers/serverVars'
@@ -1059,6 +1059,7 @@ export {
1059
1059
  canonToType,
1060
1060
  canonToDtype,
1061
1061
  canonKey,
1062
+ canonScalarKey,
1062
1063
 
1063
1064
  OP_SUFFIX,
1064
1065
  opTypeName,