From f68ef8f723fd4488032a73c59103e830b928df2d Mon Sep 17 00:00:00 2001 From: Evgeny Poberezkin <2769109+epoberezkin@users.noreply.github.com> Date: Sat, 13 Nov 2021 17:19:18 +0000 Subject: [PATCH] change exports to fix bundles (#1812) * change exports to fix bundles * use browserify for bundling * revert exports * use browserify in bundle script --- package.json | 4 +++- rollup.config.js | 2 +- scripts/bundle.js | 48 +++++++++++++++++++++++++++++++++++++++++++++++ 3 files changed, 52 insertions(+), 2 deletions(-) create mode 100644 scripts/bundle.js diff --git a/package.json b/package.json index c8de87e54..5c90c3533 100644 --- a/package.json +++ b/package.json @@ -17,7 +17,8 @@ "test-codegen": "nyc cross-env TS_NODE_PROJECT=spec/tsconfig.json mocha -r ts-node/register 'spec/codegen.spec.ts' -R spec", "test-debug": "npm run test-spec -- --inspect-brk", "test-cov": "nyc npm run test-spec", - "bundle": "rm -rf bundle && rollup -c", + "rollup": "rm -rf bundle && rollup -c", + "bundle": "rm -rf bundle && node ./scripts/bundle.js ajv ajv7 ajv7 && node ./scripts/bundle.js 2019 ajv2019 ajv2019 && node ./scripts/bundle.js 2020 ajv2020 ajv2020 && node ./scripts/bundle.js jtd ajvJTD ajvJTD", "build": "rm -rf dist && tsc && cp -r lib/refs dist && rm dist/refs/json-schema-2019-09/index.ts && rm dist/refs/json-schema-2020-12/index.ts && rm dist/refs/jtd-schema.ts", "json-tests": "rm -rf spec/_json/*.js && node scripts/jsontests", "test-karma": "karma start", @@ -75,6 +76,7 @@ "@typescript-eslint/eslint-plugin": "^3.8.0", "@typescript-eslint/parser": "^3.8.0", "ajv-formats": "^3.0.0-rc.0", + "browserify": "^17.0.0", "chai": "^4.0.1", "cross-env": "^7.0.2", "dayjs": "^1.10.4", diff --git a/rollup.config.js b/rollup.config.js index 09dafef1b..1efaf2f51 100644 --- a/rollup.config.js +++ b/rollup.config.js @@ -26,7 +26,7 @@ function createBundleConfig(sourceFile, outFile, globalName) { } export default [ - createBundleConfig("ajv", "ajv7", "av7"), + createBundleConfig("ajv", "ajv7", "ajv7"), createBundleConfig("2019", "ajv2019", "ajv2019"), createBundleConfig("2020", "ajv2020", "ajv2020"), createBundleConfig("jtd", "ajvJTD", "ajvJTD"), diff --git a/scripts/bundle.js b/scripts/bundle.js new file mode 100644 index 000000000..62560f24a --- /dev/null +++ b/scripts/bundle.js @@ -0,0 +1,48 @@ +"use strict" + +const fs = require("fs") +const path = require("path") +const browserify = require("browserify") +const {minify} = require("terser") + +const [sourceFile, outFile, globalName] = process.argv.slice(2) + +const json = require(path.join(__dirname, "..", "package.json")) +const bundleDir = path.join(__dirname, "..", "bundle") +if (!fs.existsSync(bundleDir)) fs.mkdirSync(bundleDir) + +browserify({standalone: globalName}) + .require(path.join(__dirname, "../dist", sourceFile), {expose: sourceFile}) + .bundle(saveAndMinify) + +async function saveAndMinify(err, buf) { + if (err) { + console.error("browserify error:", err) + process.exit(1) + } + + const bundlePath = path.join(bundleDir, outFile) + const opts = { + ecma: 2018, + warnings: true, + compress: { + pure_getters: true, + keep_infinity: true, + unsafe_methods: true, + }, + format: { + preamble: `/* ${json.name} ${json.version} (${globalName}): ${json.description} */`, + }, + sourceMap: { + filename: outFile + ".min.js", + url: outFile + ".min.js.map", + }, + } + + const result = await minify(buf.toString(), opts) + + fs.writeFileSync(bundlePath + ".bundle.js", buf) + fs.writeFileSync(bundlePath + ".min.js", result.code) + fs.writeFileSync(bundlePath + ".min.js.map", result.map) + if (result.warnings) result.warnings.forEach((msg) => console.warn("terser.minify warning:", msg)) +}