@donotdev/core 0.0.17 → 0.0.18

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.
@@ -1,11 +1,11 @@
1
- var Y=(n,e)=>()=>(n&&(e=n(n=0)),e);function V(n,e=null){let t=R[n];if(!t)throw new Error(`Unknown pattern type: ${n}`);return e&&t.framework?{...t,framework:t.framework.map(r=>`${e}/${r}`)}:t}function Z(n){return q[n]||q.base}var U,R,q,K=Y(()=>{"use strict";P();U={SOURCE_ROOT:"packages/core/i18n",SOURCE_LOCALES:"packages/core/i18n/locales",SOURCE_EAGER:"packages/core/i18n/locales/eager",SOURCE_LAZY:"packages/core/i18n/locales/lazy",PUBLISHED_ROOT:"i18n",PUBLISHED_LOCALES:"i18n/locales",PUBLISHED_EAGER:"i18n/locales/eager",PUBLISHED_LAZY:"i18n/locales/lazy"},R={routes:{consumer:["src/**/*Page.tsx","src/pages/**/*Page.tsx"],exclude:["**/node_modules/**","**/dist/**","**/build/**","**/*.test.tsx","**/*.stories.tsx"],extensions:[".tsx"]},css:{consumer:["src/**/*.css"],themes:["src/**/*.css"],extensions:[".css",".scss",".sass"],framework:["packages/ui/src/**/*.css","packages/core/components/src/**/*.css","packages/core/templates/src/**/*.css"]},i18n:{eager:["src/locales/*_*.json"],lazy:["src/**/locales/*_*.json","!src/locales/*_*.json"],framework:{eager:[`${U.SOURCE_EAGER}/*_*.json`],lazy:[`${U.SOURCE_LAZY}/*_*.json`]},extensions:[".json"]},assets:{consumer:["public/**/*"],fallback:["manifest.json"],modern:["logo.svg","favicon.svg","apple-touch-icon.png","android-chrome-192x192.png","android-chrome-512x512.png"],patterns:["favicon.svg","favicon.ico","favicon-*.png","logo.svg","logo.png","logo.webp","logo.avif","apple-touch-icon*.png","android-chrome-*.png","manifest.json"],fonts:["fonts/**/*.woff2","fonts/**/*.woff","fonts/**/*.ttf"],framework:["packages/ui/assets/**/*"]},pwa:{consumer:["public/manifest.json","public/service-worker.js","public/sw.js","public/icon-192x192.png","public/icon-512x512.png","public/favicon.ico","public/favicon.svg","public/apple-touch-icon.png","public/logo.svg"],exclude:["**/node_modules/**","**/dist/**","**/build/**"],extensions:[".json",".js",".png",".svg",".ico"],framework:["packages/ui/assets/**/*"]},globalIgnore:["**/node_modules/**","**/dist/**","**/build/**","**/.git/**","**/coverage/**","**/test/**"]},q={base:{absolute:!0,onlyFiles:!0,ignore:R.globalIgnore},css:{absolute:!0,onlyFiles:!0,ignore:[...R.globalIgnore,"**/*.test.css"]},routes:{absolute:!0,onlyFiles:!0,ignore:[...R.globalIgnore,"**/*.test.tsx","**/*.stories.tsx"]},i18n:{absolute:!0,onlyFiles:!0,ignore:R.globalIgnore},assets:{absolute:!0,onlyFiles:!0,ignore:R.globalIgnore}}});import{Buffer as w}from"node:buffer";import{createRequire as pe}from"node:module";import{dirname as fe,resolve as _e}from"node:path";import y from"node:process";import{fileURLToPath as de}from"node:url";var he,F,A,P=Y(()=>{"use strict";he=pe(import.meta.url),F=de(import.meta.url),A=fe(F);typeof globalThis<"u"&&(globalThis.require=he,globalThis.__filename=F,globalThis.__dirname=A,globalThis.Buffer=w,globalThis.process=y,typeof global>"u"&&(globalThis.global=globalThis))});P();P();P();import W from"node:fs";import b from"node:path";import{fileURLToPath as me}from"node:url";var ge=me(import.meta.url),Ce=b.dirname(ge);function X(){let n=y.cwd(),e=10;for(let t=0;t<e;t++){let r=b.join(n,"package.json");if(W.existsSync(r))try{let o=JSON.parse(W.readFileSync(r,"utf8")),s=o.workspaces&&Array.isArray(o.workspaces);if(s&&o.workspaces.some(c=>c==="packages/**"||c.startsWith("packages/"))&&(W.existsSync(b.join(n,"packages","core"))||W.existsSync(b.join(n,"packages","functions"))))return{type:"dndev",root:n};if(s&&o.workspaces.some(c=>c.includes("dndev/packages"))){let f=o.workspaces.find(d=>d.includes("dndev/packages")).replace(/\/packages.*$/,""),m=b.resolve(n,f);if(W.existsSync(b.join(m,"packages","core")))return{type:"dndev",root:m}}}catch{}let i=b.dirname(n);if(i===n)break;n=i}return{type:"npm",root:y.cwd()}}function ve(n){return n.type==="dndev"?n.root:null}function Q(n){let e={};if(n.type==="dndev"){let t=ve(n);t&&(e["@donotdev/types"]=b.join(t,"packages","core","types","src"),e["@donotdev/functions"]=b.join(t,"packages","functions","src"),e["@donotdev/utils"]=b.join(t,"packages","core","utils","src"),e["@donotdev/schemas"]=b.join(t,"packages","core","schemas","src"),e["@donotdev/core"]=b.join(t,"packages","core"))}return e}P();import{createRequire as ye}from"node:module";import{resolve as B,join as x,dirname as E,relative as J,normalize as Pe,sep as ee,extname as be}from"node:path";import{fileURLToPath as ke}from"node:url";import*as p from"node:fs";K();import we from"fast-glob";var _={getGlobOptionsFor:Z||void 0,SCAN_PATTERNS:R||void 0,getPatternsFor:V||void 0,I18N_PATHS:U||void 0},g={error:(n,e)=>{},warn:(n,e)=>{},info:n=>{}};function te(n,e){return n().catch(t=>{throw new Error(`${e}: ${t instanceof Error?t.message:String(t)}`)})}var re={CLI:"packages/cli",COMPONENTS:"packages/core/components",CONFIG:"packages/core/config",CORE:"packages/core",CRUD:"packages/core/crud",FEATURES:"packages/features",HOOKS:"packages/core/hooks",I18N:"packages/core/i18n",SCHEMAS:"packages/core/schemas",STORES:"packages/core/stores",TEMPLATES:"packages/templates",TOOLING:"packages/tooling",TYPES:"packages/core/types",UI:"packages/ui",UTILS:"packages/core/utils",AUTH:"packages/features/auth",BILLING:"packages/features/billing",OAUTH:"packages/features/oauth",FIREBASE:"packages/providers/firebase",FUNCTIONS:"packages/functions"},M=class n{static _instance=null;options;_repoRoot;_appRoot=null;static getInstance(e={}){return n._instance||(n._instance=new n(e)),n._instance}static _reset(){n._instance=null}constructor(e={}){if(n._instance)return n._instance;this.options={maxLevels:e.maxLevels??10,customMarkers:e.customMarkers||[],cache:e.cache??!1,debug:e.debug??!1};try{let t=y.cwd();if(!t)throw new Error("PathResolver: process.cwd() returned undefined. This should never happen.");this._repoRoot=this._findRepoRoot(t)}catch(t){throw new Error(`PathResolver constructor failed: ${t instanceof Error?t.message:String(t)}. cwd: ${y.cwd()}`)}this._appRoot=null,n._instance=this}normalizePath(e){if(!e)return"";try{return Pe(e).split(ee).join("/")}catch{return String(e).split(ee).join("/")}}getRelativePath(e){let t=this.getAppRoot(),r=J(t,e);return this.normalizePath(r)}getBasename(e){if(!e)return"";let r=this.normalizePath(e).split("/");return r[r.length-1]||""}getDirname(e){return e?this.normalizePath(E(e)):""}resolvePackage(e,t=null){try{let r=t||this.getAppRoot(),o=ye(x(r,"package.json")).resolve(e);return this.normalizePath(o)}catch{return null}}resolveFrameworkPackage(e,t=null){let r=this.resolvePackage(`${e}/package.json`,t);if(r)return this.getDirname(r);if(this.isMonorepo()&&e.startsWith("@donotdev/")){let s=e.replace("@donotdev/",""),a=this.resolveRepoPath(`packages/${s}`);if(this.pathExists(a))return a;if(["auth","billing","crud","oauth"].includes(s)){let l=this.resolveRepoPath(`packages/features/${s}`);if(this.pathExists(l))return l}if(s==="firebase"){let l=this.resolveRepoPath(`packages/providers/${s}`);if(this.pathExists(l))return l}}let i=this.resolveAppPath(`node_modules/${e}`);if(this.pathExists(i))return i;let o=this.resolveRepoPath(`node_modules/${e}`);return this.pathExists(o)?o:null}resolvePackageAsset(e,t=null){return this.resolvePackage(e,t)}resolveAppPath(e){let t=this.getAppRoot(),r=B(t,e);return this.normalizePath(r)}resolveRepoPath(e){let t=this.getRepoRoot(),r=this.normalizePath(e),i=B(t,r);return this.normalizePath(i)}resolvePath(e,t){let r=this.normalizePath(t),i=this.normalizePath(e),o=B(r,i);return this.normalizePath(o)}createImportPath(e){return"./"+this.getRelativePath(e)}getFileInfo(e){try{let t=p.statSync(e);return{absolutePath:this.normalizePath(e),relativePath:this.getRelativePath(e),importPath:this.createImportPath(e),size:t.size,isFile:t.isFile(),isDirectory:t.isDirectory()}}catch{return null}}_detectFormat(e,t){return t&&t!=="auto"?t:be(e).toLowerCase()===".json"?"json":"text"}async read(e,t={}){let{format:r="auto",encoding:i="utf8"}=t,o=this._detectFormat(e,r);try{if(o==="buffer")return await p.promises.readFile(e);let s=await p.promises.readFile(e,i),a=this.stripBom(s);return o==="json"?JSON.parse(a):a}catch(s){return this.options.debug&&g.warn(`Failed to read file: ${e}`,s),null}}readSync(e,t={}){let{format:r="auto",encoding:i="utf8"}=t,o=this._detectFormat(e,r);try{if(o==="buffer")return p.readFileSync(e);let s=p.readFileSync(e,i),a=this.stripBom(s);return o==="json"?JSON.parse(a):a}catch(s){return this.options.debug&&g.warn(`Failed to read file: ${e}`,s),null}}async write(e,t,r={}){let{format:i="auto",overwrite:o=!1,dryRun:s=!1,verbose:a=!1}=r,l=this.normalizePath(e),h=this.normalizePath(E(l)),c=this.pathExists(l);if(c&&!o)return a&&g.info(`Skipping existing file: ${l}`),!1;if(s)return g.info(`[DRY RUN] Would write file: ${l}`),!0;try{await p.promises.mkdir(h,{recursive:!0})}catch(d){if(d?.code!=="EEXIST")throw d}let f=this._detectFormat(e,i),m;w.isBuffer(t)?m=t:f==="json"&&typeof t=="object"?m=JSON.stringify(t,null,2):m=String(t);try{return await te(async()=>(w.isBuffer(m)?await p.promises.writeFile(l,m):await p.promises.writeFile(l,m,"utf8"),a&&g.info(`${c?"Updated":"Created"} file: ${l}`),!0),`Failed to write file: ${l}`)}catch{return!1}}writeSync(e,t,r={}){let{format:i="auto",overwrite:o=!1,dryRun:s=!1,verbose:a=!1}=r,l=this.normalizePath(e),h=this.normalizePath(E(l)),c=this.pathExists(l);if(c&&!o)return a&&g.info(`Skipping existing file: ${l}`),!1;if(s)return g.info(`[DRY RUN] Would write file: ${l}`),!0;try{p.mkdirSync(h,{recursive:!0})}catch(d){if(d?.code!=="EEXIST")throw d}let f=this._detectFormat(e,i),m;w.isBuffer(t)?m=t:f==="json"&&typeof t=="object"?m=JSON.stringify(t,null,2):m=String(t);try{return w.isBuffer(m)?p.writeFileSync(l,m):p.writeFileSync(l,m,"utf8"),a&&g.info(`${c?"Updated":"Created"} file: ${l}`),!0}catch(d){throw new Error(`Failed to write file: ${l}: ${d instanceof Error?d.message:String(d)}`)}}async copy(e,t,r={}){let{overwrite:i=!1,dryRun:o=!1,verbose:s=!1}=r,a=this.normalizePath(t),l=this.pathExists(a);if(l&&!i)return s&&g.info(`Skipping existing file: ${a}`),!1;if(o)return g.info(`[DRY RUN] Would copy file: ${a}`),!0;let h=this.normalizePath(E(a));try{await p.promises.mkdir(h,{recursive:!0})}catch(c){if(c?.code!=="EEXIST")throw c}try{return await te(async()=>(await p.promises.copyFile(e,a),s&&g.info(`${l?"Updated":"Created"} file: ${a}`),!0),`Failed to copy file from ${e} to ${a}`)}catch{return!1}}copySync(e,t,r={}){let{overwrite:i=!1,dryRun:o=!1,verbose:s=!1}=r,a=this.normalizePath(t),l=this.pathExists(a);if(l&&!i)return s&&g.info(`Skipping existing file: ${a}`),!1;if(o)return g.info(`[DRY RUN] Would copy file: ${a}`),!0;let h=this.normalizePath(E(a));try{p.mkdirSync(h,{recursive:!0})}catch(c){if(c?.code!=="EEXIST")throw c}try{return p.copyFileSync(e,a),s&&g.info(`${l?"Updated":"Created"} file: ${a}`),!0}catch{return!1}}pathExists(e,t=!1){try{return p.existsSync(e)}catch(r){return t||g.error(`Error checking path existence: ${e}`,r),!1}}mkdir(e){try{let t=e.startsWith("/")||e.match(/^[A-Z]:/)?this.normalizePath(e):this.resolveAppPath(e);return p.existsSync(t)||p.mkdirSync(t,{recursive:!0}),!0}catch{return!1}}readdirSync(e,t){try{return p.readdirSync(e,t)}catch(r){return this.options.debug&&g.warn(`Failed to read directory: ${e}`,r),t&&typeof t=="object"&&"withFileTypes"in t&&t.withFileTypes?[]:[]}}statSync(e){try{return p.statSync(e)}catch(t){return this.options.debug&&g.warn(`Failed to stat file: ${e}`,t),null}}lstatSync(e){try{return p.lstatSync(e)}catch(t){return this.options.debug&&g.warn(`Failed to lstat file: ${e}`,t),null}}async ensureDir(e){try{await p.promises.mkdir(e,{recursive:!0})}catch(t){if(t?.code!=="EEXIST")throw t}}ensureDirSync(e){try{p.mkdirSync(e,{recursive:!0})}catch(t){if(t?.code!=="EEXIST")throw t}}async remove(e){await p.promises.rm(e,{recursive:!0,force:!0})}removeSync(e){p.rmSync(e,{recursive:!0,force:!0})}async readdir(e,t){return p.promises.readdir(e,t)}stripBom(e){return e.charCodeAt(0)===65279?e.slice(1):e}getRepoRoot(){return this._repoRoot||y.cwd()}getAppRoot(){return this._appRoot?this._appRoot:this._repoRoot}setAppRoot(e){if(!e)throw new Error("PathResolver.setAppRoot: root cannot be undefined or null");this._appRoot=this.normalizePath(e)}isMonorepo(){let e=x(this._repoRoot,"packages");return this.pathExists(e)}isWithinApp(e){let t=this.normalizePath(B(e)),r=this.getAppRoot(),i=J(r,t),o=this.normalizePath(i);return!o.startsWith("../")&&!o.startsWith("/")}async findFiles(e,t,r={}){let i=this.normalizePath(x(e,t)),o=this.getAppRoot(),s=this.normalizePath(o),a=i.startsWith(s)?i.slice(s.length+1):i,l={absolute:!0,onlyFiles:!0,braceExpansion:!0,extglob:!0,globstar:!0,cwd:o,ignore:_.SCAN_PATTERNS?.globalIgnore||["**/node_modules/**","**/dist/**","**/build/**","**/.git/**"]};return await this._globWithNormalization([a],{...l,...r})}clearCache(){}async _resolveFrameworkI18nPattern(e){let t=_.I18N_PATHS;if(!t)return null;let r=e.replace(t.SOURCE_ROOT+"/",""),i=this.resolveFrameworkPackage("@donotdev/core");if(!i)return null;let o=this.normalizePath(x(i,t.PUBLISHED_ROOT,r)),s=o.replace(/\/[^/]*\*.*$/,"");return this.pathExists(s),o}async _globWithNormalization(e,t){return(await we(e,t)).map(i=>{let o=typeof i=="string"?i:i.path;return this.normalizePath(o)})}async resolveFiles(e,t="css"){if(!e||typeof e!="object")return{frameworkFiles:[],consumerFiles:[]};if(t==="i18n")return{frameworkFiles:[],consumerFiles:[]};if(Array.isArray(e.framework)||(e.framework=[]),!Array.isArray(e.consumer))return{frameworkFiles:[],consumerFiles:[]};let r=[...e.framework,...e.consumer];for(let c of r)if(typeof c!="string"||c.trim()==="")return{frameworkFiles:[],consumerFiles:[]};let i=this.getAppRoot(),o=_.getGlobOptionsFor?_.getGlobOptionsFor(t):{ignore:["**/node_modules/**","**/dist/**","**/build/**"]},s=this.normalizePath(i),a=e.framework.map(c=>{let f=this.normalizePath(c);return f.startsWith(s)?f.slice(s.length+1):f}),l=e.consumer.map(c=>{let f=this.normalizePath(c);return f.startsWith(s)?f.slice(s.length+1):f}),h={...o,onlyFiles:!0,absolute:!0,braceExpansion:!0,extglob:!0,globstar:!0,cwd:i};try{let c=a.length>0?await this._globWithNormalization(a,h):[],f=await this._globWithNormalization(l,h);return{frameworkFiles:c,consumerFiles:f}}catch{return this.options.debug,{frameworkFiles:[],consumerFiles:[]}}}async resolvePatterns(e){if(!_.getPatternsFor)return{framework:[],consumer:[],all:[]};let t=this.getAppRoot(),r=this.getRepoRoot();if(e==="i18n"&&(!t||t===r))throw new Error(`Cannot resolve i18n patterns: appRoot not set (appRoot: ${t}, repoRoot: ${r}). Ensure configResolved hook has run before discovery.`);let i=_.getPatternsFor(e),o=this.isMonorepo();if(e==="i18n"){let l=i,h={eager:l.eager.map(c=>c.startsWith("!")?"!"+this.resolveAppPath(c.slice(1)):this.resolveAppPath(c)),lazy:l.lazy.map(c=>c.startsWith("!")?"!"+this.resolveAppPath(c.slice(1)):this.resolveAppPath(c)),framework:{eager:o?(l.framework?.eager||[]).map(c=>this.resolveRepoPath(c)).filter(Boolean):await Promise.all((l.framework?.eager||[]).map(c=>this._resolveFrameworkI18nPattern(c))).then(c=>c.filter(Boolean)),lazy:o?(l.framework?.lazy||[]).map(c=>this.resolveRepoPath(c)).filter(Boolean):await Promise.all((l.framework?.lazy||[]).map(c=>this._resolveFrameworkI18nPattern(c))).then(c=>c.filter(Boolean))},all:[]};return h.all=[...h.eager,...h.lazy,...h.framework.eager,...h.framework.lazy],h}let s=i,a={framework:o?(s.framework||[]).map(l=>this.resolveRepoPath(l)).filter(Boolean):[],consumer:(s.consumer||[]).map(l=>this.resolveAppPath(l)),all:[]};return a.all=[...a.consumer,...a.framework],a}getEmptyModulePath(e=!1){if(e)return"@donotdev/core/empty";let t=this.resolvePackage("@donotdev/core/empty");if(t)return t;let r=E(ke(import.meta.url));return this.normalizePath(x(r,"../empty.js"))}_findRepoRoot(e){let t=this.normalizePath(e),r=0,i=this.options.maxLevels;for(;r<i;){let o=this.normalizePath(x(t,re.TOOLING)),s=this.normalizePath(x(t,re.CORE));if(this.pathExists(o)&&this.pathExists(s))return t;let a=x(t,"apps");if(this.pathExists(a)&&this.statSync(a)?.isDirectory())return this.normalizePath(t);let l=this.normalizePath(x(t,"package.json"));if(this.pathExists(l)&&this.normalizePath(E(t))===t)return t;let h=this.normalizePath(E(t));if(h===t)break;t=h,r++}return this.normalizePath(e)}};function se(n={}){let{entry:e="src/index.ts",outDir:t="lib",minify:r=!1,sourcemap:i=!0,platform:o="firebase",workspace:s,bundleWorkspaceDeps:a=!1,importFramework:l=!1,external:h=!1,...c}=n,f=M.getInstance(),m=Q(s),d={entryPoints:[e],bundle:!0,platform:"node",target:"node20",format:"esm",outdir:t,outExtension:{".js":".js"},minify:r,sourcemap:i,metafile:!0,logLevel:"info",loader:{".ts":"ts",".tsx":"tsx",".css":"empty"},keepNames:!0,treeShaking:!0,...c};a&&Object.keys(m).length>0&&(d.alias=Object.fromEntries(Object.entries(m).map(([k,u])=>[k,f.normalizePath(u)]))),d.mainFields=["module","main"],d.conditions=["import","module","node"];let ce=["fs","path","crypto","util","stream","events","buffer","url","querystring","http","https","zlib","os","child_process","assert","constants","domain","punycode","string_decoder","timers","tty","vm","worker_threads","perf_hooks","async_hooks"],G=[];if(a)try{let k=s?.root||y.cwd(),u=y.cwd(),v=10;for(let S=0;S<v;S++){let H=f.normalizePath(`${u}/package.json`);if(f.pathExists(H)){let z=f.readSync(H,{format:"json"});if(z&&Array.isArray(z.workspaces)){k=f.normalizePath(u);for(let $ of z.workspaces)$==="apps/*"||$==="functions"||!$.includes("*")&&!$.includes("/")&&G.push($);break}}let L=f.getDirname(u);if(L===u)break;u=L}}catch{}let le={name:"external-node-modules",setup(k){k.onResolve({filter:/^firebase($|\/)/},u=>{if(u.path==="firebase-admin"||u.path.startsWith("firebase-admin/")||u.path==="firebase-functions"||u.path.startsWith("firebase-functions/"))return null;let v;if(s?.type==="dndev"&&s.root)v=f.normalizePath(`${s.root}/packages/core/config/functions/firebase-stub.js`);else{let S=import.meta.url,L=new URL(S).pathname.replace(/^\/([A-Z]:)/i,"$1"),z=f.getDirname(L);v=f.normalizePath(`${z}/firebase-stub.js`)}return{path:v}}),k.onResolve({filter:/.*/},u=>{if(u.kind==="entry-point")return null;if(u.path.match(/@donotdev\/functions\/.+/)&&a&&s?.type==="dndev"){let v=u.path.replace("@donotdev/functions/","");return{path:f.normalizePath(`${s.root}/packages/functions/src/${v}/index.ts`)}}if(u.path==="@donotdev/utils")return s?.type==="dndev"?{path:f.normalizePath(`${s.root}/packages/core/utils/src/server/index.ts`)}:k.resolve("@donotdev/utils/server",{kind:u.kind,resolveDir:u.resolveDir});if(u.path.match(/@donotdev\/utils\/.+/)&&s?.type==="dndev"){let v=u.path.replace("@donotdev/utils/","");return{path:f.normalizePath(`${s.root}/packages/core/utils/src/${v}/index.ts`)}}if(u.path==="@donotdev/core")return s?.type==="dndev"?{path:f.normalizePath(`${s.root}/packages/core/server.ts`)}:k.resolve("@donotdev/core/server",{kind:u.kind,resolveDir:u.resolveDir});if(u.path.match(/@donotdev\/core\/.+/)&&a&&s?.type==="dndev"){let v=u.path.replace("@donotdev/core/","");return{path:f.normalizePath(`${s.root}/packages/core/${v}.ts`)}}if(u.path==="firebase-admin"||u.path.startsWith("firebase-admin/")||u.path==="firebase-functions"||u.path.startsWith("firebase-functions/"))return{path:u.path,external:!0};if(u.path.match(/@donotdev\/core\/.+/)&&a&&s?.type==="dndev"){let v=u.path.replace("@donotdev/core/","");return{path:f.normalizePath(`${s.root}/packages/core/${v}.ts`)}}if(u.path.startsWith("@donotdev/")||u.path==="valibot"||u.path.startsWith("valibot/"))return null;if(G.length>0){let v=u.path.split("/")[0];if(G.includes(v))return null}return u.path.startsWith(".")||u.path.startsWith("/")?null:{path:u.path,external:!0}})}};if(d.external=[...ce,"firebase-admin","firebase-functions"],d.plugins=[le,...d.plugins||[]],d.define={"process.env.NODE_ENV":JSON.stringify(y.env.NODE_ENV||"production"),...d.define||{}},l&&s.type==="dndev"){let k=s.root,u=f.normalizePath(`${k}/functions/lib`);d.alias={...d.alias,"@donotdev/functions":u}}return o==="framework"&&(d.entryPoints={"firebase/index":"src/firebase/index.ts","vercel/api/index":"src/vercel/api/index.ts","shared/index":"src/shared/index.ts"}),d}P();var oe=["create","get","list","listCard","update","delete"];function ne(n,e=0){let t=" ".repeat(e),r="";for(let[i,o]of Object.entries(n))if(o!=null)if(typeof o=="object"&&!Array.isArray(o))Object.keys(o).length===0?r+=`${t}${i}: {}
2
- `:r+=`${t}${i}:
3
- ${ne(o,e+1)}`;else if(Array.isArray(o))if(o.length===0)r+=`${t}${i}: []
4
- `;else{r+=`${t}${i}:
5
- `;for(let s of o)r+=`${t} - ${s}
6
- `}else r+=`${t}${i}: ${o}
7
- `;return r}function ie(n){let e=n.defaults||{},t=e.labels||{},r={};for(let[o,s]of Object.entries(n.functions||{})){let a={...t,...s.labels};s.category&&(a.category=s.category),r[o]={region:s.region||e.region||["us-central1"],platform:s.platform||e.platform||"gcfv2",entryPoint:s.entryPoint||o,labels:a},s.trigger==="http"?r[o].httpsTrigger={}:r[o].callableTrigger={}}if(n.crud?.entities)for(let o of n.crud.entities)for(let s of oe){let a=`${s}_${o}`;r[a]={region:e.region||["us-central1"],platform:e.platform||"gcfv2",callableTrigger:{},entryPoint:a,labels:{...t,category:"crud"}}}return`# Firebase Functions Configuration
1
+ import F from"node:fs";import y from"node:path";import{fileURLToPath as Z}from"node:url";var K=Z(import.meta.url),le=y.dirname(K);function D(){let i=process.cwd(),e=10;for(let t=0;t<e;t++){let r=y.join(i,"package.json");if(F.existsSync(r))try{let s=JSON.parse(F.readFileSync(r,"utf8")),o=s.workspaces&&Array.isArray(s.workspaces);if(o&&s.workspaces.some(c=>c==="packages/**"||c.startsWith("packages/"))&&(F.existsSync(y.join(i,"packages","core"))||F.existsSync(y.join(i,"packages","functions"))))return{type:"dndev",root:i};if(o&&s.workspaces.some(c=>c.includes("dndev/packages"))){let f=s.workspaces.find(d=>d.includes("dndev/packages")).replace(/\/packages.*$/,""),m=y.resolve(i,f);if(F.existsSync(y.join(m,"packages","core")))return{type:"dndev",root:m}}}catch{}let n=y.dirname(i);if(n===i)break;i=n}return{type:"npm",root:process.cwd()}}function X(i){return i.type==="dndev"?i.root:null}function I(i){let e={};if(i.type==="dndev"){let t=X(i);t&&(e["@donotdev/types"]=y.join(t,"packages","core","types","src"),e["@donotdev/functions"]=y.join(t,"packages","functions","src"),e["@donotdev/utils"]=y.join(t,"packages","core","utils","src"),e["@donotdev/schemas"]=y.join(t,"packages","core","schemas","src"),e["@donotdev/core"]=y.join(t,"packages","core"))}return e}import*as p from"node:fs";import"node:fs";import{createRequire as ee}from"node:module";import{resolve as z,join as P,dirname as x,relative as L,normalize as te,sep as U,extname as re}from"node:path";import{fileURLToPath as oe}from"node:url";import se from"fast-glob";var _={SOURCE_ROOT:"packages/core/i18n",SOURCE_LOCALES:"packages/core/i18n/locales",SOURCE_EAGER:"packages/core/i18n/locales/eager",SOURCE_LAZY:"packages/core/i18n/locales/lazy",PUBLISHED_ROOT:"i18n",PUBLISHED_LOCALES:"i18n/locales",PUBLISHED_EAGER:"i18n/locales/eager",PUBLISHED_LAZY:"i18n/locales/lazy"},w={routes:{consumer:["src/**/*Page.tsx","src/pages/**/*Page.tsx"],exclude:["**/node_modules/**","**/dist/**","**/build/**","**/*.test.tsx","**/*.stories.tsx"],extensions:[".tsx"]},css:{consumer:["src/**/*.css"],themes:["src/**/*.css"],extensions:[".css",".scss",".sass"],framework:["packages/ui/src/**/*.css","packages/core/components/src/**/*.css","packages/core/templates/src/**/*.css"]},i18n:{eager:["src/locales/*_*.json"],lazy:["src/**/locales/*_*.json","!src/locales/*_*.json","../../entities/locales/*_*.json"],additional:[],framework:{eager:[`${_.SOURCE_EAGER}/*_*.json`],lazy:[`${_.SOURCE_LAZY}/*_*.json`]},extensions:[".json"]},assets:{consumer:["public/**/*"],fallback:["manifest.json"],modern:["logo.svg","favicon.svg","apple-touch-icon.png","android-chrome-192x192.png","android-chrome-512x512.png"],patterns:["favicon.svg","favicon.ico","favicon-*.png","logo.svg","logo.png","logo.webp","logo.avif","apple-touch-icon*.png","android-chrome-*.png","manifest.json"],fonts:["fonts/**/*.woff2","fonts/**/*.woff","fonts/**/*.ttf"],framework:["packages/ui/assets/**/*"]},pwa:{consumer:["public/manifest.json","public/service-worker.js","public/sw.js","public/icon-192x192.png","public/icon-512x512.png","public/favicon.ico","public/favicon.svg","public/apple-touch-icon.png","public/logo.svg"],exclude:["**/node_modules/**","**/dist/**","**/build/**"],extensions:[".json",".js",".png",".svg",".ico"],framework:["packages/ui/assets/**/*"]},globalIgnore:["**/node_modules/**","**/dist/**","**/build/**","**/.git/**","**/coverage/**","**/test/**"]};var T={base:{absolute:!0,onlyFiles:!0,ignore:w.globalIgnore},css:{absolute:!0,onlyFiles:!0,ignore:[...w.globalIgnore,"**/*.test.css"]},routes:{absolute:!0,onlyFiles:!0,ignore:[...w.globalIgnore,"**/*.test.tsx","**/*.stories.tsx"]},i18n:{absolute:!0,onlyFiles:!0,ignore:w.globalIgnore},assets:{absolute:!0,onlyFiles:!0,ignore:w.globalIgnore}};function C(i,e=null){let t=w[i];if(!t)throw new Error(`Unknown pattern type: ${i}`);return e&&t.framework?{...t,framework:t.framework.map(r=>`${e}/${r}`)}:t}function N(i){return T[i]||T.base}var R={getGlobOptionsFor:N||void 0,SCAN_PATTERNS:w||void 0,getPatternsFor:C||void 0,I18N_PATHS:_||void 0},g={error:(i,e)=>{},warn:(i,e)=>{},info:i=>{}};function W(i,e){return i().catch(t=>{throw new Error(`${e}: ${t instanceof Error?t.message:String(t)}`)})}var B={CLI:"packages/cli",COMPONENTS:"packages/core/components",CONFIG:"packages/core/config",CORE:"packages/core",CRUD:"packages/core/crud",FEATURES:"packages/features",HOOKS:"packages/core/hooks",I18N:"packages/core/i18n",SCHEMAS:"packages/core/schemas",STORES:"packages/core/stores",TEMPLATES:"packages/templates",TOOLING:"packages/tooling",TYPES:"packages/core/types",UI:"packages/ui",UTILS:"packages/core/utils",AUTH:"packages/features/auth",BILLING:"packages/features/billing",OAUTH:"packages/features/oauth",FIREBASE:"packages/providers/firebase",FUNCTIONS:"packages/functions"},O=class i{static _instance=null;options;_repoRoot;_appRoot=null;static getInstance(e={}){return i._instance||(i._instance=new i(e)),i._instance}static _reset(){i._instance=null}constructor(e={}){if(i._instance)return i._instance;this.options={maxLevels:e.maxLevels??10,customMarkers:e.customMarkers||[],cache:e.cache??!1,debug:e.debug??!1};try{let t=process.cwd();if(!t)throw new Error("PathResolver: process.cwd() returned undefined. This should never happen.");this._repoRoot=this._findRepoRoot(t)}catch(t){throw new Error(`PathResolver constructor failed: ${t instanceof Error?t.message:String(t)}. cwd: ${process.cwd()}`)}this._appRoot=null,i._instance=this}normalizePath(e){if(!e)return"";try{return te(e).split(U).join("/")}catch{return String(e).split(U).join("/")}}getRelativePath(e){let t=this.getAppRoot(),r=L(t,e);return this.normalizePath(r)}getBasename(e){if(!e)return"";let r=this.normalizePath(e).split("/");return r[r.length-1]||""}getDirname(e){return e?this.normalizePath(x(e)):""}resolvePackage(e,t=null){try{let r=t||this.getAppRoot(),s=ee(P(r,"package.json")).resolve(e);return this.normalizePath(s)}catch{return null}}resolveFrameworkPackage(e,t=null){let r=this.resolvePackage(`${e}/package.json`,t);if(r)return this.getDirname(r);if(this.isMonorepo()&&e.startsWith("@donotdev/")){let o=e.replace("@donotdev/",""),a=this.resolveRepoPath(`packages/${o}`);if(this.pathExists(a))return a;if(["auth","billing","crud","oauth"].includes(o)){let l=this.resolveRepoPath(`packages/features/${o}`);if(this.pathExists(l))return l}if(o==="firebase"){let l=this.resolveRepoPath(`packages/providers/${o}`);if(this.pathExists(l))return l}}let n=this.resolveAppPath(`node_modules/${e}`);if(this.pathExists(n))return n;let s=this.resolveRepoPath(`node_modules/${e}`);return this.pathExists(s)?s:null}resolvePackageAsset(e,t=null){return this.resolvePackage(e,t)}resolveAppPath(e){let t=this.getAppRoot(),r=z(t,e);return this.normalizePath(r)}resolveRepoPath(e){let t=this.getRepoRoot(),r=this.normalizePath(e),n=z(t,r);return this.normalizePath(n)}resolvePath(e,t){let r=this.normalizePath(t),n=this.normalizePath(e),s=z(r,n);return this.normalizePath(s)}createImportPath(e){return"./"+this.getRelativePath(e)}getFileInfo(e){try{let t=p.statSync(e);return{absolutePath:this.normalizePath(e),relativePath:this.getRelativePath(e),importPath:this.createImportPath(e),size:t.size,isFile:t.isFile(),isDirectory:t.isDirectory()}}catch{return null}}_detectFormat(e,t){return t&&t!=="auto"?t:re(e).toLowerCase()===".json"?"json":"text"}async read(e,t={}){let{format:r="auto",encoding:n="utf8"}=t,s=this._detectFormat(e,r);try{if(s==="buffer")return await p.promises.readFile(e);let o=await p.promises.readFile(e,n),a=this.stripBom(o);return s==="json"?JSON.parse(a):a}catch(o){return this.options.debug&&g.warn(`Failed to read file: ${e}`,o),null}}readSync(e,t={}){let{format:r="auto",encoding:n="utf8"}=t,s=this._detectFormat(e,r);try{if(s==="buffer")return p.readFileSync(e);let o=p.readFileSync(e,n),a=this.stripBom(o);return s==="json"?JSON.parse(a):a}catch(o){return this.options.debug&&g.warn(`Failed to read file: ${e}`,o),null}}async write(e,t,r={}){let{format:n="auto",overwrite:s=!1,dryRun:o=!1,verbose:a=!1}=r,l=this.normalizePath(e),h=this.normalizePath(x(l)),c=this.pathExists(l);if(c&&!s)return a&&g.info(`Skipping existing file: ${l}`),!1;if(o)return g.info(`[DRY RUN] Would write file: ${l}`),!0;try{await p.promises.mkdir(h,{recursive:!0})}catch(d){if(d?.code!=="EEXIST")throw d}let f=this._detectFormat(e,n),m;Buffer.isBuffer(t)?m=t:f==="json"&&typeof t=="object"?m=JSON.stringify(t,null,2):m=String(t);try{return await W(async()=>(Buffer.isBuffer(m)?await p.promises.writeFile(l,m):await p.promises.writeFile(l,m,"utf8"),a&&g.info(`${c?"Updated":"Created"} file: ${l}`),!0),`Failed to write file: ${l}`)}catch{return!1}}writeSync(e,t,r={}){let{format:n="auto",overwrite:s=!1,dryRun:o=!1,verbose:a=!1}=r,l=this.normalizePath(e),h=this.normalizePath(x(l)),c=this.pathExists(l);if(c&&!s)return a&&g.info(`Skipping existing file: ${l}`),!1;if(o)return g.info(`[DRY RUN] Would write file: ${l}`),!0;try{p.mkdirSync(h,{recursive:!0})}catch(d){if(d?.code!=="EEXIST")throw d}let f=this._detectFormat(e,n),m;Buffer.isBuffer(t)?m=t:f==="json"&&typeof t=="object"?m=JSON.stringify(t,null,2):m=String(t);try{return Buffer.isBuffer(m)?p.writeFileSync(l,m):p.writeFileSync(l,m,"utf8"),a&&g.info(`${c?"Updated":"Created"} file: ${l}`),!0}catch(d){throw new Error(`Failed to write file: ${l}: ${d instanceof Error?d.message:String(d)}`)}}async copy(e,t,r={}){let{overwrite:n=!1,dryRun:s=!1,verbose:o=!1}=r,a=this.normalizePath(t),l=this.pathExists(a);if(l&&!n)return o&&g.info(`Skipping existing file: ${a}`),!1;if(s)return g.info(`[DRY RUN] Would copy file: ${a}`),!0;let h=this.normalizePath(x(a));try{await p.promises.mkdir(h,{recursive:!0})}catch(c){if(c?.code!=="EEXIST")throw c}try{return await W(async()=>(await p.promises.copyFile(e,a),o&&g.info(`${l?"Updated":"Created"} file: ${a}`),!0),`Failed to copy file from ${e} to ${a}`)}catch{return!1}}copySync(e,t,r={}){let{overwrite:n=!1,dryRun:s=!1,verbose:o=!1}=r,a=this.normalizePath(t),l=this.pathExists(a);if(l&&!n)return o&&g.info(`Skipping existing file: ${a}`),!1;if(s)return g.info(`[DRY RUN] Would copy file: ${a}`),!0;let h=this.normalizePath(x(a));try{p.mkdirSync(h,{recursive:!0})}catch(c){if(c?.code!=="EEXIST")throw c}try{return p.copyFileSync(e,a),o&&g.info(`${l?"Updated":"Created"} file: ${a}`),!0}catch{return!1}}pathExists(e,t=!1){try{return p.existsSync(e)}catch(r){return t||g.error(`Error checking path existence: ${e}`,r),!1}}mkdir(e){try{let t=e.startsWith("/")||e.match(/^[A-Z]:/)?this.normalizePath(e):this.resolveAppPath(e);return p.existsSync(t)||p.mkdirSync(t,{recursive:!0}),!0}catch{return!1}}readdirSync(e,t){try{return p.readdirSync(e,t)}catch(r){return this.options.debug&&g.warn(`Failed to read directory: ${e}`,r),t&&typeof t=="object"&&"withFileTypes"in t&&t.withFileTypes?[]:[]}}statSync(e){try{return p.statSync(e)}catch(t){return this.options.debug&&g.warn(`Failed to stat file: ${e}`,t),null}}lstatSync(e){try{return p.lstatSync(e)}catch(t){return this.options.debug&&g.warn(`Failed to lstat file: ${e}`,t),null}}async ensureDir(e){try{await p.promises.mkdir(e,{recursive:!0})}catch(t){if(t?.code!=="EEXIST")throw t}}ensureDirSync(e){try{p.mkdirSync(e,{recursive:!0})}catch(t){if(t?.code!=="EEXIST")throw t}}async remove(e){await p.promises.rm(e,{recursive:!0,force:!0})}removeSync(e){p.rmSync(e,{recursive:!0,force:!0})}async readdir(e,t){return p.promises.readdir(e,t)}stripBom(e){return e.charCodeAt(0)===65279?e.slice(1):e}getRepoRoot(){return this._repoRoot||process.cwd()}getAppRoot(){return this._appRoot?this._appRoot:this._repoRoot}setAppRoot(e){if(!e)throw new Error("PathResolver.setAppRoot: root cannot be undefined or null");this._appRoot=this.normalizePath(e)}isMonorepo(){let e=P(this._repoRoot,"packages");return this.pathExists(e)}isWithinApp(e){let t=this.normalizePath(z(e)),r=this.getAppRoot(),n=L(r,t),s=this.normalizePath(n);return!s.startsWith("../")&&!s.startsWith("/")}async findFiles(e,t,r={}){let n=this.normalizePath(P(e,t)),s=this.getAppRoot(),o=this.normalizePath(s),a=n.startsWith(o)?n.slice(o.length+1):n,l={absolute:!0,onlyFiles:!0,braceExpansion:!0,extglob:!0,globstar:!0,cwd:s,ignore:R.SCAN_PATTERNS?.globalIgnore||["**/node_modules/**","**/dist/**","**/build/**","**/.git/**"]};return await this._globWithNormalization([a],{...l,...r})}clearCache(){}async _resolveFrameworkI18nPattern(e){let t=R.I18N_PATHS;if(!t)return null;let r=e.replace(t.SOURCE_ROOT+"/",""),n=this.resolveFrameworkPackage("@donotdev/core");if(!n)return null;let s=this.normalizePath(P(n,t.PUBLISHED_ROOT,r)),o=s.replace(/\/[^/]*\*.*$/,"");return this.pathExists(o),s}async _globWithNormalization(e,t){return(await se(e,t)).map(n=>{let s=typeof n=="string"?n:n.path;return this.normalizePath(s)})}async resolveFiles(e,t="css"){if(!e||typeof e!="object")return{frameworkFiles:[],consumerFiles:[]};if(t==="i18n")return{frameworkFiles:[],consumerFiles:[]};if(Array.isArray(e.framework)||(e.framework=[]),!Array.isArray(e.consumer))return{frameworkFiles:[],consumerFiles:[]};let r=[...e.framework,...e.consumer];for(let c of r)if(typeof c!="string"||c.trim()==="")return{frameworkFiles:[],consumerFiles:[]};let n=this.getAppRoot(),s=R.getGlobOptionsFor?R.getGlobOptionsFor(t):{ignore:["**/node_modules/**","**/dist/**","**/build/**"]},o=this.normalizePath(n),a=e.framework.map(c=>{let f=this.normalizePath(c);return f.startsWith(o)?f.slice(o.length+1):f}),l=e.consumer.map(c=>{let f=this.normalizePath(c);return f.startsWith(o)?f.slice(o.length+1):f}),h={...s,onlyFiles:!0,absolute:!0,braceExpansion:!0,extglob:!0,globstar:!0,cwd:n};try{let c=a.length>0?await this._globWithNormalization(a,h):[],f=await this._globWithNormalization(l,h);return{frameworkFiles:c,consumerFiles:f}}catch{return this.options.debug,{frameworkFiles:[],consumerFiles:[]}}}async resolvePatterns(e){if(!R.getPatternsFor)return{framework:[],consumer:[],all:[]};let t=this.getAppRoot(),r=this.getRepoRoot();if(e==="i18n"&&(!t||t===r))throw new Error(`Cannot resolve i18n patterns: appRoot not set (appRoot: ${t}, repoRoot: ${r}). Ensure configResolved hook has run before discovery.`);let n=R.getPatternsFor(e),s=this.isMonorepo();if(e==="i18n"){let l=n,h={eager:l.eager.map(c=>c.startsWith("!")?"!"+this.resolveAppPath(c.slice(1)):this.resolveAppPath(c)),lazy:l.lazy.map(c=>c.startsWith("!")?"!"+this.resolveAppPath(c.slice(1)):this.resolveAppPath(c)),framework:{eager:s?(l.framework?.eager||[]).map(c=>this.resolveRepoPath(c)).filter(Boolean):await Promise.all((l.framework?.eager||[]).map(c=>this._resolveFrameworkI18nPattern(c))).then(c=>c.filter(Boolean)),lazy:s?(l.framework?.lazy||[]).map(c=>this.resolveRepoPath(c)).filter(Boolean):await Promise.all((l.framework?.lazy||[]).map(c=>this._resolveFrameworkI18nPattern(c))).then(c=>c.filter(Boolean))},all:[]};return h.all=[...h.eager,...h.lazy,...h.framework.eager,...h.framework.lazy],h}let o=n,a={framework:s?(o.framework||[]).map(l=>this.resolveRepoPath(l)).filter(Boolean):[],consumer:(o.consumer||[]).map(l=>this.resolveAppPath(l)),all:[]};return a.all=[...a.consumer,...a.framework],a}getEmptyModulePath(e=!1){if(e)return"@donotdev/core/empty";let t=this.resolvePackage("@donotdev/core/empty");if(t)return t;let r=x(oe(import.meta.url));return this.normalizePath(P(r,"../empty.js"))}_findRepoRoot(e){let t=this.normalizePath(e),r=0,n=this.options.maxLevels;for(;r<n;){let s=this.normalizePath(P(t,B.TOOLING)),o=this.normalizePath(P(t,B.CORE));if(this.pathExists(s)&&this.pathExists(o))return t;let a=P(t,"apps");if(this.pathExists(a)&&this.statSync(a)?.isDirectory())return this.normalizePath(t);let l=this.normalizePath(P(t,"package.json"));if(this.pathExists(l)&&this.normalizePath(x(t))===t)return t;let h=this.normalizePath(x(t));if(h===t)break;t=h,r++}return this.normalizePath(e)}};function M(i={}){let{entry:e="src/index.ts",outDir:t="lib",minify:r=!1,sourcemap:n=!0,platform:s="firebase",workspace:o,bundleWorkspaceDeps:a=!1,importFramework:l=!1,external:h=!1,...c}=i,f=O.getInstance(),m=I(o),d={entryPoints:[e],bundle:!0,platform:"node",target:"node20",format:"esm",outdir:t,outExtension:{".js":".js"},minify:r,sourcemap:n,metafile:!0,logLevel:"info",loader:{".ts":"ts",".tsx":"tsx",".css":"empty"},keepNames:!0,treeShaking:!0,...c};a&&Object.keys(m).length>0&&(d.alias=Object.fromEntries(Object.entries(m).map(([k,u])=>[k,f.normalizePath(u)]))),d.mainFields=["module","main"],d.conditions=["import","module","node"];let V=["fs","path","crypto","util","stream","events","buffer","url","querystring","http","https","zlib","os","child_process","assert","constants","domain","punycode","string_decoder","timers","tty","vm","worker_threads","perf_hooks","async_hooks"],$=[];if(a)try{let k=o?.root||process.cwd(),u=process.cwd(),v=10;for(let b=0;b<v;b++){let j=f.normalizePath(`${u}/package.json`);if(f.pathExists(j)){let E=f.readSync(j,{format:"json"});if(E&&Array.isArray(E.workspaces)){k=f.normalizePath(u);for(let S of E.workspaces)S==="apps/*"||S==="functions"||!S.includes("*")&&!S.includes("/")&&$.push(S);break}}let A=f.getDirname(u);if(A===u)break;u=A}}catch{}let q={name:"external-node-modules",setup(k){k.onResolve({filter:/^firebase($|\/)/},u=>{if(u.path==="firebase-admin"||u.path.startsWith("firebase-admin/")||u.path==="firebase-functions"||u.path.startsWith("firebase-functions/"))return null;let v;if(o?.type==="dndev"&&o.root)v=f.normalizePath(`${o.root}/packages/core/config/functions/firebase-stub.js`);else{let b=import.meta.url,A=new URL(b).pathname.replace(/^\/([A-Z]:)/i,"$1"),E=f.getDirname(A);v=f.normalizePath(`${E}/firebase-stub.js`)}return{path:v}}),k.onResolve({filter:/.*/},u=>{if(u.kind==="entry-point")return null;if(u.path.match(/@donotdev\/functions\/.+/)&&a&&o?.type==="dndev"){let v=u.path.replace("@donotdev/functions/","");return{path:f.normalizePath(`${o.root}/packages/functions/src/${v}/index.ts`)}}if(u.path==="@donotdev/utils")return o?.type==="dndev"?{path:f.normalizePath(`${o.root}/packages/core/utils/src/server/index.ts`)}:k.resolve("@donotdev/utils/server",{kind:u.kind,resolveDir:u.resolveDir});if(u.path.match(/@donotdev\/utils\/.+/)&&o?.type==="dndev"){let v=u.path.replace("@donotdev/utils/","");return{path:f.normalizePath(`${o.root}/packages/core/utils/src/${v}/index.ts`)}}if(u.path==="@donotdev/core")return o?.type==="dndev"?{path:f.normalizePath(`${o.root}/packages/core/server.ts`)}:k.resolve("@donotdev/core/server",{kind:u.kind,resolveDir:u.resolveDir});if(u.path.match(/@donotdev\/core\/.+/)&&a&&o?.type==="dndev"){let v=u.path.replace("@donotdev/core/","");return{path:f.normalizePath(`${o.root}/packages/core/${v}.ts`)}}if(u.path==="firebase-admin"||u.path.startsWith("firebase-admin/")||u.path==="firebase-functions"||u.path.startsWith("firebase-functions/"))return{path:u.path,external:!0};if(u.path.match(/@donotdev\/core\/.+/)&&a&&o?.type==="dndev"){let v=u.path.replace("@donotdev/core/","");return{path:f.normalizePath(`${o.root}/packages/core/${v}.ts`)}}if(u.path.startsWith("@donotdev/")||u.path==="valibot"||u.path.startsWith("valibot/"))return null;if($.length>0){let v=u.path.split("/")[0];if($.includes(v))return null}return u.path.startsWith(".")||u.path.startsWith("/")?null:{path:u.path,external:!0}})}};if(d.external=[...V,"firebase-admin","firebase-functions"],d.plugins=[q,...d.plugins||[]],d.define={"process.env.NODE_ENV":JSON.stringify(process.env.NODE_ENV||"production"),...d.define||{}},l&&o.type==="dndev"){let k=o.root,u=f.normalizePath(`${k}/functions/lib`);d.alias={...d.alias,"@donotdev/functions":u}}return s==="framework"&&(d.entryPoints={"firebase/index":"src/firebase/index.ts","vercel/api/index":"src/vercel/api/index.ts","shared/index":"src/shared/index.ts"}),d}var G=["create","get","list","listCard","update","delete"];function H(i,e=0){let t=" ".repeat(e),r="";for(let[n,s]of Object.entries(i))if(s!=null)if(typeof s=="object"&&!Array.isArray(s))Object.keys(s).length===0?r+=`${t}${n}: {}
2
+ `:r+=`${t}${n}:
3
+ ${H(s,e+1)}`;else if(Array.isArray(s))if(s.length===0)r+=`${t}${n}: []
4
+ `;else{r+=`${t}${n}:
5
+ `;for(let o of s)r+=`${t} - ${o}
6
+ `}else r+=`${t}${n}: ${s}
7
+ `;return r}function Y(i){let e=i.defaults||{},t=e.labels||{},r={};for(let[s,o]of Object.entries(i.functions||{})){let a={...t,...o.labels};o.category&&(a.category=o.category),r[s]={region:o.region||e.region||["us-central1"],platform:o.platform||e.platform||"gcfv2",entryPoint:o.entryPoint||s,labels:a},o.trigger==="http"?r[s].httpsTrigger={}:r[s].callableTrigger={}}if(i.crud?.entities)for(let s of i.crud.entities)for(let o of G){let a=`${o}_${s}`;r[a]={region:e.region||["us-central1"],platform:e.platform||"gcfv2",callableTrigger:{},entryPoint:a,labels:{...t,category:"crud"}}}return`# Firebase Functions Configuration
8
8
  # Generated by @donotdev/core/functions - DO NOT EDIT MANUALLY
9
9
  # Generated at: ${new Date().toISOString()}
10
10
 
11
- `+ne({endpoints:r,specVersion:"v1alpha1",requiredAPIs:[]})}function xe(n){let e=Object.keys(n.functions||{}),t=[];if(n.crud?.entities)for(let r of n.crud.entities)for(let i of oe)t.push(`${i}_${r}`);return{yaml:ie(n),functions:[...e,...t],staticFunctions:e,crudFunctions:t}}function ae(n={}){let{entry:e="src/index.ts",outDir:t="lib",minify:r=!1,sourcemap:i=!0,platform:o="firebase",...s}=n,a=X();return se({entry:e,outDir:t,minify:r,sourcemap:i,platform:o,workspace:a,...s})}function et(n={}){return ae({...n,platform:"framework",bundleWorkspaceDeps:!0})}function tt(n={}){return ae({...n,platform:"firebase",bundleWorkspaceDeps:!0,importFramework:!0})}export{tt as createAppFunctionsConfig,ae as createFunctionsEsbuildConfig,et as createRootFunctionsConfig,ie as generateFunctionsYaml,xe as generateFunctionsYamlWithInfo};
11
+ `+H({endpoints:r,specVersion:"v1alpha1",requiredAPIs:[]})}function ne(i){let e=Object.keys(i.functions||{}),t=[];if(i.crud?.entities)for(let r of i.crud.entities)for(let n of G)t.push(`${n}_${r}`);return{yaml:Y(i),functions:[...e,...t],staticFunctions:e,crudFunctions:t}}function J(i={}){let{entry:e="src/index.ts",outDir:t="lib",minify:r=!1,sourcemap:n=!0,platform:s="firebase",...o}=i,a=D();return M({entry:e,outDir:t,minify:r,sourcemap:n,platform:s,workspace:a,...o})}function Ee(i={}){return J({...i,platform:"framework",bundleWorkspaceDeps:!0})}function Se(i={}){return J({...i,platform:"firebase",bundleWorkspaceDeps:!0,importFramework:!0})}export{Se as createAppFunctionsConfig,J as createFunctionsEsbuildConfig,Ee as createRootFunctionsConfig,Y as generateFunctionsYaml,ne as generateFunctionsYamlWithInfo};
@@ -1,4 +1,26 @@
1
1
  {
2
+ "actions": {
3
+ "label": "الإجراءات",
4
+ "create": "إنشاء",
5
+ "update": "تحديث",
6
+ "delete": "حذف",
7
+ "cancel": "إلغاء",
8
+ "save": "حفظ",
9
+ "confirm": "تأكيد",
10
+ "back": "رجوع",
11
+ "next": "التالي",
12
+ "previous": "السابق",
13
+ "search": "بحث",
14
+ "searchPlaceholder": "بحث...",
15
+ "filter": "تصفية",
16
+ "clear": "مسح",
17
+ "reset": "إعادة تعيين",
18
+ "apply": "تطبيق",
19
+ "select": "اختيار",
20
+ "upload": "رفع",
21
+ "download": "تنزيل",
22
+ "close": "إغلاق"
23
+ },
2
24
  "fields": {
3
25
  "array": "مصفوفة",
4
26
  "boolean": "منطقي",
@@ -169,8 +191,69 @@
169
191
  "upload": "رفع {{index}}",
170
192
  "uploaded": "{{label}} {{index}}{{suffix}} (مرفوعة)",
171
193
  "pending": "{{label}} {{index}}{{suffix}} (رفع معلق)"
194
+ },
195
+ "editor": {
196
+ "title": "تعديل الصورة",
197
+ "titleWithIndex": "صورة {{current}} من {{total}}",
198
+ "description": "عرض وتعديل الصورة باستخدام أدوات القص والتدوير والتكبير",
199
+ "editButton": "تعديل الصورة",
200
+ "aspectRatio": "نسبة العرض إلى الارتفاع",
201
+ "aspectFree": "حر",
202
+ "zoom": "تكبير",
203
+ "rotation": "تدوير",
204
+ "rotateLeft": "تدوير لليسار",
205
+ "rotateRight": "تدوير لليمين",
206
+ "fitToView": "ملاءمة العرض",
207
+ "showGrid": "إظهار الشبكة",
208
+ "hideGrid": "إخفاء الشبكة",
209
+ "reset": "إعادة تعيين",
210
+ "apply": "تطبيق",
211
+ "processing": "جاري المعالجة...",
212
+ "cancel": "إلغاء",
213
+ "deleteImage": "حذف الصورة",
214
+ "deleteConfirm": "حذف هذه الصورة نهائياً؟",
215
+ "previousImage": "الصورة السابقة",
216
+ "nextImage": "الصورة التالية"
172
217
  }
173
218
  },
219
+ "messages": {
220
+ "createSuccess": "تم إنشاء {{entity}} بنجاح",
221
+ "updateSuccess": "تم تحديث {{entity}} بنجاح",
222
+ "deleteSuccess": "تم حذف {{entity}} بنجاح",
223
+ "error": "حدث خطأ",
224
+ "loading": "جاري التحميل...",
225
+ "noResults": "لم يتم العثور على نتائج",
226
+ "confirmDelete": "هل أنت متأكد من حذف هذا {{entity}}؟",
227
+ "unsavedChanges": "لديك تغييرات غير محفوظة",
228
+ "unsavedChangesDiscard": "لديك تغييرات غير محفوظة. هل تريد التخلي عنها؟",
229
+ "unsavedChangesLeave": "لديك تغييرات غير محفوظة. هل أنت متأكد من أنك تريد المغادرة؟",
230
+ "sessionExpired": "انتهت صلاحية جلستك",
231
+ "networkError": "حدث خطأ في الشبكة",
232
+ "unauthorized": "وصول غير مصرح به",
233
+ "forbidden": "الوصول محظور",
234
+ "serverError": "حدث خطأ في الخادم"
235
+ },
236
+ "form": {
237
+ "submit": "إرسال",
238
+ "cancel": "إلغاء",
239
+ "submitting": "جاري الإرسال...",
240
+ "loading": "جاري التحميل...",
241
+ "add": "إضافة",
242
+ "remove": "إزالة",
243
+ "typeAndPressAdd": "اكتب واضغط إضافة...",
244
+ "enterLocationData": "أدخل بيانات الموقع (JSON)",
245
+ "uploading": "جاري الرفع {{progress}}%...",
246
+ "processing": "جاري المعالجة...",
247
+ "validating": "جاري التحقق...",
248
+ "saving": "جاري الحفظ..."
249
+ },
250
+ "gdprConsent": {
251
+ "consent": "أوافق على",
252
+ "privacyPolicy": "سياسة الخصوصية",
253
+ "terms": "شروط الاستخدام",
254
+ "and": "وأوافق على معالجة بياناتي الشخصية.",
255
+ "required": "يرجى قبول سياسة الخصوصية للمتابعة"
256
+ },
174
257
  "custom": {
175
258
  "passwordMatch": "كلمات المرور يجب أن تتطابق",
176
259
  "phoneNumber": "يرجى إدخال رقم هاتف صالح",
@@ -178,6 +261,13 @@
178
261
  "currency": "يرجى إدخال مبلغ صالح",
179
262
  "color": "يرجى إدخال كود لون صالح"
180
263
  },
264
+ "pagination": {
265
+ "showing": "عرض {{from}} إلى {{to}} من {{total}} إدخالات",
266
+ "previous": "السابق",
267
+ "next": "التالي",
268
+ "page": "الصفحة {{page}} من {{total}}",
269
+ "itemsPerPagePlaceholder": "عناصر لكل صفحة:"
270
+ },
181
271
  "filters": {
182
272
  "title": "تصفح {{entity}} - المرشحات",
183
273
  "apply": "تطبيق المرشحات",
@@ -185,6 +275,17 @@
185
275
  "noResults": "لا توجد نتائج تطابق مرشحاتك",
186
276
  "selected": "{{count}} محدد"
187
277
  },
278
+ "filter": {
279
+ "placeholder": "تصفية...",
280
+ "selectPlaceholder": "الكل",
281
+ "min": "الحد الأدنى",
282
+ "max": "الحد الأقصى",
283
+ "from": "من",
284
+ "to": "إلى",
285
+ "today": "اليوم",
286
+ "thisWeek": "هذا الأسبوع",
287
+ "thisMonth": "هذا الشهر"
288
+ },
188
289
  "results": {
189
290
  "title": {
190
291
  "fetching": "جاري الجلب...",
@@ -1,4 +1,26 @@
1
1
  {
2
+ "actions": {
3
+ "label": "Aktionen",
4
+ "create": "Erstellen",
5
+ "update": "Aktualisieren",
6
+ "delete": "Löschen",
7
+ "cancel": "Abbrechen",
8
+ "save": "Speichern",
9
+ "confirm": "Bestätigen",
10
+ "back": "Zurück",
11
+ "next": "Weiter",
12
+ "previous": "Vorherige",
13
+ "search": "Suchen",
14
+ "searchPlaceholder": "Suchen...",
15
+ "filter": "Filtern",
16
+ "clear": "Löschen",
17
+ "reset": "Zurücksetzen",
18
+ "apply": "Anwenden",
19
+ "select": "Auswählen",
20
+ "upload": "Hochladen",
21
+ "download": "Herunterladen",
22
+ "close": "Schließen"
23
+ },
2
24
  "fields": {
3
25
  "array": "Array",
4
26
  "boolean": "Boolean",
@@ -169,8 +191,69 @@
169
191
  "upload": "Hochladen {{index}}",
170
192
  "uploaded": "{{label}} {{index}}{{suffix}} (hochgeladen)",
171
193
  "pending": "{{label}} {{index}}{{suffix}} (Upload ausstehend)"
194
+ },
195
+ "editor": {
196
+ "title": "Bild bearbeiten",
197
+ "titleWithIndex": "Bild {{current}} von {{total}}",
198
+ "description": "Bild anzeigen und bearbeiten mit Zuschneiden-, Drehen- und Zoom-Tools",
199
+ "editButton": "Bild bearbeiten",
200
+ "aspectRatio": "Seitenverhältnis",
201
+ "aspectFree": "Frei",
202
+ "zoom": "Zoom",
203
+ "rotation": "Rotation",
204
+ "rotateLeft": "Nach links drehen",
205
+ "rotateRight": "Nach rechts drehen",
206
+ "fitToView": "An Ansicht anpassen",
207
+ "showGrid": "Raster anzeigen",
208
+ "hideGrid": "Raster ausblenden",
209
+ "reset": "Zurücksetzen",
210
+ "apply": "Anwenden",
211
+ "processing": "Verarbeitung...",
212
+ "cancel": "Abbrechen",
213
+ "deleteImage": "Bild löschen",
214
+ "deleteConfirm": "Dieses Bild dauerhaft löschen?",
215
+ "previousImage": "Vorheriges Bild",
216
+ "nextImage": "Nächstes Bild"
172
217
  }
173
218
  },
219
+ "messages": {
220
+ "createSuccess": "{{entity}} erfolgreich erstellt",
221
+ "updateSuccess": "{{entity}} erfolgreich aktualisiert",
222
+ "deleteSuccess": "{{entity}} erfolgreich gelöscht",
223
+ "error": "Ein Fehler ist aufgetreten",
224
+ "loading": "Laden...",
225
+ "noResults": "Keine Ergebnisse gefunden",
226
+ "confirmDelete": "Möchten Sie dieses {{entity}} wirklich löschen?",
227
+ "unsavedChanges": "Sie haben nicht gespeicherte Änderungen",
228
+ "unsavedChangesDiscard": "Sie haben nicht gespeicherte Änderungen. Verwerfen?",
229
+ "unsavedChangesLeave": "Sie haben nicht gespeicherte Änderungen. Möchten Sie wirklich verlassen?",
230
+ "sessionExpired": "Ihre Sitzung ist abgelaufen",
231
+ "networkError": "Netzwerkfehler aufgetreten",
232
+ "unauthorized": "Nicht autorisierter Zugriff",
233
+ "forbidden": "Zugriff verboten",
234
+ "serverError": "Serverfehler aufgetreten"
235
+ },
236
+ "form": {
237
+ "submit": "Absenden",
238
+ "cancel": "Abbrechen",
239
+ "submitting": "Wird gesendet...",
240
+ "loading": "Laden...",
241
+ "add": "Hinzufügen",
242
+ "remove": "Entfernen",
243
+ "typeAndPressAdd": "Tippen und Hinzufügen drücken...",
244
+ "enterLocationData": "Standortdaten eingeben (JSON)",
245
+ "uploading": "Hochladen {{progress}}%...",
246
+ "processing": "Verarbeitung...",
247
+ "validating": "Validierung...",
248
+ "saving": "Speichern..."
249
+ },
250
+ "gdprConsent": {
251
+ "consent": "Ich stimme der",
252
+ "privacyPolicy": "Datenschutzerklärung",
253
+ "terms": "Nutzungsbedingungen",
254
+ "and": "zu und stimme der Verarbeitung meiner personenbezogenen Daten zu.",
255
+ "required": "Bitte akzeptieren Sie die Datenschutzerklärung, um fortzufahren"
256
+ },
174
257
  "custom": {
175
258
  "passwordMatch": "Passwörter müssen übereinstimmen",
176
259
  "phoneNumber": "Bitte geben Sie eine gültige Telefonnummer ein",
@@ -178,6 +261,13 @@
178
261
  "currency": "Bitte geben Sie einen gültigen Betrag ein",
179
262
  "color": "Bitte geben Sie einen gültigen Farbcode ein"
180
263
  },
264
+ "pagination": {
265
+ "showing": "Zeige {{from}} bis {{to}} von {{total}} Einträgen",
266
+ "previous": "Vorherige",
267
+ "next": "Nächste",
268
+ "page": "Seite {{page}} von {{total}}",
269
+ "itemsPerPagePlaceholder": "Elemente pro Seite:"
270
+ },
181
271
  "filters": {
182
272
  "title": "{{entity}} durchsuchen - Filter",
183
273
  "apply": "Filter anwenden",
@@ -185,6 +275,17 @@
185
275
  "noResults": "Keine Ergebnisse entsprechen Ihren Filtern",
186
276
  "selected": "{{count}} ausgewählt"
187
277
  },
278
+ "filter": {
279
+ "placeholder": "Filtern...",
280
+ "selectPlaceholder": "Alle",
281
+ "min": "Min",
282
+ "max": "Max",
283
+ "from": "Von",
284
+ "to": "Bis",
285
+ "today": "Heute",
286
+ "thisWeek": "Diese Woche",
287
+ "thisMonth": "Dieser Monat"
288
+ },
188
289
  "results": {
189
290
  "title": {
190
291
  "fetching": "Laden...",
@@ -1,5 +1,6 @@
1
1
  {
2
2
  "actions": {
3
+ "label": "Actions",
3
4
  "create": "Create",
4
5
  "update": "Update",
5
6
  "delete": "Delete",
@@ -29,6 +30,8 @@
29
30
  "noResults": "No results found",
30
31
  "confirmDelete": "Are you sure you want to delete this {{entity}}?",
31
32
  "unsavedChanges": "You have unsaved changes",
33
+ "unsavedChangesDiscard": "You have unsaved changes. Discard them?",
34
+ "unsavedChangesLeave": "You have unsaved changes. Are you sure you want to leave?",
32
35
  "sessionExpired": "Your session has expired",
33
36
  "networkError": "Network error occurred",
34
37
  "unauthorized": "Unauthorized access",
@@ -46,7 +49,8 @@
46
49
  "showing": "Showing {{from}} to {{to}} of {{total}} entries",
47
50
  "previous": "Previous",
48
51
  "next": "Next",
49
- "page": "Page {{page}} of {{total}}"
52
+ "page": "Page {{page}} of {{total}}",
53
+ "itemsPerPagePlaceholder": "Items per page:"
50
54
  },
51
55
  "filters": {
52
56
  "title": "Browse {{entity}} - Filters",
@@ -55,6 +59,17 @@
55
59
  "noResults": "No results match your filters",
56
60
  "selected": "{{count}} selected"
57
61
  },
62
+ "filter": {
63
+ "placeholder": "Filter...",
64
+ "selectPlaceholder": "All",
65
+ "min": "Min",
66
+ "max": "Max",
67
+ "from": "From",
68
+ "to": "To",
69
+ "today": "Today",
70
+ "thisWeek": "This Week",
71
+ "thisMonth": "This Month"
72
+ },
58
73
  "results": {
59
74
  "title": {
60
75
  "fetching": "Fetching...",
@@ -182,7 +197,11 @@
182
197
  "add": "Add",
183
198
  "remove": "Remove",
184
199
  "typeAndPressAdd": "Type and press Add...",
185
- "enterLocationData": "Enter location data (JSON)"
200
+ "enterLocationData": "Enter location data (JSON)",
201
+ "uploading": "Uploading {{progress}}%...",
202
+ "processing": "Processing...",
203
+ "validating": "Validating...",
204
+ "saving": "Saving..."
186
205
  },
187
206
  "navigation": {
188
207
  "more": "More",
@@ -392,8 +411,38 @@
392
411
  "upload": "Upload {{index}}",
393
412
  "uploaded": "{{label}} {{index}}{{suffix}} (uploaded)",
394
413
  "pending": "{{label}} {{index}}{{suffix}} (pending upload)"
414
+ },
415
+ "editor": {
416
+ "title": "Edit Image",
417
+ "titleWithIndex": "Image {{current}} of {{total}}",
418
+ "description": "View and edit image with crop, rotation, and zoom tools",
419
+ "editButton": "Edit Image",
420
+ "aspectRatio": "Aspect Ratio",
421
+ "aspectFree": "Free",
422
+ "zoom": "Zoom",
423
+ "rotation": "Rotation",
424
+ "rotateLeft": "Rotate left",
425
+ "rotateRight": "Rotate right",
426
+ "fitToView": "Fit to view",
427
+ "showGrid": "Show grid",
428
+ "hideGrid": "Hide grid",
429
+ "reset": "Reset",
430
+ "apply": "Apply",
431
+ "processing": "Processing...",
432
+ "cancel": "Cancel",
433
+ "deleteImage": "Delete Image",
434
+ "deleteConfirm": "Delete this image permanently?",
435
+ "previousImage": "Previous image",
436
+ "nextImage": "Next image"
395
437
  }
396
438
  },
439
+ "gdprConsent": {
440
+ "consent": "I agree to the",
441
+ "privacyPolicy": "privacy policy",
442
+ "terms": "terms of use",
443
+ "and": "and consent to the processing of my personal data.",
444
+ "required": "Please accept the privacy policy to continue"
445
+ },
397
446
  "custom": {
398
447
  "passwordMatch": "Passwords must match",
399
448
  "phoneNumber": "Please enter a valid phone number",
@@ -1,4 +1,26 @@
1
1
  {
2
+ "actions": {
3
+ "label": "Acciones",
4
+ "create": "Crear",
5
+ "update": "Actualizar",
6
+ "delete": "Eliminar",
7
+ "cancel": "Cancelar",
8
+ "save": "Guardar",
9
+ "confirm": "Confirmar",
10
+ "back": "Atrás",
11
+ "next": "Siguiente",
12
+ "previous": "Anterior",
13
+ "search": "Buscar",
14
+ "searchPlaceholder": "Buscar...",
15
+ "filter": "Filtrar",
16
+ "clear": "Limpiar",
17
+ "reset": "Restablecer",
18
+ "apply": "Aplicar",
19
+ "select": "Seleccionar",
20
+ "upload": "Subir",
21
+ "download": "Descargar",
22
+ "close": "Cerrar"
23
+ },
2
24
  "fields": {
3
25
  "array": "Matriz",
4
26
  "boolean": "Booleano",
@@ -169,8 +191,69 @@
169
191
  "upload": "Subir {{index}}",
170
192
  "uploaded": "{{label}} {{index}}{{suffix}} (subida)",
171
193
  "pending": "{{label}} {{index}}{{suffix}} (carga pendiente)"
194
+ },
195
+ "editor": {
196
+ "title": "Editar imagen",
197
+ "titleWithIndex": "Imagen {{current}} de {{total}}",
198
+ "description": "Ver y editar imagen con herramientas de recorte, rotación y zoom",
199
+ "editButton": "Editar imagen",
200
+ "aspectRatio": "Relación de aspecto",
201
+ "aspectFree": "Libre",
202
+ "zoom": "Zoom",
203
+ "rotation": "Rotación",
204
+ "rotateLeft": "Rotar a la izquierda",
205
+ "rotateRight": "Rotar a la derecha",
206
+ "fitToView": "Ajustar a la vista",
207
+ "showGrid": "Mostrar cuadrícula",
208
+ "hideGrid": "Ocultar cuadrícula",
209
+ "reset": "Restablecer",
210
+ "apply": "Aplicar",
211
+ "processing": "Procesando...",
212
+ "cancel": "Cancelar",
213
+ "deleteImage": "Eliminar imagen",
214
+ "deleteConfirm": "¿Eliminar permanentemente esta imagen?",
215
+ "previousImage": "Imagen anterior",
216
+ "nextImage": "Imagen siguiente"
172
217
  }
173
218
  },
219
+ "messages": {
220
+ "createSuccess": "{{entity}} creado exitosamente",
221
+ "updateSuccess": "{{entity}} actualizado exitosamente",
222
+ "deleteSuccess": "{{entity}} eliminado exitosamente",
223
+ "error": "Ocurrió un error",
224
+ "loading": "Cargando...",
225
+ "noResults": "No se encontraron resultados",
226
+ "confirmDelete": "¿Está seguro de que desea eliminar este {{entity}}?",
227
+ "unsavedChanges": "Tiene cambios sin guardar",
228
+ "unsavedChangesDiscard": "Tiene cambios sin guardar. ¿Descartarlos?",
229
+ "unsavedChangesLeave": "Tiene cambios sin guardar. ¿Está seguro de que desea salir?",
230
+ "sessionExpired": "Su sesión ha expirado",
231
+ "networkError": "Error de red ocurrido",
232
+ "unauthorized": "Acceso no autorizado",
233
+ "forbidden": "Acceso prohibido",
234
+ "serverError": "Error del servidor ocurrido"
235
+ },
236
+ "form": {
237
+ "submit": "Enviar",
238
+ "cancel": "Cancelar",
239
+ "submitting": "Enviando...",
240
+ "loading": "Cargando...",
241
+ "add": "Agregar",
242
+ "remove": "Eliminar",
243
+ "typeAndPressAdd": "Escriba y presione Agregar...",
244
+ "enterLocationData": "Ingrese datos de ubicación (JSON)",
245
+ "uploading": "Subiendo {{progress}}%...",
246
+ "processing": "Procesando...",
247
+ "validating": "Validando...",
248
+ "saving": "Guardando..."
249
+ },
250
+ "gdprConsent": {
251
+ "consent": "Acepto la",
252
+ "privacyPolicy": "política de privacidad",
253
+ "terms": "términos de uso",
254
+ "and": "y consiento el procesamiento de mis datos personales.",
255
+ "required": "Por favor acepte la política de privacidad para continuar"
256
+ },
174
257
  "custom": {
175
258
  "passwordMatch": "Las contraseñas deben coincidir",
176
259
  "phoneNumber": "Ingrese un número de teléfono válido",
@@ -178,6 +261,13 @@
178
261
  "currency": "Ingrese un monto válido",
179
262
  "color": "Ingrese un código de color válido"
180
263
  },
264
+ "pagination": {
265
+ "showing": "Mostrando {{from}} a {{to}} de {{total}} entradas",
266
+ "previous": "Anterior",
267
+ "next": "Siguiente",
268
+ "page": "Página {{page}} de {{total}}",
269
+ "itemsPerPagePlaceholder": "Elementos por página:"
270
+ },
181
271
  "filters": {
182
272
  "title": "Explorar {{entity}} - Filtros",
183
273
  "apply": "Aplicar filtros",
@@ -185,6 +275,17 @@
185
275
  "noResults": "Ningún resultado coincide con sus filtros",
186
276
  "selected": "{{count}} seleccionado"
187
277
  },
278
+ "filter": {
279
+ "placeholder": "Filtrar...",
280
+ "selectPlaceholder": "Todos",
281
+ "min": "Mín",
282
+ "max": "Máx",
283
+ "from": "Desde",
284
+ "to": "Hasta",
285
+ "today": "Hoy",
286
+ "thisWeek": "Esta semana",
287
+ "thisMonth": "Este mes"
288
+ },
188
289
  "results": {
189
290
  "title": {
190
291
  "fetching": "Cargando...",