The following command will create an order discount Function at extensions/order-discount-javascript
, using our JavaScript boilerplate.
npm run generate extension -- --type order_discounts --template vanilla-js --name order-discount-javascript
Replace the contents of extensions/order-discount-javascript/input.graphql
with the following from GitHub:
For JavaScript and TypeScript, we provide tooling to generate types for working with your function input and output.
cd extensions/order-discount-javascript
npm run typegen
src/index.js
in an IDE that supports TypeScript, such as Visual Studio Code. Note that you get language server features (such as autocomplete, hover info, etc.) on the InputQuery
and FunctionResult
types.You need to inform Shopify about the UI paths for configuring your function. These paths are already provided by the app template you used.
In shopify.function.extension.toml
, replace the [ui.paths]
section with the following:
[ui.paths]
create = "/discount/:functionId/new"
details = "/discount/:functionId/:id"
You also need to inform Shopify about where to find GraphQL variable values that will be used when executing your input query.
Add the following to shopify.function.extension.toml
:
[input.variables]
namespace = "$app:polyglot-functions"
key = "function-configuration"
In src/index.js
, implement the following function logic, outputting appropriate JSON for an order discount function result.
IF customer has VIP metafield with a value of 'true'
AND products in their cart with tag X have a total of more than $Y
THEN discount the order by Z%
Hint: You can find a completed example on GitHub:
npm run build
FunctionResult
GraphQL type:npm run function:validate --prefix ../..
npm run function:preview --prefix ../..
Use the following steps, selecting the order-discount-javascript
discount type, and using JAVASCRIPT
as your discount code.
cd ../..
npm run deploy
npm run dev
executing in a terminal window.The workshop app includes a test script which will execute all the function wasm modules you have created so far, and print a comparison of their instruction count and binary size.
cd ../..
npm run function:test-all
You're a JavaScript expert. Onto another language?