@opengis/fcore 0.0.1-beta.25 → 0.0.1-beta.26

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (104) hide show
  1. package/LICENSE +3 -3
  2. package/README.md +71 -71
  3. package/dist/config.js +1 -1
  4. package/dist/context.js +1 -1
  5. package/dist/errors.js +1 -1
  6. package/dist/fastify.js +1 -1
  7. package/dist/fcore.js +1 -1
  8. package/dist/migrations/cli.js +1 -1
  9. package/dist/migrations/runner.js +1 -1
  10. package/dist/modules/auth/adduser-cli.js +1 -1
  11. package/dist/modules/auth/passwd-cli.js +1 -1
  12. package/dist/modules/auth/permission-cli.js +1 -1
  13. package/dist/modules/auth/route.d.ts.map +1 -1
  14. package/dist/modules/auth/route.js +1 -1
  15. package/dist/modules/auth/schema.js +1 -1
  16. package/dist/modules/auth/services/change-password.js +1 -1
  17. package/dist/modules/auth/services/get-current-user.d.ts +2 -0
  18. package/dist/modules/auth/services/get-current-user.d.ts.map +1 -1
  19. package/dist/modules/auth/services/get-current-user.js +1 -1
  20. package/dist/modules/auth/services/registration.js +1 -1
  21. package/dist/modules/auth/services/verify-two-factor.js +1 -1
  22. package/dist/modules/file/mime.js +1 -1
  23. package/dist/modules/file/route.js +1 -1
  24. package/dist/modules/file/schema.js +1 -1
  25. package/dist/modules/file/services/get-file.js +1 -1
  26. package/dist/modules/file/services/resize-file.js +1 -1
  27. package/dist/modules/file/services/upload-file.js +1 -1
  28. package/dist/modules/resource/route.js +1 -1
  29. package/dist/modules/resource/schema.js +1 -1
  30. package/dist/modules/resource/services/add-note.js +1 -1
  31. package/dist/modules/resource/services/add-resource-file.js +1 -1
  32. package/dist/modules/resource/services/create-resource-relation.js +1 -1
  33. package/dist/modules/resource/services/create-resource.js +1 -1
  34. package/dist/modules/resource/services/delete-resource-relation.js +1 -1
  35. package/dist/modules/resource/services/delete-resource.js +1 -1
  36. package/dist/modules/resource/services/export-resource.js +1 -1
  37. package/dist/modules/resource/services/get-resource.js +1 -1
  38. package/dist/modules/resource/services/list-resource-relation.js +1 -1
  39. package/dist/modules/resource/services/list-resources.js +1 -1
  40. package/dist/modules/resource/services/search-resource.js +1 -1
  41. package/dist/modules/resource/services/suggest-resource.js +1 -1
  42. package/dist/modules/resource/services/update-resource-relation.js +1 -1
  43. package/dist/modules/resource/services/update-resource.js +1 -1
  44. package/dist/modules/resource/services/upload-resource-file.js +1 -1
  45. package/dist/modules/system/route.js +1 -1
  46. package/dist/modules/system/schema.js +1 -1
  47. package/dist/modules/system/services/check-system.js +1 -1
  48. package/dist/modules/system/services/get-access.js +1 -1
  49. package/dist/modules/system/services/get-api-list.js +1 -1
  50. package/dist/modules/system/services/get-audit-log.js +1 -1
  51. package/dist/modules/system/services/get-dictionary.js +1 -1
  52. package/dist/modules/system/services/get-system-log.js +1 -1
  53. package/dist/modules/system/services/get-system-settings.js +1 -1
  54. package/dist/modules/system/services/list-dictionaries.js +1 -1
  55. package/dist/modules/system/services/set-access.js +1 -1
  56. package/dist/modules/system/services/update-dictionary.js +1 -1
  57. package/dist/modules/system/services/update-system-settings.js +1 -1
  58. package/dist/modules/utils/require-admin.js +1 -1
  59. package/dist/modules/utils/safe-user.js +1 -1
  60. package/dist/modules/utils/unsupported.js +1 -1
  61. package/dist/plugins/audit/audit.js +1 -1
  62. package/dist/plugins/audit/services/write-audit.js +1 -1
  63. package/dist/plugins/auth/get-user-permissions.js +1 -1
  64. package/dist/plugins/auth/index.js +1 -1
  65. package/dist/plugins/auth/verifyUser.js +1 -1
  66. package/dist/plugins/dictionary.js +1 -1
  67. package/dist/plugins/file.js +1 -1
  68. package/dist/plugins/jwt.js +1 -1
  69. package/dist/plugins/logger/index.js +1 -1
  70. package/dist/plugins/logger/transport.js +1 -1
  71. package/dist/plugins/pg.js +1 -1
  72. package/dist/plugins/redis.js +1 -1
  73. package/dist/plugins/resource/resource.d.ts +1 -1
  74. package/dist/plugins/resource/resource.d.ts.map +1 -1
  75. package/dist/plugins/resource/resource.js +1 -1
  76. package/dist/plugins/resource/resource.registry.d.ts +3 -2
  77. package/dist/plugins/resource/resource.registry.d.ts.map +1 -1
  78. package/dist/plugins/resource/resource.registry.js +1 -1
  79. package/dist/plugins/resource/resource.types.d.ts +5 -4
  80. package/dist/plugins/resource/resource.types.d.ts.map +1 -1
  81. package/dist/plugins/resource/services/add-dictionary-lookup-data.js +1 -1
  82. package/dist/plugins/resource/services/add-file-token.js +1 -1
  83. package/dist/plugins/resource/services/add-table-lookup-data.js +1 -1
  84. package/dist/plugins/resource/services/create-relation.js +1 -1
  85. package/dist/plugins/resource/services/create.js +1 -1
  86. package/dist/plugins/resource/services/delete-relation.js +1 -1
  87. package/dist/plugins/resource/services/delete.js +1 -1
  88. package/dist/plugins/resource/services/find-one.js +1 -1
  89. package/dist/plugins/resource/services/find-relation.js +1 -1
  90. package/dist/plugins/resource/services/find.js +1 -1
  91. package/dist/plugins/resource/services/get-table-columns.js +1 -1
  92. package/dist/plugins/resource/services/update-relation.js +1 -1
  93. package/dist/plugins/resource/services/update.js +1 -1
  94. package/dist/plugins/resource/utils/auto-index.js +1 -1
  95. package/dist/plugins/resource/utils/fields.js +1 -1
  96. package/dist/plugins/resource/utils/filters.js +1 -1
  97. package/dist/plugins/resource/utils/permissions.js +1 -1
  98. package/dist/plugins/resource/utils/sort.js +1 -1
  99. package/dist/plugins/resource/utils/sql.js +1 -1
  100. package/dist/plugins/resource/utils/summary.js +1 -1
  101. package/dist/shared/getIP.js +1 -1
  102. package/migrations/20260903130000_move_notes_files_to_admin.sql +17 -17
  103. package/migrations/20260903140000_settings_nulls_not_distinct.sql +18 -18
  104. package/package.json +93 -93
@@ -1 +1 @@
1
- function Y(w,y){w=w-0x16f;const d=f();let Z=d[w];return Z;}function f(){const F=['startsWith','Invalid\x20file\x20path','replace','alloc','transformToByteArray','function','from','toString','hex','files','isAbsolute','resolve','readFile','mkdir','createHmac','base64url','length','endpoint','us-east-1','send','bucket','Body','sha256','update','timingSafeEqual'];f=function(){return F;};return f();}import w from'node:fs/promises';import y from'node:path';import{DeleteObjectCommand,GetObjectCommand,HeadObjectCommand,PutObjectCommand,S3Client}from'@aws-sdk/client-s3';import d from'node:crypto';import{ValidationError}from'../errors.js';import{UnauthorizedError}from'../errors.js';function normalizeRelativePath(Z){const U=Y;if(!Z||Z[U(0x16f)]('/')||Z['includes']('..'))throw new ValidationError(U(0x170));return Z[U(0x171)](/\\/g,'/')['replace'](/^\/+/,'');}function keyFor(Z,M){return''+((Z??'')['replace'](/^\/+|\/+$/g,'')?(Z??'')['replace'](/^\/+|\/+$/g,'')+'/':'')+normalizeRelativePath(M);}async function bodyToBuffer(Z){const E=Y;if(!Z)return Buffer[E(0x172)](0x0);const M=Z;if(typeof M[E(0x173)]===E(0x174))return Buffer['from'](await M[E(0x173)]());const H=[];for await(const Q of Z){H['push'](Buffer[E(0x175)](Q));}return Buffer['concat'](H);}export function createFileLocal(Z){const e=Y,M=y['resolve'](Z['storagePath']||'./storage'),H=y['join'](M,'removed'),Q=Z['tokenSecret']??process.env.FILE_TOKEN_SECRET??d['randomBytes'](0x20)[e(0x176)](e(0x177)),s=t=>{const l=e,K=normalizeRelativePath(t),T=(Z['folder']??l(0x178))['replace'](/^\/+|\/+$/g,'');return T?y['join'](T,K):K;},j=t=>{const A=e,K=s(t),T=y['resolve'](M,K),h=y['relative'](M,T);if(h['startsWith']('..')||y[A(0x179)](h))throw new ValidationError('Invalid\x20file\x20path');return T;},n=t=>{const c=e,K=s(t),T=y[c(0x17a)](H,K),h=y['relative'](H,T);if(h[c(0x16f)]('..')||y['isAbsolute'](h))throw new ValidationError('Invalid\x20file\x20path');return T;};return{async 'put'(t,K){const T=j(t);await w['mkdir'](y['dirname'](T),{'recursive':!![]}),await w['writeFile'](T,K instanceof Buffer?K:await bodyToBuffer(K));},async 'get'(t){const x=e;return w[x(0x17b)](j(t));},async 'exists'(t){try{return await w['access'](j(t)),!![];}catch{return![];}},async 'delete'(t){const o=e,K=j(t),T=n(t);try{await w[o(0x17c)](y['dirname'](T),{'recursive':!![]}),await w['rename'](K,T);}catch(h){const i=h;if(i['code']!=='ENOENT')throw h;}},'create'(t,K=Z['tokenTtl']??0xe10){const r=e,T=Buffer['from'](t)['toString']('base64url'),h=d[r(0x17d)]('sha256',Q)['update'](T)['digest']('base64url');return T+'.'+h;},'verify'(t){const S=e,[K,T]=t['split']('.');if(!K||!T)throw new UnauthorizedError('Invalid\x20file\x20token');const h=d['createHmac']('sha256',Q)['update'](K)['digest'](),i=Buffer[S(0x175)](T,S(0x17e));if(h['length']!==i[S(0x17f)]||!d['timingSafeEqual'](h,i))throw new UnauthorizedError('Invalid\x20file\x20token');const G=Buffer[S(0x175)](K,'base64url')['toString']('utf8');return G;}};}export function createFileS3(Z){const D=Y,M=Z['tokenSecret']??process.env.FILE_TOKEN_SECRET??d['randomBytes'](0x20)['toString']('hex'),H=new S3Client({'endpoint':Z[D(0x180)],'region':Z['region']??D(0x181),'forcePathStyle':Z['forcePathStyle']??!![],'credentials':Z['accessKeyId']||Z['accessKey']?{'accessKeyId':Z['accessKeyId']??Z['accessKey'],'secretAccessKey':Z['secretAccessKey']??Z['secretKey']}:undefined}),Q=s=>keyFor(Z['folder'],s);return{async 'put'(s,j){const p=D;await H[p(0x182)](new PutObjectCommand({'Bucket':Z[p(0x183)],'Key':Q(s),'Body':j}));},async 'get'(s){const W=D,j=await H['send'](new GetObjectCommand({'Bucket':Z['bucket'],'Key':Q(s)}));return bodyToBuffer(j[W(0x184)]);},async 'exists'(s){const I=D;try{return await H['send'](new HeadObjectCommand({'Bucket':Z[I(0x183)],'Key':Q(s)})),!![];}catch(j){const n=j;if(n['$metadata']?.['httpStatusCode']===0x194||n['name']==='NotFound')return![];throw j;}},async 'delete'(s){const a=D;await H[a(0x182)](new DeleteObjectCommand({'Bucket':Z['bucket'],'Key':Q(s)}));},'create'(s,j=Z['tokenTtl']??0xe10){const b=D,n=Buffer[b(0x175)](s)['toString']('base64url'),t=d['createHmac'](b(0x185),M)[b(0x186)](n)['digest'](b(0x17e));return n+'.'+t;},'verify'(s){const C=D,[j,n]=s['split']('.');if(!j||!n)throw new UnauthorizedError('Invalid\x20file\x20token');const t=d['createHmac']('sha256',M)[C(0x186)](j)['digest'](),K=Buffer[C(0x175)](n,'base64url');if(t['length']!==K['length']||!d[C(0x187)](t,K))throw new UnauthorizedError('Invalid\x20file\x20token');const T=Buffer[C(0x175)](j,C(0x17e))[C(0x176)]('utf8');return T;}};}
1
+ import w from'node:fs/promises';import h from'node:path';function z(){const N=['startsWith','includes','replace','alloc','push','concat','./storage','join','removed','tokenSecret','randomBytes','files','resolve','relative','writeFile','access','mkdir','dirname','ENOENT','toString','base64url','split','sha256','from','length','hex','region','accessKey','secretAccessKey','secretKey','send','bucket','httpStatusCode','update','createHmac','Invalid\x20file\x20token'];z=function(){return N;};return z();}import{DeleteObjectCommand,GetObjectCommand,HeadObjectCommand,PutObjectCommand,S3Client}from'@aws-sdk/client-s3';import S from'node:crypto';import{ValidationError}from'../errors.js';import{UnauthorizedError}from'../errors.js';function G(w,h){w=w-0x97;const S=z();let X=S[w];return X;}function normalizeRelativePath(X){const R=G;if(!X||X[R(0x97)]('/')||X[R(0x98)]('..'))throw new ValidationError('Invalid\x20file\x20path');return X['replace'](/\\/g,'/')[R(0x99)](/^\/+/,'');}function keyFor(X,Y){const Q=G;return''+((X??'')['replace'](/^\/+|\/+$/g,'')?(X??'')[Q(0x99)](/^\/+|\/+$/g,'')+'/':'')+normalizeRelativePath(Y);}async function bodyToBuffer(X){const P=G;if(!X)return Buffer[P(0x9a)](0x0);const Y=X;if(typeof Y['transformToByteArray']==='function')return Buffer['from'](await Y['transformToByteArray']());const v=[];for await(const D of X){v[P(0x9b)](Buffer['from'](D));}return Buffer[P(0x9c)](v);}export function createFileLocal(X){const x=G,Y=h['resolve'](X['storagePath']||x(0x9d)),v=h[x(0x9e)](Y,x(0x9f)),D=X[x(0xa0)]??process.env.FILE_TOKEN_SECRET??S[x(0xa1)](0x20)['toString']('hex'),o=Z=>{const c=x,K=normalizeRelativePath(Z),y=(X['folder']??c(0xa2))[c(0x99)](/^\/+|\/+$/g,'');return y?h[c(0x9e)](y,K):K;},q=Z=>{const d=x,K=o(Z),y=h[d(0xa3)](Y,K),V=h['relative'](Y,y);if(V['startsWith']('..')||h['isAbsolute'](V))throw new ValidationError('Invalid\x20file\x20path');return y;},e=Z=>{const C=x,K=o(Z),y=h['resolve'](v,K),V=h[C(0xa4)](v,y);if(V['startsWith']('..')||h['isAbsolute'](V))throw new ValidationError('Invalid\x20file\x20path');return y;};return{async 'put'(Z,K){const A=x,y=q(Z);await w['mkdir'](h['dirname'](y),{'recursive':!![]}),await w[A(0xa5)](y,K instanceof Buffer?K:await bodyToBuffer(K));},async 'get'(Z){return w['readFile'](q(Z));},async 'exists'(Z){const L=x;try{return await w[L(0xa6)](q(Z)),!![];}catch{return![];}},async 'delete'(Z){const F=x,K=q(Z),y=e(Z);try{await w[F(0xa7)](h[F(0xa8)](y),{'recursive':!![]}),await w['rename'](K,y);}catch(V){const O=V;if(O['code']!==F(0xa9))throw V;}},'create'(Z,K=X['tokenTtl']??0xe10){const j=x,y=Buffer['from'](Z)[j(0xaa)](j(0xab)),V=S['createHmac']('sha256',D)['update'](y)['digest']('base64url');return y+'.'+V;},'verify'(Z){const u=x,[K,y]=Z[u(0xac)]('.');if(!K||!y)throw new UnauthorizedError('Invalid\x20file\x20token');const V=S['createHmac'](u(0xad),D)['update'](K)['digest'](),O=Buffer[u(0xae)](y,'base64url');if(V[u(0xaf)]!==O['length']||!S['timingSafeEqual'](V,O))throw new UnauthorizedError('Invalid\x20file\x20token');const H=Buffer['from'](K,'base64url')['toString']('utf8');return H;}};}export function createFileS3(X){const t=G,Y=X['tokenSecret']??process.env.FILE_TOKEN_SECRET??S['randomBytes'](0x20)['toString'](t(0xb0)),v=new S3Client({'endpoint':X['endpoint'],'region':X[t(0xb1)]??'us-east-1','forcePathStyle':X['forcePathStyle']??!![],'credentials':X['accessKeyId']||X[t(0xb2)]?{'accessKeyId':X['accessKeyId']??X['accessKey'],'secretAccessKey':X[t(0xb3)]??X[t(0xb4)]}:undefined}),D=o=>keyFor(X['folder'],o);return{async 'put'(o,q){const s=t;await v[s(0xb5)](new PutObjectCommand({'Bucket':X[s(0xb6)],'Key':D(o),'Body':q}));},async 'get'(o){const b=t,q=await v[b(0xb5)](new GetObjectCommand({'Bucket':X['bucket'],'Key':D(o)}));return bodyToBuffer(q['Body']);},async 'exists'(o){const f=t;try{return await v['send'](new HeadObjectCommand({'Bucket':X['bucket'],'Key':D(o)})),!![];}catch(q){const e=q;if(e['$metadata']?.[f(0xb7)]===0x194||e['name']==='NotFound')return![];throw q;}},async 'delete'(o){const i=t;await v[i(0xb5)](new DeleteObjectCommand({'Bucket':X['bucket'],'Key':D(o)}));},'create'(o,q=X['tokenTtl']??0xe10){const I=t,e=Buffer['from'](o)['toString']('base64url'),Z=S['createHmac'](I(0xad),Y)[I(0xb8)](e)['digest']('base64url');return e+'.'+Z;},'verify'(o){const p=t,[q,e]=o['split']('.');if(!q||!e)throw new UnauthorizedError('Invalid\x20file\x20token');const Z=S[p(0xb9)]('sha256',Y)['update'](q)['digest'](),K=Buffer[p(0xae)](e,'base64url');if(Z[p(0xaf)]!==K[p(0xaf)]||!S['timingSafeEqual'](Z,K))throw new UnauthorizedError(p(0xba));const y=Buffer['from'](q,'base64url')['toString']('utf8');return y;}};}
@@ -1 +1 @@
1
- const H=Y;import{SignJWT,jwtVerify}from'jose';const secret=new TextEncoder()[H(0xa0)](process.env.AUTH_JWT_SECRET);function f(){const n=['encode','HS256','setIssuedAt','sign','catch','log','message','payload'];f=function(){return n;};return f();}function Y(w,y){w=w-0xa0;const d=f();let Z=d[w];return Z;}export async function jwtSignToken(w){const Q=H;if(!process.env.AUTH_JWT_SECRET)return;const {id:y,type:d,permissions:Z}=w,M=await new SignJWT({'id':y,'type':d,'permissions':Z})['setProtectedHeader']({'alg':Q(0xa1)})[Q(0xa2)]()['setExpirationTime']('1h')[Q(0xa3)](secret);return M;}export async function jwtVerifyToken(w){const s=H,y=await jwtVerify(w,secret,{'algorithms':[s(0xa1)]})[s(0xa4)](d=>{const j=s;console[j(0xa5)](d[j(0xa6)]);});return y?.[s(0xa7)];}
1
+ function z(){const o=['setIssuedAt','sign','message'];z=function(){return o;};return z();}function G(w,h){w=w-0xff;const S=z();let X=S[w];return X;}import{SignJWT,jwtVerify}from'jose';const secret=new TextEncoder()['encode'](process.env.AUTH_JWT_SECRET);export async function jwtSignToken(w){const v=G;if(!process.env.AUTH_JWT_SECRET)return;const {id:h,type:S,permissions:X}=w,Y=await new SignJWT({'id':h,'type':S,'permissions':X})['setProtectedHeader']({'alg':'HS256'})[v(0xff)]()['setExpirationTime']('1h')[v(0x100)](secret);return Y;}export async function jwtVerifyToken(w){const h=await jwtVerify(w,secret,{'algorithms':['HS256']})['catch'](S=>{const D=G;console['log'](S[D(0x101)]);});return h?.['payload'];}
@@ -1 +1 @@
1
- import w from'pino';function f(){const j=['stdTimeFunctions','accessToken','refreshToken'];f=function(){return j;};return f();}function Y(w,y){w=w-0x192;const d=f();let Z=d[w];return Z;}export function createLogger(){const s=Y,y=w['transport']({'target':'./transport.js'}),d=w({'level':'info','timestamp':w[s(0x192)]['isoTime'],'base':{'service':'app'},'redact':{'paths':['req.headers.authorization','password','token',s(0x193),s(0x194)],'censor':'[REDACTED]'}},y),Z={};function M(H,Q){if(H===undefined)return{...Z};Z[H]=(Z[H]??0x0)+(Q??0x1);}return Object['assign'](d,{'close':async()=>y['end'](),'metrics':M,'file':()=>d['info']['bind'](d)});}
1
+ function z(){const q=['transport','info','accessToken'];z=function(){return q;};return z();}function G(w,h){w=w-0x1b5;const S=z();let X=S[w];return X;}import w from'pino';export function createLogger(){const o=G,h=w[o(0x1b5)]({'target':'./transport.js'}),S=w({'level':o(0x1b6),'timestamp':w['stdTimeFunctions']['isoTime'],'base':{'service':'app'},'redact':{'paths':['req.headers.authorization','password','token',o(0x1b7),'refreshToken'],'censor':'[REDACTED]'}},h),X={};function Y(v,D){if(v===undefined)return{...X};X[v]=(X[v]??0x0)+(D??0x1);}return Object['assign'](S,{'close':async()=>h['end'](),'metrics':Y,'file':()=>S['info']['bind'](S)});}
@@ -1 +1 @@
1
- function Y(w,y){w=w-0x14b;const d=f();let Z=d[w];return Z;}const s=Y;import w from'node:fs';import y from'node:path';import d from'pino-abstract-transport';function f(){const h=['error','slice','logs','createWriteStream','.log','stream','clear','file','write'];f=function(){return h;};return f();}const LEVELS={0x1e:'info',0x28:'warn',0x32:'error',0x3c:s(0x14b)},streams=new Map();function getDate(){const j=s;return new Date()['toISOString']()[j(0x14c)](0x0,0xa);}function createStream(Z,M){const n=s,H=y['resolve'](n(0x14d),Z);return w['mkdirSync'](H,{'recursive':!![]}),w[n(0x14e)](y['join'](H,M+n(0x14f)),{'flags':'a'});}function getStream(Z){const t=s,M=getDate(),H=streams['get'](Z);if(H&&H['date']===M)return H[t(0x150)];H?.['stream']['end']();const Q=createStream(Z,M);return streams['set'](Z,{'date':M,'stream':Q}),Q;}function closeStreams(){const K=s;for(const {stream:Z}of streams['values']()){Z['end']();}streams[K(0x151)]();}export default async function loggerTransport(){return d(writeLogs,{'close':async()=>{closeStreams();}});}async function writeLogs(Z){const T=s;for await(const M of Z){const H=LEVELS[M['level']];if(!H)continue;const Q=getStream(M[T(0x152)]||H);delete M[T(0x152)],Q[T(0x153)](JSON['stringify'](M)+'\x0a');}}
1
+ const o=G;import w from'node:fs';import h from'node:path';import S from'pino-abstract-transport';const LEVELS={0x1e:'info',0x28:'warn',0x32:o(0xa1),0x3c:'error'},streams=new Map();function G(w,h){w=w-0xa1;const S=z();let X=S[w];return X;}function getDate(){const q=o;return new Date()[q(0xa2)]()['slice'](0x0,0xa);}function createStream(X,Y){const e=o,v=h[e(0xa3)]('logs',X);return w['mkdirSync'](v,{'recursive':!![]}),w[e(0xa4)](h['join'](v,Y+e(0xa5)),{'flags':'a'});}function getStream(X){const Z=o,Y=getDate(),v=streams[Z(0xa6)](X);if(v&&v['date']===Y)return v['stream'];v?.['stream'][Z(0xa7)]();const D=createStream(X,Y);return streams['set'](X,{'date':Y,'stream':D}),D;}function z(){const V=['error','toISOString','resolve','createWriteStream','.log','get','end','level'];z=function(){return V;};return z();}function closeStreams(){const K=o;for(const {stream:X}of streams['values']()){X[K(0xa7)]();}streams['clear']();}export default async function loggerTransport(){return S(writeLogs,{'close':async()=>{closeStreams();}});}async function writeLogs(X){const y=o;for await(const Y of X){const v=LEVELS[Y[y(0xa8)]];if(!v)continue;const D=getStream(Y['file']||v);delete Y['file'],D['write'](JSON['stringify'](Y)+'\x0a');}}
@@ -1 +1 @@
1
- function Y(w,y){w=w-0xae;const d=f();let Z=d[w];return Z;}import w from'pg';const {Pool}=w;export function createDatabase(y){const K=Y,d=new Pool(y),Z=d['query'][K(0xae)](d);function M(H,Q){const s=new Error();return Error['captureStackTrace']?.(s,M),Z(H,Q)['catch'](j=>{const n=j;n['sql']=H,n['callerStack']=s['stack'];throw n;});}return d['query']=M,d['transaction']=async function(H){const T=K,Q=new Error();Error['captureStackTrace']?.(Q,d[T(0xaf)]);const s=await d['connect']();try{await s[T(0xb0)](T(0xb1));const j=await H(s);return await s[T(0xb0)](T(0xb2)),j;}catch(n){await s['query']('ROLLBACK');const t=n;t['callerStack']=Q[T(0xb3)];throw t;}finally{s['release']();}},d;}function f(){const h=['bind','transaction','query','BEGIN','COMMIT','stack'];f=function(){return h;};return f();}
1
+ import w from'pg';function z(){const V=['callerStack','stack','captureStackTrace','BEGIN','COMMIT','ROLLBACK'];z=function(){return V;};return z();}function G(w,h){w=w-0x1e7;const S=z();let X=S[w];return X;}const {Pool}=w;export function createDatabase(h){const S=new Pool(h),X=S['query']['bind'](S);function Y(v,D){const o=new Error();return Error['captureStackTrace']?.(o,Y),X(v,D)['catch'](q=>{const K=G,e=q;e['sql']=v,e[K(0x1e7)]=o[K(0x1e8)];throw e;});}return S['query']=Y,S['transaction']=async function(v){const y=G,D=new Error();Error[y(0x1e9)]?.(D,S['transaction']);const o=await S['connect']();try{await o['query'](y(0x1ea));const q=await v(o);return await o['query'](y(0x1eb)),q;}catch(e){await o['query'](y(0x1ec));const Z=e;Z['callerStack']=D['stack'];throw Z;}finally{o['release']();}},S;}
@@ -1 +1 @@
1
- function f(){const j=['Creating\x20Redis\x20client\x20with\x20config:','set','del','quit','ping','incrby'];f=function(){return j;};return f();}import{Redis}from'ioredis';function Y(w,y){w=w-0x14e;const d=f();let Z=d[w];return Z;}export function createRedis(w){const Q=Y;console['log'](Q(0x14e),w);const y=new Redis(w);return{'get':d=>y['get'](d),'set':(d,Z,M,H)=>{const s=Q;if(H)return y['set'](d,Z,'EX',H);if(typeof M==='number')return y[s(0x14f)](d,Z,'EX',M);return y['set'](d,Z);},'del':d=>y[Q(0x150)](d),'delete':d=>y['del'](d),'close':()=>y[Q(0x151)](),'ping':()=>y[Q(0x152)](),'hincrby':(d,Z,M)=>y['hincrby'](d,Z,M),'incrby':(d,Z)=>y[Q(0x153)](d,Z)};}
1
+ import{Redis}from'ioredis';function z(){const o=['Creating\x20Redis\x20client\x20with\x20config:','get','incrby'];z=function(){return o;};return z();}function G(w,h){w=w-0x1c6;const S=z();let X=S[w];return X;}export function createRedis(w){const D=G;console['log'](D(0x1c6),w);const h=new Redis(w);return{'get':S=>h[D(0x1c7)](S),'set':(S,X,Y,v)=>{if(v)return h['set'](S,X,'EX',v);if(typeof Y==='number')return h['set'](S,X,'EX',Y);return h['set'](S,X);},'del':S=>h['del'](S),'delete':S=>h['del'](S),'close':()=>h['quit'](),'ping':()=>h['ping'](),'hincrby':(S,X,Y)=>h['hincrby'](S,X,Y),'incrby':(S,X)=>h[D(0x1c8)](S,X)};}
@@ -1,3 +1,3 @@
1
- import type { ResourceDependencies, ResourcePlugin } from './resource.types.js';
1
+ import type { ResourceDependencies, ResourcePlugin } from "./resource.types.js";
2
2
  export declare function createResource(deps: ResourceDependencies): ResourcePlugin;
3
3
  //# sourceMappingURL=resource.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"resource.d.ts","sourceRoot":"","sources":["../../../src/plugins/resource/resource.ts"],"names":[],"mappings":"AAIA,OAAO,KAAK,EAAE,oBAAoB,EAAE,cAAc,EAAE,MAAM,qBAAqB,CAAC;AAUhF,wBAAgB,cAAc,CAAC,IAAI,EAAE,oBAAoB,GAAG,cAAc,CA2BzE"}
1
+ {"version":3,"file":"resource.d.ts","sourceRoot":"","sources":["../../../src/plugins/resource/resource.ts"],"names":[],"mappings":"AAIA,OAAO,KAAK,EAAE,oBAAoB,EAAE,cAAc,EAAE,MAAM,qBAAqB,CAAC;AAUhF,wBAAgB,cAAc,CAAC,IAAI,EAAE,oBAAoB,GAAG,cAAc,CA4BzE"}
@@ -1 +1 @@
1
- import{ResourceRegistry}from'./resource.registry.js';import{createFind}from'./services/find.js';import{createFindOne}from'./services/find-one.js';import{createCreate}from'./services/create.js';function f(){const T=['has','bind'];f=function(){return T;};return f();}import{createUpdate}from'./services/update.js';import{createRemove}from'./services/delete.js';import{createFindRelation}from'./services/find-relation.js';function Y(w,y){w=w-0x1eb;const d=f();let Z=d[w];return Z;}import{createCreateRelation}from'./services/create-relation.js';import{createDeleteRelation}from'./services/delete-relation.js';import{createUpdateRelation}from'./services/update-relation.js';export function createResource(w){const K=Y,y=new ResourceRegistry(),d=createFind(w,y),Z=createFindOne(w,y),M=createCreate(w,y),H=createUpdate(w,y),Q=createRemove(w,y),s=createFindRelation(w,y),j=createCreateRelation(w,y),n=createUpdateRelation(w,y),t=createDeleteRelation(w,y);return{'register':y['register']['bind'](y),'has':y[K(0x1eb)]['bind'](y),'get':y['get']['bind'](y),'list':y['list'][K(0x1ec)](y),'find':d,'findOne':Z,'create':M,'update':H,'delete':Q,'findRelation':s,'createRelation':j,'updateRelation':n,'deleteRelation':t};}
1
+ import{ResourceRegistry}from'./resource.registry.js';import{createFind}from'./services/find.js';import{createFindOne}from'./services/find-one.js';function z(){const y=['has','bind','list'];z=function(){return y;};return z();}import{createCreate}from'./services/create.js';import{createUpdate}from'./services/update.js';import{createRemove}from'./services/delete.js';import{createFindRelation}from'./services/find-relation.js';function G(w,h){w=w-0xee;const S=z();let X=S[w];return X;}import{createCreateRelation}from'./services/create-relation.js';import{createDeleteRelation}from'./services/delete-relation.js';import{createUpdateRelation}from'./services/update-relation.js';export function createResource(w){const K=G,h=new ResourceRegistry(),S=createFind(w,h),X=createFindOne(w,h),Y=createCreate(w,h),v=createUpdate(w,h),D=createRemove(w,h),o=createFindRelation(w,h),q=createCreateRelation(w,h),e=createUpdateRelation(w,h),Z=createDeleteRelation(w,h);return{'register':h['register']['bind'](h),'unregister':h['unregister']['bind'](h),'has':h[K(0xee)]['bind'](h),'get':h['get'][K(0xef)](h),'list':h[K(0xf0)]['bind'](h),'find':S,'findOne':X,'create':Y,'update':v,'delete':D,'findRelation':o,'createRelation':q,'updateRelation':e,'deleteRelation':Z};}
@@ -1,7 +1,8 @@
1
- import type { ResourceContract } from './resource.types.js';
1
+ import type { ResourceContract } from "./resource.types.js";
2
2
  export declare class ResourceRegistry {
3
3
  private readonly resources;
4
- register(input: ResourceContract | ResourceContract[]): void;
4
+ unregister(name: string): void;
5
+ register(input: ResourceContract | ResourceContract[], overwrite?: boolean): void;
5
6
  has(name: string): boolean;
6
7
  get(name: string): ResourceContract;
7
8
  list(): ResourceContract[];
@@ -1 +1 @@
1
- {"version":3,"file":"resource.registry.d.ts","sourceRoot":"","sources":["../../../src/plugins/resource/resource.registry.ts"],"names":[],"mappings":"AAIA,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,qBAAqB,CAAC;AAK5D,qBAAa,gBAAgB;IACzB,OAAO,CAAC,QAAQ,CAAC,SAAS,CAAuC;IAEjE,QAAQ,CAAC,KAAK,EAAE,gBAAgB,GAAG,gBAAgB,EAAE,QAOpD;IAED,GAAG,CAAC,IAAI,EAAE,MAAM,WAEf;IAED,GAAG,CAAC,IAAI,EAAE,MAAM,oBAKf;IAED,IAAI,uBAEH;IAED,OAAO,CAAC,QAAQ;CAQnB"}
1
+ {"version":3,"file":"resource.registry.d.ts","sourceRoot":"","sources":["../../../src/plugins/resource/resource.registry.ts"],"names":[],"mappings":"AAIA,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,qBAAqB,CAAC;AAK5D,qBAAa,gBAAgB;IAC3B,OAAO,CAAC,QAAQ,CAAC,SAAS,CAAuC;IACjE,UAAU,CAAC,IAAI,EAAE,MAAM,QAEtB;IACD,QAAQ,CAAC,KAAK,EAAE,gBAAgB,GAAG,gBAAgB,EAAE,EAAE,SAAS,UAAQ,QAUvE;IAED,GAAG,CAAC,IAAI,EAAE,MAAM,WAEf;IAED,GAAG,CAAC,IAAI,EAAE,MAAM,oBAIf;IAED,IAAI,uBAEH;IAED,OAAO,CAAC,QAAQ;CAajB"}
@@ -1 +1 @@
1
- function f(){const n=['test','register','isArray','validate','resources','name','has','Resource\x20not\x20registered:\x20','table'];f=function(){return n;};return f();}function Y(w,y){w=w-0x166;const d=f();let Z=d[w];return Z;}const M=Y;import{ValidationError,ConflictError,NotFoundError}from'../../errors.js';const ident=/^[a-zA-Z0-9_-]*$/;function validQualified(w){const Z=Y;return w['split']('.')['length']<=0x2&&w['split']('.')['every'](y=>ident[Z(0x166)](y));}export class ResourceRegistry{['resources']=new Map();[M(0x167)](w){const H=M;for(const y of Array[H(0x168)](w)?w:[w]){this[H(0x169)](y);if(this[H(0x16a)]['has'](y[H(0x16b)]))throw new ConflictError('Resource\x20already\x20registered:\x20'+y['name']);this['resources']['set'](y['name'],y);}}[M(0x16c)](w){return this['resources']['has'](w);}['get'](w){const Q=M,y=this[Q(0x16a)]['get'](w);if(!y)throw new NotFoundError(Q(0x16d)+w);return y;}['list'](){const s=M;return[...this[s(0x16a)]['values']()];}[M(0x169)](w){const j=M;if(w['version']!==0x1||!ident[j(0x166)](w[j(0x16b)])||!validQualified(w[j(0x16e)])||!ident['test'](w['key']))throw new ValidationError('Invalid\x20resource\x20contract:\x20'+w['name']);for(const [y,d]of Object['entries'](w['fields'])){if(!ident['test'](y)||!ident['test'](d['column']??y))throw new ValidationError('Invalid\x20resource\x20field:\x20'+y);}}}
1
+ function G(w,h){w=w-0x165;const S=z();let X=S[w];return X;}import{ValidationError,ConflictError,NotFoundError}from'../../errors.js';const ident=/^[a-zA-Z0-9_-]*$/;function z(){const e=['length','name','resources','set','has','values','Invalid\x20resource\x20contract:\x20','test'];z=function(){return e;};return z();}function validQualified(w){const X=G;return w['split']('.')[X(0x165)]<=0x2&&w['split']('.')['every'](h=>ident['test'](h));}export class ResourceRegistry{['resources']=new Map();['unregister'](w){this['resources']['delete'](w);}['register'](w,h=![]){const Y=G;for(const S of Array['isArray'](w)?w:[w]){this['validate'](S);if(this['resources']['has'](S[Y(0x166)])&&!h)throw new ConflictError('Resource\x20already\x20registered:\x20'+S[Y(0x166)]);this[Y(0x167)][Y(0x168)](S['name'],S);}}['has'](w){const v=G;return this['resources'][v(0x169)](w);}['get'](w){const D=G,h=this[D(0x167)]['get'](w);if(!h)throw new NotFoundError('Resource\x20not\x20registered:\x20'+w);return h;}['list'](){const o=G;return[...this['resources'][o(0x16a)]()];}['validate'](w){const q=G;if(w['version']!==0x1||!ident['test'](w['name'])||!validQualified(w['table'])||!ident['test'](w['key']))throw new ValidationError(q(0x16b)+w['name']);for(const [h,S]of Object['entries'](w['fields'])){if(!ident[q(0x16c)](h)||!ident['test'](S['column']??h))throw new ValidationError('Invalid\x20resource\x20field:\x20'+h);}}}
@@ -8,12 +8,12 @@ import type { DictionaryPlugin } from "../dictionary.js";
8
8
  import type { FileAdapter } from "../file.js";
9
9
  import { User } from "../../context.js";
10
10
  import type { AppContext } from "../../context.js";
11
- export type ResourceAggregate = 'count' | 'countDistinct' | 'sum' | 'avg' | 'min' | 'max';
11
+ export type ResourceAggregate = "count" | "countDistinct" | "sum" | "avg" | "min" | "max";
12
12
  export type ResourceSummaryItem = {
13
- aggregate: 'count';
13
+ aggregate: "count";
14
14
  where?: string;
15
15
  } | {
16
- aggregate: 'countDistinct' | 'sum' | 'avg' | 'min' | 'max';
16
+ aggregate: "countDistinct" | "sum" | "avg" | "min" | "max";
17
17
  field: string;
18
18
  where?: string;
19
19
  } | {
@@ -118,7 +118,8 @@ export interface ResourceDependencies {
118
118
  file?: FileAdapter;
119
119
  }
120
120
  export interface ResourcePlugin {
121
- register(input: ResourceContract | ResourceContract[]): void;
121
+ register(input: ResourceContract | ResourceContract[], overwrite?: boolean): void;
122
+ unregister(name: string): void;
122
123
  has(name: string): boolean;
123
124
  get(name: string): ResourceContract;
124
125
  list(): ResourceContract[];
@@ -1 +1 @@
1
- {"version":3,"file":"resource.types.d.ts","sourceRoot":"","sources":["../../../src/plugins/resource/resource.types.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"resource.types.d.ts","sourceRoot":"","sources":["../../../src/plugins/resource/resource.types.ts"],"names":[],"mappings":"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"}
@@ -1 +1 @@
1
- function Y(w,y){w=w-0x18c;const d=f();let Z=d[w];return Z;}const dictionaryIndexesCache=new WeakMap(),dictionaryRevisionsCache=new WeakMap();async function getDictionaryIndexes(w,y){const K=Y,d=dictionaryIndexesCache[K(0x18c)](y)??new Map(),Z=dictionaryRevisionsCache['get'](y)??new Map();dictionaryIndexesCache['set'](y,d),dictionaryRevisionsCache['set'](y,Z);const M=w['filter'](Q=>Z['get'](Q)!==y['revision'](Q));if(M['length']===0x0)return d;const H=await Promise[K(0x18d)](M['map'](async Q=>{const T=K;if(!y['has'](Q))return[Q,new Map()];const s=await y['get'](Q),j=new Map();for(const n of s){const t=n['code']??n['id'];if(t==null)continue;j['set'](String(t),{'id':t,'text':n[T(0x18e)]??n['text'],...n['color']!==undefined?{'color':n['color']}:{},...n['icon']!==undefined?{'icon':n['icon']}:{}});}return[Q,j];}));for(const [Q,s]of H){d[K(0x18f)](Q,s),Z[K(0x18f)](Q,y['revision'](Q));}return d;}export async function addDictionaryLookupData(w,y,d){const h=Y;if(!d||w['length']===0x0)return w;const Z=Object['entries'](y)['flatMap'](([H,Q])=>{const s=Q['dictionary'];return s?[{'field':H,'dictionaryName':s}]:[];});if(Z['length']===0x0)return w;const M=await getDictionaryIndexes([...new Set(Z['map'](({dictionaryName:H})=>H))],d);for(const H of w){for(const {field:Q,dictionaryName:s}of Z){const j=H[Q];H[Q+'_data']=j==null?null:M[h(0x18c)](s)?.['get'](String(j))??null;}}return w;}function f(){const i=['get','all','name','set'];f=function(){return i;};return f();}
1
+ const dictionaryIndexesCache=new WeakMap(),dictionaryRevisionsCache=new WeakMap();async function getDictionaryIndexes(w,h){const K=G,S=dictionaryIndexesCache['get'](h)??new Map(),X=dictionaryRevisionsCache['get'](h)??new Map();dictionaryIndexesCache['set'](h,S),dictionaryRevisionsCache['set'](h,X);const Y=w['filter'](D=>X[K(0x16b)](D)!==h['revision'](D));if(Y['length']===0x0)return S;const v=await Promise['all'](Y['map'](async D=>{const y=K;if(!h[y(0x16c)](D))return[D,new Map()];const o=await h[y(0x16b)](D),q=new Map();for(const e of o){const Z=e['code']??e['id'];if(Z==null)continue;q[y(0x16d)](String(Z),{'id':Z,'text':e[y(0x16e)]??e['text'],...e['color']!==undefined?{'color':e['color']}:{},...e['icon']!==undefined?{'icon':e['icon']}:{}});}return[D,q];}));for(const [D,o]of v){S['set'](D,o),X['set'](D,h['revision'](D));}return S;}function z(){const H=['get','has','set','name','length','dictionary','_data'];z=function(){return H;};return z();}function G(w,h){w=w-0x16b;const S=z();let X=S[w];return X;}export async function addDictionaryLookupData(w,h,S){const V=G;if(!S||w[V(0x16f)]===0x0)return w;const X=Object['entries'](h)['flatMap'](([v,D])=>{const O=V,o=D[O(0x170)];return o?[{'field':v,'dictionaryName':o}]:[];});if(X[V(0x16f)]===0x0)return w;const Y=await getDictionaryIndexes([...new Set(X['map'](({dictionaryName:v})=>v))],S);for(const v of w){for(const {field:D,dictionaryName:o}of X){const q=v[D];v[D+V(0x171)]=q==null?null:Y[V(0x16b)](o)?.['get'](String(q))??null;}}return w;}
@@ -1 +1 @@
1
- function Y(w,y){w=w-0xf2;const d=f();let Z=d[w];return Z;}function f(){const j=['entries','filter','length'];f=function(){return j;};return f();}export function addFileToken(w,y,d){const s=Y;if(!d||w['length']===0x0)return w;const Z=Object[s(0xf2)](y)[s(0xf3)](([,M])=>M['type']==='file')['map'](([M])=>M);for(const M of w){for(const H of Z){const Q=M[H];typeof Q==='string'&&Q[s(0xf4)]>0x0&&(M[H]=d['create'](Q));}}return w;}
1
+ export function addFileToken(w,h,S){const o=G;if(!S||w['length']===0x0)return w;const X=Object[o(0x116)](h)['filter'](([,Y])=>Y['type']===o(0x117))[o(0x118)](([Y])=>Y);for(const Y of w){for(const v of X){const D=Y[v];typeof D==='string'&&D['length']>0x0&&(Y[v]=S['create'](D));}}return w;}function G(w,h){w=w-0x116;const S=z();let X=S[w];return X;}function z(){const q=['entries','file','map'];z=function(){return q;};return z();}
@@ -1 +1 @@
1
- import{qi,qt}from'../utils/sql.js';const tableLookupCache=new WeakMap();export function clearTableLookupCache(w,y){const d=tableLookupCache['get'](y);if(!d)return;for(const Z of d['keys']()){Z['startsWith'](w+':')&&d['delete'](Z);}}function f(){const e=['flatMap','number','set','has','query','SELECT\x20','\x20AS\x20text\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20FROM\x20','\x20=\x20ANY($1)','field'];f=function(){return e;};return f();}function Y(w,y){w=w-0xc1;const d=f();let Z=d[w];return Z;}export async function addTableLookupData(w,y,d){const E=Y;if(!d||w['length']===0x0)return w;const Z=tableLookupCache['get'](d)??new Map();tableLookupCache['set'](d,Z);const M=Object['entries'](y)[E(0xc1)](([H,Q])=>{const {table:s,value:value='id',text:text='name'}=Q['lookup']??{};return s?[{'field':H,'table':s,'value':value,'text':text}]:[];});for(const H of M){const Q=new Map();for(const t of w){const K=t[H['field']];(typeof K==='string'||typeof K===E(0xc2))&&Q['set'](String(K),K);}const s=H['table']+':'+H['value']+':'+H['text'],j=Z['get'](s)??new Map();Z[E(0xc3)](s,j);const n=[...Q['entries']()]['filter'](([T])=>!j[E(0xc4)](T))['map'](([,T])=>T);if(n['length']>0x0){const T=await d[E(0xc5)](E(0xc6)+qi(H['value'])+'\x20AS\x20id,\x20'+qi(H['text'])+E(0xc7)+qt(H['table'])+'\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20WHERE\x20'+qi(H['value'])+E(0xc8),[n]);for(const h of T['rows']){j['set'](String(h['id']),h);}for(const i of n){!j['has'](String(i))&&j['set'](String(i),null);}}for(const G of w){const U=G[H[E(0xc9)]];G[H['field']+'_data']=U==null?null:j['get'](String(U))??null;}}return w;}
1
+ function G(w,h){w=w-0x1a5;const S=z();let X=S[w];return X;}import{qi,qt}from'../utils/sql.js';const tableLookupCache=new WeakMap();export function clearTableLookupCache(w,h){const Q=G,S=tableLookupCache['get'](h);if(!S)return;for(const X of S['keys']()){X[Q(0x1a5)](w+':')&&S[Q(0x1a6)](X);}}export async function addTableLookupData(w,h,S){const P=G;if(!S||w[P(0x1a7)]===0x0)return w;const X=tableLookupCache['get'](S)??new Map();tableLookupCache['set'](S,X);const Y=Object['entries'](h)['flatMap'](([v,D])=>{const x=P,{table:o,value:value='id',text:text=x(0x1a8)}=D[x(0x1a9)]??{};return o?[{'field':v,'table':o,'value':value,'text':text}]:[];});for(const v of Y){const D=new Map();for(const Z of w){const K=Z[v['field']];(typeof K===P(0x1aa)||typeof K===P(0x1ab))&&D[P(0x1ac)](String(K),K);}const o=v['table']+':'+v[P(0x1ad)]+':'+v[P(0x1ae)],q=X['get'](o)??new Map();X['set'](o,q);const e=[...D[P(0x1af)]()][P(0x1b0)](([y])=>!q['has'](y))['map'](([,y])=>y);if(e['length']>0x0){const y=await S[P(0x1b1)]('SELECT\x20'+qi(v['value'])+'\x20AS\x20id,\x20'+qi(v[P(0x1ae)])+P(0x1b2)+qt(v['table'])+P(0x1b3)+qi(v['value'])+'\x20=\x20ANY($1)',[e]);for(const V of y[P(0x1b4)]){q['set'](String(V['id']),V);}for(const O of e){!q[P(0x1b5)](String(O))&&q['set'](String(O),null);}}for(const H of w){const R=H[v['field']];H[v['field']+'_data']=R==null?null:q['get'](String(R))??null;}}return w;}function z(){const c=['startsWith','delete','length','name','lookup','string','number','set','value','text','entries','filter','query','\x20AS\x20text\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20FROM\x20','\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20WHERE\x20','rows','has'];z=function(){return c;};return z();}
@@ -1 +1 @@
1
- import{UnsupportedError}from'../../../errors.js';import{createCreate}from'./create.js';function f(){const e=['get','includes','rows','gallery','size','image/jpeg','Generic\x20Resource\x20relation\x20\x22'];f=function(){return e;};return f();}function Y(w,y){w=w-0x1a2;const d=f();let Z=d[w];return Z;}export function createCreateRelation(w,y){const d=createCreate(w,y);return async function Z({name:M,id:H,relation:Q,data:s,user:j},n){const E=Y,t=n?.['pg']??w['pg'],K=y[E(0x1a2)](M);if(['notes','files','gallery'][E(0x1a3)](Q)&&!K['capabilities']?.['includes'](Q))throw new UnsupportedError('Generic\x20Resource\x20relation\x20\x22'+Q+'\x22\x20requires\x20a\x20capabilities\x20\x22'+Q+'\x22');if(Q==='notes'){const i=await t['query']('INSERT\x20INTO\x20admin.notes(resource,resource_id,body)\x20VALUES\x20($1,$2,$3)\x20RETURNING\x20*',[M,String(H),s?.['body']]);return i['rows'][0x0];}if(Q==='files'){const G=await t['query']('INSERT\x20INTO\x20admin.files\x20(resource,\x20resource_id,\x20file_path,\x20size)\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20VALUES\x20($1,\x20$2,\x20$3,\x20$4)\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20RETURNING\x20*',[M,String(H),s?.['filePath'],s?.['size']??null]);return G[E(0x1a4)][0x0];}if(Q===E(0x1a5)){const U=await t['query']('INSERT\x20INTO\x20admin.gallery\x20(resource,\x20resource_id,\x20file_path,\x20size,\x20mime_type)\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20VALUES\x20($1,\x20$2,\x20$3,\x20$4)\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20RETURNING\x20*',[M,String(H),s?.['filePath'],s?.[E(0x1a6)]??null,s?.['mimeType']??E(0x1a7)]);return U['rows'][0x0];}const T=K['relations']?.[Q];if(!T?.['foreignKey']||!T['resource']&&!T['table'])throw new UnsupportedError(E(0x1a8)+Q+'\x22\x20requires\x20a\x20project/provider\x20implementation');if(!s)throw new UnsupportedError('No\x20data\x20provided\x20for\x20relation:\x20'+s);if(!T['resource'])throw new UnsupportedError('Relation\x20update\x20is\x20not\x20configured:\x20'+Q);s[T['foreignKey']]=H;const h=await d({'name':T['resource'],'data':s??{},'user':j});return h;};}
1
+ import{UnsupportedError}from'../../../errors.js';function z(){const P=['get','gallery','includes','capabilities','\x22\x20requires\x20a\x20capabilities\x20\x22','INSERT\x20INTO\x20admin.files\x20(resource,\x20resource_id,\x20file_path,\x20size)\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20VALUES\x20($1,\x20$2,\x20$3,\x20$4)\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20RETURNING\x20*','rows','query','image/jpeg','\x22\x20requires\x20a\x20project/provider\x20implementation','No\x20data\x20provided\x20for\x20relation:\x20','resource'];z=function(){return P;};return z();}import{createCreate}from'./create.js';function G(w,h){w=w-0x1cb;const S=z();let X=S[w];return X;}export function createCreateRelation(w,h){const S=createCreate(w,h);return async function X({name:Y,id:v,relation:D,data:o,user:q},e){const Q=G,Z=e?.['pg']??w['pg'],K=h[Q(0x1cb)](Y);if(['notes','files',Q(0x1cc)][Q(0x1cd)](D)&&!K[Q(0x1ce)]?.['includes'](D))throw new UnsupportedError('Generic\x20Resource\x20relation\x20\x22'+D+Q(0x1cf)+D+'\x22');if(D==='notes'){const O=await Z['query']('INSERT\x20INTO\x20admin.notes(resource,resource_id,body)\x20VALUES\x20($1,$2,$3)\x20RETURNING\x20*',[Y,String(v),o?.['body']]);return O['rows'][0x0];}if(D==='files'){const H=await Z['query'](Q(0x1d0),[Y,String(v),o?.['filePath'],o?.['size']??null]);return H[Q(0x1d1)][0x0];}if(D==='gallery'){const R=await Z[Q(0x1d2)]('INSERT\x20INTO\x20admin.gallery\x20(resource,\x20resource_id,\x20file_path,\x20size,\x20mime_type)\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20VALUES\x20($1,\x20$2,\x20$3,\x20$4)\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20RETURNING\x20*',[Y,String(v),o?.['filePath'],o?.['size']??null,o?.['mimeType']??Q(0x1d3)]);return R[Q(0x1d1)][0x0];}const y=K['relations']?.[D];if(!y?.['foreignKey']||!y['resource']&&!y['table'])throw new UnsupportedError('Generic\x20Resource\x20relation\x20\x22'+D+Q(0x1d4));if(!o)throw new UnsupportedError(Q(0x1d5)+o);if(!y['resource'])throw new UnsupportedError('Relation\x20update\x20is\x20not\x20configured:\x20'+D);o[y['foreignKey']]=v;const V=await S({'name':y[Q(0x1d6)],'data':o??{},'user':q});return V;};}
@@ -1 +1 @@
1
- function f(){const e=['get','create','fields','created_at','created_by','push','No\x20writable\x20fields','VALUES\x20(','RETURNING\x20*','rows','table','audit','module','name','key'];f=function(){return e;};return f();}import{ValidationError}from'../../../errors.js';function Y(w,y){w=w-0x1af;const d=f();let Z=d[w];return Z;}import{assertOperation}from'../utils/permissions.js';import{qi,qt,writableData}from'../utils/sql.js';import{validateInputData}from'../utils/fields.js';import{clearTableLookupCache}from'./add-table-lookup-data.js';export function createCreate(w,y){return async function d({name:Z,data:M,user:H},Q){const E=Y,s=y[E(0x1af)](Z);assertOperation(s,E(0x1b0),H),validateInputData({'resource':s,'data':M});const j=writableData(s,M);s[E(0x1b1)][E(0x1b2)]&&j['push'](['created_at',new Date()]);s['fields'][E(0x1b3)]&&j[E(0x1b4)](['created_by',H?.['id']]);if(!j['length'])throw new ValidationError(E(0x1b5));const n=j['map'](([G])=>qi(G)),t=j['map']((G,U)=>'$'+(U+0x1)),K=j['map'](([,G])=>G),T=Q?.['pg']??w['pg'],h=await T['query']('INSERT\x20INTO\x20'+qt(s['table'])+'\x20('+n['join'](',\x20')+')\x20'+(E(0x1b6)+t['join'](',\x20')+')\x20')+E(0x1b7),K),i=h[E(0x1b8)][0x0];return clearTableLookupCache(s[E(0x1b9)],T),await(Q?.[E(0x1ba)]??w['audit'])?.['write']({'userId':H?.['id'],'module':s[E(0x1bb)],'resource':s[E(0x1bc)],'resourceId':i[s[E(0x1bd)]],'action':'create','fields':Object['keys'](M)}),i;};}
1
+ import{ValidationError}from'../../../errors.js';function G(w,h){w=w-0x9d;const S=z();let X=S[w];return X;}import{assertOperation}from'../utils/permissions.js';import{qi,qt,writableData}from'../utils/sql.js';import{validateInputData}from'../utils/fields.js';import{clearTableLookupCache}from'./add-table-lookup-data.js';export function createCreate(w,h){return async function S({name:X,data:Y,user:v},D){const Q=G,o=h[Q(0x9d)](X);assertOperation(o,Q(0x9e),v),validateInputData({'resource':o,'data':Y});const q=writableData(o,Y);o['fields']['created_at']&&q[Q(0x9f)]([Q(0xa0),new Date()]);o['fields']['created_by']&&q[Q(0x9f)](['created_by',v?.['id']]);if(!q['length'])throw new ValidationError('No\x20writable\x20fields');const e=q[Q(0xa1)](([H])=>qi(H)),Z=q['map']((H,R)=>'$'+(R+0x1)),K=q[Q(0xa1)](([,H])=>H),y=D?.['pg']??w['pg'],V=await y['query']('INSERT\x20INTO\x20'+qt(o['table'])+'\x20('+e['join'](',\x20')+')\x20'+('VALUES\x20('+Z[Q(0xa2)](',\x20')+')\x20')+'RETURNING\x20*',K),O=V['rows'][0x0];return clearTableLookupCache(o[Q(0xa3)],y),await(D?.['audit']??w[Q(0xa4)])?.[Q(0xa5)]({'userId':v?.['id'],'module':o['module'],'resource':o['name'],'resourceId':O[o['key']],'action':'create','fields':Object['keys'](Y)}),O;};}function z(){const P=['get','create','push','created_at','map','join','table','audit','write'];z=function(){return P;};return z();}
@@ -1 +1 @@
1
- import{UnsupportedError}from'../../../errors.js';function Y(w,y){w=w-0x176;const d=f();let Z=d[w];return Z;}import{createRemove}from'./delete.js';export function createDeleteRelation(w,y){const d=createRemove(w,y);return async function Z({name:M,id:H,relation:Q,relationId:s,user:j},n){const i=Y,t=n?.['pg']??w['pg'],K=y['get'](M);if(['notes',i(0x176),'gallery']['includes'](Q)&&!K[i(0x177)]?.[i(0x178)](Q))throw new UnsupportedError('Generic\x20Resource\x20relation\x20\x22'+Q+'\x22\x20requires\x20a\x20capabilities\x20\x22'+Q+'\x22');if(Q==='notes')return await t['query']('DELETE\x20FROM\x20admin.notes\x20WHERE\x20note_id\x20=\x20$1\x20AND\x20resource\x20=\x20$2\x20AND\x20resource_id\x20=\x20$3',[s,M,String(H)]),{'success':!![]};if(Q==='files')return await t['query']('DELETE\x20FROM\x20admin.files\x20WHERE\x20file_id\x20=\x20$1\x20AND\x20resource\x20=\x20$2\x20AND\x20resource_id\x20=\x20$3',[s,M,String(H)]),{'success':!![]};if(Q==='gallery')return await t['query']('DELETE\x20FROM\x20admin.gallery\x20WHERE\x20id\x20=\x20$1\x20AND\x20resource\x20=\x20$2\x20AND\x20resource_id\x20=\x20$3',[s,M,String(H)]),{'success':!![]};const T=K['relations']?.[Q];if(!T?.['resource']||!T['foreignKey'])throw new UnsupportedError(i(0x179)+Q+'\x22\x20requires\x20a\x20project/provider\x20implementation');const h=await d({'name':T['resource'],'id':s,'user':j,'where':{'column':T['foreignKey'],'value':H}},n);return{'success':h};};}function f(){const G=['files','capabilities','includes','Generic\x20Resource\x20relation\x20\x22'];f=function(){return G;};return f();}
1
+ import{UnsupportedError}from'../../../errors.js';import{createRemove}from'./delete.js';function G(w,h){w=w-0xfc;const S=z();let X=S[w];return X;}function z(){const H=['capabilities','query','resource'];z=function(){return H;};return z();}export function createDeleteRelation(w,h){const S=createRemove(w,h);return async function X({name:Y,id:v,relation:D,relationId:o,user:q},e){const O=G,Z=e?.['pg']??w['pg'],K=h['get'](Y);if(['notes','files','gallery']['includes'](D)&&!K[O(0xfc)]?.['includes'](D))throw new UnsupportedError('Generic\x20Resource\x20relation\x20\x22'+D+'\x22\x20requires\x20a\x20capabilities\x20\x22'+D+'\x22');if(D==='notes')return await Z[O(0xfd)]('DELETE\x20FROM\x20admin.notes\x20WHERE\x20note_id\x20=\x20$1\x20AND\x20resource\x20=\x20$2\x20AND\x20resource_id\x20=\x20$3',[o,Y,String(v)]),{'success':!![]};if(D==='files')return await Z['query']('DELETE\x20FROM\x20admin.files\x20WHERE\x20file_id\x20=\x20$1\x20AND\x20resource\x20=\x20$2\x20AND\x20resource_id\x20=\x20$3',[o,Y,String(v)]),{'success':!![]};if(D==='gallery')return await Z['query']('DELETE\x20FROM\x20admin.gallery\x20WHERE\x20id\x20=\x20$1\x20AND\x20resource\x20=\x20$2\x20AND\x20resource_id\x20=\x20$3',[o,Y,String(v)]),{'success':!![]};const y=K['relations']?.[D];if(!y?.[O(0xfe)]||!y['foreignKey'])throw new UnsupportedError('Generic\x20Resource\x20relation\x20\x22'+D+'\x22\x20requires\x20a\x20project/provider\x20implementation');const V=await S({'name':y[O(0xfe)],'id':o,'user':q,'where':{'column':y['foreignKey'],'value':v}},e);return{'success':V};};}
@@ -1 +1 @@
1
- import{assertOperation}from'../utils/permissions.js';import{qt,qi}from'../utils/sql.js';function Y(w,y){w=w-0xd4;const d=f();let Z=d[w];return Z;}import{clearTableLookupCache}from'./add-table-lookup-data.js';function f(){const i=['get','WHERE\x20','key','where','\x20AND\x20(','query','table','audit','module','rowCount'];f=function(){return i;};return f();}export function createRemove(w,y){return async function d({name:Z,id:M,user:H,where:Q},s){const h=Y,j=y[h(0xd4)](Z);assertOperation(j,'delete',H);const n=s?.['pg']??w['pg'],t=[M];let K=h(0xd5)+qi(j[h(0xd6)])+'\x20=\x20$1';Q&&(t['push'](Q['value']),K+='\x20AND\x20'+qi(Q['column'])+'\x20=\x20$'+t['length']);j[h(0xd7)]&&(K+=h(0xd8)+j['where']+')');const T=await n[h(0xd9)]('DELETE\x20FROM\x20'+qt(j[h(0xda)])+'\x20'+K,t);if((T['rowCount']??0x0)>0x0)clearTableLookupCache(j['table'],n);if((T['rowCount']??0x0)>0x0)await(s?.[h(0xdb)]??w[h(0xdb)])?.['write']({'module':j[h(0xdc)],'resource':j['name'],'resourceId':M,'action':'delete'});return(T[h(0xdd)]??0x0)>0x0;};}
1
+ import{assertOperation}from'../utils/permissions.js';import{qt,qi}from'../utils/sql.js';import{clearTableLookupCache}from'./add-table-lookup-data.js';export function createRemove(w,h){return async function S({name:X,id:Y,user:v,where:D},o){const V=G,q=h[V(0x1ac)](X);assertOperation(q,'delete',v);const e=o?.['pg']??w['pg'],Z=[Y];let K=V(0x1ad)+qi(q[V(0x1ae)])+V(0x1af);D&&(Z['push'](D['value']),K+='\x20AND\x20'+qi(D[V(0x1b0)])+'\x20=\x20$'+Z[V(0x1b1)]);q['where']&&(K+='\x20AND\x20('+q['where']+')');const y=await e['query']('DELETE\x20FROM\x20'+qt(q['table'])+'\x20'+K,Z);if((y['rowCount']??0x0)>0x0)clearTableLookupCache(q[V(0x1b2)],e);if((y[V(0x1b3)]??0x0)>0x0)await(o?.['audit']??w['audit'])?.['write']({'module':q[V(0x1b4)],'resource':q[V(0x1b5)],'resourceId':Y,'action':'delete'});return(y['rowCount']??0x0)>0x0;};}function G(w,h){w=w-0x1ac;const S=z();let X=S[w];return X;}function z(){const O=['get','WHERE\x20','key','\x20=\x20$1','column','length','table','rowCount','module','name'];z=function(){return O;};return z();}
@@ -1 +1 @@
1
- import{ValidationError}from'../../../errors.js';import{assertOperation}from'../utils/permissions.js';import{qt,qi,readableFields}from'../utils/sql.js';function f(){const E=['get','type','table','key','=$1','include','rows'];f=function(){return E;};return f();}import{addDictionaryLookupData}from'./add-dictionary-lookup-data.js';import{addTableLookupData}from'./add-table-lookup-data.js';import{addFileToken}from'./add-file-token.js';import{createFindRelation}from'./find-relation.js';function Y(w,y){w=w-0x1ba;const d=f();let Z=d[w];return Z;}export function createFindOne(w,y){return async function d({name:Z,id:M,query:query={},user:H}){const U=Y,Q=Date['now'](),s=y[U(0x1ba)](Z);assertOperation(s,'read',H);if(s['fields'][s['key']]?.[U(0x1bb)]==='integer'&&!Number['isInteger'](Number(M)))throw new ValidationError('Invalid\x20id:\x20'+M+'\x20name:'+Z);const j=s['joins']?.['map'](i=>i['sql']+'\x20')['join']('\x20')||'',n=s['where']?'\x20AND\x20('+s['where']+')':'',t=await w['pg']['query']('SELECT\x20'+readableFields(s)['join'](',\x20')+'\x20FROM\x20'+qt(s[U(0x1bc)])+'\x20t\x20'+j+'\x20WHERE\x20'+qi(s[U(0x1bd)])+U(0x1be)+n+'\x20LIMIT\x201',[M]),K=t['rows'][0x0];if(!K)return null;await addDictionaryLookupData([K],s['fields'],w['dictionary']),await addTableLookupData([K],s['fields'],w['pg']),addFileToken([K],s['fields'],w['file']);const T=Array['isArray'](query['include'])?query[U(0x1bf)]:query['include']?.['split'](',')??[],h=createFindRelation(w,y);for(const i of T){K[i]=await h({'name':Z,'id':M,'relation':i,'query':query,'user':H})['then'](G=>G[U(0x1c0)]??[]);}return K['time']=Date['now']()-Q,K;};}
1
+ import{ValidationError}from'../../../errors.js';import{assertOperation}from'../utils/permissions.js';import{qt,qi,readableFields}from'../utils/sql.js';import{addDictionaryLookupData}from'./add-dictionary-lookup-data.js';function G(w,h){w=w-0xab;const S=z();let X=S[w];return X;}import{addTableLookupData}from'./add-table-lookup-data.js';import{addFileToken}from'./add-file-token.js';import{createFindRelation}from'./find-relation.js';export function createFindOne(w,h){return async function S({name:X,id:Y,query:query={},user:v}){const R=G,D=Date['now'](),o=h[R(0xab)](X);assertOperation(o,R(0xac),v);if(o['fields'][o[R(0xad)]]?.['type']==='integer'&&!Number['isInteger'](Number(Y)))throw new ValidationError(R(0xae)+Y+'\x20name:'+X);const q=o['joins']?.[R(0xaf)](O=>O['sql']+'\x20')[R(0xb0)]('\x20')||'',e=o['where']?R(0xb1)+o['where']+')':'',Z=await w['pg']['query']('SELECT\x20'+readableFields(o)['join'](',\x20')+'\x20FROM\x20'+qt(o['table'])+'\x20t\x20'+q+'\x20WHERE\x20'+qi(o['key'])+'=$1'+e+'\x20LIMIT\x201',[Y]),K=Z['rows'][0x0];if(!K)return null;await addDictionaryLookupData([K],o['fields'],w['dictionary']),await addTableLookupData([K],o[R(0xb2)],w['pg']),addFileToken([K],o['fields'],w['file']);const y=Array['isArray'](query[R(0xb3)])?query[R(0xb3)]:query[R(0xb3)]?.['split'](',')??[],V=createFindRelation(w,h);for(const O of y){K[O]=await V({'name':X,'id':Y,'relation':O,'query':query,'user':v})['then'](H=>H['rows']??[]);}return K[R(0xb4)]=Date['now']()-D,K;};}function z(){const Q=['get','read','key','Invalid\x20id:\x20','map','join','\x20AND\x20(','fields','include','time'];z=function(){return Q;};return z();}
@@ -1 +1 @@
1
- import{UnsupportedError,ValidationError}from'../../../errors.js';function f(){const r=['now','capabilities','Generic\x20Resource\x20relation\x20\x22','notes','length','rows','files','file','\x22\x20requires\x20a\x20project/provider\x20implementation','fields','scope','map','join','\x20j\x20ON\x20j.','junctionLocalKey','where\x20','\x20=\x20(SELECT\x20','key','where','joins','\x20FROM\x20','dictionary'];f=function(){return r;};return f();}import{qi,qt}from'../utils/sql.js';import{addDictionaryLookupData}from'./add-dictionary-lookup-data.js';import{addTableLookupData}from'./add-table-lookup-data.js';function Y(w,y){w=w-0x1a1;const d=f();let Z=d[w];return Z;}import{addFileToken}from'./add-file-token.js';import{autoIndex}from'../utils/auto-index.js';export function createFindRelation(w,y){return async function d({name:Z,id:M,relation:H,query:query={}}){const o=Y,Q=Date[o(0x1a1)](),s=Math['min'](Math['max'](query['limit']??0x14,0x1),0xc8),j=Math['max'](query['offset']??0x0,0x0);if(!Number['isFinite'](s)||!Number['isFinite'](j))throw new ValidationError('Invalid\x20pagination');const n=y['get'](Z),t=n['relations']?.[H];if(['notes','files']['includes'](H)&&!n[o(0x1a2)]?.['includes'](H))throw new UnsupportedError(o(0x1a3)+H+'\x22\x20requires\x20a\x20capabilities\x20\x22'+H+'\x22');if(H===o(0x1a4)){const A=await w['pg']['query']('SELECT\x20*\x20FROM\x20admin.notes\x20WHERE\x20resource\x20=\x20$1\x20AND\x20resource_id\x20=\x20$2\x20ORDER\x20BY\x20created_at\x20DESC',[Z,String(M)]);return{'total':A['rows'][o(0x1a5)],'time':Date['now']()-Q,'rows':A[o(0x1a6)]};}if(H===o(0x1a7)){const c=await w['pg']['query']('SELECT\x20*\x20FROM\x20admin.files\x20WHERE\x20resource\x20=\x20$1\x20AND\x20resource_id\x20=\x20$2\x20ORDER\x20BY\x20created_at\x20DESC',[Z,String(M)]);return addFileToken(c['rows'],{'file_path':{'type':o(0x1a8)}},w['file']),{'total':c['rows']['length'],'time':Date[o(0x1a1)]()-Q,'rows':c['rows']};}if(!t?.['resource'])throw new UnsupportedError('Generic\x20Resource\x20relation\x20\x22'+H+o(0x1a9));const K=y['get'](t['resource']),T=K?.['key']??'id',h=K?.['table'],i=Object['keys'](K?.[o(0x1aa)]??{})['filter'](x=>K?.['fields'][x]?.['read']&&K?.[o(0x1aa)][x]?.[o(0x1ab)]!=='item')[o(0x1ac)](qi)['join'](',\x20'),G=t['fields']?.[o(0x1ad)](',\x20')||i||'*';t['foreignKey']&&autoIndex(h,t['foreignKey'],'btree',w['pg']);const U=t['junctionTable']?'JOIN\x20'+qt(t['junctionTable'])+o(0x1ae)+qi(t['junctionForeignKey'])+'\x20=\x20t.'+(t['junctionTargetKey']||qi(T))+'\x20WHERE\x20'+qi(t[o(0x1af)])+'\x20=\x20$1\x20':o(0x1b0)+(t['foreignKey']||qi(T))+o(0x1b1)+qi(t['localKey']||n[o(0x1b2)])+'\x20FROM\x20'+qt(n['table'])+'\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20WHERE\x20'+qi(n['key'])+'\x20=\x20$1\x20LIMIT\x201\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20)\x20'+(t['where']?'AND\x20('+t[o(0x1b3)]+')':''),E=K[o(0x1b4)]?.['map'](x=>x['sql']+'\x20')['join']('\x20')||'',e='SELECT\x20'+G+o(0x1b5)+qt(h)+'\x20t\x20'+E+'\x20'+U+'\x20LIMIT\x20$2\x20OFFSET\x20$3',l=await w['pg']['query'](e,[M,s,j]);return K&&(await addDictionaryLookupData(l['rows'],K['fields'],w[o(0x1b6)]),await addTableLookupData(l['rows'],K['fields'],w['pg']),addFileToken(l[o(0x1a6)],K[o(0x1aa)],w['file'])),{'limit':s,'offset':j,'total':l['rows']['length'],'time':Date['now']()-Q,'rows':l['rows']??null};};}
1
+ import{UnsupportedError,ValidationError}from'../../../errors.js';function z(){const L=['max','Invalid\x20pagination','get','notes','includes','query','SELECT\x20*\x20FROM\x20admin.notes\x20WHERE\x20resource\x20=\x20$1\x20AND\x20resource_id\x20=\x20$2\x20ORDER\x20BY\x20created_at\x20DESC','rows','now','file','length','Generic\x20Resource\x20relation\x20\x22','keys','map','join','btree','junctionTable','\x20=\x20$1\x20','where\x20','foreignKey','key','AND\x20(','joins','sql','SELECT\x20','\x20FROM\x20','\x20t\x20','\x20LIMIT\x20$2\x20OFFSET\x20$3','dictionary'];z=function(){return L;};return z();}import{qi,qt}from'../utils/sql.js';import{addDictionaryLookupData}from'./add-dictionary-lookup-data.js';import{addTableLookupData}from'./add-table-lookup-data.js';import{addFileToken}from'./add-file-token.js';import{autoIndex}from'../utils/auto-index.js';function G(w,h){w=w-0x9e;const S=z();let X=S[w];return X;}export function createFindRelation(w,h){return async function S({name:X,id:Y,relation:v,query:query={}}){const A=G,D=Date['now'](),o=Math['min'](Math[A(0x9e)](query['limit']??0x14,0x1),0xc8),q=Math[A(0x9e)](query['offset']??0x0,0x0);if(!Number['isFinite'](o)||!Number['isFinite'](q))throw new ValidationError(A(0x9f));const e=h[A(0xa0)](X),Z=e['relations']?.[v];if([A(0xa1),'files']['includes'](v)&&!e['capabilities']?.[A(0xa2)](v))throw new UnsupportedError('Generic\x20Resource\x20relation\x20\x22'+v+'\x22\x20requires\x20a\x20capabilities\x20\x22'+v+'\x22');if(v==='notes'){const c=await w['pg'][A(0xa3)](A(0xa4),[X,String(Y)]);return{'total':c[A(0xa5)]['length'],'time':Date[A(0xa6)]()-D,'rows':c['rows']};}if(v==='files'){const d=await w['pg']['query']('SELECT\x20*\x20FROM\x20admin.files\x20WHERE\x20resource\x20=\x20$1\x20AND\x20resource_id\x20=\x20$2\x20ORDER\x20BY\x20created_at\x20DESC',[X,String(Y)]);return addFileToken(d[A(0xa5)],{'file_path':{'type':A(0xa7)}},w['file']),{'total':d['rows'][A(0xa8)],'time':Date['now']()-D,'rows':d['rows']};}if(!Z?.['resource'])throw new UnsupportedError(A(0xa9)+v+'\x22\x20requires\x20a\x20project/provider\x20implementation');const K=h['get'](Z['resource']),y=K?.['key']??'id',V=K?.['table'],O=Object[A(0xaa)](K?.['fields']??{})['filter'](C=>K?.['fields'][C]?.['read']&&K?.['fields'][C]?.['scope']!=='item')[A(0xab)](qi)[A(0xac)](',\x20'),H=Z['fields']?.['join'](',\x20')||O||'*';Z['foreignKey']&&autoIndex(V,Z['foreignKey'],A(0xad),w['pg']);const R=Z['junctionTable']?'JOIN\x20'+qt(Z[A(0xae)])+'\x20j\x20ON\x20j.'+qi(Z['junctionForeignKey'])+'\x20=\x20t.'+(Z['junctionTargetKey']||qi(y))+'\x20WHERE\x20'+qi(Z['junctionLocalKey'])+A(0xaf):A(0xb0)+(Z[A(0xb1)]||qi(y))+'\x20=\x20(SELECT\x20'+qi(Z['localKey']||e['key'])+'\x20FROM\x20'+qt(e['table'])+'\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20WHERE\x20'+qi(e[A(0xb2)])+'\x20=\x20$1\x20LIMIT\x201\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20)\x20'+(Z['where']?A(0xb3)+Z['where']+')':''),Q=K[A(0xb4)]?.['map'](C=>C[A(0xb5)]+'\x20')[A(0xac)]('\x20')||'',P=A(0xb6)+H+A(0xb7)+qt(V)+A(0xb8)+Q+'\x20'+R+A(0xb9),x=await w['pg'][A(0xa3)](P,[Y,o,q]);return K&&(await addDictionaryLookupData(x['rows'],K['fields'],w[A(0xba)]),await addTableLookupData(x[A(0xa5)],K['fields'],w['pg']),addFileToken(x[A(0xa5)],K['fields'],w['file'])),{'limit':o,'offset':q,'total':x[A(0xa5)]['length'],'time':Date['now']()-D,'rows':x['rows']??null};};}
@@ -1 +1 @@
1
- import{ValidationError}from'../../../errors.js';import{buildFilters,buildIndex}from'../utils/filters.js';import{assertOperation}from'../utils/permissions.js';import{buildSort}from'../utils/sort.js';import{qt,readableFields}from'../utils/sql.js';import{addDictionaryLookupData}from'./add-dictionary-lookup-data.js';import{addTableLookupData}from'./add-table-lookup-data.js';import{addFileToken}from'./add-file-token.js';function Y(w,y){w=w-0x1a3;const d=f();let Z=d[w];return Z;}import{autoIndex}from'../utils/auto-index.js';import{buildSummary}from'../utils/summary.js';function f(){const c=['read','min','filter','sql','\x20WHERE\x20','where','Invalid\x20pagination','fields','map','table','push','toLowerCase','length','join','\x20OR\x20','scope','scopes','default','true','replace','NULL','all','query','values','then','rows','file'];f=function(){return c;};return f();}export function createFind(w,y){return async function d({name:Z,query:query={},user:M}){const A=Y,H=Date['now'](),Q=y['get'](Z);assertOperation(Q,A(0x1a3),M);const s=Math[A(0x1a4)](Math['max'](query['limit']??0x14,0x1),0xc8),j=Math['max'](query['offset']??0x0,0x0);buildIndex(Q,query['filter'],w['pg']);const n=buildFilters(Q,query[A(0x1a5)]);Q['where']&&(n[A(0x1a6)]+=(n[A(0x1a6)]?'\x20AND\x20':A(0x1a7))+('('+Q[A(0x1a8)]+')'));const t=buildSort(Q,query['sort']);if(!Number['isFinite'](s)||!Number['isFinite'](j))throw new ValidationError(A(0x1a9));const K=Q['searchable']||Object['keys'](Q['fields'])['filter'](l=>Q[A(0x1aa)][l]?.['searchable']);query['search']&&K['length']&&(K[A(0x1ab)](l=>autoIndex(Q[A(0x1ac)],l,'text',w['pg'])),n['values'][A(0x1ad)](query['search'][A(0x1ae)]()+'%'),n['sql']+=(n['sql']?'\x20AND\x20':'\x20WHERE\x20')+('\x20('+K?.['map'](l=>'lower('+qt(l)+')\x20LIKE\x20$'+n['values'][A(0x1af)])[A(0x1b0)](A(0x1b1))+')'));if(query['scope']&&Q['scopes']?.[query[A(0x1b2)]]===undefined)throw new ValidationError('Unknown\x20scope:\x20'+query[A(0x1b2)]);const T=query[A(0x1b2)]||(Q[A(0x1b3)]?.[A(0x1b4)]?'default':undefined);T&&(n['sql']+=(n['sql']?'\x20AND\x20':'\x20WHERE\x20')+('('+(Q['scopes']?.[T]||A(0x1b5))+')'));const h=Q['joins']?.[A(0x1a5)](l=>l['scope']!=='item')['map'](l=>l[A(0x1a6)]+'\x20')[A(0x1b0)]('\x20')||'',i='SELECT\x20'+readableFields(Q,'all')['join'](',\x20')+'\x20'+('FROM\x20'+qt(Q[A(0x1ac)])+'\x20t\x20')+(h+'\x20'+n[A(0x1a6)][A(0x1b6)](/:uid/g,'\x27'+(M?.['id']??A(0x1b7))+'\x27')+'\x20'+t+'\x20')+('LIMIT\x20$'+(n['values'][A(0x1af)]+0x1)+'\x20')+('OFFSET\x20$'+(n['values']['length']+0x2)),G=buildSummary(Q,query,M),[U,E]=await Promise[A(0x1b8)]([w['pg'][A(0x1b9)](i,[...n[A(0x1ba)],s,j]),w['pg'][A(0x1b9)](G,n['values'])[A(0x1bb)](l=>l['rows'][0x0]??{})]),e=U[A(0x1bc)];return await addDictionaryLookupData(e,Q['fields'],w['dictionary']),await addTableLookupData(e,Q['fields'],w['pg']),addFileToken(e,Q['fields'],w[A(0x1bd)]),{'time':Date['now']()-H,'limit':s,'offset':j,'count':U['rowCount'],'total':E?.['count']??0x0,'summary':E,'rows':e};};}
1
+ function G(w,h){w=w-0x1b9;const S=z();let X=S[w];return X;}import{ValidationError}from'../../../errors.js';import{buildFilters,buildIndex}from'../utils/filters.js';import{assertOperation}from'../utils/permissions.js';import{buildSort}from'../utils/sort.js';function z(){const d=['read','min','filter','sql','\x20WHERE\x20','where','isFinite','Invalid\x20pagination','keys','fields','searchable','search','map','table','scope','scopes','default','true','all','OFFSET\x20$','length','query','values'];z=function(){return d;};return z();}import{qt,readableFields}from'../utils/sql.js';import{addDictionaryLookupData}from'./add-dictionary-lookup-data.js';import{addTableLookupData}from'./add-table-lookup-data.js';import{addFileToken}from'./add-file-token.js';import{autoIndex}from'../utils/auto-index.js';import{buildSummary}from'../utils/summary.js';export function createFind(w,h){return async function S({name:X,query:query={},user:Y}){const c=G,v=Date['now'](),D=h['get'](X);assertOperation(D,c(0x1b9),Y);const o=Math[c(0x1ba)](Math['max'](query['limit']??0x14,0x1),0xc8),q=Math['max'](query['offset']??0x0,0x0);buildIndex(D,query['filter'],w['pg']);const e=buildFilters(D,query[c(0x1bb)]);D['where']&&(e[c(0x1bc)]+=(e['sql']?'\x20AND\x20':c(0x1bd))+('('+D[c(0x1be)]+')'));const Z=buildSort(D,query['sort']);if(!Number[c(0x1bf)](o)||!Number['isFinite'](q))throw new ValidationError(c(0x1c0));const K=D['searchable']||Object[c(0x1c1)](D['fields'])[c(0x1bb)](x=>D[c(0x1c2)][x]?.[c(0x1c3)]);query[c(0x1c4)]&&K['length']&&(K[c(0x1c5)](x=>autoIndex(D[c(0x1c6)],x,'text',w['pg'])),e['values']['push'](query['search']['toLowerCase']()+'%'),e[c(0x1bc)]+=(e[c(0x1bc)]?'\x20AND\x20':c(0x1bd))+('\x20('+K?.['map'](x=>'lower('+qt(x)+')\x20LIKE\x20$'+e['values']['length'])['join']('\x20OR\x20')+')'));if(query['scope']&&D['scopes']?.[query['scope']]===undefined)throw new ValidationError('Unknown\x20scope:\x20'+query[c(0x1c7)]);const y=query['scope']||(D[c(0x1c8)]?.['default']?c(0x1c9):undefined);y&&(e[c(0x1bc)]+=(e['sql']?'\x20AND\x20':c(0x1bd))+('('+(D['scopes']?.[y]||c(0x1ca))+')'));const V=D['joins']?.['filter'](x=>x[c(0x1c7)]!=='item')['map'](x=>x['sql']+'\x20')['join']('\x20')||'',O='SELECT\x20'+readableFields(D,c(0x1cb))['join'](',\x20')+'\x20'+('FROM\x20'+qt(D[c(0x1c6)])+'\x20t\x20')+(V+'\x20'+e[c(0x1bc)]['replace'](/:uid/g,'\x27'+(Y?.['id']??'NULL')+'\x27')+'\x20'+Z+'\x20')+('LIMIT\x20$'+(e['values']['length']+0x1)+'\x20')+(c(0x1cc)+(e['values'][c(0x1cd)]+0x2)),H=buildSummary(D,query,Y),[R,Q]=await Promise[c(0x1cb)]([w['pg'][c(0x1ce)](O,[...e[c(0x1cf)],o,q]),w['pg']['query'](H,e[c(0x1cf)])['then'](x=>x['rows'][0x0]??{})]),P=R['rows'];return await addDictionaryLookupData(P,D['fields'],w['dictionary']),await addTableLookupData(P,D[c(0x1c2)],w['pg']),addFileToken(P,D['fields'],w['file']),{'time':Date['now']()-v,'limit':o,'offset':q,'count':R['rowCount'],'total':Q?.['count']??0x0,'summary':Q,'rows':P};};}
@@ -1 +1 @@
1
- function f(){const H=['not\x20enough\x20params:\x20table','rows'];f=function(){return H;};return f();}function Y(w,y){w=w-0x1c9;const d=f();let Z=d[w];return Z;}export async function getTableColumns(w,y){const M=Y;if(!w)throw new Error(M(0x1c9));if(!y?.['pg'])return[];const d=await y['pg']['query']('\x0a\x20\x20\x20\x20select\x0a\x20\x20\x20\x20\x20\x20\x20\x20attname\x20as\x20name,\x20pg_catalog.col_description(attrelid,attnum)\x20as\x20title\x0a\x20\x20\x20\x20from\x20pg_catalog.pg_attribute\x20where\x20attrelid=$1::regclass\x20and\x20attnum>0\x20and\x20NOT\x20attisdropped',[w])['then'](Z=>Z[M(0x1ca)]||[]);return d;}
1
+ export async function getTableColumns(w,h){const Y=G;if(!w)throw new Error(Y(0x148));if(!h?.['pg'])return[];const S=await h['pg']['query'](Y(0x149),[w])['then'](X=>X['rows']||[]);return S;}function G(w,h){w=w-0x148;const S=z();let X=S[w];return X;}function z(){const v=['not\x20enough\x20params:\x20table','\x0a\x20\x20\x20\x20select\x0a\x20\x20\x20\x20\x20\x20\x20\x20attname\x20as\x20name,\x20pg_catalog.col_description(attrelid,attnum)\x20as\x20title\x0a\x20\x20\x20\x20from\x20pg_catalog.pg_attribute\x20where\x20attrelid=$1::regclass\x20and\x20attnum>0\x20and\x20NOT\x20attisdropped'];z=function(){return v;};return z();}
@@ -1 +1 @@
1
- function Y(w,y){w=w-0x70;const d=f();let Z=d[w];return Z;}import{UnsupportedError,ValidationError}from'../../../errors.js';import{createUpdate}from'./update.js';function f(){const i=['resource','Relation\x20update\x20is\x20not\x20configured:\x20'];f=function(){return i;};return f();}export function createUpdateRelation(w,y){const d=createUpdate(w,y);return async function Z({name:M,id:H,relation:Q,relationId:s,data:j,user:n},t){const h=Y,K=y['get'](M),T=K['relations']?.[Q];if(!T?.[h(0x70)]||!T['foreignKey'])throw new UnsupportedError(h(0x71)+Q);if(Object['hasOwn'](j,T['foreignKey'])&&j[T['foreignKey']]!==H)throw new ValidationError('Cannot\x20change\x20relation:\x20'+T['foreignKey']);return d({'name':T['resource'],'id':s,'data':j,'user':n,'where':{'column':T['foreignKey'],'value':H}},t);};}
1
+ function z(){const O=['relations','resource','foreignKey','Cannot\x20change\x20relation:\x20'];z=function(){return O;};return z();}import{UnsupportedError,ValidationError}from'../../../errors.js';import{createUpdate}from'./update.js';function G(w,h){w=w-0x17a;const S=z();let X=S[w];return X;}export function createUpdateRelation(w,h){const S=createUpdate(w,h);return async function X({name:Y,id:v,relation:D,relationId:o,data:q,user:e},Z){const V=G,K=h['get'](Y),y=K[V(0x17a)]?.[D];if(!y?.[V(0x17b)]||!y['foreignKey'])throw new UnsupportedError('Relation\x20update\x20is\x20not\x20configured:\x20'+D);if(Object['hasOwn'](q,y['foreignKey'])&&q[y[V(0x17c)]]!==v)throw new ValidationError(V(0x17d)+y['foreignKey']);return S({'name':y['resource'],'id':o,'data':q,'user':e,'where':{'column':y[V(0x17c)],'value':v}},Z);};}
@@ -1 +1 @@
1
- import{NotFoundError,ValidationError}from'../../../errors.js';import{assertOperation}from'../utils/permissions.js';import{qi,qt,writableData}from'../utils/sql.js';import{validateInputData}from'../utils/fields.js';function f(){const A=['update','No\x20writable\x20fields','fields','updated_at','push','updated_by','user_type','\x20=\x20$','WHERE\x20','length','value','\x20AND\x20','UPDATE\x20','table','RETURNING\x20','join','audit','name'];f=function(){return A;};return f();}function Y(w,y){w=w-0xe3;const d=f();let Z=d[w];return Z;}import{clearTableLookupCache}from'./add-table-lookup-data.js';export function createUpdate(w,y){return async function d({name:Z,id:M,data:H,user:Q,where:s},j){const l=Y,n=y['get'](Z);assertOperation(n,l(0xe3),Q);const t=writableData(n,H);if(!t['length'])throw new ValidationError(l(0xe4));const K=j?.['pg']??w['pg'];validateInputData({'resource':n,'data':H,'update':!![]});n[l(0xe5)][l(0xe6)]&&t[l(0xe7)](['updated_at',new Date()]);n[l(0xe5)][l(0xe8)]&&t['push'](['updated_by',Q?.['id']]);delete H[l(0xe9)];const T=t['map'](([E],e)=>qi(E)+l(0xea)+(e+0x1)),h=[...t['map'](([,E])=>E),M];let i=l(0xeb)+qi(n['key'])+'\x20=\x20$'+h[l(0xec)];s&&(h['push'](s[l(0xed)]),i+=l(0xee)+qi(s['column'])+'\x20=\x20$'+h['length']);n['where']&&(i+='\x20AND\x20('+n['where']+')');const G=await K['query'](l(0xef)+qt(n[l(0xf0)])+'\x20'+('SET\x20'+T['join'](',\x20')+'\x20')+(i+'\x20')+(l(0xf1)+Object['keys'](H)['map'](qi)[l(0xf2)](',\x20')),h),U=G['rows'][0x0];if(!U)throw new NotFoundError(Z+':'+M);return clearTableLookupCache(n['table'],K),await(j?.[l(0xf3)]??w['audit'])?.['write']({'userId':Q?.['id'],'module':n['module'],'resource':n[l(0xf4)],'resourceId':M,'action':'update','fields':Object['keys'](H)}),U;};}
1
+ import{NotFoundError,ValidationError}from'../../../errors.js';import{assertOperation}from'../utils/permissions.js';function z(){const c=['get','fields','updated_by','user_type','length','value','\x20AND\x20(','keys','rows','audit','write'];z=function(){return c;};return z();}import{qi,qt,writableData}from'../utils/sql.js';import{validateInputData}from'../utils/fields.js';function G(w,h){w=w-0x196;const S=z();let X=S[w];return X;}import{clearTableLookupCache}from'./add-table-lookup-data.js';export function createUpdate(w,h){return async function S({name:X,id:Y,data:v,user:D,where:o},q){const x=G,e=h[x(0x196)](X);assertOperation(e,'update',D);const Z=writableData(e,v);if(!Z['length'])throw new ValidationError('No\x20writable\x20fields');const K=q?.['pg']??w['pg'];validateInputData({'resource':e,'data':v,'update':!![]});e['fields']['updated_at']&&Z['push'](['updated_at',new Date()]);e[x(0x197)][x(0x198)]&&Z['push'](['updated_by',D?.['id']]);delete v[x(0x199)];const y=Z['map'](([Q],P)=>qi(Q)+'\x20=\x20$'+(P+0x1)),V=[...Z['map'](([,Q])=>Q),Y];let O='WHERE\x20'+qi(e['key'])+'\x20=\x20$'+V[x(0x19a)];o&&(V['push'](o[x(0x19b)]),O+='\x20AND\x20'+qi(o['column'])+'\x20=\x20$'+V['length']);e['where']&&(O+=x(0x19c)+e['where']+')');const H=await K['query']('UPDATE\x20'+qt(e['table'])+'\x20'+('SET\x20'+y['join'](',\x20')+'\x20')+(O+'\x20')+('RETURNING\x20'+Object[x(0x19d)](v)['map'](qi)['join'](',\x20')),V),R=H[x(0x19e)][0x0];if(!R)throw new NotFoundError(X+':'+Y);return clearTableLookupCache(e['table'],K),await(q?.['audit']??w[x(0x19f)])?.[x(0x1a0)]({'userId':D?.['id'],'module':e['module'],'resource':e['name'],'resourceId':Y,'action':'update','fields':Object['keys'](v)}),R;};}
@@ -1 +1 @@
1
- import{qi,qt}from'./sql.js';function f(){const K=['get','set','catch','delete','split','replace','SELECT\x201\x20FROM\x20pg_indexes\x20WHERE\x20schemaname\x20=\x20$1\x20AND\x20indexname\x20=\x20$2','rowCount','query','CREATE\x20EXTENSION\x20IF\x20NOT\x20EXISTS\x20pg_trgm','\x20ON\x20','CREATE\x20INDEX\x20IF\x20NOT\x20EXISTS\x20'];f=function(){return K;};return f();}const requestedIndexes=new WeakMap();export function autoIndex(w,y,d='btree',Z){const j=Y,M=requestedIndexes[j(0x6c)](Z)??new Set();requestedIndexes[j(0x6d)](Z,M);const H=w+':'+y+':'+d;if(M['has'](H))return;M['add'](H),void ensureIndex(w,y,d,Z)[j(0x6e)](()=>{const n=j;M[n(0x6f)](H);});}function Y(w,y){w=w-0x6c;const d=f();let Z=d[w];return Z;}async function ensureIndex(w,y,d,Z){const t=Y,M=w[t(0x70)]('.'),H=M['length']===0x2?M[0x0]:'public',Q=(w+'_'+y+'_'+d+'_idx')[t(0x71)](/[^A-Za-z0-9_]/g,'_'),s=await Z['query'](t(0x72),[H,Q]);if(s[t(0x73)])return;if(d==='text'){await Z[t(0x74)](t(0x75)),await Z['query']('CREATE\x20INDEX\x20IF\x20NOT\x20EXISTS\x20'+qi(Q+'_l')+t(0x76)+qt(w)+'\x20USING\x20btree\x20(lower('+qi(y)+')\x20text_pattern_ops)'),await Z['query'](t(0x77)+qi(Q)+'\x20ON\x20'+qt(w)+'\x20USING\x20gin\x20(lower('+qi(y)+')\x20gin_trgm_ops)');return;}await Z['query']('CREATE\x20INDEX\x20IF\x20NOT\x20EXISTS\x20'+qi(Q)+'\x20ON\x20'+qt(w)+'\x20USING\x20'+d+'\x20('+qi(y)+')');}
1
+ import{qi,qt}from'./sql.js';const requestedIndexes=new WeakMap();function G(w,h){w=w-0x1cc;const S=z();let X=S[w];return X;}function z(){const Z=['set','has','catch','length','_idx','query','SELECT\x201\x20FROM\x20pg_indexes\x20WHERE\x20schemaname\x20=\x20$1\x20AND\x20indexname\x20=\x20$2','CREATE\x20INDEX\x20IF\x20NOT\x20EXISTS\x20','\x20ON\x20','\x20USING\x20'];z=function(){return Z;};return z();}export function autoIndex(w,h,S='btree',X){const q=G,Y=requestedIndexes['get'](X)??new Set();requestedIndexes[q(0x1cc)](X,Y);const v=w+':'+h+':'+S;if(Y[q(0x1cd)](v))return;Y['add'](v),void ensureIndex(w,h,S,X)[q(0x1ce)](()=>{Y['delete'](v);});}async function ensureIndex(w,h,S,X){const e=G,Y=w['split']('.'),v=Y[e(0x1cf)]===0x2?Y[0x0]:'public',D=(w+'_'+h+'_'+S+e(0x1d0))['replace'](/[^A-Za-z0-9_]/g,'_'),o=await X[e(0x1d1)](e(0x1d2),[v,D]);if(o['rowCount'])return;if(S==='text'){await X[e(0x1d1)]('CREATE\x20EXTENSION\x20IF\x20NOT\x20EXISTS\x20pg_trgm'),await X[e(0x1d1)]('CREATE\x20INDEX\x20IF\x20NOT\x20EXISTS\x20'+qi(D+'_l')+'\x20ON\x20'+qt(w)+'\x20USING\x20btree\x20(lower('+qi(h)+')\x20text_pattern_ops)'),await X['query']('CREATE\x20INDEX\x20IF\x20NOT\x20EXISTS\x20'+qi(D)+'\x20ON\x20'+qt(w)+'\x20USING\x20gin\x20(lower('+qi(h)+')\x20gin_trgm_ops)');return;}await X['query'](e(0x1d3)+qi(D)+e(0x1d4)+qt(w)+e(0x1d5)+S+'\x20('+qi(h)+')');}
@@ -1 +1 @@
1
- import{ValidationError}from'../../../errors.js';function f(){const H=['required','writable','maxLength','enum','join','pattern'];f=function(){return H;};return f();}export{readableFields,writableData,fieldColumn}from'./sql.js';const validateInputData=({resource:w,data:y,update:update=![]})=>{const M=Y;for(const [d,Z]of Object['entries'](w['fields'])){if(Z[M(0xbf)]&&Z[M(0xc0)]!==![]&&(y[d]===undefined||y[d]===null)&&!update)throw new ValidationError('Required\x20field:\x20'+d);if(Z['required']&&Z['writable']!==![]&&Object['hasOwn'](y,d)&&(y[d]===undefined||y[d]===null)&&update)throw new ValidationError('Required\x20field:\x20'+d);if(Z['minLength']&&typeof y[d]==='string'&&y[d]['length']<Z['minLength'])throw new ValidationError('minLength\x20not\x20met:\x20'+d);if(Z[M(0xc1)]&&typeof y[d]==='string'&&y[d]['length']>Z[M(0xc1)])throw new ValidationError('maxLength\x20exceeded:\x20'+d);if(Z['minimum']&&typeof y[d]==='number'&&y[d]<Z['minimum'])throw new ValidationError(d+'\x20should\x20be\x20>=\x20'+Z['minimum']);if(Z['maximum']&&typeof y[d]==='number'&&y[d]>Z['maximum'])throw new ValidationError(d+'\x20should\x20be\x20<=\x20'+Z['maximum']);if(Z[M(0xc2)]&&y[d]&&!Z['enum']['includes'](y[d]))throw new ValidationError(d+'\x20should\x20be\x20one\x20of\x20('+Z[M(0xc2)][M(0xc3)](',\x20')+')');if(Z[M(0xc4)]&&typeof y[d]==='string'&&!new RegExp(Z['pattern'])['test'](y[d]))throw new ValidationError(d+'\x20should\x20match\x20regular\x20expression\x20('+Z['pattern']+')');}};function Y(w,y){w=w-0xbf;const d=f();let Z=d[w];return Z;}export{validateInputData};
1
+ import{ValidationError}from'../../../errors.js';function G(w,h){w=w-0x18d;const S=z();let X=S[w];return X;}export{readableFields,writableData,fieldColumn}from'./sql.js';const validateInputData=({resource:w,data:h,update:update=![]})=>{const Y=G;for(const [S,X]of Object['entries'](w['fields'])){if(X[Y(0x18d)]&&X[Y(0x18e)]!==![]&&(h[S]===undefined||h[S]===null)&&!update)throw new ValidationError('Required\x20field:\x20'+S);if(X['required']&&X['writable']!==![]&&Object[Y(0x18f)](h,S)&&(h[S]===undefined||h[S]===null)&&update)throw new ValidationError('Required\x20field:\x20'+S);if(X[Y(0x190)]&&typeof h[S]==='string'&&h[S]['length']<X['minLength'])throw new ValidationError('minLength\x20not\x20met:\x20'+S);if(X[Y(0x191)]&&typeof h[S]==='string'&&h[S][Y(0x192)]>X['maxLength'])throw new ValidationError(Y(0x193)+S);if(X[Y(0x194)]&&typeof h[S]==='number'&&h[S]<X['minimum'])throw new ValidationError(S+'\x20should\x20be\x20>=\x20'+X[Y(0x194)]);if(X['maximum']&&typeof h[S]===Y(0x195)&&h[S]>X['maximum'])throw new ValidationError(S+'\x20should\x20be\x20<=\x20'+X[Y(0x196)]);if(X[Y(0x197)]&&h[S]&&!X[Y(0x197)]['includes'](h[S]))throw new ValidationError(S+Y(0x198)+X['enum'][Y(0x199)](',\x20')+')');if(X['pattern']&&typeof h[S]==='string'&&!new RegExp(X[Y(0x19a)])['test'](h[S]))throw new ValidationError(S+'\x20should\x20match\x20regular\x20expression\x20('+X['pattern']+')');}};function z(){const v=['required','writable','hasOwn','minLength','maxLength','length','maxLength\x20exceeded:\x20','minimum','number','maximum','enum','\x20should\x20be\x20one\x20of\x20(','join','pattern'];z=function(){return v;};return z();}export{validateInputData};
@@ -1 +1 @@
1
- const G=Y;import{fieldColumn,qi}from'./sql.js';function f(){const x=['nin','filter','type','entries','Unsupported\x20filter\x20operator:\x20','ilike','null','push','NULL','<>\x20ALL','like','length','lower(','\x20AND\x20','isArray','true','geometry','btree'];f=function(){return x;};return f();}function Y(w,y){w=w-0x1b3;const d=f();let Z=d[w];return Z;}import{ValidationError}from'../../../errors.js';import{autoIndex}from'./auto-index.js';const filterOperators=new Set(['eq','ne','gt','gte','lt','lte','in',G(0x1b3),'like','ilike','null']);export function parseFilterQuery(w){const U=G,y={...isRecord(w[U(0x1b4)])?w[U(0x1b4)]:{}};for(const [d,Z]of Object['entries'](w)){const M=/^filter\[([^\]]+)\](?:\[([^\]]+)\])?$/['exec'](d);if(!M)continue;const [,H,Q]=M;if(!H)continue;if(!Q){y[H]=Z;continue;}if(!filterOperators['has'](Q))throw new ValidationError('Unsupported\x20filter\x20operator:\x20'+Q);const s=isRecord(y[H])?y[H]:{};s[Q]=(Q==='in'||Q==='nin')&&typeof Z==='string'?Z['split'](','):Z,y[H]=s;}return Object['keys'](y)['length']?y:undefined;}export function buildIndex(w,y,d){const E=G;for(const [Z,M]of Object['entries'](y??{})){const H=w['fields'][Z];if(!H||H['filter']!==!![]&&H['filterable']!==!![])throw new ValidationError('Field\x20is\x20not\x20filterable:\x20'+Z);d&&autoIndex(w['table'],fieldColumn(w,Z),indexTypeFor(H[E(0x1b5)],'eq'),d);}}export function buildFilters(w,y,d=0x1){const e=G,Z=[],M=[];for(const [H,Q]of Object[e(0x1b6)](y??{})){const s=w['fields'][H];if(!s||s['filter']!==!![]&&s['filterable']!==!![])throw new ValidationError('Field\x20is\x20not\x20filterable:\x20'+H);const j=qi(fieldColumn(w,H)),n=isRecord(Q)?Q:{'eq':Q};for(const [t,K]of Object[e(0x1b6)](n)){if(!filterOperators['has'](t))throw new ValidationError(e(0x1b7)+t);if((t==='like'||t===e(0x1b8))&&s['type']!=='string'&&s['type']!=='text')throw new ValidationError('Operator\x20'+t+'\x20requires\x20a\x20text\x20field:\x20'+H);if(t===e(0x1b9)){Z[e(0x1ba)](j+'\x20IS\x20'+(isTruthy(K)?'':'NOT\x20')+e(0x1bb));continue;}if(t==='in'||t==='nin'){const i=Array['isArray'](K)?K:[K];if(i['length']===0x0){Z[e(0x1ba)](t==='in'?'FALSE':'TRUE');continue;}M['push'](i),Z[e(0x1ba)](j+'\x20'+(t==='in'?'=\x20ANY':e(0x1bc))+'($'+(d+M['length']-0x1)+')');continue;}const T={'eq':'=','ne':'<>','gt':'>','gte':'>=','lt':'<','lte':'<=','like':e(0x1bd)},h='$'+(d+M[e(0x1be)]);if(t===e(0x1bd)){M['push'](K+'%'),Z[e(0x1ba)](e(0x1bf)+j+')\x20like\x20lower('+h+')');continue;}M['push'](K),Z['push'](j+'\x20'+T[t]+'\x20'+h);}}return{'sql':Z['length']?'\x20WHERE\x20'+Z['join'](e(0x1c0)):'','values':M};}function isRecord(w){const l=G;return typeof w==='object'&&w!==null&&!Array[l(0x1c1)](w);}function isTruthy(w){const A=G;return w===!![]||w===A(0x1c2)||w==='1'||w===0x1;}function indexTypeFor(w,y){const c=G;if(y==='like'||y==='ilike')return'text';if(w==='geom'||w===c(0x1c3))return'gist';return c(0x1c4);}
1
+ const H=G;import{fieldColumn,qi}from'./sql.js';import{ValidationError}from'../../../errors.js';import{autoIndex}from'./auto-index.js';const filterOperators=new Set(['eq','ne','gt',H(0x15a),'lt','lte','in','nin',H(0x15b),'ilike',H(0x15c)]);export function parseFilterQuery(w){const R=H,h={...isRecord(w[R(0x15d)])?w['filter']:{}};for(const [S,X]of Object['entries'](w)){const Y=/^filter\[([^\]]+)\](?:\[([^\]]+)\])?$/['exec'](S);if(!Y)continue;const [,v,D]=Y;if(!v)continue;if(!D){h[v]=X;continue;}if(!filterOperators['has'](D))throw new ValidationError('Unsupported\x20filter\x20operator:\x20'+D);const o=isRecord(h[v])?h[v]:{};o[D]=(D==='in'||D===R(0x15e))&&typeof X==='string'?X['split'](','):X,h[v]=o;}return Object['keys'](h)['length']?h:undefined;}export function buildIndex(w,h,S){const Q=H;for(const [X,Y]of Object['entries'](h??{})){const v=w['fields'][X];if(!v||v['filter']!==!![]&&v[Q(0x15f)]!==!![])throw new ValidationError('Field\x20is\x20not\x20filterable:\x20'+X);S&&autoIndex(w['table'],fieldColumn(w,X),indexTypeFor(v['type'],'eq'),S);}}function z(){const d=['gte','like','null','filter','nin','filterable','entries','has','\x20IS\x20','NOT\x20','NULL','push','\x20WHERE\x20','\x20AND\x20','object','ilike','geometry'];z=function(){return d;};return z();}function G(w,h){w=w-0x15a;const S=z();let X=S[w];return X;}export function buildFilters(w,h,S=0x1){const P=H,X=[],Y=[];for(const [v,D]of Object[P(0x160)](h??{})){const o=w['fields'][v];if(!o||o['filter']!==!![]&&o['filterable']!==!![])throw new ValidationError('Field\x20is\x20not\x20filterable:\x20'+v);const q=qi(fieldColumn(w,v)),e=isRecord(D)?D:{'eq':D};for(const [Z,K]of Object['entries'](e)){if(!filterOperators[P(0x161)](Z))throw new ValidationError('Unsupported\x20filter\x20operator:\x20'+Z);if((Z===P(0x15b)||Z==='ilike')&&o['type']!=='string'&&o['type']!=='text')throw new ValidationError('Operator\x20'+Z+'\x20requires\x20a\x20text\x20field:\x20'+v);if(Z===P(0x15c)){X['push'](q+P(0x162)+(isTruthy(K)?'':P(0x163))+P(0x164));continue;}if(Z==='in'||Z==='nin'){const O=Array['isArray'](K)?K:[K];if(O['length']===0x0){X['push'](Z==='in'?'FALSE':'TRUE');continue;}Y[P(0x165)](O),X['push'](q+'\x20'+(Z==='in'?'=\x20ANY':'<>\x20ALL')+'($'+(S+Y['length']-0x1)+')');continue;}const y={'eq':'=','ne':'<>','gt':'>','gte':'>=','lt':'<','lte':'<=','like':'like'},V='$'+(S+Y['length']);if(Z==='like'){Y['push'](K+'%'),X[P(0x165)]('lower('+q+')\x20like\x20lower('+V+')');continue;}Y[P(0x165)](K),X['push'](q+'\x20'+y[Z]+'\x20'+V);}}return{'sql':X['length']?P(0x166)+X['join'](P(0x167)):'','values':Y};}function isRecord(w){const x=H;return typeof w===x(0x168)&&w!==null&&!Array['isArray'](w);}function isTruthy(w){return w===!![]||w==='true'||w==='1'||w===0x1;}function indexTypeFor(w,h){const c=H;if(h===c(0x15b)||h===c(0x169))return'text';if(w==='geom'||w===c(0x16a))return'gist';return'btree';}
@@ -1 +1 @@
1
- function f(){const Q=['debug','name','Authentication\x20required'];f=function(){return Q;};return f();}import{ForbiddenError}from'../../../errors.js';function Y(w,y){w=w-0x17a;const d=f();let Z=d[w];return Z;}import{getContext}from'../../../index.js';export function assertOperation(w,y,d){const H=Y,Z=getContext()['config'];if(Z[H(0x17a)])return;if(!w['operations']['includes'](y))throw new ForbiddenError(w[H(0x17b)]+'.'+y+'\x20is\x20disabled');if(w['access']!=='public'&&d===undefined)throw new ForbiddenError(H(0x17c));if(w['access']==='admin'&&d?.['type']!=='admin')throw new ForbiddenError('Admin\x20access\x20required');if(d?.['type']!=='admin'){const M=(w['permission']??w[H(0x17b)])+':'+y;if(!d?.['permissions']?.['includes'](M))throw new ForbiddenError('Missing\x20permission:\x20'+M);}}
1
+ function z(){const D=['access','permissions','includes'];z=function(){return D;};return z();}import{ForbiddenError}from'../../../errors.js';import{getContext}from'../../../index.js';function G(w,h){w=w-0x187;const S=z();let X=S[w];return X;}export function assertOperation(w,h,S){const v=G,X=getContext()['config'];if(X['debug'])return;if(!w['operations']['includes'](h))throw new ForbiddenError(w['name']+'.'+h+'\x20is\x20disabled');if(w[v(0x187)]!=='public'&&S===undefined)throw new ForbiddenError('Authentication\x20required');if(w[v(0x187)]==='admin'&&S?.['type']!=='admin')throw new ForbiddenError('Admin\x20access\x20required');if(S?.['type']!=='admin'){const Y=(w['permission']??w['name'])+':'+h;if(!S?.[v(0x188)]?.[v(0x189)](Y))throw new ForbiddenError('Missing\x20permission:\x20'+Y);}}
@@ -1 +1 @@
1
- import{fieldColumn,qi}from'./sql.js';import{ValidationError}from'../../../errors.js';function Y(w,y){w=w-0x1a1;const d=f();let Z=d[w];return Z;}function f(){const n=['length','startsWith','sortable','\x20ORDER\x20BY\x20'];f=function(){return n;};return f();}export function buildSort(w,y){const s=Y;if(!y?.[s(0x1a1)])return'';typeof y==='string'&&(y=[y]);const d=y['map'](Z=>{const j=s,M=Z[j(0x1a2)]('-'),H=M?Z['slice'](0x1):Z,Q=w['fields'][H];if(!Q||Q[j(0x1a3)]!==!![])throw new ValidationError('Field\x20is\x20not\x20sortable:\x20'+H);return qi(fieldColumn(w,H))+'\x20'+(M?'DESC':'ASC');});return s(0x1a4)+d['join'](',\x20');}
1
+ import{fieldColumn,qi}from'./sql.js';function G(w,h){w=w-0xe0;const S=z();let X=S[w];return X;}import{ValidationError}from'../../../errors.js';function z(){const q=['fields'];z=function(){return q;};return z();}export function buildSort(w,h){if(!h?.['length'])return'';typeof h==='string'&&(h=[h]);const S=h['map'](X=>{const o=G,Y=X['startsWith']('-'),v=Y?X['slice'](0x1):X,D=w[o(0xe0)][v];if(!D||D['sortable']!==!![])throw new ValidationError('Field\x20is\x20not\x20sortable:\x20'+v);return qi(fieldColumn(w,v))+'\x20'+(Y?'DESC':'ASC');});return'\x20ORDER\x20BY\x20'+S['join'](',\x20');}
@@ -1 +1 @@
1
- const Q=Y;function f(){const n=['replace','map','join','scope','fields','write','writable'];f=function(){return n;};return f();}import{ValidationError}from'../../../errors.js';export const quoteIdentifier=w=>'\x22'+w[Q(0x174)](/"/g,'\x22\x22')+'\x22';export const quoteTable=w=>w['split']('.')[Q(0x175)](quoteIdentifier)[Q(0x176)]('.');export function fieldColumn(w,y){if(y===w['key'])return w['key'];const d=w['fields'][y];if(!d)throw new ValidationError('Unknown\x20field:\x20'+y);return d['column']??y;}function Y(w,y){w=w-0x174;const d=f();let Z=d[w];return Z;}export function readableFields(w,y){const s=Q,d=Object['entries'](w['fields'])['filter'](([,Z])=>Z['read']!==![]&&Z['readable']!==![]&&(y?(Z[s(0x177)]??'all')===y:!![]))['map'](([Z,M])=>quoteIdentifier(M['column']??Z)+'\x20AS\x20'+quoteIdentifier(Z));return!w['fields'][w['key']]&&d['unshift'](quoteIdentifier(w['key'])),d;}export function writableData(w,y){const j=Q,d=[];for(const [Z,M]of Object['entries'](y)){const H=w[j(0x178)][Z];if(!H||H['write']===![]||H['writable']===![])throw new ValidationError('Field\x20is\x20not\x20writable:\x20'+Z);if((H[j(0x179)]??H[j(0x17a)])!==!![])continue;if(H['type']==='date'&&!y[Z])continue;d['push']([H['column']??Z,M]);}return d;}export const qi=quoteIdentifier;export const qt=quoteTable;
1
+ const D=G;import{ValidationError}from'../../../errors.js';export const quoteIdentifier=w=>'\x22'+w['replace'](/"/g,'\x22\x22')+'\x22';export const quoteTable=w=>w[D(0x1c6)]('.')['map'](quoteIdentifier)[D(0x1c7)]('.');export function fieldColumn(w,h){const o=D;if(h===w[o(0x1c8)])return w[o(0x1c8)];const S=w[o(0x1c9)][h];if(!S)throw new ValidationError('Unknown\x20field:\x20'+h);return S['column']??h;}export function readableFields(w,h){const q=D,S=Object[q(0x1ca)](w[q(0x1c9)])[q(0x1cb)](([,X])=>X[q(0x1cc)]!==![]&&X['readable']!==![]&&(h?(X[q(0x1cd)]??q(0x1ce))===h:!![]))[q(0x1cf)](([X,Y])=>quoteIdentifier(Y[q(0x1d0)]??X)+'\x20AS\x20'+quoteIdentifier(X));return!w['fields'][w[q(0x1c8)]]&&S[q(0x1d1)](quoteIdentifier(w[q(0x1c8)])),S;}export function writableData(w,h){const e=D,S=[];for(const [X,Y]of Object['entries'](h)){const v=w['fields'][X];if(!v||v['write']===![]||v['writable']===![])throw new ValidationError('Field\x20is\x20not\x20writable:\x20'+X);if((v[e(0x1d2)]??v['writable'])!==!![])continue;if(v['type']==='date'&&!h[X])continue;S[e(0x1d3)]([v['column']??X,Y]);}return S;}export const qi=quoteIdentifier;function z(){const Z=['split','join','key','fields','entries','filter','read','scope','all','map','column','unshift','write','push'];z=function(){return Z;};return z();}function G(w,h){w=w-0x1c6;const S=z();let X=S[w];return X;}export const qt=quoteTable;