@opengis/fcore 0.0.1-beta.16 → 0.0.1-beta.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.
Files changed (99) 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.d.ts.map +1 -1
  7. package/dist/fastify.js +1 -1
  8. package/dist/fcore.js +1 -1
  9. package/dist/migrations/cli.js +1 -1
  10. package/dist/migrations/runner.js +1 -1
  11. package/dist/modules/auth/adduser-cli.js +1 -1
  12. package/dist/modules/auth/passwd-cli.js +1 -1
  13. package/dist/modules/auth/permission-cli.js +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.js +1 -1
  18. package/dist/modules/auth/services/registration.js +1 -1
  19. package/dist/modules/auth/services/verify-two-factor.js +1 -1
  20. package/dist/modules/file/mime.js +1 -1
  21. package/dist/modules/file/route.js +1 -1
  22. package/dist/modules/file/schema.js +1 -1
  23. package/dist/modules/file/services/get-file.js +1 -1
  24. package/dist/modules/file/services/resize-file.js +1 -1
  25. package/dist/modules/file/services/upload-file.js +1 -1
  26. package/dist/modules/resource/route.js +1 -1
  27. package/dist/modules/resource/schema.js +1 -1
  28. package/dist/modules/resource/services/add-note.js +1 -1
  29. package/dist/modules/resource/services/add-resource-file.js +1 -1
  30. package/dist/modules/resource/services/create-resource-relation.js +1 -1
  31. package/dist/modules/resource/services/create-resource.js +1 -1
  32. package/dist/modules/resource/services/delete-resource-relation.js +1 -1
  33. package/dist/modules/resource/services/delete-resource.js +1 -1
  34. package/dist/modules/resource/services/export-resource.js +1 -1
  35. package/dist/modules/resource/services/get-resource.js +1 -1
  36. package/dist/modules/resource/services/list-resource-relation.js +1 -1
  37. package/dist/modules/resource/services/list-resources.js +1 -1
  38. package/dist/modules/resource/services/search-resource.js +1 -1
  39. package/dist/modules/resource/services/suggest-resource.js +1 -1
  40. package/dist/modules/resource/services/update-resource-relation.js +1 -1
  41. package/dist/modules/resource/services/update-resource.js +1 -1
  42. package/dist/modules/resource/services/upload-resource-file.js +1 -1
  43. package/dist/modules/system/route.js +1 -1
  44. package/dist/modules/system/schema.js +1 -1
  45. package/dist/modules/system/services/check-system.js +1 -1
  46. package/dist/modules/system/services/get-access.js +1 -1
  47. package/dist/modules/system/services/get-api-list.js +1 -1
  48. package/dist/modules/system/services/get-audit-log.js +1 -1
  49. package/dist/modules/system/services/get-dictionary.js +1 -1
  50. package/dist/modules/system/services/get-system-log.js +1 -1
  51. package/dist/modules/system/services/get-system-settings.js +1 -1
  52. package/dist/modules/system/services/list-dictionaries.js +1 -1
  53. package/dist/modules/system/services/set-access.js +1 -1
  54. package/dist/modules/system/services/update-dictionary.js +1 -1
  55. package/dist/modules/system/services/update-system-settings.js +1 -1
  56. package/dist/modules/utils/require-admin.js +1 -1
  57. package/dist/modules/utils/safe-user.js +1 -1
  58. package/dist/modules/utils/unsupported.js +1 -1
  59. package/dist/plugins/audit/audit.js +1 -1
  60. package/dist/plugins/audit/services/write-audit.js +1 -1
  61. package/dist/plugins/auth/get-user-permissions.js +1 -1
  62. package/dist/plugins/auth/index.js +1 -1
  63. package/dist/plugins/auth/verifyUser.js +1 -1
  64. package/dist/plugins/dictionary.js +1 -1
  65. package/dist/plugins/file.js +1 -1
  66. package/dist/plugins/jwt.js +1 -1
  67. package/dist/plugins/logger/index.js +1 -1
  68. package/dist/plugins/logger/transport.js +1 -1
  69. package/dist/plugins/pg.js +1 -1
  70. package/dist/plugins/redis.js +1 -1
  71. package/dist/plugins/resource/resource.js +1 -1
  72. package/dist/plugins/resource/resource.registry.js +1 -1
  73. package/dist/plugins/resource/resource.types.d.ts +0 -3
  74. package/dist/plugins/resource/resource.types.d.ts.map +1 -1
  75. package/dist/plugins/resource/services/add-dictionary-lookup-data.js +1 -1
  76. package/dist/plugins/resource/services/add-file-token.js +1 -1
  77. package/dist/plugins/resource/services/add-table-lookup-data.js +1 -1
  78. package/dist/plugins/resource/services/create-relation.js +1 -1
  79. package/dist/plugins/resource/services/create.js +1 -1
  80. package/dist/plugins/resource/services/delete-relation.js +1 -1
  81. package/dist/plugins/resource/services/delete.js +1 -1
  82. package/dist/plugins/resource/services/find-one.js +1 -1
  83. package/dist/plugins/resource/services/find-relation.d.ts.map +1 -1
  84. package/dist/plugins/resource/services/find-relation.js +1 -1
  85. package/dist/plugins/resource/services/find.js +1 -1
  86. package/dist/plugins/resource/services/update-relation.js +1 -1
  87. package/dist/plugins/resource/services/update.js +1 -1
  88. package/dist/plugins/resource/utils/auto-index.js +1 -1
  89. package/dist/plugins/resource/utils/fields.js +1 -1
  90. package/dist/plugins/resource/utils/filters.js +1 -1
  91. package/dist/plugins/resource/utils/permissions.js +1 -1
  92. package/dist/plugins/resource/utils/sort.d.ts +1 -1
  93. package/dist/plugins/resource/utils/sort.d.ts.map +1 -1
  94. package/dist/plugins/resource/utils/sort.js +1 -1
  95. package/dist/plugins/resource/utils/sql.js +1 -1
  96. package/dist/shared/getIP.js +1 -1
  97. package/migrations/20260903130000_move_notes_files_to_admin.sql +17 -17
  98. package/migrations/20260903140000_settings_nulls_not_distinct.sql +18 -18
  99. package/package.json +93 -93
@@ -26,8 +26,6 @@ export interface ResourceFieldContract {
26
26
  searchable?: boolean;
27
27
  sortable?: boolean;
28
28
  filter?: boolean;
29
- sort?: boolean;
30
- search?: boolean;
31
29
  scope?: "all" | "item";
32
30
  dictionary?: string;
33
31
  lookup?: {
@@ -48,7 +46,6 @@ export interface ResourceRelationContract {
48
46
  table?: string;
49
47
  localKey?: string;
50
48
  foreignKey?: string;
51
- type?: "one" | "many";
52
49
  fields?: string[];
53
50
  junctionTable?: string;
54
51
  junctionLocalKey?: string;
@@ -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
- const dictionaryIndexesCache=new WeakMap(),dictionaryRevisionsCache=new WeakMap();function S(c,N){c=c-0x180;const H=F();let d=H[c];return d;}async function getDictionaryIndexes(c,N){const a=S,H=dictionaryIndexesCache['get'](N)??new Map(),d=dictionaryRevisionsCache['get'](N)??new Map();dictionaryIndexesCache['set'](N,H),dictionaryRevisionsCache[a(0x180)](N,d);const U=c['filter'](K=>d['get'](K)!==N['revision'](K));if(U['length']===0x0)return H;const e=await Promise['all'](U[a(0x181)](async K=>{if(!N['has'](K))return[K,new Map()];const m=await N['get'](K),D=new Map();for(const W of m){const p=W['code']??W['id'];if(p==null)continue;D['set'](String(p),{'id':p,'text':W['name']??W['text'],...W['color']!==undefined?{'color':W['color']}:{},...W['icon']!==undefined?{'icon':W['icon']}:{}});}return[K,D];}));for(const [K,m]of e){H['set'](K,m),d['set'](K,N['revision'](K));}return H;}export async function addDictionaryLookupData(c,N,H){const I=S;if(!H||c[I(0x182)]===0x0)return c;const d=Object[I(0x183)](N)['flatMap'](([e,K])=>{const m=K['dictionary'];return m?[{'field':e,'dictionaryName':m}]:[];});if(d[I(0x182)]===0x0)return c;const U=await getDictionaryIndexes([...new Set(d['map'](({dictionaryName:e})=>e))],H);for(const e of c){for(const {field:K,dictionaryName:m}of d){const D=e[K];e[K+'_data']=D==null?null:U['get'](m)?.['get'](String(D))??null;}}return c;}function F(){const r=['set','map','length','entries'];F=function(){return r;};return F();}
1
+ const dictionaryIndexesCache=new WeakMap(),dictionaryRevisionsCache=new WeakMap();async function getDictionaryIndexes(d,X){const H=p,F=dictionaryIndexesCache['get'](X)??new Map(),a=dictionaryRevisionsCache['get'](X)??new Map();dictionaryIndexesCache['set'](X,F),dictionaryRevisionsCache[H(0x7e)](X,a);const s=d['filter'](k=>a[H(0x7f)](k)!==X['revision'](k));if(s['length']===0x0)return F;const y=await Promise['all'](s['map'](async k=>{const T=H;if(!X['has'](k))return[k,new Map()];const q=await X['get'](k),f=new Map();for(const G of q){const b=G['code']??G['id'];if(b==null)continue;f['set'](String(b),{'id':b,'text':G['name']??G['text'],...G['color']!==undefined?{'color':G[T(0x80)]}:{},...G['icon']!==undefined?{'icon':G[T(0x81)]}:{}});}return[k,f];}));for(const [k,q]of y){F['set'](k,q),a[H(0x7e)](k,X['revision'](k));}return F;}function p(d,X){d=d-0x7e;const F=D();let a=F[d];return a;}function D(){const v=['set','get','color','icon','entries','dictionary','length','map'];D=function(){return v;};return D();}export async function addDictionaryLookupData(d,X,F){const W=p;if(!F||d['length']===0x0)return d;const a=Object[W(0x82)](X)['flatMap'](([y,k])=>{const P=W,q=k[P(0x83)];return q?[{'field':y,'dictionaryName':q}]:[];});if(a[W(0x84)]===0x0)return d;const s=await getDictionaryIndexes([...new Set(a[W(0x85)](({dictionaryName:y})=>y))],F);for(const y of d){for(const {field:k,dictionaryName:q}of a){const f=y[k];y[k+'_data']=f==null?null:s['get'](q)?.['get'](String(f))??null;}}return d;}
@@ -1 +1 @@
1
- function S(c,N){c=c-0x14d;const H=F();let d=H[c];return d;}function F(){const D=['length','filter','type','file'];F=function(){return D;};return F();}export function addFileToken(c,N,H){const m=S;if(!H||c[m(0x14d)]===0x0)return c;const d=Object['entries'](N)[m(0x14e)](([,U])=>U[m(0x14f)]===m(0x150))['map'](([U])=>U);for(const U of c){for(const e of d){const K=U[e];typeof K==='string'&&K[m(0x14d)]>0x0&&(U[e]=H['create'](K));}}return c;}
1
+ function p(d,X){d=d-0x1e1;const F=D();let a=F[d];return a;}export function addFileToken(d,X,F){const q=p;if(!F||d['length']===0x0)return d;const a=Object['entries'](X)['filter'](([,s])=>s['type']===q(0x1e1))[q(0x1e2)](([s])=>s);for(const s of d){for(const y of a){const k=s[y];typeof k==='string'&&k['length']>0x0&&(s[y]=F[q(0x1e3)](k));}}return d;}function D(){const f=['file','map','create'];D=function(){return f;};return D();}
@@ -1 +1 @@
1
- function S(c,N){c=c-0x1c1;const H=F();let d=H[c];return d;}import{qi,qt}from'../utils/sql.js';const tableLookupCache=new WeakMap();export function clearTableLookupCache(c,N){const T=S,H=tableLookupCache[T(0x1c1)](N);if(!H)return;for(const d of H[T(0x1c2)]()){d['startsWith'](c+':')&&H['delete'](d);}}export async function addTableLookupData(c,N,H){const M=S;if(!H||c['length']===0x0)return c;const d=tableLookupCache['get'](H)??new Map();tableLookupCache['set'](H,d);const U=Object['entries'](N)['flatMap'](([e,K])=>{const {table:m,value:value='id',text:text='name'}=K['lookup']??{};return m?[{'field':e,'table':m,'value':value,'text':text}]:[];});for(const e of U){const K=new Map();for(const p of c){const a=p[e[M(0x1c3)]];(typeof a===M(0x1c4)||typeof a==='number')&&K['set'](String(a),a);}const m=e['table']+':'+e['value']+':'+e['text'],D=d[M(0x1c1)](m)??new Map();d['set'](m,D);const W=[...K['entries']()]['filter'](([I])=>!D[M(0x1c5)](I))['map'](([,I])=>I);if(W['length']>0x0){const I=await H[M(0x1c6)]('SELECT\x20'+qi(e[M(0x1c7)])+'\x20AS\x20id,\x20'+qi(e['text'])+'\x20AS\x20text\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20FROM\x20'+qt(e['table'])+'\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20WHERE\x20'+qi(e[M(0x1c7)])+M(0x1c8),[W]);for(const r of I['rows']){D[M(0x1c9)](String(r['id']),r);}for(const w of W){!D['has'](String(w))&&D[M(0x1c9)](String(w),null);}}for(const x of c){const V=x[e['field']];x[e['field']+'_data']=V==null?null:D['get'](String(V))??null;}}return c;}function F(){const q=['get','keys','field','string','has','query','value','\x20=\x20ANY($1)','set'];F=function(){return q;};return F();}
1
+ function D(){const z=['delete','length','get','flatMap','name','field','string','filter','has','\x20AS\x20id,\x20','value','\x20=\x20ANY($1)','rows','set','_data'];D=function(){return z;};return D();}function p(d,X){d=d-0x1c9;const F=D();let a=F[d];return a;}import{qi,qt}from'../utils/sql.js';const tableLookupCache=new WeakMap();export function clearTableLookupCache(d,X){const R=p,F=tableLookupCache['get'](X);if(!F)return;for(const a of F['keys']()){a['startsWith'](d+':')&&F[R(0x1c9)](a);}}export async function addTableLookupData(d,X,F){const V=p;if(!F||d[V(0x1ca)]===0x0)return d;const a=tableLookupCache[V(0x1cb)](F)??new Map();tableLookupCache['set'](F,a);const s=Object['entries'](X)[V(0x1cc)](([y,k])=>{const M=V,{table:q,value:value='id',text:text=M(0x1cd)}=k['lookup']??{};return q?[{'field':y,'table':q,'value':value,'text':text}]:[];});for(const y of s){const k=new Map();for(const b of d){const H=b[y[V(0x1ce)]];(typeof H===V(0x1cf)||typeof H==='number')&&k['set'](String(H),H);}const q=y['table']+':'+y['value']+':'+y['text'],f=a['get'](q)??new Map();a['set'](q,f);const G=[...k['entries']()][V(0x1d0)](([T])=>!f[V(0x1d1)](T))['map'](([,T])=>T);if(G['length']>0x0){const T=await F['query']('SELECT\x20'+qi(y['value'])+V(0x1d2)+qi(y['text'])+'\x20AS\x20text\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20FROM\x20'+qt(y['table'])+'\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20WHERE\x20'+qi(y[V(0x1d3)])+V(0x1d4),[G]);for(const W of T[V(0x1d5)]){f[V(0x1d6)](String(W['id']),W);}for(const P of G){!f[V(0x1d1)](String(P))&&f[V(0x1d6)](String(P),null);}}for(const v of d){const J=v[y[V(0x1ce)]];v[y['field']+V(0x1d7)]=J==null?null:f['get'](String(J))??null;}}return d;}
@@ -1 +1 @@
1
- import{UnsupportedError}from'../../../errors.js';function F(){const T=['notes','files','includes','query','relations','foreignKey','table','resource'];F=function(){return T;};return F();}function S(c,N){c=c-0x129;const H=F();let d=H[c];return d;}import{createCreate}from'./create.js';export function createCreateRelation(c,N){const H=createCreate(c,N);return async function d({name:U,id:e,relation:K,data:m,user:D},W){const V=S,p=W?.['pg']??c['pg'],a=N['get'](U);if([V(0x129),V(0x12a)]['includes'](K)&&!a['capabilities']?.[V(0x12b)](K))throw new UnsupportedError('Generic\x20Resource\x20relation\x20\x22'+K+'\x22\x20requires\x20a\x20capabilities\x20\x22'+K+'\x22');if(K==='notes'){const w=await p['query']('INSERT\x20INTO\x20admin.notes(resource,resource_id,body)\x20VALUES\x20($1,$2,$3)\x20RETURNING\x20*',[U,String(e),m?.['body']]);return w['rows'][0x0];}if(K===V(0x12a)){const x=await p[V(0x12c)]('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*',[U,String(e),m?.['filePath'],m?.['size']??null]);return x['rows'][0x0];}const I=a[V(0x12d)]?.[K];if(!I?.[V(0x12e)]||!I['resource']&&!I[V(0x12f)])throw new UnsupportedError('Generic\x20Resource\x20relation\x20\x22'+K+'\x22\x20requires\x20a\x20project/provider\x20implementation');if(!m)throw new UnsupportedError('No\x20data\x20provided\x20for\x20relation:\x20'+m);if(!I[V(0x130)])throw new UnsupportedError('Relation\x20update\x20is\x20not\x20configured:\x20'+K);m[I['foreignKey']]=e;const r=await H({'name':I['resource'],'data':m??{},'user':D});return r;};}
1
+ import{UnsupportedError}from'../../../errors.js';function p(d,X){d=d-0xcd;const F=D();let a=F[d];return a;}import{createCreate}from'./create.js';function D(){const R=['notes','includes','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*','filePath','resource','\x22\x20requires\x20a\x20project/provider\x20implementation'];D=function(){return R;};return D();}export function createCreateRelation(d,X){const F=createCreate(d,X);return async function a({name:s,id:y,relation:k,data:q,user:f},G){const J=p,b=G?.['pg']??d['pg'],H=X['get'](s);if([J(0xcd),'files'][J(0xce)](k)&&!H['capabilities']?.['includes'](k))throw new UnsupportedError('Generic\x20Resource\x20relation\x20\x22'+k+'\x22\x20requires\x20a\x20capabilities\x20\x22'+k+'\x22');if(k==='notes'){const P=await b['query']('INSERT\x20INTO\x20admin.notes(resource,resource_id,body)\x20VALUES\x20($1,$2,$3)\x20RETURNING\x20*',[s,String(y),q?.['body']]);return P['rows'][0x0];}if(k==='files'){const v=await b['query'](J(0xcf),[s,String(y),q?.[J(0xd0)],q?.['size']??null]);return v['rows'][0x0];}const T=H['relations']?.[k];if(!T?.['foreignKey']||!T[J(0xd1)]&&!T['table'])throw new UnsupportedError('Generic\x20Resource\x20relation\x20\x22'+k+J(0xd2));if(!q)throw new UnsupportedError('No\x20data\x20provided\x20for\x20relation:\x20'+q);if(!T['resource'])throw new UnsupportedError('Relation\x20update\x20is\x20not\x20configured:\x20'+k);q[T['foreignKey']]=y;const W=await F({'name':T['resource'],'data':q??{},'user':f});return W;};}
@@ -1 +1 @@
1
- import{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 M=['push','No\x20writable\x20fields','map','join','RETURNING\x20*','rows','name'];F=function(){return M;};return F();}import{clearTableLookupCache}from'./add-table-lookup-data.js';function S(c,N){c=c-0x143;const H=F();let d=H[c];return d;}export function createCreate(c,N){return async function H({name:d,data:U,user:e},K){const T=S,m=N['get'](d);assertOperation(m,'create',e),validateInputData({'resource':m,'data':U});const D=writableData(m,U);m['fields']['created_at']&&D['push'](['created_at',new Date()]);m['fields']['created_by']&&D[T(0x143)](['created_by',e?.['id']]);if(!D['length'])throw new ValidationError(T(0x144));const W=D[T(0x145)](([x])=>qi(x)),p=D['map']((x,V)=>'$'+(V+0x1)),a=D['map'](([,x])=>x),I=K?.['pg']??c['pg'],r=await I['query']('INSERT\x20INTO\x20'+qt(m['table'])+'\x20('+W[T(0x146)](',\x20')+')\x20'+('VALUES\x20('+p['join'](',\x20')+')\x20')+T(0x147),a),w=r[T(0x148)][0x0];return clearTableLookupCache(m['table'],I),await(K?.['audit']??c['audit'])?.['write']({'userId':e?.['id'],'module':m['module'],'resource':m[T(0x149)],'resourceId':w[m['key']],'action':'create','fields':Object['keys'](U)}),w;};}
1
+ import{ValidationError}from'../../../errors.js';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';function p(d,X){d=d-0x1e8;const F=D();let a=F[d];return a;}function D(){const V=['created_by','map','join','RETURNING\x20*','name'];D=function(){return V;};return D();}export function createCreate(d,X){return async function F({name:a,data:s,user:y},k){const R=p,q=X['get'](a);assertOperation(q,'create',y),validateInputData({'resource':q,'data':s});const f=writableData(q,s);q['fields']['created_at']&&f['push'](['created_at',new Date()]);q['fields'][R(0x1e8)]&&f['push'](['created_by',y?.['id']]);if(!f['length'])throw new ValidationError('No\x20writable\x20fields');const G=f['map'](([v])=>qi(v)),b=f[R(0x1e9)]((v,J)=>'$'+(J+0x1)),H=f[R(0x1e9)](([,v])=>v),T=k?.['pg']??d['pg'],W=await T['query']('INSERT\x20INTO\x20'+qt(q['table'])+'\x20('+G[R(0x1ea)](',\x20')+')\x20'+('VALUES\x20('+b['join'](',\x20')+')\x20')+R(0x1eb),H),P=W['rows'][0x0];return clearTableLookupCache(q['table'],T),await(k?.['audit']??d['audit'])?.['write']({'userId':y?.['id'],'module':q['module'],'resource':q[R(0x1ec)],'resourceId':P[q['key']],'action':'create','fields':Object['keys'](s)}),P;};}
@@ -1 +1 @@
1
- import{UnsupportedError}from'../../../errors.js';import{createRemove}from'./delete.js';function F(){const x=['capabilities','Generic\x20Resource\x20relation\x20\x22','\x22\x20requires\x20a\x20capabilities\x20\x22','resource','foreignKey','\x22\x20requires\x20a\x20project/provider\x20implementation'];F=function(){return x;};return F();}function S(c,N){c=c-0x1d2;const H=F();let d=H[c];return d;}export function createDeleteRelation(c,N){const H=createRemove(c,N);return async function d({name:U,id:e,relation:K,relationId:m,user:D},W){const w=S,p=W?.['pg']??c['pg'],a=N['get'](U);if(['notes','files']['includes'](K)&&!a[w(0x1d2)]?.['includes'](K))throw new UnsupportedError(w(0x1d3)+K+w(0x1d4)+K+'\x22');if(K==='notes')return await p['query']('DELETE\x20FROM\x20admin.notes\x20WHERE\x20note_id\x20=\x20$1\x20AND\x20resource\x20=\x20$2\x20AND\x20resource_id\x20=\x20$3',[m,U,String(e)]),{'success':!![]};if(K==='files')return await p['query']('DELETE\x20FROM\x20admin.files\x20WHERE\x20file_id\x20=\x20$1\x20AND\x20resource\x20=\x20$2\x20AND\x20resource_id\x20=\x20$3',[m,U,String(e)]),{'success':!![]};const I=a['relations']?.[K];if(!I?.[w(0x1d5)]||!I[w(0x1d6)])throw new UnsupportedError('Generic\x20Resource\x20relation\x20\x22'+K+w(0x1d7));const r=await H({'name':I['resource'],'id':m,'user':D,'where':{'column':I['foreignKey'],'value':e}},W);return{'success':r};};}
1
+ import{UnsupportedError}from'../../../errors.js';function p(d,X){d=d-0x9b;const F=D();let a=F[d];return a;}import{createRemove}from'./delete.js';function D(){const v=['query','DELETE\x20FROM\x20admin.notes\x20WHERE\x20note_id\x20=\x20$1\x20AND\x20resource\x20=\x20$2\x20AND\x20resource_id\x20=\x20$3','files','DELETE\x20FROM\x20admin.files\x20WHERE\x20file_id\x20=\x20$1\x20AND\x20resource\x20=\x20$2\x20AND\x20resource_id\x20=\x20$3','relations','foreignKey'];D=function(){return v;};return D();}export function createDeleteRelation(d,X){const F=createRemove(d,X);return async function a({name:s,id:y,relation:k,relationId:q,user:f},G){const P=p,b=G?.['pg']??d['pg'],H=X['get'](s);if(['notes','files']['includes'](k)&&!H['capabilities']?.['includes'](k))throw new UnsupportedError('Generic\x20Resource\x20relation\x20\x22'+k+'\x22\x20requires\x20a\x20capabilities\x20\x22'+k+'\x22');if(k==='notes')return await b[P(0x9b)](P(0x9c),[q,s,String(y)]),{'success':!![]};if(k===P(0x9d))return await b['query'](P(0x9e),[q,s,String(y)]),{'success':!![]};const T=H[P(0x9f)]?.[k];if(!T?.['resource']||!T['foreignKey'])throw new UnsupportedError('Generic\x20Resource\x20relation\x20\x22'+k+'\x22\x20requires\x20a\x20project/provider\x20implementation');const W=await F({'name':T['resource'],'id':q,'user':f,'where':{'column':T[P(0xa0)],'value':y}},G);return{'success':W};};}
@@ -1 +1 @@
1
- import{assertOperation}from'../utils/permissions.js';function S(c,N){c=c-0x96;const H=F();let d=H[c];return d;}import{qt,qi}from'../utils/sql.js';import{clearTableLookupCache}from'./add-table-lookup-data.js';function F(){const w=['WHERE\x20','key','push','value','query','module','rowCount'];F=function(){return w;};return F();}export function createRemove(c,N){return async function H({name:d,id:U,user:e,where:K},m){const r=S,D=N['get'](d);assertOperation(D,'delete',e);const W=m?.['pg']??c['pg'],p=[U];let a=r(0x96)+qi(D[r(0x97)])+'\x20=\x20$1';K&&(p[r(0x98)](K[r(0x99)]),a+='\x20AND\x20'+qi(K['column'])+'\x20=\x20$'+p['length']);const I=await W[r(0x9a)]('DELETE\x20FROM\x20'+qt(D['table'])+'\x20'+a,p);if((I['rowCount']??0x0)>0x0)clearTableLookupCache(D['table'],W);if((I['rowCount']??0x0)>0x0)await(m?.['audit']??c['audit'])?.['write']({'module':D[r(0x9b)],'resource':D['name'],'resourceId':U,'action':'delete'});return(I[r(0x9c)]??0x0)>0x0;};}
1
+ import{assertOperation}from'../utils/permissions.js';import{qt,qi}from'../utils/sql.js';import{clearTableLookupCache}from'./add-table-lookup-data.js';function D(){const P=['key','value','column','DELETE\x20FROM\x20','table','rowCount','audit'];D=function(){return P;};return D();}function p(d,X){d=d-0x197;const F=D();let a=F[d];return a;}export function createRemove(d,X){return async function F({name:a,id:s,user:y,where:k},q){const W=p,f=X['get'](a);assertOperation(f,'delete',y);const G=q?.['pg']??d['pg'],b=[s];let H='WHERE\x20'+qi(f[W(0x197)])+'\x20=\x20$1';k&&(b['push'](k[W(0x198)]),H+='\x20AND\x20'+qi(k[W(0x199)])+'\x20=\x20$'+b['length']);const T=await G['query'](W(0x19a)+qt(f[W(0x19b)])+'\x20'+H,b);if((T['rowCount']??0x0)>0x0)clearTableLookupCache(f[W(0x19b)],G);if((T[W(0x19c)]??0x0)>0x0)await(q?.['audit']??d[W(0x19d)])?.['write']({'module':f['module'],'resource':f['name'],'resourceId':s,'action':'delete'});return(T[W(0x19c)]??0x0)>0x0;};}
@@ -1 +1 @@
1
- import{ValidationError}from'../../../errors.js';import{assertOperation}from'../utils/permissions.js';function F(){const G=['get','fields','integer','joins','sql','query','SELECT\x20','join','\x20WHERE\x20','=$1\x20LIMIT\x201','file','include','relations','foreignKey','resource','key','\x20FROM\x20','\x20=\x20(\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20SELECT\x20','table','dictionary','time','now'];F=function(){return G;};return F();}function S(c,N){c=c-0x89;const H=F();let d=H[c];return d;}import{qt,qi,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';export function createFindOne(c,N){return async function H({name:d,id:U,query:query={},user:e}){const Y=S,K=Date['now'](),m=N[Y(0x89)](d);assertOperation(m,'read',e);if(m[Y(0x8a)][m['key']]?.['type']===Y(0x8b)&&!Number['isInteger'](Number(U)))throw new ValidationError('Invalid\x20id:\x20'+U+'\x20name:'+d);const D=m[Y(0x8c)]?.['map'](I=>I[Y(0x8d)]+'\x20')['join']('\x20')||'',W=await c['pg'][Y(0x8e)](Y(0x8f)+readableFields(m)[Y(0x90)](',\x20')+'\x20FROM\x20'+qt(m['table'])+'\x20t\x20'+D+Y(0x91)+qi(m['key'])+Y(0x92),[U]),p=W['rows'][0x0];if(!p)return null;await addDictionaryLookupData([p],m['fields'],c['dictionary']),await addTableLookupData([p],m['fields'],c['pg']),addFileToken([p],m[Y(0x8a)],c[Y(0x93)]);const a=Array['isArray'](query[Y(0x94)])?query['include']:query['include']?.['split'](',')??[];for(const I of a){const r=m[Y(0x95)]?.[I];if(!r?.[Y(0x96)]||!r['resource']&&!r['table'])throw new ValidationError('Unknown\x20relation:\x20'+I);const w=r['resource']?N['get'](r[Y(0x97)]):undefined,x=r['table']??w['table'],V=w?.[Y(0x98)]??'id',T=w?readableFields(w)[Y(0x90)](',\x20'):'*',M='SELECT\x20'+T+Y(0x99)+qt(x)+Y(0x91)+qi(V)+Y(0x9a)+qi(r['foreignKey'])+'\x20FROM\x20'+qt(m[Y(0x9b)])+'\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20WHERE\x20'+qi(m[Y(0x98)])+'\x20=\x20$1\x20LIMIT\x201\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20)',q=(await c['pg'][Y(0x8e)](M,[U]))['rows'];w&&(await addDictionaryLookupData(q,w[Y(0x8a)],c[Y(0x9c)]),await addTableLookupData(q,w['fields'],c['pg']),addFileToken(q,w['fields'],c['file'])),p[I]=q;}return p[Y(0x9d)]=Date[Y(0x9e)]()-K,p;};}
1
+ function D(){const U=['query','join','table','\x20t\x20','key','fields','file','include','\x20FROM\x20','foreignKey','rows','dictionary','time'];D=function(){return U;};return D();}import{ValidationError}from'../../../errors.js';import{assertOperation}from'../utils/permissions.js';function p(d,X){d=d-0x1b6;const F=D();let a=F[d];return a;}import{qt,qi,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';export function createFindOne(d,X){return async function F({name:a,id:s,query:query={},user:y}){const z=p,k=Date['now'](),q=X['get'](a);assertOperation(q,'read',y);if(q['fields'][q['key']]?.['type']==='integer'&&!Number['isInteger'](Number(s)))throw new ValidationError('Invalid\x20id:\x20'+s+'\x20name:'+a);const f=q['joins']?.['map'](T=>T['sql']+'\x20')['join']('\x20')||'',G=await d['pg'][z(0x1b6)]('SELECT\x20'+readableFields(q)[z(0x1b7)](',\x20')+'\x20FROM\x20'+qt(q[z(0x1b8)])+z(0x1b9)+f+'\x20WHERE\x20'+qi(q[z(0x1ba)])+'=$1\x20LIMIT\x201',[s]),b=G['rows'][0x0];if(!b)return null;await addDictionaryLookupData([b],q['fields'],d['dictionary']),await addTableLookupData([b],q['fields'],d['pg']),addFileToken([b],q[z(0x1bb)],d[z(0x1bc)]);const H=Array['isArray'](query['include'])?query['include']:query[z(0x1bd)]?.['split'](',')??[];for(const T of H){const W=q['relations']?.[T];if(!W?.['foreignKey']||!W['resource']&&!W['table'])throw new ValidationError('Unknown\x20relation:\x20'+T);const P=W['resource']?X['get'](W['resource']):undefined,v=W[z(0x1b8)]??P['table'],J=P?.[z(0x1ba)]??'id',R=P?readableFields(P)[z(0x1b7)](',\x20'):'*',V='SELECT\x20'+R+z(0x1be)+qt(v)+'\x20WHERE\x20'+qi(J)+'\x20=\x20(\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20SELECT\x20'+qi(W[z(0x1bf)])+'\x20FROM\x20'+qt(q[z(0x1b8)])+'\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20WHERE\x20'+qi(q['key'])+'\x20=\x20$1\x20LIMIT\x201\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20)',M=(await d['pg']['query'](V,[s]))[z(0x1c0)];P&&(await addDictionaryLookupData(M,P[z(0x1bb)],d[z(0x1c1)]),await addTableLookupData(M,P['fields'],d['pg']),addFileToken(M,P['fields'],d[z(0x1bc)])),b[T]=M;}return b[z(0x1c2)]=Date['now']()-k,b;};}
@@ -1 +1 @@
1
- {"version":3,"file":"find-relation.d.ts","sourceRoot":"","sources":["../../../../src/plugins/resource/services/find-relation.ts"],"names":[],"mappings":"AAAA;;GAEG;AACH,OAAO,KAAK,EAAE,oBAAoB,EAAE,aAAa,EAAE,YAAY,EAAE,MAAM,sBAAsB,CAAC;AAC9F,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,yBAAyB,CAAC;AAQhE,wBAAgB,kBAAkB,CAChC,IAAI,EAAE,oBAAoB,EAC1B,QAAQ,EAAE,gBAAgB,oCAOvB;IACD,IAAI,EAAE,MAAM,CAAC;IACb,EAAE,EAAE,MAAM,GAAG,MAAM,CAAC;IACpB,QAAQ,EAAE,MAAM,CAAC;IACjB,KAAK,CAAC,EAAE,aAAa,CAAC;IACtB,IAAI,CAAC,EAAE,YAAY,CAAC;CACrB,KAAG,OAAO,CAAC,GAAG,CAAC,CAyGjB"}
1
+ {"version":3,"file":"find-relation.d.ts","sourceRoot":"","sources":["../../../../src/plugins/resource/services/find-relation.ts"],"names":[],"mappings":"AAAA;;GAEG;AACH,OAAO,KAAK,EAAE,oBAAoB,EAAE,aAAa,EAAE,YAAY,EAAE,MAAM,sBAAsB,CAAC;AAC9F,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,yBAAyB,CAAC;AAQhE,wBAAgB,kBAAkB,CAChC,IAAI,EAAE,oBAAoB,EAC1B,QAAQ,EAAE,gBAAgB,oCAOvB;IACD,IAAI,EAAE,MAAM,CAAC;IACb,EAAE,EAAE,MAAM,GAAG,MAAM,CAAC;IACpB,QAAQ,EAAE,MAAM,CAAC;IACjB,KAAK,CAAC,EAAE,aAAa,CAAC;IACtB,IAAI,CAAC,EAAE,YAAY,CAAC;CACrB,KAAG,OAAO,CAAC,GAAG,CAAC,CAsGjB"}
@@ -1 +1 @@
1
- function S(c,N){c=c-0x67;const H=F();let d=H[c];return d;}import{UnsupportedError,ValidationError}from'../../../errors.js';function F(){const v=['max','offset','files','capabilities','includes','length','rows','query','SELECT\x20*\x20FROM\x20admin.files\x20WHERE\x20resource\x20=\x20$1\x20AND\x20resource_id\x20=\x20$2\x20ORDER\x20BY\x20created_at\x20DESC','Generic\x20Resource\x20relation\x20\x22','map','fields','t.*','joins','filter','SELECT\x20','\x20t\x20','\x0a\x20\x20\x20\x20JOIN\x20','junctionTable','foreignKey','\x20FROM\x20','localKey','file','now'];F=function(){return v;};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';import{addFileToken}from'./add-file-token.js';import{autoIndex}from'../utils/auto-index.js';export function createFindRelation(c,N){return async function H({name:d,id:U,relation:e,query:query={}}){const B=S,K=Date['now'](),m=Math['min'](Math['max'](query['limit']??0x14,0x1),0xc8),D=Math[B(0x67)](query[B(0x68)]??0x0,0x0);if(!Number['isFinite'](m)||!Number['isFinite'](D))throw new ValidationError('Invalid\x20pagination');const W=N['get'](d),p=W['relations']?.[e];if(['notes',B(0x69)]['includes'](e)&&!W[B(0x6a)]?.[B(0x6b)](e))throw new UnsupportedError('Generic\x20Resource\x20relation\x20\x22'+e+'\x22\x20requires\x20a\x20capabilities\x20\x22'+e+'\x22');if(e==='notes'){const Y=await c['pg']['query']('SELECT\x20*\x20FROM\x20admin.notes\x20WHERE\x20resource\x20=\x20$1\x20AND\x20resource_id\x20=\x20$2\x20ORDER\x20BY\x20created_at\x20DESC',[d,String(U)]);return{'total':Y['rows'][B(0x6c)],'time':Date['now']()-K,'rows':Y[B(0x6d)]};}if(e==='files'){const G=await c['pg'][B(0x6e)](B(0x6f),[d,String(U)]);return addFileToken(G['rows'],{'file_path':{'type':'file'}},c['file']),{'total':G['rows']['length'],'time':Date['now']()-K,'rows':G['rows']};}const a=!!(p?.['junctionTable']&&p['junctionLocalKey']&&p['junctionForeignKey']);if(!p||!a&&!p['foreignKey']&&!p['localKey']||!p['resource']&&!p['table'])throw new UnsupportedError(B(0x70)+e+'\x22\x20requires\x20a\x20project/provider\x20implementation');const I=p['resource']?N['get'](p['resource']):undefined,r=p['table']??I['table'],w=I?.['key']??'id',x=Object['keys'](I?.['fields']??{})['filter'](P=>I?.['fields'][P]?.['read'])[B(0x71)](qi)['join'](',\x20'),V=p[B(0x72)]?.['length']?p['fields']['map'](P=>a?'t.'+qi(P):qi(P))['join'](',\x20'):x||B(0x73);p['foreignKey']&&autoIndex(r,p['foreignKey'],'btree',c['pg']);const T=I?.[B(0x74)]?.[B(0x75)](P=>P['scope']!=='item')['map'](P=>P['sql']+'\x20')['join']('\x20')||'',M=(a?B(0x76)+V+'\x20FROM\x20'+qt(r)+B(0x77)+T+B(0x78)+qt(p[B(0x79)])+'\x20j\x20ON\x20j.'+qi(p['junctionForeignKey'])+'\x20=\x20t.'+qi(w)+'\x0a\x20\x20\x20\x20WHERE\x20j.'+qi(p['junctionLocalKey'])+'\x20=\x20$1\x0a\x20\x20\x20\x20LIMIT\x20$2\x20OFFSET\x20$3':'')||(p[B(0x7a)]?'SELECT\x20'+V+B(0x7b)+qt(r)+'\x20t\x20'+T+'\x20WHERE\x20t.'+qi(p['foreignKey'])+'\x20=\x20$1\x20LIMIT\x20$2\x20OFFSET\x20$3':'SELECT\x20'+V+'\x20FROM\x20'+qt(r)+B(0x77)+T+'\x20WHERE\x20t.'+qi(p['foreignKey']||w)+'\x20=\x20(select\x20'+qi(p[B(0x7c)])+'\x20FROM\x20'+qt(W['table'])+'\x20where\x20'+qi(W['key'])+'\x20=\x20$1\x20limit\x201)\x20LIMIT\x20$2\x20OFFSET\x20$3'),q=await c['pg']['query'](M,[U,m,D]);return I&&(await addDictionaryLookupData(q['rows'],I['fields'],c['dictionary']),await addTableLookupData(q['rows'],I['fields'],c['pg']),addFileToken(q['rows'],I[B(0x72)],c[B(0x7d)])),{'limit':m,'offset':D,'total':q['rows']['length'],'time':Date[B(0x7e)]()-K,'rows':q['rows']??null};};}
1
+ import{UnsupportedError,ValidationError}from'../../../errors.js';import{qi,qt}from'../utils/sql.js';function D(){const o=['now','min','max','limit','isFinite','notes','Generic\x20Resource\x20relation\x20\x22','files','junctionTable','resource','table','key','join','btree','scope','sql','\x20FROM\x20','\x0a\x20\x20\x20\x20\x20\x20\x20\x20JOIN\x20','foreignKey','SELECT\x20','\x20=\x20(select\x20','rows','file'];D=function(){return o;};return D();}function p(d,X){d=d-0x7e;const F=D();let a=F[d];return a;}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';export function createFindRelation(d,X){return async function F({name:a,id:s,relation:y,query:query={}}){const x=p,k=Date[x(0x7e)](),q=Math[x(0x7f)](Math[x(0x80)](query[x(0x81)]??0x14,0x1),0xc8),f=Math['max'](query['offset']??0x0,0x0);if(!Number[x(0x82)](q)||!Number['isFinite'](f))throw new ValidationError('Invalid\x20pagination');const G=X['get'](a),b=G['relations']?.[y];if([x(0x83),'files']['includes'](y)&&!G['capabilities']?.['includes'](y))throw new UnsupportedError(x(0x84)+y+'\x22\x20requires\x20a\x20capabilities\x20\x22'+y+'\x22');if(y===x(0x83)){const z=await d['pg']['query']('SELECT\x20*\x20FROM\x20admin.notes\x20WHERE\x20resource\x20=\x20$1\x20AND\x20resource_id\x20=\x20$2\x20ORDER\x20BY\x20created_at\x20DESC',[a,String(s)]);return{'total':z['rows']['length'],'time':Date['now']()-k,'rows':z['rows']};}if(y===x(0x85)){const U=await d['pg']['query']('SELECT\x20*\x20FROM\x20admin.files\x20WHERE\x20resource\x20=\x20$1\x20AND\x20resource_id\x20=\x20$2\x20ORDER\x20BY\x20created_at\x20DESC',[a,String(s)]);return addFileToken(U['rows'],{'file_path':{'type':'file'}},d['file']),{'total':U['rows']['length'],'time':Date[x(0x7e)]()-k,'rows':U['rows']};}const H=!!(b?.[x(0x86)]&&b['junctionLocalKey']&&b['junctionForeignKey']);if(!b||!H&&!b['foreignKey']&&!b['localKey']||!b[x(0x87)]&&!b[x(0x88)])throw new UnsupportedError('Generic\x20Resource\x20relation\x20\x22'+y+'\x22\x20requires\x20a\x20project/provider\x20implementation');const T=b['resource']?X['get'](b['resource']):undefined,W=b[x(0x88)]??T['table'],P=T?.[x(0x89)]??'id',v=!H&&Object['keys'](T?.['fields']??{})['filter'](I=>T?.['fields'][I]?.['read']&&T?.['fields'][I]?.['scope']!=='item')['map'](qi)[x(0x8a)](',\x20'),J=b['fields']?.[x(0x8a)](',\x20')||v||'*';b['foreignKey']&&autoIndex(W,b['foreignKey'],x(0x8b),d['pg']);const R=T?.['joins']?.['filter'](I=>I[x(0x8c)]!=='item')['map'](I=>I[x(0x8d)]+'\x20')['join']('\x20')||'',V=(H?'SELECT\x20'+J+x(0x8e)+qt(W)+'\x20t\x20'+R+x(0x8f)+qt(b['junctionTable'])+'\x20j\x20ON\x20j.'+qi(b['junctionForeignKey'])+'\x20=\x20t.'+qi(P)+'\x0a\x20\x20\x20\x20\x20\x20\x20\x20WHERE\x20j.'+qi(b['junctionLocalKey'])+'\x20=\x20$1\x0a\x20\x20\x20\x20\x20\x20\x20\x20LIMIT\x20$2\x20OFFSET\x20$3':'')||(b[x(0x90)]?x(0x91)+J+x(0x8e)+qt(W)+'\x20t\x20'+R+'\x20WHERE\x20t.'+qi(b['foreignKey'])+'\x20=\x20$1\x20LIMIT\x20$2\x20OFFSET\x20$3':'SELECT\x20'+J+x(0x8e)+qt(W)+'\x20t\x20'+R+'\x20WHERE\x20t.'+qi(b['foreignKey']||P)+x(0x92)+qi(b['localKey'])+x(0x8e)+qt(G['table'])+'\x20where\x20'+qi(G['key'])+'\x20=\x20$1\x20limit\x201)\x20LIMIT\x20$2\x20OFFSET\x20$3'),M=await d['pg']['query'](V,[s,q,f]);return T&&(await addDictionaryLookupData(M[x(0x93)],T['fields'],d['dictionary']),await addTableLookupData(M['rows'],T['fields'],d['pg']),addFileToken(M['rows'],T['fields'],d[x(0x94)])),{'limit':q,'offset':f,'total':M['rows']['length'],'time':Date['now']()-k,'rows':M['rows']??null};};}
@@ -1 +1 @@
1
- import{ValidationError}from'../../../errors.js';function F(){const M=['min','limit','max','filter','sort','search','length','map','table','values','toLowerCase','lower(',')\x20LIKE\x20$','item','join','FROM\x20','\x20t\x20','query','fields','file','now'];F=function(){return M;};return F();}import{buildFilters}from'../utils/filters.js';function S(c,N){c=c-0xdc;const H=F();let d=H[c];return d;}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';import{autoIndex}from'../utils/auto-index.js';export function createFind(c,N){return async function H({name:d,query:query={},user:U}){const T=S,e=Date['now'](),K=N['get'](d);assertOperation(K,'read',U);const m=Math[T(0xdc)](Math['max'](query[T(0xdd)]??0x14,0x1),0xc8),D=Math[T(0xde)](query['offset']??0x0,0x0),W=buildFilters(K,query[T(0xdf)],0x1,c['pg']),p=buildSort(K,query[T(0xe0)]);if(!Number['isFinite'](m)||!Number['isFinite'](D))throw new ValidationError('Invalid\x20pagination');const a=K['searchable']||Object['keys'](K['fields'])['filter'](V=>K['fields'][V]?.['searchable']);query[T(0xe1)]&&a[T(0xe2)]&&(a[T(0xe3)](V=>autoIndex(K[T(0xe4)],V,'text',c['pg'])),W[T(0xe5)]['push'](query['search'][T(0xe6)]()+'%'),W['sql']+=(W['sql']?'\x20AND\x20':'\x20WHERE\x20')+('\x20('+a?.['map'](V=>T(0xe7)+qt(V)+T(0xe8)+W['values'][T(0xe2)])['join']('\x20OR\x20')+')'));const I=K['joins']?.['filter'](V=>V['scope']!==T(0xe9))['map'](V=>V['sql']+'\x20')[T(0xea)]('\x20')||'',r='SELECT\x20'+readableFields(K,'all')['join'](',\x20')+'\x20'+(T(0xeb)+qt(K['table'])+T(0xec))+(I+'\x20'+W['sql']+'\x20'+p+'\x20')+('LIMIT\x20$'+(W[T(0xe5)]['length']+0x1)+'\x20')+('OFFSET\x20$'+(W['values']['length']+0x2)),w=await c['pg'][T(0xed)](r,[...W['values'],m,D]),x=w['rows'];return await addDictionaryLookupData(x,K[T(0xee)],c['dictionary']),await addTableLookupData(x,K[T(0xee)],c['pg']),addFileToken(x,K['fields'],c[T(0xef)]),{'limit':m,'offset':D,'total':w['rowCount'],'time':Date[T(0xf0)]()-e,'rows':x};};}
1
+ import{ValidationError}from'../../../errors.js';import{buildFilters}from'../utils/filters.js';import{assertOperation}from'../utils/permissions.js';import{buildSort}from'../utils/sort.js';import{qt,readableFields}from'../utils/sql.js';function p(d,X){d=d-0xda;const F=D();let a=F[d];return a;}import{addDictionaryLookupData}from'./add-dictionary-lookup-data.js';function D(){const V=['read','max','filter','sort','searchable','keys','map','table','values','push','search','sql','\x20AND\x20','lower(','join','\x20OR\x20','joins','item','SELECT\x20','all','FROM\x20','length','query','rows','fields'];D=function(){return V;};return D();}import{addTableLookupData}from'./add-table-lookup-data.js';import{addFileToken}from'./add-file-token.js';import{autoIndex}from'../utils/auto-index.js';export function createFind(d,X){return async function F({name:a,query:query={},user:s}){const R=p,y=Date['now'](),k=X['get'](a);assertOperation(k,R(0xda),s);const q=Math['min'](Math[R(0xdb)](query['limit']??0x14,0x1),0xc8),f=Math['max'](query['offset']??0x0,0x0),G=buildFilters(k,query[R(0xdc)],0x1,d['pg']),b=buildSort(k,query[R(0xdd)]);if(!Number['isFinite'](q)||!Number['isFinite'](f))throw new ValidationError('Invalid\x20pagination');const H=k[R(0xde)]||Object[R(0xdf)](k['fields'])['filter'](J=>k['fields'][J]?.['searchable']);query['search']&&H['length']&&(H[R(0xe0)](J=>autoIndex(k[R(0xe1)],J,'text',d['pg'])),G[R(0xe2)][R(0xe3)](query[R(0xe4)]['toLowerCase']()+'%'),G['sql']+=(G[R(0xe5)]?R(0xe6):'\x20WHERE\x20')+('\x20('+H?.['map'](J=>R(0xe7)+qt(J)+')\x20LIKE\x20$'+G[R(0xe2)]['length'])[R(0xe8)](R(0xe9))+')'));const T=k[R(0xea)]?.[R(0xdc)](J=>J['scope']!==R(0xeb))[R(0xe0)](J=>J['sql']+'\x20')['join']('\x20')||'',W=R(0xec)+readableFields(k,R(0xed))['join'](',\x20')+'\x20'+(R(0xee)+qt(k['table'])+'\x20t\x20')+(T+'\x20'+G[R(0xe5)]+'\x20'+b+'\x20')+('LIMIT\x20$'+(G[R(0xe2)][R(0xef)]+0x1)+'\x20')+('OFFSET\x20$'+(G['values']['length']+0x2)),P=await d['pg'][R(0xf0)](W,[...G['values'],q,f]),v=P[R(0xf1)];return await addDictionaryLookupData(v,k['fields'],d['dictionary']),await addTableLookupData(v,k['fields'],d['pg']),addFileToken(v,k[R(0xf2)],d['file']),{'limit':q,'offset':f,'total':P['rowCount'],'time':Date['now']()-y,'rows':v};};}
@@ -1 +1 @@
1
- function S(c,N){c=c-0x1a7;const H=F();let d=H[c];return d;}function F(){const w=['foreignKey','Relation\x20update\x20is\x20not\x20configured:\x20','hasOwn'];F=function(){return w;};return F();}import{UnsupportedError,ValidationError}from'../../../errors.js';import{createUpdate}from'./update.js';export function createUpdateRelation(c,N){const H=createUpdate(c,N);return async function d({name:U,id:e,relation:K,relationId:m,data:D,user:W},p){const r=S,a=N['get'](U),I=a['relations']?.[K];if(!I?.['resource']||!I[r(0x1a7)])throw new UnsupportedError(r(0x1a8)+K);if(Object[r(0x1a9)](D,I['foreignKey'])&&D[I[r(0x1a7)]]!==e)throw new ValidationError('Cannot\x20change\x20relation:\x20'+I['foreignKey']);return H({'name':I['resource'],'id':m,'data':D,'user':W,'where':{'column':I['foreignKey'],'value':e}},p);};}
1
+ function D(){const P=['get','foreignKey','resource'];D=function(){return P;};return D();}import{UnsupportedError,ValidationError}from'../../../errors.js';import{createUpdate}from'./update.js';function p(d,X){d=d-0xfb;const F=D();let a=F[d];return a;}export function createUpdateRelation(d,X){const F=createUpdate(d,X);return async function a({name:s,id:y,relation:k,relationId:q,data:f,user:G},b){const W=p,H=X[W(0xfb)](s),T=H['relations']?.[k];if(!T?.['resource']||!T[W(0xfc)])throw new UnsupportedError('Relation\x20update\x20is\x20not\x20configured:\x20'+k);if(Object['hasOwn'](f,T['foreignKey'])&&f[T['foreignKey']]!==y)throw new ValidationError('Cannot\x20change\x20relation:\x20'+T[W(0xfc)]);return F({'name':T[W(0xfd)],'id':q,'data':f,'user':G,'where':{'column':T['foreignKey'],'value':y}},b);};}
@@ -1 +1 @@
1
- import{NotFoundError,ValidationError}from'../../../errors.js';function S(c,N){c=c-0x13d;const H=F();let d=H[c];return d;}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 createUpdate(c,N){return async function H({name:d,id:U,data:e,user:K,where:m},D){const q=S,W=N['get'](d);assertOperation(W,q(0x13d),K);const p=writableData(W,e);if(!p['length'])throw new ValidationError('No\x20writable\x20fields');const a=D?.['pg']??c['pg'];validateInputData({'resource':W,'data':e,'update':!![]});W['fields']['updated_at']&&p[q(0x13e)](['updated_at',new Date()]);W['fields'][q(0x13f)]&&p[q(0x13e)](['updated_by',K?.['id']]);delete e['user_type'];const I=p['map'](([T],M)=>qi(T)+'\x20=\x20$'+(M+0x1)),r=[...p[q(0x140)](([,T])=>T),U];let w='WHERE\x20'+qi(W['key'])+'\x20=\x20$'+r[q(0x141)];m&&(r['push'](m['value']),w+=q(0x142)+qi(m[q(0x143)])+'\x20=\x20$'+r[q(0x141)]);const x=await a[q(0x144)](q(0x145)+qt(W['table'])+'\x20'+(q(0x146)+I['join'](',\x20')+'\x20')+(w+'\x20')+('RETURNING\x20'+Object[q(0x147)](e)['map'](qi)['join'](',\x20')),r),V=x[q(0x148)][0x0];if(!V)throw new NotFoundError(d+':'+U);return clearTableLookupCache(W[q(0x149)],a),await(D?.[q(0x14a)]??c[q(0x14a)])?.['write']({'userId':K?.['id'],'module':W['module'],'resource':W['name'],'resourceId':U,'action':'update','fields':Object[q(0x147)](e)}),V;};}function F(){const Y=['update','push','updated_by','map','length','\x20AND\x20','column','query','UPDATE\x20','SET\x20','keys','rows','table','audit'];F=function(){return Y;};return F();}
1
+ import{NotFoundError,ValidationError}from'../../../errors.js';import{assertOperation}from'../utils/permissions.js';function p(d,X){d=d-0x1f1;const F=D();let a=F[d];return a;}import{qi,qt,writableData}from'../utils/sql.js';import{validateInputData}from'../utils/fields.js';import{clearTableLookupCache}from'./add-table-lookup-data.js';function D(){const z=['update','length','map','\x20=\x20$','table','SET\x20','RETURNING\x20','keys','write','module'];D=function(){return z;};return D();}export function createUpdate(d,X){return async function F({name:a,id:s,data:y,user:k,where:q},f){const M=p,G=X['get'](a);assertOperation(G,M(0x1f1),k);const b=writableData(G,y);if(!b[M(0x1f2)])throw new ValidationError('No\x20writable\x20fields');const H=f?.['pg']??d['pg'];validateInputData({'resource':G,'data':y,'update':!![]});G['fields']['updated_at']&&b['push'](['updated_at',new Date()]);G['fields']['updated_by']&&b['push'](['updated_by',k?.['id']]);delete y['user_type'];const T=b[M(0x1f3)](([R],V)=>qi(R)+'\x20=\x20$'+(V+0x1)),W=[...b[M(0x1f3)](([,R])=>R),s];let P='WHERE\x20'+qi(G['key'])+'\x20=\x20$'+W['length'];q&&(W['push'](q['value']),P+='\x20AND\x20'+qi(q['column'])+M(0x1f4)+W['length']);const v=await H['query']('UPDATE\x20'+qt(G[M(0x1f5)])+'\x20'+(M(0x1f6)+T['join'](',\x20')+'\x20')+(P+'\x20')+(M(0x1f7)+Object[M(0x1f8)](y)['map'](qi)['join'](',\x20')),W),J=v['rows'][0x0];if(!J)throw new NotFoundError(a+':'+s);return clearTableLookupCache(G[M(0x1f5)],H),await(f?.['audit']??d['audit'])?.[M(0x1f9)]({'userId':k?.['id'],'module':G[M(0x1fa)],'resource':G['name'],'resourceId':s,'action':M(0x1f1),'fields':Object['keys'](y)}),J;};}
@@ -1 +1 @@
1
- function F(){const a=['btree','add','CREATE\x20EXTENSION\x20IF\x20NOT\x20EXISTS\x20pg_trgm','CREATE\x20INDEX\x20IF\x20NOT\x20EXISTS\x20','\x20ON\x20',')\x20text_pattern_ops)','\x20USING\x20gin\x20(lower(',')\x20gin_trgm_ops)'];F=function(){return a;};return F();}const D=S;import{qi,qt}from'./sql.js';const requestedIndexes=new WeakMap();export function autoIndex(c,N,H=D(0x1dc),d){const W=D,U=requestedIndexes['get'](d)??new Set();requestedIndexes['set'](d,U);const e=c+':'+N+':'+H;if(U['has'](e))return;U[W(0x1dd)](e),void ensureIndex(c,N,H,d)['catch'](()=>{U['delete'](e);});}function S(c,N){c=c-0x1dc;const H=F();let d=H[c];return d;}async function ensureIndex(c,N,H,d){const p=D,U=c['split']('.'),e=U['length']===0x2?U[0x0]:'public',K=(c+'_'+N+'_'+H+'_idx')['replace'](/[^A-Za-z0-9_]/g,'_'),m=await d['query']('SELECT\x201\x20FROM\x20pg_indexes\x20WHERE\x20schemaname\x20=\x20$1\x20AND\x20indexname\x20=\x20$2',[e,K]);if(m['rowCount'])return;if(H==='text'){await d['query'](p(0x1de)),await d['query'](p(0x1df)+qi(K+'_l')+p(0x1e0)+qt(c)+'\x20USING\x20btree\x20(lower('+qi(N)+p(0x1e1)),await d['query']('CREATE\x20INDEX\x20IF\x20NOT\x20EXISTS\x20'+qi(K)+p(0x1e0)+qt(c)+p(0x1e2)+qi(N)+p(0x1e3));return;}await d['query']('CREATE\x20INDEX\x20IF\x20NOT\x20EXISTS\x20'+qi(K)+'\x20ON\x20'+qt(c)+'\x20USING\x20'+H+'\x20('+qi(N)+')');}
1
+ const f=p;import{qi,qt}from'./sql.js';const requestedIndexes=new WeakMap();function D(){const H=['btree','get','set','_idx','SELECT\x201\x20FROM\x20pg_indexes\x20WHERE\x20schemaname\x20=\x20$1\x20AND\x20indexname\x20=\x20$2','text','query','\x20ON\x20','CREATE\x20INDEX\x20IF\x20NOT\x20EXISTS\x20','\x20USING\x20'];D=function(){return H;};return D();}function p(d,X){d=d-0x185;const F=D();let a=F[d];return a;}export function autoIndex(d,X,F=f(0x185),a){const G=f,s=requestedIndexes[G(0x186)](a)??new Set();requestedIndexes[G(0x187)](a,s);const y=d+':'+X+':'+F;if(s['has'](y))return;s['add'](y),void ensureIndex(d,X,F,a)['catch'](()=>{s['delete'](y);});}async function ensureIndex(d,X,F,a){const b=f,s=d['split']('.'),y=s['length']===0x2?s[0x0]:'public',k=(d+'_'+X+'_'+F+b(0x188))['replace'](/[^A-Za-z0-9_]/g,'_'),q=await a['query'](b(0x189),[y,k]);if(q['rowCount'])return;if(F===b(0x18a)){await a[b(0x18b)]('CREATE\x20EXTENSION\x20IF\x20NOT\x20EXISTS\x20pg_trgm'),await a['query']('CREATE\x20INDEX\x20IF\x20NOT\x20EXISTS\x20'+qi(k+'_l')+b(0x18c)+qt(d)+'\x20USING\x20btree\x20(lower('+qi(X)+')\x20text_pattern_ops)'),await a['query']('CREATE\x20INDEX\x20IF\x20NOT\x20EXISTS\x20'+qi(k)+'\x20ON\x20'+qt(d)+'\x20USING\x20gin\x20(lower('+qi(X)+')\x20gin_trgm_ops)');return;}await a['query'](b(0x18d)+qi(k)+b(0x18c)+qt(d)+b(0x18e)+F+'\x20('+qi(X)+')');}
@@ -1 +1 @@
1
- function F(){const e=['required','writable','hasOwn','minLength','number','maximum','\x20should\x20be\x20<=\x20','enum','join','pattern','string','test'];F=function(){return e;};return F();}function S(c,N){c=c-0xbc;const H=F();let d=H[c];return d;}import{ValidationError}from'../../../errors.js';export{readableFields,writableData,fieldColumn}from'./sql.js';const validateInputData=({resource:c,data:N,update:update=![]})=>{const U=S;for(const [H,d]of Object['entries'](c['fields'])){if(d[U(0xbc)]&&d[U(0xbd)]!==![]&&(N[H]===undefined||N[H]===null)&&!update)throw new ValidationError('Required\x20field:\x20'+H);if(d['required']&&d['writable']!==![]&&Object[U(0xbe)](N,H)&&(N[H]===undefined||N[H]===null)&&update)throw new ValidationError('Required\x20field:\x20'+H);if(d[U(0xbf)]&&typeof N[H]==='string'&&N[H]['length']<d['minLength'])throw new ValidationError('minLength\x20not\x20met:\x20'+H);if(d['maxLength']&&typeof N[H]==='string'&&N[H]['length']>d['maxLength'])throw new ValidationError('maxLength\x20exceeded:\x20'+H);if(d['minimum']&&typeof N[H]==='number'&&N[H]<d['minimum'])throw new ValidationError(H+'\x20should\x20be\x20>=\x20'+d['minimum']);if(d['maximum']&&typeof N[H]===U(0xc0)&&N[H]>d[U(0xc1)])throw new ValidationError(H+U(0xc2)+d['maximum']);if(d[U(0xc3)]&&N[H]&&!d['enum']['includes'](N[H]))throw new ValidationError(H+'\x20should\x20be\x20one\x20of\x20('+d['enum'][U(0xc4)](',\x20')+')');if(d[U(0xc5)]&&typeof N[H]===U(0xc6)&&!new RegExp(d['pattern'])[U(0xc7)](N[H]))throw new ValidationError(H+'\x20should\x20match\x20regular\x20expression\x20('+d['pattern']+')');}};export{validateInputData};
1
+ import{ValidationError}from'../../../errors.js';export{readableFields,writableData,fieldColumn}from'./sql.js';const validateInputData=({resource:d,data:X,update:update=![]})=>{const s=p;for(const [F,a]of Object['entries'](d['fields'])){if(a['required']&&a[s(0x152)]!==![]&&(X[F]===undefined||X[F]===null)&&!update)throw new ValidationError('Required\x20field:\x20'+F);if(a[s(0x153)]&&a['writable']!==![]&&Object[s(0x154)](X,F)&&(X[F]===undefined||X[F]===null)&&update)throw new ValidationError('Required\x20field:\x20'+F);if(a['minLength']&&typeof X[F]===s(0x155)&&X[F][s(0x156)]<a['minLength'])throw new ValidationError('minLength\x20not\x20met:\x20'+F);if(a[s(0x157)]&&typeof X[F]==='string'&&X[F]['length']>a[s(0x157)])throw new ValidationError('maxLength\x20exceeded:\x20'+F);if(a['minimum']&&typeof X[F]==='number'&&X[F]<a['minimum'])throw new ValidationError(F+'\x20should\x20be\x20>=\x20'+a[s(0x158)]);if(a['maximum']&&typeof X[F]==='number'&&X[F]>a[s(0x159)])throw new ValidationError(F+'\x20should\x20be\x20<=\x20'+a[s(0x159)]);if(a['enum']&&X[F]&&!a['enum']['includes'](X[F]))throw new ValidationError(F+s(0x15a)+a['enum'][s(0x15b)](',\x20')+')');if(a[s(0x15c)]&&typeof X[F]==='string'&&!new RegExp(a['pattern'])['test'](X[F]))throw new ValidationError(F+s(0x15d)+a['pattern']+')');}};function D(){const y=['writable','required','hasOwn','string','length','maxLength','minimum','maximum','\x20should\x20be\x20one\x20of\x20(','join','pattern','\x20should\x20match\x20regular\x20expression\x20('];D=function(){return y;};return D();}function p(d,X){d=d-0x152;const F=D();let a=F[d];return a;}export{validateInputData};
@@ -1 +1 @@
1
- const V=S;import{fieldColumn,qi}from'./sql.js';import{ValidationError}from'../../../errors.js';function F(){const q=['gte','filter','Unsupported\x20filter\x20operator:\x20','nin','fields','filterable','text','Operator\x20','table','type','null','NULL','push','=\x20ANY','length','like',')\x20like\x20lower('];F=function(){return q;};return F();}import{autoIndex}from'./auto-index.js';function S(c,N){c=c-0x1e2;const H=F();let d=H[c];return d;}const filterOperators=new Set(['eq','ne','gt',V(0x1e2),'lt','lte','in','nin','like','ilike','null']);export function parseFilterQuery(c){const T=V,N={...isRecord(c['filter'])?c[T(0x1e3)]:{}};for(const [H,d]of Object['entries'](c)){const U=/^filter\[([^\]]+)\](?:\[([^\]]+)\])?$/['exec'](H);if(!U)continue;const [,e,K]=U;if(!e)continue;if(!K){N[e]=d;continue;}if(!filterOperators['has'](K))throw new ValidationError(T(0x1e4)+K);const m=isRecord(N[e])?N[e]:{};m[K]=(K==='in'||K===T(0x1e5))&&typeof d==='string'?d['split'](','):d,N[e]=m;}return Object['keys'](N)['length']?N:undefined;}export function buildFilters(c,N,H=0x1,d){const M=V,U=[],e=[];for(const [K,m]of Object['entries'](N??{})){const D=c[M(0x1e6)][K];if(!D||D['filter']!==!![]&&D[M(0x1e7)]!==!![])throw new ValidationError('Field\x20is\x20not\x20filterable:\x20'+K);const W=qi(fieldColumn(c,K)),p=isRecord(m)?m:{'eq':m};for(const [a,I]of Object['entries'](p)){if(!filterOperators['has'](a))throw new ValidationError('Unsupported\x20filter\x20operator:\x20'+a);if((a==='like'||a==='ilike')&&D['type']!=='string'&&D['type']!==M(0x1e8))throw new ValidationError(M(0x1e9)+a+'\x20requires\x20a\x20text\x20field:\x20'+K);d&&autoIndex(c[M(0x1ea)],fieldColumn(c,K),indexTypeFor(D[M(0x1eb)],a),d);if(a===M(0x1ec)){U['push'](W+'\x20IS\x20'+(isTruthy(I)?'':'NOT\x20')+M(0x1ed));continue;}if(a==='in'||a==='nin'){const x=Array['isArray'](I)?I:[I];if(x['length']===0x0){U[M(0x1ee)](a==='in'?'FALSE':'TRUE');continue;}e['push'](x),U['push'](W+'\x20'+(a==='in'?M(0x1ef):'<>\x20ALL')+'($'+(H+e[M(0x1f0)]-0x1)+')');continue;}const r={'eq':'=','ne':'<>','gt':'>','gte':'>=','lt':'<','lte':'<=','like':M(0x1f1)},w='$'+(H+e['length']);if(a==='like'){e['push'](I+'%'),U[M(0x1ee)]('lower('+W+M(0x1f2)+w+')');continue;}e['push'](I),U[M(0x1ee)](W+'\x20'+r[a]+'\x20'+w);}}return{'sql':U[M(0x1f0)]?'\x20WHERE\x20'+U['join']('\x20AND\x20'):'','values':e};}function isRecord(c){return typeof c==='object'&&c!==null&&!Array['isArray'](c);}function isTruthy(c){return c===!![]||c==='true'||c==='1'||c===0x1;}function indexTypeFor(c,N){if(N==='like'||N==='ilike')return'text';if(c==='geom'||c==='geometry')return'gist';return'btree';}
1
+ const J=p;import{fieldColumn,qi}from'./sql.js';import{ValidationError}from'../../../errors.js';function p(d,X){d=d-0x6d;const F=D();let a=F[d];return a;}import{autoIndex}from'./auto-index.js';const filterOperators=new Set(['eq','ne','gt','gte','lt','lte','in','nin','like',J(0x6d),J(0x6e)]);export function parseFilterQuery(d){const X={...isRecord(d['filter'])?d['filter']:{}};for(const [F,a]of Object['entries'](d)){const s=/^filter\[([^\]]+)\](?:\[([^\]]+)\])?$/['exec'](F);if(!s)continue;const [,y,k]=s;if(!y)continue;if(!k){X[y]=a;continue;}if(!filterOperators['has'](k))throw new ValidationError('Unsupported\x20filter\x20operator:\x20'+k);const q=isRecord(X[y])?X[y]:{};q[k]=(k==='in'||k==='nin')&&typeof a==='string'?a['split'](','):a,X[y]=q;}return Object['keys'](X)['length']?X:undefined;}export function buildFilters(d,X,F=0x1,a){const R=J,s=[],y=[];for(const [k,q]of Object[R(0x6f)](X??{})){const f=d['fields'][k];if(!f||f[R(0x70)]!==!![]&&f['filterable']!==!![])throw new ValidationError('Field\x20is\x20not\x20filterable:\x20'+k);const G=qi(fieldColumn(d,k)),b=isRecord(q)?q:{'eq':q};for(const [H,T]of Object[R(0x6f)](b)){if(!filterOperators['has'](H))throw new ValidationError('Unsupported\x20filter\x20operator:\x20'+H);if((H===R(0x71)||H==='ilike')&&f['type']!=='string'&&f['type']!=='text')throw new ValidationError('Operator\x20'+H+'\x20requires\x20a\x20text\x20field:\x20'+k);a&&autoIndex(d[R(0x72)],fieldColumn(d,k),indexTypeFor(f['type'],H),a);if(H===R(0x6e)){s['push'](G+R(0x73)+(isTruthy(T)?'':'NOT\x20')+R(0x74));continue;}if(H==='in'||H==='nin'){const v=Array['isArray'](T)?T:[T];if(v[R(0x75)]===0x0){s['push'](H==='in'?'FALSE':'TRUE');continue;}y[R(0x76)](v),s[R(0x76)](G+'\x20'+(H==='in'?R(0x77):R(0x78))+'($'+(F+y[R(0x75)]-0x1)+')');continue;}const W={'eq':'=','ne':'<>','gt':'>','gte':'>=','lt':'<','lte':'<=','like':'like'},P='$'+(F+y['length']);if(H==='like'){y['push'](T+'%'),s['push']('lower('+G+R(0x79)+P+')');continue;}y[R(0x76)](T),s['push'](G+'\x20'+W[H]+'\x20'+P);}}return{'sql':s['length']?R(0x7a)+s['join']('\x20AND\x20'):'','values':y};}function D(){const z=['ilike','null','entries','filter','like','table','\x20IS\x20','NULL','length','push','=\x20ANY','<>\x20ALL',')\x20like\x20lower(','\x20WHERE\x20','object','isArray','geometry','btree'];D=function(){return z;};return D();}function isRecord(d){const V=J;return typeof d===V(0x7b)&&d!==null&&!Array[V(0x7c)](d);}function isTruthy(d){return d===!![]||d==='true'||d==='1'||d===0x1;}function indexTypeFor(d,X){const M=J;if(X===M(0x71)||X==='ilike')return'text';if(d==='geom'||d===M(0x7d))return'gist';return M(0x7e);}
@@ -1 +1 @@
1
- function S(c,N){c=c-0xca;const H=F();let d=H[c];return d;}import{ForbiddenError}from'../../../errors.js';import{getContext}from'../../../index.js';export function assertOperation(c,N,H){const e=S,d=getContext()['config'];if(d['debug'])return;if(!c['operations']['includes'](N))throw new ForbiddenError(c[e(0xca)]+'.'+N+'\x20is\x20disabled');if(c[e(0xcb)]!=='public'&&H===undefined)throw new ForbiddenError('Authentication\x20required');if(c['access']==='admin'&&H?.['type']!==e(0xcc))throw new ForbiddenError('Admin\x20access\x20required');if(H?.['type']!=='admin'){const U=(c['permission']??c[e(0xca)])+':'+N;if(!H?.['permissions']?.[e(0xcd)](U))throw new ForbiddenError('Missing\x20permission:\x20'+U);}}function F(){const K=['name','access','admin','includes'];F=function(){return K;};return F();}
1
+ import{ForbiddenError}from'../../../errors.js';import{getContext}from'../../../index.js';function p(d,X){d=d-0xac;const F=D();let a=F[d];return a;}export function assertOperation(d,X,F){const y=p,a=getContext()['config'];if(a['debug'])return;if(!d[y(0xac)]['includes'](X))throw new ForbiddenError(d['name']+'.'+X+'\x20is\x20disabled');if(d['access']!=='public'&&F===undefined)throw new ForbiddenError('Authentication\x20required');if(d['access']==='admin'&&F?.[y(0xad)]!=='admin')throw new ForbiddenError('Admin\x20access\x20required');if(F?.['type']!==y(0xae)){const s=(d['permission']??d['name'])+':'+X;if(!F?.['permissions']?.['includes'](s))throw new ForbiddenError('Missing\x20permission:\x20'+s);}}function D(){const k=['operations','type','admin'];D=function(){return k;};return D();}
@@ -1,6 +1,6 @@
1
1
  /**
2
2
  * Provides Resource helpers for sort handling.
3
3
  */
4
- import type { ResourceContract } from '../resource.types.js';
4
+ import type { ResourceContract } from "../resource.types.js";
5
5
  export declare function buildSort(resource: ResourceContract, sort?: string[]): string;
6
6
  //# sourceMappingURL=sort.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"sort.d.ts","sourceRoot":"","sources":["../../../../src/plugins/resource/utils/sort.ts"],"names":[],"mappings":"AAAA;;GAEG;AACH,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,sBAAsB,CAAC;AAG7D,wBAAgB,SAAS,CAAC,QAAQ,EAAE,gBAAgB,EAAE,IAAI,CAAC,EAAE,MAAM,EAAE,UAgBpE"}
1
+ {"version":3,"file":"sort.d.ts","sourceRoot":"","sources":["../../../../src/plugins/resource/utils/sort.ts"],"names":[],"mappings":"AAAA;;GAEG;AACH,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,sBAAsB,CAAC;AAG7D,wBAAgB,SAAS,CAAC,QAAQ,EAAE,gBAAgB,EAAE,IAAI,CAAC,EAAE,MAAM,EAAE,UAcpE"}
@@ -1 +1 @@
1
- import{fieldColumn,qi}from'./sql.js';import{ValidationError}from'../../../errors.js';export function buildSort(c,N){if(!N?.['length'])return'';typeof N==='string'&&(N=[N]);const H=N['map'](d=>{const U=d['startsWith']('-'),e=U?d['slice'](0x1):d,K=c['fields'][e];if(!K||K['sort']!==!![]&&K['sortable']!==!![])throw new ValidationError('Field\x20is\x20not\x20sortable:\x20'+e);return qi(fieldColumn(c,e))+'\x20'+(U?'DESC':'ASC');});return'\x20ORDER\x20BY\x20'+H['join'](',\x20');}
1
+ import{fieldColumn,qi}from'./sql.js';function p(d,X){d=d-0x14e;const F=D();let a=F[d];return a;}function D(){const f=['fields','sortable','Field\x20is\x20not\x20sortable:\x20','ASC'];D=function(){return f;};return D();}import{ValidationError}from'../../../errors.js';export function buildSort(d,X){if(!X?.['length'])return'';typeof X==='string'&&(X=[X]);const F=X['map'](a=>{const q=p,s=a['startsWith']('-'),y=s?a['slice'](0x1):a,k=d[q(0x14e)][y];if(!k||k[q(0x14f)]!==!![])throw new ValidationError(q(0x150)+y);return qi(fieldColumn(d,y))+'\x20'+(s?'DESC':q(0x151));});return'\x20ORDER\x20BY\x20'+F['join'](',\x20');}
@@ -1 +1 @@
1
- const K=S;import{ValidationError}from'../../../errors.js';function S(c,N){c=c-0xcd;const H=F();let d=H[c];return d;}function F(){const p=['replace','key','column','read','fields','entries','write'];F=function(){return p;};return F();}export const quoteIdentifier=c=>'\x22'+c[K(0xcd)](/"/g,'\x22\x22')+'\x22';export const quoteTable=c=>c['split']('.')['map'](quoteIdentifier)['join']('.');export function fieldColumn(c,N){const m=K;if(N===c['key'])return c[m(0xce)];const H=c['fields'][N];if(!H)throw new ValidationError('Unknown\x20field:\x20'+N);return H[m(0xcf)]??N;}export function readableFields(c,N){const D=K,H=Object['entries'](c['fields'])['filter'](([,d])=>d[D(0xd0)]!==![]&&d['readable']!==![]&&(N?(d['scope']??'all')===N:!![]))['map'](([d,U])=>quoteIdentifier(U['column']??d)+'\x20AS\x20'+quoteIdentifier(d));return!c[D(0xd1)][c['key']]&&H['unshift'](quoteIdentifier(c['key'])),H;}export function writableData(c,N){const W=K,H=[];for(const [d,U]of Object[W(0xd2)](N)){const e=c[W(0xd1)][d];if(!e||e['write']===![]||e['writable']===![])throw new ValidationError('Field\x20is\x20not\x20writable:\x20'+d);if((e[W(0xd3)]??e['writable'])!==!![])continue;if(e['type']==='date'&&!N[d])continue;H['push']([e[W(0xcf)]??d,U]);}return H;}export const qi=quoteIdentifier;export const qt=quoteTable;
1
+ const k=p;import{ValidationError}from'../../../errors.js';function D(){const b=['replace','split','map','join','key','fields','all','writable','date','push','column'];D=function(){return b;};return D();}export const quoteIdentifier=d=>'\x22'+d[k(0x123)](/"/g,'\x22\x22')+'\x22';export const quoteTable=d=>d[k(0x124)]('.')[k(0x125)](quoteIdentifier)[k(0x126)]('.');export function fieldColumn(d,X){const q=k;if(X===d['key'])return d[q(0x127)];const F=d[q(0x128)][X];if(!F)throw new ValidationError('Unknown\x20field:\x20'+X);return F['column']??X;}export function readableFields(d,X){const f=k,F=Object['entries'](d[f(0x128)])['filter'](([,a])=>a['read']!==![]&&a['readable']!==![]&&(X?(a['scope']??f(0x129))===X:!![]))[f(0x125)](([a,s])=>quoteIdentifier(s['column']??a)+'\x20AS\x20'+quoteIdentifier(a));return!d['fields'][d['key']]&&F['unshift'](quoteIdentifier(d['key'])),F;}export function writableData(d,X){const G=k,F=[];for(const [a,s]of Object['entries'](X)){const y=d['fields'][a];if(!y||y['write']===![]||y['writable']===![])throw new ValidationError('Field\x20is\x20not\x20writable:\x20'+a);if((y['write']??y[G(0x12a)])!==!![])continue;if(y['type']===G(0x12b)&&!X[a])continue;F[G(0x12c)]([y[G(0x12d)]??a,s]);}return F;}export const qi=quoteIdentifier;function p(d,X){d=d-0x123;const F=D();let a=F[d];return a;}export const qt=quoteTable;
@@ -1 +1 @@
1
- const N=S,getIP=c=>(c[N(0x18f)]?.['x-real-ip']||c['headers']?.[N(0x190)]||c['ip']||c['connection']?.[N(0x191)]||'')['split'](':')['pop']();function F(){const H=['headers','x-forwarded-for','remoteAddress'];F=function(){return H;};return F();}function S(c,N){c=c-0x18f;const H=F();let d=H[c];return d;}export default getIP;
1
+ const X=p,getIP=d=>(d['headers']?.['x-real-ip']||d['headers']?.[X(0x15a)]||d['ip']||d['connection']?.['remoteAddress']||'')['split'](':')['pop']();function D(){const F=['x-forwarded-for'];D=function(){return F;};return D();}function p(d,X){d=d-0x15a;const F=D();let a=F[d];return a;}export default getIP;
@@ -1,18 +1,18 @@
1
- CREATE SCHEMA IF NOT EXISTS admin;
2
-
3
- DO $$
4
- BEGIN
5
- IF to_regclass('crm.notes') IS NOT NULL
6
- AND to_regclass('admin.notes') IS NULL THEN
7
- ALTER TABLE crm.notes SET SCHEMA admin;
8
- END IF;
9
-
10
- IF to_regclass('crm.files') IS NOT NULL
11
- AND to_regclass('admin.files') IS NULL THEN
12
- ALTER TABLE crm.files SET SCHEMA admin;
13
- END IF;
14
- END
15
- $$;
16
-
17
- ALTER INDEX IF EXISTS crm_notes_resource_idx RENAME TO admin_notes_resource_idx;
1
+ CREATE SCHEMA IF NOT EXISTS admin;
2
+
3
+ DO $$
4
+ BEGIN
5
+ IF to_regclass('crm.notes') IS NOT NULL
6
+ AND to_regclass('admin.notes') IS NULL THEN
7
+ ALTER TABLE crm.notes SET SCHEMA admin;
8
+ END IF;
9
+
10
+ IF to_regclass('crm.files') IS NOT NULL
11
+ AND to_regclass('admin.files') IS NULL THEN
12
+ ALTER TABLE crm.files SET SCHEMA admin;
13
+ END IF;
14
+ END
15
+ $$;
16
+
17
+ ALTER INDEX IF EXISTS crm_notes_resource_idx RENAME TO admin_notes_resource_idx;
18
18
  ALTER INDEX IF EXISTS crm_notes_uid_idx RENAME TO admin_notes_uid_idx;
@@ -1,19 +1,19 @@
1
- CREATE SCHEMA IF NOT EXISTS admin;
2
-
3
- CREATE TABLE IF NOT EXISTS admin.settings (
4
- id text PRIMARY KEY DEFAULT next_id(),
5
- resource text NOT NULL DEFAULT 'system',
6
- resource_id text,
7
- key text NOT NULL,
8
- value jsonb,
9
- updated_by text,
10
- updated_at timestamptz NOT NULL DEFAULT now(),
11
- created_by text,
12
- created_at timestamptz NOT NULL DEFAULT now()
13
- );
14
-
15
- DROP INDEX IF EXISTS settings_resource_key_uidx;
16
-
17
- CREATE UNIQUE INDEX settings_resource_key_uidx
18
- ON admin.settings (resource, resource_id, key)
1
+ CREATE SCHEMA IF NOT EXISTS admin;
2
+
3
+ CREATE TABLE IF NOT EXISTS admin.settings (
4
+ id text PRIMARY KEY DEFAULT next_id(),
5
+ resource text NOT NULL DEFAULT 'system',
6
+ resource_id text,
7
+ key text NOT NULL,
8
+ value jsonb,
9
+ updated_by text,
10
+ updated_at timestamptz NOT NULL DEFAULT now(),
11
+ created_by text,
12
+ created_at timestamptz NOT NULL DEFAULT now()
13
+ );
14
+
15
+ DROP INDEX IF EXISTS settings_resource_key_uidx;
16
+
17
+ CREATE UNIQUE INDEX settings_resource_key_uidx
18
+ ON admin.settings (resource, resource_id, key)
19
19
  NULLS NOT DISTINCT;