feat: add solid-js support

This commit is contained in:
master 2025-03-01 23:22:02 +08:00
parent 3aabcd6442
commit dff1e1f9a6
11 changed files with 533 additions and 64 deletions

View File

@ -7,11 +7,11 @@ import {
provideAuth,
withDefaultFeatures,
} from 'oidc-client-rx';
import { withTanstackRouter } from 'oidc-client-rx/adapters/@tanstack/react-router';
import {
InjectorContextVoidInjector,
InjectorProvider,
} from 'oidc-client-rx/adapters/react';
import { withTanstackRouter } from 'oidc-client-rx/adapters/tanstack-router';
import React from 'react';
import ReactDOM from 'react-dom/client';
import { routeTree } from './routeTree.gen';

View File

@ -1,6 +1,6 @@
{
"name": "oidc-client-rx",
"version": "0.1.0-alpha.6",
"version": "0.1.0-alpha.7",
"homepage": "https://github.com/lonelyhentxi/oidc-client-rx",
"author": "lonelyhentxi",
"description": "ReactiveX enhanced OIDC and OAuth2 protocol support for browser-based JavaScript applications",
@ -23,10 +23,20 @@
"import": "./dist/adapters/react/index.js",
"require": "./dist/adapters/react.cjs"
},
"./adapters/tanstack-router": {
"types": "./dist/adapters/tanstack-router/index.d.ts",
"import": "./dist/adapters/tanstack-router/index.js",
"require": "./dist/adapters/tanstack-router.cjs"
"./adapters/solid-js": {
"types": "./dist/adapters/solid-js/index.d.ts",
"import": "./dist/adapters/solid-js/index.js",
"require": "./dist/adapters/solid-js.cjs"
},
"./adapters/@tanstack/react-router": {
"types": "./dist/adapters/@tanstack/react-router.d.ts",
"import": "./dist/adapters/@tanstack/react-router.js",
"require": "./dist/adapters/@tanstack/react-router.cjs"
},
"./adapters/@tanstack/solid-router": {
"types": "./dist/adapters/@tanstack/solid-router.d.ts",
"import": "./dist/adapters/@tanstack/solid-router.js",
"require": "./dist/adapters/@tanstack/solid-router.cjs"
}
},
"main": "./dist/index.cjs",
@ -50,8 +60,10 @@
},
"peerDependencies": {
"@tanstack/react-router": "*",
"@tanstack/solid-router": "*",
"react": ">=16.8.0",
"rxjs": "^7.4.0||>=8.0.0"
"rxjs": "^7.4.0||>=8.0.0",
"solid-js": "^1"
},
"devDependencies": {
"@biomejs/biome": "1.9.4",
@ -60,7 +72,8 @@
"@playwright/test": "^1.49.1",
"@rslib/core": "^0.5.0",
"@swc/core": "^1.10.12",
"@tanstack/react-router": "^1.99.6",
"@tanstack/react-router": "^1.112.11",
"@tanstack/solid-router": "^1.112.11",
"@types/lodash-es": "^4.17.12",
"@types/node": "^22.12.0",
"@types/react": "^19.0.8",
@ -68,12 +81,13 @@
"commander": "^13.1.0",
"happy-dom": "^17.1.0",
"lodash-es": "^4.17.21",
"oxc-parser": "^0.48.1",
"oxc-parser": "^0.54.0",
"oxc-walker": "^0.2.2",
"playwright": "^1.50.0",
"react": "^19.0.0",
"reflect-metadata": "^0.2.2",
"rxjs": "^7.4.0",
"solid-js": "^1.9.5",
"tsx": "^4.19.2",
"typescript": "^5.7.3",
"ultracite": "^4.1.15",
@ -87,6 +101,12 @@
},
"@tanstack/react-router": {
"optional": true
},
"@tanstack/solid-router": {
"optional": true
},
"solid-js": {
"optional": true
}
},
"keywords": [

399
pnpm-lock.yaml generated
View File

@ -37,8 +37,11 @@ importers:
specifier: ^1.10.12
version: 1.10.12(@swc/helpers@0.5.15)
'@tanstack/react-router':
specifier: ^1.99.6
version: 1.99.6(react-dom@19.0.0(react@19.0.0))(react@19.0.0)
specifier: ^1.112.11
version: 1.112.11(react-dom@19.0.0(react@19.0.0))(react@19.0.0)
'@tanstack/solid-router':
specifier: ^1.112.11
version: 1.112.11(solid-js@1.9.5)
'@types/lodash-es':
specifier: ^4.17.12
version: 4.17.12
@ -61,11 +64,11 @@ importers:
specifier: ^4.17.21
version: 4.17.21
oxc-parser:
specifier: ^0.48.1
version: 0.48.1
specifier: ^0.54.0
version: 0.54.0
oxc-walker:
specifier: ^0.2.2
version: 0.2.2(oxc-parser@0.48.1)
version: 0.2.2(oxc-parser@0.54.0)
playwright:
specifier: ^1.50.0
version: 1.50.0
@ -78,6 +81,9 @@ importers:
rxjs:
specifier: ^7.4.0
version: 7.8.1
solid-js:
specifier: ^1.9.5
version: 1.9.5
tsx:
specifier: ^4.19.2
version: 4.19.2
@ -821,6 +827,9 @@ packages:
resolution: {integrity: sha512-oGB+UxlgWcgQkgwo8GcEGwemoTFt3FIO9ababBmaGwXIoBKZ+GTy0pP185beGg7Llih/NSHSV2XAs1lnznocSg==}
engines: {node: '>= 8'}
'@nothing-but/utils@0.17.0':
resolution: {integrity: sha512-TuCHcHLOqDL0SnaAxACfuRHBNRgNJcNn9X0GiH5H3YSDBVquCr3qEIG3FOQAuMyZCbu9w8nk2CHhOsn7IvhIwQ==}
'@open-draft/deferred-promise@2.2.0':
resolution: {integrity: sha512-CecwLWx3rhxVQF6V4bAgPS5t+So2sTbPgAzafKkVizyi7tlwpcFpdFqq+wqF2OwNBmqFuu6tOyouTuxgpMfzmA==}
@ -833,48 +842,48 @@ packages:
'@outposts/injection-js@2.5.1':
resolution: {integrity: sha512-f2HCfEM9k7WqLw5Bs2Sh2rWrwuuQFE3c5yKueQfO4WAnJBvlC6tU0JWSG1j8A7NsEfcdUtMVmIzGIRIHo7ALPw==}
'@oxc-parser/binding-darwin-arm64@0.48.1':
resolution: {integrity: sha512-qCpCWt+8B1c76KndRgTQmCswsd1Nx+7/8Rm/JCee+tSB+emW/EcJEP5cIHvnUAueqlF0ZUuQ9LQWdPNN2n5SiQ==}
'@oxc-parser/binding-darwin-arm64@0.54.0':
resolution: {integrity: sha512-LiNsE4YZ7UUCvkRvqKSr0ubWvOAyqeCKbqzhBQ4Dvj3EpkORX+MLj8c6/LcFWHtulNS066DvvB9nmd4FkMGeDQ==}
cpu: [arm64]
os: [darwin]
'@oxc-parser/binding-darwin-x64@0.48.1':
resolution: {integrity: sha512-Uf2IYgKizJEiUoDi3u6NrQTH6WvNFj0XS3g1KC3/rXdM/UQghTo4dhe1oll/NdrQ5i/EuY0qRwdOxPdxHr50pQ==}
'@oxc-parser/binding-darwin-x64@0.54.0':
resolution: {integrity: sha512-sMoLDWK636eNkhxxu8Zfpgh1m64B68hU+D3qPOopzO9sMri2Xd+/Qy4AIe2CiQMTLf6Sb4+jTeqYqRrR8cgsPg==}
cpu: [x64]
os: [darwin]
'@oxc-parser/binding-linux-arm64-gnu@0.48.1':
resolution: {integrity: sha512-5rxOgUkXpp3q988y86HMTk8+Jw8AdILpHzS3MPTptGySXrv/7g41Xp+KVwLzd8FQpu0fMCy9VAzcBMwCe+aojg==}
'@oxc-parser/binding-linux-arm64-gnu@0.54.0':
resolution: {integrity: sha512-TgnttTu46sdbMTDiObIX21okp58qiGaLk/qAPj8NorQHfBKnK9BWaCb0PBfDxeYozRDW4vppPPq4GXQlzhyQ9w==}
cpu: [arm64]
os: [linux]
'@oxc-parser/binding-linux-arm64-musl@0.48.1':
resolution: {integrity: sha512-NqVaud/N3jOJiwt7afrXG+b6guqglPuTIvuQnhmokq0i8q0fQUgmg0/ZdNI5bu941wijmCC+eCg52H5jD1iaHA==}
'@oxc-parser/binding-linux-arm64-musl@0.54.0':
resolution: {integrity: sha512-4J1Uc6vCbWp62fU7XbwPM93QwM/5ZTldbY/iXzyn/qX3+I6QYA2YaFgssO+zelYM0Bdaqpgeq8jeTAyN3HsLpw==}
cpu: [arm64]
os: [linux]
'@oxc-parser/binding-linux-x64-gnu@0.48.1':
resolution: {integrity: sha512-x+THqLaXVwgi6+YxNz9KmxdfIed89UNr1Ez1IsOew/Rg57RcX9XP4rT9fcjAZ9GM3krszkYAVq2KxP471Dgv8g==}
'@oxc-parser/binding-linux-x64-gnu@0.54.0':
resolution: {integrity: sha512-qG5fxcIVIpQefZ71fTPetlr5FQ+MVKsDvC1Ozgy66apNKeWdjV8Aqx1k1yaZiTsENThhxP6zAOTOek398vsBSw==}
cpu: [x64]
os: [linux]
'@oxc-parser/binding-linux-x64-musl@0.48.1':
resolution: {integrity: sha512-m6XDdH6kEQsM3DAOK+jIN9hMAM9bHPQfdw0Ldbg6W1M9S8vvAvz0nQHkLF2ChBBV1HkTjLolK40sR0W6BGCYww==}
'@oxc-parser/binding-linux-x64-musl@0.54.0':
resolution: {integrity: sha512-dcS2iP7hyF2AO6h3UAcC1OemKpElbiZdNW+88dP8fw5KArMWGH/GRNk2r/kBGq2YCETdP8ROlnUXMqGMaY3NEA==}
cpu: [x64]
os: [linux]
'@oxc-parser/binding-win32-arm64-msvc@0.48.1':
resolution: {integrity: sha512-Zxfnuea6THWQiGmnLyJXlpi3bmN0lcWf7QYLVr71ZaTs9S14eOFwHuH2efZ7zcto+a8osysQT9xMDvdIkiqGZA==}
'@oxc-parser/binding-win32-arm64-msvc@0.54.0':
resolution: {integrity: sha512-YiSM4tZYDGVgT3VXFlzZ86NCgp46BdLjCe85Pq/jfPXGFFSA0EU0Xg94jY8F+6w0BO/NjWJ1mEJwjhUzlWRq3Q==}
cpu: [arm64]
os: [win32]
'@oxc-parser/binding-win32-x64-msvc@0.48.1':
resolution: {integrity: sha512-klialzt6wZOzGl2W+tAKPJAGu0vO3iqPGd13+ZY+VCC2xM+EA5/mYuv+NEK1WDFSxlmz/898Puhqk4teCbxZug==}
'@oxc-parser/binding-win32-x64-msvc@0.54.0':
resolution: {integrity: sha512-NqsfN0pCJcB94bHzZtPzyKkeeGKo6U6Qj//lAE88XaZxVMlw58sz77wHIhIo0p9/KuKiMcD5VO2AIGG56AsJfg==}
cpu: [x64]
os: [win32]
'@oxc-project/types@0.48.1':
resolution: {integrity: sha512-/CoLnZmEI+FmpMvF8vOdVpQddt9Me+paM3c56m5jMZ7EMaU1TQFCrNH0JZr1Cwn4wKb/ALY32HPaCtA8dvgkrw==}
'@oxc-project/types@0.54.0':
resolution: {integrity: sha512-Tf0TGE96lQglNMyGKpIxSz7RmPtf410FY93QAD03XN40Rutpq4UsVePYQ9Nia8xb/YYLX9IskhJ7DK8rkcAabQ==}
'@pkgjs/parseargs@0.11.0':
resolution: {integrity: sha512-+1VkjdD0QBLPodGrJUeqarH8VAIvQODIbwh9XpP5Syisf7YoQgsJKPNFoqqLQlu+VQ/tVSshMR6loPMn8U+dPg==}
@ -1182,6 +1191,96 @@ packages:
'@rushstack/ts-command-line@4.23.4':
resolution: {integrity: sha512-pqmzDJCm0TS8VyeqnzcJ7ncwXgiLDQ6LVmXXfqv2nPL6VIz+UpyTpNVfZRJpyyJ+UDxqob1vIj2liaUfBjv8/A==}
'@solid-devtools/debugger@0.26.0':
resolution: {integrity: sha512-36QxZ+s/lY60E+Pb9q0eTsdqgaog4c823WIj5dC2LFdGrGXbVGBQEj6k7CgvMnEETdwndrd0Fm72fQyYPlZrVA==}
peerDependencies:
solid-js: ^1.9.0
'@solid-devtools/logger@0.9.7':
resolution: {integrity: sha512-JHZ0ejkQnRoMcV8bgqogSYFlYdo0wJ1S/vAHEROSHQk1jNtErTXJwLrCXdR+LNuBWhJJ0aq/y7Pjit/ssvKrDw==}
peerDependencies:
solid-js: ^1.9.0
'@solid-devtools/shared@0.19.0':
resolution: {integrity: sha512-OGo6l84f9X5YEAqSEM4Xl94+xKXSqmACMzKWsAqO0BStLBMVL0vIVu286AQk5XkNxn11/EB9wrdkZc9GUzKlxA==}
peerDependencies:
solid-js: ^1.9.0
'@solid-primitives/bounds@0.0.122':
resolution: {integrity: sha512-kUq/IprOdFr/rg2upon5lQGOoTnDAmxQS4ASKK2l+VwoKSctdPwgu/4qJxEITZikL+nB0myYZzBZWptySV0cRg==}
peerDependencies:
solid-js: ^1.6.12
'@solid-primitives/cursor@0.0.115':
resolution: {integrity: sha512-8nEmUN/sacXPChwuJOAi6Yi6VnxthW/Jk8VGvvcF38AenjUvOA6FHI6AkJILuFXjQw1PGxia1YbH/Mn77dPiOA==}
peerDependencies:
solid-js: ^1.6.12
'@solid-primitives/event-listener@2.4.0':
resolution: {integrity: sha512-TSfR1PNTfojFEYGSxSMCnUhXsaYWBo4p+cm73QmWODa9YnaQAk6PB7VjzG2bOT2D817VlvuOqTj0Qdq+MZrdGg==}
peerDependencies:
solid-js: ^1.6.12
'@solid-primitives/keyboard@1.3.0':
resolution: {integrity: sha512-0QX9O3eUaQorNNmXZn8a4efSByayIScVq+iGSwheD7m3SL/ACLM5oZlCNpTPLcemnVVfUPAHFiViEj86XpN5qw==}
peerDependencies:
solid-js: ^1.6.12
'@solid-primitives/media@2.3.0':
resolution: {integrity: sha512-7+C3wfbWnGE/WPoNsqcp/EeOP2aNNB92RCpsWhBth8E5lZo/J+rK6jMb7umVsK0zguT8HBpeXp1pFyFbcsHStA==}
peerDependencies:
solid-js: ^1.6.12
'@solid-primitives/platform@0.1.2':
resolution: {integrity: sha512-sSxcZfuUrtxcwV0vdjmGnZQcflACzMfLriVeIIWXKp8hzaS3Or3tO6EFQkTd3L8T5dTq+kTtLvPscXIpL0Wzdg==}
peerDependencies:
solid-js: ^1.6.12
'@solid-primitives/refs@1.1.0':
resolution: {integrity: sha512-QJ3bTSQOlPdHBP2m6llrT13FvVzAwZfx41lTN8lQrRwwcZoWb7kfCAjhaohPnwkAsQ6nJpLjtGfT5GOyuCA4tA==}
peerDependencies:
solid-js: ^1.6.12
'@solid-primitives/resize-observer@2.1.0':
resolution: {integrity: sha512-tO9MDAc2pNjpcRd5B8LWbiR1qzIgvGZ5BtTuO98N7CLwd+fnuyGwtlQtJpz5hcLcTnoawpQYLpiRGNgaYW+YzQ==}
peerDependencies:
solid-js: ^1.6.12
'@solid-primitives/rootless@1.5.0':
resolution: {integrity: sha512-YJ+EveQeDv9DLqfDKfsPAAGy2x3vBruoD23yn+nD2dT84QjoBxWT1T0qA0TMFjek6/xuN3flqnHtQ4r++4zdjg==}
peerDependencies:
solid-js: ^1.6.12
'@solid-primitives/scheduled@1.5.0':
resolution: {integrity: sha512-RVw24IRNh1FQ4DCMb3OahB70tXIwc5vH8nhR4nNPsXwUPQeuOkLsDI5BlxaPk0vyZgqw9lDpufgI3HnPwplgDw==}
peerDependencies:
solid-js: ^1.6.12
'@solid-primitives/static-store@0.0.8':
resolution: {integrity: sha512-ZecE4BqY0oBk0YG00nzaAWO5Mjcny8Fc06CdbXadH9T9lzq/9GefqcSe/5AtdXqjvY/DtJ5C6CkcjPZO0o/eqg==}
peerDependencies:
solid-js: ^1.6.12
'@solid-primitives/static-store@0.1.0':
resolution: {integrity: sha512-6Coau0Kv/dF83UQpbBzc+gnJafOQAPe2jCbB4jmTK5UocsR5cWmFBVRm3kin+nZFVaO4WkuELw0cKANWgTVh8Q==}
peerDependencies:
solid-js: ^1.6.12
'@solid-primitives/styles@0.0.114':
resolution: {integrity: sha512-SFXr16mgr6LvZAIj6L7i59HHg+prAmIF8VP/U3C6jSHz68Eh1G71vaWr9vlJVpy/j6bh1N8QUzu5CgtvIC92OQ==}
peerDependencies:
solid-js: ^1.6.12
'@solid-primitives/utils@6.3.0':
resolution: {integrity: sha512-e7hTlJ1Ywh2+g/Qug+n4L1mpfxsikoIS4/sHE2EK9WatQt8UJqop/vE6bsLnXlU1xuhb/jo94Ah5Y27rd4wP7A==}
peerDependencies:
solid-js: ^1.6.12
'@solidjs/meta@0.29.4':
resolution: {integrity: sha512-zdIWBGpR9zGx1p1bzIPqF5Gs+Ks/BH8R6fWhmUa/dcK1L2rUC8BAcZJzNRYBQv74kScf1TSOs0EY//Vd/I0V8g==}
peerDependencies:
solid-js: '>=1.8.4'
'@swc/core-darwin-arm64@1.10.12':
resolution: {integrity: sha512-pOANQegUTAriW7jq3SSMZGM5l89yLVMs48R0F2UG6UZsH04SiViCnDctOGlA/Sa++25C+rL9MGMYM1jDLylBbg==}
engines: {node: '>=10'}
@ -1260,10 +1359,21 @@ packages:
'@swc/types@0.1.17':
resolution: {integrity: sha512-V5gRru+aD8YVyCOMAjMpWR1Ui577DD5KSJsHP8RAxopAH22jFz6GZd/qxqjO6MJHQhcsjvjOFXyDhyLQUnMveQ==}
'@tanstack/history@1.112.8':
resolution: {integrity: sha512-+EPOvUtnA3PnIBF2oUhggdy7UrVimLZd1SpULhV1UiesNgKtmLjArO7ZdGPrRq7pRXhc8V0ZAWTI9vfplhZfeA==}
engines: {node: '>=12'}
'@tanstack/history@1.99.0':
resolution: {integrity: sha512-MQS1Lg8D+1vpasEJKf4zs1sxhxbXcoejmVCZDbo0bq2wq+xVK+kRixj5Pae2kb2APzdXYga4u236GBbgCKTcnQ==}
engines: {node: '>=12'}
'@tanstack/react-router@1.112.11':
resolution: {integrity: sha512-UfCaLOL8uMn1uhuk8NCUQ4xYoyFdDLSGrP4BdemYeOsgDuTCIGfZeN9e+fk0CCgsXCCVIweeBsarvkVP8KofGA==}
engines: {node: '>=12'}
peerDependencies:
react: '>=18.0.0 || >=19.0.0'
react-dom: '>=18.0.0 || >=19.0.0'
'@tanstack/react-router@1.99.6':
resolution: {integrity: sha512-mH4wkW2h4uILKsCB4qxJWZ8LtVlxvDzZXnXmb5FuAigdTN2qsQhgpxM1bxecII1cDQMjqq8bZvqYw/62MZ5elg==}
engines: {node: '>=12'}
@ -1277,6 +1387,10 @@ packages:
react: ^16.8.0 || ^17.0.0 || ^18.0.0 || ^19.0.0
react-dom: ^16.8.0 || ^17.0.0 || ^18.0.0 || ^19.0.0
'@tanstack/router-core@1.112.8':
resolution: {integrity: sha512-IaCWqePzsUQWMAhtQObnM4dmFSxUEzH94jAjBiMGD/FfwMjojFNOzuLe4HG1rGCAbF2M9Q1HjdzHzG0BptjDsQ==}
engines: {node: '>=12'}
'@tanstack/router-core@1.99.6':
resolution: {integrity: sha512-tEfMLeONfyoyI1e/ygUeGFtTWeWQu0GR3OT8OR75EOeNXRmUEtI6H4ThrXcV8nwBd6B88wmp9LhSPLl9H2VwSA==}
engines: {node: '>=12'}
@ -1320,6 +1434,17 @@ packages:
resolution: {integrity: sha512-weYNg+aqXX1aZkcD7nOkjymtJiLgyp5A1Gtg6Ey0ttIaAlL3NuLlwX9z0CCnCLb3AGxGL4OgdZ2xVbH/DVaURQ==}
engines: {node: '>=12'}
'@tanstack/solid-router@1.112.11':
resolution: {integrity: sha512-de2B3bWeXO3SZ8uG6w74HWHaZpO3vRoSIizXc797pmMzGlkUFaxYeGidBXjnm/SnuEFr7VxKFHiEqCD92t2Uew==}
engines: {node: '>=12'}
peerDependencies:
solid-js: ^1.9.5
'@tanstack/solid-store@0.7.0':
resolution: {integrity: sha512-uDQYkUuH3MppitiduZLTEcItkTr8vEJ33jzp2rH2VvlNRMGbuU54GQcqf3dLIlTbZ1/Z2TtIBtBjjl+N/OhwRg==}
peerDependencies:
solid-js: ^1.6.0
'@tanstack/store@0.7.0':
resolution: {integrity: sha512-CNIhdoUsmD2NolYuaIs8VfWM467RK6oIBAW4nPEKZhg1smZ+/CwtCdpURgp7nxSqOaV9oKkzdWD80+bC66F/Jg==}
@ -2541,8 +2666,8 @@ packages:
outvariant@1.4.3:
resolution: {integrity: sha512-+Sl2UErvtsoajRDKCE5/dBz4DIvHXQQnAxtQTF04OJxY0+DyZXSo5P5Bb7XYWOh81syohlYL24hbDwxedPUJCA==}
oxc-parser@0.48.1:
resolution: {integrity: sha512-06Y1yBSlUP5j7wdcyLdjXUe3kBw1QYu7E4vowi59IcwZ7jc/iUCMXxqnSoJLdqex3fZAjCnuzW7/gPi3h5bumA==}
oxc-parser@0.54.0:
resolution: {integrity: sha512-nYqnBdqWL/yOJayDoSe8a/twaaersgXKOwypR9XuSf6gbzsI+aGDm8gg9vn1p+GcRN8P+Z3erTHjUdAvuUhfHQ==}
oxc-walker@0.2.2:
resolution: {integrity: sha512-beQrIxhRrJigGgct4HJ2UtZv8HHA5553rAhD5rydHPPfLHnVzxEHNRiop8VU3zmhL6COMq4XxLVHnTMXiwNGxQ==}
@ -2868,6 +2993,16 @@ packages:
resolution: {integrity: sha512-2G2y++21dhj2R7iHAdd0FIzjGwuKZld+7Pl/bTU6YIkrC2ZMbVUjm+luj6A6V34Rv9XfKJDKpTWu9W4Gse1D9g==}
engines: {node: '>=14.16'}
seroval-plugins@1.2.1:
resolution: {integrity: sha512-H5vs53+39+x4Udwp4J5rNZfgFuA+Lt+uU+09w1gYBVWomtAl98B+E9w7yC05Xc81/HgLvJdlyqJbU0fJCKCmdw==}
engines: {node: '>=10'}
peerDependencies:
seroval: ^1.0
seroval@1.2.1:
resolution: {integrity: sha512-yBxFFs3zmkvKNmR0pFSU//rIsYjuX418TnlDmc2weaq5XFDqDIV/NOMPBoLrbxjLH42p4UzRuXHryXh9dYcKcw==}
engines: {node: '>=10'}
setimmediate@1.0.5:
resolution: {integrity: sha512-MATJdZp8sLqDl/68LfQmbP8zKPLQNV6BIZoIgrscFDQ+RsvK/BxeDQOgyxKKoh0y/8h3BqVFnCqQ/gd+reiIXA==}
@ -2902,6 +3037,9 @@ packages:
resolution: {integrity: sha512-l5x7VUUWbjVFbafGLxPWkYsHIhEvmF85tbIeFZWc8ZPtoMyybuEhL7Jye/ooC4/d48FgOjSJXgsF/AJPYCW8Zw==}
engines: {node: '>= 10.0.0', npm: '>= 3.0.0'}
solid-js@1.9.5:
resolution: {integrity: sha512-ogI3DaFcyn6UhYhrgcyRAMbu/buBJitYQASZz5WzfQVPP10RD2AbCoRZ517psnezrasyCbWzIxZ6kVqet768xw==}
source-map-js@1.2.1:
resolution: {integrity: sha512-UXWMKhLOwVKb728IUtQPXxfYU+usdybtUrK/8uGE8CQMvrhOpwvzDBwj0QhSL7MQc7vIsISBG8VQ8+IDQxpfQA==}
engines: {node: '>=0.10.0'}
@ -3983,6 +4121,8 @@ snapshots:
'@nodelib/fs.scandir': 2.1.5
fastq: 1.19.0
'@nothing-but/utils@0.17.0': {}
'@open-draft/deferred-promise@2.2.0':
optional: true
@ -3999,31 +4139,31 @@ snapshots:
dependencies:
tslib: 2.8.1
'@oxc-parser/binding-darwin-arm64@0.48.1':
'@oxc-parser/binding-darwin-arm64@0.54.0':
optional: true
'@oxc-parser/binding-darwin-x64@0.48.1':
'@oxc-parser/binding-darwin-x64@0.54.0':
optional: true
'@oxc-parser/binding-linux-arm64-gnu@0.48.1':
'@oxc-parser/binding-linux-arm64-gnu@0.54.0':
optional: true
'@oxc-parser/binding-linux-arm64-musl@0.48.1':
'@oxc-parser/binding-linux-arm64-musl@0.54.0':
optional: true
'@oxc-parser/binding-linux-x64-gnu@0.48.1':
'@oxc-parser/binding-linux-x64-gnu@0.54.0':
optional: true
'@oxc-parser/binding-linux-x64-musl@0.48.1':
'@oxc-parser/binding-linux-x64-musl@0.54.0':
optional: true
'@oxc-parser/binding-win32-arm64-msvc@0.48.1':
'@oxc-parser/binding-win32-arm64-msvc@0.54.0':
optional: true
'@oxc-parser/binding-win32-x64-msvc@0.48.1':
'@oxc-parser/binding-win32-x64-msvc@0.54.0':
optional: true
'@oxc-project/types@0.48.1': {}
'@oxc-project/types@0.54.0': {}
'@pkgjs/parseargs@0.11.0':
optional: true
@ -4298,6 +4438,125 @@ snapshots:
- '@types/node'
optional: true
'@solid-devtools/debugger@0.26.0(solid-js@1.9.5)':
dependencies:
'@nothing-but/utils': 0.17.0
'@solid-devtools/shared': 0.19.0(solid-js@1.9.5)
'@solid-primitives/bounds': 0.0.122(solid-js@1.9.5)
'@solid-primitives/cursor': 0.0.115(solid-js@1.9.5)
'@solid-primitives/event-listener': 2.4.0(solid-js@1.9.5)
'@solid-primitives/keyboard': 1.3.0(solid-js@1.9.5)
'@solid-primitives/platform': 0.1.2(solid-js@1.9.5)
'@solid-primitives/rootless': 1.5.0(solid-js@1.9.5)
'@solid-primitives/scheduled': 1.5.0(solid-js@1.9.5)
'@solid-primitives/static-store': 0.0.8(solid-js@1.9.5)
'@solid-primitives/utils': 6.3.0(solid-js@1.9.5)
solid-js: 1.9.5
'@solid-devtools/logger@0.9.7(solid-js@1.9.5)':
dependencies:
'@nothing-but/utils': 0.17.0
'@solid-devtools/debugger': 0.26.0(solid-js@1.9.5)
'@solid-devtools/shared': 0.19.0(solid-js@1.9.5)
'@solid-primitives/utils': 6.3.0(solid-js@1.9.5)
solid-js: 1.9.5
'@solid-devtools/shared@0.19.0(solid-js@1.9.5)':
dependencies:
'@nothing-but/utils': 0.17.0
'@solid-primitives/event-listener': 2.4.0(solid-js@1.9.5)
'@solid-primitives/media': 2.3.0(solid-js@1.9.5)
'@solid-primitives/refs': 1.1.0(solid-js@1.9.5)
'@solid-primitives/rootless': 1.5.0(solid-js@1.9.5)
'@solid-primitives/scheduled': 1.5.0(solid-js@1.9.5)
'@solid-primitives/static-store': 0.0.8(solid-js@1.9.5)
'@solid-primitives/styles': 0.0.114(solid-js@1.9.5)
'@solid-primitives/utils': 6.3.0(solid-js@1.9.5)
solid-js: 1.9.5
'@solid-primitives/bounds@0.0.122(solid-js@1.9.5)':
dependencies:
'@solid-primitives/event-listener': 2.4.0(solid-js@1.9.5)
'@solid-primitives/resize-observer': 2.1.0(solid-js@1.9.5)
'@solid-primitives/static-store': 0.0.8(solid-js@1.9.5)
'@solid-primitives/utils': 6.3.0(solid-js@1.9.5)
solid-js: 1.9.5
'@solid-primitives/cursor@0.0.115(solid-js@1.9.5)':
dependencies:
'@solid-primitives/utils': 6.3.0(solid-js@1.9.5)
solid-js: 1.9.5
'@solid-primitives/event-listener@2.4.0(solid-js@1.9.5)':
dependencies:
'@solid-primitives/utils': 6.3.0(solid-js@1.9.5)
solid-js: 1.9.5
'@solid-primitives/keyboard@1.3.0(solid-js@1.9.5)':
dependencies:
'@solid-primitives/event-listener': 2.4.0(solid-js@1.9.5)
'@solid-primitives/rootless': 1.5.0(solid-js@1.9.5)
'@solid-primitives/utils': 6.3.0(solid-js@1.9.5)
solid-js: 1.9.5
'@solid-primitives/media@2.3.0(solid-js@1.9.5)':
dependencies:
'@solid-primitives/event-listener': 2.4.0(solid-js@1.9.5)
'@solid-primitives/rootless': 1.5.0(solid-js@1.9.5)
'@solid-primitives/static-store': 0.1.0(solid-js@1.9.5)
'@solid-primitives/utils': 6.3.0(solid-js@1.9.5)
solid-js: 1.9.5
'@solid-primitives/platform@0.1.2(solid-js@1.9.5)':
dependencies:
solid-js: 1.9.5
'@solid-primitives/refs@1.1.0(solid-js@1.9.5)':
dependencies:
'@solid-primitives/utils': 6.3.0(solid-js@1.9.5)
solid-js: 1.9.5
'@solid-primitives/resize-observer@2.1.0(solid-js@1.9.5)':
dependencies:
'@solid-primitives/event-listener': 2.4.0(solid-js@1.9.5)
'@solid-primitives/rootless': 1.5.0(solid-js@1.9.5)
'@solid-primitives/static-store': 0.1.0(solid-js@1.9.5)
'@solid-primitives/utils': 6.3.0(solid-js@1.9.5)
solid-js: 1.9.5
'@solid-primitives/rootless@1.5.0(solid-js@1.9.5)':
dependencies:
'@solid-primitives/utils': 6.3.0(solid-js@1.9.5)
solid-js: 1.9.5
'@solid-primitives/scheduled@1.5.0(solid-js@1.9.5)':
dependencies:
solid-js: 1.9.5
'@solid-primitives/static-store@0.0.8(solid-js@1.9.5)':
dependencies:
'@solid-primitives/utils': 6.3.0(solid-js@1.9.5)
solid-js: 1.9.5
'@solid-primitives/static-store@0.1.0(solid-js@1.9.5)':
dependencies:
'@solid-primitives/utils': 6.3.0(solid-js@1.9.5)
solid-js: 1.9.5
'@solid-primitives/styles@0.0.114(solid-js@1.9.5)':
dependencies:
'@solid-primitives/rootless': 1.5.0(solid-js@1.9.5)
'@solid-primitives/utils': 6.3.0(solid-js@1.9.5)
solid-js: 1.9.5
'@solid-primitives/utils@6.3.0(solid-js@1.9.5)':
dependencies:
solid-js: 1.9.5
'@solidjs/meta@0.29.4(solid-js@1.9.5)':
dependencies:
solid-js: 1.9.5
'@swc/core-darwin-arm64@1.10.12':
optional: true
@ -4355,8 +4614,21 @@ snapshots:
dependencies:
'@swc/counter': 0.1.3
'@tanstack/history@1.112.8': {}
'@tanstack/history@1.99.0': {}
'@tanstack/react-router@1.112.11(react-dom@19.0.0(react@19.0.0))(react@19.0.0)':
dependencies:
'@tanstack/history': 1.112.8
'@tanstack/react-store': 0.7.0(react-dom@19.0.0(react@19.0.0))(react@19.0.0)
'@tanstack/router-core': 1.112.8
jsesc: 3.1.0
react: 19.0.0
react-dom: 19.0.0(react@19.0.0)
tiny-invariant: 1.3.3
tiny-warning: 1.0.3
'@tanstack/react-router@1.99.6(react-dom@19.0.0(react@19.0.0))(react@19.0.0)':
dependencies:
'@tanstack/history': 1.99.0
@ -4375,6 +4647,11 @@ snapshots:
react-dom: 19.0.0(react@19.0.0)
use-sync-external-store: 1.4.0(react@19.0.0)
'@tanstack/router-core@1.112.8':
dependencies:
'@tanstack/history': 1.112.8
'@tanstack/store': 0.7.0
'@tanstack/router-core@1.99.6':
dependencies:
'@tanstack/history': 1.99.0
@ -4431,6 +4708,24 @@ snapshots:
ansis: 3.10.0
diff: 7.0.0
'@tanstack/solid-router@1.112.11(solid-js@1.9.5)':
dependencies:
'@solid-devtools/logger': 0.9.7(solid-js@1.9.5)
'@solid-primitives/refs': 1.1.0(solid-js@1.9.5)
'@solidjs/meta': 0.29.4(solid-js@1.9.5)
'@tanstack/history': 1.112.8
'@tanstack/router-core': 1.112.8
'@tanstack/solid-store': 0.7.0(solid-js@1.9.5)
jsesc: 3.1.0
solid-js: 1.9.5
tiny-invariant: 1.3.3
tiny-warning: 1.0.3
'@tanstack/solid-store@0.7.0(solid-js@1.9.5)':
dependencies:
'@tanstack/store': 0.7.0
solid-js: 1.9.5
'@tanstack/store@0.7.0': {}
'@tanstack/virtual-file-routes@1.99.0': {}
@ -5885,24 +6180,24 @@ snapshots:
outvariant@1.4.3:
optional: true
oxc-parser@0.48.1:
oxc-parser@0.54.0:
dependencies:
'@oxc-project/types': 0.48.1
'@oxc-project/types': 0.54.0
optionalDependencies:
'@oxc-parser/binding-darwin-arm64': 0.48.1
'@oxc-parser/binding-darwin-x64': 0.48.1
'@oxc-parser/binding-linux-arm64-gnu': 0.48.1
'@oxc-parser/binding-linux-arm64-musl': 0.48.1
'@oxc-parser/binding-linux-x64-gnu': 0.48.1
'@oxc-parser/binding-linux-x64-musl': 0.48.1
'@oxc-parser/binding-win32-arm64-msvc': 0.48.1
'@oxc-parser/binding-win32-x64-msvc': 0.48.1
'@oxc-parser/binding-darwin-arm64': 0.54.0
'@oxc-parser/binding-darwin-x64': 0.54.0
'@oxc-parser/binding-linux-arm64-gnu': 0.54.0
'@oxc-parser/binding-linux-arm64-musl': 0.54.0
'@oxc-parser/binding-linux-x64-gnu': 0.54.0
'@oxc-parser/binding-linux-x64-musl': 0.54.0
'@oxc-parser/binding-win32-arm64-msvc': 0.54.0
'@oxc-parser/binding-win32-x64-msvc': 0.54.0
oxc-walker@0.2.2(oxc-parser@0.48.1):
oxc-walker@0.2.2(oxc-parser@0.54.0):
dependencies:
estree-walker: 3.0.3
magic-regexp: 0.8.0
oxc-parser: 0.48.1
oxc-parser: 0.54.0
pac-proxy-agent@7.1.0:
dependencies:
@ -6254,6 +6549,12 @@ snapshots:
type-fest: 2.19.0
optional: true
seroval-plugins@1.2.1(seroval@1.2.1):
dependencies:
seroval: 1.2.1
seroval@1.2.1: {}
setimmediate@1.0.5:
optional: true
@ -6292,6 +6593,12 @@ snapshots:
smart-buffer: 4.2.0
optional: true
solid-js@1.9.5:
dependencies:
csstype: 3.1.3
seroval: 1.2.1
seroval-plugins: 1.2.1(seroval@1.2.1)
source-map-js@1.2.1: {}
source-map@0.6.1:

View File

@ -24,7 +24,11 @@ export default defineConfig({
entry: {
index: './src/index.ts',
'adapters/react': './src/adapters/react/index.ts',
'adapters/tanstack-router': './src/adapters/tanstack-router/index.ts',
'adapters/solid-js': './src/adapters/solid-js/index.ts',
'adapters/@tanstack/react-router':
'./src/adapters/@tanstack/react-router.ts',
'adapters/@tanstack/solid-router':
'./src/adapters/@tanstack/solid-router.ts',
},
},
},

View File

@ -0,0 +1,41 @@
import { InjectionToken, inject } from '@outposts/injection-js';
import type { AnyRouter } from '@tanstack/solid-router';
import type { AuthFeature } from '../../features';
import { AbstractRouter, ROUTER_ABS_PATH_PATTERN } from '../../router';
export type TanStackRouter = AnyRouter;
export const TANSTACK_ROUTER = new InjectionToken<TanStackRouter>(
'TANSTACK_ROUTER'
);
export class TanStackRouterAdapter implements AbstractRouter<string> {
private router = inject(TANSTACK_ROUTER);
navigateByUrl(url: string): void {
this.router.navigate({
href: ROUTER_ABS_PATH_PATTERN.test(url) ? url : `/${url}`,
});
}
getCurrentNavigation() {
return {
extractedUrl: this.router.state.location.href,
};
}
}
export function withTanstackRouter(router: TanStackRouter): AuthFeature {
return {
ɵproviders: [
{
provide: TANSTACK_ROUTER,
useValue: router,
},
{
provide: AbstractRouter,
useClass: TanStackRouterAdapter,
},
],
};
}

View File

@ -6,7 +6,7 @@ import {
useContext,
useMemo,
} from 'react';
import { OidcSecurityService } from '../..';
import { OidcSecurityService } from '../../oidc.security.service';
export const InjectorContextVoidInjector: Injector = {
get: <T>(_token: Type<T> | InjectionToken<T>, _notFoundValue?: T): T => {

View File

@ -0,0 +1,44 @@
import type { InjectionToken, Injector, Type } from '@outposts/injection-js';
import {
type ParentProps,
createContext,
createMemo,
mergeProps,
splitProps,
useContext,
} from 'solid-js';
import h from 'solid-js/h';
import { OidcSecurityService } from '../../oidc.security.service';
export const InjectorContextVoidInjector: Injector = {
get: <T>(_token: Type<T> | InjectionToken<T>, _notFoundValue?: T): T => {
throw new Error('Please wrap with a InjectorContext.Provider first');
},
};
export const InjectorContext = createContext<Injector>(
InjectorContextVoidInjector
);
export function InjectorProvider(props: ParentProps<{ injector: Injector }>) {
const [local, others] = splitProps(props, ['children', 'injector']);
const providerProps = mergeProps(others, { value: local.injector });
return h(InjectorContext.Provider, providerProps, local.children);
}
export function useInjector() {
return useContext(InjectorContext);
}
export function useOidcClient() {
const injector = useInjector();
const oidcSecurityService = createMemo(() =>
injector.get(OidcSecurityService)
);
return {
injector,
oidcSecurityService,
};
}

View File

@ -1,16 +1,16 @@
import type { HttpFeature } from '@ngify/http';
import type { Provider } from '@outposts/injection-js';
import { DOCUMENT } from './dom';
import { provideHttpClient } from './http';
import { DOCUMENT } from '../dom';
import { provideHttpClient } from '../http';
import {
AbstractRouter,
VanillaHistoryRouter,
VanillaLocationRouter,
} from './router';
import { AbstractSecurityStorage } from './storage/abstract-security-storage';
import { DefaultLocalStorageService } from './storage/default-localstorage.service';
import { DefaultSessionStorageService } from './storage/default-sessionstorage.service';
import { PLATFORM_ID } from './utils/platform-provider/platform.provider';
} from '../router';
import { AbstractSecurityStorage } from '../storage/abstract-security-storage';
import { DefaultLocalStorageService } from '../storage/default-localstorage.service';
import { DefaultSessionStorageService } from '../storage/default-sessionstorage.service';
import { PLATFORM_ID } from '../utils/platform-provider/platform.provider';
/**
* A feature to be used with `provideAuth`.

8
src/features/index.ts Normal file
View File

@ -0,0 +1,8 @@
export type * from './core';
export * from './core';
export {
CHECK_AUTH_RESULT_EVENT,
withCheckAuthResultEvent,
type CheckAuthResultEventType,
type WithCheckAuthResultEventProps,
} from './with-check-auth-result-event';

View File

@ -0,0 +1,45 @@
import { InjectionToken, inject } from '@outposts/injection-js';
import { type Observable, filter, shareReplay } from 'rxjs';
import { EventTypes } from '../public-events/event-types';
import { PublicEventsService } from '../public-events/public-events.service';
import type { AuthFeature } from './core';
export type CheckAuthResultEventType =
| { type: EventTypes.CheckingAuthFinished }
| {
type: EventTypes.CheckingAuthFinishedWithError;
value: string;
};
export const CHECK_AUTH_RESULT_EVENT = new InjectionToken<
Observable<CheckAuthResultEventType>
>('CHECK_AUTH_RESULT_EVENT');
export interface WithCheckAuthResultEventProps {
shareReplayCount?: number;
}
export function withCheckAuthResultEvent({
shareReplayCount = 1,
}: WithCheckAuthResultEventProps = {}): AuthFeature {
return {
ɵproviders: [
{
provide: CHECK_AUTH_RESULT_EVENT,
useFactory: () => {
const publishEventService = inject(PublicEventsService);
return publishEventService.registerForEvents().pipe(
filter(
(e) =>
e.type === EventTypes.CheckingAuthFinishedWithError ||
e.type === EventTypes.CheckingAuthFinished
),
shareReplay(shareReplayCount)
);
},
deps: [PublicEventsService],
},
],
};
}