@struktoai/mirage-core
Version:
A Unified Virtual Filesystem For AI Agents
55 lines • 2.22 kB
JavaScript
// ========= Copyright 2026 @ Strukto.AI All Rights Reserved. =========
// 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.
// ========= Copyright 2026 @ Strukto.AI All Rights Reserved. =========
import { SET_FLAG_TO_OPTION } from "./constants.js";
/**
* Read one option word, or null when the word is an operand.
*
* This is bash's `set` grammar, which shell startup speaks too: a sign,
* then either `o` naming an option in the next word or a cluster of
* single-letter options, where `-` turns them on and `+` turns them off.
* `bash -x file` and `set -x` therefore cannot disagree about what `-x`
* means, and an option one of them learns the other gets.
*
* `-`, `--` and a `--long` word are not option words. The first two end
* option parsing and the third belongs to whoever declares long options,
* so both are the caller's to answer.
*/
export function parseOptionWord(word, next) {
const sign = word.charAt(0);
if (word.length < 2 || (sign !== '-' && sign !== '+') || word.startsWith('--'))
return null;
const enable = sign === '-';
const settings = [];
let other = '';
let consumed = 1;
const chars = word.slice(1);
for (let i = 0; i < chars.length; i++) {
const char = chars.charAt(i);
if (char === 'o') {
if (next !== null) {
settings.push([next, enable]);
consumed = 2;
}
continue;
}
const option = SET_FLAG_TO_OPTION[char];
if (option === undefined) {
other += char;
continue;
}
settings.push([option, enable]);
}
return { settings, other, consumed };
}
//# sourceMappingURL=options.js.map