mage-obsidian 2.0.0 → 2.2.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/dist/cli/buildThemes.d.ts +3 -0
- package/dist/cli/buildThemes.d.ts.map +1 -0
- package/{src/cli/buildThemes.ts → dist/cli/buildThemes.js} +77 -121
- package/dist/cli/buildThemes.js.map +1 -0
- package/dist/config/default.d.ts +16 -0
- package/dist/config/default.d.ts.map +1 -0
- package/{src/config/default.ts → dist/config/default.js} +2 -11
- package/dist/config/default.js.map +1 -0
- package/dist/core/configResolver.d.ts +38 -0
- package/dist/core/configResolver.d.ts.map +1 -0
- package/{src/core/configResolver.ts → dist/core/configResolver.js} +21 -60
- package/dist/core/configResolver.js.map +1 -0
- package/dist/core/contractValidator.d.ts +16 -0
- package/dist/core/contractValidator.d.ts.map +1 -0
- package/{src/core/contractValidator.ts → dist/core/contractValidator.js} +3 -10
- package/dist/core/contractValidator.js.map +1 -0
- package/dist/core/cssResolver.d.ts +5 -0
- package/dist/core/cssResolver.d.ts.map +1 -0
- package/{src/core/cssResolver.ts → dist/core/cssResolver.js} +26 -53
- package/dist/core/cssResolver.js.map +1 -0
- package/dist/core/generateInterceptors.d.ts +10 -0
- package/dist/core/generateInterceptors.d.ts.map +1 -0
- package/{src/core/generateInterceptors.ts → dist/core/generateInterceptors.js} +55 -109
- package/dist/core/generateInterceptors.js.map +1 -0
- package/dist/core/generateJsconfig.d.ts +45 -0
- package/dist/core/generateJsconfig.d.ts.map +1 -0
- package/{src/core/generateJsconfig.ts → dist/core/generateJsconfig.js} +32 -55
- package/dist/core/generateJsconfig.js.map +1 -0
- package/dist/core/moduleResolver.d.ts +22 -0
- package/dist/core/moduleResolver.d.ts.map +1 -0
- package/{src/core/moduleResolver.ts → dist/core/moduleResolver.js} +28 -62
- package/dist/core/moduleResolver.js.map +1 -0
- package/dist/core/preCompileFiles.d.ts +6 -0
- package/dist/core/preCompileFiles.d.ts.map +1 -0
- package/{src/core/preCompileFiles.ts → dist/core/preCompileFiles.js} +22 -48
- package/dist/core/preCompileFiles.js.map +1 -0
- package/dist/core/preCompileMagentoFiles.d.ts +3 -0
- package/dist/core/preCompileMagentoFiles.d.ts.map +1 -0
- package/{src/core/preCompileMagentoFiles.ts → dist/core/preCompileMagentoFiles.js} +4 -10
- package/dist/core/preCompileMagentoFiles.js.map +1 -0
- package/dist/core/themeResolverSync.d.ts +6 -0
- package/dist/core/themeResolverSync.d.ts.map +1 -0
- package/{src/core/themeResolverSync.ts → dist/core/themeResolverSync.js} +25 -26
- package/dist/core/themeResolverSync.js.map +1 -0
- package/dist/runtime/i18nCore.d.ts +71 -0
- package/dist/runtime/i18nCore.d.ts.map +1 -0
- package/{src/runtime/i18nCore.ts → dist/runtime/i18nCore.js} +47 -49
- package/dist/runtime/i18nCore.js.map +1 -0
- package/dist/runtime/interceptorManager.d.ts +45 -0
- package/dist/runtime/interceptorManager.d.ts.map +1 -0
- package/{src/runtime/interceptorManager.ts → dist/runtime/interceptorManager.js} +14 -72
- package/dist/runtime/interceptorManager.js.map +1 -0
- package/dist/runtime/islands.d.ts +45 -0
- package/dist/runtime/islands.d.ts.map +1 -0
- package/{src/runtime/islands.ts → dist/runtime/islands.js} +5 -30
- package/dist/runtime/islands.js.map +1 -0
- package/dist/runtime/sectionStoreCore.d.ts +108 -0
- package/dist/runtime/sectionStoreCore.d.ts.map +1 -0
- package/{src/runtime/sectionStoreCore.ts → dist/runtime/sectionStoreCore.js} +23 -93
- package/dist/runtime/sectionStoreCore.js.map +1 -0
- package/dist/utils/findComponents.d.ts +17 -0
- package/dist/utils/findComponents.d.ts.map +1 -0
- package/dist/utils/findComponents.js +66 -0
- package/dist/utils/findComponents.js.map +1 -0
- package/dist/utils/runWithConcurrency.d.ts +10 -0
- package/dist/utils/runWithConcurrency.d.ts.map +1 -0
- package/{src/utils/runWithConcurrency.ts → dist/utils/runWithConcurrency.js} +3 -9
- package/dist/utils/runWithConcurrency.js.map +1 -0
- package/dist/vite/defaultNodeResolver.d.ts +9 -0
- package/dist/vite/defaultNodeResolver.d.ts.map +1 -0
- package/{src/vite/defaultNodeResolver.ts → dist/vite/defaultNodeResolver.js} +3 -1
- package/dist/vite/defaultNodeResolver.js.map +1 -0
- package/dist/vite/inheritAssetsModuleResolver.d.ts +8 -0
- package/dist/vite/inheritAssetsModuleResolver.d.ts.map +1 -0
- package/{src/vite/inheritAssetsModuleResolver.ts → dist/vite/inheritAssetsModuleResolver.js} +6 -20
- package/dist/vite/inheritAssetsModuleResolver.js.map +1 -0
- package/dist/vite/inheritModuleResolver.d.ts +8 -0
- package/dist/vite/inheritModuleResolver.d.ts.map +1 -0
- package/{src/vite/inheritModuleResolver.ts → dist/vite/inheritModuleResolver.js} +4 -9
- package/dist/vite/inheritModuleResolver.js.map +1 -0
- package/dist/vite/interceptorsPlugin.d.ts +10 -0
- package/dist/vite/interceptorsPlugin.d.ts.map +1 -0
- package/{src/vite/interceptorsPlugin.ts → dist/vite/interceptorsPlugin.js} +12 -29
- package/dist/vite/interceptorsPlugin.js.map +1 -0
- package/dist/vite/magentoHrmRewrite.d.ts +6 -0
- package/dist/vite/magentoHrmRewrite.d.ts.map +1 -0
- package/{src/vite/magentoHrmRewrite.ts → dist/vite/magentoHrmRewrite.js} +16 -15
- package/dist/vite/magentoHrmRewrite.js.map +1 -0
- package/dist/vite/sharedPlugins.d.ts +35 -0
- package/dist/vite/sharedPlugins.d.ts.map +1 -0
- package/{src/vite/sharedPlugins.ts → dist/vite/sharedPlugins.js} +7 -9
- package/dist/vite/sharedPlugins.js.map +1 -0
- package/dist/vite/themeSourceWatcher.d.ts +16 -0
- package/dist/vite/themeSourceWatcher.d.ts.map +1 -0
- package/{src/vite/themeSourceWatcher.ts → dist/vite/themeSourceWatcher.js} +19 -24
- package/dist/vite/themeSourceWatcher.js.map +1 -0
- package/dist/vite/unresolvedModuleGuard.d.ts +17 -0
- package/dist/vite/unresolvedModuleGuard.d.ts.map +1 -0
- package/{src/vite/unresolvedModuleGuard.ts → dist/vite/unresolvedModuleGuard.js} +27 -27
- package/dist/vite/unresolvedModuleGuard.js.map +1 -0
- package/package.json +60 -10
- package/.github/workflows/ci.yml +0 -38
- package/.github/workflows/publish.yml +0 -36
- package/.oxlintrc.json +0 -19
- package/.prettierignore +0 -7
- package/.prettierrc.json +0 -7
- package/eslint.config.js +0 -24
- package/pnpm-workspace.yaml +0 -4
- package/src/utils/findComponents.ts +0 -83
- package/tsconfig.json +0 -34
- package/vitest.config.js +0 -18
- /package/{src → dist}/config/eslint.js +0 -0
- /package/{src → dist}/templates/base_main_js_file.js +0 -0
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Fail-loud guard for the framework's `Vendor_Module::` import notation. It runs
|
|
3
|
+
* last in the resolver chain (`order: "post"`), so a `::` specifier only reaches
|
|
4
|
+
* it when none of the earlier resolvers (component, asset, node) could resolve
|
|
5
|
+
* it — i.e. a typo or a missing file. Without this, Rollup externalizes the
|
|
6
|
+
* unknown specifier silently and the import breaks at runtime with no clear
|
|
7
|
+
* cause; here it becomes a build/dev error naming the specifier, the importer,
|
|
8
|
+
* and the closest valid alternatives.
|
|
9
|
+
*/
|
|
10
|
+
export default function unresolvedModuleGuard(): {
|
|
11
|
+
name: string;
|
|
12
|
+
resolveId: {
|
|
13
|
+
order: string;
|
|
14
|
+
handler(id: string, importer?: string): void;
|
|
15
|
+
};
|
|
16
|
+
};
|
|
17
|
+
//# sourceMappingURL=unresolvedModuleGuard.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"unresolvedModuleGuard.d.ts","sourceRoot":"","sources":["../../src/vite/unresolvedModuleGuard.ts"],"names":[],"mappings":"AA6DA;;;;;;;;GAQG;AACH,MAAM,CAAC,OAAO,UAAU,qBAAqB;;;;oBAKrB,MAAM,aAAa,MAAM;;EAWhD"}
|
|
@@ -1,16 +1,16 @@
|
|
|
1
|
-
import moduleResolver from "../core/moduleResolver.
|
|
2
|
-
|
|
1
|
+
import moduleResolver from "../core/moduleResolver.js";
|
|
3
2
|
// The part before `::` must look like a Magento module (Vendor_Module) or the
|
|
4
3
|
// special `Theme` namespace. This keeps the guard from firing on unrelated ids
|
|
5
4
|
// (virtual modules, already-resolved absolute paths) that happen to contain `::`.
|
|
6
5
|
const NAMESPACE_PATTERN = /^(Theme|[A-Z][A-Za-z0-9_]*)$/;
|
|
7
|
-
|
|
8
|
-
function distance(a: string, b: string): number {
|
|
6
|
+
function distance(a, b) {
|
|
9
7
|
const rows = a.length + 1;
|
|
10
8
|
const cols = b.length + 1;
|
|
11
9
|
const dp = Array.from({ length: rows }, () => Array.from({ length: cols }, () => 0));
|
|
12
|
-
for (let i = 0; i < rows; i++)
|
|
13
|
-
|
|
10
|
+
for (let i = 0; i < rows; i++)
|
|
11
|
+
dp[i][0] = i;
|
|
12
|
+
for (let j = 0; j < cols; j++)
|
|
13
|
+
dp[0][j] = j;
|
|
14
14
|
for (let i = 1; i < rows; i++) {
|
|
15
15
|
for (let j = 1; j < cols; j++) {
|
|
16
16
|
const cost = a[i - 1] === b[j - 1] ? 0 : 1;
|
|
@@ -19,12 +19,12 @@ function distance(a: string, b: string): number {
|
|
|
19
19
|
}
|
|
20
20
|
return dp[a.length][b.length];
|
|
21
21
|
}
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
let keys: string[];
|
|
22
|
+
function suggest(namespace, target) {
|
|
23
|
+
let keys;
|
|
25
24
|
try {
|
|
26
25
|
keys = Object.keys(moduleResolver.getAllJsVueFilesWithInheritanceCached());
|
|
27
|
-
}
|
|
26
|
+
}
|
|
27
|
+
catch {
|
|
28
28
|
// No precompiled cache yet — nothing to suggest from.
|
|
29
29
|
return [];
|
|
30
30
|
}
|
|
@@ -32,33 +32,30 @@ function suggest(namespace: string, target: string): string[] {
|
|
|
32
32
|
return keys
|
|
33
33
|
.filter((key) => key.startsWith(prefix))
|
|
34
34
|
.map((key) => `${namespace}::${key.slice(prefix.length)}`)
|
|
35
|
-
.map((candidate) => [candidate, distance(candidate, target)]
|
|
35
|
+
.map((candidate) => [candidate, distance(candidate, target)])
|
|
36
36
|
.sort((a, b) => a[1] - b[1])
|
|
37
37
|
.slice(0, 3)
|
|
38
38
|
.map(([candidate]) => candidate);
|
|
39
39
|
}
|
|
40
|
-
|
|
41
|
-
function buildMessage(id: string, namespace: string, rest: string, importer?: string): string {
|
|
40
|
+
function buildMessage(id, namespace, rest, importer) {
|
|
42
41
|
const from = importer ? `\n imported by: ${importer}` : "";
|
|
43
|
-
|
|
44
|
-
let hint: string;
|
|
42
|
+
let hint;
|
|
45
43
|
if (rest.startsWith("assets/")) {
|
|
46
44
|
hint =
|
|
47
45
|
`\n Asset not found. Expected a theme override at` +
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
}
|
|
46
|
+
` <theme>/${namespace}/web/${rest} or the module at` +
|
|
47
|
+
` <module>/view/frontend/web/${rest}.`;
|
|
48
|
+
}
|
|
49
|
+
else {
|
|
51
50
|
const suggestions = suggest(namespace, id);
|
|
52
51
|
hint = suggestions.length
|
|
53
52
|
? `\n Did you mean:\n${suggestions.map((s) => ` - ${s}`).join("\n")}`
|
|
54
53
|
: `\n Nothing is registered under "${namespace}". Is the module/theme enabled` +
|
|
55
|
-
|
|
56
|
-
|
|
54
|
+
` and compatible, and the contract regenerated` +
|
|
55
|
+
` (bin/magento mage-obsidian:frontend:config --generate)?`;
|
|
57
56
|
}
|
|
58
|
-
|
|
59
57
|
return `[mage-obsidian] Unresolved import "${id}".${from}${hint}`;
|
|
60
58
|
}
|
|
61
|
-
|
|
62
59
|
/**
|
|
63
60
|
* Fail-loud guard for the framework's `Vendor_Module::` import notation. It runs
|
|
64
61
|
* last in the resolver chain (`order: "post"`), so a `::` specifier only reaches
|
|
@@ -73,15 +70,18 @@ export default function unresolvedModuleGuard() {
|
|
|
73
70
|
name: "unresolved-module-guard",
|
|
74
71
|
resolveId: {
|
|
75
72
|
order: "post",
|
|
76
|
-
handler(id
|
|
77
|
-
if (!id || id[0] === "\0")
|
|
73
|
+
handler(id, importer) {
|
|
74
|
+
if (!id || id[0] === "\0")
|
|
75
|
+
return;
|
|
78
76
|
const separator = id.indexOf("::");
|
|
79
|
-
if (separator === -1)
|
|
77
|
+
if (separator === -1)
|
|
78
|
+
return;
|
|
80
79
|
const namespace = id.slice(0, separator);
|
|
81
|
-
if (!NAMESPACE_PATTERN.test(namespace))
|
|
82
|
-
|
|
80
|
+
if (!NAMESPACE_PATTERN.test(namespace))
|
|
81
|
+
return;
|
|
83
82
|
throw new Error(buildMessage(id, namespace, id.slice(separator + 2), importer));
|
|
84
83
|
},
|
|
85
84
|
},
|
|
86
85
|
};
|
|
87
86
|
}
|
|
87
|
+
//# sourceMappingURL=unresolvedModuleGuard.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"unresolvedModuleGuard.js","sourceRoot":"","sources":["../../src/vite/unresolvedModuleGuard.ts"],"names":[],"mappings":"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"}
|
package/package.json
CHANGED
|
@@ -1,12 +1,16 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "mage-obsidian",
|
|
3
|
-
"version": "2.
|
|
3
|
+
"version": "2.2.0",
|
|
4
4
|
"description": "Mage Obsidian Ultis",
|
|
5
5
|
"repository": {
|
|
6
6
|
"type": "git",
|
|
7
7
|
"url": "git+https://github.com/mage-obsidian/js-package-utils.git"
|
|
8
8
|
},
|
|
9
|
-
"main": "./
|
|
9
|
+
"main": "./dist/cli/buildThemes.js",
|
|
10
|
+
"types": "./dist/cli/buildThemes.d.ts",
|
|
11
|
+
"files": [
|
|
12
|
+
"dist"
|
|
13
|
+
],
|
|
10
14
|
"keywords": [
|
|
11
15
|
"Magento",
|
|
12
16
|
"MageObsidian"
|
|
@@ -15,7 +19,7 @@
|
|
|
15
19
|
"license": "MIT",
|
|
16
20
|
"type": "module",
|
|
17
21
|
"bin": {
|
|
18
|
-
"mage-obsidian:build-themes": "./
|
|
22
|
+
"mage-obsidian:build-themes": "./dist/cli/buildThemes.js"
|
|
19
23
|
},
|
|
20
24
|
"imports": {
|
|
21
25
|
"#core/*": "./src/core/*",
|
|
@@ -26,13 +30,58 @@
|
|
|
26
30
|
"#config/*": "./src/config/*"
|
|
27
31
|
},
|
|
28
32
|
"exports": {
|
|
29
|
-
".":
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
"./
|
|
34
|
-
|
|
35
|
-
|
|
33
|
+
".": {
|
|
34
|
+
"types": "./dist/cli/buildThemes.d.ts",
|
|
35
|
+
"default": "./dist/cli/buildThemes.js"
|
|
36
|
+
},
|
|
37
|
+
"./core/*.ts": {
|
|
38
|
+
"types": "./dist/core/*.d.ts",
|
|
39
|
+
"default": "./dist/core/*.js"
|
|
40
|
+
},
|
|
41
|
+
"./core/*": {
|
|
42
|
+
"types": "./dist/core/*.d.ts",
|
|
43
|
+
"default": "./dist/core/*.js"
|
|
44
|
+
},
|
|
45
|
+
"./vite/*.ts": {
|
|
46
|
+
"types": "./dist/vite/*.d.ts",
|
|
47
|
+
"default": "./dist/vite/*.js"
|
|
48
|
+
},
|
|
49
|
+
"./vite/*": {
|
|
50
|
+
"types": "./dist/vite/*.d.ts",
|
|
51
|
+
"default": "./dist/vite/*.js"
|
|
52
|
+
},
|
|
53
|
+
"./runtime/*.ts": {
|
|
54
|
+
"types": "./dist/runtime/*.d.ts",
|
|
55
|
+
"default": "./dist/runtime/*.js"
|
|
56
|
+
},
|
|
57
|
+
"./runtime/*": {
|
|
58
|
+
"types": "./dist/runtime/*.d.ts",
|
|
59
|
+
"default": "./dist/runtime/*.js"
|
|
60
|
+
},
|
|
61
|
+
"./cli/*.ts": {
|
|
62
|
+
"types": "./dist/cli/*.d.ts",
|
|
63
|
+
"default": "./dist/cli/*.js"
|
|
64
|
+
},
|
|
65
|
+
"./cli/*": {
|
|
66
|
+
"types": "./dist/cli/*.d.ts",
|
|
67
|
+
"default": "./dist/cli/*.js"
|
|
68
|
+
},
|
|
69
|
+
"./utils/*.ts": {
|
|
70
|
+
"types": "./dist/utils/*.d.ts",
|
|
71
|
+
"default": "./dist/utils/*.js"
|
|
72
|
+
},
|
|
73
|
+
"./utils/*": {
|
|
74
|
+
"types": "./dist/utils/*.d.ts",
|
|
75
|
+
"default": "./dist/utils/*.js"
|
|
76
|
+
},
|
|
77
|
+
"./config/*.ts": {
|
|
78
|
+
"types": "./dist/config/*.d.ts",
|
|
79
|
+
"default": "./dist/config/*.js"
|
|
80
|
+
},
|
|
81
|
+
"./config/*": {
|
|
82
|
+
"types": "./dist/config/*.d.ts",
|
|
83
|
+
"default": "./dist/config/*.js"
|
|
84
|
+
}
|
|
36
85
|
},
|
|
37
86
|
"dependencies": {
|
|
38
87
|
"chalk": "^5.4.1",
|
|
@@ -55,6 +104,7 @@
|
|
|
55
104
|
"vitest": "^3.2.6"
|
|
56
105
|
},
|
|
57
106
|
"scripts": {
|
|
107
|
+
"build": "tsc -p tsconfig.build.json && node scripts/copy-assets.mjs",
|
|
58
108
|
"test": "vitest run",
|
|
59
109
|
"test:watch": "vitest",
|
|
60
110
|
"typecheck": "tsc --noEmit",
|
package/.github/workflows/ci.yml
DELETED
|
@@ -1,38 +0,0 @@
|
|
|
1
|
-
name: CI
|
|
2
|
-
|
|
3
|
-
on:
|
|
4
|
-
push:
|
|
5
|
-
pull_request:
|
|
6
|
-
|
|
7
|
-
jobs:
|
|
8
|
-
unit:
|
|
9
|
-
name: Unit tests (Node ${{ matrix.node }})
|
|
10
|
-
runs-on: ubuntu-latest
|
|
11
|
-
strategy:
|
|
12
|
-
matrix:
|
|
13
|
-
node: ["20", "22"]
|
|
14
|
-
steps:
|
|
15
|
-
- uses: actions/checkout@v4
|
|
16
|
-
- uses: actions/setup-node@v4
|
|
17
|
-
with:
|
|
18
|
-
node-version: ${{ matrix.node }}
|
|
19
|
-
- run: npm install
|
|
20
|
-
- run: npm test
|
|
21
|
-
|
|
22
|
-
lint:
|
|
23
|
-
name: Lint & format
|
|
24
|
-
runs-on: ubuntu-latest
|
|
25
|
-
steps:
|
|
26
|
-
- uses: actions/checkout@v4
|
|
27
|
-
- uses: actions/setup-node@v4
|
|
28
|
-
with:
|
|
29
|
-
node-version: "22"
|
|
30
|
-
- run: npm install
|
|
31
|
-
- name: Typecheck
|
|
32
|
-
run: npm run typecheck
|
|
33
|
-
- name: Oxlint (fast pre-filter)
|
|
34
|
-
run: npm run lint:fast
|
|
35
|
-
- name: ESLint
|
|
36
|
-
run: npm run lint
|
|
37
|
-
- name: Prettier format check
|
|
38
|
-
run: npm run format:check
|
|
@@ -1,36 +0,0 @@
|
|
|
1
|
-
name: Publish to npm
|
|
2
|
-
|
|
3
|
-
on:
|
|
4
|
-
push:
|
|
5
|
-
branches:
|
|
6
|
-
- master
|
|
7
|
-
|
|
8
|
-
jobs:
|
|
9
|
-
publish:
|
|
10
|
-
runs-on: ubuntu-latest
|
|
11
|
-
permissions:
|
|
12
|
-
id-token: write
|
|
13
|
-
contents: read
|
|
14
|
-
|
|
15
|
-
steps:
|
|
16
|
-
- name: Checkout code
|
|
17
|
-
uses: actions/checkout@v4
|
|
18
|
-
|
|
19
|
-
- uses: pnpm/action-setup@v4
|
|
20
|
-
name: Install pnpm
|
|
21
|
-
with:
|
|
22
|
-
version: 11
|
|
23
|
-
run_install: false
|
|
24
|
-
|
|
25
|
-
- name: Install Node.js
|
|
26
|
-
uses: actions/setup-node@v4
|
|
27
|
-
with:
|
|
28
|
-
node-version: 22
|
|
29
|
-
cache: "pnpm"
|
|
30
|
-
registry-url: "https://registry.npmjs.org"
|
|
31
|
-
|
|
32
|
-
- name: Install dependencies
|
|
33
|
-
run: pnpm install
|
|
34
|
-
|
|
35
|
-
- name: Publish to npm
|
|
36
|
-
run: pnpm publish --no-git-checks
|
package/.oxlintrc.json
DELETED
|
@@ -1,19 +0,0 @@
|
|
|
1
|
-
{
|
|
2
|
-
"$schema": "./node_modules/oxlint/configuration_schema.json",
|
|
3
|
-
"ignorePatterns": [
|
|
4
|
-
"node_modules",
|
|
5
|
-
".precompiled",
|
|
6
|
-
"src/__tests__/magento_scenarios",
|
|
7
|
-
"src/__tests__/fixtures",
|
|
8
|
-
"src/__tests__/__mocks__",
|
|
9
|
-
"src/templates"
|
|
10
|
-
],
|
|
11
|
-
"categories": {
|
|
12
|
-
"correctness": "error"
|
|
13
|
-
},
|
|
14
|
-
"env": {
|
|
15
|
-
"node": true,
|
|
16
|
-
"browser": true,
|
|
17
|
-
"es2024": true
|
|
18
|
-
}
|
|
19
|
-
}
|
package/.prettierignore
DELETED
package/.prettierrc.json
DELETED
package/eslint.config.js
DELETED
|
@@ -1,24 +0,0 @@
|
|
|
1
|
-
import globals from "globals";
|
|
2
|
-
import preset from "./src/config/eslint.js";
|
|
3
|
-
|
|
4
|
-
// The build engine itself: ESM, Node runtime. Data trees under __tests__ and
|
|
5
|
-
// generated/template files are not linted.
|
|
6
|
-
export default [
|
|
7
|
-
{
|
|
8
|
-
ignores: [
|
|
9
|
-
"node_modules/**",
|
|
10
|
-
".precompiled/**",
|
|
11
|
-
"src/__tests__/magento_scenarios/**",
|
|
12
|
-
"src/__tests__/fixtures/**",
|
|
13
|
-
"src/__tests__/__mocks__/**",
|
|
14
|
-
"src/templates/**",
|
|
15
|
-
],
|
|
16
|
-
},
|
|
17
|
-
...preset,
|
|
18
|
-
{
|
|
19
|
-
files: ["**/*.test.{js,ts}", "src/__tests__/**"],
|
|
20
|
-
languageOptions: {
|
|
21
|
-
globals: { ...globals.vitest },
|
|
22
|
-
},
|
|
23
|
-
},
|
|
24
|
-
];
|
package/pnpm-workspace.yaml
DELETED
|
@@ -1,83 +0,0 @@
|
|
|
1
|
-
import fs from "fs";
|
|
2
|
-
import path from "path";
|
|
3
|
-
|
|
4
|
-
/**
|
|
5
|
-
* Recursively searches a module's source folders for component files — matched by
|
|
6
|
-
* the extensions each folder declares (`directory.ext`) — and organizes them into
|
|
7
|
-
* an object.
|
|
8
|
-
*
|
|
9
|
-
* @param {string} moduleName - The name of the module to associate the files with.
|
|
10
|
-
* @param moduleDir
|
|
11
|
-
* @param directories
|
|
12
|
-
* @returns {Promise<Object>} - A promise that resolves to an object where:
|
|
13
|
-
* - The keys are unique identifiers for the files, formed by combining
|
|
14
|
-
* subdirectories and file names (e.g., `Vendor_ModuleName/FilePath`).
|
|
15
|
-
* - The values are the full relative paths to the files within the `components` folder.
|
|
16
|
-
* @throws {Error} - Throws an error if duplicate file names (with different extensions) are found.
|
|
17
|
-
*/
|
|
18
|
-
async function getFilesFromFolders(moduleName, moduleDir, directories) {
|
|
19
|
-
const componentsDir = path.resolve(moduleDir);
|
|
20
|
-
// oxlint-disable-next-line only-used-in-recursion
|
|
21
|
-
const getFilesFromFolderWithExt = async (dir, folderToSearch, extArr, baseDir = "") => {
|
|
22
|
-
// console.log(moduleName, dir, folderToSearch, extArr, baseDir = "");
|
|
23
|
-
if (!fs.existsSync(dir)) return [];
|
|
24
|
-
const entries = await fs.promises.readdir(dir, { withFileTypes: true });
|
|
25
|
-
const keyRegistered = [];
|
|
26
|
-
|
|
27
|
-
const files = await Promise.all(
|
|
28
|
-
entries.map(async (entry) => {
|
|
29
|
-
const fullPath = path.join(dir, entry.name);
|
|
30
|
-
const relativePath = path.join(baseDir, entry.name);
|
|
31
|
-
if (entry.isDirectory()) {
|
|
32
|
-
return await getFilesFromFolderWithExt(
|
|
33
|
-
fullPath,
|
|
34
|
-
folderToSearch,
|
|
35
|
-
extArr,
|
|
36
|
-
relativePath,
|
|
37
|
-
);
|
|
38
|
-
} else if (
|
|
39
|
-
entry.isFile() &&
|
|
40
|
-
extArr.some((ext) => entry.name.endsWith(`.${ext}`)) &&
|
|
41
|
-
// Skip co-located unit tests/specs so test-only deps
|
|
42
|
-
// (e.g. @vue/test-utils) never leak into the build.
|
|
43
|
-
!/\.(test|spec)\.[jt]sx?$/.test(entry.name)
|
|
44
|
-
) {
|
|
45
|
-
const fileName = path.parse(entry.name).name;
|
|
46
|
-
let key = baseDir === "" ? fileName : `${baseDir}/${fileName}`;
|
|
47
|
-
key = `${moduleName}/${folderToSearch}/${key}`;
|
|
48
|
-
const filePath = path.join(dir, entry.name);
|
|
49
|
-
if (keyRegistered.includes(key)) {
|
|
50
|
-
throw new Error(`Duplicate file names detected: The file "${filePath}".`);
|
|
51
|
-
}
|
|
52
|
-
keyRegistered.push(key);
|
|
53
|
-
return { [key]: filePath };
|
|
54
|
-
}
|
|
55
|
-
return null;
|
|
56
|
-
}),
|
|
57
|
-
);
|
|
58
|
-
return files.filter(Boolean).flat();
|
|
59
|
-
};
|
|
60
|
-
|
|
61
|
-
try {
|
|
62
|
-
let result = [];
|
|
63
|
-
for (const directory of directories) {
|
|
64
|
-
const folderPath = path.resolve(componentsDir, directory.src);
|
|
65
|
-
const filesArray = await getFilesFromFolderWithExt(
|
|
66
|
-
folderPath,
|
|
67
|
-
directory.src,
|
|
68
|
-
directory.ext,
|
|
69
|
-
);
|
|
70
|
-
result.push(...filesArray);
|
|
71
|
-
}
|
|
72
|
-
result = result.reduce((acc, item) => Object.assign(acc, item), {});
|
|
73
|
-
|
|
74
|
-
return result;
|
|
75
|
-
} catch (err) {
|
|
76
|
-
throw new Error(
|
|
77
|
-
`Error while processing JavaScript or Vue files in the components folder of module "${moduleName}": ${err.message}`,
|
|
78
|
-
{ cause: err },
|
|
79
|
-
);
|
|
80
|
-
}
|
|
81
|
-
}
|
|
82
|
-
|
|
83
|
-
export default getFilesFromFolders;
|
package/tsconfig.json
DELETED
|
@@ -1,34 +0,0 @@
|
|
|
1
|
-
{
|
|
2
|
-
"compilerOptions": {
|
|
3
|
-
"target": "ES2023",
|
|
4
|
-
"lib": ["ES2023", "DOM", "DOM.Iterable"],
|
|
5
|
-
"module": "NodeNext",
|
|
6
|
-
"moduleResolution": "NodeNext",
|
|
7
|
-
"types": ["node"],
|
|
8
|
-
|
|
9
|
-
// No build in dev: Vite and Node (>=22.18 type-stripping) consume the
|
|
10
|
-
// .ts sources directly. tsc is type-check only. Importing `.ts`
|
|
11
|
-
// specifiers is therefore allowed, and only erasable TS syntax is
|
|
12
|
-
// permitted so type-stripping never fails.
|
|
13
|
-
"noEmit": true,
|
|
14
|
-
"allowImportingTsExtensions": true,
|
|
15
|
-
"erasableSyntaxOnly": true,
|
|
16
|
-
"verbatimModuleSyntax": true,
|
|
17
|
-
|
|
18
|
-
// Author components stay JS; the engine is TS. allowJs keeps the mixed
|
|
19
|
-
// tree resolvable without forcing checkJs on legacy/JS files.
|
|
20
|
-
"allowJs": true,
|
|
21
|
-
"checkJs": false,
|
|
22
|
-
|
|
23
|
-
// Lenient baseline for the JS->TS migration: the tree is now TypeScript
|
|
24
|
-
// and type-strippable, but not yet annotated. strict is the ratchet
|
|
25
|
-
// target, tightened progressively per subdirectory in follow-up work.
|
|
26
|
-
"strict": false,
|
|
27
|
-
"skipLibCheck": true,
|
|
28
|
-
"resolveJsonModule": true,
|
|
29
|
-
"esModuleInterop": true,
|
|
30
|
-
"forceConsistentCasingInFileNames": true
|
|
31
|
-
},
|
|
32
|
-
"include": ["src/**/*.ts", "src/**/*.js", "*.ts", "*.js"],
|
|
33
|
-
"exclude": ["node_modules", ".precompiled", "src/__tests__/magento_scenarios"]
|
|
34
|
-
}
|
package/vitest.config.js
DELETED
|
@@ -1,18 +0,0 @@
|
|
|
1
|
-
import { defineConfig } from "vitest/config";
|
|
2
|
-
|
|
3
|
-
// Engine unit tests run in Node. Vitest transpiles TS/ESM natively, replacing
|
|
4
|
-
// the `node --experimental-vm-modules` + Jest setup. Data trees under
|
|
5
|
-
// __tests__ are fixtures, not suites.
|
|
6
|
-
export default defineConfig({
|
|
7
|
-
test: {
|
|
8
|
-
environment: "node",
|
|
9
|
-
globals: true,
|
|
10
|
-
include: ["src/__tests__/**/*.test.{js,ts}"],
|
|
11
|
-
exclude: [
|
|
12
|
-
"**/node_modules/**",
|
|
13
|
-
"src/__tests__/magento_scenarios/**",
|
|
14
|
-
"src/__tests__/fixtures/**",
|
|
15
|
-
"src/__tests__/__mocks__/**",
|
|
16
|
-
],
|
|
17
|
-
},
|
|
18
|
-
});
|
|
File without changes
|
|
File without changes
|