Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
4 changes: 3 additions & 1 deletion .gitignore
Original file line number Diff line number Diff line change
Expand Up @@ -182,4 +182,6 @@ dist

.turbo
dist
link
link

federation-bundle/
14 changes: 5 additions & 9 deletions README.md
Original file line number Diff line number Diff line change
Expand Up @@ -18,17 +18,13 @@ This project was created using `bun init` in bun v1.0.30. [Bun](https://bun.sh)
## Run locally with Rocket.Chat

### Run at homeserver side

```shell
bun run build
cd packages/federation-sdk
mkdir -p ./link/ && touch ./link/yarn.lock && jq '.dependencies = {}' package.json > ./link/package.json
bun build ./src/index.ts --outfile ./link/dist/bundle.js --target node --format=cjs -e pino -e mongodb -e zod -e pino-pretty -e @rocket.chat/emitter -e reflect-metadata -e tsyringe -e tweetnacl
bun build bundle:sdk
```

### Run at Rocket.Chat side

```shell
yarn link ../homeserver/packages/federation-sdk/link
cd ee/packages/federation-matrix
yarn link ../../../../homeserver/packages/federation-sdk/link
yarn
```
yarn link ../homeserver/federation-bundle
```
2 changes: 1 addition & 1 deletion bun.lock

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

90 changes: 90 additions & 0 deletions bundle.ts
Original file line number Diff line number Diff line change
@@ -0,0 +1,90 @@
import Bun, { $ } from 'bun';

const inputDir = './packages/federation-sdk';
const outputDir = './federation-bundle';

// get dependencies from all packages
function getAllDependencies() {
const packages = ['core', 'crypto', 'federation-sdk', 'room'];

const allDependencies = new Set<string>();

for (const pkg of packages) {
const packageJson = require(`./packages/${pkg}/package.json`);

const dependencies = packageJson.dependencies
? Object.keys(packageJson.dependencies)
: [];

for (const dep of dependencies) {
allDependencies.add(dep);
}
}

return Array.from(allDependencies);
}

async function main() {
await $`rm -rf ${outputDir}/dist`;
await $`mkdir -p ${outputDir}/dist`;
await $`touch ${outputDir}/yarn.lock`;

const dependencies = getAllDependencies();

await Bun.build({
entrypoints: [`${inputDir}/src/index.ts`],
outdir: `${outputDir}/dist`,
target: 'node',
format: 'cjs',
external: dependencies,
env: 'disable',
define: {
'process.env.NODE_ENV': '"production"',
},
minify: true,
sourcemap: true,
});

const packageJson = JSON.parse(
await Bun.file(`${inputDir}/package.json`).text(),
);

const filterWorkspace = (deps: Record<string, unknown>) =>
Object.fromEntries(
Object.entries(deps || {}).filter(
([, value]) =>
typeof value === 'string' && !value.startsWith('workspace:'),
),
);

packageJson.dependencies = filterWorkspace(packageJson.dependencies);
packageJson.devDependencies = filterWorkspace(packageJson.devDependencies);
packageJson.peerDependencies = filterWorkspace(packageJson.peerDependencies);

await Bun.file(`${outputDir}/package.json`).write(
`${JSON.stringify(packageJson, null, 2)}\n`,
);

await $`tsc --emitDeclarationOnly -p tsconfig.sdk.types.json`;

console.log('Bundle complete!');
}

await main();

/*
bun build ./packages/federation-sdk/src/index.ts \
--outdir ./packages/federation-bundle/dist-cli \
--target node \
--format=cjs \
-e pino \
-e mongodb \
-e zod \
-e pino-pretty \
-e @rocket.chat/emitter \
-e reflect-metadata \
-e tsyringe \
-e tweetnacl \
--production \
--sourcemap=inline
*/
4 changes: 2 additions & 2 deletions package.json
Original file line number Diff line number Diff line change
Expand Up @@ -49,7 +49,7 @@
"lint": "bunx @biomejs/biome lint --diagnostic-level=error",
"lint:ci": "bunx @biomejs/biome ci --diagnostic-level=error",
"lint:fix": "bunx @biomejs/biome lint --fix",
"tsc": "bunx tsc --noEmit",
"bundle:sdk": "bunx esbuild --bundle --sourcemap --tsconfig=./tsconfig.json --platform=node --allow-overwrite --outfile=packages/federation-sdk/dist/index.js packages/federation-sdk/dist/index.js"
"tsc": "tsc --noEmit",
"bundle:sdk": "bun run bundle.ts"
}
}
8 changes: 4 additions & 4 deletions packages/federation-sdk/package.json
Original file line number Diff line number Diff line change
Expand Up @@ -2,13 +2,13 @@
"name": "@rocket.chat/federation-sdk",
"version": "0.1.3",
"description": "Matrix Federation SDK for server-to-server communication",
"main": "./dist/bundle.js",
"main": "./dist/index.js",
"types": "./dist/index.d.ts",
"exports": {
".": {
"types": "./dist/index.d.ts",
"import": "./dist/bundle.js",
"require": "./dist/bundle.js"
"import": "./dist/index.js",
"require": "./dist/index.js"
}
},
"scripts": {
Expand All @@ -24,7 +24,7 @@
"reflect-metadata": "^0.2.2",
"tsyringe": "^4.10.0",
"tweetnacl": "^1.0.3",
"zod": "^3.22.4"
"zod": "^3.24.1"
},
"license": "SEE LICENSE IN LICENSE",
"files": ["dist"],
Expand Down
15 changes: 15 additions & 0 deletions tsconfig.sdk.types.json
Original file line number Diff line number Diff line change
@@ -0,0 +1,15 @@
{
"extends": "./tsconfig.base.json",
"compilerOptions": {
"outDir": "./federation-bundle/dist",
"rootDir": "./packages/federation-sdk/src",
"composite": false,
"verbatimModuleSyntax": false,
"declarationMap": true,
"noEmit": false,
"tsBuildInfoFile": null,
"incremental": false
},
"include": ["./packages/federation-sdk/src/**/*"],
"exclude": ["node_modules", "dist", "**/*.spec.ts", "**/*.test.ts"]
}