blob: 8f69b6adb4ec72e7d3e8affb9c4f460603459a50 [file] [log] [blame]
// Licensed to the Apache Software Foundation (ASF) under one or more contributor
// license agreements; and to You under the Apache License, Version 2.0.
const messages = require('./messages')
const defaultNamespace = () => {
return process.env['__OW_NAMESPACE'] || '_'
}
// valid resource identifiers
// - resourceName
// - package/resourceName
// - /namespace/resourceName
// - /namespace/package/resourceName
// - namespace/package/resourceName
const parseIdAndNs = resource => {
const parts = (resource.match(/\//g) || []).length
const names = resource.split('/')
// checking for `resource_name` and `package/resource_name`
if (parts === 0 ||
(parts === 1 && !resource.startsWith('/'))) {
return { namespace: defaultNamespace(), id: resource }
}
// checking for `/namespace/resource_name` and `namespace/package/resource_name`
if (parts === 2) {
if (resource.startsWith('/')) {
return { namespace: names[1], id: names[2] }
} else {
return { namespace: names[0], id: `${names[1]}/${names[2]}` }
}
}
// checking for `/namespace/package/resource_name`
if (parts === 3 && resource.startsWith('/')) {
return { namespace: names[1], id: `${names[2]}/${names[3]}` }
}
throw new Error(messages.INVALID_RESOURCE_ERROR)
}
const parseNamespace = id => parseIdAndNs(id).namespace
const parseId = id => parseIdAndNs(id).id
module.exports = {
defaultNamespace: defaultNamespace,
parseNamespace: parseNamespace,
parseId: parseId
}