@fastly/js-compute
Version:
JavaScript SDK and CLI for building JavaScript applications on [Fastly Compute](https://www.fastly.com/products/edge-compute/serverless).
139 lines (136 loc) • 4.58 kB
JavaScript
import { build } from 'esbuild';
let fastlyPlugin = {
name: 'fastly',
setup(build) {
build.onResolve({ filter: /^fastly:.*/ }, (args) => {
return {
path: args.path.replace('fastly:', ''),
namespace: 'fastly',
};
});
build.onLoad({ filter: /^.*/, namespace: 'fastly' }, async (args) => {
switch (args.path) {
case 'acl': {
return {
contents: `export const Acl = globalThis.Acl;`,
};
}
case 'backend': {
return {
contents: `
export const Backend = globalThis.Backend;
export const setDefaultDynamicBackendConfig = Object.getOwnPropertyDescriptor(globalThis.fastly, 'allowDynamicBackends').set;
const allowDynamicBackends = Object.getOwnPropertyDescriptor(globalThis.fastly, 'allowDynamicBackends').set;
export const setDefaultBackend = Object.getOwnPropertyDescriptor(globalThis.fastly, 'defaultBackend').set;
export function enforceExplicitBackends (defaultBackend) {
allowDynamicBackends(false);
if (defaultBackend) setDefaultBackend(defaultBackend);
}
`,
};
}
case 'body': {
return {
contents: `export const FastlyBody = globalThis.FastlyBody;`,
};
}
case 'cache-override': {
return {
contents: `export const CacheOverride = globalThis.CacheOverride;`,
};
}
case 'config-store': {
return {
contents: `export const ConfigStore = globalThis.ConfigStore;`,
};
}
case 'dictionary': {
return {
contents: `export const Dictionary = globalThis.Dictionary;`,
};
}
case 'device': {
return { contents: `export const Device = globalThis.Device;` };
}
case 'edge-rate-limiter': {
return {
contents: `
export const RateCounter = globalThis.RateCounter;
export const PenaltyBox = globalThis.PenaltyBox;
export const EdgeRateLimiter = globalThis.EdgeRateLimiter;
`,
};
}
case 'env': {
return { contents: `export const env = globalThis.fastly.env.get;` };
}
case 'experimental': {
return {
contents: `
export const includeBytes = globalThis.fastly.includeBytes;
export const enableDebugLogging = globalThis.fastly.enableDebugLogging;
export const setBaseURL = Object.getOwnPropertyDescriptor(globalThis.fastly, 'baseURL').set;
export const setDefaultBackend = Object.getOwnPropertyDescriptor(globalThis.fastly, 'defaultBackend').set;
export const allowDynamicBackends = Object.getOwnPropertyDescriptor(globalThis.fastly, 'allowDynamicBackends').set;
export const sdkVersion = globalThis.fastly.sdkVersion;
`,
};
}
case 'fanout': {
return {
contents: `export const createFanoutHandoff = globalThis.fastly.createFanoutHandoff;`,
};
}
case 'geolocation': {
return {
contents: `export const getGeolocationForIpAddress = globalThis.fastly.getGeolocationForIpAddress;`,
};
}
case 'logger': {
return {
contents: `export const Logger = globalThis.Logger;
export const configureConsole = Logger.configureConsole;
delete globalThis.Logger.configureConsole;
`,
};
}
case 'kv-store': {
return { contents: `export const KVStore = globalThis.KVStore;` };
}
case 'secret-store': {
return {
contents: `export const SecretStore = globalThis.SecretStore;export const SecretStoreEntry = globalThis.SecretStoreEntry;`,
};
}
case 'cache': {
return {
contents: `
export const CacheEntry = globalThis.CacheEntry;
export const CacheState = globalThis.CacheState;
export const CoreCache = globalThis.CoreCache;
export const SimpleCache = globalThis.SimpleCache;
export const SimpleCacheEntry = globalThis.SimpleCacheEntry;
export const TransactionCacheEntry = globalThis.TransactionCacheEntry;
`,
};
}
case 'compute': {
return {
contents: `export const { purgeSurrogateKey, vCpuTime } = globalThis.fastly;`,
};
}
}
});
},
};
export async function bundle(input, moduleMode = false) {
return await build({
conditions: ['fastly'],
entryPoints: [input],
bundle: true,
write: false,
format: moduleMode ? 'esm' : 'iife',
tsconfig: undefined,
plugins: [fastlyPlugin],
});
}