@vitnode/core 1.2.0-canary.50 → 1.2.0-canary.52
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/scripts/scripts.js +2 -2
- package/dist/src/api/middlewares/global.middleware.d.ts +2 -10
- package/dist/src/api/middlewares/global.middleware.d.ts.map +1 -1
- package/dist/src/api/models/email.d.ts +24 -8
- package/dist/src/api/models/email.d.ts.map +1 -1
- package/dist/src/api/models/email.js +27 -15
- package/dist/src/api/models/password.d.ts +4 -0
- package/dist/src/api/models/password.d.ts.map +1 -1
- package/dist/src/api/models/password.js +8 -0
- package/dist/src/api/models/session-admin.d.ts +1 -0
- package/dist/src/api/models/session-admin.d.ts.map +1 -1
- package/dist/src/api/models/session.d.ts +1 -0
- package/dist/src/api/models/session.d.ts.map +1 -1
- package/dist/src/api/models/sso.d.ts.map +1 -1
- package/dist/src/api/models/sso.js +8 -5
- package/dist/src/api/models/user/get-user-by-id.d.ts +1 -0
- package/dist/src/api/models/user/get-user-by-id.d.ts.map +1 -1
- package/dist/src/api/models/user/get-user-by-id.js +2 -1
- package/dist/src/api/models/user/sign-up.js +2 -2
- package/dist/src/api/models/user.d.ts +1 -0
- package/dist/src/api/models/user.d.ts.map +1 -1
- package/dist/src/api/modules/users/routes/change-password.route.d.ts +52 -0
- package/dist/src/api/modules/users/routes/change-password.route.d.ts.map +1 -0
- package/dist/src/api/modules/users/routes/change-password.route.js +58 -0
- package/dist/src/api/modules/users/routes/reset-passowrd.route.d.ts +42 -0
- package/dist/src/api/modules/users/routes/reset-passowrd.route.d.ts.map +1 -0
- package/dist/src/api/modules/users/routes/reset-passowrd.route.js +91 -0
- package/dist/src/api/modules/users/routes/sign-up.route.d.ts +6 -0
- package/dist/src/api/modules/users/routes/sign-up.route.d.ts.map +1 -1
- package/dist/src/api/modules/users/routes/sign-up.route.js +6 -0
- package/dist/src/api/modules/users/routes/test.route.d.ts.map +1 -1
- package/dist/src/api/modules/users/routes/test.route.js +0 -6
- package/dist/src/api/modules/users/sso/routes/callback.route.d.ts +4 -1
- package/dist/src/api/modules/users/sso/routes/callback.route.d.ts.map +1 -1
- package/dist/src/api/modules/users/sso/routes/callback.route.js +3 -0
- package/dist/src/api/modules/users/sso/sso.module.d.ts +4 -1
- package/dist/src/api/modules/users/sso/sso.module.d.ts.map +1 -1
- package/dist/src/api/modules/users/users.module.d.ts +93 -1
- package/dist/src/api/modules/users/users.module.d.ts.map +1 -1
- package/dist/src/api/modules/users/users.module.js +5 -1
- package/dist/src/app/login/reset-password/page.d.ts +9 -0
- package/dist/src/app/login/reset-password/page.d.ts.map +1 -0
- package/dist/src/app/login/reset-password/page.js +18 -0
- package/dist/src/components/form/auto-form.d.ts +2 -1
- package/dist/src/components/form/auto-form.d.ts.map +1 -1
- package/dist/src/components/form/auto-form.js +3 -2
- package/dist/src/components/form/common/label.d.ts +3 -1
- package/dist/src/components/form/common/label.d.ts.map +1 -1
- package/dist/src/components/form/common/label.js +14 -4
- package/dist/src/components/form/fields/checkbox.d.ts +1 -1
- package/dist/src/components/form/fields/checkbox.d.ts.map +1 -1
- package/dist/src/components/form/fields/checkbox.js +2 -1
- package/dist/src/components/form/fields/combobox-async.d.ts +1 -1
- package/dist/src/components/form/fields/combobox-async.d.ts.map +1 -1
- package/dist/src/components/form/fields/combobox-async.js +2 -1
- package/dist/src/components/form/fields/combobox.d.ts +1 -1
- package/dist/src/components/form/fields/combobox.d.ts.map +1 -1
- package/dist/src/components/form/fields/combobox.js +2 -1
- package/dist/src/components/form/fields/input.d.ts +1 -1
- package/dist/src/components/form/fields/input.d.ts.map +1 -1
- package/dist/src/components/form/fields/input.js +2 -1
- package/dist/src/components/form/fields/radio-group.d.ts +1 -1
- package/dist/src/components/form/fields/radio-group.d.ts.map +1 -1
- package/dist/src/components/form/fields/radio-group.js +2 -1
- package/dist/src/components/form/fields/select.d.ts +1 -1
- package/dist/src/components/form/fields/select.d.ts.map +1 -1
- package/dist/src/components/form/fields/select.js +2 -1
- package/dist/src/components/form/fields/switch.d.ts +1 -1
- package/dist/src/components/form/fields/switch.d.ts.map +1 -1
- package/dist/src/components/form/fields/switch.js +2 -1
- package/dist/src/components/form/fields/textarea.d.ts +1 -1
- package/dist/src/components/form/fields/textarea.d.ts.map +1 -1
- package/dist/src/components/form/fields/textarea.js +2 -1
- package/dist/src/components/ui/alert-dialog.d.ts.map +1 -1
- package/dist/src/components/ui/alert-dialog.js +1 -2
- package/dist/src/components/ui/alert.d.ts +1 -1
- package/dist/src/components/ui/badge.d.ts +1 -1
- package/dist/src/components/ui/button.d.ts +1 -1
- package/dist/src/components/ui/button.js +1 -1
- package/dist/src/components/ui/card.d.ts +1 -1
- package/dist/src/components/ui/card.d.ts.map +1 -1
- package/dist/src/components/ui/card.js +1 -2
- package/dist/src/components/ui/form.js +1 -1
- package/dist/src/components/ui/popover.d.ts +1 -1
- package/dist/src/components/ui/popover.d.ts.map +1 -1
- package/dist/src/components/ui/popover.js +2 -1
- package/dist/src/components/ui/tooltip.d.ts +1 -1
- package/dist/src/components/ui/tooltip.d.ts.map +1 -1
- package/dist/src/components/ui/tooltip.js +6 -7
- package/dist/src/database/users.d.ts +21 -2
- package/dist/src/database/users.d.ts.map +1 -1
- package/dist/src/database/users.js +5 -2
- package/dist/src/emails/default-template.d.ts +34 -22
- package/dist/src/emails/default-template.d.ts.map +1 -1
- package/dist/src/emails/default-template.js +57 -63
- package/dist/src/emails/reset-password.d.ts +56 -0
- package/dist/src/emails/reset-password.d.ts.map +1 -0
- package/dist/src/emails/reset-password.js +132 -0
- package/dist/src/emails/ui/button.d.ts +9 -0
- package/dist/src/emails/ui/button.d.ts.map +1 -0
- package/dist/src/emails/ui/button.js +36 -0
- package/dist/src/emails/ui/card.d.ts +8 -0
- package/dist/src/emails/ui/card.d.ts.map +1 -0
- package/dist/src/emails/ui/card.js +39 -0
- package/dist/src/hooks/use-captcha.d.ts.map +1 -1
- package/dist/src/hooks/use-captcha.js +47 -15
- package/dist/src/lib/fetcher/core.d.ts.map +1 -1
- package/dist/src/lib/fetcher/core.js +6 -1
- package/dist/src/views/admin/sign-in/sign-in-admin-view.js +2 -1
- package/dist/src/views/auth/password-reset/change-password-form/form.d.ts +5 -0
- package/dist/src/views/auth/password-reset/change-password-form/form.d.ts.map +1 -0
- package/dist/src/views/auth/password-reset/change-password-form/form.js +48 -0
- package/dist/src/views/auth/password-reset/change-password-form/mutation-api.d.ts +6 -0
- package/dist/src/views/auth/password-reset/change-password-form/mutation-api.d.ts.map +1 -0
- package/dist/src/views/auth/password-reset/change-password-form/mutation-api.js +22 -0
- package/dist/src/views/auth/password-reset/change-password-form/use-form.d.ts +11 -0
- package/dist/src/views/auth/password-reset/change-password-form/use-form.d.ts.map +1 -0
- package/dist/src/views/auth/password-reset/change-password-form/use-form.js +36 -0
- package/dist/src/views/auth/password-reset/form/form.d.ts +6 -0
- package/dist/src/views/auth/password-reset/form/form.d.ts.map +1 -0
- package/dist/src/views/auth/password-reset/form/form.js +104 -0
- package/dist/src/views/auth/password-reset/form/mutation-api.d.ts +7 -0
- package/dist/src/views/auth/password-reset/form/mutation-api.d.ts.map +1 -0
- package/dist/src/views/auth/password-reset/form/mutation-api.js +21 -0
- package/dist/src/views/auth/password-reset/form/use-form.d.ts +12 -0
- package/dist/src/views/auth/password-reset/form/use-form.d.ts.map +1 -0
- package/dist/src/views/auth/password-reset/form/use-form.js +33 -0
- package/dist/src/views/auth/password-reset/password-reset-view.d.ts +7 -0
- package/dist/src/views/auth/password-reset/password-reset-view.d.ts.map +1 -0
- package/dist/src/views/auth/password-reset/password-reset-view.js +37 -0
- package/dist/src/views/auth/sign-in/form/form.d.ts +2 -1
- package/dist/src/views/auth/sign-in/form/form.d.ts.map +1 -1
- package/dist/src/views/auth/sign-in/form/form.js +7 -2
- package/dist/src/views/auth/sign-in/sign-in-view.d.ts.map +1 -1
- package/dist/src/views/auth/sign-in/sign-in-view.js +10 -4
- package/dist/src/views/auth/{components → sign-up/components}/password-input.d.ts +2 -2
- package/dist/src/views/auth/sign-up/components/password-input.d.ts.map +1 -0
- package/dist/src/views/auth/{components → sign-up/components}/password-input.js +4 -4
- package/dist/src/views/auth/sign-up/form/form.d.ts.map +1 -1
- package/dist/src/views/auth/sign-up/form/form.js +2 -15
- package/dist/src/views/auth/sign-up/form/mutation-api.d.ts +1 -1
- package/dist/src/views/auth/sign-up/form/mutation-api.d.ts.map +1 -1
- package/dist/src/views/auth/sign-up/form/use-form.d.ts +1 -6
- package/dist/src/views/auth/sign-up/form/use-form.d.ts.map +1 -1
- package/dist/src/views/auth/sign-up/form/use-form.js +12 -9
- package/dist/src/views/auth/sign-up/sign-up-view.js +1 -1
- package/dist/src/views/auth/sso/callback/callback-sso-view.d.ts.map +1 -1
- package/dist/src/views/auth/sso/callback/callback-sso-view.js +19 -5
- package/dist/src/views/auth/sso/callback/client/client.d.ts +3 -1
- package/dist/src/views/auth/sso/callback/client/client.d.ts.map +1 -1
- package/dist/src/views/auth/sso/callback/client/client.js +32 -3
- package/dist/src/views/auth/sso/callback/client/mutation-api.d.ts.map +1 -1
- package/dist/src/views/auth/sso/callback/client/mutation-api.js +5 -0
- package/dist/src/views/error/error-view.d.ts +5 -3
- package/dist/src/views/error/error-view.d.ts.map +1 -1
- package/dist/src/views/error/error-view.js +24 -22
- package/dist/src/views/layouts/theme/header/header.js +1 -1
- package/dist/src/vitnode.config.d.ts +3 -0
- package/dist/src/vitnode.config.d.ts.map +1 -1
- package/dist/tsconfig.tsbuildinfo +1 -1
- package/package.json +45 -44
- package/src/app/login/reset-password/page.tsx +27 -0
- package/src/locales/en.json +42 -2
- package/dist/src/views/auth/components/password-input.d.ts.map +0 -1
package/dist/scripts/scripts.js
CHANGED
|
@@ -3,9 +3,9 @@ import 'tsx/esm';
|
|
|
3
3
|
import { createRequire } from 'module';
|
|
4
4
|
const require = createRequire(import.meta.url);
|
|
5
5
|
|
|
6
|
-
var Ht=Object.create;var qe=Object.defineProperty;var Gt=Object.getOwnPropertyDescriptor;var qt=Object.getOwnPropertyNames;var Bt=Object.getPrototypeOf,Jt=Object.prototype.hasOwnProperty;var oe=(e=>typeof require<"u"?require:typeof Proxy<"u"?new Proxy(e,{get:(t,s)=>(typeof require<"u"?require:t)[s]}):e)(function(e){if(typeof require<"u")return require.apply(this,arguments);throw Error('Dynamic require of "'+e+'" is not supported')});var Be=(e,t)=>()=>(t||e((t={exports:{}}).exports,t),t.exports);var Qt=(e,t,s,i)=>{if(t&&typeof t=="object"||typeof t=="function")for(let r of qt(t))!Jt.call(e,r)&&r!==s&&qe(e,r,{get:()=>t[r],enumerable:!(i=Gt(t,r))||i.enumerable});return e};var Xt=(e,t,s)=>(s=e!=null?Ht(Bt(e)):{},Qt(t||!e||!e.__esModule?qe(s,"default",{value:e,enumerable:!0}):s,e));var Je=Be((Fr,Zt)=>{Zt.exports={name:"dotenv",version:"17.2.
|
|
6
|
+
var Ht=Object.create;var qe=Object.defineProperty;var Gt=Object.getOwnPropertyDescriptor;var qt=Object.getOwnPropertyNames;var Bt=Object.getPrototypeOf,Jt=Object.prototype.hasOwnProperty;var oe=(e=>typeof require<"u"?require:typeof Proxy<"u"?new Proxy(e,{get:(t,s)=>(typeof require<"u"?require:t)[s]}):e)(function(e){if(typeof require<"u")return require.apply(this,arguments);throw Error('Dynamic require of "'+e+'" is not supported')});var Be=(e,t)=>()=>(t||e((t={exports:{}}).exports,t),t.exports);var Qt=(e,t,s,i)=>{if(t&&typeof t=="object"||typeof t=="function")for(let r of qt(t))!Jt.call(e,r)&&r!==s&&qe(e,r,{get:()=>t[r],enumerable:!(i=Gt(t,r))||i.enumerable});return e};var Xt=(e,t,s)=>(s=e!=null?Ht(Bt(e)):{},Qt(t||!e||!e.__esModule?qe(s,"default",{value:e,enumerable:!0}):s,e));var Je=Be((Fr,Zt)=>{Zt.exports={name:"dotenv",version:"17.2.1",description:"Loads environment variables from .env file",main:"lib/main.js",types:"lib/main.d.ts",exports:{".":{types:"./lib/main.d.ts",require:"./lib/main.js",default:"./lib/main.js"},"./config":"./config.js","./config.js":"./config.js","./lib/env-options":"./lib/env-options.js","./lib/env-options.js":"./lib/env-options.js","./lib/cli-options":"./lib/cli-options.js","./lib/cli-options.js":"./lib/cli-options.js","./package.json":"./package.json"},scripts:{"dts-check":"tsc --project tests/types/tsconfig.json",lint:"standard",pretest:"npm run lint && npm run dts-check",test:"tap run --allow-empty-coverage --disable-coverage --timeout=60000","test:coverage":"tap run --show-full-coverage --timeout=60000 --coverage-report=text --coverage-report=lcov",prerelease:"npm test",release:"standard-version"},repository:{type:"git",url:"git://github.com/motdotla/dotenv.git"},homepage:"https://github.com/motdotla/dotenv#readme",funding:"https://dotenvx.com",keywords:["dotenv","env",".env","environment","variables","config","settings"],readmeFilename:"README.md",license:"BSD-2-Clause",devDependencies:{"@types/node":"^18.11.3",decache:"^4.6.2",sinon:"^14.0.1",standard:"^17.0.0","standard-version":"^9.5.0",tap:"^19.2.0",typescript:"^4.8.4"},engines:{node:">=12"},browser:{fs:!1}}});var st=Be((Lr,O)=>{"use strict";var Re=oe("fs"),ae=oe("path"),es=oe("os"),ts=oe("crypto"),ss=Je(),Ae=ss.version,Qe=["\u{1F510} encrypt with Dotenvx: https://dotenvx.com","\u{1F510} prevent committing .env to code: https://dotenvx.com/precommit","\u{1F510} prevent building .env in docker: https://dotenvx.com/prebuild","\u{1F4E1} observe env with Radar: https://dotenvx.com/radar","\u{1F4E1} auto-backup env with Radar: https://dotenvx.com/radar","\u{1F4E1} version env with Radar: https://dotenvx.com/radar","\u{1F6E0}\uFE0F run anywhere with `dotenvx run -- yourcommand`","\u2699\uFE0F specify custom .env file path with { path: '/custom/path/.env' }","\u2699\uFE0F enable debug logging with { debug: true }","\u2699\uFE0F override existing env vars with { override: true }","\u2699\uFE0F suppress all logs with { quiet: true }","\u2699\uFE0F write to custom object with { processEnv: myObject }","\u2699\uFE0F load multiple .env files with { path: ['.env.local', '.env'] }"];function rs(){return Qe[Math.floor(Math.random()*Qe.length)]}function U(e){return typeof e=="string"?!["false","0","no","off",""].includes(e.toLowerCase()):!!e}function is(){return process.stdout.isTTY}function ns(e){return is()?`\x1B[2m${e}\x1B[0m`:e}var os=/(?:^|^)\s*(?:export\s+)?([\w.-]+)(?:\s*=\s*?|:\s+?)(\s*'(?:\\'|[^'])*'|\s*"(?:\\"|[^"])*"|\s*`(?:\\`|[^`])*`|[^#\r\n]+)?\s*(?:#.*)?(?:$|$)/mg;function as(e){let t={},s=e.toString();s=s.replace(/\r\n?/mg,`
|
|
7
7
|
`);let i;for(;(i=os.exec(s))!=null;){let r=i[1],n=i[2]||"";n=n.trim();let o=n[0];n=n.replace(/^(['"`])([\s\S]*)\1$/mg,"$2"),o==='"'&&(n=n.replace(/\\n/g,`
|
|
8
|
-
`),n=n.replace(/\\r/g,"\r")),t[r]=n}return t}function cs(e){e=e||{};let t=tt(e);e.path=t;let s=N.configDotenv(e);if(!s.parsed){let o=new Error(`MISSING_DATA: Cannot parse ${t} for an unknown reason`);throw o.code="MISSING_DATA",o}let i=et(e).split(","),r=i.length,n;for(let o=0;o<r;o++)try{let a=i[o].trim(),c=ds(s,a);n=N.decrypt(c.ciphertext,c.key);break}catch(a){if(o+1>=r)throw a}return N.parse(n)}function ls(e){console.error(`[dotenv@${Ae}][WARN] ${e}`)}function q(e){console.log(`[dotenv@${Ae}][DEBUG] ${e}`)}function Ze(e){console.log(`[dotenv@${Ae}] ${e}`)}function et(e){return e&&e.DOTENV_KEY&&e.DOTENV_KEY.length>0?e.DOTENV_KEY:process.env.DOTENV_KEY&&process.env.DOTENV_KEY.length>0?process.env.DOTENV_KEY:""}function ds(e,t){let s;try{s=new URL(t)}catch(a){if(a.code==="ERR_INVALID_URL"){let c=new Error("INVALID_DOTENV_KEY: Wrong format. Must be in valid uri format like dotenv://:key_1234@dotenvx.com/vault/.env.vault?environment=development");throw c.code="INVALID_DOTENV_KEY",c}throw a}let i=s.password;if(!i){let a=new Error("INVALID_DOTENV_KEY: Missing key part");throw a.code="INVALID_DOTENV_KEY",a}let r=s.searchParams.get("environment");if(!r){let a=new Error("INVALID_DOTENV_KEY: Missing environment part");throw a.code="INVALID_DOTENV_KEY",a}let n=`DOTENV_VAULT_${r.toUpperCase()}`,o=e.parsed[n];if(!o){let a=new Error(`NOT_FOUND_DOTENV_ENVIRONMENT: Cannot locate environment ${n} in your .env.vault file.`);throw a.code="NOT_FOUND_DOTENV_ENVIRONMENT",a}return{ciphertext:o,key:i}}function tt(e){let t=null;if(e&&e.path&&e.path.length>0)if(Array.isArray(e.path))for(let s of e.path)Re.existsSync(s)&&(t=s.endsWith(".vault")?s:`${s}.vault`);else t=e.path.endsWith(".vault")?e.path:`${e.path}.vault`;else t=ae.resolve(process.cwd(),".env.vault");return Re.existsSync(t)?t:null}function Xe(e){return e[0]==="~"?ae.join(es.homedir(),e.slice(1)):e}function us(e){let t=U(process.env.DOTENV_CONFIG_DEBUG||e&&e.debug),s=U(process.env.DOTENV_CONFIG_QUIET||e&&e.quiet);(t||!s)&&Ze("Loading env from encrypted .env.vault");let i=N._parseVault(e),r=process.env;return e&&e.processEnv!=null&&(r=e.processEnv),N.populate(r,i,e),{parsed:i}}function fs(e){let t=ae.resolve(process.cwd(),".env"),s="utf8",i=process.env;e&&e.processEnv!=null&&(i=e.processEnv);let r=U(i.DOTENV_CONFIG_DEBUG||e&&e.debug),n=U(i.DOTENV_CONFIG_QUIET||e&&e.quiet);e&&e.encoding?s=e.encoding:r&&q("No encoding is specified. UTF-8 is used by default");let o=[t];if(e&&e.path)if(!Array.isArray(e.path))o=[Xe(e.path)];else{o=[];for(let l of e.path)o.push(Xe(l))}let a,c={};for(let l of o)try{let d=N.parse(Re.readFileSync(l,{encoding:s}));N.populate(c,d,e)}catch(d){r&&q(`Failed to load ${l} ${d.message}`),a=d}let u=N.populate(i,c,e);if(r=U(i.DOTENV_CONFIG_DEBUG||r),n=U(i.DOTENV_CONFIG_QUIET||n),r||!n){let l=Object.keys(u).length,d=[];for(let f of o)try{let _=ae.relative(process.cwd(),f);d.push(_)}catch(_){r&&q(`Failed to load ${f} ${_.message}`),a=_}Ze(`injecting env (${l}) from ${d.join(",")} ${ns(`(tip: ${rs()})`)}`)}return a?{parsed:c,error:a}:{parsed:c}}function ps(e){if(et(e).length===0)return N.configDotenv(e);let t=tt(e);return t?N._configVault(e):(ls(`You set DOTENV_KEY but you are missing a .env.vault file at ${t}. Did you forget to build it?`),N.configDotenv(e))}function hs(e,t){let s=Buffer.from(t.slice(-64),"hex"),i=Buffer.from(e,"base64"),r=i.subarray(0,12),n=i.subarray(-16);i=i.subarray(12,-16);try{let o=ts.createDecipheriv("aes-256-gcm",s,r);return o.setAuthTag(n),`${o.update(i)}${o.final()}`}catch(o){let a=o instanceof RangeError,c=o.message==="Invalid key length",u=o.message==="Unsupported state or unable to authenticate data";if(a||c){let l=new Error("INVALID_DOTENV_KEY: It must be 64 characters long (or more)");throw l.code="INVALID_DOTENV_KEY",l}else if(u){let l=new Error("DECRYPTION_FAILED: Please check your DOTENV_KEY");throw l.code="DECRYPTION_FAILED",l}else throw o}}function ms(e,t,s={}){let i=!!(s&&s.debug),r=!!(s&&s.override),n={};if(typeof t!="object"){let o=new Error("OBJECT_REQUIRED: Please check the processEnv argument being passed to populate");throw o.code="OBJECT_REQUIRED",o}for(let o of Object.keys(t))Object.prototype.hasOwnProperty.call(e,o)?(r===!0&&(e[o]=t[o],n[o]=t[o]),i&&q(r===!0?`"${o}" is already defined and WAS overwritten`:`"${o}" is already defined and was NOT overwritten`)):(e[o]=t[o],n[o]=t[o]);return n}var N={configDotenv:fs,_configVault:us,_parseVault:cs,config:ps,decrypt:hs,parse:as,populate:ms};O.exports.configDotenv=N.configDotenv;O.exports._configVault=N._configVault;O.exports._parseVault=N._parseVault;O.exports.config=N.config;O.exports.decrypt=N.decrypt;O.exports.parse=N.parse;O.exports.populate=N.populate;O.exports=N});var zt=Xt(st(),1);import{stat as Ks}from"fs";import{stat as Hs,readdir as Gs}from"fs/promises";import{EventEmitter as qs}from"events";import*as g from"path";import{stat as gs,lstat as rt,readdir as _s,realpath as ws}from"fs/promises";import{Readable as ys}from"stream";import{resolve as it,relative as bs,join as Es,sep as vs}from"path";var T={FILE_TYPE:"files",DIR_TYPE:"directories",FILE_DIR_TYPE:"files_directories",EVERYTHING_TYPE:"all"},ke={root:".",fileFilter:e=>!0,directoryFilter:e=>!0,type:T.FILE_TYPE,lstat:!1,depth:2147483648,alwaysStat:!1,highWaterMark:4096};Object.freeze(ke);var ct="READDIRP_RECURSIVE_ERROR",Ds=new Set(["ENOENT","EPERM","EACCES","ELOOP",ct]),nt=[T.DIR_TYPE,T.EVERYTHING_TYPE,T.FILE_DIR_TYPE,T.FILE_TYPE],xs=new Set([T.DIR_TYPE,T.EVERYTHING_TYPE,T.FILE_DIR_TYPE]),Ps=new Set([T.EVERYTHING_TYPE,T.FILE_DIR_TYPE,T.FILE_TYPE]),Ns=e=>Ds.has(e.code),Is=process.platform==="win32",ot=e=>!0,at=e=>{if(e===void 0)return ot;if(typeof e=="function")return e;if(typeof e=="string"){let t=e.trim();return s=>s.basename===t}if(Array.isArray(e)){let t=e.map(s=>s.trim());return s=>t.some(i=>s.basename===i)}return ot},Ce=class extends ys{constructor(t={}){super({objectMode:!0,autoDestroy:!0,highWaterMark:t.highWaterMark});let s={...ke,...t},{root:i,type:r}=s;this._fileFilter=at(s.fileFilter),this._directoryFilter=at(s.directoryFilter);let n=s.lstat?rt:gs;Is?this._stat=o=>n(o,{bigint:!0}):this._stat=n,this._maxDepth=s.depth??ke.depth,this._wantsDir=r?xs.has(r):!1,this._wantsFile=r?Ps.has(r):!1,this._wantsEverything=r===T.EVERYTHING_TYPE,this._root=it(i),this._isDirent=!s.alwaysStat,this._statsProp=this._isDirent?"dirent":"stats",this._rdOptions={encoding:"utf8",withFileTypes:this._isDirent},this.parents=[this._exploreDir(i,1)],this.reading=!1,this.parent=void 0}async _read(t){if(!this.reading){this.reading=!0;try{for(;!this.destroyed&&t>0;){let s=this.parent,i=s&&s.files;if(i&&i.length>0){let{path:r,depth:n}=s,o=i.splice(0,t).map(c=>this._formatEntry(c,r)),a=await Promise.all(o);for(let c of a){if(!c)continue;if(this.destroyed)return;let u=await this._getEntryType(c);u==="directory"&&this._directoryFilter(c)?(n<=this._maxDepth&&this.parents.push(this._exploreDir(c.fullPath,n+1)),this._wantsDir&&(this.push(c),t--)):(u==="file"||this._includeAsFile(c))&&this._fileFilter(c)&&this._wantsFile&&(this.push(c),t--)}}else{let r=this.parents.pop();if(!r){this.push(null);break}if(this.parent=await r,this.destroyed)return}}}catch(s){this.destroy(s)}finally{this.reading=!1}}}async _exploreDir(t,s){let i;try{i=await _s(t,this._rdOptions)}catch(r){this._onError(r)}return{files:i,depth:s,path:t}}async _formatEntry(t,s){let i,r=this._isDirent?t.name:t;try{let n=it(Es(s,r));i={path:bs(this._root,n),fullPath:n,basename:r},i[this._statsProp]=this._isDirent?t:await this._stat(n)}catch(n){this._onError(n);return}return i}_onError(t){Ns(t)&&!this.destroyed?this.emit("warn",t):this.destroy(t)}async _getEntryType(t){if(!t&&this._statsProp in t)return"";let s=t[this._statsProp];if(s.isFile())return"file";if(s.isDirectory())return"directory";if(s&&s.isSymbolicLink()){let i=t.fullPath;try{let r=await ws(i),n=await rt(r);if(n.isFile())return"file";if(n.isDirectory()){let o=r.length;if(i.startsWith(r)&&i.substr(o,1)===vs){let a=new Error(`Circular symlink detected: "${i}" points to "${r}"`);return a.code=ct,this._onError(a)}return"directory"}}catch(r){return this._onError(r),""}}}_includeAsFile(t){let s=t&&t[this._statsProp];return s&&this._wantsEverything&&!s.isDirectory()}};function lt(e,t={}){let s=t.entryType||t.type;if(s==="both"&&(s=T.FILE_DIR_TYPE),s&&(t.type=s),e){if(typeof e!="string")throw new TypeError("readdirp: root argument must be a string. Usage: readdirp(root, options)");if(s&&!nt.includes(s))throw new Error(`readdirp: Invalid type passed. Use one of ${nt.join(", ")}`)}else throw new Error("readdirp: root argument is required. Usage: readdirp(root, options)");return t.root=e,new Ce(t)}import{watchFile as Ts,unwatchFile as dt,watch as Rs}from"fs";import{open as As,stat as ft,lstat as ks,realpath as Se}from"fs/promises";import*as D from"path";import{type as Cs}from"os";var Ss="data",Oe="end",pt="close",fe=()=>{};var pe=process.platform,$e=pe==="win32",Fs=pe==="darwin",Ls=pe==="linux",Os=pe==="freebsd",ht=Cs()==="OS400",x={ALL:"all",READY:"ready",ADD:"add",CHANGE:"change",ADD_DIR:"addDir",UNLINK:"unlink",UNLINK_DIR:"unlinkDir",RAW:"raw",ERROR:"error"},R=x,$s="watch",js={lstat:ks,stat:ft},M="listeners",ce="errHandlers",K="rawEmitters",Ws=[M,ce,K],Ms=new Set(["3dm","3ds","3g2","3gp","7z","a","aac","adp","afdesign","afphoto","afpub","ai","aif","aiff","alz","ape","apk","appimage","ar","arj","asf","au","avi","bak","baml","bh","bin","bk","bmp","btif","bz2","bzip2","cab","caf","cgm","class","cmx","cpio","cr2","cur","dat","dcm","deb","dex","djvu","dll","dmg","dng","doc","docm","docx","dot","dotm","dra","DS_Store","dsk","dts","dtshd","dvb","dwg","dxf","ecelp4800","ecelp7470","ecelp9600","egg","eol","eot","epub","exe","f4v","fbs","fh","fla","flac","flatpak","fli","flv","fpx","fst","fvt","g3","gh","gif","graffle","gz","gzip","h261","h263","h264","icns","ico","ief","img","ipa","iso","jar","jpeg","jpg","jpgv","jpm","jxr","key","ktx","lha","lib","lvp","lz","lzh","lzma","lzo","m3u","m4a","m4v","mar","mdi","mht","mid","midi","mj2","mka","mkv","mmr","mng","mobi","mov","movie","mp3","mp4","mp4a","mpeg","mpg","mpga","mxu","nef","npx","numbers","nupkg","o","odp","ods","odt","oga","ogg","ogv","otf","ott","pages","pbm","pcx","pdb","pdf","pea","pgm","pic","png","pnm","pot","potm","potx","ppa","ppam","ppm","pps","ppsm","ppsx","ppt","pptm","pptx","psd","pya","pyc","pyo","pyv","qt","rar","ras","raw","resources","rgb","rip","rlc","rmf","rmvb","rpm","rtf","rz","s3m","s7z","scpt","sgi","shar","snap","sil","sketch","slk","smv","snk","so","stl","suo","sub","swf","tar","tbz","tbz2","tga","tgz","thmx","tif","tiff","tlz","ttc","ttf","txz","udf","uvh","uvi","uvm","uvp","uvs","uvu","viv","vob","war","wav","wax","wbmp","wdp","weba","webm","webp","whl","wim","wm","wma","wmv","wmx","woff","woff2","wrm","wvx","xbm","xif","xla","xlam","xls","xlsb","xlsm","xlsx","xlt","xltm","xltx","xm","xmind","xpi","xpm","xwd","xz","z","zip","zipx"]),Vs=e=>Ms.has(D.extname(e).slice(1).toLowerCase()),Le=(e,t)=>{e instanceof Set?e.forEach(t):t(e)},B=(e,t,s)=>{let i=e[t];i instanceof Set||(e[t]=i=new Set([i])),i.add(s)},Ys=e=>t=>{let s=e[t];s instanceof Set?s.clear():delete e[t]},J=(e,t,s)=>{let i=e[t];i instanceof Set?i.delete(s):i===s&&delete e[t]},mt=e=>e instanceof Set?e.size===0:!e,le=new Map;function ut(e,t,s,i,r){let n=(o,a)=>{s(e),r(o,a,{watchedPath:e}),a&&e!==a&&de(D.resolve(e,a),M,D.join(e,a))};try{return Rs(e,{persistent:t.persistent},n)}catch(o){i(o);return}}var de=(e,t,s,i,r)=>{let n=le.get(e);n&&Le(n[t],o=>{o(s,i,r)})},zs=(e,t,s,i)=>{let{listener:r,errHandler:n,rawEmitter:o}=i,a=le.get(t),c;if(!s.persistent)return c=ut(e,s,r,n,o),c?c.close.bind(c):void 0;if(a)B(a,M,r),B(a,ce,n),B(a,K,o);else{if(c=ut(e,s,de.bind(null,t,M),n,de.bind(null,t,K)),!c)return;c.on(R.ERROR,async u=>{let l=de.bind(null,t,ce);if(a&&(a.watcherUnusable=!0),$e&&u.code==="EPERM")try{await(await As(e,"r")).close(),l(u)}catch{}else l(u)}),a={listeners:r,errHandlers:n,rawEmitters:o,watcher:c},le.set(t,a)}return()=>{J(a,M,r),J(a,ce,n),J(a,K,o),mt(a.listeners)&&(a.watcher.close(),le.delete(t),Ws.forEach(Ys(a)),a.watcher=void 0,Object.freeze(a))}},Fe=new Map,Us=(e,t,s,i)=>{let{listener:r,rawEmitter:n}=i,o=Fe.get(t),a=o&&o.options;return a&&(a.persistent<s.persistent||a.interval>s.interval)&&(dt(t),o=void 0),o?(B(o,M,r),B(o,K,n)):(o={listeners:r,rawEmitters:n,options:s,watcher:Ts(t,s,(c,u)=>{Le(o.rawEmitters,d=>{d(R.CHANGE,t,{curr:c,prev:u})});let l=c.mtimeMs;(c.size!==u.size||l>u.mtimeMs||l===0)&&Le(o.listeners,d=>d(e,c))})},Fe.set(t,o)),()=>{J(o,M,r),J(o,K,n),mt(o.listeners)&&(Fe.delete(t),dt(t),o.options=o.watcher=void 0,Object.freeze(o))}},ue=class{constructor(t){this.fsw=t,this._boundHandleError=s=>t._handleError(s)}_watchWithNodeFs(t,s){let i=this.fsw.options,r=D.dirname(t),n=D.basename(t);this.fsw._getWatchedDir(r).add(n);let a=D.resolve(t),c={persistent:i.persistent};s||(s=fe);let u;if(i.usePolling){let l=i.interval!==i.binaryInterval;c.interval=l&&Vs(n)?i.binaryInterval:i.interval,u=Us(t,a,c,{listener:s,rawEmitter:this.fsw._emitRaw})}else u=zs(t,a,c,{listener:s,errHandler:this._boundHandleError,rawEmitter:this.fsw._emitRaw});return u}_handleFile(t,s,i){if(this.fsw.closed)return;let r=D.dirname(t),n=D.basename(t),o=this.fsw._getWatchedDir(r),a=s;if(o.has(n))return;let c=async(l,d)=>{if(this.fsw._throttle($s,t,5)){if(!d||d.mtimeMs===0)try{let f=await ft(t);if(this.fsw.closed)return;let _=f.atimeMs,v=f.mtimeMs;if((!_||_<=v||v!==a.mtimeMs)&&this.fsw._emit(R.CHANGE,t,f),(Fs||Ls||Os)&&a.ino!==f.ino){this.fsw._closeFile(l),a=f;let F=this._watchWithNodeFs(t,c);F&&this.fsw._addPathCloser(l,F)}else a=f}catch{this.fsw._remove(r,n)}else if(o.has(n)){let f=d.atimeMs,_=d.mtimeMs;(!f||f<=_||_!==a.mtimeMs)&&this.fsw._emit(R.CHANGE,t,d),a=d}}},u=this._watchWithNodeFs(t,c);if(!(i&&this.fsw.options.ignoreInitial)&&this.fsw._isntIgnored(t)){if(!this.fsw._throttle(R.ADD,t,0))return;this.fsw._emit(R.ADD,t,s)}return u}async _handleSymlink(t,s,i,r){if(this.fsw.closed)return;let n=t.fullPath,o=this.fsw._getWatchedDir(s);if(!this.fsw.options.followSymlinks){this.fsw._incrReadyCount();let a;try{a=await Se(i)}catch{return this.fsw._emitReady(),!0}return this.fsw.closed?void 0:(o.has(r)?this.fsw._symlinkPaths.get(n)!==a&&(this.fsw._symlinkPaths.set(n,a),this.fsw._emit(R.CHANGE,i,t.stats)):(o.add(r),this.fsw._symlinkPaths.set(n,a),this.fsw._emit(R.ADD,i,t.stats)),this.fsw._emitReady(),!0)}if(this.fsw._symlinkPaths.has(n))return!0;this.fsw._symlinkPaths.set(n,!0)}_handleRead(t,s,i,r,n,o,a){if(t=D.join(t,""),a=this.fsw._throttle("readdir",t,1e3),!a)return;let c=this.fsw._getWatchedDir(i.path),u=new Set,l=this.fsw._readdirp(t,{fileFilter:d=>i.filterPath(d),directoryFilter:d=>i.filterDir(d)});if(l)return l.on(Ss,async d=>{if(this.fsw.closed){l=void 0;return}let f=d.path,_=D.join(t,f);if(u.add(f),!(d.stats.isSymbolicLink()&&await this._handleSymlink(d,t,_,f))){if(this.fsw.closed){l=void 0;return}(f===r||!r&&!c.has(f))&&(this.fsw._incrReadyCount(),_=D.join(n,D.relative(n,_)),this._addToNodeFs(_,s,i,o+1))}}).on(R.ERROR,this._boundHandleError),new Promise((d,f)=>{if(!l)return f();l.once(Oe,()=>{if(this.fsw.closed){l=void 0;return}let _=a?a.clear():!1;d(void 0),c.getChildren().filter(v=>v!==t&&!u.has(v)).forEach(v=>{this.fsw._remove(t,v)}),l=void 0,_&&this._handleRead(t,!1,i,r,n,o,a)})})}async _handleDir(t,s,i,r,n,o,a){let c=this.fsw._getWatchedDir(D.dirname(t)),u=c.has(D.basename(t));!(i&&this.fsw.options.ignoreInitial)&&!n&&!u&&this.fsw._emit(R.ADD_DIR,t,s),c.add(D.basename(t)),this.fsw._getWatchedDir(t);let l,d,f=this.fsw.options.depth;if((f==null||r<=f)&&!this.fsw._symlinkPaths.has(a)){if(!n&&(await this._handleRead(t,i,o,n,t,r,l),this.fsw.closed))return;d=this._watchWithNodeFs(t,(_,v)=>{v&&v.mtimeMs===0||this._handleRead(_,!1,o,n,t,r,l)})}return d}async _addToNodeFs(t,s,i,r,n){let o=this.fsw._emitReady;if(this.fsw._isIgnored(t)||this.fsw.closed)return o(),!1;let a=this.fsw._getWatchHelpers(t);i&&(a.filterPath=c=>i.filterPath(c),a.filterDir=c=>i.filterDir(c));try{let c=await js[a.statMethod](a.watchPath);if(this.fsw.closed)return;if(this.fsw._isIgnored(a.watchPath,c))return o(),!1;let u=this.fsw.options.followSymlinks,l;if(c.isDirectory()){let d=D.resolve(t),f=u?await Se(t):t;if(this.fsw.closed||(l=await this._handleDir(a.watchPath,c,s,r,n,a,f),this.fsw.closed))return;d!==f&&f!==void 0&&this.fsw._symlinkPaths.set(d,f)}else if(c.isSymbolicLink()){let d=u?await Se(t):t;if(this.fsw.closed)return;let f=D.dirname(a.watchPath);if(this.fsw._getWatchedDir(f).add(a.watchPath),this.fsw._emit(R.ADD,a.watchPath,c),l=await this._handleDir(f,c,s,r,t,a,d),this.fsw.closed)return;d!==void 0&&this.fsw._symlinkPaths.set(D.resolve(t),d)}else l=this._handleFile(a.watchPath,c,s);return o(),l&&this.fsw._addPathCloser(t,l),!1}catch(c){if(this.fsw._handleError(c))return o(),t}}};var je="/",Bs="//",Et=".",Js="..",Qs="string",Xs=/\\/g,gt=/\/\//,Zs=/\..*\.(sw[px])$|~$|\.subl.*\.tmp/,er=/^\.[/\\]/;function he(e){return Array.isArray(e)?e:[e]}var We=e=>typeof e=="object"&&e!==null&&!(e instanceof RegExp);function tr(e){return typeof e=="function"?e:typeof e=="string"?t=>e===t:e instanceof RegExp?t=>e.test(t):typeof e=="object"&&e!==null?t=>{if(e.path===t)return!0;if(e.recursive){let s=g.relative(e.path,t);return s?!s.startsWith("..")&&!g.isAbsolute(s):!1}return!1}:()=>!1}function sr(e){if(typeof e!="string")throw new Error("string expected");e=g.normalize(e),e=e.replace(/\\/g,"/");let t=!1;e.startsWith("//")&&(t=!0);let s=/\/\//;for(;e.match(s);)e=e.replace(s,"/");return t&&(e="/"+e),e}function _t(e,t,s){let i=sr(t);for(let r=0;r<e.length;r++){let n=e[r];if(n(i,s))return!0}return!1}function rr(e,t){if(e==null)throw new TypeError("anymatch: specify first argument");let i=he(e).map(r=>tr(r));return t==null?(r,n)=>_t(i,r,n):_t(i,t)}var wt=e=>{let t=he(e).flat();if(!t.every(s=>typeof s===Qs))throw new TypeError(`Non-string provided as watch path: ${t}`);return t.map(vt)},yt=e=>{let t=e.replace(Xs,je),s=!1;for(t.startsWith(Bs)&&(s=!0);t.match(gt);)t=t.replace(gt,je);return s&&(t=je+t),t},vt=e=>yt(g.normalize(yt(e))),bt=(e="")=>t=>typeof t=="string"?vt(g.isAbsolute(t)?t:g.join(e,t)):t,ir=(e,t)=>g.isAbsolute(e)?e:g.join(t,e),nr=Object.freeze(new Set),Me=class{constructor(t,s){this.path=t,this._removeWatcher=s,this.items=new Set}add(t){let{items:s}=this;s&&t!==Et&&t!==Js&&s.add(t)}async remove(t){let{items:s}=this;if(!s||(s.delete(t),s.size>0))return;let i=this.path;try{await Gs(i)}catch{this._removeWatcher&&this._removeWatcher(g.dirname(i),g.basename(i))}}has(t){let{items:s}=this;if(s)return s.has(t)}getChildren(){let{items:t}=this;return t?[...t.values()]:[]}dispose(){this.items.clear(),this.path="",this._removeWatcher=fe,this.items=nr,Object.freeze(this)}},or="stat",ar="lstat",Ve=class{constructor(t,s,i){this.fsw=i;let r=t;this.path=t=t.replace(er,""),this.watchPath=r,this.fullWatchPath=g.resolve(r),this.dirParts=[],this.dirParts.forEach(n=>{n.length>1&&n.pop()}),this.followSymlinks=s,this.statMethod=s?or:ar}entryPath(t){return g.join(this.watchPath,g.relative(this.watchPath,t.fullPath))}filterPath(t){let{stats:s}=t;if(s&&s.isSymbolicLink())return this.filterDir(t);let i=this.entryPath(t);return this.fsw._isntIgnored(i,s)&&this.fsw._hasReadPermissions(s)}filterDir(t){return this.fsw._isntIgnored(this.entryPath(t),t.stats)}},me=class extends qs{constructor(t={}){super(),this.closed=!1,this._closers=new Map,this._ignoredPaths=new Set,this._throttled=new Map,this._streams=new Set,this._symlinkPaths=new Map,this._watched=new Map,this._pendingWrites=new Map,this._pendingUnlinks=new Map,this._readyCount=0,this._readyEmitted=!1;let s=t.awaitWriteFinish,i={stabilityThreshold:2e3,pollInterval:100},r={persistent:!0,ignoreInitial:!1,ignorePermissionErrors:!1,interval:100,binaryInterval:300,followSymlinks:!0,usePolling:!1,atomic:!0,...t,ignored:t.ignored?he(t.ignored):he([]),awaitWriteFinish:s===!0?i:typeof s=="object"?{...i,...s}:!1};ht&&(r.usePolling=!0),r.atomic===void 0&&(r.atomic=!r.usePolling);let n=process.env.CHOKIDAR_USEPOLLING;if(n!==void 0){let c=n.toLowerCase();c==="false"||c==="0"?r.usePolling=!1:c==="true"||c==="1"?r.usePolling=!0:r.usePolling=!!c}let o=process.env.CHOKIDAR_INTERVAL;o&&(r.interval=Number.parseInt(o,10));let a=0;this._emitReady=()=>{a++,a>=this._readyCount&&(this._emitReady=fe,this._readyEmitted=!0,process.nextTick(()=>this.emit(x.READY)))},this._emitRaw=(...c)=>this.emit(x.RAW,...c),this._boundRemove=this._remove.bind(this),this.options=r,this._nodeFsHandler=new ue(this),Object.freeze(r)}_addIgnoredPath(t){if(We(t)){for(let s of this._ignoredPaths)if(We(s)&&s.path===t.path&&s.recursive===t.recursive)return}this._ignoredPaths.add(t)}_removeIgnoredPath(t){if(this._ignoredPaths.delete(t),typeof t=="string")for(let s of this._ignoredPaths)We(s)&&s.path===t&&this._ignoredPaths.delete(s)}add(t,s,i){let{cwd:r}=this.options;this.closed=!1,this._closePromise=void 0;let n=wt(t);return r&&(n=n.map(o=>ir(o,r))),n.forEach(o=>{this._removeIgnoredPath(o)}),this._userIgnored=void 0,this._readyCount||(this._readyCount=0),this._readyCount+=n.length,Promise.all(n.map(async o=>{let a=await this._nodeFsHandler._addToNodeFs(o,!i,void 0,0,s);return a&&this._emitReady(),a})).then(o=>{this.closed||o.forEach(a=>{a&&this.add(g.dirname(a),g.basename(s||a))})}),this}unwatch(t){if(this.closed)return this;let s=wt(t),{cwd:i}=this.options;return s.forEach(r=>{!g.isAbsolute(r)&&!this._closers.has(r)&&(i&&(r=g.join(i,r)),r=g.resolve(r)),this._closePath(r),this._addIgnoredPath(r),this._watched.has(r)&&this._addIgnoredPath({path:r,recursive:!0}),this._userIgnored=void 0}),this}close(){if(this._closePromise)return this._closePromise;this.closed=!0,this.removeAllListeners();let t=[];return this._closers.forEach(s=>s.forEach(i=>{let r=i();r instanceof Promise&&t.push(r)})),this._streams.forEach(s=>s.destroy()),this._userIgnored=void 0,this._readyCount=0,this._readyEmitted=!1,this._watched.forEach(s=>s.dispose()),this._closers.clear(),this._watched.clear(),this._streams.clear(),this._symlinkPaths.clear(),this._throttled.clear(),this._closePromise=t.length?Promise.all(t).then(()=>{}):Promise.resolve(),this._closePromise}getWatched(){let t={};return this._watched.forEach((s,i)=>{let n=(this.options.cwd?g.relative(this.options.cwd,i):i)||Et;t[n]=s.getChildren().sort()}),t}emitWithAll(t,s){this.emit(t,...s),t!==x.ERROR&&this.emit(x.ALL,t,...s)}async _emit(t,s,i){if(this.closed)return;let r=this.options;$e&&(s=g.normalize(s)),r.cwd&&(s=g.relative(r.cwd,s));let n=[s];i!=null&&n.push(i);let o=r.awaitWriteFinish,a;if(o&&(a=this._pendingWrites.get(s)))return a.lastChange=new Date,this;if(r.atomic){if(t===x.UNLINK)return this._pendingUnlinks.set(s,[t,...n]),setTimeout(()=>{this._pendingUnlinks.forEach((c,u)=>{this.emit(...c),this.emit(x.ALL,...c),this._pendingUnlinks.delete(u)})},typeof r.atomic=="number"?r.atomic:100),this;t===x.ADD&&this._pendingUnlinks.has(s)&&(t=x.CHANGE,this._pendingUnlinks.delete(s))}if(o&&(t===x.ADD||t===x.CHANGE)&&this._readyEmitted){let c=(u,l)=>{u?(t=x.ERROR,n[0]=u,this.emitWithAll(t,n)):l&&(n.length>1?n[1]=l:n.push(l),this.emitWithAll(t,n))};return this._awaitWriteFinish(s,o.stabilityThreshold,t,c),this}if(t===x.CHANGE&&!this._throttle(x.CHANGE,s,50))return this;if(r.alwaysStat&&i===void 0&&(t===x.ADD||t===x.ADD_DIR||t===x.CHANGE)){let c=r.cwd?g.join(r.cwd,s):s,u;try{u=await Hs(c)}catch{}if(!u||this.closed)return;n.push(u)}return this.emitWithAll(t,n),this}_handleError(t){let s=t&&t.code;return t&&s!=="ENOENT"&&s!=="ENOTDIR"&&(!this.options.ignorePermissionErrors||s!=="EPERM"&&s!=="EACCES")&&this.emit(x.ERROR,t),t||this.closed}_throttle(t,s,i){this._throttled.has(t)||this._throttled.set(t,new Map);let r=this._throttled.get(t);if(!r)throw new Error("invalid throttle");let n=r.get(s);if(n)return n.count++,!1;let o,a=()=>{let u=r.get(s),l=u?u.count:0;return r.delete(s),clearTimeout(o),u&&clearTimeout(u.timeoutObject),l};o=setTimeout(a,i);let c={timeoutObject:o,clear:a,count:0};return r.set(s,c),c}_incrReadyCount(){return this._readyCount++}_awaitWriteFinish(t,s,i,r){let n=this.options.awaitWriteFinish;if(typeof n!="object")return;let o=n.pollInterval,a,c=t;this.options.cwd&&!g.isAbsolute(t)&&(c=g.join(this.options.cwd,t));let u=new Date,l=this._pendingWrites;function d(f){Ks(c,(_,v)=>{if(_||!l.has(t)){_&&_.code!=="ENOENT"&&r(_);return}let F=Number(new Date);f&&v.size!==f.size&&(l.get(t).lastChange=F);let L=l.get(t);F-L.lastChange>=s?(l.delete(t),r(void 0,v)):a=setTimeout(d,o,v)})}l.has(t)||(l.set(t,{lastChange:u,cancelWait:()=>(l.delete(t),clearTimeout(a),i)}),a=setTimeout(d,o))}_isIgnored(t,s){if(this.options.atomic&&Zs.test(t))return!0;if(!this._userIgnored){let{cwd:i}=this.options,n=(this.options.ignored||[]).map(bt(i)),a=[...[...this._ignoredPaths].map(bt(i)),...n];this._userIgnored=rr(a,void 0)}return this._userIgnored(t,s)}_isntIgnored(t,s){return!this._isIgnored(t,s)}_getWatchHelpers(t){return new Ve(t,this.options.followSymlinks,this)}_getWatchedDir(t){let s=g.resolve(t);return this._watched.has(s)||this._watched.set(s,new Me(s,this._boundRemove)),this._watched.get(s)}_hasReadPermissions(t){return this.options.ignorePermissionErrors?!0:!!(Number(t.mode)&256)}_remove(t,s,i){let r=g.join(t,s),n=g.resolve(r);if(i=i??(this._watched.has(r)||this._watched.has(n)),!this._throttle("remove",r,100))return;!i&&this._watched.size===1&&this.add(t,s,!0),this._getWatchedDir(r).getChildren().forEach(f=>this._remove(r,f));let c=this._getWatchedDir(t),u=c.has(s);c.remove(s),this._symlinkPaths.has(n)&&this._symlinkPaths.delete(n);let l=r;if(this.options.cwd&&(l=g.relative(this.options.cwd,r)),this.options.awaitWriteFinish&&this._pendingWrites.has(l)&&this._pendingWrites.get(l).cancelWait()===x.ADD)return;this._watched.delete(r),this._watched.delete(n);let d=i?x.UNLINK_DIR:x.UNLINK;u&&!this._isIgnored(r)&&this._emit(d,r),this._closePath(r)}_closePath(t){this._closeFile(t);let s=g.dirname(t);this._getWatchedDir(s).remove(g.basename(t))}_closeFile(t){let s=this._closers.get(t);s&&(s.forEach(i=>i()),this._closers.delete(t))}_addPathCloser(t,s){if(!s)return;let i=this._closers.get(t);i||(i=[],this._closers.set(t,i)),i.push(s)}_readdirp(t,s){if(this.closed)return;let i={type:x.ALL,alwaysStat:!0,lstat:!0,...s,depth:0},r=lt(t,i);return this._streams.add(r),r.once(pt,()=>{r=void 0}),r.once(Oe,()=>{r&&(this._streams.delete(r),r=void 0)}),r}};function cr(e,t={}){let s=new me(t);return s.add(e),s}var Dt={watch:cr,FSWatcher:me};import{existsSync as A,mkdirSync as br,readdirSync as Er,readFileSync as vr,unlinkSync as Dr}from"fs";import{basename as Tt,join as y,relative as Rt}from"path";import{copyFileSync as lr,existsSync as $,mkdirSync as dr,readdirSync as ze,readFileSync as ur,writeFileSync as fr}from"fs";import{basename as xt,dirname as Nt,extname as pr,join as k,normalize as hr,relative as H,resolve as Pt,sep as mr}from"path";var gr=/import\s+(?:(?:{[^}]*})|(?:[^{}\s,]*))?\s*(?:,\s*(?:{[^}]*}))?\s*from\s+['"]([./]+[^'"]*)['"]/g,_r=/import\s+(?:(?:{[^}]*})|(?:[^{}\s,]*))?\s*(?:,\s*(?:{[^}]*}))?\s*from\s+['"](@\/[^'"]*)['"]/g,wr=/import\s*\(\s*['"](@\/[^'"]*)['"]\s*\)/g,ge=/\.(js|jsx|ts|tsx)$/,Ye=/^page\.(tsx|ts|jsx|js)$/i,Q=(e,t)=>{let i=H(t,e).split(mr);i.pop();let r=i.filter(n=>!n.startsWith("("));return hr(r.join("/"))},_e=e=>{let t=new Map,s=i=>{if($(i))for(let r of ze(i,{withFileTypes:!0})){let n=k(i,r.name);if(r.isDirectory()){s(n);continue}if(Ye.test(r.name)){let o=Q(n,e);t.set(o,n)}}};return s(e),t},yr=(e,t)=>{let s=e.replace(gr,(i,r)=>{if(r.startsWith(".")){let o=r.replace(ge,"").replace(/^(?:\.\.\/)+/,"");return i.replace(r,`${t}/${o}`)}return i});return s=s.replace(_r,(i,r)=>{let n=r.replace(/^@\//,"").replace(ge,"");return i.replace(r,`${t}/${n}`)}),s=s.replace(wr,(i,r)=>{let n=r.replace(/^@\//,"").replace(ge,"");return i.replace(r,`${t}/${n}`)}),s=s.replace(/dynamic\s*\(\s*\(\s*=>\s*import\s*\(\s*['"](@\/[^'"]*)['"]\s*\)\s*\)\s*\)/g,(i,r)=>{let n=r.replace(/^@\//,"").replace(ge,"");return i.replace(r,`${t}/${n}`)}),s};function we(e){let t=e;for(;t!==Pt(t,"..");){let i=k(t,"turbo.json");if($(i))return t;t=Pt(t,"..")}let s=k(e,"package.json");if($(s))return e;throw new Error("\u274C Could not locate project root")}function ye(e){let t=k(e,"src","app","[locale]");if($(t))return t;let i=(n=>{let o=[];if(!$(n))return o;let a=(c,u=0)=>{if(!(u>4))try{let l=ze(c,{withFileTypes:!0});for(let d of l){if(!d.isDirectory())continue;let f=k(c,d.name);if(d.name==="[locale]"&&Nt(f).endsWith(k("src","app"))){o.push(f);continue}a(f,u+1)}}catch{}};return a(n),o})(e);return i.length>0?i[0]:k(e,"apps","docs","src","app","[locale]")}var X=e=>{let t=[];if(!$(e))return t;let s=ze(e,{withFileTypes:!0});for(let i of s){let r=k(e,i.name);i.isDirectory()?t.push(...X(r)):t.push(r)}return t},Z=e=>$(e)?X(e).length===0:!0,Ue=(e,t,s,i,r,n,o=!0)=>{let a=xt(e);if(Ye.test(a)){let c=Q(t,r),u=i.get(c);if(u&&u!==t){o&&console.log(`\x1B[31mSkipped duplicate page:\x1B[0m ${H(n,t)} (collides with ${H(n,u)})`);return}}try{let c=Nt(t);$(c)||dr(c,{recursive:!0});let u=pr(e);if(s&&[".js",".jsx",".ts",".tsx"].includes(u)){let l=ur(e,"utf-8"),d=yr(l,s);fr(t,d)}else lr(e,t);if(o){let l=e.indexOf(k("src","app")),d=l!==-1?e.substring(l):e.startsWith(n)?H(n,e):e,f=t.startsWith(n)?H(n,t):t;console.log(`\x1B[32mCopied:\x1B[0m ${d} \u2192 ${f}`)}if(Ye.test(xt(t))){let l=Q(t,r);i.set(l,t)}}catch(c){console.error(`\x1B[31mError copying file:\x1B[0m ${e}`,c)}},It=(e,t,s,i,r,n,o=!0)=>{if(!$(e)||Z(e))return;let a=X(e);for(let c of a){let u=H(e,c),l=k(t,u);Ue(c,l,s,i,r,n,o)}};var At=({initMessage:e})=>{let t=process.cwd(),s=we(t),i=ye(s),r=_e(i),n=Tt(t);try{let p=y(t,"package.json");A(p)&&(n=JSON.parse(vr(p,"utf-8")).name??"")}catch(p){console.error("\x1B[31mError reading package.json:\x1B[0m",p);return}let o=n.replace(/\//g,"-").replace(/@/g,""),a=p=>{let h=A(y(p,"src","vitnode.config.ts"));return A(y(p,"src","vitnode.api.config.ts"))&&!h?"api":h?"web":null},c=y(s,"apps"),u=A(c),l=[];if(u){let p=A(c)?Er(c,{withFileTypes:!0}).filter(h=>h.isDirectory()).map(h=>h.name):[];for(let h of p){let m=y(s,"apps",h),E=a(m);if(E==="web"){let P=y(m,"src","app","[locale]","(main)",y("(plugins)",`(${o})`)),z=y(m,"src","app","[locale]","admin","(auth)",y("(plugins)",`(${o})`)),W=y(m,"src","locales",n);l.push({sourceDir:y(t,"src","app_admin"),destinationDir:z},{sourceDir:y(t,"src","app"),destinationDir:P},{sourceDir:y(t,"src","locales"),destinationDir:W})}else if(E==="api"){let P=y(m,"src","locales",n);l.push({sourceDir:y(t,"src","locales"),destinationDir:P})}}}else{let p=process.cwd(),h=a(p);if(h==="web"){let m=y(p,"src","app","[locale]","(main)",y("(plugins)",`(${o})`)),E=y(p,"src","app","[locale]","admin","(auth)",y("(plugins)",`(${o})`)),P=y(p,"src","locales",n);l.push({sourceDir:y(t,"src","app_admin"),destinationDir:E},{sourceDir:y(t,"src","app"),destinationDir:m},{sourceDir:y(t,"src","locales"),destinationDir:P})}else if(h==="api"){let m=y(p,"src","locales",n);l.push({sourceDir:y(t,"src","locales"),destinationDir:m})}}for(let{sourceDir:p,destinationDir:h}of l)A(p)&&!Z(p)&&!A(h)&&br(h,{recursive:!0});let d=(p,h)=>{Ue(p,h,n,r,i,s)},f=p=>{try{if(A(p)&&(Dr(p),console.log(`\x1B[33mRemoved:\x1B[0m ${p}`),/^page\.(tsx|ts|jsx|js)$/i.test(Tt(p)))){let h=Q(p,i);r.get(h)===p&&r.delete(h)}}catch(h){console.error(`\x1B[31mError removing file:\x1B[0m ${p}`,h)}},_=(p,h)=>{if(!A(h)||h.includes(y("src","locales")))return;let E=X(h);for(let P of E){let z=Rt(h,P),W=y(p,z);A(W)||f(P)}};for(let{sourceDir:p,destinationDir:h}of l)_(p,h);console.log(`${e} \x1B[34mWatching for changes in plugins...\x1B[0m`);let v=l.map(p=>p.sourceDir).filter(p=>A(p)),F=Dt.watch(v,{ignoreInitial:!1,persistent:!0}),L=p=>{let h=l.filter(({sourceDir:m})=>{let E=p.replace(/\\/g,"/"),P=m.replace(/\\/g,"/");return E===P||E.startsWith(P+"/")});if(h.length===0)throw new Error(`No matching source directory for: ${p}`);return h.map(m=>{let E=Rt(m.sourceDir,p);return y(m.destinationDir,E)})};F.on("add",p=>{L(p).forEach(m=>{d(p,m)})}).on("change",p=>{L(p).forEach(m=>{d(p,m)})}).on("unlink",p=>{L(p).forEach(m=>{f(m)})}).on("error",p=>{console.error("\x1B[31mWatcher error:\x1B[0m",p)})};import{count as Wt}from"drizzle-orm";import{relations as Lt}from"drizzle-orm";import{index as Ne,pgTable as Ot}from"drizzle-orm/pg-core";import{pgTable as xr}from"drizzle-orm/pg-core";var I=xr("core_roles",e=>({id:e.serial().primaryKey(),createdAt:e.timestamp().notNull().defaultNow(),updatedAt:e.timestamp().notNull().$onUpdate(()=>new Date),protected:e.boolean().notNull().default(!1),default:e.boolean().notNull().default(!1),root:e.boolean().notNull().default(!1),guest:e.boolean().notNull().default(!1),color:e.varchar({length:19})})).enableRLS();import{relations as Ct}from"drizzle-orm";import{index as St,pgTable as Ft}from"drizzle-orm/pg-core";import{relations as xe}from"drizzle-orm";import{index as Ee,pgTable as Pe}from"drizzle-orm/pg-core";import{relations as Pr}from"drizzle-orm";import{index as Ke,pgTable as kt}from"drizzle-orm/pg-core";var C=kt("core_languages",e=>({id:e.serial().primaryKey(),code:e.varchar({length:32}).notNull().unique(),name:e.varchar({length:255}).notNull(),timezone:e.varchar({length:255}).notNull().default("UTC"),protected:e.boolean().notNull().default(!1),default:e.boolean().notNull().default(!1),enabled:e.boolean().notNull().default(!0),createdAt:e.timestamp().notNull().defaultNow(),updatedAt:e.timestamp().notNull().$onUpdate(()=>new Date),time24:e.boolean().notNull().default(!1)}),e=>[Ke("core_languages_code_idx").on(e.code),Ke("core_languages_name_idx").on(e.name)]).enableRLS(),be=kt("core_languages_words",e=>({id:e.serial().primaryKey(),languageCode:e.varchar().notNull().references(()=>C.code,{onDelete:"cascade"}),pluginCode:e.varchar({length:50}).notNull(),itemId:e.integer().notNull(),value:e.text().notNull(),tableName:e.varchar({length:255}).notNull(),variable:e.varchar({length:255}).notNull()}),e=>[Ke("core_languages_words_lang_code_idx").on(e.languageCode)]).enableRLS(),ci=Pr(be,({one:e})=>({language:e(C,{fields:[be.languageCode],references:[C.code]})}));var w=Pe("core_users",e=>({id:e.serial().primaryKey(),nameCode:e.varchar({length:255}).notNull().unique(),name:e.varchar({length:255}).notNull().unique(),email:e.varchar({length:255}).notNull().unique(),password:e.varchar(),createdAt:e.timestamp().notNull().defaultNow(),newsletter:e.boolean().notNull().default(!1),avatarColor:e.varchar({length:6}).notNull(),emailVerified:e.boolean().notNull().default(!1),roleId:e.integer().references(()=>I.id).notNull(),birthday:e.timestamp(),ipAddress:e.varchar({length:40}).notNull(),language:e.varchar({length:32}).notNull().default("en").references(()=>C.code,{onDelete:"set default"})}),e=>[Ee("core_users_name_code_idx").on(e.nameCode),Ee("core_users_name_idx").on(e.name),Ee("core_users_email_idx").on(e.email)]).enableRLS(),hi=xe(w,({one:e,many:t})=>({group:e(I,{fields:[w.roleId],references:[I.id]}),language:e(C,{fields:[w.language],references:[C.code]}),confirm_email:e(ve,{fields:[w.id],references:[ve.userId]}),sso:t(He),forgot_password:e(De,{fields:[w.id],references:[De.userId]})})),He=Pe("core_users_sso",e=>({userId:e.integer().references(()=>w.id,{onDelete:"cascade"}).notNull(),providerId:e.varchar({length:255}).notNull(),providerAccountId:e.varchar({length:255}).notNull(),createdAt:e.timestamp().notNull().defaultNow(),updatedAt:e.timestamp().notNull().$onUpdate(()=>new Date)}),e=>[Ee("core_users_sso_user_id_idx").on(e.userId)]).enableRLS(),mi=xe(He,({one:e})=>({user:e(w,{fields:[He.userId],references:[w.id]})})),ve=Pe("core_users_confirm_emails",e=>({id:e.serial().primaryKey(),userId:e.integer().references(()=>w.id,{onDelete:"cascade"}).notNull(),token:e.varchar({length:100}).notNull().unique(),createdAt:e.timestamp().notNull().defaultNow(),expires:e.timestamp().notNull()})).enableRLS(),gi=xe(ve,({one:e})=>({user:e(w,{fields:[ve.userId],references:[w.id]})})),De=Pe("core_users_forgot_password",e=>({id:e.serial().primaryKey(),userId:e.integer().references(()=>w.id,{onDelete:"cascade"}).notNull().unique(),token:e.varchar({length:100}).notNull().unique(),ip_address:e.varchar({length:40}).notNull(),createdAt:e.timestamp().notNull().defaultNow(),expiresAt:e.timestamp().notNull()})).enableRLS(),_i=xe(De,({one:e})=>({user:e(w,{fields:[De.userId],references:[w.id]})}));var ee=Ft("core_sessions",e=>({id:e.serial().primaryKey(),token:e.varchar({length:255}).notNull().unique(),userId:e.integer().notNull().references(()=>w.id,{onDelete:"cascade"}),createdAt:e.timestamp().notNull().defaultNow(),expiresAt:e.timestamp().notNull(),deviceId:e.integer().references(()=>j.id,{onDelete:"cascade"}).notNull()}),e=>[St("core_sessions_user_id_idx").on(e.userId)]).enableRLS(),vi=Ct(ee,({one:e})=>({user:e(w,{fields:[ee.userId],references:[w.id]}),device:e(j,{fields:[ee.deviceId],references:[j.id]})})),j=Ft("core_sessions_known_devices",e=>({id:e.serial().primaryKey(),publicId:e.varchar({length:32}).notNull().unique(),ipAddress:e.varchar({length:40}).notNull(),userAgent:e.text().notNull(),lastSeen:e.timestamp().notNull().defaultNow()}),e=>[St("core_sessions_known_devices_ip_address_idx").on(e.ipAddress)]).enableRLS(),Di=Ct(j,({one:e})=>({session:e(ee,{fields:[j.id],references:[ee.deviceId]})}));var te=Ot("core_admin_permissions",e=>({id:e.serial().primaryKey(),roleId:e.integer().references(()=>I.id,{onDelete:"cascade"}),userId:e.integer().references(()=>w.id,{onDelete:"cascade"}),createdAt:e.timestamp().notNull().defaultNow(),updatedAt:e.timestamp().notNull().$onUpdate(()=>new Date),protected:e.boolean().notNull().default(!1)}),e=>[Ne("core_admin_permissions_role_id_idx").on(e.roleId),Ne("core_admin_permissions_user_id_idx").on(e.userId)]).enableRLS(),Ai=Lt(te,({one:e})=>({group:e(I,{fields:[te.roleId],references:[I.id]}),user:e(w,{fields:[te.userId],references:[w.id]})})),Ge=Ot("core_admin_sessions",e=>({id:e.serial().primaryKey(),token:e.varchar({length:255}).notNull().unique(),userId:e.integer().notNull().references(()=>w.id,{onDelete:"cascade"}),createdAt:e.timestamp().notNull().defaultNow(),lastSeen:e.timestamp().notNull().defaultNow(),expiresAt:e.timestamp().notNull(),deviceId:e.integer().references(()=>j.id,{onDelete:"cascade"}).notNull()}),e=>[Ne("core_admin_sessions_token_idx").on(e.token),Ne("core_admin_sessions_user_id_idx").on(e.userId)]).enableRLS(),ki=Lt(Ge,({one:e})=>({user:e(w,{fields:[Ge.userId],references:[w.id]}),device:e(j,{fields:[Ge.deviceId],references:[j.id]})}));import{relations as Nr}from"drizzle-orm";import{index as $t,pgTable as Ir}from"drizzle-orm/pg-core";var se=Ir("core_moderators_permissions",e=>({id:e.serial().primaryKey(),roleId:e.integer().references(()=>I.id,{onDelete:"cascade"}),userId:e.integer().references(()=>w.id,{onDelete:"cascade"}),createdAt:e.timestamp().notNull().defaultNow(),updatedAt:e.timestamp().notNull().$onUpdate(()=>new Date),protected:e.boolean().notNull().default(!1)}),e=>[$t("core_moderators_permissions_role_id_idx").on(e.roleId),$t("core_moderators_permissions_user_id_idx").on(e.userId)]).enableRLS(),$i=Nr(se,({one:e})=>({group:e(I,{fields:[se.roleId],references:[I.id]}),user:e(w,{fields:[se.userId],references:[w.id]})}));import{join as Tr}from"path";import{pathToFileURL as Rr}from"url";var V=async({type:e="config"})=>{let t=Tr(process.cwd(),"src",`vitnode.${e}.ts`);try{let i=await import(Rr(t).href);return e==="config"?i.vitNodeConfig:i.vitNodeApiConfig}catch(s){console.error("Failed to load config:",s),process.exit(1)}};import{existsSync as S,readdirSync as Ar}from"fs";import{readFile as kr}from"fs/promises";import{join as b,relative as jt}from"path";var G=async e=>{let t=process.cwd(),s=S(b(t,"src","vitnode.config.ts")),i=S(b(t,"src","vitnode.api.config.ts")),r;e==="--api"&&i?r=await V({type:"api.config"}):e==="--web"&&s?r=await V({}):i&&!s?r=await V({type:"api.config"}):s?r=await V({}):r={plugins:[]};let n=[...r.plugins.map(d=>d.pluginId),"@vitnode/core"],o=we(process.cwd()),a=ye(o),c=_e(a),u=process.cwd(),l=d=>{let f=process.cwd(),_=b(f,"node_modules",d);if(S(_))return _;if(o&&o!==f){let v=b(o,"node_modules",d);if(S(v))return v}return null};await Promise.all(n.map(async d=>{let f=l(d);if(!f){console.error(`\x1B[31mPlugin not found:\x1B[0m ${d} in node_modules`);return}let _="";try{let m=b(f,"package.json");S(m)&&(_=JSON.parse(await kr(m,"utf-8")).name??"")}catch(m){console.error(`\x1B[31mError reading package.json for ${d}:\x1B[0m`,m);return}let v=d.replace(/\//g,"-").replace(/@/g,""),F=m=>{let E=S(b(m,"src","vitnode.config.ts"));return S(b(m,"src","vitnode.api.config.ts"))&&!E?"api":E?"web":null},L=b(o,"apps"),p=S(L),h=[];if(p){let m=S(L)?Ar(L,{withFileTypes:!0}).filter(E=>E.isDirectory()).map(E=>E.name):[];for(let E of m){let P=b(o,"apps",E),z=F(P);if(z==="web"){let W=b(P,"src","app","[locale]","(main)",b("(plugins)",`(${v})`)),Ut=b(P,"src","app","[locale]","admin","(auth)",b("(plugins)",`(${v})`)),Kt=b(P,"src","locales",d);h.push({sourceDir:b(f,"src","app_admin"),destinationDir:Ut},{sourceDir:b(f,"src","app"),destinationDir:W},{sourceDir:b(f,"src","locales"),destinationDir:Kt})}else if(z==="api"){let W=b(P,"src","locales",d);h.push({sourceDir:b(f,"src","locales"),destinationDir:W})}}}else{let m=b(u,"src","app","[locale]","(main)",b("(plugins)",`(${v})`)),E=b(u,"src","app","[locale]","admin","(auth)",b("(plugins)",`(${v})`)),P=b(u,"src","locales",d);h.push({sourceDir:b(f,"src","app_admin"),destinationDir:E},{sourceDir:b(f,"src","app"),destinationDir:m},{sourceDir:b(f,"src","locales"),destinationDir:P})}for(let{sourceDir:m,destinationDir:E}of h)S(m)&&!Z(m)&&(console.log(`\x1B[36mCopying ${d}:\x1B[0m ${jt(o,m)} \u2192 ${jt(o,E)}`),It(m,E,_,c,a,o,!1))}))};import{spawn as Cr}from"child_process";var re=async(e,t=[])=>new Promise((s,i)=>{let r=Cr(e,t,{stdio:"inherit",shell:!0,env:process.env});r.on("error",n=>{i(n)}),r.on("close",n=>{n!==0?i(new Error(`Command failed with exit code ${n}`)):s(!0)})});var Ie=async()=>{try{await re("npm",["run","drizzle-kit","up"]),await re("npm",["run","drizzle-kit","generate"])}catch(e){console.error("\x1B[31m%s\x1B[0m",e),process.exit(1)}},Te=async()=>{try{await re("npm",["run","drizzle-kit","migrate"])}catch(e){console.error("\x1B[31m%s\x1B[0m",e),process.exit(1)}},Mt=async()=>{try{await re("npm",["run","drizzle-kit","push"])}catch(e){console.error("\x1B[31m%s\x1B[0m",e),process.exit(1)}},ie=async()=>{let t=(await V({type:"api.config"})).dbProvider,[s]=await t.select({count:Wt()}).from(I).limit(1),[i]=await t.select({count:Wt()}).from(C);if(i.count===0&&await t.insert(C).values([{code:"en",name:"English (USA)",default:!0,protected:!0,timezone:"America/New_York"}]),s.count===0){let r=await t.insert(I).values([{protected:!0,guest:!0},{protected:!0,default:!0},{protected:!0,color:"hsl(122, 80%, 45%)"},{protected:!0,root:!0,color:"hsl(0, 100%, 50%)"}]).returning({id:I.id});await t.insert(be).values([{languageCode:"en",pluginCode:"core",itemId:r[0].id,value:"Guest",tableName:"core_roles",variable:"name"},{languageCode:"en",pluginCode:"core",itemId:r[1].id,value:"Member",tableName:"core_roles",variable:"name"},{languageCode:"en",pluginCode:"core",itemId:r[2].id,value:"Moderator",tableName:"core_roles",variable:"name"},{languageCode:"en",pluginCode:"core",itemId:r[3].id,value:"Administrator",tableName:"core_roles",variable:"name"}]),await Promise.all([await t.insert(se).values({roleId:r[2].id,protected:!0}),await t.insert(te).values({roleId:r[3].id,protected:!0})])}},Vt=async({initMessage:e,flag:t})=>{let s=[];t==="--web"?s.push({label:"Prepare plugins files...",action:async()=>await G(t)}):t==="--api"?s.push({label:"Prepare plugins files...",action:async()=>await G(t)},{label:"Generate migrations...",action:Ie},{label:"Run migrations...",action:Te},{label:"Insert initial data...",action:ie}):s.push({label:"Prepare plugins files...",action:async()=>await G(t)},{label:"Generate migrations...",action:Ie},{label:"Run migrations...",action:Te},{label:"Insert initial data...",action:ie});for(let i=0;i<s.length;i++){let r=s[i],n=`[${i+1}/${s.length}]`;r.label==="Insert initial data..."?console.log(`
|
|
8
|
+
`),n=n.replace(/\\r/g,"\r")),t[r]=n}return t}function cs(e){e=e||{};let t=tt(e);e.path=t;let s=P.configDotenv(e);if(!s.parsed){let o=new Error(`MISSING_DATA: Cannot parse ${t} for an unknown reason`);throw o.code="MISSING_DATA",o}let i=et(e).split(","),r=i.length,n;for(let o=0;o<r;o++)try{let a=i[o].trim(),c=ds(s,a);n=P.decrypt(c.ciphertext,c.key);break}catch(a){if(o+1>=r)throw a}return P.parse(n)}function ls(e){console.error(`[dotenv@${Ae}][WARN] ${e}`)}function q(e){console.log(`[dotenv@${Ae}][DEBUG] ${e}`)}function Ze(e){console.log(`[dotenv@${Ae}] ${e}`)}function et(e){return e&&e.DOTENV_KEY&&e.DOTENV_KEY.length>0?e.DOTENV_KEY:process.env.DOTENV_KEY&&process.env.DOTENV_KEY.length>0?process.env.DOTENV_KEY:""}function ds(e,t){let s;try{s=new URL(t)}catch(a){if(a.code==="ERR_INVALID_URL"){let c=new Error("INVALID_DOTENV_KEY: Wrong format. Must be in valid uri format like dotenv://:key_1234@dotenvx.com/vault/.env.vault?environment=development");throw c.code="INVALID_DOTENV_KEY",c}throw a}let i=s.password;if(!i){let a=new Error("INVALID_DOTENV_KEY: Missing key part");throw a.code="INVALID_DOTENV_KEY",a}let r=s.searchParams.get("environment");if(!r){let a=new Error("INVALID_DOTENV_KEY: Missing environment part");throw a.code="INVALID_DOTENV_KEY",a}let n=`DOTENV_VAULT_${r.toUpperCase()}`,o=e.parsed[n];if(!o){let a=new Error(`NOT_FOUND_DOTENV_ENVIRONMENT: Cannot locate environment ${n} in your .env.vault file.`);throw a.code="NOT_FOUND_DOTENV_ENVIRONMENT",a}return{ciphertext:o,key:i}}function tt(e){let t=null;if(e&&e.path&&e.path.length>0)if(Array.isArray(e.path))for(let s of e.path)Re.existsSync(s)&&(t=s.endsWith(".vault")?s:`${s}.vault`);else t=e.path.endsWith(".vault")?e.path:`${e.path}.vault`;else t=ae.resolve(process.cwd(),".env.vault");return Re.existsSync(t)?t:null}function Xe(e){return e[0]==="~"?ae.join(es.homedir(),e.slice(1)):e}function us(e){let t=U(process.env.DOTENV_CONFIG_DEBUG||e&&e.debug),s=U(process.env.DOTENV_CONFIG_QUIET||e&&e.quiet);(t||!s)&&Ze("Loading env from encrypted .env.vault");let i=P._parseVault(e),r=process.env;return e&&e.processEnv!=null&&(r=e.processEnv),P.populate(r,i,e),{parsed:i}}function fs(e){let t=ae.resolve(process.cwd(),".env"),s="utf8",i=process.env;e&&e.processEnv!=null&&(i=e.processEnv);let r=U(i.DOTENV_CONFIG_DEBUG||e&&e.debug),n=U(i.DOTENV_CONFIG_QUIET||e&&e.quiet);e&&e.encoding?s=e.encoding:r&&q("No encoding is specified. UTF-8 is used by default");let o=[t];if(e&&e.path)if(!Array.isArray(e.path))o=[Xe(e.path)];else{o=[];for(let l of e.path)o.push(Xe(l))}let a,c={};for(let l of o)try{let d=P.parse(Re.readFileSync(l,{encoding:s}));P.populate(c,d,e)}catch(d){r&&q(`Failed to load ${l} ${d.message}`),a=d}let u=P.populate(i,c,e);if(r=U(i.DOTENV_CONFIG_DEBUG||r),n=U(i.DOTENV_CONFIG_QUIET||n),r||!n){let l=Object.keys(u).length,d=[];for(let f of o)try{let _=ae.relative(process.cwd(),f);d.push(_)}catch(_){r&&q(`Failed to load ${f} ${_.message}`),a=_}Ze(`injecting env (${l}) from ${d.join(",")} ${ns(`-- tip: ${rs()}`)}`)}return a?{parsed:c,error:a}:{parsed:c}}function ps(e){if(et(e).length===0)return P.configDotenv(e);let t=tt(e);return t?P._configVault(e):(ls(`You set DOTENV_KEY but you are missing a .env.vault file at ${t}. Did you forget to build it?`),P.configDotenv(e))}function hs(e,t){let s=Buffer.from(t.slice(-64),"hex"),i=Buffer.from(e,"base64"),r=i.subarray(0,12),n=i.subarray(-16);i=i.subarray(12,-16);try{let o=ts.createDecipheriv("aes-256-gcm",s,r);return o.setAuthTag(n),`${o.update(i)}${o.final()}`}catch(o){let a=o instanceof RangeError,c=o.message==="Invalid key length",u=o.message==="Unsupported state or unable to authenticate data";if(a||c){let l=new Error("INVALID_DOTENV_KEY: It must be 64 characters long (or more)");throw l.code="INVALID_DOTENV_KEY",l}else if(u){let l=new Error("DECRYPTION_FAILED: Please check your DOTENV_KEY");throw l.code="DECRYPTION_FAILED",l}else throw o}}function ms(e,t,s={}){let i=!!(s&&s.debug),r=!!(s&&s.override),n={};if(typeof t!="object"){let o=new Error("OBJECT_REQUIRED: Please check the processEnv argument being passed to populate");throw o.code="OBJECT_REQUIRED",o}for(let o of Object.keys(t))Object.prototype.hasOwnProperty.call(e,o)?(r===!0&&(e[o]=t[o],n[o]=t[o]),i&&q(r===!0?`"${o}" is already defined and WAS overwritten`:`"${o}" is already defined and was NOT overwritten`)):(e[o]=t[o],n[o]=t[o]);return n}var P={configDotenv:fs,_configVault:us,_parseVault:cs,config:ps,decrypt:hs,parse:as,populate:ms};O.exports.configDotenv=P.configDotenv;O.exports._configVault=P._configVault;O.exports._parseVault=P._parseVault;O.exports.config=P.config;O.exports.decrypt=P.decrypt;O.exports.parse=P.parse;O.exports.populate=P.populate;O.exports=P});var zt=Xt(st(),1);import{stat as Ks}from"fs";import{stat as Hs,readdir as Gs}from"fs/promises";import{EventEmitter as qs}from"events";import*as g from"path";import{stat as gs,lstat as rt,readdir as _s,realpath as ws}from"fs/promises";import{Readable as ys}from"stream";import{resolve as it,relative as vs,join as bs,sep as Es}from"path";var T={FILE_TYPE:"files",DIR_TYPE:"directories",FILE_DIR_TYPE:"files_directories",EVERYTHING_TYPE:"all"},ke={root:".",fileFilter:e=>!0,directoryFilter:e=>!0,type:T.FILE_TYPE,lstat:!1,depth:2147483648,alwaysStat:!1,highWaterMark:4096};Object.freeze(ke);var ct="READDIRP_RECURSIVE_ERROR",Ds=new Set(["ENOENT","EPERM","EACCES","ELOOP",ct]),nt=[T.DIR_TYPE,T.EVERYTHING_TYPE,T.FILE_DIR_TYPE,T.FILE_TYPE],xs=new Set([T.DIR_TYPE,T.EVERYTHING_TYPE,T.FILE_DIR_TYPE]),Ns=new Set([T.EVERYTHING_TYPE,T.FILE_DIR_TYPE,T.FILE_TYPE]),Ps=e=>Ds.has(e.code),Is=process.platform==="win32",ot=e=>!0,at=e=>{if(e===void 0)return ot;if(typeof e=="function")return e;if(typeof e=="string"){let t=e.trim();return s=>s.basename===t}if(Array.isArray(e)){let t=e.map(s=>s.trim());return s=>t.some(i=>s.basename===i)}return ot},Ce=class extends ys{constructor(t={}){super({objectMode:!0,autoDestroy:!0,highWaterMark:t.highWaterMark});let s={...ke,...t},{root:i,type:r}=s;this._fileFilter=at(s.fileFilter),this._directoryFilter=at(s.directoryFilter);let n=s.lstat?rt:gs;Is?this._stat=o=>n(o,{bigint:!0}):this._stat=n,this._maxDepth=s.depth??ke.depth,this._wantsDir=r?xs.has(r):!1,this._wantsFile=r?Ns.has(r):!1,this._wantsEverything=r===T.EVERYTHING_TYPE,this._root=it(i),this._isDirent=!s.alwaysStat,this._statsProp=this._isDirent?"dirent":"stats",this._rdOptions={encoding:"utf8",withFileTypes:this._isDirent},this.parents=[this._exploreDir(i,1)],this.reading=!1,this.parent=void 0}async _read(t){if(!this.reading){this.reading=!0;try{for(;!this.destroyed&&t>0;){let s=this.parent,i=s&&s.files;if(i&&i.length>0){let{path:r,depth:n}=s,o=i.splice(0,t).map(c=>this._formatEntry(c,r)),a=await Promise.all(o);for(let c of a){if(!c)continue;if(this.destroyed)return;let u=await this._getEntryType(c);u==="directory"&&this._directoryFilter(c)?(n<=this._maxDepth&&this.parents.push(this._exploreDir(c.fullPath,n+1)),this._wantsDir&&(this.push(c),t--)):(u==="file"||this._includeAsFile(c))&&this._fileFilter(c)&&this._wantsFile&&(this.push(c),t--)}}else{let r=this.parents.pop();if(!r){this.push(null);break}if(this.parent=await r,this.destroyed)return}}}catch(s){this.destroy(s)}finally{this.reading=!1}}}async _exploreDir(t,s){let i;try{i=await _s(t,this._rdOptions)}catch(r){this._onError(r)}return{files:i,depth:s,path:t}}async _formatEntry(t,s){let i,r=this._isDirent?t.name:t;try{let n=it(bs(s,r));i={path:vs(this._root,n),fullPath:n,basename:r},i[this._statsProp]=this._isDirent?t:await this._stat(n)}catch(n){this._onError(n);return}return i}_onError(t){Ps(t)&&!this.destroyed?this.emit("warn",t):this.destroy(t)}async _getEntryType(t){if(!t&&this._statsProp in t)return"";let s=t[this._statsProp];if(s.isFile())return"file";if(s.isDirectory())return"directory";if(s&&s.isSymbolicLink()){let i=t.fullPath;try{let r=await ws(i),n=await rt(r);if(n.isFile())return"file";if(n.isDirectory()){let o=r.length;if(i.startsWith(r)&&i.substr(o,1)===Es){let a=new Error(`Circular symlink detected: "${i}" points to "${r}"`);return a.code=ct,this._onError(a)}return"directory"}}catch(r){return this._onError(r),""}}}_includeAsFile(t){let s=t&&t[this._statsProp];return s&&this._wantsEverything&&!s.isDirectory()}};function lt(e,t={}){let s=t.entryType||t.type;if(s==="both"&&(s=T.FILE_DIR_TYPE),s&&(t.type=s),e){if(typeof e!="string")throw new TypeError("readdirp: root argument must be a string. Usage: readdirp(root, options)");if(s&&!nt.includes(s))throw new Error(`readdirp: Invalid type passed. Use one of ${nt.join(", ")}`)}else throw new Error("readdirp: root argument is required. Usage: readdirp(root, options)");return t.root=e,new Ce(t)}import{watchFile as Ts,unwatchFile as dt,watch as Rs}from"fs";import{open as As,stat as ft,lstat as ks,realpath as Se}from"fs/promises";import*as D from"path";import{type as Cs}from"os";var Ss="data",Oe="end",pt="close",fe=()=>{};var pe=process.platform,$e=pe==="win32",Fs=pe==="darwin",Ls=pe==="linux",Os=pe==="freebsd",ht=Cs()==="OS400",x={ALL:"all",READY:"ready",ADD:"add",CHANGE:"change",ADD_DIR:"addDir",UNLINK:"unlink",UNLINK_DIR:"unlinkDir",RAW:"raw",ERROR:"error"},R=x,$s="watch",js={lstat:ks,stat:ft},M="listeners",ce="errHandlers",K="rawEmitters",Ws=[M,ce,K],Ms=new Set(["3dm","3ds","3g2","3gp","7z","a","aac","adp","afdesign","afphoto","afpub","ai","aif","aiff","alz","ape","apk","appimage","ar","arj","asf","au","avi","bak","baml","bh","bin","bk","bmp","btif","bz2","bzip2","cab","caf","cgm","class","cmx","cpio","cr2","cur","dat","dcm","deb","dex","djvu","dll","dmg","dng","doc","docm","docx","dot","dotm","dra","DS_Store","dsk","dts","dtshd","dvb","dwg","dxf","ecelp4800","ecelp7470","ecelp9600","egg","eol","eot","epub","exe","f4v","fbs","fh","fla","flac","flatpak","fli","flv","fpx","fst","fvt","g3","gh","gif","graffle","gz","gzip","h261","h263","h264","icns","ico","ief","img","ipa","iso","jar","jpeg","jpg","jpgv","jpm","jxr","key","ktx","lha","lib","lvp","lz","lzh","lzma","lzo","m3u","m4a","m4v","mar","mdi","mht","mid","midi","mj2","mka","mkv","mmr","mng","mobi","mov","movie","mp3","mp4","mp4a","mpeg","mpg","mpga","mxu","nef","npx","numbers","nupkg","o","odp","ods","odt","oga","ogg","ogv","otf","ott","pages","pbm","pcx","pdb","pdf","pea","pgm","pic","png","pnm","pot","potm","potx","ppa","ppam","ppm","pps","ppsm","ppsx","ppt","pptm","pptx","psd","pya","pyc","pyo","pyv","qt","rar","ras","raw","resources","rgb","rip","rlc","rmf","rmvb","rpm","rtf","rz","s3m","s7z","scpt","sgi","shar","snap","sil","sketch","slk","smv","snk","so","stl","suo","sub","swf","tar","tbz","tbz2","tga","tgz","thmx","tif","tiff","tlz","ttc","ttf","txz","udf","uvh","uvi","uvm","uvp","uvs","uvu","viv","vob","war","wav","wax","wbmp","wdp","weba","webm","webp","whl","wim","wm","wma","wmv","wmx","woff","woff2","wrm","wvx","xbm","xif","xla","xlam","xls","xlsb","xlsm","xlsx","xlt","xltm","xltx","xm","xmind","xpi","xpm","xwd","xz","z","zip","zipx"]),Vs=e=>Ms.has(D.extname(e).slice(1).toLowerCase()),Le=(e,t)=>{e instanceof Set?e.forEach(t):t(e)},B=(e,t,s)=>{let i=e[t];i instanceof Set||(e[t]=i=new Set([i])),i.add(s)},Ys=e=>t=>{let s=e[t];s instanceof Set?s.clear():delete e[t]},J=(e,t,s)=>{let i=e[t];i instanceof Set?i.delete(s):i===s&&delete e[t]},mt=e=>e instanceof Set?e.size===0:!e,le=new Map;function ut(e,t,s,i,r){let n=(o,a)=>{s(e),r(o,a,{watchedPath:e}),a&&e!==a&&de(D.resolve(e,a),M,D.join(e,a))};try{return Rs(e,{persistent:t.persistent},n)}catch(o){i(o);return}}var de=(e,t,s,i,r)=>{let n=le.get(e);n&&Le(n[t],o=>{o(s,i,r)})},zs=(e,t,s,i)=>{let{listener:r,errHandler:n,rawEmitter:o}=i,a=le.get(t),c;if(!s.persistent)return c=ut(e,s,r,n,o),c?c.close.bind(c):void 0;if(a)B(a,M,r),B(a,ce,n),B(a,K,o);else{if(c=ut(e,s,de.bind(null,t,M),n,de.bind(null,t,K)),!c)return;c.on(R.ERROR,async u=>{let l=de.bind(null,t,ce);if(a&&(a.watcherUnusable=!0),$e&&u.code==="EPERM")try{await(await As(e,"r")).close(),l(u)}catch{}else l(u)}),a={listeners:r,errHandlers:n,rawEmitters:o,watcher:c},le.set(t,a)}return()=>{J(a,M,r),J(a,ce,n),J(a,K,o),mt(a.listeners)&&(a.watcher.close(),le.delete(t),Ws.forEach(Ys(a)),a.watcher=void 0,Object.freeze(a))}},Fe=new Map,Us=(e,t,s,i)=>{let{listener:r,rawEmitter:n}=i,o=Fe.get(t),a=o&&o.options;return a&&(a.persistent<s.persistent||a.interval>s.interval)&&(dt(t),o=void 0),o?(B(o,M,r),B(o,K,n)):(o={listeners:r,rawEmitters:n,options:s,watcher:Ts(t,s,(c,u)=>{Le(o.rawEmitters,d=>{d(R.CHANGE,t,{curr:c,prev:u})});let l=c.mtimeMs;(c.size!==u.size||l>u.mtimeMs||l===0)&&Le(o.listeners,d=>d(e,c))})},Fe.set(t,o)),()=>{J(o,M,r),J(o,K,n),mt(o.listeners)&&(Fe.delete(t),dt(t),o.options=o.watcher=void 0,Object.freeze(o))}},ue=class{constructor(t){this.fsw=t,this._boundHandleError=s=>t._handleError(s)}_watchWithNodeFs(t,s){let i=this.fsw.options,r=D.dirname(t),n=D.basename(t);this.fsw._getWatchedDir(r).add(n);let a=D.resolve(t),c={persistent:i.persistent};s||(s=fe);let u;if(i.usePolling){let l=i.interval!==i.binaryInterval;c.interval=l&&Vs(n)?i.binaryInterval:i.interval,u=Us(t,a,c,{listener:s,rawEmitter:this.fsw._emitRaw})}else u=zs(t,a,c,{listener:s,errHandler:this._boundHandleError,rawEmitter:this.fsw._emitRaw});return u}_handleFile(t,s,i){if(this.fsw.closed)return;let r=D.dirname(t),n=D.basename(t),o=this.fsw._getWatchedDir(r),a=s;if(o.has(n))return;let c=async(l,d)=>{if(this.fsw._throttle($s,t,5)){if(!d||d.mtimeMs===0)try{let f=await ft(t);if(this.fsw.closed)return;let _=f.atimeMs,E=f.mtimeMs;if((!_||_<=E||E!==a.mtimeMs)&&this.fsw._emit(R.CHANGE,t,f),(Fs||Ls||Os)&&a.ino!==f.ino){this.fsw._closeFile(l),a=f;let F=this._watchWithNodeFs(t,c);F&&this.fsw._addPathCloser(l,F)}else a=f}catch{this.fsw._remove(r,n)}else if(o.has(n)){let f=d.atimeMs,_=d.mtimeMs;(!f||f<=_||_!==a.mtimeMs)&&this.fsw._emit(R.CHANGE,t,d),a=d}}},u=this._watchWithNodeFs(t,c);if(!(i&&this.fsw.options.ignoreInitial)&&this.fsw._isntIgnored(t)){if(!this.fsw._throttle(R.ADD,t,0))return;this.fsw._emit(R.ADD,t,s)}return u}async _handleSymlink(t,s,i,r){if(this.fsw.closed)return;let n=t.fullPath,o=this.fsw._getWatchedDir(s);if(!this.fsw.options.followSymlinks){this.fsw._incrReadyCount();let a;try{a=await Se(i)}catch{return this.fsw._emitReady(),!0}return this.fsw.closed?void 0:(o.has(r)?this.fsw._symlinkPaths.get(n)!==a&&(this.fsw._symlinkPaths.set(n,a),this.fsw._emit(R.CHANGE,i,t.stats)):(o.add(r),this.fsw._symlinkPaths.set(n,a),this.fsw._emit(R.ADD,i,t.stats)),this.fsw._emitReady(),!0)}if(this.fsw._symlinkPaths.has(n))return!0;this.fsw._symlinkPaths.set(n,!0)}_handleRead(t,s,i,r,n,o,a){if(t=D.join(t,""),a=this.fsw._throttle("readdir",t,1e3),!a)return;let c=this.fsw._getWatchedDir(i.path),u=new Set,l=this.fsw._readdirp(t,{fileFilter:d=>i.filterPath(d),directoryFilter:d=>i.filterDir(d)});if(l)return l.on(Ss,async d=>{if(this.fsw.closed){l=void 0;return}let f=d.path,_=D.join(t,f);if(u.add(f),!(d.stats.isSymbolicLink()&&await this._handleSymlink(d,t,_,f))){if(this.fsw.closed){l=void 0;return}(f===r||!r&&!c.has(f))&&(this.fsw._incrReadyCount(),_=D.join(n,D.relative(n,_)),this._addToNodeFs(_,s,i,o+1))}}).on(R.ERROR,this._boundHandleError),new Promise((d,f)=>{if(!l)return f();l.once(Oe,()=>{if(this.fsw.closed){l=void 0;return}let _=a?a.clear():!1;d(void 0),c.getChildren().filter(E=>E!==t&&!u.has(E)).forEach(E=>{this.fsw._remove(t,E)}),l=void 0,_&&this._handleRead(t,!1,i,r,n,o,a)})})}async _handleDir(t,s,i,r,n,o,a){let c=this.fsw._getWatchedDir(D.dirname(t)),u=c.has(D.basename(t));!(i&&this.fsw.options.ignoreInitial)&&!n&&!u&&this.fsw._emit(R.ADD_DIR,t,s),c.add(D.basename(t)),this.fsw._getWatchedDir(t);let l,d,f=this.fsw.options.depth;if((f==null||r<=f)&&!this.fsw._symlinkPaths.has(a)){if(!n&&(await this._handleRead(t,i,o,n,t,r,l),this.fsw.closed))return;d=this._watchWithNodeFs(t,(_,E)=>{E&&E.mtimeMs===0||this._handleRead(_,!1,o,n,t,r,l)})}return d}async _addToNodeFs(t,s,i,r,n){let o=this.fsw._emitReady;if(this.fsw._isIgnored(t)||this.fsw.closed)return o(),!1;let a=this.fsw._getWatchHelpers(t);i&&(a.filterPath=c=>i.filterPath(c),a.filterDir=c=>i.filterDir(c));try{let c=await js[a.statMethod](a.watchPath);if(this.fsw.closed)return;if(this.fsw._isIgnored(a.watchPath,c))return o(),!1;let u=this.fsw.options.followSymlinks,l;if(c.isDirectory()){let d=D.resolve(t),f=u?await Se(t):t;if(this.fsw.closed||(l=await this._handleDir(a.watchPath,c,s,r,n,a,f),this.fsw.closed))return;d!==f&&f!==void 0&&this.fsw._symlinkPaths.set(d,f)}else if(c.isSymbolicLink()){let d=u?await Se(t):t;if(this.fsw.closed)return;let f=D.dirname(a.watchPath);if(this.fsw._getWatchedDir(f).add(a.watchPath),this.fsw._emit(R.ADD,a.watchPath,c),l=await this._handleDir(f,c,s,r,t,a,d),this.fsw.closed)return;d!==void 0&&this.fsw._symlinkPaths.set(D.resolve(t),d)}else l=this._handleFile(a.watchPath,c,s);return o(),l&&this.fsw._addPathCloser(t,l),!1}catch(c){if(this.fsw._handleError(c))return o(),t}}};var je="/",Bs="//",bt=".",Js="..",Qs="string",Xs=/\\/g,gt=/\/\//,Zs=/\..*\.(sw[px])$|~$|\.subl.*\.tmp/,er=/^\.[/\\]/;function he(e){return Array.isArray(e)?e:[e]}var We=e=>typeof e=="object"&&e!==null&&!(e instanceof RegExp);function tr(e){return typeof e=="function"?e:typeof e=="string"?t=>e===t:e instanceof RegExp?t=>e.test(t):typeof e=="object"&&e!==null?t=>{if(e.path===t)return!0;if(e.recursive){let s=g.relative(e.path,t);return s?!s.startsWith("..")&&!g.isAbsolute(s):!1}return!1}:()=>!1}function sr(e){if(typeof e!="string")throw new Error("string expected");e=g.normalize(e),e=e.replace(/\\/g,"/");let t=!1;e.startsWith("//")&&(t=!0);let s=/\/\//;for(;e.match(s);)e=e.replace(s,"/");return t&&(e="/"+e),e}function _t(e,t,s){let i=sr(t);for(let r=0;r<e.length;r++){let n=e[r];if(n(i,s))return!0}return!1}function rr(e,t){if(e==null)throw new TypeError("anymatch: specify first argument");let i=he(e).map(r=>tr(r));return t==null?(r,n)=>_t(i,r,n):_t(i,t)}var wt=e=>{let t=he(e).flat();if(!t.every(s=>typeof s===Qs))throw new TypeError(`Non-string provided as watch path: ${t}`);return t.map(Et)},yt=e=>{let t=e.replace(Xs,je),s=!1;for(t.startsWith(Bs)&&(s=!0);t.match(gt);)t=t.replace(gt,je);return s&&(t=je+t),t},Et=e=>yt(g.normalize(yt(e))),vt=(e="")=>t=>typeof t=="string"?Et(g.isAbsolute(t)?t:g.join(e,t)):t,ir=(e,t)=>g.isAbsolute(e)?e:g.join(t,e),nr=Object.freeze(new Set),Me=class{constructor(t,s){this.path=t,this._removeWatcher=s,this.items=new Set}add(t){let{items:s}=this;s&&t!==bt&&t!==Js&&s.add(t)}async remove(t){let{items:s}=this;if(!s||(s.delete(t),s.size>0))return;let i=this.path;try{await Gs(i)}catch{this._removeWatcher&&this._removeWatcher(g.dirname(i),g.basename(i))}}has(t){let{items:s}=this;if(s)return s.has(t)}getChildren(){let{items:t}=this;return t?[...t.values()]:[]}dispose(){this.items.clear(),this.path="",this._removeWatcher=fe,this.items=nr,Object.freeze(this)}},or="stat",ar="lstat",Ve=class{constructor(t,s,i){this.fsw=i;let r=t;this.path=t=t.replace(er,""),this.watchPath=r,this.fullWatchPath=g.resolve(r),this.dirParts=[],this.dirParts.forEach(n=>{n.length>1&&n.pop()}),this.followSymlinks=s,this.statMethod=s?or:ar}entryPath(t){return g.join(this.watchPath,g.relative(this.watchPath,t.fullPath))}filterPath(t){let{stats:s}=t;if(s&&s.isSymbolicLink())return this.filterDir(t);let i=this.entryPath(t);return this.fsw._isntIgnored(i,s)&&this.fsw._hasReadPermissions(s)}filterDir(t){return this.fsw._isntIgnored(this.entryPath(t),t.stats)}},me=class extends qs{constructor(t={}){super(),this.closed=!1,this._closers=new Map,this._ignoredPaths=new Set,this._throttled=new Map,this._streams=new Set,this._symlinkPaths=new Map,this._watched=new Map,this._pendingWrites=new Map,this._pendingUnlinks=new Map,this._readyCount=0,this._readyEmitted=!1;let s=t.awaitWriteFinish,i={stabilityThreshold:2e3,pollInterval:100},r={persistent:!0,ignoreInitial:!1,ignorePermissionErrors:!1,interval:100,binaryInterval:300,followSymlinks:!0,usePolling:!1,atomic:!0,...t,ignored:t.ignored?he(t.ignored):he([]),awaitWriteFinish:s===!0?i:typeof s=="object"?{...i,...s}:!1};ht&&(r.usePolling=!0),r.atomic===void 0&&(r.atomic=!r.usePolling);let n=process.env.CHOKIDAR_USEPOLLING;if(n!==void 0){let c=n.toLowerCase();c==="false"||c==="0"?r.usePolling=!1:c==="true"||c==="1"?r.usePolling=!0:r.usePolling=!!c}let o=process.env.CHOKIDAR_INTERVAL;o&&(r.interval=Number.parseInt(o,10));let a=0;this._emitReady=()=>{a++,a>=this._readyCount&&(this._emitReady=fe,this._readyEmitted=!0,process.nextTick(()=>this.emit(x.READY)))},this._emitRaw=(...c)=>this.emit(x.RAW,...c),this._boundRemove=this._remove.bind(this),this.options=r,this._nodeFsHandler=new ue(this),Object.freeze(r)}_addIgnoredPath(t){if(We(t)){for(let s of this._ignoredPaths)if(We(s)&&s.path===t.path&&s.recursive===t.recursive)return}this._ignoredPaths.add(t)}_removeIgnoredPath(t){if(this._ignoredPaths.delete(t),typeof t=="string")for(let s of this._ignoredPaths)We(s)&&s.path===t&&this._ignoredPaths.delete(s)}add(t,s,i){let{cwd:r}=this.options;this.closed=!1,this._closePromise=void 0;let n=wt(t);return r&&(n=n.map(o=>ir(o,r))),n.forEach(o=>{this._removeIgnoredPath(o)}),this._userIgnored=void 0,this._readyCount||(this._readyCount=0),this._readyCount+=n.length,Promise.all(n.map(async o=>{let a=await this._nodeFsHandler._addToNodeFs(o,!i,void 0,0,s);return a&&this._emitReady(),a})).then(o=>{this.closed||o.forEach(a=>{a&&this.add(g.dirname(a),g.basename(s||a))})}),this}unwatch(t){if(this.closed)return this;let s=wt(t),{cwd:i}=this.options;return s.forEach(r=>{!g.isAbsolute(r)&&!this._closers.has(r)&&(i&&(r=g.join(i,r)),r=g.resolve(r)),this._closePath(r),this._addIgnoredPath(r),this._watched.has(r)&&this._addIgnoredPath({path:r,recursive:!0}),this._userIgnored=void 0}),this}close(){if(this._closePromise)return this._closePromise;this.closed=!0,this.removeAllListeners();let t=[];return this._closers.forEach(s=>s.forEach(i=>{let r=i();r instanceof Promise&&t.push(r)})),this._streams.forEach(s=>s.destroy()),this._userIgnored=void 0,this._readyCount=0,this._readyEmitted=!1,this._watched.forEach(s=>s.dispose()),this._closers.clear(),this._watched.clear(),this._streams.clear(),this._symlinkPaths.clear(),this._throttled.clear(),this._closePromise=t.length?Promise.all(t).then(()=>{}):Promise.resolve(),this._closePromise}getWatched(){let t={};return this._watched.forEach((s,i)=>{let n=(this.options.cwd?g.relative(this.options.cwd,i):i)||bt;t[n]=s.getChildren().sort()}),t}emitWithAll(t,s){this.emit(t,...s),t!==x.ERROR&&this.emit(x.ALL,t,...s)}async _emit(t,s,i){if(this.closed)return;let r=this.options;$e&&(s=g.normalize(s)),r.cwd&&(s=g.relative(r.cwd,s));let n=[s];i!=null&&n.push(i);let o=r.awaitWriteFinish,a;if(o&&(a=this._pendingWrites.get(s)))return a.lastChange=new Date,this;if(r.atomic){if(t===x.UNLINK)return this._pendingUnlinks.set(s,[t,...n]),setTimeout(()=>{this._pendingUnlinks.forEach((c,u)=>{this.emit(...c),this.emit(x.ALL,...c),this._pendingUnlinks.delete(u)})},typeof r.atomic=="number"?r.atomic:100),this;t===x.ADD&&this._pendingUnlinks.has(s)&&(t=x.CHANGE,this._pendingUnlinks.delete(s))}if(o&&(t===x.ADD||t===x.CHANGE)&&this._readyEmitted){let c=(u,l)=>{u?(t=x.ERROR,n[0]=u,this.emitWithAll(t,n)):l&&(n.length>1?n[1]=l:n.push(l),this.emitWithAll(t,n))};return this._awaitWriteFinish(s,o.stabilityThreshold,t,c),this}if(t===x.CHANGE&&!this._throttle(x.CHANGE,s,50))return this;if(r.alwaysStat&&i===void 0&&(t===x.ADD||t===x.ADD_DIR||t===x.CHANGE)){let c=r.cwd?g.join(r.cwd,s):s,u;try{u=await Hs(c)}catch{}if(!u||this.closed)return;n.push(u)}return this.emitWithAll(t,n),this}_handleError(t){let s=t&&t.code;return t&&s!=="ENOENT"&&s!=="ENOTDIR"&&(!this.options.ignorePermissionErrors||s!=="EPERM"&&s!=="EACCES")&&this.emit(x.ERROR,t),t||this.closed}_throttle(t,s,i){this._throttled.has(t)||this._throttled.set(t,new Map);let r=this._throttled.get(t);if(!r)throw new Error("invalid throttle");let n=r.get(s);if(n)return n.count++,!1;let o,a=()=>{let u=r.get(s),l=u?u.count:0;return r.delete(s),clearTimeout(o),u&&clearTimeout(u.timeoutObject),l};o=setTimeout(a,i);let c={timeoutObject:o,clear:a,count:0};return r.set(s,c),c}_incrReadyCount(){return this._readyCount++}_awaitWriteFinish(t,s,i,r){let n=this.options.awaitWriteFinish;if(typeof n!="object")return;let o=n.pollInterval,a,c=t;this.options.cwd&&!g.isAbsolute(t)&&(c=g.join(this.options.cwd,t));let u=new Date,l=this._pendingWrites;function d(f){Ks(c,(_,E)=>{if(_||!l.has(t)){_&&_.code!=="ENOENT"&&r(_);return}let F=Number(new Date);f&&E.size!==f.size&&(l.get(t).lastChange=F);let L=l.get(t);F-L.lastChange>=s?(l.delete(t),r(void 0,E)):a=setTimeout(d,o,E)})}l.has(t)||(l.set(t,{lastChange:u,cancelWait:()=>(l.delete(t),clearTimeout(a),i)}),a=setTimeout(d,o))}_isIgnored(t,s){if(this.options.atomic&&Zs.test(t))return!0;if(!this._userIgnored){let{cwd:i}=this.options,n=(this.options.ignored||[]).map(vt(i)),a=[...[...this._ignoredPaths].map(vt(i)),...n];this._userIgnored=rr(a,void 0)}return this._userIgnored(t,s)}_isntIgnored(t,s){return!this._isIgnored(t,s)}_getWatchHelpers(t){return new Ve(t,this.options.followSymlinks,this)}_getWatchedDir(t){let s=g.resolve(t);return this._watched.has(s)||this._watched.set(s,new Me(s,this._boundRemove)),this._watched.get(s)}_hasReadPermissions(t){return this.options.ignorePermissionErrors?!0:!!(Number(t.mode)&256)}_remove(t,s,i){let r=g.join(t,s),n=g.resolve(r);if(i=i??(this._watched.has(r)||this._watched.has(n)),!this._throttle("remove",r,100))return;!i&&this._watched.size===1&&this.add(t,s,!0),this._getWatchedDir(r).getChildren().forEach(f=>this._remove(r,f));let c=this._getWatchedDir(t),u=c.has(s);c.remove(s),this._symlinkPaths.has(n)&&this._symlinkPaths.delete(n);let l=r;if(this.options.cwd&&(l=g.relative(this.options.cwd,r)),this.options.awaitWriteFinish&&this._pendingWrites.has(l)&&this._pendingWrites.get(l).cancelWait()===x.ADD)return;this._watched.delete(r),this._watched.delete(n);let d=i?x.UNLINK_DIR:x.UNLINK;u&&!this._isIgnored(r)&&this._emit(d,r),this._closePath(r)}_closePath(t){this._closeFile(t);let s=g.dirname(t);this._getWatchedDir(s).remove(g.basename(t))}_closeFile(t){let s=this._closers.get(t);s&&(s.forEach(i=>i()),this._closers.delete(t))}_addPathCloser(t,s){if(!s)return;let i=this._closers.get(t);i||(i=[],this._closers.set(t,i)),i.push(s)}_readdirp(t,s){if(this.closed)return;let i={type:x.ALL,alwaysStat:!0,lstat:!0,...s,depth:0},r=lt(t,i);return this._streams.add(r),r.once(pt,()=>{r=void 0}),r.once(Oe,()=>{r&&(this._streams.delete(r),r=void 0)}),r}};function cr(e,t={}){let s=new me(t);return s.add(e),s}var Dt={watch:cr,FSWatcher:me};import{existsSync as A,mkdirSync as vr,readdirSync as br,readFileSync as Er,unlinkSync as Dr}from"fs";import{basename as Tt,join as y,relative as Rt}from"path";import{copyFileSync as lr,existsSync as $,mkdirSync as dr,readdirSync as ze,readFileSync as ur,writeFileSync as fr}from"fs";import{basename as xt,dirname as Pt,extname as pr,join as k,normalize as hr,relative as H,resolve as Nt,sep as mr}from"path";var gr=/import\s+(?:(?:{[^}]*})|(?:[^{}\s,]*))?\s*(?:,\s*(?:{[^}]*}))?\s*from\s+['"]([./]+[^'"]*)['"]/g,_r=/import\s+(?:(?:{[^}]*})|(?:[^{}\s,]*))?\s*(?:,\s*(?:{[^}]*}))?\s*from\s+['"](@\/[^'"]*)['"]/g,wr=/import\s*\(\s*['"](@\/[^'"]*)['"]\s*\)/g,ge=/\.(js|jsx|ts|tsx)$/,Ye=/^page\.(tsx|ts|jsx|js)$/i,Q=(e,t)=>{let i=H(t,e).split(mr);i.pop();let r=i.filter(n=>!n.startsWith("("));return hr(r.join("/"))},_e=e=>{let t=new Map,s=i=>{if($(i))for(let r of ze(i,{withFileTypes:!0})){let n=k(i,r.name);if(r.isDirectory()){s(n);continue}if(Ye.test(r.name)){let o=Q(n,e);t.set(o,n)}}};return s(e),t},yr=(e,t)=>{let s=e.replace(gr,(i,r)=>{if(r.startsWith(".")){let o=r.replace(ge,"").replace(/^(?:\.\.\/)+/,"");return i.replace(r,`${t}/${o}`)}return i});return s=s.replace(_r,(i,r)=>{let n=r.replace(/^@\//,"").replace(ge,"");return i.replace(r,`${t}/${n}`)}),s=s.replace(wr,(i,r)=>{let n=r.replace(/^@\//,"").replace(ge,"");return i.replace(r,`${t}/${n}`)}),s=s.replace(/dynamic\s*\(\s*\(\s*=>\s*import\s*\(\s*['"](@\/[^'"]*)['"]\s*\)\s*\)\s*\)/g,(i,r)=>{let n=r.replace(/^@\//,"").replace(ge,"");return i.replace(r,`${t}/${n}`)}),s};function we(e){let t=e;for(;t!==Nt(t,"..");){let i=k(t,"turbo.json");if($(i))return t;t=Nt(t,"..")}let s=k(e,"package.json");if($(s))return e;throw new Error("\u274C Could not locate project root")}function ye(e){let t=k(e,"src","app","[locale]");if($(t))return t;let i=(n=>{let o=[];if(!$(n))return o;let a=(c,u=0)=>{if(!(u>4))try{let l=ze(c,{withFileTypes:!0});for(let d of l){if(!d.isDirectory())continue;let f=k(c,d.name);if(d.name==="[locale]"&&Pt(f).endsWith(k("src","app"))){o.push(f);continue}a(f,u+1)}}catch{}};return a(n),o})(e);return i.length>0?i[0]:k(e,"apps","docs","src","app","[locale]")}var X=e=>{let t=[];if(!$(e))return t;let s=ze(e,{withFileTypes:!0});for(let i of s){let r=k(e,i.name);i.isDirectory()?t.push(...X(r)):t.push(r)}return t},Z=e=>$(e)?X(e).length===0:!0,Ue=(e,t,s,i,r,n,o=!0)=>{let a=xt(e);if(Ye.test(a)){let c=Q(t,r),u=i.get(c);if(u&&u!==t){o&&console.log(`\x1B[31mSkipped duplicate page:\x1B[0m ${H(n,t)} (collides with ${H(n,u)})`);return}}try{let c=Pt(t);$(c)||dr(c,{recursive:!0});let u=pr(e);if(s&&[".js",".jsx",".ts",".tsx"].includes(u)){let l=ur(e,"utf-8"),d=yr(l,s);fr(t,d)}else lr(e,t);if(o){let l=e.indexOf(k("src","app")),d=l!==-1?e.substring(l):e.startsWith(n)?H(n,e):e,f=t.startsWith(n)?H(n,t):t;console.log(`\x1B[32mCopied:\x1B[0m ${d} \u2192 ${f}`)}if(Ye.test(xt(t))){let l=Q(t,r);i.set(l,t)}}catch(c){console.error(`\x1B[31mError copying file:\x1B[0m ${e}`,c)}},It=(e,t,s,i,r,n,o=!0)=>{if(!$(e)||Z(e))return;let a=X(e);for(let c of a){let u=H(e,c),l=k(t,u);Ue(c,l,s,i,r,n,o)}};var At=({initMessage:e})=>{let t=process.cwd(),s=we(t),i=ye(s),r=_e(i),n=Tt(t);try{let p=y(t,"package.json");A(p)&&(n=JSON.parse(Er(p,"utf-8")).name??"")}catch(p){console.error("\x1B[31mError reading package.json:\x1B[0m",p);return}let o=n.replace(/\//g,"-").replace(/@/g,""),a=p=>{let h=A(y(p,"src","vitnode.config.ts"));return A(y(p,"src","vitnode.api.config.ts"))&&!h?"api":h?"web":null},c=y(s,"apps"),u=A(c),l=[];if(u){let p=A(c)?br(c,{withFileTypes:!0}).filter(h=>h.isDirectory()).map(h=>h.name):[];for(let h of p){let m=y(s,"apps",h),b=a(m);if(b==="web"){let N=y(m,"src","app","[locale]","(main)",y("(plugins)",`(${o})`)),z=y(m,"src","app","[locale]","admin","(auth)",y("(plugins)",`(${o})`)),W=y(m,"src","locales",n);l.push({sourceDir:y(t,"src","app_admin"),destinationDir:z},{sourceDir:y(t,"src","app"),destinationDir:N},{sourceDir:y(t,"src","locales"),destinationDir:W})}else if(b==="api"){let N=y(m,"src","locales",n);l.push({sourceDir:y(t,"src","locales"),destinationDir:N})}}}else{let p=process.cwd(),h=a(p);if(h==="web"){let m=y(p,"src","app","[locale]","(main)",y("(plugins)",`(${o})`)),b=y(p,"src","app","[locale]","admin","(auth)",y("(plugins)",`(${o})`)),N=y(p,"src","locales",n);l.push({sourceDir:y(t,"src","app_admin"),destinationDir:b},{sourceDir:y(t,"src","app"),destinationDir:m},{sourceDir:y(t,"src","locales"),destinationDir:N})}else if(h==="api"){let m=y(p,"src","locales",n);l.push({sourceDir:y(t,"src","locales"),destinationDir:m})}}for(let{sourceDir:p,destinationDir:h}of l)A(p)&&!Z(p)&&!A(h)&&vr(h,{recursive:!0});let d=(p,h)=>{Ue(p,h,n,r,i,s)},f=p=>{try{if(A(p)&&(Dr(p),console.log(`\x1B[33mRemoved:\x1B[0m ${p}`),/^page\.(tsx|ts|jsx|js)$/i.test(Tt(p)))){let h=Q(p,i);r.get(h)===p&&r.delete(h)}}catch(h){console.error(`\x1B[31mError removing file:\x1B[0m ${p}`,h)}},_=(p,h)=>{if(!A(h)||h.includes(y("src","locales")))return;let b=X(h);for(let N of b){let z=Rt(h,N),W=y(p,z);A(W)||f(N)}};for(let{sourceDir:p,destinationDir:h}of l)_(p,h);console.log(`${e} \x1B[34mWatching for changes in plugins...\x1B[0m`);let E=l.map(p=>p.sourceDir).filter(p=>A(p)),F=Dt.watch(E,{ignoreInitial:!1,persistent:!0}),L=p=>{let h=l.filter(({sourceDir:m})=>{let b=p.replace(/\\/g,"/"),N=m.replace(/\\/g,"/");return b===N||b.startsWith(N+"/")});if(h.length===0)throw new Error(`No matching source directory for: ${p}`);return h.map(m=>{let b=Rt(m.sourceDir,p);return y(m.destinationDir,b)})};F.on("add",p=>{L(p).forEach(m=>{d(p,m)})}).on("change",p=>{L(p).forEach(m=>{d(p,m)})}).on("unlink",p=>{L(p).forEach(m=>{f(m)})}).on("error",p=>{console.error("\x1B[31mWatcher error:\x1B[0m",p)})};import{count as Wt}from"drizzle-orm";import{relations as Lt}from"drizzle-orm";import{index as Pe,pgTable as Ot}from"drizzle-orm/pg-core";import{pgTable as xr}from"drizzle-orm/pg-core";var I=xr("core_roles",e=>({id:e.serial().primaryKey(),createdAt:e.timestamp().notNull().defaultNow(),updatedAt:e.timestamp().notNull().$onUpdate(()=>new Date),protected:e.boolean().notNull().default(!1),default:e.boolean().notNull().default(!1),root:e.boolean().notNull().default(!1),guest:e.boolean().notNull().default(!1),color:e.varchar({length:19})})).enableRLS();import{relations as Ct}from"drizzle-orm";import{index as St,pgTable as Ft}from"drizzle-orm/pg-core";import{relations as xe}from"drizzle-orm";import{index as be,pgTable as Ne}from"drizzle-orm/pg-core";import{relations as Nr}from"drizzle-orm";import{index as Ke,pgTable as kt}from"drizzle-orm/pg-core";var C=kt("core_languages",e=>({id:e.serial().primaryKey(),code:e.varchar({length:32}).notNull().unique(),name:e.varchar({length:255}).notNull(),timezone:e.varchar({length:255}).notNull().default("UTC"),protected:e.boolean().notNull().default(!1),default:e.boolean().notNull().default(!1),enabled:e.boolean().notNull().default(!0),createdAt:e.timestamp().notNull().defaultNow(),updatedAt:e.timestamp().notNull().$onUpdate(()=>new Date),time24:e.boolean().notNull().default(!1)}),e=>[Ke("core_languages_code_idx").on(e.code),Ke("core_languages_name_idx").on(e.name)]).enableRLS(),ve=kt("core_languages_words",e=>({id:e.serial().primaryKey(),languageCode:e.varchar().notNull().references(()=>C.code,{onDelete:"cascade"}),pluginCode:e.varchar({length:50}).notNull(),itemId:e.integer().notNull(),value:e.text().notNull(),tableName:e.varchar({length:255}).notNull(),variable:e.varchar({length:255}).notNull()}),e=>[Ke("core_languages_words_lang_code_idx").on(e.languageCode)]).enableRLS(),ci=Nr(ve,({one:e})=>({language:e(C,{fields:[ve.languageCode],references:[C.code]})}));var w=Ne("core_users",e=>({id:e.serial().primaryKey(),nameCode:e.varchar({length:255}).notNull().unique(),name:e.varchar({length:255}).notNull().unique(),email:e.varchar({length:255}).notNull().unique(),password:e.varchar(),createdAt:e.timestamp().notNull().defaultNow(),newsletter:e.boolean().notNull().default(!1),avatarColor:e.varchar({length:6}).notNull(),emailVerified:e.boolean().notNull().default(!1),roleId:e.integer().references(()=>I.id).notNull(),birthday:e.timestamp(),ipAddress:e.varchar({length:40}).notNull(),language:e.varchar({length:32}).notNull().default("en").references(()=>C.code,{onDelete:"set default"})}),e=>[be("core_users_name_code_idx").on(e.nameCode),be("core_users_name_idx").on(e.name),be("core_users_email_idx").on(e.email)]).enableRLS(),hi=xe(w,({one:e,many:t})=>({group:e(I,{fields:[w.roleId],references:[I.id]}),language:e(C,{fields:[w.language],references:[C.code]}),confirm_email:e(Ee,{fields:[w.id],references:[Ee.userId]}),sso:t(He),forgot_password:e(De,{fields:[w.id],references:[De.userId]})})),He=Ne("core_users_sso",e=>({userId:e.integer().references(()=>w.id,{onDelete:"cascade"}).notNull(),providerId:e.varchar({length:255}).notNull(),providerAccountId:e.varchar({length:255}).notNull(),createdAt:e.timestamp().notNull().defaultNow(),updatedAt:e.timestamp().notNull().$onUpdate(()=>new Date)}),e=>[be("core_users_sso_user_id_idx").on(e.userId)]).enableRLS(),mi=xe(He,({one:e})=>({user:e(w,{fields:[He.userId],references:[w.id]})})),Ee=Ne("core_users_confirm_emails",e=>({id:e.serial().primaryKey(),userId:e.integer().references(()=>w.id,{onDelete:"cascade"}).notNull(),token:e.varchar({length:100}).notNull().unique(),createdAt:e.timestamp().notNull().defaultNow(),expires:e.timestamp().notNull(),ipAddress:e.varchar({length:40}).notNull()})).enableRLS(),gi=xe(Ee,({one:e})=>({user:e(w,{fields:[Ee.userId],references:[w.id]})})),De=Ne("core_users_forgot_password",e=>({id:e.serial().primaryKey(),userId:e.integer().references(()=>w.id,{onDelete:"cascade"}).notNull().unique(),token:e.varchar({length:100}).notNull().unique(),ipAddress:e.varchar({length:40}).notNull(),createdAt:e.timestamp().notNull().defaultNow(),expiresAt:e.timestamp().notNull()})).enableRLS(),_i=xe(De,({one:e})=>({user:e(w,{fields:[De.userId],references:[w.id]})}));var ee=Ft("core_sessions",e=>({id:e.serial().primaryKey(),token:e.varchar({length:255}).notNull().unique(),userId:e.integer().notNull().references(()=>w.id,{onDelete:"cascade"}),createdAt:e.timestamp().notNull().defaultNow(),expiresAt:e.timestamp().notNull(),deviceId:e.integer().references(()=>j.id,{onDelete:"cascade"}).notNull()}),e=>[St("core_sessions_user_id_idx").on(e.userId)]).enableRLS(),Ei=Ct(ee,({one:e})=>({user:e(w,{fields:[ee.userId],references:[w.id]}),device:e(j,{fields:[ee.deviceId],references:[j.id]})})),j=Ft("core_sessions_known_devices",e=>({id:e.serial().primaryKey(),publicId:e.varchar({length:32}).notNull().unique(),ipAddress:e.varchar({length:40}).notNull(),userAgent:e.text().notNull(),lastSeen:e.timestamp().notNull().defaultNow()}),e=>[St("core_sessions_known_devices_ip_address_idx").on(e.ipAddress)]).enableRLS(),Di=Ct(j,({one:e})=>({session:e(ee,{fields:[j.id],references:[ee.deviceId]})}));var te=Ot("core_admin_permissions",e=>({id:e.serial().primaryKey(),roleId:e.integer().references(()=>I.id,{onDelete:"cascade"}),userId:e.integer().references(()=>w.id,{onDelete:"cascade"}),createdAt:e.timestamp().notNull().defaultNow(),updatedAt:e.timestamp().notNull().$onUpdate(()=>new Date),protected:e.boolean().notNull().default(!1)}),e=>[Pe("core_admin_permissions_role_id_idx").on(e.roleId),Pe("core_admin_permissions_user_id_idx").on(e.userId)]).enableRLS(),Ai=Lt(te,({one:e})=>({group:e(I,{fields:[te.roleId],references:[I.id]}),user:e(w,{fields:[te.userId],references:[w.id]})})),Ge=Ot("core_admin_sessions",e=>({id:e.serial().primaryKey(),token:e.varchar({length:255}).notNull().unique(),userId:e.integer().notNull().references(()=>w.id,{onDelete:"cascade"}),createdAt:e.timestamp().notNull().defaultNow(),lastSeen:e.timestamp().notNull().defaultNow(),expiresAt:e.timestamp().notNull(),deviceId:e.integer().references(()=>j.id,{onDelete:"cascade"}).notNull()}),e=>[Pe("core_admin_sessions_token_idx").on(e.token),Pe("core_admin_sessions_user_id_idx").on(e.userId)]).enableRLS(),ki=Lt(Ge,({one:e})=>({user:e(w,{fields:[Ge.userId],references:[w.id]}),device:e(j,{fields:[Ge.deviceId],references:[j.id]})}));import{relations as Pr}from"drizzle-orm";import{index as $t,pgTable as Ir}from"drizzle-orm/pg-core";var se=Ir("core_moderators_permissions",e=>({id:e.serial().primaryKey(),roleId:e.integer().references(()=>I.id,{onDelete:"cascade"}),userId:e.integer().references(()=>w.id,{onDelete:"cascade"}),createdAt:e.timestamp().notNull().defaultNow(),updatedAt:e.timestamp().notNull().$onUpdate(()=>new Date),protected:e.boolean().notNull().default(!1)}),e=>[$t("core_moderators_permissions_role_id_idx").on(e.roleId),$t("core_moderators_permissions_user_id_idx").on(e.userId)]).enableRLS(),$i=Pr(se,({one:e})=>({group:e(I,{fields:[se.roleId],references:[I.id]}),user:e(w,{fields:[se.userId],references:[w.id]})}));import{join as Tr}from"path";import{pathToFileURL as Rr}from"url";var V=async({type:e="config"})=>{let t=Tr(process.cwd(),"src",`vitnode.${e}.ts`);try{let i=await import(Rr(t).href);return e==="config"?i.vitNodeConfig:i.vitNodeApiConfig}catch(s){console.error("Failed to load config:",s),process.exit(1)}};import{existsSync as S,readdirSync as Ar}from"fs";import{readFile as kr}from"fs/promises";import{join as v,relative as jt}from"path";var G=async e=>{let t=process.cwd(),s=S(v(t,"src","vitnode.config.ts")),i=S(v(t,"src","vitnode.api.config.ts")),r;e==="--api"&&i?r=await V({type:"api.config"}):e==="--web"&&s?r=await V({}):i&&!s?r=await V({type:"api.config"}):s?r=await V({}):r={plugins:[]};let n=[...r.plugins.map(d=>d.pluginId),"@vitnode/core"],o=we(process.cwd()),a=ye(o),c=_e(a),u=process.cwd(),l=d=>{let f=process.cwd(),_=v(f,"node_modules",d);if(S(_))return _;if(o&&o!==f){let E=v(o,"node_modules",d);if(S(E))return E}return null};await Promise.all(n.map(async d=>{let f=l(d);if(!f){console.error(`\x1B[31mPlugin not found:\x1B[0m ${d} in node_modules`);return}let _="";try{let m=v(f,"package.json");S(m)&&(_=JSON.parse(await kr(m,"utf-8")).name??"")}catch(m){console.error(`\x1B[31mError reading package.json for ${d}:\x1B[0m`,m);return}let E=d.replace(/\//g,"-").replace(/@/g,""),F=m=>{let b=S(v(m,"src","vitnode.config.ts"));return S(v(m,"src","vitnode.api.config.ts"))&&!b?"api":b?"web":null},L=v(o,"apps"),p=S(L),h=[];if(p){let m=S(L)?Ar(L,{withFileTypes:!0}).filter(b=>b.isDirectory()).map(b=>b.name):[];for(let b of m){let N=v(o,"apps",b),z=F(N);if(z==="web"){let W=v(N,"src","app","[locale]","(main)",v("(plugins)",`(${E})`)),Ut=v(N,"src","app","[locale]","admin","(auth)",v("(plugins)",`(${E})`)),Kt=v(N,"src","locales",d);h.push({sourceDir:v(f,"src","app_admin"),destinationDir:Ut},{sourceDir:v(f,"src","app"),destinationDir:W},{sourceDir:v(f,"src","locales"),destinationDir:Kt})}else if(z==="api"){let W=v(N,"src","locales",d);h.push({sourceDir:v(f,"src","locales"),destinationDir:W})}}}else{let m=v(u,"src","app","[locale]","(main)",v("(plugins)",`(${E})`)),b=v(u,"src","app","[locale]","admin","(auth)",v("(plugins)",`(${E})`)),N=v(u,"src","locales",d);h.push({sourceDir:v(f,"src","app_admin"),destinationDir:b},{sourceDir:v(f,"src","app"),destinationDir:m},{sourceDir:v(f,"src","locales"),destinationDir:N})}for(let{sourceDir:m,destinationDir:b}of h)S(m)&&!Z(m)&&(console.log(`\x1B[36mCopying ${d}:\x1B[0m ${jt(o,m)} \u2192 ${jt(o,b)}`),It(m,b,_,c,a,o,!1))}))};import{spawn as Cr}from"child_process";var re=async(e,t=[])=>new Promise((s,i)=>{let r=Cr(e,t,{stdio:"inherit",shell:!0,env:process.env});r.on("error",n=>{i(n)}),r.on("close",n=>{n!==0?i(new Error(`Command failed with exit code ${n}`)):s(!0)})});var Ie=async()=>{try{await re("npm",["run","drizzle-kit","up"]),await re("npm",["run","drizzle-kit","generate"])}catch(e){console.error("\x1B[31m%s\x1B[0m",e),process.exit(1)}},Te=async()=>{try{await re("npm",["run","drizzle-kit","migrate"])}catch(e){console.error("\x1B[31m%s\x1B[0m",e),process.exit(1)}},Mt=async()=>{try{await re("npm",["run","drizzle-kit","push"])}catch(e){console.error("\x1B[31m%s\x1B[0m",e),process.exit(1)}},ie=async()=>{let t=(await V({type:"api.config"})).dbProvider,[s]=await t.select({count:Wt()}).from(I).limit(1),[i]=await t.select({count:Wt()}).from(C);if(i.count===0&&await t.insert(C).values([{code:"en",name:"English (USA)",default:!0,protected:!0,timezone:"America/New_York"}]),s.count===0){let r=await t.insert(I).values([{protected:!0,guest:!0},{protected:!0,default:!0},{protected:!0,color:"hsl(122, 80%, 45%)"},{protected:!0,root:!0,color:"hsl(0, 100%, 50%)"}]).returning({id:I.id});await t.insert(ve).values([{languageCode:"en",pluginCode:"core",itemId:r[0].id,value:"Guest",tableName:"core_roles",variable:"name"},{languageCode:"en",pluginCode:"core",itemId:r[1].id,value:"Member",tableName:"core_roles",variable:"name"},{languageCode:"en",pluginCode:"core",itemId:r[2].id,value:"Moderator",tableName:"core_roles",variable:"name"},{languageCode:"en",pluginCode:"core",itemId:r[3].id,value:"Administrator",tableName:"core_roles",variable:"name"}]),await Promise.all([await t.insert(se).values({roleId:r[2].id,protected:!0}),await t.insert(te).values({roleId:r[3].id,protected:!0})])}},Vt=async({initMessage:e,flag:t})=>{let s=[];t==="--web"?s.push({label:"Prepare plugins files...",action:async()=>await G(t)}):t==="--api"?s.push({label:"Prepare plugins files...",action:async()=>await G(t)},{label:"Generate migrations...",action:Ie},{label:"Run migrations...",action:Te},{label:"Insert initial data...",action:ie}):s.push({label:"Prepare plugins files...",action:async()=>await G(t)},{label:"Generate migrations...",action:Ie},{label:"Run migrations...",action:Te},{label:"Insert initial data...",action:ie});for(let i=0;i<s.length;i++){let r=s[i],n=`[${i+1}/${s.length}]`;r.label==="Insert initial data..."?console.log(`
|
|
9
9
|
${e} ${n} ${r.label}`):console.log(`${e} ${n} ${r.label}`),await r.action()}console.log(`${e} \x1B[32mInitial setup completed.\x1B[0m`),process.exit(0)};zt.config({quiet:!0});var Y="\x1B[34m[VitNode]\x1B[0m",Yt=process.argv[2],ne=process.argv[3];switch(Yt){case"init":Vt({initMessage:Y,flag:ne});break;case"migrate":await Ie(),ne==="--generate"&&(console.log(`${Y} \x1B[32mDatabase migrations generated successfully.\x1B[0m`),process.exit(0)),await Te(),await ie(),console.log(`${Y} \x1B[32mDatabase migrated successfully.\x1B[0m`),process.exit(0);break;case"plugin":(ne==="--w"||ne==="--watch")&&At({initMessage:Y});break;case"prepare-plugins":await G(ne),console.log(`${Y} \x1B[32mPlugins prepared successfully.\x1B[0m`),process.exit(0);break;case"push":await Mt(),await ie(),console.log(`${Y} \x1B[32mDatabase pushed successfully.\x1B[0m`),process.exit(0);break;default:console.log(`${Y} \x1B[31mCommand not found: "${Yt??""}"\x1B[0m`),process.exit(1)}
|
|
10
10
|
/*! Bundled license information:
|
|
11
11
|
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import type { Context, Env, Next } from 'hono';
|
|
2
2
|
import type { VitNodeApiConfig, VitNodeConfig } from '../../vitnode.config';
|
|
3
|
-
import { type
|
|
3
|
+
import { type EmailModelSendArgs } from '../../api/models/email';
|
|
4
4
|
import type { SSOApiPlugin } from '../models/sso';
|
|
5
5
|
import { type LoggerMiddlewareType } from '../lib/logger-middleware';
|
|
6
6
|
export interface EnvVitNode extends Env {
|
|
@@ -33,15 +33,7 @@ export interface EnvVariablesVitNode {
|
|
|
33
33
|
ssoAdapters: SSOApiPlugin[];
|
|
34
34
|
};
|
|
35
35
|
captcha?: Pick<VitNodeApiConfig, 'captcha'>['captcha'];
|
|
36
|
-
email?:
|
|
37
|
-
adapter?: EmailApiPlugin;
|
|
38
|
-
options?: {
|
|
39
|
-
logo?: {
|
|
40
|
-
className?: string;
|
|
41
|
-
src: Blob | string;
|
|
42
|
-
};
|
|
43
|
-
};
|
|
44
|
-
};
|
|
36
|
+
email?: VitNodeApiConfig['email'];
|
|
45
37
|
metadata: {
|
|
46
38
|
shortTitle?: string;
|
|
47
39
|
title: string;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"global.middleware.d.ts","sourceRoot":"","sources":["../../../../src/api/middlewares/global.middleware.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,OAAO,EAAE,GAAG,EAAE,IAAI,EAAE,MAAM,MAAM,CAAC;AAI/C,OAAO,KAAK,EAAE,gBAAgB,EAAE,aAAa,EAAE,MAAM,kBAAkB,CAAC;AAExE,OAAO,
|
|
1
|
+
{"version":3,"file":"global.middleware.d.ts","sourceRoot":"","sources":["../../../../src/api/middlewares/global.middleware.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,OAAO,EAAE,GAAG,EAAE,IAAI,EAAE,MAAM,MAAM,CAAC;AAI/C,OAAO,KAAK,EAAE,gBAAgB,EAAE,aAAa,EAAE,MAAM,kBAAkB,CAAC;AAExE,OAAO,EAAc,KAAK,kBAAkB,EAAE,MAAM,oBAAoB,CAAC;AAIzE,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,eAAe,CAAC;AAElD,OAAO,EAEL,KAAK,oBAAoB,EAC1B,MAAM,0BAA0B,CAAC;AAElC,MAAM,WAAW,UAAW,SAAQ,GAAG;IACrC,SAAS,EAAE,mBAAmB,CAAC;CAChC;AAED,MAAM,WAAW,mBAAmB;IAClC,KAAK,EAAE,IAAI,GAAG;QACZ,IAAI,EAAE;YACJ,WAAW,EAAE,MAAM,CAAC;YACpB,QAAQ,EAAE,IAAI,GAAG,IAAI,CAAC;YACtB,SAAS,EAAE,IAAI,CAAC;YAChB,KAAK,EAAE,MAAM,CAAC;YACd,aAAa,EAAE,OAAO,CAAC;YACvB,EAAE,EAAE,MAAM,CAAC;YACX,IAAI,EAAE,MAAM,CAAC;YACb,QAAQ,EAAE,MAAM,CAAC;YACjB,UAAU,EAAE,OAAO,CAAC;YACpB,MAAM,EAAE,MAAM,CAAC;SAChB,CAAC;KACH,CAAC;IACF,IAAI,EAAE;QACJ,aAAa,EAAE;YACb,kBAAkB,EAAE,MAAM,CAAC;YAC3B,eAAe,EAAE,MAAM,CAAC;YACxB,cAAc,EAAE,MAAM,CAAC;YACvB,UAAU,EAAE,MAAM,CAAC;YACnB,YAAY,EAAE,OAAO,CAAC;YACtB,mBAAmB,EAAE,MAAM,CAAC;YAC5B,gBAAgB,EAAE,MAAM,CAAC;YACzB,WAAW,EAAE,YAAY,EAAE,CAAC;SAC7B,CAAC;QACF,OAAO,CAAC,EAAE,IAAI,CAAC,gBAAgB,EAAE,SAAS,CAAC,CAAC,SAAS,CAAC,CAAC;QACvD,KAAK,CAAC,EAAE,gBAAgB,CAAC,OAAO,CAAC,CAAC;QAClC,QAAQ,EAAE;YACR,UAAU,CAAC,EAAE,MAAM,CAAC;YACpB,KAAK,EAAE,MAAM,CAAC;SACf,CAAC;QACF,cAAc,EAAE,CAAC,IAAI,EAAE,MAAM,KAAK,OAAO,CAAC;YAAE,OAAO,EAAE,MAAM,CAAA;SAAE,CAAC,CAAC;QAC/D,OAAO,EAAE;YAAE,EAAE,EAAE,MAAM,CAAA;SAAE,EAAE,CAAC;KAC3B,CAAC;IACF,EAAE,EAAE,IAAI,CAAC,gBAAgB,EAAE,YAAY,CAAC,CAAC,YAAY,CAAC,CAAC;IACvD,KAAK,EAAE;QACL,IAAI,EAAE,CAAC,IAAI,EAAE,kBAAkB,KAAK,OAAO,CAAC,IAAI,CAAC,CAAC;KACnD,CAAC;IACF,SAAS,EAAE,MAAM,CAAC;IAClB,GAAG,EAAE,oBAAoB,CAAC;IAC1B,MAAM,EAAE;QACN,EAAE,EAAE,MAAM,CAAC;KACZ,CAAC;IACF,IAAI,EAAE,IAAI,GAAG;QACX,WAAW,EAAE,MAAM,CAAC;QACpB,QAAQ,EAAE,IAAI,GAAG,IAAI,CAAC;QACtB,SAAS,EAAE,IAAI,CAAC;QAChB,KAAK,EAAE,MAAM,CAAC;QACd,aAAa,EAAE,OAAO,CAAC;QACvB,EAAE,EAAE,MAAM,CAAC;QACX,IAAI,EAAE,MAAM,CAAC;QACb,QAAQ,EAAE,MAAM,CAAC;QACjB,UAAU,EAAE,OAAO,CAAC;QACpB,MAAM,EAAE,MAAM,CAAC;KAChB,CAAC;CACH;AAED,OAAO,QAAQ,MAAM,CAAC;IAEpB,UAAU,kBAAmB,SAAQ,mBAAmB;KAAG;CAC5D;AAED,eAAO,MAAM,gBAAgB,GAAI,mFAQ9B,IAAI,CACL,gBAAgB,EACd,eAAe,GACf,SAAS,GACT,YAAY,GACZ,OAAO,GACP,gBAAgB,GAChB,SAAS,CACZ,GACC,IAAI,CAAC,aAAa,EAAE,UAAU,CAAC,MACjB,GAAG,OAAO,EAAE,MAAM,IAAI,kBA8ErC,CAAC;AAEF,eAAO,MAAM,gBAAgB,GAAI,UAAU,MAAM,MACjC,GAAG,OAAO,EAAE,MAAM,IAAI,kBAMrC,CAAC;AAEF,eAAO,MAAM,qBAAqB,SAClB,GAAG,OAAO,EAAE,MAAM,IAAI,kBASrC,CAAC"}
|
|
@@ -1,5 +1,6 @@
|
|
|
1
1
|
import type { Context, ContextVariableMap } from 'hono';
|
|
2
2
|
import type React from 'react';
|
|
3
|
+
import { type DefaultTemplateEmailProps } from '../../emails/default-template';
|
|
3
4
|
export interface EmailApiPlugin {
|
|
4
5
|
sendEmail: (args: {
|
|
5
6
|
html: string;
|
|
@@ -10,18 +11,33 @@ export interface EmailApiPlugin {
|
|
|
10
11
|
to: string;
|
|
11
12
|
}) => Promise<void>;
|
|
12
13
|
}
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
14
|
+
interface EmailModelSendArgsWithUser {
|
|
15
|
+
locale?: never;
|
|
16
|
+
to?: never;
|
|
17
|
+
user: {
|
|
18
|
+
email: string;
|
|
19
|
+
id: number;
|
|
20
|
+
language: string;
|
|
21
|
+
name?: string;
|
|
22
|
+
nameCode?: string;
|
|
23
|
+
};
|
|
24
|
+
}
|
|
25
|
+
interface EmailModelSendArgsWithEmail {
|
|
26
|
+
locale: string;
|
|
20
27
|
to: string;
|
|
28
|
+
user?: never;
|
|
21
29
|
}
|
|
30
|
+
export type EmailModelSendArgs = {
|
|
31
|
+
content: (props: Omit<DefaultTemplateEmailProps, 'children'> & Pick<EmailModelSendArgs, 'user'>) => React.ReactNode;
|
|
32
|
+
html?: string;
|
|
33
|
+
locale?: string;
|
|
34
|
+
replyTo?: string;
|
|
35
|
+
subject: ((props: Pick<DefaultTemplateEmailProps, 'i18n'>) => string) | string;
|
|
36
|
+
} & (EmailModelSendArgsWithEmail | EmailModelSendArgsWithUser);
|
|
22
37
|
export declare class EmailModel {
|
|
23
38
|
constructor(c: Context);
|
|
24
39
|
protected readonly c: Context;
|
|
25
|
-
send({ html, replyTo, subject, to, content }: EmailModelSendArgs): Promise<void>;
|
|
40
|
+
send({ html, replyTo, subject, to, user, content, locale: localeFromArgs, }: EmailModelSendArgs): Promise<void>;
|
|
26
41
|
}
|
|
42
|
+
export {};
|
|
27
43
|
//# sourceMappingURL=email.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"email.d.ts","sourceRoot":"","sources":["../../../../src/api/models/email.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,OAAO,EAAE,kBAAkB,EAAE,MAAM,MAAM,CAAC;AACxD,OAAO,KAAK,KAAK,MAAM,OAAO,CAAC;
|
|
1
|
+
{"version":3,"file":"email.d.ts","sourceRoot":"","sources":["../../../../src/api/models/email.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,OAAO,EAAE,kBAAkB,EAAE,MAAM,MAAM,CAAC;AACxD,OAAO,KAAK,KAAK,MAAM,OAAO,CAAC;AAK/B,OAAO,EAAE,KAAK,yBAAyB,EAAE,MAAM,+BAA+B,CAAC;AAG/E,MAAM,WAAW,cAAc;IAC7B,SAAS,EAAE,CAAC,IAAI,EAAE;QAChB,IAAI,EAAE,MAAM,CAAC;QACb,QAAQ,EAAE,kBAAkB,CAAC,MAAM,CAAC,CAAC,UAAU,CAAC,CAAC;QACjD,OAAO,CAAC,EAAE,MAAM,CAAC;QACjB,OAAO,EAAE,MAAM,CAAC;QAChB,IAAI,EAAE,MAAM,CAAC;QACb,EAAE,EAAE,MAAM,CAAC;KACZ,KAAK,OAAO,CAAC,IAAI,CAAC,CAAC;CACrB;AAED,UAAU,0BAA0B;IAClC,MAAM,CAAC,EAAE,KAAK,CAAC;IACf,EAAE,CAAC,EAAE,KAAK,CAAC;IACX,IAAI,EAAE;QACJ,KAAK,EAAE,MAAM,CAAC;QACd,EAAE,EAAE,MAAM,CAAC;QACX,QAAQ,EAAE,MAAM,CAAC;QACjB,IAAI,CAAC,EAAE,MAAM,CAAC;QACd,QAAQ,CAAC,EAAE,MAAM,CAAC;KACnB,CAAC;CACH;AAED,UAAU,2BAA2B;IACnC,MAAM,EAAE,MAAM,CAAC;IACf,EAAE,EAAE,MAAM,CAAC;IACX,IAAI,CAAC,EAAE,KAAK,CAAC;CACd;AAED,MAAM,MAAM,kBAAkB,GAAG;IAC/B,OAAO,EAAE,CACP,KAAK,EAAE,IAAI,CAAC,yBAAyB,EAAE,UAAU,CAAC,GAChD,IAAI,CAAC,kBAAkB,EAAE,MAAM,CAAC,KAC/B,KAAK,CAAC,SAAS,CAAC;IACrB,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,OAAO,EACH,CAAC,CAAC,KAAK,EAAE,IAAI,CAAC,yBAAyB,EAAE,MAAM,CAAC,KAAK,MAAM,CAAC,GAC5D,MAAM,CAAC;CAEZ,GAAG,CAAC,2BAA2B,GAAG,0BAA0B,CAAC,CAAC;AAE/D,qBAAa,UAAU;gBACT,CAAC,EAAE,OAAO;IAItB,SAAS,CAAC,QAAQ,CAAC,CAAC,EAAE,OAAO,CAAC;IAExB,IAAI,CAAC,EACT,IAAI,EACJ,OAAO,EACP,OAAO,EACP,EAAE,EACF,IAAI,EACJ,OAAO,EACP,MAAM,EAAE,cAAc,GACvB,EAAE,kBAAkB;CA+EtB"}
|
|
@@ -1,13 +1,12 @@
|
|
|
1
1
|
import { render } from "@react-email/components";
|
|
2
2
|
import { HTTPException } from "hono/http-exception";
|
|
3
|
-
import DefaultTemplateEmail from "../../emails/default-template.js";
|
|
4
3
|
import { CONFIG } from "../../lib/config.js";
|
|
5
4
|
export class EmailModel {
|
|
6
5
|
constructor(c){
|
|
7
6
|
this.c = c;
|
|
8
7
|
}
|
|
9
8
|
c;
|
|
10
|
-
async send({ html, replyTo, subject, to, content }) {
|
|
9
|
+
async send({ html, replyTo, subject, to, user, content, locale: localeFromArgs }) {
|
|
11
10
|
const core = this.c.get('core');
|
|
12
11
|
const provider = core.email?.adapter;
|
|
13
12
|
if (!provider) {
|
|
@@ -15,7 +14,7 @@ export class EmailModel {
|
|
|
15
14
|
message: 'Email provider not found'
|
|
16
15
|
});
|
|
17
16
|
}
|
|
18
|
-
const locale = 'en';
|
|
17
|
+
const locale = localeFromArgs ?? user?.language ?? 'en';
|
|
19
18
|
const pluginIds = [
|
|
20
19
|
'@vitnode/core',
|
|
21
20
|
...this.c.get('core').plugins.map((plugin)=>plugin.id)
|
|
@@ -34,23 +33,36 @@ export class EmailModel {
|
|
|
34
33
|
...acc,
|
|
35
34
|
...curr
|
|
36
35
|
}), {});
|
|
37
|
-
const htmlContent = html ??
|
|
38
|
-
|
|
39
|
-
locale
|
|
40
|
-
|
|
41
|
-
metadata: {
|
|
42
|
-
...core.metadata,
|
|
43
|
-
url: CONFIG.web.href
|
|
36
|
+
const htmlContent = html ?? content({
|
|
37
|
+
i18n: {
|
|
38
|
+
locale,
|
|
39
|
+
messages
|
|
44
40
|
},
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
41
|
+
templateProps: {
|
|
42
|
+
metadata: {
|
|
43
|
+
...core.metadata,
|
|
44
|
+
url: CONFIG.web.href
|
|
45
|
+
},
|
|
46
|
+
logo: core.email?.logo
|
|
47
|
+
},
|
|
48
|
+
user
|
|
48
49
|
});
|
|
50
|
+
const emailTo = user?.email ?? to;
|
|
51
|
+
if (!emailTo) {
|
|
52
|
+
throw new HTTPException(400, {
|
|
53
|
+
message: 'Email address is required'
|
|
54
|
+
});
|
|
55
|
+
}
|
|
49
56
|
try {
|
|
50
57
|
await provider.sendEmail({
|
|
51
58
|
html: await render(htmlContent),
|
|
52
|
-
to,
|
|
53
|
-
subject
|
|
59
|
+
to: emailTo,
|
|
60
|
+
subject: typeof subject === 'function' ? subject({
|
|
61
|
+
i18n: {
|
|
62
|
+
locale,
|
|
63
|
+
messages
|
|
64
|
+
}
|
|
65
|
+
}) : subject,
|
|
54
66
|
replyTo,
|
|
55
67
|
metadata: core.metadata,
|
|
56
68
|
text: await render(htmlContent, {
|
|
@@ -2,4 +2,8 @@ export declare class PasswordModel {
|
|
|
2
2
|
encryptPassword(password: string): Promise<string>;
|
|
3
3
|
verifyPassword(password: string, hash: string): Promise<boolean>;
|
|
4
4
|
}
|
|
5
|
+
export declare class ForgotPasswordTokenModel {
|
|
6
|
+
generateResetToken(): string;
|
|
7
|
+
hashResetToken(token: string): string;
|
|
8
|
+
}
|
|
5
9
|
//# sourceMappingURL=password.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"password.d.ts","sourceRoot":"","sources":["../../../../src/api/models/password.ts"],"names":[],"mappings":"AAEA,qBAAa,aAAa;IAClB,eAAe,CAAC,QAAQ,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC;IAYlD,cAAc,CAAC,QAAQ,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC,OAAO,CAAC;CAkBvE"}
|
|
1
|
+
{"version":3,"file":"password.d.ts","sourceRoot":"","sources":["../../../../src/api/models/password.ts"],"names":[],"mappings":"AAEA,qBAAa,aAAa;IAClB,eAAe,CAAC,QAAQ,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC;IAYlD,cAAc,CAAC,QAAQ,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC,OAAO,CAAC;CAkBvE;AAED,qBAAa,wBAAwB;IACnC,kBAAkB;IAIlB,cAAc,CAAC,KAAK,EAAE,MAAM;CAG7B"}
|
|
@@ -26,3 +26,11 @@ export class PasswordModel {
|
|
|
26
26
|
});
|
|
27
27
|
}
|
|
28
28
|
}
|
|
29
|
+
export class ForgotPasswordTokenModel {
|
|
30
|
+
generateResetToken() {
|
|
31
|
+
return crypto.randomBytes(32).toString('base64url');
|
|
32
|
+
}
|
|
33
|
+
hashResetToken(token) {
|
|
34
|
+
return crypto.createHash('sha256').update(token).digest('hex');
|
|
35
|
+
}
|
|
36
|
+
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"session-admin.d.ts","sourceRoot":"","sources":["../../../../src/api/models/session-admin.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,MAAM,CAAC;AAYpC,qBAAa,iBAAiB;gBAChB,CAAC,EAAE,OAAO;IAGtB,SAAS,CAAC,QAAQ,CAAC,CAAC,EAAE,OAAO,CAAC;YAEhB,SAAS;IASjB,kBAAkB,CAAC,MAAM,EAAE,MAAM;IAmBjC,qBAAqB,CAAC,MAAM,EAAE,MAAM;;;IAwCpC,aAAa;IAoBb,OAAO
|
|
1
|
+
{"version":3,"file":"session-admin.d.ts","sourceRoot":"","sources":["../../../../src/api/models/session-admin.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,MAAM,CAAC;AAYpC,qBAAa,iBAAiB;gBAChB,CAAC,EAAE,OAAO;IAGtB,SAAS,CAAC,QAAQ,CAAC,CAAC,EAAE,OAAO,CAAC;YAEhB,SAAS;IASjB,kBAAkB,CAAC,MAAM,EAAE,MAAM;IAmBjC,qBAAqB,CAAC,MAAM,EAAE,MAAM;;;IAwCpC,aAAa;IAoBb,OAAO;;;;;;;;;;;;;CAiDd"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"session.d.ts","sourceRoot":"","sources":["../../../../src/api/models/session.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,MAAM,CAAC;AAWpC,qBAAa,YAAY;gBACX,CAAC,EAAE,OAAO;IAGtB,SAAS,CAAC,QAAQ,CAAC,CAAC,EAAE,OAAO,CAAC;YAEhB,SAAS;IASjB,qBAAqB,CAAC,MAAM,EAAE,MAAM;;;IAsCpC,aAAa;IA8Bb,OAAO
|
|
1
|
+
{"version":3,"file":"session.d.ts","sourceRoot":"","sources":["../../../../src/api/models/session.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,MAAM,CAAC;AAWpC,qBAAa,YAAY;gBACX,CAAC,EAAE,OAAO;IAGtB,SAAS,CAAC,QAAQ,CAAC,CAAC,EAAE,OAAO,CAAC;YAEhB,SAAS;IASjB,qBAAqB,CAAC,MAAM,EAAE,MAAM;;;IAsCpC,aAAa;IA8Bb,OAAO;;;;;;;;;;;;;CA0Cd"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"sso.d.ts","sourceRoot":"","sources":["../../../../src/api/models/sso.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,MAAM,CAAC;AAapC,MAAM,WAAW,YAAY;IAC3B,UAAU,EAAE,CACV,IAAI,EAAE,MAAM,KACT,OAAO,CAAC;QAAE,YAAY,EAAE,MAAM,CAAC;QAAC,UAAU,EAAE,MAAM,CAAA;KAAE,CAAC,CAAC;IAC3D,SAAS,EAAE,CAAC,IAAI,EAAE;QAChB,YAAY,EAAE,MAAM,CAAC;QACrB,UAAU,EAAE,MAAM,CAAC;KACpB,KAAK,OAAO,CAAC;QAAE,KAAK,EAAE,MAAM,CAAC;QAAC,EAAE,EAAE,MAAM,CAAC;QAAC,QAAQ,EAAE,MAAM,CAAA;KAAE,CAAC,CAAC;IAC/D,MAAM,EAAE,CAAC,KAAK,EAAE;QAAE,KAAK,EAAE,MAAM,CAAA;KAAE,KAAK,MAAM,CAAC;IAC7C,EAAE,EAAE,MAAM,CAAC;IACX,IAAI,EAAE,MAAM,CAAC;CACd;AAED,eAAO,MAAM,cAAc,GAAI,MAAM,MAAM,WACgB,CAAC;AAE5D,qBAAa,QAAQ;gBACP,CAAC,EAAE,OAAO;IAKtB,OAAO,CAAC,QAAQ,CAAC,CAAC,CAAU;IAC5B,OAAO,CAAC,QAAQ,CAAC,OAAO,CAAiB;IAEzC,OAAO,CAAC,QAAQ,CAAC,UAAU,CA6BzB;IAEI,QAAQ,CAAC,EACb,IAAI,EACJ,UAAU,EACV,KAAK,GACN,EAAE;QACD,IAAI,EAAE,MAAM,CAAC;QACb,UAAU,EAAE,MAAM,CAAC;QACnB,KAAK,EAAE,MAAM,CAAC;KACf,GAAG,OAAO,CAAC;QACV,MAAM,EAAE,MAAM,CAAC;KAChB,CAAC;
|
|
1
|
+
{"version":3,"file":"sso.d.ts","sourceRoot":"","sources":["../../../../src/api/models/sso.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,MAAM,CAAC;AAapC,MAAM,WAAW,YAAY;IAC3B,UAAU,EAAE,CACV,IAAI,EAAE,MAAM,KACT,OAAO,CAAC;QAAE,YAAY,EAAE,MAAM,CAAC;QAAC,UAAU,EAAE,MAAM,CAAA;KAAE,CAAC,CAAC;IAC3D,SAAS,EAAE,CAAC,IAAI,EAAE;QAChB,YAAY,EAAE,MAAM,CAAC;QACrB,UAAU,EAAE,MAAM,CAAC;KACpB,KAAK,OAAO,CAAC;QAAE,KAAK,EAAE,MAAM,CAAC;QAAC,EAAE,EAAE,MAAM,CAAC;QAAC,QAAQ,EAAE,MAAM,CAAA;KAAE,CAAC,CAAC;IAC/D,MAAM,EAAE,CAAC,KAAK,EAAE;QAAE,KAAK,EAAE,MAAM,CAAA;KAAE,KAAK,MAAM,CAAC;IAC7C,EAAE,EAAE,MAAM,CAAC;IACX,IAAI,EAAE,MAAM,CAAC;CACd;AAED,eAAO,MAAM,cAAc,GAAI,MAAM,MAAM,WACgB,CAAC;AAE5D,qBAAa,QAAQ;gBACP,CAAC,EAAE,OAAO;IAKtB,OAAO,CAAC,QAAQ,CAAC,CAAC,CAAU;IAC5B,OAAO,CAAC,QAAQ,CAAC,OAAO,CAAiB;IAEzC,OAAO,CAAC,QAAQ,CAAC,UAAU,CA6BzB;IAEI,QAAQ,CAAC,EACb,IAAI,EACJ,UAAU,EACV,KAAK,GACN,EAAE;QACD,IAAI,EAAE,MAAM,CAAC;QACb,UAAU,EAAE,MAAM,CAAC;QACnB,KAAK,EAAE,MAAM,CAAC;KACf,GAAG,OAAO,CAAC;QACV,MAAM,EAAE,MAAM,CAAC;KAChB,CAAC;IAkEI,YAAY;IA2BZ,MAAM,CAAC,UAAU,EAAE,MAAM;IASzB,WAAW,CAAC,KAAK,EAAE,MAAM;CA+BhC"}
|
|
@@ -55,12 +55,15 @@ export class SSOModel {
|
|
|
55
55
|
});
|
|
56
56
|
return signUpUser;
|
|
57
57
|
}
|
|
58
|
-
// If email exists,
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
providerAccountId: userFromSSO.id,
|
|
62
|
-
userId: userWithEmail.id
|
|
58
|
+
// If email exists, throw an error
|
|
59
|
+
throw new HTTPException(409, {
|
|
60
|
+
message: 'Email already exists'
|
|
63
61
|
});
|
|
62
|
+
// await tx.insert(core_users_sso).values({
|
|
63
|
+
// providerId: providerId,
|
|
64
|
+
// providerAccountId: userFromSSO.id,
|
|
65
|
+
// userId: userWithEmail.id,
|
|
66
|
+
// });
|
|
64
67
|
return {
|
|
65
68
|
userId: userWithEmail.id
|
|
66
69
|
};
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"get-user-by-id.d.ts","sourceRoot":"","sources":["../../../../../src/api/models/user/get-user-by-id.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,MAAM,CAAC;AAMpC,eAAO,MAAM,WAAW,GAAU,WAAW;IAAE,CAAC,EAAE,OAAO,CAAC;IAAC,EAAE,EAAE,MAAM,CAAA;CAAE
|
|
1
|
+
{"version":3,"file":"get-user-by-id.d.ts","sourceRoot":"","sources":["../../../../../src/api/models/user/get-user-by-id.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,MAAM,CAAC;AAMpC,eAAO,MAAM,WAAW,GAAU,WAAW;IAAE,CAAC,EAAE,OAAO,CAAC;IAAC,EAAE,EAAE,MAAM,CAAA;CAAE;;;;;;;;;;;;SAsBtE,CAAC"}
|
|
@@ -11,7 +11,8 @@ export const getUserById = async ({ id, c })=>{
|
|
|
11
11
|
avatarColor: core_users.avatarColor,
|
|
12
12
|
emailVerified: core_users.emailVerified,
|
|
13
13
|
roleId: core_users.roleId,
|
|
14
|
-
birthday: core_users.birthday
|
|
14
|
+
birthday: core_users.birthday,
|
|
15
|
+
language: core_users.language
|
|
15
16
|
}).from(core_users).where(eq(core_users.id, id)).limit(1);
|
|
16
17
|
if (!user) return null;
|
|
17
18
|
return user;
|
|
@@ -44,13 +44,13 @@ export const signUp = async ({ email, name, newsletter, hashedPassword }, c)=>{
|
|
|
44
44
|
}).from(core_users).where(or(eq(core_users.email, email), eq(core_users.nameCode, convertToNameSEO)));
|
|
45
45
|
const findEmail = checkIfUserExist.find((user)=>user.email === email);
|
|
46
46
|
if (findEmail) {
|
|
47
|
-
throw new HTTPException(
|
|
47
|
+
throw new HTTPException(409, {
|
|
48
48
|
message: 'Email already exists'
|
|
49
49
|
});
|
|
50
50
|
}
|
|
51
51
|
const findName = checkIfUserExist.find((user)=>user.name_code === convertToNameSEO);
|
|
52
52
|
if (findName) {
|
|
53
|
-
throw new HTTPException(
|
|
53
|
+
throw new HTTPException(409, {
|
|
54
54
|
message: 'Name already exists'
|
|
55
55
|
});
|
|
56
56
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"user.d.ts","sourceRoot":"","sources":["../../../../src/api/models/user.ts"],"names":[],"mappings":"AAIA,qBAAa,SAAS;IACpB,WAAW
|
|
1
|
+
{"version":3,"file":"user.d.ts","sourceRoot":"","sources":["../../../../src/api/models/user.ts"],"names":[],"mappings":"AAIA,qBAAa,SAAS;IACpB,WAAW;;;;;;;;;;;;;;;cAAe;IAC1B,kBAAkB;;;;;;;OAAsB;IACxC,MAAM;;;;kBAEs3C,CAAC;;;;;;;;;;;;;;OAF72C;CACjB"}
|