@jd-data-limited/easy-fm 3.0.10 → 3.1.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (67) hide show
  1. package/.idea/compiler.xml +7 -0
  2. package/.idea/discord.xml +7 -0
  3. package/dist/index.min.js +2 -0
  4. package/dist/index.min.js.LICENSE.txt +3 -0
  5. package/examples/test.js +7 -0
  6. package/img.png +0 -0
  7. package/package.json +2 -2
  8. package/src/FMError.d.ts +12 -0
  9. package/src/FMError.js +1028 -0
  10. package/src/FMError.ts +1035 -0
  11. package/src/connection/FMHost.d.ts +12 -0
  12. package/src/connection/FMHost.js +68 -0
  13. package/src/connection/FMHost.ts +75 -0
  14. package/src/connection/database.d.ts +28 -0
  15. package/src/connection/database.js +195 -0
  16. package/src/connection/database.ts +216 -0
  17. package/src/connection/generateAuthorizationHeaders.d.ts +2 -0
  18. package/src/connection/generateAuthorizationHeaders.js +23 -0
  19. package/src/connection/generateAuthorizationHeaders.ts +32 -0
  20. package/src/index.d.ts +19 -0
  21. package/src/index.js +19 -2076
  22. package/src/index.ts +38 -2325
  23. package/src/layouts/layout.d.ts +29 -0
  24. package/src/layouts/layout.js +84 -0
  25. package/src/layouts/layout.ts +92 -0
  26. package/src/layouts/layoutInterface.d.ts +13 -0
  27. package/src/layouts/layoutInterface.js +4 -0
  28. package/src/layouts/layoutInterface.ts +21 -0
  29. package/src/layouts/layoutRecordManager.d.ts +13 -0
  30. package/src/layouts/layoutRecordManager.js +50 -0
  31. package/src/layouts/layoutRecordManager.ts +59 -0
  32. package/src/records/field.d.ts +23 -0
  33. package/src/records/field.js +177 -0
  34. package/src/records/field.ts +189 -0
  35. package/src/records/getOperations/find.d.ts +15 -0
  36. package/src/records/getOperations/find.js +90 -0
  37. package/src/records/getOperations/find.ts +88 -0
  38. package/src/records/getOperations/recordGetOperation.d.ts +17 -0
  39. package/src/records/getOperations/recordGetOperation.js +43 -0
  40. package/src/records/getOperations/recordGetOperation.ts +54 -0
  41. package/src/records/getOperations/recordGetRange.d.ts +13 -0
  42. package/src/records/getOperations/recordGetRange.js +95 -0
  43. package/src/records/getOperations/recordGetRange.ts +84 -0
  44. package/src/records/layoutRecord.d.ts +16 -0
  45. package/src/records/layoutRecord.js +211 -0
  46. package/src/records/layoutRecord.ts +220 -0
  47. package/src/records/portal.d.ts +10 -0
  48. package/src/records/portal.js +19 -0
  49. package/src/records/portal.ts +28 -0
  50. package/src/records/portalRecord.d.ts +12 -0
  51. package/src/records/portalRecord.js +32 -0
  52. package/src/records/portalRecord.ts +43 -0
  53. package/src/records/recordBase.d.ts +21 -0
  54. package/src/records/recordBase.js +95 -0
  55. package/src/records/recordBase.ts +121 -0
  56. package/src/types.d.ts +119 -0
  57. package/src/types.js +8 -0
  58. package/src/types.ts +151 -0
  59. package/test.d.ts +1 -0
  60. package/test.js +4 -0
  61. package/tsconfig.json +4 -0
  62. package/TEMP/FILEMAKER.txt +0 -218
  63. package/TEMP/WEBAPP.txt +0 -92
  64. package/TEMP/config.yaml +0 -40
  65. package/TEMP/data.json +0 -19837
  66. package/temp2/1.19.2-forge-43.2.8.json +0 -347
  67. package/temp2/Quinn-1.19.2-forge-43.2.8.json +0 -347
@@ -0,0 +1,21 @@
1
+ /// <reference types="node" />
2
+ import { EventEmitter } from "events";
3
+ import { Field } from "./field";
4
+ import { Layout } from "../layouts/layout";
5
+ import { FieldValue, RecordFieldsMap } from "../layouts/layoutInterface";
6
+ import { recordObject } from "../types.js";
7
+ export declare class RecordBase<T extends RecordFieldsMap> extends EventEmitter {
8
+ readonly layout: Layout<any>;
9
+ recordId: number;
10
+ modId: number;
11
+ fields: T;
12
+ protected portalData: any[];
13
+ constructor(layout: any, recordId: any, modId?: any);
14
+ get endpoint(): string;
15
+ get edited(): boolean;
16
+ get fieldsArray(): Field<FieldValue>[];
17
+ protected processFieldData(fieldData: any): T;
18
+ _onSave(): void;
19
+ getField(field: any): Field<FieldValue>;
20
+ toObject(filter?: (a: any) => any, portalFilter?: (a: any) => any, portalRowFilter?: (a: any) => any, portalFieldFilter?: (a: any) => any): recordObject;
21
+ }
@@ -0,0 +1,95 @@
1
+ /*
2
+ * Copyright (c) 2023. See LICENSE file for more information
3
+ */
4
+ import { EventEmitter } from "events";
5
+ import * as moment from "moment/moment";
6
+ import { Field } from "./field";
7
+ export class RecordBase extends EventEmitter {
8
+ constructor(layout, recordId, modId = recordId) {
9
+ super();
10
+ this.layout = layout;
11
+ this.recordId = recordId;
12
+ this.modId = modId;
13
+ }
14
+ get endpoint() {
15
+ return `${this.layout.endpoint}/records/${this.recordId}`;
16
+ }
17
+ get edited() {
18
+ return !!this.fieldsArray.find(i => i.edited);
19
+ }
20
+ get fieldsArray() {
21
+ return Object.values(this.fields);
22
+ }
23
+ processFieldData(fieldData) {
24
+ let fields = {};
25
+ for (let key of Object.keys(fieldData)) {
26
+ let _field = new Field(this, key, fieldData[key]);
27
+ if (!!fieldData[key]) {
28
+ if (_field.metadata.result === "timeStamp") {
29
+ // @ts-ignore
30
+ let date = moment.default(fieldData[key], this.layout.database.host.metadata.productInfo.timeStampFormat.replace("dd", "DD"))
31
+ .utcOffset(this.layout.database.host.timezoneOffset, true)
32
+ .local();
33
+ _field.set(date.toDate());
34
+ _field.edited = false;
35
+ }
36
+ else if (_field.metadata.result === "time") {
37
+ // @ts-ignore
38
+ let date = moment.default(fieldData[key], this.layout.database.host.metadata.productInfo.timeFormat.replace("dd", "DD"))
39
+ .utcOffset(this.layout.database.host.timezoneOffset, true)
40
+ .local();
41
+ _field.set(date.toDate());
42
+ _field.edited = false;
43
+ }
44
+ else if (_field.metadata.result === "date") {
45
+ // @ts-ignore
46
+ let date = moment.default(fieldData[key], this.layout.database.host.metadata.productInfo.dateFormat.replace("dd", "DD"))
47
+ .utcOffset(this.layout.database.host.timezoneOffset, true)
48
+ .local();
49
+ _field.set(date.toDate());
50
+ _field.edited = false;
51
+ }
52
+ }
53
+ fields[key] = _field;
54
+ }
55
+ this.fields = fields;
56
+ return fields;
57
+ }
58
+ _onSave() {
59
+ this.emit("saved");
60
+ for (let field of this.fieldsArray)
61
+ field.edited = false;
62
+ }
63
+ getField(field) {
64
+ return this.fieldsArray.find(_field => _field.id === field);
65
+ }
66
+ toObject(filter = (a) => a.edited, portalFilter = (a) => a.records.find(record => record.edited), portalRowFilter = (a) => a.edited, portalFieldFilter = (a) => a.edited) {
67
+ let fields_processed = {};
68
+ for (let field of this.fieldsArray.filter(field => filter(field))) {
69
+ let value = field.value;
70
+ if (value instanceof Date) {
71
+ // @ts-ignore
72
+ let _value = moment.default(value)
73
+ .utcOffset(this.layout.database.host.timezoneOffset);
74
+ // @ts-ignore
75
+ switch (field.metadata.result) {
76
+ case "time":
77
+ value = _value.format(this.layout.database.host.metadata.productInfo.timeFormat.replace("dd", "DD"));
78
+ break;
79
+ case "date":
80
+ value = _value.format(this.layout.database.host.metadata.productInfo.dateFormat.replace("dd", "DD"));
81
+ break;
82
+ default:
83
+ value = _value.format(this.layout.database.host.metadata.productInfo.timeStampFormat.replace("dd", "DD"));
84
+ }
85
+ }
86
+ fields_processed[field.id] = value;
87
+ }
88
+ let obj = {
89
+ "recordId": this.recordId,
90
+ "modId": this.modId,
91
+ "fieldData": fields_processed
92
+ };
93
+ return obj;
94
+ }
95
+ }
@@ -0,0 +1,121 @@
1
+ /*
2
+ * Copyright (c) 2023. See LICENSE file for more information
3
+ */
4
+
5
+ import {EventEmitter} from "events";
6
+ import * as moment from "moment/moment";
7
+ import {Field} from "./field";
8
+ import {Portal} from "./portal";
9
+ import {Layout} from "../layouts/layout";
10
+ import {FieldValue, RecordFieldsMap} from "../layouts/layoutInterface";
11
+ import {recordObject} from "../types.js";
12
+
13
+ export class RecordBase<T extends RecordFieldsMap> extends EventEmitter {
14
+ readonly layout: Layout<any>;
15
+ public recordId: number;
16
+ modId: number;
17
+ fields: T
18
+ protected portalData: any[];
19
+
20
+ constructor(layout, recordId, modId = recordId) {
21
+ super();
22
+ this.layout = layout
23
+ this.recordId = recordId
24
+ this.modId = modId
25
+ }
26
+
27
+ get endpoint(): string {
28
+ return `${this.layout.endpoint}/records/${this.recordId}`
29
+ }
30
+
31
+ get edited(): boolean {
32
+ return !!this.fieldsArray.find(i => i.edited)
33
+ }
34
+
35
+ get fieldsArray() {
36
+ return Object.values(this.fields)
37
+ }
38
+
39
+ protected processFieldData(fieldData) {
40
+ let fields: RecordFieldsMap = {}
41
+
42
+ for (let key of Object.keys(fieldData)) {
43
+ let _field = new Field(this, key, fieldData[key])
44
+ if (!!fieldData[key]) {
45
+ if (_field.metadata.result === "timeStamp") {
46
+ // @ts-ignore
47
+ let date = moment.default(fieldData[key], this.layout.database.host.metadata.productInfo.timeStampFormat.replace("dd", "DD"))
48
+ .utcOffset(this.layout.database.host.timezoneOffset, true)
49
+ .local()
50
+ _field.set(date.toDate())
51
+ _field.edited = false
52
+
53
+ }
54
+ else if (_field.metadata.result === "time") {
55
+ // @ts-ignore
56
+ let date = moment.default(fieldData[key], this.layout.database.host.metadata.productInfo.timeFormat.replace("dd", "DD"))
57
+ .utcOffset(this.layout.database.host.timezoneOffset, true)
58
+ .local()
59
+ _field.set(date.toDate())
60
+ _field.edited = false
61
+ }
62
+ else if (_field.metadata.result === "date") {
63
+ // @ts-ignore
64
+ let date = moment.default(fieldData[key], this.layout.database.host.metadata.productInfo.dateFormat.replace("dd", "DD"))
65
+ .utcOffset(this.layout.database.host.timezoneOffset, true)
66
+ .local()
67
+ _field.set(date.toDate())
68
+ _field.edited = false
69
+ }
70
+ }
71
+ fields[key] = _field
72
+ }
73
+ this.fields = fields as T
74
+ return fields as T
75
+ }
76
+
77
+ _onSave() {
78
+ this.emit("saved")
79
+ for (let field of this.fieldsArray) field.edited = false
80
+ }
81
+
82
+ getField(field) {
83
+ return this.fieldsArray.find(_field => _field.id === field)
84
+ }
85
+
86
+ toObject(filter = (a) => a.edited,
87
+ portalFilter = (a) => a.records.find(record => record.edited),
88
+ portalRowFilter = (a) => a.edited,
89
+ portalFieldFilter = (a) => a.edited
90
+ ): recordObject {
91
+ let fields_processed = {}
92
+ for (let field of this.fieldsArray.filter(field => filter(field))) {
93
+ let value = field.value
94
+ if (value instanceof Date) {
95
+ // @ts-ignore
96
+ let _value = moment.default(value)
97
+ .utcOffset(this.layout.database.host.timezoneOffset)
98
+
99
+ // @ts-ignore
100
+
101
+ switch (field.metadata.result) {
102
+ case "time":
103
+ value = _value.format(this.layout.database.host.metadata.productInfo.timeFormat.replace("dd", "DD"))
104
+ break
105
+ case "date":
106
+ value = _value.format(this.layout.database.host.metadata.productInfo.dateFormat.replace("dd", "DD"))
107
+ break
108
+ default:
109
+ value = _value.format(this.layout.database.host.metadata.productInfo.timeStampFormat.replace("dd", "DD"))
110
+ }
111
+ }
112
+ fields_processed[field.id] = value
113
+ }
114
+ let obj = {
115
+ "recordId": this.recordId,
116
+ "modId": this.modId,
117
+ "fieldData": fields_processed
118
+ }
119
+ return obj
120
+ }
121
+ }
package/src/types.d.ts ADDED
@@ -0,0 +1,119 @@
1
+ /// <reference types="node" />
2
+ /// <reference types="node" />
3
+ import * as http from "http";
4
+ import { Portal } from "./records/portal";
5
+ import { FMError } from "./FMError";
6
+ export interface databaseOptionsBase {
7
+ database: string;
8
+ credentials: loginOptionsOAuth | loginOptionsFileMaker | loginOptionsClaris | loginOptionsToken;
9
+ }
10
+ export interface databaseOptionsWithExternalSources extends databaseOptionsBase {
11
+ database: string;
12
+ credentials: loginOptionsOAuth | loginOptionsFileMaker | loginOptionsClaris | loginOptionsToken;
13
+ externalSources: databaseOptionsBase[];
14
+ }
15
+ export interface loginOptionsToken {
16
+ method: "token";
17
+ token: string;
18
+ }
19
+ export interface loginOptionsOAuth {
20
+ method: "oauth";
21
+ oauth: {
22
+ requestId: string;
23
+ requestIdentifier: string;
24
+ };
25
+ }
26
+ export interface loginOptionsFileMaker {
27
+ method: "filemaker";
28
+ username: string;
29
+ password: string;
30
+ }
31
+ export interface loginOptionsClaris {
32
+ method: "claris";
33
+ claris: {
34
+ fmid: string;
35
+ };
36
+ }
37
+ export interface limitPortalsInterface {
38
+ portal: Portal<any>;
39
+ offset: number;
40
+ limit: number;
41
+ }
42
+ export interface extraBodyOptions {
43
+ scripts?: {
44
+ prerequest?: Script;
45
+ presort?: Script;
46
+ after?: Script;
47
+ };
48
+ }
49
+ export declare enum DOWNLOAD_MODES {
50
+ Stream = 0,
51
+ Buffer = 1
52
+ }
53
+ export interface Script {
54
+ name: string;
55
+ parameter: string;
56
+ }
57
+ export interface recordObject {
58
+ recordId: number;
59
+ modId: number;
60
+ fieldData: any;
61
+ portalData?: portalDataObject;
62
+ }
63
+ export interface fileMakerResponse {
64
+ response: any;
65
+ messages: any[];
66
+ }
67
+ export interface portalDataObject {
68
+ [key: string]: recordObject;
69
+ }
70
+ export interface FieldMetaData {
71
+ name: string;
72
+ type: string;
73
+ displayType: string;
74
+ result: string;
75
+ global: boolean;
76
+ autoEnter: boolean;
77
+ fourDigitYear: boolean;
78
+ maxRepeat: number;
79
+ maxCharacters: number;
80
+ notEmpty: boolean;
81
+ numeric: boolean;
82
+ timeOfDay: false;
83
+ repetitionStart: number;
84
+ repetitionEnd: number;
85
+ }
86
+ export interface LayoutMetaData {
87
+ fieldMetaData: FieldMetaData[];
88
+ portalMetaData?: {
89
+ [key: string]: FieldMetaData[];
90
+ };
91
+ }
92
+ export interface FMHostMetadata {
93
+ productInfo: {
94
+ buildDate: Date;
95
+ name: string;
96
+ version: string;
97
+ dateFormat: string;
98
+ timeFormat: string;
99
+ timeStampFormat: string;
100
+ };
101
+ }
102
+ export interface ScriptResult {
103
+ scriptError?: FMError;
104
+ scriptResult?: string;
105
+ }
106
+ export interface ContainerBufferResult {
107
+ buffer: Buffer;
108
+ mime: string;
109
+ request: http.IncomingMessage;
110
+ }
111
+ export interface AuthorizationHeaders {
112
+ "Content-Type": "application/json";
113
+ Authorization: string;
114
+ }
115
+ export interface AuthorizationHeadersOAuth {
116
+ "Content-Type": "application/json";
117
+ "X-FM-Data-OAuth-RequestId": string;
118
+ "X-FM-Data-OAuth-Identifier": string;
119
+ }
package/src/types.js ADDED
@@ -0,0 +1,8 @@
1
+ /*
2
+ * Copyright (c) 2022-2023. See LICENSE file for more information
3
+ */
4
+ export var DOWNLOAD_MODES;
5
+ (function (DOWNLOAD_MODES) {
6
+ DOWNLOAD_MODES[DOWNLOAD_MODES["Stream"] = 0] = "Stream";
7
+ DOWNLOAD_MODES[DOWNLOAD_MODES["Buffer"] = 1] = "Buffer";
8
+ })(DOWNLOAD_MODES || (DOWNLOAD_MODES = {}));
package/src/types.ts ADDED
@@ -0,0 +1,151 @@
1
+ /*
2
+ * Copyright (c) 2022-2023. See LICENSE file for more information
3
+ */
4
+
5
+ // const fetch = (...args) => import('node-fetch').then(({default: fetch}) => fetch(...args));
6
+ // @ts-ignore
7
+ import * as moment from "moment"
8
+ import * as http from "http";
9
+ import {Portal} from "./records/portal";
10
+ import {FMError} from "./FMError";
11
+
12
+ // import * as btoa from "btoa";
13
+ export interface databaseOptionsBase {
14
+ database: string
15
+ credentials: loginOptionsOAuth | loginOptionsFileMaker | loginOptionsClaris | loginOptionsToken,
16
+ }
17
+
18
+ export interface databaseOptionsWithExternalSources extends databaseOptionsBase {
19
+ database: string
20
+ credentials: loginOptionsOAuth | loginOptionsFileMaker | loginOptionsClaris | loginOptionsToken,
21
+ externalSources: databaseOptionsBase[]
22
+ }
23
+
24
+ export interface loginOptionsToken {
25
+ method: "token"
26
+ token: string
27
+ }
28
+
29
+ export interface loginOptionsOAuth {
30
+ method: "oauth"
31
+ oauth: {
32
+ requestId: string,
33
+ requestIdentifier: string
34
+ }
35
+ }
36
+
37
+ export interface loginOptionsFileMaker {
38
+ method: "filemaker"
39
+ username: string,
40
+ password: string,
41
+ }
42
+
43
+ export interface loginOptionsClaris {
44
+ method: "claris"
45
+ claris: {
46
+ fmid: string
47
+ }
48
+ }
49
+
50
+ export interface limitPortalsInterface {
51
+ portal: Portal<any>,
52
+ offset: number,
53
+ limit: number
54
+ }
55
+
56
+ export interface extraBodyOptions {
57
+ scripts?: {
58
+ prerequest?: Script,
59
+ presort?: Script,
60
+ after?: Script,
61
+ }
62
+ }
63
+
64
+ export enum DOWNLOAD_MODES {
65
+ Stream,
66
+ Buffer
67
+ }
68
+
69
+ export interface Script {
70
+ name: string
71
+ parameter: string
72
+ }
73
+
74
+ export interface recordObject {
75
+ recordId: number
76
+ modId: number,
77
+ fieldData: any,
78
+ portalData?: portalDataObject
79
+ }
80
+
81
+ export interface fileMakerResponse {
82
+ response: any,
83
+ messages: any[]
84
+ }
85
+
86
+ export interface portalDataObject {
87
+ [key: string]: recordObject
88
+ }
89
+
90
+ export interface FieldMetaData {
91
+ name: string,
92
+ type: string,
93
+ displayType: string,
94
+ result: string,
95
+ global: boolean,
96
+ autoEnter: boolean,
97
+ fourDigitYear: boolean,
98
+ maxRepeat: number,
99
+ maxCharacters: number,
100
+ notEmpty: boolean,
101
+ numeric: boolean,
102
+ timeOfDay: false,
103
+ repetitionStart: number,
104
+ repetitionEnd: number
105
+ }
106
+
107
+ export interface LayoutMetaData {
108
+ fieldMetaData: FieldMetaData[],
109
+ portalMetaData?: {
110
+ [key: string]: FieldMetaData[]
111
+ }
112
+ }
113
+
114
+ export interface FMHostMetadata {
115
+ productInfo: {
116
+ buildDate: Date,
117
+ name: string,
118
+ version: string,
119
+ dateFormat: string,
120
+ timeFormat: string,
121
+ timeStampFormat: string
122
+ }
123
+ }
124
+
125
+ export interface ScriptResult {
126
+ scriptError?: FMError,
127
+ scriptResult?: string
128
+ }
129
+
130
+ export interface ContainerBufferResult {
131
+ buffer: Buffer,
132
+ mime: string,
133
+ request: http.IncomingMessage
134
+ }
135
+
136
+ //
137
+ // module.exports = {
138
+ // default: {FileMakerConnection}
139
+ // }
140
+
141
+ export interface AuthorizationHeaders {
142
+ "Content-Type": "application/json"
143
+ Authorization: string
144
+ }
145
+
146
+ export interface AuthorizationHeadersOAuth {
147
+ "Content-Type": "application/json"
148
+ "X-FM-Data-OAuth-RequestId": string,
149
+ "X-FM-Data-OAuth-Identifier": string
150
+ }
151
+
package/test.d.ts ADDED
@@ -0,0 +1 @@
1
+ export {};
package/test.js ADDED
@@ -0,0 +1,4 @@
1
+ /*
2
+ * Copyright (c) 2023. See LICENSE file for more information
3
+ */
4
+ export {};
package/tsconfig.json CHANGED
@@ -4,7 +4,11 @@
4
4
  "module": "es2022",
5
5
  "lib": ["es2021.intl", "es2015"],
6
6
  "moduleResolution": "Node",
7
+ "declaration": true
7
8
  },
9
+ "exclude": [
10
+ "node_modules"
11
+ ],
8
12
  "files": [
9
13
  "src/index.ts"
10
14
  ]