1.6.8 • Published 6 months ago

apollo-datasource-filemaker v1.6.8

Weekly downloads
-
License
SEE LICENSE IN LI...
Repository
-
Last release
6 months ago

Apollo Datasource Library for FileMaker Data API

This provides a javascript API which can be used within resolver functions to fetch data from a filemaker server in a uniform way.

This library is written in TypeScript (a variant of Javascript written by Microsoft) and either ran using ts-node (for dev) or compiled to plain javascript through tsc to generate a distributable package.

import express from "express";
import { ApolloServer, makeExecutableSchema, gql } from "apollo-server-express";
import { FileMakerDataAPI } from "apollo-datasource-filemaker";
const app = express();
  app.use(cors());
  
  const apollo = new ApolloServer({
    context: apolloServerContext,
    dataSources: () => ({
        filemakerAPI: new FileMakerDataAPI({
            database: "FM_DATABASE_NAME",
            hostname: "FM_HOSTNAME",
            username: "Admin",
            password: "TESTPASSWORD",
            strict_https: true,
        }),
        secondaryDatabaseAPI: new FileMakerDataAPI({
            database: "FM_DATABASE_NAME_2",
            hostname: "FM_HOSTNAME",
            username: "Admin",
            password: "TESTPASSWORD",
            strict_https: true,
        }),
    }),
    typeDefs: gql`
        type Query {
            getXYZRecords: [XYZRecord]
            getABCRecords: [ABCRecord]
        }
    `,
    resolvers: {
        getXYZRecords(_, { arg2 = null, arg3 = null }, {dataSources:  { filemakerAPI }}, info) => filemakerAPI.findRecords({ layout: `XYZ`, query: [{"trait1": "static", "trait2": arg2, "trait3": arg3}]})
    }
  }
  apollo.applyMiddleware({ app, path: urlRoot, cors: true });
  app.listen({ port: 4000 }, ()=>{
      console.log("server is listening on http://localhost:4000")
  })
;

You can re-write the resolver to something more readable:

const resolverFunctionXYZ = (_, args, context, info) => {
    const { dataSources } = context;
    const { filemakerAPI } = dataSources;
    const { uuid, pubId } = args;
    return filemakerAPI.findRecords({
        layout: "FILEMAKER_LAYOUT_NAME",
        sort: [
            {
                fieldName: "FILEMAKER_FIELD_TO_SORT_BY", sortOrder: "ascend"
            },
        ],
        query: [
            {
                "show": "1",
                "uuid": uuid,
                "pubID": pubId
            },
        ],
    });

You can see the API documentation for your server here: https://server-address.local/fmi/data/apidoc/

replacing server-address.local with your server's IP or hostname

This library includes a suite of tests (in *.spec.ts files) which tests the libraries functionality against a very basic FileMaker database.

Execute tests with:

npm test

Generate a test coverage report using this command:

npm run coverage
1.6.8

6 months ago

1.6.7

1 year ago

1.6.4

3 years ago

1.6.3

3 years ago

1.6.6

3 years ago

1.6.0

3 years ago

1.5.4

3 years ago

1.5.3

4 years ago

1.5.2

4 years ago

1.5.1

4 years ago

1.5.0

4 years ago

1.4.4

4 years ago

1.4.3

4 years ago

1.4.2

4 years ago

1.4.1

4 years ago

1.4.0

4 years ago

1.3.2

4 years ago