@salesforce/webapp-template-feature-micro-frontend 1.105.1 → 1.106.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/dist/AGENT.md CHANGED
@@ -58,6 +58,10 @@ cd <sfdx-source>/webapplications/<appName>
58
58
 
59
59
  This project includes **.a4drules/** at the project root. Follow them when generating or editing code.
60
60
 
61
+ - **Salesforce Data Access** (`.a4drules/skills/salesforce-data-access/`): Use for all Salesforce data fetches. Enforces Data SDK usage (`createDataSDK()` + `sdk.graphql` or `sdk.fetch`); GraphQL preferred, fetch when GraphQL is not sufficient.
62
+ - **Salesforce REST API Fetch** (`.a4drules/skills/salesforce-rest-api-fetch/`): Use when implementing Chatter, Connect REST, Apex REST, UI API REST, or Einstein LLM calls via `sdk.fetch`.
63
+ - **Salesforce GraphQL** (`.a4drules/skills/salesforce-graphql/`): Use when implementing Salesforce GraphQL queries or mutations. Sub-skills: `salesforce-graphql-explore-schema`, `salesforce-graphql-read-query`, `salesforce-graphql-mutation-query`.
64
+
61
65
  When rules refer to "web app directory" or `<sfdx-source>/webapplications/<appName>/`, resolve `<sfdx-source>` from `sfdx-project.json` and use the **actual app folder name** for this project.
62
66
 
63
67
  ## Deploying
@@ -79,3 +83,4 @@ sf project deploy start --source-dir <packageDir> --target-org <alias>
79
83
 
80
84
  - **UI**: shadcn/ui + Tailwind. Import from `@/components/ui/...`.
81
85
  - **Entry**: Keep `App.tsx` and routes in `src/`; add features as new routes or sections, don't replace the app shell but you may modify it to match the requested design.
86
+ - **Data (Salesforce)**: Invoke the `salesforce-data-access` skill for all Salesforce data fetches. The skill enforces use of the Data SDK (`createDataSDK()` + `sdk.graphql` or `sdk.fetch`) — never use `fetch` or `axios` directly. GraphQL is preferred; use `sdk.fetch` when GraphQL is not sufficient (e.g., Chatter, Connect REST). For GraphQL implementation, invoke the `salesforce-graphql` skill.
package/dist/CHANGELOG.md CHANGED
@@ -3,6 +3,28 @@
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.106.1](https://github.com/salesforce-experience-platform-emu/webapps/compare/v1.106.0...v1.106.1) (2026-03-17)
7
+
8
+
9
+ ### Reverts
10
+
11
+ * Revert "chore: rename salesforce-* skills to verb-based names without prefix" ([79d439a](https://github.com/salesforce-experience-platform-emu/webapps/commit/79d439a8f1b8000568b7d16c3ad586025b790397))
12
+
13
+
14
+
15
+
16
+
17
+ # [1.106.0](https://github.com/salesforce-experience-platform-emu/webapps/compare/v1.105.1...v1.106.0) (2026-03-17)
18
+
19
+
20
+ ### Features
21
+
22
+ * **data-skills:** Restructure data knowledge into composable skills ([#296](https://github.com/salesforce-experience-platform-emu/webapps/issues/296)) ([35e0223](https://github.com/salesforce-experience-platform-emu/webapps/commit/35e0223ac8e14c451f204fd206d5ca29fb5e684a))
23
+
24
+
25
+
26
+
27
+
6
28
  ## [1.105.1](https://github.com/salesforce-experience-platform-emu/webapps/compare/v1.105.0...v1.105.1) (2026-03-17)
7
29
 
8
30
  **Note:** Version bump only for package @salesforce/webapp-template-base-sfdx-project-experimental
@@ -1,3 +1,7 @@
1
+ import { existsSync } from 'node:fs';
2
+ import { resolve } from 'node:path';
3
+ import { fileURLToPath } from 'node:url';
4
+ import { dirname } from 'node:path';
1
5
  import js from '@eslint/js';
2
6
  import tseslint from '@typescript-eslint/eslint-plugin';
3
7
  import tsparser from '@typescript-eslint/parser';
@@ -7,7 +11,11 @@ import reactRefresh from 'eslint-plugin-react-refresh';
7
11
  import globals from 'globals';
8
12
  import graphqlPlugin from '@graphql-eslint/eslint-plugin';
9
13
 
10
- export default [
14
+ const __dirname = dirname(fileURLToPath(import.meta.url));
15
+ const schemaPath = resolve(__dirname, '../../../../../schema.graphql');
16
+ const schemaExists = existsSync(schemaPath);
17
+
18
+ const config = [
11
19
  // Global ignores
12
20
  {
13
21
  ignores: ['build/**/*', 'dist/**/*', 'coverage/**/*'],
@@ -111,31 +119,38 @@ export default [
111
119
  '@typescript-eslint/no-explicit-any': 'off',
112
120
  },
113
121
  },
114
- // GraphQL processor - extracts GraphQL from gql template literals in TS/TSX files
115
- {
116
- files: ['**/*.{ts,tsx}'],
117
- processor: graphqlPlugin.processor,
118
- },
119
- // GraphQL linting configuration for .graphql files
120
- {
121
- files: ['**/*.graphql'],
122
- languageOptions: {
123
- parser: graphqlPlugin.parser,
124
- parserOptions: {
125
- graphQLConfig: {
126
- schema: '../../../../../schema.graphql',
122
+ ];
123
+
124
+ // Only add GraphQL rules when schema exists (e.g. after graphql:schema).
125
+ // In CI or when schema is not checked in, skip so lint succeeds.
126
+ if (schemaExists) {
127
+ config.push(
128
+ {
129
+ files: ['**/*.{ts,tsx}'],
130
+ processor: graphqlPlugin.processor,
131
+ },
132
+ {
133
+ files: ['**/*.graphql'],
134
+ languageOptions: {
135
+ parser: graphqlPlugin.parser,
136
+ parserOptions: {
137
+ graphQLConfig: {
138
+ schema: '../../../../../schema.graphql',
139
+ },
127
140
  },
128
141
  },
129
- },
130
- plugins: {
131
- '@graphql-eslint': graphqlPlugin,
132
- },
133
- rules: {
134
- '@graphql-eslint/no-anonymous-operations': 'error',
135
- '@graphql-eslint/no-duplicate-fields': 'error',
136
- '@graphql-eslint/known-fragment-names': 'error',
137
- '@graphql-eslint/no-undefined-variables': 'error',
138
- '@graphql-eslint/no-unused-variables': 'error',
139
- },
140
- },
141
- ];
142
+ plugins: {
143
+ '@graphql-eslint': graphqlPlugin,
144
+ },
145
+ rules: {
146
+ '@graphql-eslint/no-anonymous-operations': 'error',
147
+ '@graphql-eslint/no-duplicate-fields': 'error',
148
+ '@graphql-eslint/known-fragment-names': 'error',
149
+ '@graphql-eslint/no-undefined-variables': 'error',
150
+ '@graphql-eslint/no-unused-variables': 'error',
151
+ },
152
+ }
153
+ );
154
+ }
155
+
156
+ export default config;
@@ -15,8 +15,8 @@
15
15
  "graphql:schema": "node scripts/get-graphql-schema.mjs"
16
16
  },
17
17
  "dependencies": {
18
- "@salesforce/sdk-data": "^1.105.1",
19
- "@salesforce/webapp-experimental": "^1.105.1",
18
+ "@salesforce/sdk-data": "^1.106.1",
19
+ "@salesforce/webapp-experimental": "^1.106.1",
20
20
  "@tailwindcss/vite": "^4.1.17",
21
21
  "class-variance-authority": "^0.7.1",
22
22
  "clsx": "^2.1.1",
@@ -40,7 +40,7 @@
40
40
  "@graphql-eslint/eslint-plugin": "^4.1.0",
41
41
  "@graphql-tools/utils": "^11.0.0",
42
42
  "@playwright/test": "^1.49.0",
43
- "@salesforce/vite-plugin-webapp-experimental": "^1.105.1",
43
+ "@salesforce/vite-plugin-webapp-experimental": "^1.106.1",
44
44
  "@testing-library/jest-dom": "^6.6.3",
45
45
  "@testing-library/react": "^16.1.0",
46
46
  "@testing-library/user-event": "^14.5.2",
@@ -1,3 +1,4 @@
1
+ import { existsSync } from 'node:fs';
1
2
  import { defineConfig } from 'vite';
2
3
  import react from '@vitejs/plugin-react';
3
4
  import path from 'path';
@@ -6,26 +7,29 @@ import tailwindcss from '@tailwindcss/vite';
6
7
  import salesforce from '@salesforce/vite-plugin-webapp-experimental';
7
8
  import codegen from 'vite-plugin-graphql-codegen';
8
9
 
10
+ const schemaPath = resolve(__dirname, '../../../../../schema.graphql');
11
+ const schemaExists = existsSync(schemaPath);
12
+
9
13
  export default defineConfig(({ mode }) => {
10
14
  return {
11
15
  base: './',
12
- // Type assertion avoids Plugin type mismatch when dist has its own node_modules (vite/rollup)
13
16
  plugins: [
14
17
  tailwindcss(),
15
18
  react(),
16
19
  salesforce(),
17
- codegen({
18
- // Path to the codegen config file
19
- configFilePathOverride: resolve(__dirname, 'codegen.yml'),
20
- // Run codegen on dev server start
21
- runOnStart: true,
22
- // Don't run codegen on build for now
23
- runOnBuild: false,
24
- // Enable file watcher during development
25
- enableWatcher: true,
26
- // Fail build if codegen errors
27
- throwOnBuild: true,
28
- }),
20
+ // Only add codegen when schema exists (e.g. after `npm run graphql:schema`).
21
+ // In CI or when schema is not checked in, skip codegen so build succeeds.
22
+ ...(schemaExists
23
+ ? [
24
+ codegen({
25
+ configFilePathOverride: resolve(__dirname, 'codegen.yml'),
26
+ runOnStart: true,
27
+ runOnBuild: true,
28
+ enableWatcher: true,
29
+ throwOnBuild: true,
30
+ }),
31
+ ]
32
+ : []),
29
33
  ] as import('vite').PluginOption[],
30
34
 
31
35
  // Build configuration for MPA
package/dist/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@salesforce/webapp-template-base-sfdx-project-experimental",
3
- "version": "1.105.1",
3
+ "version": "1.106.1",
4
4
  "description": "Base SFDX project template",
5
5
  "license": "SEE LICENSE IN LICENSE.txt",
6
6
  "publishConfig": {
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@salesforce/webapp-template-feature-micro-frontend",
3
- "version": "1.105.1",
3
+ "version": "1.106.1",
4
4
  "description": "Micro Frontend generation feature for Web Applications",
5
5
  "license": "SEE LICENSE IN LICENSE.txt",
6
6
  "author": "",
@@ -18,8 +18,8 @@
18
18
  "clean": "rm -rf dist"
19
19
  },
20
20
  "devDependencies": {
21
- "@salesforce/micro-frontends-experimental": "^1.105.1",
22
- "@salesforce/webapp-experimental": "^1.105.1",
21
+ "@salesforce/micro-frontends-experimental": "^1.106.1",
22
+ "@salesforce/webapp-experimental": "^1.106.1",
23
23
  "@types/react": "^19.2.7",
24
24
  "@types/react-dom": "^19.2.3",
25
25
  "react-dom": "^19.2.1",