0.3.2 â€ĸ Published 11 months ago

create-wrangler v0.3.2

Weekly downloads
-
License
Unlicense
Repository
github
Last release
11 months ago

create-wrangler npm.io

đŸŒŠī¸ 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.

| npm.io | -

âœ”ī¸Ž Use programmatic constructs to build configuration

âœ”ī¸Ž Use environment variables to exclude sensitive data

âœ”ī¸Ž Test the configuration file

âœ”ī¸Ž Use Typescript or Javascript files

Usage

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.

This file can be a Javascript (.js) or Typescript file (.ts)

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.

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.

{
	"scripts": {
		"predeploy": "npm_config_yes=true npm create wrangler",
		"deploy": "wrangler deploy"
	}
}
0.3.0

11 months ago

0.3.2

11 months ago

0.3.1

11 months ago

0.2.1

2 years ago

0.2.0

2 years ago

0.1.0

2 years ago

0.0.0

2 years ago