@octoberswimmer/aer-sf-plugin 0.0.2 → 0.0.4
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 +49 -11
- package/lib/aer.js +6 -0
- package/lib/aer.js.map +1 -1
- package/lib/aerBinary.d.ts +77 -0
- package/lib/aerBinary.js +224 -10
- package/lib/aerBinary.js.map +1 -1
- package/lib/commands/aer/apex/run/test.d.ts +1 -0
- package/lib/commands/aer/apex/run/test.js +43 -3
- package/lib/commands/aer/apex/run/test.js.map +1 -1
- package/lib/commands/aer/lightning/dev/component.d.ts +17 -0
- package/lib/commands/aer/lightning/dev/component.js +160 -0
- package/lib/commands/aer/lightning/dev/component.js.map +1 -0
- package/lib/lwc.d.ts +7 -0
- package/lib/lwc.js +67 -0
- package/lib/lwc.js.map +1 -0
- package/messages/aer.apex.run.test.md +16 -0
- package/messages/aer.lightning.dev.component.md +87 -0
- package/oclif.manifest.json +96 -1
- package/package.json +10 -2
- package/LICENSE +0 -20
package/README.md
CHANGED
|
@@ -1,21 +1,21 @@
|
|
|
1
1
|
# @octoberswimmer/aer-sf-plugin
|
|
2
2
|
|
|
3
3
|
A [Salesforce CLI](https://developer.salesforce.com/tools/salesforcecli) plugin
|
|
4
|
-
that runs Apex tests locally using
|
|
4
|
+
that runs Apex tests and previews Lightning Web Components locally using
|
|
5
|
+
[aer](https://github.com/octoberswimmer/aer-dist).
|
|
5
6
|
|
|
6
7
|
```
|
|
7
8
|
sf aer apex run test
|
|
8
9
|
```
|
|
9
10
|
|
|
10
|
-
works the same way as
|
|
11
|
+
works the same way as `sf apex run test`, but runs tests locally via `aer test`.
|
|
11
12
|
|
|
12
13
|
```
|
|
13
|
-
sf
|
|
14
|
+
sf aer lightning dev component
|
|
14
15
|
```
|
|
15
16
|
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
copy.
|
|
17
|
+
works the same way as `sf lightning dev component`, but previews LWC components
|
|
18
|
+
locally via `aer server`.
|
|
19
19
|
|
|
20
20
|
## Requirements
|
|
21
21
|
|
|
@@ -35,6 +35,8 @@ sf plugins install @octoberswimmer/aer-sf-plugin
|
|
|
35
35
|
|
|
36
36
|
## Usage
|
|
37
37
|
|
|
38
|
+
### Apex tests
|
|
39
|
+
|
|
38
40
|
Run every test in the project:
|
|
39
41
|
|
|
40
42
|
```
|
|
@@ -65,6 +67,30 @@ With code coverage:
|
|
|
65
67
|
sf aer apex run test --code-coverage --output-dir test-results
|
|
66
68
|
```
|
|
67
69
|
|
|
70
|
+
### LWC component preview
|
|
71
|
+
|
|
72
|
+
Select a component interactively and launch the preview:
|
|
73
|
+
|
|
74
|
+
```
|
|
75
|
+
sf aer lightning dev component
|
|
76
|
+
```
|
|
77
|
+
|
|
78
|
+
Preview a specific component by name:
|
|
79
|
+
|
|
80
|
+
```
|
|
81
|
+
sf aer lightning dev component --name myComponent
|
|
82
|
+
```
|
|
83
|
+
|
|
84
|
+
Open the component list in the browser instead of selecting interactively:
|
|
85
|
+
|
|
86
|
+
```
|
|
87
|
+
sf aer lightning dev component --client-select
|
|
88
|
+
```
|
|
89
|
+
|
|
90
|
+
The development server uses `aer server --watch` to serve your project's
|
|
91
|
+
source directly (no staging), so changes to component HTML, CSS, and
|
|
92
|
+
JavaScript are reflected immediately via hot module replacement.
|
|
93
|
+
|
|
68
94
|
## Locating the aer binary
|
|
69
95
|
|
|
70
96
|
When the plugin needs to invoke `aer`, it tries these sources in order:
|
|
@@ -83,9 +109,22 @@ When the plugin needs to invoke `aer`, it tries these sources in order:
|
|
|
83
109
|
platform, extracts it into the data directory above, and uses it for that
|
|
84
110
|
run and all later runs.
|
|
85
111
|
|
|
86
|
-
|
|
87
|
-
|
|
88
|
-
|
|
112
|
+
### Update checks
|
|
113
|
+
|
|
114
|
+
Once the plugin has downloaded its own copy of `aer`, each subsequent run starts
|
|
115
|
+
a background GitHub query (rate-limited to one check every 12 hours) to see
|
|
116
|
+
whether a newer release has been published. The query runs in parallel with
|
|
117
|
+
staging and the test execution, so it does not slow tests down. After the test
|
|
118
|
+
run finishes, if a newer release is available you'll be prompted to install it.
|
|
119
|
+
Decline and the same version won't be re-offered until something newer ships.
|
|
120
|
+
|
|
121
|
+
The check is skipped entirely when:
|
|
122
|
+
|
|
123
|
+
- `AER_BIN` is set or `aer` is on `PATH` (i.e. the user manages their own copy).
|
|
124
|
+
- The terminal is non-interactive (`--json`, no TTY).
|
|
125
|
+
|
|
126
|
+
To force an update outside the 12-hour window, delete the contents of the
|
|
127
|
+
`aer-bin/` directory (or the whole `aer-sf-plugin/` directory) and rerun.
|
|
89
128
|
|
|
90
129
|
In non-interactive environments (CI, `--json`) the plugin will not prompt; set
|
|
91
130
|
`AER_BIN` or install `aer` on `PATH` ahead of time.
|
|
@@ -160,5 +199,4 @@ node bin/dev.js aer apex run test --help
|
|
|
160
199
|
This plugin is open source, licensed under BSD-3-Clause.
|
|
161
200
|
|
|
162
201
|
Note that [aer](https://github.com/octoberswimmer/aer-dist) itself is not open
|
|
163
|
-
source — it is distributed as a binary under its own license.
|
|
164
|
-
and install aer separately for the plugin to do anything useful.
|
|
202
|
+
source — it is distributed as a binary under its own license.
|
package/lib/aer.js
CHANGED
|
@@ -24,6 +24,12 @@ export async function runAer(binaryPath, args, cwd) {
|
|
|
24
24
|
const child = spawn(binaryPath, args, {
|
|
25
25
|
cwd,
|
|
26
26
|
stdio: 'inherit',
|
|
27
|
+
env: {
|
|
28
|
+
...process.env,
|
|
29
|
+
// Suppress aer's own version-check notification — the plugin
|
|
30
|
+
// surfaces its own prompt to upgrade.
|
|
31
|
+
AER_AUTOUPDATE_DISABLED: '1',
|
|
32
|
+
},
|
|
27
33
|
});
|
|
28
34
|
child.on('error', (err) => {
|
|
29
35
|
if (err.code === 'ENOENT') {
|
package/lib/aer.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"aer.js","sourceRoot":"","sources":["../src/aer.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,EAAE,MAAM,oBAAoB,CAAC;AAa3C,MAAM,UAAU,YAAY,CAAC,GAAkB;IAC9C,MAAM,IAAI,GAAa,CAAC,MAAM,EAAE,GAAG,CAAC,SAAS,CAAC,CAAC;IAC/C,KAAK,MAAM,CAAC,IAAI,GAAG,CAAC,OAAO,EAAE,CAAC;QAC7B,IAAI,CAAC,IAAI,CAAC,UAAU,EAAE,CAAC,CAAC,CAAC;IAC1B,CAAC;IACD,IAAI,GAAG,CAAC,YAAY,KAAK,OAAO,IAAI,GAAG,CAAC,UAAU,EAAE,CAAC;QACpD,IAAI,CAAC,IAAI,CAAC,SAAS,EAAE,GAAG,CAAC,UAAU,CAAC,CAAC;IACtC,CAAC;SAAM,IAAI,GAAG,CAAC,YAAY,KAAK,MAAM,IAAI,GAAG,CAAC,UAAU,EAAE,CAAC;QAC1D,IAAI,CAAC,IAAI,CAAC,QAAQ,EAAE,GAAG,CAAC,UAAU,CAAC,CAAC;IACrC,CAAC;SAAM,IAAI,GAAG,CAAC,YAAY,KAAK,MAAM,IAAI,CAAC,GAAG,CAAC,UAAU,EAAE,CAAC;QAC3D,+CAA+C;QAC/C,IAAI,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;IACrB,CAAC;IACD,IAAI,GAAG,CAAC,YAAY,EAAE,CAAC;QACtB,IAAI,CAAC,IAAI,CAAC,YAAY,EAAE,GAAG,CAAC,YAAY,CAAC,CAAC;IAC3C,CAAC;IACD,OAAO,IAAI,CAAC;AACb,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,MAAM,CAAC,UAAkB,EAAE,IAAc,EAAE,GAAW;IAC3E,OAAO,IAAI,OAAO,CAAC,CAAC,cAAc,EAAE,aAAa,EAAE,EAAE;QACpD,MAAM,KAAK,GAAG,KAAK,CAAC,UAAU,EAAE,IAAI,EAAE;YACrC,GAAG;YACH,KAAK,EAAE,SAAS;
|
|
1
|
+
{"version":3,"file":"aer.js","sourceRoot":"","sources":["../src/aer.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,EAAE,MAAM,oBAAoB,CAAC;AAa3C,MAAM,UAAU,YAAY,CAAC,GAAkB;IAC9C,MAAM,IAAI,GAAa,CAAC,MAAM,EAAE,GAAG,CAAC,SAAS,CAAC,CAAC;IAC/C,KAAK,MAAM,CAAC,IAAI,GAAG,CAAC,OAAO,EAAE,CAAC;QAC7B,IAAI,CAAC,IAAI,CAAC,UAAU,EAAE,CAAC,CAAC,CAAC;IAC1B,CAAC;IACD,IAAI,GAAG,CAAC,YAAY,KAAK,OAAO,IAAI,GAAG,CAAC,UAAU,EAAE,CAAC;QACpD,IAAI,CAAC,IAAI,CAAC,SAAS,EAAE,GAAG,CAAC,UAAU,CAAC,CAAC;IACtC,CAAC;SAAM,IAAI,GAAG,CAAC,YAAY,KAAK,MAAM,IAAI,GAAG,CAAC,UAAU,EAAE,CAAC;QAC1D,IAAI,CAAC,IAAI,CAAC,QAAQ,EAAE,GAAG,CAAC,UAAU,CAAC,CAAC;IACrC,CAAC;SAAM,IAAI,GAAG,CAAC,YAAY,KAAK,MAAM,IAAI,CAAC,GAAG,CAAC,UAAU,EAAE,CAAC;QAC3D,+CAA+C;QAC/C,IAAI,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;IACrB,CAAC;IACD,IAAI,GAAG,CAAC,YAAY,EAAE,CAAC;QACtB,IAAI,CAAC,IAAI,CAAC,YAAY,EAAE,GAAG,CAAC,YAAY,CAAC,CAAC;IAC3C,CAAC;IACD,OAAO,IAAI,CAAC;AACb,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,MAAM,CAAC,UAAkB,EAAE,IAAc,EAAE,GAAW;IAC3E,OAAO,IAAI,OAAO,CAAC,CAAC,cAAc,EAAE,aAAa,EAAE,EAAE;QACpD,MAAM,KAAK,GAAG,KAAK,CAAC,UAAU,EAAE,IAAI,EAAE;YACrC,GAAG;YACH,KAAK,EAAE,SAAS;YAChB,GAAG,EAAE;gBACJ,GAAG,OAAO,CAAC,GAAG;gBACd,6DAA6D;gBAC7D,sCAAsC;gBACtC,uBAAuB,EAAE,GAAG;aAC5B;SACD,CAAC,CAAC;QACH,KAAK,CAAC,EAAE,CAAC,OAAO,EAAE,CAAC,GAA0B,EAAE,EAAE;YAChD,IAAI,GAAG,CAAC,IAAI,KAAK,QAAQ,EAAE,CAAC;gBAC3B,aAAa,CACZ,IAAI,KAAK,CACR,4BAA4B,UAAU,4CAA4C,CAClF,CACD,CAAC;gBACF,OAAO;YACR,CAAC;YACD,aAAa,CAAC,GAAG,CAAC,CAAC;QACpB,CAAC,CAAC,CAAC;QACH,KAAK,CAAC,EAAE,CAAC,MAAM,EAAE,CAAC,IAAI,EAAE,MAAM,EAAE,EAAE;YACjC,IAAI,MAAM,EAAE,CAAC;gBACZ,cAAc,CAAC,GAAG,GAAG,CAAC,MAAM,KAAK,QAAQ,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,MAAM,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;YACjF,CAAC;iBAAM,CAAC;gBACP,cAAc,CAAC,IAAI,IAAI,CAAC,CAAC,CAAC;YAC3B,CAAC;QACF,CAAC,CAAC,CAAC;IACJ,CAAC,CAAC,CAAC;AACJ,CAAC"}
|
package/lib/aerBinary.d.ts
CHANGED
|
@@ -22,12 +22,27 @@ export type EnsureAerOptions = {
|
|
|
22
22
|
export declare function ensureAerBinary(opts?: EnsureAerOptions): Promise<string>;
|
|
23
23
|
/** For tests: forget any cached binary path so the next call re-resolves. */
|
|
24
24
|
export declare function _resetAerBinaryCache(): void;
|
|
25
|
+
/** Module-private internals exposed for tests only. Not part of the public API. */
|
|
26
|
+
export declare const _internals: {
|
|
27
|
+
readonly replaceBinary: typeof replaceBinary;
|
|
28
|
+
};
|
|
25
29
|
/**
|
|
26
30
|
* Default storage directory for binaries downloaded by this plugin. Mirrors the
|
|
27
31
|
* conventions used by `envPaths` / oclif: respects XDG on Linux, Library/Application
|
|
28
32
|
* Support on macOS, and LOCALAPPDATA on Windows.
|
|
29
33
|
*/
|
|
30
34
|
export declare function defaultStorageDir(): string;
|
|
35
|
+
/**
|
|
36
|
+
* Install a new binary at `target`, using the same atomic-rename strategy as
|
|
37
|
+
* `aer upgrade` so that an in-use executable (notably on Windows) doesn't
|
|
38
|
+
* cause the install to fail.
|
|
39
|
+
*
|
|
40
|
+
* Unix: write to `.{name}.new`, then rename over the target — atomic.
|
|
41
|
+
* Windows: write to `.{name}.new`, rename existing target to `.{name}.old`,
|
|
42
|
+
* rename `.{name}.new` into place, then best-effort delete `.old`
|
|
43
|
+
* (which may stay around briefly if the file is still held open).
|
|
44
|
+
*/
|
|
45
|
+
declare function replaceBinary(binDir: string, binaryName: string, data: Buffer, target: string): Promise<void>;
|
|
31
46
|
export declare function platformDetails(version: string): {
|
|
32
47
|
platformKey: 'linux' | 'darwin' | 'windows';
|
|
33
48
|
cpuKey: 'amd64' | 'arm64';
|
|
@@ -35,3 +50,65 @@ export declare function platformDetails(version: string): {
|
|
|
35
50
|
archiveName: string;
|
|
36
51
|
};
|
|
37
52
|
export declare function readStoredVersion(storageDir: string): Promise<string | null>;
|
|
53
|
+
export type UpdateState = {
|
|
54
|
+
lastCheck?: number;
|
|
55
|
+
lastPromptVersion?: string;
|
|
56
|
+
};
|
|
57
|
+
export type PendingUpdate = {
|
|
58
|
+
installed: string;
|
|
59
|
+
latest: string;
|
|
60
|
+
};
|
|
61
|
+
export type UpdateCheckOptions = {
|
|
62
|
+
/** Absolute path to the aer binary to query for its --version. */
|
|
63
|
+
aerPath: string;
|
|
64
|
+
storageDir?: string;
|
|
65
|
+
log?: LogFn;
|
|
66
|
+
/** Override the rate-limit interval in ms (default 12h). Useful in tests. */
|
|
67
|
+
intervalMs?: number;
|
|
68
|
+
/** When true, ignore the rate-limit and always perform the GitHub query. */
|
|
69
|
+
force?: boolean;
|
|
70
|
+
/** Inject a clock for testing. */
|
|
71
|
+
now?: () => number;
|
|
72
|
+
/** Override the latest-version resolver (for testing). */
|
|
73
|
+
resolveLatest?: () => Promise<string>;
|
|
74
|
+
/** Override the installed-version resolver (for testing). */
|
|
75
|
+
queryInstalled?: (binaryPath: string) => Promise<string | null>;
|
|
76
|
+
};
|
|
77
|
+
/**
|
|
78
|
+
* Begin a background check for a newer aer release. Resolves with details about
|
|
79
|
+
* an available update, or null when no upgrade is needed for any of the following
|
|
80
|
+
* reasons: the rate-limit window hasn't elapsed since the last check, the binary
|
|
81
|
+
* couldn't be queried for its version, the latest tag matches what's installed,
|
|
82
|
+
* the user was already prompted for this version, or the network call failed
|
|
83
|
+
* (logged but not re-thrown).
|
|
84
|
+
*
|
|
85
|
+
* The installed version is read by running `<aerPath> --version` rather than
|
|
86
|
+
* trusting any cached VERSION file — that way the check survives upgrades
|
|
87
|
+
* performed outside the plugin (e.g. by `aer upgrade`) and also works for users
|
|
88
|
+
* who installed aer themselves on PATH.
|
|
89
|
+
*
|
|
90
|
+
* The lastCheck timestamp is persisted as soon as the GitHub query runs, so
|
|
91
|
+
* we don't query repeatedly even if no update is found. The lastPromptVersion
|
|
92
|
+
* is NOT persisted here — callers must invoke `recordPromptedVersion` once
|
|
93
|
+
* they've actually surfaced the prompt to the user.
|
|
94
|
+
*/
|
|
95
|
+
export declare function checkForUpdate(opts: UpdateCheckOptions): Promise<PendingUpdate | null>;
|
|
96
|
+
/**
|
|
97
|
+
* Run the given aer binary with `--version` and parse the reported version.
|
|
98
|
+
* Returns null if the binary doesn't run, doesn't print recognizable output,
|
|
99
|
+
* or takes too long.
|
|
100
|
+
*/
|
|
101
|
+
export declare function queryBinaryVersion(binaryPath: string): Promise<string | null>;
|
|
102
|
+
/**
|
|
103
|
+
* Persist that the user has been prompted about a version, so subsequent
|
|
104
|
+
* commands don't repeat the prompt for that same version.
|
|
105
|
+
*/
|
|
106
|
+
export declare function recordPromptedVersion(version: string, opts?: {
|
|
107
|
+
storageDir?: string;
|
|
108
|
+
}): Promise<void>;
|
|
109
|
+
/** Download and install a specific aer version into the plugin's storage dir. */
|
|
110
|
+
export declare function installAerVersion(version: string, opts?: {
|
|
111
|
+
storageDir?: string;
|
|
112
|
+
log?: LogFn;
|
|
113
|
+
}): Promise<string>;
|
|
114
|
+
export {};
|
package/lib/aerBinary.js
CHANGED
|
@@ -1,5 +1,6 @@
|
|
|
1
|
-
import { chmod, mkdir, mkdtemp, readFile, rm, stat, writeFile, access } from 'node:fs/promises';
|
|
1
|
+
import { chmod, mkdir, mkdtemp, readFile, rename, rm, stat, writeFile, access } from 'node:fs/promises';
|
|
2
2
|
import { constants as fsConstants, createWriteStream } from 'node:fs';
|
|
3
|
+
import { spawn } from 'node:child_process';
|
|
3
4
|
import { delimiter, join, resolve } from 'node:path';
|
|
4
5
|
import { homedir, tmpdir } from 'node:os';
|
|
5
6
|
import { get as httpsGet } from 'node:https';
|
|
@@ -9,6 +10,8 @@ const BINARY_NAME = process.platform === 'win32' ? 'aer.exe' : 'aer';
|
|
|
9
10
|
const VERSION_FILE = 'VERSION';
|
|
10
11
|
const PLUGIN_DIR_NAME = 'aer-sf-plugin';
|
|
11
12
|
const BIN_SUBDIR = 'aer-bin';
|
|
13
|
+
const UPDATE_STATE_FILE = 'update-check.json';
|
|
14
|
+
const UPDATE_CHECK_INTERVAL_MS = 1000 * 60 * 60 * 12; // 12 hours
|
|
12
15
|
let cachedAerPath = null;
|
|
13
16
|
let resolving = null;
|
|
14
17
|
/**
|
|
@@ -69,6 +72,12 @@ export function _resetAerBinaryCache() {
|
|
|
69
72
|
cachedAerPath = null;
|
|
70
73
|
resolving = null;
|
|
71
74
|
}
|
|
75
|
+
/** Module-private internals exposed for tests only. Not part of the public API. */
|
|
76
|
+
export const _internals = {
|
|
77
|
+
get replaceBinary() {
|
|
78
|
+
return replaceBinary;
|
|
79
|
+
},
|
|
80
|
+
};
|
|
72
81
|
/**
|
|
73
82
|
* Default storage directory for binaries downloaded by this plugin. Mirrors the
|
|
74
83
|
* conventions used by `envPaths` / oclif: respects XDG on Linux, Library/Application
|
|
@@ -105,18 +114,76 @@ async function downloadAndExtract(storageDir, version, log) {
|
|
|
105
114
|
log(`Fetching ${url}`);
|
|
106
115
|
await downloadFile(url, archivePath);
|
|
107
116
|
log(`Extracting ${binaryName}…`);
|
|
108
|
-
const
|
|
109
|
-
|
|
110
|
-
|
|
111
|
-
}
|
|
117
|
+
const data = readBinaryFromArchive(archivePath, binaryName);
|
|
118
|
+
const target = join(binDir, binaryName);
|
|
119
|
+
await replaceBinary(binDir, binaryName, data, target);
|
|
112
120
|
await writeFile(join(binDir, VERSION_FILE), version, 'utf8');
|
|
113
|
-
|
|
114
|
-
return extractedPath;
|
|
121
|
+
return target;
|
|
115
122
|
}
|
|
116
123
|
finally {
|
|
117
124
|
await rm(tempDir, { recursive: true, force: true });
|
|
118
125
|
}
|
|
119
126
|
}
|
|
127
|
+
/**
|
|
128
|
+
* Install a new binary at `target`, using the same atomic-rename strategy as
|
|
129
|
+
* `aer upgrade` so that an in-use executable (notably on Windows) doesn't
|
|
130
|
+
* cause the install to fail.
|
|
131
|
+
*
|
|
132
|
+
* Unix: write to `.{name}.new`, then rename over the target — atomic.
|
|
133
|
+
* Windows: write to `.{name}.new`, rename existing target to `.{name}.old`,
|
|
134
|
+
* rename `.{name}.new` into place, then best-effort delete `.old`
|
|
135
|
+
* (which may stay around briefly if the file is still held open).
|
|
136
|
+
*/
|
|
137
|
+
async function replaceBinary(binDir, binaryName, data, target) {
|
|
138
|
+
const newPath = join(binDir, `.${binaryName}.new`);
|
|
139
|
+
const oldPath = join(binDir, `.${binaryName}.old`);
|
|
140
|
+
await rm(newPath, { force: true });
|
|
141
|
+
await writeFile(newPath, data, { mode: 0o755 });
|
|
142
|
+
if (process.platform !== 'win32') {
|
|
143
|
+
// writeFile honors `mode` only on file creation; chmod explicitly so
|
|
144
|
+
// a leftover `.new` from a prior failed install still ends up +x.
|
|
145
|
+
await chmod(newPath, 0o755);
|
|
146
|
+
}
|
|
147
|
+
if (process.platform === 'win32') {
|
|
148
|
+
await rm(oldPath, { force: true });
|
|
149
|
+
const targetExists = await pathExists(target);
|
|
150
|
+
if (targetExists) {
|
|
151
|
+
try {
|
|
152
|
+
await rename(target, oldPath);
|
|
153
|
+
}
|
|
154
|
+
catch (err) {
|
|
155
|
+
await rm(newPath, { force: true }).catch(() => { });
|
|
156
|
+
throw new Error(`Failed to move current aer executable aside: ${err.message}`);
|
|
157
|
+
}
|
|
158
|
+
}
|
|
159
|
+
try {
|
|
160
|
+
await rename(newPath, target);
|
|
161
|
+
}
|
|
162
|
+
catch (err) {
|
|
163
|
+
if (targetExists) {
|
|
164
|
+
await rename(oldPath, target).catch(() => { });
|
|
165
|
+
}
|
|
166
|
+
throw new Error(`Failed to move new aer executable into place: ${err.message}`);
|
|
167
|
+
}
|
|
168
|
+
// Best-effort cleanup; on Windows this may fail if the binary is
|
|
169
|
+
// still mapped into a running process. The leftover .old file will
|
|
170
|
+
// be removed by the next install.
|
|
171
|
+
await rm(oldPath, { force: true }).catch(() => { });
|
|
172
|
+
}
|
|
173
|
+
else {
|
|
174
|
+
// rename(2) on Unix atomically replaces the target.
|
|
175
|
+
await rename(newPath, target);
|
|
176
|
+
}
|
|
177
|
+
}
|
|
178
|
+
async function pathExists(filePath) {
|
|
179
|
+
try {
|
|
180
|
+
await stat(filePath);
|
|
181
|
+
return true;
|
|
182
|
+
}
|
|
183
|
+
catch {
|
|
184
|
+
return false;
|
|
185
|
+
}
|
|
186
|
+
}
|
|
120
187
|
export function platformDetails(version) {
|
|
121
188
|
const platformKey = normalizeOS();
|
|
122
189
|
const cpuKey = normalizeArch();
|
|
@@ -155,6 +222,154 @@ export async function readStoredVersion(storageDir) {
|
|
|
155
222
|
return null;
|
|
156
223
|
}
|
|
157
224
|
}
|
|
225
|
+
/**
|
|
226
|
+
* Begin a background check for a newer aer release. Resolves with details about
|
|
227
|
+
* an available update, or null when no upgrade is needed for any of the following
|
|
228
|
+
* reasons: the rate-limit window hasn't elapsed since the last check, the binary
|
|
229
|
+
* couldn't be queried for its version, the latest tag matches what's installed,
|
|
230
|
+
* the user was already prompted for this version, or the network call failed
|
|
231
|
+
* (logged but not re-thrown).
|
|
232
|
+
*
|
|
233
|
+
* The installed version is read by running `<aerPath> --version` rather than
|
|
234
|
+
* trusting any cached VERSION file — that way the check survives upgrades
|
|
235
|
+
* performed outside the plugin (e.g. by `aer upgrade`) and also works for users
|
|
236
|
+
* who installed aer themselves on PATH.
|
|
237
|
+
*
|
|
238
|
+
* The lastCheck timestamp is persisted as soon as the GitHub query runs, so
|
|
239
|
+
* we don't query repeatedly even if no update is found. The lastPromptVersion
|
|
240
|
+
* is NOT persisted here — callers must invoke `recordPromptedVersion` once
|
|
241
|
+
* they've actually surfaced the prompt to the user.
|
|
242
|
+
*/
|
|
243
|
+
export async function checkForUpdate(opts) {
|
|
244
|
+
const storageDir = opts.storageDir ?? defaultStorageDir();
|
|
245
|
+
const log = opts.log ?? (() => { });
|
|
246
|
+
const intervalMs = opts.intervalMs ?? UPDATE_CHECK_INTERVAL_MS;
|
|
247
|
+
const now = opts.now?.() ?? Date.now();
|
|
248
|
+
const state = await readUpdateState(storageDir);
|
|
249
|
+
if (!opts.force && state.lastCheck && now - state.lastCheck < intervalMs) {
|
|
250
|
+
return null;
|
|
251
|
+
}
|
|
252
|
+
const queryFn = opts.queryInstalled ?? queryBinaryVersion;
|
|
253
|
+
const installed = await queryFn(opts.aerPath);
|
|
254
|
+
if (!installed) {
|
|
255
|
+
log(`aer update check skipped: could not determine installed version from ${opts.aerPath}`);
|
|
256
|
+
return null;
|
|
257
|
+
}
|
|
258
|
+
const resolver = opts.resolveLatest ?? resolveLatestVersion;
|
|
259
|
+
let latest;
|
|
260
|
+
try {
|
|
261
|
+
latest = await resolver();
|
|
262
|
+
}
|
|
263
|
+
catch (err) {
|
|
264
|
+
log(`aer update check failed: ${err.message}`);
|
|
265
|
+
return null;
|
|
266
|
+
}
|
|
267
|
+
await writeUpdateState(storageDir, { ...state, lastCheck: now });
|
|
268
|
+
if (!latest || normalizeVersion(latest) === normalizeVersion(installed)) {
|
|
269
|
+
return null;
|
|
270
|
+
}
|
|
271
|
+
if (state.lastPromptVersion && normalizeVersion(state.lastPromptVersion) === normalizeVersion(latest)) {
|
|
272
|
+
return null;
|
|
273
|
+
}
|
|
274
|
+
return { installed, latest };
|
|
275
|
+
}
|
|
276
|
+
function normalizeVersion(v) {
|
|
277
|
+
const trimmed = v.trim();
|
|
278
|
+
return trimmed.startsWith('v') ? trimmed.slice(1) : trimmed;
|
|
279
|
+
}
|
|
280
|
+
/**
|
|
281
|
+
* Run the given aer binary with `--version` and parse the reported version.
|
|
282
|
+
* Returns null if the binary doesn't run, doesn't print recognizable output,
|
|
283
|
+
* or takes too long.
|
|
284
|
+
*/
|
|
285
|
+
export async function queryBinaryVersion(binaryPath) {
|
|
286
|
+
return new Promise((resolvePromise) => {
|
|
287
|
+
let stdout = '';
|
|
288
|
+
let stderr = '';
|
|
289
|
+
let settled = false;
|
|
290
|
+
const finish = (result) => {
|
|
291
|
+
if (settled)
|
|
292
|
+
return;
|
|
293
|
+
settled = true;
|
|
294
|
+
resolvePromise(result);
|
|
295
|
+
};
|
|
296
|
+
let child;
|
|
297
|
+
try {
|
|
298
|
+
child = spawn(binaryPath, ['--version'], {
|
|
299
|
+
stdio: ['ignore', 'pipe', 'pipe'],
|
|
300
|
+
env: { ...process.env, AER_AUTOUPDATE_DISABLED: '1' },
|
|
301
|
+
});
|
|
302
|
+
}
|
|
303
|
+
catch {
|
|
304
|
+
finish(null);
|
|
305
|
+
return;
|
|
306
|
+
}
|
|
307
|
+
const timer = setTimeout(() => {
|
|
308
|
+
child.kill();
|
|
309
|
+
finish(null);
|
|
310
|
+
}, 5000);
|
|
311
|
+
child.stdout?.on('data', (chunk) => {
|
|
312
|
+
stdout += chunk.toString();
|
|
313
|
+
});
|
|
314
|
+
child.stderr?.on('data', (chunk) => {
|
|
315
|
+
stderr += chunk.toString();
|
|
316
|
+
});
|
|
317
|
+
child.on('error', () => {
|
|
318
|
+
clearTimeout(timer);
|
|
319
|
+
finish(null);
|
|
320
|
+
});
|
|
321
|
+
child.on('exit', (code) => {
|
|
322
|
+
clearTimeout(timer);
|
|
323
|
+
if (code !== 0) {
|
|
324
|
+
finish(null);
|
|
325
|
+
return;
|
|
326
|
+
}
|
|
327
|
+
const output = stdout || stderr;
|
|
328
|
+
// Match strings like "v1.0.0-beta.5" or "1.0.0".
|
|
329
|
+
const match = output.match(/v?\d+\.\d+\.\d+(?:[\w.-]+)?/);
|
|
330
|
+
if (!match) {
|
|
331
|
+
finish(null);
|
|
332
|
+
return;
|
|
333
|
+
}
|
|
334
|
+
const raw = match[0];
|
|
335
|
+
finish(raw.startsWith('v') ? raw : `v${raw}`);
|
|
336
|
+
});
|
|
337
|
+
});
|
|
338
|
+
}
|
|
339
|
+
/**
|
|
340
|
+
* Persist that the user has been prompted about a version, so subsequent
|
|
341
|
+
* commands don't repeat the prompt for that same version.
|
|
342
|
+
*/
|
|
343
|
+
export async function recordPromptedVersion(version, opts = {}) {
|
|
344
|
+
const storageDir = opts.storageDir ?? defaultStorageDir();
|
|
345
|
+
const state = await readUpdateState(storageDir);
|
|
346
|
+
await writeUpdateState(storageDir, { ...state, lastPromptVersion: version });
|
|
347
|
+
}
|
|
348
|
+
/** Download and install a specific aer version into the plugin's storage dir. */
|
|
349
|
+
export async function installAerVersion(version, opts = {}) {
|
|
350
|
+
const storageDir = opts.storageDir ?? defaultStorageDir();
|
|
351
|
+
const log = opts.log ?? (() => { });
|
|
352
|
+
const newPath = await downloadAndExtract(storageDir, version, log);
|
|
353
|
+
cachedAerPath = newPath;
|
|
354
|
+
return newPath;
|
|
355
|
+
}
|
|
356
|
+
async function readUpdateState(storageDir) {
|
|
357
|
+
try {
|
|
358
|
+
const contents = await readFile(join(storageDir, UPDATE_STATE_FILE), 'utf8');
|
|
359
|
+
const parsed = JSON.parse(contents);
|
|
360
|
+
if (parsed && typeof parsed === 'object') {
|
|
361
|
+
return parsed;
|
|
362
|
+
}
|
|
363
|
+
}
|
|
364
|
+
catch {
|
|
365
|
+
// Missing or corrupt state — treat as empty.
|
|
366
|
+
}
|
|
367
|
+
return {};
|
|
368
|
+
}
|
|
369
|
+
async function writeUpdateState(storageDir, state) {
|
|
370
|
+
await mkdir(storageDir, { recursive: true });
|
|
371
|
+
await writeFile(join(storageDir, UPDATE_STATE_FILE), JSON.stringify(state), 'utf8');
|
|
372
|
+
}
|
|
158
373
|
async function resolveLatestVersion() {
|
|
159
374
|
const latest = await requestJson(`https://api.github.com/repos/${REPO}/releases/latest`);
|
|
160
375
|
if (latest.statusCode === 404) {
|
|
@@ -217,7 +432,7 @@ async function isExecutable(filePath) {
|
|
|
217
432
|
return false;
|
|
218
433
|
}
|
|
219
434
|
}
|
|
220
|
-
function
|
|
435
|
+
function readBinaryFromArchive(archivePath, binaryName) {
|
|
221
436
|
const zip = new AdmZip(archivePath);
|
|
222
437
|
const entry = zip
|
|
223
438
|
.getEntries()
|
|
@@ -225,8 +440,7 @@ function extractBinary(archivePath, binaryName, destDir) {
|
|
|
225
440
|
if (!entry) {
|
|
226
441
|
throw new Error(`${binaryName} was not found inside the downloaded archive.`);
|
|
227
442
|
}
|
|
228
|
-
|
|
229
|
-
return join(destDir, binaryName);
|
|
443
|
+
return entry.getData();
|
|
230
444
|
}
|
|
231
445
|
async function requestJson(url) {
|
|
232
446
|
const res = await httpRequest(url);
|
package/lib/aerBinary.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"aerBinary.js","sourceRoot":"","sources":["../src/aerBinary.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"aerBinary.js","sourceRoot":"","sources":["../src/aerBinary.ts"],"names":[],"mappings":"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"}
|
|
@@ -27,5 +27,6 @@ export default class AerApexRunTest extends SfCommand<AerApexRunTestResult> {
|
|
|
27
27
|
'api-version': import("@oclif/core/interfaces").OptionFlag<string | undefined, import("@oclif/core/interfaces").CustomOptions>;
|
|
28
28
|
};
|
|
29
29
|
run(): Promise<AerApexRunTestResult>;
|
|
30
|
+
private maybePromptForUpdate;
|
|
30
31
|
}
|
|
31
32
|
export {};
|
|
@@ -4,7 +4,7 @@ import { SfCommand, Flags } from '@salesforce/sf-plugins-core';
|
|
|
4
4
|
import { Messages, SfProject } from '@salesforce/core';
|
|
5
5
|
import { stageSource } from '../../../../staging.js';
|
|
6
6
|
import { buildAerArgs, runAer } from '../../../../aer.js';
|
|
7
|
-
import { ensureAerBinary } from '../../../../aerBinary.js';
|
|
7
|
+
import { checkForUpdate, ensureAerBinary, installAerVersion, recordPromptedVersion, } from '../../../../aerBinary.js';
|
|
8
8
|
Messages.importMessagesDirectoryFromMetaUrl(import.meta.url);
|
|
9
9
|
const messages = Messages.loadMessages('@octoberswimmer/aer-sf-plugin', 'aer.apex.run.test');
|
|
10
10
|
export default class AerApexRunTest extends SfCommand {
|
|
@@ -114,12 +114,20 @@ export default class AerApexRunTest extends SfCommand {
|
|
|
114
114
|
if (ignoredFlags.length > 0) {
|
|
115
115
|
this.warn(messages.getMessage('warn.ignoredFlags', [ignoredFlags.join(', ')]));
|
|
116
116
|
}
|
|
117
|
+
const interactive = !this.jsonEnabled() && Boolean(process.stdin.isTTY);
|
|
117
118
|
const aerPath = await ensureAerBinary({
|
|
118
|
-
allowPrompt:
|
|
119
|
-
|
|
119
|
+
allowPrompt: interactive,
|
|
120
|
+
// Long timeout so a user with the prompt buried in scrollback still has
|
|
121
|
+
// time to react; default-no keeps CI/headless runs safe.
|
|
122
|
+
confirm: (message) => this.confirm({ message, ms: 5 * 60 * 1000, defaultAnswer: false }),
|
|
120
123
|
log: (m) => this.log(m),
|
|
121
124
|
warn: (m) => this.warn(m),
|
|
122
125
|
});
|
|
126
|
+
// Kick off the update check in parallel with staging and the test run.
|
|
127
|
+
// Errors are swallowed — we never want this to fail the command.
|
|
128
|
+
const updateCheck = interactive
|
|
129
|
+
? checkForUpdate({ aerPath, log: (m) => this.log(m) }).catch(() => null)
|
|
130
|
+
: Promise.resolve(null);
|
|
123
131
|
const staged = await stageSource({
|
|
124
132
|
projectRoot,
|
|
125
133
|
packageDirectories,
|
|
@@ -163,12 +171,44 @@ export default class AerApexRunTest extends SfCommand {
|
|
|
163
171
|
if (exitCode !== 0 && !this.jsonEnabled()) {
|
|
164
172
|
this.warn(messages.getMessage('warn.aerExit', [String(exitCode)]));
|
|
165
173
|
}
|
|
174
|
+
await this.maybePromptForUpdate(updateCheck);
|
|
166
175
|
return {
|
|
167
176
|
stagedDir: staged.dir,
|
|
168
177
|
filters,
|
|
169
178
|
exitCode,
|
|
170
179
|
};
|
|
171
180
|
}
|
|
181
|
+
async maybePromptForUpdate(check) {
|
|
182
|
+
let update;
|
|
183
|
+
try {
|
|
184
|
+
update = await check;
|
|
185
|
+
}
|
|
186
|
+
catch {
|
|
187
|
+
return;
|
|
188
|
+
}
|
|
189
|
+
if (!update)
|
|
190
|
+
return;
|
|
191
|
+
this.log('');
|
|
192
|
+
const yes = await this.confirm({
|
|
193
|
+
message: messages.getMessage('prompt.updateAvailable', [update.installed, update.latest]),
|
|
194
|
+
ms: 5 * 60 * 1000,
|
|
195
|
+
defaultAnswer: false,
|
|
196
|
+
});
|
|
197
|
+
if (!yes) {
|
|
198
|
+
// Record only after the user has been asked and declined, so a
|
|
199
|
+
// failed prompt doesn't accidentally suppress future ones.
|
|
200
|
+
await recordPromptedVersion(update.latest).catch(() => { });
|
|
201
|
+
this.log(messages.getMessage('info.updateDeferred'));
|
|
202
|
+
return;
|
|
203
|
+
}
|
|
204
|
+
try {
|
|
205
|
+
const newPath = await installAerVersion(update.latest, { log: (m) => this.log(m) });
|
|
206
|
+
this.log(messages.getMessage('info.updateInstalled', [update.latest, newPath]));
|
|
207
|
+
}
|
|
208
|
+
catch (err) {
|
|
209
|
+
this.warn(messages.getMessage('warn.updateFailed', [err.message]));
|
|
210
|
+
}
|
|
211
|
+
}
|
|
172
212
|
}
|
|
173
213
|
function buildFilters(classNames, tests) {
|
|
174
214
|
const out = [];
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"test.js","sourceRoot":"","sources":["../../../../../src/commands/aer/apex/run/test.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,EAAE,MAAM,kBAAkB,CAAC;AACzC,OAAO,EAAE,IAAI,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAC1C,OAAO,EAAE,SAAS,EAAE,KAAK,EAAE,MAAM,6BAA6B,CAAC;AAC/D,OAAO,EAAE,QAAQ,EAAE,SAAS,EAAE,MAAM,kBAAkB,CAAC;AACvD,OAAO,EAAE,WAAW,EAA2C,MAAM,wBAAwB,CAAC;AAC9F,OAAO,EAAE,YAAY,EAAE,MAAM,EAAE,MAAM,oBAAoB,CAAC;AAC1D,OAAO,
|
|
1
|
+
{"version":3,"file":"test.js","sourceRoot":"","sources":["../../../../../src/commands/aer/apex/run/test.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
import { SfCommand } from '@salesforce/sf-plugins-core';
|
|
2
|
+
export type AerLightningDevComponentResult = {
|
|
3
|
+
exitCode: number;
|
|
4
|
+
};
|
|
5
|
+
export default class AerLightningDevComponent extends SfCommand<AerLightningDevComponentResult> {
|
|
6
|
+
static readonly summary: string;
|
|
7
|
+
static readonly description: string;
|
|
8
|
+
static readonly examples: string[];
|
|
9
|
+
static readonly flags: {
|
|
10
|
+
'target-org': import("@oclif/core/interfaces").OptionFlag<string | undefined, import("@oclif/core/interfaces").CustomOptions>;
|
|
11
|
+
name: import("@oclif/core/interfaces").OptionFlag<string | undefined, import("@oclif/core/interfaces").CustomOptions>;
|
|
12
|
+
'client-select': import("@oclif/core/interfaces").BooleanFlag<boolean>;
|
|
13
|
+
};
|
|
14
|
+
run(): Promise<AerLightningDevComponentResult>;
|
|
15
|
+
private runServer;
|
|
16
|
+
private maybePromptForUpdate;
|
|
17
|
+
}
|
|
@@ -0,0 +1,160 @@
|
|
|
1
|
+
import { spawn, exec } from 'node:child_process';
|
|
2
|
+
import { resolve } from 'node:path';
|
|
3
|
+
import { SfCommand, Flags } from '@salesforce/sf-plugins-core';
|
|
4
|
+
import { Messages, SfProject } from '@salesforce/core';
|
|
5
|
+
import select from '@inquirer/select';
|
|
6
|
+
import { discoverLwcComponents } from '../../../../lwc.js';
|
|
7
|
+
import { checkForUpdate, ensureAerBinary, installAerVersion, recordPromptedVersion, } from '../../../../aerBinary.js';
|
|
8
|
+
Messages.importMessagesDirectoryFromMetaUrl(import.meta.url);
|
|
9
|
+
const messages = Messages.loadMessages('@octoberswimmer/aer-sf-plugin', 'aer.lightning.dev.component');
|
|
10
|
+
export default class AerLightningDevComponent extends SfCommand {
|
|
11
|
+
static summary = messages.getMessage('summary');
|
|
12
|
+
static description = messages.getMessage('description');
|
|
13
|
+
static examples = messages.getMessages('examples');
|
|
14
|
+
static flags = {
|
|
15
|
+
'target-org': Flags.string({
|
|
16
|
+
char: 'o',
|
|
17
|
+
summary: messages.getMessage('flags.target-org.summary'),
|
|
18
|
+
}),
|
|
19
|
+
name: Flags.string({
|
|
20
|
+
char: 'n',
|
|
21
|
+
summary: messages.getMessage('flags.name.summary'),
|
|
22
|
+
}),
|
|
23
|
+
'client-select': Flags.boolean({
|
|
24
|
+
char: 'c',
|
|
25
|
+
summary: messages.getMessage('flags.client-select.summary'),
|
|
26
|
+
}),
|
|
27
|
+
};
|
|
28
|
+
async run() {
|
|
29
|
+
const { flags } = await this.parse(AerLightningDevComponent);
|
|
30
|
+
const project = await SfProject.resolve();
|
|
31
|
+
const projectRoot = project.getPath();
|
|
32
|
+
const contents = project.getSfProjectJson().getContents();
|
|
33
|
+
const packageDirectories = contents.packageDirectories ?? [];
|
|
34
|
+
if (flags['target-org']) {
|
|
35
|
+
this.warn(messages.getMessage('warn.ignoredFlags', ['--target-org']));
|
|
36
|
+
}
|
|
37
|
+
const interactive = Boolean(process.stdin.isTTY);
|
|
38
|
+
const aerPath = await ensureAerBinary({
|
|
39
|
+
allowPrompt: interactive,
|
|
40
|
+
confirm: (message) => this.confirm({ message, ms: 5 * 60 * 1000, defaultAnswer: false }),
|
|
41
|
+
log: (m) => this.log(m),
|
|
42
|
+
warn: (m) => this.warn(m),
|
|
43
|
+
});
|
|
44
|
+
const updateCheck = interactive
|
|
45
|
+
? checkForUpdate({ aerPath, log: (m) => this.log(m) }).catch(() => null)
|
|
46
|
+
: Promise.resolve(null);
|
|
47
|
+
let componentName = flags.name;
|
|
48
|
+
const clientSelect = flags['client-select'] ?? false;
|
|
49
|
+
if (!clientSelect) {
|
|
50
|
+
const components = await discoverLwcComponents(projectRoot, packageDirectories);
|
|
51
|
+
if (components.length === 0) {
|
|
52
|
+
throw messages.createError('error.noLwcComponents');
|
|
53
|
+
}
|
|
54
|
+
if (componentName) {
|
|
55
|
+
const match = components.find((c) => c.name === componentName);
|
|
56
|
+
if (!match) {
|
|
57
|
+
const available = components.map((c) => c.name).join(', ');
|
|
58
|
+
throw messages.createError('error.componentNotFound', [componentName, available]);
|
|
59
|
+
}
|
|
60
|
+
}
|
|
61
|
+
else {
|
|
62
|
+
componentName = await select({
|
|
63
|
+
message: messages.getMessage('prompt.selectComponent'),
|
|
64
|
+
choices: components.map((c) => ({ name: c.name, value: c.name })),
|
|
65
|
+
});
|
|
66
|
+
}
|
|
67
|
+
}
|
|
68
|
+
const sourcePaths = packageDirectories.map((pd) => resolve(projectRoot, pd.path));
|
|
69
|
+
const args = ['server', ...sourcePaths, '--watch'];
|
|
70
|
+
const previewPath = componentName ? `/dev/lwc/${componentName}` : '/dev/lwc';
|
|
71
|
+
const exitCode = await this.runServer(aerPath, args, projectRoot, previewPath);
|
|
72
|
+
if (exitCode !== 0) {
|
|
73
|
+
this.warn(messages.getMessage('warn.aerExit', [String(exitCode)]));
|
|
74
|
+
}
|
|
75
|
+
await this.maybePromptForUpdate(updateCheck);
|
|
76
|
+
return { exitCode };
|
|
77
|
+
}
|
|
78
|
+
runServer(binaryPath, args, cwd, previewPath) {
|
|
79
|
+
return new Promise((resolvePromise, rejectPromise) => {
|
|
80
|
+
const child = spawn(binaryPath, args, {
|
|
81
|
+
cwd,
|
|
82
|
+
stdio: ['inherit', 'inherit', 'pipe'],
|
|
83
|
+
env: {
|
|
84
|
+
...process.env,
|
|
85
|
+
AER_AUTOUPDATE_DISABLED: '1',
|
|
86
|
+
},
|
|
87
|
+
});
|
|
88
|
+
let opened = false;
|
|
89
|
+
let stderrBuf = '';
|
|
90
|
+
child.stderr?.on('data', (chunk) => {
|
|
91
|
+
const text = chunk.toString();
|
|
92
|
+
process.stderr.write(text);
|
|
93
|
+
if (!opened) {
|
|
94
|
+
stderrBuf += text;
|
|
95
|
+
const match = stderrBuf.match(/server listening on (\S+)/);
|
|
96
|
+
if (match) {
|
|
97
|
+
opened = true;
|
|
98
|
+
const addr = match[1];
|
|
99
|
+
const url = `http://${addr}${previewPath}`;
|
|
100
|
+
this.log(messages.getMessage('info.serverUrl', [url]));
|
|
101
|
+
openBrowser(url);
|
|
102
|
+
}
|
|
103
|
+
}
|
|
104
|
+
});
|
|
105
|
+
child.on('error', (err) => {
|
|
106
|
+
if (err.code === 'ENOENT') {
|
|
107
|
+
rejectPromise(new Error(`Could not execute aer at ${binaryPath}. The file may have been moved or deleted.`));
|
|
108
|
+
return;
|
|
109
|
+
}
|
|
110
|
+
rejectPromise(err);
|
|
111
|
+
});
|
|
112
|
+
child.on('exit', (code, signal) => {
|
|
113
|
+
if (signal) {
|
|
114
|
+
resolvePromise(128 + (signal === 'SIGINT' ? 2 : signal === 'SIGTERM' ? 15 : 1));
|
|
115
|
+
}
|
|
116
|
+
else {
|
|
117
|
+
resolvePromise(code ?? 0);
|
|
118
|
+
}
|
|
119
|
+
});
|
|
120
|
+
});
|
|
121
|
+
}
|
|
122
|
+
async maybePromptForUpdate(check) {
|
|
123
|
+
let update;
|
|
124
|
+
try {
|
|
125
|
+
update = await check;
|
|
126
|
+
}
|
|
127
|
+
catch {
|
|
128
|
+
return;
|
|
129
|
+
}
|
|
130
|
+
if (!update)
|
|
131
|
+
return;
|
|
132
|
+
this.log('');
|
|
133
|
+
const yes = await this.confirm({
|
|
134
|
+
message: messages.getMessage('prompt.updateAvailable', [update.installed, update.latest]),
|
|
135
|
+
ms: 5 * 60 * 1000,
|
|
136
|
+
defaultAnswer: false,
|
|
137
|
+
});
|
|
138
|
+
if (!yes) {
|
|
139
|
+
await recordPromptedVersion(update.latest).catch(() => { });
|
|
140
|
+
this.log(messages.getMessage('info.updateDeferred'));
|
|
141
|
+
return;
|
|
142
|
+
}
|
|
143
|
+
try {
|
|
144
|
+
const newPath = await installAerVersion(update.latest, { log: (m) => this.log(m) });
|
|
145
|
+
this.log(messages.getMessage('info.updateInstalled', [update.latest, newPath]));
|
|
146
|
+
}
|
|
147
|
+
catch (err) {
|
|
148
|
+
this.warn(messages.getMessage('warn.updateFailed', [err.message]));
|
|
149
|
+
}
|
|
150
|
+
}
|
|
151
|
+
}
|
|
152
|
+
function openBrowser(url) {
|
|
153
|
+
const cmd = process.platform === 'darwin'
|
|
154
|
+
? 'open'
|
|
155
|
+
: process.platform === 'win32'
|
|
156
|
+
? 'start'
|
|
157
|
+
: 'xdg-open';
|
|
158
|
+
exec(`${cmd} ${JSON.stringify(url)}`);
|
|
159
|
+
}
|
|
160
|
+
//# sourceMappingURL=component.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"component.js","sourceRoot":"","sources":["../../../../../src/commands/aer/lightning/dev/component.ts"],"names":[],"mappings":"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"}
|
package/lib/lwc.d.ts
ADDED
package/lib/lwc.js
ADDED
|
@@ -0,0 +1,67 @@
|
|
|
1
|
+
import { readdir, stat } from 'node:fs/promises';
|
|
2
|
+
import { join, resolve } from 'node:path';
|
|
3
|
+
export async function discoverLwcComponents(projectRoot, packageDirectories) {
|
|
4
|
+
const seen = new Map();
|
|
5
|
+
for (const pd of packageDirectories) {
|
|
6
|
+
const absPdRoot = resolve(projectRoot, pd.path);
|
|
7
|
+
const lwcDirs = await findLwcDirs(absPdRoot);
|
|
8
|
+
for (const lwcDir of lwcDirs) {
|
|
9
|
+
let entries;
|
|
10
|
+
try {
|
|
11
|
+
entries = await readdir(lwcDir, { withFileTypes: true });
|
|
12
|
+
}
|
|
13
|
+
catch {
|
|
14
|
+
continue;
|
|
15
|
+
}
|
|
16
|
+
for (const entry of entries) {
|
|
17
|
+
if (!entry.isDirectory())
|
|
18
|
+
continue;
|
|
19
|
+
const name = entry.name;
|
|
20
|
+
if (name.startsWith('__'))
|
|
21
|
+
continue;
|
|
22
|
+
const componentDir = join(lwcDir, name);
|
|
23
|
+
const hasMetaXml = await fileExists(join(componentDir, `${name}.js-meta.xml`));
|
|
24
|
+
if (!hasMetaXml)
|
|
25
|
+
continue;
|
|
26
|
+
seen.set(name, { name, path: componentDir });
|
|
27
|
+
}
|
|
28
|
+
}
|
|
29
|
+
}
|
|
30
|
+
return [...seen.values()].sort((a, b) => a.name.localeCompare(b.name));
|
|
31
|
+
}
|
|
32
|
+
async function findLwcDirs(root) {
|
|
33
|
+
const results = [];
|
|
34
|
+
const stack = [root];
|
|
35
|
+
while (stack.length) {
|
|
36
|
+
const dir = stack.pop();
|
|
37
|
+
let entries;
|
|
38
|
+
try {
|
|
39
|
+
entries = await readdir(dir, { withFileTypes: true });
|
|
40
|
+
}
|
|
41
|
+
catch {
|
|
42
|
+
continue;
|
|
43
|
+
}
|
|
44
|
+
for (const entry of entries) {
|
|
45
|
+
if (!entry.isDirectory())
|
|
46
|
+
continue;
|
|
47
|
+
const full = join(dir, entry.name);
|
|
48
|
+
if (entry.name === 'lwc') {
|
|
49
|
+
results.push(full);
|
|
50
|
+
}
|
|
51
|
+
else {
|
|
52
|
+
stack.push(full);
|
|
53
|
+
}
|
|
54
|
+
}
|
|
55
|
+
}
|
|
56
|
+
return results;
|
|
57
|
+
}
|
|
58
|
+
async function fileExists(filePath) {
|
|
59
|
+
try {
|
|
60
|
+
const s = await stat(filePath);
|
|
61
|
+
return s.isFile();
|
|
62
|
+
}
|
|
63
|
+
catch {
|
|
64
|
+
return false;
|
|
65
|
+
}
|
|
66
|
+
}
|
|
67
|
+
//# sourceMappingURL=lwc.js.map
|
package/lib/lwc.js.map
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"lwc.js","sourceRoot":"","sources":["../src/lwc.ts"],"names":[],"mappings":"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"}
|
|
@@ -121,3 +121,19 @@ aer exited with non-zero status %s.
|
|
|
121
121
|
# error.noPackageDirectories
|
|
122
122
|
|
|
123
123
|
sfdx-project.json must contain at least one packageDirectories entry.
|
|
124
|
+
|
|
125
|
+
# prompt.updateAvailable
|
|
126
|
+
|
|
127
|
+
A newer aer release is available (installed: %s, latest: %s). Update now?
|
|
128
|
+
|
|
129
|
+
# info.updateDeferred
|
|
130
|
+
|
|
131
|
+
Skipping aer update. You'll be prompted again the next time a new release is published.
|
|
132
|
+
|
|
133
|
+
# info.updateInstalled
|
|
134
|
+
|
|
135
|
+
Installed aer %s to %s. The new version will be used on the next run.
|
|
136
|
+
|
|
137
|
+
# warn.updateFailed
|
|
138
|
+
|
|
139
|
+
Failed to update aer: %s
|
|
@@ -0,0 +1,87 @@
|
|
|
1
|
+
# summary
|
|
2
|
+
|
|
3
|
+
Preview Lightning Web Components locally using aer.
|
|
4
|
+
|
|
5
|
+
# description
|
|
6
|
+
|
|
7
|
+
Start a local development server powered by aer to preview Lightning Web Components in isolation with hot module replacement (HMR).
|
|
8
|
+
|
|
9
|
+
When running the development server, changes to component templates (HTML), styles (CSS), and JavaScript logic are automatically reflected in the browser.
|
|
10
|
+
|
|
11
|
+
If you run the command without flags, it displays a list of components found in your local DX project for you to choose to preview. Use the --name flag to bypass the prompt. Use --client-select to open the component list in the browser instead.
|
|
12
|
+
|
|
13
|
+
The `aer` binary is resolved in the same order as `<%= config.bin %> aer apex run test` — see that command's help for details.
|
|
14
|
+
|
|
15
|
+
# examples
|
|
16
|
+
|
|
17
|
+
- Select a component interactively and launch the preview:
|
|
18
|
+
|
|
19
|
+
<%= config.bin %> <%= command.id %>
|
|
20
|
+
|
|
21
|
+
- Preview a specific component:
|
|
22
|
+
|
|
23
|
+
<%= config.bin %> <%= command.id %> --name myComponent
|
|
24
|
+
|
|
25
|
+
- Open the component list in the browser:
|
|
26
|
+
|
|
27
|
+
<%= config.bin %> <%= command.id %> --client-select
|
|
28
|
+
|
|
29
|
+
# flags.target-org.summary
|
|
30
|
+
|
|
31
|
+
Username or alias of the target org. Accepted for compatibility with `sf lightning dev component`; aer runs locally and ignores this flag.
|
|
32
|
+
|
|
33
|
+
# flags.name.summary
|
|
34
|
+
|
|
35
|
+
Name of a component to preview.
|
|
36
|
+
|
|
37
|
+
# flags.client-select.summary
|
|
38
|
+
|
|
39
|
+
Open the component list in the browser instead of selecting interactively.
|
|
40
|
+
|
|
41
|
+
# prompt.selectComponent
|
|
42
|
+
|
|
43
|
+
Select a component to preview:
|
|
44
|
+
|
|
45
|
+
# info.serverListening
|
|
46
|
+
|
|
47
|
+
aer server listening. Opening browser…
|
|
48
|
+
|
|
49
|
+
# info.serverUrl
|
|
50
|
+
|
|
51
|
+
Preview available at %s
|
|
52
|
+
|
|
53
|
+
# info.serverStopped
|
|
54
|
+
|
|
55
|
+
aer server stopped.
|
|
56
|
+
|
|
57
|
+
# error.noLwcComponents
|
|
58
|
+
|
|
59
|
+
No Lightning Web Components found in the project's package directories.
|
|
60
|
+
|
|
61
|
+
# error.componentNotFound
|
|
62
|
+
|
|
63
|
+
Component "%s" was not found. Available components: %s
|
|
64
|
+
|
|
65
|
+
# warn.ignoredFlags
|
|
66
|
+
|
|
67
|
+
The following flags were accepted for compatibility but have no effect when running locally with aer: %s
|
|
68
|
+
|
|
69
|
+
# warn.aerExit
|
|
70
|
+
|
|
71
|
+
aer exited with non-zero status %s.
|
|
72
|
+
|
|
73
|
+
# prompt.updateAvailable
|
|
74
|
+
|
|
75
|
+
A newer aer release is available (installed: %s, latest: %s). Update now?
|
|
76
|
+
|
|
77
|
+
# info.updateDeferred
|
|
78
|
+
|
|
79
|
+
Skipping aer update. You'll be prompted again the next time a new release is published.
|
|
80
|
+
|
|
81
|
+
# info.updateInstalled
|
|
82
|
+
|
|
83
|
+
Installed aer %s to %s. The new version will be used on the next run.
|
|
84
|
+
|
|
85
|
+
# warn.updateFailed
|
|
86
|
+
|
|
87
|
+
Failed to update aer: %s
|
package/oclif.manifest.json
CHANGED
|
@@ -195,7 +195,102 @@
|
|
|
195
195
|
"test:run:aer:apex",
|
|
196
196
|
"test:run:apex:aer"
|
|
197
197
|
]
|
|
198
|
+
},
|
|
199
|
+
"aer:lightning:dev:component": {
|
|
200
|
+
"aliases": [],
|
|
201
|
+
"args": {},
|
|
202
|
+
"description": "Start a local development server powered by aer to preview Lightning Web Components in isolation with hot module replacement (HMR).\n\nWhen running the development server, changes to component templates (HTML), styles (CSS), and JavaScript logic are automatically reflected in the browser.\n\nIf you run the command without flags, it displays a list of components found in your local DX project for you to choose to preview. Use the --name flag to bypass the prompt. Use --client-select to open the component list in the browser instead.\n\nThe `aer` binary is resolved in the same order as `<%= config.bin %> aer apex run test` — see that command's help for details.",
|
|
203
|
+
"examples": [
|
|
204
|
+
"Select a component interactively and launch the preview:\n<%= config.bin %> <%= command.id %>",
|
|
205
|
+
"Preview a specific component:\n<%= config.bin %> <%= command.id %> --name myComponent",
|
|
206
|
+
"Open the component list in the browser:\n<%= config.bin %> <%= command.id %> --client-select"
|
|
207
|
+
],
|
|
208
|
+
"flags": {
|
|
209
|
+
"json": {
|
|
210
|
+
"description": "Format output as json.",
|
|
211
|
+
"helpGroup": "GLOBAL",
|
|
212
|
+
"name": "json",
|
|
213
|
+
"allowNo": false,
|
|
214
|
+
"type": "boolean"
|
|
215
|
+
},
|
|
216
|
+
"flags-dir": {
|
|
217
|
+
"helpGroup": "GLOBAL",
|
|
218
|
+
"name": "flags-dir",
|
|
219
|
+
"summary": "Import flag values from a directory.",
|
|
220
|
+
"hasDynamicHelp": false,
|
|
221
|
+
"multiple": false,
|
|
222
|
+
"type": "option"
|
|
223
|
+
},
|
|
224
|
+
"target-org": {
|
|
225
|
+
"char": "o",
|
|
226
|
+
"name": "target-org",
|
|
227
|
+
"summary": "Username or alias of the target org. Accepted for compatibility with `sf lightning dev component`; aer runs locally and ignores this flag.",
|
|
228
|
+
"hasDynamicHelp": false,
|
|
229
|
+
"multiple": false,
|
|
230
|
+
"type": "option"
|
|
231
|
+
},
|
|
232
|
+
"name": {
|
|
233
|
+
"char": "n",
|
|
234
|
+
"name": "name",
|
|
235
|
+
"summary": "Name of a component to preview.",
|
|
236
|
+
"hasDynamicHelp": false,
|
|
237
|
+
"multiple": false,
|
|
238
|
+
"type": "option"
|
|
239
|
+
},
|
|
240
|
+
"client-select": {
|
|
241
|
+
"char": "c",
|
|
242
|
+
"name": "client-select",
|
|
243
|
+
"summary": "Open the component list in the browser instead of selecting interactively.",
|
|
244
|
+
"allowNo": false,
|
|
245
|
+
"type": "boolean"
|
|
246
|
+
}
|
|
247
|
+
},
|
|
248
|
+
"hasDynamicHelp": false,
|
|
249
|
+
"hiddenAliases": [],
|
|
250
|
+
"id": "aer:lightning:dev:component",
|
|
251
|
+
"pluginAlias": "@octoberswimmer/aer-sf-plugin",
|
|
252
|
+
"pluginName": "@octoberswimmer/aer-sf-plugin",
|
|
253
|
+
"pluginType": "core",
|
|
254
|
+
"strict": true,
|
|
255
|
+
"summary": "Preview Lightning Web Components locally using aer.",
|
|
256
|
+
"enableJsonFlag": true,
|
|
257
|
+
"isESM": true,
|
|
258
|
+
"relativePath": [
|
|
259
|
+
"lib",
|
|
260
|
+
"commands",
|
|
261
|
+
"aer",
|
|
262
|
+
"lightning",
|
|
263
|
+
"dev",
|
|
264
|
+
"component.js"
|
|
265
|
+
],
|
|
266
|
+
"aliasPermutations": [],
|
|
267
|
+
"permutations": [
|
|
268
|
+
"aer:lightning:dev:component",
|
|
269
|
+
"lightning:aer:dev:component",
|
|
270
|
+
"lightning:dev:aer:component",
|
|
271
|
+
"lightning:dev:component:aer",
|
|
272
|
+
"aer:dev:lightning:component",
|
|
273
|
+
"dev:aer:lightning:component",
|
|
274
|
+
"dev:lightning:aer:component",
|
|
275
|
+
"dev:lightning:component:aer",
|
|
276
|
+
"aer:dev:component:lightning",
|
|
277
|
+
"dev:aer:component:lightning",
|
|
278
|
+
"dev:component:aer:lightning",
|
|
279
|
+
"dev:component:lightning:aer",
|
|
280
|
+
"aer:lightning:component:dev",
|
|
281
|
+
"lightning:aer:component:dev",
|
|
282
|
+
"lightning:component:aer:dev",
|
|
283
|
+
"lightning:component:dev:aer",
|
|
284
|
+
"aer:component:lightning:dev",
|
|
285
|
+
"component:aer:lightning:dev",
|
|
286
|
+
"component:lightning:aer:dev",
|
|
287
|
+
"component:lightning:dev:aer",
|
|
288
|
+
"aer:component:dev:lightning",
|
|
289
|
+
"component:aer:dev:lightning",
|
|
290
|
+
"component:dev:aer:lightning",
|
|
291
|
+
"component:dev:lightning:aer"
|
|
292
|
+
]
|
|
198
293
|
}
|
|
199
294
|
},
|
|
200
|
-
"version": "0.0.
|
|
295
|
+
"version": "0.0.4"
|
|
201
296
|
}
|
package/package.json
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@octoberswimmer/aer-sf-plugin",
|
|
3
|
-
"description": "Salesforce CLI plugin that runs Apex tests locally using aer.",
|
|
4
|
-
"version": "0.0.
|
|
3
|
+
"description": "Salesforce CLI plugin that runs Apex tests and previews LWC components locally using aer.",
|
|
4
|
+
"version": "0.0.4",
|
|
5
5
|
"author": "Christian G. Warden",
|
|
6
6
|
"bugs": "https://github.com/octoberswimmer/aer-sf-plugin/issues",
|
|
7
7
|
"homepage": "https://github.com/octoberswimmer/aer-sf-plugin",
|
|
@@ -51,6 +51,14 @@
|
|
|
51
51
|
"description": "Run Apex code or tests locally via aer."
|
|
52
52
|
}
|
|
53
53
|
}
|
|
54
|
+
},
|
|
55
|
+
"lightning": {
|
|
56
|
+
"description": "Work with Lightning Web Components locally via aer.",
|
|
57
|
+
"subtopics": {
|
|
58
|
+
"dev": {
|
|
59
|
+
"description": "Develop Lightning Web Components locally via aer."
|
|
60
|
+
}
|
|
61
|
+
}
|
|
54
62
|
}
|
|
55
63
|
}
|
|
56
64
|
}
|
package/LICENSE
DELETED
|
@@ -1,20 +0,0 @@
|
|
|
1
|
-
aer License
|
|
2
|
-
|
|
3
|
-
Copyright (c) 2025-2026 October Swimmer LLC. All rights reserved.
|
|
4
|
-
|
|
5
|
-
This software is licensed, not sold. You may use the following features free of charge:
|
|
6
|
-
- Language Server Protocol (LSP) features.
|
|
7
|
-
- The test runner to execute up to 100 tests at a time.
|
|
8
|
-
- The debugger for up to five minutes per debugging session.
|
|
9
|
-
|
|
10
|
-
Any other use requires an active license, which can be obtained at
|
|
11
|
-
https://www.octoberswimmer.com/tools/aer/subscribe/. You may not bypass or
|
|
12
|
-
exceed the free-use limits without a valid license.
|
|
13
|
-
|
|
14
|
-
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
|
15
|
-
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
|
16
|
-
FITNESS FOR A PARTICULAR PURPOSE, AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
|
17
|
-
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES, OR OTHER
|
|
18
|
-
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT, OR OTHERWISE, ARISING FROM,
|
|
19
|
-
OUT OF, OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
|
|
20
|
-
SOFTWARE.
|