0.5.0 • Published 1 year ago

@shopyos/metaobjects-orm v0.5.0

Weekly downloads
-
License
MIT
Repository
github
Last release
1 year ago

Shopify GraphQL Metaobjects API

Overview

This npm package provides a convenient wrapper for the Shopify GraphQL Metaobjects API, simplifying the integration of metaobjects as a persistence layer in your applications. It is designed to be template-agnostic, allowing flexibility in the choice of templates for your Shopify App.

Installation

To install the package, use npm:

npm install @shopyos/metaobjects-orm

Usage

To use the package, first you need to create a new file in the root of your project called metaobjects/schema.json

Schema example

[
  {
    "type": "faq_groups",
    "name": "FAQs Groups",
    "is_public": true,
    "fields": [
      {
        "name": "Group name",
        "key": "name",
        "type": "single_line_text_field",
        "validations": []
      }
    ]
  },
  {
    "type": "faq_questions",
    "name": "FAQs",
    "is_public": true,
    "fields": [
      {
        "name": "Question",
        "key": "question",
        "type": "single_line_text_field",
        "validations": []
      },
      {
        "name": "Answer",
        "key": "answer",
        "type": "multi_line_text_field",
        "validations": []
      },
      {
        "name": "Weight",
        "key": "weight",
        "type": "number_integer",
        "validations": []
      },
      {
        "name": "Group",
        "key": "group",
        "type": "metaobject_reference",
        "validations": [
          {
            "name": "metaobject_definition_id",
            "value": "faq_groups"
          }
        ]
      }
    ]
  }
]

Schema installation

After creating the schema file, you can import the metaobject global object to run the installation

import { metaobject } from '@shopyos/metaobjects-orm';

metaobject.schema.install(shop, token);
metaobject.schema.uninstall(shop, token);

Create or update entries

import {Metaobject} from "@shopyos/metaobjects-orm/dist/Metaobject";
import {metaobject} from "@shopyos/metaobjects-orm";

export class GroupCreator {
  public async execute(
    type: string,
    value: string,
    shop: string,
    token: string
  ): Promise<void> {
    const object: Metaobject = {
      type: 'my_metaobject_type',
      handle: type,
      fields: [{
        key: 'my_field',
        value: 'my_value'
      }]
    };
    await metaobject.manager.save(shop, token, object);
  }
}

Delete entries

import {metaobject} from "@shopyos/metaobjects-orm";
export class Delete {
  public async delete(id: string, shop: string, token: string): Promise<void> {
    const object = await metaobject.manager.get(shop, token, id, 'my_type');
    await metaobject.manager.delete(shop, token, object?.id);
  }
}

Fetching entries

import {metaobject} from "@shopyos/metaobjects-orm";

type MyInterface = {
  id: string;
  resource?: string;
  name: string;
};

export class Find {
  public async findAll(shop: string, token: string): Promise<MyInterface[]> {
    const metaobjectList = await metaobject.manager.list(shop, token, 'my_type');
    return metaobjectList.data?.map((object) => {
      return {
        id: object.handle,
        resource: object.id,
        name: String(object.fields.find((field) => field.key === 'name')?.value) ?? ''
      };
    });
  }
}

Contributions

Contributions are welcome! For feature requests and bug reports please submit an issue.

License

This package is open-sourced software licensed under the MIT license.

0.5.0

1 year ago

0.3.0

1 year ago

0.4.4

1 year ago

0.4.1

1 year ago

0.4.0

1 year ago

0.4.3

1 year ago

0.4.2

1 year ago

0.2.2

1 year ago

0.2.1

1 year ago

0.2.0

1 year ago

0.1.6

1 year ago

0.1.4

1 year ago

0.1.3

1 year ago