summaryrefslogtreecommitdiff
path: root/scripts
diff options
context:
space:
mode:
Diffstat (limited to 'scripts')
-rw-r--r--scripts/buildUMD.ts38
-rw-r--r--scripts/cpGHPages.ts25
-rw-r--r--scripts/rewriteBuilds.ts39
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