diff --git a/.gitignore b/.gitignore index 191973b..374c474 100644 --- a/.gitignore +++ b/.gitignore @@ -9,7 +9,7 @@ node_modules dist app pages -lib +/lib prisma .env.example diff --git a/package.json b/package.json index bff6a64..0fb5160 100644 --- a/package.json +++ b/package.json @@ -2,9 +2,7 @@ "name": "nextauth-cli", "version": "0.0.3", "description": "A nextauth cli to setup a basic application Setup running", - "main": "./dist/index.js", - "module": "./dist/index.mjs", - "types": "./dist/index.d.ts", + "exports": "./dist/index.js", "bin": { "nextauth": "./dist/index.js" }, @@ -23,7 +21,10 @@ }, "dependencies": { "@changesets/cli": "^2.26.2", + "chalk": "^5.3.0", + "chalk-template": "^1.1.0", "commander": "^11.0.0", - "next-auth": "^4.23.1" + "next-auth": "^4.23.1", + "ora": "^7.0.1" } } diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index a9e014e..e03b0ad 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -8,12 +8,21 @@ dependencies: '@changesets/cli': specifier: ^2.26.2 version: 2.26.2 + chalk: + specifier: ^5.3.0 + version: 5.3.0 + chalk-template: + specifier: ^1.1.0 + version: 1.1.0 commander: specifier: ^11.0.0 version: 11.0.0 next-auth: specifier: ^4.23.1 version: 4.23.1(next@13.4.19)(react-dom@18.2.0)(react@18.2.0) + ora: + specifier: ^7.0.1 + version: 7.0.1 devDependencies: '@types/node': @@ -638,6 +647,11 @@ packages: engines: {node: '>=8'} dev: false + /ansi-regex@6.0.1: + resolution: {integrity: sha512-n5M855fKb2SsfMIiFFoVrABHJC8QtHwVx+mHWP3QcEqBHYienj5dHSgjbxtC0WEZXYt4wcD6zrQElDPhFuZgfA==} + engines: {node: '>=12'} + dev: false + /ansi-styles@3.2.1: resolution: {integrity: sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==} engines: {node: '>=4'} @@ -718,6 +732,10 @@ packages: resolution: {integrity: sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==} dev: true + /base64-js@1.5.1: + resolution: {integrity: sha512-AKpaYlHn8t4SVbOHCy+b5+KKgvR4vrsD8vbvrbiQJps7fKDTkjkDry6ji0rUJjC0kzbNePLwzxq8iypo41qeWA==} + dev: false + /better-path-resolve@1.0.0: resolution: {integrity: sha512-pbnl5XzGBdrFU/wT4jqmJVPn2B6UHPBOhzMQkY/SPUPB6QtUXtmBHBIwCbXJol93mOpGMnQyP/+BB19q04xj7g==} engines: {node: '>=4'} @@ -730,6 +748,14 @@ packages: engines: {node: '>=8'} dev: true + /bl@5.1.0: + resolution: {integrity: sha512-tv1ZJHLfTDnXE6tMHv73YgSJaWR2AFuPwMntBe7XL/GBFHnT0CLnsHMogfk5+GzCDC5ZWarSCYaIGATZt9dNsQ==} + dependencies: + buffer: 6.0.3 + inherits: 2.0.4 + readable-stream: 3.6.2 + dev: false + /brace-expansion@1.1.11: resolution: {integrity: sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==} dependencies: @@ -749,6 +775,13 @@ packages: wcwidth: 1.0.1 dev: false + /buffer@6.0.3: + resolution: {integrity: sha512-FTiCpNxtwiZZHEZbcbTIcZjERVICn9yq/pDFkTl95/AxzD1naBctN7YO68riM/gLSDY7sdrMby8hofADYuuqOA==} + dependencies: + base64-js: 1.5.1 + ieee754: 1.2.1 + dev: false + /bundle-require@4.0.1(esbuild@0.18.20): resolution: {integrity: sha512-9NQkRHlNdNpDBGmLpngF3EFDcwodhMUuLz9PaWYciVcQF9SE4LFjM2DB/xV1Li5JiuDMv7ZUWuC3rGbqR0MAXQ==} engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0} @@ -796,6 +829,13 @@ packages: resolution: {integrity: sha512-FbDFnNat3nMnrROzqrsg314zhqN5LGQ1kyyMk2opcrwGbVGpHRhgCWtAgD5YJUqNAiQ+dklreil/c3Qf1dfCTw==} dev: false + /chalk-template@1.1.0: + resolution: {integrity: sha512-T2VJbcDuZQ0Tb2EWwSotMPJjgpy1/tGee1BTpUNsGZ/qgNjV2t7Mvu+d4600U564nbLesN1x2dPL+xii174Ekg==} + engines: {node: '>=14.16'} + dependencies: + chalk: 5.3.0 + dev: false + /chalk@2.4.2: resolution: {integrity: sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==} engines: {node: '>=4'} @@ -813,6 +853,11 @@ packages: supports-color: 7.2.0 dev: false + /chalk@5.3.0: + resolution: {integrity: sha512-dLitG79d+GV1Nb/VYcCDFivJeK1hiukt9QjRNVOsUtTy1rR1YJsmpGGTZ3qJos+uw7WmWF4wUwBd9jxjocFC2w==} + engines: {node: ^12.17.0 || ^14.13 || >=16.0.0} + dev: false + /chardet@0.7.0: resolution: {integrity: sha512-mT8iDcrh03qDGRRmoA2hmBJnxpllMR+0/0qlzjqZES6NdiWDcZkCNAk4rPFZ9Q85r27unkiNNg8ZOiwZXBHwcA==} dev: false @@ -837,6 +882,18 @@ packages: engines: {node: '>=8'} dev: false + /cli-cursor@4.0.0: + resolution: {integrity: sha512-VGtlMu3x/4DOtIUwEkRezxUZ2lBacNJCHash0N0WeZDBS+7Ux1dm3XWAgWYxLJFMMdOeXMHXorshEFhbMSGelg==} + engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0} + dependencies: + restore-cursor: 4.0.0 + dev: false + + /cli-spinners@2.9.0: + resolution: {integrity: sha512-4/aL9X3Wh0yiMQlE+eeRhWP6vclO3QRtw1JHKIT0FFUs5FjpFmESqtMvYZ0+lbzBw900b95mS0hohy+qn2VK/g==} + engines: {node: '>=6'} + dev: false + /client-only@0.0.1: resolution: {integrity: sha512-IV3Ou0jSMzZrd3pZ48nLkT9DA7Ag1pnPzaiQhpW7c3RbcqqzvzzVu+L8gfqMp/8IM2MQtSiqaCxrrcfu8I8rMA==} dev: false @@ -992,6 +1049,14 @@ packages: dependencies: path-type: 4.0.0 + /eastasianwidth@0.2.0: + resolution: {integrity: sha512-I88TYZWc9XiYHRQ4/3c5rjjfgkjhLyW2luGIheGERbNQ6OY7yTybanSpDXZa8y7VUP9YmDcYa+eyq4ca7iLqWA==} + dev: false + + /emoji-regex@10.2.1: + resolution: {integrity: sha512-97g6QgOk8zlDRdgq1WxwgTMgEWGVAQvB5Fdpgc1MkNy56la5SKP9GsMXKDOdqwn90/41a8yPwIGk1Y6WVbeMQA==} + dev: false + /emoji-regex@8.0.0: resolution: {integrity: sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==} dev: false @@ -1400,6 +1465,10 @@ packages: safer-buffer: 2.1.2 dev: false + /ieee754@1.2.1: + resolution: {integrity: sha512-dcyqhDvX1C46lXZcVqCpK+FtMRQVdIMN6/Df5js2zouUsqG7I6sFxitIC+7KYK29KdXOLHdu9zL4sFnoVQnqaA==} + dev: false + /ignore@5.2.4: resolution: {integrity: sha512-MAb38BcSbH0eHNBxn7ql2NH/kX33OkB3lZ1BNdh7ENeRChHTYsTvWrMubiIAMNS2llXEEgZ1MUOBtXChP3kaFQ==} engines: {node: '>= 4'} @@ -1418,7 +1487,6 @@ packages: /inherits@2.0.4: resolution: {integrity: sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==} - dev: true /internal-slot@1.0.5: resolution: {integrity: sha512-Y+R5hJrzs52QCG2laLn4udYVnxsfny9CpOhNhUvk/SSSVyF6T27FzRbF0sroPidSu3X8oEAkOn2K804mjpt6UQ==} @@ -1502,6 +1570,11 @@ packages: dependencies: is-extglob: 2.1.1 + /is-interactive@2.0.0: + resolution: {integrity: sha512-qP1vozQRI+BMOPcjFzrjXuQvdak2pHNUMZoeG2eRbiSqyvbEf/wQtEOTOX1guk6E3t36RkaqiSt8A/6YElNxLQ==} + engines: {node: '>=12'} + dev: false + /is-negative-zero@2.0.2: resolution: {integrity: sha512-dqJvarLawXsFbNDeJW7zAz8ItJ9cd28YufuuFzh0G8pNHjJMnY08Dv7sYX2uF5UpQOwieAeOExEYAWWfu7ZZUA==} engines: {node: '>= 0.4'} @@ -1570,6 +1643,11 @@ packages: which-typed-array: 1.1.11 dev: false + /is-unicode-supported@1.3.0: + resolution: {integrity: sha512-43r2mRvz+8JRIKnWJ+3j8JtjRKZ6GmjzfaE/qiBJnikNnYv/6bagRJ1kUhNk8R5EX/GkobD+r+sfxCPJsiKBLQ==} + engines: {node: '>=12'} + dev: false + /is-weakref@1.0.2: resolution: {integrity: sha512-qctsuLZmIQ0+vSSMfoVvyFe2+GSEvnmZ2ezTup1SBse9+twCCeial6EEi3Nc2KFcf6+qz2FBPnjXsk8xhKSaPQ==} dependencies: @@ -1674,6 +1752,14 @@ packages: resolution: {integrity: sha512-+WKqsK294HMSc2jEbNgpHpd0JfIBhp7rEV4aqXWqFr6AlXov+SlcgB1Fv01y2kGe3Gc8nMW7VA0SrGuSkRfIEg==} dev: false + /log-symbols@5.1.0: + resolution: {integrity: sha512-l0x2DvrW294C9uDCoQe1VSU4gf529FkSZ6leBl4TiqZH/e+0R7hSfHQBNut2mNygDgHwvYHfFLn6Oxb3VWj2rA==} + engines: {node: '>=12'} + dependencies: + chalk: 5.3.0 + is-unicode-supported: 1.3.0 + dev: false + /loose-envify@1.4.0: resolution: {integrity: sha512-lyuxPGr/Wfhrlem2CL/UcnUc1zcqKAImBDzukY7Y5F/yQiNdko6+fRLevlw1HgMySw7f611UIY408EtxRSoK3Q==} hasBin: true @@ -1740,7 +1826,6 @@ packages: /mimic-fn@2.1.0: resolution: {integrity: sha512-OqbOk5oEQeAZ8WXWydlu9HJjz9WVdEIvamMCcXmuqUYjTknH/sqsWvhQ3vgwKFRR1HpjvNBKQ37nbJgYzGqGcg==} engines: {node: '>=6'} - dev: true /min-indent@1.0.1: resolution: {integrity: sha512-I9jwMn07Sy/IwOj3zVkVik2JTvgpaykDZEigL6Rx6N9LbMywwUSMtxET+7lVoDLLd3O3IXwJwvuuns8UB/HeAg==} @@ -1920,7 +2005,6 @@ packages: engines: {node: '>=6'} dependencies: mimic-fn: 2.1.0 - dev: true /openid-client@5.5.0: resolution: {integrity: sha512-Y7Xl8BgsrkzWLHkVDYuroM67hi96xITyEDSkmWaGUiNX6CkcXC3XyQGdv5aWZ6dukVKBFVQCADi9gCavOmU14w==} @@ -1931,6 +2015,21 @@ packages: oidc-token-hash: 5.0.3 dev: false + /ora@7.0.1: + resolution: {integrity: sha512-0TUxTiFJWv+JnjWm4o9yvuskpEJLXTcng8MJuKd+SzAzp2o+OP3HWqNhB4OdJRt1Vsd9/mR0oyaEYlOnL7XIRw==} + engines: {node: '>=16'} + dependencies: + chalk: 5.3.0 + cli-cursor: 4.0.0 + cli-spinners: 2.9.0 + is-interactive: 2.0.0 + is-unicode-supported: 1.3.0 + log-symbols: 5.1.0 + stdin-discarder: 0.1.0 + string-width: 6.1.0 + strip-ansi: 7.1.0 + dev: false + /os-tmpdir@1.0.2: resolution: {integrity: sha512-D2FR03Vir7FIu45XBY20mTb+/ZSWB00sjU9jdQXt83gDrI4Ztz5Fs7/yy74g2N5SVQY4xY1qDr4rNddwYRVX0g==} engines: {node: '>=0.10.0'} @@ -2164,6 +2263,15 @@ packages: strip-bom: 3.0.0 dev: false + /readable-stream@3.6.2: + resolution: {integrity: sha512-9u/sniCrY3D5WdsERHzHE4G2YCXqoG5FTHUiCC4SIbr6XcLZBY05ya9EKjYek9O5xOAwjGq+1JdGBAS7Q9ScoA==} + engines: {node: '>= 6'} + dependencies: + inherits: 2.0.4 + string_decoder: 1.3.0 + util-deprecate: 1.0.2 + dev: false + /readdirp@3.6.0: resolution: {integrity: sha512-hOS089on8RduqdbhvQ5Z37A0ESjsqz6qnRcffsMU3495FuTdqSm+7bhJ29JvIOsBDEEnan5DPu9t3To9VRlMzA==} engines: {node: '>=8.10.0'} @@ -2214,6 +2322,14 @@ packages: supports-preserve-symlinks-flag: 1.0.0 dev: false + /restore-cursor@4.0.0: + resolution: {integrity: sha512-I9fPXU9geO9bHOt9pHHOhOkYerIMsmVaWB0rA2AI9ERh/+x/i7MV5HKBNrg+ljO5eoPVgCcnFuRjJ9uH6I/3eg==} + engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0} + dependencies: + onetime: 5.1.2 + signal-exit: 3.0.7 + dev: false + /reusify@1.0.4: resolution: {integrity: sha512-U9nH88a3fc/ekCF1l0/UP1IosiuIjyTh7hBvXVMHYgVcfGvt897Xguj2UOLDeI5BG2m7/uwyaLVT6fbtCwTyzw==} engines: {iojs: '>=1.0.0', node: '>=0.10.0'} @@ -2241,6 +2357,10 @@ packages: isarray: 2.0.5 dev: false + /safe-buffer@5.2.1: + resolution: {integrity: sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ==} + dev: false + /safe-regex-test@1.0.0: resolution: {integrity: sha512-JBUUzyOgEwXQY1NuPtvcj/qcBDbDmEvWufhlnXZIm75DEHp+afM1r1ujJpJsV/gSM4t59tpDyPi1sd6ZaPFfsA==} dependencies: @@ -2373,6 +2493,13 @@ packages: resolution: {integrity: sha512-D9cPgkvLlV3t3IzL0D0YLvGA9Ahk4PcvVwUbN0dSGr1aP0Nrt4AEnTUbuGvquEC0mA64Gqt1fzirlRs5ibXx8g==} dev: false + /stdin-discarder@0.1.0: + resolution: {integrity: sha512-xhV7w8S+bUwlPTb4bAOUQhv8/cSS5offJuX8GQGq32ONF0ZtDWKfkdomM3HMRA+LhX6um/FZ0COqlwsjD53LeQ==} + engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0} + dependencies: + bl: 5.1.0 + dev: false + /stream-transform@2.1.3: resolution: {integrity: sha512-9GHUiM5hMiCi6Y03jD2ARC1ettBXkQBoQAe7nJsPknnI0ow10aXjTnew8QtYQmLjzn974BnmWEAJgCY6ZP1DeQ==} dependencies: @@ -2393,6 +2520,15 @@ packages: strip-ansi: 6.0.1 dev: false + /string-width@6.1.0: + resolution: {integrity: sha512-k01swCJAgQmuADB0YIc+7TuatfNvTBVOoaUWJjTB9R4VJzR5vNWzf5t42ESVZFPS8xTySF7CAdV4t/aaIm3UnQ==} + engines: {node: '>=16'} + dependencies: + eastasianwidth: 0.2.0 + emoji-regex: 10.2.1 + strip-ansi: 7.1.0 + dev: false + /string.prototype.trim@1.2.8: resolution: {integrity: sha512-lfjY4HcixfQXOfaqCvcBuOIapyaroTXhbkfJN3gcB1OtyupngWK4sEET9Knd0cXd28kTUqu/kHoV4HKSJdnjiQ==} engines: {node: '>= 0.4'} @@ -2418,6 +2554,12 @@ packages: es-abstract: 1.22.1 dev: false + /string_decoder@1.3.0: + resolution: {integrity: sha512-hkRX8U1WjJFd8LsDJ2yQ/wWWxaopEsABU1XfkM8A+j0+85JAGppt16cr1Whg6KIbb4okU6Mql6BOj+uup/wKeA==} + dependencies: + safe-buffer: 5.2.1 + dev: false + /strip-ansi@6.0.1: resolution: {integrity: sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==} engines: {node: '>=8'} @@ -2425,6 +2567,13 @@ packages: ansi-regex: 5.0.1 dev: false + /strip-ansi@7.1.0: + resolution: {integrity: sha512-iq6eVVI64nQQTRYq2KtEg2d2uU7LElhTJwsH4YzIHZshxlgZms/wIc4VoDQTlG/IvVIrBKG06CrZnp0qv7hkcQ==} + engines: {node: '>=12'} + dependencies: + ansi-regex: 6.0.1 + dev: false + /strip-bom@3.0.0: resolution: {integrity: sha512-vavAMRXOgBVNF6nyEEmL3DBK19iRpDcoIwW+swQ+CbGiu7lju6t+JklA1MHweoWtadgt4ISVUsXLyDq34ddcwA==} engines: {node: '>=4'} @@ -2670,6 +2819,10 @@ packages: engines: {node: '>= 4.0.0'} dev: false + /util-deprecate@1.0.2: + resolution: {integrity: sha512-EPD5q1uXyFxJpCrLnCc1nHnq3gOa6DZBocAIiI2TaSCA7VCJ1UJDMagCzIkXNsUYfD1daK//LTEQ8xiIbrHtcw==} + dev: false + /uuid@8.3.2: resolution: {integrity: sha512-+NYs2QeMWy+GWFOEm9xnn6HCDp0l7QBD7ml8zLUmJ+93Q5NF0NocErnwkTkXVFNiX3/fpC6afS8Dhb/gz7R7eg==} hasBin: true diff --git a/src/lib/generators.ts b/src/lib/generators.ts index 4ddc0d3..c528d91 100644 --- a/src/lib/generators.ts +++ b/src/lib/generators.ts @@ -2,9 +2,11 @@ import fs from 'fs'; import path from 'path'; import { GenerateAdapterConfigurations, + // checkSimilarAdapter, generateBaseInitialTemplate, } from './helpers'; import { ExtentionTypes, OptionsType } from '../typings'; +import { Adapters } from './Adapters'; export const NextGenerator = async ( options: OptionsType, @@ -14,8 +16,6 @@ export const NextGenerator = async ( ) => { const { ts, adapter, db, ...config } = options; - console.log('adapters value => ', adapter); - let baseDirectory = path.join(process.cwd(), dir); let targetDirectory = path.join(baseDirectory, target); let ext: ExtentionTypes = ts ? '.ts' : '.js'; @@ -40,7 +40,15 @@ export const NextGenerator = async ( ); if (adapter) { - GenerateAdapterConfigurations(ext, db, adapter); + if (Adapters[adapter]) { + GenerateAdapterConfigurations(ext, db, adapter); + } else { + // console.log( + // `No such Adapter support is available. Did you mean '${checkSimilarAdapter( + // adapter, + // )}'?`, + // ); + } } console.log(`Processing complete!`); } catch (error) { diff --git a/src/lib/helpers.ts b/src/lib/helpers.ts index 10c386c..a8c3947 100644 --- a/src/lib/helpers.ts +++ b/src/lib/helpers.ts @@ -14,6 +14,14 @@ import { import { GenerateDynamodbAdapter } from './Generators/dynamodb'; import { GenerateFaunaAdapter } from './Generators/fauna'; import path from 'path'; +import { GenerateFirebaseAdapter } from './Generators/firebase'; +import { GenerateKyselyAdapter } from './Generators/kysely'; +import { GenerateMikroOrmAdapter } from './Generators/mikroOrm'; +import { GenerateNeo4jAdapter } from './Generators/neo4j'; +import { GenerateUpstashRedisAdapter } from './Generators/upstashRedis'; +import { GenerateSupabaseAdapter } from './Generators/supabase'; +import { GenerateSequelizeAdapter } from './Generators/sequelize'; +import { GenerateDgraphAdapter } from './Generators/dgraph'; export const getProviders = ( options: Omit, @@ -81,7 +89,7 @@ export const getProviderImports = ( } } - if (adapter) { + if (adapter && Adapters[adapter]) { imports += generateAdapterImport(adapter); } @@ -101,55 +109,57 @@ export const authOptions${ts ? ': NextAuthOptions' : ''} = { // Configure one or more authentication providers${comment} providers: [${getProviders(options, ts, adapter)} // ...add more providers here - ],${adapter ? generateAdapter(adapter) : ''} + ],${adapter && Adapters[adapter] ? generateAdapter(adapter) : ''} }; ${exp}`; }; const generateAdapterImport = (adapter: AdapterType) => { + let { importName, path } = Adapters[adapter]; + let adapterImports = `import { ${importName} } from "@auth/${path}";`; + switch (adapter) { case 'dgraph': - return `import { DgraphAdapter } from "@auth/dgraph-adapter"\n`; + return `${adapterImports}\nimport { config } from "@lib/config";\n`; case 'drizzle': - return `import { DrizzleAdapter } from "@auth/drizzle-adapter"; -import { db } from "@lib/schema";\n`; + return `${adapterImports}\nimport { db } from "@lib/schema";\n`; case 'dynamodb': - return `import { DynamoDBAdapter } from "@auth/dynamodb-adapter" -import { client } from "@lib/dynamodb";\n`; + return `${adapterImports}\nimport { client } from "@lib/dynamodb";\n`; case 'fauna': - return `import { FaunaAdapter } from "@auth/fauna-adapter" -import client from "@lib/fauna";\n`; + return `${adapterImports}\nimport { client } from "@lib/fauna";\n`; + case 'firebase': + return `${adapterImports}\nimport { firestore } from "@lib/firestore";\n`; + case 'kysely': + return `${adapterImports}\nimport { db } from "@lib/db";\n`; + case 'mikroOrm': + return `${adapterImports}\nimport { config } from "@lib/config";\n`; case 'mongodb': - return `import { MongoDBAdapter } from "@auth/mongodb-adapter" -import clientPromise from "@lib/mongodb"\n`; + return `${adapterImports}\nimport clientPromise from "@lib/mongodb"\n`; + case 'neo4j': + return `${adapterImports}\nimport neo4jSession from "@lib/config";\n`; + case 'pouchdb': + return; case 'prisma': - return `import { PrismaAdapter } from "@auth/prisma-adapter"; -import prisma from "@lib/prisma";\n`; + return `${adapterImports}\nimport prisma from "@lib/prisma";\n`; + case 'sequalize': + return `${adapterImports}\nimport sequelize from "@lib/config";\n`; + case 'supabase': + return `${adapterImports}\nimport { config } from "@lib/config";\n`; + case 'typeorm': + return `${adapterImports}\n`; + case 'upstashRedis': + return `${adapterImports}\nimport redis from "@lib/redis";\n`; + case 'xata': + return `${adapterImports}\nimport { XataClient } from "@lib/xata";\n`; } }; -const generateAdapter = (adapter: AdapterType) => { - switch (adapter) { - case 'dgraph': - return `\n\tadapter: DgraphAdapter({ - endpoint: process.env.DGRAPH_GRAPHQL_ENDPOINT, - authToken: process.env.DGRAPH_GRAPHQL_KEY, - // you can omit the following properties if you are running an unsecure schema - authHeader: process.env.AUTH_HEADER, // default: "Authorization", - jwtSecret: process.env.SECRET, - }),`; - case 'drizzle': - return `\n\tadapter: DrizzleAdapter(db),`; - case 'dynamodb': - return `\n\tadapter: DynamoDBAdapter(client),`; - case 'fauna': - return `\n\tadapter: FaunaAdapter(client),`; - case 'mongodb': - return '\n\tadapter: MongoDBAdapter(clientPromise),'; - case 'prisma': - return '\n\tadapter: PrismaAdapter(prisma),'; - } +const generateAdapter = (customAdapter: AdapterType) => { + const { adapterParams: params, importName: adapter } = + Adapters[customAdapter]; + + return `\n\tadapter: ${adapter}(${params})`; }; export function hasNonTsEnvKeys(obj: OptionsType) { @@ -184,6 +194,9 @@ export const GenerateAdapterConfigurations = ( adapter?: AdapterType, ) => { switch (adapter) { + case 'dgraph': + GenerateDgraphAdapter(ext); + break; case 'drizzle': GenerateDrizzleAdapter(db); break; @@ -193,12 +206,36 @@ export const GenerateAdapterConfigurations = ( case 'fauna': GenerateFaunaAdapter(ext); break; - case 'prisma': - GeneratePrismaAdapter(ext, db); + case 'firebase': + GenerateFirebaseAdapter(ext); + break; + case 'kysely': + GenerateKyselyAdapter(ext); + break; + case 'mikroOrm': + GenerateMikroOrmAdapter(ext); break; case 'mongodb': GenerateMongodbAdapter(ext); break; + case 'neo4j': + GenerateNeo4jAdapter(ext); + break; + case 'pouchdb': + // GenerateKyselyAdapter(ext); + break; + case 'prisma': + GeneratePrismaAdapter(ext, db); + break; + case 'sequalize': + GenerateSequelizeAdapter(ext); + break; + case 'supabase': + GenerateSupabaseAdapter(ext); + break; + case 'upstashRedis': + GenerateUpstashRedisAdapter(ext); + break; } }; @@ -216,3 +253,67 @@ export const CreateFolderAndWrite = ( fs.writeFileSync(fileName, content, 'utf-8'); }; + +// const levenshteinDistance = (a: string, b: string): number => { +// const m = a.length; +// const n = b.length; +// const dp = Array.from(Array(m + 1), () => Array(n + 1).fill(0)); + +// for (let i = 0; i <= m; i++) { +// dp[i][0] = i; +// } + +// for (let j = 0; j <= n; j++) { +// dp[0][j] = j; +// } + +// for (let i = 1; i <= m; i++) { +// for (let j = 1; j <= n; j++) { +// const cost = a[i - 1] === b[j - 1] ? 0 : 1; +// dp[i][j] = Math.min( +// dp[i - 1][j] + 1, +// dp[i][j - 1] + 1, +// dp[i - 1][j - 1] + cost, +// ); +// } +// } + +// return dp[m][n]; +// }; + +// export const checkSimilarAdapter = (mistypedValue: string): AdapterType => { +// const availableAdapters: Array = [ +// 'dgraph', +// 'drizzle', +// 'dynamodb', +// 'fauna', +// 'firebase', +// 'kysely', +// 'mongodb', +// 'neo4j', +// 'pouchdb', +// 'prisma', +// 'supabase', +// 'typeorm', +// 'xata', +// 'mikroOrm', +// 'sequalize', +// 'upstashRedis', +// ]; + +// let closestAdapter: AdapterType = availableAdapters[0] ?? 'dgraph'; +// let minDistance = levenshteinDistance(mistypedValue, availableAdapters[0]); + +// for (let i = 1; i < availableAdapters.length; i++) { +// const distance = levenshteinDistance( +// mistypedValue, +// availableAdapters[i], +// ); +// if (distance < minDistance) { +// minDistance = distance; +// closestAdapter = availableAdapters[i]; +// } +// } + +// return closestAdapter; +// }; diff --git a/tsconfig.json b/tsconfig.json index ed9d3cf..09a3dee 100644 --- a/tsconfig.json +++ b/tsconfig.json @@ -10,6 +10,7 @@ "outDir": "dist", "strict": true, "esModuleInterop": true, + "noUncheckedIndexedAccess": true, "skipLibCheck": true, "forceConsistentCasingInFileNames": true, "moduleResolution": "Node16"