ness
Version:
✪ No-effort static sites deployed to your AWS account.
102 lines • 15.6 kB
JavaScript
;
var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
if (k2 === undefined) k2 = k;
Object.defineProperty(o, k2, { enumerable: true, get: function() { return m[k]; } });
}) : (function(o, m, k, k2) {
if (k2 === undefined) k2 = k;
o[k2] = m[k];
}));
var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
Object.defineProperty(o, "default", { enumerable: true, value: v });
}) : function(o, v) {
o["default"] = v;
});
var __importStar = (this && this.__importStar) || function (mod) {
if (mod && mod.__esModule) return mod;
var result = {};
if (mod != null) for (var k in mod) if (k !== "default" && Object.prototype.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k);
__setModuleDefault(result, mod);
return result;
};
Object.defineProperty(exports, "__esModule", { value: true });
exports.Settings = void 0;
const react_1 = __importStar(require("react"));
const fs = __importStar(require("fs-extra"));
const ink_1 = require("ink");
const Task_1 = require("./Task");
const utils_1 = require("../utils");
const context_1 = require("../context");
const Settings = ({ children }) => {
const context = (0, react_1.useContext)(context_1.NessContext);
const { command, setContext } = context;
const [initialized, setInitialized] = (0, react_1.useState)(false);
const [settings, setSettings] = (0, react_1.useState)({});
const [needsGitIgnore, setNeedsGitIgnore] = (0, react_1.useState)();
const [error, setError] = (0, react_1.useState)();
const gather = async () => {
const isGitIgnored = await (0, utils_1.isIgnoringNessDirectory)();
setNeedsGitIgnore(!isGitIgnored);
const fromFile = await (0, utils_1.getSettingsFromFile)();
const fromArgs = await (0, utils_1.getSettingsFromArgs)(command);
const framework = await (0, utils_1.detectFramework)();
const domain = (fromArgs === null || fromArgs === void 0 ? void 0 : fromArgs.domain) || (fromFile === null || fromFile === void 0 ? void 0 : fromFile.domain);
const dir = (fromArgs === null || fromArgs === void 0 ? void 0 : fromArgs.dir) || (fromFile === null || fromFile === void 0 ? void 0 : fromFile.dir) || (framework === null || framework === void 0 ? void 0 : framework.dist);
const merged = {
prod: (fromArgs === null || fromArgs === void 0 ? void 0 : fromArgs.prod) !== undefined
? fromArgs === null || fromArgs === void 0 ? void 0 : fromArgs.prod
: (fromFile === null || fromFile === void 0 ? void 0 : fromFile.prod) !== undefined
? fromFile === null || fromFile === void 0 ? void 0 : fromFile.prod
: undefined,
redirectWww: (fromArgs === null || fromArgs === void 0 ? void 0 : fromArgs.redirectWww) !== undefined
? fromArgs === null || fromArgs === void 0 ? void 0 : fromArgs.redirectWww
: (fromFile === null || fromFile === void 0 ? void 0 : fromFile.redirectWww) !== undefined
? fromFile === null || fromFile === void 0 ? void 0 : fromFile.redirectWww
: undefined,
spa: (fromArgs === null || fromArgs === void 0 ? void 0 : fromArgs.spa) !== undefined
? fromArgs === null || fromArgs === void 0 ? void 0 : fromArgs.spa
: (fromFile === null || fromFile === void 0 ? void 0 : fromFile.spa) !== undefined
? fromFile === null || fromFile === void 0 ? void 0 : fromFile.spa
: undefined,
dir,
domain,
csp: (fromArgs === null || fromArgs === void 0 ? void 0 : fromArgs.csp) || (fromFile === null || fromFile === void 0 ? void 0 : fromFile.csp),
indexDocument: (fromArgs === null || fromArgs === void 0 ? void 0 : fromArgs.indexDocument) || (fromFile === null || fromFile === void 0 ? void 0 : fromFile.indexDocument),
errorDocument: (fromArgs === null || fromArgs === void 0 ? void 0 : fromArgs.errorDocument) || (fromFile === null || fromFile === void 0 ? void 0 : fromFile.errorDocument),
verbose: fromArgs === null || fromArgs === void 0 ? void 0 : fromArgs.verbose,
};
if (!dir) {
setError('Unable to detect framework and no publish directory was specified.\nPlease specify a directory to publish with --dir (e.g., ness deploy --dir dist).');
return Task_1.TaskState.Failure;
}
const dirExists = await fs.pathExists(dir);
if (!dirExists) {
setError(`Publish directory (${dir}) doesn't exist. Did you forget to build your project?`);
return Task_1.TaskState.Failure;
}
setSettings(merged);
if (setContext) {
setContext({
...context,
settings: merged,
framework,
});
}
await (0, utils_1.saveSettings)(merged);
return Task_1.TaskState.Success;
};
const updateGitIgnore = async () => {
const updated = await (0, utils_1.gitIgnoreNessDirectory)();
return updated ? Task_1.TaskState.Success : Task_1.TaskState.Skipped;
};
const onLoadComplete = (state) => {
setInitialized(state === Task_1.TaskState.Success);
};
return (react_1.default.createElement(ink_1.Box, { flexDirection: 'column' },
react_1.default.createElement(Task_1.Task, { name: 'Initializing', action: gather, onComplete: onLoadComplete, persist: false }),
needsGitIgnore && (react_1.default.createElement(Task_1.Task, { name: 'Updating .gitignore to ignore .ness directory', action: updateGitIgnore })),
error && (react_1.default.createElement(ink_1.Box, { paddingTop: 1 },
react_1.default.createElement(ink_1.Text, { color: 'red' }, error))),
initialized && settings && children));
};
exports.Settings = Settings;
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiU2V0dGluZ3MuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9zcmMvY29tcG9uZW50cy9TZXR0aW5ncy50c3giXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztBQUFBLCtDQUFpRDtBQUNqRCw2Q0FBOEI7QUFDOUIsNkJBQTZCO0FBQzdCLGlDQUFzQztBQUV0QyxvQ0FRaUI7QUFDakIsd0NBQXNDO0FBRS9CLE1BQU0sUUFBUSxHQUE0QixDQUFDLEVBQUMsUUFBUSxFQUErQixFQUFFLEVBQUU7SUFDNUYsTUFBTSxPQUFPLEdBQUcsSUFBQSxrQkFBVSxFQUFDLHFCQUFXLENBQUMsQ0FBQTtJQUN2QyxNQUFNLEVBQUMsT0FBTyxFQUFFLFVBQVUsRUFBQyxHQUFHLE9BQU8sQ0FBQTtJQUNyQyxNQUFNLENBQUMsV0FBVyxFQUFFLGNBQWMsQ0FBQyxHQUFHLElBQUEsZ0JBQVEsRUFBQyxLQUFLLENBQUMsQ0FBQTtJQUNyRCxNQUFNLENBQUMsUUFBUSxFQUFFLFdBQVcsQ0FBQyxHQUFHLElBQUEsZ0JBQVEsRUFBZSxFQUFFLENBQUMsQ0FBQTtJQUMxRCxNQUFNLENBQUMsY0FBYyxFQUFFLGlCQUFpQixDQUFDLEdBQUcsSUFBQSxnQkFBUSxHQUFXLENBQUE7SUFFL0QsTUFBTSxDQUFDLEtBQUssRUFBRSxRQUFRLENBQUMsR0FBRyxJQUFBLGdCQUFRLEdBQVUsQ0FBQTtJQUU1QyxNQUFNLE1BQU0sR0FBRyxLQUFLLElBQXdCLEVBQUU7UUFDNUMsTUFBTSxZQUFZLEdBQUcsTUFBTSxJQUFBLCtCQUF1QixHQUFFLENBQUE7UUFDcEQsaUJBQWlCLENBQUMsQ0FBQyxZQUFZLENBQUMsQ0FBQTtRQUVoQyxNQUFNLFFBQVEsR0FBRyxNQUFNLElBQUEsMkJBQW1CLEdBQUUsQ0FBQTtRQUM1QyxNQUFNLFFBQVEsR0FBRyxNQUFNLElBQUEsMkJBQW1CLEVBQUMsT0FBUSxDQUFDLENBQUE7UUFDcEQsTUFBTSxTQUFTLEdBQUcsTUFB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QiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCBSZWFjdCwge3VzZVN0YXRlLCB1c2VDb250ZXh0fSBmcm9tICdyZWFjdCdcbmltcG9ydCAqIGFzIGZzIGZyb20gJ2ZzLWV4dHJhJ1xuaW1wb3J0IHtCb3gsIFRleHR9IGZyb20gJ2luaydcbmltcG9ydCB7VGFza1N0YXRlLCBUYXNrfSBmcm9tICcuL1Rhc2snXG5cbmltcG9ydCB7XG4gIGRldGVjdEZyYW1ld29yayxcbiAgZ2V0U2V0dGluZ3NGcm9tQXJncyxcbiAgZ2V0U2V0dGluZ3NGcm9tRmlsZSxcbiAgZ2l0SWdub3JlTmVzc0RpcmVjdG9yeSxcbiAgaXNJZ25vcmluZ05lc3NEaXJlY3RvcnksXG4gIE5lc3NTZXR0aW5ncyxcbiAgc2F2ZVNldHRpbmdzLFxufSBmcm9tICcuLi91dGlscydcbmltcG9ydCB7TmVzc0NvbnRleHR9IGZyb20gJy4uL2NvbnRleHQnXG5cbmV4cG9ydCBjb25zdCBTZXR0aW5nczogUmVhY3QuRnVuY3Rpb25Db21wb25lbnQgPSAoe2NoaWxkcmVufTogUmVhY3QuUHJvcHNXaXRoQ2hpbGRyZW48YW55PikgPT4ge1xuICBjb25zdCBjb250ZXh0ID0gdXNlQ29udGV4dChOZXNzQ29udGV4dClcbiAgY29uc3Qge2NvbW1hbmQsIHNldENvbnRleHR9ID0gY29udGV4dFxuICBjb25zdCBbaW5pdGlhbGl6ZWQsIHNldEluaXRpYWxpemVkXSA9IHVzZVN0YXRlKGZhbHNlKVxuICBjb25zdCBbc2V0dGluZ3MsIHNldFNldHRpbmdzXSA9IHVzZVN0YXRlPE5lc3NTZXR0aW5ncz4oe30pXG4gIGNvbnN0IFtuZWVkc0dpdElnbm9yZSwgc2V0TmVlZHNHaXRJZ25vcmVdID0gdXNlU3RhdGU8Ym9vbGVhbj4oKVxuXG4gIGNvbnN0IFtlcnJvciwgc2V0RXJyb3JdID0gdXNlU3RhdGU8c3RyaW5nPigpXG5cbiAgY29uc3QgZ2F0aGVyID0gYXN5bmMgKCk6IFByb21pc2U8VGFza1N0YXRlPiA9PiB7XG4gICAgY29uc3QgaXNHaXRJZ25vcmVkID0gYXdhaXQgaXNJZ25vcmluZ05lc3NEaXJlY3RvcnkoKVxuICAgIHNldE5lZWRzR2l0SWdub3JlKCFpc0dpdElnbm9yZWQpXG5cbiAgICBjb25zdCBmcm9tRmlsZSA9IGF3YWl0IGdldFNldHRpbmdzRnJvbUZpbGUoKVxuICAgIGNvbnN0IGZyb21BcmdzID0gYXdhaXQgZ2V0U2V0dGluZ3NGcm9tQXJncyhjb21tYW5kISlcbiAgICBjb25zdCBmcmFtZXdvcmsgPSBhd2FpdCBkZXRlY3RGcmFtZXdvcmsoKVxuXG4gICAgY29uc3QgZG9tYWluID0gZnJvbUFyZ3M/LmRvbWFpbiB8fCBmcm9tRmlsZT8uZG9tYWluXG4gICAgY29uc3QgZGlyID0gZnJvbUFyZ3M/LmRpciB8fCBmcm9tRmlsZT8uZGlyIHx8IGZyYW1ld29yaz8uZGlzdFxuXG4gICAgY29uc3QgbWVyZ2VkID0ge1xuICAgICAgcHJvZDpcbiAgICAgICAgZnJvbUFyZ3M/LnByb2QgIT09IHVuZGVmaW5lZFxuICAgICAgICAgID8gZnJvbUFyZ3M/LnByb2RcbiAgICAgICAgICA6IGZyb21GaWxlPy5wcm9kICE9PSB1bmRlZmluZWRcbiAgICAgICAgICA/IGZyb21GaWxlPy5wcm9kXG4gICAgICAgICAgOiB1bmRlZmluZWQsXG4gICAgICByZWRpcmVjdFd3dzpcbiAgICAgICAgZnJvbUFyZ3M/LnJlZGlyZWN0V3d3ICE9PSB1bmRlZmluZWRcbiAgICAgICAgICA/IGZyb21BcmdzPy5yZWRpcmVjdFd3d1xuICAgICAgICAgIDogZnJvbUZpbGU/LnJlZGlyZWN0V3d3ICE9PSB1bmRlZmluZWRcbiAgICAgICAgICA/IGZyb21GaWxlPy5yZWRpcmVjdFd3d1xuICAgICAgICAgIDogdW5kZWZpbmVkLFxuICAgICAgc3BhOlxuICAgICAgICBmcm9tQXJncz8uc3BhICE9PSB1bmRlZmluZWRcbiAgICAgICAgICA/IGZyb21BcmdzPy5zcGFcbiAgICAgICAgICA6IGZyb21GaWxlPy5zcGEgIT09IHVuZGVmaW5lZFxuICAgICAgICAgID8gZnJvbUZpbGU/LnNwYVxuICAgICAgICAgIDogdW5kZWZpbmVkLFxuICAgICAgZGlyLFxuICAgICAgZG9tYWluLFxuICAgICAgY3NwOiBmcm9tQXJncz8uY3NwIHx8IGZyb21GaWxlPy5jc3AsXG4gICAgICBpbmRleERvY3VtZW50OiBmcm9tQXJncz8uaW5kZXhEb2N1bWVudCB8fCBmcm9tRmlsZT8uaW5kZXhEb2N1bWVudCxcbiAgICAgIGVycm9yRG9jdW1lbnQ6IGZyb21BcmdzPy5lcnJvckRvY3VtZW50IHx8IGZyb21GaWxlPy5lcnJvckRvY3VtZW50LFxuICAgICAgdmVyYm9zZTogZnJvbUFyZ3M/LnZlcmJvc2UsXG4gICAgfVxuXG4gICAgaWYgKCFkaXIpIHtcbiAgICAgIHNldEVycm9yKFxuICAgICAgICAnVW5hYmxlIHRvIGRldGVjdCBmcmFtZXdvcmsgYW5kIG5vIHB1Ymxpc2ggZGlyZWN0b3J5IHdhcyBzcGVjaWZpZWQuXFxuUGxlYXNlIHNwZWNpZnkgYSBkaXJlY3RvcnkgdG8gcHVibGlzaCB3aXRoIC0tZGlyIChlLmcuLCBuZXNzIGRlcGxveSAtLWRpciBkaXN0KS4nLFxuICAgICAgKVxuICAgICAgcmV0dXJuIFRhc2tTdGF0ZS5GYWlsdXJlXG4gICAgfVxuXG4gICAgY29uc3QgZGlyRXhpc3RzID0gYXdhaXQgZnMucGF0aEV4aXN0cyhkaXIpXG4gICAgaWYgKCFkaXJFeGlzdHMpIHtcbiAgICAgIHNldEVycm9yKGBQdWJsaXNoIGRpcmVjdG9yeSAoJHtkaXJ9KSBkb2Vzbid0IGV4aXN0LiBEaWQgeW91IGZvcmdldCB0byBidWlsZCB5b3VyIHByb2plY3Q/YClcbiAgICAgIHJldHVybiBUYXNrU3RhdGUuRmFpbHVyZVxuICAgIH1cblxuICAgIHNldFNldHRpbmdzKG1lcmdlZClcblxuICAgIGlmIChzZXRDb250ZXh0KSB7XG4gICAgICBzZXRDb250ZXh0KHtcbiAgICAgICAgLi4uY29udGV4dCxcbiAgICAgICAgc2V0dGluZ3M6IG1lcmdlZCxcbiAgICAgICAgZnJhbWV3b3JrLFxuICAgICAgfSlcbiAgICB9XG5cbiAgICBhd2FpdCBzYXZlU2V0dGluZ3MobWVyZ2VkKVxuXG4gICAgcmV0dXJuIFRhc2tTdGF0ZS5TdWNjZXNzXG4gIH1cblxuICBjb25zdCB1cGRhdGVHaXRJZ25vcmU6ICgpID0+IFByb21pc2U8VGFza1N0YXRlPiA9IGFzeW5jICgpID0+IHtcbiAgICBjb25zdCB1cGRhdGVkID0gYXdhaXQgZ2l0SWdub3JlTmVzc0RpcmVjdG9yeSgpXG4gICAgcmV0dXJuIHVwZGF0ZWQgPyBUYXNrU3RhdGUuU3VjY2VzcyA6IFRhc2tTdGF0ZS5Ta2lwcGVkXG4gIH1cblxuICBjb25zdCBvbkxvYWRDb21wbGV0ZSA9IChzdGF0ZTogVGFza1N0YXRlKSA9PiB7XG4gICAgc2V0SW5pdGlhbGl6ZWQoc3RhdGUgPT09IFRhc2tTdGF0ZS5TdWNjZXNzKVxuICB9XG5cbiAgcmV0dXJuIChcbiAgICA8Qm94IGZsZXhEaXJlY3Rpb249J2NvbHVtbic+XG4gICAgICA8VGFzayBuYW1lPSdJbml0aWFsaXppbmcnIGFjdGlvbj17Z2F0aGVyfSBvbkNvbXBsZXRlPXtvbkxvYWRDb21wbGV0ZX0gcGVyc2lzdD17ZmFsc2V9IC8+XG4gICAgICB7bmVlZHNHaXRJZ25vcmUgJiYgKFxuICAgICAgICA8VGFzayBuYW1lPSdVcGRhdGluZyAuZ2l0aWdub3JlIHRvIGlnbm9yZSAubmVzcyBkaXJlY3RvcnknIGFjdGlvbj17dXBkYXRlR2l0SWdub3JlfSAvPlxuICAgICAgKX1cbiAgICAgIHtlcnJvciAmJiAoXG4gICAgICAgIDxCb3ggcGFkZGluZ1RvcD17MX0+XG4gICAgICAgICAgPFRleHQgY29sb3I9J3JlZCc+e2Vycm9yfTwvVGV4dD5cbiAgICAgICAgPC9Cb3g+XG4gICAgICApfVxuICAgICAge2luaXRpYWxpemVkICYmIHNldHRpbmdzICYmIGNoaWxkcmVufVxuICAgIDwvQm94PlxuICApXG59XG4iXX0=