create-prisma-php-app 1.0.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (610) hide show
  1. package/LICENSE.txt +9 -0
  2. package/README.md +158 -0
  3. package/composer.json +23 -0
  4. package/composer.lock +812 -0
  5. package/dist/bootstrap.php +4 -0
  6. package/dist/index.js +2 -0
  7. package/dist/node_modules/prisma-client-php/index.enc +1 -0
  8. package/dist/node_modules/prisma-client-php/index.js +2 -0
  9. package/dist/node_modules/prisma-client-php/key.enc +1 -0
  10. package/dist/node_modules/prisma-client-php/package.json +7 -0
  11. package/dist/prisma/schema.prisma +32 -0
  12. package/dist/prisma/seed.js +68 -0
  13. package/dist/public/assets/images/prisma-php.png +0 -0
  14. package/dist/public/css/styles.css +0 -0
  15. package/dist/public/css/tailwind.css +3 -0
  16. package/dist/public/favicon.ico +0 -0
  17. package/dist/public/index.php +64 -0
  18. package/dist/settings/paths.php +10 -0
  19. package/dist/settings/project-settings.js +6 -0
  20. package/dist/src/app/api/api.php +39 -0
  21. package/dist/src/app/classes/Validator.php +77 -0
  22. package/dist/src/app/model/IModel.php +22 -0
  23. package/package.json +35 -0
  24. package/tsconfig.json +110 -0
  25. package/vendor/autoload.php +25 -0
  26. package/vendor/brick/math/.editorconfig +15 -0
  27. package/vendor/brick/math/.gitattributes +11 -0
  28. package/vendor/brick/math/.github/FUNDING.yml +1 -0
  29. package/vendor/brick/math/.github/workflows/ci.yml +80 -0
  30. package/vendor/brick/math/CHANGELOG.md +445 -0
  31. package/vendor/brick/math/LICENSE +20 -0
  32. package/vendor/brick/math/README.md +247 -0
  33. package/vendor/brick/math/composer.json +34 -0
  34. package/vendor/brick/math/phpunit.php +51 -0
  35. package/vendor/brick/math/phpunit.xml +13 -0
  36. package/vendor/brick/math/psalm.xml +28 -0
  37. package/vendor/brick/math/random-tests.php +162 -0
  38. package/vendor/brick/math/src/BigDecimal.php +786 -0
  39. package/vendor/brick/math/src/BigInteger.php +1079 -0
  40. package/vendor/brick/math/src/BigNumber.php +512 -0
  41. package/vendor/brick/math/src/BigRational.php +445 -0
  42. package/vendor/brick/math/src/Exception/DivisionByZeroException.php +35 -0
  43. package/vendor/brick/math/src/Exception/IntegerOverflowException.php +23 -0
  44. package/vendor/brick/math/src/Exception/MathException.php +12 -0
  45. package/vendor/brick/math/src/Exception/NegativeNumberException.php +12 -0
  46. package/vendor/brick/math/src/Exception/NumberFormatException.php +33 -0
  47. package/vendor/brick/math/src/Exception/RoundingNecessaryException.php +19 -0
  48. package/vendor/brick/math/src/Internal/Calculator/BcMathCalculator.php +75 -0
  49. package/vendor/brick/math/src/Internal/Calculator/GmpCalculator.php +108 -0
  50. package/vendor/brick/math/src/Internal/Calculator/NativeCalculator.php +581 -0
  51. package/vendor/brick/math/src/Internal/Calculator.php +676 -0
  52. package/vendor/brick/math/src/RoundingMode.php +107 -0
  53. package/vendor/brick/math/tests/AbstractTestCase.php +86 -0
  54. package/vendor/brick/math/tests/BigDecimalTest.php +2596 -0
  55. package/vendor/brick/math/tests/BigIntegerTest.php +3782 -0
  56. package/vendor/brick/math/tests/BigNumberTest.php +53 -0
  57. package/vendor/brick/math/tests/BigRationalTest.php +993 -0
  58. package/vendor/brick/math/tests/CalculatorDetectTest.php +25 -0
  59. package/vendor/brick/math/tests/Internal/Calculator/NativeCalculatorTest.php +87 -0
  60. package/vendor/composer/ClassLoader.php +579 -0
  61. package/vendor/composer/InstalledVersions.php +359 -0
  62. package/vendor/composer/LICENSE +21 -0
  63. package/vendor/composer/autoload_classmap.php +15 -0
  64. package/vendor/composer/autoload_files.php +13 -0
  65. package/vendor/composer/autoload_namespaces.php +9 -0
  66. package/vendor/composer/autoload_psr4.php +20 -0
  67. package/vendor/composer/autoload_real.php +50 -0
  68. package/vendor/composer/autoload_static.php +122 -0
  69. package/vendor/composer/installed.json +825 -0
  70. package/vendor/composer/installed.php +132 -0
  71. package/vendor/composer/platform_check.php +26 -0
  72. package/vendor/firebase/php-jwt/.gitattributes +9 -0
  73. package/vendor/firebase/php-jwt/.github/release-please.yml +3 -0
  74. package/vendor/firebase/php-jwt/.github/workflows/tests.yml +57 -0
  75. package/vendor/firebase/php-jwt/.php-cs-fixer.dist.php +24 -0
  76. package/vendor/firebase/php-jwt/CHANGELOG.md +170 -0
  77. package/vendor/firebase/php-jwt/LICENSE +30 -0
  78. package/vendor/firebase/php-jwt/README.md +424 -0
  79. package/vendor/firebase/php-jwt/composer.json +42 -0
  80. package/vendor/firebase/php-jwt/phpstan.neon.dist +5 -0
  81. package/vendor/firebase/php-jwt/phpunit.xml.dist +18 -0
  82. package/vendor/firebase/php-jwt/src/BeforeValidException.php +18 -0
  83. package/vendor/firebase/php-jwt/src/CachedKeySet.php +268 -0
  84. package/vendor/firebase/php-jwt/src/ExpiredException.php +18 -0
  85. package/vendor/firebase/php-jwt/src/JWK.php +349 -0
  86. package/vendor/firebase/php-jwt/src/JWT.php +669 -0
  87. package/vendor/firebase/php-jwt/src/JWTExceptionWithPayloadInterface.php +20 -0
  88. package/vendor/firebase/php-jwt/src/Key.php +64 -0
  89. package/vendor/firebase/php-jwt/src/SignatureInvalidException.php +7 -0
  90. package/vendor/firebase/php-jwt/tests/CachedKeySetTest.php +598 -0
  91. package/vendor/firebase/php-jwt/tests/JWKTest.php +172 -0
  92. package/vendor/firebase/php-jwt/tests/JWTTest.php +543 -0
  93. package/vendor/firebase/php-jwt/tests/data/ec-jwkset.json +40 -0
  94. package/vendor/firebase/php-jwt/tests/data/ecdsa-private.pem +18 -0
  95. package/vendor/firebase/php-jwt/tests/data/ecdsa-public.pem +9 -0
  96. package/vendor/firebase/php-jwt/tests/data/ecdsa256-private.pem +4 -0
  97. package/vendor/firebase/php-jwt/tests/data/ecdsa384-private.pem +6 -0
  98. package/vendor/firebase/php-jwt/tests/data/ecdsa384-public.pem +5 -0
  99. package/vendor/firebase/php-jwt/tests/data/ed25519-1.pub +1 -0
  100. package/vendor/firebase/php-jwt/tests/data/ed25519-1.sec +1 -0
  101. package/vendor/firebase/php-jwt/tests/data/ed25519-jwkset.json +11 -0
  102. package/vendor/firebase/php-jwt/tests/data/rsa-jwkset.json +18 -0
  103. package/vendor/firebase/php-jwt/tests/data/rsa-with-passphrase.pem +42 -0
  104. package/vendor/firebase/php-jwt/tests/data/rsa1-private.pem +27 -0
  105. package/vendor/firebase/php-jwt/tests/data/rsa1-public.pub +9 -0
  106. package/vendor/firebase/php-jwt/tests/data/rsa2-private.pem +27 -0
  107. package/vendor/firebase/php-jwt/tests/data/secp256k1-private.pem +5 -0
  108. package/vendor/firebase/php-jwt/tests/data/secp256k1-public.pem +4 -0
  109. package/vendor/graham-campbell/result-type/.gitattributes +9 -0
  110. package/vendor/graham-campbell/result-type/.github/CODE_OF_CONDUCT.md +132 -0
  111. package/vendor/graham-campbell/result-type/.github/CONTRIBUTING.md +31 -0
  112. package/vendor/graham-campbell/result-type/.github/FUNDING.yml +2 -0
  113. package/vendor/graham-campbell/result-type/.github/SECURITY.md +14 -0
  114. package/vendor/graham-campbell/result-type/.github/workflows/tests.yml +40 -0
  115. package/vendor/graham-campbell/result-type/CHANGELOG.md +43 -0
  116. package/vendor/graham-campbell/result-type/LICENSE +21 -0
  117. package/vendor/graham-campbell/result-type/README.md +42 -0
  118. package/vendor/graham-campbell/result-type/composer.json +33 -0
  119. package/vendor/graham-campbell/result-type/phpunit.xml.dist +13 -0
  120. package/vendor/graham-campbell/result-type/src/Error.php +121 -0
  121. package/vendor/graham-campbell/result-type/src/Result.php +69 -0
  122. package/vendor/graham-campbell/result-type/src/Success.php +120 -0
  123. package/vendor/graham-campbell/result-type/tests/ResultTest.php +95 -0
  124. package/vendor/hidehalo/nanoid-php/.editorconfig +15 -0
  125. package/vendor/hidehalo/nanoid-php/.gitattributes +8 -0
  126. package/vendor/hidehalo/nanoid-php/.github/workflows/php.yml +49 -0
  127. package/vendor/hidehalo/nanoid-php/.styleci.yml +1 -0
  128. package/vendor/hidehalo/nanoid-php/CHANGELOG.md +36 -0
  129. package/vendor/hidehalo/nanoid-php/CODE_OF_CONDUCT.md +74 -0
  130. package/vendor/hidehalo/nanoid-php/CONTRIBUTING.md +32 -0
  131. package/vendor/hidehalo/nanoid-php/ISSUE_TEMPLATE.md +27 -0
  132. package/vendor/hidehalo/nanoid-php/LICENSE.md +21 -0
  133. package/vendor/hidehalo/nanoid-php/PULL_REQUEST_TEMPLATE.md +43 -0
  134. package/vendor/hidehalo/nanoid-php/README.md +108 -0
  135. package/vendor/hidehalo/nanoid-php/benchmark/benchmark.php +24 -0
  136. package/vendor/hidehalo/nanoid-php/composer.json +62 -0
  137. package/vendor/hidehalo/nanoid-php/examples/basic_usage.php +24 -0
  138. package/vendor/hidehalo/nanoid-php/examples/custom_formated.php +29 -0
  139. package/vendor/hidehalo/nanoid-php/phpunit.xml +31 -0
  140. package/vendor/hidehalo/nanoid-php/src/Client.php +120 -0
  141. package/vendor/hidehalo/nanoid-php/src/Core.php +31 -0
  142. package/vendor/hidehalo/nanoid-php/src/CoreInterface.php +19 -0
  143. package/vendor/hidehalo/nanoid-php/src/Generator.php +13 -0
  144. package/vendor/hidehalo/nanoid-php/src/GeneratorInterface.php +13 -0
  145. package/vendor/hidehalo/nanoid-php/tests/ClientTest.php +76 -0
  146. package/vendor/hidehalo/nanoid-php/tests/CoreTest.php +37 -0
  147. package/vendor/hidehalo/nanoid-php/tests/GeneratorTest.php +34 -0
  148. package/vendor/hidehalo/nanoid-php/tests/Support/DummyGenerator.php +20 -0
  149. package/vendor/paragonie/random_compat/.gitattributes +14 -0
  150. package/vendor/paragonie/random_compat/.scrutinizer.yml +4 -0
  151. package/vendor/paragonie/random_compat/.travis.yml +59 -0
  152. package/vendor/paragonie/random_compat/CHANGELOG.md +3 -0
  153. package/vendor/paragonie/random_compat/LICENSE +22 -0
  154. package/vendor/paragonie/random_compat/RATIONALE.md +36 -0
  155. package/vendor/paragonie/random_compat/README.md +232 -0
  156. package/vendor/paragonie/random_compat/SECURITY.md +108 -0
  157. package/vendor/paragonie/random_compat/build-phar.sh +5 -0
  158. package/vendor/paragonie/random_compat/composer.json +34 -0
  159. package/vendor/paragonie/random_compat/dist/random_compat.phar.pubkey +5 -0
  160. package/vendor/paragonie/random_compat/dist/random_compat.phar.pubkey.asc +11 -0
  161. package/vendor/paragonie/random_compat/lib/random.php +32 -0
  162. package/vendor/paragonie/random_compat/other/build_phar.php +57 -0
  163. package/vendor/paragonie/random_compat/other/ide_stubs/COM.php +20 -0
  164. package/vendor/paragonie/random_compat/other/ide_stubs/README.md +7 -0
  165. package/vendor/paragonie/random_compat/other/ide_stubs/com_exception.php +11 -0
  166. package/vendor/paragonie/random_compat/other/ide_stubs/libsodium.php +90 -0
  167. package/vendor/paragonie/random_compat/phpunit.sh +60 -0
  168. package/vendor/paragonie/random_compat/phpunit.xml.dist +31 -0
  169. package/vendor/paragonie/random_compat/psalm-autoload.php +9 -0
  170. package/vendor/paragonie/random_compat/psalm.xml +19 -0
  171. package/vendor/paragonie/random_compat/tests/full/DieHardTest.php +61 -0
  172. package/vendor/paragonie/random_compat/tests/full/StatTest.php +52 -0
  173. package/vendor/paragonie/random_compat/tests/specific/capicom.php +7 -0
  174. package/vendor/paragonie/random_compat/tests/specific/dev_urandom.php +7 -0
  175. package/vendor/paragonie/random_compat/tests/specific/libsodium.php +7 -0
  176. package/vendor/paragonie/random_compat/tests/specific/libsodium_legacy.php +7 -0
  177. package/vendor/paragonie/random_compat/tests/specific/mcrypt.php +7 -0
  178. package/vendor/paragonie/random_compat/tests/unit/RandomBytesTest.php +80 -0
  179. package/vendor/paragonie/random_compat/tests/unit/RandomIntTest.php +63 -0
  180. package/vendor/paragonie/random_compat/tests/unit/UtilityTest.php +95 -0
  181. package/vendor/paragonie/random_compat/tests/unit_with_basedir/RandomBytesTest.php +100 -0
  182. package/vendor/paragonie/random_compat/tests/unit_with_basedir/RandomIntTest.php +82 -0
  183. package/vendor/paragonie/random_compat/tests/unit_with_basedir/UtilityTest.php +95 -0
  184. package/vendor/phpoption/phpoption/.gitattributes +14 -0
  185. package/vendor/phpoption/phpoption/.github/CODE_OF_CONDUCT.md +132 -0
  186. package/vendor/phpoption/phpoption/.github/CONTRIBUTING.md +30 -0
  187. package/vendor/phpoption/phpoption/.github/FUNDING.yml +2 -0
  188. package/vendor/phpoption/phpoption/.github/SECURITY.md +14 -0
  189. package/vendor/phpoption/phpoption/.github/workflows/static.yml +74 -0
  190. package/vendor/phpoption/phpoption/.github/workflows/tests.yml +40 -0
  191. package/vendor/phpoption/phpoption/LICENSE +201 -0
  192. package/vendor/phpoption/phpoption/Makefile +26 -0
  193. package/vendor/phpoption/phpoption/README.md +194 -0
  194. package/vendor/phpoption/phpoption/composer.json +52 -0
  195. package/vendor/phpoption/phpoption/phpstan-baseline.neon +32 -0
  196. package/vendor/phpoption/phpoption/phpstan.neon.dist +8 -0
  197. package/vendor/phpoption/phpoption/phpunit.xml.dist +13 -0
  198. package/vendor/phpoption/phpoption/psalm.xml +12 -0
  199. package/vendor/phpoption/phpoption/src/PhpOption/LazyOption.php +175 -0
  200. package/vendor/phpoption/phpoption/src/PhpOption/None.php +136 -0
  201. package/vendor/phpoption/phpoption/src/PhpOption/Option.php +434 -0
  202. package/vendor/phpoption/phpoption/src/PhpOption/Some.php +169 -0
  203. package/vendor/phpoption/phpoption/tests/PhpOption/Tests/EnsureTest.php +77 -0
  204. package/vendor/phpoption/phpoption/tests/PhpOption/Tests/LazyOptionTest.php +200 -0
  205. package/vendor/phpoption/phpoption/tests/PhpOption/Tests/NoneTest.php +153 -0
  206. package/vendor/phpoption/phpoption/tests/PhpOption/Tests/OptionTest.php +160 -0
  207. package/vendor/phpoption/phpoption/tests/PhpOption/Tests/SomeTest.php +194 -0
  208. package/vendor/phpoption/phpoption/tests/bootstrap.php +8 -0
  209. package/vendor/phpoption/phpoption/vendor-bin/phpstan/composer.json +8 -0
  210. package/vendor/phpoption/phpoption/vendor-bin/psalm/composer.json +8 -0
  211. package/vendor/ramsey/uuid/.editorconfig +16 -0
  212. package/vendor/ramsey/uuid/.gitattributes +26 -0
  213. package/vendor/ramsey/uuid/.github/CODEOWNERS +1 -0
  214. package/vendor/ramsey/uuid/.github/FUNDING.yml +2 -0
  215. package/vendor/ramsey/uuid/.github/ISSUE_TEMPLATE/Bug_Report.md +35 -0
  216. package/vendor/ramsey/uuid/.github/ISSUE_TEMPLATE/Feature_Request.md +31 -0
  217. package/vendor/ramsey/uuid/.github/ISSUE_TEMPLATE/Question.md +19 -0
  218. package/vendor/ramsey/uuid/.github/ISSUE_TEMPLATE/config.yml +1 -0
  219. package/vendor/ramsey/uuid/.github/dependabot.yml +15 -0
  220. package/vendor/ramsey/uuid/.github/pull_request_template.md +27 -0
  221. package/vendor/ramsey/uuid/.github/workflows/continuous-integration.yml +181 -0
  222. package/vendor/ramsey/uuid/.github/workflows/merge-dependabot-upgrades.yml +24 -0
  223. package/vendor/ramsey/uuid/.readthedocs.yml +11 -0
  224. package/vendor/ramsey/uuid/CHANGELOG.md +1511 -0
  225. package/vendor/ramsey/uuid/CODE_OF_CONDUCT.md +73 -0
  226. package/vendor/ramsey/uuid/CONTRIBUTING.md +171 -0
  227. package/vendor/ramsey/uuid/LICENSE +19 -0
  228. package/vendor/ramsey/uuid/README.md +83 -0
  229. package/vendor/ramsey/uuid/SECURITY.md +170 -0
  230. package/vendor/ramsey/uuid/build/.gitignore +6 -0
  231. package/vendor/ramsey/uuid/build/cache/.gitkeep +0 -0
  232. package/vendor/ramsey/uuid/build/logs/.gitkeep +0 -0
  233. package/vendor/ramsey/uuid/captainhook.json +105 -0
  234. package/vendor/ramsey/uuid/codecov.yml +29 -0
  235. package/vendor/ramsey/uuid/composer.json +106 -0
  236. package/vendor/ramsey/uuid/composer.lock +7208 -0
  237. package/vendor/ramsey/uuid/docs/Makefile +20 -0
  238. package/vendor/ramsey/uuid/docs/README.md +36 -0
  239. package/vendor/ramsey/uuid/docs/_static/.gitkeep +0 -0
  240. package/vendor/ramsey/uuid/docs/conf.py +103 -0
  241. package/vendor/ramsey/uuid/docs/copyright.rst +18 -0
  242. package/vendor/ramsey/uuid/docs/customize/calculators.rst +75 -0
  243. package/vendor/ramsey/uuid/docs/customize/factory.rst +93 -0
  244. package/vendor/ramsey/uuid/docs/customize/ordered-time-codec.rst +86 -0
  245. package/vendor/ramsey/uuid/docs/customize/timestamp-first-comb-codec.rst +72 -0
  246. package/vendor/ramsey/uuid/docs/customize/validators.rst +39 -0
  247. package/vendor/ramsey/uuid/docs/customize.rst +56 -0
  248. package/vendor/ramsey/uuid/docs/database.rst +260 -0
  249. package/vendor/ramsey/uuid/docs/faq.rst +132 -0
  250. package/vendor/ramsey/uuid/docs/index.rst +51 -0
  251. package/vendor/ramsey/uuid/docs/introduction.rst +31 -0
  252. package/vendor/ramsey/uuid/docs/nonstandard/guid.rst +152 -0
  253. package/vendor/ramsey/uuid/docs/nonstandard/other.rst +49 -0
  254. package/vendor/ramsey/uuid/docs/nonstandard/version6.rst +17 -0
  255. package/vendor/ramsey/uuid/docs/nonstandard.rst +40 -0
  256. package/vendor/ramsey/uuid/docs/quickstart.rst +112 -0
  257. package/vendor/ramsey/uuid/docs/reference/calculators.rst +168 -0
  258. package/vendor/ramsey/uuid/docs/reference/exceptions.rst +92 -0
  259. package/vendor/ramsey/uuid/docs/reference/fields-fieldsinterface.rst +16 -0
  260. package/vendor/ramsey/uuid/docs/reference/guid-fields.rst +13 -0
  261. package/vendor/ramsey/uuid/docs/reference/guid-guid.rst +20 -0
  262. package/vendor/ramsey/uuid/docs/reference/helper.rst +62 -0
  263. package/vendor/ramsey/uuid/docs/reference/name-based-namespaces.rst +31 -0
  264. package/vendor/ramsey/uuid/docs/reference/nonstandard-fields.rst +13 -0
  265. package/vendor/ramsey/uuid/docs/reference/nonstandard-uuid.rst +20 -0
  266. package/vendor/ramsey/uuid/docs/reference/nonstandard-uuidv6.rst +34 -0
  267. package/vendor/ramsey/uuid/docs/reference/rfc4122-fieldsinterface.rst +78 -0
  268. package/vendor/ramsey/uuid/docs/reference/rfc4122-uuidinterface.rst +20 -0
  269. package/vendor/ramsey/uuid/docs/reference/rfc4122-uuidv1.rst +21 -0
  270. package/vendor/ramsey/uuid/docs/reference/rfc4122-uuidv2.rst +47 -0
  271. package/vendor/ramsey/uuid/docs/reference/rfc4122-uuidv3.rst +13 -0
  272. package/vendor/ramsey/uuid/docs/reference/rfc4122-uuidv4.rst +13 -0
  273. package/vendor/ramsey/uuid/docs/reference/rfc4122-uuidv5.rst +13 -0
  274. package/vendor/ramsey/uuid/docs/reference/rfc4122-uuidv6.rst +31 -0
  275. package/vendor/ramsey/uuid/docs/reference/rfc4122-uuidv7.rst +20 -0
  276. package/vendor/ramsey/uuid/docs/reference/rfc4122-uuidv8.rst +13 -0
  277. package/vendor/ramsey/uuid/docs/reference/rfc4122-version.rst +87 -0
  278. package/vendor/ramsey/uuid/docs/reference/timebaseduuidinterface.rst +16 -0
  279. package/vendor/ramsey/uuid/docs/reference/types.rst +79 -0
  280. package/vendor/ramsey/uuid/docs/reference/uuid.rst +161 -0
  281. package/vendor/ramsey/uuid/docs/reference/uuidfactoryinterface.rst +102 -0
  282. package/vendor/ramsey/uuid/docs/reference/uuidinterface.rst +60 -0
  283. package/vendor/ramsey/uuid/docs/reference/validators.rst +34 -0
  284. package/vendor/ramsey/uuid/docs/reference/variant.rst +32 -0
  285. package/vendor/ramsey/uuid/docs/reference.rst +37 -0
  286. package/vendor/ramsey/uuid/docs/requirements.txt +3 -0
  287. package/vendor/ramsey/uuid/docs/rfc4122/version1.rst +192 -0
  288. package/vendor/ramsey/uuid/docs/rfc4122/version2.rst +273 -0
  289. package/vendor/ramsey/uuid/docs/rfc4122/version3.rst +68 -0
  290. package/vendor/ramsey/uuid/docs/rfc4122/version4.rst +39 -0
  291. package/vendor/ramsey/uuid/docs/rfc4122/version5.rst +108 -0
  292. package/vendor/ramsey/uuid/docs/rfc4122/version6.rst +213 -0
  293. package/vendor/ramsey/uuid/docs/rfc4122/version7.rst +173 -0
  294. package/vendor/ramsey/uuid/docs/rfc4122/version8.rst +51 -0
  295. package/vendor/ramsey/uuid/docs/rfc4122.rst +67 -0
  296. package/vendor/ramsey/uuid/docs/testing.rst +199 -0
  297. package/vendor/ramsey/uuid/docs/tidelift.rst +74 -0
  298. package/vendor/ramsey/uuid/docs/upgrading/2-to-3.rst +31 -0
  299. package/vendor/ramsey/uuid/docs/upgrading/3-to-4.rst +512 -0
  300. package/vendor/ramsey/uuid/docs/upgrading.rst +11 -0
  301. package/vendor/ramsey/uuid/phpbench.json +10 -0
  302. package/vendor/ramsey/uuid/phpcs.xml.dist +476 -0
  303. package/vendor/ramsey/uuid/phpstan-tests.neon +32 -0
  304. package/vendor/ramsey/uuid/phpstan.neon.dist +25 -0
  305. package/vendor/ramsey/uuid/phpunit.xml.dist +26 -0
  306. package/vendor/ramsey/uuid/psalm-baseline.xml +133 -0
  307. package/vendor/ramsey/uuid/psalm.xml +25 -0
  308. package/vendor/ramsey/uuid/resources/vagrant/README.md +10 -0
  309. package/vendor/ramsey/uuid/resources/vagrant/freebsd/README.md +15 -0
  310. package/vendor/ramsey/uuid/resources/vagrant/freebsd/Vagrantfile +35 -0
  311. package/vendor/ramsey/uuid/resources/vagrant/linux/README.md +15 -0
  312. package/vendor/ramsey/uuid/resources/vagrant/linux/Vagrantfile +27 -0
  313. package/vendor/ramsey/uuid/resources/vagrant/windows/README.md +16 -0
  314. package/vendor/ramsey/uuid/resources/vagrant/windows/Vagrantfile +22 -0
  315. package/vendor/ramsey/uuid/src/BinaryUtils.php +106 -0
  316. package/vendor/ramsey/uuid/src/Builder/FallbackBuilder.php +68 -0
  317. package/vendor/ramsey/uuid/src/Builder/UuidBuilderInterface.php +39 -0
  318. package/vendor/ramsey/uuid/src/Codec/CodecInterface.php +67 -0
  319. package/vendor/ramsey/uuid/src/Codec/GuidStringCodec.php +82 -0
  320. package/vendor/ramsey/uuid/src/Codec/OrderedTimeCodec.php +114 -0
  321. package/vendor/ramsey/uuid/src/Codec/StringCodec.php +128 -0
  322. package/vendor/ramsey/uuid/src/Codec/TimestampFirstCombCodec.php +105 -0
  323. package/vendor/ramsey/uuid/src/Codec/TimestampLastCombCodec.php +51 -0
  324. package/vendor/ramsey/uuid/src/Converter/Number/GenericNumberConverter.php +48 -0
  325. package/vendor/ramsey/uuid/src/Converter/NumberConverterInterface.php +53 -0
  326. package/vendor/ramsey/uuid/src/Converter/Time/GenericTimeConverter.php +118 -0
  327. package/vendor/ramsey/uuid/src/Converter/Time/PhpTimeConverter.php +163 -0
  328. package/vendor/ramsey/uuid/src/Converter/Time/UnixTimeConverter.php +90 -0
  329. package/vendor/ramsey/uuid/src/Converter/TimeConverterInterface.php +58 -0
  330. package/vendor/ramsey/uuid/src/Exception/BuilderNotFoundException.php +24 -0
  331. package/vendor/ramsey/uuid/src/Exception/DateTimeException.php +24 -0
  332. package/vendor/ramsey/uuid/src/Exception/DceSecurityException.php +25 -0
  333. package/vendor/ramsey/uuid/src/Exception/InvalidArgumentException.php +24 -0
  334. package/vendor/ramsey/uuid/src/Exception/InvalidBytesException.php +24 -0
  335. package/vendor/ramsey/uuid/src/Exception/InvalidUuidStringException.php +25 -0
  336. package/vendor/ramsey/uuid/src/Exception/NameException.php +25 -0
  337. package/vendor/ramsey/uuid/src/Exception/NodeException.php +24 -0
  338. package/vendor/ramsey/uuid/src/Exception/RandomSourceException.php +27 -0
  339. package/vendor/ramsey/uuid/src/Exception/TimeSourceException.php +24 -0
  340. package/vendor/ramsey/uuid/src/Exception/UnableToBuildUuidException.php +24 -0
  341. package/vendor/ramsey/uuid/src/Exception/UnsupportedOperationException.php +24 -0
  342. package/vendor/ramsey/uuid/src/Exception/UuidExceptionInterface.php +21 -0
  343. package/vendor/ramsey/uuid/src/FeatureSet.php +395 -0
  344. package/vendor/ramsey/uuid/src/Fields/FieldsInterface.php +42 -0
  345. package/vendor/ramsey/uuid/src/Fields/SerializableFieldsTrait.php +70 -0
  346. package/vendor/ramsey/uuid/src/Generator/CombGenerator.php +124 -0
  347. package/vendor/ramsey/uuid/src/Generator/DceSecurityGenerator.php +139 -0
  348. package/vendor/ramsey/uuid/src/Generator/DceSecurityGeneratorInterface.php +53 -0
  349. package/vendor/ramsey/uuid/src/Generator/DefaultNameGenerator.php +51 -0
  350. package/vendor/ramsey/uuid/src/Generator/DefaultTimeGenerator.php +131 -0
  351. package/vendor/ramsey/uuid/src/Generator/NameGeneratorFactory.php +30 -0
  352. package/vendor/ramsey/uuid/src/Generator/NameGeneratorInterface.php +38 -0
  353. package/vendor/ramsey/uuid/src/Generator/PeclUuidNameGenerator.php +52 -0
  354. package/vendor/ramsey/uuid/src/Generator/PeclUuidRandomGenerator.php +37 -0
  355. package/vendor/ramsey/uuid/src/Generator/PeclUuidTimeGenerator.php +39 -0
  356. package/vendor/ramsey/uuid/src/Generator/RandomBytesGenerator.php +45 -0
  357. package/vendor/ramsey/uuid/src/Generator/RandomGeneratorFactory.php +30 -0
  358. package/vendor/ramsey/uuid/src/Generator/RandomGeneratorInterface.php +31 -0
  359. package/vendor/ramsey/uuid/src/Generator/TimeGeneratorFactory.php +45 -0
  360. package/vendor/ramsey/uuid/src/Generator/TimeGeneratorInterface.php +38 -0
  361. package/vendor/ramsey/uuid/src/Generator/UnixTimeGenerator.php +170 -0
  362. package/vendor/ramsey/uuid/src/Guid/Fields.php +208 -0
  363. package/vendor/ramsey/uuid/src/Guid/Guid.php +61 -0
  364. package/vendor/ramsey/uuid/src/Guid/GuidBuilder.php +79 -0
  365. package/vendor/ramsey/uuid/src/Lazy/LazyUuidFromString.php +226 -0
  366. package/vendor/ramsey/uuid/src/Math/BrickMathCalculator.php +145 -0
  367. package/vendor/ramsey/uuid/src/Math/CalculatorInterface.php +106 -0
  368. package/vendor/ramsey/uuid/src/Math/RoundingMode.php +146 -0
  369. package/vendor/ramsey/uuid/src/Nonstandard/Fields.php +154 -0
  370. package/vendor/ramsey/uuid/src/Nonstandard/Uuid.php +37 -0
  371. package/vendor/ramsey/uuid/src/Nonstandard/UuidBuilder.php +78 -0
  372. package/vendor/ramsey/uuid/src/Nonstandard/UuidV6.php +113 -0
  373. package/vendor/ramsey/uuid/src/Provider/Dce/SystemDceSecurityProvider.php +236 -0
  374. package/vendor/ramsey/uuid/src/Provider/DceSecurityProviderInterface.php +41 -0
  375. package/vendor/ramsey/uuid/src/Provider/Node/FallbackNodeProvider.php +54 -0
  376. package/vendor/ramsey/uuid/src/Provider/Node/RandomNodeProvider.php +69 -0
  377. package/vendor/ramsey/uuid/src/Provider/Node/StaticNodeProvider.php +74 -0
  378. package/vendor/ramsey/uuid/src/Provider/Node/SystemNodeProvider.php +190 -0
  379. package/vendor/ramsey/uuid/src/Provider/NodeProviderInterface.php +30 -0
  380. package/vendor/ramsey/uuid/src/Provider/Time/FixedTimeProvider.php +57 -0
  381. package/vendor/ramsey/uuid/src/Provider/Time/SystemTimeProvider.php +33 -0
  382. package/vendor/ramsey/uuid/src/Provider/TimeProviderInterface.php +28 -0
  383. package/vendor/ramsey/uuid/src/Rfc4122/Fields.php +214 -0
  384. package/vendor/ramsey/uuid/src/Rfc4122/FieldsInterface.php +129 -0
  385. package/vendor/ramsey/uuid/src/Rfc4122/MaxTrait.php +41 -0
  386. package/vendor/ramsey/uuid/src/Rfc4122/MaxUuid.php +27 -0
  387. package/vendor/ramsey/uuid/src/Rfc4122/NilTrait.php +41 -0
  388. package/vendor/ramsey/uuid/src/Rfc4122/NilUuid.php +27 -0
  389. package/vendor/ramsey/uuid/src/Rfc4122/TimeTrait.php +55 -0
  390. package/vendor/ramsey/uuid/src/Rfc4122/UuidBuilder.php +116 -0
  391. package/vendor/ramsey/uuid/src/Rfc4122/UuidInterface.php +30 -0
  392. package/vendor/ramsey/uuid/src/Rfc4122/UuidV1.php +61 -0
  393. package/vendor/ramsey/uuid/src/Rfc4122/UuidV2.php +119 -0
  394. package/vendor/ramsey/uuid/src/Rfc4122/UuidV3.php +58 -0
  395. package/vendor/ramsey/uuid/src/Rfc4122/UuidV4.php +58 -0
  396. package/vendor/ramsey/uuid/src/Rfc4122/UuidV5.php +58 -0
  397. package/vendor/ramsey/uuid/src/Rfc4122/UuidV6.php +30 -0
  398. package/vendor/ramsey/uuid/src/Rfc4122/UuidV7.php +63 -0
  399. package/vendor/ramsey/uuid/src/Rfc4122/UuidV8.php +65 -0
  400. package/vendor/ramsey/uuid/src/Rfc4122/Validator.php +45 -0
  401. package/vendor/ramsey/uuid/src/Rfc4122/VariantTrait.php +87 -0
  402. package/vendor/ramsey/uuid/src/Rfc4122/Version.php +139 -0
  403. package/vendor/ramsey/uuid/src/Rfc4122/VersionTrait.php +57 -0
  404. package/vendor/ramsey/uuid/src/TimeBasedUuidFactoryInterface.php +48 -0
  405. package/vendor/ramsey/uuid/src/TimeBasedUuidInterface.php +30 -0
  406. package/vendor/ramsey/uuid/src/Type/Decimal.php +135 -0
  407. package/vendor/ramsey/uuid/src/Type/Hexadecimal.php +109 -0
  408. package/vendor/ramsey/uuid/src/Type/Integer.php +145 -0
  409. package/vendor/ramsey/uuid/src/Type/NumberInterface.php +28 -0
  410. package/vendor/ramsey/uuid/src/Type/Time.php +108 -0
  411. package/vendor/ramsey/uuid/src/Type/TypeInterface.php +45 -0
  412. package/vendor/ramsey/uuid/src/Uuid.php +645 -0
  413. package/vendor/ramsey/uuid/src/UuidFactory.php +503 -0
  414. package/vendor/ramsey/uuid/src/UuidFactoryInterface.php +184 -0
  415. package/vendor/ramsey/uuid/src/UuidInterface.php +114 -0
  416. package/vendor/ramsey/uuid/src/Validator/GenericValidator.php +45 -0
  417. package/vendor/ramsey/uuid/src/Validator/ValidatorInterface.php +39 -0
  418. package/vendor/ramsey/uuid/src/Variant.php +60 -0
  419. package/vendor/ramsey/uuid/src/functions.php +160 -0
  420. package/vendor/ramsey/uuid/tests/BinaryUtilsTest.php +381 -0
  421. package/vendor/ramsey/uuid/tests/Builder/FallbackBuilderTest.php +198 -0
  422. package/vendor/ramsey/uuid/tests/Codec/GuidStringCodecTest.php +118 -0
  423. package/vendor/ramsey/uuid/tests/Codec/OrderedTimeCodecTest.php +258 -0
  424. package/vendor/ramsey/uuid/tests/Codec/StringCodecTest.php +149 -0
  425. package/vendor/ramsey/uuid/tests/Converter/Number/GenericNumberConverterTest.php +28 -0
  426. package/vendor/ramsey/uuid/tests/Converter/Time/GenericTimeConverterTest.php +147 -0
  427. package/vendor/ramsey/uuid/tests/Converter/Time/PhpTimeConverterTest.php +199 -0
  428. package/vendor/ramsey/uuid/tests/Converter/Time/UnixTimeConverterTest.php +202 -0
  429. package/vendor/ramsey/uuid/tests/Encoder/TimestampFirstCombCodecTest.php +105 -0
  430. package/vendor/ramsey/uuid/tests/Encoder/TimestampLastCombCodecTest.php +106 -0
  431. package/vendor/ramsey/uuid/tests/ExpectedBehaviorTest.php +573 -0
  432. package/vendor/ramsey/uuid/tests/FeatureSetTest.php +88 -0
  433. package/vendor/ramsey/uuid/tests/FunctionsTest.php +151 -0
  434. package/vendor/ramsey/uuid/tests/Generator/CombGeneratorTest.php +134 -0
  435. package/vendor/ramsey/uuid/tests/Generator/DceSecurityGeneratorTest.php +282 -0
  436. package/vendor/ramsey/uuid/tests/Generator/DefaultNameGeneratorTest.php +83 -0
  437. package/vendor/ramsey/uuid/tests/Generator/DefaultTimeGeneratorTest.php +202 -0
  438. package/vendor/ramsey/uuid/tests/Generator/NameGeneratorFactoryTest.php +19 -0
  439. package/vendor/ramsey/uuid/tests/Generator/PeclUuidNameGeneratorTest.php +107 -0
  440. package/vendor/ramsey/uuid/tests/Generator/PeclUuidRandomGeneratorTest.php +30 -0
  441. package/vendor/ramsey/uuid/tests/Generator/PeclUuidTimeGeneratorTest.php +30 -0
  442. package/vendor/ramsey/uuid/tests/Generator/RandomBytesGeneratorTest.php +70 -0
  443. package/vendor/ramsey/uuid/tests/Generator/RandomGeneratorFactoryTest.php +19 -0
  444. package/vendor/ramsey/uuid/tests/Generator/TimeGeneratorFactoryTest.php +33 -0
  445. package/vendor/ramsey/uuid/tests/Generator/UnixTimeGeneratorTest.php +204 -0
  446. package/vendor/ramsey/uuid/tests/Guid/FieldsTest.php +235 -0
  447. package/vendor/ramsey/uuid/tests/Guid/GuidBuilderTest.php +33 -0
  448. package/vendor/ramsey/uuid/tests/Math/BrickMathCalculatorTest.php +116 -0
  449. package/vendor/ramsey/uuid/tests/Nonstandard/FieldsTest.php +84 -0
  450. package/vendor/ramsey/uuid/tests/Nonstandard/UuidBuilderTest.php +33 -0
  451. package/vendor/ramsey/uuid/tests/Nonstandard/UuidV6Test.php +192 -0
  452. package/vendor/ramsey/uuid/tests/Provider/Dce/SystemDceSecurityProviderTest.php +505 -0
  453. package/vendor/ramsey/uuid/tests/Provider/Node/FallbackNodeProviderTest.php +87 -0
  454. package/vendor/ramsey/uuid/tests/Provider/Node/RandomNodeProviderTest.php +124 -0
  455. package/vendor/ramsey/uuid/tests/Provider/Node/StaticNodeProviderTest.php +58 -0
  456. package/vendor/ramsey/uuid/tests/Provider/Node/SystemNodeProviderTest.php +950 -0
  457. package/vendor/ramsey/uuid/tests/Provider/Time/FixedTimeProviderTest.php +41 -0
  458. package/vendor/ramsey/uuid/tests/Provider/Time/SystemTimeProviderTest.php +20 -0
  459. package/vendor/ramsey/uuid/tests/Rfc4122/FieldsTest.php +260 -0
  460. package/vendor/ramsey/uuid/tests/Rfc4122/UuidBuilderTest.php +145 -0
  461. package/vendor/ramsey/uuid/tests/Rfc4122/UuidV1Test.php +123 -0
  462. package/vendor/ramsey/uuid/tests/Rfc4122/UuidV2Test.php +214 -0
  463. package/vendor/ramsey/uuid/tests/Rfc4122/UuidV3Test.php +56 -0
  464. package/vendor/ramsey/uuid/tests/Rfc4122/UuidV4Test.php +56 -0
  465. package/vendor/ramsey/uuid/tests/Rfc4122/UuidV5Test.php +56 -0
  466. package/vendor/ramsey/uuid/tests/Rfc4122/UuidV6Test.php +221 -0
  467. package/vendor/ramsey/uuid/tests/Rfc4122/UuidV7Test.php +131 -0
  468. package/vendor/ramsey/uuid/tests/Rfc4122/UuidV8Test.php +56 -0
  469. package/vendor/ramsey/uuid/tests/Rfc4122/ValidatorTest.php +122 -0
  470. package/vendor/ramsey/uuid/tests/Rfc4122/VariantTraitTest.php +109 -0
  471. package/vendor/ramsey/uuid/tests/TestCase.php +29 -0
  472. package/vendor/ramsey/uuid/tests/Type/DecimalTest.php +305 -0
  473. package/vendor/ramsey/uuid/tests/Type/HexadecimalTest.php +112 -0
  474. package/vendor/ramsey/uuid/tests/Type/IntegerTest.php +235 -0
  475. package/vendor/ramsey/uuid/tests/Type/TimeTest.php +120 -0
  476. package/vendor/ramsey/uuid/tests/UuidFactoryTest.php +233 -0
  477. package/vendor/ramsey/uuid/tests/UuidTest.php +1910 -0
  478. package/vendor/ramsey/uuid/tests/Validator/GenericValidatorTest.php +98 -0
  479. package/vendor/ramsey/uuid/tests/benchmark/GuidConversionBench.php +43 -0
  480. package/vendor/ramsey/uuid/tests/benchmark/NonLazyUuidConversionBench.php +39 -0
  481. package/vendor/ramsey/uuid/tests/benchmark/UuidFieldExtractionBench.php +86 -0
  482. package/vendor/ramsey/uuid/tests/benchmark/UuidGenerationBench.php +113 -0
  483. package/vendor/ramsey/uuid/tests/benchmark/UuidSerializationBench.php +206 -0
  484. package/vendor/ramsey/uuid/tests/benchmark/UuidStringConversionBench.php +257 -0
  485. package/vendor/ramsey/uuid/tests/bootstrap.php +12 -0
  486. package/vendor/ramsey/uuid/tests/static-analysis/UuidIsImmutable.php +96 -0
  487. package/vendor/ramsey/uuid/tests/static-analysis/UuidIsNeverEmpty.php +36 -0
  488. package/vendor/ramsey/uuid/tests/static-analysis/ValidUuidIsNonEmpty.php +44 -0
  489. package/vendor/ramsey/uuid/tests/static-analysis/stubs.php +33 -0
  490. package/vendor/symfony/polyfill-ctype/Ctype.php +232 -0
  491. package/vendor/symfony/polyfill-ctype/LICENSE +19 -0
  492. package/vendor/symfony/polyfill-ctype/README.md +12 -0
  493. package/vendor/symfony/polyfill-ctype/bootstrap.php +50 -0
  494. package/vendor/symfony/polyfill-ctype/bootstrap80.php +46 -0
  495. package/vendor/symfony/polyfill-ctype/composer.json +41 -0
  496. package/vendor/symfony/polyfill-mbstring/LICENSE +19 -0
  497. package/vendor/symfony/polyfill-mbstring/Mbstring.php +947 -0
  498. package/vendor/symfony/polyfill-mbstring/README.md +13 -0
  499. package/vendor/symfony/polyfill-mbstring/Resources/unidata/caseFolding.php +119 -0
  500. package/vendor/symfony/polyfill-mbstring/Resources/unidata/lowerCase.php +1397 -0
  501. package/vendor/symfony/polyfill-mbstring/Resources/unidata/titleCaseRegexp.php +5 -0
  502. package/vendor/symfony/polyfill-mbstring/Resources/unidata/upperCase.php +1489 -0
  503. package/vendor/symfony/polyfill-mbstring/bootstrap.php +151 -0
  504. package/vendor/symfony/polyfill-mbstring/bootstrap80.php +147 -0
  505. package/vendor/symfony/polyfill-mbstring/composer.json +41 -0
  506. package/vendor/symfony/polyfill-php80/LICENSE +19 -0
  507. package/vendor/symfony/polyfill-php80/Php80.php +115 -0
  508. package/vendor/symfony/polyfill-php80/PhpToken.php +103 -0
  509. package/vendor/symfony/polyfill-php80/README.md +25 -0
  510. package/vendor/symfony/polyfill-php80/Resources/stubs/Attribute.php +31 -0
  511. package/vendor/symfony/polyfill-php80/Resources/stubs/PhpToken.php +16 -0
  512. package/vendor/symfony/polyfill-php80/Resources/stubs/Stringable.php +20 -0
  513. package/vendor/symfony/polyfill-php80/Resources/stubs/UnhandledMatchError.php +16 -0
  514. package/vendor/symfony/polyfill-php80/Resources/stubs/ValueError.php +16 -0
  515. package/vendor/symfony/polyfill-php80/bootstrap.php +42 -0
  516. package/vendor/symfony/polyfill-php80/composer.json +40 -0
  517. package/vendor/vlucas/phpdotenv/.editorconfig +15 -0
  518. package/vendor/vlucas/phpdotenv/.gitattributes +17 -0
  519. package/vendor/vlucas/phpdotenv/.github/CODE_OF_CONDUCT.md +132 -0
  520. package/vendor/vlucas/phpdotenv/.github/CONTRIBUTING.md +30 -0
  521. package/vendor/vlucas/phpdotenv/.github/FUNDING.yml +2 -0
  522. package/vendor/vlucas/phpdotenv/.github/SECURITY.md +14 -0
  523. package/vendor/vlucas/phpdotenv/.github/workflows/static.yml +74 -0
  524. package/vendor/vlucas/phpdotenv/.github/workflows/tests.yml +70 -0
  525. package/vendor/vlucas/phpdotenv/LICENSE +30 -0
  526. package/vendor/vlucas/phpdotenv/Makefile +26 -0
  527. package/vendor/vlucas/phpdotenv/README.md +363 -0
  528. package/vendor/vlucas/phpdotenv/UPGRADING.md +196 -0
  529. package/vendor/vlucas/phpdotenv/composer.json +60 -0
  530. package/vendor/vlucas/phpdotenv/phpstan-baseline.neon +21 -0
  531. package/vendor/vlucas/phpdotenv/phpstan.neon.dist +7 -0
  532. package/vendor/vlucas/phpdotenv/phpunit.xml.dist +13 -0
  533. package/vendor/vlucas/phpdotenv/psalm-baseline.xml +28 -0
  534. package/vendor/vlucas/phpdotenv/psalm.xml +13 -0
  535. package/vendor/vlucas/phpdotenv/src/Dotenv.php +267 -0
  536. package/vendor/vlucas/phpdotenv/src/Exception/ExceptionInterface.php +12 -0
  537. package/vendor/vlucas/phpdotenv/src/Exception/InvalidEncodingException.php +12 -0
  538. package/vendor/vlucas/phpdotenv/src/Exception/InvalidFileException.php +12 -0
  539. package/vendor/vlucas/phpdotenv/src/Exception/InvalidPathException.php +12 -0
  540. package/vendor/vlucas/phpdotenv/src/Exception/ValidationException.php +12 -0
  541. package/vendor/vlucas/phpdotenv/src/Loader/Loader.php +47 -0
  542. package/vendor/vlucas/phpdotenv/src/Loader/LoaderInterface.php +20 -0
  543. package/vendor/vlucas/phpdotenv/src/Loader/Resolver.php +65 -0
  544. package/vendor/vlucas/phpdotenv/src/Parser/Entry.php +59 -0
  545. package/vendor/vlucas/phpdotenv/src/Parser/EntryParser.php +300 -0
  546. package/vendor/vlucas/phpdotenv/src/Parser/Lexer.php +58 -0
  547. package/vendor/vlucas/phpdotenv/src/Parser/Lines.php +127 -0
  548. package/vendor/vlucas/phpdotenv/src/Parser/Parser.php +53 -0
  549. package/vendor/vlucas/phpdotenv/src/Parser/ParserInterface.php +19 -0
  550. package/vendor/vlucas/phpdotenv/src/Parser/Value.php +88 -0
  551. package/vendor/vlucas/phpdotenv/src/Repository/Adapter/AdapterInterface.php +15 -0
  552. package/vendor/vlucas/phpdotenv/src/Repository/Adapter/ApacheAdapter.php +89 -0
  553. package/vendor/vlucas/phpdotenv/src/Repository/Adapter/ArrayAdapter.php +80 -0
  554. package/vendor/vlucas/phpdotenv/src/Repository/Adapter/EnvConstAdapter.php +89 -0
  555. package/vendor/vlucas/phpdotenv/src/Repository/Adapter/GuardedWriter.php +85 -0
  556. package/vendor/vlucas/phpdotenv/src/Repository/Adapter/ImmutableWriter.php +110 -0
  557. package/vendor/vlucas/phpdotenv/src/Repository/Adapter/MultiReader.php +48 -0
  558. package/vendor/vlucas/phpdotenv/src/Repository/Adapter/MultiWriter.php +64 -0
  559. package/vendor/vlucas/phpdotenv/src/Repository/Adapter/PutenvAdapter.php +91 -0
  560. package/vendor/vlucas/phpdotenv/src/Repository/Adapter/ReaderInterface.php +17 -0
  561. package/vendor/vlucas/phpdotenv/src/Repository/Adapter/ReplacingWriter.php +104 -0
  562. package/vendor/vlucas/phpdotenv/src/Repository/Adapter/ServerConstAdapter.php +89 -0
  563. package/vendor/vlucas/phpdotenv/src/Repository/Adapter/WriterInterface.php +27 -0
  564. package/vendor/vlucas/phpdotenv/src/Repository/AdapterRepository.php +107 -0
  565. package/vendor/vlucas/phpdotenv/src/Repository/RepositoryBuilder.php +272 -0
  566. package/vendor/vlucas/phpdotenv/src/Repository/RepositoryInterface.php +51 -0
  567. package/vendor/vlucas/phpdotenv/src/Store/File/Paths.php +44 -0
  568. package/vendor/vlucas/phpdotenv/src/Store/File/Reader.php +81 -0
  569. package/vendor/vlucas/phpdotenv/src/Store/FileStore.php +72 -0
  570. package/vendor/vlucas/phpdotenv/src/Store/StoreBuilder.php +141 -0
  571. package/vendor/vlucas/phpdotenv/src/Store/StoreInterface.php +17 -0
  572. package/vendor/vlucas/phpdotenv/src/Store/StringStore.php +37 -0
  573. package/vendor/vlucas/phpdotenv/src/Util/Regex.php +112 -0
  574. package/vendor/vlucas/phpdotenv/src/Util/Str.php +98 -0
  575. package/vendor/vlucas/phpdotenv/src/Validator.php +209 -0
  576. package/vendor/vlucas/phpdotenv/tests/Dotenv/DotenvTest.php +387 -0
  577. package/vendor/vlucas/phpdotenv/tests/Dotenv/Loader/LoaderTest.php +86 -0
  578. package/vendor/vlucas/phpdotenv/tests/Dotenv/Parser/EntryParserTest.php +234 -0
  579. package/vendor/vlucas/phpdotenv/tests/Dotenv/Parser/LexerTest.php +40 -0
  580. package/vendor/vlucas/phpdotenv/tests/Dotenv/Parser/LinesTest.php +53 -0
  581. package/vendor/vlucas/phpdotenv/tests/Dotenv/Parser/ParserTest.php +98 -0
  582. package/vendor/vlucas/phpdotenv/tests/Dotenv/Repository/Adapter/ArrayAdapterTest.php +57 -0
  583. package/vendor/vlucas/phpdotenv/tests/Dotenv/Repository/Adapter/EnvConstAdapterTest.php +75 -0
  584. package/vendor/vlucas/phpdotenv/tests/Dotenv/Repository/Adapter/PutenvAdapterTest.php +52 -0
  585. package/vendor/vlucas/phpdotenv/tests/Dotenv/Repository/Adapter/ServerConstAdapterTest.php +75 -0
  586. package/vendor/vlucas/phpdotenv/tests/Dotenv/Repository/RepositoryTest.php +305 -0
  587. package/vendor/vlucas/phpdotenv/tests/Dotenv/Store/StoreTest.php +141 -0
  588. package/vendor/vlucas/phpdotenv/tests/Dotenv/ValidatorTest.php +479 -0
  589. package/vendor/vlucas/phpdotenv/tests/fixtures/env/.env +5 -0
  590. package/vendor/vlucas/phpdotenv/tests/fixtures/env/assertions.env +18 -0
  591. package/vendor/vlucas/phpdotenv/tests/fixtures/env/booleans.env +33 -0
  592. package/vendor/vlucas/phpdotenv/tests/fixtures/env/commented.env +15 -0
  593. package/vendor/vlucas/phpdotenv/tests/fixtures/env/empty.env +1 -0
  594. package/vendor/vlucas/phpdotenv/tests/fixtures/env/example.env +1 -0
  595. package/vendor/vlucas/phpdotenv/tests/fixtures/env/exported.env +7 -0
  596. package/vendor/vlucas/phpdotenv/tests/fixtures/env/immutable.env +1 -0
  597. package/vendor/vlucas/phpdotenv/tests/fixtures/env/integers.env +17 -0
  598. package/vendor/vlucas/phpdotenv/tests/fixtures/env/large.env +2 -0
  599. package/vendor/vlucas/phpdotenv/tests/fixtures/env/multibyte.env +3 -0
  600. package/vendor/vlucas/phpdotenv/tests/fixtures/env/multiline.env +14 -0
  601. package/vendor/vlucas/phpdotenv/tests/fixtures/env/multiple.env +4 -0
  602. package/vendor/vlucas/phpdotenv/tests/fixtures/env/mutable.env +1 -0
  603. package/vendor/vlucas/phpdotenv/tests/fixtures/env/nested.env +15 -0
  604. package/vendor/vlucas/phpdotenv/tests/fixtures/env/quoted.env +11 -0
  605. package/vendor/vlucas/phpdotenv/tests/fixtures/env/specialchars.env +8 -0
  606. package/vendor/vlucas/phpdotenv/tests/fixtures/env/unicodevarnames.env +2 -0
  607. package/vendor/vlucas/phpdotenv/tests/fixtures/env/utf8-with-bom-encoding.env +3 -0
  608. package/vendor/vlucas/phpdotenv/tests/fixtures/env/windows.env +1 -0
  609. package/vendor/vlucas/phpdotenv/vendor-bin/phpstan/composer.json +16 -0
  610. package/vendor/vlucas/phpdotenv/vendor-bin/psalm/composer.json +9 -0
@@ -0,0 +1,4 @@
1
+ <?php
2
+
3
+ require_once __DIR__ . '/settings/paths.php';
4
+ require_once __DIR__ . '/vendor/autoload.php';
package/dist/index.js ADDED
@@ -0,0 +1,2 @@
1
+ #!/usr/bin/env node
2
+ import{execSync}from"child_process";import fs from"fs";import{fileURLToPath}from"url";import path from"path";import chalk from"chalk";import prompts from"prompts";const __filename=fileURLToPath(import.meta.url),__dirname=path.dirname(__filename);async function updatePackageJson(i){const e=path.join(i,"package.json"),s=JSON.parse(fs.readFileSync(e,"utf8"));s.scripts=Object.assign(Object.assign({},s.scripts),{postinstall:"prisma generate"}),s.type="module",s.prisma={seed:"node prisma/seed.js"},fs.writeFileSync(e,JSON.stringify(s,null,2))}async function createUpdateGitignoreFile(i,e){const s=path.join(i,".gitignore");let t="";fs.existsSync(s)&&(t=fs.readFileSync(s,"utf8")),e.forEach((i=>{t.includes(i)||(t+=`\n${i}`)})),t=t.trimStart(),fs.writeFileSync(s,t)}function copyRecursiveSync(i,e){const s=fs.existsSync(i),t=s&&fs.statSync(i);s&&t&&t.isDirectory()?(fs.mkdirSync(e,{recursive:!0}),fs.readdirSync(i).forEach((s=>copyRecursiveSync(path.join(i,s),path.join(e,s))))):fs.copyFileSync(i,e)}async function executeCopy(i,e){e.forEach((({srcDir:e,destDir:s})=>{copyRecursiveSync(path.join(__dirname,e),path.join(i,s))}))}function modifyTailwindConfig(i){const e=path.join(i,"tailwind.config.js");let s=fs.readFileSync(e,"utf8");const t=["./public/**/*.php","./public/**/*.html"].map((i=>` "${i}"`)).join(",\n");s=s.replace(/content: \[\],/g,`content: [\n${t}\n ],`),fs.writeFileSync(e,s,"utf8")}function modifyIndexPHP(i,e){const s=path.join(i,"public","index.php");try{let i=fs.readFileSync(s,"utf8");const t=e?' <link href="css/styles.css" rel="stylesheet"> \x3c!-- Stylesheet link to the tailwind compiled css --\x3e':' <script src="https://cdn.tailwindcss.com"><\/script>';i=i.replace("</head>",`${t}\n</head>`),fs.writeFileSync(s,i,"utf8")}catch(i){}}async function createDirectoryStructure(i,e){await updatePackageJson(i);const s=[{srcDir:"/settings",destDir:"/settings"},{srcDir:"/node_modules/prisma-client-php",destDir:"/node_modules/prisma-client-php"},{srcDir:"/prisma",destDir:"/prisma"},{srcDir:"/src",destDir:"/src"},{srcDir:"/../vendor",destDir:"/vendor"}];e.tailwindcss&&s.push({srcDir:"/public/css/",destDir:"/public/css/"}),s.push({srcDir:"/public/assets/",destDir:"/public/assets/"}),await executeCopy(i,s),[{src:"/public/favicon.ico",dest:"/public/favicon.ico"},{src:"/public/index.php",dest:"/public/index.php"},{src:"/bootstrap.php",dest:"/bootstrap.php"},{src:"/../composer.json",dest:"/composer.json"},{src:"/../composer.lock",dest:"/composer.lock"}].forEach((({src:e,dest:s})=>{const t=path.join(__dirname,e),c=path.join(i,s),n=fs.readFileSync(t,"utf8");fs.writeFileSync(c,n)})),e.tailwindcss?(modifyTailwindConfig(i),modifyIndexPHP(i,!0)):modifyIndexPHP(i,!1)}async function getAnswer(){const i=[{type:"text",name:"projectName",message:"What is your project named?",initial:"my-app"},{type:"toggle",name:"tailwindcss",message:`Would you like to use ${chalk.blue("Tailwind CSS")}?`,initial:!0,active:"Yes",inactive:"No"}],e=()=>!1;try{const s=await prompts(i,{onCancel:e});return 0===Object.keys(s).length?null:{projectName:String(s.projectName).trim().replace(/ /g,"-"),tailwindcss:s.tailwindcss}}catch(i){return null}}async function installDependencies(i,e){execSync("npm init -y",{stdio:"inherit",cwd:i}),e.forEach((i=>{})),execSync(`npm install ${e.join(" ")}`,{stdio:"inherit",cwd:i})}async function main(){try{const i=await getAnswer();if(null===i)return;fs.mkdirSync(i.projectName);const e=path.join(process.cwd(),i.projectName);process.chdir(i.projectName);const s=["prisma","@prisma/client","typescript","@types/node","ts-node"];i.tailwindcss&&s.push("tailwindcss","autoprefixer","postcss"),await installDependencies(e,s),execSync("npx prisma init",{stdio:"inherit"}),execSync("npx tsc --init",{stdio:"inherit"}),i.tailwindcss&&execSync("npx tailwindcss init -p",{stdio:"inherit"}),await createDirectoryStructure(e,i),i.tailwindcss&&execSync("npx tailwindcss -i ./public/css/tailwind.css -o ./public/css/styles.css --minify",{stdio:"inherit"});const t=path.join(e,"settings","project-settings.js"),c=`export const projectSettings = {\n PROJECT_NAME: "${i.projectName}",\n PROJECT_ROOT_PATH: "${e.replace(/\\/g,"\\\\")}",\n PHP_ROOT_PATH_EXE: "D:\\\\xampp\\\\php\\\\php.exe",\n PHP_GENERATE_CLASS_PATH: "src/app/classes/prisma",\n };`;fs.writeFileSync(t,c)}catch(i){process.exit(1)}}main();
@@ -0,0 +1 @@
1
+ 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
@@ -0,0 +1,2 @@
1
+ #!/usr/bin/env node
2
+ import*as fs from"fs";import{exec}from"child_process";import path from"path";import{pathToFileURL}from"url";import CryptoJS from"crypto-js";const args=process.argv.slice(2),getSecretKey=e=>{const t=fs.readFileSync(`${e}/key.enc`,"utf8");if(t.length<400)throw new Error("File content is less than 400 characters.");return t.substring(299,349)},decryptData=(e,t)=>CryptoJS.AES.decrypt(e,t).toString(CryptoJS.enc.Utf8),executePHP=e=>{exec(e,((e,t,r)=>{}))},main=async()=>{if("generate"===args[0]&&"class"===args[1])try{const e=process.cwd(),t=pathToFileURL(path.join(e,"settings","project-settings.js")),r=(await import(t.href)).projectSettings,c=r.PHP_GENERATE_CLASS_PATH,s=`${r.PROJECT_ROOT_PATH}/node_modules/prisma-client-php`,n=r.PROJECT_ROOT_PATH?`${s}/index.run.php`:`${s}/dist/prisma-client-php/index.run.php`,i=`${s}/index.enc`,p=getSecretKey(s),o=fs.readFileSync(i,{encoding:"utf8"}),a=decryptData(o,p);fs.writeFileSync(`${s}/index.run.php`,a);const h=`${r.PHP_ROOT_PATH_EXE} ${n} ${c}`;executePHP(h)}catch(e){}};main().catch((e=>{}));
@@ -0,0 +1 @@
1
+ U2FsdGVkX1+lsKHxlJWvsEJCxC/cKMFrJFTk4kLWs+6xXSZur4i8T8vsHsb+w84kGj5g1Ogol85/RUqyeyYwYSB02CgRGJsOeVLC1BbEMUXnyCGei6WC50xaz/xZ9vAvfqt3gs9ne/RuWkuzn5Quf0cdIVMTA+Wbn+nxpGo8Inyt23I33tiBGsoKs0a3Oj8cSGKY2RZIX439yTSKsh1RAaP4f+h1gby8EN41gaaTgOzUaROQX2yyXB6IV1617RnWCbT74zOnbQDLCF7IETZ1bH7Pni05xfUAg3jMJisEkqkh7UNk+CVSE7qKMaXcyu/uqOoILEnwfSvXxzXvw9kpNVRvFQKrXAc3Jvdx5NzVWut/inITo1+TLuAJlPx7r+Skbfcyr1e+9+NI42BgkS27096rRdVPvzJOsAR/qPG3GaLtTiOLqaD9OKlcgaEs/s3mmfk2UtQWv1Yfv5Tqaq5/bBG/iWsJpsmKfchfLI/IyxuX/6tVxaVSe41kwzIoX6wzsAzw5JdDngPRqR97IDENw+BV+P07O1FqqUmhHofmsJYi4zzmQRxVEZVhRwH7AQR6s089v4aenJE9EJE9UShiflYGrbjjOD9+vYJfQ0k9DhdSP5I6dnGlGdxlhtyOWM2buM0QVEVRD0YmM2zY38jZpL8zLDBpn+Fnphx8uu6EDxCZm4fN9xgQBgR/QzV2Cw/ryvj3D3bLrqaa/VQjgSIDjRPMWoRo62pFOLZQ5VhiZ8V3J+6tg/roumxA7sLRjrxvftX05FCWdRUs9XVrx3BA0mTedprky0n+9e5WkuyNtq5MtpGjpsUPqgr7yekdAirz02WB4NdCyKirNHM9vcETGugB9SAtKogjlGRM5Bb4OF58IDwmiihSPckoblRp3w+pACW/1YIPEgdLUGlPWmtM6sndASdy1tdQrqsfPUr2RsvUzHJa18s6hTUmrgUDXEv3lemYqOoReGXG4QlyJuPZXS
@@ -0,0 +1,7 @@
1
+ {
2
+ "name": "prisma-client-php",
3
+ "type": "module",
4
+ "bin": {
5
+ "php": "index.js"
6
+ }
7
+ }
@@ -0,0 +1,32 @@
1
+ // This is your Prisma schema file,
2
+ // learn more about it in the docs: https://pris.ly/d/prisma-schema
3
+
4
+ generator client {
5
+ provider = "prisma-client-js"
6
+ }
7
+
8
+ datasource db {
9
+ provider = "postgresql"
10
+ url = env("DATABASE_URL")
11
+ }
12
+
13
+ model User {
14
+ id String @id @default(cuid())
15
+ name String?
16
+ email String? @unique
17
+ password String?
18
+ emailVerified DateTime?
19
+ image String?
20
+
21
+ roleId Int?
22
+ userRole UserRole? @relation(fields: [roleId], references: [id])
23
+
24
+ @@map("Users")
25
+ }
26
+
27
+ model UserRole {
28
+ id Int @id @default(autoincrement())
29
+ name String @unique
30
+
31
+ user User[]
32
+ }
@@ -0,0 +1,68 @@
1
+ import { PrismaClient } from "@prisma/client";
2
+ const prisma = new PrismaClient();
3
+ // UserRole
4
+ const userRoleData = [
5
+ {
6
+ name: "Admin",
7
+ },
8
+ {
9
+ name: "User",
10
+ },
11
+ ];
12
+ // User
13
+ const userData = [
14
+ {
15
+ name: "Juan",
16
+ email: "j@gmail.com",
17
+ password: "$2b$10$mgjotYzIXwrK1MCWmu4tgeUVnLcb.qzvqwxOq4FXEL8k2obwXivDi", // TODO: template password 1234 (bcrypt) testing only
18
+ roleId: 1,
19
+ },
20
+ ];
21
+ async function main() {
22
+ // ========================================
23
+ // Code for PostgreSQL
24
+ // ----------------------------------------
25
+ // UserRole
26
+ // ----------------------------------------
27
+ // await prisma.userRole.deleteMany();
28
+ // await prisma.userRole.createMany({ data: userRoleData });
29
+ // await prisma.$executeRaw`ALTER SEQUENCE "UserRole_id_seq" RESTART WITH 1`;
30
+ // ----------------------------------------
31
+ // User
32
+ // ----------------------------------------
33
+ // await prisma.user.deleteMany();
34
+ // await prisma.user.createMany({ data: userData });
35
+ // ========================================
36
+ // Code for MySQL
37
+ // ----------------------------------------
38
+ // UserRole
39
+ // ----------------------------------------
40
+ // await prisma.userRole.deleteMany();
41
+ // await prisma.userRole.createMany({ data: userRoleData });
42
+ // await prisma.$executeRaw`ALTER TABLE UserRole AUTO_INCREMENT = 1`;
43
+ // ----------------------------------------
44
+ // User
45
+ // ----------------------------------------
46
+ // await prisma.user.deleteMany();
47
+ // await prisma.user.createMany({ data: userData });
48
+ // ========================================
49
+ // Code for MongoDB
50
+ // ----------------------------------------
51
+ // UserRole
52
+ // ----------------------------------------
53
+ // await prisma.userRole.deleteMany();
54
+ // await prisma.userRole.createMany({ data: userRoleData });
55
+ // ----------------------------------------
56
+ // User
57
+ // ----------------------------------------
58
+ // await prisma.user.deleteMany();
59
+ // await prisma.user.createMany({ data: userData });
60
+ // ========================================
61
+ }
62
+ main()
63
+ .catch((e) => {
64
+ throw e;
65
+ })
66
+ .finally(async () => {
67
+ await prisma.$disconnect();
68
+ });
File without changes
@@ -0,0 +1,3 @@
1
+ @tailwind base;
2
+ @tailwind components;
3
+ @tailwind utilities;
Binary file
@@ -0,0 +1,64 @@
1
+ <!DOCTYPE html>
2
+ <html lang="en">
3
+
4
+ <head>
5
+ <meta charset="UTF-8">
6
+ <meta name="viewport" content="width=device-width, initial-scale=1.0">
7
+ <title>Prisma PHP</title>
8
+ <link rel="shortcut icon" href="favicon.ico" type="image/x-icon">
9
+ </head>
10
+
11
+ <body>
12
+ <div class="flex flex-col min-h-[100vh]">
13
+ <header class="px-4 lg:px-6 h-14 flex items-center">
14
+ <a class="flex items-center justify-center" href="#">
15
+ <img class="h-10 w-10" src="assets/images/prisma-php.png" alt="Prisma PHP">
16
+ <span class="sr-only">Prisma PHP</span>
17
+ </a>
18
+ <nav class="ml-auto flex gap-4 sm:gap-6">
19
+ <a class="text-sm font-medium hover:underline underline-offset-4" href="#">
20
+ Features
21
+ </a>
22
+ <a class="text-sm font-medium hover:underline underline-offset-4" href="#">
23
+ Documentation
24
+ </a>
25
+ <a class="text-sm font-medium hover:underline underline-offset-4" href="#">
26
+ Community
27
+ </a>
28
+ </nav>
29
+ </header>
30
+ <main class="flex-1 flex justify-center items-center">
31
+ <section id="hero" class="w-full py-12 sm:py-24 md:py-32 lg:py-48">
32
+ <div class="px-4 md:px-6">
33
+ <div class="flex flex-col items-center space-y-4 text-center">
34
+ <h1 class="text-3xl font-bold tracking-tighter sm:text-4xl md:text-5xl lg:text-6xl/none flex items-center gap-3 justify-center">
35
+ Welcome to Prisma PHP <img class="h-20 w-20" src="assets/images/prisma-php.png" alt="Prisma PHP">
36
+ </h1>
37
+ <p class="mx-auto max-w-[700px] text-gray-500 md:text-xl dark:text-gray-400">
38
+ The Next Generation ORM for PHP
39
+ </p>
40
+ <a class="inline-flex h-10 items-center justify-center rounded-md bg-gray-900 px-8 text-sm font-medium text-gray-50 shadow transition-colors hover:bg-gray-900/90 focus-visible:outline-none focus-visible:ring-1 focus-visible:ring-gray-950 disabled:pointer-events-none disabled:opacity-50 dark:bg-gray-50 dark:text-gray-900 dark:hover:bg-gray-50/90 dark:focus-visible:ring-gray-300" href="#">
41
+ Get Started
42
+ </a>
43
+ </div>
44
+ </div>
45
+ </section>
46
+ </main>
47
+ <footer class="flex flex-col gap-2 sm:flex-row py-6 w-full shrink-0 items-center px-4 md:px-6 border-t">
48
+ <p class="text-xs text-gray-500 dark:text-gray-400">© <?php echo date("Y"); ?> Prisma PHP. All rights reserved.</p>
49
+ <nav class="sm:ml-auto flex gap-4 sm:gap-6">
50
+ <a class="text-xs hover:underline underline-offset-4" href="#">
51
+ Twitter
52
+ </a>
53
+ <a class="text-xs hover:underline underline-offset-4" href="https://github.com/TheSteelNinjaCode" target="_blank">
54
+ GitHub
55
+ </a>
56
+ <a class="text-xs hover:underline underline-offset-4" href="https://www.facebook.com/The-Steel-Ninja-Code-106729874409662" target="_blank">
57
+ Facebook
58
+ </a>
59
+ </nav>
60
+ </footer>
61
+ </div>
62
+ </body>
63
+
64
+ </html>
@@ -0,0 +1,10 @@
1
+ <?php
2
+
3
+ // Absolute path
4
+ define("SETTINGS_PATH", dirname(__FILE__));
5
+ define("PUBLIC_PATH", dirname(SETTINGS_PATH) . "/public");
6
+ define("PRISMA_PATH", dirname(SETTINGS_PATH) . "/prisma");
7
+ define("SRC_PATH", dirname(SETTINGS_PATH) . "/src");
8
+ define("API_PATH", dirname(SETTINGS_PATH) . "/src/api");
9
+ define("CLASSES_PATH", dirname(SETTINGS_PATH) . "/src/app/classes");
10
+ define("DOCUMENT_PATH", dirname(SETTINGS_PATH));
@@ -0,0 +1,6 @@
1
+ export const projectSettings = {
2
+ PROJECT_NAME: "",
3
+ PROJECT_ROOT_PATH: "",
4
+ PHP_ROOT_PATH_EXE: "D:\\xampp\\php\\php.exe",
5
+ PHP_GENERATE_CLASS_PATH: "src/app/classes/prisma",
6
+ };
@@ -0,0 +1,39 @@
1
+ <?php
2
+
3
+ namespace App\Api;
4
+
5
+ use App\Classes\Prisma\Prisma;
6
+
7
+ if (!empty($_SERVER["HTTP_X_REQUESTED_WITH"]) && $_SERVER["HTTP_X_REQUESTED_WITH"] == "XMLHttpRequest") {
8
+
9
+ $className = $_POST["className"] ?? "";
10
+ $methodName = $_POST["methodName"] ?? "";
11
+ $params = !empty($_POST["params"]) && is_string($_POST["params"]) ? json_decode($_POST["params"], true) : [];
12
+
13
+ if (json_last_error() != JSON_ERROR_NONE) {
14
+ echo "Error: Invalid JSON in params!";
15
+ exit;
16
+ }
17
+
18
+ // Append the namespace to the class name
19
+ $fullClassName = "App\\Classes\\Prisma\\" . $className;
20
+
21
+ if (!class_exists($fullClassName)) {
22
+ echo "Error: Class $fullClassName not found!";
23
+ exit;
24
+ }
25
+
26
+ $prisma = new Prisma();
27
+ $instance = $prisma->$className;
28
+ if (!method_exists($instance, $methodName)) {
29
+ echo "Error: Method $methodName not found in class $fullClassName!";
30
+ exit;
31
+ }
32
+
33
+ $result = $instance->$methodName(...$params);
34
+ if (is_object($result)) {
35
+ $result = (array) $result;
36
+ }
37
+
38
+ echo json_encode($result, JSON_INVALID_UTF8_IGNORE);
39
+ }
@@ -0,0 +1,77 @@
1
+ <?php
2
+
3
+ namespace App\Classes;
4
+
5
+ class Validator
6
+ {
7
+ public static function validateString($value)
8
+ {
9
+ return htmlspecialchars(trim($value), ENT_QUOTES, 'UTF-8');
10
+ }
11
+
12
+ public static function validateInt($value)
13
+ {
14
+ return filter_var($value, FILTER_VALIDATE_INT);
15
+ }
16
+
17
+ public static function validateFloat($value)
18
+ {
19
+ return filter_var($value, FILTER_VALIDATE_FLOAT);
20
+ }
21
+
22
+ public static function validateBoolean($value)
23
+ {
24
+ return filter_var($value, FILTER_VALIDATE_BOOLEAN, FILTER_NULL_ON_FAILURE);
25
+ }
26
+
27
+ public static function validateDateTime($value)
28
+ {
29
+ $date = \DateTime::createFromFormat('Y-m-d H:i:s', $value);
30
+ return $date && $date->format('Y-m-d H:i:s') === $value;
31
+ }
32
+
33
+ public static function validateJson($value)
34
+ {
35
+ json_decode($value);
36
+ return json_last_error() === JSON_ERROR_NONE;
37
+ }
38
+
39
+ public static function validateBigInt($value)
40
+ {
41
+ return filter_var($value, FILTER_VALIDATE_INT); // Or custom validation for larger numbers
42
+ }
43
+
44
+ public static function validateBytes($value)
45
+ {
46
+ // Custom validation based on your application's handling of binary data
47
+ return true; // Placeholder
48
+ }
49
+
50
+ public static function validateDecimal($value)
51
+ {
52
+ return filter_var($value, FILTER_VALIDATE_FLOAT); // Or custom validation for fixed-point numbers
53
+ }
54
+
55
+ public static function validateEnum($value, $allowedValues)
56
+ {
57
+ return in_array($value, $allowedValues, true);
58
+ }
59
+
60
+ public static function validateUnique($value)
61
+ {
62
+ // This validation should be handled at the database level or in your application logic
63
+ return true; // Placeholder
64
+ }
65
+
66
+ public static function validateId($value)
67
+ {
68
+ // Validate based on your application's ID format (e.g., integer, UUID)
69
+ return static::validateInt($value); // Placeholder
70
+ }
71
+
72
+ public static function validateUnsupported($value)
73
+ {
74
+ // Placeholder for future data types
75
+ return true; // No validation
76
+ }
77
+ }
@@ -0,0 +1,22 @@
1
+ <?php
2
+
3
+ namespace App\Model;
4
+
5
+ interface IModel
6
+ {
7
+ public function create($data);
8
+ public function findUnique($identifier);
9
+ public function findMany($criteria);
10
+ public function findFirst($criteria);
11
+ public function update($identifier, $data);
12
+ public function delete($identifier);
13
+ public function upsert($identifier, $data);
14
+ public function aggregate($operation);
15
+ public function groupBy($criteria, $aggregates);
16
+ public function updateMany($criteria, $data);
17
+ public function deleteMany($criteria);
18
+ public function count($criteria);
19
+ public function executeRaw($sql);
20
+ public function queryRaw($sql);
21
+ public function transaction($operations);
22
+ }
package/package.json ADDED
@@ -0,0 +1,35 @@
1
+ {
2
+ "name": "create-prisma-php-app",
3
+ "version": "1.0.0",
4
+ "description": "Prisma-PHP: A Revolutionary Library Bridging PHP with Prisma ORM",
5
+ "main": "dist/index.js",
6
+ "type": "module",
7
+ "scripts": {
8
+ "build": "tsc && npm link",
9
+ "start": "ts-node index.ts",
10
+ "prepublish": "npm run build",
11
+ "test": "echo \"Error: no test specified\" && exit 1"
12
+ },
13
+ "bin": {
14
+ "create-prisma-php-app": "dist/index.js"
15
+ },
16
+ "repository": {
17
+ "type": "git",
18
+ "url": "git+https://github.com/TheSteelNinjaCode/create-prisma-php-app.git"
19
+ },
20
+ "keywords": [],
21
+ "author": "Jefferson Abraham Omier <thesteelninjacode@gmail.com>",
22
+ "license": "MIT",
23
+ "dependencies": {
24
+ "chalk": "^5.3.0",
25
+ "crypto-js": "^4.2.0",
26
+ "prompts": "^2.4.2"
27
+ },
28
+ "devDependencies": {
29
+ "@types/crypto-js": "^4.2.2",
30
+ "@types/node": "^20.11.7",
31
+ "@types/prompts": "^2.4.9",
32
+ "ts-node": "^10.9.2",
33
+ "typescript": "^5.3.3"
34
+ }
35
+ }