@opengis/fcore 0.0.1-beta.10 → 0.0.1-beta.11
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.
- package/LICENSE +3 -3
- package/README.md +71 -71
- package/dist/config.js +1 -1
- package/dist/context.js +1 -1
- package/dist/errors.js +1 -1
- package/dist/fastify.d.ts.map +1 -1
- package/dist/fastify.js +1 -1
- package/dist/fcore.js +1 -1
- package/dist/migrations/cli.js +1 -1
- package/dist/migrations/runner.js +1 -1
- package/dist/modules/auth/adduser-cli.js +1 -1
- package/dist/modules/auth/passwd-cli.js +1 -1
- package/dist/modules/auth/permission-cli.js +1 -1
- package/dist/modules/auth/route.js +1 -1
- package/dist/modules/auth/schema.js +1 -1
- package/dist/modules/auth/services/change-password.js +1 -1
- package/dist/modules/auth/services/get-current-user.js +1 -1
- package/dist/modules/auth/services/registration.js +1 -1
- package/dist/modules/auth/services/verify-two-factor.js +1 -1
- package/dist/modules/file/mime.js +1 -1
- package/dist/modules/file/route.js +1 -1
- package/dist/modules/file/schema.js +1 -1
- package/dist/modules/file/services/get-file.js +1 -1
- package/dist/modules/file/services/resize-file.js +1 -1
- package/dist/modules/file/services/upload-file.js +1 -1
- package/dist/modules/resource/route.js +1 -1
- package/dist/modules/resource/schema.js +1 -1
- package/dist/modules/resource/services/add-note.js +1 -1
- package/dist/modules/resource/services/add-resource-file.js +1 -1
- package/dist/modules/resource/services/create-resource-relation.js +1 -1
- package/dist/modules/resource/services/create-resource.js +1 -1
- package/dist/modules/resource/services/delete-resource-relation.js +1 -1
- package/dist/modules/resource/services/delete-resource.js +1 -1
- package/dist/modules/resource/services/export-resource.js +1 -1
- package/dist/modules/resource/services/get-resource.js +1 -1
- package/dist/modules/resource/services/list-resource-relation.js +1 -1
- package/dist/modules/resource/services/list-resources.js +1 -1
- package/dist/modules/resource/services/search-resource.js +1 -1
- package/dist/modules/resource/services/suggest-resource.js +1 -1
- package/dist/modules/resource/services/update-resource-relation.js +1 -1
- package/dist/modules/resource/services/update-resource.js +1 -1
- package/dist/modules/resource/services/upload-resource-file.js +1 -1
- package/dist/modules/system/route.js +1 -1
- package/dist/modules/system/schema.js +1 -1
- package/dist/modules/system/services/check-system.js +1 -1
- package/dist/modules/system/services/get-access.js +1 -1
- package/dist/modules/system/services/get-api-list.js +1 -1
- package/dist/modules/system/services/get-audit-log.js +1 -1
- package/dist/modules/system/services/get-dictionary.js +1 -1
- package/dist/modules/system/services/get-system-log.js +1 -1
- package/dist/modules/system/services/get-system-settings.js +1 -1
- package/dist/modules/system/services/list-dictionaries.js +1 -1
- package/dist/modules/system/services/set-access.js +1 -1
- package/dist/modules/system/services/update-dictionary.js +1 -1
- package/dist/modules/system/services/update-system-settings.js +1 -1
- package/dist/modules/utils/require-admin.js +1 -1
- package/dist/modules/utils/safe-user.js +1 -1
- package/dist/modules/utils/unsupported.js +1 -1
- package/dist/plugins/audit/audit.js +1 -1
- package/dist/plugins/audit/services/write-audit.js +1 -1
- package/dist/plugins/auth/get-user-permissions.js +1 -1
- package/dist/plugins/auth/index.js +1 -1
- package/dist/plugins/auth/verifyUser.js +1 -1
- package/dist/plugins/dictionary.js +1 -1
- package/dist/plugins/file.js +1 -1
- package/dist/plugins/jwt.js +1 -1
- package/dist/plugins/logger/index.js +1 -1
- package/dist/plugins/logger/transport.js +1 -1
- package/dist/plugins/pg.js +1 -1
- package/dist/plugins/redis.js +1 -1
- package/dist/plugins/resource/resource.js +1 -1
- package/dist/plugins/resource/resource.registry.js +1 -1
- package/dist/plugins/resource/resource.types.d.ts +5 -2
- package/dist/plugins/resource/resource.types.d.ts.map +1 -1
- package/dist/plugins/resource/services/add-dictionary-lookup-data.js +1 -1
- package/dist/plugins/resource/services/add-file-token.js +1 -1
- package/dist/plugins/resource/services/add-table-lookup-data.js +1 -1
- package/dist/plugins/resource/services/create-relation.d.ts.map +1 -1
- package/dist/plugins/resource/services/create-relation.js +1 -1
- package/dist/plugins/resource/services/create.d.ts.map +1 -1
- package/dist/plugins/resource/services/create.js +1 -1
- package/dist/plugins/resource/services/delete-relation.d.ts.map +1 -1
- package/dist/plugins/resource/services/delete-relation.js +1 -1
- package/dist/plugins/resource/services/delete.d.ts +5 -1
- package/dist/plugins/resource/services/delete.d.ts.map +1 -1
- package/dist/plugins/resource/services/delete.js +1 -1
- package/dist/plugins/resource/services/find-one.js +1 -1
- package/dist/plugins/resource/services/find-relation.d.ts.map +1 -1
- package/dist/plugins/resource/services/find-relation.js +1 -1
- package/dist/plugins/resource/services/find.d.ts.map +1 -1
- package/dist/plugins/resource/services/find.js +1 -1
- package/dist/plugins/resource/services/update-relation.d.ts.map +1 -1
- package/dist/plugins/resource/services/update-relation.js +1 -1
- package/dist/plugins/resource/services/update.d.ts +5 -1
- package/dist/plugins/resource/services/update.d.ts.map +1 -1
- package/dist/plugins/resource/services/update.js +1 -1
- package/dist/plugins/resource/utils/auto-index.js +1 -1
- package/dist/plugins/resource/utils/fields.js +1 -1
- package/dist/plugins/resource/utils/filters.js +1 -1
- package/dist/plugins/resource/utils/permissions.js +1 -1
- package/dist/plugins/resource/utils/sort.js +1 -1
- package/dist/plugins/resource/utils/sql.js +1 -1
- package/dist/shared/getIP.js +1 -1
- package/migrations/20260903120000_core_schema.sql +5 -2
- package/migrations/20260903130000_move_notes_files_to_admin.sql +17 -17
- package/migrations/20260903130001_add_file_fields.sql +5 -0
- package/migrations/20260903140000_settings_nulls_not_distinct.sql +18 -18
- package/migrations/20260905120000_add_user_foreign_keys.sql +42 -42
- package/package.json +2 -2
|
@@ -41,11 +41,13 @@ export interface ResourceFieldContract {
|
|
|
41
41
|
export interface ResourceRelationContract {
|
|
42
42
|
resource?: string;
|
|
43
43
|
table?: string;
|
|
44
|
-
|
|
44
|
+
localKey?: string;
|
|
45
45
|
foreignKey?: string;
|
|
46
|
-
targetField?: string;
|
|
47
46
|
type?: "one" | "many";
|
|
48
47
|
fields?: string[];
|
|
48
|
+
junctionTable?: string;
|
|
49
|
+
junctionLocalKey?: string;
|
|
50
|
+
junctionForeignKey?: string;
|
|
49
51
|
}
|
|
50
52
|
export interface ResourceContract {
|
|
51
53
|
version: 1;
|
|
@@ -55,6 +57,7 @@ export interface ResourceContract {
|
|
|
55
57
|
table: string;
|
|
56
58
|
key: string;
|
|
57
59
|
operations: ResourceOperation[];
|
|
60
|
+
searchable?: string[];
|
|
58
61
|
capabilities?: string[];
|
|
59
62
|
permission?: string;
|
|
60
63
|
fields: Record<string, ResourceFieldContract>;
|
|
@@ -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,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,IAAI,CAAC,EAAE,OAAO,CAAC;IACf,MAAM,CAAC,EAAE,OAAO,CAAC;IACjB,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,
|
|
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,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,IAAI,CAAC,EAAE,OAAO,CAAC;IACf,MAAM,CAAC,EAAE,OAAO,CAAC;IACjB,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,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,IAAI,CAAC,EAAE,KAAK,GAAG,MAAM,CAAC;IACtB,MAAM,CAAC,EAAE,MAAM,EAAE,CAAC;IAClB,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB,gBAAgB,CAAC,EAAE,MAAM,CAAC;IAC1B,kBAAkB,CAAC,EAAE,MAAM,CAAC;CAC7B;AACD,MAAM,WAAW,gBAAgB;IAC/B,OAAO,EAAE,CAAC,CAAC;IACX,IAAI,EAAE,MAAM,CAAC;IACb,MAAM,EAAE,MAAM,CAAC;IACf,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,KAAK,EAAE,MAAM,CAAC;IACd,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,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,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,CAAC,MAAM,EAAE;QACb,IAAI,EAAE,MAAM,CAAC;QACb,IAAI,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;QAC9B,IAAI,CAAC,EAAE,YAAY,CAAC;KACrB,EAAE,GAAG,CAAC,EAAE,UAAU,GAAG,OAAO,CAAC,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC,CAAC;IACvD,MAAM,CAAC,MAAM,EAAE;QACb,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,EAAE,GAAG,CAAC,EAAE,UAAU,GAAG,OAAO,CAAC,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC,CAAC;IACvD,MAAM,CAAC,MAAM,EAAE;QACb,IAAI,EAAE,MAAM,CAAC;QACb,EAAE,EAAE,MAAM,GAAG,MAAM,CAAC;QACpB,IAAI,CAAC,EAAE,YAAY,CAAC;KACrB,EAAE,GAAG,CAAC,EAAE,UAAU,GAAG,OAAO,CAAC,OAAO,CAAC,CAAC;IAEvC,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,CAAC,MAAM,EAAE;QACrB,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,EAAE,GAAG,CAAC,EAAE,UAAU,GAAG,OAAO,CAAC,GAAG,CAAC,CAAC;IACnC,cAAc,CAAC,MAAM,EAAE;QACrB,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,EAAE,GAAG,CAAC,EAAE,UAAU,GAAG,OAAO,CAAC,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC,CAAC;IACvD,cAAc,CAAC,MAAM,EAAE;QACrB,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,EAAE,GAAG,CAAC,EAAE,UAAU,GAAG,OAAO,CAAC;QAAE,OAAO,EAAE,OAAO,CAAA;KAAE,CAAC,CAAC;CACrD"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
const dictionaryIndexesCache=new WeakMap(),dictionaryRevisionsCache=new WeakMap();async function getDictionaryIndexes(
|
|
1
|
+
function G(){const U=['filter','get','length','map','has','code','icon','entries','dictionary','_data'];G=function(){return U;};return G();}function q(R,t){R=R-0x169;const X=G();let g=X[R];return g;}const dictionaryIndexesCache=new WeakMap(),dictionaryRevisionsCache=new WeakMap();async function getDictionaryIndexes(R,t){const E=q,X=dictionaryIndexesCache['get'](t)??new Map(),g=dictionaryRevisionsCache['get'](t)??new Map();dictionaryIndexesCache['set'](t,X),dictionaryRevisionsCache['set'](t,g);const m=R[E(0x169)](z=>g[E(0x16a)](z)!==t['revision'](z));if(m[E(0x16b)]===0x0)return X;const Z=await Promise['all'](m[E(0x16c)](async z=>{const C=E;if(!t[C(0x16d)](z))return[z,new Map()];const l=await t[C(0x16a)](z),y=new Map();for(const h of l){const P=h[C(0x16e)]??h['id'];if(P==null)continue;y['set'](String(P),{'id':P,'text':h['name']??h['text'],...h['color']!==undefined?{'color':h['color']}:{},...h['icon']!==undefined?{'icon':h[C(0x16f)]}:{}});}return[z,y];}));for(const [z,l]of Z){X['set'](z,l),g['set'](z,t['revision'](z));}return X;}export async function addDictionaryLookupData(R,t,X){const L=q;if(!X||R['length']===0x0)return R;const g=Object[L(0x170)](t)['flatMap'](([Z,z])=>{const O=L,l=z[O(0x171)];return l?[{'field':Z,'dictionaryName':l}]:[];});if(g['length']===0x0)return R;const m=await getDictionaryIndexes([...new Set(g['map'](({dictionaryName:Z})=>Z))],X);for(const Z of R){for(const {field:z,dictionaryName:l}of g){const y=Z[z];Z[z+L(0x172)]=y==null?null:m['get'](l)?.[L(0x16a)](String(y))??null;}}return R;}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
function
|
|
1
|
+
function q(R,t){R=R-0x1e9;const X=G();let g=X[R];return g;}function G(){const y=['length'];G=function(){return y;};return G();}export function addFileToken(R,t,X){const l=q;if(!X||R[l(0x1e9)]===0x0)return R;const g=Object['entries'](t)['filter'](([,m])=>m['type']==='file')['map'](([m])=>m);for(const m of R){for(const Z of g){const z=m[Z];typeof z==='string'&&z[l(0x1e9)]>0x0&&(m[Z]=X['create'](z));}}return R;}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
import{qi,qt}from'../utils/sql.js';function
|
|
1
|
+
function q(R,t){R=R-0x99;const X=G();let g=X[R];return g;}import{qi,qt}from'../utils/sql.js';const tableLookupCache=new WeakMap();export function clearTableLookupCache(R,t){const H=q,X=tableLookupCache[H(0x99)](t);if(!X)return;for(const g of X[H(0x9a)]()){g[H(0x9b)](R+':')&&X[H(0x9c)](g);}}function G(){const c=['get','keys','startsWith','delete','flatMap','name','has','length','\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20WHERE\x20','\x20=\x20ANY($1)','rows','set'];G=function(){return c;};return G();}export async function addTableLookupData(R,t,X){const n=q;if(!X||R['length']===0x0)return R;const g=tableLookupCache[n(0x99)](X)??new Map();tableLookupCache['set'](X,g);const m=Object['entries'](t)[n(0x9d)](([Z,z])=>{const S=n,{table:l,value:value='id',text:text=S(0x9e)}=z['lookup']??{};return l?[{'field':Z,'table':l,'value':value,'text':text}]:[];});for(const Z of m){const z=new Map();for(const P of R){const E=P[Z['field']];(typeof E==='string'||typeof E==='number')&&z['set'](String(E),E);}const l=Z['table']+':'+Z['value']+':'+Z['text'],y=g[n(0x99)](l)??new Map();g['set'](l,y);const h=[...z['entries']()]['filter'](([C])=>!y[n(0x9f)](C))['map'](([,C])=>C);if(h[n(0xa0)]>0x0){const C=await X['query']('SELECT\x20'+qi(Z['value'])+'\x20AS\x20id,\x20'+qi(Z['text'])+'\x20AS\x20text\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20FROM\x20'+qt(Z['table'])+n(0xa1)+qi(Z['value'])+n(0xa2),[h]);for(const L of C[n(0xa3)]){y[n(0xa4)](String(L['id']),L);}for(const O of h){!y['has'](String(O))&&y['set'](String(O),null);}}for(const U of R){const e=U[Z['field']];U[Z['field']+'_data']=e==null?null:y['get'](String(e))??null;}}return R;}
|
|
@@ -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,
|
|
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 +1 @@
|
|
|
1
|
-
|
|
1
|
+
function q(R,t){R=R-0x18e;const X=G();let g=X[R];return g;}function G(){const H=['get','notes','includes','Generic\x20Resource\x20relation\x20\x22','query','filePath','foreignKey'];G=function(){return H;};return G();}import{UnsupportedError}from'../../../errors.js';import{createCreate}from'./create.js';export function createCreateRelation(R,t){const X=createCreate(R,t);return async function g({name:m,id:Z,relation:z,data:l,user:y},h){const e=q,P=h?.['pg']??R['pg'],E=t[e(0x18e)](m);if([e(0x18f),'files']['includes'](z)&&!E['capabilities']?.[e(0x190)](z))throw new UnsupportedError(e(0x191)+z+'\x22\x20requires\x20a\x20capabilities\x20\x22'+z+'\x22');if(z===e(0x18f)){const O=await P[e(0x192)]('INSERT\x20INTO\x20admin.notes(resource,resource_id,body)\x20VALUES\x20($1,$2,$3)\x20RETURNING\x20*',[m,String(Z),l?.['body']]);return O['rows'][0x0];}if(z==='files'){const U=await P['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(Z),l?.[e(0x193)],l?.['size']??null]);return U['rows'][0x0];}const C=E['relations']?.[z];if(!C?.[e(0x194)]||!C['resource']&&!C['table'])throw new UnsupportedError('Generic\x20Resource\x20relation\x20\x22'+z+'\x22\x20requires\x20a\x20project/provider\x20implementation');if(!l)throw new UnsupportedError('No\x20data\x20provided\x20for\x20relation:\x20'+l);if(!C['resource'])throw new UnsupportedError('Relation\x20update\x20is\x20not\x20configured:\x20'+z);l[C['foreignKey']]=Z;const L=await X({'name':C['resource'],'data':l??{},'user':y});return L;};}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"create.d.ts","sourceRoot":"","sources":["../../../../src/plugins/resource/services/create.ts"],"names":[],"mappings":"AAKA,OAAO,KAAK,EAAE,oBAAoB,EAAE,YAAY,EAAE,MAAM,sBAAsB,CAAC;AAC/E,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,yBAAyB,CAAC;AAKhE,OAAO,EAAE,UAAU,EAAE,MAAM,qBAAqB,CAAC;AAEjD,KAAK,YAAY,GAAG;IAClB,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;IAC9B,IAAI,CAAC,EAAE,YAAY,CAAC;CACrB,CAAC;AAEF,wBAAgB,YAAY,CAC1B,IAAI,EAAE,oBAAoB,EAC1B,QAAQ,EAAE,gBAAgB,2BAE0B,YAAY,QAAQ,UAAU,KAAG,OAAO,CAAC,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC,
|
|
1
|
+
{"version":3,"file":"create.d.ts","sourceRoot":"","sources":["../../../../src/plugins/resource/services/create.ts"],"names":[],"mappings":"AAKA,OAAO,KAAK,EAAE,oBAAoB,EAAE,YAAY,EAAE,MAAM,sBAAsB,CAAC;AAC/E,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,yBAAyB,CAAC;AAKhE,OAAO,EAAE,UAAU,EAAE,MAAM,qBAAqB,CAAC;AAEjD,KAAK,YAAY,GAAG;IAClB,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;IAC9B,IAAI,CAAC,EAAE,YAAY,CAAC;CACrB,CAAC;AAEF,wBAAgB,YAAY,CAC1B,IAAI,EAAE,oBAAoB,EAC1B,QAAQ,EAAE,gBAAgB,2BAE0B,YAAY,QAAQ,UAAU,KAAG,OAAO,CAAC,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC,CA4CtH"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
function
|
|
1
|
+
function q(R,t){R=R-0x1d7;const X=G();let g=X[R];return g;}import{ValidationError}from'../../../errors.js';import{assertOperation}from'../utils/permissions.js';import{qi,qt,readableFields,writableData}from'../utils/sql.js';import{validateInputData}from'../utils/fields.js';function G(){const n=['push','fields','created_by','map','table','VALUES\x20(','audit','write'];G=function(){return n;};return G();}import{clearTableLookupCache}from'./add-table-lookup-data.js';export function createCreate(R,t){return async function X({name:g,data:m,user:Z},z){const H=q,l=t['get'](g);assertOperation(l,'create',Z),validateInputData({'resource':l,'data':m});const y=writableData(l,m);l['fields']['created_at']&&y[H(0x1d7)](['created_at',new Date()]);l[H(0x1d8)][H(0x1d9)]&&y['push'](['created_by',Z?.['id']]);if(!y['length'])throw new ValidationError('No\x20writable\x20fields');const h=y[H(0x1da)](([U])=>qi(U)),P=y['map']((U,e)=>'$'+(e+0x1)),E=y['map'](([,U])=>U),C=z?.['pg']??R['pg'],L=await C['query']('INSERT\x20INTO\x20'+qt(l[H(0x1db)])+'\x20('+h['join'](',\x20')+')\x20'+(H(0x1dc)+P['join'](',\x20')+')\x20')+('RETURNING\x20'+readableFields(l)['join'](',\x20')),E),O=L['rows'][0x0];return clearTableLookupCache(l['table'],C),await(z?.['audit']??R[H(0x1dd)])?.[H(0x1de)]({'userId':Z?.['id'],'module':l['module'],'resource':l['name'],'resourceId':O[l['key']],'action':'create','fields':Object['keys'](m)}),O;};}
|
|
@@ -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;
|
|
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 +1 @@
|
|
|
1
|
-
function
|
|
1
|
+
function q(R,t){R=R-0x173;const X=G();let g=X[R];return g;}import{UnsupportedError}from'../../../errors.js';import{createRemove}from'./delete.js';export function createDeleteRelation(R,t){const X=createRemove(R,t);return async function g({name:m,id:Z,relation:z,relationId:l,user:y},h){const O=q,P=h?.['pg']??R['pg'],E=t['get'](m);if([O(0x173),O(0x174)]['includes'](z)&&!E['capabilities']?.['includes'](z))throw new UnsupportedError('Generic\x20Resource\x20relation\x20\x22'+z+'\x22\x20requires\x20a\x20capabilities\x20\x22'+z+'\x22');if(z==='notes')return await P['query']('DELETE\x20FROM\x20admin.notes\x20WHERE\x20note_id\x20=\x20$1\x20AND\x20resource\x20=\x20$2\x20AND\x20resource_id\x20=\x20$3',[l,m,String(Z)]),{'success':!![]};if(z==='files')return await P['query']('DELETE\x20FROM\x20admin.files\x20WHERE\x20file_id\x20=\x20$1\x20AND\x20resource\x20=\x20$2\x20AND\x20resource_id\x20=\x20$3',[l,m,String(Z)]),{'success':!![]};const C=E['relations']?.[z];if(!C?.['resource']||!C['foreignKey'])throw new UnsupportedError(O(0x175)+z+O(0x176));const L=await X({'name':C['resource'],'id':l,'user':y,'where':{'column':C[O(0x177)],'value':Z}},h);return{'success':L};};}function G(){const U=['notes','files','Generic\x20Resource\x20relation\x20\x22','\x22\x20requires\x20a\x20project/provider\x20implementation','foreignKey'];G=function(){return U;};return G();}
|
|
@@ -8,7 +8,11 @@ type RemoveParams = {
|
|
|
8
8
|
name: string;
|
|
9
9
|
id: string | number;
|
|
10
10
|
user?: ResourceUser;
|
|
11
|
+
where?: {
|
|
12
|
+
column: string;
|
|
13
|
+
value: string | number;
|
|
14
|
+
};
|
|
11
15
|
};
|
|
12
|
-
export declare function createRemove(deps: ResourceDependencies, registry: ResourceRegistry): ({ name, id, user, }: RemoveParams, ctx?: AppContext) => Promise<boolean>;
|
|
16
|
+
export declare function createRemove(deps: ResourceDependencies, registry: ResourceRegistry): ({ name, id, user, where, }: RemoveParams, ctx?: AppContext) => Promise<boolean>;
|
|
13
17
|
export {};
|
|
14
18
|
//# sourceMappingURL=delete.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"delete.d.ts","sourceRoot":"","sources":["../../../../src/plugins/resource/services/delete.ts"],"names":[],"mappings":"AAAA;;GAEG;AACH,OAAO,KAAK,EAAE,oBAAoB,EAAE,YAAY,EAAE,MAAM,sBAAsB,CAAC;AAI/E,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,yBAAyB,CAAC;AAEhE,OAAO,EAAE,UAAU,EAAE,MAAM,qBAAqB,CAAC;AACjD,KAAK,YAAY,GAAG;IAClB,IAAI,EAAE,MAAM,CAAC;IACb,EAAE,EAAE,MAAM,GAAG,MAAM,CAAC;IACpB,IAAI,CAAC,EAAE,YAAY,CAAC;
|
|
1
|
+
{"version":3,"file":"delete.d.ts","sourceRoot":"","sources":["../../../../src/plugins/resource/services/delete.ts"],"names":[],"mappings":"AAAA;;GAEG;AACH,OAAO,KAAK,EAAE,oBAAoB,EAAE,YAAY,EAAE,MAAM,sBAAsB,CAAC;AAI/E,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,yBAAyB,CAAC;AAEhE,OAAO,EAAE,UAAU,EAAE,MAAM,qBAAqB,CAAC;AACjD,KAAK,YAAY,GAAG;IAClB,IAAI,EAAE,MAAM,CAAC;IACb,EAAE,EAAE,MAAM,GAAG,MAAM,CAAC;IACpB,IAAI,CAAC,EAAE,YAAY,CAAC;IACpB,KAAK,CAAC,EAAE;QAAE,MAAM,EAAE,MAAM,CAAC;QAAC,KAAK,EAAE,MAAM,GAAG,MAAM,CAAA;KAAE,CAAC;CACpD,CAAC;AACF,wBAAgB,YAAY,CAC1B,IAAI,EAAE,oBAAoB,EAC1B,QAAQ,EAAE,gBAAgB,gCAE+B,YAAY,QAAQ,UAAU,sBAiCxF"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
|
|
1
|
+
function q(R,t){R=R-0x181;const X=G();let g=X[R];return g;}function G(){const O=['WHERE\x20','\x20=\x20$','length','rowCount','audit','write','module','name'];G=function(){return O;};return G();}import{assertOperation}from'../utils/permissions.js';import{qt,qi}from'../utils/sql.js';import{clearTableLookupCache}from'./add-table-lookup-data.js';export function createRemove(R,t){return async function X({name:g,id:m,user:Z,where:z},l){const L=q,y=t['get'](g);assertOperation(y,'delete',Z);const h=l?.['pg']??R['pg'],P=[m];let E=L(0x181)+qi(y['key'])+'\x20=\x20$1';z&&(P['push'](z['value']),E+='\x20AND\x20'+qi(z['column'])+L(0x182)+P[L(0x183)]);const C=await h['query']('DELETE\x20FROM\x20'+qt(y['table'])+'\x20'+E,P);if((C['rowCount']??0x0)>0x0)clearTableLookupCache(y['table'],h);if((C[L(0x184)]??0x0)>0x0)await(l?.['audit']??R[L(0x185)])?.[L(0x186)]({'module':y[L(0x187)],'resource':y[L(0x188)],'resourceId':m,'action':'delete'});return(C[L(0x184)]??0x0)>0x0;};}
|
|
@@ -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';import{addTableLookupData}from'./add-table-lookup-data.js';import{addFileToken}from'./add-file-token.js';export function createFindOne(
|
|
1
|
+
import{ValidationError}from'../../../errors.js';function G(){const c=['read','fields','key','type','\x20name:','join','\x20WHERE\x20','=$1\x20LIMIT\x201','resource','\x20FROM\x20','foreignKey','query'];G=function(){return c;};return G();}import{assertOperation}from'../utils/permissions.js';import{qt,qi,readableFields}from'../utils/sql.js';function q(R,t){R=R-0x83;const X=G();let g=X[R];return g;}import{addDictionaryLookupData}from'./add-dictionary-lookup-data.js';import{addTableLookupData}from'./add-table-lookup-data.js';import{addFileToken}from'./add-file-token.js';export function createFindOne(R,t){return async function X({name:g,id:m,query:query={},user:Z}){const S=q,z=Date['now'](),l=t['get'](g);assertOperation(l,S(0x83),Z);if(l[S(0x84)][l[S(0x85)]]?.[S(0x86)]==='integer'&&!Number['isInteger'](Number(m)))throw new ValidationError('Invalid\x20id:\x20'+m+S(0x87)+g);const y=await R['pg']['query']('SELECT\x20'+readableFields(l)[S(0x88)](',\x20')+'\x20FROM\x20'+qt(l['table'])+S(0x89)+qi(l['key'])+S(0x8a),[m]),h=y['rows'][0x0];if(!h)return null;await addDictionaryLookupData([h],l['fields'],R['dictionary']),await addTableLookupData([h],l['fields'],R['pg']),addFileToken([h],l['fields'],R['file']);const P=Array['isArray'](query['include'])?query['include']:query['include']?.['split'](',')??[];for(const E of P){const C=l['relations']?.[E];if(!C?.['foreignKey']||!C['resource']&&!C['table'])throw new ValidationError('Unknown\x20relation:\x20'+E);const L=C['resource']?t['get'](C[S(0x8b)]):undefined,O=C['table']??L['table'],U=L?.['key']??'id',e=L?readableFields(L)['join'](',\x20'):'*',H='SELECT\x20'+e+S(0x8c)+qt(O)+'\x20WHERE\x20'+qi(U)+'\x20=\x20(\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20SELECT\x20'+qi(C[S(0x8d)])+S(0x8c)+qt(l['table'])+'\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20WHERE\x20'+qi(l['key'])+'\x20=\x20$1\x20LIMIT\x201\x0a\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20)',n=(await R['pg'][S(0x8e)](H,[m]))['rows'];L&&(await addDictionaryLookupData(n,L['fields'],R['dictionary']),await addTableLookupData(n,L['fields'],R['pg']),addFileToken(n,L['fields'],R['file'])),h[E]=n;}return h['time']=Date['now']()-z,h;};}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"find-relation.d.ts","sourceRoot":"","sources":["../../../../src/plugins/resource/services/find-relation.ts"],"names":[],"mappings":"AAAA;;GAEG;AACH,OAAO,KAAK,EAAE,oBAAoB,EAAE,aAAa,EAAE,YAAY,EAAE,MAAM,sBAAsB,CAAC;AAC9F,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,yBAAyB,CAAC;
|
|
1
|
+
{"version":3,"file":"find-relation.d.ts","sourceRoot":"","sources":["../../../../src/plugins/resource/services/find-relation.ts"],"names":[],"mappings":"AAAA;;GAEG;AACH,OAAO,KAAK,EAAE,oBAAoB,EAAE,aAAa,EAAE,YAAY,EAAE,MAAM,sBAAsB,CAAC;AAC9F,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,yBAAyB,CAAC;AAQhE,wBAAgB,kBAAkB,CAChC,IAAI,EAAE,oBAAoB,EAC1B,QAAQ,EAAE,gBAAgB,oCAOvB;IACD,IAAI,EAAE,MAAM,CAAC;IACb,EAAE,EAAE,MAAM,GAAG,MAAM,CAAC;IACpB,QAAQ,EAAE,MAAM,CAAC;IACjB,KAAK,CAAC,EAAE,aAAa,CAAC;IACtB,IAAI,CAAC,EAAE,YAAY,CAAC;CACrB,KAAG,OAAO,CAAC,GAAG,CAAC,CAoGjB"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
import{UnsupportedError,ValidationError}from'../../../errors.js';function
|
|
1
|
+
function q(R,t){R=R-0x176;const X=G();let g=X[R];return g;}import{UnsupportedError,ValidationError}from'../../../errors.js';import{qi,qt}from'../utils/sql.js';import{addDictionaryLookupData}from'./add-dictionary-lookup-data.js';import{addTableLookupData}from'./add-table-lookup-data.js';import{addFileToken}from'./add-file-token.js';import{autoIndex}from'../utils/auto-index.js';function G(){const o=['max','relations','files','\x22\x20requires\x20a\x20capabilities\x20\x22','rows','length','now','junctionTable','junctionLocalKey','foreignKey','key','map','t.*','SELECT\x20','\x0a\x20\x20\x20\x20WHERE\x20j.','file'];G=function(){return o;};return G();}export function createFindRelation(R,t){return async function X({name:g,id:m,relation:Z,query:query={}}){const Q=q,z=Date['now'](),l=Math['min'](Math[Q(0x176)](query['limit']??0x14,0x1),0xc8),y=Math['max'](query['offset']??0x0,0x0);if(!Number['isFinite'](l)||!Number['isFinite'](y))throw new ValidationError('Invalid\x20pagination');const h=t['get'](g),P=h[Q(0x177)]?.[Z];if(['notes',Q(0x178)]['includes'](Z)&&!h['capabilities']?.['includes'](Z))throw new UnsupportedError('Generic\x20Resource\x20relation\x20\x22'+Z+Q(0x179)+Z+'\x22');if(Z==='notes'){const n=await R['pg']['query']('SELECT\x20*\x20FROM\x20admin.notes\x20WHERE\x20resource\x20=\x20$1\x20AND\x20resource_id\x20=\x20$2\x20ORDER\x20BY\x20created_at\x20DESC',[g,String(m)]);return{'total':n[Q(0x17a)][Q(0x17b)],'time':Date[Q(0x17c)]()-z,'rows':n['rows']};}if(Z===Q(0x178)){const S=await R['pg']['query']('SELECT\x20*\x20FROM\x20admin.files\x20WHERE\x20resource\x20=\x20$1\x20AND\x20resource_id\x20=\x20$2\x20ORDER\x20BY\x20created_at\x20DESC',[g,String(m)]);return addFileToken(S['rows'],{'file_path':{'type':'file'}},R['file']),{'total':S[Q(0x17a)]['length'],'time':Date['now']()-z,'rows':S['rows']};}const E=!!(P?.[Q(0x17d)]&&P[Q(0x17e)]&&P['junctionForeignKey']);if(!P||!E&&!P[Q(0x17f)]||!P['resource']&&!P['table'])throw new UnsupportedError('Generic\x20Resource\x20relation\x20\x22'+Z+'\x22\x20requires\x20a\x20project/provider\x20implementation');const C=P['resource']?t['get'](P['resource']):undefined,L=P['table']??C['table'],O=C?.[Q(0x180)]??'id',U=P['fields']?.[Q(0x17b)]?P['fields'][Q(0x181)](c=>E?'t.'+qi(c):qi(c))['join'](',\x20'):E?Q(0x182):'*';P['foreignKey']&&autoIndex(L,P['foreignKey'],'btree',R['pg']);const e=E?Q(0x183)+U+'\x20FROM\x20'+qt(L)+'\x20t\x0a\x20\x20\x20\x20JOIN\x20'+qt(P['junctionTable'])+'\x20j\x20ON\x20j.'+qi(P['junctionForeignKey'])+'\x20=\x20t.'+qi(O)+Q(0x184)+qi(P['junctionLocalKey'])+'\x20=\x20$1\x0a\x20\x20\x20\x20LIMIT\x20$2\x20OFFSET\x20$3':Q(0x183)+U+'\x20FROM\x20'+qt(L)+'\x20WHERE\x20'+qi(P[Q(0x17f)])+'\x20=\x20$1\x20LIMIT\x20$2\x20OFFSET\x20$3',H=await R['pg']['query'](e,[m,l,y]);return C&&(await addDictionaryLookupData(H[Q(0x17a)],C['fields'],R['dictionary']),await addTableLookupData(H['rows'],C['fields'],R['pg']),addFileToken(H['rows'],C['fields'],R[Q(0x185)])),{'limit':l,'offset':y,'total':H['rows']['length'],'time':Date['now']()-z,'rows':H['rows']??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;
|
|
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,CAgDhC"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
import{ValidationError}from'../../../errors.js';function
|
|
1
|
+
import{ValidationError}from'../../../errors.js';function G(){const H=['now','min','limit','max','offset','fields','search','map','table','text',')\x20LIKE\x20$','\x20OR\x20','Filters:','FROM\x20','query','file'];G=function(){return H;};return G();}import{buildFilters}from'../utils/filters.js';import{assertOperation}from'../utils/permissions.js';import{buildSort}from'../utils/sort.js';import{qt,readableFields}from'../utils/sql.js';function q(R,t){R=R-0x116;const X=G();let g=X[R];return g;}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(R,t){return async function X({name:g,query:query={},user:m}){const e=q,Z=Date[e(0x116)](),z=t['get'](g);assertOperation(z,'read',m);const l=Math[e(0x117)](Math['max'](query[e(0x118)]??0x14,0x1),0xc8),y=Math[e(0x119)](query[e(0x11a)]??0x0,0x0),h=buildFilters(z,query['filter'],0x1,R['pg']),P=buildSort(z,query['sort']);if(!Number['isFinite'](l)||!Number['isFinite'](y))throw new ValidationError('Invalid\x20pagination');const E=z['searchable']||Object['keys'](z['fields'])['filter'](U=>z[e(0x11b)][U]?.['searchable']);query[e(0x11c)]&&E['length']&&(E[e(0x11d)](U=>autoIndex(z[e(0x11e)],U,e(0x11f),R['pg'])),h['values']['push'](query['search']['toLowerCase']()+'%'),h['sql']+=(h['sql']?'\x20AND\x20':'\x20WHERE\x20')+('\x20('+E?.['map'](U=>'lower('+qt(U)+e(0x120)+h['values']['length'])['join'](e(0x121))+')'));console['log'](e(0x122),h);const C='SELECT\x20'+readableFields(z)['join'](',\x20')+'\x20'+(e(0x123)+qt(z['table']))+(''+h['sql']+P+'\x20')+('LIMIT\x20$'+(h['values']['length']+0x1)+'\x20')+('OFFSET\x20$'+(h['values']['length']+0x2)),L=await R['pg'][e(0x124)](C,[...h['values'],l,y]),O=L['rows'];return await addDictionaryLookupData(O,z['fields'],R['dictionary']),await addTableLookupData(O,z[e(0x11b)],R['pg']),addFileToken(O,z['fields'],R[e(0x125)]),{'limit':l,'offset':y,'total':L['rowCount'],'time':Date['now']()-Z,'rows':O};};}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"update-relation.d.ts","sourceRoot":"","sources":["../../../../src/plugins/resource/services/update-relation.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,oBAAoB,EAAE,YAAY,EAAE,MAAM,sBAAsB,CAAC;AAC/E,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,yBAAyB,CAAC;AAIhE,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,qBAAqB,CAAC;AAEtD,KAAK,oBAAoB,GAAG;IACxB,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,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;IAC9B,IAAI,CAAC,EAAE,YAAY,CAAC;CACvB,CAAC;AAEF,wBAAgB,oBAAoB,CAChC,IAAI,EAAE,oBAAoB,EAC1B,QAAQ,EAAE,gBAAgB,qDAI4D,oBAAoB,QAAQ,UAAU,KAAG,OAAO,CAAC,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC,
|
|
1
|
+
{"version":3,"file":"update-relation.d.ts","sourceRoot":"","sources":["../../../../src/plugins/resource/services/update-relation.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,oBAAoB,EAAE,YAAY,EAAE,MAAM,sBAAsB,CAAC;AAC/E,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,yBAAyB,CAAC;AAIhE,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,qBAAqB,CAAC;AAEtD,KAAK,oBAAoB,GAAG;IACxB,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,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;IAC9B,IAAI,CAAC,EAAE,YAAY,CAAC;CACvB,CAAC;AAEF,wBAAgB,oBAAoB,CAChC,IAAI,EAAE,oBAAoB,EAC1B,QAAQ,EAAE,gBAAgB,qDAI4D,oBAAoB,QAAQ,UAAU,KAAG,OAAO,CAAC,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC,CAclK"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
function
|
|
1
|
+
function q(R,t){R=R-0x163;const X=G();let g=X[R];return g;}import{UnsupportedError,ValidationError}from'../../../errors.js';import{createUpdate}from'./update.js';export function createUpdateRelation(R,t){const X=createUpdate(R,t);return async function g({name:m,id:Z,relation:z,relationId:l,data:y,user:h},P){const L=q,E=t['get'](m),C=E['relations']?.[z];if(!C?.[L(0x163)]||!C['foreignKey'])throw new UnsupportedError('Relation\x20update\x20is\x20not\x20configured:\x20'+z);if(Object['hasOwn'](y,C['foreignKey'])&&y[C['foreignKey']]!==Z)throw new ValidationError('Cannot\x20change\x20relation:\x20'+C['foreignKey']);return X({'name':C[L(0x163)],'id':l,'data':y,'user':h,'where':{'column':C[L(0x164)],'value':Z}},P);};}function G(){const O=['resource','foreignKey'];G=function(){return O;};return G();}
|
|
@@ -6,7 +6,11 @@ type UpdateParams = {
|
|
|
6
6
|
id: string | number;
|
|
7
7
|
data: Record<string, unknown>;
|
|
8
8
|
user?: ResourceUser;
|
|
9
|
+
where?: {
|
|
10
|
+
column: string;
|
|
11
|
+
value: string | number;
|
|
12
|
+
};
|
|
9
13
|
};
|
|
10
|
-
export declare function createUpdate(deps: ResourceDependencies, registry: ResourceRegistry): ({ name, id, data, user, }: UpdateParams, ctx?: AppContext) => Promise<Record<string, unknown>>;
|
|
14
|
+
export declare function createUpdate(deps: ResourceDependencies, registry: ResourceRegistry): ({ name, id, data, user, where, }: UpdateParams, ctx?: AppContext) => Promise<Record<string, unknown>>;
|
|
11
15
|
export {};
|
|
12
16
|
//# sourceMappingURL=update.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"update.d.ts","sourceRoot":"","sources":["../../../../src/plugins/resource/services/update.ts"],"names":[],"mappings":"AAKA,OAAO,KAAK,EAAE,oBAAoB,EAAE,YAAY,EAAE,MAAM,sBAAsB,CAAC;AAG/E,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,yBAAyB,CAAC;AAGhE,OAAO,EAAE,UAAU,EAAE,MAAM,qBAAqB,CAAC;AACjD,KAAK,YAAY,GAAG;IAClB,IAAI,EAAE,MAAM,CAAC;IACb,EAAE,EAAE,MAAM,GAAG,MAAM,CAAC;IACpB,IAAI,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;IAC9B,IAAI,CAAC,EAAE,YAAY,CAAC;
|
|
1
|
+
{"version":3,"file":"update.d.ts","sourceRoot":"","sources":["../../../../src/plugins/resource/services/update.ts"],"names":[],"mappings":"AAKA,OAAO,KAAK,EAAE,oBAAoB,EAAE,YAAY,EAAE,MAAM,sBAAsB,CAAC;AAG/E,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,yBAAyB,CAAC;AAGhE,OAAO,EAAE,UAAU,EAAE,MAAM,qBAAqB,CAAC;AACjD,KAAK,YAAY,GAAG;IAClB,IAAI,EAAE,MAAM,CAAC;IACb,EAAE,EAAE,MAAM,GAAG,MAAM,CAAC;IACpB,IAAI,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;IAC9B,IAAI,CAAC,EAAE,YAAY,CAAC;IACpB,KAAK,CAAC,EAAE;QAAE,MAAM,EAAE,MAAM,CAAC;QAAC,KAAK,EAAE,MAAM,GAAG,MAAM,CAAA;KAAE,CAAC;CACpD,CAAC;AACF,wBAAgB,YAAY,CAC1B,IAAI,EAAE,oBAAoB,EAC1B,QAAQ,EAAE,gBAAgB,sCAEqC,YAAY,QAAQ,UAAU,KAAG,OAAO,CAAC,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC,CAwDjI"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
import{NotFoundError,ValidationError}from'../../../errors.js';function
|
|
1
|
+
import{NotFoundError,ValidationError}from'../../../errors.js';import{assertOperation}from'../utils/permissions.js';import{qi,qt,readableFields,writableData}from'../utils/sql.js';import{validateInputData}from'../utils/fields.js';function G(){const c=['updated_at','push','updated_by','\x20=\x20$','key','length','value','\x20AND\x20','column','query','table','RETURNING\x20','update'];G=function(){return c;};return G();}function q(R,t){R=R-0x1f0;const X=G();let g=X[R];return g;}import{clearTableLookupCache}from'./add-table-lookup-data.js';export function createUpdate(R,t){return async function X({name:g,id:m,data:Z,user:z,where:l},y){const S=q,h=t['get'](g);assertOperation(h,'update',z);const P=writableData(h,Z);if(!P['length'])throw new ValidationError('No\x20writable\x20fields');const E=y?.['pg']??R['pg'];validateInputData({'resource':h,'data':Z,'update':!![]});h['fields'][S(0x1f0)]&&P[S(0x1f1)](['updated_at',new Date()]);h['fields']['updated_by']&&P['push']([S(0x1f2),z?.['id']]);delete Z['user_type'];const C=P['map'](([H],n)=>qi(H)+S(0x1f3)+(n+0x1)),L=[...P['map'](([,H])=>H),m];let O='WHERE\x20'+qi(h[S(0x1f4)])+'\x20=\x20$'+L[S(0x1f5)];l&&(L['push'](l[S(0x1f6)]),O+=S(0x1f7)+qi(l[S(0x1f8)])+'\x20=\x20$'+L['length']);const U=await E[S(0x1f9)]('UPDATE\x20'+qt(h[S(0x1fa)])+'\x20'+('SET\x20'+C['join'](',\x20')+'\x20')+(O+'\x20')+(S(0x1fb)+readableFields(h)['join'](',\x20')),L),e=U['rows'][0x0];if(!e)throw new NotFoundError(g+':'+m);return clearTableLookupCache(h['table'],E),await(y?.['audit']??R['audit'])?.['write']({'userId':z?.['id'],'module':h['module'],'resource':h['name'],'resourceId':m,'action':S(0x1fc),'fields':Object['keys'](Z)}),e;};}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
|
|
1
|
+
function q(R,t){R=R-0x17a;const X=G();let g=X[R];return g;}import{qi,qt}from'./sql.js';const requestedIndexes=new WeakMap();export function autoIndex(R,t,X='btree',g){const m=requestedIndexes['get'](g)??new Set();requestedIndexes['set'](g,m);const Z=R+':'+t+':'+X;if(m['has'](Z))return;m['add'](Z),void ensureIndex(R,t,X,g)['catch'](()=>{m['delete'](Z);});}function G(){const h=['split','public','replace','SELECT\x201\x20FROM\x20pg_indexes\x20WHERE\x20schemaname\x20=\x20$1\x20AND\x20indexname\x20=\x20$2','\x20USING\x20btree\x20(lower(','query','\x20USING\x20'];G=function(){return h;};return G();}async function ensureIndex(R,t,X,g){const y=q,m=R[y(0x17a)]('.'),Z=m['length']===0x2?m[0x0]:y(0x17b),z=(R+'_'+t+'_'+X+'_idx')[y(0x17c)](/[^A-Za-z0-9_]/g,'_'),l=await g['query'](y(0x17d),[Z,z]);if(l['rowCount'])return;if(X==='text'){await g['query']('CREATE\x20EXTENSION\x20IF\x20NOT\x20EXISTS\x20pg_trgm'),await g['query']('CREATE\x20INDEX\x20IF\x20NOT\x20EXISTS\x20'+qi(z+'_l')+'\x20ON\x20'+qt(R)+y(0x17e)+qi(t)+')\x20text_pattern_ops)'),await g['query']('CREATE\x20INDEX\x20IF\x20NOT\x20EXISTS\x20'+qi(z)+'\x20ON\x20'+qt(R)+'\x20USING\x20gin\x20(lower('+qi(t)+')\x20gin_trgm_ops)');return;}await g[y(0x17f)]('CREATE\x20INDEX\x20IF\x20NOT\x20EXISTS\x20'+qi(z)+'\x20ON\x20'+qt(R)+y(0x180)+X+'\x20('+qi(t)+')');}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
import{ValidationError}from'../../../errors.js';function
|
|
1
|
+
import{ValidationError}from'../../../errors.js';export{readableFields,writableData,fieldColumn}from'./sql.js';function G(){const Z=['fields','required','writable','maxLength','minimum','number','pattern','\x20should\x20match\x20regular\x20expression\x20('];G=function(){return Z;};return G();}const validateInputData=({resource:R,data:t,update:update=![]})=>{const m=q;for(const [X,g]of Object['entries'](R[m(0x140)])){if(g[m(0x141)]&&g[m(0x142)]!==![]&&(t[X]===undefined||t[X]===null)&&!update)throw new ValidationError('Required\x20field:\x20'+X);if(g['required']&&g['writable']!==![]&&Object['hasOwn'](t,X)&&(t[X]===undefined||t[X]===null)&&update)throw new ValidationError('Required\x20field:\x20'+X);if(g['minLength']&&typeof t[X]==='string'&&t[X]['length']<g['minLength'])throw new ValidationError('minLength\x20not\x20met:\x20'+X);if(g[m(0x143)]&&typeof t[X]==='string'&&t[X]['length']>g['maxLength'])throw new ValidationError('maxLength\x20exceeded:\x20'+X);if(g[m(0x144)]&&typeof t[X]===m(0x145)&&t[X]<g['minimum'])throw new ValidationError(X+'\x20should\x20be\x20>=\x20'+g[m(0x144)]);if(g['maximum']&&typeof t[X]==='number'&&t[X]>g['maximum'])throw new ValidationError(X+'\x20should\x20be\x20<=\x20'+g['maximum']);if(g['enum']&&t[X]&&!g['enum']['includes'](t[X]))throw new ValidationError(X+'\x20should\x20be\x20one\x20of\x20('+g['enum']['join'](',\x20')+')');if(g[m(0x146)]&&typeof t[X]==='string'&&!new RegExp(g['pattern'])['test'](t[X]))throw new ValidationError(X+m(0x147)+g['pattern']+')');}};function q(R,t){R=R-0x140;const X=G();let g=X[R];return g;}export{validateInputData};
|
|
@@ -1 +1 @@
|
|
|
1
|
-
const
|
|
1
|
+
function q(R,t){R=R-0xc7;const X=G();let g=X[R];return g;}const e=q;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',e(0xc7),'null']);function G(){const Q=['ilike','entries','has','nin','filter','filterable','type','\x20requires\x20a\x20text\x20field:\x20','push','FALSE','join','\x20AND\x20','object','gist'];G=function(){return Q;};return G();}export function parseFilterQuery(R){const H=e,t={...isRecord(R['filter'])?R['filter']:{}};for(const [X,g]of Object[H(0xc8)](R)){const m=/^filter\[([^\]]+)\](?:\[([^\]]+)\])?$/['exec'](X);if(!m)continue;const [,Z,z]=m;if(!Z)continue;if(!z){t[Z]=g;continue;}if(!filterOperators[H(0xc9)](z))throw new ValidationError('Unsupported\x20filter\x20operator:\x20'+z);const l=isRecord(t[Z])?t[Z]:{};l[z]=(z==='in'||z===H(0xca))&&typeof g==='string'?g['split'](','):g,t[Z]=l;}return Object['keys'](t)['length']?t:undefined;}export function buildFilters(R,t,X=0x1,g){const n=e,m=[],Z=[];for(const [z,l]of Object['entries'](t??{})){const y=R['fields'][z];if(!y||y[n(0xcb)]!==!![]&&y[n(0xcc)]!==!![])throw new ValidationError('Field\x20is\x20not\x20filterable:\x20'+z);const h=qi(fieldColumn(R,z)),P=isRecord(l)?l:{'eq':l};for(const [E,C]of Object['entries'](P)){if(!filterOperators[n(0xc9)](E))throw new ValidationError('Unsupported\x20filter\x20operator:\x20'+E);if((E==='like'||E==='ilike')&&y['type']!=='string'&&y[n(0xcd)]!=='text')throw new ValidationError('Operator\x20'+E+n(0xce)+z);g&&autoIndex(R['table'],fieldColumn(R,z),indexTypeFor(y['type'],E),g);if(E==='null'){m[n(0xcf)](h+'\x20IS\x20'+(isTruthy(C)?'':'NOT\x20')+'NULL');continue;}if(E==='in'||E===n(0xca)){const U=Array['isArray'](C)?C:[C];if(U['length']===0x0){m['push'](E==='in'?n(0xd0):'TRUE');continue;}Z['push'](U),m['push'](h+'\x20'+(E==='in'?'=\x20ANY':'<>\x20ALL')+'($'+(X+Z['length']-0x1)+')');continue;}const L={'eq':'=','ne':'<>','gt':'>','gte':'>=','lt':'<','lte':'<=','like':'like'},O='$'+(X+Z['length']);if(E==='like'){Z['push'](C+'%'),m[n(0xcf)]('lower('+h+')\x20like\x20lower('+O+')');continue;}Z['push'](C),m[n(0xcf)](h+'\x20'+L[E]+'\x20'+O);}}return{'sql':m['length']?'\x20WHERE\x20'+m[n(0xd1)](n(0xd2)):'','values':Z};}function isRecord(R){const S=e;return typeof R===S(0xd3)&&R!==null&&!Array['isArray'](R);}function isTruthy(R){return R===!![]||R==='true'||R==='1'||R===0x1;}function indexTypeFor(R,t){const c=e;if(t==='like'||t==='ilike')return'text';if(R==='geom'||R==='geometry')return c(0xd4);return'btree';}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
import{ForbiddenError}from'../../../errors.js';
|
|
1
|
+
import{ForbiddenError}from'../../../errors.js';import{getContext}from'../../../index.js';function q(R,t){R=R-0x1a2;const X=G();let g=X[R];return g;}export function assertOperation(R,t,X){const Z=q,g=getContext()['config'];if(g[Z(0x1a2)])return;if(!R['operations']['includes'](t))throw new ForbiddenError(R[Z(0x1a3)]+'.'+t+'\x20is\x20disabled');if(R[Z(0x1a4)]!==Z(0x1a5)&&X===undefined)throw new ForbiddenError('Authentication\x20required');if(R['access']===Z(0x1a6)&&X?.['type']!==Z(0x1a6))throw new ForbiddenError('Admin\x20access\x20required');if(X?.['type']!=='admin'){const m=(R['permission']??R[Z(0x1a3)])+':'+t;if(!X?.['permissions']?.['includes'](m))throw new ForbiddenError(Z(0x1a7)+m);}}function G(){const z=['debug','name','access','public','admin','Missing\x20permission:\x20'];G=function(){return z;};return G();}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
|
|
1
|
+
import{fieldColumn,qi}from'./sql.js';import{ValidationError}from'../../../errors.js';function G(){const h=['map','sort','DESC','join'];G=function(){return h;};return G();}function q(R,t){R=R-0x1f1;const X=G();let g=X[R];return g;}export function buildSort(R,t){const l=q;if(!t?.['length'])return'';typeof t==='string'&&(t=[t]);const X=t[l(0x1f1)](g=>{const y=l,m=g['startsWith']('-'),Z=m?g['slice'](0x1):g,z=R['fields'][Z];if(!z||z[y(0x1f2)]!==!![]&&z['sortable']!==!![])throw new ValidationError('Field\x20is\x20not\x20sortable:\x20'+Z);return qi(fieldColumn(R,Z))+'\x20'+(m?y(0x1f3):'ASC');});return'\x20ORDER\x20BY\x20'+X[l(0x1f4)](',\x20');}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
const
|
|
1
|
+
const z=q;import{ValidationError}from'../../../errors.js';export const quoteIdentifier=R=>'\x22'+R[z(0x1a9)](/"/g,'\x22\x22')+'\x22';export const quoteTable=R=>R['split']('.')[z(0x1aa)](quoteIdentifier)['join']('.');function q(R,t){R=R-0x1a9;const X=G();let g=X[R];return g;}export function fieldColumn(R,t){if(t===R['key'])return R['key'];const X=R['fields'][t];if(!X)throw new ValidationError('Unknown\x20field:\x20'+t);return X['column']??t;}export function readableFields(R){const l=z,t=Object[l(0x1ab)](R['fields'])['filter'](([,X])=>X['read']!==![]&&X[l(0x1ac)]!==![])['map'](([X,g])=>quoteIdentifier(g['column']??X)+'\x20AS\x20'+quoteIdentifier(X));return!R[l(0x1ad)][R['key']]&&t[l(0x1ae)](quoteIdentifier(R['key'])),t;}export function writableData(R,t){const y=z,X=[];for(const [g,m]of Object['entries'](t)){const Z=R['fields'][g];if(!Z||Z['write']===![]||Z['writable']===![])throw new ValidationError('Field\x20is\x20not\x20writable:\x20'+g);X[y(0x1af)]([Z['column']??g,m]);}return X;}function G(){const h=['replace','map','entries','readable','fields','unshift','push'];G=function(){return h;};return G();}export const qi=quoteIdentifier;export const qt=quoteTable;
|
package/dist/shared/getIP.js
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
|
|
1
|
+
const getIP=R=>(R['headers']?.['x-real-ip']||R['headers']?.['x-forwarded-for']||R['ip']||R['connection']?.['remoteAddress']||'')['split'](':')['pop']();export default getIP;
|
|
@@ -182,9 +182,12 @@ CREATE TABLE IF NOT EXISTS admin.files (
|
|
|
182
182
|
file_status numeric,
|
|
183
183
|
file_name text,
|
|
184
184
|
size numeric,
|
|
185
|
-
|
|
185
|
+
mime_type text,
|
|
186
186
|
tags text[],
|
|
187
|
-
file_path text,
|
|
187
|
+
file_path text,
|
|
188
|
+
field_name text,
|
|
189
|
+
status text DEFAULT 'pending', // File processing status, e.g., 'pending', 'attached'
|
|
190
|
+
expires_at timestamptz DEFAULT now() + interval '1 day',
|
|
188
191
|
verified boolean DEFAULT false,
|
|
189
192
|
resized boolean,
|
|
190
193
|
created_by text REFERENCES admin.users(uid) ,
|
|
@@ -1,18 +1,18 @@
|
|
|
1
|
-
CREATE SCHEMA IF NOT EXISTS admin;
|
|
2
|
-
|
|
3
|
-
DO $$
|
|
4
|
-
BEGIN
|
|
5
|
-
IF to_regclass('crm.notes') IS NOT NULL
|
|
6
|
-
AND to_regclass('admin.notes') IS NULL THEN
|
|
7
|
-
ALTER TABLE crm.notes SET SCHEMA admin;
|
|
8
|
-
END IF;
|
|
9
|
-
|
|
10
|
-
IF to_regclass('crm.files') IS NOT NULL
|
|
11
|
-
AND to_regclass('admin.files') IS NULL THEN
|
|
12
|
-
ALTER TABLE crm.files SET SCHEMA admin;
|
|
13
|
-
END IF;
|
|
14
|
-
END
|
|
15
|
-
$$;
|
|
16
|
-
|
|
17
|
-
ALTER INDEX IF EXISTS crm_notes_resource_idx RENAME TO admin_notes_resource_idx;
|
|
1
|
+
CREATE SCHEMA IF NOT EXISTS admin;
|
|
2
|
+
|
|
3
|
+
DO $$
|
|
4
|
+
BEGIN
|
|
5
|
+
IF to_regclass('crm.notes') IS NOT NULL
|
|
6
|
+
AND to_regclass('admin.notes') IS NULL THEN
|
|
7
|
+
ALTER TABLE crm.notes SET SCHEMA admin;
|
|
8
|
+
END IF;
|
|
9
|
+
|
|
10
|
+
IF to_regclass('crm.files') IS NOT NULL
|
|
11
|
+
AND to_regclass('admin.files') IS NULL THEN
|
|
12
|
+
ALTER TABLE crm.files SET SCHEMA admin;
|
|
13
|
+
END IF;
|
|
14
|
+
END
|
|
15
|
+
$$;
|
|
16
|
+
|
|
17
|
+
ALTER INDEX IF EXISTS crm_notes_resource_idx RENAME TO admin_notes_resource_idx;
|
|
18
18
|
ALTER INDEX IF EXISTS crm_notes_uid_idx RENAME TO admin_notes_uid_idx;
|
|
@@ -0,0 +1,5 @@
|
|
|
1
|
+
|
|
2
|
+
alter table admin.files add column if not exists mime_type text;
|
|
3
|
+
alter table admin.files add column if not exists status text default 'pending';
|
|
4
|
+
alter table admin.files add column if not exists expires_at timestamptz default now() + interval '1 day';
|
|
5
|
+
alter table admin.files add column if not exists field_name text;
|
|
@@ -1,19 +1,19 @@
|
|
|
1
|
-
CREATE SCHEMA IF NOT EXISTS admin;
|
|
2
|
-
|
|
3
|
-
CREATE TABLE IF NOT EXISTS admin.settings (
|
|
4
|
-
id text PRIMARY KEY DEFAULT next_id(),
|
|
5
|
-
resource text NOT NULL DEFAULT 'system',
|
|
6
|
-
resource_id text,
|
|
7
|
-
key text NOT NULL,
|
|
8
|
-
value jsonb,
|
|
9
|
-
updated_by text,
|
|
10
|
-
updated_at timestamptz NOT NULL DEFAULT now(),
|
|
11
|
-
created_by text,
|
|
12
|
-
created_at timestamptz NOT NULL DEFAULT now()
|
|
13
|
-
);
|
|
14
|
-
|
|
15
|
-
DROP INDEX IF EXISTS settings_resource_key_uidx;
|
|
16
|
-
|
|
17
|
-
CREATE UNIQUE INDEX settings_resource_key_uidx
|
|
18
|
-
ON admin.settings (resource, resource_id, key)
|
|
1
|
+
CREATE SCHEMA IF NOT EXISTS admin;
|
|
2
|
+
|
|
3
|
+
CREATE TABLE IF NOT EXISTS admin.settings (
|
|
4
|
+
id text PRIMARY KEY DEFAULT next_id(),
|
|
5
|
+
resource text NOT NULL DEFAULT 'system',
|
|
6
|
+
resource_id text,
|
|
7
|
+
key text NOT NULL,
|
|
8
|
+
value jsonb,
|
|
9
|
+
updated_by text,
|
|
10
|
+
updated_at timestamptz NOT NULL DEFAULT now(),
|
|
11
|
+
created_by text,
|
|
12
|
+
created_at timestamptz NOT NULL DEFAULT now()
|
|
13
|
+
);
|
|
14
|
+
|
|
15
|
+
DROP INDEX IF EXISTS settings_resource_key_uidx;
|
|
16
|
+
|
|
17
|
+
CREATE UNIQUE INDEX settings_resource_key_uidx
|
|
18
|
+
ON admin.settings (resource, resource_id, key)
|
|
19
19
|
NULLS NOT DISTINCT;
|