feat(resolve-config): add `.sync()` method (#2722)
* feat(resolve-config): add `sync` option * docs(readme): add `sync` option * fix(clearCache): always clear both * chore(deps): switch to 3.0 branch * feat: replace `sync` option with `.sync()` * docs(readme): update `.sync()`master
parent
2fd77e7718
commit
088aa71b07
|
@ -447,6 +447,8 @@ prettier.resolveConfig(filePath).then(options => {
|
|||
})
|
||||
```
|
||||
|
||||
Use `prettier.resolveConfig.sync([filePath [, options]])` if you'd like to use sync version.
|
||||
|
||||
#### `prettier.clearConfigCache()`
|
||||
|
||||
As you repeatedly call `resolveConfig`, the file system structure will be cached for performance.
|
||||
|
|
|
@ -14,7 +14,7 @@
|
|||
"babel-code-frame": "7.0.0-alpha.12",
|
||||
"babylon": "7.0.0-beta.22",
|
||||
"chalk": "2.0.1",
|
||||
"cosmiconfig": "2.2.2",
|
||||
"cosmiconfig": "davidtheclark/cosmiconfig#3.0",
|
||||
"dashify": "0.2.2",
|
||||
"diff": "3.2.0",
|
||||
"esutils": "2.0.2",
|
||||
|
@ -72,4 +72,4 @@
|
|||
"build": "node ./scripts/build/build.js",
|
||||
"toc": "node ./scripts/table-of-contents.js"
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
|
@ -3,34 +3,42 @@
|
|||
const cosmiconfig = require("cosmiconfig");
|
||||
const minimatch = require("minimatch");
|
||||
|
||||
const withCache = cosmiconfig("prettier");
|
||||
const noCache = cosmiconfig("prettier", { cache: false });
|
||||
const asyncWithCache = cosmiconfig("prettier");
|
||||
const asyncNoCache = cosmiconfig("prettier", { cache: false });
|
||||
const syncWithCache = cosmiconfig("prettier", { sync: true });
|
||||
const syncNoCache = cosmiconfig("prettier", { cache: false, sync: true });
|
||||
|
||||
function resolveConfig(filePath, opts) {
|
||||
const useCache = !(opts && opts.useCache === false);
|
||||
|
||||
return (useCache ? withCache : noCache).load(filePath).then(result => {
|
||||
if (!result) {
|
||||
return null;
|
||||
}
|
||||
|
||||
return mergeOverrides(result.config, filePath);
|
||||
});
|
||||
return (useCache ? asyncWithCache : asyncNoCache)
|
||||
.load(filePath)
|
||||
.then(result => {
|
||||
return !result ? null : mergeOverrides(result.config, filePath);
|
||||
});
|
||||
}
|
||||
|
||||
resolveConfig.sync = (filePath, opts) => {
|
||||
const useCache = !(opts && opts.useCache === false);
|
||||
const result = (useCache ? syncWithCache : syncNoCache).load(filePath);
|
||||
return !result ? null : mergeOverrides(result.config, filePath);
|
||||
};
|
||||
|
||||
function clearCache() {
|
||||
withCache.clearCaches();
|
||||
syncWithCache.clearCaches();
|
||||
asyncWithCache.clearCaches();
|
||||
}
|
||||
|
||||
function resolveConfigFile(filePath) {
|
||||
return noCache.load(filePath).then(result => {
|
||||
if (result) {
|
||||
return result.filepath;
|
||||
}
|
||||
return null;
|
||||
return asyncNoCache.load(filePath).then(result => {
|
||||
return result ? result.filepath : null;
|
||||
});
|
||||
}
|
||||
|
||||
resolveConfigFile.sync = filePath => {
|
||||
const result = syncNoCache.load(filePath);
|
||||
return result ? result.filepath : null;
|
||||
};
|
||||
|
||||
function mergeOverrides(config, filePath) {
|
||||
const options = Object.assign({}, config);
|
||||
if (filePath && options.overrides) {
|
||||
|
|
|
@ -54,6 +54,10 @@ test("API resolveConfig with no args", () => {
|
|||
});
|
||||
});
|
||||
|
||||
test("API resolveConfig.sync with no args", () => {
|
||||
expect(prettier.resolveConfig.sync()).toBeNull();
|
||||
});
|
||||
|
||||
test("API resolveConfig with file arg", () => {
|
||||
const file = path.resolve(path.join(__dirname, "../cli/config/js/file.js"));
|
||||
return prettier.resolveConfig(file).then(result => {
|
||||
|
@ -63,6 +67,13 @@ test("API resolveConfig with file arg", () => {
|
|||
});
|
||||
});
|
||||
|
||||
test("API resolveConfig.sync with file arg", () => {
|
||||
const file = path.resolve(path.join(__dirname, "../cli/config/js/file.js"));
|
||||
expect(prettier.resolveConfig.sync(file)).toMatchObject({
|
||||
tabWidth: 8
|
||||
});
|
||||
});
|
||||
|
||||
test("API resolveConfig with file arg and extension override", () => {
|
||||
const file = path.resolve(
|
||||
path.join(__dirname, "../cli/config/no-config/file.ts")
|
||||
|
@ -73,3 +84,12 @@ test("API resolveConfig with file arg and extension override", () => {
|
|||
});
|
||||
});
|
||||
});
|
||||
|
||||
test("API resolveConfig.sync with file arg and extension override", () => {
|
||||
const file = path.resolve(
|
||||
path.join(__dirname, "../cli/config/no-config/file.ts")
|
||||
);
|
||||
expect(prettier.resolveConfig.sync(file)).toMatchObject({
|
||||
semi: true
|
||||
});
|
||||
});
|
||||
|
|
17
yarn.lock
17
yarn.lock
|
@ -1045,16 +1045,17 @@ core-util-is@~1.0.0:
|
|||
version "1.0.2"
|
||||
resolved "https://registry.yarnpkg.com/core-util-is/-/core-util-is-1.0.2.tgz#b5fd54220aa2bc5ab57aab7140c940754503c1a7"
|
||||
|
||||
cosmiconfig@2.2.2:
|
||||
cosmiconfig@davidtheclark/cosmiconfig#3.0:
|
||||
version "2.2.2"
|
||||
resolved "https://registry.yarnpkg.com/cosmiconfig/-/cosmiconfig-2.2.2.tgz#6173cebd56fac042c1f4390edf7af6c07c7cb892"
|
||||
resolved "https://codeload.github.com/davidtheclark/cosmiconfig/tar.gz/12239b263684a7268883eccb30714446e105ff95"
|
||||
dependencies:
|
||||
is-directory "^0.3.1"
|
||||
js-yaml "^3.4.3"
|
||||
is-promise "^2.1.0"
|
||||
js-yaml "^3.9.0"
|
||||
minimist "^1.2.0"
|
||||
object-assign "^4.1.0"
|
||||
os-homedir "^1.0.1"
|
||||
parse-json "^2.2.0"
|
||||
please-upgrade-node "^3.0.1"
|
||||
require-from-string "^1.1.0"
|
||||
|
||||
create-ecdh@^4.0.0:
|
||||
|
@ -2409,14 +2410,14 @@ js-tokens@^3.0.0:
|
|||
version "3.0.1"
|
||||
resolved "https://registry.yarnpkg.com/js-tokens/-/js-tokens-3.0.1.tgz#08e9f132484a2c45a30907e9dc4d5567b7f114d7"
|
||||
|
||||
js-yaml@^3.4.3, js-yaml@^3.7.0, js-yaml@^3.8.4:
|
||||
js-yaml@^3.7.0, js-yaml@^3.8.4:
|
||||
version "3.8.4"
|
||||
resolved "https://registry.yarnpkg.com/js-yaml/-/js-yaml-3.8.4.tgz#520b4564f86573ba96662af85a8cafa7b4b5a6f6"
|
||||
dependencies:
|
||||
argparse "^1.0.7"
|
||||
esprima "^3.1.1"
|
||||
|
||||
js-yaml@^3.8.1:
|
||||
js-yaml@^3.8.1, js-yaml@^3.9.0:
|
||||
version "3.9.1"
|
||||
resolved "https://registry.yarnpkg.com/js-yaml/-/js-yaml-3.9.1.tgz#08775cebdfdd359209f0d2acd383c8f86a6904a0"
|
||||
dependencies:
|
||||
|
@ -3079,6 +3080,10 @@ pkg-dir@^1.0.0:
|
|||
dependencies:
|
||||
find-up "^1.0.0"
|
||||
|
||||
please-upgrade-node@^3.0.1:
|
||||
version "3.0.1"
|
||||
resolved "https://registry.yarnpkg.com/please-upgrade-node/-/please-upgrade-node-3.0.1.tgz#0a681f2c18915e5433a5ca2cd94e0b8206a782db"
|
||||
|
||||
pluralize@^4.0.0:
|
||||
version "4.0.0"
|
||||
resolved "https://registry.yarnpkg.com/pluralize/-/pluralize-4.0.0.tgz#59b708c1c0190a2f692f1c7618c446b052fd1762"
|
||||
|
|
Loading…
Reference in New Issue