UNPKG

@proofkit/fmodata

Version:
133 lines (132 loc) 3.88 kB
class SchemaManager { constructor(databaseName, context) { this.databaseName = databaseName; this.context = context; } async createTable(tableName, fields, options) { const result = await this.context._makeRequest( `/${this.databaseName}/FileMaker_Tables`, { method: "POST", body: JSON.stringify({ tableName, fields: fields.map(SchemaManager.compileFieldDefinition) }), ...options } ); if (result.error) { throw result.error; } return result.data; } async addFields(tableName, fields, options) { const result = await this.context._makeRequest( `/${this.databaseName}/FileMaker_Tables/${tableName}`, { method: "PATCH", body: JSON.stringify({ fields: fields.map(SchemaManager.compileFieldDefinition) }), ...options } ); if (result.error) { throw result.error; } return result.data; } async deleteTable(tableName, options) { const result = await this.context._makeRequest( `/${this.databaseName}/FileMaker_Tables/${tableName}`, { method: "DELETE", ...options } ); if (result.error) { throw result.error; } } async deleteField(tableName, fieldName, options) { const result = await this.context._makeRequest( `/${this.databaseName}/FileMaker_Tables/${tableName}/${fieldName}`, { method: "DELETE", ...options } ); if (result.error) { throw result.error; } } async createIndex(tableName, fieldName, options) { const result = await this.context._makeRequest( `/${this.databaseName}/FileMaker_Indexes/${tableName}`, { method: "POST", body: JSON.stringify({ indexName: fieldName }), ...options } ); if (result.error) { throw result.error; } return result.data; } async deleteIndex(tableName, fieldName, options) { const result = await this.context._makeRequest( `/${this.databaseName}/FileMaker_Indexes/${tableName}/${fieldName}`, { method: "DELETE", ...options } ); if (result.error) { throw result.error; } } static compileFieldDefinition(field) { let type = field.type; const repetitions = field.repetitions; if (field.type === "string") { type = "varchar"; const stringField = field; if (stringField.maxLength !== void 0) { type += `(${stringField.maxLength})`; } } if (repetitions !== void 0) { type += `[${repetitions}]`; } const result = { name: field.name, type }; if (field.nullable !== void 0) result.nullable = field.nullable; if (field.primary !== void 0) result.primary = field.primary; if (field.unique !== void 0) result.unique = field.unique; if (field.global !== void 0) result.global = field.global; if (field.type === "string") { const stringField = field; if (stringField.default !== void 0) result.default = stringField.default; } else if (field.type === "date") { const dateField = field; if (dateField.default !== void 0) result.default = dateField.default; } else if (field.type === "time") { const timeField = field; if (timeField.default !== void 0) result.default = timeField.default; } else if (field.type === "timestamp") { const timestampField = field; if (timestampField.default !== void 0) result.default = timestampField.default; } else if (field.type === "container") { const containerField = field; if (containerField.externalSecurePath !== void 0) result.externalSecurePath = containerField.externalSecurePath; } return result; } } export { SchemaManager }; //# sourceMappingURL=schema-manager.js.map