diff --git a/.changeset/thirty-starfishes-smash.md b/.changeset/thirty-starfishes-smash.md new file mode 100644 index 00000000000..c41a08fdbaf --- /dev/null +++ b/.changeset/thirty-starfishes-smash.md @@ -0,0 +1,6 @@ +--- +'create-amplify': patch +'@aws-amplify/cli-core': patch +--- + +update create-amplify flow to init a tsconfig that forces module context, removes creation of package.json in the amplify directory diff --git a/packages/cli-core/src/package-manager-controller/package_manager_controller_base.ts b/packages/cli-core/src/package-manager-controller/package_manager_controller_base.ts index 4d9786b3910..c6fae5f2bae 100644 --- a/packages/cli-core/src/package-manager-controller/package_manager_controller_base.ts +++ b/packages/cli-core/src/package-manager-controller/package_manager_controller_base.ts @@ -96,7 +96,8 @@ export abstract class PackageManagerControllerBase const tsConfigTemplate = { compilerOptions: { target: 'es2022', - module: 'es2022', + module: 'preserve', + moduleDetection: 'force', moduleResolution: 'bundler', resolveJsonModule: true, esModuleInterop: true, diff --git a/packages/create-amplify/src/amplify_project_creator.ts b/packages/create-amplify/src/amplify_project_creator.ts index 45cfc9d5949..ed998afa391 100644 --- a/packages/create-amplify/src/amplify_project_creator.ts +++ b/packages/create-amplify/src/amplify_project_creator.ts @@ -18,7 +18,7 @@ export class AmplifyProjectCreator { 'aws-cdk@^2', 'aws-cdk-lib@^2', 'constructs@^10.0.0', - 'typescript@^5.0.0', + 'typescript@^5.4.0', 'tsx', 'esbuild', ]; diff --git a/packages/create-amplify/src/initial_project_file_generator.test.ts b/packages/create-amplify/src/initial_project_file_generator.test.ts index 8fcfb9190ac..e6e37b1770b 100644 --- a/packages/create-amplify/src/initial_project_file_generator.test.ts +++ b/packages/create-amplify/src/initial_project_file_generator.test.ts @@ -40,14 +40,6 @@ void describe('InitialProjectFileGenerator', () => { path.join(process.cwd(), 'testDir', 'amplify'), { recursive: true }, ]); - assert.equal( - fsMock.writeFile.mock.calls[0].arguments[0], - path.join(process.cwd(), 'testDir', 'amplify', 'package.json') - ); - assert.deepStrictEqual( - JSON.parse(fsMock.writeFile.mock.calls[0].arguments[1]), - { type: 'module' } - ); }); void it('creates default tsconfig file', async () => { diff --git a/packages/create-amplify/src/initial_project_file_generator.ts b/packages/create-amplify/src/initial_project_file_generator.ts index 0c782726e56..fcba7b319a2 100644 --- a/packages/create-amplify/src/initial_project_file_generator.ts +++ b/packages/create-amplify/src/initial_project_file_generator.ts @@ -29,12 +29,6 @@ export class InitialProjectFileGenerator { { recursive: true } ); - const packageJsonContent = { type: 'module' }; - await this.fsp.writeFile( - this.path.resolve(targetDir, 'package.json'), - JSON.stringify(packageJsonContent, null, 2) - ); - await this.packageManagerController.initializeTsConfig(targetDir); }; } diff --git a/packages/integration-tests/src/package_manager_sanity_checks.test.ts b/packages/integration-tests/src/package_manager_sanity_checks.test.ts index cc90bcd05d0..018e1752c9d 100644 --- a/packages/integration-tests/src/package_manager_sanity_checks.test.ts +++ b/packages/integration-tests/src/package_manager_sanity_checks.test.ts @@ -107,7 +107,6 @@ void describe('getting started happy path', async () => { path.join('auth', 'resource.ts'), 'backend.ts', path.join('data', 'resource.ts'), - 'package.json', 'tsconfig.json', ]; diff --git a/packages/integration-tests/src/setup_package_manager.ts b/packages/integration-tests/src/setup_package_manager.ts index ad72f3270fa..305997ace4b 100644 --- a/packages/integration-tests/src/setup_package_manager.ts +++ b/packages/integration-tests/src/setup_package_manager.ts @@ -5,6 +5,7 @@ import * as path from 'path'; import * as os from 'os'; const customRegistry = 'http://localhost:4873'; +const customRegistryAuthToken = 'garbage'; // TODO: refactor into `type PackageManagerInitializer` and have sub-types with a factory. export type PackageManager = 'npm' | 'yarn-classic' | 'yarn-modern' | 'pnpm'; @@ -55,9 +56,20 @@ const initializeYarnModern = async (execaOptions: { const packageManager = 'yarn'; await execa('npm', ['install', '-g', packageManager], { stdio: 'inherit' }); await execa('yarn', ['init', '-2'], execaOptions); + await execa(packageManager, [ + 'config', + 'set', + 'npmRegistryServer', + customRegistry, + ]); await execa( packageManager, - ['config', 'set', 'npmRegistryServer', customRegistry], + [ + 'config', + 'set', + `"npmRegistries['${customRegistry}'].npmAuthToken`, + customRegistryAuthToken, + ], execaOptions ); await execa( @@ -65,11 +77,6 @@ const initializeYarnModern = async (execaOptions: { ['config', 'set', 'unsafeHttpWhitelist', 'localhost'], execaOptions ); - await execa( - packageManager, - ['config', 'set', 'nodeLinker', 'node-modules'], - execaOptions - ); await execa(packageManager, ['cache', 'clean'], execaOptions); }; diff --git a/packages/integration-tests/src/test-e2e/create_amplify.test.ts b/packages/integration-tests/src/test-e2e/create_amplify.test.ts index 189405ef6f0..c382bbc3a80 100644 --- a/packages/integration-tests/src/test-e2e/create_amplify.test.ts +++ b/packages/integration-tests/src/test-e2e/create_amplify.test.ts @@ -156,11 +156,12 @@ void describe( ).replace(/\/\*[\s\S]*?\*\/|([^:]|^)\/\/.*$/gm, ''); const tsConfigObject = JSON.parse(tsConfigContent); - assert.equal(tsConfigObject.compilerOptions.module, 'es2022'); + assert.equal(tsConfigObject.compilerOptions.module, 'preserve'); assert.equal( tsConfigObject.compilerOptions.moduleResolution, 'bundler' ); + assert.equal(tsConfigObject.compilerOptions.moduleDetection, 'force'); assert.equal(tsConfigObject.compilerOptions.resolveJsonModule, true); assert.deepStrictEqual(tsConfigObject.compilerOptions.paths, { // The path here is coupled with backend-function's generated typedef file path @@ -178,7 +179,6 @@ void describe( path.join('auth', 'resource.ts'), 'backend.ts', path.join('data', 'resource.ts'), - 'package.json', 'tsconfig.json', ]; diff --git a/packages/integration-tests/src/test-project-setup/setup_dir_as_esm_module.ts b/packages/integration-tests/src/test-project-setup/setup_dir_as_esm_module.ts index 71bd859e8d0..58e173abc5b 100644 --- a/packages/integration-tests/src/test-project-setup/setup_dir_as_esm_module.ts +++ b/packages/integration-tests/src/test-project-setup/setup_dir_as_esm_module.ts @@ -5,16 +5,11 @@ import * as fs from 'fs/promises'; * Configures a minimal package.json and tsconfig.json to make the specified directory compile as an ESM module */ export const setupDirAsEsmModule = async (absoluteDirPath: string) => { - const packageJsonContent = { type: 'module' }; - await fs.writeFile( - path.resolve(absoluteDirPath, 'package.json'), - JSON.stringify(packageJsonContent, null, 2) - ); - const tsConfigTemplate = { compilerOptions: { target: 'es2022', - module: 'es2022', + module: 'preserve', + moduleDetection: 'force', moduleResolution: 'bundler', resolveJsonModule: true, // eslint-disable-next-line spellcheck/spell-checker diff --git a/scripts/setup_test_project.ts b/scripts/setup_test_project.ts index fb2714a630b..5fd51c5b553 100644 --- a/scripts/setup_test_project.ts +++ b/scripts/setup_test_project.ts @@ -44,7 +44,7 @@ const tsConfig = { extends: '../../../tsconfig.base.json', compilerOptions: { moduleResolution: 'bundler', - module: 'es2022', + module: 'preserve', }, };