diff --git a/gen/templates/spec.tpl b/gen/templates/spec.tpl index 147c3191..1d1843ce 100644 --- a/gen/templates/spec.tpl +++ b/gen/templates/spec.tpl @@ -188,7 +188,7 @@ describe('##__RESOURCE_CLASS__## resource', () => { }, "type": "${resourceType}", "links": { - "self": "/api/${resourceType}/AbcdEfgHiL" + "self": "https://cli-test-org.commercelayer.io/api/${resourceType}/AbcdEfgHiL" }, "attributes": { "metadata": {}, diff --git a/package.json b/package.json index c6d5edfe..fcd47bab 100644 --- a/package.json +++ b/package.json @@ -45,7 +45,7 @@ "@types/debug": "^4.1.12", "@types/jest": "^29.5.11", "@types/lodash": "^4.14.202", - "@types/node": "^20.11.13", + "@types/node": "^20.11.15", "dotenv": "^16.4.1", "eslint": "^8.56.0", "inflector-js": "^1.0.1", diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index 798d9f90..fa0e94d0 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -41,8 +41,8 @@ devDependencies: specifier: ^4.14.202 version: 4.14.202 '@types/node': - specifier: ^20.11.13 - version: 20.11.13 + specifier: ^20.11.15 + version: 20.11.15 dotenv: specifier: ^16.4.1 version: 16.4.1 @@ -54,7 +54,7 @@ devDependencies: version: 1.0.1 jest: specifier: ^29.7.0 - version: 29.7.0(@types/node@20.11.13)(ts-node@10.9.2) + version: 29.7.0(@types/node@20.11.15)(ts-node@10.9.2) json-typescript: specifier: ^1.1.2 version: 1.1.2 @@ -72,7 +72,7 @@ devDependencies: version: 22.0.12(typescript@5.3.3) ts-node: specifier: ^10.9.2 - version: 10.9.2(@types/node@20.11.13)(typescript@5.3.3) + version: 10.9.2(@types/node@20.11.15)(typescript@5.3.3) typescript: specifier: ^5.3.3 version: 5.3.3 @@ -163,8 +163,8 @@ packages: semver: 6.3.1 dev: true - /@babel/helper-create-class-features-plugin@7.23.9(@babel/core@7.23.9): - resolution: {integrity: sha512-B2L9neXTIyPQoXDm+NtovPvG6VOLWnaXu3BIeVDWwdKFgG30oNa6CqVGiJPDWQwIAK49t9gnQI9c6K6RzabiKw==} + /@babel/helper-create-class-features-plugin@7.23.10(@babel/core@7.23.9): + resolution: {integrity: sha512-2XpP2XhkXzgxecPNEEK8Vz8Asj9aRxt08oKOqtiZoqV2UGZ5T+EkyP9sXQ9nwMxBIG34a7jmasVqoMop7VdPUw==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0 @@ -667,7 +667,7 @@ packages: '@babel/core': ^7.0.0-0 dependencies: '@babel/core': 7.23.9 - '@babel/helper-create-class-features-plugin': 7.23.9(@babel/core@7.23.9) + '@babel/helper-create-class-features-plugin': 7.23.10(@babel/core@7.23.9) '@babel/helper-plugin-utils': 7.22.5 dev: true @@ -678,7 +678,7 @@ packages: '@babel/core': ^7.12.0 dependencies: '@babel/core': 7.23.9 - '@babel/helper-create-class-features-plugin': 7.23.9(@babel/core@7.23.9) + '@babel/helper-create-class-features-plugin': 7.23.10(@babel/core@7.23.9) '@babel/helper-plugin-utils': 7.22.5 '@babel/plugin-syntax-class-static-block': 7.14.5(@babel/core@7.23.9) dev: true @@ -995,7 +995,7 @@ packages: '@babel/core': ^7.0.0-0 dependencies: '@babel/core': 7.23.9 - '@babel/helper-create-class-features-plugin': 7.23.9(@babel/core@7.23.9) + '@babel/helper-create-class-features-plugin': 7.23.10(@babel/core@7.23.9) '@babel/helper-plugin-utils': 7.22.5 dev: true @@ -1007,7 +1007,7 @@ packages: dependencies: '@babel/core': 7.23.9 '@babel/helper-annotate-as-pure': 7.22.5 - '@babel/helper-create-class-features-plugin': 7.23.9(@babel/core@7.23.9) + '@babel/helper-create-class-features-plugin': 7.23.10(@babel/core@7.23.9) '@babel/helper-plugin-utils': 7.22.5 '@babel/plugin-syntax-private-property-in-object': 7.14.5(@babel/core@7.23.9) dev: true @@ -1102,7 +1102,7 @@ packages: dependencies: '@babel/core': 7.23.9 '@babel/helper-annotate-as-pure': 7.22.5 - '@babel/helper-create-class-features-plugin': 7.23.9(@babel/core@7.23.9) + '@babel/helper-create-class-features-plugin': 7.23.10(@babel/core@7.23.9) '@babel/helper-plugin-utils': 7.22.5 '@babel/plugin-syntax-typescript': 7.23.3(@babel/core@7.23.9) dev: true @@ -1581,7 +1581,7 @@ packages: debug: 4.3.4 espree: 9.6.1 globals: 13.24.0 - ignore: 5.3.0 + ignore: 5.3.1 import-fresh: 3.3.0 js-yaml: 4.1.0 minimatch: 3.1.2 @@ -1648,7 +1648,7 @@ packages: engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} dependencies: '@jest/types': 29.6.3 - '@types/node': 20.11.13 + '@types/node': 20.11.15 chalk: 4.1.2 jest-message-util: 29.7.0 jest-util: 29.7.0 @@ -1669,14 +1669,14 @@ packages: '@jest/test-result': 29.7.0 '@jest/transform': 29.7.0 '@jest/types': 29.6.3 - '@types/node': 20.11.13 + '@types/node': 20.11.15 ansi-escapes: 4.3.2 chalk: 4.1.2 ci-info: 3.9.0 exit: 0.1.2 graceful-fs: 4.2.11 jest-changed-files: 29.7.0 - jest-config: 29.7.0(@types/node@20.11.13)(ts-node@10.9.2) + jest-config: 29.7.0(@types/node@20.11.15)(ts-node@10.9.2) jest-haste-map: 29.7.0 jest-message-util: 29.7.0 jest-regex-util: 29.6.3 @@ -1704,7 +1704,7 @@ packages: dependencies: '@jest/fake-timers': 29.7.0 '@jest/types': 29.6.3 - '@types/node': 20.11.13 + '@types/node': 20.11.15 jest-mock: 29.7.0 dev: true @@ -1731,7 +1731,7 @@ packages: dependencies: '@jest/types': 29.6.3 '@sinonjs/fake-timers': 10.3.0 - '@types/node': 20.11.13 + '@types/node': 20.11.15 jest-message-util: 29.7.0 jest-mock: 29.7.0 jest-util: 29.7.0 @@ -1764,7 +1764,7 @@ packages: '@jest/transform': 29.7.0 '@jest/types': 29.6.3 '@jridgewell/trace-mapping': 0.3.22 - '@types/node': 20.11.13 + '@types/node': 20.11.15 chalk: 4.1.2 collect-v8-coverage: 1.0.2 exit: 0.1.2 @@ -1852,7 +1852,7 @@ packages: '@jest/schemas': 29.6.3 '@types/istanbul-lib-coverage': 2.0.6 '@types/istanbul-reports': 3.0.4 - '@types/node': 20.11.13 + '@types/node': 20.11.15 '@types/yargs': 17.0.32 chalk: 4.1.2 dev: true @@ -2255,7 +2255,7 @@ packages: /@types/graceful-fs@4.1.9: resolution: {integrity: sha512-olP3sd1qOEe5dXTSaFvQG+02VdRXcdytWLAZsAq1PecU8uqQAhkrnbli7DagjtXKW/Bl7YJbUsa8MPcuc8LHEQ==} dependencies: - '@types/node': 20.11.13 + '@types/node': 20.11.15 dev: true /@types/istanbul-lib-coverage@2.0.6: @@ -2297,8 +2297,8 @@ packages: resolution: {integrity: sha512-nG96G3Wp6acyAgJqGasjODb+acrI7KltPiRxzHPXnP3NgI28bpQDRv53olbqGXbfcgF5aiiHmO3xpwEpS5Ld9g==} dev: true - /@types/node@20.11.13: - resolution: {integrity: sha512-5G4zQwdiQBSWYTDAH1ctw2eidqdhMJaNsiIDKHFr55ihz5Trl2qqR8fdrT732yPBho5gkNxXm67OxWFBqX9aPg==} + /@types/node@20.11.15: + resolution: {integrity: sha512-gscmuADZfvNULx1eyirVbr3kVOVZtpQtzKMCZpeSZcN6MfbkRXAR4s9/gsQ4CzxLHw6EStDtKLNtSDL3vbq05A==} dependencies: undici-types: 5.26.5 dev: true @@ -2345,7 +2345,7 @@ packages: debug: 4.3.4 eslint: 8.56.0 graphemer: 1.4.0 - ignore: 5.3.0 + ignore: 5.3.1 natural-compare: 1.4.0 semver: 7.5.4 ts-api-utils: 1.0.3(typescript@5.3.3) @@ -2670,8 +2670,8 @@ packages: resolution: {integrity: sha512-Oei9OH4tRh0YqU3GxhX79dM/mwVgvbZJaSNaRk+bshkj0S5cfHcgYakreBjrHwatXKbz+IoIdYLxrKim2MjW0Q==} dev: false - /available-typed-arrays@1.0.5: - resolution: {integrity: sha512-DMD0KiN46eipeziST1LPP/STfDU0sufISXmjSgvVsoU2tqxctQeASejWcfNtxYKqETM1UxQ8sp2OrSBWpHY6sw==} + /available-typed-arrays@1.0.6: + resolution: {integrity: sha512-j1QzY8iPNPG4o4xmO3ptzpRxTciqD3MgEHtifP/YnJpIo58Xu+ne4BejlbkuaLfXn/nz6HFiw29bLpj2PNMdGg==} engines: {node: '>= 0.4'} dev: true @@ -2830,8 +2830,8 @@ packages: engines: {node: ^6 || ^7 || ^8 || ^9 || ^10 || ^11 || ^12 || >=13.7} hasBin: true dependencies: - caniuse-lite: 1.0.30001581 - electron-to-chromium: 1.4.651 + caniuse-lite: 1.0.30001582 + electron-to-chromium: 1.4.653 node-releases: 2.0.14 update-browserslist-db: 1.0.13(browserslist@4.22.3) dev: true @@ -2880,8 +2880,8 @@ packages: engines: {node: '>=10'} dev: true - /caniuse-lite@1.0.30001581: - resolution: {integrity: sha512-whlTkwhqV2tUmP3oYhtNfaWGYHDdS3JYFQBKXxcUR9qqPWsRhFHhoISO2Xnl/g0xyKzht9mI1LZpiNWfMzHixQ==} + /caniuse-lite@1.0.30001582: + resolution: {integrity: sha512-vsJG3V5vgfduaQGVxL53uSX/HUzxyr2eA8xCo36OLal7sRcSZbibJtLeh0qja4sFOr/QQGt4opB4tOy+eOgAxg==} dev: true /cardinal@2.1.1: @@ -3084,7 +3084,7 @@ packages: typescript: 5.3.3 dev: true - /create-jest@29.7.0(@types/node@20.11.13)(ts-node@10.9.2): + /create-jest@29.7.0(@types/node@20.11.15)(ts-node@10.9.2): resolution: {integrity: sha512-Adz2bdH0Vq3F53KEMJOoftQFutWCukm6J24wbPWRO4k1kMY7gS7ds/uoJkNuV8wDCtWWnuwGcJwpWcih+zEW1Q==} engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} hasBin: true @@ -3093,7 +3093,7 @@ packages: chalk: 4.1.2 exit: 0.1.2 graceful-fs: 4.2.11 - jest-config: 29.7.0(@types/node@20.11.13)(ts-node@10.9.2) + jest-config: 29.7.0(@types/node@20.11.15)(ts-node@10.9.2) jest-util: 29.7.0 prompts: 2.4.2 transitivePeerDependencies: @@ -3258,8 +3258,8 @@ packages: resolution: {integrity: sha512-I88TYZWc9XiYHRQ4/3c5rjjfgkjhLyW2luGIheGERbNQ6OY7yTybanSpDXZa8y7VUP9YmDcYa+eyq4ca7iLqWA==} dev: true - /electron-to-chromium@1.4.651: - resolution: {integrity: sha512-jjks7Xx+4I7dslwsbaFocSwqBbGHQmuXBJUK9QBZTIrzPq3pzn6Uf2szFSP728FtLYE3ldiccmlkOM/zhGKCpA==} + /electron-to-chromium@1.4.653: + resolution: {integrity: sha512-wA2A2LQCqnEwQAvwADQq3KpMpNwgAUBnRmrFgRzHnPhbQUFArTR32Ab46f4p0MovDLcg4uqd4nCsN2hTltslpA==} dev: true /emittery@0.13.1: @@ -3299,7 +3299,7 @@ packages: dependencies: array-buffer-byte-length: 1.0.0 arraybuffer.prototype.slice: 1.0.2 - available-typed-arrays: 1.0.5 + available-typed-arrays: 1.0.6 call-bind: 1.0.5 es-set-tostringtag: 2.0.2 es-to-primitive: 1.2.1 @@ -3570,7 +3570,7 @@ packages: eslint-plugin-es-x: 7.5.0(eslint@8.56.0) get-tsconfig: 4.7.2 globals: 13.24.0 - ignore: 5.3.0 + ignore: 5.3.1 is-builtin-module: 3.2.1 is-core-module: 2.13.1 minimatch: 3.1.2 @@ -3651,7 +3651,7 @@ packages: glob-parent: 6.0.2 globals: 13.24.0 graphemer: 1.4.0 - ignore: 5.3.0 + ignore: 5.3.1 imurmurhash: 0.1.4 is-glob: 4.0.3 is-path-inside: 3.0.3 @@ -4074,7 +4074,7 @@ packages: array-union: 2.1.0 dir-glob: 3.0.1 fast-glob: 3.3.2 - ignore: 5.3.0 + ignore: 5.3.1 merge2: 1.4.1 slash: 3.0.0 dev: true @@ -4085,7 +4085,7 @@ packages: dependencies: '@sindresorhus/merge-streams': 1.0.0 fast-glob: 3.3.2 - ignore: 5.3.0 + ignore: 5.3.1 path-type: 5.0.0 slash: 5.1.0 unicorn-magic: 0.1.0 @@ -4212,8 +4212,8 @@ packages: engines: {node: '>=16.17.0'} dev: true - /ignore@5.3.0: - resolution: {integrity: sha512-g7dmpshy+gD7mh88OC9NwSGTKoc3kyLAZQRU1mt53Aw/vnvfXnbC+F/7F7QoYVKbV+KNvJx8wArewKy1vXMtlg==} + /ignore@5.3.1: + resolution: {integrity: sha512-5Fytz/IraMjqpwfd34ke28PTVMjZjJG2MPn5t7OE4eUCUNf8BAa7b5WUS9/Qvr6mwOQS7Mk6vdsMno5he+T8Xw==} engines: {node: '>= 4'} dev: true @@ -4580,7 +4580,7 @@ packages: '@jest/expect': 29.7.0 '@jest/test-result': 29.7.0 '@jest/types': 29.6.3 - '@types/node': 20.11.13 + '@types/node': 20.11.15 chalk: 4.1.2 co: 4.6.0 dedent: 1.5.1 @@ -4601,7 +4601,7 @@ packages: - supports-color dev: true - /jest-cli@29.7.0(@types/node@20.11.13)(ts-node@10.9.2): + /jest-cli@29.7.0(@types/node@20.11.15)(ts-node@10.9.2): resolution: {integrity: sha512-OVVobw2IubN/GSYsxETi+gOe7Ka59EFMR/twOU3Jb2GnKKeMGJB5SGUUrEz3SFVmJASUdZUzy83sLNNQ2gZslg==} engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} hasBin: true @@ -4615,10 +4615,10 @@ packages: '@jest/test-result': 29.7.0 '@jest/types': 29.6.3 chalk: 4.1.2 - create-jest: 29.7.0(@types/node@20.11.13)(ts-node@10.9.2) + create-jest: 29.7.0(@types/node@20.11.15)(ts-node@10.9.2) exit: 0.1.2 import-local: 3.1.0 - jest-config: 29.7.0(@types/node@20.11.13)(ts-node@10.9.2) + jest-config: 29.7.0(@types/node@20.11.15)(ts-node@10.9.2) jest-util: 29.7.0 jest-validate: 29.7.0 yargs: 17.7.2 @@ -4629,7 +4629,7 @@ packages: - ts-node dev: true - /jest-config@29.7.0(@types/node@20.11.13)(ts-node@10.9.2): + /jest-config@29.7.0(@types/node@20.11.15)(ts-node@10.9.2): resolution: {integrity: sha512-uXbpfeQ7R6TZBqI3/TxCU4q4ttk3u0PJeC+E0zbfSoSjq6bJ7buBPxzQPL0ifrkY4DNu4JUdk0ImlBUYi840eQ==} engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} peerDependencies: @@ -4644,7 +4644,7 @@ packages: '@babel/core': 7.23.9 '@jest/test-sequencer': 29.7.0 '@jest/types': 29.6.3 - '@types/node': 20.11.13 + '@types/node': 20.11.15 babel-jest: 29.7.0(@babel/core@7.23.9) chalk: 4.1.2 ci-info: 3.9.0 @@ -4664,7 +4664,7 @@ packages: pretty-format: 29.7.0 slash: 3.0.0 strip-json-comments: 3.1.1 - ts-node: 10.9.2(@types/node@20.11.13)(typescript@5.3.3) + ts-node: 10.9.2(@types/node@20.11.15)(typescript@5.3.3) transitivePeerDependencies: - babel-plugin-macros - supports-color @@ -4705,7 +4705,7 @@ packages: '@jest/environment': 29.7.0 '@jest/fake-timers': 29.7.0 '@jest/types': 29.6.3 - '@types/node': 20.11.13 + '@types/node': 20.11.15 jest-mock: 29.7.0 jest-util: 29.7.0 dev: true @@ -4721,7 +4721,7 @@ packages: dependencies: '@jest/types': 29.6.3 '@types/graceful-fs': 4.1.9 - '@types/node': 20.11.13 + '@types/node': 20.11.15 anymatch: 3.1.3 fb-watchman: 2.0.2 graceful-fs: 4.2.11 @@ -4772,7 +4772,7 @@ packages: engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} dependencies: '@jest/types': 29.6.3 - '@types/node': 20.11.13 + '@types/node': 20.11.15 jest-util: 29.7.0 dev: true @@ -4827,7 +4827,7 @@ packages: '@jest/test-result': 29.7.0 '@jest/transform': 29.7.0 '@jest/types': 29.6.3 - '@types/node': 20.11.13 + '@types/node': 20.11.15 chalk: 4.1.2 emittery: 0.13.1 graceful-fs: 4.2.11 @@ -4858,7 +4858,7 @@ packages: '@jest/test-result': 29.7.0 '@jest/transform': 29.7.0 '@jest/types': 29.6.3 - '@types/node': 20.11.13 + '@types/node': 20.11.15 chalk: 4.1.2 cjs-module-lexer: 1.2.3 collect-v8-coverage: 1.0.2 @@ -4910,7 +4910,7 @@ packages: engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} dependencies: '@jest/types': 29.6.3 - '@types/node': 20.11.13 + '@types/node': 20.11.15 chalk: 4.1.2 ci-info: 3.9.0 graceful-fs: 4.2.11 @@ -4935,7 +4935,7 @@ packages: dependencies: '@jest/test-result': 29.7.0 '@jest/types': 29.6.3 - '@types/node': 20.11.13 + '@types/node': 20.11.15 ansi-escapes: 4.3.2 chalk: 4.1.2 emittery: 0.13.1 @@ -4947,13 +4947,13 @@ packages: resolution: {integrity: sha512-eIz2msL/EzL9UFTFFx7jBTkeZfku0yUAyZZZmJ93H2TYEiroIx2PQjEXcwYtYl8zXCxb+PAmA2hLIt/6ZEkPHw==} engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} dependencies: - '@types/node': 20.11.13 + '@types/node': 20.11.15 jest-util: 29.7.0 merge-stream: 2.0.0 supports-color: 8.1.1 dev: true - /jest@29.7.0(@types/node@20.11.13)(ts-node@10.9.2): + /jest@29.7.0(@types/node@20.11.15)(ts-node@10.9.2): resolution: {integrity: sha512-NIy3oAFp9shda19hy4HK0HRTWKtPJmGdnvywu01nOqNC2vZg+Z+fvJDxpMQA88eb2I9EcafcdjYgsDthnYTvGw==} engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} hasBin: true @@ -4966,7 +4966,7 @@ packages: '@jest/core': 29.7.0(ts-node@10.9.2) '@jest/types': 29.6.3 import-local: 3.1.0 - jest-cli: 29.7.0(@types/node@20.11.13)(ts-node@10.9.2) + jest-cli: 29.7.0(@types/node@20.11.15)(ts-node@10.9.2) transitivePeerDependencies: - '@types/node' - babel-plugin-macros @@ -6413,7 +6413,7 @@ packages: typescript: 5.3.3 dev: true - /ts-node@10.9.2(@types/node@20.11.13)(typescript@5.3.3): + /ts-node@10.9.2(@types/node@20.11.15)(typescript@5.3.3): resolution: {integrity: sha512-f0FFpIdcHgn8zcPSbf1dRevwt047YMnaiJM3u2w2RewrB+fob/zePZcrOyQoLMMO7aBIddLcQIEK5dYjkLnGrQ==} hasBin: true peerDependencies: @@ -6432,7 +6432,7 @@ packages: '@tsconfig/node12': 1.0.11 '@tsconfig/node14': 1.0.3 '@tsconfig/node16': 1.0.4 - '@types/node': 20.11.13 + '@types/node': 20.11.15 acorn: 8.11.3 acorn-walk: 8.3.2 arg: 4.1.3 @@ -6522,7 +6522,7 @@ packages: resolution: {integrity: sha512-RD97prjEt9EL8YgAgpOkf3O4IF9lhJFr9g0htQkm0rchFp/Vx7LW5Q8fSXXub7BXAODyUQohRMyOc3faCPd0hg==} engines: {node: '>= 0.4'} dependencies: - available-typed-arrays: 1.0.5 + available-typed-arrays: 1.0.6 call-bind: 1.0.5 for-each: 0.3.3 has-proto: 1.0.1 @@ -6679,7 +6679,7 @@ packages: resolution: {integrity: sha512-P5Nra0qjSncduVPEAr7xhoF5guty49ArDTwzJ/yNuPIbZppyRxFQsRCWrocxIY+CnMVG+qfbU2FmDKyvSGClow==} engines: {node: '>= 0.4'} dependencies: - available-typed-arrays: 1.0.5 + available-typed-arrays: 1.0.6 call-bind: 1.0.5 for-each: 0.3.3 gopd: 1.0.1 diff --git a/src/query.ts b/src/query.ts index 7a20926f..fe6ecbe2 100644 --- a/src/query.ts +++ b/src/query.ts @@ -2,14 +2,14 @@ import type { ResourceType } from "./resource" import Debug from './debug' -// import { ErrorType, SdkError } from "./error" +import { ErrorType, SdkError } from "./error" const debug = Debug('query') type QueryFilter = Record> -// const arrayFilters = ['_any', '_all', '_in'] -// const objectFilters = ['_jcont'] +const arrayFilters = ['_any', '_all', '_in'] +const objectFilters = ['_jcont'] interface QueryParamsRetrieve { @@ -65,14 +65,14 @@ const generateQueryStringParams = (params: QueryParamsRetrieve | QueryParamsList // Filters if (params.filters) { Object.entries(params.filters).forEach(([p, v]) => { - // const filter = p.substring(p.lastIndexOf('_')) + const filter = p.substring(p.lastIndexOf('_')) let val if (Array.isArray(v)) { - // if (!arrayFilters.includes(filter)) throw new SdkError({ message: `Wrong ${filter} filter: Array value is supported only for the following filters: ${arrayFilters.join(', ')}`, type: ErrorType.REQUEST }) + if (!arrayFilters.includes(filter)) throw new SdkError({ message: `Wrong ${filter} filter: Array value is supported only for the following filters: ${arrayFilters.join(', ')}`, type: ErrorType.REQUEST }) val = v.join(',') } else if (typeof v === 'object') { - // if (!objectFilters.includes(filter)) throw new SdkError({ message: `Wrong ${filter} filter: Object value is supported only for the following filters: ${objectFilters.join(', ')}`, type: ErrorType.REQUEST }) + if (!objectFilters.includes(filter)) throw new SdkError({ message: `Wrong ${filter} filter: Object value is supported only for the following filters: ${objectFilters.join(', ')}`, type: ErrorType.REQUEST }) val = JSON.stringify(v) } else val = String(v) diff --git a/src/resource.ts b/src/resource.ts index 6738e6a3..04be68b9 100644 --- a/src/resource.ts +++ b/src/resource.ts @@ -132,11 +132,11 @@ class ResourceAdapter { } - /* - get clientInstance(): ApiClient { + + get client(): Readonly { return this.#client } - */ + async singleton(resource: ResourceType, params?: QueryParamsRetrieve, options?: ResourcesConfig): Promise { @@ -271,15 +271,34 @@ abstract class ApiResourceBase { abstract type(): ResourceTypeLock - parse(resource: string): R | R[] { + + parse(resource: string, options?: { ignoreSlug?: boolean }): R | R[] { + try { + const res = JSON.parse(resource) - if (res.data?.type !== this.type()) throw new SdkError({ message: `Invalid resource type [${res.data?.type}]`, type: ErrorType.PARSE }) + + // Resource type always checked + const rtype = res.data?.type + if (rtype !== this.type()) throw new SdkError({ message: `Invalid resource type [${rtype}]`, type: ErrorType.PARSE }) + + // Parse options + const { ignoreSlug } = options || {} + + if (!ignoreSlug) { + const links = res.data.links.self + if (!links || !String(links).match(`^${this.resources.client.baseUrl}/${this.type()}/*`)) + throw new SdkError({ message: `Resource contains invalid links [${links}]`, type: ErrorType.PARSE }) + } + + return denormalize(res as DocWithData) + } catch (error: any) { if (SdkError.isSdkError(error)) throw error else throw new SdkError({ message: `Payload parse error [${error.message}]`, type: ErrorType.PARSE }) } + } diff --git a/test/spot.ts b/test/spot.ts index 35e989b0..0b7183d8 100644 --- a/test/spot.ts +++ b/test/spot.ts @@ -17,27 +17,31 @@ import getToken from './token' try { - let customers = await cl.customers.list({ filters: { 'email_cont_any': ['userx2@server.com','userx@server.com'] } }) - console.log(customers) - - customers = await cl.customers.list({ filters: { 'email_cont_any': 'userx2@server.com,userx@server.com' } }) - console.log(customers) - - customers = await cl.customers.list({ filters: { 'email_cont': 'userx2@server.com' } }) - console.log(customers) - - customers = await cl.customers.list({ filters: { 'metadata_jcont': { testkey: 'meta' } } }) - console.log(customers) - - customers = await cl.customers.list({ filters: { 'metadata_jcont': '{ "testkey": "meta" }' } }) - console.log(customers) - - customers = await cl.customers.list({ filters: { 'email_eq': ['a', 'b'] } }) - console.log(customers) - - customers = await cl.customers.list({ filters: { 'metadata_eq': { testkey: 'meta' } } }) - console.log(customers) - + const payload = ` + { + "data": { + "id": "AbcdEfgHiL", + "meta": { + "mode": "test", + "organization_id": "myOrgId" + }, + "type": "customers2", + "links": { + "self": "https://sdk2-test-org.commercelayer.io/api/customers/AbcdEfgHiL" + }, + "attributes": { + "metadata": {}, + "reference": "ref_test", + "created_at": "2023-10-01T05:53:29.296Z", + "updated_at": "2023-10-10T08:52:13.251Z" + } + } + } + ` + + const c = cl.customers.parse(payload, { ignoreSlug: true }) + console.log('----------') + console.log(c) } catch (error: any) { console.log(inspect(error, false, null, true))