UNPKG

@knapsack/app

Version:

Build Design Systems with Knapsack

160 lines 5.8 kB
"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); exports.bootstrap = bootstrap; exports.bootstrapFromConfig = bootstrapFromConfig; exports.bootstrapFromConfigFile = bootstrapFromConfigFile; exports.findConfigAndBootstrap = findConfigAndBootstrap; exports.bootstrapForCli = bootstrapForCli; exports.getBrain = getBrain; const file_utils_1 = require("@knapsack/file-utils"); const zod_1 = require("zod"); const server_utils_1 = require("../server/server-utils"); const config_1 = require("./config"); const log_1 = require("../cli/log"); const patterns_1 = require("../domains/patterns/patterns"); const navs_1 = require("../domains/navs/navs"); const custom_pages_1 = require("../domains/blocks/custom-pages"); const design_tokens_1 = require("../domains/design-tokens/design-tokens"); const asset_sets_1 = require("../domains/patterns/asset-sets"); const app__server_1 = require("./plugins/app--server"); const files_1 = require("../domains/files/files"); const db_1 = require("../db"); let isReady = false; let brain = { patterns: null, customPages: null, tokens: null, assetSets: null, navs: null, config: null, files: null, db: null, }; /** * Take config and then start up the whole system! */ function bootstrap(config, /** * path that config file paths are relative from */ configPathBase = process.cwd()) { (0, log_1.updateLogMetadata)({ knapsackMeta: { siteId: config.cloud?.siteId, appClientVersion: (0, file_utils_1.findUpPkgJson)(__dirname).pkg?.version, }, }); config.templateRenderers.forEach((renderer) => renderer.setConfig({ dataDir: config.data, userConfigDir: configPathBase, })); const db = new db_1.Db(config); const assetSets = new asset_sets_1.AssetSets({ dataDir: config.data, publicDir: config.public, }); const patterns = new patterns_1.Patterns({ assetSets, dataDir: config.data, templateRenderers: config.templateRenderers, db, config, }); const customPages = new custom_pages_1.CustomPages({ dataDir: config.data }); const navs = new navs_1.Navs({ dataDir: config.data }); const tokens = new design_tokens_1.DesignTokens({ designTokensConfig: config.designTokens ?? {}, dataDir: config.data, publicDir: config.public, distDir: config.designTokens?.distDir || (0, file_utils_1.join)(config.dist, './tokens'), siteId: config.cloud?.siteId, }); const files = new files_1.Files({ dataDir: config.data }); config.plugins = [...(config.plugins ?? []), (0, app__server_1.configure)()].filter(Boolean); brain = { patterns, customPages, tokens, navs, assetSets, config, files, db, }; log_1.log.verbose('Brain built'); isReady = true; return brain; } function bootstrapFromConfig({ configPathBase, config: userConfig, configFilePath, }) { (0, file_utils_1.assertsIsAbsolutePath)(configPathBase); const config = (0, config_1.processConfig)({ userConfig, configPathBase, configFilePath }); return bootstrap(config, configPathBase); } /** * Take config file path and then start up the whole system! */ function bootstrapFromConfigFile( /** * path to `knapsack.config.js` */ configPath) { (0, server_utils_1.fileExistsOrExit)(configPath); // Resolve to absolute path if not already const absConfigPath = (0, file_utils_1.isAbsolute)(configPath) ? configPath : (0, file_utils_1.join)(process.cwd(), configPath); (0, file_utils_1.assertsIsAbsolutePath)(absConfigPath); try { // eslint-disable-next-line @typescript-eslint/no-var-requires, global-require const userConfig = require(absConfigPath); const configPathBase = (0, file_utils_1.dirname)(absConfigPath); return bootstrapFromConfig({ configPathBase, configFilePath: absConfigPath, config: userConfig, }); } catch (e) { log_1.log.error(`Error loading config file "${(0, file_utils_1.relative)(process.cwd(), absConfigPath)}":`, e instanceof zod_1.z.ZodError ? zod_1.z.prettifyError(e) : e); process.exit(1); } } function findConfigAndBootstrap() { const configPath = file_utils_1.findUp.sync(['knapsack.config.cjs', 'knapsack.config.js'], { cwd: process.cwd(), type: 'file', }); if (!configPath) { throw new Error(`Could not find a knapsack.config.cjs file`); } (0, file_utils_1.assertsIsAbsolutePath)(configPath); return bootstrapFromConfigFile(configPath); } function bootstrapForCli() { // get cli arg `--config` path const configFlagIndex = process.argv.indexOf('--config'); const configDir = configFlagIndex !== -1 ? (0, file_utils_1.join)(process.cwd(), process.argv[configFlagIndex + 1]) : process.cwd(); const configPath = file_utils_1.findUp.sync(['knapsack.config.cjs', 'knapsack.config.js'], { cwd: configDir, type: 'file', }); if (!configPath) { log_1.log.error(`Could not find a knapsack.config.cjs file in current directory or above. If it is located in a subdirectory, you can use the --config flag to specify the path to it.`); process.exit(1); } (0, file_utils_1.assertsIsAbsolutePath)(configPath); return bootstrapFromConfigFile(configPath); } /** * Get the Brain created from a previous bootstrap */ function getBrain() { if (!isReady) { log_1.log.error('Not ready yet! You cannot "getBrain()" before "bootstrap()" or "bootstrapFromConfigFile()" has been run'); process.exit(1); } return brain; } //# sourceMappingURL=bootstrap.js.map