mirror of
https://github.com/withastro/astro.git
synced 2024-12-16 21:46:22 -05:00
fix(add): Fixes astro add modifying baseUrl by accident (#10774)
* fix(add): Fixes `astro add` modifying `baseUrl` by accident * chore: changeset * test: add test * fix: tsconfig not being a json maybe is a mistake, I don't know! * test: fix * Update packages/astro/test/fixtures/tsconfig-handling/baseUrl/tsconfig.json Co-authored-by: Nate Moore <natemoo-re@users.noreply.github.com> --------- Co-authored-by: Nate Moore <natemoo-re@users.noreply.github.com>
This commit is contained in:
parent
3ff6b403db
commit
308b5d8c12
5 changed files with 39 additions and 6 deletions
5
.changeset/mean-candles-hammer.md
Normal file
5
.changeset/mean-candles-hammer.md
Normal file
|
@ -0,0 +1,5 @@
|
||||||
|
---
|
||||||
|
"astro": patch
|
||||||
|
---
|
||||||
|
|
||||||
|
Fixes `astro add` sometimes modifying `baseUrl` unintentionally
|
|
@ -968,16 +968,16 @@ async function updateTSConfig(
|
||||||
inputConfig = {
|
inputConfig = {
|
||||||
tsconfig: defaultTSConfig,
|
tsconfig: defaultTSConfig,
|
||||||
tsconfigFile: path.join(cwd, 'tsconfig.json'),
|
tsconfigFile: path.join(cwd, 'tsconfig.json'),
|
||||||
rawConfig: { tsconfig: defaultTSConfig, tsconfigFile: path.join(cwd, 'tsconfig.json') },
|
rawConfig: defaultTSConfig,
|
||||||
};
|
};
|
||||||
} else {
|
} else {
|
||||||
inputConfigText = JSON.stringify(inputConfig.rawConfig.tsconfig, null, 2);
|
inputConfigText = JSON.stringify(inputConfig.rawConfig, null, 2);
|
||||||
}
|
}
|
||||||
|
|
||||||
const configFileName = path.basename(inputConfig.tsconfigFile);
|
const configFileName = path.basename(inputConfig.tsconfigFile);
|
||||||
|
|
||||||
const outputConfig = updateTSConfigForFramework(
|
const outputConfig = updateTSConfigForFramework(
|
||||||
inputConfig.rawConfig.tsconfig,
|
inputConfig.rawConfig,
|
||||||
firstIntegrationWithTSSettings
|
firstIntegrationWithTSSettings
|
||||||
);
|
);
|
||||||
|
|
||||||
|
|
|
@ -1,10 +1,12 @@
|
||||||
import { join } from 'node:path';
|
import { join } from 'node:path';
|
||||||
|
import { readFile } from "node:fs/promises"
|
||||||
import {
|
import {
|
||||||
TSConfckParseError,
|
TSConfckParseError,
|
||||||
type TSConfckParseOptions,
|
type TSConfckParseOptions,
|
||||||
type TSConfckParseResult,
|
type TSConfckParseResult,
|
||||||
find,
|
find,
|
||||||
parse,
|
parse,
|
||||||
|
toJson
|
||||||
} from 'tsconfck';
|
} from 'tsconfck';
|
||||||
import type { CompilerOptions, TypeAcquisition } from 'typescript';
|
import type { CompilerOptions, TypeAcquisition } from 'typescript';
|
||||||
|
|
||||||
|
@ -64,7 +66,7 @@ type TSConfigResult<T = {}> = Promise<
|
||||||
export async function loadTSConfig(
|
export async function loadTSConfig(
|
||||||
root: string | undefined,
|
root: string | undefined,
|
||||||
findUp = false
|
findUp = false
|
||||||
): Promise<TSConfigResult<{ rawConfig: TSConfckParseResult }>> {
|
): Promise<TSConfigResult<{ rawConfig: TSConfig }>> {
|
||||||
const safeCwd = root ?? process.cwd();
|
const safeCwd = root ?? process.cwd();
|
||||||
|
|
||||||
const [jsconfig, tsconfig] = await Promise.all(
|
const [jsconfig, tsconfig] = await Promise.all(
|
||||||
|
@ -85,7 +87,13 @@ export async function loadTSConfig(
|
||||||
return parsedConfig;
|
return parsedConfig;
|
||||||
}
|
}
|
||||||
|
|
||||||
return { ...parsedConfig, rawConfig: parsedConfig.extended?.[0] ?? parsedConfig.tsconfig };
|
// tsconfck does not return the original config, so we need to parse it ourselves
|
||||||
|
// https://github.com/dominikg/tsconfck/issues/138
|
||||||
|
const rawConfig = await readFile(tsconfig, 'utf-8')
|
||||||
|
.then(toJson)
|
||||||
|
.then((content) => JSON.parse(content) as TSConfig);
|
||||||
|
|
||||||
|
return { ...parsedConfig, rawConfig };
|
||||||
}
|
}
|
||||||
|
|
||||||
if (jsconfig) {
|
if (jsconfig) {
|
||||||
|
@ -95,7 +103,11 @@ export async function loadTSConfig(
|
||||||
return parsedConfig;
|
return parsedConfig;
|
||||||
}
|
}
|
||||||
|
|
||||||
return { ...parsedConfig, rawConfig: parsedConfig.extended?.[0] ?? parsedConfig.tsconfig };
|
const rawConfig = await readFile(jsconfig, 'utf-8')
|
||||||
|
.then(toJson)
|
||||||
|
.then((content) => JSON.parse(content) as TSConfig);
|
||||||
|
|
||||||
|
return { ...parsedConfig, rawConfig: rawConfig };
|
||||||
}
|
}
|
||||||
|
|
||||||
return 'missing-config';
|
return 'missing-config';
|
||||||
|
|
6
packages/astro/test/fixtures/tsconfig-handling/baseUrl/tsconfig.json
vendored
Normal file
6
packages/astro/test/fixtures/tsconfig-handling/baseUrl/tsconfig.json
vendored
Normal file
|
@ -0,0 +1,6 @@
|
||||||
|
{
|
||||||
|
"files": ["i-have-base-url"],
|
||||||
|
"compilerOptions": {
|
||||||
|
"baseUrl": ".",
|
||||||
|
}
|
||||||
|
}
|
|
@ -3,6 +3,8 @@ import * as path from 'node:path';
|
||||||
import { describe, it } from 'node:test';
|
import { describe, it } from 'node:test';
|
||||||
import { fileURLToPath } from 'node:url';
|
import { fileURLToPath } from 'node:url';
|
||||||
import { loadTSConfig, updateTSConfigForFramework } from '../../../dist/core/config/index.js';
|
import { loadTSConfig, updateTSConfigForFramework } from '../../../dist/core/config/index.js';
|
||||||
|
import { readFile } from 'node:fs/promises';
|
||||||
|
import { toJson } from 'tsconfck';
|
||||||
|
|
||||||
const cwd = fileURLToPath(new URL('../../fixtures/tsconfig-handling/', import.meta.url));
|
const cwd = fileURLToPath(new URL('../../fixtures/tsconfig-handling/', import.meta.url));
|
||||||
|
|
||||||
|
@ -37,6 +39,14 @@ describe('TSConfig handling', () => {
|
||||||
assert.equal(invalidConfig, 'invalid-config');
|
assert.equal(invalidConfig, 'invalid-config');
|
||||||
assert.equal(missingConfig, 'missing-config');
|
assert.equal(missingConfig, 'missing-config');
|
||||||
});
|
});
|
||||||
|
|
||||||
|
it('does not change baseUrl in raw config', async () => {
|
||||||
|
const loadedConfig = await loadTSConfig(path.join(cwd, 'baseUrl'));
|
||||||
|
const rawConfig = await readFile(path.join(cwd, 'baseUrl', 'tsconfig.json'), 'utf-8').then(toJson)
|
||||||
|
.then((content) => JSON.parse(content));
|
||||||
|
|
||||||
|
assert.deepEqual(loadedConfig.rawConfig, rawConfig);
|
||||||
|
});
|
||||||
});
|
});
|
||||||
|
|
||||||
describe('tsconfig / jsconfig updates', () => {
|
describe('tsconfig / jsconfig updates', () => {
|
||||||
|
|
Loading…
Reference in a new issue