diff --git a/.gitignore b/.gitignore index 1711e84..c40a144 100644 --- a/.gitignore +++ b/.gitignore @@ -26,4 +26,5 @@ test/cov_profile coverage.lcov # Build output +deno_cache/ out/ diff --git a/bundling/bundle-web.ts b/bundling/bundle-web.ts new file mode 100644 index 0000000..acd7e5f --- /dev/null +++ b/bundling/bundle-web.ts @@ -0,0 +1,44 @@ +import {bundle} from "https://deno.land/x/emit@0.24.0/mod.ts"; +import {createCache} from "https://deno.land/x/deno_cache@0.4.1/mod.ts"; + +// Parse args +const [release, source = `https://deno.land/x/grammy@${release}/mod.ts`] = Deno.args; +if (!release) throw new Error("No release specified!"); + +// Rewrite imports from .deno.ts to .web.ts +const cache = createCache(); +const load = (specifier: string) => { + if (specifier.endsWith(".deno.ts")) { + const baseLength = specifier.length - ".deno.ts".length; + specifier = specifier.substring(0, baseLength) + ".web.ts"; + console.log(specifier); + } + return cache.load(specifier); +}; + +console.log(`Bundling version '${release}' from ${source} ...`); +// Bundle code +const {code: bundledCode} = await bundle( + "../src/mod.ts", + { + load, + compilerOptions: { + sourceMap: false, + inlineSources: false, + inlineSourceMap: false, + } + } +); + +console.log("Emitting ..."); +// Strip the huge inline source map which is somehow generated anyway +await Deno.writeTextFile( + "../out/web.mjs", + bundledCode.replace(/\/\/# sourceMappingURL=.*\n/, ""), +); +await Deno.writeTextFile( + "../out/web.d.ts", + 'export * from "./mod";\n', +); + +console.log("Done."); diff --git a/deno.jsonc b/deno.jsonc index 55bc8e6..92186d3 100644 --- a/deno.jsonc +++ b/deno.jsonc @@ -7,12 +7,14 @@ "dev": "deno fmt && deno lint && deno task test && deno task check", "clean": "git clean -fX out test/cov_profile test/coverage coverage.lcov", "coverage": "deno task clean && deno task test --coverage=./test/cov_profile && deno coverage --lcov --output=./coverage.lcov ./test/cov_profile", - "report": "genhtml ./coverage.lcov --output-directory ./test/coverage/ && echo 'Point your browser to test/coverage/index.html to see the test coverage report.'" + "report": "genhtml ./coverage.lcov --output-directory ./test/coverage/ && echo 'Point your browser to test/coverage/index.html to see the test coverage report.'", + "bundle-web": "mkdir -p out deno_cache && cd bundling && deno run --unstable --quiet --allow-net --allow-read=.. --allow-write=../out,../deno_cache https://raw.githubusercontent.com/grammyjs/grammY/v1.17.2/bundling/bundle-web.ts dev ../src/mod.ts", }, "fmt": { "indentWidth": 4, "proseWrap": "preserve", "exclude": [ + "./deno_cache/", "./node_modules/", "./out/", "./package-lock.json", @@ -21,6 +23,7 @@ }, "lint": { "exclude": [ + "./deno_cache/", "./node_modules/", "./out/", "./package-lock.json" diff --git a/package.json b/package.json index 82020da..fb2cd91 100644 --- a/package.json +++ b/package.json @@ -34,6 +34,18 @@ ], "main": "./out/mod.js", "types": "./out/mod.d.ts", + "exports": { + ".": { + "types": "./out/mod.d.ts", + "node": "./out/mod.js", + "browser": "./out/web.mjs", + "default": "./out/web.mjs" + }, + "./web": { + "types": "./out/web.d.ts", + "default": "./out/web.mjs" + } + }, "keywords": [ "telegram", "bot", diff --git a/src/deps.web.ts b/src/deps.web.ts new file mode 100644 index 0000000..e197749 --- /dev/null +++ b/src/deps.web.ts @@ -0,0 +1,7 @@ +export { + delistify, + GLOBAL_CONSTRUCTOR_MAP, + listify, +} from "https://deno.land/x/oson@1.0.1/mod.ts"; +export * from "https://lib.deno.dev/x/grammy@v1/mod.ts"; +export * from "https://lib.deno.dev/x/grammy@v1/types.ts"; diff --git a/tsconfig.json b/tsconfig.json index 05c3662..b40743c 100644 --- a/tsconfig.json +++ b/tsconfig.json @@ -14,5 +14,10 @@ "skipLibCheck": true, "target": "es2019" }, - "include": ["src/"] + "include": [ + "src/" + ], + "exclude": [ + "src/*.web.ts" + ] }