@simplysf/simply-utam 0.0.0 → 0.1.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +74 -2
- package/bin/dev.js +20 -0
- package/bin/run.js +20 -0
- package/lib/commands/build.d.ts +21 -0
- package/lib/commands/build.js +85 -0
- package/lib/commands/build.js.map +1 -0
- package/lib/commands/init.d.ts +20 -0
- package/lib/commands/init.js +101 -0
- package/lib/commands/init.js.map +1 -0
- package/lib/commands/overrides.d.ts +18 -0
- package/lib/commands/overrides.js +76 -0
- package/lib/commands/overrides.js.map +1 -0
- package/lib/commands/rewrite.d.ts +19 -0
- package/lib/commands/rewrite.js +85 -0
- package/lib/commands/rewrite.js.map +1 -0
- package/lib/commands/rules.d.ts +19 -0
- package/lib/commands/rules.js +82 -0
- package/lib/commands/rules.js.map +1 -0
- package/lib/commands/steps.d.ts +20 -0
- package/lib/commands/steps.js +89 -0
- package/lib/commands/steps.js.map +1 -0
- package/lib/index.d.ts +6 -0
- package/lib/index.js +22 -0
- package/lib/index.js.map +1 -0
- package/lib/pipeline-runner.d.ts +31 -0
- package/lib/pipeline-runner.js +241 -0
- package/lib/pipeline-runner.js.map +1 -0
- package/oclif.manifest.json +468 -0
- package/package.json +127 -5
package/README.md
CHANGED
|
@@ -1,4 +1,76 @@
|
|
|
1
1
|
# @simplysf/simply-utam
|
|
2
2
|
|
|
3
|
-
|
|
4
|
-
|
|
3
|
+
[](https://npmjs.com/@simplysf/simply-utam) [](https://raw.githubusercontent.com/SimplySF/simply-utam/main/LICENSE.txt)
|
|
4
|
+
|
|
5
|
+
Salesforce UTAM UI testing and build automation CLI, built by [SimplySF](https://github.com/SimplySF).
|
|
6
|
+
|
|
7
|
+
The `simply-utam` CLI automates Salesforce UI testing build pipelines: scanning LWC definitions for root components, generating `.rules.json` files, merging deep JSON overrides into compiled UTAM page objects, rewriting namespace prefixes across packages, and scaffolding missing Cucumber step definitions.
|
|
8
|
+
|
|
9
|
+
## Installation
|
|
10
|
+
|
|
11
|
+
```bash
|
|
12
|
+
npm install --save-dev @simplysf/simply-utam
|
|
13
|
+
```
|
|
14
|
+
|
|
15
|
+
Requires Node.js 22 or later.
|
|
16
|
+
|
|
17
|
+
## Commands
|
|
18
|
+
|
|
19
|
+
- `simply-utam init`: Scaffolds starter UTAM configs (`generator.config.json`, `utam.config.json`, `wdio.conf.mjs`, `.utam/namespace-map.json`) and non-destructively injects standard Wireit tasks into `package.json`.
|
|
20
|
+
- `simply-utam rules`: Scans LWC component definitions and generates or updates UTAM `.rules.json` files for root components.
|
|
21
|
+
- `simply-utam overrides`: Deeply merges custom element assertions, wait conditions, and visibility rules from `*.utam-overrides.json` into generated `*.utam.json` files while preserving file indentation.
|
|
22
|
+
- `simply-utam rewrite`: Rewrites namespace prefixes across compiled `*.utam.json` files according to `.utam/namespace-map.json`.
|
|
23
|
+
- `simply-utam steps`: Statically analyzes Gherkin `.feature` files, compiles existing step expressions, detects true undefined steps, and appends formatted Cucumber expressions into target step files.
|
|
24
|
+
- `simply-utam build`: Convenience runner executing all compilation and transformation stages sequentially (`rules -> utam-generate -> overrides -> rewrite -> utam`).
|
|
25
|
+
|
|
26
|
+
## Usage & Wireit Integration
|
|
27
|
+
|
|
28
|
+
In a Salesforce test project:
|
|
29
|
+
|
|
30
|
+
```json
|
|
31
|
+
{
|
|
32
|
+
"scripts": {
|
|
33
|
+
"build:utam-rules": "wireit",
|
|
34
|
+
"build:utam-generate": "wireit",
|
|
35
|
+
"build:utam-overrides": "wireit",
|
|
36
|
+
"build:utam-rewrite-namespaces": "wireit",
|
|
37
|
+
"build:utam": "wireit",
|
|
38
|
+
"test:ui": "wireit"
|
|
39
|
+
},
|
|
40
|
+
"wireit": {
|
|
41
|
+
"build:utam-rules": {
|
|
42
|
+
"command": "simply-utam rules"
|
|
43
|
+
},
|
|
44
|
+
"build:utam-generate": {
|
|
45
|
+
"command": "utam-generate -c generator.config.json",
|
|
46
|
+
"dependencies": ["build:utam-rules"]
|
|
47
|
+
},
|
|
48
|
+
"build:utam-overrides": {
|
|
49
|
+
"command": "simply-utam overrides",
|
|
50
|
+
"dependencies": ["build:utam-generate"]
|
|
51
|
+
},
|
|
52
|
+
"build:utam-rewrite-namespaces": {
|
|
53
|
+
"command": "simply-utam rewrite -c .utam/namespace-map.json",
|
|
54
|
+
"dependencies": ["build:utam-overrides"]
|
|
55
|
+
},
|
|
56
|
+
"build:utam": {
|
|
57
|
+
"command": "utam -c utam.config.json",
|
|
58
|
+
"files": ["**/__utam__/**/*.utam.json", "**/__utam__/**/*.utam.js"],
|
|
59
|
+
"output": ["pageObjects"],
|
|
60
|
+
"dependencies": ["build:utam-rewrite-namespaces"]
|
|
61
|
+
},
|
|
62
|
+
"test:ui": {
|
|
63
|
+
"command": "wdio run wdio.conf.mjs",
|
|
64
|
+
"dependencies": ["build:utam"]
|
|
65
|
+
}
|
|
66
|
+
}
|
|
67
|
+
}
|
|
68
|
+
```
|
|
69
|
+
|
|
70
|
+
## Re-exports
|
|
71
|
+
|
|
72
|
+
`@simplysf/simply-utam` re-exports the entire `@simplysf/simply-utam-core` programmatic API (`TestEnvironment`, `LightningNavigator`, `goToExperiencePage`, `loginAsUser`, `logUtamHtml`, etc.) so consumers can optionally install only `@simplysf/simply-utam`.
|
|
73
|
+
|
|
74
|
+
## License
|
|
75
|
+
|
|
76
|
+
Licensed under the [Apache-2.0](https://raw.githubusercontent.com/SimplySF/simply-utam/main/LICENSE.txt) license.
|
package/bin/dev.js
ADDED
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
#!/usr/bin/env node
|
|
2
|
+
/*
|
|
3
|
+
* Copyright (c) 2026, SimplySF.
|
|
4
|
+
*
|
|
5
|
+
* Licensed under the Apache License, Version 2.0 (the "License");
|
|
6
|
+
* you may not use this file except in compliance with the License.
|
|
7
|
+
* You may obtain a copy of the License at
|
|
8
|
+
*
|
|
9
|
+
* http://www.apache.org/licenses/LICENSE-2.0
|
|
10
|
+
*
|
|
11
|
+
* Unless required by applicable law or agreed to in writing, software
|
|
12
|
+
* distributed under the License is distributed on an "AS IS" BASIS,
|
|
13
|
+
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
|
14
|
+
* See the License for the specific language governing permissions and
|
|
15
|
+
* limitations under the License.
|
|
16
|
+
*/
|
|
17
|
+
|
|
18
|
+
import { execute } from '@oclif/core';
|
|
19
|
+
|
|
20
|
+
await execute({ development: true, dir: import.meta.url });
|
package/bin/run.js
ADDED
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
#!/usr/bin/env node
|
|
2
|
+
/*
|
|
3
|
+
* Copyright (c) 2026, SimplySF.
|
|
4
|
+
*
|
|
5
|
+
* Licensed under the Apache License, Version 2.0 (the "License");
|
|
6
|
+
* you may not use this file except in compliance with the License.
|
|
7
|
+
* You may obtain a copy of the License at
|
|
8
|
+
*
|
|
9
|
+
* http://www.apache.org/licenses/LICENSE-2.0
|
|
10
|
+
*
|
|
11
|
+
* Unless required by applicable law or agreed to in writing, software
|
|
12
|
+
* distributed under the License is distributed on an "AS IS" BASIS,
|
|
13
|
+
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
|
14
|
+
* See the License for the specific language governing permissions and
|
|
15
|
+
* limitations under the License.
|
|
16
|
+
*/
|
|
17
|
+
|
|
18
|
+
import { execute } from '@oclif/core';
|
|
19
|
+
|
|
20
|
+
await execute({ dir: import.meta.url });
|
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
import { Command } from '@oclif/core';
|
|
2
|
+
import { type BuildPipelineResult } from '../pipeline-runner.js';
|
|
3
|
+
/**
|
|
4
|
+
* CLI command to run the complete SimplyUTAM compilation pipeline sequentially.
|
|
5
|
+
*/
|
|
6
|
+
export default class Build extends Command {
|
|
7
|
+
static summary: string;
|
|
8
|
+
static description: string;
|
|
9
|
+
static examples: string[];
|
|
10
|
+
static enableJsonFlag: boolean;
|
|
11
|
+
static flags: {
|
|
12
|
+
source: import("@oclif/core/interfaces").OptionFlag<string[] | undefined, import("@oclif/core/interfaces").CustomOptions>;
|
|
13
|
+
'project-dir': import("@oclif/core/interfaces").OptionFlag<string, import("@oclif/core/interfaces").CustomOptions>;
|
|
14
|
+
'generator-config': import("@oclif/core/interfaces").OptionFlag<string, import("@oclif/core/interfaces").CustomOptions>;
|
|
15
|
+
'utam-config': import("@oclif/core/interfaces").OptionFlag<string, import("@oclif/core/interfaces").CustomOptions>;
|
|
16
|
+
'namespace-map': import("@oclif/core/interfaces").OptionFlag<string, import("@oclif/core/interfaces").CustomOptions>;
|
|
17
|
+
'dry-run': import("@oclif/core/interfaces").BooleanFlag<boolean>;
|
|
18
|
+
verbose: import("@oclif/core/interfaces").BooleanFlag<boolean>;
|
|
19
|
+
};
|
|
20
|
+
run(): Promise<BuildPipelineResult>;
|
|
21
|
+
}
|
|
@@ -0,0 +1,85 @@
|
|
|
1
|
+
/*
|
|
2
|
+
* Copyright (c) 2026, SimplySF.
|
|
3
|
+
*
|
|
4
|
+
* Licensed under the Apache License, Version 2.0 (the "License");
|
|
5
|
+
* you may not use this file except in compliance with the License.
|
|
6
|
+
* You may obtain a copy of the License at
|
|
7
|
+
*
|
|
8
|
+
* http://www.apache.org/licenses/LICENSE-2.0
|
|
9
|
+
*
|
|
10
|
+
* Unless required by applicable law or agreed to in writing, software
|
|
11
|
+
* distributed under the License is distributed on an "AS IS" BASIS,
|
|
12
|
+
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
|
13
|
+
* See the License for the specific language governing permissions and
|
|
14
|
+
* limitations under the License.
|
|
15
|
+
*/
|
|
16
|
+
import { Command, Flags } from '@oclif/core';
|
|
17
|
+
import { executeBuildPipeline } from '../pipeline-runner.js';
|
|
18
|
+
/**
|
|
19
|
+
* CLI command to run the complete SimplyUTAM compilation pipeline sequentially.
|
|
20
|
+
*/
|
|
21
|
+
export default class Build extends Command {
|
|
22
|
+
static summary = 'Run the end-to-end SimplyUTAM build pipeline (rules -> utam-generate -> overrides -> rewrite -> utam).';
|
|
23
|
+
static description = 'Standalone convenience runner executing all transformation and compilation stages sequentially. Note: Wireit tasks (configured via simply-utam init) remain the recommended mechanism for granular caching in everyday developer workflows.';
|
|
24
|
+
static examples = [
|
|
25
|
+
'<%= config.bin %> <%= command.id %>',
|
|
26
|
+
'<%= config.bin %> <%= command.id %> --dry-run',
|
|
27
|
+
];
|
|
28
|
+
static enableJsonFlag = true;
|
|
29
|
+
static flags = {
|
|
30
|
+
source: Flags.string({
|
|
31
|
+
char: 's',
|
|
32
|
+
summary: 'Specific source directory or directories to process (defaults to discovered package directories).',
|
|
33
|
+
multiple: true,
|
|
34
|
+
}),
|
|
35
|
+
'project-dir': Flags.string({
|
|
36
|
+
summary: 'Root directory of the project.',
|
|
37
|
+
default: '.',
|
|
38
|
+
}),
|
|
39
|
+
'generator-config': Flags.string({
|
|
40
|
+
summary: 'Path to generator.config.json.',
|
|
41
|
+
default: 'generator.config.json',
|
|
42
|
+
}),
|
|
43
|
+
'utam-config': Flags.string({
|
|
44
|
+
summary: 'Path to utam.config.json.',
|
|
45
|
+
default: 'utam.config.json',
|
|
46
|
+
}),
|
|
47
|
+
'namespace-map': Flags.string({
|
|
48
|
+
summary: 'Path to namespace-map.json.',
|
|
49
|
+
default: '.utam/namespace-map.json',
|
|
50
|
+
}),
|
|
51
|
+
'dry-run': Flags.boolean({
|
|
52
|
+
char: 'd',
|
|
53
|
+
summary: 'Preview pipeline execution without invoking compilers or modifying files.',
|
|
54
|
+
default: false,
|
|
55
|
+
}),
|
|
56
|
+
verbose: Flags.boolean({
|
|
57
|
+
char: 'v',
|
|
58
|
+
summary: 'Enable detailed output.',
|
|
59
|
+
default: false,
|
|
60
|
+
}),
|
|
61
|
+
};
|
|
62
|
+
async run() {
|
|
63
|
+
const { flags } = await this.parse(Build);
|
|
64
|
+
this.log('Executing SimplyUTAM build pipeline...');
|
|
65
|
+
const result = await executeBuildPipeline({
|
|
66
|
+
projectDir: flags['project-dir'],
|
|
67
|
+
sourceDirs: flags.source,
|
|
68
|
+
generatorConfigPath: flags['generator-config'],
|
|
69
|
+
utamConfigPath: flags['utam-config'],
|
|
70
|
+
namespaceMapPath: flags['namespace-map'],
|
|
71
|
+
dryRun: flags['dry-run'],
|
|
72
|
+
onStage: (stage, status, message) => {
|
|
73
|
+
const symbol = status === 'success' ? '✓' : status === 'skip' ? '○' : status === 'error' ? '✗' : '►';
|
|
74
|
+
const msgSuffix = message ? `: ${message}` : '';
|
|
75
|
+
this.log(` ${symbol} [${stage}] ${status}${msgSuffix}`);
|
|
76
|
+
},
|
|
77
|
+
});
|
|
78
|
+
if (!result.success) {
|
|
79
|
+
this.error(`Build pipeline failed:\n${result.errors.join('\n')}`, { exit: 1 });
|
|
80
|
+
}
|
|
81
|
+
this.log('\nSimplyUTAM build pipeline completed successfully.');
|
|
82
|
+
return result;
|
|
83
|
+
}
|
|
84
|
+
}
|
|
85
|
+
//# sourceMappingURL=build.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"build.js","sourceRoot":"","sources":["../../src/commands/build.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
import { Command } from '@oclif/core';
|
|
2
|
+
import { type ScaffoldResult } from '@simplysf/simply-utam-core';
|
|
3
|
+
/**
|
|
4
|
+
* CLI command to scaffold SimplyUTAM configurations, Wireit tasks, and namespace maps.
|
|
5
|
+
*/
|
|
6
|
+
export default class Init extends Command {
|
|
7
|
+
static summary: string;
|
|
8
|
+
static description: string;
|
|
9
|
+
static examples: string[];
|
|
10
|
+
static enableJsonFlag: boolean;
|
|
11
|
+
static flags: {
|
|
12
|
+
'project-dir': import("@oclif/core/interfaces").OptionFlag<string, import("@oclif/core/interfaces").CustomOptions>;
|
|
13
|
+
'source-dir': import("@oclif/core/interfaces").OptionFlag<string | undefined, import("@oclif/core/interfaces").CustomOptions>;
|
|
14
|
+
'app-name': import("@oclif/core/interfaces").OptionFlag<string | undefined, import("@oclif/core/interfaces").CustomOptions>;
|
|
15
|
+
force: import("@oclif/core/interfaces").BooleanFlag<boolean>;
|
|
16
|
+
'dry-run': import("@oclif/core/interfaces").BooleanFlag<boolean>;
|
|
17
|
+
verbose: import("@oclif/core/interfaces").BooleanFlag<boolean>;
|
|
18
|
+
};
|
|
19
|
+
run(): Promise<ScaffoldResult>;
|
|
20
|
+
}
|
|
@@ -0,0 +1,101 @@
|
|
|
1
|
+
/*
|
|
2
|
+
* Copyright (c) 2026, SimplySF.
|
|
3
|
+
*
|
|
4
|
+
* Licensed under the Apache License, Version 2.0 (the "License");
|
|
5
|
+
* you may not use this file except in compliance with the License.
|
|
6
|
+
* You may obtain a copy of the License at
|
|
7
|
+
*
|
|
8
|
+
* http://www.apache.org/licenses/LICENSE-2.0
|
|
9
|
+
*
|
|
10
|
+
* Unless required by applicable law or agreed to in writing, software
|
|
11
|
+
* distributed under the License is distributed on an "AS IS" BASIS,
|
|
12
|
+
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
|
13
|
+
* See the License for the specific language governing permissions and
|
|
14
|
+
* limitations under the License.
|
|
15
|
+
*/
|
|
16
|
+
import * as path from 'node:path';
|
|
17
|
+
import { Command, Flags } from '@oclif/core';
|
|
18
|
+
import { scaffoldProject } from '@simplysf/simply-utam-core';
|
|
19
|
+
/**
|
|
20
|
+
* CLI command to scaffold SimplyUTAM configurations, Wireit tasks, and namespace maps.
|
|
21
|
+
*/
|
|
22
|
+
export default class Init extends Command {
|
|
23
|
+
static summary = 'Scaffold UTAM configurations, Wireit tasks, and namespace maps in a Salesforce project.';
|
|
24
|
+
static description = 'Inspects the target project, generates generator.config.json, utam.config.json, wdio.conf.mjs, and .utam/namespace-map.json, and non-destructively injects standard Wireit tasks into package.json.';
|
|
25
|
+
static examples = [
|
|
26
|
+
'<%= config.bin %> <%= command.id %>',
|
|
27
|
+
'<%= config.bin %> <%= command.id %> --source-dir force-app --app-name my-app',
|
|
28
|
+
'<%= config.bin %> <%= command.id %> --dry-run',
|
|
29
|
+
];
|
|
30
|
+
static enableJsonFlag = true;
|
|
31
|
+
static flags = {
|
|
32
|
+
'project-dir': Flags.string({
|
|
33
|
+
summary: 'Root directory of the consumer project.',
|
|
34
|
+
default: '.',
|
|
35
|
+
}),
|
|
36
|
+
'source-dir': Flags.string({
|
|
37
|
+
char: 's',
|
|
38
|
+
summary: 'Primary Salesforce source directory (auto-detected from sfdx-project.json if omitted).',
|
|
39
|
+
}),
|
|
40
|
+
'app-name': Flags.string({
|
|
41
|
+
char: 'a',
|
|
42
|
+
summary: 'Application name for UTAM namespaces (defaults to package.json name).',
|
|
43
|
+
}),
|
|
44
|
+
force: Flags.boolean({
|
|
45
|
+
char: 'f',
|
|
46
|
+
summary: 'Overwrite existing configuration files.',
|
|
47
|
+
default: false,
|
|
48
|
+
}),
|
|
49
|
+
'dry-run': Flags.boolean({
|
|
50
|
+
char: 'd',
|
|
51
|
+
summary: 'Preview modifications without writing to disk.',
|
|
52
|
+
default: false,
|
|
53
|
+
}),
|
|
54
|
+
verbose: Flags.boolean({
|
|
55
|
+
char: 'v',
|
|
56
|
+
summary: 'Enable detailed output.',
|
|
57
|
+
default: false,
|
|
58
|
+
}),
|
|
59
|
+
};
|
|
60
|
+
async run() {
|
|
61
|
+
const { flags } = await this.parse(Init);
|
|
62
|
+
const resolvedTarget = path.resolve(flags['project-dir']);
|
|
63
|
+
const result = await scaffoldProject({
|
|
64
|
+
projectDir: flags['project-dir'],
|
|
65
|
+
sourceDir: flags['source-dir'],
|
|
66
|
+
appName: flags['app-name'],
|
|
67
|
+
force: flags.force,
|
|
68
|
+
dryRun: flags['dry-run'],
|
|
69
|
+
});
|
|
70
|
+
if (flags['dry-run']) {
|
|
71
|
+
this.log(`[dry-run] Project scaffolding preview for: ${resolvedTarget}`);
|
|
72
|
+
if (result.createdFiles.length > 0) {
|
|
73
|
+
this.log(`Files that would be created: ${result.createdFiles.join(', ')}`);
|
|
74
|
+
}
|
|
75
|
+
if (result.skippedFiles.length > 0) {
|
|
76
|
+
this.log(`Files that would be skipped (already exist, use --force to overwrite): ${result.skippedFiles.join(', ')}`);
|
|
77
|
+
}
|
|
78
|
+
if (result.modifiedFiles.length > 0) {
|
|
79
|
+
this.log(`Files that would be updated: ${result.modifiedFiles.join(', ')}`);
|
|
80
|
+
}
|
|
81
|
+
}
|
|
82
|
+
else {
|
|
83
|
+
this.log(`Scaffolding SimplyUTAM in: ${resolvedTarget}`);
|
|
84
|
+
if (result.createdFiles.length > 0) {
|
|
85
|
+
this.log(`Created files: ${result.createdFiles.join(', ')}`);
|
|
86
|
+
}
|
|
87
|
+
if (result.skippedFiles.length > 0) {
|
|
88
|
+
this.log(`Skipped existing files (use --force to overwrite): ${result.skippedFiles.join(', ')}`);
|
|
89
|
+
}
|
|
90
|
+
if (result.modifiedFiles.length > 0) {
|
|
91
|
+
this.log(`Updated files: ${result.modifiedFiles.join(', ')}`);
|
|
92
|
+
}
|
|
93
|
+
}
|
|
94
|
+
if (result.missingDependencies.length > 0) {
|
|
95
|
+
this.log(`\nRecommended devDependencies missing: ${result.missingDependencies.join(' ')}`);
|
|
96
|
+
this.log(`Run: npm install -D ${result.missingDependencies.join(' ')}`);
|
|
97
|
+
}
|
|
98
|
+
return result;
|
|
99
|
+
}
|
|
100
|
+
}
|
|
101
|
+
//# sourceMappingURL=init.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"init.js","sourceRoot":"","sources":["../../src/commands/init.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
import { Command } from '@oclif/core';
|
|
2
|
+
import { type ApplyOverridesResult } from '@simplysf/simply-utam-core';
|
|
3
|
+
/**
|
|
4
|
+
* CLI command to merge *.utam-overrides.json files into generated UTAM schemas.
|
|
5
|
+
*/
|
|
6
|
+
export default class Overrides extends Command {
|
|
7
|
+
static summary: string;
|
|
8
|
+
static description: string;
|
|
9
|
+
static examples: string[];
|
|
10
|
+
static enableJsonFlag: boolean;
|
|
11
|
+
static flags: {
|
|
12
|
+
source: import("@oclif/core/interfaces").OptionFlag<string[] | undefined, import("@oclif/core/interfaces").CustomOptions>;
|
|
13
|
+
'project-dir': import("@oclif/core/interfaces").OptionFlag<string, import("@oclif/core/interfaces").CustomOptions>;
|
|
14
|
+
'dry-run': import("@oclif/core/interfaces").BooleanFlag<boolean>;
|
|
15
|
+
verbose: import("@oclif/core/interfaces").BooleanFlag<boolean>;
|
|
16
|
+
};
|
|
17
|
+
run(): Promise<ApplyOverridesResult>;
|
|
18
|
+
}
|
|
@@ -0,0 +1,76 @@
|
|
|
1
|
+
/*
|
|
2
|
+
* Copyright (c) 2026, SimplySF.
|
|
3
|
+
*
|
|
4
|
+
* Licensed under the Apache License, Version 2.0 (the "License");
|
|
5
|
+
* you may not use this file except in compliance with the License.
|
|
6
|
+
* You may obtain a copy of the License at
|
|
7
|
+
*
|
|
8
|
+
* http://www.apache.org/licenses/LICENSE-2.0
|
|
9
|
+
*
|
|
10
|
+
* Unless required by applicable law or agreed to in writing, software
|
|
11
|
+
* distributed under the License is distributed on an "AS IS" BASIS,
|
|
12
|
+
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
|
13
|
+
* See the License for the specific language governing permissions and
|
|
14
|
+
* limitations under the License.
|
|
15
|
+
*/
|
|
16
|
+
import { Command, Flags } from '@oclif/core';
|
|
17
|
+
import { applyUtamOverrides } from '@simplysf/simply-utam-core';
|
|
18
|
+
/**
|
|
19
|
+
* CLI command to merge *.utam-overrides.json files into generated UTAM schemas.
|
|
20
|
+
*/
|
|
21
|
+
export default class Overrides extends Command {
|
|
22
|
+
static summary = 'Merge *.utam-overrides.json files into generated UTAM page object schemas.';
|
|
23
|
+
static description = 'Recursively searches source directories for *.utam-overrides.json files, locates corresponding compiled *.utam.json schemas, and performs deep AST merging while preserving JSON indentation.';
|
|
24
|
+
static examples = [
|
|
25
|
+
'<%= config.bin %> <%= command.id %>',
|
|
26
|
+
'<%= config.bin %> <%= command.id %> --source force-app',
|
|
27
|
+
'<%= config.bin %> <%= command.id %> --dry-run',
|
|
28
|
+
];
|
|
29
|
+
static enableJsonFlag = true;
|
|
30
|
+
static flags = {
|
|
31
|
+
source: Flags.string({
|
|
32
|
+
char: 's',
|
|
33
|
+
summary: 'Specific source directory or directories to scan (defaults to discovered package directories).',
|
|
34
|
+
multiple: true,
|
|
35
|
+
}),
|
|
36
|
+
'project-dir': Flags.string({
|
|
37
|
+
summary: 'Root directory of the project.',
|
|
38
|
+
default: '.',
|
|
39
|
+
}),
|
|
40
|
+
'dry-run': Flags.boolean({
|
|
41
|
+
char: 'd',
|
|
42
|
+
summary: 'Preview overrides without modifying files on disk.',
|
|
43
|
+
default: false,
|
|
44
|
+
}),
|
|
45
|
+
verbose: Flags.boolean({
|
|
46
|
+
char: 'v',
|
|
47
|
+
summary: 'Enable detailed output.',
|
|
48
|
+
default: false,
|
|
49
|
+
}),
|
|
50
|
+
};
|
|
51
|
+
async run() {
|
|
52
|
+
const { flags } = await this.parse(Overrides);
|
|
53
|
+
const result = applyUtamOverrides({
|
|
54
|
+
rootDir: flags['project-dir'],
|
|
55
|
+
sourceDirs: flags.source,
|
|
56
|
+
dryRun: flags['dry-run'],
|
|
57
|
+
verbose: flags.verbose,
|
|
58
|
+
});
|
|
59
|
+
if (flags['dry-run']) {
|
|
60
|
+
this.log('[dry-run] UTAM overrides preview:');
|
|
61
|
+
}
|
|
62
|
+
this.log(`Scanned ${result.scannedFilesCount} override files; modified ${result.modifiedFilesCount} UTAM schemas (${result.totalOverridesApplied} overrides applied).`);
|
|
63
|
+
if (flags.verbose) {
|
|
64
|
+
for (const res of result.results) {
|
|
65
|
+
if (res.applied) {
|
|
66
|
+
this.log(` - Applied to ${res.generatedUtamFilePath}`);
|
|
67
|
+
}
|
|
68
|
+
else if (res.error) {
|
|
69
|
+
this.log(` - Error on ${res.overrideFilePath}: ${res.error}`);
|
|
70
|
+
}
|
|
71
|
+
}
|
|
72
|
+
}
|
|
73
|
+
return result;
|
|
74
|
+
}
|
|
75
|
+
}
|
|
76
|
+
//# sourceMappingURL=overrides.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"overrides.js","sourceRoot":"","sources":["../../src/commands/overrides.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;GAcG;AAEH,OAAO,EAAE,OAAO,EAAE,KAAK,EAAE,MAAM,aAAa,CAAC;AAC7C,OAAO,EAAE,kBAAkB,EAA6B,MAAM,4BAA4B,CAAC;AAE3F;;GAEG;AACH,MAAM,CAAC,OAAO,OAAO,SAAU,SAAQ,OAAO;IACrC,MAAM,CAAU,OAAO,GAAG,4EAA4E,CAAC;IAEvG,MAAM,CAAU,WAAW,GAChC,+LAA+L,CAAC;IAE3L,MAAM,CAAU,QAAQ,GAAG;QAChC,qCAAqC;QACrC,wDAAwD;QACxD,+CAA+C;KAChD,CAAC;IAEK,MAAM,CAAU,cAAc,GAAG,IAAI,CAAC;IAEtC,MAAM,CAAU,KAAK,GAAG;QAC7B,MAAM,EAAE,KAAK,CAAC,MAAM,CAAC;YACnB,IAAI,EAAE,GAAG;YACT,OAAO,EAAE,gGAAgG;YACzG,QAAQ,EAAE,IAAI;SACf,CAAC;QACF,aAAa,EAAE,KAAK,CAAC,MAAM,CAAC;YAC1B,OAAO,EAAE,gCAAgC;YACzC,OAAO,EAAE,GAAG;SACb,CAAC;QACF,SAAS,EAAE,KAAK,CAAC,OAAO,CAAC;YACvB,IAAI,EAAE,GAAG;YACT,OAAO,EAAE,oDAAoD;YAC7D,OAAO,EAAE,KAAK;SACf,CAAC;QACF,OAAO,EAAE,KAAK,CAAC,OAAO,CAAC;YACrB,IAAI,EAAE,GAAG;YACT,OAAO,EAAE,yBAAyB;YAClC,OAAO,EAAE,KAAK;SACf,CAAC;KACH,CAAC;IAEK,KAAK,CAAC,GAAG;QACd,MAAM,EAAE,KAAK,EAAE,GAAG,MAAM,IAAI,CAAC,KAAK,CAAC,SAAS,CAAC,CAAC;QAE9C,MAAM,MAAM,GAAG,kBAAkB,CAAC;YAChC,OAAO,EAAE,KAAK,CAAC,aAAa,CAAC;YAC7B,UAAU,EAAE,KAAK,CAAC,MAAM;YACxB,MAAM,EAAE,KAAK,CAAC,SAAS,CAAC;YACxB,OAAO,EAAE,KAAK,CAAC,OAAO;SACvB,CAAC,CAAC;QAEH,IAAI,KAAK,CAAC,SAAS,CAAC,EAAE,CAAC;YACrB,IAAI,CAAC,GAAG,CAAC,mCAAmC,CAAC,CAAC;QAChD,CAAC;QAED,IAAI,CAAC,GAAG,CACN,WAAW,MAAM,CAAC,iBAAiB,6BAA6B,MAAM,CAAC,kBAAkB,kBAAkB,MAAM,CAAC,qBAAqB,sBAAsB,CAC9J,CAAC;QAEF,IAAI,KAAK,CAAC,OAAO,EAAE,CAAC;YAClB,KAAK,MAAM,GAAG,IAAI,MAAM,CAAC,OAAO,EAAE,CAAC;gBACjC,IAAI,GAAG,CAAC,OAAO,EAAE,CAAC;oBAChB,IAAI,CAAC,GAAG,CAAC,kBAAkB,GAAG,CAAC,qBAAqB,EAAE,CAAC,CAAC;gBAC1D,CAAC;qBAAM,IAAI,GAAG,CAAC,KAAK,EAAE,CAAC;oBACrB,IAAI,CAAC,GAAG,CAAC,gBAAgB,GAAG,CAAC,gBAAgB,KAAK,GAAG,CAAC,KAAK,EAAE,CAAC,CAAC;gBACjE,CAAC;YACH,CAAC;QACH,CAAC;QAED,OAAO,MAAM,CAAC;IAChB,CAAC"}
|
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
import { Command } from '@oclif/core';
|
|
2
|
+
import { type RewriteNamespacesResult } from '@simplysf/simply-utam-core';
|
|
3
|
+
/**
|
|
4
|
+
* CLI command to rewrite component namespace prefixes across generated *.utam.json schemas.
|
|
5
|
+
*/
|
|
6
|
+
export default class Rewrite extends Command {
|
|
7
|
+
static summary: string;
|
|
8
|
+
static description: string;
|
|
9
|
+
static examples: string[];
|
|
10
|
+
static enableJsonFlag: boolean;
|
|
11
|
+
static flags: {
|
|
12
|
+
source: import("@oclif/core/interfaces").OptionFlag<string[] | undefined, import("@oclif/core/interfaces").CustomOptions>;
|
|
13
|
+
config: import("@oclif/core/interfaces").OptionFlag<string, import("@oclif/core/interfaces").CustomOptions>;
|
|
14
|
+
'project-dir': import("@oclif/core/interfaces").OptionFlag<string, import("@oclif/core/interfaces").CustomOptions>;
|
|
15
|
+
'dry-run': import("@oclif/core/interfaces").BooleanFlag<boolean>;
|
|
16
|
+
verbose: import("@oclif/core/interfaces").BooleanFlag<boolean>;
|
|
17
|
+
};
|
|
18
|
+
run(): Promise<RewriteNamespacesResult>;
|
|
19
|
+
}
|
|
@@ -0,0 +1,85 @@
|
|
|
1
|
+
/*
|
|
2
|
+
* Copyright (c) 2026, SimplySF.
|
|
3
|
+
*
|
|
4
|
+
* Licensed under the Apache License, Version 2.0 (the "License");
|
|
5
|
+
* you may not use this file except in compliance with the License.
|
|
6
|
+
* You may obtain a copy of the License at
|
|
7
|
+
*
|
|
8
|
+
* http://www.apache.org/licenses/LICENSE-2.0
|
|
9
|
+
*
|
|
10
|
+
* Unless required by applicable law or agreed to in writing, software
|
|
11
|
+
* distributed under the License is distributed on an "AS IS" BASIS,
|
|
12
|
+
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
|
13
|
+
* See the License for the specific language governing permissions and
|
|
14
|
+
* limitations under the License.
|
|
15
|
+
*/
|
|
16
|
+
import { Command, Flags } from '@oclif/core';
|
|
17
|
+
import { rewriteUtamNamespaces } from '@simplysf/simply-utam-core';
|
|
18
|
+
/**
|
|
19
|
+
* CLI command to rewrite component namespace prefixes across generated *.utam.json schemas.
|
|
20
|
+
*/
|
|
21
|
+
export default class Rewrite extends Command {
|
|
22
|
+
static summary = 'Rewrite namespace prefixes across generated UTAM page object schemas.';
|
|
23
|
+
static description = 'Reads namespace mappings from a configuration file (or defaults to .utam/namespace-map.json) and replaces target component namespaces in *.utam.json schemas.';
|
|
24
|
+
static examples = [
|
|
25
|
+
'<%= config.bin %> <%= command.id %>',
|
|
26
|
+
'<%= config.bin %> <%= command.id %> --config .utam/namespace-map.json',
|
|
27
|
+
'<%= config.bin %> <%= command.id %> --dry-run',
|
|
28
|
+
];
|
|
29
|
+
static enableJsonFlag = true;
|
|
30
|
+
static flags = {
|
|
31
|
+
source: Flags.string({
|
|
32
|
+
char: 's',
|
|
33
|
+
summary: 'Specific source directory or directories to scan (defaults to discovered package directories).',
|
|
34
|
+
multiple: true,
|
|
35
|
+
}),
|
|
36
|
+
config: Flags.string({
|
|
37
|
+
char: 'c',
|
|
38
|
+
summary: 'Path to namespace mapping configuration file.',
|
|
39
|
+
default: '.utam/namespace-map.json',
|
|
40
|
+
}),
|
|
41
|
+
'project-dir': Flags.string({
|
|
42
|
+
summary: 'Root directory of the project.',
|
|
43
|
+
default: '.',
|
|
44
|
+
}),
|
|
45
|
+
'dry-run': Flags.boolean({
|
|
46
|
+
char: 'd',
|
|
47
|
+
summary: 'Preview namespace rewrites without modifying files on disk.',
|
|
48
|
+
default: false,
|
|
49
|
+
}),
|
|
50
|
+
verbose: Flags.boolean({
|
|
51
|
+
char: 'v',
|
|
52
|
+
summary: 'Enable detailed output.',
|
|
53
|
+
default: false,
|
|
54
|
+
}),
|
|
55
|
+
};
|
|
56
|
+
async run() {
|
|
57
|
+
const { flags } = await this.parse(Rewrite);
|
|
58
|
+
const result = rewriteUtamNamespaces({
|
|
59
|
+
rootDir: flags['project-dir'],
|
|
60
|
+
sourceDirs: flags.source,
|
|
61
|
+
configFile: flags.config,
|
|
62
|
+
dryRun: flags['dry-run'],
|
|
63
|
+
verbose: flags.verbose,
|
|
64
|
+
});
|
|
65
|
+
if (result.configMissingOrEmpty) {
|
|
66
|
+
if (result.notice) {
|
|
67
|
+
this.log(result.notice);
|
|
68
|
+
}
|
|
69
|
+
return result;
|
|
70
|
+
}
|
|
71
|
+
if (flags['dry-run']) {
|
|
72
|
+
this.log('[dry-run] Namespace rewrite preview:');
|
|
73
|
+
}
|
|
74
|
+
this.log(`Scanned ${result.filesScanned} UTAM schemas; modified ${result.filesModified} files (${result.totalReplacements} namespace replacements).`);
|
|
75
|
+
if (flags.verbose) {
|
|
76
|
+
for (const res of result.results) {
|
|
77
|
+
if (res.applied) {
|
|
78
|
+
this.log(` - Rewrote ${res.filePath} (${res.changes.length} replacements)`);
|
|
79
|
+
}
|
|
80
|
+
}
|
|
81
|
+
}
|
|
82
|
+
return result;
|
|
83
|
+
}
|
|
84
|
+
}
|
|
85
|
+
//# sourceMappingURL=rewrite.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"rewrite.js","sourceRoot":"","sources":["../../src/commands/rewrite.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;GAcG;AAEH,OAAO,EAAE,OAAO,EAAE,KAAK,EAAE,MAAM,aAAa,CAAC;AAC7C,OAAO,EAAE,qBAAqB,EAAgC,MAAM,4BAA4B,CAAC;AAEjG;;GAEG;AACH,MAAM,CAAC,OAAO,OAAO,OAAQ,SAAQ,OAAO;IACnC,MAAM,CAAU,OAAO,GAAG,uEAAuE,CAAC;IAElG,MAAM,CAAU,WAAW,GAChC,+JAA+J,CAAC;IAE3J,MAAM,CAAU,QAAQ,GAAG;QAChC,qCAAqC;QACrC,uEAAuE;QACvE,+CAA+C;KAChD,CAAC;IAEK,MAAM,CAAU,cAAc,GAAG,IAAI,CAAC;IAEtC,MAAM,CAAU,KAAK,GAAG;QAC7B,MAAM,EAAE,KAAK,CAAC,MAAM,CAAC;YACnB,IAAI,EAAE,GAAG;YACT,OAAO,EAAE,gGAAgG;YACzG,QAAQ,EAAE,IAAI;SACf,CAAC;QACF,MAAM,EAAE,KAAK,CAAC,MAAM,CAAC;YACnB,IAAI,EAAE,GAAG;YACT,OAAO,EAAE,+CAA+C;YACxD,OAAO,EAAE,0BAA0B;SACpC,CAAC;QACF,aAAa,EAAE,KAAK,CAAC,MAAM,CAAC;YAC1B,OAAO,EAAE,gCAAgC;YACzC,OAAO,EAAE,GAAG;SACb,CAAC;QACF,SAAS,EAAE,KAAK,CAAC,OAAO,CAAC;YACvB,IAAI,EAAE,GAAG;YACT,OAAO,EAAE,6DAA6D;YACtE,OAAO,EAAE,KAAK;SACf,CAAC;QACF,OAAO,EAAE,KAAK,CAAC,OAAO,CAAC;YACrB,IAAI,EAAE,GAAG;YACT,OAAO,EAAE,yBAAyB;YAClC,OAAO,EAAE,KAAK;SACf,CAAC;KACH,CAAC;IAEK,KAAK,CAAC,GAAG;QACd,MAAM,EAAE,KAAK,EAAE,GAAG,MAAM,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC;QAE5C,MAAM,MAAM,GAAG,qBAAqB,CAAC;YACnC,OAAO,EAAE,KAAK,CAAC,aAAa,CAAC;YAC7B,UAAU,EAAE,KAAK,CAAC,MAAM;YACxB,UAAU,EAAE,KAAK,CAAC,MAAM;YACxB,MAAM,EAAE,KAAK,CAAC,SAAS,CAAC;YACxB,OAAO,EAAE,KAAK,CAAC,OAAO;SACvB,CAAC,CAAC;QAEH,IAAI,MAAM,CAAC,oBAAoB,EAAE,CAAC;YAChC,IAAI,MAAM,CAAC,MAAM,EAAE,CAAC;gBAClB,IAAI,CAAC,GAAG,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC;YAC1B,CAAC;YACD,OAAO,MAAM,CAAC;QAChB,CAAC;QAED,IAAI,KAAK,CAAC,SAAS,CAAC,EAAE,CAAC;YACrB,IAAI,CAAC,GAAG,CAAC,sCAAsC,CAAC,CAAC;QACnD,CAAC;QAED,IAAI,CAAC,GAAG,CACN,WAAW,MAAM,CAAC,YAAY,2BAA2B,MAAM,CAAC,aAAa,WAAW,MAAM,CAAC,iBAAiB,2BAA2B,CAC5I,CAAC;QAEF,IAAI,KAAK,CAAC,OAAO,EAAE,CAAC;YAClB,KAAK,MAAM,GAAG,IAAI,MAAM,CAAC,OAAO,EAAE,CAAC;gBACjC,IAAI,GAAG,CAAC,OAAO,EAAE,CAAC;oBAChB,IAAI,CAAC,GAAG,CAAC,eAAe,GAAG,CAAC,QAAQ,KAAK,GAAG,CAAC,OAAO,CAAC,MAAM,gBAAgB,CAAC,CAAC;gBAC/E,CAAC;YACH,CAAC;QACH,CAAC;QAED,OAAO,MAAM,CAAC;IAChB,CAAC"}
|
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
import { Command } from '@oclif/core';
|
|
2
|
+
import { type GenerateRulesResult } from '@simplysf/simply-utam-core';
|
|
3
|
+
/**
|
|
4
|
+
* CLI command to scan LWC components and generate UTAM .rules.json schemas.
|
|
5
|
+
*/
|
|
6
|
+
export default class Rules extends Command {
|
|
7
|
+
static summary: string;
|
|
8
|
+
static description: string;
|
|
9
|
+
static examples: string[];
|
|
10
|
+
static enableJsonFlag: boolean;
|
|
11
|
+
static flags: {
|
|
12
|
+
source: import("@oclif/core/interfaces").OptionFlag<string[] | undefined, import("@oclif/core/interfaces").CustomOptions>;
|
|
13
|
+
namespace: import("@oclif/core/interfaces").OptionFlag<string | undefined, import("@oclif/core/interfaces").CustomOptions>;
|
|
14
|
+
'project-dir': import("@oclif/core/interfaces").OptionFlag<string, import("@oclif/core/interfaces").CustomOptions>;
|
|
15
|
+
'dry-run': import("@oclif/core/interfaces").BooleanFlag<boolean>;
|
|
16
|
+
verbose: import("@oclif/core/interfaces").BooleanFlag<boolean>;
|
|
17
|
+
};
|
|
18
|
+
run(): Promise<GenerateRulesResult>;
|
|
19
|
+
}
|