UNPKG

@vis.gl/dev-tools

Version:

Dev tools for vis.gl frameworks

8 lines (7 loc) 11.5 kB
{ "version": 3, "sources": ["../src/index.ts", "../src/helpers/get-ocular-config.ts", "../src/helpers/aliases.ts", "../src/utils/utils.ts"], "sourcesContent": ["export {getOcularConfig} from './helpers/get-ocular-config.js';\n\nexport type {OcularConfig} from './helpers/get-ocular-config.js';\n", "/* @typedef {import('./get-ocular-config')} default */\n\nimport fs from 'fs';\nimport {resolve} from 'path';\nimport getAliases, {getModuleInfo} from './aliases.js';\nimport {shallowMerge, getValidPath, ocularRoot} from '../utils/utils.js';\nimport type {BrowserTestDriver} from '@probe.gl/test-utils';\n\n// TODO - export from probe.gl\ntype BrowserTestOptions = Parameters<BrowserTestDriver['run']>[0];\n\n/** User configuration from .ocularrc.js */\nexport type OcularConfig = {\n root?: string;\n\n aliases?: {[module: string]: string};\n\n nodeAliases?: {[module: string]: string};\n\n bundle?: {\n target?: string[];\n globalName?: string;\n format?: 'cjs' | 'esm' | 'umd' | 'iife';\n externals?: string[];\n globals?: {[pattern: string]: string};\n };\n\n typescript?: {\n project: string;\n };\n\n lint?: {\n paths?: string[];\n extensions?: string[];\n };\n\n vite?: {\n version?: number;\n configPath?: string;\n };\n\n coverage?: {\n test?: 'node' | 'browser';\n };\n\n browserTest?: {\n server?: BrowserTestOptions['server'];\n browser?: BrowserTestOptions['browser'];\n };\n\n entry?: {\n test?: string;\n 'test-browser'?: `${string}.html`;\n bench?: string;\n 'bench-browser'?: `${string}.html`;\n size?: string[] | string;\n };\n};\n\n/** Internal type to typecheck resolved ocular config inside ocular-dev-tools */\nexport type MaterializedOcularConfig = {\n root: string;\n ocularPath: string;\n esm: boolean;\n\n aliases: {[module: string]: string};\n\n bundle: {\n target?: string[];\n globalName?: string;\n format?: 'cjs' | 'esm' | 'umd' | 'iife';\n externals?: string[];\n globals: {[pattern: string]: string};\n };\n\n typescript: {\n project: string;\n };\n\n lint: {\n paths: string[];\n extensions: string[];\n };\n\n vite: {\n version: number;\n configPath: string;\n };\n\n coverage: {\n test: 'node' | 'browser';\n };\n\n browserTest?: {\n server?: BrowserTestOptions['server'];\n browser?: BrowserTestOptions['browser'];\n };\n\n entry: {\n test: string;\n 'test-browser': `${string}.html`;\n bench: string;\n 'bench-browser': `${string}.html`;\n size: string[];\n };\n};\n\nexport async function getOcularConfig(\n options: {\n root?: string;\n aliasMode?: 'src' | 'dist';\n } = {}\n): Promise<MaterializedOcularConfig> {\n const packageRoot = options.root || process.env.PWD!;\n\n const IS_MONOREPO = fs.existsSync(resolve(packageRoot, './modules'));\n\n const userConfig = await getUserConfig(packageRoot);\n\n const config: MaterializedOcularConfig = {\n root: packageRoot,\n ocularPath: ocularRoot,\n\n esm: getModuleInfo(packageRoot)?.packageInfo.type === 'module',\n\n bundle: {\n globals: {}\n },\n\n typescript: {\n project: 'tsconfig.json'\n },\n\n lint: {\n paths: IS_MONOREPO ? ['modules'] : ['src'],\n extensions: ['js', 'mjs', 'jsx', 'ts', 'tsx', 'd.ts']\n },\n\n coverage: {\n test: 'node'\n },\n\n aliases: {},\n\n entry: {\n test: 'test/index.ts',\n 'test-browser': 'test/index.html',\n bench: 'test/bench/index.ts',\n 'bench-browser': 'test/bench/index.html',\n size: ['test/size.ts']\n },\n\n vite: {\n version: 4,\n configPath: getValidPath(\n resolve(packageRoot, './vite.config.js'),\n resolve(packageRoot, './vite.config.cjs'),\n resolve(ocularRoot, 'dist/configuration/vite.config.js')\n )!\n }\n };\n\n shallowMerge(config, userConfig);\n\n // Backward compatibility\n if (typeof userConfig.entry?.size === 'string') {\n userConfig.entry.size = [userConfig.entry.size];\n }\n\n const aliasMode = options.aliasMode || 'src';\n\n // User's aliases need to come first, due to module-alias resolve order\n Object.assign(config.aliases, getAliases(aliasMode, packageRoot));\n\n if (aliasMode && !aliasMode.includes('browser')) {\n Object.assign(config.aliases, userConfig.nodeAliases);\n }\n\n return config;\n}\n\n// HELPERS\n\n/**\n * TODO better error messages\n */\nasync function getUserConfig(packageRoot: string): Promise<OcularConfig> {\n const userConfigPath = getValidPath(\n resolve(packageRoot, './.ocularrc.js'),\n resolve(packageRoot, './.ocularrc.cjs'),\n resolve(packageRoot, './.ocular.config.js'),\n resolve(packageRoot, './.ocular.config.cjs'),\n // deprecated\n resolve(packageRoot, './ocular-dev-tools.config.js')\n );\n\n if (userConfigPath) {\n const userConfigModule = (await import(userConfigPath)) as\n | OcularConfig\n | {default: OcularConfig};\n if ('default' in userConfigModule) {\n return userConfigModule.default;\n }\n return userConfigModule;\n }\n\n throw new Error('No valid user config found');\n}\n", "// Registers an alias for this module\nimport {resolve} from 'path';\nimport fs from 'fs';\nimport {getValidPath} from '../utils/utils.js';\nimport type {PackageJson} from '../utils/types.js';\n\ntype ModuleInfo = {\n name: string;\n path: string;\n packageInfo: PackageJson;\n};\n\nexport function getModuleInfo(path: string): ModuleInfo | null {\n if (fs.lstatSync(path).isDirectory()) {\n try {\n const packageInfoText = fs.readFileSync(resolve(path, 'package.json'), 'utf-8');\n const packageInfo = JSON.parse(packageInfoText) as PackageJson;\n return {\n name: packageInfo.name,\n path,\n packageInfo\n };\n } catch (err) {\n // ignore if sub directory does not contain package.json\n }\n }\n return null;\n}\n\n// Get information of all submodules\nfunction getSubmodules(packageRoot: string): {[name: string]: ModuleInfo} {\n const submodules: Record<string, ModuleInfo> = {};\n const parentPath = resolve(packageRoot, './modules');\n\n if (fs.existsSync(parentPath)) {\n // monorepo\n fs.readdirSync(parentPath).forEach((item) => {\n const itemPath = resolve(parentPath, item);\n const moduleInfo = getModuleInfo(itemPath);\n if (moduleInfo) {\n submodules[moduleInfo.name] = moduleInfo;\n }\n });\n } else {\n const moduleInfo = getModuleInfo(packageRoot);\n if (moduleInfo) {\n submodules[moduleInfo.name] = moduleInfo;\n }\n }\n\n return submodules;\n}\n\nexport default function getAliases(\n mode: 'src' | 'dist',\n packageRoot: string = process.env.PWD!\n): Record<string, string> {\n const aliases: Record<string, string> = {};\n const submodules = getSubmodules(packageRoot);\n\n for (const moduleName in submodules) {\n const {path} = submodules[moduleName];\n\n const testPath = resolve(path, 'test');\n if (fs.existsSync(testPath)) {\n aliases[`${moduleName}/test`] = testPath;\n }\n\n if (mode === 'dist') {\n aliases[moduleName] = getValidPath(\n resolve(path, 'dist/es5'),\n resolve(path, 'dist/esm'),\n resolve(path, 'dist')\n )!;\n } else {\n aliases[moduleName] = resolve(path, 'src');\n }\n }\n\n return aliases;\n}\n", "import fs from 'fs';\nimport {resolve, dirname} from 'path';\nimport {fileURLToPath} from 'node:url';\nimport {execSync} from 'child_process';\n\nexport function execShellCommand(command: string, args: string[] = []) {\n try {\n execSync(`${command} ${args.join(' ')}`, {\n stdio: 'inherit'\n });\n } catch (err: unknown) {\n process.exit((err as any).status);\n }\n}\n\n/** Returns the path to the root directory of ocular-dev-tools */\nexport const ocularRoot: string = (function () {\n let dir;\n try {\n dir = __dirname;\n } catch {\n dir = dirname(fileURLToPath(import.meta.url));\n }\n return resolve(dir, '../..');\n})();\n\nexport function shallowMerge<T>(base: T, override: any): T {\n for (const key in override) {\n if (base[key] && typeof base[key] === 'object') {\n Object.assign(base[key], override[key]);\n } else {\n base[key] = override[key];\n }\n }\n return base;\n}\n\n/** Given a list of paths, return the first one that exists */\nexport function getValidPath(...resolveOrder: string[]): string | null {\n for (const path of resolveOrder) {\n if (fs.existsSync(path)) {\n return path;\n }\n }\n return null;\n}\n"], "mappings": "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", "names": ["import_fs", "import_path", "import_path", "import_fs", "fs", "fs", "fs"] }