Skip to content

Commit 6214103

Browse files
authored
Add mrt-utilities (#216)
* Add mrt-utilities * Changeset
1 parent 619fe0b commit 6214103

31 files changed

+10704
-15
lines changed

.changeset/flat-dogs-stare.md

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,5 @@
1+
---
2+
'@salesforce/mrt-utilities': patch
3+
---
4+
5+
Initial release

packages/mrt-utilities/.c8rc.json

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,7 @@
1+
{
2+
"all": true,
3+
"src": ["src"],
4+
"exclude": ["test/**", "**/*.d.ts", "**/*.test.ts"],
5+
"reporter": ["text", "text-summary", "html", "lcov"],
6+
"report-dir": "coverage"
7+
}

packages/mrt-utilities/.gitignore

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,4 @@
1+
node_modules/
2+
dist/
3+
coverage/
4+
*.tsbuildinfo
Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,6 @@
1+
{
2+
"node-option": ["import=tsx", "conditions=development"],
3+
"timeout": 10000,
4+
"recursive": true,
5+
"extension": ["ts"]
6+
}

packages/mrt-utilities/README.md

Lines changed: 49 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,49 @@
1+
# mrt-utilities
2+
3+
Middleware and utilities to simulate a deployed MRT environment.
4+
5+
## Usage
6+
7+
```
8+
import {
9+
createMRTProxyMiddlewares,
10+
createMRTRequestProcessorMiddleware,
11+
createMRTStaticAssetServingMiddleware,
12+
createMRTCommonMiddleware,
13+
createMRTCleanUpMiddleware,
14+
isLocal,
15+
} from '@salesforce/mrt-utilities';
16+
17+
18+
export const createApp = (): Express => {
19+
const app = express();
20+
app.disable('x-powered-by');
21+
22+
// Top most middleware to set up headers
23+
app.use(createMRTCommonMiddleware());
24+
25+
if (isLocal()) {
26+
const requestProcessorPath = 'path/to/request-processor.js';
27+
const proxyConfigs = [
28+
{
29+
host: 'https://example.com',
30+
path: 'api',
31+
},
32+
];
33+
app.use(createMRTRequestProcessorMiddleware(requestProcessorPath, proxyConfigs));
34+
35+
const mrtProxies = createMRTProxyMiddlewares(proxyConfigs);
36+
mrtProxies.forEach(({ path, fn }) => {
37+
app.use(path, fn);
38+
});
39+
40+
const staticAssetDir = 'path/to/static';
41+
app.use(
42+
`/mobify/bundle/${process.env.BUNDLE_ID || '1'}/static/`,
43+
createMRTStaticAssetServingMiddleware(staticAssetDir)
44+
);
45+
}
46+
47+
// Cleans up any remaining headers and sets any remaining values
48+
app.use(createMRTCleanUpMiddleware());
49+
```
Lines changed: 45 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,45 @@
1+
/*
2+
* Copyright (c) 2025, Salesforce, Inc.
3+
* SPDX-License-Identifier: Apache-2
4+
* For full license text, see the license.txt file in the repo root or http://www.apache.org/licenses/LICENSE-2.0
5+
*/
6+
import {includeIgnoreFile} from '@eslint/compat';
7+
import headerPlugin from 'eslint-plugin-header';
8+
import tseslint from 'typescript-eslint';
9+
import path from 'node:path';
10+
import {fileURLToPath} from 'node:url';
11+
12+
import {copyrightHeader, sharedRules, chaiTestRules, prettierPlugin} from '../../eslint.config.mjs';
13+
14+
const gitignorePath = path.resolve(path.dirname(fileURLToPath(import.meta.url)), '.gitignore');
15+
headerPlugin.rules.header.meta.schema = false;
16+
17+
export default [
18+
includeIgnoreFile(gitignorePath),
19+
...tseslint.configs.recommended,
20+
prettierPlugin,
21+
{
22+
files: ['**/*.ts'],
23+
plugins: {
24+
header: headerPlugin,
25+
},
26+
languageOptions: {
27+
parserOptions: {
28+
project: true,
29+
tsconfigRootDir: import.meta.dirname,
30+
},
31+
},
32+
rules: {
33+
'header/header': ['error', 'block', copyrightHeader],
34+
...sharedRules,
35+
},
36+
},
37+
{
38+
files: ['test/**/*.ts'],
39+
rules: {
40+
...chaiTestRules,
41+
// Streaming adapter tests use any for mock streams and event shapes
42+
'@typescript-eslint/no-explicit-any': 'off',
43+
},
44+
},
45+
];
Lines changed: 132 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,132 @@
1+
{
2+
"name": "@salesforce/mrt-utilities",
3+
"version": "0.0.1",
4+
"description": "Middleware and utilities to simulate a deployed Managed Runtime environment",
5+
"type": "module",
6+
"author": "Salesforce",
7+
"license": "Apache-2.0",
8+
"repository": "SalesforceCommerceCloud/b2c-developer-tooling",
9+
"keywords": [
10+
"salesforce",
11+
"commerce-cloud",
12+
"mrt",
13+
"middleware",
14+
"express"
15+
],
16+
"main": "./dist/cjs/index.js",
17+
"module": "./dist/esm/index.js",
18+
"types": "./dist/esm/index.d.ts",
19+
"exports": {
20+
"./package.json": "./package.json",
21+
".": {
22+
"development": "./src/index.ts",
23+
"import": {
24+
"types": "./dist/esm/index.d.ts",
25+
"default": "./dist/esm/index.js"
26+
},
27+
"require": {
28+
"types": "./dist/cjs/index.d.ts",
29+
"default": "./dist/cjs/index.js"
30+
}
31+
},
32+
"./middleware": {
33+
"development": "./src/middleware/index.ts",
34+
"import": {
35+
"types": "./dist/esm/middleware/index.d.ts",
36+
"default": "./dist/esm/middleware/index.js"
37+
},
38+
"require": {
39+
"types": "./dist/cjs/middleware/index.d.ts",
40+
"default": "./dist/cjs/middleware/index.js"
41+
}
42+
},
43+
"./metrics": {
44+
"development": "./src/metrics/index.ts",
45+
"import": {
46+
"types": "./dist/esm/metrics/index.d.ts",
47+
"default": "./dist/esm/metrics/index.js"
48+
},
49+
"require": {
50+
"types": "./dist/cjs/metrics/index.d.ts",
51+
"default": "./dist/cjs/metrics/index.js"
52+
}
53+
},
54+
"./streaming": {
55+
"development": "./src/streaming/index.ts",
56+
"import": {
57+
"types": "./dist/esm/streaming/index.d.ts",
58+
"default": "./dist/esm/streaming/index.js"
59+
},
60+
"require": {
61+
"types": "./dist/cjs/streaming/index.d.ts",
62+
"default": "./dist/cjs/streaming/index.js"
63+
}
64+
}
65+
},
66+
"files": [
67+
"dist"
68+
],
69+
"scripts": {
70+
"build": "pnpm run build:esm && pnpm run build:cjs",
71+
"build:esm": "tsc -p tsconfig.esm.json",
72+
"build:cjs": "tsc -p tsconfig.cjs.json && echo '{\"type\":\"commonjs\"}' > dist/cjs/package.json",
73+
"clean": "shx rm -rf dist",
74+
"lint": "eslint",
75+
"lint:agent": "eslint --quiet",
76+
"typecheck:agent": "tsc --noEmit --pretty false",
77+
"format": "prettier --write .",
78+
"format:check": "prettier --check .",
79+
"pretest": "tsc --noEmit -p test",
80+
"test": "c8 mocha --forbid-only \"test/**/*.test.ts\"",
81+
"test:agent": "mocha --forbid-only --reporter min \"test/**/*.test.ts\"",
82+
"test:watch": "mocha --watch \"test/**/*.test.ts\""
83+
},
84+
"dependencies": {
85+
"@aws-sdk/client-cloudwatch": "3.952.0",
86+
"@aws-sdk/client-dynamodb": "3.980.0",
87+
"@aws-sdk/lib-dynamodb": "3.980.0",
88+
"@h4ad/serverless-adapter": "4.4.0",
89+
"change-case": "5.4.4",
90+
"compressible": "2.0.18",
91+
"http-proxy-middleware": "3.0.5",
92+
"mime-types": "3.0.1",
93+
"negotiator": "1.0.0",
94+
"qs": "6.14.0",
95+
"set-cookie-parser": "2.7.1"
96+
},
97+
"devDependencies": {
98+
"@salesforce/dev-config": "catalog:",
99+
"@serverless/event-mocks": "1.1.1",
100+
"@types/aws-lambda": "8.10.160",
101+
"@types/chai": "catalog:",
102+
"@types/compressible": "2.0.3",
103+
"@types/express": "5.0.3",
104+
"@types/mime-types": "3.0.1",
105+
"@types/mocha": "catalog:",
106+
"@types/negotiator": "0.6.4",
107+
"@types/node": "catalog:",
108+
"@types/qs": "6.14.0",
109+
"@types/set-cookie-parser": "2.4.10",
110+
"@types/sinon": "catalog:",
111+
"c8": "catalog:",
112+
"chai": "catalog:",
113+
"eslint": "catalog:",
114+
"eslint-config-prettier": "catalog:",
115+
"eslint-plugin-header": "catalog:",
116+
"eslint-plugin-prettier": "catalog:",
117+
"express": "5.1.0",
118+
"mocha": "catalog:",
119+
"prettier": "catalog:",
120+
"shx": "catalog:",
121+
"sinon": "catalog:",
122+
"tsx": "catalog:",
123+
"typescript": "catalog:",
124+
"typescript-eslint": "catalog:"
125+
},
126+
"peerDependencies": {
127+
"express": "5.1.0"
128+
},
129+
"engines": {
130+
"node": ">=22.16.0"
131+
}
132+
}
Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,10 @@
1+
/*
2+
* Copyright (c) 2025, Salesforce, Inc.
3+
* SPDX-License-Identifier: Apache-2
4+
* For full license text, see the license.txt file in the repo root or http://www.apache.org/licenses/LICENSE-2.0
5+
*/
6+
7+
export * from './middleware/index.js';
8+
export * from './metrics/index.js';
9+
export * from './streaming/index.js';
10+
export {isLocal} from './utils/utils.js';
Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,7 @@
1+
/*
2+
* Copyright (c) 2025, Salesforce, Inc.
3+
* SPDX-License-Identifier: Apache-2
4+
* For full license text, see the license.txt file in the repo root or http://www.apache.org/licenses/LICENSE-2.0
5+
*/
6+
7+
export * from './metrics-sender.js';

0 commit comments

Comments
 (0)