@stackframe/stack-shared 2.8.8 → 2.8.11
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/CHANGELOG.md +14 -0
- package/dist/config/format.d.cts +39 -0
- package/dist/config/format.d.ts +14 -13
- package/dist/config/format.js +147 -206
- package/dist/config/format.js.map +1 -0
- package/dist/config/schema.d.cts +729 -0
- package/dist/config/schema.d.ts +59 -51
- package/dist/config/schema.js +232 -172
- package/dist/config/schema.js.map +1 -0
- package/dist/crud.d.cts +102 -0
- package/dist/crud.d.ts +15 -13
- package/dist/crud.js +83 -128
- package/dist/crud.js.map +1 -0
- package/dist/esm/config/format.js +135 -0
- package/dist/esm/config/format.js.map +1 -0
- package/dist/esm/config/schema.js +201 -0
- package/dist/esm/config/schema.js.map +1 -0
- package/dist/esm/crud.js +60 -0
- package/dist/esm/crud.js.map +1 -0
- package/dist/esm/global.d.js +1 -0
- package/dist/esm/global.d.js.map +1 -0
- package/dist/esm/helpers/password.js +17 -0
- package/dist/esm/helpers/password.js.map +1 -0
- package/dist/esm/helpers/production-mode.js +50 -0
- package/dist/esm/helpers/production-mode.js.map +1 -0
- package/dist/esm/hooks/use-async-callback.js +38 -0
- package/dist/esm/hooks/use-async-callback.js.map +1 -0
- package/dist/esm/hooks/use-async-external-store.js +23 -0
- package/dist/esm/hooks/use-async-external-store.js.map +1 -0
- package/dist/esm/hooks/use-hash.js +17 -0
- package/dist/esm/hooks/use-hash.js.map +1 -0
- package/dist/esm/hooks/use-strict-memo.js +61 -0
- package/dist/esm/hooks/use-strict-memo.js.map +1 -0
- package/dist/esm/index.js +22 -0
- package/dist/esm/index.js.map +1 -0
- package/dist/esm/interface/adminInterface.js +244 -0
- package/dist/esm/interface/adminInterface.js.map +1 -0
- package/dist/esm/interface/clientInterface.js +2041 -0
- package/dist/esm/interface/clientInterface.js.map +1 -0
- package/dist/esm/interface/crud/contact-channels.js +77 -0
- package/dist/esm/interface/crud/contact-channels.js.map +1 -0
- package/dist/esm/interface/crud/current-user.js +65 -0
- package/dist/esm/interface/crud/current-user.js.map +1 -0
- package/dist/esm/interface/crud/email-templates.js +52 -0
- package/dist/esm/interface/crud/email-templates.js.map +1 -0
- package/dist/esm/interface/crud/emails.js +20 -0
- package/dist/esm/interface/crud/emails.js.map +1 -0
- package/dist/esm/interface/crud/internal-api-keys.js +69 -0
- package/dist/esm/interface/crud/internal-api-keys.js.map +1 -0
- package/dist/esm/interface/crud/oauth.js +24 -0
- package/dist/esm/interface/crud/oauth.js.map +1 -0
- package/dist/esm/interface/crud/project-api-keys.js +93 -0
- package/dist/esm/interface/crud/project-api-keys.js.map +1 -0
- package/dist/esm/interface/crud/project-permissions.js +113 -0
- package/dist/esm/interface/crud/project-permissions.js.map +1 -0
- package/dist/esm/interface/crud/projects.js +180 -0
- package/dist/esm/interface/crud/projects.js.map +1 -0
- package/dist/esm/interface/crud/sessions.js +62 -0
- package/dist/esm/interface/crud/sessions.js.map +1 -0
- package/dist/esm/interface/crud/svix-token.js +22 -0
- package/dist/esm/interface/crud/svix-token.js.map +1 -0
- package/dist/esm/interface/crud/team-invitation-details.js +23 -0
- package/dist/esm/interface/crud/team-invitation-details.js.map +1 -0
- package/dist/esm/interface/crud/team-invitation.js +36 -0
- package/dist/esm/interface/crud/team-invitation.js.map +1 -0
- package/dist/esm/interface/crud/team-member-profiles.js +62 -0
- package/dist/esm/interface/crud/team-member-profiles.js.map +1 -0
- package/dist/esm/interface/crud/team-memberships.js +60 -0
- package/dist/esm/interface/crud/team-memberships.js.map +1 -0
- package/dist/esm/interface/crud/team-permissions.js +114 -0
- package/dist/esm/interface/crud/team-permissions.js.map +1 -0
- package/dist/esm/interface/crud/teams.js +143 -0
- package/dist/esm/interface/crud/teams.js.map +1 -0
- package/dist/esm/interface/crud/users.js +139 -0
- package/dist/esm/interface/crud/users.js.map +1 -0
- package/dist/esm/interface/serverInterface.js +485 -0
- package/dist/esm/interface/serverInterface.js.map +1 -0
- package/dist/esm/interface/webhooks.js +21 -0
- package/dist/esm/interface/webhooks.js.map +1 -0
- package/dist/esm/known-errors.js +1238 -0
- package/dist/esm/known-errors.js.map +1 -0
- package/dist/esm/schema-fields.js +484 -0
- package/dist/esm/schema-fields.js.map +1 -0
- package/dist/esm/sessions.js +168 -0
- package/dist/esm/sessions.js.map +1 -0
- package/dist/esm/utils/api-keys.js +79 -0
- package/dist/esm/utils/api-keys.js.map +1 -0
- package/dist/esm/utils/arrays.js +78 -0
- package/dist/esm/utils/arrays.js.map +1 -0
- package/dist/esm/utils/base64.js +18 -0
- package/dist/esm/utils/base64.js.map +1 -0
- package/dist/esm/utils/booleans.js +12 -0
- package/dist/esm/utils/booleans.js.map +1 -0
- package/dist/esm/utils/browser-compat.js +21 -0
- package/dist/esm/utils/browser-compat.js.map +1 -0
- package/dist/esm/utils/bytes.js +160 -0
- package/dist/esm/utils/bytes.js.map +1 -0
- package/dist/esm/utils/caches.js +167 -0
- package/dist/esm/utils/caches.js.map +1 -0
- package/dist/esm/utils/compile-time.js +11 -0
- package/dist/esm/utils/compile-time.js.map +1 -0
- package/dist/esm/utils/crypto.js +25 -0
- package/dist/esm/utils/crypto.js.map +1 -0
- package/dist/esm/utils/dates.js +64 -0
- package/dist/esm/utils/dates.js.map +1 -0
- package/dist/esm/utils/dom.js +11 -0
- package/dist/esm/utils/dom.js.map +1 -0
- package/dist/esm/utils/env.js +58 -0
- package/dist/esm/utils/env.js.map +1 -0
- package/dist/esm/utils/errors.js +174 -0
- package/dist/esm/utils/errors.js.map +1 -0
- package/dist/esm/utils/fs.js +37 -0
- package/dist/esm/utils/fs.js.map +1 -0
- package/dist/esm/utils/functions.js +12 -0
- package/dist/esm/utils/functions.js.map +1 -0
- package/dist/esm/utils/geo.js +15 -0
- package/dist/esm/utils/geo.js.map +1 -0
- package/dist/esm/utils/globals.js +18 -0
- package/dist/esm/utils/globals.js.map +1 -0
- package/dist/esm/utils/hashes.js +55 -0
- package/dist/esm/utils/hashes.js.map +1 -0
- package/dist/esm/utils/html.js +13 -0
- package/dist/esm/utils/html.js.map +1 -0
- package/dist/esm/utils/http.js +60 -0
- package/dist/esm/utils/http.js.map +1 -0
- package/dist/esm/utils/ips.js +15 -0
- package/dist/esm/utils/ips.js.map +1 -0
- package/dist/esm/utils/json.js +31 -0
- package/dist/esm/utils/json.js.map +1 -0
- package/dist/esm/utils/jwt.js +87 -0
- package/dist/esm/utils/jwt.js.map +1 -0
- package/dist/esm/utils/locks.js +57 -0
- package/dist/esm/utils/locks.js.map +1 -0
- package/dist/esm/utils/maps.js +181 -0
- package/dist/esm/utils/maps.js.map +1 -0
- package/dist/esm/utils/math.js +8 -0
- package/dist/esm/utils/math.js.map +1 -0
- package/dist/esm/utils/node-http.js +42 -0
- package/dist/esm/utils/node-http.js.map +1 -0
- package/dist/esm/utils/numbers.js +32 -0
- package/dist/esm/utils/numbers.js.map +1 -0
- package/dist/esm/utils/oauth.js +10 -0
- package/dist/esm/utils/oauth.js.map +1 -0
- package/dist/esm/utils/objects.js +177 -0
- package/dist/esm/utils/objects.js.map +1 -0
- package/dist/esm/utils/passkey.js +1 -0
- package/dist/esm/utils/passkey.js.map +1 -0
- package/dist/esm/utils/promises.js +233 -0
- package/dist/esm/utils/promises.js.map +1 -0
- package/dist/esm/utils/proxies.js +128 -0
- package/dist/esm/utils/proxies.js.map +1 -0
- package/dist/esm/utils/react.js +78 -0
- package/dist/esm/utils/react.js.map +1 -0
- package/dist/esm/utils/results.js +141 -0
- package/dist/esm/utils/results.js.map +1 -0
- package/dist/esm/utils/sentry.js +20 -0
- package/dist/esm/utils/sentry.js.map +1 -0
- package/dist/esm/utils/stores.js +195 -0
- package/dist/esm/utils/stores.js.map +1 -0
- package/dist/esm/utils/strings.js +295 -0
- package/dist/esm/utils/strings.js.map +1 -0
- package/dist/esm/utils/strings.nicify.test.js +222 -0
- package/dist/esm/utils/strings.nicify.test.js.map +1 -0
- package/dist/esm/utils/types.js +1 -0
- package/dist/esm/utils/types.js.map +1 -0
- package/dist/esm/utils/unicode.js +11 -0
- package/dist/esm/utils/unicode.js.map +1 -0
- package/dist/esm/utils/urls.js +53 -0
- package/dist/esm/utils/urls.js.map +1 -0
- package/dist/esm/utils/uuids.js +16 -0
- package/dist/esm/utils/uuids.js.map +1 -0
- package/dist/global.d.d.cts +1 -0
- package/dist/global.d.d.ts +1 -0
- package/dist/global.d.js +2 -0
- package/dist/global.d.js.map +1 -0
- package/dist/helpers/password.d.cts +11 -0
- package/dist/helpers/password.d.ts +11 -2
- package/dist/helpers/password.js +41 -11
- package/dist/helpers/password.js.map +1 -0
- package/dist/helpers/production-mode.d.cts +12 -0
- package/dist/helpers/production-mode.d.ts +9 -3
- package/dist/helpers/production-mode.js +72 -45
- package/dist/helpers/production-mode.js.map +1 -0
- package/dist/hooks/use-async-callback.d.cts +6 -0
- package/dist/hooks/use-async-callback.d.ts +6 -3
- package/dist/hooks/use-async-callback.js +72 -30
- package/dist/hooks/use-async-callback.js.map +1 -0
- package/dist/hooks/use-async-external-store.d.cts +7 -0
- package/dist/hooks/use-async-external-store.d.ts +5 -2
- package/dist/hooks/use-async-external-store.js +47 -19
- package/dist/hooks/use-async-external-store.js.map +1 -0
- package/dist/hooks/use-hash.d.cts +3 -0
- package/dist/hooks/use-hash.d.ts +3 -1
- package/dist/hooks/use-hash.js +41 -8
- package/dist/hooks/use-hash.js.map +1 -0
- package/dist/hooks/use-strict-memo.d.cts +8 -0
- package/dist/hooks/use-strict-memo.d.ts +3 -1
- package/dist/hooks/use-strict-memo.js +78 -131
- package/dist/hooks/use-strict-memo.js.map +1 -0
- package/dist/index.d.cts +30 -0
- package/dist/index.d.ts +30 -4
- package/dist/index.js +42 -4
- package/dist/index.js.map +1 -0
- package/dist/interface/adminInterface.d.cts +94 -0
- package/dist/interface/adminInterface.d.ts +38 -15
- package/dist/interface/adminInterface.js +269 -174
- package/dist/interface/adminInterface.js.map +1 -0
- package/dist/interface/clientInterface.d.cts +260 -0
- package/dist/interface/clientInterface.d.ts +25 -18
- package/dist/interface/clientInterface.js +2054 -995
- package/dist/interface/clientInterface.js.map +1 -0
- package/dist/interface/crud/contact-channels.d.cts +180 -0
- package/dist/interface/crud/contact-channels.d.ts +30 -25
- package/dist/interface/crud/contact-channels.js +101 -59
- package/dist/interface/crud/contact-channels.js.map +1 -0
- package/dist/interface/crud/current-user.d.cts +205 -0
- package/dist/interface/crud/current-user.d.ts +17 -12
- package/dist/interface/crud/current-user.js +86 -56
- package/dist/interface/crud/current-user.js.map +1 -0
- package/dist/interface/crud/email-templates.d.cts +84 -0
- package/dist/interface/crud/email-templates.d.ts +24 -19
- package/dist/interface/crud/email-templates.js +77 -37
- package/dist/interface/crud/email-templates.js.map +1 -0
- package/dist/interface/crud/emails.d.cts +69 -0
- package/dist/interface/crud/emails.d.ts +12 -7
- package/dist/interface/crud/emails.js +54 -12
- package/dist/interface/crud/emails.js.map +1 -0
- package/dist/interface/crud/internal-api-keys.d.cts +139 -0
- package/dist/interface/crud/internal-api-keys.d.ts +22 -17
- package/dist/interface/crud/internal-api-keys.js +92 -54
- package/dist/interface/crud/internal-api-keys.js.map +1 -0
- package/dist/interface/crud/oauth.d.cts +34 -0
- package/dist/interface/crud/oauth.d.ts +16 -11
- package/dist/interface/crud/oauth.js +48 -14
- package/dist/interface/crud/oauth.js.map +1 -0
- package/dist/interface/crud/project-api-keys.d.cts +196 -0
- package/dist/interface/crud/project-api-keys.d.ts +20 -12
- package/dist/interface/crud/project-api-keys.js +121 -74
- package/dist/interface/crud/project-api-keys.js.map +1 -0
- package/dist/interface/crud/project-permissions.d.cts +160 -0
- package/dist/interface/crud/project-permissions.d.ts +38 -33
- package/dist/interface/crud/project-permissions.js +148 -90
- package/dist/interface/crud/project-permissions.js.map +1 -0
- package/dist/interface/crud/projects.d.cts +627 -0
- package/dist/interface/crud/projects.d.ts +43 -51
- package/dist/interface/crud/projects.js +210 -156
- package/dist/interface/crud/projects.js.map +1 -0
- package/dist/interface/crud/sessions.d.cts +149 -0
- package/dist/interface/crud/sessions.d.ts +21 -16
- package/dist/interface/crud/sessions.js +86 -50
- package/dist/interface/crud/sessions.js.map +1 -0
- package/dist/interface/crud/svix-token.d.cts +26 -0
- package/dist/interface/crud/svix-token.d.ts +14 -9
- package/dist/interface/crud/svix-token.js +46 -12
- package/dist/interface/crud/svix-token.js.map +1 -0
- package/dist/interface/crud/team-invitation-details.d.cts +30 -0
- package/dist/interface/crud/team-invitation-details.d.ts +12 -7
- package/dist/interface/crud/team-invitation-details.js +57 -15
- package/dist/interface/crud/team-invitation-details.js.map +1 -0
- package/dist/interface/crud/team-invitation.d.cts +49 -0
- package/dist/interface/crud/team-invitation.d.ts +13 -8
- package/dist/interface/crud/team-invitation.js +69 -27
- package/dist/interface/crud/team-invitation.js.map +1 -0
- package/dist/interface/crud/team-member-profiles.d.cts +229 -0
- package/dist/interface/crud/team-member-profiles.d.ts +20 -15
- package/dist/interface/crud/team-member-profiles.js +95 -49
- package/dist/interface/crud/team-member-profiles.js.map +1 -0
- package/dist/interface/crud/team-memberships.d.cts +74 -0
- package/dist/interface/crud/team-memberships.d.ts +22 -17
- package/dist/interface/crud/team-memberships.js +85 -45
- package/dist/interface/crud/team-memberships.js.map +1 -0
- package/dist/interface/crud/team-permissions.d.cts +168 -0
- package/dist/interface/crud/team-permissions.d.ts +38 -33
- package/dist/interface/crud/team-permissions.js +149 -91
- package/dist/interface/crud/team-permissions.js.map +1 -0
- package/dist/interface/crud/teams.d.cts +298 -0
- package/dist/interface/crud/teams.d.ts +45 -40
- package/dist/interface/crud/teams.js +177 -119
- package/dist/interface/crud/teams.js.map +1 -0
- package/dist/interface/crud/users.d.cts +469 -0
- package/dist/interface/crud/users.d.ts +31 -26
- package/dist/interface/crud/users.js +172 -118
- package/dist/interface/crud/users.js.map +1 -0
- package/dist/interface/serverInterface.d.cts +128 -0
- package/dist/interface/serverInterface.d.ts +29 -17
- package/dist/interface/serverInterface.js +506 -339
- package/dist/interface/serverInterface.js.map +1 -0
- package/dist/interface/webhooks.d.cts +292 -0
- package/dist/interface/webhooks.d.ts +6 -3
- package/dist/interface/webhooks.js +45 -15
- package/dist/interface/webhooks.js.map +1 -0
- package/dist/known-errors.d.cts +447 -0
- package/dist/known-errors.d.ts +15 -9
- package/dist/known-errors.js +1104 -562
- package/dist/known-errors.js.map +1 -0
- package/dist/schema-fields.d.cts +163 -0
- package/dist/schema-fields.d.ts +116 -114
- package/dist/schema-fields.js +593 -427
- package/dist/schema-fields.js.map +1 -0
- package/dist/sessions.d.cts +109 -0
- package/dist/sessions.d.ts +6 -3
- package/dist/sessions.js +201 -172
- package/dist/sessions.js.map +1 -0
- package/dist/utils/api-keys.d.cts +24 -0
- package/dist/utils/api-keys.d.ts +5 -4
- package/dist/utils/api-keys.js +106 -66
- package/dist/utils/api-keys.js.map +1 -0
- package/dist/utils/arrays.d.cts +18 -0
- package/dist/utils/arrays.d.ts +15 -13
- package/dist/utils/arrays.js +101 -168
- package/dist/utils/arrays.js.map +1 -0
- package/dist/utils/base64.d.cts +4 -0
- package/dist/utils/base64.d.ts +4 -2
- package/dist/utils/base64.js +41 -20
- package/dist/utils/base64.js.map +1 -0
- package/dist/utils/booleans.d.cts +6 -0
- package/dist/utils/booleans.d.ts +6 -4
- package/dist/utils/booleans.js +35 -27
- package/dist/utils/booleans.js.map +1 -0
- package/dist/utils/browser-compat.d.cts +8 -0
- package/dist/utils/browser-compat.d.ts +3 -1
- package/dist/utils/browser-compat.js +45 -16
- package/dist/utils/browser-compat.js.map +1 -0
- package/dist/utils/bytes.d.cts +15 -0
- package/dist/utils/bytes.d.ts +15 -13
- package/dist/utils/bytes.js +182 -270
- package/dist/utils/bytes.js.map +1 -0
- package/dist/utils/caches.d.cts +98 -0
- package/dist/utils/caches.d.ts +17 -14
- package/dist/utils/caches.js +188 -193
- package/dist/utils/caches.js.map +1 -0
- package/dist/utils/compile-time.d.cts +8 -0
- package/dist/utils/compile-time.d.ts +3 -1
- package/dist/utils/compile-time.js +35 -10
- package/dist/utils/compile-time.js.map +1 -0
- package/dist/utils/crypto.d.cts +8 -0
- package/dist/utils/crypto.d.ts +4 -2
- package/dist/utils/crypto.js +49 -21
- package/dist/utils/crypto.js.map +1 -0
- package/dist/utils/dates.d.cts +15 -0
- package/dist/utils/dates.d.ts +6 -4
- package/dist/utils/dates.js +83 -105
- package/dist/utils/dates.js.map +1 -0
- package/dist/utils/dom.d.cts +3 -0
- package/dist/utils/dom.d.ts +3 -1
- package/dist/utils/dom.js +35 -7
- package/dist/utils/dom.js.map +1 -0
- package/dist/utils/env.d.cts +9 -0
- package/dist/utils/env.d.ts +6 -4
- package/dist/utils/env.js +70 -43
- package/dist/utils/env.js.map +1 -0
- package/dist/utils/errors.d.cts +223 -0
- package/dist/utils/errors.d.ts +14 -11
- package/dist/utils/errors.js +148 -126
- package/dist/utils/errors.js.map +1 -0
- package/dist/utils/fs.d.cts +7 -0
- package/dist/utils/fs.d.ts +5 -3
- package/dist/utils/fs.js +70 -27
- package/dist/utils/fs.js.map +1 -0
- package/dist/utils/functions.d.cts +4 -0
- package/dist/utils/functions.d.ts +4 -2
- package/dist/utils/functions.js +35 -18
- package/dist/utils/functions.js.map +1 -0
- package/dist/utils/geo.d.cts +22 -0
- package/dist/utils/geo.d.ts +6 -3
- package/dist/utils/geo.js +39 -9
- package/dist/utils/geo.js.map +1 -0
- package/dist/utils/globals.d.cts +5 -0
- package/dist/utils/globals.d.ts +4 -2
- package/dist/utils/globals.js +41 -14
- package/dist/utils/globals.js.map +1 -0
- package/dist/utils/hashes.d.cts +7 -0
- package/dist/utils/hashes.d.ts +7 -5
- package/dist/utils/hashes.js +87 -41
- package/dist/utils/hashes.js.map +1 -0
- package/dist/utils/html.d.cts +4 -0
- package/dist/utils/html.d.ts +4 -2
- package/dist/utils/html.js +36 -37
- package/dist/utils/html.js.map +1 -0
- package/dist/utils/http.d.cts +43 -0
- package/dist/utils/http.d.ts +6 -4
- package/dist/utils/http.js +83 -83
- package/dist/utils/http.js.map +1 -0
- package/dist/utils/ips.d.cts +6 -0
- package/dist/utils/ips.d.ts +6 -4
- package/dist/utils/ips.js +48 -35
- package/dist/utils/ips.js.map +1 -0
- package/dist/utils/json.d.cts +13 -0
- package/dist/utils/json.d.ts +9 -6
- package/dist/utils/json.js +54 -157
- package/dist/utils/json.js.map +1 -0
- package/dist/utils/jwt.d.cts +44 -0
- package/dist/utils/jwt.d.ts +14 -11
- package/dist/utils/jwt.js +119 -84
- package/dist/utils/jwt.js.map +1 -0
- package/dist/utils/locks.d.cts +15 -0
- package/dist/utils/locks.d.ts +3 -2
- package/dist/utils/locks.js +76 -56
- package/dist/utils/locks.js.map +1 -0
- package/dist/utils/maps.d.cts +59 -0
- package/dist/utils/maps.d.ts +6 -4
- package/dist/utils/maps.js +207 -343
- package/dist/utils/maps.js.map +1 -0
- package/dist/utils/math.d.cts +6 -0
- package/dist/utils/math.d.ts +3 -1
- package/dist/utils/math.js +31 -16
- package/dist/utils/math.js.map +1 -0
- package/dist/utils/node-http.d.cts +15 -0
- package/dist/utils/node-http.d.ts +5 -5
- package/dist/utils/node-http.js +65 -36
- package/dist/utils/node-http.js.map +1 -0
- package/dist/utils/numbers.d.cts +5 -0
- package/dist/utils/numbers.d.ts +5 -3
- package/dist/utils/numbers.js +53 -66
- package/dist/utils/numbers.js.map +1 -0
- package/dist/utils/oauth.d.cts +8 -0
- package/dist/utils/oauth.d.ts +8 -6
- package/dist/utils/oauth.js +37 -4
- package/dist/utils/oauth.js.map +1 -0
- package/dist/utils/objects.d.cts +69 -0
- package/dist/utils/objects.d.ts +37 -32
- package/dist/utils/objects.js +224 -374
- package/dist/utils/objects.js.map +1 -0
- package/dist/utils/passkey.d.cts +1 -0
- package/dist/utils/passkey.d.ts +1 -1
- package/dist/utils/passkey.js +19 -1
- package/dist/utils/passkey.js.map +1 -0
- package/dist/utils/promises.d.cts +74 -0
- package/dist/utils/promises.d.ts +20 -18
- package/dist/utils/promises.js +252 -393
- package/dist/utils/promises.js.map +1 -0
- package/dist/utils/proxies.d.cts +4 -0
- package/dist/utils/proxies.d.ts +4 -2
- package/dist/utils/proxies.js +150 -161
- package/dist/utils/proxies.js.map +1 -0
- package/dist/utils/react.d.cts +25 -0
- package/dist/utils/react.d.ts +9 -6
- package/dist/utils/react.js +88 -134
- package/dist/utils/react.js.map +1 -0
- package/dist/utils/results.d.cts +78 -0
- package/dist/utils/results.d.ts +10 -9
- package/dist/utils/results.js +143 -324
- package/dist/utils/results.js.map +1 -0
- package/dist/utils/sentry.d.cts +5 -0
- package/dist/utils/sentry.d.ts +5 -2
- package/dist/utils/sentry.js +44 -14
- package/dist/utils/sentry.js.map +1 -0
- package/dist/utils/stores.d.cts +102 -0
- package/dist/utils/stores.d.ts +12 -9
- package/dist/utils/stores.js +219 -189
- package/dist/utils/stores.js.map +1 -0
- package/dist/utils/strings.d.cts +72 -0
- package/dist/utils/strings.d.ts +22 -20
- package/dist/utils/strings.js +300 -580
- package/dist/utils/strings.js.map +1 -0
- package/dist/utils/strings.nicify.test.d.cts +2 -0
- package/dist/utils/strings.nicify.test.d.ts +2 -1
- package/dist/utils/strings.nicify.test.js +168 -158
- package/dist/utils/strings.nicify.test.js.map +1 -0
- package/dist/utils/types.d.cts +23 -0
- package/dist/utils/types.d.ts +8 -6
- package/dist/utils/types.js +19 -1
- package/dist/utils/types.js.map +1 -0
- package/dist/utils/unicode.d.cts +3 -0
- package/dist/utils/unicode.d.ts +3 -1
- package/dist/utils/unicode.js +34 -21
- package/dist/utils/unicode.js.map +1 -0
- package/dist/utils/urls.d.cts +20 -0
- package/dist/utils/urls.d.ts +10 -8
- package/dist/utils/urls.js +76 -165
- package/dist/utils/urls.js.map +1 -0
- package/dist/utils/uuids.d.cts +4 -0
- package/dist/utils/uuids.d.ts +4 -2
- package/dist/utils/uuids.js +39 -35
- package/dist/utils/uuids.js.map +1 -0
- package/package.json +5 -5
package/dist/utils/objects.js
CHANGED
|
@@ -1,378 +1,228 @@
|
|
|
1
|
-
|
|
2
|
-
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
});
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
|
|
1
|
+
"use strict";
|
|
2
|
+
var __defProp = Object.defineProperty;
|
|
3
|
+
var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
|
|
4
|
+
var __getOwnPropNames = Object.getOwnPropertyNames;
|
|
5
|
+
var __hasOwnProp = Object.prototype.hasOwnProperty;
|
|
6
|
+
var __export = (target, all) => {
|
|
7
|
+
for (var name in all)
|
|
8
|
+
__defProp(target, name, { get: all[name], enumerable: true });
|
|
9
|
+
};
|
|
10
|
+
var __copyProps = (to, from, except, desc) => {
|
|
11
|
+
if (from && typeof from === "object" || typeof from === "function") {
|
|
12
|
+
for (let key of __getOwnPropNames(from))
|
|
13
|
+
if (!__hasOwnProp.call(to, key) && key !== except)
|
|
14
|
+
__defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable });
|
|
15
|
+
}
|
|
16
|
+
return to;
|
|
17
|
+
};
|
|
18
|
+
var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod);
|
|
19
|
+
|
|
20
|
+
// src/utils/objects.tsx
|
|
21
|
+
var objects_exports = {};
|
|
22
|
+
__export(objects_exports, {
|
|
23
|
+
deepFilterUndefined: () => deepFilterUndefined,
|
|
24
|
+
deepMerge: () => deepMerge,
|
|
25
|
+
deepPlainClone: () => deepPlainClone,
|
|
26
|
+
deepPlainEquals: () => deepPlainEquals,
|
|
27
|
+
deepSortKeys: () => deepSortKeys,
|
|
28
|
+
deleteKey: () => deleteKey,
|
|
29
|
+
filterUndefined: () => filterUndefined,
|
|
30
|
+
filterUndefinedOrNull: () => filterUndefinedOrNull,
|
|
31
|
+
get: () => get,
|
|
32
|
+
getOrUndefined: () => getOrUndefined,
|
|
33
|
+
has: () => has,
|
|
34
|
+
hasAndNotUndefined: () => hasAndNotUndefined,
|
|
35
|
+
isCloneable: () => isCloneable,
|
|
36
|
+
isNotNull: () => isNotNull,
|
|
37
|
+
isObjectLike: () => isObjectLike,
|
|
38
|
+
mapValues: () => mapValues,
|
|
39
|
+
omit: () => omit,
|
|
40
|
+
pick: () => pick,
|
|
41
|
+
set: () => set,
|
|
42
|
+
shallowClone: () => shallowClone,
|
|
43
|
+
sortKeys: () => sortKeys,
|
|
44
|
+
split: () => split,
|
|
45
|
+
typedAssign: () => typedAssign,
|
|
46
|
+
typedEntries: () => typedEntries,
|
|
47
|
+
typedFromEntries: () => typedFromEntries,
|
|
48
|
+
typedKeys: () => typedKeys,
|
|
49
|
+
typedValues: () => typedValues
|
|
50
|
+
});
|
|
51
|
+
module.exports = __toCommonJS(objects_exports);
|
|
52
|
+
var import_errors = require("./errors");
|
|
53
|
+
var import_functions = require("./functions");
|
|
54
|
+
var import_strings = require("./strings");
|
|
55
|
+
function isNotNull(value) {
|
|
56
|
+
return value !== null && value !== void 0;
|
|
57
|
+
}
|
|
58
|
+
function deepPlainEquals(obj1, obj2, options = {}) {
|
|
59
|
+
if (typeof obj1 !== typeof obj2) return false;
|
|
60
|
+
if (obj1 === obj2) return true;
|
|
61
|
+
switch (typeof obj1) {
|
|
62
|
+
case "object": {
|
|
63
|
+
if (!obj1 || !obj2) return false;
|
|
64
|
+
if (Array.isArray(obj1) || Array.isArray(obj2)) {
|
|
65
|
+
if (!Array.isArray(obj1) || !Array.isArray(obj2)) return false;
|
|
66
|
+
if (obj1.length !== obj2.length) return false;
|
|
67
|
+
return obj1.every((v, i) => deepPlainEquals(v, obj2[i], options));
|
|
68
|
+
}
|
|
69
|
+
const entries1 = Object.entries(obj1).filter(([k, v]) => !options.ignoreUndefinedValues || v !== void 0);
|
|
70
|
+
const entries2 = Object.entries(obj2).filter(([k, v]) => !options.ignoreUndefinedValues || v !== void 0);
|
|
71
|
+
if (entries1.length !== entries2.length) return false;
|
|
72
|
+
return entries1.every(([k, v1]) => {
|
|
73
|
+
const e2 = entries2.find(([k2]) => k === k2);
|
|
74
|
+
if (!e2) return false;
|
|
75
|
+
return deepPlainEquals(v1, e2[1], options);
|
|
76
|
+
});
|
|
59
77
|
}
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
|
|
65
|
-
|
|
66
|
-
|
|
67
|
-
|
|
68
|
-
expect(deepPlainEquals([1, 2, 3], [1, 2, 3])).toBe(true);
|
|
69
|
-
expect(deepPlainEquals([1, 2, 3], [1, 2, 4])).toBe(false);
|
|
70
|
-
expect(deepPlainEquals([1, 2, 3], [1, 2])).toBe(false);
|
|
71
|
-
// Objects
|
|
72
|
-
expect(deepPlainEquals({ a: 1, b: 2 }, { a: 1, b: 2 })).toBe(true);
|
|
73
|
-
expect(deepPlainEquals({ a: 1, b: 2 }, { a: 1, b: 3 })).toBe(false);
|
|
74
|
-
expect(deepPlainEquals({ a: 1, b: 2 }, { a: 1 })).toBe(false);
|
|
75
|
-
// Nested structures
|
|
76
|
-
expect(deepPlainEquals({ a: 1, b: [1, 2, { c: 3 }] }, { a: 1, b: [1, 2, { c: 3 }] })).toBe(true);
|
|
77
|
-
expect(deepPlainEquals({ a: 1, b: [1, 2, { c: 3 }] }, { a: 1, b: [1, 2, { c: 4 }] })).toBe(false);
|
|
78
|
-
// With options
|
|
79
|
-
expect(deepPlainEquals({ a: 1, b: undefined }, { a: 1 }, { ignoreUndefinedValues: true })).toBe(true);
|
|
80
|
-
expect(deepPlainEquals({ a: 1, b: undefined }, { a: 1 })).toBe(false);
|
|
81
|
-
});
|
|
82
|
-
export function isCloneable(obj) {
|
|
83
|
-
return typeof obj !== 'symbol' && typeof obj !== 'function';
|
|
84
|
-
}
|
|
85
|
-
export function shallowClone(obj) {
|
|
86
|
-
if (!isCloneable(obj))
|
|
87
|
-
throw new StackAssertionError("shallowClone does not support symbols or functions", { obj });
|
|
88
|
-
if (Array.isArray(obj))
|
|
89
|
-
return obj.map(identity);
|
|
90
|
-
return { ...obj };
|
|
91
|
-
}
|
|
92
|
-
import.meta.vitest?.test("shallowClone", ({ expect }) => {
|
|
93
|
-
expect(shallowClone({ a: 1, b: 2 })).toEqual({ a: 1, b: 2 });
|
|
94
|
-
expect(shallowClone([1, 2, 3])).toEqual([1, 2, 3]);
|
|
95
|
-
expect(() => shallowClone(() => { })).toThrow();
|
|
96
|
-
});
|
|
97
|
-
export function deepPlainClone(obj) {
|
|
98
|
-
if (typeof obj === 'function')
|
|
99
|
-
throw new StackAssertionError("deepPlainClone does not support functions");
|
|
100
|
-
if (typeof obj === 'symbol')
|
|
101
|
-
throw new StackAssertionError("deepPlainClone does not support symbols");
|
|
102
|
-
if (typeof obj !== 'object' || !obj)
|
|
103
|
-
return obj;
|
|
104
|
-
if (Array.isArray(obj))
|
|
105
|
-
return obj.map(deepPlainClone);
|
|
106
|
-
return Object.fromEntries(Object.entries(obj).map(([k, v]) => [k, deepPlainClone(v)]));
|
|
107
|
-
}
|
|
108
|
-
import.meta.vitest?.test("deepPlainClone", ({ expect }) => {
|
|
109
|
-
// Primitive values
|
|
110
|
-
expect(deepPlainClone(1)).toBe(1);
|
|
111
|
-
expect(deepPlainClone("test")).toBe("test");
|
|
112
|
-
expect(deepPlainClone(null)).toBe(null);
|
|
113
|
-
expect(deepPlainClone(undefined)).toBe(undefined);
|
|
114
|
-
// Arrays
|
|
115
|
-
const arr = [1, 2, 3];
|
|
116
|
-
const clonedArr = deepPlainClone(arr);
|
|
117
|
-
expect(clonedArr).toEqual(arr);
|
|
118
|
-
expect(clonedArr).not.toBe(arr); // Different reference
|
|
119
|
-
// Objects
|
|
120
|
-
const obj = { a: 1, b: 2 };
|
|
121
|
-
const clonedObj = deepPlainClone(obj);
|
|
122
|
-
expect(clonedObj).toEqual(obj);
|
|
123
|
-
expect(clonedObj).not.toBe(obj); // Different reference
|
|
124
|
-
// Nested structures
|
|
125
|
-
const nested = { a: 1, b: [1, 2, { c: 3 }] };
|
|
126
|
-
const clonedNested = deepPlainClone(nested);
|
|
127
|
-
expect(clonedNested).toEqual(nested);
|
|
128
|
-
expect(clonedNested).not.toBe(nested); // Different reference
|
|
129
|
-
expect(clonedNested.b).not.toBe(nested.b); // Different reference for nested array
|
|
130
|
-
expect(clonedNested.b[2]).not.toBe(nested.b[2]); // Different reference for nested object
|
|
131
|
-
// Error cases
|
|
132
|
-
expect(() => deepPlainClone(() => { })).toThrow();
|
|
133
|
-
expect(() => deepPlainClone(Symbol())).toThrow();
|
|
134
|
-
});
|
|
135
|
-
export function deepMerge(baseObj, mergeObj) {
|
|
136
|
-
if ([baseObj, mergeObj, ...Object.values(baseObj), ...Object.values(mergeObj)].some(o => !isCloneable(o)))
|
|
137
|
-
throw new StackAssertionError("deepMerge does not support functions or symbols", { baseObj, mergeObj });
|
|
138
|
-
const res = shallowClone(baseObj);
|
|
139
|
-
for (const [key, mergeValue] of Object.entries(mergeObj)) {
|
|
140
|
-
if (has(res, key)) {
|
|
141
|
-
const baseValue = get(res, key);
|
|
142
|
-
if (isObjectLike(baseValue) && isObjectLike(mergeValue)) {
|
|
143
|
-
set(res, key, deepMerge(baseValue, mergeValue));
|
|
144
|
-
continue;
|
|
145
|
-
}
|
|
146
|
-
}
|
|
147
|
-
set(res, key, mergeValue);
|
|
78
|
+
case "undefined":
|
|
79
|
+
case "string":
|
|
80
|
+
case "number":
|
|
81
|
+
case "boolean":
|
|
82
|
+
case "bigint":
|
|
83
|
+
case "symbol":
|
|
84
|
+
case "function": {
|
|
85
|
+
return false;
|
|
148
86
|
}
|
|
149
|
-
|
|
150
|
-
|
|
151
|
-
import.meta.vitest?.test("deepMerge", ({ expect }) => {
|
|
152
|
-
// Test merging flat objects
|
|
153
|
-
expect(deepMerge({ a: 1 }, { b: 2 })).toEqual({ a: 1, b: 2 });
|
|
154
|
-
expect(deepMerge({ a: 1 }, { a: 2 })).toEqual({ a: 2 });
|
|
155
|
-
expect(deepMerge({ a: 1, b: 2 }, { b: 3, c: 4 })).toEqual({ a: 1, b: 3, c: 4 });
|
|
156
|
-
// Test with nested objects
|
|
157
|
-
expect(deepMerge({ a: { x: 1, y: 2 }, b: 3 }, { a: { y: 3, z: 4 }, c: 5 })).toEqual({ a: { x: 1, y: 3, z: 4 }, b: 3, c: 5 });
|
|
158
|
-
// Test with arrays
|
|
159
|
-
expect(deepMerge({ a: [1, 2], b: 3 }, { a: [3, 4], c: 5 })).toEqual({ a: [3, 4], b: 3, c: 5 });
|
|
160
|
-
// Test with null values
|
|
161
|
-
expect(deepMerge({ a: { x: 1 }, b: null }, { a: { y: 2 }, b: { z: 3 } })).toEqual({ a: { x: 1, y: 2 }, b: { z: 3 } });
|
|
162
|
-
// Test with undefined values
|
|
163
|
-
expect(deepMerge({ a: 1, b: undefined }, { b: 2, c: 3 })).toEqual({ a: 1, b: 2, c: 3 });
|
|
164
|
-
// Test deeply nested structures
|
|
165
|
-
expect(deepMerge({
|
|
166
|
-
a: {
|
|
167
|
-
x: { deep: 1 },
|
|
168
|
-
y: [1, 2]
|
|
169
|
-
},
|
|
170
|
-
b: 2
|
|
171
|
-
}, {
|
|
172
|
-
a: {
|
|
173
|
-
x: { deeper: 3 },
|
|
174
|
-
y: [3, 4]
|
|
175
|
-
},
|
|
176
|
-
c: 3
|
|
177
|
-
})).toEqual({
|
|
178
|
-
a: {
|
|
179
|
-
x: { deep: 1, deeper: 3 },
|
|
180
|
-
y: [3, 4]
|
|
181
|
-
},
|
|
182
|
-
b: 2,
|
|
183
|
-
c: 3
|
|
184
|
-
});
|
|
185
|
-
// Test with empty objects
|
|
186
|
-
expect(deepMerge({}, { a: 1 })).toEqual({ a: 1 });
|
|
187
|
-
expect(deepMerge({ a: 1 }, {})).toEqual({ a: 1 });
|
|
188
|
-
expect(deepMerge({}, {})).toEqual({});
|
|
189
|
-
// Test that original objects are not modified
|
|
190
|
-
const base = { a: { x: 1 }, b: 2 };
|
|
191
|
-
const merge = { a: { y: 2 }, c: 3 };
|
|
192
|
-
const baseClone = deepPlainClone(base);
|
|
193
|
-
const mergeClone = deepPlainClone(merge);
|
|
194
|
-
const result = deepMerge(base, merge);
|
|
195
|
-
expect(base).toEqual(baseClone);
|
|
196
|
-
expect(merge).toEqual(mergeClone);
|
|
197
|
-
expect(result).toEqual({ a: { x: 1, y: 2 }, b: 2, c: 3 });
|
|
198
|
-
// Test error cases
|
|
199
|
-
expect(() => deepMerge({ a: () => { } }, { b: 2 })).toThrow();
|
|
200
|
-
expect(() => deepMerge({ a: 1 }, { b: () => { } })).toThrow();
|
|
201
|
-
expect(() => deepMerge({ a: Symbol() }, { b: 2 })).toThrow();
|
|
202
|
-
expect(() => deepMerge({ a: 1 }, { b: Symbol() })).toThrow();
|
|
203
|
-
});
|
|
204
|
-
export function typedEntries(obj) {
|
|
205
|
-
return Object.entries(obj);
|
|
206
|
-
}
|
|
207
|
-
import.meta.vitest?.test("typedEntries", ({ expect }) => {
|
|
208
|
-
expect(typedEntries({})).toEqual([]);
|
|
209
|
-
expect(typedEntries({ a: 1, b: 2 })).toEqual([["a", 1], ["b", 2]]);
|
|
210
|
-
expect(typedEntries({ a: "hello", b: true, c: null })).toEqual([["a", "hello"], ["b", true], ["c", null]]);
|
|
211
|
-
// Test with object containing methods
|
|
212
|
-
const objWithMethod = { a: 1, b: () => "test" };
|
|
213
|
-
const entries = typedEntries(objWithMethod);
|
|
214
|
-
expect(entries.length).toBe(2);
|
|
215
|
-
expect(entries[0][0]).toBe("a");
|
|
216
|
-
expect(entries[0][1]).toBe(1);
|
|
217
|
-
expect(entries[1][0]).toBe("b");
|
|
218
|
-
expect(typeof entries[1][1]).toBe("function");
|
|
219
|
-
});
|
|
220
|
-
export function typedFromEntries(entries) {
|
|
221
|
-
return Object.fromEntries(entries);
|
|
222
|
-
}
|
|
223
|
-
import.meta.vitest?.test("typedFromEntries", ({ expect }) => {
|
|
224
|
-
expect(typedFromEntries([])).toEqual({});
|
|
225
|
-
expect(typedFromEntries([["a", 1], ["b", 2]])).toEqual({ a: 1, b: 2 });
|
|
226
|
-
// Test with mixed types (using type assertion)
|
|
227
|
-
const mixedEntries = [["a", "hello"], ["b", true], ["c", null]];
|
|
228
|
-
const mixedObj = typedFromEntries(mixedEntries);
|
|
229
|
-
expect(mixedObj).toEqual({ a: "hello", b: true, c: null });
|
|
230
|
-
// Test with function values
|
|
231
|
-
const fn = () => "test";
|
|
232
|
-
const fnEntries = [["a", 1], ["b", fn]];
|
|
233
|
-
const obj = typedFromEntries(fnEntries);
|
|
234
|
-
expect(obj.a).toBe(1);
|
|
235
|
-
expect(typeof obj.b).toBe("function");
|
|
236
|
-
// Type assertion needed for the function call
|
|
237
|
-
expect(obj.b()).toBe("test");
|
|
238
|
-
});
|
|
239
|
-
export function typedKeys(obj) {
|
|
240
|
-
return Object.keys(obj);
|
|
241
|
-
}
|
|
242
|
-
import.meta.vitest?.test("typedKeys", ({ expect }) => {
|
|
243
|
-
expect(typedKeys({})).toEqual([]);
|
|
244
|
-
expect(typedKeys({ a: 1, b: 2 })).toEqual(["a", "b"]);
|
|
245
|
-
expect(typedKeys({ a: "hello", b: true, c: null })).toEqual(["a", "b", "c"]);
|
|
246
|
-
// Test with object containing methods
|
|
247
|
-
const objWithMethod = { a: 1, b: () => "test" };
|
|
248
|
-
expect(typedKeys(objWithMethod)).toEqual(["a", "b"]);
|
|
249
|
-
});
|
|
250
|
-
export function typedValues(obj) {
|
|
251
|
-
return Object.values(obj);
|
|
252
|
-
}
|
|
253
|
-
import.meta.vitest?.test("typedValues", ({ expect }) => {
|
|
254
|
-
expect(typedValues({})).toEqual([]);
|
|
255
|
-
expect(typedValues({ a: 1, b: 2 })).toEqual([1, 2]);
|
|
256
|
-
const mixedObj = { a: "hello", b: true, c: null };
|
|
257
|
-
expect(typedValues(mixedObj)).toEqual(["hello", true, null]);
|
|
258
|
-
const fn = () => "test";
|
|
259
|
-
const objWithMethod = { a: 1, b: fn };
|
|
260
|
-
const values = typedValues(objWithMethod);
|
|
261
|
-
expect(values.length).toBe(2);
|
|
262
|
-
expect(values[0]).toBe(1);
|
|
263
|
-
expect(typeof values[1]).toBe("function");
|
|
264
|
-
// Need to cast to the correct type
|
|
265
|
-
const fnValue = values[1];
|
|
266
|
-
expect(fnValue()).toBe("test");
|
|
267
|
-
});
|
|
268
|
-
export function typedAssign(target, source) {
|
|
269
|
-
return Object.assign(target, source);
|
|
270
|
-
}
|
|
271
|
-
import.meta.vitest?.test("typedAssign", ({ expect }) => {
|
|
272
|
-
// Test with empty objects
|
|
273
|
-
const emptyTarget = {};
|
|
274
|
-
const emptyResult = typedAssign(emptyTarget, { a: 1 });
|
|
275
|
-
expect(emptyResult).toEqual({ a: 1 });
|
|
276
|
-
expect(emptyResult).toBe(emptyTarget); // Same reference
|
|
277
|
-
// Test with non-empty target
|
|
278
|
-
const target = { a: 1, b: 2 };
|
|
279
|
-
const result = typedAssign(target, { c: 3, d: 4 });
|
|
280
|
-
expect(result).toEqual({ a: 1, b: 2, c: 3, d: 4 });
|
|
281
|
-
expect(result).toBe(target); // Same reference
|
|
282
|
-
// Test with overlapping properties
|
|
283
|
-
const targetWithOverlap = { a: 1, b: 2 };
|
|
284
|
-
const resultWithOverlap = typedAssign(targetWithOverlap, { b: 3, c: 4 });
|
|
285
|
-
expect(resultWithOverlap).toEqual({ a: 1, b: 3, c: 4 });
|
|
286
|
-
expect(resultWithOverlap).toBe(targetWithOverlap); // Same reference
|
|
287
|
-
});
|
|
288
|
-
/**
|
|
289
|
-
* Returns a new object with all undefined values removed. Useful when spreading optional parameters on an object, as
|
|
290
|
-
* TypeScript's `Partial<XYZ>` type allows `undefined` values.
|
|
291
|
-
*/
|
|
292
|
-
export function filterUndefined(obj) {
|
|
293
|
-
return Object.fromEntries(Object.entries(obj).filter(([, v]) => v !== undefined));
|
|
294
|
-
}
|
|
295
|
-
import.meta.vitest?.test("filterUndefined", ({ expect }) => {
|
|
296
|
-
expect(filterUndefined({})).toEqual({});
|
|
297
|
-
expect(filterUndefined({ a: 1, b: 2 })).toEqual({ a: 1, b: 2 });
|
|
298
|
-
expect(filterUndefined({ a: 1, b: undefined })).toEqual({ a: 1 });
|
|
299
|
-
expect(filterUndefined({ a: undefined, b: undefined })).toEqual({});
|
|
300
|
-
expect(filterUndefined({ a: null, b: undefined })).toEqual({ a: null });
|
|
301
|
-
expect(filterUndefined({ a: 0, b: "", c: false, d: undefined })).toEqual({ a: 0, b: "", c: false });
|
|
302
|
-
});
|
|
303
|
-
/**
|
|
304
|
-
* Returns a new object with all undefined and null values removed. Useful when spreading optional parameters on an object, as
|
|
305
|
-
* TypeScript's `Partial<XYZ>` type allows `undefined` values.
|
|
306
|
-
*/
|
|
307
|
-
export function filterUndefinedOrNull(obj) {
|
|
308
|
-
return Object.fromEntries(Object.entries(obj).filter(([, v]) => v !== undefined && v !== null));
|
|
309
|
-
}
|
|
310
|
-
import.meta.vitest?.test("filterUndefinedOrNull", ({ expect }) => {
|
|
311
|
-
expect(filterUndefinedOrNull({})).toEqual({});
|
|
312
|
-
expect(filterUndefinedOrNull({ a: 1, b: 2 })).toEqual({ a: 1, b: 2 });
|
|
313
|
-
});
|
|
314
|
-
export function deepFilterUndefined(obj) {
|
|
315
|
-
return Object.fromEntries(Object.entries(obj).filter(([, v]) => v !== undefined).map(([k, v]) => [k, isObjectLike(v) ? deepFilterUndefined(v) : v]));
|
|
316
|
-
}
|
|
317
|
-
import.meta.vitest?.test("deepFilterUndefined", ({ expect }) => {
|
|
318
|
-
expect(deepFilterUndefined({ a: 1, b: undefined })).toEqual({ a: 1 });
|
|
319
|
-
});
|
|
320
|
-
export function pick(obj, keys) {
|
|
321
|
-
return Object.fromEntries(Object.entries(obj).filter(([k]) => keys.includes(k)));
|
|
322
|
-
}
|
|
323
|
-
import.meta.vitest?.test("pick", ({ expect }) => {
|
|
324
|
-
const obj = { a: 1, b: 2, c: 3, d: 4 };
|
|
325
|
-
expect(pick(obj, ["a", "c"])).toEqual({ a: 1, c: 3 });
|
|
326
|
-
expect(pick(obj, [])).toEqual({});
|
|
327
|
-
expect(pick(obj, ["a", "e"])).toEqual({ a: 1 });
|
|
328
|
-
// Use type assertion for empty object to avoid TypeScript error
|
|
329
|
-
expect(pick({}, ["a"])).toEqual({});
|
|
330
|
-
});
|
|
331
|
-
export function omit(obj, keys) {
|
|
332
|
-
return Object.fromEntries(Object.entries(obj).filter(([k]) => !keys.includes(k)));
|
|
333
|
-
}
|
|
334
|
-
import.meta.vitest?.test("omit", ({ expect }) => {
|
|
335
|
-
const obj = { a: 1, b: 2, c: 3, d: 4 };
|
|
336
|
-
expect(omit(obj, ["a", "c"])).toEqual({ b: 2, d: 4 });
|
|
337
|
-
expect(omit(obj, [])).toEqual(obj);
|
|
338
|
-
expect(omit(obj, ["a", "e"])).toEqual({ b: 2, c: 3, d: 4 });
|
|
339
|
-
// Use type assertion for empty object to avoid TypeScript error
|
|
340
|
-
expect(omit({}, ["a"])).toEqual({});
|
|
341
|
-
});
|
|
342
|
-
export function split(obj, keys) {
|
|
343
|
-
return [pick(obj, keys), omit(obj, keys)];
|
|
344
|
-
}
|
|
345
|
-
import.meta.vitest?.test("split", ({ expect }) => {
|
|
346
|
-
const obj = { a: 1, b: 2, c: 3, d: 4 };
|
|
347
|
-
expect(split(obj, ["a", "c"])).toEqual([{ a: 1, c: 3 }, { b: 2, d: 4 }]);
|
|
348
|
-
expect(split(obj, [])).toEqual([{}, obj]);
|
|
349
|
-
expect(split(obj, ["a", "e"])).toEqual([{ a: 1 }, { b: 2, c: 3, d: 4 }]);
|
|
350
|
-
// Use type assertion for empty object to avoid TypeScript error
|
|
351
|
-
expect(split({}, ["a"])).toEqual([{}, {}]);
|
|
352
|
-
});
|
|
353
|
-
export function set(obj, key, value) {
|
|
354
|
-
Object.defineProperty(obj, key, { value, writable: true, configurable: true, enumerable: true });
|
|
355
|
-
}
|
|
356
|
-
export function get(obj, key) {
|
|
357
|
-
const descriptor = Object.getOwnPropertyDescriptor(obj, key);
|
|
358
|
-
if (!descriptor)
|
|
359
|
-
throw new StackAssertionError(`get: key ${String(key)} does not exist`, { obj, key });
|
|
360
|
-
return descriptor.value;
|
|
361
|
-
}
|
|
362
|
-
export function has(obj, key) {
|
|
363
|
-
return Object.prototype.hasOwnProperty.call(obj, key);
|
|
364
|
-
}
|
|
365
|
-
export function hasAndNotUndefined(obj, key) {
|
|
366
|
-
return has(obj, key) && get(obj, key) !== undefined;
|
|
367
|
-
}
|
|
368
|
-
export function deleteKey(obj, key) {
|
|
369
|
-
if (has(obj, key)) {
|
|
370
|
-
Reflect.deleteProperty(obj, key);
|
|
87
|
+
default: {
|
|
88
|
+
throw new Error("Unexpected typeof " + typeof obj1);
|
|
371
89
|
}
|
|
372
|
-
|
|
373
|
-
|
|
90
|
+
}
|
|
91
|
+
}
|
|
92
|
+
function isCloneable(obj) {
|
|
93
|
+
return typeof obj !== "symbol" && typeof obj !== "function";
|
|
94
|
+
}
|
|
95
|
+
function shallowClone(obj) {
|
|
96
|
+
if (!isCloneable(obj)) throw new import_errors.StackAssertionError("shallowClone does not support symbols or functions", { obj });
|
|
97
|
+
if (Array.isArray(obj)) return obj.map(import_functions.identity);
|
|
98
|
+
return { ...obj };
|
|
99
|
+
}
|
|
100
|
+
function deepPlainClone(obj) {
|
|
101
|
+
if (typeof obj === "function") throw new import_errors.StackAssertionError("deepPlainClone does not support functions");
|
|
102
|
+
if (typeof obj === "symbol") throw new import_errors.StackAssertionError("deepPlainClone does not support symbols");
|
|
103
|
+
if (typeof obj !== "object" || !obj) return obj;
|
|
104
|
+
if (Array.isArray(obj)) return obj.map(deepPlainClone);
|
|
105
|
+
return Object.fromEntries(Object.entries(obj).map(([k, v]) => [k, deepPlainClone(v)]));
|
|
106
|
+
}
|
|
107
|
+
function deepMerge(baseObj, mergeObj) {
|
|
108
|
+
if ([baseObj, mergeObj, ...Object.values(baseObj), ...Object.values(mergeObj)].some((o) => !isCloneable(o))) throw new import_errors.StackAssertionError("deepMerge does not support functions or symbols", { baseObj, mergeObj });
|
|
109
|
+
const res = shallowClone(baseObj);
|
|
110
|
+
for (const [key, mergeValue] of Object.entries(mergeObj)) {
|
|
111
|
+
if (has(res, key)) {
|
|
112
|
+
const baseValue = get(res, key);
|
|
113
|
+
if (isObjectLike(baseValue) && isObjectLike(mergeValue)) {
|
|
114
|
+
set(res, key, deepMerge(baseValue, mergeValue));
|
|
115
|
+
continue;
|
|
116
|
+
}
|
|
374
117
|
}
|
|
375
|
-
|
|
376
|
-
|
|
377
|
-
|
|
378
|
-
}
|
|
118
|
+
set(res, key, mergeValue);
|
|
119
|
+
}
|
|
120
|
+
return res;
|
|
121
|
+
}
|
|
122
|
+
function typedEntries(obj) {
|
|
123
|
+
return Object.entries(obj);
|
|
124
|
+
}
|
|
125
|
+
function typedFromEntries(entries) {
|
|
126
|
+
return Object.fromEntries(entries);
|
|
127
|
+
}
|
|
128
|
+
function typedKeys(obj) {
|
|
129
|
+
return Object.keys(obj);
|
|
130
|
+
}
|
|
131
|
+
function typedValues(obj) {
|
|
132
|
+
return Object.values(obj);
|
|
133
|
+
}
|
|
134
|
+
function typedAssign(target, source) {
|
|
135
|
+
return Object.assign(target, source);
|
|
136
|
+
}
|
|
137
|
+
function filterUndefined(obj) {
|
|
138
|
+
return Object.fromEntries(Object.entries(obj).filter(([, v]) => v !== void 0));
|
|
139
|
+
}
|
|
140
|
+
function filterUndefinedOrNull(obj) {
|
|
141
|
+
return Object.fromEntries(Object.entries(obj).filter(([, v]) => v !== void 0 && v !== null));
|
|
142
|
+
}
|
|
143
|
+
function deepFilterUndefined(obj) {
|
|
144
|
+
return Object.fromEntries(Object.entries(obj).filter(([, v]) => v !== void 0).map(([k, v]) => [k, isObjectLike(v) ? deepFilterUndefined(v) : v]));
|
|
145
|
+
}
|
|
146
|
+
function pick(obj, keys) {
|
|
147
|
+
return Object.fromEntries(Object.entries(obj).filter(([k]) => keys.includes(k)));
|
|
148
|
+
}
|
|
149
|
+
function omit(obj, keys) {
|
|
150
|
+
if (!Array.isArray(keys)) throw new import_errors.StackAssertionError("omit: keys must be an array", { obj, keys });
|
|
151
|
+
return Object.fromEntries(Object.entries(obj).filter(([k]) => !keys.includes(k)));
|
|
152
|
+
}
|
|
153
|
+
function split(obj, keys) {
|
|
154
|
+
return [pick(obj, keys), omit(obj, keys)];
|
|
155
|
+
}
|
|
156
|
+
function mapValues(obj, fn) {
|
|
157
|
+
if (Array.isArray(obj)) {
|
|
158
|
+
return obj.map((v) => fn(v));
|
|
159
|
+
}
|
|
160
|
+
return Object.fromEntries(Object.entries(obj).map(([k, v]) => [k, fn(v)]));
|
|
161
|
+
}
|
|
162
|
+
function sortKeys(obj) {
|
|
163
|
+
if (Array.isArray(obj)) {
|
|
164
|
+
return [...obj];
|
|
165
|
+
}
|
|
166
|
+
return Object.fromEntries(Object.entries(obj).sort(([a], [b]) => (0, import_strings.stringCompare)(a, b)));
|
|
167
|
+
}
|
|
168
|
+
function deepSortKeys(obj) {
|
|
169
|
+
return sortKeys(mapValues(obj, (v) => isObjectLike(v) ? deepSortKeys(v) : v));
|
|
170
|
+
}
|
|
171
|
+
function set(obj, key, value) {
|
|
172
|
+
Object.defineProperty(obj, key, { value, writable: true, configurable: true, enumerable: true });
|
|
173
|
+
}
|
|
174
|
+
function get(obj, key) {
|
|
175
|
+
const descriptor = Object.getOwnPropertyDescriptor(obj, key);
|
|
176
|
+
if (!descriptor) throw new import_errors.StackAssertionError(`get: key ${String(key)} does not exist`, { obj, key });
|
|
177
|
+
return descriptor.value;
|
|
178
|
+
}
|
|
179
|
+
function getOrUndefined(obj, key) {
|
|
180
|
+
return has(obj, key) ? get(obj, key) : void 0;
|
|
181
|
+
}
|
|
182
|
+
function has(obj, key) {
|
|
183
|
+
return Object.prototype.hasOwnProperty.call(obj, key);
|
|
184
|
+
}
|
|
185
|
+
function hasAndNotUndefined(obj, key) {
|
|
186
|
+
return has(obj, key) && get(obj, key) !== void 0;
|
|
187
|
+
}
|
|
188
|
+
function deleteKey(obj, key) {
|
|
189
|
+
if (has(obj, key)) {
|
|
190
|
+
Reflect.deleteProperty(obj, key);
|
|
191
|
+
} else {
|
|
192
|
+
throw new import_errors.StackAssertionError(`deleteKey: key ${String(key)} does not exist`, { obj, key });
|
|
193
|
+
}
|
|
194
|
+
}
|
|
195
|
+
function isObjectLike(value) {
|
|
196
|
+
return (typeof value === "object" || typeof value === "function") && value !== null;
|
|
197
|
+
}
|
|
198
|
+
// Annotate the CommonJS export names for ESM import in node:
|
|
199
|
+
0 && (module.exports = {
|
|
200
|
+
deepFilterUndefined,
|
|
201
|
+
deepMerge,
|
|
202
|
+
deepPlainClone,
|
|
203
|
+
deepPlainEquals,
|
|
204
|
+
deepSortKeys,
|
|
205
|
+
deleteKey,
|
|
206
|
+
filterUndefined,
|
|
207
|
+
filterUndefinedOrNull,
|
|
208
|
+
get,
|
|
209
|
+
getOrUndefined,
|
|
210
|
+
has,
|
|
211
|
+
hasAndNotUndefined,
|
|
212
|
+
isCloneable,
|
|
213
|
+
isNotNull,
|
|
214
|
+
isObjectLike,
|
|
215
|
+
mapValues,
|
|
216
|
+
omit,
|
|
217
|
+
pick,
|
|
218
|
+
set,
|
|
219
|
+
shallowClone,
|
|
220
|
+
sortKeys,
|
|
221
|
+
split,
|
|
222
|
+
typedAssign,
|
|
223
|
+
typedEntries,
|
|
224
|
+
typedFromEntries,
|
|
225
|
+
typedKeys,
|
|
226
|
+
typedValues
|
|
227
|
+
});
|
|
228
|
+
//# sourceMappingURL=objects.js.map
|