A re-write of sourcemap-validator using React, Node, and Google Cloud Functions.
sourcemaps.io is a web application that takes a URL for a target transpiled/minified JavaScript file (e.g. https://example.com/js/app.min.js
), and verifies:
sourceMappingURL
or[X-]SourceMap
header is present- Both the transpiled/minified file and source map file are reachable via HTTP
- The resolved source map is valid JSON, and parses using Mozilla's source-map library
- Lines and columns line up as expected
- ... and more, see tests
make test
make client-server
A local development server will serve the validation function for development.
make backend-server
NOTE: Right now the local server still writes JSON reports to a production Google Cloud Storage bucket. You must have the following shell variables exported (see Deploy to Google Cloud Platform below).
export GCLOUD_PROJECT=myproject-server
export GCLOUD_DATA_BUCKET=myproject-reports
make backend-server
This repository is already configured to automatically deploy to https://sourcemaps.io. But for posterity, this documents how to configure your own Google Cloud deployment environment and how to use the deploy scripts.
- Create a new project in Google Cloud Platform, e.g.
myproject
- Enable Cloud Functions
- Create 3 buckets in Cloud Storage, for:
- staging the cloud function (e.g.
myproject-server
) - storing report data (e.g.
myproject-reports
) - storing static web content (e.g.
myproject-web
)
- staging the cloud function (e.g.
NOTE: Your deployed cloud function must be configured to use Cloud Functions Node 10 runtime (or newer).
Follow Google Cloud's instructions for installing the gcloud CLI.
First authenticate with Google Cloud Platform:
gcloud auth login
Then initiate the deploy:
# Used for deploy
export GCLOUD_PROJECT=myproject
export GCLOUD_APP_BUCKET=myproject-server
export GCLOUD_DATA_BUCKET=myproject-reports
export GCLOUD_WWW_BUCKET=myproject-web
export GCLOUD_SERVICE_KEY=<base64 encoded service-key json object>
# Used for reporting errors back to your sentry instance:
export REACT_APP_SENTRY_DSN=https://[email protected]/1
export SENTRY_DSN=https://[email protected]/1
# Used for creating a new release in your sentry instance:
export SENTRY_AUTH_TOKEN=sntrys_abcxyz
export SENTRY_CLIENT_PROJECT=MY-PROJECT
export SENTRY_ORG=MY-ORG
make deploy
NOTE: The deploy script will set READ permissions on GCLOUD_DATA_BUCKET
and GCLOUD_WWW_BUCKET
.
The deployed serverless function is publicly accessible over HTTP. To trigger the function manually, do:
$ curl -X GET "https://${region}-${GCLOUD_PROJECT}.cloudfunctions.net/validateSourceFile?url=http://example.org/static/app.js"