diff --git a/application/source/data/transformer.mjs b/application/source/data/transformer.mjs index 235e975ea5d31df2bf5f3cc491db285f29fdcc71..bc8b8a0aede714e3f5e171dc4c0f4ce9bc4ab46f 100644 --- a/application/source/data/transformer.mjs +++ b/application/source/data/transformer.mjs @@ -186,6 +186,33 @@ function transform(value) { case "tolowercase": validateString(value); return value.toLowerCase(); + + case "contains": + if (isString(value)) { + return value.includes(args[0]); + } + + if (isArray(value)) { + return value.includes(args[0]); + } + + if (isObject(value)) { + return value.hasOwnProperty(args[0]); + } + + return false; + + case "has-entries": + case "hasentries": + if (isObject(value)) { + return Object.keys(value).length > 0; + } + + if (isArray(value)) { + return value.length > 0; + } + + return false; case "isundefined": case "is-undefined": diff --git a/development/package.json b/development/package.json index c3586a6098ce73608e78a5936c804fd555fd9954..65ab785b43138062d462871704f519ed36ed6399 100644 --- a/development/package.json +++ b/development/package.json @@ -33,9 +33,9 @@ "crypt": "^0.0.2", "cssnano": "^5.1.15", "esbuild": "^0.17.10", - "flow-bin": "^0.200.0", + "flow-bin": "^0.200.1", "fs": "0.0.1-security", - "glob": "^8.1.0", + "glob": "^9.0.1", "graphviz": "^0.0.9", "jsdoc": "^4.0.2", "jsdoc-external-example": "github:volker-schukai/jsdoc-external-example", @@ -65,7 +65,7 @@ "vite-plugin-banner": "^0.7.0", "vite-plugin-list-directory-contents": "^1.4.5", "vite-plugin-minify": "^1.5.2", - "vite-plugin-mkcert": "^1.13.2", + "vite-plugin-mkcert": "^1.13.3", "ws": "^8.12.1" } } diff --git a/development/pnpm-lock.yaml b/development/pnpm-lock.yaml index 528c24cebc2d9cf27e09e3f3a7b2a118f914ab6a..5d82fc78aef57fc882192a33b6485c01d9ddf6f2 100644 --- a/development/pnpm-lock.yaml +++ b/development/pnpm-lock.yaml @@ -14,9 +14,9 @@ specifiers: crypt: ^0.0.2 cssnano: ^5.1.15 esbuild: ^0.17.10 - flow-bin: ^0.200.0 + flow-bin: ^0.200.1 fs: 0.0.1-security - glob: ^8.1.0 + glob: ^9.0.1 graphviz: ^0.0.9 jsdoc: ^4.0.2 jsdoc-external-example: github:volker-schukai/jsdoc-external-example @@ -46,7 +46,7 @@ specifiers: vite-plugin-banner: ^0.7.0 vite-plugin-list-directory-contents: ^1.4.5 vite-plugin-minify: ^1.5.2 - vite-plugin-mkcert: ^1.13.2 + vite-plugin-mkcert: ^1.13.3 ws: ^8.12.1 devDependencies: @@ -63,9 +63,9 @@ devDependencies: crypt: 0.0.2 cssnano: 5.1.15_postcss@8.4.21 esbuild: 0.17.10 - flow-bin: 0.200.0 + flow-bin: 0.200.1 fs: 0.0.1-security - glob: 8.1.0 + glob: 9.0.1 graphviz: 0.0.9 jsdoc: 4.0.2 jsdoc-external-example: github.com/volker-schukai/jsdoc-external-example/e039186b531487bd1b1d5e2e1586a396b910c9d9 @@ -95,7 +95,7 @@ devDependencies: vite-plugin-banner: 0.7.0 vite-plugin-list-directory-contents: 1.4.5 vite-plugin-minify: 1.5.2_vite@4.1.4 - vite-plugin-mkcert: 1.13.2_vite@4.1.4 + vite-plugin-mkcert: 1.13.3_vite@4.1.4 ws: 8.12.1 packages: @@ -808,12 +808,12 @@ packages: - '@types/node' dev: true - /@microsoft/api-extractor-model/7.26.4_@types+node@18.14.1: + /@microsoft/api-extractor-model/7.26.4_@types+node@18.14.2: resolution: {integrity: sha512-PDCgCzXDo+SLY5bsfl4bS7hxaeEtnXj7XtuzEE+BtALp7B5mK/NrS2kHWU69pohgsRmEALycQdaQPXoyT2i5MQ==} dependencies: '@microsoft/tsdoc': 0.14.2 '@microsoft/tsdoc-config': 0.16.2 - '@rushstack/node-core-library': 3.55.2_@types+node@18.14.1 + '@rushstack/node-core-library': 3.55.2_@types+node@18.14.2 transitivePeerDependencies: - '@types/node' dev: true @@ -838,14 +838,14 @@ packages: - '@types/node' dev: true - /@microsoft/api-extractor/7.34.4_@types+node@18.14.1: + /@microsoft/api-extractor/7.34.4_@types+node@18.14.2: resolution: {integrity: sha512-HOdcci2nT40ejhwPC3Xja9G+WSJmWhCUKKryRfQYsmE9cD+pxmBaKBKCbuS9jUcl6bLLb4Gz+h7xEN5r0QiXnQ==} hasBin: true dependencies: - '@microsoft/api-extractor-model': 7.26.4_@types+node@18.14.1 + '@microsoft/api-extractor-model': 7.26.4_@types+node@18.14.2 '@microsoft/tsdoc': 0.14.2 '@microsoft/tsdoc-config': 0.16.2 - '@rushstack/node-core-library': 3.55.2_@types+node@18.14.1 + '@rushstack/node-core-library': 3.55.2_@types+node@18.14.2 '@rushstack/rig-package': 0.3.18 '@rushstack/ts-command-line': 4.13.2 colors: 1.2.5 @@ -1117,7 +1117,7 @@ packages: z-schema: 5.0.5 dev: true - /@rushstack/node-core-library/3.55.2_@types+node@18.14.1: + /@rushstack/node-core-library/3.55.2_@types+node@18.14.2: resolution: {integrity: sha512-SaLe/x/Q/uBVdNFK5V1xXvsVps0y7h1sN7aSJllQyFbugyOaxhNRF25bwEDnicARNEjJw0pk0lYnJQ9Kr6ev0A==} peerDependencies: '@types/node': '*' @@ -1125,7 +1125,7 @@ packages: '@types/node': optional: true dependencies: - '@types/node': 18.14.1 + '@types/node': 18.14.2 colors: 1.2.5 fs-extra: 7.0.1 import-lazy: 4.0.0 @@ -1225,16 +1225,16 @@ packages: resolution: {integrity: sha512-eC4U9MlIcu2q0KQmXszyn5Akca/0jrQmwDRgpAMJai7qBWq4amIQhZyNau4VYGtCeALvW1/NtjzJJ567aZxfKA==} dev: true - /@types/node/18.14.1: - resolution: {integrity: sha512-QH+37Qds3E0eDlReeboBxfHbX9omAcBCXEzswCu6jySP642jiM3cYSIkU/REqwhCUqXdonHFuBfJDiAJxMNhaQ==} + /@types/node/18.14.2: + resolution: {integrity: sha512-1uEQxww3DaghA0RxqHx0O0ppVlo43pJhepY51OxuQIKHpjbnYLA7vcdwioNPzIqmC2u3I/dmylcqjlh0e7AyUA==} dev: true /@wesbos/code-icons/1.2.4: resolution: {integrity: sha512-ZiU0xf7epnCRrLDQIPnFstzoNWDvcUTtKoDU3VhpjsaGRzVClSmsi39c4kHxIOdfxvg4zwdW+goH96xr/vMTQQ==} dependencies: - '@types/node': 18.14.1 - vite: 4.1.4_@types+node@18.14.1 - vite-plugin-dts: 1.7.3_75ucbpp7logpdg7n5tkyaoxqqm + '@types/node': 18.14.2 + vite: 4.1.4_@types+node@18.14.2 + vite-plugin-dts: 1.7.3_2r2lhzpsyiotool4a27bb3llsy vscode-icons-js: 11.6.1 transitivePeerDependencies: - less @@ -1380,7 +1380,7 @@ packages: postcss: ^8.1.0 dependencies: browserslist: 4.21.5 - caniuse-lite: 1.0.30001457 + caniuse-lite: 1.0.30001458 fraction.js: 4.2.0 normalize-range: 0.1.2 picocolors: 1.0.0 @@ -1453,8 +1453,8 @@ packages: engines: {node: ^6 || ^7 || ^8 || ^9 || ^10 || ^11 || ^12 || >=13.7} hasBin: true dependencies: - caniuse-lite: 1.0.30001457 - electron-to-chromium: 1.4.308 + caniuse-lite: 1.0.30001458 + electron-to-chromium: 1.4.313 node-releases: 2.0.10 update-browserslist-db: 1.0.10_browserslist@4.21.5 dev: true @@ -1528,13 +1528,13 @@ packages: resolution: {integrity: sha512-bsTwuIg/BZZK/vreVTYYbSWoe2F+71P7K5QGEX+pT250DZbfU1MQ5prOKpPR+LL6uWKK3KMwMCAS74QB3Um1uw==} dependencies: browserslist: 4.21.5 - caniuse-lite: 1.0.30001457 + caniuse-lite: 1.0.30001458 lodash.memoize: 4.1.2 lodash.uniq: 4.5.0 dev: true - /caniuse-lite/1.0.30001457: - resolution: {integrity: sha512-SDIV6bgE1aVbK6XyxdURbUE89zY7+k1BBBaOwYwkNCglXlel/E7mELiHC64HQ+W0xSKlqWhV9Wh7iHxUjMs4fA==} + /caniuse-lite/1.0.30001458: + resolution: {integrity: sha512-lQ1VlUUq5q9ro9X+5gOEyH7i3vm+AYVT1WDCVB69XOZ17KZRhnZ9J0Sqz7wTHQaLBJccNCHq8/Ww5LlOIZbB0w==} dev: true /catharsis/0.9.0: @@ -1750,7 +1750,7 @@ packages: execa: 4.1.0 polyfill-library: 3.111.0 semver: 7.3.8 - snyk: 1.1108.0 + snyk: 1.1109.0 yargs: 15.4.1 transitivePeerDependencies: - supports-color @@ -2012,8 +2012,8 @@ packages: tslib: 2.5.0 dev: true - /electron-to-chromium/1.4.308: - resolution: {integrity: sha512-qyTx2aDFjEni4UnRWEME9ubd2Xc9c0zerTUl/ZinvD4QPsF0S7kJTV/Es/lPCTkNX6smyYar+z/n8Cl6pFr8yQ==} + /electron-to-chromium/1.4.313: + resolution: {integrity: sha512-QckB9OVqr2oybjIrbMI99uF+b9+iTja5weFe0ePbqLb5BHqXOJUO1SG6kDj/1WtWPRIBr51N153AEq8m7HuIaA==} dev: true /emoji-regex/7.0.3: @@ -2248,8 +2248,8 @@ packages: hasBin: true dev: true - /flow-bin/0.200.0: - resolution: {integrity: sha512-4KquALYPkCCTCZ43GIqTDZDOf4znU3/kXsigpiwwORV8l/ctqwvKkqCOhjqvGy5DtbiL6WTPBqLwGAlxeGeNIA==} + /flow-bin/0.200.1: + resolution: {integrity: sha512-0VCo3uZb0XIYF/sNFuLsGRpsUWnXbPi27MQ3AW7F1n7yAy2FEgMxDS/XQ3ubh5ga4M+yKrdeDsZ3IXwYyRNXMQ==} engines: {node: '>=0.10.0'} hasBin: true dev: true @@ -2408,15 +2408,14 @@ packages: path-is-absolute: 1.0.1 dev: true - /glob/8.1.0: - resolution: {integrity: sha512-r8hpEjiQEYlF2QU0df3dS+nxxSIreXQS1qRhMJM0Q5NDdR386C7jb7Hwwod8Fgiuex+k0GFjgft18yvxm5XoCQ==} - engines: {node: '>=12'} + /glob/9.0.1: + resolution: {integrity: sha512-psRdn8MI0gRcH0xow0VOhYxXD/6ZaRGmgtfN0oWN/hCgjxpRQBMCl7wE4JRJSAUTdJsW+FmD0EtE0CgJhKqSVw==} + engines: {node: '>=16 || 14 >=14.17'} dependencies: fs.realpath: 1.0.0 - inflight: 1.0.6 - inherits: 2.0.4 - minimatch: 5.1.6 - once: 1.4.0 + minimatch: 7.3.0 + minipass: 4.2.4 + path-scurry: 1.5.0 dev: true /globals/11.12.0: @@ -2985,6 +2984,11 @@ packages: yallist: 4.0.0 dev: true + /lru-cache/7.17.0: + resolution: {integrity: sha512-zSxlVVwOabhVyTi6E8gYv2cr6bXK+8ifYz5/uyJb9feXX6NACVDwY4p5Ut3WC3Ivo/QhpARHU3iujx2xGAYHbQ==} + engines: {node: '>=12'} + dev: true + /make-dir/3.1.0: resolution: {integrity: sha512-g3FeP20LNwhALb/6Cz6Dd4F2ngze0jz7tbzrD2wAV+o9FeNHe4rL+yK2md0J/fiSf1sa1ADhXqi5+oVwOM/eGw==} engines: {node: '>=8'} @@ -3081,6 +3085,18 @@ packages: brace-expansion: 2.0.1 dev: true + /minimatch/7.3.0: + resolution: {integrity: sha512-WaMDuhKa7a6zKiwplR1AOz+zGvJba24k5VU1Cy6NhEguavT2YRlHxuINUgTas4wiS6fwBpYq4TcA1XIECSntyw==} + engines: {node: '>=10'} + dependencies: + brace-expansion: 2.0.1 + dev: true + + /minipass/4.2.4: + resolution: {integrity: sha512-lwycX3cBMTvcejsHITUgYj6Gy6A7Nh4Q6h9NP4sTHY1ccJlC7yKzDmiShEHsJ16Jf1nKGDEaiHxiltsJEvk0nQ==} + engines: {node: '>=8'} + dev: true + /mkdirp/1.0.4: resolution: {integrity: sha512-vVqVZQyf3WLx2Shd0qJ9xuvqgAyKPLAiqITEtqW0oIUjzo3PePDd6fW9iFz30ef7Ysp/oiWqbhszeGWW2T6Gzw==} engines: {node: '>=10'} @@ -3386,6 +3402,14 @@ packages: resolution: {integrity: sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw==} dev: true + /path-scurry/1.5.0: + resolution: {integrity: sha512-hJ8rODLI9B2qwsYAd32rrI76gwVUPeu5kq/do6URDj2bJCVH3ilyT978Mv/NLuFMaqzHrn3XtiDLMZHaTTh4vA==} + engines: {node: '>=14'} + dependencies: + lru-cache: 7.17.0 + minipass: 4.2.4 + dev: true + /path-to-regexp/1.8.0: resolution: {integrity: sha512-n43JRhlUKUAlibEJhPeir1ncUID16QnEjNpwzNdO3Lm4ywrBpBZ5oLD0I6br9evr1Y9JTqwRtAh7JLoOzAQdVA==} dependencies: @@ -4048,8 +4072,8 @@ packages: glob: 7.2.0 dev: true - /rollup/3.17.2: - resolution: {integrity: sha512-qMNZdlQPCkWodrAZ3qnJtvCAl4vpQ8q77uEujVCCbC/6CLB7Lcmvjq7HyiOSnf4fxTT9XgsE36oLHJBH49xjqA==} + /rollup/3.17.3: + resolution: {integrity: sha512-p5LaCXiiOL/wrOkj8djsIDFmyU9ysUxcyW+EKRLHb6TKldJzXpImjcRSR+vgo09DBdofGcOoLOsRyxxG2n5/qQ==} engines: {node: '>=14.18.0', npm: '>=8.0.0'} hasBin: true optionalDependencies: @@ -4167,8 +4191,8 @@ packages: supports-color: 7.2.0 dev: true - /snyk/1.1108.0: - resolution: {integrity: sha512-HThKYgmcZgNG9ONuGUtJ/JuUaDzyqRHbPljJc50dtU9nEBmUc915jtPfrKKITdn6K+Ap9Rs8eVqnXWq0MGW0hA==} + /snyk/1.1109.0: + resolution: {integrity: sha512-sBcibkAfcq6nXr6t0GieDjdc8kQfEf429+M1VKavGfLaJPQNIqSjtOhQJ5FcZqaB/mCWa1szektkHeyAiB4m9A==} engines: {node: '>=12'} hasBin: true dev: true @@ -4553,21 +4577,21 @@ packages: resolution: {integrity: sha512-g0cm0wbrR6b6wR8FWtfD1RSDPacdumKEOAnneXv+NpJ9ez+j6rklRv6lMOO+aPf+Y6Zb8OzgIk0FXBZ6h+DeZQ==} dev: true - /vite-plugin-dts/1.7.3_75ucbpp7logpdg7n5tkyaoxqqm: + /vite-plugin-dts/1.7.3_2r2lhzpsyiotool4a27bb3llsy: resolution: {integrity: sha512-u3t45p6fTbzUPMkwYe0ESwuUeiRMlwdPfD3dRyDKUwLe2WmEYcFyVp2o9/ke2EMrM51lQcmNWdV9eLcgjD1/ng==} engines: {node: ^14.18.0 || >=16.0.0} peerDependencies: vite: '>=2.9.0' dependencies: - '@microsoft/api-extractor': 7.34.4_@types+node@18.14.1 + '@microsoft/api-extractor': 7.34.4_@types+node@18.14.2 '@rollup/pluginutils': 5.0.2 - '@rushstack/node-core-library': 3.55.2_@types+node@18.14.1 + '@rushstack/node-core-library': 3.55.2_@types+node@18.14.2 debug: 4.3.4 fast-glob: 3.2.12 fs-extra: 10.1.0 kolorist: 1.7.0 ts-morph: 17.0.1 - vite: 4.1.4_@types+node@18.14.1 + vite: 4.1.4_@types+node@18.14.2 transitivePeerDependencies: - '@types/node' - rollup @@ -4622,8 +4646,8 @@ packages: vite: 4.1.4 dev: true - /vite-plugin-mkcert/1.13.2_vite@4.1.4: - resolution: {integrity: sha512-zna6J66cgCaNt2vAP/kDLuBbzr3kivwS4wjBxGvoKK61PBdvlPW2M+vxEGEpuRrrW7X4vQAX9JzmXk1QSAI4Eg==} + /vite-plugin-mkcert/1.13.3_vite@4.1.4: + resolution: {integrity: sha512-cuAbOb6bHyTMhha9YimL6ZB/WoCcFy8d3uaf5n5Ovgybix1yvEu3pxARy2HjC5LJIS1qq6fFXG0+oj6/XMUapA==} engines: {node: '>=v16.7.0'} peerDependencies: vite: '>=3' @@ -4666,12 +4690,12 @@ packages: esbuild: 0.16.17 postcss: 8.4.21 resolve: 1.22.1 - rollup: 3.17.2 + rollup: 3.17.3 optionalDependencies: fsevents: 2.3.2 dev: true - /vite/4.1.4_@types+node@18.14.1: + /vite/4.1.4_@types+node@18.14.2: resolution: {integrity: sha512-3knk/HsbSTKEin43zHu7jTwYWv81f8kgAL99G5NWBcA1LKvtvcVAC4JjBH1arBunO9kQka+1oGbrMKOjk4ZrBg==} engines: {node: ^14.18.0 || >=16.0.0} hasBin: true @@ -4696,11 +4720,11 @@ packages: terser: optional: true dependencies: - '@types/node': 18.14.1 + '@types/node': 18.14.2 esbuild: 0.16.17 postcss: 8.4.21 resolve: 1.22.1 - rollup: 3.17.2 + rollup: 3.17.3 optionalDependencies: fsevents: 2.3.2 dev: true diff --git a/development/test/cases/data/transformer.mjs b/development/test/cases/data/transformer.mjs index 65e6e4d6324e0702846d2190de392b70f98558c4..84e2e536ad7b7af9b18d2871d9ce450f277e8ad4 100644 --- a/development/test/cases/data/transformer.mjs +++ b/development/test/cases/data/transformer.mjs @@ -28,6 +28,18 @@ describe('Transformer', function () { describe('Transformer.run()', function () { [ + ['has-entries', {}, false], + ['has-entries', {a:4}, true], + ['has-entries', [], false], + ['has-entries', "", false], + ['has-entries', [1,2,3], true], + ['has-entries', [1], true], + ['has-entries', ["1"], true], + ['has-entries', [true], true], + ['contains:x', "asd wxd sdf", true], + ['contains:x', "asd wd sdf", false], + ['contains:b', ["a","b","c"], true], + ['contains:x', ["a","b","c"], false], ['isundefined', "a", false], ['isundefined', null, false], ['isundefined', undefined, true],