Skip to content

Commit 4e5e21a

Browse files
committed
js-1.7.0 js-core-1.7.1 java-1.1.0 monaco-1.2.1 - add functions some and every, fix readmes for all packages, update docs
1 parent b453fa7 commit 4e5e21a

File tree

21 files changed

+364
-25
lines changed

21 files changed

+364
-25
lines changed

README.md

+1
Original file line numberDiff line numberDiff line change
@@ -9,6 +9,7 @@
99
| Java |[co.nlighten.json-transform](./java/json-transform)| Java library for transforming JSON objects |Apache License 2.0|![Maven Central Version](https://img.shields.io/maven-central/v/co.nlighten/json-transform)|
1010
| JavaScript |[@nlighten/json-transform](./javascript/json-transform)| JSON transformers JavaScript implementation|MIT|![npm](https://img.shields.io/npm/v/@nlighten/json-transform)|
1111
| JavaScript |[@nlighten/json-transform-core](./javascript/json-transform-core)| Core types and utilities for handling JSON transformers |MIT|![npm](https://img.shields.io/npm/v/@nlighten/json-transform-core)|
12+
| JavaScript |[@nlighten/monaco-json-transform](./javascript/monaco-json-transform)| Monaco editor extension for JSON transformers |MIT|![npm](https://img.shields.io/npm/v/@nlighten/monaco-json-transform)|
1213

1314
## Getting Started
1415

docs/docs/01. intro.md

+10
Original file line numberDiff line numberDiff line change
@@ -9,6 +9,16 @@ It is used to transform multiple inputs (by spec) to a result object.
99

1010
The most basic input to a transformer is `$`. All references to it can use **JsonPath** syntax.
1111

12+
## Packages
13+
14+
| Language |Name| Description |License|Status|
15+
|------------|---|---------------------------------------------------------|---|---|
16+
| Java |[co.nlighten.json-transform](https://mvnrepository.com/artifact/co.nlighten/json-transform)| Java library for transforming JSON objects |Apache License 2.0|![Maven Central Version](https://img.shields.io/maven-central/v/co.nlighten/json-transform)|
17+
| JavaScript |[@nlighten/json-transform](https://www.npmjs.com/package/@nlighten/json-transform)| JSON transformers JavaScript implementation|MIT|![npm](https://img.shields.io/npm/v/@nlighten/json-transform)|
18+
| JavaScript |[@nlighten/json-transform-core](https://www.npmjs.com/package/@nlighten/json-transform-core)| Core types and utilities for handling JSON transformers |MIT|![npm](https://img.shields.io/npm/v/@nlighten/json-transform-core)|
19+
| JavaScript |[@nlighten/monaco-json-transform](https://www.npmjs.com/package/@nlighten/monaco-json-transform)| Monaco editor extension for JSON transformers |MIT|![npm](https://img.shields.io/npm/v/@nlighten/monaco-json-transform)|
20+
21+
1222
## Context
1323
Starts with `#`, inside transformers:
1424

java/json-transform/build.gradle

+1-1
Original file line numberDiff line numberDiff line change
@@ -9,7 +9,7 @@ plugins {
99
}
1010

1111
group 'co.nlighten'
12-
version = '1.0.0'
12+
version = '1.1.0'
1313

1414
ext {
1515
gsonVersion = "2.10.1"

java/json-transform/src/main/java/co/nlighten/jsontransform/TransformerFunctions.java

+2
Original file line numberDiff line numberDiff line change
@@ -44,6 +44,7 @@ public class TransformerFunctions implements TransformerFunctionsAdapter {
4444
Map.entry("distinct", new TransformerFunctionDistinct()),
4545
Map.entry("entries", new TransformerFunctionEntries()),
4646
Map.entry("eval",new TransformerFunctionEval()),
47+
Map.entry("every",new TransformerFunctionEvery()),
4748
Map.entry("filter", new TransformerFunctionFilter()),
4849
Map.entry("find", new TransformerFunctionFind()),
4950
Map.entry("first", new TransformerFunctionCoalesce()), // * alias for coalesce
@@ -87,6 +88,7 @@ public class TransformerFunctions implements TransformerFunctionsAdapter {
8788
Map.entry("replace", new TransformerFunctionReplace()),
8889
Map.entry("reverse", new TransformerFunctionReverse()),
8990
Map.entry("slice", new TransformerFunctionSlice()),
91+
Map.entry("some", new TransformerFunctionSome()),
9092
Map.entry("sort", new TransformerFunctionSort()),
9193
Map.entry("split", new TransformerFunctionSplit()),
9294
Map.entry("string", new TransformerFunctionString()),
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,28 @@
1+
package co.nlighten.jsontransform.functions;
2+
3+
import co.nlighten.jsontransform.functions.common.*;
4+
5+
import java.util.Map;
6+
7+
public class TransformerFunctionEvery extends TransformerFunction {
8+
9+
public TransformerFunctionEvery() {
10+
super(FunctionDescription.of(
11+
Map.of(
12+
"by", ArgumentType.of(ArgType.Transformer).position(0)
13+
)
14+
));
15+
}
16+
@Override
17+
public Object apply(FunctionContext context) {
18+
var adapter = context.getAdapter();
19+
var streamer = context.getJsonElementStreamer(null);
20+
if (streamer == null) {
21+
return false;
22+
}
23+
var by = context.getJsonElement("by", false);
24+
return streamer.stream()
25+
.map(x -> context.transformItem(by, x))
26+
.allMatch(adapter::isTruthy);
27+
}
28+
}
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,28 @@
1+
package co.nlighten.jsontransform.functions;
2+
3+
import co.nlighten.jsontransform.functions.common.*;
4+
5+
import java.util.Map;
6+
7+
public class TransformerFunctionSome extends TransformerFunction {
8+
9+
public TransformerFunctionSome() {
10+
super(FunctionDescription.of(
11+
Map.of(
12+
"by", ArgumentType.of(ArgType.Transformer).position(0)
13+
)
14+
));
15+
}
16+
@Override
17+
public Object apply(FunctionContext context) {
18+
var adapter = context.getAdapter();
19+
var streamer = context.getJsonElementStreamer(null);
20+
if (streamer == null) {
21+
return false;
22+
}
23+
var by = context.getJsonElement("by", false);
24+
return streamer.stream()
25+
.map(x -> context.transformItem(by, x))
26+
.anyMatch(adapter::isTruthy);
27+
}
28+
}

javascript/json-transform-core/README.md

+8-1
Original file line numberDiff line numberDiff line change
@@ -15,7 +15,7 @@ Core types and utilities for handling JSON transformers
1515
ContextVariablesSchemas: Record<string, TypeSchema>,
1616
getFunctionInlineSignature: (name: string, func: FunctionDescriptor, requiredOnly?: boolean) => string,
1717
getFunctionObjectSignature: (name: string, func: FunctionDescriptor) => string,
18-
functions: { //Functions,
18+
functionsParser: {
1919
get(name: string) => FunctionDescriptor,
2020
getNames() => string[],
2121
resolveDocsUrl(funcName: string, functionDescriptor ? : FunctionDescriptor) => string,
@@ -33,9 +33,13 @@ Core types and utilities for handling JSON transformers
3333
},
3434
parseArgs: (func: FunctionDescriptor, args?: string) => {},
3535
type Argument,
36+
type ArgumentCondition,
37+
type ConditionalSubFunction,
38+
type FunctionDefinition,
3639
type FunctionDescriptor,
3740
EmbeddedTransformerFunction, // enum
3841
EmbeddedTransformerFunctions: EmbeddedTransformerFunction[],
42+
type JsonTransformExample,
3943
jsonpathJoin: (...args: (string | null | undefined)[]): string,
4044
JsonPathFunctionRegex: RegExp,
4145
parseTransformer: (
@@ -51,6 +55,9 @@ Core types and utilities for handling JSON transformers
5155
},
5256
type ParseMethod,
5357
type HandleFunctionMethod,
58+
definitions: Record<EmbeddedTransformerFunction, FunctionDefinition>,
59+
examples: Record<EmbeddedTransformerFunction, JsonTransformExample>,
60+
functions: Record<EmbeddedTransformerFunction, FunctionDescriptor>,
5461
transformUtils: { //TransformUtils
5562
setAdditionalContext: (additionalContext: Set<string>) => void,
5663
getAdditionalContext: () => Set<string>,

javascript/json-transform-core/package.json

+1-1
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
11
{
22
"name": "@nlighten/json-transform-core",
33
"description": "Core types and utilities for handling JSON transformers",
4-
"version": "1.7.0",
4+
"version": "1.7.1",
55
"main": "./dist/index.js",
66
"source": "src/index.ts",
77
"exports": "./dist/index.js",

javascript/json-transform-core/src/functions/definitions.ts

+34
Original file line numberDiff line numberDiff line change
@@ -570,6 +570,23 @@ export default {
570570
description: "Evaluates the input and then transforms the context with the expression",
571571
inputSchema: { type: "any", required: true, description: "Transformer definition" },
572572
},
573+
every: {
574+
description: "Checks if all elements in an array satisfy a predicate",
575+
usageNotes:
576+
":::info\npredicate `by` should resolve to a `boolean` value, it uses the [truthy logic](../truthy-logic)\n:::",
577+
inputSchema: { type: "array", required: true, description: "Array of elements" },
578+
outputSchema: { type: "boolean" },
579+
arguments: [
580+
{
581+
name: "by",
582+
description: "A predicate transformer for an element",
583+
type: "transformer",
584+
position: 0,
585+
required: true,
586+
transformerArguments: [{ name: "##current", type: "any", position: 0, description: "Current element" }],
587+
},
588+
],
589+
},
573590
filter: {
574591
description: "Filter input array to all the elements that satisfy the predicate transformer",
575592
usageNotes:
@@ -1589,6 +1606,23 @@ export default {
15891606
},
15901607
],
15911608
},
1609+
some: {
1610+
description: "Checks if any elements in an array satisfy a predicate",
1611+
usageNotes:
1612+
":::info\npredicate `by` should resolve to a `boolean` value, it uses the [truthy logic](../truthy-logic)\n:::",
1613+
inputSchema: { type: "array", required: true, description: "Array of elements" },
1614+
outputSchema: { type: "boolean" },
1615+
arguments: [
1616+
{
1617+
name: "by",
1618+
description: "A predicate transformer for an element",
1619+
type: "transformer",
1620+
position: 0,
1621+
required: true,
1622+
transformerArguments: [{ name: "##current", type: "any", position: 0, description: "Current element" }],
1623+
},
1624+
],
1625+
},
15921626
sort: {
15931627
description: "Sorts elements of an array",
15941628
inputSchema: { type: "array", required: true, description: "Array of elements" },

javascript/json-transform-core/src/functions/examples.ts

+4
Original file line numberDiff line numberDiff line change
@@ -16,6 +16,7 @@ import _digest from "./examples/digest.json";
1616
import _distinct from "./examples/distinct.json";
1717
import _entries from "./examples/entries.json";
1818
import _eval from "./examples/eval.json";
19+
import _every from "./examples/every.json";
1920
import _filter from "./examples/filter.json";
2021
import _find from "./examples/find.json";
2122
import _flat from "./examples/flat.json";
@@ -57,6 +58,7 @@ import _reduce from "./examples/reduce.json";
5758
import _replace from "./examples/replace.json";
5859
import _reverse from "./examples/reverse.json";
5960
import _slice from "./examples/slice.json";
61+
import _some from "./examples/some.json";
6062
import _sort from "./examples/sort.json";
6163
import _split from "./examples/split.json";
6264
import _string from "./examples/string.json";
@@ -98,6 +100,7 @@ export default {
98100
distinct: _distinct,
99101
entries: _entries,
100102
eval: _eval,
103+
every: _every,
101104
filter: _filter,
102105
find: _find,
103106
flat: _flat,
@@ -139,6 +142,7 @@ export default {
139142
replace: _replace,
140143
reverse: _reverse,
141144
slice: _slice,
145+
some: _some,
142146
sort: _sort,
143147
split: _split,
144148
string: _string,
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,76 @@
1+
[
2+
{
3+
"name": "inline - true",
4+
"given": {
5+
"input": [
6+
{
7+
"active": true
8+
},
9+
{
10+
"active": true
11+
}
12+
],
13+
"definition": "$$every(##current.active):$"
14+
},
15+
"expect": {
16+
"equal": true
17+
}
18+
},
19+
{
20+
"name": "inline - false",
21+
"given": {
22+
"input": [
23+
{
24+
"active": false
25+
},
26+
{
27+
"active": true
28+
}
29+
],
30+
"definition": "$$every(##current.active):$"
31+
},
32+
"expect": {
33+
"equal": false
34+
}
35+
},
36+
{
37+
"name": "object - true",
38+
"given": {
39+
"input": [
40+
{
41+
"active": true
42+
},
43+
{
44+
"active": true
45+
}
46+
],
47+
"definition": {
48+
"$$every": "$",
49+
"by": "##current.active"
50+
}
51+
},
52+
"expect": {
53+
"equal": true
54+
}
55+
},
56+
{
57+
"name": "object - false",
58+
"given": {
59+
"input": [
60+
{
61+
"active": false
62+
},
63+
{
64+
"active": true
65+
}
66+
],
67+
"definition": {
68+
"$$every": "$",
69+
"by": "##current.active"
70+
}
71+
},
72+
"expect": {
73+
"equal": false
74+
}
75+
}
76+
]
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,76 @@
1+
[
2+
{
3+
"name": "inline - true",
4+
"given": {
5+
"input": [
6+
{
7+
"active": true
8+
},
9+
{
10+
"active": false
11+
}
12+
],
13+
"definition": "$$some(##current.active):$"
14+
},
15+
"expect": {
16+
"equal": true
17+
}
18+
},
19+
{
20+
"name": "inline - false",
21+
"given": {
22+
"input": [
23+
{
24+
"active": false
25+
},
26+
{
27+
"active": false
28+
}
29+
],
30+
"definition": "$$some(##current.active):$"
31+
},
32+
"expect": {
33+
"equal": false
34+
}
35+
},
36+
{
37+
"name": "object - true",
38+
"given": {
39+
"input": [
40+
{
41+
"active": true
42+
},
43+
{
44+
"active": false
45+
}
46+
],
47+
"definition": {
48+
"$$some": "$",
49+
"by": "##current.active"
50+
}
51+
},
52+
"expect": {
53+
"equal": true
54+
}
55+
},
56+
{
57+
"name": "object - false",
58+
"given": {
59+
"input": [
60+
{
61+
"active": false
62+
},
63+
{
64+
"active": false
65+
}
66+
],
67+
"definition": {
68+
"$$some": "$",
69+
"by": "##current.active"
70+
}
71+
},
72+
"expect": {
73+
"equal": false
74+
}
75+
}
76+
]

0 commit comments

Comments
 (0)