@salesforce/webapp-template-feature-react-global-search-experimental 1.110.0 → 1.111.0
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/dist/CHANGELOG.md
CHANGED
|
@@ -3,6 +3,25 @@
|
|
|
3
3
|
All notable changes to this project will be documented in this file.
|
|
4
4
|
See [Conventional Commits](https://conventionalcommits.org) for commit guidelines.
|
|
5
5
|
|
|
6
|
+
# [1.111.0](https://github.com/salesforce-experience-platform-emu/webapps/compare/v1.110.1...v1.111.0) (2026-03-19)
|
|
7
|
+
|
|
8
|
+
**Note:** Version bump only for package @salesforce/webapp-template-base-sfdx-project-experimental
|
|
9
|
+
|
|
10
|
+
|
|
11
|
+
|
|
12
|
+
|
|
13
|
+
|
|
14
|
+
## [1.110.1](https://github.com/salesforce-experience-platform-emu/webapps/compare/v1.110.0...v1.110.1) (2026-03-19)
|
|
15
|
+
|
|
16
|
+
|
|
17
|
+
### Bug Fixes
|
|
18
|
+
|
|
19
|
+
* misc cleanup — CSP trusted sites, permset auto-discovery, dependency and data fixes ([#327](https://github.com/salesforce-experience-platform-emu/webapps/issues/327)) ([3cd4009](https://github.com/salesforce-experience-platform-emu/webapps/commit/3cd40094f46b2780b47fcb136f633798273016b4))
|
|
20
|
+
|
|
21
|
+
|
|
22
|
+
|
|
23
|
+
|
|
24
|
+
|
|
6
25
|
# [1.110.0](https://github.com/salesforce-experience-platform-emu/webapps/compare/v1.109.9...v1.110.0) (2026-03-19)
|
|
7
26
|
|
|
8
27
|
**Note:** Version bump only for package @salesforce/webapp-template-base-sfdx-project-experimental
|
package/dist/force-app/main/default/webapplications/feature-react-global-search/package.json
CHANGED
|
@@ -15,8 +15,8 @@
|
|
|
15
15
|
"graphql:schema": "node scripts/get-graphql-schema.mjs"
|
|
16
16
|
},
|
|
17
17
|
"dependencies": {
|
|
18
|
-
"@salesforce/sdk-data": "^1.
|
|
19
|
-
"@salesforce/webapp-experimental": "^1.
|
|
18
|
+
"@salesforce/sdk-data": "^1.111.0",
|
|
19
|
+
"@salesforce/webapp-experimental": "^1.111.0",
|
|
20
20
|
"@tailwindcss/vite": "^4.1.17",
|
|
21
21
|
"class-variance-authority": "^0.7.1",
|
|
22
22
|
"clsx": "^2.1.1",
|
|
@@ -43,7 +43,7 @@
|
|
|
43
43
|
"@graphql-eslint/eslint-plugin": "^4.1.0",
|
|
44
44
|
"@graphql-tools/utils": "^11.0.0",
|
|
45
45
|
"@playwright/test": "^1.49.0",
|
|
46
|
-
"@salesforce/vite-plugin-webapp-experimental": "^1.
|
|
46
|
+
"@salesforce/vite-plugin-webapp-experimental": "^1.111.0",
|
|
47
47
|
"@testing-library/jest-dom": "^6.6.3",
|
|
48
48
|
"@testing-library/react": "^16.1.0",
|
|
49
49
|
"@testing-library/user-event": "^14.5.2",
|
package/dist/package-lock.json
CHANGED
|
@@ -1,12 +1,12 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@salesforce/webapp-template-base-sfdx-project-experimental",
|
|
3
|
-
"version": "1.
|
|
3
|
+
"version": "1.111.0",
|
|
4
4
|
"lockfileVersion": 3,
|
|
5
5
|
"requires": true,
|
|
6
6
|
"packages": {
|
|
7
7
|
"": {
|
|
8
8
|
"name": "@salesforce/webapp-template-base-sfdx-project-experimental",
|
|
9
|
-
"version": "1.
|
|
9
|
+
"version": "1.111.0",
|
|
10
10
|
"license": "SEE LICENSE IN LICENSE.txt",
|
|
11
11
|
"devDependencies": {
|
|
12
12
|
"@lwc/eslint-plugin-lwc": "^3.3.0",
|
package/dist/package.json
CHANGED
|
@@ -14,7 +14,7 @@
|
|
|
14
14
|
* 1. login — sf org login web only if org not already connected (skip with --skip-login)
|
|
15
15
|
* 2. webapp — (all web apps) npm install && npm run build so dist exists for deploy (skip with --skip-webapp-build)
|
|
16
16
|
* 3. deploy — sf project deploy start --target-org <alias> (requires dist for entity deployment)
|
|
17
|
-
* 4. permset — sf org assign permset (skip with --skip-permset;
|
|
17
|
+
* 4. permset — sf org assign permset for each *.permissionset-meta.xml (skip with --skip-permset; override via --permset-name)
|
|
18
18
|
* 5. data — prepare unique fields + sf data import tree (skipped if no data dir/plan)
|
|
19
19
|
* 6. graphql — (in webapp) npm run graphql:schema then npm run graphql:codegen
|
|
20
20
|
* 7. dev — (in webapp) npm run dev — launch dev server (skip with --skip-dev)
|
|
@@ -52,7 +52,8 @@ function parseArgs() {
|
|
|
52
52
|
const args = process.argv.slice(2);
|
|
53
53
|
let targetOrg = null;
|
|
54
54
|
let webappName = null;
|
|
55
|
-
|
|
55
|
+
/** If non-empty, only these names are assigned; otherwise all discovered from the project. */
|
|
56
|
+
const permsetNamesExplicit = [];
|
|
56
57
|
let yes = false;
|
|
57
58
|
const flags = {
|
|
58
59
|
skipLogin: false,
|
|
@@ -69,7 +70,7 @@ function parseArgs() {
|
|
|
69
70
|
} else if (args[i] === '--webapp-name' && args[i + 1]) {
|
|
70
71
|
webappName = args[++i];
|
|
71
72
|
} else if (args[i] === '--permset-name' && args[i + 1]) {
|
|
72
|
-
|
|
73
|
+
permsetNamesExplicit.push(args[++i]);
|
|
73
74
|
} else if (args[i] === '--skip-login') flags.skipLogin = true;
|
|
74
75
|
else if (args[i] === '--skip-deploy') flags.skipDeploy = true;
|
|
75
76
|
else if (args[i] === '--skip-permset') flags.skipPermset = true;
|
|
@@ -90,7 +91,7 @@ Required:
|
|
|
90
91
|
|
|
91
92
|
Options:
|
|
92
93
|
--webapp-name <name> Web app folder name under webapplications/ (default: auto-detect)
|
|
93
|
-
--permset-name <name>
|
|
94
|
+
--permset-name <name> Assign only this permission set (repeatable). Default: all sets under permissionsets/
|
|
94
95
|
--skip-login Skip login step (login is auto-skipped if org is already connected)
|
|
95
96
|
--skip-deploy Do not deploy metadata
|
|
96
97
|
--skip-permset Do not assign permission set
|
|
@@ -108,7 +109,7 @@ Options:
|
|
|
108
109
|
console.error('Error: --target-org <alias> is required.');
|
|
109
110
|
process.exit(1);
|
|
110
111
|
}
|
|
111
|
-
return { targetOrg, webappName,
|
|
112
|
+
return { targetOrg, webappName, permsetNamesExplicit, yes, ...flags };
|
|
112
113
|
}
|
|
113
114
|
|
|
114
115
|
function discoverAllWebappDirs(webappName) {
|
|
@@ -141,6 +142,19 @@ function discoverWebappDir(webappName) {
|
|
|
141
142
|
return all[0];
|
|
142
143
|
}
|
|
143
144
|
|
|
145
|
+
/** API names from permissionsets/*.permissionset-meta.xml in the first package directory. */
|
|
146
|
+
function discoverPermissionSetNames() {
|
|
147
|
+
const dir = resolve(SFDX_SOURCE, 'permissionsets');
|
|
148
|
+
if (!existsSync(dir)) return [];
|
|
149
|
+
const names = [];
|
|
150
|
+
for (const entry of readdirSync(dir, { withFileTypes: true })) {
|
|
151
|
+
if (!entry.isFile()) continue;
|
|
152
|
+
const m = entry.name.match(/^(.+)\.permissionset-meta\.xml$/);
|
|
153
|
+
if (m) names.push(m[1]);
|
|
154
|
+
}
|
|
155
|
+
return names.sort();
|
|
156
|
+
}
|
|
157
|
+
|
|
144
158
|
function isOrgConnected(targetOrg) {
|
|
145
159
|
const result = spawnSync('sf', ['org', 'display', '--target-org', targetOrg, '--json'], {
|
|
146
160
|
cwd: ROOT,
|
|
@@ -281,7 +295,7 @@ async function main() {
|
|
|
281
295
|
const {
|
|
282
296
|
targetOrg,
|
|
283
297
|
webappName,
|
|
284
|
-
|
|
298
|
+
permsetNamesExplicit,
|
|
285
299
|
yes,
|
|
286
300
|
skipLogin: argSkipLogin,
|
|
287
301
|
skipDeploy: argSkipDeploy,
|
|
@@ -292,13 +306,22 @@ async function main() {
|
|
|
292
306
|
skipDev: argSkipDev,
|
|
293
307
|
} = parseArgs();
|
|
294
308
|
|
|
309
|
+
const permsetNames =
|
|
310
|
+
permsetNamesExplicit.length > 0 ? permsetNamesExplicit : discoverPermissionSetNames();
|
|
311
|
+
const permsetStepLabel =
|
|
312
|
+
permsetNames.length === 0
|
|
313
|
+
? 'Permset — (none under permissionsets/)'
|
|
314
|
+
: permsetNames.length <= 3
|
|
315
|
+
? `Permset — assign ${permsetNames.join(', ')}`
|
|
316
|
+
: `Permset — assign ${permsetNames.length} permission sets`;
|
|
317
|
+
|
|
295
318
|
const hasDataPlan = existsSync(DATA_PLAN) && existsSync(DATA_DIR);
|
|
296
319
|
|
|
297
320
|
const stepDefs = [
|
|
298
321
|
{ key: 'login', label: 'Login — org authentication', enabled: !argSkipLogin, available: true },
|
|
299
322
|
{ key: 'webappBuild', label: 'Webapp Build — npm install + build (pre-deploy)', enabled: !argSkipWebappBuild, available: true },
|
|
300
323
|
{ key: 'deploy', label: 'Deploy — sf project deploy start', enabled: !argSkipDeploy, available: true },
|
|
301
|
-
{ key: 'permset', label:
|
|
324
|
+
{ key: 'permset', label: permsetStepLabel, enabled: !argSkipPermset, available: true },
|
|
302
325
|
{ key: 'data', label: 'Data — delete + import records via Apex', enabled: !argSkipData && hasDataPlan, available: hasDataPlan },
|
|
303
326
|
{ key: 'graphql', label: 'GraphQL — schema introspect + codegen', enabled: !argSkipGraphql, available: true },
|
|
304
327
|
{ key: 'dev', label: 'Dev — launch dev server', enabled: !argSkipDev, available: true },
|
|
@@ -359,31 +382,38 @@ async function main() {
|
|
|
359
382
|
});
|
|
360
383
|
}
|
|
361
384
|
|
|
362
|
-
if (!skipPermset
|
|
363
|
-
|
|
364
|
-
|
|
365
|
-
'
|
|
366
|
-
['org', 'assign', 'permset', '--name', permsetName, '--target-org', targetOrg],
|
|
367
|
-
{
|
|
368
|
-
cwd: ROOT,
|
|
369
|
-
stdio: 'pipe',
|
|
370
|
-
shell: true,
|
|
371
|
-
}
|
|
372
|
-
);
|
|
373
|
-
if (permsetResult.status === 0) {
|
|
374
|
-
console.log('Permission set assigned.');
|
|
385
|
+
if (!skipPermset) {
|
|
386
|
+
if (permsetNames.length === 0) {
|
|
387
|
+
console.log('\n--- Assign permission sets ---');
|
|
388
|
+
console.log('No permission sets found under permissionsets/ and none passed via --permset-name; skipping.');
|
|
375
389
|
} else {
|
|
376
|
-
|
|
377
|
-
|
|
378
|
-
|
|
379
|
-
|
|
380
|
-
|
|
381
|
-
|
|
382
|
-
|
|
383
|
-
|
|
384
|
-
|
|
385
|
-
|
|
386
|
-
|
|
390
|
+
console.log('\n--- Assign permission sets ---');
|
|
391
|
+
for (const permsetName of permsetNames) {
|
|
392
|
+
const permsetResult = spawnSync(
|
|
393
|
+
'sf',
|
|
394
|
+
['org', 'assign', 'permset', '--name', permsetName, '--target-org', targetOrg],
|
|
395
|
+
{
|
|
396
|
+
cwd: ROOT,
|
|
397
|
+
stdio: 'pipe',
|
|
398
|
+
shell: true,
|
|
399
|
+
}
|
|
400
|
+
);
|
|
401
|
+
if (permsetResult.status === 0) {
|
|
402
|
+
console.log(`Permission set "${permsetName}" assigned.`);
|
|
403
|
+
} else {
|
|
404
|
+
const out =
|
|
405
|
+
(permsetResult.stderr?.toString() || '') + (permsetResult.stdout?.toString() || '');
|
|
406
|
+
if (out.includes('Duplicate') && out.includes('PermissionSet')) {
|
|
407
|
+
console.log(`Permission set "${permsetName}" already assigned; skipping.`);
|
|
408
|
+
} else if (out.includes('not found') && out.includes('target org')) {
|
|
409
|
+
console.log(`Permission set "${permsetName}" not in org; skipping.`);
|
|
410
|
+
} else {
|
|
411
|
+
process.stdout.write(permsetResult.stdout?.toString() || '');
|
|
412
|
+
process.stderr.write(permsetResult.stderr?.toString() || '');
|
|
413
|
+
console.error(`\nSetup failed at step: Assign permission set (${permsetName})`);
|
|
414
|
+
process.exit(permsetResult.status ?? 1);
|
|
415
|
+
}
|
|
416
|
+
}
|
|
387
417
|
}
|
|
388
418
|
}
|
|
389
419
|
}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@salesforce/webapp-template-feature-react-global-search-experimental",
|
|
3
|
-
"version": "1.
|
|
3
|
+
"version": "1.111.0",
|
|
4
4
|
"description": "Global search feature for Salesforce objects with filtering and pagination",
|
|
5
5
|
"license": "SEE LICENSE IN LICENSE.txt",
|
|
6
6
|
"author": "",
|