awscdk-construct-scte-scheduler
Version:
AWS CDK Construct for scheduling SCTE-35 events using the MediaLive schedule API
60 lines (55 loc) • 1.91 kB
JavaScript
;
var protocols = require('@smithy/core/protocols');
const validate = (str) => typeof str === "string" && str.indexOf("arn:") === 0 && str.split(":").length >= 6;
const parse = (arn) => {
const segments = arn.split(":");
if (segments.length < 6 || segments[0] !== "arn")
throw new Error("Malformed ARN");
const [, partition, service, region, accountId, ...resource] = segments;
return {
partition,
service,
region,
accountId,
resource: resource.join(":"),
};
};
const build = (arnObject) => {
const { partition = "aws", service, region, accountId, resource } = arnObject;
if ([service, region, accountId, resource].some((segment) => typeof segment !== "string")) {
throw new Error("Input ARN object is invalid");
}
return `arn:${partition}:${service}:${region}:${accountId}:${resource}`;
};
function formatUrl(request) {
const { port, query } = request;
let { protocol, path, hostname } = request;
if (protocol && protocol.slice(-1) !== ":") {
protocol += ":";
}
if (port) {
hostname += `:${port}`;
}
if (path && path.charAt(0) !== "/") {
path = `/${path}`;
}
let queryString = query ? protocols.buildQueryString(query) : "";
if (queryString && queryString[0] !== "?") {
queryString = `?${queryString}`;
}
let auth = "";
if (request.username != null || request.password != null) {
const username = request.username ?? "";
const password = request.password ?? "";
auth = `${username}:${password}@`;
}
let fragment = "";
if (request.fragment) {
fragment = `#${request.fragment}`;
}
return `${protocol}//${auth}${hostname}${path}${queryString}${fragment}`;
}
exports.build = build;
exports.formatUrl = formatUrl;
exports.parse = parse;
exports.validate = validate;