Skip to content

Commit

Permalink
feature: expose the fastly features via 'fastly:' namespaced modules
Browse files Browse the repository at this point in the history
  • Loading branch information
JakeChampion committed Nov 29, 2022
1 parent 58e6801 commit c06cd16
Show file tree
Hide file tree
Showing 34 changed files with 207 additions and 179 deletions.
@@ -1,3 +1,5 @@
/* eslint-env serviceworker */

addEventListener("fetch", (event) => {
let requestsData = [
{
Expand Down
4 changes: 4 additions & 0 deletions integration-tests/js-compute/fixtures/backend/bin/index.js
@@ -1,3 +1,7 @@
/* eslint-env serviceworker */
/* global ReadableStream */
import { CacheOverride } from 'fastly:cache-override';

async function handleRequest(event) {
// Get the client request from the event
let req = event.request;
Expand Down
32 changes: 5 additions & 27 deletions integration-tests/js-compute/fixtures/btoa/bin/index.js
@@ -1,3 +1,6 @@
/* eslint-env serviceworker */
/// <reference path="../../../../../types/index.d.ts" />

addEventListener("fetch", () => {
try {
let error;
Expand Down Expand Up @@ -330,6 +333,7 @@ addEventListener("fetch", () => {
if (error) { return error }
error = assert(btoa("„"), "hA==", `btoa("„")`)
if (error) { return error }
// eslint-disable-next-line no-irregular-whitespace
error = assert(btoa("…"), "hQ==", `btoa("…")`)
if (error) { return error }
error = assert(btoa("†"), "hg==", `btoa("†")`)
Expand Down Expand Up @@ -384,6 +388,7 @@ addEventListener("fetch", () => {
if (error) { return error }
error = assert(btoa("Ÿ"), "nw==", `btoa("Ÿ")`)
if (error) { return error }
// eslint-disable-next-line no-irregular-whitespace
error = assert(btoa(" "), "oA==", `btoa(" ")`)
if (error) { return error }
error = assert(btoa("¡"), "oQ==", `btoa("¡")`)
Expand Down Expand Up @@ -765,33 +770,6 @@ function assert(actual, expected, code) {
}
}

async function assertResolves(func) {
try {
await func()
} catch (error) {
return fail(`Expected \`${func.toString()}\` to resolve - Found it rejected: ${error.name}: ${error.message}`)
}
}

async function assertRejects(func, errorClass, errorMessage) {
try {
await func()
return fail(`Expected \`${func.toString()}\` to reject - Found it did not reject`)
} catch (error) {
if (errorClass) {
if ((error instanceof errorClass) === false) {
return fail(`Expected \`${func.toString()}\` to reject instance of \`${errorClass.name}\` - Found instance of \`${error.name}\``)
}
}

if (errorMessage) {
if (error.message !== errorMessage) {
return fail(`Expected \`${func.toString()}\` to reject error message of \`${errorMessage}\` - Found \`${error.message}\``)
}
}
}
}

function assertThrows(func, errorClass, errorMessage) {
try {
func()
Expand Down
@@ -1,3 +1,7 @@
/* eslint-env serviceworker */
/* global ReadableStream */
import { CacheOverride } from 'fastly:cache-override';

addEventListener("fetch", (event) => {
let headers = new Headers();
headers.set("AssemblyScriptHeader", "AssemblyScriptValue");
Expand Down Expand Up @@ -26,6 +30,7 @@ addEventListener("fetch", (event) => {
let body = upstreamResponse.body;
let streamReader = body.getReader();

// eslint-disable-next-line no-constant-condition
while (true) {
let chunk = await streamReader.read();

Expand Down
@@ -1,3 +1,6 @@
/* eslint-env serviceworker */
import { ConfigStore } from 'fastly:config-store'

addEventListener("fetch", (event) => {
let config = new ConfigStore("testconfig");
let twitterValue = config.get("twitter");
Expand Down
5 changes: 4 additions & 1 deletion integration-tests/js-compute/fixtures/console/bin/index.js
@@ -1,3 +1,6 @@
/* eslint-env serviceworker */
/* global ReadableStream, TransformStream, WritableStream */
/// <reference path="../../../../../types/index.d.ts" />
addEventListener("fetch", () => {
console.log("Happy", "birthday", "Aki", "and", "Yuki!");
let arg;
Expand Down Expand Up @@ -67,7 +70,7 @@ addEventListener("fetch", () => {
console.log('WeakMap:', arg)
arg = new WeakSet
console.log('WeakSet:', arg)
arg = new Promise((resolve, reject) => { })
arg = new Promise(() => { })
console.log('Promise:', arg)
arg = Promise.resolve(9)
console.log('resolved promise:', arg)
Expand Down
@@ -1,4 +1,8 @@
/* eslint-env serviceworker */
/* global fastly */
import { Backend } from 'fastly:backend';
import { CacheOverride } from 'fastly:cache-override';

addEventListener("fetch", event => {
event.respondWith(app(event))
})
Expand Down Expand Up @@ -666,6 +670,7 @@ routes.set('/', () => {
let error = assertDoesNotThrow(() => {
new Backend({ name: 'useSSL-property-valid-boolean' + type, target: 'a', useSSL: type })
})
if (error) { return error }
}
let error = assertDoesNotThrow(() => {
new Backend({ name: 'useSSL-property-valid-boolean-true', target: 'a', useSSL: true })
Expand Down Expand Up @@ -867,6 +872,7 @@ routes.set('/', () => {
let error = assertDoesNotThrow(() => {
new Backend({ name: 'checkCertificate-property-valid-boolean' + type, target: 'a', checkCertificate: type })
})
if (error) { return error }
}
let error = assertDoesNotThrow(() => {
new Backend({ name: 'checkCertificate-property-valid-boolean-true', target: 'a', checkCertificate: true })
Expand Down
@@ -1,3 +1,5 @@
/* eslint-env serviceworker */
import {Dictionary} from 'fastly:dictionary'
addEventListener("fetch", (event) => {
let asDictionary = new Dictionary("edge_dictionary");
let twitterValue = asDictionary.get("twitter");
Expand Down
2 changes: 2 additions & 0 deletions integration-tests/js-compute/fixtures/env/bin/index.js
@@ -1,3 +1,5 @@
/* eslint-env serviceworker */
/* global fastly */
addEventListener("fetch", (event) => {
// Get the request from the client
let downstreamRequest = event.request;
Expand Down
9 changes: 7 additions & 2 deletions integration-tests/js-compute/fixtures/error/bin/index.js
@@ -1,6 +1,7 @@
/* eslint-env serviceworker */
/* global fastly */

addEventListener("fetch", ()=>{
addEventListener("fetch", () => {
console.log(1)
})

Expand Down Expand Up @@ -35,4 +36,8 @@ routes.set('/', () => {
});
routes.set("/error", async () => {
throw new Error('uh oh')
});
});

function fail(message = '') {
return new Response(message, { status: 500 })
}
@@ -1,3 +1,8 @@
/* eslint-env serviceworker */
/* global TransformStream CompressionStream */
import {Dictionary} from 'fastly:dictionary';
import {CacheOverride} from 'fastly:cache-override';
import {ObjectStore} from 'fastly:object-store';
const builtins = [
TransformStream,
CompressionStream,
Expand Down
@@ -1,3 +1,4 @@
/* eslint-env serviceworker */
class MyRequest extends Request {
constructor(input, init) {
super(input, init);
Expand Down
32 changes: 3 additions & 29 deletions integration-tests/js-compute/fixtures/geoip/bin/index.js
@@ -1,3 +1,4 @@
/* eslint-env serviceworker */
/* global fastly */
addEventListener("fetch", event => {
event.respondWith(app(event))
Expand Down Expand Up @@ -29,14 +30,14 @@ routes.set('/', () => {
});

routes.set("/fastly/getgeolocationforipaddress/interface", async function () {
actual = Reflect.getOwnPropertyDescriptor(fastly, 'getGeolocationForIpAddress')
let actual = Reflect.getOwnPropertyDescriptor(fastly, 'getGeolocationForIpAddress')
expected = {
writable: true,
enumerable: true,
configurable: true,
value: fastly.getGeolocationForIpAddress
}
error = assert(actual, expected, `Reflect.getOwnPropertyDescriptor(fastly, 'getGeolocationForIpAddress)`)
let error = assert(actual, expected, `Reflect.getOwnPropertyDescriptor(fastly, 'getGeolocationForIpAddress)`)
if (error) { return error }

error = assert(typeof fastly.getGeolocationForIpAddress, 'function', `typeof fastly.getGeolocationForIpAddress`)
Expand Down Expand Up @@ -213,33 +214,6 @@ function assert(actual, expected, code) {
}
}

async function assertResolves(func) {
try {
await func()
} catch (error) {
return fail(`Expected \`${func.toString()}\` to resolve - Found it rejected: ${error.name}: ${error.message}`)
}
}

async function assertRejects(func, errorClass, errorMessage) {
try {
await func()
return fail(`Expected \`${func.toString()}\` to reject - Found it did not reject`)
} catch (error) {
if (errorClass) {
if ((error instanceof errorClass) === false) {
return fail(`Expected \`${func.toString()}\` to reject instance of \`${errorClass.name}\` - Found instance of \`${error.name}\``)
}
}

if (errorMessage) {
if (error.message !== errorMessage) {
return fail(`Expected \`${func.toString()}\` to reject error message of \`${errorMessage}\` - Found \`${error.message}\``)
}
}
}
}

function assertThrows(func, errorClass, errorMessage) {
try {
func()
Expand Down
@@ -1,3 +1,4 @@
/* eslint-env serviceworker */
addEventListener("fetch", (event) => {
// Build a response
let response = new Response("Hello JS", {
Expand Down
@@ -1,3 +1,6 @@
/* eslint-env serviceworker */
/* global fastly */

const message = fastly.includeBytes("message.txt");

addEventListener("fetch", (event) => {
Expand Down
2 changes: 2 additions & 0 deletions integration-tests/js-compute/fixtures/log/bin/index.js
@@ -1,3 +1,5 @@
/* eslint-env serviceworker */
/* global fastly */
addEventListener("fetch", (event) => {
let logger = fastly.getLogger("ComputeLog");
logger.log("Hello!");
Expand Down
@@ -1,4 +1,5 @@
/* global ObjectStore, ObjectStoreEntry, fastly */
/* eslint-env serviceworker */
/* global ReadableStream fastly ObjectStore ObjectStoreEntry */
addEventListener("fetch", event => {
event.respondWith(app(event))
})
Expand Down
1 change: 1 addition & 0 deletions integration-tests/js-compute/fixtures/random/bin/index.js
@@ -1,3 +1,4 @@
/* eslint-env serviceworker */
function random3Decimals() {
return String(Math.random()).slice(0, 5);
}
Expand Down
21 changes: 13 additions & 8 deletions integration-tests/js-compute/fixtures/regex/bin/index.js
@@ -1,3 +1,4 @@
/* eslint-env serviceworker */
// The useragent_parser package is MIT licensed at the time this function was
// inlined into this test:
// https://github.com/Financial-Times/useragent_parser/blob/fdc6bff8f05cfb8fb8c8cd752f8739b9b356001f/package.json#L13
Expand Down Expand Up @@ -380,7 +381,7 @@ function useragent_parser(ua) {
return { family, major, minor, patch };
} else if (
(result =
/\/((?:Ant-|)Nutch|[A-z]+[Bb]ot|[A-z]+[Ss]pider|Axtaris|fetchurl|Isara|ShopSalad|Tailsweep)[ \-](\d+)(?:\.(\d+)|)(?:\.(\d+)|)/.exec(
/\/((?:Ant-|)Nutch|[A-z]+[Bb]ot|[A-z]+[Ss]pider|Axtaris|fetchurl|Isara|ShopSalad|Tailsweep)[ -](\d+)(?:\.(\d+)|)(?:\.(\d+)|)/.exec(
ua
))
) {
Expand Down Expand Up @@ -482,7 +483,7 @@ function useragent_parser(ua) {
return { family, major, minor, patch };
} else if (
(result =
/(?:\/[A-Za-z0-9\.]+|) {0,5}([A-Za-z0-9 \-_\!\[\]:]{0,50}(?:[Aa]rchiver|[Ii]ndexer|[Ss]craper|[Bb]ot|[Ss]pider|[Cc]rawl[a-z]{0,50}))[/ ](\d+)(?:\.(\d+)(?:\.(\d+)|)|)/.exec(
/(?:\/[A-Za-z0-9.]+|) {0,5}([A-Za-z0-9 \-_![\]:]{0,50}(?:[Aa]rchiver|[Ii]ndexer|[Ss]craper|[Bb]ot|[Ss]pider|[Cc]rawl[a-z]{0,50}))[/ ](\d+)(?:\.(\d+)(?:\.(\d+)|)|)/.exec(
ua
))
) {
Expand All @@ -504,7 +505,7 @@ function useragent_parser(ua) {
return { family, major, minor, patch };
} else if (
(result =
/((?:[A-z0-9]{1,50}|[A-z\-]{1,50} ?|)(?: the |)(?:[Ss][Pp][Ii][Dd][Ee][Rr]|[Ss]crape|[Cc][Rr][Aa][Ww][Ll])[A-z0-9]{0,50})(?:(?:[ /]| v)(\d+)(?:\.(\d+)|)(?:\.(\d+)|)|)/.exec(
/((?:[A-z0-9]{1,50}|[A-z-]{1,50} ?|)(?: the |)(?:[Ss][Pp][Ii][Dd][Ee][Rr]|[Ss]crape|[Cc][Rr][Aa][Ww][Ll])[A-z0-9]{0,50})(?:(?:[ /]| v)(\d+)(?:\.(\d+)|)(?:\.(\d+)|)|)/.exec(
ua
))
) {
Expand Down Expand Up @@ -920,7 +921,7 @@ function useragent_parser(ua) {
} else if ((result = /(Nintendo 3DS)/.exec(ua))) {
const family = "NetFront NX";
return { family, major, minor, patch };
} else if ((result = /(Silk)\/(\d+)\.(\d+)(?:\.([0-9\-]+)|)/.exec(ua))) {
} else if ((result = /(Silk)\/(\d+)\.(\d+)(?:\.([0-9-]+)|)/.exec(ua))) {
const family = "Amazon Silk";
const major = result[2];
const minor = result[3];
Expand Down Expand Up @@ -1068,6 +1069,7 @@ function useragent_parser(ua) {
const minor = result[3];
return { family, major, minor, patch };
} else if (
// eslint-disable-next-line no-dupe-else-if
(result = /(MQQBrowser\/Mini)(?:(\d+)(?:\.(\d+)|)(?:\.(\d+)|)|)/.exec(ua))
) {
const family = "QQ Browser Mini";
Expand All @@ -1076,6 +1078,7 @@ function useragent_parser(ua) {
const patch = result[4];
return { family, major, minor, patch };
} else if (
// eslint-disable-next-line no-dupe-else-if
(result = /(MQQBrowser)(?:\/(\d+)(?:\.(\d+)|)(?:\.(\d+)|)|)/.exec(ua))
) {
const family = "QQ Browser Mobile";
Expand All @@ -1084,6 +1087,7 @@ function useragent_parser(ua) {
const patch = result[4];
return { family, major, minor, patch };
} else if (
// eslint-disable-next-line no-dupe-else-if
(result = /(QQBrowser)(?:\/(\d+)(?:\.(\d+)\.(\d+)(?:\.(\d+)|)|)|)/.exec(ua))
) {
const family = "QQ Browser";
Expand Down Expand Up @@ -1265,7 +1269,7 @@ function useragent_parser(ua) {
const patch = result[4];
return { family, major, minor, patch };
} else if (
(result = /\b(Dolphin)(?: |HDCN\/|\/INT\-)(\d+)\.(\d+)(?:\.(\d+)|)/.exec(
(result = /\b(Dolphin)(?: |HDCN\/|\/INT-)(\d+)\.(\d+)(?:\.(\d+)|)/.exec(
ua
))
) {
Expand Down Expand Up @@ -1450,7 +1454,7 @@ function useragent_parser(ua) {
const major = result[2];
const minor = result[3];
return { family, major, minor, patch };
} else if ((result = /(Zune|BeyondPod) (\d+)(?:\.(\d+)|)[\);]/.exec(ua))) {
} else if ((result = /(Zune|BeyondPod) (\d+)(?:\.(\d+)|)[);]/.exec(ua))) {
const family = result[1];
const major = result[2];
const minor = result[3];
Expand Down Expand Up @@ -1622,7 +1626,7 @@ function useragent_parser(ua) {
} else if ((result = /(Obigo)InternetBrowser/.exec(ua))) {
const family = result[1];
return { family, major, minor, patch };
} else if ((result = /(Obigo)\-Browser/.exec(ua))) {
} else if ((result = /(Obigo)-Browser/.exec(ua))) {
const family = result[1];
return { family, major, minor, patch };
} else if ((result = /(Obigo|OBIGO)[^\d]*(\d+)(?:.(\d+)|)/.exec(ua))) {
Expand Down Expand Up @@ -1911,7 +1915,7 @@ function useragent_parser(ua) {
const major = "0";
const minor = result[3];
return { family, major, minor, patch };
} else if ((result = /(SEMC\-Browser)\/(\d+)\.(\d+)/.exec(ua))) {
} else if ((result = /(SEMC-Browser)\/(\d+)\.(\d+)/.exec(ua))) {
const family = result[1];
const major = result[2];
const minor = result[3];
Expand Down Expand Up @@ -2000,6 +2004,7 @@ function useragent_parser(ua) {
const patch = result[4];
return { family, major, minor, patch };
} else if (
// eslint-disable-next-line no-dupe-else-if
(result = /(Python\/3\.\d{1,3} aiohttp)\/(\d+)\.(\d+)\.(\d+)/.exec(ua))
) {
const family = result[1];
Expand Down
@@ -1,4 +1,5 @@
/* global Request, RequestEntry, fastly */
/* eslint-env serviceworker */
/* global fastly */
addEventListener("fetch", event => {
event.respondWith(app(event))
})
Expand Down Expand Up @@ -111,14 +112,6 @@ function assert(actual, expected, code) {
}
}

function assertResolves(func) {
try {
func()
} catch (error) {
return fail(`Expected \`${func.toString()}\` to resolve - Found it rejected: ${error.name}: ${error.message}`)
}
}

function assertThrows(func, errorClass, errorMessage) {
try {
func()
Expand Down

0 comments on commit c06cd16

Please sign in to comment.