mage-obsidian 1.0.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/jest.config.js +5 -0
- package/package.json +37 -0
- package/src/__tests__/__mocks__/configResolver.js +35 -0
- package/src/__tests__/magento_scenarios/app/code/Vendor/ModuleNameA/view/frontend/web/components/ComponentA.vue +0 -0
- package/src/__tests__/magento_scenarios/app/code/Vendor/ModuleNameA/view/frontend/web/components/ComponentB.vue +0 -0
- package/src/__tests__/magento_scenarios/app/code/Vendor/ModuleNameA/view/frontend/web/css/module.extend.css +0 -0
- package/src/__tests__/magento_scenarios/app/code/Vendor/ModuleNameA/view/frontend/web/js/main.js +0 -0
- package/src/__tests__/magento_scenarios/app/code/Vendor/ModuleNameA/view/frontend/web/main.js +0 -0
- package/src/__tests__/magento_scenarios/app/code/Vendor/ModuleNameA/view/frontend/web/module.config.cjs +9 -0
- package/src/__tests__/magento_scenarios/app/code/Vendor/ModuleNameB/view/frontend/web/components/ComponentA.vue +0 -0
- package/src/__tests__/magento_scenarios/app/code/Vendor/ModuleNameB/view/frontend/web/components/ComponentB.vue +0 -0
- package/src/__tests__/magento_scenarios/app/code/Vendor/ModuleNameB/view/frontend/web/css/module.extend.css +2 -0
- package/src/__tests__/magento_scenarios/app/code/Vendor/ModuleNameB/view/frontend/web/js/main.js +0 -0
- package/src/__tests__/magento_scenarios/app/code/Vendor/ModuleNameB/view/frontend/web/module.config.cjs +7 -0
- package/src/__tests__/magento_scenarios/app/code/Vendor/ModuleNameC/view/frontend/web/components/ComponentA.vue +0 -0
- package/src/__tests__/magento_scenarios/app/code/Vendor/ModuleNameC/view/frontend/web/components/ComponentB.vue +0 -0
- package/src/__tests__/magento_scenarios/app/code/Vendor/ModuleNameC/view/frontend/web/css/module.extend.css +2 -0
- package/src/__tests__/magento_scenarios/app/code/Vendor/ModuleNameC/view/frontend/web/js/main.js +0 -0
- package/src/__tests__/magento_scenarios/app/code/Vendor/ModuleNameC/view/frontend/web/module.config.cjs +7 -0
- package/src/__tests__/magento_scenarios/app/design/frontend/Vendor/theme-a/Vendor_ModuleNameA/web/components/ComponentA.vue +0 -0
- package/src/__tests__/magento_scenarios/app/design/frontend/Vendor/theme-a/Vendor_ModuleNameA/web/components/ComponentB.vue +0 -0
- package/src/__tests__/magento_scenarios/app/design/frontend/Vendor/theme-a/Vendor_ModuleNameA/web/css/module.extend.css +0 -0
- package/src/__tests__/magento_scenarios/app/design/frontend/Vendor/theme-a/Vendor_ModuleNameA/web/js/main.js +0 -0
- package/src/__tests__/magento_scenarios/app/design/frontend/Vendor/theme-a/Vendor_ModuleNameA/web/module.config.cjs +8 -0
- package/src/__tests__/magento_scenarios/app/design/frontend/Vendor/theme-a/Vendor_ModuleNameB/web/components/ComponentA.vue +0 -0
- package/src/__tests__/magento_scenarios/app/design/frontend/Vendor/theme-a/Vendor_ModuleNameB/web/components/ComponentB.vue +0 -0
- package/src/__tests__/magento_scenarios/app/design/frontend/Vendor/theme-a/Vendor_ModuleNameB/web/css/module.extend.css +0 -0
- package/src/__tests__/magento_scenarios/app/design/frontend/Vendor/theme-a/Vendor_ModuleNameB/web/js/main.js +0 -0
- package/src/__tests__/magento_scenarios/app/design/frontend/Vendor/theme-a/Vendor_ModuleNameB/web/module.config.cjs +7 -0
- package/src/__tests__/magento_scenarios/app/design/frontend/Vendor/theme-a/Vendor_ModuleNameNoConfig/web/components/ComponentA.vue +0 -0
- package/src/__tests__/magento_scenarios/app/design/frontend/Vendor/theme-a/Vendor_ModuleNameNoConfig/web/components/ComponentB.vue +0 -0
- package/src/__tests__/magento_scenarios/app/design/frontend/Vendor/theme-a/Vendor_ModuleNameNoConfig/web/css/module.extend.css +0 -0
- package/src/__tests__/magento_scenarios/app/design/frontend/Vendor/theme-a/Vendor_ModuleNameNoConfig/web/js/main.js +0 -0
- package/src/__tests__/magento_scenarios/app/design/frontend/Vendor/theme-a/Vendor_ModuleNameNoConfig/web/module.config.cjs +8 -0
- package/src/__tests__/magento_scenarios/app/design/frontend/Vendor/theme-a/web/components/ComponentA.vue +0 -0
- package/src/__tests__/magento_scenarios/app/design/frontend/Vendor/theme-a/web/components/ComponentB.vue +0 -0
- package/src/__tests__/magento_scenarios/app/design/frontend/Vendor/theme-a/web/css/tailwind.source.css +6 -0
- package/src/__tests__/magento_scenarios/app/design/frontend/Vendor/theme-a/web/js/main.js +0 -0
- package/src/__tests__/magento_scenarios/app/design/frontend/Vendor/theme-a/web/theme.config.cjs +18 -0
- package/src/__tests__/magento_scenarios/app/design/frontend/Vendor/theme-b/web/css/tailwind.source.css +6 -0
- package/src/__tests__/magento_scenarios/app/design/frontend/Vendor/theme-b/web/theme.config.cjs +22 -0
- package/src/__tests__/magento_scenarios/app/design/frontend/Vendor/theme-c/Vendor_ModuleNameB/web/components/ComponentA.vue +0 -0
- package/src/__tests__/magento_scenarios/app/design/frontend/Vendor/theme-c/Vendor_ModuleNameB/web/components/ComponentB.vue +0 -0
- package/src/__tests__/magento_scenarios/app/design/frontend/Vendor/theme-c/Vendor_ModuleNameB/web/css/module.extend.css +0 -0
- package/src/__tests__/magento_scenarios/app/design/frontend/Vendor/theme-c/Vendor_ModuleNameB/web/js/main.js +0 -0
- package/src/__tests__/magento_scenarios/app/design/frontend/Vendor/theme-c/Vendor_ModuleNameB/web/module.config.cjs +9 -0
- package/src/__tests__/magento_scenarios/app/design/frontend/Vendor/theme-c/web/css/tailwind.source.css +6 -0
- package/src/__tests__/magento_scenarios/app/design/frontend/Vendor/theme-c/web/theme.config.cjs +16 -0
- package/src/__tests__/magento_scenarios/app/design/frontend/Vendor/theme-d/web/css/tailwind.source.css +6 -0
- package/src/__tests__/magento_scenarios/app/design/frontend/Vendor/theme-d/web/theme.config.cjs +14 -0
- package/src/__tests__/magento_scenarios/app/etc/mage_obsidian_frontend_modules_a.json +53 -0
- package/src/__tests__/magento_scenarios/app/etc/mage_obsidian_frontend_modules_b.json +50 -0
- package/src/__tests__/service/inheritModuleResolver.test.js +69 -0
- package/src/__tests__/service/moduleResolver.test.js +192 -0
- package/src/__tests__/service/moduleResolverSync.test.js +187 -0
- package/src/__tests__/service/themeResolverSync.test.js +164 -0
- package/src/config/default.cjs +41 -0
- package/src/scripts/buildThemes.js +131 -0
- package/src/service/configResolver.cjs +39 -0
- package/src/service/cssResolver.js +55 -0
- package/src/service/inheritModuleResolver.js +57 -0
- package/src/service/magentoHrmRewrite.js +24 -0
- package/src/service/moduleResolver.js +103 -0
- package/src/service/moduleResolverSync.cjs +84 -0
- package/src/service/preCompileFiles.js +37 -0
- package/src/service/preCompileMagentoFiles.js +16 -0
- package/src/service/setupGlobals.js +19 -0
- package/src/service/tailwindResolver.cjs +15 -0
- package/src/service/themeResolverSync.cjs +80 -0
- package/src/templates/base_main_js_file.js +5 -0
- package/src/utils/findComponents.js +70 -0
|
@@ -0,0 +1,70 @@
|
|
|
1
|
+
import fs from "fs";
|
|
2
|
+
import path from "path";
|
|
3
|
+
|
|
4
|
+
/**
|
|
5
|
+
* Recursively searches for `.vue` and `.js` files in the `components` directory
|
|
6
|
+
* of a given module and organizes them into an object.
|
|
7
|
+
*
|
|
8
|
+
* @param {string} moduleName - The name of the module to associate the files with.
|
|
9
|
+
* @param moduleDir
|
|
10
|
+
* @param directories
|
|
11
|
+
* @returns {Promise<Object>} - A promise that resolves to an object where:
|
|
12
|
+
* - The keys are unique identifiers for the files, formed by combining
|
|
13
|
+
* subdirectories and file names (e.g., `Vendor_ModuleName/FilePath`).
|
|
14
|
+
* - The values are the full relative paths to the files within the `components` folder.
|
|
15
|
+
* @throws {Error} - Throws an error if duplicate file names (with different extensions) are found.
|
|
16
|
+
*/
|
|
17
|
+
async function getFilesFromFolders(
|
|
18
|
+
moduleName,
|
|
19
|
+
moduleDir,
|
|
20
|
+
directories
|
|
21
|
+
) {
|
|
22
|
+
const componentsDir = path.resolve(moduleDir);
|
|
23
|
+
const getFilesFromFolderWithExt = async (dir, folderToSearch, extArr, baseDir = "") => {
|
|
24
|
+
// console.log(moduleName, dir, folderToSearch, extArr, baseDir = "");
|
|
25
|
+
if (!fs.existsSync(dir)) return [];
|
|
26
|
+
const entries = await fs.promises.readdir(dir, { withFileTypes: true });
|
|
27
|
+
const keyRegistered = [];
|
|
28
|
+
|
|
29
|
+
const files = await Promise.all(
|
|
30
|
+
entries.map(async (entry) => {
|
|
31
|
+
const fullPath = path.join(dir, entry.name);
|
|
32
|
+
const relativePath = path.join(baseDir, entry.name);
|
|
33
|
+
if (entry.isDirectory()) {
|
|
34
|
+
return await getFilesFromFolderWithExt(fullPath, folderToSearch, extArr, relativePath);
|
|
35
|
+
} else if (entry.isFile() && (entry.name.endsWith(".vue") || entry.name.endsWith(".js"))) {
|
|
36
|
+
const fileName = path.parse(entry.name).name;
|
|
37
|
+
let key =
|
|
38
|
+
baseDir === ""
|
|
39
|
+
? fileName
|
|
40
|
+
: `${baseDir}/${fileName}`;
|
|
41
|
+
key = `${moduleName}/${folderToSearch}/${key}`;
|
|
42
|
+
const filePath = path.join(dir, entry.name);
|
|
43
|
+
if (keyRegistered.includes(key)) {
|
|
44
|
+
throw new Error(`Duplicate file names detected: The file "${filePath}".`);
|
|
45
|
+
}
|
|
46
|
+
keyRegistered.push(key);
|
|
47
|
+
return { [key]: filePath };
|
|
48
|
+
}
|
|
49
|
+
return null;
|
|
50
|
+
})
|
|
51
|
+
);
|
|
52
|
+
return files.filter(Boolean).flat();
|
|
53
|
+
};
|
|
54
|
+
|
|
55
|
+
try {
|
|
56
|
+
let result = [];
|
|
57
|
+
for (const directory of directories) {
|
|
58
|
+
const folderPath = path.resolve(componentsDir, directory.src);
|
|
59
|
+
const filesArray = await getFilesFromFolderWithExt(folderPath, directory.src, directory.ext);
|
|
60
|
+
result.push(...filesArray);
|
|
61
|
+
}
|
|
62
|
+
result = result.reduce((acc, item) => Object.assign(acc, item), {});
|
|
63
|
+
|
|
64
|
+
return result;
|
|
65
|
+
} catch (err) {
|
|
66
|
+
throw new Error(`Error while processing JavaScript or Vue files in the components folder of module "${moduleName}": ${err.message}`);
|
|
67
|
+
}
|
|
68
|
+
}
|
|
69
|
+
|
|
70
|
+
export default getFilesFromFolders;
|