diff options
Diffstat (limited to 'scripts')
-rw-r--r-- | scripts/buildUMD.ts | 38 | ||||
-rw-r--r-- | scripts/cpGHPages.ts | 25 | ||||
-rw-r--r-- | scripts/rewriteBuilds.ts | 39 |
3 files changed, 102 insertions, 0 deletions
diff --git a/scripts/buildUMD.ts b/scripts/buildUMD.ts new file mode 100644 index 0000000..fc7037a --- /dev/null +++ b/scripts/buildUMD.ts @@ -0,0 +1,38 @@ +import { existsSync, mkdirSync, readFileSync, writeFileSync } from 'fs'; +import { minify, MinifyOptions } from 'terser'; +import { join } from 'path'; + +const p = (...fns: string[]) => join(__dirname, '..', ...fns); + +const src = readFileSync(p('lib', 'index.cjs'), 'utf8'); +const worker = readFileSync(p('lib', 'worker.cjs'), 'utf8'); +const nodeWorker = readFileSync(p('lib', 'node-worker.cjs'), 'utf8'); + +const opts: MinifyOptions = { + mangle: { + toplevel: true, + }, + compress: { + passes: 5, + unsafe: true, + pure_getters: true + }, + sourceMap: false +}; + +minify(src, opts).then(async out => { + const wkrOut = (await minify(worker, opts)).code!.replace( + /exports.__esModule=!0;/, + '' + ).replace(/exports\./g, '_f.'); + const nodeWkrOut = (await minify(nodeWorker, opts)).code!.replace( + /exports.__esModule=!0;/, + '' + ); + const res = "!function(f){typeof module!='undefined'&&typeof exports=='object'?module.exports=f():typeof define!='undefined'&&define.amd?define(['fflate',f]):(typeof self!='undefined'?self:this).fflate=f()}(function(){var _e={};" + + out.code!.replace(/exports\.(.*) = void 0;\n/, '').replace(/exports\./g, '_e.').replace(/require\("\.\/node-worker\.cjs"\)/, + "(typeof module!='undefined'&&typeof exports=='object'?function(_f){" + nodeWkrOut + 'return _f}:function(_f){' + wkrOut + 'return _f})({})' + ) + 'return _e})'; + if (!existsSync(p('umd'))) mkdirSync(p('umd')); + writeFileSync(p('umd', 'index.js'), res); +});
\ No newline at end of file diff --git a/scripts/cpGHPages.ts b/scripts/cpGHPages.ts new file mode 100644 index 0000000..b820c80 --- /dev/null +++ b/scripts/cpGHPages.ts @@ -0,0 +1,25 @@ +import * as createGit from 'simple-git/promise'; +import { resolve, join } from 'path'; +import { copyFileSync, readdirSync, statSync, unlinkSync } from 'fs'; + +const baseDir = resolve(__dirname, '..'); +const to = (...paths: string[]) => join(baseDir, ...paths); +const git = createGit(); +git.log({ + from: 'HEAD~1', + to: 'HEAD' +}).then(async log => { + const hash = log.latest.hash.slice(0, 7); + await git.checkout('gh-pages'); + for (const f of readdirSync(to('.'))) { + if (statSync(f).isFile()) + unlinkSync(to(f)); + } + const files = readdirSync(to('dist')) + for (const f of files) { + copyFileSync(to('dist', f), to(f)); + } + await git.add(files); + await git.commit('Build demo from ' + hash); + await git.checkout('master'); +});
\ No newline at end of file diff --git a/scripts/rewriteBuilds.ts b/scripts/rewriteBuilds.ts new file mode 100644 index 0000000..f128b69 --- /dev/null +++ b/scripts/rewriteBuilds.ts @@ -0,0 +1,39 @@ +import { readFileSync, writeFileSync, unlinkSync, renameSync } from 'fs'; +import { join } from 'path'; +const atClass = /\/\*\* \@class \*\//g, pure = '/*#__PURE__*/'; +const esModule = /exports.__esModule = true;\n/; +const libDir = join(__dirname, '..', 'lib'); +const libIndex = join(libDir, 'index.js'); +const lib = readFileSync(libIndex, 'utf-8') + .replace(atClass, pure) + .replace(esModule, '') + .replace(/exports\.(.*) = void 0;\n/, ''); + +writeFileSync(libIndex, lib); +const esmDir = join(__dirname, '..', 'esm'); +const esmIndex = join(esmDir, 'index.js'), + esmWK = join(esmDir, 'worker.js'), + esmNWK = join(esmDir, 'node-worker.js'), + libWK = join(libDir, 'worker.js'), + libNWK = join(libDir, 'node-worker.js'); +const esm = readFileSync(esmIndex, 'utf-8').replace(atClass, pure); +const wk = readFileSync(esmWK, 'utf-8'), + nwk = readFileSync(esmNWK, 'utf-8'); +writeFileSync(join(libDir, 'worker.cjs'), readFileSync(join(libDir, 'worker.js'), 'utf-8').replace(esModule, '')); +writeFileSync(join(libDir, 'node-worker.cjs'), readFileSync(join(libDir, 'node-worker.js'), 'utf-8').replace(esModule, '')); +unlinkSync(esmIndex), unlinkSync(esmWK), unlinkSync(esmNWK), unlinkSync(libIndex), unlinkSync(libWK), unlinkSync(libNWK); +unlinkSync(join(libDir, 'worker.d.ts')), unlinkSync(join(libDir, 'node-worker.d.ts')); +const workerImport = /import (.*) from '\.\/node-worker';/; +const workerRequire = /var (.*) = require\("\.\/node-worker"\);/; +const defaultExport = /export default/; +writeFileSync(join(esmDir, 'index.mjs'), "import { createRequire } from 'module';\nvar require = createRequire('/');\n" + esm.replace(workerImport, name => nwk.replace(defaultExport, `var ${name.slice(7, name.indexOf(' ', 8))} =`))); +writeFileSync(join(esmDir, 'browser.js'), esm.replace(workerImport, name => wk.replace(defaultExport, `var ${name.slice(7, name.indexOf(' ', 8))} =`))); +writeFileSync(join(libDir, 'node.cjs'), lib.replace(workerRequire, name => { + name = name.slice(4, name.indexOf(' ', 5)); + return nwk.replace(defaultExport, `var ${name} = {};\n${name}["default"] =`) +})); +writeFileSync(join(libDir, 'browser.cjs'), lib.replace(workerRequire, name => { + name = name.slice(4, name.indexOf(' ', 5)); + return wk.replace(defaultExport, `var ${name} = {};\n${name}["default"] =`) +})); +writeFileSync(join(libDir, 'index.cjs'), lib.replace(workerRequire, name => `var ${name.slice(4, name.indexOf(' ', 5))} = require("./node-worker.cjs");`));
\ No newline at end of file |