UNPKG

@shopify/cli-kit

Version:

A set of utilities, interfaces, and models that are common across all the platform features

68 lines 2.16 kB
import fs from 'node:fs'; import * as ni from 'network-interfaces'; import { assertConnectable, getIpFromHosts } from './network/index.js'; import { assertCompatibleEnvironment } from './env.js'; const NON_SHOP_PREFIXES = ['app', 'dev', 'shopify']; const BACKEND_PORT = 8080; export function createServer(projectName) { return { host: (options = {}) => host(projectName, options), url: (options = {}) => url(projectName, options), }; } function host(projectName, options = {}) { assertCompatibleEnvironment(); (assertRunningOverride || assertRunning2024)(projectName); const prefix = (options.nonstandardHostPrefix || projectName).replace(/_/g, '-'); if (projectName === 'shopify') { if (prefix.endsWith('-dev-api')) { const shopName = prefix.replace('-dev-api', ''); return `${shopName}.dev-api.shop.dev`; } if (!NON_SHOP_PREFIXES.includes(prefix)) { return `${prefix}.my.shop.dev`; } } return `${prefix}.shop.dev`; } function url(projectName, options = {}) { return `https://${host(projectName, options)}`; } function assertRunning2024(projectName) { assertConnectable({ projectName, addr: getBackendIp(projectName), port: BACKEND_PORT, }); } function getBackendIp(projectName) { try { const backendIp = resolveBackendHost(projectName); ni.fromIp(backendIp, { internal: true, ipVersion: 4 }); return backendIp; } catch (error) { throw new Error(`DevServer for '${projectName}' is not running: \`dev up ${projectName}\` to start it.`); } } function resolveBackendHost(name) { let host; try { host = fs.readlinkSync(`/opt/nginx/etc/manifest/${name}/current`); } catch (error) { host = `${name}.root.shopify.dev.internal`; } try { return getIpFromHosts(host); } catch { return host; } } // Allow overrides for more concise test setup. Meh. let assertRunningOverride; export function setAssertRunning(override) { assertRunningOverride = override; } //# sourceMappingURL=dev-server-2024.js.map