First of all, please note that pris-types
is extremely alpha. At the moment, it:
If you still want to try it out (and you should!), this is how you can get started:
yarn add -D pris-types@alpha
or
npm i --save-dev pris-types@alpha
Of course, alpha
is an adventurous choice but hey, you're an adventurer 😊
Once this is done, you should add pris-types-watch
script to your package.json
.
For example, this line comes from my own test project:
{ scripts: { "watch": "pris-types-watch --lib ./slices" } }
👆 To work as expected, the script expects the slice builder to be running. If you don't have a SliceMachine project yet, please visit its website first!
--lib
(required)As you could see from the previous example, the watcher expects a --lib
argument to be passed.
It should point to a library you defined in your sm.json
file. In you need more than one library, please raise an issue on Github.
--port
By default, the watcher connects to the builder and saves on port 9999
.
To change that, simply pass a --port
argument to the script.
Once the script is running, open your favourite editor and paste this portion of code there:
import { PrisTypes } from 'pris-types' export const Model = PrisTypes.shape({ __meta: { title: 'My Slice', description: 'A simple slice' }, defaultVariation: PrisTypes.variation({ primary: { title: PrisTypes.Title, description: PrisTypes.RichText({ placeholder: "short length text please" }), }, items: { color: PrisTypes.Color } }) })
On save, if everything went well, you should see new files next to your slice:
a model.json
file and a mocks.json
file 🎉 This means the script was able to save
your JS model and generate a JSON model out of it, and mock content for it. If you head to the slice editor, you should
see your slice and be able to push it to Prismic. If you use StoryBook, check how the new story looks!
SliceMachine generates mocks for each of your slices. This is a powerful feature as it helps you build your components the way they will be used, without having to actualy create documents and query them. To refine the kind of data you receive, you can pass a optional mock configuration object:
import { PrisTypes } from 'pris-types' export const Mocks = { defaultVariation: { items: { color: PrisTypes.Color.Light() } }) })
👆 As you can see, no need to pass values for each field! You should only configure fields that expect a specific type of content, that the current builder does not offer. Check the Fields Reference to discover all the mock helpers.
Sometimes, understanding how things work can help both the debugging and the fun.
The first thing that pris-types-watch
does is quite obvious: it takes the --lib
argument
you passed and looks for all slices there (your-lib-path/[SliceName]/index.(js|ts|vue)
).
Then, and everytime one of these files changes, a Babel plugin is called.
With the help of Babel transform function, this plugin does one thing: it looks for keys Model
and Mocks
and extracts them as AST objects. Then, some checks are done: do the keys exist, do they look right?
Alright, everything looks good. A second function is then called. Its role is to take your input and to evaluate it.
You read that right: it runs eval
on your code. Several reasons exist for this, the main one being that it allows the plugin to create the right context,
in which your code will be executed.
Once this function is called, a payload is created. It contains the model
that Prismic expects and a mockConfig
object
that will tell the builder how you want your mocks to be generated. It then calls its save function (http://localhost:9999/api/update
).
If you configured everything properly, the builder should then do its job:
.slicemachine/mocks.json
Voilà! Once you made all your changes and checked that everything worked as expected, you can push everything to Prismic and start changing your content ✌️