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

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 (105) hide show
  1. package/dist/config.d.ts +1 -0
  2. package/dist/config.d.ts.map +1 -1
  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.d.ts.map +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.d.ts.map +1 -1
  26. package/dist/modules/file/services/upload-file.js +1 -1
  27. package/dist/modules/resource/route.d.ts.map +1 -1
  28. package/dist/modules/resource/route.js +1 -1
  29. package/dist/modules/resource/schema.d.ts +5 -0
  30. package/dist/modules/resource/schema.d.ts.map +1 -1
  31. package/dist/modules/resource/schema.js +1 -1
  32. package/dist/modules/resource/services/add-note.js +1 -1
  33. package/dist/modules/resource/services/add-resource-file.js +1 -1
  34. package/dist/modules/resource/services/create-resource-relation.js +1 -1
  35. package/dist/modules/resource/services/create-resource.js +1 -1
  36. package/dist/modules/resource/services/delete-resource-relation.js +1 -1
  37. package/dist/modules/resource/services/delete-resource.js +1 -1
  38. package/dist/modules/resource/services/export-resource.js +1 -1
  39. package/dist/modules/resource/services/get-resource.js +1 -1
  40. package/dist/modules/resource/services/list-resource-relation.js +1 -1
  41. package/dist/modules/resource/services/list-resources.js +1 -1
  42. package/dist/modules/resource/services/search-resource.js +1 -1
  43. package/dist/modules/resource/services/suggest-resource.js +1 -1
  44. package/dist/modules/resource/services/update-resource-relation.js +1 -1
  45. package/dist/modules/resource/services/update-resource.js +1 -1
  46. package/dist/modules/resource/services/upload-resource-file.js +1 -1
  47. package/dist/modules/system/route.js +1 -1
  48. package/dist/modules/system/schema.js +1 -1
  49. package/dist/modules/system/services/check-system.js +1 -1
  50. package/dist/modules/system/services/get-access.js +1 -1
  51. package/dist/modules/system/services/get-api-list.js +1 -1
  52. package/dist/modules/system/services/get-audit-log.js +1 -1
  53. package/dist/modules/system/services/get-dictionary.js +1 -1
  54. package/dist/modules/system/services/get-system-log.js +1 -1
  55. package/dist/modules/system/services/get-system-settings.js +1 -1
  56. package/dist/modules/system/services/list-dictionaries.js +1 -1
  57. package/dist/modules/system/services/set-access.js +1 -1
  58. package/dist/modules/system/services/update-dictionary.js +1 -1
  59. package/dist/modules/system/services/update-system-settings.js +1 -1
  60. package/dist/modules/utils/require-admin.js +1 -1
  61. package/dist/modules/utils/safe-user.js +1 -1
  62. package/dist/modules/utils/unsupported.js +1 -1
  63. package/dist/plugins/audit/audit.js +1 -1
  64. package/dist/plugins/audit/services/write-audit.js +1 -1
  65. package/dist/plugins/auth/get-user-permissions.js +1 -1
  66. package/dist/plugins/auth/index.d.ts.map +1 -1
  67. package/dist/plugins/auth/index.js +1 -1
  68. package/dist/plugins/auth/verifyUser.js +1 -1
  69. package/dist/plugins/dictionary.js +1 -1
  70. package/dist/plugins/file.d.ts +7 -3
  71. package/dist/plugins/file.d.ts.map +1 -1
  72. package/dist/plugins/file.js +1 -1
  73. package/dist/plugins/jwt.js +1 -1
  74. package/dist/plugins/logger/index.js +1 -1
  75. package/dist/plugins/logger/transport.js +1 -1
  76. package/dist/plugins/pg.js +1 -1
  77. package/dist/plugins/redis.d.ts.map +1 -1
  78. package/dist/plugins/redis.js +1 -1
  79. package/dist/plugins/resource/resource.js +1 -1
  80. package/dist/plugins/resource/resource.registry.js +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.d.ts.map +1 -1
  89. package/dist/plugins/resource/services/find-one.js +1 -1
  90. package/dist/plugins/resource/services/find-relation.js +1 -1
  91. package/dist/plugins/resource/services/find.d.ts.map +1 -1
  92. package/dist/plugins/resource/services/find.js +1 -1
  93. package/dist/plugins/resource/services/get-table-columns.js +1 -1
  94. package/dist/plugins/resource/services/update-relation.js +1 -1
  95. package/dist/plugins/resource/services/update.js +1 -1
  96. package/dist/plugins/resource/utils/auto-index.js +1 -1
  97. package/dist/plugins/resource/utils/fields.js +1 -1
  98. package/dist/plugins/resource/utils/filters.d.ts.map +1 -1
  99. package/dist/plugins/resource/utils/filters.js +1 -1
  100. package/dist/plugins/resource/utils/permissions.js +1 -1
  101. package/dist/plugins/resource/utils/sort.js +1 -1
  102. package/dist/plugins/resource/utils/sql.js +1 -1
  103. package/dist/plugins/resource/utils/summary.js +1 -1
  104. package/dist/shared/getIP.js +1 -1
  105. package/package.json +1 -1
@@ -1 +1 @@
1
- function W(){const p=['every','test','validate','has','name','resources','get','Resource\x20not\x20registered:\x20','values','version','entries'];W=function(){return p;};return W();}const T=n;function n(s,J){s=s-0x110;const N=W();let O=N[s];return O;}import{ValidationError,ConflictError,NotFoundError}from'../../errors.js';const ident=/^[a-zA-Z0-9_-]*$/;function validQualified(s){const O=n;return s['split']('.')['length']<=0x2&&s['split']('.')[O(0x110)](J=>ident[O(0x111)](J));}export class ResourceRegistry{['resources']=new Map();['register'](s){const E=n;for(const J of Array['isArray'](s)?s:[s]){this[E(0x112)](J);if(this['resources'][E(0x113)](J['name']))throw new ConflictError('Resource\x20already\x20registered:\x20'+J['name']);this['resources']['set'](J[E(0x114)],J);}}['has'](s){const S=n;return this[S(0x115)]['has'](s);}[T(0x116)](s){const f=T,J=this['resources']['get'](s);if(!J)throw new NotFoundError(f(0x117)+s);return J;}['list'](){const a=T;return[...this['resources'][a(0x118)]()];}['validate'](s){const g=T;if(s[g(0x119)]!==0x1||!ident['test'](s['name'])||!validQualified(s['table'])||!ident[g(0x111)](s['key']))throw new ValidationError('Invalid\x20resource\x20contract:\x20'+s['name']);for(const [J,N]of Object[g(0x11a)](s['fields'])){if(!ident[g(0x111)](J)||!ident['test'](N['column']??J))throw new ValidationError('Invalid\x20resource\x20field:\x20'+J);}}}
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 +1 @@
1
- function W(){const o=['set','color','revision','length','map','_data'];W=function(){return o;};return W();}const dictionaryIndexesCache=new WeakMap(),dictionaryRevisionsCache=new WeakMap();function n(s,J){s=s-0x9e;const N=W();let O=N[s];return O;}async function getDictionaryIndexes(s,J){const D=n,N=dictionaryIndexesCache['get'](J)??new Map(),O=dictionaryRevisionsCache['get'](J)??new Map();dictionaryIndexesCache[D(0x9e)](J,N),dictionaryRevisionsCache['set'](J,O);const E=s['filter'](T=>O['get'](T)!==J['revision'](T));if(E['length']===0x0)return N;const S=await Promise['all'](E['map'](async T=>{const R=D;if(!J['has'](T))return[T,new Map()];const f=await J['get'](T),a=new Map();for(const g of f){const p=g['code']??g['id'];if(p==null)continue;a[R(0x9e)](String(p),{'id':p,'text':g['name']??g['text'],...g[R(0x9f)]!==undefined?{'color':g[R(0x9f)]}:{},...g['icon']!==undefined?{'icon':g['icon']}:{}});}return[T,a];}));for(const [T,f]of S){N['set'](T,f),O[D(0x9e)](T,J[D(0xa0)](T));}return N;}export async function addDictionaryLookupData(s,J,N){const v=n;if(!N||s[v(0xa1)]===0x0)return s;const O=Object['entries'](J)['flatMap'](([S,T])=>{const f=T['dictionary'];return f?[{'field':S,'dictionaryName':f}]:[];});if(O['length']===0x0)return s;const E=await getDictionaryIndexes([...new Set(O[v(0xa2)](({dictionaryName:S})=>S))],N);for(const S of s){for(const {field:T,dictionaryName:f}of O){const a=S[T];S[T+v(0xa3)]=a==null?null:E['get'](f)?.['get'](String(a))??null;}}return s;}
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 +1 @@
1
- function W(){const a=['file','map','length'];W=function(){return a;};return W();}function n(s,J){s=s-0xad;const N=W();let O=N[s];return O;}export function addFileToken(s,J,N){const f=n;if(!N||s['length']===0x0)return s;const O=Object['entries'](J)['filter'](([,E])=>E['type']===f(0xad))[f(0xae)](([E])=>E);for(const E of s){for(const S of O){const T=E[S];typeof T==='string'&&T[f(0xaf)]>0x0&&(E[S]=N['create'](T));}}return s;}
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 +1 @@
1
- function n(s,J){s=s-0x8c;const N=W();let O=N[s];return O;}import{qi,qt}from'../utils/sql.js';const tableLookupCache=new WeakMap();function W(){const x=['startsWith','length','get','entries','string','number','table'];W=function(){return x;};return W();}export function clearTableLookupCache(s,J){const u=n,N=tableLookupCache['get'](J);if(!N)return;for(const O of N['keys']()){O[u(0x8c)](s+':')&&N['delete'](O);}}export async function addTableLookupData(s,J,N){const e=n;if(!N||s[e(0x8d)]===0x0)return s;const O=tableLookupCache[e(0x8e)](N)??new Map();tableLookupCache['set'](N,O);const E=Object[e(0x8f)](J)['flatMap'](([S,T])=>{const {table:f,value:value='id',text:text='name'}=T['lookup']??{};return f?[{'field':S,'table':f,'value':value,'text':text}]:[];});for(const S of E){const T=new Map();for(const p of s){const D=p[S['field']];(typeof D===e(0x90)||typeof D===e(0x91))&&T['set'](String(D),D);}const f=S['table']+':'+S['value']+':'+S['text'],a=O['get'](f)??new Map();O['set'](f,a);const g=[...T['entries']()]['filter'](([R])=>!a['has'](R))['map'](([,R])=>R);if(g['length']>0x0){const R=await N['query']('SELECT\x20'+qi(S['value'])+'\x20AS\x20id,\x20'+qi(S['text'])+'\x20AS\x20text\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20FROM\x20'+qt(S[e(0x92)])+'\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20WHERE\x20'+qi(S['value'])+'\x20=\x20ANY($1)',[g]);for(const v of R['rows']){a['set'](String(v['id']),v);}for(const o of g){!a['has'](String(o))&&a['set'](String(o),null);}}for(const i of s){const Q=i[S['field']];i[S['field']+'_data']=Q==null?null:a['get'](String(Q))??null;}}return s;}
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 +1 @@
1
- function W(){const e=['get','includes','\x22\x20requires\x20a\x20capabilities\x20\x22','query','filePath','size','gallery','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*','rows','resource','foreignKey'];W=function(){return e;};return W();}import{UnsupportedError}from'../../../errors.js';function n(s,J){s=s-0x1f3;const N=W();let O=N[s];return O;}import{createCreate}from'./create.js';export function createCreateRelation(s,J){const N=createCreate(s,J);return async function O({name:E,id:S,relation:T,data:f,user:a},g){const u=n,p=g?.['pg']??s['pg'],D=J[u(0x1f3)](E);if(['notes','files','gallery']['includes'](T)&&!D['capabilities']?.[u(0x1f4)](T))throw new UnsupportedError('Generic\x20Resource\x20relation\x20\x22'+T+u(0x1f5)+T+'\x22');if(T==='notes'){const o=await p['query']('INSERT\x20INTO\x20admin.notes(resource,resource_id,body)\x20VALUES\x20($1,$2,$3)\x20RETURNING\x20*',[E,String(S),f?.['body']]);return o['rows'][0x0];}if(T==='files'){const i=await p[u(0x1f6)]('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*',[E,String(S),f?.[u(0x1f7)],f?.[u(0x1f8)]??null]);return i['rows'][0x0];}if(T===u(0x1f9)){const Q=await p['query'](u(0x1fa),[E,String(S),f?.['filePath'],f?.[u(0x1f8)]??null,f?.['mimeType']??'image/jpeg']);return Q[u(0x1fb)][0x0];}const R=D['relations']?.[T];if(!R?.['foreignKey']||!R['resource']&&!R['table'])throw new UnsupportedError('Generic\x20Resource\x20relation\x20\x22'+T+'\x22\x20requires\x20a\x20project/provider\x20implementation');if(!f)throw new UnsupportedError('No\x20data\x20provided\x20for\x20relation:\x20'+f);if(!R[u(0x1fc)])throw new UnsupportedError('Relation\x20update\x20is\x20not\x20configured:\x20'+T);f[R[u(0x1fd)]]=S;const v=await N({'name':R[u(0x1fc)],'data':f??{},'user':a});return v;};}
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 +1 @@
1
- function n(s,J){s=s-0x1c9;const N=W();let O=N[s];return O;}import{ValidationError}from'../../../errors.js';import{assertOperation}from'../utils/permissions.js';import{qi,qt,writableData}from'../utils/sql.js';function W(){const e=['created_at','push','fields','created_by','length','No\x20writable\x20fields','INSERT\x20INTO\x20','table','key','create'];W=function(){return e;};return W();}import{validateInputData}from'../utils/fields.js';import{clearTableLookupCache}from'./add-table-lookup-data.js';export function createCreate(s,J){return async function N({name:O,data:E,user:S},T){const u=n,f=J['get'](O);assertOperation(f,'create',S),validateInputData({'resource':f,'data':E});const a=writableData(f,E);f['fields'][u(0x1c9)]&&a[u(0x1ca)]([u(0x1c9),new Date()]);f[u(0x1cb)][u(0x1cc)]&&a['push'](['created_by',S?.['id']]);if(!a[u(0x1cd)])throw new ValidationError(u(0x1ce));const g=a['map'](([i])=>qi(i)),p=a['map']((i,Q)=>'$'+(Q+0x1)),D=a['map'](([,i])=>i),R=T?.['pg']??s['pg'],v=await R['query'](u(0x1cf)+qt(f['table'])+'\x20('+g['join'](',\x20')+')\x20'+('VALUES\x20('+p['join'](',\x20')+')\x20')+'RETURNING\x20*',D),o=v['rows'][0x0];return clearTableLookupCache(f[u(0x1d0)],R),await(T?.['audit']??s['audit'])?.['write']({'userId':S?.['id'],'module':f['module'],'resource':f['name'],'resourceId':o[f[u(0x1d1)]],'action':u(0x1d2),'fields':Object['keys'](E)}),o;};}
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 +1 @@
1
- import{UnsupportedError}from'../../../errors.js';function n(s,J){s=s-0x1ca;const N=W();let O=N[s];return O;}import{createRemove}from'./delete.js';export function createDeleteRelation(s,J){const N=createRemove(s,J);return async function O({name:E,id:S,relation:T,relationId:f,user:a},g){const o=n,p=g?.['pg']??s['pg'],D=J['get'](E);if(['notes','files','gallery'][o(0x1ca)](T)&&!D['capabilities']?.[o(0x1ca)](T))throw new UnsupportedError(o(0x1cb)+T+'\x22\x20requires\x20a\x20capabilities\x20\x22'+T+'\x22');if(T==='notes')return await p['query'](o(0x1cc),[f,E,String(S)]),{'success':!![]};if(T===o(0x1cd))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',[f,E,String(S)]),{'success':!![]};if(T==='gallery')return await p['query'](o(0x1ce),[f,E,String(S)]),{'success':!![]};const R=D['relations']?.[T];if(!R?.['resource']||!R['foreignKey'])throw new UnsupportedError('Generic\x20Resource\x20relation\x20\x22'+T+'\x22\x20requires\x20a\x20project/provider\x20implementation');const v=await N({'name':R['resource'],'id':f,'user':a,'where':{'column':R['foreignKey'],'value':S}},g);return{'success':v};};}function W(){const i=['includes','Generic\x20Resource\x20relation\x20\x22','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.gallery\x20WHERE\x20id\x20=\x20$1\x20AND\x20resource\x20=\x20$2\x20AND\x20resource_id\x20=\x20$3'];W=function(){return i;};return W();}
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 +1 @@
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(s,J){return async function N({name:O,id:E,user:S,where:T},f){const v=n,a=J[v(0x174)](O);assertOperation(a,'delete',S);const g=f?.['pg']??s['pg'],p=[E];let D=v(0x175)+qi(a['key'])+v(0x176);T&&(p[v(0x177)](T['value']),D+='\x20AND\x20'+qi(T[v(0x178)])+'\x20=\x20$'+p[v(0x179)]);a['where']&&(D+='\x20AND\x20('+a['where']+')');const R=await g['query']('DELETE\x20FROM\x20'+qt(a[v(0x17a)])+'\x20'+D,p);if((R['rowCount']??0x0)>0x0)clearTableLookupCache(a['table'],g);if((R[v(0x17b)]??0x0)>0x0)await(f?.['audit']??s['audit'])?.[v(0x17c)]({'module':a[v(0x17d)],'resource':a['name'],'resourceId':E,'action':'delete'});return(R[v(0x17b)]??0x0)>0x0;};}function n(s,J){s=s-0x174;const N=W();let O=N[s];return O;}function W(){const o=['get','WHERE\x20','\x20=\x20$1','push','column','length','table','rowCount','write','module'];W=function(){return o;};return W();}
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 +1 @@
1
- {"version":3,"file":"find-one.d.ts","sourceRoot":"","sources":["../../../../src/plugins/resource/services/find-one.ts"],"names":[],"mappings":"AAAA;;GAEG;AACH,OAAO,KAAK,EACV,oBAAoB,EACpB,aAAa,EACb,YAAY,EACb,MAAM,sBAAsB,CAAC;AAK9B,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,yBAAyB,CAAC;AAMhE,wBAAgB,aAAa,CAC3B,IAAI,EAAE,oBAAoB,EAC1B,QAAQ,EAAE,gBAAgB,gCAQvB;IACD,IAAI,EAAE,MAAM,CAAC;IACb,EAAE,EAAE,MAAM,GAAG,MAAM,CAAC;IACpB,KAAK,CAAC,EAAE,aAAa,CAAC;IACtB,IAAI,CAAC,EAAE,YAAY,CAAC;CACrB,6CAoDF"}
1
+ {"version":3,"file":"find-one.d.ts","sourceRoot":"","sources":["../../../../src/plugins/resource/services/find-one.ts"],"names":[],"mappings":"AAAA;;GAEG;AACH,OAAO,KAAK,EACV,oBAAoB,EACpB,aAAa,EACb,YAAY,EACb,MAAM,sBAAsB,CAAC;AAK9B,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,yBAAyB,CAAC;AAKhE,wBAAgB,aAAa,CAC3B,IAAI,EAAE,oBAAoB,EAC1B,QAAQ,EAAE,gBAAgB,gCAQvB;IACD,IAAI,EAAE,MAAM,CAAC;IACb,EAAE,EAAE,MAAM,GAAG,MAAM,CAAC;IACpB,KAAK,CAAC,EAAE,aAAa,CAAC;IACtB,IAAI,CAAC,EAAE,YAAY,CAAC;CACrB,6CAgDF"}
@@ -1 +1 @@
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 n(s,J){s=s-0x19e;const N=W();let O=N[s];return O;}import{addTableLookupData}from'./add-table-lookup-data.js';import{addFileToken}from'./add-file-token.js';import{createFindRelation}from'./find-relation.js';function W(){const u=['now','key','Invalid\x20id:\x20','where','SELECT\x20','join','=$1','rows','fields','file','then','time'];W=function(){return u;};return W();}export function createFindOne(s,J){return async function N({name:O,id:E,query:query={},user:S}){const Q=n,T=Date[Q(0x19e)](),f=J['get'](O);assertOperation(f,'read',S);if(f['fields'][f[Q(0x19f)]]?.['type']==='integer'&&!Number['isInteger'](Number(E)))throw new ValidationError(Q(0x1a0)+E+'\x20name:'+O);const a=f['joins']?.['map'](o=>o['sql']+'\x20')['join']('\x20')||'',g=f['where']?'\x20AND\x20('+f[Q(0x1a1)]+')':'',p=await s['pg']['query'](Q(0x1a2)+readableFields(f)[Q(0x1a3)](',\x20')+'\x20FROM\x20'+qt(f['table'])+'\x20t\x20'+a+'\x20WHERE\x20'+qi(f['key'])+Q(0x1a4)+g+'\x20LIMIT\x201',[E]),D=p[Q(0x1a5)][0x0];if(!D)return null;await addDictionaryLookupData([D],f[Q(0x1a6)],s['dictionary']),await addTableLookupData([D],f[Q(0x1a6)],s['pg']),addFileToken([D],f['fields'],s[Q(0x1a7)]);const R=Array['isArray'](query['include'])?query['include']:query['include']?.['split'](',')??[],v=createFindRelation(s,J);for(const o of R){D[o]=await v({'name':O,'id':E,'relation':o,'query':query,'user':S})[Q(0x1a8)](i=>i['rows']??[]);}return D[Q(0x1a9)]=Date['now']()-T,D;};}
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 +1 @@
1
- import{UnsupportedError,ValidationError}from'../../../errors.js';function n(s,J){s=s-0x6f;const N=W();let O=N[s];return O;}function W(){const U=['now','max','isFinite','notes','files','capabilities','SELECT\x20*\x20FROM\x20admin.notes\x20WHERE\x20resource\x20=\x20$1\x20AND\x20resource_id\x20=\x20$2\x20ORDER\x20BY\x20created_at\x20DESC','rows','query','resource','fields','read','join','\x20j\x20ON\x20j.','\x20WHERE\x20','where\x20','table','dictionary','length'];W=function(){return U;};return W();}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(s,J){return async function N({name:O,id:E,relation:S,query:query={}}){const H=n,T=Date[H(0x6f)](),f=Math['min'](Math['max'](query['limit']??0x14,0x1),0xc8),a=Math[H(0x70)](query['offset']??0x0,0x0);if(!Number[H(0x71)](f)||!Number[H(0x71)](a))throw new ValidationError('Invalid\x20pagination');const g=J['get'](O),p=g['relations']?.[S];if([H(0x72),H(0x73)]['includes'](S)&&!g[H(0x74)]?.['includes'](S))throw new UnsupportedError('Generic\x20Resource\x20relation\x20\x22'+S+'\x22\x20requires\x20a\x20capabilities\x20\x22'+S+'\x22');if(S==='notes'){const G=await s['pg']['query'](H(0x75),[O,String(E)]);return{'total':G[H(0x76)]['length'],'time':Date[H(0x6f)]()-T,'rows':G[H(0x76)]};}if(S==='files'){const L=await s['pg'][H(0x77)]('SELECT\x20*\x20FROM\x20admin.files\x20WHERE\x20resource\x20=\x20$1\x20AND\x20resource_id\x20=\x20$2\x20ORDER\x20BY\x20created_at\x20DESC',[O,String(E)]);return addFileToken(L['rows'],{'file_path':{'type':'file'}},s['file']),{'total':L[H(0x76)]['length'],'time':Date['now']()-T,'rows':L['rows']};}if(!p?.[H(0x78)])throw new UnsupportedError('Generic\x20Resource\x20relation\x20\x22'+S+'\x22\x20requires\x20a\x20project/provider\x20implementation');const D=J['get'](p['resource']),R=D?.['key']??'id',v=D?.['table'],o=Object['keys'](D?.[H(0x79)]??{})['filter'](l=>D?.['fields'][l]?.[H(0x7a)]&&D?.['fields'][l]?.['scope']!=='item')['map'](qi)['join'](',\x20'),i=p['fields']?.[H(0x7b)](',\x20')||o||'*';p['foreignKey']&&autoIndex(v,p['foreignKey'],'btree',s['pg']);const Q=p['junctionTable']?'JOIN\x20'+qt(p['junctionTable'])+H(0x7c)+qi(p['junctionForeignKey'])+'\x20=\x20t.'+(p['junctionTargetKey']||qi(R))+H(0x7d)+qi(p['junctionLocalKey'])+'\x20=\x20$1\x20':H(0x7e)+(p['foreignKey']||qi(R))+'\x20=\x20(SELECT\x20'+qi(p['localKey']||g['key'])+'\x20FROM\x20'+qt(g[H(0x7f)])+'\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20WHERE\x20'+qi(g['key'])+'\x20=\x20$1\x20LIMIT\x201\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20)\x20'+(p['where']?'AND\x20('+p['where']+')':''),u=D['joins']?.['map'](l=>l['sql']+'\x20')[H(0x7b)]('\x20')||'',e='SELECT\x20'+i+'\x20FROM\x20'+qt(v)+'\x20t\x20'+u+'\x20'+Q+'\x20LIMIT\x20$2\x20OFFSET\x20$3',x=await s['pg']['query'](e,[E,f,a]);return D&&(await addDictionaryLookupData(x['rows'],D[H(0x79)],s[H(0x80)]),await addTableLookupData(x[H(0x76)],D['fields'],s['pg']),addFileToken(x[H(0x76)],D['fields'],s['file'])),{'limit':f,'offset':a,'total':x[H(0x76)][H(0x81)],'time':Date['now']()-T,'rows':x[H(0x76)]??null};};}
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 +1 @@
1
- {"version":3,"file":"find.d.ts","sourceRoot":"","sources":["../../../../src/plugins/resource/services/find.ts"],"names":[],"mappings":"AAMA,OAAO,KAAK,EACV,oBAAoB,EACpB,kBAAkB,EAClB,aAAa,EACb,YAAY,EACb,MAAM,sBAAsB,CAAC;AAK9B,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,yBAAyB,CAAC;AAOhE,wBAAgB,UAAU,CACxB,IAAI,EAAE,oBAAoB,EAC1B,QAAQ,EAAE,gBAAgB,4BAMvB;IACD,IAAI,EAAE,MAAM,CAAC;IACb,KAAK,CAAC,EAAE,aAAa,CAAC;IACtB,IAAI,CAAC,EAAE,YAAY,CAAC;CACrB,KAAG,OAAO,CAAC,kBAAkB,CAAC,CA0EhC"}
1
+ {"version":3,"file":"find.d.ts","sourceRoot":"","sources":["../../../../src/plugins/resource/services/find.ts"],"names":[],"mappings":"AAKA,OAAO,KAAK,EACV,oBAAoB,EACpB,kBAAkB,EAClB,aAAa,EACb,YAAY,EACb,MAAM,sBAAsB,CAAC;AAK9B,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,yBAAyB,CAAC;AAOhE,wBAAgB,UAAU,CACxB,IAAI,EAAE,oBAAoB,EAC1B,QAAQ,EAAE,gBAAgB,4BAMvB;IACD,IAAI,EAAE,MAAM,CAAC;IACb,KAAK,CAAC,EAAE,aAAa,CAAC;IACtB,IAAI,CAAC,EAAE,YAAY,CAAC;CACrB,KAAG,OAAO,CAAC,kBAAkB,CAAC,CAyEhC"}
@@ -1 +1 @@
1
- import{ValidationError}from'../../../errors.js';import{buildFilters,buildIndex}from'../utils/filters.js';import{assertOperation}from'../utils/permissions.js';function W(){const L=['now','get','read','max','filter','where','sql','sort','isFinite','Invalid\x20pagination','search','length','values','push','\x20WHERE\x20',')\x20LIKE\x20$','default','scopes','joins','map','join','FROM\x20','rows','rowCount','count'];W=function(){return L;};return W();}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';function n(s,J){s=s-0xd9;const N=W();let O=N[s];return O;}import{addFileToken}from'./add-file-token.js';import{autoIndex}from'../utils/auto-index.js';import{buildSummary}from'../utils/summary.js';export function createFind(s,J){return async function N({name:O,query:query={},user:E}){const G=n,S=Date[G(0xd9)](),T=J[G(0xda)](O);assertOperation(T,G(0xdb),E);const f=Math['min'](Math['max'](query['limit']??0x14,0x1),0xc8),a=Math[G(0xdc)](query['offset']??0x0,0x0);buildIndex(T,query[G(0xdd)],s['pg']);const g=buildFilters(T,query['filter']);T[G(0xde)]&&(g[G(0xdf)]+=(g['sql']?'\x20AND\x20':'\x20WHERE\x20')+('('+T['where']+')'));const p=buildSort(T,query[G(0xe0)]);if(!Number['isFinite'](f)||!Number[G(0xe1)](a))throw new ValidationError(G(0xe2));const D=T['searchable']||Object['keys'](T['fields'])['filter'](x=>T['fields'][x]?.['searchable']);query[G(0xe3)]&&D[G(0xe4)]&&(D['map'](x=>autoIndex(T['table'],x,'text',s['pg'])),g[G(0xe5)][G(0xe6)](query[G(0xe3)]['toLowerCase']()+'%'),g[G(0xdf)]+=(g[G(0xdf)]?'\x20AND\x20':G(0xe7))+('\x20('+D?.['map'](x=>'lower('+qt(x)+G(0xe8)+g['values']['length'])['join']('\x20OR\x20')+')'));if(query['scope']&&T['scopes']?.[query['scope']]===undefined)throw new ValidationError('Unknown\x20scope:\x20'+query['scope']);const R=query['scope']||(T['scopes']?.[G(0xe9)]?'default':undefined);R&&(g['sql']+=(g['sql']?'\x20AND\x20':'\x20WHERE\x20')+('('+(T[G(0xea)]?.[R]||'true')+')'));const v=T[G(0xeb)]?.['filter'](x=>x['scope']!=='item')[G(0xec)](x=>x[G(0xdf)]+'\x20')[G(0xed)]('\x20')||'',o='SELECT\x20'+readableFields(T,'all')[G(0xed)](',\x20')+'\x20'+(G(0xee)+qt(T['table'])+'\x20t\x20')+(v+'\x20'+g[G(0xdf)]['replace'](/:uid/g,'\x27'+(E?.['id']??'NULL')+'\x27')+'\x20'+p+'\x20')+('LIMIT\x20$'+(g['values']['length']+0x1)+'\x20')+('OFFSET\x20$'+(g[G(0xe5)][G(0xe4)]+0x2)),i=buildSummary(T,query,E),[Q,u]=await Promise['all']([s['pg']['query'](o,[...g[G(0xe5)],f,a]),s['pg']['query'](i,g[G(0xe5)])['then'](x=>x[G(0xef)][0x0]??{})]),e=Q[G(0xef)];return await addDictionaryLookupData(e,T['fields'],s['dictionary']),await addTableLookupData(e,T['fields'],s['pg']),addFileToken(e,T['fields'],s['file']),{'time':Date['now']()-S,'limit':f,'offset':a,'count':Q[G(0xf0)],'total':u?.[G(0xf1)]??0x0,'summary':u,'rows':e};};}
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 +1 @@
1
- export async function getTableColumns(s,J){if(!s)throw new Error('not\x20enough\x20params:\x20table');if(!J?.['pg'])return[];const N=await J['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',[s])['then'](O=>O['rows']||[]);return N;}
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 +1 @@
1
- import{UnsupportedError,ValidationError}from'../../../errors.js';import{createUpdate}from'./update.js';function W(){const o=['relations','hasOwn','resource','foreignKey'];W=function(){return o;};return W();}function n(s,J){s=s-0xbb;const N=W();let O=N[s];return O;}export function createUpdateRelation(s,J){const N=createUpdate(s,J);return async function O({name:E,id:S,relation:T,relationId:f,data:a,user:g},p){const v=n,D=J['get'](E),R=D[v(0xbb)]?.[T];if(!R?.['resource']||!R['foreignKey'])throw new UnsupportedError('Relation\x20update\x20is\x20not\x20configured:\x20'+T);if(Object[v(0xbc)](a,R['foreignKey'])&&a[R['foreignKey']]!==S)throw new ValidationError('Cannot\x20change\x20relation:\x20'+R['foreignKey']);return N({'name':R[v(0xbd)],'id':f,'data':a,'user':g,'where':{'column':R[v(0xbe)],'value':S}},p);};}
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 +1 @@
1
- import{NotFoundError,ValidationError}from'../../../errors.js';function W(){const G=['updated_at','updated_by','map','length','column','UPDATE\x20','RETURNING\x20','table','audit','module','name','update'];W=function(){return G;};return W();}function n(s,J){s=s-0xa1;const N=W();let O=N[s];return O;}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(s,J){return async function N({name:O,id:E,data:S,user:T,where:f},a){const x=n,g=J['get'](O);assertOperation(g,'update',T);const p=writableData(g,S);if(!p['length'])throw new ValidationError('No\x20writable\x20fields');const D=a?.['pg']??s['pg'];validateInputData({'resource':g,'data':S,'update':!![]});g['fields']['updated_at']&&p['push']([x(0xa1),new Date()]);g['fields'][x(0xa2)]&&p['push']([x(0xa2),T?.['id']]);delete S['user_type'];const R=p[x(0xa3)](([u],e)=>qi(u)+'\x20=\x20$'+(e+0x1)),v=[...p[x(0xa3)](([,u])=>u),E];let o='WHERE\x20'+qi(g['key'])+'\x20=\x20$'+v[x(0xa4)];f&&(v['push'](f['value']),o+='\x20AND\x20'+qi(f[x(0xa5)])+'\x20=\x20$'+v['length']);g['where']&&(o+='\x20AND\x20('+g['where']+')');const i=await D['query'](x(0xa6)+qt(g['table'])+'\x20'+('SET\x20'+R['join'](',\x20')+'\x20')+(o+'\x20')+(x(0xa7)+Object['keys'](S)['map'](qi)['join'](',\x20')),v),Q=i['rows'][0x0];if(!Q)throw new NotFoundError(O+':'+E);return clearTableLookupCache(g[x(0xa8)],D),await(a?.[x(0xa9)]??s['audit'])?.['write']({'userId':T?.['id'],'module':g[x(0xaa)],'resource':g[x(0xab)],'resourceId':E,'action':x(0xac),'fields':Object['keys'](S)}),Q;};}
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 +1 @@
1
- import{qi,qt}from'./sql.js';function W(){const p=['add','length','public','replace','query','SELECT\x201\x20FROM\x20pg_indexes\x20WHERE\x20schemaname\x20=\x20$1\x20AND\x20indexname\x20=\x20$2','CREATE\x20INDEX\x20IF\x20NOT\x20EXISTS\x20'];W=function(){return p;};return W();}const requestedIndexes=new WeakMap();function n(s,J){s=s-0x196;const N=W();let O=N[s];return O;}export function autoIndex(s,J,N='btree',O){const a=n,E=requestedIndexes['get'](O)??new Set();requestedIndexes['set'](O,E);const S=s+':'+J+':'+N;if(E['has'](S))return;E[a(0x196)](S),void ensureIndex(s,J,N,O)['catch'](()=>{E['delete'](S);});}async function ensureIndex(s,J,N,O){const g=n,E=s['split']('.'),S=E[g(0x197)]===0x2?E[0x0]:g(0x198),T=(s+'_'+J+'_'+N+'_idx')[g(0x199)](/[^A-Za-z0-9_]/g,'_'),f=await O[g(0x19a)](g(0x19b),[S,T]);if(f['rowCount'])return;if(N==='text'){await O['query']('CREATE\x20EXTENSION\x20IF\x20NOT\x20EXISTS\x20pg_trgm'),await O['query'](g(0x19c)+qi(T+'_l')+'\x20ON\x20'+qt(s)+'\x20USING\x20btree\x20(lower('+qi(J)+')\x20text_pattern_ops)'),await O['query']('CREATE\x20INDEX\x20IF\x20NOT\x20EXISTS\x20'+qi(T)+'\x20ON\x20'+qt(s)+'\x20USING\x20gin\x20(lower('+qi(J)+')\x20gin_trgm_ops)');return;}await O['query'](g(0x19c)+qi(T)+'\x20ON\x20'+qt(s)+'\x20USING\x20'+N+'\x20('+qi(J)+')');}
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 +1 @@
1
- import{ValidationError}from'../../../errors.js';function n(s,J){s=s-0x9b;const N=W();let O=N[s];return O;}export{readableFields,writableData,fieldColumn}from'./sql.js';function W(){const S=['fields','length','minLength\x20not\x20met:\x20','maxLength','maxLength\x20exceeded:\x20','\x20should\x20be\x20<=\x20','enum','string','pattern'];W=function(){return S;};return W();}const validateInputData=({resource:s,data:J,update:update=![]})=>{const E=n;for(const [N,O]of Object['entries'](s[E(0x9b)])){if(O['required']&&O['writable']!==![]&&(J[N]===undefined||J[N]===null)&&!update)throw new ValidationError('Required\x20field:\x20'+N);if(O['required']&&O['writable']!==![]&&Object['hasOwn'](J,N)&&(J[N]===undefined||J[N]===null)&&update)throw new ValidationError('Required\x20field:\x20'+N);if(O['minLength']&&typeof J[N]==='string'&&J[N][E(0x9c)]<O['minLength'])throw new ValidationError(E(0x9d)+N);if(O['maxLength']&&typeof J[N]==='string'&&J[N][E(0x9c)]>O[E(0x9e)])throw new ValidationError(E(0x9f)+N);if(O['minimum']&&typeof J[N]==='number'&&J[N]<O['minimum'])throw new ValidationError(N+'\x20should\x20be\x20>=\x20'+O['minimum']);if(O['maximum']&&typeof J[N]==='number'&&J[N]>O['maximum'])throw new ValidationError(N+E(0xa0)+O['maximum']);if(O[E(0xa1)]&&J[N]&&!O[E(0xa1)]['includes'](J[N]))throw new ValidationError(N+'\x20should\x20be\x20one\x20of\x20('+O[E(0xa1)]['join'](',\x20')+')');if(O['pattern']&&typeof J[N]===E(0xa2)&&!new RegExp(O['pattern'])['test'](J[N]))throw new ValidationError(N+'\x20should\x20match\x20regular\x20expression\x20('+O[E(0xa3)]+')');}};export{validateInputData};
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 +1 @@
1
- {"version":3,"file":"filters.d.ts","sourceRoot":"","sources":["../../../../src/plugins/resource/utils/filters.ts"],"names":[],"mappings":"AAAA;;GAEG;AACH,OAAO,KAAK,EAAE,gBAAgB,EAAE,oBAAoB,EAAE,MAAM,sBAAsB,CAAC;AASnF,wBAAgB,gBAAgB,CAAC,KAAK,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,SAAS,CA2BpG;AACD,wBAAgB,UAAU,CACtB,QAAQ,EAAE,gBAAgB,EAC1B,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,SAAS,EAC3C,EAAE,CAAC,EAAE,oBAAoB,CAAC,IAAI,CAAC,QAgBlC;AAED,wBAAgB,YAAY,CACxB,QAAQ,EAAE,gBAAgB,EAC1B,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,SAAS,EAC3C,KAAK,SAAI;;;EAwDZ"}
1
+ {"version":3,"file":"filters.d.ts","sourceRoot":"","sources":["../../../../src/plugins/resource/utils/filters.ts"],"names":[],"mappings":"AAAA;;GAEG;AACH,OAAO,KAAK,EAAE,gBAAgB,EAAE,oBAAoB,EAAE,MAAM,sBAAsB,CAAC;AASnF,wBAAgB,gBAAgB,CAAC,KAAK,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,SAAS,CA2BpG;AACD,wBAAgB,UAAU,CACtB,QAAQ,EAAE,gBAAgB,EAC1B,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,SAAS,EAC3C,EAAE,CAAC,EAAE,oBAAoB,CAAC,IAAI,CAAC,QAgBlC;AAED,wBAAgB,YAAY,CACxB,QAAQ,EAAE,gBAAgB,EAC1B,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,SAAS,EAC3C,KAAK,SAAI;;;EAuDZ"}
@@ -1 +1 @@
1
- const i=n;import{fieldColumn,qi}from'./sql.js';import{ValidationError}from'../../../errors.js';import{autoIndex}from'./auto-index.js';const filterOperators=new Set(['eq','ne','gt','gte','lt','lte','in','nin','like',i(0x1b0),'null']);export function parseFilterQuery(s){const Q=i,J={...isRecord(s['filter'])?s['filter']:{}};for(const [N,O]of Object['entries'](s)){const E=/^filter\[([^\]]+)\](?:\[([^\]]+)\])?$/['exec'](N);if(!E)continue;const [,S,T]=E;if(!S)continue;if(!T){J[S]=O;continue;}if(!filterOperators[Q(0x1b1)](T))throw new ValidationError(Q(0x1b2)+T);const f=isRecord(J[S])?J[S]:{};f[T]=(T==='in'||T===Q(0x1b3))&&typeof O===Q(0x1b4)?O['split'](','):O,J[S]=f;}return Object['keys'](J)['length']?J:undefined;}export function buildIndex(s,J,N){const u=i;for(const [O,E]of Object['entries'](J??{})){const S=s['fields'][O];if(!S||S['filter']!==!![]&&S['filterable']!==!![])throw new ValidationError(u(0x1b5)+O);N&&autoIndex(s['table'],fieldColumn(s,O),indexTypeFor(S['type'],'eq'),N);}}export function buildFilters(s,J,N=0x1){const e=i,O=[],E=[];for(const [S,T]of Object['entries'](J??{})){const f=s['fields'][S];if(!f||f['filter']!==!![]&&f[e(0x1b6)]!==!![])throw new ValidationError('Field\x20is\x20not\x20filterable:\x20'+S);const a=qi(fieldColumn(s,S)),g=isRecord(T)?T:{'eq':T};for(const [p,D]of Object['entries'](g)){if(!filterOperators['has'](p))throw new ValidationError('Unsupported\x20filter\x20operator:\x20'+p);if((p===e(0x1b7)||p===e(0x1b0))&&f['type']!=='string'&&f[e(0x1b8)]!==e(0x1b9))throw new ValidationError(e(0x1ba)+p+'\x20requires\x20a\x20text\x20field:\x20'+S);if(p===e(0x1bb)){O[e(0x1bc)](a+'\x20IS\x20'+(isTruthy(D)?'':e(0x1bd))+'NULL');continue;}if(p==='in'||p==='nin'){const o=Array['isArray'](D)?D:[D];if(o[e(0x1be)]===0x0){O['push'](p==='in'?'FALSE':'TRUE');continue;}E[e(0x1bc)](o),O['push'](a+'\x20'+(p==='in'?'=\x20ANY':'<>\x20ALL')+'($'+(N+E[e(0x1be)]-0x1)+')');continue;}const R={'eq':'=','ne':'<>','gt':'>','gte':'>=','lt':'<','lte':'<=','like':e(0x1b7)},v='$'+(N+E['length']);if(p==='like'){E[e(0x1bc)](D+'%'),O[e(0x1bc)](e(0x1bf)+a+e(0x1c0)+v+')');continue;}E['push'](D),O[e(0x1bc)](a+'\x20'+R[p]+'\x20'+v);}}return{'sql':O['length']?'\x20WHERE\x20'+O['join']('\x20AND\x20'):'','values':E};}function n(s,J){s=s-0x1b0;const N=W();let O=N[s];return O;}function isRecord(s){const x=i;return typeof s==='object'&&s!==null&&!Array[x(0x1c1)](s);}function isTruthy(s){return s===!![]||s==='true'||s==='1'||s===0x1;}function indexTypeFor(s,J){const G=i;if(J==='like'||J===G(0x1b0))return G(0x1b9);if(s==='geom'||s==='geometry')return'gist';return'btree';}function W(){const L=['ilike','has','Unsupported\x20filter\x20operator:\x20','nin','string','Field\x20is\x20not\x20filterable:\x20','filterable','like','type','text','Operator\x20','null','push','NOT\x20','length','lower(',')\x20like\x20lower(','isArray'];W=function(){return L;};return W();}
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 +1 @@
1
- import{ForbiddenError}from'../../../errors.js';import{getContext}from'../../../index.js';export function assertOperation(s,J,N){const S=n,O=getContext()['config'];if(O['debug'])return;if(!s['operations']['includes'](J))throw new ForbiddenError(s['name']+'.'+J+S(0x16c));if(s['access']!=='public'&&N===undefined)throw new ForbiddenError(S(0x16d));if(s['access']==='admin'&&N?.[S(0x16e)]!=='admin')throw new ForbiddenError('Admin\x20access\x20required');if(N?.['type']!=='admin'){const E=(s['permission']??s['name'])+':'+J;if(!N?.[S(0x16f)]?.['includes'](E))throw new ForbiddenError(S(0x170)+E);}}function n(s,J){s=s-0x16c;const N=W();let O=N[s];return O;}function W(){const T=['\x20is\x20disabled','Authentication\x20required','type','permissions','Missing\x20permission:\x20'];W=function(){return T;};return W();}
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 +1 @@
1
- import{fieldColumn,qi}from'./sql.js';function n(s,J){s=s-0x112;const N=W();let O=N[s];return O;}function W(){const a=['startsWith'];W=function(){return a;};return W();}import{ValidationError}from'../../../errors.js';export function buildSort(s,J){if(!J?.['length'])return'';typeof J==='string'&&(J=[J]);const N=J['map'](O=>{const f=n,E=O[f(0x112)]('-'),S=E?O['slice'](0x1):O,T=s['fields'][S];if(!T||T['sortable']!==!![])throw new ValidationError('Field\x20is\x20not\x20sortable:\x20'+S);return qi(fieldColumn(s,S))+'\x20'+(E?'DESC':'ASC');});return'\x20ORDER\x20BY\x20'+N['join'](',\x20');}
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 +1 @@
1
- import{ValidationError}from'../../../errors.js';export const quoteIdentifier=s=>'\x22'+s['replace'](/"/g,'\x22\x22')+'\x22';function n(s,J){s=s-0x161;const N=W();let O=N[s];return O;}export const quoteTable=s=>s['split']('.')['map'](quoteIdentifier)['join']('.');function W(){const g=['key','fields','scope','all','map','push'];W=function(){return g;};return W();}export function fieldColumn(s,J){const T=n;if(J===s[T(0x161)])return s[T(0x161)];const N=s[T(0x162)][J];if(!N)throw new ValidationError('Unknown\x20field:\x20'+J);return N['column']??J;}export function readableFields(s,J){const f=n,N=Object['entries'](s['fields'])['filter'](([,O])=>O['read']!==![]&&O['readable']!==![]&&(J?(O[f(0x163)]??f(0x164))===J:!![]))[f(0x165)](([O,E])=>quoteIdentifier(E['column']??O)+'\x20AS\x20'+quoteIdentifier(O));return!s[f(0x162)][s['key']]&&N['unshift'](quoteIdentifier(s['key'])),N;}export function writableData(s,J){const a=n,N=[];for(const [O,E]of Object['entries'](J)){const S=s[a(0x162)][O];if(!S||S['write']===![]||S['writable']===![])throw new ValidationError('Field\x20is\x20not\x20writable:\x20'+O);if((S['write']??S['writable'])!==!![])continue;if(S['type']==='date'&&!J[O])continue;N[a(0x166)]([S['column']??O,E]);}return N;}export const qi=quoteIdentifier;export const qt=quoteTable;
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 +1 @@
1
- function n(s,J){s=s-0x1c2;const N=W();let O=N[s];return O;}const D=n;function W(){const o=['count','sql','(COUNT(*)\x20FILTER\x20(where\x20','where','countDistinct','(COUNT(DISTINCT\x20t.','true',')\x20AS\x20\x22','scopes','filter','FROM\x20','\x20t\x20'];W=function(){return o;};return W();}import{buildFilters}from'./filters.js';import{qt}from'./sql.js';const defaultSummary={'count':{'aggregate':D(0x1c2)}};export function buildSummary(s,J,N){const v=D,O={...defaultSummary,...s['summary']??{}},E=Object['entries'](O)['map'](([g,p])=>{const R=n;if('sql'in p)return'('+p[R(0x1c3)]+')\x20AS\x20\x22'+g+'\x22';switch(p['aggregate']){case R(0x1c2):return R(0x1c4)+(p[R(0x1c5)]??'true')+'))::int\x20AS\x20\x22'+g+'\x22';case R(0x1c6):return R(0x1c7)+qt(p['field'])+')\x20FILTER\x20(where\x20'+(p['where']??R(0x1c8))+'))::int\x20AS\x20\x22'+g+'\x22';case'sum':return'SUM('+p['field']+')\x20FILTER\x20(where\x20'+(p[R(0x1c5)]??R(0x1c8))+R(0x1c9)+g+'\x22';case'avg':return'AVG('+p['field']+')\x20FILTER\x20(where\x20'+(p[R(0x1c5)]??'true')+R(0x1c9)+g+'\x22';case'min':return'MIN('+p['field']+')\x20FILTER\x20(where\x20'+(p[R(0x1c5)]??'true')+')\x20AS\x20\x22'+g+'\x22';case'max':return'MAX('+p['field']+')\x20FILTER\x20(where\x20'+(p[R(0x1c5)]??'true')+R(0x1c9)+g+'\x22';}}),S=buildFilters(s,J['filter']);s['where']&&(S['sql']+=(S[v(0x1c3)]?'\x20AND\x20':'\x20WHERE\x20')+('('+s[v(0x1c5)]+')'));const T=J['scope']||(s['scopes']?.['default']?'default':undefined);T&&(S['sql']+=(S['sql']?'\x20AND\x20':'\x20WHERE\x20')+('('+(s[v(0x1ca)]?.[T]||'true')+')'));const f=s['joins']?.[v(0x1cb)](g=>g['scope']!=='item')['map'](g=>g[v(0x1c3)]+'\x20')['join']('\x20')||'',a='SELECT\x20'+E['join'](',\x20')+'\x20'+(v(0x1cc)+qt(s['table'])+v(0x1cd))+(f+'\x20'+S[v(0x1c3)]['replace'](/:uid/g,'\x27'+(N?.['id']??'NULL')+'\x27'));return a;}
1
+ import{buildFilters}from'./filters.js';import{qt}from'./sql.js';const defaultSummary={'count':{'aggregate':'count'}};export function buildSummary(w,y,d){const K=Y,Z={...defaultSummary,...w['summary']??{}},M=Object[K(0x75)](Z)[K(0x76)](([n,t])=>{const T=K;if('sql'in t)return'('+t[T(0x77)]+')\x20AS\x20\x22'+n+'\x22';switch(t['aggregate']){case T(0x78):return'(COUNT(*)\x20FILTER\x20(where\x20'+(t['where']??T(0x79))+'))::int\x20AS\x20\x22'+n+'\x22';case T(0x7a):return T(0x7b)+qt(t['field'])+T(0x7c)+(t['where']??'true')+'))::int\x20AS\x20\x22'+n+'\x22';case'sum':return'SUM('+t[T(0x7d)]+T(0x7c)+(t[T(0x7e)]??'true')+')\x20AS\x20\x22'+n+'\x22';case T(0x7f):return'AVG('+t['field']+T(0x7c)+(t['where']??'true')+')\x20AS\x20\x22'+n+'\x22';case'min':return'MIN('+t['field']+')\x20FILTER\x20(where\x20'+(t[T(0x7e)]??T(0x79))+')\x20AS\x20\x22'+n+'\x22';case'max':return'MAX('+t['field']+')\x20FILTER\x20(where\x20'+(t['where']??'true')+')\x20AS\x20\x22'+n+'\x22';}}),H=buildFilters(w,y['filter']);w[K(0x7e)]&&(H['sql']+=(H['sql']?'\x20AND\x20':'\x20WHERE\x20')+('('+w['where']+')'));const Q=y[K(0x80)]||(w['scopes']?.[K(0x81)]?'default':undefined);Q&&(H['sql']+=(H['sql']?'\x20AND\x20':'\x20WHERE\x20')+('('+(w['scopes']?.[Q]||K(0x79))+')'));const s=w['joins']?.[K(0x82)](n=>n[K(0x80)]!=='item')['map'](n=>n['sql']+'\x20')['join']('\x20')||'',j='SELECT\x20'+M['join'](',\x20')+'\x20'+(K(0x83)+qt(w['table'])+K(0x84))+(s+'\x20'+H['sql'][K(0x85)](/:uid/g,'\x27'+(d?.['id']??'NULL')+'\x27'));return j;}function Y(w,y){w=w-0x75;const d=f();let Z=d[w];return Z;}function f(){const h=['entries','map','sql','count','true','countDistinct','(COUNT(DISTINCT\x20t.',')\x20FILTER\x20(where\x20','field','where','avg','scope','default','filter','FROM\x20','\x20t\x20','replace'];f=function(){return h;};return f();}
@@ -1 +1 @@
1
- function W(){const N=['headers'];W=function(){return N;};return W();}const J=n,getIP=s=>(s['headers']?.['x-real-ip']||s[J(0x9d)]?.['x-forwarded-for']||s['ip']||s['connection']?.['remoteAddress']||'')['split'](':')['pop']();function n(s,J){s=s-0x9d;const N=W();let O=N[s];return O;}export default getIP;
1
+ const y=Y,getIP=w=>(w['headers']?.['x-real-ip']||w['headers']?.['x-forwarded-for']||w['ip']||w['connection']?.['remoteAddress']||'')['split'](':')[y(0x132)]();function Y(w,y){w=w-0x132;const d=f();let Z=d[w];return Z;}function f(){const d=['pop'];f=function(){return d;};return f();}export default getIP;
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@opengis/fcore",
3
- "version": "0.0.1-beta.24",
3
+ "version": "0.0.1-beta.25",
4
4
  "description": "Reusable backend foundation for OpenGIS Node.js applications",
5
5
  "type": "module",
6
6
  "main": "./dist/index.js",