https://github.com/omrilotan/create-wrangler
đŠī¸ Create a wrangler.toml file from a programmable template, presented as a Javascript file
https://github.com/omrilotan/create-wrangler
cloudflare-workers wrangler
Last synced: 7 months ago
JSON representation
đŠī¸ Create a wrangler.toml file from a programmable template, presented as a Javascript file
- Host: GitHub
- URL: https://github.com/omrilotan/create-wrangler
- Owner: omrilotan
- License: unlicense
- Created: 2023-02-07T12:12:54.000Z (over 2 years ago)
- Default Branch: main
- Last Pushed: 2024-08-15T10:26:00.000Z (about 1 year ago)
- Last Synced: 2025-02-27T04:11:28.335Z (7 months ago)
- Topics: cloudflare-workers, wrangler
- Language: JavaScript
- Homepage:
- Size: 24.4 KB
- Stars: 1
- Watchers: 2
- Forks: 0
- Open Issues: 0
-
Metadata Files:
- Readme: README.md
- Changelog: CHANGELOG.md
- License: LICENSE.md
Awesome Lists containing this project
README
# create-wrangler [](https://www.npmjs.com/package/create-wrangler)
đŠī¸ Create a wrangler.toml file from a programmable template, presented as a Javascript file
## Motivation
User maintains a programmable, testable file. Create, maintain and test complex configurations.
Repetitive parts can be used as variables and collections can be built with code. Some data can be excluded from the source code and made available as environment variables.
The code file is used to build a `wrangler.toml` file, to be used by `wrangler`.
| 
| -> âī¸ Use programmatic constructs to build configuration
>
> âī¸ Use environment variables to exclude sensitive data
>
> âī¸ Test the configuration file
>
> âī¸ Use Typescript or Javascript files## Usage
```sh
npm create wrangler -- [--input ./wrangler.tmpl.js] [--output ./wrangler.toml]
```### Arguments
--input (-i): The path to the template file. Defaults to `./wrangler.tmpl.js` or `./wrangler.tmpl.ts`.
--output (-o): The path to the destination file. Defaults to `./wrangler.toml`.
--silent: Do not output the result to the console.
--help: Display help message.
### Input file
The input file exports a named function: `template`, which receives a single argument: [the TOML object](https://www.npmjs.com/package/@ltd/j-toml).
This file can be a Javascript (.js) or Typescript file (.ts)
```js
const {
ACCOUNT_ID = "96b57b07c3394752a79b623f49bc5163",
KV_NAMESPAC_ID = "798d14f4b4c949d185fcf39b0f593ac7",
} = process.env;
const ZONE = "example.com";
const subdomains = ["", "www.", "es."];
const paths = ["/", "/app*", "/admin*"];export const template = ({ Section }) => ({
name: "my-worker",
main: "src/index.ts",
compatibility_date: "2022-07-04",
workers_dev: false,
account_id: ACCOUNT_ID,
env: Section({
production: {
name: "my-worker-production",
main: "src/index.ts",
routes: subdomains.flatMap((subdomain) =>
paths.map((path) => ({
pattern: [subdomain, ZONE, path].join(""),
zone_name: ZONE,
})),
),
vars: Section({
LOG_LEVEL: "warn",
}),
kv_namespaces: [
{
binding: "MY_KV_NAMESPACE",
id: KV_NAMESPAC_ID,
},
],
unsafe: {
bindings: [
Section({
type: "analytics_engine",
name: "MY_WORKER_ANALYTICS",
dataset: "MY_WORKER_ANALYTICS",
}),
],
},
},
}),
});
```### Output file
The output file is a valid `wrangler.toml` file.
```toml
name = 'my-worker'
main = 'src/index.ts'
compatibility_date = '2022-07-04'
workers_dev = false
account_id = '96b57b07c3394752a79b623f49bc5163'[env.production]
name = 'my-worker-production'
main = 'src/index.ts'
routes = [
{ pattern = 'example.com/', zone_name = 'example.com' },
{ pattern = 'example.com/app*', zone_name = 'example.com' },
{ pattern = 'example.com/admin*', zone_name = 'example.com' },
{ pattern = 'www.example.com/', zone_name = 'example.com' },
{ pattern = 'www.example.com/app*', zone_name = 'example.com' },
{ pattern = 'www.example.com/admin*', zone_name = 'example.com' },
{ pattern = 'es.example.com/', zone_name = 'example.com' },
{ pattern = 'es.example.com/app*', zone_name = 'example.com' },
{ pattern = 'es.example.com/admin*', zone_name = 'example.com' },
]
kv_namespaces = [
{ binding = 'MY_KV_NAMESPACE', id = '798d14f4b4c949d185fcf39b0f593ac7' },
][env.production.vars]
LOG_LEVEL = 'warn'[[env.production.unsafe.bindings]]
type = 'analytics_engine'
name = 'MY_WORKER_ANALYTICS'
dataset = 'MY_WORKER_ANALYTICS'```
### package.json entry
In this example, the `predeploy` script will create the `wrangler.toml` file before the `deploy` script runs `wrangler deploy`.
```json
{
"scripts": {
"predeploy": "npm_config_yes=true npm create wrangler",
"deploy": "wrangler deploy"
}
}
```