Skip to content

Commit 4c1485a

Browse files
bombguyedwardfoyle
andauthored
feat: print out file written for amplify generate commands (#939)
* feat: print out file written for amplify generate commands * update API.md * optional chaining Co-authored-by: Edward Foyle <[email protected]> * optional chaining + prettier * use splice instead * pass in printer.log instead of defining print at top-level * update API.md * use printer singleton defined in cli * removing unused import * removing unused import * fix platform specific path * update assertions * removing unused import * win path fix * win path fix * try strictEqual instead of match --------- Co-authored-by: Edward Foyle <[email protected]>
1 parent 40298a4 commit 4c1485a

File tree

15 files changed

+164
-63
lines changed

15 files changed

+164
-63
lines changed

.changeset/big-dryers-battle.md

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,8 @@
1+
---
2+
'@aws-amplify/model-generator': minor
3+
'@aws-amplify/form-generator': minor
4+
'@aws-amplify/client-config': minor
5+
'@aws-amplify/backend-cli': minor
6+
---
7+
8+
print out file written for amplify generate commands

packages/cli/src/client-config/client_config_generator_adapter.ts

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -6,6 +6,7 @@ import {
66
} from '@aws-amplify/client-config';
77
import { DeployedBackendIdentifier } from '@aws-amplify/deployed-backend-client';
88
import { AwsCredentialIdentityProvider } from '@aws-sdk/types';
9+
import { printer } from '../printer.js';
910

1011
/**
1112
* Adapts static generateClientConfigToFile from @aws-amplify/client-config call to make it injectable and testable.
@@ -39,7 +40,8 @@ export class ClientConfigGeneratorAdapter {
3940
this.awsCredentialProvider,
4041
backendIdentifier,
4142
outDir,
42-
format
43+
format,
44+
(message) => printer.log(message)
4345
);
4446
};
4547
}

packages/cli/src/commands/generate/config/generate_config_command.test.ts

Lines changed: 52 additions & 37 deletions
Original file line numberDiff line numberDiff line change
@@ -107,71 +107,86 @@ void describe('generate config command', () => {
107107
'config --branch branch_name --app-id app_id --out-dir /foo/bar --format mjs'
108108
);
109109
assert.equal(generateClientConfigMock.mock.callCount(), 1);
110-
assert.deepStrictEqual(generateClientConfigMock.mock.calls[0].arguments, [
111-
{
112-
name: 'branch_name',
113-
namespace: 'app_id',
114-
type: 'branch',
115-
},
116-
'/foo/bar',
117-
ClientConfigFormat.MJS,
118-
]);
110+
assert.deepStrictEqual(
111+
generateClientConfigMock.mock.calls[0].arguments.splice(0, 3),
112+
[
113+
{
114+
name: 'branch_name',
115+
namespace: 'app_id',
116+
type: 'branch',
117+
},
118+
'/foo/bar',
119+
ClientConfigFormat.MJS,
120+
]
121+
);
119122
});
120123

121124
void it('can generate to custom absolute path', async () => {
122125
await commandRunner.runCommand(
123126
'config --stack stack_name --out-dir /foo/bar --format ts'
124127
);
125128
assert.equal(generateClientConfigMock.mock.callCount(), 1);
126-
assert.deepStrictEqual(generateClientConfigMock.mock.calls[0].arguments, [
127-
{
128-
stackName: 'stack_name',
129-
},
130-
'/foo/bar',
131-
ClientConfigFormat.TS,
132-
]);
129+
assert.deepStrictEqual(
130+
generateClientConfigMock.mock.calls[0].arguments.splice(0, 3),
131+
[
132+
{
133+
stackName: 'stack_name',
134+
},
135+
'/foo/bar',
136+
ClientConfigFormat.TS,
137+
]
138+
);
133139
});
134140

135141
void it('can generate to custom relative path', async () => {
136142
await commandRunner.runCommand(
137143
'config --stack stack_name --out-dir foo/bar --format mjs'
138144
);
139145
assert.equal(generateClientConfigMock.mock.callCount(), 1);
140-
assert.deepStrictEqual(generateClientConfigMock.mock.calls[0].arguments, [
141-
{
142-
stackName: 'stack_name',
143-
},
144-
'foo/bar',
145-
ClientConfigFormat.MJS,
146-
]);
146+
assert.deepStrictEqual(
147+
generateClientConfigMock.mock.calls[0].arguments.splice(0, 3),
148+
[
149+
{
150+
stackName: 'stack_name',
151+
},
152+
'foo/bar',
153+
ClientConfigFormat.MJS,
154+
]
155+
);
147156
});
148157

149158
void it('can generate config in dart format', async () => {
150159
await commandRunner.runCommand(
151160
'config --stack stack_name --out-dir foo/bar --format dart'
152161
);
153162
assert.equal(generateClientConfigMock.mock.callCount(), 1);
154-
assert.deepStrictEqual(generateClientConfigMock.mock.calls[0].arguments, [
155-
{
156-
stackName: 'stack_name',
157-
},
158-
'foo/bar',
159-
ClientConfigFormat.DART,
160-
]);
163+
assert.deepStrictEqual(
164+
generateClientConfigMock.mock.calls[0].arguments.splice(0, 3),
165+
[
166+
{
167+
stackName: 'stack_name',
168+
},
169+
'foo/bar',
170+
ClientConfigFormat.DART,
171+
]
172+
);
161173
});
162174

163175
void it('can generate config in json mobile format', async () => {
164176
await commandRunner.runCommand(
165177
'config --stack stack_name --out-dir foo/bar --format json-mobile'
166178
);
167179
assert.equal(generateClientConfigMock.mock.callCount(), 1);
168-
assert.deepStrictEqual(generateClientConfigMock.mock.calls[0].arguments, [
169-
{
170-
stackName: 'stack_name',
171-
},
172-
'foo/bar',
173-
ClientConfigFormat.JSON_MOBILE,
174-
]);
180+
assert.deepStrictEqual(
181+
generateClientConfigMock.mock.calls[0].arguments.splice(0, 3),
182+
[
183+
{
184+
stackName: 'stack_name',
185+
},
186+
'foo/bar',
187+
ClientConfigFormat.JSON_MOBILE,
188+
]
189+
);
175190
});
176191

177192
void it('shows available options in help output', async () => {

packages/cli/src/form-generation/form_generation_handler.ts

Lines changed: 5 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,7 @@ import { createLocalGraphqlFormGenerator } from '@aws-amplify/form-generator';
22
import { createGraphqlDocumentGenerator } from '@aws-amplify/model-generator';
33
import { DeployedBackendIdentifier } from '@aws-amplify/deployed-backend-client';
44
import { AwsCredentialIdentityProvider } from '@aws-sdk/types';
5+
import { printer } from '../printer.js';
56

67
type FormGenerationParams = {
78
modelsOutDir: string;
@@ -32,14 +33,16 @@ export class FormGenerationHandler {
3233
const modelsResult = await graphqlClientGenerator.generateModels({
3334
language: 'typescript',
3435
});
35-
await modelsResult.writeToDirectory(modelsOutDir);
36+
await modelsResult.writeToDirectory(modelsOutDir, (message) =>
37+
printer.log(message)
38+
);
3639
const localFormGenerator = createLocalGraphqlFormGenerator({
3740
introspectionSchemaUrl: apiUrl,
3841
graphqlModelDirectoryPath: './graphql',
3942
});
4043
const result = await localFormGenerator.generateForms({
4144
models: modelsFilter,
4245
});
43-
await result.writeToDirectory(uiOutDir);
46+
await result.writeToDirectory(uiOutDir, (message) => printer.log(message));
4447
};
4548
}

packages/client-config/API.md

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -56,7 +56,7 @@ export enum ClientConfigFormat {
5656
export const generateClientConfig: (credentialProvider: AwsCredentialIdentityProvider, backendIdentifier: DeployedBackendIdentifier) => Promise<ClientConfig>;
5757

5858
// @public
59-
export const generateClientConfigToFile: (credentialProvider: AwsCredentialIdentityProvider, backendIdentifier: DeployedBackendIdentifier, outDir?: string, format?: ClientConfigFormat) => Promise<void>;
59+
export const generateClientConfigToFile: (credentialProvider: AwsCredentialIdentityProvider, backendIdentifier: DeployedBackendIdentifier, outDir?: string, format?: ClientConfigFormat, log?: ((message: string) => void) | undefined) => Promise<void>;
6060

6161
// @public
6262
export const getClientConfigPath: (outDir?: string, format?: ClientConfigFormat) => Promise<string>;

packages/client-config/src/client-config-writer/client_config_writer.ts

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,5 @@
11
import _fsp from 'fs/promises';
2+
import path from 'path';
23
import {
34
ClientConfig,
45
ClientConfigFormat,
@@ -28,10 +29,13 @@ export class ClientConfigWriter {
2829
writeClientConfig = async (
2930
clientConfig: ClientConfig,
3031
outDir?: string,
31-
format: ClientConfigFormat = ClientConfigFormat.JSON
32+
format: ClientConfigFormat = ClientConfigFormat.JSON,
33+
// TODO: update this type when Printer interface gets defined in platform-core.
34+
log?: (message: string) => void
3235
): Promise<void> => {
3336
const targetPath = await this.pathResolver(outDir, format);
3437
const fileContent = this.formatter.format(clientConfig, format);
3538
await this.fsp.writeFile(targetPath, fileContent);
39+
log?.(`File written: ${path.relative(process.cwd(), targetPath)}`);
3640
};
3741
}

packages/client-config/src/generate_client_config_to_file.ts

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -16,7 +16,9 @@ export const generateClientConfigToFile = async (
1616
credentialProvider: AwsCredentialIdentityProvider,
1717
backendIdentifier: DeployedBackendIdentifier,
1818
outDir?: string,
19-
format?: ClientConfigFormat
19+
format?: ClientConfigFormat,
20+
// TODO: update this type when Printer interface gets defined in platform-core.
21+
log?: (message: string) => void
2022
): Promise<void> => {
2123
const packageJson = await readPackageJson();
2224

@@ -31,7 +33,7 @@ export const generateClientConfigToFile = async (
3133
credentialProvider,
3234
backendIdentifier
3335
);
34-
await clientConfigWriter.writeClientConfig(clientConfig, outDir, format);
36+
await clientConfigWriter.writeClientConfig(clientConfig, outDir, format, log);
3537
};
3638

3739
const readPackageJson = async (): Promise<{

packages/form-generator/API.md

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -19,7 +19,7 @@ export type GraphqlFormGenerator = {
1919

2020
// @public (undocumented)
2121
export type GraphqlGenerationResult = {
22-
writeToDirectory: (directoryPath: string) => Promise<void>;
22+
writeToDirectory: (directoryPath: string, log?: (message: string) => void) => Promise<void>;
2323
};
2424

2525
// @public (undocumented)

packages/form-generator/src/codegen_graphql_form_generation_result.ts

Lines changed: 8 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -15,7 +15,11 @@ export class CodegenGraphqlFormGeneratorResult
1515
/**
1616
* writes the components to a given directory
1717
*/
18-
writeToDirectory = async (directoryPath: string) => {
18+
writeToDirectory = async (
19+
directoryPath: string,
20+
// TODO: update this type when Printer interface gets defined in platform-core.
21+
log?: (message: string) => void
22+
) => {
1923
try {
2024
await fs.stat(directoryPath);
2125
} catch (e) {
@@ -25,9 +29,11 @@ export class CodegenGraphqlFormGeneratorResult
2529
this.fileNameComponentMap
2630
)) {
2731
if (content) {
28-
const fd = await fs.open(path.join(directoryPath, fileName), 'w+');
32+
const filePath = path.join(directoryPath, fileName);
33+
const fd = await fs.open(filePath, 'w+');
2934
try {
3035
await fd.writeFile(content);
36+
log?.(`File written: ${path.relative(process.cwd(), filePath)}`);
3137
} finally {
3238
await fd.close();
3339
}

packages/form-generator/src/graphql_form_generator.ts

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,9 @@
11
export type GraphqlGenerationResult = {
2-
writeToDirectory: (directoryPath: string) => Promise<void>;
2+
writeToDirectory: (
3+
directoryPath: string,
4+
// TODO: update this type when Printer interface gets defined in platform-core.
5+
log?: (message: string) => void
6+
) => Promise<void>;
37
};
48
export type FormGenerationOptions = {
59
models?: string[];

0 commit comments

Comments
 (0)