diff --git a/scripts/sdk/base-manifest.json b/scripts/sdk/base-manifest.json new file mode 100644 index 00000000..829cd3a6 --- /dev/null +++ b/scripts/sdk/base-manifest.json @@ -0,0 +1,11 @@ +{ + "name": "hydrogen-sdk", + "version": "0.0.1", + "main": "./hydrogen.cjs.js", + "exports": { + "import": "./hydrogen.es.js", + "require": "./hydrogen.cjs.js" + }, + "files": [], + "types": "types/lib.d.ts" +} diff --git a/scripts/sdk/build.sh b/scripts/sdk/build.sh index 71c98438..90b43534 100755 --- a/scripts/sdk/build.sh +++ b/scripts/sdk/build.sh @@ -1,3 +1,4 @@ -yarn run vite build -c vite.sdk-config.js +yarn run vite build -c vite.sdk-assets-config.js +yarn run vite build -c vite.sdk-lib-config.js yarn tsc -p tsconfig-declaration.json ./scripts/sdk/create-manifest.js ./target/package.json diff --git a/scripts/sdk/create-manifest.js b/scripts/sdk/create-manifest.js index 93074c55..7a01de0a 100755 --- a/scripts/sdk/create-manifest.js +++ b/scripts/sdk/create-manifest.js @@ -1,21 +1,15 @@ #!/usr/bin/env node const fs = require("fs"); -const baseManifest = JSON.parse(fs.readFileSync("package.json", "utf8")); +const appManifest = require("../../package.json") +const baseSDKManifest = require("./base-manifest.json") const mergeOptions = require('merge-options'); const manifestExtension = { - name: "hydrogen-sdk", - main: "./hydrogen.cjs.js", - exports: { - import: "./hydrogen.es.js", - require: "./hydrogen.cjs.js" - }, - files: [], - types: "types/lib.d.ts", devDependencies: undefined, scripts: undefined, }; -const manifest = mergeOptions(baseManifest, manifestExtension); + +const manifest = mergeOptions(appManifest, baseSDKManifest, manifestExtension); const json = JSON.stringify(manifest, undefined, 2); const outFile = process.argv[2]; fs.writeFileSync(outFile, json, {encoding: "utf8"}); diff --git a/src/foo-index.html b/src/index.html similarity index 54% rename from src/foo-index.html rename to src/index.html index c6bfa098..bec701d9 100644 --- a/src/foo-index.html +++ b/src/index.html @@ -1,16 +1,13 @@ + - - diff --git a/src/lib.ts b/src/lib.ts index 6a5f6581..27290fb5 100644 --- a/src/lib.ts +++ b/src/lib.ts @@ -31,12 +31,3 @@ export {RoomViewModel} from "./domain/session/room/RoomViewModel.js"; export {RoomView} from "./platform/web/ui/session/room/RoomView.js"; export {TimelineViewModel} from "./domain/session/room/timeline/TimelineViewModel.js"; export {TimelineView} from "./platform/web/ui/session/room/TimelineView"; - -// @ts-ignore -export * from "./platform/web/ui/css/main.css"; -// @ts-ignore -export * from "./platform/web/ui/css/themes/element/theme.css"; -// @ts-ignore -import _downloadSandboxPath from "./platform/web/assets/download-sandbox.html?url"; -// @ts-ignore -import _workerPath from "./platform/web/worker/main.js?url"; diff --git a/vite.common-config.js b/vite.common-config.js index 08d17b3a..b253d1fe 100644 --- a/vite.common-config.js +++ b/vite.common-config.js @@ -7,19 +7,10 @@ const version = manifest.version; const commonOptions = { logLevel: "info", - public: false, + publicDir: false, server: { hmr: false }, - resolve: { - alias: { - // these should only be imported by the base-x package in any runtime code - // and works in the browser with a Uint8Array shim, - // rather than including a ton of polyfill code - "safe-buffer": "./scripts/package-overrides/safe-buffer/index.js", - "buffer": "./scripts/package-overrides/buffer/index.js", - } - }, build: { emptyOutDir: true, assetsInlineLimit: 0, diff --git a/vite.config.js b/vite.config.js index b6ec597d..e11c61d8 100644 --- a/vite.config.js +++ b/vite.config.js @@ -9,6 +9,15 @@ export default defineConfig(({mode}) => { return mergeOptions(commonOptions, { root: "src/platform/web", base: "./", + resolve: { + alias: { + // these should only be imported by the base-x package in any runtime code + // and works in the browser with a Uint8Array shim, + // rather than including a ton of polyfill code + "safe-buffer": "./scripts/package-overrides/safe-buffer/index.js", + "buffer": "./scripts/package-overrides/buffer/index.js", + } + }, build: { outDir: "../../../target", minify: true, diff --git a/vite.sdk-assets-config.js b/vite.sdk-assets-config.js new file mode 100644 index 00000000..90720966 --- /dev/null +++ b/vite.sdk-assets-config.js @@ -0,0 +1,11 @@ +const path = require("path"); +const mergeOptions = require('merge-options'); +const commonOptions = require("./vite.common-config.js"); + +export default mergeOptions(commonOptions, { + root: "src/", + base: "./", + build: { + outDir: "../target/asset-build/", + }, +}); diff --git a/vite.sdk-config.js b/vite.sdk-config.js deleted file mode 100644 index 194513fb..00000000 --- a/vite.sdk-config.js +++ /dev/null @@ -1,72 +0,0 @@ -const path = require("path"); -const mergeOptions = require('merge-options').bind({concatArrays: true}); -const commonOptions = require("./vite.common-config.js"); -const manifest = require("./package.json"); - -const srcDir = path.join(__dirname, "src/"); -const modulesDir = path.join(srcDir, "node_modules/"); -const mocksDir = path.join(srcDir, "mocks/"); -const fixturesDir = path.join(srcDir, "fixtures/"); - -const commonOutput = { - // manualChunks: (id) => { - // if (id.endsWith("/lib.ts")) { - // console.log(id, arguments); - // return "es/lib"; - // } - // if (id.startsWith(srcDir)) { - // const idPath = id.substring(srcDir.length); - // const pathWithoutExt = idPath.substring(0, idPath.lastIndexOf(".")); - // return pathWithoutExt; - // } else { - // return "index"; - // } - // }, - chunkFileNames: `[format]/[name].js`, - assetFileNames: `assets/[name][extname]`, - // important to preserve export names of every module - // so we can still override the file and provider alternative impls - minifyInternalExports: false, - preferConst: true, -}; - -const externalDependencies = Object.keys(manifest.dependencies).concat(Object.keys(manifest.devDependencies)).filter(d => d !== "@matrix-org/olm").map(d => path.join(__dirname, "node_modules", d)); -console.log("external", externalDependencies); - -export default mergeOptions(commonOptions, { - root: "src/", - plugins: [ - { - name: "showconfig", - buildStart(rollupOptions) { - console.dir(rollupOptions, {depth: 100}); - }, - resolveId(source, importer) { - console.log(source, importer); - } - } - ], - build: { - minify: false, - sourcemap: false, - outDir: "../target", - rollupOptions: { - input: "./src/lib.ts", - treeshake: false, - external: (id, parentId) => { - const resolveId = (id.startsWith("./") || id.startsWith("../")) ? path.join(path.dirname(parentId), id) : id; - const external = externalDependencies.some(d => resolveId.startsWith(d)); - if (external) { - console.log("external", resolveId); - } - return external; - //return !resolveId.startsWith(srcDir);// || resolveId.startsWith(mocksDir) || resolveId.startsWith(fixturesDir); - }, - preserveEntrySignatures: "strict", - output: [ - Object.assign({}, commonOutput, {format: "es"}), - Object.assign({}, commonOutput, {format: "cjs"}), - ] - } - }, -}); diff --git a/vite.sdk-lib-config.js b/vite.sdk-lib-config.js new file mode 100644 index 00000000..bd2250af --- /dev/null +++ b/vite.sdk-lib-config.js @@ -0,0 +1,54 @@ +const path = require("path"); +const mergeOptions = require('merge-options'); +const commonOptions = require("./vite.common-config.js"); +const manifest = require("./package.json") + +// const srcDir = path.join(__dirname, "src/"); +// const modulesDir = path.join(srcDir, "node_modules/"); +// const mocksDir = path.join(srcDir, "mocks/"); +// const fixturesDir = path.join(srcDir, "fixtures/"); + +const externalDependencies = Object.keys(manifest.dependencies) + .concat(Object.keys(manifest.devDependencies)) + .map(d => path.join(__dirname, "node_modules", d)); + +export default mergeOptions(commonOptions, { + root: "src/", + build: { + lib: { + entry: path.resolve(__dirname, 'src/lib.ts'), + formats: ["cjs", "es"], + fileName: format => `hydrogen.${format}.js`, + }, + minify: false, + sourcemap: false, + outDir: "../target/lib-build", + // don't bundle any dependencies, they should be imported/required + rollupOptions: { + external(id, parentId) { + const isRelativePath = id.startsWith("./") || id.startsWith("../"); + const isModuleIdentifier = !isRelativePath && !id.startsWith("/"); + const resolveId = isRelativePath ? path.join(path.dirname(parentId), id) : id; + const external = isModuleIdentifier || + externalDependencies.some(d => resolveId.startsWith(d)); + // resolveId.startsWith(fixturesDir) || + // resolveId.startsWith(mocksDir); + return external; + }, + /* don't bundle, so we can override imports per file at build time to replace components */ + // output: { + // manualChunks: (id) => { + // if (id.startsWith(srcDir)) { + // const idPath = id.substring(srcDir.length); + // const pathWithoutExt = idPath.substring(0, idPath.lastIndexOf(".")); + // return pathWithoutExt; + // } else { + // return "index"; + // } + // }, + // minifyInternalExports: false, + // chunkFileNames: "[format]/[name].js" + // } + } + }, +});