export function findConfigurationPath(suppliedConfigFilePath: string, inputFilePath: string) { if (suppliedConfigFilePath != null) { if (!fs.existsSync(suppliedConfigFilePath)) { throw new Error(`Could not find config file at: ${path.resolve(suppliedConfigFilePath)}`); } else { return path.resolve(suppliedConfigFilePath); } } else { // search for tslint.json from input file location let configFilePath = findup(CONFIG_FILENAME, { cwd: inputFilePath, nocase: true }); if (configFilePath != null && fs.existsSync(configFilePath)) { return path.resolve(configFilePath); } // search for package.json with tslintConfig property configFilePath = findup("package.json", { cwd: inputFilePath, nocase: true }); if (configFilePath != null && require(configFilePath).tslintConfig != null) { return path.resolve(configFilePath); } // search for tslint.json in home directory const homeDir = getHomeDir(); if (homeDir != null) { configFilePath = path.join(homeDir, CONFIG_FILENAME); if (fs.existsSync(configFilePath)) { return path.resolve(configFilePath); } } // no path could be found return undefined; } }
return function importer(url: string, prev: string) { const nodeSassOptions = this.options; // Create a context for the current importer run. // An importer run is different from an importer instance, // one importer instance can spawn infinite importer runs. if (!this.nodeSassOnceImporterContext) { this.nodeSassOnceImporterContext = { store: new Set() }; } // Each importer run has it's own new store, otherwise // files already imported in a previous importer run // would be detected as multiple imports of the same file. const store = this.nodeSassOnceImporterContext.store; const includePaths = buildIncludePaths( nodeSassOptions.includePaths, prev, ); let data = null; let filterPrefix: string = ``; let filteredContents: string|null = null; let cleanedUrl = cleanImportUrl(url); let resolvedUrl: string|null = null; const isPackageUrl = cleanedUrl.match(matchPackageUrl); if (isPackageUrl) { cleanedUrl = cleanedUrl.replace(matchPackageUrl, ``); const packageName = cleanedUrl.charAt(0) === `@` ? cleanedUrl.split(DIRECTORY_SEPARATOR).slice(0, 2).join(DIRECTORY_SEPARATOR) : cleanedUrl.split(DIRECTORY_SEPARATOR)[0]; const normalizedPackageName = path.normalize(packageName); const packageSearchPath = path.join('node_modules', normalizedPackageName, `package.json`); const packagePath = path.dirname(findupSync(packageSearchPath, { cwd: options.cwd })); const escapedNormalizedPackageName = normalizedPackageName.replace(`\\`, `\\\\`); cleanedUrl = path.resolve( packagePath.replace(new RegExp(`${escapedNormalizedPackageName}$`), ``), path.normalize(cleanedUrl), ); resolvedUrl = resolvePackageUrl( cleanedUrl, options.extensions, options.cwd, options.packageKeys, ); if (resolvedUrl) { data = { file: resolvedUrl.replace(/\.css$/, ``) }; } } else { resolvedUrl = resolveUrl(cleanedUrl, includePaths); } const nodeFilters = parseNodeFilters(url); const selectorFilters = parseSelectorFilters(url); const hasFilters = nodeFilters.length || selectorFilters.length; const globFilePaths = resolveGlobUrl(cleanedUrl, includePaths); const storeId = getStoreId(resolvedUrl, selectorFilters, nodeFilters); if (hasFilters) { filterPrefix = `${url.split(` from `)[0]} from `; } if (globFilePaths) { const contents = globFilePaths .filter((x) => !store.has(getStoreId(x, selectorFilters, nodeFilters))) .map((x) => `@import '${filterPrefix}${x}';`) .join(`\n`); return { contents }; } if (store.has(storeId)) { return EMPTY_IMPORT; } if (resolvedUrl && hasFilters) { filteredContents = fs.readFileSync(resolvedUrl, { encoding: `utf8` }); if (selectorFilters.length) { filteredContents = cssSelectorExtract.processSync({ css: filteredContents, filters: selectorFilters, postcssSyntax, preserveLines: true, }); } if (nodeFilters.length) { filteredContents = cssNodeExtract.processSync({ css: filteredContents, filters: nodeFilters, customFilters: options.customFilters, postcssSyntax, preserveLines: true, }); } } if (!options.disableImportOnce) { store.add(storeId); } if (filteredContents) { data = { file: resolvedUrl, contents: filteredContents, }; } return data; };
'use strict'; import * as os from 'os'; import * as path from 'path'; import * as opt from 'optimist'; import * as Promise from 'bluebird'; import * as findup from 'findup-sync'; import * as util from './util/util'; import TestRunner from './test/TestRunner'; Promise.longStackTraces(); let testerPkgPath = path.resolve(findup('package.json', { cwd: process.cwd() })); let optimist = opt(process.argv); optimist.boolean('single-thread'); optimist.boolean('changes'); optimist.default('changes', false); optimist.boolean('dry'); optimist.default('dry', false); optimist.boolean('headers'); optimist.default('headers', true); optimist.boolean('tests'); optimist.default('tests', true);