Automatically deploy and update workers
Signed-off-by: ItalyPaleAle <43508+ItalyPaleAle@users.noreply.github.com>
This commit is contained in:
parent
456caaef6a
commit
adc70a0143
|
@ -23,7 +23,9 @@ import (
|
||||||
"errors"
|
"errors"
|
||||||
"fmt"
|
"fmt"
|
||||||
"io"
|
"io"
|
||||||
|
"mime/multipart"
|
||||||
"net/http"
|
"net/http"
|
||||||
|
"net/textproto"
|
||||||
"net/url"
|
"net/url"
|
||||||
"regexp"
|
"regexp"
|
||||||
"strconv"
|
"strconv"
|
||||||
|
@ -33,9 +35,12 @@ import (
|
||||||
"github.com/lestrrat-go/jwx/v2/jwa"
|
"github.com/lestrrat-go/jwx/v2/jwa"
|
||||||
"github.com/lestrrat-go/jwx/v2/jwt"
|
"github.com/lestrrat-go/jwx/v2/jwt"
|
||||||
"github.com/mitchellh/mapstructure"
|
"github.com/mitchellh/mapstructure"
|
||||||
|
"k8s.io/utils/strings/slices"
|
||||||
|
|
||||||
"github.com/dapr/components-contrib/bindings"
|
"github.com/dapr/components-contrib/bindings"
|
||||||
|
cfworkercode "github.com/dapr/components-contrib/internal/component/cloudflare/worker-src/dist"
|
||||||
"github.com/dapr/kit/logger"
|
"github.com/dapr/kit/logger"
|
||||||
|
"github.com/dapr/kit/ptr"
|
||||||
)
|
)
|
||||||
|
|
||||||
const (
|
const (
|
||||||
|
@ -45,6 +50,9 @@ const (
|
||||||
tokenIssuer = "dapr.io/cloudflare"
|
tokenIssuer = "dapr.io/cloudflare"
|
||||||
// JWT token expiration
|
// JWT token expiration
|
||||||
tokenExpiration = 5 * time.Minute
|
tokenExpiration = 5 * time.Minute
|
||||||
|
// Link to the documentation for the component
|
||||||
|
// TODO: Add link to docs
|
||||||
|
componentDocsUrl = "https://TODO"
|
||||||
)
|
)
|
||||||
|
|
||||||
// CFQueues is a binding for publishing messages on Cloudflare Queues
|
// CFQueues is a binding for publishing messages on Cloudflare Queues
|
||||||
|
@ -78,15 +86,231 @@ func (q *CFQueues) Init(metadata bindings.Metadata) error {
|
||||||
Timeout: time.Second * 30,
|
Timeout: time.Second * 30,
|
||||||
}
|
}
|
||||||
|
|
||||||
// TODO: Automatically create or update the worker
|
// Check if we're using an externally-managed worker
|
||||||
ok, err := q.checkWorker()
|
if q.metadata.WorkerURL != "" {
|
||||||
if err != nil {
|
q.logger.Info("Using externally-managed worker: " + q.metadata.WorkerURL)
|
||||||
q.logger.Errorf("The component could not be initialized because of an error: %v", err)
|
err = q.checkWorker(q.metadata.WorkerURL)
|
||||||
return err
|
if err != nil {
|
||||||
|
q.logger.Errorf("The component could not be initialized because the externally-managed worker cannot be used: %v", err)
|
||||||
|
return err
|
||||||
|
}
|
||||||
|
} else {
|
||||||
|
// We are using a Dapr-managed worker, so let's check if it exists or needs to be created or updated
|
||||||
|
err = q.setupWorker()
|
||||||
|
if err != nil {
|
||||||
|
q.logger.Errorf("The component could not be initialized because the worker cannot be created or updated: %v", err)
|
||||||
|
return err
|
||||||
|
}
|
||||||
}
|
}
|
||||||
if !ok {
|
|
||||||
q.logger.Errorf("The worker is running but it's on an old version and needs to be upgraded")
|
return nil
|
||||||
return errors.New("worker needs to be upgraded")
|
}
|
||||||
|
|
||||||
|
// Creates or upgrades the worker that is managed by Dapr.
|
||||||
|
func (q *CFQueues) setupWorker() error {
|
||||||
|
// First, get the subdomain for the worker
|
||||||
|
// This also acts as a check for the API key
|
||||||
|
subdomain, err := q.getWorkersSubdomain()
|
||||||
|
if err != nil {
|
||||||
|
return fmt.Errorf("error retrieving the workers subdomain from the Cloudflare APIs: %w", err)
|
||||||
|
}
|
||||||
|
|
||||||
|
// Check if the worker exists and it's the supported version
|
||||||
|
// In case of error, any error, we will re-deploy the worker
|
||||||
|
workerUrl := fmt.Sprintf("https://%s.%s.workers.dev/", q.metadata.WorkerName, subdomain)
|
||||||
|
err = q.checkWorker(workerUrl)
|
||||||
|
if err != nil {
|
||||||
|
q.logger.Infof("Deploying updated worker at URL '%s'", workerUrl)
|
||||||
|
err = q.deployWorker()
|
||||||
|
if err != nil {
|
||||||
|
return fmt.Errorf("error deploying or updating the worker with the Cloudflare APIs: %w", err)
|
||||||
|
}
|
||||||
|
|
||||||
|
// Ensure the workers.dev route is enabled for the worker
|
||||||
|
err = q.enableWorkersDevRoute()
|
||||||
|
if err != nil {
|
||||||
|
return fmt.Errorf("error enabling the workers.dev route for the worker: %w", err)
|
||||||
|
}
|
||||||
|
q.logger.Infof("Deployed a new version of the worker at '%s'; note: it may take up to 30s for changes to propagate", workerUrl)
|
||||||
|
} else {
|
||||||
|
q.logger.Infof("Using worker at URL '%s'", workerUrl)
|
||||||
|
}
|
||||||
|
|
||||||
|
// Update the URL of the worker
|
||||||
|
q.metadata.WorkerURL = workerUrl
|
||||||
|
|
||||||
|
return nil
|
||||||
|
}
|
||||||
|
|
||||||
|
type cfGetWorkersSubdomainResponse struct {
|
||||||
|
Result struct {
|
||||||
|
Subdomain string `json:"subdomain"`
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
func (q *CFQueues) getWorkersSubdomain() (string, error) {
|
||||||
|
ctx, cancel := context.WithTimeout(q.ctx, 30*time.Second)
|
||||||
|
defer cancel()
|
||||||
|
|
||||||
|
req, err := http.NewRequestWithContext(ctx, "GET", "https://api.cloudflare.com/client/v4/accounts/"+q.metadata.CfAccountID+"/workers/subdomain", nil)
|
||||||
|
if err != nil {
|
||||||
|
return "", fmt.Errorf("error creating network request: %w", err)
|
||||||
|
}
|
||||||
|
req.Header.Set("Authorization", "Bearer "+q.metadata.CfAPIToken)
|
||||||
|
req.Header.Set("Content-Type", "application/json")
|
||||||
|
|
||||||
|
res, err := q.client.Do(req)
|
||||||
|
if err != nil {
|
||||||
|
return "", fmt.Errorf("error invoking the service: %w", err)
|
||||||
|
}
|
||||||
|
defer func() {
|
||||||
|
// Drain the body before closing it
|
||||||
|
_, _ = io.ReadAll(res.Body)
|
||||||
|
res.Body.Close()
|
||||||
|
}()
|
||||||
|
if res.StatusCode != http.StatusOK {
|
||||||
|
return "", fmt.Errorf("invalid response status code: %d", res.StatusCode)
|
||||||
|
}
|
||||||
|
|
||||||
|
var data cfGetWorkersSubdomainResponse
|
||||||
|
err = json.NewDecoder(res.Body).Decode(&data)
|
||||||
|
if err != nil {
|
||||||
|
return "", fmt.Errorf("invalid response format: %w", err)
|
||||||
|
}
|
||||||
|
|
||||||
|
if data.Result.Subdomain == "" {
|
||||||
|
return "", fmt.Errorf("response does not contain a value for 'subdomain'")
|
||||||
|
}
|
||||||
|
|
||||||
|
return data.Result.Subdomain, nil
|
||||||
|
}
|
||||||
|
|
||||||
|
type deployWorkerMetadata struct {
|
||||||
|
Main string `json:"main_module"`
|
||||||
|
CompatibilityDate string `json:"compatibility_date"`
|
||||||
|
UsageModel string `json:"usage_model"`
|
||||||
|
Bindings []deployWorkerMetadata_Binding `json:"bindings,omitempty"`
|
||||||
|
}
|
||||||
|
|
||||||
|
type deployWorkerMetadata_Binding struct {
|
||||||
|
Name string `json:"name"`
|
||||||
|
Type string `json:"type"`
|
||||||
|
Text *string `json:"text,omitempty"`
|
||||||
|
QueueName *string `json:"queue_name,omitempty"`
|
||||||
|
}
|
||||||
|
|
||||||
|
func (q *CFQueues) deployWorker() error {
|
||||||
|
// Get the public part of the key as PEM-encoded
|
||||||
|
pubKey := q.metadata.privKey.Public()
|
||||||
|
pubKeyDer, err := x509.MarshalPKIXPublicKey(pubKey)
|
||||||
|
if err != nil {
|
||||||
|
return fmt.Errorf("failed to marshal public key to PKIX: %w", err)
|
||||||
|
}
|
||||||
|
publicKeyPem := pem.EncodeToMemory(&pem.Block{
|
||||||
|
Type: "PUBLIC KEY",
|
||||||
|
Bytes: pubKeyDer,
|
||||||
|
})
|
||||||
|
|
||||||
|
// Request body
|
||||||
|
buf := &bytes.Buffer{}
|
||||||
|
mpw := multipart.NewWriter(buf)
|
||||||
|
mh := textproto.MIMEHeader{}
|
||||||
|
|
||||||
|
// Script module
|
||||||
|
mh.Set("Content-Type", "application/javascript+module")
|
||||||
|
mh.Set("Content-Disposition", `form-data; name="worker.js"; filename="worker.js"`)
|
||||||
|
field, err := mpw.CreatePart(mh)
|
||||||
|
if err != nil {
|
||||||
|
return fmt.Errorf("failed to create field worker.js: %w", err)
|
||||||
|
}
|
||||||
|
_, err = field.Write(cfworkercode.WorkerScript)
|
||||||
|
if err != nil {
|
||||||
|
return fmt.Errorf("failed to write field worker.js: %w", err)
|
||||||
|
}
|
||||||
|
|
||||||
|
// Metadata
|
||||||
|
mh.Set("Content-Type", "application/json")
|
||||||
|
mh.Set("Content-Disposition", `form-data; name="metadata"; filename="metadata.json"`)
|
||||||
|
field, err = mpw.CreateFormField("metadata")
|
||||||
|
if err != nil {
|
||||||
|
return fmt.Errorf("failed to create field metadata: %w", err)
|
||||||
|
}
|
||||||
|
metadata := deployWorkerMetadata{
|
||||||
|
Main: "worker.js",
|
||||||
|
CompatibilityDate: cfworkercode.CompatibilityDate,
|
||||||
|
UsageModel: cfworkercode.UsageModel,
|
||||||
|
Bindings: []deployWorkerMetadata_Binding{
|
||||||
|
// Variables
|
||||||
|
{Type: "plain_text", Name: "PUBLIC_KEY", Text: ptr.Of(string(publicKeyPem))},
|
||||||
|
{Type: "plain_text", Name: "TOKEN_AUDIENCE", Text: &q.metadata.WorkerName},
|
||||||
|
// Queues
|
||||||
|
{Type: "queue", Name: q.metadata.QueueName, QueueName: &q.metadata.QueueName},
|
||||||
|
},
|
||||||
|
}
|
||||||
|
enc := json.NewEncoder(field)
|
||||||
|
enc.SetEscapeHTML(false)
|
||||||
|
err = enc.Encode(&metadata)
|
||||||
|
if err != nil {
|
||||||
|
return fmt.Errorf("failed to encode metadata as JSON: %w", err)
|
||||||
|
}
|
||||||
|
|
||||||
|
// Complete the body
|
||||||
|
err = mpw.Close()
|
||||||
|
if err != nil {
|
||||||
|
return fmt.Errorf("failed to close multipart body: %w", err)
|
||||||
|
}
|
||||||
|
|
||||||
|
// Make the request
|
||||||
|
ctx, cancel := context.WithTimeout(q.ctx, 30*time.Second)
|
||||||
|
defer cancel()
|
||||||
|
|
||||||
|
u := fmt.Sprintf("https://api.cloudflare.com/client/v4/accounts/%s/workers/scripts/%s", q.metadata.CfAccountID, q.metadata.WorkerName)
|
||||||
|
req, err := http.NewRequestWithContext(ctx, "PUT", u, buf)
|
||||||
|
if err != nil {
|
||||||
|
return fmt.Errorf("error creating network request: %w", err)
|
||||||
|
}
|
||||||
|
req.Header.Set("Authorization", "Bearer "+q.metadata.CfAPIToken)
|
||||||
|
req.Header.Set("Content-Type", mpw.FormDataContentType())
|
||||||
|
|
||||||
|
res, err := q.client.Do(req)
|
||||||
|
if err != nil {
|
||||||
|
return fmt.Errorf("error invoking the service: %w", err)
|
||||||
|
}
|
||||||
|
defer func() {
|
||||||
|
// Drain the body before closing it
|
||||||
|
_, _ = io.ReadAll(res.Body)
|
||||||
|
res.Body.Close()
|
||||||
|
}()
|
||||||
|
if res.StatusCode != http.StatusOK {
|
||||||
|
return fmt.Errorf("invalid response status code: %d", res.StatusCode)
|
||||||
|
}
|
||||||
|
|
||||||
|
return nil
|
||||||
|
}
|
||||||
|
|
||||||
|
func (q *CFQueues) enableWorkersDevRoute() error {
|
||||||
|
ctx, cancel := context.WithTimeout(q.ctx, 30*time.Second)
|
||||||
|
defer cancel()
|
||||||
|
|
||||||
|
u := fmt.Sprintf("https://api.cloudflare.com/client/v4/accounts/%s/workers/scripts/%s/subdomain", q.metadata.CfAccountID, q.metadata.WorkerName)
|
||||||
|
req, err := http.NewRequestWithContext(ctx, "POST", u, strings.NewReader(`{"enabled": true}`))
|
||||||
|
if err != nil {
|
||||||
|
return fmt.Errorf("error creating network request: %w", err)
|
||||||
|
}
|
||||||
|
req.Header.Set("Authorization", "Bearer "+q.metadata.CfAPIToken)
|
||||||
|
req.Header.Set("Content-Type", "application/json")
|
||||||
|
|
||||||
|
res, err := q.client.Do(req)
|
||||||
|
if err != nil {
|
||||||
|
return fmt.Errorf("error invoking the service: %w", err)
|
||||||
|
}
|
||||||
|
defer func() {
|
||||||
|
// Drain the body before closing it
|
||||||
|
_, _ = io.ReadAll(res.Body)
|
||||||
|
res.Body.Close()
|
||||||
|
}()
|
||||||
|
if res.StatusCode != http.StatusOK {
|
||||||
|
return fmt.Errorf("invalid response status code: %d", res.StatusCode)
|
||||||
}
|
}
|
||||||
|
|
||||||
return nil
|
return nil
|
||||||
|
@ -97,26 +321,25 @@ type infoEndpointResponse struct {
|
||||||
Queues []string `json:"queues"`
|
Queues []string `json:"queues"`
|
||||||
}
|
}
|
||||||
|
|
||||||
// Check the worker to ensure it's available and it's using a supported version.
|
// Check a worker to ensure it's available and it's using a supported version.
|
||||||
// In case the worker needs to be updated, the method returns false and no error
|
func (q *CFQueues) checkWorker(workerURL string) error {
|
||||||
func (q *CFQueues) checkWorker() (bool, error) {
|
|
||||||
token, err := q.createToken()
|
token, err := q.createToken()
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return false, fmt.Errorf("failed to create authorization token: %w", err)
|
return fmt.Errorf("failed to create authorization token: %w", err)
|
||||||
}
|
}
|
||||||
|
|
||||||
ctx, cancel := context.WithTimeout(q.ctx, 30*time.Second)
|
ctx, cancel := context.WithTimeout(q.ctx, 30*time.Second)
|
||||||
defer cancel()
|
defer cancel()
|
||||||
|
|
||||||
req, err := http.NewRequestWithContext(ctx, "GET", q.metadata.WorkerURL+".well-known/dapr/info", nil)
|
req, err := http.NewRequestWithContext(ctx, "GET", workerURL+".well-known/dapr/info", nil)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return false, fmt.Errorf("error creating network request: %w", err)
|
return fmt.Errorf("error creating network request: %w", err)
|
||||||
}
|
}
|
||||||
req.Header.Set("Authorization", "Bearer "+token)
|
req.Header.Set("Authorization", "Bearer "+token)
|
||||||
|
|
||||||
res, err := q.client.Do(req)
|
res, err := q.client.Do(req)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return false, fmt.Errorf("error invoking the worker: %w", err)
|
return fmt.Errorf("error invoking the worker: %w", err)
|
||||||
}
|
}
|
||||||
defer func() {
|
defer func() {
|
||||||
// Drain the body before closing it
|
// Drain the body before closing it
|
||||||
|
@ -124,22 +347,25 @@ func (q *CFQueues) checkWorker() (bool, error) {
|
||||||
res.Body.Close()
|
res.Body.Close()
|
||||||
}()
|
}()
|
||||||
if res.StatusCode != http.StatusOK {
|
if res.StatusCode != http.StatusOK {
|
||||||
return false, fmt.Errorf("invalid response status code: %d", res.StatusCode)
|
return fmt.Errorf("invalid response status code: %d", res.StatusCode)
|
||||||
}
|
}
|
||||||
|
|
||||||
var data infoEndpointResponse
|
var data infoEndpointResponse
|
||||||
err = json.NewDecoder(res.Body).Decode(&data)
|
err = json.NewDecoder(res.Body).Decode(&data)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return false, fmt.Errorf("invalid response from the worker: %w", err)
|
return fmt.Errorf("invalid response from the worker: %w", err)
|
||||||
}
|
}
|
||||||
|
|
||||||
version, _ := strconv.Atoi(data.Version)
|
version, _ := strconv.Atoi(data.Version)
|
||||||
if version < minWorkerVersion {
|
if version < minWorkerVersion {
|
||||||
// Return no error indicating that the version is too low
|
return fmt.Errorf("the worker is running an outdated version '%d'; please upgrade the worker per instructions in the documentation at %s", version, componentDocsUrl)
|
||||||
return false, nil
|
|
||||||
}
|
}
|
||||||
|
|
||||||
return true, nil
|
if !slices.Contains(data.Queues, q.metadata.QueueName) {
|
||||||
|
return fmt.Errorf("the worker is not bound to the queue '%s'; please re-deploy the worker with the correct bindings per instructions in the documentation at %s", q.metadata.QueueName, componentDocsUrl)
|
||||||
|
}
|
||||||
|
|
||||||
|
return nil
|
||||||
}
|
}
|
||||||
|
|
||||||
// Operations returns the supported operations for this binding.
|
// Operations returns the supported operations for this binding.
|
||||||
|
@ -159,12 +385,6 @@ func (q *CFQueues) Invoke(ctx context.Context, req *bindings.InvokeRequest) (*bi
|
||||||
|
|
||||||
// Handler for invoke operations for publishing messages to the Workers Queue
|
// Handler for invoke operations for publishing messages to the Workers Queue
|
||||||
func (q *CFQueues) invokePublish(parentCtx context.Context, ir *bindings.InvokeRequest) (*bindings.InvokeResponse, error) {
|
func (q *CFQueues) invokePublish(parentCtx context.Context, ir *bindings.InvokeRequest) (*bindings.InvokeResponse, error) {
|
||||||
md := publishRequestMetadata{}
|
|
||||||
err := md.FromMetadata(ir.Metadata)
|
|
||||||
if err != nil {
|
|
||||||
return nil, fmt.Errorf("invalid request: %w", err)
|
|
||||||
}
|
|
||||||
|
|
||||||
token, err := q.createToken()
|
token, err := q.createToken()
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return nil, fmt.Errorf("failed to create authorization token: %w", err)
|
return nil, fmt.Errorf("failed to create authorization token: %w", err)
|
||||||
|
@ -178,7 +398,7 @@ func (q *CFQueues) invokePublish(parentCtx context.Context, ir *bindings.InvokeR
|
||||||
ir.Data = []byte(d)
|
ir.Data = []byte(d)
|
||||||
}
|
}
|
||||||
|
|
||||||
req, err := http.NewRequestWithContext(ctx, "POST", q.metadata.WorkerURL+"publish/"+md.QueueName, bytes.NewReader(ir.Data))
|
req, err := http.NewRequestWithContext(ctx, "POST", q.metadata.WorkerURL+"publish/"+q.metadata.QueueName, bytes.NewReader(ir.Data))
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return nil, fmt.Errorf("error creating network request: %w", err)
|
return nil, fmt.Errorf("error creating network request: %w", err)
|
||||||
}
|
}
|
||||||
|
@ -230,38 +450,57 @@ func (q *CFQueues) Close() error {
|
||||||
return nil
|
return nil
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// Component metadata struct.
|
||||||
|
// The component can be initialized in two ways:
|
||||||
|
// - Instantiate the component with a "workerURL": assumes a worker that has been pre-deployed and it's ready to be used; we will not need API tokens
|
||||||
|
// - Instantiate the component with a "cfAPIToken" and "cfAccountID": Dapr will take care of creating the worker if it doesn't exist (or upgrade it if needed)
|
||||||
type componentMetadata struct {
|
type componentMetadata struct {
|
||||||
WorkerURL string `mapstructure:"workerUrl"`
|
QueueName string `mapstructure:"queueName"`
|
||||||
Key string `mapstructure:"key"`
|
WorkerURL string `mapstructure:"workerUrl"`
|
||||||
WorkerName string `mapstructure:"workerName"`
|
CfAPIToken string `mapstructure:"cfAPIToken"`
|
||||||
|
CfAccountID string `mapstructure:"cfAccountID"`
|
||||||
|
Key string `mapstructure:"key"`
|
||||||
|
WorkerName string `mapstructure:"workerName"`
|
||||||
|
|
||||||
privKey ed25519.PrivateKey
|
privKey ed25519.PrivateKey
|
||||||
}
|
}
|
||||||
|
|
||||||
// Validate the metadata object
|
var queueNameValidation = regexp.MustCompile("^([a-zA-Z0-9_\\-\\.]+)$")
|
||||||
|
|
||||||
|
// Validate the metadata object.
|
||||||
func (m *componentMetadata) Validate() error {
|
func (m *componentMetadata) Validate() error {
|
||||||
|
// Option 1: check if we have a workerURL
|
||||||
|
if m.WorkerURL != "" {
|
||||||
|
u, err := url.Parse(m.WorkerURL)
|
||||||
|
if err != nil {
|
||||||
|
return fmt.Errorf("invalid property 'workerUrl': %w", err)
|
||||||
|
}
|
||||||
|
if u.Scheme != "https" && u.Scheme != "http" {
|
||||||
|
return errors.New("invalid property 'workerUrl': unsupported scheme")
|
||||||
|
}
|
||||||
|
// Re-set the URL to make sure it's sanitized
|
||||||
|
m.WorkerURL = u.String()
|
||||||
|
if !strings.HasSuffix(m.WorkerURL, "/") {
|
||||||
|
m.WorkerURL += "/"
|
||||||
|
}
|
||||||
|
} else if m.CfAPIToken == "" || m.CfAccountID == "" {
|
||||||
|
// Option 2: we need cfAPIToken and cfAccountID
|
||||||
|
return errors.New("invalid component metadata: either 'workerUrl' or the combination of 'cfAPIToken'/'cfAccountID' is required")
|
||||||
|
}
|
||||||
|
|
||||||
|
// QueueName
|
||||||
|
if m.QueueName == "" {
|
||||||
|
return errors.New("property 'queueName' is required")
|
||||||
|
}
|
||||||
|
if !queueNameValidation.MatchString(m.QueueName) {
|
||||||
|
return errors.New("metadata property 'queueName' is invalid")
|
||||||
|
}
|
||||||
|
|
||||||
// WorkerName
|
// WorkerName
|
||||||
if m.WorkerName == "" {
|
if m.WorkerName == "" {
|
||||||
return errors.New("property 'workerName' is required")
|
return errors.New("property 'workerName' is required")
|
||||||
}
|
}
|
||||||
|
|
||||||
// WorkerURL
|
|
||||||
if m.WorkerURL == "" {
|
|
||||||
return errors.New("property 'workerUrl' is required")
|
|
||||||
}
|
|
||||||
u, err := url.Parse(m.WorkerURL)
|
|
||||||
if err != nil {
|
|
||||||
return fmt.Errorf("invalid property 'workerUrl': %w", err)
|
|
||||||
}
|
|
||||||
if u.Scheme != "https" && u.Scheme != "http" {
|
|
||||||
return errors.New("invalid property 'workerUrl': unsupported scheme")
|
|
||||||
}
|
|
||||||
// Re-set the URL to make sure it's sanitized
|
|
||||||
m.WorkerURL = u.String()
|
|
||||||
if !strings.HasSuffix(m.WorkerURL, "/") {
|
|
||||||
m.WorkerURL += "/"
|
|
||||||
}
|
|
||||||
|
|
||||||
// Key
|
// Key
|
||||||
if m.Key == "" {
|
if m.Key == "" {
|
||||||
return errors.New("property 'key' is required")
|
return errors.New("property 'key' is required")
|
||||||
|
@ -285,25 +524,3 @@ func (m *componentMetadata) Validate() error {
|
||||||
|
|
||||||
return nil
|
return nil
|
||||||
}
|
}
|
||||||
|
|
||||||
type publishRequestMetadata struct {
|
|
||||||
QueueName string
|
|
||||||
}
|
|
||||||
|
|
||||||
var queueNameValidation = regexp.MustCompile("^([a-zA-Z0-9_\\-\\.]+)$")
|
|
||||||
|
|
||||||
func (m *publishRequestMetadata) FromMetadata(md map[string]string) error {
|
|
||||||
if len(md) == 0 {
|
|
||||||
return errors.New("metata property 'queue' is required")
|
|
||||||
}
|
|
||||||
|
|
||||||
m.QueueName = md["queue"]
|
|
||||||
if m.QueueName == "" {
|
|
||||||
return errors.New("metata property 'queue' is required")
|
|
||||||
}
|
|
||||||
if !queueNameValidation.MatchString(m.QueueName) {
|
|
||||||
return errors.New("metadata property 'queue' is invalid")
|
|
||||||
}
|
|
||||||
|
|
||||||
return nil
|
|
||||||
}
|
|
||||||
|
|
|
@ -143,7 +143,6 @@ out
|
||||||
|
|
||||||
# Nuxt.js build / generate output
|
# Nuxt.js build / generate output
|
||||||
.nuxt
|
.nuxt
|
||||||
dist
|
|
||||||
|
|
||||||
# Gatsby files
|
# Gatsby files
|
||||||
.cache/
|
.cache/
|
||||||
|
|
|
@ -0,0 +1,30 @@
|
||||||
|
/*
|
||||||
|
Copyright 2022 The Dapr Authors
|
||||||
|
Licensed under the Apache License, Version 2.0 (the "License");
|
||||||
|
you may not use this file except in compliance with the License.
|
||||||
|
You may obtain a copy of the License at
|
||||||
|
http://www.apache.org/licenses/LICENSE-2.0
|
||||||
|
Unless required by applicable law or agreed to in writing, software
|
||||||
|
distributed under the License is distributed on an "AS IS" BASIS,
|
||||||
|
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||||
|
See the License for the specific language governing permissions and
|
||||||
|
limitations under the License.
|
||||||
|
*/
|
||||||
|
|
||||||
|
package cfworkercode
|
||||||
|
|
||||||
|
import (
|
||||||
|
// Allow using go:embed
|
||||||
|
_ "embed"
|
||||||
|
)
|
||||||
|
|
||||||
|
// Contains the source code for the worker.
|
||||||
|
//
|
||||||
|
//go:embed worker.js
|
||||||
|
var WorkerScript []byte
|
||||||
|
|
||||||
|
// Value for compatibility_date.
|
||||||
|
const CompatibilityDate = "2022-12-09"
|
||||||
|
|
||||||
|
// Value for usage_model.
|
||||||
|
const UsageModel = "bundled"
|
File diff suppressed because one or more lines are too long
|
@ -14,6 +14,7 @@
|
||||||
},
|
},
|
||||||
"devDependencies": {
|
"devDependencies": {
|
||||||
"@cloudflare/workers-types": "^4.20221111.1",
|
"@cloudflare/workers-types": "^4.20221111.1",
|
||||||
|
"esbuild": "^0.16.4",
|
||||||
"prettier": "^2.8.1",
|
"prettier": "^2.8.1",
|
||||||
"typescript": "^4.9.4",
|
"typescript": "^4.9.4",
|
||||||
"wrangler": "^2.6.2"
|
"wrangler": "^2.6.2"
|
||||||
|
@ -56,6 +57,358 @@
|
||||||
"esbuild": "*"
|
"esbuild": "*"
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
|
"node_modules/@esbuild/android-arm": {
|
||||||
|
"version": "0.16.4",
|
||||||
|
"resolved": "https://registry.npmjs.org/@esbuild/android-arm/-/android-arm-0.16.4.tgz",
|
||||||
|
"integrity": "sha512-rZzb7r22m20S1S7ufIc6DC6W659yxoOrl7sKP1nCYhuvUlnCFHVSbATG4keGUtV8rDz11sRRDbWkvQZpzPaHiw==",
|
||||||
|
"cpu": [
|
||||||
|
"arm"
|
||||||
|
],
|
||||||
|
"dev": true,
|
||||||
|
"optional": true,
|
||||||
|
"os": [
|
||||||
|
"android"
|
||||||
|
],
|
||||||
|
"engines": {
|
||||||
|
"node": ">=12"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"node_modules/@esbuild/android-arm64": {
|
||||||
|
"version": "0.16.4",
|
||||||
|
"resolved": "https://registry.npmjs.org/@esbuild/android-arm64/-/android-arm64-0.16.4.tgz",
|
||||||
|
"integrity": "sha512-VPuTzXFm/m2fcGfN6CiwZTlLzxrKsWbPkG7ArRFpuxyaHUm/XFHQPD4xNwZT6uUmpIHhnSjcaCmcla8COzmZ5Q==",
|
||||||
|
"cpu": [
|
||||||
|
"arm64"
|
||||||
|
],
|
||||||
|
"dev": true,
|
||||||
|
"optional": true,
|
||||||
|
"os": [
|
||||||
|
"android"
|
||||||
|
],
|
||||||
|
"engines": {
|
||||||
|
"node": ">=12"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"node_modules/@esbuild/android-x64": {
|
||||||
|
"version": "0.16.4",
|
||||||
|
"resolved": "https://registry.npmjs.org/@esbuild/android-x64/-/android-x64-0.16.4.tgz",
|
||||||
|
"integrity": "sha512-MW+B2O++BkcOfMWmuHXB15/l1i7wXhJFqbJhp82IBOais8RBEQv2vQz/jHrDEHaY2X0QY7Wfw86SBL2PbVOr0g==",
|
||||||
|
"cpu": [
|
||||||
|
"x64"
|
||||||
|
],
|
||||||
|
"dev": true,
|
||||||
|
"optional": true,
|
||||||
|
"os": [
|
||||||
|
"android"
|
||||||
|
],
|
||||||
|
"engines": {
|
||||||
|
"node": ">=12"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"node_modules/@esbuild/darwin-arm64": {
|
||||||
|
"version": "0.16.4",
|
||||||
|
"resolved": "https://registry.npmjs.org/@esbuild/darwin-arm64/-/darwin-arm64-0.16.4.tgz",
|
||||||
|
"integrity": "sha512-a28X1O//aOfxwJVZVs7ZfM8Tyih2Za4nKJrBwW5Wm4yKsnwBy9aiS/xwpxiiTRttw3EaTg4Srerhcm6z0bu9Wg==",
|
||||||
|
"cpu": [
|
||||||
|
"arm64"
|
||||||
|
],
|
||||||
|
"dev": true,
|
||||||
|
"optional": true,
|
||||||
|
"os": [
|
||||||
|
"darwin"
|
||||||
|
],
|
||||||
|
"engines": {
|
||||||
|
"node": ">=12"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"node_modules/@esbuild/darwin-x64": {
|
||||||
|
"version": "0.16.4",
|
||||||
|
"resolved": "https://registry.npmjs.org/@esbuild/darwin-x64/-/darwin-x64-0.16.4.tgz",
|
||||||
|
"integrity": "sha512-e3doCr6Ecfwd7VzlaQqEPrnbvvPjE9uoTpxG5pyLzr2rI2NMjDHmvY1E5EO81O/e9TUOLLkXA5m6T8lfjK9yAA==",
|
||||||
|
"cpu": [
|
||||||
|
"x64"
|
||||||
|
],
|
||||||
|
"dev": true,
|
||||||
|
"optional": true,
|
||||||
|
"os": [
|
||||||
|
"darwin"
|
||||||
|
],
|
||||||
|
"engines": {
|
||||||
|
"node": ">=12"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"node_modules/@esbuild/freebsd-arm64": {
|
||||||
|
"version": "0.16.4",
|
||||||
|
"resolved": "https://registry.npmjs.org/@esbuild/freebsd-arm64/-/freebsd-arm64-0.16.4.tgz",
|
||||||
|
"integrity": "sha512-Oup3G/QxBgvvqnXWrBed7xxkFNwAwJVHZcklWyQt7YCAL5bfUkaa6FVWnR78rNQiM8MqqLiT6ZTZSdUFuVIg1w==",
|
||||||
|
"cpu": [
|
||||||
|
"arm64"
|
||||||
|
],
|
||||||
|
"dev": true,
|
||||||
|
"optional": true,
|
||||||
|
"os": [
|
||||||
|
"freebsd"
|
||||||
|
],
|
||||||
|
"engines": {
|
||||||
|
"node": ">=12"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"node_modules/@esbuild/freebsd-x64": {
|
||||||
|
"version": "0.16.4",
|
||||||
|
"resolved": "https://registry.npmjs.org/@esbuild/freebsd-x64/-/freebsd-x64-0.16.4.tgz",
|
||||||
|
"integrity": "sha512-vAP+eYOxlN/Bpo/TZmzEQapNS8W1njECrqkTpNgvXskkkJC2AwOXwZWai/Kc2vEFZUXQttx6UJbj9grqjD/+9Q==",
|
||||||
|
"cpu": [
|
||||||
|
"x64"
|
||||||
|
],
|
||||||
|
"dev": true,
|
||||||
|
"optional": true,
|
||||||
|
"os": [
|
||||||
|
"freebsd"
|
||||||
|
],
|
||||||
|
"engines": {
|
||||||
|
"node": ">=12"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"node_modules/@esbuild/linux-arm": {
|
||||||
|
"version": "0.16.4",
|
||||||
|
"resolved": "https://registry.npmjs.org/@esbuild/linux-arm/-/linux-arm-0.16.4.tgz",
|
||||||
|
"integrity": "sha512-A47ZmtpIPyERxkSvIv+zLd6kNIOtJH03XA0Hy7jaceRDdQaQVGSDt4mZqpWqJYgDk9rg96aglbF6kCRvPGDSUA==",
|
||||||
|
"cpu": [
|
||||||
|
"arm"
|
||||||
|
],
|
||||||
|
"dev": true,
|
||||||
|
"optional": true,
|
||||||
|
"os": [
|
||||||
|
"linux"
|
||||||
|
],
|
||||||
|
"engines": {
|
||||||
|
"node": ">=12"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"node_modules/@esbuild/linux-arm64": {
|
||||||
|
"version": "0.16.4",
|
||||||
|
"resolved": "https://registry.npmjs.org/@esbuild/linux-arm64/-/linux-arm64-0.16.4.tgz",
|
||||||
|
"integrity": "sha512-2zXoBhv4r5pZiyjBKrOdFP4CXOChxXiYD50LRUU+65DkdS5niPFHbboKZd/c81l0ezpw7AQnHeoCy5hFrzzs4g==",
|
||||||
|
"cpu": [
|
||||||
|
"arm64"
|
||||||
|
],
|
||||||
|
"dev": true,
|
||||||
|
"optional": true,
|
||||||
|
"os": [
|
||||||
|
"linux"
|
||||||
|
],
|
||||||
|
"engines": {
|
||||||
|
"node": ">=12"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"node_modules/@esbuild/linux-ia32": {
|
||||||
|
"version": "0.16.4",
|
||||||
|
"resolved": "https://registry.npmjs.org/@esbuild/linux-ia32/-/linux-ia32-0.16.4.tgz",
|
||||||
|
"integrity": "sha512-uxdSrpe9wFhz4yBwt2kl2TxS/NWEINYBUFIxQtaEVtglm1eECvsj1vEKI0KX2k2wCe17zDdQ3v+jVxfwVfvvjw==",
|
||||||
|
"cpu": [
|
||||||
|
"ia32"
|
||||||
|
],
|
||||||
|
"dev": true,
|
||||||
|
"optional": true,
|
||||||
|
"os": [
|
||||||
|
"linux"
|
||||||
|
],
|
||||||
|
"engines": {
|
||||||
|
"node": ">=12"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"node_modules/@esbuild/linux-loong64": {
|
||||||
|
"version": "0.16.4",
|
||||||
|
"resolved": "https://registry.npmjs.org/@esbuild/linux-loong64/-/linux-loong64-0.16.4.tgz",
|
||||||
|
"integrity": "sha512-peDrrUuxbZ9Jw+DwLCh/9xmZAk0p0K1iY5d2IcwmnN+B87xw7kujOkig6ZRcZqgrXgeRGurRHn0ENMAjjD5DEg==",
|
||||||
|
"cpu": [
|
||||||
|
"loong64"
|
||||||
|
],
|
||||||
|
"dev": true,
|
||||||
|
"optional": true,
|
||||||
|
"os": [
|
||||||
|
"linux"
|
||||||
|
],
|
||||||
|
"engines": {
|
||||||
|
"node": ">=12"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"node_modules/@esbuild/linux-mips64el": {
|
||||||
|
"version": "0.16.4",
|
||||||
|
"resolved": "https://registry.npmjs.org/@esbuild/linux-mips64el/-/linux-mips64el-0.16.4.tgz",
|
||||||
|
"integrity": "sha512-sD9EEUoGtVhFjjsauWjflZklTNr57KdQ6xfloO4yH1u7vNQlOfAlhEzbyBKfgbJlW7rwXYBdl5/NcZ+Mg2XhQA==",
|
||||||
|
"cpu": [
|
||||||
|
"mips64el"
|
||||||
|
],
|
||||||
|
"dev": true,
|
||||||
|
"optional": true,
|
||||||
|
"os": [
|
||||||
|
"linux"
|
||||||
|
],
|
||||||
|
"engines": {
|
||||||
|
"node": ">=12"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"node_modules/@esbuild/linux-ppc64": {
|
||||||
|
"version": "0.16.4",
|
||||||
|
"resolved": "https://registry.npmjs.org/@esbuild/linux-ppc64/-/linux-ppc64-0.16.4.tgz",
|
||||||
|
"integrity": "sha512-X1HSqHUX9D+d0l6/nIh4ZZJ94eQky8d8z6yxAptpZE3FxCWYWvTDd9X9ST84MGZEJx04VYUD/AGgciddwO0b8g==",
|
||||||
|
"cpu": [
|
||||||
|
"ppc64"
|
||||||
|
],
|
||||||
|
"dev": true,
|
||||||
|
"optional": true,
|
||||||
|
"os": [
|
||||||
|
"linux"
|
||||||
|
],
|
||||||
|
"engines": {
|
||||||
|
"node": ">=12"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"node_modules/@esbuild/linux-riscv64": {
|
||||||
|
"version": "0.16.4",
|
||||||
|
"resolved": "https://registry.npmjs.org/@esbuild/linux-riscv64/-/linux-riscv64-0.16.4.tgz",
|
||||||
|
"integrity": "sha512-97ANpzyNp0GTXCt6SRdIx1ngwncpkV/z453ZuxbnBROCJ5p/55UjhbaG23UdHj88fGWLKPFtMoU4CBacz4j9FA==",
|
||||||
|
"cpu": [
|
||||||
|
"riscv64"
|
||||||
|
],
|
||||||
|
"dev": true,
|
||||||
|
"optional": true,
|
||||||
|
"os": [
|
||||||
|
"linux"
|
||||||
|
],
|
||||||
|
"engines": {
|
||||||
|
"node": ">=12"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"node_modules/@esbuild/linux-s390x": {
|
||||||
|
"version": "0.16.4",
|
||||||
|
"resolved": "https://registry.npmjs.org/@esbuild/linux-s390x/-/linux-s390x-0.16.4.tgz",
|
||||||
|
"integrity": "sha512-pUvPQLPmbEeJRPjP0DYTC1vjHyhrnCklQmCGYbipkep+oyfTn7GTBJXoPodR7ZS5upmEyc8lzAkn2o29wD786A==",
|
||||||
|
"cpu": [
|
||||||
|
"s390x"
|
||||||
|
],
|
||||||
|
"dev": true,
|
||||||
|
"optional": true,
|
||||||
|
"os": [
|
||||||
|
"linux"
|
||||||
|
],
|
||||||
|
"engines": {
|
||||||
|
"node": ">=12"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"node_modules/@esbuild/linux-x64": {
|
||||||
|
"version": "0.16.4",
|
||||||
|
"resolved": "https://registry.npmjs.org/@esbuild/linux-x64/-/linux-x64-0.16.4.tgz",
|
||||||
|
"integrity": "sha512-N55Q0mJs3Sl8+utPRPBrL6NLYZKBCLLx0bme/+RbjvMforTGGzFvsRl4xLTZMUBFC1poDzBEPTEu5nxizQ9Nlw==",
|
||||||
|
"cpu": [
|
||||||
|
"x64"
|
||||||
|
],
|
||||||
|
"dev": true,
|
||||||
|
"optional": true,
|
||||||
|
"os": [
|
||||||
|
"linux"
|
||||||
|
],
|
||||||
|
"engines": {
|
||||||
|
"node": ">=12"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"node_modules/@esbuild/netbsd-x64": {
|
||||||
|
"version": "0.16.4",
|
||||||
|
"resolved": "https://registry.npmjs.org/@esbuild/netbsd-x64/-/netbsd-x64-0.16.4.tgz",
|
||||||
|
"integrity": "sha512-LHSJLit8jCObEQNYkgsDYBh2JrJT53oJO2HVdkSYLa6+zuLJh0lAr06brXIkljrlI+N7NNW1IAXGn/6IZPi3YQ==",
|
||||||
|
"cpu": [
|
||||||
|
"x64"
|
||||||
|
],
|
||||||
|
"dev": true,
|
||||||
|
"optional": true,
|
||||||
|
"os": [
|
||||||
|
"netbsd"
|
||||||
|
],
|
||||||
|
"engines": {
|
||||||
|
"node": ">=12"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"node_modules/@esbuild/openbsd-x64": {
|
||||||
|
"version": "0.16.4",
|
||||||
|
"resolved": "https://registry.npmjs.org/@esbuild/openbsd-x64/-/openbsd-x64-0.16.4.tgz",
|
||||||
|
"integrity": "sha512-nLgdc6tWEhcCFg/WVFaUxHcPK3AP/bh+KEwKtl69Ay5IBqUwKDaq/6Xk0E+fh/FGjnLwqFSsarsbPHeKM8t8Sw==",
|
||||||
|
"cpu": [
|
||||||
|
"x64"
|
||||||
|
],
|
||||||
|
"dev": true,
|
||||||
|
"optional": true,
|
||||||
|
"os": [
|
||||||
|
"openbsd"
|
||||||
|
],
|
||||||
|
"engines": {
|
||||||
|
"node": ">=12"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"node_modules/@esbuild/sunos-x64": {
|
||||||
|
"version": "0.16.4",
|
||||||
|
"resolved": "https://registry.npmjs.org/@esbuild/sunos-x64/-/sunos-x64-0.16.4.tgz",
|
||||||
|
"integrity": "sha512-08SluG24GjPO3tXKk95/85n9kpyZtXCVwURR2i4myhrOfi3jspClV0xQQ0W0PYWHioJj+LejFMt41q+PG3mlAQ==",
|
||||||
|
"cpu": [
|
||||||
|
"x64"
|
||||||
|
],
|
||||||
|
"dev": true,
|
||||||
|
"optional": true,
|
||||||
|
"os": [
|
||||||
|
"sunos"
|
||||||
|
],
|
||||||
|
"engines": {
|
||||||
|
"node": ">=12"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"node_modules/@esbuild/win32-arm64": {
|
||||||
|
"version": "0.16.4",
|
||||||
|
"resolved": "https://registry.npmjs.org/@esbuild/win32-arm64/-/win32-arm64-0.16.4.tgz",
|
||||||
|
"integrity": "sha512-yYiRDQcqLYQSvNQcBKN7XogbrSvBE45FEQdH8fuXPl7cngzkCvpsG2H9Uey39IjQ6gqqc+Q4VXYHsQcKW0OMjQ==",
|
||||||
|
"cpu": [
|
||||||
|
"arm64"
|
||||||
|
],
|
||||||
|
"dev": true,
|
||||||
|
"optional": true,
|
||||||
|
"os": [
|
||||||
|
"win32"
|
||||||
|
],
|
||||||
|
"engines": {
|
||||||
|
"node": ">=12"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"node_modules/@esbuild/win32-ia32": {
|
||||||
|
"version": "0.16.4",
|
||||||
|
"resolved": "https://registry.npmjs.org/@esbuild/win32-ia32/-/win32-ia32-0.16.4.tgz",
|
||||||
|
"integrity": "sha512-5rabnGIqexekYkh9zXG5waotq8mrdlRoBqAktjx2W3kb0zsI83mdCwrcAeKYirnUaTGztR5TxXcXmQrEzny83w==",
|
||||||
|
"cpu": [
|
||||||
|
"ia32"
|
||||||
|
],
|
||||||
|
"dev": true,
|
||||||
|
"optional": true,
|
||||||
|
"os": [
|
||||||
|
"win32"
|
||||||
|
],
|
||||||
|
"engines": {
|
||||||
|
"node": ">=12"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"node_modules/@esbuild/win32-x64": {
|
||||||
|
"version": "0.16.4",
|
||||||
|
"resolved": "https://registry.npmjs.org/@esbuild/win32-x64/-/win32-x64-0.16.4.tgz",
|
||||||
|
"integrity": "sha512-sN/I8FMPtmtT2Yw+Dly8Ur5vQ5a/RmC8hW7jO9PtPSQUPkowxWpcUZnqOggU7VwyT3Xkj6vcXWd3V/qTXwultQ==",
|
||||||
|
"cpu": [
|
||||||
|
"x64"
|
||||||
|
],
|
||||||
|
"dev": true,
|
||||||
|
"optional": true,
|
||||||
|
"os": [
|
||||||
|
"win32"
|
||||||
|
],
|
||||||
|
"engines": {
|
||||||
|
"node": ">=12"
|
||||||
|
}
|
||||||
|
},
|
||||||
"node_modules/@iarna/toml": {
|
"node_modules/@iarna/toml": {
|
||||||
"version": "2.2.5",
|
"version": "2.2.5",
|
||||||
"resolved": "https://registry.npmjs.org/@iarna/toml/-/toml-2.2.5.tgz",
|
"resolved": "https://registry.npmjs.org/@iarna/toml/-/toml-2.2.5.tgz",
|
||||||
|
@ -471,9 +824,9 @@
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
"node_modules/esbuild": {
|
"node_modules/esbuild": {
|
||||||
"version": "0.14.51",
|
"version": "0.16.4",
|
||||||
"resolved": "https://registry.npmjs.org/esbuild/-/esbuild-0.14.51.tgz",
|
"resolved": "https://registry.npmjs.org/esbuild/-/esbuild-0.16.4.tgz",
|
||||||
"integrity": "sha512-+CvnDitD7Q5sT7F+FM65sWkF8wJRf+j9fPcprxYV4j+ohmzVj2W7caUqH2s5kCaCJAfcAICjSlKhDCcvDpU7nw==",
|
"integrity": "sha512-qQrPMQpPTWf8jHugLWHoGqZjApyx3OEm76dlTXobHwh/EBbavbRdjXdYi/GWr43GyN0sfpap14GPkb05NH3ROA==",
|
||||||
"dev": true,
|
"dev": true,
|
||||||
"hasInstallScript": true,
|
"hasInstallScript": true,
|
||||||
"bin": {
|
"bin": {
|
||||||
|
@ -483,26 +836,28 @@
|
||||||
"node": ">=12"
|
"node": ">=12"
|
||||||
},
|
},
|
||||||
"optionalDependencies": {
|
"optionalDependencies": {
|
||||||
"esbuild-android-64": "0.14.51",
|
"@esbuild/android-arm": "0.16.4",
|
||||||
"esbuild-android-arm64": "0.14.51",
|
"@esbuild/android-arm64": "0.16.4",
|
||||||
"esbuild-darwin-64": "0.14.51",
|
"@esbuild/android-x64": "0.16.4",
|
||||||
"esbuild-darwin-arm64": "0.14.51",
|
"@esbuild/darwin-arm64": "0.16.4",
|
||||||
"esbuild-freebsd-64": "0.14.51",
|
"@esbuild/darwin-x64": "0.16.4",
|
||||||
"esbuild-freebsd-arm64": "0.14.51",
|
"@esbuild/freebsd-arm64": "0.16.4",
|
||||||
"esbuild-linux-32": "0.14.51",
|
"@esbuild/freebsd-x64": "0.16.4",
|
||||||
"esbuild-linux-64": "0.14.51",
|
"@esbuild/linux-arm": "0.16.4",
|
||||||
"esbuild-linux-arm": "0.14.51",
|
"@esbuild/linux-arm64": "0.16.4",
|
||||||
"esbuild-linux-arm64": "0.14.51",
|
"@esbuild/linux-ia32": "0.16.4",
|
||||||
"esbuild-linux-mips64le": "0.14.51",
|
"@esbuild/linux-loong64": "0.16.4",
|
||||||
"esbuild-linux-ppc64le": "0.14.51",
|
"@esbuild/linux-mips64el": "0.16.4",
|
||||||
"esbuild-linux-riscv64": "0.14.51",
|
"@esbuild/linux-ppc64": "0.16.4",
|
||||||
"esbuild-linux-s390x": "0.14.51",
|
"@esbuild/linux-riscv64": "0.16.4",
|
||||||
"esbuild-netbsd-64": "0.14.51",
|
"@esbuild/linux-s390x": "0.16.4",
|
||||||
"esbuild-openbsd-64": "0.14.51",
|
"@esbuild/linux-x64": "0.16.4",
|
||||||
"esbuild-sunos-64": "0.14.51",
|
"@esbuild/netbsd-x64": "0.16.4",
|
||||||
"esbuild-windows-32": "0.14.51",
|
"@esbuild/openbsd-x64": "0.16.4",
|
||||||
"esbuild-windows-64": "0.14.51",
|
"@esbuild/sunos-x64": "0.16.4",
|
||||||
"esbuild-windows-arm64": "0.14.51"
|
"@esbuild/win32-arm64": "0.16.4",
|
||||||
|
"@esbuild/win32-ia32": "0.16.4",
|
||||||
|
"@esbuild/win32-x64": "0.16.4"
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
"node_modules/esbuild-android-64": {
|
"node_modules/esbuild-android-64": {
|
||||||
|
@ -1538,6 +1893,41 @@
|
||||||
"fsevents": "~2.3.2"
|
"fsevents": "~2.3.2"
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
|
"node_modules/wrangler/node_modules/esbuild": {
|
||||||
|
"version": "0.14.51",
|
||||||
|
"resolved": "https://registry.npmjs.org/esbuild/-/esbuild-0.14.51.tgz",
|
||||||
|
"integrity": "sha512-+CvnDitD7Q5sT7F+FM65sWkF8wJRf+j9fPcprxYV4j+ohmzVj2W7caUqH2s5kCaCJAfcAICjSlKhDCcvDpU7nw==",
|
||||||
|
"dev": true,
|
||||||
|
"hasInstallScript": true,
|
||||||
|
"bin": {
|
||||||
|
"esbuild": "bin/esbuild"
|
||||||
|
},
|
||||||
|
"engines": {
|
||||||
|
"node": ">=12"
|
||||||
|
},
|
||||||
|
"optionalDependencies": {
|
||||||
|
"esbuild-android-64": "0.14.51",
|
||||||
|
"esbuild-android-arm64": "0.14.51",
|
||||||
|
"esbuild-darwin-64": "0.14.51",
|
||||||
|
"esbuild-darwin-arm64": "0.14.51",
|
||||||
|
"esbuild-freebsd-64": "0.14.51",
|
||||||
|
"esbuild-freebsd-arm64": "0.14.51",
|
||||||
|
"esbuild-linux-32": "0.14.51",
|
||||||
|
"esbuild-linux-64": "0.14.51",
|
||||||
|
"esbuild-linux-arm": "0.14.51",
|
||||||
|
"esbuild-linux-arm64": "0.14.51",
|
||||||
|
"esbuild-linux-mips64le": "0.14.51",
|
||||||
|
"esbuild-linux-ppc64le": "0.14.51",
|
||||||
|
"esbuild-linux-riscv64": "0.14.51",
|
||||||
|
"esbuild-linux-s390x": "0.14.51",
|
||||||
|
"esbuild-netbsd-64": "0.14.51",
|
||||||
|
"esbuild-openbsd-64": "0.14.51",
|
||||||
|
"esbuild-sunos-64": "0.14.51",
|
||||||
|
"esbuild-windows-32": "0.14.51",
|
||||||
|
"esbuild-windows-64": "0.14.51",
|
||||||
|
"esbuild-windows-arm64": "0.14.51"
|
||||||
|
}
|
||||||
|
},
|
||||||
"node_modules/ws": {
|
"node_modules/ws": {
|
||||||
"version": "8.11.0",
|
"version": "8.11.0",
|
||||||
"resolved": "https://registry.npmjs.org/ws/-/ws-8.11.0.tgz",
|
"resolved": "https://registry.npmjs.org/ws/-/ws-8.11.0.tgz",
|
||||||
|
@ -1617,6 +2007,160 @@
|
||||||
"rollup-plugin-node-polyfills": "^0.2.1"
|
"rollup-plugin-node-polyfills": "^0.2.1"
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
|
"@esbuild/android-arm": {
|
||||||
|
"version": "0.16.4",
|
||||||
|
"resolved": "https://registry.npmjs.org/@esbuild/android-arm/-/android-arm-0.16.4.tgz",
|
||||||
|
"integrity": "sha512-rZzb7r22m20S1S7ufIc6DC6W659yxoOrl7sKP1nCYhuvUlnCFHVSbATG4keGUtV8rDz11sRRDbWkvQZpzPaHiw==",
|
||||||
|
"dev": true,
|
||||||
|
"optional": true
|
||||||
|
},
|
||||||
|
"@esbuild/android-arm64": {
|
||||||
|
"version": "0.16.4",
|
||||||
|
"resolved": "https://registry.npmjs.org/@esbuild/android-arm64/-/android-arm64-0.16.4.tgz",
|
||||||
|
"integrity": "sha512-VPuTzXFm/m2fcGfN6CiwZTlLzxrKsWbPkG7ArRFpuxyaHUm/XFHQPD4xNwZT6uUmpIHhnSjcaCmcla8COzmZ5Q==",
|
||||||
|
"dev": true,
|
||||||
|
"optional": true
|
||||||
|
},
|
||||||
|
"@esbuild/android-x64": {
|
||||||
|
"version": "0.16.4",
|
||||||
|
"resolved": "https://registry.npmjs.org/@esbuild/android-x64/-/android-x64-0.16.4.tgz",
|
||||||
|
"integrity": "sha512-MW+B2O++BkcOfMWmuHXB15/l1i7wXhJFqbJhp82IBOais8RBEQv2vQz/jHrDEHaY2X0QY7Wfw86SBL2PbVOr0g==",
|
||||||
|
"dev": true,
|
||||||
|
"optional": true
|
||||||
|
},
|
||||||
|
"@esbuild/darwin-arm64": {
|
||||||
|
"version": "0.16.4",
|
||||||
|
"resolved": "https://registry.npmjs.org/@esbuild/darwin-arm64/-/darwin-arm64-0.16.4.tgz",
|
||||||
|
"integrity": "sha512-a28X1O//aOfxwJVZVs7ZfM8Tyih2Za4nKJrBwW5Wm4yKsnwBy9aiS/xwpxiiTRttw3EaTg4Srerhcm6z0bu9Wg==",
|
||||||
|
"dev": true,
|
||||||
|
"optional": true
|
||||||
|
},
|
||||||
|
"@esbuild/darwin-x64": {
|
||||||
|
"version": "0.16.4",
|
||||||
|
"resolved": "https://registry.npmjs.org/@esbuild/darwin-x64/-/darwin-x64-0.16.4.tgz",
|
||||||
|
"integrity": "sha512-e3doCr6Ecfwd7VzlaQqEPrnbvvPjE9uoTpxG5pyLzr2rI2NMjDHmvY1E5EO81O/e9TUOLLkXA5m6T8lfjK9yAA==",
|
||||||
|
"dev": true,
|
||||||
|
"optional": true
|
||||||
|
},
|
||||||
|
"@esbuild/freebsd-arm64": {
|
||||||
|
"version": "0.16.4",
|
||||||
|
"resolved": "https://registry.npmjs.org/@esbuild/freebsd-arm64/-/freebsd-arm64-0.16.4.tgz",
|
||||||
|
"integrity": "sha512-Oup3G/QxBgvvqnXWrBed7xxkFNwAwJVHZcklWyQt7YCAL5bfUkaa6FVWnR78rNQiM8MqqLiT6ZTZSdUFuVIg1w==",
|
||||||
|
"dev": true,
|
||||||
|
"optional": true
|
||||||
|
},
|
||||||
|
"@esbuild/freebsd-x64": {
|
||||||
|
"version": "0.16.4",
|
||||||
|
"resolved": "https://registry.npmjs.org/@esbuild/freebsd-x64/-/freebsd-x64-0.16.4.tgz",
|
||||||
|
"integrity": "sha512-vAP+eYOxlN/Bpo/TZmzEQapNS8W1njECrqkTpNgvXskkkJC2AwOXwZWai/Kc2vEFZUXQttx6UJbj9grqjD/+9Q==",
|
||||||
|
"dev": true,
|
||||||
|
"optional": true
|
||||||
|
},
|
||||||
|
"@esbuild/linux-arm": {
|
||||||
|
"version": "0.16.4",
|
||||||
|
"resolved": "https://registry.npmjs.org/@esbuild/linux-arm/-/linux-arm-0.16.4.tgz",
|
||||||
|
"integrity": "sha512-A47ZmtpIPyERxkSvIv+zLd6kNIOtJH03XA0Hy7jaceRDdQaQVGSDt4mZqpWqJYgDk9rg96aglbF6kCRvPGDSUA==",
|
||||||
|
"dev": true,
|
||||||
|
"optional": true
|
||||||
|
},
|
||||||
|
"@esbuild/linux-arm64": {
|
||||||
|
"version": "0.16.4",
|
||||||
|
"resolved": "https://registry.npmjs.org/@esbuild/linux-arm64/-/linux-arm64-0.16.4.tgz",
|
||||||
|
"integrity": "sha512-2zXoBhv4r5pZiyjBKrOdFP4CXOChxXiYD50LRUU+65DkdS5niPFHbboKZd/c81l0ezpw7AQnHeoCy5hFrzzs4g==",
|
||||||
|
"dev": true,
|
||||||
|
"optional": true
|
||||||
|
},
|
||||||
|
"@esbuild/linux-ia32": {
|
||||||
|
"version": "0.16.4",
|
||||||
|
"resolved": "https://registry.npmjs.org/@esbuild/linux-ia32/-/linux-ia32-0.16.4.tgz",
|
||||||
|
"integrity": "sha512-uxdSrpe9wFhz4yBwt2kl2TxS/NWEINYBUFIxQtaEVtglm1eECvsj1vEKI0KX2k2wCe17zDdQ3v+jVxfwVfvvjw==",
|
||||||
|
"dev": true,
|
||||||
|
"optional": true
|
||||||
|
},
|
||||||
|
"@esbuild/linux-loong64": {
|
||||||
|
"version": "0.16.4",
|
||||||
|
"resolved": "https://registry.npmjs.org/@esbuild/linux-loong64/-/linux-loong64-0.16.4.tgz",
|
||||||
|
"integrity": "sha512-peDrrUuxbZ9Jw+DwLCh/9xmZAk0p0K1iY5d2IcwmnN+B87xw7kujOkig6ZRcZqgrXgeRGurRHn0ENMAjjD5DEg==",
|
||||||
|
"dev": true,
|
||||||
|
"optional": true
|
||||||
|
},
|
||||||
|
"@esbuild/linux-mips64el": {
|
||||||
|
"version": "0.16.4",
|
||||||
|
"resolved": "https://registry.npmjs.org/@esbuild/linux-mips64el/-/linux-mips64el-0.16.4.tgz",
|
||||||
|
"integrity": "sha512-sD9EEUoGtVhFjjsauWjflZklTNr57KdQ6xfloO4yH1u7vNQlOfAlhEzbyBKfgbJlW7rwXYBdl5/NcZ+Mg2XhQA==",
|
||||||
|
"dev": true,
|
||||||
|
"optional": true
|
||||||
|
},
|
||||||
|
"@esbuild/linux-ppc64": {
|
||||||
|
"version": "0.16.4",
|
||||||
|
"resolved": "https://registry.npmjs.org/@esbuild/linux-ppc64/-/linux-ppc64-0.16.4.tgz",
|
||||||
|
"integrity": "sha512-X1HSqHUX9D+d0l6/nIh4ZZJ94eQky8d8z6yxAptpZE3FxCWYWvTDd9X9ST84MGZEJx04VYUD/AGgciddwO0b8g==",
|
||||||
|
"dev": true,
|
||||||
|
"optional": true
|
||||||
|
},
|
||||||
|
"@esbuild/linux-riscv64": {
|
||||||
|
"version": "0.16.4",
|
||||||
|
"resolved": "https://registry.npmjs.org/@esbuild/linux-riscv64/-/linux-riscv64-0.16.4.tgz",
|
||||||
|
"integrity": "sha512-97ANpzyNp0GTXCt6SRdIx1ngwncpkV/z453ZuxbnBROCJ5p/55UjhbaG23UdHj88fGWLKPFtMoU4CBacz4j9FA==",
|
||||||
|
"dev": true,
|
||||||
|
"optional": true
|
||||||
|
},
|
||||||
|
"@esbuild/linux-s390x": {
|
||||||
|
"version": "0.16.4",
|
||||||
|
"resolved": "https://registry.npmjs.org/@esbuild/linux-s390x/-/linux-s390x-0.16.4.tgz",
|
||||||
|
"integrity": "sha512-pUvPQLPmbEeJRPjP0DYTC1vjHyhrnCklQmCGYbipkep+oyfTn7GTBJXoPodR7ZS5upmEyc8lzAkn2o29wD786A==",
|
||||||
|
"dev": true,
|
||||||
|
"optional": true
|
||||||
|
},
|
||||||
|
"@esbuild/linux-x64": {
|
||||||
|
"version": "0.16.4",
|
||||||
|
"resolved": "https://registry.npmjs.org/@esbuild/linux-x64/-/linux-x64-0.16.4.tgz",
|
||||||
|
"integrity": "sha512-N55Q0mJs3Sl8+utPRPBrL6NLYZKBCLLx0bme/+RbjvMforTGGzFvsRl4xLTZMUBFC1poDzBEPTEu5nxizQ9Nlw==",
|
||||||
|
"dev": true,
|
||||||
|
"optional": true
|
||||||
|
},
|
||||||
|
"@esbuild/netbsd-x64": {
|
||||||
|
"version": "0.16.4",
|
||||||
|
"resolved": "https://registry.npmjs.org/@esbuild/netbsd-x64/-/netbsd-x64-0.16.4.tgz",
|
||||||
|
"integrity": "sha512-LHSJLit8jCObEQNYkgsDYBh2JrJT53oJO2HVdkSYLa6+zuLJh0lAr06brXIkljrlI+N7NNW1IAXGn/6IZPi3YQ==",
|
||||||
|
"dev": true,
|
||||||
|
"optional": true
|
||||||
|
},
|
||||||
|
"@esbuild/openbsd-x64": {
|
||||||
|
"version": "0.16.4",
|
||||||
|
"resolved": "https://registry.npmjs.org/@esbuild/openbsd-x64/-/openbsd-x64-0.16.4.tgz",
|
||||||
|
"integrity": "sha512-nLgdc6tWEhcCFg/WVFaUxHcPK3AP/bh+KEwKtl69Ay5IBqUwKDaq/6Xk0E+fh/FGjnLwqFSsarsbPHeKM8t8Sw==",
|
||||||
|
"dev": true,
|
||||||
|
"optional": true
|
||||||
|
},
|
||||||
|
"@esbuild/sunos-x64": {
|
||||||
|
"version": "0.16.4",
|
||||||
|
"resolved": "https://registry.npmjs.org/@esbuild/sunos-x64/-/sunos-x64-0.16.4.tgz",
|
||||||
|
"integrity": "sha512-08SluG24GjPO3tXKk95/85n9kpyZtXCVwURR2i4myhrOfi3jspClV0xQQ0W0PYWHioJj+LejFMt41q+PG3mlAQ==",
|
||||||
|
"dev": true,
|
||||||
|
"optional": true
|
||||||
|
},
|
||||||
|
"@esbuild/win32-arm64": {
|
||||||
|
"version": "0.16.4",
|
||||||
|
"resolved": "https://registry.npmjs.org/@esbuild/win32-arm64/-/win32-arm64-0.16.4.tgz",
|
||||||
|
"integrity": "sha512-yYiRDQcqLYQSvNQcBKN7XogbrSvBE45FEQdH8fuXPl7cngzkCvpsG2H9Uey39IjQ6gqqc+Q4VXYHsQcKW0OMjQ==",
|
||||||
|
"dev": true,
|
||||||
|
"optional": true
|
||||||
|
},
|
||||||
|
"@esbuild/win32-ia32": {
|
||||||
|
"version": "0.16.4",
|
||||||
|
"resolved": "https://registry.npmjs.org/@esbuild/win32-ia32/-/win32-ia32-0.16.4.tgz",
|
||||||
|
"integrity": "sha512-5rabnGIqexekYkh9zXG5waotq8mrdlRoBqAktjx2W3kb0zsI83mdCwrcAeKYirnUaTGztR5TxXcXmQrEzny83w==",
|
||||||
|
"dev": true,
|
||||||
|
"optional": true
|
||||||
|
},
|
||||||
|
"@esbuild/win32-x64": {
|
||||||
|
"version": "0.16.4",
|
||||||
|
"resolved": "https://registry.npmjs.org/@esbuild/win32-x64/-/win32-x64-0.16.4.tgz",
|
||||||
|
"integrity": "sha512-sN/I8FMPtmtT2Yw+Dly8Ur5vQ5a/RmC8hW7jO9PtPSQUPkowxWpcUZnqOggU7VwyT3Xkj6vcXWd3V/qTXwultQ==",
|
||||||
|
"dev": true,
|
||||||
|
"optional": true
|
||||||
|
},
|
||||||
"@iarna/toml": {
|
"@iarna/toml": {
|
||||||
"version": "2.2.5",
|
"version": "2.2.5",
|
||||||
"resolved": "https://registry.npmjs.org/@iarna/toml/-/toml-2.2.5.tgz",
|
"resolved": "https://registry.npmjs.org/@iarna/toml/-/toml-2.2.5.tgz",
|
||||||
|
@ -1946,31 +2490,33 @@
|
||||||
"dev": true
|
"dev": true
|
||||||
},
|
},
|
||||||
"esbuild": {
|
"esbuild": {
|
||||||
"version": "0.14.51",
|
"version": "0.16.4",
|
||||||
"resolved": "https://registry.npmjs.org/esbuild/-/esbuild-0.14.51.tgz",
|
"resolved": "https://registry.npmjs.org/esbuild/-/esbuild-0.16.4.tgz",
|
||||||
"integrity": "sha512-+CvnDitD7Q5sT7F+FM65sWkF8wJRf+j9fPcprxYV4j+ohmzVj2W7caUqH2s5kCaCJAfcAICjSlKhDCcvDpU7nw==",
|
"integrity": "sha512-qQrPMQpPTWf8jHugLWHoGqZjApyx3OEm76dlTXobHwh/EBbavbRdjXdYi/GWr43GyN0sfpap14GPkb05NH3ROA==",
|
||||||
"dev": true,
|
"dev": true,
|
||||||
"requires": {
|
"requires": {
|
||||||
"esbuild-android-64": "0.14.51",
|
"@esbuild/android-arm": "0.16.4",
|
||||||
"esbuild-android-arm64": "0.14.51",
|
"@esbuild/android-arm64": "0.16.4",
|
||||||
"esbuild-darwin-64": "0.14.51",
|
"@esbuild/android-x64": "0.16.4",
|
||||||
"esbuild-darwin-arm64": "0.14.51",
|
"@esbuild/darwin-arm64": "0.16.4",
|
||||||
"esbuild-freebsd-64": "0.14.51",
|
"@esbuild/darwin-x64": "0.16.4",
|
||||||
"esbuild-freebsd-arm64": "0.14.51",
|
"@esbuild/freebsd-arm64": "0.16.4",
|
||||||
"esbuild-linux-32": "0.14.51",
|
"@esbuild/freebsd-x64": "0.16.4",
|
||||||
"esbuild-linux-64": "0.14.51",
|
"@esbuild/linux-arm": "0.16.4",
|
||||||
"esbuild-linux-arm": "0.14.51",
|
"@esbuild/linux-arm64": "0.16.4",
|
||||||
"esbuild-linux-arm64": "0.14.51",
|
"@esbuild/linux-ia32": "0.16.4",
|
||||||
"esbuild-linux-mips64le": "0.14.51",
|
"@esbuild/linux-loong64": "0.16.4",
|
||||||
"esbuild-linux-ppc64le": "0.14.51",
|
"@esbuild/linux-mips64el": "0.16.4",
|
||||||
"esbuild-linux-riscv64": "0.14.51",
|
"@esbuild/linux-ppc64": "0.16.4",
|
||||||
"esbuild-linux-s390x": "0.14.51",
|
"@esbuild/linux-riscv64": "0.16.4",
|
||||||
"esbuild-netbsd-64": "0.14.51",
|
"@esbuild/linux-s390x": "0.16.4",
|
||||||
"esbuild-openbsd-64": "0.14.51",
|
"@esbuild/linux-x64": "0.16.4",
|
||||||
"esbuild-sunos-64": "0.14.51",
|
"@esbuild/netbsd-x64": "0.16.4",
|
||||||
"esbuild-windows-32": "0.14.51",
|
"@esbuild/openbsd-x64": "0.16.4",
|
||||||
"esbuild-windows-64": "0.14.51",
|
"@esbuild/sunos-x64": "0.16.4",
|
||||||
"esbuild-windows-arm64": "0.14.51"
|
"@esbuild/win32-arm64": "0.16.4",
|
||||||
|
"@esbuild/win32-ia32": "0.16.4",
|
||||||
|
"@esbuild/win32-x64": "0.16.4"
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
"esbuild-android-64": {
|
"esbuild-android-64": {
|
||||||
|
@ -2610,6 +3156,36 @@
|
||||||
"selfsigned": "^2.0.1",
|
"selfsigned": "^2.0.1",
|
||||||
"source-map": "^0.7.4",
|
"source-map": "^0.7.4",
|
||||||
"xxhash-wasm": "^1.0.1"
|
"xxhash-wasm": "^1.0.1"
|
||||||
|
},
|
||||||
|
"dependencies": {
|
||||||
|
"esbuild": {
|
||||||
|
"version": "0.14.51",
|
||||||
|
"resolved": "https://registry.npmjs.org/esbuild/-/esbuild-0.14.51.tgz",
|
||||||
|
"integrity": "sha512-+CvnDitD7Q5sT7F+FM65sWkF8wJRf+j9fPcprxYV4j+ohmzVj2W7caUqH2s5kCaCJAfcAICjSlKhDCcvDpU7nw==",
|
||||||
|
"dev": true,
|
||||||
|
"requires": {
|
||||||
|
"esbuild-android-64": "0.14.51",
|
||||||
|
"esbuild-android-arm64": "0.14.51",
|
||||||
|
"esbuild-darwin-64": "0.14.51",
|
||||||
|
"esbuild-darwin-arm64": "0.14.51",
|
||||||
|
"esbuild-freebsd-64": "0.14.51",
|
||||||
|
"esbuild-freebsd-arm64": "0.14.51",
|
||||||
|
"esbuild-linux-32": "0.14.51",
|
||||||
|
"esbuild-linux-64": "0.14.51",
|
||||||
|
"esbuild-linux-arm": "0.14.51",
|
||||||
|
"esbuild-linux-arm64": "0.14.51",
|
||||||
|
"esbuild-linux-mips64le": "0.14.51",
|
||||||
|
"esbuild-linux-ppc64le": "0.14.51",
|
||||||
|
"esbuild-linux-riscv64": "0.14.51",
|
||||||
|
"esbuild-linux-s390x": "0.14.51",
|
||||||
|
"esbuild-netbsd-64": "0.14.51",
|
||||||
|
"esbuild-openbsd-64": "0.14.51",
|
||||||
|
"esbuild-sunos-64": "0.14.51",
|
||||||
|
"esbuild-windows-32": "0.14.51",
|
||||||
|
"esbuild-windows-64": "0.14.51",
|
||||||
|
"esbuild-windows-arm64": "0.14.51"
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
"ws": {
|
"ws": {
|
||||||
|
|
|
@ -5,6 +5,7 @@
|
||||||
"version": "20221209",
|
"version": "20221209",
|
||||||
"main": "worker.ts",
|
"main": "worker.ts",
|
||||||
"scripts": {
|
"scripts": {
|
||||||
|
"build": "esbuild --bundle --minify --outfile=./dist/worker.js --format=esm --platform=browser worker.ts",
|
||||||
"start": "wrangler dev --local",
|
"start": "wrangler dev --local",
|
||||||
"format": "prettier --write ."
|
"format": "prettier --write ."
|
||||||
},
|
},
|
||||||
|
@ -12,6 +13,7 @@
|
||||||
"license": "Apache2",
|
"license": "Apache2",
|
||||||
"devDependencies": {
|
"devDependencies": {
|
||||||
"@cloudflare/workers-types": "^4.20221111.1",
|
"@cloudflare/workers-types": "^4.20221111.1",
|
||||||
|
"esbuild": "^0.16.4",
|
||||||
"prettier": "^2.8.1",
|
"prettier": "^2.8.1",
|
||||||
"typescript": "^4.9.4",
|
"typescript": "^4.9.4",
|
||||||
"wrangler": "^2.6.2"
|
"wrangler": "^2.6.2"
|
||||||
|
|
Loading…
Reference in New Issue