@galadrim/galadmin 0.1.54 → 0.1.55

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.
@@ -280,7 +280,14 @@ export type Config = {
280
280
  password: string;
281
281
  };
282
282
  authRoles?: AuthRole[];
283
- mysql: {
283
+ mysql?: {
284
+ host: string;
285
+ user: string;
286
+ password: string;
287
+ database: string;
288
+ port?: number;
289
+ };
290
+ postgresql?: {
284
291
  host: string;
285
292
  user: string;
286
293
  password: string;
@@ -1,5 +1,6 @@
1
1
  export default class dbManager {
2
2
  _db: any;
3
+ dbType: any;
3
4
  init(config: any): void;
4
5
  query(queryString: any, args?: any[]): Promise<any>;
5
6
  }
@@ -2,23 +2,72 @@
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
3
  const mysql = require("mysql");
4
4
  const mysql2 = require("mysql2");
5
+ const pg = require("pg");
6
+ function convertQuery(mysqlQuery, params) {
7
+ let pgQuery = '';
8
+ let pgParams = [];
9
+ let paramIndex = 1;
10
+ let charIndex = 0;
11
+ while (charIndex < mysqlQuery.length) {
12
+ if (mysqlQuery.charAt(charIndex) === '?' && mysqlQuery.charAt(charIndex + 1) === '?') {
13
+ pgQuery += params.shift();
14
+ charIndex += 2;
15
+ }
16
+ else if (mysqlQuery.charAt(charIndex) === '?') {
17
+ pgQuery += `$${paramIndex++}`;
18
+ pgParams.push(params.shift());
19
+ charIndex++;
20
+ }
21
+ else {
22
+ pgQuery += mysqlQuery.charAt(charIndex);
23
+ charIndex++;
24
+ }
25
+ }
26
+ return {
27
+ pgQuery,
28
+ pgParams,
29
+ };
30
+ }
5
31
  class dbManager {
6
32
  init(config) {
7
- this._db = (config.useMysql2 ? mysql2 : mysql).createPool({
8
- connectionLimit: 10,
9
- host: config.mysql.host,
10
- user: config.mysql.user,
11
- password: config.mysql.password,
12
- database: config.mysql.database,
13
- port: config.mysql.port || 3306,
14
- dateStrings: true,
15
- multipleStatements: true
16
- });
33
+ if (config.mysql) {
34
+ this._db = (config.useMysql2 ? mysql2 : mysql).createPool({
35
+ connectionLimit: 10,
36
+ host: config.mysql.host,
37
+ user: config.mysql.user,
38
+ password: config.mysql.password,
39
+ database: config.mysql.database,
40
+ port: config.mysql.port || 3306,
41
+ dateStrings: true,
42
+ multipleStatements: true
43
+ });
44
+ this.dbType = "MYSQL";
45
+ }
46
+ else if (config.postgresql) {
47
+ this._db = new pg.Pool({
48
+ host: config.postgresql.host,
49
+ user: config.postgresql.user,
50
+ password: config.postgresql.password,
51
+ database: config.postgresql.database,
52
+ port: config.postgresql.port || 5432,
53
+ });
54
+ this.dbType = "POSTGRESQL";
55
+ }
17
56
  }
18
57
  async query(queryString, args = []) {
19
58
  return new Promise((resolve, reject) => {
20
- this._db.query(queryString, args, function (err, rows, fields) {
21
- resolve({ err, rows, fields });
59
+ if (this.dbType === "POSTGRESQL") {
60
+ const result = convertQuery(queryString, args);
61
+ queryString = result.pgQuery;
62
+ args = result.pgParams;
63
+ }
64
+ this._db.query(queryString, args, (a, b, c) => {
65
+ if (this.dbType === "MYSQL") {
66
+ resolve({ err: a, rows: b, fields: c });
67
+ }
68
+ else if (this.dbType === "POSTGRESQL") {
69
+ resolve({ err: a, rows: b === null || b === void 0 ? void 0 : b.rows, fields: b === null || b === void 0 ? void 0 : b.fields });
70
+ }
22
71
  });
23
72
  });
24
73
  }
@@ -1 +1 @@
1
- {"version":3,"file":"dbManager.js","sourceRoot":"","sources":["../../src/utils/dbManager.ts"],"names":[],"mappings":";;AAAA,+BAA+B;AAC/B,iCAAiC;AAEjC,MAAqB,SAAS;IAG1B,IAAI,CAAC,MAAM;QACP,IAAI,CAAC,GAAG,GAAG,CAAC,MAAM,CAAC,SAAS,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,UAAU,CAAC;YACtD,eAAe,EAAE,EAAE;YACnB,IAAI,EAAE,MAAM,CAAC,KAAK,CAAC,IAAI;YACvB,IAAI,EAAE,MAAM,CAAC,KAAK,CAAC,IAAI;YACvB,QAAQ,EAAE,MAAM,CAAC,KAAK,CAAC,QAAQ;YAC/B,QAAQ,EAAE,MAAM,CAAC,KAAK,CAAC,QAAQ;YAC/B,IAAI,EAAE,MAAM,CAAC,KAAK,CAAC,IAAI,IAAI,IAAI;YAC/B,WAAW,EAAE,IAAI;YACjB,kBAAkB,EAAE,IAAI;SAC3B,CAAC,CAAC;IACP,CAAC;IAED,KAAK,CAAC,KAAK,CAAC,WAAW,EAAE,IAAI,GAAG,EAAE;QAC9B,OAAO,IAAI,OAAO,CAAC,CAAC,OAAO,EAAE,MAAM,EAAE,EAAE;YACnC,IAAI,CAAC,GAAG,CAAC,KAAK,CAAC,WAAW,EAAE,IAAI,EAAE,UAAU,GAAG,EAAE,IAAI,EAAE,MAAM;gBACzD,OAAO,CAAC,EAAE,GAAG,EAAE,IAAI,EAAE,MAAM,EAAE,CAAC,CAAA;YAClC,CAAC,CAAC,CAAC;QACP,CAAC,CAAC,CAAC;IACP,CAAC;CACJ;AAvBD,4BAuBC"}
1
+ {"version":3,"file":"dbManager.js","sourceRoot":"","sources":["../../src/utils/dbManager.ts"],"names":[],"mappings":";;AAAA,+BAA+B;AAC/B,iCAAiC;AACjC,yBAAyB;AAEzB,SAAS,YAAY,CAAC,UAAU,EAAE,MAAM;IACpC,IAAI,OAAO,GAAG,EAAE,CAAC;IACjB,IAAI,QAAQ,GAAG,EAAE,CAAC;IAElB,IAAI,UAAU,GAAG,CAAC,CAAC;IACnB,IAAI,SAAS,GAAG,CAAC,CAAC;IAElB,OAAO,SAAS,GAAG,UAAU,CAAC,MAAM,EAAE;QAClC,IAAI,UAAU,CAAC,MAAM,CAAC,SAAS,CAAC,KAAK,GAAG,IAAI,UAAU,CAAC,MAAM,CAAC,SAAS,GAAG,CAAC,CAAC,KAAK,GAAG,EAAE;YAElF,OAAO,IAAI,MAAM,CAAC,KAAK,EAAE,CAAC;YAC1B,SAAS,IAAI,CAAC,CAAC;SAClB;aAAM,IAAI,UAAU,CAAC,MAAM,CAAC,SAAS,CAAC,KAAK,GAAG,EAAE;YAE7C,OAAO,IAAI,IAAI,UAAU,EAAE,EAAE,CAAC;YAC9B,QAAQ,CAAC,IAAI,CAAC,MAAM,CAAC,KAAK,EAAE,CAAC,CAAC;YAC9B,SAAS,EAAE,CAAC;SACf;aAAM;YACH,OAAO,IAAI,UAAU,CAAC,MAAM,CAAC,SAAS,CAAC,CAAC;YACxC,SAAS,EAAE,CAAC;SACf;KACJ;IAED,OAAO;QACH,OAAO;QACP,QAAQ;KACX,CAAC;AACN,CAAC;AAED,MAAqB,SAAS;IAI1B,IAAI,CAAC,MAAM;QACP,IAAI,MAAM,CAAC,KAAK,EAAE;YACd,IAAI,CAAC,GAAG,GAAG,CAAC,MAAM,CAAC,SAAS,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,UAAU,CAAC;gBACtD,eAAe,EAAE,EAAE;gBACnB,IAAI,EAAE,MAAM,CAAC,KAAK,CAAC,IAAI;gBACvB,IAAI,EAAE,MAAM,CAAC,KAAK,CAAC,IAAI;gBACvB,QAAQ,EAAE,MAAM,CAAC,KAAK,CAAC,QAAQ;gBAC/B,QAAQ,EAAE,MAAM,CAAC,KAAK,CAAC,QAAQ;gBAC/B,IAAI,EAAE,MAAM,CAAC,KAAK,CAAC,IAAI,IAAI,IAAI;gBAC/B,WAAW,EAAE,IAAI;gBACjB,kBAAkB,EAAE,IAAI;aAC3B,CAAC,CAAC;YACH,IAAI,CAAC,MAAM,GAAG,OAAO,CAAC;SACzB;aAAM,IAAI,MAAM,CAAC,UAAU,EAAE;YAC1B,IAAI,CAAC,GAAG,GAAG,IAAI,EAAE,CAAC,IAAI,CAAC;gBACnB,IAAI,EAAE,MAAM,CAAC,UAAU,CAAC,IAAI;gBAC5B,IAAI,EAAE,MAAM,CAAC,UAAU,CAAC,IAAI;gBAC5B,QAAQ,EAAE,MAAM,CAAC,UAAU,CAAC,QAAQ;gBACpC,QAAQ,EAAE,MAAM,CAAC,UAAU,CAAC,QAAQ;gBACpC,IAAI,EAAE,MAAM,CAAC,UAAU,CAAC,IAAI,IAAI,IAAI;aACvC,CAAC,CAAC;YACH,IAAI,CAAC,MAAM,GAAG,YAAY,CAAC;SAC9B;IACL,CAAC;IAED,KAAK,CAAC,KAAK,CAAC,WAAW,EAAE,IAAI,GAAG,EAAE;QAC9B,OAAO,IAAI,OAAO,CAAC,CAAC,OAAO,EAAE,MAAM,EAAE,EAAE;YACnC,IAAI,IAAI,CAAC,MAAM,KAAK,YAAY,EAAE;gBAC9B,MAAM,MAAM,GAAG,YAAY,CAAC,WAAW,EAAE,IAAI,CAAC,CAAC;gBAC/C,WAAW,GAAG,MAAM,CAAC,OAAO,CAAC;gBAC7B,IAAI,GAAG,MAAM,CAAC,QAAQ,CAAC;aAC1B;YACD,IAAI,CAAC,GAAG,CAAC,KAAK,CAAC,WAAW,EAAE,IAAI,EAAE,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,EAAE;gBAC1C,IAAI,IAAI,CAAC,MAAM,KAAK,OAAO,EAAE;oBACzB,OAAO,CAAC,EAAE,GAAG,EAAE,CAAC,EAAE,IAAI,EAAE,CAAC,EAAE,MAAM,EAAE,CAAC,EAAE,CAAC,CAAA;iBAC1C;qBAAM,IAAI,IAAI,CAAC,MAAM,KAAK,YAAY,EAAE;oBACrC,OAAO,CAAC,EAAE,GAAG,EAAE,CAAC,EAAE,IAAI,EAAE,CAAC,aAAD,CAAC,uBAAD,CAAC,CAAE,IAAI,EAAE,MAAM,EAAE,CAAC,aAAD,CAAC,uBAAD,CAAC,CAAE,MAAM,EAAE,CAAC,CAAA;iBACxD;YACL,CAAC,CAAC,CAAC;QACP,CAAC,CAAC,CAAC;IACP,CAAC;CACJ;AA7CD,4BA6CC"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@galadrim/galadmin",
3
- "version": "0.1.54",
3
+ "version": "0.1.55",
4
4
  "main": "dist/index.js",
5
5
  "scripts": {
6
6
  "test": "echo \"Error: no test specified\" && exit 1",
@@ -18,6 +18,7 @@
18
18
  "aws-sdk": "^2.958.0",
19
19
  "axios": "^0.21.1",
20
20
  "bcryptjs": "^2.4.3",
21
+ "connect-pg-simple": "^9.0.0",
21
22
  "express": "^4.17.1",
22
23
  "express-mysql-session": "^2.1.6",
23
24
  "express-session": "^1.17.2",
@@ -27,6 +28,7 @@
27
28
  "multiparty": "^4.2.2",
28
29
  "mysql": "^2.18.1",
29
30
  "mysql2": "^2.3.3",
31
+ "pg": "^8.11.3",
30
32
  "rollup": "^2.56.2",
31
33
  "serialize-javascript": "^6.0.0",
32
34
  "ssh2-sftp-client": "^9.0.4"
package/src/api.ts CHANGED
@@ -61,8 +61,8 @@ export default (db, config, user) => {
61
61
  queryString += ")"
62
62
  }
63
63
  const limit = params.allRecords ? 999999 : parseInt(params.limit)
64
- const query = params.customQuery || ("SELECT " + (params.selectExpression || "*") + " FROM ?? " + (params.join || "") + queryString + " " + (params.groupBy ? "GROUP BY " + params.groupBy : "") + (params.orderBy || params.primaryId ? " ORDER BY " + (params.orderBy || `${params.table}.${params.primaryId}`) : "") + (params.isDesc ? " DESC" : "") + " LIMIT ?, ?")
65
- const queryParams = [params.table, Math.max((params.page - 1) * limit, 0), limit]
64
+ const query = params.customQuery || ("SELECT " + (params.selectExpression || "*") + " FROM ?? " + (params.join || "") + queryString + " " + (params.groupBy ? "GROUP BY " + params.groupBy : "") + (params.orderBy || params.primaryId ? " ORDER BY " + (params.orderBy || `${params.table}.${params.primaryId}`) : "") + (params.isDesc ? " DESC" : "") + " LIMIT ? OFFSET ?")
65
+ const queryParams = [params.table, limit, Math.max((params.page - 1) * limit, 0)]
66
66
  const { err, rows } = await db.query(query, queryParams)
67
67
  if (err) {
68
68
  console.error(err)
@@ -695,7 +695,7 @@ export default (db, config, user) => {
695
695
 
696
696
 
697
697
  async function enrichConfig(config, db) {
698
- const { rows: info } = await db.query("SELECT * FROM information_schema.columns WHERE table_schema = ?", [config.mysql.database])
698
+ const { rows: info } = await db.query("SELECT * FROM information_schema.columns WHERE table_schema = ?", [config.mysql?.database || config.postgresql?.database])
699
699
  for (const view of config.views) {
700
700
  if (view.type == "table") {
701
701
  const tableName = view.tableName;
@@ -1 +1 @@
1
- [{"/home/runner/work/galadmin/galadmin/src/front/src/index.js":"1","/home/runner/work/galadmin/galadmin/src/front/src/App.js":"2","/home/runner/work/galadmin/galadmin/src/front/src/components/Sidebar.js":"3","/home/runner/work/galadmin/galadmin/src/front/src/components/RedirectToFirstView.js":"4","/home/runner/work/galadmin/galadmin/src/front/src/pages/CreateRecord.js":"5","/home/runner/work/galadmin/galadmin/src/front/src/pages/EditRecord.js":"6","/home/runner/work/galadmin/galadmin/src/front/src/pages/Records.js":"7","/home/runner/work/galadmin/galadmin/src/front/src/pages/Record.js":"8","/home/runner/work/galadmin/galadmin/src/front/src/pages/Login.js":"9","/home/runner/work/galadmin/galadmin/src/front/src/pages/Iframe.js":"10","/home/runner/work/galadmin/galadmin/src/front/src/pages/CustomView.js":"11","/home/runner/work/galadmin/galadmin/src/front/src/contexts/ConfigContext.js":"12","/home/runner/work/galadmin/galadmin/src/front/src/components/Input.js":"13","/home/runner/work/galadmin/galadmin/src/front/src/components/LabelTooltip.js":"14","/home/runner/work/galadmin/galadmin/src/front/src/components/DownloadButton.js":"15","/home/runner/work/galadmin/galadmin/src/front/src/components/AddFilterButton.js":"16","/home/runner/work/galadmin/galadmin/src/front/src/components/BulkActionsButton.js":"17","/home/runner/work/galadmin/galadmin/src/front/src/components/ActionsButton.js":"18","/home/runner/work/galadmin/galadmin/src/front/src/components/BackButton.js":"19","/home/runner/work/galadmin/galadmin/src/front/src/components/DownloadTablePanelButton.js":"20","/home/runner/work/galadmin/galadmin/src/front/src/utils/checkRequiredColumns.js":"21","/home/runner/work/galadmin/galadmin/src/front/src/utils/getFormattedValue.js":"22","/home/runner/work/galadmin/galadmin/src/front/src/components/panels/TablePanel.js":"23","/home/runner/work/galadmin/galadmin/src/front/src/components/panels/GalleryPanel.js":"24","/home/runner/work/galadmin/galadmin/src/front/src/components/panels/MapPanel.js":"25","/home/runner/work/galadmin/galadmin/src/front/src/components/CustomComponent.js":"26","/home/runner/work/galadmin/galadmin/src/front/src/components/OutsideClickHandler.js":"27","/home/runner/work/galadmin/galadmin/src/front/src/components/inputs/ColorInput.js":"28","/home/runner/work/galadmin/galadmin/src/front/src/components/inputs/RichTextInput.js":"29","/home/runner/work/galadmin/galadmin/src/front/src/components/inputs/BetterRichTextInput.js":"30","/home/runner/work/galadmin/galadmin/src/front/src/components/inputs/DatetimeInput.js":"31","/home/runner/work/galadmin/galadmin/src/front/src/components/inputs/AddressInput.js":"32","/home/runner/work/galadmin/galadmin/src/front/src/components/inputs/FileInput.js":"33","/home/runner/work/galadmin/galadmin/src/front/src/components/inputs/ForeignSelectInput.js":"34","/home/runner/work/galadmin/galadmin/src/front/src/components/inputs/ForeignDatalistInput.js":"35","/home/runner/work/galadmin/galadmin/src/front/src/utils/evalExpression.js":"36"},{"size":219,"mtime":1696791732659,"results":"37","hashOfConfig":"38"},{"size":2340,"mtime":1696791732659,"results":"39","hashOfConfig":"38"},{"size":4725,"mtime":1696791732659,"results":"40","hashOfConfig":"38"},{"size":524,"mtime":1696791732659,"results":"41","hashOfConfig":"38"},{"size":4255,"mtime":1696791732659,"results":"42","hashOfConfig":"38"},{"size":3733,"mtime":1696791732659,"results":"43","hashOfConfig":"38"},{"size":10243,"mtime":1696791732659,"results":"44","hashOfConfig":"38"},{"size":4225,"mtime":1696791732659,"results":"45","hashOfConfig":"38"},{"size":1135,"mtime":1696791732659,"results":"46","hashOfConfig":"38"},{"size":404,"mtime":1696791732659,"results":"47","hashOfConfig":"38"},{"size":454,"mtime":1696791732659,"results":"48","hashOfConfig":"38"},{"size":1022,"mtime":1696791732659,"results":"49","hashOfConfig":"38"},{"size":5021,"mtime":1696791732659,"results":"50","hashOfConfig":"38"},{"size":522,"mtime":1696791732659,"results":"51","hashOfConfig":"38"},{"size":895,"mtime":1696791732659,"results":"52","hashOfConfig":"38"},{"size":9821,"mtime":1696791732659,"results":"53","hashOfConfig":"38"},{"size":2656,"mtime":1696791732659,"results":"54","hashOfConfig":"38"},{"size":3169,"mtime":1696791732659,"results":"55","hashOfConfig":"38"},{"size":217,"mtime":1696791732659,"results":"56","hashOfConfig":"38"},{"size":1128,"mtime":1696791732659,"results":"57","hashOfConfig":"38"},{"size":778,"mtime":1696791732659,"results":"58","hashOfConfig":"38"},{"size":2698,"mtime":1696791732659,"results":"59","hashOfConfig":"38"},{"size":4606,"mtime":1696791732659,"results":"60","hashOfConfig":"38"},{"size":2656,"mtime":1696791732659,"results":"61","hashOfConfig":"38"},{"size":1192,"mtime":1696791732659,"results":"62","hashOfConfig":"38"},{"size":1662,"mtime":1696791732659,"results":"63","hashOfConfig":"38"},{"size":826,"mtime":1696791732659,"results":"64","hashOfConfig":"38"},{"size":894,"mtime":1696791732659,"results":"65","hashOfConfig":"38"},{"size":2091,"mtime":1696791732659,"results":"66","hashOfConfig":"38"},{"size":1458,"mtime":1696791732659,"results":"67","hashOfConfig":"38"},{"size":886,"mtime":1696791732659,"results":"68","hashOfConfig":"38"},{"size":3092,"mtime":1696791732659,"results":"69","hashOfConfig":"38"},{"size":3297,"mtime":1696791732659,"results":"70","hashOfConfig":"38"},{"size":1461,"mtime":1696791732659,"results":"71","hashOfConfig":"38"},{"size":2088,"mtime":1696791732659,"results":"72","hashOfConfig":"38"},{"size":530,"mtime":1696791732659,"results":"73","hashOfConfig":"38"},{"filePath":"74","messages":"75","suppressedMessages":"76","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},"1jd2669",{"filePath":"77","messages":"78","suppressedMessages":"79","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"80","messages":"81","suppressedMessages":"82","errorCount":0,"fatalErrorCount":0,"warningCount":4,"fixableErrorCount":0,"fixableWarningCount":0,"source":null},{"filePath":"83","messages":"84","suppressedMessages":"85","errorCount":0,"fatalErrorCount":0,"warningCount":1,"fixableErrorCount":0,"fixableWarningCount":0,"source":null},{"filePath":"86","messages":"87","suppressedMessages":"88","errorCount":0,"fatalErrorCount":0,"warningCount":1,"fixableErrorCount":0,"fixableWarningCount":0,"source":null},{"filePath":"89","messages":"90","suppressedMessages":"91","errorCount":0,"fatalErrorCount":0,"warningCount":1,"fixableErrorCount":0,"fixableWarningCount":0,"source":null},{"filePath":"92","messages":"93","suppressedMessages":"94","errorCount":0,"fatalErrorCount":0,"warningCount":4,"fixableErrorCount":0,"fixableWarningCount":0,"source":null},{"filePath":"95","messages":"96","suppressedMessages":"97","errorCount":0,"fatalErrorCount":0,"warningCount":2,"fixableErrorCount":0,"fixableWarningCount":0,"source":null},{"filePath":"98","messages":"99","suppressedMessages":"100","errorCount":0,"fatalErrorCount":0,"warningCount":2,"fixableErrorCount":0,"fixableWarningCount":0,"source":null},{"filePath":"101","messages":"102","suppressedMessages":"103","errorCount":0,"fatalErrorCount":0,"warningCount":2,"fixableErrorCount":0,"fixableWarningCount":0,"source":null},{"filePath":"104","messages":"105","suppressedMessages":"106","errorCount":0,"fatalErrorCount":0,"warningCount":1,"fixableErrorCount":0,"fixableWarningCount":0,"source":null},{"filePath":"107","messages":"108","suppressedMessages":"109","errorCount":0,"fatalErrorCount":0,"warningCount":1,"fixableErrorCount":0,"fixableWarningCount":0,"source":null},{"filePath":"110","messages":"111","suppressedMessages":"112","errorCount":0,"fatalErrorCount":0,"warningCount":1,"fixableErrorCount":0,"fixableWarningCount":0,"source":null},{"filePath":"113","messages":"114","suppressedMessages":"115","errorCount":0,"fatalErrorCount":0,"warningCount":1,"fixableErrorCount":0,"fixableWarningCount":0,"source":null},{"filePath":"116","messages":"117","suppressedMessages":"118","errorCount":0,"fatalErrorCount":0,"warningCount":1,"fixableErrorCount":0,"fixableWarningCount":0,"source":null},{"filePath":"119","messages":"120","suppressedMessages":"121","errorCount":0,"fatalErrorCount":0,"warningCount":2,"fixableErrorCount":0,"fixableWarningCount":0,"source":null},{"filePath":"122","messages":"123","suppressedMessages":"124","errorCount":0,"fatalErrorCount":0,"warningCount":1,"fixableErrorCount":0,"fixableWarningCount":0,"source":null},{"filePath":"125","messages":"126","suppressedMessages":"127","errorCount":0,"fatalErrorCount":0,"warningCount":1,"fixableErrorCount":0,"fixableWarningCount":0,"source":null},{"filePath":"128","messages":"129","suppressedMessages":"130","errorCount":0,"fatalErrorCount":0,"warningCount":1,"fixableErrorCount":0,"fixableWarningCount":0,"source":null},{"filePath":"131","messages":"132","suppressedMessages":"133","errorCount":0,"fatalErrorCount":0,"warningCount":1,"fixableErrorCount":0,"fixableWarningCount":0,"source":null},{"filePath":"134","messages":"135","suppressedMessages":"136","errorCount":0,"fatalErrorCount":0,"warningCount":2,"fixableErrorCount":0,"fixableWarningCount":0,"source":null},{"filePath":"137","messages":"138","suppressedMessages":"139","errorCount":0,"fatalErrorCount":0,"warningCount":4,"fixableErrorCount":0,"fixableWarningCount":1,"source":null},{"filePath":"140","messages":"141","suppressedMessages":"142","errorCount":0,"fatalErrorCount":0,"warningCount":2,"fixableErrorCount":0,"fixableWarningCount":0,"source":null},{"filePath":"143","messages":"144","suppressedMessages":"145","errorCount":0,"fatalErrorCount":0,"warningCount":5,"fixableErrorCount":0,"fixableWarningCount":1,"source":null},{"filePath":"146","messages":"147","suppressedMessages":"148","errorCount":0,"fatalErrorCount":0,"warningCount":2,"fixableErrorCount":0,"fixableWarningCount":0,"source":null},{"filePath":"149","messages":"150","suppressedMessages":"151","errorCount":0,"fatalErrorCount":0,"warningCount":2,"fixableErrorCount":0,"fixableWarningCount":0,"source":null},{"filePath":"152","messages":"153","suppressedMessages":"154","errorCount":0,"fatalErrorCount":0,"warningCount":1,"fixableErrorCount":0,"fixableWarningCount":0,"source":null},{"filePath":"155","messages":"156","suppressedMessages":"157","errorCount":0,"fatalErrorCount":0,"warningCount":3,"fixableErrorCount":0,"fixableWarningCount":0,"source":null},{"filePath":"158","messages":"159","suppressedMessages":"160","errorCount":0,"fatalErrorCount":0,"warningCount":2,"fixableErrorCount":0,"fixableWarningCount":0,"source":null},{"filePath":"161","messages":"162","suppressedMessages":"163","errorCount":0,"fatalErrorCount":0,"warningCount":1,"fixableErrorCount":0,"fixableWarningCount":0,"source":null},{"filePath":"164","messages":"165","suppressedMessages":"166","errorCount":0,"fatalErrorCount":0,"warningCount":2,"fixableErrorCount":0,"fixableWarningCount":0,"source":null},{"filePath":"167","messages":"168","suppressedMessages":"169","errorCount":0,"fatalErrorCount":0,"warningCount":4,"fixableErrorCount":0,"fixableWarningCount":0,"source":null},{"filePath":"170","messages":"171","suppressedMessages":"172","errorCount":0,"fatalErrorCount":0,"warningCount":1,"fixableErrorCount":0,"fixableWarningCount":0,"source":null},{"filePath":"173","messages":"174","suppressedMessages":"175","errorCount":0,"fatalErrorCount":0,"warningCount":3,"fixableErrorCount":0,"fixableWarningCount":0,"source":null},{"filePath":"176","messages":"177","suppressedMessages":"178","errorCount":0,"fatalErrorCount":0,"warningCount":4,"fixableErrorCount":0,"fixableWarningCount":0,"source":null},{"filePath":"179","messages":"180","suppressedMessages":"181","errorCount":0,"fatalErrorCount":0,"warningCount":2,"fixableErrorCount":0,"fixableWarningCount":0,"source":null},"/home/runner/work/galadmin/galadmin/src/front/src/index.js",[],[],"/home/runner/work/galadmin/galadmin/src/front/src/App.js",[],[],"/home/runner/work/galadmin/galadmin/src/front/src/components/Sidebar.js",["182","183","184","185"],[],"/home/runner/work/galadmin/galadmin/src/front/src/components/RedirectToFirstView.js",["186"],[],"/home/runner/work/galadmin/galadmin/src/front/src/pages/CreateRecord.js",["187"],[],"/home/runner/work/galadmin/galadmin/src/front/src/pages/EditRecord.js",["188"],[],"/home/runner/work/galadmin/galadmin/src/front/src/pages/Records.js",["189","190","191","192"],[],"/home/runner/work/galadmin/galadmin/src/front/src/pages/Record.js",["193","194"],[],"/home/runner/work/galadmin/galadmin/src/front/src/pages/Login.js",["195","196"],[],"/home/runner/work/galadmin/galadmin/src/front/src/pages/Iframe.js",["197","198"],[],"/home/runner/work/galadmin/galadmin/src/front/src/pages/CustomView.js",["199"],[],"/home/runner/work/galadmin/galadmin/src/front/src/contexts/ConfigContext.js",["200"],[],"/home/runner/work/galadmin/galadmin/src/front/src/components/Input.js",["201"],[],"/home/runner/work/galadmin/galadmin/src/front/src/components/LabelTooltip.js",["202"],[],"/home/runner/work/galadmin/galadmin/src/front/src/components/DownloadButton.js",["203"],[],"/home/runner/work/galadmin/galadmin/src/front/src/components/AddFilterButton.js",["204","205"],[],"/home/runner/work/galadmin/galadmin/src/front/src/components/BulkActionsButton.js",["206"],[],"/home/runner/work/galadmin/galadmin/src/front/src/components/ActionsButton.js",["207"],[],"/home/runner/work/galadmin/galadmin/src/front/src/components/BackButton.js",["208"],[],"/home/runner/work/galadmin/galadmin/src/front/src/components/DownloadTablePanelButton.js",["209"],[],"/home/runner/work/galadmin/galadmin/src/front/src/utils/checkRequiredColumns.js",["210","211"],[],"/home/runner/work/galadmin/galadmin/src/front/src/utils/getFormattedValue.js",["212","213","214","215"],[],"/home/runner/work/galadmin/galadmin/src/front/src/components/panels/TablePanel.js",["216","217"],[],"/home/runner/work/galadmin/galadmin/src/front/src/components/panels/GalleryPanel.js",["218","219","220","221","222"],[],"/home/runner/work/galadmin/galadmin/src/front/src/components/panels/MapPanel.js",["223","224"],[],"/home/runner/work/galadmin/galadmin/src/front/src/components/CustomComponent.js",["225","226"],[],"/home/runner/work/galadmin/galadmin/src/front/src/components/OutsideClickHandler.js",["227"],[],"/home/runner/work/galadmin/galadmin/src/front/src/components/inputs/ColorInput.js",["228","229","230"],[],"/home/runner/work/galadmin/galadmin/src/front/src/components/inputs/RichTextInput.js",["231","232"],[],"/home/runner/work/galadmin/galadmin/src/front/src/components/inputs/BetterRichTextInput.js",["233"],[],"/home/runner/work/galadmin/galadmin/src/front/src/components/inputs/DatetimeInput.js",["234","235"],[],"/home/runner/work/galadmin/galadmin/src/front/src/components/inputs/AddressInput.js",["236","237","238","239"],[],"/home/runner/work/galadmin/galadmin/src/front/src/components/inputs/FileInput.js",["240"],[],"/home/runner/work/galadmin/galadmin/src/front/src/components/inputs/ForeignSelectInput.js",["241","242","243"],[],"/home/runner/work/galadmin/galadmin/src/front/src/components/inputs/ForeignDatalistInput.js",["244","245","246","247"],[],"/home/runner/work/galadmin/galadmin/src/front/src/utils/evalExpression.js",["248","249"],[],{"ruleId":"250","severity":1,"message":"251","line":19,"column":1,"nodeType":"252","endLine":104,"endColumn":2},{"ruleId":"253","severity":1,"message":"254","line":26,"column":28,"nodeType":"255","endLine":26,"endColumn":66},{"ruleId":"256","severity":1,"message":"257","line":29,"column":70,"nodeType":"258","messageId":"259","endLine":29,"endColumn":72},{"ruleId":"260","severity":1,"message":"261","line":79,"column":80,"nodeType":"262","messageId":"263","endLine":79,"endColumn":82},{"ruleId":"250","severity":1,"message":"251","line":7,"column":1,"nodeType":"252","endLine":24,"endColumn":2},{"ruleId":"250","severity":1,"message":"251","line":12,"column":1,"nodeType":"252","endLine":102,"endColumn":2},{"ruleId":"250","severity":1,"message":"251","line":12,"column":1,"nodeType":"252","endLine":97,"endColumn":2},{"ruleId":"250","severity":1,"message":"251","line":21,"column":1,"nodeType":"252","endLine":220,"endColumn":2},{"ruleId":"264","severity":1,"message":"265","line":50,"column":8,"nodeType":"266","endLine":50,"endColumn":19,"suggestions":"267"},{"ruleId":"264","severity":1,"message":"268","line":61,"column":8,"nodeType":"266","endLine":61,"endColumn":79,"suggestions":"269"},{"ruleId":"260","severity":1,"message":"261","line":181,"column":66,"nodeType":"262","messageId":"263","endLine":181,"endColumn":68},{"ruleId":"250","severity":1,"message":"251","line":16,"column":1,"nodeType":"252","endLine":89,"endColumn":2},{"ruleId":"264","severity":1,"message":"268","line":26,"column":8,"nodeType":"266","endLine":26,"endColumn":29,"suggestions":"270"},{"ruleId":"250","severity":1,"message":"251","line":5,"column":1,"nodeType":"252","endLine":33,"endColumn":2},{"ruleId":"253","severity":1,"message":"254","line":23,"column":21,"nodeType":"255","endLine":23,"endColumn":57},{"ruleId":"250","severity":1,"message":"251","line":9,"column":1,"nodeType":"252","endLine":19,"endColumn":2},{"ruleId":"271","severity":1,"message":"272","line":16,"column":13,"nodeType":"255","endLine":16,"endColumn":36},{"ruleId":"250","severity":1,"message":"251","line":6,"column":1,"nodeType":"252","endLine":15,"endColumn":2},{"ruleId":"273","severity":1,"message":"274","line":11,"column":29,"nodeType":"275","messageId":"263","endLine":11,"endColumn":33},{"ruleId":"250","severity":1,"message":"251","line":10,"column":1,"nodeType":"252","endLine":149,"endColumn":3},{"ruleId":"250","severity":1,"message":"251","line":3,"column":1,"nodeType":"252","endLine":17,"endColumn":2},{"ruleId":"250","severity":1,"message":"251","line":5,"column":1,"nodeType":"252","endLine":30,"endColumn":2},{"ruleId":"250","severity":1,"message":"251","line":6,"column":1,"nodeType":"252","endLine":196,"endColumn":2},{"ruleId":"264","severity":1,"message":"276","line":20,"column":8,"nodeType":"266","endLine":20,"endColumn":15,"suggestions":"277"},{"ruleId":"250","severity":1,"message":"251","line":6,"column":1,"nodeType":"252","endLine":68,"endColumn":2},{"ruleId":"250","severity":1,"message":"251","line":10,"column":1,"nodeType":"252","endLine":85,"endColumn":2},{"ruleId":"250","severity":1,"message":"251","line":6,"column":1,"nodeType":"252","endLine":12,"endColumn":2},{"ruleId":"250","severity":1,"message":"251","line":4,"column":1,"nodeType":"252","endLine":28,"endColumn":2},{"ruleId":"250","severity":1,"message":"251","line":5,"column":1,"nodeType":"252","endLine":22,"endColumn":2},{"ruleId":"260","severity":1,"message":"261","line":9,"column":44,"nodeType":"262","messageId":"263","endLine":9,"endColumn":46},{"ruleId":"250","severity":1,"message":"251","line":6,"column":1,"nodeType":"252","endLine":51,"endColumn":2},{"ruleId":"278","severity":1,"message":"279","line":19,"column":13,"nodeType":"255","messageId":"280","endLine":19,"endColumn":48,"fix":"281"},{"ruleId":"253","severity":1,"message":"254","line":20,"column":17,"nodeType":"255","endLine":20,"endColumn":127},{"ruleId":"260","severity":1,"message":"261","line":46,"column":93,"nodeType":"262","messageId":"263","endLine":46,"endColumn":95},{"ruleId":"250","severity":1,"message":"251","line":10,"column":1,"nodeType":"252","endLine":112,"endColumn":2},{"ruleId":"264","severity":1,"message":"268","line":18,"column":8,"nodeType":"266","endLine":18,"endColumn":16,"suggestions":"282"},{"ruleId":"250","severity":1,"message":"251","line":8,"column":1,"nodeType":"252","endLine":76,"endColumn":2},{"ruleId":"283","severity":1,"message":"284","line":10,"column":11,"nodeType":"285","messageId":"286","endLine":10,"endColumn":18},{"ruleId":"264","severity":1,"message":"268","line":15,"column":8,"nodeType":"266","endLine":15,"endColumn":29,"suggestions":"287"},{"ruleId":"278","severity":1,"message":"279","line":61,"column":29,"nodeType":"255","messageId":"280","endLine":61,"endColumn":89,"fix":"288"},{"ruleId":"253","severity":1,"message":"254","line":62,"column":33,"nodeType":"255","endLine":66,"endColumn":35},{"ruleId":"250","severity":1,"message":"251","line":4,"column":1,"nodeType":"252","endLine":42,"endColumn":2},{"ruleId":"264","severity":1,"message":"289","line":23,"column":8,"nodeType":"266","endLine":23,"endColumn":31,"suggestions":"290"},{"ruleId":"291","severity":1,"message":"292","line":17,"column":27,"nodeType":"275","messageId":"293","endLine":17,"endColumn":69},{"ruleId":"294","severity":1,"message":"295","line":20,"column":13,"nodeType":"296","messageId":"297","endLine":20,"endColumn":47},{"ruleId":"264","severity":1,"message":"298","line":19,"column":8,"nodeType":"266","endLine":19,"endColumn":13,"suggestions":"299"},{"ruleId":"250","severity":1,"message":"251","line":3,"column":1,"nodeType":"252","endLine":29,"endColumn":2},{"ruleId":"264","severity":1,"message":"300","line":19,"column":43,"nodeType":"285","endLine":19,"endColumn":50},{"ruleId":"264","severity":1,"message":"301","line":20,"column":8,"nodeType":"266","endLine":20,"endColumn":29,"suggestions":"302"},{"ruleId":"250","severity":1,"message":"251","line":7,"column":1,"nodeType":"252","endLine":58,"endColumn":3},{"ruleId":"264","severity":1,"message":"303","line":51,"column":8,"nodeType":"266","endLine":51,"endColumn":32,"suggestions":"304"},{"ruleId":"250","severity":1,"message":"251","line":7,"column":1,"nodeType":"252","endLine":41,"endColumn":3},{"ruleId":"250","severity":1,"message":"251","line":3,"column":1,"nodeType":"252","endLine":26,"endColumn":2},{"ruleId":"264","severity":1,"message":"305","line":19,"column":8,"nodeType":"266","endLine":19,"endColumn":28,"suggestions":"306"},{"ruleId":"250","severity":1,"message":"251","line":3,"column":1,"nodeType":"252","endLine":67,"endColumn":2},{"ruleId":"264","severity":1,"message":"307","line":45,"column":8,"nodeType":"266","endLine":45,"endColumn":33,"suggestions":"308"},{"ruleId":"264","severity":1,"message":"309","line":54,"column":39,"nodeType":"285","endLine":54,"endColumn":46},{"ruleId":"264","severity":1,"message":"310","line":55,"column":8,"nodeType":"266","endLine":55,"endColumn":33,"suggestions":"311"},{"ruleId":"250","severity":1,"message":"251","line":8,"column":1,"nodeType":"252","endLine":85,"endColumn":2},{"ruleId":"250","severity":1,"message":"251","line":7,"column":1,"nodeType":"252","endLine":46,"endColumn":2},{"ruleId":"264","severity":1,"message":"312","line":23,"column":8,"nodeType":"266","endLine":23,"endColumn":10,"suggestions":"313"},{"ruleId":"260","severity":1,"message":"261","line":32,"column":50,"nodeType":"262","messageId":"263","endLine":32,"endColumn":52},{"ruleId":"250","severity":1,"message":"251","line":7,"column":1,"nodeType":"252","endLine":64,"endColumn":2},{"ruleId":"264","severity":1,"message":"314","line":22,"column":8,"nodeType":"266","endLine":22,"endColumn":15,"suggestions":"315"},{"ruleId":"264","severity":1,"message":"316","line":31,"column":29,"nodeType":"285","endLine":31,"endColumn":36},{"ruleId":"264","severity":1,"message":"317","line":32,"column":8,"nodeType":"266","endLine":32,"endColumn":23,"suggestions":"318"},{"ruleId":"250","severity":1,"message":"251","line":2,"column":1,"nodeType":"252","endLine":14,"endColumn":2},{"ruleId":"273","severity":1,"message":"274","line":8,"column":16,"nodeType":"275","messageId":"263","endLine":8,"endColumn":20},"import/no-anonymous-default-export","Assign arrow function to a variable before exporting as module default","ExportDefaultDeclaration","jsx-a11y/alt-text","img elements must have an alt prop, either with meaningful text, or an empty string for decorative images.","JSXOpeningElement","array-callback-return","Array.prototype.map() expects a value to be returned at the end of arrow function.","ArrowFunctionExpression","expectedAtEnd","eqeqeq","Expected '===' and instead saw '=='.","BinaryExpression","unexpected","react-hooks/exhaustive-deps","React Hook useEffect has missing dependencies: 'currentFilters.length' and 'selectedRecordIds.length'. Either include them or remove the dependency array.","ArrayExpression",["319"],"React Hook useEffect has a missing dependency: 'refreshData'. Either include it or remove the dependency array.",["320"],["321"],"jsx-a11y/iframe-has-title","<iframe> elements must have a unique title property.","no-eval","eval can be harmful.","CallExpression","React Hook useEffect has missing dependencies: 'column?.dataType' and 'column.options'. Either include them or remove the dependency array.",["322"],"react/jsx-no-target-blank","Using target=\"_blank\" without rel=\"noreferrer\" (which implies rel=\"noopener\") is a security risk in older browsers: see https://mathiasbynens.github.io/rel-noopener/#recommendations","noTargetBlankWithoutNoreferrer",{"range":"323","text":"324"},["325"],"no-unused-vars","'history' is assigned a value but never used.","Identifier","unusedVar",["326"],{"range":"327","text":"324"},"React Hook useEffect has missing dependencies: 'panel.latitudeField', 'panel.longitudeField', 'panel.query', 'panel.zoom', and 'view.primaryId'. Either include them or remove the dependency array. Outer scope values like 'window.google' aren't valid dependencies because mutating them doesn't re-render the component.",["328"],"no-new-func","The Function constructor is eval.","noFunctionConstructor","no-throw-literal","Expected an error object to be thrown.","ThrowStatement","object","React Hook useEffect has a missing dependency: 'handler'. Either include it or remove the dependency array. If 'handler' changes too often, find the parent component that defines it and wrap that definition in useCallback.",["329"],"The ref value 'colorPicker.current' will likely have changed by the time this effect cleanup function runs. If this ref points to a node rendered by React, copy 'colorPicker.current' to a variable inside the effect, and use that variable in the cleanup function.","React Hook useEffect has missing dependencies: 'column.name', 'initialData', and 'onChange'. Either include them or remove the dependency array. Mutable values like 'colorPicker.current' aren't valid dependencies because mutating them doesn't re-render the component.",["330"],"React Hook useEffect has missing dependencies: 'column.contentField', 'column.htmlField', 'initialData', and 'onChange'. Either include them or remove the dependency array. Mutable values like 'quillContainer.current' aren't valid dependencies because mutating them doesn't re-render the component.",["331"],"React Hook useEffect has missing dependencies: 'column.name', 'initialData', 'onChange', and 'withTime'. Either include them or remove the dependency array. Mutable values like 'datepicker.current' aren't valid dependencies because mutating them doesn't re-render the component.",["332"],"React Hook useEffect has missing dependencies: 'column' and 'onChange'. Either include them or remove the dependency array. Mutable values like 'googleMapsInput.current' aren't valid dependencies because mutating them doesn't re-render the component.",["333"],"The ref value 'googleMapsInput.current' will likely have changed by the time this effect cleanup function runs. If this ref points to a node rendered by React, copy 'googleMapsInput.current' to a variable inside the effect, and use that variable in the cleanup function.","React Hook useEffect has an unnecessary dependency: 'googleMapsInput.current'. Either exclude it or remove the dependency array. Mutable values like 'googleMapsInput.current' aren't valid dependencies because mutating them doesn't re-render the component.",["334"],"React Hook useEffect has missing dependencies: 'column.__id__', 'column.name', 'column.optional', 'initialData', 'onChange', and 'viewIndex'. Either include them or remove the dependency array. If 'onChange' changes too often, find the parent component that defines it and wrap that definition in useCallback.",["335"],"React Hook useEffect has missing dependencies: 'column.__id__' and 'viewIndex'. Either include them or remove the dependency array.",["336"],"The ref value 'input.current' will likely have changed by the time this effect cleanup function runs. If this ref points to a node rendered by React, copy 'input.current' to a variable inside the effect, and use that variable in the cleanup function.","React Hook useEffect has an unnecessary dependency: 'input.current'. Either exclude it or remove the dependency array. Mutable values like 'input.current' aren't valid dependencies because mutating them doesn't re-render the component.",["337"],{"desc":"338","fix":"339"},{"desc":"340","fix":"341"},{"desc":"342","fix":"343"},{"desc":"344","fix":"345"},[1055,1055]," rel=\"noreferrer\"",{"desc":"346","fix":"347"},{"desc":"348","fix":"349"},[2020,2020],{"desc":"350","fix":"351"},{"desc":"352","fix":"353"},{"desc":"354","fix":"355"},{"desc":"356","fix":"357"},{"desc":"358","fix":"359"},{"desc":"360","fix":"361"},{"desc":"362","fix":"363"},{"desc":"364","fix":"365"},{"desc":"366","fix":"367"},{"desc":"362","fix":"368"},"Update the dependencies array to be: [currentFilters.length, selectedRecordIds.length, viewIndex]",{"range":"369","text":"370"},"Update the dependencies array to be: [viewIndex, subviewIndex, page, query, currentFilters, orderBy, isDesc, refreshData]",{"range":"371","text":"372"},"Update the dependencies array to be: [viewIndex, recordId, refreshData]",{"range":"373","text":"374"},"Update the dependencies array to be: [column?.dataType, column.options, field]",{"range":"375","text":"376"},"Update the dependencies array to be: [record, refreshData]",{"range":"377","text":"378"},"Update the dependencies array to be: [panel.query, record, refreshData]",{"range":"379","text":"380"},"Update the dependencies array to be: [panel.latitudeField, panel.longitudeField, panel.query, panel.zoom, record, view.primaryId]",{"range":"381","text":"382"},"Update the dependencies array to be: [handler, ref]",{"range":"383","text":"384"},"Update the dependencies array to be: [column.name, initialData, onChange]",{"range":"385","text":"386"},"Update the dependencies array to be: [column.contentField, column.htmlField, initialData, onChange]",{"range":"387","text":"388"},"Update the dependencies array to be: [column.name, initialData, onChange, withTime]",{"range":"389","text":"390"},"Update the dependencies array to be: [column, onChange]",{"range":"391","text":"392"},"Update the dependencies array to be: []",{"range":"393","text":"394"},"Update the dependencies array to be: [column.__id__, column.name, column.optional, initialData, onChange, viewIndex]",{"range":"395","text":"396"},"Update the dependencies array to be: [column.__id__, query, viewIndex]",{"range":"397","text":"398"},{"range":"399","text":"394"},[1656,1667],"[currentFilters.length, selectedRecordIds.length, viewIndex]",[1896,1967],"[viewIndex, subviewIndex, page, query, currentFilters, orderBy, isDesc, refreshData]",[941,962],"[viewIndex, recordId, refreshData]",[808,815],"[column?.dataType, column.options, field]",[542,550],"[record, refreshData]",[359,380],"[panel.query, record, refreshData]",[776,799],"[panel.latitudeField, panel.longitudeField, panel.query, panel.zoom, record, view.primaryId]",[604,609],"[handler, ref]",[695,716],"[column.name, initialData, onChange]",[1877,1901],"[column.contentField, column.htmlField, initialData, onChange]",[717,737],"[column.name, initialData, onChange, withTime]",[2440,2465],"[column, onChange]",[2826,2851],"[]",[724,726],"[column.__id__, column.name, column.optional, initialData, onChange, viewIndex]",[620,627],"[column.__id__, query, viewIndex]",[972,987]]
1
+ [{"/home/runner/work/galadmin/galadmin/src/front/src/index.js":"1","/home/runner/work/galadmin/galadmin/src/front/src/App.js":"2","/home/runner/work/galadmin/galadmin/src/front/src/components/Sidebar.js":"3","/home/runner/work/galadmin/galadmin/src/front/src/components/RedirectToFirstView.js":"4","/home/runner/work/galadmin/galadmin/src/front/src/pages/CreateRecord.js":"5","/home/runner/work/galadmin/galadmin/src/front/src/pages/EditRecord.js":"6","/home/runner/work/galadmin/galadmin/src/front/src/pages/Records.js":"7","/home/runner/work/galadmin/galadmin/src/front/src/pages/Record.js":"8","/home/runner/work/galadmin/galadmin/src/front/src/pages/Login.js":"9","/home/runner/work/galadmin/galadmin/src/front/src/pages/Iframe.js":"10","/home/runner/work/galadmin/galadmin/src/front/src/contexts/ConfigContext.js":"11","/home/runner/work/galadmin/galadmin/src/front/src/pages/CustomView.js":"12","/home/runner/work/galadmin/galadmin/src/front/src/components/Input.js":"13","/home/runner/work/galadmin/galadmin/src/front/src/components/LabelTooltip.js":"14","/home/runner/work/galadmin/galadmin/src/front/src/components/DownloadButton.js":"15","/home/runner/work/galadmin/galadmin/src/front/src/components/AddFilterButton.js":"16","/home/runner/work/galadmin/galadmin/src/front/src/components/BulkActionsButton.js":"17","/home/runner/work/galadmin/galadmin/src/front/src/components/ActionsButton.js":"18","/home/runner/work/galadmin/galadmin/src/front/src/components/BackButton.js":"19","/home/runner/work/galadmin/galadmin/src/front/src/components/DownloadTablePanelButton.js":"20","/home/runner/work/galadmin/galadmin/src/front/src/utils/checkRequiredColumns.js":"21","/home/runner/work/galadmin/galadmin/src/front/src/utils/getFormattedValue.js":"22","/home/runner/work/galadmin/galadmin/src/front/src/components/panels/TablePanel.js":"23","/home/runner/work/galadmin/galadmin/src/front/src/components/panels/GalleryPanel.js":"24","/home/runner/work/galadmin/galadmin/src/front/src/components/panels/MapPanel.js":"25","/home/runner/work/galadmin/galadmin/src/front/src/components/CustomComponent.js":"26","/home/runner/work/galadmin/galadmin/src/front/src/components/OutsideClickHandler.js":"27","/home/runner/work/galadmin/galadmin/src/front/src/utils/evalExpression.js":"28","/home/runner/work/galadmin/galadmin/src/front/src/components/inputs/ColorInput.js":"29","/home/runner/work/galadmin/galadmin/src/front/src/components/inputs/RichTextInput.js":"30","/home/runner/work/galadmin/galadmin/src/front/src/components/inputs/BetterRichTextInput.js":"31","/home/runner/work/galadmin/galadmin/src/front/src/components/inputs/DatetimeInput.js":"32","/home/runner/work/galadmin/galadmin/src/front/src/components/inputs/AddressInput.js":"33","/home/runner/work/galadmin/galadmin/src/front/src/components/inputs/FileInput.js":"34","/home/runner/work/galadmin/galadmin/src/front/src/components/inputs/ForeignSelectInput.js":"35","/home/runner/work/galadmin/galadmin/src/front/src/components/inputs/ForeignDatalistInput.js":"36"},{"size":219,"mtime":1698761845829,"results":"37","hashOfConfig":"38"},{"size":2340,"mtime":1698761845829,"results":"39","hashOfConfig":"38"},{"size":4725,"mtime":1698761845829,"results":"40","hashOfConfig":"38"},{"size":524,"mtime":1698761845829,"results":"41","hashOfConfig":"38"},{"size":4255,"mtime":1698761845829,"results":"42","hashOfConfig":"38"},{"size":3733,"mtime":1698761845829,"results":"43","hashOfConfig":"38"},{"size":10243,"mtime":1698761845829,"results":"44","hashOfConfig":"38"},{"size":4225,"mtime":1698761845829,"results":"45","hashOfConfig":"38"},{"size":1135,"mtime":1698761845829,"results":"46","hashOfConfig":"38"},{"size":404,"mtime":1698761845829,"results":"47","hashOfConfig":"38"},{"size":1022,"mtime":1698761845829,"results":"48","hashOfConfig":"38"},{"size":454,"mtime":1698761845829,"results":"49","hashOfConfig":"38"},{"size":5021,"mtime":1698761845829,"results":"50","hashOfConfig":"38"},{"size":522,"mtime":1698761845829,"results":"51","hashOfConfig":"38"},{"size":895,"mtime":1698761845829,"results":"52","hashOfConfig":"38"},{"size":9821,"mtime":1698761845829,"results":"53","hashOfConfig":"38"},{"size":2656,"mtime":1698761845829,"results":"54","hashOfConfig":"38"},{"size":3169,"mtime":1698761845829,"results":"55","hashOfConfig":"38"},{"size":217,"mtime":1698761845829,"results":"56","hashOfConfig":"38"},{"size":1128,"mtime":1698761845829,"results":"57","hashOfConfig":"38"},{"size":778,"mtime":1698761845833,"results":"58","hashOfConfig":"38"},{"size":2698,"mtime":1698761845833,"results":"59","hashOfConfig":"38"},{"size":4606,"mtime":1698761845829,"results":"60","hashOfConfig":"38"},{"size":2656,"mtime":1698761845829,"results":"61","hashOfConfig":"38"},{"size":1192,"mtime":1698761845829,"results":"62","hashOfConfig":"38"},{"size":1662,"mtime":1698761845829,"results":"63","hashOfConfig":"38"},{"size":826,"mtime":1698761845829,"results":"64","hashOfConfig":"38"},{"size":530,"mtime":1698761845833,"results":"65","hashOfConfig":"38"},{"size":894,"mtime":1698761845829,"results":"66","hashOfConfig":"38"},{"size":2091,"mtime":1698761845829,"results":"67","hashOfConfig":"38"},{"size":1458,"mtime":1698761845829,"results":"68","hashOfConfig":"38"},{"size":886,"mtime":1698761845829,"results":"69","hashOfConfig":"38"},{"size":3092,"mtime":1698761845829,"results":"70","hashOfConfig":"38"},{"size":3297,"mtime":1698761845829,"results":"71","hashOfConfig":"38"},{"size":1461,"mtime":1698761845829,"results":"72","hashOfConfig":"38"},{"size":2088,"mtime":1698761845829,"results":"73","hashOfConfig":"38"},{"filePath":"74","messages":"75","suppressedMessages":"76","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},"8zhr7a",{"filePath":"77","messages":"78","suppressedMessages":"79","errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0},{"filePath":"80","messages":"81","suppressedMessages":"82","errorCount":0,"fatalErrorCount":0,"warningCount":4,"fixableErrorCount":0,"fixableWarningCount":0,"source":null},{"filePath":"83","messages":"84","suppressedMessages":"85","errorCount":0,"fatalErrorCount":0,"warningCount":1,"fixableErrorCount":0,"fixableWarningCount":0,"source":null},{"filePath":"86","messages":"87","suppressedMessages":"88","errorCount":0,"fatalErrorCount":0,"warningCount":1,"fixableErrorCount":0,"fixableWarningCount":0,"source":null},{"filePath":"89","messages":"90","suppressedMessages":"91","errorCount":0,"fatalErrorCount":0,"warningCount":1,"fixableErrorCount":0,"fixableWarningCount":0,"source":null},{"filePath":"92","messages":"93","suppressedMessages":"94","errorCount":0,"fatalErrorCount":0,"warningCount":4,"fixableErrorCount":0,"fixableWarningCount":0,"source":null},{"filePath":"95","messages":"96","suppressedMessages":"97","errorCount":0,"fatalErrorCount":0,"warningCount":2,"fixableErrorCount":0,"fixableWarningCount":0,"source":null},{"filePath":"98","messages":"99","suppressedMessages":"100","errorCount":0,"fatalErrorCount":0,"warningCount":2,"fixableErrorCount":0,"fixableWarningCount":0,"source":null},{"filePath":"101","messages":"102","suppressedMessages":"103","errorCount":0,"fatalErrorCount":0,"warningCount":2,"fixableErrorCount":0,"fixableWarningCount":0,"source":null},{"filePath":"104","messages":"105","suppressedMessages":"106","errorCount":0,"fatalErrorCount":0,"warningCount":1,"fixableErrorCount":0,"fixableWarningCount":0,"source":null},{"filePath":"107","messages":"108","suppressedMessages":"109","errorCount":0,"fatalErrorCount":0,"warningCount":1,"fixableErrorCount":0,"fixableWarningCount":0,"source":null},{"filePath":"110","messages":"111","suppressedMessages":"112","errorCount":0,"fatalErrorCount":0,"warningCount":1,"fixableErrorCount":0,"fixableWarningCount":0,"source":null},{"filePath":"113","messages":"114","suppressedMessages":"115","errorCount":0,"fatalErrorCount":0,"warningCount":1,"fixableErrorCount":0,"fixableWarningCount":0,"source":null},{"filePath":"116","messages":"117","suppressedMessages":"118","errorCount":0,"fatalErrorCount":0,"warningCount":1,"fixableErrorCount":0,"fixableWarningCount":0,"source":null},{"filePath":"119","messages":"120","suppressedMessages":"121","errorCount":0,"fatalErrorCount":0,"warningCount":2,"fixableErrorCount":0,"fixableWarningCount":0,"source":null},{"filePath":"122","messages":"123","suppressedMessages":"124","errorCount":0,"fatalErrorCount":0,"warningCount":1,"fixableErrorCount":0,"fixableWarningCount":0,"source":null},{"filePath":"125","messages":"126","suppressedMessages":"127","errorCount":0,"fatalErrorCount":0,"warningCount":1,"fixableErrorCount":0,"fixableWarningCount":0,"source":null},{"filePath":"128","messages":"129","suppressedMessages":"130","errorCount":0,"fatalErrorCount":0,"warningCount":1,"fixableErrorCount":0,"fixableWarningCount":0,"source":null},{"filePath":"131","messages":"132","suppressedMessages":"133","errorCount":0,"fatalErrorCount":0,"warningCount":1,"fixableErrorCount":0,"fixableWarningCount":0,"source":null},{"filePath":"134","messages":"135","suppressedMessages":"136","errorCount":0,"fatalErrorCount":0,"warningCount":2,"fixableErrorCount":0,"fixableWarningCount":0,"source":null},{"filePath":"137","messages":"138","suppressedMessages":"139","errorCount":0,"fatalErrorCount":0,"warningCount":4,"fixableErrorCount":0,"fixableWarningCount":1,"source":null},{"filePath":"140","messages":"141","suppressedMessages":"142","errorCount":0,"fatalErrorCount":0,"warningCount":2,"fixableErrorCount":0,"fixableWarningCount":0,"source":null},{"filePath":"143","messages":"144","suppressedMessages":"145","errorCount":0,"fatalErrorCount":0,"warningCount":5,"fixableErrorCount":0,"fixableWarningCount":1,"source":null},{"filePath":"146","messages":"147","suppressedMessages":"148","errorCount":0,"fatalErrorCount":0,"warningCount":2,"fixableErrorCount":0,"fixableWarningCount":0,"source":null},{"filePath":"149","messages":"150","suppressedMessages":"151","errorCount":0,"fatalErrorCount":0,"warningCount":2,"fixableErrorCount":0,"fixableWarningCount":0,"source":null},{"filePath":"152","messages":"153","suppressedMessages":"154","errorCount":0,"fatalErrorCount":0,"warningCount":1,"fixableErrorCount":0,"fixableWarningCount":0,"source":null},{"filePath":"155","messages":"156","suppressedMessages":"157","errorCount":0,"fatalErrorCount":0,"warningCount":2,"fixableErrorCount":0,"fixableWarningCount":0,"source":null},{"filePath":"158","messages":"159","suppressedMessages":"160","errorCount":0,"fatalErrorCount":0,"warningCount":3,"fixableErrorCount":0,"fixableWarningCount":0,"source":null},{"filePath":"161","messages":"162","suppressedMessages":"163","errorCount":0,"fatalErrorCount":0,"warningCount":2,"fixableErrorCount":0,"fixableWarningCount":0,"source":null},{"filePath":"164","messages":"165","suppressedMessages":"166","errorCount":0,"fatalErrorCount":0,"warningCount":1,"fixableErrorCount":0,"fixableWarningCount":0,"source":null},{"filePath":"167","messages":"168","suppressedMessages":"169","errorCount":0,"fatalErrorCount":0,"warningCount":2,"fixableErrorCount":0,"fixableWarningCount":0,"source":null},{"filePath":"170","messages":"171","suppressedMessages":"172","errorCount":0,"fatalErrorCount":0,"warningCount":4,"fixableErrorCount":0,"fixableWarningCount":0,"source":null},{"filePath":"173","messages":"174","suppressedMessages":"175","errorCount":0,"fatalErrorCount":0,"warningCount":1,"fixableErrorCount":0,"fixableWarningCount":0,"source":null},{"filePath":"176","messages":"177","suppressedMessages":"178","errorCount":0,"fatalErrorCount":0,"warningCount":3,"fixableErrorCount":0,"fixableWarningCount":0,"source":null},{"filePath":"179","messages":"180","suppressedMessages":"181","errorCount":0,"fatalErrorCount":0,"warningCount":4,"fixableErrorCount":0,"fixableWarningCount":0,"source":null},"/home/runner/work/galadmin/galadmin/src/front/src/index.js",[],[],"/home/runner/work/galadmin/galadmin/src/front/src/App.js",[],[],"/home/runner/work/galadmin/galadmin/src/front/src/components/Sidebar.js",["182","183","184","185"],[],"/home/runner/work/galadmin/galadmin/src/front/src/components/RedirectToFirstView.js",["186"],[],"/home/runner/work/galadmin/galadmin/src/front/src/pages/CreateRecord.js",["187"],[],"/home/runner/work/galadmin/galadmin/src/front/src/pages/EditRecord.js",["188"],[],"/home/runner/work/galadmin/galadmin/src/front/src/pages/Records.js",["189","190","191","192"],[],"/home/runner/work/galadmin/galadmin/src/front/src/pages/Record.js",["193","194"],[],"/home/runner/work/galadmin/galadmin/src/front/src/pages/Login.js",["195","196"],[],"/home/runner/work/galadmin/galadmin/src/front/src/pages/Iframe.js",["197","198"],[],"/home/runner/work/galadmin/galadmin/src/front/src/contexts/ConfigContext.js",["199"],[],"/home/runner/work/galadmin/galadmin/src/front/src/pages/CustomView.js",["200"],[],"/home/runner/work/galadmin/galadmin/src/front/src/components/Input.js",["201"],[],"/home/runner/work/galadmin/galadmin/src/front/src/components/LabelTooltip.js",["202"],[],"/home/runner/work/galadmin/galadmin/src/front/src/components/DownloadButton.js",["203"],[],"/home/runner/work/galadmin/galadmin/src/front/src/components/AddFilterButton.js",["204","205"],[],"/home/runner/work/galadmin/galadmin/src/front/src/components/BulkActionsButton.js",["206"],[],"/home/runner/work/galadmin/galadmin/src/front/src/components/ActionsButton.js",["207"],[],"/home/runner/work/galadmin/galadmin/src/front/src/components/BackButton.js",["208"],[],"/home/runner/work/galadmin/galadmin/src/front/src/components/DownloadTablePanelButton.js",["209"],[],"/home/runner/work/galadmin/galadmin/src/front/src/utils/checkRequiredColumns.js",["210","211"],[],"/home/runner/work/galadmin/galadmin/src/front/src/utils/getFormattedValue.js",["212","213","214","215"],[],"/home/runner/work/galadmin/galadmin/src/front/src/components/panels/TablePanel.js",["216","217"],[],"/home/runner/work/galadmin/galadmin/src/front/src/components/panels/GalleryPanel.js",["218","219","220","221","222"],[],"/home/runner/work/galadmin/galadmin/src/front/src/components/panels/MapPanel.js",["223","224"],[],"/home/runner/work/galadmin/galadmin/src/front/src/components/CustomComponent.js",["225","226"],[],"/home/runner/work/galadmin/galadmin/src/front/src/components/OutsideClickHandler.js",["227"],[],"/home/runner/work/galadmin/galadmin/src/front/src/utils/evalExpression.js",["228","229"],[],"/home/runner/work/galadmin/galadmin/src/front/src/components/inputs/ColorInput.js",["230","231","232"],[],"/home/runner/work/galadmin/galadmin/src/front/src/components/inputs/RichTextInput.js",["233","234"],[],"/home/runner/work/galadmin/galadmin/src/front/src/components/inputs/BetterRichTextInput.js",["235"],[],"/home/runner/work/galadmin/galadmin/src/front/src/components/inputs/DatetimeInput.js",["236","237"],[],"/home/runner/work/galadmin/galadmin/src/front/src/components/inputs/AddressInput.js",["238","239","240","241"],[],"/home/runner/work/galadmin/galadmin/src/front/src/components/inputs/FileInput.js",["242"],[],"/home/runner/work/galadmin/galadmin/src/front/src/components/inputs/ForeignSelectInput.js",["243","244","245"],[],"/home/runner/work/galadmin/galadmin/src/front/src/components/inputs/ForeignDatalistInput.js",["246","247","248","249"],[],{"ruleId":"250","severity":1,"message":"251","line":19,"column":1,"nodeType":"252","endLine":104,"endColumn":2},{"ruleId":"253","severity":1,"message":"254","line":26,"column":28,"nodeType":"255","endLine":26,"endColumn":66},{"ruleId":"256","severity":1,"message":"257","line":29,"column":70,"nodeType":"258","messageId":"259","endLine":29,"endColumn":72},{"ruleId":"260","severity":1,"message":"261","line":79,"column":80,"nodeType":"262","messageId":"263","endLine":79,"endColumn":82},{"ruleId":"250","severity":1,"message":"251","line":7,"column":1,"nodeType":"252","endLine":24,"endColumn":2},{"ruleId":"250","severity":1,"message":"251","line":12,"column":1,"nodeType":"252","endLine":102,"endColumn":2},{"ruleId":"250","severity":1,"message":"251","line":12,"column":1,"nodeType":"252","endLine":97,"endColumn":2},{"ruleId":"250","severity":1,"message":"251","line":21,"column":1,"nodeType":"252","endLine":220,"endColumn":2},{"ruleId":"264","severity":1,"message":"265","line":50,"column":8,"nodeType":"266","endLine":50,"endColumn":19,"suggestions":"267"},{"ruleId":"264","severity":1,"message":"268","line":61,"column":8,"nodeType":"266","endLine":61,"endColumn":79,"suggestions":"269"},{"ruleId":"260","severity":1,"message":"261","line":181,"column":66,"nodeType":"262","messageId":"263","endLine":181,"endColumn":68},{"ruleId":"250","severity":1,"message":"251","line":16,"column":1,"nodeType":"252","endLine":89,"endColumn":2},{"ruleId":"264","severity":1,"message":"268","line":26,"column":8,"nodeType":"266","endLine":26,"endColumn":29,"suggestions":"270"},{"ruleId":"250","severity":1,"message":"251","line":5,"column":1,"nodeType":"252","endLine":33,"endColumn":2},{"ruleId":"253","severity":1,"message":"254","line":23,"column":21,"nodeType":"255","endLine":23,"endColumn":57},{"ruleId":"250","severity":1,"message":"251","line":9,"column":1,"nodeType":"252","endLine":19,"endColumn":2},{"ruleId":"271","severity":1,"message":"272","line":16,"column":13,"nodeType":"255","endLine":16,"endColumn":36},{"ruleId":"273","severity":1,"message":"274","line":11,"column":29,"nodeType":"275","messageId":"263","endLine":11,"endColumn":33},{"ruleId":"250","severity":1,"message":"251","line":6,"column":1,"nodeType":"252","endLine":15,"endColumn":2},{"ruleId":"250","severity":1,"message":"251","line":10,"column":1,"nodeType":"252","endLine":149,"endColumn":3},{"ruleId":"250","severity":1,"message":"251","line":3,"column":1,"nodeType":"252","endLine":17,"endColumn":2},{"ruleId":"250","severity":1,"message":"251","line":5,"column":1,"nodeType":"252","endLine":30,"endColumn":2},{"ruleId":"250","severity":1,"message":"251","line":6,"column":1,"nodeType":"252","endLine":196,"endColumn":2},{"ruleId":"264","severity":1,"message":"276","line":20,"column":8,"nodeType":"266","endLine":20,"endColumn":15,"suggestions":"277"},{"ruleId":"250","severity":1,"message":"251","line":6,"column":1,"nodeType":"252","endLine":68,"endColumn":2},{"ruleId":"250","severity":1,"message":"251","line":10,"column":1,"nodeType":"252","endLine":85,"endColumn":2},{"ruleId":"250","severity":1,"message":"251","line":6,"column":1,"nodeType":"252","endLine":12,"endColumn":2},{"ruleId":"250","severity":1,"message":"251","line":4,"column":1,"nodeType":"252","endLine":28,"endColumn":2},{"ruleId":"250","severity":1,"message":"251","line":5,"column":1,"nodeType":"252","endLine":22,"endColumn":2},{"ruleId":"260","severity":1,"message":"261","line":9,"column":44,"nodeType":"262","messageId":"263","endLine":9,"endColumn":46},{"ruleId":"250","severity":1,"message":"251","line":6,"column":1,"nodeType":"252","endLine":51,"endColumn":2},{"ruleId":"278","severity":1,"message":"279","line":19,"column":13,"nodeType":"255","messageId":"280","endLine":19,"endColumn":48,"fix":"281"},{"ruleId":"253","severity":1,"message":"254","line":20,"column":17,"nodeType":"255","endLine":20,"endColumn":127},{"ruleId":"260","severity":1,"message":"261","line":46,"column":93,"nodeType":"262","messageId":"263","endLine":46,"endColumn":95},{"ruleId":"250","severity":1,"message":"251","line":10,"column":1,"nodeType":"252","endLine":112,"endColumn":2},{"ruleId":"264","severity":1,"message":"268","line":18,"column":8,"nodeType":"266","endLine":18,"endColumn":16,"suggestions":"282"},{"ruleId":"250","severity":1,"message":"251","line":8,"column":1,"nodeType":"252","endLine":76,"endColumn":2},{"ruleId":"283","severity":1,"message":"284","line":10,"column":11,"nodeType":"285","messageId":"286","endLine":10,"endColumn":18},{"ruleId":"264","severity":1,"message":"268","line":15,"column":8,"nodeType":"266","endLine":15,"endColumn":29,"suggestions":"287"},{"ruleId":"278","severity":1,"message":"279","line":61,"column":29,"nodeType":"255","messageId":"280","endLine":61,"endColumn":89,"fix":"288"},{"ruleId":"253","severity":1,"message":"254","line":62,"column":33,"nodeType":"255","endLine":66,"endColumn":35},{"ruleId":"250","severity":1,"message":"251","line":4,"column":1,"nodeType":"252","endLine":42,"endColumn":2},{"ruleId":"264","severity":1,"message":"289","line":23,"column":8,"nodeType":"266","endLine":23,"endColumn":31,"suggestions":"290"},{"ruleId":"291","severity":1,"message":"292","line":17,"column":27,"nodeType":"275","messageId":"293","endLine":17,"endColumn":69},{"ruleId":"294","severity":1,"message":"295","line":20,"column":13,"nodeType":"296","messageId":"297","endLine":20,"endColumn":47},{"ruleId":"264","severity":1,"message":"298","line":19,"column":8,"nodeType":"266","endLine":19,"endColumn":13,"suggestions":"299"},{"ruleId":"250","severity":1,"message":"251","line":2,"column":1,"nodeType":"252","endLine":14,"endColumn":2},{"ruleId":"273","severity":1,"message":"274","line":8,"column":16,"nodeType":"275","messageId":"263","endLine":8,"endColumn":20},{"ruleId":"250","severity":1,"message":"251","line":3,"column":1,"nodeType":"252","endLine":29,"endColumn":2},{"ruleId":"264","severity":1,"message":"300","line":19,"column":43,"nodeType":"285","endLine":19,"endColumn":50},{"ruleId":"264","severity":1,"message":"301","line":20,"column":8,"nodeType":"266","endLine":20,"endColumn":29,"suggestions":"302"},{"ruleId":"250","severity":1,"message":"251","line":7,"column":1,"nodeType":"252","endLine":58,"endColumn":3},{"ruleId":"264","severity":1,"message":"303","line":51,"column":8,"nodeType":"266","endLine":51,"endColumn":32,"suggestions":"304"},{"ruleId":"250","severity":1,"message":"251","line":7,"column":1,"nodeType":"252","endLine":41,"endColumn":3},{"ruleId":"250","severity":1,"message":"251","line":3,"column":1,"nodeType":"252","endLine":26,"endColumn":2},{"ruleId":"264","severity":1,"message":"305","line":19,"column":8,"nodeType":"266","endLine":19,"endColumn":28,"suggestions":"306"},{"ruleId":"250","severity":1,"message":"251","line":3,"column":1,"nodeType":"252","endLine":67,"endColumn":2},{"ruleId":"264","severity":1,"message":"307","line":45,"column":8,"nodeType":"266","endLine":45,"endColumn":33,"suggestions":"308"},{"ruleId":"264","severity":1,"message":"309","line":54,"column":39,"nodeType":"285","endLine":54,"endColumn":46},{"ruleId":"264","severity":1,"message":"310","line":55,"column":8,"nodeType":"266","endLine":55,"endColumn":33,"suggestions":"311"},{"ruleId":"250","severity":1,"message":"251","line":8,"column":1,"nodeType":"252","endLine":85,"endColumn":2},{"ruleId":"250","severity":1,"message":"251","line":7,"column":1,"nodeType":"252","endLine":46,"endColumn":2},{"ruleId":"264","severity":1,"message":"312","line":23,"column":8,"nodeType":"266","endLine":23,"endColumn":10,"suggestions":"313"},{"ruleId":"260","severity":1,"message":"261","line":32,"column":50,"nodeType":"262","messageId":"263","endLine":32,"endColumn":52},{"ruleId":"250","severity":1,"message":"251","line":7,"column":1,"nodeType":"252","endLine":64,"endColumn":2},{"ruleId":"264","severity":1,"message":"314","line":22,"column":8,"nodeType":"266","endLine":22,"endColumn":15,"suggestions":"315"},{"ruleId":"264","severity":1,"message":"316","line":31,"column":29,"nodeType":"285","endLine":31,"endColumn":36},{"ruleId":"264","severity":1,"message":"317","line":32,"column":8,"nodeType":"266","endLine":32,"endColumn":23,"suggestions":"318"},"import/no-anonymous-default-export","Assign arrow function to a variable before exporting as module default","ExportDefaultDeclaration","jsx-a11y/alt-text","img elements must have an alt prop, either with meaningful text, or an empty string for decorative images.","JSXOpeningElement","array-callback-return","Array.prototype.map() expects a value to be returned at the end of arrow function.","ArrowFunctionExpression","expectedAtEnd","eqeqeq","Expected '===' and instead saw '=='.","BinaryExpression","unexpected","react-hooks/exhaustive-deps","React Hook useEffect has missing dependencies: 'currentFilters.length' and 'selectedRecordIds.length'. Either include them or remove the dependency array.","ArrayExpression",["319"],"React Hook useEffect has a missing dependency: 'refreshData'. Either include it or remove the dependency array.",["320"],["321"],"jsx-a11y/iframe-has-title","<iframe> elements must have a unique title property.","no-eval","eval can be harmful.","CallExpression","React Hook useEffect has missing dependencies: 'column?.dataType' and 'column.options'. Either include them or remove the dependency array.",["322"],"react/jsx-no-target-blank","Using target=\"_blank\" without rel=\"noreferrer\" (which implies rel=\"noopener\") is a security risk in older browsers: see https://mathiasbynens.github.io/rel-noopener/#recommendations","noTargetBlankWithoutNoreferrer",{"range":"323","text":"324"},["325"],"no-unused-vars","'history' is assigned a value but never used.","Identifier","unusedVar",["326"],{"range":"327","text":"324"},"React Hook useEffect has missing dependencies: 'panel.latitudeField', 'panel.longitudeField', 'panel.query', 'panel.zoom', and 'view.primaryId'. Either include them or remove the dependency array. Outer scope values like 'window.google' aren't valid dependencies because mutating them doesn't re-render the component.",["328"],"no-new-func","The Function constructor is eval.","noFunctionConstructor","no-throw-literal","Expected an error object to be thrown.","ThrowStatement","object","React Hook useEffect has a missing dependency: 'handler'. Either include it or remove the dependency array. If 'handler' changes too often, find the parent component that defines it and wrap that definition in useCallback.",["329"],"The ref value 'colorPicker.current' will likely have changed by the time this effect cleanup function runs. If this ref points to a node rendered by React, copy 'colorPicker.current' to a variable inside the effect, and use that variable in the cleanup function.","React Hook useEffect has missing dependencies: 'column.name', 'initialData', and 'onChange'. Either include them or remove the dependency array. Mutable values like 'colorPicker.current' aren't valid dependencies because mutating them doesn't re-render the component.",["330"],"React Hook useEffect has missing dependencies: 'column.contentField', 'column.htmlField', 'initialData', and 'onChange'. Either include them or remove the dependency array. Mutable values like 'quillContainer.current' aren't valid dependencies because mutating them doesn't re-render the component.",["331"],"React Hook useEffect has missing dependencies: 'column.name', 'initialData', 'onChange', and 'withTime'. Either include them or remove the dependency array. Mutable values like 'datepicker.current' aren't valid dependencies because mutating them doesn't re-render the component.",["332"],"React Hook useEffect has missing dependencies: 'column' and 'onChange'. Either include them or remove the dependency array. Mutable values like 'googleMapsInput.current' aren't valid dependencies because mutating them doesn't re-render the component.",["333"],"The ref value 'googleMapsInput.current' will likely have changed by the time this effect cleanup function runs. If this ref points to a node rendered by React, copy 'googleMapsInput.current' to a variable inside the effect, and use that variable in the cleanup function.","React Hook useEffect has an unnecessary dependency: 'googleMapsInput.current'. Either exclude it or remove the dependency array. Mutable values like 'googleMapsInput.current' aren't valid dependencies because mutating them doesn't re-render the component.",["334"],"React Hook useEffect has missing dependencies: 'column.__id__', 'column.name', 'column.optional', 'initialData', 'onChange', and 'viewIndex'. Either include them or remove the dependency array. If 'onChange' changes too often, find the parent component that defines it and wrap that definition in useCallback.",["335"],"React Hook useEffect has missing dependencies: 'column.__id__' and 'viewIndex'. Either include them or remove the dependency array.",["336"],"The ref value 'input.current' will likely have changed by the time this effect cleanup function runs. If this ref points to a node rendered by React, copy 'input.current' to a variable inside the effect, and use that variable in the cleanup function.","React Hook useEffect has an unnecessary dependency: 'input.current'. Either exclude it or remove the dependency array. Mutable values like 'input.current' aren't valid dependencies because mutating them doesn't re-render the component.",["337"],{"desc":"338","fix":"339"},{"desc":"340","fix":"341"},{"desc":"342","fix":"343"},{"desc":"344","fix":"345"},[1055,1055]," rel=\"noreferrer\"",{"desc":"346","fix":"347"},{"desc":"348","fix":"349"},[2020,2020],{"desc":"350","fix":"351"},{"desc":"352","fix":"353"},{"desc":"354","fix":"355"},{"desc":"356","fix":"357"},{"desc":"358","fix":"359"},{"desc":"360","fix":"361"},{"desc":"362","fix":"363"},{"desc":"364","fix":"365"},{"desc":"366","fix":"367"},{"desc":"362","fix":"368"},"Update the dependencies array to be: [currentFilters.length, selectedRecordIds.length, viewIndex]",{"range":"369","text":"370"},"Update the dependencies array to be: [viewIndex, subviewIndex, page, query, currentFilters, orderBy, isDesc, refreshData]",{"range":"371","text":"372"},"Update the dependencies array to be: [viewIndex, recordId, refreshData]",{"range":"373","text":"374"},"Update the dependencies array to be: [column?.dataType, column.options, field]",{"range":"375","text":"376"},"Update the dependencies array to be: [record, refreshData]",{"range":"377","text":"378"},"Update the dependencies array to be: [panel.query, record, refreshData]",{"range":"379","text":"380"},"Update the dependencies array to be: [panel.latitudeField, panel.longitudeField, panel.query, panel.zoom, record, view.primaryId]",{"range":"381","text":"382"},"Update the dependencies array to be: [handler, ref]",{"range":"383","text":"384"},"Update the dependencies array to be: [column.name, initialData, onChange]",{"range":"385","text":"386"},"Update the dependencies array to be: [column.contentField, column.htmlField, initialData, onChange]",{"range":"387","text":"388"},"Update the dependencies array to be: [column.name, initialData, onChange, withTime]",{"range":"389","text":"390"},"Update the dependencies array to be: [column, onChange]",{"range":"391","text":"392"},"Update the dependencies array to be: []",{"range":"393","text":"394"},"Update the dependencies array to be: [column.__id__, column.name, column.optional, initialData, onChange, viewIndex]",{"range":"395","text":"396"},"Update the dependencies array to be: [column.__id__, query, viewIndex]",{"range":"397","text":"398"},{"range":"399","text":"394"},[1656,1667],"[currentFilters.length, selectedRecordIds.length, viewIndex]",[1896,1967],"[viewIndex, subviewIndex, page, query, currentFilters, orderBy, isDesc, refreshData]",[941,962],"[viewIndex, recordId, refreshData]",[808,815],"[column?.dataType, column.options, field]",[542,550],"[record, refreshData]",[359,380],"[panel.query, record, refreshData]",[776,799],"[panel.latitudeField, panel.longitudeField, panel.query, panel.zoom, record, view.primaryId]",[604,609],"[handler, ref]",[695,716],"[column.name, initialData, onChange]",[1877,1901],"[column.contentField, column.htmlField, initialData, onChange]",[717,737],"[column.name, initialData, onChange, withTime]",[2440,2465],"[column, onChange]",[2826,2851],"[]",[724,726],"[column.__id__, column.name, column.optional, initialData, onChange, viewIndex]",[620,627],"[column.__id__, query, viewIndex]",[972,987]]
package/src/index.ts CHANGED
@@ -1,7 +1,9 @@
1
1
  import * as express from "express";
2
2
  import * as session from "express-session";
3
3
  import * as SessionStore from "express-mysql-session";
4
+ import * as pgSessionStore from 'connect-pg-simple';
4
5
  import * as mysql2 from 'mysql2/promise';
6
+ import * as pg from 'pg';
5
7
  import dbManager from "./utils/dbManager";
6
8
  import * as bcrypt from "bcryptjs";
7
9
 
@@ -38,7 +40,17 @@ export default (config: Config): any => {
38
40
 
39
41
  app.use(session({
40
42
  secret: config.sessionSecret,
41
- store: new SessionStore({
43
+ store: config.postgresql ? new (pgSessionStore(session))({
44
+ pool: new pg.Pool({
45
+ host: config.postgresql.host,
46
+ user: config.postgresql.user,
47
+ password: config.postgresql.password,
48
+ database: config.postgresql.database,
49
+ port: config.postgresql.port || 5432,
50
+ }),
51
+ createTableIfMissing: true,
52
+ tableName: 'galadmin_sessions'
53
+ }) : new SessionStore({
42
54
  schema: { tableName: 'galadmin_sessions' }
43
55
  }, mysql2.createPool({
44
56
  host: config.mysql.host,
@@ -317,13 +317,21 @@ export type Config = {
317
317
  authRoles?: AuthRole[],
318
318
 
319
319
  /** Identifiants de connexion à la base de données */
320
- mysql: {
320
+ mysql?: {
321
321
  host: string,
322
322
  user: string,
323
323
  password: string,
324
324
  database: string,
325
325
  port?: number
326
- }
326
+ },
327
+
328
+ postgresql?: {
329
+ host: string,
330
+ user: string,
331
+ password: string,
332
+ database: string,
333
+ port?: number
334
+ },
327
335
 
328
336
  /** Clé API Google Maps pour les champs adresses et l'affichage de cartes */
329
337
  googleMapsKey?: string,
@@ -1,26 +1,78 @@
1
1
  import * as mysql from "mysql";
2
2
  import * as mysql2 from "mysql2";
3
+ import * as pg from 'pg';
4
+
5
+ function convertQuery(mysqlQuery, params) {
6
+ let pgQuery = '';
7
+ let pgParams = [];
8
+
9
+ let paramIndex = 1;
10
+ let charIndex = 0;
11
+
12
+ while (charIndex < mysqlQuery.length) {
13
+ if (mysqlQuery.charAt(charIndex) === '?' && mysqlQuery.charAt(charIndex + 1) === '?') {
14
+ // Replace "??"
15
+ pgQuery += params.shift();
16
+ charIndex += 2; // Skip two characters
17
+ } else if (mysqlQuery.charAt(charIndex) === '?') {
18
+ // Replace "?"
19
+ pgQuery += `$${paramIndex++}`;
20
+ pgParams.push(params.shift());
21
+ charIndex++; // Skip one character
22
+ } else {
23
+ pgQuery += mysqlQuery.charAt(charIndex);
24
+ charIndex++; // Go to next character
25
+ }
26
+ }
27
+
28
+ return {
29
+ pgQuery,
30
+ pgParams,
31
+ };
32
+ }
3
33
 
4
34
  export default class dbManager {
5
35
  _db;
36
+ dbType;
6
37
 
7
38
  init(config) {
8
- this._db = (config.useMysql2 ? mysql2 : mysql).createPool({
9
- connectionLimit: 10,
10
- host: config.mysql.host,
11
- user: config.mysql.user,
12
- password: config.mysql.password,
13
- database: config.mysql.database,
14
- port: config.mysql.port || 3306,
15
- dateStrings: true,
16
- multipleStatements: true
17
- });
39
+ if (config.mysql) {
40
+ this._db = (config.useMysql2 ? mysql2 : mysql).createPool({
41
+ connectionLimit: 10,
42
+ host: config.mysql.host,
43
+ user: config.mysql.user,
44
+ password: config.mysql.password,
45
+ database: config.mysql.database,
46
+ port: config.mysql.port || 3306,
47
+ dateStrings: true,
48
+ multipleStatements: true
49
+ });
50
+ this.dbType = "MYSQL";
51
+ } else if (config.postgresql) {
52
+ this._db = new pg.Pool({
53
+ host: config.postgresql.host,
54
+ user: config.postgresql.user,
55
+ password: config.postgresql.password,
56
+ database: config.postgresql.database,
57
+ port: config.postgresql.port || 5432,
58
+ });
59
+ this.dbType = "POSTGRESQL";
60
+ }
18
61
  }
19
62
 
20
63
  async query(queryString, args = []): Promise<any> {
21
64
  return new Promise((resolve, reject) => {
22
- this._db.query(queryString, args, function (err, rows, fields) {
23
- resolve({ err, rows, fields })
65
+ if (this.dbType === "POSTGRESQL") {
66
+ const result = convertQuery(queryString, args);
67
+ queryString = result.pgQuery;
68
+ args = result.pgParams;
69
+ }
70
+ this._db.query(queryString, args, (a, b, c) => {
71
+ if (this.dbType === "MYSQL") {
72
+ resolve({ err: a, rows: b, fields: c })
73
+ } else if (this.dbType === "POSTGRESQL") {
74
+ resolve({ err: a, rows: b?.rows, fields: b?.fields })
75
+ }
24
76
  });
25
77
  });
26
78
  }
@@ -1,12 +0,0 @@
1
- #!/bin/sh
2
- basedir=$(dirname "$(echo "$0" | sed -e 's,\\,/,g')")
3
-
4
- case `uname` in
5
- *CYGWIN*|*MINGW*|*MSYS*) basedir=`cygpath -w "$basedir"`;;
6
- esac
7
-
8
- if [ -x "$basedir/node" ]; then
9
- exec "$basedir/node" "$basedir/../semver/bin/semver.js" "$@"
10
- else
11
- exec node "$basedir/../semver/bin/semver.js" "$@"
12
- fi
@@ -1,17 +0,0 @@
1
- @ECHO off
2
- GOTO start
3
- :find_dp0
4
- SET dp0=%~dp0
5
- EXIT /b
6
- :start
7
- SETLOCAL
8
- CALL :find_dp0
9
-
10
- IF EXIST "%dp0%\node.exe" (
11
- SET "_prog=%dp0%\node.exe"
12
- ) ELSE (
13
- SET "_prog=node"
14
- SET PATHEXT=%PATHEXT:;.JS;=;%
15
- )
16
-
17
- endLocal & goto #_undefined_# 2>NUL || title %COMSPEC% & "%_prog%" "%dp0%\..\semver\bin\semver.js" %*
@@ -1,28 +0,0 @@
1
- #!/usr/bin/env pwsh
2
- $basedir=Split-Path $MyInvocation.MyCommand.Definition -Parent
3
-
4
- $exe=""
5
- if ($PSVersionTable.PSVersion -lt "6.0" -or $IsWindows) {
6
- # Fix case when both the Windows and Linux builds of Node
7
- # are installed in the same directory
8
- $exe=".exe"
9
- }
10
- $ret=0
11
- if (Test-Path "$basedir/node$exe") {
12
- # Support pipeline input
13
- if ($MyInvocation.ExpectingInput) {
14
- $input | & "$basedir/node$exe" "$basedir/../semver/bin/semver.js" $args
15
- } else {
16
- & "$basedir/node$exe" "$basedir/../semver/bin/semver.js" $args
17
- }
18
- $ret=$LASTEXITCODE
19
- } else {
20
- # Support pipeline input
21
- if ($MyInvocation.ExpectingInput) {
22
- $input | & "node$exe" "$basedir/../semver/bin/semver.js" $args
23
- } else {
24
- & "node$exe" "$basedir/../semver/bin/semver.js" $args
25
- }
26
- $ret=$LASTEXITCODE
27
- }
28
- exit $ret