diff --git a/wrapper/Strapi/ReadMe.md b/wrapper/Strapi/ReadMe.md index 900c1dd..b636c06 100644 --- a/wrapper/Strapi/ReadMe.md +++ b/wrapper/Strapi/ReadMe.md @@ -53,7 +53,7 @@ if (!['localhost', '127.0.0.1', '0.0.0.0'].includes(location.hostname)) ### `model/Article.ts` ```typescript -import { Base, BaseUser, StrapiListModel } from 'mobx-strapi'; +import { Base, BaseUser, Searchable, StrapiListModel } from 'mobx-strapi'; import { session } from './Session'; @@ -61,7 +61,7 @@ export interface Article extends Base, Record<'title' | 'summary', string> { author: BaseUser; } -export class ArticleModel extends StrapiListModel
{ +export class ArticleModel extends Searchable
(StrapiListModel) { client = session.client; baseURI = 'articles'; // for Strapi 5 diff --git a/wrapper/Strapi/package.json b/wrapper/Strapi/package.json index cc5410a..1082814 100644 --- a/wrapper/Strapi/package.json +++ b/wrapper/Strapi/package.json @@ -1,6 +1,6 @@ { "name": "mobx-strapi", - "version": "0.6.7", + "version": "0.7.0", "license": "LGPL-3.0", "author": "shiy2008@gmail.com", "description": "MobX SDK for Strapi headless CMS", @@ -27,7 +27,7 @@ "mobx-restful": "^2.1.0", "qs": "^6.14.0", "regenerator-runtime": "^0.14.1", - "web-utility": "^4.4.3" + "web-utility": "^4.5.3" }, "devDependencies": { "@parcel/config-default": "~2.15.4", @@ -37,7 +37,7 @@ "@types/qs": "^6.14.0", "mobx": "^6.13.7", "parcel": "~2.15.4", - "typescript": "~5.8.3" + "typescript": "~5.9.2" }, "pnpm": { "onlyBuiltDependencies": [ diff --git a/wrapper/Strapi/pnpm-lock.yaml b/wrapper/Strapi/pnpm-lock.yaml index 54448b4..fb75a05 100644 --- a/wrapper/Strapi/pnpm-lock.yaml +++ b/wrapper/Strapi/pnpm-lock.yaml @@ -16,13 +16,13 @@ importers: version: 6.2.2 koajax: specifier: ^3.1.2 - version: 3.1.2(typescript@5.8.3) + version: 3.1.2(typescript@5.9.2) mobx: specifier: ^6.13.7 version: 6.13.7 mobx-restful: specifier: ^2.1.0 - version: 2.1.0(mobx@6.13.7)(typescript@5.8.3) + version: 2.1.0(mobx@6.13.7)(typescript@5.9.2) qs: specifier: ^6.14.0 version: 6.14.0 @@ -30,8 +30,8 @@ importers: specifier: ^0.14.1 version: 0.14.1 web-utility: - specifier: ^4.4.3 - version: 4.4.3(typescript@5.8.3) + specifier: ^4.5.3 + version: 4.5.3(typescript@5.9.2) devDependencies: '@parcel/config-default': specifier: ~2.15.4 @@ -41,10 +41,10 @@ importers: version: 2.15.4(@parcel/core@2.15.4(@swc/helpers@0.5.17)) '@parcel/transformer-typescript-tsc': specifier: ~2.15.4 - version: 2.15.4(@parcel/core@2.15.4(@swc/helpers@0.5.17))(typescript@5.8.3) + version: 2.15.4(@parcel/core@2.15.4(@swc/helpers@0.5.17))(typescript@5.9.2) '@parcel/transformer-typescript-types': specifier: ~2.15.4 - version: 2.15.4(@parcel/core@2.15.4(@swc/helpers@0.5.17))(typescript@5.8.3) + version: 2.15.4(@parcel/core@2.15.4(@swc/helpers@0.5.17))(typescript@5.9.2) '@types/qs': specifier: ^6.14.0 version: 6.14.0 @@ -52,8 +52,8 @@ importers: specifier: ~2.15.4 version: 2.15.4(@swc/helpers@0.5.17) typescript: - specifier: ~5.8.3 - version: 5.8.3 + specifier: ~5.9.2 + version: 5.9.2 packages: @@ -521,68 +521,68 @@ packages: peerDependencies: '@parcel/core': ^2.15.4 - '@swc/core-darwin-arm64@1.12.7': - resolution: {integrity: sha512-w6BBT0hBRS56yS+LbReVym0h+iB7/PpCddqrn1ha94ra4rZ4R/A91A/rkv+LnQlPqU/+fhqdlXtCJU9mrhCBtA==} + '@swc/core-darwin-arm64@1.13.5': + resolution: {integrity: sha512-lKNv7SujeXvKn16gvQqUQI5DdyY8v7xcoO3k06/FJbHJS90zEwZdQiMNRiqpYw/orU543tPaWgz7cIYWhbopiQ==} engines: {node: '>=10'} cpu: [arm64] os: [darwin] - '@swc/core-darwin-x64@1.12.7': - resolution: {integrity: sha512-jN6LhFfGOpm4DY2mXPgwH4aa9GLOwublwMVFFZ/bGnHYYCRitLZs9+JWBbyWs7MyGcA246Ew+EREx36KVEAxjA==} + '@swc/core-darwin-x64@1.13.5': + resolution: {integrity: sha512-ILd38Fg/w23vHb0yVjlWvQBoE37ZJTdlLHa8LRCFDdX4WKfnVBiblsCU9ar4QTMNdeTBEX9iUF4IrbNWhaF1Ng==} engines: {node: '>=10'} cpu: [x64] os: [darwin] - '@swc/core-linux-arm-gnueabihf@1.12.7': - resolution: {integrity: sha512-rHn8XXi7G2StEtZRAeJ6c7nhJPDnqsHXmeNrAaYwk8Tvpa6ZYG2nT9E1OQNXj1/dfbSFTjdiA8M8ZvGYBlpBoA==} + '@swc/core-linux-arm-gnueabihf@1.13.5': + resolution: {integrity: sha512-Q6eS3Pt8GLkXxqz9TAw+AUk9HpVJt8Uzm54MvPsqp2yuGmY0/sNaPPNVqctCX9fu/Nu8eaWUen0si6iEiCsazQ==} engines: {node: '>=10'} cpu: [arm] os: [linux] - '@swc/core-linux-arm64-gnu@1.12.7': - resolution: {integrity: sha512-N15hKizSSh+hkZ2x3TDVrxq0TDcbvDbkQJi2ZrLb9fK+NdFUV/x+XF16ZDPlbxtrGXl1CT7VD439SNaMN9F7qw==} + '@swc/core-linux-arm64-gnu@1.13.5': + resolution: {integrity: sha512-aNDfeN+9af+y+M2MYfxCzCy/VDq7Z5YIbMqRI739o8Ganz6ST+27kjQFd8Y/57JN/hcnUEa9xqdS3XY7WaVtSw==} engines: {node: '>=10'} cpu: [arm64] os: [linux] - '@swc/core-linux-arm64-musl@1.12.7': - resolution: {integrity: sha512-jxyINtBezpxd3eIUDiDXv7UQ87YWlPsM9KumOwJk09FkFSO4oYxV2RT+Wu+Nt5tVWue4N0MdXT/p7SQsDEk4YA==} + '@swc/core-linux-arm64-musl@1.13.5': + resolution: {integrity: sha512-9+ZxFN5GJag4CnYnq6apKTnnezpfJhCumyz0504/JbHLo+Ue+ZtJnf3RhyA9W9TINtLE0bC4hKpWi8ZKoETyOQ==} engines: {node: '>=10'} cpu: [arm64] os: [linux] - '@swc/core-linux-x64-gnu@1.12.7': - resolution: {integrity: sha512-PR4tPVwU1BQBfFDk2XfzXxsEIjF3x/bOV1BzZpYvrlkU0TKUDbR4t2wzvsYwD/coW7/yoQmlL70/qnuPtTp1Zw==} + '@swc/core-linux-x64-gnu@1.13.5': + resolution: {integrity: sha512-WD530qvHrki8Ywt/PloKUjaRKgstQqNGvmZl54g06kA+hqtSE2FTG9gngXr3UJxYu/cNAjJYiBifm7+w4nbHbA==} engines: {node: '>=10'} cpu: [x64] os: [linux] - '@swc/core-linux-x64-musl@1.12.7': - resolution: {integrity: sha512-zy7JWfQtQItgMfUjSbbcS3DZqQUn2d9VuV0LSGpJxtTXwgzhRpF1S2Sj7cU9hGpbM27Y8RJ4DeFb3qbAufjbrw==} + '@swc/core-linux-x64-musl@1.13.5': + resolution: {integrity: sha512-Luj8y4OFYx4DHNQTWjdIuKTq2f5k6uSXICqx+FSabnXptaOBAbJHNbHT/06JZh6NRUouaf0mYXN0mcsqvkhd7Q==} engines: {node: '>=10'} cpu: [x64] os: [linux] - '@swc/core-win32-arm64-msvc@1.12.7': - resolution: {integrity: sha512-52PeF0tyX04ZFD8nibNhy/GjMFOZWTEWPmIB3wpD1vIJ1po+smtBnEdRRll5WIXITKoiND8AeHlBNBPqcsdcwA==} + '@swc/core-win32-arm64-msvc@1.13.5': + resolution: {integrity: sha512-cZ6UpumhF9SDJvv4DA2fo9WIzlNFuKSkZpZmPG1c+4PFSEMy5DFOjBSllCvnqihCabzXzpn6ykCwBmHpy31vQw==} engines: {node: '>=10'} cpu: [arm64] os: [win32] - '@swc/core-win32-ia32-msvc@1.12.7': - resolution: {integrity: sha512-WzQwkNMuhB1qQShT9uUgz/mX2j7NIEPExEtzvGsBT7TlZ9j1kGZ8NJcZH/fwOFcSJL4W7DnkL7nAhx6DBlSPaA==} + '@swc/core-win32-ia32-msvc@1.13.5': + resolution: {integrity: sha512-C5Yi/xIikrFUzZcyGj9L3RpKljFvKiDMtyDzPKzlsDrKIw2EYY+bF88gB6oGY5RGmv4DAX8dbnpRAqgFD0FMEw==} engines: {node: '>=10'} cpu: [ia32] os: [win32] - '@swc/core-win32-x64-msvc@1.12.7': - resolution: {integrity: sha512-R52ivBi2lgjl+Bd3XCPum0YfgbZq/W1AUExITysddP9ErsNSwnreYyNB3exEijiazWGcqHEas2ChiuMOP7NYrA==} + '@swc/core-win32-x64-msvc@1.13.5': + resolution: {integrity: sha512-YrKdMVxbYmlfybCSbRtrilc6UA8GF5aPmGKBdPvjrarvsmf4i7ZHGCEnLtfOMd3Lwbs2WUZq3WdMbozYeLU93Q==} engines: {node: '>=10'} cpu: [x64] os: [win32] - '@swc/core@1.12.7': - resolution: {integrity: sha512-bcpllEihyUSnqp0UtXTvXc19CT4wp3tGWLENhWnjr4B5iEOkzqMu+xHGz1FI5IBatjfqOQb29tgIfv6IL05QaA==} + '@swc/core@1.13.5': + resolution: {integrity: sha512-WezcBo8a0Dg2rnR82zhwoR6aRNxeTGfK5QCD6TQ+kg3xx/zNT02s/0o+81h/3zhvFSB24NtqEr8FTw88O5W/JQ==} engines: {node: '>=10'} peerDependencies: '@swc/helpers': '>=0.5.17' @@ -596,8 +596,8 @@ packages: '@swc/helpers@0.5.17': resolution: {integrity: sha512-5IKx/Y13RsYd+sauPb2x+U/xZikHjolzfuDgTAl/Tdf3Q8rslRvC19NKDLgAJQ6wsqADk10ntlv08nPFw/gO/A==} - '@swc/types@0.1.23': - resolution: {integrity: sha512-u1iIVZV9Q0jxY+yM2vw/hZGDNudsN85bBpTqzAQ9rzkxW9D+e3aEM4Han+ow518gSewkXgjmEK0BD79ZcNVgPw==} + '@swc/types@0.1.25': + resolution: {integrity: sha512-iAoY/qRhNH8a/hBvm3zKj9qQ4oc2+3w1unPJa2XvTK3XjeLXtzcCingVPw/9e5mn1+0yPqxcBGp9Jf0pkfMb1g==} '@types/qs@6.14.0': resolution: {integrity: sha512-eOunJqu0K1923aExK6y8p6fsihYEn/BYuQ4g0CxAAgFc4b/ZLN4CrsRZ55srTdqoiLzU2B2evC+apEIxprEzkQ==} @@ -613,8 +613,8 @@ packages: resolution: {integrity: sha512-yQbXgO/OSZVD2IsiLlro+7Hf6Q18EJrKSEsdoMzKePKXct3gvD8oLcOQdIzGupr5Fj+EDe8gO/lxc1BzfMpxvA==} engines: {node: '>=8'} - browserslist@4.25.1: - resolution: {integrity: sha512-KGj0KoOMXLpSNkkEI6Z6mShmQy0bc1I+T7K9N81k4WWMrfz+6fQ6es80B/YLAeRoKvjYE1YSHHOW1qe9xIVzHw==} + browserslist@4.25.4: + resolution: {integrity: sha512-4jYpcjabC606xJ3kw2QwGEZKX0Aw7sgQdZCvIK9dhVSPh76BKo+C+btT1RRofH7B+8iNpEbgGNVWiLki5q93yg==} engines: {node: ^6 || ^7 || ^8 || ^9 || ^10 || ^11 || ^12 || >=13.7} hasBin: true @@ -626,8 +626,8 @@ packages: resolution: {integrity: sha512-+ys997U96po4Kx/ABpBCqhA9EuxJaQWDQg7295H4hBphv3IZg0boBKuwYpt4YXp6MZ5AmZQnU/tyMTlRpaSejg==} engines: {node: '>= 0.4'} - caniuse-lite@1.0.30001726: - resolution: {integrity: sha512-VQAUIUzBiZ/UnlM28fSp2CRF3ivUn1BWEvxMcVTNwpw91Py1pGbPIyIKtd+tzct9C3ouceCVdGAXxZOpZAsgdw==} + caniuse-lite@1.0.30001741: + resolution: {integrity: sha512-QGUGitqsc8ARjLdgAfxETDhRbJ0REsP6O3I96TAth/mVjh2cYzN2u+3AzPP3aVSm2FehEItaJw1xd+IGBXWeSw==} chalk@4.1.2: resolution: {integrity: sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==} @@ -673,11 +673,8 @@ packages: resolution: {integrity: sha512-KIN/nDJBQRcXw0MLVhZE9iQHmG68qAVIBg9CqmUYjmQIhgij9U5MFvrqkUL5FbtyyzZuOeOt0zdeRe4UY7ct+A==} engines: {node: '>= 0.4'} - electron-to-chromium@1.5.177: - resolution: {integrity: sha512-7EH2G59nLsEMj97fpDuvVcYi6lwTcM1xuWw3PssD8xzboAW7zj7iB3COEEEATUfjLHrs5uKBLQT03V/8URx06g==} - - element-internals-polyfill@1.3.13: - resolution: {integrity: sha512-viZ7wJsvh6eFwGQX512zEaccK/c6RRFSerJsdkfe3DW/ZtruvNeOR33fpPZgfXxvqRdU2lK33KM4S6GqaTgVKQ==} + electron-to-chromium@1.5.215: + resolution: {integrity: sha512-TIvGp57UpeNetj/wV/xpFNpWGb0b/ROw372lHPx5Aafx02gjTBtWnEEcaSX3W2dLM3OSdGGyHX/cHl01JQsLaQ==} es-define-property@1.0.1: resolution: {integrity: sha512-e3nRfgfUZ4rNGL232gUgX06QNyyez04KdjFrF+LTRoOXmrOgFKDg4BCdsjW8EnT69eqdYGmRpJwiPVYNrCaW3g==} @@ -848,8 +845,8 @@ packages: resolution: {integrity: sha512-P0efT1C9jIdVRefqjzOQ9Xml57zpOXnIuS+csaB4MdZbTdmGDLo8XhzBG1N7aO11gKDDkJvBLULeFTo46wwreA==} hasBin: true - msgpackr@1.11.4: - resolution: {integrity: sha512-uaff7RG9VIC4jacFW9xzL3jc0iM32DNHe4jYVycBcjUePT/Klnfj7pqtWJt9khvDFizmjN2TlYniYmSS2LIaZg==} + msgpackr@1.11.5: + resolution: {integrity: sha512-UjkUHN0yqp9RWKy0Lplhh+wlpdt9oQBYgULZOiFhV3VclSF1JnSQWZ5r9gORQlNYaUKQoR8itv7g7z1xDDuACA==} node-addon-api@6.1.0: resolution: {integrity: sha512-+eawOlIgy680F0kBzPUNFhMZGtJ1YmqM6l4+Crf4IkImjYrO/mqPwRMh352g23uIaQKFItcQ64I7KMaJxHgAVA==} @@ -865,8 +862,8 @@ packages: resolution: {integrity: sha512-s+w+rBWnpTMwSFbaE0UXsRlg7hU4FjekKU4eyAih5T8nJuNZT1nNsskXpxmeqSK9UzkBl6UgRlnKc8hz8IEqOw==} hasBin: true - node-releases@2.0.19: - resolution: {integrity: sha512-xxOWJsBKtzAq7DY0J+DTzuz58K8e7sJbdgwkbMWQe8UYB6ekmsQ45q0M/tJDsGaZmbC+l7n57UV8Hl5tHxO9uw==} + node-releases@2.0.20: + resolution: {integrity: sha512-7gK6zSXEH6neM212JgfYFXe+GmZQM+fia5SsusuBIUgnPheLFBmIPhtFoAQRj8/7wASYQnbDlHPVwY0BefoFgA==} nullthrows@1.1.1: resolution: {integrity: sha512-2vPPEi+Z7WqML2jZYddDIfy5Dqb0r2fze2zTxNNknZaFpVHU3mFB3R+DWeJWGVx0ecvttSGlJTI+WG+8Z4cDWw==} @@ -947,8 +944,8 @@ packages: resolution: {integrity: sha512-Ne+eE4r0/iWnpAxD852z3A+N0Bt5RN//NjJwRd2VFHEmrywxf5vsZlh4R6lixl6B+wz/8d+maTSAkN1FIkI3LQ==} engines: {node: '>=10'} - typescript@5.8.3: - resolution: {integrity: sha512-p1diW6TqL9L07nNxvRMM7hMMw4c5XOo/1ibL4aAIGmSAt9slTE1Xgw5KWuof2uTOvCg9BY7ZRi+GaF+7sfgPeQ==} + typescript@5.9.2: + resolution: {integrity: sha512-CWBzXQrc/qOkhidw1OzBTQuYRbfyxDXJMVJ1XNwUHGROVmuaeiEm3OslpZ1RV96d7SKKjZKrSJu3+t/xlw3R9A==} engines: {node: '>=14.17'} hasBin: true @@ -965,13 +962,14 @@ packages: weak-lru-cache@1.2.2: resolution: {integrity: sha512-DEAoo25RfSYMuTGc9vPJzZcZullwIqRDSI9LOy+fkCJPi6hykCnfKaXTuPBDuXAUcqHXyOgFtHNp/kB2FjYHbw==} - web-streams-polyfill@4.1.0: - resolution: {integrity: sha512-A7Jxrg7+eV+eZR/CIdESDnRGFb6/bcKukGvJBB5snI6cw3is1c2qamkYstC1bY1p08TyMRlN9eTMkxmnKJBPBw==} + web-streams-polyfill@4.2.0: + resolution: {integrity: sha512-0rYDzGOh9EZpig92umN5g5D/9A1Kff7k0/mzPSSCY8jEQeYkgRMoY7LhbXtUCWzLCMX0TUE9aoHkjFNB7D9pfA==} engines: {node: '>= 8'} - web-utility@4.4.3: - resolution: {integrity: sha512-QGnqRBbHOuvuhgMCJFoIHe9O47ZLEAkdjVdOPGq8jhzRlLNlU6UrLs7/Cco6XpLJOByMHP8UKc5rRt/vgmtVoA==} + web-utility@4.5.3: + resolution: {integrity: sha512-/+PLgAOPftEO+LKGPK1nIAiIJPiUcjdO1QGtXF9Ozspfa7UwpUUeYXclNmqq/0/tgsvYuJpEQvldR2FXkCyhQQ==} peerDependencies: + element-internals-polyfill: '>=1' typescript: '>=4.1' snapshots: @@ -1115,12 +1113,12 @@ snapshots: '@parcel/utils': 2.15.4 '@parcel/workers': 2.15.4(@parcel/core@2.15.4(@swc/helpers@0.5.17)) base-x: 3.0.11 - browserslist: 4.25.1 + browserslist: 4.25.4 clone: 2.1.2 dotenv: 16.6.1 dotenv-expand: 11.0.7 json5: 2.2.3 - msgpackr: 1.11.4 + msgpackr: 1.11.5 nullthrows: 1.1.1 semver: 7.7.2 transitivePeerDependencies: @@ -1192,7 +1190,7 @@ snapshots: '@parcel/plugin': 2.15.4(@parcel/core@2.15.4(@swc/helpers@0.5.17)) '@parcel/source-map': 2.1.1 '@parcel/utils': 2.15.4 - browserslist: 4.25.1 + browserslist: 4.25.4 lightningcss: 1.30.1 nullthrows: 1.1.1 transitivePeerDependencies: @@ -1234,7 +1232,7 @@ snapshots: '@parcel/plugin': 2.15.4(@parcel/core@2.15.4(@swc/helpers@0.5.17)) '@parcel/source-map': 2.1.1 '@parcel/utils': 2.15.4 - '@swc/core': 1.12.7(@swc/helpers@0.5.17) + '@swc/core': 1.13.5(@swc/helpers@0.5.17) nullthrows: 1.1.1 transitivePeerDependencies: - '@parcel/core' @@ -1251,7 +1249,7 @@ snapshots: '@parcel/types': 2.15.4(@parcel/core@2.15.4(@swc/helpers@0.5.17)) '@parcel/utils': 2.15.4 '@parcel/workers': 2.15.4(@parcel/core@2.15.4(@swc/helpers@0.5.17)) - '@swc/core': 1.12.7(@swc/helpers@0.5.17) + '@swc/core': 1.13.5(@swc/helpers@0.5.17) semver: 7.7.2 transitivePeerDependencies: - '@swc/helpers' @@ -1459,7 +1457,7 @@ snapshots: '@parcel/plugin': 2.15.4(@parcel/core@2.15.4(@swc/helpers@0.5.17)) '@parcel/source-map': 2.1.1 '@parcel/utils': 2.15.4 - browserslist: 4.25.1 + browserslist: 4.25.4 json5: 2.2.3 nullthrows: 1.1.1 semver: 7.7.2 @@ -1473,7 +1471,7 @@ snapshots: '@parcel/plugin': 2.15.4(@parcel/core@2.15.4(@swc/helpers@0.5.17)) '@parcel/source-map': 2.1.1 '@parcel/utils': 2.15.4 - browserslist: 4.25.1 + browserslist: 4.25.4 lightningcss: 1.30.1 nullthrows: 1.1.1 transitivePeerDependencies: @@ -1509,7 +1507,7 @@ snapshots: '@parcel/utils': 2.15.4 '@parcel/workers': 2.15.4(@parcel/core@2.15.4(@swc/helpers@0.5.17)) '@swc/helpers': 0.5.17 - browserslist: 4.25.1 + browserslist: 4.25.4 nullthrows: 1.1.1 regenerator-runtime: 0.14.1 semver: 7.7.2 @@ -1579,33 +1577,33 @@ snapshots: - '@parcel/core' - napi-wasm - '@parcel/transformer-typescript-tsc@2.15.4(@parcel/core@2.15.4(@swc/helpers@0.5.17))(typescript@5.8.3)': + '@parcel/transformer-typescript-tsc@2.15.4(@parcel/core@2.15.4(@swc/helpers@0.5.17))(typescript@5.9.2)': dependencies: '@parcel/plugin': 2.15.4(@parcel/core@2.15.4(@swc/helpers@0.5.17)) '@parcel/source-map': 2.1.1 - '@parcel/ts-utils': 2.15.4(typescript@5.8.3) - typescript: 5.8.3 + '@parcel/ts-utils': 2.15.4(typescript@5.9.2) + typescript: 5.9.2 transitivePeerDependencies: - '@parcel/core' - napi-wasm - '@parcel/transformer-typescript-types@2.15.4(@parcel/core@2.15.4(@swc/helpers@0.5.17))(typescript@5.8.3)': + '@parcel/transformer-typescript-types@2.15.4(@parcel/core@2.15.4(@swc/helpers@0.5.17))(typescript@5.9.2)': dependencies: '@parcel/diagnostic': 2.15.4 '@parcel/plugin': 2.15.4(@parcel/core@2.15.4(@swc/helpers@0.5.17)) '@parcel/source-map': 2.1.1 - '@parcel/ts-utils': 2.15.4(typescript@5.8.3) + '@parcel/ts-utils': 2.15.4(typescript@5.9.2) '@parcel/utils': 2.15.4 nullthrows: 1.1.1 - typescript: 5.8.3 + typescript: 5.9.2 transitivePeerDependencies: - '@parcel/core' - napi-wasm - '@parcel/ts-utils@2.15.4(typescript@5.8.3)': + '@parcel/ts-utils@2.15.4(typescript@5.9.2)': dependencies: nullthrows: 1.1.1 - typescript: 5.8.3 + typescript: 5.9.2 '@parcel/types-internal@2.15.4': dependencies: @@ -1707,51 +1705,51 @@ snapshots: transitivePeerDependencies: - napi-wasm - '@swc/core-darwin-arm64@1.12.7': + '@swc/core-darwin-arm64@1.13.5': optional: true - '@swc/core-darwin-x64@1.12.7': + '@swc/core-darwin-x64@1.13.5': optional: true - '@swc/core-linux-arm-gnueabihf@1.12.7': + '@swc/core-linux-arm-gnueabihf@1.13.5': optional: true - '@swc/core-linux-arm64-gnu@1.12.7': + '@swc/core-linux-arm64-gnu@1.13.5': optional: true - '@swc/core-linux-arm64-musl@1.12.7': + '@swc/core-linux-arm64-musl@1.13.5': optional: true - '@swc/core-linux-x64-gnu@1.12.7': + '@swc/core-linux-x64-gnu@1.13.5': optional: true - '@swc/core-linux-x64-musl@1.12.7': + '@swc/core-linux-x64-musl@1.13.5': optional: true - '@swc/core-win32-arm64-msvc@1.12.7': + '@swc/core-win32-arm64-msvc@1.13.5': optional: true - '@swc/core-win32-ia32-msvc@1.12.7': + '@swc/core-win32-ia32-msvc@1.13.5': optional: true - '@swc/core-win32-x64-msvc@1.12.7': + '@swc/core-win32-x64-msvc@1.13.5': optional: true - '@swc/core@1.12.7(@swc/helpers@0.5.17)': + '@swc/core@1.13.5(@swc/helpers@0.5.17)': dependencies: '@swc/counter': 0.1.3 - '@swc/types': 0.1.23 + '@swc/types': 0.1.25 optionalDependencies: - '@swc/core-darwin-arm64': 1.12.7 - '@swc/core-darwin-x64': 1.12.7 - '@swc/core-linux-arm-gnueabihf': 1.12.7 - '@swc/core-linux-arm64-gnu': 1.12.7 - '@swc/core-linux-arm64-musl': 1.12.7 - '@swc/core-linux-x64-gnu': 1.12.7 - '@swc/core-linux-x64-musl': 1.12.7 - '@swc/core-win32-arm64-msvc': 1.12.7 - '@swc/core-win32-ia32-msvc': 1.12.7 - '@swc/core-win32-x64-msvc': 1.12.7 + '@swc/core-darwin-arm64': 1.13.5 + '@swc/core-darwin-x64': 1.13.5 + '@swc/core-linux-arm-gnueabihf': 1.13.5 + '@swc/core-linux-arm64-gnu': 1.13.5 + '@swc/core-linux-arm64-musl': 1.13.5 + '@swc/core-linux-x64-gnu': 1.13.5 + '@swc/core-linux-x64-musl': 1.13.5 + '@swc/core-win32-arm64-msvc': 1.13.5 + '@swc/core-win32-ia32-msvc': 1.13.5 + '@swc/core-win32-x64-msvc': 1.13.5 '@swc/helpers': 0.5.17 '@swc/counter@0.1.3': {} @@ -1760,7 +1758,7 @@ snapshots: dependencies: tslib: 2.8.1 - '@swc/types@0.1.23': + '@swc/types@0.1.25': dependencies: '@swc/counter': 0.1.3 @@ -1778,12 +1776,12 @@ snapshots: dependencies: fill-range: 7.1.1 - browserslist@4.25.1: + browserslist@4.25.4: dependencies: - caniuse-lite: 1.0.30001726 - electron-to-chromium: 1.5.177 - node-releases: 2.0.19 - update-browserslist-db: 1.1.3(browserslist@4.25.1) + caniuse-lite: 1.0.30001741 + electron-to-chromium: 1.5.215 + node-releases: 2.0.20 + update-browserslist-db: 1.1.3(browserslist@4.25.4) call-bind-apply-helpers@1.0.2: dependencies: @@ -1795,7 +1793,7 @@ snapshots: call-bind-apply-helpers: 1.0.2 get-intrinsic: 1.3.0 - caniuse-lite@1.0.30001726: {} + caniuse-lite@1.0.30001741: {} chalk@4.1.2: dependencies: @@ -1830,9 +1828,7 @@ snapshots: es-errors: 1.3.0 gopd: 1.2.0 - electron-to-chromium@1.5.177: {} - - element-internals-polyfill@1.3.13: {} + electron-to-chromium@1.5.215: {} es-define-property@1.0.1: {} @@ -1896,13 +1892,14 @@ snapshots: json5@2.2.3: {} - koajax@3.1.2(typescript@5.8.3): + koajax@3.1.2(typescript@5.9.2): dependencies: '@swc/helpers': 0.5.17 regenerator-runtime: 0.14.1 - web-streams-polyfill: 4.1.0 - web-utility: 4.4.3(typescript@5.8.3) + web-streams-polyfill: 4.2.0 + web-utility: 4.5.3(typescript@5.9.2) transitivePeerDependencies: + - element-internals-polyfill - typescript lightningcss-darwin-arm64@1.30.1: @@ -1952,7 +1949,7 @@ snapshots: lmdb@2.8.5: dependencies: - msgpackr: 1.11.4 + msgpackr: 1.11.5 node-addon-api: 6.1.0 node-gyp-build-optional-packages: 5.1.1 ordered-binary: 1.6.0 @@ -1972,16 +1969,17 @@ snapshots: braces: 3.0.3 picomatch: 2.3.1 - mobx-restful@2.1.0(mobx@6.13.7)(typescript@5.8.3): + mobx-restful@2.1.0(mobx@6.13.7)(typescript@5.9.2): dependencies: '@swc/helpers': 0.5.17 idb-keyval: 6.2.2 - koajax: 3.1.2(typescript@5.8.3) + koajax: 3.1.2(typescript@5.9.2) mobx: 6.13.7 regenerator-runtime: 0.14.1 - web-utility: 4.4.3(typescript@5.8.3) + web-utility: 4.5.3(typescript@5.9.2) transitivePeerDependencies: - core-js + - element-internals-polyfill - jsdom - typescript @@ -1999,7 +1997,7 @@ snapshots: '@msgpackr-extract/msgpackr-extract-win32-x64': 3.0.3 optional: true - msgpackr@1.11.4: + msgpackr@1.11.5: optionalDependencies: msgpackr-extract: 3.0.3 @@ -2016,7 +2014,7 @@ snapshots: detect-libc: 2.0.4 optional: true - node-releases@2.0.19: {} + node-releases@2.0.20: {} nullthrows@1.1.1: {} @@ -2105,11 +2103,11 @@ snapshots: type-fest@0.20.2: {} - typescript@5.8.3: {} + typescript@5.9.2: {} - update-browserslist-db@1.1.3(browserslist@4.25.1): + update-browserslist-db@1.1.3(browserslist@4.25.4): dependencies: - browserslist: 4.25.1 + browserslist: 4.25.4 escalade: 3.2.0 picocolors: 1.1.1 @@ -2117,11 +2115,10 @@ snapshots: weak-lru-cache@1.2.2: {} - web-streams-polyfill@4.1.0: {} + web-streams-polyfill@4.2.0: {} - web-utility@4.4.3(typescript@5.8.3): + web-utility@4.5.3(typescript@5.9.2): dependencies: '@swc/helpers': 0.5.17 - element-internals-polyfill: 1.3.13 regenerator-runtime: 0.14.1 - typescript: 5.8.3 + typescript: 5.9.2 diff --git a/wrapper/Strapi/source/Session.ts b/wrapper/Strapi/source/Session.ts index c323416..a117093 100644 --- a/wrapper/Strapi/source/Session.ts +++ b/wrapper/Strapi/source/Session.ts @@ -71,7 +71,9 @@ export class SessionModel extends BaseModel { client = new HTTPClient({ baseURI: 'http://localhost:1337/api/', responseType: 'json' - }).use(({ request }, next) => { + }).use(async ({ request }, next) => { + await this.restored; + request.headers = { ...request.headers, 'Strapi-Response-Format': 'v4' diff --git a/wrapper/Strapi/source/index.ts b/wrapper/Strapi/source/index.ts index eb25b7d..ee0f7e0 100644 --- a/wrapper/Strapi/source/index.ts +++ b/wrapper/Strapi/source/index.ts @@ -1,4 +1,4 @@ -import { IndexKey, TypeKeys } from 'web-utility'; +import { AbstractClass, IndexKey, TypeKeys } from 'web-utility'; import { stringify } from 'qs'; import { computed, observable } from 'mobx'; import { @@ -9,6 +9,7 @@ import { ListModel, toggle } from 'mobx-restful'; + import { Base } from './Session'; export * from './Session'; @@ -66,10 +67,9 @@ export type StrapiFilterOperator = | '$not'; export type StrapiFilterValue = Record; -export type StrapiFilter = Record< - string, - StrapiFilterValue | Record ->; +export type StrapiFilter = + | Record> + | Partial[]>>; export type StrapiPopulateQuery = { [K in TypeKeys]?: { @@ -92,24 +92,6 @@ export abstract class StrapiListModel< populate: StrapiPopulateQuery = {}; - searchKeys: readonly TypeKeys[] = []; - - @observable - accessor keywords = ''; - - @computed - get searchFilter() { - const words = this.keywords.split(/\s+/); - - type OrFilter = Record, { $containsi: string }>; - - const $or = this.searchKeys - .map(key => words.map(word => ({ [key]: { $containsi: word } }))) - .flat() as OrFilter[]; - - return { $or }; - } - protected normalize({ id, documentId, attributes }: StrapiDataItem) { const data = Object.fromEntries( Object.entries(attributes).map(([key, value]) => [ @@ -140,7 +122,7 @@ export abstract class StrapiListModel< @toggle('uploading') async updateOne(data: NewData, id?: IDType) { const { body } = await (id - ? this.client.patch>(`${this.baseURI}/${id}`, { + ? this.client.put>(`${this.baseURI}/${id}`, { data }) : this.client.post>(this.baseURI, { data })); @@ -149,7 +131,7 @@ export abstract class StrapiListModel< } makeFilter(pageIndex: number, pageSize: number, filter: F) { - const { indexKey, operator, populate, keywords } = this; + const { indexKey, operator, populate } = this; const filters = Object.fromEntries( Object.entries(filter).map(([key, value]) => [ @@ -160,11 +142,7 @@ export abstract class StrapiListModel< ]) ) as StrapiFilter; - return { - populate, - filters: keywords ? this.searchFilter : filters, - pagination: { page: pageIndex, pageSize } - }; + return { populate, filters, pagination: { page: pageIndex, pageSize } }; } async loadPage(pageIndex: number, pageSize: number, filter: F) { @@ -179,10 +157,61 @@ export abstract class StrapiListModel< totalCount: body!.meta.pagination.total }; } +} - search(keywords: string, pageIndex = 1, pageSize = this.pageSize) { - this.keywords = keywords; +export type SearchableFilter = Filter & { + keywords?: string; +}; - return this.getList({} as F, pageIndex, pageSize); +export function Searchable< + D extends Base, + F extends SearchableFilter = SearchableFilter, + M extends AbstractClass> = AbstractClass< + StrapiListModel + > +>(Super: M) { + abstract class SearchableListMixin extends Super { + abstract searchKeys: readonly TypeKeys[]; + + @observable + accessor keywords = ''; + + @computed + get searchFilter() { + const words = this.keywords.split(/\s+/); + + type OrFilter = Record, { $containsi: string }>; + + const $or = this.searchKeys + .map(key => + words.map(word => ({ [key]: { $containsi: word } })) + ) + .flat() as OrFilter[]; + + return { $or }; + } + + makeFilter(pageIndex: number, pageSize: number, filter: F) { + const { populate, keywords } = this; + + return keywords + ? { + populate, + filters: this.searchFilter, + pagination: { page: pageIndex, pageSize } + } + : super.makeFilter(pageIndex, pageSize, filter); + } + + getList( + { keywords, ...filter }: F, + pageIndex = 1, + pageSize = this.pageSize + ) { + if (keywords) this.keywords = keywords; + + return this.getList(filter as F, pageIndex, pageSize); + } } + return SearchableListMixin; }