From 5f72993871ff9c01f1a6ef38d6860ad80885fa40 Mon Sep 17 00:00:00 2001 From: Christoph Pader Date: Fri, 26 Dec 2025 01:52:30 +0000 Subject: [PATCH 1/8] chore: update to Nitro `0.32.0` --- bun.lock | 158 +++++++++++++++++++++++++++++++++---------- example/package.json | 2 +- package.json | 4 +- package/package.json | 6 +- 4 files changed, 128 insertions(+), 42 deletions(-) diff --git a/bun.lock b/bun.lock index a2a809a..a870250 100644 --- a/bun.lock +++ b/bun.lock @@ -8,7 +8,7 @@ "patch-package": "^8.0.0", "react": "19.1.1", "react-native": "0.82.1", - "react-native-nitro-modules": "0.27.2", + "react-native-nitro-modules": "0.32.0", }, "devDependencies": { "@babel/core": "^7.28.5", @@ -35,7 +35,7 @@ "eslint-config-prettier": "^10.1.8", "eslint-plugin-prettier": "^5.5.4", "jest": "^30.2.0", - "nitro-codegen": "0.27.2", + "nitrogen": "0.32.0", "prettier": "^3.6.2", "release-it": "^17.10.0", "typeorm": "0.3.27", @@ -56,8 +56,8 @@ "expo-status-bar": "^1.12.1", "react": "19.1.1", "react-native": "0.82.1", - "react-native-nitro-modules": "0.27.2", - "react-native-nitro-sqlite": "9.2.0", + "react-native-nitro-modules": "*", + "react-native-nitro-sqlite": "*", "react-native-safe-area-context": "^5.5.2", "react-native-screens": "^4.18.0", "reflect-metadata": "^0.1.13", @@ -90,22 +90,22 @@ }, "package": { "name": "react-native-nitro-sqlite", - "version": "9.2.0", + "version": "9.2.2", "dependencies": { "typeorm": "0.3.27", }, "devDependencies": { "jest": "^30.2.0", - "nitro-codegen": "0.27.2", + "nitrogen": "0.32.0", "react": "19.1.1", "react-native": "0.82.1", "react-native-builder-bob": "^0.31.0", - "react-native-nitro-modules": "0.27.2", + "react-native-nitro-modules": "0.32.0", }, "peerDependencies": { "react": ">=17.0.0", "react-native": ">=0.75.0", - "react-native-nitro-modules": ">=0.27.2", + "react-native-nitro-modules": ">=0.32.0", }, }, }, @@ -400,6 +400,10 @@ "@inquirer/figures": ["@inquirer/figures@1.0.14", "", {}, "sha512-DbFgdt+9/OZYFM+19dbpXOSeAstPy884FPy1KjDu4anWwymZeOYhMY1mdFri172htv6mvc/uvIAAi7b7tvjJBQ=="], + "@isaacs/balanced-match": ["@isaacs/balanced-match@4.0.1", "", {}, "sha512-yzMTt9lEb8Gv7zRioUilSglI0c0smZ9k5D65677DLWLtWJaXIS3CqcGyUFByYKlnUj6TkjLVs54fBl6+TiGQDQ=="], + + "@isaacs/brace-expansion": ["@isaacs/brace-expansion@5.0.0", "", { "dependencies": { "@isaacs/balanced-match": "^4.0.1" } }, "sha512-ZT55BDLV0yv0RBm2czMiZ+SqCGO7AvmOM3G/w2xhVPH+te0aKgFjmBvGlL1dH+ql2tgGO3MVrbb3jCKyvpgnxA=="], + "@isaacs/cliui": ["@isaacs/cliui@8.0.2", "", { "dependencies": { "string-width": "^5.1.2", "string-width-cjs": "npm:string-width@^4.2.0", "strip-ansi": "^7.0.1", "strip-ansi-cjs": "npm:strip-ansi@^6.0.1", "wrap-ansi": "^8.1.0", "wrap-ansi-cjs": "npm:wrap-ansi@^7.0.0" } }, "sha512-O8jcjabXaleOG9DQ0+ARXWZBTfnP4WNAqzuiJK7ll44AmxGKv/J2M4TPjxjY3znBCfvBXFzucm1twdyFybFqEA=="], "@isaacs/ttlcache": ["@isaacs/ttlcache@1.4.1", "", {}, "sha512-RQgQ4uQ+pLbqXfOmieB91ejmLwvSgv9nLx6sT6sD83s7umBypgg+OIBOBbEUiJXrfpnp9j0mRhYYdzp9uqq3lA=="], @@ -592,7 +596,7 @@ "@tootallnate/quickjs-emscripten": ["@tootallnate/quickjs-emscripten@0.23.0", "", {}, "sha512-C5Mc6rdnsaJDjO3UpGW/CQTHtCKaYlScZTly4JIu97Jxo/odCiH0ITnDXSJPTOrEKk/ycSZ0AOgTmkDtkOsvIA=="], - "@ts-morph/common": ["@ts-morph/common@0.26.1", "", { "dependencies": { "fast-glob": "^3.3.2", "minimatch": "^9.0.4", "path-browserify": "^1.0.1" } }, "sha512-Sn28TGl/4cFpcM+jwsH1wLncYq3FtN/BIpem+HOygfBWPT5pAeS5dB4VFVzV8FbnOKHpDLZmvAl4AjPEev5idA=="], + "@ts-morph/common": ["@ts-morph/common@0.28.1", "", { "dependencies": { "minimatch": "^10.0.1", "path-browserify": "^1.0.1", "tinyglobby": "^0.2.14" } }, "sha512-W74iWf7ILp1ZKNYXY5qbddNaml7e9Sedv5lvU1V8lftlitkc9Pq1A+jlH23ltDgWYeZFFEqGCD1Ies9hqu3O+g=="], "@tsconfig/react-native": ["@tsconfig/react-native@2.0.3", "", {}, "sha512-jE58snEKBd9DXfyR4+ssZmYJ/W2mOSnNrvljR0aLyQJL9JKX6vlWELHkRjb3HBbcM9Uy0hZGijXbqEAjOERW2A=="], @@ -896,7 +900,7 @@ "cli-width": ["cli-width@4.1.0", "", {}, "sha512-ouuZd4/dm2Sw5Gmqy6bGyNNNe1qt9RpmxveLSO7KcgsTnU7RXfsw+/bukWGo1abgBiMAic068rclZsO4IWmmxQ=="], - "cliui": ["cliui@8.0.1", "", { "dependencies": { "string-width": "^4.2.0", "strip-ansi": "^6.0.1", "wrap-ansi": "^7.0.0" } }, "sha512-BSeNnyus75C4//NQ9gQt1/csTXyo/8Sb+afLAkzAptFuMsod9HFokGNudZpi/oQV73hnVK+sR+5PVRMd+Dr7YQ=="], + "cliui": ["cliui@9.0.1", "", { "dependencies": { "string-width": "^7.2.0", "strip-ansi": "^7.1.0", "wrap-ansi": "^9.0.0" } }, "sha512-k7ndgKhwoQveBL+/1tqGJYNz097I7WOvwbmmU2AR5+magtbjPWQTS1C5vzGkBC8Ym8UWRzfKUzUUqFLypY4Q+w=="], "clone": ["clone@1.0.4", "", {}, "sha512-JQHZ2QMW6l3aH/j6xCqQThY/9OH4D/9ls34cgkUBiEeocRTU04tHfKPBsUK1PqZCUQM7GiA0IIXJSuXHI64Kbg=="], @@ -1060,7 +1064,7 @@ "emittery": ["emittery@0.13.1", "", {}, "sha512-DeWwawk6r5yR9jFgnDKYt4sLS0LmHJJi3ZOnb5/JdbYwj3nW+FxQnHIjhBKz8YLC7oRNPVM9NQ47I3CVx34eqQ=="], - "emoji-regex": ["emoji-regex@8.0.0", "", {}, "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A=="], + "emoji-regex": ["emoji-regex@10.6.0", "", {}, "sha512-toUI84YS5YmxW219erniWD0CIVOo46xGKColeNQRgOzDorgBi1v4D71/OFzgD9GO2UGKIv1C3Sp8DAn0+j5w7A=="], "encodeurl": ["encodeurl@2.0.0", "", {}, "sha512-Q0n9HRi4m6JuGIV1eFlmvJB7ZEVxu93IrMyiMsGC0lrMJMWzRgx6WGquyfQgZVb31vhGgXnfmPNNXmxnOkRBrg=="], @@ -1174,6 +1178,8 @@ "fb-watchman": ["fb-watchman@2.0.2", "", { "dependencies": { "bser": "2.1.1" } }, "sha512-p5161BqbuCaSnB8jIbzQHOlpgsPmK5rJVDfDKO91Axs5NC1uu3HRQm6wt9cd9/+GtQQIO53JdGXXoyDpTAsgYA=="], + "fdir": ["fdir@6.5.0", "", { "peerDependencies": { "picomatch": "^3 || ^4" }, "optionalPeers": ["picomatch"] }, "sha512-tIbYtZbucOs0BRGqPJkshJUYdL+SDH7dVM8gjy+ERp3WAUjLEFJE+02kanyHtwjWOnwrKYBiwAmM0p4kLJAnXg=="], + "file-entry-cache": ["file-entry-cache@6.0.1", "", { "dependencies": { "flat-cache": "^3.0.4" } }, "sha512-7Gps/XWymbLk2QLYK4NzpMOrYjMhdIxXuIvy2QBsLE6ljuodKvdkWs/cpyJJ3CVIVpH0Oi1Hvg1ovbMzLdFBBg=="], "fill-range": ["fill-range@7.1.1", "", { "dependencies": { "to-regex-range": "^5.0.1" } }, "sha512-YsGpe3WHLK8ZYi4tWDg2Jy3ebRz2rXowDxnld4bkQB00cc/1Zw9AWnC0i9ztDJitivtQvaI9KaLyKrc+hBW0yg=="], @@ -1680,7 +1686,7 @@ "new-github-release-url": ["new-github-release-url@2.0.0", "", { "dependencies": { "type-fest": "^2.5.1" } }, "sha512-NHDDGYudnvRutt/VhKFlX26IotXe1w0cmkDm6JGquh5bz/bDTw0LufSmH/GxTjEdpHEO+bVKFTwdrcGa/9XlKQ=="], - "nitro-codegen": ["nitro-codegen@0.27.2", "", { "dependencies": { "chalk": "^5.3.0", "react-native-nitro-modules": "^0.27.2", "ts-morph": "^25.0.0", "yargs": "^17.7.2", "zod": "^4.0.5" }, "bin": { "nitro-codegen": "lib/index.js" } }, "sha512-8s47CFGu2QYvqbKacmtpowgcj577fX60pxFiIDHyM0scT8u28thwAmy6ByskCySHiLFDO7OX6yVT+TrJHc6rQQ=="], + "nitrogen": ["nitrogen@0.32.0", "", { "dependencies": { "chalk": "^5.3.0", "react-native-nitro-modules": "^0.32.0", "ts-morph": "^27.0.0", "yargs": "^18.0.0", "zod": "^4.0.5" }, "bin": { "nitrogen": "lib/index.js" } }, "sha512-LJcBqkG3kuEfwtLHms/LTnQAXkb+N5dZn/dBYwGiCXVB94NgxvEALGDWuClM/joI+ERHE5zEtQCOJz92WYcXgQ=="], "nocache": ["nocache@3.0.4", "", {}, "sha512-WDD0bdg9mbq6F4mRxEYcPWwfA1vxd0mrvKOyxI7Xj/atfRHVeutzuWByG//jfm4uPzp0y4Kj051EORCBSQMycw=="], @@ -1854,7 +1860,7 @@ "react-native-builder-bob": ["react-native-builder-bob@0.31.0", "", { "dependencies": { "@babel/core": "^7.25.2", "@babel/plugin-transform-strict-mode": "^7.24.7", "@babel/preset-env": "^7.25.2", "@babel/preset-flow": "^7.24.7", "@babel/preset-react": "^7.24.7", "@babel/preset-typescript": "^7.24.7", "babel-plugin-module-resolver": "^5.0.2", "browserslist": "^4.20.4", "cosmiconfig": "^9.0.0", "cross-spawn": "^7.0.3", "dedent": "^0.7.0", "del": "^6.1.1", "escape-string-regexp": "^4.0.0", "fs-extra": "^10.1.0", "glob": "^8.0.3", "is-git-dirty": "^2.0.1", "json5": "^2.2.1", "kleur": "^4.1.4", "metro-config": "^0.80.9", "prompts": "^2.4.2", "which": "^2.0.2", "yargs": "^17.5.1" }, "bin": { "bob": "bin/bob" } }, "sha512-KMY4xDZTqQ/eKB4TJxHETv8MHiQfsL9056gul1c8Fn4nKuV/tk+tOfg8K4mWFXoOSgGFZy2olamb/Pr+t79cwA=="], - "react-native-nitro-modules": ["react-native-nitro-modules@0.27.2", "", { "peerDependencies": { "react": "*", "react-native": "*" } }, "sha512-wHUs6m4e1MkhV7oPMNSZwCZcoaepLNfPScc+Pm9pwgtv26sTADXnu66MzyodSl6kO6TcTC1Pf+5VyQMgesx08w=="], + "react-native-nitro-modules": ["react-native-nitro-modules@0.32.0", "", { "peerDependencies": { "react": "*", "react-native": "*" } }, "sha512-nLDsmi/H9/cLcYxArYxcTDL641JiWnAH3u2LmsFETgyqSEHvukswDTdmX6AHBRIAwXu/iUDppZyjsaRpTG6WMg=="], "react-native-nitro-sqlite": ["react-native-nitro-sqlite@workspace:package"], @@ -2040,7 +2046,7 @@ "string-natural-compare": ["string-natural-compare@3.0.1", "", {}, "sha512-n3sPwynL1nwKi3WJ6AIsClwBMa0zTi54fn2oLU6ndfTSIO05xaznjSf15PcBZU6FNWbmN5Q6cxT4V5hGvB4taw=="], - "string-width": ["string-width@4.2.3", "", { "dependencies": { "emoji-regex": "^8.0.0", "is-fullwidth-code-point": "^3.0.0", "strip-ansi": "^6.0.1" } }, "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g=="], + "string-width": ["string-width@7.2.0", "", { "dependencies": { "emoji-regex": "^10.3.0", "get-east-asian-width": "^1.0.0", "strip-ansi": "^7.1.0" } }, "sha512-tsaTIkKW9b4N+AEj+SVA+WhJzV7/zMhcSu78mLKWSk7cXMOSHsBKFWUs0fWwq8QyK3MgJBQRX6Gbi4kYbdvGkQ=="], "string-width-cjs": ["string-width@4.2.3", "", { "dependencies": { "emoji-regex": "^8.0.0", "is-fullwidth-code-point": "^3.0.0", "strip-ansi": "^6.0.1" } }, "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g=="], @@ -2092,6 +2098,8 @@ "through2": ["through2@2.0.5", "", { "dependencies": { "readable-stream": "~2.3.6", "xtend": "~4.0.1" } }, "sha512-/mrRod8xqpA+IHSLyGCQ2s8SPHiCDEeQJSep1jqLYeEUClOFG2Qsh+4FU6G9VeqpZnGW/Su8LQGc4YKni5rYSQ=="], + "tinyglobby": ["tinyglobby@0.2.15", "", { "dependencies": { "fdir": "^6.5.0", "picomatch": "^4.0.3" } }, "sha512-j2Zq4NyQYG5XMST4cbs02Ak8iJUdxRM0XI5QyxXuZOzKOINmWurp3smXu3y5wDcJrptwpSjgXHzIQxR0omXljQ=="], + "tmp": ["tmp@0.2.5", "", {}, "sha512-voyz6MApa1rQGUxT3E+BK7/ROe8itEx7vD8/HEvt4xwXucvQ5G5oeEiHkmHZJuBO21RpOf+YYm9MOivj709jow=="], "tmpl": ["tmpl@1.0.5", "", {}, "sha512-3f0uOEAQwIqGuWW2MVzYg8fV/QNnc/IpuJNG837rLuczAaLVHslWHZQj4IGiEl5Hs3kkbhwL9Ab7Hrsmuj+Smw=="], @@ -2104,7 +2112,7 @@ "ts-api-utils": ["ts-api-utils@2.1.0", "", { "peerDependencies": { "typescript": ">=4.8.4" } }, "sha512-CUgTZL1irw8u29bzrOD/nH85jqyc74D6SshFgujOIA7osm2Rz7dYH77agkx7H4FBNxDq7Cjf+IjaX/8zwFW+ZQ=="], - "ts-morph": ["ts-morph@25.0.1", "", { "dependencies": { "@ts-morph/common": "~0.26.0", "code-block-writer": "^13.0.3" } }, "sha512-QJEiTdnz1YjrB3JFhd626gX4rKHDLSjSVMvGGG4v7ONc3RBwa0Eei98G9AT9uNFDMtV54JyuXsFeC+OH0n6bXQ=="], + "ts-morph": ["ts-morph@27.0.2", "", { "dependencies": { "@ts-morph/common": "~0.28.1", "code-block-writer": "^13.0.3" } }, "sha512-fhUhgeljcrdZ+9DZND1De1029PrE+cMkIP7ooqkLRTrRLTqcki2AstsyJm0vRNbTbVCNJ0idGlbBrfqc7/nA8w=="], "tslib": ["tslib@2.8.1", "", {}, "sha512-oJFu94HQb+KVduSUQL7wnpmqnfmLsOA/nAh6b6EH0wCEoK0/mPeXU6c3wKDV83MkOuHPRHtSXKKU99IBazS/2w=="], @@ -2240,7 +2248,7 @@ "yaml": ["yaml@2.8.1", "", { "bin": { "yaml": "bin.mjs" } }, "sha512-lcYcMxX2PO9XMGvAJkJ3OsNMw+/7FKes7/hgerGUYWIoWu5j/+YQqcZr5JnPZWzOsEBgMbSbiSTn/dv/69Mkpw=="], - "yargs": ["yargs@17.7.2", "", { "dependencies": { "cliui": "^8.0.1", "escalade": "^3.1.1", "get-caller-file": "^2.0.5", "require-directory": "^2.1.1", "string-width": "^4.2.3", "y18n": "^5.0.5", "yargs-parser": "^21.1.1" } }, "sha512-7dSzzRQ++CKnNI/krKnYRV7JKKPUXMEh61soaHKg9mrWEhzFWhFnxPxGl+69cD1Ou63C13NUPCnmIcrvqCuM6w=="], + "yargs": ["yargs@18.0.0", "", { "dependencies": { "cliui": "^9.0.1", "escalade": "^3.1.1", "get-caller-file": "^2.0.5", "string-width": "^7.2.0", "y18n": "^5.0.5", "yargs-parser": "^22.0.0" } }, "sha512-4UEqdc2RYGHZc7Doyqkrqiln3p9X2DZVxaGbwhn2pi7MrRagKaOcIKe8L3OxYcbhXLgLFUS3zAYuQjKBQgmuNg=="], "yargs-parser": ["yargs-parser@21.1.1", "", {}, "sha512-tVpsJW7DdjecAiFpbIB1e3qxIQsE6NoPc5/eTdrbbIC4h0LVsWhnoa3g+m2HclBIujHzsxZ4VJVA+GUuc2/LBw=="], @@ -2336,6 +2344,8 @@ "@react-native/codegen/glob": ["glob@7.2.3", "", { "dependencies": { "fs.realpath": "^1.0.0", "inflight": "^1.0.4", "inherits": "2", "minimatch": "^3.1.1", "once": "^1.3.0", "path-is-absolute": "^1.0.0" } }, "sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q=="], + "@react-native/codegen/yargs": ["yargs@17.7.2", "", { "dependencies": { "cliui": "^8.0.1", "escalade": "^3.1.1", "get-caller-file": "^2.0.5", "require-directory": "^2.1.1", "string-width": "^4.2.3", "y18n": "^5.0.5", "yargs-parser": "^21.1.1" } }, "sha512-7dSzzRQ++CKnNI/krKnYRV7JKKPUXMEh61soaHKg9mrWEhzFWhFnxPxGl+69cD1Ou63C13NUPCnmIcrvqCuM6w=="], + "@react-native/community-cli-plugin/semver": ["semver@7.7.3", "", { "bin": { "semver": "bin/semver.js" } }, "sha512-SdsKMrI9TdgjdweUSR9MweHA4EJ8YxHn8DFaDisvhVlUOe4BF1tLD7GAj0lIqWVl+dPb/rExr0Btby5loQm20Q=="], "@react-native/dev-middleware/open": ["open@7.4.2", "", { "dependencies": { "is-docker": "^2.0.0", "is-wsl": "^2.1.1" } }, "sha512-MVHddDVweXZF3awtlAS+6pgKLlm/JgxZ90+/NBurBoQctVOOB/zDdVjcyPzQ+0laDGbsWgrRkflI65sQeOgT9Q=="], @@ -2348,7 +2358,7 @@ "@sinonjs/commons/type-detect": ["type-detect@4.0.8", "", {}, "sha512-0fr/mIH1dlO+x7TlcMy+bIDqKPsw/70tVyeHW787goQjhmqaZe10uwLujubK9q9Lg6Fiho1KUKDYz0Z7k7g5/g=="], - "@ts-morph/common/minimatch": ["minimatch@9.0.5", "", { "dependencies": { "brace-expansion": "^2.0.1" } }, "sha512-G6T0ZX48xgozx7587koeX9Ys2NYy6Gmv//P89sEte9V9whIapMNF4idKxnW2QtCcLiTWlb/wfCabAtAFWhhBow=="], + "@ts-morph/common/minimatch": ["minimatch@10.1.1", "", { "dependencies": { "@isaacs/brace-expansion": "^5.0.0" } }, "sha512-enIvLvRAFZYXJzkCYG5RKmPfrFArdLv+R+lbQ53BmIMLIry74bjKzX6iHAm8WYamJkhSSEabrWN5D97XnKObjQ=="], "@typescript-eslint/eslint-plugin/ignore": ["ignore@7.0.5", "", {}, "sha512-Hs59xBNfUIunMFgWAbGX5cq6893IbWg4KnrjbYwX3tx0ztorVgTDA6B2sxf8ejHJ4wz8BqGUMYlnzNBer5NvGg=="], @@ -2360,6 +2370,8 @@ "accepts/negotiator": ["negotiator@0.6.3", "", {}, "sha512-+EUsqGPLsM+j/zdChZjsnX51g4XrHFOIXwfnCVPGlQk/k5giakcKsuxCObBRu6DSm9opw/O6slWbJdghQM4bBg=="], + "ansi-align/string-width": ["string-width@4.2.3", "", { "dependencies": { "emoji-regex": "^8.0.0", "is-fullwidth-code-point": "^3.0.0", "strip-ansi": "^6.0.1" } }, "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g=="], + "ansi-escapes/type-fest": ["type-fest@0.21.3", "", {}, "sha512-t0rzBq87m3fVcduHDUFhKmyyX+9eo6WQjZvf51Ea/M0Q7+T374Jp1aUiyUl0GKxp8M/OETVHSDvmkyPgvX+X2w=="], "ansi-fragments/strip-ansi": ["strip-ansi@5.2.0", "", { "dependencies": { "ansi-regex": "^4.1.0" } }, "sha512-DuRs1gKbBqsMKIZlrffwlug8MHkcnpjs5VPmL1PAh+mA30U0DTotfDZ0d2UUsXpPmPmMMJ6W773MaA3J+lbiWA=="], @@ -2378,8 +2390,6 @@ "boxen/chalk": ["chalk@5.6.2", "", {}, "sha512-7NzBL0rN6fMUW+f7A6Io4h40qQlG+xGmtMxfbnH/K7TAtt8JQWVQK+6g0UXKMeVJoyV5EkkNsErQ8pVD3bLHbA=="], - "boxen/string-width": ["string-width@7.2.0", "", { "dependencies": { "emoji-regex": "^10.3.0", "get-east-asian-width": "^1.0.0", "strip-ansi": "^7.1.0" } }, "sha512-tsaTIkKW9b4N+AEj+SVA+WhJzV7/zMhcSu78mLKWSk7cXMOSHsBKFWUs0fWwq8QyK3MgJBQRX6Gbi4kYbdvGkQ=="], - "boxen/type-fest": ["type-fest@4.41.0", "", {}, "sha512-TeTSQ6H5YHvpqVwBRcnLDCBnDOHWYu7IvGbHT6N8AOymcr9PJGjc1GTtiWZTYg0NCgYwvnYWEkVChQAr9bjfwA=="], "boxen/wrap-ansi": ["wrap-ansi@9.0.2", "", { "dependencies": { "ansi-styles": "^6.2.1", "string-width": "^7.0.0", "strip-ansi": "^7.1.0" } }, "sha512-42AtmgqjV+X1VpdOfyTGOYRi0/zsoLqtXQckTmqTeybT+BDIbM/Guxo7x3pE2vtpr1ok6xRqM9OpBe+Jyoqyww=="], @@ -2394,7 +2404,9 @@ "chromium-edge-launcher/is-wsl": ["is-wsl@2.2.0", "", { "dependencies": { "is-docker": "^2.0.0" } }, "sha512-fKzAra0rGJUUBwGBgNkHZuToZcn+TtXHpeCgmkMJMMYx1sQDYaCSyjJBSCa2nH1DGm7s3n1oBnohoVTBaN7Lww=="], - "cliui/wrap-ansi": ["wrap-ansi@7.0.0", "", { "dependencies": { "ansi-styles": "^4.0.0", "string-width": "^4.1.0", "strip-ansi": "^6.0.0" } }, "sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q=="], + "cliui/strip-ansi": ["strip-ansi@7.1.2", "", { "dependencies": { "ansi-regex": "^6.0.1" } }, "sha512-gmBGslpoQJtgnMAvOVqGZpEz9dyoKTCzy2nfz/n8aIFhN/jCE/rCmcxabB6jOOHV+0WNnylOxaxBQPSvcWklhA=="], + + "cliui/wrap-ansi": ["wrap-ansi@9.0.2", "", { "dependencies": { "ansi-styles": "^6.2.1", "string-width": "^7.0.0", "strip-ansi": "^7.1.0" } }, "sha512-42AtmgqjV+X1VpdOfyTGOYRi0/zsoLqtXQckTmqTeybT+BDIbM/Guxo7x3pE2vtpr1ok6xRqM9OpBe+Jyoqyww=="], "compare-func/dot-prop": ["dot-prop@5.3.0", "", { "dependencies": { "is-obj": "^2.0.0" } }, "sha512-QM8q3zDe58hqUqjraQOmzZ1LIH9SWQJTlEKCH4kJ2oQvLZk7RbQXvtDM2XEq3fwkV9CCvvH4LA0AV+ogFsBM2Q=="], @@ -2454,6 +2466,8 @@ "inquirer/ora": ["ora@5.4.1", "", { "dependencies": { "bl": "^4.1.0", "chalk": "^4.1.0", "cli-cursor": "^3.1.0", "cli-spinners": "^2.5.0", "is-interactive": "^1.0.0", "is-unicode-supported": "^0.1.0", "log-symbols": "^4.1.0", "strip-ansi": "^6.0.0", "wcwidth": "^1.0.1" } }, "sha512-5b6Y85tPxZZ7QytO+BQzysW31HJku27cRIlkbAXaNx+BdcVi+LlRFmVXzeF6a7JCwJpyw5c4b+YSVImQIrBpuQ=="], + "inquirer/string-width": ["string-width@4.2.3", "", { "dependencies": { "emoji-regex": "^8.0.0", "is-fullwidth-code-point": "^3.0.0", "strip-ansi": "^6.0.1" } }, "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g=="], + "is-git-dirty/execa": ["execa@4.1.0", "", { "dependencies": { "cross-spawn": "^7.0.0", "get-stream": "^5.0.0", "human-signals": "^1.1.1", "is-stream": "^2.0.0", "merge-stream": "^2.0.0", "npm-run-path": "^4.0.0", "onetime": "^5.1.0", "signal-exit": "^3.0.2", "strip-final-newline": "^2.0.0" } }, "sha512-j5W0//W7f8UxAn8hXVnwG8tLwdiUy4FJLcSupCg6maBYZDpyBvTApK7KyuI4bKj8KOh1r2YH+6ucuYtJv1bTZA=="], "is-git-repository/execa": ["execa@4.1.0", "", { "dependencies": { "cross-spawn": "^7.0.0", "get-stream": "^5.0.0", "human-signals": "^1.1.1", "is-stream": "^2.0.0", "merge-stream": "^2.0.0", "npm-run-path": "^4.0.0", "onetime": "^5.1.0", "signal-exit": "^3.0.2", "strip-final-newline": "^2.0.0" } }, "sha512-j5W0//W7f8UxAn8hXVnwG8tLwdiUy4FJLcSupCg6maBYZDpyBvTApK7KyuI4bKj8KOh1r2YH+6ucuYtJv1bTZA=="], @@ -2484,6 +2498,8 @@ "jest-cli/jest-validate": ["jest-validate@30.2.0", "", { "dependencies": { "@jest/get-type": "30.1.0", "@jest/types": "30.2.0", "camelcase": "^6.3.0", "chalk": "^4.1.2", "leven": "^3.1.0", "pretty-format": "30.2.0" } }, "sha512-FBGWi7dP2hpdi8nBoWxSsLvBFewKAg0+uSQwBaof4Y4DPgBabXgpSYC5/lR7VmnIlSpASmCi/ntRWPbv7089Pw=="], + "jest-cli/yargs": ["yargs@17.7.2", "", { "dependencies": { "cliui": "^8.0.1", "escalade": "^3.1.1", "get-caller-file": "^2.0.5", "require-directory": "^2.1.1", "string-width": "^4.2.3", "y18n": "^5.0.5", "yargs-parser": "^21.1.1" } }, "sha512-7dSzzRQ++CKnNI/krKnYRV7JKKPUXMEh61soaHKg9mrWEhzFWhFnxPxGl+69cD1Ou63C13NUPCnmIcrvqCuM6w=="], + "jest-config/babel-jest": ["babel-jest@30.2.0", "", { "dependencies": { "@jest/transform": "30.2.0", "@types/babel__core": "^7.20.5", "babel-plugin-istanbul": "^7.0.1", "babel-preset-jest": "30.2.0", "chalk": "^4.1.2", "graceful-fs": "^4.2.11", "slash": "^3.0.0" }, "peerDependencies": { "@babel/core": "^7.11.0 || ^8.0.0-0" } }, "sha512-0YiBEOxWqKkSQWL9nNGGEgndoeL0ZpWrbLMNL5u/Kaxrli3Eaxlt3ZtIDktEvXt4L/R9r3ODr2zKwGM/2BjxVw=="], "jest-config/glob": ["glob@10.4.5", "", { "dependencies": { "foreground-child": "^3.1.0", "jackspeak": "^3.1.2", "minimatch": "^9.0.4", "minipass": "^7.1.2", "package-json-from-dist": "^1.0.0", "path-scurry": "^1.11.1" }, "bin": { "glob": "dist/esm/bin.mjs" } }, "sha512-7Bv8RF0k6xjo7d4A/PxYLbUCfb6c+Vpd2/mB2yRDlew7Jb5hEXiCD9ibfO7wpk8i4sevK6DFny9h7EYbM3/sHg=="], @@ -2582,6 +2598,8 @@ "metro/ws": ["ws@7.5.10", "", { "peerDependencies": { "bufferutil": "^4.0.1", "utf-8-validate": "^5.0.2" }, "optionalPeers": ["bufferutil", "utf-8-validate"] }, "sha512-+dbF1tHwZpXcbOJdVOkzLDxZP1ailvSxM6ZweXTegylPny803bFhA+vqBYw4s31NSAk4S2Qz+AKXK9a4wkdjcQ=="], + "metro/yargs": ["yargs@17.7.2", "", { "dependencies": { "cliui": "^8.0.1", "escalade": "^3.1.1", "get-caller-file": "^2.0.5", "require-directory": "^2.1.1", "string-width": "^4.2.3", "y18n": "^5.0.5", "yargs-parser": "^21.1.1" } }, "sha512-7dSzzRQ++CKnNI/krKnYRV7JKKPUXMEh61soaHKg9mrWEhzFWhFnxPxGl+69cD1Ou63C13NUPCnmIcrvqCuM6w=="], + "mocha/glob": ["glob@8.1.0", "", { "dependencies": { "fs.realpath": "^1.0.0", "inflight": "^1.0.4", "inherits": "2", "minimatch": "^5.0.1", "once": "^1.3.0" } }, "sha512-r8hpEjiQEYlF2QU0df3dS+nxxSIreXQS1qRhMJM0Q5NDdR386C7jb7Hwwod8Fgiuex+k0GFjgft18yvxm5XoCQ=="], "mocha/minimatch": ["minimatch@5.1.6", "", { "dependencies": { "brace-expansion": "^2.0.1" } }, "sha512-lKwV/1brpG6mBUFHtb7NUmtABCb2WZZmm2wNiOA5hAb8VdCS4B3dtMWyvcoViccwAW/COERjXLt0zP1zXUN26g=="], @@ -2592,7 +2610,7 @@ "new-github-release-url/type-fest": ["type-fest@2.19.0", "", {}, "sha512-RAH822pAdBgcNMAfWnCBU3CFZcfZ/i1eZjwFU/dsLKumyuuP3niueg2UAukXYF0E2AAoc82ZSSf9J0WQBinzHA=="], - "nitro-codegen/chalk": ["chalk@5.6.2", "", {}, "sha512-7NzBL0rN6fMUW+f7A6Io4h40qQlG+xGmtMxfbnH/K7TAtt8JQWVQK+6g0UXKMeVJoyV5EkkNsErQ8pVD3bLHbA=="], + "nitrogen/chalk": ["chalk@5.6.2", "", {}, "sha512-7NzBL0rN6fMUW+f7A6Io4h40qQlG+xGmtMxfbnH/K7TAtt8JQWVQK+6g0UXKMeVJoyV5EkkNsErQ8pVD3bLHbA=="], "normalize-package-data/semver": ["semver@7.7.3", "", { "bin": { "semver": "bin/semver.js" } }, "sha512-SdsKMrI9TdgjdweUSR9MweHA4EJ8YxHn8DFaDisvhVlUOe4BF1tLD7GAj0lIqWVl+dPb/rExr0Btby5loQm20Q=="], @@ -2600,8 +2618,6 @@ "ora/log-symbols": ["log-symbols@6.0.0", "", { "dependencies": { "chalk": "^5.3.0", "is-unicode-supported": "^1.3.0" } }, "sha512-i24m8rpwhmPIS4zscNzK6MSEhk0DUWa/8iYQWxhffV8jkI4Phvs3F+quL5xvS0gdQR0FyTCMMH33Y78dDTzzIw=="], - "ora/string-width": ["string-width@7.2.0", "", { "dependencies": { "emoji-regex": "^10.3.0", "get-east-asian-width": "^1.0.0", "strip-ansi": "^7.1.0" } }, "sha512-tsaTIkKW9b4N+AEj+SVA+WhJzV7/zMhcSu78mLKWSk7cXMOSHsBKFWUs0fWwq8QyK3MgJBQRX6Gbi4kYbdvGkQ=="], - "ora/strip-ansi": ["strip-ansi@7.1.2", "", { "dependencies": { "ansi-regex": "^6.0.1" } }, "sha512-gmBGslpoQJtgnMAvOVqGZpEz9dyoKTCzy2nfz/n8aIFhN/jCE/rCmcxabB6jOOHV+0WNnylOxaxBQPSvcWklhA=="], "package-json/semver": ["semver@7.7.3", "", { "bin": { "semver": "bin/semver.js" } }, "sha512-SdsKMrI9TdgjdweUSR9MweHA4EJ8YxHn8DFaDisvhVlUOe4BF1tLD7GAj0lIqWVl+dPb/rExr0Btby5loQm20Q=="], @@ -2644,6 +2660,8 @@ "react-native/semver": ["semver@7.7.3", "", { "bin": { "semver": "bin/semver.js" } }, "sha512-SdsKMrI9TdgjdweUSR9MweHA4EJ8YxHn8DFaDisvhVlUOe4BF1tLD7GAj0lIqWVl+dPb/rExr0Btby5loQm20Q=="], + "react-native/yargs": ["yargs@17.7.2", "", { "dependencies": { "cliui": "^8.0.1", "escalade": "^3.1.1", "get-caller-file": "^2.0.5", "require-directory": "^2.1.1", "string-width": "^4.2.3", "y18n": "^5.0.5", "yargs-parser": "^21.1.1" } }, "sha512-7dSzzRQ++CKnNI/krKnYRV7JKKPUXMEh61soaHKg9mrWEhzFWhFnxPxGl+69cD1Ou63C13NUPCnmIcrvqCuM6w=="], + "react-native-builder-bob/dedent": ["dedent@0.7.0", "", {}, "sha512-Q6fKUPqnAHAyhiUgFU7BUzLiv0kd8saH9al7tnu5Q/okj6dnupxyTgFIBjVzJATdfIAm9NAsvXNzjaKa+bxVyA=="], "react-native-builder-bob/fs-extra": ["fs-extra@10.1.0", "", { "dependencies": { "graceful-fs": "^4.2.0", "jsonfile": "^6.0.1", "universalify": "^2.0.0" } }, "sha512-oRXApq54ETRj4eMiFzGnHWGy+zo5raudjuxN0b8H7s/RU2oW0Wvsx9O0ACRN/kRq9E8Vu/ReskGB5o3ji+FzHQ=="], @@ -2652,6 +2670,8 @@ "react-native-builder-bob/metro-config": ["metro-config@0.80.12", "", { "dependencies": { "connect": "^3.6.5", "cosmiconfig": "^5.0.5", "flow-enums-runtime": "^0.0.6", "jest-validate": "^29.6.3", "metro": "0.80.12", "metro-cache": "0.80.12", "metro-core": "0.80.12", "metro-runtime": "0.80.12" } }, "sha512-4rwOWwrhm62LjB12ytiuR5NgK1ZBNr24/He8mqCsC+HXZ+ATbrewLNztzbAZHtFsrxP4D4GLTGgh96pCpYLSAQ=="], + "react-native-builder-bob/yargs": ["yargs@17.7.2", "", { "dependencies": { "cliui": "^8.0.1", "escalade": "^3.1.1", "get-caller-file": "^2.0.5", "require-directory": "^2.1.1", "string-width": "^4.2.3", "y18n": "^5.0.5", "yargs-parser": "^21.1.1" } }, "sha512-7dSzzRQ++CKnNI/krKnYRV7JKKPUXMEh61soaHKg9mrWEhzFWhFnxPxGl+69cD1Ou63C13NUPCnmIcrvqCuM6w=="], + "read-pkg/parse-json": ["parse-json@7.1.1", "", { "dependencies": { "@babel/code-frame": "^7.21.4", "error-ex": "^1.3.2", "json-parse-even-better-errors": "^3.0.0", "lines-and-columns": "^2.0.3", "type-fest": "^3.8.0" } }, "sha512-SgOTCX/EZXtZxBE5eJ97P4yGM5n37BwRU+YMsH4vNzFqJV/oWFXXCmwFlgWUM4PrakybVOueJJ6pwHqSVhTFDw=="], "read-pkg/type-fest": ["type-fest@4.41.0", "", {}, "sha512-TeTSQ6H5YHvpqVwBRcnLDCBnDOHWYu7IvGbHT6N8AOymcr9PJGjc1GTtiWZTYg0NCgYwvnYWEkVChQAr9bjfwA=="], @@ -2694,6 +2714,10 @@ "stacktrace-parser/type-fest": ["type-fest@0.7.1", "", {}, "sha512-Ne2YiiGN8bmrmJJEuTWTLJR32nh/JdL1+PSicowtNb0WFpn59GK8/lfD61bVtzguz7b3PBt74nxpv/Pw5po5Rg=="], + "string-width/strip-ansi": ["strip-ansi@7.1.2", "", { "dependencies": { "ansi-regex": "^6.0.1" } }, "sha512-gmBGslpoQJtgnMAvOVqGZpEz9dyoKTCzy2nfz/n8aIFhN/jCE/rCmcxabB6jOOHV+0WNnylOxaxBQPSvcWklhA=="], + + "string-width-cjs/emoji-regex": ["emoji-regex@8.0.0", "", {}, "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A=="], + "terser/commander": ["commander@2.20.3", "", {}, "sha512-GpVkmM8vF2vQUkj2LvZmD35JxeJOLCwJ9cUkugyk2nuhbv3+mJvpLYYt+0+USMxE+oj+ey/lJEnhZw75x/OMcQ=="], "terser/source-map-support": ["source-map-support@0.5.21", "", { "dependencies": { "buffer-from": "^1.0.0", "source-map": "^0.6.0" } }, "sha512-uBHU3L3czsIyYXKX88fdrGovxdSCoTGDRZ6SYXtSRxLZUzHg5P/66Ht6uoUlHu9EZod+inXhKo3qQgwXUT/y1w=="], @@ -2702,16 +2726,24 @@ "through2/readable-stream": ["readable-stream@2.3.8", "", { "dependencies": { "core-util-is": "~1.0.0", "inherits": "~2.0.3", "isarray": "~1.0.0", "process-nextick-args": "~2.0.0", "safe-buffer": "~5.1.1", "string_decoder": "~1.1.1", "util-deprecate": "~1.0.1" } }, "sha512-8p0AUk4XODgIewSi0l8Epjs+EVnWiK7NoDIEGU0HhE7+ZyY8D1IMY7odu5lRrFXGg71L15KG8QrPmum45RTtdA=="], + "tinyglobby/picomatch": ["picomatch@4.0.3", "", {}, "sha512-5gTmgEY/sqK6gFXLIsQNH19lWb4ebPDLA4SdLP7dsWkIXHWlG66oPuVvXSGFPppYZz8ZDZq0dYYrbHfBCVUb1Q=="], + "typeorm/glob": ["glob@10.4.5", "", { "dependencies": { "foreground-child": "^3.1.0", "jackspeak": "^3.1.2", "minimatch": "^9.0.4", "minipass": "^7.1.2", "package-json-from-dist": "^1.0.0", "path-scurry": "^1.11.1" }, "bin": { "glob": "dist/esm/bin.mjs" } }, "sha512-7Bv8RF0k6xjo7d4A/PxYLbUCfb6c+Vpd2/mB2yRDlew7Jb5hEXiCD9ibfO7wpk8i4sevK6DFny9h7EYbM3/sHg=="], + "typeorm/yargs": ["yargs@17.7.2", "", { "dependencies": { "cliui": "^8.0.1", "escalade": "^3.1.1", "get-caller-file": "^2.0.5", "require-directory": "^2.1.1", "string-width": "^4.2.3", "y18n": "^5.0.5", "yargs-parser": "^21.1.1" } }, "sha512-7dSzzRQ++CKnNI/krKnYRV7JKKPUXMEh61soaHKg9mrWEhzFWhFnxPxGl+69cD1Ou63C13NUPCnmIcrvqCuM6w=="], + "update-notifier/chalk": ["chalk@5.6.2", "", {}, "sha512-7NzBL0rN6fMUW+f7A6Io4h40qQlG+xGmtMxfbnH/K7TAtt8JQWVQK+6g0UXKMeVJoyV5EkkNsErQ8pVD3bLHbA=="], "update-notifier/semver": ["semver@7.7.3", "", { "bin": { "semver": "bin/semver.js" } }, "sha512-SdsKMrI9TdgjdweUSR9MweHA4EJ8YxHn8DFaDisvhVlUOe4BF1tLD7GAj0lIqWVl+dPb/rExr0Btby5loQm20Q=="], - "widest-line/string-width": ["string-width@7.2.0", "", { "dependencies": { "emoji-regex": "^10.3.0", "get-east-asian-width": "^1.0.0", "strip-ansi": "^7.1.0" } }, "sha512-tsaTIkKW9b4N+AEj+SVA+WhJzV7/zMhcSu78mLKWSk7cXMOSHsBKFWUs0fWwq8QyK3MgJBQRX6Gbi4kYbdvGkQ=="], + "wrap-ansi/string-width": ["string-width@4.2.3", "", { "dependencies": { "emoji-regex": "^8.0.0", "is-fullwidth-code-point": "^3.0.0", "strip-ansi": "^6.0.1" } }, "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g=="], + + "wrap-ansi-cjs/string-width": ["string-width@4.2.3", "", { "dependencies": { "emoji-regex": "^8.0.0", "is-fullwidth-code-point": "^3.0.0", "strip-ansi": "^6.0.1" } }, "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g=="], "write-file-atomic/signal-exit": ["signal-exit@4.1.0", "", {}, "sha512-bzyZ1e88w9O1iNJbKnOlvYTrWPDl46O1bG0D3XInv+9tkPrxrN8jUUTiFlDkkmKWgn1M6CfIA13SuGqOa9Korw=="], + "yargs/yargs-parser": ["yargs-parser@22.0.0", "", {}, "sha512-rwu/ClNdSMpkSrUb+d6BRsSkLUq1fmfsY6TOpYzTwvwkg1/NRG85KBy3kq++A8LKQwX6lsu+aWad+2khvuXrqw=="], + "@isaacs/cliui/string-width/emoji-regex": ["emoji-regex@9.2.2", "", {}, "sha512-L18DaJsXSUk2+42pv8mLs5jJT2hqFkFE4j21wOmgbUqsZ2hL72NsUU785g9RXgo3s0ZNgVl42TiHp3ZtOv/Vyg=="], "@isaacs/cliui/strip-ansi/ansi-regex": ["ansi-regex@6.2.2", "", {}, "sha512-Bq3SmSpyFHaWjPk8If9yc6svM8c56dB5BAtW4Qbw5jHTwwXXcTLoRMkpDJp6VL0XzlWaCHTXrkFURMYmD0sLqg=="], @@ -2776,12 +2808,16 @@ "@react-native-community/cli-tools/ora/is-unicode-supported": ["is-unicode-supported@0.1.0", "", {}, "sha512-knxG2q4UC3u8stRGyAVJCOdxFmv5DZiRcdlIaAQXAbSfJya+OhopNotLQrstBhququ4ZpuKbDc/8S6mgXgPFPw=="], - "@react-native/dev-middleware/open/is-wsl": ["is-wsl@2.2.0", "", { "dependencies": { "is-docker": "^2.0.0" } }, "sha512-fKzAra0rGJUUBwGBgNkHZuToZcn+TtXHpeCgmkMJMMYx1sQDYaCSyjJBSCa2nH1DGm7s3n1oBnohoVTBaN7Lww=="], + "@react-native/codegen/yargs/cliui": ["cliui@8.0.1", "", { "dependencies": { "string-width": "^4.2.0", "strip-ansi": "^6.0.1", "wrap-ansi": "^7.0.0" } }, "sha512-BSeNnyus75C4//NQ9gQt1/csTXyo/8Sb+afLAkzAptFuMsod9HFokGNudZpi/oQV73hnVK+sR+5PVRMd+Dr7YQ=="], - "@ts-morph/common/minimatch/brace-expansion": ["brace-expansion@2.0.2", "", { "dependencies": { "balanced-match": "^1.0.0" } }, "sha512-Jt0vHyM+jmUBqojB7E1NIYadt0vI0Qxjxd2TErW94wDz+E2LAm5vKMXXwg6ZZBTHPuUlDgQHKXvjGBdfcF1ZDQ=="], + "@react-native/codegen/yargs/string-width": ["string-width@4.2.3", "", { "dependencies": { "emoji-regex": "^8.0.0", "is-fullwidth-code-point": "^3.0.0", "strip-ansi": "^6.0.1" } }, "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g=="], + + "@react-native/dev-middleware/open/is-wsl": ["is-wsl@2.2.0", "", { "dependencies": { "is-docker": "^2.0.0" } }, "sha512-fKzAra0rGJUUBwGBgNkHZuToZcn+TtXHpeCgmkMJMMYx1sQDYaCSyjJBSCa2nH1DGm7s3n1oBnohoVTBaN7Lww=="], "@typescript-eslint/typescript-estree/minimatch/brace-expansion": ["brace-expansion@2.0.2", "", { "dependencies": { "balanced-match": "^1.0.0" } }, "sha512-Jt0vHyM+jmUBqojB7E1NIYadt0vI0Qxjxd2TErW94wDz+E2LAm5vKMXXwg6ZZBTHPuUlDgQHKXvjGBdfcF1ZDQ=="], + "ansi-align/string-width/emoji-regex": ["emoji-regex@8.0.0", "", {}, "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A=="], + "ansi-fragments/strip-ansi/ansi-regex": ["ansi-regex@4.1.1", "", {}, "sha512-ILlv4k/3f6vfQ4OoP2AGvirOktlQ98ZEL1k9FaQjxa3L1abBgbuTDAdPOpvbGncC0BTVQrl+OM8xZGK6tWXt7g=="], "babel-jest/@jest/transform/@jest/types": ["@jest/types@29.6.3", "", { "dependencies": { "@jest/schemas": "^29.6.3", "@types/istanbul-lib-coverage": "^2.0.0", "@types/istanbul-reports": "^3.0.0", "@types/node": "*", "@types/yargs": "^17.0.8", "chalk": "^4.0.0" } }, "sha512-u3UPsIilWKOM3F9CXtrG8LEJmNxwoCQC/XVj4IKYXvvpx7QIi/Kg1LI5uDmDpKlac62NUtX7eLjRh+jVZcLOzw=="], @@ -2794,14 +2830,14 @@ "body-parser/debug/ms": ["ms@2.0.0", "", {}, "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A=="], - "boxen/string-width/emoji-regex": ["emoji-regex@10.6.0", "", {}, "sha512-toUI84YS5YmxW219erniWD0CIVOo46xGKColeNQRgOzDorgBi1v4D71/OFzgD9GO2UGKIv1C3Sp8DAn0+j5w7A=="], - - "boxen/string-width/strip-ansi": ["strip-ansi@7.1.2", "", { "dependencies": { "ansi-regex": "^6.0.1" } }, "sha512-gmBGslpoQJtgnMAvOVqGZpEz9dyoKTCzy2nfz/n8aIFhN/jCE/rCmcxabB6jOOHV+0WNnylOxaxBQPSvcWklhA=="], - "boxen/wrap-ansi/ansi-styles": ["ansi-styles@6.2.3", "", {}, "sha512-4Dj6M28JB+oAH8kFkTLUo+a2jwOFkuqb3yucU0CANcRRUbxS0cP0nZYCGjcc3BNXwRIsUVmDGgzawme7zvJHvg=="], "boxen/wrap-ansi/strip-ansi": ["strip-ansi@7.1.2", "", { "dependencies": { "ansi-regex": "^6.0.1" } }, "sha512-gmBGslpoQJtgnMAvOVqGZpEz9dyoKTCzy2nfz/n8aIFhN/jCE/rCmcxabB6jOOHV+0WNnylOxaxBQPSvcWklhA=="], + "cliui/strip-ansi/ansi-regex": ["ansi-regex@6.2.2", "", {}, "sha512-Bq3SmSpyFHaWjPk8If9yc6svM8c56dB5BAtW4Qbw5jHTwwXXcTLoRMkpDJp6VL0XzlWaCHTXrkFURMYmD0sLqg=="], + + "cliui/wrap-ansi/ansi-styles": ["ansi-styles@6.2.3", "", {}, "sha512-4Dj6M28JB+oAH8kFkTLUo+a2jwOFkuqb3yucU0CANcRRUbxS0cP0nZYCGjcc3BNXwRIsUVmDGgzawme7zvJHvg=="], + "compression/debug/ms": ["ms@2.0.0", "", {}, "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A=="], "connect/debug/ms": ["ms@2.0.0", "", {}, "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A=="], @@ -2820,6 +2856,8 @@ "inquirer/ora/is-unicode-supported": ["is-unicode-supported@0.1.0", "", {}, "sha512-knxG2q4UC3u8stRGyAVJCOdxFmv5DZiRcdlIaAQXAbSfJya+OhopNotLQrstBhququ4ZpuKbDc/8S6mgXgPFPw=="], + "inquirer/string-width/emoji-regex": ["emoji-regex@8.0.0", "", {}, "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A=="], + "is-git-dirty/execa/get-stream": ["get-stream@5.2.0", "", { "dependencies": { "pump": "^3.0.0" } }, "sha512-nBF+F1rAZVCu/p7rjzgA+Yb4lfYXrpl7a6VmJrU8wF9I1CKvP/QwPNZHnOlwbTkY6dvtFIzFMSyQXbLoTQPRpA=="], "is-git-dirty/execa/human-signals": ["human-signals@1.1.1", "", {}, "sha512-SEQu7vl8KjNL2eoGBLF3+wAjpsNfA9XMlXAYj/3EdaNfAlxKthD1xjEQfGOUhllCGGJVNY34bRr6lPINhNjyZw=="], @@ -2848,6 +2886,10 @@ "jest-cli/jest-validate/pretty-format": ["pretty-format@30.2.0", "", { "dependencies": { "@jest/schemas": "30.0.5", "ansi-styles": "^5.2.0", "react-is": "^18.3.1" } }, "sha512-9uBdv/B4EefsuAL+pWqueZyZS2Ba+LxfFeQ9DN14HU4bN8bhaxKdkpjpB6fs9+pSjIBu+FXQHImEg8j/Lw0+vA=="], + "jest-cli/yargs/cliui": ["cliui@8.0.1", "", { "dependencies": { "string-width": "^4.2.0", "strip-ansi": "^6.0.1", "wrap-ansi": "^7.0.0" } }, "sha512-BSeNnyus75C4//NQ9gQt1/csTXyo/8Sb+afLAkzAptFuMsod9HFokGNudZpi/oQV73hnVK+sR+5PVRMd+Dr7YQ=="], + + "jest-cli/yargs/string-width": ["string-width@4.2.3", "", { "dependencies": { "emoji-regex": "^8.0.0", "is-fullwidth-code-point": "^3.0.0", "strip-ansi": "^6.0.1" } }, "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g=="], + "jest-config/babel-jest/babel-plugin-istanbul": ["babel-plugin-istanbul@7.0.1", "", { "dependencies": { "@babel/helper-plugin-utils": "^7.0.0", "@istanbuljs/load-nyc-config": "^1.0.0", "@istanbuljs/schema": "^0.1.3", "istanbul-lib-instrument": "^6.0.2", "test-exclude": "^6.0.0" } }, "sha512-D8Z6Qm8jCvVXtIRkBnqNHX0zJ37rQcFJ9u8WOS6tkYOsRdHBzypCstaxWiu5ZIlqQtviRYbgnRLSoCEvjqcqbA=="], "jest-config/babel-jest/babel-preset-jest": ["babel-preset-jest@30.2.0", "", { "dependencies": { "babel-plugin-jest-hoist": "30.2.0", "babel-preset-current-node-syntax": "^1.2.0" }, "peerDependencies": { "@babel/core": "^7.11.0 || ^8.0.0-beta.1" } }, "sha512-US4Z3NOieAQumwFnYdUWKvUKh8+YSnS/gB3t6YBiz0bskpu7Pine8pPCheNxlPEW4wnUkma2a94YuW2q3guvCQ=="], @@ -2938,17 +2980,23 @@ "logkitty/yargs/find-up": ["find-up@4.1.0", "", { "dependencies": { "locate-path": "^5.0.0", "path-exists": "^4.0.0" } }, "sha512-PpOwAdQ/YlXQ2vj8a3h8IipDuYRi3wceVQQGYWxNINccq40Anw7BlsEXCMbt1Zt+OLA6Fq9suIpIWD0OsnISlw=="], + "logkitty/yargs/string-width": ["string-width@4.2.3", "", { "dependencies": { "emoji-regex": "^8.0.0", "is-fullwidth-code-point": "^3.0.0", "strip-ansi": "^6.0.1" } }, "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g=="], + "logkitty/yargs/y18n": ["y18n@4.0.3", "", {}, "sha512-JKhqTOwSrqNA1NY5lSztJ1GrBiUodLMmIZuLiDaMRJ+itFd+ABVE8XBjOvIWL+rSqNDC74LCSFmlb/U4UZ4hJQ=="], "logkitty/yargs/yargs-parser": ["yargs-parser@18.1.3", "", { "dependencies": { "camelcase": "^5.0.0", "decamelize": "^1.2.0" } }, "sha512-o50j0JeToy/4K6OZcaQmW6lyXXKhq7csREXcDwk2omFPJEwUNOVtJKvmDr9EI1fAJZUyZcRF7kxGBWmRXudrCQ=="], + "metro/yargs/cliui": ["cliui@8.0.1", "", { "dependencies": { "string-width": "^4.2.0", "strip-ansi": "^6.0.1", "wrap-ansi": "^7.0.0" } }, "sha512-BSeNnyus75C4//NQ9gQt1/csTXyo/8Sb+afLAkzAptFuMsod9HFokGNudZpi/oQV73hnVK+sR+5PVRMd+Dr7YQ=="], + + "metro/yargs/string-width": ["string-width@4.2.3", "", { "dependencies": { "emoji-regex": "^8.0.0", "is-fullwidth-code-point": "^3.0.0", "strip-ansi": "^6.0.1" } }, "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g=="], + "mocha/minimatch/brace-expansion": ["brace-expansion@2.0.2", "", { "dependencies": { "balanced-match": "^1.0.0" } }, "sha512-Jt0vHyM+jmUBqojB7E1NIYadt0vI0Qxjxd2TErW94wDz+E2LAm5vKMXXwg6ZZBTHPuUlDgQHKXvjGBdfcF1ZDQ=="], "mocha/yargs/cliui": ["cliui@7.0.4", "", { "dependencies": { "string-width": "^4.2.0", "strip-ansi": "^6.0.0", "wrap-ansi": "^7.0.0" } }, "sha512-OcRE68cOsVMXp1Yvonl/fzkQOyjLSu/8bhPDfQt0e0/Eb283TKP20Fs2MqoPsr9SwA595rRCA+QMzYc9nBP+JQ=="], - "ora/log-symbols/is-unicode-supported": ["is-unicode-supported@1.3.0", "", {}, "sha512-43r2mRvz+8JRIKnWJ+3j8JtjRKZ6GmjzfaE/qiBJnikNnYv/6bagRJ1kUhNk8R5EX/GkobD+r+sfxCPJsiKBLQ=="], + "mocha/yargs/string-width": ["string-width@4.2.3", "", { "dependencies": { "emoji-regex": "^8.0.0", "is-fullwidth-code-point": "^3.0.0", "strip-ansi": "^6.0.1" } }, "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g=="], - "ora/string-width/emoji-regex": ["emoji-regex@10.6.0", "", {}, "sha512-toUI84YS5YmxW219erniWD0CIVOo46xGKColeNQRgOzDorgBi1v4D71/OFzgD9GO2UGKIv1C3Sp8DAn0+j5w7A=="], + "ora/log-symbols/is-unicode-supported": ["is-unicode-supported@1.3.0", "", {}, "sha512-43r2mRvz+8JRIKnWJ+3j8JtjRKZ6GmjzfaE/qiBJnikNnYv/6bagRJ1kUhNk8R5EX/GkobD+r+sfxCPJsiKBLQ=="], "ora/strip-ansi/ansi-regex": ["ansi-regex@6.2.2", "", {}, "sha512-Bq3SmSpyFHaWjPk8If9yc6svM8c56dB5BAtW4Qbw5jHTwwXXcTLoRMkpDJp6VL0XzlWaCHTXrkFURMYmD0sLqg=="], @@ -2978,6 +3026,14 @@ "react-native-builder-bob/metro-config/metro-runtime": ["metro-runtime@0.80.12", "", { "dependencies": { "@babel/runtime": "^7.25.0", "flow-enums-runtime": "^0.0.6" } }, "sha512-LIx7+92p5rpI0i6iB4S4GBvvLxStNt6fF0oPMaUd1Weku7jZdfkCZzmrtDD9CSQ6EPb0T9NUZoyXIxlBa3wOCw=="], + "react-native-builder-bob/yargs/cliui": ["cliui@8.0.1", "", { "dependencies": { "string-width": "^4.2.0", "strip-ansi": "^6.0.1", "wrap-ansi": "^7.0.0" } }, "sha512-BSeNnyus75C4//NQ9gQt1/csTXyo/8Sb+afLAkzAptFuMsod9HFokGNudZpi/oQV73hnVK+sR+5PVRMd+Dr7YQ=="], + + "react-native-builder-bob/yargs/string-width": ["string-width@4.2.3", "", { "dependencies": { "emoji-regex": "^8.0.0", "is-fullwidth-code-point": "^3.0.0", "strip-ansi": "^6.0.1" } }, "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g=="], + + "react-native/yargs/cliui": ["cliui@8.0.1", "", { "dependencies": { "string-width": "^4.2.0", "strip-ansi": "^6.0.1", "wrap-ansi": "^7.0.0" } }, "sha512-BSeNnyus75C4//NQ9gQt1/csTXyo/8Sb+afLAkzAptFuMsod9HFokGNudZpi/oQV73hnVK+sR+5PVRMd+Dr7YQ=="], + + "react-native/yargs/string-width": ["string-width@4.2.3", "", { "dependencies": { "emoji-regex": "^8.0.0", "is-fullwidth-code-point": "^3.0.0", "strip-ansi": "^6.0.1" } }, "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g=="], + "read-pkg-up/find-up/locate-path": ["locate-path@7.2.0", "", { "dependencies": { "p-locate": "^6.0.0" } }, "sha512-gvVijfZvn7R+2qyPX8mAuKcFGDf6Nc61GdvGafQsHL0sBIxfKzA+usWn4GFC/bk+QdwPUD4kWFJLhElipq+0VA=="], "read-pkg-up/find-up/path-exists": ["path-exists@5.0.0", "", {}, "sha512-RjhtfwJOxzcFmNOi6ltcbcu4Iu+FL3zEj83dk4kAS+fVpTxXLO1b38RvJgT/0QwvV/L3aY9TAnyv0EOqW4GoMQ=="], @@ -3006,6 +3062,8 @@ "slice-ansi/ansi-styles/color-convert": ["color-convert@1.9.3", "", { "dependencies": { "color-name": "1.1.3" } }, "sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg=="], + "string-width/strip-ansi/ansi-regex": ["ansi-regex@6.2.2", "", {}, "sha512-Bq3SmSpyFHaWjPk8If9yc6svM8c56dB5BAtW4Qbw5jHTwwXXcTLoRMkpDJp6VL0XzlWaCHTXrkFURMYmD0sLqg=="], + "terser/source-map-support/source-map": ["source-map@0.6.1", "", {}, "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g=="], "through2/readable-stream/isarray": ["isarray@1.0.0", "", {}, "sha512-VLghIWNM6ELQzo7zwmcg0NmTVyWKYjvIeM83yjp0wRDTmUnrM678fQbcKBo6n2CJEF0szoG//ytg+TKla89ALQ=="], @@ -3018,9 +3076,13 @@ "typeorm/glob/minipass": ["minipass@7.1.2", "", {}, "sha512-qOOzS1cBTWYF4BH8fVePDBOO9iptMnGUEZwNc/cMWnTV2nVLZ7VoNWEPHkYczZA0pdoA7dl6e7FL659nX9S2aw=="], - "widest-line/string-width/emoji-regex": ["emoji-regex@10.6.0", "", {}, "sha512-toUI84YS5YmxW219erniWD0CIVOo46xGKColeNQRgOzDorgBi1v4D71/OFzgD9GO2UGKIv1C3Sp8DAn0+j5w7A=="], + "typeorm/yargs/cliui": ["cliui@8.0.1", "", { "dependencies": { "string-width": "^4.2.0", "strip-ansi": "^6.0.1", "wrap-ansi": "^7.0.0" } }, "sha512-BSeNnyus75C4//NQ9gQt1/csTXyo/8Sb+afLAkzAptFuMsod9HFokGNudZpi/oQV73hnVK+sR+5PVRMd+Dr7YQ=="], + + "typeorm/yargs/string-width": ["string-width@4.2.3", "", { "dependencies": { "emoji-regex": "^8.0.0", "is-fullwidth-code-point": "^3.0.0", "strip-ansi": "^6.0.1" } }, "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g=="], - "widest-line/string-width/strip-ansi": ["strip-ansi@7.1.2", "", { "dependencies": { "ansi-regex": "^6.0.1" } }, "sha512-gmBGslpoQJtgnMAvOVqGZpEz9dyoKTCzy2nfz/n8aIFhN/jCE/rCmcxabB6jOOHV+0WNnylOxaxBQPSvcWklhA=="], + "wrap-ansi-cjs/string-width/emoji-regex": ["emoji-regex@8.0.0", "", {}, "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A=="], + + "wrap-ansi/string-width/emoji-regex": ["emoji-regex@8.0.0", "", {}, "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A=="], "@istanbuljs/load-nyc-config/find-up/locate-path/p-locate": ["p-locate@4.1.0", "", { "dependencies": { "p-limit": "^2.2.0" } }, "sha512-R79ZZ/0wAxKGu3oYMlz8jy/kbhsNrS7SKZ7PxEHBgJ5+F2mtFW2fK2cOtBh1cHYkQsbzFV7I+EoRKe6Yt0oK7A=="], @@ -3062,7 +3124,9 @@ "@react-native-community/cli-tools/ora/cli-cursor/restore-cursor": ["restore-cursor@3.1.0", "", { "dependencies": { "onetime": "^5.1.0", "signal-exit": "^3.0.2" } }, "sha512-l+sSefzHpj5qimhFSE5a8nufZYAM3sBSVMAPtYkmC+4EH2anSGaEMXSD0izRQbu9nfyQ9y5JrVmp7E8oZrUjvA=="], - "boxen/string-width/strip-ansi/ansi-regex": ["ansi-regex@6.2.2", "", {}, "sha512-Bq3SmSpyFHaWjPk8If9yc6svM8c56dB5BAtW4Qbw5jHTwwXXcTLoRMkpDJp6VL0XzlWaCHTXrkFURMYmD0sLqg=="], + "@react-native/codegen/yargs/cliui/wrap-ansi": ["wrap-ansi@7.0.0", "", { "dependencies": { "ansi-styles": "^4.0.0", "string-width": "^4.1.0", "strip-ansi": "^6.0.0" } }, "sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q=="], + + "@react-native/codegen/yargs/string-width/emoji-regex": ["emoji-regex@8.0.0", "", {}, "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A=="], "boxen/wrap-ansi/strip-ansi/ansi-regex": ["ansi-regex@6.2.2", "", {}, "sha512-Bq3SmSpyFHaWjPk8If9yc6svM8c56dB5BAtW4Qbw5jHTwwXXcTLoRMkpDJp6VL0XzlWaCHTXrkFURMYmD0sLqg=="], @@ -3078,6 +3142,10 @@ "jest-cli/jest-validate/pretty-format/react-is": ["react-is@18.3.1", "", {}, "sha512-/LLMVyas0ljjAtoYiPqYiL8VWXzUUdThrmU5+n20DZv+a+ClRoevUzw5JxU+Ieh5/c87ytoTBV9G1FiKfNJdmg=="], + "jest-cli/yargs/cliui/wrap-ansi": ["wrap-ansi@7.0.0", "", { "dependencies": { "ansi-styles": "^4.0.0", "string-width": "^4.1.0", "strip-ansi": "^6.0.0" } }, "sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q=="], + + "jest-cli/yargs/string-width/emoji-regex": ["emoji-regex@8.0.0", "", {}, "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A=="], + "jest-config/babel-jest/babel-preset-jest/babel-plugin-jest-hoist": ["babel-plugin-jest-hoist@30.2.0", "", { "dependencies": { "@types/babel__core": "^7.20.5" } }, "sha512-ftzhzSGMUnOzcCXd6WHdBGMyuwy15Wnn0iyyWGKgBDLxf9/s5ABuraCSpBX2uG0jUg4rqJnxsLc5+oYBqoxVaA=="], "jest-config/glob/minimatch/brace-expansion": ["brace-expansion@2.0.2", "", { "dependencies": { "balanced-match": "^1.0.0" } }, "sha512-Jt0vHyM+jmUBqojB7E1NIYadt0vI0Qxjxd2TErW94wDz+E2LAm5vKMXXwg6ZZBTHPuUlDgQHKXvjGBdfcF1ZDQ=="], @@ -3122,10 +3190,18 @@ "logkitty/yargs/find-up/locate-path": ["locate-path@5.0.0", "", { "dependencies": { "p-locate": "^4.1.0" } }, "sha512-t7hw9pI+WvuwNJXwk5zVHpyhIqzg2qTlklJOf0mVxGSbe3Fp2VieZcduNYjaLDoy6p9uGpQEGWG87WpMKlNq8g=="], + "logkitty/yargs/string-width/emoji-regex": ["emoji-regex@8.0.0", "", {}, "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A=="], + "logkitty/yargs/yargs-parser/camelcase": ["camelcase@5.3.1", "", {}, "sha512-L28STB170nwWS63UjtlEOE3dldQApaJXZkOI1uMFfzf3rRuPegHaHesyee+YxQ+W6SvRDQV6UrdOdRiR153wJg=="], + "metro/yargs/cliui/wrap-ansi": ["wrap-ansi@7.0.0", "", { "dependencies": { "ansi-styles": "^4.0.0", "string-width": "^4.1.0", "strip-ansi": "^6.0.0" } }, "sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q=="], + + "metro/yargs/string-width/emoji-regex": ["emoji-regex@8.0.0", "", {}, "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A=="], + "mocha/yargs/cliui/wrap-ansi": ["wrap-ansi@7.0.0", "", { "dependencies": { "ansi-styles": "^4.0.0", "string-width": "^4.1.0", "strip-ansi": "^6.0.0" } }, "sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q=="], + "mocha/yargs/string-width/emoji-regex": ["emoji-regex@8.0.0", "", {}, "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A=="], + "pkg-dir/find-up/locate-path/p-locate": ["p-locate@4.1.0", "", { "dependencies": { "p-limit": "^2.2.0" } }, "sha512-R79ZZ/0wAxKGu3oYMlz8jy/kbhsNrS7SKZ7PxEHBgJ5+F2mtFW2fK2cOtBh1cHYkQsbzFV7I+EoRKe6Yt0oK7A=="], "pkg-up/find-up/locate-path/p-locate": ["p-locate@3.0.0", "", { "dependencies": { "p-limit": "^2.0.0" } }, "sha512-x+12w/To+4GFfgJhBEpiDcLozRJGegY+Ei7/z0tSLkMmxGZNybVMSfWj9aJn8Z5Fc7dBUNJOOVgPv2H7IwulSQ=="], @@ -3166,6 +3242,14 @@ "react-native-builder-bob/metro-config/metro-core/metro-resolver": ["metro-resolver@0.80.12", "", { "dependencies": { "flow-enums-runtime": "^0.0.6" } }, "sha512-PR24gYRZnYHM3xT9pg6BdbrGbM/Cu1TcyIFBVlAk7qDAuHkUNQ1nMzWumWs+kwSvtd9eZGzHoucGJpTUEeLZAw=="], + "react-native-builder-bob/yargs/cliui/wrap-ansi": ["wrap-ansi@7.0.0", "", { "dependencies": { "ansi-styles": "^4.0.0", "string-width": "^4.1.0", "strip-ansi": "^6.0.0" } }, "sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q=="], + + "react-native-builder-bob/yargs/string-width/emoji-regex": ["emoji-regex@8.0.0", "", {}, "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A=="], + + "react-native/yargs/cliui/wrap-ansi": ["wrap-ansi@7.0.0", "", { "dependencies": { "ansi-styles": "^4.0.0", "string-width": "^4.1.0", "strip-ansi": "^6.0.0" } }, "sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q=="], + + "react-native/yargs/string-width/emoji-regex": ["emoji-regex@8.0.0", "", {}, "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A=="], + "read-pkg-up/find-up/locate-path/p-locate": ["p-locate@6.0.0", "", { "dependencies": { "p-limit": "^4.0.0" } }, "sha512-wPrq66Llhl7/4AGC6I+cqxT07LhXvWL08LNXz1fENOw0Ap4sRZZ/gZpTTJ5jpurzzzfS2W/Ge9BY3LgLjCShcw=="], "release-it/execa/npm-run-path/path-key": ["path-key@4.0.0", "", {}, "sha512-haREypq7xkM7ErfgIyA0z+Bj4AGKlMSdlQE2jvJo6huWD1EdkKYV+G/T4nq0YEF2vgTT8kqMFKo1uHn950r4SQ=="], @@ -3176,7 +3260,9 @@ "typeorm/glob/minimatch/brace-expansion": ["brace-expansion@2.0.2", "", { "dependencies": { "balanced-match": "^1.0.0" } }, "sha512-Jt0vHyM+jmUBqojB7E1NIYadt0vI0Qxjxd2TErW94wDz+E2LAm5vKMXXwg6ZZBTHPuUlDgQHKXvjGBdfcF1ZDQ=="], - "widest-line/string-width/strip-ansi/ansi-regex": ["ansi-regex@6.2.2", "", {}, "sha512-Bq3SmSpyFHaWjPk8If9yc6svM8c56dB5BAtW4Qbw5jHTwwXXcTLoRMkpDJp6VL0XzlWaCHTXrkFURMYmD0sLqg=="], + "typeorm/yargs/cliui/wrap-ansi": ["wrap-ansi@7.0.0", "", { "dependencies": { "ansi-styles": "^4.0.0", "string-width": "^4.1.0", "strip-ansi": "^6.0.0" } }, "sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q=="], + + "typeorm/yargs/string-width/emoji-regex": ["emoji-regex@8.0.0", "", {}, "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A=="], "@istanbuljs/load-nyc-config/find-up/locate-path/p-locate/p-limit": ["p-limit@2.3.0", "", { "dependencies": { "p-try": "^2.0.0" } }, "sha512-//88mFWSJx8lxCzwdAABTJL2MyWB12+eIY7MDL2SqLmAkeKU9qxRvWuSyTjm3FUmpBEMuFfckAIqEaVGUDxb6w=="], diff --git a/example/package.json b/example/package.json index 68289cb..f8bee20 100644 --- a/example/package.json +++ b/example/package.json @@ -22,7 +22,7 @@ "expo-status-bar": "^1.12.1", "react": "19.1.1", "react-native": "0.82.1", - "react-native-nitro-modules": "0.27.2", + "react-native-nitro-modules": "*", "react-native-nitro-sqlite": "*", "react-native-safe-area-context": "^5.5.2", "react-native-screens": "^4.18.0", diff --git a/package.json b/package.json index 97ad268..c2cd91d 100644 --- a/package.json +++ b/package.json @@ -35,7 +35,7 @@ "patch-package": "^8.0.0", "react": "19.1.1", "react-native": "0.82.1", - "react-native-nitro-modules": "0.27.2" + "react-native-nitro-modules": "0.32.0" }, "devDependencies": { "@babel/core": "^7.28.5", @@ -62,7 +62,7 @@ "eslint-config-prettier": "^10.1.8", "eslint-plugin-prettier": "^5.5.4", "jest": "^30.2.0", - "nitro-codegen": "0.27.2", + "nitrogen": "0.32.0", "prettier": "^3.6.2", "release-it": "^17.10.0", "typeorm": "0.3.27", diff --git a/package/package.json b/package/package.json index 2bb9417..8a3ef62 100644 --- a/package/package.json +++ b/package/package.json @@ -70,16 +70,16 @@ }, "devDependencies": { "jest": "^30.2.0", - "nitro-codegen": "0.27.2", + "nitrogen": "0.32.0", "react": "19.1.1", "react-native": "0.82.1", "react-native-builder-bob": "^0.31.0", - "react-native-nitro-modules": "0.27.2" + "react-native-nitro-modules": "0.32.0" }, "peerDependencies": { "react": ">=17.0.0", "react-native": ">=0.75.0", - "react-native-nitro-modules": ">=0.27.2" + "react-native-nitro-modules": ">=0.32.0" }, "resolutions": { "@types/react": "^18.2.44" From 798159523c13bb2487a80036d53a649b901dde1c Mon Sep 17 00:00:00 2001 From: Christoph Pader Date: Fri, 26 Dec 2025 01:53:07 +0000 Subject: [PATCH 2/8] chore: update npm specs command --- package/package.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/package/package.json b/package/package.json index 8a3ef62..c84f4d5 100644 --- a/package/package.json +++ b/package/package.json @@ -38,7 +38,7 @@ ], "scripts": { "build": "bun typecheck && bob build", - "specs": "bun typecheck && bun nitro-codegen --logLevel=\"debug\"", + "specs": "bun typecheck && bun nitrogen --logLevel=\"debug\"", "typecheck": "tsc --noEmit", "lint": "eslint \"**/*.{js,ts,tsx}\" --fix", "test": "jest", From ab3bf74d6e136560506c474a9316f045711cfb0d Mon Sep 17 00:00:00 2001 From: Christoph Pader Date: Fri, 26 Dec 2025 01:54:11 +0000 Subject: [PATCH 3/8] chore: update nitrogen generated files --- .../android/RNNitroSQLite+autolinking.cmake | 11 +++-- .../generated/android/RNNitroSQLiteOnLoad.cpp | 4 +- .../c++/JHybridNitroSQLiteOnLoadSpec.cpp | 6 +++ .../c++/JHybridNitroSQLiteOnLoadSpec.hpp | 2 + .../HybridNitroSQLiteOnLoadSpec.kt | 9 +++- .../ios/RNNitroSQLite+autolinking.rb | 2 +- .../generated/shared/c++/BatchQueryResult.hpp | 34 ++++++++++---- .../generated/shared/c++/ColumnType.hpp | 10 ++-- .../generated/shared/c++/FileLoadResult.hpp | 40 ++++++++++------ .../c++/HybridNativeQueryResultSpec.hpp | 4 +- .../shared/c++/HybridNitroSQLiteSpec.hpp | 6 +-- .../shared/c++/NativeBatchQueryCommand.hpp | 46 ++++++++++++------- .../generated/shared/c++/SQLiteNullValue.hpp | 34 ++++++++++---- .../shared/c++/SQLiteQueryColumnMetadata.hpp | 46 ++++++++++++------- 14 files changed, 165 insertions(+), 89 deletions(-) diff --git a/package/nitrogen/generated/android/RNNitroSQLite+autolinking.cmake b/package/nitrogen/generated/android/RNNitroSQLite+autolinking.cmake index 00d15cb..e8b14ed 100644 --- a/package/nitrogen/generated/android/RNNitroSQLite+autolinking.cmake +++ b/package/nitrogen/generated/android/RNNitroSQLite+autolinking.cmake @@ -13,6 +13,12 @@ # include(${CMAKE_SOURCE_DIR}/../nitrogen/generated/android/RNNitroSQLite+autolinking.cmake) # ``` +# Define a flag to check if we are building properly +add_definitions(-DBUILDING_RNNITROSQLITE_WITH_GENERATED_CMAKE_PROJECT) + +# Enable Raw Props parsing in react-native (for Nitro Views) +add_definitions(-DRN_SERIALIZABLE_STATE) + # Add all headers that were generated by Nitrogen include_directories( "../nitrogen/generated/shared/c++" @@ -34,12 +40,9 @@ target_sources( ../nitrogen/generated/android/c++/JHybridNitroSQLiteOnLoadSpec.cpp ) -# Define a flag to check if we are building properly -add_definitions(-DBUILDING_RNNITROSQLITE_WITH_GENERATED_CMAKE_PROJECT) - # From node_modules/react-native/ReactAndroid/cmake-utils/folly-flags.cmake # Used in node_modules/react-native/ReactAndroid/cmake-utils/ReactNative-application.cmake - target_compile_definitions( +target_compile_definitions( RNNitroSQLite PRIVATE -DFOLLY_NO_CONFIG=1 -DFOLLY_HAVE_CLOCK_GETTIME=1 diff --git a/package/nitrogen/generated/android/RNNitroSQLiteOnLoad.cpp b/package/nitrogen/generated/android/RNNitroSQLiteOnLoad.cpp index 619fe93..aaca124 100644 --- a/package/nitrogen/generated/android/RNNitroSQLiteOnLoad.cpp +++ b/package/nitrogen/generated/android/RNNitroSQLiteOnLoad.cpp @@ -17,7 +17,6 @@ #include "JHybridNitroSQLiteOnLoadSpec.hpp" #include "HybridNitroSQLite.hpp" -#include #include namespace margelo::nitro::rnnitrosqlite { @@ -46,8 +45,7 @@ int initialize(JavaVM* vm) { []() -> std::shared_ptr { static DefaultConstructableObject object("com/margelo/nitro/rnnitrosqlite/HybridNitroSQLiteOnLoad"); auto instance = object.create(); - auto globalRef = jni::make_global(instance); - return JNISharedPtr::make_shared_from_jni(globalRef); + return instance->cthis()->shared(); } ); }); diff --git a/package/nitrogen/generated/android/c++/JHybridNitroSQLiteOnLoadSpec.cpp b/package/nitrogen/generated/android/c++/JHybridNitroSQLiteOnLoadSpec.cpp index 5ae3b75..94797c1 100644 --- a/package/nitrogen/generated/android/c++/JHybridNitroSQLiteOnLoadSpec.cpp +++ b/package/nitrogen/generated/android/c++/JHybridNitroSQLiteOnLoadSpec.cpp @@ -33,6 +33,12 @@ namespace margelo::nitro::rnnitrosqlite { method(_javaPart); } + std::string JHybridNitroSQLiteOnLoadSpec::toString() { + static const auto method = javaClassStatic()->getMethod("toString"); + auto javaString = method(_javaPart); + return javaString->toStdString(); + } + // Properties diff --git a/package/nitrogen/generated/android/c++/JHybridNitroSQLiteOnLoadSpec.hpp b/package/nitrogen/generated/android/c++/JHybridNitroSQLiteOnLoadSpec.hpp index 484ff30..fb7d6d2 100644 --- a/package/nitrogen/generated/android/c++/JHybridNitroSQLiteOnLoadSpec.hpp +++ b/package/nitrogen/generated/android/c++/JHybridNitroSQLiteOnLoadSpec.hpp @@ -29,6 +29,7 @@ namespace margelo::nitro::rnnitrosqlite { // C++ constructor (called from Java via `initHybrid()`) explicit JHybridNitroSQLiteOnLoadSpec(jni::alias_ref jThis) : HybridObject(HybridNitroSQLiteOnLoadSpec::TAG), + HybridBase(jThis), _javaPart(jni::make_global(jThis)) {} public: @@ -40,6 +41,7 @@ namespace margelo::nitro::rnnitrosqlite { public: size_t getExternalMemorySize() noexcept override; void dispose() noexcept override; + std::string toString() override; public: inline const jni::global_ref& getJavaPart() const noexcept { diff --git a/package/nitrogen/generated/android/kotlin/com/margelo/nitro/rnnitrosqlite/HybridNitroSQLiteOnLoadSpec.kt b/package/nitrogen/generated/android/kotlin/com/margelo/nitro/rnnitrosqlite/HybridNitroSQLiteOnLoadSpec.kt index 87a63f0..bc470aa 100644 --- a/package/nitrogen/generated/android/kotlin/com/margelo/nitro/rnnitrosqlite/HybridNitroSQLiteOnLoadSpec.kt +++ b/package/nitrogen/generated/android/kotlin/com/margelo/nitro/rnnitrosqlite/HybridNitroSQLiteOnLoadSpec.kt @@ -10,7 +10,7 @@ package com.margelo.nitro.rnnitrosqlite import androidx.annotation.Keep import com.facebook.jni.HybridData import com.facebook.proguard.annotations.DoNotStrip -import com.margelo.nitro.core.* +import com.margelo.nitro.core.HybridObject /** * A Kotlin class representing the NitroSQLiteOnLoad HybridObject. @@ -36,6 +36,11 @@ abstract class HybridNitroSQLiteOnLoadSpec: HybridObject() { super.updateNative(hybridData) } + // Default implementation of `HybridObject.toString()` + override fun toString(): String { + return "[HybridObject NitroSQLiteOnLoad]" + } + // Properties @@ -47,6 +52,6 @@ abstract class HybridNitroSQLiteOnLoadSpec: HybridObject() { private external fun initHybrid(): HybridData companion object { - private const val TAG = "HybridNitroSQLiteOnLoadSpec" + protected const val TAG = "HybridNitroSQLiteOnLoadSpec" } } diff --git a/package/nitrogen/generated/ios/RNNitroSQLite+autolinking.rb b/package/nitrogen/generated/ios/RNNitroSQLite+autolinking.rb index d9f0449..07f7832 100644 --- a/package/nitrogen/generated/ios/RNNitroSQLite+autolinking.rb +++ b/package/nitrogen/generated/ios/RNNitroSQLite+autolinking.rb @@ -52,7 +52,7 @@ def add_nitrogen_files(spec) spec.pod_target_xcconfig = current_pod_target_xcconfig.merge({ # Use C++ 20 "CLANG_CXX_LANGUAGE_STANDARD" => "c++20", - # Enables C++ <-> Swift interop (by default it's only C) + # Enables C++ <-> Swift interop (by default it's only ObjC) "SWIFT_OBJC_INTEROP_MODE" => "objcxx", # Enables stricter modular headers "DEFINES_MODULE" => "YES", diff --git a/package/nitrogen/generated/shared/c++/BatchQueryResult.hpp b/package/nitrogen/generated/shared/c++/BatchQueryResult.hpp index 356e348..6b0fa1f 100644 --- a/package/nitrogen/generated/shared/c++/BatchQueryResult.hpp +++ b/package/nitrogen/generated/shared/c++/BatchQueryResult.hpp @@ -17,6 +17,16 @@ #else #error NitroModules cannot be found! Are you sure you installed NitroModules properly? #endif +#if __has_include() +#include +#else +#error NitroModules cannot be found! Are you sure you installed NitroModules properly? +#endif +#if __has_include() +#include +#else +#error NitroModules cannot be found! Are you sure you installed NitroModules properly? +#endif @@ -27,33 +37,34 @@ namespace margelo::nitro::rnnitrosqlite { /** * A struct which can be represented as a JavaScript object (BatchQueryResult). */ - struct BatchQueryResult { + struct BatchQueryResult final { public: std::optional rowsAffected SWIFT_PRIVATE; public: BatchQueryResult() = default; explicit BatchQueryResult(std::optional rowsAffected): rowsAffected(rowsAffected) {} + + public: + friend bool operator==(const BatchQueryResult& lhs, const BatchQueryResult& rhs) = default; }; } // namespace margelo::nitro::rnnitrosqlite namespace margelo::nitro { - using namespace margelo::nitro::rnnitrosqlite; - // C++ BatchQueryResult <> JS BatchQueryResult (object) template <> - struct JSIConverter final { - static inline BatchQueryResult fromJSI(jsi::Runtime& runtime, const jsi::Value& arg) { + struct JSIConverter final { + static inline margelo::nitro::rnnitrosqlite::BatchQueryResult fromJSI(jsi::Runtime& runtime, const jsi::Value& arg) { jsi::Object obj = arg.asObject(runtime); - return BatchQueryResult( - JSIConverter>::fromJSI(runtime, obj.getProperty(runtime, "rowsAffected")) + return margelo::nitro::rnnitrosqlite::BatchQueryResult( + JSIConverter>::fromJSI(runtime, obj.getProperty(runtime, PropNameIDCache::get(runtime, "rowsAffected"))) ); } - static inline jsi::Value toJSI(jsi::Runtime& runtime, const BatchQueryResult& arg) { + static inline jsi::Value toJSI(jsi::Runtime& runtime, const margelo::nitro::rnnitrosqlite::BatchQueryResult& arg) { jsi::Object obj(runtime); - obj.setProperty(runtime, "rowsAffected", JSIConverter>::toJSI(runtime, arg.rowsAffected)); + obj.setProperty(runtime, PropNameIDCache::get(runtime, "rowsAffected"), JSIConverter>::toJSI(runtime, arg.rowsAffected)); return obj; } static inline bool canConvert(jsi::Runtime& runtime, const jsi::Value& value) { @@ -61,7 +72,10 @@ namespace margelo::nitro { return false; } jsi::Object obj = value.getObject(runtime); - if (!JSIConverter>::canConvert(runtime, obj.getProperty(runtime, "rowsAffected"))) return false; + if (!nitro::isPlainObject(runtime, obj)) { + return false; + } + if (!JSIConverter>::canConvert(runtime, obj.getProperty(runtime, PropNameIDCache::get(runtime, "rowsAffected")))) return false; return true; } }; diff --git a/package/nitrogen/generated/shared/c++/ColumnType.hpp b/package/nitrogen/generated/shared/c++/ColumnType.hpp index 2fbde5f..6e60fde 100644 --- a/package/nitrogen/generated/shared/c++/ColumnType.hpp +++ b/package/nitrogen/generated/shared/c++/ColumnType.hpp @@ -36,16 +36,14 @@ namespace margelo::nitro::rnnitrosqlite { namespace margelo::nitro { - using namespace margelo::nitro::rnnitrosqlite; - // C++ ColumnType <> JS ColumnType (enum) template <> - struct JSIConverter final { - static inline ColumnType fromJSI(jsi::Runtime& runtime, const jsi::Value& arg) { + struct JSIConverter final { + static inline margelo::nitro::rnnitrosqlite::ColumnType fromJSI(jsi::Runtime& runtime, const jsi::Value& arg) { int enumValue = JSIConverter::fromJSI(runtime, arg); - return static_cast(enumValue); + return static_cast(enumValue); } - static inline jsi::Value toJSI(jsi::Runtime& runtime, ColumnType arg) { + static inline jsi::Value toJSI(jsi::Runtime& runtime, margelo::nitro::rnnitrosqlite::ColumnType arg) { int enumValue = static_cast(arg); return JSIConverter::toJSI(runtime, enumValue); } diff --git a/package/nitrogen/generated/shared/c++/FileLoadResult.hpp b/package/nitrogen/generated/shared/c++/FileLoadResult.hpp index cf5692e..8f0e981 100644 --- a/package/nitrogen/generated/shared/c++/FileLoadResult.hpp +++ b/package/nitrogen/generated/shared/c++/FileLoadResult.hpp @@ -17,6 +17,16 @@ #else #error NitroModules cannot be found! Are you sure you installed NitroModules properly? #endif +#if __has_include() +#include +#else +#error NitroModules cannot be found! Are you sure you installed NitroModules properly? +#endif +#if __has_include() +#include +#else +#error NitroModules cannot be found! Are you sure you installed NitroModules properly? +#endif @@ -27,7 +37,7 @@ namespace margelo::nitro::rnnitrosqlite { /** * A struct which can be represented as a JavaScript object (FileLoadResult). */ - struct FileLoadResult { + struct FileLoadResult final { public: std::optional commands SWIFT_PRIVATE; std::optional rowsAffected SWIFT_PRIVATE; @@ -35,28 +45,29 @@ namespace margelo::nitro::rnnitrosqlite { public: FileLoadResult() = default; explicit FileLoadResult(std::optional commands, std::optional rowsAffected): commands(commands), rowsAffected(rowsAffected) {} + + public: + friend bool operator==(const FileLoadResult& lhs, const FileLoadResult& rhs) = default; }; } // namespace margelo::nitro::rnnitrosqlite namespace margelo::nitro { - using namespace margelo::nitro::rnnitrosqlite; - // C++ FileLoadResult <> JS FileLoadResult (object) template <> - struct JSIConverter final { - static inline FileLoadResult fromJSI(jsi::Runtime& runtime, const jsi::Value& arg) { + struct JSIConverter final { + static inline margelo::nitro::rnnitrosqlite::FileLoadResult fromJSI(jsi::Runtime& runtime, const jsi::Value& arg) { jsi::Object obj = arg.asObject(runtime); - return FileLoadResult( - JSIConverter>::fromJSI(runtime, obj.getProperty(runtime, "commands")), - JSIConverter>::fromJSI(runtime, obj.getProperty(runtime, "rowsAffected")) + return margelo::nitro::rnnitrosqlite::FileLoadResult( + JSIConverter>::fromJSI(runtime, obj.getProperty(runtime, PropNameIDCache::get(runtime, "commands"))), + JSIConverter>::fromJSI(runtime, obj.getProperty(runtime, PropNameIDCache::get(runtime, "rowsAffected"))) ); } - static inline jsi::Value toJSI(jsi::Runtime& runtime, const FileLoadResult& arg) { + static inline jsi::Value toJSI(jsi::Runtime& runtime, const margelo::nitro::rnnitrosqlite::FileLoadResult& arg) { jsi::Object obj(runtime); - obj.setProperty(runtime, "commands", JSIConverter>::toJSI(runtime, arg.commands)); - obj.setProperty(runtime, "rowsAffected", JSIConverter>::toJSI(runtime, arg.rowsAffected)); + obj.setProperty(runtime, PropNameIDCache::get(runtime, "commands"), JSIConverter>::toJSI(runtime, arg.commands)); + obj.setProperty(runtime, PropNameIDCache::get(runtime, "rowsAffected"), JSIConverter>::toJSI(runtime, arg.rowsAffected)); return obj; } static inline bool canConvert(jsi::Runtime& runtime, const jsi::Value& value) { @@ -64,8 +75,11 @@ namespace margelo::nitro { return false; } jsi::Object obj = value.getObject(runtime); - if (!JSIConverter>::canConvert(runtime, obj.getProperty(runtime, "commands"))) return false; - if (!JSIConverter>::canConvert(runtime, obj.getProperty(runtime, "rowsAffected"))) return false; + if (!nitro::isPlainObject(runtime, obj)) { + return false; + } + if (!JSIConverter>::canConvert(runtime, obj.getProperty(runtime, PropNameIDCache::get(runtime, "commands")))) return false; + if (!JSIConverter>::canConvert(runtime, obj.getProperty(runtime, PropNameIDCache::get(runtime, "rowsAffected")))) return false; return true; } }; diff --git a/package/nitrogen/generated/shared/c++/HybridNativeQueryResultSpec.hpp b/package/nitrogen/generated/shared/c++/HybridNativeQueryResultSpec.hpp index 5962913..d9a93dc 100644 --- a/package/nitrogen/generated/shared/c++/HybridNativeQueryResultSpec.hpp +++ b/package/nitrogen/generated/shared/c++/HybridNativeQueryResultSpec.hpp @@ -13,8 +13,6 @@ #error NitroModules cannot be found! Are you sure you installed NitroModules properly? #endif -// Forward declaration of `ArrayBuffer` to properly resolve imports. -namespace NitroModules { class ArrayBuffer; } // Forward declaration of `SQLiteNullValue` to properly resolve imports. namespace margelo::nitro::rnnitrosqlite { struct SQLiteNullValue; } // Forward declaration of `SQLiteQueryColumnMetadata` to properly resolve imports. @@ -58,7 +56,7 @@ namespace margelo::nitro::rnnitrosqlite { // Properties virtual double getRowsAffected() = 0; virtual std::optional getInsertId() = 0; - virtual std::vector, SQLiteNullValue>>> getResults() = 0; + virtual std::vector, std::string, double, SQLiteNullValue>>> getResults() = 0; virtual std::optional> getMetadata() = 0; public: diff --git a/package/nitrogen/generated/shared/c++/HybridNitroSQLiteSpec.hpp b/package/nitrogen/generated/shared/c++/HybridNitroSQLiteSpec.hpp index d9e3b1b..70ade6b 100644 --- a/package/nitrogen/generated/shared/c++/HybridNitroSQLiteSpec.hpp +++ b/package/nitrogen/generated/shared/c++/HybridNitroSQLiteSpec.hpp @@ -15,8 +15,6 @@ // Forward declaration of `HybridNativeQueryResultSpec` to properly resolve imports. namespace margelo::nitro::rnnitrosqlite { class HybridNativeQueryResultSpec; } -// Forward declaration of `ArrayBuffer` to properly resolve imports. -namespace NitroModules { class ArrayBuffer; } // Forward declaration of `SQLiteNullValue` to properly resolve imports. namespace margelo::nitro::rnnitrosqlite { struct SQLiteNullValue; } // Forward declaration of `BatchQueryResult` to properly resolve imports. @@ -75,8 +73,8 @@ namespace margelo::nitro::rnnitrosqlite { virtual void drop(const std::string& dbName, const std::optional& location) = 0; virtual void attach(const std::string& mainDbName, const std::string& dbNameToAttach, const std::string& alias, const std::optional& location) = 0; virtual void detach(const std::string& mainDbName, const std::string& alias) = 0; - virtual std::shared_ptr execute(const std::string& dbName, const std::string& query, const std::optional, SQLiteNullValue>>>& params) = 0; - virtual std::shared_ptr>> executeAsync(const std::string& dbName, const std::string& query, const std::optional, SQLiteNullValue>>>& params) = 0; + virtual std::shared_ptr execute(const std::string& dbName, const std::string& query, const std::optional, std::string, double, SQLiteNullValue>>>& params) = 0; + virtual std::shared_ptr>> executeAsync(const std::string& dbName, const std::string& query, const std::optional, std::string, double, SQLiteNullValue>>>& params) = 0; virtual BatchQueryResult executeBatch(const std::string& dbName, const std::vector& commands) = 0; virtual std::shared_ptr> executeBatchAsync(const std::string& dbName, const std::vector& commands) = 0; virtual FileLoadResult loadFile(const std::string& dbName, const std::string& location) = 0; diff --git a/package/nitrogen/generated/shared/c++/NativeBatchQueryCommand.hpp b/package/nitrogen/generated/shared/c++/NativeBatchQueryCommand.hpp index 27934a6..d9d0949 100644 --- a/package/nitrogen/generated/shared/c++/NativeBatchQueryCommand.hpp +++ b/package/nitrogen/generated/shared/c++/NativeBatchQueryCommand.hpp @@ -17,9 +17,17 @@ #else #error NitroModules cannot be found! Are you sure you installed NitroModules properly? #endif +#if __has_include() +#include +#else +#error NitroModules cannot be found! Are you sure you installed NitroModules properly? +#endif +#if __has_include() +#include +#else +#error NitroModules cannot be found! Are you sure you installed NitroModules properly? +#endif -// Forward declaration of `ArrayBuffer` to properly resolve imports. -namespace NitroModules { class ArrayBuffer; } // Forward declaration of `SQLiteNullValue` to properly resolve imports. namespace margelo::nitro::rnnitrosqlite { struct SQLiteNullValue; } @@ -35,36 +43,37 @@ namespace margelo::nitro::rnnitrosqlite { /** * A struct which can be represented as a JavaScript object (NativeBatchQueryCommand). */ - struct NativeBatchQueryCommand { + struct NativeBatchQueryCommand final { public: std::string query SWIFT_PRIVATE; - std::optional, SQLiteNullValue>>, std::vector, SQLiteNullValue>>>>> params SWIFT_PRIVATE; + std::optional, std::string, double, SQLiteNullValue>>>, std::vector, std::string, double, SQLiteNullValue>>>> params SWIFT_PRIVATE; public: NativeBatchQueryCommand() = default; - explicit NativeBatchQueryCommand(std::string query, std::optional, SQLiteNullValue>>, std::vector, SQLiteNullValue>>>>> params): query(query), params(params) {} + explicit NativeBatchQueryCommand(std::string query, std::optional, std::string, double, SQLiteNullValue>>>, std::vector, std::string, double, SQLiteNullValue>>>> params): query(query), params(params) {} + + public: + friend bool operator==(const NativeBatchQueryCommand& lhs, const NativeBatchQueryCommand& rhs) = default; }; } // namespace margelo::nitro::rnnitrosqlite namespace margelo::nitro { - using namespace margelo::nitro::rnnitrosqlite; - // C++ NativeBatchQueryCommand <> JS NativeBatchQueryCommand (object) template <> - struct JSIConverter final { - static inline NativeBatchQueryCommand fromJSI(jsi::Runtime& runtime, const jsi::Value& arg) { + struct JSIConverter final { + static inline margelo::nitro::rnnitrosqlite::NativeBatchQueryCommand fromJSI(jsi::Runtime& runtime, const jsi::Value& arg) { jsi::Object obj = arg.asObject(runtime); - return NativeBatchQueryCommand( - JSIConverter::fromJSI(runtime, obj.getProperty(runtime, "query")), - JSIConverter, SQLiteNullValue>>, std::vector, SQLiteNullValue>>>>>>::fromJSI(runtime, obj.getProperty(runtime, "params")) + return margelo::nitro::rnnitrosqlite::NativeBatchQueryCommand( + JSIConverter::fromJSI(runtime, obj.getProperty(runtime, PropNameIDCache::get(runtime, "query"))), + JSIConverter, std::string, double, margelo::nitro::rnnitrosqlite::SQLiteNullValue>>>, std::vector, std::string, double, margelo::nitro::rnnitrosqlite::SQLiteNullValue>>>>>::fromJSI(runtime, obj.getProperty(runtime, PropNameIDCache::get(runtime, "params"))) ); } - static inline jsi::Value toJSI(jsi::Runtime& runtime, const NativeBatchQueryCommand& arg) { + static inline jsi::Value toJSI(jsi::Runtime& runtime, const margelo::nitro::rnnitrosqlite::NativeBatchQueryCommand& arg) { jsi::Object obj(runtime); - obj.setProperty(runtime, "query", JSIConverter::toJSI(runtime, arg.query)); - obj.setProperty(runtime, "params", JSIConverter, SQLiteNullValue>>, std::vector, SQLiteNullValue>>>>>>::toJSI(runtime, arg.params)); + obj.setProperty(runtime, PropNameIDCache::get(runtime, "query"), JSIConverter::toJSI(runtime, arg.query)); + obj.setProperty(runtime, PropNameIDCache::get(runtime, "params"), JSIConverter, std::string, double, margelo::nitro::rnnitrosqlite::SQLiteNullValue>>>, std::vector, std::string, double, margelo::nitro::rnnitrosqlite::SQLiteNullValue>>>>>::toJSI(runtime, arg.params)); return obj; } static inline bool canConvert(jsi::Runtime& runtime, const jsi::Value& value) { @@ -72,8 +81,11 @@ namespace margelo::nitro { return false; } jsi::Object obj = value.getObject(runtime); - if (!JSIConverter::canConvert(runtime, obj.getProperty(runtime, "query"))) return false; - if (!JSIConverter, SQLiteNullValue>>, std::vector, SQLiteNullValue>>>>>>::canConvert(runtime, obj.getProperty(runtime, "params"))) return false; + if (!nitro::isPlainObject(runtime, obj)) { + return false; + } + if (!JSIConverter::canConvert(runtime, obj.getProperty(runtime, PropNameIDCache::get(runtime, "query")))) return false; + if (!JSIConverter, std::string, double, margelo::nitro::rnnitrosqlite::SQLiteNullValue>>>, std::vector, std::string, double, margelo::nitro::rnnitrosqlite::SQLiteNullValue>>>>>::canConvert(runtime, obj.getProperty(runtime, PropNameIDCache::get(runtime, "params")))) return false; return true; } }; diff --git a/package/nitrogen/generated/shared/c++/SQLiteNullValue.hpp b/package/nitrogen/generated/shared/c++/SQLiteNullValue.hpp index 09f648c..1a80342 100644 --- a/package/nitrogen/generated/shared/c++/SQLiteNullValue.hpp +++ b/package/nitrogen/generated/shared/c++/SQLiteNullValue.hpp @@ -17,6 +17,16 @@ #else #error NitroModules cannot be found! Are you sure you installed NitroModules properly? #endif +#if __has_include() +#include +#else +#error NitroModules cannot be found! Are you sure you installed NitroModules properly? +#endif +#if __has_include() +#include +#else +#error NitroModules cannot be found! Are you sure you installed NitroModules properly? +#endif @@ -27,33 +37,34 @@ namespace margelo::nitro::rnnitrosqlite { /** * A struct which can be represented as a JavaScript object (SQLiteNullValue). */ - struct SQLiteNullValue { + struct SQLiteNullValue final { public: bool isNitroSQLiteNull SWIFT_PRIVATE; public: SQLiteNullValue() = default; explicit SQLiteNullValue(bool isNitroSQLiteNull): isNitroSQLiteNull(isNitroSQLiteNull) {} + + public: + friend bool operator==(const SQLiteNullValue& lhs, const SQLiteNullValue& rhs) = default; }; } // namespace margelo::nitro::rnnitrosqlite namespace margelo::nitro { - using namespace margelo::nitro::rnnitrosqlite; - // C++ SQLiteNullValue <> JS SQLiteNullValue (object) template <> - struct JSIConverter final { - static inline SQLiteNullValue fromJSI(jsi::Runtime& runtime, const jsi::Value& arg) { + struct JSIConverter final { + static inline margelo::nitro::rnnitrosqlite::SQLiteNullValue fromJSI(jsi::Runtime& runtime, const jsi::Value& arg) { jsi::Object obj = arg.asObject(runtime); - return SQLiteNullValue( - JSIConverter::fromJSI(runtime, obj.getProperty(runtime, "isNitroSQLiteNull")) + return margelo::nitro::rnnitrosqlite::SQLiteNullValue( + JSIConverter::fromJSI(runtime, obj.getProperty(runtime, PropNameIDCache::get(runtime, "isNitroSQLiteNull"))) ); } - static inline jsi::Value toJSI(jsi::Runtime& runtime, const SQLiteNullValue& arg) { + static inline jsi::Value toJSI(jsi::Runtime& runtime, const margelo::nitro::rnnitrosqlite::SQLiteNullValue& arg) { jsi::Object obj(runtime); - obj.setProperty(runtime, "isNitroSQLiteNull", JSIConverter::toJSI(runtime, arg.isNitroSQLiteNull)); + obj.setProperty(runtime, PropNameIDCache::get(runtime, "isNitroSQLiteNull"), JSIConverter::toJSI(runtime, arg.isNitroSQLiteNull)); return obj; } static inline bool canConvert(jsi::Runtime& runtime, const jsi::Value& value) { @@ -61,7 +72,10 @@ namespace margelo::nitro { return false; } jsi::Object obj = value.getObject(runtime); - if (!JSIConverter::canConvert(runtime, obj.getProperty(runtime, "isNitroSQLiteNull"))) return false; + if (!nitro::isPlainObject(runtime, obj)) { + return false; + } + if (!JSIConverter::canConvert(runtime, obj.getProperty(runtime, PropNameIDCache::get(runtime, "isNitroSQLiteNull")))) return false; return true; } }; diff --git a/package/nitrogen/generated/shared/c++/SQLiteQueryColumnMetadata.hpp b/package/nitrogen/generated/shared/c++/SQLiteQueryColumnMetadata.hpp index 0f6fe9a..bf50a1d 100644 --- a/package/nitrogen/generated/shared/c++/SQLiteQueryColumnMetadata.hpp +++ b/package/nitrogen/generated/shared/c++/SQLiteQueryColumnMetadata.hpp @@ -17,6 +17,16 @@ #else #error NitroModules cannot be found! Are you sure you installed NitroModules properly? #endif +#if __has_include() +#include +#else +#error NitroModules cannot be found! Are you sure you installed NitroModules properly? +#endif +#if __has_include() +#include +#else +#error NitroModules cannot be found! Are you sure you installed NitroModules properly? +#endif // Forward declaration of `ColumnType` to properly resolve imports. namespace margelo::nitro::rnnitrosqlite { enum class ColumnType; } @@ -29,7 +39,7 @@ namespace margelo::nitro::rnnitrosqlite { /** * A struct which can be represented as a JavaScript object (SQLiteQueryColumnMetadata). */ - struct SQLiteQueryColumnMetadata { + struct SQLiteQueryColumnMetadata final { public: std::string name SWIFT_PRIVATE; ColumnType type SWIFT_PRIVATE; @@ -38,30 +48,31 @@ namespace margelo::nitro::rnnitrosqlite { public: SQLiteQueryColumnMetadata() = default; explicit SQLiteQueryColumnMetadata(std::string name, ColumnType type, double index): name(name), type(type), index(index) {} + + public: + friend bool operator==(const SQLiteQueryColumnMetadata& lhs, const SQLiteQueryColumnMetadata& rhs) = default; }; } // namespace margelo::nitro::rnnitrosqlite namespace margelo::nitro { - using namespace margelo::nitro::rnnitrosqlite; - // C++ SQLiteQueryColumnMetadata <> JS SQLiteQueryColumnMetadata (object) template <> - struct JSIConverter final { - static inline SQLiteQueryColumnMetadata fromJSI(jsi::Runtime& runtime, const jsi::Value& arg) { + struct JSIConverter final { + static inline margelo::nitro::rnnitrosqlite::SQLiteQueryColumnMetadata fromJSI(jsi::Runtime& runtime, const jsi::Value& arg) { jsi::Object obj = arg.asObject(runtime); - return SQLiteQueryColumnMetadata( - JSIConverter::fromJSI(runtime, obj.getProperty(runtime, "name")), - JSIConverter::fromJSI(runtime, obj.getProperty(runtime, "type")), - JSIConverter::fromJSI(runtime, obj.getProperty(runtime, "index")) + return margelo::nitro::rnnitrosqlite::SQLiteQueryColumnMetadata( + JSIConverter::fromJSI(runtime, obj.getProperty(runtime, PropNameIDCache::get(runtime, "name"))), + JSIConverter::fromJSI(runtime, obj.getProperty(runtime, PropNameIDCache::get(runtime, "type"))), + JSIConverter::fromJSI(runtime, obj.getProperty(runtime, PropNameIDCache::get(runtime, "index"))) ); } - static inline jsi::Value toJSI(jsi::Runtime& runtime, const SQLiteQueryColumnMetadata& arg) { + static inline jsi::Value toJSI(jsi::Runtime& runtime, const margelo::nitro::rnnitrosqlite::SQLiteQueryColumnMetadata& arg) { jsi::Object obj(runtime); - obj.setProperty(runtime, "name", JSIConverter::toJSI(runtime, arg.name)); - obj.setProperty(runtime, "type", JSIConverter::toJSI(runtime, arg.type)); - obj.setProperty(runtime, "index", JSIConverter::toJSI(runtime, arg.index)); + obj.setProperty(runtime, PropNameIDCache::get(runtime, "name"), JSIConverter::toJSI(runtime, arg.name)); + obj.setProperty(runtime, PropNameIDCache::get(runtime, "type"), JSIConverter::toJSI(runtime, arg.type)); + obj.setProperty(runtime, PropNameIDCache::get(runtime, "index"), JSIConverter::toJSI(runtime, arg.index)); return obj; } static inline bool canConvert(jsi::Runtime& runtime, const jsi::Value& value) { @@ -69,9 +80,12 @@ namespace margelo::nitro { return false; } jsi::Object obj = value.getObject(runtime); - if (!JSIConverter::canConvert(runtime, obj.getProperty(runtime, "name"))) return false; - if (!JSIConverter::canConvert(runtime, obj.getProperty(runtime, "type"))) return false; - if (!JSIConverter::canConvert(runtime, obj.getProperty(runtime, "index"))) return false; + if (!nitro::isPlainObject(runtime, obj)) { + return false; + } + if (!JSIConverter::canConvert(runtime, obj.getProperty(runtime, PropNameIDCache::get(runtime, "name")))) return false; + if (!JSIConverter::canConvert(runtime, obj.getProperty(runtime, PropNameIDCache::get(runtime, "type")))) return false; + if (!JSIConverter::canConvert(runtime, obj.getProperty(runtime, PropNameIDCache::get(runtime, "index")))) return false; return true; } }; From 66dcfed629542f46aca90003318d15c25324177d Mon Sep 17 00:00:00 2001 From: Christoph Pader Date: Fri, 26 Dec 2025 02:15:54 +0000 Subject: [PATCH 4/8] feat: remove explicit null handling on the JS side --- package/src/index.ts | 9 +-- package/src/nullHandling.ts | 35 --------- package/src/operations/execute.ts | 72 ++----------------- package/src/operations/executeBatch.ts | 44 +----------- package/src/operations/session.ts | 2 +- package/src/operations/transaction.ts | 2 +- package/src/specs/NitroSQLite.nitro.ts | 21 +++--- ...tro.ts => NitroSQLiteQueryResult.nitro.ts} | 46 +++++++----- package/src/typeORM.ts | 2 +- package/src/types.ts | 68 +++++++----------- 10 files changed, 80 insertions(+), 221 deletions(-) delete mode 100644 package/src/nullHandling.ts rename package/src/specs/{NativeQueryResult.nitro.ts => NitroSQLiteQueryResult.nitro.ts} (51%) diff --git a/package/src/index.ts b/package/src/index.ts index 9f350d5..0cd0a0c 100644 --- a/package/src/index.ts +++ b/package/src/index.ts @@ -21,13 +21,10 @@ export const NitroSQLite = { executeBatchAsync, } +/** NOOP on NitroSQLite versions >= 9.3.0 */ +export function enableSimpleNullHandling() {} + export { open } from './operations/session' -export { - isNitroSQLiteNull, - NITRO_SQLITE_NULL, - isSimpleNullHandlingEnabled, - enableSimpleNullHandling, -} from './nullHandling' export { default as NitroSQLiteError } from './NitroSQLiteError' export type * from './types' export { typeORMDriver } from './typeORM' diff --git a/package/src/nullHandling.ts b/package/src/nullHandling.ts deleted file mode 100644 index 5d778c9..0000000 --- a/package/src/nullHandling.ts +++ /dev/null @@ -1,35 +0,0 @@ -import { SQLiteNullValue, SQLiteValue } from './types' -import { SQLiteQueryParamItem } from './types' - -let ENABLE_SIMPLE_NULL_HANDLING = false - -export function enableSimpleNullHandling( - shouldEnableSimpleNullHandling = true, -) { - ENABLE_SIMPLE_NULL_HANDLING = shouldEnableSimpleNullHandling -} - -export function isSimpleNullHandlingEnabled() { - return ENABLE_SIMPLE_NULL_HANDLING -} - -export const NITRO_SQLITE_NULL: SQLiteNullValue = { isNitroSQLiteNull: true } -export function isNitroSQLiteNull(value: unknown): value is SQLiteNullValue { - if ( - value !== null && - typeof value === 'object' && - 'isNitroSQLiteNull' in value - ) { - return true - } - return false -} - -export function replaceWithNativeNullValue( - value: SQLiteQueryParamItem, -): SQLiteValue { - if (value === undefined || value === null) { - return NITRO_SQLITE_NULL - } - return value -} diff --git a/package/src/operations/execute.ts b/package/src/operations/execute.ts index ce2d629..41412ec 100644 --- a/package/src/operations/execute.ts +++ b/package/src/operations/execute.ts @@ -1,13 +1,6 @@ -import { isNitroSQLiteNull, isSimpleNullHandlingEnabled } from '../nullHandling' import { HybridNitroSQLite } from '../nitro' -import { replaceWithNativeNullValue } from '../nullHandling' -import type { NativeQueryResult } from '../specs/NativeQueryResult.nitro' -import type { - QueryResult, - NativeSQLiteQueryParams, - SQLiteQueryParams, - QueryResultRow, -} from '../types' +import type { NitroSQLiteQueryResult } from '../specs/NitroSQLiteQueryResult.nitro' +import type { QueryResult, QueryResultRow, SQLiteQueryParams } from '../types' import NitroSQLiteError from '../NitroSQLiteError' export function execute( @@ -15,18 +8,10 @@ export function execute( query: string, params?: SQLiteQueryParams, ): QueryResult { - const transformedParams = isSimpleNullHandlingEnabled() - ? toNativeQueryParams(params) - : (params as NativeSQLiteQueryParams) - try { - const nativeResult = HybridNitroSQLite.execute( - dbName, - query, - transformedParams, - ) + const result = HybridNitroSQLite.execute(dbName, query, params) - return buildJsQueryResult(nativeResult) + return result as NitroSQLiteQueryResult & QueryResult } catch (error) { throw NitroSQLiteError.fromError(error) } @@ -37,55 +22,10 @@ export async function executeAsync( query: string, params?: SQLiteQueryParams, ): Promise> { - const transformedParams = isSimpleNullHandlingEnabled() - ? toNativeQueryParams(params) - : (params as NativeSQLiteQueryParams) - try { - const nativeResult = await HybridNitroSQLite.executeAsync( - dbName, - query, - transformedParams, - ) - return buildJsQueryResult(nativeResult) + const result = await HybridNitroSQLite.executeAsync(dbName, query, params) + return result as NitroSQLiteQueryResult & QueryResult } catch (error) { throw NitroSQLiteError.fromError(error) } } - -function toNativeQueryParams( - params: SQLiteQueryParams | undefined, -): NativeSQLiteQueryParams | undefined { - return params?.map((param) => replaceWithNativeNullValue(param)) -} - -function buildJsQueryResult({ - insertId, - rowsAffected, - results, -}: NativeQueryResult): QueryResult { - let data: Row[] = results as Row[] - - if (isSimpleNullHandlingEnabled()) { - data = results.map((row) => - Object.fromEntries( - Object.entries(row).map(([key, value]) => { - if (isNitroSQLiteNull(value)) { - return [key, null] - } - return [key, value] - }), - ), - ) as Row[] - } - - return { - insertId, - rowsAffected, - rows: { - _array: data, - length: data.length, - item: (idx: number) => data[idx], - }, - } -} diff --git a/package/src/operations/executeBatch.ts b/package/src/operations/executeBatch.ts index dde6501..983e40e 100644 --- a/package/src/operations/executeBatch.ts +++ b/package/src/operations/executeBatch.ts @@ -1,20 +1,11 @@ -import { - isSimpleNullHandlingEnabled, - replaceWithNativeNullValue, -} from '../nullHandling' import { HybridNitroSQLite } from '../nitro' import { queueOperationAsync, startOperationSync, throwIfDatabaseIsNotOpen, } from '../DatabaseQueue' -import type { - NativeSQLiteQueryParams, - BatchQueryResult, - BatchQueryCommand, - NativeBatchQueryCommand, -} from '../types' import NitroSQLiteError from '../NitroSQLiteError' +import type { BatchQueryCommand, BatchQueryResult } from '../types' export function executeBatch( dbName: string, @@ -22,13 +13,9 @@ export function executeBatch( ): BatchQueryResult { throwIfDatabaseIsNotOpen(dbName) - const transformedCommands = isSimpleNullHandlingEnabled() - ? toNativeBatchQueryCommands(commands) - : (commands as NativeBatchQueryCommand[]) - try { return startOperationSync(dbName, () => - HybridNitroSQLite.executeBatch(dbName, transformedCommands), + HybridNitroSQLite.executeBatch(dbName, commands), ) } catch (error) { throw NitroSQLiteError.fromError(error) @@ -41,36 +28,11 @@ export async function executeBatchAsync( ): Promise { throwIfDatabaseIsNotOpen(dbName) - const transformedCommands = isSimpleNullHandlingEnabled() - ? toNativeBatchQueryCommands(commands) - : (commands as NativeBatchQueryCommand[]) - return queueOperationAsync(dbName, async () => { try { - return await HybridNitroSQLite.executeBatchAsync( - dbName, - transformedCommands, - ) + return await HybridNitroSQLite.executeBatchAsync(dbName, commands) } catch (error) { throw NitroSQLiteError.fromError(error) } }) } - -function toNativeBatchQueryCommands( - commands: BatchQueryCommand[], -): NativeBatchQueryCommand[] { - return commands.map((command) => { - const transformedParams = command.params?.map((param) => { - if (Array.isArray(param)) { - return param.map((p) => replaceWithNativeNullValue(p)) - } - return replaceWithNativeNullValue(param) - }) as NativeSQLiteQueryParams | NativeSQLiteQueryParams[] - - return { - query: command.query, - params: transformedParams, - } - }) -} diff --git a/package/src/operations/session.ts b/package/src/operations/session.ts index da5c353..391407f 100644 --- a/package/src/operations/session.ts +++ b/package/src/operations/session.ts @@ -4,10 +4,10 @@ import type { BatchQueryCommand, NitroSQLiteConnection, NitroSQLiteConnectionOptions, - QueryResult, Transaction, SQLiteQueryParams, QueryResultRow, + QueryResult, } from '../types' import { execute, executeAsync } from './execute' import { executeBatch, executeBatchAsync } from './executeBatch' diff --git a/package/src/operations/transaction.ts b/package/src/operations/transaction.ts index ec6a6d0..ae969b3 100644 --- a/package/src/operations/transaction.ts +++ b/package/src/operations/transaction.ts @@ -1,8 +1,8 @@ import { queueOperationAsync, throwIfDatabaseIsNotOpen } from '../DatabaseQueue' import type { - QueryResult, Transaction, SQLiteQueryParams, + QueryResult, QueryResultRow, } from '../types' import { execute, executeAsync } from './execute' diff --git a/package/src/specs/NitroSQLite.nitro.ts b/package/src/specs/NitroSQLite.nitro.ts index fdeb72d..65c7573 100644 --- a/package/src/specs/NitroSQLite.nitro.ts +++ b/package/src/specs/NitroSQLite.nitro.ts @@ -1,11 +1,11 @@ import type { HybridObject } from 'react-native-nitro-modules' import type { + BatchQueryCommand, BatchQueryResult, FileLoadResult, - NativeSQLiteQueryParams, - NativeBatchQueryCommand, + SQLiteQueryParams, } from '../types' -import type { NativeQueryResult } from './NativeQueryResult.nitro' +import type { NitroSQLiteQueryResult } from './NitroSQLiteQueryResult.nitro' export interface NitroSQLite extends HybridObject<{ ios: 'c++'; android: 'c++' }> { @@ -22,20 +22,17 @@ export interface NitroSQLite execute( dbName: string, query: string, - params?: NativeSQLiteQueryParams, - ): NativeQueryResult + params?: SQLiteQueryParams, + ): NitroSQLiteQueryResult executeAsync( dbName: string, query: string, - params?: NativeSQLiteQueryParams, - ): Promise - executeBatch( - dbName: string, - commands: NativeBatchQueryCommand[], - ): BatchQueryResult + params?: SQLiteQueryParams, + ): Promise + executeBatch(dbName: string, commands: BatchQueryCommand[]): BatchQueryResult executeBatchAsync( dbName: string, - commands: NativeBatchQueryCommand[], + commands: BatchQueryCommand[], ): Promise loadFile(dbName: string, location: string): FileLoadResult loadFileAsync(dbName: string, location: string): Promise diff --git a/package/src/specs/NativeQueryResult.nitro.ts b/package/src/specs/NitroSQLiteQueryResult.nitro.ts similarity index 51% rename from package/src/specs/NativeQueryResult.nitro.ts rename to package/src/specs/NitroSQLiteQueryResult.nitro.ts index 49e1d2b..644911e 100644 --- a/package/src/specs/NativeQueryResult.nitro.ts +++ b/package/src/specs/NitroSQLiteQueryResult.nitro.ts @@ -9,36 +9,48 @@ import type { ColumnType, SQLiteValue } from '../types' * rows: if status is undefined or 0 this object will contain the query results * } * - * @interface NativeQueryResult + * @interface QueryResult */ -export interface NativeQueryResult +export interface NitroSQLiteQueryResult extends HybridObject<{ ios: 'c++'; android: 'c++' }> { readonly rowsAffected: number readonly insertId?: number /** Query results */ - readonly results: NativeSQLiteQueryResults + readonly results: Record[] + + /** Query results in a row format for TypeORM compatibility */ + readonly rows?: NitroSQLiteQueryResultRows + /** Table metadata */ - readonly metadata?: Record + readonly metadata?: Record } -/** - * Table metadata - * Describes some information about the table and it's columns fetched by the query - * The index is the name of the column - */ -// TODO: Investigate why this doesn't work with nitrogen -// export type SQLiteQueryResultRow = Record -// export type SQLiteQueryResults = SQLiteQueryResultRow[] -export type NativeSQLiteQueryResults = Record[] - -// TODO: Investigate why this doesn't work with nitrogen -// export type SQLiteQueryTableMetadata = Record -export interface SQLiteQueryColumnMetadata { +// TODO: Investigate why this cannot be represented in Nitro + +// type NitroQueryResultRow = Record + +export type NitroSQLiteQueryResultRows< + Row extends Record = Record, +> = { + /** Raw array with all dataset */ + _array: Row[] + /** The lengh of the dataset */ + length: number + /** A convenience function to acess the index based the row object + * @param idx the row index + * @returns the row structure identified by column names + */ + item: (idx: number) => Record | undefined +} + +export type NitroSQLiteQueryColumnMetadata = { /** The name used for this column for this result set */ name: string + /** The declared column type for this column, when fetched directly from a table or a View resulting from a table column. "UNKNOWN" for dynamic values, like function returned ones. */ type: ColumnType + /** The index for this column for this result set */ index: number } diff --git a/package/src/typeORM.ts b/package/src/typeORM.ts index 20b30b8..83e94bf 100644 --- a/package/src/typeORM.ts +++ b/package/src/typeORM.ts @@ -6,10 +6,10 @@ // |_| |_| |_| |______\____/|_| \_\_| |_| /_/ \_\_| |_____| import type { - QueryResult, Transaction, SQLiteQueryParams, QueryResultRow, + QueryResult, } from './types' import * as Operations from './operations/session' diff --git a/package/src/types.ts b/package/src/types.ts index dd11c30..938bb51 100644 --- a/package/src/types.ts +++ b/package/src/types.ts @@ -1,3 +1,9 @@ +import type { + NitroSQLiteQueryColumnMetadata, + NitroSQLiteQueryResult, + NitroSQLiteQueryResultRows, +} from './specs/NitroSQLiteQueryResult.nitro' + export interface NitroSQLiteConnectionOptions { name: string location?: string @@ -28,48 +34,36 @@ export enum ColumnType { NULL_VALUE, } -// Passing null/undefined in array types is not possible, so we us a special struct as a workaround. -export type SQLiteNullValue = { - isNitroSQLiteNull: true -} export type SQLiteValue = | boolean | number | string | ArrayBuffer - | SQLiteNullValue + | null + | undefined -/** Used internally to transform the query params into a native format without nullish values */ -export type NativeSQLiteQueryParams = SQLiteValue[] +export type SQLiteQueryParams = SQLiteValue[] -/** - * Represents a value that can be stored in a SQLite database - */ -export type SQLiteQueryParamItem = SQLiteValue | null | undefined -export type SQLiteQueryParams = SQLiteQueryParamItem[] - -export type QueryResultRowItem = SQLiteValue | undefined -export type QueryResultRow = Record -export interface QueryResult { - readonly insertId?: number - readonly rowsAffected: number - - readonly rows?: { - /** Raw array with all dataset */ - _array: Row[] - /** The lengh of the dataset */ - length: number - /** A convenience function to acess the index based the row object - * @param idx the row index - * @returns the row structure identified by column names - */ - item: (idx: number) => Row | undefined +export type QueryResultRow = Record + +export type QueryResult = + NitroSQLiteQueryResult & { + readonly rowsAffected: number + readonly insertId?: number + + /** Query results */ + readonly results: Row[] + + /** Query results in a row format for TypeORM compatibility */ + readonly rows?: NitroSQLiteQueryResultRows + + /** Table metadata */ + readonly metadata?: Record } -} export type ExecuteQuery = ( query: string, - params?: SQLiteQueryParams, + params?: SQLiteValue[], ) => QueryResult export type ExecuteAsyncQuery = ( @@ -78,8 +72,8 @@ export type ExecuteAsyncQuery = ( ) => Promise> export interface Transaction { - commit(): QueryResult - rollback(): QueryResult + commit(): NitroSQLiteQueryResult + rollback(): NitroSQLiteQueryResult execute: ExecuteQuery executeAsync: ExecuteAsyncQuery } @@ -95,14 +89,6 @@ export interface BatchQueryCommand { params?: SQLiteQueryParams | SQLiteQueryParams[] } -/** - * Used internally to transform the batch query commands into a native format without nullish values - */ -export interface NativeBatchQueryCommand { - query: string - params?: NativeSQLiteQueryParams | NativeSQLiteQueryParams[] -} - /** * status: 0 or undefined for correct execution, 1 for error * message: if status === 1, here you will find error description From 401b4d7021a56729e74276d0b2912afdeb2f543a Mon Sep 17 00:00:00 2001 From: Christoph Pader Date: Fri, 26 Dec 2025 02:16:12 +0000 Subject: [PATCH 5/8] chore: generate nitrogen files --- .../android/RNNitroSQLite+autolinking.cmake | 2 +- ...QueryCommand.hpp => BatchQueryCommand.hpp} | 35 ++++--- .../c++/HybridNativeQueryResultSpec.cpp | 24 ----- .../c++/HybridNativeQueryResultSpec.hpp | 75 -------------- .../c++/HybridNitroSQLiteQueryResultSpec.cpp | 25 +++++ .../c++/HybridNitroSQLiteQueryResultSpec.hpp | 77 +++++++++++++++ .../shared/c++/HybridNitroSQLiteSpec.hpp | 24 +++-- ...hpp => NitroSQLiteQueryColumnMetadata.hpp} | 22 ++--- .../shared/c++/NitroSQLiteQueryResultRows.hpp | 99 +++++++++++++++++++ .../generated/shared/c++/SQLiteNullValue.hpp | 83 ---------------- 10 files changed, 241 insertions(+), 225 deletions(-) rename package/nitrogen/generated/shared/c++/{NativeBatchQueryCommand.hpp => BatchQueryCommand.hpp} (50%) delete mode 100644 package/nitrogen/generated/shared/c++/HybridNativeQueryResultSpec.cpp delete mode 100644 package/nitrogen/generated/shared/c++/HybridNativeQueryResultSpec.hpp create mode 100644 package/nitrogen/generated/shared/c++/HybridNitroSQLiteQueryResultSpec.cpp create mode 100644 package/nitrogen/generated/shared/c++/HybridNitroSQLiteQueryResultSpec.hpp rename package/nitrogen/generated/shared/c++/{SQLiteQueryColumnMetadata.hpp => NitroSQLiteQueryColumnMetadata.hpp} (76%) create mode 100644 package/nitrogen/generated/shared/c++/NitroSQLiteQueryResultRows.hpp delete mode 100644 package/nitrogen/generated/shared/c++/SQLiteNullValue.hpp diff --git a/package/nitrogen/generated/android/RNNitroSQLite+autolinking.cmake b/package/nitrogen/generated/android/RNNitroSQLite+autolinking.cmake index e8b14ed..706e7ab 100644 --- a/package/nitrogen/generated/android/RNNitroSQLite+autolinking.cmake +++ b/package/nitrogen/generated/android/RNNitroSQLite+autolinking.cmake @@ -33,9 +33,9 @@ target_sources( # Autolinking Setup ../nitrogen/generated/android/RNNitroSQLiteOnLoad.cpp # Shared Nitrogen C++ sources - ../nitrogen/generated/shared/c++/HybridNativeQueryResultSpec.cpp ../nitrogen/generated/shared/c++/HybridNitroSQLiteSpec.cpp ../nitrogen/generated/shared/c++/HybridNitroSQLiteOnLoadSpec.cpp + ../nitrogen/generated/shared/c++/HybridNitroSQLiteQueryResultSpec.cpp # Android-specific Nitrogen C++ sources ../nitrogen/generated/android/c++/JHybridNitroSQLiteOnLoadSpec.cpp ) diff --git a/package/nitrogen/generated/shared/c++/NativeBatchQueryCommand.hpp b/package/nitrogen/generated/shared/c++/BatchQueryCommand.hpp similarity index 50% rename from package/nitrogen/generated/shared/c++/NativeBatchQueryCommand.hpp rename to package/nitrogen/generated/shared/c++/BatchQueryCommand.hpp index d9d0949..4331b77 100644 --- a/package/nitrogen/generated/shared/c++/NativeBatchQueryCommand.hpp +++ b/package/nitrogen/generated/shared/c++/BatchQueryCommand.hpp @@ -1,5 +1,5 @@ /// -/// NativeBatchQueryCommand.hpp +/// BatchQueryCommand.hpp /// This file was generated by nitrogen. DO NOT MODIFY THIS FILE. /// https://github.com/mrousavy/nitro /// Copyright © 2025 Marc Rousavy @ Margelo @@ -28,12 +28,11 @@ #error NitroModules cannot be found! Are you sure you installed NitroModules properly? #endif -// Forward declaration of `SQLiteNullValue` to properly resolve imports. -namespace margelo::nitro::rnnitrosqlite { struct SQLiteNullValue; } + #include +#include #include -#include "SQLiteNullValue.hpp" #include #include #include @@ -41,39 +40,39 @@ namespace margelo::nitro::rnnitrosqlite { struct SQLiteNullValue; } namespace margelo::nitro::rnnitrosqlite { /** - * A struct which can be represented as a JavaScript object (NativeBatchQueryCommand). + * A struct which can be represented as a JavaScript object (BatchQueryCommand). */ - struct NativeBatchQueryCommand final { + struct BatchQueryCommand final { public: std::string query SWIFT_PRIVATE; - std::optional, std::string, double, SQLiteNullValue>>>, std::vector, std::string, double, SQLiteNullValue>>>> params SWIFT_PRIVATE; + std::optional, std::string, double>>>, std::vector, std::string, double>>>> params SWIFT_PRIVATE; public: - NativeBatchQueryCommand() = default; - explicit NativeBatchQueryCommand(std::string query, std::optional, std::string, double, SQLiteNullValue>>>, std::vector, std::string, double, SQLiteNullValue>>>> params): query(query), params(params) {} + BatchQueryCommand() = default; + explicit BatchQueryCommand(std::string query, std::optional, std::string, double>>>, std::vector, std::string, double>>>> params): query(query), params(params) {} public: - friend bool operator==(const NativeBatchQueryCommand& lhs, const NativeBatchQueryCommand& rhs) = default; + friend bool operator==(const BatchQueryCommand& lhs, const BatchQueryCommand& rhs) = default; }; } // namespace margelo::nitro::rnnitrosqlite namespace margelo::nitro { - // C++ NativeBatchQueryCommand <> JS NativeBatchQueryCommand (object) + // C++ BatchQueryCommand <> JS BatchQueryCommand (object) template <> - struct JSIConverter final { - static inline margelo::nitro::rnnitrosqlite::NativeBatchQueryCommand fromJSI(jsi::Runtime& runtime, const jsi::Value& arg) { + struct JSIConverter final { + static inline margelo::nitro::rnnitrosqlite::BatchQueryCommand fromJSI(jsi::Runtime& runtime, const jsi::Value& arg) { jsi::Object obj = arg.asObject(runtime); - return margelo::nitro::rnnitrosqlite::NativeBatchQueryCommand( + return margelo::nitro::rnnitrosqlite::BatchQueryCommand( JSIConverter::fromJSI(runtime, obj.getProperty(runtime, PropNameIDCache::get(runtime, "query"))), - JSIConverter, std::string, double, margelo::nitro::rnnitrosqlite::SQLiteNullValue>>>, std::vector, std::string, double, margelo::nitro::rnnitrosqlite::SQLiteNullValue>>>>>::fromJSI(runtime, obj.getProperty(runtime, PropNameIDCache::get(runtime, "params"))) + JSIConverter, std::string, double>>>, std::vector, std::string, double>>>>>::fromJSI(runtime, obj.getProperty(runtime, PropNameIDCache::get(runtime, "params"))) ); } - static inline jsi::Value toJSI(jsi::Runtime& runtime, const margelo::nitro::rnnitrosqlite::NativeBatchQueryCommand& arg) { + static inline jsi::Value toJSI(jsi::Runtime& runtime, const margelo::nitro::rnnitrosqlite::BatchQueryCommand& arg) { jsi::Object obj(runtime); obj.setProperty(runtime, PropNameIDCache::get(runtime, "query"), JSIConverter::toJSI(runtime, arg.query)); - obj.setProperty(runtime, PropNameIDCache::get(runtime, "params"), JSIConverter, std::string, double, margelo::nitro::rnnitrosqlite::SQLiteNullValue>>>, std::vector, std::string, double, margelo::nitro::rnnitrosqlite::SQLiteNullValue>>>>>::toJSI(runtime, arg.params)); + obj.setProperty(runtime, PropNameIDCache::get(runtime, "params"), JSIConverter, std::string, double>>>, std::vector, std::string, double>>>>>::toJSI(runtime, arg.params)); return obj; } static inline bool canConvert(jsi::Runtime& runtime, const jsi::Value& value) { @@ -85,7 +84,7 @@ namespace margelo::nitro { return false; } if (!JSIConverter::canConvert(runtime, obj.getProperty(runtime, PropNameIDCache::get(runtime, "query")))) return false; - if (!JSIConverter, std::string, double, margelo::nitro::rnnitrosqlite::SQLiteNullValue>>>, std::vector, std::string, double, margelo::nitro::rnnitrosqlite::SQLiteNullValue>>>>>::canConvert(runtime, obj.getProperty(runtime, PropNameIDCache::get(runtime, "params")))) return false; + if (!JSIConverter, std::string, double>>>, std::vector, std::string, double>>>>>::canConvert(runtime, obj.getProperty(runtime, PropNameIDCache::get(runtime, "params")))) return false; return true; } }; diff --git a/package/nitrogen/generated/shared/c++/HybridNativeQueryResultSpec.cpp b/package/nitrogen/generated/shared/c++/HybridNativeQueryResultSpec.cpp deleted file mode 100644 index f72a37f..0000000 --- a/package/nitrogen/generated/shared/c++/HybridNativeQueryResultSpec.cpp +++ /dev/null @@ -1,24 +0,0 @@ -/// -/// HybridNativeQueryResultSpec.cpp -/// This file was generated by nitrogen. DO NOT MODIFY THIS FILE. -/// https://github.com/mrousavy/nitro -/// Copyright © 2025 Marc Rousavy @ Margelo -/// - -#include "HybridNativeQueryResultSpec.hpp" - -namespace margelo::nitro::rnnitrosqlite { - - void HybridNativeQueryResultSpec::loadHybridMethods() { - // load base methods/properties - HybridObject::loadHybridMethods(); - // load custom methods/properties - registerHybrids(this, [](Prototype& prototype) { - prototype.registerHybridGetter("rowsAffected", &HybridNativeQueryResultSpec::getRowsAffected); - prototype.registerHybridGetter("insertId", &HybridNativeQueryResultSpec::getInsertId); - prototype.registerHybridGetter("results", &HybridNativeQueryResultSpec::getResults); - prototype.registerHybridGetter("metadata", &HybridNativeQueryResultSpec::getMetadata); - }); - } - -} // namespace margelo::nitro::rnnitrosqlite diff --git a/package/nitrogen/generated/shared/c++/HybridNativeQueryResultSpec.hpp b/package/nitrogen/generated/shared/c++/HybridNativeQueryResultSpec.hpp deleted file mode 100644 index d9a93dc..0000000 --- a/package/nitrogen/generated/shared/c++/HybridNativeQueryResultSpec.hpp +++ /dev/null @@ -1,75 +0,0 @@ -/// -/// HybridNativeQueryResultSpec.hpp -/// This file was generated by nitrogen. DO NOT MODIFY THIS FILE. -/// https://github.com/mrousavy/nitro -/// Copyright © 2025 Marc Rousavy @ Margelo -/// - -#pragma once - -#if __has_include() -#include -#else -#error NitroModules cannot be found! Are you sure you installed NitroModules properly? -#endif - -// Forward declaration of `SQLiteNullValue` to properly resolve imports. -namespace margelo::nitro::rnnitrosqlite { struct SQLiteNullValue; } -// Forward declaration of `SQLiteQueryColumnMetadata` to properly resolve imports. -namespace margelo::nitro::rnnitrosqlite { struct SQLiteQueryColumnMetadata; } - -#include -#include -#include -#include "SQLiteNullValue.hpp" -#include -#include -#include -#include "SQLiteQueryColumnMetadata.hpp" - -namespace margelo::nitro::rnnitrosqlite { - - using namespace margelo::nitro; - - /** - * An abstract base class for `NativeQueryResult` - * Inherit this class to create instances of `HybridNativeQueryResultSpec` in C++. - * You must explicitly call `HybridObject`'s constructor yourself, because it is virtual. - * @example - * ```cpp - * class HybridNativeQueryResult: public HybridNativeQueryResultSpec { - * public: - * HybridNativeQueryResult(...): HybridObject(TAG) { ... } - * // ... - * }; - * ``` - */ - class HybridNativeQueryResultSpec: public virtual HybridObject { - public: - // Constructor - explicit HybridNativeQueryResultSpec(): HybridObject(TAG) { } - - // Destructor - ~HybridNativeQueryResultSpec() override = default; - - public: - // Properties - virtual double getRowsAffected() = 0; - virtual std::optional getInsertId() = 0; - virtual std::vector, std::string, double, SQLiteNullValue>>> getResults() = 0; - virtual std::optional> getMetadata() = 0; - - public: - // Methods - - - protected: - // Hybrid Setup - void loadHybridMethods() override; - - protected: - // Tag for logging - static constexpr auto TAG = "NativeQueryResult"; - }; - -} // namespace margelo::nitro::rnnitrosqlite diff --git a/package/nitrogen/generated/shared/c++/HybridNitroSQLiteQueryResultSpec.cpp b/package/nitrogen/generated/shared/c++/HybridNitroSQLiteQueryResultSpec.cpp new file mode 100644 index 0000000..0897c9d --- /dev/null +++ b/package/nitrogen/generated/shared/c++/HybridNitroSQLiteQueryResultSpec.cpp @@ -0,0 +1,25 @@ +/// +/// HybridNitroSQLiteQueryResultSpec.cpp +/// This file was generated by nitrogen. DO NOT MODIFY THIS FILE. +/// https://github.com/mrousavy/nitro +/// Copyright © 2025 Marc Rousavy @ Margelo +/// + +#include "HybridNitroSQLiteQueryResultSpec.hpp" + +namespace margelo::nitro::rnnitrosqlite { + + void HybridNitroSQLiteQueryResultSpec::loadHybridMethods() { + // load base methods/properties + HybridObject::loadHybridMethods(); + // load custom methods/properties + registerHybrids(this, [](Prototype& prototype) { + prototype.registerHybridGetter("rowsAffected", &HybridNitroSQLiteQueryResultSpec::getRowsAffected); + prototype.registerHybridGetter("insertId", &HybridNitroSQLiteQueryResultSpec::getInsertId); + prototype.registerHybridGetter("results", &HybridNitroSQLiteQueryResultSpec::getResults); + prototype.registerHybridGetter("rows", &HybridNitroSQLiteQueryResultSpec::getRows); + prototype.registerHybridGetter("metadata", &HybridNitroSQLiteQueryResultSpec::getMetadata); + }); + } + +} // namespace margelo::nitro::rnnitrosqlite diff --git a/package/nitrogen/generated/shared/c++/HybridNitroSQLiteQueryResultSpec.hpp b/package/nitrogen/generated/shared/c++/HybridNitroSQLiteQueryResultSpec.hpp new file mode 100644 index 0000000..36c007e --- /dev/null +++ b/package/nitrogen/generated/shared/c++/HybridNitroSQLiteQueryResultSpec.hpp @@ -0,0 +1,77 @@ +/// +/// HybridNitroSQLiteQueryResultSpec.hpp +/// This file was generated by nitrogen. DO NOT MODIFY THIS FILE. +/// https://github.com/mrousavy/nitro +/// Copyright © 2025 Marc Rousavy @ Margelo +/// + +#pragma once + +#if __has_include() +#include +#else +#error NitroModules cannot be found! Are you sure you installed NitroModules properly? +#endif + +// Forward declaration of `NitroSQLiteQueryResultRows` to properly resolve imports. +namespace margelo::nitro::rnnitrosqlite { struct NitroSQLiteQueryResultRows; } +// Forward declaration of `NitroSQLiteQueryColumnMetadata` to properly resolve imports. +namespace margelo::nitro::rnnitrosqlite { struct NitroSQLiteQueryColumnMetadata; } + +#include +#include +#include +#include +#include +#include +#include +#include "NitroSQLiteQueryResultRows.hpp" +#include "NitroSQLiteQueryColumnMetadata.hpp" + +namespace margelo::nitro::rnnitrosqlite { + + using namespace margelo::nitro; + + /** + * An abstract base class for `NitroSQLiteQueryResult` + * Inherit this class to create instances of `HybridNitroSQLiteQueryResultSpec` in C++. + * You must explicitly call `HybridObject`'s constructor yourself, because it is virtual. + * @example + * ```cpp + * class HybridNitroSQLiteQueryResult: public HybridNitroSQLiteQueryResultSpec { + * public: + * HybridNitroSQLiteQueryResult(...): HybridObject(TAG) { ... } + * // ... + * }; + * ``` + */ + class HybridNitroSQLiteQueryResultSpec: public virtual HybridObject { + public: + // Constructor + explicit HybridNitroSQLiteQueryResultSpec(): HybridObject(TAG) { } + + // Destructor + ~HybridNitroSQLiteQueryResultSpec() override = default; + + public: + // Properties + virtual double getRowsAffected() = 0; + virtual std::optional getInsertId() = 0; + virtual std::vector, std::string, double>>> getResults() = 0; + virtual std::optional getRows() = 0; + virtual std::optional> getMetadata() = 0; + + public: + // Methods + + + protected: + // Hybrid Setup + void loadHybridMethods() override; + + protected: + // Tag for logging + static constexpr auto TAG = "NitroSQLiteQueryResult"; + }; + +} // namespace margelo::nitro::rnnitrosqlite diff --git a/package/nitrogen/generated/shared/c++/HybridNitroSQLiteSpec.hpp b/package/nitrogen/generated/shared/c++/HybridNitroSQLiteSpec.hpp index 70ade6b..72ff32b 100644 --- a/package/nitrogen/generated/shared/c++/HybridNitroSQLiteSpec.hpp +++ b/package/nitrogen/generated/shared/c++/HybridNitroSQLiteSpec.hpp @@ -13,28 +13,26 @@ #error NitroModules cannot be found! Are you sure you installed NitroModules properly? #endif -// Forward declaration of `HybridNativeQueryResultSpec` to properly resolve imports. -namespace margelo::nitro::rnnitrosqlite { class HybridNativeQueryResultSpec; } -// Forward declaration of `SQLiteNullValue` to properly resolve imports. -namespace margelo::nitro::rnnitrosqlite { struct SQLiteNullValue; } +// Forward declaration of `HybridNitroSQLiteQueryResultSpec` to properly resolve imports. +namespace margelo::nitro::rnnitrosqlite { class HybridNitroSQLiteQueryResultSpec; } // Forward declaration of `BatchQueryResult` to properly resolve imports. namespace margelo::nitro::rnnitrosqlite { struct BatchQueryResult; } -// Forward declaration of `NativeBatchQueryCommand` to properly resolve imports. -namespace margelo::nitro::rnnitrosqlite { struct NativeBatchQueryCommand; } +// Forward declaration of `BatchQueryCommand` to properly resolve imports. +namespace margelo::nitro::rnnitrosqlite { struct BatchQueryCommand; } // Forward declaration of `FileLoadResult` to properly resolve imports. namespace margelo::nitro::rnnitrosqlite { struct FileLoadResult; } #include #include #include -#include "HybridNativeQueryResultSpec.hpp" +#include "HybridNitroSQLiteQueryResultSpec.hpp" +#include #include -#include "SQLiteNullValue.hpp" #include #include #include #include "BatchQueryResult.hpp" -#include "NativeBatchQueryCommand.hpp" +#include "BatchQueryCommand.hpp" #include "FileLoadResult.hpp" namespace margelo::nitro::rnnitrosqlite { @@ -73,10 +71,10 @@ namespace margelo::nitro::rnnitrosqlite { virtual void drop(const std::string& dbName, const std::optional& location) = 0; virtual void attach(const std::string& mainDbName, const std::string& dbNameToAttach, const std::string& alias, const std::optional& location) = 0; virtual void detach(const std::string& mainDbName, const std::string& alias) = 0; - virtual std::shared_ptr execute(const std::string& dbName, const std::string& query, const std::optional, std::string, double, SQLiteNullValue>>>& params) = 0; - virtual std::shared_ptr>> executeAsync(const std::string& dbName, const std::string& query, const std::optional, std::string, double, SQLiteNullValue>>>& params) = 0; - virtual BatchQueryResult executeBatch(const std::string& dbName, const std::vector& commands) = 0; - virtual std::shared_ptr> executeBatchAsync(const std::string& dbName, const std::vector& commands) = 0; + virtual std::shared_ptr execute(const std::string& dbName, const std::string& query, const std::optional, std::string, double>>>& params) = 0; + virtual std::shared_ptr>> executeAsync(const std::string& dbName, const std::string& query, const std::optional, std::string, double>>>& params) = 0; + virtual BatchQueryResult executeBatch(const std::string& dbName, const std::vector& commands) = 0; + virtual std::shared_ptr> executeBatchAsync(const std::string& dbName, const std::vector& commands) = 0; virtual FileLoadResult loadFile(const std::string& dbName, const std::string& location) = 0; virtual std::shared_ptr> loadFileAsync(const std::string& dbName, const std::string& location) = 0; diff --git a/package/nitrogen/generated/shared/c++/SQLiteQueryColumnMetadata.hpp b/package/nitrogen/generated/shared/c++/NitroSQLiteQueryColumnMetadata.hpp similarity index 76% rename from package/nitrogen/generated/shared/c++/SQLiteQueryColumnMetadata.hpp rename to package/nitrogen/generated/shared/c++/NitroSQLiteQueryColumnMetadata.hpp index bf50a1d..8545d00 100644 --- a/package/nitrogen/generated/shared/c++/SQLiteQueryColumnMetadata.hpp +++ b/package/nitrogen/generated/shared/c++/NitroSQLiteQueryColumnMetadata.hpp @@ -1,5 +1,5 @@ /// -/// SQLiteQueryColumnMetadata.hpp +/// NitroSQLiteQueryColumnMetadata.hpp /// This file was generated by nitrogen. DO NOT MODIFY THIS FILE. /// https://github.com/mrousavy/nitro /// Copyright © 2025 Marc Rousavy @ Margelo @@ -37,38 +37,38 @@ namespace margelo::nitro::rnnitrosqlite { enum class ColumnType; } namespace margelo::nitro::rnnitrosqlite { /** - * A struct which can be represented as a JavaScript object (SQLiteQueryColumnMetadata). + * A struct which can be represented as a JavaScript object (NitroSQLiteQueryColumnMetadata). */ - struct SQLiteQueryColumnMetadata final { + struct NitroSQLiteQueryColumnMetadata final { public: std::string name SWIFT_PRIVATE; ColumnType type SWIFT_PRIVATE; double index SWIFT_PRIVATE; public: - SQLiteQueryColumnMetadata() = default; - explicit SQLiteQueryColumnMetadata(std::string name, ColumnType type, double index): name(name), type(type), index(index) {} + NitroSQLiteQueryColumnMetadata() = default; + explicit NitroSQLiteQueryColumnMetadata(std::string name, ColumnType type, double index): name(name), type(type), index(index) {} public: - friend bool operator==(const SQLiteQueryColumnMetadata& lhs, const SQLiteQueryColumnMetadata& rhs) = default; + friend bool operator==(const NitroSQLiteQueryColumnMetadata& lhs, const NitroSQLiteQueryColumnMetadata& rhs) = default; }; } // namespace margelo::nitro::rnnitrosqlite namespace margelo::nitro { - // C++ SQLiteQueryColumnMetadata <> JS SQLiteQueryColumnMetadata (object) + // C++ NitroSQLiteQueryColumnMetadata <> JS NitroSQLiteQueryColumnMetadata (object) template <> - struct JSIConverter final { - static inline margelo::nitro::rnnitrosqlite::SQLiteQueryColumnMetadata fromJSI(jsi::Runtime& runtime, const jsi::Value& arg) { + struct JSIConverter final { + static inline margelo::nitro::rnnitrosqlite::NitroSQLiteQueryColumnMetadata fromJSI(jsi::Runtime& runtime, const jsi::Value& arg) { jsi::Object obj = arg.asObject(runtime); - return margelo::nitro::rnnitrosqlite::SQLiteQueryColumnMetadata( + return margelo::nitro::rnnitrosqlite::NitroSQLiteQueryColumnMetadata( JSIConverter::fromJSI(runtime, obj.getProperty(runtime, PropNameIDCache::get(runtime, "name"))), JSIConverter::fromJSI(runtime, obj.getProperty(runtime, PropNameIDCache::get(runtime, "type"))), JSIConverter::fromJSI(runtime, obj.getProperty(runtime, PropNameIDCache::get(runtime, "index"))) ); } - static inline jsi::Value toJSI(jsi::Runtime& runtime, const margelo::nitro::rnnitrosqlite::SQLiteQueryColumnMetadata& arg) { + static inline jsi::Value toJSI(jsi::Runtime& runtime, const margelo::nitro::rnnitrosqlite::NitroSQLiteQueryColumnMetadata& arg) { jsi::Object obj(runtime); obj.setProperty(runtime, PropNameIDCache::get(runtime, "name"), JSIConverter::toJSI(runtime, arg.name)); obj.setProperty(runtime, PropNameIDCache::get(runtime, "type"), JSIConverter::toJSI(runtime, arg.type)); diff --git a/package/nitrogen/generated/shared/c++/NitroSQLiteQueryResultRows.hpp b/package/nitrogen/generated/shared/c++/NitroSQLiteQueryResultRows.hpp new file mode 100644 index 0000000..931e9fa --- /dev/null +++ b/package/nitrogen/generated/shared/c++/NitroSQLiteQueryResultRows.hpp @@ -0,0 +1,99 @@ +/// +/// NitroSQLiteQueryResultRows.hpp +/// This file was generated by nitrogen. DO NOT MODIFY THIS FILE. +/// https://github.com/mrousavy/nitro +/// Copyright © 2025 Marc Rousavy @ Margelo +/// + +#pragma once + +#if __has_include() +#include +#else +#error NitroModules cannot be found! Are you sure you installed NitroModules properly? +#endif +#if __has_include() +#include +#else +#error NitroModules cannot be found! Are you sure you installed NitroModules properly? +#endif +#if __has_include() +#include +#else +#error NitroModules cannot be found! Are you sure you installed NitroModules properly? +#endif +#if __has_include() +#include +#else +#error NitroModules cannot be found! Are you sure you installed NitroModules properly? +#endif + + + +#include +#include +#include +#include +#include +#include +#include +#include +#include + +namespace margelo::nitro::rnnitrosqlite { + + /** + * A struct which can be represented as a JavaScript object (NitroSQLiteQueryResultRows). + */ + struct NitroSQLiteQueryResultRows final { + public: + std::vector, std::string, double>>> _array SWIFT_PRIVATE; + double length SWIFT_PRIVATE; + std::function, std::string, double>>>>>(double /* idx */)> item SWIFT_PRIVATE; + + public: + NitroSQLiteQueryResultRows() = default; + explicit NitroSQLiteQueryResultRows(std::vector, std::string, double>>> _array, double length, std::function, std::string, double>>>>>(double /* idx */)> item): _array(_array), length(length), item(item) {} + + public: + // NitroSQLiteQueryResultRows is not equatable because these properties are not equatable: item + }; + +} // namespace margelo::nitro::rnnitrosqlite + +namespace margelo::nitro { + + // C++ NitroSQLiteQueryResultRows <> JS NitroSQLiteQueryResultRows (object) + template <> + struct JSIConverter final { + static inline margelo::nitro::rnnitrosqlite::NitroSQLiteQueryResultRows fromJSI(jsi::Runtime& runtime, const jsi::Value& arg) { + jsi::Object obj = arg.asObject(runtime); + return margelo::nitro::rnnitrosqlite::NitroSQLiteQueryResultRows( + JSIConverter, std::string, double>>>>::fromJSI(runtime, obj.getProperty(runtime, PropNameIDCache::get(runtime, "_array"))), + JSIConverter::fromJSI(runtime, obj.getProperty(runtime, PropNameIDCache::get(runtime, "length"))), + JSIConverter, std::string, double>>>>>(double)>>::fromJSI(runtime, obj.getProperty(runtime, PropNameIDCache::get(runtime, "item"))) + ); + } + static inline jsi::Value toJSI(jsi::Runtime& runtime, const margelo::nitro::rnnitrosqlite::NitroSQLiteQueryResultRows& arg) { + jsi::Object obj(runtime); + obj.setProperty(runtime, PropNameIDCache::get(runtime, "_array"), JSIConverter, std::string, double>>>>::toJSI(runtime, arg._array)); + obj.setProperty(runtime, PropNameIDCache::get(runtime, "length"), JSIConverter::toJSI(runtime, arg.length)); + obj.setProperty(runtime, PropNameIDCache::get(runtime, "item"), JSIConverter, std::string, double>>>>>(double)>>::toJSI(runtime, arg.item)); + return obj; + } + static inline bool canConvert(jsi::Runtime& runtime, const jsi::Value& value) { + if (!value.isObject()) { + return false; + } + jsi::Object obj = value.getObject(runtime); + if (!nitro::isPlainObject(runtime, obj)) { + return false; + } + if (!JSIConverter, std::string, double>>>>::canConvert(runtime, obj.getProperty(runtime, PropNameIDCache::get(runtime, "_array")))) return false; + if (!JSIConverter::canConvert(runtime, obj.getProperty(runtime, PropNameIDCache::get(runtime, "length")))) return false; + if (!JSIConverter, std::string, double>>>>>(double)>>::canConvert(runtime, obj.getProperty(runtime, PropNameIDCache::get(runtime, "item")))) return false; + return true; + } + }; + +} // namespace margelo::nitro diff --git a/package/nitrogen/generated/shared/c++/SQLiteNullValue.hpp b/package/nitrogen/generated/shared/c++/SQLiteNullValue.hpp deleted file mode 100644 index 1a80342..0000000 --- a/package/nitrogen/generated/shared/c++/SQLiteNullValue.hpp +++ /dev/null @@ -1,83 +0,0 @@ -/// -/// SQLiteNullValue.hpp -/// This file was generated by nitrogen. DO NOT MODIFY THIS FILE. -/// https://github.com/mrousavy/nitro -/// Copyright © 2025 Marc Rousavy @ Margelo -/// - -#pragma once - -#if __has_include() -#include -#else -#error NitroModules cannot be found! Are you sure you installed NitroModules properly? -#endif -#if __has_include() -#include -#else -#error NitroModules cannot be found! Are you sure you installed NitroModules properly? -#endif -#if __has_include() -#include -#else -#error NitroModules cannot be found! Are you sure you installed NitroModules properly? -#endif -#if __has_include() -#include -#else -#error NitroModules cannot be found! Are you sure you installed NitroModules properly? -#endif - - - - - -namespace margelo::nitro::rnnitrosqlite { - - /** - * A struct which can be represented as a JavaScript object (SQLiteNullValue). - */ - struct SQLiteNullValue final { - public: - bool isNitroSQLiteNull SWIFT_PRIVATE; - - public: - SQLiteNullValue() = default; - explicit SQLiteNullValue(bool isNitroSQLiteNull): isNitroSQLiteNull(isNitroSQLiteNull) {} - - public: - friend bool operator==(const SQLiteNullValue& lhs, const SQLiteNullValue& rhs) = default; - }; - -} // namespace margelo::nitro::rnnitrosqlite - -namespace margelo::nitro { - - // C++ SQLiteNullValue <> JS SQLiteNullValue (object) - template <> - struct JSIConverter final { - static inline margelo::nitro::rnnitrosqlite::SQLiteNullValue fromJSI(jsi::Runtime& runtime, const jsi::Value& arg) { - jsi::Object obj = arg.asObject(runtime); - return margelo::nitro::rnnitrosqlite::SQLiteNullValue( - JSIConverter::fromJSI(runtime, obj.getProperty(runtime, PropNameIDCache::get(runtime, "isNitroSQLiteNull"))) - ); - } - static inline jsi::Value toJSI(jsi::Runtime& runtime, const margelo::nitro::rnnitrosqlite::SQLiteNullValue& arg) { - jsi::Object obj(runtime); - obj.setProperty(runtime, PropNameIDCache::get(runtime, "isNitroSQLiteNull"), JSIConverter::toJSI(runtime, arg.isNitroSQLiteNull)); - return obj; - } - static inline bool canConvert(jsi::Runtime& runtime, const jsi::Value& value) { - if (!value.isObject()) { - return false; - } - jsi::Object obj = value.getObject(runtime); - if (!nitro::isPlainObject(runtime, obj)) { - return false; - } - if (!JSIConverter::canConvert(runtime, obj.getProperty(runtime, PropNameIDCache::get(runtime, "isNitroSQLiteNull")))) return false; - return true; - } - }; - -} // namespace margelo::nitro From afd1f5ca9f05dcbe75eea1fe6ab70f88dea1d960 Mon Sep 17 00:00:00 2001 From: Christoph Pader Date: Fri, 26 Dec 2025 02:29:46 +0000 Subject: [PATCH 6/8] chore: update pods --- example/ios/Podfile.lock | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/example/ios/Podfile.lock b/example/ios/Podfile.lock index 525dba5..56a948b 100644 --- a/example/ios/Podfile.lock +++ b/example/ios/Podfile.lock @@ -8,7 +8,7 @@ PODS: - hermes-engine (0.82.1): - hermes-engine/Pre-built (= 0.82.1) - hermes-engine/Pre-built (0.82.1) - - NitroModules (0.27.2): + - NitroModules (0.32.0): - boost - DoubleConversion - fast_float @@ -2778,7 +2778,7 @@ SPEC CHECKSUMS: fmt: a40bb5bd0294ea969aaaba240a927bd33d878cdd glog: 5683914934d5b6e4240e497e0f4a3b42d1854183 hermes-engine: 273e30e7fb618279934b0b95ffab60ecedb7acf5 - NitroModules: 18d9127f80848a1d12ed4bf59d14a6d816a720d8 + NitroModules: 5ab248c0c4bc0a440414c0a8509dbad55cc7da6c RCT-Folly: 846fda9475e61ec7bcbf8a3fe81edfcaeb090669 RCTDeprecation: f17e2ebc07876ca9ab8eb6e4b0a4e4647497ae3a RCTRequired: e2c574c1b45231f7efb0834936bd609d75072b63 From 85bdd5c1ef1857907446ac090c5e91dab963d15f Mon Sep 17 00:00:00 2001 From: Christoph Pader Date: Fri, 26 Dec 2025 02:59:25 +0000 Subject: [PATCH 7/8] feat: removing custom null type from C++ code --- package/cpp/operations.cpp | 6 +-- package/cpp/specs/HybridNativeQueryResult.cpp | 21 -------- package/cpp/specs/HybridNitroSQLite.cpp | 21 ++++---- package/cpp/specs/HybridNitroSQLite.hpp | 12 ++--- .../specs/HybridNitroSQLiteQueryResult.cpp | 49 +++++++++++++++++++ ...t.hpp => HybridNitroSQLiteQueryResult.hpp} | 11 +++-- package/cpp/sqliteExecuteBatch.cpp | 2 +- package/cpp/sqliteExecuteBatch.hpp | 4 +- package/cpp/types.hpp | 7 ++- 9 files changed, 81 insertions(+), 52 deletions(-) delete mode 100644 package/cpp/specs/HybridNativeQueryResult.cpp create mode 100644 package/cpp/specs/HybridNitroSQLiteQueryResult.cpp rename package/cpp/specs/{HybridNativeQueryResult.hpp => HybridNitroSQLiteQueryResult.hpp} (55%) diff --git a/package/cpp/operations.cpp b/package/cpp/operations.cpp index ceae408..bc339ca 100644 --- a/package/cpp/operations.cpp +++ b/package/cpp/operations.cpp @@ -105,7 +105,7 @@ void bindStatement(sqlite3_stmt* statement, const SQLiteQueryParams& values) { for (int valueIndex = 0; valueIndex < values.size(); valueIndex++) { int sqliteIndex = valueIndex + 1; SQLiteValue value = values.at(valueIndex); - if (std::holds_alternative(value)) { + if (std::holds_alternative(value)) { sqlite3_bind_null(statement, sqliteIndex); } else if (std::holds_alternative(value)) { sqlite3_bind_int(statement, sqliteIndex, std::get(value)); @@ -191,7 +191,7 @@ SQLiteExecuteQueryResult sqliteExecute(const std::string& dbName, const std::str case SQLITE_NULL: // Intentionally left blank to switch to default case default: - row[column_name] = SQLiteNullValue(true); + row[column_name] = NullType::null; break; } i++; @@ -205,7 +205,7 @@ SQLiteExecuteQueryResult sqliteExecute(const std::string& dbName, const std::str column_name = sqlite3_column_name(statement, i); const char* tp = sqlite3_column_decltype(statement, i); column_declared_type = mapSQLiteTypeToColumnType(tp); - auto columnMeta = SQLiteQueryColumnMetadata(std::move(column_name), std::move(column_declared_type), i); + auto columnMeta = NitroSQLiteQueryColumnMetadata(std::move(column_name), std::move(column_declared_type), i); if (!metadata) { metadata = std::make_optional(); diff --git a/package/cpp/specs/HybridNativeQueryResult.cpp b/package/cpp/specs/HybridNativeQueryResult.cpp deleted file mode 100644 index 2254468..0000000 --- a/package/cpp/specs/HybridNativeQueryResult.cpp +++ /dev/null @@ -1,21 +0,0 @@ -#include "HybridNativeQueryResult.hpp" - -namespace margelo::nitro::rnnitrosqlite { - -std::optional HybridNativeQueryResult::getInsertId() { - return _result.insertId; -} - -double HybridNativeQueryResult::getRowsAffected() { - return _result.rowsAffected; -} - -SQLiteQueryResults HybridNativeQueryResult::getResults() { - return _result.results; -}; - -std::optional HybridNativeQueryResult::getMetadata() { - return _result.metadata; -} - -} // namespace margelo::nitro::rnnitrosqlite diff --git a/package/cpp/specs/HybridNitroSQLite.cpp b/package/cpp/specs/HybridNitroSQLite.cpp index 07e0c2e..b54b3f0 100644 --- a/package/cpp/specs/HybridNitroSQLite.cpp +++ b/package/cpp/specs/HybridNitroSQLite.cpp @@ -1,5 +1,5 @@ #include "HybridNitroSQLite.hpp" -#include "HybridNativeQueryResult.hpp" +#include "HybridNitroSQLiteQueryResult.hpp" #include "NitroSQLiteException.hpp" #include "importSqlFile.hpp" #include "logs.hpp" @@ -50,23 +50,24 @@ void HybridNitroSQLite::detach(const std::string& mainDbName, const std::string& sqliteDetachDb(mainDbName, alias); }; -using ExecuteQueryResult = std::shared_ptr; +using ExecuteQueryResult = std::shared_ptr; ExecuteQueryResult HybridNitroSQLite::execute(const std::string& dbName, const std::string& query, const std::optional& params) { SQLiteExecuteQueryResult result = sqliteExecute(dbName, query, params); - return std::make_shared(std::move(result)); + return std::make_shared(std::move(result)); }; -std::shared_ptr>> +std::shared_ptr>> HybridNitroSQLite::executeAsync(const std::string& dbName, const std::string& query, const std::optional& params) { - return Promise>::async([=, this]() -> std::shared_ptr { - auto result = execute(dbName, query, params); - return result; - }); + return Promise>::async( + [=, this]() -> std::shared_ptr { + auto result = execute(dbName, query, params); + return result; + }); }; -BatchQueryResult HybridNitroSQLite::executeBatch(const std::string& dbName, const std::vector& batchParams) { +BatchQueryResult HybridNitroSQLite::executeBatch(const std::string& dbName, const std::vector& batchParams) { const auto commands = batchParamsToCommands(batchParams); auto result = sqliteExecuteBatch(dbName, commands); @@ -74,7 +75,7 @@ BatchQueryResult HybridNitroSQLite::executeBatch(const std::string& dbName, cons }; std::shared_ptr> HybridNitroSQLite::executeBatchAsync(const std::string& dbName, - const std::vector& batchParams) { + const std::vector& batchParams) { return Promise::async([=, this]() -> BatchQueryResult { auto result = executeBatch(dbName, batchParams); return result; diff --git a/package/cpp/specs/HybridNitroSQLite.hpp b/package/cpp/specs/HybridNitroSQLite.hpp index 3c3fa28..a533196 100644 --- a/package/cpp/specs/HybridNitroSQLite.hpp +++ b/package/cpp/specs/HybridNitroSQLite.hpp @@ -1,6 +1,6 @@ #pragma once -#include "HybridNativeQueryResultSpec.hpp" +#include "HybridNitroSQLiteQueryResultSpec.hpp" #include "HybridNitroSQLiteSpec.hpp" #include "types.hpp" @@ -28,15 +28,15 @@ class HybridNitroSQLite : public HybridNitroSQLiteSpec { void detach(const std::string& mainDbName, const std::string& alias) override; - std::shared_ptr execute(const std::string& dbName, const std::string& query, - const std::optional& params) override; + std::shared_ptr execute(const std::string& dbName, const std::string& query, + const std::optional& params) override; - std::shared_ptr>> + std::shared_ptr>> executeAsync(const std::string& dbName, const std::string& query, const std::optional& params) override; - BatchQueryResult executeBatch(const std::string& dbName, const std::vector& commands) override; + BatchQueryResult executeBatch(const std::string& dbName, const std::vector& commands) override; std::shared_ptr> executeBatchAsync(const std::string& dbName, - const std::vector& commands) override; + const std::vector& commands) override; FileLoadResult loadFile(const std::string& dbName, const std::string& location) override; std::shared_ptr> loadFileAsync(const std::string& dbName, const std::string& location) override; diff --git a/package/cpp/specs/HybridNitroSQLiteQueryResult.cpp b/package/cpp/specs/HybridNitroSQLiteQueryResult.cpp new file mode 100644 index 0000000..5ccf734 --- /dev/null +++ b/package/cpp/specs/HybridNitroSQLiteQueryResult.cpp @@ -0,0 +1,49 @@ +#include "HybridNitroSQLiteQueryResult.hpp" +#include +#include +#include +#include +#include +#include + +namespace margelo::nitro::rnnitrosqlite { + +std::optional HybridNitroSQLiteQueryResult::getInsertId() { + return _result.insertId; +} + +double HybridNitroSQLiteQueryResult::getRowsAffected() { + return _result.rowsAffected; +} + +SQLiteQueryResults HybridNitroSQLiteQueryResult::getResults() { + return _result.results; +}; + +std::optional HybridNitroSQLiteQueryResult::getRows() { + if (_result.results.empty()) { + return std::nullopt; + } + + auto rows = _result.results; + + // Create the item function that returns a Promise + auto itemFunction = [rows](double idx) -> std::shared_ptr>> { + return Promise>::async([rows, idx]() -> std::optional { + const auto index = static_cast(idx); + if (index >= rows.size()) { + return std::nullopt; + } + return rows[index]; + }); + }; + + const auto length = static_cast(rows.size()); + return NitroSQLiteQueryResultRows(std::move(rows), length, itemFunction); +} + +std::optional HybridNitroSQLiteQueryResult::getMetadata() { + return _result.metadata; +} + +} // namespace margelo::nitro::rnnitrosqlite diff --git a/package/cpp/specs/HybridNativeQueryResult.hpp b/package/cpp/specs/HybridNitroSQLiteQueryResult.hpp similarity index 55% rename from package/cpp/specs/HybridNativeQueryResult.hpp rename to package/cpp/specs/HybridNitroSQLiteQueryResult.hpp index ae002e5..a254f9a 100644 --- a/package/cpp/specs/HybridNativeQueryResult.hpp +++ b/package/cpp/specs/HybridNitroSQLiteQueryResult.hpp @@ -1,17 +1,17 @@ #pragma once -#include "HybridNativeQueryResultSpec.hpp" -#include "types.hpp" #include +#include "HybridNitroSQLiteQueryResultSpec.hpp" +#include "types.hpp" using namespace margelo::rnnitrosqlite; namespace margelo::nitro::rnnitrosqlite { -class HybridNativeQueryResult : public HybridNativeQueryResultSpec { +class HybridNitroSQLiteQueryResult : public HybridNitroSQLiteQueryResultSpec { public: - HybridNativeQueryResult() : HybridObject(TAG) {} - HybridNativeQueryResult(SQLiteExecuteQueryResult&& result) : HybridObject(TAG), _result(std::move(result)) {} + HybridNitroSQLiteQueryResult() : HybridObject(TAG) {} + HybridNitroSQLiteQueryResult(SQLiteExecuteQueryResult&& result) : HybridObject(TAG), _result(std::move(result)) {} private: SQLiteExecuteQueryResult _result; @@ -21,6 +21,7 @@ class HybridNativeQueryResult : public HybridNativeQueryResultSpec { std::optional getInsertId() override; double getRowsAffected() override; SQLiteQueryResults getResults() override; + std::optional getRows() override; std::optional getMetadata() override; }; diff --git a/package/cpp/sqliteExecuteBatch.cpp b/package/cpp/sqliteExecuteBatch.cpp index a11ba70..7e06770 100644 --- a/package/cpp/sqliteExecuteBatch.cpp +++ b/package/cpp/sqliteExecuteBatch.cpp @@ -8,7 +8,7 @@ namespace margelo::rnnitrosqlite { -std::vector batchParamsToCommands(const std::vector& batchParams) { +std::vector batchParamsToCommands(const std::vector& batchParams) { auto commands = std::vector(); for (auto& command : batchParams) { diff --git a/package/cpp/sqliteExecuteBatch.hpp b/package/cpp/sqliteExecuteBatch.hpp index 8fd9f7f..4b07b89 100644 --- a/package/cpp/sqliteExecuteBatch.hpp +++ b/package/cpp/sqliteExecuteBatch.hpp @@ -3,7 +3,7 @@ */ #pragma once -#include "NativeBatchQueryCommand.hpp" +#include "BatchQueryCommand.hpp" #include "types.hpp" using namespace facebook; @@ -20,7 +20,7 @@ struct BatchQuery { * Local Helper method to translate JSI objects BatchQuery datastructure * MUST be called in the JavaScript Thread */ -std::vector batchParamsToCommands(const std::vector& batchParams); +std::vector batchParamsToCommands(const std::vector& batchParams); /** * Execute a batch of commands in a exclusive transaction diff --git a/package/cpp/types.hpp b/package/cpp/types.hpp index a6829c4..48d1e5f 100644 --- a/package/cpp/types.hpp +++ b/package/cpp/types.hpp @@ -1,8 +1,7 @@ #pragma once #include "ColumnType.hpp" -#include "SQLiteNullValue.hpp" -#include "SQLiteQueryColumnMetadata.hpp" +#include "NitroSQLiteQueryColumnMetadata.hpp" #include #include @@ -11,11 +10,11 @@ using namespace margelo::nitro::rnnitrosqlite; namespace margelo::rnnitrosqlite { -using SQLiteValue = std::variant, SQLiteNullValue>; +using SQLiteValue = std::variant, std::string, double>; using SQLiteQueryParams = std::vector; using SQLiteQueryResultRow = std::unordered_map; using SQLiteQueryResults = std::vector; -using SQLiteQueryTableMetadata = std::unordered_map; +using SQLiteQueryTableMetadata = std::unordered_map; struct SQLiteOperationResult { int rowsAffected; From 81efc7da23f4c06b118f54b2c8e5b52985a79bfb Mon Sep 17 00:00:00 2001 From: Christoph Pader Date: Fri, 26 Dec 2025 03:00:20 +0000 Subject: [PATCH 8/8] refactor: move up global import --- package/cpp/specs/HybridNitroSQLiteQueryResult.hpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/package/cpp/specs/HybridNitroSQLiteQueryResult.hpp b/package/cpp/specs/HybridNitroSQLiteQueryResult.hpp index a254f9a..bad545d 100644 --- a/package/cpp/specs/HybridNitroSQLiteQueryResult.hpp +++ b/package/cpp/specs/HybridNitroSQLiteQueryResult.hpp @@ -1,8 +1,8 @@ #pragma once -#include #include "HybridNitroSQLiteQueryResultSpec.hpp" #include "types.hpp" +#include using namespace margelo::rnnitrosqlite;