@kui-shell/core
Version:
An Electron-based shell for cloud-native development
82 lines (81 loc) • 2.53 kB
JavaScript
;
Object.defineProperty(exports, "__esModule", {
value: true
});
exports.Context = void 0;
exports.getCurrentContext = getCurrentContext;
exports.setDefaultCommandContext = void 0;
/*
* Copyright 2017 The Kubernetes Authors
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
function defaultFromClient() {
try {
return require('@kui-shell/client/config.d/exec.json').defaultContext;
} catch (err) {
console.log('could not find client config');
}
}
/**
* Parse a serialized command context
*
*/
function parseCommandContext(str) {
if (str) {
try {
// let's assume str is of the form '["a", "b"]'
return JSON.parse(str);
} catch (err1) {
// ok, that didn't work; let's see if it's of the form '/a/b'
try {
return str.split('/').filter(_ => _);
} catch (err2) {
console.error(`Could not parse command context ${str}`, err1, err2);
}
}
}
return undefined;
}
/**
* The default command execution context. For example, if the
* execution context is /foo/bar, and there is a command /foo/bar/baz,
* then the issuance of a command "baz" will resolve to /foo/bar/baz.
*
* The default can be overridden either by changing the next line, or
* by calling `setDefaultCommandContext`.
*
*/
let _defaultContext = parseCommandContext(process.env.KUI_COMMAND_CONTEXT) || defaultFromClient() || [];
/**
* The command context model, defaulting to the _defaultContext, which
* can be overridden via `setDefaultCommandContext`.
*
*/
const Context = {
current: _defaultContext
};
/**
* When commands are executed, the command resolver will use a
* fallback prefix. This routine tries to discover, from the
* environment, what the default fallback prefix should be.
*
*/
exports.Context = Context;
const setDefaultCommandContext = commandContext => {
Context.current = _defaultContext = commandContext;
};
exports.setDefaultCommandContext = setDefaultCommandContext;
function getCurrentContext() {
return Context.current;
}