summaryrefslogtreecommitdiffstats
path: root/toolkit/components/promiseworker/worker/GeneratePromiseWorkerScript.py
diff options
context:
space:
mode:
Diffstat (limited to 'toolkit/components/promiseworker/worker/GeneratePromiseWorkerScript.py')
-rw-r--r--toolkit/components/promiseworker/worker/GeneratePromiseWorkerScript.py69
1 files changed, 69 insertions, 0 deletions
diff --git a/toolkit/components/promiseworker/worker/GeneratePromiseWorkerScript.py b/toolkit/components/promiseworker/worker/GeneratePromiseWorkerScript.py
new file mode 100644
index 0000000000..49ffe4aa05
--- /dev/null
+++ b/toolkit/components/promiseworker/worker/GeneratePromiseWorkerScript.py
@@ -0,0 +1,69 @@
+# This Source Code Form is subject to the terms of the Mozilla Public
+# License, v. 2.0. If a copy of the MPL was not distributed with this
+# file, You can obtain one at http://mozilla.org/MPL/2.0/.
+
+import re
+
+begin_script_only_re = re.compile("^// #BEGIN_SCRIPT_ONLY")
+end_script_only_re = re.compile("^// #END_SCRIPT_ONLY")
+export_re = re.compile("^// #EXPORT (.+)")
+
+
+def process_file(template_js, kind):
+ lines = []
+ is_script_only = False
+ exports = []
+
+ with open(template_js, "r") as f:
+ for line in f:
+ if kind == "module":
+ if is_script_only:
+ m = end_script_only_re.match(line)
+ if m:
+ is_script_only = False
+
+ # NOTE: Put an empty line to keep the line number same.
+ lines.append("\n")
+ continue
+ else:
+ m = begin_script_only_re.match(line)
+ if m:
+ is_script_only = True
+ lines.append("\n")
+ continue
+ else:
+ m = end_script_only_re.match(line)
+ if m:
+ lines.append("\n")
+ continue
+
+ m = begin_script_only_re.match(line)
+ if m:
+ lines.append("\n")
+ continue
+
+ m = export_re.match(line)
+ if m:
+ name = m.group(1)
+
+ if kind == "script":
+ lines.append(f"exports.{name} = {name};\n")
+ else:
+ exports.append(name)
+ lines.append("\n")
+ continue
+
+ lines.append(line)
+
+ if kind == "module":
+ lines.append("export const PromiseWorker = { " + ", ".join(exports) + " };\n")
+
+ return "".join(lines)
+
+
+def generate_script(output, template_js):
+ output.write(process_file(template_js, "script"))
+
+
+def generate_module(output, template_js):
+ output.write(process_file(template_js, "module"))