[REF] tools: transpile esm to sync module

This commit changes the js transpiler to write sync module.
The goal is to remove all async module and simplify the
module loader in the future.

task id: 3265979

closes odoo/odoo#119186

Signed-off-by: Géry Debongnie <ged@odoo.com>
This commit is contained in:
Michael (mcm)
2023-04-21 23:46:16 +02:00
parent e8b75e4d99
commit 1e1c447d0d
2 changed files with 28 additions and 28 deletions
@@ -14,14 +14,14 @@ class TestJsTranspiler(TransactionCase):
input_content = """/** @odoo-module alias=test_assetsbundle.Alias **/"""
result = transpile_javascript("/test_assetsbundle/static/src/alias.js", input_content)
expected_result = """odoo.define('@test_assetsbundle/alias', [], async function (require) {
expected_result = """odoo.define('@test_assetsbundle/alias', [], function (require) {
'use strict';
let __exports = {};
/** @odoo-module alias=test_assetsbundle.Alias **/
return __exports;
});
odoo.define(`test_assetsbundle.Alias`, async function(require) {
odoo.define(`test_assetsbundle.Alias`, function (require) {
return require('@test_assetsbundle/alias')[Symbol.for("default")];
});
"""
@@ -32,14 +32,14 @@ odoo.define(`test_assetsbundle.Alias`, async function(require) {
input_content = """/** @odoo-module alias=test_assetsbundle.Alias default=False **/"""
result = transpile_javascript("/test_assetsbundle/static/src/alias.js", input_content)
expected_result = """odoo.define('@test_assetsbundle/alias', [], async function (require) {
expected_result = """odoo.define('@test_assetsbundle/alias', [], function (require) {
'use strict';
let __exports = {};
/** @odoo-module alias=test_assetsbundle.Alias default=False **/
return __exports;
});
odoo.define(`test_assetsbundle.Alias`, async function(require) {
odoo.define(`test_assetsbundle.Alias`, function (require) {
return require('@test_assetsbundle/alias');
});
"""
@@ -49,14 +49,14 @@ odoo.define(`test_assetsbundle.Alias`, async function(require) {
input_content = """/** @odoo-module alias=test_assetsbundle.Alias default=0 **/"""
result = transpile_javascript("/test_assetsbundle/static/src/alias.js", input_content)
expected_result = """odoo.define('@test_assetsbundle/alias', [], async function (require) {
expected_result = """odoo.define('@test_assetsbundle/alias', [], function (require) {
'use strict';
let __exports = {};
/** @odoo-module alias=test_assetsbundle.Alias default=0 **/
return __exports;
});
odoo.define(`test_assetsbundle.Alias`, async function(require) {
odoo.define(`test_assetsbundle.Alias`, function (require) {
return require('@test_assetsbundle/alias');
});
"""
@@ -66,14 +66,14 @@ odoo.define(`test_assetsbundle.Alias`, async function(require) {
input_content = """/** @odoo-module alias=test_assetsbundle.Alias default=false **/"""
result = transpile_javascript("/test_assetsbundle/static/src/alias.js", input_content)
expected_result = """odoo.define('@test_assetsbundle/alias', [], async function (require) {
expected_result = """odoo.define('@test_assetsbundle/alias', [], function (require) {
'use strict';
let __exports = {};
/** @odoo-module alias=test_assetsbundle.Alias default=false **/
return __exports;
});
odoo.define(`test_assetsbundle.Alias`, async function(require) {
odoo.define(`test_assetsbundle.Alias`, function (require) {
return require('@test_assetsbundle/alias');
});
"""
@@ -93,7 +93,7 @@ export const Ferrari = class Ferrari extends Car {};
"""
result = transpile_javascript("/test_assetsbundle/static/src/classes.js", input_content)
expected_result = """odoo.define('@test_assetsbundle/classes', [], async function (require) {
expected_result = """odoo.define('@test_assetsbundle/classes', [], function (require) {
'use strict';
let __exports = {};
const Nice = __exports[Symbol.for("default")] = class Nice {}
@@ -146,7 +146,7 @@ const aaa = "keep!";
"""
result = transpile_javascript("/test_assetsbundle/static/src/comments.js", input_content)
expected_result = """odoo.define('@test_assetsbundle/comments', [], async function (require) {
expected_result = """odoo.define('@test_assetsbundle/comments', [], function (require) {
'use strict';
let __exports = {};
/**
@@ -206,7 +206,7 @@ export default function sayHelloDefault() {
"""
result = transpile_javascript("/test_assetsbundle/static/src/functions.js", input_content)
expected_result = """odoo.define('@test_assetsbundle/functions', [], async function (require) {
expected_result = """odoo.define('@test_assetsbundle/functions', [], function (require) {
'use strict';
let __exports = {};
__exports.sayHello = sayHello; function sayHello() {
@@ -268,7 +268,7 @@ import Line16 from "test.Dialog.error";
"""
result = transpile_javascript("/test_assetsbundle/static/src/import.js", input_content)
expected_result = """odoo.define('@test_assetsbundle/import', ['@test_assetsbundle/Dialog', 'Dialog', '@tests/Dialog', 'test.Dialog', 'test.Dialog2', 'legacy.module', '@new_module/file', '@test.Dialog', 'test/Dialog', 'test.Dialog.error'], async function (require) {
expected_result = """odoo.define('@test_assetsbundle/import', ['@test_assetsbundle/Dialog', 'Dialog', '@tests/Dialog', 'test.Dialog', 'test.Dialog2', 'legacy.module', '@new_module/file', '@test.Dialog', 'test/Dialog', 'test.Dialog.error'], function (require) {
'use strict';
let __exports = {};
/**
@@ -322,7 +322,7 @@ import c from "@tests/dir/index/";
import d from "@tests";"""
result = transpile_javascript("/test_assetsbundle/static/src/index.js", input_content)
expected_result = """odoo.define('@test_assetsbundle', ['@tests/dir', '@tests'], async function (require) {
expected_result = """odoo.define('@test_assetsbundle', ['@tests/dir', '@tests'], function (require) {
'use strict';
let __exports = {};
const a = __exports.a = 5;
@@ -364,7 +364,7 @@ export * from "@tests/Dialog";
"""
result = transpile_javascript("/test_assetsbundle/static/src/list.js", input_content)
expected_result = """odoo.define('@test_assetsbundle/list', ['@tests/Dialog', '@test_assetsbundle/Dialog'], async function (require) {
expected_result = """odoo.define('@test_assetsbundle/list', ['@tests/Dialog', '@test_assetsbundle/Dialog'], function (require) {
'use strict';
let __exports = {};
Object.assign(__exports, {a, b});
@@ -411,7 +411,7 @@ export default a;
"""
result = transpile_javascript("/test_assetsbundle/static/src/variables.js", input_content)
expected_result = """odoo.define('@test_assetsbundle/variables', [], async function (require) {
expected_result = """odoo.define('@test_assetsbundle/variables', [], function (require) {
'use strict';
let __exports = {};
const v = __exports.v = 5;
@@ -432,14 +432,14 @@ return __exports;
self.assertEqual(result, expected_result)
def test_10_qunit_module_test(self):
input_content = """QUnit.test("Tests", async function (assert) {{}})"""
input_content = """QUnit.test("Tests", function (assert) {{}})"""
result = transpile_javascript("/test_assetsbundle/static/tests/alias.js", input_content)
expected_result = """odoo.define('@test_assetsbundle/../tests/alias', [], async function (require) {
expected_result = """odoo.define('@test_assetsbundle/../tests/alias', [], function (require) {
'use strict';
let __exports = {};
QUnit.module("test_assetsbundle", function() {QUnit.test("Tests", async function (assert) {{}})});
QUnit.module("test_assetsbundle", function() {QUnit.test("Tests", function (assert) {{}})});
return __exports;
});
"""
@@ -447,14 +447,14 @@ return __exports;
self.assertEqual(result, expected_result)
def test_11_qunit_module_debug(self):
input_content = """QUnit.debug("Tests", async function (assert) {{}})"""
input_content = """QUnit.debug("Tests", function (assert) {{}})"""
result = transpile_javascript("/test_assetsbundle/static/tests/alias.js", input_content)
expected_result = """odoo.define('@test_assetsbundle/../tests/alias', [], async function (require) {
expected_result = """odoo.define('@test_assetsbundle/../tests/alias', [], function (require) {
'use strict';
let __exports = {};
QUnit.module("test_assetsbundle", function() {QUnit.debug("Tests", async function (assert) {{}})});
QUnit.module("test_assetsbundle", function() {QUnit.debug("Tests", function (assert) {{}})});
return __exports;
});
"""
@@ -466,7 +466,7 @@ return __exports;
result = transpile_javascript("/test_assetsbundle/static/tests/alias.js", input_content)
expected_result = """odoo.define('@test_assetsbundle/../tests/alias', [], async function (require) {
expected_result = """odoo.define('@test_assetsbundle/../tests/alias', [], function (require) {
'use strict';
let __exports = {};
let a = 1 + 1;
@@ -497,7 +497,7 @@ const dialog = require("@test/Dialog2")
result = transpile_javascript("/test_assetsbundle/static/src/alias.js", input_content)
expected_result = """odoo.define('@test_assetsbundle/alias', ['@test/Dialog', '@test/Dialog2'], async function (require) {
expected_result = """odoo.define('@test_assetsbundle/alias', ['@test/Dialog', '@test/Dialog2'], function (require) {
'use strict';
let __exports = {};
+5 -5
View File
@@ -68,7 +68,7 @@ URL_RE = re.compile(r"""
def url_to_module_path(url):
"""
Odoo modules each have a name. (odoo.define("<the name>", async function (require) {...});
Odoo modules each have a name. (odoo.define("<the name>", function (require) {...});
It is used in to be required later. (const { something } = require("<the name>").
The transpiler transforms the url of the file in the project to this name.
It takes the module name and add a @ on the start of it, and map it to be the source of the static/src (or
@@ -113,7 +113,7 @@ def wrap_with_odoo_define(module_path, dependencies, content):
It adds as a second argument the list of dependencies.
Should logically be called once all other operations have been performed.
"""
return f"""odoo.define({module_path!r}, {list(dependencies)}, async function (require) {{
return f"""odoo.define({module_path!r}, {list(dependencies)}, function (require) {{
'use strict';
let __exports = {{}};
{content}
@@ -694,7 +694,7 @@ def get_aliased_odoo_define_content(module_path, content):
we have a problem when we will have converted to module to ES6: its new name will be more like
"web/chrome/abstract_action". So the require would fail !
So we add a second small modules, an alias, as such:
> odoo.define("web/chrome/abstract_action", async function(require) {
> odoo.define("web/chrome/abstract_action", function (require) {
> return require('web.AbstractAction')[Symbol.for("default")];
> });
@@ -724,11 +724,11 @@ def get_aliased_odoo_define_content(module_path, content):
alias = matchobj['alias']
if alias:
if matchobj['default']:
return """\nodoo.define(`%s`, async function(require) {
return """\nodoo.define(`%s`, function (require) {
return require('%s');
});\n""" % (alias, module_path)
else:
return """\nodoo.define(`%s`, async function(require) {
return """\nodoo.define(`%s`, function (require) {
return require('%s')[Symbol.for("default")];
});\n""" % (alias, module_path)