@bizone-ai/json-transform-utils 1.10.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 (160) hide show
  1. package/LICENSE +21 -0
  2. package/README.md +81 -0
  3. package/dist/ParseContext.d.ts +23 -0
  4. package/dist/ParseContext.d.ts.map +1 -0
  5. package/dist/ParseContext.js +69 -0
  6. package/dist/ParseContext.js.map +1 -0
  7. package/dist/__tests__/functions/functionsParser.test.d.ts +2 -0
  8. package/dist/__tests__/functions/functionsParser.test.d.ts.map +1 -0
  9. package/dist/__tests__/functions/functionsParser.test.js +787 -0
  10. package/dist/__tests__/functions/functionsParser.test.js.map +1 -0
  11. package/dist/__tests__/jsonpath/jsonpathJoin.test.d.ts +2 -0
  12. package/dist/__tests__/jsonpath/jsonpathJoin.test.d.ts.map +1 -0
  13. package/dist/__tests__/jsonpath/jsonpathJoin.test.js +27 -0
  14. package/dist/__tests__/jsonpath/jsonpathJoin.test.js.map +1 -0
  15. package/dist/__tests__/parse.test.d.ts +2 -0
  16. package/dist/__tests__/parse.test.d.ts.map +1 -0
  17. package/dist/__tests__/parse.test.js +22 -0
  18. package/dist/__tests__/parse.test.js.map +1 -0
  19. package/dist/__tests__/utils/convert.test.d.ts +2 -0
  20. package/dist/__tests__/utils/convert.test.d.ts.map +1 -0
  21. package/dist/__tests__/utils/convert.test.js +181 -0
  22. package/dist/__tests__/utils/convert.test.js.map +1 -0
  23. package/dist/functions/ContextVariablesSchemas.d.ts +3 -0
  24. package/dist/functions/ContextVariablesSchemas.d.ts.map +1 -0
  25. package/dist/functions/ContextVariablesSchemas.js +9 -0
  26. package/dist/functions/ContextVariablesSchemas.js.map +1 -0
  27. package/dist/functions/definitions.d.ts +4 -0
  28. package/dist/functions/definitions.d.ts.map +1 -0
  29. package/dist/functions/definitions.js +2090 -0
  30. package/dist/functions/definitions.js.map +1 -0
  31. package/dist/functions/examples/and.json +44 -0
  32. package/dist/functions/examples/at.json +156 -0
  33. package/dist/functions/examples/avg.json +78 -0
  34. package/dist/functions/examples/base64.json +368 -0
  35. package/dist/functions/examples/boolean.json +236 -0
  36. package/dist/functions/examples/coalesce.json +58 -0
  37. package/dist/functions/examples/concat.json +70 -0
  38. package/dist/functions/examples/contains.json +61 -0
  39. package/dist/functions/examples/csv.json +116 -0
  40. package/dist/functions/examples/csvparse.json +97 -0
  41. package/dist/functions/examples/date.json +389 -0
  42. package/dist/functions/examples/decimal.json +102 -0
  43. package/dist/functions/examples/digest.json +125 -0
  44. package/dist/functions/examples/distinct.json +142 -0
  45. package/dist/functions/examples/entries.json +88 -0
  46. package/dist/functions/examples/eval.json +72 -0
  47. package/dist/functions/examples/every.json +96 -0
  48. package/dist/functions/examples/filter.json +51 -0
  49. package/dist/functions/examples/find.json +51 -0
  50. package/dist/functions/examples/findindex.json +61 -0
  51. package/dist/functions/examples/flat.json +74 -0
  52. package/dist/functions/examples/flatten.json +76 -0
  53. package/dist/functions/examples/form.json +60 -0
  54. package/dist/functions/examples/formparse.json +62 -0
  55. package/dist/functions/examples/group.json +208 -0
  56. package/dist/functions/examples/if.json +294 -0
  57. package/dist/functions/examples/indexof.json +48 -0
  58. package/dist/functions/examples/is.json +512 -0
  59. package/dist/functions/examples/isnull.json +51 -0
  60. package/dist/functions/examples/join.json +221 -0
  61. package/dist/functions/examples/jsonparse.json +101 -0
  62. package/dist/functions/examples/jsonpatch.json +30 -0
  63. package/dist/functions/examples/jsonpath.json +62 -0
  64. package/dist/functions/examples/jsonpointer.json +77 -0
  65. package/dist/functions/examples/jwtparse.json +54 -0
  66. package/dist/functions/examples/length.json +202 -0
  67. package/dist/functions/examples/long.json +53 -0
  68. package/dist/functions/examples/lookup.json +223 -0
  69. package/dist/functions/examples/lower.json +24 -0
  70. package/dist/functions/examples/map.json +188 -0
  71. package/dist/functions/examples/match.json +62 -0
  72. package/dist/functions/examples/matchall.json +62 -0
  73. package/dist/functions/examples/math.json +1073 -0
  74. package/dist/functions/examples/max.json +104 -0
  75. package/dist/functions/examples/merge.json +173 -0
  76. package/dist/functions/examples/min.json +104 -0
  77. package/dist/functions/examples/normalize.json +142 -0
  78. package/dist/functions/examples/not.json +99 -0
  79. package/dist/functions/examples/numberformat.json +162 -0
  80. package/dist/functions/examples/numberparse.json +72 -0
  81. package/dist/functions/examples/object.json +148 -0
  82. package/dist/functions/examples/or.json +102 -0
  83. package/dist/functions/examples/pad.json +102 -0
  84. package/dist/functions/examples/partition.json +32 -0
  85. package/dist/functions/examples/range.json +188 -0
  86. package/dist/functions/examples/raw.json +58 -0
  87. package/dist/functions/examples/reduce.json +79 -0
  88. package/dist/functions/examples/repeat.json +59 -0
  89. package/dist/functions/examples/replace.json +92 -0
  90. package/dist/functions/examples/reverse.json +94 -0
  91. package/dist/functions/examples/slice.json +360 -0
  92. package/dist/functions/examples/some.json +96 -0
  93. package/dist/functions/examples/sort.json +353 -0
  94. package/dist/functions/examples/split.json +52 -0
  95. package/dist/functions/examples/string.json +95 -0
  96. package/dist/functions/examples/substring.json +82 -0
  97. package/dist/functions/examples/sum.json +108 -0
  98. package/dist/functions/examples/switch.json +78 -0
  99. package/dist/functions/examples/template.json +125 -0
  100. package/dist/functions/examples/test.json +82 -0
  101. package/dist/functions/examples/transform.json +58 -0
  102. package/dist/functions/examples/trim.json +44 -0
  103. package/dist/functions/examples/unflatten.json +97 -0
  104. package/dist/functions/examples/upper.json +24 -0
  105. package/dist/functions/examples/uriparse.json +52 -0
  106. package/dist/functions/examples/urldecode.json +42 -0
  107. package/dist/functions/examples/urlencode.json +43 -0
  108. package/dist/functions/examples/uuid.json +142 -0
  109. package/dist/functions/examples/value.json +87 -0
  110. package/dist/functions/examples/wrap.json +122 -0
  111. package/dist/functions/examples/xml.json +142 -0
  112. package/dist/functions/examples/xmlparse.json +161 -0
  113. package/dist/functions/examples/xor.json +166 -0
  114. package/dist/functions/examples/yaml.json +196 -0
  115. package/dist/functions/examples/yamlparse.json +150 -0
  116. package/dist/functions/examples.d.ts +4 -0
  117. package/dist/functions/examples.d.ts.map +1 -0
  118. package/dist/functions/examples.js +178 -0
  119. package/dist/functions/examples.js.map +1 -0
  120. package/dist/functions/functions.d.ts +3 -0
  121. package/dist/functions/functions.d.ts.map +1 -0
  122. package/dist/functions/functions.js +9 -0
  123. package/dist/functions/functions.js.map +1 -0
  124. package/dist/functions/functionsParser.d.ts +45 -0
  125. package/dist/functions/functionsParser.d.ts.map +1 -0
  126. package/dist/functions/functionsParser.js +207 -0
  127. package/dist/functions/functionsParser.js.map +1 -0
  128. package/dist/functions/parseDefinitions.d.ts +4 -0
  129. package/dist/functions/parseDefinitions.d.ts.map +1 -0
  130. package/dist/functions/parseDefinitions.js +56 -0
  131. package/dist/functions/parseDefinitions.js.map +1 -0
  132. package/dist/functions/types.d.ts +163 -0
  133. package/dist/functions/types.d.ts.map +1 -0
  134. package/dist/functions/types.js +93 -0
  135. package/dist/functions/types.js.map +1 -0
  136. package/dist/index.d.ts +14 -0
  137. package/dist/index.d.ts.map +1 -0
  138. package/dist/index.js +36 -0
  139. package/dist/index.js.map +1 -0
  140. package/dist/jsonpath/jsonpathFunctions.d.ts +4 -0
  141. package/dist/jsonpath/jsonpathFunctions.d.ts.map +1 -0
  142. package/dist/jsonpath/jsonpathFunctions.js +26 -0
  143. package/dist/jsonpath/jsonpathFunctions.js.map +1 -0
  144. package/dist/jsonpath/jsonpathJoin.d.ts +3 -0
  145. package/dist/jsonpath/jsonpathJoin.d.ts.map +1 -0
  146. package/dist/jsonpath/jsonpathJoin.js +15 -0
  147. package/dist/jsonpath/jsonpathJoin.js.map +1 -0
  148. package/dist/parse.d.ts +12 -0
  149. package/dist/parse.d.ts.map +1 -0
  150. package/dist/parse.js +522 -0
  151. package/dist/parse.js.map +1 -0
  152. package/dist/transformUtils.d.ts +40 -0
  153. package/dist/transformUtils.d.ts.map +1 -0
  154. package/dist/transformUtils.js +89 -0
  155. package/dist/transformUtils.js.map +1 -0
  156. package/dist/utils/convert.d.ts +3 -0
  157. package/dist/utils/convert.d.ts.map +1 -0
  158. package/dist/utils/convert.js +163 -0
  159. package/dist/utils/convert.js.map +1 -0
  160. package/package.json +44 -0
@@ -0,0 +1,89 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.transformUtils = void 0;
4
+ const ContextVariablesSchemas_1 = require("./functions/ContextVariablesSchemas");
5
+ class TransformUtils {
6
+ constructor(additionalContext, specialKeys, contextVariablesSchemas, scopedContextVariablesSchema) {
7
+ this.additionalContext = additionalContext || new Set();
8
+ this.variableDetectionRegExp = this.variableDetectionRegExpFactory();
9
+ this.specialKeys = specialKeys || new Set();
10
+ this.contextVariablesSchemas = contextVariablesSchemas
11
+ ? Object.assign({}, ContextVariablesSchemas_1.ContextVariablesSchemas, contextVariablesSchemas)
12
+ : ContextVariablesSchemas_1.ContextVariablesSchemas;
13
+ this.scopedContextVariablesSchema = scopedContextVariablesSchema || {};
14
+ this.allContextVariables = Object.keys(this.contextVariablesSchemas).concat(Object.keys(this.scopedContextVariablesSchema));
15
+ }
16
+ /**
17
+ * This affects detection and syntax highlighting of additional context variables (e.g. $varname)
18
+ * @param additionalContext
19
+ */
20
+ setAdditionalContext(additionalContext) {
21
+ this.additionalContext = additionalContext;
22
+ this.variableDetectionRegExp = this.variableDetectionRegExpFactory();
23
+ }
24
+ getAdditionalContext() {
25
+ return this.additionalContext;
26
+ }
27
+ /**
28
+ * This mainly affects syntax highlighting. Making certain keys being highlighted differently.
29
+ */
30
+ setSpecialKeys(specialKeys) {
31
+ this.specialKeys = specialKeys;
32
+ }
33
+ getSpecialKeys() {
34
+ return this.specialKeys;
35
+ }
36
+ /**
37
+ * This affects detection and syntax highlighting of additional context variables (e.g. #varname)
38
+ * In this case, a schema is also required
39
+ * @param contextVariablesSchemas
40
+ */
41
+ setContextVariablesSchemas(contextVariablesSchemas) {
42
+ this.contextVariablesSchemas = Object.assign({}, ContextVariablesSchemas_1.ContextVariablesSchemas, contextVariablesSchemas);
43
+ this.allContextVariables = Object.keys(this.contextVariablesSchemas).concat(Object.keys(this.scopedContextVariablesSchema));
44
+ }
45
+ getContextVariablesSchemas() {
46
+ return this.contextVariablesSchemas;
47
+ }
48
+ setScopedContextVariablesSchema(scopedContextVariablesSchema) {
49
+ this.scopedContextVariablesSchema = scopedContextVariablesSchema;
50
+ this.allContextVariables = Object.keys(this.contextVariablesSchemas).concat(Object.keys(this.scopedContextVariablesSchema));
51
+ }
52
+ getScopedContextVariablesSchema() {
53
+ return this.scopedContextVariablesSchema;
54
+ }
55
+ matchesAnyOfContextVariables(variableName) {
56
+ for (const key of this.allContextVariables) {
57
+ if (variableName === key || variableName.startsWith(key + ".") || variableName.startsWith(key + "[")) {
58
+ return true;
59
+ }
60
+ }
61
+ return false;
62
+ }
63
+ matchesAnyOfAdditionalContext(variableName) {
64
+ for (const key of this.additionalContext) {
65
+ if (variableName === key || variableName.startsWith(key + ".") || variableName.startsWith(key + "[")) {
66
+ return true;
67
+ }
68
+ }
69
+ return false;
70
+ }
71
+ matchesAnyOfSpecialKeys(variableName) {
72
+ for (const key of this.specialKeys) {
73
+ if (variableName === key || variableName.startsWith(key + ".") || variableName.startsWith(key + "[")) {
74
+ return true;
75
+ }
76
+ }
77
+ return false;
78
+ }
79
+ variableDetectionRegExpFactory(flags = "g") {
80
+ const altNames = [];
81
+ for (const key of this.additionalContext) {
82
+ altNames.push(key.substring(1));
83
+ }
84
+ const altPrefixes = altNames.length ? `(${altNames.join("|")})?` : "";
85
+ return new RegExp(`(?<![\\])}?!@#$%^&*+\\\\\\w])(#[a-z_]+[a-z_\\d]*|\\$(?!\\$)${altPrefixes})(((\\.(?![-\\w$]+\\()[-\\w$]+)|(\\[[^\\]\\n]+]))+|(?=[^\\w.]|$))`, flags);
86
+ }
87
+ }
88
+ exports.transformUtils = new TransformUtils();
89
+ //# sourceMappingURL=transformUtils.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"transformUtils.js","sourceRoot":"","sources":["../src/transformUtils.ts"],"names":[],"mappings":";;;AACA,iFAA8E;AAE9E,MAAM,cAAc;IAWlB,YACE,iBAA+B,EAC/B,WAAyB,EACzB,uBAAoD,EACpD,4BAAyD;QAEzD,IAAI,CAAC,iBAAiB,GAAG,iBAAiB,IAAI,IAAI,GAAG,EAAE,CAAC;QACxD,IAAI,CAAC,uBAAuB,GAAG,IAAI,CAAC,8BAA8B,EAAE,CAAC;QACrE,IAAI,CAAC,WAAW,GAAG,WAAW,IAAI,IAAI,GAAG,EAAE,CAAC;QAC5C,IAAI,CAAC,uBAAuB,GAAG,uBAAuB;YACpD,CAAC,CAAC,MAAM,CAAC,MAAM,CAAC,EAAE,EAAE,iDAAuB,EAAE,uBAAuB,CAAC;YACrE,CAAC,CAAC,iDAAuB,CAAC;QAC5B,IAAI,CAAC,4BAA4B,GAAG,4BAA4B,IAAI,EAAE,CAAC;QACvE,IAAI,CAAC,mBAAmB,GAAG,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,uBAAuB,CAAC,CAAC,MAAM,CACzE,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,4BAA4B,CAAC,CAC/C,CAAC;IACJ,CAAC;IAED;;;OAGG;IACI,oBAAoB,CAAC,iBAA8B;QACxD,IAAI,CAAC,iBAAiB,GAAG,iBAAiB,CAAC;QAC3C,IAAI,CAAC,uBAAuB,GAAG,IAAI,CAAC,8BAA8B,EAAE,CAAC;IACvE,CAAC;IAEM,oBAAoB;QACzB,OAAO,IAAI,CAAC,iBAAiB,CAAC;IAChC,CAAC;IAED;;OAEG;IACI,cAAc,CAAC,WAAwB;QAC5C,IAAI,CAAC,WAAW,GAAG,WAAW,CAAC;IACjC,CAAC;IAEM,cAAc;QACnB,OAAO,IAAI,CAAC,WAAW,CAAC;IAC1B,CAAC;IAED;;;;OAIG;IACI,0BAA0B,CAAC,uBAAmD;QACnF,IAAI,CAAC,uBAAuB,GAAG,MAAM,CAAC,MAAM,CAAC,EAAE,EAAE,iDAAuB,EAAE,uBAAuB,CAAC,CAAC;QACnG,IAAI,CAAC,mBAAmB,GAAG,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,uBAAuB,CAAC,CAAC,MAAM,CACzE,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,4BAA4B,CAAC,CAC/C,CAAC;IACJ,CAAC;IAEM,0BAA0B;QAC/B,OAAO,IAAI,CAAC,uBAAuB,CAAC;IACtC,CAAC;IAEM,+BAA+B,CAAC,4BAA+D;QACpG,IAAI,CAAC,4BAA4B,GAAG,4BAA4B,CAAC;QACjE,IAAI,CAAC,mBAAmB,GAAG,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,uBAAuB,CAAC,CAAC,MAAM,CACzE,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,4BAA4B,CAAC,CAC/C,CAAC;IACJ,CAAC;IAEM,+BAA+B;QACpC,OAAO,IAAI,CAAC,4BAA4B,CAAC;IAC3C,CAAC;IAEM,4BAA4B,CAAC,YAAoB;QACtD,KAAK,MAAM,GAAG,IAAI,IAAI,CAAC,mBAAmB,EAAE,CAAC;YAC3C,IAAI,YAAY,KAAK,GAAG,IAAI,YAAY,CAAC,UAAU,CAAC,GAAG,GAAG,GAAG,CAAC,IAAI,YAAY,CAAC,UAAU,CAAC,GAAG,GAAG,GAAG,CAAC,EAAE,CAAC;gBACrG,OAAO,IAAI,CAAC;YACd,CAAC;QACH,CAAC;QACD,OAAO,KAAK,CAAC;IACf,CAAC;IAEM,6BAA6B,CAAC,YAAoB;QACvD,KAAK,MAAM,GAAG,IAAI,IAAI,CAAC,iBAAiB,EAAE,CAAC;YACzC,IAAI,YAAY,KAAK,GAAG,IAAI,YAAY,CAAC,UAAU,CAAC,GAAG,GAAG,GAAG,CAAC,IAAI,YAAY,CAAC,UAAU,CAAC,GAAG,GAAG,GAAG,CAAC,EAAE,CAAC;gBACrG,OAAO,IAAI,CAAC;YACd,CAAC;QACH,CAAC;QACD,OAAO,KAAK,CAAC;IACf,CAAC;IAEM,uBAAuB,CAAC,YAAoB;QACjD,KAAK,MAAM,GAAG,IAAI,IAAI,CAAC,WAAW,EAAE,CAAC;YACnC,IAAI,YAAY,KAAK,GAAG,IAAI,YAAY,CAAC,UAAU,CAAC,GAAG,GAAG,GAAG,CAAC,IAAI,YAAY,CAAC,UAAU,CAAC,GAAG,GAAG,GAAG,CAAC,EAAE,CAAC;gBACrG,OAAO,IAAI,CAAC;YACd,CAAC;QACH,CAAC;QACD,OAAO,KAAK,CAAC;IACf,CAAC;IAEO,8BAA8B,CAAC,KAAK,GAAG,GAAG;QAChD,MAAM,QAAQ,GAAa,EAAE,CAAC;QAC9B,KAAK,MAAM,GAAG,IAAI,IAAI,CAAC,iBAAiB,EAAE,CAAC;YACzC,QAAQ,CAAC,IAAI,CAAC,GAAG,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC,CAAC;QAClC,CAAC;QACD,MAAM,WAAW,GAAG,QAAQ,CAAC,MAAM,CAAC,CAAC,CAAC,IAAI,QAAQ,CAAC,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC;QAEtE,OAAO,IAAI,MAAM,CACf,8DAA8D,WAAW,mEAAmE,EAC5I,KAAK,CACN,CAAC;IACJ,CAAC;CACF;AAEY,QAAA,cAAc,GAAG,IAAI,cAAc,EAAE,CAAC"}
@@ -0,0 +1,3 @@
1
+ export declare const convertFunctionsToObjects: (definition: any) => any;
2
+ export declare const tryConvertFunctionsToInline: (definition: any) => any;
3
+ //# sourceMappingURL=convert.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"convert.d.ts","sourceRoot":"","sources":["../../src/utils/convert.ts"],"names":[],"mappings":"AAsCA,eAAO,MAAM,yBAAyB,eAAgB,GAAG,KAAG,GAiC3D,CAAC;AAMF,eAAO,MAAM,2BAA2B,eAAgB,GAAG,KAAG,GA2F7D,CAAC"}
@@ -0,0 +1,163 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.tryConvertFunctionsToInline = exports.convertFunctionsToObjects = void 0;
4
+ const functionsParser_1 = require("../functions/functionsParser");
5
+ const isMap = (value) => value && typeof value === "object" && !Array.isArray(value) && value._isBigNumber !== true;
6
+ function parseByType(arg, value) {
7
+ if (functionsParser_1.functionsParser.matchObject(value) ||
8
+ (typeof value === "string" && (value.startsWith("$") || value.startsWith("#")))) {
9
+ // if the value is a path/function, return it as is
10
+ return value;
11
+ }
12
+ switch (arg.type) {
13
+ case "const":
14
+ return arg.const;
15
+ case "boolean":
16
+ return value === "true" || value === true;
17
+ case "integer":
18
+ case "long":
19
+ case "BigDecimal":
20
+ return Number(value);
21
+ default:
22
+ return value;
23
+ }
24
+ }
25
+ const removeTrailingNulls = (arr) => {
26
+ for (let i = arr.length - 1; i >= 0; i--) {
27
+ if (arr[i] !== null && typeof arr[i] !== "undefined") {
28
+ break;
29
+ }
30
+ arr.pop();
31
+ }
32
+ return arr;
33
+ };
34
+ const convertFunctionsToObjects = (definition) => {
35
+ if (!definition) {
36
+ return definition;
37
+ }
38
+ if (typeof definition === "string") {
39
+ let result = definition;
40
+ functionsParser_1.functionsParser.matchInline(definition, (funcName, func, value, args) => {
41
+ const funcArgs = func.arguments
42
+ ?.slice()
43
+ .filter(a => typeof a.position !== "undefined")
44
+ .sort((a, b) => (a?.position ?? Infinity) - (b?.position ?? Infinity));
45
+ result = {
46
+ ["$$" + funcName]: func.argumentsAsInputSchema
47
+ ? removeTrailingNulls(funcArgs?.map(a => parseByType(a, (0, exports.convertFunctionsToObjects)(args[a.name]))) ?? [])
48
+ : (0, exports.convertFunctionsToObjects)(value) ?? true,
49
+ };
50
+ if (funcArgs && !func.argumentsAsInputSchema) {
51
+ for (const arg of funcArgs) {
52
+ const argValue = args?.[arg.name];
53
+ result[arg.name] = parseByType(arg, (0, exports.convertFunctionsToObjects)(argValue));
54
+ }
55
+ }
56
+ });
57
+ return result;
58
+ }
59
+ if (Array.isArray(definition)) {
60
+ return definition.map(exports.convertFunctionsToObjects);
61
+ }
62
+ if (typeof definition === "object") {
63
+ const convertedEntries = Object.entries(definition).map(e => [e[0], (0, exports.convertFunctionsToObjects)(e[1])]);
64
+ return Object.fromEntries(convertedEntries);
65
+ }
66
+ return definition;
67
+ };
68
+ exports.convertFunctionsToObjects = convertFunctionsToObjects;
69
+ const escapeString = (input) => {
70
+ return `'${input.replace(/\\/g, "\\\\").replace(/'/g, "\\'")}'`;
71
+ };
72
+ const tryConvertFunctionsToInline = (definition) => {
73
+ const type = typeof definition;
74
+ if (!definition || type !== "object") {
75
+ return definition;
76
+ }
77
+ // must be an object / array
78
+ const match = functionsParser_1.functionsParser.matchObject(definition);
79
+ if (!match && (Array.isArray(definition) || isMap(definition))) {
80
+ if (Array.isArray(definition)) {
81
+ return definition.map(exports.tryConvertFunctionsToInline);
82
+ }
83
+ else if (isMap(definition)) {
84
+ // if it's a map, we need to convert it to an object
85
+ const result = {};
86
+ for (const [key, value] of Object.entries(definition)) {
87
+ result[key] = (0, exports.tryConvertFunctionsToInline)(value);
88
+ }
89
+ return result;
90
+ }
91
+ }
92
+ if (!match ||
93
+ // arrays and non-function objects can't be converted to string values
94
+ (!match.func.argumentsAsInputSchema && Array.isArray(match.value)) ||
95
+ (isMap(match.value) && !functionsParser_1.functionsParser.matchObject(match.value))) {
96
+ return definition;
97
+ }
98
+ // match.value is either primitive or an object function
99
+ const funcKey = `$$${match.name}`;
100
+ let result = funcKey;
101
+ const spec = structuredClone(definition); // clone the object to avoid modifying the original
102
+ const argList = Object.keys(spec).filter(key => key !== funcKey);
103
+ let possible = true;
104
+ const argValues = [];
105
+ if (argList.length && match.func.arguments?.length) {
106
+ const funcArgs = match.func.arguments.slice().sort((a, b) => (a?.position ?? Infinity) - (b?.position ?? Infinity));
107
+ for (const arg of funcArgs) {
108
+ let argValue = (0, exports.tryConvertFunctionsToInline)(spec[arg.name]);
109
+ if (argValue !== null && typeof argValue !== "undefined") {
110
+ spec[arg.name] = argValue; // store it back for output
111
+ }
112
+ if (argValue && (Array.isArray(argValue) || typeof argValue === "object")) {
113
+ possible = false;
114
+ }
115
+ else if (possible) {
116
+ if (typeof argValue === "string" &&
117
+ (argValue.startsWith("$") || argValue.startsWith("#") || argValue.includes(","))) {
118
+ argValue = escapeString(argValue);
119
+ }
120
+ argValues.push(argValue);
121
+ }
122
+ }
123
+ }
124
+ else if (Array.isArray(match.value) && match.func.argumentsAsInputSchema) {
125
+ for (let i = 0; i < match.value.length; i++) {
126
+ let argValue = (0, exports.tryConvertFunctionsToInline)(match.value[i]);
127
+ const argName = match.func.arguments?.find(x => x.position === i)?.name;
128
+ if (argName && argValue !== null && typeof argValue !== "undefined") {
129
+ spec[funcKey][i] = argValue; // store it back for output
130
+ }
131
+ if (argValue && (Array.isArray(argValue) || typeof argValue === "object")) {
132
+ possible = false;
133
+ }
134
+ else if (possible) {
135
+ if (typeof argValue === "string" &&
136
+ (argValue.startsWith("$") || argValue.startsWith("#") || argValue.includes(","))) {
137
+ argValue = escapeString(argValue);
138
+ }
139
+ argValues.push(argValue);
140
+ }
141
+ }
142
+ }
143
+ if (possible && argValues?.length) {
144
+ removeTrailingNulls(argValues);
145
+ if (argValues.length > 0) {
146
+ result += "(" + argValues.map(x => x ?? "") + ")";
147
+ }
148
+ }
149
+ if (match.value && !match.func.argumentsAsInputSchema) {
150
+ const argValue = (0, exports.tryConvertFunctionsToInline)(match.value);
151
+ spec["$$" + match.name] = argValue; // store it back for output
152
+ result += ":";
153
+ if (argValue && (Array.isArray(argValue) || typeof argValue === "object")) {
154
+ possible = false; // the primary argument is not primitive
155
+ }
156
+ else if (possible) {
157
+ result += argValue;
158
+ }
159
+ }
160
+ return possible ? result : spec;
161
+ };
162
+ exports.tryConvertFunctionsToInline = tryConvertFunctionsToInline;
163
+ //# sourceMappingURL=convert.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"convert.js","sourceRoot":"","sources":["../../src/utils/convert.ts"],"names":[],"mappings":"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"}
package/package.json ADDED
@@ -0,0 +1,44 @@
1
+ {
2
+ "name": "@bizone-ai/json-transform-utils",
3
+ "description": "Utilities for handling JSON transformers",
4
+ "version": "1.10.0",
5
+ "main": "./dist/index.js",
6
+ "source": "src/index.ts",
7
+ "exports": "./dist/index.js",
8
+ "sideEffects": false,
9
+ "scripts": {
10
+ "build": "tsc --build",
11
+ "test": "vitest --no-watch",
12
+ "test:watch": "vitest"
13
+ },
14
+ "publishConfig": {
15
+ "access": "public"
16
+ },
17
+ "repository": {
18
+ "type": "git",
19
+ "url": "git+https://github.com/Bizone-ai/json-transform.git"
20
+ },
21
+ "files": [
22
+ "dist/"
23
+ ],
24
+ "keywords": [
25
+ "json-transform"
26
+ ],
27
+ "author": "Eli Sherer",
28
+ "license": "MIT",
29
+ "bugs": {
30
+ "url": "https://github.com/Bizone-ai/json-transform/issues"
31
+ },
32
+ "homepage": "https://github.com/Bizone-ai/json-transform#readme",
33
+ "peerDependencies": {
34
+ "@bizone-ai/json-schema-utils": "^1.1.0",
35
+ "@bizone-ai/json-transform": "^1.10.0"
36
+ },
37
+ "devDependencies": {
38
+ "@bizone-ai/json-schema-utils": "^1.1.0",
39
+ "@bizone-ai/json-transform": "file://../json-transform",
40
+ "prettier": "3.1.1",
41
+ "typescript": "^5.3.3",
42
+ "vitest": "3.0.5"
43
+ }
44
+ }