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

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 (113) 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.d.ts +1 -0
  28. package/dist/modules/resource/schema.d.ts.map +1 -1
  29. package/dist/modules/resource/schema.js +1 -1
  30. package/dist/modules/resource/services/add-note.js +1 -1
  31. package/dist/modules/resource/services/add-resource-file.js +1 -1
  32. package/dist/modules/resource/services/create-resource-relation.js +1 -1
  33. package/dist/modules/resource/services/create-resource.js +1 -1
  34. package/dist/modules/resource/services/delete-resource-relation.js +1 -1
  35. package/dist/modules/resource/services/delete-resource.js +1 -1
  36. package/dist/modules/resource/services/export-resource.js +1 -1
  37. package/dist/modules/resource/services/get-resource.js +1 -1
  38. package/dist/modules/resource/services/list-resource-relation.js +1 -1
  39. package/dist/modules/resource/services/list-resources.d.ts.map +1 -1
  40. package/dist/modules/resource/services/list-resources.js +1 -1
  41. package/dist/modules/resource/services/search-resource.js +1 -1
  42. package/dist/modules/resource/services/suggest-resource.js +1 -1
  43. package/dist/modules/resource/services/update-resource-relation.js +1 -1
  44. package/dist/modules/resource/services/update-resource.js +1 -1
  45. package/dist/modules/resource/services/upload-resource-file.js +1 -1
  46. package/dist/modules/system/route.js +1 -1
  47. package/dist/modules/system/schema.js +1 -1
  48. package/dist/modules/system/services/check-system.js +1 -1
  49. package/dist/modules/system/services/get-access.js +1 -1
  50. package/dist/modules/system/services/get-api-list.js +1 -1
  51. package/dist/modules/system/services/get-audit-log.js +1 -1
  52. package/dist/modules/system/services/get-dictionary.js +1 -1
  53. package/dist/modules/system/services/get-system-log.js +1 -1
  54. package/dist/modules/system/services/get-system-settings.js +1 -1
  55. package/dist/modules/system/services/list-dictionaries.js +1 -1
  56. package/dist/modules/system/services/set-access.js +1 -1
  57. package/dist/modules/system/services/update-dictionary.js +1 -1
  58. package/dist/modules/system/services/update-system-settings.js +1 -1
  59. package/dist/modules/utils/require-admin.js +1 -1
  60. package/dist/modules/utils/safe-user.js +1 -1
  61. package/dist/modules/utils/unsupported.js +1 -1
  62. package/dist/plugins/audit/audit.js +1 -1
  63. package/dist/plugins/audit/services/write-audit.js +1 -1
  64. package/dist/plugins/auth/get-user-permissions.js +1 -1
  65. package/dist/plugins/auth/index.js +1 -1
  66. package/dist/plugins/auth/verifyUser.js +1 -1
  67. package/dist/plugins/dictionary.js +1 -1
  68. package/dist/plugins/file.js +1 -1
  69. package/dist/plugins/jwt.js +1 -1
  70. package/dist/plugins/logger/index.js +1 -1
  71. package/dist/plugins/logger/transport.js +1 -1
  72. package/dist/plugins/pg.js +1 -1
  73. package/dist/plugins/redis.js +1 -1
  74. package/dist/plugins/resource/resource.js +1 -1
  75. package/dist/plugins/resource/resource.registry.js +1 -1
  76. package/dist/plugins/resource/resource.types.d.ts +22 -0
  77. package/dist/plugins/resource/resource.types.d.ts.map +1 -1
  78. package/dist/plugins/resource/services/add-dictionary-lookup-data.js +1 -1
  79. package/dist/plugins/resource/services/add-file-token.js +1 -1
  80. package/dist/plugins/resource/services/add-table-lookup-data.js +1 -1
  81. package/dist/plugins/resource/services/create-relation.d.ts +1 -1
  82. package/dist/plugins/resource/services/create-relation.d.ts.map +1 -1
  83. package/dist/plugins/resource/services/create-relation.js +1 -1
  84. package/dist/plugins/resource/services/create.js +1 -1
  85. package/dist/plugins/resource/services/delete-relation.d.ts +1 -1
  86. package/dist/plugins/resource/services/delete-relation.d.ts.map +1 -1
  87. package/dist/plugins/resource/services/delete-relation.js +1 -1
  88. package/dist/plugins/resource/services/delete.js +1 -1
  89. package/dist/plugins/resource/services/find-one.d.ts.map +1 -1
  90. package/dist/plugins/resource/services/find-one.js +1 -1
  91. package/dist/plugins/resource/services/find-relation.d.ts.map +1 -1
  92. package/dist/plugins/resource/services/find-relation.js +1 -1
  93. package/dist/plugins/resource/services/find.d.ts.map +1 -1
  94. package/dist/plugins/resource/services/find.js +1 -1
  95. package/dist/plugins/resource/services/get-table-columns.js +1 -1
  96. package/dist/plugins/resource/services/update-relation.js +1 -1
  97. package/dist/plugins/resource/services/update.js +1 -1
  98. package/dist/plugins/resource/utils/auto-index.js +1 -1
  99. package/dist/plugins/resource/utils/fields.js +1 -1
  100. package/dist/plugins/resource/utils/filters.d.ts +2 -1
  101. package/dist/plugins/resource/utils/filters.d.ts.map +1 -1
  102. package/dist/plugins/resource/utils/filters.js +1 -1
  103. package/dist/plugins/resource/utils/permissions.js +1 -1
  104. package/dist/plugins/resource/utils/sort.js +1 -1
  105. package/dist/plugins/resource/utils/sql.js +1 -1
  106. package/dist/plugins/resource/utils/summary.d.ts +3 -0
  107. package/dist/plugins/resource/utils/summary.d.ts.map +1 -0
  108. package/dist/plugins/resource/utils/summary.js +1 -0
  109. package/dist/shared/getIP.js +1 -1
  110. package/migrations/20260903130000_move_notes_files_to_admin.sql +17 -17
  111. package/migrations/20260903140000_settings_nulls_not_distinct.sql +18 -18
  112. package/migrations/20260910170000_core_schema.sql +22 -0
  113. package/package.json +93 -93
@@ -1 +1 @@
1
- function v(){const X=['set'];v=function(){return X;};return v();}function S(i,n){i=i-0x1b9;const x=v();let N=x[i];return N;}import{Redis}from'ioredis';export function createRedis(i){const n=new Redis(i);return{'get':x=>n['get'](x),'set':(x,N,a,B)=>{const q=S;if(B)return n[q(0x1b9)](x,N,'EX',B);if(typeof a==='number')return n[q(0x1b9)](x,N,'EX',a);return n['set'](x,N);},'del':x=>n['del'](x),'delete':x=>n['del'](x),'close':()=>n['quit'](),'ping':()=>n['ping'](),'hincrby':(x,N,a)=>n['hincrby'](x,N,a),'incrby':(x,N)=>n['incrby'](x,N)};}
1
+ import{Redis}from'ioredis';function n(s,J){s=s-0x1c9;const N=W();let O=N[s];return O;}export function createRedis(s){const f=n,J=new Redis(s);return{'get':N=>J['get'](N),'set':(N,O,E,S)=>{const T=n;if(S)return J['set'](N,O,'EX',S);if(typeof E===T(0x1c9))return J['set'](N,O,'EX',E);return J['set'](N,O);},'del':N=>J['del'](N),'delete':N=>J['del'](N),'close':()=>J['quit'](),'ping':()=>J[f(0x1ca)](),'hincrby':(N,O,E)=>J[f(0x1cb)](N,O,E),'incrby':(N,O)=>J['incrby'](N,O)};}function W(){const a=['number','ping','hincrby'];W=function(){return a;};return W();}
@@ -1 +1 @@
1
- import{ResourceRegistry}from'./resource.registry.js';import{createFind}from'./services/find.js';import{createFindOne}from'./services/find-one.js';import{createCreate}from'./services/create.js';import{createUpdate}from'./services/update.js';import{createRemove}from'./services/delete.js';import{createFindRelation}from'./services/find-relation.js';import{createCreateRelation}from'./services/create-relation.js';import{createDeleteRelation}from'./services/delete-relation.js';function v(){const M=['has','list','bind'];v=function(){return M;};return v();}function S(i,n){i=i-0x1af;const x=v();let N=x[i];return N;}import{createUpdateRelation}from'./services/update-relation.js';export function createResource(i){const V=S,n=new ResourceRegistry(),x=createFind(i,n),N=createFindOne(i,n),a=createCreate(i,n),B=createUpdate(i,n),q=createRemove(i,n),X=createFindRelation(i,n),f=createCreateRelation(i,n),A=createUpdateRelation(i,n),u=createDeleteRelation(i,n);return{'register':n['register']['bind'](n),'has':n[V(0x1af)]['bind'](n),'get':n['get']['bind'](n),'list':n[V(0x1b0)][V(0x1b1)](n),'find':x,'findOne':N,'create':a,'update':B,'delete':q,'findRelation':X,'createRelation':f,'updateRelation':A,'deleteRelation':u};}
1
+ function n(s,J){s=s-0x83;const N=W();let O=N[s];return O;}import{ResourceRegistry}from'./resource.registry.js';import{createFind}from'./services/find.js';import{createFindOne}from'./services/find-one.js';import{createCreate}from'./services/create.js';import{createUpdate}from'./services/update.js';function W(){const R=['bind','get','list'];W=function(){return R;};return W();}import{createRemove}from'./services/delete.js';import{createFindRelation}from'./services/find-relation.js';import{createCreateRelation}from'./services/create-relation.js';import{createDeleteRelation}from'./services/delete-relation.js';import{createUpdateRelation}from'./services/update-relation.js';export function createResource(s){const D=n,J=new ResourceRegistry(),N=createFind(s,J),O=createFindOne(s,J),E=createCreate(s,J),S=createUpdate(s,J),T=createRemove(s,J),f=createFindRelation(s,J),a=createCreateRelation(s,J),g=createUpdateRelation(s,J),p=createDeleteRelation(s,J);return{'register':J['register'][D(0x83)](J),'has':J['has'][D(0x83)](J),'get':J[D(0x84)]['bind'](J),'list':J[D(0x85)]['bind'](J),'find':N,'findOne':O,'create':E,'update':S,'delete':T,'findRelation':f,'createRelation':a,'updateRelation':g,'deleteRelation':p};}
@@ -1 +1 @@
1
- import{ValidationError,ConflictError,NotFoundError}from'../../errors.js';const ident=/^[a-zA-Z0-9_-]*$/;function S(i,n){i=i-0x158;const x=v();let N=x[i];return N;}function v(){const A=['length','split','test','validate','resources','has','Resource\x20not\x20registered:\x20','values','table','name','entries'];v=function(){return A;};return v();}function validQualified(i){const N=S;return i['split']('.')[N(0x158)]<=0x2&&i[N(0x159)]('.')['every'](n=>ident[N(0x15a)](n));}export class ResourceRegistry{['resources']=new Map();['register'](i){const a=S;for(const n of Array['isArray'](i)?i:[i]){this[a(0x15b)](n);if(this['resources']['has'](n['name']))throw new ConflictError('Resource\x20already\x20registered:\x20'+n['name']);this[a(0x15c)]['set'](n['name'],n);}}['has'](i){const B=S;return this['resources'][B(0x15d)](i);}['get'](i){const q=S,n=this['resources']['get'](i);if(!n)throw new NotFoundError(q(0x15e)+i);return n;}['list'](){const X=S;return[...this[X(0x15c)][X(0x15f)]()];}['validate'](i){const f=S;if(i['version']!==0x1||!ident['test'](i['name'])||!validQualified(i[f(0x160)])||!ident['test'](i['key']))throw new ValidationError('Invalid\x20resource\x20contract:\x20'+i[f(0x161)]);for(const [n,x]of Object[f(0x162)](i['fields'])){if(!ident[f(0x15a)](n)||!ident[f(0x15a)](x['column']??n))throw new ValidationError('Invalid\x20resource\x20field:\x20'+n);}}}
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);}}}
@@ -8,6 +8,23 @@ import type { DictionaryPlugin } from "../dictionary.js";
8
8
  import type { FileAdapter } from "../file.js";
9
9
  import { User } from "../../context.js";
10
10
  import type { AppContext } from "../../context.js";
11
+ export type ResourceAggregate = 'count' | 'countDistinct' | 'sum' | 'avg' | 'min' | 'max';
12
+ export type ResourceSummaryItem = {
13
+ aggregate: 'count';
14
+ where?: string;
15
+ } | {
16
+ aggregate: 'countDistinct' | 'sum' | 'avg' | 'min' | 'max';
17
+ field: string;
18
+ where?: string;
19
+ } | {
20
+ sql: string;
21
+ };
22
+ interface ResourceScope {
23
+ where?: string;
24
+ fields?: string[];
25
+ sort?: string;
26
+ limit?: number;
27
+ }
11
28
  export type ResourceOperation = "read" | "create" | "update" | "delete";
12
29
  export interface ResourceJoinContract {
13
30
  scope?: "all" | "item";
@@ -70,18 +87,22 @@ export interface ResourceContract {
70
87
  relations?: Record<string, ResourceRelationContract>;
71
88
  joins?: ResourceJoinContract[];
72
89
  access?: "public" | "user" | "admin";
90
+ summary?: Record<string, ResourceSummaryItem>;
91
+ scopes?: Record<string, string | ResourceScope>;
73
92
  }
74
93
  export interface ResourceQuery {
75
94
  filter?: Record<string, unknown>;
76
95
  include?: string | string[];
77
96
  sort?: string[];
78
97
  search?: string;
98
+ scope?: string;
79
99
  limit?: number;
80
100
  offset?: number;
81
101
  fields?: string[];
82
102
  }
83
103
  export interface ResourceListResult<T = Record<string, unknown>> {
84
104
  rows: T[];
105
+ summary: Record<string, unknown>;
85
106
  limit: number;
86
107
  time: number;
87
108
  count: number | null;
@@ -160,4 +181,5 @@ export interface ResourcePlugin {
160
181
  success: boolean;
161
182
  }>;
162
183
  }
184
+ export {};
163
185
  //# sourceMappingURL=resource.types.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"resource.types.d.ts","sourceRoot":"","sources":["../../../src/plugins/resource/resource.types.ts"],"names":[],"mappings":"AAAA;;GAEG;AACH,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,UAAU,CAAC;AAChD,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,oBAAoB,CAAC;AACpD,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,mBAAmB,CAAC;AACrD,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,kBAAkB,CAAC;AACzD,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,YAAY,CAAC;AAE9C,OAAO,EAAE,IAAI,EAAE,MAAM,kBAAkB,CAAC;AACxC,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,kBAAkB,CAAC;AAEnD,MAAM,MAAM,iBAAiB,GAAG,MAAM,GAAG,QAAQ,GAAG,QAAQ,GAAG,QAAQ,CAAC;AACxE,MAAM,WAAW,oBAAoB;IACnC,KAAK,CAAC,EAAE,KAAK,GAAG,MAAM,CAAC;IACvB,GAAG,EAAE,MAAM,CAAC;CACb;AACD,MAAM,WAAW,qBAAqB;IACpC,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,IAAI,CAAC,EACH,QAAQ,GACR,QAAQ,GACR,SAAS,GACT,SAAS,GACT,MAAM,GACN,MAAM,GACN,MAAM,GACN,WAAW,GACX,MAAM,GACN,MAAM,GACN,UAAU,GACV,MAAM,CAAC;IACT,IAAI,CAAC,EAAE,OAAO,CAAC;IACf,KAAK,CAAC,EAAE,OAAO,CAAC;IAChB,QAAQ,CAAC,EAAE,OAAO,CAAC;IACnB,QAAQ,CAAC,EAAE,OAAO,CAAC;IACnB,QAAQ,CAAC,EAAE,OAAO,CAAC;IACnB,QAAQ,CAAC,EAAE,OAAO,CAAC;IACnB,UAAU,CAAC,EAAE,OAAO,CAAC;IACrB,UAAU,CAAC,EAAE,OAAO,CAAC;IACrB,QAAQ,CAAC,EAAE,OAAO,CAAC;IACnB,MAAM,CAAC,EAAE,OAAO,CAAC;IACjB,KAAK,CAAC,EAAE,KAAK,GAAG,MAAM,CAAC;IACvB,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,MAAM,CAAC,EAAE;QACP,KAAK,EAAE,MAAM,CAAC;QACd,KAAK,EAAE,MAAM,CAAC;QACd,IAAI,EAAE,MAAM,CAAC;QACb,MAAM,CAAC,EAAE,MAAM,EAAE,CAAC;KACnB,CAAC;IACF,IAAI,CAAC,EAAE,MAAM,EAAE,GAAG,MAAM,EAAE,CAAC;IAC3B,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,OAAO,CAAC,EAAE,MAAM,CAAC;CAClB;AACD,MAAM,WAAW,wBAAwB;IACvC,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,MAAM,CAAC,EAAE,MAAM,EAAE,CAAC;IAClB,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB,gBAAgB,CAAC,EAAE,MAAM,CAAC;IAC1B,kBAAkB,CAAC,EAAE,MAAM,CAAC;IAC5B,iBAAiB,CAAC,EAAE,MAAM,CAAC;CAC5B;AACD,MAAM,WAAW,gBAAgB;IAC/B,OAAO,EAAE,CAAC,CAAC;IACX,IAAI,EAAE,MAAM,CAAC;IACb,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,KAAK,EAAE,MAAM,CAAC;IACd,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,GAAG,EAAE,MAAM,CAAC;IACZ,UAAU,EAAE,iBAAiB,EAAE,CAAC;IAChC,UAAU,CAAC,EAAE,MAAM,EAAE,CAAC;IACtB,YAAY,CAAC,EAAE,MAAM,EAAE,CAAC;IACxB,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,qBAAqB,CAAC,CAAC;IAC9C,SAAS,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,wBAAwB,CAAC,CAAC;IACrD,KAAK,CAAC,EAAE,oBAAoB,EAAE,CAAC;IAC/B,MAAM,CAAC,EAAE,QAAQ,GAAG,MAAM,GAAG,OAAO,CAAC;CACtC;AACD,MAAM,WAAW,aAAa;IAC5B,MAAM,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;IACjC,OAAO,CAAC,EAAE,MAAM,GAAG,MAAM,EAAE,CAAC;IAC5B,IAAI,CAAC,EAAE,MAAM,EAAE,CAAC;IAChB,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,MAAM,CAAC,EAAE,MAAM,EAAE,CAAC;CACnB;AACD,MAAM,WAAW,kBAAkB,CAAC,CAAC,GAAG,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC;IAC7D,IAAI,EAAE,CAAC,EAAE,CAAC;IACV,KAAK,EAAE,MAAM,CAAC;IACd,IAAI,EAAE,MAAM,CAAC;IACb,KAAK,EAAE,MAAM,GAAG,IAAI,CAAC;IACrB,KAAK,EAAE,MAAM,GAAG,IAAI,CAAC;IACrB,MAAM,EAAE,MAAM,CAAC;CAChB;AACD,MAAM,MAAM,YAAY,GAAG,IAAI,CAAC;AAChC,MAAM,WAAW,oBAAoB;IACnC,EAAE,EAAE,eAAe,CAAC;IACpB,MAAM,CAAC,EAAE,SAAS,CAAC;IACnB,KAAK,CAAC,EAAE,WAAW,CAAC;IACpB,UAAU,CAAC,EAAE,gBAAgB,CAAC;IAC9B,IAAI,CAAC,EAAE,WAAW,CAAC;CACpB;AACD,MAAM,WAAW,cAAc;IAC7B,QAAQ,CAAC,KAAK,EAAE,gBAAgB,GAAG,gBAAgB,EAAE,GAAG,IAAI,CAAC;IAC7D,GAAG,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC;IAC3B,GAAG,CAAC,IAAI,EAAE,MAAM,GAAG,gBAAgB,CAAC;IACpC,IAAI,IAAI,gBAAgB,EAAE,CAAC;IAE3B,IAAI,CAAC,MAAM,EAAE;QACX,IAAI,EAAE,MAAM,CAAC;QACb,KAAK,CAAC,EAAE,aAAa,CAAC;QACtB,IAAI,CAAC,EAAE,YAAY,CAAC;KACrB,GAAG,OAAO,CAAC,kBAAkB,CAAC,CAAC;IAChC,OAAO,CAAC,MAAM,EAAE;QACd,IAAI,EAAE,MAAM,CAAC;QACb,EAAE,EAAE,MAAM,GAAG,MAAM,CAAC;QACpB,KAAK,CAAC,EAAE,aAAa,CAAC;QACtB,IAAI,CAAC,EAAE,YAAY,CAAC;KACrB,GAAG,OAAO,CAAC,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,IAAI,CAAC,CAAC;IAC5C,MAAM,CACJ,MAAM,EAAE;QACN,IAAI,EAAE,MAAM,CAAC;QACb,IAAI,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;QAC9B,IAAI,CAAC,EAAE,YAAY,CAAC;KACrB,EACD,GAAG,CAAC,EAAE,UAAU,GACf,OAAO,CAAC,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC,CAAC;IACpC,MAAM,CACJ,MAAM,EAAE;QACN,IAAI,EAAE,MAAM,CAAC;QACb,EAAE,EAAE,MAAM,GAAG,MAAM,CAAC;QACpB,IAAI,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;QAC9B,IAAI,CAAC,EAAE,YAAY,CAAC;KACrB,EACD,GAAG,CAAC,EAAE,UAAU,GACf,OAAO,CAAC,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC,CAAC;IACpC,MAAM,CACJ,MAAM,EAAE;QACN,IAAI,EAAE,MAAM,CAAC;QACb,EAAE,EAAE,MAAM,GAAG,MAAM,CAAC;QACpB,IAAI,CAAC,EAAE,YAAY,CAAC;KACrB,EACD,GAAG,CAAC,EAAE,UAAU,GACf,OAAO,CAAC,OAAO,CAAC,CAAC;IAEpB,YAAY,CAAC,MAAM,EAAE;QACnB,IAAI,EAAE,MAAM,CAAC;QACb,EAAE,EAAE,MAAM,GAAG,MAAM,CAAC;QACpB,QAAQ,EAAE,MAAM,CAAC;QACjB,KAAK,CAAC,EAAE,aAAa,CAAC;QACtB,IAAI,CAAC,EAAE,YAAY,CAAC;KACrB,GAAG,OAAO,CAAC,GAAG,CAAC,CAAC;IACjB,cAAc,CACZ,MAAM,EAAE;QACN,IAAI,EAAE,MAAM,CAAC;QACb,EAAE,EAAE,MAAM,GAAG,MAAM,CAAC;QACpB,QAAQ,EAAE,MAAM,CAAC;QACjB,IAAI,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;QAC/B,IAAI,CAAC,EAAE,YAAY,CAAC;KACrB,EACD,GAAG,CAAC,EAAE,UAAU,GACf,OAAO,CAAC,GAAG,CAAC,CAAC;IAChB,cAAc,CACZ,MAAM,EAAE;QACN,IAAI,EAAE,MAAM,CAAC;QACb,EAAE,EAAE,MAAM,GAAG,MAAM,CAAC;QACpB,QAAQ,EAAE,MAAM,CAAC;QACjB,UAAU,EAAE,MAAM,CAAC;QACnB,IAAI,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;QAC9B,IAAI,CAAC,EAAE,YAAY,CAAC;KACrB,EACD,GAAG,CAAC,EAAE,UAAU,GACf,OAAO,CAAC,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC,CAAC;IACpC,cAAc,CACZ,MAAM,EAAE;QACN,IAAI,EAAE,MAAM,CAAC;QACb,EAAE,EAAE,MAAM,GAAG,MAAM,CAAC;QACpB,QAAQ,EAAE,MAAM,CAAC;QACjB,UAAU,EAAE,MAAM,CAAC;QACnB,IAAI,CAAC,EAAE,YAAY,CAAC;KACrB,EACD,GAAG,CAAC,EAAE,UAAU,GACf,OAAO,CAAC;QAAE,OAAO,EAAE,OAAO,CAAA;KAAE,CAAC,CAAC;CAClC"}
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();async function getDictionaryIndexes(i,n){const V=S,x=dictionaryIndexesCache['get'](n)??new Map(),N=dictionaryRevisionsCache['get'](n)??new Map();dictionaryIndexesCache[V(0x103)](n,x),dictionaryRevisionsCache['set'](n,N);const a=i['filter'](q=>N[V(0x104)](q)!==n['revision'](q));if(a['length']===0x0)return x;const B=await Promise['all'](a[V(0x105)](async q=>{const M=V;if(!n['has'](q))return[q,new Map()];const X=await n['get'](q),f=new Map();for(const A of X){const u=A['code']??A['id'];if(u==null)continue;f[M(0x103)](String(u),{'id':u,'text':A['name']??A['text'],...A['color']!==undefined?{'color':A['color']}:{},...A['icon']!==undefined?{'icon':A['icon']}:{}});}return[q,f];}));for(const [q,X]of B){x[V(0x103)](q,X),N[V(0x103)](q,n['revision'](q));}return x;}export async function addDictionaryLookupData(i,n,x){const U=S;if(!x||i['length']===0x0)return i;const N=Object['entries'](n)['flatMap'](([B,q])=>{const X=q['dictionary'];return X?[{'field':B,'dictionaryName':X}]:[];});if(N['length']===0x0)return i;const a=await getDictionaryIndexes([...new Set(N[U(0x105)](({dictionaryName:B})=>B))],x);for(const B of i){for(const {field:q,dictionaryName:X}of N){const f=B[q];B[q+'_data']=f==null?null:a[U(0x104)](X)?.[U(0x104)](String(f))??null;}}return i;}function S(i,n){i=i-0x103;const x=v();let N=x[i];return N;}function v(){const t=['set','get','map'];v=function(){return t;};return v();}
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 +1 @@
1
- function S(i,n){i=i-0x171;const x=v();let N=x[i];return N;}function v(){const f=['file','map','string'];v=function(){return f;};return v();}export function addFileToken(i,n,x){const X=S;if(!x||i['length']===0x0)return i;const N=Object['entries'](n)['filter'](([,a])=>a['type']===X(0x171))[X(0x172)](([a])=>a);for(const a of i){for(const B of N){const q=a[B];typeof q===X(0x173)&&q['length']>0x0&&(a[B]=x['create'](q));}}return i;}
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 +1 @@
1
- import{qi,qt}from'../utils/sql.js';const tableLookupCache=new WeakMap();export function clearTableLookupCache(i,n){const p=S,x=tableLookupCache['get'](n);if(!x)return;for(const N of x['keys']()){N[p(0x123)](i+':')&&x[p(0x124)](N);}}function v(){const m=['startsWith','delete','name','field','number','set','entries','query','text','\x20AS\x20text\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20FROM\x20','table','\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20WHERE\x20','value','rows','_data'];v=function(){return m;};return v();}function S(i,n){i=i-0x123;const x=v();let N=x[i];return N;}export async function addTableLookupData(i,n,x){const O=S;if(!x||i['length']===0x0)return i;const N=tableLookupCache['get'](x)??new Map();tableLookupCache['set'](x,N);const a=Object['entries'](n)['flatMap'](([B,q])=>{const h=S,{table:X,value:value='id',text:text=h(0x125)}=q['lookup']??{};return X?[{'field':B,'table':X,'value':value,'text':text}]:[];});for(const B of a){const q=new Map();for(const u of i){const V=u[B[O(0x126)]];(typeof V==='string'||typeof V===O(0x127))&&q['set'](String(V),V);}const X=B['table']+':'+B['value']+':'+B['text'],f=N['get'](X)??new Map();N[O(0x128)](X,f);const A=[...q[O(0x129)]()]['filter'](([M])=>!f['has'](M))['map'](([,M])=>M);if(A['length']>0x0){const M=await x[O(0x12a)]('SELECT\x20'+qi(B['value'])+'\x20AS\x20id,\x20'+qi(B[O(0x12b)])+O(0x12c)+qt(B[O(0x12d)])+O(0x12e)+qi(B[O(0x12f)])+'\x20=\x20ANY($1)',[A]);for(const U of M[O(0x130)]){f['set'](String(U['id']),U);}for(const t of A){!f['has'](String(t))&&f['set'](String(t),null);}}for(const z of i){const J=z[B['field']];z[B[O(0x126)]+O(0x131)]=J==null?null:f['get'](String(J))??null;}}return i;}
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;}
@@ -11,6 +11,6 @@ type CreateRelationParams = {
11
11
  data?: Record<string, unknown>;
12
12
  user?: ResourceUser;
13
13
  };
14
- export declare function createCreateRelation(deps: ResourceDependencies, registry: ResourceRegistry): ({ name, id, relation, data, user, }: CreateRelationParams, ctx?: AppContext) => Promise<any>;
14
+ export declare function createCreateRelation(deps: ResourceDependencies, registry: ResourceRegistry): ({ name, id, relation, data, user }: CreateRelationParams, ctx?: AppContext) => Promise<any>;
15
15
  export {};
16
16
  //# sourceMappingURL=create-relation.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"create-relation.d.ts","sourceRoot":"","sources":["../../../../src/plugins/resource/services/create-relation.ts"],"names":[],"mappings":"AAAA;;GAEG;AACH,OAAO,KAAK,EAAE,oBAAoB,EAAE,YAAY,EAAE,MAAM,sBAAsB,CAAC;AAC/E,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,yBAAyB,CAAC;AAIhE,OAAO,EAAE,UAAU,EAAE,MAAM,qBAAqB,CAAC;AAEjD,KAAK,oBAAoB,GAAG;IAC1B,IAAI,EAAE,MAAM,CAAC;IACb,EAAE,EAAE,MAAM,GAAG,MAAM,CAAC;IACpB,QAAQ,EAAE,MAAM,CAAC;IACjB,IAAI,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;IAC/B,IAAI,CAAC,EAAE,YAAY,CAAC;CACrB,CAAC;AAEF,wBAAgB,oBAAoB,CAClC,IAAI,EAAE,oBAAoB,EAC1B,QAAQ,EAAE,gBAAgB,yCAIgD,oBAAoB,QAAQ,UAAU,KAAG,OAAO,CAAC,GAAG,CAAC,CA+DhI"}
1
+ {"version":3,"file":"create-relation.d.ts","sourceRoot":"","sources":["../../../../src/plugins/resource/services/create-relation.ts"],"names":[],"mappings":"AAAA;;GAEG;AACH,OAAO,KAAK,EAAE,oBAAoB,EAAE,YAAY,EAAE,MAAM,sBAAsB,CAAC;AAC/E,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,yBAAyB,CAAC;AAIhE,OAAO,EAAE,UAAU,EAAE,MAAM,qBAAqB,CAAC;AAEjD,KAAK,oBAAoB,GAAG;IAC1B,IAAI,EAAE,MAAM,CAAC;IACb,EAAE,EAAE,MAAM,GAAG,MAAM,CAAC;IACpB,QAAQ,EAAE,MAAM,CAAC;IACjB,IAAI,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;IAC/B,IAAI,CAAC,EAAE,YAAY,CAAC;CACrB,CAAC;AAEF,wBAAgB,oBAAoB,CAClC,IAAI,EAAE,oBAAoB,EAC1B,QAAQ,EAAE,gBAAgB,wCAKY,oBAAoB,QAClD,UAAU,KACf,OAAO,CAAC,GAAG,CAAC,CAyFhB"}
@@ -1 +1 @@
1
- function S(i,n){i=i-0x1a4;const x=v();let N=x[i];return N;}import{UnsupportedError}from'../../../errors.js';function v(){const p=['capabilities','Generic\x20Resource\x20relation\x20\x22','files','rows','\x22\x20requires\x20a\x20project/provider\x20implementation','resource','Relation\x20update\x20is\x20not\x20configured:\x20'];v=function(){return p;};return v();}import{createCreate}from'./create.js';export function createCreateRelation(i,n){const x=createCreate(i,n);return async function N({name:a,id:B,relation:q,data:X,user:f},A){const J=S,u=A?.['pg']??i['pg'],V=n['get'](a);if(['notes','files']['includes'](q)&&!V[J(0x1a4)]?.['includes'](q))throw new UnsupportedError(J(0x1a5)+q+'\x22\x20requires\x20a\x20capabilities\x20\x22'+q+'\x22');if(q==='notes'){const t=await u['query']('INSERT\x20INTO\x20admin.notes(resource,resource_id,body)\x20VALUES\x20($1,$2,$3)\x20RETURNING\x20*',[a,String(B),X?.['body']]);return t['rows'][0x0];}if(q===J(0x1a6)){const z=await u['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*',[a,String(B),X?.['filePath'],X?.['size']??null]);return z[J(0x1a7)][0x0];}const M=V['relations']?.[q];if(!M?.['foreignKey']||!M['resource']&&!M['table'])throw new UnsupportedError('Generic\x20Resource\x20relation\x20\x22'+q+J(0x1a8));if(!X)throw new UnsupportedError('No\x20data\x20provided\x20for\x20relation:\x20'+X);if(!M[J(0x1a9)])throw new UnsupportedError(J(0x1aa)+q);X[M['foreignKey']]=B;const U=await x({'name':M[J(0x1a9)],'data':X??{},'user':f});return U;};}
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 +1 @@
1
- function S(i,n){i=i-0x109;const x=v();let N=x[i];return N;}import{ValidationError}from'../../../errors.js';import{assertOperation}from'../utils/permissions.js';function v(){const h=['get','push','length','No\x20writable\x20fields','map','query','join','keys'];v=function(){return h;};return v();}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(i,n){return async function x({name:N,data:a,user:B},q){const p=S,X=n[p(0x109)](N);assertOperation(X,'create',B),validateInputData({'resource':X,'data':a});const f=writableData(X,a);X['fields']['created_at']&&f[p(0x10a)](['created_at',new Date()]);X['fields']['created_by']&&f['push'](['created_by',B?.['id']]);if(!f[p(0x10b)])throw new ValidationError(p(0x10c));const A=f[p(0x10d)](([z])=>qi(z)),u=f[p(0x10d)]((z,J)=>'$'+(J+0x1)),V=f['map'](([,z])=>z),M=q?.['pg']??i['pg'],U=await M[p(0x10e)]('INSERT\x20INTO\x20'+qt(X['table'])+'\x20('+A[p(0x10f)](',\x20')+')\x20'+('VALUES\x20('+u[p(0x10f)](',\x20')+')\x20')+'RETURNING\x20*',V),t=U['rows'][0x0];return clearTableLookupCache(X['table'],M),await(q?.['audit']??i['audit'])?.['write']({'userId':B?.['id'],'module':X['module'],'resource':X['name'],'resourceId':t[X['key']],'action':'create','fields':Object[p(0x110)](a)}),t;};}
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;};}
@@ -11,7 +11,7 @@ type DeleteRelationParams = {
11
11
  relationId: string | number;
12
12
  user?: ResourceUser;
13
13
  };
14
- export declare function createDeleteRelation(deps: ResourceDependencies, registry: ResourceRegistry): ({ name, id, relation, relationId, user, }: DeleteRelationParams, ctx?: AppContext) => Promise<{
14
+ export declare function createDeleteRelation(deps: ResourceDependencies, registry: ResourceRegistry): ({ name, id, relation, relationId, user }: DeleteRelationParams, ctx?: AppContext) => Promise<{
15
15
  success: boolean;
16
16
  }>;
17
17
  export {};
@@ -1 +1 @@
1
- {"version":3,"file":"delete-relation.d.ts","sourceRoot":"","sources":["../../../../src/plugins/resource/services/delete-relation.ts"],"names":[],"mappings":"AAAA;;GAEG;AACH,OAAO,KAAK,EAAE,oBAAoB,EAAE,YAAY,EAAE,MAAM,sBAAsB,CAAC;AAC/E,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,yBAAyB,CAAC;AAEhE,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,qBAAqB,CAAC;AAEtD,KAAK,oBAAoB,GAAG;IAC1B,IAAI,EAAE,MAAM,CAAC;IACb,EAAE,EAAE,MAAM,GAAG,MAAM,CAAC;IACpB,QAAQ,EAAE,MAAM,CAAC;IACjB,UAAU,EAAE,MAAM,GAAG,MAAM,CAAC;IAC5B,IAAI,CAAC,EAAE,YAAY,CAAC;CACrB,CAAC;AACF,wBAAgB,oBAAoB,CAClC,IAAI,EAAE,oBAAoB,EAC1B,QAAQ,EAAE,gBAAgB,+CAIsD,oBAAoB,QAAQ,UAAU,KAAG,OAAO,CAAC;IAAE,OAAO,EAAE,OAAO,CAAA;CAAE,CAAC,CAqCvJ"}
1
+ {"version":3,"file":"delete-relation.d.ts","sourceRoot":"","sources":["../../../../src/plugins/resource/services/delete-relation.ts"],"names":[],"mappings":"AAAA;;GAEG;AACH,OAAO,KAAK,EAAE,oBAAoB,EAAE,YAAY,EAAE,MAAM,sBAAsB,CAAC;AAC/E,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,yBAAyB,CAAC;AAEhE,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,qBAAqB,CAAC;AAEtD,KAAK,oBAAoB,GAAG;IAC1B,IAAI,EAAE,MAAM,CAAC;IACb,EAAE,EAAE,MAAM,GAAG,MAAM,CAAC;IACpB,QAAQ,EAAE,MAAM,CAAC;IACjB,UAAU,EAAE,MAAM,GAAG,MAAM,CAAC;IAC5B,IAAI,CAAC,EAAE,YAAY,CAAC;CACrB,CAAC;AACF,wBAAgB,oBAAoB,CAClC,IAAI,EAAE,oBAAoB,EAC1B,QAAQ,EAAE,gBAAgB,8CAKkB,oBAAoB,QACxD,UAAU,KACf,OAAO,CAAC;IAAE,OAAO,EAAE,OAAO,CAAA;CAAE,CAAC,CAuDjC"}
@@ -1 +1 @@
1
- function v(){const z=['query','relations','resource','foreignKey','Generic\x20Resource\x20relation\x20\x22'];v=function(){return z;};return v();}import{UnsupportedError}from'../../../errors.js';function S(i,n){i=i-0x7a;const x=v();let N=x[i];return N;}import{createRemove}from'./delete.js';export function createDeleteRelation(i,n){const x=createRemove(i,n);return async function N({name:a,id:B,relation:q,relationId:X,user:f},A){const t=S,u=A?.['pg']??i['pg'],V=n['get'](a);if(['notes','files']['includes'](q)&&!V['capabilities']?.['includes'](q))throw new UnsupportedError('Generic\x20Resource\x20relation\x20\x22'+q+'\x22\x20requires\x20a\x20capabilities\x20\x22'+q+'\x22');if(q==='notes')return await u[t(0x7a)]('DELETE\x20FROM\x20admin.notes\x20WHERE\x20note_id\x20=\x20$1\x20AND\x20resource\x20=\x20$2\x20AND\x20resource_id\x20=\x20$3',[X,a,String(B)]),{'success':!![]};if(q==='files')return await u['query']('DELETE\x20FROM\x20admin.files\x20WHERE\x20file_id\x20=\x20$1\x20AND\x20resource\x20=\x20$2\x20AND\x20resource_id\x20=\x20$3',[X,a,String(B)]),{'success':!![]};const M=V[t(0x7b)]?.[q];if(!M?.[t(0x7c)]||!M[t(0x7d)])throw new UnsupportedError(t(0x7e)+q+'\x22\x20requires\x20a\x20project/provider\x20implementation');const U=await x({'name':M['resource'],'id':X,'user':f,'where':{'column':M['foreignKey'],'value':B}},A);return{'success':U};};}
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 +1 @@
1
- function v(){const t=['delete','WHERE\x20','key','push','rowCount','name'];v=function(){return t;};return v();}import{assertOperation}from'../utils/permissions.js';function S(i,n){i=i-0x150;const x=v();let N=x[i];return N;}import{qt,qi}from'../utils/sql.js';import{clearTableLookupCache}from'./add-table-lookup-data.js';export function createRemove(i,n){return async function x({name:N,id:a,user:B,where:q},X){const U=S,f=n['get'](N);assertOperation(f,U(0x150),B);const A=X?.['pg']??i['pg'],u=[a];let V=U(0x151)+qi(f[U(0x152)])+'\x20=\x20$1';q&&(u[U(0x153)](q['value']),V+='\x20AND\x20'+qi(q['column'])+'\x20=\x20$'+u['length']);f['where']&&(V+='\x20AND\x20('+f['where']+')');const M=await A['query']('DELETE\x20FROM\x20'+qt(f['table'])+'\x20'+V,u);if((M['rowCount']??0x0)>0x0)clearTableLookupCache(f['table'],A);if((M[U(0x154)]??0x0)>0x0)await(X?.['audit']??i['audit'])?.['write']({'module':f['module'],'resource':f[U(0x155)],'resourceId':a,'action':U(0x150)});return(M[U(0x154)]??0x0)>0x0;};}
1
+ import{assertOperation}from'../utils/permissions.js';import{qt,qi}from'../utils/sql.js';import{clearTableLookupCache}from'./add-table-lookup-data.js';export function createRemove(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 +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,gCAOvB;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,6CAyHF"}
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 +1 @@
1
- import{ValidationError}from'../../../errors.js';import{assertOperation}from'../utils/permissions.js';function v(){const k=['key','integer','Invalid\x20id:\x20','joins','join','query','SELECT\x20','=$1','\x20LIMIT\x201','rows','dictionary','include','split','table','find','targetKey','\x20=\x20$1\x20LIMIT\x201\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20)','junctionTargetKey','fields','now'];v=function(){return k;};return v();}import{qt,qi,readableFields}from'../utils/sql.js';function S(i,n){i=i-0xd3;const x=v();let N=x[i];return N;}import{addDictionaryLookupData}from'./add-dictionary-lookup-data.js';import{addTableLookupData}from'./add-table-lookup-data.js';import{addFileToken}from'./add-file-token.js';import{getTableColumns}from'./get-table-columns.js';export function createFindOne(i,n){return async function x({name:N,id:a,query:query={},user:B}){const o=S,q=Date['now'](),X=n['get'](N);assertOperation(X,'read',B);if(X['fields'][X[o(0xd3)]]?.['type']===o(0xd4)&&!Number['isInteger'](Number(a)))throw new ValidationError(o(0xd5)+a+'\x20name:'+N);const f=X[o(0xd6)]?.['map'](U=>U['sql']+'\x20')[o(0xd7)]('\x20')||'',A=X['where']?'\x20AND\x20('+X['where']+')':'',u=await i['pg'][o(0xd8)](o(0xd9)+readableFields(X)['join'](',\x20')+'\x20FROM\x20'+qt(X['table'])+'\x20t\x20'+f+'\x20WHERE\x20'+qi(X[o(0xd3)])+o(0xda)+A+o(0xdb),[a]),V=u[o(0xdc)][0x0];if(!V)return null;await addDictionaryLookupData([V],X['fields'],i[o(0xdd)]),await addTableLookupData([V],X['fields'],i['pg']),addFileToken([V],X['fields'],i['file']);const M=Array['isArray'](query[o(0xde)])?query['include']:query[o(0xde)]?.[o(0xdf)](',')??[];for(const U of M){const t=X['relations']?.[U];if(!t)throw new ValidationError('Unknown\x20relation:\x20'+U);const z=!!(t?.['junctionTable']&&t['junctionLocalKey']&&t['junctionForeignKey']);if(!t?.['foreignKey']&&!z||!t['resource']&&!t['table'])throw new ValidationError('Invalid\x20relation:\x20'+U);const J=t['resource']?n['get'](t['resource']):undefined,p=t[o(0xe0)]??J['table'],h=J?.['key']??'id',O=p?await getTableColumns(p,i):[],m=J?readableFields(J)['map'](b=>''+(O[o(0xe1)](T=>T['name']===b['split']('\x20')['shift']()?.['replace'](/\"/g,''))?'t.':'')+b)['join'](',\x20'):'t.*',P=t['foreignKey']?'SELECT\x20'+m+'\x20FROM\x20'+qt(p)+'\x20t\x20WHERE\x20'+(t[o(0xe2)]||qi(h))+'\x20=\x20(\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20SELECT\x20'+qi(t['foreignKey'])+'\x20FROM\x20'+qt(X['table'])+'\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20WHERE\x20'+qi(X['key'])+o(0xe3):'SELECT\x20'+m+'\x20FROM\x20'+qt(p)+'\x20t\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20JOIN\x20'+qt(t['junctionTable'])+'\x20j\x20ON\x20j.'+qi(t['junctionForeignKey'])+'\x20=\x20t.'+(t[o(0xe4)]||qi(h))+'\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20WHERE\x20j.'+qi(t['junctionLocalKey'])+'\x20=\x20(\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20SELECT\x20'+qi(X['key'])+'\x20FROM\x20'+qt(X[o(0xe0)])+'\x20\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20WHERE\x20'+qi(X[o(0xd3)])+'\x20=\x20$1\x20LIMIT\x201\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20)',G=(await i['pg']['query'](P,[a]))['rows'];J&&(await addDictionaryLookupData(G,J[o(0xe5)],i['dictionary']),await addTableLookupData(G,J['fields'],i['pg']),addFileToken(G,J['fields'],i['file'])),V[U]=G;}return V['time']=Date[o(0xe6)]()-q,V;};}
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 +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,EACV,oBAAoB,EACpB,aAAa,EACb,YAAY,EACb,MAAM,sBAAsB,CAAC;AAC9B,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,CA6IjB"}
1
+ {"version":3,"file":"find-relation.d.ts","sourceRoot":"","sources":["../../../../src/plugins/resource/services/find-relation.ts"],"names":[],"mappings":"AAAA;;GAEG;AACH,OAAO,KAAK,EACV,oBAAoB,EACpB,aAAa,EACb,YAAY,EACb,MAAM,sBAAsB,CAAC;AAC9B,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,CA+GjB"}
@@ -1 +1 @@
1
- import{UnsupportedError,ValidationError}from'../../../errors.js';import{qi,qt}from'../utils/sql.js';function S(i,n){i=i-0xc8;const x=v();let N=x[i];return N;}import{addDictionaryLookupData}from'./add-dictionary-lookup-data.js';function v(){const o=['limit','Invalid\x20pagination','get','files','notes','now','SELECT\x20*\x20FROM\x20admin.files\x20WHERE\x20resource\x20=\x20$1\x20AND\x20resource_id\x20=\x20$2\x20ORDER\x20BY\x20created_at\x20DESC','file','junctionLocalKey','localKey','resource','Generic\x20Resource\x20relation\x20\x22','table','key','fields','foreignKey','item','where','SELECT\x20','\x20t\x20','\x20j\x20ON\x20j.','\x20=\x20t.','\x20FROM\x20','\x20=\x20(select\x20','\x20where\x20','\x20LIMIT\x20$2\x20OFFSET\x20$3','rows','length'];v=function(){return o;};return v();}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(i,n){return async function x({name:N,id:a,relation:B,query:query={}}){const T=S,q=Date['now'](),X=Math['min'](Math['max'](query[T(0xc8)]??0x14,0x1),0xc8),f=Math['max'](query['offset']??0x0,0x0);if(!Number['isFinite'](X)||!Number['isFinite'](f))throw new ValidationError(T(0xc9));const A=n[T(0xca)](N),u=A['relations']?.[B];if(['notes',T(0xcb)]['includes'](B)&&!A['capabilities']?.['includes'](B))throw new UnsupportedError('Generic\x20Resource\x20relation\x20\x22'+B+'\x22\x20requires\x20a\x20capabilities\x20\x22'+B+'\x22');if(B===T(0xcc)){const P=await i['pg']['query']('SELECT\x20*\x20FROM\x20admin.notes\x20WHERE\x20resource\x20=\x20$1\x20AND\x20resource_id\x20=\x20$2\x20ORDER\x20BY\x20created_at\x20DESC',[N,String(a)]);return{'total':P['rows']['length'],'time':Date[T(0xcd)]()-q,'rows':P['rows']};}if(B==='files'){const G=await i['pg']['query'](T(0xce),[N,String(a)]);return addFileToken(G['rows'],{'file_path':{'type':T(0xcf)}},i[T(0xcf)]),{'total':G['rows']['length'],'time':Date['now']()-q,'rows':G['rows']};}const V=!!(u?.['junctionTable']&&u[T(0xd0)]&&u['junctionForeignKey']);if(!u||!V&&!u['foreignKey']&&!u[T(0xd1)]||!u[T(0xd2)]&&!u['table'])throw new UnsupportedError(T(0xd3)+B+'\x22\x20requires\x20a\x20project/provider\x20implementation');const M=u['resource']?n['get'](u[T(0xd2)]):undefined,U=u[T(0xd4)]??M[T(0xd4)],t=M?.[T(0xd5)]??'id',z=!V&&Object['keys'](M?.[T(0xd6)]??{})['filter'](b=>M?.[T(0xd6)][b]?.['read']&&M?.['fields'][b]?.['scope']!=='item')['map'](qi)['join'](',\x20'),J=u[T(0xd6)]?.['join'](',\x20')||z||'*';u['foreignKey']&&autoIndex(U,u[T(0xd7)],'btree',i['pg']);const p=M?.['joins']?.['filter'](b=>b['scope']!==T(0xd8))['map'](b=>b['sql']+'\x20')['join']('\x20')||'',h=u['where']?'\x20AND\x20('+u[T(0xd9)]+')':'',O=(V?T(0xda)+J+'\x20FROM\x20'+qt(U)+T(0xdb)+p+'\x0a\x20\x20\x20\x20\x20\x20\x20\x20JOIN\x20'+qt(u['junctionTable'])+T(0xdc)+qi(u['junctionForeignKey'])+T(0xdd)+(u['junctionTargetKey']||qi(t))+'\x0a\x20\x20\x20\x20\x20\x20\x20\x20WHERE\x20j.'+qi(u['junctionLocalKey'])+'\x20=\x20$1'+h+'\x0a\x20\x20\x20\x20\x20\x20\x20\x20LIMIT\x20$2\x20OFFSET\x20$3':'')||(u[T(0xd7)]?'SELECT\x20'+J+'\x20FROM\x20'+qt(U)+T(0xdb)+p+'\x20WHERE\x20t.'+qi(u[T(0xd7)])+'\x20=\x20$1'+h+'\x20LIMIT\x20$2\x20OFFSET\x20$3':T(0xda)+J+T(0xde)+qt(U)+T(0xdb)+p+'\x20WHERE\x20t.'+qi(u[T(0xd7)]||t)+T(0xdf)+qi(u[T(0xd1)])+T(0xde)+qt(A['table'])+T(0xe0)+qi(A['key'])+'\x20=\x20$1\x20limit\x201)'+h+T(0xe1)),m=await i['pg']['query'](O,[a,X,f]);return M&&(await addDictionaryLookupData(m['rows'],M['fields'],i['dictionary']),await addTableLookupData(m['rows'],M['fields'],i['pg']),addFileToken(m[T(0xe2)],M[T(0xd6)],i['file'])),{'limit':X,'offset':f,'total':m['rows'][T(0xe3)],'time':Date['now']()-q,'rows':m['rows']??null};};}
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 +1 @@
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;AAMhE,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,CA8DhC"}
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 +1 @@
1
- import{ValidationError}from'../../../errors.js';import{buildFilters}from'../utils/filters.js';import{assertOperation}from'../utils/permissions.js';function v(){const m=['filter','sql','\x20AND\x20','\x20WHERE\x20','where','text','values','search','item','map','join','all','table','OFFSET\x20$','\x20t\x20','query','fields','dictionary','rows'];v=function(){return m;};return v();}import{buildSort}from'../utils/sort.js';function S(i,n){i=i-0x173;const x=v();let N=x[i];return N;}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(i,n){return async function x({name:N,query:query={},user:a}){const O=S,B=Date['now'](),q=n['get'](N);assertOperation(q,'read',a);const X=Math['min'](Math['max'](query['limit']??0x14,0x1),0xc8),f=Math['max'](query['offset']??0x0,0x0),A=buildFilters(q,query[O(0x173)],0x1,i['pg']);q['where']&&(A[O(0x174)]+=(A[O(0x174)]?O(0x175):O(0x176))+('('+q[O(0x177)]+')'));const u=buildSort(q,query['sort']);if(!Number['isFinite'](X)||!Number['isFinite'](f))throw new ValidationError('Invalid\x20pagination');const V=q['searchable']||Object['keys'](q['fields'])['filter'](h=>q['fields'][h]?.['searchable']);query['search']&&V['length']&&(V['map'](h=>autoIndex(q['table'],h,O(0x178),i['pg'])),A[O(0x179)]['push'](query[O(0x17a)]['toLowerCase']()+'%'),A['sql']+=(A['sql']?O(0x175):'\x20WHERE\x20')+('\x20('+V?.['map'](h=>'lower('+qt(h)+')\x20LIKE\x20$'+A['values']['length'])['join']('\x20OR\x20')+')'));const M=q['joins']?.['filter'](h=>h['scope']!==O(0x17b))[O(0x17c)](h=>h['sql']+'\x20')[O(0x17d)]('\x20')||'',U='SELECT\x20'+readableFields(q,O(0x17e))['join'](',\x20')+'\x20'+('FROM\x20'+qt(q[O(0x17f)])+'\x20t\x20')+(M+'\x20'+A[O(0x174)]+'\x20'+u+'\x20')+('LIMIT\x20$'+(A['values']['length']+0x1)+'\x20')+(O(0x180)+(A['values']['length']+0x2)),t='SELECT\x20COUNT(*)::int\x20AS\x20total\x20'+('FROM\x20'+qt(q[O(0x17f)])+O(0x181))+(M+'\x20'+A['sql']),[z,J]=await Promise[O(0x17e)]([i['pg']['query'](U,[...A[O(0x179)],X,f]),i['pg'][O(0x182)](t,A['values'])]),p=z['rows'];return await addDictionaryLookupData(p,q[O(0x183)],i[O(0x184)]),await addTableLookupData(p,q['fields'],i['pg']),addFileToken(p,q['fields'],i['file']),{'limit':X,'offset':f,'count':z['rowCount'],'total':J[O(0x185)][0x0]?.['total']??0x0,'time':Date['now']()-B,'rows':p};};}
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 +1 @@
1
- function S(i,n){i=i-0x93;const x=v();let N=x[i];return N;}function v(){const B=['query','then'];v=function(){return B;};return v();}export async function getTableColumns(i,n){const a=S;if(!i)throw new Error('not\x20enough\x20params:\x20table');if(!n?.['pg'])return[];const x=await n['pg'][a(0x93)]('\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',[i])[a(0x94)](N=>N['rows']||[]);return x;}
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 +1 @@
1
- import{UnsupportedError,ValidationError}from'../../../errors.js';function S(i,n){i=i-0x177;const x=v();let N=x[i];return N;}import{createUpdate}from'./update.js';function v(){const t=['get','relations','foreignKey'];v=function(){return t;};return v();}export function createUpdateRelation(i,n){const x=createUpdate(i,n);return async function N({name:a,id:B,relation:q,relationId:X,data:f,user:A},u){const U=S,V=n[U(0x177)](a),M=V[U(0x178)]?.[q];if(!M?.['resource']||!M['foreignKey'])throw new UnsupportedError('Relation\x20update\x20is\x20not\x20configured:\x20'+q);if(Object['hasOwn'](f,M['foreignKey'])&&f[M[U(0x179)]]!==B)throw new ValidationError('Cannot\x20change\x20relation:\x20'+M['foreignKey']);return x({'name':M['resource'],'id':X,'data':f,'user':A,'where':{'column':M['foreignKey'],'value':B}},u);};}
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 +1 @@
1
- function S(i,n){i=i-0xdc;const x=v();let N=x[i];return N;}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';import{clearTableLookupCache}from'./add-table-lookup-data.js';function v(){const m=['get','No\x20writable\x20fields','fields','updated_by','user_type','\x20=\x20$','\x20AND\x20','where','query','join','map'];v=function(){return m;};return v();}export function createUpdate(i,n){return async function x({name:N,id:a,data:B,user:q,where:X},f){const O=S,A=n[O(0xdc)](N);assertOperation(A,'update',q);const u=writableData(A,B);if(!u['length'])throw new ValidationError(O(0xdd));const V=f?.['pg']??i['pg'];validateInputData({'resource':A,'data':B,'update':!![]});A[O(0xde)]['updated_at']&&u['push'](['updated_at',new Date()]);A['fields']['updated_by']&&u['push']([O(0xdf),q?.['id']]);delete B[O(0xe0)];const M=u['map'](([p],h)=>qi(p)+O(0xe1)+(h+0x1)),U=[...u['map'](([,p])=>p),a];let t='WHERE\x20'+qi(A['key'])+O(0xe1)+U['length'];X&&(U['push'](X['value']),t+=O(0xe2)+qi(X['column'])+'\x20=\x20$'+U['length']);A['where']&&(t+='\x20AND\x20('+A[O(0xe3)]+')');const z=await V[O(0xe4)]('UPDATE\x20'+qt(A['table'])+'\x20'+('SET\x20'+M[O(0xe5)](',\x20')+'\x20')+(t+'\x20')+('RETURNING\x20'+Object['keys'](B)[O(0xe6)](qi)['join'](',\x20')),U),J=z['rows'][0x0];if(!J)throw new NotFoundError(N+':'+a);return clearTableLookupCache(A['table'],V),await(f?.['audit']??i['audit'])?.['write']({'userId':q?.['id'],'module':A['module'],'resource':A['name'],'resourceId':a,'action':'update','fields':Object['keys'](B)}),J;};}
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 +1 @@
1
- import{qi,qt}from'./sql.js';const requestedIndexes=new WeakMap();export function autoIndex(i,n,x='btree',N){const f=S,a=requestedIndexes['get'](N)??new Set();requestedIndexes['set'](N,a);const B=i+':'+n+':'+x;if(a[f(0xf9)](B))return;a['add'](B),void ensureIndex(i,n,x,N)[f(0xfa)](()=>{a['delete'](B);});}async function ensureIndex(i,n,x,N){const A=S,a=i['split']('.'),B=a['length']===0x2?a[0x0]:A(0xfb),q=(i+'_'+n+'_'+x+'_idx')['replace'](/[^A-Za-z0-9_]/g,'_'),X=await N['query'](A(0xfc),[B,q]);if(X['rowCount'])return;if(x==='text'){await N['query']('CREATE\x20EXTENSION\x20IF\x20NOT\x20EXISTS\x20pg_trgm'),await N['query'](A(0xfd)+qi(q+'_l')+'\x20ON\x20'+qt(i)+A(0xfe)+qi(n)+')\x20text_pattern_ops)'),await N['query'](A(0xfd)+qi(q)+A(0xff)+qt(i)+'\x20USING\x20gin\x20(lower('+qi(n)+')\x20gin_trgm_ops)');return;}await N['query'](A(0xfd)+qi(q)+'\x20ON\x20'+qt(i)+'\x20USING\x20'+x+'\x20('+qi(n)+')');}function S(i,n){i=i-0xf9;const x=v();let N=x[i];return N;}function v(){const u=['has','catch','public','SELECT\x201\x20FROM\x20pg_indexes\x20WHERE\x20schemaname\x20=\x20$1\x20AND\x20indexname\x20=\x20$2','CREATE\x20INDEX\x20IF\x20NOT\x20EXISTS\x20','\x20USING\x20btree\x20(lower(','\x20ON\x20'];v=function(){return u;};return v();}
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 +1 @@
1
- import{ValidationError}from'../../../errors.js';export{readableFields,writableData,fieldColumn}from'./sql.js';function v(){const B=['required','writable','hasOwn','string','length','\x20should\x20be\x20>=\x20','maximum','enum','test','\x20should\x20match\x20regular\x20expression\x20('];v=function(){return B;};return v();}function S(i,n){i=i-0x11b;const x=v();let N=x[i];return N;}const validateInputData=({resource:i,data:n,update:update=![]})=>{const a=S;for(const [x,N]of Object['entries'](i['fields'])){if(N['required']&&N['writable']!==![]&&(n[x]===undefined||n[x]===null)&&!update)throw new ValidationError('Required\x20field:\x20'+x);if(N[a(0x11b)]&&N[a(0x11c)]!==![]&&Object[a(0x11d)](n,x)&&(n[x]===undefined||n[x]===null)&&update)throw new ValidationError('Required\x20field:\x20'+x);if(N['minLength']&&typeof n[x]===a(0x11e)&&n[x][a(0x11f)]<N['minLength'])throw new ValidationError('minLength\x20not\x20met:\x20'+x);if(N['maxLength']&&typeof n[x]==='string'&&n[x][a(0x11f)]>N['maxLength'])throw new ValidationError('maxLength\x20exceeded:\x20'+x);if(N['minimum']&&typeof n[x]==='number'&&n[x]<N['minimum'])throw new ValidationError(x+a(0x120)+N['minimum']);if(N[a(0x121)]&&typeof n[x]==='number'&&n[x]>N['maximum'])throw new ValidationError(x+'\x20should\x20be\x20<=\x20'+N['maximum']);if(N['enum']&&n[x]&&!N['enum']['includes'](n[x]))throw new ValidationError(x+'\x20should\x20be\x20one\x20of\x20('+N[a(0x122)]['join'](',\x20')+')');if(N['pattern']&&typeof n[x]==='string'&&!new RegExp(N['pattern'])[a(0x123)](n[x]))throw new ValidationError(x+a(0x124)+N['pattern']+')');}};export{validateInputData};
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};
@@ -3,7 +3,8 @@
3
3
  */
4
4
  import type { ResourceContract, ResourceDependencies } from '../resource.types.js';
5
5
  export declare function parseFilterQuery(query: Record<string, unknown>): Record<string, unknown> | undefined;
6
- export declare function buildFilters(resource: ResourceContract, filter: Record<string, unknown> | undefined, start?: number, pg?: ResourceDependencies['pg']): {
6
+ export declare function buildIndex(resource: ResourceContract, filter: Record<string, unknown> | undefined, pg?: ResourceDependencies['pg']): void;
7
+ export declare function buildFilters(resource: ResourceContract, filter: Record<string, unknown> | undefined, start?: number): {
7
8
  sql: string;
8
9
  values: unknown[];
9
10
  };
@@ -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;AAED,wBAAgB,YAAY,CACxB,QAAQ,EAAE,gBAAgB,EAC1B,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,SAAS,EAC3C,KAAK,SAAI,EACT,EAAE,CAAC,EAAE,oBAAoB,CAAC,IAAI,CAAC;;;EAgElC"}
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 +1 @@
1
- const J=S;import{fieldColumn,qi}from'./sql.js';import{ValidationError}from'../../../errors.js';import{autoIndex}from'./auto-index.js';function S(i,n){i=i-0x13f;const x=v();let N=x[i];return N;}const filterOperators=new Set(['eq','ne','gt',J(0x13f),'lt','lte','in','nin',J(0x140),J(0x141),'null']);function v(){const P=['gte','like','ilike','filter','Unsupported\x20filter\x20operator:\x20','string','split','entries','has','\x20requires\x20a\x20text\x20field:\x20','push','<>\x20ALL','lower(',')\x20like\x20lower(','join','\x20AND\x20','object','geom','geometry'];v=function(){return P;};return v();}export function parseFilterQuery(i){const p=J,n={...isRecord(i[p(0x142)])?i['filter']:{}};for(const [x,N]of Object['entries'](i)){const a=/^filter\[([^\]]+)\](?:\[([^\]]+)\])?$/['exec'](x);if(!a)continue;const [,B,q]=a;if(!B)continue;if(!q){n[B]=N;continue;}if(!filterOperators['has'](q))throw new ValidationError(p(0x143)+q);const X=isRecord(n[B])?n[B]:{};X[q]=(q==='in'||q==='nin')&&typeof N===p(0x144)?N[p(0x145)](','):N,n[B]=X;}return Object['keys'](n)['length']?n:undefined;}export function buildFilters(i,n,x=0x1,N){const h=J,a=[],B=[];for(const [q,X]of Object['entries'](n??{})){const f=i['fields'][q];if(!f||f['filter']!==!![]&&f['filterable']!==!![])throw new ValidationError('Field\x20is\x20not\x20filterable:\x20'+q);const A=qi(fieldColumn(i,q)),u=isRecord(X)?X:{'eq':X};for(const [V,M]of Object[h(0x146)](u)){if(!filterOperators[h(0x147)](V))throw new ValidationError('Unsupported\x20filter\x20operator:\x20'+V);if((V==='like'||V==='ilike')&&f['type']!=='string'&&f['type']!=='text')throw new ValidationError('Operator\x20'+V+h(0x148)+q);N&&autoIndex(i['table'],fieldColumn(i,q),indexTypeFor(f['type'],V),N);if(V==='null'){a['push'](A+'\x20IS\x20'+(isTruthy(M)?'':'NOT\x20')+'NULL');continue;}if(V==='in'||V==='nin'){const z=Array['isArray'](M)?M:[M];if(z['length']===0x0){a['push'](V==='in'?'FALSE':'TRUE');continue;}B[h(0x149)](z),a['push'](A+'\x20'+(V==='in'?'=\x20ANY':h(0x14a))+'($'+(x+B['length']-0x1)+')');continue;}const U={'eq':'=','ne':'<>','gt':'>','gte':'>=','lt':'<','lte':'<=','like':'like'},t='$'+(x+B['length']);if(V==='like'){B['push'](M+'%'),a['push'](h(0x14b)+A+h(0x14c)+t+')');continue;}B['push'](M),a['push'](A+'\x20'+U[V]+'\x20'+t);}}return{'sql':a['length']?'\x20WHERE\x20'+a[h(0x14d)](h(0x14e)):'','values':B};}function isRecord(i){const O=J;return typeof i===O(0x14f)&&i!==null&&!Array['isArray'](i);}function isTruthy(i){return i===!![]||i==='true'||i==='1'||i===0x1;}function indexTypeFor(i,n){const m=J;if(n==='like'||n==='ilike')return'text';if(i===m(0x150)||i===m(0x151))return'gist';return'btree';}
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 +1 @@
1
- import{ForbiddenError}from'../../../errors.js';import{getContext}from'../../../index.js';function v(){const q=['public','admin','Admin\x20access\x20required','Missing\x20permission:\x20'];v=function(){return q;};return v();}function S(i,n){i=i-0x191;const x=v();let N=x[i];return N;}export function assertOperation(i,n,x){const B=S,N=getContext()['config'];if(N['debug'])return;if(!i['operations']['includes'](n))throw new ForbiddenError(i['name']+'.'+n+'\x20is\x20disabled');if(i['access']!==B(0x191)&&x===undefined)throw new ForbiddenError('Authentication\x20required');if(i['access']===B(0x192)&&x?.['type']!=='admin')throw new ForbiddenError(B(0x193));if(x?.['type']!==B(0x192)){const a=(i['permission']??i['name'])+':'+n;if(!x?.['permissions']?.['includes'](a))throw new ForbiddenError(B(0x194)+a);}}
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 +1 @@
1
- import{fieldColumn,qi}from'./sql.js';import{ValidationError}from'../../../errors.js';function v(){const A=['length','Field\x20is\x20not\x20sortable:\x20'];v=function(){return A;};return v();}function S(i,n){i=i-0x122;const x=v();let N=x[i];return N;}export function buildSort(i,n){const X=S;if(!n?.[X(0x122)])return'';typeof n==='string'&&(n=[n]);const x=n['map'](N=>{const f=X,a=N['startsWith']('-'),B=a?N['slice'](0x1):N,q=i['fields'][B];if(!q||q['sortable']!==!![])throw new ValidationError(f(0x123)+B);return qi(fieldColumn(i,B))+'\x20'+(a?'DESC':'ASC');});return'\x20ORDER\x20BY\x20'+x['join'](',\x20');}
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 +1 @@
1
- const q=S;import{ValidationError}from'../../../errors.js';export const quoteIdentifier=i=>'\x22'+i[q(0x199)](/"/g,'\x22\x22')+'\x22';export const quoteTable=i=>i[q(0x19a)]('.')['map'](quoteIdentifier)['join']('.');function v(){const A=['replace','split','key','fields','\x20AS\x20'];v=function(){return A;};return v();}function S(i,n){i=i-0x199;const x=v();let N=x[i];return N;}export function fieldColumn(i,n){const X=q;if(n===i['key'])return i[X(0x19b)];const x=i[X(0x19c)][n];if(!x)throw new ValidationError('Unknown\x20field:\x20'+n);return x['column']??n;}export function readableFields(i,n){const f=q,x=Object['entries'](i['fields'])['filter'](([,N])=>N['read']!==![]&&N['readable']!==![]&&(n?(N['scope']??'all')===n:!![]))['map'](([N,a])=>quoteIdentifier(a['column']??N)+f(0x19d)+quoteIdentifier(N));return!i['fields'][i['key']]&&x['unshift'](quoteIdentifier(i['key'])),x;}export function writableData(i,n){const x=[];for(const [N,a]of Object['entries'](n)){const B=i['fields'][N];if(!B||B['write']===![]||B['writable']===![])throw new ValidationError('Field\x20is\x20not\x20writable:\x20'+N);if((B['write']??B['writable'])!==!![])continue;if(B['type']==='date'&&!n[N])continue;x['push']([B['column']??N,a]);}return x;}export const qi=quoteIdentifier;export const qt=quoteTable;
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;
@@ -0,0 +1,3 @@
1
+ import type { ResourceContract, ResourceQuery, ResourceUser } from "../resource.types.js";
2
+ export declare function buildSummary(resource: ResourceContract, query: ResourceQuery, user?: ResourceUser): string;
3
+ //# sourceMappingURL=summary.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"summary.d.ts","sourceRoot":"","sources":["../../../../src/plugins/resource/utils/summary.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,gBAAgB,EAAE,aAAa,EAAuB,YAAY,EAAE,MAAM,sBAAsB,CAAC;AAQ/G,wBAAgB,YAAY,CAAC,QAAQ,EAAE,gBAAgB,EAAE,KAAK,EAAE,aAAa,EAAE,IAAI,CAAC,EAAE,YAAY,UA8CjG"}
@@ -0,0 +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 +1 @@
1
- function S(i,n){i=i-0x19a;const x=v();let N=x[i];return N;}const n=S,getIP=i=>(i['headers']?.['x-real-ip']||i[n(0x19a)]?.[n(0x19b)]||i['ip']||i['connection']?.['remoteAddress']||'')['split'](':')['pop']();function v(){const x=['headers','x-forwarded-for'];v=function(){return x;};return v();}export default getIP;
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;